Previous 199869 Revisions Next

r17653 Wednesday 5th September, 2012 at 09:47:52 UTC by Aaron Giles
WIP Namco System 2/21/etc cleanup/modernization.
[src/emu]tilemap.h
[src/mame/drivers]gal3.c namcofl.c namcoic.c namconb1.c namcos2.c namcos21.c
[src/mame/includes]namcofl.h namcoic.h namconb1.h namcos2.h namcos21.h
[src/mame/machine]namcos2.c
[src/mame/video]namcofl.c namconb1.c namcos2.c namcos21.c

trunk/src/mame/machine/namcos2.c
r17652r17653
2121static emu_timer *namcos2_posirq_timer;
2222
2323void (*namcos2_kickstart)(running_machine &machine, int internal);
24int namcos2_gametype;
2524
2625static unsigned mFinalLapProtCount;
2726static int namcos2_mcu_analog_ctrl;
r17652r17653
3130static int sendval;
3231
3332
33// not shared
3434READ16_HANDLER( namcos2_flap_prot_r )
3535{
3636   static const UINT16 table0[8] = { 0x0000,0x0040,0x0440,0x2440,0x2480,0xa080,0x8081,0x8041 };
r17652r17653
8686{
8787   cputag_set_input_line(machine, "slave", INPUT_LINE_RESET, state);
8888   cputag_set_input_line(machine, "mcu", INPUT_LINE_RESET, state);
89   switch( namcos2_gametype )
89   switch( machine.driver_data<namcos2_shared_state>()->m_gametype )
9090   {
9191   case NAMCOS21_SOLVALOU:
9292   case NAMCOS21_STARBLADE:
r17652r17653
232232
233233READ16_HANDLER( namcos2_68k_key_r )
234234{
235   switch (namcos2_gametype)
235   switch (space->machine().driver_data<namcos2_shared_state>()->m_gametype)
236236   {
237237   case NAMCOS2_ORDYNE:
238238      switch(offset)
r17652r17653
406406
407407WRITE16_HANDLER( namcos2_68k_key_w )
408408{
409   if( namcos2_gametype == NAMCOS2_MARVEL_LAND && offset == 5 )
409   int gametype = space->machine().driver_data<namcos2_shared_state>()->m_gametype;
410   if( gametype == NAMCOS2_MARVEL_LAND && offset == 5 )
410411   {
411412      if (data == 0x615E) sendval = 1;
412413   }
413   if( namcos2_gametype == NAMCOS2_ROLLING_THUNDER_2 && offset == 4 )
414   if( gametype == NAMCOS2_ROLLING_THUNDER_2 && offset == 4 )
414415   {
415416      if (data == 0x13EC) sendval = 1;
416417   }
417   if( namcos2_gametype == NAMCOS2_ROLLING_THUNDER_2 && offset == 7 )
418   if( gametype == NAMCOS2_ROLLING_THUNDER_2 && offset == 7 )
418419   {
419420      if (data == 0x13EC) sendval = 1;
420421   }
421   if( namcos2_gametype == NAMCOS2_MARVEL_LAND && offset == 6 )
422   if( gametype == NAMCOS2_MARVEL_LAND && offset == 6 )
422423   {
423424      if (data == 0x1001) sendval = 0;
424425   }
r17652r17653
437438static UINT16  namcos2_68k_gpu_C148[0x20];
438439
439440
440static int IsSystem21( void )
441bool namcos2_shared_state::is_system21()
441442{
442   switch( namcos2_gametype )
443   switch (m_gametype)
443444   {
444   case NAMCOS21_AIRCOMBAT:
445   case NAMCOS21_STARBLADE:
446   case NAMCOS21_CYBERSLED:
447   case NAMCOS21_SOLVALOU:
448   case NAMCOS21_WINRUN91:
449   case NAMCOS21_DRIVERS_EYES:
450      return 1;
451   default:
452      return 0;
445      case NAMCOS21_AIRCOMBAT:
446      case NAMCOS21_STARBLADE:
447      case NAMCOS21_CYBERSLED:
448      case NAMCOS21_SOLVALOU:
449      case NAMCOS21_WINRUN91:
450      case NAMCOS21_DRIVERS_EYES:
451         return 1;
452      default:
453         return 0;
453454   }
454455}
455456
r17652r17653
654655
655656static int GetPosIRQScanline( running_machine &machine )
656657{
657   if (IsSystem21()) return 0;
658   return namcos2_GetPosIrqScanline(machine);
658   namcos2_shared_state *state = machine.driver_data<namcos2_shared_state>();
659   if (state->is_system21()) return 0;
660   return downcast<namcos2_state *>(state)->get_pos_irq_scanline();
659661}
660662
661663static TIMER_CALLBACK( namcos2_posirq_tick )
662664{
663   if (IsSystem21()) {
665   namcos2_shared_state *state = machine.driver_data<namcos2_shared_state>();
666   if (state->is_system21()) {
664667      if (namcos2_68k_gpu_C148[NAMCOS2_C148_POSIRQ]) {
665668         machine.primary_screen->update_partial(param);
666669         cputag_set_input_line(machine, "gpu", namcos2_68k_gpu_C148[NAMCOS2_C148_POSIRQ] , ASSERT_LINE);
r17652r17653
682685
683686INTERRUPT_GEN( namcos2_68k_master_vblank )
684687{
685   if (!IsSystem21()) namcos2_adjust_posirq_timer(device->machine(), GetPosIRQScanline(device->machine()));
688   namcos2_shared_state *state = device->machine().driver_data<namcos2_shared_state>();
689   if (!state->is_system21()) namcos2_adjust_posirq_timer(device->machine(), GetPosIRQScanline(device->machine()));
686690   device_set_input_line(device, namcos2_68k_master_C148[NAMCOS2_C148_VBLANKIRQ], HOLD_LINE);
687691}
688692
689693INTERRUPT_GEN( namcos2_68k_slave_vblank )
690694{
691   if (!IsSystem21()) namcos2_adjust_posirq_timer(device->machine(), GetPosIRQScanline(device->machine()));
695   namcos2_shared_state *state = device->machine().driver_data<namcos2_shared_state>();
696   if (!state->is_system21()) namcos2_adjust_posirq_timer(device->machine(), GetPosIRQScanline(device->machine()));
692697   device_set_input_line(device, namcos2_68k_slave_C148[NAMCOS2_C148_VBLANKIRQ], HOLD_LINE);
693698}
694699
r17652r17653
765770#if 0
766771      /* Perform the offset handling on the input port */
767772      /* this converts it to a twos complement number */
768      if( namcos2_gametype == NAMCOS2_DIRT_FOX ||
769         namcos2_gametype == NAMCOS2_DIRT_FOX_JP )
773      if( m_gametype == NAMCOS2_DIRT_FOX ||
774         m_gametype == NAMCOS2_DIRT_FOX_JP )
770775      {
771776         namcos2_mcu_analog_data ^= 0x80;
772777      }
trunk/src/mame/video/namcofl.c
r17652r17653
22
33#include "emu.h"
44#include "includes/namcoic.h"
5#include "includes/namcos2.h"
65#include "includes/namcofl.h"
76
87
r17652r17653
8382
8483SCREEN_UPDATE_IND16( namcofl )
8584{
85   namcofl_state *state = screen.machine().driver_data<namcofl_state>();
8686   int pri;
8787
8888   namcofl_install_palette(screen.machine());
r17652r17653
9191
9292   for( pri=0; pri<16; pri++ )
9393   {
94      namco_roz_draw( bitmap,cliprect,pri );
94      state->c169_roz_draw(bitmap, cliprect, pri);
9595      if((pri&1)==0)
9696         namco_tilemap_draw( bitmap, cliprect, pri>>1 );
97      namco_obj_draw(screen.machine(), bitmap, cliprect, pri );
97      state->c355_obj_draw(bitmap, cliprect, pri );
9898   }
9999
100100   return 0;
r17652r17653
119119
120120VIDEO_START( namcofl )
121121{
122   namcofl_state *state = machine.driver_data<namcofl_state>();
122123   namco_tilemap_init( machine, NAMCOFL_TILEGFX, machine.root_device().memregion(NAMCOFL_TILEMASKREGION)->base(), TilemapCB );
123   namco_obj_init(machine,NAMCOFL_SPRITEGFX,0x0,FLobjcode2tile);
124   namco_roz_init(machine,NAMCOFL_ROTGFX,NAMCOFL_ROTMASKREGION);
124   state->c355_obj_init(NAMCOFL_SPRITEGFX,0x0,namcos2_shared_state::c355_obj_code2tile_delegate(FUNC(FLobjcode2tile), &machine));
125   state->c169_roz_init(NAMCOFL_ROTGFX,NAMCOFL_ROTMASKREGION);
125126}
trunk/src/mame/video/namconb1.c
r17652r17653
33#include "emu.h"
44#include "includes/namconb1.h"
55#include "includes/namcoic.h"
6#include "includes/namcos2.h"
76
87
98/* nth_word32 is a general-purpose utility function, which allows us to
r17652r17653
5251   namconb1_state *state = machine.driver_data<namconb1_state>();
5352   int mangle;
5453
55   if( namcos2_gametype == NAMCONB2_MACH_BREAKERS )
54   if( state->m_gametype == NAMCONB2_MACH_BREAKERS )
5655   {
5756      /*  00010203 04050607 00010203 04050607 (normal) */
5857      /*  00010718 191a1b07 00010708 090a0b07 (alt bank) */
r17652r17653
105104static void
106105video_update_common(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int bROZ )
107106{
107   namconb1_state *state = machine.driver_data<namconb1_state>();
108108   int pri;
109109   namconb1_install_palette(machine);
110110
r17652r17653
112112   {
113113      for( pri=0; pri<16; pri++ )
114114      {
115         namco_roz_draw( bitmap,cliprect,pri );
115         state->c169_roz_draw(bitmap, cliprect, pri);
116116         if( (pri&1)==0 )
117117         {
118118            namco_tilemap_draw( bitmap, cliprect, pri/2 );
119119         }
120         namco_obj_draw(machine, bitmap, cliprect, pri );
120         state->c355_obj_draw(bitmap, cliprect, pri );
121121      }
122122   }
123123   else
r17652r17653
125125      for( pri=0; pri<8; pri++ )
126126      {
127127         namco_tilemap_draw( bitmap, cliprect, pri );
128         namco_obj_draw(machine, bitmap, cliprect, pri );
128         state->c355_obj_draw(bitmap, cliprect, pri );
129129      }
130130   }
131131} /* video_update_common */
r17652r17653
164164
165165VIDEO_START( namconb1 )
166166{
167   namconb1_state *state = machine.driver_data<namconb1_state>();
167168   namco_tilemap_init( machine, NAMCONB1_TILEGFX, machine.root_device().memregion(NAMCONB1_TILEMASKREGION)->base(), NB1TilemapCB );
168   namco_obj_init(machine,NAMCONB1_SPRITEGFX,0x0,NB1objcode2tile);
169   state->c355_obj_init(NAMCONB1_SPRITEGFX,0x0,namcos2_shared_state::c355_obj_code2tile_delegate(FUNC(NB1objcode2tile), &machine));
169170} /* namconb1 */
170171
171172/****************************************************************************************************/
r17652r17653
202203   namconb1_state *state = machine.driver_data<namconb1_state>();
203204   int bank = nth_byte32( state->m_spritebank32, (code>>11)&0xf );
204205   code &= 0x7ff;
205   if( namcos2_gametype == NAMCONB2_MACH_BREAKERS )
206   if( state->m_gametype == NAMCONB2_MACH_BREAKERS )
206207   {
207208      if( bank&0x01 ) code |= 0x01*0x800;
208209      if( bank&0x02 ) code |= 0x02*0x800;
r17652r17653
225226
226227VIDEO_START( namconb2 )
227228{
229   namconb1_state *state = machine.driver_data<namconb1_state>();
228230   namco_tilemap_init(machine, NAMCONB1_TILEGFX, machine.root_device().memregion(NAMCONB1_TILEMASKREGION)->base(), NB2TilemapCB );
229   namco_obj_init(machine,NAMCONB1_SPRITEGFX,0x0,NB2objcode2tile);
230   namco_roz_init(machine, NAMCONB1_ROTGFX,NAMCONB1_ROTMASKREGION);
231   state->c355_obj_init(NAMCONB1_SPRITEGFX,0x0,namcos2_shared_state::c355_obj_code2tile_delegate(FUNC(NB2objcode2tile), &machine));
232   state->c169_roz_init(NAMCONB1_ROTGFX,NAMCONB1_ROTMASKREGION);
231233} /* namconb2_vh_start */
trunk/src/mame/video/namcos21.c
r17652r17653
77*/
88
99#include "emu.h"
10#include "includes/namcos2.h"
1110#include "includes/namcoic.h"
1211#include "includes/namcos21.h"
1312
r17652r17653
117116VIDEO_START( namcos21 )
118117{
119118   namcos21_state *state = machine.driver_data<namcos21_state>();
120   if( namcos2_gametype == NAMCOS21_WINRUN91 )
119   if( state->m_gametype == NAMCOS21_WINRUN91 )
121120   {
122121      state->m_videoram = auto_alloc_array(machine, UINT8, 0x80000);
123122   }
124123   AllocatePolyFrameBuffer(machine);
125   namco_obj_init(machine,
124   state->c355_obj_init(
126125      0,      /* gfx bank */
127126      0xf,   /* reverse palette mapping */
128      NULL );
127      namcos2_shared_state::c355_obj_code2tile_delegate() );
129128} /* VIDEO_START( namcos21 ) */
130129
131130static void
r17652r17653
176175   update_palette(screen.machine());
177176   bitmap.fill(0xff, cliprect );
178177
179   if( namcos2_gametype != NAMCOS21_WINRUN91 )
178   if( state->m_gametype != NAMCOS21_WINRUN91 )
180179   { /* draw low priority 2d sprites */
181      namco_obj_draw(screen.machine(), bitmap, cliprect, 2 );
182      namco_obj_draw(screen.machine(), bitmap, cliprect, 14 );   //driver's eyes
180      state->c355_obj_draw(bitmap, cliprect, 2 );
181      state->c355_obj_draw(bitmap, cliprect, 14 );   //driver's eyes
183182   }
184183
185184   CopyVisiblePolyFrameBuffer( screen.machine(), bitmap, cliprect, 0x7fc0, 0x7ffe );
186185
187   if( namcos2_gametype != NAMCOS21_WINRUN91 )
186   if( state->m_gametype != NAMCOS21_WINRUN91 )
188187   { /* draw low priority 2d sprites */
189      namco_obj_draw(screen.machine(), bitmap, cliprect, 0 );
190      namco_obj_draw(screen.machine(), bitmap, cliprect, 1 );
188      state->c355_obj_draw(bitmap, cliprect, 0 );
189      state->c355_obj_draw(bitmap, cliprect, 1 );
191190   }
192191
193192   CopyVisiblePolyFrameBuffer( screen.machine(), bitmap, cliprect, 0, 0x7fbf );
194193
195194
196   if( namcos2_gametype != NAMCOS21_WINRUN91 )
195   if( state->m_gametype != NAMCOS21_WINRUN91 )
197196   { /* draw high priority 2d sprites */
198197      for( pri=pivot; pri<8; pri++ )
199198      {
200         namco_obj_draw(screen.machine(), bitmap, cliprect, pri );
199         state->c355_obj_draw(bitmap, cliprect, pri );
201200      }
202         namco_obj_draw(screen.machine(), bitmap, cliprect, 15 );   //driver's eyes
201         state->c355_obj_draw(bitmap, cliprect, 15 );   //driver's eyes
203202   }
204203   else
205204   { /* winrun bitmap layer */
r17652r17653
288287               if( depthcueenable && zz>0 )
289288               {
290289                  int depth = 0;
291                  if( namcos2_gametype == NAMCOS21_WINRUN91 )
290                  if( state->m_gametype == NAMCOS21_WINRUN91 )
292291                  {
293292                     depth = (zz>>10)*0x100;
294293                     pen += depth;
295294                  }
296                  else if( namcos2_gametype == NAMCOS21_DRIVERS_EYES )
295                  else if( state->m_gametype == NAMCOS21_DRIVERS_EYES )
297296                  {
298297                     depth = (zz>>10)*0x100;
299298                     pen -= depth;
r17652r17653
445444        0x4000..0x5fff  polygon palette bank1 (0x10 sets of 0x200 colors or 0x20 sets of 0x100 colors)
446445        0x6000..0x7fff  polygon palette bank2 (0x10 sets of 0x200 colors or 0x20 sets of 0x100 colors)
447446    */
448   if( namcos2_gametype == NAMCOS21_WINRUN91 )
447   if( state->m_gametype == NAMCOS21_WINRUN91 )
449448   {
450449      color = 0x4000|(color&0xff);
451450   }
452   else if ( namcos2_gametype == NAMCOS21_DRIVERS_EYES )
451   else if ( state->m_gametype == NAMCOS21_DRIVERS_EYES )
453452   {
454453      color = 0x3f00|(color&0xff);
455454   }
trunk/src/mame/video/namcos2.c
r17652r17653
1010{
1111   *mask = code;
1212
13   switch( namcos2_gametype )
13   namcos2_shared_state *state = machine.driver_data<namcos2_shared_state>();
14   switch( state->m_gametype )
1415   {
1516   case NAMCOS2_FINAL_LAP_2:
1617   case NAMCOS2_FINAL_LAP_3:
r17652r17653
2526} /* TilemapCB */
2627
2728/**
28 * namcos2_gfx_ctrl selects a bank of 128 sprites within spriteram
29 * m_gfx_ctrl selects a bank of 128 sprites within spriteram
2930 *
30 * namcos2_gfx_ctrl also supplies palette and priority information that is applied to the output of the
31 *                  Namco System 2 ROZ chip
31 * m_gfx_ctrl also supplies palette and priority information that is applied to the output of the
32 *            Namco System 2 ROZ chip
3233 *
3334 * -xxx ---- ---- ---- roz priority
3435 * ---- xxxx ---- ---- roz palette
3536 * ---- ---- xxxx ---- always zero?
3637 * ---- ---- ---- xxxx sprite bank
3738 */
38static UINT16 namcos2_gfx_ctrl;
39
40READ16_HANDLER( namcos2_gfx_ctrl_r )
39READ16_MEMBER( namcos2_state::gfx_ctrl_r )
4140{
42   return namcos2_gfx_ctrl;
41   return m_gfx_ctrl;
4342} /* namcos2_gfx_ctrl_r */
4443
45WRITE16_HANDLER( namcos2_gfx_ctrl_w )
44WRITE16_MEMBER( namcos2_state::gfx_ctrl_w )
4645{
47   COMBINE_DATA(&namcos2_gfx_ctrl);
46   COMBINE_DATA(&m_gfx_ctrl);
4847} /* namcos2_gfx_ctrl_w */
4948
50static TILE_GET_INFO( get_tile_info_roz )
49TILE_GET_INFO_MEMBER( namcos2_state::roz_tile_info )
5150{
52   int tile = machine.driver_data<namcos2_state>()->m_rozram[tile_index];
53   SET_TILE_INFO(3,tile,0/*color*/,0);
54} /* get_tile_info_roz */
51   int tile = m_rozram[tile_index];
52   SET_TILE_INFO_MEMBER(3,tile,0/*color*/,0);
53} /* roz_tile_info */
5554
5655struct RozParam
5756{
r17652r17653
240239   const int xoffset = 38,yoffset = 0;
241240   struct RozParam rozParam;
242241
243   rozParam.color = (namcos2_gfx_ctrl & 0x0f00);
242   rozParam.color = (m_gfx_ctrl & 0x0f00);
244243   rozParam.incxx  = (INT16)m_roz_ctrl[0];
245244   rozParam.incxy  = (INT16)m_roz_ctrl[1];
246245   rozParam.incyx  = (INT16)m_roz_ctrl[2];
r17652r17653
285284   DrawRozHelper( bitmap, m_tilemap_roz, cliprect, &rozParam );
286285}
287286
288READ16_MEMBER(namcos2_state::roz_ctrl_word_r)
289{
290   return m_roz_ctrl[offset];
291}
292
293WRITE16_MEMBER( namcos2_state::roz_ctrl_word_w )
294{
295   COMBINE_DATA(&m_roz_ctrl[offset]);
296}
297
298READ16_MEMBER( namcos2_state::rozram_word_r )
299{
300   return m_rozram[offset];
301}
302
303287WRITE16_MEMBER( namcos2_state::rozram_word_w )
304288{
305289   COMBINE_DATA(&m_rozram[offset]);
r17652r17653
312296
313297/**************************************************************************/
314298
315inline UINT16 namcos2_state::get_palette_register( int which )
299UINT16 namcos2_state::get_palette_register( int which )
316300{
317301   const UINT16 *source = &m_paletteram[0x3000/2];
318302   return ((source[which*2]&0xff)<<8) | (source[which*2+1]&0xff);
r17652r17653
362346         /*case 0x180a:*/ case 0x180b:
363347            if (data^m_paletteram[offset]) {
364348               m_paletteram[offset] = data;
365               namcos2_adjust_posirq_timer(machine(),namcos2_GetPosIrqScanline(machine()));
349               namcos2_adjust_posirq_timer(machine(),get_pos_irq_scanline());
366350            }
367351            break;
368352
r17652r17653
379363} /* namcos2_68k_video_palette_w */
380364
381365
382int
383namcos2_GetPosIrqScanline( running_machine &machine )
384{
385   return (machine.driver_data<namcos2_state>()->get_palette_register(5) - 32) & 0xff;
386} /* namcos2_GetPosIrqScanline */
387
388366inline void
389367namcos2_state::update_palette()
390368{
r17652r17653
407385
408386/**************************************************************************/
409387
410static void
411DrawSpriteInit( running_machine &machine )
388void namcos2_state::draw_sprite_init()
412389{
413   int i;
414390   /* set table for sprite color == 0x0f */
415   for( i = 0; i<16*256; i++ )
391   for( int i = 0; i<16*256; i++ )
416392   {
417      machine.shadow_table[i] = i+0x2000;
393      machine().shadow_table[i] = i+0x2000;
418394   }
419395}
420396
421WRITE16_MEMBER( namcos2_state::spriteram_word_w )
422{
423   COMBINE_DATA(&m_spriteram[offset]);
424}
425
426READ16_MEMBER( namcos2_state::spriteram_word_r )
427{
428   return m_spriteram[offset];
429}
430
431397/**************************************************************************/
432398
433399void namcos2_state::video_start()
434400{
435401   namco_tilemap_init(machine(), 2, memregion("gfx4")->base(), TilemapCB);
436   m_tilemap_roz = tilemap_create(machine(), get_tile_info_roz,tilemap_scan_rows,8,8,256,256);
402   m_tilemap_roz = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(namcos2_state::roz_tile_info), this), tilemap_mapper_delegate(FUNC(tilemap_scan_rows), &machine()), 8,8,256,256);
437403   m_tilemap_roz->set_transparent_pen(0xff);
438   DrawSpriteInit(machine());
404   draw_sprite_init();
439405}
440406
441407void namcos2_state::apply_clip( rectangle &clip, const rectangle &cliprect )
r17652r17653
458424   apply_clip( clip, cliprect );
459425
460426   /* HACK: enable ROZ layer only if it has priority > 0 */
461   m_tilemap_roz->enable((namcos2_gfx_ctrl & 0x7000) ? 1 : 0);
427   m_tilemap_roz->enable((m_gfx_ctrl & 0x7000) ? 1 : 0);
462428
463429   for( pri=0; pri<16; pri++ )
464430   {
r17652r17653
466432      {
467433         namco_tilemap_draw( bitmap, clip, pri/2 );
468434
469         if( ((namcos2_gfx_ctrl & 0x7000) >> 12)==pri/2 )
435         if( ((m_gfx_ctrl & 0x7000) >> 12)==pri/2 )
470436         {
471437            draw_roz(bitmap,clip);
472438         }
473         draw_sprites(bitmap, clip, pri/2, namcos2_gfx_ctrl );
439         draw_sprites(bitmap, clip, pri/2, m_gfx_ctrl );
474440      }
475441   }
476442   return 0;
r17652r17653
481447void namcos2_state::video_start_finallap()
482448{
483449   namco_tilemap_init(machine(),2,memregion("gfx4")->base(),TilemapCB);
484   DrawSpriteInit(machine());
450   draw_sprite_init();
485451   namco_road_init(machine(), 3);
486452}
487453
r17652r17653
501467         namco_tilemap_draw( bitmap, clip, pri/2 );
502468      }
503469      namco_road_draw(machine(), bitmap,clip,pri );
504      draw_sprites(bitmap,clip,pri,namcos2_gfx_ctrl );
470      draw_sprites(bitmap,clip,pri,m_gfx_ctrl );
505471   }
506472   return 0;
507473}
r17652r17653
511477void namcos2_state::video_start_luckywld()
512478{
513479   namco_tilemap_init(machine(),2,memregion("gfx4")->base(),TilemapCB);
514   namco_obj_init( machine(), 0, 0x0, NULL );
515   if( namcos2_gametype==NAMCOS2_LUCKY_AND_WILD )
480   c355_obj_init( 0, 0x0, namcos2_shared_state::c355_obj_code2tile_delegate() );
481   if( m_gametype==NAMCOS2_LUCKY_AND_WILD )
516482   {
517      namco_roz_init( machine(), 1, "gfx5" );
483      c169_roz_init(1, "gfx5");
518484   }
519   if( namcos2_gametype!=NAMCOS2_STEEL_GUNNER_2 )
485   if( m_gametype!=NAMCOS2_STEEL_GUNNER_2 )
520486   {
521487      namco_road_init(machine(), 3);
522488   }
r17652r17653
538504         namco_tilemap_draw( bitmap, clip, pri/2 );
539505      }
540506      namco_road_draw(machine(), bitmap,clip,pri );
541      if( namcos2_gametype==NAMCOS2_LUCKY_AND_WILD )
507      if( m_gametype==NAMCOS2_LUCKY_AND_WILD )
542508      {
543         namco_roz_draw( bitmap, clip, pri );
509         c169_roz_draw(bitmap, clip, pri);
544510      }
545      namco_obj_draw(machine(), bitmap, clip, pri );
511      c355_obj_draw(bitmap, clip, pri );
546512   }
547513   return 0;
548514}
r17652r17653
552518void namcos2_state::video_start_sgunner()
553519{
554520   namco_tilemap_init(machine(),2,memregion("gfx4")->base(),TilemapCB);
555   namco_obj_init( machine(), 0, 0x0, NULL );
521   c355_obj_init( 0, 0x0, namcos2_shared_state::c355_obj_code2tile_delegate() );
556522}
557523
558524UINT32 namcos2_state::screen_update_sgunner(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
r17652r17653
567533   for( pri=0; pri<8; pri++ )
568534   {
569535      namco_tilemap_draw( bitmap, clip, pri );
570      namco_obj_draw(machine(), bitmap, clip, pri );
536      c355_obj_draw(bitmap, clip, pri );
571537   }
572538   return 0;
573539}
r17652r17653
578544void namcos2_state::video_start_metlhawk()
579545{
580546   namco_tilemap_init(machine(),2,memregion("gfx4")->base(),TilemapCB);
581   namco_roz_init( machine(), 1, "gfx5" );
547   c169_roz_init(1, "gfx5");
582548}
583549
584550UINT32 namcos2_state::screen_update_metlhawk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
r17652r17653
596562      {
597563         namco_tilemap_draw( bitmap, clip, pri/2 );
598564      }
599      namco_roz_draw( bitmap, clip, pri );
565      c169_roz_draw(bitmap, clip, pri);
600566      draw_sprites_metalhawk(bitmap,clip,pri );
601567   }
602568   return 0;
trunk/src/mame/includes/namcofl.h
r17652r17653
1#include "namcos2.h"
2
13#define NAMCOFL_HTOTAL      (288)   /* wrong */
24#define NAMCOFL_HBSTART   (288)
35#define NAMCOFL_VTOTAL      (262)   /* needs to be checked */
r17652r17653
1315#define NAMCOFL_SPRITEGFX      1
1416#define NAMCOFL_ROTGFX         2
1517
16class namcofl_state : public driver_device
18class namcofl_state : public namcos2_shared_state
1719{
1820public:
1921   namcofl_state(const machine_config &mconfig, device_type type, const char *tag)
20      : driver_device(mconfig, type, tag),
22      : namcos2_shared_state(mconfig, type, tag),
2123      m_maincpu(*this,"maincpu"),
2224      m_mcu(*this,"mcu"),
2325      m_shareram(*this, "shareram"){ }
trunk/src/mame/includes/namconb1.h
r17652r17653
1#include "namcos2.h"
2
13#define NAMCONB1_HTOTAL      (288)   /* wrong */
24#define NAMCONB1_HBSTART   (288)
35#define NAMCONB1_VTOTAL      (262)   /* needs to be checked */
r17652r17653
1315#define NAMCONB1_SPRITEGFX      1
1416#define NAMCONB1_ROTGFX         2
1517
16class namconb1_state : public driver_device
18class namconb1_state : public namcos2_shared_state
1719{
1820public:
1921   namconb1_state(const machine_config &mconfig, device_type type, const char *tag)
20      : driver_device(mconfig, type, tag),
22      : namcos2_shared_state(mconfig, type, tag),
2123      m_maincpu(*this,"maincpu"),
2224      m_mcu(*this,"mcu"),
2325      m_nvmem32(*this, "nvmem32"),
trunk/src/mame/includes/namcos21.h
r17652r17653
22 * @file namcos21.h
33 */
44
5#include "namcos2.h"
6
57#define NAMCOS21_POLY_FRAME_WIDTH 496
68#define NAMCOS21_POLY_FRAME_HEIGHT 480
79
r17652r17653
2325   int slaveActive;
2426};
2527
26class namcos21_state : public driver_device
28class namcos21_state : public namcos2_shared_state
2729{
2830public:
2931   namcos21_state(const machine_config &mconfig, device_type type, const char *tag)
30      : driver_device(mconfig, type, tag),
32      : namcos2_shared_state(mconfig, type, tag),
3133      m_winrun_dspbios(*this,"winrun_dspbios"),
3234      m_winrun_polydata(*this,"winrun_polydata"),
3335      m_winrun_gpucomram(*this,"winrun_comram"),
trunk/src/mame/includes/namcos2.h
r17652r17653
1717
1818/*********************************************/
1919/* IF GAME SPECIFIC HACKS ARE REQUIRED THEN  */
20/* USE THE namcos2_gametype VARIABLE TO FIND */
20/* USE THE m_gametype MEMBER TO FIND */
2121/* OUT WHAT GAME IS RUNNING                  */
2222/*********************************************/
2323
r17652r17653
8585   NAMCOFL_FINAL_LAP_R
8686};
8787
88class namcos2_state : public driver_device
88// fix me -- most of this should be devices eventually
89class namcos2_shared_state : public driver_device
8990{
9091public:
92   namcos2_shared_state(const machine_config &mconfig, device_type type, const char *tag)
93      : driver_device(mconfig, type, tag),
94        m_gametype(0),
95        m_c169_roz_videoram(*this, "rozvideoram", 0),
96        m_c169_roz_gfxbank(0),
97        m_c169_roz_mask(NULL),
98        m_c355_obj_ram(*this, "objram", 0),
99        m_c355_obj_gfxbank(0),
100        m_c355_obj_palxor(0)
101   { }
102   
103   // game type helpers
104   bool is_system21();
105   int m_gametype;
106
107   // C169 ROZ Layer Emulation
108public:
109   void c169_roz_init(int gfxbank, const char *maskregion);
110   void c169_roz_draw(bitmap_ind16 &bitmap, const rectangle &cliprect, int pri);
111   DECLARE_READ16_MEMBER( c169_roz_control_r );
112   DECLARE_WRITE16_MEMBER( c169_roz_control_w );
113   DECLARE_READ16_MEMBER( c169_roz_bank_r );
114   DECLARE_WRITE16_MEMBER( c169_roz_bank_w );
115   DECLARE_READ16_MEMBER( c169_roz_videoram_r );
116   DECLARE_WRITE16_MEMBER( c169_roz_videoram_w );
117
118protected:
119   struct roz_parameters
120   {
121      UINT32 left, top, size;
122      UINT32 startx, starty;
123      int incxx, incxy, incyx, incyy;
124      int color, priority;
125   };
126   void c169_roz_unpack_params(const UINT16 *source, roz_parameters &params);
127   void c169_roz_draw_helper(bitmap_ind16 &bitmap, tilemap_t &tmap, const rectangle &clip, const roz_parameters &params);
128   void c169_roz_draw_scanline(bitmap_ind16 &bitmap, int line, int which, int pri, const rectangle &cliprect);
129   void c169_roz_get_info(tile_data &tileinfo, int tile_index, int which);
130   TILE_GET_INFO_MEMBER( c169_roz_get_info0 );
131   TILE_GET_INFO_MEMBER( c169_roz_get_info1 );
132   TILEMAP_MAPPER_MEMBER( c169_roz_mapper );
133
134   static const int ROZ_TILEMAP_COUNT = 2;
135   tilemap_t *m_c169_roz_tilemap[ROZ_TILEMAP_COUNT];
136   UINT16 m_c169_roz_bank[0x10/2];
137   UINT16 m_c169_roz_control[0x20/2];
138   optional_shared_ptr<UINT16> m_c169_roz_videoram;
139   int m_c169_roz_gfxbank;
140   UINT8 *m_c169_roz_mask;
141
142   // C355 Motion Object Emulation
143public:
144   typedef delegate<int (int)> c355_obj_code2tile_delegate;
145   // for pal_xor, supply either 0x0 (normal) or 0xf (palette mapping reversed)
146   void c355_obj_init(int gfxbank, int pal_xor, c355_obj_code2tile_delegate code2tile);
147   int c355_obj_default_code2tile(int code);
148   void c355_obj_draw(bitmap_ind16 &bitmap, const rectangle &cliprect, int pri);
149   void c355_obj_draw(bitmap_rgb32 &bitmap, const rectangle &cliprect, int pri);
150   DECLARE_READ16_MEMBER( c355_obj_ram_r );
151   DECLARE_WRITE16_MEMBER( c355_obj_ram_w );
152   DECLARE_READ16_MEMBER( c355_obj_position_r );
153   DECLARE_WRITE16_MEMBER( c355_obj_position_w );
154
155protected:
156   // C355 Motion Object internals
157   template<class _BitmapClass>
158   void c355_obj_draw_sprite(_BitmapClass &bitmap, const rectangle &cliprect, const UINT16 *pSource, int pri, int zpos);
159   template<class _BitmapClass>
160   void c355_obj_draw_list(_BitmapClass &bitmap, const rectangle &cliprect, int pri, const UINT16 *pSpriteList16, const UINT16 *pSpriteTable);
161
162   optional_shared_ptr<UINT16> m_c355_obj_ram;
163   c355_obj_code2tile_delegate m_c355_obj_code2tile;
164   int m_c355_obj_gfxbank;
165   int m_c355_obj_palxor;
166   UINT16 m_c355_obj_position[4];
167
168
169public:
170   // general
171   void zdrawgfxzoom(bitmap_ind16 &dest_bmp, const rectangle &clip, const gfx_element *gfx, UINT32 code, UINT32 color, int flipx, int flipy, int sx, int sy, int scalex, int scaley, int zpos);
172   void zdrawgfxzoom(bitmap_rgb32 &dest_bmp, const rectangle &clip, const gfx_element *gfx, UINT32 code, UINT32 color, int flipx, int flipy, int sx, int sy, int scalex, int scaley, int zpos);
173};
174
175class namcos2_state : public namcos2_shared_state
176{
177public:
91178   namcos2_state(const machine_config &mconfig, device_type type, const char *tag)
92      : driver_device(mconfig, type, tag),
179      : namcos2_shared_state(mconfig, type, tag),
93180        m_dpram(*this, "dpram"),
181        m_paletteram(*this, "paletteram"),
94182        m_spriteram(*this, "spriteram"),
95        m_paletteram(*this, "paletteram"),
96        m_rozram(*this, "rozram")
183        m_rozram(*this, "rozram"),
184        m_roz_ctrl(*this, "rozctrl")
97185   { }
98186   DECLARE_READ16_MEMBER(dpram_word_r);
99187   DECLARE_WRITE16_MEMBER(dpram_word_w);
r17652r17653
145233   UINT32 screen_update_luckywld(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
146234   UINT32 screen_update_metlhawk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
147235   UINT32 screen_update_sgunner(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
236
237   TILE_GET_INFO_MEMBER( roz_tile_info );
148238   
149239   DECLARE_READ16_MEMBER( paletteram_word_r );
150240   DECLARE_WRITE16_MEMBER( paletteram_word_w );
151   DECLARE_READ16_MEMBER( spriteram_word_r );
152   DECLARE_WRITE16_MEMBER( spriteram_word_w );
153   DECLARE_READ16_MEMBER( rozram_word_r );
154241   DECLARE_WRITE16_MEMBER( rozram_word_w );
155   DECLARE_READ16_MEMBER( roz_ctrl_word_r );
156   DECLARE_WRITE16_MEMBER( roz_ctrl_word_w );
242   DECLARE_READ16_MEMBER( gfx_ctrl_r );
243   DECLARE_WRITE16_MEMBER( gfx_ctrl_w );
157244
245   void draw_sprite_init();
158246   void update_palette();
159247   void apply_clip( rectangle &clip, const rectangle &cliprect );
160248   void draw_roz(bitmap_ind16 &bitmap, const rectangle &cliprect);
r17652r17653
162250   void draw_sprites_metalhawk(bitmap_ind16 &bitmap, const rectangle &cliprect, int pri );
163251   UINT16 get_palette_register( int which );
164252
253   int get_pos_irq_scanline() { return (get_palette_register(5) - 32) & 0xff; }
254
165255   required_shared_ptr<UINT8> m_dpram;   /* 2Kx8 */
256   required_shared_ptr<UINT16> m_paletteram;
166257   optional_shared_ptr<UINT16> m_spriteram;
167   required_shared_ptr<UINT16> m_paletteram;
168258   optional_shared_ptr<UINT16> m_rozram;
169
170   UINT16 m_roz_ctrl[0x8];
259   optional_shared_ptr<UINT16> m_roz_ctrl;
171260   tilemap_t *m_tilemap_roz;
261   UINT16 m_gfx_ctrl;
172262
173263};
174264
r17652r17653
176266
177267#define NAMCOS21_NUM_COLORS 0x8000
178268
179VIDEO_START( namcos2 );
180
181VIDEO_START( finallap );
182
183VIDEO_START( luckywld );
184
185VIDEO_START( metlhawk );
186
187VIDEO_START( sgunner );
188
189int namcos2_GetPosIrqScanline( running_machine &machine );
190
191WRITE16_HANDLER( namcos2_gfx_ctrl_w );
192READ16_HANDLER( namcos2_gfx_ctrl_r );
193
194269/**************************************************************/
195270/*  Shared video palette function handlers                    */
196271/**************************************************************/
r17652r17653
204279/*----------- defined in machine/namcos2.c -----------*/
205280
206281extern void (*namcos2_kickstart)(running_machine &machine, int internal);
207extern int namcos2_gametype;
208282
209283MACHINE_START( namcos2 );
210284MACHINE_RESET( namcos2 );
trunk/src/mame/includes/namcoic.h
r17652r17653
111111WRITE32_HANDLER( namco_tilemapcontrol32_le_w );
112112
113113/***********************************************************************************/
114/* C355 Motion Object Emulation */
115114
116/* for palXOR, supply either 0x0 (normal) or 0xf (palette mapping reversed) */
117void namco_obj_init( running_machine &machine, int gfxbank, int palXOR, int (*code2tile)( running_machine &machine, int code ) );
118void namco_obj_draw( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int pri );
119void namco_obj_draw( running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect, int pri );
120
121WRITE16_HANDLER( namco_obj16_w );
122READ16_HANDLER( namco_obj16_r );
123
124WRITE32_HANDLER( namco_obj32_w );
125READ32_HANDLER( namco_obj32_r );
126WRITE32_HANDLER( namco_obj32_le_w );
127READ32_HANDLER( namco_obj32_le_r );
128
129WRITE16_HANDLER( namco_spritepos16_w );
130READ16_HANDLER( namco_spritepos16_r );
131
132WRITE32_HANDLER( namco_spritepos32_w );
133READ32_HANDLER( namco_spritepos32_r );
134
135115/***********************************************************************************/
136/* C169 ROZ Layer Emulation */
137
138void namco_roz_init( running_machine &machine, int gfxbank, const char *maskregion );
139void namco_roz_draw( bitmap_ind16 &bitmap, const rectangle &cliprect, int pri );
140
141READ16_HANDLER( namco_rozcontrol16_r );
142WRITE16_HANDLER( namco_rozcontrol16_w );
143READ16_HANDLER( namco_rozvideoram16_r );
144WRITE16_HANDLER( namco_rozvideoram16_w );
145
146READ32_HANDLER( namco_rozcontrol32_r );
147WRITE32_HANDLER( namco_rozcontrol32_w );
148READ32_HANDLER( namco_rozcontrol32_le_r );
149WRITE32_HANDLER( namco_rozcontrol32_le_w );
150READ32_HANDLER( namco_rozbank32_r );
151WRITE32_HANDLER( namco_rozbank32_w );
152READ32_HANDLER( namco_rozvideoram32_r );
153WRITE32_HANDLER( namco_rozvideoram32_w );
154READ32_HANDLER( namco_rozvideoram32_le_r );
155WRITE32_HANDLER( namco_rozvideoram32_le_w );
156
157/***********************************************************************************/
158116/* C45 Land (Road) Emulation */
159117
160118void namco_road_init( running_machine &machine, int gfxbank );
trunk/src/mame/drivers/namconb1.c
r17652r17653
272272#include "emu.h"
273273#include "cpu/m68000/m68000.h"
274274#include "includes/namconb1.h"
275#include "includes/namcos2.h"
276275#include "includes/namcoic.h"
277276#include "sound/c352.h"
278277#include "cpu/m37710/m37710.h"
r17652r17653
590589      else
591590      {
592591         memset( state->m_nvmem32, 0x00, NB1_NVMEM_SIZE );
593         if( namcos2_gametype == NAMCONB1_GUNBULET )
592         if( state->m_gametype == NAMCONB1_GUNBULET )
594593         {
595594            state->m_nvmem32[0] = 0x0f260f26; /* default gun calibration */
596595         }
r17652r17653
612611   size_t numBytes = (0xfe7-0xe6f)*8;
613612   memset( &pMem[0xe6f*8], 0, numBytes );
614613
615   namcos2_gametype = NAMCONB1_NEBULRAY;
614   m_gametype = NAMCONB1_NEBULRAY;
616615} /* nebulray */
617616
618617DRIVER_INIT_MEMBER(namconb1_state,gslgr94u)
619618{
620   namcos2_gametype = NAMCONB1_GSLGR94U;
619   m_gametype = NAMCONB1_GSLGR94U;
621620} /* gslgr94u */
622621
623622DRIVER_INIT_MEMBER(namconb1_state,gslgr94j)
624623{
625   namcos2_gametype = NAMCONB1_GSLGR94J;
624   m_gametype = NAMCONB1_GSLGR94J;
626625} /* gslgr94j */
627626
628627DRIVER_INIT_MEMBER(namconb1_state,sws95)
629628{
630   namcos2_gametype = NAMCONB1_SWS95;
629   m_gametype = NAMCONB1_SWS95;
631630} /* sws95 */
632631
633632DRIVER_INIT_MEMBER(namconb1_state,sws96)
634633{
635   namcos2_gametype = NAMCONB1_SWS96;
634   m_gametype = NAMCONB1_SWS96;
636635} /* sws96 */
637636
638637DRIVER_INIT_MEMBER(namconb1_state,sws97)
639638{
640   namcos2_gametype = NAMCONB1_SWS97;
639   m_gametype = NAMCONB1_SWS97;
641640} /* sws97 */
642641
643642DRIVER_INIT_MEMBER(namconb1_state,gunbulet)
644643{
645   namcos2_gametype = NAMCONB1_GUNBULET;
644   m_gametype = NAMCONB1_GUNBULET;
646645} /* gunbulet */
647646
648647DRIVER_INIT_MEMBER(namconb1_state,vshoot)
649648{
650   namcos2_gametype = NAMCONB1_VSHOOT;
649   m_gametype = NAMCONB1_VSHOOT;
651650} /* vshoot */
652651
653652DRIVER_INIT_MEMBER(namconb1_state,machbrkr)
654653{
655   namcos2_gametype = NAMCONB2_MACH_BREAKERS;
654   m_gametype = NAMCONB2_MACH_BREAKERS;
656655}
657656
658657DRIVER_INIT_MEMBER(namconb1_state,outfxies)
659658{
660   namcos2_gametype = NAMCONB2_OUTFOXIES;
659   m_gametype = NAMCONB2_OUTFOXIES;
661660}
662661
663662READ32_MEMBER(namconb1_state::custom_key_r)
r17652r17653
669668      m_count = machine().rand();
670669   } while( m_count==old_count );
671670
672   switch( namcos2_gametype )
671   switch( m_gametype )
673672   {
674673   case NAMCONB1_GUNBULET:
675674      return 0; /* no protection */
r17652r17653
856855   AM_RANGE(0x208000, 0x2fffff) AM_RAM
857856   AM_RANGE(0x400000, 0x40001f) AM_READWRITE(namconb_cpureg_r, namconb1_cpureg_w)
858857   AM_RANGE(0x580000, 0x5807ff) AM_RAM AM_SHARE("nvmem32")
859   AM_RANGE(0x600000, 0x61ffff) AM_READWRITE_LEGACY(namco_obj32_r,namco_obj32_w)
860   AM_RANGE(0x620000, 0x620007) AM_READWRITE_LEGACY(namco_spritepos32_r,namco_spritepos32_w)
858   AM_RANGE(0x600000, 0x61ffff) AM_READWRITE16(c355_obj_ram_r,c355_obj_ram_w,0xffffffff) AM_SHARE("objram")
859   AM_RANGE(0x620000, 0x620007) AM_READWRITE16(c355_obj_position_r,c355_obj_position_w,0xffffffff)
861860   AM_RANGE(0x640000, 0x64ffff) AM_READWRITE_LEGACY(namco_tilemapvideoram32_r,namco_tilemapvideoram32_w )
862861   AM_RANGE(0x660000, 0x66003f) AM_READWRITE_LEGACY(namco_tilemapcontrol32_r,namco_tilemapcontrol32_w)
863862   AM_RANGE(0x680000, 0x68000f) AM_RAM AM_SHARE("spritebank32")
r17652r17653
872871   AM_RANGE(0x200000, 0x207fff) AM_READWRITE(namconb_share_r, namconb_share_w)
873872   AM_RANGE(0x208000, 0x2fffff) AM_RAM
874873   AM_RANGE(0x400000, 0x4fffff) AM_ROM AM_REGION("data", 0)
875   AM_RANGE(0x600000, 0x61ffff) AM_READWRITE_LEGACY(namco_obj32_r,namco_obj32_w)
876   AM_RANGE(0x620000, 0x620007) AM_READWRITE_LEGACY(namco_spritepos32_r,namco_spritepos32_w)
874   AM_RANGE(0x600000, 0x61ffff) AM_READWRITE16(c355_obj_ram_r,c355_obj_ram_w,0xffffffff) AM_SHARE("objram")
875   AM_RANGE(0x620000, 0x620007) AM_READWRITE16(c355_obj_position_r,c355_obj_position_w,0xffffffff)
877876   AM_RANGE(0x640000, 0x64000f) AM_RAM /* unknown xy offset */
878877   AM_RANGE(0x680000, 0x68ffff) AM_READWRITE_LEGACY(namco_tilemapvideoram32_r, namco_tilemapvideoram32_w )
879878   AM_RANGE(0x6c0000, 0x6c003f) AM_READWRITE_LEGACY(namco_tilemapcontrol32_r, namco_tilemapcontrol32_w )
880   AM_RANGE(0x700000, 0x71ffff) AM_READWRITE_LEGACY(namco_rozvideoram32_r,namco_rozvideoram32_w)
881   AM_RANGE(0x740000, 0x74001f) AM_READWRITE_LEGACY(namco_rozcontrol32_r,namco_rozcontrol32_w)
879   AM_RANGE(0x700000, 0x71ffff) AM_READWRITE16(c169_roz_videoram_r,c169_roz_videoram_w,0xffffffff) AM_SHARE("rozvideoram")
880   AM_RANGE(0x740000, 0x74001f) AM_READWRITE16(c169_roz_control_r,c169_roz_control_w,0xffffffff)
882881   AM_RANGE(0x800000, 0x807fff) AM_RAM AM_SHARE("paletteram")
883882   AM_RANGE(0x900008, 0x90000f) AM_RAM AM_SHARE("spritebank32")
884883   AM_RANGE(0x940000, 0x94000f) AM_RAM AM_SHARE("tilebank32")
885   AM_RANGE(0x980000, 0x98000f) AM_READ_LEGACY(namco_rozbank32_r) AM_WRITE_LEGACY(namco_rozbank32_w)
884   AM_RANGE(0x980000, 0x98000f) AM_READWRITE16(c169_roz_bank_r,c169_roz_bank_w,0xffffffff)
886885   AM_RANGE(0xa00000, 0xa007ff) AM_RAM AM_SHARE("nvmem32")
887886   AM_RANGE(0xc00000, 0xc0001f) AM_READ(custom_key_r) AM_WRITENOP
888887   AM_RANGE(0xf00000, 0xf0001f) AM_READWRITE(namconb_cpureg_r, namconb2_cpureg_w)
trunk/src/mame/drivers/namcos21.c
r17652r17653
296296#include "emu.h"
297297#include "cpu/m68000/m68000.h"
298298#include "cpu/m6805/m6805.h"
299#include "includes/namcos2.h"
300299#include "cpu/m6809/m6809.h"
301300#include "cpu/tms32025/tms32025.h"
302301#include "includes/namcoic.h"
r17652r17653
341340READ16_MEMBER(namcos21_state::dspcuskey_r)
342341{
343342   UINT16 result = 0;
344   if( namcos2_gametype == NAMCOS21_SOLVALOU )
343   if( m_gametype == NAMCOS21_SOLVALOU )
345344   {
346345      switch( cpu_get_pc(&space.device()) )
347346      {
r17652r17653
354353         break;
355354      }
356355   }
357   else if( namcos2_gametype == NAMCOS21_CYBERSLED )
356   else if( m_gametype == NAMCOS21_CYBERSLED )
358357   {
359358      switch( cpu_get_pc(&space.device()) )
360359      {
r17652r17653
365364         break;
366365      }
367366   }
368   else if( namcos2_gametype == NAMCOS21_AIRCOMBAT )
367   else if( m_gametype == NAMCOS21_AIRCOMBAT )
369368   {
370369      switch( cpu_get_pc(&space.device()) )
371370      {
r17652r17653
497496{
498497   namcos21_state *state = machine.driver_data<namcos21_state>();
499498   /* patch dsp watchdog */
500   switch( namcos2_gametype )
499   switch( state->m_gametype )
501500   {
502501   case NAMCOS21_AIRCOMBAT:
503502      state->m_master_dsp_code[0x008e] = 0x808f;
r17652r17653
567566{
568567   COMBINE_DATA( &m_dspram16[offset] );
569568
570   if( namcos2_gametype != NAMCOS21_WINRUN91 )
569   if( m_gametype != NAMCOS21_WINRUN91 )
571570   {
572571      if( m_mpDspState->masterSourceAddr &&
573572         offset == 1+(m_mpDspState->masterSourceAddr&0x7fff) )
r17652r17653
575574         if (ENABLE_LOGGING) logerror( "IDC-CONTINUE\n" );
576575         TransferDspData(machine());
577576      }
578      else if (namcos2_gametype == NAMCOS21_SOLVALOU &&
577      else if (m_gametype == NAMCOS21_SOLVALOU &&
579578               offset == 0x103 &&
580579               &space.device() == machine().device("maincpu"))
581580      { /* hack; synchronization for solvalou */
r17652r17653
10751074   AM_RANGE(0x440000, 0x440001) AM_READWRITE(pointram_data_r,pointram_data_w) \
10761075   AM_RANGE(0x440002, 0x47ffff) AM_WRITENOP /* (?) Air Combat */ \
10771076   AM_RANGE(0x480000, 0x4807ff) AM_READWRITE(namcos21_depthcue_r,namcos21_depthcue_w) /* Air Combat */ \
1078   AM_RANGE(0x700000, 0x71ffff) AM_READWRITE_LEGACY(namco_obj16_r,namco_obj16_w) \
1079   AM_RANGE(0x720000, 0x720007) AM_READWRITE_LEGACY(namco_spritepos16_r,namco_spritepos16_w) \
1077   AM_RANGE(0x700000, 0x71ffff) AM_READWRITE(c355_obj_ram_r,c355_obj_ram_w) AM_SHARE("objram") \
1078   AM_RANGE(0x720000, 0x720007) AM_READWRITE(c355_obj_position_r,c355_obj_position_w) \
10801079   AM_RANGE(0x740000, 0x75ffff) AM_READWRITE(paletteram16_r,paletteram16_w) AM_SHARE("paletteram") \
10811080   AM_RANGE(0x760000, 0x760001) AM_READWRITE(namcos21_video_enable_r,namcos21_video_enable_w) \
10821081   AM_RANGE(0x800000, 0x8fffff) AM_READ(datarom_r) \
r17652r17653
14151414////////////////////////////////////////////////////////////////////////////////
14161415
14171416#define DRIVEYES_68K_COMMON \
1418   AM_RANGE(0x700000, 0x71ffff) AM_READWRITE_LEGACY(namco_obj16_r,namco_obj16_w) \
1419   AM_RANGE(0x720000, 0x720007) AM_READWRITE_LEGACY(namco_spritepos16_r,namco_spritepos16_w) \
1417   AM_RANGE(0x700000, 0x71ffff) AM_READWRITE(c355_obj_ram_r,c355_obj_ram_w) AM_SHARE("objram") \
1418   AM_RANGE(0x720000, 0x720007) AM_READWRITE(c355_obj_position_r,c355_obj_position_w) \
14201419   AM_RANGE(0x740000, 0x75ffff) AM_READWRITE(paletteram16_r,paletteram16_w) AM_SHARE("paletteram") \
14211420   AM_RANGE(0x760000, 0x760001) AM_READWRITE(namcos21_video_enable_r,namcos21_video_enable_w) \
14221421   AM_RANGE(0x800000, 0x8fffff) AM_READ(datarom_r) \
r17652r17653
22172216static void namcos21_init( running_machine &machine, int game_type )
22182217{
22192218   namcos21_state *state = machine.driver_data<namcos21_state>();
2220   namcos2_gametype = game_type;
2219   state->m_gametype = game_type;
22212220   state->m_pointram = auto_alloc_array(machine, UINT8, PTRAM_SIZE);
22222221   state->m_mpDataROM = (UINT16 *)state->memregion( "user1" )->base();
22232222   InitDSP(machine);
r17652r17653
22372236
22382237   m_winrun_dspcomram = auto_alloc_array(machine(), UINT16, 0x1000*2);
22392238
2240   namcos2_gametype = NAMCOS21_WINRUN91;
2239   m_gametype = NAMCOS21_WINRUN91;
22412240   m_mpDataROM = (UINT16 *)memregion( "user1" )->base();
22422241   m_pointram = auto_alloc_array(machine(), UINT8, PTRAM_SIZE);
22432242   m_pointram_idx = 0;
r17652r17653
22782277   pMem[pc++] = 0xff80; /* b */
22792278   pMem[pc++] = 0;
22802279   m_winrun_dspcomram = auto_alloc_array(machine(), UINT16, 0x1000*2);
2281   namcos2_gametype = NAMCOS21_DRIVERS_EYES;
2280   m_gametype = NAMCOS21_DRIVERS_EYES;
22822281   m_mpDataROM = (UINT16 *)memregion( "user1" )->base();
22832282   m_pointram = auto_alloc_array(machine(), UINT8, PTRAM_SIZE);
22842283   m_pointram_idx = 0;
trunk/src/mame/drivers/gal3.c
r17652r17653
133133#include "rendlay.h"
134134
135135
136class gal3_state : public driver_device
136class gal3_state : public namcos2_shared_state
137137{
138138public:
139139   gal3_state(const machine_config &mconfig, device_type type, const char *tag)
140      : driver_device(mconfig, type, tag) ,
140      : namcos2_shared_state(mconfig, type, tag) ,
141141      m_nvmem(*this, "nvmem"),
142142      m_rso_shared_ram(*this, "rso_shared_ram"){ }
143143
r17652r17653
166166   gal3_state *state = machine.driver_data<gal3_state>();
167167   state->m_generic_paletteram_16.allocate(0x10000);
168168
169   namco_obj_init(machine,
169   state->c355_obj_init(
170170      0,      /* gfx bank */
171171      0xf,   /* reverse palette mapping */
172      NULL );
172      namcos2_shared_state::c355_obj_code2tile_delegate() );
173173
174174}
175175
r17652r17653
208208
209209   for( pri=0; pri<pivot; pri++ )
210210   {
211      namco_obj_draw(screen.machine(), bitmap, cliprect, pri );
211      state->c355_obj_draw(bitmap, cliprect, pri);
212212   }
213213
214214/*  CopyVisiblePolyFrameBuffer( bitmap, cliprect,0,0x7fbf );
215215
216216    for( pri=pivot; pri<15; pri++ )
217217    {
218        namco_obj_draw(screen.machine(), bitmap, cliprect, pri );
218        state->c355_obj_draw(bitmap, cliprect, pri);
219219    }*/
220220
221221   // CPU Diag LEDs
r17652r17653
391391/// AM_RANGE(0xf1440000, 0xf1440003) AM_READWRITE_LEGACY(pointram_data_r,pointram_data_w)
392392/// AM_RANGE(0x440002, 0x47ffff) AM_WRITENOP /* (frame buffer?) */
393393/// AM_RANGE(0xf1480000, 0xf14807ff) AM_READWRITE_LEGACY(namcos21_depthcue_r,namcos21_depthcue_w)
394   AM_RANGE(0xf1700000, 0xf170ffff) AM_READWRITE_LEGACY(namco_obj32_r,namco_obj32_w)
395   AM_RANGE(0xf1720000, 0xf1720007) AM_READWRITE_LEGACY(namco_spritepos32_r,namco_spritepos32_w)
394   AM_RANGE(0xf1700000, 0xf170ffff) AM_READWRITE16(c355_obj_ram_r,c355_obj_ram_w,0xffffffff) AM_SHARE("objram")
395   AM_RANGE(0xf1720000, 0xf1720007) AM_READWRITE16(c355_obj_position_r,c355_obj_position_w,0xffffffff)
396396   AM_RANGE(0xf1740000, 0xf175ffff) AM_READWRITE(paletteram32_r,paletteram32_w)
397397   AM_RANGE(0xf1760000, 0xf1760003) AM_READWRITE(namcos21_video_enable_r,namcos21_video_enable_w)
398398
399399   AM_RANGE(0xf2200000, 0xf220ffff) AM_RAM
400   AM_RANGE(0xf2700000, 0xf270ffff) AM_RAM   //AM_READWRITE_LEGACY(namco_obj16_r,namco_obj16_w)
401   AM_RANGE(0xf2720000, 0xf2720007) AM_RAM   //AM_READWRITE_LEGACY(namco_spritepos16_r,namco_spritepos16_w)
400   AM_RANGE(0xf2700000, 0xf270ffff) AM_RAM   //AM_READWRITE16(c355_obj_ram_r,c355_obj_ram_w,0xffffffff) AM_SHARE("objram")
401   AM_RANGE(0xf2720000, 0xf2720007) AM_RAM   //AM_READWRITE16(c355_obj_position_r,c355_obj_position_w,0xffffffff)
402402   AM_RANGE(0xf2740000, 0xf275ffff) AM_RAM   //AM_READWRITE(paletteram16_r,paletteram16_w) AM_SHARE("paletteram")
403403   AM_RANGE(0xf2760000, 0xf2760003) AM_RAM   //AM_READWRITE(namcos21_video_enable_r,namcos21_video_enable_w)
404404ADDRESS_MAP_END
trunk/src/mame/drivers/namcoic.c
r17652r17653
33#include "includes/namcoic.h"
44
55/**************************************************************************************/
6static int mPalXOR;      /* XOR'd with palette select register; needed for System21 */
7
86static struct
97{
108   UINT16 control[0x40/2];
r17652r17653
265263
266264/**************************************************************************************/
267265
268static void zdrawgfxzoom(
266void namcos2_shared_state::zdrawgfxzoom(
269267      bitmap_ind16 &dest_bmp,const rectangle &clip,const gfx_element *gfx,
270268      UINT32 code,UINT32 color,int flipx,int flipy,int sx,int sy,
271269      int scalex, int scaley, int zpos )
r17652r17653
347345                     UINT16 *dest = &dest_bmp.pix16(y);
348346                     UINT8 *pri = &priority_bitmap.pix8(y);
349347                     int x, x_index = x_index_base;
350                     if( mPalXOR )
348                     if( m_c355_obj_palxor )
351349                     {
352350                        for( x=sx; x<ex; x++ )
353351                        {
r17652r17653
407405   }
408406} /* zdrawgfxzoom */
409407
410static void zdrawgfxzoom(
408void namcos2_shared_state::zdrawgfxzoom(
411409      bitmap_rgb32 &dest_bmp,const rectangle &clip,const gfx_element *gfx,
412410      UINT32 code,UINT32 color,int flipx,int flipy,int sx,int sy,
413411      int scalex, int scaley, int zpos )
r17652r17653
618616
619617/**************************************************************************************/
620618
621static UINT16 mSpritePos[4];
622static UINT16 *m_spriteram;
623
624WRITE16_HANDLER( namco_spritepos16_w )
619WRITE16_MEMBER( namcos2_shared_state::c355_obj_position_w )
625620{
626   COMBINE_DATA( &mSpritePos[offset] );
621   COMBINE_DATA(&m_c355_obj_position[offset]);
627622}
628READ16_HANDLER( namco_spritepos16_r )
623READ16_MEMBER( namcos2_shared_state::c355_obj_position_r )
629624{
630   return mSpritePos[offset];
625   return m_c355_obj_position[offset];
631626}
632627
633WRITE32_HANDLER( namco_spritepos32_w )
634{
635   UINT32 v;
636   offset *= 2;
637   v = (mSpritePos[offset]<<16)|mSpritePos[offset+1];
638   COMBINE_DATA( &v );
639   mSpritePos[offset+0] = v>>16;
640   mSpritePos[offset+1] = v&0xffff;
641}
642READ32_HANDLER( namco_spritepos32_r )
643{
644   offset *= 2;
645   return (mSpritePos[offset]<<16)|mSpritePos[offset+1];
646}
647
648628INLINE UINT8
649629nth_byte16( const UINT16 *pSource, int which )
650630{
r17652r17653
698678
699679/**************************************************************************************************************/
700680
701static int (*mpCodeToTile)( running_machine &machine, int code ); /* sprite banking callback */
702static int mGfxC355;   /* gfx bank for sprites */
703
704681/**
705682 * 0x00000 sprite attr (page0)
706683 * 0x02000 sprite list (page0)
r17652r17653
712689 * 0x14000 sprite list (page1)
713690 */
714691template<class _BitmapClass>
715static void
716draw_spriteC355(running_machine &machine, _BitmapClass &bitmap, const rectangle &cliprect, const UINT16 *pSource, int pri, int zpos )
692void namcos2_shared_state::c355_obj_draw_sprite(_BitmapClass &bitmap, const rectangle &cliprect, const UINT16 *pSource, int pri, int zpos )
717693{
718   UINT16 *spriteram16 = m_spriteram;
694   UINT16 *spriteram16 = m_c355_obj_ram;
719695   unsigned screen_height_remaining, screen_width_remaining;
720696   unsigned source_height_remaining, source_width_remaining;
721697   int hpos,vpos;
r17652r17653
762738
763739   if( linkno*4>=0x4000/2 ) return; /* avoid garbage memory reads */
764740
765   xscroll = (INT16)mSpritePos[1];
766   yscroll = (INT16)mSpritePos[0];
741   xscroll = (INT16)m_c355_obj_position[1];
742   yscroll = (INT16)m_c355_obj_position[0];
767743
768744//  xscroll &= 0x3ff; if( xscroll & 0x200 ) xscroll |= ~0x3ff;
769745   xscroll &= 0x1ff; if( xscroll & 0x100 ) xscroll |= ~0x1ff;
r17652r17653
771747
772748   if( bitmap.width() > 384 )
773749   { /* Medium Resolution: System21 adjust */
774         xscroll = (INT16)mSpritePos[1];
750         xscroll = (INT16)m_c355_obj_position[1];
775751         xscroll &= 0x3ff; if( xscroll & 0x200 ) xscroll |= ~0x3ff;
776752         if( yscroll<0 )
777753         { /* solvalou */
r17652r17653
781757   }
782758   else
783759   {
784      if ((namcos2_gametype == NAMCOFL_SPEED_RACER) || (namcos2_gametype == NAMCOFL_FINAL_LAP_R))
760      if ((m_gametype == NAMCOFL_SPEED_RACER) || (m_gametype == NAMCOFL_FINAL_LAP_R))
785761      { /* Namco FL: don't adjust and things line up fine */
786762      }
787763      else
r17652r17653
836812      vpos -= dy;
837813   }
838814
839   color = (palette&0xf)^mPalXOR;
815   color = (palette&0xf)^m_c355_obj_palxor;
840816
841817   source_height_remaining = num_rows*16;
842818   screen_height_remaining = vsize;
r17652r17653
866842            zdrawgfxzoom(
867843               bitmap,
868844               clip,
869               machine.gfx[mGfxC355],
870               mpCodeToTile(machine, tile) + offset,
845               machine().gfx[m_c355_obj_gfxbank],
846               m_c355_obj_code2tile(tile) + offset,
871847               color,
872848               flipx,flipy,
873849               sx,sy,
r17652r17653
887863      screen_height_remaining -= tile_screen_height;
888864      source_height_remaining -= 16;
889865   } /* next row */
890} /* draw_spriteC355 */
866}
891867
892868
893static int DefaultCodeToTile( running_machine &machine, int code )
869int namcos2_shared_state::c355_obj_default_code2tile(int code)
894870{
895871   return code;
896872}
897873
898void
899namco_obj_init( running_machine &machine, int gfxbank, int palXOR, int (*codeToTile)( running_machine &machine, int code ) )
874void namcos2_shared_state::c355_obj_init(int gfxbank, int pal_xor, c355_obj_code2tile_delegate code2tile)
900875{
901   mGfxC355 = gfxbank;
902   mPalXOR = palXOR;
903   if( codeToTile )
904   {
905      mpCodeToTile = codeToTile;
906   }
876   m_c355_obj_gfxbank = gfxbank;
877   m_c355_obj_palxor = pal_xor;
878   if (!code2tile.isnull())
879      m_c355_obj_code2tile = code2tile;
907880   else
908   {
909      mpCodeToTile = DefaultCodeToTile;
910   }
911   m_spriteram = auto_alloc_array(machine, UINT16, 0x20000/2);
912   memset( m_spriteram, 0, 0x20000 ); /* needed for Nebulas Ray */
913   memset( mSpritePos,0x00,sizeof(mSpritePos) );
914} /* namcosC355_init */
881      m_c355_obj_code2tile = c355_obj_code2tile_delegate(FUNC(namcos2_shared_state::c355_obj_default_code2tile), this);
915882
883   memset(&m_c355_obj_ram[0], 0, memshare("objram")->bytes()); // needed for Nebulas Ray
884   memset(m_c355_obj_position, 0, sizeof(m_c355_obj_position));
885}
886
916887template<class _BitmapClass>
917static void
918DrawObjectList(running_machine &machine,
919      _BitmapClass &bitmap,
920      const rectangle &cliprect,
921      int pri,
922      const UINT16 *pSpriteList16,
923      const UINT16 *pSpriteTable )
888void namcos2_shared_state::c355_obj_draw_list(_BitmapClass &bitmap, const rectangle &cliprect, int pri, const UINT16 *pSpriteList16, const UINT16 *pSpriteTable)
924889{
925890   int i;
926891   /* draw the sprites */
927892   for( i=0; i<256; i++ )
928893   {
929894      UINT16 which = pSpriteList16[i];
930      draw_spriteC355(machine, bitmap, cliprect, &pSpriteTable[(which&0xff)*8], pri, i );
895      c355_obj_draw_sprite(bitmap, cliprect, &pSpriteTable[(which&0xff)*8], pri, i );
931896      if( which&0x100 ) break;
932897   }
933} /* DrawObjectList */
898}
934899
935void
936namco_obj_draw(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int pri )
900void namcos2_shared_state::c355_obj_draw(bitmap_ind16 &bitmap, const rectangle &cliprect, int pri)
937901{
938902//  int offs = spriteram16[0x18000/2]; /* end-of-sprite-list */
939   if( pri==0 )
940   {
941      machine.priority_bitmap.fill(0, cliprect );
942   }
943//  if( offs==0 )
944   { /* boot */
945      DrawObjectList(machine, bitmap,cliprect,pri,&m_spriteram[0x02000/2], &m_spriteram[0x00000/2] );
946   }
903   if (pri == 0)
904      machine().priority_bitmap.fill(0, cliprect);
905
906//  if (offs == 0)   // boot
907      c355_obj_draw_list(bitmap, cliprect, pri, &m_c355_obj_ram[0x02000/2], &m_c355_obj_ram[0x00000/2]);
947908//  else
948   {
949      DrawObjectList(machine, bitmap,cliprect,pri,&m_spriteram[0x14000/2], &m_spriteram[0x10000/2] );
950   }
951} /* namco_obj_draw */
909      c355_obj_draw_list(bitmap, cliprect, pri, &m_c355_obj_ram[0x14000/2], &m_c355_obj_ram[0x10000/2]);
910}
952911
953void
954namco_obj_draw(running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect, int pri )
912void namcos2_shared_state::c355_obj_draw(bitmap_rgb32 &bitmap, const rectangle &cliprect, int pri)
955913{
956914//  int offs = spriteram16[0x18000/2]; /* end-of-sprite-list */
957   if( pri==0 )
958   {
959      machine.priority_bitmap.fill(0, cliprect );
960   }
961//  if( offs==0 )
962   { /* boot */
963      DrawObjectList(machine, bitmap,cliprect,pri,&m_spriteram[0x02000/2], &m_spriteram[0x00000/2] );
964   }
915   if (pri == 0)
916      machine().priority_bitmap.fill(0, cliprect);
917
918//  if (offs == 0)   // boot
919      c355_obj_draw_list(bitmap, cliprect, pri, &m_c355_obj_ram[0x02000/2], &m_c355_obj_ram[0x00000/2]);
965920//  else
966   {
967      DrawObjectList(machine, bitmap,cliprect,pri,&m_spriteram[0x14000/2], &m_spriteram[0x10000/2] );
968   }
969} /* namco_obj_draw */
921      c355_obj_draw_list(bitmap, cliprect, pri, &m_c355_obj_ram[0x14000/2], &m_c355_obj_ram[0x10000/2]);
922}
970923
971WRITE16_HANDLER( namco_obj16_w )
924WRITE16_MEMBER( namcos2_shared_state::c355_obj_ram_w )
972925{
973   COMBINE_DATA( &m_spriteram[offset] );
974} /* namco_obj16_w */
926   COMBINE_DATA(&m_c355_obj_ram[offset]);
927}
975928
976READ16_HANDLER( namco_obj16_r )
929READ16_MEMBER( namcos2_shared_state::c355_obj_ram_r )
977930{
978   return m_spriteram[offset];
979} /* namco_obj16_r */
931   return m_c355_obj_ram[offset];
932}
980933
981WRITE32_HANDLER( namco_obj32_w )
982{
983   UINT16 *spriteram16 = m_spriteram;
984   UINT32 v;
985   offset *= 2;
986   v = (spriteram16[offset]<<16)|spriteram16[offset+1];
987   COMBINE_DATA( &v );
988   spriteram16[offset] = v>>16;
989   spriteram16[offset+1] = v&0xffff;
990} /* namco_obj32_w */
991
992READ32_HANDLER( namco_obj32_r )
993{
994   UINT16 *spriteram16 = m_spriteram;
995   offset *= 2;
996   return (spriteram16[offset]<<16)|spriteram16[offset+1];
997} /* namco_obj32_r */
998
999WRITE32_HANDLER( namco_obj32_le_w )
1000{
1001   UINT16 *spriteram16 = m_spriteram;
1002   UINT32 v;
1003   offset *= 2;
1004   v = (spriteram16[offset+1]<<16)|spriteram16[offset];
1005   COMBINE_DATA( &v );
1006   spriteram16[offset+1] = v>>16;
1007   spriteram16[offset] = v&0xffff;
1008} /* namco_obj32_w */
1009
1010READ32_HANDLER( namco_obj32_le_r )
1011{
1012   UINT16 *spriteram16 = m_spriteram;
1013   offset *= 2;
1014   return (spriteram16[offset+1]<<16)|spriteram16[offset];
1015} /* namco_obj32_r */
1016
1017934/**************************************************************************************************************/
1018935
1019936/**
r17652r17653
1027944 *  Namco System 2 - Metal Hawk, Lucky and Wild
1028945 *  Namco System FL - Final Lap R, Speed Racer
1029946 */
1030#define ROZ_TILEMAP_COUNT 2
1031static tilemap_t *mRozTilemap[ROZ_TILEMAP_COUNT];
1032static UINT16 *rozbank16;
1033static UINT16 *rozvideoram16;
1034static UINT16 *rozcontrol16;
1035static int mRozGfxBank;
1036static const char * mRozMaskRegion;
1037947
1038948/**
1039949 * Graphics ROM addressing varies across games.
1040950 */
1041static void
1042roz_get_info( running_machine &machine, tile_data &tileinfo, int tile_index, int which)
951void namcos2_shared_state::c169_roz_get_info(tile_data &tileinfo, int tile_index, int which)
1043952{
1044   UINT16 tile = rozvideoram16[tile_index];
953   UINT16 tile = m_c169_roz_videoram[tile_index];
1045954   int bank, mangle;
1046955
1047   switch( namcos2_gametype )
956   switch (m_gametype)
1048957   {
1049   case NAMCONB2_MACH_BREAKERS:
1050      bank = nth_byte16( &rozbank16[which*8/2], (tile>>11)&0x7 );
1051      tile = (tile&0x7ff)|(bank*0x800);
1052      mangle = tile;
1053      break;
958      case NAMCONB2_MACH_BREAKERS:
959         bank = nth_byte16(&m_c169_roz_bank[which * 8 / 2], (tile >> 11) & 0x7);
960         tile = (tile & 0x7ff) | (bank * 0x800);
961         mangle = tile;
962         break;
1054963
1055   case NAMCONB2_OUTFOXIES:
1056      bank = nth_byte16( &rozbank16[which*8/2], (tile>>11)&0x7 );
1057      tile = (tile&0x7ff)|(bank*0x800);
1058      mangle = tile&~(0x50);
1059      if( tile&0x10 ) mangle |= 0x40;
1060      if( tile&0x40 ) mangle |= 0x10;
1061      break;
964      case NAMCONB2_OUTFOXIES:
965         bank = nth_byte16(&m_c169_roz_bank[which * 8 / 2], (tile >> 11) & 0x7);
966         tile = (tile & 0x7ff) | (bank * 0x800);
967         mangle = tile & ~0x50;
968         if (tile & 0x10) mangle |= 0x40;
969         if (tile & 0x40) mangle |= 0x10;
970         break;
1062971
1063   case NAMCOS2_LUCKY_AND_WILD:
1064      mangle   = tile&0x01ff;
1065      tile &= 0x3fff;
1066      switch( tile>>9 )
1067      {
1068      case 0x00: mangle |= 0x1c00; break;
1069      case 0x01: mangle |= 0x0800; break;
1070      case 0x02: mangle |= 0x0000; break;
972      case NAMCOS2_LUCKY_AND_WILD:
973         mangle = tile & 0x01ff;
974         tile &= 0x3fff;
975         switch (tile >> 9)
976         {
977            case 0x00: mangle |= 0x1c00; break;
978            case 0x01: mangle |= 0x0800; break;
979            case 0x02: mangle |= 0x0000; break;
1071980
1072      case 0x08: mangle |= 0x1e00; break;
1073      case 0x09: mangle |= 0x0a00; break;
1074      case 0x0a: mangle |= 0x0200; break;
981            case 0x08: mangle |= 0x1e00; break;
982            case 0x09: mangle |= 0x0a00; break;
983            case 0x0a: mangle |= 0x0200; break;
1075984
1076      case 0x10: mangle |= 0x2000; break;
1077      case 0x11: mangle |= 0x0c00; break;
1078      case 0x12: mangle |= 0x0400; break;
985            case 0x10: mangle |= 0x2000; break;
986            case 0x11: mangle |= 0x0c00; break;
987            case 0x12: mangle |= 0x0400; break;
1079988
1080      case 0x18: mangle |= 0x2200; break;
1081      case 0x19: mangle |= 0x0e00; break;
1082      case 0x1a: mangle |= 0x0600; break;
1083      }
1084      break;
989            case 0x18: mangle |= 0x2200; break;
990            case 0x19: mangle |= 0x0e00; break;
991            case 0x1a: mangle |= 0x0600; break;
992         }
993         break;
1085994
1086   case NAMCOS2_METAL_HAWK:
1087      mangle = tile&0x01ff;
1088      if( tile&0x1000 ) mangle |= 0x0200;
1089      if( tile&0x0200 ) mangle |= 0x0400;
1090      if( tile&0x0400 ) mangle |= 0x0800;
1091      if( tile&0x0800 ) mangle |= 0x1000;
1092      tile &= 0x3fff; /* cap mask offset */
1093      break;
995      case NAMCOS2_METAL_HAWK:
996         mangle = tile & 0x01ff;
997         if (tile & 0x1000) mangle |= 0x0200;
998         if (tile & 0x0200) mangle |= 0x0400;
999         if (tile & 0x0400) mangle |= 0x0800;
1000         if (tile & 0x0800) mangle |= 0x1000;
1001         tile &= 0x3fff; // cap mask offset
1002         break;
10941003
1095   default:
1096   case NAMCOFL_SPEED_RACER:
1097   case NAMCOFL_FINAL_LAP_R:
1098      mangle = tile;
1099      tile &= 0x3fff; /* cap mask offset */
1100      break;
1004      default:
1005      case NAMCOFL_SPEED_RACER:
1006      case NAMCOFL_FINAL_LAP_R:
1007         mangle = tile;
1008         tile &= 0x3fff; // cap mask offset
1009         break;
11011010   }
1102   SET_TILE_INFO( mRozGfxBank,mangle,0/*color*/,0/*flag*/ );
1103   tileinfo.mask_data = 32*tile + (UINT8 *)machine.root_device().memregion( mRozMaskRegion )->base();
1104} /* roz_get_info */
1011   SET_TILE_INFO_MEMBER(m_c169_roz_gfxbank, mangle, 0/*color*/, 0/*flag*/);
1012   tileinfo.mask_data = m_c169_roz_mask + 32*tile;
1013}
11051014
1106static
1107TILE_GET_INFO( roz_get_info0 )
1015TILE_GET_INFO_MEMBER( namcos2_shared_state::c169_roz_get_info0 )
11081016{
1109   roz_get_info( machine,tileinfo,tile_index,0 );
1110} /* roz_get_info0 */
1017   c169_roz_get_info(tileinfo, tile_index, 0);
1018}
11111019
1112static
1113TILE_GET_INFO( roz_get_info1 )
1020TILE_GET_INFO_MEMBER( namcos2_shared_state::c169_roz_get_info1 )
11141021{
1115   roz_get_info( machine,tileinfo,tile_index,1 );
1116} /* roz_get_info1 */
1022   c169_roz_get_info(tileinfo, tile_index, 1);
1023}
11171024
1118static
1119TILEMAP_MAPPER( namco_roz_scan )
1025TILEMAP_MAPPER_MEMBER( namcos2_shared_state::c169_roz_mapper )
11201026{
1121   if( col>=128 )
1027   if (col >= 128)
11221028   {
11231029      col %= 128;
11241030      row += 256;
11251031   }
1126   return row*128+col;
1127} /* namco_roz_scan*/
1032   return row * 128 + col;
1033}
11281034
1129void
1130namco_roz_init( running_machine &machine, int gfxbank, const char * maskregion )
1035void namcos2_shared_state::c169_roz_init(int gfxbank, const char *maskregion)
11311036{
1132   int i;
1133   static const tile_get_info_func roz_info[ROZ_TILEMAP_COUNT] =
1134   {
1135      roz_get_info0,
1136      roz_get_info1
1137   };
1037   m_c169_roz_gfxbank = gfxbank;
1038   m_c169_roz_mask = memregion(maskregion)->base();
11381039
1139   mRozGfxBank = gfxbank;
1140   mRozMaskRegion = maskregion;
1040   m_c169_roz_tilemap[0] = &machine().tilemap().create(
1041      tilemap_get_info_delegate(FUNC(namcos2_shared_state::c169_roz_get_info0), this),
1042      tilemap_mapper_delegate(FUNC(namcos2_shared_state::c169_roz_mapper), this),
1043      16,16,
1044      256,256);
11411045
1142   rozbank16 = auto_alloc_array(machine, UINT16, 0x10/2);
1143   rozvideoram16 = auto_alloc_array(machine, UINT16, 0x20000/2);
1144   rozcontrol16 = auto_alloc_array(machine, UINT16, 0x20/2);
1046   m_c169_roz_tilemap[1] = &machine().tilemap().create(
1047      tilemap_get_info_delegate(FUNC(namcos2_shared_state::c169_roz_get_info1), this),
1048      tilemap_mapper_delegate(FUNC(namcos2_shared_state::c169_roz_mapper), this),
1049      16,16,
1050      256,256);
11451051
1146      for( i=0; i<ROZ_TILEMAP_COUNT; i++ )
1147      {
1148         mRozTilemap[i] = tilemap_create(machine,
1149            roz_info[i],
1150            namco_roz_scan,
1151            16,16,
1152            256,256 );
1153      }
1154} /* namco_roz_init */
1052}
11551053
1156struct RozParam
1054void namcos2_shared_state::c169_roz_unpack_params(const UINT16 *source, roz_parameters &params)
11571055{
1158   UINT32 left, top, size;
1159   UINT32 startx,starty;
1160   int incxx,incxy,incyx,incyy;
1161   int color,priority;
1162};
1163
1164static void
1165UnpackRozParam( const UINT16 *pSource, struct RozParam *pRozParam )
1166{
11671056   const int xoffset = 36, yoffset = 3;
11681057
11691058   /**
r17652r17653
11731062     * --------.xxxx---- priority
11741063     * --------.----xxxx color
11751064     */
1176   UINT16 temp = pSource[1];
1177   pRozParam->size     = 512<<((temp&0x0300)>>8);
1178   if ((namcos2_gametype == NAMCOFL_SPEED_RACER) || (namcos2_gametype == NAMCOFL_FINAL_LAP_R))
1179   {
1180      pRozParam->color    = (temp&0x0007)*256;
1181   }
1065
1066   UINT16 temp = source[1];
1067   params.size = 512 << ((temp & 0x0300) >> 8);
1068   if (m_gametype == NAMCOFL_SPEED_RACER || m_gametype == NAMCOFL_FINAL_LAP_R)
1069      params.color = (temp & 0x0007) * 256;
11821070   else
1183   {
1184   pRozParam->color    = (temp&0x000f)*256;
1185   }
1186   pRozParam->priority = (temp&0x00f0)>>4;
1071      params.color = (temp & 0x000f) * 256;
1072   params.priority = (temp & 0x00f0) >> 4;
11871073
1188   temp = pSource[2];
1189   pRozParam->left = (temp&0x7000)>>3;
1190   if( temp&0x8000 ) temp |= 0xf000; else temp&=0x0fff; /* sign extend */
1191   pRozParam->incxx = (INT16)temp;
1074   temp = source[2];
1075   params.left = (temp & 0x7000) >> 3;
1076   if (temp & 0x8000) temp |= 0xf000; else temp &= 0x0fff; // sign extend
1077   params.incxx = INT16(temp);
11921078
1193   temp = pSource[3];
1194   pRozParam->top = (temp&0x7000)>>3;
1195   if( temp&0x8000 ) temp |= 0xf000; else temp&=0x0fff; /* sign extend */
1196   pRozParam->incxy =  (INT16)temp;
1079   temp = source[3];
1080   params.top = (temp&0x7000)>>3;
1081   if (temp & 0x8000) temp |= 0xf000; else temp &= 0x0fff; // sign extend
1082   params.incxy = INT16(temp);
11971083
1198   temp = pSource[4];
1199   if( temp&0x8000 ) temp |= 0xf000; else temp&=0x0fff; /* sign extend */
1200   pRozParam->incyx =  (INT16)temp;
1084   temp = source[4];
1085   if (temp & 0x8000) temp |= 0xf000; else temp &= 0x0fff; // sign extend
1086   params.incyx = INT16(temp);
12011087
1202   temp = pSource[5];
1203   if( temp&0x8000 ) temp |= 0xf000; else temp&=0x0fff; /* sign extend */
1204   pRozParam->incyy =  (INT16)temp;
1088   temp = source[5];
1089   if (temp & 0x8000) temp |= 0xf000; else temp &= 0x0fff; // sign extend
1090   params.incyy = INT16(temp);
12051091
1206   pRozParam->startx = (INT16)pSource[6];
1207   pRozParam->starty = (INT16)pSource[7];
1208   pRozParam->startx <<= 4;
1209   pRozParam->starty <<= 4;
1092   params.startx = INT16(source[6]);
1093   params.starty = INT16(source[7]);
1094   params.startx <<= 4;
1095   params.starty <<= 4;
12101096
1211   pRozParam->startx += xoffset * pRozParam->incxx + yoffset * pRozParam->incyx;
1212   pRozParam->starty += xoffset * pRozParam->incxy + yoffset * pRozParam->incyy;
1097   params.startx += xoffset * params.incxx + yoffset * params.incyx;
1098   params.starty += xoffset * params.incxy + yoffset * params.incyy;
12131099
1214   /* normalize */
1215   pRozParam->startx <<= 8;
1216   pRozParam->starty <<= 8;
1217   pRozParam->incxx <<= 8;
1218   pRozParam->incxy <<= 8;
1219   pRozParam->incyx <<= 8;
1220   pRozParam->incyy <<= 8;
1221} /* UnpackRozParam */
1100   // normalize
1101   params.startx <<= 8;
1102   params.starty <<= 8;
1103   params.incxx <<= 8;
1104   params.incxy <<= 8;
1105   params.incyx <<= 8;
1106   params.incyy <<= 8;
1107}
12221108
1223static void
1224DrawRozHelper(
1225   bitmap_ind16 &bitmap,
1226   tilemap_t *tmap,
1227   const rectangle &clip,
1228   const struct RozParam *rozInfo )
1109void namcos2_shared_state::c169_roz_draw_helper(bitmap_ind16 &bitmap, tilemap_t &tmap, const rectangle &clip, const roz_parameters &params)
12291110{
1230
1231   if( (bitmap.bpp() == 16) &&
1232       (namcos2_gametype != NAMCOFL_SPEED_RACER) &&
1233       (namcos2_gametype != NAMCOFL_FINAL_LAP_R))
1111   if (m_gametype != NAMCOFL_SPEED_RACER && m_gametype != NAMCOFL_FINAL_LAP_R)
12341112   {
1235      UINT32 size_mask = rozInfo->size-1;
1236      bitmap_ind16 &srcbitmap = tmap->pixmap();
1237      bitmap_ind8 &flagsbitmap = tmap->flagsmap();
1238      UINT32 startx = rozInfo->startx + clip.min_x * rozInfo->incxx + clip.min_y * rozInfo->incyx;
1239      UINT32 starty = rozInfo->starty + clip.min_x * rozInfo->incxy + clip.min_y * rozInfo->incyy;
1113      UINT32 size_mask = params.size - 1;
1114      bitmap_ind16 &srcbitmap = tmap.pixmap();
1115      bitmap_ind8 &flagsbitmap = tmap.flagsmap();
1116      UINT32 startx = params.startx + clip.min_x * params.incxx + clip.min_y * params.incyx;
1117      UINT32 starty = params.starty + clip.min_x * params.incxy + clip.min_y * params.incyy;
12401118      int sx = clip.min_x;
12411119      int sy = clip.min_y;
1242      while( sy <= clip.max_y )
1120      while (sy <= clip.max_y)
12431121      {
12441122         int x = sx;
12451123         UINT32 cx = startx;
12461124         UINT32 cy = starty;
1247         UINT16 *dest = &bitmap.pix16(sy, sx);
1248         while( x <= clip.max_x )
1125         UINT16 *dest = &bitmap.pix(sy, sx);
1126         while (x <= clip.max_x)
12491127         {
1250            UINT32 xpos = (((cx>>16)&size_mask) + rozInfo->left)&0xfff;
1251            UINT32 ypos = (((cy>>16)&size_mask) + rozInfo->top)&0xfff;
1252            if( flagsbitmap.pix8(ypos, xpos)&TILEMAP_PIXEL_LAYER0 )
1253            {
1254               *dest = srcbitmap.pix16(ypos, xpos)+rozInfo->color;
1255            }
1256            cx += rozInfo->incxx;
1257            cy += rozInfo->incxy;
1128            UINT32 xpos = (((cx >> 16) & size_mask) + params.left) & 0xfff;
1129            UINT32 ypos = (((cy >> 16) & size_mask) + params.top) & 0xfff;
1130            if (flagsbitmap.pix(ypos, xpos) & TILEMAP_PIXEL_LAYER0)
1131               *dest = srcbitmap.pix(ypos, xpos) + params.color;
1132            cx += params.incxx;
1133            cy += params.incxy;
12581134            x++;
12591135            dest++;
1260         } /* next x */
1261         startx += rozInfo->incyx;
1262         starty += rozInfo->incyy;
1136         }
1137         startx += params.incyx;
1138         starty += params.incyy;
12631139         sy++;
1264      } /* next y */
1140      }
12651141   }
12661142   else
1267
12681143   {
1269      tmap->set_palette_offset( rozInfo->color );
1270
1271      tmap->draw_roz(
1144      tmap.set_palette_offset(params.color);
1145      tmap.draw_roz(
12721146         bitmap,
12731147         clip,
1274         rozInfo->startx, rozInfo->starty,
1275         rozInfo->incxx, rozInfo->incxy,
1276         rozInfo->incyx, rozInfo->incyy,
1148         params.startx, params.starty,
1149         params.incxx, params.incxy,
1150         params.incyx, params.incyy,
12771151         1,0,0); // wrap, flags, pri
12781152   }
1279} /* DrawRozHelper */
1153}
12801154
1281static void
1282DrawRozScanline( bitmap_ind16 &bitmap, int line, int which, int pri, const rectangle &cliprect )
1155void namcos2_shared_state::c169_roz_draw_scanline(bitmap_ind16 &bitmap, int line, int which, int pri, const rectangle &cliprect)
12831156{
1284   if( line>=cliprect.min_y && line<=cliprect.max_y )
1157   if (line >= cliprect.min_y && line <= cliprect.max_y)
12851158   {
1286      struct RozParam rozInfo;
1287      rectangle clip;
1288      int row = line/8;
1289      int offs = row*0x100+(line&7)*0x10 + 0xe080;
1290      UINT16 *pSource = &rozvideoram16[offs/2];
1291      if( (pSource[1]&0x8000)==0 )
1159      int row = line / 8;
1160      int offs = row * 0x100 + (line & 7) * 0x10 + 0xe080;
1161      UINT16 *source = &m_c169_roz_videoram[offs / 2];
1162     
1163      // if enabled
1164      if ((source[1] & 0x8000) == 0)
12921165      {
1293         UnpackRozParam( pSource, &rozInfo );
1294         if( pri == rozInfo.priority )
1166         roz_parameters params;
1167         c169_roz_unpack_params(source, params);
1168         
1169         // check priority
1170         if (pri == params.priority)
12951171         {
1296            clip.set(0, bitmap.width()-1, line, line);
1172            rectangle clip(0, bitmap.width() - 1, line, line);
12971173            clip &= cliprect;
1298
1299            DrawRozHelper( bitmap, mRozTilemap[which], clip, &rozInfo );
1300         } /* priority */
1301      } /* enabled */
1174            c169_roz_draw_helper(bitmap, *m_c169_roz_tilemap[which], clip, params);
1175         }
1176      }
13021177   }
1303} /* DrawRozScanline */
1178}
13041179
1305void
1306namco_roz_draw( bitmap_ind16 &bitmap, const rectangle &cliprect, int pri )
1180void namcos2_shared_state::c169_roz_draw(bitmap_ind16 &bitmap, const rectangle &cliprect, int pri)
13071181{
1308   int mode = rozcontrol16[0]; /* 0x8000 or 0x1000 */
1309   int which, special = 1;
1182   int special = (m_gametype == NAMCOFL_SPEED_RACER || m_gametype == NAMCOFL_FINAL_LAP_R) ? 0 : 1;
1183   int mode = m_c169_roz_control[0]; // 0x8000 or 0x1000
13101184
1311   if ((namcos2_gametype == NAMCOFL_SPEED_RACER) || (namcos2_gametype == NAMCOFL_FINAL_LAP_R))
1185   for (int which = 1; which >= 0; which--)
13121186   {
1313      special = 0;
1314   }
1315
1316   for( which=1; which>=0; which-- )
1317   {
1318      const UINT16 *pSource = &rozcontrol16[which*8];
1319      UINT16 attrs = pSource[1];
1320      if( (attrs&0x8000)==0 )
1321      { /* layer is enabled */
1322         if( which==special && mode==0x8000 )
1323         { /* second ROZ layer is configured to use per-scanline registers */
1324            int line;
1325            for( line=0; line<224; line++ )
1326            {
1327               DrawRozScanline( bitmap, line, which, pri, cliprect/*, tmap*/ );
1328            }
1187      const UINT16 *source = &m_c169_roz_control[which * 8];
1188      UINT16 attrs = source[1];
1189     
1190      // if enabled
1191      if ((attrs & 0x8000) == 0)
1192      {
1193         // second ROZ layer is configured to use per-scanline registers
1194         if (which == special && mode == 0x8000)
1195         {
1196            for (int line = 0; line < 224; line++)
1197               c169_roz_draw_scanline(bitmap, line, which, pri, cliprect);
13291198         }
13301199         else
13311200         {
1332            struct RozParam rozInfo;
1333            UnpackRozParam( pSource, &rozInfo );
1334            if( rozInfo.priority == pri )
1335            {
1336               DrawRozHelper( bitmap, mRozTilemap[which], cliprect, &rozInfo );
1337            } /* roz_pri==pri */
1201            roz_parameters params;
1202            c169_roz_unpack_params(source, params);
1203            if (params.priority == pri)
1204               c169_roz_draw_helper(bitmap, *m_c169_roz_tilemap[which], cliprect, params);
13381205         }
1339      } /* enable */
1340   } /* which */
1341} /* namco_roz_draw */
1342
1343READ16_HANDLER( namco_rozcontrol16_r )
1344{
1345   return rozcontrol16[offset];
1346} /* namco_rozcontrol16_r */
1347
1348WRITE16_HANDLER( namco_rozcontrol16_w )
1349{
1350   COMBINE_DATA( &rozcontrol16[offset] );
1351} /* namco_rozcontrol16_w */
1352
1353#ifdef UNUSED_FUNCTION
1354READ16_HANDLER( namco_rozbank16_r )
1355{
1356   return rozbank16[offset];
1357} /* namco_rozbank16_r */
1358
1359WRITE16_HANDLER( namco_rozbank16_w )
1360{
1361   UINT16 old_data = rozbank16[offset];
1362   COMBINE_DATA( &rozbank16[offset] );
1363   if( rozbank16[offset]!=old_data )
1364   {
1365      int i;
1366      for( i=0; i<ROZ_TILEMAP_COUNT; i++ )
1367      {
1368         mRozTilemap[i]->mark_all_dirty();
13691206      }
1370   }
1371} /* namco_rozbank16_w */
1372#endif
1207   }
1208}
13731209
1374static void
1375writerozvideo( int offset, UINT16 data )
1210READ16_MEMBER( namcos2_shared_state::c169_roz_control_r )
13761211{
1377   int i;
1378   rozvideoram16[offset] = data;
1379   for( i=0; i<ROZ_TILEMAP_COUNT; i++ )
1380   {
1381      mRozTilemap[i]->mark_tile_dirty( offset );
1382   }
1383} /* writerozvideo */
1212   return m_c169_roz_control[offset];
1213}
13841214
1385READ16_HANDLER( namco_rozvideoram16_r )
1215WRITE16_MEMBER( namcos2_shared_state::c169_roz_control_w )
13861216{
1387   return rozvideoram16[offset];
1388} /* namco_rozvideoram16_r */
1217   COMBINE_DATA(&m_c169_roz_control[offset]);
1218}
13891219
1390WRITE16_HANDLER( namco_rozvideoram16_w )
1220READ16_MEMBER( namcos2_shared_state::c169_roz_bank_r )
13911221{
1392   UINT16 v = rozvideoram16[offset];
1393   COMBINE_DATA( &v );
1394   writerozvideo( offset, v );
1395} /* namco_rozvideoram16_w */
1222   return m_c169_roz_bank[offset];
1223}
13961224
1397READ32_HANDLER( namco_rozcontrol32_r )
1225WRITE16_MEMBER( namcos2_shared_state::c169_roz_bank_w )
13981226{
1399   offset *= 2;
1400   return (rozcontrol16[offset]<<16)|rozcontrol16[offset+1];
1401} /* namco_rozcontrol32_r */
1227   UINT16 old_data = m_c169_roz_bank[offset];
1228   COMBINE_DATA(&m_c169_roz_bank[offset]);
1229   if (m_c169_roz_bank[offset] != old_data)
1230      for (int i = 0; i < ROZ_TILEMAP_COUNT; i++)
1231         m_c169_roz_tilemap[i]->mark_all_dirty();
1232}
14021233
1403WRITE32_HANDLER( namco_rozcontrol32_w )
1234READ16_MEMBER( namcos2_shared_state::c169_roz_videoram_r )
14041235{
1405   UINT32 v;
1406   offset *=2;
1407   v = (rozcontrol16[offset]<<16)|rozcontrol16[offset+1];
1408   COMBINE_DATA(&v);
1409   rozcontrol16[offset] = v>>16;
1410   rozcontrol16[offset+1] = v&0xffff;
1411} /* namco_rozcontrol32_w */
1236   return m_c169_roz_videoram[offset];
1237}
14121238
1413READ32_HANDLER( namco_rozcontrol32_le_r )
1239WRITE16_MEMBER( namcos2_shared_state::c169_roz_videoram_w )
14141240{
1415   offset *= 2;
1416   return (rozcontrol16[offset]<<16)|rozcontrol16[offset+1];
1417} /* namco_rozcontrol32_le_r */
1241   COMBINE_DATA(&m_c169_roz_videoram[offset]);
1242   for (int i = 0; i < ROZ_TILEMAP_COUNT; i++)
1243      m_c169_roz_tilemap[i]->mark_tile_dirty(offset);
1244}
14181245
1419WRITE32_HANDLER( namco_rozcontrol32_le_w )
1420{
1421   UINT32 v;
1422   offset *=2;
1423   v = (rozcontrol16[offset+1]<<16)|rozcontrol16[offset];
1424   COMBINE_DATA(&v);
1425   rozcontrol16[offset+1] = v>>16;
1426   rozcontrol16[offset] = v&0xffff;
1427} /* namco_rozcontrol32_le_w */
1428
1429READ32_HANDLER( namco_rozbank32_r )
1430{
1431   offset *= 2;
1432   return (rozbank16[offset]<<16)|rozbank16[offset+1];
1433} /* namco_rozbank32_r */
1434
1435WRITE32_HANDLER( namco_rozbank32_w )
1436{
1437   UINT32 v;
1438   offset *=2;
1439   v = (rozbank16[offset]<<16)|rozbank16[offset+1];
1440   COMBINE_DATA(&v);
1441   rozbank16[offset] = v>>16;
1442   rozbank16[offset+1] = v&0xffff;
1443} /* namco_rozbank32_w */
1444
1445READ32_HANDLER( namco_rozvideoram32_r )
1446{
1447   offset *= 2;
1448   return (rozvideoram16[offset]<<16)|rozvideoram16[offset+1];
1449} /* namco_rozvideoram32_r */
1450
1451WRITE32_HANDLER( namco_rozvideoram32_w )
1452{
1453   UINT32 v;
1454   offset *= 2;
1455   v = (rozvideoram16[offset]<<16)|rozvideoram16[offset+1];
1456   COMBINE_DATA( &v );
1457   writerozvideo(offset,v>>16);
1458   writerozvideo(offset+1,v&0xffff);
1459} /* namco_rozvideoram32_w */
1460
1461READ32_HANDLER( namco_rozvideoram32_le_r )
1462{
1463   offset *= 2;
1464   return (rozvideoram16[offset+1]<<16)|rozvideoram16[offset];
1465} /* namco_rozvideoram32_le_r */
1466
1467WRITE32_HANDLER( namco_rozvideoram32_le_w )
1468{
1469   UINT32 v;
1470   offset *= 2;
1471   v = (rozvideoram16[offset+1]<<16)|rozvideoram16[offset];
1472   COMBINE_DATA( &v );
1473   writerozvideo(offset+1,v>>16);
1474   writerozvideo(offset,v&0xffff);
1475} /* namco_rozvideoram32_le_w */
1476
14771246/**************************************************************************************************************/
14781247/*
14791248    Land Line Buffer
trunk/src/mame/drivers/namcofl.c
r17652r17653
156156*/
157157
158158#include "emu.h"
159#include "includes/namcos2.h"
160159#include "includes/namcoic.h"
161160#include "cpu/i960/i960.h"
162161#include "cpu/m37710/m37710.h"
r17652r17653
236235   AM_RANGE(0x30400000, 0x3040ffff) AM_RAM_WRITE(namcofl_paletteram_w) AM_SHARE("paletteram")
237236   AM_RANGE(0x30800000, 0x3080ffff) AM_READWRITE_LEGACY(namco_tilemapvideoram32_le_r, namco_tilemapvideoram32_le_w )
238237   AM_RANGE(0x30a00000, 0x30a0003f) AM_READWRITE_LEGACY(namco_tilemapcontrol32_le_r, namco_tilemapcontrol32_le_w )
239   AM_RANGE(0x30c00000, 0x30c1ffff) AM_READWRITE_LEGACY(namco_rozvideoram32_le_r,namco_rozvideoram32_le_w)
240   AM_RANGE(0x30d00000, 0x30d0001f) AM_READWRITE_LEGACY(namco_rozcontrol32_le_r,namco_rozcontrol32_le_w)
241   AM_RANGE(0x30e00000, 0x30e1ffff) AM_READWRITE_LEGACY(namco_obj32_le_r, namco_obj32_le_w)
238   AM_RANGE(0x30c00000, 0x30c1ffff) AM_READWRITE16(c169_roz_videoram_r,c169_roz_videoram_w,0xffffffff) AM_SHARE("rozvideoram")
239   AM_RANGE(0x30d00000, 0x30d0001f) AM_READWRITE16(c169_roz_control_r,c169_roz_control_w,0xffffffff)
240   AM_RANGE(0x30e00000, 0x30e1ffff) AM_READWRITE16(c355_obj_ram_r,c355_obj_ram_w,0xffffffff) AM_SHARE("objram")
242241   AM_RANGE(0x30f00000, 0x30f0000f) AM_RAM /* NebulaM2 code says this is int enable at 0000, int request at 0004, but doesn't do much about it */
243242   AM_RANGE(0x40000000, 0x4000005f) AM_READWRITE(namcofl_sysreg_r, namcofl_sysreg_w )
244243   AM_RANGE(0xfffffffc, 0xffffffff) AM_READ(fl_unk1_r )
r17652r17653
818817DRIVER_INIT_MEMBER(namcofl_state,speedrcr)
819818{
820819   namcofl_common_init(machine());
821   namcos2_gametype = NAMCOFL_SPEED_RACER;
820   m_gametype = NAMCOFL_SPEED_RACER;
822821}
823822
824823DRIVER_INIT_MEMBER(namcofl_state,finalapr)
825824{
826825   namcofl_common_init(machine());
827   namcos2_gametype = NAMCOFL_FINAL_LAP_R;
826   m_gametype = NAMCOFL_FINAL_LAP_R;
828827}
829828
830829GAME ( 1995, speedrcr,         0, namcofl, speedrcr, namcofl_state, speedrcr, ROT0, "Namco", "Speed Racer", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
trunk/src/mame/drivers/namcos2.c
r17652r17653
538538   {
539539      m_dpram[offset] = data&0xff;
540540
541      if( namcos2_gametype==NAMCOS2_GOLLY_GHOST )
541      if( m_gametype==NAMCOS2_GOLLY_GHOST )
542542      {
543543         switch( offset )
544544         {
r17652r17653
601601/*************************************************************/
602602
603603static ADDRESS_MAP_START( common_default_am, AS_PROGRAM, 16, namcos2_state )
604   AM_RANGE(0xc00000, 0xc03fff) AM_READWRITE(spriteram_word_r, spriteram_word_w) AM_SHARE("spriteram")
605   AM_RANGE(0xc40000, 0xc40001) AM_READWRITE_LEGACY(namcos2_gfx_ctrl_r,namcos2_gfx_ctrl_w)
606   AM_RANGE(0xc80000, 0xc9ffff) AM_READWRITE(rozram_word_r,rozram_word_w) AM_SHARE("rozram")
607   AM_RANGE(0xcc0000, 0xcc000f) AM_READWRITE(roz_ctrl_word_r, roz_ctrl_word_w)
604   AM_RANGE(0xc00000, 0xc03fff) AM_RAM AM_SHARE("spriteram")
605   AM_RANGE(0xc40000, 0xc40001) AM_READWRITE(gfx_ctrl_r, gfx_ctrl_w)
606   AM_RANGE(0xc80000, 0xc9ffff) AM_RAM_WRITE(rozram_word_w) AM_SHARE("rozram")
607   AM_RANGE(0xcc0000, 0xcc000f) AM_RAM AM_SHARE("rozctrl")
608608   AM_RANGE(0xd00000, 0xd0000f) AM_READWRITE_LEGACY(namcos2_68k_key_r,namcos2_68k_key_w)
609609   AM_IMPORT_FROM( namcos2_68k_default_cpu_board_am )
610610ADDRESS_MAP_END
r17652r17653
629629
630630static ADDRESS_MAP_START( common_finallap_am, AS_PROGRAM, 16, namcos2_state )
631631   AM_RANGE(0x300000, 0x33ffff) AM_READ_LEGACY(namcos2_flap_prot_r)
632   AM_RANGE(0x800000, 0x80ffff) AM_READWRITE(spriteram_word_r, spriteram_word_w) AM_SHARE("spriteram")
633   AM_RANGE(0x840000, 0x840001) AM_READ_LEGACY(namcos2_gfx_ctrl_r) AM_WRITE_LEGACY(namcos2_gfx_ctrl_w)
632   AM_RANGE(0x800000, 0x80ffff) AM_RAM AM_SHARE("spriteram")
633   AM_RANGE(0x840000, 0x840001) AM_READWRITE(gfx_ctrl_r, gfx_ctrl_w)
634634   AM_RANGE(0x880000, 0x89ffff) AM_READ_LEGACY(namco_road16_r) AM_WRITE_LEGACY(namco_road16_w)
635635   AM_RANGE(0x8c0000, 0x8c0001) AM_WRITENOP
636636   AM_IMPORT_FROM( namcos2_68k_default_cpu_board_am )
r17652r17653
654654/*************************************************************/
655655
656656static ADDRESS_MAP_START( common_sgunner_am, AS_PROGRAM, 16, namcos2_state )
657   AM_RANGE(0x800000, 0x8141ff) AM_READWRITE_LEGACY(namco_obj16_r,namco_obj16_w)
657   AM_RANGE(0x800000, 0x8141ff) AM_READWRITE(c355_obj_ram_r,c355_obj_ram_w) AM_SHARE("objram")
658658   AM_RANGE(0x818000, 0x818001) AM_WRITENOP
659659   AM_RANGE(0xa00000, 0xa0000f) AM_READWRITE_LEGACY(namcos2_68k_key_r,namcos2_68k_key_w)
660660   AM_IMPORT_FROM( namcos2_68k_default_cpu_board_am )
r17652r17653
678678/*************************************************************/
679679
680680static ADDRESS_MAP_START( common_metlhawk_am, AS_PROGRAM, 16, namcos2_state )
681   AM_RANGE(0xc00000, 0xc03fff) AM_READWRITE(spriteram_word_r, spriteram_word_w) AM_SHARE("spriteram") \
682   AM_RANGE(0xc40000, 0xc4ffff) AM_READWRITE_LEGACY(namco_rozvideoram16_r,namco_rozvideoram16_w) \
683   AM_RANGE(0xd00000, 0xd0001f) AM_READWRITE_LEGACY(namco_rozcontrol16_r,namco_rozcontrol16_w) \
684   AM_RANGE(0xe00000, 0xe00001) AM_READWRITE_LEGACY(namcos2_gfx_ctrl_r,namcos2_gfx_ctrl_w) /* ??? */ \
681   AM_RANGE(0xc00000, 0xc03fff) AM_RAM AM_SHARE("spriteram") \
682   AM_RANGE(0xc40000, 0xc4ffff) AM_READWRITE(c169_roz_videoram_r,c169_roz_videoram_w) AM_SHARE("rozvideoram") \
683   AM_RANGE(0xd00000, 0xd0001f) AM_READWRITE(c169_roz_control_r,c169_roz_control_w) \
684   AM_RANGE(0xe00000, 0xe00001) AM_READWRITE(gfx_ctrl_r, gfx_ctrl_w) /* ??? */ \
685685   AM_IMPORT_FROM( namcos2_68k_default_cpu_board_am )
686686ADDRESS_MAP_END
687687
r17652r17653
703703/*************************************************************/
704704
705705static ADDRESS_MAP_START( common_luckywld_am, AS_PROGRAM, 16, namcos2_state )
706   AM_RANGE(0x800000, 0x8141ff) AM_READWRITE_LEGACY(namco_obj16_r,namco_obj16_w)
706   AM_RANGE(0x800000, 0x8141ff) AM_READWRITE(c355_obj_ram_r,c355_obj_ram_w) AM_SHARE("objram")
707707   AM_RANGE(0x818000, 0x818001) AM_NOP /* enable? */
708708   AM_RANGE(0x81a000, 0x81a001) AM_WRITENOP /* enable? */
709709   AM_RANGE(0x840000, 0x840001) AM_READNOP
710   AM_RANGE(0x900000, 0x900007) AM_READWRITE_LEGACY(namco_spritepos16_r,namco_spritepos16_w)
710   AM_RANGE(0x900000, 0x900007) AM_READWRITE(c355_obj_position_r,c355_obj_position_w)
711711   AM_RANGE(0xa00000, 0xa1ffff) AM_READWRITE_LEGACY(namco_road16_r,namco_road16_w)
712   AM_RANGE(0xc00000, 0xc0ffff) AM_READWRITE_LEGACY(namco_rozvideoram16_r,namco_rozvideoram16_w)
713   AM_RANGE(0xd00000, 0xd0001f) AM_READWRITE_LEGACY(namco_rozcontrol16_r,namco_rozcontrol16_w)
712   AM_RANGE(0xc00000, 0xc0ffff) AM_READWRITE(c169_roz_videoram_r,c169_roz_videoram_w) AM_SHARE("rozvideoram")
713   AM_RANGE(0xd00000, 0xd0001f) AM_READWRITE(c169_roz_control_r,c169_roz_control_w)
714714   AM_RANGE(0xf00000, 0xf00007) AM_READWRITE_LEGACY(namcos2_68k_key_r,namcos2_68k_key_w)
715715   AM_IMPORT_FROM( namcos2_68k_default_cpu_board_am )
716716ADDRESS_MAP_END
r17652r17653
50045004
50055005DRIVER_INIT_MEMBER(namcos2_state,assault)
50065006{
5007   namcos2_gametype=NAMCOS2_ASSAULT;
5007   m_gametype=NAMCOS2_ASSAULT;
50085008}
50095009
50105010DRIVER_INIT_MEMBER(namcos2_state,assaultj)
50115011{
5012   namcos2_gametype=NAMCOS2_ASSAULT_JP;
5012   m_gametype=NAMCOS2_ASSAULT_JP;
50135013}
50145014
50155015DRIVER_INIT_MEMBER(namcos2_state,assaultp)
50165016{
5017   namcos2_gametype=NAMCOS2_ASSAULT_PLUS;
5017   m_gametype=NAMCOS2_ASSAULT_PLUS;
50185018}
50195019
50205020DRIVER_INIT_MEMBER(namcos2_state,assaultp_hack)
r17652r17653
50335033
50345034DRIVER_INIT_MEMBER(namcos2_state,burnforc)
50355035{
5036   namcos2_gametype=NAMCOS2_BURNING_FORCE;
5036   m_gametype=NAMCOS2_BURNING_FORCE;
50375037}
50385038
50395039DRIVER_INIT_MEMBER(namcos2_state,cosmogng)
50405040{
5041   namcos2_gametype=NAMCOS2_COSMO_GANG;
5041   m_gametype=NAMCOS2_COSMO_GANG;
50425042}
50435043
50445044DRIVER_INIT_MEMBER(namcos2_state,dsaber)
50455045{
5046   namcos2_gametype=NAMCOS2_DRAGON_SABER;
5046   m_gametype=NAMCOS2_DRAGON_SABER;
50475047}
50485048
50495049DRIVER_INIT_MEMBER(namcos2_state,dsaberj)
50505050{
5051   namcos2_gametype=NAMCOS2_DRAGON_SABER;
5051   m_gametype=NAMCOS2_DRAGON_SABER;
50525052}
50535053
50545054DRIVER_INIT_MEMBER(namcos2_state,dirtfoxj)
50555055{
5056   namcos2_gametype=NAMCOS2_DIRT_FOX_JP;
5056   m_gametype=NAMCOS2_DIRT_FOX_JP;
50575057}
50585058
50595059DRIVER_INIT_MEMBER(namcos2_state,finallap)
50605060{
5061   namcos2_gametype=NAMCOS2_FINAL_LAP;
5061   m_gametype=NAMCOS2_FINAL_LAP;
50625062}
50635063
50645064DRIVER_INIT_MEMBER(namcos2_state,finalap2)
50655065{
5066   namcos2_gametype=NAMCOS2_FINAL_LAP_2;
5066   m_gametype=NAMCOS2_FINAL_LAP_2;
50675067}
50685068
50695069DRIVER_INIT_MEMBER(namcos2_state,finalap3)
50705070{
5071   namcos2_gametype=NAMCOS2_FINAL_LAP_3;
5071   m_gametype=NAMCOS2_FINAL_LAP_3;
50725072}
50735073
50745074DRIVER_INIT_MEMBER(namcos2_state,finehour)
50755075{
5076   namcos2_gametype=NAMCOS2_FINEST_HOUR;
5076   m_gametype=NAMCOS2_FINEST_HOUR;
50775077}
50785078
50795079DRIVER_INIT_MEMBER(namcos2_state,fourtrax)
50805080{
5081   namcos2_gametype=NAMCOS2_FOUR_TRAX;
5081   m_gametype=NAMCOS2_FOUR_TRAX;
50825082}
50835083
50845084DRIVER_INIT_MEMBER(namcos2_state,kyukaidk)
50855085{
5086   namcos2_gametype=NAMCOS2_KYUUKAI_DOUCHUUKI;
5086   m_gametype=NAMCOS2_KYUUKAI_DOUCHUUKI;
50875087}
50885088
50895089DRIVER_INIT_MEMBER(namcos2_state,marvlanj)
50905090{
5091   namcos2_gametype=NAMCOS2_MARVEL_LAND;
5091   m_gametype=NAMCOS2_MARVEL_LAND;
50925092}
50935093
50945094DRIVER_INIT_MEMBER(namcos2_state,marvland)
50955095{
5096   namcos2_gametype=NAMCOS2_MARVEL_LAND;
5096   m_gametype=NAMCOS2_MARVEL_LAND;
50975097}
50985098
50995099DRIVER_INIT_MEMBER(namcos2_state,metlhawk)
r17652r17653
51515151         } /* next k */
51525152      } /* next j */
51535153   } /* next i */
5154   namcos2_gametype=NAMCOS2_METAL_HAWK;
5154   m_gametype=NAMCOS2_METAL_HAWK;
51555155} /* metlhawk */
51565156
51575157DRIVER_INIT_MEMBER(namcos2_state,mirninja)
51585158{
5159   namcos2_gametype=NAMCOS2_MIRAI_NINJA;
5159   m_gametype=NAMCOS2_MIRAI_NINJA;
51605160}
51615161
51625162DRIVER_INIT_MEMBER(namcos2_state,ordyne)
51635163{
5164   namcos2_gametype=NAMCOS2_ORDYNE;
5164   m_gametype=NAMCOS2_ORDYNE;
51655165}
51665166
51675167DRIVER_INIT_MEMBER(namcos2_state,phelios)
51685168{
5169   namcos2_gametype=NAMCOS2_PHELIOS;
5169   m_gametype=NAMCOS2_PHELIOS;
51705170}
51715171
51725172DRIVER_INIT_MEMBER(namcos2_state,rthun2)
51735173{
5174   namcos2_gametype=NAMCOS2_ROLLING_THUNDER_2;
5174   m_gametype=NAMCOS2_ROLLING_THUNDER_2;
51755175}
51765176
51775177DRIVER_INIT_MEMBER(namcos2_state,rthun2j)
51785178{
5179   namcos2_gametype=NAMCOS2_ROLLING_THUNDER_2;
5179   m_gametype=NAMCOS2_ROLLING_THUNDER_2;
51805180}
51815181
51825182DRIVER_INIT_MEMBER(namcos2_state,sgunner2)
51835183{
5184   namcos2_gametype=NAMCOS2_STEEL_GUNNER_2;
5184   m_gametype=NAMCOS2_STEEL_GUNNER_2;
51855185}
51865186
51875187DRIVER_INIT_MEMBER(namcos2_state,sws)
51885188{
5189   namcos2_gametype=NAMCOS2_SUPER_WSTADIUM;
5189   m_gametype=NAMCOS2_SUPER_WSTADIUM;
51905190}
51915191
51925192DRIVER_INIT_MEMBER(namcos2_state,sws92)
51935193{
5194   namcos2_gametype=NAMCOS2_SUPER_WSTADIUM_92;
5194   m_gametype=NAMCOS2_SUPER_WSTADIUM_92;
51955195}
51965196
51975197DRIVER_INIT_MEMBER(namcos2_state,sws92g)
51985198{
5199   namcos2_gametype=NAMCOS2_SUPER_WSTADIUM_92T;
5199   m_gametype=NAMCOS2_SUPER_WSTADIUM_92T;
52005200}
52015201
52025202DRIVER_INIT_MEMBER(namcos2_state,sws93)
52035203{
5204   namcos2_gametype=NAMCOS2_SUPER_WSTADIUM_93;
5204   m_gametype=NAMCOS2_SUPER_WSTADIUM_93;
52055205}
52065206
52075207DRIVER_INIT_MEMBER(namcos2_state,suzuka8h)
52085208{
5209    namcos2_gametype=NAMCOS2_SUZUKA_8_HOURS;
5209    m_gametype=NAMCOS2_SUZUKA_8_HOURS;
52105210}
52115211
52125212DRIVER_INIT_MEMBER(namcos2_state,suzuk8h2)
52135213{
5214   namcos2_gametype=NAMCOS2_SUZUKA_8_HOURS_2;
5214   m_gametype=NAMCOS2_SUZUKA_8_HOURS_2;
52155215}
52165216
52175217DRIVER_INIT_MEMBER(namcos2_state,valkyrie)
52185218{
5219   namcos2_gametype=NAMCOS2_VALKYRIE;
5219   m_gametype=NAMCOS2_VALKYRIE;
52205220}
52215221
52225222DRIVER_INIT_MEMBER(namcos2_state,gollygho)
52235223{
5224   namcos2_gametype=NAMCOS2_GOLLY_GHOST;
5224   m_gametype=NAMCOS2_GOLLY_GHOST;
52255225}
52265226
52275227DRIVER_INIT_MEMBER(namcos2_state,bubbletr)
52285228{
5229   namcos2_gametype=NAMCOS2_BUBBLE_TROUBLE;
5229   m_gametype=NAMCOS2_BUBBLE_TROUBLE;
52305230}
52315231
52325232
r17652r17653
52495249      if( code&0x80 ) out |= 0x01;
52505250      pData[i] = out;
52515251   }
5252   namcos2_gametype=NAMCOS2_LUCKY_AND_WILD;
5252   m_gametype=NAMCOS2_LUCKY_AND_WILD;
52535253}
52545254
52555255/* Based on the dumped BIOS versions it looks like Namco changed the BIOS rom */
trunk/src/emu/tilemap.h
r17652r17653
638638
639639// function definition for a get info callback
640640#define TILE_GET_INFO(_name)         void _name(running_machine &machine, tile_data &tileinfo, tilemap_memory_index tile_index, void *param)
641#define TILE_GET_INFO_MEMBER(_name)      void _name(tile_data &tileinfo, tilemap_memory_index tile_index, void *param)
641642#define TILE_GET_INFO_DEVICE(_name)      void _name(device_t *device, tile_data &tileinfo, tilemap_memory_index tile_index, void *param)
642643
643644// function definition for a logical-to-memory mapper
644645#define TILEMAP_MAPPER(_name)         tilemap_memory_index _name(running_machine &machine, UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows)
646#define TILEMAP_MAPPER_MEMBER(_name)   tilemap_memory_index _name(UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows)
645647
646648// useful macro inside of a TILE_GET_INFO callback to set tile information
647649#define SET_TILE_INFO(GFX,CODE,COLOR,FLAGS)         tileinfo.set(machine, GFX, CODE, COLOR, FLAGS)
650#define SET_TILE_INFO_MEMBER(GFX,CODE,COLOR,FLAGS)  tileinfo.set(machine(), GFX, CODE, COLOR, FLAGS)
648651#define SET_TILE_INFO_DEVICE(GFX,CODE,COLOR,FLAGS)  tileinfo.set(device->machine(), GFX, CODE, COLOR, FLAGS)
649652
650653// Macros for setting tile attributes in the TILE_GET_INFO callback:

Previous 199869 Revisions Next


© 1997-2024 The MAME Team