ld a, $41 ; print A
call putc
.noprint:
+ inc [hl]
ld a, [hl]
- add 1
ld c, $51
ld [c], a
- ld [hl], a
POP HL
POP DE
cpl
cp $AA
jr nz,.fail
+
+ ; Test DI/EI delay
+ di
+ ld hl, .difail
+ ld c, $0F ; First, wait until an interrupt happens...
+.wait: ld a, [c]
+ cp 0
+ jr z, .wait
+ ei ; Now make sure that an IRQ didn't happen on EI/DI
+ di
+ ld a, [c]
+ cp 0
+ jr z, .fail
+ ei ; Make sure that an IRQ does happen on EI/NOP/DI
+ nop
+ di
+ ld a, [c]
+ cp 0
+ jr nz, .fail
+ ei
ld hl, .ok
call puts
ret
.fail:
+ ei
call puts
ld hl, .testfailed
call puts
db "CPL",0
.inc16fail:
db "INC16",0
+.difail:
+ db "DI/EI delay",0
.testfailed:
db " test failed.",$0D,$0A,0
.ok: