X-Git-Url: http://git.joshuawise.com/fpgaboy.git/blobdiff_plain/f9000d73c8971e2e6323122efb06bcfd846b5d62..00573fd53c3dc0b2aca146f085d30801a3aed576:/diag.asm diff --git a/diag.asm b/diag.asm index 55127f8..8d6aec8 100644 --- a/diag.asm +++ b/diag.asm @@ -1,14 +1,27 @@ - SECTION "a",HOME + SECTION "a",HOME[$00] + +start: jp main + + section "vbl",HOME[$40] + jp vbl + + section "lcdc",HOME[$48] + jp lcdc + + section "tmro",HOME[$50] + jp tmro main: - ld c, $51 ; Note that we are alive. ld a, $FF - ld [c],a + ld [$FF51],a + +; ld a, $04 +; ld [$FFFF], a ld sp, $DFF0 - ld c, $07 ld a, $04 ;start timer, 4.096KHz + ld c, $07 ld [c], a ld hl, $DF81 @@ -34,15 +47,26 @@ main: signon: db $0D,$0A,$1B,"[1mFPGABoy Diagnostic ROM",$1B,"[0m",$0D,$0A,0 - section "fuq",HOME[$100] -irqhand: +vbl: +lcdc: + PUSH AF + + xor a + ld c, $0F + ld [c], a + + POP AF + + reti + +tmro: PUSH AF PUSH BC PUSH DE PUSH HL xor a - ld c, $0F ; ack the irq + ld c, $0F ld [c], a ld hl, $DF82 @@ -52,8 +76,10 @@ irqhand: ld a, $41 ; print A call putc .noprint: - inc [hl] + ld hl, $DF81 ld a, [hl] + add 1 + ld [hl], a ld c, $51 ld [c], a @@ -237,20 +263,25 @@ insntest: ; Test DI/EI delay di - ld hl, .difail + ld hl, .dinocausefail ld c, $0F ; First, wait until an interrupt happens... .wait: ld a, [c] + and $04 cp 0 jr z, .wait ei ; Now make sure that an IRQ didn't happen on EI/DI di ld a, [c] + and $04 cp 0 jr z, .fail + ld hl, .dicausefail ei ; Make sure that an IRQ does happen on EI/NOP/DI nop + nop di ld a, [c] + and $04 cp 0 jr nz, .fail ei @@ -282,8 +313,10 @@ insntest: db "CPL",0 .inc16fail: db "INC16",0 -.difail: - db "DI/EI delay",0 +.dinocausefail: + db "DI/EI does not cause interrupt",0 +.dicausefail: + db "DI/NOP/EI cause interrupt",0 .testfailed: db " test failed.",$0D,$0A,0 .ok: