mirror of
https://github.com/bobbimanners/Applecorn.git
synced 2025-03-04 03:29:29 +00:00
Moved SHR cursor code to mainmem
This commit is contained in:
parent
93588a6a8d
commit
24669a7ce0
BIN
applecorn.po
BIN
applecorn.po
Binary file not shown.
74
auxmem.shr.s
74
auxmem.shr.s
@ -119,70 +119,25 @@ SHRPRCHAR LDX VDUPIXELS ; Pixels per byte
|
||||
* VS read cursor / VC write cursor
|
||||
* The read and write cursors have separate save-unders in :SAVEBYTES
|
||||
SHRCURSOR PHP ; Preserve flags
|
||||
PHA ; Preserve character
|
||||
PHA ; Preserve A
|
||||
LDA VDUSTATUS ; If VDU5 mode, bail
|
||||
AND #$20
|
||||
BNE :BAIL
|
||||
LDA VDUPIXELS ; Pixels per byte
|
||||
CMP #$02 ; 2 is 320-mode (MODE 1)
|
||||
BNE :MODE0
|
||||
LDA #$04 ; 4 bytes in 320 mode
|
||||
LDX #$71 ; White/red
|
||||
BRA :S1
|
||||
:MODE0 LDA #$02 ; 2 bytes in 640 mode
|
||||
LDX #%11011101 ; White/red/white/red
|
||||
:S1 STA :BYTES ; Bytes per char
|
||||
STX :CURSBYTE
|
||||
LDA #$E1
|
||||
STA VDUBANK2
|
||||
BNE SHRCURSBAIL
|
||||
JSR SHRCHARADDR ; Screen addr in VDUADDR
|
||||
LDA VDUADDR+0 ; LSB
|
||||
CLC
|
||||
ADC #<$460 ; $460 is seven rows
|
||||
STA VDUADDR+0
|
||||
LDA VDUADDR+1 ; MSB
|
||||
ADC #>$460 ; $460 is seven rows
|
||||
STA VDUADDR+1
|
||||
LDY #$00
|
||||
LDX #$00
|
||||
PLA ; Recover character
|
||||
PLP ; Recover flags
|
||||
BVC :S2 ; VC: Write cursor
|
||||
INX ; Advance to 2nd half of :SAVEBYTES
|
||||
INX
|
||||
INX
|
||||
INX
|
||||
:S2 BCC :CURSOROFF ; CC: Remove cursor
|
||||
:CURSORON
|
||||
LDA [VDUADDR],Y ; See if cursor shown
|
||||
CMP :CURSBYTE
|
||||
BEQ :DONE ; Cursor shown already, skip
|
||||
:L1 LDAL [VDUADDR],Y
|
||||
STA :SAVEBYTES,X ; Preserve bytes under cursor
|
||||
LDA :CURSBYTE ; Byte of cursor data
|
||||
STAL [VDUADDR],Y
|
||||
INX
|
||||
INY
|
||||
CPY :BYTES
|
||||
BNE :L1
|
||||
>>> WRTMAIN
|
||||
LDA VDUADDR+0 ; Copy addr to SHRVDUQ
|
||||
STA SHRVDUQ+0
|
||||
LDA VDUADDR+1
|
||||
STA SHRVDUQ+1
|
||||
>>> WRTAUX
|
||||
PLA ; Recover A
|
||||
PLY ; Flags -> Y
|
||||
>>> XF2MAIN,SHRCURSM
|
||||
SHRCURSRET >>> ENTAUX
|
||||
RTS
|
||||
:CURSOROFF
|
||||
LDA [VDUADDR],Y ; See if cursor shown
|
||||
CMP :CURSBYTE
|
||||
BNE :DONE ; Cursor not shown, skip
|
||||
:L2 LDA :SAVEBYTES,X ; Restore bytes under cursor
|
||||
STAL [VDUADDR],Y
|
||||
INX
|
||||
INY
|
||||
CPY :BYTES
|
||||
BNE :L2
|
||||
:DONE RTS
|
||||
:BAIL PLA ; Fix stack
|
||||
PLA
|
||||
SHRCURSBAIL PLA
|
||||
PLP
|
||||
RTS
|
||||
:BYTES DB $00 ; 2 for 640-mode, 4 for 320-mode
|
||||
:CURSBYTE DB $00 ; Cursor byte for mode
|
||||
:SAVEBYTES DS 8 ; Bytes under cursors
|
||||
|
||||
|
||||
* Write character to SHR screen in 320 pixel mode
|
||||
@ -689,6 +644,7 @@ SHRSETGCOL PHA
|
||||
>>> WRTAUX
|
||||
RTS
|
||||
|
||||
|
||||
* Wrapper to call SHRDEFPALM (which sets up default palette)
|
||||
SHRDEFPAL >>> XF2MAIN,SHRDEFPALM
|
||||
SHRDEFPALRET >>> ENTAUX
|
||||
|
@ -275,6 +275,74 @@ SHRCHAR640 PHY ; Preserve Y
|
||||
RTS
|
||||
|
||||
|
||||
* Handle plotting & unplotting cursors
|
||||
* On entry: character in A, flags in Y
|
||||
* pointer to screen address in SHRVDUQ+0..1
|
||||
SHRCURSM >>> ENTMAIN
|
||||
PHY ; Preserve flags
|
||||
PHA ; Preserve character
|
||||
LDA SHRVDUQ+0 ; Copy pointer to A3L/H
|
||||
STA A3L
|
||||
LDA SHRVDUQ+1
|
||||
STA A3H
|
||||
LDA #$E1 ; Bank $E1
|
||||
STA A4L
|
||||
LDA SHRPIXELS ; Pixels per byte
|
||||
CMP #$02 ; 2 is 320-mode (MODE 1)
|
||||
BNE :MODE0
|
||||
LDA #$04 ; 4 bytes in 320 mode
|
||||
LDX #$71 ; White/red
|
||||
BRA :S1
|
||||
:MODE0 LDA #$02 ; 2 bytes in 640 mode
|
||||
LDX #%11011101 ; White/red/white/red
|
||||
:S1 STA :BYTES ; Bytes per char
|
||||
STX :CURSBYTE
|
||||
LDA A3L ; LSB
|
||||
CLC
|
||||
ADC #<$460 ; $460 is seven rows
|
||||
STA A3L
|
||||
LDA A3H ; MSB
|
||||
ADC #>$460 ; $460 is seven rows
|
||||
STA A3H
|
||||
LDY #$00
|
||||
LDX #$00
|
||||
PLA ; Recover character
|
||||
PLP ; Recover flags
|
||||
BVC :S2 ; VC: Write cursor
|
||||
INX ; Advance to 2nd half of :SAVEBYTES
|
||||
INX
|
||||
INX
|
||||
INX
|
||||
:S2 BCC :CURSOROFF ; CC: Remove cursor
|
||||
:CURSORON
|
||||
LDAL [A3L],Y ; See if cursor shown
|
||||
CMP :CURSBYTE
|
||||
BEQ :DONE ; Cursor shown already, skip
|
||||
:L1 LDAL [A3L],Y
|
||||
STA :SAVEBYTES,X ; Preserve bytes under cursor
|
||||
LDA :CURSBYTE ; Byte of cursor data
|
||||
STAL [A3L],Y
|
||||
INX
|
||||
INY
|
||||
CPY :BYTES
|
||||
BNE :L1
|
||||
>>> XF2AUX,SHRCURSRET
|
||||
:CURSOROFF
|
||||
LDAL [A3L],Y ; See if cursor shown
|
||||
CMP :CURSBYTE
|
||||
BNE :DONE ; Cursor not shown, skip
|
||||
:L2 LDA :SAVEBYTES,X ; Restore bytes under cursor
|
||||
STAL [A3L],Y
|
||||
INX
|
||||
INY
|
||||
CPY :BYTES
|
||||
BNE :L2
|
||||
:DONE >>> XF2AUX,SHRCURSRET
|
||||
:BYTES DB $00 ; 2 for 640-mode, 4 for 320-mode
|
||||
:CURSBYTE DB $00 ; Cursor byte for mode
|
||||
:SAVEBYTES DS 8 ; Bytes under cursors
|
||||
|
||||
|
||||
* VDU5 plot char at graphics cursor position
|
||||
SHRVDU5CH >>> ENTMAIN
|
||||
CLC ; 65816 native mode
|
||||
|
Loading…
x
Reference in New Issue
Block a user