mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-12-29 00:31:52 +00:00
76 lines
1.1 KiB
ArmAsm
76 lines
1.1 KiB
ArmAsm
;====================
|
|
; hgr input
|
|
;====================
|
|
; TODO: save to string
|
|
; TODO: arbitrary Y location
|
|
; TODO: when backspacing, erase old char not XOR
|
|
|
|
hgr_input:
|
|
bit KEYRESET
|
|
|
|
ldx #0
|
|
ldy #184
|
|
lda #'>'
|
|
jsr hgr_put_char
|
|
|
|
ldx #1
|
|
stx INPUT_X
|
|
|
|
hgr_input_loop:
|
|
lda KEYPRESS
|
|
bpl hgr_input_loop
|
|
|
|
bit KEYRESET
|
|
|
|
and #$7f ; trim off top?
|
|
|
|
cmp #13 ; if return, then done
|
|
beq done_hgr_input
|
|
|
|
cmp #$7f ; check if backspace
|
|
beq hgr_input_backspace
|
|
cmp #8
|
|
beq hgr_input_backspace
|
|
|
|
ldx INPUT_X
|
|
sta input_buffer-1,X ; store to buffer
|
|
|
|
ldy #184 ; print char
|
|
ldx INPUT_X
|
|
jsr hgr_put_char
|
|
|
|
ldx INPUT_X
|
|
cpx #38
|
|
bcs input_too_big ; FIXME this is a hack
|
|
inc INPUT_X
|
|
input_too_big:
|
|
jmp hgr_input_loop
|
|
|
|
hgr_input_backspace:
|
|
ldx INPUT_X
|
|
cpx #1 ; don't backspace too far
|
|
beq hgr_input_loop
|
|
|
|
dec INPUT_X
|
|
ldx INPUT_X
|
|
|
|
lda input_buffer-1,X ; load old char
|
|
ldy #184
|
|
jsr hgr_put_char ; xor it on top
|
|
|
|
jmp hgr_input_loop
|
|
|
|
done_hgr_input:
|
|
|
|
ldx INPUT_X ; NUL terminate
|
|
lda #0
|
|
sta input_buffer-1,X
|
|
|
|
rts
|
|
|
|
input_buffer:
|
|
.byte 0,0,0,0,0,0,0,0,0,0
|
|
.byte 0,0,0,0,0,0,0,0,0,0
|
|
.byte 0,0,0,0,0,0,0,0,0,0
|
|
.byte 0,0,0,0,0,0,0,0,0,0
|