public void LoadCartridge(ICartridge cartridge) { if (!_turnedOn) { Mmu.LoadCartridge(cartridge); CartridgeLoaded = true; } }
public Memory(byte[]?cartridge = null, byte[]?bootRom = null) { this.bootRom = bootRom; this.cartridge = CartridgeCreator.GetCartridge(cartridge); RomMapMode = bootRom != null ? MapMode.Boot : MapMode.Cartridge; CreateIOMasks(); }
public Device() { CPU = new Z80(this); DMA = new DMAController(this); MMU = new MemoryMapper(this); Cartridge = null; GPU = new VideoController(this); IRQ = new InterruptController(); TIM = new TimerController(this); JOYP = new InputController(this); }
public GameBoy(ICartridge cartridge) { Cartridge = cartridge; Memory = new GameBoyMemory(this); Cpu = new GameBoyCpu(this); Gpu = new GameBoyGpu(this); Spu = new GameBoySpu(this); KeyPad = new GameBoyPad(this); Timer = new GameBoyTimer(this); Reset(); IsPoweredOn = true; }
public void WriteByteTest(ushort address, byte value, byte expected) { var data = new byte[0x8000]; _cartridge = new Cartridge(data); _cartridge.WriteByte(address, value); Assert.Equal(expected, _cartridge.ReadByte(address)); }
/// <summary> /// Load cartridge to emulator /// </summary> /// <param name="cartridge">NES cartridge</param> public void InsertCartridge(ICartridge cartridge) { _cartridge = cartridge; //_ram.Reset(); _ram.Map(0x4021, 0x5FFF, cartridge.ReadExpansion, cartridge.WriteExpansion); _ram.Map(0x6000, 0x7FFF, cartridge.ReadSram, cartridge.WriteSram); _ram.Map(0x8000, 0xFFFF, cartridge.ReadPrg, cartridge.WritePrg); _vram.Map(0x0000, 0x2000, cartridge.ReadChr, cartridge.WriteChr); throw new NotImplementedException(); }
public void ReadByteTest(ushort address, byte expected) { var data = new byte[0x8000]; if (address < data.Length) { data[address] = expected; } _cartridge = new Cartridge(data); Assert.Equal(expected, _cartridge.ReadByte(address)); }
public GameBoy(ICartridge cartridge, IClock clock, bool preferGbcMode) { GbcMode = preferGbcMode && (cartridge.GameBoyColorFlag & GameBoyColorFlag.SupportsColor) != 0; _clock = clock; Components = new List <IGameBoyComponent> { (Cartridge = cartridge), (Memory = new GameBoyMemory(this)), (Cpu = new GameBoyCpu(this, clock)), (Gpu = new GameBoyGpu(this)), (Spu = new GameBoySpu(this)), (KeyPad = new GameBoyPad(this)), (Timer = new GameBoyTimer(this)) }.AsReadOnly(); foreach (var component in Components) { component.Initialize(); } Reset(); IsPoweredOn = true; _clock.Tick += NextFrame; new Thread(CpuLoop) { Name = "Z80CPULOOP", IsBackground = true }.Start(); _lastFrameTime = DateTime.Now; Gpu.VBlankStarted += (_, __) => { _framesCount++; FrameDelta = DateTime.Now - _lastFrameTime; _lastFrameTime = DateTime.Now; }; }
private ICartridge LoadCartridge() { ICartridge cartridge = null; try { #if WINDOWS || LINUX string cartridgeFileName = CommandLine.Length > 0 ? CommandLine[0] : String.Empty; using (FileStream stream = File.OpenRead(cartridgeFileName)) { LnxRomImageFileFormat romImage = new LnxRomImageFileFormat(); cartridge = romImage.LoadCart(stream); } #endif } catch (Exception) { cartridge = new FaultyCart(); } return(cartridge); }
public DrawableGameboy(ICartridge cart) { AutoSizeAxes = Axes.Both; Masking = true; CornerRadius = 5; cartridge = cart; InternalChildren = new Drawable[] { clock = new DrawableGameboyClock(), screen = new DrawableGameboyScreen { Size = new osuTK.Vector2(160, 144), Anchor = Anchor.Centre, Origin = Anchor.Centre }, crashScreenCover = new CrashScreenCover { Alpha = 0 } }; }
public GameBoy(ICartridge cartridge, IClock clock, bool preferGbcMode) { GbcMode = preferGbcMode && (cartridge.GameBoyColorFlag & GameBoyColorFlag.SupportsColor) != 0; Components = new List <IGameBoyComponent> { (Cartridge = cartridge), (Memory = new GameBoyMemory(this)), (Cpu = new GameBoyCpu(this, clock)), (Gpu = new GameBoyGpu(this)), (Spu = new GameBoySpu(this)), (KeyPad = new GameBoyPad(this)), (Timer = new GameBoyTimer(this)) }.AsReadOnly(); foreach (var component in Components) { component.Initialize(); } Reset(); IsPoweredOn = true; }
public Game(byte[] fileData, ISaveMemory saveMemory) { this.saveMemory = saveMemory; title = ExtractGameTitle(fileData); gameBoyColorGame = fileData [0x0143] == 0x80; licenseCode = (((int)fileData [0x0144]) << 4) | fileData [0x0145]; gameBoy = fileData [0x0146] == 0x00; romType = (RomType)fileData [0x0147]; switch (fileData [0x0148]) { case 0x00: romSize = 32 * 1024; romBanks = 2; break; case 0x01: romSize = 64 * 1024; romBanks = 4; break; case 0x02: romSize = 128 * 1024; romBanks = 8; break; case 0x03: romSize = 256 * 1024; romBanks = 16; break; case 0x04: romSize = 512 * 1024; romBanks = 32; break; case 0x05: romSize = 1024 * 1024; romBanks = 64; break; case 0x06: romSize = 2 * 1024 * 1024; romBanks = 128; break; case 0x52: romSize = 1179648; romBanks = 72; break; case 0x53: romSize = 1310720; romBanks = 80; break; case 0x54: romSize = 1572864; romBanks = 96; break; } switch (fileData [0x0149]) { case 0x00: ramSize = 0; ramBanks = 0; break; case 0x01: ramSize = 2 * 1024; ramBanks = 1; break; case 0x02: ramSize = 8 * 1024; ramBanks = 1; break; case 0x03: ramSize = 32 * 1024; ramBanks = 4; break; case 0x04: ramSize = 128 * 1024; ramBanks = 16; break; } japanese = fileData [0x014A] == 0x00; oldLicenseCode = fileData [0x014B]; maskRomVersion = fileData [0x014C]; headerChecksum = fileData [0x014D]; for (int i = 0x0134; i <= 0x014C; i++) { actualHeaderChecksum = actualHeaderChecksum - fileData [i] - 1; } actualHeaderChecksum &= 0xFF; checksum = (((int)fileData [0x014E]) << 8) | fileData [0x014F]; for (int i = 0; i < fileData.Length; i++) { if (i != 0x014E && i != 0x014F) { actualChecksum += fileData [i]; } } actualChecksum &= 0xFFFF; noVerticalBlankInterruptHandler = fileData [0x0040] == 0xD9; noLCDCStatusInterruptHandler = fileData [0x0048] == 0xD9; noTimerOverflowInterruptHandler = fileData [0x0050] == 0xD9; noSerialTransferCompletionInterruptHandler = fileData [0x0058] == 0xD9; noHighToLowOfP10ToP13InterruptHandler = fileData [0x0060] == 0xD9; byte[] savedData = null; if (saveMemory != null) { savedData = saveMemory.Load(title); } switch (romType) { case RomType.ROM: cartridge = new ROM(fileData); break; case RomType.ROM_MBC1: case RomType.ROM_MBC1_RAM: case RomType.ROM_MBC1_RAM_BATT: cartridge = new MBC1(fileData, savedData, romType, romSize, romBanks); break; case RomType.ROM_MBC2: case RomType.ROM_MBC2_BATTERY: cartridge = new MBC2(fileData, savedData, romType, romSize, romBanks); break; case RomType.ROM_MBC3: case RomType.ROM_MBC3_RAM: case RomType.ROM_MBC3_RAM_BATT: case RomType.ROM_MBC3_TIMER_BATT: case RomType.ROM_MBC3_TIMER_RAM_BATT: case RomType.ROM_MBC5: case RomType.ROM_MBC5_RAM: case RomType.ROM_MBC5_RAM_BATT: cartridge = new MBC3(fileData, savedData, romType, romSize, romBanks); break; default: throw new Exception(string.Format("Cannot emulate cartridge type {0}.", romType)); } }
public void LoadCartridge(ICartridge cartridge) => _cartridge = cartridge;
public GameBoy(ICpu cpu, IMmu mmu, ICartridge cartridge) : this(cpu, mmu) { Cartridge = cartridge; Mmu = mmu; }
public void InsertCartridge(ICartridge cartridge) { _cartridge = cartridge; }
public void SetCartridge(ICartridge cartridge) { }
public void LoadCartridge(ICartridge cartridge) { memory.SetCartridge(cartridge); }
public void SetCartridge(ICartridge cartridge) { this.cartridge = cartridge; }
public void SetCartridge(ICartridge cartridge) { _cartridge = cartridge; }
public Game( byte[] fileData ) { title = ExtractGameTitle( fileData ); gameBoyColorGame = fileData[ 0x0143 ] == 0x80; licenseCode = ( ( (int)fileData[ 0x0144 ] ) << 4 ) | fileData[ 0x0145 ]; gameBoy = fileData[ 0x0146 ] == 0x00; romType = (RomType)fileData[ 0x0147 ]; switch( fileData[ 0x0148 ] ) { case 0x00: romSize = 32 * 1024; romBanks = 2; break; case 0x01: romSize = 64 * 1024; romBanks = 4; break; case 0x02: romSize = 128 * 1024; romBanks = 8; break; case 0x03: romSize = 256 * 1024; romBanks = 16; break; case 0x04: romSize = 512 * 1024; romBanks = 32; break; case 0x05: romSize = 1024 * 1024; romBanks = 64; break; case 0x06: romSize = 2 * 1024 * 1024; romBanks = 128; break; case 0x52: romSize = 1179648; romBanks = 72; break; case 0x53: romSize = 1310720; romBanks = 80; break; case 0x54: romSize = 1572864; romBanks = 96; break; } switch( fileData[ 0x0149 ] ) { case 0x00: ramSize = 0; ramBanks = 0; break; case 0x01: ramSize = 2 * 1024; ramBanks = 1; break; case 0x02: ramSize = 8 * 1024; ramBanks = 1; break; case 0x03: ramSize = 32 * 1024; ramBanks = 4; break; case 0x04: ramSize = 128 * 1024; ramBanks = 16; break; } japanese = fileData[ 0x014A ] == 0x00; oldLicenseCode = fileData[ 0x014B ]; maskRomVersion = fileData[ 0x014C ]; headerChecksum = fileData[ 0x014D ]; for( int i = 0x0134; i <= 0x014C; i++ ) { actualHeaderChecksum = actualHeaderChecksum - fileData[ i ] - 1; } actualHeaderChecksum &= 0xFF; checksum = ( ( (int)fileData[ 0x014E ] ) << 8 ) | fileData[ 0x014F ]; for( int i = 0; i < fileData.Length; i++ ) { if( i != 0x014E && i != 0x014F ) { actualChecksum += fileData[ i ]; } } actualChecksum &= 0xFFFF; noVerticalBlankInterruptHandler = fileData[ 0x0040 ] == 0xD9; noLCDCStatusInterruptHandler = fileData[ 0x0048 ] == 0xD9; noTimerOverflowInterruptHandler = fileData[ 0x0050 ] == 0xD9; noSerialTransferCompletionInterruptHandler = fileData[ 0x0058 ] == 0xD9; noHighToLowOfP10ToP13InterruptHandler = fileData[ 0x0060 ] == 0xD9; switch( romType ) { case RomType.ROM: cartridge = new ROM( fileData ); break; case RomType.ROM_MBC1: case RomType.ROM_MBC1_RAM: case RomType.ROM_MBC1_RAM_BATT: cartridge = new MBC1( fileData, romType, romSize, romBanks ); break; case RomType.ROM_MBC2: case RomType.ROM_MBC2_BATTERY: cartridge = new MBC2( fileData, romType, romSize, romBanks ); break; default: throw new Exception( string.Format( "Cannot emulate cartridge type {0}.", romType ) ); } }
public Game(byte[] fileData) { Title = ExtractGameTitle(fileData); GameBoyColorGame = fileData[0x0143] == 0x80; LicenseCode = (((int)fileData[0x0144]) << 4) | fileData[0x0145]; GameBoy = fileData[0x0146] == 0x00; RomType = (RomType)fileData[0x0147]; switch (fileData[0x0148]) { case 0x00: RomSize = 32 * 1024; RomBanks = 2; break; case 0x01: RomSize = 64 * 1024; RomBanks = 4; break; case 0x02: RomSize = 128 * 1024; RomBanks = 8; break; case 0x03: RomSize = 256 * 1024; RomBanks = 16; break; case 0x04: RomSize = 512 * 1024; RomBanks = 32; break; case 0x05: RomSize = 1024 * 1024; RomBanks = 64; break; case 0x06: RomSize = 2 * 1024 * 1024; RomBanks = 128; break; case 0x52: RomSize = 1179648; RomBanks = 72; break; case 0x53: RomSize = 1310720; RomBanks = 80; break; case 0x54: RomSize = 1572864; RomBanks = 96; break; } switch (fileData[0x0149]) { case 0x00: RamSize = 0; RamBanks = 0; break; case 0x01: RamSize = 2 * 1024; RamBanks = 1; break; case 0x02: RamSize = 8 * 1024; RamBanks = 1; break; case 0x03: RamSize = 32 * 1024; RamBanks = 4; break; case 0x04: RamSize = 128 * 1024; RamBanks = 16; break; } Japanese = fileData[0x014A] == 0x00; OldLicenseCode = fileData[0x014B]; MaskRomVersion = fileData[0x014C]; HeaderChecksum = fileData[0x014D]; for (int i = 0x0134; i <= 0x014C; i++) { ActualHeaderChecksum = ActualHeaderChecksum - fileData[i] - 1; } ActualHeaderChecksum &= 0xFF; Checksum = (((int)fileData[0x014E]) << 8) | fileData[0x014F]; for (int i = 0; i < fileData.Length; i++) { if (i != 0x014E && i != 0x014F) { ActualChecksum += fileData[i]; } } ActualChecksum &= 0xFFFF; NoVerticalBlankInterruptHandler = fileData[0x0040] == 0xD9; NoLcdcStatusInterruptHandler = fileData[0x0048] == 0xD9; NoTimerOverflowInterruptHandler = fileData[0x0050] == 0xD9; NoSerialTransferCompletionInterruptHandler = fileData[0x0058] == 0xD9; NoHighToLowOfP10ToP13InterruptHandler = fileData[0x0060] == 0xD9; switch (RomType) { case RomType.Rom: Cartridge = new Rom(fileData); break; case RomType.RomMbc1: case RomType.RomMbc1Ram: case RomType.RomMbc1RamBatt: Cartridge = new Mbc1(fileData, RomType, RomSize, RomBanks); break; case RomType.RomMbc2: case RomType.RomMbc2Battery: Cartridge = new Mbc2(fileData, RomType, RomSize, RomBanks); break; default: throw new Exception($"Cannot emulate cartridge type {RomType}."); } }
private void InitializeCartridge(ICartridge cartridge) { cartridge.Bytes.CopyTo(Rom.Bytes, 0); }
public void Initialize(ICartridge cartridge) { InitializeBootloader(); InitializeCartridge(cartridge); InitializeMemory(); }
public MemoryMap(ICartridge cartridge) { _cartridge = cartridge; }
protected Mmu(SerializationInfo info, StreamingContext ctx) { _memory = (byte[])info.GetValue("Memory", typeof(byte[])); _cartridge = (ICartridge)info.GetValue("Cartridge", typeof(ICartridge)); }
public GameplaySubScreen(ICartridge cart) { cartridge = cart; }
public void LoadROM(byte[] bytecode) { Cartridge = CartridgeFactory.CreateCartridge(bytecode); }
public GameBoyGPU(ICartridge memory) { Memory = memory; Reset(); }
public void LoadCartridge(byte[] data) { Cartridge = new Cartridge(data); }
public GB(ICartridge cartridge) { _memory = new MemoryMap(cartridge); }
public Z80(ICartridge game) { cartridge = game; Reset(); }
//private static TraceSwitch GeneralSwitch = new TraceSwitch("General", "General trace switch", "Error"); public void InsertCartridge(ICartridge cartridge) { this.Cartridge = cartridge; }