VOGONS


First post, by dja4055

User metadata
Rank Newbie
Rank
Newbie

Hi everyone, am restoring an excellent condition vintage Tandy 2500XL but unfortunately has the PSSJ at 1E0 instead of C0. So far have managed to get some Sierra games working with the correct sound (ie. ones that use Tandy3VD.Drv or copying the TandyXL.DRV file from LSL5), but I need to know if these other games have already been patched and/or how hard would be to patch these to work correctly as they use other forms of "drivers" or embedded in the executables:

- Space Quest 2 and 3 or AGI / later SCI games
- Zeliard
- Silpheed
- Thexder / Thexder 2 Firehawk
- Oils well
- Early Dynamix games Willy Beamish / A-10 Tank Killer / Stellar 7 / Heart of China / Rise of the Dragon
- Airborne Ranger
- F-15 Strike Eagle 2 with the "mission disk" that has different executables
- Prince of Persia 1 and 2
- Bubble Bobble
- Indianapolis 500
- Stunts
- 4D Boxing

Any feedback/comments on how to go in the right direction appreciated... I have basic skills at hex editing / x86 assembler.

Reply 1 of 15, by matze79

User metadata
Rank l33t
Rank
l33t

Does it have a 386 CPU ?

Then you can use Redirection TSR Software.

https://github.com/JKnipperts/TNDY
https://www.retrokits.de/index.php/tndy-3-voice-soundcard/

https://www.retrokits.de - blog, retro projects, hdd clicker, diy soundcards etc
https://www.retroianer.de - german retro computer board

Reply 2 of 15, by dja4055

User metadata
Rank Newbie
Rank
Newbie
matze79 wrote on 2022-05-18, 19:59:
Does it have a 386 CPU ? […]
Show full quote

Does it have a 386 CPU ?

Then you can use Redirection TSR Software.

https://github.com/JKnipperts/TNDY
https://www.retrokits.de/index.php/tndy-3-voice-soundcard/

Its a 286.

Reply 3 of 15, by Jo22

User metadata
Rank l33t++
Rank
l33t++

Hm. Patching seems to be the only option on a 286.

I mean, in theory, illegal instructions could be intercepted on a 286 already.
That's what EMU386 does, it installs an exception handler for 386 instructions.

But I don't know if that works on a pure 286.
I mean, with external logic on the ISA bus it might be possible to implement 386 style "hooks" in a 286 PC.

Something like that was done to support PC-MOS/386 on 286s.
According to some text files / the manual, external MMU logic was available to provide PC-MOS memory management on a 286.

Okay, that seems off-topic at first, but I/O ports are nothing more than 1-bit wide (Edit: Byte) locations in memory. A bit like tiny registers or flip-flops.
So a similar logic might help to re-map one I/O port to another one. Or another position.

Anyway, these arw just ideas. A 386 upgrade-board fir the 286 socket would solve even more issues.

Last edited by Jo22 on 2022-05-18, 23:47. Edited 1 time in total.

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 6 of 15, by Jo22

User metadata
Rank l33t++
Rank
l33t++

^I second that. FTP servers are a PITA to access from an ordinary PC these days or a mobile device.
None of the current browsers do support FTP anymore.
They don't even show a warning. They just act as if the URL wasn't there. 🙁

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 8 of 15, by carlostex

User metadata
Rank l33t
Rank
l33t

I can't recall exactly from memory, but most of the mentioned games in the OP are

out c0h, al 

which is basically a 2 byte instruction. Patching to 1E0h is more involved:

mov dx, 1e0h
out dx, al

4 bytes right there. Unless there's a couple of NOP's in the sound subroutine it will be a gargantuous or might be actually impossible to send data to 1E0h instead of 0C0h. So this depends a lot on the game.

I do recall however that at least Prince of Persia 2 has direct support for later Tandy PC's. I do remember seeing the routines that sent the data to 1E0h.

Reply 11 of 15, by keenerb

User metadata
Rank Oldbie
Rank
Oldbie

I may be mistaken about that ftp site anyway. The tandy nano is an add-on card that brings tandy sound to other systems.

I thought that the ftp site was patched games for 2c0 port but I"m not certain anymore.

Reply 12 of 15, by keenerb

User metadata
Rank Oldbie
Rank
Oldbie

OK it looks like I was mistaken, those patches aren't to change the port.

I have a tandy third-party soundcard that I've installed on my Sensation 2 at the default port (C0h) and it doesn't actually interfere with anything (SO FAR), despite that being the supposed second DMA controller port. In other words, it just works (so far) with the normal tandy apps without any magic drivers required.

If you could manage to find one for sale you could try to do the same.

You could also order a few boards and make one or two yourself, from https://github.com/matze79/Tandy-Nano .

Sorry I couldn't be of more help.

Reply 13 of 15, by bakemono

User metadata
Rank Oldbie
Rank
Oldbie
carlostex wrote on 2022-05-19, 06:47:
I can't recall exactly from memory, but most of the mentioned games in the OP are […]
Show full quote

I can't recall exactly from memory, but most of the mentioned games in the OP are

out c0h, al 

which is basically a 2 byte instruction. Patching to 1E0h is more involved:

mov dx, 1e0h
out dx, al

4 bytes right there. Unless there's a couple of NOP's in the sound subroutine it will be a gargantuous or might be actually impossible to send data to 1E0h instead of 0C0h. So this depends a lot on the game.

The usual way to patch a small piece of code with a larger one is to stash the new code elsewhere and overwrite the old code with a CALL instruction. Since a CALL instruction is also more than 2 bytes, that just means you need to overwrite another instruction next to the OUT as well (and be sure to incorporate this other instruction into the patch routine).

It's not bad if there are only a few OUTs that need to be patched. If there are dozens scattered throughout the program, and the instruction next to the OUT isn't always the same then it can become very time consuming...

again another retro game on itch: https://90soft90.itch.io/shmup-salad

Reply 14 of 15, by bakemono

User metadata
Rank Oldbie
Rank
Oldbie
keenerb wrote on 2022-05-20, 02:15:

I have a tandy third-party soundcard that I've installed on my Sensation 2 at the default port (C0h) and it doesn't actually interfere with anything (SO FAR), despite that being the supposed second DMA controller port.

Port C0 is the address register for DMA channel 4, which I don't think is actually used for anything since channel 4 is reserved for the 'cascade'. And it's a write-only register for both the DMA controller and the SN76489, right? Maybe there isn't any possibility for a conflict.

again another retro game on itch: https://90soft90.itch.io/shmup-salad

Reply 15 of 15, by Cloudschatze

User metadata
Rank Oldbie
Rank
Oldbie

Concerning Sierra games and the Tandy 2500-series (and 1000 RSX):

  • AGI Titles - Patch the Sierra executable (requires decryption), replacing the relevant "out c0h" (E6 C0) instructions with "int c0h" (CD C0) instructions. Run the modified executable with the -e and -t command-line parameters in conjunction with Scali's "SNDTSR" interrupt handler/redirector or similar.
  • SCI0 Titles - Supported via NewRisingSun's modified TANDY.DRV driver (01/29/1990)
  • SCI0.1 Titles - Supported via Sierra's aftermarket TANDYXL.DRV driver (12/18/1990).
  • SCI1 Titles - Native support via the TANDY3VD.DRV driver
  • SCI1.1 Titles - Native support via the TANDY3V.DRV and AUDTANDY.DRV driver combination

The patching + ISR method described for the AGI titles is similarly applicable to the non-Sierra games that were mentioned, assuming the appropriate sound routines are identified and modified accordingly.