int main(void) { const int npass = 300; const int clock_rate = 500; const int dmips = 1757; int run_before2 = run_cycles(); int max_cycles = dhry(2*npass); int run_after2 = run_cycles(); int run_before = run_cycles(); int min_cycles = dhry(npass); int run_after = run_cycles(); int tot_cycles = max_cycles-min_cycles; int cycles_per_dhry = tot_cycles/npass; int dhry_per_mhz = npass*1000000/tot_cycles; int dhry_per_s_at_clock_rate = clock_rate*dhry_per_mhz; int error = clock_rate*1000000 - cycles_per_dhry * dhry_per_s_at_clock_rate; int max_instr = run_after2 - run_before2; int min_instr = run_after - run_before; int ins_per_dhry = (run_after2-run_before2-(run_after-run_before))/npass; printf("%d passes: %d cycles\n", npass, tot_cycles); printf("Cycles/dhrystone: %d\n", cycles_per_dhry); printf("Dhrystone/Mhz: %d\n", dhry_per_mhz); printf("@%dMhz: %d dhry/s\n", clock_rate, dhry_per_s_at_clock_rate); printf("check: %d\n", error ); printf("\n"); printf("With 1 DMIPS = %d dhry/s\n", dmips); printf("Dhrystone MIPS: %d\n", dhry_per_s_at_clock_rate/dmips); printf("\n"); printf("Dhry/mhz (*1000) = %d\n", 569151/cycles_per_dhry); printf("ins/%d: %d\n", 2*npass, run_after2-run_before2); printf("ins/%d: %d\n", npass, run_after-run_before); printf("\n"); printf("ins/dhry %d\n", ins_per_dhry); printf("cyc/dhry %d\n", cycles_per_dhry); printf("cpi (*1000) %d\n", 1000*cycles_per_dhry/ins_per_dhry); printf("dhry/MHz (*1000) = %d\n", 569151/cycles_per_dhry); exit(0); while(1) ; }
int main(void) { uint8_t *fb = FB_BASE; unsigned int index = 0; const unsigned int width = 256; const unsigned int height= 256; const unsigned int size = width * height; unsigned int i, j; #ifdef DO_FILTER printf("Apply filter\n\n"); configure_and_start_dma(size, (unsigned int)image, (unsigned int)dst_buffer); wait_dma(); #endif printf("Copy image to frame buffer\n\n"); index = 0; for (j = 0; j < height; ++j) { for (i = 0; i < width; ++i) { #ifdef DO_FILTER // division by 8 is to normalize // the output of the FIR *fb++ = dst_buffer[index++]>>3; #else *fb++ = image[index++]; #endif } } printf("End\n\n"); printf("cycles %d\n", run_cycles()); exit(0); 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; }