Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function app() {
- var R = 0x0000c0;
- var G = 0x00c000;
- var B = 0xc00000;
- var YR = 0x0000ff;
- var YG = 0x00ff00;
- var YB = 0xff0000;
- var palette = [
- 0, B, R, B | R, G, G | B, G | R, G | B | R,
- 0, YB, YR, YB | YR, YG, YG | YB, YG | YR, YG | YB | YR,
- ];
- var colorTab = new Uint32Array(256 * 256 * 8);
- var colorTabFlash = new Uint32Array(256 * 256 * 8);
- var canvasElement = document.getElementById("canv");
- var context = canvasElement.getContext("2d");
- var image = context.getImageData(0, 0, 256, 192);
- var imageData = new Uint32Array(image.data.buffer);
- var lineOffsets = new Array(192);
- var attrOffsets = new Array(6144);
- function precalc() {
- var inkTab = new Uint32Array(256);
- var paperTab = new Uint32Array(256);
- var inkTabFlash = new Uint32Array(256);
- var paperTabFlash = new Uint32Array(256);
- function getInkColor(attr, flashed) {
- var bright = !!(attr & 0x40);
- var flash = !!(attr & 0x80);
- if (flashed && flash)
- var cindex = ((attr >>> 3) & 7);
- else
- var cindex = ((attr >>> 0) & 7);
- return 0xff000000 | palette[cindex + (bright ? 8 : 0)];
- }
- function getPaperColor(attr, flashed) {
- var bright = !!(attr & 0x40);
- var flash = !!(attr & 0x80);
- if (flashed && flash)
- var cindex = ((attr >>> 0) & 7);
- else
- var cindex = ((attr >>> 3) & 7);
- return 0xff000000 | palette[cindex + (bright ? 8 : 0)];
- }
- for (var aval = 0; aval < 256; aval++) {
- inkTab[aval] = getInkColor(aval, false);
- paperTab[aval] = getPaperColor(aval, false);
- inkTabFlash[aval] = getInkColor(aval, true);
- paperTabFlash[aval] = getPaperColor(aval, true);
- }
- for (var bval = 0; bval < 256; bval++) {
- for (var aval = 0; aval < 256; aval++) {
- var index = (bval * 256 + aval) * 8;
- for (var bit = 0; bit < 8; bit++) {
- if (bval & (1 << (7 - bit))) {
- colorTab[index + bit] = inkTab[aval];
- colorTabFlash[index + bit] = inkTabFlash[aval];
- }
- else {
- colorTab[index + bit] = paperTab[aval];
- colorTabFlash[index + bit] = paperTabFlash[aval];
- }
- }
- }
- }
- for (var line = 0; line < 192; line++) {
- var part = line >> 6;
- var charLine = line & 7;
- var scanLine = (line >> 3) & 7;
- var realLine = part * 64 + charLine * 8 + scanLine;
- lineOffsets[line] = realLine;
- var attrBase = 6144 + (realLine >> 3) * 32;
- for (var boffs = 0; boffs < 32; boffs++) {
- attrOffsets[line * 32 + boffs] = attrBase + boffs;
- }
- }
- }
- function render(fileContent) {
- if (fileContent.byteLength != 6912)
- return;
- var index = 0;
- var data = new Uint8Array(fileContent);
- for (var line = 0; line < 192; line++) {
- var dstIndex = lineOffsets[line] * 256;
- var attrIndex = attrOffsets[index];
- for (var bcnt = 0; bcnt < 32; bcnt++) {
- var attr = data[attrIndex++];
- var byte = data[index++];
- var srcIndex = (byte * 256 + attr) * 8;
- imageData.set(colorTab.subarray(srcIndex, srcIndex + 8), dstIndex);
- dstIndex += 8;
- }
- }
- context.putImageData(image, 0, 0);
- }
- var request = new XMLHttpRequest();
- request.overrideMimeType('text\/plain; charset=x-user-defined');
- request.open('GET', "/test.scr", true);
- request.responseType = "arraybuffer";
- request.onload = function () {
- var t0 = performance.now();
- for (var cnt = 0; cnt < 1000; cnt++)
- render(request.response);
- var t1 = performance.now();
- console.log('time: ', (t1 - t0).toFixed(4), 'milliseconds');
- };
- precalc();
- request.send(null);
- }
- app();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement