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