hp9k_3xx: misc fixes (nw)

- fix PPOLL logic in human_interface, make HP-UX recognize GPIB floppy drives
- support reading of WMOVE_ACTIVE register in catseye graphics
- add some missing default mappings to ITF keyboard
- fix default interrupt level of 98644A to match HP-UX default configuration
- set SCSI transfer speed in configuration register to 4MB/s, which matches the
  hardware setting
This commit is contained in:
Sven Schnelle 2018-11-22 22:58:13 +01:00
parent 3349e3e990
commit 3a734b6602
5 changed files with 23 additions and 15 deletions

View File

@ -204,7 +204,7 @@ READ16_MEMBER(dio16_98265a_device::io_r)
ret = m_spc->data_read();
break;
case 3:
ret = 0xe8; /* Flush/Configuration register */
ret = 0x88; /* Flush/Configuration register */
break;
}
LOG("io_r: offset=%02X ret=%02X\n",offset, ret);

View File

@ -88,7 +88,7 @@ static INPUT_PORTS_START(hp98644_port)
PORT_DIPSETTING(0x00, DEF_STR(Off))
PORT_DIPSETTING(REG_SWITCHES_MODEM_EN, DEF_STR(On))
PORT_DIPNAME(REG_SWITCHES_INT_LEVEL_MASK << REG_SWITCHES_INT_LEVEL_SHIFT, 0x02, "Interrupt level")
PORT_DIPNAME(REG_SWITCHES_INT_LEVEL_MASK << REG_SWITCHES_INT_LEVEL_SHIFT, 0x02 << REG_SWITCHES_INT_LEVEL_SHIFT, "Interrupt level")
PORT_DIPSETTING(0 << REG_SWITCHES_INT_LEVEL_SHIFT, "3")
PORT_DIPSETTING(1 << REG_SWITCHES_INT_LEVEL_SHIFT, "4")
PORT_DIPSETTING(2 << REG_SWITCHES_INT_LEVEL_SHIFT, "5")

View File

@ -155,7 +155,8 @@ WRITE_LINE_MEMBER(human_interface_device::reset_in)
void human_interface_device::update_gpib_irq()
{
irq3_out((m_gpib_irq_line || (m_ppoll_sc & PPOLL_IR)) ? ASSERT_LINE : CLEAR_LINE);
irq3_out((m_gpib_irq_line ||
((m_ppoll_sc & (PPOLL_IR|PPOLL_IE)) == (PPOLL_IR|PPOLL_IE))) ? ASSERT_LINE : CLEAR_LINE);
}
WRITE_LINE_MEMBER(human_interface_device::gpib_irq)
@ -171,11 +172,13 @@ WRITE_LINE_MEMBER(human_interface_device::gpib_dreq)
WRITE8_MEMBER(human_interface_device::ieee488_dio_w)
{
if (m_ieee488->atn_r() || m_ieee488->eoi_r())
return;
if ((m_ppoll_mask & ~data) && (m_ppoll_sc & PPOLL_IE)) {
LOG("%s: PPOLL triggered\n");
m_ieee488->host_atn_w(1);
m_ieee488->host_eoi_w(1);
m_ppoll_sc |= PPOLL_IR;
LOG("%s: parallel poll triggered\n", __func__);
if (m_ppoll_sc & PPOLL_IE)
m_ppoll_sc |= PPOLL_IR;
update_gpib_irq();
}
}
@ -202,13 +205,14 @@ WRITE8_MEMBER(human_interface_device::gpib_w)
if (m_ppoll_sc & PPOLL_IE) {
LOG("%s: start parallel poll\n", __func__);
m_ieee488->host_atn_w(0);
m_ieee488->host_eoi_w(0);
ieee488_dio_w(space, 0, m_ieee488->dio_r(space, 0));
}
break;
case 4:
m_ppoll_mask = data;
break;
default:
break;
}
LOG("gpib_w: %s %02X = %02X\n", machine().describe_context().c_str(), offset, data);
}

View File

@ -250,7 +250,7 @@ INPUT_PORTS_START( itf_basic )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F2") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F1") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Stop")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Stop") PORT_CODE(KEYCODE_RWIN) PORT_CHAR(UCHAR_MAMEKEY(RWIN))
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Print/Enter")
// keycodes a0..af
@ -283,8 +283,8 @@ INPUT_PORTS_START( itf_basic )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{')
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|')
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Insert Char")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Delete Char")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Insert Char") PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Delete Char") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL))
// keycodes d0..df
PORT_START("COL5")
@ -295,7 +295,7 @@ INPUT_PORTS_START( itf_basic )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"')
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Home") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME))
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Prev")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Prev") PORT_CODE(KEYCODE_PGUP) PORT_CHAR(UCHAR_MAMEKEY(PGUP))
// keycodes e0..ef
PORT_START("COL6")
@ -306,7 +306,7 @@ INPUT_PORTS_START( itf_basic )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Select") PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD))
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Next")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Next") PORT_CODE(KEYCODE_PGDN) PORT_CHAR(UCHAR_MAMEKEY(PGDN))
// keycodes f0..ff
PORT_START("COL7")
@ -369,7 +369,7 @@ INPUT_PORTS_START( itf_basic )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F10") PORT_CODE(KEYCODE_F10) PORT_CHAR(UCHAR_MAMEKEY(F10))
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F11") PORT_CODE(KEYCODE_F11) PORT_CHAR(UCHAR_MAMEKEY(F11))
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.')
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F9") PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9))
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB_PAD) PORT_CHAR(9)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F12") PORT_CODE(KEYCODE_F12) PORT_CHAR(UCHAR_MAMEKEY(F12))

View File

@ -878,6 +878,10 @@ READ16_MEMBER(catseye_device::ctrl_r)
}
switch(offset) {
case TOPCAT_REG_WMOVE_ACTIVE:
ret = 0;
break;
case TOPCAT_REG_ENABLE_BLINK_PLANES:
ret = m_blink_enable;
break;