Beispiel #1
0
    bool timer_zero_pulse; //the single pulse timer

    #endregion Fields

    #region Constructors

    public Mapper(NesEngine theEngine, ref NesCartridge theCartridge)
    {
        myEngine = theEngine;
        mapperCartridge = theCartridge;
        current_prg_rom_page = new uint[8];
        current_chr_rom_page = new uint[8];
        timer_irq_enabled = false;
    }
Beispiel #2
0
        /// <summary>
        /// The picture unit
        /// </summary>
        /// <param name="tv">The tv format</param>
        /// <param name="paletteFormat">Palette Format</param>
        /// <param name="engine">Engine NES</param>
        public Ppu(TvFormat tv, PaletteFormat paletteFormat, NesEngine engine)
        {
            _engine    = engine;
            _cartridge = _engine.Memory.Map.Cartridge;

            VRam   = new byte[0x2000];
            SprRam = new byte[0x100];
            SetTvFormat(tv, paletteFormat);
            Debug.WriteLine(this, "PPU initialized ok.", DebugStatus.Cool);
        }
Beispiel #3
0
    public PPU(NesEngine theEngine)
    {
        myEngine = theEngine;

        nameTables = new byte[0x2000];
        spriteRam = new byte[0x100];
        //offscreenBuffer = new int[256 * 240];
        offscreenBuffer = new short[256 * 240];
        sprite0Buffer = new int[256];
        myVideo = new Video(this);
        RestartPPU();
    }
Beispiel #4
0
 /// <summary>
 /// The state saver / loader
 /// </summary>
 /// <param name="engine">The current system you want to save / load state from / into</param>
 public State(NesEngine engine)
 {
     _engine = engine;
 }
Beispiel #5
0
 public Zapper(NesEngine engine)
 {
     _engine = engine;
 }
Beispiel #6
0
 public Zapper(NesEngine engine)
 {
     _engine = engine;
 }
Beispiel #7
0
 /// <summary>
 /// The state saver / loader
 /// </summary>
 /// <param name="engine">The current system you want to save / load state from / into</param>
 public State(NesEngine engine)
 {
     _engine = engine;
 }
Beispiel #8
0
 public Apu(NesEngine NesEmu, IAudioDevice SoundDevice)
 {
     _engine = NesEmu;
     STEREO  = SoundDevice.Stereo;
     InitDirectSound(SoundDevice.SoundDevice);
 }
Beispiel #9
0
 public ChnDmc(NesEngine NesEmu)
 {
     _engine = NesEmu;
 }
Beispiel #10
0
        public void LoadNesData(NesEngine _engine)
        {
            #region CPU

            _regA = _engine.Cpu.REG_A;
            _regX = _engine.Cpu.REG_X;
            _regY = _engine.Cpu.REG_Y;
            _regS = _engine.Cpu.REG_S;
            _regPc = _engine.Cpu.REG_PC;
            _flagN = _engine.Cpu.Flag_N;
            _flagV = _engine.Cpu.Flag_V;
            _flagB = _engine.Cpu.Flag_B;
            _flagD = _engine.Cpu.Flag_D;
            _flagI = _engine.Cpu.Flag_I;
            _flagZ = _engine.Cpu.Flag_Z;
            _flagC = _engine.Cpu.Flag_C;
            CycleCounter = _engine.Cpu.CycleCounter;
            _cyclesPerScanline = _engine.Cpu.CyclesPerScanline;
            _opCode = _engine.Cpu.OpCode;
            _prevPc = _engine.Cpu.PrevPc;

            #endregion

            #region MEMORY

            _ram = _engine.Memory.Ram;
            _sram = _engine.Memory.SRam;
            _joyData1 = _engine.Memory.JoyData1;
            _joyData2 = _engine.Memory.JoyData2;
            _joyStrobe = _engine.Memory.JoyStrobe;

            #endregion

            #region CART

            if (_engine.Memory.Map.Cartridge.ChrPages == 0)
                _chr = _engine.Memory.Map.Cartridge.Chr;
            _mirroring = _engine.Memory.Map.Cartridge.Mirroring;
            _saveRAMPresent = _engine.Memory.Map.Cartridge.IsSaveRam;
            _isVram = _engine.Memory.Map.Cartridge.IsVram;
            _mirroringBase = _engine.Memory.Map.Cartridge.MirroringBase;

            #endregion

            #region _map

            CurrentPRGRomPage = _engine.Memory.Map.CurrentPrgRomPage;
            CurrentChrRomPage = _engine.Memory.Map.CurrentChrRomPage;

            #endregion

            #region PPU

            _sprram = _engine.Ppu.SprRam;
            _vram = _engine.Ppu.VRam;
            _currentScanLine = _engine.Ppu.CurrentScanLine;
            _vramAddress = _engine.Ppu.VRamAddress;
            _sprite0Hit = _engine.Ppu.Sprite0Hit;
            _spriteCrossed = _engine.Ppu.SpriteCrossed;
            _scanlinesPerFrame = _engine.Ppu.ScanlinesPerFrame;
            _scanlineOfVblank = _engine.Ppu.ScanlineOfVblank;
            _fps = _engine.Ppu.Fps;
            _vblank = _engine.Ppu.VBlank;
            _vramReadBuffer = _engine.Ppu.VRamReadBuffer;
            _noLimiter = _engine.Ppu.NoLimiter;
            /*2000*/
            _executeNMIonVBlank = _engine.Ppu.ExecuteNMIonVBlank;
            _spriteSize = _engine.Ppu.SpriteSize;
            _patternTableAddressBackground = _engine.Ppu.PatternTableAddressBackground;
            _patternTableAddress8X8Sprites = _engine.Ppu.PatternTableAddress8X8Sprites;
            _vramAddressIncrement = _engine.Ppu.VRamAddressIncrement;
            _reloadBits2000 = _engine.Ppu.ReloadBits2000;
            /*2001*/
            _colorEmphasis = _engine.Ppu.ColorEmphasis;
            _spriteVisibility = _engine.Ppu.SpriteVisibility;
            _backgroundVisibility = _engine.Ppu.BackgroundVisibility;
            _spriteClipping = _engine.Ppu.SpriteClipping;
            _backgroundClipping = _engine.Ppu.BackgroundClipping;
            _monochromeMode = _engine.Ppu.MonochromeMode;
            /*2003*/
            _spriteRamAddress = _engine.Ppu.SpriteRamAddress;
            /*2005,2006*/
            _ppuToggle = _engine.Ppu.PpuToggle;
            _vramTemp = _engine.Ppu.VRamTemp;
            /*Draw stuff*/
            _hScroll = _engine.Ppu.HScroll;
            _vScroll = _engine.Ppu.VScroll;
            _vBits = _engine.Ppu.VBits;
            _tileY = _engine.Ppu.TileY;

            #endregion

            #region APU

            _FrameCounter = _engine.Apu._FrameCounter;
            _PAL = _engine.Apu._PAL;
            DMCIRQPending = _engine.Apu.DMCIRQPending;
            FrameIRQEnabled = _engine.Apu.FrameIRQEnabled;
            FrameIRQPending = _engine.Apu.FrameIRQPending;
            _engine.Apu.DMC.SaveState(this);
            _engine.Apu.NOIZE.SaveState(this);
            _engine.Apu.RECT1.SaveState(this);
            _engine.Apu.RECT2.SaveState(this);
            _engine.Apu.TRIANGLE.SaveState(this);
            _engine.Apu.VRC6PULSE1.SaveState(this);
            _engine.Apu.VRC6PULSE2.SaveState(this);
            _engine.Apu.VRC6SAWTOOTH.SaveState(this);

            #endregion

            #region Mappers

            //MAPPER 1
            if (_engine.Memory.Map.Cartridge.MapperNo == 1)
            {
                var map1 = (Mapper01) _engine.Memory.Map.CurrentMapper;
                mapper1_register8000BitPosition = map1.Mapper1Register8000BitPosition;
                mapper1_registerA000BitPosition = map1.Mapper1RegisterA000BitPosition;
                mapper1_registerC000BitPosition = map1.Mapper1RegisterC000BitPosition;
                mapper1_registerE000BitPosition = map1.Mapper1RegisterE000BitPosition;
                mapper1_register8000Value = map1.Mapper1Register8000Value;
                mapper1_registerA000Value = map1.Mapper1RegisterA000Value;
                mapper1_registerC000Value = map1.Mapper1RegisterC000Value;
                mapper1_registerE000Value = map1.Mapper1RegisterE000Value;
                mapper1_mirroringFlag = map1.Mapper1MirroringFlag;
                mapper1_onePageMirroring = map1.Mapper1OnePageMirroring;
                mapper1_prgSwitchingArea = map1.Mapper1PRGSwitchingArea;
                mapper1_prgSwitchingSize = map1.Mapper1PRGSwitchingSize;
                mapper1_vromSwitchingSize = map1.Mapper1VromSwitchingSize;
            }
            //MAPPER 4
            if (_engine.Memory.Map.Cartridge.MapperNo == 4)
            {
                var map4 = (Mapper04) _engine.Memory.Map.CurrentMapper;
                mapper4_commandNumber = map4.Mapper4CommandNumber;
                mapper4_prgAddressSelect = map4.Mapper4PRGAddressSelect;
                mapper4_chrAddressSelect = map4.Mapper4ChrAddressSelect;
                mapper4_timer_irq_enabled = map4.TimerIrqEnabled;
                mapper4_timer_irq_count = map4.TimerIrqCount;
                mapper4_timer_irq_reload = map4.TimerIrqReload;
            }
            //MAPPER 5
            if (_engine.Memory.Map.Cartridge.MapperNo == 5)
            {
                var map5 = (Mapper05) _engine.Memory.Map.CurrentMapper;
                mapper5_prgBankSize = map5.Mapper5PRGBankSize;
                mapper5_chrBankSize = map5.Mapper5ChrBankSize;
                mapper5_scanlineSplit = map5.Mapper5ScanlineSplit;
                mapper5_splitIrqEnabled = map5.Mapper5SplitIrqEnabled;
            }
            //MAPPER 6
            if (_engine.Memory.Map.Cartridge.MapperNo == 6)
            {
                var map6 = (Mapper06) _engine.Memory.Map.CurrentMapper;
                mapper6_IRQEnabled = map6.IRQEnabled;
                mapper6_irq_counter = map6.irq_counter;
            }
            //MAPPER 8
            if (_engine.Memory.Map.Cartridge.MapperNo == 8)
            {
                var map8 = (Mapper08) _engine.Memory.Map.CurrentMapper;
                mapper8_IRQEnabled = map8.IRQEnabled;
                mapper8_irq_counter = map8.irq_counter;
            }
            //MAPPER 9
            if (_engine.Memory.Map.Cartridge.MapperNo == 9)
            {
                var map9 = (Mapper09) _engine.Memory.Map.CurrentMapper;
                mapper9_latch1 = map9.latch1;
                mapper9_latch2 = map9.latch2;
                mapper9_latch1data1 = map9.latch1data1;
                mapper9_latch1data2 = map9.latch1data2;
                mapper9_latch2data1 = map9.latch2data1;
                mapper9_latch2data2 = map9.latch2data2;
            }
            //MAPPER 10
            if (_engine.Memory.Map.Cartridge.MapperNo == 10)
            {
                var map10 = (Mapper10) _engine.Memory.Map.CurrentMapper;
                mapper10_latch1 = map10.Latch1;
                mapper10_latch2 = map10.Latch2;
                mapper10_latch1data1 = map10.Latch1Data1;
                mapper10_latch1data2 = map10.Latch1Data2;
                mapper10_latch2data1 = map10.Latch2Data1;
                mapper10_latch2data2 = map10.Latch2Data2;
            }
            //MAPPER 16
            if (_engine.Memory.Map.Cartridge.MapperNo == 16)
            {
                var map16 = (Mapper16) _engine.Memory.Map.CurrentMapper;
                timer_irq_counter_16 = map16.timer_irq_counter_16;
                timer_irq_Latch_16 = map16.timer_irq_Latch_16;
                timer_irq_enabled = map16.timer_irq_enabled;
            }
            //MAPPER 17
            if (_engine.Memory.Map.Cartridge.MapperNo == 17)
            {
                var map17 = (Mapper17) _engine.Memory.Map.CurrentMapper;
                mapper17_IRQEnabled = map17.IRQEnabled;
                mapper17_irq_counter = map17.irq_counter;
            }
            //MAPPER 18
            if (_engine.Memory.Map.Cartridge.MapperNo == 18)
            {
                var map18 = (Mapper18) _engine.Memory.Map.CurrentMapper;
                Mapper18_Timer = map18.Mapper18_Timer;
                Mapper18_latch = map18.Mapper18_latch;
                mapper18_control = map18.mapper18_control;
                Mapper18_IRQWidth = map18.Mapper18_IRQWidth;
                Mapper18_timer_irq_enabled = map18.timer_irq_enabled;
                Mapper18_x = map18.x;
            }
            //MAPPER 19
            if (_engine.Memory.Map.Cartridge.MapperNo == 19)
            {
                var map19 = (Mapper19) _engine.Memory.Map.CurrentMapper;
                Mapper19_VROMRAMfor0000 = map19.VROMRAMfor0000;
                Mapper19_VROMRAMfor1000 = map19.VROMRAMfor1000;
                Mapper19_irq_counter = map19.irq_counter;
                Mapper19_IRQEnabled = map19.IRQEnabled;
            }
            //MAPPER 21
            if (_engine.Memory.Map.Cartridge.MapperNo == 21)
            {
                var map21 = (Mapper21) _engine.Memory.Map.CurrentMapper;
                Mapper21_PRGMode = map21.PRGMode;
                Mapper21_REG = map21.REG;
                Mapper21_irq_latch = map21.IrqLatch;
                Mapper21_irq_enable = map21.IrqEnable;
                Mapper21_irq_counter = map21.IrqCounter;
                Mapper21_irq_clock = map21.IrqClock;
            }
            //MAPPER 23
            if (_engine.Memory.Map.Cartridge.MapperNo == 23)
            {
                var map23 = (Mapper23) _engine.Memory.Map.CurrentMapper;
                Mapper23_PRGMode = map23.PRGMode;
                Mapper23_REG = map23.REG;
                Mapper23_irq_latch = map23.IrqLatch;
                Mapper23_irq_enable = map23.IrqEnable;
                Mapper23_irq_counter = map23.IrqCounter;
                Mapper23_irq_clock = map23.IrqClock;
            }
            //MAPPER 24
            if (_engine.Memory.Map.Cartridge.MapperNo == 24)
            {
                var map24 = (Mapper24) _engine.Memory.Map.CurrentMapper;
                Mapper24_irq_latch = map24.irq_latch;
                Mapper24_irq_enable = map24.irq_enable;
                Mapper24_irq_counter = map24.irq_counter;
                Mapper24_irq_clock = map24.irq_clock;
            }
            //MAPPER 225
            if (_engine.Memory.Map.Cartridge.MapperNo == 225)
            {
                var map225 = (Mapper225255) _engine.Memory.Map.CurrentMapper;
                Mapper225_reg0 = map225.Mapper225_reg0;
                Mapper225_reg1 = map225.Mapper225_reg1;
                Mapper225_reg2 = map225.Mapper225_reg2;
                Mapper225_reg3 = map225.Mapper225_reg3;
            }
            //MAPPER 32
            if (_engine.Memory.Map.Cartridge.MapperNo == 32)
            {
                var map32 = (Mapper32) _engine.Memory.Map.CurrentMapper;
                mapper32SwitchingMode = map32.mapper32SwitchingMode;
            }
            //MAPPER 33
            if (_engine.Memory.Map.Cartridge.MapperNo == 33)
            {
                var map33 = (Mapper33) _engine.Memory.Map.CurrentMapper;
                mapper33_type1 = map33.Type1;
                mapper33_IRQCounter = map33.IrqCounter;
                mapper33_IRQEabled = map33.IrqEabled;
            }
            //MAPPER 41
            if (_engine.Memory.Map.Cartridge.MapperNo == 41)
            {
                var map41 = (Mapper41) _engine.Memory.Map.CurrentMapper;
                Mapper41_CHR_Low = map41.Mapper41_CHR_Low;
                Mapper41_CHR_High = map41.Mapper41_CHR_High;
            }
            //MAPPER 64
            if (_engine.Memory.Map.Cartridge.MapperNo == 64)
            {
                var map64 = (Mapper64) _engine.Memory.Map.CurrentMapper;
                mapper64_commandNumber = map64.Mapper64CommandNumber;
                mapper64_prgAddressSelect = map64.Mapper64PrgAddressSelect;
                mapper64_chrAddressSelect = map64.Mapper64ChrAddressSelect;
            }
            //MAPPER 65
            if (_engine.Memory.Map.Cartridge.MapperNo == 65)
            {
                var map65 = (Mapper65) _engine.Memory.Map.CurrentMapper;
                mapper65_timer_irq_counter_65 = map65.timer_irq_counter_65;
                mapper65_timer_irq_Latch_65 = map65.timer_irq_Latch_65;
                mapper65_timer_irq_enabled = map65.timer_irq_enabled;
            }
            //MAPPER 69
            if (_engine.Memory.Map.Cartridge.MapperNo == 69)
            {
                var map69 = (Mapper69) _engine.Memory.Map.CurrentMapper;
                mapper69_reg = map69.reg;
                mapper69_timer_irq_counter_69 = map69.timer_irq_counter_69;
                mapper69_timer_irq_enabled = map69.timer_irq_enabled;
            }
            //MAPPER 91
            if (_engine.Memory.Map.Cartridge.MapperNo == 91)
            {
                var map91 = (Mapper91) _engine.Memory.Map.CurrentMapper;
                mapper91_IRQEnabled = map91.IRQEnabled;
                mapper91_IRQCount = map91.IRQCount;
            }

            #endregion
        }
Beispiel #11
0
	public ProcessorNes6502 (NesEngine theEngine) {
		myEngine = theEngine;
		a_register = 0;
		x_index_register = 0;
		y_index_register = 0;
		sp_register = 0xff;
		
		//FIXME: this is for debugging
		total_tick_count = 0;
		
#if USE_SWITCH
		//use switch
#else
		SetOpcode();
#endif
		
	}	
Beispiel #12
0
 public Memory(NesEngine engine)
 {
     _engine = engine;
     InitializeMemory();
 }
Beispiel #13
0
 public Apu(NesEngine NesEmu, IAudioDevice SoundDevice)
 {
     _engine = NesEmu;
     STEREO = SoundDevice.Stereo;
     InitDirectSound(SoundDevice.SoundDevice);
 }
Beispiel #14
0
 public Map(Memory memory, NesEngine engine)
 {
     Engine = engine;
     Cartridge = new Cartridge(memory);
 }
Beispiel #15
0
        /// <summary>
        /// The picture unit
        /// </summary>
        /// <param name="tv">The tv format</param>
        /// <param name="paletteFormat">Palette Format</param>
        /// <param name="engine">Engine NES</param>
        public Ppu(TvFormat tv, PaletteFormat paletteFormat, NesEngine engine)
        {
            _engine = engine;
            _cartridge = _engine.Memory.Map.Cartridge;

            VRam = new byte[0x2000];
            SprRam = new byte[0x100];
            SetTvFormat(tv, paletteFormat);
            Debug.WriteLine(this, "PPU initialized ok.", DebugStatus.Cool);
        }
Beispiel #16
0
 public Memory(NesEngine engine)
 {
     _engine = engine;
     InitializeMemory();
 }
Beispiel #17
0
 public ChnDmc(NesEngine NesEmu)
 {
     _engine = NesEmu;
 }
Beispiel #18
0
 public Map(Memory memory, NesEngine engine)
 {
     Engine    = engine;
     Cartridge = new Cartridge(memory);
 }
Beispiel #19
0
        public void ApplyDataToNes(NesEngine _engine)
        {
            #region CPU

            _engine.Cpu.REG_A             = _regA;
            _engine.Cpu.REG_X             = _regX;
            _engine.Cpu.REG_Y             = _regY;
            _engine.Cpu.REG_S             = _regS;
            _engine.Cpu.REG_PC            = _regPc;
            _engine.Cpu.Flag_N            = _flagN;
            _engine.Cpu.Flag_V            = _flagV;
            _engine.Cpu.Flag_B            = _flagB;
            _engine.Cpu.Flag_D            = _flagD;
            _engine.Cpu.Flag_I            = _flagI;
            _engine.Cpu.Flag_Z            = _flagZ;
            _engine.Cpu.Flag_C            = _flagC;
            _engine.Cpu.CycleCounter      = CycleCounter;
            _engine.Cpu.CyclesPerScanline = _cyclesPerScanline;
            _engine.Cpu.OpCode            = _opCode;
            _engine.Cpu.PrevPc            = _prevPc;

            #endregion

            #region MEMORY

            _engine.Memory.Ram       = _ram;
            _engine.Memory.SRam      = _sram;
            _engine.Memory.JoyData1  = _joyData1;
            _engine.Memory.JoyData2  = _joyData2;
            _engine.Memory.JoyStrobe = _joyStrobe;

            #endregion

            #region CART

            if (_engine.Memory.Map.Cartridge.ChrPages == 0)
            {
                _engine.Memory.Map.Cartridge.Chr = _chr;
            }
            _engine.Memory.Map.Cartridge.Mirroring     = _mirroring;
            _engine.Memory.Map.Cartridge.IsSaveRam     = _saveRAMPresent;
            _engine.Memory.Map.Cartridge.IsVram        = _isVram;
            _engine.Memory.Map.Cartridge.MirroringBase = _mirroringBase;

            #endregion

            #region _map

            _engine.Memory.Map.CurrentPrgRomPage = CurrentPRGRomPage;
            _engine.Memory.Map.CurrentChrRomPage = CurrentChrRomPage;

            #endregion

            #region PPU

            _engine.Ppu.SprRam            = _sprram;
            _engine.Ppu.VRam              = _vram;
            _engine.Ppu.CurrentScanLine   = _currentScanLine;
            _engine.Ppu.VRamAddress       = _vramAddress;
            _engine.Ppu.Sprite0Hit        = _sprite0Hit;
            _engine.Ppu.SpriteCrossed     = _spriteCrossed;
            _engine.Ppu.ScanlinesPerFrame = _scanlinesPerFrame;
            _engine.Ppu.ScanlineOfVblank  = _scanlineOfVblank;
            _engine.Ppu.Fps            = _fps;
            _engine.Ppu.VBlank         = _vblank;
            _engine.Ppu.VRamReadBuffer = _vramReadBuffer;
            _engine.Ppu.NoLimiter      = _noLimiter;
            /*2000*/
            _engine.Ppu.ExecuteNMIonVBlank            = _executeNMIonVBlank;
            _engine.Ppu.SpriteSize                    = _spriteSize;
            _engine.Ppu.PatternTableAddressBackground = _patternTableAddressBackground;
            _engine.Ppu.PatternTableAddress8X8Sprites = _patternTableAddress8X8Sprites;
            _engine.Ppu.VRamAddressIncrement          = _vramAddressIncrement;
            _engine.Ppu.ReloadBits2000                = _reloadBits2000;
            /*2001*/
            _engine.Ppu.ColorEmphasis        = _colorEmphasis;
            _engine.Ppu.SpriteVisibility     = _spriteVisibility;
            _engine.Ppu.BackgroundVisibility = _backgroundVisibility;
            _engine.Ppu.SpriteClipping       = _spriteClipping;
            _engine.Ppu.BackgroundClipping   = _backgroundClipping;
            _engine.Ppu.MonochromeMode       = _monochromeMode;
            /*2003*/
            _engine.Ppu.SpriteRamAddress = _spriteRamAddress;
            /*2005,2006*/
            _engine.Ppu.PpuToggle = _ppuToggle;
            _engine.Ppu.VRamTemp  = _vramTemp;
            /*Draw stuff*/
            _engine.Ppu.HScroll = _hScroll;
            _engine.Ppu.VScroll = _vScroll;
            _engine.Ppu.VBits   = _vBits;
            _engine.Ppu.TileY   = _tileY;

            #endregion

            #region APU

            _engine.Apu._FrameCounter   = _FrameCounter;
            _engine.Apu._PAL            = _PAL;
            _engine.Apu.DMCIRQPending   = DMCIRQPending;
            _engine.Apu.FrameIRQEnabled = FrameIRQEnabled;
            _engine.Apu.FrameIRQPending = FrameIRQPending;
            _engine.Apu.DMC.LoadState(this);
            _engine.Apu.NOIZE.LoadState(this);
            _engine.Apu.RECT1.LoadState(this);
            _engine.Apu.RECT2.LoadState(this);
            _engine.Apu.TRIANGLE.LoadState(this);
            _engine.Apu.VRC6PULSE1.LoadState(this);
            _engine.Apu.VRC6PULSE2.LoadState(this);
            _engine.Apu.VRC6SAWTOOTH.LoadState(this);

            #endregion

            #region MAPPERS

            //MAPPER 1
            if (_engine.Memory.Map.Cartridge.MapperNo == 1)
            {
                var map1 = (Mapper01)_engine.Memory.Map.CurrentMapper;
                map1.Mapper1Register8000BitPosition = mapper1_register8000BitPosition;
                map1.Mapper1RegisterA000BitPosition = mapper1_registerA000BitPosition;
                map1.Mapper1RegisterC000BitPosition = mapper1_registerC000BitPosition;
                map1.Mapper1RegisterE000BitPosition = mapper1_registerE000BitPosition;
                map1.Mapper1Register8000Value       = mapper1_register8000Value;
                map1.Mapper1RegisterA000Value       = mapper1_registerA000Value;
                map1.Mapper1RegisterC000Value       = mapper1_registerC000Value;
                map1.Mapper1RegisterE000Value       = mapper1_registerE000Value;
                map1.Mapper1MirroringFlag           = mapper1_mirroringFlag;
                map1.Mapper1OnePageMirroring        = mapper1_onePageMirroring;
                map1.Mapper1PRGSwitchingArea        = mapper1_prgSwitchingArea;
                map1.Mapper1PRGSwitchingSize        = mapper1_prgSwitchingSize;
                map1.Mapper1VromSwitchingSize       = mapper1_vromSwitchingSize;
            }
            //MAPPER 4
            if (_engine.Memory.Map.Cartridge.MapperNo == 4)
            {
                var map4 = (Mapper04)_engine.Memory.Map.CurrentMapper;
                map4.Mapper4CommandNumber    = mapper4_commandNumber;
                map4.Mapper4PRGAddressSelect = mapper4_prgAddressSelect;
                map4.Mapper4ChrAddressSelect = mapper4_chrAddressSelect;
                map4.TimerIrqEnabled         = mapper4_timer_irq_enabled;
                map4.TimerIrqCount           = mapper4_timer_irq_count;
                map4.TimerIrqReload          = mapper4_timer_irq_reload;
            }
            //MAPPER 5
            if (_engine.Memory.Map.Cartridge.MapperNo == 5)
            {
                var map5 = (Mapper05)_engine.Memory.Map.CurrentMapper;
                map5.Mapper5PRGBankSize     = mapper5_prgBankSize;
                map5.Mapper5ChrBankSize     = mapper5_chrBankSize;
                map5.Mapper5ScanlineSplit   = mapper5_scanlineSplit;
                map5.Mapper5SplitIrqEnabled = mapper5_splitIrqEnabled;
            }
            //MAPPER 6
            if (_engine.Memory.Map.Cartridge.MapperNo == 6)
            {
                var map6 = (Mapper06)_engine.Memory.Map.CurrentMapper;
                map6.IRQEnabled  = mapper6_IRQEnabled;
                map6.irq_counter = mapper6_irq_counter;
            }
            //MAPPER 8
            if (_engine.Memory.Map.Cartridge.MapperNo == 8)
            {
                var map8 = (Mapper08)_engine.Memory.Map.CurrentMapper;
                map8.IRQEnabled  = mapper8_IRQEnabled;
                map8.irq_counter = mapper8_irq_counter;
            }
            //MAPPER 9
            if (_engine.Memory.Map.Cartridge.MapperNo == 9)
            {
                var map9 = (Mapper09)_engine.Memory.Map.CurrentMapper;
                map9.latch1      = mapper9_latch1;
                map9.latch2      = mapper9_latch2;
                map9.latch1data1 = mapper9_latch1data1;
                map9.latch1data2 = mapper9_latch1data2;
                map9.latch2data1 = mapper9_latch2data1;
                map9.latch2data2 = mapper9_latch2data2;
            }
            //MAPPER 10
            if (_engine.Memory.Map.Cartridge.MapperNo == 10)
            {
                var map10 = (Mapper10)_engine.Memory.Map.CurrentMapper;
                map10.Latch1      = mapper10_latch1;
                map10.Latch2      = mapper10_latch2;
                map10.Latch1Data1 = mapper10_latch1data1;
                map10.Latch1Data2 = mapper10_latch1data2;
                map10.Latch2Data1 = mapper10_latch2data1;
                map10.Latch2Data2 = mapper10_latch2data2;
            }
            //MAPPER 16
            if (_engine.Memory.Map.Cartridge.MapperNo == 16)
            {
                var map16 = (Mapper16)_engine.Memory.Map.CurrentMapper;
                map16.timer_irq_counter_16 = timer_irq_counter_16;
                map16.timer_irq_Latch_16   = timer_irq_Latch_16;
                map16.timer_irq_enabled    = timer_irq_enabled;
            }
            //MAPPER 17
            if (_engine.Memory.Map.Cartridge.MapperNo == 17)
            {
                var map17 = (Mapper17)_engine.Memory.Map.CurrentMapper;
                map17.IRQEnabled  = mapper17_IRQEnabled;
                map17.irq_counter = mapper17_irq_counter;
            }
            //MAPPER 18
            if (_engine.Memory.Map.Cartridge.MapperNo == 18)
            {
                var map18 = (Mapper18)_engine.Memory.Map.CurrentMapper;
                map18.Mapper18_Timer    = Mapper18_Timer;
                map18.Mapper18_latch    = Mapper18_latch;
                map18.mapper18_control  = mapper18_control;
                map18.Mapper18_IRQWidth = Mapper18_IRQWidth;
                map18.timer_irq_enabled = Mapper18_timer_irq_enabled;
                map18.x = Mapper18_x;
            }
            //MAPPER 19
            if (_engine.Memory.Map.Cartridge.MapperNo == 19)
            {
                var map19 = (Mapper19)_engine.Memory.Map.CurrentMapper;
                map19.VROMRAMfor0000 = Mapper19_VROMRAMfor0000;
                map19.VROMRAMfor1000 = Mapper19_VROMRAMfor1000;
                map19.irq_counter    = Mapper19_irq_counter;
                map19.IRQEnabled     = Mapper19_IRQEnabled;
            }
            //MAPPER 21
            if (_engine.Memory.Map.Cartridge.MapperNo == 21)
            {
                var map21 = (Mapper21)_engine.Memory.Map.CurrentMapper;
                map21.PRGMode    = Mapper21_PRGMode;
                map21.REG        = Mapper21_REG;
                map21.IrqLatch   = Mapper21_irq_latch;
                map21.IrqEnable  = Mapper21_irq_enable;
                map21.IrqCounter = Mapper21_irq_counter;
                map21.IrqClock   = Mapper21_irq_clock;
            }
            //MAPPER 23
            if (_engine.Memory.Map.Cartridge.MapperNo == 23)
            {
                var map23 = (Mapper23)_engine.Memory.Map.CurrentMapper;
                map23.PRGMode    = Mapper23_PRGMode;
                map23.REG        = Mapper23_REG;
                map23.IrqLatch   = Mapper23_irq_latch;
                map23.IrqEnable  = Mapper23_irq_enable;
                map23.IrqCounter = Mapper23_irq_counter;
                map23.IrqClock   = Mapper23_irq_clock;
            }
            //MAPPER 24
            if (_engine.Memory.Map.Cartridge.MapperNo == 24)
            {
                var map24 = (Mapper24)_engine.Memory.Map.CurrentMapper;
                map24.irq_latch   = Mapper24_irq_latch;
                map24.irq_enable  = Mapper24_irq_enable;
                map24.irq_counter = Mapper24_irq_counter;
                map24.irq_clock   = Mapper24_irq_clock;
            }
            //MAPPER 225
            if (_engine.Memory.Map.Cartridge.MapperNo == 225)
            {
                var map225 = (Mapper225255)_engine.Memory.Map.CurrentMapper;
                map225.Mapper225_reg0 = Mapper225_reg0;
                map225.Mapper225_reg1 = Mapper225_reg1;
                map225.Mapper225_reg2 = Mapper225_reg2;
                map225.Mapper225_reg3 = Mapper225_reg3;
            }
            //MAPPER 32
            if (_engine.Memory.Map.Cartridge.MapperNo == 32)
            {
                var map32 = (Mapper32)_engine.Memory.Map.CurrentMapper;
                map32.mapper32SwitchingMode = mapper32SwitchingMode;
            }
            //MAPPER 33
            if (_engine.Memory.Map.Cartridge.MapperNo == 33)
            {
                var map33 = (Mapper33)_engine.Memory.Map.CurrentMapper;
                map33.Type1      = mapper33_type1;
                map33.IrqCounter = mapper33_IRQCounter;
                map33.IrqEabled  = mapper33_IRQEabled;
            }
            //MAPPER 41
            if (_engine.Memory.Map.Cartridge.MapperNo == 41)
            {
                var map41 = (Mapper41)_engine.Memory.Map.CurrentMapper;
                map41.Mapper41_CHR_Low  = Mapper41_CHR_Low;
                map41.Mapper41_CHR_High = Mapper41_CHR_High;
            }
            //MAPPER 64
            if (_engine.Memory.Map.Cartridge.MapperNo == 64)
            {
                var map64 = (Mapper64)_engine.Memory.Map.CurrentMapper;
                map64.Mapper64CommandNumber    = mapper64_commandNumber;
                map64.Mapper64PrgAddressSelect = mapper64_prgAddressSelect;
                map64.Mapper64ChrAddressSelect = mapper64_chrAddressSelect;
            }
            //MAPPER 65
            if (_engine.Memory.Map.Cartridge.MapperNo == 65)
            {
                var map65 = (Mapper65)_engine.Memory.Map.CurrentMapper;
                map65.timer_irq_counter_65 = mapper65_timer_irq_counter_65;
                map65.timer_irq_Latch_65   = mapper65_timer_irq_Latch_65;
                map65.timer_irq_enabled    = mapper65_timer_irq_enabled;
            }
            //MAPPER 69
            if (_engine.Memory.Map.Cartridge.MapperNo == 69)
            {
                var map69 = (Mapper69)_engine.Memory.Map.CurrentMapper;
                map69.reg = mapper69_reg;
                map69.timer_irq_counter_69 = mapper69_timer_irq_counter_69;
                map69.timer_irq_enabled    = mapper69_timer_irq_enabled;
            }
            //MAPPER 91
            if (_engine.Memory.Map.Cartridge.MapperNo == 91)
            {
                var map91 = (Mapper91)_engine.Memory.Map.CurrentMapper;
                map91.IRQEnabled = mapper91_IRQEnabled;
                map91.IRQCount   = mapper91_IRQCount;
            }

            #endregion
        }
Beispiel #20
0
        private bool _paused; //To ensure the cpu is paused

        #endregion Fields

        #region Constructors

        /// <summary>
        /// The 6502
        /// </summary>
        /// <param name="memory">The memory</param>
        /// <param name="tvFormat">The TV format</param>
        public Cpu(Memory.Memory memory, TvFormat tvFormat, NesEngine engine)
        {
            _engine = engine;
            MEM = memory;
            InitializeCPU(tvFormat);
        }