diff options
| author | 2025-08-28 17:57:51 +0200 | |
|---|---|---|
| committer | 2025-08-28 17:57:51 +0200 | |
| commit | 3a6726337e9385b28761404d3c5a6e7549f3846b (patch) | |
| tree | 9fbfabea9907356f559ecad0211a80edfa4c4a2f | |
| parent | 73ff2a7106de8a1d898365b9ddd09bb2a1402d62 (diff) | |
decocass: correct watchdog enable and hook up flip screen, remove some tag lookups
| -rw-r--r-- | src/mame/dataeast/decocass.cpp | 15 | ||||
| -rw-r--r-- | src/mame/dataeast/decocass.h | 12 | ||||
| -rw-r--r-- | src/mame/dataeast/decocass_m.cpp | 13 | ||||
| -rw-r--r-- | src/mame/dataeast/decocass_v.cpp | 8 |
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); |
