Closed vitorsilverio closed 5 years ago
Based on test http://gbdev.gg8.se/files/roms/blargg-gb-tests/cpu_instrs.zip
; Tests SP/HL instructions ;.define PRINT_CHECKSUMS 1 .include "shell.inc" .include "instr_test.s" instrs: .byte $33,0,0 ; INC SP .byte $3B,0,0 ; DEC SP .byte $39,0,0 ; ADD HL,SP .byte $F9,0,0 ; LD SP,HL .byte $E8,$01,0 ; ADD SP,1 .byte $E8,$FF,0 ; ADD SP,-1 .byte $F8,$01,0 ; LD HL,SP+1 .byte $F8,$FF,0 ; LD HL,SP-1 instrs_end: test_instr: ; C = flags register ld c,$00 call test ld c,$F0 call test ret test: ; Go through each value for HL ld hl,values hl_loop: ld e,(hl) inc hl ld d,(hl) inc hl push hl ; Go through each value for SP ld hl,values values_loop: push bc push de push hl push bc pop af ; Switch stack ld (temp),sp ld a,(hl+) ld h,(hl) ld l,a ; call print_regs ld sp,hl ; Set registers ld h,d ld l,e ld a,$12 ld bc,$5691 ld de,$9ABC jp instr instr_done: ; Save new SP and switch to yet another stack ld (temp+2),sp ld sp,$DF70 call checksum_af_bc_de_hl ; Checksum SP ld a,(temp+2) call update_crc_fast ld a,(temp+3) call update_crc_fast ldsp temp pop hl pop de pop bc inc hl inc hl ld a,l cp <values_end jr nz,values_loop pop hl ld a,l cp <values_end jr nz,hl_loop ret values: .word $0000,$0001,$000F,$0010,$001F,$007F,$0080,$00FF .word $0100,$0F00,$1F00,$1000,$7FFF,$8000,$FFFF values_end: .word $0000,$0001,$000F,$0010,$001F,$007F,$0080,$00FF .word $0100,$0F00,$1F00,$1000,$7FFF,$8000,$FFFF checksums: .byte $BC,$F4,$CD,$8C,$C7,$5E,$89,$E5,$36,$65,$21,$55,$D6,$6A,$2A,$FF .byte $EB,$34,$37,$B9,$08,$5F,$22,$13,$B6,$2A,$37,$C3,$72,$43,$5C,$4D
Not sure why its failure, but it needs debuging
Fixed by 5591019ad611983eb4ed2ae1dd3a089eb98f757c
Based on test http://gbdev.gg8.se/files/roms/blargg-gb-tests/cpu_instrs.zip