trunk/src/emu/cpu/tms0980/tms0980.c
| r241839 | r241840 | |
| 12 | 12 | ---------+-----------+----------+--------+--------+--------|---------- |
| 13 | 13 | tms0970 | 1024 * 8 | 64 * 4 | | | | tms0972 |
| 14 | 14 | tms0920* | 511?* 9 | 40 * 5 | | | | tmc0921 |
| 15 | | tms0980 | 2048 * 9 | 64 * 9?| | | | tmc0981 |
| 15 | tms0980 | 2048 * 9 | 64 * 9 | | | | tmc0981 |
| 16 | 16 | tms1000 | 1024 * 8 | 64 * 4 | 11 | 8 | 4 | tms1001 |
| 17 | 17 | tms1040* | 1024 * 8 | 64 * 4 | | | | tms1043 |
| 18 | 18 | tms1070 | 1024 * 8 | 64 * 4 | 11 | 8 | 4 | tms1071 |
| r241839 | r241840 | |
| 421 | 421 | ADDRESS_MAP_END |
| 422 | 422 | |
| 423 | 423 | |
| 424 | | static ADDRESS_MAP_START(data_6bit, AS_DATA, 8, tms1xxx_cpu_device) |
| 424 | static ADDRESS_MAP_START(data_64x4, AS_DATA, 8, tms1xxx_cpu_device) |
| 425 | 425 | AM_RANGE( 0x00, 0x3f ) AM_RAM |
| 426 | 426 | ADDRESS_MAP_END |
| 427 | 427 | |
| 428 | 428 | |
| 429 | | static ADDRESS_MAP_START(data_7bit, AS_DATA, 8, tms1xxx_cpu_device) |
| 429 | static ADDRESS_MAP_START(data_128x4, AS_DATA, 8, tms1xxx_cpu_device) |
| 430 | 430 | AM_RANGE( 0x00, 0x7f ) AM_RAM |
| 431 | 431 | ADDRESS_MAP_END |
| 432 | 432 | |
| 433 | 433 | |
| 434 | static ADDRESS_MAP_START(data_64x9_as4, AS_DATA, 8, tms1xxx_cpu_device) |
| 435 | AM_RANGE( 0x00, 0x8f ) AM_RAM |
| 436 | AM_RANGE( 0x90, 0xff ) AM_NOP |
| 437 | ADDRESS_MAP_END |
| 438 | |
| 439 | |
| 434 | 440 | void tms1xxx_cpu_device::device_start() |
| 435 | 441 | { |
| 436 | 442 | m_program = &space( AS_PROGRAM ); |
| r241839 | r241840 | |
| 625 | 631 | or321 = OR of pc5 and pc6, i.e. output is true if ((pc&0x60) != 0) |
| 626 | 632 | nand322 = NAND of pc0 through pc5 plus /pc6, |
| 627 | 633 | i.e. output is true if (pc != 0x3f) |
| 628 | | nand325 = nand pf nand323, or321 and nand322 |
| 634 | nand325 = nand of nand323, or321 and nand322 |
| 629 | 635 | This one is complex: |
| 630 | 636 | / or321 means if pc&0x60 is zero, output MUST be true |
| 631 | 637 | \ nand323 means if (pc&0x60=0x60) && (pc&0x1f != 0x1f), output MUST be true |
| r241839 | r241840 | |
| 641 | 647 | UINT8 xorval = ( m_pc & 0x3F ) == 0x3F ? 1 : 0; |
| 642 | 648 | UINT8 new_bit = ( ( m_pc ^ ( m_pc << 1 ) ) & 0x40 ) ? xorval : 1 - xorval; |
| 643 | 649 | |
| 644 | | m_pc = ( m_pc << 1 ) | new_bit; |
| 650 | m_pc = ((m_pc << 1) | new_bit) & ((1 << m_pc_size) - 1); |
| 645 | 651 | } |
| 646 | 652 | else |
| 647 | 653 | { |
| r241839 | r241840 | |
| 1020 | 1026 | |
| 1021 | 1027 | tms0980_cpu_device::tms0980_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 1022 | 1028 | : tms1xxx_cpu_device( mconfig, TMS0980, "TMS0980", tag, owner, clock, tms0980_decode, 0x00ff, 0x07ff, 7, 9, 4 |
| 1023 | | , 12, ADDRESS_MAP_NAME( program_11bit_9 ), 6, ADDRESS_MAP_NAME( data_6bit ), "tms0980", __FILE__) |
| 1029 | , 12, ADDRESS_MAP_NAME( program_11bit_9 ), 8, ADDRESS_MAP_NAME( data_64x9_as4 ), "tms0980", __FILE__) |
| 1024 | 1030 | { |
| 1025 | 1031 | } |
| 1026 | 1032 | |
| r241839 | r241840 | |
| 1034 | 1040 | |
| 1035 | 1041 | tms1000_cpu_device::tms1000_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 1036 | 1042 | : tms1xxx_cpu_device( mconfig, TMS1000, "TMS1000", tag, owner, clock, tms1000_default_decode, 0x00ff, 0x07ff, 6, 8, 2 |
| 1037 | | , 10, ADDRESS_MAP_NAME( program_10bit_8 ), 6, ADDRESS_MAP_NAME( data_6bit ), "tms1000", __FILE__) |
| 1043 | , 10, ADDRESS_MAP_NAME( program_10bit_8 ), 6, ADDRESS_MAP_NAME( data_64x4 ), "tms1000", __FILE__) |
| 1038 | 1044 | { |
| 1039 | 1045 | } |
| 1040 | 1046 | |
| 1041 | 1047 | |
| 1042 | 1048 | tms1000_cpu_device::tms1000_cpu_device(const machine_config &mconfig, device_type type, const char*name, const char *tag, device_t *owner, UINT32 clock, UINT16 o_mask, UINT16 r_mask, const char *shortname, const char *source) |
| 1043 | 1049 | : tms1xxx_cpu_device( mconfig, type, name, tag, owner, clock, tms1000_default_decode, o_mask, r_mask, 6, 8, 2 |
| 1044 | | , 10, ADDRESS_MAP_NAME( program_10bit_8 ), 6, ADDRESS_MAP_NAME( data_6bit ), shortname, source ) |
| 1050 | , 10, ADDRESS_MAP_NAME( program_10bit_8 ), 6, ADDRESS_MAP_NAME( data_64x4 ), shortname, source ) |
| 1045 | 1051 | { |
| 1046 | 1052 | } |
| 1047 | 1053 | |
| r241839 | r241840 | |
| 1078 | 1084 | |
| 1079 | 1085 | tms1100_cpu_device::tms1100_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 1080 | 1086 | : tms1xxx_cpu_device( mconfig, TMS1100, "TMS1100", tag, owner, clock, tms1100_default_decode, 0x00ff, 0x07ff, 6, 8, 3 |
| 1081 | | , 11, ADDRESS_MAP_NAME( program_11bit_8 ), 7, ADDRESS_MAP_NAME( data_7bit ), "tms1100", __FILE__ ) |
| 1087 | , 11, ADDRESS_MAP_NAME( program_11bit_8 ), 7, ADDRESS_MAP_NAME( data_128x4 ), "tms1100", __FILE__ ) |
| 1082 | 1088 | { |
| 1083 | 1089 | } |
| 1084 | 1090 | |
| 1085 | 1091 | |
| 1086 | 1092 | tms1100_cpu_device::tms1100_cpu_device(const machine_config &mconfig, device_type type, const char*name, const char *tag, device_t *owner, UINT32 clock, UINT16 o_mask, UINT16 r_mask, const char *shortname, const char *source) |
| 1087 | 1093 | : tms1xxx_cpu_device( mconfig, type, name, tag, owner, clock, tms1100_default_decode, o_mask, r_mask, 6, 8, 3 |
| 1088 | | , 11, ADDRESS_MAP_NAME( program_11bit_8 ), 7, ADDRESS_MAP_NAME( data_7bit ), shortname, source ) |
| 1094 | , 11, ADDRESS_MAP_NAME( program_11bit_8 ), 7, ADDRESS_MAP_NAME( data_128x4 ), shortname, source ) |
| 1089 | 1095 | { |
| 1090 | 1096 | } |
| 1091 | 1097 | |
trunk/src/mess/drivers/comp4.c
| r241839 | r241840 | |
| 15 | 15 | |
| 16 | 16 | TODO: |
| 17 | 17 | - write_r doesn't look right, maybe something missing in cpu emulation |
| 18 | | - correct output_pla |
| 19 | 18 | - layout |
| 20 | 19 | |
| 21 | 20 | ***************************************************************************/ |
| r241839 | r241840 | |
| 59 | 58 | READ8_MEMBER(comp4_state::read_k) |
| 60 | 59 | { |
| 61 | 60 | UINT8 k = 0; |
| 61 | |
| 62 | // read selected button rows |
| 63 | for (int i = 0; i < 3; i++) |
| 64 | if (m_o & (1 << (i + 1))) |
| 65 | k |= m_button_matrix[i]->read(); |
| 62 | 66 | |
| 63 | | if (m_o == 0) |
| 64 | | k |= m_button_matrix[0]->read(); |
| 65 | | else if (m_o == 1) |
| 66 | | k |= m_button_matrix[1]->read(); |
| 67 | | else if (m_o == 2) |
| 68 | | k |= m_button_matrix[2]->read(); |
| 69 | | |
| 70 | 67 | return k; |
| 71 | 68 | } |
| 72 | 69 | |
| 73 | 70 | WRITE16_MEMBER(comp4_state::write_r) |
| 74 | 71 | { |
| 75 | | // LEDs |
| 72 | // R..: LEDs |
| 76 | 73 | m_r = data; |
| 77 | 74 | } |
| 78 | 75 | |
| 79 | 76 | WRITE16_MEMBER(comp4_state::write_o) |
| 80 | 77 | { |
| 81 | | // O0: LEDs (common) |
| 78 | // O0?: LEDs (common) |
| 82 | 79 | // O1-O3: input mux |
| 83 | 80 | // other bits: N/C |
| 84 | 81 | m_o = data; |
| r241839 | r241840 | |
| 94 | 91 | |
| 95 | 92 | static INPUT_PORTS_START( comp4 ) |
| 96 | 93 | PORT_START("IN.0") |
| 97 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME("R") |
| 98 | | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4") |
| 99 | | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1") |
| 100 | | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7") |
| 94 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME("R") |
| 95 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4") |
| 96 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1") |
| 97 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7") |
| 101 | 98 | |
| 102 | 99 | PORT_START("IN.1") |
| 103 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0") |
| 104 | | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5") |
| 105 | | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2") |
| 106 | | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8") |
| 100 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0") |
| 101 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5") |
| 102 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2") |
| 103 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8") |
| 107 | 104 | |
| 108 | 105 | PORT_START("IN.2") |
| 109 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON9 ) PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("E") |
| 110 | | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON10 ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6") |
| 111 | | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON11 ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3") |
| 112 | | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON12 ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9") |
| 106 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("E") |
| 107 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6") |
| 108 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3") |
| 109 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9") |
| 113 | 110 | INPUT_PORTS_END |
| 114 | 111 | |
| 115 | 112 | |
| r241839 | r241840 | |
| 132 | 129 | |
| 133 | 130 | static const UINT16 comp4_output_pla[0x20] = |
| 134 | 131 | { |
| 135 | | /* O output PLA configuration currently unknown */ |
| 136 | | 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, |
| 137 | | 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, |
| 138 | | 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, |
| 139 | | 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f |
| 132 | // many unused bits, only O0 is actually used as external out |
| 133 | 0xda, 0x96, 0x9b, 0x97, 0x98, 0x94, 0x99, 0x95, |
| 134 | 0x9a, 0xa0, 0x94, 0x02, 0x35, 0x4a, 0x41, 0x00, |
| 135 | 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, |
| 136 | 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00 |
| 140 | 137 | }; |
| 141 | 138 | |
| 142 | 139 | |
trunk/src/mess/drivers/merlin.c
| r241839 | r241840 | |
| 144 | 144 | |
| 145 | 145 | static INPUT_PORTS_START( merlin ) |
| 146 | 146 | PORT_START("O.0") |
| 147 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME("Button 0") |
| 148 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Button 1") |
| 149 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON4) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("Button 3") |
| 150 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON3) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Button 2") |
| 147 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME("Button 0") |
| 148 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Button 1") |
| 149 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("Button 3") |
| 150 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Button 2") |
| 151 | 151 | |
| 152 | 152 | PORT_START("O.1") |
| 153 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON5) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Button 4") |
| 154 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON6) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Button 5") |
| 155 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON8) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Button 7") |
| 156 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON7) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Button 6") |
| 153 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Button 4") |
| 154 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Button 5") |
| 155 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Button 7") |
| 156 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Button 6") |
| 157 | 157 | |
| 158 | 158 | PORT_START("O.2") |
| 159 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON9) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Button 8") |
| 160 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON10) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Button 9") |
| 161 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON13) PORT_CODE(KEYCODE_S) PORT_NAME("Same Game") |
| 162 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON11) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Button 10") |
| 159 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Button 8") |
| 160 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Button 9") |
| 161 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_S) PORT_NAME("Same Game") |
| 162 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Button 10") |
| 163 | 163 | |
| 164 | 164 | PORT_START("O.3") |
| 165 | 165 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED) |
| 166 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON15) PORT_CODE(KEYCODE_C) PORT_NAME("Comp Turn") |
| 167 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON14) PORT_CODE(KEYCODE_H) PORT_NAME("Hit Me") |
| 168 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON12) PORT_CODE(KEYCODE_N) PORT_NAME("New Game") |
| 166 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_C) PORT_NAME("Comp Turn") |
| 167 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_H) PORT_NAME("Hit Me") |
| 168 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_N) PORT_NAME("New Game") |
| 169 | 169 | INPUT_PORTS_END |
| 170 | 170 | |
| 171 | 171 | |
trunk/src/mess/drivers/wizatron.c
| r241839 | r241840 | |
| 3 | 3 | /*************************************************************************** |
| 4 | 4 | |
| 5 | 5 | Texas Instruments WIZ-A-TRON |
| 6 | | * TMC0907NL ZA0379 (die labeled 0970F-07B) |
| 6 | * TMC0907NL DP0907BS (die labeled 0970F-07B) |
| 7 | 7 | |
| 8 | 8 | Other handhelds assumed to be on similar hardware: |
| 9 | 9 | - Math Magic |
| r241839 | r241840 | |
| 27 | 27 | public: |
| 28 | 28 | wizatron_state(const machine_config &mconfig, device_type type, const char *tag) |
| 29 | 29 | : driver_device(mconfig, type, tag), |
| 30 | | m_maincpu(*this, "maincpu") |
| 30 | m_maincpu(*this, "maincpu"), |
| 31 | m_button_matrix(*this, "IN") |
| 31 | 32 | { } |
| 32 | 33 | |
| 33 | 34 | required_device<cpu_device> m_maincpu; |
| 35 | required_ioport_array<4> m_button_matrix; |
| 34 | 36 | |
| 35 | 37 | UINT16 m_r; |
| 36 | 38 | UINT16 m_o; |
| r241839 | r241840 | |
| 52 | 54 | READ8_MEMBER(wizatron_state::read_k) |
| 53 | 55 | { |
| 54 | 56 | UINT8 k = 0; |
| 57 | |
| 58 | // read selected button rows |
| 59 | for (int i = 0; i < 4; i++) |
| 60 | if (m_o & (1 << (i + 1))) |
| 61 | k |= m_button_matrix[i]->read(); |
| 55 | 62 | |
| 56 | 63 | return k; |
| 57 | 64 | } |
| 58 | 65 | |
| 59 | 66 | WRITE16_MEMBER(wizatron_state::write_r) |
| 60 | 67 | { |
| 68 | // R..: select digit |
| 61 | 69 | m_r = data; |
| 62 | 70 | } |
| 63 | 71 | |
| 64 | 72 | WRITE16_MEMBER(wizatron_state::write_o) |
| 65 | 73 | { |
| 74 | // O0-O6: digit segments A-G |
| 75 | // O1-O4: input mux |
| 66 | 76 | m_o = data; |
| 67 | 77 | } |
| 68 | 78 | |
| r241839 | r241840 | |
| 75 | 85 | ***************************************************************************/ |
| 76 | 86 | |
| 77 | 87 | static INPUT_PORTS_START( wizatron ) |
| 88 | PORT_START("IN.0") |
| 89 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) |
| 90 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) |
| 91 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) |
| 92 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) |
| 93 | |
| 94 | PORT_START("IN.1") |
| 95 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 96 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 97 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 98 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 99 | |
| 100 | PORT_START("IN.2") |
| 101 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 102 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 103 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 104 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 105 | |
| 106 | PORT_START("IN.3") |
| 107 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 108 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 109 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 110 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) |
| 78 | 111 | INPUT_PORTS_END |
| 79 | 112 | |
| 80 | 113 | |
| r241839 | r241840 | |
| 97 | 130 | |
| 98 | 131 | static const UINT16 wizatron_output_pla[0x20] = |
| 99 | 132 | { |
| 100 | | /* O output PLA configuration currently unknown */ |
| 101 | | 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, |
| 102 | | 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, |
| 103 | | 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, |
| 104 | | 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f |
| 133 | // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, -, X, /, r |
| 134 | 0x7e, 0x30, 0x6d, 0x79, 0x33, 0x5b, 0x5f, 0x70, |
| 135 | 0x7f, 0x7b, 0x26, 0x02, 0x35, 0x4a, 0x05, 0x00, |
| 136 | 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, |
| 137 | 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00 |
| 105 | 138 | }; |
| 106 | 139 | |
| 107 | 140 | |
| r241839 | r241840 | |
| 128 | 161 | ***************************************************************************/ |
| 129 | 162 | |
| 130 | 163 | ROM_START( wizatron ) |
| 131 | | ROM_REGION( 0x0400, "maincpu", ROMREGION_ERASE00 ) |
| 132 | | ROM_LOAD( "za0379", 0x0000, 0x0400, CRC(5a6af094) SHA1(b1f27e1f13f4db3b052dd50fb08dbf9c4d8db26e) ) |
| 164 | ROM_REGION( 0x0400, "maincpu", 0 ) |
| 165 | ROM_LOAD( "dp0907bs", 0x0000, 0x0400, CRC(5a6af094) SHA1(b1f27e1f13f4db3b052dd50fb08dbf9c4d8db26e) ) |
| 133 | 166 | ROM_END |
| 134 | 167 | |
| 135 | 168 | |