trunk/src/mess/drivers/starwbc.c
| r242189 | r242190 | |
| 5 | 5 | Kenner Star Wars - Electronic Battle Command |
| 6 | 6 | * TMS1100 MCU, labeled MP3438A |
| 7 | 7 | |
| 8 | | This is a small tabletop space-dogfighting game. |
| 8 | This is a small tabletop space-dogfighting game. To start the game, |
| 9 | press BASIC/INTER/ADV and enter P#(number of players), then |
| 10 | START TURN. Refer to the official manual for more information. |
| 9 | 11 | |
| 10 | 12 | |
| 11 | 13 | ***************************************************************************/ |
| r242189 | r242190 | |
| 32 | 34 | { } |
| 33 | 35 | |
| 34 | 36 | required_device<cpu_device> m_maincpu; |
| 35 | | required_ioport_array<11> m_button_matrix; |
| 37 | required_ioport_array<5> m_button_matrix; |
| 36 | 38 | required_device<speaker_sound_device> m_speaker; |
| 37 | 39 | |
| 38 | 40 | UINT16 m_r; |
| r242189 | r242190 | |
| 137 | 139 | UINT8 k = 0; |
| 138 | 140 | |
| 139 | 141 | // read selected button rows |
| 140 | | for (int i = 0; i < 11; i++) |
| 141 | | if (m_r >> i & 1) |
| 142 | for (int i = 0; i < 5; i++) |
| 143 | { |
| 144 | const int r[5] = { 0, 1, 3, 5, 7 }; |
| 145 | if (m_r >> r[i] & 1) |
| 142 | 146 | k |= m_button_matrix[i]->read(); |
| 147 | } |
| 143 | 148 | |
| 144 | | // const int r[5] = { 3, 5, 6, 7, 9 }; //nope |
| 145 | | //printf("%04X ",m_r); |
| 146 | | |
| 147 | 149 | return k; |
| 148 | 150 | } |
| 149 | 151 | |
| r242189 | r242190 | |
| 151 | 153 | { |
| 152 | 154 | // R0,R2,R4: select lamp row |
| 153 | 155 | // R6,R8: select digit |
| 154 | | // R3,R5-R7,R9: input mux |
| 156 | // R0,R1,R3,R5,R7: input mux |
| 155 | 157 | // R9: piezo speaker |
| 156 | 158 | m_speaker->level_w(data >> 9 & 1); |
| 157 | 159 | |
| r242189 | r242190 | |
| 174 | 176 | |
| 175 | 177 | ***************************************************************************/ |
| 176 | 178 | |
| 177 | | static INPUT_PORTS_START( starwbc ) |
| 178 | | PORT_START("IN.0") |
| 179 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) |
| 180 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) |
| 181 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) |
| 182 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) |
| 179 | /* physical button layout and labels is like this: |
| 183 | 180 | |
| 184 | | PORT_START("IN.1") |
| 185 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) |
| 186 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) |
| 187 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) |
| 188 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) |
| 181 | (reconnnaissance=yellow) (tactical reaction=green) |
| 182 | [MAGNA] [ENEMY] [EM] [BS] [SCR] |
| 189 | 183 | |
| 190 | | PORT_START("IN.2") |
| 191 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) |
| 192 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) |
| 193 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) |
| 194 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) |
| 184 | [BASIC] [INTER] [START TURN] [END TURN] [MOVE] [FIRE] |
| 185 | [ADV] [P#] [<] [^] [>] [v] |
| 186 | (game=blue) (maneuvers=red) */ |
| 195 | 187 | |
| 196 | | PORT_START("IN.3") |
| 197 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) |
| 198 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) |
| 199 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) |
| 200 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) |
| 188 | static INPUT_PORTS_START( starwbc ) |
| 189 | PORT_START("IN.0") // R0 |
| 190 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_NAME("Basic Game") |
| 191 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_NAME("Intermediate Game") |
| 192 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_NAME("Advanced Game") |
| 193 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_P) PORT_NAME("Player Number") |
| 201 | 194 | |
| 202 | | PORT_START("IN.4") |
| 203 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) |
| 204 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) |
| 205 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) |
| 206 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) |
| 195 | PORT_START("IN.1") // R1 |
| 196 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Start Turn") |
| 197 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED) |
| 198 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED) |
| 199 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_NAME("End Turn") |
| 207 | 200 | |
| 208 | | PORT_START("IN.5") |
| 209 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) |
| 210 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) |
| 211 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) |
| 212 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) |
| 201 | PORT_START("IN.2") // R3 |
| 202 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_NAME("Magna Scan") // only used in adv. game |
| 203 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_NAME("Enemy Scan") // only used in adv. game |
| 204 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED) |
| 205 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_NAME("Screen Up") |
| 213 | 206 | |
| 214 | | PORT_START("IN.6") |
| 215 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) |
| 216 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) |
| 217 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) |
| 218 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) |
| 207 | PORT_START("IN.3") // R5 |
| 208 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_NAME("Evasive Maneuvers") |
| 209 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_NAME("Move") |
| 210 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_NAME("Fire") |
| 211 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_NAME("Battle Stations") |
| 219 | 212 | |
| 220 | | PORT_START("IN.7") |
| 221 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) |
| 222 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) |
| 223 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) |
| 224 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) |
| 225 | | |
| 226 | | PORT_START("IN.8") |
| 227 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) |
| 228 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) |
| 229 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) |
| 230 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) |
| 231 | | |
| 232 | | PORT_START("IN.9") |
| 233 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) |
| 234 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) |
| 235 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) |
| 236 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) |
| 237 | | |
| 238 | | PORT_START("IN.10") |
| 239 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) |
| 240 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) |
| 241 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) |
| 242 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) |
| 213 | PORT_START("IN.4") // R7 |
| 214 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("Left") |
| 215 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP) PORT_NAME("Up") |
| 216 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN) PORT_NAME("Down") |
| 217 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("Right") |
| 243 | 218 | INPUT_PORTS_END |
| 244 | 219 | |
| 245 | 220 | |