mirror of
https://github.com/sheumann/VNCviewGS.git
synced 2024-11-22 02:30:47 +00:00
aa38f6d209
The assembly code for the 640-mode and 320-mode routines is moved to a macro so it can be shared between them.
126 lines
1.7 KiB
Plaintext
126 lines
1.7 KiB
Plaintext
macro
|
|
loopBody320 &iters
|
|
lcla &n
|
|
.top320
|
|
ldx |2*&n,Y
|
|
lda >BCT320,X
|
|
ldx destOfst
|
|
sta >destBuf+&n,X
|
|
&n seta &n+1
|
|
aif &n<&iters,.top320
|
|
mend
|
|
|
|
|
|
macro
|
|
loopBody640 &iters
|
|
lcla &n
|
|
.top640
|
|
ldx |4*&n,Y
|
|
lda >BCT640A,X
|
|
ldx |4*&n+2,Y
|
|
ora >BCT640B,X
|
|
ldx destOfst
|
|
sta >destBuf+&n,X
|
|
&n seta &n+1
|
|
aif &n<&iters,.top640
|
|
|
|
mend
|
|
|
|
|
|
macro
|
|
rawDec &mode,&unroll
|
|
lclc &loopBdy
|
|
lcla &bytePix
|
|
&loopBdy setc 'loopBody'+&mode
|
|
&bytePix seta &mode/160
|
|
|
|
tdc
|
|
tax
|
|
lda |dpPtr
|
|
tcd set new direct page
|
|
stx oldDP save direct page on entry
|
|
|
|
phb
|
|
phb
|
|
pla
|
|
sta oldDB save data bank on entry
|
|
|
|
lda 10,S
|
|
pha leaves extra byte: clean up later
|
|
plb initialize data bank=bank of lineDataPtr
|
|
lda 8+1,S initialize y = lineDataPtr (low 16 bits)
|
|
tay
|
|
|
|
pla move return address to proper position
|
|
sta 8-1,S
|
|
pla
|
|
sta 10-3,S
|
|
|
|
plx
|
|
stx destOfst initialize x = destOfst = startOffset
|
|
|
|
pla
|
|
sta endOfst initialize endOfst = endOffset
|
|
|
|
sec
|
|
sbc #&unroll-1
|
|
bcs doLoop1 if endOffset-7 did not underflow...
|
|
jmp test2
|
|
|
|
doLoop1 sta loop1End initialize loop1End = endOffset - 7
|
|
txa a = startOffset
|
|
jmp test1
|
|
|
|
loop1 anop
|
|
sep #$20
|
|
longa off
|
|
&loopBdy &unroll
|
|
rep #$20
|
|
longa on
|
|
tya
|
|
adc #&unroll*&bytePix carry must be clear
|
|
tay
|
|
bcs incDB1
|
|
cont1 txa
|
|
adc #&unroll carry must be clear
|
|
sta destOfst
|
|
test1 cmp loop1End
|
|
bge check2
|
|
jmp loop1
|
|
|
|
check2 cmp endOfst
|
|
bge end
|
|
loop2 anop
|
|
&loopBdy 1
|
|
inx
|
|
stx destOfst
|
|
tya
|
|
adc #&bytePix carry must be clear
|
|
tay
|
|
bcs incDB2
|
|
test2 cpx endOfst
|
|
blt loop2
|
|
|
|
end phb
|
|
plx x = old DB (high byte of lineDataPtr)
|
|
pei (oldDB)
|
|
plb restore data bank
|
|
plb
|
|
lda oldDP
|
|
tcd restore direct page
|
|
tya a = lineDataPtr (low 16 bits)
|
|
rtl
|
|
|
|
incDB1 pea cont1-1
|
|
bra incDB
|
|
incDB2 pea test2-1
|
|
incDB phb
|
|
pla
|
|
inc A
|
|
pha
|
|
plb
|
|
clc
|
|
rts
|
|
|
|
mend
|