trunk/src/mame/drivers/powerins.c
| r245165 | r245166 | |
| 18 | 18 | Note: |
| 19 | 19 | - To enter test mode press F2 (Test) |
| 20 | 20 | Use 9 (Service Coin) to change page. |
| 21 | | - In powerina there is a hidden test mode screen because it's a bootleg |
| 21 | - In powerinsa there is a hidden test mode screen because it's a bootleg |
| 22 | 22 | without a sound CPU. Set 18ff08 to 4 during test mode that calls the |
| 23 | 23 | data written to $10001e "sound code". |
| 24 | 24 | |
| r245165 | r245166 | |
| 43 | 43 | ***************************************************************************/ |
| 44 | 44 | |
| 45 | 45 | |
| 46 | | WRITE16_MEMBER(powerins_state::okibank_w) |
| 46 | WRITE8_MEMBER(powerins_state::powerinsa_okibank_w) |
| 47 | 47 | { |
| 48 | | if (ACCESSING_BITS_0_7) |
| 49 | | { |
| 50 | | UINT8 *RAM = memregion("oki1")->base(); |
| 51 | | int new_bank = data & 0x7; |
| 52 | | |
| 53 | | if (new_bank != m_oki_bank) |
| 54 | | { |
| 55 | | m_oki_bank = new_bank; |
| 56 | | memcpy(&RAM[0x30000],&RAM[0x40000 + 0x10000*new_bank],0x10000); |
| 57 | | } |
| 58 | | } |
| 48 | membank("okibank")->set_entry(data & 7); |
| 59 | 49 | } |
| 60 | 50 | |
| 61 | | WRITE16_MEMBER(powerins_state::soundlatch_w) |
| 51 | READ8_MEMBER(powerins_state::powerinsb_fake_ym2203_r) |
| 62 | 52 | { |
| 63 | | if (ACCESSING_BITS_0_7) |
| 64 | | soundlatch_byte_w(space, 0, data & 0xff); |
| 65 | | } |
| 66 | | |
| 67 | | READ8_MEMBER(powerins_state::powerinb_fake_ym2203_r) |
| 68 | | { |
| 69 | 53 | return 0x01; |
| 70 | 54 | } |
| 71 | 55 | |
| 72 | 56 | |
| 73 | 57 | static ADDRESS_MAP_START( powerins_map, AS_PROGRAM, 16, powerins_state ) |
| 74 | | AM_RANGE(0x000000, 0x0fffff) AM_ROM // ROM |
| 58 | AM_RANGE(0x000000, 0x0fffff) AM_ROM |
| 75 | 59 | AM_RANGE(0x100000, 0x100001) AM_READ_PORT("SYSTEM") |
| 76 | 60 | AM_RANGE(0x100002, 0x100003) AM_READ_PORT("P1_P2") |
| 77 | 61 | AM_RANGE(0x100008, 0x100009) AM_READ_PORT("DSW1") |
| 78 | 62 | AM_RANGE(0x10000a, 0x10000b) AM_READ_PORT("DSW2") |
| 79 | | AM_RANGE(0x100014, 0x100015) AM_WRITE(flipscreen_w) // Flip Screen |
| 80 | | AM_RANGE(0x100016, 0x100017) AM_WRITENOP // ? always 1 |
| 81 | | AM_RANGE(0x100018, 0x100019) AM_WRITE(tilebank_w) // Tiles Banking (VRAM 0) |
| 82 | | AM_RANGE(0x10001e, 0x10001f) AM_WRITE(soundlatch_w) // Sound Latch |
| 83 | | AM_RANGE(0x100030, 0x100031) AM_WRITE(okibank_w) // Sound |
| 84 | | AM_RANGE(0x120000, 0x120fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") // Palette |
| 85 | | AM_RANGE(0x130000, 0x130007) AM_RAM AM_SHARE("vctrl_0") // VRAM 0 Control |
| 86 | | AM_RANGE(0x140000, 0x143fff) AM_RAM_WRITE(vram_0_w) AM_SHARE("vram_0") // VRAM 0 |
| 87 | | AM_RANGE(0x170000, 0x170fff) AM_RAM_WRITE(vram_1_w) AM_SHARE("vram_1") // VRAM 1 |
| 88 | | AM_RANGE(0x171000, 0x171fff) AM_WRITE(vram_1_w) // Mirror of VRAM 1? |
| 89 | | AM_RANGE(0x180000, 0x18ffff) AM_RAM AM_SHARE("spriteram") // RAM + Sprites |
| 63 | AM_RANGE(0x100014, 0x100015) AM_WRITE8(flipscreen_w, 0x00ff) |
| 64 | AM_RANGE(0x100016, 0x100017) AM_WRITENOP // ? always 1 |
| 65 | AM_RANGE(0x100018, 0x100019) AM_WRITE8(tilebank_w, 0x00ff) |
| 66 | AM_RANGE(0x10001e, 0x10001f) AM_WRITE8(soundlatch_byte_w, 0x00ff) |
| 67 | AM_RANGE(0x120000, 0x120fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") |
| 68 | AM_RANGE(0x130000, 0x130007) AM_RAM AM_SHARE("vctrl_0") |
| 69 | AM_RANGE(0x140000, 0x143fff) AM_RAM_WRITE(vram_0_w) AM_SHARE("vram_0") |
| 70 | AM_RANGE(0x170000, 0x170fff) AM_RAM_WRITE(vram_1_w) AM_SHARE("vram_1") |
| 71 | AM_RANGE(0x171000, 0x171fff) AM_WRITE(vram_1_w) |
| 72 | AM_RANGE(0x180000, 0x18ffff) AM_RAM AM_SHARE("spriteram") |
| 90 | 73 | ADDRESS_MAP_END |
| 91 | 74 | |
| 92 | | /* powerina: same as the original one but without the sound cpu (and inferior sound HW) */ |
| 93 | | static ADDRESS_MAP_START( powerina_map, AS_PROGRAM, 16, powerins_state ) |
| 94 | | AM_RANGE(0x000000, 0x0fffff) AM_ROM // ROM |
| 95 | | AM_RANGE(0x100000, 0x100001) AM_READ_PORT("SYSTEM") |
| 96 | | AM_RANGE(0x100002, 0x100003) AM_READ_PORT("P1_P2") |
| 97 | | AM_RANGE(0x100008, 0x100009) AM_READ_PORT("DSW1") |
| 98 | | AM_RANGE(0x10000a, 0x10000b) AM_READ_PORT("DSW2") |
| 99 | | AM_RANGE(0x100014, 0x100015) AM_WRITE(flipscreen_w) // Flip Screen |
| 100 | | AM_RANGE(0x100016, 0x100017) AM_WRITENOP // ? always 1 |
| 101 | | AM_RANGE(0x100018, 0x100019) AM_WRITE(tilebank_w) // Tiles Banking (VRAM 0) |
| 102 | | AM_RANGE(0x10001e, 0x10001f) AM_WRITENOP // Sound Latch, NOPed since there is no sound cpu |
| 103 | | AM_RANGE(0x100030, 0x100031) AM_WRITE(okibank_w) // Sound |
| 104 | | AM_RANGE(0x10003e, 0x10003f) AM_DEVREADWRITE8("oki1", okim6295_device, read, write, 0x00ff) // (used by powerina) |
| 105 | | AM_RANGE(0x120000, 0x120fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") // Palette |
| 106 | | AM_RANGE(0x130000, 0x130007) AM_RAM AM_SHARE("vctrl_0") // VRAM 0 Control |
| 107 | | AM_RANGE(0x140000, 0x143fff) AM_RAM_WRITE(vram_0_w) AM_SHARE("vram_0") // VRAM 0 |
| 108 | | AM_RANGE(0x170000, 0x170fff) AM_RAM_WRITE(vram_1_w) AM_SHARE("vram_1") // VRAM 1 |
| 109 | | AM_RANGE(0x171000, 0x171fff) AM_WRITE(vram_1_w) // Mirror of VRAM 1? |
| 110 | | AM_RANGE(0x180000, 0x18ffff) AM_RAM AM_SHARE("spriteram") // RAM + Sprites |
| 75 | /* powerinsa: same as the original one but without the sound cpu (and inferior sound HW) */ |
| 76 | static ADDRESS_MAP_START( powerinsa_map, AS_PROGRAM, 16, powerins_state ) |
| 77 | AM_IMPORT_FROM(powerins_map) |
| 78 | AM_RANGE(0x100030, 0x100031) AM_WRITE8(powerinsa_okibank_w, 0x00ff) |
| 79 | AM_RANGE(0x10003e, 0x10003f) AM_DEVREADWRITE8("oki1", okim6295_device, read, write, 0x00ff) |
| 111 | 80 | ADDRESS_MAP_END |
| 112 | 81 | |
| 113 | 82 | static ADDRESS_MAP_START( powerins_sound_map, AS_PROGRAM, 8, powerins_state ) |
| r245165 | r245166 | |
| 126 | 95 | AM_RANGE(0x90, 0x97) AM_DEVWRITE("nmk112", nmk112_device, okibank_w) |
| 127 | 96 | ADDRESS_MAP_END |
| 128 | 97 | |
| 129 | | static ADDRESS_MAP_START( powerinb_sound_io_map, AS_IO, 8, powerins_state ) |
| 98 | static ADDRESS_MAP_START( powerinsb_sound_io_map, AS_IO, 8, powerins_state ) |
| 130 | 99 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 131 | | AM_RANGE(0x00, 0x00) AM_READ(powerinb_fake_ym2203_r) AM_WRITENOP |
| 100 | AM_RANGE(0x00, 0x00) AM_READ(powerinsb_fake_ym2203_r) AM_WRITENOP |
| 132 | 101 | AM_RANGE(0x01, 0x01) AM_NOP |
| 133 | 102 | AM_RANGE(0x80, 0x80) AM_DEVREADWRITE("oki1", okim6295_device, read, write) |
| 134 | 103 | AM_RANGE(0x88, 0x88) AM_DEVREADWRITE("oki2", okim6295_device, read, write) |
| 135 | 104 | AM_RANGE(0x90, 0x97) AM_DEVWRITE("nmk112", nmk112_device, okibank_w) |
| 136 | 105 | ADDRESS_MAP_END |
| 137 | 106 | |
| 107 | static ADDRESS_MAP_START( powerinsa_oki_map, AS_0, 8, powerins_state ) |
| 108 | AM_RANGE(0x00000, 0x2ffff) AM_ROM |
| 109 | AM_RANGE(0x30000, 0x3ffff) AM_ROMBANK("okibank") |
| 110 | ADDRESS_MAP_END |
| 138 | 111 | |
| 112 | |
| 139 | 113 | /*************************************************************************** |
| 140 | 114 | |
| 141 | 115 | Input Ports |
| r245165 | r245166 | |
| 311 | 285 | |
| 312 | 286 | ***************************************************************************/ |
| 313 | 287 | |
| 314 | | void powerins_state::machine_start() |
| 288 | MACHINE_START_MEMBER(powerins_state, powerinsa) |
| 315 | 289 | { |
| 316 | | save_item(NAME(m_oki_bank)); |
| 290 | membank("okibank")->configure_entries(0, 5, memregion("oki1")->base() + 0x30000, 0x10000); |
| 317 | 291 | } |
| 318 | 292 | |
| 319 | | void powerins_state::machine_reset() |
| 320 | | { |
| 321 | | m_oki_bank = -1; // samples bank "uninitialised" |
| 322 | | } |
| 323 | | |
| 324 | 293 | static MACHINE_CONFIG_START( powerins, powerins_state ) |
| 325 | 294 | |
| 326 | 295 | /* basic machine hardware */ |
| r245165 | r245166 | |
| 365 | 334 | MCFG_NMK112_ROM1("oki2") |
| 366 | 335 | MACHINE_CONFIG_END |
| 367 | 336 | |
| 368 | | static MACHINE_CONFIG_DERIVED( powerina, powerins ) |
| 337 | static MACHINE_CONFIG_DERIVED( powerinsa, powerins ) |
| 369 | 338 | |
| 370 | 339 | /* basic machine hardware */ |
| 371 | 340 | |
| 372 | 341 | MCFG_CPU_MODIFY("maincpu") |
| 373 | | MCFG_CPU_PROGRAM_MAP(powerina_map) |
| 342 | MCFG_CPU_PROGRAM_MAP(powerinsa_map) |
| 374 | 343 | |
| 375 | 344 | MCFG_SCREEN_MODIFY("screen") |
| 376 | 345 | MCFG_SCREEN_REFRESH_RATE(60) |
| 377 | 346 | |
| 378 | 347 | MCFG_DEVICE_REMOVE("soundcpu") |
| 379 | 348 | |
| 349 | MCFG_MACHINE_START_OVERRIDE(powerins_state, powerinsa) |
| 350 | |
| 380 | 351 | MCFG_OKIM6295_REPLACE("oki1", 990000, OKIM6295_PIN7_LOW) // pin7 not verified |
| 352 | MCFG_DEVICE_ADDRESS_MAP(AS_0, powerinsa_oki_map) |
| 381 | 353 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) |
| 382 | 354 | |
| 383 | 355 | MCFG_DEVICE_REMOVE("oki2") |
| r245165 | r245166 | |
| 385 | 357 | MCFG_DEVICE_REMOVE("nmk112") |
| 386 | 358 | MACHINE_CONFIG_END |
| 387 | 359 | |
| 388 | | static MACHINE_CONFIG_DERIVED( powerinb, powerins ) |
| 360 | static MACHINE_CONFIG_DERIVED( powerinsb, powerins ) |
| 389 | 361 | |
| 390 | 362 | /* basic machine hardware */ |
| 391 | 363 | |
| r245165 | r245166 | |
| 393 | 365 | MCFG_SCREEN_REFRESH_RATE(60) |
| 394 | 366 | |
| 395 | 367 | MCFG_CPU_MODIFY("soundcpu") /* 6 MHz */ |
| 396 | | MCFG_CPU_IO_MAP(powerinb_sound_io_map) |
| 368 | MCFG_CPU_IO_MAP(powerinsb_sound_io_map) |
| 397 | 369 | MCFG_CPU_PERIODIC_INT_DRIVER(powerins_state, irq0_line_hold, 120) // YM2203 rate is at 150?? |
| 398 | 370 | |
| 399 | 371 | MCFG_DEVICE_REMOVE("ym2203") // Sound code talks to one, but it's not fitted on the board |
| r245165 | r245166 | |
| 590 | 562 | ROM_LOAD( "rom8", 0x400000, 0x200000, CRC(b02fdd6d) SHA1(1e2c52b4e9999f0b564fcf13ff41b097ad7d0c39) ) |
| 591 | 563 | ROM_LOAD( "rom7", 0x600000, 0x200000, CRC(92ab9996) SHA1(915ec8f383cc3652c3816a9b56ee54e22e104a5c) ) |
| 592 | 564 | |
| 593 | | ROM_REGION( 0x090000, "oki1", 0 ) /* 8 bit adpcm (banked) */ |
| 594 | | ROM_LOAD( "rom5", 0x000000, 0x030000, CRC(88579c8f) SHA1(13083934ab294c9b08d3e36f55c00a6a2e5a0507) ) |
| 595 | | ROM_CONTINUE( 0x040000, 0x050000 ) |
| 565 | ROM_REGION( 0x080000, "oki1", 0 ) /* 8 bit adpcm (banked) */ |
| 566 | ROM_LOAD( "rom5", 0x000000, 0x080000, CRC(88579c8f) SHA1(13083934ab294c9b08d3e36f55c00a6a2e5a0507) ) |
| 596 | 567 | ROM_END |
| 597 | 568 | |
| 598 | 569 | /*************************************************************************** |
| r245165 | r245166 | |
| 701 | 672 | |
| 702 | 673 | |
| 703 | 674 | /* all supported sets give a 93.10.20 date */ |
| 704 | | GAME( 1993, powerins, 0, powerins, powerins, driver_device, 0, ROT0, "Atlus", "Power Instinct (USA)", GAME_SUPPORTS_SAVE ) |
| 705 | | GAME( 1993, powerinsj, powerins, powerins, powerinj, driver_device, 0, ROT0, "Atlus", "Gouketsuji Ichizoku (Japan)", GAME_SUPPORTS_SAVE ) |
| 706 | | GAME( 1993, powerinsa, powerins, powerina, powerins, driver_device, 0, ROT0, "bootleg", "Power Instinct (USA, bootleg set 1)", GAME_SUPPORTS_SAVE ) |
| 707 | | GAME( 1993, powerinsb, powerins, powerinb, powerins, driver_device, 0, ROT0, "bootleg", "Power Instinct (USA, bootleg set 2)", GAME_SUPPORTS_SAVE ) |
| 675 | GAME( 1993, powerins, 0, powerins, powerins, driver_device, 0, ROT0, "Atlus", "Power Instinct (USA)", GAME_SUPPORTS_SAVE ) |
| 676 | GAME( 1993, powerinsj, powerins, powerins, powerinj, driver_device, 0, ROT0, "Atlus", "Gouketsuji Ichizoku (Japan)", GAME_SUPPORTS_SAVE ) |
| 677 | GAME( 1993, powerinsa, powerins, powerinsa, powerins, driver_device, 0, ROT0, "bootleg", "Power Instinct (USA, bootleg set 1)", GAME_SUPPORTS_SAVE ) |
| 678 | GAME( 1993, powerinsb, powerins, powerinsb, powerins, driver_device, 0, ROT0, "bootleg", "Power Instinct (USA, bootleg set 2)", GAME_SUPPORTS_SAVE ) |