jp test .inc "core.asm" .inc "parse.asm" zasmGetPC: ret testNum: .db 1 test: ld hl, 0xffff ld sp, hl call testParseHex call testParseHexPair call testParseArgs ; success xor a halt testParseHex: ld a, '8' call parseHex jp c, fail cp 8 jp nz, fail call nexttest ld a, 'e' call parseHex jp c, fail cp 0xe jp nz, fail call nexttest ld a, 'x' call parseHex jp nc, fail call nexttest ret testParseHexPair: ld hl, .s99 call parseHexPair jp c, fail cp 0x99 jp nz, fail call nexttest ld hl, .saB call parseHexPair jp c, fail cp 0xab jp nz, fail call nexttest ld hl, .sFoo call parseHexPair jp nc, fail call nexttest ret .sFoo: .db "Foo", 0 .saB: .db "aB", 0 .s99: .db "99", 0 testParseArgs: ld hl, .t1+7 ld de, .t1 ld iy, .t1+3 call .testargs ld hl, .t2+7 ld de, .t2 ld iy, .t2+3 call .testargs ld hl, .t3+7 ld de, .t3 ld iy, .t3+3 call .testargs ret ; HL and DE must be set, and IY must point to expected results in IX ; Expected results are 4 bytes: arg count, then the 3 expected bytes .testargs: ld ix, sandbox call parseArgs jp nz, fail cp (iy) jp nz, fail ld a, (ix) cp (iy+1) jp nz, fail ld a, (ix+1) cp (iy+2) jp nz, fail ld a, (ix+2) cp (iy+3) jp nz, fail ret ; Test data format: 3 bytes specs, one byte expected A, 3 bytes expected (IX), ; then the arg string. ; Empty args with empty specs .t1: .db 0b0000, 0b0000, 0b0000 .db 0, 0, 0, 0 .db 0 ; One arg, one byte spec .t2: .db 0b0001, 0b0000, 0b0000 .db 1, 0xe4, 0, 0 .db "e4", 0 ; 3 args, 3 bytes spec .t3: .db 0b0001, 0b0001, 0b0001 .db 3, 0xe4, 0xab, 0x99 .db "e4 ab 99", 0 nexttest: ld a, (testNum) inc a ld (testNum), a ret fail: ld a, (testNum) halt ; used as RAM sandbox: