flashmagic.js
Version:
NXP LPC Microprocessor Programmer
59 lines (58 loc) • 2.29 kB
JavaScript
;
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;