@modplayjs/fmt-prowizard 0.0.0-stage → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +42 -2
  2. package/dist/index.d.ts +3 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +7 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/prowiz.d.ts +44 -0
  7. package/dist/prowiz.d.ts.map +1 -0
  8. package/dist/prowiz.js +157 -0
  9. package/dist/prowiz.js.map +1 -0
  10. package/dist/ptktable.d.ts +5 -0
  11. package/dist/ptktable.d.ts.map +1 -0
  12. package/dist/ptktable.js +49 -0
  13. package/dist/ptktable.js.map +1 -0
  14. package/dist/pw-ac1d.d.ts +4 -0
  15. package/dist/pw-ac1d.d.ts.map +1 -0
  16. package/dist/pw-ac1d.js +133 -0
  17. package/dist/pw-ac1d.js.map +1 -0
  18. package/dist/pw-di.d.ts +4 -0
  19. package/dist/pw-di.d.ts.map +1 -0
  20. package/dist/pw-di.js +177 -0
  21. package/dist/pw-di.js.map +1 -0
  22. package/dist/pw-eureka.d.ts +4 -0
  23. package/dist/pw-eureka.d.ts.map +1 -0
  24. package/dist/pw-eureka.js +171 -0
  25. package/dist/pw-eureka.js.map +1 -0
  26. package/dist/pw-fcm.d.ts +4 -0
  27. package/dist/pw-fcm.d.ts.map +1 -0
  28. package/dist/pw-fcm.js +102 -0
  29. package/dist/pw-fcm.js.map +1 -0
  30. package/dist/pw-fuchs.d.ts +4 -0
  31. package/dist/pw-fuchs.d.ts.map +1 -0
  32. package/dist/pw-fuchs.js +139 -0
  33. package/dist/pw-fuchs.js.map +1 -0
  34. package/dist/pw-heatseek.d.ts +4 -0
  35. package/dist/pw-heatseek.d.ts.map +1 -0
  36. package/dist/pw-heatseek.js +197 -0
  37. package/dist/pw-heatseek.js.map +1 -0
  38. package/dist/pw-hrt.d.ts +4 -0
  39. package/dist/pw-hrt.d.ts.map +1 -0
  40. package/dist/pw-hrt.js +104 -0
  41. package/dist/pw-hrt.js.map +1 -0
  42. package/dist/pw-ksm.d.ts +4 -0
  43. package/dist/pw-ksm.d.ts.map +1 -0
  44. package/dist/pw-ksm.js +212 -0
  45. package/dist/pw-ksm.js.map +1 -0
  46. package/dist/pw-mp.d.ts +6 -0
  47. package/dist/pw-mp.d.ts.map +1 -0
  48. package/dist/pw-mp.js +171 -0
  49. package/dist/pw-mp.js.map +1 -0
  50. package/dist/pw-np12.d.ts +6 -0
  51. package/dist/pw-np12.d.ts.map +1 -0
  52. package/dist/pw-np12.js +234 -0
  53. package/dist/pw-np12.js.map +1 -0
  54. package/dist/pw-np3.d.ts +4 -0
  55. package/dist/pw-np3.d.ts.map +1 -0
  56. package/dist/pw-np3.js +218 -0
  57. package/dist/pw-np3.js.map +1 -0
  58. package/dist/pw-p40.d.ts +4 -0
  59. package/dist/pw-p40.d.ts.map +1 -0
  60. package/dist/pw-p40.js +221 -0
  61. package/dist/pw-p40.js.map +1 -0
  62. package/dist/pw-plugin.d.ts +8 -0
  63. package/dist/pw-plugin.d.ts.map +1 -0
  64. package/dist/pw-plugin.js +27 -0
  65. package/dist/pw-plugin.js.map +1 -0
  66. package/dist/pw-pp.d.ts +8 -0
  67. package/dist/pw-pp.d.ts.map +1 -0
  68. package/dist/pw-pp.js +341 -0
  69. package/dist/pw-pp.js.map +1 -0
  70. package/dist/pw-skyt.d.ts +4 -0
  71. package/dist/pw-skyt.d.ts.map +1 -0
  72. package/dist/pw-skyt.js +116 -0
  73. package/dist/pw-skyt.js.map +1 -0
  74. package/dist/pw-starpack.d.ts +4 -0
  75. package/dist/pw-starpack.d.ts.map +1 -0
  76. package/dist/pw-starpack.js +253 -0
  77. package/dist/pw-starpack.js.map +1 -0
  78. package/dist/pw-theplayer.d.ts +6 -0
  79. package/dist/pw-theplayer.d.ts.map +1 -0
  80. package/dist/pw-theplayer.js +367 -0
  81. package/dist/pw-theplayer.js.map +1 -0
  82. package/dist/pw-tp1.d.ts +4 -0
  83. package/dist/pw-tp1.d.ts.map +1 -0
  84. package/dist/pw-tp1.js +162 -0
  85. package/dist/pw-tp1.js.map +1 -0
  86. package/dist/pw-tp3.d.ts +6 -0
  87. package/dist/pw-tp3.d.ts.map +1 -0
  88. package/dist/pw-tp3.js +217 -0
  89. package/dist/pw-tp3.js.map +1 -0
  90. package/dist/pw-unic.d.ts +8 -0
  91. package/dist/pw-unic.d.ts.map +1 -0
  92. package/dist/pw-unic.js +285 -0
  93. package/dist/pw-unic.js.map +1 -0
  94. package/dist/pw-unic2.d.ts +4 -0
  95. package/dist/pw-unic2.d.ts.map +1 -0
  96. package/dist/pw-unic2.js +173 -0
  97. package/dist/pw-unic2.js.map +1 -0
  98. package/dist/pw-wn.d.ts +4 -0
  99. package/dist/pw-wn.d.ts.map +1 -0
  100. package/dist/pw-wn.js +82 -0
  101. package/dist/pw-wn.js.map +1 -0
  102. package/dist/pw-xann.d.ts +4 -0
  103. package/dist/pw-xann.d.ts.map +1 -0
  104. package/dist/pw-xann.js +220 -0
  105. package/dist/pw-xann.js.map +1 -0
  106. package/dist/pw-zen.d.ts +4 -0
  107. package/dist/pw-zen.d.ts.map +1 -0
  108. package/dist/pw-zen.js +162 -0
  109. package/dist/pw-zen.js.map +1 -0
  110. package/package.json +49 -4
@@ -0,0 +1,367 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ // Copyright (c) 2026 Bitti09 — modplayjs contributors
3
+ // Ported from: libxmp src/loaders/prowizard/theplayer.c (The Player 5.0a /
4
+ // 6.0a common decoding) — set_event :33-53, track macro :56,
5
+ // decode_pattern :58-145, theplayer_depack :147-400, theplayer_test
6
+ // :402-500, pw_p50a/pw_p60a :505-548.
7
+ import { ptkTable, ptkIsValidNote } from './ptktable.js';
8
+ import { readmem16b, writeZero, pwReadTitle } from './prowiz.js';
9
+ const PW_MOD_MAGIC = 0x4d2e4b2e; // 'M.K.'
10
+ function put8(out, b) { out.push(b & 0xff); }
11
+ function put16b(out, v) { out.push((v >> 8) & 0xff, v & 0xff); }
12
+ function put32b(out, v) {
13
+ out.push((v >>> 24) & 0xff, (v >> 16) & 0xff, (v >> 8) & 0xff, v & 0xff);
14
+ }
15
+ /**
16
+ * set_event (theplayer.c:33-53). Returns the effect nibble b (the caller
17
+ * checks 0x0d/0x0b for break/jump). Writes 4 bytes into out.
18
+ */
19
+ function setEvent(out, c1v, c2v, c3v) {
20
+ if (ptkIsValidNote(Math.trunc(c1v / 2))) {
21
+ out.push(((c1v << 4) & 0x10) | ptkTable[Math.trunc(c1v / 2)][0]);
22
+ out.push(ptkTable[Math.trunc(c1v / 2)][1]);
23
+ }
24
+ else {
25
+ out.push((c1v << 4) & 0x10);
26
+ out.push(0);
27
+ }
28
+ const b = c2v & 0x0f;
29
+ let c2 = c2v;
30
+ if (b === 0x08)
31
+ c2 -= 0x08;
32
+ out.push(c2 & 0xff);
33
+ let c3 = c3v;
34
+ if (b === 0x05 || b === 0x06 || b === 0x0a) {
35
+ c3 = c3 > 0x7f ? ((0x100 - c3) << 4) & 0xf0 : c3;
36
+ }
37
+ out.push(c3 & 0xff);
38
+ return b;
39
+ }
40
+ /** track(p,c,r) = tdata[p * 1024 + r * 16 + c * 4] (theplayer.c:56). */
41
+ function trackOff(p, c, r) {
42
+ return p * 1024 + r * 16 + c * 4;
43
+ }
44
+ /** decode_pattern (theplayer.c:58-145). */
45
+ function decodePattern(data, posIn, npat, tdata, taddr) {
46
+ let pos = posIn;
47
+ const tdataAddr = posIn;
48
+ const u8 = () => data[pos++] ?? 0;
49
+ for (let i = 0; i < npat; i++) {
50
+ let maxRow = 63;
51
+ for (let j = 0; j < 4; j++) {
52
+ pos = taddr[i][j] + tdataAddr;
53
+ for (let k = 0; k <= maxRow; k++) {
54
+ let c1 = u8();
55
+ const c2 = u8();
56
+ const c3 = u8();
57
+ // case 2 (theplayer.c:78-114): 0x80-flagged with relative note
58
+ if ((c1 & 0x80) !== 0 && c1 !== 0x80) {
59
+ const c4 = u8(); // number of empty rows
60
+ c1 = 0xff - c1; // relative note number
61
+ const cell = [];
62
+ const effect = setEvent(cell, c1, c2, c3);
63
+ for (let t = 0; t < 4; t++)
64
+ tdata[trackOff(i, j, k) + t] = cell[t] ?? 0;
65
+ if (effect === 0x0d) {
66
+ maxRow = k;
67
+ break;
68
+ } // pattern break
69
+ if (effect === 0x0b) {
70
+ maxRow = k;
71
+ break;
72
+ } // pattern jump
73
+ if (c4 < 0x80) {
74
+ k += c4;
75
+ continue;
76
+ } // skip rows
77
+ const c4b = 0x100 - c4;
78
+ for (let l = 0; l < c4b; l++) {
79
+ if (++k >= 64)
80
+ break;
81
+ const cell2 = [];
82
+ setEvent(cell2, c1, c2, c3);
83
+ for (let t = 0; t < 4; t++)
84
+ tdata[trackOff(i, j, k) + t] = cell2[t] ?? 0;
85
+ }
86
+ continue;
87
+ }
88
+ // case 3 (theplayer.c:117-168): 0x80 = repeat block
89
+ if (c1 === 0x80) {
90
+ const c4 = u8();
91
+ const posSaved = pos;
92
+ const lines = c2;
93
+ pos -= ((c3 << 8) + c4);
94
+ for (let l = 0; l <= lines && k < 64; l++, k++) {
95
+ c1 = u8();
96
+ const c2b = u8();
97
+ const c3b = u8();
98
+ if ((c1 & 0x80) !== 0 && c1 !== 0x80) {
99
+ const c4b = u8();
100
+ c1 = 0xff - c1;
101
+ if (k >= 64)
102
+ continue;
103
+ const cell = [];
104
+ const effect = setEvent(cell, c1, c2b, c3b);
105
+ for (let t = 0; t < 4; t++)
106
+ tdata[trackOff(i, j, k) + t] = cell[t] ?? 0;
107
+ if (effect === 0x0d) {
108
+ maxRow = k;
109
+ k = l = 9999;
110
+ continue;
111
+ }
112
+ if (effect === 0x0b) {
113
+ maxRow = k;
114
+ k = l = 9999;
115
+ continue;
116
+ }
117
+ if (c4b < 0x80) {
118
+ k += c4b;
119
+ continue;
120
+ }
121
+ const fold = 0x100 - c4b;
122
+ let foldCount = fold;
123
+ while (foldCount-- > 0) {
124
+ if (++k >= 64)
125
+ break;
126
+ const cell2 = [];
127
+ setEvent(cell2, c1, c2b, c3b);
128
+ for (let t = 0; t < 4; t++)
129
+ tdata[trackOff(i, j, k) + t] = cell2[t] ?? 0;
130
+ }
131
+ }
132
+ if (k >= 64)
133
+ break;
134
+ const cell = [];
135
+ setEvent(cell, c1, c2b, c3b);
136
+ for (let t = 0; t < 4; t++)
137
+ tdata[trackOff(i, j, k) + t] = cell[t] ?? 0;
138
+ }
139
+ pos = posSaved;
140
+ k--;
141
+ continue;
142
+ }
143
+ // case 1 (theplayer.c:171-186): plain event
144
+ const cell = [];
145
+ const effect = setEvent(cell, c1, c2, c3);
146
+ for (let t = 0; t < 4; t++)
147
+ tdata[trackOff(i, j, k) + t] = cell[t] ?? 0;
148
+ if (effect === 0x0d) {
149
+ maxRow = k;
150
+ break;
151
+ }
152
+ if (effect === 0x0b) {
153
+ maxRow = k;
154
+ break;
155
+ }
156
+ }
157
+ }
158
+ }
159
+ return 0;
160
+ }
161
+ /** theplayer_depack (theplayer.c:147-400). */
162
+ function theplayerDepack(data, start, version) {
163
+ let pos = start;
164
+ const out = [];
165
+ const u8 = () => data[pos++] ?? 0;
166
+ const u16 = () => { const v = readmem16b(data, pos); pos += 2; return v; };
167
+ const sdataAddr = u16(); // sample data address
168
+ let npat = u8(); // real number of patterns
169
+ if (npat > 128)
170
+ throw new Error('theplayer: too many patterns');
171
+ let nins = u8(); // number of samples
172
+ let delta = 0;
173
+ if ((nins & 0x80) !== 0)
174
+ delta = 1; // delta-coded samples
175
+ if (version >= 0x60 && (nins & 0x40) !== 0) {
176
+ throw new Error('theplayer: packed samples not supported'); // theplayer.c:176-184
177
+ }
178
+ nins &= 0x3f;
179
+ if (nins > 31)
180
+ throw new Error('theplayer: too many samples');
181
+ writeZero(out, 20); // title
182
+ // Sample headers (theplayer.c:213-255)
183
+ const isize = new Array(31).fill(0);
184
+ const smpSize = new Array(31).fill(0);
185
+ const saddr = new Array(31).fill(0);
186
+ let i = 0;
187
+ for (; i < nins; i++) {
188
+ writeZero(out, 22); // name
189
+ const j0 = isize[i] = u16(); // sample size
190
+ if (j0 > 0xff00) {
191
+ // Reference to a previous sample (theplayer.c:224-228)
192
+ smpSize[i] = smpSize[0xffff - j0];
193
+ isize[i] = isize[0xffff - j0];
194
+ saddr[i] = saddr[0xffff - j0];
195
+ }
196
+ else {
197
+ if (i > 0)
198
+ saddr[i] = saddr[i - 1] + smpSize[i - 1];
199
+ smpSize[i] = j0 * 2;
200
+ }
201
+ const j = Math.trunc(smpSize[i] / 2);
202
+ put16b(out, isize[i]);
203
+ const c1 = u8(); // finetune
204
+ put8(out, c1 & 0x3f);
205
+ put8(out, u8()); // volume
206
+ const val = u16(); // loop start
207
+ if (val === 0xffff) {
208
+ put16b(out, 0x0000); // loop start
209
+ put16b(out, 0x0001); // loop size
210
+ }
211
+ else {
212
+ put16b(out, val);
213
+ put16b(out, j - val); // loop size
214
+ }
215
+ }
216
+ // Pad to 31 (theplayer.c:258-262)
217
+ {
218
+ const pad = new Array(30).fill(0);
219
+ pad[29] = 0x01;
220
+ for (; i < 31; i++)
221
+ out.push(...pad);
222
+ }
223
+ // Track addresses per pattern (theplayer.c:265-269)
224
+ const taddr = [];
225
+ for (let p = 0; p < npat; p++) {
226
+ const row = [];
227
+ for (let j = 0; j < 4; j++)
228
+ row.push(u16());
229
+ taddr.push(row);
230
+ }
231
+ // Pattern table (theplayer.c:272-281): 0xff-terminated; p5 halves values.
232
+ const ptable = new Array(128).fill(0);
233
+ let patPos = 0;
234
+ for (; patPos < 128; patPos++) {
235
+ const c1 = u8();
236
+ if (c1 === 0xff)
237
+ break;
238
+ ptable[patPos] = version >= 0x60 ? c1 : Math.trunc(c1 / 2);
239
+ }
240
+ put8(out, patPos);
241
+ put8(out, 0x7f);
242
+ for (let p = 0; p < 128; p++)
243
+ put8(out, ptable[p]);
244
+ put32b(out, PW_MOD_MAGIC);
245
+ // Decode patterns (theplayer.c:284-288) and write tdata (1024 × npat)
246
+ const tdata = new Uint8Array(512 * 256);
247
+ decodePattern(data, pos, npat, tdata, taddr);
248
+ for (let p = 0; p < npat; p++) {
249
+ for (let b = 0; b < 1024; b++)
250
+ out.push(tdata[p * 1024 + b]);
251
+ }
252
+ // Sample data (theplayer.c:296-312): delta decode when flagged.
253
+ for (let s = 0; s < nins; s++) {
254
+ const smpBuf = new Uint8Array(smpSize[s]);
255
+ const src = start + sdataAddr + saddr[s];
256
+ for (let k = 0; k < smpSize[s]; k++)
257
+ smpBuf[k] = data[src + k] ?? 0;
258
+ if (delta === 1) {
259
+ for (let j = 1; j < smpSize[s]; j++) {
260
+ const c3 = 0x100 - smpBuf[j] + smpBuf[j - 1];
261
+ smpBuf[j] = c3 & 0xff;
262
+ }
263
+ }
264
+ for (let k = 0; k < smpSize[s]; k++)
265
+ out.push(smpBuf[k]);
266
+ }
267
+ return Uint8Array.from(out);
268
+ }
269
+ /** theplayer_test (theplayer.c:402-500). */
270
+ function theplayerTest(data, start, version) {
271
+ const s = data.length - start;
272
+ if (s < 4)
273
+ return 4 - s;
274
+ const numPat = data[start + 2];
275
+ if (numPat === 0 || numPat > 0x7f)
276
+ return -1;
277
+ const numIns = data[start + 3] & 0x3f;
278
+ if (numIns === 0 || numIns > 0x1f)
279
+ return -1;
280
+ if (s < numIns * 6 + 4)
281
+ return numIns * 6 + 4 - s;
282
+ for (let i = 0; i < numIns; i++) {
283
+ if (data[start + i * 6 + 7] > 0x40)
284
+ return -1; // volumes
285
+ if (data[start + i * 6 + 6] > 0x0f)
286
+ return -1; // finetunes
287
+ }
288
+ for (let i = 0; i < numIns; i++) {
289
+ const size = readmem16b(data, start + i * 6 + 4);
290
+ if ((size <= 0xffdf && size > 0x8000) || size === 0)
291
+ return -1;
292
+ const lstart = readmem16b(data, start + i * 6 + 8);
293
+ if (lstart !== 0xffff && lstart >= size)
294
+ return -1;
295
+ if (size > 0xffdf && 0xffff - size > numIns)
296
+ return -1;
297
+ }
298
+ // Sample data address (theplayer.c:438-441)
299
+ const sdata = readmem16b(data, start);
300
+ if (sdata < numIns * 6 + 4 + numPat * 8)
301
+ return -1;
302
+ if (s < numPat * 8 + numIns * 6 + 4)
303
+ return numPat * 8 + numIns * 6 + 4 - s;
304
+ // Track table (theplayer.c:445-450)
305
+ for (let i = 0; i < numPat * 4; i++) {
306
+ const x = readmem16b(data, start + 4 + numIns * 6 + i * 2);
307
+ if (x + numIns * 6 + 4 + numPat * 8 > sdata)
308
+ return -1;
309
+ }
310
+ if (s < numPat * 8 + numIns * 6 + 4 + 128)
311
+ return numPat * 8 + numIns * 6 + 4 + 128 - s;
312
+ // Pattern table (theplayer.c:453-472)
313
+ let len = 0;
314
+ while (len < 128) {
315
+ const pat = data[start + numIns * 6 + 4 + numPat * 8 + len];
316
+ if (pat === 0xff)
317
+ break;
318
+ if (version >= 0x60) {
319
+ if (pat > numPat - 1)
320
+ return -1;
321
+ }
322
+ else {
323
+ if ((pat & 0x01) !== 0)
324
+ return -1;
325
+ if (pat > numPat * 2)
326
+ return -1;
327
+ }
328
+ len++;
329
+ }
330
+ if (numIns * 6 + 4 + numPat * 8 + len > sdata)
331
+ return -1;
332
+ if (len === 0 || len === 128)
333
+ return -1;
334
+ // Notes (theplayer.c:478-498)
335
+ if (s < sdata + 1)
336
+ return sdata + 1 - s;
337
+ len++;
338
+ for (let i = numIns * 6 + 4 + numPat * 8 + len; i < sdata; i++) {
339
+ const d = start + i;
340
+ if ((~data[d] & 0x80) !== 0) {
341
+ if (data[d] > 0x49)
342
+ return -1;
343
+ const ins = ((data[d] << 4) & 0x10) | ((data[d + 1] >> 4) & 0x0f);
344
+ if (ins > numIns)
345
+ return -1;
346
+ i += 2;
347
+ }
348
+ else {
349
+ i += 3;
350
+ }
351
+ }
352
+ pwReadTitle(null, 0);
353
+ return 0;
354
+ }
355
+ /** pw_p50a: "The Player 5.0a". */
356
+ export const pwP50a = {
357
+ name: 'The Player 5.0a',
358
+ test: (data, start) => theplayerTest(data, start, 0x50),
359
+ depack: (data, start) => theplayerDepack(data, start, 0x50),
360
+ };
361
+ /** pw_p60a: "The Player 6.0a". */
362
+ export const pwP60a = {
363
+ name: 'The Player 6.0a',
364
+ test: (data, start) => theplayerTest(data, start, 0x60),
365
+ depack: (data, start) => theplayerDepack(data, start, 0x60),
366
+ };
367
+ //# sourceMappingURL=pw-theplayer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-theplayer.js","sourceRoot":"","sources":["../src/pw-theplayer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type PwFormat } from './prowiz.js';
2
+ /** pw_tp1 (tp1.c:202-206): "Tracker Packer v1". */
3
+ export declare const pwTp1: PwFormat;
4
+ //# sourceMappingURL=pw-tp1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-tp1.d.ts","sourceRoot":"","sources":["../src/pw-tp1.ts"],"names":[],"mappings":"AAMA,OAAO,EAA+C,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAkKzF,mDAAmD;AACnD,eAAO,MAAM,KAAK,EAAE,QAInB,CAAC"}
package/dist/pw-tp1.js ADDED
@@ -0,0 +1,162 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ // Copyright (c) 2026 Bitti09 — modplayjs contributors
3
+ // Ported from: libxmp src/loaders/prowizard/tp1.c (Tracker Packer v1) —
4
+ // depack_tp1 :38-136, test_tp1 :139-199.
5
+ import { ptkTable, ptkIsValidNote } from './ptktable.js';
6
+ import { readmem16b, readmem32b, moveData, writeZero } from './prowiz.js';
7
+ const PW_MOD_MAGIC = 0x4d2e4b2e; // 'M.K.'
8
+ function put8(out, b) { out.push(b & 0xff); }
9
+ function put16b(out, v) { out.push((v >> 8) & 0xff, v & 0xff); }
10
+ function put32b(out, v) {
11
+ out.push((v >>> 24) & 0xff, (v >> 16) & 0xff, (v >> 8) & 0xff, v & 0xff);
12
+ }
13
+ /** depack_tp1 (tp1.c:38-136). */
14
+ function depackTp1(data, start) {
15
+ let pos = start;
16
+ const out = [];
17
+ const u8 = () => data[pos++] ?? 0;
18
+ const u16 = () => { const v = readmem16b(data, pos); pos += 2; return v; };
19
+ const u32 = () => { const v = readmem32b(data, pos); pos += 4; return v; };
20
+ u32(); // skip magic
21
+ u32(); // skip size
22
+ // title (tp1.c:46): move 20 bytes verbatim
23
+ for (let i = 0; i < 20; i++)
24
+ out.push(data[pos++] ?? 0);
25
+ const smpOfs = u32(); // sample data address
26
+ // Sample headers (tp1.c:49-65)
27
+ let ssize = 0;
28
+ for (let i = 0; i < 31; i++) {
29
+ writeZero(out, 22); // sample name
30
+ const c3 = u8(); // finetune
31
+ const c4 = u8(); // volume
32
+ const size = u16();
33
+ ssize += size * 2;
34
+ put16b(out, size);
35
+ put8(out, c3);
36
+ put8(out, c4);
37
+ put16b(out, u16()); // loop start
38
+ put16b(out, u16()); // loop size
39
+ }
40
+ // Pattern table size (tp1.c:68-70)
41
+ const len = u16() + 1;
42
+ put8(out, len);
43
+ put8(out, 0x7f); // ntk byte
44
+ // Pattern addresses (tp1.c:72-82)
45
+ const paddr = [];
46
+ let patOfs = 0xffffffff;
47
+ for (let i = 0; i < len; i++) {
48
+ paddr.push(u32());
49
+ if (patOfs > paddr[i])
50
+ patOfs = paddr[i];
51
+ }
52
+ // Address ordering / dedup (tp1.c:85-98)
53
+ const pnum = new Array(128).fill(0);
54
+ const paddrOrd = [paddr[0]];
55
+ let npat = 1;
56
+ for (let i = 1; i < len; i++) {
57
+ let j = 0;
58
+ for (; j < i; j++) {
59
+ if (paddr[i] === paddr[j]) {
60
+ pnum[i] = pnum[j];
61
+ break;
62
+ }
63
+ }
64
+ if (j === i) {
65
+ paddrOrd[npat] = paddr[i];
66
+ pnum[i] = npat++;
67
+ }
68
+ }
69
+ // Pattern list + magic (tp1.c:101-103)
70
+ for (let i = 0; i < 128; i++)
71
+ put8(out, pnum[i]);
72
+ put32b(out, PW_MOD_MAGIC);
73
+ // Pattern data (tp1.c:106-134): 256 packed 4-byte groups per pattern,
74
+ // relative to 794 + addr - patOfs.
75
+ const pdata = new Uint8Array(1024);
76
+ for (let i = 0; i < npat; i++) {
77
+ pos = start + 794 + paddrOrd[i] - patOfs;
78
+ pdata.fill(0);
79
+ for (let j = 0; j < 256; j++) {
80
+ const p = j * 4;
81
+ const c1 = u8();
82
+ if (c1 === 0xc0)
83
+ continue;
84
+ if ((c1 & 0xc0) === 0x80) {
85
+ // Effect-only row (tp1.c:117-123)
86
+ const fxt = (c1 >> 2) & 0x0f;
87
+ const fxp = u8();
88
+ pdata[p + 2] = fxt;
89
+ pdata[p + 3] = fxp;
90
+ continue;
91
+ }
92
+ const c2 = u8();
93
+ const c3 = u8();
94
+ const note = (c1 & 0xfe) >> 1;
95
+ if (!ptkIsValidNote(note))
96
+ throw new Error('tp1: invalid note');
97
+ const ins = ((c2 >> 4) & 0x0f) | ((c1 << 4) & 0x10);
98
+ const fxt = c2 & 0x0f;
99
+ const fxp = c3;
100
+ pdata[p] = (ins & 0xf0) | ptkTable[note][0];
101
+ pdata[p + 1] = ptkTable[note][1];
102
+ pdata[p + 2] = ((ins << 4) & 0xf0) | fxt;
103
+ pdata[p + 3] = fxp;
104
+ }
105
+ for (let k = 0; k < 1024; k++)
106
+ out.push(pdata[k]);
107
+ }
108
+ // Sample data (tp1.c:137-141)
109
+ moveData(data, start + smpOfs, out, ssize);
110
+ return Uint8Array.from(out);
111
+ }
112
+ /** test_tp1 (tp1.c:139-199). */
113
+ function testTp1(data, start) {
114
+ const s = data.length - start;
115
+ if (s < 1024)
116
+ return 1024 - s;
117
+ if (data[start] !== 0x4d || data[start + 1] !== 0x45 || // 'ME'
118
+ data[start + 2] !== 0x58 || data[start + 3] !== 0x58 // 'XX'
119
+ ) {
120
+ return -1;
121
+ }
122
+ // Size of the module (tp1.c:151-154)
123
+ const size = readmem32b(data, start + 4);
124
+ if (size < 794 || size > 2129178)
125
+ return -1;
126
+ for (let i = 0; i < 31; i++) {
127
+ const d = start + i * 8 + 32;
128
+ if (data[d] > 0x0f)
129
+ return -1; // finetunes
130
+ if (data[d + 1] > 0x40)
131
+ return -1; // volumes
132
+ }
133
+ // Sample data address (tp1.c:162-166)
134
+ const smpOfs = readmem32b(data, start + 28);
135
+ if (smpOfs === 0 || smpOfs > size)
136
+ return -1;
137
+ // Sample sizes (tp1.c:168-181)
138
+ for (let i = 0; i < 31; i++) {
139
+ const d = start + i * 8 + 32;
140
+ const sz = readmem16b(data, d + 2) << 1;
141
+ const lstart = readmem16b(data, d + 4) << 1;
142
+ const lsize = readmem16b(data, d + 6) << 1;
143
+ if (sz > 0xffff || lstart > 0xffff || lsize > 0xffff)
144
+ return -1;
145
+ if (lstart + lsize > sz + 2)
146
+ return -1;
147
+ if (lstart !== 0 && lsize === 0)
148
+ return -1;
149
+ }
150
+ // Pattern list size (tp1.c:184-188)
151
+ const len = readmem16b(data, start + 280) + 1;
152
+ if (len > 128)
153
+ return -1;
154
+ return 0;
155
+ }
156
+ /** pw_tp1 (tp1.c:202-206): "Tracker Packer v1". */
157
+ export const pwTp1 = {
158
+ name: 'Tracker Packer v1',
159
+ test: testTp1,
160
+ depack: depackTp1,
161
+ };
162
+ //# sourceMappingURL=pw-tp1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-tp1.js","sourceRoot":"","sources":["../src/pw-tp1.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type PwFormat } from './prowiz.js';
2
+ /** pw_tp3: "Tracker Packer v3" (magic CPLX_TP3). */
3
+ export declare const pwTp3: PwFormat;
4
+ /** pw_tp2: "Tracker Packer v2" (magic MEXX_TP2). */
5
+ export declare const pwTp2: PwFormat;
6
+ //# sourceMappingURL=pw-tp3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-tp3.d.ts","sourceRoot":"","sources":["../src/pw-tp3.ts"],"names":[],"mappings":"AAMA,OAAO,EAAgD,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAsM1F,oDAAoD;AACpD,eAAO,MAAM,KAAK,EAAE,QAInB,CAAC;AAEF,oDAAoD;AACpD,eAAO,MAAM,KAAK,EAAE,QAInB,CAAC"}