VDU5 is now basically working

This commit is contained in:
Bobbi Webber-Manners 2023-01-09 17:05:09 -05:00
parent 75333d5638
commit 4fe3d4debc
4 changed files with 98 additions and 23 deletions

Binary file not shown.

View File

@ -224,5 +224,5 @@ BYTE00 BEQ BYTE00A ; OSBYTE 0,0 - generate error
RTS ; %000x1xxx host type, 'A'pple
BYTE00A BRK
DB $F7
HELLO ASC 'Applecorn MOS 2022-01-08'
HELLO ASC 'Applecorn MOS 2022-01-09'
DB $00 ; Unify MOS messages

View File

@ -398,6 +398,7 @@ PUTCURSOR TAX ; Preserve character
TXA
JMP PUTCHRC
:SHR TXA ; Recover character
* TODO: Add code for XOR cursor in SHR mode
RTS
@ -409,6 +410,7 @@ PUTCOPYCURS TAX ; Preserve character
JMP OUTCHARCP
:SHR TXA ; Recover character
JMP OUTCHARCP2
* TODO: Add code for XOR copy cursor in SHR mode
RTS
@ -523,10 +525,17 @@ SCROLL JSR SCROLLER
* Move cursor down
VDU10 LDA VDUTEXTY ; ROW
CMP TXTWINBOT
BEQ :TOSCRL ; JGH
BEQ VDU10SCRL
INC VDUTEXTY ; ROW
RTS
:TOSCRL JMP SCROLL ; JGH
LDA VDUSTATUS
AND #$20 ; Bit 5 -> VDU5 mode
BEQ VDU10DONE
BIT VDUSCREEN
BVC VDU10DONE ; Not SHR, skip
>>> XF2MAIN,SHRVDU10
VDU10RET >>> ENTAUX
VDU10DONE RTS
VDU10SCRL JMP SCROLL
* Move cursor up
VDU11 LDA VDUTEXTY ; ROW
@ -548,7 +557,14 @@ VDU13 LDA #$BF
JSR CLRSTATUS ; Turn copy cursor off
LDA TXTWINLFT
STA VDUTEXTX ; COL
RTS
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)
VDU30 LDA TXTWINTOP

View File

@ -234,13 +234,26 @@ SHRVDU5CH320 >>> ENTMAIN
ADC #SHRFONTXPLD
STA A1L
LDA SHRYPIXEL ; See if we are too close to bttm
CMP #16
BCC :NEWPAGE1 ; Less than 16 rows left
LDA SHRYPIXEL ; y coordinate
SEC
SBC #8 ; Height of this row
CMP SHRWINBTM
BMI :NEWPAGE
LDA SHRYPIXEL
CMP SHRWINTOP
BEQ :S1
BPL :NEWPAGE
:S1 LDA SHRXPIXEL ; x coordinate
CMP SHRWINLFT
BMI :NEWPAGE
CMP SHRWINRGT
BEQ :S0
BPL :NEWPAGE
BRA :S0
:NEWPAGE1 LDA #199
:NEWPAGE LDA SHRWINTOP
STA SHRYPIXEL
STZ SHRXPIXEL
LDA SHRWINLFT
STA SHRXPIXEL
:S0 SEP #$30 ; 8 bit M & X
MX %11 ; Tell Merlin
@ -294,24 +307,15 @@ SHRVDU5CH320 >>> ENTMAIN
LDA SHRXPIXEL
CLC
ADC #16 ; Advance to next column
CMP #639-16
CMP SHRWINRGT
BCS :NEWLINE ; X-pos >= limit
STA SHRXPIXEL
BRA :DONE
:NEWLINE STZ SHRXPIXEL
LDA SHRYPIXEL
CMP #16
BCC :NEWPAGE2 ; Less than 16 rows left
SEC
SBC #$08
STA SHRYPIXEL
BRA :DONE
:NEWPAGE2 LDA #199
STA SHRYPIXEL
:DONE SEC ; 65816 emulation mode
:NEWLINE JSR SHRVDU5LF
:DONE SEC ; 65816 emulation mode
XCE
MX %11 ; Tell Merlin
PLP
>>> XF2AUX,SHRPRCH320RET
* Zero page
:CTR1 EQU TMPZP+0
@ -324,6 +328,59 @@ SHRVDU5CH640 >>> ENTMAIN
>>> XF2AUX,SHRPRCH640RET
* Handle linefeed in VDU5 mode
SHRVDU10 >>> ENTMAIN
PHP ; Disable interrupts
SEI
CLC ; 65816 native mode
XCE
REP #$30 ; 16 bit M & X
MX %00 ; Tell Merlin
JSR SHRVDU5LF
:DONE SEC ; 65816 emulation mode
XCE
MX %11 ; Tell Merlin
PLP
>>> XF2AUX,VDU10RET
* Handle linefeed in VDU5 mode
* Called in 65816 native mode, 16 bit M & X
SHRVDU5LF MX %00 ; Tell Merlin
LDA SHRWINLFT
STA SHRXPIXEL
LDA SHRYPIXEL
SEC
SBC #16 ; Height of this+next row
CMP SHRWINBTM
BMI :NEWPAGE ; Less than 16 rows left
LDA SHRYPIXEL
SEC
SBC #$08
STA SHRYPIXEL
BRA :DONE
:NEWPAGE LDA SHRWINTOP
STA SHRYPIXEL
:DONE RTS
MX %11 ; 8 bit again
* Handle carriage return in VDU5 mode
SHRVDU13 >>> ENTMAIN
PHP ; Disable interrupts
SEI
CLC ; 65816 native mode
XCE
REP #$30 ; 16 bit M & X
MX %00 ; Tell Merlin
JSR SHRVDU5LF
:DONE SEC ; 65816 emulation mode
XCE
MX %11 ; Tell Merlin
PLP
>>> XF2AUX,VDU13RET
* Plot actions: PLOT k,x,y
* k is in SHRVDUQ+4
* x is in SHRVDUQ+5,SHRVDUQ+6
@ -423,10 +480,12 @@ SHRPOINT REP #$30 ; 16 bit M & X
BMI :OUT
CMP SHRWINTOP
BEQ :S1
BPL :OUT
:S1 LDA A1L ; x coordinate
CMP SHRWINLFT
BMI :OUT
CMP SHRWINRGT
BEQ SHRPOINT2
BPL :OUT
BRA SHRPOINT2
:OUT SEP #$30 ; 8 bit M & X