nes-emu
Version:
A NES emulator
74 lines (71 loc) • 4.14 kB
JavaScript
"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;