Advertisement
Guest User

Untitled

a guest
Aug 25th, 2017
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function app() {
  2.     var R = 0x0000c0;
  3.     var G = 0x00c000;
  4.     var B = 0xc00000;
  5.     var YR = 0x0000ff;
  6.     var YG = 0x00ff00;
  7.     var YB = 0xff0000;
  8.     var palette = [
  9.         0, B, R, B | R, G, G | B, G | R, G | B | R,
  10.         0, YB, YR, YB | YR, YG, YG | YB, YG | YR, YG | YB | YR,
  11.     ];
  12.     var colorTab = new Uint32Array(256 * 256 * 8);
  13.     var colorTabFlash = new Uint32Array(256 * 256 * 8);
  14.     var canvasElement = document.getElementById("canv");
  15.     var context = canvasElement.getContext("2d");
  16.     var image = context.getImageData(0, 0, 256, 192);
  17.     var imageData = new Uint32Array(image.data.buffer);
  18.     var lineOffsets = new Array(192);
  19.     var attrOffsets = new Array(6144);
  20.     function precalc() {
  21.         var inkTab = new Uint32Array(256);
  22.         var paperTab = new Uint32Array(256);
  23.         var inkTabFlash = new Uint32Array(256);
  24.         var paperTabFlash = new Uint32Array(256);
  25.         function getInkColor(attr, flashed) {
  26.             var bright = !!(attr & 0x40);
  27.             var flash = !!(attr & 0x80);
  28.             if (flashed && flash)
  29.                 var cindex = ((attr >>> 3) & 7);
  30.             else
  31.                 var cindex = ((attr >>> 0) & 7);
  32.             return 0xff000000 | palette[cindex + (bright ? 8 : 0)];
  33.         }
  34.         function getPaperColor(attr, flashed) {
  35.             var bright = !!(attr & 0x40);
  36.             var flash = !!(attr & 0x80);
  37.             if (flashed && flash)
  38.                 var cindex = ((attr >>> 0) & 7);
  39.             else
  40.                 var cindex = ((attr >>> 3) & 7);
  41.             return 0xff000000 | palette[cindex + (bright ? 8 : 0)];
  42.         }
  43.         for (var aval = 0; aval < 256; aval++) {
  44.             inkTab[aval] = getInkColor(aval, false);
  45.             paperTab[aval] = getPaperColor(aval, false);
  46.             inkTabFlash[aval] = getInkColor(aval, true);
  47.             paperTabFlash[aval] = getPaperColor(aval, true);
  48.         }
  49.         for (var bval = 0; bval < 256; bval++) {
  50.             for (var aval = 0; aval < 256; aval++) {
  51.                 var index = (bval * 256 + aval) * 8;
  52.                 for (var bit = 0; bit < 8; bit++) {
  53.                     if (bval & (1 << (7 - bit))) {
  54.                         colorTab[index + bit] = inkTab[aval];
  55.                         colorTabFlash[index + bit] = inkTabFlash[aval];
  56.                     }
  57.                     else {
  58.                         colorTab[index + bit] = paperTab[aval];
  59.                         colorTabFlash[index + bit] = paperTabFlash[aval];
  60.                     }
  61.                 }
  62.             }
  63.         }
  64.         for (var line = 0; line < 192; line++) {
  65.             var part = line >> 6;
  66.             var charLine = line & 7;
  67.             var scanLine = (line >> 3) & 7;
  68.             var realLine = part * 64 + charLine * 8 + scanLine;
  69.             lineOffsets[line] = realLine;
  70.             var attrBase = 6144 + (realLine >> 3) * 32;
  71.             for (var boffs = 0; boffs < 32; boffs++) {
  72.                 attrOffsets[line * 32 + boffs] = attrBase + boffs;
  73.             }
  74.         }
  75.     }
  76.     function render(fileContent) {
  77.         if (fileContent.byteLength != 6912)
  78.             return;
  79.         var index = 0;
  80.         var data = new Uint8Array(fileContent);
  81.         for (var line = 0; line < 192; line++) {
  82.             var dstIndex = lineOffsets[line] * 256;
  83.             var attrIndex = attrOffsets[index];
  84.             for (var bcnt = 0; bcnt < 32; bcnt++) {
  85.                 var attr = data[attrIndex++];
  86.                 var byte = data[index++];
  87.                 var srcIndex = (byte * 256 + attr) * 8;
  88.                 imageData.set(colorTab.subarray(srcIndex, srcIndex + 8), dstIndex);
  89.                 dstIndex += 8;
  90.             }
  91.         }
  92.         context.putImageData(image, 0, 0);
  93.     }
  94.     var request = new XMLHttpRequest();
  95.     request.overrideMimeType('text\/plain; charset=x-user-defined');
  96.     request.open('GET', "/test.scr", true);
  97.     request.responseType = "arraybuffer";
  98.     request.onload = function () {
  99.         var t0 = performance.now();
  100.         for (var cnt = 0; cnt < 1000; cnt++)
  101.             render(request.response);
  102.         var t1 = performance.now();
  103.         console.log('time: ', (t1 - t0).toFixed(4), 'milliseconds');
  104.     };
  105.     precalc();
  106.     request.send(null);
  107. }
  108. app();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement