From cf9d807d182ea0fadf278627901a40fb8b64bc2d Mon Sep 17 00:00:00 2001 From: hap Date: Fri, 10 Mar 2017 21:45:11 +0100 Subject: hlcd0538: correct lcd/interrupt pins (nw) --- src/devices/video/hlcd0538.cpp | 19 +++++++++++-------- src/devices/video/hlcd0538.h | 12 +++++++++--- src/mame/drivers/fidel6502.cpp | 4 ++-- src/mame/drivers/novag6502.cpp | 8 ++++---- 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src/devices/video/hlcd0538.cpp b/src/devices/video/hlcd0538.cpp index 153a6870679..884b2afb6e2 100644 --- a/src/devices/video/hlcd0538.cpp +++ b/src/devices/video/hlcd0538.cpp @@ -8,7 +8,6 @@ 0539: 0 rows, 34 columns TODO: - - LCD pin - the only difference between 0538/0539 is row pins voltage levels? */ @@ -26,7 +25,7 @@ const device_type HLCD0539 = device_creator; hlcd0538_device::hlcd0538_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, u32 clock, const char *shortname, const char *source) : device_t(mconfig, type, name, tag, owner, clock, shortname, source), - m_write_cols(*this) + m_write_cols(*this), m_write_interrupt(*this) { } @@ -50,15 +49,16 @@ void hlcd0538_device::device_start() { // resolve callbacks m_write_cols.resolve_safe(); + m_write_interrupt.resolve_safe(); // zerofill - m_int = 0; + m_lcd = 0; m_clk = 0; m_data = 0; m_shift = 0; // register for savestates - save_item(NAME(m_int)); + save_item(NAME(m_lcd)); save_item(NAME(m_clk)); save_item(NAME(m_data)); save_item(NAME(m_shift)); @@ -81,16 +81,19 @@ WRITE_LINE_MEMBER(hlcd0538_device::write_clk) m_clk = state; } -WRITE_LINE_MEMBER(hlcd0538_device::write_int) +WRITE_LINE_MEMBER(hlcd0538_device::write_lcd) { state = (state) ? 1 : 0; // transfer to latches on rising edge - if (state && !m_int) + if (state && !m_lcd) { - m_write_cols(0, m_shift, ~0); + m_write_cols(0, m_shift, ~u64(0)); m_shift = 0; } - m_int = state; + m_lcd = state; + + // interrupt output follows lcd input + m_write_interrupt(state); } diff --git a/src/devices/video/hlcd0538.h b/src/devices/video/hlcd0538.h index 462a1662792..3d49460b80a 100644 --- a/src/devices/video/hlcd0538.h +++ b/src/devices/video/hlcd0538.h @@ -14,6 +14,10 @@ #define MCFG_HLCD0538_WRITE_COLS_CB(_devcb) \ devcb = &hlcd0538_device::set_write_cols_callback(*device, DEVCB_##_devcb); +// INTERRUPT pin +#define MCFG_HLCD0538_INTERRUPT_CB(_devcb) \ + devcb = &hlcd0538_device::set_write_interrupt_callback(*device, DEVCB_##_devcb); + // pinout reference @@ -22,7 +26,7 @@ +V 1 |* \_/ | 40 R 1 DATA IN 2 | | 39 R 2 CLK 3 | | 38 R 3 - LCD0 4 | | 37 R 4 + LCD 4 | | 37 R 4 GND 5 | | 36 R 5 INTERRUPT 6 | | 35 R 6 C 26 7 | | 34 R 7 @@ -51,22 +55,24 @@ public: // static configuration helpers template static devcb_base &set_write_cols_callback(device_t &device, Object &&object) { return downcast(device).m_write_cols.set_callback(std::forward(object)); } + template static devcb_base &set_write_interrupt_callback(device_t &device, Object &&object) { return downcast(device).m_write_interrupt.set_callback(std::forward(object)); } DECLARE_WRITE_LINE_MEMBER(write_clk); - DECLARE_WRITE_LINE_MEMBER(write_int); + DECLARE_WRITE_LINE_MEMBER(write_lcd); DECLARE_WRITE_LINE_MEMBER(write_data) { m_data = (state) ? 1 : 0; } protected: // device-level overrides virtual void device_start() override; - int m_int; // input pin state + int m_lcd; // input pin state int m_clk; // " int m_data; // " u64 m_shift; // callbacks devcb_write64 m_write_cols; + devcb_write_line m_write_interrupt; }; diff --git a/src/mame/drivers/fidel6502.cpp b/src/mame/drivers/fidel6502.cpp index 1c319eb7c5a..e308260cc52 100644 --- a/src/mame/drivers/fidel6502.cpp +++ b/src/mame/drivers/fidel6502.cpp @@ -2242,12 +2242,12 @@ ROM_START( fexcelv ) // model 6092, PCB label 510.1117A02, sound PCB 510.1117A01 ROM_LOAD("101-1081a01.ic2", 0x0000, 0x8000, CRC(c8ae1607) SHA1(6491ce6be60ed77f3dd931c0ca17616f13af943e) ) // PCB2, M27256 ROM_END -ROM_START( fexcela ) // model 6080, PCB label 510-1099A01(manuf.1985) or 510-1099B01(manuf.1986) +ROM_START( fexcela ) // model EP12, PCB label 510-1099A01 ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD("101-1072a01.ic5", 0xc000, 0x4000, CRC(212b006d) SHA1(242ff851b0841cbec66bbada6a730da021010e2c) ) ROM_END -ROM_START( fexcelb ) // model EP12, PCB label 510-1099A01 +ROM_START( fexcelb ) // model 6080, PCB label 510-1099A01(manuf.1985) or 510-1099B01(manuf.1986) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD("101-1072b01.ic5", 0xc000, 0x4000, CRC(fd2f6064) SHA1(f84bb98bdb9565a04891eb6820597d7aecc90c21) ) // RCA ROM_END diff --git a/src/mame/drivers/novag6502.cpp b/src/mame/drivers/novag6502.cpp index 326c90c9d55..e441ad77336 100644 --- a/src/mame/drivers/novag6502.cpp +++ b/src/mame/drivers/novag6502.cpp @@ -384,12 +384,12 @@ WRITE8_MEMBER(novag6502_state::cforte_mux_w) WRITE8_MEMBER(novag6502_state::cforte_control_w) { - // d0: lcd data - // d1: lcd clock - // d2: lcd interrupt + // d0: HLCD0538 data in + // d1: HLCD0538 clk + // d2: HLCD0538 lcd m_hlcd0538->write_data(data & 1); m_hlcd0538->write_clk(data >> 1 & 1); - m_hlcd0538->write_int(data >> 2 & 1); + m_hlcd0538->write_lcd(data >> 2 & 1); // d3: unused? -- cgit v1.2.3