Merge branch 'bobbimanners:main' into main

This commit is contained in:
jgharston
2022-12-27 03:51:48 +00:00
committed by GitHub
4 changed files with 90 additions and 59 deletions

Binary file not shown.

View File

@@ -94,7 +94,6 @@ RDVBL EQU $C019
RD80VID EQU $C01F RD80VID EQU $C01F
TBCOLOR EQU $C022 ; GS-specific, used but commented out TBCOLOR EQU $C022 ; GS-specific, used but commented out
KEYMOD EQU $C025 ; GS-specific
NEWVIDEO EQU $C029 ; GS-specific, new video register NEWVIDEO EQU $C029 ; GS-specific, new video register
SPKR EQU $C030 SPKR EQU $C030

View File

@@ -218,6 +218,6 @@ BYTE00 BEQ BYTE00A ; OSBYTE 0,0 - generate error
RTS ; %000x1xxx host type, 'A'pple RTS ; %000x1xxx host type, 'A'pple
BYTE00A BRK BYTE00A BRK
DB $F7 DB $F7
HELLO ASC 'Applecorn MOS 2022-12-26-HOHOHO' HELLO ASC 'Applecorn MOS 2022-12-26'
DB $00 ; Unify MOS messages DB $00 ; Unify MOS messages

View File

@@ -265,25 +265,34 @@ SHRPRCHAR SEC
LDA #$E1 LDA #$E1
STA VDUBANK2 STA VDUBANK2
JSR SHRCHARADDR ; Screen addr in VDUADDR JSR SHRCHARADDR ; Screen addr in VDUADDR
LDX #$00 ; First row of char
:L1 LDY #$00 * 65816 code contributed by John Brooks follows ...
LDA [VDUADDR2] ; Load exploded font data 1st byte
JSR SHRCOLBYTE PHP ; Disauble interrupts
STA [VDUADDR] ; Store on screen SEI
INY PHB ; Save data bank
INC VDUADDR2+0 ; Increment exploded font ptr LDA VDUADDR2+2 ; Push font Bank onto stack
BNE :S1 PHA
INC VDUADDR2+1 PLB ; Set data bank to font bank
:S1 LDA [VDUADDR2] ; Load exploded font data 2nd byte CLC ; 65816 native mode
JSR SHRCOLBYTE XCE
STA [VDUADDR],Y ; Store on screen REP #$30 ; 16 bit M & X
INC VDUADDR2+0 ; Increment exploded font ptr MX %00 ; Tell Merlin
BNE :S2 LDY VDUADDR2 ; Font src ptr
INC VDUADDR2+1 LDX VDUADDR ; SHR dst ptr
:S2 JSR SHRNEXTROW ; Add 160 to VDUADDR SrcFont = $000000
INX ; Next row of font DstShr = $E10000
CPX #$08 ; Last row? LUP 8 ; Unroll x 8
BNE :L1 LDA !SrcFont,Y ; Read 2 bytes of exploded font
STAL DstShr,X ; Write 2 bytes to screen
SrcFont = SrcFont+2
DstShr = DstShr+160
--^
PLB ; Recover data bank
SEC ; Back to emulation mode
XCE
MX %11 ; Tell Merlin
PLP ; Normal service resumed
RTS RTS
@@ -330,46 +339,69 @@ SHRNEXTROW LDA VDUADDR+0 ; Add 160 to VDUADDR
* Forwards scroll one line * Forwards scroll one line
* Copy text line A+1 to line A * Copy text line A+1 to line A
* Note: Code for this courtesy Kent Dickey
* TODO: This is only for 640 mode at present * TODO: This is only for 640 mode at present
SHRSCR1LINE TAY SHRSCR1LINE PHY
LDA SHRTAB,Y ; MSB of address of line A PHX
STA VDUADDR+1 STA VDUADDR+1 ; Screen line -> MSB
STZ VDUADDR+0 ; Addr of start of line STZ VDUADDR+0 ; Zero LSB
INY PHP ; Disable interrupts
LDA SHRTAB,Y ; MSB of address of line A+1 SEI
STA VDUADDR2+1 CLC ; Enter native mode
STZ VDUADDR2+0 ; Addr of start of line XCE
LDA #$E1 ; Bank $E1 PHB ; Preserve data bank
STA VDUBANK REP #$31 ; M,X 16 bit, carry clear
STA VDUBANK2 MX %00 ; Tell Merlin
LDA #$08 ; Eight rows of pixels LDA VDUADDR ; Screen line to scroll
STA :CTR ASL ; Mult 4
INC TXTWINRGT ASL
:L0 LDA TXTWINLFT ADC VDUADDR ; Mult 5
TAX STA VDUADDR ; VDUADDR = line * $500
LDA TXTWINLFT ; Left margin
ASL ; 2 bytes / char ASL ; 2 bytes / char
TAY AND #$00ff ; Mask to get 8 bit result
:L1 CPX TXTWINRGT ADC VDUADDR ; Add to beginning of line addr
BCS :S1 STA VDUADDR ; VDUADDR = start position
LDA [VDUADDR2],Y SEP #$21 ; M 8 bit, X 16 bit, carry set
STA [VDUADDR],Y MX %10 ; Tell Merlin
INY LDA TXTWINRGT ; Compute width ..
LDA [VDUADDR2],Y SBC TXTWINLFT ; .. right minus left
STA [VDUADDR],Y REP #$31 ; M,X 16 bit, carry clear
INY MX %00 ; Tell Merlin
INX ASL ; 2 bytes / char
BRA :L1 AND #$00ff ; Mask to get 8 bit result
:S1 JSR SHRNEXTROW ; Add 160 to VDUADDR ADC VDUADDR ; Add to start position
LDA VDUADDR2+0 ; Add 160 to VDUADDR2 TAX ; Will use as index
CLC PEA #$e1e1 ; Set databank to $E1
ADC #160 PLB
STA VDUADDR2+0 PLB
LDA VDUADDR2+1 :LOOP1 LDA $2500,x ; 2 bytes, row 0
ADC #$00 STA $2000,x
STA VDUADDR2+1 LDA $25a0,x ; row 1
DEC :CTR STA $20a0,x
BNE :L0 LDA $2640,x ; row 2
DEC TXTWINRGT STA $2140,x
LDA $26e0,x ; row 3
STA $21e0,x
LDA $2780,x ; row 4
STA $2280,x
LDA $2820,x ; row 5
STA $2320,x
LDA $28c0,x ; row 6
STA $23c0,x
LDA $2960,x ; row 7
STa $2460,x
DEX ; Update index
DEX
BMI :DONE ; Jump out if odd->-ve
CPX VDUADDR ; Compare with start addr
BCS :LOOP1 ; Bytes left? Go again
:DONE PLB ; Recover data bank
SEC ; Back to emulation mode
XCE
PLP ; Recover flags + regs
PLX
PLY
RTS RTS