trunk/src/mess/drivers/elecbowl.c
| r0 | r244801 | |
| 1 | // license:BSD-3-Clause |
| 2 | // copyright-holders:hap |
| 3 | /*************************************************************************** |
| 4 | |
| 5 | Marx Series 300 Electronic Bowling Game |
| 6 | * TMS1100NLL MP3403 DBS 7836 SINGAPORE |
| 7 | |
| 8 | 10 lamps for bowling pins + 3 more bulbs, and 7segs for frame number and |
| 9 | scores. Board size is 10-12" by 6-8". |
| 10 | |
| 11 | some clues: |
| 12 | - it's from 1978 |
| 13 | - Merlin is MP3404, Amaze-A-Tron is MP3405, this one is MP3403 |
| 14 | - it plays some short jingles (you need to be lucky with button mashing) |
| 15 | |
| 16 | ***************************************************************************/ |
| 17 | |
| 18 | #include "emu.h" |
| 19 | #include "cpu/tms0980/tms0980.h" |
| 20 | #include "sound/speaker.h" |
| 21 | |
| 22 | // internal artwork |
| 23 | #include "elecbowl.lh" |
| 24 | |
| 25 | |
| 26 | class elecbowl_state : public driver_device |
| 27 | { |
| 28 | public: |
| 29 | elecbowl_state(const machine_config &mconfig, device_type type, const char *tag) |
| 30 | : driver_device(mconfig, type, tag), |
| 31 | m_maincpu(*this, "maincpu"), |
| 32 | m_inp_matrix(*this, "IN"), |
| 33 | m_speaker(*this, "speaker") |
| 34 | { } |
| 35 | |
| 36 | // devices |
| 37 | required_device<cpu_device> m_maincpu; |
| 38 | required_ioport_array<4> m_inp_matrix; |
| 39 | required_device<speaker_sound_device> m_speaker; |
| 40 | |
| 41 | UINT16 m_r; |
| 42 | UINT16 m_o; |
| 43 | UINT16 m_inp_mux; |
| 44 | |
| 45 | DECLARE_READ8_MEMBER(read_k); |
| 46 | DECLARE_WRITE16_MEMBER(write_r); |
| 47 | DECLARE_WRITE16_MEMBER(write_o); |
| 48 | |
| 49 | virtual void machine_start(); |
| 50 | }; |
| 51 | |
| 52 | |
| 53 | |
| 54 | /*************************************************************************** |
| 55 | |
| 56 | I/O |
| 57 | |
| 58 | ***************************************************************************/ |
| 59 | |
| 60 | READ8_MEMBER(elecbowl_state::read_k) |
| 61 | { |
| 62 | UINT8 k = 0; |
| 63 | |
| 64 | // read selected input rows |
| 65 | for (int i = 0; i < 4; i++) |
| 66 | if (m_inp_mux >> i & 1) |
| 67 | k |= m_inp_matrix[i]->read(); |
| 68 | |
| 69 | return k; |
| 70 | } |
| 71 | |
| 72 | WRITE16_MEMBER(elecbowl_state::write_r) |
| 73 | { |
| 74 | // R4-R7: input mux |
| 75 | m_inp_mux = data >> 4 & 0xf; |
| 76 | |
| 77 | // R9: speaker out |
| 78 | m_speaker->level_w(data >> 9 & 1); |
| 79 | |
| 80 | // R10: maybe a switch or other button row? |
| 81 | // others: ? |
| 82 | } |
| 83 | |
| 84 | WRITE16_MEMBER(elecbowl_state::write_o) |
| 85 | { |
| 86 | // ? |
| 87 | } |
| 88 | |
| 89 | |
| 90 | |
| 91 | /*************************************************************************** |
| 92 | |
| 93 | Inputs |
| 94 | |
| 95 | ***************************************************************************/ |
| 96 | |
| 97 | static INPUT_PORTS_START( elecbowl ) |
| 98 | PORT_START("IN.0") // R4 |
| 99 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) |
| 100 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) |
| 101 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) |
| 102 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) |
| 103 | |
| 104 | PORT_START("IN.1") // R5 |
| 105 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) |
| 106 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) |
| 107 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) |
| 108 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) |
| 109 | |
| 110 | PORT_START("IN.2") // R6 |
| 111 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) |
| 112 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) |
| 113 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) |
| 114 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) // reset/newgame? |
| 115 | |
| 116 | PORT_START("IN.3") // R7 |
| 117 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) |
| 118 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) |
| 119 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) |
| 120 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) |
| 121 | INPUT_PORTS_END |
| 122 | |
| 123 | |
| 124 | |
| 125 | /*************************************************************************** |
| 126 | |
| 127 | Machine Config |
| 128 | |
| 129 | ***************************************************************************/ |
| 130 | |
| 131 | void elecbowl_state::machine_start() |
| 132 | { |
| 133 | // zerofill |
| 134 | m_o = 0; |
| 135 | m_r = 0; |
| 136 | m_inp_mux = 0; |
| 137 | |
| 138 | // register for savestates |
| 139 | save_item(NAME(m_o)); |
| 140 | save_item(NAME(m_r)); |
| 141 | save_item(NAME(m_inp_mux)); |
| 142 | } |
| 143 | |
| 144 | |
| 145 | static const UINT16 elecbowl_output_pla[0x20] = |
| 146 | { |
| 147 | /* O output PLA configuration currently unknown */ |
| 148 | 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, |
| 149 | 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, |
| 150 | 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, |
| 151 | 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f |
| 152 | }; |
| 153 | |
| 154 | static MACHINE_CONFIG_START( elecbowl, elecbowl_state ) |
| 155 | |
| 156 | /* basic machine hardware */ |
| 157 | MCFG_CPU_ADD("maincpu", TMS1100, 300000) // approximation - unknown freq |
| 158 | MCFG_TMS1XXX_OUTPUT_PLA(elecbowl_output_pla) |
| 159 | MCFG_TMS1XXX_READ_K_CB(READ8(elecbowl_state, read_k)) |
| 160 | MCFG_TMS1XXX_WRITE_R_CB(WRITE16(elecbowl_state, write_r)) |
| 161 | MCFG_TMS1XXX_WRITE_O_CB(WRITE16(elecbowl_state, write_o)) |
| 162 | |
| 163 | MCFG_DEFAULT_LAYOUT(layout_elecbowl) |
| 164 | |
| 165 | /* no video! */ |
| 166 | |
| 167 | /* sound hardware */ |
| 168 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 169 | MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) |
| 170 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 171 | MACHINE_CONFIG_END |
| 172 | |
| 173 | |
| 174 | |
| 175 | /*************************************************************************** |
| 176 | |
| 177 | Game driver(s) |
| 178 | |
| 179 | ***************************************************************************/ |
| 180 | |
| 181 | ROM_START( elecbowl ) |
| 182 | ROM_REGION( 0x0800, "maincpu", 0 ) |
| 183 | ROM_LOAD( "mp3403", 0x0000, 0x0800, CRC(9eabaa7d) SHA1(b1f54587ed7f2bbf3a5d49075c807296384c2b06) ) |
| 184 | |
| 185 | ROM_REGION( 867, "maincpu:mpla", 0 ) |
| 186 | ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified |
| 187 | ROM_REGION( 365, "maincpu:opla", 0 ) |
| 188 | ROM_LOAD( "tms1100_elecbowl_opla.pla", 0, 365, NO_DUMP ) |
| 189 | ROM_END |
| 190 | |
| 191 | |
| 192 | CONS( 1978, elecbowl, 0, 0, elecbowl, elecbowl, driver_device, 0, "Marx", "Electronic Bowling", GAME_SUPPORTS_SAVE | GAME_MECHANICAL | GAME_NOT_WORKING ) |
trunk/src/mess/drivers/hh_tms1k.c
| r244800 | r244801 | |
| 16 | 16 | @MP0914 TMS1000 1978, Entex Baseball 1 |
| 17 | 17 | @MP1030 TMS1100 1980, APF Mathemagician |
| 18 | 18 | @MP3226 TMS1000 1978, Milton Bradley Simon |
| 19 | | @MP3403 TMS1100 1978, Marx Electronic Bowling |
| 19 | MP3403 TMS1100 1978, Marx Electronic Bowling |
| 20 | 20 | @MP3404 TMS1100 1978, Parker Brothers Merlin |
| 21 | 21 | @MP3405 TMS1100 1979, Coleco Amaze-A-Tron |
| 22 | 22 | @MP3438A TMS1100 1979, Kenner Star Wars Electronic Battle Command |
| r244800 | r244801 | |
| 68 | 68 | #include "bankshot.lh" |
| 69 | 69 | #include "cnsector.lh" |
| 70 | 70 | #include "ebball.lh" |
| 71 | | #include "elecbowl.lh" |
| 72 | 71 | #include "elecdet.lh" |
| 73 | 72 | #include "comp4.lh" |
| 74 | 73 | #include "mathmagi.lh" |
| r244800 | r244801 | |
| 156 | 155 | DECLARE_WRITE16_MEMBER(starwbc_write_r); |
| 157 | 156 | DECLARE_WRITE16_MEMBER(starwbc_write_o); |
| 158 | 157 | |
| 159 | | DECLARE_READ8_MEMBER(elecbowl_read_k); |
| 160 | | DECLARE_WRITE16_MEMBER(elecbowl_write_r); |
| 161 | | DECLARE_WRITE16_MEMBER(elecbowl_write_o); |
| 162 | | |
| 163 | 158 | DECLARE_READ8_MEMBER(comp4_read_k); |
| 164 | 159 | DECLARE_WRITE16_MEMBER(comp4_write_r); |
| 165 | 160 | DECLARE_WRITE16_MEMBER(comp4_write_o); |
| r244800 | r244801 | |
| 1148 | 1143 | |
| 1149 | 1144 | /*************************************************************************** |
| 1150 | 1145 | |
| 1151 | | Marx Series 300 Electronic Bowling Game |
| 1152 | | * TMS1100NLL MP3403 DBS 7836 SINGAPORE |
| 1153 | | |
| 1154 | | 10 lamps for bowling pins + 3 more bulbs, and 7segs for frame number and |
| 1155 | | scores. Board size is 10-12" by 6-8". |
| 1156 | | |
| 1157 | | some clues: |
| 1158 | | - it's from 1978 |
| 1159 | | - Merlin is MP3404, Amaze-A-Tron is MP3405, this one is MP3403 |
| 1160 | | - it plays some short jingles (you need to be lucky with button mashing) |
| 1161 | | |
| 1162 | | ***************************************************************************/ |
| 1163 | | |
| 1164 | | READ8_MEMBER(hh_tms1k_state::elecbowl_read_k) |
| 1165 | | { |
| 1166 | | return read_inputs(4); |
| 1167 | | } |
| 1168 | | |
| 1169 | | WRITE16_MEMBER(hh_tms1k_state::elecbowl_write_r) |
| 1170 | | { |
| 1171 | | // R4-R7: input mux |
| 1172 | | m_inp_mux = data >> 4 & 0xf; |
| 1173 | | |
| 1174 | | // R9: speaker out |
| 1175 | | m_speaker->level_w(data >> 9 & 1); |
| 1176 | | |
| 1177 | | // R10: maybe a switch or other button row? |
| 1178 | | // others: ? |
| 1179 | | } |
| 1180 | | |
| 1181 | | WRITE16_MEMBER(hh_tms1k_state::elecbowl_write_o) |
| 1182 | | { |
| 1183 | | // ? |
| 1184 | | } |
| 1185 | | |
| 1186 | | static INPUT_PORTS_START( elecbowl ) |
| 1187 | | PORT_START("IN.0") // R4 |
| 1188 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) |
| 1189 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) |
| 1190 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) |
| 1191 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) |
| 1192 | | |
| 1193 | | PORT_START("IN.1") // R5 |
| 1194 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) |
| 1195 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) |
| 1196 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) |
| 1197 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) |
| 1198 | | |
| 1199 | | PORT_START("IN.2") // R6 |
| 1200 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) |
| 1201 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) |
| 1202 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) |
| 1203 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) // reset/newgame? |
| 1204 | | |
| 1205 | | PORT_START("IN.3") // R7 |
| 1206 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) |
| 1207 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) |
| 1208 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) |
| 1209 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) |
| 1210 | | INPUT_PORTS_END |
| 1211 | | |
| 1212 | | |
| 1213 | | static const UINT16 elecbowl_output_pla[0x20] = |
| 1214 | | { |
| 1215 | | /* O output PLA configuration currently unknown */ |
| 1216 | | 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, |
| 1217 | | 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, |
| 1218 | | 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, |
| 1219 | | 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f |
| 1220 | | }; |
| 1221 | | |
| 1222 | | static MACHINE_CONFIG_START( elecbowl, hh_tms1k_state ) |
| 1223 | | |
| 1224 | | /* basic machine hardware */ |
| 1225 | | MCFG_CPU_ADD("maincpu", TMS1100, 300000) // approximation - unknown freq |
| 1226 | | MCFG_TMS1XXX_OUTPUT_PLA(elecbowl_output_pla) |
| 1227 | | MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, elecbowl_read_k)) |
| 1228 | | MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, elecbowl_write_r)) |
| 1229 | | MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, elecbowl_write_o)) |
| 1230 | | |
| 1231 | | /* no video! */ |
| 1232 | | |
| 1233 | | /* sound hardware */ |
| 1234 | | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 1235 | | MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) |
| 1236 | | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 1237 | | MACHINE_CONFIG_END |
| 1238 | | |
| 1239 | | |
| 1240 | | |
| 1241 | | |
| 1242 | | |
| 1243 | | /*************************************************************************** |
| 1244 | | |
| 1245 | 1146 | Milton Bradley Comp IV |
| 1246 | 1147 | * TMC0904NL CP0904A (die labeled 4A0970D-04A) |
| 1247 | 1148 | |
| r244800 | r244801 | |
| 2138 | 2039 | ROM_END |
| 2139 | 2040 | |
| 2140 | 2041 | |
| 2141 | | ROM_START( elecbowl ) |
| 2142 | | ROM_REGION( 0x0800, "maincpu", 0 ) |
| 2143 | | ROM_LOAD( "mp3403", 0x0000, 0x0800, CRC(9eabaa7d) SHA1(b1f54587ed7f2bbf3a5d49075c807296384c2b06) ) |
| 2144 | | |
| 2145 | | ROM_REGION( 867, "maincpu:mpla", 0 ) |
| 2146 | | ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified |
| 2147 | | ROM_REGION( 365, "maincpu:opla", 0 ) |
| 2148 | | ROM_LOAD( "tms1100_elecbowl_opla.pla", 0, 365, NO_DUMP ) |
| 2149 | | ROM_END |
| 2150 | | |
| 2151 | | |
| 2152 | 2042 | ROM_START( comp4 ) |
| 2153 | 2043 | ROM_REGION( 0x0400, "maincpu", 0 ) |
| 2154 | 2044 | ROM_LOAD( "tmc0904nl_cp0904a", 0x0000, 0x0400, CRC(6233ee1b) SHA1(738e109b38c97804b4ec52bed80b00a8634ad453) ) |
| r244800 | r244801 | |
| 2277 | 2167 | CONS( 1979, starwbc, 0, 0, starwbc, starwbc, driver_device, 0, "Kenner", "Star Wars - Electronic Battle Command", GAME_SUPPORTS_SAVE ) |
| 2278 | 2168 | CONS( 1979, starwbcp, starwbc, 0, starwbc, starwbc, driver_device, 0, "Kenner", "Star Wars - Electronic Battle Command (prototype)", GAME_SUPPORTS_SAVE ) |
| 2279 | 2169 | |
| 2280 | | CONS( 1978, elecbowl, 0, 0, elecbowl, elecbowl, driver_device, 0, "Marx", "Electronic Bowling", GAME_SUPPORTS_SAVE | GAME_MECHANICAL | GAME_NOT_WORKING ) |
| 2281 | | |
| 2282 | 2170 | CONS( 1977, comp4, 0, 0, comp4, comp4, driver_device, 0, "Milton Bradley", "Comp IV", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) |
| 2283 | 2171 | CONS( 1978, simon, 0, 0, simon, simon, driver_device, 0, "Milton Bradley", "Simon (Rev. A)", GAME_SUPPORTS_SAVE ) |
| 2284 | 2172 | |