diff options
Diffstat (limited to 'src/main.c')
| -rw-r--r-- | src/main.c | 41 |
1 files changed, 41 insertions, 0 deletions
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 <stdio.h> +#include <stdlib.h> +#include <string.h> + +int main(int argc, char **argv) { + if (argc < 2) { + fprintf(stderr, "usage: %s <rom> [--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; +} |
