trunk/src/mame/drivers/vicdual.c
r18104 | r18105 | |
43 | 43 | The timing is implemented according to the schematics, but |
44 | 44 | who knows... |
45 | 45 | * DIP switches need verifying in most of the games |
46 | | * DIP switch locations need to be added to all the games |
| 46 | * DIP switch locations need to be added to most of the games |
47 | 47 | |
48 | 48 | ****************************************************************************/ |
49 | 49 | |
r18104 | r18105 | |
218 | 218 | /* video hardware */ |
219 | 219 | MCFG_SCREEN_ADD("screen", RASTER) |
220 | 220 | MCFG_SCREEN_RAW_PARAMS(VICDUAL_PIXEL_CLOCK, VICDUAL_HTOTAL, VICDUAL_HBEND, VICDUAL_HBSTART, VICDUAL_VTOTAL, VICDUAL_VBEND, VICDUAL_VBSTART) |
221 | | |
222 | 221 | MACHINE_CONFIG_END |
223 | 222 | |
224 | 223 | |
r18104 | r18105 | |
300 | 299 | /* audio hardware */ |
301 | 300 | MCFG_SPEAKER_STANDARD_MONO("mono") |
302 | 301 | MCFG_FRAGMENT_ADD(depthch_audio) |
303 | | |
304 | 302 | MACHINE_CONFIG_END |
305 | 303 | |
306 | 304 | |
r18104 | r18105 | |
384 | 382 | /* video hardware */ |
385 | 383 | MCFG_SCREEN_MODIFY("screen") |
386 | 384 | MCFG_SCREEN_UPDATE_DRIVER(vicdual_state, screen_update_vicdual_bw) |
387 | | |
388 | 385 | MACHINE_CONFIG_END |
389 | 386 | |
390 | 387 | |
r18104 | r18105 | |
491 | 488 | /* audio hardware */ |
492 | 489 | MCFG_SPEAKER_STANDARD_MONO("mono") |
493 | 490 | MCFG_FRAGMENT_ADD(frogs_audio) |
494 | | |
495 | 491 | MACHINE_CONFIG_END |
496 | 492 | |
497 | 493 | |
r18104 | r18105 | |
679 | 675 | /* audio hardware */ |
680 | 676 | MCFG_SPEAKER_STANDARD_MONO("mono") |
681 | 677 | MCFG_FRAGMENT_ADD(headon_audio) |
682 | | |
683 | 678 | MACHINE_CONFIG_END |
684 | 679 | |
685 | 680 | static MACHINE_CONFIG_DERIVED( headons, headon ) |
r18104 | r18105 | |
690 | 685 | MACHINE_CONFIG_END |
691 | 686 | |
692 | 687 | |
693 | | |
694 | 688 | static MACHINE_CONFIG_DERIVED( sspaceat, vicdual_root ) |
695 | 689 | |
696 | 690 | /* basic machine hardware */ |
r18104 | r18105 | |
701 | 695 | /* video hardware */ |
702 | 696 | MCFG_SCREEN_MODIFY("screen") |
703 | 697 | MCFG_SCREEN_UPDATE_DRIVER(vicdual_state, screen_update_vicdual_bw_or_color) |
704 | | |
705 | 698 | MACHINE_CONFIG_END |
706 | 699 | |
707 | 700 | |
r18104 | r18105 | |
899 | 892 | /* audio hardware */ |
900 | 893 | MCFG_SPEAKER_STANDARD_MONO("mono") |
901 | 894 | MCFG_FRAGMENT_ADD(headon_audio) |
902 | | |
903 | 895 | MACHINE_CONFIG_END |
904 | 896 | |
905 | 897 | static MACHINE_CONFIG_DERIVED( headon2bw, headon2 ) |
r18104 | r18105 | |
921 | 913 | /* video hardware */ |
922 | 914 | MCFG_SCREEN_MODIFY("screen") |
923 | 915 | MCFG_SCREEN_UPDATE_DRIVER(vicdual_state, screen_update_vicdual_color) |
924 | | |
925 | 916 | MACHINE_CONFIG_END |
926 | 917 | |
927 | 918 | |
r18104 | r18105 | |
1182 | 1173 | ADDRESS_MAP_END |
1183 | 1174 | |
1184 | 1175 | |
| 1176 | /* several of the games' lives DIPs are spread across two input ports */ |
| 1177 | CUSTOM_INPUT_MEMBER(vicdual_state::vicdual_fake_lives_r) |
| 1178 | { |
| 1179 | static const char *const portnames[] = { "FAKE_LIVES1", "FAKE_LIVES2" }; |
| 1180 | |
| 1181 | /* use the low byte for the bitmask */ |
| 1182 | UINT8 bit_mask = ((FPTR)param) & 0xff; |
| 1183 | |
| 1184 | /* and use d8 for the port */ |
| 1185 | int port = ((FPTR)param) >> 8 & 1; |
| 1186 | return (ioport(portnames[port])->read_safe(0) & bit_mask) ? 0 : 1; |
| 1187 | } |
| 1188 | |
| 1189 | |
1185 | 1190 | static INPUT_PORTS_START( invho2 ) |
1186 | 1191 | PORT_START("IN0") |
1187 | 1192 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1188 | 1193 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1189 | | PORT_DIPNAME( 0x04, 0x04, "Head On Lives (1/2)" ) |
1190 | | PORT_DIPSETTING( 0x04, "+0" ) |
1191 | | PORT_DIPSETTING( 0x00, "+1" ) |
| 1194 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_fake_lives_r, (void *)0x001) |
1192 | 1195 | PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unused ) ) |
1193 | 1196 | PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) |
1194 | 1197 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
r18104 | r18105 | |
1199 | 1202 | PORT_START("IN1") |
1200 | 1203 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1201 | 1204 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1202 | | PORT_DIPNAME( 0x04, 0x00, "Head On Lives (2/2)" ) |
1203 | | PORT_DIPSETTING( 0x04, "+0" ) |
1204 | | PORT_DIPSETTING( 0x00, "+1" ) |
| 1205 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_fake_lives_r, (void *)0x002) |
1205 | 1206 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_get_composite_blank_comp, NULL) |
1206 | 1207 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY |
1207 | 1208 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY |
r18104 | r18105 | |
1210 | 1211 | PORT_START("IN2") |
1211 | 1212 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1212 | 1213 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1213 | | PORT_DIPNAME( 0x04, 0x00, "Invinco Lives" ) |
1214 | | PORT_DIPSETTING( 0x00, "5" ) |
1215 | | PORT_DIPSETTING( 0x04, "6" ) |
| 1214 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_fake_lives_r, (void *)0x101) |
1216 | 1215 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_get_timer_value, NULL) |
1217 | 1216 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 ) |
1218 | 1217 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) |
1219 | | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) /* probably unused */ |
| 1218 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
1220 | 1219 | |
1221 | 1220 | PORT_START("IN3") |
1222 | 1221 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1223 | 1222 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1224 | | /* There's probably a bug in the code: this would likely be the second */ |
1225 | | /* bit of the Invinco Lives setting, but the game reads bit 3 instead */ |
1226 | | /* of bit 2. */ |
1227 | | PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unused ) ) |
1228 | | PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) |
1229 | | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1223 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_fake_lives_r, (void *)0x102) |
1230 | 1224 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_read_coin_status, NULL) |
1231 | 1225 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Game Select") PORT_TOGGLE |
1232 | 1226 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) |
1233 | 1227 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
1234 | 1228 | |
1235 | 1229 | PORT_COIN |
| 1230 | |
| 1231 | PORT_START("FAKE_LIVES1") |
| 1232 | PORT_DIPNAME( 0x03, 0x01, "Head On 2 Lives" ) PORT_DIPLOCATION("SW1:1,2") |
| 1233 | PORT_DIPSETTING( 0x00, "2" ) |
| 1234 | PORT_DIPSETTING( 0x01, "3" ) |
| 1235 | // PORT_DIPSETTING( 0x02, "3" ) // dupe |
| 1236 | PORT_DIPSETTING( 0x03, "4" ) |
| 1237 | |
| 1238 | /* There's probably a bug in the Invinco game code: |
| 1239 | it does support lives set to 5 or 6, but the game |
| 1240 | reads IN3 bit 3 instead of bit 2. |
| 1241 | Note that the manual only lists setting it to 3 or 4. |
| 1242 | */ |
| 1243 | PORT_START("FAKE_LIVES2") |
| 1244 | PORT_DIPNAME( 0x03, 0x03, "Invinco Lives" ) PORT_DIPLOCATION("SW1:3,4") |
| 1245 | PORT_DIPSETTING( 0x03, "3" ) |
| 1246 | PORT_DIPSETTING( 0x02, "4" ) |
| 1247 | // PORT_DIPSETTING( 0x01, "5" ) // results in 3, see above |
| 1248 | // PORT_DIPSETTING( 0x00, "6" ) // results in 4, see above |
| 1249 | |
1236 | 1250 | INPUT_PORTS_END |
1237 | 1251 | |
1238 | 1252 | |
r18104 | r18105 | |
1240 | 1254 | PORT_START("IN0") |
1241 | 1255 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1242 | 1256 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1243 | | PORT_DIPNAME( 0x04, 0x00, "Invinco Lives (1/2)" ) |
1244 | | PORT_DIPSETTING( 0x00, "+0" ) |
1245 | | PORT_DIPSETTING( 0x04, "+1" ) |
| 1257 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_fake_lives_r, (void *)0x001) |
1246 | 1258 | PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unused ) ) |
1247 | 1259 | PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) |
1248 | 1260 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
r18104 | r18105 | |
1253 | 1265 | PORT_START("IN1") |
1254 | 1266 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1255 | 1267 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1256 | | PORT_DIPNAME( 0x04, 0x00, "Invinco Lives (2/2)" ) |
1257 | | PORT_DIPSETTING( 0x00, "+0" ) |
1258 | | PORT_DIPSETTING( 0x04, "+2" ) |
| 1268 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_fake_lives_r, (void *)0x002) |
1259 | 1269 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_get_composite_blank_comp, NULL) |
1260 | 1270 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY |
1261 | 1271 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY |
r18104 | r18105 | |
1264 | 1274 | PORT_START("IN2") |
1265 | 1275 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1266 | 1276 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1267 | | PORT_DIPNAME( 0x04, 0x00, "Deep Scan Lives (1/2)" ) |
1268 | | PORT_DIPSETTING( 0x00, "+0" ) |
1269 | | PORT_DIPSETTING( 0x04, "+1" ) |
| 1277 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_fake_lives_r, (void *)0x101) |
1270 | 1278 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_get_timer_value, NULL) |
1271 | 1279 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 ) |
1272 | 1280 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) |
r18104 | r18105 | |
1275 | 1283 | PORT_START("IN3") |
1276 | 1284 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1277 | 1285 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1278 | | /* +1 and +2 gives 2 lives instead of 6 */ |
1279 | | PORT_DIPNAME( 0x04, 0x00, "Deep Scan Lives (2/2)" ) |
1280 | | PORT_DIPSETTING( 0x04, "+0" ) |
1281 | | PORT_DIPSETTING( 0x00, "+2" ) |
| 1286 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_fake_lives_r, (void *)0x102) |
1282 | 1287 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_read_coin_status, NULL) |
1283 | | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Game Select") PORT_TOGGLE |
| 1288 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Game Select") PORT_TOGGLE |
1284 | 1289 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) |
1285 | 1290 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
1286 | 1291 | |
1287 | 1292 | PORT_COIN |
| 1293 | |
| 1294 | PORT_START("FAKE_LIVES1") |
| 1295 | PORT_DIPNAME( 0x03, 0x03, "Invinco Lives" ) PORT_DIPLOCATION("SW1:1,2") |
| 1296 | PORT_DIPSETTING( 0x03, "3" ) |
| 1297 | PORT_DIPSETTING( 0x02, "4" ) |
| 1298 | PORT_DIPSETTING( 0x01, "5" ) |
| 1299 | PORT_DIPSETTING( 0x00, "6" ) |
| 1300 | |
| 1301 | PORT_START("FAKE_LIVES2") |
| 1302 | PORT_DIPNAME( 0x03, 0x01, "Deep Scan Lives" ) PORT_DIPLOCATION("SW1:3,4") |
| 1303 | PORT_DIPSETTING( 0x02, "2" ) |
| 1304 | PORT_DIPSETTING( 0x01, "3" ) |
| 1305 | PORT_DIPSETTING( 0x00, "4" ) |
| 1306 | PORT_DIPSETTING( 0x03, "5" ) |
1288 | 1307 | INPUT_PORTS_END |
1289 | 1308 | |
1290 | 1309 | |
r18104 | r18105 | |
1292 | 1311 | PORT_START("IN0") |
1293 | 1312 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL |
1294 | 1313 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL |
1295 | | PORT_DIPNAME( 0x04, 0x04, "S.A. Lives (1/2)" ) |
1296 | | PORT_DIPSETTING( 0x00, "+0" ) |
1297 | | PORT_DIPSETTING( 0x04, "+1" ) |
1298 | | PORT_DIPNAME( 0x08, 0x00, "H.O. Lives" ) |
| 1314 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_fake_lives_r, (void *)0x001) |
| 1315 | PORT_DIPNAME( 0x08, 0x00, "Head On Lives" ) |
1299 | 1316 | PORT_DIPSETTING( 0x00, "3" ) |
1300 | 1317 | PORT_DIPSETTING( 0x08, "4" ) |
1301 | 1318 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY |
r18104 | r18105 | |
1305 | 1322 | PORT_START("IN1") |
1306 | 1323 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL |
1307 | 1324 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) |
1308 | | PORT_DIPNAME( 0x04, 0x00, "S.A. Lives (2/2)" ) |
1309 | | PORT_DIPSETTING( 0x00, "+0" ) |
1310 | | PORT_DIPSETTING( 0x04, "+2" ) |
| 1325 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_fake_lives_r, (void *)0x002) |
1311 | 1326 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_get_composite_blank_comp, NULL) |
1312 | 1327 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY |
1313 | 1328 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY |
r18104 | r18105 | |
1316 | 1331 | PORT_START("IN2") |
1317 | 1332 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL |
1318 | 1333 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) |
1319 | | PORT_DIPNAME( 0x04, 0x00, "S.A. Bonus Life" ) |
| 1334 | PORT_DIPNAME( 0x04, 0x00, "Space Attack Bonus Life" ) |
1320 | 1335 | PORT_DIPSETTING( 0x00, "10000" ) |
1321 | 1336 | PORT_DIPSETTING( 0x04, "15000" ) |
1322 | 1337 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_get_timer_value, NULL) |
r18104 | r18105 | |
1327 | 1342 | PORT_START("IN3") |
1328 | 1343 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL |
1329 | 1344 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) |
1330 | | PORT_DIPNAME( 0x04, 0x00, "S.A. Bonus Life For Final UFO" ) |
| 1345 | PORT_DIPNAME( 0x04, 0x00, "Space Attack Final UFO Bonus" ) |
1331 | 1346 | PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) |
1332 | 1347 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
1333 | 1348 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_read_coin_status, NULL) |
r18104 | r18105 | |
1336 | 1351 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
1337 | 1352 | |
1338 | 1353 | PORT_COIN |
| 1354 | |
| 1355 | PORT_START("FAKE_LIVES1") |
| 1356 | PORT_DIPNAME( 0x03, 0x03, "Space Attack Lives" ) |
| 1357 | PORT_DIPSETTING( 0x03, "3" ) |
| 1358 | PORT_DIPSETTING( 0x02, "4" ) |
| 1359 | PORT_DIPSETTING( 0x01, "5" ) |
| 1360 | PORT_DIPSETTING( 0x00, "6" ) |
1339 | 1361 | INPUT_PORTS_END |
1340 | 1362 | |
1341 | 1363 | |
r18104 | r18105 | |
1407 | 1429 | PORT_START("IN1") |
1408 | 1430 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1409 | 1431 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1410 | | PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) /* unknown, but used */ |
| 1432 | PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) /* unknown, but used */ |
1411 | 1433 | PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) |
1412 | 1434 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
1413 | 1435 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_get_composite_blank_comp, NULL) |
r18104 | r18105 | |
1624 | 1646 | PORT_COIN |
1625 | 1647 | INPUT_PORTS_END |
1626 | 1648 | |
1627 | | /* brdrline lives DIPs are spread across two input ports */ |
1628 | | CUSTOM_INPUT_MEMBER(vicdual_state::brdrline_lives) |
1629 | | { |
1630 | | int bit_mask = (FPTR)param; |
1631 | | return (ioport("FAKE_LIVES")->read() & bit_mask) ? 0x00 : 0x01; |
1632 | | } |
1633 | 1649 | |
1634 | 1650 | static INPUT_PORTS_START( brdrline ) |
1635 | 1651 | PORT_START("IN0") |
r18104 | r18105 | |
1653 | 1669 | PORT_START("IN1") |
1654 | 1670 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL |
1655 | 1671 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1656 | | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,brdrline_lives, (void *)0x01) |
| 1672 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_fake_lives_r, (void *)0x001) |
1657 | 1673 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_get_vblank_comp, NULL) |
1658 | 1674 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY |
1659 | 1675 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY |
r18104 | r18105 | |
1662 | 1678 | PORT_START("IN2") |
1663 | 1679 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL |
1664 | 1680 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1665 | | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,brdrline_lives, (void *)0x02) |
| 1681 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_fake_lives_r, (void *)0x002) |
1666 | 1682 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_get_64v, NULL) /* yes, this is different */ |
1667 | 1683 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 ) |
1668 | 1684 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) |
r18104 | r18105 | |
1681 | 1697 | |
1682 | 1698 | PORT_COIN |
1683 | 1699 | |
1684 | | PORT_START("FAKE_LIVES") |
| 1700 | PORT_START("FAKE_LIVES1") |
1685 | 1701 | PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) |
| 1702 | PORT_DIPSETTING( 0x00, "3" ) |
| 1703 | PORT_DIPSETTING( 0x01, "4" ) |
1686 | 1704 | PORT_DIPSETTING( 0x02, "5" ) |
1687 | | PORT_DIPSETTING( 0x01, "4" ) |
1688 | | PORT_DIPSETTING( 0x00, "3" ) |
| 1705 | // PORT_DIPSETTING( 0x03, "5" ) // dupe |
1689 | 1706 | INPUT_PORTS_END |
1690 | 1707 | |
| 1708 | |
1691 | 1709 | static INPUT_PORTS_START( starrkr ) |
1692 | 1710 | PORT_START("IN0") |
1693 | 1711 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL |
r18104 | r18105 | |
1710 | 1728 | PORT_START("IN1") |
1711 | 1729 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL |
1712 | 1730 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1713 | | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,brdrline_lives, (void *)0x01) |
| 1731 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_fake_lives_r, (void *)0x001) |
1714 | 1732 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_get_vblank_comp, NULL) |
1715 | 1733 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY |
1716 | 1734 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY |
r18104 | r18105 | |
1719 | 1737 | PORT_START("IN2") |
1720 | 1738 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL |
1721 | 1739 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1722 | | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,brdrline_lives, (void *)0x02) |
| 1740 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_fake_lives_r, (void *)0x002) |
1723 | 1741 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_get_64v, NULL) /* yes, this is different */ |
1724 | 1742 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 ) |
1725 | 1743 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) |
r18104 | r18105 | |
1738 | 1756 | |
1739 | 1757 | PORT_COIN |
1740 | 1758 | |
1741 | | PORT_START("FAKE_LIVES") |
| 1759 | PORT_START("FAKE_LIVES1") |
1742 | 1760 | PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) |
| 1761 | PORT_DIPSETTING( 0x00, "3" ) |
| 1762 | PORT_DIPSETTING( 0x01, "4" ) |
1743 | 1763 | PORT_DIPSETTING( 0x02, "5" ) |
1744 | | PORT_DIPSETTING( 0x01, "4" ) |
1745 | | PORT_DIPSETTING( 0x00, "3" ) |
| 1764 | // PORT_DIPSETTING( 0x03, "5" ) // dupe |
1746 | 1765 | INPUT_PORTS_END |
1747 | 1766 | |
| 1767 | |
1748 | 1768 | static INPUT_PORTS_START( pulsar ) |
1749 | 1769 | PORT_START("IN0") |
1750 | 1770 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1751 | 1771 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1752 | | PORT_DIPNAME( 0x04, 0x04, "Lives (1/2)" ) |
1753 | | PORT_DIPSETTING( 0x04, "+0" ) |
1754 | | PORT_DIPSETTING( 0x00, "+2" ) |
| 1772 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_fake_lives_r, (void *)0x001) |
1755 | 1773 | PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unused ) ) |
1756 | 1774 | PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) |
1757 | 1775 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
r18104 | r18105 | |
1762 | 1780 | PORT_START("IN1") |
1763 | 1781 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1764 | 1782 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1765 | | PORT_DIPNAME( 0x04, 0x04, "Lives (2/2)" ) |
1766 | | PORT_DIPSETTING( 0x04, "+0" ) |
1767 | | PORT_DIPSETTING( 0x00, "+1" ) |
| 1783 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_fake_lives_r, (void *)0x002) |
1768 | 1784 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_get_composite_blank_comp, NULL) |
1769 | 1785 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY |
1770 | 1786 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY |
r18104 | r18105 | |
1793 | 1809 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
1794 | 1810 | |
1795 | 1811 | PORT_COIN |
| 1812 | |
| 1813 | PORT_START("FAKE_LIVES1") |
| 1814 | PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) |
| 1815 | PORT_DIPSETTING( 0x00, "2" ) |
| 1816 | PORT_DIPSETTING( 0x02, "3" ) |
| 1817 | PORT_DIPSETTING( 0x01, "4" ) |
| 1818 | PORT_DIPSETTING( 0x03, "5" ) |
1796 | 1819 | INPUT_PORTS_END |
1797 | 1820 | |
1798 | 1821 | |
r18104 | r18105 | |
1851 | 1874 | PORT_START("IN0") |
1852 | 1875 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL |
1853 | 1876 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL |
1854 | | PORT_DIPNAME( 0x04, 0x00, "Alpha Fighter Lives (1/2)" ) |
1855 | | PORT_DIPSETTING( 0x00, "+0" ) |
1856 | | PORT_DIPSETTING( 0x04, "+1" ) |
| 1877 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_fake_lives_r, (void *)0x001) |
1857 | 1878 | PORT_DIPNAME( 0x08, 0x00, "Head On Lives" ) |
1858 | 1879 | PORT_DIPSETTING( 0x00, "3" ) |
1859 | 1880 | PORT_DIPSETTING( 0x08, "4" ) |
r18104 | r18105 | |
1864 | 1885 | PORT_START("IN1") |
1865 | 1886 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL |
1866 | 1887 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1867 | | PORT_DIPNAME( 0x04, 0x00, "Alpha Fighter Lives (2/2)" ) |
1868 | | PORT_DIPSETTING( 0x00, "+0" ) |
1869 | | PORT_DIPSETTING( 0x04, "+2" ) |
| 1888 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_fake_lives_r, (void *)0x002) |
1870 | 1889 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, vicdual_state,vicdual_get_composite_blank_comp, NULL) |
1871 | 1890 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY |
1872 | 1891 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY |
r18104 | r18105 | |
1893 | 1912 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
1894 | 1913 | |
1895 | 1914 | PORT_COIN |
| 1915 | |
| 1916 | PORT_START("FAKE_LIVES1") |
| 1917 | PORT_DIPNAME( 0x03, 0x03, "Alpha Fighter Lives" ) |
| 1918 | PORT_DIPSETTING( 0x03, "3" ) |
| 1919 | PORT_DIPSETTING( 0x02, "4" ) |
| 1920 | PORT_DIPSETTING( 0x01, "5" ) |
| 1921 | PORT_DIPSETTING( 0x00, "6" ) |
1896 | 1922 | INPUT_PORTS_END |
1897 | 1923 | |
1898 | 1924 | |
r18104 | r18105 | |
1905 | 1931 | /* video hardware */ |
1906 | 1932 | MCFG_SCREEN_MODIFY("screen") |
1907 | 1933 | MCFG_SCREEN_UPDATE_DRIVER(vicdual_state, screen_update_vicdual_color) |
1908 | | |
1909 | 1934 | MACHINE_CONFIG_END |
1910 | 1935 | |
1911 | 1936 | |
r18104 | r18105 | |
1919 | 1944 | MCFG_SPEAKER_STANDARD_MONO("mono") |
1920 | 1945 | MCFG_FRAGMENT_ADD(invinco_audio) |
1921 | 1946 | MCFG_FRAGMENT_ADD(headon_audio) |
1922 | | |
1923 | 1947 | MACHINE_CONFIG_END |
1924 | 1948 | |
1925 | 1949 | |
r18104 | r18105 | |
1932 | 1956 | /* audio hardware */ |
1933 | 1957 | MCFG_SPEAKER_STANDARD_MONO("mono") |
1934 | 1958 | MCFG_FRAGMENT_ADD(invinco_audio) |
1935 | | |
1936 | 1959 | MACHINE_CONFIG_END |
1937 | 1960 | |
1938 | 1961 | |
r18104 | r18105 | |
1953 | 1976 | /* basic machine hardware */ |
1954 | 1977 | MCFG_CPU_MODIFY("maincpu") |
1955 | 1978 | MCFG_CPU_IO_MAP(spacetrk_io_map) |
1956 | | |
1957 | 1979 | MACHINE_CONFIG_END |
1958 | 1980 | |
1959 | 1981 | |
r18104 | r18105 | |
1966 | 1988 | /* audio hardware */ |
1967 | 1989 | MCFG_SPEAKER_STANDARD_MONO("mono") |
1968 | 1990 | MCFG_FRAGMENT_ADD(carnival_audio) |
1969 | | |
1970 | 1991 | MACHINE_CONFIG_END |
1971 | 1992 | |
1972 | 1993 | static MACHINE_CONFIG_DERIVED( carnivalh, vicdual_dualgame_root ) |
r18104 | r18105 | |
1978 | 1999 | /* audio hardware */ |
1979 | 2000 | MCFG_SPEAKER_STANDARD_MONO("mono") |
1980 | 2001 | MCFG_FRAGMENT_ADD(carnival_audio) |
1981 | | |
1982 | 2002 | MACHINE_CONFIG_END |
1983 | 2003 | |
1984 | 2004 | |
r18104 | r18105 | |
1988 | 2008 | /* basic machine hardware */ |
1989 | 2009 | MCFG_CPU_MODIFY("maincpu") |
1990 | 2010 | MCFG_CPU_IO_MAP(tranqgun_io_map) |
1991 | | |
1992 | 2011 | MACHINE_CONFIG_END |
1993 | 2012 | |
1994 | 2013 | |
r18104 | r18105 | |
1997 | 2016 | /* basic machine hardware */ |
1998 | 2017 | MCFG_CPU_MODIFY("maincpu") |
1999 | 2018 | MCFG_CPU_IO_MAP(brdrline_io_map) |
2000 | | |
2001 | 2019 | MACHINE_CONFIG_END |
2002 | 2020 | |
2003 | 2021 | |
r18104 | r18105 | |
2010 | 2028 | /* audio hardware */ |
2011 | 2029 | MCFG_SPEAKER_STANDARD_MONO("mono") |
2012 | 2030 | MCFG_FRAGMENT_ADD(pulsar_audio) |
2013 | | |
2014 | 2031 | MACHINE_CONFIG_END |
2015 | 2032 | |
2016 | 2033 | |
r18104 | r18105 | |
2019 | 2036 | /* basic machine hardware */ |
2020 | 2037 | MCFG_CPU_MODIFY("maincpu") |
2021 | 2038 | MCFG_CPU_IO_MAP(heiankyo_io_map) |
2022 | | |
2023 | 2039 | MACHINE_CONFIG_END |
2024 | 2040 | |
2025 | 2041 | |
r18104 | r18105 | |
2028 | 2044 | /* basic machine hardware */ |
2029 | 2045 | MCFG_CPU_MODIFY("maincpu") |
2030 | 2046 | MCFG_CPU_IO_MAP(alphaho_io_map) |
2031 | | |
2032 | 2047 | MACHINE_CONFIG_END |
2033 | 2048 | |
2034 | 2049 | |
r18104 | r18105 | |
2152 | 2167 | /* video hardware */ |
2153 | 2168 | MCFG_SCREEN_MODIFY("screen") |
2154 | 2169 | MCFG_SCREEN_UPDATE_DRIVER(vicdual_state, screen_update_vicdual_color) |
2155 | | |
2156 | 2170 | MACHINE_CONFIG_END |
2157 | 2171 | |
2158 | 2172 | |
r18104 | r18105 | |
2247 | 2261 | /* video hardware */ |
2248 | 2262 | MCFG_SCREEN_MODIFY("screen") |
2249 | 2263 | MCFG_SCREEN_UPDATE_DRIVER(vicdual_state, screen_update_vicdual_color) |
2250 | | |
2251 | 2264 | MACHINE_CONFIG_END |
2252 | 2265 | |
2253 | 2266 | |
r18104 | r18105 | |
2350 | 2363 | /* audio hardware */ |
2351 | 2364 | MCFG_SPEAKER_STANDARD_MONO("mono") |
2352 | 2365 | MCFG_FRAGMENT_ADD(invinco_audio) |
2353 | | |
2354 | 2366 | MACHINE_CONFIG_END |
2355 | 2367 | |
2356 | 2368 | |