1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;; math expression parser, general numeric stack management
3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7 ;; clear numeric stack, setup stack vars
14 ld de,EXPR_STACK_SIZE+1
19 ; DE=EXPR_STACK_SIZE*3
26 ld (EXPR_STACK_END),hl
30 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
32 ;; loads addess of the next numeric stack slot into HL
33 ;; increments numeric stack pointer
34 ;; checks for stack overflow
42 EXPR_STACK_GET_NEXT_SLOT_HL:
49 ld de,(EXPR_STACK_END)
55 ld a,EXPR_ERR_STACK_OVERFLOW
61 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
63 ;; loads addess of the last numeric stack slot into HL
64 ;; decrements numeric stack pointer
65 ;; checks for stack underfloaw
73 EXPR_STACK_POP_LAST_SLOT_HL:
88 ld a,EXPR_ERR_STACK_UNDERFLOW
92 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
94 ;; push number to numeric stack
102 call EXPR_STACK_GET_NEXT_SLOT_HL
105 ld (hl),EXPR_STITEM_NUMBER
113 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
115 ;; pop number from numeric stack
116 ;; raises error if stack is empty or TOS is not a number
124 call EXPR_STACK_POP_LAST_SLOT_HL
126 IF EXPR_STITEM_NUMBER == 0
129 cp EXPR_STITEM_NUMBER
131 ld a,EXPR_ERR_INVALID
132 jp nz,EXPR_CALL_ERROR_CB