Previous 199869 Revisions Next

r20350 Saturday 19th January, 2013 at 19:51:45 UTC by Sandro Ronco
(MESS) alphasma: added keyboard input and LCD emulation. [Sandro Ronco]
[src/mess/drivers]alphasma.c

trunk/src/mess/drivers/alphasma.c
r20349r20350
22
33        AlphaSmart Pro
44
5        08/28/2012 Skeleton driver
5        driver by Sandro Ronco
66
77    TODO:
8    - define video HW capabilities
9    - "Addr. Bus RAM error" string read, presumably memory mapped RAM at 0x8000
10      is actually a r/w bank register.
8    - finish keyboard mapping
9    - ADB and PS/2
10    - charset ROM is wrong
1111
1212****************************************************************************/
1313
r20349r20350
2222   alphasmart_state(const machine_config &mconfig, device_type type, const char *tag)
2323      : driver_device(mconfig, type, tag),
2424         m_maincpu(*this, "maincpu"),
25         m_lcdc(*this, "hd44780"),
25         m_lcdc0(*this, "ks0066_0"),
26         m_lcdc1(*this, "ks0066_1"),
2627         m_rambank(*this, "rambank")
2728      { }
2829
2930   required_device<cpu_device> m_maincpu;
30   required_device<hd44780_device> m_lcdc;
31   required_device<hd44780_device> m_lcdc0;
32   required_device<hd44780_device> m_lcdc1;
3133   required_memory_bank m_rambank;
3234
3335   DECLARE_WRITE8_MEMBER(vram_w);
r20349r20350
3537   virtual void machine_start();
3638   virtual void machine_reset();
3739   virtual void palette_init();
40   virtual UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
3841
42   DECLARE_INPUT_CHANGED_MEMBER(kb_irq);
43   DECLARE_READ8_MEMBER(kb_r);
44   DECLARE_WRITE8_MEMBER(kb_matrixl_w);
45   DECLARE_WRITE8_MEMBER(kb_matrixh_w);
3946   DECLARE_READ8_MEMBER(port_a_r);
4047   DECLARE_WRITE8_MEMBER(port_a_w);
4148   DECLARE_READ8_MEMBER(port_d_r);
4249   DECLARE_WRITE8_MEMBER(port_d_w);
4350
4451private:
45   UINT8   m_port_a;
52   UINT8           m_matrix[2];
53   UINT8           m_port_a;
54   UINT8           m_port_d;
55   bitmap_ind16 *  m_tmp_bitmap;
4656};
4757
58INPUT_CHANGED_MEMBER(alphasmart_state::kb_irq)
59{
60   m_maincpu->set_input_line(MC68HC11_IRQ_LINE, HOLD_LINE);
61}
62
63READ8_MEMBER(alphasmart_state::kb_r)
64{
65   static const char *const portnames[] =
66   {
67      "COL0", "COL1", "COL2", "COL3", "COL4", "COL5", "COL6", "COL7",
68      "COL8", "COL9", "COLA", "COLB", "COLC", "COLD", "COLE", "COLF"
69   };
70
71   UINT16 matrix = (m_matrix[1]<<8) | m_matrix[0];
72   UINT8 data = 0xff;
73
74   for(int i=0; i<16; i++)
75      if (!(matrix & (1<<i)))
76         data &= ioport(portnames[i])->read();
77
78   return data;
79}
80
81WRITE8_MEMBER(alphasmart_state::kb_matrixl_w)
82{
83   m_matrix[0] = data;
84}
85
86WRITE8_MEMBER(alphasmart_state::kb_matrixh_w)
87{
88   m_matrix[1] = data;
89}
90
4891READ8_MEMBER(alphasmart_state::port_a_r)
4992{
50   return m_port_a;
93   return (m_port_a & 0xfd) | (ioport("BATTERY")->read() << 1);
5194}
5295
5396WRITE8_MEMBER(alphasmart_state::port_a_w)
5497{
98   if ((m_matrix[1] & 0x04))
99   {
100      UINT8 lcdc_data = 0;
101
102      if ((m_port_a ^ data) & 0x80)
103      {
104         if ((m_matrix[1] & 0x02))
105            lcdc_data |= m_lcdc0->data_read(space, 0);
106         else
107            lcdc_data |= m_lcdc0->control_read(space, 0);
108      }
109      if ((m_port_a ^ data) & 0x20)
110      {
111         if ((m_matrix[1] & 0x02))
112            lcdc_data |= m_lcdc1->data_read(space, 0);
113         else
114            lcdc_data |= m_lcdc1->control_read(space, 0);
115      }
116
117      m_port_d = (m_port_d & 0xc3) | (lcdc_data>>2);
118   }
119   else
120   {
121      UINT8 lcdc_data = (m_port_d<<2) & 0xf0;
122
123      if ((m_port_a ^ data) & data & 0x80)
124      {
125         if ((m_matrix[1] & 0x02))
126            m_lcdc0->data_write(space, 0, lcdc_data);
127         else
128            m_lcdc0->control_write(space, 0, lcdc_data);
129      }
130      if ((m_port_a ^ data) & data & 0x20)
131      {
132         if ((m_matrix[1] & 0x02))
133            m_lcdc1->data_write(space, 0, lcdc_data);
134         else
135            m_lcdc1->control_write(space, 0, lcdc_data);
136      }
137   }
138
55139   m_rambank->set_entry(((data>>3) & 0x01) | ((data>>4) & 0x02));
56140   m_port_a = data;
57141}
58142
59143READ8_MEMBER(alphasmart_state::port_d_r)
60144{
61   return 0;
145   return m_port_d;
62146}
63147
64148WRITE8_MEMBER(alphasmart_state::port_d_w)
65149{
66
150   m_port_d = data;
67151}
68152
69153
70154static ADDRESS_MAP_START(alphasmart_mem, AS_PROGRAM, 8, alphasmart_state)
71155   ADDRESS_MAP_UNMAP_HIGH
72156   AM_RANGE( 0x0000, 0x7fff ) AM_RAMBANK("rambank")
157   AM_RANGE( 0x8000, 0x8000 ) AM_READWRITE(kb_r, kb_matrixh_w)
158   AM_RANGE( 0xc000, 0xc000 ) AM_WRITE(kb_matrixl_w)
73159   AM_RANGE( 0x8000, 0xffff ) AM_ROM   AM_REGION("maincpu", 0)
74160ADDRESS_MAP_END
75161
76162static ADDRESS_MAP_START(alphasmart_io, AS_IO, 8, alphasmart_state)
77//  AM_RANGE(MC68HC11_IO_PORTA, MC68HC11_IO_PORTA) AM_DEVREADWRITE("hd44780", hd44780_device, control_read, control_write)
78//  AM_RANGE(MC68HC11_IO_PORTD, MC68HC11_IO_PORTD) AM_DEVREADWRITE("hd44780", hd44780_device, data_read, data_write)
79163   AM_RANGE( MC68HC11_IO_PORTA, MC68HC11_IO_PORTA ) AM_READWRITE(port_a_r, port_a_w)
80164   AM_RANGE( MC68HC11_IO_PORTD, MC68HC11_IO_PORTD ) AM_READWRITE(port_d_r, port_d_w)
81165ADDRESS_MAP_END
82166
83167/* Input ports */
84168static INPUT_PORTS_START( alphasmart )
169   PORT_START("COL0")
170   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F8)    PORT_CHAR(UCHAR_MAMEKEY(F1))   PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
171   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
172   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F7)    PORT_CHAR(UCHAR_MAMEKEY(F7))   PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
173   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD)
174   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L)     PORT_CHAR('l') PORT_CHAR('L')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
175   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9)     PORT_CHAR('9') PORT_CHAR('(')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
176   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O)     PORT_CHAR('o') PORT_CHAR('O')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
177   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP)  PORT_CHAR('.') PORT_CHAR('>')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
178   PORT_START("COL1")
179   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5)     PORT_CHAR('5') PORT_CHAR('%')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
180   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G)     PORT_CHAR('g') PORT_CHAR('G')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
181   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T)     PORT_CHAR('t') PORT_CHAR('T')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
182   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B)     PORT_CHAR('b') PORT_CHAR('B')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
183   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F)     PORT_CHAR('f') PORT_CHAR('F')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
184   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4)     PORT_CHAR('4') PORT_CHAR('$')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
185   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R)     PORT_CHAR('r') PORT_CHAR('R')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
186   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V)     PORT_CHAR('v') PORT_CHAR('V')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
187   PORT_START("COL2")
188   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6)     PORT_CHAR('6') PORT_CHAR('^')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
189   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H)     PORT_CHAR('h') PORT_CHAR('H')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
190   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y)     PORT_CHAR('y') PORT_CHAR('Y')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
191   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N)     PORT_CHAR('n') PORT_CHAR('N')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
192   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J)     PORT_CHAR('j') PORT_CHAR('J')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
193   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7)     PORT_CHAR('7') PORT_CHAR('&')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
194   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U)     PORT_CHAR('u') PORT_CHAR('U')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
195   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M)     PORT_CHAR('m') PORT_CHAR('M')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
196   PORT_START("COL3")
197   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
198   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'')    PORT_CHAR('\"') PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
199   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
200   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
201   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
202   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0)     PORT_CHAR('0') PORT_CHAR(')')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
203   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P)     PORT_CHAR('p') PORT_CHAR('P')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
204   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD)
205   PORT_START("COL4")
206   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD)
207   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
208   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD)
209   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
210   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD)
211   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD)
212   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD)
213   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD)
214   PORT_START("COL5")
215   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD)
216   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))   PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
217   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD)
218   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))   PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
219   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD)
220   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD)
221   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD)
222   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_END)  PORT_CHAR(UCHAR_MAMEKEY(END))    PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
223   PORT_START("COL6")
224   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD)
225   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LWIN) PORT_CODE(KEYCODE_PGUP)  PORT_NAME("Left Command") PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
226   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD)
227   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RWIN) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Right Command") PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)//
228   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD)
229   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL)  PORT_NAME("COLlear File") PORT_CHAR(UCHAR_MAMEKEY(F9)) PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
230   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME))   PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
231   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD)
232   PORT_START("COL7")
233   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD)
234   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
235   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD)
236   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP)   PORT_CHAR(UCHAR_MAMEKEY(UP))     PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
237   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD)
238   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD)
239   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD)
240   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD)
241   PORT_START("COL8")
242   PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
243   PORT_START("COL9")
244   PORT_BIT(0xf0, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LALT) PORT_NAME("Left Alt/Option") PORT_CHAR(UCHAR_MAMEKEY(LALT))   PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
245   PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RALT) PORT_NAME("Right Alt/Option") PORT_CHAR(UCHAR_MAMEKEY(LALT))   PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
246   PORT_START("COLA")
247   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=')    PORT_CHAR('+') PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
248   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F6)   PORT_CHAR(UCHAR_MAMEKEY(F6)) PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
249   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']')    PORT_CHAR('}') PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
250   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD)
251   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K)    PORT_CHAR('k')  PORT_CHAR('K')   PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
252   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8)    PORT_CHAR('8')  PORT_CHAR('*')   PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
253   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I)    PORT_CHAR('i')  PORT_CHAR('I')   PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
254   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')   PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
255   PORT_START("COLB")
256   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD)
257   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F5)        PORT_CHAR(UCHAR_MAMEKEY(F5))     PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
258   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("Backspace") PORT_CHAR(UCHAR_MAMEKEY(BACKSPACE)) PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
259   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE)     PORT_CHAR(' ') PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
260   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|') PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
261   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD)
262   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD)
263   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER)   PORT_NAME("Return") PORT_CHAR(13) PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
264   PORT_START("COLC")
265   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2)   PORT_CHAR(UCHAR_MAMEKEY(F2))    PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
266   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F4)   PORT_CHAR(UCHAR_MAMEKEY(F4))    PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
267   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F3)   PORT_CHAR(UCHAR_MAMEKEY(F3))    PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
268   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD)
269   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D)    PORT_CHAR('d')  PORT_CHAR('D')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
270   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3)    PORT_CHAR('3')  PORT_CHAR('#')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
271   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E)    PORT_CHAR('e')  PORT_CHAR('E')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
272   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C)    PORT_CHAR('c')  PORT_CHAR('C')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
273   PORT_START("COLD")
274   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1)   PORT_CHAR(UCHAR_MAMEKEY(F1))    PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
275   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
276   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
277   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD)
278   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S)    PORT_CHAR('s')  PORT_CHAR('S')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
279   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2)    PORT_CHAR('2')  PORT_CHAR('@')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
280   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W)    PORT_CHAR('w')  PORT_CHAR('W')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
281   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X)    PORT_CHAR('x')  PORT_CHAR('X')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
282   PORT_START("COLE")
283   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') PORT_CHAR('~')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
284   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC)  PORT_CHAR(UCHAR_MAMEKEY(ESC))   PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
285   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB)  PORT_CHAR('\t')   PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
286   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD)
287   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A)    PORT_CHAR('a')  PORT_CHAR('A')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
288   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1)    PORT_CHAR('1')  PORT_CHAR('!')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
289   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q)    PORT_CHAR('q')  PORT_CHAR('Q')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
290   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z)    PORT_CHAR('z')  PORT_CHAR('Z')  PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
291   PORT_START("COLF")
292   PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
293   PORT_BIT(0xf0, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_MAMEKEY(RSHIFT)) PORT_CHANGED_MEMBER(DEVICE_SELF, alphasmart_state, kb_irq, NULL)
294
295   PORT_START("BATTERY")
296   PORT_CONFNAME(0x01, 0x01, "Battery status")
297   PORT_CONFSETTING (0x00, DEF_STR(Low))
298   PORT_CONFSETTING (0x01, DEF_STR(Normal))
85299INPUT_PORTS_END
86300
87301void alphasmart_state::palette_init()
r20349r20350
90304   palette_set_color(machine(), 1, MAKE_RGB(92, 83, 88));
91305}
92306
307UINT32 alphasmart_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
308{
309   m_lcdc0->screen_update(screen, *m_tmp_bitmap, cliprect);
310   copybitmap(bitmap, *m_tmp_bitmap, 0, 0, 0, 0, cliprect);
311   m_lcdc1->screen_update(screen, *m_tmp_bitmap, cliprect);
312   copybitmap(bitmap, *m_tmp_bitmap, 0, 0, 0, 18,cliprect);
313   return 0;
314}
315
93316void alphasmart_state::machine_start()
94317{
95318   m_rambank->configure_entries(0, 4, (UINT8*)(*memregion("mainram")), 0x8000);
319   m_tmp_bitmap = auto_bitmap_ind16_alloc(machine(), 6*40, 9*4);
96320}
97321
98322void alphasmart_state::machine_reset()
99323{
100324   m_rambank->set_entry(0);
325   m_matrix[0] = m_matrix[1] = 0;
326   m_port_a = 0;
327   m_port_d = 0;
101328}
102329
103330static const hc11_config alphasmart_hc11_config =
r20349r20350
109336
110337static HD44780_INTERFACE( alphasmart_4line_display )
111338{
112   4,                  // number of lines
113   16,                 // chars for line
339   2,                  // number of lines
340   40,                 // chars for line
114341   NULL                // pixel update callback
115342};
116343
r20349r20350
120347   MCFG_CPU_PROGRAM_MAP(alphasmart_mem)
121348   MCFG_CPU_IO_MAP(alphasmart_io)
122349   MCFG_CPU_CONFIG(alphasmart_hc11_config)
123//  MCFG_CPU_PERIODIC_INT_DRIVER(alphasmart_state, irq0_line_hold,  50)
124350
125   MCFG_HD44780_ADD("hd44780", alphasmart_4line_display)
351   MCFG_HD44780_ADD("ks0066_0", alphasmart_4line_display)
352   MCFG_HD44780_ADD("ks0066_1", alphasmart_4line_display)
126353
127354   /* video hardware */
128355   MCFG_SCREEN_ADD("screen", LCD)
129356   MCFG_SCREEN_REFRESH_RATE(50)
130357   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
131   MCFG_SCREEN_UPDATE_DEVICE("hd44780", hd44780_device, screen_update)
358   MCFG_SCREEN_UPDATE_DRIVER(alphasmart_state, screen_update)
132359   MCFG_SCREEN_SIZE(6*40, 9*4)
133360   MCFG_SCREEN_VISIBLE_AREA(0, (6*40)-1, 0, (9*4)-1)
134361   MCFG_PALETTE_LENGTH(2)
r20349r20350
142369
143370   ROM_REGION( 0x20000, "mainram", ROMREGION_ERASE )
144371
145   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
372   ROM_REGION( 0x0860, "ks0066_0", ROMREGION_ERASE )
146373   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
374
375   ROM_REGION( 0x0860, "ks0066_1", ROMREGION_ERASE )
376   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
147377ROM_END
148378
149379

Previous 199869 Revisions Next


© 1997-2024 The MAME Team