BizHawk/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.State.cs

177 lines
5.0 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.Linq;
2013-08-19 03:42:40 +00:00
using System.Reflection;
using System.Text;
using BizHawk.Common;
namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS
{
2016-02-22 23:50:11 +00:00
public sealed partial class Vic
{
2016-02-22 23:50:11 +00:00
private int _backgroundColor0;
private int _backgroundColor1;
private int _backgroundColor2;
private int _backgroundColor3;
private int _baCount;
private bool _badline;
private bool _badlineEnable;
private bool _bitmapMode;
private int _borderB;
private bool _borderCheckLEnable;
private bool _borderCheckREnable;
private int _borderColor;
private int _borderL;
private bool _borderOnMain;
private bool _borderOnVertical;
private int _borderR;
private int _borderT;
private readonly int[] _bufferC;
private readonly int[] _bufferG;
private int _cycle;
private int _cycleIndex;
private bool _columnSelect;
private int _dataC;
private int _dataG;
private bool _displayEnable;
private int _displayC;
private bool _enableIntLightPen;
private bool _enableIntRaster;
private bool _enableIntSpriteCollision;
private bool _enableIntSpriteDataCollision;
private bool _extraColorMode;
private bool _extraColorModeBuffer;
[SaveState.DoNotSave] private bool _hblank;
private bool _idle;
private bool _intLightPen;
private bool _intRaster;
private bool _intSpriteCollision;
private bool _intSpriteDataCollision;
private int _lightPenX;
private int _lightPenY;
private bool _multicolorMode;
private bool _pinAec = true;
private bool _pinBa = true;
private bool _pinIrq = true;
private int _pointerCb;
private int _pointerVm;
private int _rasterInterruptLine;
private bool _rasterInterruptTriggered;
private int _rasterLine;
private int _rasterX;
private bool _rasterXHold;
private int _rc;
private int _refreshCounter;
private bool _renderEnabled;
private bool _rowSelect;
private bool _spriteBackgroundCollisionClearPending;
private bool _spriteSpriteCollisionClearPending;
private int _spriteMulticolor0;
private int _spriteMulticolor1;
[SaveState.DoNotSave] private readonly Sprite _sprite0;
[SaveState.DoNotSave] private readonly Sprite _sprite1;
[SaveState.DoNotSave] private readonly Sprite _sprite2;
[SaveState.DoNotSave] private readonly Sprite _sprite3;
[SaveState.DoNotSave] private readonly Sprite _sprite4;
[SaveState.DoNotSave] private readonly Sprite _sprite5;
[SaveState.DoNotSave] private readonly Sprite _sprite6;
[SaveState.DoNotSave] private readonly Sprite _sprite7;
private readonly Sprite[] _sprites;
private int _sr;
[SaveState.DoNotSave] private bool _vblank;
[SaveState.DoNotSave] private int _vblankEnd;
[SaveState.DoNotSave] private int _vblankStart;
private int _vc;
private int _vcbase;
private int _vmli;
private int _xScroll;
private int _yScroll;
public void HardReset()
{
2016-02-22 23:50:11 +00:00
_pinAec = true;
_pinBa = true;
_pinIrq = true;
2016-02-22 23:50:11 +00:00
_bufOffset = 0;
2016-02-22 23:50:11 +00:00
_backgroundColor0 = 0;
_backgroundColor1 = 0;
_backgroundColor2 = 0;
_backgroundColor3 = 0;
_baCount = BaResetCounter;
_badline = false;
_badlineEnable = false;
_bitmapMode = false;
_borderCheckLEnable = false;
_borderCheckREnable = false;
_borderColor = 0;
_borderOnMain = true;
_borderOnVertical = true;
_columnSelect = false;
_displayEnable = false;
_enableIntLightPen = false;
_enableIntRaster = false;
_enableIntSpriteCollision = false;
_enableIntSpriteDataCollision = false;
_extraColorMode = false;
_idle = true;
_intLightPen = false;
_intRaster = false;
_intSpriteCollision = false;
_intSpriteDataCollision = false;
_lightPenX = 0;
_lightPenY = 0;
_multicolorMode = false;
_pointerCb = 0;
_pointerVm = 0;
_rasterInterruptLine = 0;
_rasterLine = 0;
_rasterX = 0;
_rc = 7;
_refreshCounter = 0xFF;
_rowSelect = false;
_spriteBackgroundCollisionClearPending = false;
_spriteSpriteCollisionClearPending = false;
_spriteMulticolor0 = 0;
_spriteMulticolor1 = 0;
_sr = 0;
_vc = 0;
_vcbase = 0;
_vmli = 0;
_xScroll = 0;
_yScroll = 0;
_cycle = 0;
// reset sprites
2016-02-22 23:50:11 +00:00
for (var i = 0; i < 8; i++)
_sprites[i].HardReset();
// clear C buffer
2016-02-22 23:50:11 +00:00
for (var i = 0; i < 40; i++)
{
2016-02-22 23:50:11 +00:00
_bufferC[i] = 0;
_bufferG[i] = 0;
}
2016-02-22 23:50:11 +00:00
_pixBuffer = new int[PixBufferSize];
_pixBorderBuffer = new int[PixBorderBufferSize];
_pixBufferIndex = 0;
_pixBufferBorderIndex = 0;
UpdateBorder();
}
public void SyncState(Serializer ser)
{
SaveState.SyncObject(ser, this);
2016-02-22 23:50:11 +00:00
if (ser.IsReader)
{
UpdateBorder();
UpdatePins();
UpdateVideoMode();
}
}
}
}