src/mess/drivers/atarist.c
| r819 | r820 | |
| 22 | 22 | |
| 23 | 23 | - US keyboard layout |
| 24 | 24 | - add serial communications to HD63701 cpu core |
| 25 | | - connect mouse to ikbd |
| 26 | 25 | - MFP interrupts |
| 27 | 26 | - accurate screen timing |
| 28 | 27 | - fdc.dma_int ? |
| r819 | r820 | |
| 219 | 218 | static UINT8 acia_ikbd_rx, acia_ikbd_tx; |
| 220 | 219 | static UINT8 ikbd_keymask; |
| 221 | 220 | static int ikbd_joyen; |
| 221 | static UINT8 ikbd_mouse_x0, ikbd_mouse_y0; |
| 222 | static UINT8 ikbd_mouse_x_phase, ikbd_mouse_y_phase, ikbd_mouse_phase_counter; |
| 222 | 223 | |
| 224 | static int IKBD_MOUSE_XYA[3][4] = { { 0, 0, 0, 0 }, { 1, 1, 0, 0 }, { 0, 1, 1, 0 } }; |
| 225 | static int IKBD_MOUSE_XYB[3][4] = { { 0, 0, 0, 0 }, { 0, 1, 1, 0 }, { 1, 1, 0, 0 } }; |
| 226 | |
| 227 | enum |
| 228 | { |
| 229 | IKBD_MOUSE_PHASE_STATIC = 0, |
| 230 | IKBD_MOUSE_PHASE_POSITIVE, |
| 231 | IKBD_MOUSE_PHASE_NEGATIVE |
| 232 | }; |
| 233 | |
| 223 | 234 | static WRITE8_HANDLER( ikbd_port1_w ) |
| 224 | 235 | { |
| 225 | 236 | ikbd_keymask = data; |
| r819 | r820 | |
| 239 | 250 | |
| 240 | 251 | */ |
| 241 | 252 | |
| 242 | | return readinputportbytag("JOY1") | (acia_ikbd_tx << 3); |
| 253 | return (acia_ikbd_tx << 3) | (readinputportbytag("JOY1") & 0x06); |
| 243 | 254 | } |
| 244 | 255 | |
| 245 | 256 | static WRITE8_HANDLER( ikbd_port2_w ) |
| r819 | r820 | |
| 331 | 342 | { |
| 332 | 343 | if (readinputportbytag("config") & 0x01) |
| 333 | 344 | { |
| 345 | /* |
| 346 | |
| 347 | Right Left Up Down |
| 348 | |
| 349 | XA 1100 0110 YA 1100 0110 |
| 350 | XB 0110 1100 YB 0110 1100 |
| 351 | |
| 352 | */ |
| 353 | |
| 334 | 354 | UINT8 data = readinputportbytag("JOY0") & 0xf0; |
| 355 | UINT8 x = readinputportbytag("MOUSEX"); |
| 356 | UINT8 y = readinputportbytag("MOUSEY"); |
| 335 | 357 | |
| 358 | if (x == ikbd_mouse_x0) |
| 359 | { |
| 360 | ikbd_mouse_x_phase = IKBD_MOUSE_PHASE_STATIC; |
| 361 | } |
| 362 | else if (x > ikbd_mouse_x0) |
| 363 | { |
| 364 | ikbd_mouse_x_phase = IKBD_MOUSE_PHASE_POSITIVE; |
| 365 | } |
| 366 | else if (x < ikbd_mouse_x0) |
| 367 | { |
| 368 | ikbd_mouse_x_phase = IKBD_MOUSE_PHASE_NEGATIVE; |
| 369 | } |
| 370 | |
| 371 | if (y == ikbd_mouse_y0) |
| 372 | { |
| 373 | ikbd_mouse_y_phase = IKBD_MOUSE_PHASE_STATIC; |
| 374 | } |
| 375 | else if (y > ikbd_mouse_y0) |
| 376 | { |
| 377 | ikbd_mouse_y_phase = IKBD_MOUSE_PHASE_POSITIVE; |
| 378 | } |
| 379 | else if (y < ikbd_mouse_y0) |
| 380 | { |
| 381 | ikbd_mouse_y_phase = IKBD_MOUSE_PHASE_NEGATIVE; |
| 382 | } |
| 383 | |
| 384 | data |= IKBD_MOUSE_XYB[ikbd_mouse_x_phase][ikbd_mouse_phase_counter]; // XB |
| 385 | data |= IKBD_MOUSE_XYA[ikbd_mouse_x_phase][ikbd_mouse_phase_counter] << 1; // XA |
| 386 | data |= IKBD_MOUSE_XYA[ikbd_mouse_y_phase][ikbd_mouse_phase_counter] << 2; // YA |
| 387 | data |= IKBD_MOUSE_XYB[ikbd_mouse_y_phase][ikbd_mouse_phase_counter] << 3; // YB |
| 388 | |
| 389 | ikbd_mouse_phase_counter++; |
| 390 | |
| 391 | if (ikbd_mouse_phase_counter == 4) |
| 392 | { |
| 393 | ikbd_mouse_phase_counter = 0; |
| 394 | } |
| 395 | |
| 396 | ikbd_mouse_x0 = x; |
| 397 | ikbd_mouse_y0 = y; |
| 398 | |
| 336 | 399 | return data; |
| 337 | 400 | } |
| 338 | 401 | else |
| r819 | r820 | |
| 542 | 605 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) |
| 543 | 606 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) |
| 544 | 607 | |
| 545 | | PORT_START_TAG("MOUSE_X") |
| 608 | PORT_START_TAG("MOUSEX") |
| 546 | 609 | PORT_BIT( 0xff, 0x00, IPT_MOUSE_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(1) |
| 547 | 610 | |
| 548 | | PORT_START_TAG("MOUSE_Y") |
| 611 | PORT_START_TAG("MOUSEY") |
| 549 | 612 | PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(1) |
| 550 | 613 | INPUT_PORTS_END |
| 551 | 614 | |
| r819 | r820 | |
| 785 | 848 | |
| 786 | 849 | static MACHINE_START( megast ) |
| 787 | 850 | { |
| 788 | | machine_start_atarist(Machine); |
| 851 | machine_start_atarist(machine); |
| 789 | 852 | rp5c15_init(&rtc_intf); |
| 790 | 853 | } |
| 791 | 854 | |