mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-22 16:31:07 +00:00
178 lines
3.2 KiB
Plaintext
178 lines
3.2 KiB
Plaintext
PR#3
|
||
PREFIX /A2OSX.BUILD
|
||
LOMEM $A00
|
||
INC 1
|
||
AUTO 6
|
||
.LIST OFF
|
||
*--------------------------------------
|
||
* BitBlt
|
||
* S.CB.X1 : SrcX1 in bitmap/mask
|
||
* S.CB.Y1 : SrcY1
|
||
* S.CB.X2 : SrcX2
|
||
* S.CB.Y2 : SrcY2
|
||
|
||
* S.CB.DestX : Destination X (screen)
|
||
* S.CB.DestY : Destination Y (screen)
|
||
|
||
* S.CB.SrcPtr : pointer to S.BM
|
||
* S.CB.DstPtr : pointer to Save Buffer
|
||
*--------------------------------------
|
||
BITBLT >LDYA CB.CACHE+S.CB.SrcPtr
|
||
>STYA ZPBMDataPtr
|
||
|
||
ldy #S.BM-1
|
||
|
||
.1 lda (ZPBMDataPtr),y
|
||
sta BM.Cache,y
|
||
dey
|
||
bpl .1
|
||
|
||
lda ZPBMDataPtr
|
||
clc
|
||
adc #S.BM
|
||
sta ZPBMDataPtr
|
||
bcc .2
|
||
|
||
inc ZPBMDataPtr+1
|
||
|
||
.2 >LDYA CB.Cache+S.CB.Y1
|
||
ldx BM.Cache+S.BM.RowBytes
|
||
|
||
jsr YAMultX
|
||
|
||
pha
|
||
tya
|
||
clc
|
||
adc ZPBMDataPtr
|
||
sta ZPBMDataPtr
|
||
pla
|
||
pha
|
||
adc ZPBMDataPtr+1
|
||
sta ZPBMDataPtr+1
|
||
|
||
tya
|
||
adc BM.Cache+S.BM.MASK.OFS
|
||
sta ZPBMMaskPtr
|
||
pla
|
||
adc BM.Cache+S.BM.MASK.OFS+1
|
||
sta ZPBMMaskPtr+1
|
||
|
||
lda CB.Cache+S.CB.X1
|
||
pha
|
||
and #7
|
||
sta BLT.BMBitOfs
|
||
pla
|
||
|
||
lsr CB.Cache+S.CB.X1+1
|
||
ror
|
||
lsr CB.Cache+S.CB.X1+1
|
||
ror
|
||
lsr CB.Cache+S.CB.X1+1
|
||
ror
|
||
|
||
pha
|
||
clc
|
||
adc ZPBMDataPtr
|
||
sta ZPBMDataPtr
|
||
bcc .3
|
||
|
||
inc ZPBMDataPtr+1
|
||
|
||
.3 pla
|
||
adc ZPBMMaskPtr
|
||
sta ZPBMMaskPtr
|
||
bcc .4
|
||
|
||
inc ZPBMMaskPtr+1
|
||
|
||
.4 lda S.CB.X2
|
||
sec
|
||
sbc S.CB.X1
|
||
sta BLT.DX
|
||
|
||
lda S.CB.X2+1
|
||
sbc S.CB.X1+1
|
||
sta BLT.DX+1
|
||
|
||
>LDYA S.CB.DestX
|
||
jsr LBUF.SetBounds1YA
|
||
stx BLT.SCRBitOfs
|
||
|
||
lda S.CB.DestX
|
||
clc
|
||
adc BLT.DX
|
||
tay
|
||
lda S.CB.DestX+1
|
||
adc BLT.DX+1
|
||
jsr LBUF.SetBounds2YA
|
||
|
||
.5 lda BLT.BMBitOfs
|
||
sta BLT.BMBitOfsL
|
||
|
||
.6 jsr BLT.Get7BMBits
|
||
|
||
clc
|
||
rts
|
||
*--------------------------------------
|
||
* BMD/BMM bits :
|
||
* 76543210 76543210
|
||
* ^
|
||
* BMBitOfsL (0->7)
|
||
* LBUF DATA/MASK Bits
|
||
* c6543210 c6543210
|
||
* ^
|
||
* SCRBitOfsL (0->6)
|
||
*--------------------------------------
|
||
BLT.Get7BMBits lda (ZPBMDataPtr)
|
||
|
||
ldx BLT.BMBitOfsL
|
||
beq BLT.Get7BMBits0 done! and no need to advance ZPBMDataPtr
|
||
lsr Range 0->127
|
||
dex Range 0->6
|
||
beq BLT.Get7BMBits1
|
||
|
||
ldy Shift7.LO-1,x X = 1->6
|
||
sty ZPBMShiftPtr+1
|
||
|
||
ldy Shift7.HI-1,x X = 1->6
|
||
sty ZPBMShiftPtr+1
|
||
|
||
and Mask7BitsL,x Get only needed bits
|
||
tay
|
||
|
||
lda (ZPBMShiftPtr),y
|
||
pha
|
||
|
||
inc ZPBMDataPtr Next BM data byte
|
||
bne .1
|
||
inc ZPBMDataPtr+1
|
||
|
||
.1 lda (ZPBMDataPtr)
|
||
and Mask7BitsH,x
|
||
tay
|
||
|
||
pla
|
||
|
||
ora (ZPBMShiftPtr),y
|
||
|
||
dec BLT.BMBitOfsL X = 1->6, ADD 7 MOD 8.....
|
||
rts
|
||
|
||
BLT.Get7BMBits0 and #%01111111 Get only 7 needed bits
|
||
ldx #7
|
||
stx BLT.BMBitOfsL Was 0, add 7 bits
|
||
rts
|
||
|
||
BLT.Get7BMBits1 stz BLT.BMBitOfsL Was 1, add 7 bits, MOD 8=0
|
||
|
||
inc ZPBMDataPtr go to next byte
|
||
bne .1
|
||
inc ZPBMDataPtr+1
|
||
|
||
.1 rts LSR did already 0xxxxxxx
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.RECT
|
||
LOAD /A2OSX.SRC/DRV/DHGR.DRV.S
|
||
ASM
|