Example #1
0
        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];
            }
        }