The ESR plugin provides an SC62015 (aka ESR-L) architecture for Binary Ninja.
Currently it only works as a crude disassembler, with the goal to lift all the instructions and create memory mapping for Sharp PC-E500 and Sharp Organizers.
Overall structure of instruction logic based on binja-avnera plugin by @whitequark.
Apache License 2.0.
Install dependencies using uv and run the checks:
# Install uv (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh
# or on macOS: brew install uv
# Install all dependencies and create virtual environment
uv sync --extra dev --extra pce500
# Run linting and formatting
uv run ruff check .
uv run ruff format .
# Run type checking
uv run pyright sc62015/pysc62015
# Run tests with coverage
FORCE_BINJA_MOCK=1 uv run pytest --cov=sc62015/pysc62015 --cov-report=term-missing --cov-report=xml
```
The CI workflow uploads coverage results to Codecov on each commit.
## CLI emulator (terminal LCD)
Run the Rust LLAMA core with a terminal-rendered LCD view:
```bash
cargo run --manifest-path sc62015/core/Cargo.toml --bin sc62015-lcd -- --model pc-e500Notes:
- Use
--model iq-7000to switch ROM/profile. - Use
--refresh-steps 20000to control redraw cadence. - Use
--input-steps 1000to poll for key presses more frequently. - Use
--no-alt-screenfor tmux capture panes. - Use
--force-ttywhen running detached. - Use
--pf-numbersto map digits 1–5 to PF1–PF5 (disables typing those digits). - Use
--bnida PATHto show function names in the status line (defaults torom-analysis/.../bnida.jsonif present). - Use
--force-key-irqif the ROM stays halted at the boot menu (forces KEY interrupts on key press). - Use
--card present|absentto control memory card slot state (PC-E500). - Use
--pf1-twiceto auto-drive the boot menu (S2(CARD) → PF1 → S1(MAIN) → PF1). - Keys: Ctrl+1..5 or F1..F5 → PF1..PF5, Enter →
=, Backspace →BS, Ctrl+C exits.