diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 8f1df695..2bc9e118 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 02c7827a..b1b0edd2 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 a225f5ec..1eccb9fe 100644 --- a/DRV/DHGR.DRV.S.BLT.txt +++ b/DRV/DHGR.DRV.S.BLT.txt @@ -6,18 +6,82 @@ AUTO 6 .LIST OFF *-------------------------------------- * BitBlt -* In : YA = Ptr to CtrlBlk : -* 1 : OP -* 4 : SrcX1 -* 6 : SrcY1 -* 8 : SrcX2 -* 10 : SrcY2 -* 12 : DestX -* 14 : DestY -* 16 : SrcPtr -* 18 : DstPtr +* 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 +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 + and #7 we have to shift right!!! + tax + + lda CB.Cache+S.CB.X1+1 + lsr + lsr + lsr + pha + clc + adc ZPBMDataPtr + sta ZPBMDataPtr + bcc .3 + + inc ZPBMDataPtr+1 + +.3 pla + adc ZPBMMaskPtr + sta ZPBMMaskPtr + bcc .4 + + inc ZPBMMaskPtr+1 + +.4 + clc rts *-------------------------------------- diff --git a/DRV/DHGR.DRV.S.LBUF.txt b/DRV/DHGR.DRV.S.LBUF.txt new file mode 100644 index 00000000..bd7ef686 --- /dev/null +++ b/DRV/DHGR.DRV.S.LBUF.txt @@ -0,0 +1,131 @@ +PR#3 +PREFIX /A2OSX.BUILD +LOMEM $A00 +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +LBUF.SetBounds1YA + jsr DIVMOD7YA A=DIV, X=MOD + sta LBUF.C1 + tay + + lda C1.MASK,x + sta LBUF.C1.MASK + lda C1.DATA,x + sta LBUF.C1.DATA + rts +*-------------------------------------- +LBUF.SetBounds2YA + jsr DIVMOD7YA A=DIV, X=MOD + sta LBUF.C2 + tay + + cmp LBUF.C1 C1=C2, go combine in C1 + beq .1 + + lda C2.MASK,x + sta LBUF.C2.MASK + lda C2.DATA,x + sta LBUF.C2.DATA + rts + +.1 lda C1.MASK,x + and C2.MASK,x + sta LBUF.C1.MASK + + lda C1.DATA,x + and C2.DATA,x + sta LBUF.C2.DATA + rts +*-------------------------------------- +LBUF.DrawAtY lda BASEL,y setup line Base Ptr + sta ZPBasePtr + lda BASEH,y + sta ZPBasePtr+1 +*-------------------------------------- +LBUF.DrawAtY.SET + 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 + sta GBYTE + lda LBUF.DATA,x get DATA bits + and LBUF.C1.DATA set ONLY bits starting at X1 mod 7 + ora GBYTE + sta (ZPBasePtr),y update screen + + inx + cpx LBUF.C2 + beq .2 C1=C2, go setup C2 + bcs .8 C1+1 > C2, we are done... + +.1 ldy COL.BANK,x + sta $C000,y + ldy COL.OFS,x + + lda LBUF.DATA,x set all bytes between C1+1 & C2-1 + sta (ZPBasePtr),y + + inx + cpx LBUF.C2 + bne .1 + +.2 ldy COL.BANK,x + sta $C000,y + ldy COL.OFS,x + + lda (ZPBasePtr),y Get C2 + and LBUF.C2.MASK clear ONLY bits ending at X2 mod 7 + sta GBYTE + lda LBUF.DATA,x get DATA bits + and LBUF.C2.DATA set ONLY bits ending at X2 mod 7 + ora GBYTE + sta (ZPBasePtr),y update screen + +.8 rts +*-------------------------------------- +LBUF.DrawAtY.ORA + ldy LBUF.C1 y C1->C2 + +.1 ldx COL.BANK,y + sta $C000,x + + lda (ZPBasePtr),y + and LBUF.MASK,y + + ora LBUF.DATA,y + sta (ZPBasePtr),y + + cpy LBUF.C2 + iny + bcc .1 + + rts +*-------------------------------------- +LBUF.DrawAtY.XOR + ldy LBUF.C1 y C1->C2 + +.1 ldx COL.BANK,y + sta $C000,x + + lda (ZPBasePtr),y + and LBUF.MASK,y + + eor LBUF.DATA,y + sta (ZPBasePtr),y + + cpy LBUF.C2 + iny + bcs .1 + + rts +*-------------------------------------- +MAN +SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.LBUF +LOAD /A2OSX.SRC/DRV/DHGR.DRV.S +ASM diff --git a/DRV/DHGR.DRV.S.LINE.txt b/DRV/DHGR.DRV.S.LINE.txt index 61fe1c6c..4d7df4ef 100644 --- a/DRV/DHGR.DRV.S.LINE.txt +++ b/DRV/DHGR.DRV.S.LINE.txt @@ -30,17 +30,15 @@ HLINE.MONO >LDYA CB.Cache+S.CB.X1 .1 ldx LBUF.C1 .2 tya - and LBUF.MASK,x sta LBUF.DATA,x - inx cpx LBUF.C2 - bcs .2 + inx + bcc .2 ldy CB.Cache+S.CB.Y1 jmp LBUF.DrawAtY -HLINE.C16 >DEBUG - lda CB.Cache+S.CB.X1 +HLINE.C16 lda CB.Cache+S.CB.X1 and #%11111100 tay lda CB.Cache+S.CB.X1+1 @@ -48,7 +46,7 @@ HLINE.C16 >DEBUG jsr LBUF.SetBounds1YA lda CB.Cache+S.CB.X2 - and #%11111100 + ora #%00000011 tay lda CB.Cache+S.CB.X2+1 @@ -64,7 +62,7 @@ HLINE.C16 >DEBUG adc #0 sta ZPPalettePtr+1 - ldx LBUF.C1 + ldx LBUF.C1 .1 txa and #3 Compute index in Palette (Mod 4) @@ -72,7 +70,6 @@ HLINE.C16 >DEBUG tay lda (ZPPalettePtr),y - and LBUF.MASK,x sta LBUF.DATA,x cpx LBUF.C2 inx diff --git a/DRV/DHGR.DRV.S.RECT.txt b/DRV/DHGR.DRV.S.RECT.txt index 5d122521..acfe6139 100644 --- a/DRV/DHGR.DRV.S.RECT.txt +++ b/DRV/DHGR.DRV.S.RECT.txt @@ -15,16 +15,16 @@ AUTO 6 *-------------------------------------- FILLRECT jsr HLINE - inc CB.Cache+S.CB.Y1 ldy CB.Cache+S.CB.Y1 cpy CB.Cache+S.CB.Y2 - bcs .8 + beq .8 -.2 jsr LBUF.DrawAtY - inc CB.Cache+S.CB.Y1 - ldy CB.Cache+S.CB.Y1 +.2 iny + phy + jsr LBUF.DrawAtY + ply cpy CB.Cache+S.CB.Y2 - bcc .2 + bne .2 .8 rts *-------------------------------------- diff --git a/DRV/DHGR.DRV.S.txt b/DRV/DHGR.DRV.S.txt index 5e6328f0..a3d3ab3d 100644 --- a/DRV/DHGR.DRV.S.txt +++ b/DRV/DHGR.DRV.S.txt @@ -16,8 +16,8 @@ AUTO 6 ZPCmdPtr .EQ ZPDRV ZPBasePtr .EQ ZPDRV+2 ZPPalettePtr .EQ ZPDRV+4 - - +ZPBMDataPtr .EQ ZPDRV+6 +ZPBMMaskPtr .EQ ZPDRV+8 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -142,7 +142,7 @@ WRITE >STYA ZPCmdPtr sta SET80STORE lda (ZPCmdPtr) Get Cmd - + .1 tax ldy CB.CmdLen,x @@ -159,86 +159,6 @@ WRITE >STYA ZPCmdPtr rts .10 jmp (J.Cmds,x) -*-------------------------------------- - .INB /A2OSX.SRC/DRV/DHGR.DRV.S.PIX - .INB /A2OSX.SRC/DRV/DHGR.DRV.S.LINE - .INB /A2OSX.SRC/DRV/DHGR.DRV.S.RECT - .INB /A2OSX.SRC/DRV/DHGR.DRV.S.BLT -*-------------------------------------- -LBUF.SetBounds1YA - jsr DIVMOD7YA A=DIV, X=MOD - sta LBUF.C1 - tay - - lda C1.MASK,x - sta LBUF.MASK,y - rts -*-------------------------------------- -LBUF.SetBounds2YA - jsr DIVMOD7YA A=DIV, X=MOD - sta LBUF.C2 - tay - - cmp LBUF.C1 - beq .2 - - lda C2.MASK,x - sta LBUF.MASK,y - - lda #0 - -.1 dey - cpy LBUF.C1 - beq .8 - sta LBUF.MASK,y - bra .1 - -.2 lda C1.MASK,x - and C2.MASK,x - sta LBUF.MASK,y -.8 rts -*-------------------------------------- -LBUF.SetOPA -*-------------------------------------- -LBUF.DrawAtY lda BASEL,y setup line Base Ptr - sta ZPBasePtr - lda BASEH,y - sta ZPBasePtr+1 - - - ldy LBUF.C1 y C1->C2 - -.1 ldx COL.BANK,y - sta $C000,x - - lda (ZPBasePtr),y - and LBUF.MASK,y - - ora LBUF.DATA,y - lda #$ff - sta (ZPBasePtr),y - - cpy LBUF.C2 - iny - bcc .1 - - rts -*-------------------------------------- -LBUF.DrawAtY.XOR -.1 ldx COL.BANK,y - sta $C000,x - - lda (ZPBasePtr),y - and LBUF.MASK,y - - eor LBUF.DATA,y - sta (ZPBasePtr),y - - iny - cpy LBUF.C2 - bcs .1 - - rts *-------------------------------------- * IN: * Y = LO @@ -267,6 +187,44 @@ DIVMOD7Y2 lda DIV7.512,y ldx MOD7.512,y rts *-------------------------------------- +* IN: +* Y,A = num1 (16) +* X = num2 (8) +* OUT: +* Y,A = (Y,A) * X +*-------------------------------------- +YAMultX stx GBYTE + + sty GWORD + sta GWORD+1 + + ldy #0 Result LO + tya Result HI + + bra .3 + +.1 pha + tya + clc + adc GWORD + tay + pla + adc GWORD+1 + +.2 asl GWORD + rol GWORD+1 + +.3 lsr GBYTE + bcs .1 + bne .2 + rts +*-------------------------------------- + .INB /A2OSX.SRC/DRV/DHGR.DRV.S.PIX + .INB /A2OSX.SRC/DRV/DHGR.DRV.S.LINE + .INB /A2OSX.SRC/DRV/DHGR.DRV.S.RECT + .INB /A2OSX.SRC/DRV/DHGR.DRV.S.BLT + .INB /A2OSX.SRC/DRV/DHGR.DRV.S.LBUF +*-------------------------------------- DRV.CS.END *-------------------------------------- .INB /A2OSX.SRC/DRV/DHGR.DRV.T @@ -279,6 +237,7 @@ CB.CmdLen .DA S.CB.Y1+1 SETPIXEL .DA S.CB.DstPtr+1 BITBLT *-------------------------------------- CB.Cache .BS S.CB +BM.Cache .BS S.BM *-------------------------------------- DIV7.lo .BS 3 DIV7.hi .BS 3 @@ -286,14 +245,19 @@ MOD7.lo .BS 3 MOD7.hi .BS 3 *-------------------------------------- LBUF.C1 .BS 1 -LBUF.C2 .BS 1 C1 C2 -LBUF.MASK .BS 80 Bits to CLR in VMEM & LBUF.DATA from C1 to C2 : 11100000 00000000 00111111 -LBUF.DATA .BS 80 Bits to SET/ORA/XOR in VMEM from C1 to C2 : 000ccccc cccccccc cc000000 +LBUF.C1.MASK .BS 1 Bits to CLR in VMEM : 11100000 00000000 00111111 +LBUF.C1.DATA .BS 1 Bits to SET/ORA/XOR : 000ccccc cccccccc cc000000 +LBUF.C2 .BS 1 C1 C2 +LBUF.C2.MASK .BS 1 +LBUF.C2.DATA .BS 1 +LBUF.MASK .BS 80 +LBUF.DATA .BS 80 *-------------------------------------- XDIV7 .BS 1 XMOD7 .BS 1 XCOL7 .BS 1 GBYTE .BS 1 +GWORD .BS 2 *-------------------------------------- DSTAT .DA #0 .DA #0,#0,#0 diff --git a/DRV/DHGR.DRV.T.txt b/DRV/DHGR.DRV.T.txt index 2a0f1b18..7b48eb19 100644 --- a/DRV/DHGR.DRV.T.txt +++ b/DRV/DHGR.DRV.T.txt @@ -28,9 +28,7 @@ C2.DATA .DA #%10000001 ->C1.DATA .DA #%10001111 .DA #%10011111 .DA #%10111111 ...to 6 -*-------------------------------------- C1.DATA .DA #%11111111 -*-------------------------------------- C2.MASK .DA #%11111110 .DA #%11111100 .DA #%11111000 @@ -105,6 +103,11 @@ COL.BANK .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 *-------------------------------------- +COL.OFS .DA #00,#00,#01,#01,#02,#02,#03,#03,#04,#04,#05,#05,#06,#06,#07,#07,#08,#08,#09,#09 + .DA #10,#10,#11,#11,#12,#12,#13,#13,#14,#14,#15,#15,#16,#16,#17,#17,#18,#18,#19,#19 + .DA #20,#20,#21,#21,#22,#22,#23,#23,#24,#24,#25,#25,#26,#26,#27,#27,#28,#28,#29,#29 + .DA #30,#30,#31,#31,#32,#32,#33,#33,#34,#34,#35,#35,#36,#36,#37,#37,#38,#38,#39,#39 +*-------------------------------------- DIV7.BASE .HS 002449 Indexed with X.HI *-------------------------------------- DIV7.0 .HS 00 diff --git a/INC/LIBGUI.I.txt b/INC/LIBGUI.I.txt index 4d7357c1..e6e763d6 100644 --- a/INC/LIBGUI.I.txt +++ b/INC/LIBGUI.I.txt @@ -15,17 +15,18 @@ S.CB.CMD.FILLRECT .EQ 8 S.CB.CMD.BITBLT .EQ 10 S.CB.CMD.DRAWLINE .EQ 12 S.CB.OP .EQ 1 -S.CB.OP.SAVE .EQ %00000001 -S.CB.OP.REPLACE .EQ %00000010 -S.CB.OP.AND .EQ %00000100 -S.CB.OP.ORA .EQ %00001000 -S.CB.OP.XOR .EQ %00010000 +S.CB.OP.SET .EQ %00000001 replace screen with bitmap +S.CB.OP.ORA .EQ %00000010 combine screen & bitmap -> Screen +S.CB.OP.XOR .EQ %00000011 screen EOR bitmap -> Screen +S.CB.OP.SAVE .EQ %00010000 Save Screen to DstPtr before painting +S.CB.OP.AND .EQ %00100000 Apply BitMap mask before painting +S.CB.OP.COLOR .EQ %01000000 Assume BitMap is COLOR S.CB.MODE .EQ 2 S.CB.MODE.MONO .EQ %00000001 b/w (1 bit/pixel) *S.CB.MODE.C4 .EQ %00000010 *S.CB.MODE.C8 .EQ %00000100 S.CB.MODE.C16 .EQ %00001000 16 colors (4 bits/pixel) -S.CB.MODE.C256 .EQ %00010000 256 colors (8 bits/pixel) +*S.CB.MODE.C256 .EQ %00010000 256 colors (8 bits/pixel) S.CB.COLOR .EQ 3 S.CB.X1 .EQ 4 S.CB.Y1 .EQ 6 @@ -69,8 +70,9 @@ S.BM.F.BBP8 .EQ %00010000 S.BM.RowBytes .EQ 1 S.BM.W .EQ 2 S.BM.H .EQ 4 -S.BM.MASK.OFFSET .EQ 6 -S.BM.DATA .EQ 8 +S.BM.MASK.OFS .EQ 6 +* +S.BM .EQ 8 *-------------------------------------- LIBGUI.InitGUI.A .EQ 4 LIBGUI.CloseGUI .EQ 6 diff --git a/SBIN/GUI.S.txt b/SBIN/GUI.S.txt index d9aa9cb6..25e264e9 100644 --- a/SBIN/GUI.S.txt +++ b/SBIN/GUI.S.txt @@ -248,11 +248,48 @@ MouseData .BS 5 Rect.CB .DA #S.CB.CMD.FILLRECT .DA #S.CB.OP.ORA .DA #S.CB.MODE.C16 - .DA #13 + .DA #11 + .DA 0 + .DA 0 + .DA 559 + .DA 191 + + .DA #S.CB.CMD.FILLRECT + .DA #S.CB.OP.ORA + .DA #S.CB.MODE.MONO + .DA #1 + .DA 10 + .DA 10 + .DA 550 + .DA 180 + + .DA #S.CB.CMD.FILLRECT + .DA #S.CB.OP.ORA + .DA #S.CB.MODE.C16 + .DA #0 + .DA 20 + .DA 20 + .DA 540 + .DA 170 + + .DA #S.CB.CMD.FILLRECT + .DA #S.CB.OP.ORA + .DA #S.CB.MODE.C16 + .DA #9 .DA 30 .DA 30 .DA 530 .DA 160 + + .DA #S.CB.CMD.FILLRECT + .DA #S.CB.OP.ORA + .DA #S.CB.MODE.C16 + .DA #8 + .DA 40 + .DA 40 + .DA 520 + .DA 150 + .DA #0 *-------------------------------------- SetPixel.CB .DA #S.CB.CMD.SETPIXEL @@ -271,7 +308,7 @@ DrawLines.CB .DA #S.CB.CMD.DRAWLINE .DA 191 .DA 80+191 .DA 191+191 -*-------------------------------------- + .DA #S.CB.CMD.DRAWLINE .DA #S.CB.OP.ORA .DA #S.CB.MODE.MONO @@ -280,7 +317,7 @@ DrawLines.CB .DA #S.CB.CMD.DRAWLINE .DA 0 .DA 140 .DA 191 -*-------------------------------------- + .DA #S.CB.CMD.DRAWLINE .DA #S.CB.OP.ORA .DA #S.CB.MODE.MONO @@ -289,7 +326,7 @@ DrawLines.CB .DA #S.CB.CMD.DRAWLINE .DA 0 .DA 100+191 .DA 191 -*-------------------------------------- + .DA #S.CB.CMD.DRAWLINE .DA #S.CB.OP.ORA .DA #S.CB.MODE.MONO @@ -298,7 +335,7 @@ DrawLines.CB .DA #S.CB.CMD.DRAWLINE .DA 0 .DA 559 .DA 191 -*-------------------------------------- + .DA #S.CB.CMD.DRAWLINE .DA #S.CB.OP.ORA .DA #S.CB.MODE.MONO @@ -307,7 +344,7 @@ DrawLines.CB .DA #S.CB.CMD.DRAWLINE .DA 0 .DA 28 .DA 191 -*-------------------------------------- + .DA #S.CB.CMD.DRAWLINE .DA #S.CB.OP.ORA .DA #S.CB.MODE.MONO @@ -316,7 +353,16 @@ DrawLines.CB .DA #S.CB.CMD.DRAWLINE .DA 0 .DA 84 .DA 191 -*-------------------------------------- + + .DA #S.CB.CMD.DRAWLINE + .DA #S.CB.OP.ORA + .DA #S.CB.MODE.MONO + .DA #1 + .DA 0 + .DA 92 + .DA 559 + .DA 92 + .DA #0 *-------------------------------------- .DUMMY