diff --git a/src/mess/drivers/victor9k.c b/src/mess/drivers/victor9k.c index 677f5667741..a9bca20faaa 100644 --- a/src/mess/drivers/victor9k.c +++ b/src/mess/drivers/victor9k.c @@ -10,7 +10,6 @@ TODO: - - keyboard - expansion bus - Z80 card - Winchester DMA card (Xebec S1410 + Tandon TM502/TM603SE) @@ -28,6 +27,14 @@ +//************************************************************************** +// MACROS / CONSTANTS +//************************************************************************** + +#define LOG 0 + + + //************************************************************************** // ADDRESS MAPS //************************************************************************** @@ -272,6 +279,13 @@ WRITE8_MEMBER( victor9k_state::via2_pa_w ) */ } +void victor9k_state::update_kback() +{ + int kback = !(!(m_kbrdy && !m_via2_irq) && !(m_kbackctl && m_via2_irq)); + + m_kb->kback_w(kback); +} + WRITE8_MEMBER( victor9k_state::via2_pb_w ) { /* @@ -290,7 +304,8 @@ WRITE8_MEMBER( victor9k_state::via2_pb_w ) */ // keyboard acknowledge - m_kb->kback_w(BIT(data, 1)); + m_kbackctl = BIT(data, 1); + update_kback(); // brightness m_brt = (data >> 2) & 0x07; @@ -299,6 +314,14 @@ WRITE8_MEMBER( victor9k_state::via2_pb_w ) m_cont = data >> 5; } +WRITE_LINE_MEMBER( victor9k_state::via2_irq_w ) +{ + m_via2_irq = state; + + m_pic->ir6_w(m_via2_irq); + update_kback(); +} + WRITE_LINE_MEMBER( victor9k_state::write_ria ) { @@ -360,14 +383,17 @@ WRITE_LINE_MEMBER( victor9k_state::via3_irq_w ) WRITE_LINE_MEMBER( victor9k_state::kbrdy_w ) { - //logerror("KBRDY %u\n", state); + if (LOG) logerror("KBRDY %u\n", state); m_via2->write_cb1(state); + + m_kbrdy = state; + update_kback(); } WRITE_LINE_MEMBER( victor9k_state::kbdata_w ) { - //logerror("KBDATA %u\n", state); + if (LOG) logerror("KBDATA %u\n", state); m_via2->write_cb2(state); m_via2->write_pa6(state); @@ -392,9 +418,12 @@ void victor9k_state::machine_start() save_item(NAME(m_brt)); save_item(NAME(m_cont)); save_item(NAME(m_via1_irq)); + save_item(NAME(m_via2_irq)); save_item(NAME(m_via3_irq)); save_item(NAME(m_fdc_irq)); save_item(NAME(m_ssda_irq)); + save_item(NAME(m_kbrdy)); + save_item(NAME(m_kbackctl)); // patch out SCP self test m_rom->base()[0x11ab] = 0xc3; @@ -499,7 +528,7 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state ) MCFG_DEVICE_ADD(M6522_2_TAG, VIA6522, XTAL_30MHz/30) MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(victor9k_state, via2_pa_w)) MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(victor9k_state, via2_pb_w)) - MCFG_VIA6522_IRQ_HANDLER(DEVWRITELINE(I8259A_TAG, pic8259_device, ir6_w)) + MCFG_VIA6522_IRQ_HANDLER(WRITELINE(victor9k_state, via2_irq_w)) MCFG_DEVICE_ADD(M6522_3_TAG, VIA6522, XTAL_30MHz/30) MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(victor9k_state, via3_pb_w)) diff --git a/src/mess/includes/victor9k.h b/src/mess/includes/victor9k.h index dcc921b6729..89c5c0b1c4b 100644 --- a/src/mess/includes/victor9k.h +++ b/src/mess/includes/victor9k.h @@ -75,9 +75,12 @@ public: m_brt(0), m_cont(0), m_via1_irq(CLEAR_LINE), + m_via2_irq(CLEAR_LINE), m_via3_irq(CLEAR_LINE), m_fdc_irq(CLEAR_LINE), - m_ssda_irq(CLEAR_LINE) + m_ssda_irq(CLEAR_LINE), + m_kbrdy(1), + m_kbackctl(0) { } required_device m_maincpu; @@ -114,6 +117,7 @@ public: DECLARE_WRITE8_MEMBER( via2_pb_w ); DECLARE_WRITE_LINE_MEMBER( write_ria ); DECLARE_WRITE_LINE_MEMBER( write_rib ); + DECLARE_WRITE_LINE_MEMBER( via2_irq_w ); DECLARE_WRITE8_MEMBER( via3_pb_w ); DECLARE_WRITE_LINE_MEMBER( via3_irq_w ); @@ -128,18 +132,25 @@ public: MC6845_UPDATE_ROW( crtc_update_row ); - /* video state */ + DECLARE_WRITE_LINE_MEMBER( mux_serial_b_w ); + DECLARE_WRITE_LINE_MEMBER( mux_serial_a_w ); + + // video state int m_brt; int m_cont; - /* interrupts */ + // interrupts int m_via1_irq; + int m_via2_irq; int m_via3_irq; int m_fdc_irq; int m_ssda_irq; - DECLARE_WRITE_LINE_MEMBER(mux_serial_b_w); - DECLARE_WRITE_LINE_MEMBER(mux_serial_a_w); + // keyboard + int m_kbrdy; + int m_kbackctl; + + void update_kback(); }; #endif