mirror of
https://github.com/holub/mame
synced 2025-06-24 21:34:43 +03:00
swimmer: add nmi clear
This commit is contained in:
parent
74efa6ef7a
commit
68abdc312e
@ -2,8 +2,7 @@
|
|||||||
// copyright-holders:Nicola Salmoria
|
// copyright-holders:Nicola Salmoria
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
Crazy Climber memory map (preliminary)
|
Nichibutsu Crazy Climber
|
||||||
as described by Lionel Theunissen (lionelth@ozemail.com.au)
|
|
||||||
|
|
||||||
Crazy Kong is very similar to Crazy Climber, there is an additional ROM at
|
Crazy Kong is very similar to Crazy Climber, there is an additional ROM at
|
||||||
5000-5fff and RAM is at 6000-6bff. Dip switches and input connections are
|
5000-5fff and RAM is at 6000-6bff. Dip switches and input connections are
|
||||||
@ -13,7 +12,6 @@ Swimmer is similar but also different (e.g. it has two CPUs and two 8910,
|
|||||||
graphics are 3bpp instead of 2)
|
graphics are 3bpp instead of 2)
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
- verify timings of sound/music on Swimmer
|
|
||||||
- add tms5110 support to bagmanf
|
- add tms5110 support to bagmanf
|
||||||
- toprollr Coin_B 2C_1C doesn't work right, is it a BTANB?
|
- toprollr Coin_B 2C_1C doesn't work right, is it a BTANB?
|
||||||
|
|
||||||
@ -153,9 +151,9 @@ Cannon Ball
|
|||||||
-----------
|
-----------
|
||||||
The Cannon Ball bootlegs on this Falcon (Crazy Kong) hardware
|
The Cannon Ball bootlegs on this Falcon (Crazy Kong) hardware
|
||||||
don't correctly handle the protection device found on the original
|
don't correctly handle the protection device found on the original
|
||||||
pacman hardware conversion, this causes them to crash after the
|
pacman hardware conversion, this causes them to crash after a few
|
||||||
a few rounds - confirmed on an original PCB. They clearly weren't
|
rounds - confirmed on an original PCB. They clearly weren't tested
|
||||||
tested properly by the bootleggers.
|
properly by the bootleggers.
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
|
|
||||||
@ -398,18 +396,19 @@ void cclimber_state::bagmanf_vblank_irq(int state)
|
|||||||
m_maincpu->set_input_line(0, HOLD_LINE);
|
m_maincpu->set_input_line(0, HOLD_LINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cclimber_state::tangramq_sound_nmi_clear_w(uint8_t data)
|
void cclimber_state::sound_nmi_clear_w(uint8_t data)
|
||||||
{
|
{
|
||||||
m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
|
m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t cclimber_state::sound_nmi_clear_r()
|
||||||
void swimmer_state::swimmer_sh_soundlatch_w(uint8_t data)
|
|
||||||
{
|
{
|
||||||
m_soundlatch->write(data);
|
if (!machine().side_effects_disabled())
|
||||||
m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); // Z80
|
sound_nmi_clear_w(0);
|
||||||
|
return 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint8_t swimmer_state::soundlatch_read_and_clear()
|
uint8_t swimmer_state::soundlatch_read_and_clear()
|
||||||
{
|
{
|
||||||
uint8_t res = m_soundlatch->read();
|
uint8_t res = m_soundlatch->read();
|
||||||
@ -515,7 +514,7 @@ void swimmer_state::swimmer_root_map(address_map &map)
|
|||||||
map(0x9c00, 0x9fff).ram().w(FUNC(swimmer_state::cclimber_colorram_w)).share("colorram");
|
map(0x9c00, 0x9fff).ram().w(FUNC(swimmer_state::cclimber_colorram_w)).share("colorram");
|
||||||
map(0xa000, 0xa007).w(m_mainlatch, FUNC(ls259_device::write_d0));
|
map(0xa000, 0xa007).w(m_mainlatch, FUNC(ls259_device::write_d0));
|
||||||
map(0xa000, 0xa000).mirror(0x07ff).portr("P2");
|
map(0xa000, 0xa000).mirror(0x07ff).portr("P2");
|
||||||
map(0xa800, 0xa800).mirror(0x07ff).portr("P1").w(FUNC(swimmer_state::swimmer_sh_soundlatch_w));
|
map(0xa800, 0xa800).mirror(0x07ff).portr("P1").w(m_soundlatch, FUNC(generic_latch_8_device::write));
|
||||||
map(0xb000, 0xb000).mirror(0x07ff).portr("DSW1");
|
map(0xb000, 0xb000).mirror(0x07ff).portr("DSW1");
|
||||||
map(0xb800, 0xb800).mirror(0x07ff).portr("DSW2");
|
map(0xb800, 0xb800).mirror(0x07ff).portr("DSW2");
|
||||||
}
|
}
|
||||||
@ -665,9 +664,9 @@ void yamato_state::yamato_portmap(address_map &map)
|
|||||||
void swimmer_state::swimmer_audio_map(address_map &map)
|
void swimmer_state::swimmer_audio_map(address_map &map)
|
||||||
{
|
{
|
||||||
map(0x0000, 0x0fff).rom();
|
map(0x0000, 0x0fff).rom();
|
||||||
map(0x2000, 0x23ff).ram();
|
map(0x2000, 0x23ff).mirror(0x0c00).ram();
|
||||||
map(0x3000, 0x3000).r(FUNC(swimmer_state::soundlatch_read_and_clear));
|
map(0x3000, 0x3000).mirror(0x0fff).r(FUNC(swimmer_state::soundlatch_read_and_clear));
|
||||||
map(0x4000, 0x4001).ram(); // ???
|
map(0x4000, 0x4000).mirror(0x0fff).rw(FUNC(swimmer_state::sound_nmi_clear_r), FUNC(swimmer_state::sound_nmi_clear_w));
|
||||||
}
|
}
|
||||||
|
|
||||||
void yamato_state::yamato_audio_map(address_map &map)
|
void yamato_state::yamato_audio_map(address_map &map)
|
||||||
@ -701,7 +700,7 @@ void cclimber_state::tangramq_sound_map(address_map &map)
|
|||||||
map(0x8000, 0x8001).w("ay1", FUNC(ay8910_device::address_data_w));
|
map(0x8000, 0x8001).w("ay1", FUNC(ay8910_device::address_data_w));
|
||||||
map(0x8002, 0x8007).w("wave", FUNC(snkwave_device::snkwave_w));
|
map(0x8002, 0x8007).w("wave", FUNC(snkwave_device::snkwave_w));
|
||||||
map(0x8008, 0x8009).w("ay2", FUNC(ay8910_device::address_data_w));
|
map(0x8008, 0x8009).w("ay2", FUNC(ay8910_device::address_data_w));
|
||||||
map(0xa000, 0xa000).w(FUNC(cclimber_state::tangramq_sound_nmi_clear_w));
|
map(0xa000, 0xa000).w(FUNC(cclimber_state::sound_nmi_clear_w));
|
||||||
map(0xe000, 0xe3ff).ram();
|
map(0xe000, 0xe3ff).ram();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1648,7 +1647,7 @@ void swimmer_state::swimmer(machine_config &config)
|
|||||||
Z80(config, m_audiocpu, 4_MHz_XTAL/2); // verified on pcb
|
Z80(config, m_audiocpu, 4_MHz_XTAL/2); // verified on pcb
|
||||||
m_audiocpu->set_addrmap(AS_PROGRAM, &swimmer_state::swimmer_audio_map);
|
m_audiocpu->set_addrmap(AS_PROGRAM, &swimmer_state::swimmer_audio_map);
|
||||||
m_audiocpu->set_addrmap(AS_IO, &swimmer_state::swimmer_audio_portmap);
|
m_audiocpu->set_addrmap(AS_IO, &swimmer_state::swimmer_audio_portmap);
|
||||||
m_audiocpu->set_periodic_int(FUNC(swimmer_state::nmi_line_pulse), attotime::from_ticks(0x4000, 4_MHz_XTAL));
|
m_audiocpu->set_periodic_int(FUNC(swimmer_state::nmi_line_assert), attotime::from_ticks(0x4000, 4_MHz_XTAL));
|
||||||
|
|
||||||
// video hardware
|
// video hardware
|
||||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
||||||
@ -1669,6 +1668,7 @@ void swimmer_state::swimmer(machine_config &config)
|
|||||||
SPEAKER(config, "speaker").front_center();
|
SPEAKER(config, "speaker").front_center();
|
||||||
|
|
||||||
GENERIC_LATCH_8(config, m_soundlatch);
|
GENERIC_LATCH_8(config, m_soundlatch);
|
||||||
|
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, 0, HOLD_LINE); // auto ack
|
||||||
|
|
||||||
AY8910(config, "ay1", 4_MHz_XTAL/2).add_route(ALL_OUTPUTS, "speaker", 0.25); // verified on pcb
|
AY8910(config, "ay1", 4_MHz_XTAL/2).add_route(ALL_OUTPUTS, "speaker", 0.25); // verified on pcb
|
||||||
AY8910(config, "ay2", 4_MHz_XTAL/2).add_route(ALL_OUTPUTS, "speaker", 0.25); // verified on pcb
|
AY8910(config, "ay2", 4_MHz_XTAL/2).add_route(ALL_OUTPUTS, "speaker", 0.25); // verified on pcb
|
||||||
|
@ -83,6 +83,8 @@ protected:
|
|||||||
void cclimber_portmap(address_map &map) ATTR_COLD;
|
void cclimber_portmap(address_map &map) ATTR_COLD;
|
||||||
|
|
||||||
void vblank_irq(int state);
|
void vblank_irq(int state);
|
||||||
|
void sound_nmi_clear_w(uint8_t data);
|
||||||
|
uint8_t sound_nmi_clear_r();
|
||||||
|
|
||||||
TILE_GET_INFO_MEMBER(cclimber_get_pf_tile_info);
|
TILE_GET_INFO_MEMBER(cclimber_get_pf_tile_info);
|
||||||
TILE_GET_INFO_MEMBER(cclimber_get_bs_tile_info);
|
TILE_GET_INFO_MEMBER(cclimber_get_bs_tile_info);
|
||||||
@ -98,7 +100,6 @@ private:
|
|||||||
bool m_nmi_mask = false;
|
bool m_nmi_mask = false;
|
||||||
|
|
||||||
void bagmanf_vblank_irq(int state);
|
void bagmanf_vblank_irq(int state);
|
||||||
void tangramq_sound_nmi_clear_w(uint8_t data);
|
|
||||||
|
|
||||||
void cclimber_palette(palette_device &palette) const;
|
void cclimber_palette(palette_device &palette) const;
|
||||||
|
|
||||||
@ -144,7 +145,6 @@ private:
|
|||||||
uint16_t m_sidepen = 0;
|
uint16_t m_sidepen = 0;
|
||||||
|
|
||||||
uint8_t soundlatch_read_and_clear();
|
uint8_t soundlatch_read_and_clear();
|
||||||
void swimmer_sh_soundlatch_w(uint8_t data);
|
|
||||||
void sidebg_enable_w(int state);
|
void sidebg_enable_w(int state);
|
||||||
void palette_bank_w(int state);
|
void palette_bank_w(int state);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user