This commit is contained in:
CaH4e3 2010-07-22 21:04:09 +00:00
parent f4535346fb
commit a501682e0f
5 changed files with 133 additions and 111 deletions

View File

@ -501,25 +501,28 @@ HANDLE mapRAM;
void win_AllocBuffers(uint8 **GameMemBlock, uint8 **RAM) void win_AllocBuffers(uint8 **GameMemBlock, uint8 **RAM)
{ {
mapGameMemBlock = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE, 0, 131072,"fceu.GameMemBlock"); mapGameMemBlock = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE, 0, 131072,"fceu.GameMemBlock");
if(mapGameMemBlock == NULL || GetLastError() == ERROR_ALREADY_EXISTS) if(mapGameMemBlock == NULL || GetLastError() == ERROR_ALREADY_EXISTS)
*GameMemBlock = (uint8 *) malloc(131072);
else
if((*GameMemBlock = (uint8 *)MapViewOfFile(mapGameMemBlock, FILE_MAP_WRITE, 0, 0, 0)) == NULL)
{ {
//mbg 7/28/06 - is this the proper error handling?
//do we need to indicate to user somehow that this failed in this emu instance?
CloseHandle(mapGameMemBlock); CloseHandle(mapGameMemBlock);
mapGameMemBlock = NULL; mapGameMemBlock = NULL;
*GameMemBlock = (uint8 *) malloc(131072); *GameMemBlock = (uint8 *) malloc(131072);
*RAM = (uint8 *) malloc(2048);
} }
mapRAM = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE, 0, 0x800,"fceu.RAM");
if(mapRAM == NULL || GetLastError() == ERROR_ALREADY_EXISTS)
*RAM = (uint8 *) malloc(2048);
else else
{ {
*GameMemBlock = (uint8 *)MapViewOfFile(mapGameMemBlock, FILE_MAP_WRITE, 0, 0, 0); if((*RAM = (uint8 *)MapViewOfFile(mapRAM, FILE_MAP_WRITE, 0, 0, 0)) == NULL)
{
// set up shared memory mappings CloseHandle(mapRAM);
mapRAM = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE, 0, 0x800,"fceu.RAM"); mapRAM = NULL;
*RAM = (uint8 *)MapViewOfFile(mapRAM, FILE_MAP_WRITE, 0, 0, 0); *RAM = (uint8 *) malloc(2048);
} }
}
} }
@ -528,27 +531,23 @@ void win_FreeBuffers(uint8 *GameMemBlock, uint8 *RAM)
//clean up shared memory //clean up shared memory
if(mapRAM) if(mapRAM)
{ {
UnmapViewOfFile(mapRAM);
CloseHandle(mapRAM); CloseHandle(mapRAM);
RAM = NULL; mapRAM = NULL;
CloseHandle(RAM);
} }
else else
{
free(RAM); free(RAM);
RAM = NULL; RAM = NULL;
}
if(mapGameMemBlock) if(mapGameMemBlock)
{ {
UnmapViewOfFile(mapGameMemBlock);
CloseHandle(mapGameMemBlock); CloseHandle(mapGameMemBlock);
GameMemBlock = NULL; mapGameMemBlock = NULL;
CloseHandle(GameMemBlock);
} }
else else
{
free(GameMemBlock); free(GameMemBlock);
GameMemBlock = NULL; GameMemBlock = NULL;
} }
}
#endif #endif
void do_exit() void do_exit()

View File

@ -231,7 +231,7 @@ static int InitBPPStuff(int fs)
int SetVideoMode(int fs) int SetVideoMode(int fs)
{ {
int specmul; // Special scaler size multiplier int specmul = 1; // Special scaler size multiplier
if(fs) if(fs)

View File

@ -342,7 +342,8 @@ static void AllocBuffers()
#endif #endif
} }
static void FreeBuffers() { static void FreeBuffers()
{
#ifdef _USE_SHARED_MEMORY_ #ifdef _USE_SHARED_MEMORY_
void win_FreeBuffers(uint8 *GameMemBlock, uint8 *RAM); void win_FreeBuffers(uint8 *GameMemBlock, uint8 *RAM);
win_FreeBuffers(GameMemBlock, RAM); win_FreeBuffers(GameMemBlock, RAM);

View File

@ -56,7 +56,7 @@ iNES_HEADER head ;
#ifdef _USE_SHARED_MEMORY_ #ifdef _USE_SHARED_MEMORY_
HANDLE mapROM, mapVROM; HANDLE mapROM = NULL, mapVROM = NULL;
#endif #endif
static CartInfo iNESCart; static CartInfo iNESCart;
@ -130,33 +130,29 @@ void iNESGI(GI h) //bbit edited: removed static keyword
{ {
if(mapROM) if(mapROM)
{ {
UnmapViewOfFile(mapROM);
CloseHandle(mapROM); CloseHandle(mapROM);
ROM=0; mapROM = NULL;
UnmapViewOfFile(ROM);
} }
else else
{
free(ROM); free(ROM);
ROM = NULL; ROM = NULL;
} }
}
if(VROM) if(VROM)
{ {
if(mapVROM) if(mapVROM)
{ {
UnmapViewOfFile(mapVROM);
CloseHandle(mapVROM); CloseHandle(mapVROM);
VROM=0; mapVROM = NULL;
UnmapViewOfFile(VROM);
} }
else else
{
free(VROM); free(VROM);
VROM = NULL; VROM = NULL;
} }
}
#else #else
if(ROM) {free(ROM);ROM=0;} if(ROM) {free(ROM); ROM = NULL;}
if(VROM) {free(VROM);VROM=0;} if(VROM) {free(VROM); VROM = NULL;}
#endif #endif
if(MapClose) MapClose(); if(MapClose) MapClose();
if(trainerpoo) {FCEU_gfree(trainerpoo);trainerpoo=0;} if(trainerpoo) {FCEU_gfree(trainerpoo);trainerpoo=0;}
@ -424,8 +420,9 @@ static void CheckHInfo(void)
#ifdef _USE_SHARED_MEMORY_ #ifdef _USE_SHARED_MEMORY_
if(mapVROM) if(mapVROM)
{ {
UnmapViewOfFile(mapVROM);
CloseHandle(mapVROM); CloseHandle(mapVROM);
UnmapViewOfFile(VROM);
mapVROM = NULL;
} }
else else
{ {
@ -434,7 +431,7 @@ static void CheckHInfo(void)
#else #else
free(VROM); free(VROM);
#endif #endif
VROM=0; VROM = NULL;
tofix|=8; tofix|=8;
} }
if(MapperNo!=(moo[x].mapper&0xFF)) if(MapperNo!=(moo[x].mapper&0xFF))
@ -740,48 +737,67 @@ int iNESLoad(const char *name, FCEUFILE *fp, int OverwriteVidMode)
mapROM = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE, 0, ROM_size<<14,"fceu.ROM"); mapROM = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE, 0, ROM_size<<14,"fceu.ROM");
if(mapROM == NULL || GetLastError() == ERROR_ALREADY_EXISTS) if(mapROM == NULL || GetLastError() == ERROR_ALREADY_EXISTS)
{ {
mapROM = NULL; if((ROM = (uint8 *)FCEU_malloc(ROM_size<<14)) == NULL) return 0;
}
else
{
if((ROM = (uint8 *)MapViewOfFile(mapROM, FILE_MAP_WRITE, 0, 0, 0)) == NULL)
{
CloseHandle(mapROM); CloseHandle(mapROM);
mapROM = NULL;
if(!(ROM=(uint8 *)FCEU_malloc(ROM_size<<14))) if((ROM = (uint8 *)FCEU_malloc(ROM_size<<14)) == NULL) return 0;
return 0; }
}
if(VROM_size) if(VROM_size)
{ {
if(!(VROM=(uint8 *)FCEU_malloc(VROM_size<<13))) mapVROM = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE, 0, VROM_size<<13,"fceu.VROM");
if(mapVROM == NULL || GetLastError() == ERROR_ALREADY_EXISTS)
{ {
if((VROM=(uint8 *)FCEU_malloc(VROM_size<<13)) == NULL)
{
if(mapROM)
{
UnmapViewOfFile(mapROM);
mapROM = NULL;
CloseHandle(ROM);
}
else
free(ROM);
ROM = NULL;
return 0;
}
}
else
{
if((VROM = (uint8 *)MapViewOfFile(mapVROM, FILE_MAP_WRITE, 0, 0, 0)) == NULL)
{
CloseHandle(mapVROM);
mapVROM = NULL;
if((VROM=(uint8 *)FCEU_malloc(VROM_size<<13)) == NULL)
{
if(mapROM)
{
UnmapViewOfFile(mapROM);
mapROM = NULL;
CloseHandle(ROM);
}
else
free(ROM); free(ROM);
ROM = NULL; ROM = NULL;
return 0; return 0;
} }
} }
} }
else
{
ROM = (uint8 *)MapViewOfFile(mapROM, FILE_MAP_WRITE, 0, 0, 0);
if( !ROM ) return 0;
if(VROM_size)
{
mapVROM = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE, 0, VROM_size<<13,"fceu.VROM");
VROM = (uint8 *)MapViewOfFile(mapVROM, FILE_MAP_WRITE, 0, 0, 0);
if( !VROM )
{
UnmapViewOfFile(mapROM);
CloseHandle(mapROM);
return 0;
}
}
} }
#else #else
if(!(ROM=(uint8 *)FCEU_malloc(ROM_size<<14))) if((ROM = (uint8 *)FCEU_malloc(ROM_size<<14)) == NULL) return 0;
return 0;
if(VROM_size) if(VROM_size)
{ {
if(!(VROM=(uint8 *)FCEU_malloc(VROM_size<<13))) if((VROM = (uint8 *)FCEU_malloc(VROM_size<<13)) == NULL)
{ {
free(ROM); free(ROM);
ROM = NULL;
return 0; return 0;
} }
} }
@ -1488,14 +1504,19 @@ static int NewiNES_Init(int num)
{ {
CloseHandle(mapVROM); CloseHandle(mapVROM);
mapVROM = NULL; mapVROM = NULL;
VROM=(uint8 *)malloc(CHRRAMSize); if((VROM = (uint8 *)malloc(CHRRAMSize)) == NULL) return 0;
} }
else else
{ {
VROM = (uint8 *)MapViewOfFile(mapVROM, FILE_MAP_WRITE, 0, 0, 0); if((VROM = (uint8 *)MapViewOfFile(mapVROM, FILE_MAP_WRITE, 0, 0, 0)) == NULL)
{
CloseHandle(mapVROM);
mapVROM = NULL;
if((VROM = (uint8 *)malloc(CHRRAMSize)) == NULL) return 0;
}
} }
#else #else
VROM=(uint8 *)malloc(CHRRAMSize); if((VROM = (uint8 *)malloc(CHRRAMSize)) == NULL) return 0;
#endif #endif
UNIFchrrama=VROM; UNIFchrrama=VROM;
SetupCartCHRMapping(0,VROM,CHRRAMSize,1); SetupCartCHRMapping(0,VROM,CHRRAMSize,1);
@ -1504,9 +1525,9 @@ static int NewiNES_Init(int num)
if(head.ROM_type&8) if(head.ROM_type&8)
AddExState(ExtraNTARAM, 2048, 0, "EXNR"); AddExState(ExtraNTARAM, 2048, 0, "EXNR");
tmp->init(&iNESCart); tmp->init(&iNESCart);
return(1); return 1;
} }
tmp++; tmp++;
} }
return(0); return 0;
} }

View File

@ -37,6 +37,7 @@ static DECLFW(Mapper25_write)
VROM_BANK1(0x0000,0xFC); VROM_BANK1(0x0000,0xFC);
VROM_BANK1(0x0400,0xFD); VROM_BANK1(0x0400,0xFD);
VROM_BANK1(0x0800,0xFF); VROM_BANK1(0x0800,0xFF);
VROM_BANK1(0x0c00,0xCF);
} }
A=(A&0xF003)|((A&0xC)>>2); A=(A&0xF003)|((A&0xC)>>2);