Add system-specific boot symbols and CPU instruction tests
Introduced symbol files for various Game Boy systems (CGB, AGB, MGB, SGB) to define boot sequences and functionalities. Included CPU instruction behavior tests, with detailed coverage of standard operations and interrupt handling. Added documentation for test execution and internal framework operations.
This commit is contained in:
110
cpu_instrs/source/08-misc instrs.s
Normal file
110
cpu_instrs/source/08-misc instrs.s
Normal file
@@ -0,0 +1,110 @@
|
||||
; Tests miscellaneous instructions
|
||||
|
||||
;.define PRINT_CHECKSUMS 1
|
||||
.include "shell.inc"
|
||||
.include "instr_test.s"
|
||||
|
||||
instrs:
|
||||
.byte $F0,$91,0 ; LDH A,($91)
|
||||
.byte $E0,$91,0 ; LDH ($91),A
|
||||
.byte $F2,$00,0 ; LDH A,(C)
|
||||
.byte $E2,$00,0 ; LDH (C),A
|
||||
.byte $FA,$91,$FF ; LD A,($FF91)
|
||||
.byte $EA,$91,$FF ; LD ($FF91),A
|
||||
.byte $08,$91,$FF ; LD ($FF91),SP
|
||||
.byte $01,$23,$01 ; LD BC,$0123
|
||||
.byte $11,$23,$01 ; LD DE,$0123
|
||||
.byte $21,$23,$01 ; LD HL,$0123
|
||||
.byte $31,$23,$01 ; LD SP,$0123
|
||||
.byte $F5,0,0 ; PUSH AF
|
||||
.byte $C5,0,0 ; PUSH BC
|
||||
.byte $D5,0,0 ; PUSH DE
|
||||
.byte $E5,0,0 ; PUSH HL
|
||||
.byte $F1,0,0 ; POP AF
|
||||
.byte $C1,0,0 ; POP BC
|
||||
.byte $D1,0,0 ; POP DE
|
||||
.byte $E1,0,0 ; POP HL
|
||||
instrs_end:
|
||||
|
||||
test_instr:
|
||||
; C = flags register
|
||||
ld c,$00
|
||||
call test
|
||||
ld c,$10
|
||||
call test
|
||||
ld c,$E0
|
||||
call test
|
||||
ld c,$F0
|
||||
call test
|
||||
ret
|
||||
|
||||
test:
|
||||
; Fill RAM
|
||||
ld a,$FE
|
||||
ld ($FF90),a
|
||||
ld a,$DC
|
||||
ld ($FF91),a
|
||||
ld a,$BA
|
||||
ld ($FF92),a
|
||||
|
||||
; Fill stack
|
||||
ld a,$13
|
||||
ld ($DF80),a
|
||||
ld a,$57
|
||||
ld ($DF80-1),a
|
||||
ld a,$9B
|
||||
ld ($DF80-2),a
|
||||
ld a,$DF
|
||||
ld ($DF80-3),a
|
||||
|
||||
; Set registers
|
||||
ld b,$12
|
||||
push bc
|
||||
ld bc,$5691
|
||||
ld de,$9ABC
|
||||
ld hl,$DEF0
|
||||
pop af
|
||||
|
||||
; Switch stack
|
||||
ld (temp),sp
|
||||
ld sp,$DF80-2
|
||||
|
||||
jp instr
|
||||
instr_done:
|
||||
; Save new SP and switch to 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
|
||||
|
||||
; Checksum RAM
|
||||
ld a,($FF90)
|
||||
call update_crc_fast
|
||||
ld a,($FF91)
|
||||
call update_crc_fast
|
||||
ld a,($FF92)
|
||||
call update_crc_fast
|
||||
|
||||
; Checksum stack
|
||||
ld a,($DF80)
|
||||
call update_crc_fast
|
||||
ld a,($DF80-1)
|
||||
call update_crc_fast
|
||||
ld a,($DF80-2)
|
||||
call update_crc_fast
|
||||
ld a,($DF80-3)
|
||||
call update_crc_fast
|
||||
|
||||
; Restore SP
|
||||
ldsp temp
|
||||
|
||||
ret
|
||||
|
||||
checksums:
|
||||
.byte $4D,$FF,$15,$97,$6D,$A7,$35,$65,$4D,$FF,$15,$97,$6D,$A7,$35,$65,$4D,$FF,$15,$97,$6D,$A7,$35,$65,$AD,$FA,$5E,$41,$D0,$78,$79,$C1,$AF,$66,$99,$34,$0D,$E1,$97,$99,$6F,$D0,$6F,$5D,$C3,$1F,$A3,$8A,$C2,$F1,$9C,$F3,$C1,$C3,$DC,$78,$C0,$2D,$E3,$01,$8F,$C4,$0F,$44,$95,$22,$6A,$39,$61,$C5,$AB,$55,$FB,$DF,$2C,$52,
|
||||
Reference in New Issue
Block a user