Пример #1
0
static int load_rom_gfx1(void)
{
	int i, res;
	char fname[32], *parent;

	if ((memory_region_gfx1 = memalign(MEM_ALIGN, memory_length_gfx1)) == NULL)
	{
		error_memory("REGION_GFX1");
		return 0;
	}
	memset(memory_region_gfx1, 0, memory_length_gfx1);

	parent = strlen(parent_name) ? parent_name : NULL;

	for (i = 0; i < num_gfx1rom; )
	{
		strcpy(fname, gfx1rom[i].name);
		if ((res = file_open(game_name, parent, gfx1rom[i].crc, fname)) < 0)
		{
			if (res == -2)
				error_crc(fname);
			else
				error_file(fname);
			return 0;
		}

		msg_printf(TEXT(LOADING), fname);

		i = rom_load(gfx1rom, memory_region_gfx1, i, num_gfx1rom);

		file_close();
	}

	return 1;
}
Пример #2
0
int loader_init(char *romfile)
{
	char *name, *p;

	sprintf(rtcfile, "%s.rtc", romfile);
	if (!rom_load(romfile))
		return 0;

	//init rtc
	/*if (rtc)*/ {
		struct tm *Tm;
		unsigned long i;
		//february is always 28,....
		unsigned long month_len[12]={31,28,31,30,31,30,31,31,30,31,30,31};

		rtc.last=time(NULL);
		Tm=localtime(&rtc.last);

		rtc.d=(int)Tm->tm_wday;

		for (i=0;i<Tm->tm_mon;i++) {
			rtc.d+=month_len[i];
		}

		rtc.h=(int)Tm->tm_hour;
		rtc.m=(int)Tm->tm_min;
		rtc.s=(int)Tm->tm_sec;
		rtc.t=(int)0;
	}

	rtc_load();
	return 1;
}
Пример #3
0
bool mem_load_rom(memory_t *mem, const char *filename)
{
    memset(&(mem->meta), 0, sizeof(mem->meta));
    
    if (mem->rom != NULL) {
        free(mem->rom);
    }

    mem->rom = rom_load(&(mem->meta), filename);

    if (mem->rom == NULL) {
        return false;
    }

    assert(mem->meta.cart_type < 0x02);

    if (memory_controllers[mem->meta.cart_type].init != NULL) {
        memory_controllers[mem->meta.cart_type].init(mem);
        mem->controller = memory_controllers[mem->meta.cart_type].handler;
    } else {
        return false;
    }
    
    // TODO: Check minimum number of banks?

    change_mappings(mem, 0, 4, mem->rom);

    return true;
}
Пример #4
0
void loader_init(char *s)
{
	char *name, *p;

	romfile = s;
	rom_load();
	vid_settitle(rom.name);
	

	name = strdup(base(romfile));
	p = (char *) strchr(name, '.');
	if (p) *p = 0;

	sramfile = malloc(strlen(savedir) + strlen(name) + 7);
	sprintf(sramfile, "%s%s.sav", savedir, name);
	rtcfile = malloc(strlen(savedir) + strlen(name) + 7);
	sprintf(rtcfile, "%s%s.rtc", savedir, name);
	
	printf("Loading sramfile: %s\n", sramfile);
	printf("Loading rtcfile: %s\n", rtcfile);

	sram_load();
	rtc_load();

}
Пример #5
0
bool WabbitemuApp::OnInit()
{
	wxImage::AddHandler(new wxPNGHandler);
	//stolen from the windows version
	ParseCommandLineArgs();

	memset(frames, 0, sizeof(frames));
	LPCALC lpCalc = calc_slot_new();
	LoadSettings(lpCalc);
	
	WabbitemuFrame *frame;
	int result = rom_load(lpCalc, lpCalc->rom_path);
	if (result == TRUE) {
		frame = gui_frame(lpCalc);
	} else {
		calc_slot_free(lpCalc);
		BOOL loadedRom = FALSE;
		if (parsedArgs.num_rom_files > 0) {
			for (int i = 0; i < parsedArgs.num_rom_files; i++) {
				if (rom_load(lpCalc, parsedArgs.rom_files[i])) {
					gui_frame(lpCalc);
					loadedRom = TRUE;
					break;
				}
			}
		}
		if (!loadedRom) {
			bool success = DoRomWizard();
			if (!success) {
				return FALSE;
			}
		}
	}
	LoadCommandlineFiles((INT_PTR) lpCalc, LoadToLPCALC);
	timer = new wxTimer();
	timer->Connect(wxEVT_TIMER, (wxObjectEventFunction) &WabbitemuApp::OnTimer);
	timer->Start(TPF, false);
	return TRUE;
}
Пример #6
0
void loader_init(char *s)
{
	char *name, *p;
	DIR* dir;
        printf("%s - %s\n",s,savedir);
//	sys_checkdir(savedir, 1); /* needs to be writable */
	dir=opendir(savedir);
	if(!dir) {
	  mkdir(savedir,0);
          printf("Savedir created!");
        }         
	else closedir(dir);
	romfile = s;
      printf("Loading rom...\n");
	rom_load();
      printf("Rom loaded!\n");

	vid_settitle(rom.name);

        
	if (savename && *savename)
	{
		if (savename[0] == '-' && savename[1] == 0)
			name = ldup(rom.name);
		else name = strdup(savename);
	}
	else if (romfile && *base(romfile) && strcmp(romfile, "-"))
	{
		name = strdup(base(romfile));
		p = strchr(name, '.');
		if (p) *p = 0;
	}
	else name = ldup(rom.name);
     // name=rom.name;

	saveprefix = malloc(strlen(savedir) + strlen(name) + 2);
	sprintf(saveprefix, "%s/%s", savedir, name);

	sramfile = malloc(strlen(saveprefix) + 5);
	strcpy(sramfile, saveprefix);
	strcat(sramfile, ".sav");

	rtcfile = malloc(strlen(saveprefix) + 5);
	strcpy(rtcfile, saveprefix);
	strcat(rtcfile, ".rtc");
	printf("before sram / rtc load ...");
	sram_load();
	rtc_load();
        printf("       done\n");
//	atexit(cleanup);
}
Пример #7
0
int loadrom(char *fn)
{
	log_message("loadrom: loading rom '%s'\n",fn);
	unloadrom();
	if(((rom = rom_load(fn)) == 0) || (nes_load(rom) != 0)) {
		log_message("loadrom: error loading rom '%s'\n",fn);
		return(1);
	}
	if(rom->diskdata)
		loaddiskstate();
//	if(config.autostates)
//		loadstate();
	nes_reset(1);	//perform hard reset
	add_recent(fn);
	return(0);
}
Пример #8
0
void loader_init(char *s)
{
	char *name, *p;

	sys_checkdir(savedir, 1); /* needs to be writable */

	romfile = s;
	rom_load();
	vid_settitle(rom.name);
	if (savename && *savename)
	{
		if (savename[0] == '-' && savename[1] == 0)
			name = ldup(rom.name);
		else name = strdup(savename);
	}
	else if (romfile && *base(romfile) && strcmp(romfile, "-"))
	{
		name = strdup(base(romfile));
		p = strchr(name, '.');
		if (p) *p = 0;
	}
	else name = ldup(rom.name);
	
	saveprefix = malloc(strlen(savedir) + strlen(name) + 2);
	sprintf(saveprefix, "%s/%s", savedir, name);

	sramfile = malloc(strlen(saveprefix) + 5);
	strcpy(sramfile, saveprefix);
	strcat(sramfile, ".sav");

	rtcfile = malloc(strlen(saveprefix) + 5);
	strcpy(rtcfile, saveprefix);
	strcat(rtcfile, ".rtc");
	
	sram_load();
	rtc_load();

	atexit(cleanup);
}
Пример #9
0
static LINK_ERR SendFile(const LPCALC lpCalc, LPCTSTR lpszFileName, SEND_FLAG Destination)
{
	TIFILE_t *var = importvar(lpszFileName, FALSE);

	BOOL exec_vio_backup = break_on_exe_violation;
	break_on_exe_violation = false;
	LINK_ERR result;
	if (var != NULL) {
		switch(var->type)
		{
		case GROUP_TYPE:
		case VAR_TYPE:
		case FLASH_TYPE:
			{
				if (lpCalc->cpu.pio.link == NULL) {
					result = LERR_MODEL;
					//81 for now
					break;
				}

				lpCalc->cpu.pio.link->vlink_size = var->length;
				lpCalc->cpu.pio.link->vlink_send = 0;
				BOOL running_backup = lpCalc->running;
				// if we just started running, calc_turn_on may be running
				while (lpCalc->fake_running) { }
				lpCalc->fake_running = TRUE;

				result = link_send_var(&lpCalc->cpu, var, (SEND_FLAG) Destination);
				if (var->type == FLASH_TYPE)
				{
					if (var->flash->type == FLASH_TYPE_OS) {
						calc_reset(lpCalc);
						//calc_turn_on(lpCalc);
					} else {
						// Rebuild the app list
						applist_t applist;
						state_build_applist(&lpCalc->cpu, &applist);

						u_int i;
						for (i = 0; i < applist.count; i++) {
							if (_tcsncmp((TCHAR *) var->flash->name, applist.apps[i].name, 8) == 0) {
								lpCalc->last_transferred_app = applist.apps[i];
								break;
							}
						}
					}
				}

				lpCalc->fake_running = FALSE;
				lpCalc->running = running_backup;
				break;
			}
		case BACKUP_TYPE:
			lpCalc->cpu.pio.link->vlink_size = var->length;
			lpCalc->cpu.pio.link->vlink_send = 0;
			result = link_send_backup(&lpCalc->cpu, var);
			break;
		case ZIP_TYPE: {
			WIN32_FIND_DATA FindFileData;
			HANDLE hFind;
			TCHAR path[MAX_PATH];
			TCHAR search[MAX_PATH];
			GetStorageString(path, sizeof(path));
			StringCbCat(path, sizeof(path), _T("Zip\\"));
			StringCbCopy(search, sizeof(search), path);
			StringCbCat(search, sizeof(search), _T("*"));
			hFind = FindFirstFile(search, &FindFileData);
			if (hFind == INVALID_HANDLE_VALUE) {
				result = LERR_FILE;
				break;
			} else if (!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
				TCHAR filename[MAX_PATH];
				StringCbCopy(filename, sizeof(filename), path);
				StringCbCat(filename, sizeof(filename), FindFileData.cFileName);
				SendFileToCalc(NULL, lpCalc, filename, FALSE, Destination);
				SendFileToCalc(NULL, lpCalc, filename, FALSE, Destination);
			}
			while (FindNextFile(hFind, &FindFileData)) {
				if (!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
					TCHAR filename[MAX_PATH];
					StringCbCopy(filename, sizeof(filename), path);
					StringCbCat(filename, sizeof(filename), FindFileData.cFileName);
					SendFileToCalc(NULL, lpCalc, filename, FALSE, Destination);
					DeleteFile(filename);
				}
			}
			FindClose(hFind);
			DeleteFile(path);
			result = LERR_SUCCESS;
			break;
		}
		case ROM_TYPE:
		case SAV_TYPE: {
			if (rom_load(lpCalc, lpszFileName) == TRUE) {
				result = LERR_SUCCESS;
			} else {
				result = LERR_LINK;
			}

			FreeTiFile(var);
			var = NULL;
			break;
		}
		case LABEL_TYPE: {
			VoidLabels(lpCalc);
			labels_app_load(lpCalc, lpszFileName);
			result = LERR_SUCCESS;
			break;
		}
		case BREAKPOINT_TYPE:
			break;
		}
		if (var) {
			FreeTiFile(var);
		}
		break_on_exe_violation = exec_vio_backup;
		return result;
	}
	else
	{
		break_on_exe_violation = exec_vio_backup;
		return LERR_FILE;
	}
}
Пример #10
0
void loader_init(char *s)
{
	char *name, *p;

#ifndef __PALM__
//       sys_checkdir(savedir, 1); /* needs to be writable */
#endif
	sprintf(rtcfile, "%s.rtc", s);
	romfile = s;
	rom_load();

#if 0 //ndef __PALM__
	vid_settitle(rom.name);
	if (savename && *savename)
	{
		if (savename[0] == '-' && savename[1] == 0)
			name = ldup(rom.name);
		else name = strdup(savename);
	}
	else if (romfile && *base(romfile) && strcmp(romfile, "-"))
	{
		name = strdup(base(romfile));
		p = (char*)strchr(name, '.');
		if (p) *p = 0;
	}
	else name = ldup(rom.name);

	saveprefix = ljz_malloc(strlen(savedir) + strlen(name) + 2);
	sprintf(saveprefix, "%s/%s", savedir, name);

	sramfile = ljz_malloc(strlen(saveprefix) + 5);
	strcpy(sramfile, saveprefix);
	strcat(sramfile, ".sav");

	rtcfile = ljz_malloc(strlen(saveprefix) + 5);
	strcpy(rtcfile, saveprefix);
	strcat(rtcfile, ".rtc");

#endif
//       sram_load();
#ifndef __PALM__
		//init rtc
		/*if (rtc)*/ {
	    	time_t ltime;
	    	struct tm *Tm;
			unsigned long i;
			//february is always 28,....
			unsigned long month_len[12]={31,28,31,30,31,30,31,31,30,31,30,31};

	    	ltime=time(NULL);
	    	Tm=localtime(&ltime);

			rtc.d=(int)Tm->tm_wday;

			for (i=0;i<Tm->tm_mon;i++) {
				rtc.d+=month_len[i];
			}

			rtc.h=(int)Tm->tm_hour;
			rtc.m=(int)Tm->tm_min;
			rtc.s=(int)Tm->tm_sec;
			rtc.t=(int)0;

	/*		{
				char tmp[16];
				sprintf(tmp,"%d-%d-%d-%d-%d",rtc.d,rtc.h,rtc.m,rtc.s,rtc.t);
				menu_inform(tmp);
			}*/
		}
		
	rtc_load();


	//atexit(cleanup);
#else
	if (rtc.batt)
	{
/*		struct tm *localTime;
		time_t long_time;
		//Get the system time
		time(&long_time);
		localTime = localtime(&long_time);
	//date is an ofs from 01 Jan 1900 00:00:00
		rtc.d=localTime->tm_yday;
		rtc.h=localTime->tm_hour;
		rtc.m=localTime->tm_min;
		rtc.s=localTime->tm_sec;*/
		rtc.t=0;
		rtc.stop=0;
		rtc.carry=0;

		while (rtc.t >= 60) rtc.t -= 60;
		while (rtc.s >= 60) rtc.s -= 60;
		while (rtc.m >= 60) rtc.m -= 60;
		while (rtc.h >= 24) rtc.h -= 24;
		while (rtc.d >= 365) rtc.d -= 365;
		rtc.stop &= 1;
		rtc.carry &= 1;
		//if (rt) rt = (time(0) - rt) * 60;
		//if (syncrtc) while (rt-- > 0) rtc_tick();
	}
#endif
}