mirror of
https://github.com/holub/mame
synced 2025-04-19 15:11:37 +03:00
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:
parent
e3558d6bdf
commit
e9a514c441
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user