// write byte public void wb(ushort address, byte value) { if (address >= Address.Audio_L && address <= Address.Audio_H) { //audio.wb(address, value); return; } if (address <= Address.RomBank_H) { mbc.wb(address, value); return; } if ((address >= Address.RamBank_L) && (address <= Address.RamBank_H)) { mbc.rwb((ushort)(address - Address.RamBank_L), value); return; } if (address == Address.Dma) { TransfertDMA(value); return; } if (address == Address.DividerTimer) { TrapDividerRegister(); return; } byte[] memory; ushort resolvedAddress; ResolveMemoryAddress(address, out memory, out resolvedAddress); memory [resolvedAddress] = value; }
// write byte public void wb(ushort address, byte value) { switch (address) { case Address.Lcdc: gpu.lcdc = value; return; case Address.Stat: gpu.stat = value; return; case Address.Scy: gpu.scy = value; return; case Address.Scx: gpu.scx = value; return; case Address.Ly: gpu.ly = value; return; case Address.Lyc: gpu.lyc = value; return; case Address.Wy: gpu.wy = value; return; case Address.Wx: gpu.wx = value; return; case Address.Bgp: gpu.bgp = value; return; case Address.Obp0: gpu.obp0 = value; return; case Address.Obp1: gpu.obp1 = value; return; // keypad case Address.Keypad: keypad.memory = value; UnityEngine.Debug.LogFormat("W {0} {1}", Convert.ToString(value, 2).PadLeft(8, '0'), Convert.ToString(keypad.memory, 2).PadLeft(8, '0')); return; // timer case Address.TimerCounter: timer.counter = value; return; case Address.TimerDivider: TrapDividerRegister(); return; case Address.TimerController: timer.controller = value; return; case Address.TimerModulator: timer.modulator = value; return; // interrupt case Address.InterruptRequest: ir = value; return; case Address.InterruptEnable: ie = value; return; // dma case Address.Dma: TransfertDma(value); return; } if (address >= Address.Apu_L && address <= Address.Apu_M) { //apu.wb(address, value); return; } if ((address >= Address.RomBank_L) && (address <= Address.RomBank_M)) { mbc.wb((ushort)(address - Address.RomBank_L), value); return; } if ((address >= Address.RamBank_L) && (address <= Address.RamBank_M)) { mbc.rwb((ushort)(address - Address.RamBank_L), value); return; } byte[] memory; ushort resolvedAddress; ResolveMemoryAddress(address, out memory, out resolvedAddress); memory [resolvedAddress] = value; }