mirror of
https://github.com/holub/mame
synced 2025-10-06 17:08:28 +03:00
aquarium.cpp : Add layout of hi 1bpp data of gfx ROMs
This commit is contained in:
parent
75bb246ad2
commit
394ce03916
@ -200,10 +200,23 @@ static INPUT_PORTS_START( aquarium )
|
||||
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("soundlatch", generic_latch_8_device, pending_r)
|
||||
INPUT_PORTS_END
|
||||
|
||||
static const gfx_layout layout_5bpp_hi =
|
||||
{
|
||||
16, 16,
|
||||
RGN_FRAC(1,1),
|
||||
1,
|
||||
{ 0 },
|
||||
{ STEP16(0, 1) },
|
||||
{ STEP16(0, 16) },
|
||||
16*16
|
||||
};
|
||||
|
||||
static GFXDECODE_START( gfx_aquarium )
|
||||
GFXDECODE_ENTRY( "txt", 0, gfx_8x8x4_packed_msb, 0x200, 16 )
|
||||
GFXDECODE_ENTRY( "mid", 0, gfx_16x16x4_packed_msb, 0x400, 32 )
|
||||
GFXDECODE_ENTRY( "bak", 0, gfx_16x16x4_packed_msb, 0x400, 32 )
|
||||
GFXDECODE_ENTRY( "txt", 0, gfx_8x8x4_packed_msb, 0x200, 16 )
|
||||
GFXDECODE_ENTRY( "mid", 0, gfx_16x16x4_packed_msb, 0x400, 32 ) // low 4bpp of 5bpp data
|
||||
GFXDECODE_ENTRY( "bak", 0, gfx_16x16x4_packed_msb, 0x400, 32 ) // low 4bpp of 5bpp data
|
||||
GFXDECODE_ENTRY( "bak_hi", 0, layout_5bpp_hi, 0x400, 32 ) // hi 1bpp of 5bpp data
|
||||
GFXDECODE_ENTRY( "mid_hi", 0, layout_5bpp_hi, 0x400, 32 ) // hi 1bpp of 5bpp data
|
||||
GFXDECODE_END
|
||||
|
||||
void aquarium_state::aquarium(machine_config &config)
|
||||
@ -313,49 +326,49 @@ ROM_START( aquariumj )
|
||||
ROM_LOAD( "excellent_4.7d", 0x000000, 0x80000, CRC(9a4af531) SHA1(bb201b7a6c9fd5924a0d79090257efffd8d4aba1) )
|
||||
ROM_END
|
||||
|
||||
void aquarium_state::expand_gfx(int no, u8 *gfx_hi)
|
||||
void aquarium_state::expand_gfx(int low, int hi)
|
||||
{
|
||||
/* The BG tiles are 5bpp, this rearranges the data from
|
||||
the roms containing the 1bpp data so we can decode it
|
||||
correctly */
|
||||
gfx_element *gfx = m_gfxdecode->gfx(no);
|
||||
gfx_element *gfx_l = m_gfxdecode->gfx(low);
|
||||
gfx_element *gfx_h = m_gfxdecode->gfx(hi);
|
||||
|
||||
// allocate memory for the assembled data
|
||||
u8 *srcdata = auto_alloc_array(machine(), u8, gfx->elements() * gfx->width() * gfx->height());
|
||||
u8 *srcdata = auto_alloc_array(machine(), u8, gfx_l->elements() * gfx_l->width() * gfx_l->height());
|
||||
|
||||
// loop over elements
|
||||
u8 *dest = srcdata;
|
||||
for (int c = 0; c < gfx->elements(); c++)
|
||||
for (int c = 0; c < gfx_l->elements(); c++)
|
||||
{
|
||||
const u8 *c0base = gfx->get_data(c);
|
||||
const u8 *c0base = gfx_l->get_data(c);
|
||||
const u8 *c1base = gfx_h->get_data(c);
|
||||
|
||||
// loop over height
|
||||
for (int y = 0; y < gfx->height(); y++)
|
||||
for (int y = 0; y < gfx_l->height(); y++)
|
||||
{
|
||||
const u8 *c0 = c0base;
|
||||
const u8 *c1 = c1base;
|
||||
|
||||
for (int x = 0; x < gfx->width();)
|
||||
for (int x = 0; x < gfx_l->width(); x++)
|
||||
{
|
||||
u8 hi = *gfx_hi++;
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
*dest++ = (*c0++ & 0xf) | ((hi >> 3) & 0x10);
|
||||
x++;
|
||||
hi <<= 1;
|
||||
}
|
||||
u8 hi_data = *c1++;
|
||||
*dest++ = (*c0++ & 0xf) | ((hi_data << 4) & 0x10);
|
||||
}
|
||||
c0base += gfx->rowbytes();
|
||||
c0base += gfx_l->rowbytes();
|
||||
c1base += gfx_h->rowbytes();
|
||||
}
|
||||
}
|
||||
|
||||
gfx->set_raw_layout(srcdata, gfx->width(), gfx->height(), gfx->elements(), 8 * gfx->width(), 8 * gfx->width() * gfx->height());
|
||||
gfx->set_granularity(32);
|
||||
gfx_l->set_raw_layout(srcdata, gfx_l->width(), gfx_l->height(), gfx_l->elements(), 8 * gfx_l->width(), 8 * gfx_l->width() * gfx_l->height());
|
||||
gfx_l->set_granularity(32);
|
||||
m_gfxdecode->set_gfx(hi, nullptr);
|
||||
}
|
||||
|
||||
void aquarium_state::init_aquarium()
|
||||
{
|
||||
expand_gfx(1, memregion("mid_hi")->base());
|
||||
expand_gfx(2, memregion("bak_hi")->base());
|
||||
expand_gfx(1, 4);
|
||||
expand_gfx(2, 3);
|
||||
|
||||
u8 *Z80 = memregion("audiocpu")->base();
|
||||
|
||||
|
@ -69,7 +69,7 @@ private:
|
||||
u8 oki_r();
|
||||
void oki_w(u8 data);
|
||||
|
||||
void expand_gfx(int no, u8 *gfx_hi);
|
||||
void expand_gfx(int low, int hi);
|
||||
void txt_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
void mid_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
void bak_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
|
Loading…
Reference in New Issue
Block a user