(Since the whole point of collecting and restoring old computers is to
demonstrate and *use* them, I hope Jay will find this programming
question on-topic...)
I am currently in the middle of programming some vintage-era MS-DOS
software that has the following requirements:
- Manipulate the speaker to produce arbitrary tones
- Update the screen in arbitrary locations (text mode; multiple screen
pages if available)
- Get single-key input from the user, including sensing keypresses from
"inert" keys like shift and capslock (by themselves as well as in
conjunction with other keypresses)
I know how to do all of that, both high-level (DOS and BIOS calls, ANSI
calls, etc.) and low-level (writing directly to b800:0000, screwing with
the 8253 timer, hooking IRQ 9 and monitoring port 60h, etc.). My
problem is that I'm not sure how much I can "get away" with doing things
low-level and still have it work on machines that were less-than-100%
IBM PC-compatible. If anyone who programmed for early IBM PC
semi-compatible machines from 1981-1985 (Dave? Chuck?), I'd appreciate
any thoughts or advice on what to watch out for. Obviously I'd love to
code it ALL low-level, since that will result in the fastest program
performance for the user, but not if it will lock out 20% or more of all
clones made before 1986.
For example, let's say I go completely low-level, all direct hardware
access, compiling and testing on my IBM 5160 with CGA. Based on my past
experience with clones, I am pretty sure of the following behavior:
- IBM PC 5160: Should work perfectly
- IBM PC 5150: Should work perfectly
- AT&T PC 6300/Olivetti M24: Should work perfectly, although certain key
combinations are known to "stick" without special handling
- Sperry PC: Keyboard scan codes might be different?
- Tandy 1000: Keyboard scan codes differ in 2 or 3 places
- IBM PCjr: Keyboard scan codes are *definitely* different
- DEC Rainbow: Keyboard different? Heard that display was
vector-graphics based; would direct screen writes in text mode even work?
- Tandy 2000: Again, wasn't the screen vector-based?
...etc. That kind of thing.
I guess what I'm asking is something like, "Is it worth attempting to
support 'MS-DOS only' machines made before Compaq, or were they just too
goofy and limited to bother with?" Maybe a follow-up question is, "How
many MS-DOS-only machines were made before 99.9% IBM PC compatibility
became the norm after Compaq's example?"
PS: I'm on a deadline for this project, which is why I care about
wasting time trying to support four different ways of doing the same
thing (like screen access, for example: 1. ansi.sys, 2. DOS calls, 3.
BIOS calls, 4. direct screen writes).
--
Jim Leonard (trixter at
oldskool.org)
http://www.oldskool.org/
Help our electronic games project:
http://www.mobygames.com/
Or check out some trippy MindCandy at
http://www.mindcandydvd.com/
A child borne of the home computer wars:
http://trixter.wordpress.com/