UNPKG

nes-emu

Version:

A NES emulator

32 lines (31 loc) 1.09 kB
"use strict"; 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;