VOGONS


First post, by matze79

User metadata
Rank l33t
Rank
l33t

Hi all,

I’ve put together a small TSR that plays Tandy/PCjr sound on a regular AdLib or OPL2 card or compatibles.
The idea comes from tndlpt by Peter De Wachter: EMM386 traps the writes to port 0C0h, and my code turns them into OPL2 register writes.
That way, games that only support Tandy sound play their music through the AdLib.

What it does:
The three tone channels of the SN76489 go to OPL channels 0–2, with pitch and volume converted. Since both chips run at 3.58 MHz, the pitch comes out practically exact.
White noise is played on the snare in rhythm mode, periodic noise as a tone on channel 3.
Besides 0C0h it also traps the TNDY ports 1E0h and 2C0h, and 205h only with /205 (IBM PS/1).
Takes about 2 KB of memory and can be loaded high with LH.

You need EMM386 from DOS 6.x or Win95 (version 4.46 or later), so the minimum system is a 386 at 12 MHz or faster.

TNDOPL            load, AdLib at 388h
TNDOPL /A:228 load, OPL at another base port (e.g. SB FM at 220h+8)
TNDOPL /LPT1 output to an OPL2LPT on LPT1 (LPT2/LPT3 too)
TNDOPL /NOC0 skip the EMM386 0C0h unlock, trap TNDY ports only
TNDOPL /205 also trap TNDY port 205h (off by default) (IBM PS/1)
TNDOPL /V print each loading step (for troubleshooting)
TNDOPL STATUS
TNDOPL UNLOAD

V13.10.2026

The attachment tndopl 13-10-2026.zip is no longer available

V14.10.2026 - LATEST

The attachment TNDOPL 14-10-26.zip is no longer available

*someone noted that Zak McKracken doesn't sound accurate, maybe someone can compare to real Tandy Machine ? Thanks!
(EDIT: i'm trying to work this out, new release adds some fixes. need to aquire the game first)

Reply 1 of 2, by jansakos

User metadata
Rank Newbie
Rank
Newbie

This looks really cool, would like to try it out (when I finally get some free time – not much of it as you can see on progress being made on picovox). Would it be possible to also add support for CMSLPT/Gameblaster card? Can two SAA 1099 be close enough to the Tandy standard?

Reply 2 of 2, by enaiel

User metadata
Rank Member
Rank
Member
matze79 wrote on Yesterday, 18:56:

The idea comes from tndlpt by Peter De Wachter: EMM386 traps the writes to port 0C0h, and my code turns them into OPL2 register writes.

Hi, I've been working on a TSR of my own using Peter Wachter's EMM386 I/O trapping code from ADLiPT for a different project, but your code seems much more easier to work with! Have you decided on a License for your code? Thanks!

VIA C3 Ezra-T 1.0GHz / MSI MS-6368 / Voodoo2+ViRGE GX / SBPro2+YMF744+AWE64 / MT-32+SC-50
Pentium III-S Tualatin 1.40GHz / QDI A10T / Voodoo3 3000+GF4 Ti4200 / Audigy+AU8830