Previous 199869 Revisions Next

r30821 Wednesday 4th June, 2014 at 08:08:09 UTC by Alex Jackson
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)
[src/mame/drivers]tail2nos.c wecleman.c
[src/mame/includes]tail2nos.h
[src/mame/video]k051316.c k051316.h k052109.h tail2nos.c wecleman.c

trunk/src/mame/includes/tail2nos.h
r30820r30821
1313      : driver_device(mconfig, type, tag),
1414      m_bgvideoram(*this, "bgvideoram"),
1515      m_spriteram(*this, "spriteram"),
16      m_zoomram(*this, "k051316"),
1617      m_maincpu(*this, "maincpu"),
1718      m_audiocpu(*this, "audiocpu"),
1819      m_k051316(*this, "k051316"),
r30820r30821
2223   /* memory pointers */
2324   required_shared_ptr<UINT16> m_bgvideoram;
2425   required_shared_ptr<UINT16> m_spriteram;
25   UINT16 *    m_zoomdata;
26//  UINT16 *    m_paletteram;    // currently this uses generic palette handling
26   required_shared_ptr<UINT16> m_zoomram;
2727
2828   /* video-related */
2929   tilemap_t   *m_bg_tilemap;
r30820r30821
4040
4141   DECLARE_WRITE16_MEMBER(sound_command_w);
4242   DECLARE_WRITE16_MEMBER(tail2nos_bgvideoram_w);
43   DECLARE_READ16_MEMBER(tail2nos_zoomdata_r);
4443   DECLARE_WRITE16_MEMBER(tail2nos_zoomdata_w);
4544   DECLARE_WRITE16_MEMBER(tail2nos_gfxbank_w);
4645   DECLARE_WRITE8_MEMBER(sound_bankswitch_w);
trunk/src/mame/video/wecleman.c
r30820r30821
970970
971971K051316_CB_MEMBER(wecleman_state::hotchase_zoom_callback_2)
972972{
973   *code |= (*color & 0x01) << 8;
974973   *color = ((*color & 0x3f) << 1) | ((*code & 0x80) >> 7);
975974}
976975
trunk/src/mame/video/k051316.c
r30820r30821
11/*
2Konami 051316
2Konami 051316 PSAC
33------
44Manages a 32x32 tilemap (16x16 tiles, 512x512 pixels) which can be zoomed,
55distorted and rotated.
r30820r30821
8383   256*8
8484};
8585
86const gfx_layout k051316_device::charlayout_tail2nos =
87{
88   16,16,
89   RGN_FRAC(1,1),
90   4,
91   { 0, 1, 2, 3 },
92   { WORD_XOR_BE(0)*4, WORD_XOR_BE(1)*4, WORD_XOR_BE(2)*4, WORD_XOR_BE(3)*4,
93      WORD_XOR_BE(4)*4, WORD_XOR_BE(5)*4, WORD_XOR_BE(6)*4, WORD_XOR_BE(7)*4,
94      WORD_XOR_BE(8)*4, WORD_XOR_BE(9)*4, WORD_XOR_BE(10)*4, WORD_XOR_BE(11)*4,
95      WORD_XOR_BE(12)*4, WORD_XOR_BE(13)*4, WORD_XOR_BE(14)*4, WORD_XOR_BE(15)*4 },
96   { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64,
97      8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 },
98   128*8
99};
10086
101
10287GFXDECODE_MEMBER( k051316_device::gfxinfo )
10388   GFXDECODE_DEVICE(DEVICE_SELF, 0, charlayout4, 0, 1)
10489GFXDECODE_END
r30820r30821
11196   GFXDECODE_DEVICE(DEVICE_SELF, 0, charlayout8, 0, 1)
11297GFXDECODE_END
11398
114GFXDECODE_MEMBER( k051316_device::gfxinfo4_tail2nos )
115   GFXDECODE_DEVICE(DEVICE_SELF, 0, charlayout_tail2nos, 0, 1)
99GFXDECODE_MEMBER( k051316_device::gfxinfo4_ram )
100   GFXDECODE_DEVICE_RAM(DEVICE_SELF, 0, charlayout4, 0, 1)
116101GFXDECODE_END
117102
118103
119104k051316_device::k051316_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
120   : device_t(mconfig, K051316, "K051316 Video Controller", tag, owner, clock, "k051316", __FILE__),
105   : device_t(mconfig, K051316, "K051316 PSAC", tag, owner, clock, "k051316", __FILE__),
121106      device_gfx_interface(mconfig, *this, gfxinfo),
122      m_ram(NULL),
123107      m_zoom_rom(NULL),
124108      m_zoom_size(0),
125109      m_dx(0),
126110      m_dy(0),
127111      m_wrap(0),
128      m_pen_is_mask(false),
129      m_bpp(0),
112      m_pen_is_mask(false),
113      m_pixels_per_byte(2), // 4bpp layout is default
130114      m_transparent_pen(0)
131115{
132116}
r30820r30821
134118void k051316_device::set_bpp(device_t &device, int bpp)
135119{
136120   k051316_device &dev = downcast<k051316_device &>(device);
137   dev.m_bpp = bpp;
138121
139122   switch(bpp)
140123   {
141124      case 4:
142125         device_gfx_interface::static_set_info(dev, gfxinfo);
126         dev.m_pixels_per_byte = 2;
143127         break;
144128      case 7:
145129         device_gfx_interface::static_set_info(dev, gfxinfo7);
130         dev.m_pixels_per_byte = 1;
146131         break;
147132      case 8:
148133         device_gfx_interface::static_set_info(dev, gfxinfo8);
134         dev.m_pixels_per_byte = 1;
149135         break;
150136      case -4:
151         device_gfx_interface::static_set_info(dev, gfxinfo4_tail2nos);
152         dev.m_bpp = 4;
137         device_gfx_interface::static_set_info(dev, gfxinfo4_ram);
138         dev.m_pixels_per_byte = 2;
153139         break;
154140      default:
155141         fatalerror("Unsupported bpp\n");
r30820r30821
164150
165151void k051316_device::device_start()
166152{
167   m_zoom_rom = region()->base();
168   m_zoom_size = region()->bytes();
153   memory_region *ROM = region();
154   if (ROM != NULL)
155   {
156      m_zoom_rom = ROM->base();
157      m_zoom_size = ROM->bytes();
158   }
169159
170160   decode_gfx();
171161   gfx(0)->set_colors(palette()->entries() / gfx(0)->depth());
172   if (m_bpp == 4)
173      gfx(0)->set_source_and_total(m_zoom_rom, m_zoom_size / 128);
174   else
175      gfx(0)->set_source_and_total(m_zoom_rom, m_zoom_size / 256);
176162
177163   m_tmap = &machine().tilemap().create(*this, tilemap_get_info_delegate(FUNC(k051316_device::get_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
178   m_ram = auto_alloc_array_clear(machine(), UINT8, 0x800);
164   m_ram.resize_and_clear(0x800);
179165
180166   if (!m_pen_is_mask)
181167      m_tmap->set_transparent_pen(m_transparent_pen);
r30820r30821
188174   // bind callbacks
189175   m_k051316_cb.bind_relative_to(*owner());
190176
191   save_pointer(NAME(m_ram), 0x800);
177   save_item(NAME(m_ram));
192178   save_item(NAME(m_ctrlram));
193179   save_item(NAME(m_wrap));
194180
r30820r30821
221207
222208READ8_MEMBER( k051316_device::rom_r )
223209{
210   assert (m_zoom_size != 0);
211
224212   if ((m_ctrlram[0x0e] & 0x01) == 0)
225213   {
226214      int addr = offset + (m_ctrlram[0x0c] << 11) + (m_ctrlram[0x0d] << 19);
227      if (m_bpp <= 4)
228         addr /= 2;
215      addr /= m_pixels_per_byte;
229216      addr &= m_zoom_size - 1;
230217
231218      //  popmessage("%s: offset %04x addr %04x", space.machine().describe_context(), offset, addr);
r30820r30821
245232   //if (offset >= 0x0c) logerror("%s: write %02x to 051316 reg %x\n", space.machine().describe_context(), data, offset);
246233}
247234
248// a few games (ajax, rollerg, ultraman, etc.) can enable and disable wraparound after start
235// some games (ajax, rollerg, ultraman, etc.) have external logic that can enable or disable wraparound dynamically
249236void k051316_device::wraparound_enable( int status )
250237{
251238   m_wrap = status;
trunk/src/mame/video/k051316.h
r30820r30821
3232   static const gfx_layout charlayout4;
3333   static const gfx_layout charlayout7;
3434   static const gfx_layout charlayout8;
35   static const gfx_layout charlayout_tail2nos;
3635   DECLARE_GFXDECODE_MEMBER(gfxinfo);
3736   DECLARE_GFXDECODE_MEMBER(gfxinfo7);
3837   DECLARE_GFXDECODE_MEMBER(gfxinfo8);
39   DECLARE_GFXDECODE_MEMBER(gfxinfo4_tail2nos);
38   DECLARE_GFXDECODE_MEMBER(gfxinfo4_ram);
4039   
4140   // static configuration
4241   static void set_k051316_callback(device_t &device, k051316_cb_delegate callback) { downcast<k051316_device &>(device).m_k051316_cb = callback; }
r30820r30821
7473   void zoom_draw(screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect,int flags,UINT32 priority);
7574   void wraparound_enable(int status);
7675
77   void zoomram_updated(UINT32 offs) { gfx(0)->mark_dirty(offs); }
76   void mark_gfx_dirty(offs_t byteoffset) { gfx(0)->mark_dirty(byteoffset * m_pixels_per_byte / (16 * 16)); }
7877
7978protected:
8079   // device-level overrides
r30820r30821
8382
8483private:
8584   // internal state
86   UINT8 *m_ram;
85   dynamic_array<UINT8> m_ram;
8786   UINT8 m_ctrlram[16];
8887   tilemap_t *m_tmap;
8988
r30820r30821
9392   int m_dx, m_dy;
9493   int m_wrap;
9594   bool m_pen_is_mask;
96   int m_bpp, m_transparent_pen;
95   int m_pixels_per_byte;
96   int m_transparent_pen;
9797   k051316_cb_delegate m_k051316_cb;
9898
9999   TILE_GET_INFO_MEMBER(get_tile_info);
trunk/src/mame/video/k052109.h
r30820r30821
8787   UINT8    m_has_extra_video_ram;
8888   INT32    m_rmrd_line;
8989   UINT8    m_irq_enabled;
90   //INT32    m_dx[3], m_dy[3];
9190   UINT8    m_romsubbank, m_scrollctrl;
9291   required_device<gfxdecode_device> m_gfxdecode;
9392   required_device<palette_device> m_palette;
trunk/src/mame/video/tail2nos.c
r30820r30821
4444
4545   m_bg_tilemap->mark_all_dirty();
4646
47   for (i = 0; i < 0x20000; i += 64)
48   {
49      m_gfxdecode->gfx(2)->mark_dirty(i / 64);
50   }
47   m_k051316->gfx(0)->mark_all_dirty();
5148}
5249
5350void tail2nos_state::video_start()
r30820r30821
5653
5754   m_bg_tilemap->set_transparent_pen(15);
5855
59   m_zoomdata = (UINT16 *)memregion("k051316")->base();
60
61   save_pointer(NAME(m_zoomdata), 0x20000 / 2);
6256   machine().save().register_postload(save_prepost_delegate(FUNC(tail2nos_state::tail2nos_postload), this));
6357}
6458
r30820r30821
7670   m_bg_tilemap->mark_tile_dirty(offset);
7771}
7872
79READ16_MEMBER(tail2nos_state::tail2nos_zoomdata_r)
80{
81   return m_zoomdata[offset];
82}
83
8473WRITE16_MEMBER(tail2nos_state::tail2nos_zoomdata_w)
8574{
86   int oldword = m_zoomdata[offset];
87
88   COMBINE_DATA(&m_zoomdata[offset]);
89   // mark dirty the tilemap inside K051316 device
90   if (oldword != m_zoomdata[offset])
91      m_k051316->zoomram_updated(offset / 64);
75   int oldword = m_zoomram[offset];
76   COMBINE_DATA(&m_zoomram[offset]);
77   // tell the K051316 device the data changed
78   if (oldword != m_zoomram[offset])
79      m_k051316->mark_gfx_dirty(offset * 2);
9280}
9381
9482WRITE16_MEMBER(tail2nos_state::tail2nos_gfxbank_w)
trunk/src/mame/drivers/wecleman.c
r30820r30821
13731373   ROM_REGION( 0x20000, "k051316_1", 0 )    /* bg */
13741374   ROM_LOAD( "763e14", 0x000000, 0x020000, CRC(60392aa1) SHA1(8499eb40a246587e24f6fd00af2eaa6d75ee6363) )
13751375
1376   ROM_REGION( 0x10000, "k051316_2", 0 )    /* fg (patched) */
1377   ROM_LOAD( "763a13", 0x000000, 0x010000, CRC(8bed8e0d) SHA1(ccff330abc23fe499e76c16cab5783c3daf155dd) )
1376   ROM_REGION( 0x08000, "k051316_2", 0 )    /* fg */
1377   /* first half empty - PCB silkscreen reads "27256/27512" */
1378   ROM_LOAD( "763a13", 0x000000, 0x008000, CRC(8bed8e0d) SHA1(ccff330abc23fe499e76c16cab5783c3daf155dd) )
1379   ROM_CONTINUE( 0x000000, 0x008000 )
13781380
13791381   ROM_REGION( 0x20000, "gfx4", 0 )    /* road */
13801382   ROM_LOAD( "763e15", 0x000000, 0x020000, CRC(7110aa43) SHA1(639dc002cc1580f0530bb5bb17f574e2258d5954) )
r30820r30821
14491451//  UINT16 *RAM1 = (UINT16) memregion("maincpu")->base(); /* Main CPU patches */
14501452//  RAM[0x1140/2] = 0x0015; RAM[0x195c/2] = 0x601A; // faster self test
14511453
1452   UINT8 *RAM;
1453
1454   /* Decode GFX Roms */
1455
1456   /* Let's swap even and odd bytes of the sprites gfx roms */
1457   RAM = memregion("gfx1")->base();
1458
14591454   /* Now we can unpack each nibble of the sprites into a pixel (one byte) */
14601455   hotchase_sprite_decode(3,0x80000*2);  // num banks, bank len
14611456
1462   /* Let's copy the second half of the fg layer gfx (charset) over the first */
1463   RAM = memregion("k051316_2")->base();
1464   memcpy(&RAM[0], &RAM[0x10000/2], 0x10000/2);
1465
14661457   m_spr_color_offs = 0;
14671458}
14681459
trunk/src/mame/drivers/tail2nos.c
r30820r30821
3232
3333static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, tail2nos_state )
3434   AM_RANGE(0x000000, 0x03ffff) AM_ROM
35   AM_RANGE(0x200000, 0x27ffff) AM_ROMBANK("bank1")    /* extra ROM */
36   AM_RANGE(0x2c0000, 0x2dffff) AM_ROMBANK("bank2")
37   AM_RANGE(0x400000, 0x41ffff) AM_READWRITE(tail2nos_zoomdata_r, tail2nos_zoomdata_w)
35   AM_RANGE(0x200000, 0x27ffff) AM_ROM AM_REGION("user1", 0)    /* extra ROM */
36   AM_RANGE(0x2c0000, 0x2dffff) AM_ROM AM_REGION("user2", 0)
37   AM_RANGE(0x400000, 0x41ffff) AM_RAM_WRITE(tail2nos_zoomdata_w) AM_SHARE("k051316")
3838   AM_RANGE(0x500000, 0x500fff) AM_DEVREADWRITE8("k051316", k051316_device, read, write, 0x00ff)
3939   AM_RANGE(0x510000, 0x51001f) AM_DEVWRITE8("k051316", k051316_device, ctrl_w, 0x00ff)
4040   AM_RANGE(0xff8000, 0xffbfff) AM_RAM                             /* work RAM */
r30820r30821
194194
195195void tail2nos_state::machine_reset()
196196{
197   /* point to the extra ROMs */
198   membank("bank1")->set_base(memregion("user1")->base());
199   membank("bank2")->set_base(memregion("user2")->base());
200
201197   m_charbank = 0;
202198   m_charpalette = 0;
203199   m_video_enable = 0;
r30820r30821
278274   ROM_LOAD( "oj1",          0x000000, 0x40000, CRC(39c36b35) SHA1(a97480696bf6d81bf415737e03cc5324d439ab84) )
279275   ROM_LOAD( "oj2",          0x040000, 0x40000, CRC(77ccaea2) SHA1(e38175859c75c6d0f2f01752fad6e167608c4662) )
280276
281   ROM_REGION( 0x20000, "k051316", ROMREGION_ERASE00 )
282   /* RAM, not ROM - handled at run time */
283
284277   ROM_REGION( 0x20000, "ymsnd", 0 ) /* sound samples */
285278   ROM_LOAD( "osb",          0x00000, 0x20000, CRC(d49ab2f5) SHA1(92f7f6c8f35ac39910879dd88d2cfb6db7c848c9) )
286279ROM_END
r30820r30821
313306   ROM_LOAD( "oj1",          0x000000, 0x40000, CRC(39c36b35) SHA1(a97480696bf6d81bf415737e03cc5324d439ab84) )
314307   ROM_LOAD( "oj2",          0x040000, 0x40000, CRC(77ccaea2) SHA1(e38175859c75c6d0f2f01752fad6e167608c4662) )
315308
316   ROM_REGION( 0x20000, "k051316", ROMREGION_ERASE00 )
317   /* RAM, not ROM - handled at run time */
318
319309   ROM_REGION( 0x20000, "ymsnd", 0 ) /* sound samples */
320310   ROM_LOAD( "osb",          0x00000, 0x20000, CRC(d49ab2f5) SHA1(92f7f6c8f35ac39910879dd88d2cfb6db7c848c9) )
321311ROM_END

Previous 199869 Revisions Next


© 1997-2024 The MAME Team