From 573ff362e4982694e0f9e5b5d2abd1cdf0598e89 Mon Sep 17 00:00:00 2001 From: lyrathorpe Date: Fri, 10 Jul 2026 10:59:10 +0100 Subject: [PATCH 1/4] memory: add SIBO Workabout MX project state for cross-session resume --- .../memory/sibo_workabout_mx_scanner.md | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 home/claude/memory/sibo_workabout_mx_scanner.md diff --git a/home/claude/memory/sibo_workabout_mx_scanner.md b/home/claude/memory/sibo_workabout_mx_scanner.md new file mode 100644 index 0000000..40aa1d4 --- /dev/null +++ b/home/claude/memory/sibo_workabout_mx_scanner.md @@ -0,0 +1,24 @@ +--- +name: sibo-workabout-mx-scanner +description: State of the Psion Workabout MX reverse-engineering / barcode-inventory project and how to resume it +metadata: + node_type: memory + type: project + originSessionId: 74de014e-9cf4-47f6-92f4-c34197ac1858 +--- + +Long-running project (July 2026) reverse-engineering the **Psion Workabout MX** (SIBO OS, NEC V30MX, TopSpeed C) to build a barcode **inventory demo** (scan UPC → DBF database file; add stock, consume by a quantity unit) and, alongside, **complete device programming documentation**. Repo: Gitea **lyrathorpe/sibo-playground**, working branch **`feat/inventory-phase1-scan`** (unmerged). Gitea needs hand-off / the contents API for pushes — see [[git-network-ops]]; [[git-conventions]] for branch/PR rules. + +**Committed on the branch (durable, survive reboot):** +- `docs/reference/00-08` + index — the SIBO/MX programming reference (building apps, system/OS, I/O devices, PLIB core, file system & DBF, UI, hardware, and RE'd boot/OS-call internals). +- `code/inventory/` — app scaffold: `upc.c/.h` (UPC-A check-digit validation, correct), `bcode.c/.h`, `scan.c` (Phase-1 diagnostics), `README.md`, **`SCANNER-API.md`** (all scanner findings), **`CONTINUATION.md`** (the on-device debugging procedure to finish). +- `docs/mx-re/toolchain-and-plan.md` — the RE toolchain. +- The **ROM `w2mx_v7.20f_eng.bin`** and the full **SDK + HDK** (manuals as `docs/*.txt`; headers/libs/`bar*.ldd` under `code/SIBOSDK/`; HDK under `code/HDK/`) are on the branch. `/tmp/claude/sibo/` working files (ROM slices, MAME rom dir, Ghidra/decomp output) are transient and reproducible from the toolchain doc. + +**Scanner — key result:** the integral laser is driven as an **OO library object** in `SCANNER.DYL` (category token **`oscanner`**) via `p_getlibh` → `p_newsend`/`f_newsend` → `p_send`, over **LIBMANAGER (INT 0x84)** / **MESSMANAGER (INT 0x83)** — NOT raw device I/O. Confirmed on the physical device: `p_open("WL2:D")` + control ops **6** then **7** (`p_iow(chan,6); p_iow(chan,7)`) fire the laser to a good decode (green LED). Default Symbol2 11-byte param block: `04 3f 01 15 06 04 1e 80 0d 0a 06` (decoded output is CR/LF-terminated). Dead ends (do not retry): raw `TTY:D` reads, and the wand `BAR:` / `bar*.ldd` decoders (probe expansion slots → `-41`). + +**Blocked on / next step:** the OO **message ordinals + parameter structs** for init / set-params / trigger / read. OLIB assigns ordinals dynamically across the class hierarchy (base classes in `olib`/`hwim`), so they resolve only at runtime — capture them with the **SIBO Debugger on the physical device** (remote debug over serial; it supports breakpoints inside DYLs). MAME cannot inject a barcode, so the last mile must be on hardware. Full step-by-step is in `code/inventory/CONTINUATION.md`. + +**RE toolchain (reproducible):** the ROM is MAME machine **`psionwamx`**; run its debugger headless via `xvfb-run -a mame psionwamx -rompath roms -debug -debugscript CMDS -sound none -seconds_to_run N` (MAME lua input injection into the keyboard matrix does NOT work headless — a known limitation). Static: **radare2** (16-bit x86). Decompile: **Ghidra headless** (processor `x86:LE:16:Real Mode`, a Java GhidraScript — Ghidra 12 has no bundled Python). Get MAME/radare2/Ghidra via `nix-shell -p ...`. Details in `docs/mx-re/toolchain-and-plan.md`. + +**Fallback to deliver value now:** Phase 2 (the DBF inventory: add stock, consume by quantity) can be built with keyboard UPC entry against `docs/reference/05-filesystem-dbf.md`, dropping the scanner in behind the same interface once retrieval is finished. [[docs-keep-updated]] -- 2.54.0 From 840b35aa6e422f76dbee8a61646af5171201bfd4 Mon Sep 17 00:00:00 2001 From: lyrathorpe Date: Fri, 10 Jul 2026 10:59:11 +0100 Subject: [PATCH 2/4] memory: index the SIBO Workabout MX project memory --- home/claude/memory/MEMORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/home/claude/memory/MEMORY.md b/home/claude/memory/MEMORY.md index 3210df4..ebc89c5 100644 --- a/home/claude/memory/MEMORY.md +++ b/home/claude/memory/MEMORY.md @@ -9,3 +9,4 @@ - [Review and comments workflow](workflow_review_and_comments.md) — show PR body and non-trivial Jira comments before posting; terse IaC code comments; PR body content rules - [Sandbox prompts](feedback_sandbox_prompts.md) — don't prompt for sandbox-disable or routine read-only shell ops; broaden permissions instead - [Dev clusters disposable](dev_clusters_disposable.md) — Lyra's dev clusters are recreatable; mutate/break freely, no confirmation needed +- [SIBO Workabout MX project](sibo_workabout_mx_scanner.md) — RE + barcode-inventory project state; scanner is an OO DYL object (oscanner), blocked on on-device ordinal capture; resume via code/inventory/CONTINUATION.md -- 2.54.0 From 863e9019ac6246f6f2fe4b6aebb69d052ef16fc4 Mon Sep 17 00:00:00 2001 From: lyrathorpe Date: Fri, 10 Jul 2026 11:37:03 +0100 Subject: [PATCH 3/4] memory: resolve MEMORY.md conflict (rebase onto main incl. nix-shell-tooling entry) --- home/claude/memory/MEMORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/home/claude/memory/MEMORY.md b/home/claude/memory/MEMORY.md index ebc89c5..d353a62 100644 --- a/home/claude/memory/MEMORY.md +++ b/home/claude/memory/MEMORY.md @@ -9,4 +9,5 @@ - [Review and comments workflow](workflow_review_and_comments.md) — show PR body and non-trivial Jira comments before posting; terse IaC code comments; PR body content rules - [Sandbox prompts](feedback_sandbox_prompts.md) — don't prompt for sandbox-disable or routine read-only shell ops; broaden permissions instead - [Dev clusters disposable](dev_clusters_disposable.md) — Lyra's dev clusters are recreatable; mutate/break freely, no confirmation needed +- [Nix shell tooling](nix_shell_tooling.md) — any nixpkgs tool runs ad hoc via `nix run`/`nix shell nixpkgs#`; a missing command is never a dead end - [SIBO Workabout MX project](sibo_workabout_mx_scanner.md) — RE + barcode-inventory project state; scanner is an OO DYL object (oscanner), blocked on on-device ordinal capture; resume via code/inventory/CONTINUATION.md -- 2.54.0 From 967b783fa43e2f7b62fc7ac76d324f6cc2fb3b2a Mon Sep 17 00:00:00 2001 From: lyrathorpe Date: Fri, 10 Jul 2026 11:41:34 +0100 Subject: [PATCH 4/4] memory: place SIBO index entry mid-file to avoid EOF-append conflict with main --- home/claude/memory/MEMORY.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/home/claude/memory/MEMORY.md b/home/claude/memory/MEMORY.md index d353a62..1052d2f 100644 --- a/home/claude/memory/MEMORY.md +++ b/home/claude/memory/MEMORY.md @@ -5,9 +5,8 @@ - [Git commit signing](git_commit_signing.md) — signs in-sandbox via ssh-agent (allowAllUnixSockets + inlined pubkey) - [Git check state first](git_check_state.md) — always check branch/status/divergence before git work; Lyra edits repos between sessions - [Keep docs updated](docs_keep_updated.md) — update docs in the same pass as code/config changes; stale docs are a defect +- [SIBO Workabout MX project](sibo_workabout_mx_scanner.md) — RE + barcode-inventory project state; scanner is an OO DYL object (oscanner), blocked on on-device ordinal capture; resume via code/inventory/CONTINUATION.md - [Jira tooling](jira_tooling.md) — comments are Markdown not wiki; transitions may need assignee; link direction; WSP transition IDs - [Review and comments workflow](workflow_review_and_comments.md) — show PR body and non-trivial Jira comments before posting; terse IaC code comments; PR body content rules - [Sandbox prompts](feedback_sandbox_prompts.md) — don't prompt for sandbox-disable or routine read-only shell ops; broaden permissions instead - [Dev clusters disposable](dev_clusters_disposable.md) — Lyra's dev clusters are recreatable; mutate/break freely, no confirmation needed -- [Nix shell tooling](nix_shell_tooling.md) — any nixpkgs tool runs ad hoc via `nix run`/`nix shell nixpkgs#`; a missing command is never a dead end -- [SIBO Workabout MX project](sibo_workabout_mx_scanner.md) — RE + barcode-inventory project state; scanner is an OO DYL object (oscanner), blocked on on-device ordinal capture; resume via code/inventory/CONTINUATION.md -- 2.54.0