|
- #include <stdio.h>
-
- #include "src/f6502.h"
-
-
- int load(uint8_t* mem, FILE* file) {
- return fread(mem, 65536, 1, file);
- }
-
- void print_registers(const f6502_Registers* regs,
- FILE* file) {
- fprintf(file, "PC: $%04x\n", regs->PC);
- fprintf(file, " S: $%02x\n", regs->S);
- fprintf(file, " A: $%02x\n", regs->A);
- fprintf(file, " X: $%02x\n", regs->X);
- fprintf(file, " Y: $%02x\n", regs->Y);
- fprintf(file, " P: $%02x\n", regs->P);
- }
-
- static f6502_Core core = {0};
-
- int main(int argc, char* argv[]) {
- f6502_init(&core);
-
- if (load(core.memory.ram, stdin) != 1) {
- fprintf(stderr, "Failed to load e6502 memory\n");
- return 1;
- }
-
- core.memory.ram[0xbffc] = 0;
- f6502_reset(&core);
- core.registers.PC = 0x400;
-
- int total_clocks = 0;
- int clocks_elapsed = 1;
-
- while (clocks_elapsed > 0) {
- clocks_elapsed = f6502_step(&core, 1000);
- if (clocks_elapsed < 0) total_clocks -= clocks_elapsed;
- else total_clocks += clocks_elapsed;
- }
-
- fprintf(stdout, "Ran %d\n", total_clocks);
- print_registers(&core.registers, stdout);
-
- return 0;
- }
|