diff options
Diffstat (limited to 'src/mame/drivers/cclimber.cpp')
-rw-r--r-- | src/mame/drivers/cclimber.cpp | 73 |
1 files changed, 45 insertions, 28 deletions
diff --git a/src/mame/drivers/cclimber.cpp b/src/mame/drivers/cclimber.cpp index f9327dce9ad..459e12f2299 100644 --- a/src/mame/drivers/cclimber.cpp +++ b/src/mame/drivers/cclimber.cpp @@ -285,10 +285,9 @@ READ8_MEMBER(cclimber_state::yamato_p1_r) } -WRITE8_MEMBER(cclimber_state::toprollr_rombank_w) +WRITE_LINE_MEMBER(cclimber_state::toprollr_rombank_w) { - m_toprollr_rombank &= ~(1 << offset); - m_toprollr_rombank |= (data & 1) << offset; + m_toprollr_rombank = m_mainlatch->q5_r() | (m_mainlatch->q6_r() << 1); if (m_toprollr_rombank < 3) { membank("bank1")->set_entry(m_toprollr_rombank); @@ -296,6 +295,7 @@ WRITE8_MEMBER(cclimber_state::toprollr_rombank_w) } } +#ifdef UNUSED_FUNCTION MACHINE_RESET_MEMBER(cclimber_state,cclimber) { /* Disable interrupts, River Patrol / Silver Land needs this otherwise returns bad RAM on POST */ @@ -303,11 +303,11 @@ MACHINE_RESET_MEMBER(cclimber_state,cclimber) m_toprollr_rombank = 0; } +#endif - -WRITE8_MEMBER(cclimber_state::nmi_mask_w) +WRITE_LINE_MEMBER(cclimber_state::nmi_mask_w) { - m_nmi_mask = data & 1; + m_nmi_mask = state; } @@ -335,10 +335,8 @@ static ADDRESS_MAP_START( cclimber_map, AS_PROGRAM, 8, cclimber_state ) AM_RANGE(0x98dc, 0x98df) AM_RAM AM_SHARE("bigspritectrl") AM_RANGE(0x9800, 0x9bff) AM_RAM /* not used, but initialized */ AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(cclimber_colorram_w) AM_SHARE("colorram") - AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(nmi_mask_w) - AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_SHARE("flip_screen") - AM_RANGE(0xa003, 0xa003) AM_WRITE(nmi_mask_w) //used by Crazy Kong Bootleg with alt levels and speed up - AM_RANGE(0xa004, 0xa004) AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_trigger_w) + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) + AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P2") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_rate_w) AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_volume_w) AM_RANGE(0xb800, 0xb800) AM_READ_PORT("SYSTEM") @@ -363,9 +361,8 @@ static ADDRESS_MAP_START( cannonb_map, AS_PROGRAM, 8, cclimber_state ) AM_RANGE(0x98dc, 0x98df) AM_RAM AM_SHARE("bigspritectrl") AM_RANGE(0x9800, 0x9bff) AM_RAM /* not used, but initialized */ AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(cclimber_colorram_w) AM_SHARE("colorram") - AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(nmi_mask_w) - AM_RANGE(0xa001, 0xa002) AM_WRITE(cannonb_flip_screen_w) AM_SHARE("flip_screen") - AM_RANGE(0xa004, 0xa004) AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_trigger_w) + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) + AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P2") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_rate_w) AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_volume_w) AM_RANGE(0xb800, 0xb800) AM_READ_PORT("SYSTEM") @@ -380,10 +377,8 @@ static ADDRESS_MAP_START( swimmer_map, AS_PROGRAM, 8, cclimber_state ) AM_RANGE(0x9880, 0x989f) AM_WRITEONLY AM_SHARE("spriteram") AM_RANGE(0x98fc, 0x98ff) AM_WRITEONLY AM_SHARE("bigspritectrl") AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(cclimber_colorram_w) AM_SHARE("colorram") - AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P2") AM_WRITE(nmi_mask_w) - AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_SHARE("flip_screen") - AM_RANGE(0xa003, 0xa003) AM_WRITEONLY AM_SHARE("sidebg_enable") - AM_RANGE(0xa004, 0xa004) AM_WRITEONLY AM_SHARE("palettebank") + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) + AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P2") AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P1") AM_WRITE(swimmer_sh_soundlatch_w) AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW1") AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW2") AM_WRITEONLY AM_SHARE("bgcolor") @@ -410,8 +405,8 @@ static ADDRESS_MAP_START( yamato_map, AS_PROGRAM, 8, cclimber_state ) AM_RANGE(0x98dc, 0x98df) AM_RAM AM_SHARE("bigspritectrl") AM_RANGE(0x9800, 0x9bff) AM_RAM /* not used, but initialized */ AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(cclimber_colorram_w) AM_SHARE("colorram") - AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(nmi_mask_w) - AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_SHARE("flip_screen") + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) + AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P2") AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_RANGE(0xb800, 0xb800) AM_READ_PORT("COIN") @@ -433,10 +428,8 @@ static ADDRESS_MAP_START( toprollr_map, AS_PROGRAM, 8, cclimber_state ) AM_RANGE(0x9880, 0x995f) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x99dc, 0x99df) AM_RAM AM_SHARE("bigspritectrl") AM_RANGE(0x9c00, 0x9fff) AM_RAM AM_SHARE("colorram") - AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(nmi_mask_w) - AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_SHARE("flip_screen") - AM_RANGE(0xa004, 0xa004) AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_trigger_w) - AM_RANGE(0xa005, 0xa006) AM_WRITE(toprollr_rombank_w) + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) + AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P2") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_rate_w) AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_volume_w) AM_RANGE(0xb800, 0xb800) AM_READ_PORT("SYSTEM") @@ -457,9 +450,8 @@ static ADDRESS_MAP_START( bagmanf_map, AS_PROGRAM, 8, cclimber_state ) AM_RANGE(0x98dc, 0x98df) AM_RAM AM_SHARE("bigspritectrl") // wrong AM_RANGE(0x9800, 0x9bff) AM_RAM AM_SHARE("colorram") AM_RANGE(0x9c00, 0x9fff) AM_RAM /* not used, but initialized */ - AM_RANGE(0xa000, 0xa000) AM_READ(bagmanf_a000_r) AM_WRITE(nmi_mask_w) - AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_SHARE("flip_screen") - AM_RANGE(0xa004, 0xa004) AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_trigger_w) + AM_RANGE(0xa000, 0xa000) AM_READ(bagmanf_a000_r) + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xa800, 0xa800) AM_READNOP AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_rate_w) AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_volume_w) AM_RANGE(0xb800, 0xb800) AM_READNOP @@ -1109,7 +1101,10 @@ static MACHINE_CONFIG_START( root ) MCFG_CPU_IO_MAP(cclimber_portmap) MCFG_CPU_VBLANK_INT_DRIVER("screen", cclimber_state, vblank_irq) - MCFG_MACHINE_RESET_OVERRIDE(cclimber_state,cclimber) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cclimber_state, nmi_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cclimber_state, flip_screen_x_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cclimber_state, flip_screen_y_w)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -1129,6 +1124,8 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( cclimber, root ) + MCFG_DEVICE_MODIFY("mainlatch") // 7J on CCG-1 + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("cclimber_audio", cclimber_audio_device, sample_trigger_w)) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("speaker") @@ -1141,6 +1138,11 @@ static MACHINE_CONFIG_DERIVED( cclimberx, cclimber ) MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map) MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( ckongb, cclimber ) + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cclimber_state, nmi_mask_w)) //used by Crazy Kong Bootleg with alt levels and speed up +MACHINE_CONFIG_END + static MACHINE_CONFIG_DERIVED( cannonb, cclimber ) @@ -1148,6 +1150,11 @@ static MACHINE_CONFIG_DERIVED( cannonb, cclimber ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(cannonb_map) + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cclimber_state, flip_screen_x_w)) + MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(cclimber_state, flip_screen_y_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // not used + /* video hardware */ MCFG_GFXDECODE_MODIFY("gfxdecode", cannonb) MACHINE_CONFIG_END @@ -1204,6 +1211,9 @@ static MACHINE_CONFIG_DERIVED( toprollr, cclimber ) MCFG_SEGACRPT_SET_NUMBANKS(3) MCFG_SEGACRPT_SET_BANKSIZE(0x6000) + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(cclimber_state, toprollr_rombank_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(cclimber_state, toprollr_rombank_w)) /* video hardware */ MCFG_GFXDECODE_MODIFY("gfxdecode", toprollr) @@ -1224,6 +1234,13 @@ static MACHINE_CONFIG_START( swimmer ) MCFG_CPU_PROGRAM_MAP(swimmer_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", cclimber_state, vblank_irq) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cclimber_state, nmi_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cclimber_state, flip_screen_x_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cclimber_state, flip_screen_y_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cclimber_state, sidebg_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cclimber_state, palette_bank_w)) + MCFG_CPU_ADD("audiocpu", Z80,XTAL_4MHz/2) /* verified on pcb */ MCFG_CPU_PROGRAM_MAP(swimmer_audio_map) MCFG_CPU_IO_MAP(swimmer_audio_portmap) @@ -2657,7 +2674,7 @@ GAME( 1981, ckongpt2, 0, cclimber, ckong, cclimber_state, 0, GAME( 1981, ckongpt2a, ckongpt2, cclimber, ckong, cclimber_state, 0, ROT270, "Falcon", "Crazy Kong Part II (set 2)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, ckongpt2j, ckongpt2, cclimber, ckong, cclimber_state, 0, ROT270, "Falcon", "Crazy Kong Part II (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, ckongpt2jeu, ckongpt2, cclimber, ckong, cclimber_state, 0, ROT270, "bootleg (Jeutel)", "Crazy Kong Part II (Jeutel bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, ckongpt2b, ckongpt2, cclimber, ckongb, cclimber_state, ckongb, ROT270, "bootleg", "Crazy Kong Part II (alternative levels)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, ckongpt2b, ckongpt2, ckongb, ckongb, cclimber_state, ckongb, ROT270, "bootleg", "Crazy Kong Part II (alternative levels)", MACHINE_SUPPORTS_SAVE ) // see bagman.cpp for parent GAME( 1982, bagmanf, bagman, bagmanf, bagmanf, cclimber_state, 0, ROT270, "bootleg", "Le Bagnard (bootleg on Crazy Kong hardware)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) |