mirror of
https://github.com/bobbimanners/Applecorn.git
synced 2025-03-04 18:33:28 +00:00
Made the cursor code more robust
This commit is contained in:
parent
0ac312aa10
commit
6645149c3f
BIN
applecorn.po
BIN
applecorn.po
Binary file not shown.
@ -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
|
||||
|
42
auxmem.shr.s
42
auxmem.shr.s
@ -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
|
||||
|
19
auxmem.vdu.s
19
auxmem.vdu.s
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user