2017-07-05 14:45:19 +00:00
|
|
|
|
PR#3
|
|
|
|
|
PREFIX /A2OSX.BUILD
|
|
|
|
|
LOMEM $A00
|
|
|
|
|
INC 1
|
|
|
|
|
AUTO 6
|
|
|
|
|
.LIST OFF
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
* BitBlt
|
2017-11-16 16:46:18 +00:00
|
|
|
|
* 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
|
2017-07-05 14:45:19 +00:00
|
|
|
|
*--------------------------------------
|
2017-11-16 16:46:18 +00:00
|
|
|
|
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
|
2017-11-23 16:51:52 +00:00
|
|
|
|
adc ZPBMDataPtr0
|
|
|
|
|
sta ZPBMDataPtr0
|
2017-11-16 16:46:18 +00:00
|
|
|
|
pla
|
|
|
|
|
pha
|
2017-11-23 16:51:52 +00:00
|
|
|
|
adc ZPBMDataPtr0+1
|
|
|
|
|
sta ZPBMDataPtr0+1
|
2017-11-16 16:46:18 +00:00
|
|
|
|
|
|
|
|
|
tya
|
|
|
|
|
adc BM.Cache+S.BM.MASK.OFS
|
2017-11-23 16:51:52 +00:00
|
|
|
|
sta ZPBMMaskPtr0
|
2017-11-16 16:46:18 +00:00
|
|
|
|
pla
|
|
|
|
|
adc BM.Cache+S.BM.MASK.OFS+1
|
2017-11-23 16:51:52 +00:00
|
|
|
|
sta ZPBMMaskPtr0+1
|
2017-11-16 16:46:18 +00:00
|
|
|
|
|
|
|
|
|
lda CB.Cache+S.CB.X1
|
2017-11-17 07:09:39 +00:00
|
|
|
|
pha
|
2017-11-20 06:59:59 +00:00
|
|
|
|
and #7
|
|
|
|
|
sta BLT.BMBitOfs
|
2017-11-17 07:09:39 +00:00
|
|
|
|
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
|
2017-11-16 16:46:18 +00:00
|
|
|
|
|
|
|
|
|
pha
|
|
|
|
|
clc
|
2017-11-23 16:51:52 +00:00
|
|
|
|
adc ZPBMDataPtr0
|
|
|
|
|
sta ZPBMDataPtr0
|
2017-11-16 16:46:18 +00:00
|
|
|
|
bcc .3
|
|
|
|
|
|
2017-11-23 16:51:52 +00:00
|
|
|
|
inc ZPBMDataPtr0+1
|
2017-11-16 16:46:18 +00:00
|
|
|
|
|
|
|
|
|
.3 pla
|
2017-11-23 16:51:52 +00:00
|
|
|
|
adc ZPBMMaskPtr0
|
|
|
|
|
sta ZPBMMaskPtr0
|
2017-11-16 16:46:18 +00:00
|
|
|
|
bcc .4
|
|
|
|
|
|
2017-11-23 16:51:52 +00:00
|
|
|
|
inc ZPBMMaskPtr0+1
|
2017-11-16 16:46:18 +00:00
|
|
|
|
|
2017-11-20 06:59:59 +00:00
|
|
|
|
.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
|
|
|
|
|
|
2017-11-23 16:51:52 +00:00
|
|
|
|
lda S.CB.Y2
|
|
|
|
|
sec
|
|
|
|
|
sbc S.CB.Y1
|
|
|
|
|
sta BLT.DY
|
|
|
|
|
|
|
|
|
|
lda BLT.BMBitOfs
|
2017-11-20 16:45:12 +00:00
|
|
|
|
sta BLT.BMBitOfsL
|
2017-11-23 16:51:52 +00:00
|
|
|
|
lda LBUF.C1
|
|
|
|
|
sta BLT.ScreenC
|
|
|
|
|
|
|
|
|
|
>LDYA ZPBMDataPtr0
|
|
|
|
|
>STYA ZPBMDataPtr
|
|
|
|
|
>LDYA ZPBMMaskPtr0
|
|
|
|
|
>STYA ZPBMMaskPtr
|
|
|
|
|
|
|
|
|
|
ldx BLT.SCRBitOfs
|
|
|
|
|
beq BITBLT.LOOP
|
|
|
|
|
|
|
|
|
|
ldy Shift.L.LO,x X = 1->6
|
|
|
|
|
sty ZPShiftPtr
|
|
|
|
|
|
|
|
|
|
ldy Shift.L.HI,x X = 1->6
|
|
|
|
|
sty ZPShiftPtr+1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BITBLT.LOOP ldx BLT.SCRBitOfs
|
|
|
|
|
bne .2
|
|
|
|
|
|
|
|
|
|
.1 jsr BLT.Get7BMDBits we have 0xxxxxxxx in A
|
|
|
|
|
|
|
|
|
|
ldx BLT.ScreenC
|
|
|
|
|
sta LBUF.DATA,x
|
|
|
|
|
inc BLT.ScreenC
|
|
|
|
|
cpx LBUF.C2
|
|
|
|
|
bne .1
|
|
|
|
|
|
|
|
|
|
bra BITBLT.DRAW
|
|
|
|
|
|
|
|
|
|
.2 jsr BLT.Get7BMDBits we have 0xxxxxxxx in A
|
|
|
|
|
|
|
|
|
|
pha save it for 2nd part
|
|
|
|
|
|
|
|
|
|
ldx BLT.SCRBitOfs
|
|
|
|
|
and Mask7BitsH,x 0000xxxx, keep col1 bits only
|
|
|
|
|
tay
|
|
|
|
|
|
|
|
|
|
lda (ZPShiftPtr),y make 0xxxx000
|
2017-11-16 16:46:18 +00:00
|
|
|
|
|
2017-11-23 16:51:52 +00:00
|
|
|
|
ldy BLT.ScreenC
|
|
|
|
|
ora LBUF.DATA,y
|
|
|
|
|
sta LBUF.DATA,y
|
|
|
|
|
|
|
|
|
|
pla
|
|
|
|
|
|
|
|
|
|
inc BLT.ScreenC
|
|
|
|
|
cpy LBUF.C2
|
|
|
|
|
beq BITBLT.DRAW
|
|
|
|
|
|
|
|
|
|
and Mask7BitsL,x 0yyy0000
|
|
|
|
|
tay
|
|
|
|
|
|
|
|
|
|
lda (ZPShiftPtr),y 00000yyy
|
|
|
|
|
|
|
|
|
|
ldy BLT.ScreenC
|
|
|
|
|
sta LBUF.DATA,y
|
|
|
|
|
|
|
|
|
|
inc BLT.ScreenC
|
|
|
|
|
cpy LBUF.C2
|
|
|
|
|
bne .2
|
2017-11-20 16:45:12 +00:00
|
|
|
|
|
2017-11-23 16:51:52 +00:00
|
|
|
|
BITBLT.DRAW ldy S.CB.Y1
|
|
|
|
|
jsr LBUF.DrawAtY
|
|
|
|
|
inc S.CB.Y1
|
|
|
|
|
|
|
|
|
|
lda ZPBMDataPtr0
|
|
|
|
|
clc
|
|
|
|
|
adc BM.Cache+S.BM.RowBytes
|
|
|
|
|
sta ZPBMDataPtr0
|
|
|
|
|
bcc .6
|
|
|
|
|
|
|
|
|
|
inc ZPBMDataPtr0+1
|
|
|
|
|
|
|
|
|
|
.6 lda ZPBMMaskPtr0
|
|
|
|
|
clc
|
|
|
|
|
adc BM.Cache+S.BM.RowBytes
|
|
|
|
|
sta ZPBMMaskPtr0
|
|
|
|
|
bcc .7
|
|
|
|
|
|
|
|
|
|
inc ZPBMMaskPtr0+1
|
|
|
|
|
|
|
|
|
|
.7 dec BLT.DY
|
|
|
|
|
bne BITBLT.LOOP
|
2017-07-05 14:45:19 +00:00
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
2017-11-20 16:45:12 +00:00
|
|
|
|
* BMD/BMM bits :
|
|
|
|
|
* 76543210 76543210
|
|
|
|
|
* ^
|
|
|
|
|
* BMBitOfsL (0->7)
|
|
|
|
|
* LBUF DATA/MASK Bits
|
|
|
|
|
* c6543210 c6543210
|
|
|
|
|
* ^
|
2017-11-23 16:51:52 +00:00
|
|
|
|
* SCRBitOfs (0->6)
|
2017-11-20 16:45:12 +00:00
|
|
|
|
*--------------------------------------
|
2017-11-23 16:51:52 +00:00
|
|
|
|
BLT.Get7BMDBits lda (ZPBMDataPtr)
|
2017-11-21 16:27:07 +00:00
|
|
|
|
|
|
|
|
|
ldx BLT.BMBitOfsL
|
2017-11-23 16:51:52 +00:00
|
|
|
|
beq BLT.Get7BMBits0 OFS=0, done! and no need to advance ZPBMDataPtr
|
|
|
|
|
lsr OFS=1->7, shift one (Range 0->127)
|
|
|
|
|
dex OFS 0->6
|
|
|
|
|
beq BLT.Get7BMBits1 OFS was 1....done and go to next byte, OFS=0
|
2017-11-20 16:45:12 +00:00
|
|
|
|
|
2017-11-23 16:51:52 +00:00
|
|
|
|
ldy Shift.R.LO,x X = 1->6
|
|
|
|
|
sty ZPShiftPtr
|
2017-11-20 16:45:12 +00:00
|
|
|
|
|
2017-11-23 16:51:52 +00:00
|
|
|
|
ldy Shift.R.HI,x X = 1->6
|
|
|
|
|
sty ZPShiftPtr+1
|
|
|
|
|
|
|
|
|
|
and Mask7BitsL,x Get only left upper X bits
|
|
|
|
|
tay xxxxx000
|
2017-11-20 16:45:12 +00:00
|
|
|
|
|
2017-11-23 16:51:52 +00:00
|
|
|
|
lda (ZPShiftPtr),y shift'em RIGHT 000xxxxx
|
2017-11-21 16:27:07 +00:00
|
|
|
|
pha
|
2017-11-20 16:45:12 +00:00
|
|
|
|
|
2017-11-21 16:27:07 +00:00
|
|
|
|
inc ZPBMDataPtr Next BM data byte
|
2017-11-23 16:51:52 +00:00
|
|
|
|
bne .2
|
2017-11-20 16:45:12 +00:00
|
|
|
|
inc ZPBMDataPtr+1
|
|
|
|
|
|
2017-11-23 16:51:52 +00:00
|
|
|
|
.2 lda (ZPBMDataPtr) get next byte
|
|
|
|
|
and Mask7BitsH,x only first Y bits 000000yy
|
2017-11-20 16:45:12 +00:00
|
|
|
|
tay
|
|
|
|
|
|
2017-11-23 16:51:52 +00:00
|
|
|
|
pla get back right part bits 000xxxxx
|
2017-11-20 16:45:12 +00:00
|
|
|
|
|
2017-11-23 16:51:52 +00:00
|
|
|
|
ora (ZPShiftPtr),y shift right 000000yy and ORA with 000xxxxx=0yyxxxxx
|
2017-11-20 16:45:12 +00:00
|
|
|
|
|
2017-11-21 16:27:07 +00:00
|
|
|
|
dec BLT.BMBitOfsL X = 1->6, ADD 7 MOD 8.....
|
|
|
|
|
rts
|
2017-11-20 16:45:12 +00:00
|
|
|
|
|
2017-11-21 16:27:07 +00:00
|
|
|
|
BLT.Get7BMBits0 and #%01111111 Get only 7 needed bits
|
|
|
|
|
ldx #7
|
|
|
|
|
stx BLT.BMBitOfsL Was 0, add 7 bits
|
2017-11-20 16:45:12 +00:00
|
|
|
|
rts
|
|
|
|
|
|
2017-11-21 16:27:07 +00:00
|
|
|
|
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
|
2017-11-20 06:59:59 +00:00
|
|
|
|
*--------------------------------------
|
2017-07-05 14:45:19 +00:00
|
|
|
|
MAN
|
2017-11-14 16:57:34 +00:00
|
|
|
|
SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.RECT
|
2017-07-05 14:45:19 +00:00
|
|
|
|
LOAD /A2OSX.SRC/DRV/DHGR.DRV.S
|
|
|
|
|
ASM
|