Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .agents/TOOLING.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,12 @@ generation and reading as above. Historical dossiers keep their original
command transcripts; they are not instructions to resurrect aliases. No retired
TypeScript entry points or invented family or wave commands.

Overlay scoring selects the game explicitly: `alchemy score RESOURCE:ADDRESS
--target tla` reads TLA's register, reviewed boundaries and canonical English
ROM; omit `--target` for TBS. Arbitrary `--rom` overrides cannot substitute a
different reference. Selecting a member of an exact overlay unit still verifies
the complete unit. Default score work directories are under ignored `out/score/`.

For another GBA game, carry portable decoding, comparison, bounded recovery and
compiler invocation plus its minimal build integration, not Golden Sun
ownership, asset offsets or agent machinery.
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ In Golden Sun, lighting the four Elemental Lighthouses releases Alchemy upon the

The two games share much of the same code, so Alchemy recovers them side by side.

## Status: ☀️ 55.96% · ⚓️ 0.20%
## Status: ☀️ 55.96% · ⚓️ 0.28%

![ROM contents](<games/THE BROKEN SEAL/PREVIEW/TBS-EN-ROM.SVG?v=68da166347fd2c0c>)
![ROM contents](<games/THE BROKEN SEAL/PREVIEW/TBS-EN-ROM.SVG?v=cb0a2da08d7a1ddd>)

**DONE** measures recovered code: byte-exact C and evidenced permanent
assembly, divided by each game's audited executable bytes. ☀️ is The Broken
Expand Down
55 changes: 44 additions & 11 deletions TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,30 @@ that finishes it.
Reach 60% of the fixed executable inventory. Read the current verified count
with `make progress`; do not maintain a second score in this task list.

- Recheck and adopt what the stopped recovery run found. Exact:
`main:080fa514` (72 bytes) and `main:08092878` (172 bytes). Exact at 54 bytes
each: `resource_39e:02000104` and `resource_3c9:02000104`, the `Effect_Move`
family; eleven more copies differ by one halfword, so the family wants one
shared source with instances.
- Rebuild coverage with `make coverage`, then rank unresolved owners from it,
twins of exact owners first.
- Recount the owners still parked because their only match needed a
scheduling trick. The five overlay copies of `0809a65c` still hold a
`do { } while (0)` barrier. `SpawnConfiguredEffect` (23 copies) stays a
recorded compiler gap unless new evidence reopens it.
- On `cursor/tbs-to-60`, `Effect_Move` is adopted. Agents: if an owner is not
exact inside a 10-minute window, park it under Stubborn and switch.

### Stubborn (hard-pass later)
- `main:080ebe94` EffectSlot_SetPosition (18 B) — 1 halfword off; bounce.
- `main:08013300` Resource_GetTableEntry (12 B) — instruction-selection wall; bounce.


- Prefer never-drafted TLA regions over near-miss halfword floors.


Parked for a stronger model. Agents must not burn a 10-minute window here.

- `main:081c342c` Audio_EmptyCallback (2 B) — scores exact with `--size 2`, but lies outside audited main executable ranges in metrics/executable.json; bounce until ranges include it.
- `main:0802d2b0` Curve_StepAtDifferencePosition (48 B) — scheduling-floor on TLA; bounce. (LerpTwoSamples / LerpTwoSamplesB / StepAtSummedPosition adopted via TLA `pop {pc}` spelling.)

- `main:080fa514` (72 B), `main:08092878` (172 B) — still non-exact.
- `resource_3bd:020013f8` (6220 B) — scheduling-floor, 2 halfwords.
- Overlay `0809a65c` `do{}while(0)` copies; `SpawnConfiguredEffect` compiler gap.
- Recorded `copy_versus_rematerialise` / `instruction-selection` walls — stop.
- TLA Venus `resource_64d:02000510` — lifter repair required (see below).
- TLA field-operand floors `08025bb4` / `08025c5c` / `08025f9c` — already parked.
- TLA `script-interpreter-control` beyond `main:08024c50` — layout/bindings
differ from TBS; do not thrash WaitForEvent at wrong addresses.

### Reconstruct The Lost Age

Expand All @@ -30,6 +43,26 @@ and 1,043,350 across all 114 overlays. Grow verified source coverage against
that fixed inventory; its denominator is not a claim of a complete TLA build.
Credit only ranges meeting [COMPLETION](.agents/COMPLETION.md).

- Field-script operands at `08025b58–08026320`: 38 exact owners (1,820 bytes)
adopted as `tla-script-operands` from `FIELD/COMMON/SCRIPT/OPERANDS.C`.
Three 2-halfword scheduling floors remain uncredited at `08025bb4` (46),
`08025c5c` (46), and `08025f9c` (52); do not repeat the five parked source
hypotheses or change compiler flags. They stay in the C for layout only.

- Venus approach event `resource_64d:02000510` has a reviewed 5,404-byte extent.
Its loaded reference ends at `02009a2c`, including the last literal. The
private candidate at `out/tla-en/overlay-64d-scene/SCENE.C` scores 5,360
emitted bytes, 2,293 differing halfwords and 285 aligned wrong instructions;
no bytes adopted. Calls were bound from reference sites, not candidate
offsets. Repair the lifter before repeating this scene family: a fresh
`psynergy decompile` duplicates actor lookups, appends two spurious calls
after the event-end call, and introduces `volatile` on ordinary actor RAM
(`tools/psynergy/src/lift.rs` byte-mask emission). The private candidate
removes those errors. Its first remaining mismatch is constant 257 loaded
from a pool versus `mov 2; add 255`; the existing compiler synthesizes such
constants during reload, so equivalent constant spellings are not a new
search axis. Compiler, flags and credit remain unchanged.

### Alchemy builds, Psynergy reads

The law in [TOOLING](.agents/TOOLING.md). Psynergy still holds operations that
Expand Down
Loading