eeguru
Veteran Member
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
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