public Emulator(IVideoOutput video = null, IAudioOutput audio = null, ISaveMemory saveMemory = null) : base(video, audio, saveMemory) { for (int i = 0; i < WIDTH * HEIGHT; i++) { SetPixel(i, 0xFF000000); } Video?.SetSize(WIDTH, HEIGHT); }
public Emulator(IVideoOutput video, IAudioOutput audio = null, ISaveMemory saveMemory = null) : base(video, audio, saveMemory) { for (int i = 0; i < pixels.Length; i++) { pixels [i] = 0xFF000000; } Video.SetSize(WIDTH, HEIGHT); }
// -------------------------------- EMU public Emulator(IVideoOutput video, IAudioOutput audio = null, ISaveMemory saveMemory = null) : base(video, audio, saveMemory) { pressButton.Instance.onClick += onClick; for (int i = 0; i < pixels.Length; i++) { pixels [i] = 0xFF000000; } Video.SetSize(WIDTH, HEIGHT); }
public EmulatorBase(IVideoOutput video, IAudioOutput audio = null, ISaveMemory saveMemory = null) { Video = video; Audio = audio; SaveMemory = saveMemory; }
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)); } }
internal static Game Load(byte[] fileData, ISaveMemory saveMemory) { return(new Game(fileData, saveMemory)); }
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)); } }
internal static Game Load(byte[] fileData, ISaveMemory saveMemory) { return new Game(fileData, saveMemory); }