Made the cursor code more robust

This commit is contained in:
Bobbi Webber-Manners 2023-01-10 11:08:54 -05:00
parent 0ac312aa10
commit 6645149c3f
4 changed files with 47 additions and 30 deletions

Binary file not shown.

View File

@ -157,7 +157,7 @@ INKEYGO CLI ; Enable IRQs
JSR GETCHRC ; Get character under cursor
STA COPYCHAR ; Save char under edit cursor
LDA CURSORED
JSR PUTCURSOR ; Display edit cursor
JSR SHOWCURSOR ; Display edit cursor [ON]
JSR COPYSWAP1 ; Swap to copy cursor
INKEYGO2 JSR GETCHRC ; Get character under cursor
STA OLDCHAR
@ -174,12 +174,14 @@ INKEY0 ADC FLASHER
BNE INKEY3 ; Not time to toggle yet
LDA OLDCHAR ; Prepare to remove cursor
BIT FLASHER
BMI INKEY2 ; Remove cursor
BPL INKEY1 ; Do not remove cursor
JSR REMCURSOR ; Cursor off [OFF]
BRA INKEY3
INKEY1 LDA CURSOR ; Add cursor
BIT VDUSTATUS
BVC INKEY2
LDA CURSORCP
INKEY2 JSR PUTCURSOR ; Toggle cursor
INKEY2 JSR SHOWCURSOR ; Cursor on [ON]
INKEY3 LDA #$27 ; Prepare to return CHR$27 if Escape state
CLC
BIT ESCFLAG ; Check Escape state
@ -213,10 +215,10 @@ INKEYOK PHA ; Save key or timeout
LDA OLDCHAR ; Prepare for main cursor
BIT VDUSTATUS
BVC INKEYOFF2 ; No editing cursor
JSR PUTCURSOR ; Remove cursor
JSR REMCURSOR ; Remove cursor [OFF]
JSR COPYSWAP1 ; Swap cursor back
LDA COPYCHAR ; Remove main cursor
INKEYOFF2 JSR PUTCURSOR ; Remove cursor
INKEYOFF2 JSR REMCURSOR ; Remove cursor [OFF]
PLP
BCS INKEYOK3 ; Timeout
LDA ESCFLAG ; Keypress, test for Escape
@ -540,7 +542,7 @@ KEYCURSOR CMP #$C9
BEQ KEYCOPY
PHA
LDA OLDCHAR
JSR PUTCURSOR ; Remove cursor
JSR REMCURSOR ; Remove cursor [OFF]
PLA
JSR COPYMOVE ; Move copy cursor
JSR GETCHRC ; Save char under cursor
@ -553,7 +555,7 @@ KEYCOPYTAB LDA FXTABCHAR ; Prepare TAB if no copy cursor
BVC KEYREADOK1 ; No copy cursor, return TAB
LDA OLDCHAR ; Get the char under cursor
PHA
JSR PUTCOPYCURS ; Output it to restore and move cursor
JSR PUTCOPYCURS ; Output it to restore and move cursor [OFF]
JSR GETCHRC ; Save char under cursor
STA OLDCHAR
PLA

View File

@ -147,10 +147,7 @@ SHRBGMASKA DW $0000 ; Keep a copy in aux mem too
* Write character to SHR screen
* On entry: A - character to write
SHRPRCHAR CMP CURSORED ; Edit cursor?
BNE :NOTEDIT
LDA #127 ; If so, use block char
:NOTEDIT LDX VDUPIXELS ; Pixels per byte
SHRPRCHAR LDX VDUPIXELS ; Pixels per byte
CPX #$02 ; 2 is 320-mode (MODE 1)
BNE :S1
JMP SHRPRCH320
@ -158,17 +155,19 @@ SHRPRCHAR CMP CURSORED ; Edit cursor?
* Plot or unplot a cursor on SHR screen
SHRCURSOR PHA ; Preserve character
* On entry: A - character to plot, CS show cursor/CC remove cursor
SHRCURSOR PHP ; Preserve flags
PHA ; Preserve character
LDA VDUPIXELS ; Pixels per byte
CMP #$02 ; 2 is 320-mode (MODE 1)
BNE :MODE0
LDA #$04 ; 4 bytes in 320 mode
LDX #$77 ; Two white pixels
LDX #$71 ; White/red
BRA :S1
:MODE0 LDA #$02 ; 2 bytes in 640 mode
LDX #$FF ; Two white pixels
LDX #%11011101 ; White/red/white/red
:S1 STA :BYTES ; Bytes per char
STX :WHITE
STX :CURSBYTE
LDA VDUSTATUS ; If VDU5 mode, bail
AND #$20
BNE :BAIL
@ -184,23 +183,25 @@ SHRCURSOR PHA ; Preserve character
STA VDUADDR+1
LDY #$00
PLA ; Recover character
CMP CURSOR
BEQ :CURSORON
CMP CURSORED
BEQ :CURSORON
CMP CURSORCP
BEQ :CURSORON
BRA :CURSOROFF
PLP ; Recover flags
BCC :CURSOROFF
:CURSORON
:L1 LDA :WHITE
STAL [VDUADDR],Y
LDA [VDUADDR],Y ; See if cursor shown
CMP :CURSBYTE
BEQ :DONE
STA :SAVEBYTE ; Preserve byte under cursor
LDA :CURSBYTE
:L1 STAL [VDUADDR],Y
INY
CPY :BYTES
BNE :L1
RTS
:CURSOROFF
:L2 LDA SHRBGMASKA
STAL [VDUADDR],Y
LDA [VDUADDR],Y ; See if cursor shown
CMP :CURSBYTE
BNE :DONE
LDA :SAVEBYTE ; Restore byte under cursor
:L2 STAL [VDUADDR],Y
INY
CPY :BYTES
BNE :L2
@ -208,7 +209,8 @@ SHRCURSOR PHA ; Preserve character
:BAIL PLA
RTS
:BYTES DB $00 ; 2 for 640-mode, 4 for 320-mode
:WHITE DB $00 ; White pixels for mode
:CURSBYTE DB $00 ; Cursor byte for mode
:SAVEBYTE DB $00 ; Byte under cursor
* Write character to SHR screen in 320 pixel mode

View File

@ -280,7 +280,7 @@ COPYMOVE PHA
JSR GETCHRC
STA COPYCHAR
LDA CURSORED
JSR PUTCURSOR ; Edit cursor
JSR SHOWCURSOR ; Edit cursor [ON]
SEC
JSR COPYSWAP2 ; Initialise copy cursor
ROR FLASHER
@ -390,13 +390,25 @@ PRCHR7 PLA
:NOTSHR RTS
* Wrapper around PUTCHRC used when drawing cursor
PUTCURSOR TAX ; Preserve character
* Wrapper around PUTCHRC used when showing cursor
SHOWCURSOR TAX ; Preserve character
BIT VDUSCREEN
BVS :SHR
TXA
JMP PUTCHRC
:SHR TXA ; Recover character
SEC ; Show cursor
JMP SHRCURSOR
* Wrapper around PUTCHRC used when removing cursor
REMCURSOR TAX ; Preserve character
BIT VDUSCREEN
BVS :SHR
TXA
JMP PUTCHRC
:SHR TXA ; Recover character
CLC ; Remove cursor
JMP SHRCURSOR
@ -407,6 +419,7 @@ PUTCOPYCURS TAX ; Preserve character
TXA
JMP OUTCHARCP
:SHR TXA ; Recover character
CLC ; Remove cursor
JSR SHRCURSOR
JMP OUTCHARCP2