On Tue, 2003-11-18 at 22:29, Dave Mitton wrote:
Some BOZO
designer had, I assume arrogantly, put all the video
interrupts (vert, horiz retrace, etc) starting at 00020h, which everyone
knows is where MSDOS has it's software interrupts. They were in a PAL or
something, and could not be moved.
Well, I won't defend the quirks of the Rainbow... (more later)
But you're forgetting that the Rainbow 100A design pre-dates the IBM PC, it
was first designed as a CP/M machine. MS-DOS came later.
My apologies to the engineer, I should not have insulted him/her even
from afar, I have no idea what their criteria might
have been, but I
still maintain it was very short sighted. I assume it was decreed
from
'above'.
Whether MSDOS 'winning' (sic) the OS war of the time (vs. CP/M-86) was
obvious or not, MSDOS was in no way ignorable. The 8088 card added to
the Rainbow design post-dates MSDOS (and certainly post dates 86DOS,
which MSDOS 1.25 is, bought from Seattle Computer Products (man I wish I
had saved those 86DOS 0.86 and 1.x manuals!), which *someone* at DEC
must have known about. And if they didn't they weren't paying attention.
It's hard to imagine they chose interrupts 0020h - 002fh by accident;
it's just Good Practice to avoid all possible conflicts, especially when
the cost is essentially zero to do so.
And IBM put interrupts on the PC in places that
Intel's data sheets
documented as RESERVED! IBM did not pay attention to Intel's
recommendations and violated a few of their support device allocations.
Yeah, they were stupid too. I've got two words for the IBM PC ROM code:
ug lee. The biggest steamroller wins.
I remember the MHFU watchdog and the Vertical Retrace
Interupt. The DECnet
kernel basically ran as an interrupt driven background TSR. On the IBM PC
we easily shelled off the 1C clock tick, but on the Rainbow, we had to
build "clever" reentrancy shells around several interrupts to avoid some
wierd stack overflow or reentrancy into the video BIOS.
Ahh... now I get it. I wasn't told even this much back then!!
I do recall some severe stack-depth problem, I had to switch stack
pointers in the I/O drivers somewhere I recall. I think. Wish I had the
code!
The Rainbow at least had a decent UART with a
multicharacter FIFO. I had
no problem doing 19.2kbs using C routines. That stupid XT UART could
barely do 9600 with an optimized state driven assembly routine. UART FIFOs
didn't appear until the IBM PS/2 Model 50.
Yes, when DEC applied themselves without weird non-functional agendas
they made really nice stuff. It made a nice Fido bulletin board (umm but
not the 100A's... :-(