trunk/src/mame/drivers/galaxian.c
| r22692 | r22693 | |
| 69 | 69 | 'BONUS SHIP' text is printed on a different line. |
| 70 | 70 | |
| 71 | 71 | |
| 72 | | TODO: |
| 73 | | ---- |
| 74 | 72 | |
| 75 | | - Problems with Galaxian based on the observation of a real machine: |
| 76 | | |
| 77 | | - Background humming is incorrect. It's faster on a real machine |
| 78 | | - Explosion sound is much softer. Filter involved? |
| 79 | | |
| 80 | | - $4800-4bff in Streaking/Ghost Muncher |
| 81 | | |
| 82 | | |
| 83 | | |
| 84 | 73 | Moon Cresta versions supported: |
| 85 | 74 | ------------------------------ |
| 86 | 75 | |
| r22692 | r22693 | |
| 395 | 384 | |
| 396 | 385 | |
| 397 | 386 | |
| 398 | | TO DO : |
| 399 | | ------- |
| 387 | TODO: |
| 388 | ---- |
| 389 | - Problems with Galaxian based on the observation of a real machine: |
| 390 | - Background humming is incorrect. It's faster on a real machine |
| 391 | - Explosion sound is much softer. Filter involved? |
| 392 | - streakng/ghostmun: $4800-4bff |
| 393 | - smooncrs : fix read/writes at/to unmapped memory (when player 2, "cocktail" mode) + fix the ?#! bug with "bullets" (when player 2, "cocktail" mode) |
| 394 | - timefgtr : missing player bullets, sprite ROM extend(see later levels), sound is too slow, some sprites missing |
| 395 | - zigzag : full Dip Switches and Inputs |
| 396 | - zigzag2 : full Dip Switches and Inputs |
| 397 | - jumpbug : full Dip Switches and Inputs |
| 398 | - jumpbugb : full Dip Switches and Inputs |
| 399 | - levers : full Dip Switches and Inputs |
| 400 | - kingball : full Dip Switches and Inputs |
| 401 | - kingbalj : full Dip Switches and Inputs |
| 402 | - frogg : fix read/writes at/to unmapped/wrong memory |
| 403 | - scprpng : fix read/writes at/to unmapped/wrong memory |
| 404 | - scorpion : check whether konami filters are used |
| 405 | - explorer : check whether konami filters are used |
| 400 | 406 | |
| 401 | | - smooncrs : fix read/writes at/to unmapped memory (when player 2, "cocktail" mode) |
| 402 | | fix the ?#! bug with "bullets" (when player 2, "cocktail" mode) |
| 403 | | - zigzag : full Dip Switches and Inputs |
| 404 | | - zigzag2 : full Dip Switches and Inputs |
| 405 | | - jumpbug : full Dip Switches and Inputs |
| 406 | | - jumpbugb : full Dip Switches and Inputs |
| 407 | | - levers : full Dip Switches and Inputs |
| 408 | | - kingball : full Dip Switches and Inputs |
| 409 | | - kingbalj : full Dip Switches and Inputs |
| 410 | | - frogg : fix read/writes at/to unmapped/wrong memory |
| 411 | | - scprpng : fix read/writes at/to unmapped/wrong memory |
| 412 | | - scorpion : check whether konami filters are used |
| 413 | | - explorer : check whether konami filters are used |
| 414 | | |
| 415 | 407 | ***************************************************************************/ |
| 416 | 408 | |
| 417 | 409 | #include "emu.h" |
| r22692 | r22693 | |
| 1474 | 1466 | AM_RANGE(0xb000, 0xb000) AM_MIRROR(0x07ff) AM_READ_PORT("IN2") |
| 1475 | 1467 | AM_RANGE(0xb000, 0xb000) AM_MIRROR(0x07f8) AM_WRITE(irq_enable_w) |
| 1476 | 1468 | AM_RANGE(0xb800, 0xb800) AM_MIRROR(0x07ff) AM_READ(watchdog_reset_r) |
| 1477 | | AM_RANGE(0xfffe, 0xfffe) AM_NOP //? |
| 1469 | AM_RANGE(0xfffe, 0xfffe) AM_NOP // ? |
| 1478 | 1470 | ADDRESS_MAP_END |
| 1479 | 1471 | |
| 1472 | static ADDRESS_MAP_START( timefgtr_map, AS_PROGRAM, 8, galaxian_state ) |
| 1473 | ADDRESS_MAP_UNMAP_HIGH |
| 1474 | AM_RANGE(0x0000, 0x7fff) AM_ROM |
| 1475 | AM_RANGE(0x8000, 0x87ff) AM_RAM |
| 1476 | AM_RANGE(0x8803, 0x8803) AM_DEVWRITE_LEGACY("8910.0", ay8910_address_w) |
| 1477 | AM_RANGE(0x880b, 0x880b) AM_DEVWRITE_LEGACY("8910.0", ay8910_data_w) |
| 1478 | AM_RANGE(0x880c, 0x880c) AM_DEVWRITE_LEGACY("8910.1", ay8910_address_w) |
| 1479 | AM_RANGE(0x880e, 0x880e) AM_DEVWRITE_LEGACY("8910.1", ay8910_data_w) |
| 1480 | AM_RANGE(0x9000, 0x93ff) AM_MIRROR(0x0400) AM_RAM_WRITE(galaxian_videoram_w) AM_SHARE("videoram") |
| 1481 | AM_RANGE(0x9800, 0x9bff) AM_MIRROR(0x0400) AM_RAM_WRITE(galaxian_objram_w) AM_SHARE("spriteram") |
| 1482 | AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x07ff) AM_READ_PORT("IN0") |
| 1483 | AM_RANGE(0xa800, 0xa800) AM_MIRROR(0x07ff) AM_READ_PORT("IN1") |
| 1484 | AM_RANGE(0xb000, 0xb000) AM_MIRROR(0x07ff) AM_READ_PORT("IN2") |
| 1485 | AM_RANGE(0xb000, 0xb000) AM_MIRROR(0x07f8) AM_WRITE(irq_enable_w) |
| 1486 | AM_RANGE(0xb004, 0xb004) AM_MIRROR(0x07f8) AM_WRITE(galaxian_stars_enable_w) |
| 1487 | AM_RANGE(0xb800, 0xb800) AM_MIRROR(0x07ff) AM_READ(watchdog_reset_r) |
| 1488 | // AM_RANGE(0xb800, 0xb800) AM_WRITENOP // ? |
| 1489 | // AM_RANGE(0xfff8, 0xffff) AM_WRITENOP // sound related? |
| 1490 | ADDRESS_MAP_END |
| 1480 | 1491 | |
| 1492 | |
| 1481 | 1493 | /* map derived from schematics */ |
| 1482 | 1494 | #if 0 |
| 1483 | 1495 | static ADDRESS_MAP_START( dambustr_map, AS_PROGRAM, 8, galaxian_state ) |
| r22692 | r22693 | |
| 2234 | 2246 | MACHINE_CONFIG_END |
| 2235 | 2247 | |
| 2236 | 2248 | |
| 2249 | TIMER_DEVICE_CALLBACK_MEMBER(galaxian_state::timefgtr_scanline) |
| 2250 | { |
| 2251 | UINT8 split = param + 16; |
| 2252 | |
| 2253 | // change spriteram base per each 64-line part of the screen |
| 2254 | if ((split & 0x3f) == 0) |
| 2255 | { |
| 2256 | machine().primary_screen->update_now(); |
| 2257 | m_sprites_base = 0x40 | (split << 2 & 0x300); |
| 2258 | } |
| 2259 | } |
| 2260 | |
| 2261 | static MACHINE_CONFIG_DERIVED( timefgtr, galaxian_base ) |
| 2262 | |
| 2263 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", galaxian_state, timefgtr_scanline, "screen", 0, 1) |
| 2264 | |
| 2265 | /* alternate memory map */ |
| 2266 | MCFG_CPU_MODIFY("maincpu") |
| 2267 | MCFG_CPU_PROGRAM_MAP(timefgtr_map) |
| 2268 | |
| 2269 | /* sound hardware */ |
| 2270 | MCFG_SOUND_ADD("8910.0", AY8910, GALAXIAN_PIXEL_CLOCK/3/2) // 3.072MHz |
| 2271 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 2272 | |
| 2273 | MCFG_SOUND_ADD("8910.1", AY8910, GALAXIAN_PIXEL_CLOCK/3/2) // 3.072MHz |
| 2274 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 2275 | MACHINE_CONFIG_END |
| 2276 | |
| 2277 | |
| 2237 | 2278 | static MACHINE_CONFIG_DERIVED( jumpbug, galaxian_base ) |
| 2238 | 2279 | |
| 2239 | 2280 | MCFG_WATCHDOG_VBLANK_INIT(0) |
| r22692 | r22693 | |
| 2720 | 2761 | m_irq_line = INPUT_LINE_NMI; |
| 2721 | 2762 | m_numspritegens = 1; |
| 2722 | 2763 | m_bullets_base = 0x60; |
| 2764 | m_sprites_base = 0x40; |
| 2723 | 2765 | m_frogger_adjust = FALSE; |
| 2724 | 2766 | m_sfx_tilemap = FALSE; |
| 2725 | 2767 | m_draw_bullet_ptr = (draw_bullet != NULL) ? draw_bullet : &galaxian_state::galaxian_draw_bullet; |
| r22692 | r22693 | |
| 3239 | 3281 | } |
| 3240 | 3282 | |
| 3241 | 3283 | |
| 3284 | DRIVER_INIT_MEMBER(galaxian_state,timefgtr) |
| 3285 | { |
| 3286 | /* two sprite generators */ |
| 3287 | m_numspritegens = 2; |
| 3288 | |
| 3289 | /* bullets moved from $60 to $c0 */ |
| 3290 | m_bullets_base = 0xc0; |
| 3291 | |
| 3292 | /* video extensions */ |
| 3293 | common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, NULL, &galaxian_state::upper_extend_sprite_info); |
| 3294 | } |
| 3295 | |
| 3296 | |
| 3242 | 3297 | DRIVER_INIT_MEMBER(galaxian_state,kingball) |
| 3243 | 3298 | { |
| 3244 | 3299 | address_space &space = m_maincpu->space(AS_PROGRAM); |
trunk/src/mame/drivers/galdrvr.c
| r22692 | r22693 | |
| 1224 | 1224 | INPUT_PORTS_END |
| 1225 | 1225 | |
| 1226 | 1226 | |
| 1227 | static INPUT_PORTS_START( timefgtr ) |
| 1228 | PORT_START("IN0") |
| 1229 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 1230 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN1 ) |
| 1231 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) |
| 1232 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) |
| 1233 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) |
| 1234 | PORT_DIPNAME( 0x20, 0x00, "255 Lives (Cheat)" ) |
| 1235 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1236 | PORT_DIPSETTING( 0x20, DEF_STR( On ) ) |
| 1237 | PORT_DIPNAME( 0x40, 0x40, "Extended Bonus Life" ) |
| 1238 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1239 | PORT_DIPSETTING( 0x40, DEF_STR( On ) ) |
| 1240 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) |
| 1241 | |
| 1242 | PORT_START("IN1") |
| 1243 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 ) |
| 1244 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 ) |
| 1245 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // tilt? freeze? |
| 1246 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 1247 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 1248 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) |
| 1249 | PORT_DIPNAME( 0x40, 0x00, DEF_STR( Coinage ) ) |
| 1250 | PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) |
| 1251 | PORT_DIPSETTING( 0x40, DEF_STR( 2C_1C ) ) |
| 1252 | PORT_DIPNAME( 0x80, 0x00, DEF_STR( Lives ) ) |
| 1253 | PORT_DIPSETTING( 0x00, "3" ) |
| 1254 | PORT_DIPSETTING( 0x80, "5" ) |
| 1255 | |
| 1256 | PORT_START("IN2") |
| 1257 | PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) // if 01 and 02 are both set, bonus life is 00 |
| 1258 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
| 1259 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1260 | PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) // " |
| 1261 | PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) |
| 1262 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1263 | PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) ) |
| 1264 | PORT_DIPSETTING( 0x00, "10000 50000" ) |
| 1265 | PORT_DIPSETTING( 0x04, "20000 50000" ) |
| 1266 | PORT_DIPSETTING( 0x08, "10000 60000" ) |
| 1267 | PORT_DIPSETTING( 0x0c, "20000 60000" ) |
| 1268 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 1269 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 1270 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 1271 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 1272 | INPUT_PORTS_END |
| 1273 | |
| 1274 | |
| 1227 | 1275 | static INPUT_PORTS_START( kong ) |
| 1228 | 1276 | PORT_START("IN0") |
| 1229 | 1277 | PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) |
| r22692 | r22693 | |
| 1257 | 1305 | PORT_DIPNAME( 0x40, 0x00, DEF_STR( Lives ) ) |
| 1258 | 1306 | PORT_DIPSETTING( 0x00, "3" ) |
| 1259 | 1307 | PORT_DIPSETTING( 0x40, "5" ) |
| 1260 | | PORT_DIPNAME( 0x80, 0x00, DEF_STR( Coin_A ) ) |
| 1308 | PORT_DIPNAME( 0x80, 0x00, DEF_STR( Coinage ) ) |
| 1261 | 1309 | PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) |
| 1262 | 1310 | PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) ) |
| 1263 | 1311 | |
| r22692 | r22693 | |
| 4635 | 4683 | ROM_LOAD( "prom-74g138", 0x0000, 0x0020, CRC(800f5718) SHA1(5387b24934c8130726180159e207943211215ae2) ) |
| 4636 | 4684 | ROM_END |
| 4637 | 4685 | |
| 4686 | ROM_START( timefgtr ) |
| 4687 | ROM_REGION( 0x8000, "maincpu", 0 ) |
| 4688 | ROM_LOAD( "tp01", 0x0000, 0x1000, CRC(ba8b3e70) SHA1(cb930022e462319721013f343e513f4a4957b89e) ) |
| 4689 | ROM_LOAD( "tp02", 0x1000, 0x1000, CRC(796158c0) SHA1(bc02131a9af1773839ae0aba0225b3160ae632c4) ) |
| 4690 | ROM_LOAD( "tp03", 0x2000, 0x1000, CRC(fe6a1c98) SHA1(f4a4e61cc96d93cd21e79b0aa3ddc158a7a034a0) ) |
| 4691 | ROM_LOAD( "tp04", 0x3000, 0x1000, CRC(eff73185) SHA1(8538f1b63b051d6d3892ebedc76f45c3cf02cbab) ) |
| 4692 | ROM_LOAD( "tp05", 0x4000, 0x1000, CRC(85023e4a) SHA1(afc76ba15d6278c45bf50e9bafcb72a0beb69d4d) ) |
| 4693 | ROM_LOAD( "tp06", 0x5000, 0x1000, CRC(b6b8aaf9) SHA1(e25e59ee653b13437c412f1aeb8d7c670e34b39f) ) |
| 4694 | |
| 4695 | ROM_REGION( 0x4000, "gfx1", 0 ) |
| 4696 | ROM_LOAD( "tp07", 0x0000, 0x1000, CRC(5f57342c) SHA1(000985613d620cbcafbd24351bd4b02f037430a9) ) |
| 4697 | ROM_LOAD( "tp09", 0x1000, 0x1000, CRC(636fd772) SHA1(6567992488f0125c082a164f1043c9384736c665) ) |
| 4698 | ROM_LOAD( "tp08", 0x2000, 0x1000, CRC(2dc3c48b) SHA1(f4ddf5fce909a1de3efbcaf2ff2e4a8d1ea06516) ) |
| 4699 | ROM_LOAD( "tp10", 0x3000, 0x1000, CRC(b27b450c) SHA1(16131583133fe33b61d4f51a860f41d43011bc50) ) |
| 4700 | |
| 4701 | ROM_REGION( 0x0020, "proms", 0 ) |
| 4702 | ROM_LOAD( "prom", 0x0000, 0x0020, NO_DUMP ) |
| 4703 | ROM_END |
| 4704 | |
| 4638 | 4705 | ROM_START( kong ) |
| 4639 | 4706 | ROM_REGION( 0x8000, "maincpu", 0 ) |
| 4640 | 4707 | ROM_LOAD( "1", 0x0000, 0x1000, CRC(a206beb5) SHA1(5fea9584b4e3ae076178f6965f0743b9b90b15fc) ) |
| r22692 | r22693 | |
| 6651 | 6718 | |
| 6652 | 6719 | /* other games on basic mooncrst hardware */ |
| 6653 | 6720 | GAME( 1982, skybase, 0, mooncrst, skybase, galaxian_state, skybase, ROT90, "Omori Electric Co., Ltd.", "Sky Base", GAME_SUPPORTS_SAVE ) |
| 6654 | | GAME( 198?, kong, 0, mooncrst, kong, galaxian_state, kong, ROT90, "Taito do Brasil", "Kong (Brazil)", GAME_SUPPORTS_SAVE | GAME_WRONG_COLORS ) // rewrite of Donkey Kong (!) not a clone |
| 6721 | GAME( 198?, kong, 0, mooncrst, kong, galaxian_state, kong, ROT90, "Taito do Brasil", "Kong (Donkey Kong conversion on Galaxian hardware)", GAME_SUPPORTS_SAVE | GAME_WRONG_COLORS ) // rewrite of Donkey Kong (!) not a clone |
| 6655 | 6722 | |
| 6656 | 6723 | /* larger romspace, 2*AY8910, based on Super Star Crest board? */ |
| 6657 | | GAME( 198?, fantastc, 0, fantastc, fantastc, galaxian_state, fantastc, ROT90, "Taito do Brasil", "Fantastic", GAME_SUPPORTS_SAVE ) // rewrite of Galaga (!) not a clone |
| 6724 | GAME( 198?, fantastc, 0, fantastc, fantastc, galaxian_state, fantastc, ROT90, "Taito do Brasil", "Fantastic (Galaga conversion on Galaxian hardware)", GAME_SUPPORTS_SAVE ) // rewrite of Galaga (!) not a clone |
| 6658 | 6725 | |
| 6726 | /* like fantastc, plus larger spriteram, and maybe different bullet hw(?) */ |
| 6727 | GAME( 198?, timefgtr, 0, timefgtr, timefgtr, galaxian_state, timefgtr, ROT90, "Taito do Brasil", "Time Fighter (Time Pilot conversion on Galaxian hardware)", GAME_SUPPORTS_SAVE | GAME_SUPPORTS_SAVE | GAME_WRONG_COLORS ) // rewrite of Time Pilot (!) not a clone |
| 6728 | |
| 6659 | 6729 | /* extra ROMs, protection, and sound hardware replaced with AY8910 */ |
| 6660 | 6730 | GAME( 1981, jumpbug, 0, jumpbug, jumpbug, galaxian_state, jumpbug, ROT90, "Hoei (Rock-Ola license)", "Jump Bug", GAME_SUPPORTS_SAVE ) // or by Alpha Denshi Co. under contract from Hoei? |
| 6661 | 6731 | GAME( 1981, jumpbugb, jumpbug, jumpbug, jumpbug, galaxian_state, jumpbug, ROT90, "bootleg", "Jump Bug (bootleg)", GAME_SUPPORTS_SAVE ) // bootleg of Sega license |