summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2020-11-26 14:01:37 +0100
committer Olivier Galibert <galibert@pobox.com>2020-11-26 14:01:37 +0100
commitfe09cd81709ac474325030b4fbb403709709fcf0 (patch)
tree83824e452cf1b96440f3ef48e419ea3e7b4d59d8
parentd8eef5bfa2a198b2f48e4f7b8815fa61e2bf8e0b (diff)
Williams: set the videoram as a single 48k block (which it is), derive everything from it
-rw-r--r--src/mame/drivers/williams.cpp13
-rw-r--r--src/mame/includes/williams.h4
-rw-r--r--src/mame/video/williams.cpp10
3 files changed, 11 insertions, 16 deletions
diff --git a/src/mame/drivers/williams.cpp b/src/mame/drivers/williams.cpp
index 19bbc0c7b0d..2fbd5295b5a 100644
--- a/src/mame/drivers/williams.cpp
+++ b/src/mame/drivers/williams.cpp
@@ -554,8 +554,8 @@ void mayday_state::main_map(address_map &map)
void williams_state::base_map(address_map &map)
{
- map(0x0000, 0x8fff).bankr("mainbank").writeonly().share("videoram");
- map(0x9000, 0xbfff).ram();
+ map(0x0000, 0xbfff).ram().share("videoram");
+ map(0x0000, 0x8fff).bankr("mainbank");
map(0xc000, 0xc00f).mirror(0x03f0).writeonly().share("paletteram");
map(0xc804, 0xc807).mirror(0x00f0).rw(m_pia[0], FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0xc80c, 0xc80f).mirror(0x00f0).rw(m_pia[1], FUNC(pia6821_device::read), FUNC(pia6821_device::write));
@@ -625,12 +625,9 @@ void spdball_state::main_map(address_map &map)
void blaster_state::main_map(address_map &map)
{
- map(0x0000, 0x3fff).bankr("mainbank").writeonly().share("videoram");
- map(0x4000, 0x8fff).bankr("blaster_bankb").writeonly().share("bankb");
- map(0x9000, 0xbaff).ram();
- map(0xbb00, 0xbbff).ram().share("blaster_pal0");
- map(0xbc00, 0xbcff).ram().share("blaster_scan");
- map(0xbd00, 0xbfff).ram();
+ map(0x0000, 0xbfff).ram().share("videoram");
+ map(0x0000, 0x3fff).bankr("mainbank");
+ map(0x4000, 0x8fff).bankr("blaster_bankb");
map(0xc000, 0xc00f).mirror(0x03f0).writeonly().share("paletteram");
map(0xc804, 0xc807).mirror(0x00f0).rw(m_pia[0], FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0xc80c, 0xc80f).mirror(0x00f0).rw(m_pia[1], FUNC(pia6821_device::read), FUNC(pia6821_device::write));
diff --git a/src/mame/includes/williams.h b/src/mame/includes/williams.h
index 2054be06828..b86591f54f2 100644
--- a/src/mame/includes/williams.h
+++ b/src/mame/includes/williams.h
@@ -266,8 +266,6 @@ public:
blaster_state(const machine_config &mconfig, device_type type, const char *tag) :
williams_state(mconfig, type, tag),
m_soundcpu_b(*this, "soundcpu_b"),
- m_palette_0(*this, "blaster_pal0"),
- m_scanline_control(*this, "blaster_scan"),
m_bankb(*this, "blaster_bankb"),
m_muxa(*this, "mux_a"),
m_muxb(*this, "mux_b")
@@ -282,8 +280,6 @@ private:
virtual void driver_init() override;
optional_device<cpu_device> m_soundcpu_b;
- required_shared_ptr<uint8_t> m_palette_0;
- required_shared_ptr<uint8_t> m_scanline_control;
optional_memory_bank m_bankb;
required_device<ls157_x2_device> m_muxa;
optional_device<ls157_device> m_muxb;
diff --git a/src/mame/video/williams.cpp b/src/mame/video/williams.cpp
index 0ca0c180aad..4e879a20daa 100644
--- a/src/mame/video/williams.cpp
+++ b/src/mame/video/williams.cpp
@@ -234,6 +234,8 @@ uint32_t williams_state::screen_update(screen_device &screen, bitmap_rgb32 &bitm
uint32_t blaster_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
+ uint8_t *palette_0 = &m_videoram[0xbb00];
+ uint8_t *scanline_control = &m_videoram[0xbc00];
rgb_t pens[16];
/* precompute the palette */
@@ -242,18 +244,18 @@ uint32_t blaster_state::screen_update(screen_device &screen, bitmap_rgb32 &bitma
/* if we're blitting from the top, start with a 0 for color 0 */
if (cliprect.min_y == screen.visible_area().min_y || !(m_video_control & 1))
- m_color0 = m_palette->pen_color(m_palette_0[0] ^ 0xff);
+ m_color0 = m_palette->pen_color(palette_0[0] ^ 0xff);
/* loop over rows */
for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
{
- int erase_behind = m_video_control & m_scanline_control[y] & 2;
+ int erase_behind = m_video_control & scanline_control[y] & 2;
uint8_t *const source = &m_videoram[y];
uint32_t *const dest = &bitmap.pix(y);
/* latch a new color0 pen? */
- if (m_video_control & m_scanline_control[y] & 1)
- m_color0 = m_palette->pen_color(m_palette_0[y] ^ 0xff);
+ if (m_video_control & scanline_control[y] & 1)
+ m_color0 = m_palette->pen_color(palette_0[y] ^ 0xff);
/* loop over columns */
for (int x = cliprect.min_x & ~1; x <= cliprect.max_x; x += 2)