1
0
mirror of https://github.com/hsoft/collapseos.git synced 2024-11-27 22:08:05 +11:00

sms/pad: handle return properly

That is, send current chr selection, and then, send LF.
This commit is contained in:
Virgil Dupras 2019-07-02 15:23:28 -04:00
parent 9c87734499
commit f41508725d

View File

@ -35,11 +35,10 @@
.equ PAD_SELCLASS PAD_GETCSTAT+1 .equ PAD_SELCLASS PAD_GETCSTAT+1
; Current selected character ; Current selected character
.equ PAD_SELCHR PAD_SELCLASS+1 .equ PAD_SELCHR PAD_SELCLASS+1
; Whether current sel is "new", that is, that its value has never been fetched ; When non-zero, will be the next char returned in GetC. So far, only used for
; though padUpdateSel. This flag is set when "avancing" in GetC and also on ; LF that is feeded when Start is pressed.
; module init. .equ PAD_NEXTCHR PAD_SELCHR+1
.equ PAD_SELNEW PAD_SELCHR+1 .equ PAD_RAMEND PAD_NEXTCHR+1
.equ PAD_RAMEND PAD_SELNEW+1
; *** Code *** ; *** Code ***
@ -47,9 +46,9 @@ padInit:
ld a, 0xff ld a, 0xff
ld (PAD_SELSTAT), a ld (PAD_SELSTAT), a
ld (PAD_GETCSTAT), a ld (PAD_GETCSTAT), a
ld (PAD_SELNEW), a
xor a xor a
ld (PAD_SELCLASS), a ld (PAD_SELCLASS), a
ld (PAD_NEXTCHR), a
ld a, 'a' ld a, 'a'
ld (PAD_SELCHR), a ld (PAD_SELCHR), a
ret ret
@ -84,17 +83,6 @@ padStatus:
; From a pad status in A, update current char selection and return it. ; From a pad status in A, update current char selection and return it.
; Returns the same Z as padStatus: set if unchanged, unset if changed ; Returns the same Z as padStatus: set if unchanged, unset if changed
padUpdateSel: padUpdateSel:
; special case: when selnew is set, always return current sel and
; disable selnew
ld a, (PAD_SELNEW)
or a
jr z, .notnew
; selection is new, return it
xor a
ld (PAD_SELNEW), a
ld a, (PAD_SELCHR)
jp unsetZ
.notnew:
call padStatus call padStatus
push hl push hl
ld hl, PAD_SELSTAT ld hl, PAD_SELSTAT
@ -136,6 +124,9 @@ padUpdateSel:
ret ret
padGetC: padGetC:
ld a, (PAD_NEXTCHR)
or a
jr nz, .nextchr
call padStatus call padStatus
push hl push hl
ld hl, PAD_GETCSTAT ld hl, PAD_GETCSTAT
@ -150,9 +141,11 @@ padGetC:
bit PAD_START, a bit PAD_START, a
jr z, .return jr z, .return
jp unsetZ jp unsetZ
.return:
ld a, ASCII_LF
ld (PAD_NEXTCHR), a
; continue to .advance
.advance: .advance:
ld a, 1
ld (PAD_SELNEW), a
ld a, (PAD_SELCHR) ld a, (PAD_SELCHR)
cp a cp a
ret ret
@ -160,7 +153,11 @@ padGetC:
ld a, ASCII_BS ld a, ASCII_BS
cp a cp a
ret ret
.return: .nextchr:
ld a, ASCII_LF ; We have a "next char", return it and clear it.
cp a cp a ; ensure Z
push af
xor a
ld (PAD_NEXTCHR), a
pop af
ret ret