Files
CydandClaude Fable 5 9536d4cbc0 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>
2026-07-05 21:18:42 -05:00

1.6 KiB

net-boot — networked pod boot support files

Files the DOSBox pod mounts as D: when booting on the network path (emulator/net_full.conf, emulator/net_loop.conf). The pod receives its mission egg from the ops console (SheepShaver) over TCP 1501 — no -egg bypass.

Contents

  • LSL.COM, NE2000.COM, ODIPKT.COM — Novell ODI stack: Link Support Layer → NE2000 MLID → ODI-to-Packet-Driver shim. WATTCP/NetNub find the packet driver by scanning INT 0x60-0x80 for PKT DRVR (odipkt lands at SINT 0x60).
  • NET.CFG — ODI driver config. PORT 340 (see below), INT 3, FRAME Ethernet_II.
  • loop.bat — GO.BAT-style loop: keeps relaunching netnub -p -f btl4opt so the pod stays connected and picks up whatever mission the console queues.

The 0x340 NIC base (important)

The VDB video splitter board is hardwired at I/O 0x300-0x31A (its palette registers are at 0x300/0x308/0x310; VDB_BASE in vpxlog.cpp). If the NE2000 NIC is put at the usual nicbase=300 it claims that same range and swallows the game's mid-mission VDB palette writes → every MFD/radar head decodes to black, and the VDB traffic corrupts the NIC's registers so the console's EndMission is lost (the mission overruns its timer). The NIC is therefore at 0x340 in both the DOSBox conf (nicbase=340) and here (PORT 340); they must agree. The VDB keeps 0x300 (the game hardwires it — on the real pod the NIC lived at a different base for exactly this reason).

Bridge / pcap notes

See ../NET-NOTES.md for the two-TAP Windows bridge, the bridge-miniport realnic binding, and npcap DLL path requirements.