From 3a734b6602d66863c9388f5455f5d26047a8b7ad Mon Sep 17 00:00:00 2001 From: Sven Schnelle Date: Thu, 22 Nov 2018 22:58:13 +0100 Subject: [PATCH] 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 --- src/devices/bus/hp_dio/hp98265a.cpp | 2 +- src/devices/bus/hp_dio/hp98644.cpp | 2 +- src/devices/bus/hp_dio/human_interface.cpp | 18 +++++++++++------- src/devices/bus/hp_hil/hlekbd.cpp | 12 ++++++------ src/devices/video/catseye.cpp | 4 ++++ 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/devices/bus/hp_dio/hp98265a.cpp b/src/devices/bus/hp_dio/hp98265a.cpp index 15a50f84549..baafc4e14eb 100644 --- a/src/devices/bus/hp_dio/hp98265a.cpp +++ b/src/devices/bus/hp_dio/hp98265a.cpp @@ -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); diff --git a/src/devices/bus/hp_dio/hp98644.cpp b/src/devices/bus/hp_dio/hp98644.cpp index 4147b583c11..004da09b55e 100644 --- a/src/devices/bus/hp_dio/hp98644.cpp +++ b/src/devices/bus/hp_dio/hp98644.cpp @@ -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") diff --git a/src/devices/bus/hp_dio/human_interface.cpp b/src/devices/bus/hp_dio/human_interface.cpp index 61ca1531fb6..6bccebbd27f 100644 --- a/src/devices/bus/hp_dio/human_interface.cpp +++ b/src/devices/bus/hp_dio/human_interface.cpp @@ -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); } diff --git a/src/devices/bus/hp_hil/hlekbd.cpp b/src/devices/bus/hp_hil/hlekbd.cpp index a12ea773f67..1776a59ca8a 100644 --- a/src/devices/bus/hp_hil/hlekbd.cpp +++ b/src/devices/bus/hp_hil/hlekbd.cpp @@ -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)) diff --git a/src/devices/video/catseye.cpp b/src/devices/video/catseye.cpp index c79e3b246f5..bd3cfa66d93 100644 --- a/src/devices/video/catseye.cpp +++ b/src/devices/video/catseye.cpp @@ -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;