UNPKG

nes-emu

Version:

A NES emulator

74 lines (71 loc) 4.14 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.APURegisterSegment = void 0; var _PulseControl = _interopRequireDefault(require("./PulseControl")); var _PulseSweep = _interopRequireDefault(require("./PulseSweep")); var _PulseTimerLow = _interopRequireDefault(require("./PulseTimerLow")); var _PulseLCLTimerHigh = _interopRequireDefault(require("./PulseLCLTimerHigh")); var _TriangleLinearLCL = _interopRequireDefault(require("./TriangleLinearLCL")); var _TriangleTimerLow = _interopRequireDefault(require("./TriangleTimerLow")); var _TriangleLCLTimerHigh = _interopRequireDefault(require("./TriangleLCLTimerHigh")); var _NoiseControl = _interopRequireDefault(require("./NoiseControl")); var _NoiseForm = _interopRequireDefault(require("./NoiseForm")); var _NoiseLCL = _interopRequireDefault(require("./NoiseLCL")); var _DMCControl = _interopRequireDefault(require("./DMCControl")); var _DMCLoad = _interopRequireDefault(require("./DMCLoad")); var _DMCSampleAddress = _interopRequireDefault(require("./DMCSampleAddress")); var _DMCSampleLength = _interopRequireDefault(require("./DMCSampleLength")); var _APUStatus = _interopRequireDefault(require("./APUStatus")); var _APUControl = _interopRequireDefault(require("./APUControl")); var _APUFrameCounter = _interopRequireDefault(require("./APUFrameCounter")); var _memory = require("../../memory"); var _registers = require("../../registers"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } /** A collection of all the CPU-mapped APU registers. */ class APURegisterSegment { constructor(context) { this.pulses = [0, 1].map(id => ({ control: new _PulseControl.default(id).loadContext(context), // $4000/$4004 sweep: new _PulseSweep.default(id).loadContext(context), // $4001/$4005 timerLow: new _PulseTimerLow.default(id).loadContext(context), // $4002/$4006 lclTimerHigh: new _PulseLCLTimerHigh.default(id).loadContext(context) // $4003/$4007 })); this.triangle = { linearLCL: new _TriangleLinearLCL.default().loadContext(context), // $4008 timerLow: new _TriangleTimerLow.default().loadContext(context), // $400A lclTimerHigh: new _TriangleLCLTimerHigh.default().loadContext(context) // $400B }; this.noise = { control: new _NoiseControl.default().loadContext(context), // $400C form: new _NoiseForm.default().loadContext(context), // $400E lcl: new _NoiseLCL.default().loadContext(context) // $400F }; this.dmc = { control: new _DMCControl.default().loadContext(context), // $4010 load: new _DMCLoad.default().loadContext(context), // $4011 sampleAddress: new _DMCSampleAddress.default().loadContext(context), // $4012 sampleLength: new _DMCSampleLength.default().loadContext(context) // $4013 }; this.apuStatus = new _APUStatus.default().loadContext(context); // $4015 (read) this.apuControl = new _APUControl.default().loadContext(context); // $4015 (write) this.apuFrameCounter = new _APUFrameCounter.default().loadContext(context); // $4017 this.apuMain = new _registers.MixedInMemoryRegister(this.apuStatus, this.apuControl); // ($4015) } /** Creates a memory segment with the first 20 bytes ($4000-$4013). */ toMemory() { return _memory.WithCompositeMemory.createSegment([this.pulses[0].control, this.pulses[0].sweep, this.pulses[0].timerLow, this.pulses[0].lclTimerHigh, this.pulses[1].control, this.pulses[1].sweep, this.pulses[1].timerLow, this.pulses[1].lclTimerHigh, this.triangle.linearLCL, new _memory.MemoryPadding(1), this.triangle.timerLow, this.triangle.lclTimerHigh, this.noise.control, new _memory.MemoryPadding(1), this.noise.form, this.noise.lcl, this.dmc.control, this.dmc.load, this.dmc.sampleAddress, this.dmc.sampleLength]); } } exports.APURegisterSegment = APURegisterSegment;