Clean up hotchase and tail2nos as requested by Fabio. Use official (and actually formerly trademarked in the US) name for the k051316 as longname (nw)

This commit is contained in:
Alex W. Jackson 2014-06-04 08:08:09 +00:00
parent e3558d6bdf
commit e9a514c441
8 changed files with 43 additions and 90 deletions

View File

@ -32,9 +32,9 @@ WRITE8_MEMBER(tail2nos_state::sound_bankswitch_w)
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, tail2nos_state )
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x200000, 0x27ffff) AM_ROMBANK("bank1") /* extra ROM */
AM_RANGE(0x2c0000, 0x2dffff) AM_ROMBANK("bank2")
AM_RANGE(0x400000, 0x41ffff) AM_READWRITE(tail2nos_zoomdata_r, tail2nos_zoomdata_w)
AM_RANGE(0x200000, 0x27ffff) AM_ROM AM_REGION("user1", 0) /* extra ROM */
AM_RANGE(0x2c0000, 0x2dffff) AM_ROM AM_REGION("user2", 0)
AM_RANGE(0x400000, 0x41ffff) AM_RAM_WRITE(tail2nos_zoomdata_w) AM_SHARE("k051316")
AM_RANGE(0x500000, 0x500fff) AM_DEVREADWRITE8("k051316", k051316_device, read, write, 0x00ff)
AM_RANGE(0x510000, 0x51001f) AM_DEVWRITE8("k051316", k051316_device, ctrl_w, 0x00ff)
AM_RANGE(0xff8000, 0xffbfff) AM_RAM /* work RAM */
@ -194,10 +194,6 @@ void tail2nos_state::machine_start()
void tail2nos_state::machine_reset()
{
/* point to the extra ROMs */
membank("bank1")->set_base(memregion("user1")->base());
membank("bank2")->set_base(memregion("user2")->base());
m_charbank = 0;
m_charpalette = 0;
m_video_enable = 0;
@ -278,9 +274,6 @@ ROM_START( tail2nos )
ROM_LOAD( "oj1", 0x000000, 0x40000, CRC(39c36b35) SHA1(a97480696bf6d81bf415737e03cc5324d439ab84) )
ROM_LOAD( "oj2", 0x040000, 0x40000, CRC(77ccaea2) SHA1(e38175859c75c6d0f2f01752fad6e167608c4662) )
ROM_REGION( 0x20000, "k051316", ROMREGION_ERASE00 )
/* RAM, not ROM - handled at run time */
ROM_REGION( 0x20000, "ymsnd", 0 ) /* sound samples */
ROM_LOAD( "osb", 0x00000, 0x20000, CRC(d49ab2f5) SHA1(92f7f6c8f35ac39910879dd88d2cfb6db7c848c9) )
ROM_END
@ -313,9 +306,6 @@ ROM_START( sformula )
ROM_LOAD( "oj1", 0x000000, 0x40000, CRC(39c36b35) SHA1(a97480696bf6d81bf415737e03cc5324d439ab84) )
ROM_LOAD( "oj2", 0x040000, 0x40000, CRC(77ccaea2) SHA1(e38175859c75c6d0f2f01752fad6e167608c4662) )
ROM_REGION( 0x20000, "k051316", ROMREGION_ERASE00 )
/* RAM, not ROM - handled at run time */
ROM_REGION( 0x20000, "ymsnd", 0 ) /* sound samples */
ROM_LOAD( "osb", 0x00000, 0x20000, CRC(d49ab2f5) SHA1(92f7f6c8f35ac39910879dd88d2cfb6db7c848c9) )
ROM_END

View File

@ -1373,8 +1373,10 @@ ROM_START( hotchase )
ROM_REGION( 0x20000, "k051316_1", 0 ) /* bg */
ROM_LOAD( "763e14", 0x000000, 0x020000, CRC(60392aa1) SHA1(8499eb40a246587e24f6fd00af2eaa6d75ee6363) )
ROM_REGION( 0x10000, "k051316_2", 0 ) /* fg (patched) */
ROM_LOAD( "763a13", 0x000000, 0x010000, CRC(8bed8e0d) SHA1(ccff330abc23fe499e76c16cab5783c3daf155dd) )
ROM_REGION( 0x08000, "k051316_2", 0 ) /* fg */
/* first half empty - PCB silkscreen reads "27256/27512" */
ROM_LOAD( "763a13", 0x000000, 0x008000, CRC(8bed8e0d) SHA1(ccff330abc23fe499e76c16cab5783c3daf155dd) )
ROM_CONTINUE( 0x000000, 0x008000 )
ROM_REGION( 0x20000, "gfx4", 0 ) /* road */
ROM_LOAD( "763e15", 0x000000, 0x020000, CRC(7110aa43) SHA1(639dc002cc1580f0530bb5bb17f574e2258d5954) )
@ -1449,20 +1451,9 @@ DRIVER_INIT_MEMBER(wecleman_state,hotchase)
// UINT16 *RAM1 = (UINT16) memregion("maincpu")->base(); /* Main CPU patches */
// RAM[0x1140/2] = 0x0015; RAM[0x195c/2] = 0x601A; // faster self test
UINT8 *RAM;
/* Decode GFX Roms */
/* Let's swap even and odd bytes of the sprites gfx roms */
RAM = memregion("gfx1")->base();
/* Now we can unpack each nibble of the sprites into a pixel (one byte) */
hotchase_sprite_decode(3,0x80000*2); // num banks, bank len
/* Let's copy the second half of the fg layer gfx (charset) over the first */
RAM = memregion("k051316_2")->base();
memcpy(&RAM[0], &RAM[0x10000/2], 0x10000/2);
m_spr_color_offs = 0;
}

View File

@ -13,6 +13,7 @@ public:
: driver_device(mconfig, type, tag),
m_bgvideoram(*this, "bgvideoram"),
m_spriteram(*this, "spriteram"),
m_zoomram(*this, "k051316"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_k051316(*this, "k051316"),
@ -22,8 +23,7 @@ public:
/* memory pointers */
required_shared_ptr<UINT16> m_bgvideoram;
required_shared_ptr<UINT16> m_spriteram;
UINT16 * m_zoomdata;
// UINT16 * m_paletteram; // currently this uses generic palette handling
required_shared_ptr<UINT16> m_zoomram;
/* video-related */
tilemap_t *m_bg_tilemap;
@ -40,7 +40,6 @@ public:
DECLARE_WRITE16_MEMBER(sound_command_w);
DECLARE_WRITE16_MEMBER(tail2nos_bgvideoram_w);
DECLARE_READ16_MEMBER(tail2nos_zoomdata_r);
DECLARE_WRITE16_MEMBER(tail2nos_zoomdata_w);
DECLARE_WRITE16_MEMBER(tail2nos_gfxbank_w);
DECLARE_WRITE8_MEMBER(sound_bankswitch_w);

View File

@ -1,5 +1,5 @@
/*
Konami 051316
Konami 051316 PSAC
------
Manages a 32x32 tilemap (16x16 tiles, 512x512 pixels) which can be zoomed,
distorted and rotated.
@ -83,21 +83,6 @@ const gfx_layout k051316_device::charlayout8 =
256*8
};
const gfx_layout k051316_device::charlayout_tail2nos =
{
16,16,
RGN_FRAC(1,1),
4,
{ 0, 1, 2, 3 },
{ WORD_XOR_BE(0)*4, WORD_XOR_BE(1)*4, WORD_XOR_BE(2)*4, WORD_XOR_BE(3)*4,
WORD_XOR_BE(4)*4, WORD_XOR_BE(5)*4, WORD_XOR_BE(6)*4, WORD_XOR_BE(7)*4,
WORD_XOR_BE(8)*4, WORD_XOR_BE(9)*4, WORD_XOR_BE(10)*4, WORD_XOR_BE(11)*4,
WORD_XOR_BE(12)*4, WORD_XOR_BE(13)*4, WORD_XOR_BE(14)*4, WORD_XOR_BE(15)*4 },
{ 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64,
8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 },
128*8
};
GFXDECODE_MEMBER( k051316_device::gfxinfo )
GFXDECODE_DEVICE(DEVICE_SELF, 0, charlayout4, 0, 1)
@ -111,22 +96,21 @@ GFXDECODE_MEMBER( k051316_device::gfxinfo8 )
GFXDECODE_DEVICE(DEVICE_SELF, 0, charlayout8, 0, 1)
GFXDECODE_END
GFXDECODE_MEMBER( k051316_device::gfxinfo4_tail2nos )
GFXDECODE_DEVICE(DEVICE_SELF, 0, charlayout_tail2nos, 0, 1)
GFXDECODE_MEMBER( k051316_device::gfxinfo4_ram )
GFXDECODE_DEVICE_RAM(DEVICE_SELF, 0, charlayout4, 0, 1)
GFXDECODE_END
k051316_device::k051316_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, K051316, "K051316 Video Controller", tag, owner, clock, "k051316", __FILE__),
: device_t(mconfig, K051316, "K051316 PSAC", tag, owner, clock, "k051316", __FILE__),
device_gfx_interface(mconfig, *this, gfxinfo),
m_ram(NULL),
m_zoom_rom(NULL),
m_zoom_size(0),
m_dx(0),
m_dy(0),
m_wrap(0),
m_pen_is_mask(false),
m_bpp(0),
m_pen_is_mask(false),
m_pixels_per_byte(2), // 4bpp layout is default
m_transparent_pen(0)
{
}
@ -134,22 +118,24 @@ k051316_device::k051316_device(const machine_config &mconfig, const char *tag, d
void k051316_device::set_bpp(device_t &device, int bpp)
{
k051316_device &dev = downcast<k051316_device &>(device);
dev.m_bpp = bpp;
switch(bpp)
{
case 4:
device_gfx_interface::static_set_info(dev, gfxinfo);
dev.m_pixels_per_byte = 2;
break;
case 7:
device_gfx_interface::static_set_info(dev, gfxinfo7);
dev.m_pixels_per_byte = 1;
break;
case 8:
device_gfx_interface::static_set_info(dev, gfxinfo8);
dev.m_pixels_per_byte = 1;
break;
case -4:
device_gfx_interface::static_set_info(dev, gfxinfo4_tail2nos);
dev.m_bpp = 4;
device_gfx_interface::static_set_info(dev, gfxinfo4_ram);
dev.m_pixels_per_byte = 2;
break;
default:
fatalerror("Unsupported bpp\n");
@ -164,18 +150,18 @@ void k051316_device::set_bpp(device_t &device, int bpp)
void k051316_device::device_start()
{
m_zoom_rom = region()->base();
m_zoom_size = region()->bytes();
memory_region *ROM = region();
if (ROM != NULL)
{
m_zoom_rom = ROM->base();
m_zoom_size = ROM->bytes();
}
decode_gfx();
gfx(0)->set_colors(palette()->entries() / gfx(0)->depth());
if (m_bpp == 4)
gfx(0)->set_source_and_total(m_zoom_rom, m_zoom_size / 128);
else
gfx(0)->set_source_and_total(m_zoom_rom, m_zoom_size / 256);
m_tmap = &machine().tilemap().create(*this, tilemap_get_info_delegate(FUNC(k051316_device::get_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
m_ram = auto_alloc_array_clear(machine(), UINT8, 0x800);
m_ram.resize_and_clear(0x800);
if (!m_pen_is_mask)
m_tmap->set_transparent_pen(m_transparent_pen);
@ -188,7 +174,7 @@ void k051316_device::device_start()
// bind callbacks
m_k051316_cb.bind_relative_to(*owner());
save_pointer(NAME(m_ram), 0x800);
save_item(NAME(m_ram));
save_item(NAME(m_ctrlram));
save_item(NAME(m_wrap));
@ -221,11 +207,12 @@ WRITE8_MEMBER( k051316_device::write )
READ8_MEMBER( k051316_device::rom_r )
{
assert (m_zoom_size != 0);
if ((m_ctrlram[0x0e] & 0x01) == 0)
{
int addr = offset + (m_ctrlram[0x0c] << 11) + (m_ctrlram[0x0d] << 19);
if (m_bpp <= 4)
addr /= 2;
addr /= m_pixels_per_byte;
addr &= m_zoom_size - 1;
// popmessage("%s: offset %04x addr %04x", space.machine().describe_context(), offset, addr);
@ -245,7 +232,7 @@ WRITE8_MEMBER( k051316_device::ctrl_w )
//if (offset >= 0x0c) logerror("%s: write %02x to 051316 reg %x\n", space.machine().describe_context(), data, offset);
}
// a few games (ajax, rollerg, ultraman, etc.) can enable and disable wraparound after start
// some games (ajax, rollerg, ultraman, etc.) have external logic that can enable or disable wraparound dynamically
void k051316_device::wraparound_enable( int status )
{
m_wrap = status;

View File

@ -32,11 +32,10 @@ public:
static const gfx_layout charlayout4;
static const gfx_layout charlayout7;
static const gfx_layout charlayout8;
static const gfx_layout charlayout_tail2nos;
DECLARE_GFXDECODE_MEMBER(gfxinfo);
DECLARE_GFXDECODE_MEMBER(gfxinfo7);
DECLARE_GFXDECODE_MEMBER(gfxinfo8);
DECLARE_GFXDECODE_MEMBER(gfxinfo4_tail2nos);
DECLARE_GFXDECODE_MEMBER(gfxinfo4_ram);
// static configuration
static void set_k051316_callback(device_t &device, k051316_cb_delegate callback) { downcast<k051316_device &>(device).m_k051316_cb = callback; }
@ -74,7 +73,7 @@ public:
void zoom_draw(screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect,int flags,UINT32 priority);
void wraparound_enable(int status);
void zoomram_updated(UINT32 offs) { gfx(0)->mark_dirty(offs); }
void mark_gfx_dirty(offs_t byteoffset) { gfx(0)->mark_dirty(byteoffset * m_pixels_per_byte / (16 * 16)); }
protected:
// device-level overrides
@ -83,7 +82,7 @@ protected:
private:
// internal state
UINT8 *m_ram;
dynamic_array<UINT8> m_ram;
UINT8 m_ctrlram[16];
tilemap_t *m_tmap;
@ -93,7 +92,8 @@ private:
int m_dx, m_dy;
int m_wrap;
bool m_pen_is_mask;
int m_bpp, m_transparent_pen;
int m_pixels_per_byte;
int m_transparent_pen;
k051316_cb_delegate m_k051316_cb;
TILE_GET_INFO_MEMBER(get_tile_info);

View File

@ -87,7 +87,6 @@ private:
UINT8 m_has_extra_video_ram;
INT32 m_rmrd_line;
UINT8 m_irq_enabled;
//INT32 m_dx[3], m_dy[3];
UINT8 m_romsubbank, m_scrollctrl;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;

View File

@ -44,10 +44,7 @@ void tail2nos_state::tail2nos_postload()
m_bg_tilemap->mark_all_dirty();
for (i = 0; i < 0x20000; i += 64)
{
m_gfxdecode->gfx(2)->mark_dirty(i / 64);
}
m_k051316->gfx(0)->mark_all_dirty();
}
void tail2nos_state::video_start()
@ -56,9 +53,6 @@ void tail2nos_state::video_start()
m_bg_tilemap->set_transparent_pen(15);
m_zoomdata = (UINT16 *)memregion("k051316")->base();
save_pointer(NAME(m_zoomdata), 0x20000 / 2);
machine().save().register_postload(save_prepost_delegate(FUNC(tail2nos_state::tail2nos_postload), this));
}
@ -76,19 +70,13 @@ WRITE16_MEMBER(tail2nos_state::tail2nos_bgvideoram_w)
m_bg_tilemap->mark_tile_dirty(offset);
}
READ16_MEMBER(tail2nos_state::tail2nos_zoomdata_r)
{
return m_zoomdata[offset];
}
WRITE16_MEMBER(tail2nos_state::tail2nos_zoomdata_w)
{
int oldword = m_zoomdata[offset];
COMBINE_DATA(&m_zoomdata[offset]);
// mark dirty the tilemap inside K051316 device
if (oldword != m_zoomdata[offset])
m_k051316->zoomram_updated(offset / 64);
int oldword = m_zoomram[offset];
COMBINE_DATA(&m_zoomram[offset]);
// tell the K051316 device the data changed
if (oldword != m_zoomram[offset])
m_k051316->mark_gfx_dirty(offset * 2);
}
WRITE16_MEMBER(tail2nos_state::tail2nos_gfxbank_w)

View File

@ -970,7 +970,6 @@ K051316_CB_MEMBER(wecleman_state::hotchase_zoom_callback_1)
K051316_CB_MEMBER(wecleman_state::hotchase_zoom_callback_2)
{
*code |= (*color & 0x01) << 8;
*color = ((*color & 0x3f) << 1) | ((*code & 0x80) >> 7);
}