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