src/mess/machine/terminal.c
| r6502 | r6503 | |
| 12 | 12 | UINT8 buffer[TERMINAL_WIDTH*TERMINAL_HEIGHT]; |
| 13 | 13 | UINT8 x_pos; |
| 14 | 14 | UINT8 y_pos; |
| 15 | | |
| 15 | UINT8 shift_state; |
| 16 | UINT8 ctrl_state; |
| 16 | 17 | devcb_resolved_write8 terminal_keyboard_func; |
| 17 | 18 | }; |
| 18 | 19 | |
| r6502 | r6503 | |
| 249 | 250 | } |
| 250 | 251 | } |
| 251 | 252 | |
| 253 | static 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 | |
| 260 | static 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 | } |
| 252 | 266 | // Ugh, god, this is a horrible, HORRIBLE hack! |
| 253 | 267 | static INPUT_CHANGED( terminal_kbd_put ) |
| 254 | 268 | { |
| 255 | 269 | const device_config *devconf = devtag_get_device(field->port->machine, TERMINAL_TAG); |
| 256 | 270 | terminal_state *term = get_safe_token(devconf); |
| 271 | UINT8 data = (UINT8)(FPTR)param; |
| 257 | 272 | if(input_port_read(field->port->machine, "KEYS0") || |
| 258 | 273 | input_port_read(field->port->machine, "KEYS1") || |
| 259 | 274 | input_port_read(field->port->machine, "KEYS2") || |
| 260 | 275 | input_port_read(field->port->machine, "KEYS3") || |
| 261 | 276 | input_port_read(field->port->machine, "KEYS4")) |
| 262 | 277 | { |
| 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); |
| 264 | 286 | } |
| 265 | 287 | } |
| 266 | 288 | |
| r6502 | r6503 | |
| 300 | 322 | |
| 301 | 323 | static DEVICE_START( terminal ) |
| 302 | 324 | { |
| 303 | | terminal_state *terminal = get_safe_token(device); |
| 325 | terminal_state *term = get_safe_token(device); |
| 304 | 326 | const terminal_interface *intf = get_interface(device); |
| 305 | 327 | |
| 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); |
| 307 | 329 | } |
| 308 | 330 | |
| 309 | 331 | /*------------------------------------------------- |
| r6502 | r6503 | |
| 312 | 334 | |
| 313 | 335 | static DEVICE_RESET( terminal ) |
| 314 | 336 | { |
| 337 | terminal_state *term = get_safe_token(device); |
| 338 | |
| 315 | 339 | terminal_clear(device); |
| 340 | term->shift_state = 0; |
| 341 | term->ctrl_state = 0; |
| 316 | 342 | } |
| 317 | 343 | |
| 318 | 344 | /*------------------------------------------------- |
| r6502 | r6503 | |
| 392 | 418 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') PORT_CHANGED(terminal_kbd_put, (void*)'.') |
| 393 | 419 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') PORT_CHANGED(terminal_kbd_put, (void*)' ') |
| 394 | 420 | 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 | |
| 395 | 426 | INPUT_PORTS_END |