mirror of
https://github.com/bobbimanners/Applecorn.git
synced 2024-06-08 04:29:48 +00:00
Compare commits
4 Commits
b32903a7e0
...
24669a7ce0
Author | SHA1 | Date | |
---|---|---|---|
|
24669a7ce0 | ||
|
93588a6a8d | ||
|
6016c59eeb | ||
|
4c8deecbf8 |
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
|
||||||
|
|
106
mainmem.shr.s
106
mainmem.shr.s
|
@ -90,6 +90,7 @@ SHRXPLDFONT >>> ENTMAIN
|
||||||
INC A
|
INC A
|
||||||
CMP #128 ; 96 chars in FONT8
|
CMP #128 ; 96 chars in FONT8
|
||||||
BNE :L1
|
BNE :L1
|
||||||
|
JSR SHRCLR24 ; Clear row 24
|
||||||
>>> XF2AUX,SHRV22RET
|
>>> XF2AUX,SHRV22RET
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
@ -198,6 +199,24 @@ SHRXPLDROW LDX SHRPIXELS ; Pixels per byte
|
||||||
:S4 RTS
|
:S4 RTS
|
||||||
|
|
||||||
|
|
||||||
|
* Clear text row 24 (0-based index)
|
||||||
|
SHRCLR24 CLC ; 65816 native mode
|
||||||
|
XCE
|
||||||
|
REP #$30 ; 16 bit M & X
|
||||||
|
MX %00 ; Tell Merlin
|
||||||
|
LDX #$00
|
||||||
|
LDA #$00
|
||||||
|
:L1 STAL $E19800,X
|
||||||
|
INX
|
||||||
|
INX
|
||||||
|
CPX #$0500
|
||||||
|
BNE :L1
|
||||||
|
SEC ; 65816 emulation mode
|
||||||
|
XCE
|
||||||
|
MX %11 ; Tell Merlin
|
||||||
|
RTS
|
||||||
|
|
||||||
|
|
||||||
* Explode one pixel row of font in 320 mode
|
* Explode one pixel row of font in 320 mode
|
||||||
* 4 bytes per char, 4 bits per pixel
|
* 4 bytes per char, 4 bits per pixel
|
||||||
* On entry: A contains row of font data
|
* On entry: A contains row of font data
|
||||||
|
@ -256,10 +275,76 @@ 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
|
||||||
* PHP ; Disable interrupts
|
|
||||||
* SEI
|
|
||||||
CLC ; 65816 native mode
|
CLC ; 65816 native mode
|
||||||
XCE
|
XCE
|
||||||
REP #$30 ; 16 bit M & X
|
REP #$30 ; 16 bit M & X
|
||||||
|
@ -385,7 +470,6 @@ SHRVDU5CH >>> ENTMAIN
|
||||||
:DONE SEC ; 65816 emulation mode
|
:DONE SEC ; 65816 emulation mode
|
||||||
XCE
|
XCE
|
||||||
MX %11 ; Tell Merlin
|
MX %11 ; Tell Merlin
|
||||||
* PLP
|
|
||||||
>>> XF2AUX,SHRPRCH320RET
|
>>> XF2AUX,SHRPRCH320RET
|
||||||
* Zero page
|
* Zero page
|
||||||
:COLCTR EQU TMPZP+0
|
:COLCTR EQU TMPZP+0
|
||||||
|
@ -685,8 +769,6 @@ SHRPLOT >>> ENTMAIN
|
||||||
:S1 CMP #$40 ; Plot point
|
:S1 CMP #$40 ; Plot point
|
||||||
BNE :BAIL ; Other? Bail out
|
BNE :BAIL ; Other? Bail out
|
||||||
|
|
||||||
* PHP ; Disable interrupts
|
|
||||||
* SEI
|
|
||||||
CLC ; 65816 native mode
|
CLC ; 65816 native mode
|
||||||
XCE
|
XCE
|
||||||
SEP #$30 ; 8 bit M & X
|
SEP #$30 ; 8 bit M & X
|
||||||
|
@ -695,7 +777,6 @@ SHRPLOT >>> ENTMAIN
|
||||||
SEC ; 65816 emulation mode
|
SEC ; 65816 emulation mode
|
||||||
XCE
|
XCE
|
||||||
MX %11 ; Tell Merlin
|
MX %11 ; Tell Merlin
|
||||||
* PLP ; Resume normal service
|
|
||||||
|
|
||||||
BRA :S2
|
BRA :S2
|
||||||
:S2 PLA ; Store prev pt in screen coords
|
:S2 PLA ; Store prev pt in screen coords
|
||||||
|
@ -906,8 +987,6 @@ SHRLINE LDA A2L ; y1
|
||||||
INC A
|
INC A
|
||||||
:S1 STA TMPZP+0 ; abs(y1 - y0)
|
:S1 STA TMPZP+0 ; abs(y1 - y0)
|
||||||
STZ TMPZP+1 ; Pad to 16 bit
|
STZ TMPZP+1 ; Pad to 16 bit
|
||||||
* PHP ; Disable interrupts
|
|
||||||
* SEI
|
|
||||||
CLC ; 65816 native mode
|
CLC ; 65816 native mode
|
||||||
XCE
|
XCE
|
||||||
REP #$30 ; 16 bit M & X
|
REP #$30 ; 16 bit M & X
|
||||||
|
@ -1019,7 +1098,6 @@ SHRLINELO MX %00 ; Tell merlin 16 bit M & X
|
||||||
SEC ; 65816 emulation mode
|
SEC ; 65816 emulation mode
|
||||||
XCE
|
XCE
|
||||||
MX %11 ; Tell Merlin
|
MX %11 ; Tell Merlin
|
||||||
* PLP ; Resume normal service
|
|
||||||
RTS
|
RTS
|
||||||
* Zero page
|
* Zero page
|
||||||
:DX EQU TMPZP+0 ; dx initially, then (2 * (dy - dx))
|
:DX EQU TMPZP+0 ; dx initially, then (2 * (dy - dx))
|
||||||
|
@ -1111,8 +1189,6 @@ SHRLINEHI MX %00 ; Tell Merlin 16 bit M & X
|
||||||
* from 1280x1024 to 640x200 or 320x200
|
* from 1280x1024 to 640x200 or 320x200
|
||||||
* On return: X-coordinate in A1L/H, Y-coordinate in A2L (A2H=0)
|
* On return: X-coordinate in A1L/H, Y-coordinate in A2L (A2H=0)
|
||||||
SHRCOORD MAC
|
SHRCOORD MAC
|
||||||
* PHP ; Disable interrupts
|
|
||||||
* SEI
|
|
||||||
CLC ; 65816 native mode
|
CLC ; 65816 native mode
|
||||||
XCE
|
XCE
|
||||||
REP #$30 ; 16 bit M & X
|
REP #$30 ; 16 bit M & X
|
||||||
|
@ -1160,7 +1236,6 @@ SHRCOORDM0 LDA SHRVDUQ+5
|
||||||
SEC ; Back to emulation mode
|
SEC ; Back to emulation mode
|
||||||
XCE
|
XCE
|
||||||
MX %11 ; Tell Merlin
|
MX %11 ; Tell Merlin
|
||||||
* PLP ; Normal service resumed
|
|
||||||
BRA SHRCOORDEND
|
BRA SHRCOORDEND
|
||||||
|
|
||||||
SHRCOORDNEG MX %00 ; Tell Merlin we are 16 bit
|
SHRCOORDNEG MX %00 ; Tell Merlin we are 16 bit
|
||||||
|
@ -1235,8 +1310,6 @@ SHRCOORD2M0 LDA SHRVDUQ,X
|
||||||
|
|
||||||
* Clear the graphics window
|
* Clear the graphics window
|
||||||
SHRVDU16 >>> ENTMAIN
|
SHRVDU16 >>> ENTMAIN
|
||||||
* PHP ; Disable interrupts
|
|
||||||
* SEI
|
|
||||||
CLC ; 816 native mode
|
CLC ; 816 native mode
|
||||||
XCE
|
XCE
|
||||||
REP #$30 ; 16 bit M & X
|
REP #$30 ; 16 bit M & X
|
||||||
|
@ -1333,7 +1406,6 @@ SHRVDU16 >>> ENTMAIN
|
||||||
SEC ; Back to 6502 emu mode
|
SEC ; Back to 6502 emu mode
|
||||||
XCE
|
XCE
|
||||||
MX %11 ; Tell Merlin
|
MX %11 ; Tell Merlin
|
||||||
* PLP ; Normal service resumed
|
|
||||||
>>> XF2AUX,SHRCLRRET
|
>>> XF2AUX,SHRCLRRET
|
||||||
:LEFT320 DB %11111111
|
:LEFT320 DB %11111111
|
||||||
DB %00001111
|
DB %00001111
|
||||||
|
@ -1386,8 +1458,6 @@ SHRVDU16V PHA
|
||||||
* Validate graphics window parms & store if okay
|
* Validate graphics window parms & store if okay
|
||||||
* First 8 bytes of SHRVDUQ: left, bottom, right, top
|
* First 8 bytes of SHRVDUQ: left, bottom, right, top
|
||||||
SHRVDU24 >>> ENTMAIN
|
SHRVDU24 >>> ENTMAIN
|
||||||
* PHP ; Disable interrupts
|
|
||||||
* SEI
|
|
||||||
CLC ; 65816 native mode
|
CLC ; 65816 native mode
|
||||||
XCE
|
XCE
|
||||||
REP #$30 ; 16 bit M & X
|
REP #$30 ; 16 bit M & X
|
||||||
|
@ -1418,11 +1488,9 @@ SHRVDU24 >>> ENTMAIN
|
||||||
|
|
||||||
SEC ; 65816 emulation mode
|
SEC ; 65816 emulation mode
|
||||||
XCE
|
XCE
|
||||||
* PLP
|
|
||||||
>>> XF2AUX,VDU24RET
|
>>> XF2AUX,VDU24RET
|
||||||
:BAD SEC ; 65816 emulation mode
|
:BAD SEC ; 65816 emulation mode
|
||||||
XCE
|
XCE
|
||||||
* PLP
|
|
||||||
>>> XF2AUX,VDUXXRET
|
>>> XF2AUX,VDUXXRET
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user