@gba-kit/gba-node 0.1.0 → 0.2.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
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# @gba-kit/gba-node
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/@gba-kit/gba-node)
|
|
4
|
+
|
|
3
5
|
Headless GBA emulator runtime for Node.js. Load a ROM, execute JavaScript scripts against the emulator, and capture screenshots, memory snapshots, and save states to disk.
|
|
4
6
|
|
|
5
7
|
## Install
|
|
@@ -10,6 +10,11 @@ export interface HeadlessRuntimeOptions {
|
|
|
10
10
|
loadSavePath?: string;
|
|
11
11
|
outputDir: string;
|
|
12
12
|
logFn: (message: string) => void;
|
|
13
|
+
/**
|
|
14
|
+
* Optional path to a (`-g`-built) sidecar ELF. Enables source-level scripting
|
|
15
|
+
* (pcToSource, symbolToAddress, watchSymbol, and source-annotated watch hits).
|
|
16
|
+
*/
|
|
17
|
+
elfPath?: string;
|
|
13
18
|
}
|
|
14
19
|
export declare class HeadlessRuntime {
|
|
15
20
|
#private;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headless-runtime.d.ts","sourceRoot":"","sources":["../src/headless-runtime.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAOjF,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"headless-runtime.d.ts","sourceRoot":"","sources":["../src/headless-runtime.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAOjF,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,eAAe;;gBAMd,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM;IAc5D,IAAI,MAAM,IAAI,eAAe,CAE5B;IAED,IAAI,GAAG,IAAI,GAAG,CAEb;IAED,IAAI,IAAI,IAAI,aAAa,CAExB;WAEY,MAAM,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC;IA0C9E,mDAAmD;IAC7C,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0E3E,iCAAiC;IAC3B,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;CAU3C"}
|
package/dist/headless-runtime.js
CHANGED
|
@@ -57,7 +57,13 @@ export class HeadlessRuntime {
|
|
|
57
57
|
const snapshot = deserializeSnapshot(JSON.parse(saveData));
|
|
58
58
|
gba.deserialize(snapshot);
|
|
59
59
|
}
|
|
60
|
-
|
|
60
|
+
const runtime = new HeadlessRuntime(gba, host, options.outputDir);
|
|
61
|
+
// Load debug info (ELF symbols + DWARF) if provided.
|
|
62
|
+
if (options.elfPath) {
|
|
63
|
+
const elfData = await fs.readFile(options.elfPath);
|
|
64
|
+
runtime.engine.loadDebugInfo(new Uint8Array(elfData));
|
|
65
|
+
}
|
|
66
|
+
return runtime;
|
|
61
67
|
}
|
|
62
68
|
/** Execute a script string against the emulator */
|
|
63
69
|
async executeScript(scriptCode, scriptPath) {
|
|
@@ -91,6 +97,15 @@ export class HeadlessRuntime {
|
|
|
91
97
|
onFrame: (cb) => engine.onFrame(cb),
|
|
92
98
|
searchMemory: (options) => engine.searchMemory(options),
|
|
93
99
|
filterMemory: (addresses, options) => engine.filterMemory(addresses, options),
|
|
100
|
+
watchMemory: (options) => engine.watchMemory(options),
|
|
101
|
+
watchSymbol: (name, options) => engine.watchSymbol(name, options),
|
|
102
|
+
clearWatchpoints: () => engine.clearWatchpoints(),
|
|
103
|
+
// Debug info (ELF symbols + DWARF) — available when created with `elfPath`.
|
|
104
|
+
hasDebugInfo: () => engine.hasDebugInfo,
|
|
105
|
+
pcToSource: (pc) => engine.pcToSource(pc),
|
|
106
|
+
pcToFunction: (pc) => engine.pcToFunction(pc),
|
|
107
|
+
addressToSymbol: (addr) => engine.addressToSymbol(addr),
|
|
108
|
+
symbolToAddress: (name) => engine.symbolToAddress(name),
|
|
94
109
|
// Save states
|
|
95
110
|
saveState: (options) => engine.saveState(options),
|
|
96
111
|
loadState: (path) => engine.loadState(path),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headless-runtime.js","sourceRoot":"","sources":["../src/headless-runtime.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,GAAG,EAAE,eAAe,EAAsB,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"headless-runtime.js","sourceRoot":"","sources":["../src/headless-runtime.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,GAAG,EAAE,eAAe,EAAsB,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAclF,MAAM,OAAO,eAAe;IACjB,IAAI,CAAM;IACV,OAAO,CAAkB;IACzB,KAAK,CAAgB;IACrB,UAAU,CAAS;IAE5B,YAAY,GAAQ,EAAE,IAAmB,EAAE,SAAiB;QAC1D,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAE9C,uCAAuC;QACvC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QAClD,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAA+B;QACjD,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAErE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;QAEtB,WAAW;QACX,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACnD,GAAG,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAErC,4CAA4C;QAC5C,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;QAEvB,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW;QACjC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;QAE/B,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW;QACjC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;QAE/B,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc;QACpC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;QAE/B,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,oCAAoC;QACrD,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,kBAAkB;QAElD,8BAA8B;QAC9B,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAClE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC3D,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAElE,qDAAqD;QACrD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACnD,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,mDAAmD;IACnD,KAAK,CAAC,aAAa,CAAC,UAAkB,EAAE,UAAmB;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAE5B,wDAAwD;QACxD,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC;YAC/B,SAAS;YACT,IAAI,EAAE,CAAC,SAAiD,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;YAEnF,QAAQ;YACR,KAAK,EAAE,CAAC,OAAgD,EAAE,OAAiD,EAAE,EAAE,CAC7G,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;YAChC,OAAO,EAAE,CAAC,MAAiD,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YACtF,aAAa,EAAE,CAAC,MAAuD,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;YAExG,uBAAuB;YACvB,cAAc,EAAE,CAAC,OAAyD,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC;YAC7G,kBAAkB,EAAE,CAAC,OAA6D,EAAE,EAAE,CACpF,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC;YACpC,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE;YACzC,SAAS,EAAE,CAAC,OAAe,EAAE,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;YACjF,MAAM,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YACnD,MAAM,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YACnD,WAAW,EAAE,CAAC,OAAe,EAAE,KAAc,EAAE,IAAsB,EAAE,EAAE,CACvE,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;YAC1C,mBAAmB,EAAE,CAAC,OAAe,EAAE,IAAsB,EAAE,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC;YAC3G,UAAU,EAAE,CAAC,OAAe,EAAE,MAAe,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;YACpF,QAAQ,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;YACzD,eAAe,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc,EAAE,EAAE,CACvE,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC;YAC7C,MAAM,EAAE,CAAC,OAAiD,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YACrF,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE;YAC/B,YAAY,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC;YAC3D,aAAa,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;YAC7D,kBAAkB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE;YACrD,UAAU,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACzF,OAAO,EAAE,CAAC,EAAoC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACrE,YAAY,EAAE,CAAC,OAAuD,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC;YACvG,YAAY,EAAE,CAAC,SAAmB,EAAE,OAAuD,EAAE,EAAE,CAC7F,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC;YACzC,WAAW,EAAE,CAAC,OAAsD,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;YACpG,WAAW,EAAE,CAAC,IAAY,EAAE,OAAuD,EAAE,EAAE,CACrF,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC;YACnC,gBAAgB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,EAAE;YAEjD,4EAA4E;YAC5E,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY;YACvC,UAAU,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YACjD,YAAY,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YACrD,eAAe,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;YAC/D,eAAe,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;YAE/D,cAAc;YACd,SAAS,EAAE,CAAC,OAAoD,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;YAC9F,SAAS,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;YAEnD,aAAa;YACb,MAAM,EAAE,CAAC,SAAmD,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;YAEzF,UAAU;YACV,OAAO,EAAE;gBACP,GAAG,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACxE;SACF,CAAC,CAAC;QAEH,iDAAiD;QACjD,MAAM,WAAW,GAAG,mBAAmB,UAAU,QAAQ,CAAC;QAE1D,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE;YACxC,QAAQ,EAAE,UAAU,IAAI,UAAU;SACnC,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,iCAAiC;IACjC,KAAK,CAAC,mBAAmB;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAEvC,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACpD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QAE/C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QAC/D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gba-kit/gba-node",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Headless Node.js runtime for scripted GBA emulation",
|
|
5
5
|
"author": "macabeus",
|
|
6
6
|
"type": "module",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
],
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"fast-png": "^8.0.0",
|
|
35
|
-
"@gba-kit/
|
|
36
|
-
"@gba-kit/
|
|
35
|
+
"@gba-kit/gba-emulator": "0.2.0",
|
|
36
|
+
"@gba-kit/arm-emulator": "0.2.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/node": "^25.5.0",
|