Previous 15994 Revisions Next

r11264 Thursday 21st April, 2011 at 16:19:08 UTC by Sandro Ronco
[LCMATE2] Hooked up the lcd controller and added keyboard input. [Sandro Ronco]
[src/mess/drivers]lcmate2.c

src/mess/drivers/lcmate2.c
r11263r11264
44
55        17/04/2011 Initial driver by Robbbert, using info supplied by
66        DMEnduro. He owns one of these machines.
7        21/04/2011 Hooked up the lcd controller and added keyboard
8        input. [Sandro Ronco]
79
810        If you have further info, this driver is yours!
911
r11263r11264
2628
2729#include "emu.h"
2830#include "cpu/z80/z80.h"
31#include "machine/rp5c01.h"
32#include "video/hd44780.h"
2933#include "sound/beep.h"
34#include "rendlay.h"
3035
3136
3237class lcmate2_state : public driver_device
r11263r11264
3540   lcmate2_state(running_machine &machine, const driver_device_config_base &config)
3641      : driver_device(machine, config),
3742   m_maincpu(*this, "maincpu"),
38   //m_rtc(*this, "rtc"),
43   m_lcdc(*this, "hd44780"),
44   m_rtc(*this, "rtc"),
3945   m_beep(*this, "beep")
4046   { }
4147
4248   required_device<cpu_device> m_maincpu;
43   //required_device<cpu_device> m_rtc;
44   required_device<cpu_device> m_beep;
49   required_device<hd44780_device> m_lcdc;
50   required_device<rp5c01_device> m_rtc;
51   required_device<device_t> m_beep;
52
53   virtual bool screen_update(screen_device &screen, bitmap_t &bitmap, const rectangle &cliprect);
54
55   DECLARE_WRITE8_MEMBER( beep_w );
56   DECLARE_READ8_MEMBER( kb_r );
4557};
4658
59READ8_MEMBER( lcmate2_state::kb_r )
60{
61   static const char *const bitnames[] = {"LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6", "LINE7"};
62   UINT8 data = 0xff;
4763
64   for (int line=0; line<8; line++)
65      if (!(offset & (1<<line)))
66         data &= input_port_read(machine(), bitnames[line]);
67
68   return data;
69}
70
71WRITE8_MEMBER( lcmate2_state::beep_w )
72{
73   beep_set_state(m_beep, data&0x40);
74}
75
4876static ADDRESS_MAP_START(lcmate2_mem, AS_PROGRAM, 8, lcmate2_state)
4977   ADDRESS_MAP_UNMAP_HIGH
5078   AM_RANGE( 0x0000, 0x7fff ) AM_ROM
51   AM_RANGE( 0x8000, 0x9fff ) AM_RAM
79   AM_RANGE( 0x8000, 0x9fff ) AM_RAM   AM_MIRROR(0x6000)
5280ADDRESS_MAP_END
5381
5482static ADDRESS_MAP_START(lcmate2_io, AS_IO, 8, lcmate2_state)
5583   ADDRESS_MAP_UNMAP_HIGH
56   ADDRESS_MAP_GLOBAL_MASK(0xff)
84   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE("rtc", rp5c01_device, read, write)
85   AM_RANGE(0x1000, 0x1000) AM_WRITE(beep_w)
86
87   AM_RANGE(0x3000, 0x3000) AM_DEVWRITE("hd44780", hd44780_device, control_write)
88   AM_RANGE(0x3001, 0x3001) AM_DEVWRITE("hd44780", hd44780_device, data_write)
89   AM_RANGE(0x3002, 0x3002) AM_DEVREAD("hd44780", hd44780_device, control_read)
90   AM_RANGE(0x3003, 0x3003) AM_DEVREAD("hd44780", hd44780_device, data_read)
91
92   //keyboard read, offset used as matrix
93   AM_RANGE(0x5000, 0x50ff) AM_READ(kb_r)
5794ADDRESS_MAP_END
5895
5996/* Input ports */
6097static INPUT_PORTS_START( lcmate2 )
98   PORT_START("LINE0")
99      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("UP")      PORT_CODE(KEYCODE_UP)         PORT_CHAR(UCHAR_MAMEKEY(UP))
100      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("ENTER")   PORT_CODE(KEYCODE_ENTER)      PORT_CHAR(13)
101      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("ESC")   PORT_CODE(KEYCODE_ESC)         PORT_CHAR(UCHAR_MAMEKEY(ESC))
102      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SHIFT")   PORT_CODE(KEYCODE_LSHIFT)      PORT_CHAR(UCHAR_SHIFT_1)
103      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("CTRL")   PORT_CODE(KEYCODE_LCONTROL)      PORT_CHAR(UCHAR_SHIFT_2)
104      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q")      PORT_CODE(KEYCODE_Q)         PORT_CHAR('q')   PORT_CHAR('Q')
105      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1")      PORT_CODE(KEYCODE_1)         PORT_CHAR('1')   PORT_CHAR('!')
106      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_UNUSED
107
108   PORT_START("LINE1")
109      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(",")      PORT_CODE(KEYCODE_COMMA)      PORT_CHAR(',')   PORT_CHAR('/')
110      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K")      PORT_CODE(KEYCODE_K)         PORT_CHAR('k')   PORT_CHAR('K')
111      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("CAPSLOCK")   PORT_CODE(KEYCODE_CAPSLOCK)   PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
112      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z")      PORT_CODE(KEYCODE_Z)         PORT_CHAR('z')   PORT_CHAR('Z')
113      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A")      PORT_CODE(KEYCODE_A)         PORT_CHAR('a')   PORT_CHAR('A')
114      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W")      PORT_CODE(KEYCODE_W)         PORT_CHAR('w')   PORT_CHAR('W')
115      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2")      PORT_CODE(KEYCODE_2)         PORT_CHAR('2')   PORT_CHAR('@')
116      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_UNUSED
117
118   PORT_START("LINE2")
119      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(".")      PORT_CODE(KEYCODE_STOP)         PORT_CHAR('.')   PORT_CHAR('?')
120      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O")      PORT_CODE(KEYCODE_O)         PORT_CHAR('o')   PORT_CHAR('O')
121      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("[")      PORT_CODE(KEYCODE_OPENBRACE)   PORT_CHAR('[')   PORT_CHAR('{')
122      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X")      PORT_CODE(KEYCODE_X)         PORT_CHAR('x')   PORT_CHAR('X')
123      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S")      PORT_CODE(KEYCODE_S)         PORT_CHAR('s')   PORT_CHAR('S')
124      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E")      PORT_CODE(KEYCODE_E)         PORT_CHAR('e')   PORT_CHAR('E')
125      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3")      PORT_CODE(KEYCODE_3)         PORT_CHAR('3')   PORT_CHAR('#')
126      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_UNUSED
127
128   PORT_START("LINE3")
129      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(";")      PORT_CODE(KEYCODE_COLON)      PORT_CHAR(';')   PORT_CHAR(':')
130      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("-")      PORT_CODE(KEYCODE_MINUS)      PORT_CHAR('-')   PORT_CHAR('=')
131      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("]")      PORT_CODE(KEYCODE_CLOSEBRACE)   PORT_CHAR(']')   PORT_CHAR('}')
132      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C")      PORT_CODE(KEYCODE_C)         PORT_CHAR('c')   PORT_CHAR('C')
133      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D")      PORT_CODE(KEYCODE_D)         PORT_CHAR('d')   PORT_CHAR('D')
134      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R")      PORT_CODE(KEYCODE_R)         PORT_CHAR('r')   PORT_CHAR('R')
135      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4")      PORT_CODE(KEYCODE_4)         PORT_CHAR('4')   PORT_CHAR('$')
136      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_UNUSED
137
138   PORT_START("LINE4")
139      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("'")      PORT_CODE(KEYCODE_QUOTE)      PORT_CHAR('\'')   PORT_CHAR('\"')
140      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("BACKSPACE")   PORT_CODE(KEYCODE_BACKSPACE)   PORT_CHAR(UCHAR_MAMEKEY(DEL))
141      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SPACE")   PORT_CODE(KEYCODE_SPACE)      PORT_CHAR(' ')
142      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V")      PORT_CODE(KEYCODE_V)         PORT_CHAR('v')   PORT_CHAR('V')
143      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F")      PORT_CODE(KEYCODE_F)         PORT_CHAR('f')   PORT_CHAR('F')
144      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T")      PORT_CODE(KEYCODE_T)         PORT_CHAR('t')   PORT_CHAR('T')
145      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5")      PORT_CODE(KEYCODE_5)         PORT_CHAR('5')   PORT_CHAR('%')
146      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_UNUSED
147
148   PORT_START("LINE5")
149      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L")      PORT_CODE(KEYCODE_L)         PORT_CHAR('l')   PORT_CHAR('L')
150      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P")      PORT_CODE(KEYCODE_P)         PORT_CHAR('p')   PORT_CHAR('P')
151      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("LEFT")   PORT_CODE(KEYCODE_LEFT)         PORT_CHAR(UCHAR_MAMEKEY(LEFT))
152      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B")      PORT_CODE(KEYCODE_B)         PORT_CHAR('b')   PORT_CHAR('B')
153      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G")      PORT_CODE(KEYCODE_G)         PORT_CHAR('g')   PORT_CHAR('G')
154      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y")      PORT_CODE(KEYCODE_Y)         PORT_CHAR('y')   PORT_CHAR('Y')
155      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6")      PORT_CODE(KEYCODE_6)         PORT_CHAR('6')   PORT_CHAR('^')
156      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_UNUSED
157
158   PORT_START("LINE6")
159      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_UNUSED
160      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0")      PORT_CODE(KEYCODE_0)         PORT_CHAR('0')   PORT_CHAR(')')
161      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("RIGHT")   PORT_CODE(KEYCODE_RIGHT)      PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
162      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N")      PORT_CODE(KEYCODE_N)         PORT_CHAR('n')   PORT_CHAR('N')
163      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H")      PORT_CODE(KEYCODE_H)         PORT_CHAR('h')   PORT_CHAR('H')
164      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U")      PORT_CODE(KEYCODE_U)         PORT_CHAR('u')   PORT_CHAR('U')
165      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7")      PORT_CODE(KEYCODE_7)         PORT_CHAR('7')   PORT_CHAR('+')
166      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_UNUSED
167
168   PORT_START("LINE7")
169      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("NUMLOck") PORT_CODE(KEYCODE_NUMLOCK)      PORT_CHAR(UCHAR_MAMEKEY(NUMLOCK))
170      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9")      PORT_CODE(KEYCODE_9)         PORT_CHAR('9')   PORT_CHAR('(')
171      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("DOWN")   PORT_CODE(KEYCODE_DOWN)         PORT_CHAR(UCHAR_MAMEKEY(DOWN))
172      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M")      PORT_CODE(KEYCODE_M)         PORT_CHAR('m')   PORT_CHAR('M')
173      PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J")      PORT_CODE(KEYCODE_J)         PORT_CHAR('j')   PORT_CHAR('J')
174      PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I")      PORT_CODE(KEYCODE_I)         PORT_CHAR('i')   PORT_CHAR('I')
175      PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8")      PORT_CODE(KEYCODE_8)         PORT_CHAR('8')   PORT_CHAR('*')
176      PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_UNUSED
61177INPUT_PORTS_END
62178
179static PALETTE_INIT( lcmate2 )
180{
181   palette_set_color(machine, 0, MAKE_RGB(138, 146, 148));
182   palette_set_color(machine, 1, MAKE_RGB(92, 83, 88));
183}
63184
64static MACHINE_RESET(lcmate2)
185bool lcmate2_state::screen_update(screen_device &screen, bitmap_t &bitmap, const rectangle &cliprect)
65186{
66   //lcmate2_state *state = machine.driver_data<lcmate2_state>();
187   return m_lcdc->video_update(&bitmap, &cliprect);
67188}
68189
190static const hd44780_interface lcmate2_display =
191{
192   2,               // number of lines
193   20,               // chars for line
194   NULL            // custom display layout
195};
196
197static RP5C01_INTERFACE( rtc_intf )
198{
199   DEVCB_NULL
200};
201
69202static MACHINE_CONFIG_START( lcmate2, lcmate2_state )
70203   /* basic machine hardware */
71204   MCFG_CPU_ADD("maincpu", Z80, XTAL_3_579545MHz) // confirmed
72205   MCFG_CPU_PROGRAM_MAP(lcmate2_mem)
73206   MCFG_CPU_IO_MAP(lcmate2_io)
74207
75   MCFG_MACHINE_RESET(lcmate2)
76
77208   /* video hardware */
78   MCFG_SCREEN_ADD("screen", RASTER)
209   MCFG_SCREEN_ADD("screen", LCD)
79210   MCFG_SCREEN_REFRESH_RATE(50)
80211   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
81212   MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
82   MCFG_SCREEN_SIZE(640, 250)
83   MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 249)
213   MCFG_SCREEN_SIZE(120, 18)
214   MCFG_SCREEN_VISIBLE_AREA(0, 120-1, 0, 18-1)
84215   MCFG_PALETTE_LENGTH(2)
85   MCFG_PALETTE_INIT(black_and_white)
216   MCFG_PALETTE_INIT(lcmate2)
217   MCFG_DEFAULT_LAYOUT(layout_lcd)
86218
219   MCFG_HD44780_ADD("hd44780", lcmate2_display)
220
87221   /* sound hardware */
88222   MCFG_SPEAKER_STANDARD_MONO("mono")
89223   MCFG_SOUND_ADD("beep", BEEP, 0)
90224   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
91225
92226   /* Devices */
93   // RP5C15 RTC "rtc"
227   MCFG_RP5C01_ADD("rtc", XTAL_32_768kHz, rtc_intf)
94228MACHINE_CONFIG_END
95229
96230/* ROM definition */
97231ROM_START( lcmate2 )
98232   ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
99233   ROM_LOAD( "u2.bin",  0x0000, 0x8000, CRC(521931b9) SHA1(743a6e2928c4365fbf5ed9a173e2c1bfe695850f) )
234
235   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
236   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
100237ROM_END
101238
102239/* Driver */
103240
104241/*    YEAR  NAME    PARENT  COMPAT   MACHINE    INPUT    INIT     COMPANY   FULLNAME       FLAGS */
105242COMP( 1984, lcmate2,  0,       0,   lcmate2,   lcmate2,    0,   "Vtech",   "Laser Compumate 2", GAME_NOT_WORKING | GAME_NO_SOUND_HW)
106

Previous 15994 Revisions Next


© 1998-2018 The MESS Team