UNPKG

asm80

Version:
16 lines 4.38 kB
var rle1Decode=function(b){var a=[];b.forEach(function(d){if(typeof d=="number"){a.push(d);return;}for(var c=0;c<d[0];c++){a.push(d[1]);}});return a;}; var makeSNA=function(b,k){var e=[63,56,0,184,0,15,23,68,0,168,16,185,92,33,23,58,92,212,3,4,202,92,0,240,127,1,15,[4576,0],124,60,66,120,60,66,62,[2,126],0,66,60,124,[3,0],16,64,[238,0],[2,66],98,68,66,102,8,4,64,0,66,64,66,0,56,120,56,64,[238,0],[2,66],82,[2,66],90,[2,8],124,0,66,60,66,0,[2,68],16,64,[238,0],124,126,74,[3,66],8,16,64,0,66,2,124,0,120,68,16,64,[238,0],68,66,70,68,[2,66],8,32,64,0,[2,66],68,0,64,68,16,64,[238,0],[3,66],120,60,66,62,[2,126],0,[2,60],66,0,60,68,12,126,[270,0],[753,56],184,[14,56],[256,0],255,0,29,249,255,0,33,[2,116],35,5,[5,0],1,0,6,0,11,0,1,0,1,0,6,0,16,[26,0],60,64,0,255,204,1,248,127,252,127,[3,0],255,254,255,1,56,[2,0],203,92,218,92,182,92,182,92,203,92,234,92,202,92,212,92,217,92,233,92,[2,0],219,92,219,92,219,92,0,146,92,16,2,[6,0],37,74,125,26,[2,0],121,10,0,88,255,[2,0],33,0,91,15,23,0,64,224,80,33,24,33,23,1,56,0,56,[34,0],255,127,[2,255],244,9,168,16,75,244,9,196,21,83,129,15,196,21,82,244,9,196,21,80,128,165,110,244,[2,0],64,156,0,128,249,192,101,110,116,13,128,110,[2,48],14,[2,0],64,156,0,13,128,[2,0],64,156,[8918,0],243,13,206,11,236,80,206,11,237,80,20,23,220,10,206,11,241,80,16,23,220,10,215,24,56,0,56,0,13,25,217,92,169,24,219,2,77,0,185,92,219,2,77,0,184,0,15,23,254,21,[2,0],225,21,59,15,127,16,252,127,180,18,0,62,[32536,0],243,13,206,11,228,80,206,11,229,80,28,23,220,10,206,11,235,80,22,23,220,10,215,24,177,51,222,92,5,0,219,2,219,2,77,0,208,82,48,0,207,82,4,2,92,14,192,87,113,14,243,13,33,23,198,30,255,127,118,27,3,19,0,62,0,60,[2,66],126,[2,66],[2,0],124,66,124,[2,66],124,[2,0],60,66,[2,64],66,60,[2,0],120,68,[2,66],68,120,[2,0],126,64,124,[2,64],126,[2,0],126,64,124,[3,64],[2,0],60,66,64,78,66,60,[2,0],[2,66],126,[3,66],[2,0],62,[4,8],62,[2,0],[3,2],[2,66],60,[2,0],68,72,112,72,68,66,[2,0],[5,64],126,[2,0],66,102,90,[3,66],[2,0],66,98,82,74,70,66,[2,0],60,[4,66],60,[2,0],124,[2,66],124,[2,64],[2,0],60,[2,66],82,74,60,[2,0],124,[2,66],124,68,66,[2,0],60,64,60,2,66,60,[2,0],254,[5,16],[2,0],[5,66],60,0]; var g=new Uint8Array(65536+27);var a=rle1Decode(e);var d;for(d=0;d<a.length;d++){g[d]=a[d];}for(d=0;d<b.length;d++){var f=b[d];var h=f.addr;if(!f.lens){continue; }for(var c=0;c<f.lens.length;c++){g[c+h-16384+27]=f.lens[c];}}if(k){g[7403]=(k&255);g[7404]=(k>>8)&255;}return new Buffer(g);};var aconcat=function(d,c){var e=[]; var f;for(f=0;f<d.length;f++){e.push(d[f]);}for(f=0;f<c.length;f++){e.push(c[f]);}return e;};var tapdata=function(f,e){var b=[];var d=e;var a;b[0]=e;for(var c=0; c<f.length;c++){b.push(f[c]);d=(d^f[c])&255;}b.push(d);a=b.length;b.unshift(a>>8);b.unshift(a&255);return b;};var makeTapBlock=function(e,d,b){var a=d.length; var c=[3,67,79,68,69,48+Math.floor(b/10),48+(b%10),32,32,32,32,a&255,a>>8,e&255,e>>8,0,128];return aconcat(tapdata(c,0),tapdata(d,255));};var makeTAP=function(c){var h; var l=null;var k=0;var a=[];var e=[];var g=0;for(var f=0,d=c.length;f<d;f++){h=c[f];var m=h.addr;if(h.phase){m-=h.phase;}if(m!==undefined&&k===0){l=m;}if(m!==(l+k)){if(k){e=aconcat(e,makeTapBlock(l,a,g++)); }l=m;k=0;a=[];}if(h.lens){for(var b=0;b<h.lens.length;b++){a.push(h.lens[b]);}k+=h.lens.length;continue;}}if(a.length){e=aconcat(e,makeTapBlock(l,a,g++)); }return new Buffer(e);};var RAM=[];var hexLine=function(e,f){var c;if(e[0]!==":"){return false;}var b=parseInt(e[1]+e[2],16);var g=parseInt(e[3]+e[4]+e[5]+e[6],16); var d=parseInt(e[7]+e[8],16);f=f||0;var a;if(d===0){for(c=0;c<b;c++){RAM[g+c+f]=parseInt(e[9+2*c]+e[10+2*c],16);a=g+c;}}return a;};var readHex=function(c,f){var e=c.split(/\n/); var a=0;for(var b=0;b<e.length;b++){var d=hexLine(e[b],f);if(d>a){a=d;}}return a;};var hex2com=function(c){RAM=new Uint8Array(65536);var a=readHex(c,0)+1; var b=RAM.subarray(256,a);return Buffer.from(b);};var hex2prg=function(c,d){if(d<2064){console.log("ENT must be above $810");process.exit(-1);}RAM=new Uint8Array(65536); var a=readHex(c,0)+1;var b;var f=d+"";RAM[2047]=1;RAM[2048]=8;RAM[2049]=12;RAM[2050]=8;RAM[2051]=10;RAM[2052]=0;RAM[2053]=158;RAM[2054]=f.charCodeAt(0); RAM[2055]=f.charCodeAt(1);RAM[2056]=f.charCodeAt(2);RAM[2057]=f.charCodeAt(3);RAM[2058]=0;RAM[2059]=0;RAM[2060]=0;b=RAM.subarray(2047,a);return Buffer.from(b); };module.exports={hex2prg:hex2prg,hex2com:hex2com,makeSNA:makeSNA,makeTAP:makeTAP};