7cf3ed38da
Most of register fiddling routines (which is now the only thing contained in care.asm) are used by almost all userspace apps, often in inner loops. That makes the penalty of using jump tables for those a bit too high. Moreover, it burdens jump tables needlessly. Because this unit is very small (now that string routines are out), it makes sense to always include it in binaries.
143 lines
1.9 KiB
NASM
143 lines
1.9 KiB
NASM
.equ RAMSTART 0x4000
|
|
.equ ZASM_REG_MAXCNT 0xff
|
|
.equ ZASM_LREG_MAXCNT 0x40
|
|
.equ ZASM_REG_BUFSZ 0x1000
|
|
.equ ZASM_LREG_BUFSZ 0x200
|
|
|
|
; declare DIREC_LASTVAL manually so that we don't have to include directive.asm
|
|
.equ DIREC_LASTVAL RAMSTART
|
|
|
|
jp test
|
|
|
|
.inc "core.asm"
|
|
.inc "str.asm"
|
|
.inc "parse.asm"
|
|
.inc "lib/util.asm"
|
|
.inc "zasm/util.asm"
|
|
.inc "zasm/const.asm"
|
|
.inc "lib/parse.asm"
|
|
.inc "zasm/parse.asm"
|
|
.equ SYM_RAMSTART DIREC_LASTVAL+2
|
|
.inc "zasm/symbol.asm"
|
|
.inc "zasm/expr.asm"
|
|
|
|
; Pretend that we aren't in first pass
|
|
zasmIsFirstPass:
|
|
jp unsetZ
|
|
|
|
zasmGetPC:
|
|
ret
|
|
|
|
testNum: .db 1
|
|
|
|
s1: .db "2+2", 0
|
|
s2: .db "0x4001+0x22", 0
|
|
s3: .db "FOO+BAR", 0
|
|
s4: .db "BAR*3", 0
|
|
s5: .db "FOO-3", 0
|
|
s6: .db "FOO+BAR*4", 0
|
|
|
|
sFOO: .db "FOO", 0
|
|
sBAR: .db "BAR", 0
|
|
|
|
test:
|
|
ld hl, 0xffff
|
|
ld sp, hl
|
|
|
|
ld hl, s1
|
|
call parseExpr
|
|
jp nz, fail
|
|
push ix \ pop hl
|
|
ld a, h
|
|
or a
|
|
jp nz, fail
|
|
ld a, l
|
|
cp 4
|
|
jp nz, fail
|
|
call nexttest
|
|
|
|
ld hl, s2
|
|
call parseExpr
|
|
jp nz, fail
|
|
push ix \ pop hl
|
|
ld a, h
|
|
cp 0x40
|
|
jp nz, fail
|
|
ld a, l
|
|
cp 0x23
|
|
jp nz, fail
|
|
call nexttest
|
|
|
|
; before the next test, let's set up FOO and BAR symbols
|
|
call symInit
|
|
ld hl, sFOO
|
|
ld de, 0x4000
|
|
call symRegisterGlobal
|
|
jp nz, fail
|
|
ld hl, sBAR
|
|
ld de, 0x20
|
|
call symRegisterGlobal
|
|
jp nz, fail
|
|
|
|
ld hl, s3
|
|
call parseExpr
|
|
jp nz, fail
|
|
push ix \ pop hl
|
|
ld a, h
|
|
cp 0x40
|
|
jp nz, fail
|
|
ld a, l
|
|
cp 0x20
|
|
jp nz, fail
|
|
call nexttest
|
|
|
|
ld hl, s4
|
|
call parseExpr
|
|
jp nz, fail
|
|
push ix \ pop hl
|
|
ld a, h
|
|
or a
|
|
jp nz, fail
|
|
ld a, l
|
|
cp 0x60
|
|
jp nz, fail
|
|
call nexttest
|
|
|
|
ld hl, s5
|
|
call parseExpr
|
|
jp nz, fail
|
|
push ix \ pop hl
|
|
ld a, h
|
|
cp 0x3f
|
|
jp nz, fail
|
|
ld a, l
|
|
cp 0xfd
|
|
jp nz, fail
|
|
call nexttest
|
|
|
|
ld hl, s6
|
|
call parseExpr
|
|
jp nz, fail
|
|
push ix \ pop hl
|
|
ld a, h
|
|
cp 0x40
|
|
jp nz, fail
|
|
ld a, l
|
|
cp 0x80
|
|
jp nz, fail
|
|
call nexttest
|
|
|
|
; success
|
|
xor a
|
|
halt
|
|
|
|
nexttest:
|
|
ld a, (testNum)
|
|
inc a
|
|
ld (testNum), a
|
|
ret
|
|
|
|
fail:
|
|
ld a, (testNum)
|
|
halt
|