diff options
-rw-r--r-- | src/mame/drivers/tail2nos.c | 16 | ||||
-rw-r--r-- | src/mame/drivers/wecleman.c | 17 | ||||
-rw-r--r-- | src/mame/includes/tail2nos.h | 5 | ||||
-rw-r--r-- | src/mame/video/k051316.c | 59 | ||||
-rw-r--r-- | src/mame/video/k051316.h | 10 | ||||
-rw-r--r-- | src/mame/video/k052109.h | 1 | ||||
-rw-r--r-- | src/mame/video/tail2nos.c | 24 | ||||
-rw-r--r-- | src/mame/video/wecleman.c | 1 |
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); } |