UNPKG

flashmagic.js

Version:
59 lines (58 loc) 2.29 kB
"use strict"; var Symbol = require('es6-symbol'); var Utilities = require('./Utilities'); var ROMAddress_1 = require('./ROMAddress'); var _addressSym = Symbol(); var _lengthSym = Symbol(); var ROMBlock = (function () { function ROMBlock(addr, size) { var n = addr.address; if (size < 0) { throw new RangeError("ROM block size " + size + " must be >= 0"); } var m = n + size - 1; if (m > Utilities.MAX_ROM_ADDRESS) { throw new RangeError("ROM block [0x" + n.toString(16) + "...0x" + m.toString(16) + "] out of address space"); } this[_addressSym] = addr; this[_lengthSym] = size; } Object.defineProperty(ROMBlock.prototype, "address", { get: function () { return this[_addressSym].address; }, enumerable: true, configurable: true }); Object.defineProperty(ROMBlock.prototype, "sector", { get: function () { return this[_addressSym].sector; }, enumerable: true, configurable: true }); Object.defineProperty(ROMBlock.prototype, "length", { get: function () { return this[_lengthSym]; }, enumerable: true, configurable: true }); ROMBlock.prototype.adjust = function (diff) { var size = Math.max(0, this.length - diff); return ROMBlock.fromAddress(this.address + diff, size); }; ROMBlock.prototype.containsAddress = function (addr) { return this.address <= addr && addr < this.address + this.length; }; ROMBlock.fromAddress = function (addr, size) { return new ROMBlock(ROMAddress_1.ROMAddress.fromAddress(addr), size); }; ROMBlock.fromAddressRange = function (start, end) { return new ROMBlock(ROMAddress_1.ROMAddress.fromAddress(start), end - start + 1); }; ROMBlock.fromSector = function (sect, size) { return new ROMBlock(ROMAddress_1.ROMAddress.fromSector(sect), size); }; ROMBlock.fromSectorRange = function (start, end) { var startAddr = ROMAddress_1.ROMAddress.fromSector(start); var endAddr = Utilities.sectorToAddress(end) + Utilities.sectorSize(end); return new ROMBlock(startAddr, endAddr - startAddr.address); }; return ROMBlock; }()); exports.ROMBlock = ROMBlock;