asm80
Version:
ASM80 stand-alone assembler
1 lines • 4.28 kB
JavaScript
var rle1Decode=function(e){var r=[];return e.forEach(function(e){if("number"!=typeof e)for(var n=0;n<e[0];n++)r.push(e[1]);else r.push(e)}),r},makeSNA=function(e,r){var n,a=[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],t=new Uint8Array(65563),o=rle1Decode(a);for(n=0;n<o.length;n++)t[n]=o[n];for(n=0;n<e.length;n++){var f=e[n],u=f.addr;if(f.lens)for(var h=0;h<f.lens.length;h++)t[h+u-16384+27]=f.lens[h]}return r&&(t[7403]=255&r,t[7404]=r>>8&255),new Buffer(t)},aconcat=function(e,r){var n,a=[];for(n=0;n<e.length;n++)a.push(e[n]);for(n=0;n<r.length;n++)a.push(r[n]);return a},tapdata=function(e,r){var n,a=[],t=r;a[0]=r;for(var o=0;o<e.length;o++)a.push(e[o]),t=255&(t^e[o]);return a.push(t),n=a.length,a.unshift(n>>8),a.unshift(255&n),a},makeTapBlock=function(e,r,n){var a=r.length,t=[3,67,79,68,69,48+Math.floor(n/10),48+n%10,32,32,32,32,255&a,a>>8,255&e,e>>8,0,128];return aconcat(tapdata(t,0),tapdata(r,255))},makeTAP=function(e){for(var r,n=null,a=0,t=[],o=[],f=0,u=0,h=e.length;u<h;u++){r=e[u];var A=r.addr;if(r.phase&&(A-=r.phase),void 0!==A&&0===a&&(n=A),A!==n+a&&(a&&(o=aconcat(o,makeTapBlock(n,t,f++))),n=A,a=0,t=[]),r.lens){for(var c=0;c<r.lens.length;c++)t.push(r.lens[c]);a+=r.lens.length}else;}return t.length&&(o=aconcat(o,makeTapBlock(n,t,f++))),new Buffer(o)},RAM=[],hexLine=function(e,r){var n;if(":"!==e[0])return!1;var a,t=parseInt(e[1]+e[2],16),o=parseInt(e[3]+e[4]+e[5]+e[6],16),f=parseInt(e[7]+e[8],16);if(r=r||0,0===f)for(n=0;n<t;n++)RAM[o+n+r]=parseInt(e[9+2*n]+e[10+2*n],16),a=o+n;return a},readHex=function(e,r){for(var n=e.split(/\n/),a=0,t=0;t<n.length;t++){var o=hexLine(n[t],r);o>a&&(a=o)}return a},hex2com=function(e){RAM=new Uint8Array(65536);var r=readHex(e,0)+1,n=RAM.subarray(256,r);return Buffer.from(n)},hex2bin=function(e,r,n){RAM=new Uint8Array(65536),readHex(e,0);var a=RAM.subarray(r,n+1);return Buffer.from(a)},hex2prg=function(e,r){r<2064&&(console.log("ENT must be above $810"),process.exit(-1)),RAM=new Uint8Array(65536);var n,a=readHex(e,0)+1,t=r+"";return RAM[2047]=1,RAM[2048]=8,RAM[2049]=12,RAM[2050]=8,RAM[2051]=10,RAM[2052]=0,RAM[2053]=158,RAM[2054]=t.charCodeAt(0),RAM[2055]=t.charCodeAt(1),RAM[2056]=t.charCodeAt(2),RAM[2057]=t.charCodeAt(3),RAM[2058]=0,RAM[2059]=0,RAM[2060]=0,n=RAM.subarray(2047,a),Buffer.from(n)};module.exports={hex2prg:hex2prg,hex2com:hex2com,hex2bin:hex2bin,makeSNA:makeSNA,makeTAP:makeTAP};