• Please review our updated Terms and Rules here

Tandy 2000 BIOS

eeguru

Veteran Member
Joined
Mar 14, 2011
Messages
1,618
Location
Atlanta, GA, USA
Until the last few days, I had been under the mis-assumption that primary reason for the Tandy 2000 (an IBM 'work-a-like PC') not being compatible with quite a lot of software titles and any non-Tandy provided MS-DOS past 2.11.03, was that the 80186 was the source of the incompatibilities. And fundamentally this idea has merit as the interrupt vectors and base-addresses for integrated peripherals are not at normal PC locations. However after going down a rabbit hole over the past couple days, I've discovered that's not really why.... mostly...

It turns out the machine could, in theory, be made largely BIOS as well as MS-DOS compatible with some creative software engineering. The vector offsets aren't as big of a conflict as I once believed - especially since there are two external 8259 PICs cascaded off the internal PIC. And the few conflicts are with timers not in use.

After disassembling the BIOS, I realized most of the BIOS isn't in the BIOS! There is only 8KB worth of ROM (max 16KB) on the motherboard and it has minimal services. There is int 13h disk support for both floppy and hard-drive but only read sector, reset, calibrate and seek. And only for the purposes of boot-strap as they each stomp the vector table. There is 10h video services, but only for get/set character set and teletype. It seems there is only just enough to get a MBR loaded off disk, allow the MBR to load and install a larger BIOS supplement, and then boot DOS (which is integrated along with the BIOS supplement). I'm fairly certain even int 13h and int 10h gets completely replaced once DOS loads.

I've posted the disassembled and (nearly) fully annotated BIOS source code here if anyone wants to poke around. I didn't finish cleaning up the FDC routines. I'll get around to that later. But the annotated source code re-assembles binary bit-perfect with the exception of 4 instruction encoding fix-ups.

While I don't have it in me this week (or perhaps this year) to disassemble and annotate the loaded boot-strap from MS-DOS 2.11.03, I'll eventually return to is. It may even be possible to eventually run something like FreeDOS on the machine.

-Alan
 
As you've learned, most of the BIOS is loaded from floppy. That's one of the reasons why you can't boot the 2000 with a generic version of MS-DOS.

Tandy built the 2000 assuming that as long as they were MS-DOS compatible, they would be set. The 2000 was faster, had more memory and supported better graphics than the PC/XT line.

In reality, OS calls were too slow and many developers wrote for the IBM hardware, hastening the demise of this, and all the other "MS-DOS" compatible machines (I think the NEC APC was one also).
 
I dumped the 1MB address space of a booted machine to speed up this process. I initially used it to note the vectors and offsets trapped by IO.SYS (@seg 0060h) and MSDOS.SYS (@seg 05E0h). Some quick disassembly of IO.SYS with those entries allowed me to take a look at the hard drive routines in IO.SYS. They share a trait of the ROM hard drive routines in that they do not use DMA for data transfer nor interrupts for waiting. Like most PC IDE routines, they spin on status and PIO move each data block (8-bit wide). Since the machine used a WD1010/WD1100 MFM chipset, the fore-runner of IDE, it should be possible to map an XT-IDE like device straight into the port location used on the T2K, use a device that supports 8-bit mode like a CF card, and get a solid state hard drive with no additional ROM support needed.

I built a 1MB RAM card to fill to 896KB system RAM that works well (just 3 chips). But I originally passed on an IDE card when I saw extensive DMA and IRQ logic in the original schematics. After Tandy Assembly, I'll try to spin a quick XT-IDE style board + RAM for the T2K.
 
In reality, OS calls were too slow and many developers wrote for the IBM hardware, hastening the demise of this, and all the other "MS-DOS" compatible machines (I think the NEC APC was one also).

The APC was PC98-compatible. ISTR that you could get a version of Windows for it as well. Later PC98 machines offered Windows NT. At one time PC98 was the dominant architecture for the Japanese market (about 70% penetration). You still see it on a lot of old Japanese CNC gear (e.g. Mitsubishi).

The business with the BIOS being loaded from disk was also the situation for the Sanyo MC-500 series as well.

While you could get comparability on a BIOS level with almost any x86 box, the 2000 really suffered in the area of low-level hardware conformity. For example, the 80186 integrated DMA is nothing like an 8237. On the other hand, I believe at least one manufacturer avoided all of the 186 integrated peripherals and used legacy peripheral chips to mimic the PC.
 
I dumped the 1MB address space of a booted machine to speed up this process. I initially used it to note the vectors and offsets trapped by IO.SYS (@seg 0060h) and MSDOS.SYS (@seg 05E0h). Some quick disassembly of IO.SYS with those entries allowed me to take a look at the hard drive routines in IO.SYS. They share a trait of the ROM hard drive routines in that they do not use DMA for data transfer nor interrupts for waiting. Like most PC IDE routines, they spin on status and PIO move each data block (8-bit wide). Since the machine used a WD1010/WD1100 MFM chipset, the fore-runner of IDE, it should be possible to map an XT-IDE like device straight into the port location used on the T2K, use a device that supports 8-bit mode like a CF card, and get a solid state hard drive with no additional ROM support needed.

I built a 1MB RAM card to fill to 896KB system RAM that works well (just 3 chips). But I originally passed on an IDE card when I saw extensive DMA and IRQ logic in the original schematics. After Tandy Assembly, I'll try to spin a quick XT-IDE style board + RAM for the T2K.
Hello @eegru,

Sorry to revive this thread, nut can you share a schematic and the chips you used for your replacement RAM board for the Tandy 2000? I have some bad RAM chips but might want to build your board instead of the headache of desoldering!

Thanks!

Josh
 
Back
Top