Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.State.cs
2 views
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;

using BizHawk.Common;

namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS
{
	public sealed partial class Vic
	{
		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()
		{
			_pinAec = true;
			_pinBa = true;
			_pinIrq = true;

			_bufOffset = 0;

			_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
			for (var i = 0; i < 8; i++)
				_sprites[i].HardReset();

			// clear C buffer
			for (var i = 0; i < 40; i++)
			{
				_bufferC[i] = 0;
				_bufferG[i] = 0;
			}

			_pixBuffer = new int[PixBufferSize];
            _pixBorderBuffer = new int[PixBorderBufferSize];
		    _pixBufferIndex = 0;
            _pixBufferBorderIndex = 0;
            UpdateBorder();
		}

		public void SyncState(Serializer ser)
		{
			SaveState.SyncObject(ser, this);
		    if (ser.IsReader)
		    {
                UpdateBorder();
                UpdatePins();
                UpdateVideoMode();
            }
        }
	}
}