mirror of
https://github.com/holub/mame
synced 2025-04-24 09:20:02 +03:00
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.
This commit is contained in:
parent
88a47305a4
commit
f20914929e
@ -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<cpu_device> m_audiocpu;
|
||||
required_device<k007342_device> m_k007342;
|
||||
required_device<k007420_device> m_k007420;
|
||||
required_device<gfxdecode_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) )
|
||||
|
@ -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<k007420_device> m_k007420;
|
||||
required_device<upd7759_device> m_upd7759;
|
||||
required_device_array<filter_rc_device, 3> m_filter;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<generic_latch_8_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) )
|
||||
|
@ -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<uint8_t[]>(0x2000);
|
||||
m_scroll_ram = make_unique_clear<uint8_t[]>(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);
|
||||
}
|
||||
|
@ -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<void (int layer, int bank, int *code, int *color, int *flags)>;
|
||||
using tile_delegate = device_delegate<void (int layer, uint32_t bank, uint32_t &code, uint32_t &color, uint8_t &flags)>;
|
||||
|
||||
k007342_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
template<typename T> 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<T>(palette_tag));
|
||||
}
|
||||
|
||||
// configuration
|
||||
template <typename T> void set_gfxdecode_tag(T &&tag) { m_gfxdecode.set_tag(std::forward<T>(tag)); }
|
||||
void set_gfxnum(int gfxnum) { m_gfxnum = gfxnum; }
|
||||
// configuration
|
||||
template <typename... T> void set_tile_callback(T &&... args) { m_callback.set(std::forward<T>(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<uint8_t[]> m_ram;
|
||||
std::unique_ptr<uint8_t[]> 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<uint8_t[]> m_ram;
|
||||
std::unique_ptr<uint8_t[]> 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<gfxdecode_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
|
||||
|
@ -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<uint8_t[]>(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,
|
||||
|
@ -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<void (int *code, int *color)>;
|
||||
using sprite_delegate = device_delegate<void (uint32_t &code, uint32_t &color)>;
|
||||
|
||||
k007420_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
template<typename T> 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<T>(palette_tag));
|
||||
}
|
||||
|
||||
template <typename T> void set_palette_tag(T &&tag) { m_palette.set_tag(std::forward<T>(tag)); }
|
||||
void set_bank_limit(int limit) { m_banklimit = limit; }
|
||||
void set_bank_limit(uint32_t limit) { m_banklimit = limit; }
|
||||
template <typename... T> void set_sprite_callback(T &&... args) { m_callback.set(std::forward<T>(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<uint8_t[]> m_ram;
|
||||
std::unique_ptr<uint8_t[]> 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<palette_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
|
||||
|
@ -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<k007342_device> m_k007342;
|
||||
required_device<k007420_device> m_k007420;
|
||||
required_device<vlm5030_device> m_vlm;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_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) )
|
||||
|
Loading…
Reference in New Issue
Block a user