12 | function hexlifyScript(script) { |
13 | function hexlify(ar) { |
14 | var result = ''; |
15 | for (var i = 0; i < ar.length; ++i) { |
16 | if (ar[i] < 16) { |
17 | result += '0'; |
18 | } |
19 | result += ar[i].toString(16); |
20 | } |
21 | return result; |
22 | } |
23 | |
24 | |
25 | data = new Uint8Array(4 + script.length + (16 - (4 + script.length) % 16)); |
26 | data[0] = 77; |
27 | data[1] = 80; |
28 | data[2] = script.length & 0xff; |
29 | data[3] = (script.length >> 8) & 0xff; |
30 | for (var i = 0; i < script.length; ++i) { |
31 | data[4 + i] = script.charCodeAt(i); |
32 | } |
33 | |
34 | |
35 | |
36 | var addr = 0x3e000; |
37 | var chunk = new Uint8Array(5 + 16); |
38 | var output = []; |
39 | output.push(':020000040003F7') |
40 | for (var i = 0; i < data.length; i += 16, addr += 16) { |
41 | chunk[0] = 16; |
42 | chunk[1] = (addr >> 8) & 0xff; |
43 | chunk[2] = addr & 0xff; |
44 | chunk[3] = 0; |
45 | for (var j = 0; j < 16; ++j) { |
46 | chunk[4 + j] = data[i + j]; |
47 | } |
48 | var checksum = 0; |
49 | for (var j = 0; j < 4 + 16; ++j) { |
50 | checksum += chunk[j]; |
51 | } |
52 | chunk[4 + 16] = (-checksum) & 0xff; |
53 | output.push(':' + hexlify(chunk).toUpperCase()) |
54 | } |
55 | |
56 | return output.join('\n'); |
57 | } |