UNPKG

nes-emu

Version:

A NES emulator

36 lines (33 loc) 1.31 kB
"use strict"; 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;