mirror of
https://github.com/Dillonb/n64.git
synced 2025-04-02 10:42:08 -04:00
50 lines
No EOL
1.3 KiB
C
50 lines
No EOL
1.3 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#define LOG_ENABLED
|
|
#include <log.h>
|
|
#include <system/n64system.h>
|
|
#include <cpu/mips_instructions.h>
|
|
#include <mem/dma.h>
|
|
|
|
#define MAX_STEPS 10000000
|
|
#define TEST_FAILED_REGISTER 30
|
|
|
|
bool test_complete(n64_system_t* system) {
|
|
sdword test_failed = get_register(&system->cpu, TEST_FAILED_REGISTER);
|
|
if (test_failed != 0) {
|
|
if (test_failed != -1) {
|
|
logfatal("Test #%ld failed.", test_failed);
|
|
}
|
|
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
int main(int argc, char** argv) {
|
|
if (argc == 0) {
|
|
logfatal("Pass me a ROM file please");
|
|
}
|
|
|
|
log_set_verbosity(LOG_VERBOSITY_DEBUG);
|
|
|
|
n64_system_t* system = init_n64system(argv[1], false, false, UNKNOWN_VIDEO_TYPE);
|
|
// Normally handled by the bootcode, we gotta do it ourselves.
|
|
run_dma(system, 0x10001000, 0x00001000, 1048576, "CART to DRAM");
|
|
|
|
set_pc_r4300i(&system->cpu, system->mem.rom.header.program_counter);
|
|
|
|
loginfo("Initial PC: 0x%08X\n", system->cpu.pc);
|
|
|
|
int steps = 0;
|
|
for (; steps < MAX_STEPS && !test_complete(system); steps++) {
|
|
n64_system_step(system);
|
|
}
|
|
|
|
if (!test_complete(system)) {
|
|
logfatal("Test timed out after %d steps\n", MAX_STEPS);
|
|
}
|
|
|
|
printf("SUCCESS: all tests passed! Took %d steps.\n", steps);
|
|
} |