NET: full networked mission runs end-to-end; fix blank VDB heads (NIC/VDB port clash)
Console queues a mission -> egg over the wire -> pod loads + runs it -> all
cockpit heads render -> mission ends on the console timer. Four fixes:
1. ne2000.cpp: don't BX_PANIC on the TCR inhibit-CRC / auto-tx-disable bits.
A full production boot runs the packet driver's internal loopback
self-test, which sets those bits; Bochs' NE2000 aborted the whole
emulator. Record them in TCR state instead (harmless for an emulated NIC;
pcap/host does framing+CRC). Also fixes a latent coll_prio bit-4 vs bit-3
round-trip bug. Committed copy in vpx-device/.
2. Confirmed the mission-load page fault (00FF:219D) was RIO-OFF; booting
with the RIO live (net_full.conf) loads and runs the mission cleanly.
3. net_loop.conf + net-boot/loop.bat: GO.BAT-style loop so the pod stays
connected to the console and picks up missions as they're queued (the
real pod relaunches netnub after each mission/idle disconnect).
4. HEADLINE: blank MFD/radar heads were an I/O port collision. The VDB
video splitter is hardwired at 0x300-0x31A (palettes 0x300/0x308/0x310);
the NE2000 at nicbase=300 swallowed the game's VDB palette writes ->
vdb_pal stayed zero -> pal_draw decoded every head to black. Same VDB
spam corrupted NIC RX, dropping the console EndMission (mission overran
its timer). Fix: move the NIC to 0x340 (DOSBox nicbase=340 + DOS NET.CFG
PORT 340; must agree). VDB keeps 0x300. Config-only, no rebuild.
Adds: net_full.conf, net_loop.conf, net-boot/ (ODI drivers, NET.CFG@340,
loop.bat, README), vpx-device/{ne2000,ethernet_pcap}.cpp; updates NET-NOTES.md.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -372,6 +372,53 @@ so this may not reproduce there. NEXT: retry with RIO enabled + DOSBox
|
||||
ACK deadline during load); if it still faults, disassemble around game
|
||||
code 00FF:219D. This joins the Division-renderer/crash workstream.
|
||||
|
||||
## FULL NETWORKED MISSION WORKS END TO END (2026-07-05, later) — all fixed
|
||||
|
||||
A complete networked mission now runs start to finish: console queues a
|
||||
mission -> egg over the wire -> pod loads it -> RIO live -> **all cockpit
|
||||
heads render** -> mission ends on the console timer. Four fixes got here:
|
||||
|
||||
1. **Mission-load crash was RIO-OFF** (confirmed). Booting with the RIO
|
||||
enabled (`net_full.conf`: serial1 COM1 rxpollus:100 rxburst:16, full
|
||||
RIO+sound production boot) — the page fault at 00FF:219D is gone and the
|
||||
mission loads + runs. Real pods run RIO-on, so this was the whole thing.
|
||||
|
||||
2. **NE2000 `BX_PANIC` fixed in the emulator.** A full production boot runs
|
||||
the packet driver's internal loopback self-test, which sets the NIC's TCR
|
||||
inhibit-CRC bit; Bochs' `ne2000.cpp` `BX_PANIC`'d and aborted the whole
|
||||
emulator. Patched the TCR write handler to record crc_disable/ext_stoptx
|
||||
instead of panicking (harmless for an emulated NIC; pcap/host frames+CRCs).
|
||||
Committed copy: `vpx-device/ne2000.cpp`.
|
||||
|
||||
3. **Pod persistence via GO.BAT loop.** When the console has no mission
|
||||
queued, the pod connects, sees nothing, and cleanly exits (not a crash) —
|
||||
the real pod's GO.BAT immediately relaunches netnub. `net_loop.conf` +
|
||||
`net-boot/loop.bat` replicate that so the pod stays connected and ready.
|
||||
|
||||
4. **HEADLINE FIX — blank cockpit heads = NE2000/VDB I/O port collision.**
|
||||
All 5 MFD + radar heads decoded to pure black during a live mission even
|
||||
though the DOSBox SVGA gauge framebuffer was FULL (captured mid-mission:
|
||||
SENSOR CLUSTER/MYOMERS/SRM 4/mech wireframes/pilot name). Root cause: the
|
||||
VDB video splitter board is hardwired at **0x300-0x31A** (palettes
|
||||
0x300/0x308/0x310; `VDB_BASE` in vpxlog.cpp) and we'd put the NE2000 at
|
||||
`nicbase=300` — the NIC swallowed the game's VDB palette writes, so
|
||||
`vdb_pal` stayed zero and `pal_draw` mapped every index to black. The VDB
|
||||
spam into 0x300-0x31A also corrupted NIC registers, dropping the console's
|
||||
EndMission -> **the mission overran its timer** (second symptom, same
|
||||
cause). FIX (config-only): move the NIC to **0x340** in the DOSBox conf
|
||||
(`nicbase=340`) AND the DOS `NET.CFG` (`PORT 340`) — both must agree; the
|
||||
game uses odipkt so it's base-agnostic. VDB keeps 0x300 (game hardwires
|
||||
it; real pod's NIC lived elsewhere for this reason). Non-networked gauge
|
||||
runs never hit this (no NIC). Verified: heads render perfectly (radar with
|
||||
contact blips + SPEED/HEADING/ARMOR + mission clock; MFDs full) AND the
|
||||
mission ends cleanly on the timer (`Sending EndMission`, score 1000).
|
||||
Diagnostic recipe: `New-Item <VPX_DUMPDIR>\DUMP` mid-mission dumps
|
||||
win0/3/4.bmp; PrintWindow (flag 2, GL) the DOSBox SVGA window to prove the
|
||||
framebuffer has content; framebuffer-full + heads-black => palette/port.
|
||||
|
||||
Committed: `net_full.conf`, `net_loop.conf`, `net-boot/` (drivers, NET.CFG
|
||||
@340, loop.bat, README), `vpx-device/ne2000.cpp`, `vpx-device/ethernet_pcap.cpp`.
|
||||
|
||||
## Open questions / notes
|
||||
- Exact TCP listen port(s) — not in the source grep; get from NETNUB.EXE
|
||||
or a capture at milestone 3.
|
||||
|
||||
Reference in New Issue
Block a user