playing-coffee/playing-coffee - Copy/roms/interrupt_time/interrupt_time.s

58 lines
1.1 KiB
ArmAsm

; Tests interrupt handling time for slow and fast
; CPU. First value is CPU speed (0=slow, 1=fast),
; second is number of cycles taken by interrupt.
; Should take 13 cycles at either speed.
.define REQUIRE_CGB 1
.include "shell.inc"
.include "cpu_speed.s"
.include "timer.s"
.include "apu.s"
; $58: JP $DEC3
; $DEC3: RET
.define sint $DEC3
main:
call init_timer
ld d,0
call test_interrupt
ld d,8
call test_interrupt
call cpu_fast
ld d,0
call test_interrupt
ld d,8
call test_interrupt
check_crc $C86CC74D
jp tests_passed
test_interrupt:
call get_cpu_speed
call print_a
call print_d
ld a,$C9 ; RET
ld (sint),a
wreg IE,$08
wreg IF,$00
call start_timer
ei
ld a,d
ld (IF),a ; $00 = 0 clocks, $08 = 13 clocks
di
call stop_timer
sub 3+4 ; instruction overhead
call print_a
call print_newline
ret
; RST handler that matches the one in my devcart
.bank 0 slot 0
.org $58
jp $DEC3