diff --git a/src/mame/seta/srmp2.cpp b/src/mame/seta/srmp2.cpp index b9a4c4f2048..98a517e0029 100644 --- a/src/mame/seta/srmp2.cpp +++ b/src/mame/seta/srmp2.cpp @@ -58,17 +58,166 @@ Note: ****************************************************************************/ - #include "emu.h" -#include "srmp2.h" #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" #include "machine/nvram.h" #include "sound/ay8910.h" +#include "sound/msm5205.h" +#include "video/x1_001.h" +#include "emupal.h" #include "screen.h" #include "speaker.h" +namespace { + +class srmp2_state : public driver_device +{ +public: + srmp2_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_spritegen(*this, "spritegen"), + m_msm(*this, "msm"), + m_adpcm_rom(*this, "adpcm"), + m_mainbank(*this, "mainbank"), + m_keys(*this, "KEY%u", 0U), + m_service(*this, "SERVICE") + { } + + void mjyuugi(machine_config &config); + void srmp2(machine_config &config); + void rmgoldyh(machine_config &config); + void srmp3(machine_config &config); + +private: + struct iox_t + { + int reset = 0, ff_event,ff_1 = 0, protcheck[4]{}, protlatch[4]{}; + uint8_t data = 0; + uint8_t mux = 0; + uint8_t ff = 0; + }; + + required_device m_maincpu; + required_device m_spritegen; + required_device m_msm; + required_region_ptr m_adpcm_rom; + optional_memory_bank m_mainbank; + required_ioport_array<8> m_keys; + required_ioport m_service; + + uint8_t m_color_bank = 0; + uint8_t m_gfx_bank = 0; + uint8_t m_adpcm_bank = 0; + int16_t m_adpcm_data = 0; + uint32_t m_adpcm_sptr = 0; + uint32_t m_adpcm_eptr = 0; + iox_t m_iox; + + // common + uint8_t vox_status_r(); + uint8_t iox_mux_r(); + uint8_t iox_status_r(); + void iox_command_w(uint8_t data); + void iox_data_w(uint8_t data); + void adpcm_int(int state); + + // mjuugi + void mjyuugi_flags_w(uint16_t data); + void mjyuugi_adpcm_bank_w(uint16_t data); + uint8_t mjyuugi_irq2_ack_r(address_space &space); + uint8_t mjyuugi_irq4_ack_r(address_space &space); + + // rmgoldyh + void rmgoldyh_rombank_w(uint8_t data); + + // srmp2 + void srmp2_irq2_ack_w(uint8_t data); + void srmp2_irq4_ack_w(uint8_t data); + void srmp2_flags_w(uint16_t data); + void adpcm_code_w(uint8_t data); + + // srmp3 + void srmp3_rombank_w(uint8_t data); + void srmp3_flags_w(uint8_t data); + void srmp3_irq_ack_w(uint8_t data); + + virtual void machine_start() override; + DECLARE_MACHINE_START(srmp2); + void srmp2_palette(palette_device &palette) const; + DECLARE_MACHINE_START(srmp3); + void srmp3_palette(palette_device &palette) const; + DECLARE_MACHINE_START(rmgoldyh); + DECLARE_MACHINE_START(mjyuugi); + + uint32_t screen_update_srmp2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + uint32_t screen_update_srmp3(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + X1_001_SPRITE_GFXBANK_CB_MEMBER(srmp3_gfxbank_callback); + + uint8_t iox_key_matrix_calc(uint8_t p_side); + + void mjyuugi_map(address_map &map); + void rmgoldyh_io_map(address_map &map); + void rmgoldyh_map(address_map &map); + void srmp2_map(address_map &map); + void srmp3_io_map(address_map &map); + void srmp3_map(address_map &map); +}; + + +/*************************************************************************** + + Video hardware + +***************************************************************************/ + +void srmp2_state::srmp2_palette(palette_device &palette) const +{ + uint8_t const *const color_prom = memregion("proms")->base(); + for (int i = 0; i < palette.entries(); i++) + { + int const col = (color_prom[i] << 8) + color_prom[i + palette.entries()]; + palette.set_pen_color(i ^ 0x0f, pal5bit(col >> 10), pal5bit(col >> 5), pal5bit(col >> 0)); + } +} + + +void srmp2_state::srmp3_palette(palette_device &palette) const +{ + uint8_t const *const color_prom = memregion("proms")->base(); + for (int i = 0; i < palette.entries(); i++) + { + int const col = (color_prom[i] << 8) + color_prom[i + palette.entries()]; + palette.set_pen_color(i,pal5bit(col >> 10), pal5bit(col >> 5), pal5bit(col >> 0)); + } +} + +X1_001_SPRITE_GFXBANK_CB_MEMBER(srmp2_state::srmp3_gfxbank_callback) +{ + return (code & 0x3fff) + ((code & 0x2000) ? (m_gfx_bank<<13) : 0); +} + + +uint32_t srmp2_state::screen_update_srmp2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + bitmap.fill(0x1ff, cliprect); + + m_spritegen->set_colorbase(m_color_bank<<5); + + m_spritegen->draw_sprites(screen,bitmap,cliprect,0x1000); + return 0; +} + +uint32_t srmp2_state::screen_update_srmp3(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + bitmap.fill(0x1f0, cliprect); + + m_spritegen->draw_sprites(screen,bitmap,cliprect,0x1000); + return 0; +} + /*************************************************************************** @@ -1586,6 +1735,7 @@ ROM_START( ponchina ) ROM_LOAD( "um2_1_10.u63", 0x080000, 0x080000, CRC(53e643e9) SHA1(3b221217e8f846ae96a9a47149037cea19d97549) ) ROM_END +} // anonymous namespace GAME( 1987, srmp1, 0, srmp2, srmp2, srmp2_state, empty_init, ROT0, "Seta", "Super Real Mahjong Part 1 (Japan)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/seta/srmp2.h b/src/mame/seta/srmp2.h deleted file mode 100644 index 0a551b916a5..00000000000 --- a/src/mame/seta/srmp2.h +++ /dev/null @@ -1,106 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Yochizo, Takahiro Nogi -#ifndef MAME_SETA_SRMP2_H -#define MAME_SETA_SRMP2_H - -#pragma once - -#include "sound/msm5205.h" -#include "video/x1_001.h" -#include "emupal.h" - -class srmp2_state : public driver_device -{ -public: - srmp2_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_spritegen(*this, "spritegen"), - m_msm(*this, "msm"), - m_adpcm_rom(*this, "adpcm"), - m_mainbank(*this, "mainbank"), - m_keys(*this, "KEY%u", 0U), - m_service(*this, "SERVICE") - { } - - void mjyuugi(machine_config &config); - void srmp2(machine_config &config); - void rmgoldyh(machine_config &config); - void srmp3(machine_config &config); - -private: - struct iox_t - { - int reset = 0, ff_event,ff_1 = 0, protcheck[4]{}, protlatch[4]{}; - uint8_t data = 0; - uint8_t mux = 0; - uint8_t ff = 0; - }; - - required_device m_maincpu; - required_device m_spritegen; - required_device m_msm; - required_region_ptr m_adpcm_rom; - optional_memory_bank m_mainbank; - required_ioport_array<8> m_keys; - required_ioport m_service; - - uint8_t m_color_bank = 0; - uint8_t m_gfx_bank = 0; - uint8_t m_adpcm_bank = 0; - int16_t m_adpcm_data = 0; - uint32_t m_adpcm_sptr = 0; - uint32_t m_adpcm_eptr = 0; - iox_t m_iox; - - // common - uint8_t vox_status_r(); - uint8_t iox_mux_r(); - uint8_t iox_status_r(); - void iox_command_w(uint8_t data); - void iox_data_w(uint8_t data); - void adpcm_int(int state); - - // mjuugi - void mjyuugi_flags_w(uint16_t data); - void mjyuugi_adpcm_bank_w(uint16_t data); - uint8_t mjyuugi_irq2_ack_r(address_space &space); - uint8_t mjyuugi_irq4_ack_r(address_space &space); - - // rmgoldyh - void rmgoldyh_rombank_w(uint8_t data); - - // srmp2 - void srmp2_irq2_ack_w(uint8_t data); - void srmp2_irq4_ack_w(uint8_t data); - void srmp2_flags_w(uint16_t data); - void adpcm_code_w(uint8_t data); - - // srmp3 - void srmp3_rombank_w(uint8_t data); - void srmp3_flags_w(uint8_t data); - void srmp3_irq_ack_w(uint8_t data); - - virtual void machine_start() override; - DECLARE_MACHINE_START(srmp2); - void srmp2_palette(palette_device &palette) const; - DECLARE_MACHINE_START(srmp3); - void srmp3_palette(palette_device &palette) const; - DECLARE_MACHINE_START(rmgoldyh); - DECLARE_MACHINE_START(mjyuugi); - - uint32_t screen_update_srmp2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - uint32_t screen_update_srmp3(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - X1_001_SPRITE_GFXBANK_CB_MEMBER(srmp3_gfxbank_callback); - - uint8_t iox_key_matrix_calc(uint8_t p_side); - - void mjyuugi_map(address_map &map); - void rmgoldyh_io_map(address_map &map); - void rmgoldyh_map(address_map &map); - void srmp2_map(address_map &map); - void srmp3_io_map(address_map &map); - void srmp3_map(address_map &map); -}; - -#endif // MAME_SETA_SRMP2_H diff --git a/src/mame/seta/srmp2_v.cpp b/src/mame/seta/srmp2_v.cpp deleted file mode 100644 index 6f9046654f2..00000000000 --- a/src/mame/seta/srmp2_v.cpp +++ /dev/null @@ -1,56 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Yochizo, Takahiro Nogi -/*************************************************************************** - -Functions to emulate the video hardware of the machine. - -***************************************************************************/ - - -#include "emu.h" -#include "srmp2.h" - -void srmp2_state::srmp2_palette(palette_device &palette) const -{ - uint8_t const *const color_prom = memregion("proms")->base(); - for (int i = 0; i < palette.entries(); i++) - { - int const col = (color_prom[i] << 8) + color_prom[i + palette.entries()]; - palette.set_pen_color(i ^ 0x0f, pal5bit(col >> 10), pal5bit(col >> 5), pal5bit(col >> 0)); - } -} - - -void srmp2_state::srmp3_palette(palette_device &palette) const -{ - uint8_t const *const color_prom = memregion("proms")->base(); - for (int i = 0; i < palette.entries(); i++) - { - int const col = (color_prom[i] << 8) + color_prom[i + palette.entries()]; - palette.set_pen_color(i,pal5bit(col >> 10), pal5bit(col >> 5), pal5bit(col >> 0)); - } -} - -X1_001_SPRITE_GFXBANK_CB_MEMBER(srmp2_state::srmp3_gfxbank_callback) -{ - return (code & 0x3fff) + ((code & 0x2000) ? (m_gfx_bank<<13) : 0); -} - - -uint32_t srmp2_state::screen_update_srmp2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - bitmap.fill(0x1ff, cliprect); - - m_spritegen->set_colorbase(m_color_bank<<5); - - m_spritegen->draw_sprites(screen,bitmap,cliprect,0x1000); - return 0; -} - -uint32_t srmp2_state::screen_update_srmp3(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - bitmap.fill(0x1f0, cliprect); - - m_spritegen->draw_sprites(screen,bitmap,cliprect,0x1000); - return 0; -}