Skip to content

inpax

BMW INPA Interpreter & Toolchain

🔗 GitHub

About

inpax is a cross-platform interpreter for BMW INPA (INterface for Programming Applications). INPA is BMW's diagnostic tool for running test procedures on vehicle ECUs.

Features

  • 📄 IPO Parser — Parse compiled INPA bytecode
  • 🔧 Disassembler — Decompile IPO to readable assembly
  • 🖥️ TUI Runtime — Terminal UI matching original INPA
  • ⌨️ IPS Compiler — Compile source scripts (WIP)
  • 🔌 Provider System — Pluggable UI and EDIABAS backends

Installation

bash
npm install -g inpax

Usage

Disassemble

bash
# Disassemble IPO file
inpax dis script.ipo

# Output to file
inpax dis script.ipo -o script.asm

Run

bash
# Run with TUI
inpax run script.ipo

# Headless mode
inpax run script.ipo --headless

# Debug mode
inpax run script.ipo --debug

Info

bash
# Show IPO file information
inpax info script.ipo

Architecture

┌─────────────────────────────────────────────┐
│                   CLI                        │
├─────────────────────────────────────────────┤
│     TUI Provider    │    CLI Provider       │
├─────────────────────────────────────────────┤
│                Interpreter                   │
├─────────────────────────────────────────────┤
│    IPO Parser    │    EDIABAS Provider      │
└─────────────────────────────────────────────┘

Packages

PackageDescription
@inpax/coreConstants, opcodes, types
@inpax/disassemblerIPO → assembly
@inpax/interpreterVM execution
@inpax/tuiTerminal UI (ink)
@inpax/tui-providerUI state management
@inpax/cli-providerHeadless UI
@inpax/ini-parserINPA config parser
@inpax/cliCommand-line interface

INPA Script Example

ips
// INPA script example
PROC inpainit()
{
    settitle("My Script");
    setscreen(my_screen, TRUE);
    setmenu(main_menu);
}

PROC main_menu()
{
    setitem(1, "Read Ident", TRUE);
    setitem(10, "Exit", TRUE);
}

Status

ComponentStatus
IPO Parser✅ Complete
Disassembler✅ Complete
Interpreter🔄 In progress
TUI✅ Complete
Compiler🔬 Research
  • EdiabasX — EDIABAS implementation
  • tisx — TIS graphics decoder
  • wdsx — SP-Daten decoder