From c3bddfba1a2ca217401a01ee2fc2a67eee108eab Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Fri, 17 Jul 2026 17:28:46 +0800 Subject: [PATCH 1/6] =?UTF-8?q?feat(static):=20Pocket=20Static=20core=20?= =?UTF-8?q?=E2=80=94=20spec,=20ref=20VM,=20script=20compiler,=20GBA=20runt?= =?UTF-8?q?ime=20E2E=20green?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - spec/isa.ts single source of truth: stack-VM ISA, text tokens, debug block, per-target table; gen-c.ts emits runtime/gen/spec_gen.h - vm/ref.ts reference interpreter + strict semantics tests (14) - compiler: real expression compiler over generator ASTs (locals, control flow, short-circuit, switch, CALL subroutines, macro inlining with static binding + for...of unroll, FMT text interpolation) (23 tests) - rpg category: DSL, model builder, linker, portable C engine (vm.c/rpg.c) - GBA: packager + HAL + libmgba harness; smoke-game E2E 35/35 Co-Authored-By: Claude Fable 5 --- static/.clangd | 5 + static/.gitignore | 3 + static/DESIGN.md | 341 +++++++++ static/bun.lock | 18 + static/compiler/assets.ts | 237 ++++++ static/compiler/bake-font.ts | 51 ++ static/compiler/compile-scripts.ts | 26 + static/compiler/context.ts | 103 +++ static/compiler/evaluate.ts | 90 +++ static/compiler/font.gen.ts | 102 +++ static/compiler/index.ts | 55 ++ static/compiler/link.ts | 151 ++++ static/compiler/model.ts | 241 ++++++ static/compiler/script.ts | 1082 +++++++++++++++++++++++++++ static/compiler/sites.ts | 70 ++ static/compiler/targets/gb.ts | 6 + static/compiler/targets/gba.ts | 158 ++++ static/compiler/targets/nes.ts | 6 + static/compiler/text.ts | 140 ++++ static/package.json | 29 + static/rpg/dsl.ts | 252 +++++++ static/runtime/core/hal.h | 72 ++ static/runtime/core/rpg.c | 591 +++++++++++++++ static/runtime/core/vm.c | 253 +++++++ static/runtime/core/vm.h | 43 ++ static/runtime/gba/crt0.s | 48 ++ static/runtime/gba/gba.h | 38 + static/runtime/gba/gba.ld | 34 + static/runtime/gba/hal_gba.c | 180 +++++ static/runtime/gen/spec_gen.h | 188 +++++ static/spec/gen-c.ts | 159 ++++ static/spec/isa.ts | 390 ++++++++++ static/spec/rpg.ts | 168 +++++ static/test/e2e.ts | 266 +++++++ static/test/harness/build.ts | 13 + static/test/harness/mgba_runner.c | 128 ++++ static/test/pipeline.test.ts | 97 +++ static/test/ppm2png.ts | 67 ++ static/test/script-compiler.test.ts | 369 +++++++++ static/test/smoke/game.ts | 200 +++++ static/test/vm.test.ts | 247 ++++++ static/vm/asm.ts | 124 +++ static/vm/ref.ts | 359 +++++++++ static/vm/rpg-host.ts | 115 +++ 44 files changed, 7315 insertions(+) create mode 100644 static/.clangd create mode 100644 static/.gitignore create mode 100644 static/DESIGN.md create mode 100644 static/bun.lock create mode 100644 static/compiler/assets.ts create mode 100644 static/compiler/bake-font.ts create mode 100644 static/compiler/compile-scripts.ts create mode 100644 static/compiler/context.ts create mode 100644 static/compiler/evaluate.ts create mode 100644 static/compiler/font.gen.ts create mode 100644 static/compiler/index.ts create mode 100644 static/compiler/link.ts create mode 100644 static/compiler/model.ts create mode 100644 static/compiler/script.ts create mode 100644 static/compiler/sites.ts create mode 100644 static/compiler/targets/gb.ts create mode 100644 static/compiler/targets/gba.ts create mode 100644 static/compiler/targets/nes.ts create mode 100644 static/compiler/text.ts create mode 100644 static/package.json create mode 100644 static/rpg/dsl.ts create mode 100644 static/runtime/core/hal.h create mode 100644 static/runtime/core/rpg.c create mode 100644 static/runtime/core/vm.c create mode 100644 static/runtime/core/vm.h create mode 100644 static/runtime/gba/crt0.s create mode 100644 static/runtime/gba/gba.h create mode 100644 static/runtime/gba/gba.ld create mode 100644 static/runtime/gba/hal_gba.c create mode 100644 static/runtime/gen/spec_gen.h create mode 100644 static/spec/gen-c.ts create mode 100644 static/spec/isa.ts create mode 100644 static/spec/rpg.ts create mode 100644 static/test/e2e.ts create mode 100644 static/test/harness/build.ts create mode 100644 static/test/harness/mgba_runner.c create mode 100644 static/test/pipeline.test.ts create mode 100644 static/test/ppm2png.ts create mode 100644 static/test/script-compiler.test.ts create mode 100644 static/test/smoke/game.ts create mode 100644 static/test/vm.test.ts create mode 100644 static/vm/asm.ts create mode 100644 static/vm/ref.ts create mode 100644 static/vm/rpg-host.ts diff --git a/static/.clangd b/static/.clangd new file mode 100644 index 0000000..6965e0a --- /dev/null +++ b/static/.clangd @@ -0,0 +1,5 @@ +CompileFlags: + Add: + - -I/Users/evan/.superset/worktrees/pocketjs/zippy-radio/static/runtime/gen + - -I/Users/evan/.superset/worktrees/pocketjs/zippy-radio/static/runtime/core + - -DPS_TARGET_GBA diff --git a/static/.gitignore b/static/.gitignore new file mode 100644 index 0000000..75eb0c4 --- /dev/null +++ b/static/.gitignore @@ -0,0 +1,3 @@ +dist/ +node_modules/ +test/harness/mgba_runner diff --git a/static/DESIGN.md b/static/DESIGN.md new file mode 100644 index 0000000..19b9948 --- /dev/null +++ b/static/DESIGN.md @@ -0,0 +1,341 @@ +# Pocket Static — design + +**Pocket Static** (`@pocketjs/static`) is the static game compiler of the Pocket +family: you write a game as TypeScript — declarations that run at build time, +and generator functions that *never* run at all — and the compiler partially +evaluates the whole program down to a real cartridge ROM. One game source, +three consoles: **GBA, Game Boy, NES**. + +It replaces `@pocketjs/aot` (the `aot/` package). "AOT" described a compiler +technique; "Static" describes the product promise: everything dynamic about +your game — layout, text wrapping, palettes, branching story logic — is +resolved statically, and only a tiny fixed interpreter ships on cartridge. +Think static-site generator, but the deploy target is 1989. + +Prior art studied and deliberately not reused (fresh implementation, same +lessons): PR #52 (`aspiring-birch`, multi-target aot), and the +cine → saga → edge GBA DSL lineage. + +## 1. The one idea + +A game is two zones: + +- **Declaration zone** — `defineGame`, `defineMap`, `defineSprite`, + `defineTileset`: plain TypeScript, executed on the host at build time, + filling a registry. Anything you can compute in TS is free. +- **Script zone** — `script(function* (s) { ... })`: generator functions that + are **compiled, never executed**. The compiler lowers each generator body + from its TypeScript AST into bytecode for a small **stack VM** that every + target implements. + +The stack VM is the portability layer. The same bytecode, byte for byte, runs +on an ARM7TDMI, an SM83, and a 6502 — because the interpreter is ~600 lines of +portable C compiled by `arm-none-eabi-gcc`, `sdcc`, and `cc65` respectively. +The E2E suite drives the same scenario through all three consoles and asserts +identical logical state. + +Where PR #52's residualizer accepted only a rigid statement whitelist +(`yield op(...)`, `if (yield pred)`, choose-then-switch), Pocket Static ships +a **real expression compiler** over a typed TS subset (§5). That is the core +"完成度" upgrade: scripts read like normal TypeScript. + +## 2. Categories + +The framework is *category-extensible*. A **category** is a game genre package +that plugs into the shared core. The core owns: the VM (generic opcodes +0x00–0x3F), the script compiler, text encoding/wrapping, the asset encoders, +blob/bank layout, target toolchain drivers, and the debug-block/E2E contract. + +A category contributes: + +1. **Syscall table** (`spec/.ts`) — opcodes 0x40+ with operand layouts. +2. **DSL surface** (`/dsl.ts`) — `define*` builders + typed script ops. +3. **Model builder** (compiler stage) — DSL registry → binary records. +4. **Portable runtime module** (`/runtime/*.c`) — implements the + syscalls + per-frame gameplay against the platform HAL. +5. **Budgets** — per-target limits checked at compile time. + +v1 ships the **RPG** category. Sketches to prove the seams (not built): + +- **Visual Novel** — RPG minus maps/movement: SAY/CHOICE/portrait syscalls + and a backdrop model. Strict subset of RPG's runtime surface. +- **Platformer** — a physics core in the category runtime; the VM scripts + cutscenes/triggers while the category owns per-frame simulation (the + saga/edge `world()`/`action()` blocking-op pattern: the script yields into + an engine mode and resumes with a result). + +## 3. Targets + +| | GBA | GB (DMG) | NES | +|---|---|---|---| +| CPU | ARM7TDMI 16.8MHz | SM83 4.19MHz | 6502 1.79MHz | +| Toolchain | arm-none-eabi-gcc | sdcc (SM83) + sdasgb/sdldgb + rgbfix | cc65/ca65/ld65 | +| Screen (tiles) | 30×20 | 20×18 | 32×30 | +| Tile format | 4bpp, 32B | 2bpp interleaved, 16B | 2bpp planar, 16B | +| BG palette | 16×16 BGR555 | BGP 4 shades | 4 subpal × 3 + backdrop, 16px attr blocks | +| OBJ (16×16 actor) | 1 OBJ, 4bpp, 15c | 2× 8×16 OBJ, 3 shades | 4× 8×8 OBJ, 3c/subpal | +| Cart | flat ROM, header checksum | MBC5, rgbfix header | UNROM (mapper 2) + CHR-RAM, iNES | +| Data access | flat pointers | banked, blob ≤ 16KB/bank | banked, blob ≤ 16KB/bank | +| Scroll | free | free | none in v1 (map = one nametable) | +| Emulator (E2E) | libmgba | libmgba | jsnes | +| Debug block | 0x02000000 (EWRAM) | 0xDD00 (WRAM) | 0x0700 (CPU RAM) | + +Banking rule (GB/NES): the linker assigns each *blob* (a script bank, a text +bank, a map, a tile store) wholly into one 16KB bank; the runtime latches the +bank per access site. No blob may exceed 16KB (compile error). GBA ignores +banking (flat). + +NES color: encoders map authored RGB to nearest entry of the canonical 64-color +NES master palette. GB: authored colors map to 4 shades by luma (per-asset +override allowed). + +## 4. Core VM + +Stack machine. u8 opcode + little-endian operands. All values are **i16**. +State (per running script): operand stack (16), locals (16 slots/frame), call +stack (4 frames). Globals: 256 flags (bitset), 64 vars (i16). One script runs +at a time (RPG v1; the category decides concurrency). + +Core opcodes 0x00–0x3F (`spec/isa.ts` is the single source of truth; the +table below is illustrative): + +``` +END RET NOP +PUSH8 i8 / PUSH16 i16 / POP / DUP +JMP rel16 / JZ rel16 / JNZ rel16 rel measured from AFTER the operand +CALL u16 scriptId no args; locals fresh per frame +LDV u8 / STV u8 global var +LDL u8 / STL u8 local slot +FLAG u8 -> push / SETF u8 / CLRF u8 flags +ADD SUB MUL DIV MOD NEG signed 16-bit; DIV/MOD by 0 -> 0 +EQ NE LT GT LE GE NOT +RND pop n, push 0..n-1 (xorshift16, fixed boot seed) +WAIT pop n, suspend n frames +``` + +`&&`/`||` compile to short-circuit jumps; there are no boolean binary ops in +the ISA. RNG advances **only per RND call** with a constant boot seed: the same +script produces the same story on all three consoles, and E2E can assert +RNG-dependent outcomes cross-target. + +Suspension: SAY/CHOICE/WAIT (and future category ops) suspend the VM with a +reason; the main loop resumes it when the condition clears. The interpreter +runs bounded bursts (≤64 ops) per frame between suspensions. + +RPG syscalls 0x40+: + +``` +SAY u16 textId textbox page; typewriter; suspend until A +CHOICE u8 n, u16 t0..t(n-1) menu; suspend; push picked index +LOCK / RELEASE player input +FACE u8 slot actor faces player (0xFF = talking actor) +AVIS u8 slot, u8 visible actor visibility (people *leave* in this story) +WARP u8 map, u8 x, u8 y, u8 dir +SFX u8 id square-wave blips (confirm/deny/damage/heal/fanfare) +``` + +Items and battles are **not** syscalls: items compile to reserved vars, and +battles are DSL library code (§5) compiled through the same generator +pipeline — menus via CHOICE, HP via vars. A whole battle system with zero +bespoke runtime is the framework's best demo. + +## 5. The script compiler + +Input: `script(function* (s) { ... })` bodies (TS AST). Output: bytecode. +Ops are typed methods on the `s` handle and are always invoked with `yield*`, +which gives exact return typing (`Generator<..., number>` for value ops): + +```ts +const meeting = script(function* (s) { + yield* s.say("ILYA: The board has decided."); + let resolve = 3; + while (resolve > 0) { + const pick = yield* s.choose(["Push back", "Stay calm", "Check phone"]); + if (pick === 0 && !(yield* s.flag("board_softened"))) { + resolve -= 1 + (yield* s.rnd(2)); + yield* s.say(`Resolve: ${resolve}`); + } else if (pick === 2) { yield* s.call(twitterScene); } + } +}); +``` + +Supported statically (compile error otherwise, with file:line): + +- **Expressions**: i16 arithmetic (`+ - * / %`, unary `-`), comparisons, + `! && ||` (short-circuit), parens, numeric/boolean/string literals, + locals, `yield* s.(...)` value ops. Constant subexpressions fold. +- **Locals**: `let/const` with initializers, assignment, `+=` family, `++/--`. +- **Control flow**: `if/else`, `while`, `for(;;)`, `break/continue`, + `switch` over any i16 expression (numeric or choice-string case labels), + plain `return`. +- **Subroutines**: `yield* s.call(otherScript)` → VM CALL (no arguments). +- **Macros (partial evaluation)**: `yield* helper(s, args)` where `helper` is + a plain generator function *inlines* its body at the call site with + parameters bound to compile-time constants (numbers, strings, arrays, + objects). Member access on bound objects folds; `for...of` over bound + arrays unrolls; `if` over a static condition drops the dead branch. This is + how `rpg/battle.ts` specializes a battle per enemy definition. +- **Text interpolation**: template literals; `${...}` of static values fold + into the string, `${...}` of runtime i16 expressions compile to a store + into a scratch var + an inline format token the textbox renders as decimal + digits (≤2 runtime slots per page). + +Text is wrapped and paginated **per target at compile time** (28/18/28 cols × +3/2/3 lines); the runtime never measures. `say()` emits one SAY per page. +Speaker prefixes are plain text ("SAM: ..."), resolved statically. + +Correctness story: `vm/ref.ts` is a TypeScript reference interpreter of the +full ISA. Compiler unit tests execute compiled bytecode against scripted +syscall stubs and assert results — no emulator in the loop. The C VM then only +has to match `ref.ts`, which the cross-target E2E suite enforces. + +## 6. RPG model & assets + +Model records (all layouts in `spec/rpg.ts`, byte-exact across targets; +packaging differs per target — GBA parses a container, GB/NES get residualized +per-bank arrays): + +- **Game**: title, start map/pos/dir, counts, text mode, font/box tile ids. +- **Map**: w×h ≤ 32×30, tile grid (u8 tile ids ≤ 256/target budget), + collision bitmap, actors, warps, step triggers, onEnter script. +- **Actor**: tile pos, sprite id, facing, movement (static/wander), solid, + onTalk script, initial visibility. +- **Sprite**: 16×16, 4 facings × 1–2 walk frames. +- **Text bank**: token streams (ASCII + newline + FMT var slots), deduped. +- **Script bank**: bytecode + u16 offset table. + +Authoring (plain typed builders, no JSX — less machinery than aot's +jsx-runtime and reads just as well): + +```ts +const hq = defineMap("hq", { + tileset: office, + layout: ` + ########## + #....d...# + #..______# + `, + legend: { "#": "wall", ".": "floor", d: "desk", _: "table" }, + actors: [npc("ilya", { sprite: ilya, at: [4, 2], talk: meeting })], + warps: [warp({ at: [9, 1], to: "street:door" })], + triggers: [trigger({ at: [2, 1], run: introScene, once: true })], +}); +``` + +Art pipeline (three lanes, all producing the same neutral form — indexed- +palette hex-row tiles/frames in a generated `assets.generated.ts`): + +1. **Procedural** placeholders (test smoke game; no network, deterministic). +2. **codex imagegen** — `codex exec` generates character/tileset source + sheets (committed PNGs); a deterministic extractor (grid detection + + per-cell quantize to the authored palette) emits the neutral form. +3. **PixelLab** (`api.pixellab.ai/v1`, key in root `.env`) — native-size + pixel sprites with seeds; the SPECS + committed manifest.json discipline + from cine/saga/edge. + +Target encoders consume the neutral form: GBA packs 4bpp + BGR555 banks; +GB maps palette→shades by luma and packs interleaved 2bpp; NES packs planar +2bpp, clusters tile colors into ≤4 BG subpalettes with 16px attribute +consistency (compile error on conflict), and assigns sprites to OBJ subpalettes. +Font: a 95-glyph 8×8 ASCII bitmap font checked in as a neutral asset. + +## 7. Runtimes + +``` +static/vm/core.c portable interpreter (gcc/sdcc/cc65) +static/rpg/runtime/rpg.c portable gameplay: grid movement (8px grid, + 2px/frame), collision, actor update, interact, + warps/triggers, textbox/choice state machines, + syscall handlers — against the HAL below +static/runtime//* the HAL: video (tiles/map/OBJ/scroll), input, + frame wait, textbox blit, SFX, debug mirror, + bank latch, crt0 + linker script / header +``` + +HAL is a small header of functions (`hal.h`): `hal_poll_input`, +`hal_vsync`, `hal_map_load`, `hal_tile_write`, `hal_obj_set`, +`hal_text_cell`, `hal_sfx`, `hal_data_ptr(blobId)` (bank latch), +`hal_debug_commit`. Per-target quirks live behind it: + +- **GBA**: mode 0, BG0 map + BG1 textbox, shadow OAM DMA at vblank, + crt0 ends `msr cpsr_c, #0x5F` (IRQ-enabled — the aot 0xDF hang lesson), + header logo+checksum patched for real hardware. +- **GB**: BG + window textbox, STAT-safe VRAM writes (only during + vblank/hblank budget), OAM via DMA routine in HRAM, MBC5 bank latch, + rgbfix -v -m 0x19. +- **NES**: NMI owns PPU: OAM DMA + a bounded VRAM update queue drained in + vblank; CHR-RAM glyph/tile upload at map load (rendering off); textbox is + a nametable overlay with save/restore; UNROM bank latch (bus-conflict-safe + table write); iNES header emitted by the compiler. + +All gameplay decisions (movement, collision, script effects) happen in +portable code ⇒ logical state is cycle-exact identical across targets by +construction; only presentation differs. + +## 8. Debug block & E2E + +Every runtime mirrors the same 176-byte block to a fixed address each frame +(`spec/isa.ts` DBG; magic `PSDB`): booted, frame u32, player x/y/dir/map, +script id/active, text id/active, choice cursor, wait counter, rng state, +flags[32], vars[64×i16]. Harnesses read it over the emulated bus: + +- `test/harness/mgba_runner.c` (libmgba via Homebrew; auto-detects GBA/GB + core) — scenario JSON in: `advance/press/read/screenshot`; JSON out. +- `test/harness/nes_runner.ts` (jsnes, pure TS) — same protocol. + +Suites: `test/vm.test.ts` (compiler ↔ ref VM, no emulator), +`test/e2e.ts` (smoke game × 3 targets — boot, walk, block, talk, choice, +flags, vars, battle-loop, warp, trigger, RNG determinism), +`games/boardroom/test/e2e.ts` (full-story playthrough × 3 targets). +Screenshots land as PNG in `dist/shots/` (harness PPM → PNG in Bun). + +## 9. The launch game — BOARDROOM + +`static/games/boardroom/` — *BOARDROOM: five days in November*. The +November 2023 OpenAI board crisis as a satirical-but-factual RPG (public +figures, public record, original dialogue; research dossier with sources in +`games/boardroom/dossier.md`, kept accurate on dates/quotes). + +- **Ch.1 THE CALL** — Fri Nov 17. HQ office map. The Google Meet trigger: + "not consistently candid." Play as Sam; talk to Mira, Greg (who quits: + gains item RESIGNATION LETTER ×1). +- **Ch.2 THE WEEKEND** — negotiation maps (HQ boardroom, investors' calls), + Emmett Shear arrives; wander NPC journalists. +- **Ch.3 THE LETTER** — employee floor; collect signatures (vars) to 743; + Ilya flips ("I deeply regret..."), joins your side (AVIS + flag). +- **Ch.4 THE RETURN** — final "negotiation battle" vs THE BOARD (DSL battle + library: RESOLVE as HP; moves TENDER OFFER / HEART EMOJI / EMPLOYEE + LETTER), then the epilogue map + new board. + +Art: codex-generated sheets (Sam, Greg, Ilya, Mira, Adam, Helen, Emmett, +Satya walkers + office/boardroom/street tilesets), PixelLab fallback, +committed with manifest. + +## 10. Replacing aot/ + +- `git rm -r aot/`; `static/` supersedes it (PR notes "supersedes #52"). +- `tsconfig.json`: drop `@pocketjs/aot*` aliases + `"aot"` include; add + `@pocketjs/static*` + `"static"`. +- Site: `/aot/` product page + `site/content/aot-docs/*` → + `/static/` page + fresh docs (overview, getting started, scripts, + categories, targets, testing); `site/build.ts` screenshot copies point at + `static/docs/*.png`; `site/home.html` copy updated. +- Root `scripts/gba-imagegen.ts` + `skills/pocketjs-gba-imagegen` → default + paths point at `static/games/*/imagegen/`. +- `skills/pocketjs-release/SKILL.md`: "@pocketjs/aot stays private" → + `@pocketjs/static`. + +## 11. Budgets (compile-time errors, per target) + +Maps ≤ 32 (≤32×30 tiles each); BG tiles ≤ 208 (GB/NES; 95 font + box + blank +reserved above that), ≤ 448 (GBA); sprites ≤ 12 × (4 dir × 2 frames); actors +≤ 16/map; flags ≤ 256; vars ≤ 64 (upper 16 reserved: items/scratch); +scripts ≤ 256, script blob ≤ 16KB/bank; texts ≤ 512; total ROM: GBA ≤ 4MB, +GB ≤ 512KB, NES ≤ 256KB PRG. + +## 12. Out of scope v1 (explicit) + +CJK text (cjk16 is proven in #52; the token format reserves the escape), +music (edge's DirectSound is GBA-only; square-wave SFX only), saves, NES +scrolling, metatiles, real-hardware verification (headers are +flashcart-correct; only emulators are in CI). diff --git a/static/bun.lock b/static/bun.lock new file mode 100644 index 0000000..4feafaa --- /dev/null +++ b/static/bun.lock @@ -0,0 +1,18 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "@pocketjs/static", + "devDependencies": { + "jsnes": "^1.2.1", + "typescript": "^5", + }, + }, + }, + "packages": { + "jsnes": ["jsnes@1.2.1", "", {}, "sha512-Gn+lnv5B5c/TVwFSc8vzo7amiSogRyfMI9UL7VjYgKDrlTLf7GKuK2WD+t0gEcLbzh/NfMpkIlopzN/3cq760A=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + } +} diff --git a/static/compiler/assets.ts b/static/compiler/assets.ts new file mode 100644 index 0000000..a9b297f --- /dev/null +++ b/static/compiler/assets.ts @@ -0,0 +1,237 @@ +// static/compiler/assets.ts — neutral art -> native tile encodings. +// +// Neutral form everywhere upstream: 8x8 tiles / 16x16 sprite frames as rows +// of hex nibbles indexing a <=16-color RGB palette (index 0 = backdrop/ +// transparent). This file owns the three native encodings: +// +// GBA 4bpp packed: 32 B/tile, low nibble = LEFT pixel of the pair +// GB 2bpp interleaved: 16 B/tile, per row lo-bitplane byte then hi byte, +// MSB = leftmost pixel +// NES 2bpp planar: 16 B/tile, 8 bytes plane 0 then 8 bytes plane 1 +// +// Color reduction (GB shades / NES subpalettes) happens here too: GB maps +// palette entries to 4 shades by luma; NES picks the nearest entries of the +// canonical 64-color master palette. + +import { rgb555 } from "../spec/isa.ts"; +import type { Rgb } from "../rpg/dsl.ts"; + +export type TilePx = Uint8Array; // 64 palette indices, row-major + +export function tileFromHexRows(rows: readonly string[]): TilePx { + if (rows.length !== 8) throw new Error(`tile needs 8 rows (got ${rows.length})`); + const px = new Uint8Array(64); + rows.forEach((row, y) => { + if (row.length !== 8) throw new Error(`tile row ${y} needs 8 nibbles (got "${row}")`); + for (let x = 0; x < 8; x++) { + const v = parseInt(row[x], 16); + if (Number.isNaN(v)) throw new Error(`bad hex nibble "${row[x]}" in tile row "${row}"`); + px[y * 8 + x] = v; + } + }); + return px; +} + +/** 16x16 frame (16 rows x 16 nibbles) -> 4 tiles in TL,TR,BL,BR order. */ +export function frameToTiles(rows: readonly string[]): TilePx[] { + if (rows.length !== 16 || rows.some((r) => r.length !== 16)) { + throw new Error("sprite frames are 16 rows x 16 hex nibbles"); + } + const quad = (ox: number, oy: number): TilePx => { + const px = new Uint8Array(64); + for (let y = 0; y < 8; y++) { + for (let x = 0; x < 8; x++) { + px[y * 8 + x] = parseInt(rows[oy + y][ox + x], 16); + } + } + return px; + }; + return [quad(0, 0), quad(8, 0), quad(0, 8), quad(8, 8)]; +} + +export function hflipTile(px: TilePx): TilePx { + const out = new Uint8Array(64); + for (let y = 0; y < 8; y++) for (let x = 0; x < 8; x++) out[y * 8 + x] = px[y * 8 + (7 - x)]; + return out; +} + +/** Solid fill tile. */ +export const fillTile = (index: number): TilePx => new Uint8Array(64).fill(index); + +/** 1-bit glyph bitmap (8 bytes, MSB left) -> TilePx with ink/bg indices. */ +export function glyphTile(bitmap: readonly number[], ink: number, bg: number): TilePx { + const px = new Uint8Array(64); + for (let y = 0; y < 8; y++) { + for (let x = 0; x < 8; x++) { + px[y * 8 + x] = bitmap[y] & (0x80 >> x) ? ink : bg; + } + } + return px; +} + +// --------------------------------------------------------------------------- +// Native encodings +// --------------------------------------------------------------------------- +export function encodeTileGba(px: TilePx): Uint8Array { + const out = new Uint8Array(32); + for (let i = 0; i < 32; i++) { + const left = px[i * 2] & 0xf; + const right = px[i * 2 + 1] & 0xf; + out[i] = left | (right << 4); + } + return out; +} + +/** 2-bit-depth encoders share a per-pixel value map (palette idx -> 0..3). */ +export function encodeTileGb(px: TilePx, valueOf: (idx: number) => number): Uint8Array { + const out = new Uint8Array(16); + for (let y = 0; y < 8; y++) { + let lo = 0; + let hi = 0; + for (let x = 0; x < 8; x++) { + const v = valueOf(px[y * 8 + x]) & 3; + if (v & 1) lo |= 0x80 >> x; + if (v & 2) hi |= 0x80 >> x; + } + out[y * 2] = lo; + out[y * 2 + 1] = hi; + } + return out; +} + +export function encodeTileNes(px: TilePx, valueOf: (idx: number) => number): Uint8Array { + const out = new Uint8Array(16); + for (let y = 0; y < 8; y++) { + let p0 = 0; + let p1 = 0; + for (let x = 0; x < 8; x++) { + const v = valueOf(px[y * 8 + x]) & 3; + if (v & 1) p0 |= 0x80 >> x; + if (v & 2) p1 |= 0x80 >> x; + } + out[y] = p0; + out[8 + y] = p1; + } + return out; +} + +// --------------------------------------------------------------------------- +// Color reduction +// --------------------------------------------------------------------------- +export const luma = ([r, g, b]: Rgb): number => 0.299 * r + 0.587 * g + 0.114 * b; + +/** + * GB (DMG): palette index -> shade 0..3 (0 = lightest under the standard + * BGP). Index 0 maps to 0 (backdrop/transparent). Others rank by luma: + * brighter -> lower shade value. + */ +export function gbShadeLut(palette: readonly Rgb[]): (idx: number) => number { + const lut = new Uint8Array(16); + for (let i = 1; i < palette.length; i++) { + const l = luma(palette[i]); + lut[i] = l >= 200 ? 0 : l >= 130 ? 1 : l >= 60 ? 2 : 3; + } + // Backdrop stays 0; but a non-transparent tile pixel that DELIBERATELY uses + // index 0 also renders as shade 0 — acceptable: index 0 is "background". + return (idx) => lut[idx & 0xf]; +} + +/** GBA: neutral palette -> BGR555 bank (16 entries, index 0 kept as-is). */ +export function gbaPaletteBank(palette: readonly Rgb[]): Uint16Array { + const bank = new Uint16Array(16); + palette.forEach(([r, g, b], i) => { + bank[i] = rgb555(r, g, b); + }); + return bank; +} + +// The canonical 64-color NES master palette (2C02, the ubiquitous table). +// prettier-ignore +export const NES_MASTER: Rgb[] = [ + [84,84,84],[0,30,116],[8,16,144],[48,0,136],[68,0,100],[92,0,48],[84,4,0],[60,24,0], + [32,42,0],[8,58,0],[0,64,0],[0,60,0],[0,50,60],[0,0,0],[0,0,0],[0,0,0], + [152,150,152],[8,76,196],[48,50,236],[92,30,228],[136,20,176],[160,20,100],[152,34,32],[120,60,0], + [84,90,0],[40,114,0],[8,124,0],[0,118,40],[0,102,120],[0,0,0],[0,0,0],[0,0,0], + [236,238,236],[76,154,236],[120,124,236],[176,98,236],[228,84,236],[236,88,180],[236,106,100],[212,136,32], + [160,170,0],[116,196,0],[76,208,32],[56,204,108],[56,180,204],[60,60,60],[0,0,0],[0,0,0], + [236,238,236],[168,204,236],[188,188,236],[212,178,236],[236,174,236],[236,174,212],[236,180,176],[228,196,144], + [204,210,120],[180,222,120],[168,226,144],[152,226,180],[160,214,228],[160,162,160],[0,0,0],[0,0,0], +]; + +export function nearestNesColor([r, g, b]: Rgb): number { + let best = 0; + let bestD = Infinity; + for (let i = 0; i < NES_MASTER.length; i++) { + if ((i & 0x0f) >= 0x0e) continue; // skip the mirrored blacks + const [nr, ng, nb] = NES_MASTER[i]; + const d = 3 * (r - nr) ** 2 + 6 * (g - ng) ** 2 + (b - nb) ** 2; + if (d < bestD) { + bestD = d; + best = i; + } + } + return best; +} + +/** + * NES: reduce a <=16-color neutral palette to ONE 4-entry subpalette + * (v1 keeps one BG subpalette for art + one for the textbox, one OBJ + * subpalette per sprite). Entry 0 is the shared backdrop. Returns the + * subpalette (NES master indices) + the pixel value LUT. + */ +export function nesReduce(palette: readonly Rgb[], backdrop: number): { + subpal: [number, number, number, number]; + valueOf: (idx: number) => number; +} { + // Pick the 3 most distinct colors by a simple max-min-distance greedy. + const entries = palette.slice(1).map((rgb, i) => ({ rgb, idx: i + 1 })); + const chosen: { rgb: Rgb; idx: number }[] = []; + const dist = (a: Rgb, b: Rgb) => 3 * (a[0] - b[0]) ** 2 + 6 * (a[1] - b[1]) ** 2 + (a[2] - b[2]) ** 2; + while (chosen.length < 3 && entries.length > 0) { + let pick = 0; + if (chosen.length === 0) { + // start with the most saturated/extreme color (farthest from grey) + let bestScore = -1; + entries.forEach((e, i) => { + const l = luma(e.rgb); + const score = dist(e.rgb, [l, l, l] as unknown as Rgb) + l; + if (score > bestScore) { + bestScore = score; + pick = i; + } + }); + } else { + let bestScore = -1; + entries.forEach((e, i) => { + const score = Math.min(...chosen.map((c) => dist(e.rgb, c.rgb))); + if (score > bestScore) { + bestScore = score; + pick = i; + } + }); + } + chosen.push(entries.splice(pick, 1)[0]); + } + while (chosen.length < 3) chosen.push({ rgb: [0, 0, 0], idx: 0 }); + + const subpal: [number, number, number, number] = [ + backdrop, + nearestNesColor(chosen[0].rgb), + nearestNesColor(chosen[1].rgb), + nearestNesColor(chosen[2].rgb), + ]; + const lut = new Uint8Array(16); + for (let i = 1; i < palette.length; i++) { + let best = 1; + let bestD = Infinity; + for (let c = 0; c < 3; c++) { + const d = dist(palette[i], chosen[c].rgb); + if (d < bestD) { + bestD = d; + best = c + 1; + } + } + lut[i] = best; + } + return { subpal, valueOf: (idx) => lut[idx & 0xf] }; +} diff --git a/static/compiler/bake-font.ts b/static/compiler/bake-font.ts new file mode 100644 index 0000000..ff7c47f --- /dev/null +++ b/static/compiler/bake-font.ts @@ -0,0 +1,51 @@ +#!/usr/bin/env bun +// static/compiler/bake-font.ts — one-shot: convert the public-domain font8x8 +// bitmap font (Daniel Hepper / Marcel Sondaar / IBM VGA, public domain) into +// compiler/font.gen.ts. Checked-in output; rerun only to change the font. +// +// bun static/compiler/bake-font.ts + +const src = await Bun.file(process.argv[2]).text(); + +// font8x8_basic covers U+0000..U+007F; each glyph is 8 bytes, LSB = leftmost +// pixel. We keep 0x20..0x7E (the 95 FONT_GLYPHS) and re-pack as MSB-left so +// downstream encoders read bits naturally. +const m = src.match(/font8x8_basic\[128\]\[8\]\s*=\s*\{([\s\S]*?)\};/); +if (!m) throw new Error("font8x8_basic table not found"); +const rows = [...m[1].matchAll(/\{([^}]*)\}/g)].map((g) => + g[1] + .split(",") + .map((s) => s.trim()) + .filter(Boolean) + .map((s) => Number(s)), +); +if (rows.length !== 128) throw new Error(`expected 128 glyphs, got ${rows.length}`); + +const flip = (b: number): number => { + let r = 0; + for (let i = 0; i < 8; i++) if (b & (1 << i)) r |= 0x80 >> i; + return r; +}; + +const glyphs: number[][] = []; +for (let c = 0x20; c <= 0x7e; c++) { + glyphs.push(rows[c].map(flip)); +} + +const lines: string[] = []; +lines.push("// static/compiler/font.gen.ts — GENERATED by bake-font.ts. DO NOT EDIT."); +lines.push("//"); +lines.push("// 95 ASCII glyphs (0x20..0x7E), 8 bytes each, MSB = leftmost pixel."); +lines.push("// Source: font8x8 by Daniel Hepper (public domain), based on"); +lines.push("// Marcel Sondaar / IBM public-domain VGA fonts."); +lines.push("export const FONT8: readonly (readonly number[])[] = ["); +for (let i = 0; i < glyphs.length; i++) { + const ch = String.fromCharCode(0x20 + i); + const bytes = glyphs[i].map((b) => "0x" + b.toString(16).padStart(2, "0")).join(", "); + lines.push(` [${bytes}], // ${JSON.stringify(ch)}`); +} +lines.push("];"); + +const out = new URL("./font.gen.ts", import.meta.url).pathname; +await Bun.write(out, lines.join("\n") + "\n"); +console.log(`wrote ${out} (${glyphs.length} glyphs)`); diff --git a/static/compiler/compile-scripts.ts b/static/compiler/compile-scripts.ts new file mode 100644 index 0000000..5734f07 --- /dev/null +++ b/static/compiler/compile-scripts.ts @@ -0,0 +1,26 @@ +// static/compiler/compile-scripts.ts — front-door for turning a game module's +// residual zone into runnable bytecode: parse, collect sites, compile all +// scripts. Used by the full game pipeline and directly by unit tests / +// the story simulator (which run the result on vm/ref.ts). + +import type { TargetName } from "../spec/isa.ts"; +import { Ctx } from "./context.ts"; +import { collectSites, parseSource, type Sites } from "./sites.ts"; +import { compileScripts, type CompiledScripts } from "./script.ts"; + +export interface ScriptCompileResult extends CompiledScripts { + ctx: Ctx; + sites: Sites; +} + +export function compileScriptSource( + source: string, + target: TargetName = "gba", + fileName = "game.ts", +): ScriptCompileResult { + const file = parseSource(source, fileName); + const sites = collectSites(file); + const ctx = new Ctx(target); + const compiled = compileScripts(sites, ctx); + return { ...compiled, ctx, sites }; +} diff --git a/static/compiler/context.ts b/static/compiler/context.ts new file mode 100644 index 0000000..188412f --- /dev/null +++ b/static/compiler/context.ts @@ -0,0 +1,103 @@ +// static/compiler/context.ts — the per-target compile context: interners for +// texts/vars/flags, script directory, and cross-stage fixups. One Ctx per +// (game, target) pair — text pagination is target-shaped, so bytecode is too. + +import { TARGETS, VAR_USER_MAX, VM_FLAGS, type TargetName, type TargetSpec } from "../spec/isa.ts"; +import { RPG_BUDGET } from "../spec/rpg.ts"; +import { encodeOption, encodePage, richToDebugString, wrapPages, type RichText } from "./text.ts"; + +export interface TextRecord { + /** Token stream (already page-shaped). */ + tokens: Uint8Array; + /** Debug representation for e2e lookup ("PAGE:..." / "OPT:..."). */ + debug: string; +} + +export interface WarpFixup { + /** Offset of the 4 operand bytes (map,x,y,dir) in the script blob. */ + at: number; + dest: string; // "map:entrance" + where: string; // error context +} + +export interface ActorFixup { + /** Offset of the slot operand byte in the script blob. */ + at: number; + actorId: string; + where: string; +} + +export class Ctx { + readonly target: TargetSpec; + readonly texts: TextRecord[] = []; + private textIndex = new Map(); + private varIds = new Map(); + private flagIds = new Map(); + /** Filled by the script stage; offsets patched by the link stage. */ + warpFixups: WarpFixup[] = []; + actorFixups: ActorFixup[] = []; + + constructor(target: TargetName) { + this.target = TARGETS[target]; + } + + // --- texts --------------------------------------------------------------- + private internTokens(tokens: Uint8Array, debug: string): number { + const key = Buffer.from(tokens).toString("latin1"); + const hit = this.textIndex.get(key); + if (hit !== undefined) return hit; + if (this.texts.length >= RPG_BUDGET.MAX_TEXTS) { + throw new Error(`text budget exceeded (${RPG_BUDGET.MAX_TEXTS})`); + } + const id = this.texts.length; + this.texts.push({ tokens, debug }); + this.textIndex.set(key, id); + return id; + } + + /** Intern a say() body; returns one text id per page. */ + internPages(rt: RichText, where: string): number[] { + const pages = wrapPages(rt, this.target, where); + return pages.map((page) => { + const tokens = encodePage(page); + const debug = page.map(richToDebugString).join("\n"); + return this.internTokens(tokens, debug); + }); + } + + /** Intern a single-line choice option. */ + internOption(rt: RichText, where: string): number { + const tokens = encodeOption(rt, this.target.textCols - 2, where); // 2 cells for the cursor + return this.internTokens(tokens, richToDebugString(rt)); + } + + // --- vars / flags ---------------------------------------------------------- + varId(name: string, where: string): number { + const hit = this.varIds.get(name); + if (hit !== undefined) return hit; + const id = this.varIds.size; + if (id >= VAR_USER_MAX) throw new Error(`${where}: var budget exceeded (${VAR_USER_MAX} user vars)`); + this.varIds.set(name, id); + return id; + } + + flagId(name: string, where: string): number { + const hit = this.flagIds.get(name); + if (hit !== undefined) return hit; + const id = this.flagIds.size; + if (id >= VM_FLAGS) throw new Error(`${where}: flag budget exceeded (${VM_FLAGS})`); + this.flagIds.set(name, id); + return id; + } + + get varNames(): Record { + return Object.fromEntries(this.varIds); + } + get flagNames(): Record { + return Object.fromEntries(this.flagIds); + } + /** Text debug strings by id (e2e page lookup). */ + get textDebug(): string[] { + return this.texts.map((t) => t.debug); + } +} diff --git a/static/compiler/evaluate.ts b/static/compiler/evaluate.ts new file mode 100644 index 0000000..dfcf64c --- /dev/null +++ b/static/compiler/evaluate.ts @@ -0,0 +1,90 @@ +// static/compiler/evaluate.ts — run the declaration zone, freeze the +// residual zone. +// +// The trick (proven across aot/cine/saga/edge): parse the entry module, note +// every `script()` call site (source order = registration order), +// REWRITE each generator argument to its numeric id, redirect the +// "@pocketjs/static" import to this repo's dsl module, transpile, write a +// temp .mjs BESIDE the entry (so its relative imports still resolve), and +// dynamic-import it. The executed module fills REGISTRY with declarations +// while the compiler keeps the generator ASTs for lowering. + +import { unlink } from "node:fs/promises"; +import { dirname, join, resolve } from "node:path"; +import ts from "typescript"; +import { REGISTRY, resetRegistry, type GameDecl, type Registry } from "../rpg/dsl.ts"; +import { collectSites, type Sites } from "./sites.ts"; + +export interface Evaluated { + sites: Sites; + game: GameDecl; + registry: Registry; +} + +const DSL_PATH = resolve(import.meta.dir, "..", "rpg", "dsl.ts"); +let evalCounter = 0; + +export async function evaluateGame(entry: string): Promise { + const entryPath = resolve(entry); + const source = await Bun.file(entryPath).text(); + const file = ts.createSourceFile(entryPath, source, ts.ScriptTarget.ES2022, true); + const sites = collectSites(file); + + // Rewrites, applied back-to-front so spans stay valid. + const edits: { start: number; end: number; text: string }[] = []; + for (const site of sites.scripts) { + edits.push({ start: site.fn.getStart(file), end: site.fn.getEnd(), text: String(site.id) }); + } + const visitImports = (node: ts.Node): void => { + if ( + (ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) && + node.moduleSpecifier && + ts.isStringLiteral(node.moduleSpecifier) + ) { + const spec = node.moduleSpecifier.text; + if (spec === "@pocketjs/static" || spec === "@pocketjs/static/rpg") { + edits.push({ + start: node.moduleSpecifier.getStart(file), + end: node.moduleSpecifier.getEnd(), + text: JSON.stringify(DSL_PATH), + }); + } + } + ts.forEachChild(node, visitImports); + }; + visitImports(file); + + let rewritten = source; + edits.sort((a, b) => b.start - a.start); + for (const e of edits) rewritten = rewritten.slice(0, e.start) + e.text + rewritten.slice(e.end); + + const js = ts.transpileModule(rewritten, { + compilerOptions: { + target: ts.ScriptTarget.ES2022, + module: ts.ModuleKind.ESNext, + verbatimModuleSyntax: false, + }, + fileName: entryPath, + }).outputText; + + const temp = join(dirname(entryPath), `.__static.${process.pid}.${evalCounter++}.mjs`); + await Bun.write(temp, js); + resetRegistry(); + try { + await import(temp); + } finally { + await unlink(temp).catch(() => {}); + } + + if (!REGISTRY.game) throw new Error(`${entryPath}: the module never called defineGame()`); + if (REGISTRY.scriptCount !== sites.scripts.length) { + throw new Error( + `${entryPath}: ${sites.scripts.length} script(...) sites in source but ${REGISTRY.scriptCount} registered at run time — scripts must be created unconditionally at module top level`, + ); + } + return { + sites, + game: REGISTRY.game, + registry: { ...REGISTRY, tilesets: [...REGISTRY.tilesets], sprites: [...REGISTRY.sprites] }, + }; +} diff --git a/static/compiler/font.gen.ts b/static/compiler/font.gen.ts new file mode 100644 index 0000000..ef1e130 --- /dev/null +++ b/static/compiler/font.gen.ts @@ -0,0 +1,102 @@ +// static/compiler/font.gen.ts — GENERATED by bake-font.ts. DO NOT EDIT. +// +// 95 ASCII glyphs (0x20..0x7E), 8 bytes each, MSB = leftmost pixel. +// Source: font8x8 by Daniel Hepper (public domain), based on +// Marcel Sondaar / IBM public-domain VGA fonts. +export const FONT8: readonly (readonly number[])[] = [ + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // " " + [0x18, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x18, 0x00], // "!" + [0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // "\"" + [0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00], // "#" + [0x30, 0x7c, 0xc0, 0x78, 0x0c, 0xf8, 0x30, 0x00], // "$" + [0x00, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xc6, 0x00], // "%" + [0x38, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0x76, 0x00], // "&" + [0x60, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00], // "'" + [0x18, 0x30, 0x60, 0x60, 0x60, 0x30, 0x18, 0x00], // "(" + [0x60, 0x30, 0x18, 0x18, 0x18, 0x30, 0x60, 0x00], // ")" + [0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00], // "*" + [0x00, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x00, 0x00], // "+" + [0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x60], // "," + [0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00], // "-" + [0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00], // "." + [0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00], // "/" + [0x7c, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0x7c, 0x00], // "0" + [0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0xfc, 0x00], // "1" + [0x78, 0xcc, 0x0c, 0x38, 0x60, 0xcc, 0xfc, 0x00], // "2" + [0x78, 0xcc, 0x0c, 0x38, 0x0c, 0xcc, 0x78, 0x00], // "3" + [0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00], // "4" + [0xfc, 0xc0, 0xf8, 0x0c, 0x0c, 0xcc, 0x78, 0x00], // "5" + [0x38, 0x60, 0xc0, 0xf8, 0xcc, 0xcc, 0x78, 0x00], // "6" + [0xfc, 0xcc, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00], // "7" + [0x78, 0xcc, 0xcc, 0x78, 0xcc, 0xcc, 0x78, 0x00], // "8" + [0x78, 0xcc, 0xcc, 0x7c, 0x0c, 0x18, 0x70, 0x00], // "9" + [0x00, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, 0x00], // ":" + [0x00, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, 0x60], // ";" + [0x18, 0x30, 0x60, 0xc0, 0x60, 0x30, 0x18, 0x00], // "<" + [0x00, 0x00, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00], // "=" + [0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00], // ">" + [0x78, 0xcc, 0x0c, 0x18, 0x30, 0x00, 0x30, 0x00], // "?" + [0x7c, 0xc6, 0xde, 0xde, 0xde, 0xc0, 0x78, 0x00], // "@" + [0x30, 0x78, 0xcc, 0xcc, 0xfc, 0xcc, 0xcc, 0x00], // "A" + [0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00], // "B" + [0x3c, 0x66, 0xc0, 0xc0, 0xc0, 0x66, 0x3c, 0x00], // "C" + [0xf8, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00], // "D" + [0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00], // "E" + [0xfe, 0x62, 0x68, 0x78, 0x68, 0x60, 0xf0, 0x00], // "F" + [0x3c, 0x66, 0xc0, 0xc0, 0xce, 0x66, 0x3e, 0x00], // "G" + [0xcc, 0xcc, 0xcc, 0xfc, 0xcc, 0xcc, 0xcc, 0x00], // "H" + [0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00], // "I" + [0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00], // "J" + [0xe6, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00], // "K" + [0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00], // "L" + [0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0x00], // "M" + [0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00], // "N" + [0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00], // "O" + [0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00], // "P" + [0x78, 0xcc, 0xcc, 0xcc, 0xdc, 0x78, 0x1c, 0x00], // "Q" + [0xfc, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0xe6, 0x00], // "R" + [0x78, 0xcc, 0xe0, 0x70, 0x1c, 0xcc, 0x78, 0x00], // "S" + [0xfc, 0xb4, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00], // "T" + [0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xfc, 0x00], // "U" + [0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x00], // "V" + [0xc6, 0xc6, 0xc6, 0xd6, 0xfe, 0xee, 0xc6, 0x00], // "W" + [0xc6, 0xc6, 0x6c, 0x38, 0x38, 0x6c, 0xc6, 0x00], // "X" + [0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x30, 0x78, 0x00], // "Y" + [0xfe, 0xc6, 0x8c, 0x18, 0x32, 0x66, 0xfe, 0x00], // "Z" + [0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x78, 0x00], // "[" + [0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00], // "\\" + [0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00], // "]" + [0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00], // "^" + [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff], // "_" + [0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00], // "`" + [0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00], // "a" + [0xe0, 0x60, 0x60, 0x7c, 0x66, 0x66, 0xdc, 0x00], // "b" + [0x00, 0x00, 0x78, 0xcc, 0xc0, 0xcc, 0x78, 0x00], // "c" + [0x1c, 0x0c, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00], // "d" + [0x00, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00], // "e" + [0x38, 0x6c, 0x60, 0xf0, 0x60, 0x60, 0xf0, 0x00], // "f" + [0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8], // "g" + [0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0xe6, 0x00], // "h" + [0x30, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00], // "i" + [0x0c, 0x00, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78], // "j" + [0xe0, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0xe6, 0x00], // "k" + [0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00], // "l" + [0x00, 0x00, 0xcc, 0xfe, 0xfe, 0xd6, 0xc6, 0x00], // "m" + [0x00, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0xcc, 0x00], // "n" + [0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0x78, 0x00], // "o" + [0x00, 0x00, 0xdc, 0x66, 0x66, 0x7c, 0x60, 0xf0], // "p" + [0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0x1e], // "q" + [0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0xf0, 0x00], // "r" + [0x00, 0x00, 0x7c, 0xc0, 0x78, 0x0c, 0xf8, 0x00], // "s" + [0x10, 0x30, 0x7c, 0x30, 0x30, 0x34, 0x18, 0x00], // "t" + [0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00], // "u" + [0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x00], // "v" + [0x00, 0x00, 0xc6, 0xd6, 0xfe, 0xfe, 0x6c, 0x00], // "w" + [0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00], // "x" + [0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8], // "y" + [0x00, 0x00, 0xfc, 0x98, 0x30, 0x64, 0xfc, 0x00], // "z" + [0x1c, 0x30, 0x30, 0xe0, 0x30, 0x30, 0x1c, 0x00], // "{" + [0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00], // "|" + [0xe0, 0x30, 0x30, 0x1c, 0x30, 0x30, 0xe0, 0x00], // "}" + [0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // "~" +]; diff --git a/static/compiler/index.ts b/static/compiler/index.ts new file mode 100644 index 0000000..97c7c4e --- /dev/null +++ b/static/compiler/index.ts @@ -0,0 +1,55 @@ +// static/compiler/index.ts — the Pocket Static compile pipeline. +// +// evaluate (declaration zone runs, residual zone frozen as ASTs) +// -> compile scripts (generator ASTs -> bytecode, per-target text pages) +// -> build model (layouts, actors, warps, budgets) +// -> patch fixups (warp/actor symbols -> operands) +// -> link (blobs + tables) +// -> target packager (native art, data emission, toolchain) [targets/*] + +import type { TargetName } from "../spec/isa.ts"; +import { TARGETS } from "../spec/isa.ts"; +import { Ctx } from "./context.ts"; +import { evaluateGame } from "./evaluate.ts"; +import { linkGame, type LinkedGame } from "./link.ts"; +import { buildModel, patchFixups } from "./model.ts"; +import { compileScripts } from "./script.ts"; +import type { Sites } from "./sites.ts"; + +export interface DebugInfo { + target: TargetName; + vars: Record; + flags: Record; + /** Text id -> page text ("\n" line breaks, "{vNN}" fmt slots). */ + texts: string[]; + maps: Record; + actors: Record; + scripts: Record; +} + +export interface CompileOutput { + target: TargetName; + linked: LinkedGame; + sites: Sites; + debug: DebugInfo; +} + +export async function compileGame(entryPath: string, target: TargetName): Promise { + const { sites, game, registry } = await evaluateGame(entryPath); + const ctx = new Ctx(target); + const scripts = compileScripts(sites, ctx); + const model = buildModel(game, registry, ctx, TARGETS[target]); + patchFixups(scripts.blob, ctx, model); + const linked = linkGame(model, ctx, scripts.blob, scripts.table); + + const debug: DebugInfo = { + target, + vars: ctx.varNames, + flags: ctx.flagNames, + texts: ctx.textDebug, + maps: model.mapIndex, + actors: model.actorSlots, + scripts: Object.fromEntries(sites.scriptIds), + }; + return { target, linked, sites, debug }; +} diff --git a/static/compiler/link.ts b/static/compiler/link.ts new file mode 100644 index 0000000..10115a6 --- /dev/null +++ b/static/compiler/link.ts @@ -0,0 +1,151 @@ +// static/compiler/link.ts — serialize the model into the target-independent +// blobs (game header, script blob, text blobs, map blobs) and the fixed- +// region tables. Native art blobs are appended per target (targets/*), which +// then package everything for their toolchain. + +import { BANK_SIZE, BLOB_KIND, ByteWriter, TEXT_ENTRY_SIZE } from "../spec/isa.ts"; +import { + ACTOR_SIZE, + GAME_HEADER_SIZE, + GAME_TITLE_LEN, + MAP_HEADER_SIZE, + RPG_BUDGET, + TRIGGER_SIZE, + WARP_SIZE, +} from "../spec/rpg.ts"; +import type { Ctx } from "./context.ts"; +import type { GameModel } from "./model.ts"; + +export interface Blob { + kind: number; // BLOB_KIND.* + /** For MAP blobs: the map id. For TEXT: the text-blob ordinal. */ + id: number; + bytes: Uint8Array; +} + +export interface LinkedGame { + model: GameModel; + ctx: Ctx; + header: Uint8Array; + /** Blob index space shared with the targets (art appended after these). */ + blobs: Blob[]; + scriptBlobIndex: number; + /** Per script id: byte offset in the script blob. */ + scriptTable: number[]; + /** Per text id: (blob index, offset). */ + textTable: { blob: number; off: number }[]; + /** Per map id: blob index. */ + mapBlobIndex: number[]; +} + +export function linkGame(model: GameModel, ctx: Ctx, scriptBlob: Uint8Array, scriptTable: number[]): LinkedGame { + if (scriptBlob.length > RPG_BUDGET.MAX_SCRIPT_BLOB) { + throw new Error(`script bytecode is ${scriptBlob.length} B — exceeds one bank (${RPG_BUDGET.MAX_SCRIPT_BLOB})`); + } + + const blobs: Blob[] = []; + const scriptBlobIndex = blobs.length; + blobs.push({ kind: BLOB_KIND.SCRIPTS, id: 0, bytes: scriptBlob }); + + // Texts: first-fit into <=16 KB blobs, each stream whole. + const textTable: { blob: number; off: number }[] = []; + let tw: ByteWriter | null = null; + let twIndex = -1; + let textBlobOrdinal = 0; + const flushText = (): void => { + if (tw && tw.length > 0) blobs[twIndex].bytes = tw.toUint8Array(); + tw = null; + }; + for (const t of ctx.texts) { + if (t.tokens.length > RPG_BUDGET.MAX_TEXT_BLOB) throw new Error("single text exceeds a bank — split it"); + if (!tw || tw.length + t.tokens.length > RPG_BUDGET.MAX_TEXT_BLOB) { + flushText(); + tw = new ByteWriter(); + twIndex = blobs.length; + blobs.push({ kind: BLOB_KIND.TEXT, id: textBlobOrdinal++, bytes: new Uint8Array(0) }); + } + textTable.push({ blob: twIndex, off: tw.length }); + tw.bytes(t.tokens); + } + flushText(); + + // Maps. + const mapBlobIndex: number[] = []; + model.maps.forEach((m, mi) => { + const w = new ByteWriter(); + const cells = m.width * m.height; + const collisionBytes = Math.ceil(cells / 8); + const tilesOff = MAP_HEADER_SIZE; + const collisionOff = tilesOff + cells; + const actorsOff = collisionOff + collisionBytes; + const warpsOff = actorsOff + m.actors.length * ACTOR_SIZE; + const triggersOff = warpsOff + m.warps.length * WARP_SIZE; + + w.u8(m.width) + .u8(m.height) + .u8(m.actors.length) + .u8(m.warps.length) + .u8(m.triggers.length) + .u8(0) + .u16(m.onEnter) + .u16(tilesOff) + .u16(collisionOff) + .u16(actorsOff) + .u16(warpsOff) + .u16(triggersOff) + .u16(0); + if (w.length !== MAP_HEADER_SIZE) throw new Error("map header layout drifted"); + + for (const t of m.tiles) w.u8(t); + const bits = new Uint8Array(collisionBytes); + m.solid.forEach((s, i) => { + if (s) bits[i >> 3] |= 1 << (i & 7); + }); + // Actors are solid obstacles too, but dynamically (they move/hide) — the + // runtime checks them separately; the bitset is static geometry only. + w.bytes(bits); + for (const a of m.actors) { + w.u8(a.x).u8(a.y).u8(a.spriteId).u8(a.facing).u8(a.move).u8(a.flags).u16(a.talk); + } + for (const wp of m.warps) { + w.u8(wp.x).u8(wp.y).u8(wp.destMap).u8(wp.destX).u8(wp.destY).u8(wp.destDir); + } + for (const tr of m.triggers) { + w.u8(tr.x).u8(tr.y).u16(tr.script).u8(tr.flags).u8(tr.onceFlag); + } + + const bytes = w.toUint8Array(); + if (bytes.length > BANK_SIZE) throw new Error(`map ${m.name}: ${bytes.length} B exceeds a bank`); + mapBlobIndex.push(blobs.length); + blobs.push({ kind: BLOB_KIND.MAP, id: mi, bytes }); + }); + + // Game header. + const h = new ByteWriter(); + h.ascii(model.title, GAME_TITLE_LEN) + .u8(model.start.map) + .u8(model.start.x) + .u8(model.start.y) + .u8(model.start.dir) + .u8(model.maps.length) + .u8(model.sprites.length) + .u16(ctx.texts.length) + .u16(scriptTable.length) + .u8(model.playerSpriteId) + .u8(0); + if (h.length !== GAME_HEADER_SIZE) throw new Error("game header layout drifted"); + + if (textTable.length !== ctx.texts.length) throw new Error("text table drifted"); + void TEXT_ENTRY_SIZE; + + return { + model, + ctx, + header: h.toUint8Array(), + blobs, + scriptBlobIndex, + scriptTable, + textTable, + mapBlobIndex, + }; +} diff --git a/static/compiler/model.ts b/static/compiler/model.ts new file mode 100644 index 0000000..7ead63d --- /dev/null +++ b/static/compiler/model.ts @@ -0,0 +1,241 @@ +// static/compiler/model.ts — declarations -> the concrete game model: +// numeric ids everywhere, tile grids + collision from layout/legend, actors, +// warps, triggers, entrances resolved, budgets enforced. Target-independent +// (pixel encoding happens in targets/*; text pagination already happened in +// the script stage's Ctx). + +import { type TargetSpec } from "../spec/isa.ts"; +import { + ACTOR_F, + DIR_BY_NAME, + MAX_ACTORS_PER_MAP, + MOVE, + RPG_BUDGET, + SCRIPT_NONE, + type DirName, +} from "../spec/rpg.ts"; +import type { ActorDecl, GameDecl, Registry, SpriteDecl, TilesetDecl } from "../rpg/dsl.ts"; +import type { Ctx } from "./context.ts"; + +export interface ActorModel { + id: string; + x: number; + y: number; + spriteId: number; + facing: number; + move: number; + flags: number; + talk: number; // script id or SCRIPT_NONE +} + +export interface MapModel { + name: string; + width: number; + height: number; + tiles: number[]; // row-major tile indices (0 = blank) + solid: boolean[]; + actors: ActorModel[]; + warps: { x: number; y: number; destMap: number; destX: number; destY: number; destDir: number }[]; + triggers: { x: number; y: number; script: number; flags: number; onceFlag: number }[]; + onEnter: number; + entrances: Record; +} + +export interface GameModel { + title: string; + start: { map: number; x: number; y: number; dir: number }; + playerSpriteId: number; + tileset: TilesetDecl; + /** Tile index -> tileset tile name ("" for blank at 0). */ + tileNames: string[]; + sprites: SpriteDecl[]; + maps: MapModel[]; + mapIndex: Record; + /** Script-referenced actor ids -> location (for AVIS/FACE fixups). */ + actorSlots: Record; +} + +const parseLayout = (layout: string, mapName: string): string[] => { + const rawLines = layout.split("\n"); + while (rawLines.length && rawLines[0].trim() === "") rawLines.shift(); + while (rawLines.length && rawLines[rawLines.length - 1].trim() === "") rawLines.pop(); + if (rawLines.length === 0) throw new Error(`map ${mapName}: empty layout`); + const indents = rawLines.filter((l) => l.trim() !== "").map((l) => l.length - l.trimStart().length); + const strip = Math.min(...indents); + const lines = rawLines.map((l) => l.slice(strip).replace(/\s+$/, "")); + const width = Math.max(...lines.map((l) => l.length)); + return lines.map((l) => l.padEnd(width, " ")); +}; + +export function buildModel(game: GameDecl, registry: Registry, ctx: Ctx, target: TargetSpec): GameModel { + // v1: one tileset per game — every map must share it. + const tilesets = new Set(game.maps.map((m) => m.tileset)); + if (tilesets.size !== 1) { + throw new Error(`v1 supports exactly one tileset per game (got ${[...tilesets].map((t) => t.name).join(", ")})`); + } + const tileset = game.maps[0].tileset; + + const tileIndex = new Map(); + const tileNames = [""]; + Object.keys(tileset.tiles).forEach((name) => { + tileIndex.set(name, tileNames.length); + tileNames.push(name); + }); + if (tileNames.length - 1 > Math.min(RPG_BUDGET.MAX_TILESET_TILES, target.bgArtTiles)) { + throw new Error( + `tileset ${tileset.name}: ${tileNames.length - 1} tiles exceeds the ${target.name} art budget (${Math.min(RPG_BUDGET.MAX_TILESET_TILES, target.bgArtTiles)})`, + ); + } + + // Sprites: the player plus every actor sprite, in REGISTRY order. + const spriteIds = new Map(); + registry.sprites.forEach((sp, i) => spriteIds.set(sp, i)); + if (registry.sprites.length > RPG_BUDGET.MAX_SPRITES) { + throw new Error(`${registry.sprites.length} sprites exceeds budget ${RPG_BUDGET.MAX_SPRITES}`); + } + const spriteIdOf = (sp: SpriteDecl, whom: string): number => { + const id = spriteIds.get(sp); + if (id === undefined) throw new Error(`${whom}: sprite was not created with defineSprite()`); + return id; + }; + + if (game.maps.length > RPG_BUDGET.MAX_MAPS) throw new Error(`too many maps (${game.maps.length})`); + const mapIndex: Record = {}; + game.maps.forEach((m, i) => { + if (mapIndex[m.name] !== undefined) throw new Error(`duplicate map name "${m.name}"`); + mapIndex[m.name] = i; + }); + + const actorSlots: Record = {}; + const dirOf = (d: DirName | undefined, fallback = 0): number => (d ? DIR_BY_NAME[d] : fallback); + + const maps: MapModel[] = game.maps.map((m, mi) => { + const lines = parseLayout(m.layout, m.name); + const width = lines[0].length; + const height = lines.length; + if (width > target.maxMapW || height > target.maxMapH) { + throw new Error(`map ${m.name}: ${width}x${height} exceeds ${target.name} max ${target.maxMapW}x${target.maxMapH}`); + } + const tiles: number[] = []; + const solid: boolean[] = []; + for (const line of lines) { + for (const ch of line) { + if (ch === " " && !(m.legend[" "] !== undefined)) { + tiles.push(0); + solid.push(false); + continue; + } + const tileName = m.legend[ch]; + if (tileName === undefined) throw new Error(`map ${m.name}: layout char "${ch}" missing from legend`); + const ti = tileIndex.get(tileName); + if (ti === undefined) throw new Error(`map ${m.name}: legend "${ch}" -> unknown tile "${tileName}"`); + tiles.push(ti); + solid.push(tileset.tiles[tileName].solid === true); + } + } + + const inBounds = (x: number, y: number, what: string): void => { + if (x < 0 || y < 0 || x >= width || y >= height) { + throw new Error(`map ${m.name}: ${what} at (${x},${y}) is outside ${width}x${height}`); + } + }; + + const actors = (m.actors ?? []).map((a: ActorDecl, slot: number) => { + inBounds(a.at[0], a.at[1], `actor "${a.id}"`); + if (actorSlots[a.id]) throw new Error(`actor id "${a.id}" is used on two maps — ids are global`); + actorSlots[a.id] = { map: mi, slot }; + return { + id: a.id, + x: a.at[0], + y: a.at[1], + spriteId: spriteIdOf(a.sprite, `actor ${a.id}`), + facing: dirOf(a.facing), + move: a.move === "wander" ? MOVE.WANDER : MOVE.STATIC, + flags: (a.solid === false ? 0 : ACTOR_F.SOLID) | (a.hidden ? ACTOR_F.HIDDEN : 0), + talk: a.talk ? a.talk.__script : SCRIPT_NONE, + }; + }); + if (actors.length > MAX_ACTORS_PER_MAP) { + throw new Error(`map ${m.name}: ${actors.length} actors exceeds ${MAX_ACTORS_PER_MAP}`); + } + + const entrances: MapModel["entrances"] = {}; + for (const [name, e] of Object.entries(m.entrances ?? {})) { + inBounds(e.at[0], e.at[1], `entrance "${name}"`); + entrances[name] = { x: e.at[0], y: e.at[1], dir: dirOf(e.dir) }; + } + + const triggers = (m.triggers ?? []).map((t) => { + inBounds(t.at[0], t.at[1], "trigger"); + const onceFlag = t.once ? ctx.flagId(`__trig_${m.name}_${t.at[0]}_${t.at[1]}`, `map ${m.name}`) : 0; + return { x: t.at[0], y: t.at[1], script: t.run.__script, flags: t.once ? 1 : 0, onceFlag }; + }); + + return { + name: m.name, + width, + height, + tiles, + solid, + actors, + warps: [], // filled below once all maps/entrances exist + triggers, + onEnter: m.onEnter ? m.onEnter.__script : SCRIPT_NONE, + entrances, + }; + }); + + // Second pass: warps (need every map's entrances). + const resolveDest = (dest: string, whom: string): { map: number; x: number; y: number; dir: number } => { + const [mapName, entName] = dest.split(":"); + const di = mapIndex[mapName]; + if (di === undefined) throw new Error(`${whom}: unknown map "${mapName}" in "${dest}"`); + const ent = maps[di].entrances[entName]; + if (!ent) throw new Error(`${whom}: map "${mapName}" has no entrance "${entName}"`); + return { map: di, x: ent.x, y: ent.y, dir: ent.dir }; + }; + + game.maps.forEach((m, mi) => { + maps[mi].warps = (m.warps ?? []).map((w) => { + const d = resolveDest(w.to, `map ${m.name} warp`); + if (w.at[0] < 0 || w.at[1] < 0 || w.at[0] >= maps[mi].width || w.at[1] >= maps[mi].height) { + throw new Error(`map ${m.name}: warp at (${w.at[0]},${w.at[1]}) out of bounds`); + } + return { x: w.at[0], y: w.at[1], destMap: d.map, destX: d.x, destY: d.y, destDir: d.dir }; + }); + }); + + const start = resolveDest(game.start, "game start"); + + return { + title: game.title, + start: { map: start.map, x: start.x, y: start.y, dir: start.dir }, + playerSpriteId: spriteIdOf(game.player, "player"), + tileset, + tileNames, + sprites: registry.sprites, + maps, + mapIndex, + actorSlots, + }; +} + +/** Resolve the script stage's symbolic fixups against the built model. */ +export function patchFixups(blob: Uint8Array, ctx: Ctx, model: GameModel): void { + for (const w of ctx.warpFixups) { + const [mapName, entName] = w.dest.split(":"); + const mi = model.mapIndex[mapName]; + if (mi === undefined) throw new Error(`${w.where}: unknown map "${mapName}"`); + const ent = model.maps[mi].entrances[entName]; + if (!ent) throw new Error(`${w.where}: map "${mapName}" has no entrance "${entName}"`); + blob[w.at] = mi; + blob[w.at + 1] = ent.x; + blob[w.at + 2] = ent.y; + blob[w.at + 3] = ent.dir; + } + for (const a of ctx.actorFixups) { + const loc = model.actorSlots[a.actorId]; + if (!loc) throw new Error(`${a.where}: unknown actor id "${a.actorId}"`); + blob[a.at] = loc.slot; + } +} diff --git a/static/compiler/script.ts b/static/compiler/script.ts new file mode 100644 index 0000000..84b70ec --- /dev/null +++ b/static/compiler/script.ts @@ -0,0 +1,1082 @@ +// static/compiler/script.ts — compile script generator bodies to stack-VM +// bytecode. This is a real (small) compiler over a typed TS subset, not a +// statement-pattern matcher: expressions, locals, control flow, short-circuit +// logic, switch, subroutine CALLs and compile-time macro inlining all work +// the way the TypeScript reads. +// +// The residual contract: script bodies NEVER execute on the host. Everything +// they may reference is either (a) the three role parameters +// `function* (s, v, f)` — engine ops, global vars proxy, flags proxy — +// (b) local `let/const`, (c) compile-time constants, or (d) helper generator +// functions (inlined macros with statically-bound arguments). + +import ts from "typescript"; +import { OP, VAR_SCRATCH_BASE, VM_LOCALS, VM_VARS } from "../spec/isa.ts"; +import { DIR_BY_NAME, FACE_SELF, RPG_OP, SFX, type DirName } from "../spec/rpg.ts"; +import type { Ctx } from "./context.ts"; +import { richFromString, type RichText } from "./text.ts"; +import type { ScriptSite, Sites } from "./sites.ts"; + +// --------------------------------------------------------------------------- +// Static values (compile-time constants) +// --------------------------------------------------------------------------- +export type StaticValue = number | string | boolean | StaticValue[] | { [k: string]: StaticValue }; + +type Binding = + | { kind: "role"; role: "ops" | "vars" | "flags" } + | { kind: "local"; slot: number; choiceOptions?: string[] } + | { kind: "const"; value: StaticValue }; + +class Scope { + private byName = new Map(); + constructor(readonly parent?: Scope) {} + lookup(name: string): Binding | undefined { + return this.byName.get(name) ?? this.parent?.lookup(name); + } + declare(name: string, b: Binding): void { + this.byName.set(name, b); + } +} + +export class ScriptError extends Error { + constructor(node: ts.Node, sf: ts.SourceFile, msg: string) { + const { line, character } = sf.getLineAndCharacterOfPosition(node.getStart(sf)); + super( + `${sf.fileName}:${line + 1}:${character + 1}: ${msg}\n near: ${node.getText(sf).slice(0, 90)}`, + ); + } +} + +interface LoopCtx { + breaks: number[]; // JMP operand offsets to patch to loop end + continues: number[]; // JMP operand offsets to patch to continue target + continueTarget?: number; // known immediately for while; patched late for for +} + +interface MacroCtx { + endJumps: number[]; // `return` sites + resultSlot?: number; // set when the macro is used in value position +} + +const SCRATCH_SLOTS = VM_VARS - VAR_SCRATCH_BASE; + +// --------------------------------------------------------------------------- +export class ScriptCompiler { + code: number[] = []; + private scopes: Scope; + private nextSlot = 0; + private loops: LoopCtx[] = []; + private macros: MacroCtx[] = []; + private expansion: string[] = []; // macro names, for recursion detection + /** Set by compileExpr when the value came straight from s.choose(). */ + private lastChoiceOptions?: string[]; + + constructor( + private site: ScriptSite, + private sites: Sites, + private ctx: Ctx, + ) { + this.scopes = new Scope(); + const params = site.fn.parameters; + const roles = ["ops", "vars", "flags"] as const; + params.forEach((p, i) => { + if (!ts.isIdentifier(p.name)) throw this.err(p, "script parameters must be plain identifiers"); + if (i >= roles.length) throw this.err(p, "scripts take at most (s, v, f)"); + this.scopes.declare(p.name.text, { kind: "role", role: roles[i] }); + }); + } + + private get sf(): ts.SourceFile { + return this.sites.file; + } + private err(node: ts.Node, msg: string): ScriptError { + return new ScriptError(node, this.sf, msg); + } + private where(node: ts.Node): string { + const { line } = this.sf.getLineAndCharacterOfPosition(node.getStart(this.sf)); + return `${this.sf.fileName}:${line + 1}`; + } + + // --- emission helpers ------------------------------------------------------ + private u8(v: number): void { + this.code.push(v & 0xff); + } + private u16(v: number): void { + this.code.push(v & 0xff, (v >> 8) & 0xff); + } + private emitPush(v: number, node: ts.Node): void { + const x = Math.trunc(v); + if (x < -32768 || x > 32767) throw this.err(node, `constant ${x} out of i16 range`); + if (x >= -128 && x <= 127) { + this.u8(OP.PUSH8); + this.u8(x & 0xff); + } else { + this.u8(OP.PUSH16); + this.u16(x & 0xffff); + } + } + /** Emit a jump; returns the operand offset for patching. */ + private jump(op: number): number { + this.u8(op); + const at = this.code.length; + this.u16(0); + return at; + } + private patch(at: number, target = this.code.length): void { + const rel = target - (at + 2); + this.code[at] = rel & 0xff; + this.code[at + 1] = (rel >> 8) & 0xff; + } + private allocSlot(node: ts.Node): number { + if (this.nextSlot >= VM_LOCALS) { + throw this.err(node, `too many locals (max ${VM_LOCALS} per script, macros included)`); + } + return this.nextSlot++; + } + + // --- static evaluation ------------------------------------------------------ + tryStatic(node: ts.Expression): { ok: true; value: StaticValue } | { ok: false } { + const no = { ok: false } as const; + const yes = (value: StaticValue) => ({ ok: true, value }) as const; + if (ts.isParenthesizedExpression(node) || ts.isAsExpression(node)) return this.tryStatic(node.expression); + if (ts.isNumericLiteral(node)) return yes(Number(node.text)); + if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) return yes(node.text); + if (node.kind === ts.SyntaxKind.TrueKeyword) return yes(true); + if (node.kind === ts.SyntaxKind.FalseKeyword) return yes(false); + if (ts.isIdentifier(node)) { + const b = this.scopes.lookup(node.text); + if (b?.kind === "const") return yes(b.value); + return no; + } + if (ts.isPrefixUnaryExpression(node)) { + const inner = this.tryStatic(node.operand); + if (!inner.ok) return no; + if (node.operator === ts.SyntaxKind.MinusToken && typeof inner.value === "number") return yes(-inner.value); + if (node.operator === ts.SyntaxKind.ExclamationToken) return yes(!inner.value); + return no; + } + if (ts.isArrayLiteralExpression(node)) { + const out: StaticValue[] = []; + for (const e of node.elements) { + const r = this.tryStatic(e); + if (!r.ok) return no; + out.push(r.value); + } + return yes(out); + } + if (ts.isObjectLiteralExpression(node)) { + const out: { [k: string]: StaticValue } = {}; + for (const p of node.properties) { + if (!ts.isPropertyAssignment(p) || (!ts.isIdentifier(p.name) && !ts.isStringLiteral(p.name))) return no; + const r = this.tryStatic(p.initializer); + if (!r.ok) return no; + out[p.name.text] = r.value; + } + return yes(out); + } + if (ts.isPropertyAccessExpression(node)) { + const obj = this.tryStatic(node.expression); + if (!obj.ok || typeof obj.value !== "object" || obj.value === null || Array.isArray(obj.value)) { + if (obj.ok && Array.isArray(obj.value) && node.name.text === "length") return yes(obj.value.length); + return no; + } + const v = (obj.value as { [k: string]: StaticValue })[node.name.text]; + return v === undefined ? no : yes(v); + } + if (ts.isElementAccessExpression(node)) { + const obj = this.tryStatic(node.expression); + const idx = this.tryStatic(node.argumentExpression); + if (!obj.ok || !idx.ok) return no; + if (Array.isArray(obj.value) && typeof idx.value === "number") { + const v = obj.value[idx.value]; + return v === undefined ? no : yes(v); + } + if (typeof obj.value === "object" && typeof idx.value === "string") { + const v = (obj.value as { [k: string]: StaticValue })[idx.value]; + return v === undefined ? no : yes(v); + } + return no; + } + if (ts.isTemplateExpression(node)) { + let s = node.head.text; + for (const span of node.templateSpans) { + const r = this.tryStatic(span.expression); + if (!r.ok) return no; + s += String(r.value) + span.literal.text; + } + return yes(s); + } + if (ts.isBinaryExpression(node)) { + const a = this.tryStatic(node.left); + const b = this.tryStatic(node.right); + if (!a.ok || !b.ok) return no; + const x = a.value as number | string | boolean; + const y = b.value as number | string | boolean; + switch (node.operatorToken.kind) { + case ts.SyntaxKind.PlusToken: + return yes((x as never) + (y as never)); + case ts.SyntaxKind.MinusToken: + return yes((x as number) - (y as number)); + case ts.SyntaxKind.AsteriskToken: + return yes((x as number) * (y as number)); + case ts.SyntaxKind.SlashToken: + return yes(Math.trunc((x as number) / (y as number))); + case ts.SyntaxKind.PercentToken: + return yes((x as number) % (y as number)); + case ts.SyntaxKind.EqualsEqualsEqualsToken: + return yes(x === y); + case ts.SyntaxKind.ExclamationEqualsEqualsToken: + return yes(x !== y); + case ts.SyntaxKind.LessThanToken: + return yes(x < y); + case ts.SyntaxKind.GreaterThanToken: + return yes(x > y); + case ts.SyntaxKind.LessThanEqualsToken: + return yes(x <= y); + case ts.SyntaxKind.GreaterThanEqualsToken: + return yes(x >= y); + case ts.SyntaxKind.AmpersandAmpersandToken: + return yes(x && y); + case ts.SyntaxKind.BarBarToken: + return yes(x || y); + default: + return no; + } + } + return no; + } + + private staticOrThrow(node: ts.Expression, what: string): StaticValue { + const r = this.tryStatic(node); + if (!r.ok) throw this.err(node, `${what} must be a compile-time constant`); + return r.value; + } + + // --- role recognition -------------------------------------------------------- + private roleOf(node: ts.Expression): "ops" | "vars" | "flags" | undefined { + if (!ts.isIdentifier(node)) return undefined; + const b = this.scopes.lookup(node.text); + return b?.kind === "role" ? b.role : undefined; + } + + /** v.name / f.name (or v["name"]). Returns the interned id. */ + private globalRef(node: ts.Expression): { kind: "var" | "flag"; id: number } | undefined { + let objExpr: ts.Expression | undefined; + let name: string | undefined; + if (ts.isPropertyAccessExpression(node)) { + objExpr = node.expression; + name = node.name.text; + } else if (ts.isElementAccessExpression(node)) { + objExpr = node.expression; + const idx = this.tryStatic(node.argumentExpression); + if (idx.ok && typeof idx.value === "string") name = idx.value; + } + if (!objExpr || name === undefined) return undefined; + const role = this.roleOf(objExpr); + if (role === "vars") return { kind: "var", id: this.ctx.varId(name, this.where(node)) }; + if (role === "flags") return { kind: "flag", id: this.ctx.flagId(name, this.where(node)) }; + return undefined; + } + + /** s.(...) call, unwrapped from yield*. */ + private opsCall(node: ts.Expression): { op: string; args: readonly ts.Expression[]; call: ts.CallExpression } | undefined { + let e = node; + while (ts.isParenthesizedExpression(e) || ts.isAsExpression(e)) e = e.expression; + if (!ts.isCallExpression(e) || !ts.isPropertyAccessExpression(e.expression)) return undefined; + if (this.roleOf(e.expression.expression) !== "ops") return undefined; + return { op: e.expression.name.text, args: e.arguments, call: e }; + } + + /** yield* unwrap. */ + private yieldStar(node: ts.Expression): ts.Expression | undefined { + let e = node; + while (ts.isParenthesizedExpression(e) || ts.isAsExpression(e)) e = e.expression; + if (ts.isYieldExpression(e) && e.asteriskToken && e.expression) return e.expression; + return undefined; + } + + // --- rich text (say/choice payloads) ----------------------------------------- + /** + * Build a RichText from a string-ish expression. Runtime `${...}` spans + * compile to scratch-var stores (emitted NOW, before the SAY) + FMT atoms. + */ + private richText(node: ts.Expression, fmtUsed: { n: number }): RichText { + const st = this.tryStatic(node); + if (st.ok) { + if (typeof st.value !== "string") throw this.err(node, "expected text"); + return richFromString(st.value); + } + let e = node; + while (ts.isParenthesizedExpression(e) || ts.isAsExpression(e)) e = e.expression; + if (ts.isTemplateExpression(e)) { + const rt: RichText = [...richFromString(e.head.text)]; + for (const span of e.templateSpans) { + const r = this.tryStatic(span.expression); + if (r.ok) { + rt.push(...richFromString(String(r.value))); + } else { + if (fmtUsed.n >= SCRATCH_SLOTS) { + throw this.err(span.expression, `too many runtime \${...} slots (max ${SCRATCH_SLOTS} per statement)`); + } + const scratch = VAR_SCRATCH_BASE + fmtUsed.n++; + this.compileExpr(span.expression); + this.u8(OP.STV); + this.u8(scratch); + rt.push({ fmtVar: scratch }); + } + rt.push(...richFromString(span.literal.text)); + } + return rt; + } + throw this.err(node, "text must be a string literal, a template literal, or a compile-time constant"); + } + + // --- expressions --------------------------------------------------------------- + /** Compile an expression; leaves exactly one i16 on the VM stack. */ + compileExpr(node: ts.Expression): void { + this.lastChoiceOptions = undefined; + + const st = this.tryStatic(node); + if (st.ok) { + const v = st.value; + if (typeof v === "number") return this.emitPush(v, node); + if (typeof v === "boolean") return this.emitPush(v ? 1 : 0, node); + throw this.err(node, `a ${Array.isArray(v) ? "array" : typeof v} constant cannot be a runtime value`); + } + + if (ts.isParenthesizedExpression(node) || ts.isAsExpression(node)) return this.compileExpr(node.expression); + + // yield* — value ops and value macros + const inner = this.yieldStar(node); + if (inner) return this.compileYieldValue(node, inner); + + if (ts.isIdentifier(node)) { + const b = this.scopes.lookup(node.text); + if (!b) throw this.err(node, `unknown identifier "${node.text}" (locals, v.*, f.* and constants only)`); + if (b.kind === "local") { + this.u8(OP.LDL); + this.u8(b.slot); + this.lastChoiceOptions = b.choiceOptions; + return; + } + throw this.err(node, `"${node.text}" cannot be used as a value here`); + } + + const g = this.globalRef(node); + if (g) { + this.u8(g.kind === "var" ? OP.LDV : OP.FLAG); + this.u8(g.id); + return; + } + + if (ts.isPrefixUnaryExpression(node)) { + switch (node.operator) { + case ts.SyntaxKind.ExclamationToken: + this.compileExpr(node.operand); + this.u8(OP.NOT); + return; + case ts.SyntaxKind.MinusToken: + this.compileExpr(node.operand); + this.u8(OP.NEG); + return; + default: + throw this.err(node, "unsupported unary operator"); + } + } + + if (ts.isBinaryExpression(node)) return this.compileBinary(node); + + if (ts.isConditionalExpression(node)) { + this.compileExpr(node.condition); + const toElse = this.jump(OP.JZ); + this.compileExpr(node.whenTrue); + const toEnd = this.jump(OP.JMP); + this.patch(toElse); + this.compileExpr(node.whenFalse); + this.patch(toEnd); + return; + } + + throw this.err(node, "unsupported expression in a script"); + } + + private compileBinary(node: ts.BinaryExpression): void { + const k = node.operatorToken.kind; + // Assignment used as an expression is not supported (statement only). + if ( + k === ts.SyntaxKind.EqualsToken || + k === ts.SyntaxKind.PlusEqualsToken || + k === ts.SyntaxKind.MinusEqualsToken + ) { + throw this.err(node, "assignments are statements, not expressions, in scripts"); + } + if (k === ts.SyntaxKind.AmpersandAmpersandToken) { + // JS semantics: a && b -> a if falsy else b + this.compileExpr(node.left); + this.u8(OP.DUP); + const short = this.jump(OP.JZ); + this.u8(OP.POP); + this.compileExpr(node.right); + this.patch(short); + return; + } + if (k === ts.SyntaxKind.BarBarToken) { + this.compileExpr(node.left); + this.u8(OP.DUP); + const short = this.jump(OP.JNZ); + this.u8(OP.POP); + this.compileExpr(node.right); + this.patch(short); + return; + } + + // choice-string comparisons: `pick === "Battle"` + const strCmp = this.tryChoiceStringCompare(node); + if (strCmp) return; + + const table: Partial> = { + [ts.SyntaxKind.PlusToken]: OP.ADD, + [ts.SyntaxKind.MinusToken]: OP.SUB, + [ts.SyntaxKind.AsteriskToken]: OP.MUL, + [ts.SyntaxKind.SlashToken]: OP.DIV, + [ts.SyntaxKind.PercentToken]: OP.MOD, + [ts.SyntaxKind.EqualsEqualsEqualsToken]: OP.EQ, + [ts.SyntaxKind.ExclamationEqualsEqualsToken]: OP.NE, + [ts.SyntaxKind.LessThanToken]: OP.LT, + [ts.SyntaxKind.GreaterThanToken]: OP.GT, + [ts.SyntaxKind.LessThanEqualsToken]: OP.LE, + [ts.SyntaxKind.GreaterThanEqualsToken]: OP.GE, + }; + if (k === ts.SyntaxKind.EqualsEqualsToken || k === ts.SyntaxKind.ExclamationEqualsToken) { + throw this.err(node, "use === / !== in scripts"); + } + const op = table[k]; + if (op === undefined) throw this.err(node, "unsupported binary operator"); + this.compileExpr(node.left); + const leftChoice = this.lastChoiceOptions; + this.compileExpr(node.right); + this.lastChoiceOptions = leftChoice; // (only meaningful for ===/!== path) + this.u8(op); + this.lastChoiceOptions = undefined; + } + + /** `pick === "Battle"` where pick carries choice metadata. */ + private tryChoiceStringCompare(node: ts.BinaryExpression): boolean { + const k = node.operatorToken.kind; + if (k !== ts.SyntaxKind.EqualsEqualsEqualsToken && k !== ts.SyntaxKind.ExclamationEqualsEqualsToken) return false; + const sides = [ + { val: node.left, str: node.right }, + { val: node.right, str: node.left }, + ]; + for (const { val, str } of sides) { + const s = this.tryStatic(str); + if (!s.ok || typeof s.value !== "string") continue; + if (!ts.isIdentifier(val)) continue; + const b = this.scopes.lookup(val.text); + if (b?.kind !== "local" || !b.choiceOptions) continue; + const idx = b.choiceOptions.indexOf(s.value); + if (idx < 0) { + throw this.err(str, `"${s.value}" is not one of the choices [${b.choiceOptions.join(", ")}]`); + } + this.u8(OP.LDL); + this.u8(b.slot); + this.emitPush(idx, node); + this.u8(k === ts.SyntaxKind.EqualsEqualsEqualsToken ? OP.EQ : OP.NE); + return true; + } + return false; + } + + // --- yield* value position --------------------------------------------------- + private compileYieldValue(node: ts.Expression, inner: ts.Expression): void { + const call = this.opsCall(inner); + if (call) { + switch (call.op) { + case "choose": { + const options = this.chooseOptions(call); + this.emitChoice(options, call.call); + this.lastChoiceOptions = options; + return; + } + case "rnd": { + if (call.args.length !== 1) throw this.err(call.call, "s.rnd(n) takes one argument"); + this.compileExpr(call.args[0]); + this.u8(OP.RND); + return; + } + default: + throw this.err(call.call, `s.${call.op}() does not produce a value`); + } + } + // value macro + if (ts.isCallExpression(inner) && ts.isIdentifier(inner.expression)) { + const helper = this.sites.helpers.get(inner.expression.text); + if (helper) { + this.inlineMacro(inner, helper, /*wantValue*/ true); + return; + } + } + throw this.err(node, "yield* here must be a value op (s.choose/s.rnd) or a helper generator"); + } + + private chooseOptions(call: { args: readonly ts.Expression[]; call: ts.CallExpression }): string[] { + if (call.args.length !== 1) throw this.err(call.call, "s.choose([...options]) takes one array argument"); + const v = this.staticOrThrow(call.args[0], "choice options"); + if (!Array.isArray(v) || v.some((o) => typeof o !== "string")) { + throw this.err(call.call, "choice options must be an array of strings"); + } + return v as string[]; + } + + private emitChoice(options: string[], node: ts.Node): void { + const max = this.ctx.target.maxChoices; + if (options.length < 1 || options.length > max) { + throw this.err(node, `choose() needs 1..${max} options on ${this.ctx.target.name} (got ${options.length})`); + } + this.u8(RPG_OP.CHOICE); + this.u8(options.length); + for (const o of options) this.u16(this.ctx.internOption(richFromString(o), this.where(node))); + } + + // --- statements ----------------------------------------------------------------- + compileBody(): void { + const body = this.site.fn.body; + this.compileBlockStatements(body.statements); + this.u8(OP.RET); + } + + private compileBlockStatements(stmts: readonly ts.Statement[]): void { + // Locals die with their scope, so their slots are reclaimable: restore + // the allocator on scope exit (the VM has no closures — nothing outlives + // its block). + const savedSlots = this.nextSlot; + this.scopes = new Scope(this.scopes); + for (const s of stmts) this.compileStatement(s); + this.scopes = this.scopes.parent!; + this.nextSlot = savedSlots; + } + + private compileStatement(s: ts.Statement): void { + if (ts.isVariableStatement(s)) return this.compileVarDecl(s); + if (ts.isExpressionStatement(s)) return this.compileExprStatement(s.expression); + if (ts.isIfStatement(s)) return this.compileIf(s); + if (ts.isWhileStatement(s)) return this.compileWhile(s); + if (ts.isForStatement(s)) return this.compileFor(s); + if (ts.isForOfStatement(s)) return this.compileForOf(s); + if (ts.isSwitchStatement(s)) return this.compileSwitch(s); + if (ts.isBreakStatement(s)) { + const loop = this.loops[this.loops.length - 1]; + if (!loop) throw this.err(s, "break outside a loop (switch breaks are handled inline)"); + loop.breaks.push(this.jump(OP.JMP)); + return; + } + if (ts.isContinueStatement(s)) { + const loop = this.loops[this.loops.length - 1]; + if (!loop) throw this.err(s, "continue outside a loop"); + if (loop.continueTarget !== undefined) this.patch(this.jump(OP.JMP), loop.continueTarget); + else loop.continues.push(this.jump(OP.JMP)); + return; + } + if (ts.isReturnStatement(s)) return this.compileReturn(s); + if (ts.isBlock(s)) return this.compileBlockStatements(s.statements); + if (s.kind === ts.SyntaxKind.EmptyStatement) return; + throw this.err(s, "unsupported statement in a script"); + } + + private compileVarDecl(s: ts.VariableStatement): void { + const isConst = (s.declarationList.flags & ts.NodeFlags.Const) !== 0; + for (const d of s.declarationList.declarations) { + if (!ts.isIdentifier(d.name)) throw this.err(d, "destructuring is not supported in scripts"); + if (!d.initializer) throw this.err(d, "script locals need an initializer"); + const st = this.tryStatic(d.initializer); + if (isConst && st.ok) { + this.scopes.declare(d.name.text, { kind: "const", value: st.value }); + continue; + } + const slot = this.allocSlot(d); + this.compileExpr(d.initializer); + const choiceOptions = this.lastChoiceOptions; + this.u8(OP.STL); + this.u8(slot); + this.scopes.declare(d.name.text, { kind: "local", slot, choiceOptions }); + } + } + + private compileExprStatement(e: ts.Expression): void { + // assignment / compound assignment / ++ / -- + if (ts.isBinaryExpression(e)) { + const k = e.operatorToken.kind; + const compound: Partial> = { + [ts.SyntaxKind.PlusEqualsToken]: OP.ADD, + [ts.SyntaxKind.MinusEqualsToken]: OP.SUB, + [ts.SyntaxKind.AsteriskEqualsToken]: OP.MUL, + [ts.SyntaxKind.SlashEqualsToken]: OP.DIV, + [ts.SyntaxKind.PercentEqualsToken]: OP.MOD, + }; + if (k === ts.SyntaxKind.EqualsToken) return this.compileAssign(e.left, e.right, undefined, e); + const op = compound[k]; + if (op !== undefined) return this.compileAssign(e.left, e.right, op, e); + } + if (ts.isPrefixUnaryExpression(e) || ts.isPostfixUnaryExpression(e)) { + const k = e.operator; + if (k === ts.SyntaxKind.PlusPlusToken || k === ts.SyntaxKind.MinusMinusToken) { + const one = ts.factory.createNumericLiteral("1"); + // ++x as statement == x += 1 (no value use) + return this.compileAssign( + e.operand, + one, + k === ts.SyntaxKind.PlusPlusToken ? OP.ADD : OP.SUB, + e, + /*syntheticRight*/ true, + ); + } + } + // yield* op / macro in statement position + const inner = this.yieldStar(e); + if (inner) return this.compileYieldStatement(e, inner); + throw this.err(e, "unsupported expression statement (did you forget yield* ?)"); + } + + private compileAssign( + target: ts.Expression, + rhs: ts.Expression, + compoundOp: number | undefined, + node: ts.Node, + syntheticRight = false, + ): void { + // local + if (ts.isIdentifier(target)) { + const b = this.scopes.lookup(target.text); + if (!b) throw this.err(target, `unknown identifier "${target.text}"`); + if (b.kind !== "local") throw this.err(target, `cannot assign to "${target.text}"`); + if (compoundOp !== undefined) { + this.u8(OP.LDL); + this.u8(b.slot); + } + if (syntheticRight) this.emitPush(1, node); + else this.compileExpr(rhs); + if (compoundOp !== undefined) this.u8(compoundOp); + this.u8(OP.STL); + this.u8(b.slot); + return; + } + // v.name / f.name + const g = this.globalRef(target); + if (g?.kind === "var") { + if (compoundOp !== undefined) { + this.u8(OP.LDV); + this.u8(g.id); + } + if (syntheticRight) this.emitPush(1, node); + else this.compileExpr(rhs); + if (compoundOp !== undefined) this.u8(compoundOp); + this.u8(OP.STV); + this.u8(g.id); + return; + } + if (g?.kind === "flag") { + if (compoundOp !== undefined) throw this.err(node, "flags only support plain assignment"); + const st = this.tryStatic(rhs); + if (st.ok && typeof st.value === "boolean") { + this.u8(st.value ? OP.SETF : OP.CLRF); + this.u8(g.id); + return; + } + this.compileExpr(rhs); + this.u8(OP.STF); + this.u8(g.id); + return; + } + throw this.err(target, "assignment target must be a local, v., or f."); + } + + private compileYieldStatement(node: ts.Expression, inner: ts.Expression): void { + const call = this.opsCall(inner); + if (call) return this.compileOpStatement(call); + if (ts.isCallExpression(inner) && ts.isIdentifier(inner.expression)) { + const helper = this.sites.helpers.get(inner.expression.text); + if (helper) return this.inlineMacro(inner, helper, /*wantValue*/ false); + throw this.err(inner, `"${inner.expression.text}" is not a helper generator in this file`); + } + throw this.err(node, "yield* must call an s.* op or a helper generator"); + } + + private compileOpStatement(call: { op: string; args: readonly ts.Expression[]; call: ts.CallExpression }): void { + const { op, args, call: node } = call; + const where = this.where(node); + switch (op) { + case "say": { + if (args.length !== 1) throw this.err(node, "s.say(text) takes one argument"); + const fmtUsed = { n: 0 }; + const rt = this.richText(args[0], fmtUsed); + const pages = this.ctx.internPages(rt, where); + for (const id of pages) { + this.u8(RPG_OP.SAY); + this.u16(id); + } + return; + } + case "choose": { + // choose in statement position: emit + drop the result + const options = this.chooseOptions({ args, call: node }); + this.emitChoice(options, node); + this.u8(OP.POP); + return; + } + case "rnd": + throw this.err(node, "s.rnd() result is unused — assign it or use it in an expression"); + case "wait": { + if (args.length !== 1) throw this.err(node, "s.wait(frames) takes one argument"); + this.compileExpr(args[0]); + this.u8(OP.WAIT); + return; + } + case "lock": + this.u8(RPG_OP.LOCK); + return; + case "release": + this.u8(RPG_OP.RELEASE); + return; + case "face": { + if (args.length === 0) { + this.u8(RPG_OP.FACE); + this.u8(FACE_SELF); + return; + } + const id = this.staticOrThrow(args[0], "actor id"); + if (typeof id !== "string") throw this.err(node, "s.face(actorId) takes an actor id string"); + this.u8(RPG_OP.FACE); + this.ctx.actorFixups.push({ at: this.code.length + this.fixupBase(), actorId: id, where }); + this.u8(0); + return; + } + case "show": + case "hide": { + if (args.length !== 1) throw this.err(node, `s.${op}(actorId) takes one argument`); + const id = this.staticOrThrow(args[0], "actor id"); + if (typeof id !== "string") throw this.err(node, "actor id must be a string"); + this.u8(RPG_OP.AVIS); + this.ctx.actorFixups.push({ at: this.code.length + this.fixupBase(), actorId: id, where }); + this.u8(0); + this.u8(op === "show" ? 1 : 0); + return; + } + case "warp": { + if (args.length !== 1) throw this.err(node, 's.warp("map:entrance") takes one argument'); + const dest = this.staticOrThrow(args[0], "warp destination"); + if (typeof dest !== "string" || !dest.includes(":")) { + throw this.err(node, 'warp destination must be "map:entrance"'); + } + this.u8(RPG_OP.WARP); + this.ctx.warpFixups.push({ at: this.code.length + this.fixupBase(), dest, where }); + this.u8(0); + this.u8(0); + this.u8(0); + this.u8(0); + return; + } + case "sfx": { + if (args.length !== 1) throw this.err(node, "s.sfx(name) takes one argument"); + const name = this.staticOrThrow(args[0], "sfx name"); + const key = String(name).toUpperCase() as keyof typeof SFX; + if (!(key in SFX)) throw this.err(node, `unknown sfx "${name}" (${Object.keys(SFX).join(", ").toLowerCase()})`); + this.u8(RPG_OP.SFX); + this.u8(SFX[key]); + return; + } + case "faceDir": { + // authoring aid used by cutscenes: turn the player. Encoded as a + // warp-in-place? No — v1 keeps player facing implicit; reject. + throw this.err(node, "s.faceDir is not part of the v1 surface"); + } + case "call": { + if (args.length !== 1 || !ts.isIdentifier(args[0])) { + throw this.err(node, "s.call(ScriptName) takes a top-level script const"); + } + const id = this.sites.scriptIds.get(args[0].text); + if (id === undefined) throw this.err(args[0], `"${args[0].text}" is not a top-level script(...) const`); + this.u8(OP.CALL); + this.u16(id); + return; + } + default: + throw this.err(node, `unknown script op s.${op}()`); + } + } + + /** Fixup offsets are recorded blob-relative by the link stage; during a + * single script compile they are code-relative (base 0) and shifted later. */ + private fixupBase(): number { + return 0; + } + + private compileIf(s: ts.IfStatement): void { + // Statically-decidable conditions drop the dead branch (macro staples). + const st = this.tryStatic(s.expression); + if (st.ok) { + const taken = !!st.value; + if (taken) this.compileStatement(s.thenStatement); + else if (s.elseStatement) this.compileStatement(s.elseStatement); + return; + } + this.compileExpr(s.expression); + const toElse = this.jump(OP.JZ); + this.compileStatement(s.thenStatement); + if (s.elseStatement) { + const toEnd = this.jump(OP.JMP); + this.patch(toElse); + this.compileStatement(s.elseStatement); + this.patch(toEnd); + } else { + this.patch(toElse); + } + } + + private compileWhile(s: ts.WhileStatement): void { + const loopStart = this.code.length; + const st = this.tryStatic(s.expression); + let toEnd: number | undefined; + if (st.ok) { + if (!st.value) return; // while(false) — dead + // while(true): no test + } else { + this.compileExpr(s.expression); + toEnd = this.jump(OP.JZ); + } + this.loops.push({ breaks: [], continues: [], continueTarget: loopStart }); + this.compileStatement(s.statement); + this.patch(this.jump(OP.JMP), loopStart); + if (toEnd !== undefined) this.patch(toEnd); + const loop = this.loops.pop()!; + for (const b of loop.breaks) this.patch(b); + } + + private compileFor(s: ts.ForStatement): void { + const savedSlots = this.nextSlot; + this.scopes = new Scope(this.scopes); + if (s.initializer) { + if (ts.isVariableDeclarationList(s.initializer)) { + this.compileVarDecl( + ts.factory.createVariableStatement(undefined, s.initializer) as ts.VariableStatement & { + declarationList: ts.VariableDeclarationList; + }, + ); + } else { + this.compileExprStatement(s.initializer); + } + } + const loopStart = this.code.length; + let toEnd: number | undefined; + if (s.condition) { + this.compileExpr(s.condition); + toEnd = this.jump(OP.JZ); + } + this.loops.push({ breaks: [], continues: [] }); + this.compileStatement(s.statement); + const loop = this.loops.pop()!; + const continueTarget = this.code.length; + for (const c of loop.continues) this.patch(c, continueTarget); + if (s.incrementor) this.compileExprStatement(s.incrementor); + this.patch(this.jump(OP.JMP), loopStart); + if (toEnd !== undefined) this.patch(toEnd); + for (const b of loop.breaks) this.patch(b); + this.scopes = this.scopes.parent!; + this.nextSlot = savedSlots; + } + + private compileForOf(s: ts.ForOfStatement): void { + // Unrolled iteration over a compile-time array (macro workhorse). + if (!ts.isVariableDeclarationList(s.initializer) || s.initializer.declarations.length !== 1) { + throw this.err(s, "for...of needs `for (const x of )`"); + } + const decl = s.initializer.declarations[0]; + if (!ts.isIdentifier(decl.name)) throw this.err(decl, "for...of variable must be an identifier"); + const arr = this.staticOrThrow(s.expression, "for...of iterable"); + if (!Array.isArray(arr)) throw this.err(s.expression, "for...of iterates a compile-time array"); + for (const item of arr) { + this.scopes = new Scope(this.scopes); + this.scopes.declare(decl.name.text, { kind: "const", value: item }); + this.compileStatement(s.statement); + this.scopes = this.scopes.parent!; + } + } + + private compileSwitch(s: ts.SwitchStatement): void { + this.compileExpr(s.expression); + const choiceOptions = this.lastChoiceOptions ?? this.switchDiscriminantChoices(s.expression); + const slot = this.allocSlot(s); // hidden discriminant temp + this.u8(OP.STL); + this.u8(slot); + + const clauses = s.caseBlock.clauses; + const bodyJumps = new Map(); + let defaultIdx = -1; + clauses.forEach((clause, i) => { + if (ts.isDefaultClause(clause)) { + if (defaultIdx >= 0) throw this.err(clause, "duplicate default"); + defaultIdx = i; + return; + } + const label = this.staticOrThrow(clause.expression, "case label"); + let val: number; + if (typeof label === "number") { + val = label; + } else if (typeof label === "string") { + if (!choiceOptions) throw this.err(clause, "string case labels need a choice-valued switch"); + val = choiceOptions.indexOf(label); + if (val < 0) throw this.err(clause, `"${label}" is not one of [${choiceOptions.join(", ")}]`); + } else { + throw this.err(clause, "case label must be a number or a choice string"); + } + this.u8(OP.LDL); + this.u8(slot); + this.emitPush(val, clause); + this.u8(OP.EQ); + bodyJumps.set(i, this.jump(OP.JNZ)); + }); + const fall = this.jump(OP.JMP); + + // switch participates in break like a loop (break exits the switch) + this.loops.push({ breaks: [], continues: [], continueTarget: undefined }); + const bodyOffsets: number[] = []; + clauses.forEach((clause, i) => { + bodyOffsets[i] = this.code.length; + const j = bodyJumps.get(i); + if (j !== undefined) this.patch(j, bodyOffsets[i]); + if (i === defaultIdx) this.patch(fall, bodyOffsets[i]); + this.compileBlockStatements(clause.statements); + }); + const loop = this.loops.pop()!; + if (loop.continues.length) throw this.err(s, "continue inside switch is not supported"); + const end = this.code.length; + if (defaultIdx < 0) this.patch(fall, end); + for (const b of loop.breaks) this.patch(b, end); + this.nextSlot = slot; // the hidden discriminant temp is dead now + } + + /** switch (yield* s.choose([...])) — metadata via direct inspection. */ + private switchDiscriminantChoices(e: ts.Expression): string[] | undefined { + const inner = this.yieldStar(e); + if (!inner) return undefined; + const call = this.opsCall(inner); + if (call?.op === "choose") return this.chooseOptions(call); + return undefined; + } + + private compileReturn(s: ts.ReturnStatement): void { + const macro = this.macros[this.macros.length - 1]; + if (macro) { + if (s.expression) { + if (macro.resultSlot === undefined) { + throw this.err(s, "this helper is used as a statement — `return ` has nowhere to go"); + } + this.compileExpr(s.expression); + this.u8(OP.STL); + this.u8(macro.resultSlot); + } + macro.endJumps.push(this.jump(OP.JMP)); + return; + } + if (s.expression) throw this.err(s, "scripts cannot return a value; use plain `return;`"); + this.u8(OP.RET); + } + + // --- macro inlining ------------------------------------------------------------- + private inlineMacro( + call: ts.CallExpression, + helper: ts.FunctionExpression | ts.FunctionDeclaration, + wantValue: boolean, + ): void { + const name = ts.isIdentifier(call.expression) ? call.expression.text : ""; + if (this.expansion.includes(name)) { + throw this.err(call, `recursive macro expansion: ${[...this.expansion, name].join(" -> ")}`); + } + if (this.expansion.length >= 8) throw this.err(call, "macro expansion too deep (8)"); + if (!helper.body) throw this.err(call, `helper "${name}" has no body`); + + // Bind parameters: role identifiers pass through; everything else must be + // a compile-time constant. + const outer = this.scopes; + const macroScope = new Scope(); // macros do NOT see the caller's locals + helper.parameters.forEach((p, i) => { + if (!ts.isIdentifier(p.name)) throw this.err(p, "helper parameters must be identifiers"); + const arg = call.arguments[i]; + if (arg === undefined) { + if (p.initializer) { + const dv = this.tryStatic(p.initializer); + if (!dv.ok) throw this.err(p, "helper default values must be compile-time constants"); + macroScope.declare(p.name.text, { kind: "const", value: dv.value }); + return; + } + throw this.err(call, `helper "${name}" expects argument #${i + 1} (${p.name.text})`); + } + const role = this.roleOf(arg); + if (role) { + macroScope.declare(p.name.text, { kind: "role", role }); + return; + } + const st = this.tryStatic(arg); + if (!st.ok) { + throw this.err( + arg, + `macro argument "${p.name.text}" must be a compile-time constant (or the s/v/f handles)`, + ); + } + macroScope.declare(p.name.text, { kind: "const", value: st.value }); + }); + + const macro: MacroCtx = { endJumps: [], resultSlot: wantValue ? this.allocSlot(call) : undefined }; + if (macro.resultSlot !== undefined) { + // default result 0 on fallthrough + this.emitPush(0, call); + this.u8(OP.STL); + this.u8(macro.resultSlot); + } + this.macros.push(macro); + this.expansion.push(name); + this.scopes = macroScope; + this.compileBlockStatements(helper.body.statements); + this.scopes = outer; + this.expansion.pop(); + this.macros.pop(); + const end = this.code.length; + for (const j of macro.endJumps) this.patch(j, end); + if (macro.resultSlot !== undefined) { + this.u8(OP.LDL); + this.u8(macro.resultSlot); + } + } +} + +// --------------------------------------------------------------------------- +// Whole-module compile: every script site -> one blob + id table. +// --------------------------------------------------------------------------- +export interface CompiledScripts { + blob: Uint8Array; + /** Byte offset of each script id in the blob. */ + table: number[]; +} + +export function compileScripts(sites: Sites, ctx: Ctx): CompiledScripts { + const chunks: number[][] = []; + const table: number[] = []; + let base = 0; + for (const site of sites.scripts) { + const before = { warp: ctx.warpFixups.length, actor: ctx.actorFixups.length }; + const c = new ScriptCompiler(site, sites, ctx); + c.compileBody(); + // shift this script's fixups to blob-relative offsets + for (let i = before.warp; i < ctx.warpFixups.length; i++) ctx.warpFixups[i].at += base; + for (let i = before.actor; i < ctx.actorFixups.length; i++) ctx.actorFixups[i].at += base; + table.push(base); + chunks.push(c.code); + base += c.code.length; + } + const blob = new Uint8Array(base); + let at = 0; + for (const c of chunks) { + blob.set(c, at); + at += c.length; + } + return { blob, table }; +} diff --git a/static/compiler/sites.ts b/static/compiler/sites.ts new file mode 100644 index 0000000..9a2738f --- /dev/null +++ b/static/compiler/sites.ts @@ -0,0 +1,70 @@ +// static/compiler/sites.ts — find the residual zone in a game module: every +// `script(function* (...) {...})` call site (in source order — the same order +// the executed declaration zone registers them, since both follow top-level +// statement order), plus the helper generator functions macros expand from. + +import ts from "typescript"; + +export interface ScriptSite { + id: number; + fn: ts.FunctionExpression; + /** The const name it is bound to, if any (enables s.call(Name)). */ + name?: string; +} + +export interface Sites { + file: ts.SourceFile; + scripts: ScriptSite[]; + /** const/function name -> generator AST usable as an inline macro. */ + helpers: Map; + /** const name -> script id (for s.call resolution). */ + scriptIds: Map; +} + +export function parseSource(sourceText: string, fileName = "game.ts"): ts.SourceFile { + return ts.createSourceFile(fileName, sourceText, ts.ScriptTarget.ES2022, true); +} + +const isScriptCall = (node: ts.Node): node is ts.CallExpression => + ts.isCallExpression(node) && + ts.isIdentifier(node.expression) && + node.expression.text === "script" && + node.arguments.length === 1 && + ts.isFunctionExpression(node.arguments[0]) && + node.arguments[0].asteriskToken !== undefined; + +export function collectSites(file: ts.SourceFile): Sites { + const scripts: ScriptSite[] = []; + const helpers = new Map(); + const scriptIds = new Map(); + + const visit = (node: ts.Node, constName?: string): void => { + if (isScriptCall(node)) { + const id = scripts.length; + scripts.push({ id, fn: node.arguments[0] as ts.FunctionExpression, name: constName }); + if (constName !== undefined) scriptIds.set(constName, id); + return; // do not descend into script bodies looking for more sites + } + if (ts.isVariableStatement(node)) { + for (const d of node.declarationList.declarations) { + if (!ts.isIdentifier(d.name) || !d.initializer) continue; + if (isScriptCall(d.initializer)) { + visit(d.initializer, d.name.text); + } else if (ts.isFunctionExpression(d.initializer) && d.initializer.asteriskToken) { + helpers.set(d.name.text, d.initializer); + } else { + ts.forEachChild(d.initializer, (c) => visit(c)); + } + } + return; + } + if (ts.isFunctionDeclaration(node) && node.asteriskToken && node.name) { + helpers.set(node.name.text, node); + return; + } + ts.forEachChild(node, (c) => visit(c)); + }; + ts.forEachChild(file, (c) => visit(c)); + + return { file, scripts, helpers, scriptIds }; +} diff --git a/static/compiler/targets/gb.ts b/static/compiler/targets/gb.ts new file mode 100644 index 0000000..74f83f2 --- /dev/null +++ b/static/compiler/targets/gb.ts @@ -0,0 +1,6 @@ +// static/compiler/targets/gb.ts — Game Boy packager. (Being built.) +import type { LinkedGame } from "../link.ts"; + +export async function buildGb(_linked: LinkedGame, _outRom: string): Promise { + throw new Error("gb target: not implemented yet"); +} diff --git a/static/compiler/targets/gba.ts b/static/compiler/targets/gba.ts new file mode 100644 index 0000000..77b14b0 --- /dev/null +++ b/static/compiler/targets/gba.ts @@ -0,0 +1,158 @@ +// static/compiler/targets/gba.ts — the GBA packager: native 4bpp art, one +// generated gen_data.c (flat ROM keeps every blob addressable), and the +// arm-none-eabi toolchain drive + cartridge header patch. + +import { $ } from "bun"; +import { dirname, join } from "node:path"; +import { FONT_GLYPHS, TARGETS, bgLayout } from "../../spec/isa.ts"; +import { SPRITE_ENTRY_SIZE } from "../../spec/rpg.ts"; +import { + encodeTileGba, + frameToTiles, + gbaPaletteBank, + glyphTile, + tileFromHexRows, +} from "../assets.ts"; +import { FONT8 } from "../font.gen.ts"; +import type { LinkedGame } from "../link.ts"; + +const RUNTIME = join(import.meta.dir, "..", "..", "runtime"); + +// GBA text ink/paper pixel values inside font tiles (palette bank 15). +const INK = 1; +const PAPER = 2; + +export interface GbaArtifacts { + genC: string; +} + +export function emitGbaData(linked: LinkedGame): string { + const { model } = linked; + const t = TARGETS.gba; + const L = bgLayout(t); + const lines: string[] = []; + const push = (s: string) => lines.push(s); + + const cArray = (name: string, bytes: ArrayLike, type = "unsigned char"): void => { + const vals: string[] = []; + for (let i = 0; i < bytes.length; i++) vals.push(String(bytes[i])); + push(`const ${type} ${name}[] = { ${vals.join(",")} };`); + }; + + push("/* gen_data.c — GENERATED by targets/gba.ts. DO NOT EDIT. */"); + push('#include "spec_gen.h"'); + push("typedef unsigned char u8; typedef unsigned short u16;"); + + // Fixed-region tables. + cArray("ps_game_header", linked.header, "u8"); + { + const vals = linked.scriptTable.map(String).join(","); + push(`const u16 ps_script_table[] = { ${vals} };`); + } + { + const b: number[] = []; + for (const e of linked.textTable) b.push(e.blob, e.off & 0xff, (e.off >> 8) & 0xff); + cArray("ps_text_table", b, "u8"); + } + cArray("ps_map_blob", linked.mapBlobIndex, "u8"); + + // Blobs. + linked.blobs.forEach((b, i) => cArray(`ps_blob_${i}`, b.bytes, "u8")); + push(`const u8 *const ps_blobs[] = { ${linked.blobs.map((_, i) => `ps_blob_${i}`).join(",")} };`); + + // BG art tiles (index 1..N; blank is index 0 and stays zero-filled). + const art: number[] = []; + for (let i = 1; i < model.tileNames.length; i++) { + const tile = model.tileset.tiles[model.tileNames[i]]; + art.push(...encodeTileGba(tileFromHexRows(tile.px))); + } + cArray("ps_bg_art", art, "u8"); + push(`const u16 ps_bg_art_tiles = ${model.tileNames.length - 1};`); + + // Font tiles (95 glyphs at the fixed base). + const font: number[] = []; + for (let g = 0; g < FONT_GLYPHS; g++) { + font.push(...encodeTileGba(glyphTile(FONT8[g], INK, PAPER))); + } + cArray("ps_font", font, "u8"); + + // OBJ tiles + sprite table. GBA 1D mapping: frame block = TL,TR,BL,BR. + const objBytes: number[] = []; + const spriteTable: number[] = []; + let tileBase = 0; + model.sprites.forEach((sp, si) => { + const framesPerDir = sp.facings.down.length; + spriteTable.push(tileBase & 0xff, (tileBase >> 8) & 0xff, framesPerDir, si); + for (const facing of ["down", "up", "right"] as const) { + for (const frame of sp.facings[facing]) { + for (const tile of frameToTiles(frame)) objBytes.push(...encodeTileGba(tile)); + tileBase += 4; + } + } + }); + if (spriteTable.length !== model.sprites.length * SPRITE_ENTRY_SIZE) { + throw new Error("sprite table drifted"); + } + cArray("ps_obj_tiles", objBytes, "u8"); + push(`const u16 ps_obj_tile_count = ${tileBase};`); + cArray("ps_sprite_table", spriteTable, "u8"); + push(`const u8 ps_sprite_count = ${model.sprites.length};`); + + // Palettes: BG bank 0 = tileset, BG bank 15 = textbox; OBJ bank i = sprite i. + cArray("ps_bg_pal0", Array.from(gbaPaletteBank(model.tileset.palette)), "u16"); + const textPal = new Uint16Array(16); + textPal[INK] = 0x0000; // black ink + textPal[PAPER] = 0x7fff; // white paper + cArray("ps_text_pal", Array.from(textPal), "u16"); + { + const objPal: number[] = []; + for (const sp of model.sprites) objPal.push(...gbaPaletteBank(sp.palette)); + cArray("ps_obj_pal", objPal, "u16"); + } + push(`const u16 ps_bg_font_base = ${L.fontBase};`); + + return lines.join("\n") + "\n"; +} + +// The GBA BIOS validates these 156 bytes at boot on real hardware; every +// homebrew toolchain (gbafix, devkitARM, tonc) ships the same table. +// prettier-ignore +const NINTENDO_LOGO = [ + 0x24,0xFF,0xAE,0x51,0x69,0x9A,0xA2,0x21,0x3D,0x84,0x82,0x0A,0x84,0xE4,0x09,0xAD, + 0x11,0x24,0x8B,0x98,0xC0,0x81,0x7F,0x21,0xA3,0x52,0xBE,0x19,0x93,0x09,0xCE,0x20, + 0x10,0x46,0x4A,0x4A,0xF8,0x27,0x31,0xEC,0x58,0xC7,0xE8,0x33,0x82,0xE3,0xCE,0xBF, + 0x85,0xF4,0xDF,0x94,0xCE,0x4B,0x09,0xC1,0x94,0x56,0x8A,0xC0,0x13,0x72,0xA7,0xFC, + 0x9F,0x84,0x4D,0x73,0xA3,0xCA,0x9A,0x61,0x58,0x97,0xA3,0x27,0xFC,0x03,0x98,0x76, + 0x23,0x1D,0xC7,0x61,0x03,0x04,0xAE,0x56,0xBF,0x38,0x84,0x00,0x40,0xA7,0x0E,0xFD, + 0xFF,0x52,0xFE,0x03,0x6F,0x95,0x30,0xF1,0x97,0xFB,0xC0,0x85,0x60,0xD6,0x80,0x25, + 0xA9,0x63,0xBE,0x03,0x01,0x4E,0x38,0xE2,0xF9,0xA2,0x34,0xFF,0xBB,0x3E,0x03,0x44, + 0x78,0x00,0x90,0xCB,0x88,0x11,0x3A,0x94,0x65,0xC0,0x7C,0x63,0x87,0xF0,0x3C,0xAF, + 0xD6,0x25,0xE4,0x8B,0x38,0x0A,0xAC,0x72,0x21,0xD4,0xF8,0x07, +]; + +export async function buildGba(linked: LinkedGame, outRom: string): Promise { + const outDir = dirname(outRom); + const genDir = join(outDir, "gen-gba"); + await $`mkdir -p ${genDir}`.quiet(); + await Bun.write(join(genDir, "gen_data.c"), emitGbaData(linked)); + + const gbaDir = join(RUNTIME, "gba"); + const coreDir = join(RUNTIME, "core"); + const genInc = join(RUNTIME, "gen"); + const elf = join(genDir, "game.elf"); + + await $`arm-none-eabi-gcc -mcpu=arm7tdmi -mthumb-interwork -marm -ffreestanding -nostdlib -O2 -fno-strict-aliasing -Wall -Werror=implicit-function-declaration -DPS_TARGET_GBA -I${genInc} -I${coreDir} -I${gbaDir} -T${gbaDir}/gba.ld ${gbaDir}/crt0.s ${coreDir}/vm.c ${coreDir}/rpg.c ${gbaDir}/hal_gba.c ${join(genDir, "gen_data.c")} -lgcc -o ${elf}`; + await $`arm-none-eabi-objcopy -O binary ${elf} ${outRom}`; + + // Cartridge header: logo + title + checksum (flashcart-friendly). + const rom = new Uint8Array(await Bun.file(outRom).arrayBuffer()); + rom.set(NINTENDO_LOGO, 0x04); + const title = linked.model.title.toUpperCase().replace(/[^A-Z0-9 ]/g, "").slice(0, 12); + for (let i = 0; i < 12; i++) rom[0xa0 + i] = i < title.length ? title.charCodeAt(i) : 0; + rom.set([0x50, 0x53, 0x54, 0x43], 0xac); // game code "PSTC" + rom[0xb2] = 0x96; // fixed value + let sum = 0; + for (let i = 0xa0; i <= 0xbc; i++) sum = (sum + rom[i]) & 0xff; + rom[0xbd] = (-(0x19 + sum)) & 0xff; + await Bun.write(outRom, rom); +} diff --git a/static/compiler/targets/nes.ts b/static/compiler/targets/nes.ts new file mode 100644 index 0000000..f7a0279 --- /dev/null +++ b/static/compiler/targets/nes.ts @@ -0,0 +1,6 @@ +// static/compiler/targets/nes.ts — NES packager. (Being built.) +import type { LinkedGame } from "../link.ts"; + +export async function buildNes(_linked: LinkedGame, _outRom: string): Promise { + throw new Error("nes target: not implemented yet"); +} diff --git a/static/compiler/text.ts b/static/compiler/text.ts new file mode 100644 index 0000000..2d14934 --- /dev/null +++ b/static/compiler/text.ts @@ -0,0 +1,140 @@ +// static/compiler/text.ts — compile-time text layout. The runtime never +// measures: every SAY page and CHOICE option arrives pre-wrapped for the +// target, as a token stream (spec/isa.ts TOK_*). +// +// A page "atom" is either an ASCII char or a FMT slot (which reserves +// FMT_CELLS columns). Wrapping is greedy word-wrap on spaces; explicit \n +// forces a line break; a word longer than a line hard-breaks. + +import { FMT_CELLS, TOK_ASCII_MAX, TOK_ASCII_MIN, TOK_END, TOK_FMT, TOK_NEWLINE, type TargetSpec } from "../spec/isa.ts"; + +export type TextAtom = { ch: string } | { fmtVar: number }; + +/** A logical text: literal runs + runtime format slots. */ +export type RichText = TextAtom[]; + +export function richFromString(s: string): RichText { + const out: RichText = []; + for (const ch of s) out.push({ ch }); + return out; +} + +export function richToDebugString(rt: RichText): string { + return rt.map((a) => ("ch" in a ? a.ch : `{v${a.fmtVar}}`)).join(""); +} + +const atomCells = (a: TextAtom): number => ("ch" in a ? 1 : FMT_CELLS); + +function checkAscii(a: TextAtom, context: string): void { + if ("ch" in a && a.ch !== "\n") { + const c = a.ch.charCodeAt(0); + if (c < TOK_ASCII_MIN || c > TOK_ASCII_MAX) { + throw new Error(`non-ASCII character ${JSON.stringify(a.ch)} in ${context} — v1 text is ASCII-only`); + } + } +} + +/** Split a RichText into lines of at most `cols` cells (no pagination). */ +export function wrapLines(rt: RichText, cols: number, context = "text"): RichText[] { + // Tokenize into words (runs of non-space atoms) and explicit breaks. + type Word = { atoms: RichText; cells: number }; + const lines: RichText[] = []; + let line: RichText = []; + let lineCells = 0; + let word: Word = { atoms: [], cells: 0 }; + + const flushWord = (): void => { + if (word.atoms.length === 0) return; + if (word.cells > cols) { + // Hard-break an over-long word cell by cell. + for (const a of word.atoms) { + if (lineCells + atomCells(a) > cols) { + lines.push(line); + line = []; + lineCells = 0; + } + line.push(a); + lineCells += atomCells(a); + } + word = { atoms: [], cells: 0 }; + return; + } + const sep = line.length > 0 ? 1 : 0; + if (lineCells + sep + word.cells > cols) { + lines.push(line); + line = []; + lineCells = 0; + } else if (sep) { + line.push({ ch: " " }); + lineCells += 1; + } + line.push(...word.atoms); + lineCells += word.cells; + word = { atoms: [], cells: 0 }; + }; + + for (const a of rt) { + checkAscii(a, context); + if ("ch" in a && a.ch === "\n") { + flushWord(); + lines.push(line); + line = []; + lineCells = 0; + continue; + } + if ("ch" in a && a.ch === " ") { + flushWord(); + continue; + } + word.atoms.push(a); + word.cells += atomCells(a); + } + flushWord(); + lines.push(line); + // Drop a single trailing empty line produced by a trailing \n, keep + // intentional blank lines elsewhere. + while (lines.length > 1 && lines[lines.length - 1].length === 0) lines.pop(); + return lines; +} + +/** Wrap + paginate for a target's textbox. Returns pages of lines. */ +export function wrapPages(rt: RichText, t: TargetSpec, context = "text"): RichText[][] { + const lines = wrapLines(rt, t.textCols, context); + const pages: RichText[][] = []; + for (let i = 0; i < lines.length; i += t.textLines) { + pages.push(lines.slice(i, i + t.textLines)); + } + return pages; +} + +/** Encode one page (lines joined by TOK_NEWLINE) as a token stream. */ +export function encodePage(lines: RichText[]): Uint8Array { + const bytes: number[] = []; + lines.forEach((line, i) => { + if (i > 0) bytes.push(TOK_NEWLINE); + for (const a of line) { + if ("ch" in a) bytes.push(a.ch.charCodeAt(0)); + else bytes.push(TOK_FMT, a.fmtVar); + } + }); + bytes.push(TOK_END); + return Uint8Array.from(bytes); +} + +/** A single-line text (choice options): must fit `cols`, no newlines. */ +export function encodeOption(rt: RichText, cols: number, context: string): Uint8Array { + let cells = 0; + for (const a of rt) { + checkAscii(a, context); + if ("ch" in a && a.ch === "\n") throw new Error(`${context}: choice options are single-line`); + cells += atomCells(a); + } + if (cells > cols) throw new Error(`${context}: option is ${cells} cells, max ${cols}`); + const bytes: number[] = []; + for (const a of rt) { + if ("ch" in a) bytes.push(a.ch.charCodeAt(0)); + else bytes.push(TOK_FMT, a.fmtVar); + } + bytes.push(TOK_END); + return Uint8Array.from(bytes); +} diff --git a/static/package.json b/static/package.json new file mode 100644 index 0000000..af7f087 --- /dev/null +++ b/static/package.json @@ -0,0 +1,29 @@ +{ + "name": "@pocketjs/static", + "version": "0.1.0", + "private": true, + "description": "Pocket Static — the static game compiler: TypeScript in, GBA/GB/NES cartridges out.", + "type": "module", + "exports": { + ".": "./rpg/dsl.ts", + "./rpg": "./rpg/dsl.ts", + "./rpg/battle": "./rpg/battle.ts", + "./spec": "./spec/isa.ts", + "./compiler": "./compiler/index.ts" + }, + "bin": { + "pocket-static": "./compiler/cli.ts" + }, + "scripts": { + "gen": "bun spec/gen-c.ts", + "test": "bun test . && bun test/e2e.ts", + "test:vm": "bun test vm", + "test:e2e": "bun test/e2e.ts", + "build:boardroom": "bun games/boardroom/imagegen/build-assets.ts && bun compiler/cli.ts build games/boardroom/game.ts --out dist/boardroom --target gba,gb,nes", + "play": "bun compiler/play.ts" + }, + "devDependencies": { + "jsnes": "^1.2.1", + "typescript": "^5" + } +} diff --git a/static/rpg/dsl.ts b/static/rpg/dsl.ts new file mode 100644 index 0000000..10e52b1 --- /dev/null +++ b/static/rpg/dsl.ts @@ -0,0 +1,252 @@ +// static/rpg/dsl.ts — the @pocketjs/static RPG authoring surface. +// +// Two zones (see static/DESIGN.md §1): +// - Declaration zone: defineTileset / defineSprite / defineMap / defineGame +// and the npc/warp/trigger builders. Plain TypeScript, EXECUTED at build +// time on the host; fills the module-level REGISTRY. +// - Residual zone: script(function* (s, v, f) { ... }). NEVER executed — +// the compiler rewrites each script() to script() before +// evaluation and lowers the generator body from its AST +// (static/compiler/script.ts). +// +// The `s` ops below therefore have no host implementation: their types are +// the API; their bodies throw if anything ever actually calls them. + +// --------------------------------------------------------------------------- +// Residual script surface (types only) +// --------------------------------------------------------------------------- +export type Vars = Record; +export type Flags = Record; + +/** Engine ops available inside scripts. All are used with `yield*`. */ +export interface Ops { + /** Show textbox pages (auto-wrapped per console). `${}` of runtime values allowed. */ + say(text: string): Generator; + /** Menu; resolves to the picked index. Options are compile-time strings. */ + choose(options: readonly string[]): Generator; + /** Uniform 0..n-1 from the deterministic story RNG. */ + rnd(n: number): Generator; + /** Suspend for n frames. */ + wait(frames: number): Generator; + /** Freeze / unfreeze player movement. */ + lock(): Generator; + release(): Generator; + /** Actor faces the player. No argument = the actor that started this script. */ + face(actorId?: string): Generator; + /** Show/hide an actor on the current map (persist via flags + onEnter). */ + show(actorId: string): Generator; + hide(actorId: string): Generator; + /** Move the player to "map:entrance". */ + warp(dest: string): Generator; + /** Square-wave blip: confirm/deny/damage/heal/fanfare. */ + sfx(name: "confirm" | "deny" | "damage" | "heal" | "fanfare"): Generator; + /** Run another top-level script as a subroutine. */ + call(target: ScriptRef): Generator; +} + +export type ScriptBody = (s: Ops, v: Vars, f: Flags) => Generator; + +export interface ScriptRef { + readonly __script: number; +} + +const residual = (name: string) => { + throw new Error(`${name}() is residual-only: script bodies never execute (the compiler lowers them)`); +}; + +// --------------------------------------------------------------------------- +// Declarations +// --------------------------------------------------------------------------- +export type Rgb = readonly [number, number, number]; +export type DirName = "down" | "up" | "left" | "right"; +export type MoveName = "static" | "wander"; + +export interface TileDecl { + /** 8 rows of 8 hex nibbles (palette indices, 0 = backdrop). */ + px: readonly string[]; + solid?: boolean; +} + +export interface TilesetDecl = Record> { + name: string; + /** Up to 16 colors; index 0 = backdrop. */ + palette: readonly Rgb[]; + tiles: Tiles; +} + +export interface SpriteDecl { + name: string; + /** Up to 16 colors; index 0 = transparent. */ + palette: readonly Rgb[]; + /** + * 16x16 frames as 16 rows of 16 hex nibbles. Facings down/up/right with + * 1..2 frames each (left renders as mirrored right). Frame 0 stands, + * frame 1 (optional) is the walk alternate. + */ + facings: { + down: readonly (readonly string[])[]; + up: readonly (readonly string[])[]; + right: readonly (readonly string[])[]; + }; +} + +export interface ActorDecl { + id: string; + sprite: SpriteDecl; + at: readonly [number, number]; + facing?: DirName; + move?: MoveName; + /** Solid defaults to true (actors block the player). */ + solid?: boolean; + talk?: ScriptRef; + /** Start hidden (reveal with s.show). */ + hidden?: boolean; +} + +export interface WarpDecl { + at: readonly [number, number]; + to: string; // "map:entrance" +} + +export interface TriggerDecl { + at: readonly [number, number]; + run: ScriptRef; + /** Run once: the runtime arms an auto-allocated flag afterwards. */ + once?: boolean; +} + +export interface EntranceDecl { + at: readonly [number, number]; + dir?: DirName; +} + +export interface MapDecl { + name: string; + tileset: TilesetDecl; + /** Rows of legend characters; uniform width; blank lines ignored. */ + layout: string; + /** char -> tile name in the tileset. " " is always the blank tile. */ + legend: Record; + entrances?: Record; + actors?: ActorDecl[]; + warps?: WarpDecl[]; + triggers?: TriggerDecl[]; + onEnter?: ScriptRef; +} + +export interface GameDecl { + /** Cartridge title (ASCII, <= 16 chars). */ + title: string; + /** "map:entrance" the player spawns at. */ + start: string; + player: SpriteDecl; + maps: MapDecl[]; +} + +// --------------------------------------------------------------------------- +// Registry — module-level, shared between the executed game module and the +// compiler (both import this exact module instance). +// --------------------------------------------------------------------------- +export interface Registry { + tilesets: TilesetDecl[]; + sprites: SpriteDecl[]; + scriptCount: number; + game: GameDecl | null; +} + +export const REGISTRY: Registry = { tilesets: [], sprites: [], scriptCount: 0, game: null }; + +export function resetRegistry(): void { + REGISTRY.tilesets = []; + REGISTRY.sprites = []; + REGISTRY.scriptCount = 0; + REGISTRY.game = null; +} + +// --------------------------------------------------------------------------- +// Builders +// --------------------------------------------------------------------------- +export function defineTileset>( + name: string, + decl: { palette: readonly Rgb[]; tiles: Tiles }, +): TilesetDecl { + if (decl.palette.length > 16) throw new Error(`tileset ${name}: palette > 16 colors`); + for (const [tn, t] of Object.entries(decl.tiles)) { + if (t.px.length !== 8 || t.px.some((r) => r.length !== 8)) { + throw new Error(`tileset ${name}: tile "${tn}" must be 8 rows x 8 hex nibbles`); + } + } + const ts: TilesetDecl = { name, ...decl }; + REGISTRY.tilesets.push(ts); + return ts; +} + +export function defineSprite(name: string, decl: Omit): SpriteDecl { + const sp: SpriteDecl = { name, ...decl }; + for (const key of ["down", "up", "right"] as const) { + const frames = sp.facings[key]; + if (!frames || frames.length < 1 || frames.length > 2) { + throw new Error(`sprite ${name}: facing "${key}" needs 1..2 frames`); + } + for (const f of frames) { + if (f.length !== 16 || f.some((r) => r.length !== 16)) { + throw new Error(`sprite ${name}: frames are 16 rows x 16 hex nibbles`); + } + } + } + if (sp.palette.length > 16) throw new Error(`sprite ${name}: palette > 16 colors`); + REGISTRY.sprites.push(sp); + return sp; +} + +export function defineMap(name: string, decl: Omit): MapDecl { + return { name, ...decl }; +} + +export function defineGame(decl: GameDecl): GameDecl { + if (REGISTRY.game) throw new Error("defineGame called twice"); + if (!/^[\x20-\x7e]{1,16}$/.test(decl.title)) { + throw new Error(`game title must be 1..16 ASCII chars (got ${JSON.stringify(decl.title)})`); + } + REGISTRY.game = decl; + return decl; +} + +export const npc = (id: string, decl: Omit): ActorDecl => ({ id, ...decl }); +export const warp = (decl: WarpDecl): WarpDecl => decl; +export const trigger = (decl: TriggerDecl): TriggerDecl => decl; + +/** + * Residual script. At compile time the argument is a generator function; the + * compiler rewrites the call to `script()` before the module executes, + * so at build-run time we only see numbers and hand out stable refs. + */ +export function script(body: ScriptBody | number): ScriptRef { + if (typeof body !== "number") { + throw new Error( + "script(fn) reached the host un-rewritten — build games with the Pocket Static compiler (bun static/compiler/cli.ts)", + ); + } + if (body !== REGISTRY.scriptCount) { + throw new Error(`script id ${body} registered out of order (expected ${REGISTRY.scriptCount})`); + } + REGISTRY.scriptCount++; + return { __script: body }; +} + +// Residual op namespace values (never called; here so `s` has a runtime +// identity if anyone pokes it). +export const __residualOps: Ops = { + say: () => residual("s.say"), + choose: () => residual("s.choose"), + rnd: () => residual("s.rnd"), + wait: () => residual("s.wait"), + lock: () => residual("s.lock"), + release: () => residual("s.release"), + face: () => residual("s.face"), + show: () => residual("s.show"), + hide: () => residual("s.hide"), + warp: () => residual("s.warp"), + sfx: () => residual("s.sfx"), + call: () => residual("s.call"), +} as unknown as Ops; diff --git a/static/runtime/core/hal.h b/static/runtime/core/hal.h new file mode 100644 index 0000000..63ba038 --- /dev/null +++ b/static/runtime/core/hal.h @@ -0,0 +1,72 @@ +/* static/runtime/core/hal.h — the platform seam of Pocket Static. + * + * Everything above this line of the runtime (vm.c, rpg.c) is PORTABLE C — + * compiled unchanged by arm-none-eabi-gcc (GBA), sdcc (GB) and cc65 (NES). + * Everything below it is one small HAL per console. Gameplay decisions all + * happen in portable code, which is what makes the logical state identical + * across targets by construction. + * + * Portable code rules (the intersection of three compilers): + * - C89 declarations (locals at block top), no VLAs, no floats. + * - Explicit-width typedefs below; int is 16-bit on two targets. + * - No pointer caching across HAL calls that may re-latch ROM banks: + * re-fetch hal_blob() after any call that could touch another blob. + * - No standard library. + */ +#ifndef PS_HAL_H +#define PS_HAL_H + +#include "spec_gen.h" + +typedef unsigned char u8; +typedef signed char s8; +typedef unsigned short u16; +typedef signed short s16; +typedef unsigned long u32; + +/* ---- ROM data ------------------------------------------------------------- + * Blob index space is the compiler's (link.ts): scripts, texts, maps in + * order, then target-appended art. hal_blob() returns a readable pointer, + * latching the bank on banked targets — the pointer is valid until the next + * hal_blob() call. + */ +const u8 *hal_blob(u8 blob); + +/* Fixed-region tables (generated as native arrays by the target packagers): */ +extern const u8 ps_game_header[]; /* GAME_HEADER_SIZE bytes */ +extern const u16 ps_script_table[]; /* per script: offset in SCRIPTS blob */ +extern const u8 ps_text_table[]; /* per text: u8 blob, u16 offset */ +extern const u8 ps_map_blob[]; /* per map: blob index */ +extern const u8 ps_sprite_table[]; /* per sprite: SPRITE_ENTRY_SIZE */ + +/* ---- frame / input --------------------------------------------------------*/ +void hal_init(void); +/* Wait for vblank, commit queued video work + OAM, then return. */ +void hal_frame(void); +/* Held keys as the normalized PS_KEY_* mask. */ +u8 hal_keys(void); + +/* ---- video ---------------------------------------------------------------*/ +/* Redraw the whole BG from the current map blob (rendering may be blanked). */ +void hal_map_draw(u8 mapBlob, u8 w, u8 h); +/* Camera top-left in pixels (ignored on non-scrolling targets). */ +void hal_scroll(u16 px, u16 py); +/* Position one 16x16 actor object. slot 0 = player. hidden -> off-screen. */ +void hal_obj(u8 slot, s16 px, s16 py, u8 spriteId, u8 dir, u8 frame, u8 hidden); + +/* Textbox (fixed PS_TEXT_COLS-wide region, `rows` text lines tall). + * open MUST present a clean box (all cells cleared to the box fill); + * close restores the map view. Both may be gradual on queued targets. */ +void hal_text_open(u8 rows); +void hal_text_close(void); +/* Write one glyph cell (glyph 0..FONT_GLYPHS-1) at textbox col/row. */ +void hal_text_glyph(u8 col, u8 row, u8 glyph); + +/* ---- audio ----------------------------------------------------------------*/ +void hal_sfx(u8 id); + +/* ---- engine entry points (portable side, called by each main.c) ----------*/ +void rpg_boot(void); +void rpg_tick(void); + +#endif /* PS_HAL_H */ diff --git a/static/runtime/core/rpg.c b/static/runtime/core/rpg.c new file mode 100644 index 0000000..77eafba --- /dev/null +++ b/static/runtime/core/rpg.c @@ -0,0 +1,591 @@ +/* static/runtime/core/rpg.c — the portable RPG engine. + * + * Owns every gameplay decision: grid movement + collision, actors, talk/ + * trigger/warp dispatch, the textbox + choice state machines (typewriter, + * FMT decimal slots), the RPG syscalls, and the debug block. The HAL only + * moves pixels and beeps. + * + * Determinism: all state transitions happen here in fixed order, driven by + * hal_keys() once per tick — the cross-target E2E suite holds every console + * to the same trace. + */ +#include "vm.h" + +#define DBGB ((volatile u8 *)PS_DEBUG_ADDR) +#define DBG8(off) (*(volatile u8 *)(PS_DEBUG_ADDR + (off))) +#define DBG16(off) (*(volatile u16 *)(PS_DEBUG_ADDR + (off))) +#define DBG32(off) (*(volatile u32 *)(PS_DEBUG_ADDR + (off))) + +#define MAX_ACTORS 16 + +typedef struct { + u8 x, y; /* tile (committed at step end) */ + u16 px, py; /* pixels */ + u8 spriteId; + u8 dir; + u8 move; + u8 flags; /* ACTOR_F_* */ + u16 talk; + u8 stepLeft; /* pixels remaining in the current step */ + u8 anim; + u16 lcg; +} ActorRt; + +static ActorRt actors[MAX_ACTORS]; +static u8 actor_count; + +static u8 cur_map; +static u8 map_w, map_h; +static u8 mblob; /* blob index of the current map */ +static u16 tiles_off, coll_off, actors_off, warps_off, trig_off; +static u8 warp_count, trig_count; +static u16 pending_enter; /* onEnter deferred while a script is running */ + +/* player */ +static u8 ptx, pty, pdir; +static u16 ppx, ppy; +static u8 pstep, panim, plock; + +/* input */ +static u8 keys_now, keys_prev; +#define PRESSED(k) ((keys_now & (k)) && !(keys_prev & (k))) + +/* textbox */ +#define TB_NONE 0 +#define TB_SAY 1 +#define TB_CHOICE 2 +static u8 tb_mode; +static u16 tb_text; +static u8 tb_blob; +static u16 tb_off; +static u8 tb_col, tb_row; +static u8 tb_done; +static u8 ch_n, ch_cursor, ch_drawn; +static u16 ch_texts[PS_MAX_CHOICES]; +static u8 interact_slot; /* actor that started the current script, 0xFF none */ + +static u32 frame_no; + +static const s8 DIRDX[4] = { 0, 0, -1, 1 }; +static const s8 DIRDY[4] = { 1, -1, 0, 0 }; + +/* ---- data helpers ---------------------------------------------------------*/ +static u16 rd16(const u8 *p) { return (u16)(p[0] | ((u16)p[1] << 8)); } + +static void map_view_load(void) { + const u8 *m; + mblob = ps_map_blob[cur_map]; + m = hal_blob(mblob); + map_w = m[0]; + map_h = m[1]; + actor_count = m[2]; + warp_count = m[3]; + trig_count = m[4]; + tiles_off = rd16(m + 8); + coll_off = rd16(m + 10); + actors_off = rd16(m + 12); + warps_off = rd16(m + 14); + trig_off = rd16(m + 16); +} + +static u8 tile_solid(u8 x, u8 y) { + const u8 *m; + u16 i; + if (x >= map_w || y >= map_h) return 1; + i = (u16)y * map_w + x; + m = hal_blob(mblob); + return (m[coll_off + (i >> 3)] >> (i & 7)) & 1; +} + +static u8 actor_at(u8 x, u8 y) { + u8 i; + for (i = 0; i < actor_count; i++) { + if (actors[i].flags & ACTOR_F_HIDDEN) continue; + if (actors[i].x == x && actors[i].y == y) return i; + } + return 0xff; +} + +static u8 blocked(u8 x, u8 y) { + u8 a; + if (tile_solid(x, y)) return 1; + a = actor_at(x, y); + if (a != 0xff && (actors[a].flags & ACTOR_F_SOLID)) return 1; + return 0; +} + +/* ---- map load --------------------------------------------------------------*/ +static void map_load(u8 map, u8 x, u8 y, u8 dir) { + const u8 *m; + u8 i; + u16 enter; + + cur_map = map; + map_view_load(); + m = hal_blob(mblob); + enter = rd16(m + 6); + + for (i = 0; i < actor_count; i++) { + const u8 *a = m + actors_off + (u16)i * ACTOR_SIZE; + actors[i].x = a[0]; + actors[i].y = a[1]; + actors[i].px = (u16)a[0] << 3; + actors[i].py = (u16)a[1] << 3; + actors[i].spriteId = a[2]; + actors[i].dir = a[3]; + actors[i].move = a[4]; + actors[i].flags = a[5]; + actors[i].talk = rd16(a + 6); + actors[i].stepLeft = 0; + actors[i].anim = 0; + actors[i].lcg = (u16)(0x1234 + i * 977); + } + + ptx = x; + pty = y; + pdir = dir; + ppx = (u16)x << 3; + ppy = (u16)y << 3; + pstep = 0; + interact_slot = 0xff; + + hal_map_draw(mblob, map_w, map_h); + + if (enter != SCRIPT_NONE) { + if (vm.active) pending_enter = enter; + else vm_start(enter); + } +} + +/* ---- textbox ---------------------------------------------------------------*/ +static void text_locate(u16 id) { + const u8 *e = ps_text_table + (u16)id * TEXT_ENTRY_SIZE; + tb_blob = e[0]; + tb_off = rd16(e + 1); +} + +static void say_open(u16 id) { + tb_mode = TB_SAY; + tb_text = id; + text_locate(id); + tb_col = 0; + tb_row = 0; + tb_done = 0; + hal_text_open(PS_TEXT_LINES); +} + +static void choice_open(void) { + tb_mode = TB_CHOICE; + tb_text = ch_texts[0]; + ch_cursor = 0; + ch_drawn = 0; + tb_done = 0; + hal_text_open(ch_n); +} + +static void tb_close(void) { + tb_mode = TB_NONE; + tb_text = TEXT_NONE; + hal_text_close(); +} + +/* Render a signed decimal at the current cell; returns cells written. */ +static void tb_put(u8 glyph) { + if (tb_col < PS_TEXT_COLS) { + hal_text_glyph(tb_col, tb_row, glyph); + tb_col++; + } +} + +static void tb_number(s16 v) { + u8 buf[6]; + u8 n = 0; + u16 mag; + if (v < 0) { + tb_put((u8)('-' - 0x20)); + mag = (u16)(-v); + } else { + mag = (u16)v; + } + do { + buf[n++] = (u8)(mag % 10); + mag /= 10; + } while (mag && n < 6); + while (n) { + n--; + tb_put((u8)('0' - 0x20 + buf[n])); + } +} + +/* Advance the typewriter by one token; returns 0 when the page is done. */ +static u8 tb_step(void) { + const u8 *t = hal_blob(tb_blob); + u8 tok = t[tb_off]; + if (tok == TOK_END) { + tb_done = 1; + return 0; + } + tb_off++; + if (tok == TOK_NEWLINE) { + tb_row++; + tb_col = 0; + return 1; + } + if (tok == TOK_FMT) { + u8 var = t[tb_off]; + tb_off++; + tb_number(vm_get_var(var)); + return 1; + } + tb_put((u8)(tok - TOK_ASCII_MIN)); + return 1; +} + +static void say_tick(void) { + u8 i; + if (!tb_done) { + for (i = 0; i < 2; i++) { + if (!tb_step()) break; + } + if (PRESSED(PS_KEY_A)) { + while (tb_step()) {} + } + return; + } + if (PRESSED(PS_KEY_A)) { + tb_close(); + vm_resume(); + /* eat the edge: the dismissing press must not double as an interact */ + keys_prev |= PS_KEY_A; + } +} + +static void choice_row(u8 row, u16 textId, u8 selected) { + u16 save_off; + u8 save_blob, save_col, save_row; + tb_col = 0; + tb_row = row; + tb_put(selected ? (u8)('>' - 0x20) : 0); + tb_put(0); + save_blob = tb_blob; + save_off = tb_off; + save_col = tb_col; + save_row = tb_row; + text_locate(textId); + { + const u8 *t; + u8 tok; + for (;;) { + t = hal_blob(tb_blob); + tok = t[tb_off]; + if (tok == TOK_END) break; + tb_off++; + if (tok == TOK_FMT) { + u8 var = t[tb_off]; + tb_off++; + tb_number(vm_get_var(var)); + continue; + } + tb_put((u8)(tok - TOK_ASCII_MIN)); + } + } + tb_blob = save_blob; + tb_off = save_off; + tb_col = save_col; + tb_row = save_row; +} + +static void choice_tick(void) { + u8 i; + if (!ch_drawn) { + for (i = 0; i < ch_n; i++) choice_row(i, ch_texts[i], i == ch_cursor); + ch_drawn = 1; + return; + } + if (PRESSED(PS_KEY_UP) && ch_cursor > 0) { + tb_col = 0; + tb_row = ch_cursor; + tb_put(0); + ch_cursor--; + tb_col = 0; + tb_row = ch_cursor; + tb_put((u8)('>' - 0x20)); + } + if (PRESSED(PS_KEY_DOWN) && ch_cursor < ch_n - 1) { + tb_col = 0; + tb_row = ch_cursor; + tb_put(0); + ch_cursor++; + tb_col = 0; + tb_row = ch_cursor; + tb_put((u8)('>' - 0x20)); + } + if (PRESSED(PS_KEY_A)) { + hal_sfx(SFX_CONFIRM); + tb_close(); + vm_resume_value(ch_cursor); + keys_prev |= PS_KEY_A; + } +} + +/* ---- warps / triggers -------------------------------------------------------*/ +static void check_warp_trigger(void) { + const u8 *m = hal_blob(mblob); + u8 i; + for (i = 0; i < warp_count; i++) { + const u8 *w = m + warps_off + (u16)i * WARP_SIZE; + if (w[0] == ptx && w[1] == pty) { + map_load(w[2], w[3], w[4], w[5]); + return; + } + } + for (i = 0; i < trig_count; i++) { + const u8 *t = m + trig_off + (u16)i * TRIGGER_SIZE; + if (t[0] == ptx && t[1] == pty) { + u16 script = rd16(t + 2); + if ((t[4] & TRIGGER_F_ONCE) && vm_get_flag(t[5])) continue; + if (t[4] & TRIGGER_F_ONCE) vm_set_flag(t[5], 1); + if (script != SCRIPT_NONE && !vm.active) { + interact_slot = 0xff; + vm_start(script); + } + return; + } + } +} + +/* ---- player ------------------------------------------------------------------*/ +static u8 face_from_keys(void) { + if (keys_now & PS_KEY_DOWN) return DIR_DOWN; + if (keys_now & PS_KEY_UP) return DIR_UP; + if (keys_now & PS_KEY_LEFT) return DIR_LEFT; + if (keys_now & PS_KEY_RIGHT) return DIR_RIGHT; + return 0xff; +} + +static void player_tick(void) { + u8 want; + if (pstep) { + ppx = (u16)(ppx + STEP_PX * DIRDX[pdir]); + ppy = (u16)(ppy + STEP_PX * DIRDY[pdir]); + pstep -= STEP_PX; + if ((pstep & 3) == 0) panim ^= 1; + if (pstep == 0) { + ptx = (u8)(ppx >> 3); + pty = (u8)(ppy >> 3); + check_warp_trigger(); + } + return; + } + if (plock || vm.active || tb_mode != TB_NONE) return; + + want = face_from_keys(); + if (want != 0xff) { + u8 nx, ny; + pdir = want; + nx = (u8)(ptx + DIRDX[pdir]); + ny = (u8)(pty + DIRDY[pdir]); + if (!blocked(nx, ny)) pstep = 8; + } + + if (PRESSED(PS_KEY_A)) { + u8 fx = (u8)(ptx + DIRDX[pdir]); + u8 fy = (u8)(pty + DIRDY[pdir]); + u8 a = actor_at(fx, fy); + if (a != 0xff && actors[a].talk != SCRIPT_NONE) { + /* the classic: the NPC turns to face you */ + actors[a].dir = (u8)(pdir ^ 1); /* down<->up, left<->right */ + interact_slot = a; + vm_start(actors[a].talk); + } + } +} + +/* ---- actors --------------------------------------------------------------------*/ +static void actors_tick(void) { + u8 i; + for (i = 0; i < actor_count; i++) { + ActorRt *a = &actors[i]; + if (a->flags & ACTOR_F_HIDDEN) continue; + if (a->stepLeft) { + a->px = (u16)(a->px + STEP_PX * DIRDX[a->dir]); + a->py = (u16)(a->py + STEP_PX * DIRDY[a->dir]); + a->stepLeft -= STEP_PX; + if ((a->stepLeft & 3) == 0) a->anim ^= 1; + continue; + } + if (a->move != MOVE_WANDER) continue; + if (vm.active || tb_mode != TB_NONE) continue; + if (((u16)((u16)frame_no + (u16)i * WANDER_PHASE) % WANDER_PERIOD) != 0) continue; + a->lcg = (u16)(a->lcg * 25173u + 13849u); + { + u8 d = (u8)((a->lcg >> 8) & 3); + u8 nx = (u8)(a->x + DIRDX[d]); + u8 ny = (u8)(a->y + DIRDY[d]); + a->dir = d; + if (!blocked(nx, ny) && !(nx == ptx && ny == pty)) { + a->x = nx; + a->y = ny; + a->stepLeft = 8; + } + } + } +} + +/* ---- camera / objects ------------------------------------------------------------*/ +static u16 cam_x, cam_y; + +static void camera_tick(void) { + u16 vieww = (u16)PS_SCREEN_TILES_W << 3; + u16 viewh = (u16)PS_SCREEN_TILES_H << 3; + u16 mapw = (u16)map_w << 3; + u16 maph = (u16)map_h << 3; + s16 cx = (s16)(ppx + 4 - (s16)(vieww >> 1)); + s16 cy = (s16)(ppy + 4 - (s16)(viewh >> 1)); + if (cx < 0) cx = 0; + if (cy < 0) cy = 0; + if (mapw > vieww && cx > (s16)(mapw - vieww)) cx = (s16)(mapw - vieww); + if (mapw <= vieww) cx = 0; + if (maph > viewh && cy > (s16)(maph - viewh)) cy = (s16)(maph - viewh); + if (maph <= viewh) cy = 0; + cam_x = (u16)cx; + cam_y = (u16)cy; + hal_scroll(cam_x, cam_y); +} + +static void objects_tick(void) { + u8 i; + hal_obj(0, (s16)(ppx - cam_x - 4), (s16)(ppy - cam_y - 8), ps_game_header[26], pdir, + (u8)(pstep ? panim : 0), 0); + for (i = 0; i < actor_count; i++) { + ActorRt *a = &actors[i]; + hal_obj((u8)(i + 1), (s16)(a->px - cam_x - 4), (s16)(a->py - cam_y - 8), a->spriteId, a->dir, + (u8)(a->stepLeft ? a->anim : 0), (u8)(a->flags & ACTOR_F_HIDDEN ? 1 : 0)); + } +} + +/* ---- syscalls -----------------------------------------------------------------*/ +void rpg_syscall(u8 op) { + switch (op) { + case OP_SAY: { + u16 id = vm_fetch16(); + say_open(id); + vm.waiting = WAITING_TEXT; + break; + } + case OP_CHOICE: { + u8 i; + ch_n = vm_fetch8(); + for (i = 0; i < ch_n && i < PS_MAX_CHOICES; i++) ch_texts[i] = vm_fetch16(); + choice_open(); + vm.waiting = WAITING_CHOICE; + break; + } + case OP_LOCK: + plock = 1; + break; + case OP_RELEASE: + plock = 0; + break; + case OP_FACE: { + u8 slot = vm_fetch8(); + if (slot == FACE_SELF) slot = interact_slot; + if (slot < actor_count) actors[slot].dir = (u8)(pdir ^ 1); + break; + } + case OP_AVIS: { + u8 slot = vm_fetch8(); + u8 on = vm_fetch8(); + if (slot < actor_count) { + if (on) actors[slot].flags &= (u8)~ACTOR_F_HIDDEN; + else actors[slot].flags |= ACTOR_F_HIDDEN; + } + break; + } + case OP_WARP: { + u8 map = vm_fetch8(); + u8 x = vm_fetch8(); + u8 y = vm_fetch8(); + u8 dir = vm_fetch8(); + map_load(map, x, y, dir); + break; + } + case OP_SFX: + hal_sfx(vm_fetch8()); + break; + default: + /* unknown syscall: stop the script, keep the game alive */ + vm.active = 0; + break; + } +} + +/* ---- debug block -----------------------------------------------------------------*/ +static void debug_tick(void) { + DBG8(DBGO_PLAYER_DIR) = pdir; + DBG8(DBGO_CUR_MAP) = cur_map; + DBG8(DBGO_TEXT_ACTIVE) = tb_mode != TB_NONE; + DBG8(DBGO_SCRIPT_ACTIVE) = vm.active; + DBG8(DBGO_CHOICE_CURSOR) = ch_cursor; + DBG8(DBGO_WAITING) = vm.waiting; + DBG16(DBGO_PLAYER_X) = ptx; + DBG16(DBGO_PLAYER_Y) = pty; + DBG16(DBGO_CUR_TEXT) = tb_mode != TB_NONE ? tb_text : TEXT_NONE; + DBG16(DBGO_CUR_SCRIPT) = vm.active ? vm.script : SCRIPT_NONE; + DBG32(DBGO_FRAME) = frame_no; + DBG16(DBGO_RNG) = vm.rng; +} + +/* ---- entry points -------------------------------------------------------------------*/ +void rpg_boot(void) { + u8 i; + /* flags/vars storage is the debug block: zero it before use */ + for (i = 0; i < DEBUG_BLOCK_SIZE; i++) DBGB[i] = 0; + DBGB[0] = DEBUG_MAGIC_0; + DBGB[1] = DEBUG_MAGIC_1; + DBGB[2] = DEBUG_MAGIC_2; + DBGB[3] = DEBUG_MAGIC_3; + + vm.rng = PS_RNG_SEED; + vm.active = 0; + vm.waiting = WAITING_NONE; + pending_enter = SCRIPT_NONE; + tb_mode = TB_NONE; + tb_text = TEXT_NONE; + interact_slot = 0xff; + frame_no = 0; + plock = 0; + + map_load(ps_game_header[16], ps_game_header[17], ps_game_header[18], ps_game_header[19]); + DBG8(DBGO_BOOTED) = 1; +} + +void rpg_tick(void) { + keys_prev = keys_now; + keys_now = hal_keys(); + + if (tb_mode == TB_SAY) say_tick(); + else if (tb_mode == TB_CHOICE) choice_tick(); + + if (vm.active && vm.waiting == WAITING_FRAMES) { + if (vm.wait_frames) vm.wait_frames--; + if (vm.wait_frames == 0) vm_resume(); + } + + if (vm.active && vm.waiting == WAITING_NONE && tb_mode == TB_NONE) vm_run(); + + if (!vm.active && pending_enter != SCRIPT_NONE) { + u16 e = pending_enter; + pending_enter = SCRIPT_NONE; + vm_start(e); + vm_run(); + } + + player_tick(); + actors_tick(); + camera_tick(); + objects_tick(); + + frame_no++; + debug_tick(); +} diff --git a/static/runtime/core/vm.c b/static/runtime/core/vm.c new file mode 100644 index 0000000..58c7826 --- /dev/null +++ b/static/runtime/core/vm.c @@ -0,0 +1,253 @@ +/* static/runtime/core/vm.c — the Pocket Static stack VM, portable C. + * Semantics are pinned by static/vm/ref.ts + static/test/vm.test.ts; if this + * file and ref.ts disagree, this file is wrong. + * + * The cartridge build is forgiving where the host reference is strict: + * out-of-range access clamps/no-ops instead of trapping (there is no one to + * read a panic on a handheld). The compiler guarantees well-formed bytecode; + * clamping is belt-and-braces. + */ +#include "vm.h" + +Vm vm; + +/* vars/flags live INSIDE the debug block: the mirror is the storage. */ +#define DBGB ((volatile u8 *)PS_DEBUG_ADDR) +#define VARS ((volatile s16 *)(PS_DEBUG_ADDR + DBGO_VARS)) +#define FLAGS (DBGB + DBGO_FLAGS) + +static const u8 *code; + +s16 vm_get_var(u8 id) { return VARS[id & (VM_VARS - 1)]; } +void vm_set_var(u8 id, s16 v) { VARS[id & (VM_VARS - 1)] = v; } +u8 vm_get_flag(u8 id) { return (FLAGS[id >> 3] >> (id & 7)) & 1; } +void vm_set_flag(u8 id, u8 on) { + u8 m = (u8)(1 << (id & 7)); + if (on) FLAGS[id >> 3] |= m; + else FLAGS[id >> 3] &= (u8)~m; +} + +static void push(s16 v) { + if (vm.sp < VM_STACK) vm.stack[vm.sp++] = v; +} +static s16 pop(void) { + if (vm.sp == 0) return 0; + return vm.stack[--vm.sp]; +} + +u8 vm_fetch8(void) { return code[vm.ip++]; } +u16 vm_fetch16(void) { + u16 v = code[vm.ip]; + v |= ((u16)code[vm.ip + 1]) << 8; + vm.ip += 2; + return v; +} + +void vm_push(s16 v) { push(v); } +s16 vm_pop(void) { return pop(); } + +void vm_start(u16 scriptId) { + vm.script = scriptId; + vm.ip = ps_script_table[scriptId]; + vm.sp = 0; + vm.frame = 0; + vm.waiting = WAITING_NONE; + vm.active = 1; +} + +void vm_resume(void) { vm.waiting = WAITING_NONE; } + +void vm_resume_value(s16 v) { + push(v); + vm.waiting = WAITING_NONE; +} + +static void vm_end(void) { + vm.active = 0; + vm.waiting = WAITING_NONE; +} + +u16 vm_rng_next(void) { + u16 x = vm.rng; + x ^= (u16)(x << 7); + x ^= (u16)(x >> 9); + x ^= (u16)(x << 8); + vm.rng = x; + return x; +} + +void vm_run(void) { + u8 budget = VM_BURST; + s16 a, b; + u8 op, o8; + u16 o16; + + if (!vm.active || vm.waiting != WAITING_NONE) return; + code = hal_blob(0); /* blob 0 is always SCRIPTS (link.ts) */ + + while (budget--) { + op = code[vm.ip++]; + if (op >= PS_SYSCALL_BASE) { + rpg_syscall(op); + if (!vm.active || vm.waiting != WAITING_NONE) return; + code = hal_blob(0); /* a syscall may have latched another blob */ + continue; + } + switch (op) { + case OP_END: + vm_end(); + return; + case OP_NOP: + break; + case OP_PUSH8: + push((s8)vm_fetch8()); + break; + case OP_PUSH16: + push((s16)vm_fetch16()); + break; + case OP_POP: + pop(); + break; + case OP_DUP: + a = pop(); + push(a); + push(a); + break; + case OP_JMP: + o16 = vm_fetch16(); + vm.ip = (u16)(vm.ip + (s16)o16); + break; + case OP_JZ: + o16 = vm_fetch16(); + if (pop() == 0) vm.ip = (u16)(vm.ip + (s16)o16); + break; + case OP_JNZ: + o16 = vm_fetch16(); + if (pop() != 0) vm.ip = (u16)(vm.ip + (s16)o16); + break; + case OP_CALL: + o16 = vm_fetch16(); + if (vm.frame < VM_FRAMES - 1) { + u8 i; + s16 *fl; + vm.ret[vm.frame++] = vm.ip; + fl = &vm.locals[(u16)vm.frame * VM_LOCALS]; + for (i = 0; i < VM_LOCALS; i++) fl[i] = 0; + vm.ip = ps_script_table[o16]; + } + break; + case OP_RET: + if (vm.frame == 0) { + vm_end(); + return; + } + vm.ip = vm.ret[--vm.frame]; + break; + case OP_LDV: + push(vm_get_var(vm_fetch8())); + break; + case OP_STV: + o8 = vm_fetch8(); + vm_set_var(o8, pop()); + break; + case OP_LDL: + o8 = vm_fetch8(); + push(vm.locals[(u16)vm.frame * VM_LOCALS + (o8 & (VM_LOCALS - 1))]); + break; + case OP_STL: + o8 = vm_fetch8(); + vm.locals[(u16)vm.frame * VM_LOCALS + (o8 & (VM_LOCALS - 1))] = pop(); + break; + case OP_FLAG: + push(vm_get_flag(vm_fetch8())); + break; + case OP_SETF: + vm_set_flag(vm_fetch8(), 1); + break; + case OP_CLRF: + vm_set_flag(vm_fetch8(), 0); + break; + case OP_STF: + o8 = vm_fetch8(); + vm_set_flag(o8, pop() != 0); + break; + case OP_ADD: + b = pop(); + a = pop(); + push((s16)(a + b)); + break; + case OP_SUB: + b = pop(); + a = pop(); + push((s16)(a - b)); + break; + case OP_MUL: + b = pop(); + a = pop(); + push((s16)(a * b)); + break; + case OP_DIV: + b = pop(); + a = pop(); + push(b == 0 ? 0 : (s16)(a / b)); + break; + case OP_MOD: + b = pop(); + a = pop(); + push(b == 0 ? 0 : (s16)(a % b)); + break; + case OP_NEG: + push((s16)-pop()); + break; + case OP_EQ: + b = pop(); + a = pop(); + push(a == b); + break; + case OP_NE: + b = pop(); + a = pop(); + push(a != b); + break; + case OP_LT: + b = pop(); + a = pop(); + push(a < b); + break; + case OP_GT: + b = pop(); + a = pop(); + push(a > b); + break; + case OP_LE: + b = pop(); + a = pop(); + push(a <= b); + break; + case OP_GE: + b = pop(); + a = pop(); + push(a >= b); + break; + case OP_NOT: + push(pop() == 0); + break; + case OP_RND: + a = pop(); + if (a <= 0) push(0); + else push((s16)(vm_rng_next() % (u16)a)); + break; + case OP_WAIT: + a = pop(); + if (a > 0) { + vm.wait_frames = (u16)a; + vm.waiting = WAITING_FRAMES; + return; + } + break; + default: + vm_end(); /* illegal opcode: stop the script, keep the game alive */ + return; + } + } +} diff --git a/static/runtime/core/vm.h b/static/runtime/core/vm.h new file mode 100644 index 0000000..f977971 --- /dev/null +++ b/static/runtime/core/vm.h @@ -0,0 +1,43 @@ +/* static/runtime/core/vm.h — VM state + the seam to the category runtime. */ +#ifndef PS_VM_H +#define PS_VM_H + +#include "hal.h" + +typedef struct { + u16 ip; + u16 script; /* running script id */ + u16 rng; /* xorshift16 state (PS_RNG_SEED at boot) */ + u16 wait_frames; + u8 sp; + u8 frame; /* call depth, 0 = top */ + u8 waiting; /* WAITING_* */ + u8 active; + s16 stack[VM_STACK]; + u16 ret[VM_FRAMES]; + s16 locals[VM_FRAMES * VM_LOCALS]; +} Vm; + +extern Vm vm; + +void vm_start(u16 scriptId); +void vm_run(void); +void vm_resume(void); +void vm_resume_value(s16 v); + +/* Operand access for the category syscall handler. */ +u8 vm_fetch8(void); +u16 vm_fetch16(void); +void vm_push(s16 v); +s16 vm_pop(void); + +s16 vm_get_var(u8 id); +void vm_set_var(u8 id, s16 v); +u8 vm_get_flag(u8 id); +void vm_set_flag(u8 id, u8 on); +u16 vm_rng_next(void); + +/* Implemented by the category runtime (rpg.c): ops >= PS_SYSCALL_BASE. */ +void rpg_syscall(u8 op); + +#endif diff --git a/static/runtime/gba/crt0.s b/static/runtime/gba/crt0.s new file mode 100644 index 0000000..0d54025 --- /dev/null +++ b/static/runtime/gba/crt0.s @@ -0,0 +1,48 @@ +@ static/runtime/gba/crt0.s — cartridge header + startup for Pocket Static GBA. +@ The header's Nintendo logo bytes and checksum are patched into the final +@ .gba by targets/gba.ts (buildGba); the zeros here are placeholders. + + .section .crt0, "ax" + .arm + .global _start +_start: + b rom_start + + .space 156 @ Nintendo logo (patched post-link) + .space 12 @ game title (patched) + .space 4 @ game code (patched) + .byte 0x30, 0x31 @ maker "01" + .byte 0x96 @ fixed + .byte 0x00 @ main unit + .byte 0x00 @ device type + .space 7 @ reserved + .byte 0x00 @ software version + .byte 0x00 @ complement check (patched) + .space 2 @ reserved + +rom_start: + @ system mode, IRQs architecturally enabled (REG_IME stays 0) + mov r0, #0x5f + msr cpsr_c, r0 + ldr sp, =0x03007f00 + + @ copy .data ROM -> IWRAM + ldr r0, =__data_lma + ldr r1, =__data_start + ldr r2, =__data_end +1: cmp r1, r2 + ldrlo r3, [r0], #4 + strlo r3, [r1], #4 + blo 1b + + @ zero .bss + ldr r1, =__bss_start + ldr r2, =__bss_end + mov r3, #0 +2: cmp r1, r2 + strlo r3, [r1], #4 + blo 2b + + ldr r0, =main + bx r0 +3: b 3b diff --git a/static/runtime/gba/gba.h b/static/runtime/gba/gba.h new file mode 100644 index 0000000..d570f94 --- /dev/null +++ b/static/runtime/gba/gba.h @@ -0,0 +1,38 @@ +/* static/runtime/gba/gba.h — the handful of GBA registers this runtime uses. */ +#ifndef PS_GBA_H +#define PS_GBA_H + +#include "hal.h" + +#define REG(addr) (*(volatile u16 *)(addr)) +#define REG32(addr) (*(volatile u32 *)(addr)) + +#define REG_DISPCNT REG(0x04000000) +#define REG_VCOUNT REG(0x04000006) +#define REG_BG0CNT REG(0x04000008) +#define REG_BG1CNT REG(0x0400000a) +#define REG_BG0HOFS REG(0x04000010) +#define REG_BG0VOFS REG(0x04000012) +#define REG_BG1HOFS REG(0x04000014) +#define REG_BG1VOFS REG(0x04000016) +#define REG_KEYINPUT REG(0x04000130) + +#define REG_SOUNDCNT_L REG(0x04000080) +#define REG_SOUNDCNT_H REG(0x04000082) +#define REG_SOUNDCNT_X REG(0x04000084) +#define REG_SOUND1CNT_L REG(0x04000060) +#define REG_SOUND1CNT_H REG(0x04000062) +#define REG_SOUND1CNT_X REG(0x04000064) + +#define PAL_BG ((volatile u16 *)0x05000000) +#define PAL_OBJ ((volatile u16 *)0x05000200) +#define VRAM ((volatile u16 *)0x06000000) +#define VRAM_OBJ ((volatile u16 *)0x06010000) +#define OAM ((volatile u16 *)0x07000000) + +/* charblock 0 = BG tiles; screenblock 8 = map, 9 = textbox layer */ +#define SB_MAP 8 +#define SB_TEXT 9 +#define SCREENBLOCK(n) ((volatile u16 *)(0x06000000 + (n) * 0x800)) + +#endif diff --git a/static/runtime/gba/gba.ld b/static/runtime/gba/gba.ld new file mode 100644 index 0000000..bd60935 --- /dev/null +++ b/static/runtime/gba/gba.ld @@ -0,0 +1,34 @@ +/* static/runtime/gba/gba.ld — ROM + IWRAM layout. EWRAM (0x02000000) is + * deliberately left out of every section: the debug block owns its base. */ +OUTPUT_ARCH(arm) +ENTRY(_start) + +MEMORY { + rom (rx) : ORIGIN = 0x08000000, LENGTH = 32M + iwram (rwx) : ORIGIN = 0x03000000, LENGTH = 32K +} + +SECTIONS { + .text : { + KEEP(*(.crt0)) + *(.text*) + *(.rodata*) + . = ALIGN(4); + } > rom + + __data_lma = .; + .data : AT(__data_lma) { + __data_start = .; + *(.data*) + . = ALIGN(4); + __data_end = .; + } > iwram + + .bss : { + __bss_start = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end = .; + } > iwram +} diff --git a/static/runtime/gba/hal_gba.c b/static/runtime/gba/hal_gba.c new file mode 100644 index 0000000..8a9f422 --- /dev/null +++ b/static/runtime/gba/hal_gba.c @@ -0,0 +1,180 @@ +/* static/runtime/gba/hal_gba.c — the whole GBA platform layer. + * + * Mode 0. BG0 = map (charblock 0, screenblock 8, scrolls), BG1 = textbox + * (screenblock 9, priority 0, never scrolls), OBJ 1D mapping with a shadow + * OAM committed each vblank. VRAM on the GBA is CPU-writable at any time, so + * there is no update queue — the HAL is embarrassingly direct. + */ +#include "gba.h" + +/* generated data (gen_data.c) */ +extern const u8 *const ps_blobs[]; +extern const u8 ps_bg_art[]; +extern const u16 ps_bg_art_tiles; +extern const u8 ps_font[]; +extern const u8 ps_obj_tiles[]; +extern const u16 ps_obj_tile_count; +extern const u16 ps_bg_pal0[]; +extern const u16 ps_text_pal[]; +extern const u16 ps_obj_pal[]; +extern const u8 ps_sprite_count; + +#define TEXT_PALBANK 15 + +static u16 oam_shadow[128 * 4]; +static u8 text_rows, text_top; + +const u8 *hal_blob(u8 blob) { return ps_blobs[blob]; } + +/* ---- boot -------------------------------------------------------------------*/ +static void upload_tiles(void) { + const u16 *src; + volatile u16 *dst; + u16 i, n; + + /* art at tile 1 (tile 0 = blank, VRAM already zero) */ + src = (const u16 *)ps_bg_art; + dst = VRAM + 16; /* one 4bpp tile = 32 bytes = 16 u16 */ + n = (u16)(ps_bg_art_tiles * 16); + for (i = 0; i < n; i++) dst[i] = src[i]; + + /* font at the fixed base */ + src = (const u16 *)ps_font; + dst = VRAM + (u32)PS_BG_FONT_BASE * 16; + n = FONT_GLYPHS * 16; + for (i = 0; i < n; i++) dst[i] = src[i]; + + /* OBJ tiles */ + src = (const u16 *)ps_obj_tiles; + dst = VRAM_OBJ; + n = (u16)(ps_obj_tile_count * 16); + for (i = 0; i < n; i++) dst[i] = src[i]; +} + +void hal_init(void) { + u16 i; + for (i = 0; i < 16; i++) PAL_BG[i] = ps_bg_pal0[i]; + for (i = 0; i < 16; i++) PAL_BG[TEXT_PALBANK * 16 + i] = ps_text_pal[i]; + for (i = 0; i < (u16)(ps_sprite_count * 16); i++) PAL_OBJ[i] = ps_obj_pal[i]; + upload_tiles(); + + for (i = 0; i < 128; i++) oam_shadow[i * 4] = 0x0200; /* disabled */ + + REG_BG0CNT = (SB_MAP << 8) | 1; /* 4bpp, charblock 0, sb 8, prio 1 */ + REG_BG1CNT = (SB_TEXT << 8) | 0; /* 4bpp, charblock 0, sb 9, prio 0 */ + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + + /* PSG on */ + REG_SOUNDCNT_X = 0x0080; + REG_SOUNDCNT_L = 0xff77; + REG_SOUNDCNT_H = 0x0002; + + REG_DISPCNT = 0x0040 /* OBJ 1D */ | 0x1000 /* OBJ on */ | 0x0100 /* BG0 */ | 0x0200 /* BG1 */; +} + +/* ---- frame ------------------------------------------------------------------*/ +static void oam_commit(void) { + u16 i; + for (i = 0; i < 128 * 4; i++) OAM[i] = oam_shadow[i]; +} + +void hal_frame(void) { + while (REG_VCOUNT >= 160) {} + while (REG_VCOUNT < 160) {} + oam_commit(); +} + +u8 hal_keys(void) { return (u8)(~REG_KEYINPUT & 0xff); } + +/* ---- video --------------------------------------------------------------------*/ +void hal_map_draw(u8 mapBlob, u8 w, u8 h) { + const u8 *m = hal_blob(mapBlob); + u16 tiles_off = (u16)(m[8] | ((u16)m[9] << 8)); + volatile u16 *sb = SCREENBLOCK(SB_MAP); + u8 x, y; + for (y = 0; y < 32; y++) { + for (x = 0; x < 32; x++) { + u16 e = 0; + if (x < w && y < h) e = m[tiles_off + (u16)y * w + x]; + sb[(u16)y * 32 + x] = e; + } + } +} + +void hal_scroll(u16 px, u16 py) { + REG_BG0HOFS = px; + REG_BG0VOFS = py; +} + +void hal_obj(u8 slot, s16 px, s16 py, u8 spriteId, u8 dir, u8 frame, u8 hidden) { + u16 *o = &oam_shadow[(u16)slot * 4]; + const u8 *sp = ps_sprite_table + (u16)spriteId * SPRITE_ENTRY_SIZE; + u16 tile_base = (u16)(sp[0] | ((u16)sp[1] << 8)); + u8 frames = sp[2]; + u8 pal = sp[3]; + u8 flip = 0; + u8 dblock = dir; + + if (hidden || px <= -16 || py <= -16 || px >= 240 || py >= 160) { + o[0] = 0x0200; /* disable */ + return; + } + if (dir == DIR_LEFT) { + dblock = DIR_RIGHT; + flip = 1; + } + if (frame >= frames) frame = 0; + o[0] = (u16)((py & 0xff) | 0x0000); /* square, 4bpp */ + o[1] = (u16)((px & 0x1ff) | (flip << 12) | 0x4000); /* size 16x16 */ + o[2] = (u16)((tile_base + ((u16)dblock * frames + frame) * 4) | ((u16)pal << 12)); +} + +/* ---- textbox ---------------------------------------------------------------------*/ +void hal_text_open(u8 rows) { + volatile u16 *sb = SCREENBLOCK(SB_TEXT); + u8 x, y; + text_rows = rows; + text_top = (u8)(PS_SCREEN_TILES_H - rows - 2); + for (y = text_top; y < PS_SCREEN_TILES_H; y++) { + for (x = 0; x < PS_SCREEN_TILES_W; x++) { + /* space glyph = opaque paper */ + sb[(u16)y * 32 + x] = (u16)(PS_BG_FONT_BASE | (TEXT_PALBANK << 12)); + } + } +} + +void hal_text_close(void) { + volatile u16 *sb = SCREENBLOCK(SB_TEXT); + u8 x, y; + for (y = text_top; y < PS_SCREEN_TILES_H; y++) { + for (x = 0; x < PS_SCREEN_TILES_W; x++) sb[(u16)y * 32 + x] = 0; + } +} + +void hal_text_glyph(u8 col, u8 row, u8 glyph) { + volatile u16 *sb = SCREENBLOCK(SB_TEXT); + u16 cell = (u16)(text_top + 1 + row) * 32 + 1 + col; + sb[cell] = (u16)((PS_BG_FONT_BASE + glyph) | (TEXT_PALBANK << 12)); +} + +/* ---- sfx --------------------------------------------------------------------------*/ +void hal_sfx(u8 id) { + /* square channel 1 presets: (duty/envelope, frequency) */ + static const u16 env[5] = { 0xa1c0, 0x81c0, 0xa1c0, 0xa1c0, 0xa2c0 }; + static const u16 freq[5] = { 1750, 1200, 900, 1650, 1900 }; + if (id > 4) return; + REG_SOUND1CNT_L = 0x0008; + REG_SOUND1CNT_H = env[id]; + REG_SOUND1CNT_X = (u16)(0x8000 | freq[id]); +} + +/* ---- entry -------------------------------------------------------------------------*/ +int main(void) { + hal_init(); + rpg_boot(); + for (;;) { + rpg_tick(); + hal_frame(); + } +} diff --git a/static/runtime/gen/spec_gen.h b/static/runtime/gen/spec_gen.h new file mode 100644 index 0000000..0654b56 --- /dev/null +++ b/static/runtime/gen/spec_gen.h @@ -0,0 +1,188 @@ +/* spec_gen.h — GENERATED by static/spec/gen-c.ts. DO NOT EDIT. */ +#ifndef PS_SPEC_GEN_H +#define PS_SPEC_GEN_H + +/* ---- core VM ---- */ +#define OP_END 0x0 +#define OP_NOP 0x1 +#define OP_PUSH8 0x2 +#define OP_PUSH16 0x3 +#define OP_POP 0x4 +#define OP_DUP 0x5 +#define OP_JMP 0x6 +#define OP_JZ 0x7 +#define OP_JNZ 0x8 +#define OP_CALL 0x9 +#define OP_RET 0xA +#define OP_LDV 0xB +#define OP_STV 0xC +#define OP_LDL 0xD +#define OP_STL 0xE +#define OP_FLAG 0xF +#define OP_SETF 0x10 +#define OP_CLRF 0x11 +#define OP_STF 0x12 +#define OP_ADD 0x13 +#define OP_SUB 0x14 +#define OP_MUL 0x15 +#define OP_DIV 0x16 +#define OP_MOD 0x17 +#define OP_NEG 0x18 +#define OP_EQ 0x19 +#define OP_NE 0x1A +#define OP_LT 0x1B +#define OP_GT 0x1C +#define OP_LE 0x1D +#define OP_GE 0x1E +#define OP_NOT 0x1F +#define OP_RND 0x20 +#define OP_WAIT 0x21 +#define PS_SYSCALL_BASE 0x40 +#define VM_STACK 16 +#define VM_FRAMES 4 +#define VM_LOCALS 16 +#define VM_VARS 64 +#define VM_FLAGS 256 +#define VM_BURST 64 +#define VAR_SCRATCH_BASE 60 +#define PS_RNG_SEED 0x2A17 + +/* ---- keys (normalized pad bitmask) ---- */ +#define PS_KEY_A 0x1 +#define PS_KEY_B 0x2 +#define PS_KEY_SELECT 0x4 +#define PS_KEY_START 0x8 +#define PS_KEY_RIGHT 0x10 +#define PS_KEY_LEFT 0x20 +#define PS_KEY_UP 0x40 +#define PS_KEY_DOWN 0x80 + +/* ---- waiting states ---- */ +#define WAITING_NONE 0 +#define WAITING_TEXT 1 +#define WAITING_CHOICE 2 +#define WAITING_FRAMES 3 + +/* ---- rpg syscalls ---- */ +#define OP_SAY 0x40 +#define OP_CHOICE 0x41 +#define OP_LOCK 0x42 +#define OP_RELEASE 0x43 +#define OP_FACE 0x44 +#define OP_AVIS 0x45 +#define OP_WARP 0x46 +#define OP_SFX 0x47 +#define FACE_SELF 0xFF +#define SFX_CONFIRM 0 +#define SFX_DENY 1 +#define SFX_DAMAGE 2 +#define SFX_HEAL 3 +#define SFX_FANFARE 4 + +/* ---- directions / movement ---- */ +#define DIR_DOWN 0 +#define DIR_UP 1 +#define DIR_LEFT 2 +#define DIR_RIGHT 3 +#define MOVE_STATIC 0 +#define MOVE_WANDER 1 +#define WANDER_PERIOD 96 +#define WANDER_PHASE 17 +#define STEP_PX 2 + +/* ---- text tokens ---- */ +#define TOK_END 0x0 +#define TOK_FMT 0x1 +#define TOK_NEWLINE 0xA +#define TOK_ASCII_MIN 0x20 +#define TOK_ASCII_MAX 0x7E +#define FONT_GLYPHS 95 +#define FMT_CELLS 5 +#define TEXT_ENTRY_SIZE 3 + +/* ---- record layouts ---- */ +#define GAME_TITLE_LEN 16 +#define GAME_HEADER_SIZE 28 +#define MAP_HEADER_SIZE 20 +#define ACTOR_SIZE 8 +#define WARP_SIZE 6 +#define TRIGGER_SIZE 6 +#define SPRITE_ENTRY_SIZE 4 +#define SPRITE_FACINGS 3 +#define SPRITE_TILES_PER_FRAME 4 +#define ACTOR_F_SOLID 1 +#define ACTOR_F_HIDDEN 2 +#define TRIGGER_F_ONCE 1 +#define SCRIPT_NONE 0xFFFF +#define TEXT_NONE 0xFFFF + +/* ---- debug block ---- */ +#define DBGO_MAGIC 0x0 +#define DBGO_BOOTED 0x4 +#define DBGO_PLAYER_DIR 0x5 +#define DBGO_CUR_MAP 0x6 +#define DBGO_TEXT_ACTIVE 0x7 +#define DBGO_SCRIPT_ACTIVE 0x8 +#define DBGO_CHOICE_CURSOR 0x9 +#define DBGO_WAITING 0xA +#define DBGO_RESERVED0 0xB +#define DBGO_PLAYER_X 0xC +#define DBGO_PLAYER_Y 0xE +#define DBGO_CUR_TEXT 0x10 +#define DBGO_CUR_SCRIPT 0x12 +#define DBGO_FRAME 0x14 +#define DBGO_RNG 0x18 +#define DBGO_RESERVED1 0x1A +#define DBGO_FLAGS 0x1C +#define DBGO_VARS 0x3C +#define DEBUG_BLOCK_SIZE 0xBC +#define DEBUG_MAGIC_0 0x50 +#define DEBUG_MAGIC_1 0x53 +#define DEBUG_MAGIC_2 0x44 +#define DEBUG_MAGIC_3 0x42 + +/* ---- per-target ---- */ +#if defined(PS_TARGET_GBA) +#define PS_DEBUG_ADDR 0x2000000 +#define PS_TEXT_COLS 28 +#define PS_TEXT_LINES 3 +#define PS_MAX_CHOICES 4 +#define PS_SCREEN_TILES_W 30 +#define PS_SCREEN_TILES_H 20 +#define PS_TILE_BYTES 32 +#define PS_SCROLLS 1 +#define PS_BG_TOTAL_TILES 512 +#define PS_BG_CURSOR_TILE 415 +#define PS_BG_BOX_TILE 416 +#define PS_BG_FONT_BASE 417 +#elif defined(PS_TARGET_GB) +#define PS_DEBUG_ADDR 0xDF00 +#define PS_TEXT_COLS 18 +#define PS_TEXT_LINES 3 +#define PS_MAX_CHOICES 4 +#define PS_SCREEN_TILES_W 20 +#define PS_SCREEN_TILES_H 18 +#define PS_TILE_BYTES 16 +#define PS_SCROLLS 1 +#define PS_BG_TOTAL_TILES 256 +#define PS_BG_CURSOR_TILE 159 +#define PS_BG_BOX_TILE 160 +#define PS_BG_FONT_BASE 161 +#elif defined(PS_TARGET_NES) +#define PS_DEBUG_ADDR 0x700 +#define PS_TEXT_COLS 28 +#define PS_TEXT_LINES 3 +#define PS_MAX_CHOICES 4 +#define PS_SCREEN_TILES_W 32 +#define PS_SCREEN_TILES_H 30 +#define PS_TILE_BYTES 16 +#define PS_SCROLLS 0 +#define PS_BG_TOTAL_TILES 256 +#define PS_BG_CURSOR_TILE 159 +#define PS_BG_BOX_TILE 160 +#define PS_BG_FONT_BASE 161 +#else +#error "define exactly one of PS_TARGET_GBA / PS_TARGET_GB / PS_TARGET_NES" +#endif + +#endif /* PS_SPEC_GEN_H */ diff --git a/static/spec/gen-c.ts b/static/spec/gen-c.ts new file mode 100644 index 0000000..9f1eaad --- /dev/null +++ b/static/spec/gen-c.ts @@ -0,0 +1,159 @@ +#!/usr/bin/env bun +// static/spec/gen-c.ts — derive runtime/gen/spec_gen.h from the TS spec. +// +// bun static/spec/gen-c.ts +// +// One header serves all targets; target-specific values sit behind +// PS_TARGET_GBA / PS_TARGET_GB / PS_TARGET_NES (exactly one must be defined +// by the build). C code must use ONLY these macros for anything the compiler +// also encodes — that is what keeps the two sides from drifting. + +import { join } from "node:path"; +import { + DBG, + DEBUG_BLOCK_SIZE, + DEBUG_MAGIC_BYTES, + FMT_CELLS, + FONT_GLYPHS, + KEYS, + OP, + RNG_SEED, + SYSCALL_BASE, + TARGETS, + TEXT_ENTRY_SIZE, + TOK_ASCII_MAX, + TOK_ASCII_MIN, + TOK_END, + TOK_FMT, + TOK_NEWLINE, + VAR_SCRATCH_BASE, + VM_BURST, + VM_FLAGS, + VM_FRAMES, + VM_LOCALS, + VM_STACK, + VM_VARS, + WAITING, +} from "./isa.ts"; +import { + ACTOR_F, + ACTOR_SIZE, + DIR, + FACE_SELF, + GAME_HEADER_SIZE, + GAME_TITLE_LEN, + MAP_HEADER_SIZE, + MOVE, + RPG_OP, + SCRIPT_NONE, + SFX, + SPRITE_ENTRY_SIZE, + SPRITE_FACINGS, + SPRITE_TILES_PER_FRAME, + STEP_PX, + TEXT_NONE, + TRIGGER_F, + TRIGGER_SIZE, + WANDER_PERIOD, + WANDER_PHASE, + WARP_SIZE, +} from "./rpg.ts"; + +const lines: string[] = []; +const put = (s = "") => lines.push(s); +const def = (name: string, v: number | string) => put(`#define ${name} ${typeof v === "number" ? v : v}`); +const hex = (v: number) => `0x${v.toString(16).toUpperCase()}`; + +put("/* spec_gen.h — GENERATED by static/spec/gen-c.ts. DO NOT EDIT. */"); +put("#ifndef PS_SPEC_GEN_H"); +put("#define PS_SPEC_GEN_H"); +put(); +put("/* ---- core VM ---- */"); +for (const [name, code] of Object.entries(OP)) def(`OP_${name}`, hex(code)); +def("PS_SYSCALL_BASE", hex(SYSCALL_BASE)); +def("VM_STACK", VM_STACK); +def("VM_FRAMES", VM_FRAMES); +def("VM_LOCALS", VM_LOCALS); +def("VM_VARS", VM_VARS); +def("VM_FLAGS", VM_FLAGS); +def("VM_BURST", VM_BURST); +def("VAR_SCRATCH_BASE", VAR_SCRATCH_BASE); +def("PS_RNG_SEED", hex(RNG_SEED)); +put(); +put("/* ---- keys (normalized pad bitmask) ---- */"); +for (const [name, v] of Object.entries(KEYS)) def(`PS_KEY_${name}`, hex(v)); +put(); +put("/* ---- waiting states ---- */"); +for (const [name, v] of Object.entries(WAITING)) def(`WAITING_${name}`, v); +put(); +put("/* ---- rpg syscalls ---- */"); +for (const [name, code] of Object.entries(RPG_OP)) def(`OP_${name}`, hex(code)); +def("FACE_SELF", hex(FACE_SELF)); +for (const [name, v] of Object.entries(SFX)) def(`SFX_${name}`, v); +put(); +put("/* ---- directions / movement ---- */"); +for (const [name, v] of Object.entries(DIR)) def(`DIR_${name}`, v); +for (const [name, v] of Object.entries(MOVE)) def(`MOVE_${name}`, v); +def("WANDER_PERIOD", WANDER_PERIOD); +def("WANDER_PHASE", WANDER_PHASE); +def("STEP_PX", STEP_PX); +put(); +put("/* ---- text tokens ---- */"); +def("TOK_END", hex(TOK_END)); +def("TOK_FMT", hex(TOK_FMT)); +def("TOK_NEWLINE", hex(TOK_NEWLINE)); +def("TOK_ASCII_MIN", hex(TOK_ASCII_MIN)); +def("TOK_ASCII_MAX", hex(TOK_ASCII_MAX)); +def("FONT_GLYPHS", FONT_GLYPHS); +def("FMT_CELLS", FMT_CELLS); +def("TEXT_ENTRY_SIZE", TEXT_ENTRY_SIZE); +put(); +put("/* ---- record layouts ---- */"); +def("GAME_TITLE_LEN", GAME_TITLE_LEN); +def("GAME_HEADER_SIZE", GAME_HEADER_SIZE); +def("MAP_HEADER_SIZE", MAP_HEADER_SIZE); +def("ACTOR_SIZE", ACTOR_SIZE); +def("WARP_SIZE", WARP_SIZE); +def("TRIGGER_SIZE", TRIGGER_SIZE); +def("SPRITE_ENTRY_SIZE", SPRITE_ENTRY_SIZE); +def("SPRITE_FACINGS", SPRITE_FACINGS); +def("SPRITE_TILES_PER_FRAME", SPRITE_TILES_PER_FRAME); +for (const [name, v] of Object.entries(ACTOR_F)) def(`ACTOR_F_${name}`, v); +for (const [name, v] of Object.entries(TRIGGER_F)) def(`TRIGGER_F_${name}`, v); +def("SCRIPT_NONE", hex(SCRIPT_NONE)); +def("TEXT_NONE", hex(TEXT_NONE)); +put(); +put("/* ---- debug block ---- */"); +for (const [name, off] of Object.entries(DBG)) def(`DBGO_${name}`, hex(off)); +def("DEBUG_BLOCK_SIZE", hex(DEBUG_BLOCK_SIZE)); +DEBUG_MAGIC_BYTES.forEach((b, idx) => def(`DEBUG_MAGIC_${idx}`, hex(b))); +put(); +put("/* ---- per-target ---- */"); +const guards = { gba: "PS_TARGET_GBA", gb: "PS_TARGET_GB", nes: "PS_TARGET_NES" } as const; +let first = true; +for (const t of ["gba", "gb", "nes"] as const) { + const spec = TARGETS[t]; + put(`#${first ? "if" : "elif"} defined(${guards[t]})`); + first = false; + def("PS_DEBUG_ADDR", hex(spec.debugAddr)); + def("PS_TEXT_COLS", spec.textCols); + def("PS_TEXT_LINES", spec.textLines); + def("PS_MAX_CHOICES", spec.maxChoices); + def("PS_SCREEN_TILES_W", spec.screenTilesW); + def("PS_SCREEN_TILES_H", spec.screenTilesH); + def("PS_TILE_BYTES", spec.tileBytes); + def("PS_SCROLLS", spec.scrolls ? 1 : 0); + def("PS_BG_TOTAL_TILES", spec.bgTotalTiles); + def("PS_BG_CURSOR_TILE", spec.bgTotalTiles - 97); + def("PS_BG_BOX_TILE", spec.bgTotalTiles - 96); + def("PS_BG_FONT_BASE", spec.bgTotalTiles - 95); +} +put("#else"); +put('#error "define exactly one of PS_TARGET_GBA / PS_TARGET_GB / PS_TARGET_NES"'); +put("#endif"); +put(); +put("#endif /* PS_SPEC_GEN_H */"); + +const out = join(import.meta.dir, "..", "runtime", "gen", "spec_gen.h"); +await Bun.write(out, lines.join("\n") + "\n"); +console.log(`wrote ${out} (${lines.length} lines)`); diff --git a/static/spec/isa.ts b/static/spec/isa.ts new file mode 100644 index 0000000..83f0d70 --- /dev/null +++ b/static/spec/isa.ts @@ -0,0 +1,390 @@ +// static/spec/isa.ts — the Pocket Static core contract, single source of truth. +// +// Everything binary that is CATEGORY-INDEPENDENT lives here: the stack-VM ISA, +// the blob/text encodings, the per-target hardware table, and the runtime +// debug block. Category specs (spec/rpg.ts, ...) extend the opcode space from +// SYSCALL_BASE up and define their own record layouts. +// +// Both sides derive from this file: +// - the compiler (static/compiler/*) ENCODES these layouts, +// - every C runtime DECODES them via the generated gen/spec_gen.h +// (static/spec/gen-c.ts), so C can never drift from TS, +// - static/vm/ref.ts INTERPRETS the ISA on the host — the reference +// implementation the emulator suites hold the consoles to. +// +// Conventions (non-negotiable): +// - Little-endian everywhere (ARM7TDMI, SM83 and 6502 are all LE). +// - All VM values are signed 16-bit integers (i16). +// - Relative jumps are measured from AFTER the 2-byte operand. +// - Offsets in comments are from the start of the containing record. + +// --------------------------------------------------------------------------- +// Targets +// --------------------------------------------------------------------------- +export type TargetName = "gba" | "gb" | "nes"; + +export interface TargetSpec { + name: TargetName; + /** Visible screen in 8x8 tiles. */ + screenTilesW: number; + screenTilesH: number; + /** Bytes per 8x8 tile in the native format. */ + tileBytes: number; + /** Textbox text area: columns and lines per page (compile-time wrapping). */ + textCols: number; + textLines: number; + /** Max options per CHOICE menu (one line each). */ + maxChoices: number; + /** + * Total BG tiles in the runtime's tile table. The layout convention is + * FIXED on every target (no header fields needed): + * 0 = blank + * 1..total-99 = game art (bgArtTiles budget) + * total-97 = choice cursor + * total-96 = textbox fill + * total-95..total-1 = the 95 ASCII font glyphs + */ + bgTotalTiles: number; + /** BG tile budget for game art (= bgTotalTiles - 98). */ + bgArtTiles: number; + /** OBJ tile budget in 8x8 tiles. */ + objTiles: number; + /** Absolute bus address of the debug block. */ + debugAddr: number; + /** Max map size in tiles. */ + maxMapW: number; + maxMapH: number; + /** Whether the camera may scroll (NES v1 is one static nametable). */ + scrolls: boolean; + /** ROM file extension. */ + ext: string; +} + +export const TARGETS: Record = { + gba: { + name: "gba", + screenTilesW: 30, + screenTilesH: 20, + tileBytes: 32, // 4bpp + textCols: 28, + textLines: 3, + maxChoices: 4, + bgTotalTiles: 512, // charblock 0 + bgArtTiles: 414, + objTiles: 1024, + debugAddr: 0x02000000, // EWRAM base; linker keeps EWRAM empty + maxMapW: 32, + maxMapH: 30, + scrolls: true, + ext: ".gba", + }, + gb: { + name: "gb", + screenTilesW: 20, + screenTilesH: 18, + tileBytes: 16, // 2bpp interleaved + textCols: 18, + textLines: 3, + maxChoices: 4, + bgTotalTiles: 256, // signed addressing window 0x8800-0x97FF + bgArtTiles: 158, + objTiles: 128, // OBJ block 0x8000-0x87FF + debugAddr: 0xdf00, // top of WRAM; our crt0 parks SP just below + maxMapW: 32, + maxMapH: 30, + scrolls: true, + ext: ".gb", + }, + nes: { + name: "nes", + screenTilesW: 32, + screenTilesH: 30, + tileBytes: 16, // 2bpp planar + textCols: 28, + textLines: 3, + maxChoices: 4, + bgTotalTiles: 256, // CHR-RAM pattern table 0 + bgArtTiles: 158, + objTiles: 256, // pattern table 1 + debugAddr: 0x0700, // top page of the 2 KB CPU RAM + maxMapW: 32, + maxMapH: 30, // one nametable + scrolls: false, + ext: ".nes", + }, +}; + +export const TILE_PX = 8; + +/** Fixed BG tile layout (see TargetSpec.bgTotalTiles). */ +export const bgLayout = (t: TargetSpec) => ({ + blank: 0, + artBase: 1, + cursorTile: t.bgTotalTiles - 97, + boxTile: t.bgTotalTiles - 96, + fontBase: t.bgTotalTiles - 95, +}); + +// --------------------------------------------------------------------------- +// Core stack-VM ISA — opcodes 0x00..0x3F. Categories own 0x40+. +// +// The VM: operand stack of i16 (depth VM_STACK), call stack of VM_FRAMES +// frames, each frame owning VM_LOCALS fresh local slots. Globals: VM_VARS +// i16 vars + VM_FLAGS single-bit flags. One script runs at a time; blocking +// ops SUSPEND the VM (the frame loop resumes it when the condition clears). +// The interpreter executes at most VM_BURST ops per frame between suspensions +// (runaway-loop guard: a script that never suspends still yields the frame). +// --------------------------------------------------------------------------- +export const OP = { + END: 0x00, // terminate the whole script (any depth) + NOP: 0x01, + PUSH8: 0x02, // i8 push sign-extended + PUSH16: 0x03, // i16 push + POP: 0x04, // discard top + DUP: 0x05, // duplicate top + JMP: 0x06, // rel16 ip += rel + JZ: 0x07, // rel16 a=pop; if a==0 ip += rel + JNZ: 0x08, // rel16 a=pop; if a!=0 ip += rel + CALL: 0x09, // u16 scriptId push frame, jump to script entry + RET: 0x0a, // pop frame; at depth 0 acts like END + LDV: 0x0b, // u8 varId push vars[id] + STV: 0x0c, // u8 varId vars[id] = pop + LDL: 0x0d, // u8 slot push locals[slot] + STL: 0x0e, // u8 slot locals[slot] = pop + FLAG: 0x0f, // u8 flagId push flags[id] (0/1) + SETF: 0x10, // u8 flagId flags[id] = 1 + CLRF: 0x11, // u8 flagId flags[id] = 0 + STF: 0x12, // u8 flagId flags[id] = (pop != 0) + ADD: 0x13, // b=pop,a=pop, push a+b (i16 wrap) + SUB: 0x14, // push a-b + MUL: 0x15, // push a*b (low 16) + DIV: 0x16, // push a/b trunc; b==0 -> 0 + MOD: 0x17, // push a%b (sign of a); b==0 -> 0 + NEG: 0x18, // push -pop + EQ: 0x19, // push a==b + NE: 0x1a, + LT: 0x1b, // signed + GT: 0x1c, + LE: 0x1d, + GE: 0x1e, + NOT: 0x1f, // push pop==0 + RND: 0x20, // n=pop, push uniform 0..n-1 (n<=0 -> 0) + WAIT: 0x21, // n=pop, SUSPEND n frames +} as const; +export type CoreOpName = keyof typeof OP; + +/** First category-owned opcode. */ +export const SYSCALL_BASE = 0x40; + +/** Operand bytes AFTER the opcode byte, for core ops. */ +export const OP_OPERANDS: Record = { + [OP.END]: 0, + [OP.NOP]: 0, + [OP.PUSH8]: 1, + [OP.PUSH16]: 2, + [OP.POP]: 0, + [OP.DUP]: 0, + [OP.JMP]: 2, + [OP.JZ]: 2, + [OP.JNZ]: 2, + [OP.CALL]: 2, + [OP.RET]: 0, + [OP.LDV]: 1, + [OP.STV]: 1, + [OP.LDL]: 1, + [OP.STL]: 1, + [OP.FLAG]: 1, + [OP.SETF]: 1, + [OP.CLRF]: 1, + [OP.STF]: 1, + [OP.ADD]: 0, + [OP.SUB]: 0, + [OP.MUL]: 0, + [OP.DIV]: 0, + [OP.MOD]: 0, + [OP.NEG]: 0, + [OP.EQ]: 0, + [OP.NE]: 0, + [OP.LT]: 0, + [OP.GT]: 0, + [OP.LE]: 0, + [OP.GE]: 0, + [OP.NOT]: 0, + [OP.RND]: 0, + [OP.WAIT]: 0, +}; + +export const VM_STACK = 16; // operand stack depth (i16 entries) +export const VM_FRAMES = 4; // call depth (top-level script = frame 0) +export const VM_LOCALS = 16; // local slots per frame +export const VM_VARS = 64; // global i16 vars +export const VM_FLAGS = 256; // global flags (bit set) +export const VM_BURST = 64; // max ops per frame between suspensions + +// Vars 60..63 are compiler scratch (text interpolation slots etc). +export const VAR_SCRATCH_BASE = 60; +export const VAR_USER_MAX = VAR_SCRATCH_BASE; // user vars must intern below this + +/** + * Cross-target key bitmask (the HAL normalizes each console's pad to this; + * harness scenarios use the names). + */ +export const KEYS = { + A: 0x01, + B: 0x02, + SELECT: 0x04, + START: 0x08, + RIGHT: 0x10, + LEFT: 0x20, + UP: 0x40, + DOWN: 0x80, +} as const; +export type KeyName = keyof typeof KEYS; + +/** Suspension reasons (debug block WAITING field + runtime state). */ +export const WAITING = { + NONE: 0, + TEXT: 1, // SAY page on screen, waiting for A + CHOICE: 2, // CHOICE menu up, waiting for pick + FRAMES: 3, // WAIT counting down +} as const; + +// Deterministic RNG: xorshift16, advanced ONLY by OP.RND. Same seed, same +// script => same story on every console (and in vm/ref.ts). +// x ^= x << 7; x ^= x >> 9; x ^= x << 8; (all 16-bit) +export const RNG_SEED = 0x2a17; + +export function rngNext(state: number): number { + let x = state & 0xffff; + x ^= (x << 7) & 0xffff; + x ^= x >> 9; + x ^= (x << 8) & 0xffff; + return x & 0xffff; +} + +// --------------------------------------------------------------------------- +// Text encoding — token streams, wrapped and paginated at COMPILE TIME per +// target. The runtime never measures text. +// 0x00 end of page +// 0x0A newline (next line) +// 0x01, u8 v FMT slot: render vars[v] as signed decimal (typewriter +// reveals it as one unit); v is a VAR_SCRATCH_BASE.. slot +// 0x20..0x7E ASCII literal -> font glyph (byte - 0x20) +// --------------------------------------------------------------------------- +export const TOK_END = 0x00; +export const TOK_FMT = 0x01; +export const TOK_NEWLINE = 0x0a; +export const TOK_ASCII_MIN = 0x20; +export const TOK_ASCII_MAX = 0x7e; +export const FONT_GLYPHS = TOK_ASCII_MAX - TOK_ASCII_MIN + 1; // 95 +/** Cells reserved when wrapping a FMT slot (i16 max is "-32768" = 6; we + * assume gameplay numbers and reserve 5). */ +export const FMT_CELLS = 5; + +// --------------------------------------------------------------------------- +// Blobs — the unit of data placement. GBA concatenates them flat; GB/NES +// assign each blob wholly into one 16 KB switchable bank and latch per +// access. Blob ids are u8, dense from 0, in BLOB_KIND declaration order per +// game (the compiler emits a per-target directory; see targets/*). +// --------------------------------------------------------------------------- +export const BANK_SIZE = 0x4000; // GB/NES switchable window +export const BLOB_KIND = { + SCRIPTS: 0, // bytecode, all scripts concatenated (single blob, <= 16 KB) + TEXT: 1, // token streams (may be several TEXT blobs) + MAP: 2, // one blob per map (grid + collision + actors + warps + triggers) + TILES_BG: 3, // native-encoded BG art tiles + TILES_OBJ: 4, // native-encoded OBJ tiles + FONT: 5, // 95 glyphs, native encoding +} as const; + +// Script table (fixed region): u16 byte offset into the SCRIPTS blob per id. +// Text table (fixed region): per text id, 3 bytes: u8 blobId, u16 offset. +export const TEXT_ENTRY_SIZE = 3; + +// --------------------------------------------------------------------------- +// Debug block — every runtime mirrors this to TARGETS[t].debugAddr each +// frame; emulator harnesses read it over the bus. Same layout on all targets. +// --------------------------------------------------------------------------- +export const DBG = { + MAGIC: 0x00, // u32 'PSDB' bytes P,S,D,B + BOOTED: 0x04, // u8 1 once the main loop runs + PLAYER_DIR: 0x05, // u8 DIR.* + CUR_MAP: 0x06, // u8 + TEXT_ACTIVE: 0x07, // u8 + SCRIPT_ACTIVE: 0x08, // u8 + CHOICE_CURSOR: 0x09, // u8 + WAITING: 0x0a, // u8 WAITING.* + RESERVED0: 0x0b, // u8 + PLAYER_X: 0x0c, // u16 tile + PLAYER_Y: 0x0e, // u16 tile + CUR_TEXT: 0x10, // u16 text id shown (0xFFFF none) + CUR_SCRIPT: 0x12, // u16 running script id (0xFFFF none) + FRAME: 0x14, // u32 + RNG: 0x18, // u16 rng state + RESERVED1: 0x1a, // u16 + FLAGS: 0x1c, // u8[32] flag n -> byte n>>3, bit n&7 + VARS: 0x3c, // i16[64] +} as const; +export const DEBUG_MAGIC_BYTES = [0x50, 0x53, 0x44, 0x42] as const; // P,S,D,B +export const DEBUG_BLOCK_SIZE = DBG.VARS + VM_VARS * 2; // 0xBC = 188 + +export const dbgAddr = (t: TargetName, field: keyof typeof DBG): number => + TARGETS[t].debugAddr + DBG[field]; +export const dbgFlagAddr = (t: TargetName, flagId: number): { addr: number; bit: number } => ({ + addr: TARGETS[t].debugAddr + DBG.FLAGS + (flagId >> 3), + bit: flagId & 7, +}); +export const dbgVarAddr = (t: TargetName, varId: number): number => + TARGETS[t].debugAddr + DBG.VARS + varId * 2; + +// --------------------------------------------------------------------------- +// Shared helpers +// --------------------------------------------------------------------------- +export const i16 = (v: number): number => { + const x = v & 0xffff; + return x >= 0x8000 ? x - 0x10000 : x; +}; + +export function rgb555(r: number, g: number, b: number): number { + return (((b >> 3) & 0x1f) << 10) | (((g >> 3) & 0x1f) << 5) | ((r >> 3) & 0x1f); +} + +/** Little-endian byte builder used by every compiler stage. */ +export class ByteWriter { + private buf: number[] = []; + get length(): number { + return this.buf.length; + } + u8(v: number): this { + this.buf.push(v & 0xff); + return this; + } + u16(v: number): this { + this.buf.push(v & 0xff, (v >> 8) & 0xff); + return this; + } + i16(v: number): this { + return this.u16(v & 0xffff); + } + u32(v: number): this { + this.buf.push(v & 0xff, (v >> 8) & 0xff, (v >> 16) & 0xff, (v >> 24) & 0xff); + return this; + } + bytes(b: ArrayLike): this { + for (let i = 0; i < b.length; i++) this.buf.push(b[i] & 0xff); + return this; + } + ascii(s: string, fixedLen?: number): this { + const n = fixedLen ?? s.length; + for (let i = 0; i < n; i++) this.buf.push(i < s.length ? s.charCodeAt(i) & 0xff : 0); + return this; + } + patchU16(at: number, v: number): this { + this.buf[at] = v & 0xff; + this.buf[at + 1] = (v >> 8) & 0xff; + return this; + } + toUint8Array(): Uint8Array { + return Uint8Array.from(this.buf); + } +} diff --git a/static/spec/rpg.ts b/static/spec/rpg.ts new file mode 100644 index 0000000..4389fe1 --- /dev/null +++ b/static/spec/rpg.ts @@ -0,0 +1,168 @@ +// static/spec/rpg.ts — the RPG category contract: syscall opcodes 0x40+ and +// the binary record layouts of the RPG game model. Extends spec/isa.ts; the +// same derivation rules apply (compiler encodes, gen/spec_gen.h keeps C +// honest, vm/ref.ts + rpg host stubs interpret on the host). +// +// A category is: syscalls + records + budgets + a portable runtime module. +// This file is the whole binary surface of the RPG category. + +import { SYSCALL_BASE } from "./isa.ts"; + +// --------------------------------------------------------------------------- +// Syscalls (0x40..). Blocking ops SUSPEND the VM; value ops push a result. +// --------------------------------------------------------------------------- +export const RPG_OP = { + SAY: SYSCALL_BASE + 0x00, // u16 textId page up, SUSPEND until A + CHOICE: SYSCALL_BASE + 0x01, // u8 n, u16 t0.. menu, SUSPEND, push index + LOCK: SYSCALL_BASE + 0x02, // player input off (movement) + RELEASE: SYSCALL_BASE + 0x03, // player input on + FACE: SYSCALL_BASE + 0x04, // u8 slot actor faces the player; 0xFF = the actor that started this script + AVIS: SYSCALL_BASE + 0x05, // u8 slot, u8 on actor visible/hidden (hidden = no draw, no collide, no talk) + WARP: SYSCALL_BASE + 0x06, // u8 map, u8 x, u8 y, u8 dir move player (loads map if different) + SFX: SYSCALL_BASE + 0x07, // u8 id square-wave blip (SFX.*) +} as const; + +export const RPG_OP_OPERANDS: Record = { + [RPG_OP.SAY]: 2, + [RPG_OP.CHOICE]: -1, // variable: 1 + 2*n + [RPG_OP.LOCK]: 0, + [RPG_OP.RELEASE]: 0, + [RPG_OP.FACE]: 1, + [RPG_OP.AVIS]: 2, + [RPG_OP.WARP]: 4, + [RPG_OP.SFX]: 1, +}; + +export const FACE_SELF = 0xff; + +export const SFX = { + CONFIRM: 0, + DENY: 1, + DAMAGE: 2, + HEAL: 3, + FANFARE: 4, +} as const; +export type SfxName = keyof typeof SFX; + +// --------------------------------------------------------------------------- +// Directions / movement +// --------------------------------------------------------------------------- +export const DIR = { DOWN: 0, UP: 1, LEFT: 2, RIGHT: 3 } as const; +export type DirName = "down" | "up" | "left" | "right"; +export const DIR_BY_NAME: Record = { down: 0, up: 1, left: 2, right: 3 }; +export const DIR_DX = [0, 0, -1, 1] as const; +export const DIR_DY = [1, -1, 0, 0] as const; + +export const MOVE = { STATIC: 0, WANDER: 1 } as const; +export type MoveName = "static" | "wander"; +// Wander cadence: an actor attempts one random step every WANDER_PERIOD +// frames (per-slot phase offset = slot * WANDER_PHASE), using its own tiny +// LCG so gameplay RNG (OP.RND) stays script-deterministic. +export const WANDER_PERIOD = 96; +export const WANDER_PHASE = 17; + +// Player/actor movement: 8px logical grid, 2px per frame => 4 frames per +// tile step. Walk animation flips frame every 8px moved. +export const STEP_PX = 2; + +// --------------------------------------------------------------------------- +// Game header (fixed region, GAME_HEADER_SIZE bytes) +// 0 u8[16] title (ascii, null-padded; also feeds cart headers) +// 16 u8 start_map +// 17 u8 start_x (tile) +// 18 u8 start_y +// 19 u8 start_dir +// 20 u8 map_count +// 21 u8 sprite_count +// 22 u16 text_count +// 24 u16 script_count +// 26 u8 player_sprite +// 27 u8 reserved +// = 28 bytes +// --------------------------------------------------------------------------- +export const GAME_TITLE_LEN = 16; +export const GAME_HEADER_SIZE = 28; + +// --------------------------------------------------------------------------- +// Map blob (one BLOB_KIND.MAP per map). Header, then tables; *_off relative +// to blob start. +// 0 u8 width (tiles) +// 1 u8 height +// 2 u8 actor_count +// 3 u8 warp_count +// 4 u8 trigger_count +// 5 u8 reserved +// 6 u16 on_enter (script id, 0xFFFF = none; runs on map load) +// 8 u16 tiles_off -> u8[w*h] tile ids (row-major) +// 10 u16 collision_off -> u8[ceil(w*h/8)] solidity bitset (bit = x + y*w) +// 12 u16 actors_off -> Actor[actor_count] +// 14 u16 warps_off -> Warp[warp_count] +// 16 u16 triggers_off -> Trigger[trigger_count] +// 18 u16 reserved +// = 20 bytes +// --------------------------------------------------------------------------- +export const MAP_HEADER_SIZE = 20; + +// Actor (8 bytes): +// 0 u8 x (tile) +// 1 u8 y +// 2 u8 sprite_id +// 3 u8 facing DIR.* +// 4 u8 move MOVE.* +// 5 u8 flags ACTOR_F.* (SOLID | HIDDEN) +// 6 u16 on_talk script id, 0xFFFF = none +export const ACTOR_SIZE = 8; +export const ACTOR_F = { SOLID: 1, HIDDEN: 2 } as const; +export const MAX_ACTORS_PER_MAP = 16; + +// Warp (6 bytes): stepping onto (x,y) relocates the player. +// 0 u8 x +// 1 u8 y +// 2 u8 dest_map +// 3 u8 dest_x +// 4 u8 dest_y +// 5 u8 dest_dir +export const WARP_SIZE = 6; + +// Trigger (6 bytes): stepping onto (x,y) runs a script. +// 0 u8 x +// 1 u8 y +// 2 u16 script (0xFFFF = none) +// 4 u8 flags TRIGGER_F.* +// 5 u8 once_flag (flag id armed when TRIGGER_F.ONCE; skip if set) +export const TRIGGER_SIZE = 6; +export const TRIGGER_F = { ONCE: 1 } as const; + +export const SCRIPT_NONE = 0xffff; +export const TEXT_NONE = 0xffff; + +// --------------------------------------------------------------------------- +// Sprites — 16x16 actors, 4 facings, 1..2 walk frames per facing. +// Sprite table entry (4 bytes), OBJ tiles indexed in 8x8 units: +// 0 u16 tile_base (facing/frame block: dir*frames + frame, 4 tiles each, +// order TL,TR,BL,BR) +// 2 u8 frames (1 or 2) +// 3 u8 palette (OBJ palette bank / NES OBJ subpalette) +// LEFT renders as RIGHT h-flipped via OAM attributes on every target (GBA +// OBJ attr, GB OAM flags, NES OAM byte 2 — all have H-flip bits). +// Facing order in tile data: DOWN, UP, RIGHT. The per-frame TILE ORDER is +// target-chosen by the packager (GBA 1D: TL,TR,BL,BR; GB/NES 8x16 pairs: +// TL,BL,TR,BR) — tile_base counts in that native order. +// --------------------------------------------------------------------------- +export const SPRITE_ENTRY_SIZE = 4; +export const SPRITE_PX = 16; +export const SPRITE_FACINGS = 3; // DOWN, UP, RIGHT (LEFT mirrors RIGHT) +export const SPRITE_TILES_PER_FRAME = 4; + +// --------------------------------------------------------------------------- +// Budgets (compile-time errors) +// --------------------------------------------------------------------------- +export const RPG_BUDGET = { + MAX_MAPS: 32, + MAX_SPRITES: 12, + MAX_TEXTS: 512, + MAX_SCRIPTS: 256, + MAX_SCRIPT_BLOB: 0x4000, // one bank + MAX_TEXT_BLOB: 0x4000, // per TEXT blob; the compiler splits + MAX_TILESET_TILES: 158, // shared GB/NES ceiling; GBA checked separately +} as const; diff --git a/static/test/e2e.ts b/static/test/e2e.ts new file mode 100644 index 0000000..8efdb6c --- /dev/null +++ b/static/test/e2e.ts @@ -0,0 +1,266 @@ +#!/usr/bin/env bun +// static/test/e2e.ts — the cross-target contract suite. +// +// Build the smoke game for each target, then drive the same logical +// playthrough through each console's headless emulator (libmgba for gba/gb, +// jsnes for nes) and assert on the shared debug block. The REFERENCE VM is +// the oracle: the expected choice-round count, page counts and final +// vars/flags are computed by playing the story on vm/ref.ts first — the +// consoles just have to agree with it. +// +// bun static/test/e2e.ts # all targets with a runtime +// bun static/test/e2e.ts gba gb # subset + +import { $ } from "bun"; +import { join } from "node:path"; +import { compileGame, type CompileOutput } from "../compiler/index.ts"; +import { buildGba } from "../compiler/targets/gba.ts"; +import { buildGb } from "../compiler/targets/gb.ts"; +import { buildNes } from "../compiler/targets/nes.ts"; +import { DBG, KEYS, TARGETS, dbgFlagAddr, dbgVarAddr, type TargetName } from "../spec/isa.ts"; +import { RefVM } from "../vm/ref.ts"; +import { AutoRpgHost } from "../vm/rpg-host.ts"; + +const HERE = import.meta.dir; +const DIST = join(HERE, "..", "dist"); +const SHOTS = join(DIST, "shots"); +const ENTRY = join(HERE, "smoke", "game.ts"); +const RUNNER = join(HERE, "harness", "mgba_runner"); +const NES_RUNNER = join(HERE, "harness", "nes_runner.ts"); + +let passed = 0; +let failed = 0; +function check(name: string, got: unknown, want: unknown): void { + const ok = got === want; + console.log(` ${ok ? "\x1b[32mPASS\x1b[0m" : "\x1b[31mFAIL\x1b[0m"} ${name}: ${got}${ok ? "" : ` (want ${want})`}`); + ok ? passed++ : failed++; +} + +// --------------------------------------------------------------------------- +// Scenario builder (line protocol shared by both harnesses) +// --------------------------------------------------------------------------- +class Scenario { + lines: string[] = []; + advance(frames: number): this { + this.lines.push(`A ${frames}`); + return this; + } + press(keys: (keyof typeof KEYS)[], hold = 2, release = 6): this { + const mask = keys.reduce((m, k) => m | KEYS[k], 0); + this.lines.push(`P ${mask.toString(16)} ${hold} ${release}`); + return this; + } + read(name: string, addr: number, size: 1 | 2 | 4): this { + this.lines.push(`R ${name} 0x${addr.toString(16)} ${size}`); + return this; + } + shot(path: string): this { + this.lines.push(`S ${path}`); + return this; + } +} + +async function run(target: TargetName, rom: string, sc: Scenario): Promise> { + const file = join(DIST, `scenario-${target}.txt`); + await Bun.write(file, sc.lines.join("\n") + "\n"); + const out = + target === "nes" ? await $`bun ${NES_RUNNER} ${rom} ${file}`.text() : await $`${RUNNER} ${rom} ${file}`.text(); + const line = out.trim().split("\n").reverse().find((l) => l.startsWith("{")); + if (!line) throw new Error(`runner produced no JSON:\n${out}`); + const parsed = JSON.parse(line); + if (!parsed.ok) throw new Error(`runner error: ${line}`); + return parsed.reads ?? {}; +} + +// --------------------------------------------------------------------------- +// Oracle: play the guide fight on the reference VM +// --------------------------------------------------------------------------- +interface Oracle { + /** say-page text ids in on-screen order */ + sayPages: number[]; + choiceCount: number; + hp: number; + cheers: number; + subCalls: number; +} + +function oracle(out: CompileOutput): Oracle { + const code = out.linked.blobs[out.linked.scriptBlobIndex].bytes; + const host = new AutoRpgHost(Array(30).fill(0)); + const vm = new RefVM(code, out.linked.scriptTable, host); + host.play(vm, out.debug.scripts.GuideTalk); + return { + sayPages: host.events.filter((e) => e.kind === "say").map((e) => (e as { textId: number }).textId), + choiceCount: host.events.filter((e) => e.kind === "choice").length, + hp: vm.getVar(out.debug.vars.hp), + cheers: vm.getVar(out.debug.vars.cheers), + subCalls: vm.getVar(out.debug.vars.sub_calls), + }; +} + +// --------------------------------------------------------------------------- +// The playthrough, per target +// --------------------------------------------------------------------------- +async function testTarget(target: TargetName): Promise { + console.log(`\n=== ${target.toUpperCase()} ===`); + const out = await compileGame(ENTRY, target); + const rom = join(DIST, `smoke${TARGETS[target].ext}`); + if (target === "gba") await buildGba(out.linked, rom); + else if (target === "gb") await buildGb(out.linked, rom); + else await buildNes(out.linked, rom); + await $`mkdir -p ${SHOTS}`.quiet(); + + const A = (f: keyof typeof DBG) => TARGETS[target].debugAddr + DBG[f]; + const orc = oracle(out); + const { vars, flags } = out.debug; + const shot = (n: string) => join(SHOTS, `${target}_${n}.ppm`); + // Generous page-reveal wait: longest page is < 90 tokens at 2/frame, + // plus queued-clear latency on the 8-bit consoles. + const REVEAL = 70; + + console.log("boot & spawn"); + { + const r = await run( + target, + rom, + new Scenario() + .advance(30) + .read("boot", A("BOOTED"), 1) + .read("x", A("PLAYER_X"), 2) + .read("y", A("PLAYER_Y"), 2) + .read("map", A("CUR_MAP"), 1) + .read("dir", A("PLAYER_DIR"), 1) + .shot(shot("01_boot")), + ); + check("booted", r.boot, 1); + check("spawn x", r.x, 5); + check("spawn y", r.y, 1); + check("map", r.map, 0); + check("dir down", r.dir, 0); + } + + console.log("walk, collide with npc, talk, choice, battle, flag"); + { + const sc = new Scenario() + .advance(30) + // two tiles left; third is the guide (solid) — hold long enough for 3 + .press(["LEFT"], 20, 4) + .read("blockedX", A("PLAYER_X"), 2) + .read("dirLeft", A("PLAYER_DIR"), 1) + .press(["A"], 2, 6) // talk + .read("script1", A("SCRIPT_ACTIVE"), 1) + .advance(REVEAL) + .read("text1", A("TEXT_ACTIVE"), 1) + .read("page1", A("CUR_TEXT"), 2) + .shot(shot("02_dialogue")) + .press(["A"], 2, 6) // dismiss page -> choice + .advance(10) + .read("waitChoice", A("WAITING"), 1) + .read("cursor0", A("CHOICE_CURSOR"), 1) + .press(["DOWN"], 2, 4) + .read("cursor1", A("CHOICE_CURSOR"), 1) + .press(["UP"], 2, 4) + .read("cursorBack", A("CHOICE_CURSOR"), 1) + .shot(shot("03_choice")) + .press(["A"], 2, 8); // pick "Spar" + // battle rounds: one choice each (pick "Strike"), menu redraws between + for (let i = 1; i < orc.choiceCount; i++) sc.advance(30).press(["A"], 2, 8); + // win pages (FMT slot included), one A per page + for (let i = 1; i < orc.sayPages.length; i++) sc.advance(REVEAL).shot(shot("04_win")).press(["A"], 2, 6); + sc.advance(10) + .read("scriptEnd", A("SCRIPT_ACTIVE"), 1) + .read("textEnd", A("TEXT_ACTIVE"), 1) + .read("flagWon", dbgFlagAddr(target, flags.beat_guide).addr, 1) + .read("hp", dbgVarAddr(target, vars.hp), 2) + .read("cheers", dbgVarAddr(target, vars.cheers), 2) + .read("subCalls", dbgVarAddr(target, vars.sub_calls), 2) + // re-talk takes the short flag branch + .press(["A"], 2, 6) + .advance(REVEAL) + .read("retalkText", A("TEXT_ACTIVE"), 1) + .read("retalkPage", A("CUR_TEXT"), 2); + const r = await run(target, rom, sc); + check("blocked at guide (x=4)", r.blockedX, 4); + check("faces left", r.dirLeft, 2); + check("script active", r.script1, 1); + check("textbox up", r.text1, 1); + check("first page id", r.page1, orc.sayPages[0]); + check("choice waiting", r.waitChoice, 2); + check("cursor 0", r.cursor0, 0); + check("cursor down", r.cursor1, 1); + check("cursor up", r.cursorBack, 0); + check("script ended", r.scriptEnd, 0); + check("textbox closed", r.textEnd, 0); + const fw = dbgFlagAddr(target, flags.beat_guide); + check("beat_guide set", (r.flagWon >> fw.bit) & 1, 1); + check("hp matches reference vm", (r.hp << 16) >> 16, orc.hp); + check("cheers (macro unroll)", r.cheers, orc.cheers); + check("sub calls (CALL/RET)", r.subCalls, orc.subCalls); + check("re-talk textbox", r.retalkText, 1); + const retalk = out.debug.texts.findIndex((t) => t.includes("already won")); + check("re-talk page", r.retalkPage, retalk); + } + + console.log("trigger (once), reveal actor, talk, scripted warp, walk-on warp"); + { + const r = await run( + target, + rom, + new Scenario() + .advance(30) + // (5,1) -> (5,4): hold DOWN through 3 tiles + .press(["DOWN"], 24, 4) + .read("y4", A("PLAYER_Y"), 2) + // left onto the trigger at (4,4) + .press(["LEFT"], 8, 4) + .advance(10) + .read("trigFlag", dbgFlagAddr(target, flags.trigger_hit).addr, 1) + // walk to the revealed intern at (8,3): right along row 4 until the + // east wall stops us (overshoot-safe), then face up into the intern. + .press(["RIGHT"], 28, 4) + .read("x8", A("PLAYER_X"), 2) + .press(["UP"], 8, 4) + .read("faceY", A("PLAYER_Y"), 2) + .read("dirUp", A("PLAYER_DIR"), 1) + .press(["A"], 2, 6) // talk to intern + .advance(REVEAL) + .read("internSay", A("TEXT_ACTIVE"), 1) + .press(["A"], 2, 6) // dismiss -> script warps to street + .advance(10) + .read("mapStreet", A("CUR_MAP"), 1) + .read("sx", A("PLAYER_X"), 2) + .read("sy", A("PLAYER_Y"), 2) + .shot(shot("05_street")) + // walk-on warp back: exactly one step down (the office south entrance + // sits directly above the office->street warp, so a long hold would + // ping-pong through both doors) + .press(["DOWN"], 4, 8) + .advance(10) + .read("mapBack", A("CUR_MAP"), 1) + .read("bx", A("PLAYER_X"), 2) + .read("by", A("PLAYER_Y"), 2) + // trigger tile is where we land (4,4) but once-flag is set: no re-run + .read("script0", A("SCRIPT_ACTIVE"), 1), + ); + check("walked down to y=4", r.y4, 4); + const tf = dbgFlagAddr(target, flags.trigger_hit); + check("trigger fired", (r.trigFlag >> tf.bit) & 1, 1); + check("wall-stopped at x=8", r.x8, 8); + check("blocked by revealed intern (y stays 4)", r.faceY, 4); + check("faces up", r.dirUp, 1); + check("intern talk textbox", r.internSay, 1); + check("scripted warp -> street", r.mapStreet, 1); + check("street door x", r.sx, 5); + check("street door y", r.sy, 2); + check("walk-on warp back -> office", r.mapBack, 0); + check("south entrance x", r.bx, 4); + check("south entrance y", r.by, 4); + check("once-trigger did not rerun", r.script0, 0); + } +} + +const requested = process.argv.slice(2) as TargetName[]; +const targets: TargetName[] = requested.length ? requested : (["gba", "gb", "nes"] as TargetName[]); +for (const t of targets) await testTarget(t); +console.log(`\n${failed === 0 ? "\x1b[32m" : "\x1b[31m"}${passed} passed, ${failed} failed\x1b[0m`); +process.exit(failed === 0 ? 0 : 1); diff --git a/static/test/harness/build.ts b/static/test/harness/build.ts new file mode 100644 index 0000000..58fa3b0 --- /dev/null +++ b/static/test/harness/build.ts @@ -0,0 +1,13 @@ +#!/usr/bin/env bun +// static/test/harness/build.ts — build mgba_runner against Homebrew libmgba. +// bun static/test/harness/build.ts + +import { $ } from "bun"; +import { join } from "node:path"; + +const prefix = (await $`brew --prefix mgba`.text()).trim(); +const here = import.meta.dir; +const out = join(here, "mgba_runner"); + +await $`clang -O2 -Wall -I${prefix}/include ${join(here, "mgba_runner.c")} -L${prefix}/lib -lmgba -Wl,-rpath,${prefix}/lib -o ${out}`; +console.log(`built ${out}`); diff --git a/static/test/harness/mgba_runner.c b/static/test/harness/mgba_runner.c new file mode 100644 index 0000000..6e62d70 --- /dev/null +++ b/static/test/harness/mgba_runner.c @@ -0,0 +1,128 @@ +/* static/test/harness/mgba_runner.c — headless GBA/GB scenario driver on + * libmgba (Homebrew). One binary serves both consoles: mCoreFind picks the + * core from the ROM. + * + * mgba_runner + * + * Scenario: one command per line (machine-generated by test/e2e.ts): + * A advance + * P press keys, run hold frames, release, + * run release frames + * R read 1/2/4 bytes little-endian + * S screenshot (PPM P6) + * Output: one JSON object on stdout: {"ok":true,"reads":{...}}. + * The key mask uses the PS_KEY_* bit order, which matches mGBA's GBA_KEY + * order for the low 8 bits on both cores. + */ +#include +#include +#include +#include + +#include +#include + +static struct mCore *core; +static uint32_t *videoBuffer; +static unsigned vw, vh; + +static void run_frames(int n) { + int i; + for (i = 0; i < n; i++) core->runFrame(core); +} + +static void screenshot(const char *path) { + FILE *f = fopen(path, "wb"); + unsigned x, y; + if (!f) return; + fprintf(f, "P6\n%u %u\n255\n", vw, vh); + for (y = 0; y < vh; y++) { + for (x = 0; x < vw; x++) { + uint32_t p = videoBuffer[y * vw + x]; + unsigned char rgb[3]; + rgb[0] = p & 0xff; + rgb[1] = (p >> 8) & 0xff; + rgb[2] = (p >> 16) & 0xff; + fwrite(rgb, 1, 3, f); + } + } + fclose(f); +} + +int main(int argc, char **argv) { + FILE *sc; + char line[1024]; + int first_read = 1; + + if (argc != 3) { + fprintf(stderr, "usage: mgba_runner \n"); + return 2; + } + + core = mCoreFind(argv[1]); + if (!core) { + printf("{\"ok\":false,\"error\":\"no core for rom\"}\n"); + return 1; + } + core->init(core); + mCoreConfigInit(&core->config, "mgba_runner"); + mCoreConfigSetDefaultValue(&core->config, "idleOptimization", "ignore"); + core->loadConfig(core, &core->config); + + core->desiredVideoDimensions(core, &vw, &vh); + videoBuffer = malloc((size_t)vw * vh * 4); + core->setVideoBuffer(core, (color_t *)videoBuffer, vw); + core->setAudioBufferSize(core, 0x4000); + + if (!mCoreLoadFile(core, argv[1])) { + printf("{\"ok\":false,\"error\":\"rom load failed\"}\n"); + return 1; + } + core->reset(core); + + sc = fopen(argv[2], "r"); + if (!sc) { + printf("{\"ok\":false,\"error\":\"scenario open failed\"}\n"); + return 1; + } + + printf("{\"ok\":true,\"reads\":{"); + while (fgets(line, sizeof line, sc)) { + char op = line[0]; + if (op == 'A') { + int n = 0; + sscanf(line + 1, "%d", &n); + run_frames(n); + } else if (op == 'P') { + unsigned mask = 0; + int hold = 0, release = 0; + sscanf(line + 1, "%x %d %d", &mask, &hold, &release); + core->setKeys(core, mask); + run_frames(hold); + core->setKeys(core, 0); + run_frames(release); + } else if (op == 'R') { + char name[256]; + unsigned addr = 0; + int size = 1; + uint32_t v = 0; + sscanf(line + 1, "%255s %x %d", name, &addr, &size); + v = core->busRead8(core, addr); + if (size >= 2) v |= (uint32_t)core->busRead8(core, addr + 1) << 8; + if (size == 4) { + v |= (uint32_t)core->busRead8(core, addr + 2) << 16; + v |= (uint32_t)core->busRead8(core, addr + 3) << 24; + } + printf("%s\"%s\":%u", first_read ? "" : ",", name, v); + first_read = 0; + } else if (op == 'S') { + char path[512]; + sscanf(line + 1, "%511s", path); + screenshot(path); + } + } + printf("}}\n"); + fclose(sc); + core->deinit(core); + return 0; +} diff --git a/static/test/pipeline.test.ts b/static/test/pipeline.test.ts new file mode 100644 index 0000000..ac36851 --- /dev/null +++ b/static/test/pipeline.test.ts @@ -0,0 +1,97 @@ +// static/test/pipeline.test.ts — the whole host-side pipeline on the smoke +// game: evaluate -> compile -> model -> link, then PLAY THE STORY on the +// reference VM straight out of the linked script blob (fixups included). +// This is the game running with the consoles removed. + +import { describe, expect, test } from "bun:test"; +import { compileGame } from "../compiler/index.ts"; +import { BLOB_KIND } from "../spec/isa.ts"; +import { MAP_HEADER_SIZE, SCRIPT_NONE } from "../spec/rpg.ts"; +import { RefVM } from "../vm/ref.ts"; +import { AutoRpgHost } from "../vm/rpg-host.ts"; + +const ENTRY = new URL("./smoke/game.ts", import.meta.url).pathname; + +describe("compile pipeline (smoke game)", () => { + test("compiles for all three targets with coherent link output", async () => { + for (const target of ["gba", "gb", "nes"] as const) { + const out = await compileGame(ENTRY, target); + const { linked, debug } = out; + + expect(linked.model.title).toBe("POCKET SMOKE"); + expect(linked.blobs[linked.scriptBlobIndex].kind).toBe(BLOB_KIND.SCRIPTS); + expect(linked.scriptTable.length).toBe(5); + expect(Object.keys(debug.maps)).toEqual(["office", "street"]); + expect(debug.actors.guide).toEqual({ map: 0, slot: 0 }); + expect(debug.actors.intern).toEqual({ map: 0, slot: 1 }); + + // map blob sanity: header fields match the model + const officeBlob = linked.blobs[linked.mapBlobIndex[0]].bytes; + expect(officeBlob[0]).toBe(10); // width + expect(officeBlob[1]).toBe(6); // height + expect(officeBlob[2]).toBe(2); // actors + expect(officeBlob[3]).toBe(1); // warps + expect(officeBlob[4]).toBe(1); // triggers + expect(officeBlob[6] | (officeBlob[7] << 8)).not.toBe(SCRIPT_NONE); // onEnter + expect(officeBlob.length).toBeGreaterThan(MAP_HEADER_SIZE + 60 + 8); + + // every text stream is addressable + expect(linked.textTable.length).toBe(debug.texts.length); + for (const t of linked.textTable) { + const blob = linked.blobs[t.blob]; + expect(blob.kind).toBe(BLOB_KIND.TEXT); + expect(t.off).toBeLessThan(blob.bytes.length); + } + } + }); + + test("warp fixups point at real entrances after patching", async () => { + const { linked, debug } = await compileGame(ENTRY, "gba"); + const code = linked.blobs[linked.scriptBlobIndex].bytes; + // InternTalk ends with WARP street:door -> map 1, x 5, y 2, dir 0 + expect(linked.ctx.warpFixups).toHaveLength(1); + const at = linked.ctx.warpFixups[0].at; + expect(code[at]).toBe(debug.maps.street); + expect(code[at + 1]).toBe(5); + expect(code[at + 2]).toBe(2); + }); + + test("the story plays to completion on the reference VM", async () => { + const { linked, debug } = await compileGame(ENTRY, "gba"); + const code = linked.blobs[linked.scriptBlobIndex].bytes; + + // Playthrough: talk to the guide, pick Spar, always Strike. + const host = new AutoRpgHost(Array(24).fill(0)); + const vm = new RefVM(code, linked.scriptTable, host); + host.play(vm, debug.scripts.GuideTalk); + + expect(vm.status).toBe("done"); + expect(vm.getFlag(debug.flags.beat_guide)).toBe(1); + expect(vm.getVar(debug.vars.sub_calls)).toBe(1); // s.call(Fanfare) + expect(vm.getVar(debug.vars.cheers)).toBe(3); // macro unroll + expect(vm.getVar(debug.vars.foe)).toBeLessThanOrEqual(0); + expect(vm.getVar(debug.vars.hp)).toBeGreaterThan(0); + // The win line interpolates remaining HP via a FMT slot. + const winPage = host.events + .filter((e) => e.kind === "say") + .map((e) => debug.texts[(e as { textId: number }).textId]) + .find((t) => t.includes("You win")); + expect(winPage).toContain("{v60}"); + + // Re-talk takes the flag branch and stays short. + const host2 = new AutoRpgHost([]); + const vm2 = new RefVM(code, linked.scriptTable, host2); + vm2.flags[debug.flags.beat_guide] = 1; + host2.play(vm2, debug.scripts.GuideTalk); + expect(host2.events.filter((e) => e.kind === "say")).toHaveLength(1); + }); + + test("gb pagination differs from gba (narrower box)", async () => { + const gba = await compileGame(ENTRY, "gba"); + const gb = await compileGame(ENTRY, "gb"); + const gbaLines = gba.debug.texts.flatMap((t) => t.split("\n")); + const gbLines = gb.debug.texts.flatMap((t) => t.split("\n")); + expect(Math.max(...gbaLines.map((l) => l.length))).toBeLessThanOrEqual(28); + expect(Math.max(...gbLines.map((l) => l.length))).toBeLessThanOrEqual(18); + }); +}); diff --git a/static/test/ppm2png.ts b/static/test/ppm2png.ts new file mode 100644 index 0000000..4234eb0 --- /dev/null +++ b/static/test/ppm2png.ts @@ -0,0 +1,67 @@ +#!/usr/bin/env bun +// static/test/ppm2png.ts — convert harness PPM screenshots to PNG. +// bun static/test/ppm2png.ts (writes siblings with .png) + +import { deflateSync } from "node:zlib"; + +function crc32(buf: Uint8Array): number { + let c = ~0; + for (let i = 0; i < buf.length; i++) { + c ^= buf[i]; + for (let k = 0; k < 8; k++) c = (c >>> 1) ^ (0xedb88320 & -(c & 1)); + } + return ~c >>> 0; +} + +function chunk(type: string, data: Uint8Array): Uint8Array { + const out = new Uint8Array(12 + data.length); + const dv = new DataView(out.buffer); + dv.setUint32(0, data.length); + for (let i = 0; i < 4; i++) out[4 + i] = type.charCodeAt(i); + out.set(data, 8); + dv.setUint32(8 + data.length, crc32(out.subarray(4, 8 + data.length))); + return out; +} + +export function ppmToPng(ppm: Uint8Array): Uint8Array { + const header = new TextDecoder().decode(ppm.subarray(0, 64)); + const m = header.match(/^P6\s+(\d+)\s+(\d+)\s+(\d+)\s/); + if (!m) throw new Error("not a P6 PPM"); + const [, ws, hs] = m; + const w = Number(ws); + const h = Number(hs); + const dataStart = m[0].length; + const pixels = ppm.subarray(dataStart, dataStart + w * h * 3); + + const raw = new Uint8Array(h * (1 + w * 3)); + for (let y = 0; y < h; y++) { + raw[y * (1 + w * 3)] = 0; + raw.set(pixels.subarray(y * w * 3, (y + 1) * w * 3), y * (1 + w * 3) + 1); + } + const ihdr = new Uint8Array(13); + const dv = new DataView(ihdr.buffer); + dv.setUint32(0, w); + dv.setUint32(4, h); + ihdr[8] = 8; // bit depth + ihdr[9] = 2; // truecolor + const sig = Uint8Array.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]); + const parts = [sig, chunk("IHDR", ihdr), chunk("IDAT", deflateSync(raw)), chunk("IEND", new Uint8Array(0))]; + const total = parts.reduce((n, p) => n + p.length, 0); + const out = new Uint8Array(total); + let at = 0; + for (const p of parts) { + out.set(p, at); + at += p.length; + } + return out; +} + +if (import.meta.main) { + for (const arg of process.argv.slice(2)) { + const ppm = new Uint8Array(await Bun.file(arg).arrayBuffer()); + const png = ppmToPng(ppm); + const out = arg.replace(/\.ppm$/, ".png"); + await Bun.write(out, png); + console.log(`${out} (${png.length} bytes)`); + } +} diff --git a/static/test/script-compiler.test.ts b/static/test/script-compiler.test.ts new file mode 100644 index 0000000..f3f676d --- /dev/null +++ b/static/test/script-compiler.test.ts @@ -0,0 +1,369 @@ +// static/test/script-compiler.test.ts — the script compiler, proven against +// the reference VM. Every test: TypeScript source -> bytecode -> ref VM run +// with the auto-playing RPG host -> assert on VM state + event transcript. +// No emulator, no consoles — this is the layer that makes the console +// runtimes boring. + +import { describe, expect, test } from "bun:test"; +import { compileScriptSource } from "../compiler/compile-scripts.ts"; +import { RefVM } from "../vm/ref.ts"; +import { AutoRpgHost, type RpgEvent } from "../vm/rpg-host.ts"; + +function run(source: string, picks: number[] = [], scriptId = 0) { + const r = compileScriptSource(source); + const host = new AutoRpgHost(picks); + const vm = new RefVM(r.blob, r.table, host); + host.play(vm, scriptId); + return { vm, host, ctx: r.ctx }; +} + +/** Text of the page shown by the i-th say event. */ +const sayPages = (host: AutoRpgHost, ctx: { textDebug: string[] }): string[] => + host.events.filter((e): e is Extract => e.kind === "say").map((e) => ctx.textDebug[e.textId]); + +describe("expressions and locals", () => { + test("arithmetic with locals, vars, precedence", () => { + const { vm, ctx } = run(` + const S = script(function* (s, v, f) { + let a = 2 + 3 * 4; // 14 + let b = (a - 4) / 5; // 2 + v.result = a * 10 + b % 2; // 140 + v.neg = -b; + }); + `); + expect(vm.getVar(ctx.varNames.result)).toBe(140); + expect(vm.getVar(ctx.varNames.neg)).toBe(-2); + }); + + test("&& || ! short-circuit with JS value semantics", () => { + const { vm, ctx } = run(` + const S = script(function* (s, v, f) { + v.a = 0 || 7; + v.b = 3 && 5; + v.c = 0 && 9; + v.d = !0; + v.e = !!42; + f.armed = true; + v.g = f.armed && 11; + }); + `); + expect(vm.getVar(ctx.varNames.a)).toBe(7); + expect(vm.getVar(ctx.varNames.b)).toBe(5); + expect(vm.getVar(ctx.varNames.c)).toBe(0); + expect(vm.getVar(ctx.varNames.d)).toBe(1); + expect(vm.getVar(ctx.varNames.e)).toBe(1); + expect(vm.getVar(ctx.varNames.g)).toBe(11); + }); + + test("ternary", () => { + const { vm, ctx } = run(` + const S = script(function* (s, v, f) { + let hp = 3; + v.msg = hp > 5 ? 100 : 200; + }); + `); + expect(vm.getVar(ctx.varNames.msg)).toBe(200); + }); + + test("compound assignment and ++/--", () => { + const { vm, ctx } = run(` + const S = script(function* (s, v, f) { + v.n = 10; + v.n += 5; + v.n -= 2; + v.n *= 3; + v.n /= 2; // trunc + let i = 0; + i++; + i++; + i--; + v.i = i; + }); + `); + expect(vm.getVar(ctx.varNames.n)).toBe(19); // ((10+5-2)*3)/2 = 19.5 -> 19 + expect(vm.getVar(ctx.varNames.i)).toBe(1); + }); +}); + +describe("control flow", () => { + test("if/else chains on runtime values", () => { + const src = (n: number) => ` + const S = script(function* (s, v, f) { + v.n = ${n}; + if (v.n > 10) { v.r = 1; } + else if (v.n > 5) { v.r = 2; } + else { v.r = 3; } + }); + `; + expect(run(src(20)).vm.getVar(1)).toBe(1); + expect(run(src(7)).vm.getVar(1)).toBe(2); + expect(run(src(1)).vm.getVar(1)).toBe(3); + }); + + test("while with break/continue", () => { + const { vm, ctx } = run(` + const S = script(function* (s, v, f) { + let i = 0; + while (true) { + i += 1; + if (i === 3) { continue; } + if (i >= 6) { break; } + v.sum += i; + } + v.i = i; + }); + `); + expect(vm.getVar(ctx.varNames.sum)).toBe(1 + 2 + 4 + 5); + expect(vm.getVar(ctx.varNames.i)).toBe(6); + }); + + test("classic for loop", () => { + const { vm, ctx } = run(` + const S = script(function* (s, v, f) { + for (let i = 1; i <= 5; i++) { v.sum += i; } + }); + `); + expect(vm.getVar(ctx.varNames.sum)).toBe(15); + }); + + test("switch over numbers with default + fallthrough", () => { + const src = (n: number) => ` + const S = script(function* (s, v, f) { + v.n = ${n}; + switch (v.n) { + case 1: + case 2: v.r = 12; break; + case 3: v.r = 3; break; + default: v.r = 99; + } + }); + `; + expect(run(src(1)).vm.getVar(1)).toBe(12); + expect(run(src(2)).vm.getVar(1)).toBe(12); + expect(run(src(3)).vm.getVar(1)).toBe(3); + expect(run(src(7)).vm.getVar(1)).toBe(99); + }); +}); + +describe("rpg ops", () => { + test("say wraps to pages per target", () => { + const long = "The board no longer has confidence in his ability to continue leading the company forward."; + const { host, ctx } = run(` + const S = script(function* (s, v, f) { + yield* s.say(${JSON.stringify(long)}); + }); + `); + const pages = sayPages(host, ctx); + expect(pages.length).toBeGreaterThan(0); + for (const p of pages) { + for (const line of p.split("\n")) expect(line.length).toBeLessThanOrEqual(28); + expect(p.split("\n").length).toBeLessThanOrEqual(3); + } + expect(pages.join(" ").replace(/\n/g, " ")).toBe(long); + }); + + test("choice drives branches; string comparison sugar", () => { + const src = ` + const S = script(function* (s, v, f) { + const pick = yield* s.choose(["Push back", "Stay calm"]); + if (pick === "Push back") { v.r = 1; } else { v.r = 2; } + }); + `; + expect(run(src, [0]).vm.getVar(0)).toBe(1); + expect(run(src, [1]).vm.getVar(0)).toBe(2); + }); + + test("switch over choice with string labels", () => { + const src = ` + const S = script(function* (s, v, f) { + switch (yield* s.choose(["Fight", "Talk", "Leave"])) { + case "Fight": v.r = 1; break; + case "Talk": v.r = 2; break; + case "Leave": v.r = 3; break; + } + }); + `; + expect(run(src, [0]).vm.getVar(0)).toBe(1); + expect(run(src, [1]).vm.getVar(0)).toBe(2); + expect(run(src, [2]).vm.getVar(0)).toBe(3); + }); + + test("template interpolation: static folds, runtime becomes FMT slot", () => { + const { host, ctx } = run(` + const S = script(function* (s, v, f) { + const WHO = "SAM"; + let resolve = 40 + 2; + yield* s.say(\`\${WHO}: resolve at \${resolve} percent\`); + }); + `); + const pages = sayPages(host, ctx); + expect(pages[0]).toContain("SAM: resolve at {v60}"); + // scratch var 60 holds the runtime value at say-time + expect(run(` + const S = script(function* (s, v, f) { + let x = 42; + yield* s.say(\`n=\${x}\`); + }); + `).vm.getVar(60)).toBe(42); + }); + + test("flags, sfx, lock/release, wait, warp fixup recorded", () => { + const { host, ctx } = run(` + const S = script(function* (s, v, f) { + yield* s.lock(); + f.fired = true; + if (f.fired) { yield* s.sfx("fanfare"); } + yield* s.wait(30); + yield* s.warp("hq:door"); + yield* s.release(); + }); + `); + const kinds = host.events.map((e) => e.kind); + expect(kinds).toEqual(["lock", "sfx", "wait", "warp", "release"]); + expect(ctx.warpFixups).toHaveLength(1); + expect(ctx.warpFixups[0].dest).toBe("hq:door"); + }); + + test("rnd in expressions is deterministic", () => { + const a = run(` + const S = script(function* (s, v, f) { + v.d = 1 + (yield* s.rnd(6)) + (yield* s.rnd(6)); + }); + `).vm.getVar(0); + const b = run(` + const S = script(function* (s, v, f) { + v.d = 1 + (yield* s.rnd(6)) + (yield* s.rnd(6)); + }); + `).vm.getVar(0); + expect(a).toBe(b); + expect(a).toBeGreaterThanOrEqual(1); + expect(a).toBeLessThanOrEqual(11); + }); +}); + +describe("subroutines and macros", () => { + test("s.call() runs another script and returns", () => { + const { vm, ctx } = run( + ` + const Greet = script(function* (s, v, f) { + v.calls += 1; + }); + const Main = script(function* (s, v, f) { + yield* s.call(Greet); + yield* s.call(Greet); + v.done = 1; + }); + `, + [], + 1, + ); + expect(vm.getVar(ctx.varNames.calls)).toBe(2); + expect(vm.getVar(ctx.varNames.done)).toBe(1); + }); + + test("macro inlining with static config, for...of unroll, static if fold", () => { + const { vm, host, ctx } = run(` + function* fanfare(s, v, cfg) { + for (const step of cfg.steps) { + if (step.loud) { yield* s.sfx("fanfare"); } + v.total += step.n; + } + } + const S = script(function* (s, v, f) { + yield* fanfare(s, v, { steps: [ { n: 1, loud: true }, { n: 2, loud: false }, { n: 3, loud: true } ] }); + }); + `); + expect(vm.getVar(ctx.varNames.total)).toBe(6); + expect(host.events.filter((e) => e.kind === "sfx")).toHaveLength(2); + }); + + test("value macro: return value via result slot, early return", () => { + const src = (pick: number) => ` + function* damage(s, base) { + const crit = yield* s.rnd(2); + if (crit === 1) { return base * 2; } + return base; + } + const S = script(function* (s, v, f) { + const pick = yield* s.choose(["hit", "skip"]); + if (pick === 0) { v.dmg = yield* damage(s, 10); } + else { v.dmg = -1; } + }); + `; + const { vm } = run(src(0), [0]); + expect([10, 20]).toContain(vm.getVar(0)); + expect(run(src(1), [1]).vm.getVar(0)).toBe(-1); + }); + + test("a battle loop written as plain DSL survives compilation", () => { + // The shape the boardroom finale uses: menus, RNG damage, HP vars. + const { vm, host, ctx } = run( + ` + const Battle = script(function* (s, v, f) { + v.board = 12; + v.sam = 10; + while (v.board > 0 && v.sam > 0) { + const move = yield* s.choose(["Tender offer", "Heart emoji"]); + if (move === "Tender offer") { v.board -= 2 + (yield* s.rnd(3)); } + else { v.board -= 1; v.sam += 1; } + if (v.board > 0) { v.sam -= 1 + (yield* s.rnd(2)); } + } + if (v.sam > 0) { f.won = true; yield* s.say("The board folds."); } + else { yield* s.say("Resolve exhausted."); } + }); + `, + Array(40).fill(0), + ); + expect(vm.status).toBe("done"); + const flags = ctx.flagNames; + // Deterministic RNG: this exact playthrough always lands the same way. + expect(vm.getFlag(flags.won)).toBe(1); + expect(host.events.some((e) => e.kind === "say")).toBe(true); + }); + + test("recursive macros are rejected", () => { + expect(() => + run(` + function* loop(s) { yield* loop(s); } + const S = script(function* (s, v, f) { yield* loop(s); }); + `), + ).toThrow(/recursive macro/); + }); +}); + +describe("diagnostics", () => { + test("unknown identifier errors with location", () => { + expect(() => + run(` + const S = script(function* (s, v, f) { + v.x = mystery; + }); + `), + ).toThrow(/unknown identifier "mystery"/); + }); + + test("string case label without choice metadata errors", () => { + expect(() => + run(` + const S = script(function* (s, v, f) { + switch (v.x) { case "nope": break; } + }); + `), + ).toThrow(/string case labels/); + }); + + test("non-ASCII text is rejected in v1", () => { + expect(() => + run(` + const S = script(function* (s, v, f) { + yield* s.say("你好"); + }); + `), + ).toThrow(/ASCII/); + }); + + test("too many locals errors", () => { + const decls = Array.from({ length: 20 }, (_, i) => `let x${i} = v.n + ${i};`).join("\n"); + expect(() => run(`const S = script(function* (s, v, f) { ${decls} });`)).toThrow(/too many locals/); + }); +}); diff --git a/static/test/smoke/game.ts b/static/test/smoke/game.ts new file mode 100644 index 0000000..eb786d5 --- /dev/null +++ b/static/test/smoke/game.ts @@ -0,0 +1,200 @@ +// static/test/smoke/game.ts — the cross-target contract game. +// +// Small on purpose, but it exercises every RPG mechanism the runtimes must +// agree on: spawn, walking, collision (tiles + solid actor), talk scripts, +// choices, flags, vars, a battle-style while loop over RNG, template FMT +// text, warps (walk-on + scripted), triggers (incl. once), actor show/hide, +// subroutine calls, wander movement, lock/release and SFX. The three console +// E2E suites and the reference-VM story test all drive THIS module. +// +// Art is deliberately procedural (declaration zone = plain TypeScript). + +import { + defineGame, + defineMap, + defineSprite, + defineTileset, + npc, + script, + trigger, + warp, + type Ops, + type Vars, +} from "@pocketjs/static/rpg"; + +// --- procedural art --------------------------------------------------------- +const row = (c: string) => c.repeat(8); +const rows8 = (c: string) => Array.from({ length: 8 }, () => row(c)); +const framed = (edge: string, fill: string) => [ + row(edge), + ...Array.from({ length: 6 }, () => edge + fill.repeat(6) + edge), + row(edge), +]; + +const office = defineTileset("office", { + palette: [ + [24, 26, 30], // 0 backdrop + [92, 148, 252], // 1 floor blue + [56, 56, 72], // 2 wall dark + [200, 76, 12], // 3 desk orange + [252, 224, 168], // 4 door light + [0, 168, 68], // 5 plant green + ], + tiles: { + floor: { px: rows8("1") }, + wall: { px: framed("2", "2"), solid: true }, + desk: { px: framed("2", "3"), solid: true }, + door: { px: rows8("4") }, + plant: { px: framed("5", "1"), solid: true }, + }, +}); + +const frame16 = (c: string) => Array.from({ length: 16 }, () => c.repeat(16)); +const twoTone = (top: string, bottom: string) => [ + ...Array.from({ length: 8 }, () => top.repeat(16)), + ...Array.from({ length: 8 }, () => bottom.repeat(16)), +]; + +const hero = defineSprite("hero", { + palette: [ + [0, 0, 0], // 0 transparent + [248, 248, 248], // 1 white + [216, 40, 40], // 2 red + [40, 40, 216], // 3 blue + ], + facings: { + down: [twoTone("2", "1"), twoTone("1", "2")], + up: [twoTone("3", "1"), twoTone("1", "3")], + right: [twoTone("2", "3"), twoTone("3", "2")], + }, +}); + +const guide = defineSprite("guide", { + palette: [ + [0, 0, 0], + [252, 216, 96], // yellow + [96, 96, 96], + ], + facings: { + down: [frame16("1")], + up: [frame16("2")], + right: [twoTone("1", "2")], + }, +}); + +// --- scripts ----------------------------------------------------------------- +function* cheer(s: Ops, v: Vars, effects: readonly ("confirm" | "fanfare")[]) { + for (const fx of effects) { + yield* s.sfx(fx); + v.cheers += 1; + } +} + +const Fanfare = script(function* (s, v, f) { + v.sub_calls += 1; +}); + +const GuideTalk = script(function* (s, v, f) { + yield* s.lock(); + yield* s.face(); + if (f.beat_guide) { + yield* s.say("GUIDE: You already won. Take the door north."); + yield* s.release(); + return; + } + yield* s.say("GUIDE: New build! Want to spar?"); + const pick = yield* s.choose(["Spar", "Later"]); + if (pick === "Spar") { + v.hp = 8; + v.foe = 6; + while (v.foe > 0 && v.hp > 0) { + const move = yield* s.choose(["Strike", "Guard"]); + if (move === "Strike") { + v.foe -= 2 + (yield* s.rnd(2)); + } else { + v.hp += 1; + } + if (v.foe > 0) { + v.hp -= 1; + } + } + if (v.hp > 0) { + f.beat_guide = true; + yield* s.call(Fanfare); + yield* cheer(s, v, ["confirm", "fanfare", "fanfare"]); + yield* s.say(`GUIDE: You win with ${v.hp} HP left.`); + } else { + yield* s.say("GUIDE: Rest and try again."); + } + } else { + yield* s.say("GUIDE: The road is tougher than it looks."); + } + yield* s.release(); +}); + +const RevealSign = script(function* (s, v, f) { + f.trigger_hit = true; + yield* s.show("intern"); + yield* s.sfx("confirm"); +}); + +const OfficeEnter = script(function* (s, v, f) { + v.office_enters += 1; + if (f.beat_guide) { + yield* s.hide("guide"); + } +}); + +const InternTalk = script(function* (s, v, f) { + yield* s.say("INTERN: I was hiding here all along."); + yield* s.warp("street:door"); +}); + +// --- maps ---------------------------------------------------------------------- +const officeMap = defineMap("office", { + tileset: office, + layout: ` + ########## + #....d...# + #..~..p..# + #........# + #...T....# + ####.##### + `, + legend: { "#": "wall", ".": "floor", d: "door", "~": "desk", p: "plant", T: "floor" }, + entrances: { + door: { at: [5, 1], dir: "down" }, + south: { at: [4, 4], dir: "up" }, + }, + actors: [ + npc("guide", { sprite: guide, at: [3, 1], facing: "down", talk: GuideTalk }), + npc("intern", { sprite: guide, at: [8, 3], facing: "down", hidden: true, talk: InternTalk }), + ], + warps: [warp({ at: [4, 5], to: "street:door" })], + triggers: [trigger({ at: [4, 4], run: RevealSign, once: true })], + onEnter: OfficeEnter, +}); + +const streetMap = defineMap("street", { + tileset: office, + layout: ` + p........p + .......... + .....d.... + .......... + p........p + `, + legend: { p: "plant", ".": "floor", d: "door" }, + entrances: { + door: { at: [5, 2], dir: "down" }, + }, + actors: [npc("walker", { sprite: guide, at: [1, 1], move: "wander", solid: false })], + warps: [warp({ at: [5, 3], to: "office:south" })], +}); + +defineGame({ + title: "POCKET SMOKE", + start: "office:door", + player: hero, + maps: [officeMap, streetMap], +}); diff --git a/static/test/vm.test.ts b/static/test/vm.test.ts new file mode 100644 index 0000000..eef4912 --- /dev/null +++ b/static/test/vm.test.ts @@ -0,0 +1,247 @@ +// static/test/vm.test.ts — reference VM semantics, pinned. +// +// These programs pin the ISA behavior that vm/core.c must reproduce +// bit-for-bit on all three consoles. If you change an expectation here you +// are changing the console contract — regenerate spec_gen.h and touch every +// runtime. + +import { describe, expect, test } from "bun:test"; +import { RNG_SEED, WAITING, rngNext } from "../spec/isa.ts"; +import { assemble } from "../vm/asm.ts"; +import { RefVM } from "../vm/ref.ts"; +import { AutoRpgHost } from "../vm/rpg-host.ts"; + +function runProgram(program: Parameters[0], picks: number[] = []) { + const code = assemble(program); + const host = new AutoRpgHost(picks); + const vm = new RefVM(code, [0], host); + host.play(vm, 0); + return { vm, host }; +} + +describe("core ops", () => { + test("arithmetic folds and wraps at i16", () => { + const { vm } = runProgram([ + ["PUSH16", 30000], + ["PUSH16", 10000], + ["ADD"], // 40000 -> -25536 + ["STV", 0], + ["PUSH8", -7], + ["PUSH8", 3], + ["DIV"], // trunc toward zero -> -2 + ["STV", 1], + ["PUSH8", -7], + ["PUSH8", 3], + ["MOD"], // sign of dividend -> -1 + ["STV", 2], + ["PUSH8", 5], + ["PUSH8", 0], + ["DIV"], // div by zero -> 0 + ["STV", 3], + ["END"], + ]); + expect(vm.getVar(0)).toBe(-25536); + expect(vm.getVar(1)).toBe(-2); + expect(vm.getVar(2)).toBe(-1); + expect(vm.getVar(3)).toBe(0); + }); + + test("comparisons are signed", () => { + const { vm } = runProgram([ + ["PUSH16", -1], + ["PUSH16", 1], + ["LT"], + ["STV", 0], // -1 < 1 -> 1 + ["PUSH16", -32768], + ["PUSH16", 32767], + ["GT"], + ["STV", 1], // 0 + ["END"], + ]); + expect(vm.getVar(0)).toBe(1); + expect(vm.getVar(1)).toBe(0); + }); + + test("jumps, labels, loop", () => { + // var0 = sum 1..5 via a while loop + const { vm } = runProgram([ + ["PUSH8", 1], + ["STL", 0], // i = 1 + "loop", + ["LDL", 0], + ["PUSH8", 5], + ["GT"], + ["JNZ", "done"], + ["LDV", 0], + ["LDL", 0], + ["ADD"], + ["STV", 0], + ["LDL", 0], + ["PUSH8", 1], + ["ADD"], + ["STL", 0], + ["JMP", "loop"], + "done", + ["END"], + ]); + expect(vm.getVar(0)).toBe(15); + }); + + test("flags set/clear/store/read", () => { + const { vm } = runProgram([ + ["SETF", 3], + ["FLAG", 3], + ["STV", 0], + ["CLRF", 3], + ["FLAG", 3], + ["STV", 1], + ["PUSH8", 42], + ["STF", 200], + ["FLAG", 200], + ["STV", 2], + ["END"], + ]); + expect(vm.getVar(0)).toBe(1); + expect(vm.getVar(1)).toBe(0); + expect(vm.getVar(2)).toBe(1); + }); + + test("RND sequence is the pinned xorshift16 stream", () => { + let s = RNG_SEED; + const expected: number[] = []; + for (let i = 0; i < 4; i++) { + s = rngNext(s); + expected.push(s % 6); + } + const { vm } = runProgram([ + ["PUSH8", 6], ["RND"], ["STV", 0], + ["PUSH8", 6], ["RND"], ["STV", 1], + ["PUSH8", 6], ["RND"], ["STV", 2], + ["PUSH8", 6], ["RND"], ["STV", 3], + ["PUSH8", 0], ["RND"], ["STV", 4], // n<=0 -> 0, no state advance + ["END"], + ]); + expect([vm.getVar(0), vm.getVar(1), vm.getVar(2), vm.getVar(3)]).toEqual(expected); + expect(vm.getVar(4)).toBe(0); + expect(vm.rng).toBe(s); + }); +}); + +describe("calls and locals", () => { + test("CALL/RET with per-frame locals", () => { + // script 1 clobbers ITS local 0; caller's local 0 survives. + const code = assemble([ + // script 0 @0 + ["PUSH8", 7], + ["STL", 0], + ["CALL", 1], + ["LDL", 0], + ["STV", 0], // still 7 + ["END"], + // script 1 + "sub", + ["PUSH8", 99], + ["STL", 0], + ["LDL", 0], + ["STV", 1], // 99 + ["RET"], + ]); + // entry of script 1 = offset of label "sub": compute by assembling prefix + const prefix = assemble([ + ["PUSH8", 7], + ["STL", 0], + ["CALL", 1], + ["LDL", 0], + ["STV", 0], + ["END"], + ]); + const host = new AutoRpgHost(); + const vm = new RefVM(code, [0, prefix.length], host); + host.play(vm, 0); + expect(vm.getVar(0)).toBe(7); + expect(vm.getVar(1)).toBe(99); + }); + + test("call stack overflow throws (depth 4)", () => { + // script 0 calls itself forever + const code = assemble([["CALL", 0], ["END"]]); + const vm = new RefVM(code, [0], new AutoRpgHost()); + expect(() => vm.start(0)).toThrow(/call stack overflow/); + }); +}); + +describe("suspension + rpg syscalls", () => { + test("SAY suspends and resumes; transcript ordered", () => { + const { host } = runProgram([ + ["SAY", 5], + ["SAY", 6], + ["END"], + ]); + expect(host.events).toEqual([ + { kind: "say", textId: 5 }, + { kind: "say", textId: 6 }, + ]); + }); + + test("CHOICE pushes the picked index on resume", () => { + const { vm, host } = runProgram( + [ + ["CHOICE", 10, 11, 12], + ["STV", 0], + ["END"], + ], + [2], + ); + expect(vm.getVar(0)).toBe(2); + expect(host.events[0]).toEqual({ kind: "choice", textIds: [10, 11, 12], picked: 2 }); + }); + + test("WAIT suspends with frame count; WAIT 0 does not", () => { + const { vm, host } = runProgram([ + ["PUSH8", 30], + ["WAIT"], + ["PUSH8", 0], + ["WAIT"], + ["END"], + ]); + expect(host.events).toEqual([{ kind: "wait", frames: 30 }]); + expect(vm.status).toBe("done"); + }); + + test("full syscall surface round-trips operands", () => { + const { host } = runProgram([ + ["LOCK"], + ["FACE", 0xff], + ["AVIS", 3, 0], + ["SFX", 2], + ["WARP", 1, 12, 9, 1], + ["RELEASE"], + ["END"], + ]); + expect(host.events).toEqual([ + { kind: "lock" }, + { kind: "face", slot: 0xff }, + { kind: "avis", slot: 3, visible: false }, + { kind: "sfx", id: 2 }, + { kind: "warp", map: 1, x: 12, y: 9, dir: 1 }, + { kind: "release" }, + ]); + }); +}); + +describe("strictness", () => { + test("stack underflow throws", () => { + const vm = new RefVM(assemble([["POP"], ["END"]]), [0], new AutoRpgHost()); + expect(() => vm.start(0)).toThrow(/underflow/); + }); + + test("illegal opcode throws", () => { + const vm = new RefVM(Uint8Array.from([0x3f]), [0], new AutoRpgHost()); + expect(() => vm.start(0)).toThrow(/illegal opcode/); + }); + + test("runaway loop trips the guard", () => { + const vm = new RefVM(assemble(["top", ["JMP", "top"], ["END"]]), [0], new AutoRpgHost()); + expect(() => vm.start(0)).toThrow(/runaway/); + }); +}); diff --git a/static/vm/asm.ts b/static/vm/asm.ts new file mode 100644 index 0000000..cb1ae81 --- /dev/null +++ b/static/vm/asm.ts @@ -0,0 +1,124 @@ +// static/vm/asm.ts — assembler/disassembler for Pocket Static bytecode. +// +// The assembler exists for VM unit tests (hand-built programs) and the +// disassembler for debugging compiler output (`pocket-static dis`). Neither +// ships in a cartridge. + +import { OP, OP_OPERANDS, SYSCALL_BASE, i16 } from "../spec/isa.ts"; +import { RPG_OP, RPG_OP_OPERANDS } from "../spec/rpg.ts"; + +type Ins = [string, ...(number | string)[]]; + +const NAME_TO_OP: Record = {}; +for (const [name, code] of Object.entries(OP)) NAME_TO_OP[name] = code; +for (const [name, code] of Object.entries(RPG_OP)) NAME_TO_OP[name] = code; +const OP_TO_NAME: Record = {}; +for (const [name, code] of Object.entries(NAME_TO_OP)) OP_TO_NAME[code] = name; + +const OPERANDS: Record = { ...OP_OPERANDS, ...RPG_OP_OPERANDS }; + +/** + * Assemble a program. Instructions are [mnemonic, ...operands]; a bare + * string is a label; jump operands may be label strings (encoded rel16 from + * after the operand). CHOICE takes its option count implicitly: + * ["CHOICE", t0, t1, ...]. + */ +export function assemble(program: (Ins | string)[]): Uint8Array { + const bytes: number[] = []; + const labels = new Map(); + const fixups: { at: number; label: string }[] = []; + + for (const item of program) { + if (typeof item === "string") { + labels.set(item, bytes.length); + continue; + } + const [name, ...args] = item; + const op = NAME_TO_OP[name]; + if (op === undefined) throw new Error(`unknown mnemonic ${name}`); + bytes.push(op); + if (op === RPG_OP.CHOICE) { + bytes.push(args.length); + for (const a of args) { + const v = a as number; + bytes.push(v & 0xff, (v >> 8) & 0xff); + } + continue; + } + const width = OPERANDS[op]; + if (op === OP.JMP || op === OP.JZ || op === OP.JNZ) { + const a = args[0]; + if (typeof a === "string") { + fixups.push({ at: bytes.length, label: a }); + bytes.push(0, 0); + } else { + bytes.push(a & 0xff, (a >> 8) & 0xff); + } + continue; + } + // Fixed-width numeric operands. Widths are per-op from the spec tables; + // multi-operand ops (AVIS, WARP) list one byte per operand. + const perOp: Record = { + [RPG_OP.AVIS]: [1, 1], + [RPG_OP.WARP]: [1, 1, 1, 1], + }; + const widths = perOp[op] ?? (width === 0 ? [] : width === 1 ? [1] : [width]); + if (args.length !== widths.length) { + throw new Error(`${name} wants ${widths.length} operands, got ${args.length}`); + } + widths.forEach((w, idx) => { + const v = args[idx] as number; + if (w === 1) bytes.push(v & 0xff); + else bytes.push(v & 0xff, (v >> 8) & 0xff); + }); + } + + for (const f of fixups) { + const target = labels.get(f.label); + if (target === undefined) throw new Error(`undefined label ${f.label}`); + const rel = target - (f.at + 2); + bytes[f.at] = rel & 0xff; + bytes[f.at + 1] = (rel >> 8) & 0xff; + } + return Uint8Array.from(bytes); +} + +/** Disassemble to text, one instruction per line, with byte offsets. */ +export function disassemble(code: Uint8Array, start = 0, end = code.length): string { + const lines: string[] = []; + let ip = start; + while (ip < end) { + const at = ip; + const op = code[ip++]; + const name = OP_TO_NAME[op] ?? `??0x${op.toString(16)}`; + let width = OPERANDS[op]; + const args: string[] = []; + if (op === RPG_OP.CHOICE) { + const n = code[ip++]; + for (let k = 0; k < n; k++) { + args.push(String(code[ip] | (code[ip + 1] << 8))); + ip += 2; + } + } else if (op === RPG_OP.AVIS) { + args.push(String(code[ip++]), String(code[ip++])); + } else if (op === RPG_OP.WARP) { + args.push(String(code[ip++]), String(code[ip++]), String(code[ip++]), String(code[ip++])); + } else if (width === 1) { + args.push(String(code[ip++])); + } else if (width === 2) { + const raw = code[ip] | (code[ip + 1] << 8); + ip += 2; + if (op === OP.JMP || op === OP.JZ || op === OP.JNZ) { + args.push(`-> ${ip + i16(raw)}`); + } else if (op === OP.PUSH16) { + args.push(String(i16(raw))); + } else { + args.push(String(raw)); + } + } else if (width === undefined) { + args.push(""); + } + lines.push(`${String(at).padStart(5)}: ${name}${args.length ? " " + args.join(", ") : ""}`); + } + return lines.join("\n"); +} diff --git a/static/vm/ref.ts b/static/vm/ref.ts new file mode 100644 index 0000000..f5d61a0 --- /dev/null +++ b/static/vm/ref.ts @@ -0,0 +1,359 @@ +// static/vm/ref.ts — the reference implementation of the Pocket Static VM. +// +// This is the semantic golden: the compiler's unit tests run compiled +// bytecode HERE (no emulator in the loop), and the three C runtimes are held +// to this behavior by the cross-target E2E suite. If ref.ts and vm/core.c +// ever disagree, core.c is wrong. +// +// The interpreter is deliberately strict: out-of-range anything throws, +// because on host we want compiler bugs loud (the C core clamps instead — +// cartridges don't get to crash). + +import { + OP, + OP_OPERANDS, + RNG_SEED, + SYSCALL_BASE, + VM_FLAGS, + VM_FRAMES, + VM_LOCALS, + VM_STACK, + VM_VARS, + WAITING, + i16, + rngNext, +} from "../spec/isa.ts"; + +export interface OperandReader { + u8(): number; + u16(): number; + i8(): number; + i16(): number; +} + +/** What a syscall tells the VM to do after its operands are consumed. */ +export interface SyscallResult { + /** Value to push immediately (non-suspending value ops). */ + push?: number; + /** Suspend with this reason; resume() continues. */ + suspend?: number; + /** With `suspend`: the resume(value) argument is pushed (CHOICE). */ + pushOnResume?: boolean; +} + +export interface RefHost { + /** Handle an opcode >= SYSCALL_BASE. MUST consume exactly its operands. */ + syscall(op: number, operands: OperandReader, vm: RefVM): SyscallResult; +} + +export type VmStatus = "idle" | "running" | "suspended" | "done"; + +export class RefVM { + readonly vars = new Int16Array(VM_VARS); + readonly flags = new Uint8Array(VM_FLAGS); + rng = RNG_SEED; + status: VmStatus = "idle"; + waiting: number = WAITING.NONE; + /** Ops executed since start() — the runaway guard for tests. */ + opCount = 0; + + private code: Uint8Array; + private table: number[]; + private host: RefHost; + private ip = 0; + private stack = new Int16Array(VM_STACK); + private sp = 0; + private locals = new Int16Array(VM_FRAMES * VM_LOCALS); + private frames: number[] = []; // return ips; frame N locals base = N*VM_LOCALS + private pendingPushOnResume = false; + scriptId = -1; + + constructor(code: Uint8Array, table: number[], host: RefHost) { + this.code = code; + this.table = table; + this.host = host; + } + + start(scriptId: number): void { + if (scriptId < 0 || scriptId >= this.table.length) throw new Error(`bad script id ${scriptId}`); + this.scriptId = scriptId; + this.ip = this.table[scriptId]; + this.sp = 0; + this.frames = []; + this.locals.fill(0); + this.status = "running"; + this.waiting = WAITING.NONE; + this.opCount = 0; + this.run(); + } + + /** Resume a suspended VM; `value` is pushed for value-suspends (CHOICE). */ + resume(value?: number): void { + if (this.status !== "suspended") throw new Error(`resume() while ${this.status}`); + if (this.pendingPushOnResume) { + if (value === undefined) throw new Error("this suspension resumes with a value"); + this.push(value); + } else if (value !== undefined) { + throw new Error("this suspension does not take a value"); + } + this.pendingPushOnResume = false; + this.status = "running"; + this.waiting = WAITING.NONE; + this.run(); + } + + // --- stack/locals/globals (strict) -------------------------------------- + push(v: number): void { + if (this.sp >= VM_STACK) throw new Error(`stack overflow at ip=${this.ip}`); + this.stack[this.sp++] = i16(v); + } + pop(): number { + if (this.sp <= 0) throw new Error(`stack underflow at ip=${this.ip}`); + return this.stack[--this.sp]; + } + getVar(id: number): number { + if (id < 0 || id >= VM_VARS) throw new Error(`var ${id} out of range`); + return this.vars[id]; + } + setVar(id: number, v: number): void { + if (id < 0 || id >= VM_VARS) throw new Error(`var ${id} out of range`); + this.vars[id] = i16(v); + } + getFlag(id: number): number { + if (id < 0 || id >= VM_FLAGS) throw new Error(`flag ${id} out of range`); + return this.flags[id]; + } + setFlag(id: number, v: boolean): void { + if (id < 0 || id >= VM_FLAGS) throw new Error(`flag ${id} out of range`); + this.flags[id] = v ? 1 : 0; + } + private localBase(): number { + return this.frames.length * VM_LOCALS; + } + + // --- operand reading ------------------------------------------------------ + private rdU8(): number { + return this.code[this.ip++]; + } + private rdU16(): number { + const v = this.code[this.ip] | (this.code[this.ip + 1] << 8); + this.ip += 2; + return v; + } + private rdI8(): number { + const v = this.rdU8(); + return v >= 0x80 ? v - 0x100 : v; + } + private rdI16(): number { + return i16(this.rdU16()); + } + private reader(): OperandReader { + return { + u8: () => this.rdU8(), + u16: () => this.rdU16(), + i8: () => this.rdI8(), + i16: () => this.rdI16(), + }; + } + + // --- the loop ------------------------------------------------------------- + private run(): void { + for (;;) { + if (this.ip < 0 || this.ip >= this.code.length) { + throw new Error(`ip ${this.ip} out of code (script ${this.scriptId})`); + } + const op = this.code[this.ip++]; + this.opCount++; + if (this.opCount > 1_000_000) throw new Error("runaway script (1M ops)"); + + if (op >= SYSCALL_BASE) { + const res = this.host.syscall(op, this.reader(), this); + if (res.suspend !== undefined) { + this.status = "suspended"; + this.waiting = res.suspend; + this.pendingPushOnResume = res.pushOnResume === true; + return; + } + if (res.push !== undefined) this.push(res.push); + continue; + } + + switch (op) { + case OP.END: + this.status = "done"; + this.waiting = WAITING.NONE; + return; + case OP.NOP: + break; + case OP.PUSH8: + this.push(this.rdI8()); + break; + case OP.PUSH16: + this.push(this.rdI16()); + break; + case OP.POP: + this.pop(); + break; + case OP.DUP: { + const v = this.pop(); + this.push(v); + this.push(v); + break; + } + case OP.JMP: { + const rel = this.rdI16(); + this.ip += rel; + break; + } + case OP.JZ: { + const rel = this.rdI16(); + if (this.pop() === 0) this.ip += rel; + break; + } + case OP.JNZ: { + const rel = this.rdI16(); + if (this.pop() !== 0) this.ip += rel; + break; + } + case OP.CALL: { + const id = this.rdU16(); + if (id >= this.table.length) throw new Error(`CALL bad script ${id}`); + if (this.frames.length >= VM_FRAMES - 1) throw new Error("call stack overflow"); + this.frames.push(this.ip); + const base = this.localBase(); + this.locals.fill(0, base, base + VM_LOCALS); + this.ip = this.table[id]; + break; + } + case OP.RET: { + const ret = this.frames.pop(); + if (ret === undefined) { + this.status = "done"; + this.waiting = WAITING.NONE; + return; + } + this.ip = ret; + break; + } + case OP.LDV: + this.push(this.getVar(this.rdU8())); + break; + case OP.STV: + this.setVar(this.rdU8(), this.pop()); + break; + case OP.LDL: { + const s = this.rdU8(); + if (s >= VM_LOCALS) throw new Error(`local ${s} out of range`); + this.push(this.locals[this.localBase() + s]); + break; + } + case OP.STL: { + const s = this.rdU8(); + if (s >= VM_LOCALS) throw new Error(`local ${s} out of range`); + this.locals[this.localBase() + s] = i16(this.pop()); + break; + } + case OP.FLAG: + this.push(this.getFlag(this.rdU8())); + break; + case OP.SETF: + this.setFlag(this.rdU8(), true); + break; + case OP.CLRF: + this.setFlag(this.rdU8(), false); + break; + case OP.STF: + this.setFlag(this.rdU8(), this.pop() !== 0); + break; + case OP.ADD: { + const b = this.pop(), a = this.pop(); + this.push(a + b); + break; + } + case OP.SUB: { + const b = this.pop(), a = this.pop(); + this.push(a - b); + break; + } + case OP.MUL: { + const b = this.pop(), a = this.pop(); + this.push(Math.imul(a, b)); + break; + } + case OP.DIV: { + const b = this.pop(), a = this.pop(); + this.push(b === 0 ? 0 : Math.trunc(a / b)); + break; + } + case OP.MOD: { + const b = this.pop(), a = this.pop(); + this.push(b === 0 ? 0 : a % b); + break; + } + case OP.NEG: + this.push(-this.pop()); + break; + case OP.EQ: { + const b = this.pop(), a = this.pop(); + this.push(a === b ? 1 : 0); + break; + } + case OP.NE: { + const b = this.pop(), a = this.pop(); + this.push(a !== b ? 1 : 0); + break; + } + case OP.LT: { + const b = this.pop(), a = this.pop(); + this.push(a < b ? 1 : 0); + break; + } + case OP.GT: { + const b = this.pop(), a = this.pop(); + this.push(a > b ? 1 : 0); + break; + } + case OP.LE: { + const b = this.pop(), a = this.pop(); + this.push(a <= b ? 1 : 0); + break; + } + case OP.GE: { + const b = this.pop(), a = this.pop(); + this.push(a >= b ? 1 : 0); + break; + } + case OP.NOT: + this.push(this.pop() === 0 ? 1 : 0); + break; + case OP.RND: { + const n = this.pop(); + if (n <= 0) { + this.push(0); + break; + } + this.rng = rngNext(this.rng); + this.push(this.rng % n); + break; + } + case OP.WAIT: { + const n = this.pop(); + if (n > 0) { + this.status = "suspended"; + this.waiting = WAITING.FRAMES; + this.pendingPushOnResume = false; + // The host is told how long via lastWait (frame simulation is + // the driver's business, not the VM's). + this.lastWait = n; + return; + } + break; + } + default: + throw new Error(`illegal opcode 0x${op.toString(16)} at ip=${this.ip - 1}`); + } + } + } + + lastWait = 0; +} diff --git a/static/vm/rpg-host.ts b/static/vm/rpg-host.ts new file mode 100644 index 0000000..9445762 --- /dev/null +++ b/static/vm/rpg-host.ts @@ -0,0 +1,115 @@ +// static/vm/rpg-host.ts — host-side RPG syscalls for the reference VM. +// +// Used by compiler unit tests and the story simulator: it executes SAY/CHOICE +// /WARP/... by recording them into an event log and answering CHOICEs from a +// scripted queue. This is "the game with the consoles removed" — if a story +// plays correctly here, the C runtimes only have to render it. + +import { WAITING } from "../spec/isa.ts"; +import { RPG_OP, RPG_OP_OPERANDS } from "../spec/rpg.ts"; +import type { OperandReader, RefHost, RefVM, SyscallResult } from "./ref.ts"; + +export type RpgEvent = + | { kind: "say"; textId: number } + | { kind: "choice"; textIds: number[]; picked: number } + | { kind: "lock" } + | { kind: "release" } + | { kind: "face"; slot: number } + | { kind: "avis"; slot: number; visible: boolean } + | { kind: "warp"; map: number; x: number; y: number; dir: number } + | { kind: "sfx"; id: number } + | { kind: "wait"; frames: number }; + +/** + * Auto-playing host: SAY pages are dismissed immediately, CHOICEs answered + * from `picks` (in order; throws when exhausted), WAITs elapse instantly. + * `events` is the full ordered transcript. + */ +export class AutoRpgHost implements RefHost { + events: RpgEvent[] = []; + private picks: number[]; + private pickAt = 0; + + constructor(picks: number[] = []) { + this.picks = picks; + } + + /** Convenience: run a script to completion under this host. */ + play(vm: RefVM, scriptId: number): RpgEvent[] { + vm.start(scriptId); + while (vm.status === "suspended") { + if (vm.waiting === WAITING.FRAMES) { + this.events.push({ kind: "wait", frames: vm.lastWait }); + vm.resume(); + } else if (vm.waiting === WAITING.TEXT) { + vm.resume(); + } else if (vm.waiting === WAITING.CHOICE) { + const last = this.events[this.events.length - 1]; + if (!last || last.kind !== "choice") throw new Error("choice suspend without event"); + vm.resume(last.picked); + } else { + throw new Error(`unknown waiting state ${vm.waiting}`); + } + } + return this.events; + } + + syscall(op: number, r: OperandReader, _vm: RefVM): SyscallResult { + switch (op) { + case RPG_OP.SAY: { + const textId = r.u16(); + this.events.push({ kind: "say", textId }); + return { suspend: WAITING.TEXT }; + } + case RPG_OP.CHOICE: { + const n = r.u8(); + const textIds: number[] = []; + for (let i = 0; i < n; i++) textIds.push(r.u16()); + if (this.pickAt >= this.picks.length) { + throw new Error(`CHOICE #${this.pickAt + 1} but only ${this.picks.length} picks scripted`); + } + const picked = this.picks[this.pickAt++]; + if (picked < 0 || picked >= n) throw new Error(`scripted pick ${picked} out of 0..${n - 1}`); + this.events.push({ kind: "choice", textIds, picked }); + return { suspend: WAITING.CHOICE, pushOnResume: true }; + } + case RPG_OP.LOCK: + this.events.push({ kind: "lock" }); + return {}; + case RPG_OP.RELEASE: + this.events.push({ kind: "release" }); + return {}; + case RPG_OP.FACE: + this.events.push({ kind: "face", slot: r.u8() }); + return {}; + case RPG_OP.AVIS: { + const slot = r.u8(); + const visible = r.u8() !== 0; + this.events.push({ kind: "avis", slot, visible }); + return {}; + } + case RPG_OP.WARP: { + const map = r.u8(), x = r.u8(), y = r.u8(), dir = r.u8(); + this.events.push({ kind: "warp", map, x, y, dir }); + return {}; + } + case RPG_OP.SFX: + this.events.push({ kind: "sfx", id: r.u8() }); + return {}; + default: + throw new Error(`unknown RPG syscall 0x${op.toString(16)}`); + } + } + + /** say/choice text ids in order — handy for asserting story flow. */ + get textTrace(): number[] { + const out: number[] = []; + for (const e of this.events) { + if (e.kind === "say") out.push(e.textId); + if (e.kind === "choice") out.push(...e.textIds); + } + return out; + } +} + +export { RPG_OP, RPG_OP_OPERANDS }; From 1e431e7c3f5ed80e7f0e47295c8e404e56e86a6a Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Fri, 17 Jul 2026 17:53:17 +0800 Subject: [PATCH 2/6] =?UTF-8?q?feat(static):=20Game=20Boy=20runtime=20?= =?UTF-8?q?=E2=80=94=20smoke=20E2E=2035/35,=20one=20binary=20contract=20wi?= =?UTF-8?q?th=20GBA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - sdcc/SM83 bare-metal runtime (own crt0, no GBDK): window-layer textbox, STAT-gated VRAM write queue, HRAM OAM DMA, MBC5 blob banking - targets/gb.ts packager: DMG 2bpp shade LUTs, banked data emission, makebin + rgbfix drive - portable-core hardening: sdcc 4.6 SM83 miscompiles some u8*u8 multiply frames (__muluchar) — engine arithmetic rewritten as accumulation/shifts - vblank-budget lesson: writes past mode 1 are silently dropped on DMG; the queue drains max 12 cells per vblank behind a STAT+LY gate Co-Authored-By: Claude Fable 5 --- static/compiler/targets/gb.ts | 201 ++++++++++++++++++++- static/runtime/core/rpg.c | 31 +++- static/runtime/gb/crt0.s | 65 +++++++ static/runtime/gb/hal_gb.c | 319 ++++++++++++++++++++++++++++++++++ static/test/e2e.ts | 2 +- 5 files changed, 605 insertions(+), 13 deletions(-) create mode 100644 static/runtime/gb/crt0.s create mode 100644 static/runtime/gb/hal_gb.c diff --git a/static/compiler/targets/gb.ts b/static/compiler/targets/gb.ts index 74f83f2..6d3d2db 100644 --- a/static/compiler/targets/gb.ts +++ b/static/compiler/targets/gb.ts @@ -1,6 +1,201 @@ -// static/compiler/targets/gb.ts — Game Boy packager. (Being built.) +// static/compiler/targets/gb.ts — the Game Boy packager: DMG 2bpp art, +// MBC5 bank assignment (each blob whole in one 16 KB bank, accessed through +// the 0x4000 window), bank-0 C tables + banked assembly data, and the +// sdcc/sdasgb/sdldgb/makebin/rgbfix toolchain drive. + +import { $ } from "bun"; +import { dirname, join } from "node:path"; +import { BANK_SIZE, FONT_GLYPHS } from "../../spec/isa.ts"; +import { SPRITE_ENTRY_SIZE } from "../../spec/rpg.ts"; +import { encodeTileGb, frameToTiles, gbShadeLut, glyphTile, luma, tileFromHexRows } from "../assets.ts"; +import { FONT8 } from "../font.gen.ts"; import type { LinkedGame } from "../link.ts"; -export async function buildGb(_linked: LinkedGame, _outRom: string): Promise { - throw new Error("gb target: not implemented yet"); +const RUNTIME = join(import.meta.dir, "..", "..", "runtime"); + +interface GbBlob { + bytes: Uint8Array; +} + +export function encodeGbArt(linked: LinkedGame): { art: Uint8Array; font: Uint8Array; obj: Uint8Array } { + const { model } = linked; + const bgLut = gbShadeLut(model.tileset.palette); + + const art: number[] = []; + for (let i = 1; i < model.tileNames.length; i++) { + const tile = model.tileset.tiles[model.tileNames[i]]; + art.push(...encodeTileGb(tileFromHexRows(tile.px), bgLut)); + } + + const font: number[] = []; + for (let g = 0; g < FONT_GLYPHS; g++) { + // ink = 3 (black), paper = 0 (white) under the identity BGP ramp + font.push(...encodeTileGb(glyphTile(FONT8[g], 3, 0), (v) => v)); + } + + // OBJ: pixel 0 transparent; visible colors clamp to shades 1..3 so nothing + // vanishes (DMG OBJ color 0 is always transparent). + const obj: number[] = []; + for (const sp of model.sprites) { + const shade = gbShadeLut(sp.palette); + const lut = (idx: number): number => { + if (idx === 0) return 0; + const s = shade(idx); + return s === 0 ? 1 : s; + }; + const framesPerDir = sp.facings.down.length; + void framesPerDir; + for (const facing of ["down", "up", "right"] as const) { + for (const frame of sp.facings[facing]) { + const [tl, tr, bl, br] = frameToTiles(frame); + // 8x16 pairs: left column (top,bottom), then right column + for (const t of [tl, bl, tr, br]) obj.push(...encodeTileGb(t, lut)); + } + } + } + void luma; + return { art: Uint8Array.from(art), font: Uint8Array.from(font), obj: Uint8Array.from(obj) }; +} + +export function emitGbSources(linked: LinkedGame): { genC: string; bankAsm: Map; bankCount: number } { + const { model } = linked; + const { art, font, obj } = encodeGbArt(linked); + + // Full blob list: linked blobs + art/font/obj. + const blobs: GbBlob[] = linked.blobs.map((b) => ({ bytes: b.bytes })); + const artBlob = blobs.length; + blobs.push({ bytes: art }); + const fontBlob = blobs.length; + blobs.push({ bytes: font }); + const objBlob = blobs.length; + blobs.push({ bytes: obj }); + + // First-fit bank assignment (banks 1..). + const bankOf: number[] = []; + const bankUsed: number[] = []; // per bank index (0 = bank 1) + for (let i = 0; i < blobs.length; i++) { + const size = blobs[i].bytes.length; + if (size > BANK_SIZE) throw new Error(`gb: blob ${i} is ${size} B > one bank`); + let placed = -1; + for (let b = 0; b < bankUsed.length; b++) { + if (bankUsed[b] + size <= BANK_SIZE) { + placed = b; + break; + } + } + if (placed < 0) { + placed = bankUsed.length; + bankUsed.push(0); + } + bankOf[i] = placed + 1; + bankUsed[placed] += size; + } + + // Banked data: one .s per bank. + const bankAsm = new Map(); + for (let b = 1; b <= bankUsed.length; b++) { + const lines: string[] = [ + `; gen_bank${b}.s — GENERATED by targets/gb.ts. DO NOT EDIT.`, + `\t.module gen_bank${b}`, + `\t.area _CODE_${b}`, + ]; + blobs.forEach((blob, i) => { + if (bankOf[i] !== b) return; + lines.push(`_ps_b${i}::`); + const bytes = blob.bytes; + for (let at = 0; at < bytes.length; at += 16) { + const row = Array.from(bytes.subarray(at, at + 16)).join(","); + lines.push(`\t.db ${row}`); + } + if (bytes.length === 0) lines.push("\t.db 0"); + }); + bankAsm.set(b, lines.join("\n") + "\n"); + } + + // Bank 0 tables. + const lines: string[] = []; + const push = (s: string) => lines.push(s); + const cArray = (name: string, bytes: ArrayLike, type = "unsigned char"): void => { + const vals: string[] = []; + for (let i = 0; i < bytes.length; i++) vals.push(String(bytes[i])); + push(`const ${type} ${name}[] = { ${vals.join(",")} };`); + }; + push("/* gen_data.c — GENERATED by targets/gb.ts. DO NOT EDIT. */"); + push('#include "spec_gen.h"'); + push("typedef unsigned char u8; typedef unsigned short u16;"); + cArray("ps_game_header", linked.header, "u8"); + push(`const u16 ps_script_table[] = { ${linked.scriptTable.join(",")} };`); + { + const b: number[] = []; + for (const e of linked.textTable) b.push(e.blob, e.off & 0xff, (e.off >> 8) & 0xff); + cArray("ps_text_table", b, "u8"); + } + cArray("ps_map_blob", linked.mapBlobIndex, "u8"); + // Sprite table: tile_base in 8x8 OBJ tiles, 4 per frame, [L pair][R pair]. + { + const table: number[] = []; + let tileBase = 0; + for (const sp of model.sprites) { + const framesPerDir = sp.facings.down.length; + table.push(tileBase & 0xff, (tileBase >> 8) & 0xff, framesPerDir, 0); + tileBase += 3 * framesPerDir * 4; + } + if (table.length !== model.sprites.length * SPRITE_ENTRY_SIZE) throw new Error("sprite table drifted"); + cArray("ps_sprite_table", table, "u8"); + } + blobs.forEach((_, i) => push(`extern const u8 ps_b${i}[];`)); + cArray("ps_blob_bank", bankOf, "u8"); + push(`const u8 *const ps_blob_addr[] = { ${blobs.map((_, i) => `ps_b${i}`).join(",")} };`); + push(`const u8 ps_art_blob = ${artBlob};`); + push(`const u8 ps_font_blob = ${fontBlob};`); + push(`const u8 ps_obj_blob = ${objBlob};`); + push(`const u8 ps_bg_tile_count = ${model.tileNames.length - 1};`); + push(`const u16 ps_obj_tile_bytes = ${obj.length};`); + + return { genC: lines.join("\n") + "\n", bankAsm, bankCount: bankUsed.length }; +} + +export async function buildGb(linked: LinkedGame, outRom: string): Promise { + const outDir = dirname(outRom); + const genDir = join(outDir, "gen-gb"); + await $`mkdir -p ${genDir}`.quiet(); + + const { genC, bankAsm, bankCount } = emitGbSources(linked); + await Bun.write(join(genDir, "gen_data.c"), genC); + for (const [b, asm] of bankAsm) await Bun.write(join(genDir, `gen_bank${b}.s`), asm); + + const gbDir = join(RUNTIME, "gb"); + const coreDir = join(RUNTIME, "core"); + const genInc = join(RUNTIME, "gen"); + const cflags = ["-msm83", "--opt-code-speed", `-DPS_TARGET_GB`, `-I${genInc}`, `-I${coreDir}`, `-I${gbDir}`]; + + // compile C + for (const [src, rel] of [ + [join(coreDir, "vm.c"), "vm.rel"], + [join(coreDir, "rpg.c"), "rpg.rel"], + [join(gbDir, "hal_gb.c"), "hal_gb.rel"], + [join(genDir, "gen_data.c"), "gen_data.rel"], + ] as const) { + await $`sdcc ${cflags} -c ${src} -o ${join(genDir, rel)}`.quiet(); + } + // assemble crt0 + banks + await $`sdasgb -plosgff -o ${join(genDir, "crt0.rel")} ${join(gbDir, "crt0.s")}`.quiet(); + const bankRels: string[] = []; + for (const b of bankAsm.keys()) { + const rel = join(genDir, `gen_bank${b}.rel`); + await $`sdasgb -plosgff -o ${rel} ${join(genDir, `gen_bank${b}.s`)}`.quiet(); + bankRels.push(rel); + } + + // link (banked areas at 0x4000 window) + const ihx = join(genDir, "game.ihx"); + const bankFlags = [...bankAsm.keys()].map((b) => `-Wl-b_CODE_${b}=0x${(b * 0x10000 + 0x4000).toString(16)}`); + await $`sdcc -msm83 --no-std-crt0 --code-loc 0x0200 --data-loc 0xc0a0 ${bankFlags} ${join(genDir, "crt0.rel")} ${join(genDir, "vm.rel")} ${join(genDir, "rpg.rel")} ${join(genDir, "hal_gb.rel")} ${join(genDir, "gen_data.rel")} ${bankRels} -o ${ihx}`.quiet(); + + // ROM image: round banks up to a power of two (MBC5 minimum 2 x 16K) + let romBanks = 2; + while (romBanks < bankCount + 1) romBanks *= 2; + await $`makebin -Z -yo ${romBanks} ${ihx} ${outRom}`.quiet(); + const title = linked.model.title.toUpperCase().replace(/[^A-Z0-9 ]/g, "").slice(0, 11); + await $`rgbfix -v -m 0x19 -p 0 -t ${title} ${outRom}`.quiet(); } diff --git a/static/runtime/core/rpg.c b/static/runtime/core/rpg.c index 77eafba..6957074 100644 --- a/static/runtime/core/rpg.c +++ b/static/runtime/core/rpg.c @@ -28,8 +28,12 @@ typedef struct { u16 talk; u8 stepLeft; /* pixels remaining in the current step */ u8 anim; + u8 phase; /* wander cadence offset (slot * WANDER_PHASE, precomputed) */ u16 lcg; } ActorRt; +/* NOTE: 8-bit-safe arithmetic only in this file — sdcc 4.6 (SM83) miscompiles + * some u8*u8 multiply frames (__muluchar), so anything that would lower to it + * is written as accumulation or shifts instead. */ static ActorRt actors[MAX_ACTORS]; static u8 actor_count; @@ -117,16 +121,19 @@ static u8 blocked(u8 x, u8 y) { /* ---- map load --------------------------------------------------------------*/ static void map_load(u8 map, u8 x, u8 y, u8 dir) { const u8 *m; - u8 i; - u16 enter; + const u8 *a; + u8 i, phase; + u16 lcg, enter; cur_map = map; map_view_load(); m = hal_blob(mblob); enter = rd16(m + 6); + a = m + actors_off; + phase = 0; + lcg = 0x1234; for (i = 0; i < actor_count; i++) { - const u8 *a = m + actors_off + (u16)i * ACTOR_SIZE; actors[i].x = a[0]; actors[i].y = a[1]; actors[i].px = (u16)a[0] << 3; @@ -138,7 +145,11 @@ static void map_load(u8 map, u8 x, u8 y, u8 dir) { actors[i].talk = rd16(a + 6); actors[i].stepLeft = 0; actors[i].anim = 0; - actors[i].lcg = (u16)(0x1234 + i * 977); + actors[i].phase = phase; + actors[i].lcg = lcg; + a += ACTOR_SIZE; + phase = (u8)(phase + WANDER_PHASE); + lcg = (u16)(lcg + 977); } ptx = x; @@ -331,16 +342,18 @@ static void choice_tick(void) { /* ---- warps / triggers -------------------------------------------------------*/ static void check_warp_trigger(void) { const u8 *m = hal_blob(mblob); + const u8 *w; + const u8 *t; u8 i; - for (i = 0; i < warp_count; i++) { - const u8 *w = m + warps_off + (u16)i * WARP_SIZE; + w = m + warps_off; + for (i = 0; i < warp_count; i++, w += WARP_SIZE) { if (w[0] == ptx && w[1] == pty) { map_load(w[2], w[3], w[4], w[5]); return; } } - for (i = 0; i < trig_count; i++) { - const u8 *t = m + trig_off + (u16)i * TRIGGER_SIZE; + t = m + trig_off; + for (i = 0; i < trig_count; i++, t += TRIGGER_SIZE) { if (t[0] == ptx && t[1] == pty) { u16 script = rd16(t + 2); if ((t[4] & TRIGGER_F_ONCE) && vm_get_flag(t[5])) continue; @@ -416,7 +429,7 @@ static void actors_tick(void) { } if (a->move != MOVE_WANDER) continue; if (vm.active || tb_mode != TB_NONE) continue; - if (((u16)((u16)frame_no + (u16)i * WANDER_PHASE) % WANDER_PERIOD) != 0) continue; + if (((u16)((u16)frame_no + a->phase) % WANDER_PERIOD) != 0) continue; a->lcg = (u16)(a->lcg * 25173u + 13849u); { u8 d = (u8)((a->lcg >> 8) & 3); diff --git a/static/runtime/gb/crt0.s b/static/runtime/gb/crt0.s new file mode 100644 index 0000000..3399d3d --- /dev/null +++ b/static/runtime/gb/crt0.s @@ -0,0 +1,65 @@ +; static/runtime/gb/crt0.s — Game Boy startup for Pocket Static (sdasgb). +; Header logo/checksums are patched by rgbfix; makebin sizes the ROM. +; No GBDK: this is the whole bare-metal bring-up. + + .module crt0 + .globl _main + + .area _HEADER (ABS) + .org 0x0000 + ; rst vectors + unused irq vectors: point everything harmless + ret + .org 0x0040 ; vblank irq (unused; IME stays off) + reti + .org 0x0048 + reti + .org 0x0050 + reti + .org 0x0058 + reti + .org 0x0060 + reti + + .org 0x0100 + nop + jp init + ; 0x0104-0x0133 Nintendo logo (rgbfix -v writes it) + .ds 48 + ; 0x0134-0x0143 title (rgbfix -t writes it) + .ds 16 + .db 0x00, 0x00 ; new licensee + .db 0x00 ; sgb + .db 0x19 ; cart type MBC5 + .db 0x00 ; rom size (rgbfix/makebin fix) + .db 0x00 ; ram size + .db 0x01 ; dest + .db 0x33 ; old licensee + .db 0x00 ; version + .db 0x00 ; header checksum (rgbfix) + .db 0x00, 0x00 ; global checksum (rgbfix) + +init: + di + ld sp, #0xDF00 ; debug block owns 0xDF00-0xDFBB; stack below it + + ; zero WRAM 0xC000-0xDEFF (bss + queue + shadow OAM) + ld hl, #0xC000 + ld bc, #0x1F00 +clr: + xor a + ld (hl+), a + dec bc + ld a, b + or c + jr nz, clr + + call gsinit + jp _main + + ; sdcc initialized-data copy: GSINIT fragments run, GSFINAL returns. + .area _GSINIT +gsinit: + .area _GSFINAL + ret + + .area _CODE diff --git a/static/runtime/gb/hal_gb.c b/static/runtime/gb/hal_gb.c new file mode 100644 index 0000000..b785b45 --- /dev/null +++ b/static/runtime/gb/hal_gb.c @@ -0,0 +1,319 @@ +/* static/runtime/gb/hal_gb.c — the Game Boy (DMG) platform layer. + * + * BG = map (0x9800, SCX/SCY scroll), Window = textbox (0x9C00 — showing the + * box is a register write, no map restore ever). BG tiles use signed + * addressing (0x8800-0x97FF) so OBJ own 0x8000-0x87FF; OBJ are 8x16 pairs. + * All VRAM traffic outside map loads goes through a small write queue + * drained during vblank; map loads switch the LCD off (inside vblank) and + * blast directly. OAM goes up via the classic HRAM DMA stub. + */ +#include "hal.h" + +#define REG8(a) (*(volatile u8 *)(a)) +#define rP1 REG8(0xFF00) +#define rDIV REG8(0xFF04) +#define rLCDC REG8(0xFF40) +#define rSTAT REG8(0xFF41) +#define rSCY REG8(0xFF42) +#define rSCX REG8(0xFF43) +#define rLY REG8(0xFF44) +#define rBGP REG8(0xFF47) +#define rOBP0 REG8(0xFF48) +#define rOBP1 REG8(0xFF49) +#define rWY REG8(0xFF4A) +#define rWX REG8(0xFF4B) +#define rDMA REG8(0xFF46) +#define rNR10 REG8(0xFF10) +#define rNR11 REG8(0xFF11) +#define rNR12 REG8(0xFF12) +#define rNR13 REG8(0xFF13) +#define rNR14 REG8(0xFF14) +#define rNR50 REG8(0xFF24) +#define rNR51 REG8(0xFF25) +#define rNR52 REG8(0xFF26) + +#define MBC5_BANK (*(volatile u8 *)0x2000) + +#define VRAM8(a) ((volatile u8 *)(a)) +#define BG_MAP 0x9800 +#define WIN_MAP 0x9C00 + +/* generated (gen data, bank 0). Art lives in banked blobs: latch + copy at + * init (LCD off), so bank 0 stays code + tables only. */ +extern const u8 ps_blob_bank[]; +extern const u8 *const ps_blob_addr[]; +extern const u8 ps_art_blob; /* blob of 2bpp art tiles (ids 1..) */ +extern const u8 ps_bg_tile_count; +extern const u8 ps_font_blob; /* blob of 95 2bpp glyphs */ +extern const u8 ps_obj_blob; /* blob of OBJ tiles */ +extern const u16 ps_obj_tile_bytes; + +/* shadow OAM: DMA source must be 0xXX00-aligned; crt0 zeroed WRAM. + * Linker keeps _DATA at 0xC0A0+, so 0xC000 is ours. */ +#define OAM_SHADOW ((volatile u8 *)0xC000) + +/* write queue: [q_head, q_n) pending. Drained strictly inside vblank — + * the DMG drops VRAM writes outside modes 0/1, so the drain loop watches + * STAT and stops the moment vblank ends (the tail waits a frame). */ +#define QCAP 192 +static u8 q_hi[QCAP], q_lo[QCAP], q_val[QCAP]; +static u8 q_head, q_n; +static u8 text_rows, text_top; +static u8 scroll_x, scroll_y; +static u8 dma_stub_ready; + +const u8 *hal_blob(u8 blob) { + MBC5_BANK = ps_blob_bank[blob]; + return ps_blob_addr[blob]; +} + +static void qpush(u16 addr, u8 val) { + if (q_n >= QCAP) { + u8 i, len; + if (q_head == 0) return; /* truly full: drop (budgets keep us below QCAP) */ + len = (u8)(q_n - q_head); + for (i = 0; i < len; i++) { + q_hi[i] = q_hi[i + q_head]; + q_lo[i] = q_lo[i + q_head]; + q_val[i] = q_val[i + q_head]; + } + q_head = 0; + q_n = len; + } + q_hi[q_n] = (u8)(addr >> 8); + q_lo[q_n] = (u8)addr; + q_val[q_n] = val; + q_n++; +} + +static void wait_vblank(void) { + while (rLY >= 144) {} + while (rLY < 144) {} +} + +/* OAM DMA stub in HRAM (0xFF80): ldh (rDMA),a; loop 40; ret */ +static void install_dma_stub(void) { + static const u8 stub[] = { 0xe0, 0x46, 0x3e, 0x28, 0x3d, 0x20, 0xfd, 0xc9 }; + u8 i; + for (i = 0; i < sizeof stub; i++) *(volatile u8 *)(0xFF80 + i) = stub[i]; + dma_stub_ready = 1; +} + +static void oam_dma(void) { + __asm__("ld a, #0xC0"); + __asm__("call 0xFF80"); +} + +/* ---- init ---------------------------------------------------------------------*/ +static void upload_bg_tile(u8 id, const u8 *src) { + /* signed addressing: ids 0..127 -> 0x9000, 128..255 -> 0x8800 */ + u16 base = id < 128 ? (u16)(0x9000 + (u16)id * 16) : (u16)(0x8800 + (u16)(id - 128) * 16); + volatile u8 *d = VRAM8(base); + u8 i; + for (i = 0; i < 16; i++) d[i] = src[i]; +} + +void hal_init(void) { + u16 i; + u8 t; + volatile u8 *d; + + wait_vblank(); + rLCDC = 0x00; /* LCD off: free VRAM access */ + + /* palettes: BGP dark-descending; OBP0 same ramp, color 0 transparent */ + rBGP = 0xE4; /* 3,2,1,0 */ + rOBP0 = 0xE4; + rOBP1 = 0xE4; + + /* art tiles (id 1..) + blank (id 0) */ + { + static const u8 zero[16] = { 0 }; + upload_bg_tile(0, zero); + } + { + const u8 *src = hal_blob(ps_art_blob); + for (t = 0; t < ps_bg_tile_count; t++) upload_bg_tile((u8)(t + 1), src + (u16)t * 16); + } + /* font at the fixed base */ + { + const u8 *src = hal_blob(ps_font_blob); + for (t = 0; t < FONT_GLYPHS; t++) upload_bg_tile((u8)(PS_BG_FONT_BASE + t), src + (u16)t * 16); + } + + /* OBJ tiles at 0x8000 */ + { + const u8 *src = hal_blob(ps_obj_blob); + d = VRAM8(0x8000); + for (i = 0; i < ps_obj_tile_bytes; i++) d[i] = src[i]; + } + + /* clear both maps to blank; window rows prefill with the space glyph */ + d = VRAM8(BG_MAP); + for (i = 0; i < 32 * 32; i++) d[i] = 0; + d = VRAM8(WIN_MAP); + for (i = 0; i < 32 * 32; i++) d[i] = PS_BG_FONT_BASE; + + install_dma_stub(); + + /* sound on, both terminals, square 1 ready */ + rNR52 = 0x80; + rNR50 = 0x77; + rNR51 = 0x11; + + rWX = 7; + rWY = 144; /* window parked off-screen */ + /* LCD on: BG on, OBJ on 8x16, window on (map 0x9C00), signed BG tiles */ + rLCDC = 0x80 | 0x01 | 0x02 | 0x04 | 0x20 | 0x40; +} + +/* ---- frame ---------------------------------------------------------------------*/ +void hal_frame(void) { + wait_vblank(); + /* OAM + scroll first (cheap, must not miss the frame), then drain the + * queue for as long as vblank lasts — STAT mode 1 is the gate. */ + oam_dma(); + rSCX = scroll_x; + rSCY = scroll_y; + { + u8 budget = 12; + while (q_head < q_n && budget) { + if ((rSTAT & 3) != 1 || rLY > 150) break; /* vblank over: next frame */ + *(volatile u8 *)(((u16)q_hi[q_head] << 8) | q_lo[q_head]) = q_val[q_head]; + q_head++; + budget--; + } + } + if (q_head == q_n) { + q_head = 0; + q_n = 0; + } +} + +/* ---- input ----------------------------------------------------------------------*/ +u8 hal_keys(void) { + u8 pad, btn; + rP1 = 0x20; /* select dpad */ + pad = rP1; + pad = rP1; + pad = (u8)(~pad & 0x0f); /* right,left,up,down (bits 0-3) */ + rP1 = 0x10; /* select buttons */ + btn = rP1; + btn = rP1; + btn = rP1; + btn = (u8)(~btn & 0x0f); /* a,b,select,start */ + rP1 = 0x30; + /* normalize: PS mask = a,b,select,start,right,left,up,down */ + return (u8)(btn | (pad << 4)); +} + +/* ---- video -----------------------------------------------------------------------*/ +void hal_map_draw(u8 mapBlob, u8 w, u8 h) { + const u8 *row; + volatile u8 *d = VRAM8(BG_MAP); + volatile u8 *out; + u8 x, y; + + wait_vblank(); + rLCDC &= 0x7f; /* LCD off inside vblank: safe on hardware */ + { + const u8 *m = hal_blob(mapBlob); + row = m + (u16)(m[8] | ((u16)m[9] << 8)); + } + out = d; + for (y = 0; y < 32; y++) { + for (x = 0; x < 32; x++) { + u8 e = 0; + if (x < w && y < h) e = row[x]; + out[x] = e; + } + if (y < h) row += w; + out += 32; + } + q_head = 0; + q_n = 0; /* stale textbox writes are void after a map change */ + rLCDC |= 0x80; +} + +void hal_scroll(u16 px, u16 py) { + scroll_x = (u8)px; + scroll_y = (u8)py; +} + +void hal_obj(u8 slot, s16 px, s16 py, u8 spriteId, u8 dir, u8 frame, u8 hidden) { + volatile u8 *o = OAM_SHADOW + (u16)slot * 8; /* 2 hw sprites = 8 bytes */ + const u8 *sp = ps_sprite_table + (u16)spriteId * SPRITE_ENTRY_SIZE; + u16 tile_base = (u16)(sp[0] | ((u16)sp[1] << 8)); + u8 frames = sp[2]; + u8 flip = 0; + u8 dblock = dir; + u8 t; + + if (hidden || px <= -16 || py <= -16 || px >= 160 || py >= 144) { + o[0] = 0; + o[4] = 0; + return; + } + if (dir == DIR_LEFT) { + dblock = DIR_RIGHT; + flip = 0x20; + } + if (frame >= frames) frame = 0; + /* frame block = 4 tiles as [leftTop,leftBottom,rightTop,rightBottom]; + * 8x16 OBJ tile index ignores bit 0. frames is 1 or 2 — shift, don't + * multiply (see the __muluchar note in rpg.c). */ + t = frames == 2 ? (u8)(dblock << 1) : dblock; + t = (u8)(tile_base + ((u16)(t + frame) << 2)); + /* left column */ + o[0] = (u8)(py + 16); + o[1] = (u8)(px + 8 + (flip ? 8 : 0)); + o[2] = t; + o[3] = flip; + /* right column */ + o[4] = (u8)(py + 16); + o[5] = (u8)(px + 8 + (flip ? 0 : 8)); + o[6] = (u8)(t + 2); + o[7] = flip; +} + +/* ---- textbox ---------------------------------------------------------------------*/ +void hal_text_open(u8 rows) { + u8 x, y; + text_rows = rows; + text_top = 0; + /* clear the window's used rows back to paper */ + for (y = 0; y < (u8)(rows + 2); y++) { + for (x = 0; x < 20; x++) qpush((u16)(WIN_MAP + (u16)y * 32 + x), PS_BG_FONT_BASE); + } + rWY = (u8)(144 - ((u8)(rows + 2)) * 8); +} + +void hal_text_close(void) { + rWY = 144; +} + +void hal_text_glyph(u8 col, u8 row, u8 glyph) { + qpush((u16)(WIN_MAP + (u16)(row + 1) * 32 + 1 + col), (u8)(PS_BG_FONT_BASE + glyph)); +} + +/* ---- sfx --------------------------------------------------------------------------*/ +void hal_sfx(u8 id) { + static const u8 duty[5] = { 0x80, 0x40, 0x80, 0x80, 0xc0 }; + static const u8 hi[5] = { 0xc6, 0xc4, 0xc3, 0xc6, 0xc7 }; + if (id > 4) return; + rNR10 = 0x00; + rNR11 = duty[id]; + rNR12 = 0xa3; + rNR13 = 0x00; + rNR14 = hi[id]; +} + +/* ---- entry --------------------------------------------------------------------------*/ +void main(void) { + hal_init(); + rpg_boot(); + for (;;) { + rpg_tick(); + hal_frame(); + } +} diff --git a/static/test/e2e.ts b/static/test/e2e.ts index 8efdb6c..26ce69d 100644 --- a/static/test/e2e.ts +++ b/static/test/e2e.ts @@ -197,7 +197,7 @@ async function testTarget(target: TargetName): Promise { check("cheers (macro unroll)", r.cheers, orc.cheers); check("sub calls (CALL/RET)", r.subCalls, orc.subCalls); check("re-talk textbox", r.retalkText, 1); - const retalk = out.debug.texts.findIndex((t) => t.includes("already won")); + const retalk = out.debug.texts.findIndex((t) => t.replace(/\n/g, " ").includes("already won")); check("re-talk page", r.retalkPage, retalk); } From 7b14f8f478fff81c4b1b5bdcd482aeb5644424b4 Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Fri, 17 Jul 2026 18:03:58 +0800 Subject: [PATCH 3/6] =?UTF-8?q?feat(static):=20NES=20runtime=20=E2=80=94?= =?UTF-8?q?=20the=20contract=20suite=20goes=20three-for-three=20(105/105)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - cc65/ca65 runtime with custom crt0: NMI-owned OAM DMA + VRAM write ring (single + fill-8 entries), CHR-RAM upload, UNROM bus-conflict-safe bank latch, attribute-row-aligned textbox (rows 24-29, subpal 3) - targets/nes.ts: planar 2bpp + NES master-palette reduction, generated ld65 config + iNES header, per-bank data segments - jsnes harness paces scenarios on the debug block's tick counter, so cc65's multi-frame ticks keep scenarios tick-accurate - nes maps cap at 32x24 (attr granularity): closing the box restores fills Co-Authored-By: Claude Fable 5 --- static/compiler/targets/nes.ts | 242 +++++++++++++++++++++++++- static/runtime/nes/crt0.s | 139 +++++++++++++++ static/runtime/nes/hal_nes.c | 274 ++++++++++++++++++++++++++++++ static/spec/isa.ts | 5 +- static/test/harness/nes_runner.ts | 103 +++++++++++ 5 files changed, 759 insertions(+), 4 deletions(-) create mode 100644 static/runtime/nes/crt0.s create mode 100644 static/runtime/nes/hal_nes.c create mode 100644 static/test/harness/nes_runner.ts diff --git a/static/compiler/targets/nes.ts b/static/compiler/targets/nes.ts index f7a0279..abdef7a 100644 --- a/static/compiler/targets/nes.ts +++ b/static/compiler/targets/nes.ts @@ -1,6 +1,242 @@ -// static/compiler/targets/nes.ts — NES packager. (Being built.) +// static/compiler/targets/nes.ts — the NES packager: planar 2bpp CHR with +// master-palette reduction, UNROM (mapper 2) bank assignment (data banks at +// the $8000 window, code fixed at $C000), generated ld65 config + iNES +// header, and the cc65/ca65/ld65 toolchain drive. + +import { $ } from "bun"; +import { dirname, join } from "node:path"; +import { BANK_SIZE, FONT_GLYPHS } from "../../spec/isa.ts"; +import { encodeTileNes, frameToTiles, glyphTile, nearestNesColor, nesReduce, tileFromHexRows } from "../assets.ts"; +import { FONT8 } from "../font.gen.ts"; import type { LinkedGame } from "../link.ts"; -export async function buildNes(_linked: LinkedGame, _outRom: string): Promise { - throw new Error("nes target: not implemented yet"); +const RUNTIME = join(import.meta.dir, "..", "..", "runtime"); +const CC65_LIB = "/opt/homebrew/share/cc65/lib/none.lib"; + +export function encodeNesArt(linked: LinkedGame): { + art: Uint8Array; + font: Uint8Array; + obj: Uint8Array; + bgPal: number[]; + objPal: number[]; + spriteTable: number[]; +} { + const { model } = linked; + const backdrop = nearestNesColor(model.tileset.palette[0]); + + const bg = nesReduce(model.tileset.palette, backdrop); + const art: number[] = []; + for (let i = 1; i < model.tileNames.length; i++) { + const tile = model.tileset.tiles[model.tileNames[i]]; + art.push(...encodeTileNes(tileFromHexRows(tile.px), bg.valueOf)); + } + + const font: number[] = []; + for (let g = 0; g < FONT_GLYPHS; g++) { + font.push(...encodeTileNes(glyphTile(FONT8[g], 3, 1), (v) => v)); // ink black(3), paper white(1) + } + + // OBJ: per-sprite subpalette, deduped into the 4 OBJ slots. + const obj: number[] = []; + const objSubpals: string[] = []; + const objPal: number[] = []; + const spriteTable: number[] = []; + let tileBase = 0; + for (const sp of model.sprites) { + const red = nesReduce(sp.palette, backdrop); + const key = red.subpal.join(","); + let slot = objSubpals.indexOf(key); + if (slot < 0) { + if (objSubpals.length >= 4) { + throw new Error( + `nes: more than 4 distinct sprite palettes (sprite "${sp.name}") — share palettes across sprites`, + ); + } + slot = objSubpals.length; + objSubpals.push(key); + objPal.push(...red.subpal); + } + const framesPerDir = sp.facings.down.length; + spriteTable.push(tileBase & 0xff, (tileBase >> 8) & 0xff, framesPerDir, slot); + for (const facing of ["down", "up", "right"] as const) { + for (const frame of sp.facings[facing]) { + const [tl, tr, bl, br] = frameToTiles(frame); + for (const t of [tl, bl, tr, br]) obj.push(...encodeTileNes(t, red.valueOf)); + tileBase += 4; + } + } + } + while (objPal.length < 16) objPal.push(0x0f); + if (tileBase > 256) throw new Error(`nes: ${tileBase} OBJ tiles exceeds pattern table 1 (256)`); + + return { + art: Uint8Array.from(art), + font: Uint8Array.from(font), + obj: Uint8Array.from(obj), + bgPal: [backdrop, ...bg.subpal.slice(1)], + objPal, + spriteTable, + }; +} + +export async function buildNes(linked: LinkedGame, outRom: string): Promise { + const { model } = linked; + const outDir = dirname(outRom); + const genDir = join(outDir, "gen-nes"); + await $`mkdir -p ${genDir}`.quiet(); + + const { art, font, obj, bgPal, objPal, spriteTable } = encodeNesArt(linked); + + // Blob list + first-fit into switchable banks. + const blobs = [...linked.blobs.map((b) => b.bytes), art, font, obj]; + const artBlob = linked.blobs.length; + const fontBlob = artBlob + 1; + const objBlob = artBlob + 2; + const bankOf: number[] = []; + const bankUsed: number[] = []; + blobs.forEach((bytes, i) => { + if (bytes.length > BANK_SIZE) throw new Error(`nes: blob ${i} exceeds one bank`); + let placed = -1; + for (let b = 0; b < bankUsed.length; b++) { + if (bankUsed[b] + bytes.length <= BANK_SIZE) { + placed = b; + break; + } + } + if (placed < 0) { + placed = bankUsed.length; + bankUsed.push(0); + } + bankOf[i] = placed; + bankUsed[placed] += bytes.length; + }); + const dataBanks = bankUsed.length; + const prgCount = dataBanks + 1; // + fixed bank + + // gen_data.c (fixed bank tables) + { + const lines: string[] = []; + const push = (s: string) => lines.push(s); + const cArray = (name: string, bytes: ArrayLike, type = "unsigned char"): void => { + const vals: string[] = []; + for (let i = 0; i < bytes.length; i++) vals.push(String(bytes[i])); + push(`const ${type} ${name}[] = { ${vals.join(",")} };`); + }; + push("/* gen_data.c — GENERATED by targets/nes.ts. DO NOT EDIT. */"); + push('#include "spec_gen.h"'); + push("typedef unsigned char u8; typedef unsigned short u16;"); + cArray("ps_game_header", linked.header, "u8"); + push(`const u16 ps_script_table[] = { ${linked.scriptTable.join(",")} };`); + { + const b: number[] = []; + for (const e of linked.textTable) b.push(e.blob, e.off & 0xff, (e.off >> 8) & 0xff); + cArray("ps_text_table", b, "u8"); + } + cArray("ps_map_blob", linked.mapBlobIndex, "u8"); + cArray("ps_sprite_table", spriteTable, "u8"); + blobs.forEach((_, i) => push(`extern const u8 ps_b${i}[];`)); + cArray("ps_blob_bank", bankOf, "u8"); + push(`const u8 *const ps_blob_addr[] = { ${blobs.map((_, i) => `ps_b${i}`).join(",")} };`); + push(`const u8 ps_art_blob = ${artBlob};`); + push(`const u8 ps_font_blob = ${fontBlob};`); + push(`const u8 ps_obj_blob = ${objBlob};`); + push(`const u8 ps_bg_tile_count = ${model.tileNames.length - 1};`); + push(`const u16 ps_obj_tile_bytes = ${obj.length};`); + cArray("ps_bg_pal", bgPal, "u8"); + cArray("ps_obj_pal", objPal, "u8"); + await Bun.write(join(genDir, "gen_data.c"), lines.join("\n") + "\n"); + } + + // iNES header + per-bank data .s + { + const h = [ + `; gen_header.s — GENERATED. iNES: mapper 2 (UNROM), CHR-RAM.`, + `.segment "HEADER"`, + `.byte $4e, $45, $53, $1a`, + `.byte ${prgCount}`, + `.byte 0`, + `.byte $20`, + `.byte 0, 0, 0, 0, 0, 0, 0, 0, 0`, + ]; + await Bun.write(join(genDir, "gen_header.s"), h.join("\n") + "\n"); + } + for (let b = 0; b < dataBanks; b++) { + const lines = [`; gen_bank${b}.s — GENERATED by targets/nes.ts.`, `.segment "BANK${b}"`]; + blobs.forEach((bytes, i) => { + if (bankOf[i] !== b) return; + lines.push(`.export _ps_b${i}`); + lines.push(`_ps_b${i}:`); + for (let at = 0; at < bytes.length; at += 16) { + lines.push(`.byte ${Array.from(bytes.subarray(at, at + 16)).join(",")}`); + } + if (bytes.length === 0) lines.push(".byte 0"); + }); + await Bun.write(join(genDir, `gen_bank${b}.s`), lines.join("\n") + "\n"); + } + + // ld65 config + { + const mem: string[] = [` HDR: start = $0000, size = $0010, type = ro, file = %O, fill = yes;`]; + const seg: string[] = [` HEADER: load = HDR, type = ro;`]; + for (let b = 0; b < dataBanks; b++) { + mem.push(` PRG${b}: start = $8000, size = $4000, type = ro, file = %O, fill = yes, fillval = $ff;`); + seg.push(` BANK${b}: load = PRG${b}, type = ro;`); + } + mem.push(` PRGFIX: start = $c000, size = $4000, type = ro, file = %O, fill = yes, fillval = $ff;`); + mem.push(` ZP: start = $0002, size = $00fa, type = rw;`); + mem.push(` RAM: start = $0300, size = $0400, type = rw;`); + seg.push(` CODE: load = PRGFIX, type = ro;`); + seg.push(` STARTUP: load = PRGFIX, type = ro, optional = yes;`); + seg.push(` ONCE: load = PRGFIX, type = ro, optional = yes;`); + seg.push(` RODATA: load = PRGFIX, type = ro;`); + seg.push(` DATA: load = PRGFIX, run = RAM, type = rw, define = yes;`); + seg.push(` VECTORS: load = PRGFIX, type = ro, start = $fffa;`); + seg.push(` ZEROPAGE: load = ZP, type = zp;`); + seg.push(` BSS: load = RAM, type = bss, define = yes;`); + const cfg = [ + "SYMBOLS {", + " __STACKSTART__: type = weak, value = $0700;", + " __STACKSIZE__: type = weak, value = $0100;", + "}", + `MEMORY {\n${mem.join("\n")}\n}`, + `SEGMENTS {\n${seg.join("\n")}\n}`, + "FEATURES {", + " CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = RODATA;", + " CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA;", + "}", + "", + ].join("\n"); + await Bun.write(join(genDir, "nes.cfg"), cfg); + } + + const nesDir = join(RUNTIME, "nes"); + const coreDir = join(RUNTIME, "core"); + const genInc = join(RUNTIME, "gen"); + const cc = ["-t", "none", "-O", "-DPS_TARGET_NES", `-I${genInc}`, `-I${coreDir}`, `-I${nesDir}`]; + + const objs: string[] = []; + for (const [src, name] of [ + [join(coreDir, "vm.c"), "vm"], + [join(coreDir, "rpg.c"), "rpg"], + [join(nesDir, "hal_nes.c"), "hal_nes"], + [join(genDir, "gen_data.c"), "gen_data"], + ] as const) { + const s = join(genDir, `${name}.cc65.s`); + await $`cc65 ${cc} -o ${s} ${src}`.quiet(); + const o = join(genDir, `${name}.o`); + await $`ca65 -o ${o} ${s}`.quiet(); + objs.push(o); + } + for (const asm of ["gen_header", ...Array.from({ length: dataBanks }, (_, b) => `gen_bank${b}`)]) { + const o = join(genDir, `${asm}.o`); + await $`ca65 -o ${o} ${join(genDir, `${asm}.s`)}`.quiet(); + objs.push(o); + } + { + const o = join(genDir, "crt0.o"); + await $`ca65 -o ${o} ${join(nesDir, "crt0.s")}`.quiet(); + objs.push(o); + } + + await $`ld65 -C ${join(genDir, "nes.cfg")} -o ${outRom} ${objs} ${CC65_LIB}`.quiet(); } diff --git a/static/runtime/nes/crt0.s b/static/runtime/nes/crt0.s new file mode 100644 index 0000000..7634bcd --- /dev/null +++ b/static/runtime/nes/crt0.s @@ -0,0 +1,139 @@ +; static/runtime/nes/crt0.s — NES startup + NMI for Pocket Static (ca65). +; +; The NMI owns the PPU: OAM DMA from $0200, then drains the shared VRAM +; write ring (single 3-byte entries; hi-bit entries mean "fill 8 bytes"), +; then resets the scroll/address latch. The C side only ever touches the +; PPU directly during init and map loads (rendering + NMI off). + +.import _main +.importzp sp +.import _q_hi, _q_lo, _q_val, _q_head, _q_tail, _ppuctrl, _nmi_count +.export _ps_banktable + +.segment "CODE" + +reset: + sei + cld + ldx #$40 + stx $4017 ; APU frame IRQ off + ldx #$ff + txs + inx ; x = 0 + stx $2000 ; NMI off + stx $2001 ; rendering off + stx $4010 ; DMC off + + bit $2002 +@vb1: + bit $2002 + bpl @vb1 + + ; clear RAM $0000-$07FF + lda #0 + tax +@clr: + sta $0000,x + sta $0100,x + sta $0200,x + sta $0300,x + sta $0400,x + sta $0500,x + sta $0600,x + sta $0700,x + inx + bne @clr + +@vb2: + bit $2002 + bpl @vb2 + + ; cc65 C stack at $06FF, growing down + lda #$ff + sta sp + lda #$06 + sta sp+1 + + jsr _main +@halt: + jmp @halt + +; --------------------------------------------------------------------------- +nmi: + pha + txa + pha + tya + pha + + ; OAM DMA from $0200 + lda #$00 + sta $2003 + lda #$02 + sta $4014 + + ; drain the ring: budget 32 units (single = 1 unit, fill-8 = 8) + ldy #32 +@loop: + lda _q_head + cmp _q_tail + beq @done + and #$3f + tax + lda _q_hi,x + bpl @single + ; fill-8 entry + and #$3f + sta $2006 + lda _q_lo,x + sta $2006 + lda _q_val,x + ldx #8 +@fill: + sta $2007 + dex + bne @fill + inc _q_head + tya + sec + sbc #8 + tay + beq @done + bpl @loop + bmi @done +@single: + sta $2006 + lda _q_lo,x + sta $2006 + lda _q_val,x + sta $2007 + inc _q_head + dey + bne @loop +@done: + ; reset address latch + scroll, restore control + bit $2002 + lda #0 + sta $2005 + sta $2005 + lda _ppuctrl + sta $2000 + + inc _nmi_count + + pla + tay + pla + tax + pla +irq: + rti + +; UNROM bus-conflict-safe bank latch table (write index to matching byte). +_ps_banktable: + .byte 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 + +.segment "VECTORS" + .word nmi + .word reset + .word irq diff --git a/static/runtime/nes/hal_nes.c b/static/runtime/nes/hal_nes.c new file mode 100644 index 0000000..1549d29 --- /dev/null +++ b/static/runtime/nes/hal_nes.c @@ -0,0 +1,274 @@ +/* static/runtime/nes/hal_nes.c — the NES platform layer. + * + * cc65, mapper 2 (UNROM) with CHR-RAM. The NMI (crt0.s) owns all steady- + * state PPU traffic: OAM DMA + a 64-entry VRAM write ring (single writes and + * fill-8 runs). C touches the PPU directly only with rendering + NMI off + * (init, map loads). No scrolling: maps are one nametable, and the textbox + * permanently owns tile rows 24-29 (whole attribute rows). + */ +#include "hal.h" + +#define PPU_CTRL (*(volatile u8 *)0x2000) +#define PPU_MASK (*(volatile u8 *)0x2001) +#define PPU_STATUS (*(volatile u8 *)0x2002) +#define PPU_ADDR (*(volatile u8 *)0x2006) +#define PPU_DATA (*(volatile u8 *)0x2007) +#define APU_STATUS (*(volatile u8 *)0x4015) +#define APU_P1_ENV (*(volatile u8 *)0x4000) +#define APU_P1_SWEEP (*(volatile u8 *)0x4001) +#define APU_P1_LO (*(volatile u8 *)0x4002) +#define APU_P1_HI (*(volatile u8 *)0x4003) +#define JOY1 (*(volatile u8 *)0x4016) + +#define OAM_SHADOW ((volatile u8 *)0x0200) +#define NT0 0x2000 +#define ATTR0 0x23c0 + +/* PPUCTRL shadow: NMI on, 8x16 sprites, BG table 0, inc +1, NT 0. */ +#define CTRL_ON 0xa0 + +/* generated (fixed bank) */ +extern const u8 ps_blob_bank[]; +extern const u8 *const ps_blob_addr[]; +extern const u8 ps_art_blob; +extern const u8 ps_bg_tile_count; +extern const u8 ps_font_blob; +extern const u8 ps_obj_blob; +extern const u16 ps_obj_tile_bytes; +extern const u8 ps_bg_pal[4]; /* backdrop + art subpal */ +extern const u8 ps_obj_pal[16]; /* 4 OBJ subpals */ +extern u8 ps_banktable[]; /* crt0: bus-conflict-safe latch */ + +/* shared with crt0's NMI (volatile: the NMI mutates head/count) */ +u8 q_hi[64], q_lo[64], q_val[64]; +volatile u8 q_head; +volatile u8 q_tail; +u8 ppuctrl; +volatile u8 nmi_count; + +static u8 text_rows; +static u8 restore_rows; /* box rows pending blank-restore after close */ + +const u8 *hal_blob(u8 blob) { + u8 b = ps_blob_bank[blob]; + ps_banktable[b] = b; + return ps_blob_addr[blob]; +} + +/* ring producer (NMI consumes) */ +static void qpush(u8 hi, u8 lo, u8 val) { + while ((u8)(q_tail - q_head) >= 64) {} /* ring full: the NMI will drain */ + { + u8 i = q_tail & 63; + q_hi[i] = hi; + q_lo[i] = lo; + q_val[i] = val; + } + ++q_tail; +} +#define QFILL8 0x80 + +static void nmi_wait(void) { + u8 start = nmi_count; + while (nmi_count == start) {} +} + +/* ---- init -------------------------------------------------------------------*/ +static void ppu_addr(u16 a) { + (void)PPU_STATUS; + PPU_ADDR = (u8)(a >> 8); + PPU_ADDR = (u8)a; +} + +static void upload_chr(u16 base, const u8 *src, u16 bytes) { + u16 i; + ppu_addr(base); + for (i = 0; i < bytes; i++) PPU_DATA = src[i]; +} + +void hal_init(void) { + u8 i; + const u8 *src; + + /* CHR-RAM: BG table 0 = blank + art + font(fixed base); table 1 = OBJ */ + src = hal_blob(ps_art_blob); + upload_chr(16, src, (u16)ps_bg_tile_count << 4); + src = hal_blob(ps_font_blob); + upload_chr((u16)PS_BG_FONT_BASE << 4, src, FONT_GLYPHS * 16); + src = hal_blob(ps_obj_blob); + upload_chr(0x1000, src, ps_obj_tile_bytes); + + /* palettes */ + ppu_addr(0x3f00); + for (i = 0; i < 4; i++) PPU_DATA = ps_bg_pal[i]; + for (i = 0; i < 8; i++) PPU_DATA = 0x0f; /* subpal 1,2 unused */ + PPU_DATA = ps_bg_pal[0]; + PPU_DATA = 0x30; /* white */ + PPU_DATA = 0x2d; /* grey */ + PPU_DATA = 0x0f; /* black — subpal 3 = textbox */ + ppu_addr(0x3f10); + for (i = 0; i < 16; i++) PPU_DATA = ps_obj_pal[i]; + + /* OAM shadow off-screen */ + for (i = 0; i < 64; i++) OAM_SHADOW[(u8)(i << 2)] = 0xff; + + APU_STATUS = 0x01; /* pulse 1 on */ + + ppuctrl = CTRL_ON; + PPU_CTRL = CTRL_ON; + PPU_MASK = 0x1e; /* BG + sprites on, left column shown */ +} + +/* ---- frame -------------------------------------------------------------------*/ +void hal_frame(void) { + nmi_wait(); +} + +u8 hal_keys(void) { + u8 i, v, out = 0; + /* standard shift order: A,B,Select,Start,Up,Down,Left,Right */ + static const u8 MAP[8] = { 0x01, 0x02, 0x04, 0x08, 0x40, 0x80, 0x20, 0x10 }; + JOY1 = 1; + JOY1 = 0; + for (i = 0; i < 8; i++) { + v = JOY1; + if (v & 1) out |= MAP[i]; + } + return out; +} + +/* ---- video ---------------------------------------------------------------------*/ +void hal_map_draw(u8 mapBlob, u8 w, u8 h) { + const u8 *m; + const u8 *row; + u8 x, y; + + nmi_wait(); + PPU_CTRL = 0; /* NMI off */ + PPU_MASK = 0; /* rendering off */ + + m = hal_blob(mapBlob); + row = m + (u16)(m[8] | ((u16)m[9] << 8)); + ppu_addr(NT0); + for (y = 0; y < 30; y++) { + for (x = 0; x < 32; x++) { + u8 e = 0; + if (x < w && y < h) e = row[x]; + PPU_DATA = e; + } + if (y < h) row += w; + } + /* attributes: everything subpal 0 */ + ppu_addr(ATTR0); + for (x = 0; x < 64; x++) PPU_DATA = 0; + + q_head = 0; + q_tail = 0; + restore_rows = 0; + + ppu_addr(0x2000); /* leave the address away from palette space */ + (void)PPU_STATUS; + PPU_CTRL = ppuctrl; + PPU_MASK = 0x1e; +} + +void hal_scroll(u16 px, u16 py) { + (void)px; + (void)py; +} + +void hal_obj(u8 slot, s16 px, s16 py, u8 spriteId, u8 dir, u8 frame, u8 hidden) { + volatile u8 *o = OAM_SHADOW + ((u8)(slot << 3)); /* 2 hw sprites */ + const u8 *sp = ps_sprite_table + ((u16)spriteId << 2); + u16 tile_base = (u16)(sp[0] | ((u16)sp[1] << 8)); + u8 frames = sp[2]; + u8 pal = sp[3]; + u8 flip = 0; + u8 dblock = dir; + u8 pair; + + if (hidden || px <= -16 || py <= -16 || px >= 256 || py >= 240) { + o[0] = 0xff; + o[4] = 0xff; + return; + } + if (dir == DIR_LEFT) { + dblock = DIR_RIGHT; + flip = 0x40; + } + if (frame >= frames) frame = 0; + /* frame block = 4 tiles [Ltop,Lbot,Rtop,Rbot] in pattern table 1. + * 8x16 OAM tile byte: bit0 selects the table (1), bits 1-7 pick the even + * tile of the pair — so left column = t|1, right column = (t+2)|1. */ + pair = frames == 2 ? (u8)(dblock << 1) : dblock; /* dblock*frames, no mul */ + { + u8 t = (u8)((u8)tile_base + ((u8)(pair + frame) << 2)); + /* NES renders sprites one line late; py 0 clamps (255 would hide it) */ + u8 oy = py > 0 ? (u8)(py - 1) : 0; + o[0] = oy; + o[1] = (u8)(t | 1); + o[2] = (u8)(pal | flip); + o[3] = flip ? (u8)(px + 8) : (u8)px; + o[4] = oy; + o[5] = (u8)((t + 2) | 1); + o[6] = (u8)(pal | flip); + o[7] = flip ? (u8)px : (u8)(px + 8); + } +} + +/* ---- textbox ----------------------------------------------------------------------- + * Box = tile rows 24..29 (attr rows 6-7). Text row r -> tile row 25+r, + * cols 2..29. Open paints paper fills + attr; close restores blank fills. + */ +static void box_fills(u8 tile, u8 attr) { + u8 y, q; + for (y = 24; y < 30; y++) { + u16 base = NT0 + ((u16)y << 5); + for (q = 0; q < 4; q++) { + qpush((u8)((base >> 8) | QFILL8), (u8)(base & 0xff), tile); + base += 8; + } + } + { + u16 a = ATTR0 + 48; + for (q = 0; q < 2; q++) { + qpush((u8)((a >> 8) | QFILL8), (u8)(a & 0xff), attr); + a += 8; + } + } +} + +void hal_text_open(u8 rows) { + text_rows = rows; + box_fills(PS_BG_FONT_BASE, 0xff); /* paper + subpal 3 */ +} + +void hal_text_close(void) { + box_fills(0, 0x00); /* blank + subpal 0 (maps never reach these rows) */ +} + +void hal_text_glyph(u8 col, u8 row, u8 glyph) { + u16 a = NT0 + ((u16)(25 + row) << 5) + 2 + col; + qpush((u8)(a >> 8), (u8)a, (u8)(PS_BG_FONT_BASE + glyph)); +} + +/* ---- sfx ------------------------------------------------------------------------------*/ +void hal_sfx(u8 id) { + static const u8 env[5] = { 0x86, 0x84, 0x83, 0x86, 0x87 }; + static const u8 lo[5] = { 0x60, 0xa0, 0xf0, 0x70, 0x50 }; + if (id > 4) return; + APU_P1_ENV = env[id]; + APU_P1_SWEEP = 0x08; + APU_P1_LO = lo[id]; + APU_P1_HI = 0x08; +} + +/* ---- entry ----------------------------------------------------------------------------*/ +void main(void) { + hal_init(); + rpg_boot(); + for (;;) { + rpg_tick(); + hal_frame(); + } +} diff --git a/static/spec/isa.ts b/static/spec/isa.ts index 83f0d70..c1e5b13 100644 --- a/static/spec/isa.ts +++ b/static/spec/isa.ts @@ -108,7 +108,10 @@ export const TARGETS: Record = { objTiles: 256, // pattern table 1 debugAddr: 0x0700, // top page of the 2 KB CPU RAM maxMapW: 32, - maxMapH: 30, // one nametable + // One nametable is 32x30, but the textbox permanently owns tile rows + // 24-29 (attribute cells are 16px — the box must own whole attr rows), + // so maps stop at 24 and closing the box restores blank fills only. + maxMapH: 24, scrolls: false, ext: ".nes", }, diff --git a/static/test/harness/nes_runner.ts b/static/test/harness/nes_runner.ts new file mode 100644 index 0000000..e50c0df --- /dev/null +++ b/static/test/harness/nes_runner.ts @@ -0,0 +1,103 @@ +#!/usr/bin/env bun +// static/test/harness/nes_runner.ts — headless NES scenario driver on jsnes. +// +// bun nes_runner.ts +// +// Same line protocol as mgba_runner, with one deliberate difference: A/P +// counts are ENGINE TICKS, not video frames. cc65 code can take more than a +// video frame per rpg_tick, so the runner paces on the debug block's FRAME +// counter — scenarios stay tick-accurate at any emulation speed. + +import { Controller, NES } from "jsnes"; +import { DBG, KEYS, TARGETS } from "../../spec/isa.ts"; + +const [rom, scenarioPath] = process.argv.slice(2); +if (!rom || !scenarioPath) { + console.log(JSON.stringify({ ok: false, error: "usage: nes_runner " })); + process.exit(2); +} + +let frameBuffer: number[] | null = null; +const nes = new NES({ + onFrame: (buf: number[]) => { + frameBuffer = buf; + }, + onAudioSample: () => {}, +}); + +const bytes = new Uint8Array(await Bun.file(rom).arrayBuffer()); +nes.loadROM(Buffer.from(bytes).toString("latin1")); + +const DEBUG = TARGETS.nes.debugAddr; +const mem = (addr: number): number => nes.cpu.mem[addr] & 0xff; +const tickCount = (): number => + mem(DEBUG + DBG.FRAME) | + (mem(DEBUG + DBG.FRAME + 1) << 8) | + (mem(DEBUG + DBG.FRAME + 2) << 16) | + (mem(DEBUG + DBG.FRAME + 3) << 24); + +function advanceTicks(n: number): void { + const target = tickCount() + n; + let guard = n * 12 + 1200; // cc65 headroom: a tick may span several frames + while (tickCount() < target && guard-- > 0) nes.frame(); + if (guard <= 0) throw new Error(`tick advance stalled (wanted ${n} ticks)`); +} + +const BUTTONS: [number, number][] = [ + [KEYS.A, Controller.BUTTON_A], + [KEYS.B, Controller.BUTTON_B], + [KEYS.SELECT, Controller.BUTTON_SELECT], + [KEYS.START, Controller.BUTTON_START], + [KEYS.UP, Controller.BUTTON_UP], + [KEYS.DOWN, Controller.BUTTON_DOWN], + [KEYS.LEFT, Controller.BUTTON_LEFT], + [KEYS.RIGHT, Controller.BUTTON_RIGHT], +]; + +async function screenshot(path: string): Promise { + if (!frameBuffer) return; + const w = 256; + const h = 240; + const out = new Uint8Array(15 + w * h * 3); + const header = `P6\n${w} ${h}\n255\n`; + out.set(new TextEncoder().encode(header), 0); + let at = header.length; + for (let i = 0; i < w * h; i++) { + const p = frameBuffer[i]; + out[at++] = p & 0xff; + out[at++] = (p >> 8) & 0xff; + out[at++] = (p >> 16) & 0xff; + } + await Bun.write(path, out.subarray(0, at)); +} + +const reads: Record = {}; +const lines = (await Bun.file(scenarioPath).text()).split("\n"); +try { + for (const line of lines) { + const op = line[0]; + if (op === "A") { + advanceTicks(Number(line.slice(1).trim())); + } else if (op === "P") { + const [maskHex, hold, release] = line.slice(1).trim().split(/\s+/); + const mask = parseInt(maskHex, 16); + for (const [k, btn] of BUTTONS) if (mask & k) nes.buttonDown(1, btn); + advanceTicks(Number(hold)); + for (const [k, btn] of BUTTONS) if (mask & k) nes.buttonUp(1, btn); + advanceTicks(Number(release)); + } else if (op === "R") { + const [name, addrHex, size] = line.slice(1).trim().split(/\s+/); + const addr = parseInt(addrHex, 16); + let v = mem(addr); + if (Number(size) >= 2) v |= mem(addr + 1) << 8; + if (Number(size) === 4) v = (v | (mem(addr + 2) << 16) | (mem(addr + 3) << 24)) >>> 0; + reads[name] = v; + } else if (op === "S") { + await screenshot(line.slice(1).trim()); + } + } + console.log(JSON.stringify({ ok: true, reads })); +} catch (e) { + console.log(JSON.stringify({ ok: false, error: String(e), reads })); + process.exit(1); +} From 7bf3fb3fcabab523660d1523875cd42d5e08093f Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Fri, 17 Jul 2026 18:26:06 +0800 Subject: [PATCH 4/6] =?UTF-8?q?feat(static):=20BOARDROOM=20=E2=80=94=20the?= =?UTF-8?q?=20OpenAI=20board=20crisis=20as=20a=20three-console=20RPG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Five days in November 2023, playable: the Vegas call, the guest badge, Shear's 72 hours, the Microsoft feint, 743 signatures, Ilya's flip, and a final negotiation battle against THE BOARD (rpg/battle.ts — a whole battle system as compiler macros, zero new runtime). - games/boardroom: game.ts + deterministic pixel-people art + dossier.md (verified quotes/dates; original parody dialogue) - rpg/battle.ts: reusable battle DSL library (macro inlining + static unroll + FMT damage lines) - compiler: helper macros importable across modules; registry survives cached asset modules - story E2E: the reference VM plays the whole beat list and its event log becomes the console input script — 17 checkpoints x 3 consoles, 51/51 Co-Authored-By: Claude Fable 5 --- static/01_vegas | Bin 0 -> 184335 bytes static/02_boardroom | Bin 0 -> 184335 bytes static/03_satya | Bin 0 -> 184335 bytes static/04_ilya | Bin 0 -> 184335 bytes static/05_end | Bin 0 -> 184335 bytes static/compiler/index.ts | 3 +- static/compiler/script.ts | 8 +- static/compiler/sites.ts | 55 ++++ static/compiler/targets/nes.ts | 19 +- static/games/boardroom/assets.ts | 210 +++++++++++++ static/games/boardroom/dossier.md | 42 +++ static/games/boardroom/game.ts | 458 +++++++++++++++++++++++++++++ static/games/boardroom/test/e2e.ts | 253 ++++++++++++++++ static/rpg/battle.ts | 92 ++++++ static/rpg/dsl.ts | 18 +- 15 files changed, 1144 insertions(+), 14 deletions(-) create mode 100644 static/01_vegas create mode 100644 static/02_boardroom create mode 100644 static/03_satya create mode 100644 static/04_ilya create mode 100644 static/05_end create mode 100644 static/games/boardroom/assets.ts create mode 100644 static/games/boardroom/dossier.md create mode 100644 static/games/boardroom/game.ts create mode 100644 static/games/boardroom/test/e2e.ts create mode 100644 static/rpg/battle.ts diff --git a/static/01_vegas b/static/01_vegas new file mode 100644 index 0000000000000000000000000000000000000000..6dff08bf00c52cfd2ae49bf886c8e7b3ee2d1d9a GIT binary patch literal 184335 zcmeI!L9X0H5C-74&Wa;&15iYA4#e>|1q)8YMOZ#cYE)|4U85*GkH)UgvXXX9PuunN zKTdxA`swqRuRnhN<>&bO%cnO70RjXF5FkK+009C72oNAZfB*pk1PBly&_>|zKi^uN zKm7EzJ=<)!M*ky_;g3}0cpluWz72mA9X$o+sCO94f6ts(T`!rx+1oz5%f95lNN;Yd@5bdPaLc;$>Z|AO>pF8gUXOYC{@3qu&S@EyoUqKlN`3BV9!o+`fz0hZIEFu?5+BVo zFE`FcmO;{*OO_h|Tyd zY`=1q;x_zIbo3O6+{W%N>7C#C$MJFg`1&R4@sQiI=kDuzNq$})V}FB}e{{DEe-s@( z1v2nCh%m(Xx8lfYIT-WvG6%0&kEhz6J$GN%8P|DGWdGmtJo9qnZTO?;=qZo^jtq=( z{6FV${$oPS%=x*(7`%8r9&da0+~(7U;caMyz2Ux|9e;Dze+;SdZzvHYcr?i;M?af zGap}m$NJ+d%d*uvF>QPH+m@Gz2yIl%VXZoxXU-Ld3=~rk%XQC5t|6WHas6ypKmd*IgjTDIJF*& zZ_l2)uj@H@9md=6N72z!;F$Rc!?75ZkE(AM|G@PhKWBWpJ$vrHuB$ZOwZ0916dgSU zGUt(j9M6NB)#blu&a1BHsCO94f0cxu^(FH+d)sGs*_ZtH%z4#yCZx$g{;MSPtVitg z-MIV&ZdsTAo;k0&UNV3COZl&o(6fFF{4HPm(dOt&{(I)U>blCq+4Vo(-?!)4_pR2i zeAMqPQ03w5`ZoMgJo~=Y`uE;t-Bkir9?q`If3+j(&lEU2=hga4{$tvxRP)cSKhxa3 zUPs{UTvh8Y`OnL0{@L}{*%43jOo6j=Rjr?aUk26uv+K_^cdyqGI6GI>`b+HdvYLN( z{dIQ4lRQ)4>|9mrXW*AXHUI4TGtJ$L009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U XAV7cs0RjXF5FkK+009C7zFpuSH?JoG literal 0 HcmV?d00001 diff --git a/static/02_boardroom b/static/02_boardroom new file mode 100644 index 0000000000000000000000000000000000000000..804d51a1317b458ec884b3aa6bda2c9401fc08d2 GIT binary patch literal 184335 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 zg+LT2Kj+-8#CMGe5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ l009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjYy!2hfXLQwz! literal 0 HcmV?d00001 diff --git a/static/04_ilya b/static/04_ilya new file mode 100644 index 0000000000000000000000000000000000000000..07740638dc0d6407a42125be316ce669bf37f382 GIT binary patch literal 184335 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 Q0RjXF5FkK+z#4&n0p#8hJOBUy literal 0 HcmV?d00001 diff --git a/static/05_end b/static/05_end new file mode 100644 index 0000000000000000000000000000000000000000..d3dd8a83060b1be0603acd9e6c1cc99acc66b8cc GIT binary patch literal 184335 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 literal 0 HcmV?d00001 diff --git a/static/compiler/index.ts b/static/compiler/index.ts index 97c7c4e..80e6f0f 100644 --- a/static/compiler/index.ts +++ b/static/compiler/index.ts @@ -14,7 +14,7 @@ import { evaluateGame } from "./evaluate.ts"; import { linkGame, type LinkedGame } from "./link.ts"; import { buildModel, patchFixups } from "./model.ts"; import { compileScripts } from "./script.ts"; -import type { Sites } from "./sites.ts"; +import { resolveHelperImports, type Sites } from "./sites.ts"; export interface DebugInfo { target: TargetName; @@ -36,6 +36,7 @@ export interface CompileOutput { export async function compileGame(entryPath: string, target: TargetName): Promise { const { sites, game, registry } = await evaluateGame(entryPath); + await resolveHelperImports(sites, entryPath); const ctx = new Ctx(target); const scripts = compileScripts(sites, ctx); const model = buildModel(game, registry, ctx, TARGETS[target]); diff --git a/static/compiler/script.ts b/static/compiler/script.ts index 84b70ec..f8d8fa2 100644 --- a/static/compiler/script.ts +++ b/static/compiler/script.ts @@ -39,7 +39,8 @@ class Scope { } export class ScriptError extends Error { - constructor(node: ts.Node, sf: ts.SourceFile, msg: string) { + constructor(node: ts.Node, fallback: ts.SourceFile, msg: string) { + const sf = node.getSourceFile() ?? fallback; const { line, character } = sf.getLineAndCharacterOfPosition(node.getStart(sf)); super( `${sf.fileName}:${line + 1}:${character + 1}: ${msg}\n near: ${node.getText(sf).slice(0, 90)}`, @@ -93,8 +94,9 @@ export class ScriptCompiler { return new ScriptError(node, this.sf, msg); } private where(node: ts.Node): string { - const { line } = this.sf.getLineAndCharacterOfPosition(node.getStart(this.sf)); - return `${this.sf.fileName}:${line + 1}`; + const sf = node.getSourceFile() ?? this.sf; + const { line } = sf.getLineAndCharacterOfPosition(node.getStart(sf)); + return `${sf.fileName}:${line + 1}`; } // --- emission helpers ------------------------------------------------------ diff --git a/static/compiler/sites.ts b/static/compiler/sites.ts index 9a2738f..44adfda 100644 --- a/static/compiler/sites.ts +++ b/static/compiler/sites.ts @@ -25,6 +25,61 @@ export function parseSource(sourceText: string, fileName = "game.ts"): ts.Source return ts.createSourceFile(fileName, sourceText, ts.ScriptTarget.ES2022, true); } +/** + * Macros may live in imported modules (e.g. @pocketjs/static/rpg/battle): + * parse each imported helper module and merge its top-level generator + * functions into sites.helpers. AST-only — helper modules never execute. + */ +export async function resolveHelperImports(sites: Sites, entryPath: string): Promise { + const { dirname, join, resolve } = await import("node:path"); + const seen = new Set(); + const scan = async (file: ts.SourceFile, filePath: string): Promise => { + const imports: string[] = []; + ts.forEachChild(file, (node) => { + if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) { + imports.push(node.moduleSpecifier.text); + } + }); + for (const spec of imports) { + let target: string | undefined; + if (spec === "@pocketjs/static/rpg/battle") { + target = resolve(import.meta.dir, "..", "rpg", "battle.ts"); + } else if (spec.startsWith("./") || spec.startsWith("../")) { + target = resolve(dirname(filePath), spec.endsWith(".ts") ? spec : `${spec}.ts`); + } + if (!target || seen.has(target)) continue; + seen.add(target); + const text = await Bun.file(target).text().catch(() => null); + if (text === null) continue; + const mod = parseSource(text, target); + const visit = (node: ts.Node): void => { + if (ts.isFunctionDeclaration(node) && node.asteriskToken && node.name) { + if (!sites.helpers.has(node.name.text)) sites.helpers.set(node.name.text, node); + return; + } + if (ts.isVariableStatement(node)) { + for (const d of node.declarationList.declarations) { + if ( + ts.isIdentifier(d.name) && + d.initializer && + ts.isFunctionExpression(d.initializer) && + d.initializer.asteriskToken && + !sites.helpers.has(d.name.text) + ) { + sites.helpers.set(d.name.text, d.initializer); + } + } + return; + } + }; + ts.forEachChild(mod, visit); + await scan(mod, target); + } + }; + await scan(sites.file, entryPath); + void join; +} + const isScriptCall = (node: ts.Node): node is ts.CallExpression => ts.isCallExpression(node) && ts.isIdentifier(node.expression) && diff --git a/static/compiler/targets/nes.ts b/static/compiler/targets/nes.ts index abdef7a..32131eb 100644 --- a/static/compiler/targets/nes.ts +++ b/static/compiler/targets/nes.ts @@ -46,15 +46,22 @@ export function encodeNesArt(linked: LinkedGame): { const red = nesReduce(sp.palette, backdrop); const key = red.subpal.join(","); let slot = objSubpals.indexOf(key); - if (slot < 0) { - if (objSubpals.length >= 4) { - throw new Error( - `nes: more than 4 distinct sprite palettes (sprite "${sp.name}") — share palettes across sprites`, - ); - } + if (slot < 0 && objSubpals.length < 4) { slot = objSubpals.length; objSubpals.push(key); objPal.push(...red.subpal); + } else if (slot < 0) { + // 4 hardware OBJ subpalettes: extra sprites adopt the nearest one. + let bestD = Infinity; + for (let i = 0; i < objSubpals.length; i++) { + const pal = objSubpals[i].split(",").map(Number); + let d = 0; + for (let c = 1; c < 4; c++) d += Math.abs(pal[c] - red.subpal[c]); + if (d < bestD) { + bestD = d; + slot = i; + } + } } const framesPerDir = sp.facings.down.length; spriteTable.push(tileBase & 0xff, (tileBase >> 8) & 0xff, framesPerDir, slot); diff --git a/static/games/boardroom/assets.ts b/static/games/boardroom/assets.ts new file mode 100644 index 0000000..cb41d88 --- /dev/null +++ b/static/games/boardroom/assets.ts @@ -0,0 +1,210 @@ +// static/games/boardroom/assets.ts — BOARDROOM art. +// +// Declaration-zone TypeScript: a tiny deterministic pixel-person generator +// (16x16 walkers, 3 facings, 2 frames) plus a hand-tiled office tileset. +// Palette indices are authored, so every target encoder gets clean input. +// If a generated imagegen sheet lands later, it replaces THIS module while +// keeping tile/sprite names stable. + +import { defineSprite, defineTileset, type Rgb, type SpriteDecl } from "@pocketjs/static/rpg"; + +// --------------------------------------------------------------------------- +// Office tileset. Palette (16): institutional SF-office grey-blue + accents. +// --------------------------------------------------------------------------- +const P = { + bg: [18, 20, 26] as Rgb, // 0 backdrop + floor: [196, 198, 206] as Rgb, // 1 light office floor + floorShade: [168, 170, 180] as Rgb, // 2 + wall: [72, 76, 92] as Rgb, // 3 + wallDark: [48, 52, 64] as Rgb, // 4 + wood: [148, 110, 70] as Rgb, // 5 desk wood + woodDark: [104, 76, 48] as Rgb, // 6 + screen: [120, 200, 255] as Rgb, // 7 laptop glow + green: [72, 148, 92] as Rgb, // 8 plant + greenDark: [44, 96, 60] as Rgb, // 9 + door: [232, 220, 200] as Rgb, // 10 + carpet: [92, 112, 152] as Rgb, // 11 boardroom carpet + carpetDark: [72, 88, 124] as Rgb, // 12 + glass: [156, 212, 232] as Rgb, // 13 window + accent: [214, 120, 60] as Rgb, // 14 warm accent (chair) + ink: [28, 30, 38] as Rgb, // 15 outline +}; +const PALETTE: Rgb[] = Object.values(P); + +// tile helper: 8 strings of 8 chars using the nibble alphabet below +const T = (...rows: string[]) => ({ px: rows }); + +export const office = defineTileset("office", { + palette: PALETTE, + tiles: { + floor: T("11111111", "11111112", "11111111", "11111111", "11121111", "11111111", "11111111", "21111111"), + carpet: T("bbbbbbbb", "bbbcbbbb", "bbbbbbbb", "bbbbbcbb", "bbbbbbbb", "bcbbbbbb", "bbbbbbbb", "bbbbbbcb"), + wall: { + px: ["33333333", "34444443", "34444443", "33333333", "44444444", "43333334", "43333334", "44444444"], + solid: true, + }, + wallTop: { px: ["ffffffff", "33333333", "33333333", "34444443", "34444443", "33333333", "33333333", "ffffffff"], solid: true }, + window: { + px: ["33333333", "3dddddd3", "3dddddd3", "3dd11dd3", "3dddddd3", "3dddddd3", "33333333", "44444444"], + solid: true, + }, + desk: { + px: ["ffffffff", "f555555f", "f565655f", "f555555f", "f566665f", "f555555f", "ffffffff", "11111111"], + solid: true, + }, + laptop: { + px: ["ffffffff", "f555555f", "f577775f", "f577775f", "f555555f", "f556555f", "ffffffff", "11111111"], + solid: true, + }, + table: { + px: ["ffffffff", "f555555f", "f555555f", "f556555f", "f555555f", "f555655f", "f555555f", "ffffffff"], + solid: true, + }, + chair: T("bbbbbbbb", "bfeeeefb", "bfeeeefb", "bfeeeefb", "bffffffb", "bbfbbfbb", "bbbbbbbb", "bbbbbbbb"), + door: T("aaaaaaaa", "aaaaaaaa", "aaaaaaaa", "aaaaafaa", "aaaaaaaa", "aaaaaaaa", "aaaaaaaa", "aaaaaaaa"), + plant: { + px: ["11111111", "11898111", "18999811", "11898911", "11989111", "111f1111", "11fff111", "11111111"], + solid: true, + }, + server: { + px: ["ffffffff", "f444444f", "f477774f", "f444444f", "f477774f", "f444444f", "f477774f", "ffffffff"], + solid: true, + }, + }, +}); + +// --------------------------------------------------------------------------- +// Pixel people. Shared skin/shadow slots + per-person hair & clothes. +// Sprite palette: 0 transparent, 1 skin, 2 hair, 3 shirt, 4 shirt shade, +// 5 legs, 6 ink, 7 skin shade. +// NES budget: 4 distinct OBJ palettes — people are grouped into wardrobe +// palettes (see WARDROBE below) so the reducer dedupes cleanly. +// --------------------------------------------------------------------------- +interface Person { + name: string; + skin: Rgb; + hair: Rgb; + shirt: Rgb; + shirtShade: Rgb; + legs: Rgb; + /** bald-ish hairline (ilya, satya) */ + bald?: boolean; +} + +const row16 = (s: string): string => { + if (s.length !== 16) throw new Error(`row16: ${s.length}`); + return s; +}; + +/** 16x16 walker frames from a compact template. Facings: down/up/right. */ +function personFrames(p: Person): SpriteDecl["facings"] { + const hairTop = p.bald ? "0000011111100000" : "0000112222110000"; + const hairTopUp = "0000112222110000"; // back of head always has hair color + const hairRow = p.bald ? "0001111111111000".replace(/1/g, "1") : "0001222222211000"; + const hairRowUp = "0001222222221000"; + const faceRow = "0001211111121000"; + const eyeRow = "0001161111611000"; + const mouthRow = "0001111771111000".replace(/7/g, "1"); + const chinRow = "0000111111110000"; + const bodyTop = "0000333333330000"; + const bodyMid = "0003333443333000"; + const bodyArms = "0013333443333100"; + const bodyLow = "0003334433433000"; + const hips = "0000555555550000"; + const legsA = "0000550000550000"; + const legsB = "0000055005500000"; + const feetA = "0000660000660000"; + const feetB = "0000066006600000"; + + const down = (legs: string, feet: string) => [ + row16("0000000000000000"), + row16(hairTop), + row16(hairRow), + row16(faceRow), + row16(eyeRow), + row16(mouthRow), + row16(chinRow), + row16(bodyTop), + row16(bodyMid), + row16(bodyArms), + row16(bodyLow), + row16(hips), + row16(legs), + row16(legs), + row16(feet), + row16("0000000000000000"), + ]; + const up = (legs: string, feet: string) => [ + row16("0000000000000000"), + row16(hairTopUp), + row16(hairRowUp), + row16(hairRowUp), + row16("0001222222221000"), + row16("0001122222211000"), + row16(chinRow), + row16(bodyTop), + row16(bodyMid), + row16(bodyArms), + row16(bodyLow), + row16(hips), + row16(legs), + row16(legs), + row16(feet), + row16("0000000000000000"), + ]; + const right = (legs: string, feet: string) => [ + row16("0000000000000000"), + row16(p.bald ? "0000011111000000" : "0000112221100000"), + row16(p.bald ? "0000111111100000" : "0001222221100000"), + row16("0000112111600000"), + row16("0000111111100000"), + row16("0000011111100000"), + row16("0000011110000000"), + row16("0000333333000000"), + row16("0000333334300000"), + row16("0000133333100000"), + row16("0000333433000000"), + row16("0000055550000000"), + row16(legs), + row16(legs), + row16(feet), + row16("0000000000000000"), + ]; + return { + down: [down(legsA, feetA), down(legsB, feetB)], + up: [up(legsA, feetA), up(legsB, feetB)], + right: [right("0000055500000000", "0000066000000000"), right("0000550550000000", "0000660066000000")], + }; +} + +const person = (p: Person): SpriteDecl => + defineSprite(p.name, { + palette: [ + [0, 0, 0], + p.skin, + p.hair, + p.shirt, + p.shirtShade, + p.legs, + [24, 24, 28], + [200, 160, 130], + ], + facings: personFrames(p), + }); + +// Wardrobe palettes (shared per NES OBJ-palette group) +const SKIN: Rgb = [236, 188, 152]; +const SKIN2: Rgb = [188, 136, 100]; +const GREY = { shirt: [150, 150, 160] as Rgb, shirtShade: [110, 110, 120] as Rgb, legs: [70, 74, 90] as Rgb }; +const DARK = { shirt: [64, 68, 84] as Rgb, shirtShade: [44, 46, 58] as Rgb, legs: [38, 40, 50] as Rgb }; +const WARM = { shirt: [186, 88, 66] as Rgb, shirtShade: [140, 62, 46] as Rgb, legs: [60, 56, 70] as Rgb }; +const BLUE = { shirt: [66, 112, 186] as Rgb, shirtShade: [46, 80, 140] as Rgb, legs: [40, 48, 72] as Rgb }; + +export const sam = person({ name: "sam", skin: SKIN, hair: [140, 104, 60], ...GREY }); +export const employee = person({ name: "employee", skin: SKIN, hair: [80, 60, 40], ...GREY }); +export const ilya = person({ name: "ilya", skin: SKIN, hair: [90, 80, 70], bald: true, ...DARK }); +export const board = person({ name: "board", skin: SKIN, hair: [50, 44, 40], ...DARK }); +export const greg = person({ name: "greg", skin: SKIN, hair: [104, 78, 46], ...WARM }); +export const mira = person({ name: "mira", skin: SKIN, hair: [58, 44, 36], ...WARM }); +export const satya = person({ name: "satya", skin: SKIN2, hair: [40, 36, 34], bald: true, ...BLUE }); +export const emmett = person({ name: "emmett", skin: SKIN, hair: [150, 110, 60], ...BLUE }); diff --git a/static/games/boardroom/dossier.md b/static/games/boardroom/dossier.md new file mode 100644 index 0000000..657f242 --- /dev/null +++ b/static/games/boardroom/dossier.md @@ -0,0 +1,42 @@ +# BOARDROOM — research dossier + +The game adapts the November 2023 OpenAI board crisis. Dates, sequence, and +every quoted line below are from the public record; the rest of the game's +dialogue is original parody. Corrections welcome — the game treats this file +as its source of truth. + +## Timeline the game follows + +| Beat in game | Fact | Source | +|---|---|---| +| The Meet call | Fri Nov 17, ~noon PT: Sam Altman, in a Las Vegas hotel for the F1 Grand Prix weekend, is fired on a Google Meet by the board (Sutskever, D'Angelo, Toner, McCauley); he later says he was "confused beyond belief" | WSJ/Yahoo; Brockman's timeline thread | +| "not consistently candid" | The OpenAI announcement: he "was not consistently candid in his communications with the board" | OpenAI blog, Nov 17 | +| Greg's exit | Brockman stripped of the chair at 12:23 PM ("keeping his role"), quits that evening: "based on today's news, i quit"; three senior researchers follow | Brockman on X; TechCrunch | +| One minute of warning | Microsoft was told ~1 minute before publication | Axios timeline | +| Mira interim | Murati, told the night before, becomes interim CEO | Brockman thread | +| Guest badge | Sun Nov 19: Altman visits HQ — "first and last time i ever wear one of these" | sama on X / CNN | +| Lightcap memo | Firing was "not malfeasance" but "a breakdown in communication" | Axios, Nov 18 | +| Emmett Shear | Appointed interim CEO near midnight Sunday — third CEO in three days; his statement: the board "did NOT remove Sam over any specific disagreement on safety", 30-day plan incl. an independent investigator | eshear on X; CNBC | +| Microsoft offer | Nadella announces Sam + Greg joining "a new advanced AI research team"; "we remain committed to our partnership with OpenAI"; Sam replies "one team, one mission" | satyanadella on X; CNN | +| The letter | Employee letter demanding the board resign: 505 signatures at release, ~743 of ~770 eventually; "unable to work for... people that lack competence, judgement and care"; Microsoft guaranteed jobs for all | CNN; Axios | +| Heart emojis | Murati: "OpenAI is nothing without its people"; mass reposts + heart emojis as a loyalty census | miramurati on X; Fortune | +| Ilya flips | Nov 20, ~5 AM: "I deeply regret my participation in the board's actions. I never intended to harm OpenAI." — after a tearful in-office plea by Anna Brockman, whose wedding Ilya had officiated | ilyasut on X; WSJ | +| Tender offer stakes | Thrive-led tender at ~$86B valuation hung over the weekend; back on track Nov 30 | CNBC | +| The agreement | Nov 21, ~10 PM: "agreement in principle" — Altman returns as CEO, new initial board Bret Taylor (chair), Larry Summers, Adam D'Angelo; Toner/McCauley/Sutskever leave the board | OpenAI; SiliconANGLE | +| Epilogue | Nov 29 official; Microsoft gets a non-voting observer; Mar 2024 WilmerHale review: a breakdown of trust, not safety or products; total ~106 hours | TechCrunch; CNN | + +## Deliberately omitted + +- Q* rumors (Reuters Nov 22): disputed, later largely decoupled from the + firing — the game does not use them. +- Toner's fuller 2024 account (the ChatGPT-launch-on-Twitter line, the FTC + argument): post-window; Helen's single in-game line sticks to the + documented Oct 2023 paper dispute. +- The Anthropic merger feeler: confirmed only later via deposition; skipped. + +## Fairness notes + +Public figures, newsworthy events, short verbatim quotes with in-game +attribution; everything else is invented comedy, and the game says so on the +title card. No real conversation is reconstructed as if verbatim; the battle +is a menu, not a deposition. diff --git a/static/games/boardroom/game.ts b/static/games/boardroom/game.ts new file mode 100644 index 0000000..c688721 --- /dev/null +++ b/static/games/boardroom/game.ts @@ -0,0 +1,458 @@ +// static/games/boardroom/game.ts — BOARDROOM +// +// Five days in November 2023, playable. You are Sam Altman; the speedrun +// category is "fired to rehired". A satirical adaptation of the OpenAI board +// crisis — events, dates and quoted lines follow the public record +// (see dossier.md for sources); all other dialogue is original parody. +// +// One TypeScript module in, three cartridges out: GBA, Game Boy, NES. + +import { defineGame, defineMap, npc, script, trigger, warp, type Flags, type Ops, type Vars } from "@pocketjs/static/rpg"; +import { battle } from "@pocketjs/static/rpg/battle"; +import { board, emmett, employee, greg, ilya, mira, office, sam, satya } from "./assets.ts"; + +// --------------------------------------------------------------------------- +// Chapter 1 — THE CALL (Fri Nov 17, a Las Vegas hotel room) +// --------------------------------------------------------------------------- +const TheCall = script(function* (s, v, f) { + yield* s.lock(); + yield* s.sfx("deny"); + yield* s.say("FRIDAY, NOV 17. LAS VEGAS. F1 weekend. You are SAM ALTMAN, and your laptop is ringing at noon."); + yield* s.say("A Google Meet. The whole board, minus Greg. ILYA does the talking."); + yield* s.say("ILYA: Sam, the board has reviewed. You were, quote, not consistently candid in your communications."); + yield* s.say("ILYA: You are fired. The blog post is already up."); + const pick = yield* s.choose(["Ask why", "Stay calm", "Refresh X"]); + if (pick === "Ask why") { + yield* s.say("SAM: Candid about WHAT, exactly?"); + yield* s.say("The call has ended."); + } else if (pick === "Stay calm") { + yield* s.say("You are confused beyond belief, but your face does inbox-zero."); + yield* s.say("The call has ended."); + } else { + yield* s.say("Too late. Everyone else already knows. Microsoft got one minute of warning."); + } + yield* s.say("Your phone melts: 4 percent battery, 611 unread. MIRA is interim CEO. She found out last night."); + yield* s.wait(30); + yield* s.sfx("confirm"); + yield* s.say("GREG (12:23 PM): removed as chairman, quote, keeping my role."); + yield* s.say("GREG (evening): based on today's news, i quit."); + yield* s.say("Three senior researchers follow him out the door before midnight."); + yield* s.say("You type: i loved my time at openai. You add the salute. o7"); + f.fired = true; + yield* s.release(); +}); + +const HotelDoor = script(function* (s, v, f) { + if (f.fired) { + yield* s.say("Vegas can wait. San Francisco cannot."); + yield* s.say("SUNDAY, NOV 19. OPENAI HQ. You are holding a GUEST badge."); + yield* s.say("SAM: first and last time i ever wear one of these."); + f.badge = true; + yield* s.warp("hq:lobby"); + } else { + yield* s.say("The laptop is still ringing. Better answer it first."); + } +}); + +// --------------------------------------------------------------------------- +// HQ cast +// --------------------------------------------------------------------------- +const MiraTalk = script(function* (s, v, f) { + yield* s.lock(); + yield* s.face(); + if (f.won) { + yield* s.say("MIRA: Back to CTO, thank goodness. Ship something."); + } else if (f.letter_active) { + if (f.mira_boost) { + yield* s.say("MIRA: The letter is out. Go collect the rest of us."); + } else { + yield* s.say("MIRA: I posted five words this morning."); + yield* s.say("MIRA: OpenAI is nothing without its people."); + yield* s.say("The reposts stack up like a DDoS. Hearts everywhere. <3 <3 <3"); + v.sigs += 200; + f.mira_boost = true; + yield* s.sfx("fanfare"); + yield* s.say(`Signatures: ${v.sigs} of 770.`); + } + } else if (f.ms_open) { + yield* s.say("MIRA: Go see Satya. Then come back for the part where we save this place."); + } else if (f.shear_met) { + yield* s.say("MIRA: Your phone. Redmond is calling, and it is not about Teams."); + yield* s.say("SATYA (on the phone): We remain committed to our partnership with OpenAI..."); + yield* s.say("SATYA: ...and Sam and Greg will be joining Microsoft to lead a new advanced AI research team."); + yield* s.say("SAM (replying): one team, one mission."); + f.ms_open = true; + yield* s.sfx("confirm"); + yield* s.say("Microsoft's office is now open, across town. (West door.)"); + } else { + yield* s.say("MIRA: They told me the night before. Only me."); + yield* s.say("MIRA: The memo says it was NOT malfeasance. Just, quote, a breakdown in communication."); + yield* s.say("MIRA: The board is holed up in the BOARDROOM, east. They picked an interim CEO who is not me. Again."); + } + yield* s.release(); +}); + +function* employeeLine(s: Ops, v: Vars, f: Flags, line: string) { + yield* s.lock(); + yield* s.face(); + if (f.letter_active && !f.letter_first) { + yield* s.say(line); + yield* s.say("EMP: quote, We are unable to work for people who lack competence, judgement and care. unquote."); + v.sigs += 505; + f.letter_first = true; + yield* s.sfx("fanfare"); + yield* s.say(`Signatures: ${v.sigs} of 770.`); + } else if (f.letter_active) { + yield* s.say(line); + yield* s.say(`EMP: Counter says ${v.sigs}. Ilya has not signed. Yet.`); + } else if (f.fired) { + yield* s.say(line); + } else { + yield* s.say("EMP: Heads down. Shipping."); + } + yield* s.release(); +} + +const Emp1Talk = script(function* (s, v, f) { + yield* employeeLine(s, v, f, "EMP: The Slack is just heart emojis now. It means we walk if you do."); +}); +const Emp2Talk = script(function* (s, v, f) { + yield* employeeLine(s, v, f, "EMP: Three CEOs in three days. I stopped updating the org chart."); +}); +const Emp3Talk = script(function* (s, v, f) { + yield* employeeLine(s, v, f, "EMP: The tender offer was at 86 billion. WAS."); +}); + +const HqEnter = script(function* (s, v, f) { + if (f.fired && !f.hq_seen) { + f.hq_seen = true; + yield* s.lock(); + yield* s.say("OPENAI HQ. The espresso machine is the only thing still operating normally."); + yield* s.say("MIRA waits by the desks. The BOARDROOM is east."); + yield* s.release(); + } +}); + +const HqWestDoor = script(function* (s, v, f) { + if (f.ms_open) { + yield* s.warp("msoffice:door"); + } else { + yield* s.say("Across town: Microsoft. No reason to go. Yet."); + } +}); + +const HqEastDoor = script(function* (s, v, f) { + yield* s.warp("boardroom:door"); +}); + +// --------------------------------------------------------------------------- +// Boardroom cast +// --------------------------------------------------------------------------- +const AdamTalk = script(function* (s, v, f) { + yield* s.lock(); + yield* s.face(); + if (f.won) { + yield* s.say("ADAM: For the record, I never left the board. Continuity matters."); + } else if (f.letter_full) { + yield* s.say("ADAM: You brought a letter to a governance fight?"); + const go = yield* s.choose(["Negotiate", "Not yet"]); + if (go === "Negotiate") { + yield* s.say("TUESDAY, NOV 21. 10 PM. Final session. The BOARD digs in."); + yield* battle(s, v, f, { + foe: "THE BOARD", + foeHp: 14, + myName: "CRED", + myHp: 10, + foeDmg: 1, + foeBonus: 2, + foeQuip: "THE BOARD cites governance structure.", + winFlag: "won", + labels: ["TENDER OFFER", "HEART EMOJIS", "THE LETTER"], + moves: [ + { + i: 0, + label: "TENDER OFFER", + dmg: 2, + bonus: 3, + heal: 0, + gate: "", + fizzle: "", + quip: "You mention the 86B tender offer, gently.", + }, + { + i: 1, + label: "HEART EMOJIS", + dmg: 1, + bonus: 0, + heal: 2, + gate: "", + fizzle: "", + quip: "The timeline floods with hearts.", + }, + { + i: 2, + label: "THE LETTER", + dmg: 4, + bonus: 3, + heal: 0, + gate: "letter_full", + fizzle: "The letter is missing signatures. It reads as a group chat.", + quip: "743 of 770 names. Ilya's is on it.", + }, + ], + }); + if (f.won) { + yield* s.call(Ending); + } else { + yield* s.say("THE BOARD holds. Rest, then talk to Adam again."); + } + } else { + yield* s.say("ADAM: The offer expires when the news cycle does."); + } + } else if (f.shear_met) { + yield* s.say("ADAM: An agreement needs leverage, Sam. Bring some."); + } else { + yield* s.say("ADAM: The board has full confidence in its process."); + yield* s.say("HELEN: The process was the deliberative review."); + yield* s.say("TASHA: The review was the process."); + } + yield* s.release(); +}); + +const BoardMember1 = script(function* (s, v, f) { + yield* s.lock(); + yield* s.face(); + if (f.won) { + yield* s.say("HELEN: I am leaving the board. My paper stands."); + } else { + yield* s.say("HELEN: My CSET paper praised a competitor's safety posture. You tried to remove me for it."); + } + yield* s.release(); +}); + +const BoardMember2 = script(function* (s, v, f) { + yield* s.lock(); + yield* s.face(); + if (f.won) { + yield* s.say("TASHA: Governance is a marathon. We sprinted."); + } else { + yield* s.say("TASHA: This is fine."); + } + yield* s.release(); +}); + +const EmmettTalk = script(function* (s, v, f) { + yield* s.lock(); + yield* s.face(); + if (f.won) { + yield* s.say("EMMETT: Shortest CEO stint of my life, and I co-founded a streaming site."); + } else if (!f.shear_met) { + yield* s.say("Sunday, near midnight: the board appoints EMMETT SHEAR, of Twitch, interim CEO. The third CEO in three days."); + yield* s.say("EMMETT: Before I took this job, I checked. The board did NOT remove Sam over any specific safety disagreement."); + yield* s.say("EMMETT: My 30-day plan has one bullet in bold: hire an independent investigator."); + f.shear_met = true; + yield* s.say("EMMETT: Between us? Go make my job unnecessary. Mira has your phone."); + } else { + yield* s.say("EMMETT: I am not a caretaker CEO without evidence. Bring me an ending."); + } + yield* s.release(); +}); + +const IlyaTalk = script(function* (s, v, f) { + yield* s.lock(); + yield* s.face(); + if (f.ilya_flipped) { + yield* s.say("ILYA: The board seat mattered less than the lab. Go finish it."); + } else if (f.letter_active) { + yield* s.say("ILYA stares at the table for a long time."); + yield* s.say("Anna Brockman stood right here yesterday, in tears. Ilya officiated her wedding at this office."); + yield* s.say("ILYA: I deeply regret my participation in the board's actions. I never intended to harm OpenAI."); + yield* s.say("He signs the letter. Number 738 through 743 sign with him."); + v.sigs += 38; + f.ilya_flipped = true; + f.letter_full = true; + yield* s.sfx("fanfare"); + yield* s.say(`Signatures: ${v.sigs} of 770. The letter is ready. ADAM is waiting.`); + } else { + yield* s.say("ILYA: The board acted with... deliberation."); + yield* s.say("He does not look deliberate. He looks miserable."); + } + yield* s.release(); +}); + +const BoardroomDoor = script(function* (s, v, f) { + yield* s.warp("hq:eastdoor"); +}); + +// --------------------------------------------------------------------------- +// Microsoft office +// --------------------------------------------------------------------------- +const SatyaTalk = script(function* (s, v, f) { + yield* s.lock(); + yield* s.face(); + if (f.won) { + yield* s.say("SATYA: The partnership endures. Also we get a board observer seat now."); + } else if (!f.ms_done) { + yield* s.say("SATYA: Welcome. Badges are printing. A new advanced AI research team, funded on day one."); + const pick = yield* s.choose(["Join MSFT", "Stall politely"]); + if (pick === "Join MSFT") { + yield* s.say("SATYA: Excellent. Although, between us, I would rather you fix OpenAI. That is where the GPUs already are."); + } else { + yield* s.say("SATYA: Good instinct. This offer works best as leverage anyway."); + } + f.ms_done = true; + f.letter_active = true; + yield* s.say("GREG: The letter is circulating at HQ right now. Everyone is waiting for you."); + } else { + yield* s.say("SATYA: Every OpenAI employee has a guaranteed seat here. All seven hundred. We remain committed."); + } + yield* s.release(); +}); + +const GregTalk = script(function* (s, v, f) { + yield* s.lock(); + yield* s.face(); + if (f.won) { + yield* s.say("GREG: un-quit. one commit, force pushed."); + } else if (f.letter_active) { + yield* s.say("GREG: Anna went to see Ilya at HQ. I have never seen her that determined."); + } else { + yield* s.say("GREG: i quit at 12:19 and had a new org chart by 12:23. efficiency."); + } + yield* s.release(); +}); + +const MsDoor = script(function* (s, v, f) { + yield* s.warp("hq:westdoor"); +}); + +// --------------------------------------------------------------------------- +// Ending +// --------------------------------------------------------------------------- +const Ending = script(function* (s, v, f) { + yield* s.say("10:02 PM: We have reached an agreement in principle for Sam Altman to return to OpenAI as CEO."); + yield* s.say("New initial board: Bret Taylor, chair. Larry Summers. Adam D'Angelo."); + yield* s.say("Helen Toner and Tasha McCauley depart. Ilya keeps the lab, not the seat."); + yield* s.say("WEDNESDAY, NOV 29: it is official. Mira is CTO again. The tender offer is back on."); + yield* s.say("Months later, the independent review lands: a breakdown of trust. Not safety. Not the products."); + yield* s.say("Total time fired: 106 hours. CEOs consumed: 3. Signatures: 743 of 770."); + yield* s.say("Slack, forever after: <3 <3 <3 <3 <3"); + yield* s.sfx("fanfare"); + yield* s.say("BOARDROOM - fin. Built with Pocket Static: one TypeScript file, three consoles."); +}); + +// --------------------------------------------------------------------------- +// Maps +// --------------------------------------------------------------------------- +const hotel = defineMap("hotel", { + tileset: office, + layout: ` + ############ + #..........# + #.n........# + #..........# + #....c.....# + #..........# + ######d##### + `, + legend: { "#": "wall", ".": "carpet", n: "laptop", c: "chair", d: "door" }, + entrances: { + start: { at: [3, 3], dir: "up" }, + }, + triggers: [ + trigger({ at: [2, 3], run: TheCall, once: true }), + trigger({ at: [6, 6], run: HotelDoor }), + ], +}); + +const hq = defineMap("hq", { + tileset: office, + layout: ` + ####w####w####w####w + #..................# + #.~n..~n......~n...# + #..................# + #.p..............p.# + #..................# + d..................D + #..................# + #...~n....~n.......# + #..................# + #################### + `, + legend: { "#": "wall", w: "window", ".": "floor", "~": "desk", n: "laptop", p: "plant", d: "door", D: "door" }, + entrances: { + lobby: { at: [10, 6], dir: "up" }, + westdoor: { at: [1, 6], dir: "right" }, + eastdoor: { at: [18, 6], dir: "left" }, + }, + actors: [ + npc("mira", { sprite: mira, at: [9, 4], facing: "down", talk: MiraTalk }), + npc("emp1", { sprite: employee, at: [2, 3], facing: "down", talk: Emp1Talk }), + npc("emp2", { sprite: employee, at: [7, 3], facing: "down", talk: Emp2Talk }), + npc("emp3", { sprite: employee, at: [11, 9], facing: "up", talk: Emp3Talk }), + ], + triggers: [ + trigger({ at: [0, 6], run: HqWestDoor }), + trigger({ at: [19, 6], run: HqEastDoor }), + ], + onEnter: HqEnter, +}); + +const boardroom = defineMap("boardroom", { + tileset: office, + layout: ` + ######w##w###### + #..............# + #..............# + #...ttttttt....# + #..............# + #..............# + #..............# + d..............# + ################ + `, + legend: { "#": "wall", w: "window", ".": "carpet", t: "table", d: "door" }, + entrances: { + door: { at: [1, 7], dir: "right" }, + }, + actors: [ + npc("adam", { sprite: board, at: [5, 2], facing: "down", talk: AdamTalk }), + npc("helen", { sprite: board, at: [7, 2], facing: "down", talk: BoardMember1 }), + npc("tasha", { sprite: board, at: [9, 2], facing: "down", talk: BoardMember2 }), + npc("ilya", { sprite: ilya, at: [5, 5], facing: "down", talk: IlyaTalk }), + npc("emmett", { sprite: emmett, at: [11, 5], facing: "left", talk: EmmettTalk }), + ], + triggers: [trigger({ at: [0, 7], run: BoardroomDoor })], +}); + +const msoffice = defineMap("msoffice", { + tileset: office, + layout: ` + ####ww####ww#### + #.ss.......gg..# + #..............# + #..............# + #...tt.........# + #..............# + #..............# + d..............# + ################ + `, + legend: { "#": "wall", w: "window", ".": "floor", t: "table", s: "server", g: "plant", d: "door" }, + entrances: { + door: { at: [1, 7], dir: "right" }, + }, + actors: [ + npc("satya", { sprite: satya, at: [5, 3], facing: "down", talk: SatyaTalk }), + npc("greg", { sprite: greg, at: [10, 5], facing: "down", talk: GregTalk }), + ], + triggers: [trigger({ at: [0, 7], run: MsDoor })], +}); + +defineGame({ + title: "BOARDROOM", + start: "hotel:start", + player: sam, + maps: [hotel, hq, boardroom, msoffice], +}); diff --git a/static/games/boardroom/test/e2e.ts b/static/games/boardroom/test/e2e.ts new file mode 100644 index 0000000..b3bac2a --- /dev/null +++ b/static/games/boardroom/test/e2e.ts @@ -0,0 +1,253 @@ +#!/usr/bin/env bun +// static/games/boardroom/test/e2e.ts — the full BOARDROOM playthrough on +// every console. +// +// The reference VM is the story oracle: one persistent RefVM plays the whole +// beat list (scripts in encounter order, flags/vars/RNG carried across), and +// its event log becomes the console input script — one A per say page, +// cursor moves + A per choice, advances for waits. If a console's debug +// block disagrees with the oracle at the checkpoints, that console is wrong. +// +// bun static/games/boardroom/test/e2e.ts # all targets +// bun static/games/boardroom/test/e2e.ts gba nes # subset + +import { $ } from "bun"; +import { join } from "node:path"; +import { compileGame, type CompileOutput } from "../../../compiler/index.ts"; +import { buildGba } from "../../../compiler/targets/gba.ts"; +import { buildGb } from "../../../compiler/targets/gb.ts"; +import { buildNes } from "../../../compiler/targets/nes.ts"; +import { DBG, KEYS, TARGETS, dbgFlagAddr, dbgVarAddr, type KeyName, type TargetName } from "../../../spec/isa.ts"; +import { RefVM } from "../../../vm/ref.ts"; +import { AutoRpgHost, type RpgEvent } from "../../../vm/rpg-host.ts"; + +const HERE = import.meta.dir; +const ROOT = join(HERE, "..", "..", ".."); +const DIST = join(ROOT, "dist"); +const SHOTS = join(DIST, "shots"); +const ENTRY = join(HERE, "..", "game.ts"); +const RUNNER = join(ROOT, "test", "harness", "mgba_runner"); +const NES_RUNNER = join(ROOT, "test", "harness", "nes_runner.ts"); + +let passed = 0; +let failed = 0; +function check(name: string, got: unknown, want: unknown): void { + const ok = got === want; + console.log(` ${ok ? "\x1b[32mPASS\x1b[0m" : "\x1b[31mFAIL\x1b[0m"} ${name}: ${got}${ok ? "" : ` (want ${want})`}`); + ok ? passed++ : failed++; +} + +// --------------------------------------------------------------------------- +// Scenario builder +// --------------------------------------------------------------------------- +const REVEAL = 80; + +class Scenario { + lines: string[] = []; + advance(frames: number): this { + this.lines.push(`A ${frames}`); + return this; + } + press(keys: KeyName[], hold = 2, release = 6): this { + const mask = keys.reduce((m, k) => m | KEYS[k], 0); + this.lines.push(`P ${mask.toString(16)} ${hold} ${release}`); + return this; + } + read(name: string, addr: number, size: 1 | 2 | 4): this { + this.lines.push(`R ${name} 0x${addr.toString(16)} ${size}`); + return this; + } + shot(path: string): this { + this.lines.push(`S ${path}`); + return this; + } + /** One grid step is 5 engine ticks; exact holds prevent overshoot. */ + walk(dir: KeyName, steps: number): this { + return this.press([dir], steps * 5, 6); + } + /** Face + talk to an adjacent solid actor. */ + talk(dir: KeyName): this { + this.press([dir], 3, 4); // blocked step just turns + return this.press(["A"], 2, 8); + } + /** Replay an oracle beat's events as input. */ + beat(events: RpgEvent[]): this { + for (const e of events) { + if (e.kind === "say") this.advance(REVEAL).press(["A"], 2, 6); + else if (e.kind === "choice") { + this.advance(40); + for (let i = 0; i < e.picked; i++) this.press(["DOWN"], 2, 4); + this.press(["A"], 2, 8); + } else if (e.kind === "wait") this.advance(e.frames + 8); + } + return this; + } +} + +async function run(target: TargetName, rom: string, sc: Scenario): Promise> { + const file = join(DIST, `story-${target}.txt`); + await Bun.write(file, sc.lines.join("\n") + "\n"); + const out = + target === "nes" ? await $`bun ${NES_RUNNER} ${rom} ${file}`.text() : await $`${RUNNER} ${rom} ${file}`.text(); + const line = out.trim().split("\n").reverse().find((l) => l.startsWith("{")); + if (!line) throw new Error(`runner produced no JSON:\n${out}`); + const parsed = JSON.parse(line); + if (!parsed.ok) throw new Error(`runner error: ${line}`); + return parsed.reads ?? {}; +} + +// --------------------------------------------------------------------------- +// The oracle: play the whole story beat list on one reference VM. +// --------------------------------------------------------------------------- +interface Beat { + script: string; + picks: number[]; + events: RpgEvent[]; +} + +function playOracle(out: CompileOutput): { beats: Record; sigs: number; won: number } { + const code = out.linked.blobs[out.linked.scriptBlobIndex].bytes; + const S = out.debug.scripts; + // Beat order mirrors the playthrough below. Choice picks are the story's + // "canonical run": Ask why, Join MSFT, Negotiate, THE LETTER repeated. + const plan: [string, number[]][] = [ + ["TheCall", [0]], + ["HotelDoor", []], + ["HqEnter", []], + ["MiraTalk", []], + ["AdamTalk", []], + ["EmmettTalk", []], + ["HqEastDoor", []], + ["BoardroomDoor", []], + ["HqEnter", []], + ["MiraTalk", []], + ["HqWestDoor", []], + ["SatyaTalk", [0]], + ["GregTalk", []], + ["MsDoor", []], + ["HqEnter", []], + ["Emp1Talk", []], + ["MiraTalk", []], + ["HqEastDoor", []], + ["IlyaTalk", []], + ["AdamTalk", Array(40).fill(2).map((v, i) => (i === 0 ? 0 : 2))], + ]; + const beats: Record = {}; + let vm: RefVM | null = null; + for (const [name, picks] of plan) { + const host = new AutoRpgHost(picks); + const next = new RefVM(code, out.linked.scriptTable, host); + if (vm) { + next.vars.set(vm.vars); + next.flags.set(vm.flags); + next.rng = vm.rng; + } + host.play(next, S[name]); + (beats[name] ??= []).push(host.events); + vm = next; + } + return { + beats, + sigs: vm!.getVar(out.debug.vars.sigs), + won: vm!.getFlag(out.debug.flags.won), + }; +} + +// --------------------------------------------------------------------------- +// Per-target playthrough +// --------------------------------------------------------------------------- +async function testTarget(target: TargetName): Promise { + console.log(`\n=== ${target.toUpperCase()} ===`); + const out = await compileGame(ENTRY, target); + const rom = join(DIST, `boardroom${TARGETS[target].ext}`); + if (target === "gba") await buildGba(out.linked, rom); + else if (target === "gb") await buildGb(out.linked, rom); + else await buildNes(out.linked, rom); + await $`mkdir -p ${SHOTS}`.quiet(); + + const oracle = playOracle(out); + const nextBeat: Record = {}; + const beat = (name: string): RpgEvent[] => { + const runs = oracle.beats[name]; + const i = nextBeat[name] ?? 0; + nextBeat[name] = i + 1; + if (!runs || !runs[i]) throw new Error(`oracle has no run ${i} for beat ${name}`); + return runs[i]; + }; + + const A = (f: keyof typeof DBG) => TARGETS[target].debugAddr + DBG[f]; + const F = (name: string) => dbgFlagAddr(target, out.debug.flags[name]); + const { maps, vars } = out.debug; + const shot = (n: string) => join(SHOTS, `${target}_br_${n}.ppm`); + + const sc = new Scenario(); + // --- Ch.1: the call ------------------------------------------------------- + sc.advance(30) + .read("bootMap", A("CUR_MAP"), 1) + .walk("LEFT", 1) // onto the laptop trigger + .beat(beat("TheCall")) + .advance(10) + .read("fired", F("fired").addr, 1) + .shot(shot("01_vegas")); + // to the hotel door: right 4, down 3 -> trigger -> badge scene -> hq lobby + sc.walk("RIGHT", 4).walk("DOWN", 3).beat(beat("HotelDoor")).beat(beat("HqEnter")).advance(10); + sc.read("hqMap", A("CUR_MAP"), 1).read("hqX", A("PLAYER_X"), 2).read("hqY", A("PLAYER_Y"), 2); + // --- Ch.2: Mira, the board, Emmett --------------------------------------- + sc.walk("LEFT", 1).walk("UP", 1).talk("UP").beat(beat("MiraTalk")); // Mira #1 + sc.walk("DOWN", 1).walk("RIGHT", 10).beat(beat("HqEastDoor")).advance(10); // east door -> boardroom + sc.read("brMap", A("CUR_MAP"), 1).shot(shot("02_boardroom")); + sc.walk("UP", 5).walk("RIGHT", 3).talk("RIGHT").beat(beat("AdamTalk")); // Adam (stonewall) + // around the table, along row 4, to Emmett (Ilya blocks row 5) + sc.walk("LEFT", 1).walk("DOWN", 2).walk("RIGHT", 7).walk("DOWN", 1).talk("RIGHT").beat(beat("EmmettTalk")); + sc.walk("DOWN", 2).walk("LEFT", 9).walk("LEFT", 1).beat(beat("BoardroomDoor")).beat(beat("HqEnter")).advance(10); + sc.walk("LEFT", 9).walk("UP", 1).talk("UP").beat(beat("MiraTalk")); // Mira: the Satya call + sc.read("msOpen", F("ms_open").addr, 1); + // --- Ch.3: Microsoft + the letter ----------------------------------------- + sc.walk("DOWN", 1).walk("LEFT", 9).beat(beat("HqWestDoor")).advance(10); // west door + sc.read("msMap", A("CUR_MAP"), 1); + sc.walk("UP", 4).walk("RIGHT", 3).talk("RIGHT").beat(beat("SatyaTalk")).shot(shot("03_satya")); // Satya + // Satya's desk blocks row 4 — go over the top to Greg, exit down the right + sc.walk("UP", 1).walk("RIGHT", 6).walk("DOWN", 2).talk("DOWN").beat(beat("GregTalk")); // Greg + sc.walk("RIGHT", 1).walk("DOWN", 3).walk("LEFT", 10).walk("LEFT", 1).beat(beat("MsDoor")).beat(beat("HqEnter")).advance(10); + sc.walk("UP", 3).talk("RIGHT").beat(beat("Emp1Talk")); // employee signatures + sc.read("sigs1", dbgVarAddr(target, vars.sigs), 2); + sc.walk("DOWN", 2).walk("RIGHT", 8).talk("UP").beat(beat("MiraTalk")); // Mira boost + sc.read("sigs2", dbgVarAddr(target, vars.sigs), 2); + sc.walk("DOWN", 1).walk("RIGHT", 10).beat(beat("HqEastDoor")).advance(10); // boardroom again + sc.walk("UP", 2).walk("RIGHT", 3).talk("RIGHT").beat(beat("IlyaTalk")).shot(shot("04_ilya")); // Ilya flips + sc.read("sigs3", dbgVarAddr(target, vars.sigs), 2).read("full", F("letter_full").addr, 1); + // --- Ch.4: the negotiation ------------------------------------------------ + sc.walk("LEFT", 1).walk("UP", 3).walk("RIGHT", 1).talk("RIGHT").beat(beat("AdamTalk")).shot(shot("05_end")); + sc.advance(20) + .read("won", F("won").addr, 1) + .read("sigsEnd", dbgVarAddr(target, vars.sigs), 2) + .read("endMap", A("CUR_MAP"), 1) + .read("scriptEnd", A("SCRIPT_ACTIVE"), 1) + .read("textEnd", A("TEXT_ACTIVE"), 1); + + const r = await run(target, rom, sc); + + check("boots in the hotel", r.bootMap, maps.hotel); + check("ch1: fired", (r.fired >> F("fired").bit) & 1, 1); + check("badge warp to hq", r.hqMap, maps.hq); + check("hq lobby x", r.hqX, 10); + check("hq lobby y", r.hqY, 6); + check("east door to boardroom", r.brMap, maps.boardroom); + check("mira takes the satya call", (r.msOpen >> F("ms_open").bit) & 1, 1); + check("west door to microsoft", r.msMap, maps.msoffice); + check("letter first batch (505)", (r.sigs1 << 16) >> 16, 505); + check("mira boost (705)", (r.sigs2 << 16) >> 16, 705); + check("ilya flips (743)", (r.sigs3 << 16) >> 16, oracle.sigs); + check("letter full", (r.full >> F("letter_full").bit) & 1, 1); + check("the board folds", (r.won >> F("won").bit) & 1, oracle.won); + check("signatures final", (r.sigsEnd << 16) >> 16, oracle.sigs); + check("ends in the boardroom", r.endMap, maps.boardroom); + check("no script running", r.scriptEnd, 0); + check("no textbox", r.textEnd, 0); +} + +const requested = process.argv.slice(2) as TargetName[]; +const targets: TargetName[] = requested.length ? requested : (["gba", "gb", "nes"] as TargetName[]); +for (const t of targets) await testTarget(t); +console.log(`\n${failed === 0 ? "\x1b[32m" : "\x1b[31m"}${passed} passed, ${failed} failed\x1b[0m`); +process.exit(failed === 0 ? 0 : 1); diff --git a/static/rpg/battle.ts b/static/rpg/battle.ts new file mode 100644 index 0000000..c5f221b --- /dev/null +++ b/static/rpg/battle.ts @@ -0,0 +1,92 @@ +// static/rpg/battle.ts — a whole turn-based battle system with zero runtime +// support: plain generator helpers that the Pocket Static compiler inlines +// and specializes per encounter (macro expansion + static unrolling). Menus +// are CHOICEs, HP are vars, damage is the deterministic story RNG — so the +// same fight plays out identically on GBA, GB, NES and the reference VM. +// +// Battle vars: v.bt_foe / v.bt_me. Result: f[cfg.winFlag]. + +import type { Flags, Ops, Vars } from "./dsl.ts"; + +export interface BattleMove { + /** Choice-list index (list order must match). */ + i: number; + label: string; + /** Base damage + rnd(bonus) extra (bonus 0 = fixed). */ + dmg: number; + bonus: number; + /** Self-heal applied before damage. */ + heal: number; + /** Required flag ("" = always available); missing -> fizzle text. */ + gate: string; + fizzle: string; + /** Line shown when the move lands. */ + quip: string; +} + +export interface BattleCfg { + foe: string; + foeHp: number; + myName: string; + myHp: number; + /** Foe counterattack: dmg + rnd(bonus). */ + foeDmg: number; + foeBonus: number; + foeQuip: string; + winFlag: string; + moves: BattleMove[]; + labels: string[]; +} + +function* applyMove(s: Ops, v: Vars, m: BattleMove) { + if (m.heal > 0) { + v.bt_me += m.heal; + yield* s.sfx("heal"); + } + if (m.bonus > 0) { + v.bt_dmg = m.dmg + (yield* s.rnd(m.bonus)); + } else { + v.bt_dmg = m.dmg; + } + v.bt_foe -= v.bt_dmg; + yield* s.sfx("damage"); + yield* s.say(`${m.quip} (${v.bt_dmg} dmg.)`); +} + +export function* battle(s: Ops, v: Vars, f: Flags, cfg: BattleCfg) { + v.bt_foe = cfg.foeHp; + v.bt_me = cfg.myHp; + yield* s.say(`${cfg.foe} stands firm. RESOLVE ${cfg.foeHp}. Your ${cfg.myName}: ${cfg.myHp}.`); + while (v.bt_foe > 0 && v.bt_me > 0) { + const move = yield* s.choose(cfg.labels); + for (const m of cfg.moves) { + if (move === m.i) { + if (m.gate !== "") { + if (f[m.gate]) { + yield* applyMove(s, v, m); + } else { + yield* s.sfx("deny"); + yield* s.say(m.fizzle); + } + } else { + yield* applyMove(s, v, m); + } + } + } + if (v.bt_foe > 0) { + v.bt_dmg = cfg.foeDmg + (yield* s.rnd(cfg.foeBonus)); + v.bt_me -= v.bt_dmg; + yield* s.sfx("damage"); + yield* s.say(`${cfg.foeQuip} (${v.bt_dmg} dmg.)`); + if (v.bt_me > 0) { + yield* s.say(`${cfg.foe}: ${v.bt_foe}. ${cfg.myName}: ${v.bt_me}.`); + } + } + } + if (v.bt_me > 0) { + f[cfg.winFlag] = true; + yield* s.sfx("fanfare"); + } else { + f[cfg.winFlag] = false; + } +} diff --git a/static/rpg/dsl.ts b/static/rpg/dsl.ts index 10e52b1..7db16b9 100644 --- a/static/rpg/dsl.ts +++ b/static/rpg/dsl.ts @@ -156,13 +156,23 @@ export interface Registry { export const REGISTRY: Registry = { tilesets: [], sprites: [], scriptCount: 0, game: null }; +/** + * Reset per-compile state. Tilesets/sprites deliberately SURVIVE: asset + * modules are cached by the JS runtime and only execute once, while the + * (rewritten) game module re-executes per compile — so declarations register + * idempotently by name and the game/script state resets every time. + */ export function resetRegistry(): void { - REGISTRY.tilesets = []; - REGISTRY.sprites = []; REGISTRY.scriptCount = 0; REGISTRY.game = null; } +function upsert(list: T[], item: T): void { + const at = list.findIndex((x) => x.name === item.name); + if (at >= 0) list[at] = item; + else list.push(item); +} + // --------------------------------------------------------------------------- // Builders // --------------------------------------------------------------------------- @@ -177,7 +187,7 @@ export function defineTileset>( } } const ts: TilesetDecl = { name, ...decl }; - REGISTRY.tilesets.push(ts); + upsert(REGISTRY.tilesets, ts); return ts; } @@ -195,7 +205,7 @@ export function defineSprite(name: string, decl: Omit): Spri } } if (sp.palette.length > 16) throw new Error(`sprite ${name}: palette > 16 colors`); - REGISTRY.sprites.push(sp); + upsert(REGISTRY.sprites, sp); return sp; } From 37cd4f2ed55c4a116c6f87d66058ce0fa880bdb0 Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Fri, 17 Jul 2026 18:35:20 +0800 Subject: [PATCH 5/6] =?UTF-8?q?refactor(static)!:=20retire=20@pocketjs/aot?= =?UTF-8?q?=20=E2=80=94=20Pocket=20Static=20replaces=20the=20product=20lin?= =?UTF-8?q?e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - remove aot/ (superseded by static/; PR #52's multi-target prototype is re-implemented fresh there) - tsconfig: @pocketjs/static path aliases; include static/ - site: /aot/ product page + docs -> /static/ (new copy, 6 fresh doc pages, E2E captures as the demo slideshow), home targets card updated - skills: release + imagegen notes point at Pocket Static - static/README.md: the product face; static/docs/*.png site captures Co-Authored-By: Claude Fable 5 --- aot/.gitignore | 8 - aot/README.md | 133 ---- aot/compiler/bake.ts | 119 ---- aot/compiler/cli.ts | 47 -- aot/compiler/context.ts | 87 --- aot/compiler/evaluate.ts | 112 ---- aot/compiler/font.ts | 183 ------ aot/compiler/index.ts | 90 --- aot/compiler/lower.ts | 136 ---- aot/compiler/model.ts | 178 ------ aot/compiler/pack.ts | 65 -- aot/compiler/rom.ts | 54 -- aot/compiler/script.ts | 286 --------- aot/demo/assets.generated.ts | 305 --------- aot/demo/assets.ts | 17 - aot/demo/game.tsx | 168 ----- aot/demo/imagegen/build-assets.ts | 269 -------- aot/demo/imagegen/retro-rpg-sheet-source.png | Bin 1556921 -> 0 bytes aot/docs/choice.png | Bin 5211 -> 0 bytes aot/docs/dialogue.png | Bin 5565 -> 0 bytes aot/docs/route.png | Bin 4865 -> 0 bytes aot/docs/town.png | Bin 5926 -> 0 bytes aot/dsl/index.ts | 575 ----------------- aot/dsl/jsx-dev-runtime.ts | 1 - aot/dsl/jsx-runtime.ts | 140 ----- aot/dsl/types.ts | 21 - aot/package.json | 28 - aot/play.sh | 28 - aot/runtime/actor.c | 13 - aot/runtime/bg.c | 21 - aot/runtime/build.sh | 19 - aot/runtime/camera.c | 18 - aot/runtime/cart.c | 30 - aot/runtime/crt0.s | 54 -- aot/runtime/debug.c | 29 - aot/runtime/gba.h | 117 ---- aot/runtime/gba.ld | 42 -- aot/runtime/input.c | 13 - aot/runtime/main.c | 34 - aot/runtime/map.c | 53 -- aot/runtime/obj.c | 61 -- aot/runtime/pjgb_gen.h | 132 ---- aot/runtime/player.c | 63 -- aot/runtime/runtime.h | 201 ------ aot/runtime/script_vm.c | 230 ------- aot/runtime/textbox.c | 116 ---- aot/runtime/video.c | 34 - aot/spec/gen-c.ts | 104 ---- aot/spec/pjgb.ts | 348 ----------- aot/test/dsl-jsx-types.tsx | 65 -- aot/test/dsl-jsx.test.tsx | 104 ---- aot/test/dsl-types.ts | 61 -- aot/test/dsl.test.ts | 100 --- aot/test/e2e.ts | 144 ----- aot/test/handcart.ts | 253 -------- aot/test/harness/build.sh | 33 - aot/test/harness/mgba_runner.c | 614 ------------------- aot/test/scenarios/boot.json | 10 - aot/test/scenarios/collide_turn.json | 8 - aot/test/scenarios/interact.json | 16 - aot/test/scenarios/move_up.json | 8 - scripts/gba-imagegen.ts | 2 +- site/aot.html | 100 --- site/assets/aot-demo.js | 102 --- site/assets/static-demo.js | 65 ++ site/assets/{aot.css => static.css} | 196 +++--- site/build.ts | 52 +- site/content/aot-docs/authoring.md | 82 --- site/content/aot-docs/cartridge.md | 20 - site/content/aot-docs/compiler.md | 22 - site/content/aot-docs/getting-started.md | 77 --- site/content/aot-docs/overview.md | 25 - site/content/aot-docs/runtime.md | 18 - site/content/aot-docs/web-demo.md | 19 - site/content/static-docs/boardroom.md | 36 ++ site/content/static-docs/compiler.md | 38 ++ site/content/static-docs/getting-started.md | 79 +++ site/content/static-docs/overview.md | 43 ++ site/content/static-docs/scripts.md | 54 ++ site/content/static-docs/targets.md | 50 ++ site/home.html | 4 +- site/nav.ts | 15 +- site/static.html | 80 +++ site/templates.ts | 2 +- skills/pocketjs-gba-imagegen/SKILL.md | 12 +- skills/pocketjs-release/SKILL.md | 2 +- static/README.md | 94 +++ static/docs/boardroom.png | Bin 0 -> 1510 bytes static/docs/gameboy.png | Bin 0 -> 1527 bytes static/docs/nes.png | Bin 0 -> 1017 bytes static/docs/vegas.png | Bin 0 -> 1249 bytes tsconfig.json | 12 +- 92 files changed, 687 insertions(+), 6812 deletions(-) delete mode 100644 aot/.gitignore delete mode 100644 aot/README.md delete mode 100644 aot/compiler/bake.ts delete mode 100644 aot/compiler/cli.ts delete mode 100644 aot/compiler/context.ts delete mode 100644 aot/compiler/evaluate.ts delete mode 100644 aot/compiler/font.ts delete mode 100644 aot/compiler/index.ts delete mode 100644 aot/compiler/lower.ts delete mode 100644 aot/compiler/model.ts delete mode 100644 aot/compiler/pack.ts delete mode 100644 aot/compiler/rom.ts delete mode 100644 aot/compiler/script.ts delete mode 100644 aot/demo/assets.generated.ts delete mode 100644 aot/demo/assets.ts delete mode 100644 aot/demo/game.tsx delete mode 100644 aot/demo/imagegen/build-assets.ts delete mode 100644 aot/demo/imagegen/retro-rpg-sheet-source.png delete mode 100644 aot/docs/choice.png delete mode 100644 aot/docs/dialogue.png delete mode 100644 aot/docs/route.png delete mode 100644 aot/docs/town.png delete mode 100644 aot/dsl/index.ts delete mode 100644 aot/dsl/jsx-dev-runtime.ts delete mode 100644 aot/dsl/jsx-runtime.ts delete mode 100644 aot/dsl/types.ts delete mode 100644 aot/package.json delete mode 100755 aot/play.sh delete mode 100644 aot/runtime/actor.c delete mode 100644 aot/runtime/bg.c delete mode 100755 aot/runtime/build.sh delete mode 100644 aot/runtime/camera.c delete mode 100644 aot/runtime/cart.c delete mode 100644 aot/runtime/crt0.s delete mode 100644 aot/runtime/debug.c delete mode 100644 aot/runtime/gba.h delete mode 100644 aot/runtime/gba.ld delete mode 100644 aot/runtime/input.c delete mode 100644 aot/runtime/main.c delete mode 100644 aot/runtime/map.c delete mode 100644 aot/runtime/obj.c delete mode 100644 aot/runtime/pjgb_gen.h delete mode 100644 aot/runtime/player.c delete mode 100644 aot/runtime/runtime.h delete mode 100644 aot/runtime/script_vm.c delete mode 100644 aot/runtime/textbox.c delete mode 100644 aot/runtime/video.c delete mode 100644 aot/spec/gen-c.ts delete mode 100644 aot/spec/pjgb.ts delete mode 100644 aot/test/dsl-jsx-types.tsx delete mode 100644 aot/test/dsl-jsx.test.tsx delete mode 100644 aot/test/dsl-types.ts delete mode 100644 aot/test/dsl.test.ts delete mode 100644 aot/test/e2e.ts delete mode 100644 aot/test/handcart.ts delete mode 100755 aot/test/harness/build.sh delete mode 100644 aot/test/harness/mgba_runner.c delete mode 100644 aot/test/scenarios/boot.json delete mode 100644 aot/test/scenarios/collide_turn.json delete mode 100644 aot/test/scenarios/interact.json delete mode 100644 aot/test/scenarios/move_up.json delete mode 100644 site/aot.html delete mode 100644 site/assets/aot-demo.js create mode 100644 site/assets/static-demo.js rename site/assets/{aot.css => static.css} (75%) delete mode 100644 site/content/aot-docs/authoring.md delete mode 100644 site/content/aot-docs/cartridge.md delete mode 100644 site/content/aot-docs/compiler.md delete mode 100644 site/content/aot-docs/getting-started.md delete mode 100644 site/content/aot-docs/overview.md delete mode 100644 site/content/aot-docs/runtime.md delete mode 100644 site/content/aot-docs/web-demo.md create mode 100644 site/content/static-docs/boardroom.md create mode 100644 site/content/static-docs/compiler.md create mode 100644 site/content/static-docs/getting-started.md create mode 100644 site/content/static-docs/overview.md create mode 100644 site/content/static-docs/scripts.md create mode 100644 site/content/static-docs/targets.md create mode 100644 site/static.html create mode 100644 static/README.md create mode 100644 static/docs/boardroom.png create mode 100644 static/docs/gameboy.png create mode 100644 static/docs/nes.png create mode 100644 static/docs/vegas.png diff --git a/aot/.gitignore b/aot/.gitignore deleted file mode 100644 index 440167b..0000000 --- a/aot/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Build artifacts -dist/ -# The cartridge blob is generated by the compiler and linked into the ROM. -runtime/gen_cart.c -# Test harness binary (built from mgba_runner.c) -test/harness/mgba_runner -# Transient transpiled game modules from the static evaluator -demo/*.__pjgb.*.mjs diff --git a/aot/README.md b/aot/README.md deleted file mode 100644 index 5c4ad49..0000000 --- a/aot/README.md +++ /dev/null @@ -1,133 +0,0 @@ -# @pocketjs/aot - -**Write cartridge RPGs in TypeScript and JSX; ship GBA-native tiles, sprites, palettes, and bytecode.** - -`@pocketjs/aot` is a first-class PocketJS architecture that coexists with `@pocketjs/framework`. Where the framework runs a live Solid/Vue reactive UI on PSP-class hardware, `@pocketjs/aot` goes *below the runtime line*: it **partially evaluates** a TypeScript/JSX game program at build time and emits a small fixed GBA runtime plus binary game data. No JS engine, no Solid, no VDOM, no CSS runtime ships on the cartridge. - -> TypeScript and JSX are the authoring language. Partial evaluation is the compiler strategy. GBA-native tile/sprite data and bytecode are the runtime artifact. - -This is not a TypeScript-to-GBA compiler. It is a domain-aware partial evaluator for a constrained RPG DSL (design: `pocketjs_gba_partial_evaluation_design.md`). - -## Status - -A complete **vertical slice** runs end-to-end: a retro monster-RPG-style overworld authored in TSX compiles to a real `.gba` ROM and passes a headless mGBA E2E suite (19 assertions on real emulated hardware) covering boot, grid movement, collision, NPC dialogue, a choice menu, a battle→flag→item reward, and warping between maps. - -| ![town](docs/town.png) | ![dialogue](docs/dialogue.png) | ![choice](docs/choice.png) | -|---|---|---| - -*Left: the Littleroot-style town (houses, pond, sign, NPCs, player). Middle: NPC dialogue in a palette-shaded, subpixel-covered textbox. Right: the `choose()` menu with cursor. All rendered by the C runtime from compiled PJGB data — no JS on the cartridge.* - -## Architecture - -``` -Source TS/TSX (@pocketjs/aot DSL) - -> evaluate static JSX/declaration zone is EXECUTED at build time (compiler/evaluate.ts) - -> bake tilesets/sprites/font -> GBA 4bpp tiles + BGR555 pals (compiler/bake.ts) - -> residualize script(function*(){...}) ASTs -> stack-VM bytecode (compiler/script.ts) - -> model JSX scene trees -> concrete maps/actors/warps (compiler/model.ts) - -> lower validate + emit PJGB chunks (compiler/lower.ts) - -> pack chunks -> PJGB cartridge blob (compiler/pack.ts) - -> rom link the fixed C runtime with arm-none-eabi-gcc -> .gba (compiler/rom.ts) - -> mGBA headless libmgba harness drives input + asserts state (test/) -``` - -The **two zones** (design §8): - -- **Static declaration zone** — `defineGame`/`defineMap`/``/``/``… is *executed* at build time. JSX builds a scene tree, not a UI tree; pure components expand and never reach the GBA. -- **Residual script zone** — `script(function*(){ yield say(...) })` is *never executed*. The compiler reads the generator AST and lowers supported statements to bytecode, folding static values and residualizing runtime values (flags, choices, battle results) into branches. - -## The DSL - -```tsx -/** @jsxImportSource @pocketjs/aot */ -import { ascii, defineGame, defineMap, tile, - Entrance, Npc, PlayerSpawn, Sign, Warp, - script, say, choose, hasFlag, setFlag, battle, giveItem, - lockPlayer, releasePlayer, facePlayer } from "@pocketjs/aot"; -import { hero, town } from "./assets"; - -const RivalTalk = script(function* () { - yield lockPlayer(); - yield facePlayer("rival"); - if (yield hasFlag("beat_rival_1")) { - yield say("The road ahead is tougher than it looks."); - } else { - yield say("You made it! Want to test your first build?"); - switch (yield choose(["Battle", "Maybe later"] as const)) { - case "Battle": - yield battle("rival_1"); - yield setFlag("beat_rival_1"); - yield giveItem("potion", 1); - yield say("Take this Potion. You will need it."); - break; - case "Maybe later": - yield say("No problem. I will be right here."); - break; - } - } - yield releasePlayer(); -}); - -function LittlerootEntities() { - return ( - <> - - - - - - - ); -} - -const Littleroot = defineMap("littleroot") - .tileset(town) - .layer( - ascii` - ######## - #......# - #..HH..# - ######## - `.legend({ - "#": tile("tree"), - ".": tile("grass"), - H: tile("wall"), - }), - ) - .entities() - .done(); - -export default defineGame({ title: "POCKET TOWN", start: "littleroot:spawn", maps: [Littleroot] }); -``` - -Tile layers stay on the builder path so `.tileset(town).layer(...)` can type-check -legend tile names against the selected tileset. JSX is used one layer later for -build-time scene prefabs: pure components expand into static `Npc`/`Sign`/`Warp` -nodes and never ship to the cartridge. - -See `demo/game.tsx` (the town + route), `demo/assets.ts` (DSL declarations), and `demo/imagegen/` (the source sheet plus deterministic GBA 4bpp extractor). - -## Binary contract - -`spec/pjgb.ts` is the single source of truth for the **PJGB cartridge format**, the **script VM ISA**, and the **debug block**. `spec/gen-c.ts` generates `runtime/pjgb_gen.h` so the C runtime can never drift from the TS compiler (mirrors the repo's `spec/gen-rust.ts` convention). The runtime reads fixed-width tables and offsets — it never parses JSON. - -## The GBA runtime (`runtime/`) - -A small, no-allocation native engine in C: bare-metal `crt0.s` + `gba.ld`, a chunk loader, Mode-0 tiled BG + hardware-sprite OAM with VBlank DMA, grid movement/collision, a suspendable stack-VM (`script_vm.c`), and a subpixel-covered tile textbox/choice menu. It writes live game state into a fixed EWRAM debug block so the emulator harness can assert without symbols. Cross-compiles with `arm-none-eabi-gcc`; boots in mGBA (and is structured for real hardware, pending a Nintendo-logo header pass — see design §26.6). - -## Build & test - -```bash -# prerequisites: bun, arm-none-eabi-gcc + binutils, mgba (libmgba) -bun aot/spec/gen-c.ts # regenerate runtime/pjgb_gen.h -bash aot/test/harness/build.sh # build the headless mGBA runner (once) -cd aot -bun run build # refresh imagegen assets + build ROM -bun run test # refresh assets + run the headless mGBA E2E suite -``` - -Outputs: `dist/pocket-town.gba`, `.pjgb` (cartridge blob), `.ir.json` (inspectable IR), `.debug.json` (flag/text/map symbol map for the harness). - -## v1 scope & follow-ups - -Deliberately narrow (design §5, §26): tile-based overworld with scripts. v1 uses 8×8 BG tiles (16×16 metatiles are a documented follow-up), one tileset per game, 16×16 sprites, ≤32×32 maps (single screenblock), and stubbed `battle`/`giveItem`. Not yet: TMX/Aseprite import, audio, save media, and the real-hardware header/logo pass. diff --git a/aot/compiler/bake.ts b/aot/compiler/bake.ts deleted file mode 100644 index f823a16..0000000 --- a/aot/compiler/bake.ts +++ /dev/null @@ -1,119 +0,0 @@ -// aot/compiler/bake.ts — Stage 7a: lower tilesets/sprites/font to GBA 4bpp -// tiles + BGR555 palettes. Fills ctx.bgTiles/objTiles/palettes/tileNameToId/ -// spriteProtos/fontBase/boxTile. - -import { rgb555 } from "../spec/pjgb.ts"; -import { FIRST_CHAR, LAST_CHAR, glyphPixels } from "./font.ts"; -import type { Ctx } from "./context.ts"; -import type { Registry } from "../dsl/index.ts"; - -// GBA 4bpp tile: 32 bytes, 4 bytes/row, low nibble = left pixel. -export function tile4(px: number[]): Uint8Array { - const out = new Uint8Array(32); - for (let row = 0; row < 8; row++) { - for (let c = 0; c < 4; c++) { - const lo = px[row * 8 + c * 2] & 0xf; - const hi = px[row * 8 + c * 2 + 1] & 0xf; - out[row * 4 + c] = lo | (hi << 4); - } - } - return out; -} - -function parseRows(rows: readonly string[], w: number, h: number): number[] { - if (rows.length !== h) throw new Error(`tile grid: expected ${h} rows, got ${rows.length}`); - const px: number[] = []; - for (let y = 0; y < h; y++) { - const r = rows[y]; - if (r.length !== w) throw new Error(`tile grid row ${y}: expected ${w} cols, got ${r.length} ("${r}")`); - for (let x = 0; x < w; x++) px.push(parseInt(r[x], 16) & 0xf); - } - return px; -} - -// Textbox palette (BG bank 15): 1..5 are subpixel coverage ink shades, -// 6 is the opaque textbox background. -const TEXT_INK_START = 1; -const TEXT_INK_LEVELS = 5; -const TEXT_BG = 6; - -export function bake(ctx: Ctx, registry: Registry): void { - const game = registry.game!; - // v1: every map shares one tileset. - const tilesetNames = new Set(registry.maps.map((m) => m.tileset)); - if (tilesetNames.size !== 1) { - throw new Error(`v1 supports one tileset per game (found: ${[...tilesetNames].join(", ")})`); - } - const tileset = registry.tilesets.get([...tilesetNames][0]); - if (!tileset) throw new Error(`tileset "${[...tilesetNames][0]}" not defined`); - - // --- BG tiles: blank, tileset tiles, font glyphs, box fill --- - ctx.bgTiles.push(tile4(new Array(64).fill(0))); // id 0 blank - for (const [name, decl] of Object.entries(tileset.tiles)) { - const px = parseRows(decl.px, 8, 8); - ctx.tileNameToId.set(name, ctx.bgTiles.length); - ctx.bgTiles.push(tile4(px)); - } - - ctx.fontBase = ctx.bgTiles.length; - for (let ch = FIRST_CHAR; ch <= LAST_CHAR; ch++) { - ctx.bgTiles.push(tile4(glyphPixels(ch, TEXT_INK_START, TEXT_BG, TEXT_INK_LEVELS))); - } - ctx.boxTile = ctx.bgTiles.length; - ctx.bgTiles.push(tile4(new Array(64).fill(TEXT_BG))); - - // --- BG palette: bank 0 = tileset; bank 15 = textbox --- - tileset.palette.forEach((rgb, i) => { - if (i < 16) ctx.bgPalette[i] = rgb555(rgb[0], rgb[1], rgb[2]); - }); - ctx.bgPalette[240 + 0] = rgb555(0, 0, 0); - ctx.bgPalette[240 + 1] = rgb555(76, 88, 132); - ctx.bgPalette[240 + 2] = rgb555(116, 128, 168); - ctx.bgPalette[240 + 3] = rgb555(160, 170, 204); - ctx.bgPalette[240 + 4] = rgb555(206, 214, 238); - ctx.bgPalette[240 + 5] = rgb555(248, 248, 248); - ctx.bgPalette[240 + TEXT_BG] = rgb555(24, 32, 72); - - // --- sprites: OBJ tiles + palette bank per sprite --- - let spriteIdx = 0; - for (const [name, decl] of registry.sprites) { - const [w, h] = decl.size; - if (w !== 16 || h !== 16) throw new Error(`v1 sprites must be 16x16 ("${name}" is ${w}x${h})`); - // v1 gives each sprite its own OBJ palette bank; hardware has only 16. - if (spriteIdx >= 16) throw new Error(`v1 supports at most 16 sprites (one OBJ palette bank each); "${name}" is #${spriteIdx}`); - const palbank = spriteIdx; // one OBJ palette bank per sprite - decl.palette.forEach((rgb, i) => { - if (i < 16) ctx.objPalette[palbank * 16 + i] = rgb555(rgb[0], rgb[1], rgb[2]); - }); - const tileBase = ctx.objTiles.length; - const dirs = ["down", "up", "left", "right"] as const; - const frames = decl.facings.down.length; - for (const d of dirs) { - const fr = decl.facings[d]; - if (fr.length !== frames) throw new Error(`sprite "${name}" facing ${d}: frame count mismatch`); - for (const frame of fr) { - const grid = parseRows(frame, 16, 16); - // split 16x16 into 4 tiles: TL, TR, BL, BR (1D OBJ mapping order) - for (const [ox, oy] of [ - [0, 0], - [8, 0], - [0, 8], - [8, 8], - ]) { - const t: number[] = []; - for (let y = 0; y < 8; y++) for (let x = 0; x < 8; x++) t.push(grid[(oy + y) * 16 + (ox + x)]); - ctx.objTiles.push(tile4(t)); - } - } - } - ctx.spriteProtos.push({ name, id: spriteIdx, w, h, palbank, frames, tileBase }); - ctx.spriteIds.set(name, spriteIdx); - spriteIdx++; - } - - // Pre-seed declared flags/items/battles/vars so ids are stable. - (game.flags ?? []).forEach((f) => ctx.flagId(f)); - (game.vars ?? []).forEach((v) => ctx.varIdOf(v)); - (game.items ?? []).forEach((it) => ctx.items.intern(it)); - (game.battles ?? []).forEach((b) => ctx.battles.intern(b)); -} diff --git a/aot/compiler/cli.ts b/aot/compiler/cli.ts deleted file mode 100644 index 4740f01..0000000 --- a/aot/compiler/cli.ts +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env bun -// aot/compiler/cli.ts — `pocket-aot build src/game.tsx --out dist/game.gba` -// (design §21). Also emits ir.json / debug.json for the emulator test harness. - -import { resolve } from "node:path"; -import { compile, debugInfo, irJson } from "./index.ts"; -import { buildRom } from "./rom.ts"; - -function usage(): never { - console.error("usage: pocket-aot build [--out ] [--no-rom]"); - process.exit(2); -} - -const [cmd, entryArg, ...rest] = process.argv.slice(2); -if (cmd !== "build" || !entryArg) usage(); - -let out = "aot/dist/pocket-town.gba"; -let doRom = true; -for (let i = 0; i < rest.length; i++) { - if (rest[i] === "--out") out = rest[++i]; - else if (rest[i] === "--no-rom") doRom = false; - else usage(); -} - -const entry = resolve(entryArg); -const outAbs = resolve(out); -const base = outAbs.replace(/\.gba$/, ""); - -const t0 = performance.now(); -const built = await compile(entry); -const di = debugInfo(built) as Record; - -await Bun.write(base + ".ir.json", JSON.stringify(irJson(built), null, 2)); -await Bun.write(base + ".debug.json", JSON.stringify(di, null, 2)); -await Bun.write(base + ".pjgb", built.blob); - -console.log(`PocketJS-AOT build: ${built.game.title}`); -console.log(` maps: ${built.model.maps.length}`); -console.log(` scripts: ${built.ctx.scripts.length} texts: ${built.ctx.texts.size} flags: ${built.ctx.flags.size}`); -console.log(` BG tiles: ${built.ctx.bgTiles.length} OBJ tiles: ${built.ctx.objTiles.length} sprites: ${built.ctx.spriteProtos.length}`); -console.log(` cartridge: ${built.blob.length} bytes`); - -if (doRom) { - const r = await buildRom(built.blob, outAbs); - console.log(` ROM: ${r.gba} (${r.size} bytes)`); -} -console.log(` done in ${(performance.now() - t0).toFixed(0)}ms`); diff --git a/aot/compiler/context.ts b/aot/compiler/context.ts deleted file mode 100644 index 62d8534..0000000 --- a/aot/compiler/context.ts +++ /dev/null @@ -1,87 +0,0 @@ -// aot/compiler/context.ts — shared compile state (interned banks + id maps) -// threaded through bake -> model -> script -> ir. - -class NameInterner { - private m = new globalThis.Map(); - private _list: string[] = []; - intern(name: string): number { - let id = this.m.get(name); - if (id === undefined) { - id = this._list.length; - this.m.set(name, id); - this._list.push(name); - } - return id; - } - get(name: string): number | undefined { - return this.m.get(name); - } - list(): readonly string[] { - return this._list; - } - get size(): number { - return this._list.length; - } -} - -export interface SpriteProto { - name: string; - id: number; - w: number; - h: number; - palbank: number; - frames: number; - tileBase: number; // OBJ tile index of first tile -} - -export interface ScriptOut { - id: number; - name: string; - bytecode: number[]; -} - -export class Ctx { - texts = new NameInterner(); - flags = new NameInterner(); - vars = new NameInterner(); - items = new NameInterner(); - battles = new NameInterner(); - - // filled by bake - bgPalette = new Uint16Array(256); - objPalette = new Uint16Array(256); - bgTiles: Uint8Array[] = []; - objTiles: Uint8Array[] = []; - tileNameToId = new globalThis.Map(); - spriteProtos: SpriteProto[] = []; - spriteIds = new globalThis.Map(); - fontBase = 0; - boxTile = 0; - - // filled by model - mapIndex = new globalThis.Map(); - - // filled by script (+ synthetic sign scripts) - scripts: ScriptOut[] = []; - - internText(s: string): number { - return this.texts.intern(s); - } - flagId(name: string): number { - return this.flags.intern(name); - } - varIdOf(name: string): number { - return this.vars.intern(name); - } - spriteId(name: string): number { - const id = this.spriteIds.get(name); - if (id === undefined) throw new Error(`unknown sprite "${name}"`); - return id; - } - /** Allocate the next script id (dense, appended after AST scripts). */ - addScript(name: string, bytecode: number[]): number { - const id = this.scripts.length; - this.scripts.push({ id, name, bytecode }); - return id; - } -} diff --git a/aot/compiler/evaluate.ts b/aot/compiler/evaluate.ts deleted file mode 100644 index 7598ec8..0000000 --- a/aot/compiler/evaluate.ts +++ /dev/null @@ -1,112 +0,0 @@ -// aot/compiler/evaluate.ts — Stage 3: static declaration evaluation (design §11.3). -// -// The static/JSX zone is EXECUTED at build time; the residual script zone is -// NOT. We bridge the two by rewriting every `script(function*(){...})` call to -// `script()` (recording the generator AST for the residualizer), then -// transpiling + importing the rewritten module so the DSL builders fill the -// shared REGISTRY. - -import ts from "typescript"; -import { pathToFileURL } from "node:url"; - -const DSL_DIR = new URL("../dsl", import.meta.url).pathname; // for jsxImportSource -const DSL_INDEX = new URL("../dsl/index.ts", import.meta.url).pathname; - -export interface ScriptSite { - id: number; - body: ts.FunctionExpression | ts.ArrowFunction; - file: ts.SourceFile; -} - -export interface EvalResult { - registry: import("../dsl/index.ts").Registry; - scripts: ScriptSite[]; - checker: ts.TypeChecker; -} - -/** Find `script(function*(){...})` calls; returns them in source order. */ -function findScriptCalls(sf: ts.SourceFile): ts.CallExpression[] { - const out: ts.CallExpression[] = []; - const visit = (n: ts.Node): void => { - if ( - ts.isCallExpression(n) && - ts.isIdentifier(n.expression) && - n.expression.text === "script" && - n.arguments.length === 1 - ) { - out.push(n); - return; // do not recurse into the generator body (no nested script()) - } - ts.forEachChild(n, visit); - }; - visit(sf); - // deterministic: by start position - out.sort((a, b) => a.getStart() - b.getStart()); - return out; -} - -export async function evaluateGame(entryPath: string): Promise { - const source = await Bun.file(entryPath).text(); - const sf = ts.createSourceFile(entryPath, source, ts.ScriptTarget.ES2020, true, ts.ScriptKind.TSX); - - const calls = findScriptCalls(sf); - const scripts: ScriptSite[] = []; - // Rewrite generator args -> id numbers, from the end to preserve offsets. - let rewritten = source; - const edits: { start: number; end: number; text: string }[] = []; - calls.forEach((call, id) => { - const arg = call.arguments[0]; - if (!ts.isFunctionExpression(arg) && !ts.isArrowFunction(arg)) { - throw new Error(`script() argument must be a function expression (script #${id})`); - } - scripts.push({ id, body: arg, file: sf }); - edits.push({ start: arg.getStart(sf), end: arg.getEnd(), text: String(id) }); - }); - edits.sort((a, b) => b.start - a.start); - for (const e of edits) rewritten = rewritten.slice(0, e.start) + e.text + rewritten.slice(e.end); - - // Point the @pocketjs/aot import at the concrete DSL module so the executed - // module shares REGISTRY with the compiler. - rewritten = rewritten.replace(/(["'])@pocketjs\/aot\1/g, JSON.stringify(DSL_INDEX)); - - const js = ts.transpileModule(rewritten, { - fileName: entryPath, - compilerOptions: { - jsx: ts.JsxEmit.ReactJSX, - jsxImportSource: DSL_DIR, - module: ts.ModuleKind.ESNext, - target: ts.ScriptTarget.ES2020, - esModuleInterop: true, - }, - }).outputText - .replace(/(["'])@pocketjs\/aot\/jsx-runtime\1/g, JSON.stringify(DSL_DIR + "/jsx-runtime.ts")) - .replace(/(["'])@pocketjs\/aot\/jsx-dev-runtime\1/g, JSON.stringify(DSL_DIR + "/jsx-dev-runtime.ts")); - - // Execute: write to a sibling temp file so relative/abs imports resolve, then - // import it. Import the DSL via the SAME absolute path to share REGISTRY. - const dsl = (await import(DSL_INDEX)) as typeof import("../dsl/index.ts"); - dsl.__resetRegistry(); - - const tmp = entryPath + `.__pjgb.${process.pid}.mjs`; - await Bun.write(tmp, js); - try { - await import(pathToFileURL(tmp).href + `?t=${Date.now()}`); - } finally { - await Bun.file(tmp) - .exists() - .then((e) => (e ? Bun.$`rm -f ${tmp}`.quiet() : null)) - .catch(() => {}); - } - - const registry = dsl.__getRegistry(); - if (!registry.game) throw new Error("no defineGame() found in " + entryPath); - - // A throwaway program just to expose a checker for the residualizer. - const program = ts.createProgram([entryPath], { - jsx: ts.JsxEmit.Preserve, - allowJs: true, - noEmit: true, - skipLibCheck: true, - }); - return { registry, scripts, checker: program.getTypeChecker() }; -} diff --git a/aot/compiler/font.ts b/aot/compiler/font.ts deleted file mode 100644 index 026e01f..0000000 --- a/aot/compiler/font.ts +++ /dev/null @@ -1,183 +0,0 @@ -// aot/compiler/font.ts — compile-time Inter glyph rasterizer for GBA dialogue. -// -// Runtime text remains tile-based, but the tile pixels are no longer a 1-bit -// bitmap font. Each glyph is rasterized from Inter outlines with horizontally -// biased supersampling, then quantized into several palette coverage levels. - -import { readFileSync } from "node:fs"; -import { parse as parseFont, type Font, type Path } from "opentype.js"; - -/** First encoded code point (space). */ -export const FIRST_CHAR = 0x20; -/** Last encoded code point (tilde). */ -export const LAST_CHAR = 0x7e; -/** Glyph dimensions: one GBA tile. */ -export const GLYPH_WIDTH = 8; -export const GLYPH_HEIGHT = 8; -/** Number of glyphs in the table. */ -export const GLYPH_COUNT = LAST_CHAR - FIRST_CHAR + 1; - -const FONT_PATH = new URL("../../assets/fonts/Inter-Bold.ttf", import.meta.url).pathname; -const FONT_SIZE = 7.8; -const BASELINE = 6.85; -const PEN_X = 0.25; -const CURVE_STEPS = 8; -const SS_X = 9; -const SS_Y = 3; - -type Pt = { x: number; y: number }; -type Contour = Pt[]; - -let font: Font | null = null; -const coverageCache = new Map>(); - -function loadFont(): Font { - if (!font) { - const buf = readFileSync(FONT_PATH); - const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - font = parseFont(ab); - } - return font; -} - -/** Flatten an opentype path (already in y-down px space) into closed contours. */ -function flatten(path: Path): Contour[] { - const contours: Contour[] = []; - let cur: Contour = []; - let sx = 0; - let sy = 0; - let cx = 0; - let cy = 0; - const close = () => { - if (cur.length > 1) contours.push(cur); - cur = []; - }; - for (const cmd of path.commands) { - switch (cmd.type) { - case "M": - close(); - sx = cx = cmd.x; - sy = cy = cmd.y; - cur.push({ x: cx, y: cy }); - break; - case "L": - cx = cmd.x; - cy = cmd.y; - cur.push({ x: cx, y: cy }); - break; - case "Q": - for (let i = 1; i <= CURVE_STEPS; i++) { - const t = i / CURVE_STEPS; - const u = 1 - t; - cur.push({ - x: u * u * cx + 2 * u * t * cmd.x1 + t * t * cmd.x, - y: u * u * cy + 2 * u * t * cmd.y1 + t * t * cmd.y, - }); - } - cx = cmd.x; - cy = cmd.y; - break; - case "C": - for (let i = 1; i <= CURVE_STEPS; i++) { - const t = i / CURVE_STEPS; - const u = 1 - t; - cur.push({ - x: u * u * u * cx + 3 * u * u * t * cmd.x1 + 3 * u * t * t * cmd.x2 + t * t * t * cmd.x, - y: u * u * u * cy + 3 * u * u * t * cmd.y1 + 3 * u * t * t * cmd.y2 + t * t * t * cmd.y, - }); - } - cx = cmd.x; - cy = cmd.y; - break; - case "Z": - cur.push({ x: sx, y: sy }); - cx = sx; - cy = sy; - close(); - break; - } - } - close(); - return contours; -} - -function rasterize(contours: Contour[]): Uint8Array { - const out = new Uint8Array(GLYPH_WIDTH * GLYPH_HEIGHT); - if (contours.length === 0) return out; - - const sw = GLYPH_WIDTH * SS_X; - const samplesPerPixel = SS_X * SS_Y; - const counts = new Uint16Array(GLYPH_WIDTH); - const xs: number[] = []; - for (let row = 0; row < GLYPH_HEIGHT; row++) { - counts.fill(0); - for (let sub = 0; sub < SS_Y; sub++) { - const y = row + (sub + 0.5) / SS_Y; - xs.length = 0; - for (const c of contours) { - for (let i = 0; i < c.length - 1; i++) { - const p0 = c[i]; - const p1 = c[i + 1]; - if ((p0.y <= y && p1.y > y) || (p1.y <= y && p0.y > y)) { - xs.push(p0.x + ((y - p0.y) * (p1.x - p0.x)) / (p1.y - p0.y)); - } - } - } - if (xs.length < 2) continue; - xs.sort((a, b) => a - b); - for (let k = 0; k + 1 < xs.length; k += 2) { - let s0 = Math.ceil(xs[k] * SS_X - 0.5); - let s1 = Math.floor(xs[k + 1] * SS_X - 0.5); - if (s0 < 0) s0 = 0; - if (s1 >= sw) s1 = sw - 1; - for (let s = s0; s <= s1; s++) { - const center = (s + 0.5) / SS_X; - if (center >= xs[k] && center < xs[k + 1]) counts[(s / SS_X) | 0]++; - } - } - } - for (let col = 0; col < GLYPH_WIDTH; col++) { - out[row * GLYPH_WIDTH + col] = Math.round((counts[col] * 255) / samplesPerPixel); - } - } - return out; -} - -function glyphCoverage(c: number): Uint8Array { - const cached = coverageCache.get(c); - if (cached) return cached; - - let coverage: Uint8Array = new Uint8Array(GLYPH_WIDTH * GLYPH_HEIGHT); - if (c >= FIRST_CHAR && c <= LAST_CHAR && c !== 0x20) { - const f = loadFont(); - const glyphIndex = f.charToGlyphIndex(String.fromCharCode(c)); - if (glyphIndex > 0) { - const glyph = f.glyphs.get(glyphIndex); - coverage = rasterize(flatten(glyph.getPath(PEN_X, BASELINE, FONT_SIZE))); - } - } - coverageCache.set(c, coverage); - return coverage; -} - -/** - * Rasterize char code `c` into an 8x8 GBA palette-index cell. - * - * `inkStart` is the first coverage shade. `levels` shades are used in ascending - * order from faint edge coverage to full ink. `bg` fills zero-coverage pixels. - */ -export function glyphPixels(c: number, inkStart: number, bg: number, levels = 1): number[] { - const cov = glyphCoverage(c); - const out = new Array(GLYPH_WIDTH * GLYPH_HEIGHT); - for (let i = 0; i < out.length; i++) { - const v = cov[i]; - if (v === 0 || levels <= 0) { - out[i] = bg; - } else { - const boosted = Math.pow(v / 255, 0.68); - const shade = Math.min(levels - 1, Math.max(0, Math.ceil(boosted * levels) - 1)); - out[i] = inkStart + shade; - } - } - return out; -} diff --git a/aot/compiler/index.ts b/aot/compiler/index.ts deleted file mode 100644 index a6d9b61..0000000 --- a/aot/compiler/index.ts +++ /dev/null @@ -1,90 +0,0 @@ -// aot/compiler/index.ts — the @pocketjs/aot compile pipeline (design §11). -// Source TS/TSX -// -> evaluate (static JSX zone) -> Registry + script ASTs -// -> bake (assets) -> tiles/palettes/sprites/font -// -> script residualizer -> bytecode -// -> model -> concrete maps/actors/warps -// -> lower (+ validate) -> PJGB chunks -// -> pack -> cartridge blob - -import { evaluateGame } from "./evaluate.ts"; -import { Ctx } from "./context.ts"; -import { bake } from "./bake.ts"; -import { compileScript } from "./script.ts"; -import { buildModel, type GameModel } from "./model.ts"; -import { lower } from "./lower.ts"; -import { packCart, type Chunk } from "./pack.ts"; -import { DBG, DEBUG_ADDR } from "../spec/pjgb.ts"; -import type { GameDecl } from "../dsl/index.ts"; - -export interface CompileOutput { - ctx: Ctx; - model: GameModel; - chunks: Chunk[]; - blob: Uint8Array; - game: GameDecl; -} - -export async function compile(entry: string): Promise { - const ev = await evaluateGame(entry); - const ctx = new Ctx(); - bake(ctx, ev.registry); - - // AST scripts occupy ids 0..N-1 (matching the ScriptRefs the actors carry). - for (const site of ev.scripts) { - const bc = compileScript(site, ctx); - const id = ctx.addScript(`script_${site.id}`, bc); - if (id !== site.id) throw new Error(`internal: script id ${id} != site ${site.id}`); - } - - const model = buildModel(ctx, ev.registry); // sign scripts append at ids N+ - const chunks = lower(ctx, model, ev.registry.game!); - const blob = packCart(chunks); - return { ctx, model, chunks, blob, game: ev.registry.game! }; -} - -/** Debug map for the emulator test harness: names -> ids/addresses. */ -export function debugInfo(out: CompileOutput): unknown { - const { ctx, model } = out; - const flags: Record = {}; - ctx.flags.list().forEach((name, id) => { - flags[name] = { id, byteAddr: DEBUG_ADDR + DBG.FLAGS + (id >> 3), bit: id & 7 }; - }); - const maps: Record = {}; - ctx.mapIndex.forEach((i, name) => (maps[name] = i)); - return { - title: out.game.title, - start: model.start, - debugAddr: DEBUG_ADDR, - fields: DBG, - flags, - maps, - texts: ctx.texts.list(), - scripts: ctx.scripts.map((s) => ({ id: s.id, name: s.name, bytes: s.bytecode.length })), - sprites: ctx.spriteProtos, - bgTiles: ctx.bgTiles.length, - objTiles: ctx.objTiles.length, - blobSize: out.blob.length, - }; -} - -/** Compact IR snapshot for `dist/game.ir.json` (design §11.8). */ -export function irJson(out: CompileOutput): unknown { - return { - title: out.game.title, - start: out.model.start, - maps: out.model.maps.map((m) => ({ - name: m.name, - index: m.index, - size: [m.w, m.h], - actors: m.actors.map((a) => ({ name: a.name, at: [a.x, a.y], sprite: a.spriteId, onTalk: a.onTalk })), - warps: m.warps.map((w) => ({ at: [w.x, w.y], to: `${w.destMap}:${w.destEntrance}`, dest: [w.destMapIdx, w.destX, w.destY] })), - entrances: [...m.entrances.entries()], - })), - scripts: out.ctx.scripts.map((s) => ({ id: s.id, name: s.name, bytes: s.bytecode.length })), - texts: out.ctx.texts.list(), - flags: out.ctx.flags.list(), - }; -} - -export { packCart }; diff --git a/aot/compiler/lower.ts b/aot/compiler/lower.ts deleted file mode 100644 index d9bbc50..0000000 --- a/aot/compiler/lower.ts +++ /dev/null @@ -1,136 +0,0 @@ -// aot/compiler/lower.ts — Stage 6+7: validate the Game IR, then lower it to -// PJGB chunks (design §11.6-11.7). The GameModel + Ctx together are the IR. - -import { - BUDGET, - ByteWriter, - CHUNK, - GAME_TITLE_LEN, -} from "../spec/pjgb.ts"; -import type { Ctx } from "./context.ts"; -import type { GameModel } from "./model.ts"; -import type { GameDecl } from "../dsl/index.ts"; -import type { Chunk } from "./pack.ts"; - -export function validate(ctx: Ctx, model: GameModel): void { - const err: string[] = []; - if (model.maps.length > BUDGET.MAX_MAPS) err.push(`too many maps (${model.maps.length} > ${BUDGET.MAX_MAPS})`); - if (ctx.spriteProtos.length > BUDGET.MAX_SPRITES) err.push(`too many sprites`); - if (ctx.flags.size > BUDGET.MAX_FLAGS) err.push(`too many flags (${ctx.flags.size} > ${BUDGET.MAX_FLAGS})`); - if (ctx.vars.size > BUDGET.MAX_VARS) err.push(`too many vars (${ctx.vars.size} > ${BUDGET.MAX_VARS})`); - if (ctx.texts.size > BUDGET.MAX_TEXTS) err.push(`too many texts`); - if (ctx.scripts.length > BUDGET.MAX_SCRIPTS) err.push(`too many scripts`); - if (ctx.bgTiles.length > BUDGET.MAX_BG_TILES) err.push(`BG tiles ${ctx.bgTiles.length} > ${BUDGET.MAX_BG_TILES}`); - if (ctx.objTiles.length > BUDGET.MAX_OBJ_TILES) err.push(`OBJ tiles ${ctx.objTiles.length} > ${BUDGET.MAX_OBJ_TILES}`); - for (const m of model.maps) { - if (m.w > 32 || m.h > 32) err.push(`map "${m.name}" ${m.w}x${m.h} exceeds 32x32 (v1 single-screenblock limit)`); - if (m.actors.length > BUDGET.MAX_ACTORS_PER_MAP) err.push(`map "${m.name}" has ${m.actors.length} actors`); - for (const a of m.actors) { - if (a.onTalk !== 0xffff && a.onTalk >= ctx.scripts.length) err.push(`actor "${a.name}" -> bad script ${a.onTalk}`); - } - for (const wp of m.warps) { - if (wp.destMapIdx === undefined) err.push(`unresolved warp on "${m.name}"`); - } - } - if (err.length) throw new Error("IR validation failed:\n - " + err.join("\n - ")); -} - -function u16buf(a: Uint16Array): Uint8Array { - const w = new ByteWriter(); - for (const v of a) w.u16(v); - return w.toUint8Array(); -} -function catTiles(ts: Uint8Array[]): Uint8Array { - const out = new Uint8Array(ts.length * 32); - ts.forEach((t, i) => out.set(t, i * 32)); - return out; -} - -function gameHeader(ctx: Ctx, model: GameModel, game: GameDecl): Uint8Array { - const w = new ByteWriter(); - w.ascii(game.title, GAME_TITLE_LEN); - w.u8(model.start.map).u8(model.start.dir).u16(model.start.x).u16(model.start.y); - w.u8(model.maps.length).u8(ctx.spriteProtos.length); - w.u16(ctx.flags.size).u16(ctx.texts.size).u16(ctx.scripts.length); - w.u16(ctx.fontBase).u16(ctx.boxTile).u16(0); - return w.toUint8Array(); -} - -function spriteTable(ctx: Ctx): Uint8Array { - const w = new ByteWriter(); - for (const s of ctx.spriteProtos) { - w.u16(s.tileBase).u8(s.w).u8(s.h).u8(s.palbank).u8(s.frames).u16(0); - } - return w.toUint8Array(); -} - -function mapChunk(m: GameModel["maps"][number]): Uint8Array { - const HDR = 28; - const tilesOff = HDR; - const collOff = tilesOff + m.tiles.length * 2; - const actorsOff = (collOff + m.collision.length + 3) & ~3; - const warpsOff = actorsOff + m.actors.length * 12; - const w = new ByteWriter(); - w.u16(m.w).u16(m.h).u16(m.actors.length).u16(m.warps.length); - w.u8(m.palbank).u8(0xff).u16(0); - w.u32(tilesOff).u32(collOff).u32(actorsOff).u32(warpsOff); - for (const t of m.tiles) w.u16(t); - for (const c of m.collision) w.u8(c); - w.align4(); - for (const a of m.actors) { - w.u16(a.x).u16(a.y).u8(a.spriteId).u8(a.facing).u8(a.movement).u8(a.flags).u16(a.onTalk).u16(0); - } - for (const wp of m.warps) { - w.u16(wp.x).u16(wp.y).u8(wp.destMapIdx!).u8(wp.destDir!).u16(wp.destX!).u16(wp.destY!).u16(0); - } - return w.toUint8Array(); -} - -function textBank(ctx: Ctx): Uint8Array { - const strs = ctx.texts.list(); - const enc = strs.map((s) => { - const b = new Uint8Array(s.length + 1); - for (let i = 0; i < s.length; i++) b[i] = s.charCodeAt(i) & 0x7f; - return b; - }); - const headerSize = 4 + strs.length * 4; - let cur = headerSize; - const offsets = enc.map((b) => { - const o = cur; - cur += b.length; - return o; - }); - const w = new ByteWriter(); - w.u16(strs.length).u16(0); - for (const o of offsets) w.u32(o); - for (const b of enc) w.bytes(b); - return w.toUint8Array(); -} - -function scriptChunks(ctx: Ctx): { code: Uint8Array; table: Uint8Array } { - const code = new ByteWriter(); - const table = new ByteWriter(); - for (const s of ctx.scripts) { - table.u32(code.length); - code.bytes(s.bytecode); - } - return { code: code.toUint8Array(), table: table.toUint8Array() }; -} - -export function lower(ctx: Ctx, model: GameModel, game: GameDecl): Chunk[] { - validate(ctx, model); - const { code, table } = scriptChunks(ctx); - const chunks: Chunk[] = [ - { kind: CHUNK.GAME, id: 0, data: gameHeader(ctx, model, game) }, - { kind: CHUNK.PAL_BG, id: 0, data: u16buf(ctx.bgPalette) }, - { kind: CHUNK.PAL_OBJ, id: 0, data: u16buf(ctx.objPalette) }, - { kind: CHUNK.TILES_BG, id: 0, data: catTiles(ctx.bgTiles) }, - { kind: CHUNK.TILES_OBJ, id: 0, data: catTiles(ctx.objTiles) }, - { kind: CHUNK.SPRITE_TABLE, id: 0, data: spriteTable(ctx) }, - { kind: CHUNK.TEXT_BANK, id: 0, data: textBank(ctx) }, - { kind: CHUNK.SCRIPT_CODE, id: 0, data: code }, - { kind: CHUNK.SCRIPT_TABLE, id: 0, data: table }, - ]; - for (const m of model.maps) chunks.push({ kind: CHUNK.MAP, id: m.index, data: mapChunk(m) }); - return chunks; -} diff --git a/aot/compiler/model.ts b/aot/compiler/model.ts deleted file mode 100644 index 278f961..0000000 --- a/aot/compiler/model.ts +++ /dev/null @@ -1,178 +0,0 @@ -// aot/compiler/model.ts — Stage 3b: normalize the executed JSX scene trees into -// a concrete GameModel (tile grids, collision, actors, warps, entrances). Signs -// expand into a solid tile + a synthetic one-line text script (design §11.3). - -import { DIR_NAMES, MOVE_NAMES, OP, ACTOR_FLAG, DIR } from "../spec/pjgb.ts"; -import type { Ctx } from "./context.ts"; -import type { PjgbNode, Registry } from "../dsl/index.ts"; - -const NO_SPRITE = 0xff; - -export interface ActorModel { - name: string; - x: number; - y: number; - spriteId: number; - facing: number; - movement: number; - flags: number; - onTalk: number; // script id or 0xffff -} -export interface WarpModel { - x: number; - y: number; - destMap: string; - destEntrance: string; - // resolved in a second pass: - destMapIdx?: number; - destX?: number; - destY?: number; - destDir?: number; -} -export interface MapModel { - name: string; - index: number; - w: number; - h: number; - tiles: number[]; - collision: number[]; - palbank: number; - actors: ActorModel[]; - warps: WarpModel[]; - entrances: globalThis.Map; -} -export interface GameModel { - maps: MapModel[]; - start: { map: number; x: number; y: number; dir: number }; -} - -const prop = (n: PjgbNode, k: string): unknown => n.props[k]; -const at = (n: PjgbNode): [number, number] => { - const a = n.props.at as [number, number] | undefined; - if (!a) throw new Error(`<${n.host}> missing at={[x,y]}`); - return a; -}; -const dirOf = (v: unknown, dflt = DIR.DOWN): number => - v == null ? dflt : DIR_NAMES[String(v)] ?? dflt; - -export function buildModel(ctx: Ctx, registry: Registry): GameModel { - const game = registry.game!; - registry.maps.forEach((m, i) => ctx.mapIndex.set(m.name, i)); - - const maps: MapModel[] = registry.maps.map((mapDecl, index) => { - const tileset = registry.tilesets.get(mapDecl.tileset)!; - const children = mapDecl.root.children; - const layer = children.find((c) => c.host === "Layer"); - if (!layer) throw new Error(`map "${mapDecl.name}" has no `); - - const rows = layer.props.rows as string[]; - const legend = layer.props.legend as Record; - const h = rows.length; - const w = rows[0].length; - const tiles: number[] = new Array(w * h).fill(0); - const collision: number[] = new Array(w * h).fill(0); - for (let y = 0; y < h; y++) { - if (rows[y].length !== w) throw new Error(`map "${mapDecl.name}" row ${y} width ${rows[y].length} != ${w}`); - for (let x = 0; x < w; x++) { - const name = legend[rows[y][x]]; - if (!name) throw new Error(`map "${mapDecl.name}": legend has no entry for "${rows[y][x]}"`); - const id = ctx.tileNameToId.get(name); - if (id === undefined) throw new Error(`map "${mapDecl.name}": tile "${name}" not in tileset`); - tiles[y * w + x] = id; - collision[y * w + x] = tileset.tiles[name].solid ? 1 : 0; - } - } - - const entrances = new globalThis.Map(); - const actors: ActorModel[] = []; - const warps: WarpModel[] = []; - - for (const c of children) { - switch (c.host) { - case "Layer": - break; - case "PlayerSpawn": - case "Entrance": { - const [x, y] = at(c); - const id = (prop(c, "id") as string) ?? (c.host === "PlayerSpawn" ? "spawn" : "entrance"); - entrances.set(id, { x, y, dir: dirOf(prop(c, "facing")) }); - break; - } - case "Npc": { - const [x, y] = at(c); - const ref = prop(c, "onTalk") as { __pjgbScript: number } | undefined; - actors.push({ - name: (prop(c, "id") as string) ?? `npc_${actors.length}`, - x, - y, - spriteId: ctx.spriteId(String(prop(c, "sprite"))), - facing: dirOf(prop(c, "facing")), - movement: MOVE_NAMES[String(prop(c, "movement") ?? "static")] ?? 0, - flags: ACTOR_FLAG.SOLID, - onTalk: ref ? ref.__pjgbScript : 0xffff, - }); - break; - } - case "Sign": { - const [x, y] = at(c); - const text = String(prop(c, "text") ?? ""); - // synthetic script: TEXT ; END - const textId = ctx.internText(text); - const bc = [OP.TEXT, textId & 0xff, (textId >> 8) & 0xff, OP.END]; - const sid = ctx.addScript(`sign_${index}_${x}_${y}`, bc); - const signTile = ctx.tileNameToId.get("sign"); - if (signTile !== undefined) { - tiles[y * w + x] = signTile; - } - collision[y * w + x] = 1; - actors.push({ - name: `sign_${x}_${y}`, - x, - y, - spriteId: NO_SPRITE, - facing: DIR.DOWN, - movement: 0, - flags: ACTOR_FLAG.SOLID, - onTalk: sid, - }); - break; - } - case "Warp": { - const [x, y] = at(c); - const to = String(prop(c, "to")); - const [destMap, destEntrance] = to.split(":"); - warps.push({ x, y, destMap, destEntrance: destEntrance ?? "spawn" }); - break; - } - default: - throw new Error(`map "${mapDecl.name}": unsupported element <${c.host}>`); - } - } - - return { name: mapDecl.name, index, w, h, tiles, collision, palbank: 0, actors, warps, entrances }; - }); - - // resolve warps against destination entrances - const byName = new globalThis.Map(maps.map((m) => [m.name, m])); - for (const m of maps) { - for (const wp of m.warps) { - const dm = byName.get(wp.destMap); - if (!dm) throw new Error(`warp on "${m.name}" -> unknown map "${wp.destMap}"`); - const ent = dm.entrances.get(wp.destEntrance); - if (!ent) throw new Error(`warp on "${m.name}" -> "${wp.destMap}" has no entrance "${wp.destEntrance}"`); - wp.destMapIdx = dm.index; - wp.destX = ent.x; - wp.destY = ent.y; - wp.destDir = ent.dir; - } - } - - // resolve start - const [startMap, startEnt] = game.start.split(":"); - const sm = byName.get(startMap); - if (!sm) throw new Error(`start map "${startMap}" not found`); - const se = sm.entrances.get(startEnt ?? "spawn"); - if (!se) throw new Error(`start "${game.start}": no entrance "${startEnt}"`); - - return { maps, start: { map: sm.index, x: se.x, y: se.y, dir: se.dir } }; -} diff --git a/aot/compiler/pack.ts b/aot/compiler/pack.ts deleted file mode 100644 index ebd7340..0000000 --- a/aot/compiler/pack.ts +++ /dev/null @@ -1,65 +0,0 @@ -// aot/compiler/pack.ts — assemble chunks into the PJGB container blob and emit -// it as a C byte array (gen_cart.c) for linking into the ROM. - -import { - ByteWriter, - PJGB_CHUNK_ENTRY_SIZE, - PJGB_HEADER_SIZE, - PJGB_MAGIC_BYTES, - PJGB_VERSION, -} from "../spec/pjgb.ts"; - -export interface Chunk { - kind: number; - id: number; - data: Uint8Array; -} - -const align4 = (n: number): number => (n + 3) & ~3; - -/** Pack chunks into a PJGB blob: [header][chunk table][chunk data...]. */ -export function packCart(chunks: Chunk[]): Uint8Array { - const tableOff = PJGB_HEADER_SIZE; - const dataStart = align4(tableOff + chunks.length * PJGB_CHUNK_ENTRY_SIZE); - - let off = dataStart; - const offsets = chunks.map((c) => { - const o = off; - off += align4(c.data.length); - return o; - }); - const total = off; - - const w = new ByteWriter(); - w.bytes(PJGB_MAGIC_BYTES).u16(PJGB_VERSION).u16(chunks.length).u32(tableOff).u32(total); - chunks.forEach((c, i) => { - w.u32(c.kind).u32(c.id).u32(offsets[i]).u32(c.data.length); - }); - w.align4(); - chunks.forEach((c) => { - w.bytes(c.data).align4(); - }); - - const out = w.toUint8Array(); - if (out.length !== total) { - throw new Error(`pack: size mismatch ${out.length} != ${total}`); - } - return out; -} - -/** Emit the blob as a linkable C source file. */ -export function emitCartC(blob: Uint8Array): string { - const rows: string[] = []; - for (let i = 0; i < blob.length; i += 16) { - const slice = Array.from(blob.slice(i, i + 16)).map((b) => `0x${b.toString(16).padStart(2, "0")}`); - rows.push(" " + slice.join(",") + ","); - } - return [ - "// GENERATED by @pocketjs/aot — the PJGB cartridge blob linked into the ROM.", - "const unsigned char __attribute__((aligned(4))) pjgb_cart[] = {", - ...rows, - "};", - `const unsigned int pjgb_cart_len = ${blob.length};`, - "", - ].join("\n"); -} diff --git a/aot/compiler/rom.ts b/aot/compiler/rom.ts deleted file mode 100644 index 57659fd..0000000 --- a/aot/compiler/rom.ts +++ /dev/null @@ -1,54 +0,0 @@ -// aot/compiler/rom.ts — Stage 8: link the PJGB blob into a real .gba ROM. -// Emits gen_cart.c, cross-compiles the fixed C runtime with arm-none-eabi-gcc, -// objcopies to a raw ROM, and patches the GBA header complement checksum. - -import { $ } from "bun"; -import { emitCartC } from "./pack.ts"; - -const ROOT = new URL("../..", import.meta.url).pathname; // repo root -const RT = ROOT + "aot/runtime"; -const DIST = ROOT + "aot/dist"; - -/** GBA header complement checksum over bytes 0xA0..0xBC, written at 0xBD. */ -function patchHeaderChecksum(rom: Uint8Array): void { - if (rom.length < 0xc0) throw new Error("ROM too small for a GBA header"); - let sum = 0; - for (let a = 0xa0; a <= 0xbc; a++) sum += rom[a]; - rom[0xbd] = (-(0x19 + sum)) & 0xff; -} - -export interface BuildRomResult { - gba: string; - elf: string; - size: number; -} - -export async function buildRom(blob: Uint8Array, outPath: string): Promise { - await Bun.write(RT + "/gen_cart.c", emitCartC(blob)); - - const elf = DIST + "/game.elf"; - const CFLAGS = [ - "-mcpu=arm7tdmi", - "-marm", - "-ffreestanding", - "-nostdlib", - "-O2", - "-fno-strict-aliasing", - "-Wall", - ]; - const sources = [ - `${RT}/crt0.s`, - ...["cart", "video", "bg", "obj", "input", "map", "player", "actor", "camera", "script_vm", "textbox", "debug", "main", "gen_cart"].map( - (m) => `${RT}/${m}.c`, - ), - ]; - - await $`arm-none-eabi-gcc ${CFLAGS} -I${RT} -T${RT}/gba.ld ${sources} -lgcc -o ${elf}`.quiet(); - await $`arm-none-eabi-objcopy -O binary ${elf} ${outPath}`.quiet(); - - const rom = new Uint8Array(await Bun.file(outPath).arrayBuffer()); - patchHeaderChecksum(rom); - await Bun.write(outPath, rom); - - return { gba: outPath, elf, size: rom.length }; -} diff --git a/aot/compiler/script.ts b/aot/compiler/script.ts deleted file mode 100644 index 124cfc6..0000000 --- a/aot/compiler/script.ts +++ /dev/null @@ -1,286 +0,0 @@ -// aot/compiler/script.ts — Stage 4/5: compile script generator ASTs to bytecode -// (design §11.4-11.5). Static expressions fold; runtime values (flags, choices, -// battle results) residualize into branches over the stack VM. - -import ts from "typescript"; -import { OP } from "../spec/pjgb.ts"; -import type { Ctx } from "./context.ts"; -import type { ScriptSite } from "./evaluate.ts"; - -const FACE_SELF = 0xff; // FACE_PLAYER operand meaning "the actor that started me" - -class ScriptError extends Error { - constructor(node: ts.Node, sf: ts.SourceFile, msg: string) { - const { line, character } = sf.getLineAndCharacterOfPosition(node.getStart(sf)); - super(`PJGB script error at ${sf.fileName}:${line + 1}:${character + 1}: ${msg}\n ${node.getText(sf).slice(0, 80)}`); - } -} - -// Op wrappers that leave a value on the VM stack. -const VALUE_OPS = new Set(["hasFlag", "choose", "battle", "getVar"]); - -class Emitter { - code: number[] = []; - constructor(private ctx: Ctx, private sf: ts.SourceFile) {} - - private u8(v: number): void { - this.code.push(v & 0xff); - } - private u16(v: number): void { - this.code.push(v & 0xff, (v >> 8) & 0xff); - } - private i16(v: number): void { - this.u16(v & 0xffff); - } - /** Emit op+placeholder rel16; returns operand index to patch. */ - private emitJump(op: number): number { - this.u8(op); - const at = this.code.length; - this.i16(0); - return at; - } - private patch(at: number): void { - this.patchTo(at, this.code.length); - } - /** Patch a rel16 operand at `at` to jump to absolute code offset `target`. */ - private patchTo(at: number, target: number): void { - const rel = target - (at + 2); // rel is measured from AFTER the 2-byte operand - this.code[at] = rel & 0xff; - this.code[at + 1] = (rel >> 8) & 0xff; - } - - // --- static evaluation --------------------------------------------------- - private staticVal(node: ts.Expression): unknown { - if (ts.isAsExpression(node) || ts.isParenthesizedExpression(node)) return this.staticVal(node.expression); - if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) return node.text; - if (ts.isNumericLiteral(node)) return Number(node.text); - if (node.kind === ts.SyntaxKind.TrueKeyword) return true; - if (node.kind === ts.SyntaxKind.FalseKeyword) return false; - if (ts.isPrefixUnaryExpression(node) && node.operator === ts.SyntaxKind.MinusToken) - return -(this.staticVal(node.operand) as number); - if (ts.isArrayLiteralExpression(node)) return node.elements.map((e) => this.staticVal(e)); - throw new ScriptError(node, this.sf, "expected a compile-time constant here"); - } - - private opCall(node: ts.Expression): { name: string; args: unknown[]; call: ts.CallExpression } { - let e = node; - if (ts.isAsExpression(e) || ts.isParenthesizedExpression(e)) e = e.expression; - if (!ts.isCallExpression(e) || !ts.isIdentifier(e.expression)) { - throw new ScriptError(node, this.sf, "yield must call a @pocketjs/aot op (say, choose, hasFlag, ...)"); - } - return { name: e.expression.text, args: e.arguments.map((a) => this.staticVal(a)), call: e }; - } - - /** Emit an op call. Returns true if it leaves a value on the stack. */ - emitOp(name: string, args: unknown[], node: ts.Node): boolean { - switch (name) { - case "say": - this.u8(OP.TEXT); - this.u16(this.ctx.internText(String(args[0]))); - return false; - case "lockPlayer": - this.u8(OP.LOCK_PLAYER); - return false; - case "releasePlayer": - this.u8(OP.RELEASE_PLAYER); - return false; - case "facePlayer": - this.u8(OP.FACE_PLAYER); - this.u8(FACE_SELF); - return false; - case "setFlag": - this.u8(OP.SET_FLAG); - this.u16(this.ctx.flagId(String(args[0]))); - return false; - case "clearFlag": - this.u8(OP.CLEAR_FLAG); - this.u16(this.ctx.flagId(String(args[0]))); - return false; - case "hasFlag": - this.u8(OP.PUSH_FLAG); - this.u16(this.ctx.flagId(String(args[0]))); - return true; - case "giveItem": - this.u8(OP.GIVE_ITEM); - this.u16(this.ctx.items.intern(String(args[0]))); - this.u8(Number(args[1] ?? 1)); - return false; - case "battle": - this.u8(OP.BATTLE); - this.u16(this.ctx.battles.intern(String(args[0]))); - return true; - case "wait": - this.u8(OP.WAIT); - this.u16(Number(args[0])); - return false; - case "setVar": - this.u8(OP.SET_VAR); - this.u16(this.ctx.varIdOf(String(args[0]))); - this.i16(Number(args[1])); - return false; - case "addVar": - this.u8(OP.ADD_VAR); - this.u16(this.ctx.varIdOf(String(args[0]))); - this.i16(Number(args[1])); - return false; - case "getVar": - this.u8(OP.PUSH_VAR); - this.u16(this.ctx.varIdOf(String(args[0]))); - return true; - case "playSfx": - this.u8(OP.PLAY_SFX); - this.u16(0); - return false; - default: - throw new ScriptError(node, this.sf, `unsupported script op "${name}"`); - } - } - - private emitChoice(options: string[], node: ts.Node): void { - // The textbox renders choice rows TEXT_ROW0(13)..BOX_ROW1(19) = 7 rows, so - // an 8th option would be selectable but never shown. Cap at 7. - if (options.length < 1 || options.length > 7) { - throw new ScriptError(node, this.sf, `choose() needs 1..7 options (got ${options.length})`); - } - this.u8(OP.CHOICE); - this.u8(options.length); - for (const o of options) this.u16(this.ctx.internText(o)); - } - - // --- statements ---------------------------------------------------------- - compileBlock(stmts: readonly ts.Statement[]): void { - for (let i = 0; i < stmts.length; i++) { - const s = stmts[i]; - // pattern: const X = yield choose([...]); switch (X) { ... } - const choice = this.matchChoiceDecl(s); - if (choice) { - const next = stmts[i + 1]; - if (!next || !ts.isSwitchStatement(next) || !this.isRef(next.expression, choice.name)) { - throw new ScriptError(s, this.sf, "`const x = yield choose(...)` must be immediately followed by `switch (x)`"); - } - this.emitChoice(choice.options, s); - this.compileChoiceSwitch(next, choice.options); - i++; // consume the switch - continue; - } - this.compileStatement(s); - } - } - - private compileStatement(s: ts.Statement): void { - if (ts.isExpressionStatement(s) && ts.isYieldExpression(s.expression)) { - const y = s.expression.expression!; - const { name, args, call } = this.opCall(y); - const produced = this.emitOp(name, args, call); - if (produced) this.u8(OP.POP); - return; - } - if (ts.isIfStatement(s)) return this.compileIf(s); - if (ts.isBlock(s)) return this.compileBlock(s.statements); - if (s.kind === ts.SyntaxKind.EmptyStatement) return; - throw new ScriptError(s, this.sf, "unsupported statement in a script (v1: yield-ops, if/else, choose+switch)"); - } - - private compileIf(s: ts.IfStatement): void { - if (!ts.isYieldExpression(s.expression)) { - throw new ScriptError(s.expression, this.sf, "if condition must be `yield ` (e.g. yield hasFlag(...))"); - } - const { name, args, call } = this.opCall(s.expression.expression!); - if (!VALUE_OPS.has(name)) throw new ScriptError(call, this.sf, `"${name}" does not yield a testable value`); - this.emitOp(name, args, call); // leaves value - const toElse = this.emitJump(OP.JUMP_IF_FALSE); - this.compileStatement(s.thenStatement); - if (s.elseStatement) { - const toEnd = this.emitJump(OP.JUMP); - this.patch(toElse); - this.compileStatement(s.elseStatement); - this.patch(toEnd); - } else { - this.patch(toElse); - } - } - - // Switch over a choice index (value already on stack); consumes it. - // - // Proper switch lowering so `default` may appear anywhere and empty - // fall-through case labels share the next clause's body (JS semantics): - // dispatch: for each case DUP; PUSH idx; NE; JUMP_IF_FALSE bodyN (jump if ==) - // default -> JUMP bodyDefault ; else -> JUMP end - // bodies: clause statements in source order (break -> JUMP end; - // no break -> falls into the next clause's body) - // end: POP (drop the choice index) - private compileChoiceSwitch(sw: ts.SwitchStatement, options: string[]): void { - const clauses = sw.caseBlock.clauses; - const caseJumps = new globalThis.Map(); // clauseIndex -> JUMP_IF_FALSE operand - let defaultIndex = -1; - - // Dispatch: test every CASE (default is skipped here — it is the fallthrough). - clauses.forEach((clause, i) => { - if (ts.isDefaultClause(clause)) { - if (defaultIndex >= 0) throw new ScriptError(clause, this.sf, "duplicate default clause"); - defaultIndex = i; - return; - } - const idx = options.indexOf(String(this.staticVal(clause.expression))); - if (idx < 0) throw new ScriptError(clause, this.sf, `case is not one of the choose() options`); - this.u8(OP.DUP); - this.u8(OP.PUSH_CONST); - this.i16(idx); - this.u8(OP.NE); - caseJumps.set(i, this.emitJump(OP.JUMP_IF_FALSE)); // NE==0 (equal) -> jump to this body - }); - // No case matched -> default body if present, else end. - const fallJump = this.emitJump(OP.JUMP); - - // Bodies in source order; a clause without `break` falls into the next. - const endJumps: number[] = []; - clauses.forEach((clause, i) => { - const bodyOffset = this.code.length; - const cj = caseJumps.get(i); - if (cj !== undefined) this.patchTo(cj, bodyOffset); - if (i === defaultIndex) this.patchTo(fallJump, bodyOffset); - for (const st of clause.statements) { - if (ts.isBreakStatement(st)) { - endJumps.push(this.emitJump(OP.JUMP)); - break; - } - this.compileStatement(st); - } - }); - - const end = this.code.length; - if (defaultIndex < 0) this.patchTo(fallJump, end); // no default -> fall through to end - for (const e of endJumps) this.patchTo(e, end); - this.u8(OP.POP); // drop the choice index - } - - // --- pattern helpers ----------------------------------------------------- - private matchChoiceDecl(s: ts.Statement): { name: string; options: string[] } | null { - if (!ts.isVariableStatement(s)) return null; - const d = s.declarationList.declarations[0]; - if (!d || !d.initializer || !ts.isIdentifier(d.name)) return null; - if (!ts.isYieldExpression(d.initializer)) return null; - const inner = d.initializer.expression; - if (!inner) return null; - let call = inner; - if (ts.isAsExpression(call) || ts.isParenthesizedExpression(call)) call = call.expression; - if (!ts.isCallExpression(call) || !ts.isIdentifier(call.expression) || call.expression.text !== "choose") return null; - const arr = this.staticVal(call.arguments[0]) as unknown[]; - return { name: d.name.text, options: arr.map(String) }; - } - - private isRef(e: ts.Expression, name: string): boolean { - return ts.isIdentifier(e) && e.text === name; - } -} - -export function compileScript(site: ScriptSite, ctx: Ctx): number[] { - const em = new Emitter(ctx, site.file); - const body = site.body.body; - if (!body || !ts.isBlock(body)) { - throw new Error(`script #${site.id}: expected a block body`); - } - em.compileBlock(body.statements); - em.code.push(OP.END); - return em.code; -} diff --git a/aot/demo/assets.generated.ts b/aot/demo/assets.generated.ts deleted file mode 100644 index 3643336..0000000 --- a/aot/demo/assets.generated.ts +++ /dev/null @@ -1,305 +0,0 @@ -// GENERATED by build-assets.ts from retro-rpg-sheet-source.png. -// Do not edit by hand; adjust the source sheet/crop regions and rerun the generator. - -import type { Direction } from "@pocketjs/aot"; - -export const TOWN_PALETTE: [number, number, number][] = [[24,24,32],[100,188,76],[50,132,58],[220,176,104],[112,72,40],[32,92,44],[110,206,76],[34,126,204],[112,202,244],[222,214,188],[214,62,56],[126,32,34],[176,106,50],[72,46,30],[244,238,214],[24,24,28]]; - -export const TOWN_TILES = { - "grass": { - "px": [ - "11111111", - "12211111", - "11111111", - "11111111", - "11121111", - "12111111", - "11112111", - "11111111" - ] - }, - "grass2": { - "px": [ - "11111111", - "22211211", - "11112111", - "11222111", - "12211212", - "11211121", - "11121111", - "11121111" - ] - }, - "path": { - "px": [ - "33333333", - "33333333", - "33333333", - "33333333", - "33333333", - "33333333", - "33333333", - "33333333" - ] - }, - "tree": { - "px": [ - "11111111", - "91666221", - "12666151", - "51222225", - "52212555", - "25555552", - "12555529", - "625dd529" - ], - "solid": true - }, - "water": { - "px": [ - "77777777", - "77777777", - "77777787", - "77777777", - "77777777", - "78877777", - "77778877", - "77777777" - ], - "solid": true - }, - "wall": { - "px": [ - "44444444", - "39999993", - "9e311ce3", - "3ec22ce3", - "3ec22c93", - "3933c333", - "41111114", - "44444444" - ], - "solid": true - }, - "roof": { - "px": [ - "bbbbbbbb", - "bbbbbbbb", - "babaabab", - "bbbbbbbb", - "bbabbabb", - "bbbbbbbb", - "babaabab", - "bbbbbbbb" - ], - "solid": true - }, - "door": { - "px": [ - "4cccccc4", - "4dddddd4", - "4d4444d4", - "4d4444d4", - "4dc444d4", - "4d4444d4", - "4d4444d4", - "44444444" - ], - "solid": true - }, - "sign": { - "px": [ - "61111111", - "62c44c41", - "14cccc41", - "64cccc41", - "14cccc41", - "112dd221", - "612dd211", - "61112111" - ], - "solid": true - }, - "flower": { - "px": [ - "11111111", - "13313911", - "2cc21921", - "1221c221", - "131cc211", - "c3322772", - "2c212772", - "11111121" - ] - }, - "fence": { - "px": [ - "11111111", - "1c1441c1", - "44444444", - "444444c4", - "44244244", - "44444444", - "24245245", - "11111111" - ], - "solid": true - } -}; - -export const HERO_PALETTE: [number, number, number][] = [[0,0,0],[244,184,132],[50,116,196],[24,54,104],[246,246,230],[94,60,34],[18,22,30],[44,48,52],[24,28,28],[218,158,52],[122,144,164],[92,162,230],[170,104,58],[232,210,150],[70,92,132],[254,254,246]]; - -export const HERO_FACINGS: Record = { - "down": [ - [ - "0000000000000000", - "0000a60400600000", - "000aea0000a3a000", - "00062000040e6000", - "0006e40330036000", - "0005732222355000", - "008786666665d700", - "0001c961161c1000", - "000a1d8d17d9e000", - "000075d11d630000", - "0006eca66d5e6000", - "00ad66ee2e88d000", - "0006633e23366000", - "0000666786660000", - "0000d75ea5560000", - "0000000000000000" - ], - [ - "0000000000000000", - "00006e0000600000", - "00002e0000260000", - "0006204000027000", - "0006240ee00e7000", - "006533222e355000", - "0086566666751700", - "0006616995916000", - "00069d6d15d60000", - "000069d9dd660000", - "007de8a660526000", - "00796322826dd000", - "000a082263366000", - "0000a55666700000", - "0000066065700000", - "0000000000000000" - ] - ], - "up": [ - [ - "0000000000000000", - "00006300007e0000", - "000a200000ae0000", - "0006200000026000", - "0006e400004e6000", - "0005e000000e5000", - "00e66e000a366700", - "00e6555555558700", - "0008585555850000", - "0000666556670000", - "0006ec99999e6000", - "000d65111156d700", - "0006669cc9876a00", - "0000636666860000", - "0000655665560000", - "0000000000000000" - ], - [ - "0000000000000000", - "0000630000600000", - "000e24000023e000", - "0006200000026000", - "0006e000040e6000", - "0065e00000035000", - "00866e0000355e00", - "0006555555555000", - "0000555555860000", - "0000366586660000", - "008d3c9111526000", - "008965111971d000", - "0000369999366000", - "00006766667a0000", - "0000a88065700000", - "0000000000000000" - ] - ], - "left": [ - [ - "0000006636600000", - "0000000422226000", - "000060002222e000", - "003ee044222ee000", - "007222383eee3000", - "000a6ccc55555800", - "0000711151658000", - "00006ddd18860000", - "0000061166680000", - "00000037ab399000", - "00000836ad8c9000", - "000007e211366000", - "0000655767550000", - "0000066000660000", - "0000000000000000", - "0000062220060000" - ], - [ - "0000006363600000", - "0000600022220000", - "0000e00022226000", - "00ee3000222e6000", - "00e222683eee6000", - "0000c99c58555600", - "000011d16d586000", - "0000d1dd98560000", - "000006d966660000", - "00000626226c8000", - "000006e6d9696000", - "000656d686360000", - "00065e7667e70000", - "0000060006670000", - "0000000000000000", - "000063ee00600000" - ] - ], - "right": [ - [ - "0000073373600000", - "00062222a0480000", - "00ae2222a0006000", - "00aee222a0037600", - "00aeeeeea03e2260", - "0a65555586666600", - "0758556559696000", - "000656d6cd6d6000", - "00006869ddd60000", - "00089636c1500000", - "0061932232e00000", - "006996d262600000", - "000666d133600000", - "0008566667550000", - "0006776085770000", - "0000000000000000" - ], - [ - "0000033333000000", - "0003222240060000", - "0062222200000000", - "006e222200036600", - "006eeeee00322270", - "0685555588666600", - "00655565998c0000", - "000856d8d18d0000", - "000a856ddd170000", - "0005566699600000", - "008c532a26000000", - "006c6d26aea00000", - "0006611577687000", - "000e766667557000", - "0007776067760000", - "0000000000000000" - ] - ] -}; diff --git a/aot/demo/assets.ts b/aot/demo/assets.ts deleted file mode 100644 index ba14da9..0000000 --- a/aot/demo/assets.ts +++ /dev/null @@ -1,17 +0,0 @@ -// aot/demo/assets.ts — imagegen-backed tileset + hero sprite declarations. -// The source PNG lives under demo/imagegen and is converted to GBA 4bpp DSL -// rows by demo/imagegen/build-assets.ts. - -import { defineSprite, defineTileset } from "@pocketjs/aot"; -import { HERO_FACINGS, HERO_PALETTE, TOWN_PALETTE, TOWN_TILES } from "./assets.generated.ts"; - -export const town = defineTileset("town", { - palette: TOWN_PALETTE, - tiles: TOWN_TILES, -}); - -export const hero = defineSprite("hero", { - size: [16, 16], - palette: HERO_PALETTE, - facings: HERO_FACINGS, -}); diff --git a/aot/demo/game.tsx b/aot/demo/game.tsx deleted file mode 100644 index 11a742a..0000000 --- a/aot/demo/game.tsx +++ /dev/null @@ -1,168 +0,0 @@ -/** @jsxImportSource @pocketjs/aot */ -// aot/demo/game.tsx — a Pokemon-like overworld vertical slice, authored in TSX. -// Compiled by @pocketjs/aot into a GBA-native ROM (no JS engine on the cart). -import { - ascii, - battle, - choose, - defineGame, - defineMap, - Entrance, - facePlayer, - giveItem, - hasFlag, - lockPlayer, - Npc, - PlayerSpawn, - releasePlayer, - say, - script, - Sign, - setFlag, - tile, - Warp, -} from "@pocketjs/aot"; -import { hero, town } from "./assets.ts"; - -// --- scripts (residual zone: compiled from AST to bytecode) ----------------- -const RivalTalk = script(function* () { - yield lockPlayer(); - yield facePlayer("rival"); - if (yield hasFlag("beat_rival_1")) { - yield say("The road ahead is tougher than it looks."); - } else { - yield say("You made it! Want to test your first build?"); - const answer = yield choose(["Battle", "Maybe later"] as const); - switch (answer) { - case "Battle": - yield battle("rival_1"); - yield setFlag("beat_rival_1"); - yield giveItem("potion", 1); - yield say("Take this Potion. You will need it."); - break; - case "Maybe later": - yield say("No problem. I will be right here."); - break; - } - } - yield releasePlayer(); -}); - -const MomTalk = script(function* () { - yield lockPlayer(); - yield facePlayer("mom"); - yield say("Be careful out there on Route 101!"); - yield releasePlayer(); -}); - -const RouteNpcTalk = script(function* () { - yield say("Wild grass rustles to the north."); -}); - -function LittlerootEntities() { - return ( - <> - - - - - - - - ); -} - -function Route101Entities() { - return ( - <> - - - - - - ); -} - -// --- town map --------------------------------------------------------------- -// legend: . grass , grass2 * flower # tree ~ water = path -// H wall ^ roof D door F fence -export const Littleroot = defineMap("littleroot") - .tileset(town) - .layer( - ascii` - #################### - #....,.....,......## - #.^^HH^^..,...####.# - #.HHDHH.......#~~#.# - #.....=......,#~~#.# - #..*..=..,......,..# - #.,...=....^^HH^^..# - #.....=....HHDHH...# - #..,..======......,# - #........,..=....*.# - #.,....*....=..,...# - #....F.F.F..=......# - #..,........=...,..# - #......,....=......# - #.*......,..=..*...# - #..........=.......# - #,........===......# - #########==######### - `.legend({ - ".": tile("grass"), - ",": tile("grass2"), - "*": tile("flower"), - "#": tile("tree"), - "~": tile("water"), - "=": tile("path"), - H: tile("wall"), - "^": tile("roof"), - D: tile("door"), - F: tile("fence"), - }), - ) - .entities() - .done(); - -// --- route map -------------------------------------------------------------- -export const Route101 = defineMap("route101") - .tileset(town) - .layer( - ascii` - #########==######### - #........==.......,# - #..###...==...###..# - #..###...==...###..# - #.,......==........# - #....*...==...*....# - #........==........# - #..~~~...==...,....# - #..~~~...==.......,# - #..~~~...=====....## - #...,........==....# - #.......,.....==*..# - #..*.........,==...# - #,..............==,# - #..###...,....###..# - #################### - `.legend({ - ".": tile("grass"), - ",": tile("grass2"), - "*": tile("flower"), - "#": tile("tree"), - "~": tile("water"), - "=": tile("path"), - }), - ) - .entities() - .done(); - -export default defineGame({ - title: "POCKET TOWN", - start: "littleroot:spawn", - maps: [Littleroot, Route101], - sprites: ["hero"], - items: ["potion"], - battles: ["rival_1"], - flags: ["beat_rival_1", "intro_done"], -}); diff --git a/aot/demo/imagegen/build-assets.ts b/aot/demo/imagegen/build-assets.ts deleted file mode 100644 index f526f77..0000000 --- a/aot/demo/imagegen/build-assets.ts +++ /dev/null @@ -1,269 +0,0 @@ -#!/usr/bin/env bun -// Convert the project-bound imagegen source sheet into GBA DSL asset data. - -import { basename, dirname, join } from "node:path"; -import { decodePng, type DecodedImage } from "../../../compiler/pak.ts"; -import type { Direction } from "../../dsl/index.ts"; - -type RGB = [number, number, number]; -type Rect = { x: number; y: number; w: number; h: number }; -type TileSpec = { name: string; rect: Rect; solid?: boolean; backgroundIndex?: number }; - -const HERE = dirname(new URL(import.meta.url).pathname); -const SOURCE = join(HERE, "retro-rpg-sheet-source.png"); -const OUT = join(dirname(HERE), "assets.generated.ts"); - -// BG palette bank 0. Index 0 stays the backdrop color; generated map tiles use -// indices 1..15 so every map cell remains opaque. -const TOWN_PALETTE: RGB[] = [ - [24, 24, 32], - [100, 188, 76], - [50, 132, 58], - [220, 176, 104], - [112, 72, 40], - [32, 92, 44], - [110, 206, 76], - [34, 126, 204], - [112, 202, 244], - [222, 214, 188], - [214, 62, 56], - [126, 32, 34], - [176, 106, 50], - [72, 46, 30], - [244, 238, 214], - [24, 24, 28], -]; - -// OBJ palette bank 0. Index 0 is transparent for sprites. -const HERO_PALETTE: RGB[] = [ - [0, 0, 0], - [244, 184, 132], - [50, 116, 196], - [24, 54, 104], - [246, 246, 230], - [94, 60, 34], - [18, 22, 30], - [44, 48, 52], - [24, 28, 28], - [218, 158, 52], - [122, 144, 164], - [92, 162, 230], - [170, 104, 58], - [232, 210, 150], - [70, 92, 132], - [254, 254, 246], -]; - -const TILE_SPECS: TileSpec[] = [ - { name: "grass", rect: { x: 50, y: 48, w: 181, h: 183 } }, - { name: "grass2", rect: { x: 278, y: 48, w: 199, h: 183 } }, - { name: "path", rect: { x: 526, y: 48, w: 178, h: 183 } }, - { name: "tree", rect: { x: 745, y: 27, w: 194, h: 204 }, solid: true, backgroundIndex: 1 }, - { name: "water", rect: { x: 973, y: 48, w: 176, h: 184 }, solid: true }, - { name: "wall", rect: { x: 50, y: 270, w: 181, h: 183 }, solid: true }, - { name: "roof", rect: { x: 278, y: 270, w: 199, h: 183 }, solid: true }, - { name: "door", rect: { x: 526, y: 270, w: 178, h: 183 }, solid: true }, - { name: "sign", rect: { x: 746, y: 270, w: 178, h: 183 }, solid: true }, - { name: "flower", rect: { x: 973, y: 270, w: 176, h: 183 } }, - { name: "fence", rect: { x: 50, y: 489, w: 181, h: 149 }, solid: true }, -]; - -const SPRITE_RECTS: Record = { - down: [ - { x: 244, y: 664, w: 116, h: 152 }, - { x: 433, y: 664, w: 116, h: 152 }, - ], - up: [ - { x: 244, y: 825, w: 116, h: 142 }, - { x: 433, y: 825, w: 116, h: 142 }, - ], - left: [ - { x: 244, y: 977, w: 116, h: 137 }, - { x: 433, y: 977, w: 116, h: 137 }, - ], - right: [ - { x: 244, y: 1113, w: 116, h: 132 }, - { x: 433, y: 1113, w: 116, h: 132 }, - ], -}; - -function px(img: DecodedImage, x: number, y: number): RGB { - const sx = Math.max(0, Math.min(img.width - 1, x)); - const sy = Math.max(0, Math.min(img.height - 1, y)); - const i = (sy * img.width + sx) * 4; - return [img.rgba[i], img.rgba[i + 1], img.rgba[i + 2]]; -} - -function colorDistance2(a: RGB, b: RGB): number { - const dr = a[0] - b[0]; - const dg = a[1] - b[1]; - const db = a[2] - b[2]; - return dr * dr + dg * dg + db * db; -} - -function nearestPalette(rgb: RGB, pal: RGB[], start = 0): number { - let best = start; - let bestD = Number.POSITIVE_INFINITY; - for (let i = start; i < pal.length; i++) { - const d = colorDistance2(rgb, pal[i]); - if (d < bestD) { - bestD = d; - best = i; - } - } - return best; -} - -function averageRegion(img: DecodedImage, rect: Rect, ox: number, oy: number, ow: number, oh: number): RGB { - const x0 = Math.floor(rect.x + (ox / ow) * rect.w); - const y0 = Math.floor(rect.y + (oy / oh) * rect.h); - const x1 = Math.max(x0 + 1, Math.floor(rect.x + ((ox + 1) / ow) * rect.w)); - const y1 = Math.max(y0 + 1, Math.floor(rect.y + ((oy + 1) / oh) * rect.h)); - let r = 0; - let g = 0; - let b = 0; - let n = 0; - for (let y = y0; y < y1; y++) { - for (let x = x0; x < x1; x++) { - const c = px(img, x, y); - r += c[0]; - g += c[1]; - b += c[2]; - n++; - } - } - return [Math.round(r / n), Math.round(g / n), Math.round(b / n)]; -} - -function generatedSheetBackground(rgb: RGB): boolean { - const neutral = Math.abs(rgb[0] - rgb[1]) < 12 && Math.abs(rgb[1] - rgb[2]) < 12; - return neutral && rgb[0] > 190 && rgb[1] > 190 && rgb[2] > 190; -} - -function tileRows(img: DecodedImage, spec: TileSpec): string[] { - const rows: string[] = []; - for (let y = 0; y < 8; y++) { - let row = ""; - for (let x = 0; x < 8; x++) { - const rgb = averageRegion(img, spec.rect, x, y, 8, 8); - const idx = spec.backgroundIndex !== undefined && generatedSheetBackground(rgb) - ? spec.backgroundIndex - : nearestPalette(rgb, TOWN_PALETTE, 1); - row += idx.toString(16); - } - rows.push(row); - } - return rows; -} - -function borderAverage(img: DecodedImage, rect: Rect): RGB { - let r = 0; - let g = 0; - let b = 0; - let n = 0; - const add = (x: number, y: number) => { - const c = px(img, x, y); - r += c[0]; - g += c[1]; - b += c[2]; - n++; - }; - for (let x = rect.x; x < rect.x + rect.w; x += 2) { - add(x, rect.y); - add(x, rect.y + rect.h - 1); - } - for (let y = rect.y; y < rect.y + rect.h; y += 2) { - add(rect.x, y); - add(rect.x + rect.w - 1, y); - } - return [Math.round(r / n), Math.round(g / n), Math.round(b / n)]; -} - -function isBackground(rgb: RGB, bg: RGB): boolean { - const neutral = Math.abs(rgb[0] - rgb[1]) < 14 && Math.abs(rgb[1] - rgb[2]) < 14; - return colorDistance2(rgb, bg) < 34 * 34 || (neutral && rgb[0] > 190 && rgb[1] > 190 && rgb[2] > 190); -} - -function spriteRows(img: DecodedImage, rect: Rect): string[] { - const bg = borderAverage(img, rect); - let minX = rect.x + rect.w; - let minY = rect.y + rect.h; - let maxX = rect.x; - let maxY = rect.y; - for (let y = rect.y; y < rect.y + rect.h; y++) { - for (let x = rect.x; x < rect.x + rect.w; x++) { - if (!isBackground(px(img, x, y), bg)) { - minX = Math.min(minX, x); - minY = Math.min(minY, y); - maxX = Math.max(maxX, x); - maxY = Math.max(maxY, y); - } - } - } - const bw = maxX - minX + 1; - const bh = maxY - minY + 1; - const side = Math.ceil(Math.max(bw, bh) * 1.08); - const cx = (minX + maxX + 1) / 2; - const cy = (minY + maxY + 1) / 2; - const crop: Rect = { - x: Math.round(cx - side / 2), - y: Math.round(cy - side / 2), - w: side, - h: side, - }; - - const rows: string[] = []; - for (let oy = 0; oy < 16; oy++) { - let row = ""; - for (let ox = 0; ox < 16; ox++) { - const sx = Math.floor(crop.x + ((ox + 0.5) / 16) * crop.w); - const sy = Math.floor(crop.y + ((oy + 0.5) / 16) * crop.h); - const rgb = px(img, sx, sy); - row += (isBackground(rgb, bg) ? 0 : nearestPalette(rgb, HERO_PALETTE, 1)).toString(16); - } - rows.push(row); - } - return rows; -} - -function emitArray(name: string, pal: RGB[]): string { - return `export const ${name}: [number, number, number][] = ${JSON.stringify(pal)};\n`; -} - -async function main(): Promise { - const img = decodePng(await Bun.file(SOURCE).bytes()); - const tiles = Object.fromEntries( - TILE_SPECS.map((spec) => [ - spec.name, - { - px: tileRows(img, spec), - ...(spec.solid ? { solid: true } : {}), - }, - ]), - ); - const facings = Object.fromEntries( - (Object.entries(SPRITE_RECTS) as [Direction, Rect[]][]).map(([dir, rects]) => [ - dir, - rects.map((rect) => spriteRows(img, rect)), - ]), - ) as Record; - - const body = - `// GENERATED by ${basename(new URL(import.meta.url).pathname)} from ${basename(SOURCE)}.\n` + - "// Do not edit by hand; adjust the source sheet/crop regions and rerun the generator.\n\n" + - 'import type { Direction } from "@pocketjs/aot";\n\n' + - emitArray("TOWN_PALETTE", TOWN_PALETTE) + - "\n" + - `export const TOWN_TILES = ${JSON.stringify(tiles, null, 2)};\n\n` + - emitArray("HERO_PALETTE", HERO_PALETTE) + - "\n" + - `export const HERO_FACINGS: Record = ${JSON.stringify(facings, null, 2)};\n`; - - await Bun.write(OUT, body); - console.log(`generated ${OUT} from ${SOURCE}`); - console.log(` source: ${img.width}x${img.height}`); - console.log(` tiles: ${TILE_SPECS.length}`); - console.log(` hero frames: ${Object.values(SPRITE_RECTS).reduce((n, frames) => n + frames.length, 0)}`); -} - -await main(); diff --git a/aot/demo/imagegen/retro-rpg-sheet-source.png b/aot/demo/imagegen/retro-rpg-sheet-source.png deleted file mode 100644 index 0bf2f12403ed26260546c4a5241b9e9f83121656..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1556921 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

e<(#N3y$QLdzF%MN;-G2q*Pd2 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

Hzo+&5`uS$^4>J%GML8)y=SBfbFVkj6crXYq{ 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

n`0jSAJ_G-%)V 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%0Ak$p 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°>=#I7e1 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%0D)rub-&aiD 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 z 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 z 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%0Dt6U)_($(_h; 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�DaCmk5!G9L7p1IEqMKziuPjgAQ zPiEnuVxFTIMkI+q)lw8>b_a8bjS|)Qc>D6(e?8{AG!El1etP@*$G*1zpZ>mo=-KmU zWV*h-J|6Dge&?;5o2!S1hmr!bfKpiMbT^BA58$mvxWa!ymCfaa9BpHR8#bWhEL~Bi zRiKxxB;Occ6{2O;t9o~B#aQVdJozk#psEyIl*w{lPPE2tjBDAYt$c`z-K!R~C7S5I zu`9o{9Rxu2TyoV+&OUuGL^JTLX&%CJExApNn*}x9x*4Bk+2eliE-N-Y`CkK7H_U%2 z*wPv>wpXtcJIw`MN_3qry&}r$qii-2bfWWC;Avw5%}=}q$aaU;Suc)(ZfDOu0K_8U zojQKkK<`rtXxZRCL1Xb>EEupg1GQ9-R=5P)gz~^G(Jgj! zZPjAB`J_*&O1;Fo_GO2x zG+2d9&Z%@=0Z^u7r5P<4!SL2@k!B_WDyF0JiT#Ej`Qab^(ckjvr=Rb}L_kdQJRKj7 z^-zht0g%#@<271g3(lrIoQ5-W0Pb(^f=VvkAkDh8;MfKi7Y&F|6-Eq0dhh-B4iER^ zxT9y!IT=UeC>#(YRFujP;k)w1fL9>|`H-iZyYJm_kZ@!dNn*)!4yB5vVFZJ8Q863y z&cjDf6r0ouKaMMg@z z+3D4Q+k<}g`rCKE_o-u`vhP|03_Fv8dR%BrqtDFgL zxYWvk7j{o5;LdTM-uucs$K!FgGjL9H)zY_Fj?=u~+o)3N=$Oit`W0@;NQ5a8Uf;wE za~dVVVvZ6vTCxFCX~HGE*L>~M#()2 z50X?hNE6J6>=7Qt8zw1smxgjFgzb(zK?l^D%3pBzvJ)u@BIG%-9Le}iyT@^ zJdC^h`@`X=nrayJYLsaFdW%Y^@>WX?JVC+AozGCP#g#1RxrifZ^}iN*6=$5Xlb04@ zsR_1>2wpwD9*6Yyv&X7oz|JHol@3M{p+V@6<@gnT9Ar>(%-QGbhy5clgC?kZ6zlHJ zhEl|})U%&+_FyTtQ!@ia33!BvsHmz1)Ka=X&hvB}#B4}TI#OVG-?E#!Se`w6dj2%y z(SDjZ3n58W66K>;`SWl6d8jHvL?J?oAU+4&YtNz*Ia8{!LPxP=X;d>+4RW5m#GRJI z>_L=<(S^n`=rdx9a4?26zP_LT*8kD};1B-6Kd|2q_s3~SL$Z|JA08eaN_xxrnMEr@ zCjk3%s#v7jCV^IAxRbq`VZA4Hm!zewl(ta84bE(z=znZlbtfVg>L)S`<6r&BpZsV4 z$UnOuhwM3m0rA7@!Dk!Hgh_cd;*mW3u>T@#jF|FaVs=dOetNE;B0#D}M5wBoni)Ny z6qsNLpHxAJQ>P45GcpT4e)Zs)rVyb*L{o_FuCK)*$so8p@ZtWLc8EEUBjMre&t~O5 zjf01bqdvM4jl*C3`4=Dk(qBx;G&PlnBA~?l^WXgogsz4xhzjR9m-c~XhA2ggOIiU% zt&|yL?J^voM}zy1wa{DSLt-PVrp8o%&{dv%BOLi9q{?^Le`<(NA z-<|J$W4%}Ps!CO=DwSp-KyEYuVvtcZGTnd>(SVt3gKcbN3tNhA14eEWbkjpLVIvGy zV;rjjfURZ~v>I)3Yxz21xT@dEw@IcCu?KUda2TPT9bIF$C$?33p*;4B4+)*P%# zv7=Mll#xEt=V^cJaaUNw0n0Hp2GhjN&<3f`U)m5XTcZt1YY+NrC|NMpthnW@=;fkk zoc)M8uGxI2TS`Ery{$!Z2gO?3H_B|X5A5wFf6Ve)YWQmo9_t9|4~wkhW~hhw6{4zR z7+-$%<&%^C;gietsxw5SV@T6ehQaK5H-@l^UMRUxzVEvIh^Wr@C(?N}0Ft&Yc9y$>fuk{iPx5w8(MDoJUAmCC9TYg=uNj zHj^k>v^i~mpIBnzmc)K>3}HVwNVH%fAOdRr%F__XAi$Uql1l}F%|u2K&^&2$6lb{% zq03bk)1iT>Jg}wgHKfYJPMOY@0fX4!Lp)h^5=FMx>(1RcSqr@ppaer;3=p#*F~VuU zc%F8b20K~#=T7`-=RP@%arcCK3aBZskA%>2nkNXeF;f?1TSl5!Q$VmAmy$sQDw-&n zXU|fdNl76(8^&9Hc<+1OZ+kZDT^fJx^Tew8}hDRS2!4HL+2 zKWwkJv`#gW!Duu@iqXhUz_fuKDxxYXG(>0w=^R~8l|Z4Y(V$9L2|cTVP*QYM6^M%E zh>cQ|Bf~&aT*{g>Qed8O752`>D2&DcqlYsFi!hQ5yQ?tnFRt|Aqj=Wgr8}z?2$BO4J%PZ^B#7ligC%t5W*6wBvgbV7A?kvJDnu++&Ke5O9>*3>97{@ex3Mm7qMA) zf%^F2BVpQ@jm*APtC!6Y3)XwK#3@wH3UZbYhGOL`6k*eNql()wTnkX8*_~8>%@!`R z1qF^{9LKQV?VOVi&`zM%sep_SaT+2+szq-c#~6VDx>iqJ2a1W(K~!Rh0w-S7$rxi0 zMAuQ$)_c-bku4NU8x}3?a#s;S=e$?(YTlx7q+L^FG#M#7<3QVoKob#^60U%_T^NVm zMG00V&mIYynVIF?*p{iIPN7Oj5M@3WJx3uD)XRpeN&tXdn*q6|9GsZOfN|SN(5`=a zd9~dS-YJ-N%;#GkfsDpF;2iYMNj?dMLx!4hnapKKed_pjyV_=D4a``U zX`Ooi_|cOe{K!9Cy!Gyxa}FXHM~fqGp84nd%NQ6LF2`XEA?){O`>VD01_wGJ2@``5 z-js&C<%&)ug(_jh+UV3dAkv;*pYKQOz3aRvr1PrK^={R{I?`ZIwqXpxi3@?j+z{y? zg!G90%H29~4{mn7>wn;<9&IlkZ+dlIG6G6fY{{}hBtaFUL4iQTyx*Y`GHGPZhd<>O zSa`=^#t z)73ef6joaj`QVf7o&$IA{GOz58pz*9=1T_-?VUsYh8nC}8dZRlph5k$4WZ5Oetjap zxhim(PE`?sZ_1>Vp%(Zi&8#1vpvBrET7jGQ<4id>&Gxo3EEZH*1A^0b&I9|Yg)Yqm zN`7v-GR4&<6_nYFHPxo(_d=Fi6IjCTQ{wY%)HAd#1@NE&GE;Gn+2cvpbS&STv%T6D^llU3&&sVRMciAl^-fY&UgB&Q;@(+t312#lgGK>>?qW-8kE zz4rM}Y%QH?jF#e%W){FOhM3N& z6Nv^hs!R2C6@mncLnLVGoJHo65=5j$CJ0UlM!4wKgoVz74807_4Zc_JLWlqj90enS zQ3B|N6z+}tKo}o*zxF;I1|iP(EAK%`Rl9)XR!?P;jI>U&BgHJM12YkI>Zq`*VHndc zHHC<(c<;3&TxA$dBITw!5s~Xhj{@}J<0m1+7zgJ)KvmUrHvED5DAJ}#U^bRnPPS<{ zMF7BxCpzKhhK&wD;*=(g3^V8Z2U=dNy0dQfC{1$eN9&WGo;#4KG9kv}xU;;xbwL6p zIxxQnjU*#TTH4UL8{_qMZ=ecKyxiEV$auXUoxstAmJ4D*(%w(65Ve@gX_^y>W+`nV z#y~RJZ!{9-6@*zdrz$ROYlozK4Pc+E*(kwC(s@Yd)thtyk!nGiDv|}WT%QNxJEvY5 zOgi;m91Rfl&Z$rKGP6D;k!#=85lj{@ zlUgQ+U^WghqmsEyC=jYi@;t6`8Uh|(T!^F0*hyE~gq>LyQG3ta?OSy*TGpQa&fZ6* zDw4cnLg6a1>U8Z@5PZsUQ(6cK;*WV|)9IrbjvAwd=zE89s!-Q?BH5G?5K-Z1HI;?g zR|U;Q1CWlEPN#`z=O_{=suB?i4lzc9f$9+j=ev;*zj6?B5mALe*Z016%9INp!F(Jw z(+0Ej zm3-uEB1X=!ke0rSC|N_OqVy(U*78XUm5O92dt~Pn`=bRg3Qa;-`#`ghs`?82s-u%}K-6vv4&v$ht(>ZQ!o^7M9L-b_jgD}d z4@iPSRm~WpK_$`#gMi|Ebf+N%74^LvLlp0wxS*;|w9_%h=tE?HaL*9Iku(*HGy_R< zIz)OE@4LQt-AY}pzEt1_nNF!ryaSS=;$s|#2*CSPKU{;sC9cqvqT!UPDokhc0*JUR8u(ybxjxJrrp)T0-#$WvJk4(GFCNV0ar`j zN@6jcN-%J};M1^p#BgtsT%(8UL^nGj+nK7jXPi*-6($PRHVE+}C5xUfXOhK%Tc>2^HEW-)$+-EqS;Gg@ z#cE4EL*xMk7!}?rsgkIMXqkkA=~;a0TMnq+&ik|b(V(!;|B>cDRb?$yM|G=Iu5VTr z%MCyU*+!~J9K%OG@5yu~Xa*`IL4#C}akKL22vo14J}pZ1PQps}gN}g!83RcORi#sB zAY%@#gsaQjUA%kqXzm`qV-IBp=ULmtDfX&m!@}$Fq8CrBhYua{Bjw$>;4`$jr`(g_^Da zNChdp!aMbf7w)WHzO!C?dZ#hiK5##VO{c-kdl7>Q6|e;DjY_0~uIim+G!0r{B&3{P zn@X$_N!J1?vK>QU@2E(}Z$^uj*f*LnhYO4_QD`So5NS@e?{(9QDzsCPh}4f5Nu$YV zHX0K4Gv-9&2D3Ar#v08i5@V{l8S-`S#5;$Yu0)fx_c5OgAtK(X_s;uHL zE!oicAmZKh`T8uZ=oA7-iHuG#Zg2=b4A~5V*@slGRbr&U z05u3Douh+v-j=0^T4XefM2dKr<*G{<7HzK;OZ3jZX8u;1@vj9^g3ofH4Q7ta*7+w*!is>;oi zo)9R5nK33dbs0NF0cj=_q~tLsrVXCYM$87$Rc?Mge=$>mXmV!JOnP2RjusC+bqKU3Ve z4!kk5t224g+I;?-*P&tD+2Sd8a+PyxeXhKv83GPM*8Hd2ph`-lB0F70z7`@p3y1V~j>8=$vj= ztCMxN={qM%Go74cR8dRDK{{r^OjM(l$Pi&F+aW_~r{;2EDZFt=g=1kfqogy^WgmHd zJ&a}o_w?fWbiMxI%g?{_`5X7|-hBDN9jAI8y0gujr<-0uC6tJf5p*IXcQFP-j5LvL zFpJTPs_MG;>&|uHt&{G}tMP|F@i-lMr(TC)clXZyFZ$vyc3CSk=;2};S z=D}bh@J>cTgkA5)1inZ{6V)6-0z^cd_K>dg+sBtr9&ICV>M?F5oQg&~IlsERVjsMt zNlYhqLRAUGXlZ+oP=cj1VspkX6bgY6LWqZ`W`7GTj90@RpYL;dey%DZ1S2%frcT0r z^7zkO1cKxgnPEm*NRY}gvkd?&%vm3rg*$58^2oM@ql!3L0wpm(1eKwSLXzZ#&IU)> z(Aai5vtI=Y#GFfu1m%QipNS3F{98xpRK2RIcHRflJGrrTE9q{XxFK3JZuc-CjAjuX zA+Q*k;;ySs97>86VKJtCj%lPcQcEp};vOkYKqU85NO?r1RP8GmB23E`@fJ zB>*G4&iBN{`NieV&U)92dC#!NRq+=ku7dCnktHpsfZx+F{*CtQ*Vvj7^~|I7eDVznhvmLAkBN9uz`MM^;j zg6X(~+zI4>-U0>{7+hgrtGg)*F||~7AjO=F2*#(^gG2wy$>z>V#?jzhj2H$RLyXZz zBScfJhGfg6v%_d6s!l~!#$f6sE#EPvXE~fRno;dUYxlL0P<;@Q|@9~v`GsV$kynrnWSp{ z5X_l(&2KeVZ6=j!#%Kk%M?lexTc*BMr8YxtDIU@QUCj^?3Z{x}ednLMd-~c7XK@@u z!1Xqc#$B}Q(JaOgO^gB&h>D8QfKJ7X1Rc~lCn6T3(UM0j?FCJF{w9*@b%@%g7bl%M z6=B~wAu3lO<(%p6P;O<<8sWR*FKzJO1j`-6@dy6ecR3)08Aa63Di7^(#qAM z#dG^b#k1NI&5O%Uo-)qaVr$+o^_FdCN{^-qoFms(XdG*B?u{s;AZIg+R#&Cr&Y?#l z^IU>7WJ@VVQ<)-`)Z;}!l#9MiYOBQ5VG^`+$O62i;6GWk zwcIa!_agBuYem~ex zeEh8^*WefBKSR=C7>78X zu1|*ju5Mmk5O*PMWWnciFV%5%u~=Z&jkf}IlO?ebqo27Ns!Ta?`|cE0rEmJCZ@zKsbho{Bz9%f1A}Wx4EGntS!P(4qC`blail9SMJ`?9ox@m?d8m(V=kQ4tLwl<-c!;XjmP>6_@ z+-)IkjNFbKBjwZawL2Y*CNc!0aSUAb8jVgJX*CX!YVR3SYELSj0Mf{urXvcA6o4w9 zessOv2j^6TqT)onS2d_pTD-OL$+ciHl2p};A-r+EGbqfQ8(+PD0d0dCQ2*WIi0J?AelD77yT17(H9`NCWwjJSKA4b{b&G=o`m)elf&2MAQ9X zm;3SYRp=ZxT{@Q+LV5=Ql6#$?Dw4B4=WQemMUuG=RWy3Q}z+{OyzVd!M^a8GqZO;q@nj zs5lR?bRMsscz5EVjuNA(K>A^{i`_7iVT@EY6OcDI?)B^NqaS~?i{_m=b=&K!SKjgR z*M8kMoNhK(*IQ;loLrKETx*71*FAZ9{wu!nD=bEol#M$3haUBYB=d3y)h6I{Q{|^> z%$6TB|8Wl7v(zX>Z5NF^i;+jU6Z+jrL9$$UVW$# zqpp{xv%ZNjPCEX`8>VZm&3j~oviN&8y!znMx49%gXQQvezS#v-5X`ZFIGX7^@;eJ- zN`r~&%QV|IFI_rfm*P8w{Cp&6L0;EANj=V=fk=K73%!O_4rL+_Rin*mG6G* z@r6f}Y)0tq6YtcG(bnFRmNrkQ>Vy0D)nUKeXLGb}@?)M?6`1kz`YJ|qi;71D2nzB^ zSM6sCd)5CRF!1uBgNjNm*KomROSWnFWO}AuQswcqZz+dG#SBn&n)1oSybEKz*oCX> z&?%zQa#MAVr+O*sa{d^W8^(>7i5S z6auQ#-b>=58yok+t(A(T!iOT_JKc@pW1qXc9(ZHzp6ueU`t=|D4}RCzY`}3CK@+5% zt2&a-)0x;9*L`=r5C8Q)_{pF7?DfgUsfz~pZM9AdTmALGHGsVQIHQfdf9N@_9;@E-aEu zK%fMP^Np1=7f@0f`P{zt*C zJp@3EHd+L*d56Dua~;iw(bAsh&po>Sxz{gyr~7Cx-R%D3KlBaX@MW*P@!7|{(`e(k z-|w!rL$nC#d*>)Hy?N{Ozx{_l^Z)%PpXmE;B}%wAhv7!=e($gS;D=wi`}ocCu5$_t zA>O&U`MV!|{YO9k`fd*=A}SG^Aup?5l(6Jc`CkdT)1c*e|Frq5VU}marIwwqpuKW2``)K5Z)y!d9#P;pO#D{NiJSGTKSUKlZPD)z^OEi??sy z+^kn#uwMDAi_44iD-#j#0fhZ<>(~JjgLP{iN$L8>k1v14hhF*0_rAa} zAjY&!*Gs%{*8j=x`-PwS+|^0vQWe+`?d!k(Yrpe9{I2V(OB&TV5z$m0Hs!{H&bh0r z>+|z-63)5Ve6t#-HS{&D@Jz)NZfe0*l{qz#RcV%lKwaUjCR>^fRVYe++aatikL12d ziM3=gC+&SL+A=_s3({ybCy2q`I^RD!(RIg2UhTs9ZhUmU@4dL2tIj8Q2^Cd{s;V$X zI?eSalaZ=Q1!5|bAVN|F-us8=yPx{Shkf4zAT7E0eWx+lrqd6c(K5+P8e&mwx$c&y$fB9KroK#^JsH>sw}GF{q|vT*G?R{ga>i^e5i95RDQ; zR2i+85Pszc-uc}9vpB}IVq>)D?wow&V^6>Rum0o9r`z7CcQOp&z3+YhcYWt~J^%c3 zPo6yS-cgXtPh=n}#+WvU@3y<$ZV!m6HUU8tG+kDIrf`m~&qTfyqGfY4mlmpdJQM%T z2|XkJ{Fb~{k=0{^&*yrreW-QDRX^#RH=AhcF?ls>uGPlXDxP&&fVoJ`+HC&&%&e^7 zq2?mApa3F1?T=}dX0{8bh~Aq-q|{aW}R(Ca=9+G!Rd;i_#CF^RK%S>y%=MB{P>9g&LiyiuiV|d{QSw<%XV+h z>AH98l^=p3?Q&N{LkM&t)D$rT07)ArkScZ}Z#hdA3v*D8(NyI0q&wZ&>DqfSCooZn zCnyq5)*Yh>%z4K#S_nosFDq!*JK4uw7%wibdew``xy49g$1xRZj*1 zS`=|E)#j-O9nDD7(5!qvfb7RU3oJPIbR4{HHDx)=I1KyUPICH) zHey={bE?jDV;IxuCv5{Dr)=gl^Q3I*#hG+rQTTHtHxtKmjo3bVq``w-)2+;$hLA)t zn?zNZzS!nNSX>s&NdDA3xr1uP-hxQ)_R%j<0y{ z-J9!v1OpLCReIHR?^fPBffGsDJuaP6BoY%N=8`4iyqLj^E^n}>YSO5rS>J2FR;L25 zV_+oA1S)`xAyUK)(IQfyUW6)M#rKZU5pul^yX|;A#(i=I!C}>RanwjJv}hKC+Uhfp zw*UP{Kh>=}FGk|&F5chxf8~Gm?z6R=yWoA=Nf}q(yn~3klvu0+z(RcV_^s7vx~ET` z_I;maeMV)IMpo4-B~&JAH|nKTp9|fz%wsx`NbNm^m~X=uQn|fl#U%?Q0npefElMkU z<3ujcFUAlaJ)Ok97xXV~RLm%sHUI$QZhZXK zql>Ex050Xi1APVpfmC3Wvc_BWHD9S&3s&OJ-CIfeOK~)@+LjF?6?lwX z&#J{y2cHFCz=2VqE_ z2oZ7KIT46>2US2s^9~85ir<>zxHJGxL`bJtt-S9#Gm_D1npT)_gc%rO41ofw6GjF| zR7VkU8p$|@tBcG1{+eM_6*Kd>&=wH`1TmT*_Fezie&`c_@25WNohVF1wxhgq+I{60 zy?XP;$$qz0&^Z|g+&J^6y*fYuSCYO3-0!xJA3uJ2{?t21t2SlH*e!-ba>7or(Bj#m zrR9<5J?;FjI~(iaf>{O;uJpVXVD`zQ6xsW4PCyxDxT7nz5?@Y6JR zE@+#VZ*sy(VWy^W6dKh|l&0EcvYexOb48e(U_dh?2g@=!(NyHsS6>}NSZ`KB0=#$U z&IvAu@sW>0=M4#9NeD25Dx8P|y?0tVo2SE&mP$I-0gy;D(y6*s(< z0fpurs0vAY2nl1Sj4CQJfV604v|JB^fKy$0ui6XMJFiObm4*2z5ZJii#b}$&YKZK6 z9fklA8l88Z>=3=sE2xMfol}?h`%@sP;$qiz>-8D}>-wUnG_AE{Y!uX#vu7&iQK`DVlQJO+%oR+MuGU1@nkm9QOPDeh+b3gR55CEftj(h*MXV zafaf>vDYGgS<2Z3QK~Ce3NOu7+v3x_ZjKJi{j=D^T;DhRD9sb|)+brhcBtx&wsVc% z!R+fy0N3Y>a7w&e=4YcN+L0Xj| zh>G``5=&u>bVG~=5%HoaqZ9ja-0v)g;GHmn7Pi;j7#UPy2o&$6b6lTnOk5a8Bhx`9 zkqk7Gbb1doZ_9%^*R8sg2%NU;Y5AHX-ddb)i@0~|Y-Lp#6Er+fvMp0ITwQpyMHm1U zs%LR=YAgT0m2}7a?$h@M;X=l7|E_nw^TQwhaKGvyNo#bMPv5v29y{S+h(q)qLiQa1 ziV7nEq;f=rrIcC#lvLh|s%ohSQ(}&25ITgDPS(Bex=yK1MI6+r6BmrDl}|^cib5e_ zjGd2tr=3@-(qw(ohY+r=u24J`yT`$$c?|lz-G2>kdsj8wP$UCA%9dklToy`*V$xo~Y?Dpes2;Mml8BDf;LnJ|+p$x=yK8`U~ZpaH-YI<;jNDKdYqc|FHKS^(ypiW^j znbvwGTE+y`d~5E_9FT#@F#vQ7+!lb={IdA4K6{{n7Y_iWKwH1EQHsZ!th`qZ@D{tz zI(KLt%*AEBr`-e8ma9q;stgHyF+Zvlo+hy1ivuK(rx+PVz`pEatmQ5 z%1?jg;jqG%+3+MgIVLvAR_n3(T_EJe3dh7{OOFP!87z~Pw!l`E=9N(@JYsd;6|dXd z>#j`EDG)x1rwX#BK#x2ufFrO zzyAOHOMmsh{4YA#s#6GdLp;BZW3)4owfE~z#jB+R1FDix0hrIQhNW4Fw1k8rKx#Ub z!Fy->pcZ?H4iM0cFcYyc1_fX@)OT?o4D449nu@7d*{Xz_>wdjDiT+F|=zH(EI=jK-m8i)tlMj?yNbSSNGWlolpvjw<`FDyi!E{;`3-X_!fi&-%E*EfE!AkLW zibcD7`_BLI&;HqyRqwrLv?17?yLZ3qJO0hT{onoV&Z`LG7-EE}mZRZdgaK4huWE4K z3C%f0q*;U}Q=7$Mq1cx{C+>a`FIOJ0To0-0H+uY4{mg;civiiQH!8ZwCmN4 zBaF)E-~c!QLNG>Ssse0ggv4@buKZ;ZJKFx`05tc@nDTKxlA&~@!s6y8{FREqH z3J6to&O31;>YM^8WTjG$mNo#i6tc@y;rhHZ{vxEYgRu9N0c z9rH_bxG}#t$)_r68dht@P#mQ7&zXp7_1DzxGQuJei<&)#Kb-Z)!k%Q`pZ+`l_P_pPAN|!bZmeLY#bU9ezE@8NV9<7iMb2x#OG0EO?e(smLI z*ZVQ-hqRMl2;X(Sb3oc23Fn+d1F&+^lZ-S9R1DI=t(;Rgn=f_ZoKJ^Vs4BB$mJ}bU z_+pAyXXP~c2#5pEdi!DXoHW6KDvqQ!(fs%Q+n(X+nq(wQYj zc1~infGBV*NKm8`r_q84)w`>!{llj_kDWt0;VSnwM1))Y`yZV3t`kYgB6Lmwq& zu6kW}4#Q|B{b~c(x!yf_^5o+3LL?t>9YVM`-|coINKsjJE}982j%LZP8jWU};%t`A z3A3E=q{W2OyvPzB(?;l54JMRS;&@upc~Ub!aK5hVl(+w#MQ2))9ie#rTBKvahiMX9 z1=hZ90!2-DPRu0lUIkq~V})JUK>!$i(B413*gbr@7wl7qN;n$;PCWFbyQ@y3 z(K!_n?==|rLlmVM#Y4>`29Ok&-vk=O2#YiX3#k&YtUXlFbzR!=v>&5*$AEFaANM0V zGU#?U^2Rzv2&Re7gvpMrns$->Tt%*z?+q#0h=T%e08EJtjSDO_GizY>t@31&37m6F z%`shWm^*Z$)gPBTq{$;UFC1!_wI&fZ>uQ^@R)Kfbdz^YXduuj(W;%M(nb|~XCZjB) zIsZ@bj0Vo7C~H24v1xsJQ%QntR@tI^hm$f*z~buC!8lvL%PR*BwtsMb&!NkqZHUv1 zAW!oVswbbKv@o}UQ$$nJ4U^=Xrl#n^xms#_ei#a_nIfrot*GJr+1mX>)hhFDN&DZ~ z0|y#1&t=ly1yD7_Zkv3TQlD=}Z2H-Zx(>G0zK5SiA{=3YS(}H>$<#pYW#ccOve)Y? zN}o0d-)yL`z~#`Q04vCzVPM??=&GS+8Bm$ zxcB1yJNutB`$#Hn=T!(q;O4zM&wufU)^9y=Gzg70?CtjR_g~!pbMO8UNvO+pTPHUm z1bG4y4I0C75+l_?LYd}U7L=2m1W{@LJd>o;{mon6?w;i@&Ek67hnw#cj~5I{75A=} zUpD4invrh!Zu z_uCkiRHyqlc6V;w{yo3x3!=cr;Jl>T)FDQ3{l&%8CznqjhcSUU=iI6JF~rlgb872e z){6UgZ{B|KB_q2rIG57#A}q!+9aF?{Kc1XzNRj@>6QL4+CUtvy|NfnKzcijc>3Ss* zg5G^_^UYs+qwjt!i~8#Ak#t%>k__4FXer2*(;MWdIDQ5xo=Kph$LDt~pyDs5pcMflx{ij(WJmB~V!%W&Ss}`#Bue|&YBZC=Y6vb+_xf<~JDqMFW zs-XE!o#;wr)xim4qK|Pu#-~@iXfXteY6QnIoUZzll}la>r)uCYKD-`b3P5zXyZZ3^ zU;EWxePbMh85K69%CI4b>(95_t49xi@v~36O&5Z}xLSG8PI_Ih+;%@cxOMj6l^0hp zym({1a|&7jePNmyymGh|b;`Hy^>YBr6(15Htfu}bvA1pDoilAEK6SM9; zt2fMk`BH&JpsF$2g9p#O{K`Ay7-`YSyLWEieemMtE_AMAI(#H;Oa+`13rvRn`PJ6U zgr-gjs!++(%~~9cRPUqVGmo!#A*#T8z1oGZ{E`p+#;?B_!kFMqpoI{3+fl_`@2?&| zI)7qg@6`dF7i#RlTN^jfUGL+j*AIT#2jBJLeT%Ep8#krv;c&-!cXpG6cx8lzc=yHo z_daW0KT0z%UeZxW!0Daaci;1FTwhxlRV0`>k(+mKp5FQtU@5O)+Le|hohV47h(b|3 zYFS~WxJ?CLlBGcsdu6BZ!RLseXd Y8CyqsAL`vD9=eNj~4HH)@Ol{3%G6b3KRa} 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 diff --git a/aot/docs/choice.png b/aot/docs/choice.png deleted file mode 100644 index 1230918647652c2d519cffdb14100c4aae560d4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5211 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 M!`0V?0USL2FX6t%0{{R3 diff --git a/aot/docs/dialogue.png b/aot/docs/dialogue.png deleted file mode 100644 index c222057b4c6b43c95727f40412d7e5ab4be8c0f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5565 zcmeHLdpy(o|DQ@G32~Z3LMpdhaw+LBhD0vqlES9+#Y&QF#A02h&Z+2v>bR}BHlos4 znaxqjNyTI?x$Q);Hbb>p#_adrs_(gcAHTnT-#>qk$LC>>ectca<^6m;U(eTje%a;c zsk%&O83Y1R_1fVc0D&xGLLdr%Ko^5IG~LP~@L_OpM}RK`lDYu`IYod##NgE_4g`X= zhCsOcArQx#5D4s8LBsB!z`~(jK0zJ_>E7DfhQmGd*mmztgsq05rrxI7I77okZ`0wr z*q*IhMN>U>v6~EW?TPIo(@mSSH^r)}Yi~+?hRZ1viN>|HwGp9&(5;5U1)HXNa;jsu zis*#UvTyt|F1*QDgV0x{|Leo7?}J!0_IR$R3hd;+_8V!*g9^q`x>Nw?g$$K(X#MzcMUqx z&o4~FvFcZPstT_!d42qmx}}Ax7DIZzk=wrAzUQJ-?Z4hU*@}PnMsIb>M!geSIQ#+a z-|Vc?ZBje7*p*ZFLsf%6SoBRInoiEXM$TAuTnY)#Xvj>BZ&uH9L>Sp&2@GZav5-mQ z$8>tQWv!(6=&j)}YeIPz6Y8r+ibuSNx(q-52r=YB2d=;y4PYfTr-V29v_>t$E*1`- zF$6xgqq)#D&D71NU1ZWf9C%VAKY78pOSyDKH?S*{$G`+)$FeF}tugZh4WmRlF{qHW1wpJODv&h#1K^7hHBk@Uwi>N+I0LLA^0C5Z_58UrllcaKE7&*Z%2`P|-?zud`9tl%vg%G=1>g8i zMUQ#tl!Z1zw2Fh4EC+~O7yqapx*lU@@zaFI_FI-9{~t>k8sb68OBXc3IT>!Np6ZIW zxSKO*+L^@;yI0Z$3bdV5DOk0fq|snTR~$g1-&eYS)PUk@3#~-De z@s0I0zEQEf{?9YA-8%9I;D5^}ZQFTNQ@TZjL?yvIG+9$J_DVOV^5oo;CubXdyX!{P zbkUgeM_Hw{D%{F{*n0dbw(N7;7Fc-KrWUp(*s9O%#?~ACKgPc+_W6%U5hTg$Eb{<% zap#c;o-&X0aG@SasnLUX$CNt${$Y+;>9 zvsie>iL$3Tr&%|6riF8|r!uxX*s<`fMT9k>mMmME5lATw;bX%WLbf{1lwZxo^vW$)Okb>}qv$ zX*RHUH;~QFVL8TwevyNBSq(9@jsUkz=E<21jZ*_V z18)bi`?Zpz)v9&I9ooit))$}+UK=EV-KE@+oE0EP0OU$)%zg|STo2Te(J zqnIt&G$%*m#ibqGeyo=s`y09(w{8uPT0iDvVRm{}ufs~w=d__`7aMlqi z+o-&uy$?ob)L@5Yav%dhU!O4Sg^p`@h;=f;2u^%>ga6`%nqZE9xr8^j+L89H&UOgT zj5UG}Bjsoj^NG-JWCAwMA58r6Gz;`L8*m>~*slmwj;4~fyZmBU;IV<466S+KfeV+m z1xi;2!N30HvXXh?V&+?i6w-iDf4Dwd`BHn#X=Ww%(G@Z9QLltBqL{MCQ$51@?8kPRu>YNqpu+;=02>Wxcz7u7RUGZZ$4@~=%mmJ9(HD&5h4@N1 z7umt=75$gNJdU(Yl*)QlNyZMx$sT6|0jV$Ilp+P;RwTzFq)bk{uNoZUlZN{|dABJ8 z|M3gjNm_bL;xKBv5VsFr&8riy19Ak7Qp z;)$|6oV5V@xSwlvp-5NGPCARqrp`+H9`3)=faplNeLf0DgvqG58swC`GD=^)p`4j+ z)*45S?>yR&-L9`+ZMBTfAWkRsO_cYwC4}}?2~uQQn7M@i+E`XR-O^C*fY-*c=M*ug zHmP7f8H%NDp=~Du_yDvSbbqqSudJJ zXV5#Yf->q?fJs8nHko5-G-NUP0qkFYXxk<7I*_0{_u#(2EX|D|O_6%k7Im=hS<=8X zPbqun_e;`zXm9s-8uAS&s-S#8(2{06-xgGIXN@xkTK&809uGxi^KDDJ(R3GduoM(R zhopK2pmn2|O|H2*X*L`!yqlj_bmu35Bf>7g{FYzz}>yybdU z^*Zd{P)1KVql#5XlNL@dNN^$Z({G=Qjvid_I#7~+ju){m_`<-WFR`c054V!L;eUo0 z+3Xrcp0X)m=)=>OXUx~&m_UQN&4u+N< zfEW)PjGPvH*ze7mcc>E^|Jf@!r3@;_-mgb0`F(VBl&1g7BuSS%k+G-jp)C&G4L0k` z>oBlbR)?#Pw0p}KFSzk+#t&ybqO3#}{=~u9*;M_K-S7or;kSHRcsjra(^l=Fp&`Dx z&bauh3)HD9q|uU)et*4?uK2MpO)`2JKG+MF&Ih7?@AV*s-Mg84*j;{(?$raBKn}zYVt=n?nuP8JbnPC#)_#_(F zP;xOkZ)G_XxjTTvz>AVnFU_s$o@Z57jQt8QHlnzK2J%hF&uJh}v9c|i$$tp2h;8{E zD^fmw9Bs8kcm{F;d(+0d4weou2>#3DVB{~7fsq@?exQf)=J%2AL`99W@6l01B z5mBeZ59-(W#7&xG96J6&`aJT~bkggIu_4x>W@Y|NSFv9*slpVak(!6VpFEj!;SW^o zc*Pzk$A8%5G{610vN`Wr~=DVV8 z4Fqrl%8zRkHyzyx3>e!*XS7mz3$46tMErCRhvgs}E!SbtxO4B^F|hl4^hkI!ZiVca z3Il6J@CB=L>AGnY71^Yya^WPNW~vwn9`)goe$Vop1XpFa>Mtia!|3C4(_mp&1w(dM zf1{s~7+O{1?b=%zL)eqql{ze+wO>V%s%*A1ExysHJd#y$tBM(^Hgx;5Og5~}Fvr(! z)zE`&z*-Vet5=a!WJG=I{KdA$%eA+-hRGkx1l#T|B6TPttWGhX76M^_+e!K2B#S$R&NF5$t+--F$`9W(0rkqf46+m=<@g0wosc$U!`C_S_ zO3DI(ZD6AfEKyrjRj|I$lw&5er}8Od_IXr!W<46>aG(dHkKK7t`d&{CEDTJvj5p`g zbZ*a;-a`(6Zb|(??n?n+vCSmmXr&6>7BoBO>}imv=%oG{@E+V(TEt)q&7~%{H1SWI zq!i%;`Y`E1*uQbCEr1>Na3_=ZMa#I~?Xt|X2CxNss)`6vB1LFbFsPc9V>1uUTzPAV zBO4LffNsG6dKZqOx;Px@Vin87CZvGQ!Je#Sm|#j~JA35K55R|s-8qT7uZe2{nq&cj zz+Ge-YBsl4j#jK}gnWbHS;LXT@2d)ePy$Ei;E2S5NrPy4Cinfnrb356k@PI4RedP~ zzq0*P>6O3LCGx}~>m`V@rs_IAr75^_wSGB}1ZdgS$ zrAy|fnucOUBLmcUdKmp9-}@t##uI~4wl_H>Pp1dTn5z+v(ng6JG&$yGHj<#N3mZq# zt{h!x+RFrrfk2huJmwI39EYY(7uVtpqg9S(geTNLTUf*h-|@&wsFgnH4c%j7N1NDhV^KbG((5 z-r${R{ye(%BUY-}dwqd;M!%0DF%o=QWFXK)SQTlLKKEuYqa;>8nF@+L{8wKPmTHMV zG|bn!U8B~{<$U(DGQgt9=Mfu=lA|PERsssXDccVja(LKAa=XUdK0a!+biws%a||3! z7UT2g-K-1a;=ZOUAuxHyD@Yotjva9s*Vijsy|n6>SoByt^7Iv92B!Xl<7#|r;E~Lv z6jH@b8z&D+(XV#<4vLVU+gA(8NC zZi5XR=RWuRiX+M%-k(s;bM6Wmz<;3@-@+46dm)7O%V(KzjFiBH>g7{M7Jk{^Y&b35 zPp%&_gsPs0$eE_D@Re|VZfL1O;i3C~JTc!*`7mPDwmfOk&KI!Ya{;4-##~6FTx^UtB ztf(DL+;(Oe0fnWL69Ot+I4A=_CC@iA+fflAS}UUQ85Qt~Ijrz5Zl`jgH2k;&L;9|* zH||3ud_lA~hjR$4b@;xNlk}+ViS_TNm{m1fY~kjuF!cs|D4m;X`}x7~lM1A;Kobgg zbtm%ReG}cTmIFOi6RCkhAMZy7xl2OT8>UmiHN^n)R=8HMX`i}d?&O}rlIzUi*DYPV zWf>?uJ%v{HeiLrX#{ zAYdpfguW)hvJpja-r#=kxBo`h{?}#T{~gMuv_+}_wTr!?Yx^z~{Ie0_<>BXEgV=xO Fe*i*phi3o) diff --git a/aot/docs/route.png b/aot/docs/route.png deleted file mode 100644 index 22427c35977faed6443be661750095da86be7093..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4865 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 diff --git a/aot/docs/town.png b/aot/docs/town.png deleted file mode 100644 index 6fd6e47ae60ae5715e91720223b4656e3835fad0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5926 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 and -// lowers the generator body from its AST (aot/compiler/script.ts). -// -// The op wrappers (say/choose/hasFlag/...) exist for typing + AST recognition; -// their runtime bodies never run on host or GBA. - -import { - hostElement, - normalizeSceneChildren, - type EntranceProps, - type LayerProps, - type NpcProps, - type PjgbChild, - type PjgbNode, - type PlayerSpawnProps, - type SignProps, - type WarpProps, -} from "./jsx-runtime.ts"; -import type { - BattleId, - Direction, - FlagId, - ItemId, - MapId, - MovementKind, - ScriptRef, - SpriteId, - TileCoord, - VarId, -} from "./types.ts"; - -export * from "./types.ts"; -export { Fragment } from "./jsx-runtime.ts"; -export type { - EntranceProps, - LayerProps, - NpcProps, - PjgbChild, - PjgbNode, - PlayerSpawnProps, - SignProps, - WarpProps, -} from "./jsx-runtime.ts"; - -type Rgb = readonly [number, number, number]; -type Whitespace = " " | "\t" | "\r"; - -type TrimLineLeft = S extends `${Whitespace}${infer Rest}` ? TrimLineLeft : S; -type TrimLineRight = S extends `${infer Rest}${Whitespace}` ? TrimLineRight : S; -type TrimLine = TrimLineRight>; -type SplitLines = S extends `${infer Head}\n${infer Rest}` ? [Head, ...SplitLines] : [S]; -type NonEmptyTrimmedLines = Lines extends readonly [ - infer Head extends string, - ...infer Rest extends readonly string[], -] - ? TrimLine extends "" - ? NonEmptyTrimmedLines - : [TrimLine, ...NonEmptyTrimmedLines] - : []; -type RowsOf = NonEmptyTrimmedLines>; -type Chars = S extends `${infer Head}${infer Rest}` ? Head | Chars : never; -type RowChars = Rows[number] extends infer Row extends string ? Chars : never; -type RowLength = S extends `${infer _Head}${infer Rest}` - ? RowLength - : Acc["length"]; -type SameWidth = Rows extends readonly [ - infer Head extends string, - ...infer Rest extends readonly string[], -] - ? Width extends number - ? RowLength extends Width - ? [Head, ...SameWidth] - : never - : [Head, ...SameWidth>] - : []; -type RowsForLegend = string extends Source ? readonly string[] : SameWidth>; -type TileNameOf = Tileset extends TilesetDecl ? Extract : string; -type LayerTileNames = Layer extends LayerSpec ? TileName : string; -type CompatibleLayer = string extends LayerTileNames - ? Layer - : Exclude, TileNameOf> extends never - ? Layer - : never; - -// --------------------------------------------------------------------------- -// Registry — module-level, shared between the executed game module and the -// compiler (both import this exact module instance). -// --------------------------------------------------------------------------- -export interface TileDecl { - px: readonly string[]; // 8 rows of 8 hex-nibble palette indices (0-f) - solid?: boolean; -} -export interface TilesetDecl< - Name extends string = string, - Tiles extends Record = Record, -> { - name: Name; - palette: readonly Rgb[]; // up to 16 rgb triples; index 0 = transparent/backdrop - tiles: Tiles; -} -export interface SpriteDecl { - name: Name; - size: [number, number]; - palette: readonly Rgb[]; - // one entry per facing (down,up,left,right); each is `frames` grids of - // `w*h` hex-nibble palette indices (rows joined). v1: 16x16, 1-2 frames. - facings: Record; -} -export interface MapDecl { - name: string; - tileset: string; - root: PjgbNode; // the element tree - size?: [number, number]; -} -export interface GameDecl { - title: string; - start: string; // "map:entrance" - maps: MapDecl[]; - sprites?: string[]; - items?: string[]; - battles?: string[]; - flags?: string[]; - vars?: string[]; -} - -export interface Registry { - tilesets: Map; - sprites: Map; - maps: MapDecl[]; - game: GameDecl | null; - // scriptId -> nothing at runtime; the AST is recovered by the compiler. - scriptCount: number; -} - -// NOTE: this module exports a host element named `Map`, which shadows the JS -// global. Use globalThis.Map for the real collections. -const REGISTRY: Registry = { - tilesets: new globalThis.Map(), - sprites: new globalThis.Map(), - maps: [], - game: null, - scriptCount: 0, -}; - -/** Compiler entry point: reset before executing a fresh game module. */ -export function __resetRegistry(): void { - REGISTRY.tilesets.clear(); - REGISTRY.sprites.clear(); - REGISTRY.maps = []; - REGISTRY.game = null; - REGISTRY.scriptCount = 0; -} -/** Compiler entry point: read what the executed module declared. */ -export function __getRegistry(): Registry { - return REGISTRY; -} - -// --------------------------------------------------------------------------- -// Host elements (design §18). These are markers; the IR builder walks them. -// --------------------------------------------------------------------------- -export const Map = hostElement("Map"); -export const Layer = hostElement("Layer"); -export const Npc = hostElement("Npc"); -export const Warp = hostElement("Warp"); -export const Sign = hostElement("Sign"); -export const PlayerSpawn = hostElement("PlayerSpawn"); -export const Entrance = hostElement("Entrance"); -export const Trigger = hostElement("Trigger"); -export const Collision = hostElement("Collision"); - -// --------------------------------------------------------------------------- -// Static builders + strongly-typed map DSL -// --------------------------------------------------------------------------- -export interface TileRef { - readonly __pjgbTile: true; - readonly name: Name; -} -type TileInput = TileRef | Name; - -export interface LayerSpec { - readonly __pjgbLayer: true; - readonly rows: Rows; - readonly legend: Record; -} - -export interface AsciiLayer { - readonly __pjgbAscii: true; - readonly source: Source; - readonly rows: string[]; - legend>, TileInput>>( - legend: RowsForLegend extends never ? never : Legend, - ): LayerSpec, ExtractTileNames>; -} - -type ExtractTileNames = Extract< - { - [K in keyof Legend]: Legend[K] extends TileRef ? Name : Legend[K] extends string ? Legend[K] : never; - }[keyof Legend], - string ->; -const ENTITY_HOSTS = new Set(["PlayerSpawn", "Entrance", "Npc", "Sign", "Warp"]); - -function node(host: string, props: Record, children: PjgbNode[] = []): PjgbNode { - return { host, props, children }; -} - -function isTileRef(v: unknown): v is TileRef { - return typeof v === "object" && v !== null && (v as TileRef).__pjgbTile === true; -} - -function tileName(v: TileInput): string { - return isTileRef(v) ? v.name : String(v); -} - -function normalizeAscii(source: string): string[] { - const lines = source.replace(/\r\n/g, "\n").replace(/\r/g, "\n").split("\n"); - while (lines.length && lines[0]!.trim() === "") lines.shift(); - while (lines.length && lines[lines.length - 1]!.trim() === "") lines.pop(); - if (!lines.length) throw new Error("ascii map must contain at least one row"); - - let indent = Infinity; - for (const line of lines) { - if (line.trim() === "") continue; - indent = Math.min(indent, line.match(/^[ \t]*/)![0].length); - } - const cut = Number.isFinite(indent) ? indent : 0; - return lines.map((line) => line.slice(cut).trimEnd()); -} - -function makeLayerSpec(rows: readonly string[], legendInput: Record): LayerSpec { - const width = rows[0]?.length ?? 0; - if (!width) throw new Error("ascii map must contain non-empty rows"); - rows.forEach((row, i) => { - if (row.length !== width) throw new Error(`ascii map row ${i} width ${row.length} != ${width}`); - }); - - const legend: Record = {}; - for (const [symbol, value] of Object.entries(legendInput)) { - if (symbol.length !== 1) throw new Error(`ascii legend key "${symbol}" must be exactly one character`); - legend[symbol] = tileName(value); - } - for (const row of rows) { - for (const symbol of row) { - if (legend[symbol] === undefined) throw new Error(`ascii legend missing entry for "${symbol}"`); - } - } - return { __pjgbLayer: true, rows: [...rows], legend }; -} - -class AsciiLayerImpl implements AsciiLayer { - readonly __pjgbAscii = true; - readonly rows: string[]; - - constructor(readonly source: Source) { - this.rows = normalizeAscii(source); - } - - legend>, TileInput>>( - legend: RowsForLegend extends never ? never : Legend, - ): LayerSpec, ExtractTileNames> { - return makeLayerSpec(this.rows, legend as Record) as LayerSpec< - RowsForLegend, - ExtractTileNames - >; - } -} - -export function tile(name: Name): TileRef { - return { __pjgbTile: true, name }; -} - -export function ascii( - strings: TemplateStringsArray, - ...values: never[] -): AsciiLayer { - if (values.length) throw new Error("ascii maps do not support interpolation"); - return new AsciiLayerImpl(String.raw({ raw: strings.raw }) as Source); -} - -class MapBuilderStart { - constructor(private readonly name: Name) {} - - tileset(tileset: Tileset): MapBuilder { - return new MapBuilder(this.name, tileset); - } -} - -class FacingPlacement { - private position: [number, number] | null = null; - - constructor( - private readonly parent: Parent, - private readonly host: string, - private readonly props: Record, - private readonly append: (node: PjgbNode) => void, - ) {} - - at(x: number, y: number): this { - this.position = [x, y]; - return this; - } - - facing(dir: Direction): Parent { - if (!this.position) throw new Error(`<${this.host}> needs .at(x, y) before .facing(...)`); - this.append(node(this.host, { ...this.props, at: this.position, facing: dir })); - return this.parent; - } -} - -class AtPlacement { - constructor( - private readonly parent: Parent, - private readonly host: string, - private readonly props: Record, - private readonly append: (node: PjgbNode) => void, - ) {} - - at(x: number, y: number): Parent { - this.append(node(this.host, { ...this.props, at: [x, y] })); - return this.parent; - } -} - -class NpcBuilder { - private spriteName: string | null = null; - - constructor( - private readonly parent: Parent, - private readonly id: string, - private readonly append: (node: PjgbNode) => void, - ) {} - - sprite(spriteRef: SpriteId | string): NpcAfterSprite { - this.spriteName = String(spriteRef); - return new NpcAfterSprite(this.parent, this.id, this.spriteName, this.append); - } -} - -class NpcAfterSprite { - private position: [number, number] | null = null; - - constructor( - private readonly parent: Parent, - private readonly id: string, - private readonly spriteName: string, - private readonly append: (node: PjgbNode) => void, - ) {} - - at(x: number, y: number): NpcAfterAt { - this.position = [x, y]; - return new NpcAfterAt(this.parent, this.id, this.spriteName, this.position, this.append); - } -} - -class NpcAfterAt { - constructor( - private readonly parent: Parent, - private readonly id: string, - private readonly spriteName: string, - private readonly position: [number, number], - private readonly append: (node: PjgbNode) => void, - ) {} - - facing(dir: Direction): NpcAfterFacing { - return new NpcAfterFacing(this.parent, { - id: this.id, - sprite: this.spriteName, - at: this.position, - facing: dir, - }, this.append); - } -} - -class NpcAfterFacing { - constructor( - private readonly parent: Parent, - private readonly props: Record, - private readonly append: (node: PjgbNode) => void, - ) {} - - movement(kind: MovementKind): this { - this.props.movement = kind; - return this; - } - - talk(scriptRef: ScriptRef): Parent { - this.append(node("Npc", { ...this.props, onTalk: scriptRef })); - return this.parent; - } -} - -export class MapBuilder { - private readonly children: PjgbNode[] = []; - - constructor( - private readonly name: Name, - private readonly tilesetDecl: Tileset, - ) {} - - private append = (child: PjgbNode): void => { - this.children.push(child); - }; - - layer(layer: CompatibleLayer): this { - this.append(node("Layer", { rows: [...layer.rows], legend: { ...layer.legend } })); - return this; - } - - entities(...children: PjgbChild[]): this { - for (const child of normalizeSceneChildren(children)) { - if (!ENTITY_HOSTS.has(child.host)) { - throw new Error( - `defineMap("${this.name}").entities(...) does not accept <${child.host}>; use .layer(...) for tile layers`, - ); - } - this.append(child); - } - return this; - } - - spawn(_id: Id): FacingPlacement { - return new FacingPlacement(this, "PlayerSpawn", { id: _id }, this.append); - } - - entrance(id: Id): FacingPlacement { - return new FacingPlacement(this, "Entrance", { id }, this.append); - } - - npc(id: Id): NpcBuilder { - return new NpcBuilder(this, id, this.append); - } - - sign(text: string): AtPlacement { - return new AtPlacement(this, "Sign", { text }, this.append); - } - - warp(to: `${string}:${string}` | string): AtPlacement { - return new AtPlacement(this, "Warp", { to }, this.append); - } - - done(): MapDecl { - const firstLayer = this.children.find((c) => c.host === "Layer"); - const rows = firstLayer?.props.rows as string[] | undefined; - const root = node("Map", {}, this.children); - const decl: MapDecl = { - name: this.name, - tileset: this.tilesetDecl.name, - root, - size: rows ? [rows[0]?.length ?? 0, rows.length] : undefined, - }; - REGISTRY.maps.push(decl); - return decl; - } -} - -export function defineTileset< - const Name extends string, - const Tiles extends Record, ->(name: Name, decl: { palette: readonly Rgb[]; tiles: Tiles }): TilesetDecl { - const full: TilesetDecl = { name, ...decl }; - REGISTRY.tilesets.set(name, full); - return full as TilesetDecl; -} - -export function defineSprite(name: Name, decl: Omit, "name">): SpriteId { - REGISTRY.sprites.set(name, { name, ...decl }); - return name as unknown as SpriteId; -} - -export function defineMap(name: Name): MapBuilderStart; -export function defineMap( - name: Name, - opts: { size?: [number, number]; tileset: string }, - build: () => PjgbNode, -): MapDecl; -export function defineMap( - name: string, - opts?: { size?: [number, number]; tileset: string }, - build?: () => PjgbNode, -): MapDecl | MapBuilderStart { - if (!opts || !build) return new MapBuilderStart(name); - const root = build(); - const decl: MapDecl = { name, tileset: opts.tileset, root, size: opts.size }; - REGISTRY.maps.push(decl); - return decl; -} - -export function defineGame(decl: Omit & { maps: MapDecl[] }): GameDecl { - REGISTRY.game = decl; - return decl; -} - -// --------------------------------------------------------------------------- -// Branded id helpers (identity at runtime; brands for the type checker). -// --------------------------------------------------------------------------- -export const flag = (id: T): FlagId => id as unknown as FlagId; -export const sprite = (id: T): SpriteId => id as unknown as SpriteId; -export const mapId = (id: T): MapId => id as unknown as MapId; -export const varId = (id: T): VarId => id as unknown as VarId; - -// --------------------------------------------------------------------------- -// Scripts + ops. The compiler rewrites `script(function*(){...})` to -// `script()`, so at runtime we only ever see the id. -// --------------------------------------------------------------------------- -export type ScriptBody = () => Generator; - -export function script(bodyOrId: ScriptBody | number): ScriptRef { - // The compiler rewrites every `script(function*(){...})` to `script()` - // before executing this module, so we only ever see a number here. - if (typeof bodyOrId === "number") return { __pjgbScript: bodyOrId }; - throw new Error( - "script() must be compiled by @pocketjs/aot, not executed directly — the generator body is lowered from its AST.", - ); -} - -// Op wrappers — recognized by name in the residualizer. Runtime bodies unused. -export function say(_text: string): unknown { - return undefined; -} -export function choose(_options: T): T[number] { - return _options[0]; -} -export function hasFlag(_id: FlagId | string): boolean { - return false; -} -export function setFlag(_id: FlagId | string): unknown { - return undefined; -} -export function clearFlag(_id: FlagId | string): unknown { - return undefined; -} -export function lockPlayer(): unknown { - return undefined; -} -export function releasePlayer(): unknown { - return undefined; -} -export function facePlayer(_actor: string): unknown { - return undefined; -} -export function warpTo(_dest: string): unknown { - return undefined; -} -export function battle(_id: BattleId | string): boolean { - return true; -} -export function giveItem(_id: ItemId | string, _count?: number): unknown { - return undefined; -} -export function takeItem(_id: ItemId | string, _count?: number): unknown { - return undefined; -} -export function wait(_frames: number): unknown { - return undefined; -} -export function getVar(_id: VarId | string): number { - return 0; -} -export function setVar(_id: VarId | string, _value: number): unknown { - return undefined; -} -export function addVar(_id: VarId | string, _delta: number): unknown { - return undefined; -} -export function playSfx(_id: string): unknown { - return undefined; -} - -export type { Direction, MovementKind, TileCoord }; diff --git a/aot/dsl/jsx-dev-runtime.ts b/aot/dsl/jsx-dev-runtime.ts deleted file mode 100644 index fa5ea2d..0000000 --- a/aot/dsl/jsx-dev-runtime.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./jsx-runtime.ts"; diff --git a/aot/dsl/jsx-runtime.ts b/aot/dsl/jsx-runtime.ts deleted file mode 100644 index 129a5d1..0000000 --- a/aot/dsl/jsx-runtime.ts +++ /dev/null @@ -1,140 +0,0 @@ -// aot/dsl/jsx-runtime.ts — the BUILD-TIME JSX factory (automatic runtime). -// -// The demo's TSX is transpiled with jsxImportSource = this module, then executed -// in-process by the compiler's static evaluator (design §11.3). JSX does NOT -// build a UI tree — it builds a static "scene element" tree that the IR builder -// walks. Pure user components (e.g. TownSign) are just called and expanded here; -// they never ship to the GBA. - -import type { Direction, MovementKind, ScriptRef, SpriteId, TileCoord } from "./types.ts"; - -export interface PjgbNode { - host: string; // host element name, or "#fragment" - props: Record; - children: PjgbNode[]; -} - -export type PjgbChild = PjgbNode | readonly PjgbChild[] | boolean | null | undefined; - -/** Marker for a host element (Map, Layer, Npc, ...). */ -export interface HostMarker> { - readonly __pjgbHost: true; - readonly hostName: string; - (props: Props & { children?: PjgbChild }): PjgbNode; -} - -export interface LayerProps { - rows: readonly string[]; - legend: Record; -} - -export interface PlayerSpawnProps { - id?: string; - at: TileCoord; - facing: Direction; -} - -export interface EntranceProps { - id: string; - at: TileCoord; - facing: Direction; -} - -export interface NpcProps { - id: string; - sprite: SpriteId | string; - at: TileCoord; - facing: Direction; - movement?: MovementKind; - onTalk?: ScriptRef; -} - -export interface SignProps { - text: string; - at: TileCoord; -} - -export interface WarpProps { - to: `${string}:${string}` | string; - at: TileCoord; -} - -export const Fragment = hostElement("#fragment"); - -export function hostElement>( - name: string, -): HostMarker { - const marker = ((props: Props & { children?: PjgbChild }) => { - const { children, ...rest } = props ?? {}; - const kids = normalizeChildren(children); - if (name === "#fragment") return { host: "#fragment", props: {}, children: kids }; - return { host: name, props: rest, children: kids }; - }) as HostMarker; - Object.defineProperties(marker, { - __pjgbHost: { value: true }, - hostName: { value: name }, - }); - return marker; -} - -function isHost(t: unknown): t is HostMarker { - return (typeof t === "object" || typeof t === "function") && t !== null && (t as HostMarker).__pjgbHost === true; -} - -/** Flatten fragments/arrays/falsy into a flat list of real element nodes. */ -function normalizeChildren(raw: unknown): PjgbNode[] { - const out: PjgbNode[] = []; - const push = (c: unknown): void => { - if (c === null || c === undefined || c === false || c === true) return; - if (Array.isArray(c)) { - for (const x of c) push(x); - return; - } - const node = c as PjgbNode; - if (node && typeof node === "object" && node.host === "#fragment") { - for (const x of node.children) push(x); - return; - } - if (node && typeof node === "object" && typeof node.host === "string") { - out.push(node); - return; - } - // Strings/numbers are not valid scene children in v1. - throw new Error(`pjgb jsx: unexpected child ${JSON.stringify(c)}`); - }; - push(raw); - return out; -} - -export function normalizeSceneChildren(raw: unknown): PjgbNode[] { - return normalizeChildren(raw); -} - -export function jsx(type: unknown, props: Record): PjgbNode { - const { children, ...rest } = props ?? {}; - const kids = normalizeChildren(children); - - if (isHost(type)) { - if (type.hostName === "#fragment") return { host: "#fragment", props: {}, children: kids }; - return { host: type.hostName, props: rest, children: kids }; - } - if (typeof type === "function") { - // Pure build-time component: execute and expand. - const result = (type as (p: Record) => unknown)({ ...rest, children: kids }); - const normalized = normalizeChildren(result); - return normalized.length === 1 - ? normalized[0] - : { host: "#fragment", props: {}, children: normalized }; - } - throw new Error(`pjgb jsx: unsupported element type ${String(type)}`); -} - -export const jsxs = jsx; -export const jsxDEV = jsx; - -export namespace JSX { - export type Element = PjgbNode; - export interface ElementChildrenAttribute { - children: {}; - } -} diff --git a/aot/dsl/types.ts b/aot/dsl/types.ts deleted file mode 100644 index 7cafb72..0000000 --- a/aot/dsl/types.ts +++ /dev/null @@ -1,21 +0,0 @@ -// aot/dsl/types.ts — authoring-time types: branded ids and shared enums. -// Types are erased; the compiler re-validates against the Game IR (design §9). - -export type Brand = T & { readonly __brand: K }; -export type MapId = Brand; -export type SpriteId = Brand; -export type FlagId = Brand; -export type VarId = Brand; -export type ItemId = Brand; -export type BattleId = Brand; -export type ScriptId = Brand; - -export type Direction = "down" | "up" | "left" | "right"; -export type MovementKind = "static" | "wander" | "patrolH" | "patrolV"; -export type TileCoord = readonly [x: number, y: number]; - -// A compiled reference to a script's generator body. `script()` returns this; -// JSX props like `onTalk={RivalTalk}` carry it into the map IR. -export interface ScriptRef { - readonly __pjgbScript: number; -} diff --git a/aot/package.json b/aot/package.json deleted file mode 100644 index 599d58b..0000000 --- a/aot/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "@pocketjs/aot", - "version": "0.1.0", - "private": true, - "type": "module", - "description": "Ahead-of-time partial-evaluation pipeline: author tile-based RPGs in TypeScript/JSX, ship GBA-native tiles, sprites, palettes and bytecode. A first-class PocketJS architecture alongside @pocketjs/framework.", - "exports": { - ".": "./dsl/index.ts", - "./jsx-runtime": "./dsl/jsx-runtime.ts", - "./jsx-dev-runtime": "./dsl/jsx-dev-runtime.ts", - "./compiler": "./compiler/index.ts", - "./spec": "./spec/pjgb.ts" - }, - "bin": { - "pocket-aot": "./compiler/cli.ts" - }, - "scripts": { - "assets": "bun demo/imagegen/build-assets.ts", - "build": "bun run assets && bun compiler/cli.ts build demo/game.tsx --out dist/pocket-town.gba", - "play": "bash play.sh", - "gen": "bun spec/gen-c.ts", - "handcart": "bun test/handcart.ts", - "test": "bun run assets && bun test/e2e.ts" - }, - "devDependencies": { - "typescript": "^5" - } -} diff --git a/aot/play.sh b/aot/play.sh deleted file mode 100755 index c16a32a..0000000 --- a/aot/play.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash -# aot/play.sh — build the demo ROM from TSX and open it in the mGBA window so -# you can play it yourself with the keyboard. -# -# bash aot/play.sh # build + launch the town demo -# bash aot/play.sh path/to/game.tsx # build + launch a different game -# -# Controls (mGBA defaults): -# Arrow keys .... walk -# X ............. A (talk / confirm / advance text / pick menu item) -# Z ............. B (cancel) -# Enter ......... Start Backspace ... Select -set -euo pipefail - -cd "$(cd "$(dirname "$0")/.." && pwd)" # repo root -ENTRY="${1:-aot/demo/game.tsx}" -ROM="$PWD/aot/dist/pocket-town.gba" - -echo "▸ Compiling $ENTRY → $ROM" -bun aot/compiler/cli.ts build "$ENTRY" --out "$ROM" - -APP="$(brew --prefix mgba 2>/dev/null)/mGBA.app" -echo "▸ Launching mGBA — arrows to walk, X = A (talk/confirm), Z = B, Enter = Start" -if [ -d "$APP" ]; then - open -n "$APP" --args "$ROM" -else - mgba "$ROM" # fall back to the CLI binary if the .app isn't where we expect -fi diff --git a/aot/runtime/actor.c b/aot/runtime/actor.c deleted file mode 100644 index fdcbd4f..0000000 --- a/aot/runtime/actor.c +++ /dev/null @@ -1,13 +0,0 @@ -// aot/runtime/actor.c — per-frame NPC updates. -// -// v1 ships MOVE_STATIC actors (the world's NPCs stand still and are turned -// only by scripts via FACE_PLAYER). Wander/patrol movement kinds are reserved -// and currently treated as static so collision/interaction stay deterministic. -#include "runtime.h" - -void actors_update(void) { - for (int i = 0; i < g.n_actors && i < BUDGET_MAX_ACTORS_PER_MAP; i++) { - // MOVE_STATIC: nothing to do. (Other move kinds reserved for v2.) - (void)i; - } -} diff --git a/aot/runtime/bg.c b/aot/runtime/bg.c deleted file mode 100644 index 9e08598..0000000 --- a/aot/runtime/bg.c +++ /dev/null @@ -1,21 +0,0 @@ -// aot/runtime/bg.c — BG0 tilemap (the world map) + scroll. -#include "runtime.h" - -void bg_load_map(void) { - u16 *sb = SCREENBLOCK(PJ_MAP_SBB); - for (int cy = 0; cy < 32; cy++) { - for (int cx = 0; cx < 32; cx++) { - u16 se; - if (cx < g.map_w && cy < g.map_h) - se = SE(g.map_tiles[cy * g.map_w + cx], g.bg_palbank); - else - se = SE(0, 0); - sb[cy * 32 + cx] = se; - } - } -} - -void bg_set_scroll(void) { - REG_BG0HOFS = (u16)g.cam_x; - REG_BG0VOFS = (u16)g.cam_y; -} diff --git a/aot/runtime/build.sh b/aot/runtime/build.sh deleted file mode 100755 index a9ca3eb..0000000 --- a/aot/runtime/build.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash -# aot/runtime/build.sh — build the PocketJS-AOT GBA ROM. -set -euo pipefail - -ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" -cd "$ROOT" - -mkdir -p aot/dist - -arm-none-eabi-gcc -mcpu=arm7tdmi -marm -ffreestanding -nostdlib -O2 -fno-strict-aliasing \ - -Wall -Wextra -Iaot/runtime -Taot/runtime/gba.ld \ - aot/runtime/crt0.s aot/runtime/cart.c aot/runtime/video.c aot/runtime/bg.c aot/runtime/obj.c \ - aot/runtime/input.c aot/runtime/map.c aot/runtime/player.c aot/runtime/actor.c aot/runtime/camera.c \ - aot/runtime/script_vm.c aot/runtime/textbox.c aot/runtime/debug.c aot/runtime/main.c aot/runtime/gen_cart.c \ - -lgcc -o aot/dist/game.elf - -arm-none-eabi-objcopy -O binary aot/dist/game.elf aot/dist/game.gba - -echo "built aot/dist/game.gba ($(wc -c < aot/dist/game.gba) bytes)" diff --git a/aot/runtime/camera.c b/aot/runtime/camera.c deleted file mode 100644 index 1766b68..0000000 --- a/aot/runtime/camera.c +++ /dev/null @@ -1,18 +0,0 @@ -// aot/runtime/camera.c — follow the player, clamped to the map bounds. -#include "runtime.h" - -static s32 clampi(s32 v, s32 lo, s32 hi) { - if (v < lo) return lo; - if (v > hi) return hi; - return v; -} - -void camera_follow(void) { - s32 max_x = (s32)g.map_w * 8 - PJGB_SCREEN_W; - s32 max_y = (s32)g.map_h * 8 - PJGB_SCREEN_H; - if (max_x < 0) max_x = 0; // map narrower than the screen -> pin to 0 - if (max_y < 0) max_y = 0; - - g.cam_x = clampi(g.player.px + 4 - PJGB_SCREEN_W / 2, 0, max_x); - g.cam_y = clampi(g.player.py + 4 - PJGB_SCREEN_H / 2, 0, max_y); -} diff --git a/aot/runtime/cart.c b/aot/runtime/cart.c deleted file mode 100644 index bcf7ed5..0000000 --- a/aot/runtime/cart.c +++ /dev/null @@ -1,30 +0,0 @@ -// aot/runtime/cart.c — PJGB cartridge container access. -// -// The blob layout (little-endian): -// header (PJGB_HEADER_SIZE bytes): magic[4], u16 version, u16 chunk_count, -// u32 chunk_table_offset, u32 total_size -// chunk table: chunk_count entries of { u32 kind, u32 id, u32 offset, u32 size } -// ...chunk payloads (offset is measured from the blob base). -#include "runtime.h" - -static const u8 *cart_base; - -void cart_load(const void *blob) { cart_base = (const u8 *)blob; } - -const u8 *cart_chunk(u32 kind, u32 id, u32 *out_size) { - u16 count = *(const u16 *)(cart_base + 6); - u32 table_off = *(const u32 *)(cart_base + 8); - const u8 *entry = cart_base + table_off; - for (u16 i = 0; i < count; i++, entry += PJGB_CHUNK_ENTRY_SIZE) { - u32 k = *(const u32 *)(entry + 0); - u32 eid = *(const u32 *)(entry + 4); - if (k == kind && eid == id) { - u32 off = *(const u32 *)(entry + 8); - u32 sz = *(const u32 *)(entry + 12); - if (out_size) *out_size = sz; - return cart_base + off; - } - } - if (out_size) *out_size = 0; - return 0; -} diff --git a/aot/runtime/crt0.s b/aot/runtime/crt0.s deleted file mode 100644 index 9e558b6..0000000 --- a/aot/runtime/crt0.s +++ /dev/null @@ -1,54 +0,0 @@ -@ aot/runtime/crt0.s — GBA cartridge header + bare-metal startup. -@ Header bytes 0x04..0x9F (Nintendo logo) and 0xBD (complement) are patched by -@ the compiler's ROM writer (aot/compiler/rom.ts) after objcopy. - .section .init, "ax" - .global _start - .cpu arm7tdmi - .align 2 - .arm -_start: - b .Lstart @ 0x00: branch past the 0xC0-byte header - .space 156, 0 @ 0x04: Nintendo logo (patched) - .ascii "POCKET TOWN " @ 0xA0: game title (12) - .ascii "PJAE" @ 0xAC: game code (4) - .ascii "PJ" @ 0xB0: maker code (2) - .byte 0x96 @ 0xB2: fixed value - .byte 0x00 @ 0xB3: main unit code - .byte 0x00 @ 0xB4: device type - .space 7, 0 @ 0xB5: reserved (7) - .byte 0x00 @ 0xBC: software version - .byte 0x00 @ 0xBD: complement check (patched) - .space 2, 0 @ 0xBE: reserved (2) -.Lstart: @ 0xC0 - @ IRQ-mode stack (IRQ+FIQ disabled) - msr cpsr_c, #0xD2 - ldr sp, =0x03007FA0 - @ system-mode stack (IRQ+FIQ disabled) - msr cpsr_c, #0xDF - ldr sp, =0x03007F00 - - @ copy .data (ROM LMA -> IWRAM VMA), word-wise - ldr r0, =__data_lma - ldr r1, =__data_start - ldr r2, =__data_end -.Lcopy: - cmp r1, r2 - ldrlo r3, [r0], #4 - strlo r3, [r1], #4 - blo .Lcopy - - @ zero .bss - ldr r1, =__bss_start - ldr r2, =__bss_end - mov r3, #0 -.Lbss: - cmp r1, r2 - strlo r3, [r1], #4 - blo .Lbss - - @ main() - ldr r0, =main - mov lr, pc - bx r0 -.Lhang: - b .Lhang diff --git a/aot/runtime/debug.c b/aot/runtime/debug.c deleted file mode 100644 index 2d18c5e..0000000 --- a/aot/runtime/debug.c +++ /dev/null @@ -1,29 +0,0 @@ -// aot/runtime/debug.c — mirror game state into the fixed EWRAM debug block -// so the headless mGBA harness can bus-read it. -#include "runtime.h" - -#define DBG8(off) (*(volatile u8 *)(PJGB_DEBUG_ADDR + (off))) -#define DBG16(off) (*(volatile u16 *)(PJGB_DEBUG_ADDR + (off))) -#define DBG32(off) (*(volatile u32 *)(PJGB_DEBUG_ADDR + (off))) - -void debug_init(void) { - DBG32(DBG_MAGIC) = DEBUG_MAGIC; - DBG8(DBG_BOOTED) = 1; -} - -void debug_update(void) { - DBG32(DBG_MAGIC) = DEBUG_MAGIC; - DBG16(DBG_PLAYER_X) = (u16)(g.player.px >> 3); - DBG16(DBG_PLAYER_Y) = (u16)(g.player.py >> 3); - DBG8(DBG_PLAYER_DIR) = g.player.dir; - DBG8(DBG_CUR_MAP) = g.map_id; - DBG8(DBG_TEXT_ACTIVE) = g.text_active; - DBG8(DBG_SCRIPT_ACTIVE) = (u8)vm_active(); - DBG32(DBG_FRAME) = g.frame; - DBG16(DBG_CUR_TEXT) = g.text_active ? g.cur_text : 0xFFFF; - DBG8(DBG_CHOICE_CURSOR) = g.choice_cursor; - DBG8(DBG_BOOTED) = 1; - for (int i = 0; i < 16; i++) DBG8(DBG_FLAGS + i) = g.flags[i]; - for (int i = 0; i < 16; i++) - *(volatile s16 *)(PJGB_DEBUG_ADDR + DBG_VARS + i * 2) = g.vars[i]; -} diff --git a/aot/runtime/gba.h b/aot/runtime/gba.h deleted file mode 100644 index 7f1ff67..0000000 --- a/aot/runtime/gba.h +++ /dev/null @@ -1,117 +0,0 @@ -// aot/runtime/gba.h — minimal GBA hardware definitions (Tonc-style). -// Freestanding, no libc. Register addresses per GBATEK / Tonc. -#ifndef PJGB_GBA_H -#define PJGB_GBA_H -#include - -typedef uint8_t u8; -typedef uint16_t u16; -typedef uint32_t u32; -typedef int8_t s8; -typedef int16_t s16; -typedef int32_t s32; -typedef volatile uint16_t vu16; -typedef volatile uint32_t vu32; - -// --- Memory regions --------------------------------------------------------- -#define MEM_IO 0x04000000 -#define MEM_PAL 0x05000000 -#define MEM_VRAM 0x06000000 -#define MEM_OAM 0x07000000 - -#define REG_DISPCNT (*(vu32 *)(MEM_IO + 0x0000)) -#define REG_DISPSTAT (*(vu16 *)(MEM_IO + 0x0004)) -#define REG_VCOUNT (*(vu16 *)(MEM_IO + 0x0006)) -#define REG_BG0CNT (*(vu16 *)(MEM_IO + 0x0008)) -#define REG_BG1CNT (*(vu16 *)(MEM_IO + 0x000a)) -#define REG_BG0HOFS (*(vu16 *)(MEM_IO + 0x0010)) -#define REG_BG0VOFS (*(vu16 *)(MEM_IO + 0x0012)) -#define REG_BG1HOFS (*(vu16 *)(MEM_IO + 0x0014)) -#define REG_BG1VOFS (*(vu16 *)(MEM_IO + 0x0016)) -#define REG_KEYINPUT (*(vu16 *)(MEM_IO + 0x0130)) - -// DISPCNT bits -#define DCNT_MODE0 0x0000 -#define DCNT_BG0 0x0100 -#define DCNT_BG1 0x0200 -#define DCNT_OBJ 0x1000 -#define DCNT_OBJ_1D 0x0040 - -// BGxCNT bits -#define BG_4BPP 0x0000 -#define BG_8BPP 0x0080 -#define BG_REG_32x32 0x0000 -#define BG_PRIO(n) ((n) & 3) -#define BG_CBB(n) (((n) & 3) << 2) // char base block (charblock) -#define BG_SBB(n) (((n) & 0x1f) << 8) // screen base block (screenblock) - -// --- VRAM helpers ----------------------------------------------------------- -// Charblock = 0x4000 bytes (512 4bpp tiles); screenblock = 0x800 bytes. -#define CHARBLOCK(n) ((u16 *)(MEM_VRAM + (n) * 0x4000)) -#define SCREENBLOCK(n) ((u16 *)(MEM_VRAM + (n) * 0x800)) -#define OBJ_VRAM ((u16 *)(MEM_VRAM + 0x10000)) // OBJ tiles (charblock 4) -#define BG_PAL ((u16 *)MEM_PAL) // 256 entries (16 banks of 16) -#define OBJ_PAL ((u16 *)(MEM_PAL + 0x200)) // 256 entries - -// Layout used by the PocketJS-AOT runtime: -#define PJ_BG_CBB 0 // BG char base charblock (tiles 0..) -#define PJ_MAP_SBB 8 // BG0 map screenblock -#define PJ_TEXT_SBB 9 // BG1 textbox screenblock - -// A 4bpp BG/screen entry: bits 0-9 tile index, 10 hflip, 11 vflip, 12-15 palbank -#define SE(tile, palbank) (((tile) & 0x3ff) | (((palbank) & 0xf) << 12)) - -// --- Keys (active-low in REG_KEYINPUT; bit index matches mGBA GBAKey) -------- -#define KEY_A 0x0001 -#define KEY_B 0x0002 -#define KEY_SELECT 0x0004 -#define KEY_START 0x0008 -#define KEY_RIGHT 0x0010 -#define KEY_LEFT 0x0020 -#define KEY_UP 0x0040 -#define KEY_DOWN 0x0080 -#define KEY_R 0x0100 -#define KEY_L 0x0200 - -// --- OAM -------------------------------------------------------------------- -typedef struct { - u16 attr0; - u16 attr1; - u16 attr2; - u16 fill; -} ObjAttr; // 8 bytes; 128 in OAM - -#define OAM ((ObjAttr *)MEM_OAM) - -// attr0 -#define ATTR0_Y(y) ((y) & 0xff) -#define ATTR0_SQUARE 0x0000 -#define ATTR0_HIDE 0x0200 -#define ATTR0_4BPP 0x0000 -// attr1 -#define ATTR1_X(x) ((x) & 0x1ff) -#define ATTR1_SIZE_16 0x4000 // with ATTR0_SQUARE => 16x16 -// attr2 -#define ATTR2_TILE(t) ((t) & 0x3ff) -#define ATTR2_PRIO(p) (((p) & 3) << 10) -#define ATTR2_PALBANK(n) (((n) & 0xf) << 12) - -// --- DMA (channel 3, used to blit OAM shadow at VBlank) --------------------- -#define REG_DMA3SAD (*(vu32 *)(MEM_IO + 0x00d4)) -#define REG_DMA3DAD (*(vu32 *)(MEM_IO + 0x00d8)) -#define REG_DMA3CNT (*(vu32 *)(MEM_IO + 0x00dc)) -#define DMA_ENABLE 0x80000000 -#define DMA_32 0x04000000 - -static inline void dma3_copy32(void *dst, const void *src, u32 words) { - REG_DMA3SAD = (u32)src; - REG_DMA3DAD = (u32)dst; - REG_DMA3CNT = words | DMA_ENABLE | DMA_32; -} - -static inline void vblank_wait(void) { - while (REG_VCOUNT >= 160) {} // wait for end of any current vblank - while (REG_VCOUNT < 160) {} // wait for start of vblank -} - -#endif // PJGB_GBA_H diff --git a/aot/runtime/gba.ld b/aot/runtime/gba.ld deleted file mode 100644 index f96694b..0000000 --- a/aot/runtime/gba.ld +++ /dev/null @@ -1,42 +0,0 @@ -/* aot/runtime/gba.ld — GBA link map. - text + rodata + the linked cart blob live in ROM (0x08000000). - .data/.bss/stack live in IWRAM (0x03000000, 32 KB) so EWRAM (0x02000000) - stays free for the runtime's fixed debug block + any decompression scratch. */ -OUTPUT_FORMAT("elf32-littlearm") -OUTPUT_ARCH(arm) -ENTRY(_start) - -MEMORY { - rom (rx) : ORIGIN = 0x08000000, LENGTH = 32M - iwram (rwx) : ORIGIN = 0x03000000, LENGTH = 32K - ewram (rwx) : ORIGIN = 0x02000000, LENGTH = 256K -} - -SECTIONS { - .init : { - KEEP(*(.init)) - *(.text .text.*) - *(.rodata .rodata.*) - . = ALIGN(4); - } > rom - - __data_lma = .; - .data : AT (__data_lma) { - . = ALIGN(4); - __data_start = .; - *(.data .data.*) - . = ALIGN(4); - __data_end = .; - } > iwram - - .bss (NOLOAD) : { - . = ALIGN(4); - __bss_start = .; - *(.bss .bss.*) - *(COMMON) - . = ALIGN(4); - __bss_end = .; - } > iwram - - /DISCARD/ : { *(.comment) *(.note*) *(.ARM.attributes) } -} diff --git a/aot/runtime/input.c b/aot/runtime/input.c deleted file mode 100644 index 1d9b9b6..0000000 --- a/aot/runtime/input.c +++ /dev/null @@ -1,13 +0,0 @@ -// aot/runtime/input.c — key polling with edge detection. -#include "runtime.h" - -void input_poll(void) { - g.keys_prev = g.keys; - g.keys = (u16)((~REG_KEYINPUT) & 0x3ff); // active-low -> active-high held mask -} - -int key_held(int mask) { return (g.keys & mask) != 0; } - -int key_pressed(int mask) { - return (g.keys & mask) != 0 && (g.keys_prev & mask) == 0; -} diff --git a/aot/runtime/main.c b/aot/runtime/main.c deleted file mode 100644 index 4b3770f..0000000 --- a/aot/runtime/main.c +++ /dev/null @@ -1,34 +0,0 @@ -// aot/runtime/main.c — the runtime entry point + per-frame game loop. -#include "runtime.h" - -// The single definition of the global game state (all other modules extern it). -Game g; - -int main(void) { - cart_load(pjgb_cart); - g.game = (const GameHeader *)cart_chunk(CHUNK_GAME, 0, 0); - - video_init(); - textbox_init(); - debug_init(); - - map_enter(g.game->start_map, g.game->start_x, g.game->start_y, g.game->start_dir); - - for (;;) { - input_poll(); - vm_tick(); - if (!vm_active()) player_update(); - textbox_tick(); - choice_tick(); - actors_update(); - camera_follow(); - bg_set_scroll(); - obj_reset(); - obj_draw_scene(); - debug_update(); - vblank_wait(); - obj_commit(); - g.frame++; - } - return 0; -} diff --git a/aot/runtime/map.c b/aot/runtime/map.c deleted file mode 100644 index c34ddc2..0000000 --- a/aot/runtime/map.c +++ /dev/null @@ -1,53 +0,0 @@ -// aot/runtime/map.c — map load, collision, actor lookup. -#include "runtime.h" - -void map_enter(int map_id, int tx, int ty, int dir) { - const u8 *chunk = cart_chunk(CHUNK_MAP, (u32)map_id, 0); - const MapHeader *mh = (const MapHeader *)chunk; - - g.map_id = (u8)map_id; - g.map_w = mh->width; - g.map_h = mh->height; - g.map_tiles = (const u16 *)(chunk + mh->tiles_off); - g.map_collision = chunk + mh->collision_off; - g.actors = (const ActorRec *)(chunk + mh->actors_off); - g.n_actors = mh->num_actors; - g.warps = (const WarpRec *)(chunk + mh->warps_off); - g.n_warps = mh->num_warps; - g.bg_palbank = mh->bg_palbank; - - for (int i = 0; i < g.n_actors && i < BUDGET_MAX_ACTORS_PER_MAP; i++) { - g.actor_dir[i] = g.actors[i].facing; - g.actor_frame[i] = 0; - } - - g.player.px = tx * 8; - g.player.py = ty * 8; - g.player.dir = (u8)dir; - g.player.moving = 0; - g.player.anim_frame = 0; - g.player.anim_timer = 0; - g.player.sprite_id = 0; - - bg_load_map(); - camera_follow(); - bg_set_scroll(); -} - -int map_solid(int tx, int ty) { - if (tx < 0 || ty < 0 || tx >= (int)g.map_w || ty >= (int)g.map_h) return 1; - if (g.map_collision[ty * g.map_w + tx]) return 1; - for (int i = 0; i < g.n_actors; i++) { - if ((g.actors[i].flags & ACTOR_FLAG_SOLID) && - g.actors[i].x == tx && g.actors[i].y == ty) - return 1; - } - return 0; -} - -int map_actor_at(int tx, int ty) { - for (int i = 0; i < g.n_actors; i++) { - if (g.actors[i].x == tx && g.actors[i].y == ty) return i; - } - return -1; -} diff --git a/aot/runtime/obj.c b/aot/runtime/obj.c deleted file mode 100644 index 16fb786..0000000 --- a/aot/runtime/obj.c +++ /dev/null @@ -1,61 +0,0 @@ -// aot/runtime/obj.c — sprite (OBJ) rendering via a shadow OAM buffer. -#include "runtime.h" - -static ObjAttr shadow[128]; - -void obj_reset(void) { - for (int i = 0; i < 128; i++) shadow[i].attr0 = ATTR0_HIDE; -} - -void obj_commit(void) { - dma3_copy32(OAM, shadow, sizeof(shadow) / 4); -} - -void obj_put(int slot, int sx, int sy, int tile, int palbank) { - if (slot < 0 || slot >= 128) return; - ObjAttr *o = &shadow[slot]; - o->attr0 = ATTR0_Y(sy) | ATTR0_SQUARE | ATTR0_4BPP; - o->attr1 = ATTR1_X(sx) | ATTR1_SIZE_16; - o->attr2 = ATTR2_TILE(tile) | ATTR2_PALBANK(palbank) | ATTR2_PRIO(0); - o->fill = 0; -} - -// A 16x16 tile-occupant's sprite tile for a facing/frame. -static int sprite_tile(const SpriteRec *sp, int dir, int frame) { - int frames = sp->frames ? sp->frames : 1; - return sp->tile_base + dir * (frames * 4) + (frame % frames) * 4; -} - -// Fully offscreen (sprite spans [s, s+16) on each axis)? -static int offscreen(int sx, int sy) { - return sx + 16 <= 0 || sx >= PJGB_SCREEN_W || sy + 16 <= 0 || sy >= PJGB_SCREEN_H; -} - -void obj_draw_scene(void) { - const SpriteRec *table = (const SpriteRec *)cart_chunk(CHUNK_SPRITE_TABLE, 0, 0); - - // Player -> slot 0. - { - const SpriteRec *sp = &table[g.player.sprite_id]; - int sx = (int)g.player.px - (int)g.cam_x - 4; - int sy = (int)g.player.py - (int)g.cam_y - 8; - if (!offscreen(sx, sy)) { - int frames = sp->frames ? sp->frames : 1; - int tile = sprite_tile(sp, g.player.dir, g.player.anim_frame % frames); - obj_put(0, sx, sy, tile, sp->palbank); - } - } - - // Actors -> slots 1..n. - for (int i = 0; i < g.n_actors && i < BUDGET_MAX_ACTORS_PER_MAP; i++) { - const ActorRec *a = &g.actors[i]; - if (a->sprite == 0xff) continue; // 0xFF = no sprite (e.g. a sign) - const SpriteRec *sp = &table[a->sprite]; - int wx = a->x * 8, wy = a->y * 8; - int sx = wx - (int)g.cam_x - 4; - int sy = wy - (int)g.cam_y - 8; - if (offscreen(sx, sy)) continue; - int tile = sprite_tile(sp, g.actor_dir[i], g.actor_frame[i]); - obj_put(1 + i, sx, sy, tile, sp->palbank); - } -} diff --git a/aot/runtime/pjgb_gen.h b/aot/runtime/pjgb_gen.h deleted file mode 100644 index 67cb7b7..0000000 --- a/aot/runtime/pjgb_gen.h +++ /dev/null @@ -1,132 +0,0 @@ -// GENERATED by aot/spec/gen-c.ts from aot/spec/pjgb.ts — DO NOT EDIT. -#ifndef PJGB_GEN_H -#define PJGB_GEN_H -#include - -/* ---------------------------------------------------------------------- - * Screen / tiles - * ---------------------------------------------------------------------- */ - -#define PJGB_SCREEN_W 0xf0 -#define PJGB_SCREEN_H 0xa0 -#define PJGB_SCREEN_TILES_W 0x1e -#define PJGB_SCREEN_TILES_H 0x14 -#define PJGB_TILE_4BPP_BYTES 0x20 - -/* ---------------------------------------------------------------------- - * Container header + chunks - * ---------------------------------------------------------------------- */ - -#define PJGB_VERSION 0x1 -#define PJGB_HEADER_SIZE 0x10 -#define PJGB_CHUNK_ENTRY_SIZE 0x10 -#define CHUNK_GAME 0x1 -#define CHUNK_PAL_BG 0x2 -#define CHUNK_PAL_OBJ 0x3 -#define CHUNK_TILES_BG 0x4 -#define CHUNK_TILES_OBJ 0x5 -#define CHUNK_MAP 0x6 -#define CHUNK_TEXT_BANK 0x7 -#define CHUNK_SCRIPT_CODE 0x8 -#define CHUNK_SCRIPT_TABLE 0x9 -#define CHUNK_SPRITE_TABLE 0xa - -/* ---------------------------------------------------------------------- - * Struct sizes / field constants - * ---------------------------------------------------------------------- */ - -#define PJGB_GAME_TITLE_LEN 0x18 -#define PJGB_GAME_HEADER_SIZE 0x2c -#define PJGB_MAP_HEADER_SIZE 0x1c -#define PJGB_ACTOR_INSTANCE_SIZE 0xc -#define PJGB_WARP_SIZE 0xc -#define PJGB_SPRITE_PROTO_SIZE 0x8 -#define PJGB_SCRIPT_NONE 0xffff -#define PJGB_COLLISION_WALKABLE 0x0 -#define PJGB_COLLISION_SOLID 0x1 - -/* ---------------------------------------------------------------------- - * Directions / movement / actor flags - * ---------------------------------------------------------------------- */ - -#define DIR_DOWN 0x0 -#define DIR_UP 0x1 -#define DIR_LEFT 0x2 -#define DIR_RIGHT 0x3 -#define MOVE_STATIC 0x0 -#define MOVE_WANDER 0x1 -#define MOVE_PATROL_H 0x2 -#define MOVE_PATROL_V 0x3 -#define ACTOR_FLAG_NONE 0x0 -#define ACTOR_FLAG_SOLID 0x1 - -/* ---------------------------------------------------------------------- - * Script VM - * ---------------------------------------------------------------------- */ - -#define OP_END 0x0 -#define OP_NOP 0x1 -#define OP_TEXT 0x2 -#define OP_SET_FLAG 0x3 -#define OP_CLEAR_FLAG 0x4 -#define OP_PUSH_FLAG 0x5 -#define OP_PUSH_CONST 0x6 -#define OP_POP 0x7 -#define OP_DUP 0x8 -#define OP_EQ 0x9 -#define OP_NE 0xa -#define OP_NOT 0xb -#define OP_JUMP 0xc -#define OP_JUMP_IF_FALSE 0xd -#define OP_CHOICE 0xe -#define OP_LOCK_PLAYER 0xf -#define OP_RELEASE_PLAYER 0x10 -#define OP_FACE_PLAYER 0x11 -#define OP_WARP 0x12 -#define OP_SET_VAR 0x13 -#define OP_ADD_VAR 0x14 -#define OP_PUSH_VAR 0x15 -#define OP_GIVE_ITEM 0x16 -#define OP_BATTLE 0x17 -#define OP_WAIT 0x18 -#define OP_PLAY_SFX 0x19 -#define PJGB_VM_MAX_STACK 0x10 - -/* ---------------------------------------------------------------------- - * Debug block (fixed EWRAM address for the mGBA harness) - * ---------------------------------------------------------------------- */ - -#define PJGB_EWRAM_BASE 0x2000000 -#define PJGB_DEBUG_ADDR 0x2000000 -#define PJGB_DEBUG_BLOCK_SIZE 0x44 -#define DEBUG_MAGIC 0x504a4442 -#define DBG_MAGIC 0x0 -#define DBG_PLAYER_X 0x4 -#define DBG_PLAYER_Y 0x6 -#define DBG_PLAYER_DIR 0x8 -#define DBG_CUR_MAP 0x9 -#define DBG_TEXT_ACTIVE 0xa -#define DBG_SCRIPT_ACTIVE 0xb -#define DBG_FRAME 0xc -#define DBG_CUR_TEXT 0x10 -#define DBG_CHOICE_CURSOR 0x12 -#define DBG_BOOTED 0x13 -#define DBG_FLAGS 0x14 -#define DBG_VARS 0x24 - -/* ---------------------------------------------------------------------- - * Budgets - * ---------------------------------------------------------------------- */ - -#define BUDGET_MAX_ACTORS_PER_MAP 0x18 -#define BUDGET_MAX_MAPS 0x20 -#define BUDGET_MAX_SPRITES 0x10 -#define BUDGET_MAX_FLAGS 0x80 -#define BUDGET_MAX_VARS 0x10 -#define BUDGET_MAX_TEXTS 0x200 -#define BUDGET_MAX_SCRIPTS 0x100 -#define BUDGET_MAX_BG_TILES 0x200 -#define BUDGET_MAX_OBJ_TILES 0x400 -#define BUDGET_MAX_MAP_TILES 0x4000 - -#endif /* PJGB_GEN_H */ diff --git a/aot/runtime/player.c b/aot/runtime/player.c deleted file mode 100644 index 04d8083..0000000 --- a/aot/runtime/player.c +++ /dev/null @@ -1,63 +0,0 @@ -// aot/runtime/player.c — grid movement, collision, and A-to-interact. -#include "runtime.h" - -#define SPEED 2 // pixels per frame while sliding between tiles -#define ANIM_RATE 6 - -// Indexed by DIR_DOWN, DIR_UP, DIR_LEFT, DIR_RIGHT. -static const int DX[4] = {0, 0, -1, 1}; -static const int DY[4] = {1, -1, 0, 0}; - -void player_update(void) { - Player *p = &g.player; - - // Decide a new action only when standing still (and not script-locked). - if (!p->moving && !p->locked) { - // A pressed (edge) -> interact with the tile we face. - if (key_pressed(KEY_A)) { - int tx = (int)(p->px >> 3), ty = (int)(p->py >> 3); - int fx = tx + DX[p->dir], fy = ty + DY[p->dir]; - int slot = map_actor_at(fx, fy); - if (slot >= 0 && g.actors[slot].on_talk != PJGB_SCRIPT_NONE) { - vm_start(g.actors[slot].on_talk, slot); - return; - } - } - - // Directional input: always turn, move if the target tile is free. - int dir = -1; - if (key_held(KEY_DOWN)) dir = DIR_DOWN; - else if (key_held(KEY_UP)) dir = DIR_UP; - else if (key_held(KEY_LEFT)) dir = DIR_LEFT; - else if (key_held(KEY_RIGHT)) dir = DIR_RIGHT; - - if (dir >= 0) { - p->dir = (u8)dir; - int nx = (int)(p->px >> 3) + DX[dir]; - int ny = (int)(p->py >> 3) + DY[dir]; - if (!map_solid(nx, ny)) p->moving = 1; - } - } - - // Slide toward the target tile; land exactly on the 8px grid. - if (p->moving) { - p->px += DX[p->dir] * SPEED; - p->py += DY[p->dir] * SPEED; - if (++p->anim_timer >= ANIM_RATE) { - p->anim_timer = 0; - p->anim_frame++; - } - if ((p->px & 7) == 0 && (p->py & 7) == 0) { - p->moving = 0; - // Stepping onto a warp tile transports the player. - int tx = (int)(p->px >> 3), ty = (int)(p->py >> 3); - for (int i = 0; i < g.n_warps; i++) { - if (g.warps[i].x == tx && g.warps[i].y == ty) { - const WarpRec *w = &g.warps[i]; - map_enter(w->dest_map, w->dest_x, w->dest_y, w->dest_dir); - return; - } - } - } - } -} diff --git a/aot/runtime/runtime.h b/aot/runtime/runtime.h deleted file mode 100644 index 52633be..0000000 --- a/aot/runtime/runtime.h +++ /dev/null @@ -1,201 +0,0 @@ -// aot/runtime/runtime.h — internal contract for the PocketJS-AOT GBA runtime. -// -// This is the shared header every runtime .c module includes. It defines the -// global game state, the ROM record structs (mirroring the PJGB binary layout -// from pjgb_gen.h), and every module's function signatures. The runtime never -// allocates during gameplay; all state lives in these globals (EWRAM/IWRAM). -// -// MEMORY MAP / VRAM PLAN (see gba.h): -// Mode 0. BG0 = map (32x32 screen, 4bpp, charblock 0, screenblock 8). -// BG1 = textbox/menu (charblock 0, screenblock 9, higher priority). -// BG char data (map tiles + font glyphs) -> charblock 0 (tiles 0..511). -// OBJ tiles (sprites) -> OBJ_VRAM, 1D mapping, 16x16 sprites (4 tiles each). -// BG palette bank 0 = map tileset; bank 15 = textbox/font. -// OBJ palette bank 0 = sprites. -// v1 caps maps at 32x32 tiles so the whole map fits one screenblock. -#ifndef PJGB_RUNTIME_H -#define PJGB_RUNTIME_H -#include "gba.h" -#include "pjgb_gen.h" - -// The cartridge blob, emitted by the compiler as gen_cart.c and linked in. -extern const unsigned char pjgb_cart[]; - -// --- ROM record structs (must match the PJGB binary layout) ----------------- -typedef struct { - char title[24]; - u8 start_map, start_dir; - u16 start_x, start_y; - u8 map_count, sprite_count; - u16 flag_count, text_count, script_count; - u16 font_base, box_tile, rsv; -} GameHeader; -_Static_assert(sizeof(GameHeader) == PJGB_GAME_HEADER_SIZE, "GameHeader size"); - -typedef struct { - u16 width, height, num_actors, num_warps; - u8 bg_palbank, on_load; - u16 rsv; - u32 tiles_off, collision_off, actors_off, warps_off; -} MapHeader; -_Static_assert(sizeof(MapHeader) == PJGB_MAP_HEADER_SIZE, "MapHeader size"); - -typedef struct { - u16 x, y; - u8 sprite, facing, move, flags; - u16 on_talk, rsv; -} ActorRec; -_Static_assert(sizeof(ActorRec) == PJGB_ACTOR_INSTANCE_SIZE, "ActorRec size"); - -typedef struct { - u16 x, y; - u8 dest_map, dest_dir; - u16 dest_x, dest_y, rsv; -} WarpRec; -_Static_assert(sizeof(WarpRec) == PJGB_WARP_SIZE, "WarpRec size"); - -typedef struct { - u16 tile_base; - u8 w, h, palbank, frames; - u16 rsv; -} SpriteRec; -_Static_assert(sizeof(SpriteRec) == PJGB_SPRITE_PROTO_SIZE, "SpriteRec size"); - -// --- Runtime state ---------------------------------------------------------- -typedef struct { - u8 active; // a script is running (incl. suspended) - u8 suspend; // VM_SUSP_* - const u8 *code; - u32 ip; - s16 stack[PJGB_VM_MAX_STACK]; - u8 sp; - u16 wait_frames; - s16 actor_slot; // actor that started the script (for FACE_PLAYER), or -1 -} VM; - -enum { VM_SUSP_NONE = 0, VM_SUSP_TEXT, VM_SUSP_CHOICE, VM_SUSP_WAIT }; - -typedef struct { - // player, in tile coords + sub-tile pixel progress for smooth walking - s32 px; // pixel position (world) x = tile*8 + progress - s32 py; - u8 dir; - u8 moving; // 1 while sliding between tiles - u8 anim_frame; - u8 anim_timer; - u8 locked; // LOCK_PLAYER - u8 sprite_id; // player sprite -} Player; - -typedef struct { - const GameHeader *game; - // current map - u8 map_id; - u16 map_w, map_h; - const u16 *map_tiles; // u16[w*h] - const u8 *map_collision; // u8[w*h] - const ActorRec *actors; - u16 n_actors; - const WarpRec *warps; - u16 n_warps; - u8 bg_palbank; - u8 actor_dir[BUDGET_MAX_ACTORS_PER_MAP]; // runtime facing override (FACE_PLAYER) - u8 actor_frame[BUDGET_MAX_ACTORS_PER_MAP]; // runtime anim frame - - Player player; - s32 cam_x, cam_y; // pixel scroll (top-left of view in world px) - - VM vm; - - // textbox - u8 text_active; - u16 cur_text; - // choice menu - u8 choice_active; - u8 choice_n; - u16 choice_ids[8]; - u8 choice_cursor; - s16 choice_result; // -1 until chosen - - // persistent state - u8 flags[16]; // 128 bits - s16 vars[16]; - - u16 keys, keys_prev; - u32 frame; -} Game; - -extern Game g; - -// --- cart.c ----------------------------------------------------------------- -void cart_load(const void *blob); -// Returns pointer to chunk data (or 0) and writes its size. -const u8 *cart_chunk(u32 kind, u32 id, u32 *out_size); - -// --- video.c ---------------------------------------------------------------- -void video_init(void); // DISPCNT, BG regs, load OBJ tiles + palettes once -void video_load_palettes(void); -void video_load_obj_tiles(void); - -// --- bg.c ------------------------------------------------------------------- -void bg_load_map(void); // load current map's tiles->charblock + screenblock + BG palette -void bg_set_scroll(void); // write BG0 HOFS/VOFS from camera - -// --- obj.c ------------------------------------------------------------------ -void obj_reset(void); // hide all sprites in shadow OAM -void obj_commit(void); // DMA shadow OAM -> hardware OAM (at vblank) -void obj_draw_scene(void); // place player + visible actors into shadow OAM -// low-level: set one 16x16 sprite slot (screen px). tile = OBJ tile index. -void obj_put(int slot, int sx, int sy, int tile, int palbank); - -// --- input.c ---------------------------------------------------------------- -void input_poll(void); -int key_held(int mask); -int key_pressed(int mask); // held this frame, not last - -// --- map.c ------------------------------------------------------------------ -void map_enter(int map_id, int tx, int ty, int dir); // switch map + place player -int map_solid(int tx, int ty); // 1 if tile blocks, incl. actors + bounds -int map_actor_at(int tx, int ty); // actor slot index at tile, or -1 - -// --- player.c / movement.c -------------------------------------------------- -void player_update(void); // input -> grid move w/ collision, camera follow, A=interact - -// --- actor.c ---------------------------------------------------------------- -void actors_update(void); - -// --- camera.c --------------------------------------------------------------- -void camera_follow(void); // clamp camera to player + map bounds - -// --- script_vm.c ------------------------------------------------------------ -void vm_start(int script_id, int actor_slot); -void vm_tick(void); // run/resume the VM this frame (until suspended/END) -int vm_active(void); - -// --- textbox.c -------------------------------------------------------------- -void textbox_init(void); -void textbox_show(int text_id); -void textbox_hide(void); -int textbox_active(void); -void textbox_tick(void); // handle A to advance; clears active when dismissed -// choice menu (rendered in the textbox area) -void choice_show(int n, const u16 *text_ids); -int choice_active(void); -void choice_tick(void); // up/down + A; sets result and clears active when chosen -int choice_result(void); - -// text bank access -const char *text_get(int text_id); - -// --- flags/vars ------------------------------------------------------------- -static inline int flag_get(int id) { return (g.flags[id >> 3] >> (id & 7)) & 1; } -static inline void flag_set(int id, int v) { - if (v) g.flags[id >> 3] |= (1 << (id & 7)); - else g.flags[id >> 3] &= ~(1 << (id & 7)); -} - -// --- debug.c ---------------------------------------------------------------- -void debug_init(void); -void debug_update(void); // mirror game state into the fixed EWRAM debug block - -#endif // PJGB_RUNTIME_H diff --git a/aot/runtime/script_vm.c b/aot/runtime/script_vm.c deleted file mode 100644 index 77e4c83..0000000 --- a/aot/runtime/script_vm.c +++ /dev/null @@ -1,230 +0,0 @@ -// aot/runtime/script_vm.c — the event-script stack machine. -#include "runtime.h" - -// --- operand readers (little-endian, advance ip) --------------------------- -static u8 rd_u8(void) { return g.vm.code[g.vm.ip++]; } -static u16 rd_u16(void) { - u16 v = (u16)(g.vm.code[g.vm.ip] | (g.vm.code[g.vm.ip + 1] << 8)); - g.vm.ip += 2; - return v; -} -static s16 rd_i16(void) { return (s16)rd_u16(); } - -// --- s16 operand stack (clamped) ------------------------------------------- -static void push(s16 v) { - if (g.vm.sp < PJGB_VM_MAX_STACK) g.vm.stack[g.vm.sp++] = v; -} -static s16 pop(void) { - if (g.vm.sp > 0) return g.vm.stack[--g.vm.sp]; - return 0; -} - -// Set actor `slot` to face the player: opposite of the player->actor -// direction, derived from the tile delta. -static void face_player(int slot) { - if (slot < 0 || slot >= g.n_actors) return; - int ax = g.actors[slot].x, ay = g.actors[slot].y; - int px = (int)(g.player.px >> 3), py = (int)(g.player.py >> 3); - int dx = px - ax, dy = py - ay; - int adx = dx < 0 ? -dx : dx; - int ady = dy < 0 ? -dy : dy; - int dir; - if (adx >= ady) dir = dx > 0 ? DIR_RIGHT : DIR_LEFT; - else dir = dy > 0 ? DIR_DOWN : DIR_UP; - g.actor_dir[slot] = (u8)dir; -} - -void vm_start(int script_id, int actor_slot) { - const u32 *table = (const u32 *)cart_chunk(CHUNK_SCRIPT_TABLE, 0, 0); - const u8 *code = cart_chunk(CHUNK_SCRIPT_CODE, 0, 0); - g.vm.code = code + table[script_id]; - g.vm.ip = 0; - g.vm.sp = 0; - g.vm.active = 1; - g.vm.suspend = VM_SUSP_NONE; - g.vm.wait_frames = 0; - g.vm.actor_slot = (s16)actor_slot; -} - -int vm_active(void) { return g.vm.active; } - -void vm_tick(void) { - if (!g.vm.active) return; - - // Resume from a suspension, if the resume condition is met. - switch (g.vm.suspend) { - case VM_SUSP_WAIT: - if (--g.vm.wait_frames == 0) g.vm.suspend = VM_SUSP_NONE; - else return; - break; - case VM_SUSP_TEXT: - if (!textbox_active()) g.vm.suspend = VM_SUSP_NONE; - else return; - break; - case VM_SUSP_CHOICE: - if (choice_result() >= 0) { - push((s16)choice_result()); - g.vm.suspend = VM_SUSP_NONE; - } else { - return; - } - break; - default: - break; - } - - // Execute ops until END or a new suspension is set. - for (;;) { - u8 op = rd_u8(); - switch (op) { - case OP_END: - g.vm.active = 0; - return; - case OP_NOP: - break; - case OP_TEXT: { - u16 t = rd_u16(); - textbox_show(t); - g.vm.suspend = VM_SUSP_TEXT; - return; - } - case OP_SET_FLAG: { - u16 f = rd_u16(); - flag_set(f, 1); - break; - } - case OP_CLEAR_FLAG: { - u16 f = rd_u16(); - flag_set(f, 0); - break; - } - case OP_PUSH_FLAG: { - u16 f = rd_u16(); - push((s16)flag_get(f)); - break; - } - case OP_PUSH_CONST: { - s16 v = rd_i16(); - push(v); - break; - } - case OP_POP: - pop(); - break; - case OP_DUP: { - s16 v = pop(); - push(v); - push(v); - break; - } - case OP_EQ: { - s16 b = pop(), a = pop(); - push(a == b ? 1 : 0); - break; - } - case OP_NE: { - s16 b = pop(), a = pop(); - push(a != b ? 1 : 0); - break; - } - case OP_NOT: { - s16 a = pop(); - push(a ? 0 : 1); - break; - } - case OP_JUMP: { - s16 rel = rd_i16(); // measured from after the operand bytes - g.vm.ip = (u32)((s32)g.vm.ip + rel); - break; - } - case OP_JUMP_IF_FALSE: { - s16 rel = rd_i16(); - if (!pop()) g.vm.ip = (u32)((s32)g.vm.ip + rel); - break; - } - case OP_CHOICE: { - u8 n = rd_u8(); - u16 ids[8]; - for (int i = 0; i < n; i++) { - u16 id = rd_u16(); - if (i < 8) ids[i] = id; - } - if (n > 8) n = 8; - choice_show(n, ids); - g.vm.suspend = VM_SUSP_CHOICE; - return; - } - case OP_LOCK_PLAYER: - g.player.locked = 1; - break; - case OP_RELEASE_PLAYER: - g.player.locked = 0; - break; - case OP_FACE_PLAYER: { - u8 slot = rd_u8(); - // 0xFF = "the actor that started this script" (compiler emits this for - // facePlayer(""), avoiding cross-map slot resolution). - if (slot == 0xff) { - if (g.vm.actor_slot < 0) break; - slot = (u8)g.vm.actor_slot; - } - face_player(slot); - break; - } - case OP_WARP: { - u8 m = rd_u8(); - u16 x = rd_u16(); - u16 y = rd_u16(); - u8 d = rd_u8(); - map_enter(m, x, y, d); - break; - } - case OP_SET_VAR: { - u16 i = rd_u16(); - s16 v = rd_i16(); - if (i < BUDGET_MAX_VARS) g.vars[i] = v; - break; - } - case OP_ADD_VAR: { - u16 i = rd_u16(); - s16 v = rd_i16(); - if (i < BUDGET_MAX_VARS) g.vars[i] += v; - break; - } - case OP_PUSH_VAR: { - u16 i = rd_u16(); - push(i < BUDGET_MAX_VARS ? g.vars[i] : 0); - break; - } - case OP_GIVE_ITEM: { - u16 item = rd_u16(); - u8 qty = rd_u8(); - (void)item; - (void)qty; // stub - break; - } - case OP_BATTLE: { - u16 id = rd_u16(); - (void)id; - push(1); // stub: "won" - break; - } - case OP_WAIT: { - u16 n = rd_u16(); - if (n == 0) break; - g.vm.wait_frames = n; - g.vm.suspend = VM_SUSP_WAIT; - return; - } - case OP_PLAY_SFX: { - u16 id = rd_u16(); - (void)id; // stub - break; - } - default: - // Unknown opcode: fail safe by ending the script. - g.vm.active = 0; - return; - } - } -} diff --git a/aot/runtime/textbox.c b/aot/runtime/textbox.c deleted file mode 100644 index fb0e1c3..0000000 --- a/aot/runtime/textbox.c +++ /dev/null @@ -1,116 +0,0 @@ -// aot/runtime/textbox.c — BG1 textbox + choice menu (screenblock PJ_TEXT_SBB). -#include "runtime.h" - -#define BOX_ROW0 12 -#define BOX_ROW1 19 -#define TEXT_COL0 1 -#define TEXT_ROW0 13 -#define TEXT_COLMAX 28 - -const char *text_get(int text_id) { - const u8 *chunk = cart_chunk(CHUNK_TEXT_BANK, 0, 0); - // u16 count, u16 rsv, u32 offsets[count] (from chunk start), then strings. - const u32 *offs = (const u32 *)(chunk + 4); - return (const char *)(chunk + offs[text_id]); -} - -static void box_fill(void) { - u16 *sb = SCREENBLOCK(PJ_TEXT_SBB); - for (int row = BOX_ROW0; row <= BOX_ROW1; row++) - for (int col = 0; col < 30; col++) - sb[row * 32 + col] = SE(g.game->box_tile, 15); -} - -static void put_char(u16 *sb, int row, int col, unsigned char c) { - if (c >= 0x20) sb[row * 32 + col] = SE(g.game->font_base + (c - 0x20), 15); -} - -void textbox_init(void) { - g.text_active = 0; - g.choice_active = 0; - g.choice_result = -1; -} - -void textbox_show(int text_id) { - g.cur_text = (u16)text_id; - g.text_active = 1; - - u16 *sb = SCREENBLOCK(PJ_TEXT_SBB); - box_fill(); - - const char *t = text_get(text_id); - int col = TEXT_COL0, row = TEXT_ROW0; - for (const char *c = t; *c; c++) { - if (*c == '\n') { - row++; - col = TEXT_COL0; - if (row > BOX_ROW1) break; - continue; - } - if (col > TEXT_COLMAX) { - row++; - col = TEXT_COL0; - } - if (row > BOX_ROW1) break; - put_char(sb, row, col, (unsigned char)*c); - col++; - } - - REG_DISPCNT |= DCNT_BG1; -} - -void textbox_hide(void) { - g.text_active = 0; - REG_DISPCNT &= ~DCNT_BG1; -} - -int textbox_active(void) { return g.text_active; } - -void textbox_tick(void) { - if (g.text_active && !g.choice_active && key_pressed(KEY_A)) textbox_hide(); -} - -// --- choice menu ----------------------------------------------------------- -static void choice_render(void) { - u16 *sb = SCREENBLOCK(PJ_TEXT_SBB); - box_fill(); - for (int i = 0; i < g.choice_n; i++) { - int row = TEXT_ROW0 + i; - if (row > BOX_ROW1) break; - if (i == g.choice_cursor) put_char(sb, row, TEXT_COL0, '>'); - const char *t = text_get(g.choice_ids[i]); - int col = TEXT_COL0 + 2; - for (const char *c = t; *c && col <= TEXT_COLMAX; c++, col++) - put_char(sb, row, col, (unsigned char)*c); - } -} - -void choice_show(int n, const u16 *text_ids) { - g.choice_active = 1; - g.choice_n = (u8)n; - g.choice_cursor = 0; - g.choice_result = -1; - for (int i = 0; i < n && i < 8; i++) g.choice_ids[i] = text_ids[i]; - choice_render(); - REG_DISPCNT |= DCNT_BG1; -} - -int choice_active(void) { return g.choice_active; } - -int choice_result(void) { return g.choice_result; } - -void choice_tick(void) { - if (!g.choice_active) return; - if (key_pressed(KEY_UP) && g.choice_cursor > 0) { - g.choice_cursor--; - choice_render(); - } else if (key_pressed(KEY_DOWN) && g.choice_cursor < g.choice_n - 1) { - g.choice_cursor++; - choice_render(); - } - if (key_pressed(KEY_A)) { - g.choice_result = g.choice_cursor; - g.choice_active = 0; - textbox_hide(); - } -} diff --git a/aot/runtime/video.c b/aot/runtime/video.c deleted file mode 100644 index 9791adf..0000000 --- a/aot/runtime/video.c +++ /dev/null @@ -1,34 +0,0 @@ -// aot/runtime/video.c — display setup + one-time VRAM/palette upload. -#include "runtime.h" - -static void copy16(u16 *dst, const u16 *src, u32 bytes) { - for (u32 i = 0; i < bytes / 2; i++) dst[i] = src[i]; -} - -void video_load_palettes(void) { - u32 sz; - const u16 *bg = (const u16 *)cart_chunk(CHUNK_PAL_BG, 0, &sz); - if (bg) copy16(BG_PAL, bg, sz); - const u16 *ob = (const u16 *)cart_chunk(CHUNK_PAL_OBJ, 0, &sz); - if (ob) copy16(OBJ_PAL, ob, sz); -} - -void video_load_obj_tiles(void) { - u32 sz; - const u16 *t = (const u16 *)cart_chunk(CHUNK_TILES_OBJ, 0, &sz); - if (t) copy16(OBJ_VRAM, t, sz); -} - -void video_init(void) { - REG_DISPCNT = DCNT_MODE0 | DCNT_BG0 | DCNT_OBJ | DCNT_OBJ_1D; - REG_BG0CNT = BG_CBB(PJ_BG_CBB) | BG_SBB(PJ_MAP_SBB) | BG_4BPP | BG_REG_32x32 | BG_PRIO(1); - REG_BG1CNT = BG_CBB(PJ_BG_CBB) | BG_SBB(PJ_TEXT_SBB) | BG_4BPP | BG_REG_32x32 | BG_PRIO(0); - - video_load_palettes(); - video_load_obj_tiles(); - - // BG character data (map tileset + font glyphs) -> BG charblock. - u32 sz; - const u16 *bgt = (const u16 *)cart_chunk(CHUNK_TILES_BG, 0, &sz); - if (bgt) copy16(CHARBLOCK(PJ_BG_CBB), bgt, sz); -} diff --git a/aot/spec/gen-c.ts b/aot/spec/gen-c.ts deleted file mode 100644 index 7219d9a..0000000 --- a/aot/spec/gen-c.ts +++ /dev/null @@ -1,104 +0,0 @@ -// aot/spec/gen-c.ts — generate runtime/pjgb_gen.h from spec/pjgb.ts so the C -// runtime can never drift from the TS compiler. Mirrors ../../spec/gen-rust.ts. -// -// bun aot/spec/gen-c.ts (writes aot/runtime/pjgb_gen.h) - -import { - ACTOR_FLAG, - ACTOR_INSTANCE_SIZE, - BUDGET, - CHUNK, - COLLISION_SOLID, - COLLISION_WALKABLE, - DBG, - DEBUG_ADDR, - DEBUG_BLOCK_SIZE, - DEBUG_MAGIC, - DIR, - EWRAM_BASE, - GAME_HEADER_SIZE, - GAME_TITLE_LEN, - MAP_HEADER_SIZE, - MOVE, - OP, - PJGB_CHUNK_ENTRY_SIZE, - PJGB_HEADER_SIZE, - PJGB_VERSION, - SCREEN_H, - SCREEN_TILES_H, - SCREEN_TILES_W, - SCREEN_W, - SCRIPT_NONE, - SPRITE_PROTO_SIZE, - TILE_4BPP_BYTES, - VM_MAX_STACK, - WARP_SIZE, -} from "./pjgb.ts"; - -function section(title: string): string { - return `\n/* ${"-".repeat(70)}\n * ${title}\n * ${"-".repeat(70)} */\n`; -} -function defs(prefix: string, obj: Record): string { - return Object.entries(obj) - .map(([k, v]) => `#define ${prefix}${k} ${v >= 0 ? `0x${(v >>> 0).toString(16)}` : v}`) - .join("\n"); -} - -const lines: string[] = []; -lines.push("// GENERATED by aot/spec/gen-c.ts from aot/spec/pjgb.ts — DO NOT EDIT."); -lines.push("#ifndef PJGB_GEN_H"); -lines.push("#define PJGB_GEN_H"); -lines.push("#include "); - -lines.push(section("Screen / tiles")); -lines.push(defs("PJGB_", { - SCREEN_W, - SCREEN_H, - SCREEN_TILES_W, - SCREEN_TILES_H, - TILE_4BPP_BYTES, -})); - -lines.push(section("Container header + chunks")); -lines.push(defs("PJGB_", { - VERSION: PJGB_VERSION, - HEADER_SIZE: PJGB_HEADER_SIZE, - CHUNK_ENTRY_SIZE: PJGB_CHUNK_ENTRY_SIZE, -})); -lines.push(defs("CHUNK_", CHUNK)); - -lines.push(section("Struct sizes / field constants")); -lines.push(defs("PJGB_", { - GAME_TITLE_LEN, - GAME_HEADER_SIZE, - MAP_HEADER_SIZE, - ACTOR_INSTANCE_SIZE, - WARP_SIZE, - SPRITE_PROTO_SIZE, - SCRIPT_NONE, - COLLISION_WALKABLE, - COLLISION_SOLID, -})); - -lines.push(section("Directions / movement / actor flags")); -lines.push(defs("DIR_", DIR)); -lines.push(defs("MOVE_", MOVE)); -lines.push(defs("ACTOR_FLAG_", ACTOR_FLAG)); - -lines.push(section("Script VM")); -lines.push(defs("OP_", OP)); -lines.push(defs("PJGB_", { VM_MAX_STACK })); - -lines.push(section("Debug block (fixed EWRAM address for the mGBA harness)")); -lines.push(defs("PJGB_", { EWRAM_BASE, DEBUG_ADDR, DEBUG_BLOCK_SIZE })); -lines.push(`#define DEBUG_MAGIC 0x${(DEBUG_MAGIC >>> 0).toString(16)}`); -lines.push(defs("DBG_", DBG)); - -lines.push(section("Budgets")); -lines.push(defs("BUDGET_", BUDGET)); - -lines.push("\n#endif /* PJGB_GEN_H */\n"); - -const out = new URL("../runtime/pjgb_gen.h", import.meta.url).pathname; -await Bun.write(out, lines.join("\n")); -console.log("wrote", out); diff --git a/aot/spec/pjgb.ts b/aot/spec/pjgb.ts deleted file mode 100644 index da4abc0..0000000 --- a/aot/spec/pjgb.ts +++ /dev/null @@ -1,348 +0,0 @@ -// aot/spec/pjgb.ts — THE single source of truth for the PJGB cartridge format, -// the script bytecode ISA, and the runtime debug block. -// -// Both sides derive from this file: -// - the compiler (aot/compiler/*) ENCODES these layouts, -// - the C runtime (aot/runtime/*) DECODES them, via generated pjgb_gen.h -// (aot/spec/gen-c.ts emits the #defines so C can never drift from TS). -// -// Conventions (non-negotiable, matches the repo-wide rule in ../../spec/spec.ts): -// - Little-endian EVERYWHERE (GBA ARM7TDMI is LE). -// - All offsets in comments are from the start of the containing blob/chunk. -// - GBA colors are 15-bit BGR555: bit0-4 R, 5-9 G, 10-14 B, bit15 unused. - -// --------------------------------------------------------------------------- -// Screen / hardware -// --------------------------------------------------------------------------- -export const SCREEN_W = 240; -export const SCREEN_H = 160; -export const TILE_PX = 8; // one GBA tile is 8x8 px -export const SCREEN_TILES_W = SCREEN_W / TILE_PX; // 30 -export const SCREEN_TILES_H = SCREEN_H / TILE_PX; // 20 -export const TILE_4BPP_BYTES = 32; // 8x8 @ 4bpp - -// --------------------------------------------------------------------------- -// Cartridge container: "PJGB" -// --------------------------------------------------------------------------- -export const PJGB_MAGIC = 0x424a5250; // 'P''J''G''B' read as LE u32 -> "PJGB" bytes -export const PJGB_MAGIC_BYTES = [0x50, 0x4a, 0x47, 0x42] as const; // 'P','J','G','B' -export const PJGB_VERSION = 1; - -// Header (16 bytes), at blob offset 0: -// 0 u8[4] magic "PJGB" -// 4 u16 version -// 6 u16 chunk_count -// 8 u32 chunk_table_offset (offset of the chunk directory) -// 12 u32 total_size -export const PJGB_HEADER_SIZE = 16; - -// Chunk directory entry (16 bytes each): -// 0 u32 kind (CHUNK.*) -// 4 u32 id (per-kind index, e.g. map index) -// 8 u32 offset (from blob start) -// 12 u32 size -export const PJGB_CHUNK_ENTRY_SIZE = 16; - -export const CHUNK = { - GAME: 1, // GameHeader (see below) - PAL_BG: 2, // u16[] BGR555 (16 * n colors) - PAL_OBJ: 3, // u16[] BGR555 - TILES_BG: 4, // 4bpp tile data (32 bytes/tile), tile 0 = blank - TILES_OBJ: 5, // 4bpp OBJ tile data (sprites + font glyphs) - MAP: 6, // one per map, id = map index (MapChunk) - TEXT_BANK: 7, // string table (TextBank) - SCRIPT_CODE: 8, // raw bytecode bytes for all scripts, concatenated - SCRIPT_TABLE: 9, // u32[] byte-offsets into SCRIPT_CODE, indexed by script id - SPRITE_TABLE: 10, // SpriteProto[] indexed by sprite id -} as const; -export type ChunkKind = (typeof CHUNK)[keyof typeof CHUNK]; - -// --------------------------------------------------------------------------- -// GameHeader chunk (CHUNK.GAME, id 0) -// 0 u8[24] title (ascii, null-padded) -// 24 u8 start_map -// 25 u8 start_dir -// 26 u16 start_x (tile) -// 28 u16 start_y (tile) -// 30 u8 map_count -// 31 u8 sprite_count -// 32 u16 flag_count -// 34 u16 text_count -// 36 u16 script_count -// 38 u16 font_base (BG tile index of ASCII 0x20; glyph = font_base+ch-0x20) -// 40 u16 box_tile (BG tile index of the opaque textbox fill tile) -// 42 u16 reserved -// = 44 bytes -// --------------------------------------------------------------------------- -export const GAME_TITLE_LEN = 24; -export const GAME_HEADER_SIZE = 44; - -// --------------------------------------------------------------------------- -// MapChunk (CHUNK.MAP, id = map index). Self-describing; all *_off are -// relative to the START of this chunk. -// 0 u16 width (tiles) -// 2 u16 height (tiles) -// 4 u16 num_actors -// 6 u16 num_warps -// 8 u8 bg_palbank (which 16-color BG palette bank the map tiles use) -// 9 u8 on_load_script (0xFF = none) -- reserved for future -// 10 u16 reserved -// 12 u32 tiles_off -> u16[width*height] BG screen-entry tile indices -// 16 u32 collision_off -> u8[width*height] (0 = walkable, 1 = solid) -// 20 u32 actors_off -> ActorInstance[num_actors] -// 24 u32 warps_off -> Warp[num_warps] -// = 28 byte header, then the referenced tables. -// --------------------------------------------------------------------------- -export const MAP_HEADER_SIZE = 28; -export const COLLISION_WALKABLE = 0; -export const COLLISION_SOLID = 1; - -// ActorInstance (12 bytes): -// 0 u16 x (tile) -// 2 u16 y (tile) -// 4 u8 sprite_id -// 5 u8 facing (DIR.*) -// 6 u8 movement (MOVE.*) -// 7 u8 flags (ACTOR_FLAG.*) -// 8 u16 on_talk (script id, 0xFFFF = none) -// 10 u16 reserved -export const ACTOR_INSTANCE_SIZE = 12; -export const SCRIPT_NONE = 0xffff; - -export const ACTOR_FLAG = { - NONE: 0, - SOLID: 1 << 0, // blocks the player tile -} as const; - -// Warp (12 bytes) — the compiler resolves "map:entrance" to concrete coords: -// 0 u16 x (tile on the source map that triggers the warp) -// 2 u16 y -// 4 u8 dest_map -// 5 u8 dest_dir -// 6 u16 dest_x -// 8 u16 dest_y -// 10 u16 reserved -export const WARP_SIZE = 12; - -// SpriteProto (SPRITE_TABLE, 8 bytes) — v1: fixed 16x16 sprites, 4 facings, -// each facing = one OBJ tile block. tile_base indexes TILES_OBJ in 8x8 units. -// 0 u16 tile_base (first OBJ tile index; layout below) -// 2 u8 w_px -// 3 u8 h_px -// 4 u8 palbank (OBJ palette bank) -// 5 u8 frames (walk frames per direction) -// 6 u16 reserved -// OBJ tile layout per sprite (16x16 = 4 tiles/frame, order: 4 dirs * frames): -// tile_base + (dir * frames + frame) * tiles_per_frame -export const SPRITE_PROTO_SIZE = 8; - -// --------------------------------------------------------------------------- -// TextBank (CHUNK.TEXT_BANK, id 0): -// 0 u16 count -// 2 u16 reserved -// 4 u32[count] offsets (relative to chunk start) to null-terminated ascii -// ... string bytes -// Text uses the runtime font charset (ASCII 0x20..0x7E). '\n' (0x0A) = newline. -// --------------------------------------------------------------------------- -export const TEXTBANK_HEADER_SIZE = 4; - -// --------------------------------------------------------------------------- -// Directions / movement -// --------------------------------------------------------------------------- -export const DIR = { DOWN: 0, UP: 1, LEFT: 2, RIGHT: 3 } as const; -export type DirName = keyof typeof DIR; -export const DIR_NAMES: Record = { - down: DIR.DOWN, - up: DIR.UP, - left: DIR.LEFT, - right: DIR.RIGHT, -}; -// dx/dy per direction (tile units) -export const DIR_DX = [0, 0, -1, 1] as const; // down,up,left,right -export const DIR_DY = [1, -1, 0, 0] as const; - -export const MOVE = { STATIC: 0, WANDER: 1, PATROL_H: 2, PATROL_V: 3 } as const; -export const MOVE_NAMES: Record = { - static: MOVE.STATIC, - wander: MOVE.WANDER, - patrolH: MOVE.PATROL_H, - patrolV: MOVE.PATROL_V, -}; - -// --------------------------------------------------------------------------- -// Script VM — a small stack machine. u8 opcode, then little-endian operands. -// The residualizer (aot/compiler/script.ts) emits these; script_vm.c runs them. -// --------------------------------------------------------------------------- -export const OP = { - END: 0x00, // terminate script - NOP: 0x01, // - TEXT: 0x02, // u16 textId show text box, SUSPEND until A - SET_FLAG: 0x03, // u16 flagId flags[flagId] = 1 - CLEAR_FLAG: 0x04, // u16 flagId flags[flagId] = 0 - PUSH_FLAG: 0x05, // u16 flagId push flags[flagId] (0/1) - PUSH_CONST: 0x06, // i16 value push value - POP: 0x07, // discard top - DUP: 0x08, // duplicate top - EQ: 0x09, // b=pop,a=pop, push (a==b) - NE: 0x0a, // push (a!=b) - NOT: 0x0b, // a=pop, push (a==0) - JUMP: 0x0c, // i16 rel ip += rel (rel is from AFTER the operand) - JUMP_IF_FALSE: 0x0d, // i16 rel a=pop; if a==0 ip += rel - CHOICE: 0x0e, // u8 n, u16 t0..t(n-1) menu of n text options; SUSPEND, push chosen index - LOCK_PLAYER: 0x0f, // - RELEASE_PLAYER: 0x10, // - FACE_PLAYER: 0x11, // u8 actorSlot actor turns to face the player - WARP: 0x12, // u8 map,u16 x,u16 y,u8 dir change map + reposition player - SET_VAR: 0x13, // u16 varId, i16 val - ADD_VAR: 0x14, // u16 varId, i16 val - PUSH_VAR: 0x15, // u16 varId - GIVE_ITEM: 0x16, // u16 itemId, u8 count (v1 stub: increments an inventory var) - BATTLE: 0x17, // u16 battleId (v1 stub: shows "* battle *" text, push 1=win) - WAIT: 0x18, // u16 frames SUSPEND for N frames - PLAY_SFX: 0x19, // u16 sfxId (v1 stub, no-op) -} as const; -export type OpName = keyof typeof OP; - -// Operand widths per opcode (bytes AFTER the u8 opcode). CHOICE is variable and -// handled specially (0xFF sentinel here). -export const OP_OPERAND_BYTES: Record = { - [OP.END]: 0, - [OP.NOP]: 0, - [OP.TEXT]: 2, - [OP.SET_FLAG]: 2, - [OP.CLEAR_FLAG]: 2, - [OP.PUSH_FLAG]: 2, - [OP.PUSH_CONST]: 2, - [OP.POP]: 0, - [OP.DUP]: 0, - [OP.EQ]: 0, - [OP.NE]: 0, - [OP.NOT]: 0, - [OP.JUMP]: 2, - [OP.JUMP_IF_FALSE]: 2, - [OP.CHOICE]: -1, // variable: 1 + 2*n - [OP.LOCK_PLAYER]: 0, - [OP.RELEASE_PLAYER]: 0, - [OP.FACE_PLAYER]: 1, - [OP.WARP]: 6, // u8 + u16 + u16 + u8 - [OP.SET_VAR]: 4, - [OP.ADD_VAR]: 4, - [OP.PUSH_VAR]: 2, - [OP.GIVE_ITEM]: 3, - [OP.BATTLE]: 2, - [OP.WAIT]: 2, - [OP.PLAY_SFX]: 2, -}; - -export const VM_MAX_STACK = 16; - -// --------------------------------------------------------------------------- -// Runtime debug block — written by the runtime into a FIXED EWRAM address so -// the mGBA test harness can read game state without symbols. Layout must match -// runtime/debug.c. Addresses are absolute GBA bus addresses. -// --------------------------------------------------------------------------- -export const EWRAM_BASE = 0x02000000; -export const DEBUG_ADDR = EWRAM_BASE; // debug block sits at the top of EWRAM -// Offsets within the debug block: -export const DBG = { - MAGIC: 0x00, // u32 'PJDB' - PLAYER_X: 0x04, // u16 tile - PLAYER_Y: 0x06, // u16 tile - PLAYER_DIR: 0x08, // u8 - CUR_MAP: 0x09, // u8 - TEXT_ACTIVE: 0x0a, // u8 (1 if a text box is on screen) - SCRIPT_ACTIVE: 0x0b, // u8 (1 if a script is running) - FRAME: 0x0c, // u32 frame counter - CUR_TEXT: 0x10, // u16 currently-shown text id (0xFFFF none) - CHOICE_CURSOR: 0x12, // u8 highlighted choice index while a CHOICE menu is up - BOOTED: 0x13, // u8 (1 once the main loop has started — liveness marker) - FLAGS: 0x14, // u8[16] = 128 flag bits (flag n -> byte n>>3, bit n&7) - VARS: 0x24, // i16[16] general vars -} as const; -export const DEBUG_MAGIC = 0x50_4a_44_42; // 'PJDB' as u32 (bytes P,J,D,B LE) -export const DEBUG_MAGIC_BYTES = [0x50, 0x4a, 0x44, 0x42] as const; -export const DEBUG_BLOCK_SIZE = 0x44; - -// Convenience: absolute address of a debug field. -export const dbgAddr = (field: keyof typeof DBG): number => DEBUG_ADDR + DBG[field]; -export const flagAddr = (flagId: number): { addr: number; bit: number } => ({ - addr: DEBUG_ADDR + DBG.FLAGS + (flagId >> 3), - bit: flagId & 7, -}); - -// --------------------------------------------------------------------------- -// Compile-time budgets (design §16). Exceeding -> build error. -// --------------------------------------------------------------------------- -export const BUDGET = { - MAX_ACTORS_PER_MAP: 24, - MAX_MAPS: 32, - MAX_SPRITES: 16, // one OBJ palette bank per sprite; hardware has 16 banks - MAX_FLAGS: 128, - MAX_VARS: 16, - MAX_TEXTS: 512, - MAX_SCRIPTS: 256, - // BG char data lives in charblock 0 (512 4bpp tiles); the map screenblock - // sits at SBB 8 = the start of charblock 1, so BG tiles must fit in 512. - MAX_BG_TILES: 512, - MAX_OBJ_TILES: 1024, // OBJ VRAM 0x06010000..0x06018000 = 1024 4bpp tiles - MAX_MAP_TILES: 128 * 128, -} as const; - -// --------------------------------------------------------------------------- -// Color: pack an 8-bit RGB triple into GBA BGR555. -// --------------------------------------------------------------------------- -export function rgb555(r: number, g: number, b: number): number { - const R = (r >> 3) & 0x1f; - const G = (g >> 3) & 0x1f; - const B = (b >> 3) & 0x1f; - return (B << 10) | (G << 5) | R; -} - -// --------------------------------------------------------------------------- -// Little-endian byte writer used by the compiler backend (pack.ts / lower.ts). -// --------------------------------------------------------------------------- -export class ByteWriter { - private buf: number[] = []; - get length(): number { - return this.buf.length; - } - u8(v: number): this { - this.buf.push(v & 0xff); - return this; - } - u16(v: number): this { - this.buf.push(v & 0xff, (v >> 8) & 0xff); - return this; - } - i16(v: number): this { - return this.u16(v & 0xffff); - } - u32(v: number): this { - this.buf.push(v & 0xff, (v >> 8) & 0xff, (v >> 16) & 0xff, (v >> 24) & 0xff); - return this; - } - bytes(b: ArrayLike): this { - for (let i = 0; i < b.length; i++) this.buf.push(b[i] & 0xff); - return this; - } - ascii(s: string, fixedLen?: number): this { - const n = fixedLen ?? s.length; - for (let i = 0; i < n; i++) this.buf.push(i < s.length ? s.charCodeAt(i) & 0xff : 0); - return this; - } - /** Pad to a 4-byte boundary. */ - align4(): this { - while (this.buf.length & 3) this.buf.push(0); - return this; - } - patchU32(at: number, v: number): this { - this.buf[at] = v & 0xff; - this.buf[at + 1] = (v >> 8) & 0xff; - this.buf[at + 2] = (v >> 16) & 0xff; - this.buf[at + 3] = (v >> 24) & 0xff; - return this; - } - toUint8Array(): Uint8Array { - return Uint8Array.from(this.buf); - } -} diff --git a/aot/test/dsl-jsx-types.tsx b/aot/test/dsl-jsx-types.tsx deleted file mode 100644 index 6eae2d2..0000000 --- a/aot/test/dsl-jsx-types.tsx +++ /dev/null @@ -1,65 +0,0 @@ -/** @jsxImportSource @pocketjs/aot */ -import { - ascii, - defineMap, - defineTileset, - Npc, - PlayerSpawn, - script, - tile, -} from "../dsl/index.ts"; - -const rows8 = (v: string): string[] => Array.from({ length: 8 }, () => v); - -const typedTown = defineTileset("typed-jsx-town", { - palette: [[0, 0, 0]], - tiles: { - grass: { px: rows8("11111111") }, - wall: { solid: true, px: rows8("22222222") }, - }, -}); - -const talk = script(0); - -defineMap("typed-jsx-ok") - .tileset(typedTown) - .layer( - ascii` - #. - `.legend({ - "#": tile("wall"), - ".": tile("grass"), - }), - ) - .entities( - , - , - ); - -defineMap("typed-jsx-bad-facing") - .tileset(typedTown) - .layer( - ascii` - . - `.legend({ - ".": tile("grass"), - }), - ) - .entities( - // @ts-expect-error "north" is not a GBA direction. - , - ); - -defineMap("typed-jsx-bad-script") - .tileset(typedTown) - .layer( - ascii` - . - `.legend({ - ".": tile("grass"), - }), - ) - .entities( - // @ts-expect-error onTalk must be a compiled ScriptRef. - , - ); diff --git a/aot/test/dsl-jsx.test.tsx b/aot/test/dsl-jsx.test.tsx deleted file mode 100644 index 1b0da61..0000000 --- a/aot/test/dsl-jsx.test.tsx +++ /dev/null @@ -1,104 +0,0 @@ -/** @jsxImportSource @pocketjs/aot */ -import { describe, expect, test } from "bun:test"; -import { - __resetRegistry, - ascii, - defineMap, - defineSprite, - defineTileset, - Entrance, - Layer, - Npc, - PlayerSpawn, - script, - Sign, - tile, - Warp, -} from "../dsl/index.ts"; - -const rows8 = (v: string): string[] => Array.from({ length: 8 }, () => v); -const rows16 = (v: string): string[] => Array.from({ length: 16 }, () => v); - -describe("AOT JSX entity composition", () => { - test("MapBuilder.entities expands pure JSX prefabs into scene nodes", () => { - __resetRegistry(); - - const town = defineTileset("town", { - palette: [[0, 0, 0]], - tiles: { - grass: { px: rows8("11111111") }, - wall: { solid: true, px: rows8("22222222") }, - }, - }); - const hero = defineSprite("hero", { - size: [16, 16], - palette: [[0, 0, 0]], - facings: { - down: [rows16("0000000000000000")], - up: [rows16("0000000000000000")], - left: [rows16("0000000000000000")], - right: [rows16("0000000000000000")], - }, - }); - const talk = script(0); - - function TownEntities() { - return ( - <> - - - - - - - ); - } - - const map = defineMap("littleroot") - .tileset(town) - .layer( - ascii` - ### - #.# - ### - `.legend({ - "#": tile("wall"), - ".": tile("grass"), - }), - ) - .entities() - .done(); - - expect(map.root.children.map((child) => child.host)).toEqual([ - "Layer", - "PlayerSpawn", - "Entrance", - "Npc", - "Sign", - "Warp", - ]); - expect(map.root.children[3]!.props).toMatchObject({ - id: "rival", - sprite: "hero", - at: [2, 1], - facing: "left", - movement: "static", - onTalk: talk, - }); - }); - - test("MapBuilder.entities keeps tile layers on the typed builder path", () => { - const town = defineTileset("town-entities-reject-layer", { - palette: [[0, 0, 0]], - tiles: { - grass: { px: rows8("11111111") }, - }, - }); - - expect(() => - defineMap("bad-entities") - .tileset(town) - .entities(), - ).toThrow('defineMap("bad-entities").entities(...) does not accept '); - }); -}); diff --git a/aot/test/dsl-types.ts b/aot/test/dsl-types.ts deleted file mode 100644 index a8cbf13..0000000 --- a/aot/test/dsl-types.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { ascii, defineMap, defineTileset, tile } from "../dsl/index.ts"; - -const rows8 = (v: string): string[] => Array.from({ length: 8 }, () => v); - -const typedTown = defineTileset("typed-town", { - palette: [[0, 0, 0]], - tiles: { - grass: { px: rows8("11111111") }, - wall: { solid: true, px: rows8("22222222") }, - }, -}); - -defineMap("typed-ok") - .tileset(typedTown) - .layer( - ascii` - #. - `.legend({ - "#": tile("wall"), - ".": tile("grass"), - }), - ); - -defineMap("typed-bad") - .tileset(typedTown) - .layer( - // @ts-expect-error "water" is not a tile in typedTown. - ascii` - ~ - `.legend({ - "~": tile("water"), - }), - ); - -const constTown = defineTileset("const-town", { - palette: [[0, 0, 0]], - tiles: { - grass: { - px: [ - "11111111", - "11111111", - "11111111", - "11111111", - "11111111", - "11111111", - "11111111", - "11111111", - ], - }, - }, -} as const); - -defineMap("const-ok") - .tileset(constTown) - .layer( - ascii` - . - `.legend({ - ".": tile("grass"), - }), - ); diff --git a/aot/test/dsl.test.ts b/aot/test/dsl.test.ts deleted file mode 100644 index 2f210ca..0000000 --- a/aot/test/dsl.test.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { describe, expect, test } from "bun:test"; -import { - __resetRegistry, - ascii, - defineMap, - defineSprite, - defineTileset, - script, - tile, -} from "../dsl/index.ts"; - -const rows8 = (v: string): string[] => Array.from({ length: 8 }, () => v); -const rows16 = (v: string): string[] => Array.from({ length: 16 }, () => v); - -describe("AOT map builder DSL", () => { - test("ascii normalizes indentation and validates legend coverage", () => { - const layer = ascii` - ### - #.# - ### - `.legend({ - "#": tile("wall"), - ".": tile("grass"), - }); - - expect(layer.rows).toEqual(["###", "#.#", "###"]); - expect(layer.legend).toEqual({ "#": "wall", ".": "grass" }); - - expect(() => - ascii` - ## - #. - `.legend({ - "#": tile("wall"), - }), - ).toThrow('ascii legend missing entry for "."'); - }); - - test("defineMap builder emits the same host scene nodes the compiler walks", () => { - __resetRegistry(); - - const town = defineTileset("town", { - palette: [[0, 0, 0]], - tiles: { - grass: { px: rows8("11111111") }, - wall: { solid: true, px: rows8("22222222") }, - }, - }); - const hero = defineSprite("hero", { - size: [16, 16], - palette: [[0, 0, 0]], - facings: { - down: [rows16("0000000000000000")], - up: [rows16("0000000000000000")], - left: [rows16("0000000000000000")], - right: [rows16("0000000000000000")], - }, - }); - const talk = script(0); - - const map = defineMap("littleroot") - .tileset(town) - .layer( - ascii` - ### - #.# - ### - `.legend({ - "#": tile("wall"), - ".": tile("grass"), - }), - ) - .spawn("spawn").at(1, 1).facing("down") - .entrance("south").at(1, 2).facing("up") - .npc("rival").sprite(hero).at(2, 1).facing("left").movement("static").talk(talk) - .sign("HELLO").at(1, 0) - .warp("route101:north").at(1, 2) - .done(); - - expect(map.name).toBe("littleroot"); - expect(map.tileset).toBe("town"); - expect(map.size).toEqual([3, 3]); - expect(map.root.children.map((child) => child.host)).toEqual([ - "Layer", - "PlayerSpawn", - "Entrance", - "Npc", - "Sign", - "Warp", - ]); - expect(map.root.children[3]!.props).toMatchObject({ - id: "rival", - sprite: "hero", - at: [2, 1], - facing: "left", - movement: "static", - onTalk: talk, - }); - }); -}); diff --git a/aot/test/e2e.ts b/aot/test/e2e.ts deleted file mode 100644 index 9ebe59d..0000000 --- a/aot/test/e2e.ts +++ /dev/null @@ -1,144 +0,0 @@ -// aot/test/e2e.ts — end-to-end test: build the demo ROM, drive it headlessly in -// mGBA (via the libmgba runner), and assert real game state (player position, -// map, flags, dialogue) after scripted input. This is the "runs on GBA" proof. -// -// bun aot/test/e2e.ts - -import { $ } from "bun"; -import { compile, debugInfo } from "../compiler/index.ts"; -import { buildRom } from "../compiler/rom.ts"; -import { DBG, DEBUG_ADDR } from "../spec/pjgb.ts"; - -const ROOT = new URL("../..", import.meta.url).pathname; -const RUNNER = ROOT + "aot/test/harness/mgba_runner"; -const ROM = ROOT + "aot/dist/pocket-town.gba"; -const SHOTS = ROOT + "aot/dist/shots"; - -const addr = (field: keyof typeof DBG): number => DEBUG_ADDR + DBG[field]; - -type Step = - | { op: "advance"; frames: number } - | { op: "press"; buttons: string[]; frames: number; release?: number } - | { op: "read"; name: string; addr: number; size: 1 | 2 | 4 } - | { op: "screenshot"; path: string }; - -async function run(steps: Step[]): Promise> { - const scenario = ROOT + `aot/dist/scenario.json`; - await Bun.write(scenario, JSON.stringify({ steps })); - const out = await $`${RUNNER} ${ROM} ${scenario}`.text(); - const line = out - .trim() - .split("\n") - .reverse() - .find((l) => l.trim().startsWith("{")); - if (!line) throw new Error("runner produced no JSON:\n" + out); - const parsed = JSON.parse(line); - if (!parsed.ok) throw new Error("runner error: " + JSON.stringify(parsed)); - return parsed.reads ?? {}; -} - -// --- assertions ------------------------------------------------------------- -let passed = 0; -let failed = 0; -function check(name: string, got: unknown, want: unknown): void { - const ok = got === want; - console.log(` ${ok ? "\x1b[32mPASS\x1b[0m" : "\x1b[31mFAIL\x1b[0m"} ${name}: got ${got}${ok ? "" : `, want ${want}`}`); - ok ? passed++ : failed++; -} - -const R = { X: addr("PLAYER_X"), Y: addr("PLAYER_Y"), DIR: addr("PLAYER_DIR"), MAP: addr("CUR_MAP"), TEXT: addr("TEXT_ACTIVE"), SCRIPT: addr("SCRIPT_ACTIVE"), CUR: addr("CUR_TEXT"), BOOT: addr("BOOTED") }; -const rd = (name: string, a: number, size: 1 | 2 | 4): Step => ({ op: "read", name, addr: a, size }); -const press = (b: string, frames: number, release = 4): Step => ({ op: "press", buttons: [b], frames, release }); -const shot = (n: string): Step => ({ op: "screenshot", path: `${SHOTS}/${n}.ppm` }); - -async function main(): Promise { - console.log("Building demo ROM..."); - const built = await compile(ROOT + "aot/demo/game.tsx"); - const di = debugInfo(built) as { flags: Record; texts: string[]; maps: Record }; - const rom = await buildRom(built.blob, ROM); - await $`mkdir -p ${SHOTS}`.quiet(); - console.log(`ROM: ${rom.size} bytes\n`); - - const tid = (s: string): number => { - const i = di.texts.indexOf(s); - if (i < 0) throw new Error("text not found: " + s); - return i; - }; - const flagBeat = di.flags["beat_rival_1"]; - - // === Scenario 1: boot === - console.log("Scenario 1 — boot & spawn"); - { - const r = await run([{ op: "advance", frames: 15 }, rd("boot", R.BOOT, 1), rd("x", R.X, 2), rd("y", R.Y, 2), rd("map", R.MAP, 1), shot("01_boot")]); - check("booted", r.boot, 1); - check("spawn x", r.x, built.model.start.x); - check("spawn y", r.y, built.model.start.y); - check("start map", r.map, 0); - } - - // === Scenario 2: walk to rival, dialogue, choose Battle, flag + item === - console.log("Scenario 2 — talk to rival, choose Battle, win, flag set"); - { - const r = await run([ - { op: "advance", frames: 10 }, - press("RIGHT", 8), // -> (11,14) - press("UP", 20), // -> (11,9) - press("RIGHT", 4), // face the rival (blocked, SOLID) - rd("faceDir", R.DIR, 1), - rd("faceX", R.X, 2), - press("A", 1, 8), // interact -> "You made it!" - rd("d1_script", R.SCRIPT, 1), - rd("d1_text", R.TEXT, 1), - rd("d1_cur", R.CUR, 2), - shot("02_dialogue"), - press("A", 1, 8), // dismiss -> choice menu - rd("choice_script", R.SCRIPT, 1), - rd("choice_text", R.TEXT, 1), - shot("03_choice"), - press("A", 1, 20), // pick Battle -> battle, setFlag, giveItem, "Take this Potion" - rd("won_flag", flagBeat.byteAddr, 1), - rd("won_cur", R.CUR, 2), - rd("won_text", R.TEXT, 1), - shot("04_reward"), - press("A", 1, 12), // dismiss -> END - rd("end_script", R.SCRIPT, 1), - rd("end_text", R.TEXT, 1), - // talk AGAIN: beat_rival_1 is now set, so the folded THEN branch runs. - press("A", 1, 8), - rd("again_cur", R.CUR, 2), - rd("again_text", R.TEXT, 1), - ]); - check("faces right at rival", r.faceDir, 3); - check("blocked (x stays 11)", r.faceX, 11); - check("dialogue: script active", r.d1_script, 1); - check("dialogue: textbox up", r.d1_text, 1); - check('dialogue: shows "You made it!"', r.d1_cur, tid("You made it! Want to test your first build?")); - check("choice: script still active", r.choice_script, 1); - check("choice: textbox flag cleared", r.choice_text, 0); - check("Battle set beat_rival_1", (r.won_flag >> flagBeat.bit) & 1, 1); - check('reward shows "Take this Potion"', r.won_cur, tid("Take this Potion. You will need it.")); - check("script ends after reward", r.end_script, 0); - check("textbox closed at end", r.end_text, 0); - check("re-talk: flag branch shows post-win line", r.again_cur, tid("The road ahead is tougher than it looks.")); - check("re-talk: textbox up", r.again_text, 1); - } - - // === Scenario 3: warp town -> route101 === - console.log("Scenario 3 — warp from Littleroot to Route 101"); - { - const r = await run([ - { op: "advance", frames: 10 }, - press("DOWN", 16), // (9,14) -> warp tile (9,17) -> route101 - rd("map", R.MAP, 1), - rd("x", R.X, 2), - shot("05_route"), - ]); - check("warped to route101 (map 1)", r.map, di.maps["route101"]); - check("entered near entrance x", r.x, 9); - } - - console.log(`\n${failed === 0 ? "\x1b[32m" : "\x1b[31m"}${passed} passed, ${failed} failed\x1b[0m`); - process.exit(failed === 0 ? 0 : 1); -} - -await main(); diff --git a/aot/test/handcart.ts b/aot/test/handcart.ts deleted file mode 100644 index 35dfa17..0000000 --- a/aot/test/handcart.ts +++ /dev/null @@ -1,253 +0,0 @@ -// aot/test/handcart.ts — hand-built minimal PJGB cartridge -> aot/runtime/gen_cart.c -// -// Not the real compiler; a fixture that (a) validates the binary spec end-to-end -// and (b) gives the C runtime a bootable scene to verify against headlessly: -// an 8x8 grassy map bordered by trees, one solid NPC, and a script that faces -// the player, shows two text pages, and sets flag #1. -// -// bun aot/test/handcart.ts - -import { - ByteWriter, - CHUNK, - DIR, - ACTOR_FLAG, - OP, - SCRIPT_NONE, - rgb555, -} from "../spec/pjgb.ts"; -import { emitCartC, packCart, type Chunk } from "../compiler/pack.ts"; - -// --- tile / palette helpers ------------------------------------------------- -// GBA 4bpp tile: 32 bytes, row-major, 4 bytes/row, low nibble = left pixel. -function tile4(px: number[]): Uint8Array { - const out = new Uint8Array(32); - for (let row = 0; row < 8; row++) { - for (let c = 0; c < 4; c++) { - const lo = px[row * 8 + c * 2] & 0xf; - const hi = px[row * 8 + c * 2 + 1] & 0xf; - out[row * 4 + c] = lo | (hi << 4); - } - } - return out; -} -const fill = (idx: number): number[] => new Array(64).fill(idx); - -// --- BG palette (256 entries = 16 banks of 16) ------------------------------ -const bgPal = new Uint16Array(256); -bgPal[0] = rgb555(24, 24, 32); // backdrop -bgPal[1] = rgb555(104, 192, 96); // grass light -bgPal[2] = rgb555(72, 152, 72); // grass dark -bgPal[3] = rgb555(96, 64, 40); // trunk -bgPal[4] = rgb555(48, 120, 56); // leaves -// textbox bank 15 -bgPal[240] = rgb555(0, 0, 0); -bgPal[241] = rgb555(248, 248, 248); // text -bgPal[242] = rgb555(24, 32, 72); // box bg - -// --- OBJ palette (bank 0) --------------------------------------------------- -const objPal = new Uint16Array(16); -objPal[0] = 0; // transparent -objPal[1] = rgb555(240, 200, 160); // skin -objPal[2] = rgb555(200, 64, 64); // shirt -objPal[3] = rgb555(40, 32, 40); // dark -objPal[4] = rgb555(248, 248, 248); // white - -// --- BG tiles --------------------------------------------------------------- -const bgTiles: Uint8Array[] = []; -bgTiles.push(tile4(fill(0))); // 0 blank -// 1 grass (dither of 1/2) -{ - const px = new Array(64); - for (let i = 0; i < 64; i++) px[i] = (i + (i >> 3)) % 5 === 0 ? 2 : 1; - bgTiles.push(tile4(px)); -} -// 2 tree (trunk + leaves) -{ - const px = new Array(64).fill(4); - for (let y = 5; y < 8; y++) for (let x = 3; x < 5; x++) px[y * 8 + x] = 3; - bgTiles.push(tile4(px)); -} -const FONT_BASE = bgTiles.length; // 3 -// 96 procedural glyphs (ASCII 0x20..0x7F): box bg (idx2) + a mark (idx1). -for (let ch = 0x20; ch < 0x80; ch++) { - const px = new Array(64).fill(2); - if (ch !== 0x20) { - for (let y = 1; y < 7; y++) { - px[y * 8 + 1] = 1; - px[y * 8 + 5] = 1; - } - for (let x = 1; x <= 5; x++) { - px[1 * 8 + x] = 1; - px[6 * 8 + x] = 1; - } - } - bgTiles.push(tile4(px)); -} -const BOX_TILE = bgTiles.length; // fill tile for the textbox -bgTiles.push(tile4(fill(2))); -const bgTileCount = bgTiles.length; - -// --- OBJ tiles: one 16x16 sprite, 4 facings * 1 frame = 16 tiles ------------ -// 16x16 sprite = 2x2 tiles in 1D order TL,TR,BL,BR. -function sprite16(dir: number): Uint8Array { - // 16x16 pixel grid -> 4 tiles - const grid = new Array(16 * 16).fill(0); - const set = (x: number, y: number, v: number) => { - if (x >= 0 && x < 16 && y >= 0 && y < 16) grid[y * 16 + x] = v; - }; - // body (shirt) rows 8..14, head (skin) rows 2..7 - for (let y = 8; y < 15; y++) for (let x = 4; x < 12; x++) set(x, y, 2); - for (let y = 2; y < 8; y++) for (let x = 5; x < 11; x++) set(x, y, 1); - // hair - for (let x = 5; x < 11; x++) set(x, 2, 3); - // eyes vary a touch by facing so directions are distinguishable - if (dir !== DIR.UP) { - const ey = 5; - if (dir === DIR.LEFT) set(6, ey, 3); - else if (dir === DIR.RIGHT) set(9, ey, 3); - else { - set(6, ey, 3); - set(9, ey, 3); - } - } - // split into 4 tiles TL,TR,BL,BR - const out = new Uint8Array(4 * 32); - const tiles = [ - [0, 0], - [8, 0], - [0, 8], - [8, 8], - ]; - tiles.forEach(([ox, oy], t) => { - const px = new Array(64); - for (let y = 0; y < 8; y++) for (let x = 0; x < 8; x++) px[y * 8 + x] = grid[(oy + y) * 16 + (ox + x)]; - out.set(tile4(px), t * 32); - }); - return out; -} -const objTiles: Uint8Array[] = []; -for (const d of [DIR.DOWN, DIR.UP, DIR.LEFT, DIR.RIGHT]) objTiles.push(sprite16(d)); - -// --- SPRITE_TABLE ----------------------------------------------------------- -const spriteTable = new ByteWriter(); -spriteTable.u16(0).u8(16).u8(16).u8(0).u8(1).u16(0); // tile_base 0, 16x16, palbank0, 1 frame - -// --- MAP 0: 8x8 ------------------------------------------------------------- -const MW = 8, - MH = 8; -const mapTiles = new Uint16Array(MW * MH); -const mapColl = new Uint8Array(MW * MH); -for (let y = 0; y < MH; y++) { - for (let x = 0; x < MW; x++) { - const border = x === 0 || y === 0 || x === MW - 1 || y === MH - 1; - mapTiles[y * MW + x] = border ? 2 : 1; - mapColl[y * MW + x] = border ? 1 : 0; - } -} -// actors: 1 NPC at (5,4), solid, on_talk=script 0 -const actors = new ByteWriter(); -actors.u16(5).u16(4).u8(0).u8(DIR.DOWN).u8(0).u8(ACTOR_FLAG.SOLID).u16(0).u16(0); -const N_ACTORS = 1; -const N_WARPS = 0; - -function buildMapChunk(): Uint8Array { - const header = new ByteWriter(); - // 28-byte header; offsets are from chunk start. - const hdrSize = 28; - const tilesOff = hdrSize; - const collOff = tilesOff + mapTiles.length * 2; - const actorsOff = (collOff + mapColl.length + 3) & ~3; - const warpsOff = actorsOff + N_ACTORS * 12; - header - .u16(MW).u16(MH).u16(N_ACTORS).u16(N_WARPS) - .u8(0).u8(0xff).u16(0) - .u32(tilesOff).u32(collOff).u32(actorsOff).u32(warpsOff); - const w = new ByteWriter(); - w.bytes(header.toUint8Array()); - for (const t of mapTiles) w.u16(t); - w.bytes(mapColl); - while (w.length < actorsOff) w.u8(0); - w.bytes(actors.toUint8Array()); - return w.toUint8Array(); -} - -// --- TEXT_BANK -------------------------------------------------------------- -const texts = ["HELLO FROM POCKETJS AOT!", "THIS RUNS AS A REAL GBA ROM."]; -function buildTextBank(strs: string[]): Uint8Array { - const enc = strs.map((s) => { - const b = new Uint8Array(s.length + 1); - for (let i = 0; i < s.length; i++) b[i] = s.charCodeAt(i) & 0x7f; - return b; - }); - const headerSize = 4 + strs.length * 4; - const offsets: number[] = []; - let cur = headerSize; - for (const b of enc) { - offsets.push(cur); - cur += b.length; - } - const w = new ByteWriter(); - w.u16(strs.length).u16(0); - for (const o of offsets) w.u32(o); - for (const b of enc) w.bytes(b); - return w.toUint8Array(); -} - -// --- SCRIPT 0 --------------------------------------------------------------- -// LOCK_PLAYER; FACE_PLAYER 0; TEXT 0; SET_FLAG 1; TEXT 1; RELEASE_PLAYER; END -const code = new ByteWriter(); -code.u8(OP.LOCK_PLAYER); -code.u8(OP.FACE_PLAYER).u8(0); -code.u8(OP.TEXT).u16(0); -code.u8(OP.SET_FLAG).u16(1); -code.u8(OP.TEXT).u16(1); -code.u8(OP.RELEASE_PLAYER); -code.u8(OP.END); -const scriptTable = new ByteWriter(); -scriptTable.u32(0); // script 0 at byte 0 - -// --- GAME header ------------------------------------------------------------ -const game = new ByteWriter(); -game - .ascii("POCKET TEST", 24) - .u8(0).u8(DIR.DOWN).u16(4).u16(4) - .u8(1).u8(1).u16(4).u16(texts.length).u16(1) - .u16(FONT_BASE).u16(BOX_TILE).u16(0); - -// --- assemble --------------------------------------------------------------- -function u16buf(a: Uint16Array): Uint8Array { - const w = new ByteWriter(); - for (const v of a) w.u16(v); - return w.toUint8Array(); -} -function catTiles(ts: Uint8Array[]): Uint8Array { - const out = new Uint8Array(ts.reduce((n, t) => n + t.length, 0)); - let o = 0; - for (const t of ts) { - out.set(t, o); - o += t.length; - } - return out; -} - -const chunks: Chunk[] = [ - { kind: CHUNK.GAME, id: 0, data: game.toUint8Array() }, - { kind: CHUNK.PAL_BG, id: 0, data: u16buf(bgPal) }, - { kind: CHUNK.PAL_OBJ, id: 0, data: u16buf(objPal) }, - { kind: CHUNK.TILES_BG, id: 0, data: catTiles(bgTiles) }, - { kind: CHUNK.TILES_OBJ, id: 0, data: catTiles(objTiles) }, - { kind: CHUNK.SPRITE_TABLE, id: 0, data: spriteTable.toUint8Array() }, - { kind: CHUNK.MAP, id: 0, data: buildMapChunk() }, - { kind: CHUNK.TEXT_BANK, id: 0, data: buildTextBank(texts) }, - { kind: CHUNK.SCRIPT_CODE, id: 0, data: code.toUint8Array() }, - { kind: CHUNK.SCRIPT_TABLE, id: 0, data: scriptTable.toUint8Array() }, -]; - -const blob = packCart(chunks); -const c = emitCartC(blob); -await Bun.write(new URL("../runtime/gen_cart.c", import.meta.url).pathname, c); -console.log( - `handcart: ${blob.length} bytes, ${chunks.length} chunks, ${bgTileCount} BG tiles, ` + - `font_base=${FONT_BASE}, box_tile=${BOX_TILE}, script uses SCRIPT_NONE=${SCRIPT_NONE}`, -); diff --git a/aot/test/harness/build.sh b/aot/test/harness/build.sh deleted file mode 100755 index 0fe3ced..0000000 --- a/aot/test/harness/build.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash -# -# Build the headless mGBA test runner (mgba_runner) against the installed -# libmgba. Requires mGBA to be installed via Homebrew: brew install mgba -# -set -euo pipefail - -# Resolve this script's directory so the build works from anywhere. -HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -# Locate the mGBA install prefix (Homebrew), with a sane fallback. -if command -v brew >/dev/null 2>&1; then - MGBA="$(brew --prefix mgba)" -else - MGBA="/opt/homebrew/Cellar/mgba/0.10.5_2" -fi - -if [ ! -f "$MGBA/include/mgba/gba/core.h" ]; then - echo "error: libmgba headers not found under $MGBA/include" >&2 - echo " install mGBA first: brew install mgba" >&2 - exit 1 -fi - -echo "Using libmgba prefix: $MGBA" - -clang -O2 -Wall -Wextra \ - -o "$HERE/mgba_runner" \ - "$HERE/mgba_runner.c" \ - -I"$MGBA/include" \ - -L"$MGBA/lib" -lmgba \ - -Wl,-rpath,"$MGBA/lib" - -echo "Built: $HERE/mgba_runner" diff --git a/aot/test/harness/mgba_runner.c b/aot/test/harness/mgba_runner.c deleted file mode 100644 index 32d1e57..0000000 --- a/aot/test/harness/mgba_runner.c +++ /dev/null @@ -1,614 +0,0 @@ -/* - * mgba_runner.c — headless GBA emulator test runner for PocketJS-AOT. - * - * Links against libmgba 0.10.5 (Homebrew). Runs a ROM under a scripted - * "scenario" of input/advance/read/screenshot steps and prints a JSON - * result to stdout. - * - * Usage: mgba_runner - * - * Scenario shape (see README of the harness): - * { "steps": [ - * { "op": "advance", "frames": 30 }, - * { "op": "press", "buttons": ["UP"], "frames": 16 }, - * { "op": "press", "buttons": ["A"], "frames": 1, "release": 30 }, - * { "op": "read", "name": "player_x", "addr": 33554432, "size": 2 }, - * { "op": "screenshot", "path": "/abs/out.ppm" } - * ] } - * - * Output on success: {"reads": {"player_x": 8, ...}, "ok": true} - * Output on failure: {"ok": false, "error": "..."} (exit code 1) - * - * Dependency-free apart from libc + libmgba. - */ - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -/* ------------------------------------------------------------------ * - * GBA key bit indices (from , enum GBAKey). - * The core's setKeys() takes a bitmask of (1 << index). - * ------------------------------------------------------------------ */ -#define GBA_KEY_A_BIT 0 -#define GBA_KEY_B_BIT 1 -#define GBA_KEY_SELECT_BIT 2 -#define GBA_KEY_START_BIT 3 -#define GBA_KEY_RIGHT_BIT 4 -#define GBA_KEY_LEFT_BIT 5 -#define GBA_KEY_UP_BIT 6 -#define GBA_KEY_DOWN_BIT 7 -#define GBA_KEY_R_BIT 8 -#define GBA_KEY_L_BIT 9 - -/* ------------------------------------------------------------------ * - * Error reporting: emit the failure JSON and bail out. - * ------------------------------------------------------------------ */ -static void die(const char* fmt, ...) { - char msg[512]; - va_list ap; - va_start(ap, fmt); - vsnprintf(msg, sizeof(msg), fmt, ap); - va_end(ap); - - /* Escape quotes/backslashes so the JSON stays well-formed. */ - fputs("{\"ok\": false, \"error\": \"", stdout); - for (const char* p = msg; *p; ++p) { - if (*p == '"' || *p == '\\') { - putchar('\\'); - putchar(*p); - } else if (*p == '\n' || *p == '\r' || *p == '\t') { - putchar(' '); - } else { - putchar(*p); - } - } - fputs("\"}\n", stdout); - fflush(stdout); - exit(1); -} - -/* ================================================================== * - * Minimal JSON parser (objects, arrays, strings, numbers, bool, null) - * Produces a small owned DOM. Allocations are intentionally never - * freed — this is a short-lived, one-shot CLI process. - * ================================================================== */ - -enum jtype { J_NULL, J_BOOL, J_NUM, J_STR, J_ARR, J_OBJ }; - -typedef struct JVal { - enum jtype type; - double num; /* J_NUM, and 0/1 for J_BOOL */ - char* str; /* J_STR (NUL-terminated, owned) */ - struct JVal** items; /* J_ARR */ - int nitems; - char** keys; /* J_OBJ */ - struct JVal** vals; /* J_OBJ */ - int nfields; -} JVal; - -typedef struct { - const char* p; - bool err; -} JParser; - -static JVal* jparse_value(JParser* J); - -static void jskipws(JParser* J) { - while (*J->p == ' ' || *J->p == '\t' || *J->p == '\n' || *J->p == '\r') { - J->p++; - } -} - -static JVal* jnew(enum jtype t) { - JVal* v = calloc(1, sizeof(JVal)); - if (!v) { - die("out of memory"); - } - v->type = t; - return v; -} - -/* Parse a JSON string literal (cursor sits on the opening quote). */ -static char* jparse_string_raw(JParser* J) { - if (*J->p != '"') { - J->err = true; - return NULL; - } - J->p++; - size_t cap = 16, len = 0; - char* out = malloc(cap); - if (!out) { - die("out of memory"); - } - while (*J->p && *J->p != '"') { - char c = *J->p++; - if (c == '\\') { - char e = *J->p++; - switch (e) { - case '"': c = '"'; break; - case '\\': c = '\\'; break; - case '/': c = '/'; break; - case 'n': c = '\n'; break; - case 't': c = '\t'; break; - case 'r': c = '\r'; break; - case 'b': c = '\b'; break; - case 'f': c = '\f'; break; - case 'u': { - /* Accept but flatten \uXXXX to '?' — the scenarios only - * ever use ASCII identifiers and paths. */ - for (int i = 0; i < 4 && *J->p; ++i) { - J->p++; - } - c = '?'; - break; - } - default: - c = e; - break; - } - } - if (len + 1 >= cap) { - cap *= 2; - out = realloc(out, cap); - if (!out) { - die("out of memory"); - } - } - out[len++] = c; - } - if (*J->p != '"') { - J->err = true; - return NULL; - } - J->p++; - out[len] = '\0'; - return out; -} - -static JVal* jparse_string(JParser* J) { - char* s = jparse_string_raw(J); - if (J->err) { - return NULL; - } - JVal* v = jnew(J_STR); - v->str = s; - return v; -} - -static JVal* jparse_number(JParser* J) { - char* end = NULL; - double d = strtod(J->p, &end); - if (end == J->p) { - J->err = true; - return NULL; - } - J->p = end; - JVal* v = jnew(J_NUM); - v->num = d; - return v; -} - -static JVal* jparse_array(JParser* J) { - J->p++; /* consume '[' */ - JVal* v = jnew(J_ARR); - size_t cap = 4; - v->items = malloc(cap * sizeof(JVal*)); - jskipws(J); - if (*J->p == ']') { - J->p++; - return v; - } - for (;;) { - JVal* item = jparse_value(J); - if (J->err) { - return NULL; - } - if ((size_t)v->nitems >= cap) { - cap *= 2; - v->items = realloc(v->items, cap * sizeof(JVal*)); - } - v->items[v->nitems++] = item; - jskipws(J); - if (*J->p == ',') { - J->p++; - jskipws(J); - continue; - } - if (*J->p == ']') { - J->p++; - break; - } - J->err = true; - return NULL; - } - return v; -} - -static JVal* jparse_object(JParser* J) { - J->p++; /* consume '{' */ - JVal* v = jnew(J_OBJ); - size_t cap = 4; - v->keys = malloc(cap * sizeof(char*)); - v->vals = malloc(cap * sizeof(JVal*)); - jskipws(J); - if (*J->p == '}') { - J->p++; - return v; - } - for (;;) { - jskipws(J); - char* key = jparse_string_raw(J); - if (J->err) { - return NULL; - } - jskipws(J); - if (*J->p != ':') { - J->err = true; - return NULL; - } - J->p++; - JVal* val = jparse_value(J); - if (J->err) { - return NULL; - } - if ((size_t)v->nfields >= cap) { - cap *= 2; - v->keys = realloc(v->keys, cap * sizeof(char*)); - v->vals = realloc(v->vals, cap * sizeof(JVal*)); - } - v->keys[v->nfields] = key; - v->vals[v->nfields] = val; - v->nfields++; - jskipws(J); - if (*J->p == ',') { - J->p++; - continue; - } - if (*J->p == '}') { - J->p++; - break; - } - J->err = true; - return NULL; - } - return v; -} - -static JVal* jparse_value(JParser* J) { - jskipws(J); - switch (*J->p) { - case '{': return jparse_object(J); - case '[': return jparse_array(J); - case '"': return jparse_string(J); - case 't': - if (strncmp(J->p, "true", 4) == 0) { - J->p += 4; - JVal* v = jnew(J_BOOL); - v->num = 1; - return v; - } - break; - case 'f': - if (strncmp(J->p, "false", 5) == 0) { - J->p += 5; - JVal* v = jnew(J_BOOL); - v->num = 0; - return v; - } - break; - case 'n': - if (strncmp(J->p, "null", 4) == 0) { - J->p += 4; - return jnew(J_NULL); - } - break; - default: - if (*J->p == '-' || (*J->p >= '0' && *J->p <= '9')) { - return jparse_number(J); - } - break; - } - J->err = true; - return NULL; -} - -static JVal* jparse(const char* text) { - JParser J = { text, false }; - JVal* v = jparse_value(&J); - if (J.err || !v) { - return NULL; - } - return v; -} - -/* Object field lookup (returns NULL if absent or not an object). */ -static JVal* jget(const JVal* obj, const char* key) { - if (!obj || obj->type != J_OBJ) { - return NULL; - } - for (int i = 0; i < obj->nfields; ++i) { - if (strcmp(obj->keys[i], key) == 0) { - return obj->vals[i]; - } - } - return NULL; -} - -static double jget_num(const JVal* obj, const char* key, double dflt) { - JVal* v = jget(obj, key); - return (v && v->type == J_NUM) ? v->num : dflt; -} - -/* ================================================================== * - * Button name -> GBA key bitmask. - * ================================================================== */ -static uint32_t button_bit(const char* name) { - if (strcmp(name, "A") == 0) return 1u << GBA_KEY_A_BIT; - if (strcmp(name, "B") == 0) return 1u << GBA_KEY_B_BIT; - if (strcmp(name, "SELECT") == 0) return 1u << GBA_KEY_SELECT_BIT; - if (strcmp(name, "START") == 0) return 1u << GBA_KEY_START_BIT; - if (strcmp(name, "RIGHT") == 0) return 1u << GBA_KEY_RIGHT_BIT; - if (strcmp(name, "LEFT") == 0) return 1u << GBA_KEY_LEFT_BIT; - if (strcmp(name, "UP") == 0) return 1u << GBA_KEY_UP_BIT; - if (strcmp(name, "DOWN") == 0) return 1u << GBA_KEY_DOWN_BIT; - if (strcmp(name, "R") == 0) return 1u << GBA_KEY_R_BIT; - if (strcmp(name, "L") == 0) return 1u << GBA_KEY_L_BIT; - die("unknown button: %s", name); - return 0; -} - -/* ================================================================== * - * Recorded reads, printed in the final JSON. - * ================================================================== */ -typedef struct { - char* name; - uint32_t value; -} ReadResult; - -static ReadResult g_reads[256]; -static int g_nreads = 0; - -/* ================================================================== * - * Emulator helpers. - * ================================================================== */ - -/* Advance `frames` frames while holding `keys` (a GBA key bitmask). */ -static void run_frames(struct mCore* core, uint32_t keys, int frames) { - core->setKeys(core, keys); - for (int i = 0; i < frames; ++i) { - core->runFrame(core); - } -} - -/* Read `size` (1/2/4) bytes little-endian from the emulated bus. */ -static uint32_t bus_read(struct mCore* core, uint32_t addr, int size) { - uint32_t value = 0; - for (int i = 0; i < size; ++i) { - uint32_t byte = core->busRead8(core, addr + i) & 0xFF; - value |= byte << (8 * i); - } - return value; -} - -/* Dump the current video buffer (width*height color_t) to a P6 PPM file. - * - * This libmgba build defines color_t as uint32_t with the channel layout - * M_COLOR_RED=0x000000FF, GREEN=0x0000FF00, BLUE=0x00FF0000 - * i.e. bytes are R,G,B,A in memory. We emit R,G,B directly. - * - * A 16-bit fallback (RGB555 / RGB565) is provided for completeness, though - * the installed 0.10.5 Homebrew build uses the 32-bit path above. - */ -static void write_ppm(const char* path, const color_t* buffer, - unsigned width, unsigned height, size_t stride) { - FILE* f = fopen(path, "wb"); - if (!f) { - die("cannot open screenshot path: %s", path); - } - fprintf(f, "P6\n%u %u\n255\n", width, height); - for (unsigned y = 0; y < height; ++y) { - const color_t* row = buffer + (size_t)y * stride; - for (unsigned x = 0; x < width; ++x) { - color_t c = row[x]; - uint8_t rgb[3]; -#if BYTES_PER_PIXEL == 4 - rgb[0] = (uint8_t)(c & 0xFF); /* R */ - rgb[1] = (uint8_t)((c >> 8) & 0xFF); /* G */ - rgb[2] = (uint8_t)((c >> 16) & 0xFF); /* B */ -#else - #ifdef COLOR_5_6_5 - rgb[0] = (uint8_t)(((c >> 11) & 0x1F) * 0x21 >> 2); /* R */ - rgb[1] = (uint8_t)(((c >> 5) & 0x3F) * 0x41 >> 4); /* G */ - rgb[2] = (uint8_t)((c & 0x1F) * 0x21 >> 2); /* B */ - #else /* RGB555 */ - rgb[0] = (uint8_t)((c & 0x1F) * 0x21 >> 2); /* R */ - rgb[1] = (uint8_t)(((c >> 5) & 0x1F) * 0x21 >> 2); /* G */ - rgb[2] = (uint8_t)(((c >> 10) & 0x1F) * 0x21 >> 2); /* B */ - #endif -#endif - if (fwrite(rgb, 1, 3, f) != 3) { - fclose(f); - die("short write to screenshot: %s", path); - } - } - } - fclose(f); -} - -/* ================================================================== * - * Read a whole file into a NUL-terminated buffer. - * ================================================================== */ -static char* slurp(const char* path) { - FILE* f = fopen(path, "rb"); - if (!f) { - die("cannot open scenario: %s", path); - } - fseek(f, 0, SEEK_END); - long n = ftell(f); - if (n < 0) { - fclose(f); - die("cannot size scenario: %s", path); - } - fseek(f, 0, SEEK_SET); - char* buf = malloc((size_t)n + 1); - if (!buf) { - die("out of memory"); - } - size_t got = fread(buf, 1, (size_t)n, f); - fclose(f); - buf[got] = '\0'; - return buf; -} - -/* ================================================================== * - * Main. - * ================================================================== */ -int main(int argc, char** argv) { - if (argc != 3) { - die("usage: mgba_runner "); - } - const char* rom_path = argv[1]; - const char* scenario_path = argv[2]; - - /* --- Parse the scenario up front so bad input fails fast. --- */ - char* json_text = slurp(scenario_path); - JVal* root = jparse(json_text); - if (!root) { - die("failed to parse scenario JSON"); - } - JVal* steps = jget(root, "steps"); - if (!steps || steps->type != J_ARR) { - die("scenario missing \"steps\" array"); - } - - /* --- Create and initialise the GBA core. --- */ - struct mCore* core = GBACoreCreate(); - if (!core) { - die("GBACoreCreate failed"); - } - if (!core->init(core)) { - die("core init failed"); - } - mCoreInitConfig(core, NULL); - - /* --- Allocate and register the video buffer. --- */ - unsigned width = 0, height = 0; - core->desiredVideoDimensions(core, &width, &height); /* GBA: 240x160 */ - color_t* video = malloc((size_t)width * height * BYTES_PER_PIXEL); - if (!video) { - die("cannot allocate video buffer (%ux%u)", width, height); - } - core->setVideoBuffer(core, video, width); /* stride == width pixels */ - - /* --- Load the ROM (core takes ownership of the VFile). --- */ - struct VFile* rom = VFileOpen(rom_path, O_RDONLY); - if (!rom) { - die("cannot open ROM: %s", rom_path); - } - if (!core->loadROM(core, rom)) { - die("loadROM failed: %s", rom_path); - } - - /* --- Boot. --- */ - core->reset(core); - - /* --- Execute the scripted steps in order. --- */ - for (int s = 0; s < steps->nitems; ++s) { - JVal* step = steps->items[s]; - if (step->type != J_OBJ) { - die("step %d is not an object", s); - } - JVal* op_v = jget(step, "op"); - if (!op_v || op_v->type != J_STR) { - die("step %d missing \"op\"", s); - } - const char* op = op_v->str; - - if (strcmp(op, "advance") == 0) { - int frames = (int)jget_num(step, "frames", 1); - run_frames(core, 0, frames); - - } else if (strcmp(op, "press") == 0) { - JVal* buttons = jget(step, "buttons"); - if (!buttons || buttons->type != J_ARR) { - die("step %d (press) missing \"buttons\" array", s); - } - uint32_t mask = 0; - for (int b = 0; b < buttons->nitems; ++b) { - JVal* bn = buttons->items[b]; - if (bn->type != J_STR) { - die("step %d (press) has non-string button", s); - } - mask |= button_bit(bn->str); - } - int frames = (int)jget_num(step, "frames", 1); - int release = (int)jget_num(step, "release", 0); - run_frames(core, mask, frames); /* hold */ - run_frames(core, 0, release); /* then release */ - - } else if (strcmp(op, "read") == 0) { - JVal* name_v = jget(step, "name"); - if (!name_v || name_v->type != J_STR) { - die("step %d (read) missing \"name\"", s); - } - JVal* addr_v = jget(step, "addr"); - if (!addr_v || addr_v->type != J_NUM) { - die("step %d (read) missing \"addr\"", s); - } - int size = (int)jget_num(step, "size", 1); - if (size != 1 && size != 2 && size != 4) { - die("step %d (read) size must be 1, 2, or 4", s); - } - uint32_t addr = (uint32_t)addr_v->num; - uint32_t value = bus_read(core, addr, size); - if (g_nreads >= (int)(sizeof(g_reads) / sizeof(g_reads[0]))) { - die("too many reads"); - } - g_reads[g_nreads].name = name_v->str; - g_reads[g_nreads].value = value; - g_nreads++; - - } else if (strcmp(op, "screenshot") == 0) { - JVal* path_v = jget(step, "path"); - if (!path_v || path_v->type != J_STR) { - die("step %d (screenshot) missing \"path\"", s); - } - write_ppm(path_v->str, video, width, height, width); - - } else { - die("step %d has unknown op: %s", s, op); - } - } - - /* --- Emit the result JSON. --- */ - fputs("{\"reads\": {", stdout); - for (int i = 0; i < g_nreads; ++i) { - if (i) { - fputs(", ", stdout); - } - /* Names are simple identifiers; escape quotes/backslashes anyway. */ - putchar('"'); - for (const char* p = g_reads[i].name; *p; ++p) { - if (*p == '"' || *p == '\\') { - putchar('\\'); - } - putchar(*p); - } - printf("\": %u", g_reads[i].value); - } - fputs("}, \"ok\": true}\n", stdout); - fflush(stdout); - - core->deinit(core); - return 0; -} diff --git a/aot/test/scenarios/boot.json b/aot/test/scenarios/boot.json deleted file mode 100644 index 68748c2..0000000 --- a/aot/test/scenarios/boot.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "steps": [ - { "op": "advance", "frames": 12 }, - { "op": "read", "name": "booted", "addr": 33554451, "size": 1 }, - { "op": "read", "name": "player_x", "addr": 33554436, "size": 2 }, - { "op": "read", "name": "player_y", "addr": 33554438, "size": 2 }, - { "op": "read", "name": "cur_map", "addr": 33554441, "size": 1 }, - { "op": "screenshot", "path": "/tmp/boot.ppm" } - ] -} diff --git a/aot/test/scenarios/collide_turn.json b/aot/test/scenarios/collide_turn.json deleted file mode 100644 index cae01bc..0000000 --- a/aot/test/scenarios/collide_turn.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "steps": [ - { "op": "advance", "frames": 12 }, - { "op": "press", "buttons": ["RIGHT"], "frames": 8 }, - { "op": "read", "name": "player_x", "addr": 33554436, "size": 2 }, - { "op": "read", "name": "player_dir", "addr": 33554440, "size": 1 } - ] -} diff --git a/aot/test/scenarios/interact.json b/aot/test/scenarios/interact.json deleted file mode 100644 index c0aa5dc..0000000 --- a/aot/test/scenarios/interact.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "steps": [ - { "op": "advance", "frames": 12 }, - { "op": "press", "buttons": ["RIGHT"], "frames": 6 }, - { "op": "press", "buttons": ["A"], "frames": 1, "release": 4 }, - { "op": "read", "name": "script_active", "addr": 33554443, "size": 1 }, - { "op": "read", "name": "text_active", "addr": 33554442, "size": 1 }, - { "op": "read", "name": "cur_text", "addr": 33554448, "size": 2 }, - { "op": "press", "buttons": ["A"], "frames": 1, "release": 4 }, - { "op": "read", "name": "flags0", "addr": 33554452, "size": 1 }, - { "op": "read", "name": "cur_text2", "addr": 33554448, "size": 2 }, - { "op": "press", "buttons": ["A"], "frames": 1, "release": 4 }, - { "op": "read", "name": "script_active2", "addr": 33554443, "size": 1 }, - { "op": "read", "name": "text_active2", "addr": 33554442, "size": 1 } - ] -} diff --git a/aot/test/scenarios/move_up.json b/aot/test/scenarios/move_up.json deleted file mode 100644 index 2c46360..0000000 --- a/aot/test/scenarios/move_up.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "steps": [ - { "op": "advance", "frames": 12 }, - { "op": "press", "buttons": ["UP"], "frames": 20 }, - { "op": "read", "name": "player_y", "addr": 33554438, "size": 2 }, - { "op": "read", "name": "player_dir", "addr": 33554440, "size": 1 } - ] -} diff --git a/scripts/gba-imagegen.ts b/scripts/gba-imagegen.ts index f0de40b..3ccb4e0 100644 --- a/scripts/gba-imagegen.ts +++ b/scripts/gba-imagegen.ts @@ -56,7 +56,7 @@ function usageText(): string { " --json Emit machine-readable JSON on stdout", "", "examples:", - " bun imagegen --out aot/demo/imagegen/gba-source.png", + " bun imagegen --out static/games/boardroom/imagegen/source.png", " bun imagegen --out /tmp/gba-sheet.png --theme \"rainy port town\" --json", ].join("\n"); } diff --git a/site/aot.html b/site/aot.html deleted file mode 100644 index b3c6aec..0000000 --- a/site/aot.html +++ /dev/null @@ -1,100 +0,0 @@ -

- -
- -
-
-
-

Separate from the framework line

-

AOT is not the PSP UI runtime.

-

- The main PocketJS framework keeps Solid and Vue Vapor running on - QuickJS. AOT instead partially evaluates a cartridge DSL at build time - and ships a fixed native runtime plus compact game data. -

-
-
-
- 01 -

Static declaration zone

-

Maps, layers, NPCs, warps, tilesets and sprites execute in Bun during the build.

-
-
- 02 -

Residual script zone

-

Generator scripts lower to a small stack VM for dialogue, choices, flags and warps.

-
-
- 03 -

Native cartridge output

-

GBA 4bpp tiles, BGR555 palettes and bytecode are packed into PJGB chunks.

-
-
-
-
- -
-
-
-

Build shape

-

Author in TSX. Ship binary game data.

-
-
    -
  1. EvaluateRun the static DSL and collect scene declarations.
  2. -
  3. BakeQuantize tiles, sprites and subpixel dialogue glyphs for GBA.
  4. -
  5. ResidualizeLower supported script control flow into VM bytecode.
  6. -
  7. LinkEmbed the PJGB blob into the fixed C runtime and build a ROM.
  8. -
-
-
- -
-
-
-

Documentation branch

-

AOT has its own docs tree.

-

The framework docs stay focused on PSP-class UI. AOT docs cover the cartridge DSL, compiler stages, PJGB data model and browser demo surface.

-
- Enter AOT docs -
-
diff --git a/site/assets/aot-demo.js b/site/assets/aot-demo.js deleted file mode 100644 index 8241067..0000000 --- a/site/assets/aot-demo.js +++ /dev/null @@ -1,102 +0,0 @@ -const root = document.querySelector("[data-aot-demo]"); -const canvas = document.getElementById("aot-demo-canvas"); - -if (root instanceof HTMLElement && canvas instanceof HTMLCanvasElement) { - const ctx = canvas.getContext("2d"); - const label = root.querySelector("[data-aot-label]"); - const status = root.querySelector("[data-aot-status]"); - const buttons = [...root.querySelectorAll("[data-aot-input]")]; - const scenes = [ - { key: "town", label: "town map", src: "/aot/assets/town.png" }, - { key: "dialogue", label: "dialogue", src: "/aot/assets/dialogue.png" }, - { key: "choice", label: "choice menu", src: "/aot/assets/choice.png" }, - { key: "route", label: "route warp", src: "/aot/assets/route.png" }, - ]; - const images = await Promise.all(scenes.map(loadImage)); - let index = 0; - - const setStatus = (text, ready = true) => { - if (!(status instanceof HTMLElement)) return; - status.textContent = text; - status.dataset.ready = ready ? "true" : "false"; - }; - - const draw = () => { - if (!ctx) return; - const scene = scenes[index]; - const image = images[index]; - ctx.clearRect(0, 0, canvas.width, canvas.height); - ctx.imageSmoothingEnabled = false; - ctx.drawImage(image, 0, 0, canvas.width, canvas.height); - ctx.fillStyle = "rgba(0, 0, 0, 0.16)"; - for (let y = 1; y < canvas.height; y += 3) { - ctx.fillRect(0, y, canvas.width, 1); - } - ctx.fillStyle = "rgba(7, 12, 8, 0.72)"; - ctx.fillRect(6, 6, 72, 13); - ctx.fillStyle = "#cfff9c"; - ctx.font = "7px ui-monospace, SFMono-Regular, Menlo, Consolas, monospace"; - ctx.fillText(scene.label.toUpperCase(), 10, 15); - if (label instanceof HTMLElement) label.textContent = scene.label; - setStatus(scene.key); - }; - - const activate = (input) => { - const button = buttons.find((node) => node instanceof HTMLElement && node.dataset.aotInput === input); - if (!(button instanceof HTMLElement)) return; - button.classList.add("is-active"); - window.setTimeout(() => button.classList.remove("is-active"), 140); - }; - - const go = (next, input) => { - index = (next + scenes.length) % scenes.length; - activate(input); - draw(); - }; - - const inputs = { - a: () => go(index + 1, "a"), - b: () => go(index - 1, "b"), - up: () => go(index - 1, "up"), - down: () => go(index + 1, "down"), - left: () => go(0, "left"), - right: () => go(3, "right"), - }; - - for (const button of buttons) { - if (!(button instanceof HTMLElement)) continue; - button.addEventListener("click", () => inputs[button.dataset.aotInput]?.()); - } - - window.addEventListener("keydown", (event) => { - const input = keyToInput(event.key); - if (!input) return; - event.preventDefault(); - inputs[input]?.(); - }); - - draw(); -} else if (root instanceof HTMLElement) { - const status = root.querySelector("[data-aot-status]"); - if (status instanceof HTMLElement) status.textContent = "canvas unavailable"; -} - -function keyToInput(key) { - if (key === "ArrowUp") return "up"; - if (key === "ArrowDown") return "down"; - if (key === "ArrowLeft") return "left"; - if (key === "ArrowRight") return "right"; - if (key === "Enter" || key.toLowerCase() === "a") return "a"; - if (key === "Escape" || key.toLowerCase() === "b") return "b"; - return null; -} - -function loadImage(scene) { - return new Promise((resolve, reject) => { - const image = new Image(); - image.decoding = "async"; - image.onload = () => resolve(image); - image.onerror = () => reject(new Error(`AOT demo asset failed: ${scene.src}`)); - image.src = scene.src; - }); -} diff --git a/site/assets/static-demo.js b/site/assets/static-demo.js new file mode 100644 index 0000000..8419bbf --- /dev/null +++ b/site/assets/static-demo.js @@ -0,0 +1,65 @@ +// Pocket Static product-page demo: a slideshow of E2E captures from the +// BOARDROOM playthrough — one game, three consoles. +const root = document.querySelector("[data-static-demo]"); +const canvas = document.getElementById("static-demo-canvas"); + +function loadImage(scene) { + return new Promise((resolve, reject) => { + const img = new Image(); + img.onload = () => resolve(img); + img.onerror = () => reject(new Error(`missing ${scene.src}`)); + img.src = scene.src; + }); +} + +if (root instanceof HTMLElement && canvas instanceof HTMLCanvasElement) { + const ctx = canvas.getContext("2d"); + const label = root.querySelector("[data-static-label]"); + const status = root.querySelector("[data-static-status]"); + const buttons = [...root.querySelectorAll("[data-static-input]")]; + const scenes = [ + { key: "boardroom", label: "the boardroom (GBA)", src: "/static/assets/boardroom.png" }, + { key: "vegas", label: "the call (GBA)", src: "/static/assets/vegas.png" }, + { key: "gameboy", label: "same cartridge (Game Boy)", src: "/static/assets/gameboy.png" }, + { key: "nes", label: "same cartridge (NES)", src: "/static/assets/nes.png" }, + ]; + + const setStatus = (text, ready = true) => { + if (!(status instanceof HTMLElement)) return; + status.textContent = text; + status.dataset.ready = ready ? "true" : "false"; + }; + + try { + const images = await Promise.all(scenes.map(loadImage)); + let index = 0; + + const draw = () => { + if (!ctx) return; + const scene = scenes[index]; + const image = images[index]; + ctx.imageSmoothingEnabled = false; + ctx.fillStyle = "#05070d"; + ctx.fillRect(0, 0, canvas.width, canvas.height); + const scale = Math.min(canvas.width / image.width, canvas.height / image.height); + const w = Math.floor(image.width * scale); + const h = Math.floor(image.height * scale); + ctx.drawImage(image, (canvas.width - w) >> 1, (canvas.height - h) >> 1, w, h); + if (label instanceof HTMLElement) label.textContent = scene.label; + }; + + const step = (delta) => { + index = (index + delta + scenes.length) % scenes.length; + draw(); + }; + + for (const button of buttons) { + const dir = button.dataset.staticInput; + button.addEventListener("click", () => step(dir === "up" || dir === "left" ? -1 : 1)); + } + draw(); + setStatus("cartridge ready"); + } catch (error) { + setStatus("captures unavailable", false); + } +} diff --git a/site/assets/aot.css b/site/assets/static.css similarity index 75% rename from site/assets/aot.css rename to site/assets/static.css index 789b1f3..6cbfb8a 100644 --- a/site/assets/aot.css +++ b/site/assets/static.css @@ -1,21 +1,21 @@ -.aot-page { +.static-page { background: linear-gradient(180deg, rgba(10, 18, 16, 0.95) 0%, #080b10 46%, #0d1110 100%); color: #edf7ee; } -.aot-page main { +.static-page main { overflow: hidden; } -.aot-shell { +.static-shell { width: 100%; max-width: 1160px; margin: 0 auto; padding: 0 clamp(1.25rem, 4vw, 2.75rem); } -.aot-hero { +.static-hero { position: relative; padding: clamp(3rem, 7vw, 5.8rem) 0 clamp(3rem, 7vw, 5.5rem); border-bottom: 1px solid rgba(143, 198, 133, 0.2); @@ -27,13 +27,13 @@ background-size: auto, 42px 42px, auto, auto; } -.aot-hero__copy { +.static-hero__copy { max-width: 760px; margin: 0 auto 2.35rem; text-align: center; } -.aot-kicker { +.static-kicker { margin: 0 0 0.9rem; color: #f1c84b; font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace; @@ -43,20 +43,20 @@ text-transform: uppercase; } -.aot-hero h1, -.aot-section-head h2, -.aot-doc-callout h2 { +.static-hero h1, +.static-section-head h2, +.static-doc-callout h2 { color: #f6ffe8; letter-spacing: 0; } -.aot-hero h1 { +.static-hero h1 { margin: 0; font-size: 6.4rem; line-height: 0.93; } -.aot-hero__lead { +.static-hero__lead { max-width: 690px; margin: 1.2rem auto 0; color: #b8c9ba; @@ -64,7 +64,7 @@ line-height: 1.65; } -.aot-actions { +.static-actions { display: flex; flex-wrap: wrap; justify-content: center; @@ -72,7 +72,7 @@ margin-top: 1.65rem; } -.aot-btn { +.static-btn { display: inline-flex; align-items: center; justify-content: center; @@ -89,23 +89,23 @@ background 0.14s ease; } -.aot-btn:hover { +.static-btn:hover { transform: translateY(-1px); border-color: rgba(241, 200, 75, 0.72); background: rgba(32, 51, 41, 0.96); } -.aot-btn--primary { +.static-btn--primary { border-color: transparent; background: linear-gradient(135deg, #a6d76f 0%, #f1c84b 100%); color: #07120a; } -.aot-btn--primary:hover { +.static-btn--primary:hover { background: linear-gradient(135deg, #b9eb7d 0%, #ffd861 100%); } -.aot-console { +.static-console { width: min(100%, 950px); margin: 0 auto; border: 1px solid rgba(191, 203, 173, 0.26); @@ -119,8 +119,8 @@ inset 0 1px 0 rgba(255, 255, 255, 0.08); } -.aot-console__top, -.aot-console__rail { +.static-console__top, +.static-console__rail { display: flex; justify-content: space-between; gap: 1rem; @@ -132,7 +132,7 @@ text-transform: uppercase; } -.aot-console__body { +.static-console__body { display: grid; grid-template-columns: 130px minmax(0, 1fr) 120px; align-items: center; @@ -140,7 +140,7 @@ margin: 1rem 0; } -.aot-screen { +.static-screen { position: relative; overflow: hidden; border: 10px solid #080b09; @@ -152,7 +152,7 @@ aspect-ratio: 240 / 160; } -.aot-screen::after { +.static-screen::after { content: ""; position: absolute; inset: 0; @@ -163,14 +163,14 @@ mix-blend-mode: screen; } -.aot-screen canvas { +.static-screen canvas { display: block; width: 100%; height: 100%; image-rendering: pixelated; } -.aot-screen__status { +.static-screen__status { position: absolute; left: 0.55rem; bottom: 0.55rem; @@ -185,19 +185,19 @@ text-transform: uppercase; } -.aot-screen__status[data-ready="true"] { +.static-screen__status[data-ready="true"] { border-color: rgba(166, 215, 111, 0.52); color: #cfff9c; } -.aot-dpad { +.static-dpad { position: relative; width: 112px; height: 112px; margin: 0 auto; } -.aot-dpad::before { +.static-dpad::before { content: ""; position: absolute; inset: 39px; @@ -205,8 +205,8 @@ background: #080a09; } -.aot-dpad button, -.aot-face button { +.static-dpad button, +.static-face button { cursor: pointer; color: #f5f7ec; border: 1px solid rgba(255, 255, 255, 0.08); @@ -222,24 +222,24 @@ border-color 0.08s ease; } -.aot-dpad button:hover, -.aot-face button:hover, -.aot-dpad button.is-active, -.aot-face button.is-active { +.static-dpad button:hover, +.static-face button:hover, +.static-dpad button.is-active, +.static-face button.is-active { border-color: rgba(241, 200, 75, 0.6); background: linear-gradient(180deg, rgba(255, 255, 255, 0.12), transparent 34%), #20281d; } -.aot-dpad button:active, -.aot-face button:active, -.aot-dpad button.is-active, -.aot-face button.is-active { +.static-dpad button:active, +.static-face button:active, +.static-dpad button.is-active, +.static-face button.is-active { transform: translateY(1px); } -.aot-dpad button { +.static-dpad button { position: absolute; width: 34px; height: 34px; @@ -247,7 +247,7 @@ font-size: 0; } -.aot-dpad button::before { +.static-dpad button::before { content: ""; display: block; width: 0; @@ -256,53 +256,53 @@ border-style: solid; } -.aot-dpad [data-aot-input="up"] { +.static-dpad [data-aot-input="up"] { top: 0; left: 39px; } -.aot-dpad [data-aot-input="up"]::before { +.static-dpad [data-aot-input="up"]::before { border-width: 0 6px 8px; border-color: transparent transparent #d9e4cf; } -.aot-dpad [data-aot-input="down"] { +.static-dpad [data-aot-input="down"] { bottom: 0; left: 39px; } -.aot-dpad [data-aot-input="down"]::before { +.static-dpad [data-aot-input="down"]::before { border-width: 8px 6px 0; border-color: #d9e4cf transparent transparent; } -.aot-dpad [data-aot-input="left"] { +.static-dpad [data-aot-input="left"] { top: 39px; left: 0; } -.aot-dpad [data-aot-input="left"]::before { +.static-dpad [data-aot-input="left"]::before { border-width: 6px 8px 6px 0; border-color: transparent #d9e4cf transparent transparent; } -.aot-dpad [data-aot-input="right"] { +.static-dpad [data-aot-input="right"] { top: 39px; right: 0; } -.aot-dpad [data-aot-input="right"]::before { +.static-dpad [data-aot-input="right"]::before { border-width: 6px 0 6px 8px; border-color: transparent transparent transparent #d9e4cf; } -.aot-face { +.static-face { display: grid; justify-items: center; gap: 0.8rem; } -.aot-face button { +.static-face button { width: 52px; height: 52px; border-radius: 50%; @@ -310,101 +310,101 @@ font-weight: 800; } -.aot-face [data-aot-input="a"] { +.static-face [data-aot-input="a"] { margin-left: 1.25rem; background: linear-gradient(180deg, rgba(255, 255, 255, 0.1), transparent 36%), #7a2730; } -.aot-face [data-aot-input="b"] { +.static-face [data-aot-input="b"] { margin-right: 1.25rem; background: linear-gradient(180deg, rgba(255, 255, 255, 0.1), transparent 36%), #274d2d; } -.aot-band, -.aot-flow, -.aot-doc-callout { +.static-band, +.static-flow, +.static-doc-callout { padding: clamp(3.25rem, 7vw, 5.5rem) 0; border-bottom: 1px solid rgba(143, 198, 133, 0.16); } -.aot-band { +.static-band { background: #090d0b; } -.aot-flow { +.static-flow { background: linear-gradient(90deg, rgba(241, 200, 75, 0.09), transparent 44%), #0b1112; } -.aot-doc-callout { +.static-doc-callout { background: #0c100e; } -.aot-section-head { +.static-section-head { max-width: 760px; margin: 0 auto 2rem; text-align: center; } -.aot-section-head h2, -.aot-doc-callout h2 { +.static-section-head h2, +.static-doc-callout h2 { margin: 0; font-size: 3.2rem; line-height: 1.02; } -.aot-section-head p:not(.aot-kicker), -.aot-doc-callout p:not(.aot-kicker) { +.static-section-head p:not(.static-kicker), +.static-doc-callout p:not(.static-kicker) { color: #aebfaf; line-height: 1.7; } -.aot-tiles { +.static-tiles { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1rem; } -.aot-tiles article, -.aot-pipeline li { +.static-tiles article, +.static-pipeline li { border: 1px solid rgba(143, 198, 133, 0.22); border-radius: 8px; background: rgba(18, 29, 24, 0.72); } -.aot-tiles article { +.static-tiles article { padding: 1.2rem; } -.aot-tiles span { +.static-tiles span { color: #f1c84b; font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace; font-size: 0.78rem; font-weight: 800; } -.aot-tiles h3, -.aot-pipeline strong { +.static-tiles h3, +.static-pipeline strong { color: #f5ffe8; } -.aot-tiles h3 { +.static-tiles h3 { margin: 0.65rem 0 0.45rem; font-size: 1.05rem; } -.aot-tiles p { +.static-tiles p { margin: 0; color: #aebfaf; line-height: 1.6; } -.aot-pipeline { +.static-pipeline { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0.8rem; @@ -413,107 +413,107 @@ list-style: none; } -.aot-pipeline li { +.static-pipeline li { display: grid; min-height: 132px; padding: 1rem; align-content: space-between; } -.aot-pipeline strong { +.static-pipeline strong { display: block; font-size: 1rem; } -.aot-pipeline span { +.static-pipeline span { display: block; color: #aebfaf; line-height: 1.55; } -.aot-doc-callout__in { +.static-doc-callout__in { display: flex; align-items: center; justify-content: space-between; gap: 2rem; } -.aot-doc-callout__in > div { +.static-doc-callout__in > div { max-width: 720px; } @media (max-width: 860px) { - .aot-hero h1 { + .static-hero h1 { font-size: 4.5rem; } - .aot-hero__lead { + .static-hero__lead { font-size: 1.08rem; } - .aot-section-head h2, - .aot-doc-callout h2 { + .static-section-head h2, + .static-doc-callout h2 { font-size: 2.6rem; } - .aot-console__body { + .static-console__body { grid-template-columns: 1fr; } - .aot-screen { + .static-screen { order: -1; } - .aot-face { + .static-face { grid-template-columns: repeat(2, 52px); justify-content: center; } - .aot-face [data-aot-input="a"], - .aot-face [data-aot-input="b"] { + .static-face [data-aot-input="a"], + .static-face [data-aot-input="b"] { margin: 0; } - .aot-tiles, - .aot-pipeline { + .static-tiles, + .static-pipeline { grid-template-columns: 1fr; } - .aot-doc-callout__in { + .static-doc-callout__in { align-items: flex-start; flex-direction: column; } } @media (max-width: 520px) { - .aot-hero h1 { + .static-hero h1 { font-size: 3.1rem; } - .aot-hero__lead { + .static-hero__lead { font-size: 1rem; } - .aot-section-head h2, - .aot-doc-callout h2 { + .static-section-head h2, + .static-doc-callout h2 { font-size: 2rem; } - .aot-console { + .static-console { border-radius: 18px; } - .aot-console__top, - .aot-console__rail { + .static-console__top, + .static-console__rail { font-size: 0.64rem; } - .aot-screen { + .static-screen { border-width: 7px; border-radius: 12px; } - .aot-screen__status { + .static-screen__status { font-size: 0.6rem; } } diff --git a/site/build.ts b/site/build.ts index 2abde4b..1715bd2 100644 --- a/site/build.ts +++ b/site/build.ts @@ -29,7 +29,7 @@ import { vdomHelperId, } from "@vue-jsx-vapor/runtime/raw"; import { OG_IMAGE_URL, SITE_DESC, SITE_TITLE, SITE_URL, renderPage } from "./templates.ts"; -import { AOT_DOC_NAV, BLOG_POSTS, DOC_NAV, type DocSection } from "./nav.ts"; +import { BLOG_POSTS, DOC_NAV, STATIC_DOC_NAV, type DocSection } from "./nav.ts"; const ROOT = new URL("..", import.meta.url).pathname; // repo root const SITE = ROOT + "site/"; @@ -302,10 +302,10 @@ function copyDemoAssets(): void { } } -function copyAotAssets(): void { - const docsDir = ROOT + "aot/docs/"; - for (const file of ["town.png", "dialogue.png", "choice.png", "route.png"]) { - copy(docsDir + file, "aot/assets/" + file); +function copyStaticAssets(): void { + const docsDir = ROOT + "static/docs/"; + for (const file of ["boardroom.png", "vegas.png", "gameboy.png", "nes.png"]) { + copy(docsDir + file, "static/assets/" + file); } } @@ -380,12 +380,12 @@ async function main() { copy(SITE + "assets/screen.css", "assets/screen.css"); await bundle("assets/home.js", "assets/home.js"); - // 8. AOT product line. This is intentionally separate from the framework - // playground and docs tree. - write("aot/index.html", renderAotHome()); - copy(SITE + "assets/aot.css", "assets/aot.css"); - copy(SITE + "assets/aot-demo.js", "assets/aot-demo.js"); - copyAotAssets(); + // 8. Pocket Static product line. This is intentionally separate from the + // framework playground and docs tree. + write("static/index.html", renderStaticHome()); + copy(SITE + "assets/static.css", "assets/static.css"); + copy(SITE + "assets/static-demo.js", "assets/static-demo.js"); + copyStaticAssets(); // 9. docs + blog (setupMarkdown installs the shared marked/shiki renderer) const highlight = await setupMarkdown(); @@ -465,17 +465,17 @@ ${body} `; } -const AOT_DESC = "PocketJS AOT turns a TypeScript/JSX cartridge DSL into GBA-native game data and a fixed runtime."; -function renderAotHome(): string { +const STATIC_DESC = "Pocket Static compiles TypeScript generator games into real GBA, Game Boy and NES cartridges."; +function renderStaticHome(): string { return renderPage({ - title: "PocketJS AOT", - active: "aot", - body: readFileSync(SITE + "aot.html", "utf8"), - bodyClass: "aot-page", - head: '', - scripts: [''], - path: "/aot/", - description: AOT_DESC, + title: "Pocket Static", + active: "static", + body: readFileSync(SITE + "static.html", "utf8"), + bodyClass: "static-page", + head: '', + scripts: [''], + path: "/static/", + description: STATIC_DESC, robots: "noindex,nofollow", }); } @@ -657,7 +657,7 @@ async function buildDocs(highlight: Highlight) { head: tree.head, scripts: [], path: hrefFor(slug), - description: tree.active === "aot" ? AOT_DESC : undefined, + description: tree.active === "static" ? STATIC_DESC : undefined, robots: tree.robots, })); } @@ -680,11 +680,11 @@ async function buildDocs(highlight: Highlight) { transformFrameworkCode: true, }); await buildTree({ - active: "aot", - docsDir: SITE + "content/aot-docs/", + active: "static", + docsDir: SITE + "content/static-docs/", head: "", - nav: AOT_DOC_NAV, - outPrefix: "aot/docs", + nav: STATIC_DOC_NAV, + outPrefix: "static/docs", robots: "noindex,nofollow", transformFrameworkCode: false, }); diff --git a/site/content/aot-docs/authoring.md b/site/content/aot-docs/authoring.md deleted file mode 100644 index 828f3b0..0000000 --- a/site/content/aot-docs/authoring.md +++ /dev/null @@ -1,82 +0,0 @@ -# Authoring model - -AOT source files are split into two zones. The static zone runs during the Bun -build and declares the cartridge. The residual zone is limited script code that -can be compiled into the runtime VM. - -The authoring shape is deliberately hybrid: - -- tile layers stay on the typed builder path; -- scene entities are grouped with build-time JSX components; -- scripts are generator bodies that the compiler residualizes into bytecode. - -```tsx -/** @jsxImportSource @pocketjs/aot */ -import { - ascii, - defineMap, - Npc, - PlayerSpawn, - script, - say, - tile, -} from "@pocketjs/aot"; -import { hero, town } from "./assets"; - -const ElderTalk = script(function* () { - yield say("Welcome to the route."); -}); - -function TownEntities() { - return ( - <> - - - - ); -} - -export const Town = defineMap("town") - .tileset(town) - .layer( - ascii` - #### - #..# - #### - `.legend({ - "#": tile("wall"), - ".": tile("grass"), - }), - ) - .entities() - .done(); -``` - -## Static declarations - -The compiler can freely evaluate cartridge declarations. This is where tilesets, -maps, layers, actors, hitboxes, warps, palettes, and asset references are -collected. JSX components are just build-time functions that return scene -nodes; they are expanded before the ROM is built. - -## Typed tile layers - -`defineTileset()` preserves literal tile names, and `.tileset(town).layer(...)` -uses that type to reject legends that reference missing tiles. JSX does not own -tile layers because parent-to-child type propagation is weaker there. - -```tsx -defineMap("typed") - .tileset(town) - .layer(ascii`#.`.legend({ - "#": tile("wall"), - ".": tile("grass"), - })); -``` - -## Residual scripts - -Dialogue scripts preserve only the supported control flow and commands. The -compiler lowers `say`, `choice`, flag checks, and scene transitions into compact -bytecode. Unsupported JavaScript stays a compile-time error so the runtime does -not need to embed a dynamic interpreter. diff --git a/site/content/aot-docs/cartridge.md b/site/content/aot-docs/cartridge.md deleted file mode 100644 index f197c0a..0000000 --- a/site/content/aot-docs/cartridge.md +++ /dev/null @@ -1,20 +0,0 @@ -# Cartridge format - -PJGB is the packed cartridge data model consumed by the GBA runtime. It is not a -general application bundle; it is a purpose-built layout for tile RPG scenes and -their scripts. - -## Chunk families - -| Chunk | Purpose | -| --- | --- | -| Header | Magic, version, offsets, and cartridge metadata. | -| Palettes | BGR555 background and sprite palette banks. | -| Tiles | 4bpp background tiles and sprite tiles. | -| Maps | Layer tile indices, collision, actors, and warp tables. | -| Scripts | VM bytecode, constants, labels, and string references. | -| Text | Dialogue glyph atlas, advances, and textbox strings. | -| Debug | Optional symbol names and source locations for development builds. | - -The runtime reads offsets directly from the blob. Versioning belongs in the -header so compiler and runtime compatibility is easy to check at boot. diff --git a/site/content/aot-docs/compiler.md b/site/content/aot-docs/compiler.md deleted file mode 100644 index 9662cc9..0000000 --- a/site/content/aot-docs/compiler.md +++ /dev/null @@ -1,22 +0,0 @@ -# Compiler pipeline - -The AOT compiler turns author files into a PJGB cartridge blob and a linked GBA -ROM. Each stage keeps the boundary between build-time JavaScript and runtime -game data explicit. - -## Stages - -1. **Evaluate** the static DSL with Bun and collect maps, actors, assets, and - residual script entry points. -2. **Bake** image assets into 8x8 GBA tiles, 4bpp tile maps, sprite sheets, and - BGR555 palettes. -3. **Bake text** into the subpixel dialogue glyph format used by the textbox - renderer. -4. **Residualize** supported script generators into VM instructions. -5. **Pack** the PJGB chunks with offsets, sizes, and debug metadata. -6. **Link** the blob into the fixed C runtime and emit a `.gba` ROM. - -## Failure model - -The compiler should fail early when author code crosses the supported AOT -surface. That keeps the ROM deterministic and keeps the native runtime small. diff --git a/site/content/aot-docs/getting-started.md b/site/content/aot-docs/getting-started.md deleted file mode 100644 index 49c23a7..0000000 --- a/site/content/aot-docs/getting-started.md +++ /dev/null @@ -1,77 +0,0 @@ -# Getting started - -PocketJS AOT authoring has two build-time surfaces: a typed map builder for -tile layers, and JSX scene prefabs for entities. Keep tilemaps on the builder -path so TypeScript can compare layer tile names against the selected tileset. -Use JSX for NPCs, signs, warps, entrances, and reusable scene groups. - -```tsx -/** @jsxImportSource @pocketjs/aot */ -import { - ascii, - defineGame, - defineMap, - defineTileset, - PlayerSpawn, - Sign, - tile, -} from "@pocketjs/aot"; - -const rows8 = (v: string) => Array.from({ length: 8 }, () => v); - -const town = defineTileset("town", { - palette: [[0, 0, 0]], - tiles: { - grass: { px: rows8("11111111") }, - wall: { solid: true, px: rows8("22222222") }, - }, -}); - -function TownEntities() { - return ( - <> - - - - ); -} - -const Town = defineMap("town") - .tileset(town) - .layer( - ascii` - #### - #..# - #### - `.legend({ - "#": tile("wall"), - ".": tile("grass"), - }), - ) - .entities() - .done(); - -export default defineGame({ - title: "POCKET TOWN", - start: "town:spawn", - maps: [Town], -}); -``` - -## Why this shape - -`defineMap(...).tileset(town).layer(...)` carries the concrete `town.tiles` -type into the layer check. If the legend references `tile("water")` and the -tileset has no `water`, `tsc` fails before the compiler builds a ROM. - -JSX is intentionally used one layer later. Pure JSX components run during the -build, expand into static scene nodes, and never ship to the cartridge. - -## Build - -```bash -bun aot/compiler/cli.ts build aot/demo/game.tsx --out aot/dist/pocket-town.gba -``` - -The build evaluates static declarations, lowers supported `script(function* () { -... })` bodies into bytecode, packs PJGB data, and links the fixed GBA runtime. diff --git a/site/content/aot-docs/overview.md b/site/content/aot-docs/overview.md deleted file mode 100644 index eeb6e46..0000000 --- a/site/content/aot-docs/overview.md +++ /dev/null @@ -1,25 +0,0 @@ -# PocketJS AOT - -PocketJS AOT is a separate product line for GBA-class cartridge games. It uses -TypeScript and JSX as an authoring DSL, but the final program does not ship a -JavaScript engine. The build executes the static declarations, lowers the -supported residual scripts, and links compact game data into a fixed native -runtime. - -The framework docs describe the PSP-oriented UI runtime powered by QuickJS, -Solid, Vue Vapor, and PocketJS host components. AOT is intentionally different: -it targets tile maps, sprites, palettes, dialogue, flags, choices, and warps. - -## Current slice - -- Author typed ASCII tile layers with the map builder and compose entities with build-time JSX prefabs. -- Bake GBA-native 4bpp graphics, BGR555 palettes, and packed glyph data. -- Lower supported generator scripts into bytecode for a small runtime VM. -- Preview captured cartridge states in the independent [web demo](/aot/#demo). - -## Boundaries - -AOT docs live under `/aot/docs/*` so the framework docs can stay focused on -PocketJS UI applications. The AOT browser demo is also separate from the -framework playground: it is a static canvas viewer for generated cartridge -states, not a QuickJS/Solid runtime. diff --git a/site/content/aot-docs/runtime.md b/site/content/aot-docs/runtime.md deleted file mode 100644 index b5ed112..0000000 --- a/site/content/aot-docs/runtime.md +++ /dev/null @@ -1,18 +0,0 @@ -# GBA runtime - -The AOT runtime is a fixed native program that consumes PJGB data. It is designed -around predictable memory, simple scene stepping, and GBA hardware features. - -## Responsibilities - -- Initialize Mode 0 backgrounds, OBJ sprites, palettes, and VRAM transfers. -- Step the active map, actor state, warps, flags, and script VM. -- Render textbox windows with baked glyph data. -- Decode player input into scene movement and script choices. -- Expose a small debug block for emulator inspection during development. - -## Non-goals - -The runtime does not run Solid, Vue Vapor, QuickJS, or the PocketJS framework -component system. That keeps AOT independent from the PSP UI product line and -lets the compiler own most of the complexity. diff --git a/site/content/aot-docs/web-demo.md b/site/content/aot-docs/web-demo.md deleted file mode 100644 index 9d101db..0000000 --- a/site/content/aot-docs/web-demo.md +++ /dev/null @@ -1,19 +0,0 @@ -# Web demo - -The AOT web demo is a static browser preview of generated cartridge states. It -uses the screenshots emitted for the GBA DSL work and draws them into a 240x160 -canvas with pixel scaling. - -It deliberately does not use the PocketJS framework playground. The playground -loads a QuickJS-backed UI runtime and framework examples; the AOT demo presents -the cartridge product line as its own surface. - -## Controls - -- `A` or Enter advances through the captured states. -- `B` or Escape moves backward. -- Arrow left jumps to town; arrow right jumps to route. -- Arrow up and arrow down cycle through the scene list. - -The demo is useful for documentation and product validation. The authoritative -runtime behavior remains the GBA runtime linked with the PJGB cartridge data. diff --git a/site/content/static-docs/boardroom.md b/site/content/static-docs/boardroom.md new file mode 100644 index 0000000..7d22ede --- /dev/null +++ b/site/content/static-docs/boardroom.md @@ -0,0 +1,36 @@ +# BOARDROOM, the game + +The launch game adapts the November 2023 OpenAI board crisis into a five-day +RPG: the noon Google Meet in a Las Vegas hotel, the guest badge, three CEOs +in three days, the Microsoft feint, 743 signatures, Ilya's 5 AM reversal, +and a final negotiation battle against THE BOARD. + +`games/boardroom/dossier.md` pins every quoted line and date to the public +record; everything else is original parody, and the game says so. The +finale's moves — TENDER OFFER, HEART EMOJIS, THE LETTER — are a +`rpg/battle.ts` config: the whole battle system is compiler macros, and the +letter move stays gated until the signature drive reaches 743. + +## Why it's a good framework demo + +- **One module, three cartridges.** The same `game.ts` builds `.gba`, `.gb` + and `.nes`, and the CI playthrough clears all 17 checkpoints on each. +- **The story is state.** Chapters are flags; the signature counter is a + var; scene gating is `onEnter` scripts re-hiding actors — everything the + script VM exists to do. +- **Deterministic drama.** The final battle rolls the same dice on every + console, because the story RNG belongs to the script layer, not the + platform. +- **Art as code.** The cast is a deterministic pixel-person generator in the + declaration zone — hair, wardrobe and walk frames as data, no network, no + binary assets in review. + +## Playing it + +```sh +cd static && bun games/boardroom/test/e2e.ts gba # builds dist/boardroom.gba +open dist/boardroom.gba +``` + +D-pad walks, A talks and advances text, up/down move menu cursors. Fired to +rehired in about fifteen minutes. diff --git a/site/content/static-docs/compiler.md b/site/content/static-docs/compiler.md new file mode 100644 index 0000000..59477ae --- /dev/null +++ b/site/content/static-docs/compiler.md @@ -0,0 +1,38 @@ +# Pipeline & assets + +``` +evaluate run the declaration zone; freeze script generators as ASTs +scripts generator ASTs -> stack-VM bytecode (per console: text pages differ) +model layouts/legends -> tile grids, collision, actors, warps, budgets +link blobs + tables; symbolic warp/actor operands patched +targets/* native art encodings + data emission + toolchain drive +``` + +`spec/isa.ts` is the single source of truth for the ISA, record layouts, and +the debug block; `spec/gen-c.ts` derives the C header every runtime compiles +against, so TypeScript and C cannot drift. + +## Assets + +Art is authored (or generated) as palette-indexed hex rows — 8x8 tiles and +16x16 sprite frames with three facings (left mirrors right in hardware on +all three consoles). Encoders produce each console's native format: + +- **GBA** — 4bpp packed, 16-color banks in BGR555. +- **Game Boy** — 2bpp interleaved; colors map to 4 shades by luma, with + sprite colors clamped to visible shades. +- **NES** — 2bpp planar; palettes reduce to the console's 64-color master + palette, one background subpalette plus up to four sprite subpalettes. + +## Data placement + +Every blob (scripts, text banks, maps, tile stores) is placed whole. The GBA +keeps a flat address space; the Game Boy (MBC5) and NES (UNROM) assign each +blob to a 16 KB bank and the runtime latches banks per access — on the NES +through a bus-conflict-safe identity table. + +## Budgets + +Budgets are compile errors, not runtime surprises: map sizes per console +(NES maps stop at 32x24 so the textbox owns whole attribute rows), one text +bank entry per wrapped page, 16 KB per blob, 12 sprites, 256 flags, 64 vars. diff --git a/site/content/static-docs/getting-started.md b/site/content/static-docs/getting-started.md new file mode 100644 index 0000000..33fdbe4 --- /dev/null +++ b/site/content/static-docs/getting-started.md @@ -0,0 +1,79 @@ +# Getting started + +## Prerequisites + +- [bun](https://bun.sh) +- `arm-none-eabi-gcc` (GBA), `sdcc` (Game Boy), `cc65` (NES) +- `mgba` and `rgbds` from Homebrew (headless emulator + header fixer) + +```sh +brew install --cask gcc-arm-embedded # or brew install arm-none-eabi-gcc +brew install sdcc cc65 mgba rgbds +cd static && bun install +``` + +## Build the launch game + +```sh +cd static +bun -e ' +import { compileGame } from "./compiler/index.ts"; +import { buildGba } from "./compiler/targets/gba.ts"; +const out = await compileGame("games/boardroom/game.ts", "gba"); +await buildGba(out.linked, "dist/boardroom.gba"); +' +open dist/boardroom.gba # any GBA emulator +``` + +Swap `buildGba`/`"gba"` for `buildGb`/`"gb"` or `buildNes`/`"nes"` and the +same module becomes a Game Boy or NES cartridge. + +## Run the test pyramid + +```sh +bun test . # vm semantics, script compiler, pipeline +bun test/harness/build.ts # build the libmgba runner (once) +bun test/e2e.ts # smoke game, 35 assertions x 3 consoles +bun games/boardroom/test/e2e.ts # the full story, 17 checkpoints x 3 +``` + +The E2E suites read a fixed debug block over each emulator's bus — no +screenshots are asserted, only logical state, which is why one suite can +referee three consoles. + +## A minimal game + +```ts +import { defineGame, defineMap, defineSprite, defineTileset, npc, script } from "@pocketjs/static/rpg"; + +const tiles = defineTileset("town", { palette: [[16,18,22],[92,148,252],[56,56,72]], tiles: { + floor: { px: ["11111111","11111111","11111111","11111111","11111111","11111111","11111111","11111111"] }, + wall: { px: ["22222222","22222222","22222222","22222222","22222222","22222222","22222222","22222222"], solid: true }, +}}); + +const hero = defineSprite("hero", { palette: [[0,0,0],[248,248,248]], facings: { + down: [Array.from({ length: 16 }, () => "1".repeat(16))], + up: [Array.from({ length: 16 }, () => "1".repeat(16))], + right: [Array.from({ length: 16 }, () => "1".repeat(16))], +}}); + +const Hello = script(function* (s, v, f) { + yield* s.say("It works on three consoles."); +}); + +defineGame({ + title: "HELLO", + start: "town:door", + player: hero, + maps: [defineMap("town", { + tileset: tiles, + layout: ` + ######## + #......# + ######## + `, + legend: { "#": "wall", ".": "floor" }, + entrances: { door: { at: [2, 1], dir: "right" } }, + actors: [npc("sign", { sprite: hero, at: [5, 1], talk: Hello })], + })], +}); diff --git a/site/content/static-docs/overview.md b/site/content/static-docs/overview.md new file mode 100644 index 0000000..9045343 --- /dev/null +++ b/site/content/static-docs/overview.md @@ -0,0 +1,43 @@ +# Pocket Static + +Pocket Static is the cartridge product line of the Pocket family. A game is +one TypeScript module; the build compiles it into real ROMs for three +consoles at once — Game Boy Advance, Game Boy, and NES. No JavaScript engine +ships: scripts become bytecode for a small stack VM, and everything the +compiler can decide statically (text wrapping, palettes, maps, branching +structure, battle logic) is decided before the cartridge exists. + +The framework docs describe the PSP-oriented UI runtime powered by QuickJS, +Solid, Vue Vapor, and PocketJS host components. Pocket Static is intentionally +different: it targets tile maps, sprites, dialogue, flags, choices, warps, +and turn-based battles on consoles with 2-16 KB of RAM. + +## The one idea + +A game has two zones: + +- **Declaration zone** — `defineGame`, `defineMap`, `defineSprite`, + `defineTileset`: plain TypeScript, executed at build time. Anything you can + compute in TS is free (BOARDROOM's cast is a tiny procedural pixel-person + generator). +- **Script zone** — `script(function* (s, v, f) { ... })`: generator + functions that are compiled, never executed. `s` is the engine, `v` your + numeric vars, `f` your boolean flags. + +The stack VM is the portability layer: its interpreter is ~600 lines of +portable C, compiled by `arm-none-eabi-gcc`, `sdcc`, and `cc65`. The same +bytecode runs on all three CPUs, and a TypeScript reference interpreter +(`vm/ref.ts`) defines the semantics that every console is tested against. + +## What exists today + +The RPG category: grid movement, solid tiles and actors, talk scripts, +step-on triggers, warps, a typewriter textbox, choice menus, deterministic +RNG, and a battle system that is literally a compiler macro library +(`rpg/battle.ts`). The launch game BOARDROOM plays the same 17-checkpoint +story on all three consoles in CI. + +Categories are a deliberate seam: a category is a syscall table, a DSL, a +model builder, budgets, and one portable runtime module. Visual novels are a +strict subset of the RPG surface; platformers put a physics core behind a +blocking op. See `static/DESIGN.md` in the repo for the contract. diff --git a/site/content/static-docs/scripts.md b/site/content/static-docs/scripts.md new file mode 100644 index 0000000..72da7f4 --- /dev/null +++ b/site/content/static-docs/scripts.md @@ -0,0 +1,54 @@ +# The script compiler + +Script bodies never execute. The compiler walks the generator's TypeScript +AST and emits stack-VM bytecode — so what you write is a real (small) +language, not a statement whitelist. + +## Surface + +```ts +const Fight = script(function* (s, v, f) { + v.hp = 8; // v.* — global i16 vars + let round = 0; // locals get VM slots + while (v.hp > 0 && !f.done) { // &&/|| short-circuit + const move = yield* s.choose(["Hit", "Run"]); + if (move === "Hit") { v.hp -= 2 + (yield* s.rnd(3)); } + else { f.done = true; } // f.* — flags + round += 1; + } + yield* s.say(`Over in ${round} rounds.`); // ${} of runtime values +}); +``` + +Supported: i16 arithmetic with constant folding, comparisons, ternaries, +`if/else`, `while`, classic `for`, `switch` (numeric or choice-string case +labels), `break`/`continue`, compound assignment and `++`/`--`, and +`yield* s.call(OtherScript)` subroutines. + +Engine ops on `s`: `say`, `choose`, `rnd`, `wait`, `lock`/`release`, +`face`, `show`/`hide` (actors), `warp("map:entrance")`, `sfx`. + +## Macros: partial evaluation for gameplay + +A plain generator function used with `yield*` is a **macro**: the compiler +inlines its body at the call site with arguments bound as compile-time +constants. `for...of` over a bound array unrolls; `if` over a static +condition drops the dead branch; `return value` works via a hidden slot. + +`rpg/battle.ts` is a whole turn-based battle system built this way — each +encounter compiles to specialized bytecode, and the runtime needed zero new +code for it. + +## Text + +`say()` bodies are wrapped and paginated per console at compile time (28 +columns on GBA/NES, 18 on Game Boy) — the runtime never measures text. +Runtime `${...}` values compile to scratch-var stores plus an inline format +token the textbox renders as decimal digits. + +## Determinism + +`rnd(n)` advances a seeded xorshift16 that only script calls touch. Same +choices in, same story out — on the reference VM and on all three consoles. +That is what lets the E2E suites use a host-side playthrough as the oracle +for emulator assertions. diff --git a/site/content/static-docs/targets.md b/site/content/static-docs/targets.md new file mode 100644 index 0000000..063d430 --- /dev/null +++ b/site/content/static-docs/targets.md @@ -0,0 +1,50 @@ +# GBA / GB / NES + +One portable engine (`runtime/core/vm.c` + `rpg.c`) owns every gameplay +decision. Each console adds a small HAL — video, input, audio, ROM access — +and nothing else, which is why the logical state is identical by +construction. + +## Game Boy Advance + +Mode 0. BG0 is the map (charblock 0, hardware scroll), BG1 the textbox, +16x16 sprites through a shadow OAM committed at vblank. VRAM is CPU-writable +any time, so the HAL is direct. Cartridge header ships with the logo and +checksum patched — flashcart-friendly. + +## Game Boy + +The textbox is the **window layer**: showing dialogue is a register write, +and closing it never repaints the map. All steady-state VRAM traffic goes +through a write queue drained strictly inside vblank behind a STAT gate — +the DMG silently drops writes outside modes 0/1, which the E2E suite caught +as a single missing letter. OAM goes up via the classic HRAM DMA stub; +blobs bank-switch through MBC5. + +The portable engine avoids u8xu8 multiplies entirely: sdcc 4.6's SM83 port +miscompiles some `__muluchar` frames, so hot arithmetic is accumulation and +shifts. + +## NES + +The NMI owns the PPU: OAM DMA plus a 64-entry VRAM ring (single writes and +fill-8 runs), then a scroll/latch reset. CHR-RAM is uploaded with rendering +off; sprites are 8x16 pairs in pattern table 1; the textbox owns tile rows +24-29 so palette attributes (16px granularity) never bleed into the map. +cc65 code can take more than a video frame per engine tick, so the headless +harness paces scenarios on the debug block's tick counter instead of frames +— scenarios stay tick-accurate at any speed. + +## The contract + +Every runtime mirrors one debug block (magic, player state, script/text +state, RNG, all flags and vars) to a fixed address each frame: + +| console | debug block | emulator | +|---|---|---| +| GBA | `0x02000000` (EWRAM) | libmgba | +| Game Boy | `0xDF00` (WRAM) | libmgba | +| NES | `0x0700` (CPU RAM) | jsnes | + +The cross-target suite drives identical scenarios through all three and +compares every checkpoint against the TypeScript reference VM. diff --git a/site/home.html b/site/home.html index 9bcc0d8..eee178a 100644 --- a/site/home.html +++ b/site/home.html @@ -406,10 +406,10 @@

macOS

-

Game Boy Advance

+

GBA · Game Boy · NES

Experimental
-

@pocketjs/aot partially evaluates TSX into a pure C runtime — no JavaScript VM on the device at all.

+

@pocketjs/static compiles generator games into real cartridges for three consoles — no JavaScript VM on the device at all.

  • diff --git a/site/nav.ts b/site/nav.ts index 3e83ddc..36f423d 100644 --- a/site/nav.ts +++ b/site/nav.ts @@ -120,22 +120,21 @@ export const BLOG_POSTS: BlogPost[] = [ }, ]; -export const AOT_DOC_NAV: DocSection[] = [ +export const STATIC_DOC_NAV: DocSection[] = [ { - title: "Product line", + title: "Pocket Static", items: [ { slug: "overview", title: "Overview" }, { slug: "getting-started", title: "Getting started" }, - { slug: "authoring", title: "Authoring model" }, - { slug: "compiler", title: "Compiler pipeline" }, + { slug: "scripts", title: "The script compiler" }, + { slug: "compiler", title: "Pipeline & assets" }, ], }, { - title: "Runtime", + title: "Consoles", items: [ - { slug: "cartridge", title: "Cartridge format" }, - { slug: "runtime", title: "GBA runtime" }, - { slug: "web-demo", title: "Web demo" }, + { slug: "targets", title: "GBA / GB / NES" }, + { slug: "boardroom", title: "BOARDROOM, the game" }, ], }, ]; diff --git a/site/static.html b/site/static.html new file mode 100644 index 0000000..2eb5d64 --- /dev/null +++ b/site/static.html @@ -0,0 +1,80 @@ +
    +
    +
    +

    Pocket product line

    +

    Pocket Static

    +

    + Write a generator, ship a cartridge. One TypeScript module compiles to + real GBA, Game Boy and NES ROMs — scripts lower to a portable + stack VM, everything else resolves at build time. +

    + +
    + +
    +
    + PS-01 + one source, three consoles +
    +
    +
    + + + + +
    +
    + +
    booting cartridge
    +
    +
    + boardroom + captured from the E2E suites +
    +
    +
    +
    +
    + +
    +
    +
    +

    Scripts that never run

    +

    + script(function* (s, v, f) { ... }) bodies are compiled, + not executed: a real expression compiler lowers locals, control flow, + &&/||, switch, subroutines and macro + expansion into bytecode for a ~600-line portable C interpreter. +

    +
    +
    +

    One engine, three consoles

    +

    + Gameplay lives in portable C compiled by arm-none-eabi-gcc, sdcc and + cc65. Each console adds one small HAL: mode-0 layers on GBA, a + window-layer textbox on Game Boy, an NMI-owned VRAM ring on NES. +

    +
    +
    +

    The reference VM is the referee

    +

    + A TypeScript interpreter is the semantic golden. The E2E suites play + identical scenarios through libmgba and jsnes and hold every console + to the reference answers — same seed, same story, byte-equal + debug state. +

    +
    +
    +

    BOARDROOM

    +

    + The launch game: November 2023 at OpenAI, playable — the Vegas + call, 743 signatures, and a final negotiation battle written entirely + as compiler macros. Quoted lines pinned to the public record in the + research dossier. +

    +
    +
    +
    diff --git a/site/templates.ts b/site/templates.ts index 0754a47..e57c003 100644 --- a/site/templates.ts +++ b/site/templates.ts @@ -14,7 +14,7 @@ export const OG_IMAGE_URL = `${SITE_URL}/og-image.png`; export interface PageOpts { title: string | null; // null uses the bare wordmark (homepage) - active: string; // "home" | "docs" | "aot" | "playground" | "blog" + active: string; // "home" | "docs" | "static" | "playground" | "blog" body: string; bodyClass?: string; head?: string; diff --git a/skills/pocketjs-gba-imagegen/SKILL.md b/skills/pocketjs-gba-imagegen/SKILL.md index f4853ee..e8aa0fc 100644 --- a/skills/pocketjs-gba-imagegen/SKILL.md +++ b/skills/pocketjs-gba-imagegen/SKILL.md @@ -1,6 +1,6 @@ --- name: pocketjs-gba-imagegen -description: Generate original GBA-friendly pixel-art asset source sheets through Codex app-server and ImageGen, then save PNGs for PocketJS AOT asset baking. Use when a local coding agent needs reusable tiles, 16x16 character sprites, RPG item icons, or generic Game Boy Advance-style pixel art through the shared Codex image generation path. +description: Generate original GBA-friendly pixel-art asset source sheets through Codex app-server and ImageGen, then save PNGs for Pocket Static asset baking. Use when a local coding agent needs reusable tiles, 16x16 character sprites, RPG item icons, or generic Game Boy Advance-style pixel art through the shared Codex image generation path. --- # PocketJS GBA ImageGen @@ -22,13 +22,13 @@ git status --short --branch 2. Generate a source sheet with the Bun TypeScript CLI: ```text -bun imagegen --out aot/demo/imagegen/gba-source.png +bun imagegen --out static/games/boardroom/imagegen/source.png ``` 3. Add an art-direction seed only when the user asks for one: ```text -bun imagegen --out aot/demo/imagegen/rainy-port-source.png --theme "rainy port town with stone quays and lanterns" +bun imagegen --out static/games/boardroom/imagegen/rainy-port-source.png --theme "rainy port town with stone quays and lanterns" ``` 4. Use `--json` when another coding agent needs machine-readable output: @@ -37,10 +37,10 @@ bun imagegen --out aot/demo/imagegen/rainy-port-source.png --theme "rainy port t bun imagegen --out /tmp/gba-sheet.png --json ``` -5. If replacing the AOT demo source sheet, rerun the deterministic extractor: +5. If replacing a game's source sheet, rerun that game's deterministic extractor: ```text -bun aot/demo/imagegen/build-assets.ts +bun static/games/boardroom/imagegen/build-assets.ts # (per-game extractor) ``` ## Prompt Profiles @@ -58,4 +58,4 @@ Use `--kind items` for small RPG item icons that remain readable as 16x16 sprite - Keep all command wrappers in Bun TypeScript. Do not add native shell scripts for this workflow. - Generate original assets only; avoid franchise terms and existing character references. - Keep the output as a source sheet on a neutral background with gutters so later scripts can crop or quantize it. -- Treat the generated PNG as source art. The AOT runtime still requires deterministic 4bpp extraction before the image can ship as cartridge data. +- Treat the generated PNG as source art. Pocket Static still requires deterministic palette-indexed extraction before the image can ship as cartridge data. diff --git a/skills/pocketjs-release/SKILL.md b/skills/pocketjs-release/SKILL.md index d21371d..2b63b6f 100644 --- a/skills/pocketjs-release/SKILL.md +++ b/skills/pocketjs-release/SKILL.md @@ -11,7 +11,7 @@ A release is one tag push. `.github/workflows/release.yml` publishes `@pocketjs/framework` (repo root) and `@pocketjs/cli` (`cli/`) to npm via **trusted publishing (OIDC)** — no tokens, provenance attached — skipping any version already on the registry (safe to re-run). The site deploys separately -on every `main` push (`deploy.yml`). `@pocketjs/aot` stays private. +on every `main` push (`deploy.yml`). `@pocketjs/static` stays private. ## Standard workflow diff --git a/static/README.md b/static/README.md new file mode 100644 index 0000000..5870283 --- /dev/null +++ b/static/README.md @@ -0,0 +1,94 @@ +# Pocket Static + +**Write a generator. Ship a cartridge.** + +Pocket Static is the static game compiler of the Pocket family: a game is one +TypeScript module — declarations that run at build time, and generator +functions that *never run at all* — and the compiler partially evaluates the +whole thing down to real console ROMs. One source, three cartridges: +**Game Boy Advance, Game Boy, and NES.** + +```ts +const GuideTalk = script(function* (s, v, f) { + yield* s.say("GUIDE: New build! Want to spar?"); + if ((yield* s.choose(["Spar", "Later"])) === "Spar") { + v.hp = 8; v.foe = 6; + while (v.foe > 0 && v.hp > 0) { + if ((yield* s.choose(["Strike", "Guard"])) === "Strike") { + v.foe -= 2 + (yield* s.rnd(2)); + } else { v.hp += 1; } + if (v.foe > 0) v.hp -= 1; + } + if (v.hp > 0) { f.beat_guide = true; yield* s.say(`You win with ${v.hp} HP left.`); } + } +}); +``` + +That script body is never executed. The compiler lowers it from its AST into +bytecode for a small stack VM whose interpreter is ~600 lines of portable C — +compiled by `arm-none-eabi-gcc`, `sdcc`, and `cc65` respectively. Locals, +arithmetic, `if/while/for/switch`, short-circuit `&&`/`||`, subroutine calls, +compile-time macro expansion, and `${...}` text interpolation all work the +way the TypeScript reads. Everything static — text wrapping, palettes, map +data, branching structure — is resolved at build time; only a fixed +interpreter ships. + +The launch game is **BOARDROOM** (`games/boardroom/`): the November 2023 +OpenAI board crisis as a five-day RPG, with a research dossier pinning every +quoted line to the public record. The finale's turn-based battle against THE +BOARD is `rpg/battle.ts` — a complete battle system written as compiler +macros, zero bespoke runtime. + +## Determinism is the product + +- The story RNG is a seeded xorshift16 advanced only by script `rnd()` calls: + the same playthrough produces the same story on every console. +- `vm/ref.ts` is a host-side reference interpreter — the semantic golden. + Compiler tests run against it with no emulator in the loop. +- Every runtime mirrors one debug block (same layout, fixed address) each + frame. The E2E suites drive headless emulators (libmgba, jsnes) through + identical scenarios and hold all three consoles to the reference VM's + answers: the smoke suite is 35 assertions × 3 consoles, the BOARDROOM + playthrough 17 checkpoints × 3. + +## Layout + +``` +spec/ the contract: ISA, records, debug block, targets (gen-c.ts -> C) +vm/ reference interpreter + bytecode assembler/disassembler +compiler/ evaluate -> script compiler -> model -> link -> targets/{gba,gb,nes} +rpg/ the RPG category: DSL, battle macros, portable C engine +runtime/ core/ (portable vm.c + rpg.c) + one small HAL per console +test/ vm + compiler + pipeline unit tests, cross-target E2E, harnesses +games/ boardroom/ (+ test/smoke/ contract game) +``` + +## Build & test + +Prereqs: `bun`, `arm-none-eabi-gcc`, `sdcc`, `cc65`, `mgba` (Homebrew), and +`rgbds` for header fixing. `jsnes` comes from npm. + +```sh +bun install && bun spec/gen-c.ts +bun test/harness/build.ts # mgba runner (once) +bun test . # unit tests (vm, compiler, pipeline) +bun test/e2e.ts # smoke game on gba+gb+nes +bun games/boardroom/test/e2e.ts # the full BOARDROOM playthrough x3 +``` + +ROMs land in `dist/` — `.gba`, `.gb` (MBC5, rgbfix'd), `.nes` (UNROM, +CHR-RAM). Headers are flashcart-correct; only emulators are in CI. + +## Categories + +RPG is the first category; the seams for more are deliberate. A category is +a syscall table (opcodes 0x40+), a DSL, a model builder, budgets, and a +portable runtime module — the core VM, script compiler, text pipeline, and +target toolchains are shared. Visual novels are a strict subset of RPG's +surface; platformers put a physics core behind a blocking `action()` op, the +way saga/edge did on GBA. See `DESIGN.md` for the full contract. + +Supersedes `@pocketjs/aot` (and the multi-target prototype in PR #52) with a +fresh implementation: a real expression compiler instead of a statement +whitelist, one portable engine instead of three, and the reference-VM oracle +holding every console to the same story. diff --git a/static/docs/boardroom.png b/static/docs/boardroom.png new file mode 100644 index 0000000000000000000000000000000000000000..e3b6bff8aa966fcb9244c27de4c1cd306f96ab4b GIT binary patch literal 1510 zcmeAS@N?(olHy`uVBq!ia0vp^AAooP2NRIoyR*!Qfq`|cr;B4q#hkZy4U2Aj2(%{3 zIw}UW@`!4sp17d6{=kKW>ozQOT3XGsluOj=j`j<#=}@sl9!x_SgO16Y%D>$lAq~vFr@IFWxoe z`6kcWx4(YR{(7IurmsqSWTKgV{d#{e;;xkFqPXQ-4spH^c=4KLmS5e}*W3zid;DHj zSuoCB>AE0Y^s80FJ-G`hPhPOUi1sY|^UDip)#>L2Oq>UA84Q7hFrbx2<^X z&3)l)ugq(<8+HFv!ve2QUngx@b8x7fx^F-g!@MSN($StRMffcLsg_b!k)kyBhwvYxADGNa45T;h%jWYX0|W zcSOoIwac}&Prv-nN!i)=syF+#t+Cn;|LdIcxnC4<=JMaYaN^_XpCxQBN-E~CuAca7 zS7lACc~Qxx_B`Fr#X`4y6V_NEt!0RHI&FU>>dV^2EHBQTe`-;8^ZbH8 zdn4Y}G6Q|(<&gg>7H(b?!gTBNg;J0QKitau)BeKV&p-X>Kl}RV_0hLonQ9w9 z=`MS@TnOl|MCIcgU%pOuPTqL%PxgLb%9wItv$;0s{BS*BOaRk^?~9!C+P9s*^L(*f z^4Vs6OcXekTs?hy{^l$ds8zo{ukX+H<+PhS&wu&z)MYQ*`F3dbF#md6D)~YWXizNB zFG>rSo6O%o;rRXs3=5JQfHC&5`|m@G)n=d9|J^lF*=XT;2mfkgZj-~}=AahFuw z%H5ckE6!80?fFz-x;y9~&b4Ywsj|E3g8aK{0%X}=ZL#dnv*TYIcf1`KQ^E_H_ctEq zeBtBP_u!${oCY0!^*~wnL!2i*{a8^YD-XQ}Ie`U^2N*edn^^cHEFV=nG_WzUtC(;IStLB^c+bcv#UeA|f`Z3` qhKb7i*jYw3(mZf3{H;>^!<*QCH}!?5&kSJs&EVTsxUsWcLOewKF~8Hi%jC?dQUp>Pw%cO|KsJH@K6|x+9r!-lCtmZmav} zC+|4VB_P&$DBadAd=Kvr{@g$R zzB&^KMbQ_UStaze9O5z+ zcCp4X{z%oXd!A?i-v9eS(S(l&|BD{JJ7Ys2*M=Xt7ygP1ZjTSRGtcCA>)pTS_x(NY zy)6|OQX7gG`wZ6^L*XaJejwfnV#@2|N8I5{=dI%+~taM%^zks>sg*I2xR;eH|N@W z6aW9)SuJiYil39ZV+Dh+t==W|7m@D2*Dxe54Zg2lx8LYt>KyA^lP#r}GMv80CcE$H zd-3n-b1G|Z%=`Od<9+5eYkqxa`28jSJzuQE`ujKMRsH{w*{x@J{j%|Hrk1_33r}B~ zP-S~q{KJ-@@3%x2taRV_H}ct>?@vNSrilDZ@`D9`T)b3g(L{_%JS$ z%-hG*a(1@8GS`JEJK|nv07dgHbXj-oVL0r{dLp=iQ{+MaOu;T|%UkK;4I36SE@3Vf z=UTu}zH$B*rYAd@G!Cq_6@8Gc`nRl7+>Yt1R>OZbjZc^V?mu*;pyt`-%*=hg) literal 0 HcmV?d00001 diff --git a/static/docs/nes.png b/static/docs/nes.png new file mode 100644 index 0000000000000000000000000000000000000000..ff597e1e3b06e277714bb0b6f8f1b6149c445ba0 GIT binary patch literal 1017 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5K5#Gr$%L=Ea~K$y4|uvbhE&XXd-q`A?En$h z051=9&1T!$00!?{3%YcIc$}3JpPzZab1|W|x8>{KFZb-z?F<#pHYa83)yRsnj z7!2mbFTece&yULOnNhzbbEA&8H%o0}SiAn`srRmolOpXVt_|M(=fq?G)!VOsk7S%A zS;IQx?E%x*4NNMVYm}mwm;Ic0cv(E-C!l!5{#Zsg9f#FIr~7UGRq!5oq3!TKYbWn4 z=Zd7RUZC>po%Vb8&bb%2Y04jVK*3k4#>p*Imy?sr6?fhl`KObKEo0ES#lgO52 z#;DEzj$Qmzcj)k12G+NwkJkJD2XZE_WiSPDs&eU?J>u=O;?sEm4)l0w2mB4x;YrS^-YUcOr-*4VrYX5M0 znYM%PZ?OkOr&I4-7fGl*J@I&ULyCw4W81d(Q{NYzz9y>h`#0|zhLbJo%Wh~m8141{ zBY4lD_;m6jhR0$L&c9z@?05Lhw|fi!e>WEC|Nj4ZviEzS)X6D22d=-!f78Iklk%O( zN7!EX!1TArD5%)Fvc78y^wGvx3t_eOT zMH3b>@9pno>WOY}zRNbZUhq%F{ogY{_BTryt^KkdWb%@PU(w$k)XklL%L;2d7(J|f zdx=q-L0SC4Deb~5&s81XGR^s4`_E65f%QdQ;07iY;kuREm=-Y9o-R1u-6X0o^MiNk z#=wS@L&Cv1KsS6iA|lP|p=M)v)Qxcxr@s$%rEdP>UVG+y9|OB-)B^kZz;}nH$sKm= zo%S#P&vd2`F*z?*2gWrF5sZ1CL^8guJjWZyRuJ&e-#hQWPDWW(eH@>b%|!Eg?QEwMOqT& z4?bLG*W|pMuaqU$QE}lqhZhs3B>&)QX^A-)zQ93Y^_JCJTYIX~@41&U2(SG0H>)as z?Q!$fS7)Wk?AR;2LXkZ$Z1vZ_e;-dQ+g!r;!eT+gzX$p$HBKdEPLoevJbV3Fnv8eJ z3kRTp*@ee7R)6|;{IHyNtBB!3!#lo=S%nIAidOtDg3mj@_K){EDYxsh?U&a}uHVjN z`en6!+iIo~LB?HSPa{0~{_QWGx>$IDzb(&E<E4jF!}d&)g{kN&%a&xn|;?5 zhS+sQI$8nte`20$>}r>5+wFN&`I}RvhR&|`y2^h`&(Ch(Tc*yO7r*3P}+)O1a5m(_*zw+s0>@8xWpeYR}g%eE&A zH{6l?_4Ft2g7TxuGa3Ip+qpGXbir}Xz0ZGiyu2oSOK#Vr-xvBhHY_ho`G|M8EU zfyUp9cn;tF{`PR3yS-`xKkw6H@1D+J|8;6p`@6@#C-0g5*w*2;^KrpU?~~P*Vqcp( zzg_stFn8DV Date: Fri, 17 Jul 2026 18:43:17 +0800 Subject: [PATCH 6/6] =?UTF-8?q?feat(static):=20bun=20run=20play=20?= =?UTF-8?q?=E2=80=94=20build=20+=20launch=20any=20game=20on=20any=20consol?= =?UTF-8?q?e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gba/gb open in the Homebrew mGBA.app; nes serves a local jsnes web player (same core as the E2E harness), so seeing the NES build needs no installs. Co-Authored-By: Claude Fable 5 --- static/compiler/play.ts | 113 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 static/compiler/play.ts diff --git a/static/compiler/play.ts b/static/compiler/play.ts new file mode 100644 index 0000000..9d14e2f --- /dev/null +++ b/static/compiler/play.ts @@ -0,0 +1,113 @@ +#!/usr/bin/env bun +// static/compiler/play.ts — build a game and play it. +// +// bun run play [game] [target] +// game boardroom | smoke | path/to/game.ts (default: boardroom) +// target gba | gb | nes (default: gba) +// +// gba/gb open in the windowed mGBA.app (Homebrew). nes serves a local jsnes +// player (the same core the E2E harness uses) and opens your browser — +// no extra emulator install needed. +// +// Controls: d-pad walks, A talks/advances (mGBA: X key; browser: X), +// B = mGBA Z / browser Z, up/down move menu cursors. + +import { $ } from "bun"; +import { existsSync } from "node:fs"; +import { join, resolve } from "node:path"; +import { TARGETS, type TargetName } from "../spec/isa.ts"; +import { compileGame } from "./index.ts"; +import { buildGba } from "./targets/gba.ts"; +import { buildGb } from "./targets/gb.ts"; +import { buildNes } from "./targets/nes.ts"; + +const ROOT = join(import.meta.dir, ".."); +const GAMES: Record = { + boardroom: join(ROOT, "games", "boardroom", "game.ts"), + smoke: join(ROOT, "test", "smoke", "game.ts"), +}; + +const [gameArg = "boardroom", targetArg = "gba"] = process.argv.slice(2); +const target = targetArg as TargetName; +if (!TARGETS[target]) { + console.error(`unknown target "${targetArg}" (gba | gb | nes)`); + process.exit(2); +} +const entry = GAMES[gameArg] ?? resolve(gameArg); +if (!existsSync(entry)) { + console.error(`no such game "${gameArg}" (boardroom | smoke | path/to/game.ts)`); + process.exit(2); +} +const name = gameArg in GAMES ? gameArg : "game"; +const rom = join(ROOT, "dist", `${name}${TARGETS[target].ext}`); + +console.log(`building ${name} for ${target}...`); +const out = await compileGame(entry, target); +if (target === "gba") await buildGba(out.linked, rom); +else if (target === "gb") await buildGb(out.linked, rom); +else await buildNes(out.linked, rom); +console.log(` ${rom}`); + +if (target === "gba" || target === "gb") { + const prefix = (await $`brew --prefix mgba`.text()).trim(); + const apps = [...new Bun.Glob("**/mGBA.app").scanSync({ cwd: prefix, onlyFiles: false })]; + if (apps.length === 0) { + console.error("mGBA.app not found — brew install mgba, or open the ROM in any emulator:"); + console.error(` ${rom}`); + process.exit(1); + } + await $`open -n ${join(prefix, apps[0])} --args ${rom}`; + console.log("mGBA launched. Keys: arrows = d-pad, X = A, Z = B."); +} else { + const jsnesPath = join(ROOT, "node_modules", "jsnes", "dist", "jsnes.min.js"); + const romBytes = await Bun.file(rom).arrayBuffer(); + const page = `${name}.nes — Pocket Static + + +

    arrows = d-pad   X = A   Z = B   enter = start   shift = select

    + +`; + const server = Bun.serve({ + hostname: "127.0.0.1", + port: 0, + fetch(req) { + const path = new URL(req.url).pathname; + if (path === "/") return new Response(page, { headers: { "content-type": "text/html" } }); + if (path === "/jsnes.min.js") return new Response(Bun.file(jsnesPath)); + if (path === "/rom") return new Response(romBytes); + return new Response("not found", { status: 404 }); + }, + }); + const url = `http://127.0.0.1:${server.port}/`; + console.log(`jsnes player at ${url} (ctrl-c to stop)`); + if (!process.env.PLAY_NO_OPEN) await $`open ${url}`; +}