A2osX/BIN/ACOS.S.EXP.txt
2021-08-05 13:35:37 +02:00

308 lines
4.9 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
bcs .37
ldy EXP.ADDR
ldx EXP.ADDR+1
lda EXP.TYPE
bne .22
jsr CODE.LDYXI
ldx #RT.IntGet.ID
jsr CODE.JSRRT
bra .40
.22 jsr CODE.PUSHYXI
bra .40
*--------------------------------------
.30 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
.39 bcs .90
stx EXP.AOPS
lda (pStack) get op context
bmi .60 no prev op, go get arg2
ldy EXP.TYPE
bne .51 no precedence for strings
cmp EXP.AOPS we have arg1 A=op1 arg2 X=op2
bcc .60
.51 inc pStack prev op has precedence
tay
jsr EXP.ComputeY go compute (arg1 op1 arg2)
bcs .90
.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
jsr EXP.ComputeY go compute (arg1 op1 arg2)
bcc .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 .9
cmp #'"'
beq .2
sta (ZPStrBuf1),y
iny
bne .1
.9 lda #E.ESYN
* sec
.99 rts
.2 lda #0
sta (ZPStrBuf1),y
jsr CORE.GetNextCharNB skip "
>PUSHB hStrings
jsr CORE.GetStrID
>PUSHYA
>PUSHW ZPStrBuf1
>SYSCALL StrVSet
bcs .99
ldy STRID
ldx STRID+1
clc
jmp CODE.PUSHYXI push StrID on stack
*--------------------------------------
EXP.Int16 jsr CORE.IsDigit10
bcc .1
cmp #'-'
bne .90
.1 >PUSHW ZPInputBufPtr
>PUSHWI ZPInputBufPtr
>PUSHBI 10
>SYSCALL StrToL
bcs .99
jsr CODE.PUSHINT16
>POP 4 Discard long on stack
clc
rts
.90 lda #E.ESYN
sec
.99 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 .9
>PUSHYA SID
jsr CORE.GetVarType
stx EXP.TYPE
beq .4
jsr CORE.GetStrID
bra .5
.4 jsr CORE.GetWord
.5 >STYA EXP.ADDR
>PUSHWI EXP.ADDR
>PUSHWI 3 3 bytes : ADDR + TYPE
>SYSCALL SListAddData
rts
.9 inc pStack discard extra hVars
rts
*--------------------------------------
EXP.ComputeY lda EXP.TYPE
bne .1
ldx ACOS.OPS2FPU,y
jsr CODE.FPUCALL
clc
rts
.1 cpy #3 +
bne .2
ldx #RT.StrAdd.ID
clc
jmp CODE.JSRRT
.2 stz EXP.TYPE at the end ....TRUE/FALSE is int
cpy #11 <>
bne .3
ldx #SYS.StrCmp
jsr CODE.SYSCALL
jsr CODE.PUSHYA
clc
rts
.3 cpy #13 =
bne .9
ldx #SYS.StrCmp
jsr CODE.SYSCALL
jsr CODE.PUSHYA
ldx #RT.NOT.ID
jsr CODE.JSRRT
clc
rts
.9 sec
rts
*--------------------------------------
MAN
SAVE usr/src/bin/acos.s.exp
LOAD usr/src/bin/acos.s
ASM