From ed645d1cd4e0d0dd5f1b68a5a845589aadf868eb Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Mon, 13 Jan 2014 17:15:53 +0000 Subject: [PATCH] Added music and save states to bmcbowl. [Osso] --- src/mame/drivers/bmcbowl.c | 32 +++++++++++++++++++------------- src/mame/includes/mystwarr.h | 2 ++ 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/mame/drivers/bmcbowl.c b/src/mame/drivers/bmcbowl.c index 8c5c38268c6..fe3d46f5112 100644 --- a/src/mame/drivers/bmcbowl.c +++ b/src/mame/drivers/bmcbowl.c @@ -33,7 +33,6 @@ BMC Bowling (c) 1994.05 BMC, Ltd TODO: - scroll (writes to $91800 and VIA port A - not used in game (only in test mode)) - - music - writes ($20-$30 bytes) to $93000-$93003 range - VIA 6522(ports) - Crt - interrupts @@ -106,6 +105,7 @@ Main board: #include "machine/nvram.h" #include "sound/ay8910.h" #include "sound/okim6295.h" +#include "sound/2413intf.h" #define NVRAM_HACK @@ -115,15 +115,17 @@ class bmcbowl_state : public driver_device public: bmcbowl_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), m_stats_ram(*this, "nvram", 16), m_vid1(*this, "vid1"), m_vid2(*this, "vid2"), - m_maincpu(*this, "maincpu") { } + m_colorram(*this, "colorram", 16) { } + required_device m_maincpu; optional_shared_ptr m_stats_ram; required_shared_ptr m_vid1; required_shared_ptr m_vid2; - UINT8 *m_bmc_colorram; + required_shared_ptr m_colorram; int m_clr_offset; int m_bmc_input; DECLARE_READ16_MEMBER(bmc_random_read); @@ -141,7 +143,6 @@ public: virtual void machine_reset(); virtual void video_start(); UINT32 screen_update_bmcbowl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - required_device m_maincpu; }; @@ -229,8 +230,8 @@ WRITE16_MEMBER(bmcbowl_state::bmc_RAMDAC_offset_w) WRITE16_MEMBER(bmcbowl_state::bmc_RAMDAC_color_w) { - m_bmc_colorram[m_clr_offset]=data; - palette_set_color_rgb(machine(),m_clr_offset/3,pal6bit(m_bmc_colorram[(m_clr_offset/3)*3]),pal6bit(m_bmc_colorram[(m_clr_offset/3)*3+1]),pal6bit(m_bmc_colorram[(m_clr_offset/3)*3+2])); + m_colorram[m_clr_offset]=data; + palette_set_color_rgb(machine(),m_clr_offset/3,pal6bit(m_colorram[(m_clr_offset/3)*3]),pal6bit(m_colorram[(m_clr_offset/3)*3+1]),pal6bit(m_colorram[(m_clr_offset/3)*3+2])); m_clr_offset=(m_clr_offset+1)%768; } @@ -322,8 +323,8 @@ void bmcbowl_state::machine_reset() static ADDRESS_MAP_START( bmcbowl_mem, AS_PROGRAM, 16, bmcbowl_state ) AM_RANGE(0x000000, 0x01ffff) AM_ROM - AM_RANGE(0x090000, 0x090001) AM_WRITE(bmc_RAMDAC_offset_w) - AM_RANGE(0x090002, 0x090003) AM_WRITE(bmc_RAMDAC_color_w) + AM_RANGE(0x090000, 0x090001) AM_WRITE(bmc_RAMDAC_offset_w) AM_SHARE("colorram") + AM_RANGE(0x090002, 0x090003) AM_WRITE(bmc_RAMDAC_color_w) AM_RANGE(0x090004, 0x090005) AM_WRITENOP//RAMDAC AM_RANGE(0x090800, 0x090803) AM_WRITENOP @@ -332,7 +333,7 @@ static ADDRESS_MAP_START( bmcbowl_mem, AS_PROGRAM, 16, bmcbowl_state ) AM_RANGE(0x092000, 0x09201f) AM_DEVREADWRITE8("via6522_0", via6522_device, read, write, 0x00ff) - AM_RANGE(0x093000, 0x093003) AM_WRITENOP // related to music + AM_RANGE(0x093000, 0x093003) AM_DEVWRITE8("ymsnd", ym2413_device, write, 0x00ff) AM_RANGE(0x092800, 0x092803) AM_DEVWRITE8("aysnd", ay8910_device, data_address_w, 0xff00) AM_RANGE(0x092802, 0x092803) AM_DEVREAD8("aysnd", ay8910_device, data_r, 0xff00) AM_RANGE(0x093802, 0x093803) AM_READ_PORT("IN0") @@ -469,7 +470,7 @@ static const ay8910_interface ay8910_config = static MACHINE_CONFIG_START( bmcbowl, bmcbowl_state ) - MCFG_CPU_ADD("maincpu", M68000, 21477270/2 ) + MCFG_CPU_ADD("maincpu", M68000, XTAL_21_4772MHz / 2 ) MCFG_CPU_PROGRAM_MAP(bmcbowl_mem) MCFG_CPU_VBLANK_INT_DRIVER("screen", bmcbowl_state, irq2_line_hold) @@ -485,8 +486,12 @@ static MACHINE_CONFIG_START( bmcbowl, bmcbowl_state ) MCFG_NVRAM_ADD_1FILL("nvram") MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + + MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_3_579545MHz ) // guessed chip type, clock not verified + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50) - MCFG_SOUND_ADD("aysnd", AY8910, 3579545/2) + MCFG_SOUND_ADD("aysnd", AY8910, XTAL_3_579545MHz / 2) MCFG_SOUND_CONFIG(ay8910_config) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50) @@ -524,7 +529,8 @@ ROM_END DRIVER_INIT_MEMBER(bmcbowl_state,bmcbowl) { - m_bmc_colorram = auto_alloc_array(machine(), UINT8, 768); + save_item(NAME(m_clr_offset)); + save_item(NAME(m_bmc_input)); } -GAME( 1994, bmcbowl, 0, bmcbowl, bmcbowl, bmcbowl_state, bmcbowl, ROT0, "BMC", "Konkyuu no Hoshi", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) +GAME( 1994, bmcbowl, 0, bmcbowl, bmcbowl, bmcbowl_state, bmcbowl, ROT0, "BMC", "Konkyuu no Hoshi", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE) diff --git a/src/mame/includes/mystwarr.h b/src/mame/includes/mystwarr.h index 3f08fd22e7e..9928083a968 100644 --- a/src/mame/includes/mystwarr.h +++ b/src/mame/includes/mystwarr.h @@ -13,6 +13,7 @@ public: m_k053252(*this, "k053252"), m_k056832(*this, "k056832"), m_k055673(*this, "k055673"), + m_k054338(*this, "k054338"), m_gx_workram(*this,"gx_workram"), m_spriteram(*this,"spriteram") { } @@ -21,6 +22,7 @@ public: required_device m_k053252; required_device m_k056832; required_device m_k055673; + required_device m_k054338; required_shared_ptr m_gx_workram; optional_shared_ptr m_spriteram;