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
|
* VS read cursor / VC write cursor
|
||||||
* The read and write cursors have separate save-unders in :SAVEBYTES
|
* The read and write cursors have separate save-unders in :SAVEBYTES
|
||||||
SHRCURSOR PHP ; Preserve flags
|
SHRCURSOR PHP ; Preserve flags
|
||||||
PHA ; Preserve character
|
PHA ; Preserve A
|
||||||
LDA VDUSTATUS ; If VDU5 mode, bail
|
LDA VDUSTATUS ; If VDU5 mode, bail
|
||||||
AND #$20
|
AND #$20
|
||||||
BNE :BAIL
|
BNE SHRCURSBAIL
|
||||||
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
|
|
||||||
JSR SHRCHARADDR ; Screen addr in VDUADDR
|
JSR SHRCHARADDR ; Screen addr in VDUADDR
|
||||||
LDA VDUADDR+0 ; LSB
|
>>> WRTMAIN
|
||||||
CLC
|
LDA VDUADDR+0 ; Copy addr to SHRVDUQ
|
||||||
ADC #<$460 ; $460 is seven rows
|
STA SHRVDUQ+0
|
||||||
STA VDUADDR+0
|
LDA VDUADDR+1
|
||||||
LDA VDUADDR+1 ; MSB
|
STA SHRVDUQ+1
|
||||||
ADC #>$460 ; $460 is seven rows
|
>>> WRTAUX
|
||||||
STA VDUADDR+1
|
PLA ; Recover A
|
||||||
LDY #$00
|
PLY ; Flags -> Y
|
||||||
LDX #$00
|
>>> XF2MAIN,SHRCURSM
|
||||||
PLA ; Recover character
|
SHRCURSRET >>> ENTAUX
|
||||||
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
|
|
||||||
RTS
|
RTS
|
||||||
:CURSOROFF
|
SHRCURSBAIL PLA
|
||||||
LDA [VDUADDR],Y ; See if cursor shown
|
PLP
|
||||||
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
|
|
||||||
RTS
|
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
|
* Write character to SHR screen in 320 pixel mode
|
||||||
|
@ -689,6 +644,7 @@ SHRSETGCOL PHA
|
||||||
>>> WRTAUX
|
>>> WRTAUX
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
|
||||||
* Wrapper to call SHRDEFPALM (which sets up default palette)
|
* Wrapper to call SHRDEFPALM (which sets up default palette)
|
||||||
SHRDEFPAL >>> XF2MAIN,SHRDEFPALM
|
SHRDEFPAL >>> XF2MAIN,SHRDEFPALM
|
||||||
SHRDEFPALRET >>> ENTAUX
|
SHRDEFPALRET >>> ENTAUX
|
||||||
|
|
|
@ -275,6 +275,74 @@ SHRCHAR640 PHY ; Preserve Y
|
||||||
RTS
|
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
|
* VDU5 plot char at graphics cursor position
|
||||||
SHRVDU5CH >>> ENTMAIN
|
SHRVDU5CH >>> ENTMAIN
|
||||||
CLC ; 65816 native mode
|
CLC ; 65816 native mode
|
||||||
|
|
Loading…
Reference in New Issue