mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-25 20:33:13 +00:00
248 lines
4.0 KiB
Plaintext
248 lines
4.0 KiB
Plaintext
|
NEW
|
|||
|
AUTO 3,1
|
|||
|
.LIST OFF
|
|||
|
*--------------------------------------
|
|||
|
* Input:
|
|||
|
* ZPFileBufPtr, A = Expected type
|
|||
|
* Output:
|
|||
|
* CS, A = EC
|
|||
|
* CC, X = Var Type, Value on Stack
|
|||
|
*--------------------------------------
|
|||
|
CSH.ExpEval ldx ZPPtr1
|
|||
|
phx
|
|||
|
ldx ZPPtr1+1 local : used by lookup
|
|||
|
phx
|
|||
|
ldx ZPPtr2 local : VarType
|
|||
|
phx
|
|||
|
ldx ZPPtr2+1 local : BOP
|
|||
|
phx
|
|||
|
|
|||
|
sta ZPPtr2 local : expected type
|
|||
|
|
|||
|
lda #$ff
|
|||
|
pha
|
|||
|
*--------------------------------------
|
|||
|
.10 jsr CSH.GetCharNB
|
|||
|
bcs .19
|
|||
|
|
|||
|
.11 cmp #'('
|
|||
|
bne .20
|
|||
|
|
|||
|
jsr CSH.GetNextCharNB skip (
|
|||
|
bcs .19
|
|||
|
|
|||
|
lda ZPPtr2
|
|||
|
|
|||
|
jsr CSH.ExpEval
|
|||
|
bcs .19
|
|||
|
stx ZPPtr2
|
|||
|
|
|||
|
jsr CSH.GetCharNB
|
|||
|
bcs .19
|
|||
|
cmp #')'
|
|||
|
bne .19
|
|||
|
|
|||
|
jsr CSH.GetNextCharNB skip )
|
|||
|
bcc .31
|
|||
|
.19 jmp .90
|
|||
|
*--------------------------------------
|
|||
|
.20 jsr CSH.IsLetter define, Fnc or Var ?
|
|||
|
bcs .22
|
|||
|
|
|||
|
jsr CSH.GetDefine
|
|||
|
bcc .10
|
|||
|
|
|||
|
jsr CSH.GetVar
|
|||
|
bcs .21
|
|||
|
|
|||
|
ldx ZPPtr2 YA=VarID, X=expected var type (or 0=any)
|
|||
|
|
|||
|
jsr CSH.GetVarValueOnStack Y,A = VarID, Get value on stack
|
|||
|
bcs .29
|
|||
|
|
|||
|
stx ZPPtr2 store real var type
|
|||
|
bra .30
|
|||
|
|
|||
|
.21 lda ZPPtr2 var type
|
|||
|
jsr CSH.fCall X = function index
|
|||
|
bcs .29
|
|||
|
|
|||
|
stx ZPPtr2 store real var type
|
|||
|
bra .30
|
|||
|
|
|||
|
.22 jsr CSH.IsDigit10 number ?
|
|||
|
bcs .24
|
|||
|
|
|||
|
ldx ZPPtr2
|
|||
|
bne .23
|
|||
|
|
|||
|
ldx #CSH.T.INT
|
|||
|
stx ZPPtr2
|
|||
|
|
|||
|
.23 jsr CSH.GetNumOnStack
|
|||
|
bcs .29
|
|||
|
bra .30
|
|||
|
|
|||
|
.24 cmp #'"' String literal
|
|||
|
bne .90
|
|||
|
jsr CSH.AddContCharP
|
|||
|
.29 bcs .99
|
|||
|
*--------------------------------------
|
|||
|
.30 jsr CSH.GetCharNB
|
|||
|
bcs .90
|
|||
|
|
|||
|
.31 cmp #','
|
|||
|
beq .80
|
|||
|
cmp #')'
|
|||
|
beq .80
|
|||
|
cmp #';'
|
|||
|
beq .80
|
|||
|
|
|||
|
jsr CSH.IsOPChar
|
|||
|
bcs .90
|
|||
|
|
|||
|
>LDYA L.CSH.BOPS we are at V1 op1 V2 op2...
|
|||
|
jsr CSH.LookupOP
|
|||
|
bcs .90
|
|||
|
|
|||
|
stx ZPPtr2+1 save OP(n)
|
|||
|
|
|||
|
.32 pla get OP(n-1)
|
|||
|
bmi .33 $ff....
|
|||
|
|
|||
|
cmp ZPPtr2+1
|
|||
|
bcc .33 OP(n) has precedence, on stack : V1,V2
|
|||
|
|
|||
|
tax OP(n-1) has precedence...
|
|||
|
|
|||
|
lda ZPPtr2 Var Type
|
|||
|
jsr CSH.BOP.EXEC compute V(n-1) <OP(n-1)> V(n)
|
|||
|
bcc .32
|
|||
|
|
|||
|
bcs .99
|
|||
|
|
|||
|
.33 pha push back OP(n-1)
|
|||
|
lda ZPPtr2+1 get OP(n)
|
|||
|
pha push OP(n) on stack
|
|||
|
|
|||
|
jmp .10 go check for next token
|
|||
|
*--------------------------------------
|
|||
|
.80 plx any OP on stack ?
|
|||
|
bmi .88
|
|||
|
|
|||
|
lda ZPPtr2 Var Type
|
|||
|
jsr CSH.BOP.EXEC
|
|||
|
bcc .80
|
|||
|
|
|||
|
bcs .99
|
|||
|
|
|||
|
.90 lda #CSH.E.SYNTAX
|
|||
|
|
|||
|
.99 plx
|
|||
|
bpl .99
|
|||
|
|
|||
|
sec
|
|||
|
.HS 90 BCC
|
|||
|
.88 clc
|
|||
|
|
|||
|
ldx ZPPtr2 X = Var Type
|
|||
|
|
|||
|
ply
|
|||
|
sty ZPPtr2+1
|
|||
|
ply
|
|||
|
sty ZPPtr2
|
|||
|
ply
|
|||
|
sty ZPPtr1+1
|
|||
|
ply
|
|||
|
sty ZPPtr1
|
|||
|
rts
|
|||
|
*--------------------------------------
|
|||
|
CSH.AddContCharP
|
|||
|
ldy #0
|
|||
|
|
|||
|
.1 jsr CSH.GetNextChar
|
|||
|
bcs .9
|
|||
|
cmp #C.CR
|
|||
|
beq .9
|
|||
|
cmp #'"'
|
|||
|
beq .2
|
|||
|
sta (ZPCSHConst),y
|
|||
|
iny
|
|||
|
bra .1
|
|||
|
|
|||
|
.2 lda #0
|
|||
|
sta (ZPCSHConst),y
|
|||
|
>PUSHW ZPCSHConst Push PTR on stack
|
|||
|
|
|||
|
tya
|
|||
|
sec
|
|||
|
adc ZPCSHConst
|
|||
|
sta ZPCSHConst
|
|||
|
bcc .3
|
|||
|
inc ZPCSHConst+1
|
|||
|
.3 jsr CSH.GetNextChar Skip "
|
|||
|
|
|||
|
clc
|
|||
|
rts
|
|||
|
.9 lda #CSH.E.SYNTAX
|
|||
|
sec
|
|||
|
rts
|
|||
|
*--------------------------------------
|
|||
|
CSH.GetNumOnStack
|
|||
|
txa
|
|||
|
beq .99
|
|||
|
|
|||
|
.10 cpx #CSH.T.FLOAT
|
|||
|
bcc .1
|
|||
|
bne .99
|
|||
|
|
|||
|
>PUSHW ZPFileBufPtr
|
|||
|
>PUSHWI ZPFileBufPtr
|
|||
|
>SYSCALL StrToF
|
|||
|
clc
|
|||
|
rts
|
|||
|
|
|||
|
.1 >PUSHW ZPFileBufPtr
|
|||
|
>PUSHWI ZPFileBufPtr
|
|||
|
>PUSHBI 10
|
|||
|
phx
|
|||
|
cpx #CSH.T.UCHAR
|
|||
|
bcc .2
|
|||
|
>SYSCALL StrToUL
|
|||
|
bra .3
|
|||
|
|
|||
|
.2 >SYSCALL StrToL
|
|||
|
|
|||
|
.3 plx
|
|||
|
bcs .9
|
|||
|
|
|||
|
lda CSH.TYPESIZE,x
|
|||
|
cmp #4
|
|||
|
beq .8
|
|||
|
|
|||
|
cmp #2
|
|||
|
bne .4
|
|||
|
ldy #1
|
|||
|
>PULLA
|
|||
|
sta (pStack),y
|
|||
|
>PULLA
|
|||
|
sta (pStack),y
|
|||
|
clc
|
|||
|
rts
|
|||
|
|
|||
|
.4 >PULLA
|
|||
|
inc pStack
|
|||
|
inc pStack
|
|||
|
sta (pStack)
|
|||
|
.8 clc
|
|||
|
.9 rts
|
|||
|
|
|||
|
.99 lda #CSH.E.TMISMATCH
|
|||
|
sec
|
|||
|
rts
|
|||
|
*--------------------------------------
|
|||
|
MAN
|
|||
|
SAVE usr/src/bin/csh.s.exp
|
|||
|
LOAD usr/src/bin/csh.s
|
|||
|
ASM
|