From eb960cfcdff1f3bfd2f6aa5f9a1a05178a9f8d32 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Tue, 17 Aug 2021 08:51:40 -0400 Subject: [PATCH] Latest JGH changes to VDU and CHARIO. --- applecorn.po | Bin 819200 -> 819200 bytes auxmem.chario.s | 232 ++++++++++++++++++++++++++++-------------------- auxmem.vdu.s | 128 +++++++++++++++++--------- 3 files changed, 223 insertions(+), 137 deletions(-) diff --git a/applecorn.po b/applecorn.po index 98b17ac30083cba211e92f1bb01c95af06e9a1d0..6d844283a9daf84432c2f0b4d00fae675e22fc6d 100644 GIT binary patch delta 3303 zcmb7GYiu0V753eAOl&8qNesaXjcy`^pg<**B7X2lFiBL9lc1KwK}r)^NF~%?l`8QI zv=#`ED&_|rsaL44DYh!e1MkClV=pP5nH@ipUC(%CZSR&gWbGY$m#lZpKAfa~;M_Yi z`%v6U9ci?8?mg$+^Z3qpwy$r0U*CRzvbpnY)0UMf(5ja&0dHvI%-#%5RnFkG;L8=)9 zLw6kwNC7ws*+-Ag3iWCOiVSB%>#8ZyP}^9SXS)!KibDTDK;i@=AquX4{4Pn~4vER; zN_a6{zzZg}R?E4ST*=Ik?jE$wCks>4*Ob(R8WbXU+QKFzH&4*G(Vmo%wJ8S(E!CKK=O@p`4Vf^0sKA*0LQS};x0r*?2 zLEs`Tn&nEdK;`WCYmQHtWn9iS1Z*<|CuozR4M3FwP}C<>u&h?ftCcbau$C<_YiEm+ z$%?gx!3<*;TWvydaa$kAF)apWrD;W=SpdRd4y!j=GcXDRY(S$5SL2!>DT)S{N~XEW zGVH`58&_zA&^@8n=|6hBz#;r6+UtkiZq-3Yt`v)Ap^V{7)D$NCB~V-Kk>eVC^asQ4 zR)q0h==jWO@9<%C2tC}$o?<3rW-#^G#ZwmI&O?ur?jz{S;pfrU=;^uWtc@*~6^H#7 z{NPQk(+g(0oOLbS%9;gMDX_wYufKqLQP)K*8_+n`3J^^`Zx$J=Qe2Q{dQjI!YMy2PiVX)B@B^cGlFRI#CQ&f=~C-0KL?p zTmdaq&-)EJkXc6ude2AoYyA#-te@+YF-t@JrCLmD^g@!|&?)%@slj@>vwN?aN$}F~ z8}QXk2N3_$Pdj~gPpby6A>}o%^~U?{i24UazvE_=P3q#Pl@c6u9B>98#Q@peigx&5 z5*95;U$$sfma{aCjCvWrLyxoEE|}$8CUh6GO$n-w5KHzg6amzg{}(XNDz#zF@?Nbh z9i)N)kdm)3ClX3B!HA1WFkIU`cKawgbV!m77~D1xSx*>O7!;Wj#Kd%jL<;DV{uKd0 z)05=IWYtiJym$=Vx5YIwBVSBaQi(ayY zpFD+*R)zQ5D=?4A!IP+kTt9^l*cv-uMn|f;TM0gcTEcI=j5c`5o>sJ#ynPz|maW2- z)99-f?`T3L+Na@bKa7PovynlW-`Sok4 z$2o4R9h0%w(3|UQ|KuEc%-QzUq`A?=hyZhe{sA0^GO~F|M-}X|$(f>6n7MG76J#wV z^aqDvl0g+m9TTx=(iR9)fh2GlP-MLTAWayM{ef}Vj!#juBKP>ZqVx#Lo&8(4lX=;4rRO^j(dMs+zW3ryc^(cf%hJGH^SQrZ(Dd*y#2X9 FeGkxbAd3J1 delta 397 zcmZo@FluNp+HiwKB%Xnn!BmVvK--K@h2b#+1D`gp*yJ}X*F+XG2s6x6LY7bz+kB1H zjBT<2lOALJWJjL%$pJiU(-+t=D{K~El3-lKw{F@ZW>=Q8FF!w?oOsPS1#DCaQVyoPfrzIegS$5VK~B=%@;Q4aWVDwwjX@V48$xz%nHP8K+F!r96-zo T#9Z4CKIXQcv;D$j=EY(FEQQm+ diff --git a/auxmem.chario.s b/auxmem.chario.s index cfb94d3..857f3c0 100644 --- a/auxmem.chario.s +++ b/auxmem.chario.s @@ -1,5 +1,5 @@ ********************************************************* -* Kernel / Misc +* Kernel / Character I/O ********************************************************* * KERNEL/CHARIO.S @@ -10,13 +10,21 @@ * with VBLK. Ensured cursor turned on straight away. * 15-Aug-2021 Cursor keys move copy cursor, copy reads char. * Copy cursor not visible yet. +* 16-Aug-2021 Copy cursor and Edit cursor visible. + * TEMP: -FXESCCHAR EQU $240 -FXESCON EQU $241 -FLASHER EQU $242 -OLDCHAR EQU $243 -CURSOR EQU $244 +FLASHER EQU $290 +CURSOR EQU $291 +OLDCHAR EQU $292 +COPYCHAR EQU $293 + +FXTABCHAR EQU BYTEVARBASE+219 +FXESCCHAR EQU BYTEVARBASE+220 +FXESCON EQU BYTEVARBASE+229 +FX2VAR EQU BYTEVARBASE+$B1 +FX3VAR EQU BYTEVARBASE+$EC +FX4VAR EQU BYTEVARBASE+$ED * OSWRCH handler @@ -42,7 +50,7 @@ WRCHHND PHA * All registers preserved except A, Carry * Flashes a fake cursor while waiting for input * -RDCHHND LDA #$80 ; flag=wait forever +RDCHHND LDA #$80 ; flag=wait forever PHY TAY * TEST @@ -50,98 +58,119 @@ RDCHHND LDA #$80 ; flag=wait forever BNE INKEYGO LDA #'_' STA CURSOR + LDA #$1B + STA FXESCCHAR * TEST - BRA INKEYGO ; Wait forever for input + BRA INKEYGO ; Wait forever for input ; XY<$8000 - wait for a keypress -INKEY PHY ; Dummy PHY to balance RDCH -INKEYGO PHX ; Save registers +INKEY PHY ; Dummy PHY to balance RDCH +INKEYGO PHX ; Save registers PHY - JSR GETCHRC ; Get character under cursor + JSR GETCHRC ; Get character under cursor STA OLDCHAR - CLI - BRA INKEY1 ; Turn cursor on +* This can be optimised + BIT VDUSTATUS + BVC INKEYGO2 ; No editing cursor + STA COPYCHAR ; Save char under edit cursor + LDA #$A0 + JSR PUTCHRC ; Display edit cursor + JSR COPYSWAP1 ; Swap to copy cursor + JSR GETCHRC ; Get character under copy cursor + STA OLDCHAR +* +INKEYGO2 CLI + BRA INKEY1 ; Turn cursor on ; INKEYLP1 PHX INKEYLP2 PHY -* TO DO: display copy cursor as well -INKEYLP INC FLASHER ; Increment cursor counter - INC FLASHER -* INC FLASHER ; Fast flash -* INC FLASHER - LDA FLASHER - AND #127 ; Flash every 64/100sec = 32/50sec - BNE INKEY3 ; Not time to toggle yet - LDA OLDCHAR ; Prepare to remove cursor +INKEYLP CLC + LDA #$01 ; Slow flash, every 32 frames + BIT VDUSTATUS + BVC INKEY0 + ASL A ; Fast flash, every 16 frames +INKEY0 ADC FLASHER + STA FLASHER + AND #15 + BNE INKEY3 ; Not time to toggle yet + LDA OLDCHAR ; Prepare to remove cursor BIT FLASHER - BMI INKEY2 ; Remove cursor -INKEY1 LDA CURSOR ; Add cursor -INKEY2 JSR PUTCHRC ; Toggle cursor + BMI INKEY2 ; Remove cursor +INKEY1 LDA CURSOR ; Add cursor +INKEY2 JSR PUTCHRC ; Toggle cursor INKEY3 LDA ESCFLAG - BMI INKEYOK ; Escape pending, return it -INKEY4 JSR KEYREAD ; Test for input, all can be trashed - BCC INKEYOK ; Char returned, return it -* JSR DELAY ; Wait 1/100sec + BMI INKEYOK ; Escape pending, return it +INKEY4 JSR KEYREAD ; Test for input, all can be trashed + BCC INKEYOK ; Char returned, return it ; * VBLK pulses at 50Hz, changes at 100Hz * (60Hz in US, will need tweeking) - LDX $C019 ; Get initial VBLK state + LDX $C019 ; Get initial VBLK state INKEY5 BIT $C000 - BMI INKEY4 ; Key pressed + BMI INKEY4 ; Key pressed TXA EOR $C019 - BPL INKEY5 ; Wait for VBLK change + BPL INKEY5 ; Wait for VBLK change ; PLY - BMI INKEYLP2 ; Loop forever + BMI INKEYLP2 ; Loop forever PLX TXA - BNE INKEYDEC ; Decrement XY + BNE INKEYDEC ; Decrement XY DEY INKEYDEC DEX - BNE INKEYLP1 ; Not 0, loop back + BNE INKEYLP1 ; Not 0, loop back TYA - BNE INKEYLP1 ; Not 0, loop back - DEY ; Y=$FF - TYA ; A=$FF - PLX ; Drop dummy PHY - RTS ; CS from above + BNE INKEYLP1 ; Not 0, loop back + DEY ; Y=$FF + TYA ; A=$FF + PLX ; Drop dummy PHY + RTS ; CS from above ; Timeout: CS, AY=$FFFF, becomes XY=$FFFF INKEYOK PHA +* This can be optimised + BIT VDUSTATUS + BVC INKEYOK2 ; No editing cursor LDA OLDCHAR - JSR PUTCHRC ; Remove cursor + JSR PUTCHRC ; Remove copy cursor + JSR COPYSWAP1 ; Swap cursor back + LDA COPYCHAR + BRA INKEYOK3 ; Restore char under edit cursor +* +INKEYOK2 LDA OLDCHAR ; and swap cursor back +INKEYOK3 JSR PUTCHRC ; Remove edit cursor PLA - PLY ; <$80=INKEY or $80=RDCH - PLX ; Restore X - PLY ; <$80=INKEY or restore=RDCH - PHA ; Save char for a mo + PLY ; <$80=INKEY or $80=RDCH + PLX ; Restore X + PLY ; <$80=INKEY or restore=RDCH + PHA ; Save char for a mo LDA ESCFLAG - ASL A ; Cy=Escape flag - PLA ; Get char back + ASL A ; Cy=Escape flag + PLA ; Get char back RTS ; Character read: CC, A=char, X=???, Y<$80 ; Escape: CS, A=?? , X=???, Y<$80 BYTE81 TYA - BMI NEGINKEY ; XY<0, scan for keypress - JSR INKEY ; XY>=0, wait for keypress + BMI NEGINKEY ; XY<0, scan for keypress + JSR INKEY ; XY>=0, wait for keypress * Y=$FF, A=FF, X=??, CS - timeout * Y<$80, A=esc, X=??, CS - escape * Y<$80, A=char, X=??, CC - character read - TAX ; X=character returned + TAX ; X=character returned TYA - BMI BYTE81DONE ; Y=$FF, timeout + BMI BYTE81DONE ; Y=$FF, timeout LDY #$00 - BCC BYTE81DONE ; CC, not Escape - LDY #$1B ; Y=27 + BCC BYTE81DONE ; CC, not Escape + LDY #$1B ; Y=27 BYTE81DONE RTS * Returns: Y=$FF, X=$FF, CS - timeout * Y=$1B, X=???, CS - escape * Y=$00, X=char, CC - keypress -NEGINKEY LDX #$00 ; Unimplemented +NEGINKEY LDX #$00 ; Unimplemented LDY #$00 CLC RTS @@ -161,31 +190,40 @@ NEGINKEY LDX #$00 ; Unimplemented KEYREAD * TO DO: check *EXEC source * TO DO: expand current soft key - JSR KBDREAD ; Fetch character from KBD "buffer" - BCS KEYREADOK ; Nothing pending + JSR KBDREAD ; Fetch character from KBD "buffer" + BCS KEYREADOK ; Nothing pending * TO DO: process new soft keys * * Process cursor keys * TO DO: check FX4VAR - CMP #$C9 +KEYCURSOR CMP #$C9 BEQ KEYCOPY CMP #$CC - BCC KEYREADOK ; Not cursor key - JSR MOVECOPY ; Move copy cursor -KEYCOPYBAD SEC + BCC KEYREADOK ; Not cursor key + PHA + LDA OLDCHAR + JSR PUTCHRC ; Remove cursor + PLA + JSR COPYMOVE ; Move copy cursor + JSR GETCHRC ; Save char under cursor + STA OLDCHAR + SEC KEYREADOK RTS -KEYCOPY AND #$0F ; TAB=$09 if no copy cursor +KEYCOPY LDA FXTABCHAR ; Prepare TAB if no copy cursor BIT VDUSTATUS - BVC KEYCOPYOK ; No copy cursor - JSR COPYSWAP ; Swap to copy cursor - JSR GETCHRC ; Get the character + BVC KEYREADOK ; No copy cursor, return TAB + LDA OLDCHAR ; Get the char under cursor PHA - JSR MOVECOPY3 ; Move copy cursor, swap back + JSR OUTCHARGO ; Output it to restore and move cursor + JSR GETCHRC ; Save char under cursor + STA OLDCHAR PLA - BEQ KEYCOPYBAD ; Bad character read + BNE KEYCOPYOK ; Ok character + SEC + JMP BEEP ; Beep and return CS=No char KEYCOPYOK CLC - RTS ; Return the character + RTS ; Return the character * KBDREAD @@ -200,60 +238,60 @@ KEYCOPYOK CLC * TAB -> $C9 * Cursors -> $CC-$CF * -KBDREAD CLV ; VC=return keypress -KBDTEST LDA $C000 ; VS here to test for keypress - EOR #$80 ; Toggle bit 7 +KBDREAD CLV ; VC=return keypress +KBDTEST LDA $C000 ; VS here to test for keypress + EOR #$80 ; Toggle bit 7 CMP #$80 - BCS KBDDONE ; No key pressed - BVS KBDDONE ; VS=test for keypress - STA $C010 ; Ack. keypress + BCS KBDDONE ; No key pressed + BVS KBDDONE ; VS=test for keypress + STA $C010 ; Ack. keypress BIT $C061 - BMI KBDLALT ; Left Apple pressed + BMI KBDLALT ; Left Apple pressed BIT $C062 - BMI KBDRALT ; Right Apple pressed + BMI KBDRALT ; Right Apple pressed CMP #$09 - BEQ KBDTAB ; + BEQ KBDTAB ; CMP #$08 - BCC KBDDONE ; <$08 not cursor key + BCC KBDESC ; <$08 not cursor key CMP #$0C BCC KBDCURSR CMP #$15 BEQ KBDCUR15 * Test for Escape key -KBDESC CMP #27 ; TEMP -* CMP FXESCCHAR ; Current ESCAPE char? - BNE KBDNOESC ; No - LDX FXESCON ; Is ESCAPE enabled? - BNE KBDNOESC ; No - ROR ESCFLAG ; Set Escape flag -KBDNOESC CLC ; CLC=Ok +KBDESC CMP FXESCCHAR ; Current ESCAPE char? +* CMP #27 ; TEMP + BNE KBDNOESC ; No + LDX FXESCON ; Is ESCAPE enabled? + BNE KBDNOESC ; No + ROR ESCFLAG ; Set Escape flag +KBDNOESC CLC ; CLC=Ok KBDDONE RTS -KBDRALT ; Right Apple key pressed -KBDLALT CMP #$40 ; Left Apple key pressed +KBDRALT ; Right Apple key pressed +KBDLALT CMP #$40 ; Left Apple key pressed BCS KBDCTRL CMP #$30 - BCC KBDFUNOK ; <'0' + BCC KBDFUNOK ; <'0' CMP #$3A - BCS KBDOK ; >'9' -KBDFUNC AND #$0F ; Convert Apple-Num to function key + BCS KBDOK ; >'9' +KBDFUNC AND #$0F ; Convert Apple-Num to function key ORA #$80 BIT $C062 - BPL KBDFUNOK ; Left+Digit -> $8x - ORA #$90 ; Right+Digit -> $9x + BPL KBDFUNOK ; Left+Digit -> $8x + ORA #$90 ; Right+Digit -> $9x BIT $C061 BPL KBDFUNOK - EOR #$30 ; Left+Right+Digit -> $Ax + EOR #$30 ; Left+Right+Digit -> $Ax KBDFUNOK RTS -KBDCTRL AND #$1F ; Apple-Letter -> Ctrl-Letter +KBDCTRL AND #$1F ; Apple-Letter -> Ctrl-Letter KBDOK CLC RTS -KBDTAB LDA #$11 ; Convert TAB to $C9, expanded later -KBDCUR15 SBC #$0C ; Convert RGT to $09 +KBDTAB LDA #$11 ; Convert TAB to $C9, expanded later +KBDCUR15 SBC #$0C ; Convert RGT to $09 KBDCURSR CLC - ADC #$C4 ; Cursor keys $CC-$CF - RTS ; CLC=Ok set earlier + ADC #$C4 ; Cursor keys $CC-$CF + RTS ; CLC=Ok set earlier diff --git a/auxmem.vdu.s b/auxmem.vdu.s index 6a2ab41..92965fe 100644 --- a/auxmem.vdu.s +++ b/auxmem.vdu.s @@ -6,6 +6,7 @@ * 15-Aug-2021 Optimised address calculations and PRCHRC. * Entry point to move copy cursor. * Start to consolidate VDU workspace. +* 16-Aug-2021 Added COPY cursor handling. ********************************** @@ -30,6 +31,8 @@ VDUTEXTX EQU COL VDUTEXTY EQU ROW VDUCOPYX EQU $250+2 ; copy cursor X coord VDUCOPYY EQU $250+3 ; copy cursor Y coord +VDUCOPYCHR EQU $260+0 ; char underneath cursor when copying + * VDUCURSOR EQU $250+4 ; cursor character * VDUMODE EQU $250+5 ; current MODE * VDUCHAR EQU $250+6 ; VDU command, 1 byte @@ -42,34 +45,55 @@ VDUCOPYY EQU $250+3 ; copy cursor Y coord * Move editing cursor -* A=cursor key -MOVECOPY PHA +* A=cursor key, CS from caller +COPYMOVE PHA BIT VDUSTATUS - BVS MOVECOPY2 ; Edit cursor already on - LDX #1 -MOVECOPY1 LDA VDUTEXTX,X ; Initialise copy cursor - STA VDUCOPYX,X - DEX - BPL MOVECOPY1 - LDA #$40 + BVS COPYMOVE2 ; Edit cursor already on + JSR GETCHRC + STA COPYCHAR + LDA #$A0 + JSR PUTCHRC ; Edit cursor + SEC + JSR COPYSWAP2 ; Initialise copy cursor + ROR FLASHER + ASL FLASHER ; Ensure b0=0 + LDA #$42 ORA VDUSTATUS - STA VDUSTATUS ; Turn edit cursor on -MOVECOPY2 JSR COPYSWAP ; Use edit cursor - PLA - AND #3 + STA VDUSTATUS ; Turn cursor editing on +COPYMOVE2 PLA + AND #3 ; Convert to 8/9/10/11 ORA #8 -MOVECOPY3 JSR OUTCHARGO ; Move edit cursor -* JSR CHARADDR ; Get character address -* ; Swap cursors back -COPYSWAP LDX #1 +COPYMOVE3 JMP OUTCHARGO ; Move edit cursor + +;* Turn editing cursor on/off +;COPYCURSOR BIT VDUSTATUS +; BVC COPYSWAP4 ; Copy cursor not active +; PHP ; Save CS=Turn On, CC=Turn Off +; JSR COPYSWAP1 ; Swap to edit cursor +; LDA COPYCHAR ; Prepare to turn edit cursor off +; PLP +; BCC COPYCURS2 ; Restore character +;COPYCURS1 JSR GETCHRC ; Get character under edit cursor +; STA COPYCHAR +; LDA #$A0 ; Output edit cursor +;COPYCURS2 JSR PUTCHRC +;* ; Drop through to swap back + +* Swap between edit and copy cursors +;COPYSWAP BIT VDUSTATUS +; BVC COPYSWAP4 ; Edit cursor off +COPYSWAP1 CLC ; CC=Swap TEXT and COPY +COPYSWAP2 LDX #1 COPYSWAPLP LDY VDUCOPYX,X LDA VDUTEXTX,X STA VDUCOPYX,X + BCS COPYSWAP3 ; CS=Copy TEXT to COPY TYA STA VDUTEXTX,X - DEX +COPYSWAP3 DEX BPL COPYSWAPLP - RTS +COPYSWAP4 RTS + * Clear to EOL CLREOL LDA ROW @@ -100,6 +124,7 @@ CLREOL LDA ROW RTS * Clear the screen +VDUINIT CLEAR STZ ROW STZ COL :L1 JSR CLREOL @@ -169,14 +194,14 @@ PRCHR6 EOR #$80 ; Convert character RTS * PHA -* LDA $C000 ; Kbd data/strobe +* LDA $C000 ; Kbd data/strobe * BMI :KEYHIT * :RESUME LDA ROW * ASL * TAX -* LDA SCNTAB,X ; LSB of row address +* LDA SCNTAB,X ; LSB of row address * STA ZP1 -* LDA SCNTAB+1,X ; MSB of row address +* LDA SCNTAB+1,X ; MSB of row address * STA ZP1+1 * LDA COL * BIT $C01F @@ -187,25 +212,25 @@ PRCHR6 EOR #$80 ; Convert character *:S1 TAY * PLA * EOR #$80 -* STA (ZP1),Y ; Screen address +* STA (ZP1),Y ; Screen address * >>> WRTAUX * RTS -*:KEYHIT STA $C010 ; Clear strobe +*:KEYHIT STA $C010 ; Clear strobe * AND #$7F -* CMP #$13 ; Ctrl-S +* CMP #$13 ; Ctrl-S * BEQ :PAUSE -* CMP #$1B ; Esc +* CMP #$1B ; Esc * BNE :RESUME *:ESC SEC -* ROR ESCFLAG ; Set ESCFLAG +* ROR ESCFLAG ; Set ESCFLAG * BRA :RESUME -*:PAUSE STA $C010 ; Clear strobe -*:L1 LDA $C000 ; Kbd data/strobe +*:PAUSE STA $C010 ; Clear strobe +*:L1 LDA $C000 ; Kbd data/strobe * BPL :L1 * AND #$7F -* CMP #$11 ; Ctrl-Q +* CMP #$11 ; Ctrl-Q * BEQ :RESUME -* CMP #$1B ; Esc +* CMP #$1B ; Esc * BEQ :ESC * BRA :PAUSE @@ -239,11 +264,11 @@ GETCHROK RTS * BPL :S1A ; 40-col * LSR * BCC :S1 -*:S1A STA $C002 ; Read main memory +*:S1A STA $C002 ; Read main memory *:S1 TAY * LDA (ZP1),Y * EOR #$80 -* STA $C003 ; Read aux mem again +* STA $C003 ; Read aux mem again * TAX * LDY #$00 * BIT $C01F @@ -346,23 +371,26 @@ OUTCHARGO CMP #$00 ; NULL BNE :T5 LDA ROW CMP #23 - BEQ SCROLL + BEQ :TOSCROLL INC ROW :IDONE RTS ; BRA :DONE +:TOSCROLL JMP SCROLL :T5 CMP #$0B ; Cursor up BNE :T6 LDA ROW BEQ :IDONE DEC ROW - BRA :IDONE +; BRA :IDONE + RTS :T6 CMP #$0D ; Carriage return BNE :T7 LDA #$BF AND VDUSTATUS STA VDUSTATUS ; Turn copy cursor off STZ COL - BRA :IDONE +; BRA :IDONE + RTS :T7 CMP #$0C ; Ctrl-L BEQ :T7A CMP #$16 ; MODE @@ -373,16 +401,34 @@ OUTCHARGO CMP #$00 ; NULL TAX STA $C00C,X :T7A JSR CLEAR - BRA :IDONE +; BRA :IDONE + RTS :T8 CMP #$1E ; Home BNE :T9 STZ ROW STZ COL - BRA :IDONE -:T9 CMP #$7F ; Delete +; BRA :IDONE + RTS +:T9 CMP #$1F ; TAB + BNE :T9B + LDY VDUQ+8 + CPY #24 + BCS :IDONE + LDX VDUQ+7 + CPX #80 + BCS :IDONE + BIT $C01F + BMI :T9A + CPX #80 + BCS :IDONE +:T9A STX COL + STY ROW + RTS +:T9B CMP #$7F ; Delete BNE :T10 JSR DELETE - BRA :IDONE +; BRA :IDONE + RTS :T10 CMP #$20 BCC :IDONE JSR PRCHRC ; Store char, checking keypress @@ -452,3 +498,5 @@ SCNTAB DW $800,$880,$900,$980,$A00,$A80,$B00,$B80 DW $828,$8A8,$928,$9A8,$A28,$AA8,$B28,$BA8 DW $850,$8D0,$950,$9D0,$A50,$AD0,$B50,$BD0 + +