ld hl,waitswstr
call puts
+ ld c, $07
+ ld a, $07 ;start timer, 4.096KHz
+ ld [c], a
+
ld c, $51
ld a, $00
ld [c],a
+.loop1:
+ push bc
+ call testa
+ pop bc
ld c, $51
ld b, $0
-.loop1:
ld a,[c]
cp b
jr z,.loop1
ret
waitswstr:
- db "Diagnostic ROM complete; flip switches to nonzero and then to zero to reset.",$0D,$0A,0
+ db "Diagnostic ROM complete; flip switches to nonzero and then to zero to reset. Expect A.",$0D,$0A,0
+
+testa:
+ ld c, $0F
+ ld a, [c]
+ ld b, $00
+ cp b
+ ret z
+ xor a
+ ld [c], a
+ ld hl, $D000
+ ld c, [hl]
+ inc bc
+ ld [hl], c
+ ld a, c
+ ld c, $50
+ ld [c], a
+ ret
; Core instruction basic acceptance tests.
insntest:
jr .fail
rst $00
.jr:
+
+ ; Test inc16
+ ld d, $12
+ ld e, $FF
+ ld hl, .inc16fail
+ inc de
+ ld a, $13
+ cp d
+ jr nz, .fail
+ ld a, $00
+ cp e
+ jr nz, .fail
; Test CP.
ld hl, .cpfail
call puts
ret
.fail:
+ call puts
+ ld hl, .testfailed
call puts
ret
.insnteststr:
- db "Testing instructions... ",$0
+ db "Testing instructions... ",0
.pushpopfail:
- db "PUSH/POP test failed.",$0D,$0A,0
+ db "PUSH/POP",0
.ff:
db $FF
.xorhlfail:
- db "XOR [HL] test failed.",$0D,$0A,0
+ db "XOR [HL]",0
.jphlfail:
- db "JP [HL] test failed.",$0D,$0A,0
+ db "JP [HL]",0
.jrfail:
- db "JR test failed.",$0D,$0A,0
+ db "JR",0
.cpfail:
- db "CP test failed.",$0D,$0A,0
+ db "CP",0
.cplfail:
- db "CPL test failed.",$0D,$0A,0
+ db "CPL",0
+.inc16fail:
+ db "INC16",0
+.testfailed:
+ db " test failed.",$0D,$0A,0
.ok:
db "OK!",$0D,$0A,0
; Serial port manipulation functions.
putc:
- push af
ld b, 0
ld c, $50
.waitport:
ld a,[c]
cp b
jr nz,.waitport
- pop af
ld [c],a
ret
ld a, [hli]
ld b, $00
cp b
- jr z, .done
+ ret z
call putc
jr puts
-.done:
- ret
-