#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; }