mirror of
https://github.com/A2osX/A2osX.git
synced 2025-02-10 09:30:40 +00:00
295 lines
5.3 KiB
Plaintext
295 lines
5.3 KiB
Plaintext
NEW
|
||
PREFIX /A2OSX.BUILD
|
||
AUTO 4,1
|
||
*---------------------------------------
|
||
* U-Operators :
|
||
* B-Operators :
|
||
* Num Format : 0-9 -> decimal
|
||
* $ = Hex
|
||
* % = binary
|
||
* & = octal
|
||
* * = PC
|
||
*---------------------------------------
|
||
EXP.Eval stz EXP.Operator
|
||
|
||
stz EXP.Modifier
|
||
|
||
jsr SRC.GetChar
|
||
bcs EXP.Eval.Missing
|
||
|
||
jsr SRC.IsMODReserved
|
||
bcs EXP.Eval.Next1
|
||
|
||
stx EXP.Modifier
|
||
bra EXP.Eval.Next
|
||
|
||
EXP.Eval.Missing lda #ERR.MISSING.EXP
|
||
sec
|
||
rts
|
||
|
||
EXP.Eval.Next jsr SRC.GetNextCharUC
|
||
bcs EXP.Eval.Missing
|
||
|
||
EXP.Eval.Next1 cmp #'.' Local Label?
|
||
bne .12
|
||
|
||
jsr EXP.GetLocal
|
||
bcs .14
|
||
|
||
jmp EXP.EvalOperator
|
||
.14 rts
|
||
|
||
.12 cmp #'*'
|
||
bne .10
|
||
|
||
ldy #ASM.PC+3
|
||
ldx #3
|
||
|
||
.11 lda (pData),y
|
||
sta SRC.ACC,x
|
||
dey
|
||
dex
|
||
bpl .11
|
||
|
||
jmp EXP.EvalOperator
|
||
|
||
.10 jsr SRC.IsDigit10 Decimal constant ?
|
||
bcs .1
|
||
|
||
jsr SRC.GetDecimal
|
||
|
||
bcs EXP.EvalExitSYN
|
||
bra EXP.EvalOperator
|
||
|
||
.1 cmp #'$' Hex?
|
||
bne .2
|
||
|
||
jsr SRC.GetHex
|
||
|
||
bcs EXP.EvalExitSYN
|
||
bra EXP.EvalOperator
|
||
|
||
|
||
.2 cmp #'%' binary?
|
||
bne .3
|
||
|
||
jsr SRC.GetBinary
|
||
|
||
bcs EXP.EvalExitSYN
|
||
bra EXP.EvalOperator
|
||
|
||
|
||
.3 cmp #'&' octal?
|
||
bne .4
|
||
jsr SRC.GetOctal
|
||
|
||
bcs EXP.EvalExitSYN
|
||
bra EXP.EvalOperator
|
||
|
||
.4 cmp #'''
|
||
bne .43
|
||
jsr SRC.GetNextChar
|
||
bcs EXP.EvalExitSYN
|
||
jsr EXP.SetAccA
|
||
jsr SRC.GetNextChar
|
||
bcs EXP.EvalOperator
|
||
cmp #'''
|
||
bne EXP.EvalExitSYN
|
||
bra EXP.EvalOperator
|
||
|
||
.43 cmp '"'
|
||
bne .42
|
||
jsr SRC.GetNextChar
|
||
bcs EXP.EvalExitSYN
|
||
ora #$80
|
||
jsr EXP.SetAccA
|
||
jsr SRC.GetNextChar
|
||
bcs EXP.EvalOperator
|
||
cmp #'"'
|
||
bne EXP.EvalExitSYN
|
||
bra EXP.EvalOperator
|
||
|
||
.42 jsr SRC.IsLetter Symbol ?
|
||
bcs EXP.EvalExitSYN
|
||
|
||
jsr EXP.GetSymbol
|
||
bcs EXP.EvalExitRTS
|
||
bra EXP.EvalOperator
|
||
|
||
EXP.EvalExitOK clc
|
||
EXP.EvalExitRTS rts
|
||
|
||
EXP.EvalExitSYN lda #ERR.SYNTAX.ERROR
|
||
sec
|
||
rts
|
||
|
||
EXP.EvalExitUND lda #ERR.UNDEF.SYMBOL
|
||
sec
|
||
rts
|
||
|
||
EXP.EvalOperator lda EXP.Operator
|
||
beq .7
|
||
|
||
jsr EXP.Compute
|
||
bcs EXP.EvalExitRTS
|
||
|
||
.7 jsr SRC.GetChar
|
||
bcs EXP.EvalExitOK
|
||
|
||
cmp #' '
|
||
beq EXP.EvalExitOK
|
||
|
||
jsr SRC.IsAMReserved
|
||
bcc EXP.EvalExitOK
|
||
|
||
jsr SRC.IsEXPReserved
|
||
bcs EXP.EvalExitSYN
|
||
|
||
stx EXP.Operator
|
||
|
||
ldx #3
|
||
|
||
.8 lda SRC.ACC,x
|
||
sta SRC.ARG,x
|
||
dex
|
||
bpl .8
|
||
|
||
jmp EXP.Eval.Next
|
||
*---------------------------------------
|
||
EXP.GetLocal jsr SRC.GetDecimal
|
||
bcs EXP.EvalExitSYN
|
||
lda SRC.ACC+1
|
||
ora SRC.ACC+2
|
||
ora SRC.ACC+3
|
||
bne EXP.EvalExitSYN Max .255
|
||
lda SRC.ACC
|
||
beq EXP.EvalExitSYN .0 is not allowed
|
||
jsr SYM.GetLocal
|
||
bcs EXP.EvalExitUND
|
||
rts
|
||
*---------------------------------------
|
||
EXP.SetAccA sta SRC.ACC
|
||
stz SRC.ACC+1
|
||
stz SRC.ACC+2
|
||
stz SRC.ACC+3
|
||
rts
|
||
*---------------------------------------
|
||
EXP.GetSymbol >PUSHB.G SYM.hGlobals
|
||
>PUSHW ZPLinePtr
|
||
>PUSHEA.G SYM.Global
|
||
|
||
>SYSCALL SListLookup
|
||
bcs .2
|
||
|
||
adc ZPLinePtr
|
||
sta ZPLinePtr
|
||
bcc .1
|
||
|
||
inc ZPLinePtr+1
|
||
|
||
.1 clc
|
||
rts
|
||
|
||
.2 ldy #ASM.PASS
|
||
lda (pData),y pass#2?
|
||
bne .99 yes, undefined symbol
|
||
|
||
>PUSHB.G SYM.hGlobals
|
||
>PUSHW ZPLinePtr
|
||
>PUSHEA.G SYM.Global
|
||
|
||
lda #6
|
||
>STA.G SYM.Global+SYM.LEN
|
||
|
||
lda #0
|
||
>STA.G SYM.Global+SYM.F
|
||
|
||
>SYSCALL SListAdd
|
||
bcs .9
|
||
|
||
adc ZPLinePtr
|
||
sta ZPLinePtr
|
||
bcc .3
|
||
|
||
inc ZPLinePtr+1
|
||
|
||
.3 clc
|
||
rts
|
||
|
||
.99 lda #ERR.UNDEF.SYMBOL
|
||
sec
|
||
.9 rts
|
||
*---------------------------------------
|
||
EXP.Compute dec
|
||
asl
|
||
tax
|
||
* ldy #ASM.PASS
|
||
* lda (pData),y pass#2?
|
||
* beq .8
|
||
jmp (J.EXP.OP,x)
|
||
.8 clc
|
||
rts
|
||
*---------------------------------------
|
||
EXP.OP.EOR
|
||
*---------------------------------------
|
||
EXP.OP.ORA
|
||
*---------------------------------------
|
||
EXP.OP.AND
|
||
*---------------------------------------
|
||
EXP.OP.LOW
|
||
*---------------------------------------
|
||
EXP.OP.EQU
|
||
*---------------------------------------
|
||
EXP.OP.GRT
|
||
clc
|
||
rts
|
||
*---------------------------------------
|
||
EXP.OP.ADD ldx #0 ARG-ACC->ACC
|
||
ldy #4
|
||
|
||
clc
|
||
|
||
.1 lda SRC.ARG,x
|
||
adc SRC.ACC,x
|
||
sta SRC.ACC,x
|
||
inx
|
||
dey
|
||
bne .1
|
||
|
||
bcc .8
|
||
|
||
lda #ERR.VAL.TOO.BIG
|
||
.8 rts
|
||
*---------------------------------------
|
||
EXP.OP.SUB ldx #0 ARG-ACC->ACC
|
||
ldy #4
|
||
|
||
sec
|
||
|
||
.1 lda SRC.ARG,x
|
||
sbc SRC.ACC,x
|
||
sta SRC.ACC,x
|
||
inx
|
||
dey
|
||
bne .1
|
||
|
||
bcs .8
|
||
|
||
lda #ERR.VAL.TOO.BIG
|
||
sec
|
||
rts
|
||
|
||
.8 clc
|
||
rts
|
||
*---------------------------------------
|
||
EXP.OP.MUL
|
||
*---------------------------------------
|
||
EXP.OP.DIV
|
||
clc
|
||
rts
|
||
*---------------------------------------
|
||
MAN
|
||
SAVE /A2OSX.BUILD/BIN/DEV/ASM.S.EXP
|
||
LOAD /A2OSX.BUILD/BIN/DEV/ASM.S
|
||
ASM
|