@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.
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 @@
1
+ {"version":3,"file":"pw-fuchs.js","sourceRoot":"","sources":["../src/pw-fuchs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type PwFormat } from './prowiz.js';
2
+ /** pw_crb: "Heatseeker 1.0". */
3
+ export declare const pwCrb: PwFormat;
4
+ //# sourceMappingURL=pw-heatseek.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-heatseek.d.ts","sourceRoot":"","sources":["../src/pw-heatseek.ts"],"names":[],"mappings":"AAKA,OAAO,EAAkD,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AA+L5F,gCAAgC;AAChC,eAAO,MAAM,KAAK,EAAE,QAInB,CAAC"}
@@ -0,0 +1,197 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ // Copyright (c) 2026 Bitti09 — modplayjs contributors
3
+ // Ported from: libxmp src/loaders/prowizard/heatseek.c (Heatseeker 1.0,
4
+ // depack_crb) — depack_crb :37-127, test_crb :135-247.
5
+ import { readmem16b, readmem24b, writeZero, pwReadTitle } from './prowiz.js';
6
+ const PW_MOD_MAGIC = 0x4d2e4b2e; // 'M.K.'
7
+ function put8(out, b) { out.push(b & 0xff); }
8
+ function put16b(out, v) { out.push((v >> 8) & 0xff, v & 0xff); }
9
+ function put32b(out, v) {
10
+ out.push((v >>> 24) & 0xff, (v >> 16) & 0xff, (v >> 8) & 0xff, v & 0xff);
11
+ }
12
+ /** depack_crb (heatseek.c:37-127). */
13
+ function depackCrb(data, start) {
14
+ let pos = start;
15
+ const out = [];
16
+ const u8 = () => data[pos++] ?? 0;
17
+ const u16 = () => { const v = readmem16b(data, pos); pos += 2; return v; };
18
+ writeZero(out, 20); // title
19
+ // Sample descriptions (heatseek.c:43-52)
20
+ let ssize = 0;
21
+ for (let i = 0; i < 31; i++) {
22
+ for (let k = 0; k < 22; k++)
23
+ out.push(0); // sample name
24
+ const size = u16();
25
+ put16b(out, size);
26
+ ssize += size * 2;
27
+ put8(out, u8()); // finetune
28
+ put8(out, u8()); // volume
29
+ put16b(out, u16()); // loop start
30
+ const loopSize = u16();
31
+ put16b(out, loopSize !== 0 ? loopSize : 1);
32
+ }
33
+ const patPos = u8();
34
+ put8(out, patPos);
35
+ put8(out, u8()); // NoiseTracker byte
36
+ // Pattern list (heatseek.c:56-63)
37
+ const ptable = [];
38
+ let patMax = 0;
39
+ let i = 0;
40
+ for (; i < 128; i++) {
41
+ const c1 = u8();
42
+ ptable.push(c1);
43
+ put8(out, c1);
44
+ if (c1 > patMax)
45
+ patMax = c1;
46
+ }
47
+ patMax++;
48
+ put32b(out, PW_MOD_MAGIC);
49
+ // Pattern data (heatseek.c:66-121): per-track saved positions (taddr)
50
+ // enable the 0xc0 repeat-block reference; 0x80 = skip rows (24-bit).
51
+ const taddr = new Array(512).fill(0);
52
+ for (i = 0; i < patMax; i++) {
53
+ const pat = new Uint8Array(1024);
54
+ for (let j = 0; j < 4; j++) {
55
+ const x = pos;
56
+ taddr[i * 4 + j] = x;
57
+ for (let k = 0; k < 64; k++) {
58
+ const y = k * 16 + j * 4;
59
+ let c1 = u8();
60
+ if (c1 === 0x80) {
61
+ k += readmem24b(data, pos);
62
+ pos += 3;
63
+ continue;
64
+ }
65
+ if (c1 === 0xc0) {
66
+ const m = readmem24b(data, pos);
67
+ pos += 3;
68
+ const l = pos;
69
+ if (m >= 2048)
70
+ throw new Error('crb: bad pattern reference');
71
+ const saved = pos;
72
+ pos = taddr[m >> 2];
73
+ for (let m2 = 0; m2 < 64; m2++) {
74
+ const x2 = m2 * 16 + j * 4;
75
+ const cc = u8();
76
+ if (cc === 0x80) {
77
+ m2 += readmem24b(data, pos);
78
+ pos += 3;
79
+ continue;
80
+ }
81
+ pat[x2] = cc;
82
+ pat[x2 + 1] = u8();
83
+ pat[x2 + 2] = u8();
84
+ pat[x2 + 3] = u8();
85
+ }
86
+ pos = saved;
87
+ void l;
88
+ k += 100;
89
+ continue;
90
+ }
91
+ pat[y] = c1;
92
+ pat[y + 1] = u8();
93
+ pat[y + 2] = u8();
94
+ pat[y + 3] = u8();
95
+ }
96
+ }
97
+ for (let k = 0; k < 1024; k++)
98
+ out.push(pat[k]);
99
+ }
100
+ // Sample data (heatseek.c:124-126)
101
+ for (let k = 0; k < ssize && pos < data.length; k++)
102
+ out.push(data[pos++] ?? 0);
103
+ return Uint8Array.from(out);
104
+ }
105
+ /** test_crb (heatseek.c:135-247). */
106
+ function testCrb(data, start) {
107
+ const s = data.length - start;
108
+ if (s < 378)
109
+ return 378 - s;
110
+ // Pattern table size (heatseek.c:139-143)
111
+ if (data[start + 248] > 0x7f || data[start + 248] === 0x00)
112
+ return -1;
113
+ // NoiseTracker byte (heatseek.c:145-148)
114
+ if (data[start + 249] !== 0x7f)
115
+ return -1;
116
+ // Samples (heatseek.c:150-180)
117
+ let ssize = 0;
118
+ for (let i = 0; i < 31; i++) {
119
+ const d = start + i * 8;
120
+ if (data[d + 2] > 0x0f)
121
+ return -1;
122
+ if (data[d + 3] > 0x40)
123
+ return -1;
124
+ const len = readmem16b(data, d) << 1;
125
+ const lstart = readmem16b(data, d + 4) << 1;
126
+ const lsize = readmem16b(data, d + 6) << 1;
127
+ if (len > 0xffff || lstart > 0xffff || lsize > 0xffff)
128
+ return -1;
129
+ if (lsize !== 0 && lsize !== 2 && lstart + lsize > len)
130
+ return -1;
131
+ if (lstart !== 0 && lsize <= 2)
132
+ return -1;
133
+ ssize += len;
134
+ }
135
+ if (ssize <= 4)
136
+ return -1;
137
+ // Pattern table (heatseek.c:186-195)
138
+ let max = 0;
139
+ for (let i = 0; i < 128; i++) {
140
+ if (data[start + 250 + i] > 0x7f)
141
+ return -1;
142
+ if (data[start + 250 + i] > max)
143
+ max = data[start + 250 + i];
144
+ }
145
+ max++;
146
+ // Upper bound of packed pattern data or the sample data size (heatseek.c:198-200)
147
+ const initData = Math.min(4 * max * 4 * 64, ssize);
148
+ if (s < 378 + initData)
149
+ return 378 + initData - s;
150
+ // Notes (heatseek.c:203-241)
151
+ let idx = 0;
152
+ for (let i = 0; i < max; i++) {
153
+ for (let j = 0; j < 4; j++) {
154
+ for (let k = 0; k < 64; k++) {
155
+ const d = start + 378 + idx;
156
+ if (idx >= initData) {
157
+ const left = 4 * 4 * (max - i - 1);
158
+ if (s < 378 + idx + left + 4)
159
+ return 378 + idx + left + 4 - s;
160
+ }
161
+ switch (data[d] & 0xc0) {
162
+ case 0x00:
163
+ if ((data[d] & 0x0f) > 0x03)
164
+ return -1;
165
+ idx += 4;
166
+ break;
167
+ case 0x40:
168
+ idx += 4;
169
+ break;
170
+ case 0x80:
171
+ if (data[d + 1] !== 0)
172
+ return -1;
173
+ k += data[d + 3];
174
+ idx += 4;
175
+ break;
176
+ case 0xc0:
177
+ if (data[d + 1] !== 0)
178
+ return -1;
179
+ k = 100;
180
+ idx += 4;
181
+ break;
182
+ default:
183
+ break;
184
+ }
185
+ }
186
+ }
187
+ }
188
+ pwReadTitle(null, 0);
189
+ return 0;
190
+ }
191
+ /** pw_crb: "Heatseeker 1.0". */
192
+ export const pwCrb = {
193
+ name: 'Heatseeker 1.0',
194
+ test: testCrb,
195
+ depack: depackCrb,
196
+ };
197
+ //# sourceMappingURL=pw-heatseek.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-heatseek.js","sourceRoot":"","sources":["../src/pw-heatseek.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type PwFormat } from './prowiz.js';
2
+ /** pw_hrt: "Hornet Packer". */
3
+ export declare const pwHrt: PwFormat;
4
+ //# sourceMappingURL=pw-hrt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-hrt.d.ts","sourceRoot":"","sources":["../src/pw-hrt.ts"],"names":[],"mappings":"AAMA,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAqGnE,+BAA+B;AAC/B,eAAO,MAAM,KAAK,EAAE,QAInB,CAAC"}
package/dist/pw-hrt.js ADDED
@@ -0,0 +1,104 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ // Copyright (c) 2026 Bitti09 — modplayjs contributors
3
+ // Ported from: libxmp src/loaders/prowizard/hrt.c (Hornet Packer) —
4
+ // depack_hrt :32-106, test_hrt :108-133.
5
+ import { ptkTable, ptkIsValidNote } from './ptktable.js';
6
+ import { moveData, pwReadTitle } from './prowiz.js';
7
+ const PW_MOD_MAGIC = 0x4d2e4b2e; // 'M.K.'
8
+ function put8(out, b) { out.push(b & 0xff); }
9
+ function put32b(out, v) {
10
+ out.push((v >>> 24) & 0xff, (v >> 16) & 0xff, (v >> 8) & 0xff, v & 0xff);
11
+ }
12
+ /** depack_hrt (hrt.c:32-106). */
13
+ function depackHrt(data, start) {
14
+ let pos = start;
15
+ const out = [];
16
+ // header: 950 bytes moved verbatim, but sample addresses erased (hrt.c:35-44)
17
+ const buf = new Uint8Array(950);
18
+ for (let i = 0; i < 950; i++)
19
+ buf[i] = data[pos++] ?? 0;
20
+ for (let i = 0; i < 31; i++) {
21
+ const p = 38 + 30 * i;
22
+ buf[p] = 0;
23
+ buf[p + 1] = 0;
24
+ buf[p + 2] = 0;
25
+ buf[p + 3] = 0;
26
+ }
27
+ for (let i = 0; i < 950; i++)
28
+ out.push(buf[i]);
29
+ // samples size (hrt.c:46-48)
30
+ let ssize = 0;
31
+ for (let i = 0; i < 31; i++) {
32
+ ssize += ((buf[42 + 30 * i] << 8) | buf[43 + 30 * i]) * 2;
33
+ }
34
+ // song length + nst byte (hrt.c:49-51)
35
+ const len = data[pos++] ?? 0;
36
+ put8(out, len);
37
+ put8(out, data[pos++] ?? 0); // nst byte
38
+ // pattern list (hrt.c:52-55): 128 bytes
39
+ const plist = new Uint8Array(128);
40
+ for (let i = 0; i < 128; i++)
41
+ plist[i] = data[pos++] ?? 0;
42
+ for (let i = 0; i < 128; i++)
43
+ out.push(plist[i]);
44
+ // number of patterns (hrt.c:57-62)
45
+ let npat = 0;
46
+ for (let i = 0; i < 128; i++) {
47
+ if (plist[i] > npat)
48
+ npat = plist[i];
49
+ }
50
+ npat++;
51
+ put32b(out, PW_MOD_MAGIC);
52
+ // pattern data (hrt.c:66-96) at 1084: note halved, sample nibble packed
53
+ pos = start + 1084;
54
+ for (let i = 0; i < npat; i++) {
55
+ for (let j = 0; j < 256; j++) {
56
+ const b0 = data[pos++] ?? 0;
57
+ const b1 = data[pos++] ?? 0;
58
+ const b2 = data[pos++] ?? 0;
59
+ const b3 = data[pos++] ?? 0;
60
+ const b0h = Math.trunc(b0 / 2); // note halved; sample hi nibble kept
61
+ let c1 = b0h & 0xf0;
62
+ let c2 = 0;
63
+ if (b1 !== 0 && ptkIsValidNote(Math.trunc(b1 / 2))) {
64
+ c1 |= ptkTable[Math.trunc(b1 / 2)][0];
65
+ c2 = ptkTable[Math.trunc(b1 / 2)][1];
66
+ }
67
+ const c3 = ((b0h << 4) & 0xf0) | b2;
68
+ const c4 = b3;
69
+ put8(out, c1);
70
+ put8(out, c2);
71
+ put8(out, c3);
72
+ put8(out, c4);
73
+ }
74
+ }
75
+ // sample data (hrt.c:99-102)
76
+ moveData(data, pos, out, ssize);
77
+ return Uint8Array.from(out);
78
+ }
79
+ /** test_hrt (hrt.c:108-133). */
80
+ function testHrt(data, start) {
81
+ const s = data.length - start;
82
+ if (s < 1084)
83
+ return 1084 - s;
84
+ // "HRT!" at 1080 (hrt.c:111-113)
85
+ if (((data[start + 1080] << 24) | (data[start + 1081] << 16) | (data[start + 1082] << 8) | data[start + 1083]) !== 0x48525421) {
86
+ return -1;
87
+ }
88
+ for (let i = 0; i < 31; i++) {
89
+ const d = start + 20 + i * 30;
90
+ if (data[d + 24] > 0x0f)
91
+ return -1; // finetune
92
+ if (data[d + 25] > 0x40)
93
+ return -1; // volume
94
+ }
95
+ pwReadTitle(data.subarray(start), 20);
96
+ return 0;
97
+ }
98
+ /** pw_hrt: "Hornet Packer". */
99
+ export const pwHrt = {
100
+ name: 'Hornet Packer',
101
+ test: testHrt,
102
+ depack: depackHrt,
103
+ };
104
+ //# sourceMappingURL=pw-hrt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-hrt.js","sourceRoot":"","sources":["../src/pw-hrt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type PwFormat } from './prowiz.js';
2
+ /** pw_ksm: "Kefrens Sound Machine". */
3
+ export declare const pwKsm: PwFormat;
4
+ //# sourceMappingURL=pw-ksm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-ksm.d.ts","sourceRoot":"","sources":["../src/pw-ksm.ts"],"names":[],"mappings":"AAMA,OAAO,EAAoC,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AA+M9E,uCAAuC;AACvC,eAAO,MAAM,KAAK,EAAE,QAInB,CAAC"}
package/dist/pw-ksm.js ADDED
@@ -0,0 +1,212 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ // Copyright (c) 2026 Bitti09 — modplayjs contributors
3
+ // Ported from: libxmp src/loaders/prowizard/ksm.c (Kefrens Sound Machine) —
4
+ // depack_ksm :32-190, test_ksm :192-250.
5
+ import { ptkTable, ptkIsValidNote } from './ptktable.js';
6
+ import { moveData, writeZero, pwReadTitle } 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_ksm (ksm.c:32-190). */
14
+ function depackKsm(data, start) {
15
+ let pos = start + 2; // title at offset 2 (ksm.c:37-39)
16
+ const out = [];
17
+ // title: move 13 bytes, pad 7 (ksm.c:38-39)
18
+ for (let i = 0; i < 13; i++)
19
+ out.push(data[pos++] ?? 0);
20
+ writeZero(out, 7);
21
+ // Sample headers (ksm.c:43-62) at 32: 15 × 32-byte records
22
+ pos = start + 32;
23
+ let ssize = 0;
24
+ for (let i = 0; i < 15; i++) {
25
+ writeZero(out, 22); // name
26
+ pos += 20; // 16 unknown + 4 addr bytes
27
+ const k = ((data[pos] << 8) | data[pos + 1]);
28
+ pos += 2; // size (raw)
29
+ put16b(out, Math.trunc(k / 2));
30
+ ssize += k;
31
+ put8(out, 0); // finetune
32
+ put8(out, data[pos++] ?? 0); // volume
33
+ pos += 1; // bypass 1 unknown byte
34
+ const j = ((data[pos] << 8) | data[pos + 1]);
35
+ pos += 2; // loop start
36
+ put16b(out, Math.trunc(j / 2));
37
+ const loopRest = k - j;
38
+ put16b(out, loopRest !== k ? Math.trunc(loopRest / 2) : 1);
39
+ pos += 6; // bypass 6 unknown bytes
40
+ }
41
+ // Pad samples 15..30 (ksm.c:64-68)
42
+ {
43
+ const pad = new Array(30).fill(0);
44
+ pad[29] = 1;
45
+ for (let i = 0; i < 16; i++)
46
+ out.push(...pad);
47
+ }
48
+ // Pattern list (ksm.c:71-88) at 512: 4 bytes per entry, 0xff-terminated.
49
+ pos = start + 512;
50
+ const trknum = [];
51
+ let maxTrknum = 0;
52
+ let len = 0;
53
+ for (; len < 128; len++) {
54
+ const row = [data[pos] ?? 0, data[pos + 1] ?? 0, data[pos + 2] ?? 0, data[pos + 3] ?? 0];
55
+ pos += 4;
56
+ trknum.push(row);
57
+ if (row[0] === 0xff)
58
+ break;
59
+ for (const v of row) {
60
+ if (v > maxTrknum)
61
+ maxTrknum = v;
62
+ }
63
+ }
64
+ put8(out, len);
65
+ put8(out, 0x7f); // ntk byte
66
+ // Sort track numbers (ksm.c:91-119): dedup 4-tuples → plist
67
+ const plist = new Array(128).fill(0);
68
+ let c5 = 0;
69
+ for (let i = 0; i < len; i++) {
70
+ if (i === 0) {
71
+ plist[0] = c5;
72
+ c5++;
73
+ continue;
74
+ }
75
+ let status = 1;
76
+ for (let j = 0; j < i; j++) {
77
+ status = 1;
78
+ for (let k = 0; k < 4; k++) {
79
+ if (trknum[j][k] !== trknum[i][k]) {
80
+ status = 0;
81
+ break;
82
+ }
83
+ }
84
+ if (status === 1) {
85
+ plist[i] = plist[j];
86
+ break;
87
+ }
88
+ }
89
+ if (status === 0) {
90
+ plist[i] = c5;
91
+ c5++;
92
+ }
93
+ status = 1;
94
+ }
95
+ // Real track numbers for existing patterns (ksm.c:122-142)
96
+ const realTnum = [];
97
+ let c1count = 0;
98
+ for (let i = 0; i < len; i++) {
99
+ if (i === 0) {
100
+ realTnum.push([trknum[0][0], trknum[0][1], trknum[0][2], trknum[0][3]]);
101
+ c1count++;
102
+ continue;
103
+ }
104
+ let status = 1;
105
+ for (let j = 0; j < i; j++) {
106
+ status = 1;
107
+ if (plist[i] === plist[j]) {
108
+ status = 0;
109
+ break;
110
+ }
111
+ }
112
+ if (status === 0)
113
+ continue;
114
+ realTnum.push([trknum[i][0], trknum[i][1], trknum[i][2], trknum[i][3]]);
115
+ c1count++;
116
+ status = 1;
117
+ }
118
+ void c5;
119
+ void c1count;
120
+ // Pattern list + ID (ksm.c:144-146)
121
+ for (let i = 0; i < 128; i++)
122
+ put8(out, plist[i]);
123
+ put32b(out, PW_MOD_MAGIC);
124
+ // Pattern data (ksm.c:149-177): tracks at 1536 + 192 × trknum, 3-byte cells
125
+ for (let i = 0; i < c1count; i++) {
126
+ const tmp = new Uint8Array(1024);
127
+ const tdata = [];
128
+ for (let k = 0; k < 4; k++) {
129
+ pos = start + 1536 + 192 * (realTnum[i][k] ?? 0);
130
+ const td = new Uint8Array(192);
131
+ for (let t = 0; t < 192; t++)
132
+ td[t] = data[pos++] ?? 0;
133
+ tdata.push(td);
134
+ }
135
+ for (let j = 0; j < 64; j++) {
136
+ const x = j * 16;
137
+ for (let k = 0; k < 4; k++) {
138
+ const t = tdata[k];
139
+ const tBase = j * 3;
140
+ // Sanity (ksm.c:159-162)
141
+ if (!ptkIsValidNote(t[tBase] ?? 0))
142
+ throw new Error('ksm: invalid note');
143
+ // 2-byte period from ptk (ksm.c:164)
144
+ tmp[x + k * 4] = ptkTable[t[tBase] ?? 0][0];
145
+ tmp[x + k * 4 + 1] = ptkTable[t[tBase] ?? 0][1];
146
+ // sample/fxt byte with 0x0d → 0x0a normalization (ksm.c:165-167)
147
+ let t1 = t[tBase + 1];
148
+ if ((t1 & 0x0f) === 0x0d)
149
+ t1 -= 0x03;
150
+ tmp[x + k * 4 + 2] = t1;
151
+ tmp[x + k * 4 + 3] = t[tBase + 2];
152
+ }
153
+ }
154
+ for (let k = 0; k < 1024; k++)
155
+ out.push(tmp[k]);
156
+ }
157
+ // Sample data (ksm.c:180-183)
158
+ moveData(data, start + 1536 + 192 * (maxTrknum + 1), out, ssize);
159
+ return Uint8Array.from(out);
160
+ }
161
+ /** test_ksm (ksm.c:192-250). */
162
+ function testKsm(data, start) {
163
+ const s = data.length - start;
164
+ if (s < 1536)
165
+ return 1536 - s;
166
+ // test 1 (ksm.c:197-200): 'M.' at 0
167
+ if (data[start] !== 0x4d || data[start + 1] !== 0x2e)
168
+ return -1;
169
+ // test "a" (ksm.c:203-205)
170
+ if (data[start + 15] !== 0x61)
171
+ return -1;
172
+ // volumes (ksm.c:207-211)
173
+ for (let i = 0; i < 15; i++) {
174
+ if (data[start + 54 + i * 32] > 0x40)
175
+ return -1;
176
+ }
177
+ // Highest track number (ksm.c:214-230)
178
+ let maxTrk = 0;
179
+ let i = 0;
180
+ for (; i < 1024; i++) {
181
+ const x = data[start + i + 512];
182
+ if (x === 0xff)
183
+ break;
184
+ if (x > maxTrk)
185
+ maxTrk = x;
186
+ }
187
+ if (i === 1024)
188
+ return -1;
189
+ if (maxTrk === 0)
190
+ return -1;
191
+ // PW_REQUEST_DATA(s, 1536 + max_trk * 192 + 64 * 3)
192
+ const need = 1536 + maxTrk * 192 + 64 * 3;
193
+ if (s < need)
194
+ return need - s;
195
+ // Track data sanity (ksm.c:236-244)
196
+ for (i = 0; i <= maxTrk; i++) {
197
+ const d = start + 1536 + i * 192;
198
+ for (let j = 0; j < 64; j++) {
199
+ if (data[d + j * 3] > 0x24)
200
+ return -1;
201
+ }
202
+ }
203
+ pwReadTitle(data.subarray(start + 2), 13);
204
+ return 0;
205
+ }
206
+ /** pw_ksm: "Kefrens Sound Machine". */
207
+ export const pwKsm = {
208
+ name: 'Kefrens Sound Machine',
209
+ test: testKsm,
210
+ depack: depackKsm,
211
+ };
212
+ //# sourceMappingURL=pw-ksm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-ksm.js","sourceRoot":"","sources":["../src/pw-ksm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type PwFormat } from './prowiz.js';
2
+ /** pw_mp_id: "Module Protector" (TRK1). */
3
+ export declare const pwMpId: PwFormat;
4
+ /** pw_mp_noid: "Module Protector noID". */
5
+ export declare const pwMpNoid: PwFormat;
6
+ //# sourceMappingURL=pw-mp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-mp.d.ts","sourceRoot":"","sources":["../src/pw-mp.ts"],"names":[],"mappings":"AAMA,OAAO,EAA4D,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAkKtG,2CAA2C;AAC3C,eAAO,MAAM,MAAM,EAAE,QAIpB,CAAC;AAEF,2CAA2C;AAC3C,eAAO,MAAM,QAAQ,EAAE,QAItB,CAAC"}