mirror of
https://github.com/A2osX/A2osX.git
synced 2025-02-03 09:33:01 +00:00
Kernel 0.9.1 : DHGR Driver, BitBLT, mouse pointer
This commit is contained in:
parent
c19f98bd81
commit
2a14a04de4
Binary file not shown.
Binary file not shown.
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user