summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author sasuke-arcade <58130089+sasuke-arcade@users.noreply.github.com>2021-04-23 08:40:22 +0900
committer GitHub <noreply@github.com>2021-04-23 01:40:22 +0200
commite5ae9d5b2075db498fda4844e3c9104984993b1a (patch)
tree3ec9ba6b1a51e7af8647cca753190b36f5fe4e41 /src
parent50e24c2a1ba7f74495dce35ec1a7c918fb811d49 (diff)
stfight.cpp: Remove YM2203 frequency hack, and set prescaler at machine_start (#7992)
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/stfight.cpp14
-rw-r--r--src/mame/includes/stfight.h6
-rw-r--r--src/mame/machine/stfight.cpp4
3 files changed, 16 insertions, 8 deletions
diff --git a/src/mame/drivers/stfight.cpp b/src/mame/drivers/stfight.cpp
index 22ea429237d..974ddace357 100644
--- a/src/mame/drivers/stfight.cpp
+++ b/src/mame/drivers/stfight.cpp
@@ -245,11 +245,10 @@ conventional RAM. See the memory map for sprite data format.
TODO:
- handle transparency in text layer properly (how?)
- second bank of sf02 is this used? (probably NOT)
-- stfight/empcity YM2203s should be clocked at 1.5MHz but this results in
- the sound and music being 1/3 of the pitch they should be. The game never
- writes the YM2203s' divider registers yet other games (e.g. Lock-On)
- suggest the default values are correct.
- cshootert however, sounds too high-pitched at 1.5MHz*3.
+- empcity/stfight never writes the YM2203s' divider registers but it expects
+ 0x2f, there's a workaround for it in machine_start
+- empcity/stfight has an NMI handler, but it's not hooked up in MAME, missing
+ comms somewhere?
- Each version of empcity/stfight has a different protection code stored in the
MCU (at $1D2) so each 68705 will need to be dumped.
We currently use hacked versions of the empcityu MCU for each different set.
@@ -483,14 +482,13 @@ void stfight_state::stfight_base(machine_config &config)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- // YM2203_PITCH_HACK - These should be clocked at 1.5Mhz (see TODO list)
- ym2203_device &ym1(YM2203(config, "ym1", 12_MHz_XTAL / 8 * 3));
+ ym2203_device &ym1(YM2203(config, m_ym1, 12_MHz_XTAL / 8));
ym1.add_route(0, "mono", 0.15);
ym1.add_route(1, "mono", 0.15);
ym1.add_route(2, "mono", 0.15);
ym1.add_route(3, "mono", 0.10);
- ym2203_device &ym2(YM2203(config, "ym2", 12_MHz_XTAL / 8 * 3));
+ ym2203_device &ym2(YM2203(config, m_ym2, 12_MHz_XTAL / 8));
ym2.add_route(0, "mono", 0.15);
ym2.add_route(1, "mono", 0.15);
ym2.add_route(2, "mono", 0.15);
diff --git a/src/mame/includes/stfight.h b/src/mame/includes/stfight.h
index a2fb44092bc..4f60c694f94 100644
--- a/src/mame/includes/stfight.h
+++ b/src/mame/includes/stfight.h
@@ -6,6 +6,7 @@
#pragma once
#include "cpu/m6805/m68705.h"
+#include "sound/ym2203.h"
#include "sound/msm5205.h"
#include "video/stfight_dev.h"
#include "video/airraid_dev.h"
@@ -20,6 +21,8 @@ public:
, m_audiocpu(*this, "audiocpu")
, m_mcu(*this, "mcu")
, m_msm(*this, "msm")
+ , m_ym1(*this, "ym1")
+ , m_ym2(*this, "ym2")
, m_main_bank(*this, "mainbank")
, m_samples(*this, "adpcm")
, m_decrypted_opcodes(*this, "decrypted_opcodes")
@@ -88,6 +91,9 @@ private:
required_device<m68705p5_device> m_mcu;
required_device<msm5205_device> m_msm;
+ required_device<ym2203_device> m_ym1;
+ required_device<ym2203_device> m_ym2;
+
required_memory_bank m_main_bank;
required_region_ptr<uint8_t> m_samples;
diff --git a/src/mame/machine/stfight.cpp b/src/mame/machine/stfight.cpp
index 9869440ff42..ab2f187e008 100644
--- a/src/mame/machine/stfight.cpp
+++ b/src/mame/machine/stfight.cpp
@@ -80,6 +80,10 @@ void stfight_state::machine_start()
m_int1_timer = timer_alloc(TIMER_STFIGHT_INTERRUPT_1);
+ // Set clock prescaler FM:1/2 PSG:1/1
+ m_ym1->write(0, 0x2f);
+ m_ym2->write(0, 0x2f);
+
save_item(NAME(m_coin_state));
save_item(NAME(m_fm_data));