Пример #1
0
void tc8830f_device::reset()
{
	m_stream->update();

	m_playing = false;
	m_address = 0x100;
	m_bitcount = 0;
	m_cmd_rw = 0;

	// in cpu control, enter play mode and reset bitrate
	write_p(1);
	write_p(6);
	write_p(0);
}
Пример #2
0
void trialmoves(position p, int verbose) {
    int m;
    while (p.w < 0) {
        if (verbose)
            write_p(stdout,p,0);
        else
            write_pq(stdout,p);
        printf("Side %d, enter move: ",p.s);
        scanf("%d",&m);
        if (m < 0 || m >= PITS || !bin(p,m)) {
            printf("Invalid move\n");
            continue;
        }
        move(&p,m);
    }
}
// ---------------------------------------------------------------------------
//
// ------------
bool bXMapTopoCheck::process(int msg, void* prm){
_bTrace_("bXMapTopoCheck::process",true);
    switch(msg){
        case kExtProcessCallFromIntf:
            write_p();
            break;
        case kExtProcessCallWithParams:
            break;
        case kExtProcessCallWithXMLTree:
            break;
        case kExtProcessCallGetData:
            _tm_("kExtProcessCallGetData "+_prm.activated);
            *((topocheck_prm*)prm)=_prm;
            break;
        case kExtProcessCallSetData:
            _prm=*((topocheck_prm*)prm);
            _tm_("kExtProcessCallSetData "+_prm.activated);
            break;
        default:
            return(false);
    }
    return(true);
}
Пример #4
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;
}
// ---------------------------------------------------------------------------
//
// ------------
void bXMapTopoCheck::close(){
    bStdXMap::close();
    write_p();
    _types.reset();
}
// ---------------------------------------------------------------------------
//
// ------------
bool bXMapNetClean::process(int msg, void* prm){
_bTrace_("bXMapNetClean::process",true);
netcleancfg_prm*	cp;
netcleanact_prm*	ap;
bool				b;
    
    switch(msg){
        case kExtProcessCallFromIntf:
            _silent=false;
            process_network(true);
            break;
        case kExtProcessCallWithParams:
            ap=(netcleanact_prm*)prm;
            _silent=false;
            process_network(false);
            break;
        case kExtProcessCallWithXMLTree:{
            if(countelements()==6){
                init_data();

char                    val[_values_length_max_];
bGenericXMLBaseElement*	elt;
                elt=getelement(1);
                elt->getvalue(val);
                _act_prm.create_nodes=atoi(val);

                if(_act_prm.create_nodes){
                    elt=getelement(2);
                    elt->getvalue(val);
                    _act_prm.cut_edges=atoi(val);
                }
                else{
                    _act_prm.cut_edges=false;
                }

                elt=getelement(3);
                elt->getvalue(val);
                _act_prm.join_on_nodes=atoi(val);

                elt=getelement(4);
                elt->getvalue(val);
                _act_prm.join_on_edges=atoi(val);
                if(_act_prm.join_on_nodes&&_act_prm.join_on_edges){
                    _act_prm.join_on_edges=false;
                }
                
                elt=getelement(5);
                elt->getvalue(val);
                _act_prm.check_nodes=atoi(val);

                elt=getelement(6);
                elt->getvalue(val);
                _act_prm.check_edges=atoi(val);

                _silent=true;
                process_network(false);
                
                _nodes.reset();
                _edges.reset();
            }
            else{
                return(false);
            }
            }
            break;
        case kExtProcessCallGetData:
_tm_("kExtProcessCallGetData");
            cp=(netcleancfg_prm*)prm;
            if(cp->nodes){
                cp->nodes->reset();
                b=(*cp->nodes)+_nodes;
            }
            if(cp->edges){
                cp->edges->reset();
                b=(*cp->edges)+_edges;
            }
            cp->tnod=_cfg_prm.tnod;
            cp->stnod=_cfg_prm.stnod;
            strcpy(cp->name,_cfg_prm.name);
            cp->tbdg=_cfg_prm.tbdg;
            cp->stbdg=_cfg_prm.stbdg;
            cp->dnod=_cfg_prm.dnod;
            cp->dbdg=_cfg_prm.dbdg;
            cp->autoclean=_cfg_prm.autoclean;
            break;
        case kExtProcessCallSetData:
_tm_("kExtProcessCallSetData");
            cp=(netcleancfg_prm*)prm;
            if(cp->nodes){
                _nodes.reset();
                b=_nodes+(*cp->nodes);
            }
            if(cp->edges){
                _edges.reset();
                b=_edges+(*cp->edges);
            }
            _cfg_prm.tnod=cp->tnod;
            _cfg_prm.stnod=cp->stnod;
            strcpy(_cfg_prm.name,cp->name);
            _cfg_prm.tbdg=cp->tbdg;
            _cfg_prm.stbdg=cp->stbdg;
            _cfg_prm.dnod=cp->dnod;
            _cfg_prm.dbdg=cp->dbdg;
            _cfg_prm.autoclean=cp->autoclean;
            write_p();
            break;
        default:
            return(false);
    }
    return(true);
}
// ---------------------------------------------------------------------------
//
// ------------
void bXMapNetClean::close(){
    bStdXMap::close();
    write_p();
    _nodes.reset();
    _edges.reset();
}
Пример #8
0
int main(int argc, char* argv[])
{
	if (argc != 2) {
		fprintf(stderr, "[-] Error: usage: %s config_file\n", argv[0]);
		return EXIT_FAILURE;
	}

	char* filename = argv[1];

	FILE* fp = fopen(filename, "r");
	if (!fp) {
		fprintf(stderr, "[-] Error: failed to open file %s\n", filename);
		return EXIT_FAILURE;
	}

	/* File buffer */
	char* buffer;
	int nbytes = 128;

	buffer = (char*)malloc(2048*sizeof(char));

	/* Parsing vars */
	int m_size;
	int p_id;
	int p_size;
	int r_page;
	int r_id;
	int w_page;
	int w_id;
	int e_id;

	init_process_table();

	/* Main loop */
	while ((getline(&buffer, (size_t*)&nbytes, fp) != -1)) {

		/* Todas as operações começam com letras diferentes */
		switch(buffer[0]) {
			case 'M': /* MEMSIZE SIZE */
			case 'm':
				parse_memsize(buffer, &m_size);
				printf("[+] MEMSIZE %d\n", m_size);
				memsize(m_size);
				break;

			case 'P': /* PROCSIZE ID SIZE */
			case 'p':
				parse_procsize(buffer, &p_id, &p_size);
				printf("[+] PROCSIZE %d %d\n", p_id, p_size);
				procsize(p_id, p_size);
				break;

			case 'R': /* READ PAGE ID */
			case 'r':
				parse_read(buffer, &r_page, &r_id);
				printf("[+] READ %d %d\n", r_page, r_id);
				read_p(r_page, r_id);
				break;

			case 'W': /* WRITE PAGE ID */
			case 'w':
				parse_write(buffer, &w_page, &w_id);
				printf("[+] WRITE %d %d\n", w_page, w_id);
				write_p(w_page, w_id);
				break;

			case 'E': /* ENDPROC ID */
			case 'e':
				parse_endproc(buffer, &e_id);
				printf("[+] ENDPROC %d\n", e_id);
				endproc(e_id);
				break;

			default:
				printf("[-] Invalid Operation!\n");
		}
	}

	/* Write stats here */
	write_stats();

	fclose(fp);
	return EXIT_SUCCESS;
}