Carve — ACCP command 0x14 = CMDWW (024B) handler (2026-08-09)¶
Full path: E:\Dev\Ronny\NDInsight\SINTRAN\ND5000\CARVE-ACCP-CMDWW-0x14-HANDLER-2026-08-09.md
Scope: E2-P2, first of the 31 unnamed dispatcher arms. Does NOT touch ACCP-COMPLETE-REFERENCE.md.
Reads with: CARVE-ACCP-E2-P1-COMMAND-BYTE-MAP-2026-08-08.md (the arm map),
CM-SYMBOLS-ARE-THE-OCTOBUS-ARM-CODES-2026-08-03.md (CM*-symbol = arm-code binding).
Result¶
Command byte 0x14 is CMDWW (0o24). Bound authoritatively from N500-SYMBOLS.SYMB
(CMDWW=000024) — the same source that named CMRUN/CMMIC/CMSTO. The 68000 handler is a
checksummed 8-halfword ("word") WRITE into the control-store staging buffer at 0x1144F0.
It sits in the coherent 0x13–0x16 word-transfer cluster:
CMWWC 0o23 (0x13), CMDWW 0o24 (0x14), CMRWC/CMADR 0o25 (0x15), CMDRW 0o26 (0x16).
"DWW" expansion is [INFERRED] "Data/Double Write Word" (its read twin CMDRW=0x16 supports the
write/read pairing); the letters are not expanded in any source I have, so the NAME is CMDWW, not
a guessed long form.
Evidence — the handler (octo.bin, verified in Ghidra 2026-08-09)¶
Arm at 0x4EDC reads exactly cmpi.b #0x14,D0 (matches the carved arm map — confirms the loaded
octo.bin image lines up with the carve). Body 0x4EE4–0x4FBF, ending bra.w 0x6878 (dispatcher
return):
4EE4 jsr 0x6FFA ; read one 16-bit word from the ND-100 message [6FFA not yet decompiled]
4EEC move.w D0,(0x52,A6) ; save it as the first parameter (local @0x52)
4EF0 clr.l (0x64,A6) ; i = 0
loop (4EF4):
4EF4 jsr 0x6FFA ; read next word
4EFC D1 = i; asl.l #1 ; word index -> byte offset
4F02 lea 0x1144F0,A0
4F08 move.w D0,(A0,D1) ; buffer[i] = word <-- the 8-halfword / 128-bit staging buffer
4F12 D3 = @0x50 (running sum); add buffer[i]; store back ; checksum accumulator
4F22 i++
4F26 cmpi.l #7,D4; bne loop ; i = 0..7 (8 data halfwords)
4F2E jsr 0x6FFA ; read the 9th word (the checksum word)
4F36 @0x50 = @0x50 + word ; fold checksum word into the sum
4F3E clr.w 0x1144EC ; clr.w 0x1144EA
4F4A tst.w 0x1143AC ; mode flag
4F50 beq 4F74 ; flag==0 -> normal path
(flag!=0): D0=0xFF; jsr 0x6986 (x2); jsr 0x6A64; -> done [alternate/abort path]
4F74 andi.l #0xFFFF,D0; tst.l D0
4F7C beq 4F9E ; checksum sum==0 -> success
(sum!=0): D0=0xFF jsr 0x6986; D0=4 jsr 0x6986; jsr 0x6A64 ; NAK code 4 = checksum error
4F9E D0 = @0x52 (first param); jsr 0x73B2 ; act on the loaded word [73B2 not yet decompiled]
4FA8 tst.w 0x113138; bne 4F9E ; wait/ready spin
4FB2 D0 = 0; jsr 0x6986 ; ACK code 0 = success
4FBC bra.w 0x6878 ; back to dispatcher
Cross-checks:
- 0x1144F0 is the same 8-halfword staging buffer the start/stop-microprogram read-back verify
walks (cmpi.w #0x0100,(0x0,A0,D0) at 0x1144F0) — so this cluster stages 128-bit words there.
- 0x6986 is the reply-byte sender (0xFF = nak marker, then a code; 0 = ack) — same convention
AccpCommandChannelTests already proved for ALIVE (FF 07 …).
- Termination bra.w 0x6878 is the shared dispatcher exit.
Verified vs inferred¶
- [V]
0x14 = CMDWW = 0o24(N500-SYMBOLS.SYMB). Arm at0x4EDC. Handler reads 8 halfwords + 1 checksum word into0x1144F0, validatessum & 0xFFFF == 0, NAKs code 4 on mismatch, ACKs 0 on success, uses the0x1143ACmode flag for an alternate path. - [INFERRED] the "DWW" long form; the exact action of
0x73B2(consumes the first param — likely the target CS/mem address or a commit) and0x6FFA(the per-word message reader). Decompiling0x6FFA/0x73B2is the obvious next step to upgrade these to [V].
Wrong turns — do not repeat¶
- The Ghidra ACTIVE program was
encos-err-ii-b01.brf(an ND-100 BRF), not octo.bin — a bareget_disassemblyreturned garbage undefined bytes. ALWAYS passprogram_name: "octo.bin". - octo.bin is loaded from
C:\Temp\octo\octo.bin(not the NDInsight eprom path); confirmed equivalent by thecmpi.b #0x14arm landing exactly at the carved0x4EDC.
Open¶
- 30 unnamed arms remain (worklist in the E2-P1 map). Next in chain order:
0x15 @ 0x4FC0(CMRWCfamily — note the map already shows 0x15 unnamed; SYMB givesCMRWC/CMADR 0o25).