On 11/20/2003 01:19 AM -0600, cctech-request(a)classiccmp.org wrote:
Date: 19 Nov 2003 16:00:12 -0800
From: Tom Jennings <tomj(a)wps.com>
Subject: Re: Dec Rainbow prehistory
On Tue, 2003-11-18 at 22:29, Dave Mitton wrote:
.<snip>..
Yeah, they were stupid too. I've got two words for the IBM PC ROM code:
ug lee. The biggest steamroller wins.
Well it wasn't obvious at first where we were going. I was not involved
with the design of the Rainbow, but I was involved with the New England
Computer Society, a some what professional hobbyist group. Many of us
thought the original IBM PC was not a serious product. Remember it wasn't
until the XT that it got a hard drive.
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!!
We weren't told. I/we had to figure it out. It became quickly apparent
there was a problem, and only by debugging around the system did we figure
out what to do.
The VR routine re-enabled interrupts and continued doing video memory things.
If you interrupted it, for say comm I/O, and then re-enabled interrupts
yourself, and you did not return to it by the next VR interrupt, it would
corrupt itself as it wasn't written for reentrancy.
How we dealt with this, changed over time, as some of my team got
"cleverer" in later releases. But even if it could be made re-entrant, you
really want it to run to completion instead of stack up anyways. A
semaphore shell on that interrupt routine, and cross-checking this flag in
our other interrupts, would make sure it was done before we did any major
time consuming work with interrupts re-enabled.
ohh gawd, you woke the forgotten memory of the shared HW/SW interrupt
vector.... noooo ... I won't go there..... <shreeking>
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... :-(
I ran a FIDOnet on one replacing my S-100 CP/M CBBS system... The later of
which I just sold on eBay a few weeks ago.
Dave.