UNPKG

nes-emu

Version:

A NES emulator

32 lines (30 loc) 1.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _registers = require("../../registers"); /** Returns the current status of the APU. */ class APUStatus extends _registers.InMemoryRegister { constructor() { super(); this.addField("lcPulse1", 0).addField("lcPulse2", 1).addField("lcTriangle", 2).addField("lcNoise", 3).addField("remainingBytesDMC", 4).addField("frameIRQFlag", 6).addField("dmcIRQFlag", 7); } /** Reads the status and resets the frame IRQ flag. */ readAt() { const { apu } = this.context; const channels = apu.channels; this.lcPulse1 = +(channels.pulses[0].lengthCounter.counter > 0); this.lcPulse2 = +(channels.pulses[1].lengthCounter.counter > 0); this.lcTriangle = +(channels.triangle.lengthCounter.counter > 0); this.lcNoise = +(channels.noise.lengthCounter.counter > 0); this.remainingBytesDMC = channels.dmc.remainingBytes > 0; this.frameIRQFlag = apu.frameIRQFlag; this.dmcIRQFlag = apu.registers.dmc.control.irqEnable; if (!this.context.isDebugging) apu.frameIRQFlag = false; return this.value; } } exports.default = APUStatus;