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.jpgTests 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).
// 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;
}