From b2e13d10593f3e1c83e6f63dfee3cd2764c043e1 Mon Sep 17 00:00:00 2001 From: pablusha Date: Tue, 27 Jan 2026 23:47:03 +0300 Subject: [PATCH] shit poop 123 --- main.asm | 136 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 main.asm diff --git a/main.asm b/main.asm new file mode 100644 index 0000000..450d8eb --- /dev/null +++ b/main.asm @@ -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 \ No newline at end of file