{"_id":"@emdzej/ncsx-inpax-cabi-provider","_rev":"6-cc9f171b3fae9505e121aba43a03f2dd","name":"@emdzej/ncsx-inpax-cabi-provider","dist-tags":{"latest":"0.9.0"},"versions":{"0.4.0":{"name":"@emdzej/ncsx-inpax-cabi-provider","version":"0.4.0","_id":"@emdzej/ncsx-inpax-cabi-provider@0.4.0","maintainers":[{"name":"emdzej","email":"michal@jaskolski.pro"}],"homepage":"https://github.com/emdzej/ncsx#readme","bugs":{"url":"https://github.com/emdzej/ncsx/issues"},"dist":{"shasum":"5b47a16510d1a7ac77d8d333a7a5b3bc8ff30043","tarball":"https://registry.npmjs.org/@emdzej/ncsx-inpax-cabi-provider/-/ncsx-inpax-cabi-provider-0.4.0.tgz","fileCount":23,"integrity":"sha512-J+ErxnD4cD+t2VXmRHKeLaIquKGL2EvpnKW4DKRI4odqBZSRpPPVM3OSJejF0lI0Hc5LjlMhLGDqLhRKeLtaTQ==","signatures":[{"sig":"MEUCIFAOhMLHOFP8oHchu6touHBABOWr43BXHDyXT2WIwqUCAiEAsAgAn7uBuNY6lTrXu9VXlEdxLzin2KQdgoRk6GAoM5k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":214096},"main":"dist/index.js","type":"module","_from":"file:emdzej-ncsx-inpax-cabi-provider-0.4.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint .","test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","clean":"rm -rf dist .turbo *.tsbuildinfo","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"emdzej","email":"michal@jaskolski.pro"},"_resolved":"/private/var/folders/7h/x_w_580x4s9dq3sq11tpvzkwy3nbj8/T/bdd0e143ea910cc9a1b49e920a31f4ef/emdzej-ncsx-inpax-cabi-provider-0.4.0.tgz","_integrity":"sha512-J+ErxnD4cD+t2VXmRHKeLaIquKGL2EvpnKW4DKRI4odqBZSRpPPVM3OSJejF0lI0Hc5LjlMhLGDqLhRKeLtaTQ==","repository":{"url":"git+https://github.com/emdzej/ncsx.git","type":"git","directory":"packages/inpax-cabi-provider"},"_npmVersion":"11.14.1","description":"CABI/CDH bridge for the inpax IPO interpreter — implements the 80+ CDH* functions NCSEXPER's A_*.ipo dispatchers call (statically linked in NCSEXPER.EXE). Signatures from CABI.H, behaviour ghidra-verified per docs/assumptions.md.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"@emdzej/ncsx-wire":"0.4.0","@emdzej/ncsx-fa-asw":"0.4.0","@emdzej/ncsx-chassis":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.8","@types/node":"^22.13.1","@emdzej/bimmerz-logger":"^0.1.2"},"peerDependencies":{"@emdzej/bimmerz-logger":"^0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/ncsx-inpax-cabi-provider_0.4.0_1779705653891_0.40482202339609397","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@emdzej/ncsx-inpax-cabi-provider","version":"0.5.1","_id":"@emdzej/ncsx-inpax-cabi-provider@0.5.1","maintainers":[{"name":"emdzej","email":"michal@jaskolski.pro"}],"homepage":"https://github.com/emdzej/ncsx#readme","bugs":{"url":"https://github.com/emdzej/ncsx/issues"},"dist":{"shasum":"b66a3ab56526ddf81d4a113af6e987b5e55bfc71","tarball":"https://registry.npmjs.org/@emdzej/ncsx-inpax-cabi-provider/-/ncsx-inpax-cabi-provider-0.5.1.tgz","fileCount":23,"integrity":"sha512-AgdKnlsYaaWEbfl3zgU2rsnUgJZ6yD4Jxj3R7VZVBiKVHLQHFAOclapawOp8izZeUj0fkEKBO9jcIXe7T3n2Ug==","signatures":[{"sig":"MEYCIQDvLV1LSJp7IxeYcRjX36KX9FOvdrkHg5msKifUgdw4XwIhAPc/yInjlyOJ5DxqKg7NhUn4iNwwInvO6diPHVccOSDb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":214096},"main":"dist/index.js","type":"module","_from":"file:emdzej-ncsx-inpax-cabi-provider-0.5.1.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint .","test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","clean":"rm -rf dist .turbo *.tsbuildinfo","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"emdzej","email":"michal@jaskolski.pro"},"_resolved":"/private/var/folders/7h/x_w_580x4s9dq3sq11tpvzkwy3nbj8/T/c5e1f463f91acaab8ded379034df2ca8/emdzej-ncsx-inpax-cabi-provider-0.5.1.tgz","_integrity":"sha512-AgdKnlsYaaWEbfl3zgU2rsnUgJZ6yD4Jxj3R7VZVBiKVHLQHFAOclapawOp8izZeUj0fkEKBO9jcIXe7T3n2Ug==","repository":{"url":"git+https://github.com/emdzej/ncsx.git","type":"git","directory":"packages/inpax-cabi-provider"},"_npmVersion":"11.14.1","description":"CABI/CDH bridge for the inpax IPO interpreter — implements the 80+ CDH* functions NCSEXPER's A_*.ipo dispatchers call (statically linked in NCSEXPER.EXE). Signatures from CABI.H, behaviour ghidra-verified per docs/assumptions.md.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"@emdzej/ncsx-wire":"0.5.1","@emdzej/ncsx-fa-asw":"0.5.1","@emdzej/ncsx-chassis":"0.5.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.8","@types/node":"^22.13.1","@emdzej/bimmerz-logger":"^0.1.2"},"peerDependencies":{"@emdzej/bimmerz-logger":"^0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/ncsx-inpax-cabi-provider_0.5.1_1779876463907_0.14475405593435053","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@emdzej/ncsx-inpax-cabi-provider","version":"0.6.0","_id":"@emdzej/ncsx-inpax-cabi-provider@0.6.0","maintainers":[{"name":"emdzej","email":"michal@jaskolski.pro"}],"homepage":"https://github.com/emdzej/ncsx#readme","bugs":{"url":"https://github.com/emdzej/ncsx/issues"},"dist":{"shasum":"1f6daec4a08797c569c1c0a5923c139b5c5fc38b","tarball":"https://registry.npmjs.org/@emdzej/ncsx-inpax-cabi-provider/-/ncsx-inpax-cabi-provider-0.6.0.tgz","fileCount":23,"integrity":"sha512-/6fcwKAllBeItBHsxgCs4zI3KJpPFZQGz03FImxeDm9QPRZ06BC5Um07xO4rcgero8c45h4s4swcSkQKXSnB2A==","signatures":[{"sig":"MEUCIQD6tlR1ge0xlQ5HGeBTYzljmC8JNNHHzt/G7c8LVzZDdAIgOwOIN36zBKhg6xj67wSl5A42Jr4vOZejyig5SHJq514=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":214096},"main":"dist/index.js","type":"module","_from":"file:emdzej-ncsx-inpax-cabi-provider-0.6.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint .","test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","clean":"rm -rf dist .turbo *.tsbuildinfo","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"emdzej","email":"michal@jaskolski.pro"},"_resolved":"/private/var/folders/7h/x_w_580x4s9dq3sq11tpvzkwy3nbj8/T/4d70dc9adccacf5f9eb74c461c654e47/emdzej-ncsx-inpax-cabi-provider-0.6.0.tgz","_integrity":"sha512-/6fcwKAllBeItBHsxgCs4zI3KJpPFZQGz03FImxeDm9QPRZ06BC5Um07xO4rcgero8c45h4s4swcSkQKXSnB2A==","repository":{"url":"git+https://github.com/emdzej/ncsx.git","type":"git","directory":"packages/inpax-cabi-provider"},"_npmVersion":"11.14.1","description":"CABI/CDH bridge for the inpax IPO interpreter — implements the 80+ CDH* functions NCSEXPER's A_*.ipo dispatchers call (statically linked in NCSEXPER.EXE). Signatures from CABI.H, behaviour ghidra-verified per docs/assumptions.md.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"@emdzej/ncsx-wire":"0.6.0","@emdzej/ncsx-fa-asw":"0.6.0","@emdzej/ncsx-chassis":"0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.8","@types/node":"^22.13.1","@emdzej/bimmerz-logger":"^0.1.2"},"peerDependencies":{"@emdzej/bimmerz-logger":"^0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/ncsx-inpax-cabi-provider_0.6.0_1779981265596_0.9561104336663404","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@emdzej/ncsx-inpax-cabi-provider","version":"0.7.0","_id":"@emdzej/ncsx-inpax-cabi-provider@0.7.0","maintainers":[{"name":"emdzej","email":"michal@jaskolski.pro"}],"homepage":"https://github.com/emdzej/ncsx#readme","bugs":{"url":"https://github.com/emdzej/ncsx/issues"},"dist":{"shasum":"e42804b9b44ef20e8ded69606eea4ed7680e6363","tarball":"https://registry.npmjs.org/@emdzej/ncsx-inpax-cabi-provider/-/ncsx-inpax-cabi-provider-0.7.0.tgz","fileCount":23,"integrity":"sha512-u1RnAiELb07LOlvI2Me2+HvCSdJ4Hc/eT1C2VVQR1Y54pkSzC3YXZwW8Y+wTVTc28QR/dzDETRXSBsUC4D412A==","signatures":[{"sig":"MEQCIFnbOz9xt8Vd7Km0vZVcrkxc3Z2JWm9+bn09BwG6kSNDAiBsAGflP8uhJiGFuaZ1nW0zflVT9POXKp+uNXTGbjfXlA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":214096},"main":"dist/index.js","type":"module","_from":"file:emdzej-ncsx-inpax-cabi-provider-0.7.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint .","test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","clean":"rm -rf dist .turbo *.tsbuildinfo","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"emdzej","email":"michal@jaskolski.pro"},"_resolved":"/private/var/folders/7h/x_w_580x4s9dq3sq11tpvzkwy3nbj8/T/3839671c9203b6f1e4d71a15e85badcc/emdzej-ncsx-inpax-cabi-provider-0.7.0.tgz","_integrity":"sha512-u1RnAiELb07LOlvI2Me2+HvCSdJ4Hc/eT1C2VVQR1Y54pkSzC3YXZwW8Y+wTVTc28QR/dzDETRXSBsUC4D412A==","repository":{"url":"git+https://github.com/emdzej/ncsx.git","type":"git","directory":"packages/inpax-cabi-provider"},"_npmVersion":"11.14.1","description":"CABI/CDH bridge for the inpax IPO interpreter — implements the 80+ CDH* functions NCSEXPER's A_*.ipo dispatchers call (statically linked in NCSEXPER.EXE). Signatures from CABI.H, behaviour ghidra-verified per docs/assumptions.md.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"@emdzej/ncsx-wire":"0.7.0","@emdzej/ncsx-fa-asw":"0.7.0","@emdzej/ncsx-chassis":"0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.8","@types/node":"^22.13.1","@emdzej/bimmerz-logger":"^0.1.2"},"peerDependencies":{"@emdzej/bimmerz-logger":"^0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/ncsx-inpax-cabi-provider_0.7.0_1780063033450_0.44531700628425974","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@emdzej/ncsx-inpax-cabi-provider","version":"0.8.0","_id":"@emdzej/ncsx-inpax-cabi-provider@0.8.0","maintainers":[{"name":"emdzej","email":"michal@jaskolski.pro"}],"homepage":"https://github.com/emdzej/ncsx#readme","bugs":{"url":"https://github.com/emdzej/ncsx/issues"},"dist":{"shasum":"10e9f9c6204bda255015d8ef6de37d390ec46124","tarball":"https://registry.npmjs.org/@emdzej/ncsx-inpax-cabi-provider/-/ncsx-inpax-cabi-provider-0.8.0.tgz","fileCount":23,"integrity":"sha512-zdFc6Dc1jHVEuaxUYtFo5wVAZCWvbU8l4Xtzr/+C7fqHBkajftfcTmhPPMyAaXpJZVZed7pMq1COJXVSFKtZKw==","signatures":[{"sig":"MEUCIQCEnNuRK8DtkOpdRBqzJR8fujEz/2sYkvHVFp4DWgFtQQIgbsTmENQe31qDzEcQnWpvGFgBxtgIV+W9eRTnO6kHQ8w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":214874},"main":"dist/index.js","type":"module","_from":"file:emdzej-ncsx-inpax-cabi-provider-0.8.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint .","test":"vitest run --passWithNoTests","build":"tsc -p tsconfig.json","clean":"rm -rf dist .turbo *.tsbuildinfo","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"emdzej","email":"michal@jaskolski.pro"},"_resolved":"/private/var/folders/7h/x_w_580x4s9dq3sq11tpvzkwy3nbj8/T/2b1b057efcc471ad2dcc9cca42011269/emdzej-ncsx-inpax-cabi-provider-0.8.0.tgz","_integrity":"sha512-zdFc6Dc1jHVEuaxUYtFo5wVAZCWvbU8l4Xtzr/+C7fqHBkajftfcTmhPPMyAaXpJZVZed7pMq1COJXVSFKtZKw==","repository":{"url":"git+https://github.com/emdzej/ncsx.git","type":"git","directory":"packages/inpax-cabi-provider"},"_npmVersion":"11.16.0","description":"CABI/CDH bridge for the inpax IPO interpreter — implements the 80+ CDH* functions NCSEXPER's A_*.ipo dispatchers call (statically linked in NCSEXPER.EXE). Signatures from CABI.H, behaviour ghidra-verified per docs/assumptions.md.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"@emdzej/ncsx-wire":"0.8.0","@emdzej/ncsx-fa-asw":"0.8.0","@emdzej/ncsx-chassis":"0.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.8","@types/node":"^22.13.1","@emdzej/bimmerz-logger":"^0.1.2"},"peerDependencies":{"@emdzej/bimmerz-logger":"^0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/ncsx-inpax-cabi-provider_0.8.0_1780758444176_0.3263940637487348","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@emdzej/ncsx-inpax-cabi-provider","version":"0.9.0","description":"CABI/CDH bridge for the inpax IPO interpreter — implements the 80+ CDH* functions NCSEXPER's A_*.ipo dispatchers call (statically linked in NCSEXPER.EXE). Signatures from CABI.H, behaviour ghidra-verified per docs/assumptions.md.","main":"dist/index.js","types":"dist/index.d.ts","type":"module","dependencies":{"@emdzej/ncsx-chassis":"0.9.0","@emdzej/ncsx-fa-asw":"0.9.0","@emdzej/ncsx-wire":"0.9.0"},"peerDependencies":{"@emdzej/bimmerz-logger":"^0.1.2"},"devDependencies":{"@emdzej/bimmerz-logger":"^0.1.2","@types/node":"^22.13.1","vitest":"^2.1.8"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/emdzej/ncsx.git","directory":"packages/inpax-cabi-provider"},"scripts":{"build":"tsc -p tsconfig.json","test":"vitest run --passWithNoTests","test:watch":"vitest","lint":"eslint .","typecheck":"tsc --noEmit","clean":"rm -rf dist .turbo *.tsbuildinfo"},"_id":"@emdzej/ncsx-inpax-cabi-provider@0.9.0","bugs":{"url":"https://github.com/emdzej/ncsx/issues"},"homepage":"https://github.com/emdzej/ncsx#readme","_integrity":"sha512-xm1QHA/Xx7VaKBUGF4Gt8sWlNNEuFiQn84ZgRT+oMei9oijN8JIideQbm17w5MkDcahWU0IOBKV0/phExzqmmw==","_resolved":"/private/var/folders/7h/x_w_580x4s9dq3sq11tpvzkwy3nbj8/T/91fe63121657f152db0236d0416a9b09/emdzej-ncsx-inpax-cabi-provider-0.9.0.tgz","_from":"file:emdzej-ncsx-inpax-cabi-provider-0.9.0.tgz","_nodeVersion":"22.22.1","_npmVersion":"11.16.0","dist":{"integrity":"sha512-xm1QHA/Xx7VaKBUGF4Gt8sWlNNEuFiQn84ZgRT+oMei9oijN8JIideQbm17w5MkDcahWU0IOBKV0/phExzqmmw==","shasum":"37af66a0d42490c01c7366706a9b32b7023175af","tarball":"https://registry.npmjs.org/@emdzej/ncsx-inpax-cabi-provider/-/ncsx-inpax-cabi-provider-0.9.0.tgz","fileCount":23,"unpackedSize":214874,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHMNSok5R+0ywleGXZkBM8xFyNM5WuW/jVp5dsj0OsupAiEAgDRFTMugIt/rjj4KwTbcntpJ3ESBgYVQyyQIp74R3QU="}]},"_npmUser":{"name":"emdzej","email":"michal@jaskolski.pro"},"directories":{},"maintainers":[{"name":"emdzej","email":"michal@jaskolski.pro"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ncsx-inpax-cabi-provider_0.9.0_1783336589318_0.7755297587813546"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-25T10:40:53.736Z","modified":"2026-07-06T11:16:29.708Z","0.4.0":"2026-05-25T10:40:54.062Z","0.5.1":"2026-05-27T10:07:44.086Z","0.6.0":"2026-05-28T15:14:25.795Z","0.7.0":"2026-05-29T13:57:13.590Z","0.8.0":"2026-06-06T15:07:24.344Z","0.9.0":"2026-07-06T11:16:29.449Z"},"bugs":{"url":"https://github.com/emdzej/ncsx/issues"},"homepage":"https://github.com/emdzej/ncsx#readme","repository":{"type":"git","url":"git+https://github.com/emdzej/ncsx.git","directory":"packages/inpax-cabi-provider"},"description":"CABI/CDH bridge for the inpax IPO interpreter — implements the 80+ CDH* functions NCSEXPER's A_*.ipo dispatchers call (statically linked in NCSEXPER.EXE). Signatures from CABI.H, behaviour ghidra-verified per docs/assumptions.md.","maintainers":[{"name":"emdzej","email":"michal@jaskolski.pro"}],"readme":"# @emdzej/ncsx-inpax-cabi-provider\n\nThe **CABI/CDH bridge** — implements the 80+ `CDH*` functions NCSEXPER's\n`A_*.ipo` dispatchers call. Lets the [`inpax`](https://github.com/emdzej/inpax)\nIPO interpreter run BMW's own coding scripts unchanged.\n\nIn NCSEXPER.EXE these functions are statically linked C code that the IPO calls\nvia the `0x0D CALLE` opcode — they own the cabd-parameter store, the binbuf\nscratchpad, the slot table for `C_S_LESEN` / `C_S_SCHREIBEN`, the FA byte walker,\nand the EDIABAS dispatch surface. We re-implement them on top of an `EdiabasLike`\ninstance so the IPO runs in the browser identically to how it runs under NCS\nExpert.\n\nSignatures from `CABI.H`. Behaviour Ghidra-verified per\n[`docs/assumptions.md`](../../docs/assumptions.md).\n\n## Usage\n\n```ts\nimport { CabiProvider } from \"@emdzej/ncsx-inpax-cabi-provider\";\n\nconst cabi = new CabiProvider({\n  ediabas,                                // EdiabasLike\n  chassis,                                // loaded Chassis bundle\n  currentSgName: \"KMB\",\n  currentCabd: \"A_KMB46\",\n  currentCbd: \"C08\",                       // .Cxx variant\n  currentCodierBaureihe: \"E46\",\n  fa: identity.fa ?? null,                 // optional — IPO's FA walker reads this\n});\n\n// 1. Wire the CABI slot table into your inpax VM.\nimport { buildCabiSystemFunctions } from \"./your-syscall-overrides\";\nconst systemFunctions = buildCabiSystemFunctions(cabi, { defaultSgbd: \"C_KMB46\" });\n\nconst vm = new VM(ipo, { runtime, systemFunctions });\n\n// 2. Drive the IPO's `cabimain` dispatcher.\nawait vm.runStartup();\nawait cabi.CDHSetCabdPar(\"JOBNAME\", \"CODIERDATEN_LESEN\");\nawait vm.execute(\"cabimain\", { pushString: \"CODIERDATEN_LESEN\" });\n\n// 3. Read back what the IPO published.\nconst status = cabi.lastJobStatus;          // \"OKAY\" / \"ERROR_*\"\nconst sets = cabi.lastJobSets;              // raw EDIABAS result sets\nconst cabdPars = cabi.allCabdPars();        // every CDHSetCabdPar write\n```\n\n`apps/web/src/lib/runtime.svelte.ts` is the reference wiring — it builds the\n99-entry syscall slot table from `NCSEXPER_CABI_SLOTS` and dispatches each one\ninto the right `CabiProvider` method.\n\n## What's implemented\n\n| Group | Coverage |\n|---|---|\n| EDIABAS bridge | `CDHapiInit/End`, `CDHapiJob`, `CDHapiJobData`, `CDHapiResultText/Int/Digital/Analog/Sets`, `CDHapiCheckJobStatus`, `CDHapiResultBinary` — load-bearing for every read/write. |\n| Slot table | `CDHSetDataOrg`, `CDHSetNettoData`, `CDHGetApiJobData`, `CDHBinBufToNettoData` — the read/write packet builder. NCSEXPER's `MakeHeader` (FUN_00443ec0) layout, word-mode + byte-mode, payload length / wordCount / wireAddr math all match. |\n| BinBuf | `CDHBinBufCreate/Delete`, `CDHBinBufWriteByte/Word`, `CDHBinBufReadByte/Word`, `CDHBinBufToStr`. |\n| CABD pars | `CDHSetCabdPar`, `CDHGetCabdPar`, `CDHSetCabdWordPar`, `CDHGetCabdWordPar`. Per-dispatch scratchpad (NCSEXPER clears at the start of every job per `FUN_00402c70` / `FUN_0044b880`). |\n| System data | `CDHSetSystemData`, `CDHGetSystemData` — host-seeded values the IPO reads (`FAHRGESTELL_NR`, …). |\n| FA walker | `CDHGetFaVersion`, `CDHGetAnzahlFaElemente`, `CDHGetFaElement` — tokenises the FA string the constructor was given and serves it back per index. |\n| Error scratchpad | `CDHSetError`, `CDHTestError`, `CDHResetError` — IPO surfaces recoverable errors here, host reads via `getLastCdhError()`. |\n| ZCS / FSW lookup | `CDHGetFswPswFromZcs`, `CDHGetFswPswFromCvt`, `CDHGetBaureiheFromZcs` — currently throw `CdhNotImplementedError`. ZCS decoding via the chassis `<BR>ZST.*` tables is planned but not yet wired. |\n| Authentication | `CDHCallAuthenticate`, `CDHAuthGetRandom` — stubs. Requires BMW seed/key tables (not shipped). |\n\nThe slot table is **cross-validated 68/68 against the 334k empirical CALL sys\nobservations** from the 915 CABI IPOs in `NCSEXPER/SGDAT` — see\n[`docs/ncsexper-syscall-table.md`](../../docs/ncsexper-syscall-table.md).\n\n## Diagnostic logging\n\nEvery load-bearing call logs its round-trip to the console:\n\n```\n[CDHapiJob] → ecu=C_KMB46 job=IDENT params(0)=[]\n[CDHapiJob] ← job=IDENT JOB_STATUS=OKAY sets=1 set[0]{JOB_STATUS=\"OKAY\", ID_COD_INDEX=8, …}\n[CDHGetApiJobData] startAddr=0x20 maxData=12 → maxRecords=12 (WB=2)\n[CDHapiJobData] ecu=C_KMB46 job=C_S_LESEN bufHandle=1 buf.size=38 bytes=0102…\n[CDHapiJobData] ← job=C_S_LESEN JOB_STATUS=OKAY sets=1 set[0]{CODIER_DATEN=<bin:…>, JOB_STATUS=\"OKAY\"}\n[CDHapiResultText] FAHRGESTELL_NR[set=1] → \"PM10277\"\n[CDHSetCabdPar] FAHRGESTELL_NR = \"PM10277\"\n```\n\nThat makes it possible to diff against NCSEXPER's `ABLAUF.TRC` when something\nunexpected fails.\n\n## Exports\n\n```ts\nexport { CabiProvider, CdhNotImplementedError };\nexport type { CdhContext, CdhResult };\nexport * from \"./error-codes\";   // COAPI_OK, COAPI_ERROR, COAPI_DIABAS_ERROR, …\nexport {\n  NCSEXPER_CABI_SLOTS,\n  getCabiSlot,\n  type CabiSlot,\n  type CabiParam,\n  type CabiCategory,\n};\n```\n\n## Consumers\n\n- `apps/web/src/lib/runtime.svelte.ts` — builds the system-function table\n  + drives `cabimain`.\n- `apps/web/src/lib/process-ecu.ts` — the orchestrators\n  (`processEcu` / `processReadCoding` / `processWriteCoding` / `processListJobs` /\n  `processRunJob`).\n","readmeFilename":"README.md"}