ACOS! Fixes in Strings & Logical OPs

This commit is contained in:
burniouf 2021-08-06 19:58:04 +02:00
parent 95032a2ad2
commit e98f1e9451
5 changed files with 111 additions and 74 deletions

Binary file not shown.

View File

@ -336,7 +336,7 @@ CORE.Run jsr CORE.Cleanup
.8 jmp (ZPCodeBufPtr) .8 jmp (ZPCodeBufPtr)
*-------------------------------------- *--------------------------------------
CORE.LookupOPS lda (ZPInputBufPtr) CORE.LookupAOPS lda (ZPInputBufPtr)
jsr CORE.IsOPSChar jsr CORE.IsOPSChar
bcc .55 bcc .55
@ -347,7 +347,7 @@ CORE.LookupOPS lda (ZPInputBufPtr)
.55 ror bFlag .55 ror bFlag
>LDYA L.ACOS.OPS >LDYA L.ACOS.AOPS
>STYA ZPPtr1 >STYA ZPPtr1
ldx #0 ldx #0
@ -404,6 +404,8 @@ CORE.LookupOPS lda (ZPInputBufPtr)
.19 sec .19 sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
CORE.LookupLOPS >LDYA L.ACOS.LOPS
CORE.LookupSkip sec CORE.LookupSkip sec
.HS 90 BCC .HS 90 BCC
CORE.Lookup clc CORE.Lookup clc

View File

@ -6,8 +6,8 @@ NEW
* Out: CC, int16 on stack or pSTR in stack * Out: CC, int16 on stack or pSTR in stack
*-------------------------------------- *--------------------------------------
EXP.Eval stz EXP.TYPE EXP.Eval stz EXP.TYPE
*--------------------------------------
EXP.Eval.R lda EXP.AOPS EXP.Eval.R lda EXP.AOP
pha pha
lda #$FF lda #$FF
@ -39,9 +39,7 @@ EXP.Eval.R lda EXP.AOPS
bne .20 bne .20
jsr EXP.CreateStrConst jsr EXP.CreateStrConst
bcs .37 bra .39
bra .40
*-------------------------------------- *--------------------------------------
.20 jsr CORE.IsLetter .20 jsr CORE.IsLetter
bcs .30 No, go check for number... bcs .30 No, go check for number...
@ -52,33 +50,17 @@ EXP.Eval.R lda EXP.AOPS
>LDYA L.ACOS.FN >LDYA L.ACOS.FN
jsr CORE.LookupSkip jsr CORE.LookupSkip
bcs .21 bcs .25
jsr EXP.FNjmpX jsr EXP.FNjmpX
bcs .99 bra .39
bra .40
.21 jsr EXP.VARLookup
bcs .37
ldy EXP.ADDR
ldx EXP.ADDR+1
lda EXP.TYPE .25 jsr EXP.VARLookup
bne .22 bra .39
jsr CODE.LDYXI
ldx #RT.IntGet.ID
jsr CODE.JSRRT
bra .40
.22 jsr CODE.PUSHYXI
bra .40
*-------------------------------------- *--------------------------------------
.30 jsr EXP.Int16 .30 jsr EXP.Int16
.37 bcs .99 *--------------------------------------
.39 bcs .99
*-------------------------------------- *--------------------------------------
.40 jsr CORE.GetCharNB .40 jsr CORE.GetCharNB
.41 bcs .80 .41 bcs .80
@ -89,39 +71,54 @@ EXP.Eval.R lda EXP.AOPS
jsr CORE.IsKW jsr CORE.IsKW
bcc .80 bcc .80
jsr CORE.LookupOPS jsr CORE.LookupLOPS
.39 bcs .90 bcs .51
stx EXP.AOPS phx
jsr EXP.ComputeAll compute all until $FF
plx
bcs .99
txa
lsr
adc #14
>PUSHA
jsr EXP.Eval.R
bcs .99
bra .40
.51 jsr CORE.LookupAOPS
bcs .90
stx EXP.AOP
lda (pStack) get op context lda (pStack) get op context
bmi .60 no prev op, go get arg2 bmi .60 no prev op, go get arg2
ldy EXP.TYPE cmp EXP.AOP we have arg1 A=op1 arg2 X=op2
bne .51 no precedence for strings
cmp EXP.AOPS we have arg1 A=op1 arg2 X=op2
bcc .60 bcc .60
.51 inc pStack prev op has precedence inc pStack prev op has precedence
tay tay
jsr EXP.ComputeY go compute (arg1 op1 arg2) jsr EXP.ComputeY go compute (arg1 op1 arg2)
bcs .90 bcs .90
.60 lda EXP.AOPS we must compute arg2 op2 arg3 before .60 lda EXP.AOP we must compute arg2 op2 arg3 before
>PUSHA >PUSHA
jsr CORE.GetCharNB jsr CORE.GetCharNB
bcs .90 bcs .90
jmp .11 jmp .11
*-------------------------------------- *--------------------------------------
.80 >PULLA .80 jsr EXP.ComputeAll go compute (arg1 op1 arg2)
tay bcs .99
bmi .88 nothing to do
inc pStack discard $FF
jsr EXP.ComputeY go compute (arg1 op1 arg2) bra .88
bcc .80
.90 lda #E.ESYN .90 lda #E.ESYN
@ -132,11 +129,9 @@ EXP.Eval.R lda EXP.AOPS
bpl .98 bpl .98
sec sec
.HS 90 BCC
.88 clc
pla .88 pla
sta EXP.AOPS sta EXP.AOP
tya tya
@ -227,12 +222,9 @@ EXP.VARLookup >LDA.G hVars
jsr CORE.GetVarType jsr CORE.GetVarType
cpx EXP.TYPE cpx EXP.TYPE
bne .90 beq .7
clc lda #E.TMISMATCH
rts
.90 lda #E.TMISMATCH
sec sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
@ -254,16 +246,45 @@ EXP.VARLookup >LDA.G hVars
>PUSHWI EXP.ADDR >PUSHWI EXP.ADDR
>PUSHWI 3 3 bytes : ADDR + TYPE >PUSHWI 3 3 bytes : ADDR + TYPE
>SYSCALL SListAddData >SYSCALL SListAddData
rts bcc .7
.9 inc pStack discard extra hVars .9 inc pStack discard extra hVars
rts rts
*-------------------------------------- *--------------------------------------
EXP.ComputeY lda EXP.TYPE .7 ldy EXP.ADDR
ldx EXP.ADDR+1
lda EXP.TYPE
bne .8
jsr CODE.LDYXI
ldx #RT.IntGet.ID
clc
jmp CODE.JSRRT
.8 clc
jmp CODE.PUSHYXI
*--------------------------------------
EXP.ComputeAll lda (pStack)
bmi .8 nothing to do
inc pStack
tay
jsr EXP.ComputeY go compute (arg1 op1 arg2)
bcc EXP.ComputeAll
* sec
rts
.8 clc
rts
*--------------------------------------
EXP.ComputeY lda EXP.TYPE
bne .1 bne .1
ldx ACOS.OPS2FPU,y ldx ACOS.AOPS2FPU,y
jsr CODE.FPUCALL jsr CODE.FPUCALL
clc clc
rts rts
@ -276,29 +297,26 @@ EXP.ComputeY lda EXP.TYPE
jmp CODE.JSRRT jmp CODE.JSRRT
.2 stz EXP.TYPE at the end ....TRUE/FALSE is int .2 stz EXP.TYPE at the end ....TRUE/FALSE is int
cpy #11 <> cpy #11 <>
bne .3 bne .3
ldx #SYS.StrCmp ldx #RT.StrCmp.ID
jsr CODE.SYSCALL
jsr CODE.PUSHYA
clc clc
rts jmp CODE.JSRRT
.3 cpy #13 = .3 cpy #13 =
bne .9 bne .9
ldx #SYS.StrCmp ldx #RT.StrCmp.ID
jsr CODE.SYSCALL jsr CODE.JSRRT
jsr CODE.PUSHYA
ldx #RT.NOT.ID ldx #RT.NOT.ID
jsr CODE.JSRRT
clc clc
rts jmp CODE.JSRRT
.9 sec .9 lda #E.TMISMATCH
sec
rts rts
*-------------------------------------- *--------------------------------------
MAN MAN

View File

@ -2,8 +2,7 @@ NEW
AUTO 3,1 AUTO 3,1
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
RT.NOT lda (pStack) RT.NOT >PULLA
inc
ora (pStack) ora (pStack)
beq .1 beq .1
@ -28,6 +27,20 @@ RT.StrAdd ldx #2
clc clc
rts rts
*-------------------------------------- *--------------------------------------
RT.StrCmp ldx #2
jsr RT.StrPullX
jsr RT.StrPull
>PUSHW ZPStrBuf1
>PUSHW ZPStrBuf2
>SYSCALL strcmp
>PUSHYA
clc
rts
*--------------------------------------
* on stack : Src StrID * on stack : Src StrID
* Y,X : Dst StrID * Y,X : Dst StrID
*-------------------------------------- *--------------------------------------

View File

@ -36,7 +36,7 @@ hStrings .BS 1
EXP.ADDR .BS 2 EXP.ADDR .BS 2
EXP.TYPE .BS 1 EXP.TYPE .BS 1
EXP.AOPS .BS 1 EXP.AOP .BS 1
ZPStrBuf1 .BS 2 ZPStrBuf1 .BS 2
ZPStrBuf2 .BS 2 ZPStrBuf2 .BS 2
@ -92,7 +92,8 @@ L.OUT .DA OUT.ELW
L.FMT.DATE .DA FMT.DATE L.FMT.DATE .DA FMT.DATE
L.FMT.TIME .DA FMT.TIME L.FMT.TIME .DA FMT.TIME
*-------------------------------------- *--------------------------------------
L.ACOS.OPS .DA ACOS.OPS L.ACOS.AOPS .DA ACOS.AOPS
L.ACOS.LOPS .DA ACOS.LOPS
L.ACOS.KW .DA ACOS.KW L.ACOS.KW .DA ACOS.KW
J.ACOS.KW .DA KW.ADDINT J.ACOS.KW .DA KW.ADDINT
.DA KW.APPEND .DA KW.APPEND
@ -209,6 +210,8 @@ RT.NOT.ID .EQ *-J.RT
.DA RT.NOT .DA RT.NOT
RT.StrAdd.ID .EQ *-J.RT RT.StrAdd.ID .EQ *-J.RT
.DA RT.StrAdd .DA RT.StrAdd
RT.StrCmp.ID .EQ *-J.RT
.DA RT.StrCmp
RT.StrSet.ID .EQ *-J.RT RT.StrSet.ID .EQ *-J.RT
.DA RT.StrSet .DA RT.StrSet
RT.StrOut.ID .EQ *-J.RT RT.StrOut.ID .EQ *-J.RT
@ -540,7 +543,7 @@ OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace
ACOS.OPSChars .AS "+-*/<>=" ACOS.OPSChars .AS "+-*/<>="
ACOS.OPSChars.Cnt .EQ *-ACOS.OPSChars ACOS.OPSChars.Cnt .EQ *-ACOS.OPSChars
*-------------------------------------- *--------------------------------------
ACOS.OPS .AT "*" ACOS.AOPS .AT "*"
.AT "/" .AT "/"
.AT "MOD" .AT "MOD"
.AT "+" .AT "+"
@ -554,11 +557,12 @@ ACOS.OPS .AT "*"
.AT "<>" .AT "<>"
.AT "><" .AT "><"
.AT "=" .AT "="
.AT "AND" .HS 00
ACOS.LOPS .AT "AND"
.AT "OR" .AT "OR"
.HS 00 .HS 00
*-------------------------------------- *--------------------------------------
ACOS.OPS2FPU .DA #FPU.iMUL,#FPU.iDIV,#FPU.iMOD,#FPU.iADD,#FPU.iSUB ACOS.AOPS2FPU .DA #FPU.iMUL,#FPU.iDIV,#FPU.iMOD,#FPU.iADD,#FPU.iSUB
.DA #FPU.iL,#FPU.iLE,#FPU.iLE .DA #FPU.iL,#FPU.iLE,#FPU.iLE
.DA #FPU.iG,#FPU.iGE,#FPU.iGE .DA #FPU.iG,#FPU.iGE,#FPU.iGE
.DA #FPU.iNE,#FPU.iNE,#FPU.iE .DA #FPU.iNE,#FPU.iNE,#FPU.iE