home *** CD-ROM | disk | FTP | other *** search
- ; Z80TEST
- ; tests the validity of a z80 emulation
- ;
-
- ; First we test a few flags to make sure that the emulator works enough
- ; to test itself. Basically we want to make sure we can test the flags
- ; and jump to 0 if the processor does something unexpected. If it passes
- ; all of our tests then the OK string is printed and the program ends.
- ; if there is a problem the program should end just after the problem
- ; instructions. This allows us to examine the debugger output at that
- ; point without having to painstakingly follow the code all the way.
-
- org 100h
-
- ; test some flags flags first
- ld a, 0ffh
- add a, a
- jp nc, 0
-
- ld a, 1
- add a, a
- jp c, 0
-
- xor a, a
- jp nz, 0
-
- inc a
- jp z, 0
-
- dec a
-
- jp m, 0
- dec a
- jp p, 0
-
- ld a, 7fh
- inc a
- jp po, 0
-
- and 0ffh
- jp pe, 0
-
- ; adc and add
- add_test1 macro reg
- ld reg, 34h
- ld a, 21h
- add a, reg
- jp c, 0
- cp 55h
- jp nz, 0
- scf
- ld a, 21h
- adc a, reg
- jp c, 0
- cp 56h
- jp nz, 0
- adc a, a
- jp po, 0
- adc a, a
- jp nc, 0
- ld a, 0fh
- ld reg, 55h
- and reg
- cp 5
- jp nz, 0
- endm
-
- ld hl, test_var
- add_test1 (hl)
- ld ix, test_var - 7
- add_test1 (ix+7)
- ld iy, test_var - 7
- add_test1 (iy+7)
- add_test1 b
- add_test1 c
- add_test1 d
- add_test1 e
- add_test1 h
- add_test1 l
-
- add_test2 macro reg
- ld hl, 1234h
- ld reg, 4321h
- add hl, reg
- jp c, 0
- ld a, l
- cp h
- jp nz, 0
- cp 55h
- jp nz, 0
- scf
- adc hl, hl
- ld a, l
- dec a
- cp h
- jp nz, 0
- cp 0aah
- jp nz, 0
- endm
-
- add_test2 bc
- add_test2 de
- add_test2 sp
-
- add_test3 macro reg
- ld ix, 1234h
- ld reg, 4321h
- add ix, reg
- jp c, 0
- push ix
- pop hl
- ld a, l
- cp h
- jp nz, 0
- cp 55h
- jp nz, 0
- add ix, ix
- push ix
- pop hl
- ld a, l
- cp h
- jp nz, 0
- cp 0aah
- jp nz, 0
- ld iy, 1234h
- ld reg, 4321h
- add iy, reg
- jp c, 0
- push iy
- pop hl
- ld a, l
- cp h
- jp nz, 0
- cp 55h
- jp nz, 0
- add iy, iy
- push iy
- pop hl
- ld a, l
- cp h
- jp nz, 0
- cp 0aah
- jp nz, 0
- endm
-
- add_test3 bc
- add_test3 de
- add_test3 sp
-
- ld a, 21h
- add a, 34h
- jp c, 0
- cp 55h
- jp nz, 0
- scf
- ld a, 21h
- adc a, 34h
- jp c, 0
- cp 56h
- jp nz, 0
- adc a, a
- jp po, 0
- adc a, a
- jp nc, 0
- ld a, 0fh
- and 55h
- cp 5
- jp nz, 0
-
- ; that finishes the As!
-
- ld_imm macro reg
- ld reg, 34h
- ld a, 34h
- cp reg
- jp nz, 0
- endm
- ld_imm a
- ld_imm b
- ld_imm c
- ld_imm d
- ld_imm e
- ld_imm h
- ld_imm l
- ld_imm (hl)
-
- ld de, ok
- ld c, 9
- call 5
- jp 0
-
- ok:
- db 'OK', 0dh, 0ah, '$'
-
- test_var:
- ds 100h
-
-