Got it.
https://www.mediafire.com/?s4aenh9h66p7069
Unfinished Checksum Code
//Read the TAB file into memory.
BinaryReader TAB_reader = new BinaryReader(new FileStream(@"tab.bin", FileMode.Open, FileAccess.Read, FileShare.None));
byte[] TAB_data = TAB_reader.ReadBytes(0x200); // Read 512 bytes into an array
TAB_reader.Close();
//Read the WonderCard into memory
BinaryReader WC_reader = new BinaryReader(new FileStream(@"WonderCard.bin", FileMode.Open, FileAccess.Read, FileShare.None));
byte[] WC_data = WC_reader.ReadBytes(0x14D); // Read 332 bytes into an array
WC_reader.Close();
//BinaryReader WC_reader = new BinaryReader(new FileStream(@"GMScript.bin", FileMode.Open, FileAccess.Read, FileShare.None));
//byte[] WC_data = WC_reader.ReadBytes(0x3E8); // Read 1000 bytes into an array
//WC_reader.Close();
Int32 iSeed = 0x8530;
Int32 tabNum;
Int32 tabVal;
foreach (byte curByte in WC_data)
{
tabNum = (iSeed ^ curByte) & 0xFF;
tabVal = TAB_data[(tabNum * 2) + 1] << 8 | TAB_data[tabNum * 2];
byte upper = (byte)(iSeed >> 8);
iSeed = tabVal ^ upper;
}
iSeed = ~iSeed & 0x0000FFFF;
Console.WriteLine("Hexwise result: {0:x}", iSeed);
Console.WriteLine("Bitwise result: {0}", Convert.ToString(iSeed, 2));
Console.ReadLine();
Here's the code for checksum validation. This is only up to the last step in Morfeo's example so it's not providing accurate results yet.
When I get home from work, I'll debug Emerald and see exactly what it's doing with the checksum validation.