I have an idea why the 8251 does not pass the BIOS check on a Rainbow-100

The startup code uses an internal loopback to check the communication, printer and keyboard ports (all serial) for framing errors.

Bit 4 and bit 5 in 8088 register 0A (diagnostic write) are used in the process.

This is done in a way that the output of one port is connected to another when bit 5 is set.

We neither have COMM, PRINTER, nor loopback connected to anything. So the Rainbow startup code literally falls apart (as tests are incremental; COM -> PRN -> KBD -> FLOPPY ...)

Bit 4 uses a similar concept to validate the video and floppy controller signals with the help of a printer port.

Info pieces are from chapter 2.1.7.2 and 2.1.7.3 of AA-V523A-TV (PDF March 83).

Code
WRITE8_MEMBER(rainbow_state::diagnostic_w) // 8088 (port 0A WRITTEN). Fig.4-28 + table 4-15
...
	// * BIT 4: DIAG LOOPBACK (0 at power-up; 1 directs RX50 and DC12 output to printer port)

	/* 2.1.7.3 DIAGNOSTIC LOOPBACK Maintenance Bit - The DIAGNOSTIC LOOPBACK bit is a
	    maintenance bit that is cleared on power - up.This bit, when set to 1,
		allows the floppy data separator and the serial video output to be tested
		through the use of the printer port. The following table shows how signals are routed.
		
		DIAGNOSTIC LOOPBACK = 0		DIAGNOSTIC LOOPBACK = 1		SIGNAL INPUT
		SIGNAL SOURCE				SIGNAL SOURCE		TO
		FROM					FROM				
		PRT RDATA(J2)				VIDEO OUT		PRT RXD(7201)
		PRT RXTXC				500 KHZ			PRT RXTXC(7201)	
		MASTER CLK				250 KHZ			VIDEO CLK(DCO11)
		FLOPPY RAW DATA				PRT TXD(7201)		FLOPPY DATA SEPARATOR

		During Diagnostic Loopback, the - TEST input of the 8088 is connected to the
		interrupt output of the MPSC.Thus, using the 8088's WAIT instruction in a
		polled I / O loop, the diagnostic firmware will be able to keep up with the
		500 Kb data rate on the MPSC.
    */
	if (data & 16)
	{
		printf("\nWARNING: UNEMULATED DIAG LOOPBACK (directs RX50 and DC12 output to printer port) ****");
	}

	if (data & 32)
	{
		/* BIT 5: PORT LOOPBACK (1 enables loopback for COMM, PRINTER, KEYBOARD ports)
		2.1.7.2. of AA-V523A-TV (PDF Mar83) says how the signals are routed:
		port_loopback_0  |  port_loopback_1   SIGNAL INPUT TO
		COMM RCV DATA.......COMM TXD..........COMM_RXD
		PRT  RCV DATA.......KBD TXD...........PRT RDATA
		KBD  RCV DATA.......PRT TXD...........KBD RXD
		*/
		printf("\nWARNING: UNEMULATED PORT LOOPBACK (COMM, PRINTER, KEYBOARD ports) ****");
	}

I could use some help here ;-)

-----
Newest disassemblies of low and high ROM

23-022e5-00.bin
23-020e5-00.bin

https://dl.dropboxusercontent.com/u/37819653/2014_07_Rainbow_ROM_DISASSEMBLED.7z

Last edited by Bavarese; 07/17/14 03:26 PM.