+; Core instruction basic acceptance tests.
+insntest:
+ ld hl, .insnteststr
+ call puts
+
+ ; Test PUSH and POP.
+ ld b, $12
+ ld c, $34
+ ld d, $56
+ ld e, $78
+ push bc
+ pop de
+ ld hl, .pushpopfail
+ ld a, d
+ cp b
+ jr nz,.fail
+ ld a, e
+ cp c
+ jr nz,.fail
+
+ ; Test ALU (HL).
+ ld hl, .ff
+ ld a, $FF
+ xor [hl]
+ ld hl, .xorhlfail
+ jr nz, .fail
+
+ ; Test JP (HL)
+ ld hl, .jphl
+ jp [hl]
+ ld hl, .jphlfail
+ jr .fail
+ rst $00
+.jphl:
+
+ ; Test JR
+ ld a, $FF
+ ld b, $00
+ cp b
+ jr nz,.jr
+ ld hl, .jrfail
+ jr .fail
+ rst $00
+.jr:
+
+ ; Test CP.
+ ld hl, .cpfail
+ ld a, $10
+ ld b, $20
+ cp b
+ jr nc,.fail
+ ld a, $20
+ ld b, $10
+ cp b
+ jr c,.fail
+
+ ; Test CPL
+ ld hl, .cplfail
+ ld a, $55
+ ld b, $AA
+ cpl
+ cp b
+ jr nz,.fail
+
+ ld hl, .ok
+ call puts
+ ret
+.fail:
+ call puts
+ ld hl, .testfailed
+ call puts
+ ret
+.insnteststr:
+ db "Testing instructions... ",0
+.pushpopfail:
+ db "PUSH/POP",0
+.ff:
+ db $FF
+.xorhlfail:
+ db "XOR [HL]",0
+.jphlfail:
+ db "JP [HL]",0
+.jrfail:
+ db "JR",0
+.cpfail:
+ db "CP",0
+.cplfail:
+ db "CPL",0
+.testfailed:
+ db " test failed.",$0D,$0A,0
+.ok:
+ db "OK!",$0D,$0A,0
+
+; Serial port manipulation functions.