diff --git a/libsrc/plus4/cgetc.s b/libsrc/plus4/cgetc.s index 493bbf195..c48676745 100644 --- a/libsrc/plus4/cgetc.s +++ b/libsrc/plus4/cgetc.s @@ -10,6 +10,8 @@ .include "plus4.inc" +; -------------------------------------------------------------------------- + _cgetc: lda KEY_COUNT ; Get number of characters ora FKEY_COUNT ; Or with number of function key chars bne L2 ; Jump if there are already chars waiting @@ -46,3 +48,41 @@ L2: jsr KBDREAD ; Read char and return in A ldx #0 rts +; -------------------------------------------------------------------------- +; Make the function keys return function key codes instead of the current +; strings so the program will see and may handle them. +; Undo this change when the program ends + + .constructor initkbd + .destructor donekbd + +.proc initkbd + + ldy #15 +@L1: lda fnkeys,y + sta FKEY_SPACE,y + dey + bpl @L1 + rts + +.endproc + + +.proc donekbd + + ldx #$39 ; Copy the original function keys +@L1: lda FKEY_ORIG,x + sta FKEY_SPACE,x + dex + bpl @L1 + rts + +.endproc + + +; Function key table, readonly + +.rodata +fnkeys: .byte $01, $01, $01, $01, $01, $01, $01, $01 + .byte 133, 137, 134, 138, 135, 139, 136, 140 + diff --git a/libsrc/plus4/conio.s b/libsrc/plus4/conio.s index d6f253111..23c794856 100644 --- a/libsrc/plus4/conio.s +++ b/libsrc/plus4/conio.s @@ -4,35 +4,7 @@ ; Low level stuff for screen output/console input ; - .export initconio, doneconio .exportzp CURS_X, CURS_Y - .import xsize, ysize .include "plus4.inc" - .include "../cbm/cbm.inc" - -.code - -initconio: - ldy #15 -L1: lda fnkeys,y - sta FKEY_SPACE,y - dey - bpl L1 - rts - - -doneconio: - ldx #$39 ; Copy the original function keys -L2: lda FKEY_ORIG,x - sta FKEY_SPACE,x - dex - bpl L2 - rts - -; Function key table, readonly - -.rodata -fnkeys: .byte $01, $01, $01, $01, $01, $01, $01, $01 - .byte 133, 137, 134, 138, 135, 139, 136, 140 diff --git a/libsrc/plus4/crt0.s b/libsrc/plus4/crt0.s index 3f25e772a..84ffe3aae 100644 --- a/libsrc/plus4/crt0.s +++ b/libsrc/plus4/crt0.s @@ -4,10 +4,9 @@ ; This must be the *first* file on the linker command line ; - .export _exit + .export _exit .import initlib, donelib - .import push0, _main - .import initconio, doneconio, zerobss + .import push0, _main, zerobss .include "plus4.inc" .include "../cbm/cbm.inc" @@ -92,10 +91,6 @@ MemOk: stx sp jsr initlib -; Initialize conio stuff - - jsr initconio - ; Pass an empty command line jsr push0 ; argc @@ -113,10 +108,6 @@ _exit: jsr donelib ; Run module destructors ldx spsave txs -; Reset the conio stuff - - jsr doneconio - ; Copy back the zero page stuff ldx #zpspace-1