mirror of
https://github.com/bobbimanners/Applecorn.git
synced 2025-04-10 03:37:42 +00:00
Merge branch 'bobbimanners:main' into main
This commit is contained in:
commit
a6c5479985
0
.gitignore
vendored
Normal file
0
.gitignore
vendored
Normal file
BIN
Releases/applecorn-0.52-beta.po
Normal file
BIN
Releases/applecorn-0.52-beta.po
Normal file
Binary file not shown.
BIN
Releases/applecorn-0.53-beta.po
Normal file
BIN
Releases/applecorn-0.53-beta.po
Normal file
Binary file not shown.
BIN
Releases/applecorn-0.54-beta.po
Normal file
BIN
Releases/applecorn-0.54-beta.po
Normal file
Binary file not shown.
BIN
applecorn.po
BIN
applecorn.po
Binary file not shown.
@ -273,6 +273,7 @@ MAINZP MAC
|
||||
PUT MAINMEM.LDR
|
||||
PUT AUXMEM.MOSEQU
|
||||
PUT AUXMEM.INIT
|
||||
PUT AUXMEM.VERS
|
||||
PUT AUXMEM.VDU
|
||||
PUT AUXMEM.HGR
|
||||
PUT AUXMEM.SHR
|
||||
|
@ -224,5 +224,4 @@ BYTE00 BEQ BYTE00A ; OSBYTE 0,0 - generate error
|
||||
RTS ; %000x1xxx host type, 'A'pple
|
||||
BYTE00A BRK
|
||||
DB $F7
|
||||
HELLO ASC 'Applecorn MOS 2022-01-13'
|
||||
DB $00 ; Unify MOS messages
|
||||
|
||||
|
86
auxmem.shr.s
86
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
|
||||
@ -199,8 +154,6 @@ SHRPRCH320RET >>> ENTAUX
|
||||
RTS
|
||||
|
||||
SHRPRCH320V4 TXA
|
||||
* PHP ; Disable interrupts
|
||||
* SEI
|
||||
CLC ; 65816 native mode
|
||||
XCE
|
||||
REP #$30 ; 16 bit M & X
|
||||
@ -284,7 +237,6 @@ SHRPRCH320V4 TXA
|
||||
SEC ; Back to emulation mode
|
||||
XCE
|
||||
MX %11 ; Tell Merlin
|
||||
* PLP ; Normal service resumed
|
||||
RTS
|
||||
|
||||
|
||||
@ -301,8 +253,6 @@ SHRPRCH640 SEC
|
||||
* (Returns via SHRPRCH320RET)
|
||||
|
||||
SHRPRCH640V4 TXA
|
||||
* PHP ; Disable interrupts
|
||||
* SEI
|
||||
CLC ; 65816 native mode
|
||||
XCE
|
||||
REP #$30 ; 16 bit M & X
|
||||
@ -361,7 +311,6 @@ SHRPRCH640V4 TXA
|
||||
SEC ; Back to emulation mode
|
||||
XCE
|
||||
MX %11 ; Tell Merlin
|
||||
* PLP ; Normal service resumed
|
||||
RTS
|
||||
|
||||
|
||||
@ -416,8 +365,6 @@ SHRSCR1LINE PHY
|
||||
PHX
|
||||
STA VDUADDR+1 ; Screen line -> MSB
|
||||
STZ VDUADDR+0 ; Zero LSB
|
||||
* PHP ; Disable interrupts
|
||||
* SEI
|
||||
CLC ; Enter native mode
|
||||
XCE
|
||||
PHB ; Preserve data bank
|
||||
@ -479,7 +426,6 @@ SHRSCR1LINE PHY
|
||||
:DONE PLB ; Recover data bank
|
||||
SEC ; Back to emulation mode
|
||||
XCE
|
||||
* PLP ; Recover flags + regs
|
||||
PLX
|
||||
PLY
|
||||
RTS
|
||||
@ -491,8 +437,6 @@ SHRRSCR1LINE PHY
|
||||
PHX
|
||||
STA VDUADDR+1 ; Screen line -> MSB
|
||||
STZ VDUADDR+0 ; Zero LSB
|
||||
* PHP ; Disable interrupts
|
||||
* SEI
|
||||
CLC ; Enter native mode
|
||||
XCE
|
||||
PHB ; Preserve data bank
|
||||
@ -554,7 +498,6 @@ SHRRSCR1LINE PHY
|
||||
:DONE PLB ; Recover data bank
|
||||
SEC ; Back to emulation mode
|
||||
XCE
|
||||
* PLP ; Recover flags + regs
|
||||
PLX
|
||||
PLY
|
||||
RTS
|
||||
@ -701,6 +644,7 @@ SHRSETGCOL PHA
|
||||
>>> WRTAUX
|
||||
RTS
|
||||
|
||||
|
||||
* Wrapper to call SHRDEFPALM (which sets up default palette)
|
||||
SHRDEFPAL >>> XF2MAIN,SHRDEFPALM
|
||||
SHRDEFPALRET >>> ENTAUX
|
||||
|
134
auxmem.vdu.s
134
auxmem.vdu.s
@ -311,12 +311,23 @@ COPYSWAP4 RTS
|
||||
***************************
|
||||
* Perform backspace & delete operation
|
||||
VDU127 JSR VDU08 ; Move cursor back
|
||||
LDA #' ' ; Overwrite with a space
|
||||
BNE PUTCHRC
|
||||
LDA VDUSTATUS
|
||||
AND #$20 ; Bit 5 VDU5 mode
|
||||
BEQ :NOTVDU5
|
||||
>>> XF2MAIN,SHRVDU127
|
||||
RTS
|
||||
:NOTVDU5 LDA #' ' ; Overwrite with a space
|
||||
BRA PUTCHRC
|
||||
|
||||
* Display character at current (TEXTX,TEXTY)
|
||||
PRCHRC PHA ; Save character
|
||||
BIT ESCFLAG
|
||||
|
||||
LDA VDUSTATUS
|
||||
AND #$20 ; Bit 5 VDU5 mode
|
||||
BEQ :S1
|
||||
JMP PRCHR7 ; Jump over text mode stuff
|
||||
|
||||
:S1 BIT ESCFLAG
|
||||
BMI :RESUME
|
||||
JSR ESCPOLL
|
||||
BCS :RESUME
|
||||
@ -529,54 +540,80 @@ CHARADDROK STA VDUBANK
|
||||
* CC=auxmem, CS=mainmem, X=preserved
|
||||
|
||||
|
||||
* Handle paged mode when moving up the screen
|
||||
VDUUP DEC FXLINES
|
||||
BPL :DONE
|
||||
STZ FXLINES
|
||||
:DONE RTS
|
||||
|
||||
* Handle paged mode when moving down the screen
|
||||
VDUDOWN LDA VDUSTATUS
|
||||
AND #$04 ; Bit 2 -> paged mode
|
||||
BEQ :DONE
|
||||
LDA TXTWINBOT
|
||||
SEC
|
||||
SBC TXTWINTOP
|
||||
STA :HEIGHT
|
||||
INC FXLINES
|
||||
LDA FXLINES
|
||||
CMP :HEIGHT
|
||||
BCC :DONE ; FXLINES <= limit
|
||||
:L1 JSR BYTE76 ; Check keyboard
|
||||
LDA FXKBDSTATE
|
||||
AND #$01 ; See if Open Apple depressed
|
||||
BEQ :L1 ; If not, spin
|
||||
STZ FXLINES
|
||||
:DONE RTS
|
||||
:HEIGHT DB $00
|
||||
|
||||
* Generic return for all SHRVDUxx returns to aux mem
|
||||
VDUXXRET >>> ENTAUX ; SHRVDU08 returns here
|
||||
RTS
|
||||
|
||||
* Move text cursor position
|
||||
***************************
|
||||
* Move cursor left
|
||||
VDU08 LDA VDUTEXTX ; COL
|
||||
VDU08 LDA VDUSTATUS
|
||||
AND #$20 ; Bit 5 -> VDU5 mode
|
||||
BEQ VDU08VDU4 ; VDU5 not in effect
|
||||
BIT VDUSCREEN
|
||||
BVC VDU08DONE ; VDU5 but not SHR
|
||||
>>> XF2MAIN,SHRVDU08
|
||||
VDU08VDU4 LDA VDUTEXTX ; COL
|
||||
CMP TXTWINLFT
|
||||
BEQ :S1
|
||||
DEC VDUTEXTX ; COL
|
||||
BRA :S3
|
||||
BRA VDU08DONE
|
||||
:S1 LDA VDUTEXTY ; ROW
|
||||
CMP TXTWINTOP
|
||||
BEQ :S3
|
||||
BEQ VDU08DONE
|
||||
DEC VDUTEXTY ; ROW
|
||||
LDA TXTWINRGT
|
||||
STA VDUTEXTX ; COL
|
||||
:S3 LDA VDUSTATUS
|
||||
AND #$20 ; Bit 5 -> VDU5 mode
|
||||
BEQ VDU08DONE
|
||||
BIT VDUSCREEN
|
||||
BVC VDU08DONE ; Not SHR, skip
|
||||
>>> XF2MAIN,SHRVDU08
|
||||
VDU08RET >>> ENTAUX
|
||||
JSR VDUUP ; Handle paged mode
|
||||
VDU08DONE RTS
|
||||
|
||||
* Move cursor right
|
||||
VDU09 LDA VDUSTATUS
|
||||
AND #$20 ; Bit 5 VDU 5 mode
|
||||
BEQ VDU09SKIP
|
||||
BEQ VDU09VDU4 ; VDU5 not in effect
|
||||
BIT VDUSCREEN
|
||||
BVC VDU09SKIP ; Not SHR, skip
|
||||
BVC VDU09DONE ; VDU5 but not SHR
|
||||
>>> XF2MAIN,SHRVDU09
|
||||
VDU09RET >>> ENTAUX
|
||||
VDU09SKIP LDA VDUTEXTX ; COL
|
||||
VDU09VDU4 LDA VDUTEXTX ; COL
|
||||
CMP TXTWINRGT
|
||||
BCC :S2
|
||||
BCC VDU09RGHT
|
||||
LDA TXTWINLFT
|
||||
STA VDUTEXTX ; COL
|
||||
JSR VDUDOWN ; Handle paged mode
|
||||
LDA VDUTEXTY ; ROW
|
||||
CMP TXTWINBOT
|
||||
BEQ SCROLL
|
||||
INC VDUTEXTY ; ROW
|
||||
:DONE RTS
|
||||
:S2 INC VDUTEXTX ; COL
|
||||
BRA :DONE
|
||||
SCROLL LDA VDUSTATUS
|
||||
AND #$20 ; Bit 5 VDU5 mode
|
||||
BEQ :S3
|
||||
RTS ; No scroll in VDU5
|
||||
:S3 JSR SCROLLER
|
||||
VDU09DONE RTS
|
||||
VDU09RGHT INC VDUTEXTX ; COL
|
||||
BRA VDU09DONE
|
||||
SCROLL JSR SCROLLER
|
||||
LDA TXTWINLFT
|
||||
STA VDUTEXTX
|
||||
JSR CLREOL
|
||||
@ -585,12 +622,12 @@ SCROLL LDA VDUSTATUS
|
||||
* Move cursor down
|
||||
VDU10 LDA VDUSTATUS
|
||||
AND #$20 ; Bit 5 -> VDU5 mode
|
||||
BEQ VDU10SKIP
|
||||
BEQ VDU10VDU4 ; VDU5 not in effect
|
||||
BIT VDUSCREEN
|
||||
BVC VDU10SKIP ; Not SHR, skip
|
||||
BVC VDU10DONE ; VDU5 but not SHR
|
||||
>>> XF2MAIN,SHRVDU10
|
||||
VDU10RET >>> ENTAUX
|
||||
VDU10SKIP LDA VDUTEXTY ; ROW
|
||||
VDU10VDU4 JSR VDUDOWN ; Handle paged mode
|
||||
LDA VDUTEXTY ; ROW
|
||||
CMP TXTWINBOT
|
||||
BEQ VDU10SCRL
|
||||
INC VDUTEXTY ; ROW
|
||||
@ -600,37 +637,36 @@ VDU10SCRL JMP SCROLL
|
||||
* Move cursor up
|
||||
VDU11 LDA VDUSTATUS
|
||||
AND #$20 ; Bit 5 -> VDU5 mode
|
||||
BEQ VDU11SKIP
|
||||
BEQ VDU11VDU4 ; VDU5 not in effect
|
||||
BIT VDUSCREEN
|
||||
BVC VDU11SKIP ; Not SHR, skip
|
||||
BVC VDU11DONE ; VDU5 but not SHR
|
||||
>>> XF2MAIN,SHRVDU11
|
||||
VDU11RET >>> ENTAUX
|
||||
VDU11SKIP LDA VDUTEXTY ; ROW
|
||||
VDU11VDU4 LDA VDUTEXTY ; ROW
|
||||
CMP TXTWINTOP
|
||||
BNE :S1
|
||||
BNE VDU11UP
|
||||
LDA VDUTEXTX ; COL
|
||||
CMP TXTWINLFT
|
||||
BNE :DONE
|
||||
BNE VDU11DONE
|
||||
JSR RSCROLLER
|
||||
LDA TXTWINLFT
|
||||
STA VDUTEXTX
|
||||
JSR CLREOL
|
||||
RTS
|
||||
:S1 DEC VDUTEXTY ; ROW
|
||||
:DONE RTS
|
||||
VDU11UP DEC VDUTEXTY ; ROW
|
||||
JSR VDUUP ; Handle paged mode
|
||||
VDU11DONE RTS
|
||||
|
||||
* Move to start of line
|
||||
VDU13 LDA #$BF
|
||||
VDU13 LDA VDUSTATUS
|
||||
AND #$20 ; Bit 5 -> VDU5 mode
|
||||
BEQ VDU13VDU4 ; VDU5 not in effect
|
||||
BIT VDUSCREEN
|
||||
BVC VDU13DONE ; VDU5 but not SHR
|
||||
>>> XF2MAIN,SHRVDU13
|
||||
VDU13VDU4 LDA #$BF
|
||||
JSR CLRSTATUS ; Turn copy cursor off
|
||||
LDA TXTWINLFT
|
||||
STA VDUTEXTX ; COL
|
||||
LDA VDUSTATUS
|
||||
AND #$20 ; Bit 5 -> VDU5 mode
|
||||
BEQ VDU13DONE
|
||||
BIT VDUSCREEN
|
||||
BVC VDU13DONE ; Not SHR, skip
|
||||
>>> XF2MAIN,SHRVDU13
|
||||
VDU13RET >>> ENTAUX
|
||||
VDU13DONE RTS
|
||||
|
||||
* Move to (0,0)
|
||||
@ -1134,8 +1170,6 @@ VDU19 LDA VDUQ+5 ; Second parm
|
||||
STX SHRVDUQ ; Stash X for call to main
|
||||
>>> WRTAUX
|
||||
>>> XF2MAIN,SHRPALCUSTOM
|
||||
VDU19RET >>> ENTAUX
|
||||
RTS
|
||||
:TMP DB $00
|
||||
|
||||
|
||||
@ -1221,8 +1255,6 @@ VDU24 BIT VDUBANK ; Check if this is a GS
|
||||
BNE :L1
|
||||
>>> WRTAUX
|
||||
>>> XF2MAIN,SHRVDU24
|
||||
VDU24RETBAD >>> ENTAUX
|
||||
RTS ; Validation failure
|
||||
VDU24RET >>> ENTAUX
|
||||
LDY #GFXWINLFT+7-VDUVARS ; Copy to gfx window params
|
||||
LDA #$08
|
||||
@ -1373,8 +1405,6 @@ VDU23 BIT VDUSCREEN ; Check we are in SHR mode
|
||||
RTS
|
||||
:SHR JSR VDUCOPYMAIN ; Copy VDUQ to main mem
|
||||
>>> XF2MAIN,SHRUSERCHAR
|
||||
VDU23RET >>> ENTAUX
|
||||
RTS
|
||||
|
||||
* Copy VDUQ to SHRVDUQ in main memory
|
||||
VDUCOPYMAIN LDY #$00
|
||||
|
3
auxmem.vers.s
Normal file
3
auxmem.vers.s
Normal file
@ -0,0 +1,3 @@
|
||||
* Auto-generated by .git/hooks/pre-commit
|
||||
HELLO ASC 'Applecorn v0.54-beta-0-g3325769'
|
||||
DB $00
|
15
hooks_pre-commit
Executable file
15
hooks_pre-commit
Executable file
@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Pre-commit hook for Applecorn
|
||||
|
||||
f="auxmem.vers.s"
|
||||
V=`git describe`
|
||||
echo '* Auto-generated by .git/hooks/pre-commit' > $f
|
||||
echo "HELLO ASC 'Applecorn $V'" >> $f
|
||||
echo " DB \$00" >> $f
|
||||
|
||||
if ! ./m32build; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
8
m32build
8
m32build
@ -3,7 +3,13 @@
|
||||
# Uses cadius for manipulating ProDOS disk images
|
||||
#
|
||||
|
||||
merlin32 -v applecorn.s
|
||||
if ! merlin32 -v applecorn.s; then
|
||||
echo +++++++++++++++++++++++
|
||||
echo +++++ BUILD ERROR +++++
|
||||
echo +++++++++++++++++++++++
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cp APLCORN.SYSTEM APLCORN.SYSTEM#FF2000
|
||||
cadius deletefile applecorn.po /APPLECORN/APLCORN.SYSTEM
|
||||
cadius addfile applecorn.po /APPLECORN APLCORN.SYSTEM#FF2000
|
||||
|
251
mainmem.shr.s
251
mainmem.shr.s
@ -90,8 +90,8 @@ SHRXPLDFONT >>> ENTMAIN
|
||||
INC A
|
||||
CMP #128 ; 96 chars in FONT8
|
||||
BNE :L1
|
||||
JSR SHRCLR24 ; Clear row 24
|
||||
>>> XF2AUX,SHRV22RET
|
||||
RTS
|
||||
|
||||
|
||||
* Explode one character to location pointed to by A3L
|
||||
@ -165,7 +165,7 @@ SHRUSERCHAR >>> ENTMAIN
|
||||
INY
|
||||
CPY #$08 ; Last row?
|
||||
BNE :L1
|
||||
:DONE >>> XF2AUX,VDU23RET
|
||||
:DONE >>> XF2AUX,VDUXXRET
|
||||
:INCREMENT DB $00
|
||||
|
||||
|
||||
@ -198,6 +198,24 @@ SHRXPLDROW LDX SHRPIXELS ; Pixels per byte
|
||||
: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
|
||||
* 4 bytes per char, 4 bits per pixel
|
||||
* On entry: A contains row of font data
|
||||
@ -256,10 +274,76 @@ 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
|
||||
* PHP ; Disable interrupts
|
||||
* SEI
|
||||
CLC ; 65816 native mode
|
||||
XCE
|
||||
REP #$30 ; 16 bit M & X
|
||||
@ -385,7 +469,6 @@ SHRVDU5CH >>> ENTMAIN
|
||||
:DONE SEC ; 65816 emulation mode
|
||||
XCE
|
||||
MX %11 ; Tell Merlin
|
||||
* PLP
|
||||
>>> XF2AUX,SHRPRCH320RET
|
||||
* Zero page
|
||||
:COLCTR EQU TMPZP+0
|
||||
@ -445,10 +528,9 @@ SHRSHIFT MX %00 ; Tell merlin we are 16 bit M&X
|
||||
RTS
|
||||
MX %11
|
||||
|
||||
|
||||
* Handle cursor left in VDU5 mode
|
||||
SHRVDU08 >>> ENTMAIN
|
||||
* PHP ; Disable interrupts
|
||||
* SEI
|
||||
CLC ; 65816 native mode
|
||||
XCE
|
||||
REP #$30 ; 16 bit M & X
|
||||
@ -457,35 +539,32 @@ SHRVDU08 >>> ENTMAIN
|
||||
SEC
|
||||
SBC #$08 ; Move to previous column
|
||||
CMP SHRWINLFT
|
||||
BMI :PREVLINE
|
||||
BMI :PREVLINE ; x-pos < SHRWINLFT
|
||||
STA SHRXPIXEL
|
||||
BRA :DONE
|
||||
:PREVLINE LDA SHRWINRGT
|
||||
SEC
|
||||
SBC #$08
|
||||
STA SHRXPIXEL
|
||||
LDA SHRYPIXEL
|
||||
:PREVLINE LDA SHRYPIXEL
|
||||
CLC ; Add 8 rows (go up)
|
||||
ADC #$08
|
||||
CMP SHRWINTOP
|
||||
BMI :BOTTOMROW
|
||||
BCS :HOME ; y-pos >= SHRWINTOP
|
||||
STA SHRYPIXEL
|
||||
LDA SHRWINRGT
|
||||
SEC
|
||||
SBC #$07
|
||||
STA SHRXPIXEL
|
||||
BRA :DONE
|
||||
:BOTTOMROW LDA SHRWINBTM
|
||||
CLC
|
||||
ADC #$08 ; Go up one row from bottom
|
||||
:HOME LDA SHRWINTOP
|
||||
STA SHRYPIXEL
|
||||
LDA SHRWINLFT
|
||||
STA SHRXPIXEL
|
||||
:DONE SEC ; 65816 emulation mode
|
||||
XCE
|
||||
MX %11 ; Tell Merlin
|
||||
* PLP
|
||||
>>> XF2AUX,VDU08RET
|
||||
>>> XF2AUX,VDUXXRET
|
||||
|
||||
|
||||
* Handle cursor right in VDU5 mode
|
||||
SHRVDU09 >>> ENTMAIN
|
||||
* PHP ; Disable interrupts
|
||||
* SEI
|
||||
CLC ; 65816 native mode
|
||||
XCE
|
||||
REP #$30 ; 16 bit M & X
|
||||
@ -494,7 +573,7 @@ SHRVDU09 >>> ENTMAIN
|
||||
CLC
|
||||
ADC #$08 ; Advance to next column
|
||||
CMP SHRWINRGT
|
||||
BCS :NEWLINE ; X-pos >= limit
|
||||
BCS :NEWLINE ; x-pos >= SHRWINRGT
|
||||
STA SHRXPIXEL
|
||||
BRA :DONE
|
||||
:NEWLINE LDA SHRWINLFT
|
||||
@ -503,14 +582,11 @@ SHRVDU09 >>> ENTMAIN
|
||||
:DONE SEC ; 65816 emulation mode
|
||||
XCE
|
||||
MX %11 ; Tell Merlin
|
||||
* PLP
|
||||
>>> XF2AUX,VDU09RET
|
||||
>>> XF2AUX,VDUXXRET
|
||||
|
||||
|
||||
* Handle cursor down / linefeed in VDU5 mode
|
||||
SHRVDU10 >>> ENTMAIN
|
||||
* PHP ; Disable interrupts
|
||||
* SEI
|
||||
CLC ; 65816 native mode
|
||||
XCE
|
||||
REP #$30 ; 16 bit M & X
|
||||
@ -519,8 +595,7 @@ SHRVDU10 >>> ENTMAIN
|
||||
:DONE SEC ; 65816 emulation mode
|
||||
XCE
|
||||
MX %11 ; Tell Merlin
|
||||
* PLP
|
||||
>>> XF2AUX,VDU10RET
|
||||
>>> XF2AUX,VDUXXRET
|
||||
|
||||
|
||||
* Handle cursor up in VDU5 mode
|
||||
@ -533,15 +608,15 @@ SHRVDU11 >>> ENTMAIN
|
||||
CLC
|
||||
ADC #$08 ; Height of row of text
|
||||
CMP SHRWINTOP
|
||||
BPL :TOPPAGE
|
||||
BCS :TOP ; y-pos >= SHRWINTOP
|
||||
STA SHRYPIXEL
|
||||
BRA :DONE
|
||||
:TOPPAGE LDA SHRWINTOP
|
||||
:TOP LDA SHRWINTOP
|
||||
STA SHRYPIXEL
|
||||
:DONE SEC ; 65816 emulation mode
|
||||
XCE
|
||||
MX %11 ; Tell Merlin
|
||||
>>> XF2AUX,VDU11RET
|
||||
>>> XF2AUX,VDUXXRET
|
||||
|
||||
|
||||
* Handle linefeed in VDU5 mode - does the actual work
|
||||
@ -551,7 +626,7 @@ SHRVDU5LF MX %00 ; Tell Merlin
|
||||
SEC
|
||||
SBC #16 ; Height of this+next row
|
||||
CMP SHRWINBTM
|
||||
BMI :NEWPAGE ; Less than 16 rows left
|
||||
BCC :NEWPAGE ; Less than 16 rows left
|
||||
LDA SHRYPIXEL
|
||||
SEC
|
||||
SBC #$08
|
||||
@ -565,8 +640,6 @@ SHRVDU5LF MX %00 ; Tell Merlin
|
||||
|
||||
* Handle carriage return in VDU5 mode
|
||||
SHRVDU13 >>> ENTMAIN
|
||||
* PHP ; Disable interrupts
|
||||
* SEI
|
||||
CLC ; 65816 native mode
|
||||
XCE
|
||||
REP #$30 ; 16 bit M & X
|
||||
@ -576,8 +649,83 @@ SHRVDU13 >>> ENTMAIN
|
||||
:DONE SEC ; 65816 emulation mode
|
||||
XCE
|
||||
MX %11 ; Tell Merlin
|
||||
* PLP
|
||||
>>> XF2AUX,VDU13RET
|
||||
>>> XF2AUX,VDUXXRET
|
||||
|
||||
|
||||
* Handle erasing char for VDU127 in VDU5 mode
|
||||
* Called after SHRVDU08 has already backspaced cursor
|
||||
SHRVDU127 >>> ENTMAIN
|
||||
LDX SHRYPIXEL ; Screen row (Y-coord)
|
||||
LDA SHRROWSL,X ; Look up addr (LS byte)
|
||||
STA A3L ; Stash in A3L
|
||||
LDA SHRROWSH,X ; Look up addr (MS byte)
|
||||
STA A3H ; Stash in A3H
|
||||
LDA #$E1 ; Bank $E1
|
||||
STA A4L
|
||||
LDX SHRPIXELS
|
||||
CPX #$02
|
||||
BNE :MODE0
|
||||
CLC ; 65816 native mode
|
||||
XCE
|
||||
REP #$30 ; 16 bit M & X
|
||||
MX %00 ; Tell Merlin
|
||||
LDA SHRXPIXEL ; Screen col (X-coord)
|
||||
LSR A ; Divide by 2
|
||||
BRA :MODE1
|
||||
:MODE0 CLC ; 65816 native mode
|
||||
XCE
|
||||
REP #$30 ; 16 bit M & X
|
||||
MX %00 ; Tell Merlin
|
||||
LDA SHRXPIXEL ; Screen col (X-coord)
|
||||
LSR A ; Divide by 2
|
||||
LSR A ; Divide by 4
|
||||
TAY
|
||||
LDX #$00
|
||||
SEP #$30 ; 8 bit M & X
|
||||
MX %11 ; Tell Merlin
|
||||
:L1 LDA SHRGFXBGMASK
|
||||
STAL [A3L],Y
|
||||
INY
|
||||
STAL [A3L],Y
|
||||
DEY
|
||||
JSR SHRNXTROWM ; Advance A3L/H to next pixel row
|
||||
INX
|
||||
CPX #$08 ; Erased all 8 rows?
|
||||
BNE :L1
|
||||
BRA :DONE
|
||||
:MODE1 MX %00 ; Tell Merlin it's 16 bit M&X
|
||||
TAY
|
||||
LDX #$00
|
||||
SEP #$30 ; 8 bit M & X
|
||||
MX %11 ; Tell Merlin
|
||||
:L2 LDA SHRGFXBGMASK
|
||||
STAL [A3L],Y
|
||||
INY
|
||||
STAL [A3L],Y
|
||||
INY
|
||||
STAL [A3L],Y
|
||||
INY
|
||||
STAL [A3L],Y
|
||||
DEY
|
||||
DEY
|
||||
DEY
|
||||
JSR SHRNXTROWM ; Advance A3L/H to next pixel row
|
||||
INX
|
||||
CPX #$08 ; Erased all 8 rows?
|
||||
BNE :L2
|
||||
:DONE SEC ; 65816 emulation mode
|
||||
XCE
|
||||
>>> XF2AUX,VDUXXRET
|
||||
|
||||
* Advance A3L/H to next pixel row on screen
|
||||
SHRNXTROWM LDA A3L ; Advance A3L/H to next row
|
||||
CLC
|
||||
ADC #160
|
||||
STA A3L
|
||||
LDA A3H
|
||||
ADC #$00
|
||||
STA A3H
|
||||
RTS
|
||||
|
||||
|
||||
* Plot actions: PLOT k,x,y
|
||||
@ -620,8 +768,6 @@ SHRPLOT >>> ENTMAIN
|
||||
:S1 CMP #$40 ; Plot point
|
||||
BNE :BAIL ; Other? Bail out
|
||||
|
||||
* PHP ; Disable interrupts
|
||||
* SEI
|
||||
CLC ; 65816 native mode
|
||||
XCE
|
||||
SEP #$30 ; 8 bit M & X
|
||||
@ -630,7 +776,6 @@ SHRPLOT >>> ENTMAIN
|
||||
SEC ; 65816 emulation mode
|
||||
XCE
|
||||
MX %11 ; Tell Merlin
|
||||
* PLP ; Resume normal service
|
||||
|
||||
BRA :S2
|
||||
:S2 PLA ; Store prev pt in screen coords
|
||||
@ -672,6 +817,7 @@ SHRPLOTCOL LDA SHRGFXFGMASK ; Preserve FG colour
|
||||
|
||||
* Plot a point
|
||||
* Called in 65816 native mode, 8 bit M & X
|
||||
* On entry: A1L/H x-coordinate, A2L/H y-coordinate
|
||||
SHRPOINT REP #$30 ; 16 bit M & X
|
||||
MX %00 ; Tell Merlin
|
||||
LDA A2L ; y coordinate
|
||||
@ -840,8 +986,6 @@ SHRLINE LDA A2L ; y1
|
||||
INC A
|
||||
:S1 STA TMPZP+0 ; abs(y1 - y0)
|
||||
STZ TMPZP+1 ; Pad to 16 bit
|
||||
* PHP ; Disable interrupts
|
||||
* SEI
|
||||
CLC ; 65816 native mode
|
||||
XCE
|
||||
REP #$30 ; 16 bit M & X
|
||||
@ -948,12 +1092,11 @@ SHRLINELO MX %00 ; Tell merlin 16 bit M & X
|
||||
STA :D ; D = D + 2 * dy
|
||||
:S3 INX
|
||||
CPX :LIM ; Compare with x1
|
||||
BNE :L1
|
||||
BCC :L1
|
||||
|
||||
SEC ; 65816 emulation mode
|
||||
XCE
|
||||
MX %11 ; Tell Merlin
|
||||
* PLP ; Resume normal service
|
||||
RTS
|
||||
* Zero page
|
||||
:DX EQU TMPZP+0 ; dx initially, then (2 * (dy - dx))
|
||||
@ -1025,7 +1168,7 @@ SHRLINEHI MX %00 ; Tell Merlin 16 bit M & X
|
||||
STA :D ; D = D + 2 * dx
|
||||
:S3 INX
|
||||
CPX :LIM ; Compare with y1
|
||||
BNE :L1
|
||||
BCC :L1
|
||||
|
||||
SEC ; 65816 emulation mode
|
||||
XCE
|
||||
@ -1045,8 +1188,6 @@ SHRLINEHI MX %00 ; Tell Merlin 16 bit M & X
|
||||
* from 1280x1024 to 640x200 or 320x200
|
||||
* On return: X-coordinate in A1L/H, Y-coordinate in A2L (A2H=0)
|
||||
SHRCOORD MAC
|
||||
* PHP ; Disable interrupts
|
||||
* SEI
|
||||
CLC ; 65816 native mode
|
||||
XCE
|
||||
REP #$30 ; 16 bit M & X
|
||||
@ -1094,7 +1235,6 @@ SHRCOORDM0 LDA SHRVDUQ+5
|
||||
SEC ; Back to emulation mode
|
||||
XCE
|
||||
MX %11 ; Tell Merlin
|
||||
* PLP ; Normal service resumed
|
||||
BRA SHRCOORDEND
|
||||
|
||||
SHRCOORDNEG MX %00 ; Tell Merlin we are 16 bit
|
||||
@ -1169,8 +1309,6 @@ SHRCOORD2M0 LDA SHRVDUQ,X
|
||||
|
||||
* Clear the graphics window
|
||||
SHRVDU16 >>> ENTMAIN
|
||||
* PHP ; Disable interrupts
|
||||
* SEI
|
||||
CLC ; 816 native mode
|
||||
XCE
|
||||
REP #$30 ; 16 bit M & X
|
||||
@ -1267,7 +1405,6 @@ SHRVDU16 >>> ENTMAIN
|
||||
SEC ; Back to 6502 emu mode
|
||||
XCE
|
||||
MX %11 ; Tell Merlin
|
||||
* PLP ; Normal service resumed
|
||||
>>> XF2AUX,SHRCLRRET
|
||||
:LEFT320 DB %11111111
|
||||
DB %00001111
|
||||
@ -1320,8 +1457,6 @@ SHRVDU16V PHA
|
||||
* Validate graphics window parms & store if okay
|
||||
* First 8 bytes of SHRVDUQ: left, bottom, right, top
|
||||
SHRVDU24 >>> ENTMAIN
|
||||
* PHP ; Disable interrupts
|
||||
* SEI
|
||||
CLC ; 65816 native mode
|
||||
XCE
|
||||
REP #$30 ; 16 bit M & X
|
||||
@ -1352,12 +1487,10 @@ SHRVDU24 >>> ENTMAIN
|
||||
|
||||
SEC ; 65816 emulation mode
|
||||
XCE
|
||||
* PLP
|
||||
>>> XF2AUX,VDU24RET
|
||||
:BAD SEC ; 65816 emulation mode
|
||||
XCE
|
||||
* PLP
|
||||
>>> XF2AUX,VDU24RETBAD
|
||||
>>> XF2AUX,VDUXXRET
|
||||
|
||||
|
||||
* Reset graphics window
|
||||
@ -1434,7 +1567,7 @@ SHRPALCHANGE >>> ENTMAIN
|
||||
STAL $E19E00+9,X
|
||||
STAL $E19E00+17,X
|
||||
STAL $E19E00+25,X
|
||||
RTS
|
||||
BRA :DONE
|
||||
:MODE320 TXA
|
||||
AND #%00011110 ; Has already been shifted
|
||||
TAX
|
||||
@ -1442,7 +1575,7 @@ SHRPALCHANGE >>> ENTMAIN
|
||||
STAL $E19E00,X ; Store in logical slot
|
||||
LDA PALETTE320+1,Y ; Byte 2 of physical colour
|
||||
STAL $E19E00+1,X ; Store in logical slot
|
||||
>>> XF2AUX,VDU19RET
|
||||
:DONE >>> XF2AUX,VDUXXRET
|
||||
|
||||
|
||||
* Assign a custom RGB colour to a 'logical' colour
|
||||
@ -1466,7 +1599,7 @@ SHRPALCUSTOM >>> ENTMAIN
|
||||
STAL $E19E00+9,X
|
||||
STAL $E19E00+17,X
|
||||
STAL $E19E00+25,X
|
||||
RTS
|
||||
BRA :DONE
|
||||
:MODE320 TXA
|
||||
AND #%00011110 ; Has already been shifted
|
||||
TAX
|
||||
@ -1474,7 +1607,7 @@ SHRPALCUSTOM >>> ENTMAIN
|
||||
STAL $E19E00,X ; Store in logical slot
|
||||
TYA ; R component
|
||||
STAL $E19E00+1,X ; Store in logical slot
|
||||
>>> XF2AUX,VDU19RET
|
||||
:DONE >>> XF2AUX,VDUXXRET
|
||||
|
||||
|
||||
* Table of addresses of SHR rows (in reverse order)
|
||||
|
@ -1,2 +1,2 @@
|
||||
#mame -w apple2ee -debug -sl5 mouse -sl7 cffa2 -harddisk1 ~/Personal/Development/Applecorn/applecorn.po
|
||||
mame -w apple2gs -debug -sl7 cffa2 -harddisk1 ~/Personal/Development/Applecorn/applecorn.po -harddisk2 tests/JGHMusic2.po
|
||||
mame -w apple2gs -debug -sl7 cffa2 -harddisk1 ~/Personal/Development/Applecorn/applecorn.po -harddisk2 tests/acrn*po # tests/Creat*po
|
||||
|
BIN
tests/Creative_Graphics.po
Normal file
BIN
tests/Creative_Graphics.po
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user