nes-emu
Version:
A NES emulator
32 lines (31 loc) • 1.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _registers = require("../../registers");
var _constants = _interopRequireDefault(require("../../constants"));
var _helpers = require("../../helpers");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
/**
* OAM DMA Register (> write)
*
* Writing XX here will upload 256 bytes of data from CPU page $XX00-$XXFF to the internal PPU OAM.
* This process takes 513 CPU cycles (+1 if on an odd cycle). The CPU is suspended during the operation.
*/
class OAMDMA extends _registers.WriteOnlyInMemoryRegister {
/** Writes 256 bytes from page $`byte` to PPU's internal OAM. */
writeAt(__, byte) {
const {
cpu,
ppu
} = this.context;
for (let i = 0; i < 256; i++) {
const address = _helpers.Byte.to16Bit(byte, i);
const value = cpu.memory.readAt(address);
ppu.oamRam[i] = value;
}
cpu.extraCycles += _constants.default.OAMDMA_CPU_CYCLES + (cpu.cycle % 2 === 1);
}
}
exports.default = OAMDMA;