The Rainbow-100 boots now! See attached picture of the Diagnostic Disk - live from the emulator.

https://dl.dropboxusercontent.com/u/37819653/Diagnostic_Disc_Menu.jpg

Tests are capable enough to reveal very subtle emulation bugs - and they do ;-)

Other CP/M or DOS (2.x) disks begin to boot, but soon hang (8088 HLT and / or Z80 HLT). In fact, the Diag Disk is the only one booting.

Is anybody willing to lend a hand? Need help with slot devices and the debugging of the Z80 or 8088 loaders in the context of MESS.

Currently, my code is not mature enough to submit to SVN. A hack to fill the keyboard buffer must be used. Most progress has been made in the field of the WD17xx hookup.

The processor flags INT88L + INTZ80L could still be wrong (these states are reused elsewhere).

Code
// 8088 reads port 0x00. See page 133 (4-34)
READ8_MEMBER(rainbow_state::i8088_latch_r)
{
//    printf("Read %02x from 8088 mailbox\n", m_8088_mailbox);
	m_i8088->set_input_line(INPUT_LINE_INT0, CLEAR_LINE);

	INTZ80L = false; // WAS:  INT88L = false;
	return m_8088_mailbox;
}

// 8088 writes port 0x00. See page 133 (4-34)

// Interprocessor interrupt from the 8088 CPU. The vector placed 
// on the bus is F7 (hex) which causes a 
// RST 30 instruction to be executed in interrupt mode 0.
WRITE8_MEMBER(rainbow_state::i8088_latch_w)
{
//    printf("%02x to Z80 mailbox\n", data);
	m_z80->set_input_line_and_vector(0, ASSERT_LINE, 0xf7);
	m_z80_mailbox = data;

    INTZ80L = true;
}

// Z80 reads port 0x00
// See page 134 (4-35)
READ8_MEMBER(rainbow_state::z80_latch_r)
{
//    printf("Read %02x from Z80 mailbox\n", m_z80_mailbox);
	m_z80->set_input_line(0, CLEAR_LINE);

	INT88L = false; // WAS: INTZ80L = false;
	return m_z80_mailbox;
}

// Z80 writes to port 0x00 - see page 134 (4-35) of TM.
WRITE8_MEMBER(rainbow_state::z80_latch_w)
{
	//    printf("%02x to 8088 mailbox\n", data);
	m_i8088->set_input_line_and_vector(INPUT_LINE_INT0, ASSERT_LINE, 0x27);
	m_8088_mailbox = data;

	INT88L = true;
}

Last edited by Bavarese; 11/29/13 03:45 PM.