UNPKG

flashmagic.js

Version:
48 lines (47 loc) 1.75 kB
"use strict"; 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;