added HLCD0530 device (nw)

This commit is contained in:
hap 2017-05-30 21:41:58 +02:00
parent dbb99ce29f
commit 13ba56b464
3 changed files with 43 additions and 31 deletions

View File

@ -2,10 +2,11 @@
// copyright-holders:hap
/*
Hughes HLCD 0515/0569 LCD Driver
Hughes HLCD 0515 family LCD Driver
0515: 25 columns(also size of buffer/ram)
0569: 24 columns, no DATA OUT pin, display blank has no effect
0530: specifications unknown, pinout seems similar to 0569
TODO:
- read mode is untested
@ -19,6 +20,7 @@
DEFINE_DEVICE_TYPE(HLCD0515, hlcd0515_device, "hlcd0515", "Hughes HLCD 0515 LCD Driver")
DEFINE_DEVICE_TYPE(HLCD0569, hlcd0569_device, "hlcd0569", "Hughes HLCD 0569 LCD Driver")
DEFINE_DEVICE_TYPE(HLCD0530, hlcd0530_device, "hlcd0530", "Hughes HLCD 0530 LCD Driver")
//-------------------------------------------------
// constructor
@ -41,6 +43,11 @@ hlcd0569_device::hlcd0569_device(const machine_config &mconfig, const char *tag,
{
}
hlcd0530_device::hlcd0530_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: hlcd0515_device(mconfig, HLCD0530, tag, owner, clock, 24)
{
}
//-------------------------------------------------

View File

@ -2,7 +2,7 @@
// copyright-holders:hap
/*
Hughes HLCD 0515/0569 LCD Driver
Hughes HLCD 0515 family LCD Driver
*/
@ -14,29 +14,27 @@
// pinout reference
/*
____ ____
ROW0 1 |* \_/ | 40 VDD
ROW1 2 | | 39 OSC
ROW2 3 | | 38 CLOCK
ROW3 4 | | 37 DATA IN
ROW4 5 | | 36 _CS
ROW5 6 | | 35 DATA OUT
ROW6 7 | | 34 COL25
ROW7 8 | | 33 COL24
COL1 9 | | 32 COL23
COL2 10 | HLCD 0515 | 31 COL22
COL3 11 | | 30 COL21
COL4 12 | | 29 COL20
COL5 13 | | 28 COL19
COL6 14 | | 27 COL18
COL7 15 | | 26 COL17
COL8 16 | | 25 COL16
COL9 17 | | 24 COL15
COL10 18 | | 23 COL14
COL11 19 | | 22 COL13
GND 20 |___________| 21 COL12
HLCD 0569 doesn't have DATA OUT, instead it has what seems like OSC OUT on pin 34.
____ ____ ____ ____
ROW0 1 |* \_/ | 40 VDD ROW0 1 |* \_/ | 40 VDD
ROW1 2 | | 39 OSC ROW1 2 | | 39 VDRIVE?
ROW2 3 | | 38 CLOCK ROW2 3 | | 38 OSC
ROW3 4 | | 37 DATA IN ROW3 4 | | 37 CLOCK
ROW4 5 | | 36 _CS ROW4 5 | | 36 DATA IN
ROW5 6 | | 35 DATA OUT ROW5 6 | | 35 _CS
ROW6 7 | | 34 COL25 ROW6 7 | | 34 OSC OUT?
ROW7 8 | | 33 COL24 ROW7 8 | | 33 COL24
COL1 9 | | 32 COL23 COL1 9 | | 32 COL23
COL2 10 | HLCD 0515 | 31 COL22 COL2 10 | HLCD 0569 | 31 COL22
COL3 11 | | 30 COL21 COL3 11 | | 30 COL21
COL4 12 | | 29 COL20 COL4 12 | | 29 COL20
COL5 13 | | 28 COL19 COL5 13 | | 28 COL19
COL6 14 | | 27 COL18 COL6 14 | | 27 COL18
COL7 15 | | 26 COL17 COL7 15 | | 26 COL17
COL8 16 | | 25 COL16 COL8 16 | | 25 COL16
COL9 17 | | 24 COL15 COL9 17 | | 24 COL15
COL10 18 | | 23 COL14 COL10 18 | | 23 COL14
COL11 19 | | 22 COL13 COL11 19 | | 22 COL13
GND 20 |___________| 21 COL12 GND 20 |___________| 21 COL12
OSC is tied to a capacitor, the result frequency is 50000 * cap(in uF), eg. 0.01uF cap = 500Hz.
Internally, this is divided by 2, and by number of rows to get display refresh frequency.
@ -106,8 +104,15 @@ protected:
virtual void set_control() override;
};
class hlcd0530_device : public hlcd0515_device
{
public:
hlcd0530_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
};
DECLARE_DEVICE_TYPE(HLCD0515, hlcd0515_device)
DECLARE_DEVICE_TYPE(HLCD0569, hlcd0569_device)
DECLARE_DEVICE_TYPE(HLCD0530, hlcd0530_device)
#endif // MAME_VIDEO_HLCD0515_H

View File

@ -1665,8 +1665,8 @@ MACHINE_CONFIG_END
/***************************************************************************
Mattel Computer Gin
* NEC uCOM-43 MCU, label D650C 060
* Hughes HLCD0569 LCD driver, 5 by 14 segments LCD panel, no sound
* NEC uCOM-43 MCU, label D650C 060 (die label same)
* Hughes HLCD0530 LCD driver, 5 by 14 segments LCD panel, no sound
***************************************************************************/
@ -1678,7 +1678,7 @@ public:
m_lcd(*this, "lcd")
{ }
required_device<hlcd0569_device> m_lcd;
required_device<hlcd0530_device> m_lcd;
DECLARE_WRITE32_MEMBER(lcd_output_w);
DECLARE_WRITE8_MEMBER(lcd_w);
@ -1689,7 +1689,7 @@ public:
WRITE32_MEMBER(mcompgin_state::lcd_output_w)
{
// uses ROW0-4, COL11-24
display_matrix(26, 8, data, 1 << offset);
display_matrix(24, 8, data, 1 << offset);
}
WRITE8_MEMBER(mcompgin_state::lcd_w)
@ -1721,13 +1721,13 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( mcompgin )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", NEC_D650, 400000) // approximation
MCFG_CPU_ADD("maincpu", NEC_D650, XTAL_400kHz) // TDK FCR400K
MCFG_UCOM4_READ_A_CB(IOPORT("IN.0"))
MCFG_UCOM4_READ_B_CB(IOPORT("IN.1"))
MCFG_UCOM4_WRITE_E_CB(WRITE8(mcompgin_state, lcd_w))
/* video hardware */
MCFG_DEVICE_ADD("lcd", HLCD0569, 1000) // C=?
MCFG_DEVICE_ADD("lcd", HLCD0530, 500) // C=0.01uF
MCFG_HLCD0515_WRITE_COLS_CB(WRITE32(mcompgin_state, lcd_output_w))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
MCFG_DEFAULT_LAYOUT(layout_mcompgin)