From 0cb5d401f7061db2ec69cac974b7ef9a9b334936 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Tue, 14 Nov 2017 17:57:34 +0100 Subject: [PATCH] Kernel 0.9.1 : GUI API & Driver --- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes DRV/DHGR.DRV.S.BLT.txt | 13 +- ...DHGR.DRV.S.LIN.txt => DHGR.DRV.S.LINE.txt} | 117 +++----- DRV/DHGR.DRV.S.PIX.txt | 17 +- DRV/DHGR.DRV.S.RECT.txt | 30 ++ DRV/DHGR.DRV.S.txt | 277 ++++++++---------- DRV/DHGR.DRV.T.txt | 28 +- INC/A2osX.I.txt | 9 - INC/{LIBGFX.I.txt => LIBGUI.I.txt} | 2 +- LIB/{LIBGFX.S.txt => LIBGUI.S.txt} | 2 +- SBIN/{DESKTOP.S.txt => GUI.S.txt} | 8 +- SBIN/SHELL.C.CSH.txt | 4 +- SBIN/SHELL.S.CSH.txt | 138 ++++++--- SBIN/SHELL.S.txt | 4 +- 15 files changed, 314 insertions(+), 335 deletions(-) rename DRV/{DHGR.DRV.S.LIN.txt => DHGR.DRV.S.LINE.txt} (69%) create mode 100644 DRV/DHGR.DRV.S.RECT.txt rename INC/{LIBGFX.I.txt => LIBGUI.I.txt} (94%) rename LIB/{LIBGFX.S.txt => LIBGUI.S.txt} (94%) rename SBIN/{DESKTOP.S.txt => GUI.S.txt} (92%) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index b322ec97c0c19734c855eee0bf8102709d36372b..6afdf20b746e15c3f863b5e8a961d8b4df9e9ca7 100644 GIT binary patch delta 5961 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 Y+xV=u@rbr@aoc!g+jvyZ`0Vb#0PRD`5&!@I diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index 7d2970b3fb185df183b40df7ecf2a82ea069f455..7d7b86f3cce7c869c2a2a97782cbc735a0537ec3 100644 GIT binary patch delta 23572 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 EKR!X_djJ3c delta 24105 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 UNyDMuCVbcOU$K%?IjP(KA389OCIA2c 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