jp runTests .inc "err.h" .inc "core.asm" .inc "str.asm" .inc "zasm/const.asm" .inc "lib/ari.asm" .inc "lib/util.asm" .inc "zasm/util.asm" .inc "lib/parse.asm" .equ EXPR_PARSE parseLiteral .inc "lib/expr.asm" .equ INS_RAMSTART RAMSTART .inc "zasm/instr.asm" zasmGetPC: ret zasmIsFirstPass: jp unsetZ readWord: readComma: symFindVal: xor a ret ioPutB: push hl ld hl, SPITBOWL push af ld a, (SPITCNT) call addHL inc a ld (SPITCNT), a pop af ld (hl), a pop hl cp a ret runTests: call testMatchArg call testSpitUpcode xor a halt testSpitUpcode: ld iy, .t1 call .test ld iy, .t2 call .test ld iy, .t3 call .test ld iy, .t4 call .test ld iy, .t5 call .test ret .test: ; init spitbowl xor a ld (SPITCNT), a ld (SPITBOWL), a ld (SPITBOWL+1), a ld (SPITBOWL+2), a ld (SPITBOWL+3), a push iy \ pop ix call intoIX ld a, (iy+2) ld (INS_CURARG1), a ld a, (iy+3) ld (INS_CURARG1+1), a ld a, (iy+4) ld (INS_CURARG1+2), a ld a, (iy+5) ld (INS_CURARG2), a ld a, (iy+6) ld (INS_CURARG2+1), a ld a, (iy+7) ld (INS_CURARG2+2), a call spitUpcode jp nz, fail ld a, (SPITCNT) cp (iy+8) jp nz, fail ld a, (SPITBOWL) cp (iy+9) jp nz, fail ld a, (SPITBOWL+1) cp (iy+10) jp nz, fail ld a, (SPITBOWL+2) cp (iy+11) jp nz, fail ld a, (SPITBOWL+3) cp (iy+12) jp nz, fail jp nexttest ; Test data is a argspec pointer in instrTBl followed by 2*3 bytes of CURARG ; followed by the expected spit, 1 byte cnt + 4 bytes spits. .t1: .dw instrTBl+17*6 ; CCF .db 0, 0, 0 .db 0, 0, 0 .db 1, 0x3f, 0, 0, 0 .t2: .dw instrTBl+10*6 ; AND (IX+0x42) .db 'x', 0x42, 0 .db 0, 0, 0 .db 3, 0xdd, 0xa6, 0x42, 0 .t3: .dw instrTBl+13*6 ; BIT 4, (IX+3) .db 'N', 4, 0 .db 'x', 3, 0 .db 4, 0xdd, 0xcb, 0x03, 0x66 .t4: .dw instrTBl+18*6 ; CP (IX+5) .db 'x', 5, 0 .db 0, 0, 0 .db 3, 0xdd, 0xbe, 0x05, 0 .t5: .dw instrTBl+4*6 ; ADD A, (IX+5) .db 'A', 0, 0 .db 'x', 5, 0 .db 3, 0xdd, 0x86, 0x05, 0 testMatchArg: ld iy, .t1 call .test ret .test: ld hl, SPITBOWL ld a, (iy+2) ld (hl), a push iy \ pop de call intoDE push de \ pop ix ld a, (ix+1) call matchArg jp nz, fail ld a, (iy+3) ld (hl), a ld a, (ix+2) call matchArg jp nz, fail jp nexttest ; Test data is argspec pointer followed by two bytes: first bytes of our two ; CURARG. .t1: .dw instrTBl+4*6 ; ADD A, (IX) .db 'A', 'x' nexttest: ld a, (testNum) inc a ld (testNum), a ret fail: ld a, (testNum) halt testNum: .db 1 SPITCNT: .db 0 SPITBOWL: .db 0, 0, 0, 0 DIREC_LASTVAL: .db 0, 0 RAMSTART: