NSRT Header support part 1.
This commit is contained in:
@@ -294,7 +294,7 @@ GUIloadfilename:
|
|||||||
call SetupROM
|
call SetupROM
|
||||||
call showinfogui
|
call showinfogui
|
||||||
call initsnes
|
call initsnes
|
||||||
mov byte[snesmouse],0
|
;mov byte[snesmouse],0
|
||||||
mov byte[sramsavedis],0
|
mov byte[sramsavedis],0
|
||||||
mov eax,regsbackup
|
mov eax,regsbackup
|
||||||
mov ebx,sndrot
|
mov ebx,sndrot
|
||||||
|
|||||||
@@ -704,8 +704,28 @@ void SplitSupport()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool NSRTHead(unsigned char *ROM)
|
||||||
|
{
|
||||||
|
unsigned char *NSRTHead = ROM + 0x1D0; //NSRT Header Location
|
||||||
|
|
||||||
|
if (!strncmp("NSRT", (char*)&NSRTHead[24],4) && NSRTHead[28] == 22)
|
||||||
|
{
|
||||||
|
if (sum(NSRTHead, 32) & 0xFF != NSRTHead[30] ||
|
||||||
|
NSRTHead[30] + NSRTHead[31] != 255 ||
|
||||||
|
(NSRTHead[0] & 0x0F) > 13 ||
|
||||||
|
((NSRTHead[0] & 0xF0) >> 4) > 3 ||
|
||||||
|
((NSRTHead[0] & 0xF0) >> 4) == 0)
|
||||||
|
{
|
||||||
|
return(false); //Corrupt
|
||||||
|
}
|
||||||
|
return(true); //NSRT header
|
||||||
|
}
|
||||||
|
return(false); //None
|
||||||
|
}
|
||||||
|
|
||||||
extern bool Sup48mbit;
|
extern bool Sup48mbit;
|
||||||
extern bool Sup16mbit;
|
extern bool Sup16mbit;
|
||||||
|
extern unsigned char snesmouse;
|
||||||
void findZipIPS(char *);
|
void findZipIPS(char *);
|
||||||
void loadROM()
|
void loadROM()
|
||||||
{
|
{
|
||||||
@@ -752,39 +772,67 @@ void loadROM()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
int HeadRemain = (curromspace & 0x7FFF);
|
int HeadRemain = (curromspace & 0x7FFF);
|
||||||
switch(HeadRemain)
|
switch(HeadRemain)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 512:
|
case 512:
|
||||||
Header512 = true;
|
Header512 = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
//SMC/SWC header
|
|
||||||
if (romdata[8] == 0xAA && romdata[9]==0xBB && romdata[10]== 4)
|
|
||||||
{
|
{
|
||||||
Header512 = true;
|
unsigned char *ROM = (unsigned char *)romdata;
|
||||||
|
|
||||||
|
//SMC/SWC header
|
||||||
|
if (ROM[8] == 0xAA && ROM[9]==0xBB && ROM[10]== 4)
|
||||||
|
{
|
||||||
|
Header512 = true;
|
||||||
|
}
|
||||||
|
//FIG header
|
||||||
|
else if ((ROM[4] == 0x77 && ROM[5] == 0x83) ||
|
||||||
|
(ROM[4] == 0xDD && ROM[5] == 0x82) ||
|
||||||
|
(ROM[4] == 0xDD && ROM[5] == 2) ||
|
||||||
|
(ROM[4] == 0xF7 && ROM[5] == 0x83) ||
|
||||||
|
(ROM[4] == 0xFD && ROM[5] == 0x82) ||
|
||||||
|
(ROM[4] == 0x00 && ROM[5] == 0x80) ||
|
||||||
|
(ROM[4] == 0x47 && ROM[5] == 0x83) ||
|
||||||
|
(ROM[4] == 0x11 && ROM[5] == 2))
|
||||||
|
{
|
||||||
|
Header512 = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
//FIG header
|
|
||||||
else if ((romdata[4] == 0x77 && romdata[5] == 0x83) ||
|
|
||||||
(romdata[4] == 0xDD && romdata[5] == 0x82) ||
|
|
||||||
(romdata[4] == 0xDD && romdata[5] == 2) ||
|
|
||||||
(romdata[4] == 0xF7 && romdata[5] == 0x83) ||
|
|
||||||
(romdata[4] == 0xFD && romdata[5] == 0x82) ||
|
|
||||||
(romdata[4] == 0x00 && romdata[5] == 0x80) ||
|
|
||||||
(romdata[4] == 0x47 && romdata[5] == 0x83) ||
|
|
||||||
(romdata[4] == 0x11 && romdata[5] == 2))
|
|
||||||
{
|
|
||||||
Header512 = true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
snesmouse = 0;
|
||||||
|
|
||||||
if (Header512)
|
if (Header512)
|
||||||
{
|
{
|
||||||
|
unsigned char *ROM = (unsigned char *)romdata;
|
||||||
|
if (NSRTHead(ROM))
|
||||||
|
{
|
||||||
|
switch (ROM[0x1ED])
|
||||||
|
{
|
||||||
|
case 0: default: break;
|
||||||
|
|
||||||
|
case 0x01: snesmouse = 2; break; //Mouse port 2
|
||||||
|
case 0x03: snesmouse = 3; break; //Super Scope port 2
|
||||||
|
case 0x04: break; //Super Scope or Gamepad port 2
|
||||||
|
case 0x05: snesmouse = 4; break; //Justifier (Lethal Enforcer gun) port 2
|
||||||
|
case 0x06: break; //Multitap port 2
|
||||||
|
case 0x08: break; //Mouse or Multitap port 2
|
||||||
|
case 0x10: snesmouse = 1; break; //Mouse port 1
|
||||||
|
case 0x20: break; //Mouse or Gamepad port 1
|
||||||
|
case 0x22: break; //Mouse or Gamepad port 1 and port 2
|
||||||
|
case 0x27: break; //Mouse or Gamepad port 1, Mouse, Super Scope, or Gamepad port 2
|
||||||
|
|
||||||
|
case 0x99: break; //Lasabirdie
|
||||||
|
case 0x0A: break; //Barcode Battler
|
||||||
|
}
|
||||||
|
}
|
||||||
curromspace -= 512;
|
curromspace -= 512;
|
||||||
memmove((unsigned char *)romdata, ((unsigned char *)romdata)+512, curromspace);
|
memmove((unsigned char *)romdata, ((unsigned char *)romdata)+512, curromspace);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user