diff --git a/console.asm b/console.asm index a79c39e..49c54ec 100644 --- a/console.asm +++ b/console.asm @@ -16,16 +16,30 @@ pub read_line: je read_line_keyloop ; If the current key is same as previous, we loop mov r4, r1 ; Storing current key as previous - cmp r1, 0x100 + cmp r1, 0x100 ; Is the key down or up? jbe read_line_keyloop ; If the key was up, we loop xor r1, r1, 0x100 ; We remove the "down" bit cmp r1, 10 ; Was the key Enter? je read_line_finished ; If so, we're finished - - store_8 [r3], r1 ; Else, we store the key in the buffer - add r3, r3, 1 ; We advance forward - jmp read_line_keyloop + + cmp r1, 32 ; Was the key under Space? i.e. non-renderable + jb read_line_keyloop ; If so, we loop + + cmp r1, 127 ; Was the key Backspace? + je read_line_backspace ; If yes we need to move one character back + + read_line_store: + store_8 [r3], r1 ; Else, we store the key in the buffer + add r3, r3, 1 ; We advance forward + jmp read_line_keyloop + + read_line_backspace: + cmp r3, r2 + je read_line_keyloop ; If we are at the start, we loop + sub r3, r3, 1 ; We move back one character + jmp read_line_keyloop + read_line_finished: store_8 [r3], zr ; We store null at the end so the string is finished mov r1, r2 ; Recovering the buffer pointer