Kernel 0.9.1 : DHGR Driver, BitBLT, mouse pointer

This commit is contained in:
Rémy GIBERT 2017-11-27 17:39:09 +01:00
parent c19f98bd81
commit 2a14a04de4
8 changed files with 227 additions and 99 deletions

Binary file not shown.

Binary file not shown.

View File

@ -101,7 +101,7 @@ BITBLT >LDYA CB.CACHE+S.CB.SrcPtr
lda CB.Cache+S.CB.X2+1
sbc CB.Cache+S.CB.X1+1
sta BLT.DX+1
>LDYA CB.Cache+S.CB.DestX
jsr LBUF.SetBounds1YA
stx BLT.SCRBitOfs
@ -128,10 +128,111 @@ BITBLT >LDYA CB.CACHE+S.CB.SrcPtr
ldy Shift.L.HI,x X = 1->6
sty ZPScrShiftPtr+1
BITBLT.LOOP >LDYA BLT.BMDataPtr
>STYA ZPBMDataPtr
BITBLT.LOOP ldx BLT.SCRBitOfs
bne BITBLT.LOOPx
*------------ Shift 0
BITBLT.LOOP0 lda CB.Cache+S.CB.OP
bit #S.CB.OP.MASK
beq .2
>LDYA BLT.BMMaskPtr
>STYA ZPBMMaskPtr
>STYA ZPBMDataPtr
lda BLT.BMBitOfs
sta BLT.BMBitOfsL
stz BLT.BMIdx
ldx LBUF.C1
stx BLT.ScrColIdx
stz LBUF.MASK,x make sure C1 not ORed with trash in "ora LBUF.DATA,x"
.1 jsr BLT.Get7BMDBits we have 0xxxxxxxx in A
ldx BLT.ScrColIdx
sta LBUF.MASK,x
inc BLT.ScrColIdx
cpx LBUF.C2
bne .1
.2 >LDYA BLT.BMDataPtr
>STYA ZPBMDataPtr
lda BLT.BMBitOfs
sta BLT.BMBitOfsL
stz BLT.BMIdx
ldx LBUF.C1
stx BLT.ScrColIdx
stz LBUF.DATA,x make sure C1 not ORed with trash in "ora LBUF.DATA,x"
.3 jsr BLT.Get7BMDBits we have 0xxxxxxxx in A
ldx BLT.ScrColIdx
sta LBUF.DATA,x
inc BLT.ScrColIdx
cpx LBUF.C2
bne .3
jmp BITBLT.DRAW
*------------ Shift 1->6 Comment : SCRBitOfs=X=3
BITBLT.LOOPx lda CB.Cache+S.CB.OP
bit #S.CB.OP.MASK
beq .4
lda Shift7BitsCol1,x get #%00001111, BM bits that go in Col1
sta .2+1
lda Shift7BitsCol2,x get #%01110000, BM bits that go in Col2
sta .3+1
>LDYA BLT.BMMaskPtr
>STYA ZPBMDataPtr
lda BLT.BMBitOfs
sta BLT.BMBitOfsL
stz BLT.BMIdx
ldx LBUF.C1
stx BLT.ScrColIdx
stz LBUF.MASK,x make sure C1 not ORed with trash in "ora LBUF.DATA,x"
.1 jsr BLT.Get7BMDBits we have c6543210 in A, destination : COL=3210xxx, COL+1=xxxx654
pha save BM byte for 2nd col
.2 and #$ff SELF MODIFIED : MASK WITH #%00001111, keep col1 bits only
tay
lda (ZPScrShiftPtr),y make 0000dddd Shift left 3 : 0dddd000
ldx BLT.ScrColIdx Get actual COL index
ora LBUF.MASK,x Light proper bits : 0dddd???
sta LBUF.MASK,x store 0xdddd???
pla Get back BM Byte
.3 and #$ff SELF MODIFIED : #%01110000 get only col2 bites
tay
lda (ZPScrShiftPtr),y shift right 4 (=shift left 3!!!) : 00000ddd
sta LBUF.MASK+1,x
inx
stx BLT.ScrColIdx
cpx LBUF.C2
bne .1
.4 lda Shift7BitsCol1,x get #%00001111, BM bits that go in Col1
sta .6+1
lda Shift7BitsCol2,x get #%01110000, BM bits that go in Col2
sta .7+1
>LDYA BLT.BMDataPtr
>STYA ZPBMDataPtr
lda BLT.BMBitOfs
sta BLT.BMBitOfsL
@ -141,33 +242,11 @@ BITBLT.LOOP >LDYA BLT.BMDataPtr
stx BLT.ScrColIdx
stz LBUF.DATA,x make sure C1 not ORed with trash in "ora LBUF.DATA,x"
ldx BLT.SCRBitOfs
bne .2
*------------ Shift 0
.1 jsr BLT.Get7BMDBits we have 0xxxxxxxx in A
ldx BLT.ScrColIdx
sta LBUF.DATA,x
inc BLT.ScrColIdx
cpx LBUF.C2
bne .1
bra BITBLT.DRAW
*------------ Shift 1->6 Comment : SCRBitOfs=X=3
.2 lda Shift7BitsCol1,x get #%00001111, BM bits that go in Col1
sta .4+1
lda Shift7BitsCol2,x get #%01110000, BM bits that go in Col2
sta .5+1
.3 jsr BLT.Get7BMDBits we have c6543210 in A, destination : COL=3210xxx, COL+1=xxxx654
.5 jsr BLT.Get7BMDBits we have c6543210 in A, destination : COL=3210xxx, COL+1=xxxx654
pha save BM byte for 2nd col
.4 and #$ff SELF MODIFIED : MASK WITH #%00001111, keep col1 bits only
.6 and #$ff SELF MODIFIED : MASK WITH #%00001111, keep col1 bits only
tay
lda (ZPScrShiftPtr),y make 0000dddd Shift left 3 : 0dddd000
@ -178,7 +257,7 @@ BITBLT.LOOP >LDYA BLT.BMDataPtr
pla Get back BM Byte
.5 and #$ff SELF MODIFIED : #%01110000 get only col2 bites
.7 and #$ff SELF MODIFIED : #%01110000 get only col2 bites
tay
lda (ZPScrShiftPtr),y shift right 4 (=shift left 3!!!) : 00000ddd
@ -188,43 +267,46 @@ BITBLT.LOOP >LDYA BLT.BMDataPtr
inx
stx BLT.ScrColIdx
cpx LBUF.C2
bne .3
bne .5
BITBLT.DRAW ldy CB.Cache+S.CB.DestY
jsr LBUF.DrawAtY
inc CB.Cache+S.CB.DestY
dec BLT.DY
beq .8
lda BLT.BMDataPtr
clc
adc BM.Cache+S.BM.RowBytes
sta BLT.BMDataPtr
bcc .6
lda CB.Cache+S.CB.OP
bit #S.CB.OP.MASK
beq .1
inc BLT.BMDataPtr+1
.6 lda BLT.BMMaskPtr
lda BLT.BMMaskPtr
clc
adc BM.Cache+S.BM.RowBytes
sta BLT.BMMaskPtr
bcc .7
bcc .1
inc BLT.BMMaskPtr+1
.1 lda BLT.BMDataPtr
clc
adc BM.Cache+S.BM.RowBytes
sta BLT.BMDataPtr
bcc .2
.7 dec BLT.DY
beq .8
jmp BITBLT.LOOP
inc BLT.BMDataPtr+1
.2 jmp BITBLT.LOOP
.8 clc
rts
*--------------------------------------
* BMD/BMM bits :
* BM Data/Mask bits :
* 76543210 76543210
* ^
* BMBitOfsL (0->7)
* LBUF DATA/MASK Bits
* c6543210 c6543210
* ^
* SCRBitOfs (0->6)
*--------------------------------------
BLT.Get7BMDBits ldy BLT.BMIdx
lda (ZPBMDataPtr),y
@ -258,7 +340,6 @@ BLT.Get7BMDBits ldy BLT.BMIdx
pla get back right part bits 000xxxxx
ora (ZPBMShiftPtr),y shift right 000000yy and ORA with 000xxxxx=0yyxxxxx
dec BLT.BMBitOfsL X = 1->6, ADD 7 MOD 8.....
rts

View File

@ -51,13 +51,14 @@ LBUF.DrawAtY lda BASEL,y setup line Base Ptr
lda CB.Cache+S.CB.OP
.1 and #$f
.1 and #$F
tax
jmp (J.LBUF.DrawAtY,x)
.8 rts
*--------------------------------------
LBUF.DrawAtY.XOR
LBUF.DrawAtY.AND.XOR
ldx LBUF.C1 x C1->C2
ldy COL.BANK,x
@ -106,6 +107,7 @@ LBUF.DrawAtY.XOR
.8 rts
*--------------------------------------
LBUF.DrawAtY.SET
LBUF.DrawAtY.AND.SET
ldx LBUF.C1 x C1->C2
ldy COL.BANK,x
@ -198,20 +200,21 @@ LBUF.DrawAtY.ORA
.8 rts
*--------------------------------------
LBUF.DrawAtY.AND
LBUF.DrawAtY.AND.ORA
ldx LBUF.C1 x C1->C2
ldy COL.BANK,x
sta $C000,y
ldy COL.OFS,x
lda (ZPBasePtr),y Get C1
and LBUF.C1.MASK clear ONLY bits starting at X1 mod 7
lda LBUF.MASK,x get MASK bits
ora LBUF.C1.MASK clear ONLY bits starting at X1 mod 7
and (ZPBasePtr),y Clear screen at C1
sta GBYTE
lda LBUF.DATA,x get DATA bits
and LBUF.C1.DATA set ONLY bits starting at X1 mod 7
ora GBYTE
and (ZPBasePtr),y
ora GBYTE ora with screen bits
sta (ZPBasePtr),y update screen
inx
@ -223,8 +226,9 @@ LBUF.DrawAtY.AND
sta $C000,y
ldy COL.OFS,x
lda LBUF.DATA,x set all bytes between C1+1 & C2-1
and (ZPBasePtr),y
lda (ZPBasePtr),y
and LBUF.MASK,x
ora LBUF.DATA,x set all bytes between C1+1 & C2-1
sta (ZPBasePtr),y
inx
@ -235,13 +239,14 @@ LBUF.DrawAtY.AND
sta $C000,y
ldy COL.OFS,x
lda (ZPBasePtr),y Get C2
and LBUF.C2.MASK clear ONLY bits ending at X2 mod 7
lda LBUF.MASK,x get MASK bits
ora LBUF.C2.MASK
and (ZPBasePtr),y
sta GBYTE
lda LBUF.DATA,x get DATA bits
and LBUF.C2.DATA set ONLY bits ending at X2 mod 7
ora GBYTE
and (ZPBasePtr),y
sta (ZPBasePtr),y update screen
.8 rts

View File

@ -18,11 +18,10 @@ AUTO 6
ZPCmdPtr .EQ ZPDRV
ZPBasePtr .EQ ZPDRV+2
ZPBMShiftPtr .EQ ZPDRV+4
ZPScrShiftPtr .EQ ZPDRV+8
ZPBMDataPtr .EQ ZPDRV+10
ZPBMMaskPtr .EQ ZPDRV+12
ZPBMSavePtr .EQ ZPDRV+14
ZPScrShiftPtr .EQ ZPDRV+6
ZPBMDataPtr .EQ ZPDRV+8
ZPBMMaskPtr .EQ ZPDRV+10
ZPBMSavePtr .EQ ZPDRV+12
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
@ -146,7 +145,10 @@ J.Cmds .DA SETPIXEL
J.LBUF.DrawAtY .DA LBUF.DrawAtY.XOR
.DA LBUF.DrawAtY.SET
.DA LBUF.DrawAtY.ORA
.DA LBUF.DrawAtY.AND
.DA $ffff
.DA LBUF.DrawAtY.AND.XOR
.DA LBUF.DrawAtY.AND.SET
.DA LBUF.DrawAtY.AND.ORA
L.SHIFT .DA SHIFT.L1
.DA SHIFT.L2
.DA SHIFT.L3

View File

@ -16,10 +16,10 @@ S.CB.CMD.BITBLT .EQ 10
S.CB.CMD.GETRECTBUFSIZE .EQ 12
S.CB.CMD.DRAWLINE .EQ 14
S.CB.OP .EQ 1
S.CB.OP.XOR .EQ %00000000 screen EOR bitmap -> Screen
S.CB.OP.SET .EQ %00000010 replace screen with bitmap
S.CB.OP.ORA .EQ %00000100 combine screen & bitmap -> Screen
S.CB.OP.AND .EQ %00000110 Apply BitMap mask before painting
S.CB.OP.XOR .EQ 0 screen EOR bitmap -> Screen
S.CB.OP.SET .EQ 2 replace screen with bitmap
S.CB.OP.ORA .EQ 4 combine screen & bitmap -> Screen
S.CB.OP.MASK .EQ %00001000 Apply BitMap mask before painting
S.CB.OP.SAVE .EQ %00010000 Save Screen to DstPtr before painting
S.CB.OP.RESTORE .EQ %00100000 Restore Screen From DstPtr
S.CB.OP.COLOR .EQ %01000000 Assume BitMap is COLOR
@ -85,3 +85,5 @@ LIBGUI.ShowCursor .EQ 16
*--------------------------------------
MAN
SAVE /A2OSX.BUILD/INC/LIBGUI.I
LOAD /A2OSX.SRC/LIB/LIBGUI.S
ASM

View File

@ -430,36 +430,6 @@ CB.CmdLen .DA S.CB.Y1+1 SETPIXEL
*--------------------------------------
CB.Cache .BS S.CB
*--------------------------------------
CUR.Arrow .DA #S.BM.F.BBP1
.DA #2 RowBytes
.DA 12 W
.DA 12 H
.DA CUR.Arrow.MASK-CUR.Arrow
CUR.Arrow.DATA .DA %00000001.000000000
.DA %00000011.000000000
.DA %00000101.000000000
.DA %00001001.000000000
.DA %00010001.000000000
.DA %00100011.000000000
.DA %01110101.000000000
.DA %00011000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
CUR.Arrow.MASK .DA %00000000.000000000
.DA %00000000.000000000
.DA %00000010.000000000
.DA %00000110.000000000
.DA %00001110.000000000
.DA %00011100.000000000
.DA %00001000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
*--------------------------------------
MAN
SAVE /A2OSX.SRC/LIB/LIBGUI.S
ASM

View File

@ -45,6 +45,8 @@ L.SetPixel.CB .DA SetPixel.CB
L.DrawLines.CB .DA DrawLines.CB
L.Filename .DA Filename
L.BitBlT.CB .DA BitBlT.CB
L.MousePtr.CB .DA MousePtr.CB
L.BM.Arrow .DA BM.Arrow
.DA 0
*--------------------------------------
CS.INIT >LDYA L.MSG.INIT
@ -252,6 +254,21 @@ Destop.Paint >PUSHW L.Rect.CB
>PUSHW L.BitBlt.CB
>LIBCALL hLIBGUI,LIBGUI.Draw
>LDYA L.BM.Arrow
>STYA MousePtr.CB+S.CB.SrcPtr
>PUSHW L.MousePtr.CB
>LIBCALL hLIBGUI,LIBGUI.Draw
>LDYAI 128
>STYA MousePtr.CB+S.CB.DestX
>PUSHW L.MousePtr.CB
>LIBCALL hLIBGUI,LIBGUI.Draw
>LDYAI 182
>STYA MousePtr.CB+S.CB.DestX
>PUSHW L.MousePtr.CB
>LIBCALL hLIBGUI,LIBGUI.Draw
rts
*--------------------------------------
*--------------------------------------
@ -392,8 +409,23 @@ BitBlT.CB .DA #S.CB.CMD.BITBLT
.DA 0 Y1
.DA 140 X2
.DA 149 y2
.DA 196 DestX
.DA 21 DestY
.BS 2 DestX
.DA 24 DestY
.BS 2 SrcPtr
.DA 0
.DA #0
*--------------------------------------
MousePtr.CB .DA #S.CB.CMD.BITBLT
.DA #S.CB.OP.ORA+S.CB.OP.MASK+S.CB.OP.SAVE
.DA #S.CB.MODE.MONO
.DA #0
.DA 0 X1
.DA 0 Y1
.DA 11 X2
.DA 12 y2
.DA 112 DestX
.DA 24 DestY
.BS 2 SrcPtr
.DA 0
@ -407,6 +439,42 @@ SetPixel.X .BS 2
SetPixel.Y .BS 2
.DA #0
*--------------------------------------
.LIST ON
BM.Arrow .DA #S.BM.F.BBP1
.DA #2 RowBytes
.DA 12 W
.DA 13 H
.DA BM.Arrow.MASK-BM.Arrow
BM.Arrow.DATA .DA %0000.00000000
.DA %0000.00000010
.DA %0000.00000110
.DA %0000.00001110
.DA %0000.00011110
.DA %0000.00111110
.DA %0000.01111110
.DA %0000.11111110
.DA %0001.11111110
.DA %0010.01110010
.DA %0100.11110010
.DA %0000.11100000
.DA %0000.00000000
BM.Arrow.MASK .DA %1111.11111100
.DA %1111.11111000
.DA %1111.11110000
.DA %1111.11100000
.DA %1111.11000000
.DA %1111.10000000
.DA %1111.00000000
.DA %1110.00000000
.DA %1100.00000000
.DA %1000.00000000
.DA %0000.00000000
.DA %0000.00000000
.DA %1110.00001111
.LIST OFF
*--------------------------------------
.DUMMY
.OR 0