@modplayjs/fmt-prowizard 0.0.0-stage → 0.2.2
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.
- package/README.md +42 -2
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/prowiz.d.ts +44 -0
- package/dist/prowiz.d.ts.map +1 -0
- package/dist/prowiz.js +157 -0
- package/dist/prowiz.js.map +1 -0
- package/dist/ptktable.d.ts +5 -0
- package/dist/ptktable.d.ts.map +1 -0
- package/dist/ptktable.js +49 -0
- package/dist/ptktable.js.map +1 -0
- package/dist/pw-ac1d.d.ts +4 -0
- package/dist/pw-ac1d.d.ts.map +1 -0
- package/dist/pw-ac1d.js +133 -0
- package/dist/pw-ac1d.js.map +1 -0
- package/dist/pw-di.d.ts +4 -0
- package/dist/pw-di.d.ts.map +1 -0
- package/dist/pw-di.js +177 -0
- package/dist/pw-di.js.map +1 -0
- package/dist/pw-eureka.d.ts +4 -0
- package/dist/pw-eureka.d.ts.map +1 -0
- package/dist/pw-eureka.js +171 -0
- package/dist/pw-eureka.js.map +1 -0
- package/dist/pw-fcm.d.ts +4 -0
- package/dist/pw-fcm.d.ts.map +1 -0
- package/dist/pw-fcm.js +102 -0
- package/dist/pw-fcm.js.map +1 -0
- package/dist/pw-fuchs.d.ts +4 -0
- package/dist/pw-fuchs.d.ts.map +1 -0
- package/dist/pw-fuchs.js +139 -0
- package/dist/pw-fuchs.js.map +1 -0
- package/dist/pw-heatseek.d.ts +4 -0
- package/dist/pw-heatseek.d.ts.map +1 -0
- package/dist/pw-heatseek.js +197 -0
- package/dist/pw-heatseek.js.map +1 -0
- package/dist/pw-hrt.d.ts +4 -0
- package/dist/pw-hrt.d.ts.map +1 -0
- package/dist/pw-hrt.js +104 -0
- package/dist/pw-hrt.js.map +1 -0
- package/dist/pw-ksm.d.ts +4 -0
- package/dist/pw-ksm.d.ts.map +1 -0
- package/dist/pw-ksm.js +212 -0
- package/dist/pw-ksm.js.map +1 -0
- package/dist/pw-mp.d.ts +6 -0
- package/dist/pw-mp.d.ts.map +1 -0
- package/dist/pw-mp.js +171 -0
- package/dist/pw-mp.js.map +1 -0
- package/dist/pw-np12.d.ts +6 -0
- package/dist/pw-np12.d.ts.map +1 -0
- package/dist/pw-np12.js +234 -0
- package/dist/pw-np12.js.map +1 -0
- package/dist/pw-np3.d.ts +4 -0
- package/dist/pw-np3.d.ts.map +1 -0
- package/dist/pw-np3.js +218 -0
- package/dist/pw-np3.js.map +1 -0
- package/dist/pw-p40.d.ts +4 -0
- package/dist/pw-p40.d.ts.map +1 -0
- package/dist/pw-p40.js +221 -0
- package/dist/pw-p40.js.map +1 -0
- package/dist/pw-plugin.d.ts +8 -0
- package/dist/pw-plugin.d.ts.map +1 -0
- package/dist/pw-plugin.js +27 -0
- package/dist/pw-plugin.js.map +1 -0
- package/dist/pw-pp.d.ts +8 -0
- package/dist/pw-pp.d.ts.map +1 -0
- package/dist/pw-pp.js +341 -0
- package/dist/pw-pp.js.map +1 -0
- package/dist/pw-skyt.d.ts +4 -0
- package/dist/pw-skyt.d.ts.map +1 -0
- package/dist/pw-skyt.js +116 -0
- package/dist/pw-skyt.js.map +1 -0
- package/dist/pw-starpack.d.ts +4 -0
- package/dist/pw-starpack.d.ts.map +1 -0
- package/dist/pw-starpack.js +253 -0
- package/dist/pw-starpack.js.map +1 -0
- package/dist/pw-theplayer.d.ts +6 -0
- package/dist/pw-theplayer.d.ts.map +1 -0
- package/dist/pw-theplayer.js +367 -0
- package/dist/pw-theplayer.js.map +1 -0
- package/dist/pw-tp1.d.ts +4 -0
- package/dist/pw-tp1.d.ts.map +1 -0
- package/dist/pw-tp1.js +162 -0
- package/dist/pw-tp1.js.map +1 -0
- package/dist/pw-tp3.d.ts +6 -0
- package/dist/pw-tp3.d.ts.map +1 -0
- package/dist/pw-tp3.js +217 -0
- package/dist/pw-tp3.js.map +1 -0
- package/dist/pw-unic.d.ts +8 -0
- package/dist/pw-unic.d.ts.map +1 -0
- package/dist/pw-unic.js +285 -0
- package/dist/pw-unic.js.map +1 -0
- package/dist/pw-unic2.d.ts +4 -0
- package/dist/pw-unic2.d.ts.map +1 -0
- package/dist/pw-unic2.js +173 -0
- package/dist/pw-unic2.js.map +1 -0
- package/dist/pw-wn.d.ts +4 -0
- package/dist/pw-wn.d.ts.map +1 -0
- package/dist/pw-wn.js +82 -0
- package/dist/pw-wn.js.map +1 -0
- package/dist/pw-xann.d.ts +4 -0
- package/dist/pw-xann.d.ts.map +1 -0
- package/dist/pw-xann.js +220 -0
- package/dist/pw-xann.js.map +1 -0
- package/dist/pw-zen.d.ts +4 -0
- package/dist/pw-zen.d.ts.map +1 -0
- package/dist/pw-zen.js +162 -0
- package/dist/pw-zen.js.map +1 -0
- 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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"}
|
package/dist/pw-tp1.d.ts
ADDED
|
@@ -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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"}
|
package/dist/pw-tp3.d.ts
ADDED
|
@@ -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"}
|