NSRT Header support part 1.

This commit is contained in:
n-a-c-h
2004-05-03 08:09:47 +00:00
parent b1eb4ca504
commit 120faab71a
2 changed files with 71 additions and 23 deletions

View File

@@ -294,7 +294,7 @@ GUIloadfilename:
call SetupROM
call showinfogui
call initsnes
mov byte[snesmouse],0
;mov byte[snesmouse],0
mov byte[sramsavedis],0
mov eax,regsbackup
mov ebx,sndrot

View File

@@ -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 Sup16mbit;
extern unsigned char snesmouse;
void findZipIPS(char *);
void loadROM()
{
@@ -752,39 +772,67 @@ void loadROM()
else
{
int HeadRemain = (curromspace & 0x7FFF);
switch(HeadRemain)
switch(HeadRemain)
{
case 0:
break;
break;
case 512:
Header512 = true;
break;
case 512:
Header512 = true;
break;
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)
{
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;
memmove((unsigned char *)romdata, ((unsigned char *)romdata)+512, curromspace);
}