diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index fa30fa56..7db07ae4 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/DRV/DHGR.DRV.S.BLT.txt b/DRV/DHGR.DRV.S.BLT.txt index 6d81fdf9..9b2ac497 100644 --- a/DRV/DHGR.DRV.S.BLT.txt +++ b/DRV/DHGR.DRV.S.BLT.txt @@ -10,40 +10,149 @@ NEW * S.CB.SrcH : height in bitmap/mask * S.CB.SrcPtr : pointer to S.BM * S.CB.SrcPtr+1 = 0, hMem in S.CB.SrcPtr -* S.CB.DstPtr : pointer to Save Buffer +* S.CB.DstPtr : pointer to Save/restore Buffer *-------------------------------------- -BITBLT ldy CB.Cache+S.CB.SrcPtr - lda CB.Cache+S.CB.SrcPtr+1 +BITBLT >LDYA CB.Cache+S.CB.X1 + jsr LBUF.SetBounds1YA + stx BLT.ScrBitOfs + + lda CB.Cache+S.CB.X1 + clc + adc CB.Cache+S.CB.SrcW + tay + lda CB.Cache+S.CB.X1+1 + adc CB.Cache+S.CB.SrcW+1 + pha + tya + sbc #0 + tay + pla + sbc #0 + + jsr LBUF.SetBounds2YA +*-------------------------------------- + lda CB.Cache+S.CB.OP + bit #S.CB.OP.RESTORE + beq BITBLT.0 + + ldy CB.Cache+S.CB.DstPtr + lda CB.Cache+S.CB.DstPtr+1 bne .1 + + sta SETREADAUX DstPtr is AUX hMem + tya + >SYSCALL2 GetMemPtr + +.1 >STYA ZPBMSavePtr + + ldy CB.Cache+S.CB.Y1 + +.2 lda BASEL,y setup line Base Ptr + sta ZPBasePtr + lda BASEH,y + sta ZPBasePtr+1 + + iny + phy + + ldx LBUF.C1 + +.3 ldy COL.BANK,x + sta $C000,y + txa + lsr + tay + + lda (ZPBMSavePtr) + sta (ZPBasePtr),y + inc ZPBMSavePtr + bne .4 + + inc ZPBMSavePtr+1 + +.4 cpx LBUF.C2 + inx + bcc .3 + + ply + cpy CB.Cache+S.CB.Y2 + bne .2 + + sta CLRREADAUX + rts +*-------------------------------------- +BITBLT.0 bit #S.CB.OP.SAVE + beq BITBLT.1 + + ldy CB.Cache+S.CB.DstPtr + lda CB.Cache+S.CB.DstPtr+1 + bne .1 + + tya DstPtr is AUX hMem + >SYSCALL2 GetStkObjPtr + + sta SETWRITEAUX + +.1 >STYA ZPBMSavePtr + + ldy CB.Cache+S.CB.Y1 + +.2 lda BASEL,y setup line Base Ptr + sta ZPBasePtr + lda BASEH,y + sta ZPBasePtr+1 + + iny + phy + + ldx LBUF.C1 + +.3 ldy COL.BANK,x + sta $C000,y + txa + lsr + tay + + lda (ZPBasePtr),y + sta (ZPBMSavePtr) + inc ZPBMSavePtr + bne .4 + + inc ZPBMSavePtr+1 + +.4 cpx LBUF.C2 + inx + bcc .3 + + ply + cpy CB.Cache+S.CB.Y2 + bne .2 + + sta CLRWRITEAUX + + lda CB.Cache+S.CB.OP +*-------------------------------------- +BITBLT.1 and #$0F + beq .8 + + ldy CB.Cache+S.CB.SrcPtr + lda CB.Cache+S.CB.SrcPtr+1 + bne .4 sta SETREADAUX SrcPtr is AUX hMem tya >SYSCALL2 GetMemPtr -.1 >STYA ZPBMDataPtr +.4 >STYA ZPBMDataPtr - lda CB.Cache+S.CB.OP - bit #S.CB.OP.SAVE+S.CB.OP.RESTORE - beq .3 + jsr BITBLT.2 - ldy CB.Cache+S.CB.DstPtr - lda CB.Cache+S.CB.DstPtr+1 - bne .2 - - sta SETWRITEAUX DstPtr is AUX hMem - tya - >SYSCALL2 GetMemPtr - -.2 >STYA ZPBMSavePtr +.8 sta CLRREADAUX -.3 jsr BITBLT.1 - - sta CLRREADAUX - sta CLRWRITEAUX rts - -BITBLT.1 ldy #S.BM-1 +*-------------------------------------- +BITBLT.2 ldy #S.BM-1 .1 lda (ZPBMDataPtr),y sta BM.Cache,y @@ -51,6 +160,7 @@ BITBLT.1 ldy #S.BM-1 bpl .1 ldx #0 + lda BM.Cache+S.BM.F cmp #S.BM.F.BBP1 beq .11 @@ -117,23 +227,7 @@ BITBLT.1 ldy #S.BM-1 inc BLT.BMMaskPtr+1 -.4 >LDYA CB.Cache+S.CB.X1 - jsr LBUF.SetBounds1YA - stx BLT.ScrBitOfs - lda CB.Cache+S.CB.X1 - clc - adc CB.Cache+S.CB.SrcW - tay - lda CB.Cache+S.CB.X1+1 - adc CB.Cache+S.CB.SrcW+1 - pha - tya - sbc #0 - tay - pla - sbc #0 - jsr LBUF.SetBounds2YA - ldx BLT.ScrBitOfs +.4 ldx BLT.ScrBitOfs beq BITBLT.LOOP0 ldy Shift.L.LO-1,x X = 1->6 @@ -147,6 +241,7 @@ BITBLT.1 ldy #S.BM-1 sta BITBLT.LOOPx.3+1 sta BITBLT.LOOPx.7+1 jmp BITBLT.LOOPx + *------------ Shift 0 BITBLT.LOOP0 lda CB.Cache+S.CB.OP @@ -211,12 +306,14 @@ BITBLT.LOOP0 lda CB.Cache+S.CB.OP bcc .5 inc BLT.BMDataPtr+1 + .5 jmp BITBLT.LOOP0 .8 clc rts *------------ Shift 1->6 Comment : SCRBitOfs=X=3 + BITBLT.LOOPx lda CB.Cache+S.CB.OP X = BLT.ScrBitOfs bit #S.CB.OP.MASK beq BITBLT.LOOPx.4 @@ -299,7 +396,9 @@ BITBLT.LOOPx.7 and #$ff SELF MODIFIED : #%01110000 get only col2 bites adc BM.Cache+S.BM.RowBytes sta BLT.BMDataPtr bcc .2 + inc BLT.BMDataPtr+1 + .2 jmp BITBLT.LOOPx .8 clc diff --git a/DRV/DHGR.DRV.S.LBUF.txt b/DRV/DHGR.DRV.S.LBUF.txt index 90cec1ca..d987d737 100644 --- a/DRV/DHGR.DRV.S.LBUF.txt +++ b/DRV/DHGR.DRV.S.LBUF.txt @@ -24,7 +24,7 @@ LBUF.SetBounds2YA rts .1 lda C1.MASK,x - and C2.MASK,x + ora C2.MASK,x sta LBUF.C1.MASK lda C1.DATA,x ora C2.DATA,x @@ -37,58 +37,9 @@ LBUF.DrawAtY lda BASEL,y setup line Base Ptr sta ZPBasePtr+1 lda CB.Cache+S.CB.OP - bit #S.CB.OP.RESTORE - bne .4 - - bit #S.CB.OP.SAVE - beq .3 - - ldx LBUF.C1 - -.1 ldy COL.BANK,x - sta $C000,y - txa - lsr - tay - - lda (ZPBasePtr),y - sta (ZPBMSavePtr) - inc ZPBMSavePtr - bne .2 - - inc ZPBMSavePtr+1 - -.2 cpx LBUF.C2 - inx - bcc .1 - - lda CB.Cache+S.CB.OP - -.3 and #$F - beq .8 + and #$F tax jmp (J.LBUF.DrawAtY,x) - -.4 ldx LBUF.C1 - -.5 ldy COL.BANK,x - sta $C000,y - txa - lsr - tay - - lda (ZPBMSavePtr) - sta (ZPBasePtr),y - inc ZPBMSavePtr - bne .6 - - inc ZPBMSavePtr+1 - -.6 cpx LBUF.C2 - inx - bcc .5 - -.8 rts *-------------------------------------- LBUF.DrawAtY.SET LBUF.DrawAtY.AND.SET diff --git a/LIB/LIBGUI.S.MENU.txt b/LIB/LIBGUI.S.MENU.txt index 266546cf..fe54d76c 100644 --- a/LIB/LIBGUI.S.MENU.txt +++ b/LIB/LIBGUI.S.MENU.txt @@ -256,6 +256,9 @@ MENU.Show >SYSCALL2 GetMemPtr .5 >LDYA ZPMENUPtr jsr OBJ.SetX2Y2 + jsr MENU.Save + bcs MENU.Show.RTS + jsr MENU.Show.Borders ldy #S.MENU.MITEMS @@ -344,6 +347,52 @@ MENU.Show.GetW ldy #S.MITEM.F .8 rts *-------------------------------------- +MENU.Save jsr CB.ClearCache + + lda #S.CB.CMD.GETRECTBUFSIZE + sta CB.Cache+S.CB.CMD + + ldy #S.OBJ.X1 + ldx #0 + +.1 lda (ZPMENUPtr),y + sta CB.Cache+S.CB.X1 + iny + inx + cpx #8 X1,Y1,X2,Y2 + bne .1 + + jsr GFXWrite.CB + >SYSCALL NewStkObj + bcs .9 + + stx CB.Cache+S.CB.DstPtr + + ldy #S.MENU.hSAVEBUF + sta (ZPMENUPtr),y + + lda #S.CB.CMD.BITBLT + sta CB.Cache+S.CB.CMD + + lda #S.CB.OP.SAVE + sta CB.Cache+S.CB.OP + + ldy #S.OBJ.W + ldx #0 + +.2 lda (ZPMENUPtr),y + sta CB.Cache+S.CB.SrcW + iny + inx + cpx #4 W,H + bne .2 + >DEBUG + jsr GFXWrite.CB + +* clc + +.9 rts +*-------------------------------------- MENU.Show.Borders lda #S.CB.CMD.FILLRECT jsr PutA2CBBuf