summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2025-08-28 17:57:51 +0200
committer hap <happppp@users.noreply.github.com>2025-08-28 17:57:51 +0200
commit3a6726337e9385b28761404d3c5a6e7549f3846b (patch)
tree9fbfabea9907356f559ecad0211a80edfa4c4a2f
parent73ff2a7106de8a1d898365b9ddd09bb2a1402d62 (diff)
decocass: correct watchdog enable and hook up flip screen, remove some tag lookups
-rw-r--r--src/mame/dataeast/decocass.cpp15
-rw-r--r--src/mame/dataeast/decocass.h12
-rw-r--r--src/mame/dataeast/decocass_m.cpp13
-rw-r--r--src/mame/dataeast/decocass_v.cpp8
4 files changed, 28 insertions, 20 deletions
diff --git a/src/mame/dataeast/decocass.cpp b/src/mame/dataeast/decocass.cpp
index baf78e0614b..2ab953e9c5d 100644
--- a/src/mame/dataeast/decocass.cpp
+++ b/src/mame/dataeast/decocass.cpp
@@ -130,7 +130,7 @@ void decocass_state::decocass_map(address_map &map)
void decocass_state::decocrom_map(address_map &map)
{
decocass_map(map);
- map(0x6000, 0xafff).bankr("bank1").w(FUNC(decocass_state::decocass_de0091_w));
+ map(0x6000, 0xafff).bankr("bank").w(FUNC(decocass_state::decocass_de0091_w));
map(0xe900, 0xe900).w(FUNC(decocass_state::decocass_e900_w));
}
@@ -2098,10 +2098,10 @@ void decocass_state::init_decocrom()
init_decocass();
/* convert charram to a banked ROM */
- membank("bank1")->configure_entry(0, m_charram);
- membank("bank1")->configure_entry(1, memregion("user3")->base());
- membank("bank1")->configure_entry(2, memregion("user3")->base()+0x5000);
- membank("bank1")->set_entry(0);
+ m_rombank->configure_entry(0, m_charram);
+ m_rombank->configure_entry(1, memregion("user3")->base());
+ m_rombank->configure_entry(2, memregion("user3")->base()+0x5000);
+ m_rombank->set_entry(0);
}
uint8_t decocass_state::cdsteljn_input_r(offs_t offset)
@@ -2109,7 +2109,7 @@ uint8_t decocass_state::cdsteljn_input_r(offs_t offset)
uint8_t res;
static const char *const portnames[2][4] = {
{"P1_MP0", "P1_MP1", "P1_MP2", "P1_MP3"},
- {"P2_MP0", "P2_MP1", "P2_MP2", "P2_MP3"} };
+ {"P2_MP0", "P2_MP1", "P2_MP2", "P2_MP3"} };
if(offset & 6)
return decocass_input_r(offset);
@@ -2123,9 +2123,6 @@ void decocass_state::cdsteljn_mux_w(uint8_t data)
{
m_mux_data = (data & 0xc) >> 2;
/* bit 0 and 1 are p1/p2 lamps */
-
- if(data & ~0xf)
- printf("%02x\n",data);
}
void decocass_state::init_cdsteljn()
diff --git a/src/mame/dataeast/decocass.h b/src/mame/dataeast/decocass.h
index a0f2bd6d918..74a52a32dee 100644
--- a/src/mame/dataeast/decocass.h
+++ b/src/mame/dataeast/decocass.h
@@ -46,6 +46,9 @@ public:
, m_palette(*this, "palette")
, m_soundlatch(*this, "soundlatch")
, m_soundlatch2(*this, "soundlatch2")
+ , m_inputs(*this, "IN%u", 0)
+ , m_analog(*this, "AN%u", 0)
+ , m_dsw(*this, "DSW%u", 1)
, m_rambase(*this, "rambase")
, m_charram(*this, "charram")
, m_fgvideoram(*this, "fgvideoram")
@@ -53,7 +56,7 @@ public:
, m_tileram(*this, "tileram")
, m_objectram(*this, "objectram")
, m_paletteram(*this, "paletteram")
- , m_bank1(*this, "bank1")
+ , m_rombank(*this, "bank")
{
}
@@ -95,6 +98,10 @@ private:
required_device<generic_latch_8_device> m_soundlatch;
required_device<generic_latch_8_device> m_soundlatch2;
+ required_ioport_array<3> m_inputs;
+ required_ioport_array<4> m_analog;
+ required_ioport_array<2> m_dsw;
+
/* memory pointers */
required_shared_ptr<uint8_t> m_rambase;
required_shared_ptr<uint8_t> m_charram;
@@ -103,7 +110,7 @@ private:
required_shared_ptr<uint8_t> m_tileram;
required_shared_ptr<uint8_t> m_objectram;
required_shared_ptr<uint8_t> m_paletteram;
- optional_memory_bank m_bank1;
+ optional_memory_bank m_rombank;
uint8_t *m_bgvideoram = nullptr; /* shares bits D0-3 with tileram! */
size_t m_bgvideoram_size = 0U;
@@ -112,6 +119,7 @@ private:
tilemap_t *m_fg_tilemap = nullptr;
tilemap_t *m_bg_tilemap_l = nullptr;
tilemap_t *m_bg_tilemap_r = nullptr;
+ uint8_t m_watchdog_flip = 0;
uint8_t m_empty_tile[16*16]{};
int32_t m_color_missiles = 0;
int32_t m_color_center_bot = 0;
diff --git a/src/mame/dataeast/decocass_m.cpp b/src/mame/dataeast/decocass_m.cpp
index cfec375d714..17c1f3ae179 100644
--- a/src/mame/dataeast/decocass_m.cpp
+++ b/src/mame/dataeast/decocass_m.cpp
@@ -150,10 +150,8 @@ INPUT_CHANGED_MEMBER(decocass_state::coin_inserted)
void decocass_state::decocass_quadrature_decoder_reset_w(uint8_t data)
{
/* just latch the analog controls here */
- m_quadrature_decoder[0] = ioport("AN0")->read();
- m_quadrature_decoder[1] = ioport("AN1")->read();
- m_quadrature_decoder[2] = ioport("AN2")->read();
- m_quadrature_decoder[3] = ioport("AN3")->read();
+ for (int i = 0; i < 4; i++)
+ m_quadrature_decoder[i] = m_analog[i]->read();
}
void decocass_state::decocass_adc_w(uint8_t data)
@@ -173,12 +171,11 @@ void decocass_state::decocass_adc_w(uint8_t data)
uint8_t decocass_state::decocass_input_r(offs_t offset)
{
uint8_t data = 0xff;
- static const char *const portnames[] = { "IN0", "IN1", "IN2" };
switch (offset & 7)
{
case 0: case 1: case 2:
- data = machine().root_device().ioport(portnames[offset & 7])->read();
+ data = m_inputs[offset & 7]->read();
break;
case 3: case 4: case 5: case 6:
data = m_quadrature_decoder[(offset & 7) - 3];
@@ -1267,7 +1264,7 @@ void decocass_state::decocass_e900_w(uint8_t data)
if (m_de0091_enable == 0x3) // invalid
return;
- membank("bank1")->set_entry(data & 3);
+ m_rombank->set_entry(data & 3);
}
void decocass_state::decocass_de0091_w(offs_t offset, uint8_t data)
@@ -1334,9 +1331,9 @@ void decocass_state::machine_reset()
m_sound_ack = 0;
m_audio_nmi_enabled = 0;
m_audio_nmi_state = 0;
- m_watchdog->watchdog_enable(0);
/* video-related */
+ decocass_watchdog_flip_w(0);
m_color_missiles = 0;
m_color_center_bot = 0;
m_mode_set = 0;
diff --git a/src/mame/dataeast/decocass_v.cpp b/src/mame/dataeast/decocass_v.cpp
index 02bd4a91e51..b38908ac7a7 100644
--- a/src/mame/dataeast/decocass_v.cpp
+++ b/src/mame/dataeast/decocass_v.cpp
@@ -167,6 +167,7 @@ static const uint32_t tile_offset[32*32] = {
********************************************/
void decocass_state::decocass_video_state_save_init()
{
+ save_item(NAME(m_watchdog_flip));
save_item(NAME(m_color_missiles));
save_item(NAME(m_color_center_bot));
save_item(NAME(m_mode_set));
@@ -389,12 +390,14 @@ void decocass_state::decocass_watchdog_count_w(uint8_t data)
LOG(1,("decocass_watchdog_count_w: $%02x\n", data));
m_watchdog->set_vblank_count(m_screen, (data & 0x0f) + 1);
m_watchdog->watchdog_reset();
+
}
void decocass_state::decocass_watchdog_flip_w(uint8_t data)
{
LOG(1,("decocass_watchdog_flip_w: $%02x\n", data));
- m_watchdog->watchdog_enable(BIT(data, 2));
+ m_watchdog->watchdog_enable(BIT(data, 3));
+ m_watchdog_flip = data;
}
void decocass_state::decocass_color_missiles_w(uint8_t data)
@@ -735,6 +738,9 @@ uint32_t decocass_state::screen_update_decocass(screen_device &screen, bitmap_in
}
#endif
+ // flip screen flag only has effect if cocktail dsw is on
+ flip_screen_set(m_watchdog_flip & BIT(m_dsw[0]->read(), 6));
+
bitmap_ind8 &priority = screen.priority();
bitmap.fill(8, cliprect);
priority.fill(0, cliprect);