From 06587bad72d81a605d60f3f10601a97a13aa8738 Mon Sep 17 00:00:00 2001 From: cam900 Date: Thu, 23 May 2019 10:34:34 +0900 Subject: [PATCH] fcombat.cpp : Updates Simplify handlers, Reduce runtime tag lookups, Unnecessary lines, Fix namings, Spacings, Use shorter / correct type values --- src/mame/drivers/fcombat.cpp | 104 +++++++++++++++++------------------ src/mame/includes/fcombat.h | 41 ++++++++------ src/mame/video/fcombat.cpp | 41 ++++++-------- 3 files changed, 92 insertions(+), 94 deletions(-) diff --git a/src/mame/drivers/fcombat.cpp b/src/mame/drivers/fcombat.cpp index 6273f47083f..1afd5c16a75 100644 --- a/src/mame/drivers/fcombat.cpp +++ b/src/mame/drivers/fcombat.cpp @@ -48,9 +48,8 @@ INPUT_CHANGED_MEMBER(fcombat_state::coin_inserted) } - /* is it protection? */ -READ8_MEMBER(fcombat_state::fcombat_protection_r) +u8 fcombat_state::protection_r() { /* Must match ONE of these values after a "and $3E" intruction : @@ -64,26 +63,26 @@ READ8_MEMBER(fcombat_state::fcombat_protection_r) /* same as exerion again */ -READ8_MEMBER(fcombat_state::fcombat_port01_r) +u8 fcombat_state::port01_r() { /* the cocktail flip bit muxes between ports 0 and 1 */ - return ioport(m_cocktail_flip ? "IN1" : "IN0")->read(); + return m_io_in[m_cocktail_flip ? 1 : 0]->read(); } //bg scrolls -WRITE8_MEMBER(fcombat_state::e900_w) +void fcombat_state::e900_w(u8 data) { m_fcombat_sh = data; } -WRITE8_MEMBER(fcombat_state::ea00_w) +void fcombat_state::ea00_w(u8 data) { m_fcombat_sv = (m_fcombat_sv & 0xff00) | data; } -WRITE8_MEMBER(fcombat_state::eb00_w) +void fcombat_state::eb00_w(u8 data) { m_fcombat_sv = (m_fcombat_sv & 0xff) | (data << 8); } @@ -91,25 +90,25 @@ WRITE8_MEMBER(fcombat_state::eb00_w) // terrain info (ec00=x, ed00=y, return val in e300 -WRITE8_MEMBER(fcombat_state::ec00_w) +void fcombat_state::ec00_w(u8 data) { m_tx = data; } -WRITE8_MEMBER(fcombat_state::ed00_w) +void fcombat_state::ed00_w(u8 data) { m_ty = data; } -READ8_MEMBER(fcombat_state::e300_r) +u8 fcombat_state::e300_r() { - int wx = (m_tx + m_fcombat_sh) / 16; - int wy = (m_ty * 2 + m_fcombat_sv) / 16; + const int wx = (m_tx + m_fcombat_sh) / 16; + const int wy = (m_ty * 2 + m_fcombat_sv) / 16; - return memregion("user2")->base()[wx * 32 * 16 + wy]; + return m_user2_region[wx * 32 * 16 + wy]; } -WRITE8_MEMBER(fcombat_state::ee00_w) +void fcombat_state::ee00_w(u8 data) { } @@ -119,12 +118,12 @@ void fcombat_state::main_map(address_map &map) map(0xc000, 0xc7ff).ram(); map(0xd000, 0xd7ff).ram().share("videoram"); map(0xd800, 0xd8ff).ram().share("spriteram"); - map(0xe000, 0xe000).r(FUNC(fcombat_state::fcombat_port01_r)); + map(0xe000, 0xe000).r(FUNC(fcombat_state::port01_r)); map(0xe100, 0xe100).portr("DSW0"); map(0xe200, 0xe200).portr("DSW1"); map(0xe300, 0xe300).r(FUNC(fcombat_state::e300_r)); - map(0xe400, 0xe400).r(FUNC(fcombat_state::fcombat_protection_r)); // protection? - map(0xe800, 0xe800).w(FUNC(fcombat_state::fcombat_videoreg_w)); // at least bit 0 for flip screen and joystick input multiplexor + map(0xe400, 0xe400).r(FUNC(fcombat_state::protection_r)); // protection? + map(0xe800, 0xe800).w(FUNC(fcombat_state::videoreg_w)); // at least bit 0 for flip screen and joystick input multiplexor map(0xe900, 0xe900).w(FUNC(fcombat_state::e900_w)); map(0xea00, 0xea00).w(FUNC(fcombat_state::ea00_w)); map(0xeb00, 0xeb00).w(FUNC(fcombat_state::eb00_w)); @@ -149,7 +148,6 @@ void fcombat_state::audio_map(address_map &map) } - /************************************* * * Input ports @@ -228,24 +226,22 @@ static const gfx_layout charlayout = 8,8, RGN_FRAC(1,1), 2, - { 0, 4 }, - { 3, 2, 1, 0, 8+3, 8+2, 8+1, 8+0 }, - { 16*0, 16*1, 16*2, 16*3, 16*4, 16*5, 16*6, 16*7 }, + { STEP2(0,4) }, + { STEP4(3,-1), STEP4(4*2+3,-1) }, + { STEP8(0,4*4) }, 16*8 }; -/* 16 x 16 sprites -- requires reorganizing characters in init_exerion() */ +/* 16 x 16 sprites -- requires reorganizing characters in init_fcombat() */ static const gfx_layout spritelayout = { 16,16, RGN_FRAC(1,1), 2, - { 0, 4 }, - { 3, 2, 1, 0, 8+3, 8+2, 8+1, 8+0, - 16+3, 16+2, 16+1, 16+0, 24+3, 24+2, 24+1, 24+0 }, - { 32*0, 32*1, 32*2, 32*3, 32*4, 32*5, 32*6, 32*7, - 32*8, 32*9, 32*10, 32*11, 32*12, 32*13, 32*14, 32*15 }, + { STEP2(0,4) }, + { STEP4(3,-1), STEP4(4*2+3,-1), STEP4(4*4+3,-1), STEP4(4*6+3,-1) }, + { STEP16(0,4*8) }, 64*8 }; @@ -300,7 +296,7 @@ void fcombat_state::fcombat(machine_config &config) /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_raw(FCOMBAT_PIXEL_CLOCK, FCOMBAT_HTOTAL, FCOMBAT_HBEND, FCOMBAT_HBSTART, FCOMBAT_VTOTAL, FCOMBAT_VBEND, FCOMBAT_VBSTART); - screen.set_screen_update(FUNC(fcombat_state::screen_update_fcombat)); + screen.set_screen_update(FUNC(fcombat_state::screen_update)); screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_fcombat); @@ -327,23 +323,23 @@ void fcombat_state::fcombat(machine_config &config) void fcombat_state::init_fcombat() { /* allocate some temporary space */ - std::vector temp(0x10000); + std::vector temp(0x10000); /* make a temporary copy of the character data */ - uint8_t *src = &temp[0]; - uint8_t *dst = memregion("gfx1")->base(); - uint32_t length = memregion("gfx1")->bytes(); + u8 *src = &temp[0]; + u8 *dst = memregion("gfx1")->base(); + u32 length = memregion("gfx1")->bytes(); memcpy(src, dst, length); /* decode the characters */ /* the bits in the ROM are ordered: n8-n7 n6 n5 n4-v2 v1 v0 n3-n2 n1 n0 h2 */ /* we want them ordered like this: n8-n7 n6 n5 n4-n3 n2 n1 n0-v2 v1 v0 h2 */ - for (uint32_t oldaddr = 0; oldaddr < length; oldaddr++) + for (u32 oldaddr = 0; oldaddr < length; oldaddr++) { - uint32_t newaddr = ((oldaddr ) & 0x1f00) | /* keep n8-n4 */ - ((oldaddr << 3) & 0x00f0) | /* move n3-n0 */ - ((oldaddr >> 4) & 0x000e) | /* move v2-v0 */ - ((oldaddr ) & 0x0001); /* keep h2 */ + u32 newaddr = ((oldaddr ) & 0x1f00) | /* keep n8-n4 */ + ((oldaddr << 3) & 0x00f0) | /* move n3-n0 */ + ((oldaddr >> 4) & 0x000e) | /* move v2-v0 */ + ((oldaddr ) & 0x0001); /* keep h2 */ dst[newaddr] = src[oldaddr]; } @@ -357,13 +353,13 @@ void fcombat_state::init_fcombat() /* the bits in the ROMs are ordered: n9 n8 n3 n7-n6 n5 n4 v3-v2 v1 v0 n2-n1 n0 h3 h2 */ /* we want them ordered like this: n9 n8 n7 n6-n5 n4 n3 n2-n1 n0 v3 v2-v1 v0 h3 h2 */ - for (uint32_t oldaddr = 0; oldaddr < length; oldaddr++) + for (u32 oldaddr = 0; oldaddr < length; oldaddr++) { - uint32_t newaddr = ((oldaddr << 1) & 0x3c00) | /* move n7-n4 */ - ((oldaddr >> 4) & 0x0200) | /* move n3 */ - ((oldaddr << 4) & 0x01c0) | /* move n2-n0 */ - ((oldaddr >> 3) & 0x003c) | /* move v3-v0 */ - ((oldaddr ) & 0xc003); /* keep n9-n8 h3-h2 */ + u32 newaddr = ((oldaddr << 1) & 0x3c00) | /* move n7-n4 */ + ((oldaddr >> 4) & 0x0200) | /* move n3 */ + ((oldaddr << 4) & 0x01c0) | /* move n2-n0 */ + ((oldaddr >> 3) & 0x003c) | /* move v3-v0 */ + ((oldaddr ) & 0xc003); /* keep n9-n8 h3-h2 */ dst[newaddr] = src[oldaddr]; } @@ -378,22 +374,22 @@ void fcombat_state::init_fcombat() /* the bits in the ROM are ordered: n8-n7 n6 n5 n4-v2 v1 v0 n3-n2 n1 n0 h2 */ /* we want them ordered like this: n8-n7 n6 n5 n4-n3 n2 n1 n0-v2 v1 v0 h2 */ - for (uint32_t oldaddr = 0; oldaddr < length; oldaddr++) + for (u32 oldaddr = 0; oldaddr < length; oldaddr++) { - uint32_t newaddr = ((oldaddr << 1) & 0x3c00) | /* move n7-n4 */ - ((oldaddr >> 4) & 0x0200) | /* move n3 */ - ((oldaddr << 4) & 0x01c0) | /* move n2-n0 */ - ((oldaddr >> 3) & 0x003c) | /* move v3-v0 */ - ((oldaddr ) & 0xc003); /* keep n9-n8 h3-h2 */ + u32 newaddr = ((oldaddr << 1) & 0x3c00) | /* move n7-n4 */ + ((oldaddr >> 4) & 0x0200) | /* move n3 */ + ((oldaddr << 4) & 0x01c0) | /* move n2-n0 */ + ((oldaddr >> 3) & 0x003c) | /* move v3-v0 */ + ((oldaddr ) & 0xc003); /* keep n9-n8 h3-h2 */ dst[newaddr] = src[oldaddr]; } src = &temp[0]; - dst = memregion("user1")->base(); - length = memregion("user1")->bytes(); + dst = memregion("bgdata")->base(); + length = memregion("bgdata")->bytes(); memcpy(src, dst, length); - for (uint32_t oldaddr = 0; oldaddr < 32; oldaddr++) + for (u32 oldaddr = 0; oldaddr < 32; oldaddr++) { memcpy(&dst[oldaddr * 32 * 8 * 2], &src[oldaddr * 32 * 8], 32 * 8); memcpy(&dst[oldaddr * 32 * 8 * 2 + 32 * 8], &src[oldaddr * 32 * 8 + 0x2000], 32 * 8); @@ -405,7 +401,7 @@ void fcombat_state::init_fcombat() length = memregion("user2")->bytes(); memcpy(src, dst, length); - for (uint32_t oldaddr = 0; oldaddr < 32; oldaddr++) + for (u32 oldaddr = 0; oldaddr < 32; oldaddr++) { memcpy(&dst[oldaddr * 32 * 8 * 2], &src[oldaddr * 32 * 8], 32 * 8); memcpy(&dst[oldaddr * 32 * 8 * 2 + 32 * 8], &src[oldaddr * 32 * 8 + 0x2000], 32 * 8); @@ -431,7 +427,7 @@ ROM_START( fcombat ) ROM_REGION( 0x04000, "gfx3", 0 ) ROM_LOAD( "fcombat6.f3", 0x00000, 0x4000, CRC(97282729) SHA1(72db0593551c2d15631341bf621b96013b46ce72) ) - ROM_REGION( 0x04000, "user1", 0 ) + ROM_REGION( 0x04000, "bgdata", 0 ) ROM_LOAD( "fcombat5.l3", 0x00000, 0x4000, CRC(96194ca7) SHA1(087d6ac8f93f087cb5e378dbe9a8cfcffa2cdddc) ) /* bg data */ ROM_REGION( 0x04000, "user2", 0 ) diff --git a/src/mame/includes/fcombat.h b/src/mame/includes/fcombat.h index 17ed6499ce4..33832d0d5b4 100644 --- a/src/mame/includes/fcombat.h +++ b/src/mame/includes/fcombat.h @@ -37,6 +37,9 @@ public: driver_device(mconfig, type, tag), m_videoram(*this, "videoram"), m_spriteram(*this, "spriteram"), + m_bgdata_rom(*this, "bgdata"), + m_user2_region(*this, "user2"), + m_io_in(*this, "IN%u", 0U), m_maincpu(*this, "maincpu"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette") @@ -50,15 +53,19 @@ public: private: /* memory pointers */ - required_shared_ptr m_videoram; - required_shared_ptr m_spriteram; + required_shared_ptr m_videoram; + required_shared_ptr m_spriteram; + required_region_ptr m_bgdata_rom; + required_region_ptr m_user2_region; + + required_ioport_array<2> m_io_in; /* video-related */ tilemap_t *m_bgmap; - uint8_t m_cocktail_flip; - uint8_t m_char_palette; - uint8_t m_sprite_palette; - uint8_t m_char_bank; + u8 m_cocktail_flip; + u8 m_char_palette; + u8 m_sprite_palette; + u8 m_char_bank; /* misc */ int m_fcombat_sh; @@ -71,22 +78,22 @@ private: required_device m_gfxdecode; required_device m_palette; - DECLARE_READ8_MEMBER(fcombat_protection_r); - DECLARE_READ8_MEMBER(fcombat_port01_r); - DECLARE_WRITE8_MEMBER(e900_w); - DECLARE_WRITE8_MEMBER(ea00_w); - DECLARE_WRITE8_MEMBER(eb00_w); - DECLARE_WRITE8_MEMBER(ec00_w); - DECLARE_WRITE8_MEMBER(ed00_w); - DECLARE_READ8_MEMBER(e300_r); - DECLARE_WRITE8_MEMBER(ee00_w); - DECLARE_WRITE8_MEMBER(fcombat_videoreg_w); + u8 protection_r(); + u8 port01_r(); + void e900_w(u8 data); + void ea00_w(u8 data); + void eb00_w(u8 data); + void ec00_w(u8 data); + void ed00_w(u8 data); + u8 e300_r(); + void ee00_w(u8 data); + void videoreg_w(u8 data); TILE_GET_INFO_MEMBER(get_bg_tile_info); virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; void fcombat_palette(palette_device &palette) const; - uint32_t screen_update_fcombat(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void audio_map(address_map &map); void main_map(address_map &map); }; diff --git a/src/mame/video/fcombat.cpp b/src/mame/video/fcombat.cpp index d221b24536a..859a4d6384f 100644 --- a/src/mame/video/fcombat.cpp +++ b/src/mame/video/fcombat.cpp @@ -16,8 +16,8 @@ TILE_GET_INFO_MEMBER(fcombat_state::get_bg_tile_info) //palno = (tile_index - (tile_index / 32 * 16) * 32 * 16) / 32; - tileno = memregion("user1")->base()[tile_index]; - palno = 0x18; //memregion("user2")->base()[tile_index] >> 3; + tileno = m_bgdata_rom[tile_index]; + palno = 0x18; //m_user2_region[tile_index] >> 3; SET_TILE_INFO_MEMBER(2, tileno, palno, 0); } @@ -41,7 +41,7 @@ TILE_GET_INFO_MEMBER(fcombat_state::get_bg_tile_info) void fcombat_state::fcombat_palette(palette_device &palette) const { - const uint8_t *color_prom = memregion("proms")->base(); + const u8 *color_prom = memregion("proms")->base(); // create a lookup table for the palette for (int i = 0; i < 0x20; i++) @@ -52,19 +52,19 @@ void fcombat_state::fcombat_palette(palette_device &palette) const bit0 = BIT(color_prom[i], 0); bit1 = BIT(color_prom[i], 1); bit2 = BIT(color_prom[i], 2); - int const r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + const u8 r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; // green component bit0 = BIT(color_prom[i], 3); bit1 = BIT(color_prom[i], 4); bit2 = BIT(color_prom[i], 5); - int const g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + const u8 g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; // blue component bit0 = 0; bit1 = BIT(color_prom[i], 6); bit2 = BIT(color_prom[i], 7); - int const b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + const u8 b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; palette.set_indirect_color(i, rgb_t(r, g, b)); } @@ -75,20 +75,19 @@ void fcombat_state::fcombat_palette(palette_device &palette) const // fg chars/sprites for (int i = 0; i < 0x200; i++) { - uint8_t const ctabentry = (color_prom[(i & 0x1c0) | ((i & 3) << 4) | ((i >> 2) & 0x0f)] & 0x0f) | 0x10; + const u8 ctabentry = (color_prom[(i & 0x1c0) | ((i & 3) << 4) | ((i >> 2) & 0x0f)] & 0x0f) | 0x10; palette.set_pen_indirect(i, ctabentry); } // bg chars (this is not the full story... there are four layers mixed using another PROM for (int i = 0x200; i < 0x300; i++) { - uint8_t const ctabentry = color_prom[i] & 0x0f; + const u8 ctabentry = color_prom[i] & 0x0f; palette.set_pen_indirect(i, ctabentry); } } - /************************************* * * Video system startup @@ -101,14 +100,13 @@ void fcombat_state::video_start() } - /************************************* * * Video register I/O * *************************************/ -WRITE8_MEMBER(fcombat_state::fcombat_videoreg_w) +void fcombat_state::videoreg_w(u8 data) { /* bit 0 = flip screen and joystick input multiplexor */ m_cocktail_flip = data & 1; @@ -127,11 +125,8 @@ WRITE8_MEMBER(fcombat_state::fcombat_videoreg_w) } - -uint32_t fcombat_state::screen_update_fcombat(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 fcombat_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - int sx, sy, offs, i; - /* draw background */ m_bgmap->set_scrolly(0, m_fcombat_sh); m_bgmap->set_scrollx(0, m_fcombat_sv - 24); @@ -141,7 +136,7 @@ uint32_t fcombat_state::screen_update_fcombat(screen_device &screen, bitmap_ind1 //draw_background(bitmap, cliprect); /* draw sprites */ - for (i = 0; i < m_spriteram.bytes(); i += 4) + for (int i = 0; i < m_spriteram.bytes(); i += 4) { int flags = m_spriteram[i + 0]; int y = m_spriteram[i + 1] ^ 255; @@ -150,12 +145,12 @@ uint32_t fcombat_state::screen_update_fcombat(screen_device &screen, bitmap_ind1 int xflip = flags & 0x80; int yflip = flags & 0x40; - int doubled =0;// flags & 0x10; - int wide = flags & 0x08; + bool doubled = false;// flags & 0x10; + const bool wide = flags & 0x08; int code2 = code; int color = ((flags >> 1) & 0x03) | ((code >> 5) & 0x04) | (code & 0x08) | (m_sprite_palette * 16); - gfx_element *gfx = m_gfxdecode->gfx(1); + gfx_element *gfx = m_gfxdecode->gfx(1); if (m_cocktail_flip) { @@ -176,7 +171,7 @@ uint32_t fcombat_state::screen_update_fcombat(screen_device &screen, bitmap_ind1 gfx->transpen(bitmap,cliprect, code2, color, xflip, yflip, x, y + gfx->height(), 0); } - if(flags&0x10) + if (flags & 0x10) { gfx->transpen(bitmap,cliprect, code2 + 16, color, xflip, yflip, x, y + gfx->height(), 0); gfx->transpen(bitmap,cliprect, code2 + 16 * 2, color, xflip, yflip, x, y + 2 * gfx->height(), 0); @@ -190,13 +185,13 @@ uint32_t fcombat_state::screen_update_fcombat(screen_device &screen, bitmap_ind1 } /* draw the visible text layer */ - for (sy = VISIBLE_Y_MIN/8; sy < VISIBLE_Y_MAX/8; sy++) - for (sx = VISIBLE_X_MIN/8; sx < VISIBLE_X_MAX/8; sx++) + for (int sy = VISIBLE_Y_MIN/8; sy < VISIBLE_Y_MAX/8; sy++) + for (int sx = VISIBLE_X_MIN/8; sx < VISIBLE_X_MAX/8; sx++) { int x = m_cocktail_flip ? (63 * 8 - 8 * sx) : 8 * sx; int y = m_cocktail_flip ? (31 * 8 - 8 * sy) : 8 * sy; - offs = sx + sy * 64; + const int offs = sx + sy * 64; m_gfxdecode->gfx(0)->transpen(bitmap,cliprect, m_videoram[offs] + 256 * m_char_bank, ((m_videoram[offs] & 0xf0) >> 4) + m_char_palette * 16,