2019-05-11 11:19:34 +10:00
|
|
|
; Parse string in (HL) and return its numerical value whether its a number
|
2019-12-30 09:37:04 +11:00
|
|
|
; literal or a symbol. Returns value in DE.
|
2019-12-31 11:24:53 +11:00
|
|
|
; HL is advanced to the character following the last successfully read char.
|
2019-05-11 11:19:34 +10:00
|
|
|
; Sets Z if number or symbol is valid, unset otherwise.
|
|
|
|
parseNumberOrSymbol:
|
2019-12-31 11:24:53 +11:00
|
|
|
call isLiteralPrefix
|
|
|
|
jp z, parseLiteral
|
|
|
|
; Not a number. try symbol
|
2019-10-05 10:26:21 +10:00
|
|
|
ld a, (hl)
|
|
|
|
cp '$'
|
2019-12-31 11:24:53 +11:00
|
|
|
jr z, .PC
|
2019-10-05 10:26:21 +10:00
|
|
|
cp '@'
|
2019-12-31 11:24:53 +11:00
|
|
|
jr z, .lastVal
|
|
|
|
call symParse
|
|
|
|
ret nz
|
|
|
|
; HL at end of symbol name, DE at tmp null-terminated symname.
|
|
|
|
push hl ; --> lvl 1
|
|
|
|
ex de, hl
|
2019-07-21 08:07:52 +10:00
|
|
|
call symFindVal ; --> DE
|
2019-12-31 11:24:53 +11:00
|
|
|
pop hl ; <-- lvl 1
|
|
|
|
ret z
|
|
|
|
; not found
|
|
|
|
; When not found, check if we're in first pass. If we are, it doesn't
|
2019-05-20 03:22:14 +10:00
|
|
|
; matter that we didn't find our symbol. Return success anyhow.
|
|
|
|
; Otherwise return error. Z is already unset, so in fact, this is the
|
|
|
|
; same as jumping to zasmIsFirstPass
|
2019-12-30 09:37:04 +11:00
|
|
|
; however, before we do, load DE with zero. Returning dummy non-zero
|
2019-11-14 13:14:29 +11:00
|
|
|
; values can have weird consequence (such as false overflow errors).
|
2019-12-30 09:37:04 +11:00
|
|
|
ld de, 0
|
2019-05-20 03:22:14 +10:00
|
|
|
jp zasmIsFirstPass
|
2019-05-20 23:17:50 +10:00
|
|
|
|
2019-12-31 11:24:53 +11:00
|
|
|
.PC:
|
|
|
|
ex de, hl
|
|
|
|
call zasmGetPC ; --> HL
|
2019-12-30 09:37:04 +11:00
|
|
|
ex de, hl ; result in DE
|
2019-12-31 11:24:53 +11:00
|
|
|
inc hl ; char after last read
|
|
|
|
; Z already set from cp '$'
|
|
|
|
ret
|
|
|
|
|
|
|
|
.lastVal:
|
|
|
|
; last val
|
|
|
|
ld de, (DIREC_LASTVAL)
|
|
|
|
inc hl ; char after last read
|
|
|
|
; Z already set from cp '@'
|
2019-05-20 23:17:50 +10:00
|
|
|
ret
|