Refactoring complete. Everything works as before
This commit is contained in:
@@ -198,45 +198,6 @@ namespace Core.Cpu
|
||||
return tStates;
|
||||
}
|
||||
|
||||
public void LoadSNA(byte[] snaData)
|
||||
{
|
||||
if (snaData.Length != 49179)
|
||||
throw new Exception("Invalid 48K SNA File Size!");
|
||||
|
||||
// --- 1. Load CPU Registers ---
|
||||
I = snaData[0];
|
||||
HL_Prime.Word = (ushort)(snaData[1] | (snaData[2] << 8));
|
||||
DE_Prime.Word = (ushort)(snaData[3] | (snaData[4] << 8));
|
||||
BC_Prime.Word = (ushort)(snaData[5] | (snaData[6] << 8));
|
||||
AF_Prime.Word = (ushort)(snaData[7] | (snaData[8] << 8));
|
||||
|
||||
HL.Word = (ushort)(snaData[9] | (snaData[10] << 8));
|
||||
DE.Word = (ushort)(snaData[11] | (snaData[12] << 8));
|
||||
BC.Word = (ushort)(snaData[13] | (snaData[14] << 8));
|
||||
IY.Word = (ushort)(snaData[15] | (snaData[16] << 8));
|
||||
IX.Word = (ushort)(snaData[17] | (snaData[18] << 8));
|
||||
|
||||
IFF2 = (snaData[19] & 0x04) != 0;
|
||||
IFF1 = IFF2;
|
||||
R = snaData[20];
|
||||
AF.Word = (ushort)(snaData[21] | (snaData[22] << 8));
|
||||
SP = (ushort)(snaData[23] | (snaData[24] << 8));
|
||||
InterruptMode = snaData[25];
|
||||
|
||||
// --- 2. Load the 48K RAM Dump ---
|
||||
// The RAM dump starts at byte 27 and maps perfectly to 0x4000 -> 0xFFFF
|
||||
for (int i = 0; i < 49152; i++)
|
||||
{
|
||||
WriteMemory((ushort)(0x4000 + i), snaData[27 + i]);
|
||||
}
|
||||
|
||||
// --- 3. The Magic Bullet ---
|
||||
// In the SNA format, the Program Counter (PC) isn't in the header.
|
||||
// It was PUSHED to the stack exactly 1 instruction before the snapshot was saved.
|
||||
// So, we just pop it off the stack to resume execution!
|
||||
PC = Pop();
|
||||
}
|
||||
|
||||
|
||||
|
||||
public string GetFlagsString()
|
||||
|
||||
Reference in New Issue
Block a user