Merge pull request 'docs: stop telling people to use the retired xenia-rs' (#43) from docs/retire-xenia-rs-instructions into main
Reviewed-on: #43
This commit is contained in:
@@ -80,7 +80,7 @@ pub fn name_hash(name: &str) -> u32 {
|
|||||||
|
|
||||||
/// Confirmed TOC key path schemes, as `(prefix, suffix)` around an entry's
|
/// Confirmed TOC key path schemes, as `(prefix, suffix)` around an entry's
|
||||||
/// internal identity string. The key is `name_hash("<prefix><id><suffix>")`
|
/// internal identity string. The key is `name_hash("<prefix><id><suffix>")`
|
||||||
/// (backslash separators). Recovered by RE — see `xenia-rs/RE_SYMBOLS.md`.
|
/// (backslash separators). Recovered by RE — see `docs/re/RE_SYMBOLS.md`.
|
||||||
///
|
///
|
||||||
/// - `("", ".tbl")` — root manifests / DefTables resource entries (`files.tbl`).
|
/// - `("", ".tbl")` — root manifests / DefTables resource entries (`files.tbl`).
|
||||||
/// - `("unit\\", ".tbl")` — craft/ship definitions (`unit\UN_f001_…_EX5.tbl`).
|
/// - `("unit\\", ".tbl")` — craft/ship definitions (`unit\UN_f001_…_EX5.tbl`).
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ impl VfsDevice for DiscImageDevice {
|
|||||||
|
|
||||||
fn list_root(&self) -> Result<Vec<VfsEntry>, VfsError> {
|
fn list_root(&self) -> Result<Vec<VfsEntry>, VfsError> {
|
||||||
// Return the full flattened tree. Callers of this method are
|
// Return the full flattened tree. Callers of this method are
|
||||||
// dump/debug paths (see `xenia-rs dumpxiso`), which want to see
|
// dump/debug paths (the retired `xenia-rs dumpxiso` was one), which want to see
|
||||||
// every file — root-only was the old flat-enumeration bug.
|
// every file — root-only was the old flat-enumeration bug.
|
||||||
Ok(self.entries.clone())
|
Ok(self.entries.clone())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# `xenia-analysis` schema reference
|
# `sylph-xexdb` schema reference
|
||||||
|
|
||||||
Authoritative documentation for the DuckDB tables and SQL views produced by
|
Authoritative documentation for the DuckDB tables and SQL views produced by
|
||||||
`xenia-rs dis --db sylpheed.db`. Track schema changes here alongside any
|
`sylph-xexdb dis <xex|iso> --db sylpheed.db --analyze sql`. Track schema changes here alongside any
|
||||||
update to the `db_schema_golden` test fixture.
|
update to the `db_schema_golden` test fixture.
|
||||||
|
|
||||||
The base + disasm tables (`metadata`, `sections`, `imports`, `functions`,
|
The base + disasm tables (`metadata`, `sections`, `imports`, `functions`,
|
||||||
@@ -162,7 +162,7 @@ or `XENIA_PROBE_DB`; default is `sylpheed.db` next to the .iso when present.
|
|||||||
Resolution happens BEFORE guest exec begins, so it cannot affect the
|
Resolution happens BEFORE guest exec begins, so it cannot affect the
|
||||||
lockstep digest.
|
lockstep digest.
|
||||||
|
|
||||||
See `crates/xenia-analysis/src/lookup.rs`.
|
See `crates/sylpheed-xexdb/src/lookup.rs`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -496,7 +496,7 @@ fn cmd_extract(path: &str, output_dir: Option<&str>, db_path: Option<&str>) -> R
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write base tables to SQLite if requested
|
// Write base tables to DuckDB if requested
|
||||||
if let Some(db) = db_path {
|
if let Some(db) = db_path {
|
||||||
let disasm_info = sylpheed_xexdb::formatter::DisasmInfo {
|
let disasm_info = sylpheed_xexdb::formatter::DisasmInfo {
|
||||||
image_base: base,
|
image_base: base,
|
||||||
@@ -871,7 +871,7 @@ fn cmd_dis(
|
|||||||
xex_header: Some(&header),
|
xex_header: Some(&header),
|
||||||
};
|
};
|
||||||
|
|
||||||
// SQLite database output (base + ingest + analyze layers)
|
// DuckDB database output (base + ingest + analyze layers)
|
||||||
if let Some(db) = db_path {
|
if let Some(db) = db_path {
|
||||||
info!(db = %db, analyze = ?analyze, "writing database");
|
info!(db = %db, analyze = ?analyze, "writing database");
|
||||||
let mut w = sylpheed_xexdb::DbWriter::open_fresh(std::path::Path::new(db))?;
|
let mut w = sylpheed_xexdb::DbWriter::open_fresh(std::path::Path::new(db))?;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
//! DuckDB writer for xenia-rs.
|
//! DuckDB writer for `sylph-xexdb`.
|
||||||
//!
|
//!
|
||||||
//! Layered, streaming writes shared by `extract`, `dis`, and `exec`.
|
//! Layered, streaming writes shared by `extract`, `dis`, and `exec`.
|
||||||
//! Each command's output is a superset of the previous:
|
//! Each command's output is a superset of the previous:
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ pub fn write_asm(
|
|||||||
out,
|
out,
|
||||||
"; ============================================================================"
|
"; ============================================================================"
|
||||||
)?;
|
)?;
|
||||||
writeln!(out, "; Xbox 360 Disassembly — generated by xenia-rs")?;
|
writeln!(out, "; Xbox 360 Disassembly — generated by sylph-xexdb")?;
|
||||||
if let Some(name) = info.original_pe_name {
|
if let Some(name) = info.original_pe_name {
|
||||||
writeln!(out, "; Original PE: {name}")?;
|
writeln!(out, "; Original PE: {name}")?;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ This mirrors the project method — *measure the oracle, never infer; refute bef
|
|||||||
|
|
||||||
- ✅ Allowed: behaviour descriptions, field offsets/types, formulas, state machines,
|
- ✅ Allowed: behaviour descriptions, field offsets/types, formulas, state machines,
|
||||||
observed input→output pairs, and **references** to the original by address
|
observed input→output pairs, and **references** to the original by address
|
||||||
(`sub_821B68C0`) or to `xenia-rs/sylpheed.db`.
|
(`sub_821B68C0`) or to `sylpheed.db`.
|
||||||
- ❌ Forbidden here and in `crates/`: pasted decompiled C/C++ or verbatim disassembled
|
- ❌ Forbidden here and in `crates/`: pasted decompiled C/C++ or verbatim disassembled
|
||||||
function bodies presented as the thing to reimplement. Cite the address; describe the
|
function bodies presented as the thing to reimplement. Cite the address; describe the
|
||||||
behaviour in your own words. Disassembly is a tool for *understanding*, not a source to copy.
|
behaviour in your own words. Disassembly is a tool for *understanding*, not a source to copy.
|
||||||
@@ -90,18 +90,21 @@ Use the templates: [`_TEMPLATE.function.md`](_TEMPLATE.function.md),
|
|||||||
Everything joins on the **guest virtual address (PC)** — code addresses are fixed by the
|
Everything joins on the **guest virtual address (PC)** — code addresses are fixed by the
|
||||||
XEX load, identical across our emulator and canary.
|
XEX load, identical across our emulator and canary.
|
||||||
|
|
||||||
- **Static (cheap, try first):** `xenia-rs/sylpheed.db` (DuckDB: 25 481 functions, xrefs,
|
- **Static (cheap, try first):** `sylpheed.db` at the repository root (DuckDB: 25 676
|
||||||
strings, vtables, imports). Query with `xenia-rs/zq.py` — `zq.py grep <str>`,
|
functions, xrefs, strings, vtables, imports; git-ignored — build it with
|
||||||
|
`sylph-xexdb dis <ISO> --db sylpheed.db --analyze sql --quiet`, then re-stamp names with
|
||||||
|
`tools/apply_re_symbols.sql`). Query with `tools/zq.py` — `zq.py grep <str>`,
|
||||||
`zq.py xref <addr>`, `zq.py dis <lo> <hi>`, `zq.py fn <pc>`. Entry points are usually a
|
`zq.py xref <addr>`, `zq.py dis <lo> <hi>`, `zq.py fn <pc>`. Entry points are usually a
|
||||||
**string** (`zq.py grep MSG_DEMO`) or an **import** (movie/XMA API) xref'd back to the loader.
|
**string** (`zq.py grep MSG_DEMO`) or an **import** (movie/XMA API) xref'd back to the loader.
|
||||||
- **Dynamic (when static is ambiguous):** run `xenia-rs` with its probe suite —
|
- **Dynamic (when static is ambiguous):** Xenia Canary, below. The `xenia-rs` probe suite
|
||||||
`--pc-probe` / `--audit-pc-probe-hex` (fires at block entry), `--mem-watch` (mid-block
|
this bullet used to recommend (`--pc-probe`, `--mem-watch`, `--lr-trace`,
|
||||||
reads/writes of a VA), `--lr-trace` (call/return chains), `--trace-instructions`,
|
`--dump-addr`) went with that emulator when it was retired on 2026-09-16. For static
|
||||||
`--dump-addr` (read guest memory). These already exist; prefer them over hacking canary.
|
`.rdata` reads that `--dump-addr` served, read the `.pe` directly: it is a flat VA dump,
|
||||||
|
file offset = `VA − 0x82000000`.
|
||||||
- **Oracle (correctness ground truth):** canary — the **Wine cross-build**
|
- **Oracle (correctness ground truth):** canary — the **Wine cross-build**
|
||||||
`xenia-canary/build-cross/bin/Windows/Debug/xenia_canary.exe` (the native Linux ELF
|
`xenia-canary/build-cross/bin/Windows/Debug/xenia_canary.exe` (the native Linux ELF
|
||||||
**crashes / does not run** — do not use it). This is the only emulator that reaches the
|
**crashes / does not run** — do not use it). This is the only emulator that reaches the
|
||||||
in-game menu; our `xenia-rs` never got past the intro video. Use canary to *observe output*
|
in-game menu; our retired `xenia-rs` never got past the intro video. Use canary to *observe output*
|
||||||
(capture its framebuffer for texture colours), not usually to instrument code — though its
|
(capture its framebuffer for texture colours), not usually to instrument code — though its
|
||||||
`build-cross` toolchain does compile, so small C++ probes + rebuild are possible when needed.
|
`build-cross` toolchain does compile, so small C++ probes + rebuild are possible when needed.
|
||||||
Run **muted, one emulator process at a time**, point it at the real ISO (not the symlink).
|
Run **muted, one emulator process at a time**, point it at the real ISO (not the symlink).
|
||||||
|
|||||||
@@ -453,9 +453,9 @@ rest are not in any stage roster table and need a different lever.
|
|||||||
```bash
|
```bash
|
||||||
cargo run --release -q -p sylpheed-formats --example challenge_map -- <disc-root>
|
cargo run --release -q -p sylpheed-formats --example challenge_map -- <disc-root>
|
||||||
cargo run --release -q -p sylpheed-formats --example challenge_screen -- <disc-root>
|
cargo run --release -q -p sylpheed-formats --example challenge_screen -- <disc-root>
|
||||||
python3 xenia-rs/zq.py dis 0x82184df0 0x82184e30 # the three-way section switch
|
python3 tools/zq.py dis 0x82184df0 0x82184e30 # the three-way section switch
|
||||||
python3 xenia-rs/zq.py dis 0x82185ed0 0x82185f10 # the same switch, second site
|
python3 tools/zq.py dis 0x82185ed0 0x82185f10 # the same switch, second site
|
||||||
python3 xenia-rs/zq.py dis 0x82189860 0x821899f0 # the challenge availability gate
|
python3 tools/zq.py dis 0x82189860 0x821899f0 # the challenge availability gate
|
||||||
```
|
```
|
||||||
|
|
||||||
### 5.4 ✅ CLOSED — the exact pairing, read from the record's own fields
|
### 5.4 ✅ CLOSED — the exact pairing, read from the record's own fields
|
||||||
|
|||||||
@@ -177,6 +177,6 @@ made rather than after.
|
|||||||
```bash
|
```bash
|
||||||
python3 tools/xach_dump.py "<disc>/…/Project Sylpheed ….pe"
|
python3 tools/xach_dump.py "<disc>/…/Project Sylpheed ….pe"
|
||||||
cargo run --release -q -p sylpheed-formats --example achievements_map -- <disc-root>
|
cargo run --release -q -p sylpheed-formats --example achievements_map -- <disc-root>
|
||||||
python3 xenia-rs/zq.py dis 0x8218f9a8 0x8218fa60 # the requirement walk
|
python3 tools/zq.py dis 0x8218f9a8 0x8218fa60 # the requirement walk
|
||||||
python3 xenia-rs/zq.py dis 0x8218f888 0x8218f990 # the XACHIEVEMENT_DETAILS scan
|
python3 tools/zq.py dis 0x8218f888 0x8218f990 # the XACHIEVEMENT_DETAILS scan
|
||||||
```
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user