A2osX/BIN/ASM.S.EXP.txt
2018-01-19 16:21:31 +00:00

294 lines
5.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
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
lda (ZPLinePtr)
beq 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
beq 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
beq EXP.EvalExitSYN
jsr EXP.SetAccA
jsr SRC.GetNextChar
beq EXP.EvalOperator
cmp #'''
bne EXP.EvalExitSYN
bra EXP.EvalOperator
.43 cmp '"'
bne .42
jsr SRC.GetNextChar
beq EXP.EvalExitSYN
ora #$80
jsr EXP.SetAccA
jsr SRC.GetNextChar
beq 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.GetNextChar
beq 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.SearchLocal
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.Value
>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.Value
lda #6
>STA.G SYM.Value+SYM.LEN
lda #0
>STA.G SYM.Value+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