First post, by MidnightSun
I have some questions regarding the DOSBox modem emulation and setup for a specific game called Pyrosaurus. My current setup is partially functional but there are some issues that I would like to resolve. My goal with this is to modify/reverse engineer part of this “multiplayer” process to hopefully re-enable it. I will note here that all networking is using local host (127000000001).
My issue is that I’m not receiving any data from the game and any data sent to the game does not appear to affect it.
Here is my system info - if more information is needed I’ll add here:
OS: Windows 10
Processor: intel i5
Memory: 4 GB
Graphics: intel integrated
I have the modem configured in dosbox .cfg as:
I am connecting to DOSBox from Pyrosaurus using attention string ATNET1 as that seemed to be the best 2 way communication?
Pyrosaurus game and context for issue
Pyrosaurus was released by Evryware in 1997 . The goal of the game is to create and train fire breathing dinosaurs and create a team. The player then sends off the team to compete in one match. 24 hours later the “contest” is available for download. The player then downloads the contest and watches the match, after which point the player can tweak their team and send it in again.
The “send” process outlined above is to direct the modem to dial a 800 phone number stored in plain-text configuration. Files are transferred somehow (this is what I’m trying to figure out), then the modem hangs up.
My goal is to write a server which mimicks the remote server which the Pyrosaurus game connects to.
Here is a diagram of this approach
Python server <—[Dosbox <->[PYRO.EXE]]
Python server listens on port 23.
Pyrosaurus comes with a modem test menu which also does some other functions behind the scenes. My testing and screenshots are centered around this menu.
I press the Test button and the testing process begins.
Now I’m not sure if this matters or not but the “send” process is handled by an external program called MODEM.EXE . This appears to be a customized Microsoft modem communication utility. I’m not sure what parameters are being sent to it but I’m nearly certain it depends on PYRO.EXE being loaded, as MODEM.EXE is run synchronously when it is called then exits when it’s done.
First screenshot is of the modem configuration within the game.
Here is the general process of what happens currently:
Test button is pressed on modem setup menu And the following log is generated by dosbox
Command sent to modem: ->ATNET1<-
Modem response: OK
Command sent to modem: ->ATS7=45<-
Modem response: OK
Command sent to modem: ->ATDT127000000001<-
Connecting to host 127.000.000.001 port 23
Modem response: CONNECT 57600
Second screenshot is the screen in the game that corresponds to this. This is a great result so far and this is where all of my questions stem from.
At this point the game appears to be waiting for data. Python Server first sends IAC DO BINARY (FF F1 1) then sends actual data to DOSBox, but Pyrosaurus does not appear to respond. Python server never receives any information from Pyrosaurus or DOSBox.
Third screenshot displays after the connection times out (50 seconds)
After the 50 seconds timeout the DOSBox log shows similar information
MODEM: Telnet client sent IAC 241
Modem: Entering command mode(escape sequence)
Modem response: OK
Command sent to modem: ->ATH0<-
Modem response: NO CARRIER
Serial1: Modem listening on port 2323...
- How can I be sure that DOSBox is actually sending data to Pyrosaurus and any data sent by Pyrosaurus is passed through DOSBox to Python Server?
- How can I validate that Pyrosaurus received any data?
- Is the above use case supported by DOSBox?
- Is there a better configuration that I should be using for the modem or other part of DOSBox?
- Are there any utilities that could help with this? Does the debugger have something in it that I’ve missed? What interrupt should I be looking for?
Thank you for any help you can provide!