public void LoadStateBinary(BinaryReader reader)
        {
            int length = reader.ReadInt32();

            if (length != _mameSaveBuffer.Length)
            {
                throw new InvalidOperationException("Savestate buffer size mismatch!");
            }

            reader.Read(_mameSaveBuffer, 0, _mameSaveBuffer.Length);
            LibMAME.SaveError err = LibMAME.mame_load_buffer(_mameSaveBuffer, _mameSaveBuffer.Length);

            if (err != LibMAME.SaveError.NONE)
            {
                throw new InvalidOperationException("MAME SAVESTATE ERROR: " + err.ToString());
            }

            Frame      = reader.ReadInt32();
            LagCount   = reader.ReadInt32();
            IsLagFrame = reader.ReadBoolean();
        }
        public void SaveStateBinary(BinaryWriter writer)
        {
            writer.Write(_mameSaveBuffer.Length);

            LibMAME.SaveError err = LibMAME.mame_save_buffer(_mameSaveBuffer, out int length);

            if (length != _mameSaveBuffer.Length)
            {
                throw new InvalidOperationException("Savestate buffer size mismatch!");
            }

            if (err != LibMAME.SaveError.NONE)
            {
                throw new InvalidOperationException("MAME LOADSTATE ERROR: " + err.ToString());
            }

            writer.Write(_mameSaveBuffer);
            writer.Write(Frame);
            writer.Write(LagCount);
            writer.Write(IsLagFrame);
        }