Created
June 10, 2019 09:04
-
-
Save WhiteHusky/a89f689fc8aaba085dc4a2c7917d47c6 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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