TomppaH wrote on 2025-06-05, 20:07:
superfury wrote on 2025-06-03, 21:32:UniPCemu also supports PPP IPX on TCP (together with IPv4 and other protocols, alternatively SLIP encapsulation with only a sing […]
Show full quote
UniPCemu also supports PPP IPX on TCP (together with IPv4 and other protocols, alternatively SLIP encapsulation with only a single packet type), with improved support on the latest commits (not ready for release due to some CPU emulation bugs present right now). If you can use PPP IPX and can use a virtual serial port (or real one), you can use the emulated modem (or just using Dosbox's Hayes modem) with proper cabling (or emulation like COM0COM) it can 'dial' (through TCP) UniPCemu's packet server and start PPP (or SLIP alternative) on it to bridge IPX onto Ethernet II. I also made a program that bridges Dosbox server-style IPX to Ethernet II (verified with Doom multiplayer), although slow due to low PPP connection speed (56KB/S) it's kind of a slideshow-ish, but it works.
https://github.com/superfury/ipxgw
It even supports IPX echo-packet based IPX node number autoconfiguration (the same method as UniPCemu's server performs during IPXCP negotiation).
Wrt Windows 9x, works like a charm (UniPCemu server + ipxgw). Played one Windows 9x client (Doom 95) with multiple Dosbox 3.71 MS-DOS clients. All of course routed over the real, modern Ethernet II network.
Both servers of course bridge using (win or n)pcap (with UniPCemu optionally disabling the pcap functionality for a private network instead).
UniPCemu's server builds can handle multiple protocols at the same time using PPP, but Windows 9x has issues with it's drivers from what I tested (though it's a Windows 9x-specific known issue, a bug in it's software). UniPCemu can also listen to DTR to connect to the server (raising to connect, lowering optionally disconnects). Although it can only either provide the connection to it's emulated hardware (nullmode or hayes) to either itself (apps running inside the emulator) or one (virtual or real) serial port (other PC using nullmodem or adjusted nullmode cable using two serial ports (see manual for the cable schematic) for full modem handshake (easy using COM0COM though, although only on one serial port with 2 extra outgoing signals). Regularly debug OSes like Windows using that feature (WinDBG), or simply connect to the server using the host machine itself to connect to it's network from modern Windows to connect to it's connected machines using TCP/IP (IPX is also possible, but modern Windows might not support it anymore).
Thank you for a detailed reply. This sounds good, however setting up windows 95 to it seems more difficult than in other virtual machine softwares. Do you know where I could download UniPcemu windows 95 ready pack?
I try to find efficient way to get Destruction Derby 2 multiplayer (Ipx and tcp/ip) playable online globally over internet. And it have to be win95-98 system. I got already it connected inside my own modem lan: viewtopic.php?t=106587
I uploaded a UniPCemu build with config once, but that somehow got taken down, probably because it contained the Windows keyword (it just was UniPCemu executable, SDL2(+_net) dlls and a preconfigured INI, just requiring to add an ISO and a zeroed img file to it.
So apparently even that is too much.
I have a recent commit uploaded here: Re: MartyPC
Although I don't remember if it's a server build. If you configure the SETTINGS.INI to use a network card setting of 0 or above and it complains about the pcap library, it's a non-pcap build.
I'll see if I have time to create a quick build.
If you can afford to install MSYS2 and it's packages (see MSYS2.txt), simply run "make win build SDL2 SDL2_net x64 mingw64 winpcap" inside the UniPCemu folder to compile for 64-bit Windows.
Edit: Quickly compiled a new version of the current commit (and fixed a few small compilation issues too).
The attachment UniPCemu_20250605_2253_win64server.zip is no longer available
Basically, for the base setup:
- Run the executable once, then close it to generate an SETTINGS.INI configuration file.
- Editing SETTINGS.INI, change:
-- Under [XT], search for directserial, nullmodem, nullmodemDCD, directserial,directserialctl(optional) if setting up serial passthrough (from a real serial port into UniPCemu's hayes/nullmodem connection). Set listenport to the TCP port for UniPCemu to be dialed into. modemDTRhangup configures the behaviour when a nullmodem configuration lowers DTR (to hang up the connection).
-- Under [modem], set directserialspeed if needed (bytes/second, like 57600).
-- Under [modem], phonebook0 is 'dialed' when using the nullmodem configuration (raising DTR) or using the modem to dial ATD[T]0. T being optional of course, as per the specification.
The remaining settings under [modem] configure the packet server itself, like credentials and various host configuration settings (IP addresses, required MAC addresses etc.).
It also creates and uses a PACKETSERVER.INI to control IPv4/IPv6 (for dialing in clients) whitelisting and (automatic) blacklisting. If you want to explicitly blacklist an IP in advance, enter the IP address (without dots or colons, prefix-padded to 3 numbers each (like 001 for 1) or simple hexadecimal notation in lower case for IPv6 (8 times 4 hexadecimal digits that are zero-prefixed in the same way (like 00ff0000etc.... for ff:0:etc, etc is literally etcetera here, not something you type into the address)))) and then set the value to the maxlogintries setting (which must be greater than 0). Whitelisting is simply using a negative number. Otherwise, failed login attempts will increase the counter until it reaches the maxloginattempts value, at which point it becomes a blacklist.
Of course, setting maxloginattempts to 0 will disable blacklisting completely, basically whitelisting everyone.
The PACKETSERVER.INI entries are simply based on the detected IPv4/IPv6 address of the clients that connects to the packet server. Blocked clients are literally blocked from logging in until the entry is manually removed from the file (and requires a restart of the packet server to apply). It's also only written when the packet server is terminated by a UniPCemu local restart or by closing the app (re-launching the app will load it back into the application again).
The server will literally convert any IPv4/IPv6 address to the 12 decimal numbers (127.0.0.1 would become 127000000001) or 32 hexadecimal digits for those entries (like 127::1 (numbers in hexadecimal) would become 01270000000000000000000000000001 for example).