X-Git-Url: http://git.joshuawise.com/fpgaboy.git/blobdiff_plain/f888201b9894683abfff012bd68b641319fb2744..f9000d73c8971e2e6323122efb06bcfd846b5d62:/diag.asm diff --git a/diag.asm b/diag.asm index 28fce99..55127f8 100644 --- a/diag.asm +++ b/diag.asm @@ -13,7 +13,8 @@ main: ld hl, $DF81 xor a - ld [hl], a + ld [hli], a + ld [hli], a ld hl, signon call puts @@ -44,15 +45,17 @@ irqhand: ld c, $0F ; ack the irq ld [c], a + ld hl, $DF82 + ld a, [hld] + cp 0 + jr z, .noprint ld a, $41 ; print A call putc - - ld hl, $DF81 +.noprint: + inc [hl] ld a, [hl] - add 1 ld c, $51 ld [c], a - ld [hl], a POP HL POP DE @@ -138,6 +141,10 @@ puthex: ; Put two hex nibbles to the serial console. waitsw: ld hl,waitswstr call puts + + ld hl,$DF82 + ld a, 1 + ld [hl], a ld c, $51 xor a @@ -227,11 +234,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 @@ -254,6 +282,8 @@ insntest: db "CPL",0 .inc16fail: db "INC16",0 +.difail: + db "DI/EI delay",0 .testfailed: db " test failed.",$0D,$0A,0 .ok: