diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index ef5170ef..f5fc8454 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index 87fa7ea5..e585dbdf 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ diff --git a/DRV/DHGR.DRV.S.BLT.txt b/DRV/DHGR.DRV.S.BLT.txt index bd5fea36..3278dc04 100644 --- a/DRV/DHGR.DRV.S.BLT.txt +++ b/DRV/DHGR.DRV.S.BLT.txt @@ -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 diff --git a/DRV/DHGR.DRV.S.LBUF.txt b/DRV/DHGR.DRV.S.LBUF.txt index 08984d17..7f20b0f3 100644 --- a/DRV/DHGR.DRV.S.LBUF.txt +++ b/DRV/DHGR.DRV.S.LBUF.txt @@ -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 diff --git a/DRV/DHGR.DRV.S.txt b/DRV/DHGR.DRV.S.txt index 7d1f0300..240986e6 100644 --- a/DRV/DHGR.DRV.S.txt +++ b/DRV/DHGR.DRV.S.txt @@ -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 diff --git a/INC/LIBGUI.I.txt b/INC/LIBGUI.I.txt index 0496ae37..b36362ee 100644 --- a/INC/LIBGUI.I.txt +++ b/INC/LIBGUI.I.txt @@ -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 diff --git a/LIB/LIBGUI.S.txt b/LIB/LIBGUI.S.txt index 1c072dc0..36d55b39 100644 --- a/LIB/LIBGUI.S.txt +++ b/LIB/LIBGUI.S.txt @@ -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 diff --git a/SBIN/GUI.S.txt b/SBIN/GUI.S.txt index b7eafef2..b6e6c938 100644 --- a/SBIN/GUI.S.txt +++ b/SBIN/GUI.S.txt @@ -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