private void SaveSRMFile(ref byte[] buffer, int fileSlot) { int fileStart = (fileSlot * 0xA00); byte[] subbuffer = new byte[0x500]; for (int i = 0; i < subbuffer.Length; i++) { subbuffer[i] = buffer[i + fileStart]; } SAVE.PutBlock(ref subbuffer); // Re-calculate the checksums int chk = 0; for (int i = 0x20; i < 0x4E0; i++) { chk += subbuffer[i]; chk &= 0xffff; } // Complement int cmp = 0; int ch = 0; for (int i = 0x20; i < 0x4e0; i += 2) { ch = subbuffer[i] + (subbuffer[i + 1] << 8); cmp = ch ^ cmp; } cmp &= 0xffff; subbuffer[0x1c] = (byte)(chk & 0xff); subbuffer[0x1d] = (byte)((chk & 0xff00) >> 8); subbuffer[0x1e] = (byte)(cmp & 0xff); subbuffer[0x1f] = (byte)((cmp & 0xff00) >> 8); for (int i = 0; i < subbuffer.Length; i++) { buffer[i + fileStart] = subbuffer[i]; buffer[i + fileStart + 0x500] = subbuffer[i]; } }