Kernel 0.9.1 : GUI API & Driver

This commit is contained in:
Rémy GIBERT 2017-11-14 17:57:34 +01:00
parent 8ffd177fb2
commit 0cb5d401f7
15 changed files with 314 additions and 335 deletions

Binary file not shown.

Binary file not shown.

View File

@ -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

View File

@ -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

View File

@ -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
*--------------------------------------

30
DRV/DHGR.DRV.S.RECT.txt Normal file
View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 );

View File

@ -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

View File

@ -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