Exemplo n.º 1
0
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)
		;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
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;
}
Exemplo n.º 4
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;
}