public byte CpuRead(UInt16 address, bool debugMode = false) { if (InCpuRamRange(address)) { return(cpuRam[MaskCpuRam(address)]); } else if (InPpuRange(address)) { return(ppu.CpuRead(MaskPpu(address), debugMode)); } else if (InControllerRange(address)) { int index = address & 0x0001; byte data = (byte)(BitMagic.IsBitSet(capturedController[index], 7) ? 0x01 : 0x00); capturedController[index] <<= 1; return(data); } else if (InCartridgeRange(address)) { return(cartridge.CpuRead(address)); } return(0x00); }