shit poop 123

This commit is contained in:
2026-01-27 23:47:03 +03:00
parent 683625dc3b
commit b2e13d1059

136
main.asm Normal file
View File

@@ -0,0 +1,136 @@
%DEFINE SC_READ 0
%DEFINE SC_WRITE 1
%DEFINE SC_IOCTL 16
%DEFINE SC_EXIT 60
%DEFINE STDIN 0
%DEFINE STDOUT 1
%DEFINE TCGETS 0x5401
%DEFINE TCSETS 0x5402
SECTION .data
BUF TIMES 524288 DB 0 ; this should be enough ig
CLEAR_SEQ DB 0X1B, "[2J", 0x1B, "[H", 0
POS DQ 0
CHAR DB 0
SECTION .bss
TERMIOS_OLD RESB 60
TERMIOS_NEW RESB 60
SECTION .text
GLOBAL _start
_start:
CALL TERM_SAVE
CALL TERM_RAW
JMP LOOP
CLEAR_SCR:
MOV RAX, SC_WRITE
MOV RDI, STDOUT
MOV RSI, CLEAR_SEQ
MOV RDX, 7
SYSCALL
RET
READ_CHAR:
MOV RAX, SC_READ
MOV RDI, STDIN
MOV RSI, CHAR
MOV RDX, 1
SYSCALL
RET
LOOP:
CALL READ_CHAR
CMP [CHAR], 127
JE BACKSPACE
; future...
; CMP [CHAR], 27
; JE ESCAPE
MOV R14, [POS]
MOV R15, [CHAR]
MOV [BUF + R14], R15
INC R14
MOV [POS], R14
CALL CLEAR_SCR
CALL PRINT_BUF
JMP LOOP
BACKSPACE:
CMP QWORD [POS], 0
JE LOOP
DEC QWORD [POS]
MOV R14, [POS]
MOV BYTE [BUF + R14], 0
CALL CLEAR_SCR
CALL PRINT_BUF
JMP LOOP
ESCAPE:
CALL READ_CHAR
CMP [CHAR], 91
JE ESCAPE_SEQ
JMP LOOP
ESCAPE_SEQ:
CALL READ_CHAR
CMP [CHAR], 68
JE LEFT
LEFT:
; here is the text of left thing
PRINT_BUF:
MOV RAX, SC_WRITE
MOV RDI, STDOUT
MOV RSI, BUF
MOV RDX, [POS]
SYSCALL
RET
TERM_SAVE:
MOV RAX, SC_IOCTL
MOV RDI, STDIN
MOV RSI, TCGETS
MOV RDX, TERMIOS_OLD
SYSCALL
RET
TERM_RAW:
MOV RSI, TERMIOS_OLD
MOV RDI, TERMIOS_NEW
MOV RCX, 48
REP MOVSB
MOV RDI, TERMIOS_NEW
AND DWORD [RDI + 12], ~(0x0002 | 0x0008)
MOV RAX, SC_IOCTL
MOV RDI, STDIN
MOV RSI, TCSETS
MOV RDX, TERMIOS_NEW
SYSCALL
RET
TERM_REST:
MOV RAX, SC_IOCTL
MOV RDI, STDIN
MOV RSI, TCSETS
MOV RDX, TERMIOS_OLD
SYSCALL
RET