Skip to content

Instantly share code, notes, and snippets.

@WhiteHusky
Created June 10, 2019 09:04
Show Gist options
  • Select an option

  • Save WhiteHusky/a89f689fc8aaba085dc4a2c7917d47c6 to your computer and use it in GitHub Desktop.

Select an option

Save WhiteHusky/a89f689fc8aaba085dc4a2c7917d47c6 to your computer and use it in GitHub Desktop.
define ConsoleMemAddr,8192;
define KeyboardMemAddr,10241;
define ConsoleClearAddr,2041;
define ConsoleCursorSpeedAddr,2043;
define ConsoleCursorSizeAddr,2044;
define ConsoleCursorLocAddr,2045;
define ConsoleCursorOnAddr,2046;
define KeyboardShiftAddr,0;
define KeyboardBufferAddr,1;
define ConsoleMaxLength,2020;
jmp _code;
WaitForChar:
mov r1,eax;
WFCLoop:
out port0,1;
mov eax,KeyboardMemAddr;
add eax,KeyboardBufferAddr;
WFCCheck:
cmp #eax,0;
je WFCCheck;
out port0,0;
mov r0,#eax;
mov eax,KeyboardMemAddr;
add eax,KeyboardShiftAddr;
mov #eax,0;
mov eax,r1;
ret
WSBackspace:
cmp r7,1;
jl WSBEnd;
dec eax;
mov #eax,0;
dec eax;
mov #eax,0;
inc eax;
inc eax;
WSBLoop:
cmp #eax,0;
je WSBLoopEnd;
mov r2,#eax;
mov #eax,0;
dec eax;
dec eax;
mov #eax,r2
inc eax;
inc eax;
inc eax;
mov r2,#eax;
dec eax;
dec eax;
mov #eax,r2;
inc eax;
inc eax;
inc eax;
jmp WSBLoop;
WSBLoopEnd:
mov r2,0;
dec r7;
WSBEnd:
jmp AWriteLoop;
WSMoveCursorBack:
cmp r7,0;
je AWriteLoop;
dec r7;
jmp AWriteLoop;
WSMoveCursorForward:
inc r7;
jmp AWriteLoop;
WSMoveCursorUp:
sub r7,30;
max r7,0;
jmp AWriteLoop;
WSMoveCursorDown:
add r7,30;
min r7,ConsoleMaxLength;
jmp AWriteLoop;
WSShiftForward:
mov r2,#eax;
inc eax;
mov r3,#eax;
inc eax;
WSSFLoop:
mov r4,#eax;
inc eax;
mov r5,#eax;
dec eax;
mov #eax,r2;
inc eax;
mov #eax,r3;
inc eax;
mov r2,r4;
mov r3,r5;
cmp r4,0;
je WSSFLoopEnd;
jmp WSSFLoop;
WSSFLoopEnd:
mov eax,r7;
mul eax,2;
add eax,ConsoleMemAddr;
ret
WSDelNull:
mov r0,0;
jmp AWLSkip;
WSToggleCursor:
mov eax,ConsoleMemAddr;
add eax,ConsoleCursorOnAddr;
bnot #eax;
jmp AWriteLoop;
WriteString: //ESI - String pointer, EDX - Param
AWriteLoop:
out port2,0;
mov eax,ConsoleMemAddr;
add eax,ConsoleCursorLocAddr;
mov #eax,r7;
mul #eax,2;
mov eax,r7;
mul eax,2;
add eax,ConsoleMemAddr;
call WaitForChar;
out port2,1;
cmp r0,127;
je WSBackspace;
cmp r0,158; // Ctrl
je WSToggleCursor;
cmp r0,19;
je WSMoveCursorBack;
cmp r0,20;
je WSMoveCursorForward;
cmp r0,18;
je WSMoveCursorDown;
cmp r0,17;
je WSMoveCursorUp;
cmp r7,ConsoleMaxLength;
je AWriteLoop;
cmp r0,148; // Del
je WSDelNull;
cmp r0,32;
jl AWriteLoop;
cmp r0,126;
jg AWriteLoop;
AWLSkip:
cmp #eax,0;
cne WSShiftForward;
mov #eax,r0; //Output char
inc eax;
mov #eax,edx; //Output char param
inc r7;
jmp AWriteLoop;
AEnd:
ret //Return from call
_code:
mov r7,0;
//mov eax,ConsoleClearAddr;
//mov #eax,1;
mov eax,ConsoleMemAddr;
add eax,ConsoleCursorOnAddr;
mov #eax,1;
mov eax,ConsoleMemAddr;
add eax,ConsoleCursorSpeedAddr;
mov #eax,0.25;
mov eax,ConsoleMemAddr;
add eax,ConsoleCursorSizeAddr;
mov #eax,0.1;
mov edx,000999; //White foreground on black background
call WriteString;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment