int main() { printf("This is NES emulator on STM32F103\r\n"); //init_test_rom(&hdr, ROM, pattern_table); init_test_rom(&hdr, ROM, pattern_table); clear_screen(WHITE); //clear_screen(BLACK); // Set LCD window for fast drawing // Direction tft_ili9325_wr_cmd(0x03, 0x1028); // set GRAM write direction and BGR = 1. // Window tft_ili9325_wr_cmd(0x50, 0); tft_ili9325_wr_cmd(0x51, 239); tft_ili9325_wr_cmd(0x52, 0); tft_ili9325_wr_cmd(0x53, 255); // VRAM start tft_ili9325_wr_cmd(0x20, 0); tft_ili9325_wr_cmd(0x21, 0); // GRAM register ready to write tft_ili9325_wr_reg(0x22); emulator_init(); //update_regs(); //ppu_print_status(&ppu); while (1) { step(); //update_regs(); //delay(9999); } return 0; }
int main(int argc, char **argv) { emulator_init(&cmips_emu); cmips_emu.err_disp = catch_errs; parse_args(argc, argv, &cmips_arg_state); if (!cmips_arg_state.quiet) printf("%s", version_text); if (cmips_arg_state.run) emulator_run(&cmips_emu); if (!cmips_arg_state.noinput) run_input_loop(); emulator_clear(&cmips_emu); return 0; }
int main(int argc, char** argv) { int i; unsigned int cmd; unsigned int val; unsigned int addr; char* file_path; clear_screen(); #ifdef DEBUG_MODE for (i = 0; i < argc; ++i) debug_message("argv[%2d] : '%s'", i, argv[i]); #endif printf("This is NES emulator.\n"); if (argc >= 2) { char* arg = argv[1]; int arg_len = strlen(arg); if (arg_len == 2) { if (arg[0] == '-' && (arg[1] == 't' || arg[1] == 'T')) // TEST ROM init_test_rom(&hdr, ROM, pattern_table); else if (arg[0] == '-' && (arg[1] == 'd' || arg[1] == 'D')) // Dumped image { FILE* rom_image; FILE* chr_image; if (argc < 3) return 1; #if defined _WIN32 && defined _MSC_VER fopen_s(&rom_image, argv[2], "rb"); fopen_s(&chr_image, argv[3], "rb"); #elif defined __linux__ || defined __GNUC__ rom_image = fopen(argv[2], "rb"); chr_image = fopen(argv[3], "rb"); #endif if (!rom_image || !chr_image) { debug_message("Could not open dumped ROM image!"); return 1; } if (fread(ROM, ROM_SIZE, 1, rom_image) != 1) return 1; if (fread(pattern_table, PPU_PATTERN_TABLE_SIZE, 1, chr_image) != 1) return 1; fclose(rom_image); fclose(chr_image); } else if (arg[0] == '-' && (arg[1] == 'r' || arg[1] == 'R')) { if (argc < 3) { debug_message("File name required."); return 1; } if (dump_test_rom(argv[2]) != 1) { debug_message("Could not dump test ROM!"); return 1; } debug_message("Test ROM dumped!"); return 0; } else { debug_message("Invalid command line arguments!"); return 1; } } else { file_path = argv[1]; if (read_rom_image(file_path) != 1) { printf("Reading ROM image failed!\n"); return 1; } } } else if (argc < 2) { printf("Emulation failed! No ROM image supplied!\n"); return 1; } if (emulator_init() != 1) { printf("Emulator initialization failed!\n"); return 1; } run(); // Comment this line for debuging. //clear_screen(); gotoxy(REGS_X, REGS_Y); update_regs(); gotoxy(CMD_X, CMD_Y); while (!finished_emulation) { clear_cmd_line(); cmd = getch(); putchar(cmd); switch (cmd) { case 's': case 'S': step(); update_regs(); break; // Finish emulation case 'q': case 'Q': finished_emulation = 1; break; case 'w': case 'W': if (scanf_s("%4x %2x", &addr, &val)) write(addr, val); break; case 'r': case 'R': if (scanf_s("%4x", &addr)) { val = read(addr); printf(" $%04x : %02X", addr, val); } break; case 'd': case 'D': if (scanf_s("%4x %u", &addr, &val)) for (i = 0; i < (int)val; ++i) printf("\n %04X : %02X\n", addr + i, read(addr + i)); break; case 'h': case 'H': printf("\n" " S : Step\n" " Q : Quit\n" " W Addr Val : Write memory\n" " R Addr : Read memory\n" " D Addr Sz : Dump memory\n" " C Val : Run for Val cycles\n" " H : Help\n" " E : Run to PC equals to Val\n" ); break; case 'a': case 'A': if (scanf_s("%2x", &val)) write_a(&p, val); break; case 'x': case 'X': if (scanf_s("%2x", &val)) write_x(&p, val); break; case 'y': case 'Y': if (scanf_s("%2x", &val)) write_y(&p, val); break; case 'p': case 'P': if (scanf_s("%2x", &val)) write_p(&p, val | FLAG_1); break; case 'c': case 'C': if (scanf_s("%u", &val)) { run_cycles(val); update_regs(); } break; case 'e': case 'E': if (scanf_s("%4x", &val)) { while (p.pc.w != val) step(); update_regs(); } break; default: break; } } emulator_close(); return 0; }
int main(int argc, char** argv) { int i; int cmd; unsigned int val; unsigned int addr; printf("This is Atari 2600 emulator!\n\n"); // Print command line arguments. debug_message("argc : %d", argc); #if DEBUG_MODE for (i = 0; i < argc; ++i) debug_message("argv[%2d] : %s", i, argv[i]); #endif if (argc < 2) { printf("Emulation failed! No ROM image supplied!\n"); return 1; } if (emulator_init() != 1) { printf("Emulator initialization failed!\n"); return 1; } init_console(); gotoxy(REGS_X, REGS_Y); update_regs(); while (!finished_emulation) { clear_cmd_line(); cmd = getch(); switch (cmd) { case 'q': case 'Q': finished_emulation = 1; break; case 's': case 'S': step(); update_regs(); break; case 'c': case 'C': if (scanf_s("%u", &val)) { run_cycles((int)val); update_regs(); } break; case 'r': case 'R': if (scanf_s("%4x", &addr)) { val = read((uint16_t)addr); printf(" $%04x : $%02x", addr, val); } break; } } emulator_close(); return 0; }