From f20914929e0105a2c5f2c409b8f703ae41d042e2 Mon Sep 17 00:00:00 2001 From: cam900 Date: Fri, 8 Dec 2023 00:45:37 +0900 Subject: [PATCH] konami/k007342.cpp, konami/k007420.cpp: Use device_gfx_interface to decode graphics ROM. (#11807) * Also cleaned up code and reduced macro use. * konami/battlnts.cpp, konami.bladestl.cpp, konami/rockrage.cpp: Adjusted graphics ROM loading so common graphics formats can be used. --- src/mame/konami/battlnts.cpp | 61 +++++++++++---------------- src/mame/konami/bladestl.cpp | 52 +++++++++-------------- src/mame/konami/k007342.cpp | 64 +++++++++++++---------------- src/mame/konami/k007342.h | 46 ++++++++++----------- src/mame/konami/k007420.cpp | 80 +++++++++++++++++------------------- src/mame/konami/k007420.h | 31 +++++++------- src/mame/konami/rockrage.cpp | 64 +++++++++++------------------ 7 files changed, 171 insertions(+), 227 deletions(-) diff --git a/src/mame/konami/battlnts.cpp b/src/mame/konami/battlnts.cpp index 5e23e25b051..6c539524251 100644 --- a/src/mame/konami/battlnts.cpp +++ b/src/mame/konami/battlnts.cpp @@ -39,7 +39,6 @@ public: m_audiocpu(*this, "audiocpu"), m_k007342(*this, "k007342"), m_k007420(*this, "k007420"), - m_gfxdecode(*this, "gfxdecode"), m_rombank(*this, "rombank") { } @@ -58,7 +57,6 @@ private: required_device m_audiocpu; required_device m_k007342; required_device m_k007420; - required_device m_gfxdecode; required_memory_bank m_rombank; @@ -67,8 +65,8 @@ private: void spritebank_w(uint8_t data); uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void vblank_irq(int state); - K007342_CALLBACK_MEMBER(tile_callback); - K007420_CALLBACK_MEMBER(sprite_callback); + void tile_callback(int layer, uint32_t bank, uint32_t &code, uint32_t &color, uint8_t &flags); + void sprite_callback(uint32_t &code, uint32_t &color); void main_map(address_map &map); void sound_map(address_map &map); @@ -83,10 +81,10 @@ private: ***************************************************************************/ -K007342_CALLBACK_MEMBER(battlnts_state::tile_callback) +void battlnts_state::tile_callback(int layer, uint32_t bank, uint32_t &code, uint32_t &color, uint8_t &flags) { - *code |= ((*color & 0x0f) << 9) | ((*color & 0x40) << 2); - *color = 0; + code |= ((color & 0x0f) << 9) | ((color & 0x40) << 2); + color = 0; } /*************************************************************************** @@ -95,11 +93,11 @@ K007342_CALLBACK_MEMBER(battlnts_state::tile_callback) ***************************************************************************/ -K007420_CALLBACK_MEMBER(battlnts_state::sprite_callback) +void battlnts_state::sprite_callback(uint32_t &code, uint32_t &color) { - *code |= ((*color & 0xc0) << 2) | m_spritebank; - *code = (*code << 2) | ((*color & 0x30) >> 4); - *color = 0; + code |= ((color & 0xc0) << 2) | m_spritebank; + code = (code << 2) | ((color & 0x30) >> 4); + color = 0; } void battlnts_state::spritebank_w(uint8_t data) @@ -118,7 +116,7 @@ uint32_t battlnts_state::screen_update(screen_device &screen, bitmap_ind16 &bitm m_k007342->tilemap_update(); m_k007342->tilemap_draw(screen, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE ,0); - m_k007420->sprites_draw(bitmap, cliprect, m_gfxdecode->gfx(1)); + m_k007420->sprites_draw(bitmap, cliprect); m_k007342->tilemap_draw(screen, bitmap, cliprect, 0, 1 | TILEMAP_DRAW_OPAQUE ,0); return 0; } @@ -283,21 +281,12 @@ INPUT_PORTS_END * *************************************/ -static const gfx_layout charlayout = -{ - 8,8, // 8 x 8 characters - 0x40000/32, // 8192 characters - 4, // 4bpp - { 0, 1, 2, 3 }, // the four bitplanes are packed in one nibble - { 2*4, 3*4, 0*4, 1*4, 6*4, 7*4, 4*4, 5*4 }, - { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, - 32*8 // every character takes 32 consecutive bytes -}; +static GFXDECODE_START( gfx_battlnts_tiles ) + GFXDECODE_ENTRY( "tiles", 0, gfx_8x8x4_packed_msb, 0, 1 ) // colors 0-15 +GFXDECODE_END - -static GFXDECODE_START( gfx_battlnts ) - GFXDECODE_ENTRY( "tiles", 0, charlayout, 0, 1 ) // colors 0-15 - GFXDECODE_ENTRY( "sprites", 0, gfx_8x8x4_packed_msb , 4*16, 1 ) // colors 64-79 +static GFXDECODE_START( gfx_battlnts_spr ) + GFXDECODE_ENTRY( "sprites", 0, gfx_8x8x4_packed_msb, 4*16, 1 ) // colors 64-79 GFXDECODE_END @@ -342,18 +331,14 @@ void battlnts_state::battlnts(machine_config &config) screen.set_palette("palette"); screen.screen_vblank().set(FUNC(battlnts_state::vblank_irq)); - GFXDECODE(config, m_gfxdecode, "palette", gfx_battlnts); PALETTE(config, "palette").set_format(palette_device::xBGR_555, 128); - K007342(config, m_k007342, 0); - m_k007342->set_gfxnum(0); + K007342(config, m_k007342, 0, "palette", gfx_battlnts_tiles); m_k007342->set_tile_callback(FUNC(battlnts_state::tile_callback)); - m_k007342->set_gfxdecode_tag(m_gfxdecode); - K007420(config, m_k007420, 0); + K007420(config, m_k007420, 0, "palette", gfx_battlnts_spr); m_k007420->set_bank_limit(0x3ff); m_k007420->set_sprite_callback(FUNC(battlnts_state::sprite_callback)); - m_k007420->set_palette_tag("palette"); // sound hardware SPEAKER(config, "mono").front_center(); @@ -381,7 +366,7 @@ ROM_START( battlnts ) ROM_LOAD( "777_c01.10a", 0x00000, 0x08000, CRC(c21206e9) SHA1(7b133e04be67dc061a186ab0481d848b69b370d7) ) ROM_REGION( 0x40000, "tiles", 0 ) - ROM_LOAD( "777c04.13a", 0x00000, 0x40000, CRC(45d92347) SHA1(8537b4ccd0a80ea3260ef82fde177f1d65a49c03) ) + ROM_LOAD16_WORD_SWAP( "777c04.13a", 0x00000, 0x40000, CRC(45d92347) SHA1(8537b4ccd0a80ea3260ef82fde177f1d65a49c03) ) ROM_REGION( 0x40000, "sprites", 0 ) ROM_LOAD( "777c05.13e", 0x00000, 0x40000, CRC(aeee778c) SHA1(fc58ada9c97361d13439b7b0918c947d48402445) ) @@ -396,7 +381,7 @@ ROM_START( battlntsa ) ROM_LOAD( "777_c01.10a", 0x00000, 0x08000, CRC(c21206e9) SHA1(7b133e04be67dc061a186ab0481d848b69b370d7) ) ROM_REGION( 0x40000, "tiles", 0 ) - ROM_LOAD( "777c04.13a", 0x00000, 0x40000, CRC(45d92347) SHA1(8537b4ccd0a80ea3260ef82fde177f1d65a49c03) ) + ROM_LOAD16_WORD_SWAP( "777c04.13a", 0x00000, 0x40000, CRC(45d92347) SHA1(8537b4ccd0a80ea3260ef82fde177f1d65a49c03) ) ROM_REGION( 0x40000, "sprites", 0 ) ROM_LOAD( "777c05.13e", 0x00000, 0x40000, CRC(aeee778c) SHA1(fc58ada9c97361d13439b7b0918c947d48402445) ) @@ -411,7 +396,7 @@ ROM_START( battlntsj ) ROM_LOAD( "777_c01.10a", 0x00000, 0x08000, CRC(c21206e9) SHA1(7b133e04be67dc061a186ab0481d848b69b370d7) ) ROM_REGION( 0x40000, "tiles", 0 ) - ROM_LOAD( "777c04.13a", 0x00000, 0x40000, CRC(45d92347) SHA1(8537b4ccd0a80ea3260ef82fde177f1d65a49c03) ) + ROM_LOAD16_WORD_SWAP( "777c04.13a", 0x00000, 0x40000, CRC(45d92347) SHA1(8537b4ccd0a80ea3260ef82fde177f1d65a49c03) ) ROM_REGION( 0x40000, "sprites", 0 ) ROM_LOAD( "777c05.13e", 0x00000, 0x40000, CRC(aeee778c) SHA1(fc58ada9c97361d13439b7b0918c947d48402445) ) @@ -426,7 +411,7 @@ ROM_START( rackemup ) ROM_LOAD( "765_j01.10a", 0x00000, 0x08000, CRC(77ae753e) SHA1(9e463a825d31bb79644b083d24b25670d96441c5) ) ROM_REGION( 0x40000, "tiles", 0 ) - ROM_LOAD( "765_l04.13a", 0x00000, 0x40000, CRC(d8fb9c64) SHA1(37dac643aa492ef1ecc29c5030bc7fe5226027a2) ) + ROM_LOAD16_WORD_SWAP( "765_l04.13a", 0x00000, 0x40000, CRC(d8fb9c64) SHA1(37dac643aa492ef1ecc29c5030bc7fe5226027a2) ) ROM_REGION( 0x40000, "sprites", 0 ) ROM_LOAD( "765_l05.13e", 0x00000, 0x40000, CRC(1bb6855f) SHA1(251081564dfede8fa9a422081d58465fe5ca4ed1) ) @@ -441,7 +426,7 @@ ROM_START( thehustl ) ROM_LOAD( "765_j01.10a", 0x00000, 0x08000, CRC(77ae753e) SHA1(9e463a825d31bb79644b083d24b25670d96441c5) ) ROM_REGION( 0x40000, "tiles", 0 ) - ROM_LOAD( "765_e04.13a", 0x00000, 0x40000, CRC(08c2b72e) SHA1(02d9c690da839d6fee75fffdf66a4d3da35a0263) ) + ROM_LOAD16_WORD_SWAP( "765_e04.13a", 0x00000, 0x40000, CRC(08c2b72e) SHA1(02d9c690da839d6fee75fffdf66a4d3da35a0263) ) ROM_REGION( 0x40000, "sprites", 0 ) ROM_LOAD( "765_e05.13e", 0x00000, 0x40000, CRC(ef044655) SHA1(c8272283eab8fc2899979da398819cb72c92a299) ) @@ -456,7 +441,7 @@ ROM_START( thehustlj ) ROM_LOAD( "765_j01.10a", 0x00000, 0x08000, CRC(77ae753e) SHA1(9e463a825d31bb79644b083d24b25670d96441c5) ) ROM_REGION( 0x40000, "tiles", 0 ) - ROM_LOAD( "765_e04.13a", 0x00000, 0x40000, CRC(08c2b72e) SHA1(02d9c690da839d6fee75fffdf66a4d3da35a0263) ) + ROM_LOAD16_WORD_SWAP( "765_e04.13a", 0x00000, 0x40000, CRC(08c2b72e) SHA1(02d9c690da839d6fee75fffdf66a4d3da35a0263) ) ROM_REGION( 0x40000, "sprites", 0 ) ROM_LOAD( "765_e05.13e", 0x00000, 0x40000, CRC(ef044655) SHA1(c8272283eab8fc2899979da398819cb72c92a299) ) diff --git a/src/mame/konami/bladestl.cpp b/src/mame/konami/bladestl.cpp index ebcd86fab08..a73d66c09a3 100644 --- a/src/mame/konami/bladestl.cpp +++ b/src/mame/konami/bladestl.cpp @@ -63,7 +63,6 @@ public: m_k007420(*this, "k007420"), m_upd7759(*this, "upd"), m_filter(*this, "filter%u", 1U), - m_gfxdecode(*this, "gfxdecode"), m_soundlatch(*this, "soundlatch"), m_trackball(*this, "TRACKBALL.%u", 0), m_lamps(*this, "lamp%u", 0U), @@ -84,7 +83,6 @@ private: required_device m_k007420; required_device m_upd7759; required_device_array m_filter; - required_device m_gfxdecode; required_device m_soundlatch; // I/O @@ -108,8 +106,8 @@ private: void palette(palette_device &palette) const; uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); TIMER_DEVICE_CALLBACK_MEMBER(scanline); - K007342_CALLBACK_MEMBER(tile_callback); - K007420_CALLBACK_MEMBER(sprite_callback); + void tile_callback(int layer, uint32_t bank, uint32_t &code, uint32_t &color, uint8_t &flags); + void sprite_callback(uint32_t &code, uint32_t &color); void main_map(address_map &map); void sound_map(address_map &map); @@ -142,10 +140,10 @@ void bladestl_state::palette(palette_device &palette) const ***************************************************************************/ -K007342_CALLBACK_MEMBER(bladestl_state::tile_callback) +void bladestl_state::tile_callback(int layer, uint32_t bank, uint32_t &code, uint32_t &color, uint8_t &flags) { - *code |= ((*color & 0x0f) << 8) | ((*color & 0x40) << 6); - *color = layer; + code |= ((color & 0x0f) << 8) | ((color & 0x40) << 6); + color = layer; } /*************************************************************************** @@ -154,11 +152,11 @@ K007342_CALLBACK_MEMBER(bladestl_state::tile_callback) ***************************************************************************/ -K007420_CALLBACK_MEMBER(bladestl_state::sprite_callback) +void bladestl_state::sprite_callback(uint32_t &code, uint32_t &color) { - *code |= ((*color & 0xc0) << 2) + m_spritebank; - *code = (*code << 2) | ((*color & 0x30) >> 4); - *color = 0 + (*color & 0x0f); + code |= ((color & 0xc0) << 2) + m_spritebank; + code = (code << 2) | ((color & 0x30) >> 4); + color = 0 + (color & 0x0f); } @@ -173,7 +171,7 @@ uint32_t bladestl_state::screen_update(screen_device &screen, bitmap_ind16 &bitm m_k007342->tilemap_update(); m_k007342->tilemap_draw(screen, bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 0); - m_k007420->sprites_draw(bitmap, cliprect, m_gfxdecode->gfx(1)); + m_k007420->sprites_draw(bitmap, cliprect); m_k007342->tilemap_draw(screen, bitmap, cliprect, 1, 1 | TILEMAP_DRAW_OPAQUE, 0); m_k007342->tilemap_draw(screen, bitmap, cliprect, 0, 0 ,0); m_k007342->tilemap_draw(screen, bitmap, cliprect, 0, 1 ,0); @@ -391,19 +389,11 @@ INPUT_PORTS_END * *************************************/ -static const gfx_layout charlayout = -{ - 8,8, // 8 x 8 characters - 0x40000/32, // 8192 characters - 4, // 4bpp - { 0, 1, 2, 3 }, // the four bitplanes are packed in one nibble - { 2*4, 3*4, 0*4, 1*4, 6*4, 7*4, 4*4, 5*4 }, - { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, - 32*8 // every character takes 32 consecutive bytes -}; +static GFXDECODE_START( gfx_bladestl_tiles ) + GFXDECODE_ENTRY( "tiles", 0, gfx_8x8x4_packed_msb, 0, 2 ) // colors 00..31 +GFXDECODE_END -static GFXDECODE_START( gfx_bladestl ) - GFXDECODE_ENTRY( "tiles", 0, charlayout, 0, 2 ) // colors 00..31 +static GFXDECODE_START( gfx_bladestl_spr ) GFXDECODE_ENTRY( "sprites", 0, gfx_8x8x4_packed_msb, 32, 16 ) // colors 32..47 but using lookup table GFXDECODE_END @@ -456,18 +446,14 @@ void bladestl_state::bladestl(machine_config &config) screen.set_screen_update(FUNC(bladestl_state::screen_update)); screen.set_palette("palette"); - GFXDECODE(config, m_gfxdecode, "palette", gfx_bladestl); PALETTE(config, "palette", FUNC(bladestl_state::palette)).set_format(palette_device::xBGR_555, 32 + 16*16, 32+16); - K007342(config, m_k007342, 0); - m_k007342->set_gfxnum(0); + K007342(config, m_k007342, 0, "palette", gfx_bladestl_tiles); m_k007342->set_tile_callback(FUNC(bladestl_state::tile_callback)); - m_k007342->set_gfxdecode_tag(m_gfxdecode); - K007420(config, m_k007420, 0); + K007420(config, m_k007420, 0, "palette", gfx_bladestl_spr); m_k007420->set_bank_limit(0x3ff); m_k007420->set_sprite_callback(FUNC(bladestl_state::sprite_callback)); - m_k007420->set_palette_tag("palette"); K051733(config, "k051733", 0); @@ -510,7 +496,7 @@ ROM_START( bladestl ) ROM_LOAD( "797-c02.12d", 0x08000, 0x08000, CRC(65a331ea) SHA1(f206f6c5f0474542a5b7686b2f4d2cc7077dd5b9) ) ROM_REGION( 0x40000, "tiles", 0 ) - ROM_LOAD( "797a05.19h", 0x00000, 0x40000, CRC(5491ba28) SHA1(c807774827c55c211ab68f548e1e835289cc5744) ) + ROM_LOAD16_WORD_SWAP( "797a05.19h", 0x00000, 0x40000, CRC(5491ba28) SHA1(c807774827c55c211ab68f548e1e835289cc5744) ) ROM_REGION( 0x40000, "sprites", 0 ) ROM_LOAD( "797a06.13h", 0x00000, 0x40000, CRC(d055f5cc) SHA1(3723b39b2a3e6dd8e7fc66bbfe1eef9f80818774) ) @@ -531,7 +517,7 @@ ROM_START( bladestll ) ROM_LOAD( "797-c02.12d", 0x08000, 0x08000, CRC(65a331ea) SHA1(f206f6c5f0474542a5b7686b2f4d2cc7077dd5b9) ) ROM_REGION( 0x40000, "tiles", 0 ) - ROM_LOAD( "797a05.19h", 0x00000, 0x40000, CRC(5491ba28) SHA1(c807774827c55c211ab68f548e1e835289cc5744) ) + ROM_LOAD16_WORD_SWAP( "797a05.19h", 0x00000, 0x40000, CRC(5491ba28) SHA1(c807774827c55c211ab68f548e1e835289cc5744) ) ROM_REGION( 0x40000, "sprites", 0 ) ROM_LOAD( "797a06.13h", 0x00000, 0x40000, CRC(d055f5cc) SHA1(3723b39b2a3e6dd8e7fc66bbfe1eef9f80818774) ) @@ -552,7 +538,7 @@ ROM_START( bladestle ) ROM_LOAD( "797-c02.12d", 0x08000, 0x08000, CRC(65a331ea) SHA1(f206f6c5f0474542a5b7686b2f4d2cc7077dd5b9) ) ROM_REGION( 0x40000, "tiles", 0 ) - ROM_LOAD( "797a05.19h", 0x00000, 0x40000, CRC(5491ba28) SHA1(c807774827c55c211ab68f548e1e835289cc5744) ) + ROM_LOAD16_WORD_SWAP( "797a05.19h", 0x00000, 0x40000, CRC(5491ba28) SHA1(c807774827c55c211ab68f548e1e835289cc5744) ) ROM_REGION( 0x40000, "sprites", 0 ) ROM_LOAD( "797a06.13h", 0x00000, 0x40000, CRC(d055f5cc) SHA1(3723b39b2a3e6dd8e7fc66bbfe1eef9f80818774) ) diff --git a/src/mame/konami/k007342.cpp b/src/mame/konami/k007342.cpp index 6538ad00800..460e7e6bca9 100644 --- a/src/mame/konami/k007342.cpp +++ b/src/mame/konami/k007342.cpp @@ -40,21 +40,18 @@ DEFINE_DEVICE_TYPE(K007342, k007342_device, "k007342", "K007342 Video Controller k007342_device::k007342_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, K007342, tag, owner, clock), + device_gfx_interface(mconfig, *this), m_ram(nullptr), m_scroll_ram(nullptr), - m_videoram_0(nullptr), - m_videoram_1(nullptr), - m_colorram_0(nullptr), - m_colorram_1(nullptr), - //m_tilemap[2]; - m_flipscreen(0), - m_int_enabled(0), + m_videoram{ nullptr, nullptr }, + m_colorram{ nullptr, nullptr }, + m_tilemap{ nullptr, nullptr }, + m_flipscreen(false), + m_int_enabled(false), //m_regs[8], //m_scrollx[2], //m_scrolly[2], - m_gfxdecode(*this, finder_base::DUMMY_TAG), - m_callback(*this), - m_gfxnum(0) + m_callback(*this) { } @@ -64,22 +61,19 @@ k007342_device::k007342_device(const machine_config &mconfig, const char *tag, d void k007342_device::device_start() { - if(!m_gfxdecode->started()) - throw device_missing_dependencies(); - // bind the init function m_callback.resolve(); - m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(k007342_device::get_tile_info0)), tilemap_mapper_delegate(*this, FUNC(k007342_device::scan)), 8, 8, 64, 32); - m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(k007342_device::get_tile_info1)), tilemap_mapper_delegate(*this, FUNC(k007342_device::scan)), 8, 8, 64, 32); + m_tilemap[0] = &machine().tilemap().create(*this, tilemap_get_info_delegate(*this, FUNC(k007342_device::get_tile_info0)), tilemap_mapper_delegate(*this, FUNC(k007342_device::scan)), 8, 8, 64, 32); + m_tilemap[1] = &machine().tilemap().create(*this, tilemap_get_info_delegate(*this, FUNC(k007342_device::get_tile_info1)), tilemap_mapper_delegate(*this, FUNC(k007342_device::scan)), 8, 8, 64, 32); m_ram = make_unique_clear(0x2000); m_scroll_ram = make_unique_clear(0x0200); - m_colorram_0 = &m_ram[0x0000]; - m_colorram_1 = &m_ram[0x1000]; - m_videoram_0 = &m_ram[0x0800]; - m_videoram_1 = &m_ram[0x1800]; + m_colorram[0] = &m_ram[0x0000]; + m_colorram[1] = &m_ram[0x1000]; + m_videoram[0] = &m_ram[0x0800]; + m_videoram[1] = &m_ram[0x1800]; m_tilemap[0]->set_transparent_pen(0); m_tilemap[1]->set_transparent_pen(0); @@ -99,8 +93,8 @@ void k007342_device::device_start() void k007342_device::device_reset() { - m_int_enabled = 0; - m_flipscreen = 0; + m_int_enabled = false; + m_flipscreen = false; m_scrollx[0] = 0; m_scrollx[1] = 0; m_scrolly[0] = 0; @@ -141,12 +135,12 @@ void k007342_device::scroll_w(offs_t offset, uint8_t data) void k007342_device::vreg_w(offs_t offset, uint8_t data) { - switch(offset) + switch (offset) { case 0x00: /* bit 1: INT control */ - m_int_enabled = data & 0x02; - m_flipscreen = data & 0x10; + m_int_enabled = BIT(data, 1); + m_flipscreen = BIT(data, 4); m_tilemap[0]->set_flip(m_flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0); m_tilemap[1]->set_flip(m_flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0); break; @@ -176,7 +170,7 @@ void k007342_device::vreg_w(offs_t offset, uint8_t data) m_regs[offset] = data; } -void k007342_device::tilemap_update( ) +void k007342_device::tilemap_update() { /* update scroll */ switch (m_regs[2] & 0x1c) @@ -231,12 +225,12 @@ void k007342_device::tilemap_update( ) #endif } -void k007342_device::tilemap_draw( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int num, int flags, uint32_t priority ) +void k007342_device::tilemap_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int num, int flags, uint32_t priority) { m_tilemap[num]->draw(screen, bitmap, cliprect, flags, priority); } -int k007342_device::is_int_enabled( ) +int k007342_device::is_int_enabled() { return m_int_enabled; } @@ -264,19 +258,19 @@ TILEMAP_MAPPER_MEMBER(k007342_device::scan) return (col & 0x1f) + ((row & 0x1f) << 5) + ((col & 0x20) << 5); } -void k007342_device::get_tile_info( tile_data &tileinfo, int tile_index, int layer, uint8_t *cram, uint8_t *vram ) +void k007342_device::get_tile_info( tile_data &tileinfo, int tile_index, uint8_t layer ) { - int color = cram[tile_index]; - int code = vram[tile_index]; - int flags = TILE_FLIPYX((color & 0x30) >> 4); + uint32_t color = m_colorram[layer][tile_index]; + uint32_t code = m_videoram[layer][tile_index]; + uint8_t flags = TILE_FLIPYX((color & 0x30) >> 4); tileinfo.category = (color & 0x80) >> 7; if (!m_callback.isnull()) - m_callback(layer, m_regs[1], &code, &color, &flags); + m_callback(layer, m_regs[1], code, color, flags); - tileinfo.set(m_gfxnum, + tileinfo.set(0, code, color, flags); @@ -284,10 +278,10 @@ void k007342_device::get_tile_info( tile_data &tileinfo, int tile_index, int lay TILE_GET_INFO_MEMBER(k007342_device::get_tile_info0) { - get_tile_info(tileinfo, tile_index, 0, m_colorram_0, m_videoram_0); + get_tile_info(tileinfo, tile_index, 0); } TILE_GET_INFO_MEMBER(k007342_device::get_tile_info1) { - get_tile_info(tileinfo, tile_index, 1, m_colorram_1, m_videoram_1); + get_tile_info(tileinfo, tile_index, 1); } diff --git a/src/mame/konami/k007342.h b/src/mame/konami/k007342.h index d31bbcf0d65..fe661fedd51 100644 --- a/src/mame/konami/k007342.h +++ b/src/mame/konami/k007342.h @@ -8,16 +8,20 @@ #include "tilemap.h" -class k007342_device : public device_t +class k007342_device : public device_t, public device_gfx_interface { public: - using tile_delegate = device_delegate; + using tile_delegate = device_delegate; k007342_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + template k007342_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&palette_tag, const gfx_decode_entry *gfxinfo) + : k007342_device(mconfig, tag, owner, clock) + { + set_info(gfxinfo); + set_palette(std::forward(palette_tag)); + } - // configuration - template void set_gfxdecode_tag(T &&tag) { m_gfxdecode.set_tag(std::forward(tag)); } - void set_gfxnum(int gfxnum) { m_gfxnum = gfxnum; } + // configuration template void set_tile_callback(T &&... args) { m_callback.set(std::forward(args)...); } uint8_t read(offs_t offset); @@ -31,36 +35,30 @@ public: int is_int_enabled(); protected: - // device-level overrides + // device_t implementation virtual void device_start() override; virtual void device_reset() override; + private: // internal state - std::unique_ptr m_ram; - std::unique_ptr m_scroll_ram; - uint8_t *m_videoram_0; - uint8_t *m_videoram_1; - uint8_t *m_colorram_0; - uint8_t *m_colorram_1; + std::unique_ptr m_ram; + std::unique_ptr m_scroll_ram; + const uint8_t *m_videoram[2]; + const uint8_t *m_colorram[2]; - tilemap_t *m_tilemap[2]{}; - int m_flipscreen, m_int_enabled; - uint8_t m_regs[8]; - uint16_t m_scrollx[2]; - uint8_t m_scrolly[2]; - required_device m_gfxdecode; - tile_delegate m_callback; - int m_gfxnum; + tilemap_t *m_tilemap[2]; + bool m_flipscreen, m_int_enabled; + uint8_t m_regs[8]; + uint16_t m_scrollx[2]; + uint8_t m_scrolly[2]; + tile_delegate m_callback; TILEMAP_MAPPER_MEMBER(scan); TILE_GET_INFO_MEMBER(get_tile_info0); TILE_GET_INFO_MEMBER(get_tile_info1); - void get_tile_info( tile_data &tileinfo, int tile_index, int layer, uint8_t *cram, uint8_t *vram ); + void get_tile_info(tile_data &tileinfo, int tile_index, uint8_t layer); }; DECLARE_DEVICE_TYPE(K007342, k007342_device) -// function definition for a callback -#define K007342_CALLBACK_MEMBER(_name) void _name(int layer, int bank, int *code, int *color, int *flags) - #endif // MAME_KONAMI_K007342_H diff --git a/src/mame/konami/k007420.cpp b/src/mame/konami/k007420.cpp index 6e40099c543..c9c65a55ee0 100644 --- a/src/mame/konami/k007420.cpp +++ b/src/mame/konami/k007420.cpp @@ -17,15 +17,15 @@ TODO: #define VERBOSE 0 #define LOG(x) do { if (VERBOSE) logerror x; } while (0) -#define K007420_SPRITERAM_SIZE 0x200 +static constexpr uint32_t K007420_SPRITERAM_SIZE = 0x200; DEFINE_DEVICE_TYPE(K007420, k007420_device, "k007420", "K007420 Sprite Generator") k007420_device::k007420_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, K007420, tag, owner, clock) + , device_gfx_interface(mconfig, *this) , m_ram(nullptr) - , m_flipscreen(0) - , m_palette(*this, finder_base::DUMMY_TAG) + , m_flipscreen(false) , m_banklimit(0) , m_callback(*this) //, m_regs[8] @@ -44,8 +44,8 @@ void k007420_device::device_start() m_ram = make_unique_clear(0x200); save_pointer(NAME(m_ram), 0x200); - save_item(NAME(m_flipscreen)); // current one uses 7342 one - save_item(NAME(m_regs)); // current one uses 7342 ones + save_item(NAME(m_flipscreen)); // current one uses 7342 one + save_item(NAME(m_regs)); // current one uses 7342 ones } //------------------------------------------------- @@ -54,10 +54,8 @@ void k007420_device::device_start() void k007420_device::device_reset() { - int i; - - m_flipscreen = 0; - for (i = 0; i < 8; i++) + m_flipscreen = false; + for (int i = 0; i < 8; i++) m_regs[i] = 0; } @@ -95,36 +93,35 @@ void k007420_device::write(offs_t offset, uint8_t data) * 7 | xxxxxxxx | unused */ -void k007420_device::sprites_draw( bitmap_ind16 &bitmap, const rectangle &cliprect, gfx_element *gfx ) +void k007420_device::sprites_draw(bitmap_ind16 &bitmap, const rectangle &cliprect) { - int offs; - int codemask = m_banklimit; - int bankmask = ~m_banklimit; + const uint32_t codemask = m_banklimit; + const uint32_t bankmask = ~m_banklimit; - for (offs = K007420_SPRITERAM_SIZE - 8; offs >= 0; offs -= 8) + for (int offs = K007420_SPRITERAM_SIZE - 8; offs >= 0; offs -= 8) { - int ox, oy, code, color, flipx, flipy, zoom, w, h, x, y, bank; static const int xoffset[4] = { 0, 1, 4, 5 }; static const int yoffset[4] = { 0, 2, 8, 10 }; - code = m_ram[offs + 1]; - color = m_ram[offs + 2]; - ox = m_ram[offs + 3] - ((m_ram[offs + 4] & 0x80) << 1); - oy = 256 - m_ram[offs + 0]; - flipx = m_ram[offs + 4] & 0x04; - flipy = m_ram[offs + 4] & 0x08; + uint32_t code = m_ram[offs + 1]; + uint32_t color = m_ram[offs + 2]; + int32_t ox = m_ram[offs + 3] - ((m_ram[offs + 4] & 0x80) << 1); + int32_t oy = 256 - m_ram[offs + 0]; + bool flipx = m_ram[offs + 4] & 0x04; + bool flipy = m_ram[offs + 4] & 0x08; - m_callback(&code, &color); + m_callback(code, color); - bank = code & bankmask; + const uint32_t bank = code & bankmask; code &= codemask; /* 0x080 = normal scale, 0x040 = double size, 0x100 half size */ - zoom = m_ram[offs + 5] | ((m_ram[offs + 4] & 0x03) << 8); + uint32_t zoom = m_ram[offs + 5] | ((m_ram[offs + 4] & 0x03) << 8); if (!zoom) continue; zoom = 0x10000 * 128 / zoom; + uint8_t w, h; switch (m_ram[offs + 4] & 0x70) { case 0x30: w = h = 1; break; @@ -146,17 +143,15 @@ void k007420_device::sprites_draw( bitmap_ind16 &bitmap, const rectangle &clipre if (zoom == 0x10000) { - int sx, sy; - - for (y = 0; y < h; y++) + for (int y = 0; y < h; y++) { - sy = oy + 8 * y; + const int sy = oy + 8 * y; - for (x = 0; x < w; x++) + for (int x = 0; x < w; x++) { - int c = code; + uint32_t c = code; - sx = ox + 8 * x; + const int sx = ox + 8 * x; if (flipx) c += xoffset[(w - 1 - x)]; else @@ -172,14 +167,14 @@ void k007420_device::sprites_draw( bitmap_ind16 &bitmap, const rectangle &clipre else c += bank; - gfx->transpen(bitmap,cliprect, + gfx(0)->transpen(bitmap,cliprect, c, color, flipx,flipy, sx,sy,0); if (m_regs[2] & 0x80) - gfx->transpen(bitmap,cliprect, + gfx(0)->transpen(bitmap,cliprect, c, color, flipx,flipy, @@ -189,18 +184,17 @@ void k007420_device::sprites_draw( bitmap_ind16 &bitmap, const rectangle &clipre } else { - int sx, sy, zw, zh; - for (y = 0; y < h; y++) + for (int y = 0; y < h; y++) { - sy = oy + ((zoom * y + (1 << 12)) >> 13); - zh = (oy + ((zoom * (y + 1) + (1 << 12)) >> 13)) - sy; + const int sy = oy + ((zoom * y + (1 << 12)) >> 13); + const int zh = (oy + ((zoom * (y + 1) + (1 << 12)) >> 13)) - sy; - for (x = 0; x < w; x++) + for (int x = 0; x < w; x++) { - int c = code; + uint32_t c = code; - sx = ox + ((zoom * x + (1<<12)) >> 13); - zw = (ox + ((zoom * (x + 1) + (1 << 12)) >> 13)) - sx; + const int sx = ox + ((zoom * x + (1<<12)) >> 13); + const int zw = (ox + ((zoom * (x + 1) + (1 << 12)) >> 13)) - sx; if (flipx) c += xoffset[(w - 1 - x)]; else @@ -216,7 +210,7 @@ void k007420_device::sprites_draw( bitmap_ind16 &bitmap, const rectangle &clipre else c += bank; - gfx->zoom_transpen(bitmap,cliprect, + gfx(0)->zoom_transpen(bitmap,cliprect, c, color, flipx,flipy, @@ -224,7 +218,7 @@ void k007420_device::sprites_draw( bitmap_ind16 &bitmap, const rectangle &clipre (zw << 16) / 8,(zh << 16) / 8,0); if (m_regs[2] & 0x80) - gfx->zoom_transpen(bitmap,cliprect, + gfx(0)->zoom_transpen(bitmap,cliprect, c, color, flipx,flipy, diff --git a/src/mame/konami/k007420.h b/src/mame/konami/k007420.h index fd5bc3c9ac9..67eb4b5a647 100644 --- a/src/mame/konami/k007420.h +++ b/src/mame/konami/k007420.h @@ -8,40 +8,41 @@ #include "emupal.h" -class k007420_device : public device_t +class k007420_device : public device_t, public device_gfx_interface { public: - using sprite_delegate = device_delegate; + using sprite_delegate = device_delegate; k007420_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + template k007420_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&palette_tag, const gfx_decode_entry *gfxinfo) + : k007420_device(mconfig, tag, owner, clock) + { + set_info(gfxinfo); + set_palette(std::forward(palette_tag)); + } - template void set_palette_tag(T &&tag) { m_palette.set_tag(std::forward(tag)); } - void set_bank_limit(int limit) { m_banklimit = limit; } + void set_bank_limit(uint32_t limit) { m_banklimit = limit; } template void set_sprite_callback(T &&... args) { m_callback.set(std::forward(args)...); } uint8_t read(offs_t offset); void write(offs_t offset, uint8_t data); - void sprites_draw(bitmap_ind16 &bitmap, const rectangle &cliprect, gfx_element *gfx); + void sprites_draw(bitmap_ind16 &bitmap, const rectangle &cliprect); protected: - // device-level overrides + // device_t implementation virtual void device_start() override; virtual void device_reset() override; + private: // internal state - std::unique_ptr m_ram; + std::unique_ptr m_ram; - int m_flipscreen; // current code uses the 7342 flipscreen!! - uint8_t m_regs[8]; // current code uses the 7342 regs!! (only [2]) - required_device m_palette; - int m_banklimit; + bool m_flipscreen; // current code uses the 7342 flipscreen!! + uint8_t m_regs[8]; // current code uses the 7342 regs!! (only [2]) + uint32_t m_banklimit; sprite_delegate m_callback; }; DECLARE_DEVICE_TYPE(K007420, k007420_device) -// function definition for a callback -#define K007420_CALLBACK_MEMBER(_name) void _name(int *code, int *color) - - #endif // MAME_KONAMI_K007420_H diff --git a/src/mame/konami/rockrage.cpp b/src/mame/konami/rockrage.cpp index 897eae8b30f..6df4882c60f 100644 --- a/src/mame/konami/rockrage.cpp +++ b/src/mame/konami/rockrage.cpp @@ -80,7 +80,6 @@ public: m_k007342(*this, "k007342"), m_k007420(*this, "k007420"), m_vlm(*this, "vlm"), - m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), m_rombank(*this, "rombank") { } @@ -98,7 +97,6 @@ private: required_device m_k007342; required_device m_k007420; required_device m_vlm; - required_device m_gfxdecode; required_device m_palette; // memory pointers @@ -114,8 +112,8 @@ private: void palette(palette_device &palette) const; uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void vblank_irq(int state); - K007342_CALLBACK_MEMBER(tile_callback); - K007420_CALLBACK_MEMBER(sprite_callback); + void tile_callback(int layer, uint32_t bank, uint32_t &code, uint32_t &color, uint8_t &flags); + void sprite_callback(uint32_t &code, uint32_t &color); void main_map(address_map &map); void sound_map(address_map &map); @@ -146,13 +144,13 @@ void rockrage_state::palette(palette_device &palette) const ***************************************************************************/ -K007342_CALLBACK_MEMBER(rockrage_state::tile_callback) +void rockrage_state::tile_callback(int layer, uint32_t bank, uint32_t &code, uint32_t &color, uint8_t &flags) { if (layer == 1) - *code |= ((*color & 0x40) << 2) | ((m_vreg & 0x04) << 7); // doesn't use bank here (Tutankhamen eyes blinking) + code |= ((color & 0x40) << 2) | ((m_vreg & 0x04) << 7); // doesn't use bank here (Tutankhamen eyes blinking) else - *code |= ((*color & 0x40) << 2) | ((bank & 0x03) << 10) | ((m_vreg & 0x04) << 7) | ((m_vreg & 0x08) << 9); - *color = layer * 16 + (*color & 0x0f); + code |= ((color & 0x40) << 2) | ((bank & 0x03) << 10) | ((m_vreg & 0x04) << 7) | ((m_vreg & 0x08) << 9); + color = layer * 16 + (color & 0x0f); } /*************************************************************************** @@ -161,11 +159,11 @@ K007342_CALLBACK_MEMBER(rockrage_state::tile_callback) ***************************************************************************/ -K007420_CALLBACK_MEMBER(rockrage_state::sprite_callback) +void rockrage_state::sprite_callback(uint32_t &code, uint32_t &color) { - *code |= ((*color & 0x40) << 2) | ((*color & 0x80) << 1) * ((m_vreg & 0x03) << 1); - *code = (*code << 2) | ((*color & 0x30) >> 4); - *color = 0 + (*color & 0x0f); + code |= ((color & 0x40) << 2) | ((color & 0x80) << 1) * ((m_vreg & 0x03) << 1); + code = (code << 2) | ((color & 0x30) >> 4); + color = 0 + (color & 0x0f); } @@ -196,7 +194,7 @@ uint32_t rockrage_state::screen_update(screen_device &screen, bitmap_ind16 &bitm m_k007342->tilemap_draw(screen, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0); // Tutankhamen eyes go below sprites m_k007342->tilemap_draw(screen, bitmap, cliprect, 1, 0, 0); - m_k007420->sprites_draw(bitmap, cliprect, m_gfxdecode->gfx(1)); + m_k007420->sprites_draw(bitmap, cliprect); m_k007342->tilemap_draw(screen, bitmap, cliprect, 0, 1, 0); m_k007342->tilemap_draw(screen, bitmap, cliprect, 1, 1, 0); return 0; @@ -343,19 +341,11 @@ static INPUT_PORTS_START( rockrage ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) INPUT_PORTS_END -static const gfx_layout charlayout = -{ - 8,8, // 8 x 8 characters - 0x40000/32, // 8192 characters - 4, // 4bpp - { 0, 1, 2, 3 }, // the four bitplanes are packed in one nibble - { 2*4, 3*4, 0*4, 1*4, 6*4, 7*4, 4*4, 5*4 }, - { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, - 32*8 // every character takes 32 consecutive bytes -}; +static GFXDECODE_START( gfx_rockrage_tiles ) + GFXDECODE_ENTRY( "tiles", 0, gfx_8x8x4_packed_msb, 0, 32 ) // colors 00..31, using 2 lookup tables +GFXDECODE_END -static GFXDECODE_START( gfx_rockrage ) - GFXDECODE_ENTRY( "tiles", 0, charlayout, 0, 32 ) // colors 00..31, using 2 lookup tables +static GFXDECODE_START( gfx_rockrage_spr ) GFXDECODE_ENTRY( "sprites", 0, gfx_8x8x4_packed_msb, 512, 16 ) // colors 32..47, using lookup table GFXDECODE_END @@ -400,17 +390,13 @@ void rockrage_state::rockrage(machine_config &config) screen.set_palette(m_palette); screen.screen_vblank().set(FUNC(rockrage_state::vblank_irq)); - K007342(config, m_k007342, 0); - m_k007342->set_gfxnum(0); + K007342(config, m_k007342, 0, m_palette, gfx_rockrage_tiles); m_k007342->set_tile_callback(FUNC(rockrage_state::tile_callback)); - m_k007342->set_gfxdecode_tag(m_gfxdecode); - K007420(config, m_k007420, 0); + K007420(config, m_k007420, 0, m_palette, gfx_rockrage_spr); m_k007420->set_bank_limit(0x3ff); m_k007420->set_sprite_callback(FUNC(rockrage_state::sprite_callback)); - m_k007420->set_palette_tag(m_palette); - GFXDECODE(config, m_gfxdecode, m_palette, gfx_rockrage); PALETTE(config, m_palette, FUNC(rockrage_state::palette)); m_palette->set_format(palette_device::xBGR_555, 16*16*3, 64); m_palette->set_endianness(ENDIANNESS_LITTLE); @@ -445,8 +431,8 @@ ROM_START( rockrage ) ROM_LOAD( "620k03.11c", 0x08000, 0x08000, CRC(9fbefe82) SHA1(ab42b7e519a0dd08f2249dad0819edea0976f39a) ) ROM_REGION( 0x040000, "tiles", 0 ) - ROM_LOAD16_BYTE( "620k05.rom", 0x00000, 0x20000, CRC(145d387c) SHA1(4fb0c54f9a218d512d8aec09ef995494a06912d6) ) - ROM_LOAD16_BYTE( "620k06.rom", 0x00001, 0x20000, CRC(7fa2c57c) SHA1(8c5d85c31dc26cb59a012ebb1ea195c3db80cda8) ) // Both World & Japan use the same "K" code for these??? + ROM_LOAD16_BYTE( "620k05.rom", 0x00001, 0x20000, CRC(145d387c) SHA1(4fb0c54f9a218d512d8aec09ef995494a06912d6) ) + ROM_LOAD16_BYTE( "620k06.rom", 0x00000, 0x20000, CRC(7fa2c57c) SHA1(8c5d85c31dc26cb59a012ebb1ea195c3db80cda8) ) // Both World & Japan use the same "K" code for these??? ROM_REGION( 0x040000, "sprites", 0 ) ROM_LOAD( "620k11.rom", 0x000000, 0x20000, CRC(70449239) SHA1(07653ea3bfe0063c9d2b2102ac52a1b50fc2971e) ) @@ -470,10 +456,10 @@ ROM_START( rockragea ) ROM_LOAD( "620k03.11c", 0x08000, 0x08000, CRC(9fbefe82) SHA1(ab42b7e519a0dd08f2249dad0819edea0976f39a) ) // Same ROM but labeled as ver "G" ROM_REGION( 0x040000, "tiles", 0 ) - ROM_LOAD16_BYTE( "620d05a.16g", 0x00000, 0x10000, CRC(4d53fde9) SHA1(941fb6c94922727516945330b4b738aa052f7734) ) - ROM_LOAD16_BYTE( "620d06a.15g", 0x00001, 0x10000, CRC(8cc05d4b) SHA1(0d6fef98bdc4d299229de4e0044241aedee83b85) ) - ROM_LOAD16_BYTE( "620d05b.16f", 0x20000, 0x10000, CRC(69f4599f) SHA1(664581874d74ed7bf59bde6730799e15f4e0144d) ) - ROM_LOAD16_BYTE( "620d06b.15f", 0x20001, 0x10000, CRC(3892d41d) SHA1(c49f2e61f24a59be4e59e2f3c60e731b8a05ddd3) ) + ROM_LOAD16_BYTE( "620d05a.16g", 0x00001, 0x10000, CRC(4d53fde9) SHA1(941fb6c94922727516945330b4b738aa052f7734) ) + ROM_LOAD16_BYTE( "620d06a.15g", 0x00000, 0x10000, CRC(8cc05d4b) SHA1(0d6fef98bdc4d299229de4e0044241aedee83b85) ) + ROM_LOAD16_BYTE( "620d05b.16f", 0x20001, 0x10000, CRC(69f4599f) SHA1(664581874d74ed7bf59bde6730799e15f4e0144d) ) + ROM_LOAD16_BYTE( "620d06b.15f", 0x20000, 0x10000, CRC(3892d41d) SHA1(c49f2e61f24a59be4e59e2f3c60e731b8a05ddd3) ) ROM_REGION( 0x040000, "sprites", 0 ) ROM_LOAD( "620g11a.7g", 0x000000, 0x10000, CRC(0ef40c2c) SHA1(2c0b7e611333a072ebcef60c1985211d5936bf66) ) @@ -499,8 +485,8 @@ ROM_START( rockragej ) ROM_LOAD( "620k03.11c", 0x08000, 0x08000, CRC(9fbefe82) SHA1(ab42b7e519a0dd08f2249dad0819edea0976f39a) ) ROM_REGION( 0x040000, "tiles", 0 ) - ROM_LOAD16_BYTE( "620k05.16g", 0x00000, 0x20000, CRC(ca9d9346) SHA1(fee8d98def802f312c6cd0ec751c67aa18acfacd) ) - ROM_LOAD16_BYTE( "620k06.15g", 0x00001, 0x20000, CRC(c0e2b35c) SHA1(fb37a151188f27f883fed5fdfb0094c3efa9470d) ) // Both World & Japan use the same "K" code for these??? + ROM_LOAD16_BYTE( "620k05.16g", 0x00001, 0x20000, CRC(ca9d9346) SHA1(fee8d98def802f312c6cd0ec751c67aa18acfacd) ) + ROM_LOAD16_BYTE( "620k06.15g", 0x00000, 0x20000, CRC(c0e2b35c) SHA1(fb37a151188f27f883fed5fdfb0094c3efa9470d) ) // Both World & Japan use the same "K" code for these??? ROM_REGION( 0x040000, "sprites", 0 ) ROM_LOAD( "620k11.7g", 0x000000, 0x20000, CRC(7430f6e9) SHA1(5d488c7b7b0eb4e502b3e566ac102cd3267e8568) )