X-Git-Url: http://git.joshuawise.com/fpgaboy.git/blobdiff_plain/7e4f4505e544aaefc0fb3f6d9cd50fcdffc6f677..537e1f833b8eba858c06053ea6006ea608b9a5cc:/diag.asm diff --git a/diag.asm b/diag.asm index 786052e..ff70e07 100644 --- a/diag.asm +++ b/diag.asm @@ -1,15 +1,13 @@ SECTION "a",HOME main: - ld c, $51 ; Note that we are alive. ld a, $FF - ld [c],a + ld [$FF51],a ld sp, $DFF0 - ld c, $07 ld a, $04 ;start timer, 4.096KHz - ld [c], a + ld [$FF07], a ld hl, $DF81 xor a @@ -42,8 +40,7 @@ irqhand: PUSH HL xor a - ld c, $0F ; ack the irq - ld [c], a + ld [$FF0F], a ld hl, $DF82 ld a, [hld] @@ -52,11 +49,9 @@ irqhand: ld a, $41 ; print A call putc .noprint: + inc [hl] ld a, [hl] - add 1 - ld c, $51 - ld [c], a - ld [hl], a + ld [$FF51], a POP HL POP DE @@ -235,11 +230,32 @@ insntest: 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 @@ -262,6 +278,8 @@ insntest: db "CPL",0 .inc16fail: db "INC16",0 +.difail: + db "DI/EI delay",0 .testfailed: db " test failed.",$0D,$0A,0 .ok: