Previous 15994 Revisions Next

r6503 Wednesday 2nd December, 2009 at 15:40:00 UTC by Miodrag Milanović
CTRL/SHIFT Terminal support
[src/mess/machine]terminal.c

src/mess/machine/terminal.c
r6502r6503
1212   UINT8 buffer[TERMINAL_WIDTH*TERMINAL_HEIGHT];
1313   UINT8 x_pos;
1414   UINT8 y_pos;
15   
15   UINT8 shift_state;
16   UINT8 ctrl_state;
1617   devcb_resolved_write8 terminal_keyboard_func;
1718};
1819
r6502r6503
249250   }
250251}
251252
253static INPUT_CHANGED( terminal_shift )
254{
255   const device_config   *devconf = devtag_get_device(field->port->machine, TERMINAL_TAG);
256   terminal_state *term = get_safe_token(devconf);
257   term->shift_state = BIT(input_port_read(field->port->machine, "KEYSSPEC"),1);
258}
259
260static INPUT_CHANGED( terminal_ctrl )
261{
262   const device_config   *devconf = devtag_get_device(field->port->machine, TERMINAL_TAG);
263   terminal_state *term = get_safe_token(devconf);
264   term->ctrl_state = BIT(input_port_read(field->port->machine, "KEYSSPEC"),0);
265}
252266// Ugh, god, this is a horrible, HORRIBLE hack!
253267static INPUT_CHANGED( terminal_kbd_put )
254268{
255269   const device_config   *devconf = devtag_get_device(field->port->machine, TERMINAL_TAG);
256270   terminal_state *term = get_safe_token(devconf);
271   UINT8 data = (UINT8)(FPTR)param;
257272   if(input_port_read(field->port->machine, "KEYS0") ||
258273      input_port_read(field->port->machine, "KEYS1") ||
259274      input_port_read(field->port->machine, "KEYS2") ||
260275      input_port_read(field->port->machine, "KEYS3") ||
261276      input_port_read(field->port->machine, "KEYS4"))
262277   {     
263      devcb_call_write8(&term->terminal_keyboard_func, 0, (UINT8)(FPTR)param);
278      if (term->ctrl_state==1) {
279         data -= 0x60;
280      }
281      if (term->shift_state==1) {
282         data -= 0x20;
283      }
284     
285      devcb_call_write8(&term->terminal_keyboard_func, 0, data);
264286   }
265287}
266288
r6502r6503
300322
301323static DEVICE_START( terminal )
302324{
303   terminal_state *terminal = get_safe_token(device);
325   terminal_state *term = get_safe_token(device);
304326   const terminal_interface *intf = get_interface(device);
305327   
306   devcb_resolve_write8(&terminal->terminal_keyboard_func, &intf->terminal_keyboard_func, device);
328   devcb_resolve_write8(&term->terminal_keyboard_func, &intf->terminal_keyboard_func, device);   
307329}
308330
309331/*-------------------------------------------------
r6502r6503
312334
313335static DEVICE_RESET( terminal )
314336{
337   terminal_state *term = get_safe_token(device);
338   
315339   terminal_clear(device);
340   term->shift_state = 0;
341   term->ctrl_state = 0;
316342}
317343
318344/*-------------------------------------------------
r6502r6503
392418   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') PORT_CHANGED(terminal_kbd_put, (void*)'.')
393419   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')         PORT_CHANGED(terminal_kbd_put, (void*)' ')
394420   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(0x0d)         PORT_CHANGED(terminal_kbd_put, (void*)0x0d)
421   PORT_START("KEYSSPEC")
422   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) PORT_CHAR(UCHAR_MAMEKEY(RCONTROL))    PORT_CHANGED(terminal_ctrl, NULL)
423   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)             PORT_CHANGED(terminal_shift, NULL)
424   PORT_BIT(0xFC, IP_ACTIVE_HIGH, IPT_UNUSED)
425   
395426INPUT_PORTS_END

Previous 15994 Revisions Next


© 1998-2018 The MESS Team