public void DeserializeComponentState(BinaryReader reader) { _addressHighByte = reader.ReadInt32(); _addressLowByte = reader.ReadInt32(); _addressWriteMode = (PortAddressWriteMode)reader.ReadInt32(); _currentPaletteAddress = reader.ReadInt32(); _currentScanline = reader.ReadInt32(); _currentVRamAddress = reader.ReadInt32(); _statusByte = reader.ReadByte(); _writeMode = (VramWriteMode)reader.ReadInt32(); _palette = reader.ReadBytes(_palette.Length); for (Int32 i = 0; i < _transformedPalette.Length; i++) { _transformedPalette[i] = reader.ReadUInt16(); } _vram = reader.ReadBytes(_vram.Length); }
public void WriteAddressPort(Byte value) { if (_addressWriteMode == PortAddressWriteMode.LowByte) { _addressLowByte = value; _addressWriteMode = PortAddressWriteMode.HighByte; return; } _addressHighByte = value; _addressWriteMode = PortAddressWriteMode.LowByte; var writeType = _addressHighByte >> 6; switch (writeType) { case 0: case 1: _currentPaletteAddress = 0; _writeMode = VramWriteMode.Vram; _currentVRamAddress = ((_addressHighByte & 0x3F) << 8) | _addressLowByte; break; case 2: WriteToRegister(_addressHighByte & 0x0F, _addressLowByte); break; case 3: // Write to palette. _currentVRamAddress = 0; _writeMode = VramWriteMode.Palette; _currentPaletteAddress = _addressLowByte & 0x1F; break; default: throw new ApplicationException(); } }