summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Alex W. Jackson <alex.w.jackson@gmail.com>2014-06-04 08:08:09 +0000
committer Alex W. Jackson <alex.w.jackson@gmail.com>2014-06-04 08:08:09 +0000
commite9a514c441437c64aada72b30d31ab6f1fd9cfa7 (patch)
tree70909fc08d5e82c89b74fad3d225e072c65e2d9b
parente3558d6bdf8d7b193a2379366b7e76ed7d37ba7a (diff)
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)
-rw-r--r--src/mame/drivers/tail2nos.c16
-rw-r--r--src/mame/drivers/wecleman.c17
-rw-r--r--src/mame/includes/tail2nos.h5
-rw-r--r--src/mame/video/k051316.c59
-rw-r--r--src/mame/video/k051316.h10
-rw-r--r--src/mame/video/k052109.h1
-rw-r--r--src/mame/video/tail2nos.c24
-rw-r--r--src/mame/video/wecleman.c1
8 files changed, 43 insertions, 90 deletions
diff --git a/src/mame/drivers/tail2nos.c b/src/mame/drivers/tail2nos.c
index 50c5299ffe2..1e6bdd64f2c 100644
--- a/src/mame/drivers/tail2nos.c
+++ b/src/mame/drivers/tail2nos.c
@@ -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
diff --git a/src/mame/drivers/wecleman.c b/src/mame/drivers/wecleman.c
index 383b2044d5a..9045f33997c 100644
--- a/src/mame/drivers/wecleman.c
+++ b/src/mame/drivers/wecleman.c
@@ -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;
}
diff --git a/src/mame/includes/tail2nos.h b/src/mame/includes/tail2nos.h
index 1c2dec8120d..8341049fcd9 100644
--- a/src/mame/includes/tail2nos.h
+++ b/src/mame/includes/tail2nos.h
@@ -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);
diff --git a/src/mame/video/k051316.c b/src/mame/video/k051316.c
index f0f85b12058..56a58ce35e5 100644
--- a/src/mame/video/k051316.c
+++ b/src/mame/video/k051316.c
@@ -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;
diff --git a/src/mame/video/k051316.h b/src/mame/video/k051316.h
index bccf18432c9..e5fae6b6eb2 100644
--- a/src/mame/video/k051316.h
+++ b/src/mame/video/k051316.h
@@ -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);
diff --git a/src/mame/video/k052109.h b/src/mame/video/k052109.h
index 47ca4a063b5..99164157994 100644
--- a/src/mame/video/k052109.h
+++ b/src/mame/video/k052109.h
@@ -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;
diff --git a/src/mame/video/tail2nos.c b/src/mame/video/tail2nos.c
index 624ebf2f92f..0d54fb79711 100644
--- a/src/mame/video/tail2nos.c
+++ b/src/mame/video/tail2nos.c
@@ -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)
diff --git a/src/mame/video/wecleman.c b/src/mame/video/wecleman.c
index b72cc0900aa..ac2df89d176 100644
--- a/src/mame/video/wecleman.c
+++ b/src/mame/video/wecleman.c
@@ -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);
}