@wasm-gaming/fbneo-wasm 0.1.0 → 0.1.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 (43) hide show
  1. package/README.md +78 -1
  2. package/data/romsets/atari.json +12183 -0
  3. package/data/romsets/capcom.json +66781 -0
  4. package/data/romsets/cave.json +4888 -0
  5. package/data/romsets/channelf.json +463 -0
  6. package/data/romsets/coleco.json +5921 -0
  7. package/data/romsets/cps3.json +1777 -0
  8. package/data/romsets/dataeast.json +22415 -0
  9. package/data/romsets/galaxian.json +14107 -0
  10. package/data/romsets/index.json +116 -0
  11. package/data/romsets/irem.json +15032 -0
  12. package/data/romsets/konami.json +24780 -0
  13. package/data/romsets/megadrive.json +26352 -0
  14. package/data/romsets/midway.json +13213 -0
  15. package/data/romsets/msx.json +16287 -0
  16. package/data/romsets/neogeo.json +39274 -0
  17. package/data/romsets/nes.json +28301 -0
  18. package/data/romsets/pce.json +4397 -0
  19. package/data/romsets/pgm.json +8860 -0
  20. package/data/romsets/pgm2.json +397 -0
  21. package/data/romsets/pre90s.json +143783 -0
  22. package/data/romsets/psikyo.json +2205 -0
  23. package/data/romsets/pst90s.json +84614 -0
  24. package/data/romsets/sega.json +54871 -0
  25. package/data/romsets/sg1000.json +2300 -0
  26. package/data/romsets/sms.json +13532 -0
  27. package/data/romsets/snes.json +23630 -0
  28. package/data/romsets/spectrum.json +30187 -0
  29. package/data/romsets/taito.json +40373 -0
  30. package/data/romsets/toaplan.json +8177 -0
  31. package/dist/fbneo/neo.d.ts +83 -0
  32. package/dist/fbneo/neo.d.ts.map +1 -0
  33. package/dist/fbneo/neo.js +357 -0
  34. package/dist/fbneo/neo.js.map +1 -0
  35. package/dist/fbneo/romset.d.ts +0 -0
  36. package/dist/fbneo/romset.d.ts.map +1 -0
  37. package/dist/fbneo/romset.js +0 -0
  38. package/dist/fbneo/romset.js.map +1 -0
  39. package/package.json +17 -1
  40. package/src/neo.ts +463 -0
  41. package/src/romset.ts +0 -0
  42. package/dist/fbneo/fbneo.js +0 -2
  43. package/dist/fbneo/fbneo.wasm +0 -0
@@ -0,0 +1,83 @@
1
+ import type { RomsetSystem } from './romset.js';
2
+ /** A Neo Geo cartridge region, in the order a `.neo` file stores them. */
3
+ export type NeoRegion = 'P' | 'S' | 'M' | 'V1' | 'V2' | 'C';
4
+ /** The regions in `.neo` file order — the order the blobs follow the header. */
5
+ export declare const NEO_REGIONS: readonly NeoRegion[];
6
+ /** Header fields of a `.neo` file. */
7
+ export interface NeoInfo {
8
+ /** Cartridge title from the header's `Name[33]` field. */
9
+ name: string;
10
+ /** Manufacturer from the header's `Manu[17]` field. */
11
+ manufacturer: string;
12
+ year: number;
13
+ /** Bytes each region occupies in the file. */
14
+ sizes: Record<NeoRegion, number>;
15
+ }
16
+ /** A parsed `.neo` file: its header plus a view over each region's bytes. */
17
+ export interface NeoFile extends NeoInfo {
18
+ /** Views into the source buffer — no copying. */
19
+ regions: Record<NeoRegion, Uint8Array>;
20
+ }
21
+ /** One chip carved out of a `.neo`, ready to become a zip entry. */
22
+ export interface NeoChip {
23
+ /** Internal ROM name FBNeo expects (e.g. `201-c1.c1`). */
24
+ name: string;
25
+ /** Lowercase 8-hex CRC-32 of `data`, verified against the driver table. */
26
+ crc: string;
27
+ region: NeoRegion;
28
+ data: Uint8Array;
29
+ }
30
+ /** The result of a successful conversion. */
31
+ export interface NeoRomset {
32
+ /** FBNeo driver short name — pass as `options.driver`. */
33
+ driver: string;
34
+ system: string;
35
+ /** Clone parent's driver name, or `null` for a parent set. */
36
+ parent: string | null;
37
+ info: NeoInfo;
38
+ chips: NeoChip[];
39
+ /**
40
+ * The rebuilt ROM set as a *stored* (uncompressed) zip — feed as `assets.rom`.
41
+ * Deflating would only be undone by FBNeo on the next line, so the bytes are
42
+ * stored: the conversion stays synchronous and costs no extra CPU.
43
+ */
44
+ zip: Uint8Array;
45
+ }
46
+ export interface NeoToRomsetOptions {
47
+ /** Force a driver instead of matching the header's region sizes against every set. */
48
+ driver?: string;
49
+ }
50
+ /** Cheap sniff: does this look like a `.neo` flash-cart image? */
51
+ export declare function isNeoFile(bytes: Uint8Array): boolean;
52
+ /**
53
+ * Read a `.neo` file's header and slice out each region.
54
+ *
55
+ * @throws if the magic is missing or the file is shorter than its header describes.
56
+ */
57
+ export declare function parseNeo(bytes: Uint8Array): NeoFile;
58
+ /**
59
+ * Rebuild an FBNeo ROM set from a `.neo` file.
60
+ *
61
+ * @param bytes The raw `.neo` bytes.
62
+ * @param datasets One or more romset datasets carrying chip layouts (`s`/`r` per
63
+ * ROM) — in practice `data/romsets/neogeo.json`.
64
+ * @throws if no driver's chip layout matches the header's region sizes, or if
65
+ * every size-matched candidate fails CRC-32 verification.
66
+ */
67
+ export declare function neoToRomset(bytes: Uint8Array, datasets: RomsetSystem | readonly RomsetSystem[], options?: NeoToRomsetOptions): NeoRomset;
68
+ /** CRC-32 (IEEE, the one zip and FBNeo's ROM tables use) of `bytes`. */
69
+ export declare function crc32(bytes: Uint8Array): number;
70
+ /** Lowercase 8-hex CRC-32, the form the romset dataset stores. */
71
+ export declare function crc32Hex(bytes: Uint8Array): string;
72
+ /**
73
+ * Build a zip with every entry *stored* (method 0).
74
+ *
75
+ * FBNeo decompresses each chip straight into its ROM buffer, so deflating here
76
+ * would just be undone a moment later; storing keeps this synchronous (no
77
+ * `CompressionStream`) and costs one pass over the data.
78
+ */
79
+ export declare function zipStore(entries: readonly {
80
+ name: string;
81
+ data: Uint8Array;
82
+ }[]): Uint8Array;
83
+ //# sourceMappingURL=neo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"neo.d.ts","sourceRoot":"","sources":["../../src/neo.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,aAAa,CAAC;AAE5D,0EAA0E;AAC1E,MAAM,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;AAE5D,gFAAgF;AAChF,eAAO,MAAM,WAAW,EAAE,SAAS,SAAS,EAAqC,CAAC;AAElF,sCAAsC;AACtC,MAAM,WAAW,OAAO;IACtB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,6EAA6E;AAC7E,MAAM,WAAW,OAAQ,SAAQ,OAAO;IACtC,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;CACxC;AAED,oEAAoE;AACpE,MAAM,WAAW,OAAO;IACtB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,6CAA6C;AAC7C,MAAM,WAAW,SAAS;IACxB,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB;;;;OAIG;IACH,GAAG,EAAE,UAAU,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAQD,kEAAkE;AAClE,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAOpD;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAoCnD;AAYD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,YAAY,GAAG,SAAS,YAAY,EAAE,EAChD,OAAO,GAAE,kBAAuB,GAC/B,SAAS,CAwEX;AAsHD,wEAAwE;AACxE,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAK/C;AAED,kEAAkE;AAClE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAElD;AAOD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,EAAE,GAAG,UAAU,CAuE3F"}
@@ -0,0 +1,357 @@
1
+ // Opt-in helper: turn a Neo Geo `.neo` file (the NeoSD / Terraonion flash-cart
2
+ // image) into the FBNeo ROM-set zip the core can actually boot — in the browser,
3
+ // with no dependencies.
4
+ //
5
+ // FBNeo — like MAME — only reads `<driver>.zip` / `<driver>.7z` holding the
6
+ // individual *chip* dumps (p1, s1, c1..cN, m1, v1..vN). A `.neo` is the opposite
7
+ // packaging: a 4096-byte header followed by each region as one contiguous blob,
8
+ // with the C (sprite) region byte-interleaved the way the cartridge wires it. So
9
+ // a `.neo` can never be handed to the engine directly — but every byte FBNeo
10
+ // wants is in there, and this module rebuilds the chip split:
11
+ //
12
+ // header: "NEO1" | P size | S size | M size | V1 size | V2 size | C size | ...
13
+ // data: P | S | M | V1 | V2 | C (C = even bytes -> c1, odd -> c2)
14
+ //
15
+ // The chip layout (how many chips per region and how big each one is) comes from
16
+ // the same `data/romsets/neogeo.json` dataset the `romset` helper uses for
17
+ // content identity: for systems that need it, `gen-romset-index.mjs` records each
18
+ // ROM's size (`s`) and region (`r`) alongside its CRC-32. The driver is
19
+ // identified by matching the `.neo` header's region sizes against those layouts,
20
+ // and every carved chip is CRC-32 verified before a zip is written — if a set
21
+ // needs a layout this simple carve cannot reproduce (some SMA-protected games
22
+ // store their program ROM inside the custom chip), this throws rather than hand
23
+ // the engine a silently broken zip.
24
+ //
25
+ // @example
26
+ // const neogeo = await fetch('/romsets/neogeo.json').then((r) => r.json());
27
+ // if (isNeoFile(bytes)) {
28
+ // const { driver, zip } = neoToRomset(bytes, neogeo);
29
+ // await engine.load({ ...config, assets: { ...assets, rom: zip }, options: { driver } });
30
+ // }
31
+ /** The regions in `.neo` file order — the order the blobs follow the header. */
32
+ export const NEO_REGIONS = ['P', 'S', 'M', 'V1', 'V2', 'C'];
33
+ const NEO_HEADER_SIZE = 4096;
34
+ const NAME_OFFSET = 0x2c;
35
+ const NAME_LENGTH = 33;
36
+ const MANUFACTURER_OFFSET = 0x4d;
37
+ const MANUFACTURER_LENGTH = 17;
38
+ /** Cheap sniff: does this look like a `.neo` flash-cart image? */
39
+ export function isNeoFile(bytes) {
40
+ return (bytes.length > NEO_HEADER_SIZE &&
41
+ bytes[0] === 0x4e /* N */ &&
42
+ bytes[1] === 0x45 /* E */ &&
43
+ bytes[2] === 0x4f /* O */);
44
+ }
45
+ /**
46
+ * Read a `.neo` file's header and slice out each region.
47
+ *
48
+ * @throws if the magic is missing or the file is shorter than its header describes.
49
+ */
50
+ export function parseNeo(bytes) {
51
+ if (!isNeoFile(bytes))
52
+ throw new Error('neo: not a .neo file (missing NEO magic)');
53
+ const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
54
+ // Region sizes are six consecutive LE uint32s, but the header stores them in
55
+ // P S M V1 V2 C order while the C blob is written last — same order here.
56
+ const sizes = {
57
+ P: view.getUint32(4, true),
58
+ S: view.getUint32(8, true),
59
+ M: view.getUint32(12, true),
60
+ V1: view.getUint32(16, true),
61
+ V2: view.getUint32(20, true),
62
+ C: view.getUint32(24, true),
63
+ };
64
+ const regions = {};
65
+ let offset = NEO_HEADER_SIZE;
66
+ for (const region of NEO_REGIONS) {
67
+ const end = offset + sizes[region];
68
+ if (end > bytes.length) {
69
+ throw new Error(`neo: truncated file — header describes ${end} bytes through region ${region}, ` +
70
+ `file is ${bytes.length}`);
71
+ }
72
+ regions[region] = bytes.subarray(offset, end);
73
+ offset = end;
74
+ }
75
+ return {
76
+ name: cString(bytes, NAME_OFFSET, NAME_LENGTH),
77
+ manufacturer: cString(bytes, MANUFACTURER_OFFSET, MANUFACTURER_LENGTH),
78
+ year: view.getUint32(28, true),
79
+ sizes,
80
+ regions,
81
+ };
82
+ }
83
+ /** Read a fixed-width NUL-padded latin-1 string field. */
84
+ function cString(bytes, start, length) {
85
+ let end = start;
86
+ const limit = Math.min(start + length, bytes.length);
87
+ while (end < limit && bytes[end] !== 0)
88
+ end++;
89
+ let out = '';
90
+ for (let i = start; i < end; i++)
91
+ out += String.fromCharCode(bytes[i]);
92
+ return out;
93
+ }
94
+ /**
95
+ * Rebuild an FBNeo ROM set from a `.neo` file.
96
+ *
97
+ * @param bytes The raw `.neo` bytes.
98
+ * @param datasets One or more romset datasets carrying chip layouts (`s`/`r` per
99
+ * ROM) — in practice `data/romsets/neogeo.json`.
100
+ * @throws if no driver's chip layout matches the header's region sizes, or if
101
+ * every size-matched candidate fails CRC-32 verification.
102
+ */
103
+ export function neoToRomset(bytes, datasets, options = {}) {
104
+ const neo = parseNeo(bytes);
105
+ const systems = Array.isArray(datasets)
106
+ ? datasets
107
+ : [datasets];
108
+ // Candidates: drivers whose chip layout adds up to exactly this .neo's regions.
109
+ // A size match alone can be ambiguous between a set and its clones, so this is
110
+ // only a filter — the CRC check below decides. Parents are tried first so the
111
+ // canonical boot name wins when a clone is byte-identical.
112
+ const candidates = [];
113
+ for (const system of systems) {
114
+ for (const [driver, game] of Object.entries(system.games)) {
115
+ if (options.driver ? driver !== options.driver : !layoutMatchesSizes(game, neo.sizes))
116
+ continue;
117
+ candidates.push({ system: system.system, driver, game });
118
+ }
119
+ }
120
+ candidates.sort((a, b) => Number(a.game.parent === null) - Number(b.game.parent === null) ||
121
+ a.driver.localeCompare(b.driver));
122
+ if (!candidates.length) {
123
+ throw new Error(options.driver
124
+ ? `neo: driver "${options.driver}" is not in the supplied dataset(s)`
125
+ : `neo: no driver matches this file's region sizes ` +
126
+ `(${NEO_REGIONS.map((r) => `${r}=0x${neo.sizes[r].toString(16)}`).join(' ')}) — ` +
127
+ 'not a Neo Geo set this FBNeo build knows');
128
+ }
129
+ const failures = [];
130
+ for (const { system, driver, game } of candidates) {
131
+ let carved;
132
+ try {
133
+ carved = carve(game, neo.regions);
134
+ }
135
+ catch (err) {
136
+ failures.push(`${driver}: ${err.message}`);
137
+ continue;
138
+ }
139
+ // Every chip must hash to the CRC-32 the driver table declares. This is what
140
+ // separates a real match from a set that merely happens to share region sizes,
141
+ // and what catches layouts this straight carve cannot reproduce.
142
+ const chips = carved.map((chip) => ({
143
+ name: chip.name,
144
+ region: chip.region,
145
+ data: chip.data,
146
+ crc: crc32Hex(chip.data),
147
+ }));
148
+ const bad = chips.filter((chip, i) => chip.crc !== carved[i].expected);
149
+ if (bad.length) {
150
+ failures.push(`${driver}: ${bad.length}/${chips.length} chips CRC-mismatched ` +
151
+ `(${bad.slice(0, 4).map((c) => c.name).join(', ')}${bad.length > 4 ? ', …' : ''})`);
152
+ continue;
153
+ }
154
+ return {
155
+ driver,
156
+ system,
157
+ parent: game.parent,
158
+ info: { name: neo.name, manufacturer: neo.manufacturer, year: neo.year, sizes: neo.sizes },
159
+ chips,
160
+ zip: zipStore(chips),
161
+ };
162
+ }
163
+ throw new Error(`neo: matched ${candidates.length} driver(s) by size but none by content:\n ${failures.join('\n ')}`);
164
+ }
165
+ /** The chips of a game's layout, in table order. Sets without layout data yield none. */
166
+ function layoutChips(game) {
167
+ const out = [];
168
+ for (const rom of game.roms) {
169
+ // Rows outside the six cartridge regions (BIOS, the SMA custom chip, padding)
170
+ // carry no `r` and occupy no bytes in a .neo — skip without moving any cursor.
171
+ if (rom.r === undefined || rom.s === undefined)
172
+ continue;
173
+ if (!NEO_REGIONS.includes(rom.r))
174
+ continue;
175
+ out.push({ n: rom.n, c: rom.c, s: rom.s, r: rom.r });
176
+ }
177
+ return out;
178
+ }
179
+ function layoutMatchesSizes(game, sizes) {
180
+ const chips = layoutChips(game);
181
+ if (!chips.length)
182
+ return false;
183
+ const sums = { P: 0, S: 0, M: 0, V1: 0, V2: 0, C: 0 };
184
+ for (const chip of chips)
185
+ sums[chip.r] += chip.s;
186
+ return NEO_REGIONS.every((r) => sums[r] === sizes[r]);
187
+ }
188
+ /**
189
+ * Carve a driver's chip files out of the `.neo` regions.
190
+ *
191
+ * C chips come in even/odd pairs sharing one interleaved slice of the C region;
192
+ * every other region is a straight sequential split.
193
+ */
194
+ function carve(game, regions) {
195
+ const layout = layoutChips(game);
196
+ const cursor = { P: 0, S: 0, M: 0, V1: 0, V2: 0, C: 0 };
197
+ const out = [];
198
+ // Size matching normally guarantees the cursors land exactly on each region's
199
+ // end, but a forced `options.driver` can ask for a layout that overruns — and
200
+ // `subarray` would clamp rather than complain, leaving a short chip to fail CRC
201
+ // for a misleading reason.
202
+ const take = (region, length) => {
203
+ const start = cursor[region];
204
+ if (start + length > regions[region].length) {
205
+ throw new Error(`region ${region} is ${regions[region].length} bytes, layout needs at least ${start + length}`);
206
+ }
207
+ cursor[region] = start + length;
208
+ return regions[region].subarray(start, start + length);
209
+ };
210
+ for (let i = 0; i < layout.length; i++) {
211
+ const rom = layout[i];
212
+ if (rom.r !== 'C') {
213
+ const first = cursor[rom.r] === 0;
214
+ let data = take(rom.r, rom.s);
215
+ if (game.swapP && rom.r === 'P' && first) {
216
+ // On these carts the first program ROM has its two halves swapped; FBNeo
217
+ // undoes that after loading (neogeo.cpp, HARDWARE_SNK_SWAPP), so a .neo —
218
+ // which stores the cart's own order — has to be swapped back to match the
219
+ // dump's CRC.
220
+ const half = rom.s >> 1;
221
+ const swapped = new Uint8Array(rom.s);
222
+ swapped.set(data.subarray(half), 0);
223
+ swapped.set(data.subarray(0, half), rom.s - half);
224
+ data = swapped;
225
+ }
226
+ out.push({ name: rom.n, expected: rom.c, region: rom.r, data });
227
+ continue;
228
+ }
229
+ // Interleaved pair: this chip supplies the even bytes, the next one the odd.
230
+ const mate = layout[i + 1];
231
+ if (!mate || mate.r !== 'C' || mate.s !== rom.s) {
232
+ throw new Error(`unpaired C ROM "${rom.n}" — cannot de-interleave sprite data`);
233
+ }
234
+ const slice = take('C', rom.s * 2);
235
+ const even = new Uint8Array(rom.s);
236
+ const odd = new Uint8Array(rom.s);
237
+ for (let b = 0; b < rom.s; b++) {
238
+ even[b] = slice[2 * b];
239
+ odd[b] = slice[2 * b + 1];
240
+ }
241
+ out.push({ name: rom.n, expected: rom.c, region: 'C', data: even }, { name: mate.n, expected: mate.c, region: 'C', data: odd });
242
+ i++;
243
+ }
244
+ return out;
245
+ }
246
+ // ---------------------------------------------------------------------------
247
+ // CRC-32 and a minimal stored-zip writer
248
+ // ---------------------------------------------------------------------------
249
+ let crcTable = null;
250
+ function getCrcTable() {
251
+ if (crcTable)
252
+ return crcTable;
253
+ const table = new Uint32Array(256);
254
+ for (let i = 0; i < 256; i++) {
255
+ let c = i;
256
+ for (let k = 0; k < 8; k++)
257
+ c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
258
+ table[i] = c >>> 0;
259
+ }
260
+ return (crcTable = table);
261
+ }
262
+ /** CRC-32 (IEEE, the one zip and FBNeo's ROM tables use) of `bytes`. */
263
+ export function crc32(bytes) {
264
+ const table = getCrcTable();
265
+ let c = 0xffffffff;
266
+ for (let i = 0; i < bytes.length; i++)
267
+ c = table[(c ^ bytes[i]) & 0xff] ^ (c >>> 8);
268
+ return (c ^ 0xffffffff) >>> 0;
269
+ }
270
+ /** Lowercase 8-hex CRC-32, the form the romset dataset stores. */
271
+ export function crc32Hex(bytes) {
272
+ return crc32(bytes).toString(16).padStart(8, '0');
273
+ }
274
+ const LFH_SIG = 0x04034b50;
275
+ const CDH_SIG = 0x02014b50;
276
+ const EOCD_SIG = 0x06054b50;
277
+ const DOS_EPOCH_DATE = 0x0021; // 1980-01-01, the earliest date the format can express
278
+ /**
279
+ * Build a zip with every entry *stored* (method 0).
280
+ *
281
+ * FBNeo decompresses each chip straight into its ROM buffer, so deflating here
282
+ * would just be undone a moment later; storing keeps this synchronous (no
283
+ * `CompressionStream`) and costs one pass over the data.
284
+ */
285
+ export function zipStore(entries) {
286
+ const names = entries.map((e) => latin1(e.name));
287
+ const crcs = entries.map((e) => crc32(e.data));
288
+ let localSize = 0;
289
+ let centralSize = 0;
290
+ for (let i = 0; i < entries.length; i++) {
291
+ localSize += 30 + names[i].length + entries[i].data.length;
292
+ centralSize += 46 + names[i].length;
293
+ }
294
+ const out = new Uint8Array(localSize + centralSize + 22);
295
+ const view = new DataView(out.buffer);
296
+ const offsets = [];
297
+ let p = 0;
298
+ for (let i = 0; i < entries.length; i++) {
299
+ const { data } = entries[i];
300
+ const name = names[i];
301
+ offsets.push(p);
302
+ view.setUint32(p, LFH_SIG, true);
303
+ view.setUint16(p + 4, 10, true); // version needed: 1.0 (stored)
304
+ view.setUint16(p + 6, 0, true); // flags
305
+ view.setUint16(p + 8, 0, true); // method: stored
306
+ view.setUint16(p + 10, 0, true); // dos time
307
+ view.setUint16(p + 12, DOS_EPOCH_DATE, true);
308
+ view.setUint32(p + 14, crcs[i], true);
309
+ view.setUint32(p + 18, data.length, true); // compressed size
310
+ view.setUint32(p + 22, data.length, true); // uncompressed size
311
+ view.setUint16(p + 26, name.length, true);
312
+ view.setUint16(p + 28, 0, true); // extra length
313
+ out.set(name, p + 30);
314
+ out.set(data, p + 30 + name.length);
315
+ p += 30 + name.length + data.length;
316
+ }
317
+ const centralStart = p;
318
+ for (let i = 0; i < entries.length; i++) {
319
+ const { data } = entries[i];
320
+ const name = names[i];
321
+ view.setUint32(p, CDH_SIG, true);
322
+ view.setUint16(p + 4, 10, true); // version made by
323
+ view.setUint16(p + 6, 10, true); // version needed
324
+ view.setUint16(p + 8, 0, true); // flags
325
+ view.setUint16(p + 10, 0, true); // method: stored
326
+ view.setUint16(p + 12, 0, true); // dos time
327
+ view.setUint16(p + 14, DOS_EPOCH_DATE, true);
328
+ view.setUint32(p + 16, crcs[i], true);
329
+ view.setUint32(p + 20, data.length, true);
330
+ view.setUint32(p + 24, data.length, true);
331
+ view.setUint16(p + 28, name.length, true);
332
+ view.setUint16(p + 30, 0, true); // extra length
333
+ view.setUint16(p + 32, 0, true); // comment length
334
+ view.setUint16(p + 34, 0, true); // disk number
335
+ view.setUint16(p + 36, 0, true); // internal attrs
336
+ view.setUint32(p + 38, 0, true); // external attrs
337
+ view.setUint32(p + 42, offsets[i], true);
338
+ out.set(name, p + 46);
339
+ p += 46 + name.length;
340
+ }
341
+ view.setUint32(p, EOCD_SIG, true);
342
+ view.setUint16(p + 4, 0, true); // disk number
343
+ view.setUint16(p + 6, 0, true); // central directory start disk
344
+ view.setUint16(p + 8, entries.length, true);
345
+ view.setUint16(p + 10, entries.length, true);
346
+ view.setUint32(p + 12, centralSize, true);
347
+ view.setUint32(p + 16, centralStart, true);
348
+ view.setUint16(p + 20, 0, true); // comment length
349
+ return out;
350
+ }
351
+ function latin1(text) {
352
+ const out = new Uint8Array(text.length);
353
+ for (let i = 0; i < text.length; i++)
354
+ out[i] = text.charCodeAt(i) & 0xff;
355
+ return out;
356
+ }
357
+ //# sourceMappingURL=neo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"neo.js","sourceRoot":"","sources":["../../src/neo.ts"],"names":[],"mappings":"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"}
Binary file
@@ -0,0 +1 @@
1
+ {"version":3,"file":"romset.d.ts","sourceRoot":"","sources":["../../src/romset.ts"],"names":[],"mappings":"AAqBA,2FAA2F;AAC3F,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV;;;OAGG;IACH,CAAC,CAAC,EAAE,MAAM,CAAC;IACX;;;;OAIG;IACH,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,uFAAuF;AACvF,MAAM,WAAW,UAAU;IACzB,8DAA8D;IAC9D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AASD,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACnC;AAED,wDAAwD;AACxD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,+DAA+D;AAC/D,MAAM,WAAW,WAAW;IAC1B,yFAAyF;IACzF,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,EAAE,CAyB7D;AAuBD;;;GAGG;AACH,qBAAa,WAAW;IACtB,0CAA0C;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IACrD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2E;gBAErF,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC;IAI3C,GAAG,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAc5B;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,WAAW,EAAE;CAqC5C;AAED,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,cAAmB,GAC3B,WAAW,GAAG,IAAI,CAMpB"}
Binary file
@@ -0,0 +1 @@
1
+ {"version":3,"file":"romset.js","sourceRoot":"","sources":["../../src/romset.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,11 @@
1
1
  {
2
2
  "name": "@wasm-gaming/fbneo-wasm",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "FBNeo (FinalBurn Neo arcade emulator) compiled to WebAssembly via Emscripten, with a JS SDK conforming to the wasm-gaming engine contract.",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/wasm-gaming/fbneo-wasm.git"
8
+ },
5
9
  "type": "module",
6
10
  "main": "./dist/fbneo/fbneo.sdk.js",
7
11
  "types": "./dist/fbneo/fbneo.sdk.d.ts",
@@ -14,14 +18,26 @@
14
18
  "types": "./dist/fbneo/fbneo.options.d.ts",
15
19
  "import": "./dist/fbneo/fbneo.options.js"
16
20
  },
21
+ "./romset": {
22
+ "types": "./dist/fbneo/romset.d.ts",
23
+ "import": "./dist/fbneo/romset.js"
24
+ },
25
+ "./neo": {
26
+ "types": "./dist/fbneo/neo.d.ts",
27
+ "import": "./dist/fbneo/neo.js"
28
+ },
29
+ "./romsets/*": "./data/romsets/*",
17
30
  "./manifest": "./dist/manifest.json"
18
31
  },
19
32
  "files": [
20
33
  "dist/fbneo/",
21
34
  "dist/manifest.json",
35
+ "data/romsets/",
22
36
  "src/fbneo.manifest.ts",
23
37
  "src/fbneo.options.ts",
24
38
  "src/fbneo.sdk.ts",
39
+ "src/romset.ts",
40
+ "src/neo.ts",
25
41
  "README.md"
26
42
  ],
27
43
  "comment:scripts": "Build logic lives in the Makefile, not here (make build / build-sdk / build-wasm / preview).",