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.
111 lines
2.5 KiB
ArmAsm
111 lines
2.5 KiB
ArmAsm
; 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,
|