diff --git a/MANUAL.md b/MANUAL.md index 8abd49d..c3372ac 100644 --- a/MANUAL.md +++ b/MANUAL.md @@ -521,11 +521,11 @@ hunks -m frontier cg hunk3:LAB_3_2649E --code Output: ```text === Incoming Callers (up to depth 2) === - ◄── hunk5:LAB_5_2A71A (+2A79E, via jsr 402(a5)) - ◄── hunk5:LAB_5_24BE8 (+24EB8, via jsr 498(a5)) + ◄── hunk5:LAB_5_2A71A (+2A79E, via jsr _LVO_LAB_3_2649E(a5)) + ◄── hunk5:LAB_5_24BE8 (+24EB8, via jsr _LVO_LAB_5_2A71A(a5)) ◄── hunk6:LAB_6_0020C (+0020C, via jmp) ◄── hunk6:LAB_6_001AC (+001AC, via jmp) - ◄── hunk9:LAB_9_068F8 (+069A2, via jsr 402(a5)) + ◄── hunk9:LAB_9_068F8 (+069A2, via jsr _LVO_LAB_3_2649E(a5)) === Target Function === hunk3:LAB_3_2649E [UNRENAMED] [+2649E] — 15 insts, 56 bytes [XDEF] @@ -544,16 +544,16 @@ LAB_3_2649E: +264D2 rts === Caller Site Snippets === - From hunk5:LAB_5_2A71A (+2A79E, via jsr 402(a5)): + From hunk5:LAB_5_2A71A (+2A79E, via jsr _LVO_LAB_3_2649E(a5)): +2A792: move.w 12(a2),d0 +2A796: moveq #4,d1 +2A798: moveq #64,d2 - >> +2A79E: jsr 402(a5) ; -> hunk3:LAB_3_2649E + >> +2A79E: jsr _LVO_LAB_3_2649E(a5) ; -> hunk3:LAB_3_2649E +2A7A2: movem.l (a7)+,d7/a0-a4 ``` Notice how `--code` reveals: 1. `LAB_3_2649E` calls the Paula audio routine `LAB_3_0005E` (`HW: AUD0LCH..AUD3LCH`). -2. Every caller across `hunk5`, `hunk6`, and `hunk9` invokes it via `jsr 402(a5)`. +2. Every caller across `hunk5`, `hunk6`, and `hunk9` invokes it via `jsr _LVO_LAB_3_2649E(a5)` (offset `402`). 3. The caller snippet at `+2A79E` shows the exact register arguments (`d0` = pitch/period, `d1` = sound effect ID `< $0F`, `d2` = volume `64`). #### 4. Edit `src//*.asm` Directly & Track Bottom-Up Progress @@ -655,15 +655,15 @@ hunks -m frontier tui 2. Press `g`, type `+2503E` (or `hunk5:LAB_5_25036`), and press `Enter`. 3. Cursor lands on: ```text - +2503E jsr 498(a5) ; → hunk5:LAB_5_2A71A + +2503E jsr _LVO_LAB_5_2A71A(a5) ; → hunk5:LAB_5_2A71A ``` -4. Press `Enter` on that line: the TUI resolves `498(a5)` through the `hunk6` vector table and jumps directly to `LAB_5_2A71A` (`+2A71A`). -5. Press `x` on `LAB_5_2A71A`: the **XREFs** popup opens listing every direct and `jsr 498(a5)` caller across `hunk5`, `hunk6`, `hunk8`, and `hunk9`: +4. Press `Enter` on that line: the TUI resolves `_LVO_LAB_5_2A71A(a5)` (`498(a5)`) through the `hunk6` vector table and jumps directly to `LAB_5_2A71A` (`+2A71A`). +5. Press `x` on `LAB_5_2A71A`: the **XREFs** popup opens listing every direct and `jsr _LVO_LAB_5_2A71A(a5)` caller across `hunk5`, `hunk6`, `hunk8`, and `hunk9`: ```text - hunk5 +24EB8 VEC_CALL (in LAB_5_24E84) jsr 498(a5) - hunk5 +2503E VEC_CALL (in LAB_5_25036) jsr 498(a5) + hunk5 +24EB8 VEC_CALL (in LAB_5_24E84) jsr _LVO_LAB_5_2A71A(a5) + hunk5 +2503E VEC_CALL (in LAB_5_25036) jsr _LVO_LAB_5_2A71A(a5) hunk6 +0020C CODE_BRANCH (in LAB_6_0001A) jmp LAB_5_2A71A.l - hunk8 +007EE VEC_CALL (in LAB_8_007EA) jsr 498(a5) + hunk8 +007EE VEC_CALL (in LAB_8_007EA) jsr _LVO_LAB_5_2A71A(a5) ``` 6. Select any caller and press `Enter` to jump to it (automatically switching segments if in another hunk), or press `Backspace` / `-` to return. @@ -696,15 +696,15 @@ This guarantees zero symbol collisions across hunks (even when two hunks have la Emitted `; XREF:` comments above labels list the **enclosing caller label** and **instruction mnemonic** (deduplicated and wrapped at 4 callers per line), never synthetic memory addresses: - **Same-hunk reference:** `; XREF: LAB_0_00000 (beq.b), LAB_0_00046 (bsr.b)` - **Cross-hunk reference:** `; XREF: hunk5:LAB_5_27772 (addi.l)` -- **Jump-vector reference:** `; XREF: hunk5:LAB_5_24E84 (jsr 498(a5)), hunk6:LAB_6_0001A (jmp)` +- **Jump-vector reference:** `; XREF: hunk5:LAB_5_24E84 (jsr _LVO_LAB_5_2A71A(a5)), hunk6:LAB_6_0001A (jmp)` Every caller listed in `; XREF:` can be jumped to immediately in `src/hunk*.asm` via `rg "^