diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index d295a6c1..f6787a45 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 6879ab58..05ba9576 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ diff --git a/DRV/DHGR.DRV.S.LBUF.txt b/DRV/DHGR.DRV.S.LBUF.txt index 2594eb33..a19cdfa9 100644 --- a/DRV/DHGR.DRV.S.LBUF.txt +++ b/DRV/DHGR.DRV.S.LBUF.txt @@ -239,7 +239,7 @@ LBUF.DrawAtY.AND.ORA sta $C000,y ldy COL.OFS,x - >DEBUG +* >DEBUG lda LBUF.MASK,x get MASK bits ora LBUF.C2.MASK and (ZPBasePtr),y diff --git a/INC/LIBGUI.I.txt b/INC/LIBGUI.I.txt index ca230624..91cca2c3 100644 --- a/INC/LIBGUI.I.txt +++ b/INC/LIBGUI.I.txt @@ -49,15 +49,18 @@ S.CB.DstPtr .EQ 18 * S.CB .EQ 20 *-------------------------------------- -S.DC.hDev .EQ 0 -S.DC.hMem .EQ 1 -S.DC.Parent .EQ 2 -S.DC.X .EQ 4 -S.DC.Y .EQ 6 -S.DC.W .EQ 8 -S.DC.H .EQ 10 +S.GC.hDev .EQ 0 +S.GC.hMem .EQ 1 +S.GC.Parent .EQ 2 * -S.DC .EQ 12 +S.GC.X1 .EQ 4 +S.GC.Y1 .EQ 6 +S.GC.X2 .EQ 8 +S.GC.Y2 .EQ 10 +S.GC.W .EQ 12 +S.GC.H .EQ 14 +* +S.GC .EQ 16 *-------------------------------------- CUR.T.ARROW .EQ 0 CUR.T.PLUS .EQ 2 diff --git a/LIB/LIBGUI.S.CLIP.txt b/LIB/LIBGUI.S.CLIP.txt new file mode 100644 index 00000000..5772798f --- /dev/null +++ b/LIB/LIBGUI.S.CLIP.txt @@ -0,0 +1,154 @@ +PR#3 +PREFIX /A2OSX.BUILD +NEW +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +ClipLine.LEFT .EQ 1 +ClipLine.RIGHT .EQ 2 +ClipLine.BOTTOM .EQ 4 +ClipLine.TOP .EQ 8 +*-------------------------------------- +* In: +* Control Block in CB.Cache +* Graphic Context in GC.Cache +*-------------------------------------- +ClipLine jsr ClipLine.EncodeP1 + jsr ClipLine.EncodeP2 + +.1 lda ClipLine.P1 + ora ClipLine.P2 + beq .88 + + lda ClipLine.P1 + and ClipLine.P2 + bne .99 + + lda ClipLine.P1 + beq .5 + + bit #ClipLine.TOP + beq .2 +* Y1 is above S.CB.Y1.... +* DY=Y2-Y1; + + jsr ClipLine.EncodeP1 + bra .1 + +.2 bit #ClipLine.BOTTOM + beq .3 +* Y1 is below S.CB.Y2.... + + jsr ClipLine.EncodeP1 + bra .1 + +.3 bit #ClipLine.RIGHT + beq .4 +* X1 is after S.CB.X2.... + jsr ClipLine.EncodeP1 + bra .1 +* X1 is before S.CB.X1.... +.4 + jsr ClipLine.EncodeP1 + bra .1 +* P2 +.5 lda ClipLine.P2 + + bit #ClipLine.TOP + beq .6 +* Y2 is above S.CB.Y1.... + jsr ClipLine.EncodeP2 + bra .1 + +.6 bit #ClipLine.BOTTOM + beq .7 +* Y2 is below S.CB.Y2.... + jsr ClipLine.EncodeP2 + bra .1 + +.7 bit #ClipLine.RIGHT + beq .8 +* X2 is after S.CB.X2.... + jsr ClipLine.EncodeP2 + bra .1 +* X2 is before S.CB.X1.... +.8 + jsr ClipLine.EncodeP2 + bra .1 + +.88 clc + rts + +.99 sec + rts +*-------------------------------------- +ClipLine.EncodeP1 + ldy #0 + + lda CB.Cache+S.CB.X1 + ldx CB.Cache+S.CB.X1+1 + jsr ClipLine.EncodeX.AX + + tay + + lda CB.Cache+S.CB.Y1 + ldx CB.Cache+S.CB.Y1+1 + jsr ClipLine.EncodeY.AX + + sta ClipLine.P1 + rts +*-------------------------------------- +ClipLine.EncodeP2 + ldy #0 + + lda CB.Cache+S.CB.X2 + ldx CB.Cache+S.CB.X2+1 + jsr ClipLine.EncodeX.AX + + tay + + lda CB.Cache+S.CB.Y2 + ldx CB.Cache+S.CB.Y2+1 + jsr ClipLine.EncodeY.AX + + sta ClipLine.P2 + rts +*-------------------------------------- +ClipLine.EncodeX.AX + pha + >SCMPAX GC.Cache+S.GC.X1 + bmi .1 + tya + ora #ClipLine.LEFT + plx + rts + +.1 pla + >SCMPAX GC.Cache+S.GC.X1 + bpl .8 + tya + ora #ClipLine.RIGHT +.8 rts +*-------------------------------------- +ClipLine.EncodeY.AX + pha + >SCMPAX GC.Cache+S.GC.Y1 + bmi .1 + tya + ora #ClipLine.TOP + plx + rts + +.1 pla + >SCMPAX GC.Cache+S.GC.Y1 + bpl .8 + tya + ora #ClipLine.BOTTOM + +.8 rts +*-------------------------------------- +MAN +SAVE /A2OSX.SRC/LIB/LIBGUI.S.CLIP +LOAD /A2OSX.SRC/LIB/LIBGUI.S +ASM diff --git a/LIB/LIBGUI.S.CUR.txt b/LIB/LIBGUI.S.CUR.txt new file mode 100644 index 00000000..2ee2b856 --- /dev/null +++ b/LIB/LIBGUI.S.CUR.txt @@ -0,0 +1,22 @@ +PR#3 +PREFIX /A2OSX.BUILD +NEW +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +SetCursor.A +*-------------------------------------- +SetCursorPos +*-------------------------------------- +HideCursor +*-------------------------------------- +ShowCursor + + clc + rts +*-------------------------------------- +MAN +SAVE /A2OSX.SRC/LIB/LIBGUI.S.CUR +LOAD /A2OSX.SRC/LIB/LIBGUI.S +ASM diff --git a/LIB/LIBGUI.S.DRAW.txt b/LIB/LIBGUI.S.DRAW.txt new file mode 100644 index 00000000..379ecc07 --- /dev/null +++ b/LIB/LIBGUI.S.DRAW.txt @@ -0,0 +1,325 @@ +PR#3 +PREFIX /A2OSX.BUILD +NEW +INC 1 +AUTO 6 +*-------------------------------------- +Draw >PULLW ZPCmdPtr + + lda (ZPCmdPtr) Get Cmd + +.1 tax + cpx #S.CB.CMD.DRAWLINE + bcc .3 Native DRV Cmd + + ldy CB.CmdLen,x + +.2 lda (ZPCmdPtr),y Y=Byte count-1 to cache + sta CB.Cache,y + dey + bpl .2 + + jsr Draw.Jmp + bra .7 + +.3 >LDYA ZPCmdPtr + + jsr GoDev.YA + +.7 lda (ZPCmdPtr) Get Cmd + tax + lda CB.CmdLen,x + sec + adc ZPCmdPtr + sta ZPCmdPtr + bcc .8 + inc ZPCmdPtr+1 + +.8 lda (ZPCmdPtr) Get Cmd + bne .1 + + clc + rts + +Draw.Jmp jmp (J.Cmds,x) +*-------------------------------------- +* In: Control Block in CB.Cache +* CMD +* OP +* MODE +* COLOR +* X1 +* Y1 +* X2 +* Y2 +*-------------------------------------- +DrawLine lda CB.Cache+S.CB.X2 + sec + sbc CB.Cache+S.CB.X1 + sta DX + + lda CB.Cache+S.CB.X2+1 + sbc CB.Cache+S.CB.X1+1 + sta DX+1 DX = X2 - X1 + + bmi .1 DX < 0.... + + ora DX + bne .2 DX > 0... + + lda #S.CB.CMD.VLINE + sta CB.Cache+S.CB.CMD + jmp GoDev DX=0 : VLIN Y1,Y2 At X1 + +.1 >SWAP16 CB.Cache+S.CB.X1,CB.Cache+S.CB.X2 +* >SWAP16 CB.Cache+S.CB.Y1,CB.Cache+S.CB.Y2 + lda CB.Cache+S.CB.Y1 + ldx CB.Cache+S.CB.Y2 + stx CB.Cache+S.CB.Y1 + sta CB.Cache+S.CB.Y2 + + >NOT16 DX swap X1/X2, Y1/Y2, set DX=-DX (DX positive) + +.2 lda #1 + sta IY + + lda CB.Cache+S.CB.Y2 + sec + sbc CB.Cache+S.CB.Y1 + sta DY + +* lda CB.Cache+S.CB.Y2+1 + lda #0 +* sbc CB.Cache+S.CB.Y1+1 + sbc #0 + sta DY+1 DY = Y2 - Y1 + + bmi .3 DY < 0 ... + + ora DY + bne .4 + + lda #S.CB.CMD.HLINE + sta CB.Cache+S.CB.CMD + jmp GoDev DY=0 : HLIN X1,X2 At Y1 + +.3 >NOT16 DY set DY=-DY + lda #$ff + sta IY set IY=-1 + +.4 lda #S.CB.CMD.SETPIXEL + sta CB.Cache+S.CB.CMD + jsr GoDev + + lda DX + sec + sbc DY + tax + + lda DX+1 +* sbc DY+1 + sbc #0 + bmi DrawLine.IncY DY is greater than DX, we will increase on Y axis + + txa + beq DrawLine.IncXY DX=DY, go inc X & Y + + jmp DrawLine.IncX DY is lower than DX, we will increase on X axis + +DrawLine.IncXY lda DX DX=DY + eor #$ff + sta Counter + lda DX+1 + eor #$ff + sta Counter+1 + +.1 inc Counter + bne .2 + inc Counter+1 + beq .8 + +.2 inc CB.Cache+S.CB.X1 + bne .3 + inc CB.Cache+S.CB.X1+1 + +.3 lda CB.Cache+S.CB.Y1 Y1=Y1+IY + clc + adc IY + sta CB.Cache+S.CB.Y1 + + jsr GoDev + bra .1 + +.8 rts + +DrawLine.IncY lda DY + eor #$ff + sta Counter + lda DY+1 + eor #$ff + sta Counter+1 + + lda DX IE=2*DX + asl + sta IE + pha + + lda DX+1 + rol + sta IE+1 + tax + + pla D=IE-DY + sec + sbc DY + sta D + + txa + sbc DY+1 + sta D+1 + + lda DX INE=2*(DX-DY) + sec + sbc DY + pha + + lda DX+1 + sbc DY+1 + tax + + pla + + asl + sta INE + txa + rol + sta INE+1 + +.1 inc Counter + bne .2 + inc Counter+1 + beq .8 + +.2 lda D+1 IF D < 0 ... + bmi .4 + + lda D D > 0 : D=D+INE + clc + adc INE + sta D + lda D+1 + adc INE+1 + sta D+1 + + inc CB.Cache+S.CB.X1 X1=X1+1 + bne .5 + inc CB.Cache+S.CB.X1+1 + + bra .5 + +.4 lda D D > 0 : D=D+IE + clc + adc IE + sta D + lda D+1 + adc IE+1 + sta D+1 + +.5 lda CB.Cache+S.CB.Y1 Y1=Y1+IY + clc + adc IY + sta CB.Cache+S.CB.Y1 + + jsr GoDev + bra .1 + +.8 rts + +DrawLine.IncX lda DX + eor #$ff + sta Counter + lda DX+1 + eor #$ff + sta Counter+1 + + lda DY IE=2*DY + asl + sta IE + pha + +* lda DY+1 + lda #0 + rol + sta IE+1 + tax + + pla D=IE-DX + sec + sbc DX + sta D + + txa + sbc DX+1 + sta D+1 + + lda DY INE=2*(DY-DX) + sec + sbc DX + pha + +* lda DY+1 + lda #0 + sbc DX+1 + tax + + pla + asl + sta INE + txa + rol + sta INE+1 + +.1 inc Counter + bne .2 + inc Counter+1 + beq .8 + +.2 lda D+1 ID D < 0 .... + bmi .4 + + lda D D > 0 : D=D+INE + clc + adc INE + sta D + lda D+1 + adc INE+1 + sta D+1 + + lda CB.Cache+S.CB.Y1 Y1=Y1+IY + clc + adc IY + sta CB.Cache+S.CB.Y1 + + bra .5 + +.4 lda D D < 0 : D=D+IE + clc + adc IE + sta D + lda D+1k + adc IE+1 + sta D+1 + +.5 inc CB.Cache+S.CB.X1 X1=X1+1 + bne .6 + inc CB.Cache+S.CB.X1+1 + +.6 jsr GoDev + bra .1 + +.8 rts +*-------------------------------------- +MAN +SAVE /A2OSX.SRC/LIB/LIBGUI.S.DRAW +LOAD /A2OSX.SRC/LIB/LIBGUI.S +ASM diff --git a/LIB/LIBGUI.S.txt b/LIB/LIBGUI.S.txt index d1d4dd17..82ed0e68 100644 --- a/LIB/LIBGUI.S.txt +++ b/LIB/LIBGUI.S.txt @@ -31,6 +31,15 @@ AUTO 6 sbc ]1+1 sta ]1+1 .EM + .MA SCMPAX + sec + sbc ]1 + txa + sbc ]1+1 + bvc :1 + eor #$80 +:1 .EQ * + .EM *-------------------------------------- ZPDCPtr .EQ ZPLIB+2 ZPCmdPtr .EQ ZPLIB+4 @@ -66,7 +75,7 @@ LIB.LOAD LIB.UNLOAD clc rts *-------------------------------------- -InitGUI.A sta hDev +InitGUI.A sta GC.Screen+S.GC.hDev >SYSCALL GetDevByID.A >STYA GoDev.Jmp+1 @@ -74,342 +83,19 @@ InitGUI.A sta hDev rts *-------------------------------------- CloseGUI - stz hDev + stz GC.Screen+S.GC.hDev sec rts *-------------------------------------- -Draw >PULLW ZPCmdPtr - - lda (ZPCmdPtr) Get Cmd - -.1 tax - cpx #S.CB.CMD.DRAWLINE - bcc .3 Native DRV Cmd - - ldy CB.CmdLen,x - -.2 lda (ZPCmdPtr),y Y=Byte count-1 to cache - sta CB.Cache,y - dey - bpl .2 - - jsr Draw.Jmp - bra .7 - -.3 >LDYA ZPCmdPtr - - jsr GoDev.YA - -.7 lda (ZPCmdPtr) Get Cmd - tax - lda CB.CmdLen,x - sec - adc ZPCmdPtr - sta ZPCmdPtr - bcc .8 - inc ZPCmdPtr+1 - -.8 lda (ZPCmdPtr) Get Cmd - bne .1 - - clc - rts - -Draw.Jmp jmp (J.Cmds,x) -*-------------------------------------- -SetCursor.A -*-------------------------------------- -SetCursorPos -*-------------------------------------- -HideCursor -*-------------------------------------- -ShowCursor - - clc - rts -*-------------------------------------- -* In: Control Block -* CMD -* OP -* MODE -* COLOR -* X1 -* Y1 -* X2 -* Y2 -*-------------------------------------- -DrawLine lda CB.Cache+S.CB.X2 - sec - sbc CB.Cache+S.CB.X1 - sta DX - - lda CB.Cache+S.CB.X2+1 - sbc CB.Cache+S.CB.X1+1 - sta DX+1 DX% = X2% - X1% - - bmi .1 DX < 0.... - - ora DX - bne .2 DX > 0... - - lda #S.CB.CMD.VLINE - sta CB.Cache+S.CB.CMD - jmp GoDev DX=0 : VLIN Y1,Y2 At X1 - -.1 >SWAP16 CB.Cache+S.CB.X1,CB.Cache+S.CB.X2 -* >SWAP16 CB.Cache+S.CB.Y1,CB.Cache+S.CB.Y2 - lda CB.Cache+S.CB.Y1 - ldx CB.Cache+S.CB.Y2 - stx CB.Cache+S.CB.Y1 - sta CB.Cache+S.CB.Y2 - - >NOT16 DX swap X1/X2, Y1/Y2, set DX=-DX (DX positive) - -.2 lda #1 - sta IY - - lda CB.Cache+S.CB.Y2 - sec - sbc CB.Cache+S.CB.Y1 - sta DY - -* lda CB.Cache+S.CB.Y2+1 - lda #0 -* sbc CB.Cache+S.CB.Y1+1 - sbc #0 - sta DY+1 DY% = Y2% - Y1% - - bmi .3 DY < 0 ... - - ora DY - bne .4 - - lda #S.CB.CMD.HLINE - sta CB.Cache+S.CB.CMD - jmp GoDev DY=0 : HLIN X1,X2 At Y1 - -.3 >NOT16 DY set DY=-DY - lda #$ff - sta IY set IY=-1 - -.4 lda #S.CB.CMD.SETPIXEL - sta CB.Cache+S.CB.CMD - jsr GoDev - - lda DX - sec - sbc DY - tax - - lda DX+1 -* sbc DY+1 - sbc #0 - bmi DrawLine.IncY DY is greater than DX, we will increase on Y axis - - txa - beq DrawLine.IncXY DX=DY, go inc X & Y - - jmp DrawLine.IncX DY is lower than DX, we will increase on X axis - -DrawLine.IncXY lda DX DX=DY - eor #$ff - sta Counter - lda DX+1 - eor #$ff - sta Counter+1 - -.1 inc Counter - bne .2 - inc Counter+1 - beq .8 - -.2 inc CB.Cache+S.CB.X1 - bne .3 - inc CB.Cache+S.CB.X1+1 - -.3 lda CB.Cache+S.CB.Y1 Y1=Y1+IY - clc - adc IY - sta CB.Cache+S.CB.Y1 - - jsr GoDev - bra .1 - -.8 rts - -DrawLine.IncY lda DY - eor #$ff - sta Counter - lda DY+1 - eor #$ff - sta Counter+1 - - lda DX IE=2*DX - asl - sta IE - pha - - lda DX+1 - rol - sta IE+1 - tax - - pla D=IE-DY - sec - sbc DY - sta D - - txa - sbc DY+1 - sta D+1 - - lda DX INE=2*(DX-DY) - sec - sbc DY - pha - - lda DX+1 - sbc DY+1 - tax - - pla - - asl - sta INE - txa - rol - sta INE+1 - -.1 inc Counter - bne .2 - inc Counter+1 - beq .8 - -.2 lda D+1 IF D < 0 ... - bmi .4 - - lda D D > 0 : D=D+INE - clc - adc INE - sta D - lda D+1 - adc INE+1 - sta D+1 - - inc CB.Cache+S.CB.X1 X1=X1+1 - bne .5 - inc CB.Cache+S.CB.X1+1 - - bra .5 - -.4 lda D D > 0 : D=D+IE - clc - adc IE - sta D - lda D+1 - adc IE+1 - sta D+1 - -.5 lda CB.Cache+S.CB.Y1 Y1=Y1+IY - clc - adc IY - sta CB.Cache+S.CB.Y1 - - jsr GoDev - bra .1 - -.8 rts - -DrawLine.IncX lda DX - eor #$ff - sta Counter - lda DX+1 - eor #$ff - sta Counter+1 - - lda DY IE=2*DY - asl - sta IE - pha - -* lda DY+1 - lda #0 - rol - sta IE+1 - tax - - pla D=IE-DX - sec - sbc DX - sta D - - txa - sbc DX+1 - sta D+1 - - lda DY INE=2*(DY-DX) - sec - sbc DX - pha - -* lda DY+1 - lda #0 - sbc DX+1 - tax - - pla - asl - sta INE - txa - rol - sta INE+1 - -.1 inc Counter - bne .2 - inc Counter+1 - beq .8 - -.2 lda D+1 ID D < 0 .... - bmi .4 - - lda D D > 0 : D=D+INE - clc - adc INE - sta D - lda D+1 - adc INE+1 - sta D+1 - - lda CB.Cache+S.CB.Y1 Y1=Y1+IY - clc - adc IY - sta CB.Cache+S.CB.Y1 - - bra .5 - -.4 lda D D < 0 : D=D+IE - clc - adc IE - sta D - lda D+1 - adc IE+1 - sta D+1 - -.5 inc CB.Cache+S.CB.X1 X1=X1+1 - bne .6 - inc CB.Cache+S.CB.X1+1 - -.6 jsr GoDev - bra .1 - -.8 rts -*-------------------------------------- GoDev >LDYA L.CB.Cache GoDev.YA ldx #DEVMGR.WRITE GoDev.Jmp jmp $ffff +*-------------------------------------- + .INB /A2OSX.SRC/LIB/LIBGUI.S.DRAW + .INB /A2OSX.SRC/LIB/LIBGUI.S.CLIP + .INB /A2OSX.SRC/LIB/LIBGUI.S.CUR *-------------------------------------- CS.END -hDev .BS 1 *-------------------------------------- DX .BS 2 DY .BS 2 @@ -418,6 +104,8 @@ IE .BS 2 D .BS 2 INE .BS 2 Counter .BS 2 +ClipLine.P1 .BS 1 +ClipLine.P2 .BS 1 *-------------------------------------- CB.CmdLen .DA S.CB.Y1+1 SETPIXEL .DA S.CB.Y1+1 GETPIXEL @@ -428,6 +116,8 @@ CB.CmdLen .DA S.CB.Y1+1 SETPIXEL .DA S.CB.DstPtr+1 GETRECTBUFSIZE .DA S.CB.Y2+1 DRAWLINE *-------------------------------------- +GC.Screen .BS S.GC +GC.Cache .BS S.GC CB.Cache .BS S.CB *-------------------------------------- MAN