1
0
mirror of https://github.com/hsoft/collapseos.git synced 2024-12-27 17:48:05 +11:00
collapseos/apps/zasm/parse.asm

46 lines
1.2 KiB
NASM
Raw Normal View History

2019-05-11 11:19:34 +10:00
; Parse string in (HL) and return its numerical value whether its a number
; literal or a symbol. Returns value in DE.
; 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:
call isLiteralPrefix
jp z, parseLiteral
; Not a number. try symbol
2019-10-05 10:26:21 +10:00
ld a, (hl)
cp '$'
jr z, .PC
2019-10-05 10:26:21 +10:00
cp '@'
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
call symFindVal ; --> DE
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
; however, before we do, load DE with zero. Returning dummy non-zero
; values can have weird consequence (such as false overflow errors).
ld de, 0
2019-05-20 03:22:14 +10:00
jp zasmIsFirstPass
.PC:
ex de, hl
call zasmGetPC ; --> HL
ex de, hl ; result in DE
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 '@'
ret