Port of showinfogui to C, now really easy to maintain.

This commit is contained in:
grinvader
2005-02-28 22:16:25 +00:00
parent c0f0e799f7
commit 101f6bd6b7
3 changed files with 95 additions and 218 deletions

View File

@@ -668,9 +668,9 @@ extern char *ZOpenFileName;
bool Header512;
extern char CSStatus[41];
extern char CSStatus2[41];
extern char CSStatus3[41];
extern char CSStatus[40];
extern char CSStatus2[40];
extern char CSStatus3[40];
extern bool RomInfo;
char *lastROMFileName;
void DumpROMLoadInfo()
@@ -1711,8 +1711,92 @@ void SPC7_Convert_Lower()
}
}
extern unsigned int crc32_table[256];
unsigned int CalcCRC32 (unsigned char *start, unsigned int size)
{
unsigned int i, result=0xFFFFFFFF;
for (i=0 ; i<size ; i++)
{
result = (result >> 8) ^ (crc32_table[(result ^ (*(start+i))) & 0xFF]);
}
return (~result);
}
extern unsigned int MsgCount, MessageOn, CRC32;
extern unsigned char IPSPatched, *Msgptr;
unsigned int showinfogui()
{
unsigned int i;
unsigned char *ROM = (unsigned char *)romdata;
if (infoloc == 0x40FFC0) { memcpy (CSStatus2+23, "EHi ", 4); }
else
{
if (romtype == 2) { memcpy (CSStatus2+23, "Hi ", 4); }
else { memcpy (CSStatus2+23, "Lo ", 4); }
}
for (i=0 ; i<20 ; i++)
{
CSStatus[i] = (ROM[infoloc + i]) ? ROM[infoloc + i] : 32;
}
if ((ROM[infoloc + 25] < 2 ) || (ROM[infoloc + 25] > 12))
{
memcpy (CSStatus3+6, "NTSC", 4);
}
else { memcpy (CSStatus3+6, "PAL ", 4); }
if (IPSPatched) { memcpy (CSStatus3+16, "IPS ", 4); }
else { memcpy (CSStatus3+16, " ", 4); }
memcpy (CSStatus+29, "NORMAL ", 8);
if (SA1Enable) { memcpy (CSStatus+29, "SA-1 ", 8); }
if (RTCEnable) { memcpy (CSStatus+29, "RTC ", 8); }
if (SPC7110Enable) { memcpy (CSStatus+29, "SPC7110 ", 8); }
if (SFXEnable) { memcpy (CSStatus+29, "SUPER FX", 8); }
if (C4Enable) { memcpy (CSStatus+29, "C4 ", 8); }
if (DSP1Enable) { memcpy (CSStatus+29, "DSP-1 ", 8); }
if (DSP2Enable) { memcpy (CSStatus+29, "DSP-2 ", 8); }
if (DSP3Enable) { memcpy (CSStatus+29, "DSP-3 ", 8); }
if (DSP4Enable) { memcpy (CSStatus+29, "DSP-4 ", 8); }
if (SDD1Enable) { memcpy (CSStatus+29, "S-DD1 ", 8); }
if (OBCEnable) { memcpy (CSStatus+29, "OBC1 ", 8); }
if (SETAEnable) { memcpy (CSStatus+29, "SETA DSP", 8); }
if (ST18Enable) { memcpy (CSStatus+29, "ST018 ", 8); }
if (SGBEnable) { memcpy (CSStatus+29, "SGB ", 8); }
if (BSEnable) { memcpy (CSStatus+29, "BROADCST", 8);
// dummy out date so CRC32 matches
ROM[infoloc + 22] = 0x42;
ROM[infoloc + 23] = 0x00;
// 42 is the answer, and the uCONSRT standard
}
if (Interleaved) { memcpy (CSStatus2+12, "Yes ", 4); }
else { memcpy (CSStatus2+12, "No ", 4); }
// calculate CRC32 for the whole ROM, or Add-on ROM only
CRC32 = (SplittedROM) ? CalcCRC32(ROM+addOnStart, addOnSize) : CalcCRC32(ROM, NumofBytes);
// place CRC32 on line
sprintf (CSStatus3+32, "%08X", CRC32);
CalcChecksum();
i = (SplittedROM) ? infoloc + 0x1E + addOnStart: infoloc + 0x1E;
if ((ROM[i] == (Checksumvalue & 0xFF)) && (ROM[i+1] == (Checksumvalue >> 8)))
{ memcpy (CSStatus2+36, "OK ", 4); }
else { memcpy (CSStatus2+36, "FAIL", 4); }
DumpROMLoadInfo();
MessageOn = 300;
Msgptr = CSStatus;
return (MsgCount);
}