@wasm-gaming/mgba-wasm 0.1.0
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 +203 -0
- package/dist/manifest.json +146 -0
- package/dist/mgba/mgba.config.d.ts +41 -0
- package/dist/mgba/mgba.config.d.ts.map +1 -0
- package/dist/mgba/mgba.config.js +93 -0
- package/dist/mgba/mgba.config.js.map +1 -0
- package/dist/mgba/mgba.js +2 -0
- package/dist/mgba/mgba.manifest.d.ts +4 -0
- package/dist/mgba/mgba.manifest.d.ts.map +1 -0
- package/dist/mgba/mgba.manifest.js +38 -0
- package/dist/mgba/mgba.manifest.js.map +1 -0
- package/dist/mgba/mgba.options.d.ts +171 -0
- package/dist/mgba/mgba.options.d.ts.map +1 -0
- package/dist/mgba/mgba.options.js +273 -0
- package/dist/mgba/mgba.options.js.map +1 -0
- package/dist/mgba/mgba.sdk.d.ts +24 -0
- package/dist/mgba/mgba.sdk.d.ts.map +1 -0
- package/dist/mgba/mgba.sdk.js +846 -0
- package/dist/mgba/mgba.sdk.js.map +1 -0
- package/dist/mgba/mgba.wasm +0 -0
- package/dist/mgba/mgba.zip.d.ts +36 -0
- package/dist/mgba/mgba.zip.d.ts.map +1 -0
- package/dist/mgba/mgba.zip.js +105 -0
- package/dist/mgba/mgba.zip.js.map +1 -0
- package/package.json +53 -0
- package/src/mgba.config.ts +145 -0
- package/src/mgba.manifest.ts +43 -0
- package/src/mgba.options.ts +456 -0
- package/src/mgba.sdk.ts +967 -0
- package/src/mgba.zip.ts +140 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mgba.sdk.js","sourceRoot":"","sources":["../../src/mgba.sdk.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A zip reader just large enough to pull a ROM out of an archive.
|
|
3
|
+
*
|
|
4
|
+
* mGBA can read zips when it is built against libzip or minizip, but linking
|
|
5
|
+
* either into an Emscripten build means vendoring a C dependency for something
|
|
6
|
+
* the platform already does: `DecompressionStream('deflate-raw')` is in every
|
|
7
|
+
* browser this SDK targets and in Node 18+. So the container is parsed here —
|
|
8
|
+
* end-of-central-directory, then the central directory — and the one entry that
|
|
9
|
+
* looks like a ROM is inflated.
|
|
10
|
+
*
|
|
11
|
+
* Deliberately partial: no encryption, no zip64, no multi-disk. Those do not
|
|
12
|
+
* show up around cartridge dumps, and failing loudly beats half-supporting them.
|
|
13
|
+
*/
|
|
14
|
+
export interface ZipEntry {
|
|
15
|
+
name: string;
|
|
16
|
+
compression: number;
|
|
17
|
+
compressedSize: number;
|
|
18
|
+
uncompressedSize: number;
|
|
19
|
+
localHeaderOffset: number;
|
|
20
|
+
}
|
|
21
|
+
/** A zip always starts with a local file header signature. */
|
|
22
|
+
export declare function isZip(bytes: Uint8Array): boolean;
|
|
23
|
+
export declare function listEntries(bytes: Uint8Array): ZipEntry[];
|
|
24
|
+
export declare function readEntry(bytes: Uint8Array, entry: ZipEntry): Promise<Uint8Array>;
|
|
25
|
+
/**
|
|
26
|
+
* Returns the ROM inside a zip, or the input unchanged when it is not one.
|
|
27
|
+
*
|
|
28
|
+
* Cartridge archives are almost always a single ROM plus the odd text file, so
|
|
29
|
+
* the pick is "the first entry with an extension mGBA knows"; if none of them
|
|
30
|
+
* carries a useful extension, the largest entry wins, which is what a ROM is.
|
|
31
|
+
*/
|
|
32
|
+
export declare function extractRom(bytes: Uint8Array, accept: readonly string[]): Promise<{
|
|
33
|
+
bytes: Uint8Array;
|
|
34
|
+
name?: string;
|
|
35
|
+
}>;
|
|
36
|
+
//# sourceMappingURL=mgba.zip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mgba.zip.d.ts","sourceRoot":"","sources":["../../src/mgba.zip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,8DAA8D;AAC9D,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAQhD;AAWD,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,EAAE,CA8BzD;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CA4BvF;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,SAAS,MAAM,EAAE,GACxB,OAAO,CAAC;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkB/C"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A zip reader just large enough to pull a ROM out of an archive.
|
|
3
|
+
*
|
|
4
|
+
* mGBA can read zips when it is built against libzip or minizip, but linking
|
|
5
|
+
* either into an Emscripten build means vendoring a C dependency for something
|
|
6
|
+
* the platform already does: `DecompressionStream('deflate-raw')` is in every
|
|
7
|
+
* browser this SDK targets and in Node 18+. So the container is parsed here —
|
|
8
|
+
* end-of-central-directory, then the central directory — and the one entry that
|
|
9
|
+
* looks like a ROM is inflated.
|
|
10
|
+
*
|
|
11
|
+
* Deliberately partial: no encryption, no zip64, no multi-disk. Those do not
|
|
12
|
+
* show up around cartridge dumps, and failing loudly beats half-supporting them.
|
|
13
|
+
*/
|
|
14
|
+
const SIG_EOCD = 0x06054b50;
|
|
15
|
+
const SIG_CENTRAL = 0x02014b50;
|
|
16
|
+
const SIG_LOCAL = 0x04034b50;
|
|
17
|
+
const STORED = 0;
|
|
18
|
+
const DEFLATED = 8;
|
|
19
|
+
/** A zip always starts with a local file header signature. */
|
|
20
|
+
export function isZip(bytes) {
|
|
21
|
+
return (bytes.length > 4 &&
|
|
22
|
+
bytes[0] === 0x50 &&
|
|
23
|
+
bytes[1] === 0x4b &&
|
|
24
|
+
bytes[2] === 0x03 &&
|
|
25
|
+
bytes[3] === 0x04);
|
|
26
|
+
}
|
|
27
|
+
function findEocd(view) {
|
|
28
|
+
// The EOCD is last, but a trailing comment of up to 64 KiB may follow it.
|
|
29
|
+
const min = Math.max(0, view.byteLength - 0x10000 - 22);
|
|
30
|
+
for (let i = view.byteLength - 22; i >= min; i--) {
|
|
31
|
+
if (view.getUint32(i, true) === SIG_EOCD)
|
|
32
|
+
return i;
|
|
33
|
+
}
|
|
34
|
+
return -1;
|
|
35
|
+
}
|
|
36
|
+
export function listEntries(bytes) {
|
|
37
|
+
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
38
|
+
const eocd = findEocd(view);
|
|
39
|
+
if (eocd < 0)
|
|
40
|
+
throw new Error('mgba: not a zip archive (no end-of-central-directory record)');
|
|
41
|
+
const count = view.getUint16(eocd + 10, true);
|
|
42
|
+
let offset = view.getUint32(eocd + 16, true);
|
|
43
|
+
const decoder = new TextDecoder();
|
|
44
|
+
const entries = [];
|
|
45
|
+
for (let i = 0; i < count; i++) {
|
|
46
|
+
if (view.getUint32(offset, true) !== SIG_CENTRAL)
|
|
47
|
+
break;
|
|
48
|
+
const nameLength = view.getUint16(offset + 28, true);
|
|
49
|
+
const extraLength = view.getUint16(offset + 30, true);
|
|
50
|
+
const commentLength = view.getUint16(offset + 32, true);
|
|
51
|
+
entries.push({
|
|
52
|
+
name: decoder.decode(bytes.subarray(offset + 46, offset + 46 + nameLength)),
|
|
53
|
+
compression: view.getUint16(offset + 10, true),
|
|
54
|
+
compressedSize: view.getUint32(offset + 20, true),
|
|
55
|
+
uncompressedSize: view.getUint32(offset + 24, true),
|
|
56
|
+
localHeaderOffset: view.getUint32(offset + 42, true),
|
|
57
|
+
});
|
|
58
|
+
offset += 46 + nameLength + extraLength + commentLength;
|
|
59
|
+
}
|
|
60
|
+
return entries;
|
|
61
|
+
}
|
|
62
|
+
export async function readEntry(bytes, entry) {
|
|
63
|
+
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
64
|
+
const header = entry.localHeaderOffset;
|
|
65
|
+
if (view.getUint32(header, true) !== SIG_LOCAL) {
|
|
66
|
+
throw new Error(`mgba: corrupt zip entry "${entry.name}"`);
|
|
67
|
+
}
|
|
68
|
+
// The local header repeats the name and extra field with its own lengths,
|
|
69
|
+
// which are the ones that count for locating the data.
|
|
70
|
+
const nameLength = view.getUint16(header + 26, true);
|
|
71
|
+
const extraLength = view.getUint16(header + 28, true);
|
|
72
|
+
const start = header + 30 + nameLength + extraLength;
|
|
73
|
+
const data = bytes.subarray(start, start + entry.compressedSize);
|
|
74
|
+
if (entry.compression === STORED)
|
|
75
|
+
return data.slice();
|
|
76
|
+
if (entry.compression !== DEFLATED) {
|
|
77
|
+
throw new Error(`mgba: zip entry "${entry.name}" uses an unsupported compression method (${entry.compression})`);
|
|
78
|
+
}
|
|
79
|
+
if (typeof DecompressionStream === 'undefined') {
|
|
80
|
+
throw new Error('mgba: this environment cannot inflate zip entries (no DecompressionStream)');
|
|
81
|
+
}
|
|
82
|
+
const stream = new Blob([data])
|
|
83
|
+
.stream()
|
|
84
|
+
.pipeThrough(new DecompressionStream('deflate-raw'));
|
|
85
|
+
return new Uint8Array(await new Response(stream).arrayBuffer());
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Returns the ROM inside a zip, or the input unchanged when it is not one.
|
|
89
|
+
*
|
|
90
|
+
* Cartridge archives are almost always a single ROM plus the odd text file, so
|
|
91
|
+
* the pick is "the first entry with an extension mGBA knows"; if none of them
|
|
92
|
+
* carries a useful extension, the largest entry wins, which is what a ROM is.
|
|
93
|
+
*/
|
|
94
|
+
export async function extractRom(bytes, accept) {
|
|
95
|
+
if (!isZip(bytes))
|
|
96
|
+
return { bytes };
|
|
97
|
+
const entries = listEntries(bytes).filter((entry) => !entry.name.endsWith('/') && entry.uncompressedSize > 0);
|
|
98
|
+
if (!entries.length)
|
|
99
|
+
throw new Error('mgba: the zip archive contains no files');
|
|
100
|
+
const byExtension = entries.find((entry) => accept.some((ext) => entry.name.toLowerCase().endsWith(ext)));
|
|
101
|
+
const chosen = byExtension ??
|
|
102
|
+
entries.reduce((largest, entry) => entry.uncompressedSize > largest.uncompressedSize ? entry : largest);
|
|
103
|
+
return { bytes: await readEntry(bytes, chosen), name: chosen.name };
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=mgba.zip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mgba.zip.js","sourceRoot":"","sources":["../../src/mgba.zip.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@wasm-gaming/mgba-wasm",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "mGBA (Game Boy Advance / Game Boy / Game Boy Color 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/mGBA-wasm.git"
|
|
8
|
+
},
|
|
9
|
+
"bugs": {
|
|
10
|
+
"url": "https://github.com/wasm-gaming/mGBA-wasm/issues"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/wasm-gaming/mGBA-wasm#readme",
|
|
13
|
+
"type": "module",
|
|
14
|
+
"main": "./dist/mgba/mgba.sdk.js",
|
|
15
|
+
"types": "./dist/mgba/mgba.sdk.d.ts",
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"types": "./dist/mgba/mgba.sdk.d.ts",
|
|
19
|
+
"import": "./dist/mgba/mgba.sdk.js"
|
|
20
|
+
},
|
|
21
|
+
"./options": {
|
|
22
|
+
"types": "./dist/mgba/mgba.options.d.ts",
|
|
23
|
+
"import": "./dist/mgba/mgba.options.js"
|
|
24
|
+
},
|
|
25
|
+
"./manifest": "./dist/manifest.json"
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"dist/mgba/",
|
|
29
|
+
"dist/manifest.json",
|
|
30
|
+
"src/mgba.config.ts",
|
|
31
|
+
"src/mgba.manifest.ts",
|
|
32
|
+
"src/mgba.options.ts",
|
|
33
|
+
"src/mgba.sdk.ts",
|
|
34
|
+
"src/mgba.zip.ts",
|
|
35
|
+
"README.md"
|
|
36
|
+
],
|
|
37
|
+
"comment:scripts": "Build logic lives in the Makefile, not here (make build / build-sdk / build-wasm / preview).",
|
|
38
|
+
"scripts": {},
|
|
39
|
+
"peerDependencies": {
|
|
40
|
+
"@wasm-gaming/engine-specs": ">=0.2.6"
|
|
41
|
+
},
|
|
42
|
+
"peerDependenciesMeta": {
|
|
43
|
+
"@wasm-gaming/engine-specs": {
|
|
44
|
+
"optional": true
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@wasm-gaming/engine-specs": "^0.2.6",
|
|
49
|
+
"typescript": "^5.5.0"
|
|
50
|
+
},
|
|
51
|
+
"engineContract": "https://github.com/wasm-gaming/engine-specs",
|
|
52
|
+
"license": "MPL-2.0"
|
|
53
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import {
|
|
2
|
+
coerceOptionValue,
|
|
3
|
+
mgbaOption,
|
|
4
|
+
MGBA_ENGINE_OPTIONS,
|
|
5
|
+
type MgbaOptionKey,
|
|
6
|
+
type MgbaOptionValue,
|
|
7
|
+
} from './mgba.options.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Pushes a value into the running emulator: an `mCoreConfig` write followed by
|
|
11
|
+
* `reloadConfigOption()`, a canvas style change, a gain node — whatever that
|
|
12
|
+
* option means. Called after the value has been validated and recorded.
|
|
13
|
+
*/
|
|
14
|
+
export type MgbaApplier = (value: MgbaOptionValue) => void;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* The appliers the SDK installs for the build it actually loaded. An option
|
|
18
|
+
* with no applier is reported as unsupported and disappears from the menu,
|
|
19
|
+
* which is what keeps this package usable against an `mgba.wasm` built before
|
|
20
|
+
* a given shim setter existed.
|
|
21
|
+
*/
|
|
22
|
+
export type MgbaAppliers = Partial<Record<MgbaOptionKey, MgbaApplier>>;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Typed façade over the emulator's live settings.
|
|
26
|
+
*
|
|
27
|
+
* mGBA does own a configuration object — the `mCoreConfig` embedded in every
|
|
28
|
+
* `mCore` — but it is C-side and the SDK keeps the rest (canvas, audio graph,
|
|
29
|
+
* frame blending) in JS, so `state` is the record both this façade and the
|
|
30
|
+
* running SDK read from, and every write goes through the matching applier.
|
|
31
|
+
*/
|
|
32
|
+
export interface MgbaConfig {
|
|
33
|
+
supports(key: string): boolean;
|
|
34
|
+
read(key: string): MgbaOptionValue | undefined;
|
|
35
|
+
/** Returns `false` when the key is unknown, unsupported, or the value invalid. */
|
|
36
|
+
write(key: string, value: MgbaOptionValue): boolean;
|
|
37
|
+
/** Current value of every supported option. */
|
|
38
|
+
values(): Record<string, MgbaOptionValue>;
|
|
39
|
+
/** Restores this package's declared defaults. */
|
|
40
|
+
restoreDefaults(): void;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function bindConfig(
|
|
44
|
+
state: Record<string, MgbaOptionValue>,
|
|
45
|
+
appliers: MgbaAppliers,
|
|
46
|
+
): MgbaConfig {
|
|
47
|
+
const applierFor = (key: string): MgbaApplier | undefined =>
|
|
48
|
+
appliers[key as MgbaOptionKey];
|
|
49
|
+
|
|
50
|
+
const supports = (key: string): boolean =>
|
|
51
|
+
Boolean(mgbaOption(key)) && applierFor(key) !== undefined;
|
|
52
|
+
|
|
53
|
+
const read = (key: string): MgbaOptionValue | undefined =>
|
|
54
|
+
mgbaOption(key) ? state[key] : undefined;
|
|
55
|
+
|
|
56
|
+
const write = (key: string, value: MgbaOptionValue): boolean => {
|
|
57
|
+
const option = mgbaOption(key);
|
|
58
|
+
const apply = applierFor(key);
|
|
59
|
+
if (!option || !apply) return false;
|
|
60
|
+
|
|
61
|
+
const next = coerceOptionValue(option, value);
|
|
62
|
+
if (next === undefined) return false;
|
|
63
|
+
|
|
64
|
+
state[key] = next;
|
|
65
|
+
apply(next);
|
|
66
|
+
return true;
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
return {
|
|
70
|
+
supports,
|
|
71
|
+
read,
|
|
72
|
+
write,
|
|
73
|
+
values() {
|
|
74
|
+
const snapshot: Record<string, MgbaOptionValue> = {};
|
|
75
|
+
for (const option of MGBA_ENGINE_OPTIONS) {
|
|
76
|
+
if (supports(option.key)) snapshot[option.key] = state[option.key];
|
|
77
|
+
}
|
|
78
|
+
return snapshot;
|
|
79
|
+
},
|
|
80
|
+
restoreDefaults() {
|
|
81
|
+
for (const option of MGBA_ENGINE_OPTIONS) {
|
|
82
|
+
write(option.key, option.default);
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** Per-namespace persistence for menu tweaks, so they survive a page reload. */
|
|
89
|
+
export interface MgbaSettingsStore {
|
|
90
|
+
load(): Record<string, MgbaOptionValue>;
|
|
91
|
+
save(values: Record<string, MgbaOptionValue>): void;
|
|
92
|
+
clear(): void;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export function createSettingsStore(namespace: string): MgbaSettingsStore {
|
|
96
|
+
const storageKey = `mgba:options:${namespace}`;
|
|
97
|
+
|
|
98
|
+
// Storage access throws outright in some privacy modes, so every call is
|
|
99
|
+
// guarded — losing persistence must never take the emulator down with it.
|
|
100
|
+
const storage = (): Storage | null => {
|
|
101
|
+
try {
|
|
102
|
+
return typeof localStorage === 'undefined' ? null : localStorage;
|
|
103
|
+
} catch {
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
return {
|
|
109
|
+
load() {
|
|
110
|
+
try {
|
|
111
|
+
const raw = storage()?.getItem(storageKey);
|
|
112
|
+
if (!raw) return {};
|
|
113
|
+
const parsed: unknown = JSON.parse(raw);
|
|
114
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) return {};
|
|
115
|
+
|
|
116
|
+
// Anything the catalog no longer recognizes is dropped rather than fed
|
|
117
|
+
// back into the core: this is user-writable storage.
|
|
118
|
+
const values: Record<string, MgbaOptionValue> = {};
|
|
119
|
+
for (const [key, value] of Object.entries(parsed as Record<string, unknown>)) {
|
|
120
|
+
const option = mgbaOption(key);
|
|
121
|
+
if (!option) continue;
|
|
122
|
+
const coerced = coerceOptionValue(option, value);
|
|
123
|
+
if (coerced !== undefined) values[key] = coerced;
|
|
124
|
+
}
|
|
125
|
+
return values;
|
|
126
|
+
} catch {
|
|
127
|
+
return {};
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
save(values) {
|
|
131
|
+
try {
|
|
132
|
+
storage()?.setItem(storageKey, JSON.stringify(values));
|
|
133
|
+
} catch {
|
|
134
|
+
// persistence is best-effort
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
clear() {
|
|
138
|
+
try {
|
|
139
|
+
storage()?.removeItem(storageKey);
|
|
140
|
+
} catch {
|
|
141
|
+
// persistence is best-effort
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { EngineManifest } from '@wasm-gaming/engine-specs';
|
|
2
|
+
import { MGBA_OPTIONS_SCHEMA } from './mgba.options.js';
|
|
3
|
+
|
|
4
|
+
export const manifest: EngineManifest = {
|
|
5
|
+
id: 'mgba',
|
|
6
|
+
version: '0.1.0',
|
|
7
|
+
name: 'mGBA (WebAssembly)',
|
|
8
|
+
description:
|
|
9
|
+
'mGBA — the accuracy-focused Game Boy Advance emulator, which also runs Game Boy and Game Boy Color — compiled to WebAssembly. Loads .gba/.gb/.gbc cartridge images; the GBA BIOS is optional, since mGBA ships a high-level replacement.',
|
|
10
|
+
artifacts: {
|
|
11
|
+
wasm: 'mgba/mgba.wasm',
|
|
12
|
+
js: 'mgba/mgba.js',
|
|
13
|
+
},
|
|
14
|
+
assets: [
|
|
15
|
+
{
|
|
16
|
+
key: 'rom',
|
|
17
|
+
mountPath: '/rom.gba',
|
|
18
|
+
required: true,
|
|
19
|
+
accept: ['.gba', '.gb', '.gbc', '.sgb'],
|
|
20
|
+
description:
|
|
21
|
+
'Game Boy Advance, Game Boy or Game Boy Color cartridge image. The right core is picked from the image itself, so the extension only has to be one mGBA recognizes.',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
key: 'bios',
|
|
25
|
+
mountPath: '/bios.bin',
|
|
26
|
+
required: false,
|
|
27
|
+
accept: ['.bin', '.rom'],
|
|
28
|
+
description:
|
|
29
|
+
'Optional GBA BIOS dump (16 KiB). mGBA has a high-level replacement that runs virtually everything, so this is only needed for the boot animation and the handful of titles that read the BIOS directly.',
|
|
30
|
+
validate: { bytes: 16384 },
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
input: 'mgba',
|
|
34
|
+
// The GBA LCD. The Game Boy cores render 160x144 into the same buffer, and
|
|
35
|
+
// the SDK follows `currentVideoSize()` rather than these numbers at runtime.
|
|
36
|
+
video: { baseWidth: 240, baseHeight: 160, aspect: '3:2' },
|
|
37
|
+
options: MGBA_OPTIONS_SCHEMA,
|
|
38
|
+
// coreSelectable: one package, two cores (GBA and GB) — the host may offer
|
|
39
|
+
// the choice, and `options.system` is where it lands.
|
|
40
|
+
capabilities: { saveStates: true, sram: true, coreSelectable: true },
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export default manifest;
|