mirror of
https://github.com/holub/mame
synced 2025-10-06 17:08:28 +03:00
rad_eu3a14 - improve rendering for rad_foot by making more correct use of sprite registers / bits
This commit is contained in:
parent
5525475274
commit
5a2aa84cec
@ -76,6 +76,7 @@ public:
|
|||||||
m_scrollregs(*this, "scrollregs"),
|
m_scrollregs(*this, "scrollregs"),
|
||||||
m_tilecfg(*this, "tilecfg"),
|
m_tilecfg(*this, "tilecfg"),
|
||||||
m_tilebase(*this, "tilebase"),
|
m_tilebase(*this, "tilebase"),
|
||||||
|
m_spritebase(*this, "spritebase"),
|
||||||
m_mainram(*this, "mainram"),
|
m_mainram(*this, "mainram"),
|
||||||
m_dmaparams(*this, "dmaparams"),
|
m_dmaparams(*this, "dmaparams"),
|
||||||
m_bank(*this, "bank"),
|
m_bank(*this, "bank"),
|
||||||
@ -133,6 +134,7 @@ private:
|
|||||||
required_shared_ptr<uint8_t> m_scrollregs;
|
required_shared_ptr<uint8_t> m_scrollregs;
|
||||||
required_shared_ptr<uint8_t> m_tilecfg;
|
required_shared_ptr<uint8_t> m_tilecfg;
|
||||||
required_shared_ptr<uint8_t> m_tilebase;
|
required_shared_ptr<uint8_t> m_tilebase;
|
||||||
|
required_shared_ptr<uint8_t> m_spritebase;
|
||||||
required_shared_ptr<uint8_t> m_mainram;
|
required_shared_ptr<uint8_t> m_mainram;
|
||||||
required_shared_ptr<uint8_t> m_dmaparams;
|
required_shared_ptr<uint8_t> m_dmaparams;
|
||||||
required_device<address_map_bank_device> m_bank;
|
required_device<address_map_bank_device> m_bank;
|
||||||
@ -282,7 +284,7 @@ void radica_eu3a14_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitm
|
|||||||
{
|
{
|
||||||
// first 4 sprite entries seem to be garbage sprites, so we start at 0x20
|
// first 4 sprite entries seem to be garbage sprites, so we start at 0x20
|
||||||
// likely we're just interpreting them wrong and they're used for blanking things or clipping?
|
// likely we're just interpreting them wrong and they're used for blanking things or clipping?
|
||||||
for (int i = m_spriterambase; i < m_spriterambase+0x7e0; i += 8)
|
for (int i = m_spriterambase; i < m_spriterambase + 0x7e0; i += 8)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
+0 e--f hhww flip, enable, height, width
|
+0 e--f hhww flip, enable, height, width
|
||||||
@ -291,7 +293,7 @@ void radica_eu3a14_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitm
|
|||||||
+3 pppp ---- palette
|
+3 pppp ---- palette
|
||||||
+4 tttt tttt tile bits
|
+4 tttt tttt tile bits
|
||||||
+5 tttt tttt
|
+5 tttt tttt
|
||||||
+6 ---- ---- (more tile bits)
|
+6 --TT TPPP TTT = tile bank PPP = bpp select (+more?)
|
||||||
+7 ---- ----
|
+7 ---- ----
|
||||||
|
|
||||||
*/
|
*/
|
||||||
@ -338,62 +340,42 @@ void radica_eu3a14_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitm
|
|||||||
x -= 8;
|
x -= 8;
|
||||||
y -= 4;
|
y -= 4;
|
||||||
|
|
||||||
// int base = 0x18000;
|
|
||||||
int offset = ((m_mainram[i + 5] << 8) + (m_mainram[i + 4] << 0));
|
int offset = ((m_mainram[i + 5] << 8) + (m_mainram[i + 4] << 0));
|
||||||
int extra = m_mainram[i + 6];
|
int extra = m_mainram[i + 6];
|
||||||
gfx_element *gfx;
|
gfx_element *gfx;
|
||||||
gfx = m_gfxdecode->gfx(1);
|
gfx = m_gfxdecode->gfx(1);
|
||||||
|
|
||||||
#if 0
|
int spritebase = (m_spritebase[1] << 8) | m_spritebase[0];
|
||||||
static int test = 0x0000;
|
|
||||||
if (machine().input().code_pressed_once(KEYCODE_W))
|
|
||||||
{
|
|
||||||
test += 0x2000;
|
|
||||||
popmessage("%02x", test);
|
|
||||||
}
|
|
||||||
if (machine().input().code_pressed_once(KEYCODE_Q))
|
|
||||||
{
|
|
||||||
test -= 0x2000;
|
|
||||||
popmessage("%02x", test);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// this probably comes from somewhere else, base register
|
offset += (extra & 0xf8) << 13;
|
||||||
offset += 0x8000;
|
extra &= ~0xf8;
|
||||||
|
offset += spritebase << 7;
|
||||||
|
|
||||||
// these additions are odd, because 0x8000 should already be coming
|
switch (extra & 0x07)
|
||||||
// from the tile bits above
|
|
||||||
|
|
||||||
// 2bpp modes, always have bit --- --x- set?
|
|
||||||
if (extra == 0x02)
|
|
||||||
{
|
{
|
||||||
|
case 0x00: // 8bpp
|
||||||
|
case 0x07: // 8bpp
|
||||||
|
offset >>= 1;
|
||||||
|
gfx = m_gfxdecode->gfx(2);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x02: // 2bpp
|
||||||
offset <<= 1;
|
offset <<= 1;
|
||||||
gfx = m_gfxdecode->gfx(0);
|
gfx = m_gfxdecode->gfx(0);
|
||||||
pal = 0;
|
pal = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x04: // 4bpp
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x01: // unknowns
|
||||||
|
case 0x03:
|
||||||
|
case 0x05:
|
||||||
|
case 0x06:
|
||||||
|
pal = machine().rand();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (extra == 0x0a) // bits ---- x-x-
|
|
||||||
{
|
|
||||||
offset += 0x10000;
|
|
||||||
offset <<= 1;
|
|
||||||
gfx = m_gfxdecode->gfx(0);
|
|
||||||
pal = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4bpp modes, always have bit --- -x-- set?
|
|
||||||
|
|
||||||
if (extra == 0x04) // bits ---- -x--
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
if (extra == 0x0c) // bits ---- xx--
|
|
||||||
offset += 0x10000;
|
|
||||||
|
|
||||||
if (extra == 0x14) // bits ---x -x--
|
|
||||||
offset += 0x20000;
|
|
||||||
|
|
||||||
|
|
||||||
offset = offset >> 1;
|
offset = offset >> 1;
|
||||||
|
|
||||||
if (attr & 0x80)
|
if (attr & 0x80)
|
||||||
@ -551,7 +533,8 @@ void radica_eu3a14_state::radica_eu3a14_map(address_map &map)
|
|||||||
map(0x5116, 0x5117).ram();
|
map(0x5116, 0x5117).ram();
|
||||||
map(0x5121, 0x5124).ram().share("scrollregs");
|
map(0x5121, 0x5124).ram().share("scrollregs");
|
||||||
map(0x5150, 0x5150).ram(); // startup
|
map(0x5150, 0x5150).ram(); // startup
|
||||||
map(0x5151, 0x5153).ram(); // startup
|
map(0x5151, 0x5152).ram().share("spritebase");
|
||||||
|
map(0x5153, 0x5153).ram(); // startup
|
||||||
|
|
||||||
map(0x6000, 0xdfff).m(m_bank, FUNC(address_map_bank_device::amap8));
|
map(0x6000, 0xdfff).m(m_bank, FUNC(address_map_bank_device::amap8));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user