From bc48df9f7162a4a816fdc0edaa6ed08304008c9c Mon Sep 17 00:00:00 2001 From: gbc dev Date: Sat, 4 Jul 2026 22:11:10 +0200 Subject: core emulator: SM83 CPU, MMU, timer, PPU, CGB support Passes blargg cpu_instrs (all 11), instr_timing, mem_timing. --- src/main.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/main.c (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..27e886a --- /dev/null +++ b/src/main.c @@ -0,0 +1,41 @@ +#include "gb.h" +#include "cpu.h" +#include +#include +#include + +int main(int argc, char **argv) { + if (argc < 2) { + fprintf(stderr, "usage: %s [--test seconds]\n", argv[0]); + return 1; + } + const char *rom = argv[1]; + bool test = false; + double seconds = 30.0; + for (int i = 2; i < argc; i++) { + if (!strcmp(argv[i], "--test")) { + test = true; + if (i + 1 < argc) seconds = atof(argv[++i]); + } + } + + GB *gb = calloc(1, sizeof(GB)); + if (cart_load(&gb->cart, rom) != 0) return 1; + gb_reset(gb); + + if (test) { + gb->serial_log = true; + u64 target = (u64)(seconds * 4194304.0); + while (gb->cycles < target) cpu_step(gb); + fprintf(stderr, "\n[ran %llu cycles]\n", (unsigned long long)gb->cycles); + cart_free(&gb->cart); + free(gb); + return 0; + } + + // TODO: interactive terminal rendering + fprintf(stderr, "interactive mode not yet implemented; use --test\n"); + cart_free(&gb->cart); + free(gb); + return 0; +} -- cgit v1.3.1-sl0p