trkfldch - alt bg tile format (nw) (#5118)

* small changes (nw)

* alt tile format (nw)
This commit is contained in:
David Haywood 2019-05-27 16:35:40 +01:00 committed by R. Belmont
parent caacd65730
commit ec8a8deedd

View File

@ -65,7 +65,7 @@ private:
required_device<palette_device> m_palette; required_device<palette_device> m_palette;
void render_tile_layer(screen_device& screen, bitmap_ind16& bitmap, const rectangle& cliprect, uint16_t base, uint16_t tileadd); void render_tile_layer(screen_device& screen, bitmap_ind16& bitmap, const rectangle& cliprect, uint16_t base, uint16_t tileadd, int gfxregion, int tilexsize);
uint32_t screen_update_trkfldch(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_trkfldch(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void trkfldch_map(address_map &map); void trkfldch_map(address_map &map);
@ -89,7 +89,7 @@ void trkfldch_state::video_start()
{ {
} }
void trkfldch_state::render_tile_layer(screen_device& screen, bitmap_ind16& bitmap, const rectangle& cliprect, uint16_t base, uint16_t tileadd) void trkfldch_state::render_tile_layer(screen_device& screen, bitmap_ind16& bitmap, const rectangle& cliprect, uint16_t base, uint16_t tileadd, int gfxregion, int tilexsize)
{ {
int offs = 0; int offs = 0;
for (int y = 0; y < 30; y++) for (int y = 0; y < 30; y++)
@ -103,18 +103,18 @@ void trkfldch_state::render_tile_layer(screen_device& screen, bitmap_ind16& bitm
uint8_t attr = mem.read_byte(base + offs); uint8_t attr = mem.read_byte(base + offs);
offs++; offs++;
uint16_t tile = (attr << 8) | byte; int tile = (attr << 8) | byte;
int flipx = (tile & 0x8000) >> 15; int flipx = (tile & 0x8000) >> 15;
// flipy is probably 0x4000 int pal = (tile & 0x6000) >> 13;
tile &= 0x3fff; tile &= 0x1fff;
tile += tileadd; tile += tileadd;
gfx_element* gfx = m_gfxdecode->gfx(0); gfx_element* gfx = m_gfxdecode->gfx(gfxregion);
gfx->transpen(bitmap, cliprect,tile, 0, flipx, 0, x*8, y*8, 0); gfx->transpen(bitmap, cliprect,tile, pal, flipx, 0, x*tilexsize, y*8, 0);
} }
} }
@ -129,6 +129,7 @@ void trkfldch_state::render_tile_layer(screen_device& screen, bitmap_ind16& bitm
// trkfldch logos = b000 06 07 06 00 // trkfldch logos = b000 06 07 06 00
// trkfldch ingame uses different bpp so different addressing here too? // trkfldch ingame uses different bpp so different addressing here too?
uint32_t trkfldch_state::screen_update_trkfldch(screen_device& screen, bitmap_ind16& bitmap, const rectangle& cliprect) uint32_t trkfldch_state::screen_update_trkfldch(screen_device& screen, bitmap_ind16& bitmap, const rectangle& cliprect)
{ {
bitmap.fill(0, cliprect); bitmap.fill(0, cliprect);
@ -158,22 +159,49 @@ uint32_t trkfldch_state::screen_update_trkfldch(screen_device& screen, bitmap_in
} }
{ {
int base, gfxbase; int base, gfxbase, gfxregion, tilexsize;
base = (m_unkregs[0x54] << 8); base = (m_unkregs[0x54] << 8);
gfxbase = (m_unkregs[0x11]*0x2000) - 0x200; gfxbase = (m_unkregs[0x11] * 0x2000);
render_tile_layer(screen, bitmap, cliprect, base, gfxbase); if (m_unkregs[0x10] & 1) // seems like it might be a global control for bpp?
{
gfxbase -= 0x200;
gfxregion = 0;
tilexsize = 8;
}
else
{
gfxbase -= 0x2ac;
gfxregion = 2;
tilexsize = 8;
}
render_tile_layer(screen, bitmap, cliprect, base, gfxbase, gfxregion, tilexsize);
base = (m_unkregs[0x55] << 8); if (m_unkregs[0x10] & 0x10) // definitely looks like layer enable
gfxbase = (m_unkregs[0x13]*0x2000) - 0x200; {
render_tile_layer(screen, bitmap, cliprect, base, gfxbase); base = (m_unkregs[0x55] << 8);
gfxbase = (m_unkregs[0x13] * 0x2000);
if (m_unkregs[0x10] & 1) // seems like it might be a global control for bpp?
{
gfxbase -= 0x200;
gfxregion = 0;
tilexsize = 8;
}
else
{
gfxbase -= 0x2ac;
gfxregion = 2;
tilexsize = 8;
}
render_tile_layer(screen, bitmap, cliprect, base, gfxbase, gfxregion, tilexsize);
}
} }
for (int i = 0x500 - 5; i >= 0; i -= 5) for (int i = 0x500 - 5; i >= 0; i -= 5)
{ {
// printf("entry %02x %02x %02x %02x %02x\n", m_spriteram[i + 0], m_spriteram[i + 1], m_spriteram[i + 2], m_spriteram[i + 3], m_spriteram[i + 4]); // logerror("entry %02x %02x %02x %02x %02x\n", m_spriteram[i + 0], m_spriteram[i + 1], m_spriteram[i + 2], m_spriteram[i + 3], m_spriteram[i + 4]);
int tilegfxbase = (m_unkregs[0x15] * 0x800); int tilegfxbase = (m_unkregs[0x15] * 0x800);
int y = m_spriteram[i + 1]; int y = m_spriteram[i + 1];
@ -213,7 +241,7 @@ uint32_t trkfldch_state::screen_update_trkfldch(screen_device& screen, bitmap_in
gfx_element* gfx; gfx_element* gfx;
if (m_unkregs[0x10] & 1) // seems to change something at least (trkfldch events) if (m_unkregs[0x10] & 1) // seems like it might be a global control for bpp?
{ {
gfx = m_gfxdecode->gfx(1); gfx = m_gfxdecode->gfx(1);
tilegfxbase -= 0x80; tilegfxbase -= 0x80;
@ -221,7 +249,7 @@ uint32_t trkfldch_state::screen_update_trkfldch(screen_device& screen, bitmap_in
else else
{ {
pal = (m_spriteram[i + 0] & 0x30)>>4; pal = (m_spriteram[i + 0] & 0x30)>>4;
gfx = m_gfxdecode->gfx(2); gfx = m_gfxdecode->gfx(3);
tilegfxbase -= 0x40; tilegfxbase -= 0x40;
tilegfxbase -= 0x6b; tilegfxbase -= 0x6b;
@ -373,11 +401,8 @@ static const gfx_layout tiles8x8x8_layout =
RGN_FRAC(1,1), RGN_FRAC(1,1),
8, 8,
{ 48,49, 32,33, 16,17, 0, 1 }, { 48,49, 32,33, 16,17, 0, 1 },
{ 8,10,12, 14, 0,2,4,6 }, { 8,10,12, 14, 0,2,4,6 },
{ 0,0 + 64, { STEP8(0,64) },
128,128 + 64,
256,256 + 64,
384, 384 + 64 },
512, 512,
}; };
@ -395,6 +420,18 @@ static const gfx_layout tiles16x16x8_layout =
// TODO: if we're going to use gfxdecode then allocate this manually with the correct number of tiles // TODO: if we're going to use gfxdecode then allocate this manually with the correct number of tiles
// might be we have to use manual drawing tho, the base offset is already strange // might be we have to use manual drawing tho, the base offset is already strange
static const gfx_layout tiles8x8x6_layout =
{
8,8,
0x5500*4,
6,
{ 32, 33, 16, 17, 0, 1 },
{ 8,10,12,14, 0,2,4,6 },
{ STEP8(0,48) },
48*8,
};
static const gfx_layout tiles16x16x6_layout = static const gfx_layout tiles16x16x6_layout =
{ {
16,16, 16,16,
@ -410,6 +447,7 @@ static const gfx_layout tiles16x16x6_layout =
static GFXDECODE_START( gfx_trkfldch ) static GFXDECODE_START( gfx_trkfldch )
GFXDECODE_ENTRY( "maincpu", 0, tiles8x8x8_layout, 0, 1 ) GFXDECODE_ENTRY( "maincpu", 0, tiles8x8x8_layout, 0, 1 )
GFXDECODE_ENTRY( "maincpu", 0, tiles16x16x8_layout, 0, 1 ) GFXDECODE_ENTRY( "maincpu", 0, tiles16x16x8_layout, 0, 1 )
GFXDECODE_ENTRY( "maincpu", 0x40, tiles8x8x6_layout, 0, 4 )
GFXDECODE_ENTRY( "maincpu", 0x40, tiles16x16x6_layout, 0, 4 ) GFXDECODE_ENTRY( "maincpu", 0x40, tiles16x16x6_layout, 0, 4 )
GFXDECODE_END GFXDECODE_END
@ -459,62 +497,62 @@ READ8_MEMBER(trkfldch_state::unkregs_r)
{ {
case 0x00: // IRQ status?, see above case 0x00: // IRQ status?, see above
ret = machine().rand(); ret = machine().rand();
//logerror("%s: unkregs_r (IRQ state?) %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r (IRQ state?) %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0x01: // IRQ status?, see above case 0x01: // IRQ status?, see above
ret = machine().rand(); ret = machine().rand();
//logerror("%s: unkregs_r (IRQ state?) %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r (IRQ state?) %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0x02: // ends up being read as a side effect of reading a 16-bit word at 0x1, but also directly too? case 0x02: // ends up being read as a side effect of reading a 16-bit word at 0x1, but also directly too?
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0x03: // ends up being read as a side effect of reading a 16-bit word at 0x2, any other purpose? case 0x03: // ends up being read as a side effect of reading a 16-bit word at 0x2, any other purpose?
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0x04: case 0x04:
ret = 0xff; ret = 0xff;
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0x05: // only read as a side effect of reading port 0x4 in 16-bit mode? case 0x05: // only read as a side effect of reading port 0x4 in 16-bit mode?
ret = 0xff; ret = 0xff;
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0x06: case 0x06:
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0x42: case 0x42:
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0x43: case 0x43:
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0x44: case 0x44:
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0x54: // tilebase 1 case 0x54: // tilebase 1
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0x55: // tilebase 2 case 0x55: // tilebase 2
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0x56: // tilebase 3 case 0x56: // tilebase 3
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
@ -522,50 +560,50 @@ READ8_MEMBER(trkfldch_state::unkregs_r)
case 0x70: // read in irq (inputs?) case 0x70: // read in irq (inputs?)
ret = ioport("IN0")->read(); ret = ioport("IN0")->read();
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0x71: case 0x71:
ret = ioport("IN1")->read(); ret = ioport("IN1")->read();
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0x73: case 0x73:
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0x74: case 0x74:
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0x75: case 0x75:
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0x76: case 0x76:
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0x77: case 0x77:
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0x7f: case 0x7f:
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0x80: // only read as a side-effect of reading 0x7f? case 0x80: // only read as a side-effect of reading 0x7f?
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0xb6: case 0xb6:
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
case 0xb7: case 0xb7:
//logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret); logerror("%s: unkregs_r %04x (returning %02x)\n", machine().describe_context(), offset, ret);
break; break;
@ -591,182 +629,182 @@ WRITE8_MEMBER(trkfldch_state::unkregs_w)
break; break;
case 0x02: // startup case 0x02: // startup
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x03: // startup case 0x03: // startup
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x04: // startup case 0x04: // startup
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x05: // startup case 0x05: // startup
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
// is it significant that 0x10 goes up to 0x1a, 0x20 to 0x2b, 0x30 to 0x3b could be 3 sets of similar things? // is it significant that 0x10 goes up to 0x1a, 0x20 to 0x2b, 0x30 to 0x3b could be 3 sets of similar things?
case 0x10: // gfxmode select (4bpp / 8bpp) for sprites? maybe case 0x10: // gfxmode select (4bpp / 8bpp) for sprites? maybe
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w (bpp select) %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x11: case 0x11: // tilegfx base 1
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w (tilegfx base 1) %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x12: // startup case 0x12: // startup
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x13: case 0x13: // tilegfx base 2
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w (tilegfx base 2) %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x14: // startup case 0x14: // startup
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x15: // gfxbank select for sprites case 0x15: // gfxbank select for sprites
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w (spritegfx base 1) %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x16: case 0x16:
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x17: case 0x17:
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x18: case 0x18:
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x19: case 0x19:
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x1a: case 0x1a:
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x20: // rarely case 0x20: // rarely
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x21: // rarely case 0x21: // rarely
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x22: // rarely case 0x22: // rarely
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x23: // after a long time case 0x23: // after a long time
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x24: // rarely case 0x24: // rarely
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x25: // rarely case 0x25: // rarely
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x26: case 0x26:
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x27: case 0x27:
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x28: case 0x28:
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x29: case 0x29:
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x2a: case 0x2a:
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x2b: case 0x2b:
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x30: case 0x30:
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x31: case 0x31:
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x32: // rarely case 0x32: // rarely
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x33: // rarely case 0x33: // rarely
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x34: // rarely case 0x34: // rarely
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x36: // rarely case 0x36: // rarely
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x37: // rarely case 0x37: // rarely
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x3a: case 0x3a:
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x3b: case 0x3b:
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x42: case 0x42:
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x43: case 0x43:
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x54: // tilebase 1 case 0x54: // tilebase 1
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x55: // tilebase 2 case 0x55: // tilebase 2
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x56: // tilebase 3 case 0x56: // tilebase 3
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
@ -799,12 +837,21 @@ WRITE8_MEMBER(trkfldch_state::unkregs_w)
uint32_t dmasource = (m_unkregs[0x62] << 16) | (m_unkregs[0x61] << 8) | m_unkregs[0x60]; uint32_t dmasource = (m_unkregs[0x62] << 16) | (m_unkregs[0x61] << 8) | m_unkregs[0x60];
uint16_t dmadest = (m_unkregs[0x64] << 8) | m_unkregs[0x63]; uint16_t dmadest = (m_unkregs[0x64] << 8) | m_unkregs[0x63];
logerror("%s: performing dma src: %06x dst %04x len %04x and extra params %02x %02x %02x %02x %02x %02x\n", machine().describe_context(), dmasource, dmadest, dmalength, m_unkregs[0x67], m_unkregs[0x68], m_unkregs[0x69], m_unkregs[0x6b], m_unkregs[0x6c], m_unkregs[0x6d]);
for (uint32_t j = 0; j < dmalength; j++) for (uint32_t j = 0; j < dmalength; j++)
{ {
uint8_t byte = mem.read_byte(dmasource+j); uint8_t byte = mem.read_byte(dmasource+j);
mem.write_byte(dmadest+j, byte); mem.write_byte(dmadest+j, byte);
} }
// maybe
for (int i = 0x0; i < 0x10; i++)
{
m_unkregs[0x60 + i] = 0;
}
} }
break; break;
@ -812,28 +859,33 @@ WRITE8_MEMBER(trkfldch_state::unkregs_w)
logerror("%s: unkregs_w %04x %02x (dma length high)\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x (dma length high)\n", machine().describe_context(), offset, data);
break; break;
// the rest of these 60 range registers seem to control some kind of on/off step for source and destination, allowing rectangles to be copied from rom to ram
// but they don't get reset properly even if I clear them after an op (see above) so maybe I'm using the wrong trigger? DMA operations prior to them
// being used don't set them at all
case 0x67: // after a long time case 0x67: // after a long time
logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x (dma related)\n", machine().describe_context(), offset, data);
break; break;
case 0x68: // rarely (my1stddr) case 0x68: // rarely (my1stddr)
logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x (dma related)\n", machine().describe_context(), offset, data);
break; break;
case 0x69: // after a long time case 0x69: // after a long time
logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x (dma related)\n", machine().describe_context(), offset, data);
break; break;
case 0x6b: // after a long time case 0x6b: // after a long time
logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x (dma related)\n", machine().describe_context(), offset, data);
break; break;
case 0x6c: // rarely (my1stddr) case 0x6c: // rarely (my1stddr)
logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x (dma related)\n", machine().describe_context(), offset, data);
break; break;
case 0x6d: // after a long time case 0x6d: // after a long time
logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x (dma related)\n", machine().describe_context(), offset, data);
break; break;
@ -842,76 +894,76 @@ WRITE8_MEMBER(trkfldch_state::unkregs_w)
case 0x71: // startup case 0x71: // startup
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x72: // startup case 0x72: // startup
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x73: // some kind of serial device? case 0x73: // some kind of serial device?
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x74: // startup case 0x74: // startup
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x75: // some kind of serial device? (used with 73?) case 0x75: // some kind of serial device? (used with 73?)
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x76: // startup case 0x76: // startup
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x77: // every second or so case 0x77: // every second or so
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x78: // startup case 0x78: // startup
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x79: // startup case 0x79: // startup
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x7a: // startup case 0x7a: // startup
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x7f: // startup case 0x7f: // startup
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x81: // startup (my1stddr) case 0x81: // startup (my1stddr)
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x82: // startup (my1stddr) case 0x82: // startup (my1stddr)
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x83: case 0x83:
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0x84: case 0x84:
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0xb5: // startup case 0xb5: // startup
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
case 0xb6: // significant data transfer shortly after boot, seems to clock writes with 0073 writing d0 / c0? (then writes 2 bytes here) case 0xb6: // significant data transfer shortly after boot, seems to clock writes with 0073 writing d0 / c0? (then writes 2 bytes here)
// values are coming from a structure in RAM // values are coming from a structure in RAM
// how does it reset? // how does it reset?
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
m_unkdata[m_unkdata_addr] = data; m_unkdata[m_unkdata_addr] = data;
m_unkdata_addr++; m_unkdata_addr++;
@ -921,12 +973,12 @@ WRITE8_MEMBER(trkfldch_state::unkregs_w)
case 0xca: // startup case 0xca: // startup
//logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
default: default:
//printf("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data); logerror("%s: unkregs_w %04x %02x\n", machine().describe_context(), offset, data);
break; break;
} }