///////////////////////////////// // Mapper092 Jaleco/Type1 Higher bank switch // ////////////////////////////////////////////////////////////////////////// using VirtualNes.Core.Debug; using static VirtualNes.MMU; using INT = System.Int32; namespace VirtualNes.Core { public class Mapper092 : Mapper { public Mapper092(NES parent) : base(parent) { } public override void Reset() { SetPROM_32K_Bank(0, 1, PROM_8K_SIZE - 2, PROM_8K_SIZE - 1); if (VROM_8K_SIZE != 0) { SetVROM_8K_Bank(0); } } //void Mapper092::Write(WORD addr, BYTE data) public override void Write(ushort addr, byte data) { //DEBUGOUT( "A:%04X D:%02X\n", addr, data ); data = (byte)(addr & 0xFF); if (addr >= 0x9000) { if ((data & 0xF0) == 0xD0) { SetPROM_16K_Bank(6, data & 0x0F); } else if ((data & 0xF0) == 0xE0) { SetVROM_8K_Bank(data & 0x0F); } } else { if ((data & 0xF0) == 0xB0) { SetPROM_16K_Bank(6, data & 0x0F); } else if ((data & 0xF0) == 0x70) { SetVROM_8K_Bank(data & 0x0F); } else if ((data & 0xF0) == 0xC0) { INT[] tbl = new int[]{ 3, 4, 5, 6, 0, 1, 2, 7, 9,10, 8,11,13,12,14,15 }; // OSDにするべきか… if (Supporter.S.Config.sound.bExtraSoundEnable) { //TODO : 似乎VirtuaNES有直接播放某个音频文件的功能 Debuger.Log($"CODE {data:X2}"); //DirectSound.EsfAllStop(); //DirectSound.EsfPlay(ESF_MOEPRO_STRIKE + tbl[data & 0x0F]); } } } } } }