diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po index d6392b26..6738cd30 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 951e1411..b49e0306 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 5ecb3219..f1f617a7 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ diff --git a/BIN/LS.S.txt b/BIN/LS.S.txt index 234b2290..f19bb9ca 100644 --- a/BIN/LS.S.txt +++ b/BIN/LS.S.txt @@ -10,6 +10,7 @@ AUTO 6 *-------------------------------------- .INB /A2OSX.BUILD/INC/MACROS.I .INB /A2OSX.BUILD/INC/A2OSX.I + .INB /A2OSX.BUILD/INC/MLI.ERR.I *-------------------------------------- X.COPY.TO.DEST .EQ 0 X.DELETE.SOURCE .EQ 0 @@ -106,9 +107,10 @@ CS.INIT >SYSCALL GetArgC jsr InitSrcDirYA bcs .9 -.8 lda (pPs) - ora #S.PS.F.EVENT Now accept events - sta (pPs) +.8 +* lda (pPs) +* ora #S.PS.F.EVENT Now accept events +* sta (pPs) clc .9 rts @@ -480,13 +482,13 @@ MSG.FILEEXT >CSTR "%15S %S $%H %a %10u %S %S\r\n" PRODOS.FT.HEX .HS 0406FAFCFDE2FF PRODOS.FT.TXT >PSTR "TXT" >PSTR "BIN" - >PSTR "S-C" + >PSTR "ASM" >PSTR "BAS" >PSTR "VAR" >PSTR "ATK" >PSTR "SYS" PRODOS.FT.DFLT >PSTR "$ " -TIME.NODATE >PSTR " " +TIME.NODATE >PSTR " " TIME.Format >PSTR "%d-%b-%y %H:%M" TIME.Create .BS 20 TIME.Mod .BS 20 diff --git a/BIN/X.CPMVRM.S.txt b/BIN/X.CPMVRM.S.txt index c73842a3..3036e8b8 100644 --- a/BIN/X.CPMVRM.S.txt +++ b/BIN/X.CPMVRM.S.txt @@ -101,7 +101,7 @@ CS.INIT >SYSCALL GetArgC * jsr CS.INIT.Check.Wildcard >LDYA ZPPtr1 - jsr InitSrcDirPatYA + jsr InitSrcDirYA bcc .1 success, scan for any other args .9 rts diff --git a/BIN/X.FILEENUM.S.txt b/BIN/X.FILEENUM.S.txt index d367a905..d2521f24 100644 --- a/BIN/X.FILEENUM.S.txt +++ b/BIN/X.FILEENUM.S.txt @@ -13,11 +13,7 @@ AUTO 6 *-------------------------------------- X.MAX.RECURSE .EQ 8 *-------------------------------------- -InitSrcDirPatYA ldx #$80 - .HS 2C bit abs -InitSrcDirYA ldx #0 - stx .11+1 - >SYSCALL GetFullPathYA +InitSrcDirYA >SYSCALL GetFullPathYA bcc .10 rts @@ -28,33 +24,45 @@ InitSrcDirYA ldx #0 cmp #1 beq .5 we have '/' -.11 lda #$ff Self Modified - bmi .1 Force using pattern - >PUSHW L.STAT >PUSHW ZPPtr1 >SYSCALL Stat - - bcs .1 File/DIR does not exists, go extract pattern + ror + sta .30+1 save file exists for later..... + bmi .1 File/DIR does not exists, go extract pattern lda STAT+S.STAT.P.TYPE cmp #$0f beq .5 TYPE=DIR, do not extract wildcard -.1 lda (ZPPtr1) +.1 lda (ZPPtr1) Get Src Path Len tay + ldx #0 Init Wildcard count + .2 lda (ZPPtr1),y search backward for a / cmp #'/' beq .3 - dey + cmp #'?' Test if some wildcard chars.... + beq .21 + cmp #'*' + bne .22 + +.21 inx inc wildcard count +.22 dey bne .2 .3 tya cmp (ZPPtr1) beq .5 Make sure at least one char - ldx #0 + txa + bne .31 we have wc, go extract.... + +.30 lda #$ff no wc, remember if file exists? + bmi .91 no, file not found.... + +.31 ldx #0 phy save / pos to trunk string later .4 iny @@ -67,8 +75,8 @@ InitSrcDirYA ldx #0 pla get back / pos sta (ZPPtr1) trunk it for Opendir + stx UsrBuf256 set pattern len - stx UsrBuf256 >LDYAI UsrBuf256 >SYSCALL NewPstrYA bcs .9 @@ -84,9 +92,9 @@ InitSrcDirYA ldx #0 txa ldy #hSrcBasePath sta (pData),y - + lda (ZPPtr1) - sta (ZPPtr2) + pha tay .6 lda (ZPPtr1),y @@ -94,18 +102,18 @@ InitSrcDirYA ldx #0 dey bne .6 - lda (ZPPtr2) - tay + ply lda #'/' - cmp (ZPPtr2),y + cmp (ZPPtr1),y beq .7 iny sta (ZPPtr2),y - tya + +.7 tya sta (ZPPtr2) -.7 >LDYA ZPPtr1 + >LDYA ZPPtr2 >SYSCALL OpenDirYA bcs .9 @@ -121,7 +129,8 @@ InitSrcDirYA ldx #0 clc rts - + +.91 lda #MLI.ERR.FNOTFND .9 pha .90 lda #$ff self modified >SYSCALL FreeMemA @@ -132,10 +141,9 @@ InitSrcDirYA.RTS *-------------------------------------- .DO X.COPY.TO.DEST=1 InitDstDirYA >SYSCALL GetFullPathYA - bcc .10 - rts - -.10 stx .90+1 + bcs InitSrcDirYA.RTS + + stx .90+1 >STYA ZPPtr1 >PUSHW L.STAT diff --git a/DRV/DHGR.DRV.S.BLT.txt b/DRV/DHGR.DRV.S.BLT.txt new file mode 100644 index 00000000..f1e9989f --- /dev/null +++ b/DRV/DHGR.DRV.S.BLT.txt @@ -0,0 +1,36 @@ +PR#3 +PREFIX /A2OSX.BUILD +LOMEM $A00 +INC 1 +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 +*-------------------------------------- +BITBLT >STYA ZPBase + ldy #S.CB.DstPtr+1 + +.1 lda (ZPBase),y + sta CB.Cache,y + dey + bpl .1 + + + + clc + rts +*-------------------------------------- +MAN +SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.BLT +LOAD /A2OSX.SRC/DRV/DHGR.DRV.S +ASM diff --git a/DRV/DHGR.DRV.S.LIN.txt b/DRV/DHGR.DRV.S.LIN.txt new file mode 100644 index 00000000..31085058 --- /dev/null +++ b/DRV/DHGR.DRV.S.LIN.txt @@ -0,0 +1,288 @@ +PR#3 +PREFIX /A2OSX.BUILD +LOMEM $A00 +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +* HLINE X1,X2 at Y1 +*-------------------------------------- +HLINE >STYA ZPBase + ldy #S.CB.X2+1 + +.1 lda (ZPBase),y + sta CB.Cache,y + dey + bpl .1 + +HLINE.I lda CB.Cache+S.CB.MODE + bit #S.CB.MODE.C16 + bne HLINE.C16 + +HLINE.MONO lda CB.Cache+S.CB.X2 Count=X2-X1 + sec + sbc CB.Cache+S.CB.X1 + sta ZPCount + tay + + lda CB.Cache+S.CB.X2+1 + sbc CB.Cache+S.CB.X1+1 + sta ZPCount+1 + tax + jsr DIVMOD7YX + + ldy CB.Cache+S.CB.X1 + ldx CB.Cache+S.CB.X1+1 + + jsr DIVMOD7YX A=X1 DIV 7, X=MOD 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 + + + + + + + + + +HLINE.C16 + rts +*-------------------------------------- +HLINE.DIVMOD7 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 +.2 ldy $ffff,x MOD7 : x = X.LO, y = X MOD 7 + sta XMOD7 + rts +*-------------------------------------- +* VLINE Y1,Y2 at X1 +*-------------------------------------- +VLINE >STYA ZPBase + ldy #S.CB.Y2 + +.1 lda (ZPBase),y + sta CB.Cache,y + dey + bpl .1 + + sta SET80STORE + + lda CB.Cache+S.CB.OP + beq VLINE.OP0 + +VLINE.XOR jsr VLINE.DIVMOD7 + + ldy XMOD7 + lda Mono.Masks,y + sta .2+1 + + ldy XCOL7 + + ldx CB.Cache+S.CB.Y1 + +.1 lda BASEL,x + sta ZPBase + lda BASEH,x + sta ZPBase+1 + + lda (ZPBase),y XOR +.2 eor #$ff + sta (ZPBase),y + + inx + cpx CB.Cache+S.CB.Y2 + bcc .1 + beq .1 + + sta CLR80STORE + rts + +VLINE.OP0 lda CB.Cache+S.CB.MODE + dec + bne VLINE.C16 + +VLINE.MONO jsr VLINE.DIVMOD7 + + ldy XMOD7 + lda Mono.NMasks,y includes And $7F for mono + sta .3+1 + + lda CB.Cache+S.CB.COLOR get color + beq .1 + lda Mono.Masks,y +.1 sta .4+1 + + ldy XCOL7 + + ldx CB.Cache+S.CB.Y1 + +.2 lda BASEL,x + sta ZPBase + lda BASEH,x + sta ZPBase+1 + + lda (ZPBase),y +.3 and #$ff +.4 ora #$ff + sta (ZPBase),y + + inx + cpx CB.Cache+S.CB.Y2 + bcc .2 + beq .2 + + 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 +*-------------------------------------- +VLINE.DIVMOD7 ldx CB.Cache+S.CB.X1+1 Get X HI byte.... + + lda DIV7.lo,x + sta .2+1 + lda DIV7.hi,x + sta .2+2 + + lda MOD7.lo,x + sta .3+1 + lda MOD7.hi,x + sta .3+2 + + lda DIV7.BASE,x + ldx CB.Cache+S.CB.X1 Get X LO byte.... + + clc + +.2 adc $ffff,x DIV7 : x = X.LO, a = X DIV 7 + sta XDIV7 save X DIV 7 + + tay + lsr + sta XCOL7 + ldx COL.BANK,y + sta $C000,x + +.3 lda $ffff,x MOD7 : x = X.LO, y = X MOD 7 + sta XMOD7 + rts + +*-------------------------------------- +MAN +SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.LIN +LOAD /A2OSX.SRC/DRV/DHGR.DRV.S +ASM diff --git a/DRV/DHGR.DRV.S.PIX.txt b/DRV/DHGR.DRV.S.PIX.txt new file mode 100644 index 00000000..3d13b191 --- /dev/null +++ b/DRV/DHGR.DRV.S.PIX.txt @@ -0,0 +1,183 @@ +PR#3 +PREFIX /A2OSX.BUILD +LOMEM $A00 +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +* SETPIXEL +* In : YA = Ptr to CtrlBlk : +* 1 : OP (XOR only) +* 2 : Mode +* 3 : Color +* 4 : SrcX1 +* 6 : SrcY1 +*-------------------------------------- +SETPIXEL >STYA ZPBase + ldy #S.CB.Y1 Skip S.CB.Y1+1.....always 0 +.1 lda (ZPBase),y + sta CB.Cache,y + dey + bpl .1 + + sta SET80STORE + + lda CB.Cache+S.CB.MODE + bit #S.CB.MODE.C16 + bne SETPIXEL.C16 + +SETPIXEL.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 + + 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 + + lda CB.Cache+S.CB.OP + beq .5 + + lda (ZPBase) XOR + eor Mono.Masks,y y = mod 7 + sta (ZPBase) + + sta CLR80STORE + rts + +.5 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 + +SETPIXEL.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 +*-------------------------------------- +* GETPIXEL +*-------------------------------------- +GETPIXEL rts +*-------------------------------------- +MAN +SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.PIX +LOAD /A2OSX.SRC/DRV/DHGR.DRV.S +ASM diff --git a/DRV/DHGR.DRV.S.txt b/DRV/DHGR.DRV.S.txt index 24de7c09..b43bf98a 100644 --- a/DRV/DHGR.DRV.S.txt +++ b/DRV/DHGR.DRV.S.txt @@ -10,13 +10,13 @@ AUTO 6 *-------------------------------------- .INB /A2OSX.BUILD/INC/MACROS.I .INB /A2OSX.BUILD/INC/A2OSX.I -* .INB /A2OSX.BUILD/INC/MLI.ERR.I .INB /A2OSX.BUILD/INC/IO.I .INB /A2OSX.BUILD/INC/LIBGFX.I *-------------------------------------- ZPBase .EQ ZPDRV ZPCount .EQ ZPDRV+2 - +ZPCountCol .EQ ZPDRV+4 +ZPCountMod .EQ ZPDRV+5 *-------------------------------------- * File Header (16 Bytes) @@ -238,442 +238,9 @@ CONTROL sta CLRTEXT CLOSE clc rts *-------------------------------------- -* SETPIXEL -* In : YA = Ptr to CtrlBlk : -* 1 : OP (XOR only) -* 2 : Mode -* 3 : Color -* 4 : SrcX1 -* 6 : SrcY1 -*-------------------------------------- -SETPIXEL >STYA ZPBase - ldy #S.CB.Y1 Skip S.CB.Y1+1.....always 0 -.1 lda (ZPBase),y - sta CB.Cache,y - dey - bpl .1 - - sta SET80STORE - - lda CB.Cache+S.CB.MODE - bit #S.CB.MODE.C16 - bne SETPIXEL.C16 - -SETPIXEL.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 - - 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 - - lda CB.Cache+S.CB.OP - beq .5 - - lda (ZPBase) XOR - eor Mono.Masks,y y = mod 7 - sta (ZPBase) - - sta CLR80STORE - rts - -.5 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 - -SETPIXEL.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 -*-------------------------------------- -* GETPIXEL -*-------------------------------------- -GETPIXEL rts -*-------------------------------------- -* HLINE X1,X2 at Y1 -*-------------------------------------- -HLINE >STYA ZPBase - ldy #S.CB.X2+1 - -.1 lda (ZPBase),y - sta CB.Cache,y - dey - bpl .1 - -HLINE.I lda CB.Cache+S.CB.MODE - bit #S.CB.MODE.C16 - bne HLINE.C16 - -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 -*-------------------------------------- -* VLINE Y1,Y2 at X1 -*-------------------------------------- -VLINE >STYA ZPBase - ldy #S.CB.Y2 - -.1 lda (ZPBase),y - sta CB.Cache,y - dey - bpl .1 - - sta SET80STORE - - lda CB.Cache+S.CB.OP - beq VLINE.OP0 - -VLINE.XOR jsr VLINE.DIVMOD7 - - ldy XMOD7 - lda Mono.Masks,y - sta .2+1 - - ldy XCOL7 - - ldx CB.Cache+S.CB.Y1 - -.1 lda BASEL,x - sta ZPBase - lda BASEH,x - sta ZPBase+1 - - lda (ZPBase),y XOR -.2 eor #$ff - sta (ZPBase),y - - inx - cpx CB.Cache+S.CB.Y2 - bcc .1 - beq .1 - - sta CLR80STORE - rts - -VLINE.OP0 lda CB.Cache+S.CB.MODE - dec - bne VLINE.C16 - -VLINE.MONO jsr VLINE.DIVMOD7 - - ldy XMOD7 - lda Mono.NMasks,y includes And $7F for mono - sta .3+1 - - lda CB.Cache+S.CB.COLOR get color - beq .1 - lda Mono.Masks,y -.1 sta .4+1 - - ldy XCOL7 - - ldx CB.Cache+S.CB.Y1 - -.2 lda BASEL,x - sta ZPBase - lda BASEH,x - sta ZPBase+1 - - lda (ZPBase),y -.3 and #$ff -.4 ora #$ff - sta (ZPBase),y - - inx - cpx CB.Cache+S.CB.Y2 - bcc .2 - beq .2 - - 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 - -VLINE.DIVMOD7 ldx CB.Cache+S.CB.X1+1 Get X Hi byte.... - - lda DIV7.lo,x - sta .2+1 - lda DIV7.hi,x - sta .2+2 - - lda MOD7.lo,x - sta .3+1 - lda MOD7.hi,x - sta .3+2 - - lda DIV7.BASE,x - ldx CB.Cache+S.CB.X1 - - clc - -.2 adc $ffff,x DIV7 : x = X.LO, a = X DIV 7 -* sta XDIV7 save X DIV 7 - - tay - lsr - sta XCOL7 - ldx COL.BANK,y - sta $C000,x - -.3 lda $ffff,x MOD7 : x = X.LO, y = X MOD 7 - sta XMOD7 - rts + .INB /A2OSX.SRC/DRV/DHGR.DRV.S.PIX + .INB /A2OSX.SRC/DRV/DHGR.DRV.S.LIN + .INB /A2OSX.SRC/DRV/DHGR.DRV.S.BLT *-------------------------------------- * FILLRECT * 2 : Mode @@ -701,29 +268,6 @@ FILLRECT >STYA ZPBase bra .2 .8 rts *-------------------------------------- -* BitBlt -* In : YA = Ptr to CtrlBlk : -* 1 : OP -* 4 : SrcX1 -* 6 : SrcY1 -* 8 : SrcX2 -* 10 : SrcY2 -* 12 : DestX -* 14 : DestY -* 16 : SrcPtr -* 18 : DstPtr -*-------------------------------------- -BITBLT >STYA ZPBase - ldy #S.CB.DstPtr+1 - -.1 lda (ZPBase),y - sta CB.Cache,y - dey - bpl .1 - - clc - rts -*-------------------------------------- * IN: * Y = LO * X = HI