shit poop 123
This commit is contained in:
136
main.asm
Normal file
136
main.asm
Normal 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
|
||||
Reference in New Issue
Block a user