mirror of
https://github.com/felixrieseberg/windows95.git
synced 2026-05-09 00:24:09 +00:00
* Fix guest TCP recv() stalling under concurrent traffic v86's fake_network stores TCPConnection routing fields (hsrc/hdest/ psrc/pdest) as zero-copy subarrays of the SYN frame, which is itself a view into the NE2000 TX ring. Win95's driver uses a 12-slot ring; once it wraps (any concurrent SMB/NBNS/ping while waiting for an upstream reply), pump() emits segments with whatever IP now occupies that slot, the guest RSTs them, and recv() blocks forever. - libv86.js: copy the four address arrays at TCPConnection construction (matches felixrieseberg/v86@dd13099c on fake-network-copy-tcp-addrs, now merged into windows95-base) - tools/probe-tcp.sh + net/tcp-trace.ts + tcp-relay.ts test stub + debug-harness WIN95_PROBE_RUN2: end-to-end regression harness (boot → ping -t → telnet → async write after ring wrap → assert ACK). All env-gated, no production-path change. - docs/v86-patches.md: tracker for all fork patches + upstream PR state - update-v86 SKILL.md: cross-link and new fork-branch entry * Drop checked-in upstream PR description Belongs on the GitHub PR, not in the repo.
2.6 KiB
2.6 KiB
v86 patches carried by windows95
windows95 builds v86 from a fork branch rather than upstream master.
Each fix lives on its own feature branch in felixrieseberg/v86, has an
upstream PR against copy/v86, and is merged into the integration
branch felixrieseberg/v86:windows95-base (which is what
tools/update-v86.js builds from). When a PR is merged upstream, drop
its row here, delete the feature branch, and rebase windows95-base.
| Fix | Branch | Upstream PR | windows95-base | Why we need it |
|---|---|---|---|---|
| Node fs loader in Electron renderer | electron-renderer-fs-loader |
copy/v86#1540 | ✅ | await import("node:fs/promises") fails in an Electron renderer; disk images don't load. |
| IDE shared Command Block registers | ide-shared-registers |
copy/v86#1541 | ✅ | Win9x hangs at splash on disks >535 MiB because per-device register writes violate the ATA shared-register-file spec. |
| VMware absolute-pointer backdoor | vmware-abspointer |
copy/v86#1542 | ✅ | Port 0x5658 GETVERSION + ABSPOINTER_* so VBMOUSE can track the host cursor 1:1 without pointer lock. |
| VMware text-clipboard backdoor | vmware-clipboard |
— (stacked on #1542) | ✅ | Legacy backdoor commands 6–9 so W95TOOLS.EXE can sync CF_TEXT with the host. |
| Defer V86-mode VBE disable | vga-defer-vbe-disable-v86 |
copy/v86#1543 | ✅ | Opening a windowed DOS box leaks vgabios's VBE-disable past Win9x's VDD and turns the screen to planar garbage. |
| fake_network: copy TCP addrs | fake-network-copy-tcp-addrs |
— | ✅ | TCPConnection routing fields alias the NE2000 TX ring; concurrent guest traffic retargets async replies and the guest RSTs them. |
Adding a fix
- Branch off
origin/masterin../v86, commit, push tofork. - Open the PR against
copy/v86. git checkout windows95-base && git merge --no-ff <branch> && git push fork windows95-basenode tools/update-v86.jsin this repo to rebuildlibv86.js/v86.wasm.- Add a row above and a bullet in
.claude/skills/update-v86/SKILL.md.