trunk/src/mess/drivers/hh_tms1k.c
| r244943 | r244944 | |
| 111 | 111 | UINT16 m_r; // MCU R-pins data |
| 112 | 112 | UINT16 m_o; // MCU O-pins data |
| 113 | 113 | UINT16 m_inp_mux; // multiplexed inputs mask |
| 114 | | bool m_power_on; // TMS0980 power-on state |
| 114 | bool m_power_on; |
| 115 | 115 | |
| 116 | 116 | UINT8 read_inputs(int columns); |
| 117 | | DECLARE_INPUT_CHANGED_MEMBER(tms0980_power_button); |
| 118 | | DECLARE_WRITE_LINE_MEMBER(tms0980_auto_power_off); |
| 117 | DECLARE_INPUT_CHANGED_MEMBER(power_button); |
| 118 | DECLARE_WRITE_LINE_MEMBER(auto_power_off); |
| 119 | 119 | |
| 120 | 120 | virtual void machine_start(); |
| 121 | 121 | virtual void machine_reset(); |
| r244943 | r244944 | |
| 307 | 307 | // slowly turn off unpowered segments |
| 308 | 308 | for (int y = 0; y < m_display_maxy; y++) |
| 309 | 309 | for (int x = 0; x < m_display_maxx; x++) |
| 310 | | if (!(m_display_state[y] >> x & 1) && m_display_decay[y][x] != 0) |
| 310 | if (m_display_decay[y][x] != 0) |
| 311 | 311 | m_display_decay[y][x]--; |
| 312 | 312 | |
| 313 | 313 | display_update(); |
| r244943 | r244944 | |
| 342 | 342 | |
| 343 | 343 | // devices with a TMS0980 can auto power-off |
| 344 | 344 | |
| 345 | | WRITE_LINE_MEMBER(hh_tms1k_state::tms0980_auto_power_off) |
| 345 | WRITE_LINE_MEMBER(hh_tms1k_state::auto_power_off) |
| 346 | 346 | { |
| 347 | 347 | if (state) |
| 348 | 348 | { |
| r244943 | r244944 | |
| 351 | 351 | } |
| 352 | 352 | } |
| 353 | 353 | |
| 354 | | INPUT_CHANGED_MEMBER(hh_tms1k_state::tms0980_power_button) |
| 354 | INPUT_CHANGED_MEMBER(hh_tms1k_state::power_button) |
| 355 | 355 | { |
| 356 | 356 | m_power_on = (bool)(FPTR)param; |
| 357 | 357 | m_maincpu->set_input_line(INPUT_LINE_RESET, m_power_on ? CLEAR_LINE : ASSERT_LINE); |
| r244943 | r244944 | |
| 1182 | 1182 | |
| 1183 | 1183 | // note: even though power buttons are on the matrix, they are not CPU-controlled |
| 1184 | 1184 | PORT_START("IN.4") // Vss! |
| 1185 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGUP) PORT_NAME("On") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, tms0980_power_button, (void *)true) |
| 1185 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGUP) PORT_NAME("On") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, power_button, (void *)true) |
| 1186 | 1186 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 1187 | 1187 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 1188 | 1188 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("End Turn") |
| 1189 | | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Off") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, tms0980_power_button, (void *)false) |
| 1189 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Off") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, power_button, (void *)false) |
| 1190 | 1190 | INPUT_PORTS_END |
| 1191 | 1191 | |
| 1192 | 1192 | |
| r244943 | r244944 | |
| 1197 | 1197 | MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, elecdet_read_k)) |
| 1198 | 1198 | MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, elecdet_write_r)) |
| 1199 | 1199 | MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, elecdet_write_o)) |
| 1200 | | MCFG_TMS1XXX_POWER_OFF_CB(WRITELINE(hh_tms1k_state, tms0980_auto_power_off)) |
| 1200 | MCFG_TMS1XXX_POWER_OFF_CB(WRITELINE(hh_tms1k_state, auto_power_off)) |
| 1201 | 1201 | |
| 1202 | 1202 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) |
| 1203 | 1203 | MCFG_DEFAULT_LAYOUT(layout_elecdet) |
| r244943 | r244944 | |
| 1778 | 1778 | |
| 1779 | 1779 | // note: even though power buttons are on the matrix, they are not CPU-controlled |
| 1780 | 1780 | PORT_START("IN.2") // Vss! |
| 1781 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGUP) PORT_NAME("On") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, tms0980_power_button, (void *)true) |
| 1781 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGUP) PORT_NAME("On") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, power_button, (void *)true) |
| 1782 | 1782 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("Tip") |
| 1783 | 1783 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("Arrest") |
| 1784 | 1784 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("Clue") |
| 1785 | | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Off") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, tms0980_power_button, (void *)false) |
| 1785 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Off") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, power_button, (void *)false) |
| 1786 | 1786 | INPUT_PORTS_END |
| 1787 | 1787 | |
| 1788 | 1788 | static MACHINE_CONFIG_START( stopthief, hh_tms1k_state ) |
| r244943 | r244944 | |
| 1792 | 1792 | MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, stopthief_read_k)) |
| 1793 | 1793 | MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, stopthief_write_r)) |
| 1794 | 1794 | MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, stopthief_write_o)) |
| 1795 | | MCFG_TMS1XXX_POWER_OFF_CB(WRITELINE(hh_tms1k_state, tms0980_auto_power_off)) |
| 1795 | MCFG_TMS1XXX_POWER_OFF_CB(WRITELINE(hh_tms1k_state, auto_power_off)) |
| 1796 | 1796 | |
| 1797 | 1797 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) |
| 1798 | 1798 | MCFG_DEFAULT_LAYOUT(layout_stopthie) |
trunk/src/mess/drivers/ticalc1x.c
| r244943 | r244944 | |
| 9 | 9 | |
| 10 | 10 | TODO: |
| 11 | 11 | - MCU clocks are unknown |
| 12 | - lilprof equals-sign is always on |
| 12 | 13 | |
| 13 | 14 | ***************************************************************************/ |
| 14 | 15 | |
| r244943 | r244944 | |
| 45 | 46 | UINT16 m_r; // MCU R-pins data |
| 46 | 47 | UINT16 m_o; // MCU O-pins data |
| 47 | 48 | UINT16 m_inp_mux; // multiplexed inputs mask |
| 48 | | bool m_power_on; // TMS0980 power-on state |
| 49 | bool m_power_on; |
| 49 | 50 | |
| 50 | 51 | UINT8 read_inputs(int columns); |
| 51 | | DECLARE_INPUT_CHANGED_MEMBER(tms0980_power_button); |
| 52 | | DECLARE_WRITE_LINE_MEMBER(tms0980_auto_power_off); |
| 52 | DECLARE_INPUT_CHANGED_MEMBER(power_button); |
| 53 | DECLARE_WRITE_LINE_MEMBER(auto_power_off); |
| 53 | 54 | |
| 54 | 55 | virtual void machine_reset(); |
| 55 | 56 | virtual void machine_start(); |
| r244943 | r244944 | |
| 82 | 83 | DECLARE_WRITE16_MEMBER(wizatron_write_o); |
| 83 | 84 | DECLARE_WRITE16_MEMBER(wizatron_write_r); |
| 84 | 85 | |
| 86 | DECLARE_READ8_MEMBER(lilprof_read_k); |
| 87 | DECLARE_WRITE16_MEMBER(lilprof_write_o); |
| 88 | DECLARE_WRITE16_MEMBER(lilprof_write_r); |
| 89 | |
| 85 | 90 | DECLARE_READ8_MEMBER(ti30_read_k); |
| 86 | 91 | DECLARE_WRITE16_MEMBER(ti30_write_o); |
| 87 | 92 | DECLARE_WRITE16_MEMBER(ti30_write_r); |
| r244943 | r244944 | |
| 175 | 180 | // slowly turn off unpowered segments |
| 176 | 181 | for (int y = 0; y < m_display_maxy; y++) |
| 177 | 182 | for (int x = 0; x < m_display_maxx; x++) |
| 178 | | if (!(m_display_state[y] >> x & 1) && m_display_decay[y][x] != 0) |
| 183 | if (m_display_decay[y][x] != 0) |
| 179 | 184 | m_display_decay[y][x]--; |
| 180 | 185 | |
| 181 | 186 | display_update(); |
| r244943 | r244944 | |
| 213 | 218 | |
| 214 | 219 | // devices with a TMS0980 can auto power-off |
| 215 | 220 | |
| 216 | | WRITE_LINE_MEMBER(ticalc1x_state::tms0980_auto_power_off) |
| 221 | WRITE_LINE_MEMBER(ticalc1x_state::auto_power_off) |
| 217 | 222 | { |
| 218 | 223 | if (state) |
| 219 | 224 | { |
| r244943 | r244944 | |
| 222 | 227 | } |
| 223 | 228 | } |
| 224 | 229 | |
| 225 | | INPUT_CHANGED_MEMBER(ticalc1x_state::tms0980_power_button) |
| 230 | INPUT_CHANGED_MEMBER(ticalc1x_state::power_button) |
| 226 | 231 | { |
| 227 | 232 | m_power_on = (bool)(FPTR)param; |
| 228 | 233 | m_maincpu->set_input_line(INPUT_LINE_RESET, m_power_on ? CLEAR_LINE : ASSERT_LINE); |
| r244943 | r244944 | |
| 455 | 460 | |
| 456 | 461 | /*************************************************************************** |
| 457 | 462 | |
| 458 | | TI WIZ-A-TRON (educational toy) |
| 463 | TI WIZ-A-TRON |
| 459 | 464 | * TMS0970 MCU labeled TMC0907NL ZA0379, DP0907BS. die labeled 0970F-07B |
| 460 | 465 | |
| 461 | 466 | ***************************************************************************/ |
| r244943 | r244944 | |
| 467 | 472 | |
| 468 | 473 | WRITE16_MEMBER(ticalc1x_state::wizatron_write_r) |
| 469 | 474 | { |
| 470 | | // note: 3rd digit is custom(not 7seg), for math symbols, and 6th digit |
| 475 | // note: 6th digit is custom(not 7seg), for math symbols, and 3rd digit |
| 471 | 476 | // only has A and G for =, though some newer revisions use a custom digit too. |
| 472 | 477 | m_7seg_mask[3] = 0x41; |
| 473 | 478 | |
| r244943 | r244944 | |
| 534 | 539 | |
| 535 | 540 | /*************************************************************************** |
| 536 | 541 | |
| 542 | TI Little Professor '78 |
| 543 | * TMS1990 MCU labeled TMC1993NL. die labeled 1990C-c3C |
| 544 | |
| 545 | ***************************************************************************/ |
| 546 | |
| 547 | READ8_MEMBER(ticalc1x_state::lilprof_read_k) |
| 548 | { |
| 549 | return read_inputs(5); |
| 550 | } |
| 551 | |
| 552 | WRITE16_MEMBER(ticalc1x_state::lilprof_write_r) |
| 553 | { |
| 554 | // update leds state |
| 555 | UINT8 o = BITSWAP8(m_o,7,4,3,2,1,0,6,5) & 0x7f; |
| 556 | UINT16 r = (data & 7) | (data << 1 & 0x1f0); |
| 557 | |
| 558 | for (int y = 0; y < 9; y++) |
| 559 | m_display_state[y] = (r >> y & 1) ? o : 0; |
| 560 | |
| 561 | // 3rd digit A/G(equals sign) is from O7 |
| 562 | m_display_state[3] = (m_o & 0x80) ? 0x41 : 0; |
| 563 | |
| 564 | // 6th digit is a custom 7seg for math symbols |
| 565 | m_display_state[6] = BITSWAP8(m_display_state[6],7,6,1,4,2,3,5,0); |
| 566 | |
| 567 | m_display_maxx = 8; |
| 568 | m_display_maxy = 9; |
| 569 | display_update(); |
| 570 | } |
| 571 | |
| 572 | WRITE16_MEMBER(ticalc1x_state::lilprof_write_o) |
| 573 | { |
| 574 | // O0-O3,O5: input mux |
| 575 | // O0-O6: digit segments A-G |
| 576 | // O7: 6th digit |
| 577 | m_inp_mux = (data & 0xf) | (data >> 1 & 0x10); |
| 578 | m_o = data; |
| 579 | } |
| 580 | |
| 581 | |
| 582 | static INPUT_PORTS_START( lilprof ) |
| 583 | PORT_START("IN.0") // O0 |
| 584 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1") |
| 585 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2") |
| 586 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3") |
| 587 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-") |
| 588 | |
| 589 | PORT_START("IN.1") // O1 |
| 590 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4") |
| 591 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5") |
| 592 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6") |
| 593 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY) |
| 594 | |
| 595 | PORT_START("IN.2") // O2 |
| 596 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7") |
| 597 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8") |
| 598 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9") |
| 599 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE) |
| 600 | |
| 601 | // note: even though power buttons are on the matrix, they are not CPU-controlled |
| 602 | PORT_START("IN.3") // O3 or O4? |
| 603 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Off") PORT_CHANGED_MEMBER(DEVICE_SELF, ticalc1x_state, power_button, (void *)false) |
| 604 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 605 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_NAME("Set") |
| 606 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_NAME("Level") |
| 607 | |
| 608 | PORT_START("IN.4") // O5 |
| 609 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP) PORT_CODE(KEYCODE_DEL) PORT_NAME("On") PORT_CHANGED_MEMBER(DEVICE_SELF, ticalc1x_state, power_button, (void *)true) |
| 610 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0") |
| 611 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Go") |
| 612 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+") |
| 613 | INPUT_PORTS_END |
| 614 | |
| 615 | |
| 616 | static MACHINE_CONFIG_START( lilprof, ticalc1x_state ) |
| 617 | |
| 618 | /* basic machine hardware */ |
| 619 | MCFG_CPU_ADD("maincpu", TMS1990, 250000) // guessed |
| 620 | MCFG_TMS1XXX_READ_K_CB(READ8(ticalc1x_state, lilprof_read_k)) |
| 621 | MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ticalc1x_state, lilprof_write_o)) |
| 622 | MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ticalc1x_state, lilprof_write_r)) |
| 623 | |
| 624 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", ticalc1x_state, display_decay_tick, attotime::from_msec(1)) |
| 625 | MCFG_DEFAULT_LAYOUT(layout_wizatron) |
| 626 | |
| 627 | /* no video! */ |
| 628 | |
| 629 | /* no sound! */ |
| 630 | MACHINE_CONFIG_END |
| 631 | |
| 632 | |
| 633 | |
| 634 | |
| 635 | |
| 636 | /*************************************************************************** |
| 637 | |
| 537 | 638 | Majestic-line calculators: |
| 538 | | * TI-30: TMS0980 MCU labeled TMC0981NL. die labeled 0980B-81F |
| 639 | * TI-30(aka SR-40): TMS0980 MCU labeled TMC0981NL. die labeled 0980B-81F |
| 539 | 640 | * TI Programmer: TMS0980 MCU labeled ZA0675NL, JP0983AT. die labeled 0980B-83 |
| 540 | 641 | * TI Business Analyst-I: TMS0980 MCU labeled TMC0982NL. die labeled 0980B-82F |
| 541 | 642 | |
| r244943 | r244944 | |
| 617 | 718 | |
| 618 | 719 | // note: even though power buttons are on the matrix, they are not CPU-controlled |
| 619 | 720 | PORT_START("IN.7") // Vss! |
| 620 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP) PORT_CODE(KEYCODE_DEL) PORT_NAME("ON/C") PORT_CHANGED_MEMBER(DEVICE_SELF, ticalc1x_state, tms0980_power_button, (void *)true) |
| 721 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP) PORT_CODE(KEYCODE_DEL) PORT_NAME("ON/C") PORT_CHANGED_MEMBER(DEVICE_SELF, ticalc1x_state, power_button, (void *)true) |
| 621 | 722 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_NAME("1/x") |
| 622 | 723 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_NAME(UTF8_SQUAREROOT"x") |
| 623 | 724 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_NAME("x" UTF8_POW_2) |
| 624 | | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("OFF") PORT_CHANGED_MEMBER(DEVICE_SELF, ticalc1x_state, tms0980_power_button, (void *)false) |
| 725 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("OFF") PORT_CHANGED_MEMBER(DEVICE_SELF, ticalc1x_state, power_button, (void *)false) |
| 625 | 726 | INPUT_PORTS_END |
| 626 | 727 | |
| 627 | 728 | |
| r244943 | r244944 | |
| 677 | 778 | |
| 678 | 779 | // note: even though power buttons are on the matrix, they are not CPU-controlled |
| 679 | 780 | PORT_START("IN.7") // Vss! |
| 680 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_PGUP) PORT_NAME("C/ON") PORT_CHANGED_MEMBER(DEVICE_SELF, ticalc1x_state, tms0980_power_button, (void *)true) |
| 781 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_PGUP) PORT_NAME("C/ON") PORT_CHANGED_MEMBER(DEVICE_SELF, ticalc1x_state, power_button, (void *)true) |
| 681 | 782 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_NAME("DEC") |
| 682 | 783 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_NAME("OCT") |
| 683 | 784 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_NAME("HEX") |
| 684 | | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("OFF") PORT_CHANGED_MEMBER(DEVICE_SELF, ticalc1x_state, tms0980_power_button, (void *)false) |
| 785 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("OFF") PORT_CHANGED_MEMBER(DEVICE_SELF, ticalc1x_state, power_button, (void *)false) |
| 685 | 786 | INPUT_PORTS_END |
| 686 | 787 | |
| 687 | 788 | |
| r244943 | r244944 | |
| 738 | 839 | |
| 739 | 840 | // note: even though power buttons are on the matrix, they are not CPU-controlled |
| 740 | 841 | PORT_START("IN.7") // Vss! |
| 741 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP) PORT_CODE(KEYCODE_DEL) PORT_NAME("ON/C") PORT_CHANGED_MEMBER(DEVICE_SELF, ticalc1x_state, tms0980_power_button, (void *)true) |
| 842 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP) PORT_CODE(KEYCODE_DEL) PORT_NAME("ON/C") PORT_CHANGED_MEMBER(DEVICE_SELF, ticalc1x_state, power_button, (void *)true) |
| 742 | 843 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("2nd") |
| 743 | 844 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_NAME("x" UTF8_POW_2" " UTF8_SQUAREROOT"x") |
| 744 | 845 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_NAME("ln(x) e" UTF8_POW_X) |
| 745 | | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("OFF") PORT_CHANGED_MEMBER(DEVICE_SELF, ticalc1x_state, tms0980_power_button, (void *)false) |
| 846 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("OFF") PORT_CHANGED_MEMBER(DEVICE_SELF, ticalc1x_state, power_button, (void *)false) |
| 746 | 847 | INPUT_PORTS_END |
| 747 | 848 | |
| 748 | 849 | |
| r244943 | r244944 | |
| 753 | 854 | MCFG_TMS1XXX_READ_K_CB(READ8(ticalc1x_state, ti30_read_k)) |
| 754 | 855 | MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ticalc1x_state, ti30_write_o)) |
| 755 | 856 | MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ticalc1x_state, ti30_write_r)) |
| 756 | | MCFG_TMS1XXX_POWER_OFF_CB(WRITELINE(ticalc1x_state, tms0980_auto_power_off)) |
| 857 | MCFG_TMS1XXX_POWER_OFF_CB(WRITELINE(ticalc1x_state, auto_power_off)) |
| 757 | 858 | |
| 758 | 859 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", ticalc1x_state, display_decay_tick, attotime::from_msec(1)) |
| 759 | 860 | MCFG_DEFAULT_LAYOUT(layout_ti30) |
| r244943 | r244944 | |
| 767 | 868 | |
| 768 | 869 | |
| 769 | 870 | |
| 770 | | |
| 771 | | |
| 772 | | static INPUT_PORTS_START( lilprof ) |
| 773 | | INPUT_PORTS_END |
| 774 | | |
| 775 | | |
| 776 | | |
| 777 | | |
| 778 | | |
| 779 | | |
| 780 | | static MACHINE_CONFIG_START( lilprof, ticalc1x_state ) |
| 781 | | |
| 782 | | /* basic machine hardware */ |
| 783 | | MCFG_CPU_ADD("maincpu", TMS1990, 250000) // guessed |
| 784 | | // MCFG_TMS1XXX_READ_K_CB(READ8(ticalc1x_state, lilprof_read_k)) |
| 785 | | // MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ticalc1x_state, lilprof_write_o)) |
| 786 | | // MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ticalc1x_state, lilprof_write_r)) |
| 787 | | |
| 788 | | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", ticalc1x_state, display_decay_tick, attotime::from_msec(1)) |
| 789 | | MCFG_DEFAULT_LAYOUT(layout_wizatron) |
| 790 | | |
| 791 | | /* no video! */ |
| 792 | | |
| 793 | | /* no sound! */ |
| 794 | | MACHINE_CONFIG_END |
| 795 | | |
| 796 | | |
| 797 | 871 | /*************************************************************************** |
| 798 | 872 | |
| 799 | 873 | Game driver(s) |
| r244943 | r244944 | |
| 846 | 920 | ROM_LOAD( "tmc1993nl", 0x0000, 0x0400, CRC(e941316b) SHA1(7e1542045d1e731cea81a639c9ac9e91bb233b15) ) |
| 847 | 921 | |
| 848 | 922 | ROM_REGION( 782, "maincpu:ipla", 0 ) |
| 849 | | ROM_LOAD( "tms0970_lilprof_ipla.pla", 0, 782, CRC(05306ef8) SHA1(60a0a3c49ce330bce0c27f15f81d61461d0432ce) ) |
| 923 | ROM_LOAD( "tms0970_lilprof_ipla.pla", 0, 782, BAD_DUMP CRC(05306ef8) SHA1(60a0a3c49ce330bce0c27f15f81d61461d0432ce) ) // not verified |
| 850 | 924 | ROM_REGION( 860, "maincpu:mpla", 0 ) |
| 851 | 925 | ROM_LOAD( "tms0970_lilprof_mpla.pla", 0, 860, CRC(7f50ab2e) SHA1(bff3be9af0e322986f6e545b567c97d70e135c93) ) |
| 852 | 926 | ROM_REGION( 352, "maincpu:opla", 0 ) |
| 853 | 927 | ROM_LOAD( "tms0970_lilprof_opla.pla", 0, 352, CRC(03f509c4) SHA1(691554a55db0c5950df848077095f23a991b1909) ) |
| 854 | 928 | ROM_REGION( 157, "maincpu:spla", 0 ) |
| 855 | | ROM_LOAD( "tms0970_lilprof_spla.pla", 0, 157, CRC(56c37a4f) SHA1(18ecc20d2666e89673739056483aed5a261ae927) ) |
| 929 | ROM_LOAD( "tms0970_lilprof_spla.pla", 0, 157, CRC(234ca3a8) SHA1(76844dd87cb380a07c8fcbef143038087e98f138) ) |
| 856 | 930 | ROM_END |
| 857 | 931 | |
| 858 | 932 | |
| r244943 | r244944 | |
| 907 | 981 | |
| 908 | 982 | COMP( 1976, ti1270, 0, 0, ti1270, ti1270, driver_device, 0, "Texas Instruments", "TI-1270", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) |
| 909 | 983 | COMP( 1977, wizatron, 0, 0, wizatron, wizatron, driver_device, 0, "Texas Instruments", "Wiz-A-Tron", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) |
| 910 | | COMP( 1978, lilprof, 0, 0, lilprof, lilprof, driver_device, 0, "Texas Instruments", "Little Professor", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW | GAME_NOT_WORKING ) // 1978 version, original is from 1976 |
| 984 | COMP( 1978, lilprof, 0, 0, lilprof, lilprof, driver_device, 0, "Texas Instruments", "Little Professor (1978 version)", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) // original is from 1976 |
| 911 | 985 | |
| 912 | 986 | COMP( 1976, ti30, 0, 0, ti30, ti30, driver_device, 0, "Texas Instruments", "TI-30", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) |
| 913 | 987 | COMP( 1977, tiprog, 0, 0, ti30, tiprog, driver_device, 0, "Texas Instruments", "TI Programmer", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) |
trunk/src/mess/drivers/tispeak.c
| r244943 | r244944 | |
| 951 | 951 | |
| 952 | 952 | |
| 953 | 953 | |
| 954 | | COMP( 1978, snspell, 0, 0, snspell, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (US prototype)", GAME_IMPERFECT_SOUND ) // also US set 1 |
| 955 | | COMP( 1980, snspella, snspell, 0, snspell, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (US set 2)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) |
| 956 | | COMP( 1978, snspelluk, snspell, 0, snspell, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (UK set 1)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) |
| 957 | | COMP( 1981, snspelluka, snspell, 0, snspell, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (UK set 2)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) |
| 954 | COMP( 1978, snspell, 0, 0, snspell, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (US, prototype)", GAME_IMPERFECT_SOUND ) // also US set 1 |
| 955 | COMP( 1980, snspella, snspell, 0, snspell, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (US, 1980 version)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) |
| 956 | COMP( 1978, snspelluk, snspell, 0, snspell, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (UK, 1978 version)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) |
| 957 | COMP( 1981, snspelluka, snspell, 0, snspell, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (UK, 1981 version)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) |
| 958 | 958 | COMP( 1979, snspelljp, snspell, 0, snspell, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (Japan)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) |
| 959 | 959 | COMP( 1980, ladictee, snspell, 0, snspell, snspell, tispeak_state, snspell, "Texas Instruments", "La Dictee Magique (France)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) // doesn't work due to missing CD2702 MCU dump, German/Italian version has CD2702 too |
| 960 | 960 | |
| 961 | | COMP( 1980, snmath, 0, 0, snmath, snmath, driver_device, 0, "Texas Instruments", "Speak & Math (US prototype)", GAME_IMPERFECT_SOUND ) // also US set 1 |
| 962 | | COMP( 1986, snmatha, snmath, 0, snmath, snmath, driver_device, 0, "Texas Instruments", "Speak & Math (US set 2)", GAME_IMPERFECT_SOUND ) |
| 961 | COMP( 1980, snmath, 0, 0, snmath, snmath, driver_device, 0, "Texas Instruments", "Speak & Math (US, prototype)", GAME_IMPERFECT_SOUND ) // also US set 1 |
| 962 | COMP( 1986, snmatha, snmath, 0, snmath, snmath, driver_device, 0, "Texas Instruments", "Speak & Math (US, 1986 version)", GAME_IMPERFECT_SOUND ) |
| 963 | 963 | |
| 964 | 964 | COMP( 1979, lantutor, 0, 0, lantutor, lantutor, tispeak_state, lantutor, "Texas Instruments", "Language Tutor (prototype)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) |