flashmagic.js
Version:
NXP LPC Microprocessor Programmer
48 lines (47 loc) • 1.75 kB
JavaScript
;
var SECTOR_ADDRESS = new Uint32Array([
0x00000000, 0x00001000, 0x00002000, 0x00003000,
0x00004000, 0x00005000, 0x00006000, 0x00007000,
0x00008000, 0x00010000, 0x00018000, 0x00020000,
0x00028000, 0x00030000, 0x00038000, 0x00040000,
0x00048000, 0x00050000, 0x00058000, 0x00060000,
0x00068000, 0x00070000,
0x00078000, 0x00079000, 0x0007A000, 0x0007B000,
0x0007C000, 0x0007D000,
0x0007E000
]);
exports.MIN_SECTOR = 0;
exports.MAX_SECTOR = SECTOR_ADDRESS.length - exports.MIN_SECTOR;
exports.MIN_ROM_ADDRESS = SECTOR_ADDRESS[exports.MIN_SECTOR];
exports.MAX_ROM_ADDRESS = SECTOR_ADDRESS[exports.MAX_SECTOR + 1] - 1;
exports.LINES_PER_UUENCODED_CHUNK = 20;
exports.BYTES_PER_UUENCODED_LINE = 45;
function addressToSector(addr) {
if (addr >= exports.MIN_ROM_ADDRESS) {
for (var i = exports.MIN_SECTOR; i <= exports.MAX_SECTOR; i++) {
if (addr < SECTOR_ADDRESS[i + 1]) {
return i;
}
}
}
throw new RangeError("ROM address 0x" + addr.toString(16) + " out of range");
}
exports.addressToSector = addressToSector;
function sectorToAddress(sect) {
if (sect >= exports.MIN_SECTOR && sect <= exports.MAX_SECTOR) {
return SECTOR_ADDRESS[~~sect];
}
throw new RangeError("ROM sector " + sect + " out of range");
}
exports.sectorToAddress = sectorToAddress;
function sectorSize(sect) {
if (sect >= exports.MIN_SECTOR && sect <= exports.MAX_SECTOR) {
return SECTOR_ADDRESS[sect + 1] - SECTOR_ADDRESS[sect];
}
throw new RangeError("Bad sector " + sect);
}
exports.sectorSize = sectorSize;
function alignCount(count) {
return (count & 3) === 0 ? count : 4 + (count & ~3);
}
exports.alignCount = alignCount;