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.
99 lines
1.7 KiB
ArmAsm
99 lines
1.7 KiB
ArmAsm
; Multiple checksum table handling
|
|
|
|
.define next_checksum bss+0
|
|
.redefine bss bss+2
|
|
|
|
; If PRINT_CHECKSUMS is defined, checksums are printed
|
|
; rather than compared.
|
|
|
|
; Initializes multiple checksum handler to use checksums
|
|
; table (defined by user).
|
|
; Preserved: BC, DE, HL
|
|
checksums_init:
|
|
ld a,<checksums
|
|
ld (next_checksum),a
|
|
ld a,>checksums
|
|
ld (next_checksum+1),a
|
|
ret
|
|
|
|
; Compares current checksum with next checksum in
|
|
; list. Z if they match, NZ if not.
|
|
; Preserved: BC, DE, HL
|
|
checksums_compare:
|
|
.ifdef PRINT_CHECKSUMS
|
|
lda checksum+3
|
|
push af
|
|
lda checksum+2
|
|
push af
|
|
lda checksum+1
|
|
push af
|
|
lda checksum+0
|
|
push af
|
|
|
|
ld a,(next_checksum)
|
|
inc a
|
|
ld (next_checksum),a
|
|
sub <checksums+1
|
|
and $03
|
|
ld a,','
|
|
jr nz,+
|
|
print_str newline,'.',"byte"
|
|
ld a,' '
|
|
+ call print_char
|
|
|
|
pop af
|
|
call @print_byte
|
|
pop af
|
|
call @print_byte
|
|
pop af
|
|
call @print_byte
|
|
ld a,'$'
|
|
call print_char
|
|
pop af
|
|
call print_hex
|
|
|
|
xor a
|
|
ret
|
|
|
|
@print_byte:
|
|
push af
|
|
ld a,'$'
|
|
call print_char
|
|
pop af
|
|
call print_hex
|
|
ld a,','
|
|
call print_char
|
|
ret
|
|
.else
|
|
|
|
push bc
|
|
push de
|
|
push hl
|
|
ld a,(next_checksum)
|
|
ld l,a
|
|
ld a,(next_checksum+1)
|
|
ld h,a
|
|
ld de,checksum
|
|
ld b,0
|
|
- ld a,(de)
|
|
xor (hl)
|
|
or b
|
|
ld b,a
|
|
inc hl
|
|
inc e
|
|
ld a,e
|
|
cp <(checksum+4)
|
|
jr nz,-
|
|
ld a,l
|
|
ld (next_checksum),a
|
|
ld a,h
|
|
ld (next_checksum+1),a
|
|
|
|
ld a,b
|
|
cp 0
|
|
pop hl
|
|
pop de
|
|
pop bc
|
|
ret
|
|
.endif
|