A2osX/BIN/ACOS.S.EXP.txt
2021-06-22 20:59:02 +02:00

282 lines
4.3 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
* In: A = current CHAR
* Out: CC, int16 on stack or pSTR in stack
*--------------------------------------
EXP.Eval stz EXP.TYPE
EXP.Eval.R lda EXP.AOPS
pha
lda #$FF
>PUSHA Previous OP = none
*--------------------------------------
.10 jsr CORE.GetCharNB
bcs .39
.11 cmp #'('
bne .12
jsr CORE.GetNextCharNB skip (
bcs .39
jsr EXP.Eval.R
bcs .39
jsr CORE.GetCharNB
bcs .39
cmp #')'
sec
bne .39
jsr CORE.GetNextCharNB skip )
bra .41
.12 cmp #'"'
bne .20
jsr EXP.CreateStrConst
bcs .37
bra .40
*--------------------------------------
.20 jsr CORE.IsLetter
bcs .30 No, go check for number...
>LDYA L.ACOS.KW Yes, KW, FN or VAR ?
jsr CORE.Lookup
bcc .80 KW, end of exp
>LDYA L.ACOS.FN
jsr CORE.LookupSkip
bcs .21
jsr EXP.FNjmpX
bcs .99
bra .40
.21 jsr EXP.VARLookup
bcc .22
.22 ldx EXP.TYPE
bne .23
jsr CODE.INTGET
bra .40
.23 jsr CODE.STRGET
bra .40
*--------------------------------------
.30 jsr CORE.IsDigit10
.39 bcs .90
jsr EXP.Int16
.37 bcs .99
*--------------------------------------
.40 jsr CORE.GetCharNB
.41 bcs .80
.50 jsr CORE.IsEndExp
bcs .80
jsr CORE.IsKW
bcc .80
jsr CORE.LookupOPS
bcs .90
stx EXP.AOPS
lda (pStack) get op context
bmi .60 no prev op, go get arg2
cmp EXP.AOPS we have arg1 A=op1 arg2 X=op2
bcc .60
inc pStack prev op has precedence
tay
ldx ACOS.OPS2FPU,y
jsr CODE.FPUCALL go compute (arg1 op1 arg2)
.60 lda EXP.AOPS we must compute arg2 op2 arg3 before
>PUSHA
jsr CORE.GetCharNB
bcs .90
jmp .11
*--------------------------------------
.80 >PULLA
tay
bmi .88 nothing to do
ldx ACOS.OPS2FPU,y
jsr CODE.FPUCALL
bra .80
.90 lda #E.ESYN
.99 tay Save Err code
.98 >PULLA
tax
bpl .98
sec
.HS 90 BCC
.88 clc
pla
sta EXP.AOPS
tya
rts
*--------------------------------------
EXP.FNjmpX jmp (J.ACOS.FN,x)
*--------------------------------------
EXP.CreateStrConst
lda #'$'
sta EXP.TYPE
ldy #0
.1 jsr CORE.GetNextChar
bcs .91
cmp #'"'
beq .2
sta (ZPConstBufPtr),y
iny
bne .1
.2 lda #0
sta (ZPConstBufPtr),y
phy
>LDYA ZPConstBufPtr
jsr CODE.PUSHIYA
pla
sec for \0
adc ZPConstBufPtr
sta ZPConstBufPtr
bcc .3
inc ZPConstBufPtr+1
.3 jsr CORE.GetNextCharNB skip "
clc
rts
.91 lda #E.ESYN
* sec
rts
*--------------------------------------
EXP.Int16 >PUSHW ZPInputBufPtr
>PUSHWI ZPInputBufPtr
>PUSHBI 10
>SYSCALL StrToL
bcs .9
jsr CODE.PUSHINT16
>POP 4
clc
.9 rts
*--------------------------------------
EXP.VARLookup >LDA.G hVars
>PUSHA
>PUSHA for SListGetData/SListAddData
>PUSHW ZPInputBufPtr
>SYSCALL SListLookup
bcs .3
>PUSHYA KeyID
txa
jsr CORE.SkipA
.1 >PUSHWI EXP.ADDR
>PUSHWI 3 3 bytes : ADDR + TYPE
>PUSHWZ From Start
>SYSCALL SListGetData
bcs .99
jsr CORE.GetVarType
cpx EXP.TYPE
bne .90
clc
rts
.90 lda #E.TMISMATCH
sec
.99 rts
*--------------------------------------
.3 jsr CORE.NewVarKey
bcs .39
phy
pha KeyID
jsr CORE.GetVarType
stx EXP.TYPE
beq .11
lda STRID
sta EXP.ADDR
lda STRID+1
sta EXP.ADDR+1
inc STRID
bne .10
inc STRID+1
bra .10
.11 lda ZPDataBufPtr
sta EXP.ADDR
clc
adc #2 Word
sta ZPDataBufPtr
lda ZPDataBufPtr+1
sta EXP.ADDR+1
adc #0
sta ZPDataBufPtr+1
.10 pla
>PUSHA
pla
>PUSHA
>PUSHWI EXP.ADDR
>PUSHWI 3 3 bytes : ADDR + TYPE
>SYSCALL SListAddData
rts
.39 inc pStack
rts
*--------------------------------------
MAN
SAVE usr/src/bin/acos.s.exp
LOAD usr/src/bin/acos.s
ASM