trunk/src/mess/drivers/ticalc1x.c
| r245125 | r245126 | |
| 8 | 8 | |
| 9 | 9 | |
| 10 | 10 | TODO: |
| 11 | | - MCU clocks are unknown |
| 12 | | - lilprof equals-sign is always on |
| 11 | - MCU clocks are unknown where noted |
| 12 | - lilprof78 equals-sign is always on |
| 13 | 13 | |
| 14 | 14 | ***************************************************************************/ |
| 15 | 15 | |
| r245125 | r245126 | |
| 70 | 70 | void display_matrix_seg(int maxx, int maxy, UINT32 setx, UINT32 sety, UINT16 segmask); |
| 71 | 71 | |
| 72 | 72 | // calculator-specific handlers |
| 73 | | void tisr16_display_update(); |
| 73 | void tisr16_display(); |
| 74 | 74 | DECLARE_WRITE16_MEMBER(tisr16_write_o); |
| 75 | 75 | DECLARE_WRITE16_MEMBER(tisr16_write_r); |
| 76 | 76 | DECLARE_READ8_MEMBER(tisr16_read_k); |
| r245125 | r245126 | |
| 84 | 84 | DECLARE_READ8_MEMBER(wizatron_read_k); |
| 85 | 85 | |
| 86 | 86 | DECLARE_WRITE16_MEMBER(lilprof_write_o); |
| 87 | | DECLARE_WRITE16_MEMBER(lilprof_write_r); |
| 88 | 87 | DECLARE_READ8_MEMBER(lilprof_read_k); |
| 89 | 88 | |
| 89 | DECLARE_WRITE16_MEMBER(lilprof78_write_o); |
| 90 | DECLARE_WRITE16_MEMBER(lilprof78_write_r); |
| 91 | DECLARE_READ8_MEMBER(lilprof78_read_k); |
| 92 | |
| 90 | 93 | DECLARE_WRITE16_MEMBER(ti30_write_o); |
| 91 | 94 | DECLARE_WRITE16_MEMBER(ti30_write_r); |
| 92 | 95 | DECLARE_READ8_MEMBER(ti30_read_k); |
| r245125 | r245126 | |
| 256 | 259 | |
| 257 | 260 | ***************************************************************************/ |
| 258 | 261 | |
| 259 | | void ticalc1x_state::tisr16_display_update() |
| 262 | void ticalc1x_state::tisr16_display() |
| 260 | 263 | { |
| 261 | 264 | // update leds state |
| 262 | 265 | for (int y = 0; y < 11; y++) |
| r245125 | r245126 | |
| 275 | 278 | // R0-R10: input mux |
| 276 | 279 | // R0-R10: select digit (right-to-left) |
| 277 | 280 | m_r = m_inp_mux = data; |
| 278 | | tisr16_display_update(); |
| 281 | tisr16_display(); |
| 279 | 282 | } |
| 280 | 283 | |
| 281 | 284 | WRITE16_MEMBER(ticalc1x_state::tisr16_write_o) |
| 282 | 285 | { |
| 283 | 286 | // O0-O7: digit segments |
| 284 | 287 | m_o = data; |
| 285 | | tisr16_display_update(); |
| 288 | tisr16_display(); |
| 286 | 289 | } |
| 287 | 290 | |
| 288 | 291 | READ8_MEMBER(ticalc1x_state::tisr16_read_k) |
| r245125 | r245126 | |
| 475 | 478 | |
| 476 | 479 | WRITE16_MEMBER(ticalc1x_state::wizatron_write_r) |
| 477 | 480 | { |
| 478 | | // note: 6th digit is custom(not 7seg), for math symbols, and 3rd digit |
| 479 | | // only has A and G for =, though some newer revisions use a custom digit too. |
| 481 | // 6th digit is custom(not 7seg), for math symbols, like this: |
| 482 | // \./ GAB |
| 483 | // --- F |
| 484 | // /.\ EDC |
| 485 | |
| 486 | // 3rd digit only has A and G for =, though some newer hardware revisions |
| 487 | // (goes for both wizatron and lilprof) use a custom equals-sign digit here |
| 480 | 488 | m_display_segmask[3] = 0x41; |
| 481 | 489 | |
| 482 | 490 | // R0-R8: select digit (right-to-left) |
| 483 | | display_matrix_seg(8, 9, m_o, data, 0x7f); |
| 491 | display_matrix_seg(7, 9, m_o, data, 0x7f); |
| 484 | 492 | } |
| 485 | 493 | |
| 486 | 494 | WRITE16_MEMBER(ticalc1x_state::wizatron_write_o) |
| r245125 | r245126 | |
| 500 | 508 | |
| 501 | 509 | static INPUT_PORTS_START( wizatron ) |
| 502 | 510 | PORT_START("IN.0") // O1 |
| 503 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME("CLEAR") |
| 511 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear") |
| 504 | 512 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0") |
| 505 | 513 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("=") |
| 506 | 514 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+") |
| r245125 | r245126 | |
| 547 | 555 | |
| 548 | 556 | /*************************************************************************** |
| 549 | 557 | |
| 550 | | TI Little Professor '78 |
| 558 | TI Little Professor (1976 version) |
| 559 | * TMS0970 MCU labeled TMS0975NL ZA0356, GP0975CS. die labeled 0970D-75C |
| 560 | |
| 561 | The hardware is nearly identical to Wiz-A-Tron (or vice versa, since this |
| 562 | one is older). |
| 563 | |
| 564 | ***************************************************************************/ |
| 565 | |
| 566 | WRITE16_MEMBER(ticalc1x_state::lilprof_write_o) |
| 567 | { |
| 568 | // O1-O4,O7: input mux |
| 569 | // O0-O6: digit segments A-G |
| 570 | m_inp_mux = (data >> 1 & 0xf) | (data >> 3 & 0x10); |
| 571 | m_o = data; |
| 572 | } |
| 573 | |
| 574 | READ8_MEMBER(ticalc1x_state::lilprof_read_k) |
| 575 | { |
| 576 | return read_inputs(5); |
| 577 | } |
| 578 | |
| 579 | |
| 580 | static INPUT_PORTS_START( lilprof ) |
| 581 | PORT_INCLUDE( wizatron ) |
| 582 | |
| 583 | PORT_MODIFY("IN.0") |
| 584 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CODE(KEYCODE_DEL) PORT_NAME("Set") |
| 585 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Go") |
| 586 | |
| 587 | PORT_START("IN.4") // O7 |
| 588 | PORT_CONFNAME( 0x0f, 0x01, "Level") |
| 589 | PORT_CONFSETTING( 0x01, "1" ) |
| 590 | PORT_CONFSETTING( 0x02, "2" ) |
| 591 | PORT_CONFSETTING( 0x04, "3" ) |
| 592 | PORT_CONFSETTING( 0x08, "4" ) |
| 593 | INPUT_PORTS_END |
| 594 | |
| 595 | |
| 596 | static MACHINE_CONFIG_START( lilprof, ticalc1x_state ) |
| 597 | |
| 598 | /* basic machine hardware */ |
| 599 | MCFG_CPU_ADD("maincpu", TMS0970, 250000) // guessed |
| 600 | MCFG_TMS1XXX_READ_K_CB(READ8(ticalc1x_state, lilprof_read_k)) |
| 601 | MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ticalc1x_state, lilprof_write_o)) |
| 602 | MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ticalc1x_state, wizatron_write_r)) |
| 603 | |
| 604 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", ticalc1x_state, display_decay_tick, attotime::from_msec(1)) |
| 605 | MCFG_DEFAULT_LAYOUT(layout_wizatron) |
| 606 | |
| 607 | /* no video! */ |
| 608 | |
| 609 | /* no sound! */ |
| 610 | MACHINE_CONFIG_END |
| 611 | |
| 612 | |
| 613 | |
| 614 | |
| 615 | |
| 616 | /*************************************************************************** |
| 617 | |
| 618 | TI Little Professor (1978 version, same as 1980 version) |
| 551 | 619 | * TMS1990 MCU labeled TMC1993NL. die labeled 1990C-c3C |
| 552 | 620 | |
| 553 | 621 | ***************************************************************************/ |
| 554 | 622 | |
| 555 | | WRITE16_MEMBER(ticalc1x_state::lilprof_write_r) |
| 623 | WRITE16_MEMBER(ticalc1x_state::lilprof78_write_r) |
| 556 | 624 | { |
| 557 | 625 | // update leds state |
| 558 | 626 | UINT8 o = BITSWAP8(m_o,7,4,3,2,1,0,6,5) & 0x7f; |
| r245125 | r245126 | |
| 564 | 632 | // 3rd digit A/G(equals sign) is from O7 |
| 565 | 633 | m_display_state[3] = (m_o & 0x80) ? 0x41 : 0; |
| 566 | 634 | |
| 567 | | // 6th digit is a custom 7seg for math symbols |
| 635 | // 6th digit is a custom 7seg for math symbols (see wizatron_write_r) |
| 568 | 636 | m_display_state[6] = BITSWAP8(m_display_state[6],7,6,1,4,2,3,5,0); |
| 569 | 637 | |
| 570 | | m_display_maxx = 8; |
| 638 | m_display_maxx = 7; |
| 571 | 639 | m_display_maxy = 9; |
| 572 | 640 | display_update(); |
| 573 | 641 | } |
| 574 | 642 | |
| 575 | | WRITE16_MEMBER(ticalc1x_state::lilprof_write_o) |
| 643 | WRITE16_MEMBER(ticalc1x_state::lilprof78_write_o) |
| 576 | 644 | { |
| 577 | 645 | // O0-O3,O5: input mux |
| 578 | 646 | // O0-O6: digit segments A-G |
| r245125 | r245126 | |
| 581 | 649 | m_o = data; |
| 582 | 650 | } |
| 583 | 651 | |
| 584 | | READ8_MEMBER(ticalc1x_state::lilprof_read_k) |
| 652 | READ8_MEMBER(ticalc1x_state::lilprof78_read_k) |
| 585 | 653 | { |
| 586 | 654 | return read_inputs(5); |
| 587 | 655 | } |
| 588 | 656 | |
| 589 | 657 | |
| 590 | | static INPUT_PORTS_START( lilprof ) |
| 658 | static INPUT_PORTS_START( lilprof78 ) |
| 591 | 659 | PORT_START("IN.0") // O0 |
| 592 | 660 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1") |
| 593 | 661 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2") |
| r245125 | r245126 | |
| 621 | 689 | INPUT_PORTS_END |
| 622 | 690 | |
| 623 | 691 | |
| 624 | | static MACHINE_CONFIG_START( lilprof, ticalc1x_state ) |
| 692 | static MACHINE_CONFIG_START( lilprof78, ticalc1x_state ) |
| 625 | 693 | |
| 626 | 694 | /* basic machine hardware */ |
| 627 | 695 | MCFG_CPU_ADD("maincpu", TMS1990, 250000) // guessed |
| 628 | | MCFG_TMS1XXX_READ_K_CB(READ8(ticalc1x_state, lilprof_read_k)) |
| 629 | | MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ticalc1x_state, lilprof_write_o)) |
| 630 | | MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ticalc1x_state, lilprof_write_r)) |
| 696 | MCFG_TMS1XXX_READ_K_CB(READ8(ticalc1x_state, lilprof78_read_k)) |
| 697 | MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ticalc1x_state, lilprof78_write_o)) |
| 698 | MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ticalc1x_state, lilprof78_write_r)) |
| 631 | 699 | |
| 632 | 700 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", ticalc1x_state, display_decay_tick, attotime::from_msec(1)) |
| 633 | 701 | MCFG_DEFAULT_LAYOUT(layout_wizatron) |
| r245125 | r245126 | |
| 895 | 963 | |
| 896 | 964 | ROM_START( ti1270 ) |
| 897 | 965 | ROM_REGION( 0x0400, "maincpu", 0 ) |
| 898 | | ROM_LOAD( "tms0974nl", 0x0000, 0x0400, CRC(48e09b4b) SHA1(17f27167164df223f9f06082ece4c3fc3900eda3) ) |
| 966 | ROM_LOAD( "za0355", 0x0000, 0x0400, CRC(48e09b4b) SHA1(17f27167164df223f9f06082ece4c3fc3900eda3) ) |
| 899 | 967 | |
| 900 | 968 | ROM_REGION( 782, "maincpu:ipla", 0 ) |
| 901 | 969 | ROM_LOAD( "tms0970_ti1270_ipla.pla", 0, 782, CRC(05306ef8) SHA1(60a0a3c49ce330bce0c27f15f81d61461d0432ce) ) |
| r245125 | r245126 | |
| 910 | 978 | |
| 911 | 979 | ROM_START( wizatron ) |
| 912 | 980 | ROM_REGION( 0x0400, "maincpu", 0 ) |
| 913 | | ROM_LOAD( "dp0907bs", 0x0000, 0x0400, CRC(5a6af094) SHA1(b1f27e1f13f4db3b052dd50fb08dbf9c4d8db26e) ) |
| 981 | ROM_LOAD( "za0379", 0x0000, 0x0400, CRC(5a6af094) SHA1(b1f27e1f13f4db3b052dd50fb08dbf9c4d8db26e) ) |
| 914 | 982 | |
| 915 | 983 | ROM_REGION( 782, "maincpu:ipla", 0 ) |
| 916 | 984 | ROM_LOAD( "tms0970_wizatron_ipla.pla", 0, 782, CRC(05306ef8) SHA1(60a0a3c49ce330bce0c27f15f81d61461d0432ce) ) |
| r245125 | r245126 | |
| 925 | 993 | |
| 926 | 994 | ROM_START( lilprof ) |
| 927 | 995 | ROM_REGION( 0x0400, "maincpu", 0 ) |
| 996 | ROM_LOAD( "za0356", 0x0000, 0x0400, CRC(fef9dd39) SHA1(5c9614c9c5092d55dabeee2d6e0387d50d6ad4d5) ) |
| 997 | |
| 998 | ROM_REGION( 782, "maincpu:ipla", 0 ) |
| 999 | ROM_LOAD( "tms0970_lilprof_ipla.pla", 0, 782, BAD_DUMP CRC(05306ef8) SHA1(60a0a3c49ce330bce0c27f15f81d61461d0432ce) ) // not verified |
| 1000 | ROM_REGION( 860, "maincpu:mpla", 0 ) |
| 1001 | ROM_LOAD( "tms0970_lilprof_mpla.pla", 0, 860, BAD_DUMP CRC(6ff5d51d) SHA1(59d3e5de290ba57694068ddba78d21a0c1edf427) ) // not verified |
| 1002 | ROM_REGION( 352, "maincpu:opla", 0 ) |
| 1003 | ROM_LOAD( "tms0970_lilprof_opla.pla", 0, 352, BAD_DUMP CRC(c74daf97) SHA1(c4948000196171b34d4fe9cdd2962a945da9883d) ) // not verified |
| 1004 | ROM_REGION( 157, "maincpu:spla", 0 ) |
| 1005 | ROM_LOAD( "tms0970_lilprof_spla.pla", 0, 157, CRC(56c37a4f) SHA1(18ecc20d2666e89673739056483aed5a261ae927) ) |
| 1006 | ROM_END |
| 1007 | |
| 1008 | |
| 1009 | ROM_START( lilprof78 ) |
| 1010 | ROM_REGION( 0x0400, "maincpu", 0 ) |
| 928 | 1011 | ROM_LOAD( "tmc1993nl", 0x0000, 0x0400, CRC(e941316b) SHA1(7e1542045d1e731cea81a639c9ac9e91bb233b15) ) |
| 929 | 1012 | |
| 930 | 1013 | ROM_REGION( 782, "maincpu:ipla", 0 ) |
| r245125 | r245126 | |
| 989 | 1072 | |
| 990 | 1073 | COMP( 1976, ti1270, 0, 0, ti1270, ti1270, driver_device, 0, "Texas Instruments", "TI-1270", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) |
| 991 | 1074 | COMP( 1977, wizatron, 0, 0, wizatron, wizatron, driver_device, 0, "Texas Instruments", "Wiz-A-Tron", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) |
| 992 | | 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 |
| 1075 | COMP( 1976, lilprof, 0, 0, lilprof, lilprof, driver_device, 0, "Texas Instruments", "Little Professor (1976 version)", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) |
| 1076 | COMP( 1978, lilprof78, lilprof, 0, lilprof78, lilprof78, driver_device, 0, "Texas Instruments", "Little Professor (1978 version)", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) |
| 993 | 1077 | |
| 994 | 1078 | COMP( 1976, ti30, 0, 0, ti30, ti30, driver_device, 0, "Texas Instruments", "TI-30", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) |
| 995 | 1079 | COMP( 1977, tiprog, 0, 0, ti30, tiprog, driver_device, 0, "Texas Instruments", "TI Programmer", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) |