summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/mermaid.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/mermaid.cpp')
-rw-r--r--src/mame/drivers/mermaid.cpp25
1 files changed, 18 insertions, 7 deletions
diff --git a/src/mame/drivers/mermaid.cpp b/src/mame/drivers/mermaid.cpp
index b8fff594330..1dbd771fe4c 100644
--- a/src/mame/drivers/mermaid.cpp
+++ b/src/mame/drivers/mermaid.cpp
@@ -89,13 +89,13 @@ Stephh's notes (based on the games Z80 code and some tests) :
1) 'mermaid'
- - Player 2 uses 2nd set of inputs ONLY when "Cabinet" Dip Switch is set to "Cokctail".
+ - Player 2 uses 2nd set of inputs ONLY when "Cabinet" Dip Switch is set to "Cocktail".
- Continue Play is determined via DSW bit 3. When it's ON, insert a coin when
the message is displayed on the screen. Beware that there is no visible timer !
2) 'yachtmn'
- - Player 2 uses 2nd set of inputs ONLY when "Cabinet" Dip Switch is set to "Cokctail".
+ - Player 2 uses 2nd set of inputs ONLY when "Cabinet" Dip Switch is set to "Cocktail".
- Continue Play is always possible provided that you insert a coin when the
message (much shorter than in 'mermaid') is displayed on the screen (there is
also no timer). Then when you press START, you need to press START again when
@@ -162,7 +162,7 @@ void mermaid_state::mermaid_map(address_map &map)
{
map(0x0000, 0x9fff).rom();
map(0xc000, 0xc7ff).ram();
- map(0xc800, 0xcbff).ram().w(FUNC(mermaid_state::mermaid_videoram2_w)).share("videoram2");
+ map(0xc800, 0xcbff).ram().w(FUNC(mermaid_state::mermaid_videoram2_w)).share("videoram2").mirror(0x400);
map(0xd000, 0xd3ff).ram().w(FUNC(mermaid_state::mermaid_videoram_w)).share("videoram");
map(0xd800, 0xd81f).ram().w(FUNC(mermaid_state::mermaid_bg_scroll_w)).share("bg_scrollram");
map(0xd840, 0xd85f).ram().w(FUNC(mermaid_state::mermaid_fg_scroll_w)).share("fg_scrollram");
@@ -174,7 +174,7 @@ void mermaid_state::mermaid_map(address_map &map)
map(0xe800, 0xe807).w("latch2", FUNC(ls259_device::write_d0));
map(0xf000, 0xf000).portr("P2");
map(0xf800, 0xf800).r(FUNC(mermaid_state::mermaid_collision_r));
- map(0xf802, 0xf802).nopw(); // ???
+ // map(0xf802, 0xf802).nopw(); // ???
map(0xf806, 0xf806).w(FUNC(mermaid_state::mermaid_ay8910_write_port_w));
map(0xf807, 0xf807).w(FUNC(mermaid_state::mermaid_ay8910_control_port_w));
}
@@ -365,6 +365,7 @@ void mermaid_state::machine_start()
save_item(NAME(m_coll_bit2));
save_item(NAME(m_coll_bit3));
save_item(NAME(m_coll_bit6));
+ save_item(NAME(m_bg_bank));
save_item(NAME(m_rougien_gfxbank1));
save_item(NAME(m_rougien_gfxbank2));
save_item(NAME(m_ay8910_enable));
@@ -382,6 +383,8 @@ void mermaid_state::machine_reset()
m_coll_bit2 = 0;
m_coll_bit3 = 0;
m_coll_bit6 = 0;
+ m_bg_mask = 0;
+ m_bg_bank = 0;
m_rougien_gfxbank1 = 0;
m_rougien_gfxbank2 = 0;
@@ -428,16 +431,22 @@ void mermaid_state::mermaid(machine_config &config)
LS259(config, m_latch[0]);
m_latch[0]->q_out_cb<0>().set(FUNC(mermaid_state::ay1_enable_w));
m_latch[0]->q_out_cb<1>().set(FUNC(mermaid_state::ay2_enable_w));
- m_latch[0]->q_out_cb<4>().set_nop(); // ???
+ m_latch[0]->q_out_cb<2>().set([this](int state){ logerror("02 = %d\n", state); }); // ???
+ m_latch[0]->q_out_cb<3>().set([this](int state){ logerror("03 = %d\n", state); }); // ???
+ m_latch[0]->q_out_cb<4>().set([this](int state){ logerror("04 = %d\n", state); }); // ???
m_latch[0]->q_out_cb<5>().set(FUNC(mermaid_state::flip_screen_x_w));
m_latch[0]->q_out_cb<6>().set(FUNC(mermaid_state::flip_screen_y_w));
m_latch[0]->q_out_cb<7>().set(FUNC(mermaid_state::nmi_mask_w));
LS259(config, m_latch[1]);
- m_latch[1]->q_out_cb<0>().set_nop(); // ???
+ m_latch[1]->q_out_cb<0>().set(FUNC(mermaid_state::bg_mask_w));
+ m_latch[1]->q_out_cb<1>().set(FUNC(mermaid_state::bg_bank_w));
+ m_latch[1]->q_out_cb<2>().set([this](int state){ logerror("12 = %d\n", state); }); // ???
+ m_latch[1]->q_out_cb<3>().set([this](int state){ logerror("13 = %d\n", state); }); // ???
m_latch[1]->q_out_cb<4>().set(FUNC(mermaid_state::rougien_gfxbankswitch1_w));
m_latch[1]->q_out_cb<5>().set(FUNC(mermaid_state::rougien_gfxbankswitch2_w));
- m_latch[1]->q_out_cb<7>().set_nop(); // very frequent
+ m_latch[1]->q_out_cb<6>().set([this](int state){ logerror("16 = %d\n", state); }); // ???
+ m_latch[1]->q_out_cb<7>().set_nop(); // probable watchdog
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
@@ -465,6 +474,8 @@ void mermaid_state::rougien(machine_config &config)
m_latch[0]->q_out_cb<2>().set(FUNC(mermaid_state::rougien_sample_playback_w));
+ m_latch[1]->q_out_cb<0>().set([this](int state){ logerror("10 = %d\n", state); }); // ???
+ m_latch[1]->q_out_cb<1>().set([this](int state){ logerror("11 = %d\n", state); }); // ???
m_latch[1]->q_out_cb<2>().set(FUNC(mermaid_state::rougien_sample_rom_hi_w));
m_latch[1]->q_out_cb<3>().set(FUNC(mermaid_state::rougien_sample_rom_lo_w));