Rainbow 100A

Rainbow 100A
MakeDigital Equipment Corporation
ModelRainbow 100
Model NumberPC100-A
Serial NumberWF54026
ProcessorIntel 8088 and Zilog Z80
Bus
Release Date1982
Cost New?
Acquired2024-11-16
Configuration (as collected)Floor stand
VR201. Green (bad cataracts)
64KB memory
LK201 keyboard
RX50 floppy disk drive
LA50 printer
Current ConfigurationUnchanged
StatusOperational
Documentationhttps://bitsavers.org/pdf/dec/rainbow/
Details

The Rainbow was an early attempt by DEC to enter the personal computer market. DEC’s failure in this market ultimately led to DEC’s demise. The Rainbow is based on the Z-80 and Intel 8088 CPUs, so it can run CP/M or MS-DOS.

I was given this particular machine by someone in Ramsbottom, Lancashire. It came from the estate of a radio amateur in the Bury area, now a “Silent Key”. It came with a monitor, keyboard, an LA50 printer, various floppy disks and a set of manuals. This being the most basic A model, does not support a hard disk.

Rainbow 100A as Received Minus the Floor Stand

It came with the following manuals and software:

  1. AA-N575A-TV Rainbow 100 Getting Started
  2. EK-P100E-OM-001 Rainbow 100 Owner’s Manual
  3. EK-P10BR-IN-001 Rainbow 100 Installation Guide with Language ROM Change
  4. AA-P300A-TV Rainbow 100 User’s Guide
  5. EK-0LA50-UG-001 Installing and Using the LA50 Printer
  6. EK-0LA50-RM-002 LA50 Printer Programmer Reference Manual
  7. Rainbow 100 User Kit box, containing:
    • EK-DECRB-IN-001 Floor Stand Installation Guide
    • AA-N649A-TV Rainbow 100 Read Me First with Language ROM Change
    • AA-P300A-TV Rainbow 100 User’s Guide
  8. Rainbow 100 CP/M-86-80 Operating System box, containing:
    • AA-N575A-TV Rainbow 100 Getting Started
    • Shipping protectors for RX50
    • Software box containing:
      • BL-T309B-BV RAINBOW 100 DIAG DSK RX50
      • BL-N651A-BV SYSTEM OVERVIEW BIN RX50
      • BL-N648A-BV CP/M-86/80 V1.0 BIN RX50
      • Unofficial CP/M-86/80 Distribution Backup
    • Software box containing:
      • BG-P876B-BV Language ROM

Sadly the VR201 monitor was suffering badly from screen “cataracts”. While loading the machine into my car one of the floppy disk doors came adrift. When I got it home I found that the pins holding it seem to be missing and likely got lost during the loading process. While there seemed to be some paint marks on the monitor and the keyboard cable, the inside of the machine itself was very clean.

The machine powered on, flashing the keyboard and RX50 lights and turning the fans. The monitor came on but didnot display an image. The diagnostic LEDs on the back displayed 1110110. The online Owner’s Manual does not describe this code, but the paper copy that came with the machine indicated that this was a Video RAM fault.

I have since the restored the machine as detailed in the following blog post.

Restoration History

DateDetails
2024-11-16Visually examined power supply, the electrolytic capacitors showed no leaks or bulges. Tried to fix floppy door but found pins missing.
2024-11-24Replaced E122 (Video RAM), now diagnostic LEDs indicate Main Board Video error.
2024-11-28Fixed RX50 door with a new pin.
2024-12-01Replaced QIKEJECT socket for E89 with normal socket.
2025-03-08H7842 PSU failed, power entry module shorted, replaced PSU with a spare.
2025-03-16Replaced E100 (line buffer static RAM) and the board started working.
2025-04-20Replaced power entry module on the original H7842A Power Supply and reinstalled it.
2025-07-25Fixed cataracts on VR201.
2025-07-28Replaced some capacitors in the VR201.

Repair Reference Information

ROMs

I have a partially annotated disassembled ROM here. The disassembly is incomplete and there is some embedded data in places, I don’t know if I have identified them all, so the disassembly may be incorrect in a few places.

ROM 0: 23-176E4-00, part E89. Disassembly

Logic Analyser Setup

To capture addresses and data from the 8088 use a multiplex mode on the logic analyser. To get the address trigger on the negative edge of ALE. This is a good point to capture the IO/M signal on pin 28 as well. Complete the cycle to get the data from the bus by triggering on the positive edge of DEN, this is the point to capture the RD signal on pin 32 to distinguish reads and writes.

Diagnostic LEDs

LabelD11D10D9D6D5D4D3
Bus bit5764
Diagnostic LED Mapping for 8088

Memory Map

The tables below lists the locations that I have identified in the ROM code and their possible purpose:

AddressDescription
0x0503Video controller is OK if it matches the mask 0x2
0x0505
0x0506
Possibly pointer to a diagnostic message displayed on screen. It is the location in a table of pointers to the actual string.
0x252CStores diagnostic LED values to be displayed
0x2530DC012 Vertical interrupt counter. During self-test a temporary interrupt routine at 0x11E1 counts the number of interrupts.
0x2532Printer status (MPSC). Bits are (starting at LSB):
0: The transmit buffer is empty
1: A character was received
2: Some kind of transmit error relating to SDLC
3: A character was received but there was an error
0x2533Communications status (MPSC). Bits are (starting at LSB):
0: The transmit buffer is empty
1: A character was received
2: Some kind of transmit error relating to SDLC
3: A character was received but there was an error
0x2534
0x2535
Some kind of status byte for the video controller check. If it matches any bits out of the value 0x78 then the video controller is OK. Bits are (starting at LSB):
0: Keyboard TxEMPTY is set
1: Ready to transmit to the Communications port (MPSC)
2: Ready to transmit to the Printer port (MPSC)
3:
4: Vertical interrupts are being delivered
5: Something about finding FFFF in the ROM
7: Possibly used as a canary to spot RAM errors
Upper byte
Seems to count outstanding characters to transmitted or received (keyboard and MPSC channels). It is cleared with word operations on 0x2534.
General Memory Locations

For the keyboard control block

AddressDescription
0x2536Possibly a count of the number of times to send the keyboard transmit buffer character.
0x2537Transmit buffer.
0x253AThe last status read from the keyboard status register.
0x253BRead buffer
Keyboard Control Block

For the MPSC Communications Port Control Block

AddressDescription
0x253C
0x253D
DC012 vertical interrupt counter
0x253EContents of RR0 from MPSC chip
0x253FContents of RR1 from MPSC chip
0x2540Read buffer
MPSC Communications Port Control Block

For the MPSC Printer Port Control Block

AddressDescription
0x2541
0x2542
DC012 vertical interrupt counter
0x2543Contents of RR0 from MPSC chip
0x2544Contents of RR1 from MPSC chip
0x2545Read buffer
MPSC Printer Port Control Block