]> Joshua Wise's Git repositories - fpgaboy.git/blobdiff - diag.asm
Some LCDC IRQ stuffs. Working on fixing ldm_a
[fpgaboy.git] / diag.asm
index 786052e76801b8ef901312ad0c2c474d660331e0..8d6aec83a8e18ffc8f5465bf746d278ff4feac09 100644 (file)
--- 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,11 +76,12 @@ irqhand:
        ld a, $41       ; print A
        call putc
 .noprint:
+       ld hl, $DF81
        ld a, [hl]
        add 1
+       ld [hl], a
        ld c, $51
        ld [c], a
-       ld [hl], a
 
        POP HL
        POP DE
@@ -235,11 +260,37 @@ insntest:
        cpl
        cp $AA
        jr nz,.fail
+
+       ; Test DI/EI delay
+       di
+       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
        
        ld hl, .ok
        call puts
        ret
 .fail:
+       ei
        call puts
        ld hl, .testfailed
        call puts
@@ -262,6 +313,10 @@ insntest:
        db "CPL",0
 .inc16fail:
        db "INC16",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:
This page took 0.024242 seconds and 4 git commands to generate.