@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
package/README.md CHANGED
@@ -1,3 +1,43 @@
1
- # Temporary Holding Version
1
+ # @modplayjs/fmt-prowizard
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ **ProWizard packed-MOD depacker plugin** for `@modplayjs/core` — ported
4
+ 1:1 from libxmp's `src/loaders/prowizard/`. Detects and converts ~30
5
+ classic Amiga tracker packers into playable modules:
6
+
7
+ PowerPacker (PP20), XPK, Starpack (Startrekker Packer), The Dark Demon,
8
+ Soundtracker packs (Ultimate Soundtracker variants, Ice Face The Music),
9
+ Tuning, Fuchs Tracker, FC-M, Eureka Packer, Hornet, Digital Illusions,
10
+ AC1D, JamCracker, ProPacker 1/2/3, The Player 1.0/2.0/3.0/4.0/5.0/6.0
11
+ (Titanics, Sketch, …), Zen, Ultra Soundtracker ID variants and more.
12
+
13
+ **30 of the C reference's 43 depackers are ported** (the remaining 11 —
14
+ pm18a, pm10c, prun1, prun2, pha, p61a, noiserun, novotrade/crb, tdd,
15
+ gmc, fuzzac — are listed as pending in `src/prowiz.ts`).
16
+
17
+ The no-signature probe order matches `prowiz.c`'s `pw_formats` array
18
+ (order is load-bearing). Loader parity is verified per depacker against
19
+ the C reference (`tools/pw-e2e.mjs`).
20
+
21
+ ## Install
22
+
23
+ ```sh
24
+ npm install @modplayjs/fmt-prowizard
25
+ ```
26
+
27
+ ## Usage
28
+
29
+ ```ts
30
+ import { CorePlayer } from '@modplayjs/core';
31
+ import { pwPlugin } from '@modplayjs/fmt-prowizard';
32
+
33
+ const core = new CorePlayer();
34
+ core.registries.registerFormat(pwPlugin);
35
+ core.loadModule(bytes); // packed .mod variants
36
+ ```
37
+
38
+ ## Also exports
39
+
40
+ `pwCheck`, `pwWizardry`, `pwFormats`, `pwReadTitle`, `type PwFormat`,
41
+ `pwTest`, `pwLoad`.
42
+
43
+ Part of the [modplayjs monorepo](../../README.md). BSD-3-Clause.
@@ -0,0 +1,3 @@
1
+ export { pwCheck, pwWizardry, pwFormats, pwReadTitle, type PwFormat } from './prowiz.js';
2
+ export { pwPlugin, pwTest, pwLoad } from './pw-plugin.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ // Copyright (c) 2026 Bitti09 — modplayjs contributors
3
+ // Project-original code.
4
+ // @modplayjs/fmt-prowizard — ProWizard packed-MOD depackers.
5
+ export { pwCheck, pwWizardry, pwFormats, pwReadTitle } from './prowiz.js';
6
+ export { pwPlugin, pwTest, pwLoad } from './pw-plugin.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,sDAAsD;AACtD,yBAAyB;AACzB,6DAA6D;AAE7D,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAiB,MAAM,aAAa,CAAC;AACzF,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,44 @@
1
+ /** pw_format (prowiz.h:28-32). */
2
+ export interface PwFormat {
3
+ readonly name: string;
4
+ test(data: Uint8Array, start: number): number;
5
+ depack(data: Uint8Array, start: number): Uint8Array;
6
+ }
7
+ /** readmem16b (dataio.c:168-175). */
8
+ export declare function readmem16b(d: Uint8Array, off: number): number;
9
+ /** readmem32b (dataio.c:190-198). */
10
+ export declare function readmem32b(d: Uint8Array, off: number): number;
11
+ /** readmem16l (dataio.c). */
12
+ export declare function readmem16l(d: Uint8Array, off: number): number;
13
+ /** readmem24b (dataio.c) — big-endian 24-bit. */
14
+ export declare function readmem24b(d: Uint8Array, off: number): number;
15
+ /** readmem32l (dataio.c). */
16
+ export declare function readmem32l(d: Uint8Array, off: number): number;
17
+ /**
18
+ * pw_formats (prowiz.c:32-84) — probe ORDER IS LOAD-BEARING:
19
+ * signature-based entries first, then heuristics; pw_mp_noid must be
20
+ * checked before Heatseeker and after ProPacker 1.0 (comment :66).
21
+ * Populated incrementally as depackers land (Wave 2, FORMAT-PLUGINS.md).
22
+ */
23
+ export declare const pwFormats: PwFormat[];
24
+ /** pw_move_data (prowiz.c:87-100): copy `len` bytes input→output. */
25
+ export declare function moveData(src: Uint8Array, srcOff: number, out: number[], len: number): void;
26
+ /** pw_write_zero (prowiz.c:102-112): append `len` zero bytes. */
27
+ export declare function writeZero(out: number[], len: number): void;
28
+ /** pw_read_title (prowiz.c:209-223): up to 20 title bytes. */
29
+ export declare function pwReadTitle(b: Uint8Array | null, s: number): string;
30
+ /**
31
+ * pw_check (prowiz.c:143-198): probe all formats in table order. Buffer
32
+ * growth requests (res > 0) can't be satisfied when the input is already
33
+ * fully in memory — matches C's "fetch < res → try next format" path.
34
+ */
35
+ export declare function pwCheck(data: Uint8Array, start: number): PwFormat | null;
36
+ /**
37
+ * pw_wizardry (prowiz.c:113-139): find format + depack to M.K. bytes.
38
+ * Sets outName.name to the winning pw_format.name (pw_load.c:128 prints
39
+ * it as mod->type).
40
+ */
41
+ export declare function pwWizardry(data: Uint8Array, start: number, outName: {
42
+ name?: string;
43
+ }): Uint8Array;
44
+ //# sourceMappingURL=prowiz.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prowiz.d.ts","sourceRoot":"","sources":["../src/prowiz.ts"],"names":[],"mappings":"AAsCA,kCAAkC;AAClC,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9C,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC;CACrD;AAED,qCAAqC;AACrC,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,qCAAqC;AACrC,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,6BAA6B;AAC7B,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,iDAAiD;AACjD,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,6BAA6B;AAC7B,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,QAAQ,EA6C/B,CAAC;AAEF,qEAAqE;AACrE,wBAAgB,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAI1F;AAED,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAE1D;AAED,8DAA8D;AAC9D,wBAAgB,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAMnE;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAOxE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,CAMlG"}
package/dist/prowiz.js ADDED
@@ -0,0 +1,157 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ // Copyright (c) 2026 Bitti09 — modplayjs contributors
3
+ // Ported from: libxmp src/loaders/prowizard/prowiz.c (pw_format contract
4
+ // prowiz.h:28-32, pw_formats table :32-84, pw_move_data :87-100,
5
+ // pw_write_zero :102-112, pw_wizardry :113-139, pw_check :143-198,
6
+ // pw_read_title :209-223) — the ProWizard depacker framework.
7
+ //
8
+ // JS contract: depackers work over byte buffers. test(data, start) returns
9
+ // 0 (match) / -1 (no) / N>0 (request N more bytes, prowiz.c:173-186 grows
10
+ // the buffer and re-tests; our input is fully in memory so N>0 → try next
11
+ // format, matching the "can't read more" path). depack(data, start) writes
12
+ // a synthetic standard 31-sample M.K. MOD byte stream — pw_load.c feeds
13
+ // that to the shared MOD parse core (fmt-mod/modcore.ts).
14
+ import { ParseError } from '@modplayjs/core';
15
+ import { pwPp10, pwPp21, pwPp30 } from './pw-pp.js';
16
+ import { pwP4x } from './pw-p40.js';
17
+ import { pwP50a, pwP60a } from './pw-theplayer.js';
18
+ import { pwTp1 } from './pw-tp1.js';
19
+ import { pwTp2, pwTp3 } from './pw-tp3.js';
20
+ import { pwUnicId, pwUnicNoid, pwUnicEmptyId } from './pw-unic.js';
21
+ import { pwUnic2 } from './pw-unic2.js';
22
+ import { pwNp1, pwNp2 } from './pw-np12.js';
23
+ import { pwNp3 } from './pw-np3.js';
24
+ import { pwXann } from './pw-xann.js';
25
+ import { pwWn } from './pw-wn.js';
26
+ import { pwZen } from './pw-zen.js';
27
+ import { pwKsm } from './pw-ksm.js';
28
+ import { pwHrt } from './pw-hrt.js';
29
+ import { pwMpId, pwMpNoid } from './pw-mp.js';
30
+ import { pwDi } from './pw-di.js';
31
+ import { pwAc1d } from './pw-ac1d.js';
32
+ import { pwEu } from './pw-eureka.js';
33
+ import { pwFcm } from './pw-fcm.js';
34
+ import { pwFchs } from './pw-fuchs.js';
35
+ import { pwSkyt } from './pw-skyt.js';
36
+ import { pwStarpack } from './pw-starpack.js';
37
+ /** readmem16b (dataio.c:168-175). */
38
+ export function readmem16b(d, off) {
39
+ return (d[off] << 8) | d[off + 1];
40
+ }
41
+ /** readmem32b (dataio.c:190-198). */
42
+ export function readmem32b(d, off) {
43
+ return ((d[off] << 24) | (d[off + 1] << 16) | (d[off + 2] << 8) | d[off + 3]) >>> 0;
44
+ }
45
+ /** readmem16l (dataio.c). */
46
+ export function readmem16l(d, off) {
47
+ return d[off] | (d[off + 1] << 8);
48
+ }
49
+ /** readmem24b (dataio.c) — big-endian 24-bit. */
50
+ export function readmem24b(d, off) {
51
+ return (d[off] << 16) | (d[off + 1] << 8) | d[off + 2];
52
+ }
53
+ /** readmem32l (dataio.c). */
54
+ export function readmem32l(d, off) {
55
+ return (d[off] | (d[off + 1] << 8) | (d[off + 2] << 16) | (d[off + 3] << 24)) >>> 0;
56
+ }
57
+ /**
58
+ * pw_formats (prowiz.c:32-84) — probe ORDER IS LOAD-BEARING:
59
+ * signature-based entries first, then heuristics; pw_mp_noid must be
60
+ * checked before Heatseeker and after ProPacker 1.0 (comment :66).
61
+ * Populated incrementally as depackers land (Wave 2, FORMAT-PLUGINS.md).
62
+ */
63
+ export const pwFormats = [
64
+ // With signature (prowiz.c:33-50) — order verbatim
65
+ pwAc1d,
66
+ pwFchs,
67
+ pwFcm,
68
+ pwHrt,
69
+ pwKsm,
70
+ pwMpId,
71
+ // pwP18a — pending
72
+ // pwP10c — pending
73
+ // pwPru1 — pending
74
+ // pwPru2 — pending
75
+ // pwPha — pending
76
+ pwWn,
77
+ pwUnicId,
78
+ pwTp3,
79
+ pwTp2,
80
+ pwTp1,
81
+ pwSkyt,
82
+ // No signature (prowiz.c:52-84) — order verbatim
83
+ pwXann,
84
+ pwDi,
85
+ pwEu,
86
+ pwP4x,
87
+ pwPp21,
88
+ pwPp30,
89
+ pwPp10,
90
+ pwP50a,
91
+ pwP60a,
92
+ // pwP61a — pending
93
+ pwMpNoid, // must be checked before Heatseeker, after ProPacker 1.0 (:66)
94
+ // pwNru — pending
95
+ pwNp2,
96
+ pwNp1,
97
+ pwNp3,
98
+ pwZen,
99
+ pwUnicEmptyId,
100
+ pwUnicNoid,
101
+ pwUnic2,
102
+ // pwCrb — pending
103
+ // pwTdd — pending
104
+ pwStarpack,
105
+ // pwGmc — pending
106
+ // pwTitanics — pending
107
+ ];
108
+ /** pw_move_data (prowiz.c:87-100): copy `len` bytes input→output. */
109
+ export function moveData(src, srcOff, out, len) {
110
+ for (let i = 0; i < len && srcOff + i < src.length; i++) {
111
+ out.push(src[srcOff + i]);
112
+ }
113
+ }
114
+ /** pw_write_zero (prowiz.c:102-112): append `len` zero bytes. */
115
+ export function writeZero(out, len) {
116
+ for (let i = 0; i < len; i++)
117
+ out.push(0);
118
+ }
119
+ /** pw_read_title (prowiz.c:209-223): up to 20 title bytes. */
120
+ export function pwReadTitle(b, s) {
121
+ if (b === null)
122
+ return '';
123
+ if (s > 20)
124
+ s = 20;
125
+ let t = '';
126
+ for (let i = 0; i < s; i++)
127
+ t += String.fromCharCode(b[i]);
128
+ return t;
129
+ }
130
+ /**
131
+ * pw_check (prowiz.c:143-198): probe all formats in table order. Buffer
132
+ * growth requests (res > 0) can't be satisfied when the input is already
133
+ * fully in memory — matches C's "fetch < res → try next format" path.
134
+ */
135
+ export function pwCheck(data, start) {
136
+ for (let i = 0; i < pwFormats.length; i++) {
137
+ const res = pwFormats[i].test(data, start);
138
+ if (res === 0)
139
+ return pwFormats[i];
140
+ // res < 0 → no match; res > 0 → more data requested (unavailable)
141
+ }
142
+ return null;
143
+ }
144
+ /**
145
+ * pw_wizardry (prowiz.c:113-139): find format + depack to M.K. bytes.
146
+ * Sets outName.name to the winning pw_format.name (pw_load.c:128 prints
147
+ * it as mod->type).
148
+ */
149
+ export function pwWizardry(data, start, outName) {
150
+ const format = pwCheck(data, start);
151
+ if (format === null)
152
+ throw new ParseError('prowizard: no format matched');
153
+ const out = format.depack(data, start);
154
+ outName.name = format.name;
155
+ return out;
156
+ }
157
+ //# sourceMappingURL=prowiz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prowiz.js","sourceRoot":"","sources":["../src/prowiz.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** ptk_table[37][2] (ptktable.c:4-46): Amiga period pairs per note index. */
2
+ export declare const ptkTable: ReadonlyArray<readonly [number, number]>;
3
+ /** PTK_IS_VALID_NOTE (prowiz.h:20). */
4
+ export declare function ptkIsValidNote(n: number): boolean;
5
+ //# sourceMappingURL=ptktable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ptktable.d.ts","sourceRoot":"","sources":["../src/ptktable.ts"],"names":[],"mappings":"AAKA,6EAA6E;AAC7E,eAAO,MAAM,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAyC7D,CAAC;AAEF,uCAAuC;AACvC,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEjD"}
@@ -0,0 +1,49 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ // Copyright (c) 2026 Bitti09 — modplayjs contributors
3
+ // Ported from: libxmp src/loaders/prowizard/ptktable.c (ptk_table) and
4
+ // tuning.c (tun_table) — shared ProWizard lookup tables.
5
+ /** ptk_table[37][2] (ptktable.c:4-46): Amiga period pairs per note index. */
6
+ export const ptkTable = [
7
+ [0x00, 0x00],
8
+ [0x03, 0x58],
9
+ [0x03, 0x28],
10
+ [0x02, 0xfa],
11
+ [0x02, 0xd0],
12
+ [0x02, 0xa6],
13
+ [0x02, 0x80], /* 1 */
14
+ [0x02, 0x5c],
15
+ [0x02, 0x3a],
16
+ [0x02, 0x1a],
17
+ [0x01, 0xfc],
18
+ [0x01, 0xe0],
19
+ [0x01, 0xc5],
20
+ [0x01, 0xac],
21
+ [0x01, 0x94],
22
+ [0x01, 0x7d],
23
+ [0x01, 0x68],
24
+ [0x01, 0x53],
25
+ [0x01, 0x40], /* 2 */
26
+ [0x01, 0x2e],
27
+ [0x01, 0x1d],
28
+ [0x01, 0x0d],
29
+ [0x00, 0xfe],
30
+ [0x00, 0xf0],
31
+ [0x00, 0xe2],
32
+ [0x00, 0xd6],
33
+ [0x00, 0xca],
34
+ [0x00, 0xbe],
35
+ [0x00, 0xb4],
36
+ [0x00, 0xaa],
37
+ [0x00, 0xa0], /* 3 */
38
+ [0x00, 0x97],
39
+ [0x00, 0x8f],
40
+ [0x00, 0x87],
41
+ [0x00, 0x7f],
42
+ [0x00, 0x78],
43
+ [0x00, 0x71],
44
+ ];
45
+ /** PTK_IS_VALID_NOTE (prowiz.h:20). */
46
+ export function ptkIsValidNote(n) {
47
+ return n >= 0 && n < ptkTable.length;
48
+ }
49
+ //# sourceMappingURL=ptktable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ptktable.js","sourceRoot":"","sources":["../src/ptktable.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,sDAAsD;AACtD,uEAAuE;AACvE,yDAAyD;AAEzD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,QAAQ,GAA6C;IACjE,CAAC,IAAI,EAAE,IAAI,CAAC;IAEZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAI,SAAS;IACzB,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IAEZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAI,SAAS;IACzB,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IAEZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAI,SAAS;IACzB,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,uCAAuC;AACvC,MAAM,UAAU,cAAc,CAAC,CAAS;IACvC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;AACtC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type PwFormat } from './prowiz.js';
2
+ /** pw_ac1d: "AC1D Packer". */
3
+ export declare const pwAc1d: PwFormat;
4
+ //# sourceMappingURL=pw-ac1d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-ac1d.d.ts","sourceRoot":"","sources":["../src/pw-ac1d.ts"],"names":[],"mappings":"AAMA,OAAO,EAAgD,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AA0I1F,8BAA8B;AAC9B,eAAO,MAAM,MAAM,EAAE,QAIpB,CAAC"}
@@ -0,0 +1,133 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ // Copyright (c) 2026 Bitti09 — modplayjs contributors
3
+ // Ported from: libxmp src/loaders/prowizard/ac1d.c (AC1D Packer) —
4
+ // depack_ac1d :37-152, test_ac1d :155-185.
5
+ import { ptkTable, ptkIsValidNote } from './ptktable.js';
6
+ import { readmem32b, moveData, writeZero, pwReadTitle } from './prowiz.js';
7
+ const NO_NOTE = 0xff;
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_ac1d (ac1d.c:37-152). */
14
+ function depackAc1d(data, start) {
15
+ let pos = start;
16
+ const out = [];
17
+ const u8 = () => data[pos++] ?? 0;
18
+ const u16 = () => { const v = (data[pos] << 8) | data[pos + 1]; pos += 2; return v; };
19
+ const u32 = () => { const v = readmem32b(data, pos); pos += 4; return v; };
20
+ const npos = u8();
21
+ const ntkByte = u8();
22
+ u16(); // bypass ID
23
+ const saddr = u32(); // sample data address
24
+ writeZero(out, 20); // title
25
+ // Sample headers (ac1d.c:49-58)
26
+ let ssize = 0;
27
+ for (let i = 0; i < 31; i++) {
28
+ writeZero(out, 22); // name
29
+ const size = u16();
30
+ ssize += size * 2;
31
+ put16b(out, size);
32
+ put8(out, u8()); // finetune
33
+ put8(out, u8()); // volume
34
+ put16b(out, u16()); // loop start
35
+ put16b(out, u16()); // loop size
36
+ }
37
+ // Pattern addresses (ac1d.c:61-70): 0-terminated list
38
+ const paddr = [];
39
+ let npat = 0;
40
+ for (; npat < 128; npat++) {
41
+ paddr.push(u32());
42
+ if (paddr[npat] === 0)
43
+ break;
44
+ }
45
+ if (npat === 0)
46
+ throw new Error('ac1d: no patterns');
47
+ npat--;
48
+ put8(out, npos);
49
+ put8(out, ntkByte);
50
+ // Pattern table (ac1d.c:77-79) at 0x300
51
+ pos = start + 0x300;
52
+ moveData(data, pos, out, 128);
53
+ put32b(out, 0x4d2e4b2e); // M.K.
54
+ // Pattern data (ac1d.c:82-140): per pattern skip 3 u32 headers, then
55
+ // 4 channels × 64 rows of packed cells with 0x80-run skips.
56
+ for (let i = 0; i < npat; i++) {
57
+ pos = start + paddr[i];
58
+ u32();
59
+ u32();
60
+ u32(); // tsize headers
61
+ const tmp = new Uint8Array(1024);
62
+ for (let k = 0; k < 4 && pos < data.length; k++) {
63
+ for (let j = 0; j < 64; j++) {
64
+ const x = j * 16 + k * 4;
65
+ const c1 = u8();
66
+ if ((c1 & 0x80) !== 0) {
67
+ const c4 = c1 & 0x7f;
68
+ j += c4 - 1;
69
+ continue;
70
+ }
71
+ const c2 = u8();
72
+ const ins = ((c1 & 0xc0) >> 2) | ((c2 >> 4) & 0x0f);
73
+ let note = c1 & 0x3f;
74
+ if (note === 0x3f)
75
+ note = NO_NOTE;
76
+ else if (note !== 0)
77
+ note -= 0x0b;
78
+ if (note === 0)
79
+ note++;
80
+ tmp[x] = ins & 0xf0;
81
+ if (note !== NO_NOTE && ptkIsValidNote(note)) {
82
+ tmp[x] = (tmp[x] | ptkTable[note][0]) & 0xff;
83
+ tmp[x + 1] = ptkTable[note][1];
84
+ }
85
+ if ((c2 & 0x0f) === 0x07) {
86
+ tmp[x + 2] = ((ins << 4) & 0xf0) & 0xff;
87
+ continue;
88
+ }
89
+ const c3 = u8();
90
+ const fxt = c2 & 0x0f;
91
+ const fxp = c3;
92
+ tmp[x + 2] = (((ins << 4) & 0xf0) | fxt) & 0xff;
93
+ tmp[x + 3] = fxp;
94
+ }
95
+ }
96
+ for (let t = 0; t < 1024; t++)
97
+ out.push(tmp[t]);
98
+ }
99
+ // Sample data (ac1d.c:146-148)
100
+ moveData(data, start + saddr, out, ssize);
101
+ return Uint8Array.from(out);
102
+ }
103
+ /** test_ac1d (ac1d.c:155-185). */
104
+ function testAc1d(data, start) {
105
+ const s = data.length - start;
106
+ if (s < 896)
107
+ return 896 - s;
108
+ // test #1 (ac1d.c:162-165): 0xac 0x1d at offset 2
109
+ if (data[start + 2] !== 0xac || data[start + 3] !== 0x1d)
110
+ return -1;
111
+ // test #2 (ac1d.c:167-170)
112
+ if (data[start] > 0x7f)
113
+ return -1;
114
+ // test #4 (ac1d.c:172-176)
115
+ for (let i = 0; i < 31; i++) {
116
+ if (data[start + 10 + 8 * i] > 0x0f)
117
+ return -1;
118
+ }
119
+ // test #5 (ac1d.c:178-182)
120
+ for (let i = 0; i < 128; i++) {
121
+ if (data[start + 768 + i] > 0x7f)
122
+ return -1;
123
+ }
124
+ pwReadTitle(null, 0);
125
+ return 0;
126
+ }
127
+ /** pw_ac1d: "AC1D Packer". */
128
+ export const pwAc1d = {
129
+ name: 'AC1D Packer',
130
+ test: testAc1d,
131
+ depack: depackAc1d,
132
+ };
133
+ //# sourceMappingURL=pw-ac1d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-ac1d.js","sourceRoot":"","sources":["../src/pw-ac1d.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type PwFormat } from './prowiz.js';
2
+ /** pw_di: "Digital Illusions". */
3
+ export declare const pwDi: PwFormat;
4
+ //# sourceMappingURL=pw-di.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-di.d.ts","sourceRoot":"","sources":["../src/pw-di.ts"],"names":[],"mappings":"AAMA,OAAO,EAA4D,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AA6KtG,kCAAkC;AAClC,eAAO,MAAM,IAAI,EAAE,QAIlB,CAAC"}