nes-emu
Version:
A NES emulator
36 lines (33 loc) • 1.31 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _WithLittleEndian = _interopRequireDefault(require("./WithLittleEndian"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
/** A memory chunk that mirrors another `chunk`. */
class MemoryMirror {
constructor(chunk, size) {
let startAt = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
let mirroredSize = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : chunk.memorySize - startAt;
_WithLittleEndian.default.apply(this);
this.chunk = chunk;
this.startAt = startAt;
this.mirroredSize = mirroredSize;
this.memorySize = size;
}
/** Reads a byte from `address`, mirroring bytes. */
readAt(address) {
this._checkAddress(address);
return this.chunk.readAt(this.startAt + address % this.mirroredSize);
}
/** Writes a `byte` to `address`, mirroring bytes. */
writeAt(address, byte) {
this._checkAddress(address);
this.chunk.writeAt(this.startAt + address % this.mirroredSize, byte);
}
_checkAddress(address) {
if (address >= this.memorySize) throw new Error("Unreachable address: 0x".concat(address.toString(16), "."));
}
}
exports.default = MemoryMirror;
;