diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index b322ec97..6afdf20b 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 7d2970b3..7d7b86f3 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 f1e9989f..a225f5ec 100644 --- a/DRV/DHGR.DRV.S.BLT.txt +++ b/DRV/DHGR.DRV.S.BLT.txt @@ -17,20 +17,11 @@ AUTO 6 * 16 : SrcPtr * 18 : DstPtr *-------------------------------------- -BITBLT >STYA ZPBase - ldy #S.CB.DstPtr+1 - -.1 lda (ZPBase),y - sta CB.Cache,y - dey - bpl .1 - - - +BITBLT clc rts *-------------------------------------- MAN -SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.BLT +SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.RECT LOAD /A2OSX.SRC/DRV/DHGR.DRV.S ASM diff --git a/DRV/DHGR.DRV.S.LIN.txt b/DRV/DHGR.DRV.S.LINE.txt similarity index 69% rename from DRV/DHGR.DRV.S.LIN.txt rename to DRV/DHGR.DRV.S.LINE.txt index 31085058..02da0e8d 100644 --- a/DRV/DHGR.DRV.S.LIN.txt +++ b/DRV/DHGR.DRV.S.LINE.txt @@ -7,95 +7,59 @@ AUTO 6 *-------------------------------------- * HLINE X1,X2 at Y1 *-------------------------------------- -HLINE >STYA ZPBase - ldy #S.CB.X2+1 +HLINE lda CB.Cache+S.CB.MODE -.1 lda (ZPBase),y - sta CB.Cache,y - dey - bpl .1 + cmp #S.CB.MODE.MONO + bne HLINE.C16 + +HLINE.MONO >LDYA CB.Cache+S.CB.X1 + jsr LBUF.SetBounds1YA -HLINE.I lda CB.Cache+S.CB.MODE + >LDYA CB.Cache+S.CB.X2 + jsr LBUF.SetBounds2YA + + 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.COLOR + beq .1 - lda CB.Cache+S.CB.X2+1 - sbc CB.Cache+S.CB.X1+1 - sta ZPCount+1 - tax - jsr DIVMOD7YX + lda #%01111111 - ldy CB.Cache+S.CB.X1 - ldx CB.Cache+S.CB.X1+1 - - jsr DIVMOD7YX A=X1 DIV 7, X=MOD 7 +.1 ldy LBUF.C1 - - pha save X DIV 7 - lsr +.2 pha + and LBUF.AND,y + sta LBUF.ORA,y + pla + iny + cpy LBUF.C2 + bcs .2 + 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 + jmp LBUF.DrawAtY + +HLINE.C16 lda CB.Cache+S.CB.X1 + and #%11111100 tay - sta $c000,y + lda CB.Cache+S.CB.X1+1 + + jsr LBUF.SetBounds1YA + lda CB.Cache+S.CB.X2 + and #%11111100 + tay + lda CB.Cache+S.CB.X2+1 + + jsr LBUF.SetBounds2YA - - - - - - - -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 +VLINE lda CB.Cache+S.CB.OP beq VLINE.OP0 VLINE.XOR jsr VLINE.DIVMOD7 @@ -122,7 +86,6 @@ VLINE.XOR jsr VLINE.DIVMOD7 bcc .1 beq .1 - sta CLR80STORE rts VLINE.OP0 lda CB.Cache+S.CB.MODE @@ -159,7 +122,6 @@ VLINE.MONO jsr VLINE.DIVMOD7 bcc .2 beq .2 - sta CLR80STORE rts VLINE.C16 lda CB.Cache+S.CB.X1 @@ -248,8 +210,7 @@ VLINE.C16 lda CB.Cache+S.CB.X1 ora GBYTE sta (ZPBase) -.13 sta CLR80STORE - rts +.13 rts *-------------------------------------- VLINE.DIVMOD7 ldx CB.Cache+S.CB.X1+1 Get X HI byte.... @@ -283,6 +244,6 @@ VLINE.DIVMOD7 ldx CB.Cache+S.CB.X1+1 Get X HI byte.... *-------------------------------------- MAN -SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.LIN +SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.LINE LOAD /A2OSX.SRC/DRV/DHGR.DRV.S ASM diff --git a/DRV/DHGR.DRV.S.PIX.txt b/DRV/DHGR.DRV.S.PIX.txt index 3d13b191..706af679 100644 --- a/DRV/DHGR.DRV.S.PIX.txt +++ b/DRV/DHGR.DRV.S.PIX.txt @@ -13,16 +13,7 @@ AUTO 6 * 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 +SETPIXEL lda CB.Cache+S.CB.MODE bit #S.CB.MODE.C16 bne SETPIXEL.C16 @@ -66,7 +57,6 @@ SETPIXEL.MONO ldx CB.Cache+S.CB.X1+1 Get X Hi byte.... eor Mono.Masks,y y = mod 7 sta (ZPBase) - sta CLR80STORE rts .5 lda (ZPBase) @@ -75,13 +65,11 @@ SETPIXEL.MONO ldx CB.Cache+S.CB.X1+1 Get X Hi byte.... 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 @@ -170,8 +158,7 @@ SETPIXEL.C16 lda CB.Cache+S.CB.X1 ora GBYTE sta (ZPBase) -.13 sta CLR80STORE - rts +.13 rts *-------------------------------------- * GETPIXEL *-------------------------------------- diff --git a/DRV/DHGR.DRV.S.RECT.txt b/DRV/DHGR.DRV.S.RECT.txt new file mode 100644 index 00000000..c3f2143a --- /dev/null +++ b/DRV/DHGR.DRV.S.RECT.txt @@ -0,0 +1,30 @@ +PR#3 +PREFIX /A2OSX.BUILD +LOMEM $A00 +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +* FILLRECT +* 2 : Mode +* 3 : Color +* 4 : SrcX1 +* 6 : SrcY1 +* 8 : SrcX2 +* 10 : SrcY2 +*-------------------------------------- +FILLRECT +.2 jsr HLINE + + lda CB.Cache+S.CB.Y1 + cmp CB.Cache+S.CB.Y2 + beq .8 + + inc CB.Cache+S.CB.Y1 + bra .2 +.8 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.txt b/DRV/DHGR.DRV.S.txt index ec1f51b7..b1fe0648 100644 --- a/DRV/DHGR.DRV.S.txt +++ b/DRV/DHGR.DRV.S.txt @@ -11,12 +11,14 @@ AUTO 6 .INB /A2OSX.BUILD/INC/MACROS.I .INB /A2OSX.BUILD/INC/A2OSX.I .INB /A2OSX.BUILD/INC/IO.I - .INB /A2OSX.BUILD/INC/LIBGFX.I + .INB /A2OSX.BUILD/INC/LIBGUI.I *-------------------------------------- -ZPBase .EQ ZPDRV -ZPCount .EQ ZPDRV+2 -ZPCountCol .EQ ZPDRV+4 -ZPCountMod .EQ ZPDRV+5 +ZPCmdPtr .EQ ZPDRV +ZPBase .EQ ZPDRV+2 + + +ZPCount .EQ ZPDRV+4 + *-------------------------------------- * File Header (16 Bytes) @@ -39,90 +41,9 @@ L.MSG.DETECT .DA MSG.DETECT Dev.Detect >LDYA L.MSG.DETECT >SYSCALL PrintF.YA - ldx #0 -.1 txa - stz Shift0.hi,x - asl - rol Shift0.hi,x - lsr - sta Shift0.lo,x - inx - bpl .1 - - ldx #0 -.2 lda Shift0.hi,x - sta Shift1.hi,x - lda Shift0.lo,x - asl - asl - rol Shift1.hi,x - lsr - sta Shift1.lo,x - inx - bpl .2 - - ldx #0 -.3 lda Shift1.hi,x - sta Shift2.hi,x - lda Shift1.lo,x - asl - asl - rol Shift2.hi,x - lsr - sta Shift2.lo,x - inx - bpl .3 - - ldx #0 -.4 lda Shift2.hi,x - sta Shift3.hi,x - lda Shift2.lo,x - asl - asl - rol Shift3.hi,x - lsr - sta Shift3.lo,x - inx - bpl .4 - - ldx #0 -.5 lda Shift3.hi,x - sta Shift4.hi,x - lda Shift3.lo,x - asl - asl - rol Shift4.hi,x - lsr - sta Shift4.lo,x - inx - bpl .5 - - ldx #0 -.6 lda Shift4.hi,x - sta Shift5.hi,x - lda Shift4.lo,x - asl - asl - rol Shift5.hi,x - lsr - sta Shift5.lo,x - inx - bpl .6 - - ldx #0 -.7 lda Shift5.hi,x - sta Shift6.hi,x - lda Shift5.lo,x - asl - asl - rol Shift6.hi,x - lsr - sta Shift6.lo,x - inx - bpl .7 - clc rts +*-------------------------------------- CS.END MSG.DETECT >CSTR "Apple IIe/IIc DHGR Driver.\r\n" *-------------------------------------- @@ -132,7 +53,7 @@ DEV.HEADER cld jmp (DRV.CS.START,x) .DA #0 .BS 6 -DEV.HEADER.NAME >PSTR "GFX" +DEV.HEADER.NAME >CSTR "GFX" .BS 1 *-------------------------------------- * Driver Code @@ -146,31 +67,26 @@ DRV.CS.START .DA STATUS .DA OPEN .DA CLOSE .DA A2osX.BADCALL - .DA A2osX.BADCALL + .DA WRITE .DA A2osX.BADCALL *-------------------------------------- - .DA SETPIXEL +J.Cmds .DA SETPIXEL .DA GETPIXEL .DA HLINE .DA VLINE .DA FILLRECT .DA BITBLT *-------------------------------------- -L.STAT .DA STAT +L.DSTAT .DA DSTAT L.DIV7.0 .DA DIV7.0 .DA DIV7.256 .DA DIV7.512 L.MOD7.0 .DA MOD7.0 .DA MOD7.256 .DA MOD7.512 -L.Shift0.Lo .DA Shift0.lo -L.Shift0.Hi .DA Shift0.hi -L.DIVMOD7Y0 .DA DIVMOD7Y0 - .DA DIVMOD7Y1 - .DA DIVMOD7Y2 .DA 0 end or relocation *-------------------------------------- -STATUS >LDYA L.STAT +STATUS >LDYA L.DSTAT clc rts *-------------------------------------- @@ -196,20 +112,6 @@ OPEN sta A2osX.SCRNDEVS+2 DEV.ID in A cpx #3 bne .1 - ldx #7 - lda L.Shift0.Lo+1 -.10 sta Shiftlo.hi,x - inc - dex - bne .10 - - ldx #7 - lda L.Shift0.hi+1 -.11 sta Shifthi.hi,x - inc - dex - bne .11 - .8 clc rts *-------------------------------------- @@ -238,44 +140,109 @@ CONTROL sta CLRTEXT CLOSE clc 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 -* 3 : Color -* 4 : SrcX1 -* 6 : SrcY1 -* 8 : SrcX2 -* 10 : SrcY2 -*-------------------------------------- -FILLRECT >STYA ZPBase - ldy #S.CB.Y2 +WRITE >STYA ZPCmdPtr -.1 lda (ZPBase),y + sta SET80STORE + + lda (ZPCmdPtr) + +.1 tax + ldy CB.CmdLen,x + +.2 lda (ZPBase),y sta CB.Cache,y dey - bpl .1 - -.2 jsr HLINE.I - - lda CB.Cache+S.CB.Y1 - cmp CB.Cache+S.CB.Y2 - beq .8 + bpl .2 - inc CB.Cache+S.CB.Y1 - bra .2 + lda CB.CmdLen,x + clc + adc ZPCmdPtr + sta ZPCmdPtr + bcc .3 + inc ZPCmdPtr+1 + +.3 jsr .10 + + lda (ZPCmdPtr) + bne .1 + + sta CLR80STORE + +.8 clc + 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 Mono.Head,x + sta LBUF.AND,y + rts +*-------------------------------------- +LBUF.SetBounds2YA + jsr DIVMOD7YA + + cmp LBUF.C1 A=DIV, X=MOD + beq .2 + + sta LBUF.C2 + tay + lda Mono.Tail,x + sta LBUF.AND,y + + lda #0 + +.1 dey + cpy LBUF.C1 + beq .8 + sta LBUF.AND,y + bra .1 + +.2 and LBUF.C1 + sta LBUF.C2 + tay + lda Mono.Tail,x + sta LBUF.AND,y .8 rts *-------------------------------------- +LBUF.DrawAtY lda BASEL,y setup line Base Ptr + sta ZPBase + lda BASEH,y + sta ZPBase+1 + + ldy LBUF.C1 y C1->C2 + +.1 ldx COL.BANK,y + sta $C000,x + + lda (ZPBase),y + and LBUF.AND,y + ora LBUF.ORA,y + sta (ZPBase),y + + iny + cpy LBUF.C2 + bcs .1 + + rts +*-------------------------------------- * IN: * Y = LO -* X = HI +* A = HI * OUT: * A = DIV * X = MOD *-------------------------------------- -DIVMOD7YX jmp (L.DIVMOD7Y0,x) +DIVMOD7YA dec + bne DIVMOD7Y2 + beq DIVMOD7Y1 DIVMOD7Y0 lda DIV7.0,y ldx MOD7.0,y @@ -294,39 +261,34 @@ DIVMOD7Y2 lda DIV7.512,y rts *-------------------------------------- DRV.CS.END -*-------------------------------------- -Shift0.lo .BS 128 -Shift0.hi .BS 128 -Shift1.lo .BS 128 -Shift1.hi .BS 128 -Shift2.lo .BS 128 -Shift2.hi .BS 128 -Shift3.lo .BS 128 -Shift3.hi .BS 128 -Shift4.lo .BS 128 -Shift4.hi .BS 128 -Shift5.lo .BS 128 -Shift5.hi .BS 128 -Shift6.lo .BS 128 -Shift6.hi .BS 128 *-------------------------------------- .INB /A2OSX.SRC/DRV/DHGR.DRV.T *-------------------------------------- +CB.CmdLen .DA S.CB.Y1+1 SETPIXEL + .DA S.CB.Y1+1 GETPIXEL + .DA S.CB.X2+1 HLINE + .DA S.CB.X2+1 VLINE + .DA S.CB.Y2+1 FILLRECT + .DA S.CB.DstPtr+1 BITBLT +*-------------------------------------- +CB.Cache .BS S.CB +*-------------------------------------- DIV7.lo .BS 3 DIV7.hi .BS 3 MOD7.lo .BS 3 MOD7.hi .BS 3 -Shiftlo.hi .BS 7 -Shifthi.hi .BS 7 *-------------------------------------- -CB.Cache .BS S.CB +LBUF.C1 .BS 1 +LBUF.C2 .BS 1 +LBUF.ORA .BS 80 +LBUF.AND .BS 80 *-------------------------------------- XDIV7 .BS 1 XMOD7 .BS 1 XCOL7 .BS 1 GBYTE .BS 1 *-------------------------------------- -STAT .DA #0 +DSTAT .DA #0 .DA #0,#0,#0 >PSTR "Apple II DHGR" .BS 3 @@ -338,9 +300,6 @@ DEVSTAT.MODES .DA #S.CB.MODE.MONO+S.CB.MODE.C16 DEVSTAT.W .DA 560 X.SIZE DEVSTAT.H .DA 192 Y.SIZE *-------------------------------------- -DRV.SIZE .EQ *-DRV.CS.START -*-------------------------------------- - .LIST OFF MAN SAVE /A2OSX.SRC/DRV/DHGR.DRV.S ASM diff --git a/DRV/DHGR.DRV.T.txt b/DRV/DHGR.DRV.T.txt index 48596bb1..383c70a4 100644 --- a/DRV/DHGR.DRV.T.txt +++ b/DRV/DHGR.DRV.T.txt @@ -21,21 +21,21 @@ Mono.Masks .DA #%00000001 .DA #%00100000 .DA #%01000000 *-------------------------------------- -Mono.Head .DA #%01111111 - .DA #%01111110 - .DA #%01111100 - .DA #%01111000 - .DA #%01110000 - .DA #%01100000 - .DA #%01000000 +Mono.Head .DA #%10000000 + .DA #%10000001 + .DA #%10000011 + .DA #%10000111 + .DA #%10001111 + .DA #%10011111 + .DA #%10111111 *-------------------------------------- -Mono.Tail .DA #%00000001 - .DA #%00000011 - .DA #%00000111 - .DA #%00001111 - .DA #%00011111 - .DA #%00111111 - .DA #%01111111 +Mono.Tail .DA #%11111110 + .DA #%11111100 + .DA #%11111000 + .DA #%11110000 + .DA #%11100000 + .DA #%11000000 + .DA #%10000000 *-------------------------------------- * bits to "and" to reset color of pixel (0 means nothing to do) * 4 bytes * 7 mods diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 698ce781..8316e185 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -313,15 +313,6 @@ DEVMGR.READ .EQ 16 DEVMGR.WRITE .EQ 18 DEVMGR.IRQ .EQ 20 *-------------------------------------- -* 'GFX' Class Driver Functions -*-------------------------------------- -DEVMGR.GFX.SETPIXEL .EQ 22 -DEVMGR.GFX.GETPIXEL .EQ 24 -DEVMGR.GFX.HLINE .EQ 26 -DEVMGR.GFX.VLINE .EQ 28 -DEVMGR.GFX.FILLRECT .EQ 30 -DEVMGR.GFX.BITBLT .EQ 32 -*-------------------------------------- S.DSTAT.S .EQ 0 S.DSTAT.S.BLOCK .EQ %10000000 S.DSTAT.S.WRITE .EQ %01000000 diff --git a/INC/LIBGFX.I.txt b/INC/LIBGUI.I.txt similarity index 94% rename from INC/LIBGFX.I.txt rename to INC/LIBGUI.I.txt index 2882ec52..44b29702 100644 --- a/INC/LIBGFX.I.txt +++ b/INC/LIBGUI.I.txt @@ -67,4 +67,4 @@ LIBGFX.ShowCursor .EQ 14 LIBGFX.DrawLine .EQ 16 *-------------------------------------- MAN -SAVE /A2OSX.BUILD/INC/LIBGFX.I +SAVE /A2OSX.BUILD/INC/LIBGUI.I diff --git a/LIB/LIBGFX.S.txt b/LIB/LIBGUI.S.txt similarity index 94% rename from LIB/LIBGFX.S.txt rename to LIB/LIBGUI.S.txt index 09414333..c4dba9b7 100644 --- a/LIB/LIBGFX.S.txt +++ b/LIB/LIBGUI.S.txt @@ -434,5 +434,5 @@ PAT.Arrow .DA #S.BM.F.BBP1 .DA 0 *-------------------------------------- MAN -SAVE /A2OSX.SRC/LIB/LIBGFX.S +SAVE /A2OSX.SRC/LIB/LIBGUI.S ASM diff --git a/SBIN/DESKTOP.S.txt b/SBIN/GUI.S.txt similarity index 92% rename from SBIN/DESKTOP.S.txt rename to SBIN/GUI.S.txt index be667ffe..d9532aa9 100644 --- a/SBIN/DESKTOP.S.txt +++ b/SBIN/GUI.S.txt @@ -6,12 +6,12 @@ AUTO 6 .LIST OFF .OP 65C02 .OR $2000 - .TF /A2OSX.BUILD/SBIN/DESKTOP + .TF /A2OSX.BUILD/SBIN/GUI *-------------------------------------- .INB /A2OSX.BUILD/INC/IO.I .INB /A2OSX.BUILD/INC/MACROS.I .INB /A2OSX.BUILD/INC/A2OSX.I - .INB /A2OSX.BUILD/INC/LIBGFX.I + .INB /A2OSX.BUILD/INC/LIBGUI.I *-------------------------------------- ZPPtr1 .EQ ZPBIN *-------------------------------------- @@ -249,7 +249,7 @@ GoDevMouse jmp $ffff CS.END DEVNAME.GFX >PSTR "GFX" DEVNAME.MOUSE >PSTR "MOU1" -LIBGFX >PSTR "libgfx.o" +LIBGFX >PSTR "libgui.o" MSG.INIT >CSTR "DESKTOP:Init...\r\n" hLibGFX .BS 1 hDevGFX .BS 1 @@ -318,5 +318,5 @@ DrawLine6.CB .BS 1 hDC .DA 84 .DA 191 MAN -SAVE /A2OSX.SRC/SBIN/DESKTOP.S +SAVE /A2OSX.SRC/SBIN/GUI.S ASM diff --git a/SBIN/SHELL.C.CSH.txt b/SBIN/SHELL.C.CSH.txt index 3c8d1353..cfdeac07 100644 --- a/SBIN/SHELL.C.CSH.txt +++ b/SBIN/SHELL.C.CSH.txt @@ -85,8 +85,8 @@ CSH.TSIZE .HS 0001020401020405 00,CHAR,INT,LONG,UCHAR,UINT,ULONG,FLOAT.... * int printf ( const char * format, ... ); CSH.FN >PSTR "printf" .DA #CSH.T.INT returned value - .DA #CSH.Q.CONST+CSH.T.CHAR - .DA #CSH.Q.POINTER + .DA #CSH.Q.CONST+CSH.Q.POINTER1 + .DA #CSH.T.CHAR .DA #CSH.T.VARIADIC .DA #0 * float cos ( float x ); diff --git a/SBIN/SHELL.S.CSH.txt b/SBIN/SHELL.S.CSH.txt index ae68db44..7876a7c8 100644 --- a/SBIN/SHELL.S.CSH.txt +++ b/SBIN/SHELL.S.CSH.txt @@ -13,10 +13,11 @@ CSH.E.DUP .EQ $7B CSH.E.UNDEF .EQ $7A CSH.E.TMISMATCH .EQ $79 -CSH.Q.POINTER .EQ %10000000 -CSH.Q.CONST .EQ %01000000 -CSH.Q.ARRAY .EQ %11000000 - +CSH.Q.CONST .EQ %11000000 +CSH.Q.ARRAY .EQ %10001100 max 3 bounds +CSH.Q.POINTER1 .EQ %10000001 max 3 depth +CSH.Q.POINTER2 .EQ %10000010 +CSH.Q.POINTER3 .EQ %10000011 CSH.T.CHAR .EQ 1 CSH.T.INT .EQ 2 CSH.T.LONG .EQ 3 @@ -224,7 +225,7 @@ CSH.IF jsr CSH.GetCharNB jsr CSH.GetNextCharNB Skip '{' bcs .99 - >LDA.G CSH.CmdSave Push "IF" or "WHILE" + >LDA.G CSH.CmdSave get back Token ("IF" or "WHILE") tax jsr CSH.Keyword.start bcs .99 @@ -263,7 +264,7 @@ CSH.IF jsr CSH.GetCharNB CSH.Keyword.Start jmp (J.CSH.KW.START,x) *-------------------------------------- -CSH.IF.START jmp CSH.Push +CSH.IF.START jmp CSH.Push Push "IF" Token *-------------------------------------- CSH.WHILE.START pha >LDA.G CSH.BufPtrSave+1 WHILE : push loop address... @@ -271,7 +272,7 @@ CSH.WHILE.START pha >LDA.G CSH.BufPtrSave jsr CSH.Push pla - jmp CSH.Push + jmp CSH.Push Push "WHILE" Token *-------------------------------------- CSH.IF.END jsr CSH.GetNextChar just skip ending '}' clc @@ -339,7 +340,6 @@ CSH.CHAR lda #CSH.T.CHAR CSH.UCHAR lda #CSH.T.CHAR bra CSH.TYPE CSH.INT lda #CSH.T.INT - >DEBUG bra CSH.TYPE CSH.UINT lda #CSH.T.INT bra CSH.TYPE @@ -403,6 +403,75 @@ CSH.TYPE >STA.G CSH.ACCT sec .99 rts *-------------------------------------- +CSH.FnEval jsr CSH.GetCharNB + + bcs .9 + cmp #'(' + bne .9 + + lda (ZPPtr1) Get Return value Type + >CMP.G CSH.ACCT Match with ACC ? + bne .99 + + jsr CSH.PushACCT Save Acc & T on stack + + +.1 inc ZPPtr1 advance to arg list type + bne .2 + inc ZPPtr1+1 + +.2 lda (ZPPtr1) + beq .7 end of list, go check no more + + jsr CSH.ExpEval + bcs .90 + + lda (ZPPtr1) + cmp #CSH.T.VARIADIC + beq .3 + + >CMP.G CSH.ACCT Match with ACC ? + bne .99 + +.3 + + + lda (ZPPtr1) + cmp #CSH.T.VARIADIC + bne .5 + +.4 jsr CSH.GetNextCharNB + cmp #',' + bne .7 + jsr CSH.GetNextCharNB + bra .2 + +.5 inc ZPPtr1 advance to next arg + beq .7 + inc ZPPtr1+1 + lda (ZPPtr1) + bne .4 + +.7 jsr CSH.GetNextCharNB + bcs .9 + cmp #')' + bne .9 + + * TO DO : Execute + + jsr CSH.GetNextCharNB Skip ) + + clc + rts + +.9 lda #CSH.E.SYNTAX + sec +.90 rts + +.99 lda #CSH.E.TMISMATCH + sec + rts +*-------------------------------------- CSH.ExpEval jsr CSH.ZeroACC dec A=0 >STA.G CSH.EXPBOP1 @@ -488,36 +557,6 @@ CSH.ExpEval jsr CSH.ZeroACC .80 clc rts *-------------------------------------- -CSH.FnEval jsr CSH.GetCharNB - - bcs .9 - cmp #'(' - bne .9 - - lda (ZPPtr1) - >CMP.G CSH.ACCT - bne .99 - - -* TODO : eval params - - -.7 jsr CSH.GetNextCharNB - bcs .9 - cmp #')' - bne .9 - - clc - rts - -.9 lda #CSH.E.SYNTAX - sec - rts - -.99 lda #CSH.E.TMISMATCH - sec - rts -*-------------------------------------- CSH.SavePtr >LDYA ZPCSHBufPtr >STYA.G CSH.BufPtrSave rts @@ -897,7 +936,25 @@ CSH.BOPS.SUB >LDA.G CSH.ACCT rts CSH.BOPS.MUL -CSH.BOPS.DIV + clc + rts + +CSH.BOPS.DIV >LDA.G CSH.ACCT + cmp #CSH.T.FLOAT + beq .8 + + + + + clc + rts + +.8 >PUSHEA.G CSH.ACC + >PUSHEA.G CSH.ARG + >LEA.G CSH.ACC + >SYSCALL FDIV + + rts CSH.BOPS.MOD CSH.BOPS.SHL CSH.BOPS.SHR @@ -919,6 +976,9 @@ CSH.BOPS.LOR *-------------------------------------- * Stack *-------------------------------------- +CSH.PushACCT + + CSH.Push pha >LDA.G CSH.StackPtr inc diff --git a/SBIN/SHELL.S.txt b/SBIN/SHELL.S.txt index 6bb0a772..70833cea 100644 --- a/SBIN/SHELL.S.txt +++ b/SBIN/SHELL.S.txt @@ -35,7 +35,7 @@ CS.START cld .DA CS.END-CS.START CS .DA DS.END-DS.START DS .DA #64 SS - .DA #16 ZP + .DA #0 ZP (256) .DA 0 *-------------------------------------- * Relocation Table @@ -94,6 +94,7 @@ J.CSH.BOPS .DA CSH.BOPS.ADD .DA CSH.BOPS.LOR L.CSH.FN .DA CSH.FN L.CSH.KW .DA CSH.KW +L.CSH.STYPES .DA CSH.STYPES J.CSH.KW .DA CSH.IF .DA CSH.WHILE .DA CSH.ELSE @@ -106,7 +107,6 @@ J.CSH.KW .DA CSH.IF .DA CSH.FLOAT .DA CSH.SIGNED .DA CSH.UNSIGNED -L.CSH.STYPES .DA CSH.STYPES J.CSH.STYPES .DA CSH.CHAR .DA CSH.INT .DA CSH.LONG