summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2025-07-10 13:20:19 +0200
committer hap <happppp@users.noreply.github.com>2025-07-10 13:20:30 +0200
commit8453a22c0961f1ae958dd5438bbc9e413d89b0eb (patch)
treeaed282b1452ee820ee9796e82de80de6be3f3b37
parent404a49a4bfdef1e7a207803d27b0494a9a8534bf (diff)
sspeedr: fix sound regression, add screen raw params
-rw-r--r--src/mame/midway/sspeedr.cpp21
-rw-r--r--src/mame/midway/sspeedr.h4
-rw-r--r--src/mame/midway/sspeedr_v.cpp53
3 files changed, 30 insertions, 48 deletions
diff --git a/src/mame/midway/sspeedr.cpp b/src/mame/midway/sspeedr.cpp
index 73a90af6c0a..9aa306ab5f3 100644
--- a/src/mame/midway/sspeedr.cpp
+++ b/src/mame/midway/sspeedr.cpp
@@ -68,17 +68,12 @@ constexpr uint8_t ls48_map[16] =
void sspeedr_state::time_w(offs_t offset, uint8_t data)
{
- data = data & 15;
- m_digits[24 + offset] = ls48_map[data];
- m_led_time[offset] = data;
+ m_digits[24 + offset] = ls48_map[data & 0xf];
}
-
void sspeedr_state::score_w(offs_t offset, uint8_t data)
{
- data = ~data & 15;
- m_digits[offset] = ls48_map[data];
- m_led_score[offset] = data;
+ m_digits[offset] = ls48_map[~data & 0xf];
}
@@ -252,7 +247,7 @@ GFXDECODE_END
void sspeedr_state::sspeedr(machine_config &config)
{
// basic machine hardware
- Z80(config, m_maincpu, XTAL(19'968'000)/8);
+ Z80(config, m_maincpu, 19.968_MHz_XTAL / 8);
m_maincpu->set_addrmap(AS_PROGRAM, &sspeedr_state::prg_map);
m_maincpu->set_addrmap(AS_IO, &sspeedr_state::io_map);
m_maincpu->set_vblank_int("screen", FUNC(sspeedr_state::irq0_line_assert));
@@ -261,10 +256,7 @@ void sspeedr_state::sspeedr(machine_config &config)
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_refresh_hz(59.39);
- screen.set_vblank_time(ATTOSECONDS_IN_USEC(16 * 1000000 / 15680));
- screen.set_size(376, 256);
- screen.set_visarea(0, 375, 0, 247);
+ screen.set_raw(14.318181_MHz_XTAL / 2, 456, 0, 376, 264, 0, 248);
screen.set_screen_update(FUNC(sspeedr_state::screen_update));
screen.screen_vblank().set(FUNC(sspeedr_state::screen_vblank));
screen.set_palette(m_palette);
@@ -286,15 +278,14 @@ void sspeedr_state::sspeedr(machine_config &config)
NETLIST_LOGIC_INPUT(config, "sound_nl:hi_shift", "I_HI_SHIFT", 0);
NETLIST_LOGIC_INPUT(config, "sound_nl:lo_shift", "I_LO_SHIFT", 0);
NETLIST_LOGIC_INPUT(config, "sound_nl:boom", "I_BOOM", 0);
- NETLIST_LOGIC_INPUT(config, "sound_nl:engine_sound_off",
- "I_ENGINE_SOUND_OFF", 0);
+ NETLIST_LOGIC_INPUT(config, "sound_nl:engine_sound_off", "I_ENGINE_SOUND_OFF", 0);
NETLIST_LOGIC_INPUT(config, "sound_nl:noise_cr_1", "I_NOISE_CR_1", 0);
NETLIST_LOGIC_INPUT(config, "sound_nl:noise_cr_2", "I_NOISE_CR_2", 0);
NETLIST_LOGIC_INPUT(config, "sound_nl:silence", "I_SILENCE", 0);
// Audio output is from an LM3900 op-amp whose output has a
// peak-to-peak range of about 12 volts, centered on 6 volts.
- NETLIST_STREAM_OUTPUT(config, "sound_nl:cout0", 0, "OUTPUT").set_mult_offset(32767.0 / 6.0, -32767.0);
+ NETLIST_STREAM_OUTPUT(config, "sound_nl:cout0", 0, "OUTPUT").set_mult_offset(1.0 / 6.0, -1.0);
// Netlist volume-potentiometer interface
NETLIST_ANALOG_INPUT(config, "sound_nl:pot_master_vol", "R70.DIAL");
diff --git a/src/mame/midway/sspeedr.h b/src/mame/midway/sspeedr.h
index 561956677da..ea7e21fcc49 100644
--- a/src/mame/midway/sspeedr.h
+++ b/src/mame/midway/sspeedr.h
@@ -64,8 +64,6 @@ private:
void io_map(address_map &map) ATTR_COLD;
void prg_map(address_map &map) ATTR_COLD;
- uint8_t m_led_time[2]{};
- uint8_t m_led_score[24]{};
uint8_t m_toggle = 0;
uint16_t m_driver_horz = 0;
uint8_t m_driver_vert = 0;
@@ -77,7 +75,7 @@ private:
uint8_t m_track_vert[2]{};
uint8_t m_track_ice = 0;
- void draw_track(bitmap_ind16 &bitmap);
+ void draw_track(bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_drones(bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_driver(bitmap_ind16 &bitmap, const rectangle &cliprect);
required_device<cpu_device> m_maincpu;
diff --git a/src/mame/midway/sspeedr_v.cpp b/src/mame/midway/sspeedr_v.cpp
index a94099eca40..26384d38f49 100644
--- a/src/mame/midway/sspeedr_v.cpp
+++ b/src/mame/midway/sspeedr_v.cpp
@@ -82,9 +82,9 @@ void sspeedr_state::track_ice_w(uint8_t data)
}
-void sspeedr_state::draw_track(bitmap_ind16 &bitmap)
+void sspeedr_state::draw_track(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- for (int x = 0; x < 376; x++)
+ for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
{
unsigned counter_x = x + m_track_horz + 0x50;
@@ -111,11 +111,10 @@ void sspeedr_state::draw_track(bitmap_ind16 &bitmap)
counter_x -= 0x1c8;
}
- int y = 0;
+ int y = cliprect.min_y;
// upper landscape
-
- for (; y < m_track_vert[0]; y++)
+ for (; y < m_track_vert[0] && y <= cliprect.max_y; y++)
{
unsigned counter_y = y - m_track_vert[0];
@@ -126,24 +125,22 @@ void sspeedr_state::draw_track(bitmap_ind16 &bitmap)
if (counter_x & 2)
{
- bitmap.pix(y, x) = m_track[offset] / 16;
+ bitmap.pix(y, x) = m_track[offset] >> 4;
}
else
{
- bitmap.pix(y, x) = m_track[offset] % 16;
+ bitmap.pix(y, x) = m_track[offset] & 0xf;
}
}
// street
-
- for (; y < 128 + m_track_vert[1]; y++)
+ for (; y < 128 + m_track_vert[1] && y <= cliprect.max_y; y++)
{
bitmap.pix(y, x) = flag ? 15 : 0;
}
// lower landscape
-
- for (; y < 248; y++)
+ for (; y <= cliprect.max_y; y++)
{
unsigned counter_y = y - m_track_vert[1];
@@ -154,11 +151,11 @@ void sspeedr_state::draw_track(bitmap_ind16 &bitmap)
if (counter_x & 2)
{
- bitmap.pix(y, x) = m_track[offset] / 16;
+ bitmap.pix(y, x) = m_track[offset] >> 4;
}
else
{
- bitmap.pix(y, x) = m_track[offset] % 16;
+ bitmap.pix(y, x) = m_track[offset] & 0xf;
}
}
}
@@ -188,13 +185,12 @@ void sspeedr_state::draw_drones(bitmap_ind16 &bitmap, const rectangle &cliprect)
int y = 0xf0 - m_drones_vert[i >> 1];
-
- m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
- code[i] ^ m_toggle,
- 0,
- 0, 0,
- x,
- y, 0);
+ m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
+ code[i] ^ m_toggle,
+ 0,
+ 0, 0,
+ x,
+ y, 0);
}
}
@@ -215,13 +211,12 @@ void sspeedr_state::draw_driver(bitmap_ind16 &bitmap, const rectangle &cliprect)
int y = 0xf0 - m_driver_vert;
-
- m_gfxdecode->gfx(0)->transpen(bitmap,cliprect,
- m_driver_pic,
- 0,
- 0, 0,
- x,
- y, 0);
+ m_gfxdecode->gfx(0)->transpen(bitmap,cliprect,
+ m_driver_pic,
+ 0,
+ 0, 0,
+ x,
+ y, 0);
}
@@ -229,8 +224,6 @@ void sspeedr_state::video_start()
{
m_toggle = 0;
- save_item(NAME(m_led_time));
- save_item(NAME(m_led_score));
save_item(NAME(m_toggle));
save_item(NAME(m_driver_horz));
save_item(NAME(m_driver_vert));
@@ -246,7 +239,7 @@ void sspeedr_state::video_start()
uint32_t sspeedr_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- draw_track(bitmap);
+ draw_track(bitmap, cliprect);
draw_drones(bitmap, cliprect);
draw_driver(bitmap, cliprect);
return 0;