diff --git a/DRV/DHGR.DRV.S.txt b/DRV/DHGR.DRV.S.txt index 0863f024..d5e8a9e3 100644 --- a/DRV/DHGR.DRV.S.txt +++ b/DRV/DHGR.DRV.S.txt @@ -17,6 +17,7 @@ AUTO 6 ZPBase .EQ ZPDRV ZPShiftLo .EQ ZPDRV+2 ZPShiftHi .EQ ZPDRV+4 +ZPCount .EQ ZPDRV+6 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -262,20 +263,20 @@ SETPIXEL >STYA ZPBase SETPIXEL.MONO ldx CB.Cache+S.CB.X1+1 Get X Hi byte.... lda DIV7.lo,x - sta .2+1 + sta .1+1 lda DIV7.hi,x - sta .2+2 + sta .1+2 lda MOD7.lo,x - sta .4+1 + sta .2+1 lda MOD7.hi,x - sta .4+2 + sta .2+2 lda DIV7.BASE,x ldx CB.Cache+S.CB.X1 clc -.2 adc $ffff,x DIV7 : x = X.LO, a = X DIV 7 +.1 adc $ffff,x DIV7 : x = X.LO, a = X DIV 7 pha save X DIV 7 lsr @@ -290,7 +291,7 @@ SETPIXEL.MONO ldx CB.Cache+S.CB.X1+1 Get X Hi byte.... tay sta $c000,y -.4 ldy $ffff,x MOD7 : x = X.LO, y = X MOD 7 +.2 ldy $ffff,x MOD7 : x = X.LO, y = X MOD 7 lda CB.Cache+S.CB.OP beq .5 @@ -322,8 +323,8 @@ SETPIXEL.C16 lda CB.Cache+S.CB.X1 ror lsr CB.Cache+S.CB.X1+1 ror - tay Y=CX/4 (range 0->139) - lda DIV7.0,y A=CX/4/7 (range 0->19) + tay Y=X/4 (range 0->139) + lda DIV7.0,y A=X/4/7 (range 0->19) asl times 2 (range 0->38) @@ -424,9 +425,56 @@ HLINE.I lda CB.Cache+S.CB.MODE bit #S.CB.MODE.C16 bne HLINE.C16 -HLINE.MONO +HLINE.MONO lda CB.Cache+S.CB.X2 Count=X2-X1 + sec + sbc CB.Cache+S.CB.X1 + eor #$ff + sta ZPCount + lda CB.Cache+S.CB.X2+1 + sbc CB.Cache+S.CB.X1+1 + eor #$ff + sta ZPCount+1 + + ldx CB.Cache+S.CB.X1+1 Get X Hi byte.... + lda DIV7.lo,x + sta .1+1 + lda DIV7.hi,x + sta .1+2 + + lda MOD7.lo,x + sta .2+1 + lda MOD7.hi,x + sta .2+2 + + lda DIV7.BASE,x + ldx CB.Cache+S.CB.X1 + + clc +.1 adc $ffff,x DIV7 : x = X.LO, a = X DIV 7 + + pha save X DIV 7 + lsr + ldy CB.Cache+S.CB.Y1 + clc + adc BASEL,y setup line Base Ptr (A=Col) + sta ZPBase + lda BASEH,y + sta ZPBase+1 + ply + lda COL.BANK,y + tay + sta $c000,y +.2 ldy $ffff,x MOD7 : x = X.LO, y = X MOD 7 + + + + + + + + HLINE.C16 rts *-------------------------------------- @@ -440,8 +488,163 @@ VLINE >STYA ZPBase dey bpl .1 - + sta SET80STORE +VLINE.MONO ldx CB.Cache+S.CB.X1+1 Get X Hi byte.... + + lda DIV7.lo,x + sta .1+1 + lda DIV7.hi,x + sta .1+2 + + lda MOD7.lo,x + sta .2+1 + lda MOD7.hi,x + sta .2+2 + + lda DIV7.BASE,x + ldx CB.Cache+S.CB.X1 + + clc + +.1 adc $ffff,x DIV7 : x = X.LO, a = X DIV 7 + sta XDIV7 save X DIV 7 + +.2 lda $ffff,x MOD7 : x = X.LO, y = X MOD 7 + sta XMOD7 + + lda CB.Cache+S.CB.OP + beq .4 + + ldx CB.Cache+S.CB.Y1 + +.3 lda XDIV7 + tay + lsr + clc + adc BASEL,x + sta ZPBase + lda BASEH,x + sta ZPBase+1 + + ldx COL.BANK,y + sta $C000,x + + ldy XMOD7 + lda (ZPBase) XOR + eor Mono.Masks,y y = mod 7 + sta (ZPBase) + + inc CB.Cache+S.CB.Y1 + ldx CB.Cache+S.CB.Y1 + cpx CB.Cache+S.CB.Y2 + bne .3 + + sta CLR80STORE + rts + +.4 lda (ZPBase) + ldx CB.Cache+S.CB.COLOR get color + bne .6 + + and Mono.NMasks,y includes And $7F for mono + sta (ZPBase) + sta CLR80STORE + rts + +.6 and #$7F switch back this byte to mono + ora Mono.Masks,y + sta (ZPBase) + sta CLR80STORE + rts + +VLINE.C16 lda CB.Cache+S.CB.X1 + lsr CB.Cache+S.CB.X1+1 divide by 4 + ror + lsr CB.Cache+S.CB.X1+1 + ror + tay Y=X/4 (range 0->139) + lda DIV7.0,y A=X/4/7 (range 0->19) + + asl times 2 (range 0->38) + + ldx CB.Cache+S.CB.Y1 + adc BASEL,x setup line Base Ptr (cc by asl) + sta ZPBase ZPBase now point to first of... + lda BASEH,x + sta ZPBase+1 ...the 4 columns + + lda MOD7.0,y get MOD + + asl times 4 to compute index in MASK tables + asl + tax set in X for Masks,NMasks + + lda CB.Cache+S.CB.COLOR + + asl times 4 to compute index in PIXELS table + asl + tay + + lda Color.Masks,x bits in 1st byte to light? + beq .10 + and Color.Pixels,y apply color + sta GBYTE + + sta SETPAGE2 + + lda (ZPBase) + and Color.NMasks,x reset existing pixel, + ora GBYTE + sta (ZPBase) + +.10 inx + iny + + lda Color.Masks,x + beq .11 + and Color.Pixels,y apply color + sta GBYTE + + sta CLRPAGE2 + + lda (ZPBase) + and Color.NMasks,x reset existing pixel, + ora GBYTE + sta (ZPBase) + +.11 inc ZPBase + inx + iny + + lda Color.Masks,x + beq .12 + and Color.Pixels,y apply color + sta GBYTE + + sta SETPAGE2 + + lda (ZPBase) + and Color.NMasks,x reset existing pixel, + ora GBYTE + sta (ZPBase) + +.12 inx + iny + + lda Color.Masks,x + beq .13 + and Color.Pixels,y apply color + sta GBYTE + + sta CLRPAGE2 + + lda (ZPBase) + and Color.NMasks,x reset existing pixel, + ora GBYTE + sta (ZPBase) + +.13 sta CLR80STORE rts *-------------------------------------- * FILLRECT @@ -516,16 +719,10 @@ Shifthi.hi .BS 7 *-------------------------------------- CB.Cache .BS S.CB *-------------------------------------- -CX .BS 2 -CY .BS 1 -COL .BS 1 +XDIV7 .BS 1 +XMOD7 .BS 1 GBYTE .BS 1 *-------------------------------------- -SB.StartPage .BS 1 -SB.Page .BS 1 -SB.StartCol .BS 1 -SB.Col .BS 1 -*-------------------------------------- STAT .DA #0 .DA #0,#0,#0 >PSTR "Apple II DHGR" diff --git a/Floppies/A2OSX.BOOT.po b/Floppies/A2OSX.BOOT.po index 1b6deb6f..e9ef645c 100644 Binary files a/Floppies/A2OSX.BOOT.po and b/Floppies/A2OSX.BOOT.po differ diff --git a/Floppies/A2OSX.BUILD.po b/Floppies/A2OSX.BUILD.po index 918848d9..d780b772 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 a262a51e..29187223 100644 Binary files a/Floppies/A2OSX.SRC.po and b/Floppies/A2OSX.SRC.po differ diff --git a/LIB/LIBGFX.S.txt b/LIB/LIBGFX.S.txt index f90b0470..fd940f5c 100644 --- a/LIB/LIBGFX.S.txt +++ b/LIB/LIBGFX.S.txt @@ -120,19 +120,26 @@ DrawLine ldy #S.CB.Y2+1 jmp GoDevGFX 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 - >NOT16 DX swap X1/X2, Y1/Y2, set DX=-DX +* >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 -.2 stz IY + >NOT16 DX swap X1/X2, Y1/Y2, set DX=-DX (DX positive) - sec +.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 - sbc CB.Cache+S.CB.Y1+1 +* 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 ... @@ -144,25 +151,28 @@ DrawLine ldy #S.CB.Y2+1 jmp GoDevGFX DY=0 : HLIN X1,X2 At Y1 .3 >NOT16 DY set DY=-DY - dec IY + lda #$ff + sta IY set IY=-1 .4 ldx #DEVMGR.GFX.SETPIXEL jsr GoDevGFX - sec lda DX + sec sbc DY - sta DXY + tax lda DX+1 - sbc DY+1 - sta DXY+1 +* sbc DY+1 + sbc #0 bmi DrawLine.IncY DY is greater than DX, we will increase on Y axis - ora DXY - bne DrawLine.IncX DY is lower than DX, we will increase on X 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.XY lda DX DX=DY +DrawLine.IncXY lda DX DX=DY eor #$ff sta Counter lda DX+1 @@ -178,23 +188,12 @@ DrawLine.XY lda DX DX=DY bne .3 inc CB.Cache+S.CB.X1+1 -.3 bit IY - bmi .4 - - inc CB.Cache+S.CB.Y1 - bne .5 - inc CB.Cache+S.CB.Y1+1 - bra .5 - -.4 sec - lda CB.Cache+S.CB.Y1 - sbc #1 +.3 lda CB.Cache+S.CB.Y1 Y1=Y1+IY + clc + adc IY sta CB.Cache+S.CB.Y1 - bcs .5 - dec CB.Cache+S.CB.Y1+1 - -.5 ldx #DEVMGR.GFX.SETPIXEL + ldx #DEVMGR.GFX.SETPIXEL jsr GoDevGFX bra .1 @@ -207,7 +206,82 @@ DrawLine.IncY lda DY eor #$ff sta Counter+1 - rts + 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 + + ldx #DEVMGR.GFX.SETPIXEL + jsr GoDevGFX + bra .1 + +.8 rts DrawLine.IncX lda DX eor #$ff @@ -216,7 +290,83 @@ DrawLine.IncX lda DX eor #$ff sta Counter+1 - rts + 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 ldx #DEVMGR.GFX.SETPIXEL + jsr GoDevGFX + bra .1 + +.8 rts *-------------------------------------- GetCB >PULLW ZPCBPtr @@ -235,7 +385,9 @@ hDev .BS 1 DX .BS 2 DY .BS 2 IY .BS 1 -DXY .BS 2 +IE .BS 2 +D .BS 2 +INE .BS 2 Counter .BS 2 *-------------------------------------- CB.Cache .BS S.CB diff --git a/SBIN/DESKTOP.S.txt b/SBIN/DESKTOP.S.txt index ac24632a..f9932ea8 100644 --- a/SBIN/DESKTOP.S.txt +++ b/SBIN/DESKTOP.S.txt @@ -42,6 +42,8 @@ L.MouseData .DA MouseData L.SetPixel.CB .DA SetPixel.CB L.DrawLine1.CB .DA DrawLine1.CB L.DrawLine2.CB .DA DrawLine2.CB +L.DrawLine3.CB .DA DrawLine3.CB +L.DrawLine4.CB .DA DrawLine4.CB .DA 0 *-------------------------------------- CS.INIT >LDYA L.MSG.INIT @@ -225,6 +227,10 @@ Destop.Paint lda #S.CB.MODE.C16 >LIBCALL hLibGFX,LIBGFX.DrawLine >PUSHW L.DrawLine2.CB >LIBCALL hLibGFX,LIBGFX.DrawLine + >PUSHW L.DrawLine3.CB + >LIBCALL hLibGFX,LIBGFX.DrawLine + >PUSHW L.DrawLine4.CB + >LIBCALL hLibGFX,LIBGFX.DrawLine .8 rts *-------------------------------------- @@ -253,21 +259,39 @@ SetPixel.Y .BS 2 *-------------------------------------- DrawLine1.CB .BS 1 hDC DrawLine1.OP .DA #0 -DrawLine1.Mode .DA #S.CB.MODE.MONO +DrawLine1.Mode .DA #S.CB.MODE.C16 DrawLine1.Color .DA #1 -DrawLine1.X1 .DA 200 -DrawLine1.Y1 .DA 0 -DrawLine1.X2 .DA 200+191 -DrawLine1.Y2 .DA 191 +DrawLine1.X1 .DA 80 +DrawLine1.Y1 .DA 191 +DrawLine1.X2 .DA 80+191 +DrawLine1.Y2 .DA 0 *-------------------------------------- DrawLine2.CB .BS 1 hDC DrawLine2.OP .DA #0 -DrawLine2.Mode .DA #S.CB.MODE.C16 +DrawLine2.Mode .DA #S.CB.MODE.MONO DrawLine2.Color .DA #8 -DrawLine2.X1 .DA 220 +DrawLine2.X1 .DA 90 DrawLine2.Y1 .DA 0 -DrawLine2.X2 .DA 220+191 +DrawLine2.X2 .DA 140 DrawLine2.Y2 .DA 191 +*-------------------------------------- +DrawLine3.CB .BS 1 hDC +DrawLine3.OP .DA #0 +DrawLine3.Mode .DA #S.CB.MODE.MONO +DrawLine3.Color .DA #8 +DrawLine3.X1 .DA 100 +DrawLine3.Y1 .DA 0 +DrawLine3.X2 .DA 100+191 +DrawLine3.Y2 .DA 191 +*-------------------------------------- +DrawLine4.CB .BS 1 hDC +DrawLine4.OP .DA #0 +DrawLine4.Mode .DA #S.CB.MODE.MONO +DrawLine4.Color .DA #8 +DrawLine4.X1 .DA 110 +DrawLine4.Y1 .DA 0 +DrawLine4.X2 .DA 559 +DrawLine4.Y2 .DA 191 MAN SAVE /A2OSX.SRC/SBIN/DESKTOP.S ASM