summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author cam900 <dbtlrchl@naver.com>2019-01-17 19:52:55 +0900
committer cam900 <dbtlrchl@naver.com>2019-01-17 19:52:55 +0900
commit0d5e4f03b703665ddee4fb8196d7b5bc8951ee05 (patch)
treea385d52d730b005f51cf57ea863ca6cd5ee1cb85
parentdf07c7bb01ac17931ed88052ebf49bebd5d88f44 (diff)
homerun.cpp : Cleanups / Updates
Use update_partial/tilemap mark_all_dirty when only GFX bank is changed, Fix namings, Use palette decoder for color Move video related save_item into video_start, Reduce unnecessary lines, Fix reset behavior, Reduce runtime tag lookups, Simplified gfxdecodes, Bankswitched areas, Fix spacings
-rw-r--r--src/mame/drivers/homerun.cpp88
-rw-r--r--src/mame/includes/homerun.h55
-rw-r--r--src/mame/video/homerun.cpp112
3 files changed, 129 insertions, 126 deletions
diff --git a/src/mame/drivers/homerun.cpp b/src/mame/drivers/homerun.cpp
index 83128368eaa..9ced0870472 100644
--- a/src/mame/drivers/homerun.cpp
+++ b/src/mame/drivers/homerun.cpp
@@ -66,7 +66,7 @@ Notes:
***************************************************************************/
-WRITE8_MEMBER(homerun_state::homerun_control_w)
+void homerun_state::control_w(u8 data)
{
// d0, d1: somehow related to port $40?
@@ -95,7 +95,7 @@ WRITE8_MEMBER(homerun_state::homerun_control_w)
m_control = data;
}
-WRITE8_MEMBER(homerun_state::homerun_d7756_sample_w)
+void homerun_state::d7756_sample_w(u8 data)
{
m_sample = data;
@@ -103,21 +103,21 @@ WRITE8_MEMBER(homerun_state::homerun_d7756_sample_w)
m_d7756->port_w(data);
}
-void homerun_state::homerun_memmap(address_map &map)
+void homerun_state::mem_map(address_map &map)
{
map(0x0000, 0x3fff).rom();
- map(0x4000, 0x7fff).bankr("bank1");
- map(0x8000, 0x9fff).ram().w(FUNC(homerun_state::homerun_videoram_w)).share("videoram");
+ map(0x4000, 0x7fff).bankr("mainbank");
+ map(0x8000, 0x9fff).ram().w(FUNC(homerun_state::videoram_w)).share("videoram");
map(0xa000, 0xa0ff).ram().share("spriteram");
- map(0xb000, 0xb03f).ram().w(FUNC(homerun_state::homerun_color_w)).share("colorram");
+ map(0xb000, 0xb03f).ram().w(m_palette, FUNC(palette_device::write8)).share("palette");
map(0xc000, 0xdfff).ram();
}
-void homerun_state::homerun_iomap(address_map &map)
+void homerun_state::io_map(address_map &map)
{
map.global_mask(0xff);
- map(0x10, 0x10).w(FUNC(homerun_state::homerun_d7756_sample_w));
- map(0x20, 0x20).w(FUNC(homerun_state::homerun_control_w));
+ map(0x10, 0x10).w(FUNC(homerun_state::d7756_sample_w));
+ map(0x20, 0x20).w(FUNC(homerun_state::control_w));
map(0x30, 0x33).rw("ppi8255", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x40, 0x40).portr("IN0");
map(0x50, 0x50).portr("IN2");
@@ -152,7 +152,7 @@ CUSTOM_INPUT_MEMBER(homerun_state::ganjaja_hopper_status_r)
static INPUT_PORTS_START( homerun )
PORT_START("IN0")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, homerun_state, homerun_sprite0_r, nullptr)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, homerun_state, sprite0_r, nullptr)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, homerun_state, homerun_d7756_busy_r, nullptr)
PORT_BIT( 0x37, IP_ACTIVE_HIGH, IPT_UNKNOWN )
@@ -189,7 +189,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( dynashot )
PORT_START("IN0")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, homerun_state, homerun_sprite0_r, nullptr)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, homerun_state, sprite0_r, nullptr)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) // doesn't have d7756
PORT_BIT( 0x37, IP_ACTIVE_HIGH, IPT_UNKNOWN )
@@ -227,7 +227,7 @@ static INPUT_PORTS_START( ganjaja )
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // ?
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, homerun_state, homerun_sprite0_r, nullptr)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, homerun_state, sprite0_r, nullptr)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, homerun_state, ganjaja_d7756_busy_r, nullptr)
PORT_BIT( 0x36, IP_ACTIVE_HIGH, IPT_UNKNOWN )
@@ -301,8 +301,8 @@ static const gfx_layout gfxlayout =
RGN_FRAC(1,1),
2,
{ 8*8,0},
- { 0, 1, 2, 3, 4, 5, 6, 7},
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8},
+ { STEP8(0,1) },
+ { STEP8(0,8) },
8*8*2
};
@@ -311,15 +311,15 @@ static const gfx_layout spritelayout =
16,16,
RGN_FRAC(1,1),
2,
- { 8*8,0},
- { 0, 1, 2, 3, 4, 5, 6, 7,0+8*8*2,1+8*8*2,2+8*8*2,3+8*8*2,4+8*8*2,5+8*8*2,6+8*8*2,7+8*8*2},
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 0*8+2*8*8*2,1*8+2*8*8*2,2*8+2*8*8*2,3*8+2*8*8*2,4*8+2*8*8*2,5*8+2*8*8*2,6*8+2*8*8*2,7*8+2*8*8*2},
+ { 8*8,0 },
+ { STEP8(0,1), STEP8(8*8*2,1) },
+ { STEP8(0,8), STEP8(8*8*2*2,8) },
8*8*2*4
};
static GFXDECODE_START( gfx_homerun )
- GFXDECODE_ENTRY( "gfx1", 0, gfxlayout, 0, 16 )
- GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 0, 16 )
+ GFXDECODE_ENTRY( "gfx1", 0, gfxlayout, 0, 16 )
+ GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 0, 16 )
GFXDECODE_END
@@ -327,23 +327,19 @@ GFXDECODE_END
void homerun_state::machine_start()
{
- uint8_t *ROM = memregion("maincpu")->base();
+ u8 *ROM = memregion("maincpu")->base();
- membank("bank1")->configure_entry(0, &ROM[0x00000]);
- membank("bank1")->configure_entries(1, 7, &ROM[0x10000], 0x4000);
+ m_mainbank->configure_entries(0, 8, &ROM[0x00000], 0x4000);
save_item(NAME(m_control));
save_item(NAME(m_sample));
- save_item(NAME(m_gfx_ctrl));
- save_item(NAME(m_scrolly));
- save_item(NAME(m_scrollx));
}
void homerun_state::machine_reset()
{
- m_control = 0;
- m_sample = 0;
- m_gfx_ctrl = 0;
+ control_w(0);
+ d7756_sample_w(0);
+ banking_w(0);
m_scrolly = 0;
m_scrollx = 0;
}
@@ -354,30 +350,30 @@ void homerun_state::dynashot(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(20'000'000)/4);
- m_maincpu->set_addrmap(AS_PROGRAM, &homerun_state::homerun_memmap);
- m_maincpu->set_addrmap(AS_IO, &homerun_state::homerun_iomap);
+ m_maincpu->set_addrmap(AS_PROGRAM, &homerun_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &homerun_state::io_map);
m_maincpu->set_vblank_int("screen", FUNC(homerun_state::irq0_line_hold));
i8255_device &ppi(I8255A(config, "ppi8255"));
- ppi.out_pa_callback().set(FUNC(homerun_state::homerun_scrollhi_w));
- ppi.out_pb_callback().set(FUNC(homerun_state::homerun_scrolly_w));
- ppi.out_pc_callback().set(FUNC(homerun_state::homerun_scrollx_w));
+ ppi.out_pa_callback().set(FUNC(homerun_state::scrollhi_w));
+ ppi.out_pb_callback().set(FUNC(homerun_state::scrolly_w));
+ ppi.out_pc_callback().set(FUNC(homerun_state::scrollx_w));
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_raw(XTAL(20'000'000)/4,328,0,256,253,0,240);
- m_screen->set_screen_update(FUNC(homerun_state::screen_update_homerun));
+ m_screen->set_screen_update(FUNC(homerun_state::screen_update));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_homerun);
- PALETTE(config, m_palette).set_entries(16*4);
+ PALETTE(config, m_palette).set_format(1, &homerun_state::homerun_RGB332, 16*4);
/* sound hardware */
SPEAKER(config, "mono").front_center();
ym2203_device &ymsnd(YM2203(config, "ymsnd", XTAL(20'000'000)/8));
ymsnd.port_a_read_callback().set_ioport("DSW");
- ymsnd.port_b_write_callback().set(FUNC(homerun_state::homerun_banking_w));
+ ymsnd.port_b_write_callback().set(FUNC(homerun_state::banking_w));
ymsnd.add_route(ALL_OUTPUTS, "mono", 0.50);
}
@@ -412,9 +408,8 @@ void homerun_state::ganjaja(machine_config &config)
/**************************************************************************/
ROM_START( homerun )
- ROM_REGION( 0x30000, "maincpu", 0 )
- ROM_LOAD( "homerun.ic43", 0x00000, 0x04000, CRC(e759e476) SHA1(ad4f356ff26209033320a3e6353e4d4d9beb59c1) )
- ROM_CONTINUE( 0x10000, 0x1c000)
+ ROM_REGION( 0x20000, "maincpu", 0 )
+ ROM_LOAD( "homerun.ic43", 0x00000, 0x20000, CRC(e759e476) SHA1(ad4f356ff26209033320a3e6353e4d4d9beb59c1) )
ROM_REGION( 0x10000, "gfx1", 0 )
ROM_LOAD( "homerun.ic60", 0x00000, 0x10000, CRC(69a720d1) SHA1(0f0a4877578f358e9e829ece8c31e23f01adcf83) )
@@ -427,9 +422,8 @@ ROM_START( homerun )
ROM_END
ROM_START( nhomerun )
- ROM_REGION( 0x30000, "maincpu", 0 )
- ROM_LOAD( "1.ic43", 0x00000, 0x04000, CRC(aed96d6d) SHA1(5cb3932f4cfa3f6c0134ac20a1747c562db31a65) )
- ROM_CONTINUE( 0x10000, 0x1c000)
+ ROM_REGION( 0x20000, "maincpu", 0 )
+ ROM_LOAD( "1.ic43", 0x00000, 0x20000, CRC(aed96d6d) SHA1(5cb3932f4cfa3f6c0134ac20a1747c562db31a65) )
ROM_REGION( 0x10000, "gfx1", 0 )
ROM_LOAD( "3.ic60", 0x00000, 0x10000, CRC(69a720d1) SHA1(0f0a4877578f358e9e829ece8c31e23f01adcf83) )
@@ -442,9 +436,8 @@ ROM_START( nhomerun )
ROM_END
ROM_START( dynashot )
- ROM_REGION( 0x30000, "maincpu", 0 )
- ROM_LOAD( "1.ic43", 0x00000, 0x04000, CRC(bf3c9586) SHA1(439effbda305f5fa265e5897c81dc1447e5d867d) )
- ROM_CONTINUE( 0x10000, 0x1c000)
+ ROM_REGION( 0x20000, "maincpu", 0 )
+ ROM_LOAD( "1.ic43", 0x00000, 0x20000, CRC(bf3c9586) SHA1(439effbda305f5fa265e5897c81dc1447e5d867d) )
ROM_REGION( 0x10000, "gfx1", 0 )
ROM_LOAD( "3.ic60", 0x00000, 0x10000, CRC(77d6a608) SHA1(a31ff343a5d4d6f20301c030ecc2e252149bcf9d) )
@@ -455,9 +448,8 @@ ROM_END
ROM_START( ganjaja )
- ROM_REGION( 0x30000, "maincpu", 0 )
- ROM_LOAD( "1.ic43", 0x00000, 0x04000, CRC(dad57543) SHA1(dbd8b5cee33756ee5e3c41bf84c0f7141d3466dc) )
- ROM_CONTINUE( 0x10000, 0x1c000)
+ ROM_REGION( 0x20000, "maincpu", 0 )
+ ROM_LOAD( "1.ic43", 0x00000, 0x20000, CRC(dad57543) SHA1(dbd8b5cee33756ee5e3c41bf84c0f7141d3466dc) )
ROM_REGION( 0x10000, "gfx1", 0 )
ROM_LOAD( "ic60", 0x00000, 0x10000, CRC(855f6b28) SHA1(386411e88cf9bed54fe2073f0828d579cb1d04ee) )
diff --git a/src/mame/includes/homerun.h b/src/mame/includes/homerun.h
index 9df6781da45..4bddc7a73bc 100644
--- a/src/mame/includes/homerun.h
+++ b/src/mame/includes/homerun.h
@@ -14,62 +14,65 @@
class homerun_state : public driver_device
{
public:
- homerun_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
+ homerun_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_videoram(*this, "videoram"),
m_spriteram(*this, "spriteram"),
- m_colorram(*this, "colorram"),
m_d7756(*this, "d7756"),
m_samples(*this, "samples"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
- m_palette(*this, "palette")
+ m_palette(*this, "palette"),
+ m_mainbank(*this, "mainbank")
{ }
void ganjaja(machine_config &config);
void dynashot(machine_config &config);
void homerun(machine_config &config);
- DECLARE_CUSTOM_INPUT_MEMBER(homerun_sprite0_r);
+ DECLARE_CUSTOM_INPUT_MEMBER(sprite0_r);
DECLARE_CUSTOM_INPUT_MEMBER(homerun_d7756_busy_r);
DECLARE_CUSTOM_INPUT_MEMBER(ganjaja_d7756_busy_r);
DECLARE_CUSTOM_INPUT_MEMBER(ganjaja_hopper_status_r);
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+ virtual void video_start() override;
+
private:
required_device<cpu_device> m_maincpu;
- required_shared_ptr<uint8_t> m_videoram;
- required_shared_ptr<uint8_t> m_spriteram;
- required_shared_ptr<uint8_t> m_colorram;
+ required_shared_ptr<u8> m_videoram;
+ required_shared_ptr<u8> m_spriteram;
optional_device<upd7756_device> m_d7756;
optional_device<samples_device> m_samples;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
- uint8_t m_control;
- uint8_t m_sample;
+ required_memory_bank m_mainbank;
+
+ u8 m_control;
+ u8 m_sample;
tilemap_t *m_tilemap;
int m_gfx_ctrl;
int m_scrollx;
int m_scrolly;
- DECLARE_WRITE8_MEMBER(homerun_control_w);
- DECLARE_WRITE8_MEMBER(homerun_d7756_sample_w);
- DECLARE_WRITE8_MEMBER(homerun_videoram_w);
- DECLARE_WRITE8_MEMBER(homerun_color_w);
- DECLARE_WRITE8_MEMBER(homerun_scrollhi_w);
- DECLARE_WRITE8_MEMBER(homerun_scrolly_w);
- DECLARE_WRITE8_MEMBER(homerun_scrollx_w);
+ void control_w(u8 data);
+ void d7756_sample_w(u8 data);
+ DECLARE_WRITE8_MEMBER(videoram_w);
+ DECLARE_WRITE8_MEMBER(scrollhi_w);
+ DECLARE_WRITE8_MEMBER(scrolly_w);
+ DECLARE_WRITE8_MEMBER(scrollx_w);
- TILE_GET_INFO_MEMBER(get_homerun_tile_info);
- virtual void machine_start() override;
- virtual void machine_reset() override;
- virtual void video_start() override;
- uint32_t screen_update_homerun(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- DECLARE_WRITE8_MEMBER(homerun_banking_w);
- void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
- void homerun_iomap(address_map &map);
- void homerun_memmap(address_map &map);
+ static rgb_t homerun_RGB332(u32 raw);
+ TILE_GET_INFO_MEMBER(get_tile_info);
+ u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ void banking_w(u8 data);
+ void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
+ void io_map(address_map &map);
+ void mem_map(address_map &map);
};
diff --git a/src/mame/video/homerun.cpp b/src/mame/video/homerun.cpp
index 3bb2660b868..f376ec0290d 100644
--- a/src/mame/video/homerun.cpp
+++ b/src/mame/video/homerun.cpp
@@ -12,13 +12,13 @@
/**************************************************************************/
-CUSTOM_INPUT_MEMBER(homerun_state::homerun_sprite0_r)
+CUSTOM_INPUT_MEMBER(homerun_state::sprite0_r)
{
// sprite-0 vs background collision status, similar to NES
return (m_screen->vpos() > (m_spriteram[0] - 16 + 1)) ? 1 : 0;
}
-WRITE8_MEMBER(homerun_state::homerun_scrollhi_w)
+WRITE8_MEMBER(homerun_state::scrollhi_w)
{
// d0: scroll y high bit
// d1: scroll x high bit
@@ -27,40 +27,49 @@ WRITE8_MEMBER(homerun_state::homerun_scrollhi_w)
m_scrollx = (m_scrollx & 0xff) | (data << 7 & 0x100);
}
-WRITE8_MEMBER(homerun_state::homerun_scrolly_w)
+WRITE8_MEMBER(homerun_state::scrolly_w)
{
m_scrolly = (m_scrolly & 0xff00) | data;
}
-WRITE8_MEMBER(homerun_state::homerun_scrollx_w)
+WRITE8_MEMBER(homerun_state::scrollx_w)
{
m_scrollx = (m_scrollx & 0xff00) | data;
}
-WRITE8_MEMBER(homerun_state::homerun_banking_w)
+void homerun_state::banking_w(u8 data)
{
- // games do mid-screen gfx bank switching
- int vpos = m_screen->vpos();
- m_screen->update_partial(vpos);
-
- // d0-d1: gfx bank
- // d2-d4: ?
- // d5-d7: prg bank
- m_gfx_ctrl = data;
- m_tilemap->mark_all_dirty();
- membank("bank1")->set_entry(data >> 5 & 7);
+ u8 const old = m_gfx_ctrl;
+ if (old ^ data)
+ {
+ if ((old ^ data) & 3)
+ {
+ // games do mid-screen gfx bank switching
+ int vpos = m_screen->vpos();
+ m_screen->update_partial(vpos);
+ }
+
+ // d0-d1: gfx bank
+ // d2-d4: ?
+ // d5-d7: prg bank
+ m_gfx_ctrl = data;
+ if ((old ^ m_gfx_ctrl) & 1)
+ m_tilemap->mark_all_dirty();
+
+ if ((old ^ m_gfx_ctrl) >> 5 & 7)
+ m_mainbank->set_entry(m_gfx_ctrl >> 5 & 7);
+
+ }
}
-WRITE8_MEMBER(homerun_state::homerun_videoram_w)
+WRITE8_MEMBER(homerun_state::videoram_w)
{
m_videoram[offset] = data;
m_tilemap->mark_tile_dirty(offset & 0xfff);
}
-WRITE8_MEMBER(homerun_state::homerun_color_w)
+rgb_t homerun_state::homerun_RGB332(u32 raw)
{
- m_colorram[offset] = data;
-
/* from PCB photo:
bit 7: 470 ohm resistor \
bit 6: 220 ohm resistor - --> 470 ohm resistor --> blue
@@ -73,32 +82,30 @@ WRITE8_MEMBER(homerun_state::homerun_color_w)
*/
// let's implement it the old fashioned way until it's found out how exactly the resnet is hooked up
- int r, g, b;
- int bit0, bit1, bit2;
-
- bit0 = (data >> 0) & 0x01;
- bit1 = (data >> 1) & 0x01;
- bit2 = (data >> 2) & 0x01;
- r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
- bit0 = (data >> 3) & 0x01;
- bit1 = (data >> 4) & 0x01;
- bit2 = (data >> 5) & 0x01;
- g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
+ u8 bit0, bit1, bit2;
+
+ bit0 = (raw >> 0) & 0x01;
+ bit1 = (raw >> 1) & 0x01;
+ bit2 = (raw >> 2) & 0x01;
+ int r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
+ bit0 = (raw >> 3) & 0x01;
+ bit1 = (raw >> 4) & 0x01;
+ bit2 = (raw >> 5) & 0x01;
+ int g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
bit0 = 0;
- bit1 = (data >> 6) & 0x01;
- bit2 = (data >> 7) & 0x01;
- b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
+ bit1 = (raw >> 6) & 0x01;
+ bit2 = (raw >> 7) & 0x01;
+ int b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
- m_palette->set_pen_color(offset, rgb_t(r,g,b));
+ return rgb_t(r, g, b);
}
-
/**************************************************************************/
-TILE_GET_INFO_MEMBER(homerun_state::get_homerun_tile_info)
+TILE_GET_INFO_MEMBER(homerun_state::get_tile_info)
{
- int tileno = (m_videoram[tile_index]) | ((m_videoram[tile_index | 0x1000] & 0x38) << 5) | ((m_gfx_ctrl & 1) << 11);
- int palno = (m_videoram[tile_index | 0x1000] & 0x07);
+ u32 const tileno = (m_videoram[tile_index]) | ((m_videoram[tile_index | 0x1000] & 0x38) << 5) | ((m_gfx_ctrl & 1) << 11);
+ u16 const palno = (m_videoram[tile_index | 0x1000] & 0x07);
SET_TILE_INFO_MEMBER(0, tileno, palno, 0);
}
@@ -106,26 +113,27 @@ TILE_GET_INFO_MEMBER(homerun_state::get_homerun_tile_info)
void homerun_state::video_start()
{
- m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(homerun_state::get_homerun_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
+ m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(homerun_state::get_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
+
+ save_item(NAME(m_gfx_ctrl));
+ save_item(NAME(m_scrolly));
+ save_item(NAME(m_scrollx));
}
-void homerun_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
+void homerun_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- uint8_t *spriteram = m_spriteram;
- int offs;
-
- for (offs = m_spriteram.bytes() - 4; offs >= 0; offs -= 4)
+ for (int offs = m_spriteram.bytes() - 4; offs >= 0; offs -= 4)
{
- if (spriteram[offs + 0] == 0)
+ if (m_spriteram[offs + 0] == 0)
continue;
- int sy = spriteram[offs + 0] - 16 + 1;
- int sx = spriteram[offs + 3];
- int code = (spriteram[offs + 1]) | ((spriteram[offs + 2] & 0x8) << 5) | ((m_gfx_ctrl & 3) << 9);
- int color = (spriteram[offs + 2] & 0x07) | 8;
- int flipx = (spriteram[offs + 2] & 0x40) >> 6;
- int flipy = (spriteram[offs + 2] & 0x80) >> 7;
+ int const sy = m_spriteram[offs + 0] - 16 + 1;
+ int const sx = m_spriteram[offs + 3];
+ u32 const code = (m_spriteram[offs + 1]) | ((m_spriteram[offs + 2] & 0x8) << 5) | ((m_gfx_ctrl & 3) << 9);
+ u32 const color = (m_spriteram[offs + 2] & 0x07) | 8;
+ bool const flipx = (m_spriteram[offs + 2] & 0x40) >> 6;
+ bool const flipy = (m_spriteram[offs + 2] & 0x80) >> 7;
if (sy >= 0)
{
@@ -137,7 +145,7 @@ void homerun_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprec
}
}
-uint32_t homerun_state::screen_update_homerun(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 homerun_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_tilemap->set_scrolly(0, m_scrolly);
m_tilemap->set_scrollx(0, m_scrollx);