PR#3 PREFIX /A2OSX.SRC NEW INC 1 AUTO 6 .LIST OFF *--------------------------------------- * U-Operators : * B-Operators : * Num Format : 0-9 -> decimal * $ = Hex * % = binary * & = octal * * = PC *--------------------------------------- EXP.Eval stz EXP.Operator jsr SRC.GetCharNB bne .13 lda #ERR.MISSING.EXP sec .14 rts .13 cmp #'.' Local Label? bne .12 jsr EXP.GetLocal bcs .14 jmp EXP.EvalOperator .12 cmp #'*' bne .10 ldy #ASM.PC+3 ldx #3 .11 lda (pData),y sta SRC.ACC,x dey dex bpl .11 jsr SRC.GetCharNB bne EXP.EvalExitSYN clc rts .10 jsr SRC.IsDigit10 Decimal constant ? bcs .1 dec SRC.BufPtr 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.GetChar beq EXP.EvalExitSYN jsr EXP.SetAccA jsr SRC.GetChar beq EXP.EvalOperator cmp #''' bne EXP.EvalExitSYN bra EXP.EvalOperator .43 cmp '"' bne .42 jsr SRC.GetChar beq EXP.EvalExitSYN ora #$80 jsr EXP.SetAccA jsr SRC.GetChar beq EXP.EvalOperator cmp #'"' bne EXP.EvalExitSYN bra EXP.EvalOperator .42 jsr SRC.IsLetter Symbol ? bcs EXP.EvalExitSYN dec SRC.BufPtr jsr EXP.GetSymbol bcs EXP.EvalExitRTS bra EXP.EvalOperator EXP.EvalExitOK dec SRC.BufPtr Back One Char EXP.EvalExitOK1 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 beq EXP.EvalExitOK1 cmp #' ' beq EXP.EvalExitOK1 jsr SRC.IsAMReserved bcc EXP.EvalExitOK jsr SRC.IsEXPReserved bcs * bcs EXP.EvalExitSYN sta EXP.Operator ldx #3 .8 lda SRC.ACC,x sta SRC.ARG,x dex bpl .8 jmp EXP.Eval clc rts *--------------------------------------- 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.FindLocal bcs EXP.EvalExitUND rts *--------------------------------------- EXP.SetAccA sta SRC.ACC stz SRC.ACC+1 stz SRC.ACC+2 stz SRC.ACC+3 rts *--------------------------------------- EXP.GetSymbol >LDYA L.SRC.ELabel.Len jsr SRC.GetLabel bcs EXP.EvalExitSYN jsr SYM.FindGlobal bcc .1 ldy #ASM.PASS lda (pData),y pass#2? bne EXP.EvalExitUND yes, undefined symbol lda #$C0 Valid+Pending sta SRC.ELabel.Flags >LDYA L.SRC.ELabel.Flags jsr SYM.AddGToGBlockYA rts .1 ldx #3 .2 lda SRC.FLabel.Value,x sta SRC.ACC,x dex bpl .2 clc rts *--------------------------------------- EXP.Compute clc rts *--------------------------------------- MAN SAVE BIN/ASM.S.EXP LOAD BIN/ASM.S ASM