Previous 199869 Revisions Next

r20472 Friday 25th January, 2013 at 20:30:59 UTC by hap
cleanup: double-line functions, some comments
[src/mame/drivers]namcos22.c
[src/mame/video]namcos22.c

trunk/src/mame/drivers/namcos22.c
r20471r20472
11601160/**
11611161 * helper function used to read a byte from a chunk of 32 bit memory
11621162 */
1163static UINT8
1164nthbyte( const UINT32 *pSource, int offs )
1163static UINT8 nthbyte( const UINT32 *pSource, int offs )
11651164{
11661165   pSource += offs/4;
11671166   return (pSource[0]<<((offs&3)*8))>>24;
1168} /* nthbyte */
1167}
11691168
11701169/*********************************************************************************************/
11711170
r20471r20472
11791178   PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Steering Wheel")
11801179
11811180/* TODO: REMOVE (THIS IS HANDLED BY "IOMCU") */
1182static void
1183ReadAnalogDrivingPorts( running_machine &machine, UINT16 *gas, UINT16 *brake, UINT16 *steer )
1181static void ReadAnalogDrivingPorts( running_machine &machine, UINT16 *gas, UINT16 *brake, UINT16 *steer )
11841182{
11851183   *gas   = machine.root_device().ioport("GAS")->read();
11861184   *brake = machine.root_device().ioport("BRAKE")->read();
r20471r20472
11881186}
11891187
11901188/* TODO: REMOVE (THIS IS HANDLED BY "IOMCU") */
1191static UINT16
1192AnalogAsDigital( running_machine &machine )
1189static UINT16 AnalogAsDigital( running_machine &machine )
11931190{
11941191   namcos22_state *state = machine.driver_data<namcos22_state>();
11951192   UINT16 inputs = state->ioport("INPUTS")->read_safe(0);
r20471r20472
12241221      }
12251222      inputs &= 3;
12261223      if( inputs == 1 )
1227      { /* Stick Shift Up */
1224      {
1225         /* Stick Shift Up */
12281226         result ^= 0x0040; /* PREV */
12291227      }
12301228      else if( inputs == 2 )
1231      { /* Stick Shift Down */
1229      {
1230         /* Stick Shift Down */
12321231         result ^= 0x0080; /* NEXT */
12331232      }
12341233      return result;
r20471r20472
12371236      break;
12381237   }
12391238   return result;
1240} /* AnalogAsDigital */
1239}
12411240
12421241/* TODO: REMOVE (THIS IS HANDLED BY "IOMCU") */
1243static void
1244HandleCoinage(running_machine &machine, int slots, int address_is_odd)
1242static void HandleCoinage(running_machine &machine, int slots, int address_is_odd)
12451243{
12461244   namcos22_state *state = machine.driver_data<namcos22_state>();
12471245   UINT16 *share16 = (UINT16 *)state->m_shareram.target();
r20471r20472
12671265   {
12681266      share16[BYTE_XOR_LE(0x3e/2)] = state->m_credits2 << (address_is_odd*8);
12691267   }
1270} /* HandleCoinage */
1268}
12711269
12721270/* TODO: REMOVE (THIS IS HANDLED BY "IOMCU") */
1273static void
1274HandleDrivingIO( running_machine &machine )
1271static void HandleDrivingIO( running_machine &machine )
12751272{
12761273   namcos22_state *state = machine.driver_data<namcos22_state>();
12771274   if( nthbyte(state->m_system_controller, 0x18) != 0 )
r20471r20472
13251322      state->m_shareram[0x030/4] = (flags<<16)|steer;
13261323      state->m_shareram[0x034/4] = (gas<<16)|brake;
13271324   }
1328} /* HandleDrivingIO */
1325}
13291326
13301327/* TODO: REMOVE (THIS IS HANDLED BY "IOMCU") */
1331static void
1332HandleCyberCommandoIO( running_machine &machine )
1328static void HandleCyberCommandoIO( running_machine &machine )
13331329{
13341330   namcos22_state *state = machine.driver_data<namcos22_state>();
13351331   if( nthbyte(state->m_system_controller, 0x18) != 0 )
r20471r20472
13471343
13481344      HandleCoinage(machine, 1, 0);
13491345   }
1350} /* HandleCyberCommandoIO */
1346}
13511347
13521348/*********************************************************************************************/
13531349
1354static void
1355InitDSP( running_machine &machine )
1350static void InitDSP( running_machine &machine )
13561351{
13571352   namcos22_state *state = machine.driver_data<namcos22_state>();
1358   state->m_master->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); /* master DSP */
1359   state->m_slave->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); /* slave DSP */
1360   state->m_mcu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); /* MCU */
1361} /* InitDSP */
1353   state->m_master->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
1354   state->m_slave->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
1355   state->m_mcu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
1356}
13621357
13631358READ16_MEMBER(namcos22_state::pdp_status_r)
13641359{
13651360   return m_MasterBIOZ;
1366} /* pdp_status_r */
1361}
13671362
13681363void namcos22_state::WriteToPointRAM(offs_t offs, UINT32 data )
13691364{
r20471r20472
13781373      if( offs>=0xf00000 && offs<=0xf1ffff )
13791374         m_pPointRAM[offs-0xf00000] = data & 0x00ffffff;
13801375   }
1381} /* WriteToPointRAM */
1376}
13821377
13831378UINT32 namcos22_state::ReadFromCommRAM(offs_t offs )
13841379{
13851380   return m_polygonram[offs&0x7fff];
1386} /* ReadFromCommRAM */
1381}
13871382
13881383void namcos22_state::WriteToCommRAM(offs_t offs, UINT32 data )
13891384{
13901385   if (data & 0x00800000) m_polygonram[offs&0x7fff] = data | 0xff000000;
13911386   else m_polygonram[offs&0x7fff] = data & 0x00ffffff;
1392} /* WriteToCommRAM */
1387}
13931388
13941389READ16_MEMBER(namcos22_state::pdp_begin_r)
13951390{
r20471r20472
14941489            logerror( "unknown PDP cmd = 0x%04x!\n", cmd );
14951490            return 0;
14961491         }
1497      } /* for(;;) */
1498   } /* m_bSuperSystem22 */
1492      }
1493   }
14991494   return 0;
1500} /* pdp_begin_r */
1495}
15011496
15021497READ16_MEMBER(namcos22_state::slave_external_ram_r)
15031498{
r20471r20472
15241519}
15251520
15261521READ16_MEMBER(namcos22_state::dsp_HOLD_signal_r)
1527{ /* STUB */
1522{
1523   /* STUB */
15281524   return 0;
15291525}
15301526
15311527WRITE16_MEMBER(namcos22_state::dsp_HOLD_ACK_w)
1532{ /* STUB */
1528{
1529   /* STUB */
15331530}
15341531
15351532WRITE16_MEMBER(namcos22_state::dsp_XF_output_w)
1536{ /* STUB */
1533{
1534   /* STUB */
15371535}
15381536
15391537/************************************************************/
r20471r20472
18101808ADDRESS_MAP_END
18111809
18121810READ16_MEMBER(namcos22_state::dsp_BIOZ_r)
1813{ /* STUB */
1811{
1812   /* STUB */
18141813   return 1;
18151814}
18161815
r20471r20472
19971996      XOR(8)*4,  XOR(9)*4, XOR(10)*4, XOR(11)*4, XOR(12)*4, XOR(13)*4, XOR(14)*4, XOR(15)*4 },
19981997   { 64*0,64*1,64*2,64*3,64*4,64*5,64*6,64*7,64*8,64*9,64*10,64*11,64*12,64*13,64*14,64*15 },
19991998   64*16
2000}; /* cg_layout */
1999};
20012000
20022001static GFXDECODE_START( namcos22 )
20032002   GFXDECODE_ENTRY( NULL,                   0, namcos22_cg_layout,   0, 0x800 )
r20471r20472
20152014{
20162015   switch( offset )
20172016   {
2018   case 0x0/4: return 0x0004<<16;
2019   default: return 0;
2017      case 0x0/4:
2018         return 0x0004<<16;
2019      default:
2020         return 0;
20202021   }
20212022}
20222023
r20471r20472
21642165
21652166   COMBINE_DATA( &m_system_controller[offset] );
21662167
2167} /* namcos22s_system_controller_w */
2168}
21682169
21692170/*
21702171000064: 0000 8C9A  (1)
r20471r20472
22922293
22932294   COMBINE_DATA( &m_system_controller[offset] );
22942295
2295} /* namcos22_system_controller_w */
2296}
22962297
22972298/* namcos22_interrupt
22982299Ridge Racer:
r20471r20472
24632464READ32_MEMBER(namcos22_state::alpinesa_prot_r)
24642465{
24652466   return m_AlpineSurferProtData;
2466} /* alpinesa_prot_r */
2467}
24672468
24682469WRITE32_MEMBER(namcos22_state::alpinesa_prot_w)
24692470{
r20471r20472
24812482      default:
24822483         break;
24832484   }
2484} /* alpinesa_prot_w */
2485}
24852486
24862487WRITE32_MEMBER(namcos22_state::namcos22s_nvmem_w)
24872488{
trunk/src/mame/video/namcos22.c
r20471r20472
8383#endif
8484
8585
86static UINT8
87nthbyte( const UINT32 *pSource, int offs )
86static UINT8 nthbyte( const UINT32 *pSource, int offs )
8887{
8988   pSource += offs/4;
9089   return (pSource[0]<<((offs&3)*8))>>24;
9190}
9291
93static UINT16
94nthword( const UINT32 *pSource, int offs )
92static UINT16 nthword( const UINT32 *pSource, int offs )
9593{
9694   pSource += offs/2;
9795   return (pSource[0]<<((offs&1)*16))>>16;
9896}
9997
100INLINE UINT8
101Clamp256( int v )
98INLINE UINT8 Clamp256( int v )
10299{
103100   if( v<0 )
104101   {
r20471r20472
109106      v = 255;
110107   }
111108   return v;
112} /* Clamp256 */
109}
113110
114111
115112static struct
r20471r20472
135132   int palBase;
136133} mixer;
137134
138static void
139UpdateVideoMixer( running_machine &machine )
135static void UpdateVideoMixer( running_machine &machine )
140136{
141137   int i;
142138   namcos22_state *state = machine.driver_data<namcos22_state>();
r20471r20472
284280   rectangle scissor;
285281} mClip;
286282
287static void
288poly3d_Clip( float vx, float vy, float vw, float vh )
283static void poly3d_Clip( float vx, float vy, float vw, float vh )
289284{
290285   int cx = 320+vx;
291286   int cy = 240+vy;
r20471r20472
298293   if( mClip.scissor.max_y>479 ) mClip.scissor.max_y = 479;
299294}
300295
301static void
302sprite_Clip( int min_x, int max_x, int min_y, int max_y )
296static void sprite_Clip( int min_x, int max_x, int min_y, int max_y )
303297{
304298   // cx/cy not used
305299   mClip.scissor.set(min_x, max_x, min_y, max_y);
r20471r20472
309303   if( mClip.scissor.max_y>479 ) mClip.scissor.max_y = 479;
310304}
311305
312static void
313poly3d_NoClip( void )
306static void poly3d_NoClip( void )
314307{
315308   mClip.cx = 320;
316309   mClip.cy = 240;
r20471r20472
332325   unsigned offs = ((y&0xfff0)<<4)|((x&0xff0)>>4);
333326   unsigned tile = state->m_pTextureTileMap16[offs];
334327   return state->m_pTextureTileData[(tile<<8)|state->m_XYAttrToPixel[state->m_pTextureTileMapAttr[offs]][x&0xf][y&0xf]];
335} /* texel */
328}
336329
337330
338331
r20471r20472
508501         z += dz;
509502      }
510503   }
511} /* renderscanline_uvi_full */
504}
512505
513506static void poly3d_DrawQuad(running_machine &machine, bitmap_rgb32 &bitmap, int textureBank, int color, Poly3dVertex pv[4], int flags, int cz_adjust, int direct, int cmode )
514507{
r20471r20472
765758}
766759
767760
768static void
769poly3d_DrawSprite(
770   bitmap_rgb32 &dest_bmp, gfx_element *gfx, UINT32 code,
771   UINT32 color, int flipx, int flipy, int sx, int sy,
772   int scalex, int scaley, int cz_factor, int prioverchar, int alpha )
761static void poly3d_DrawSprite(bitmap_rgb32 &dest_bmp, gfx_element *gfx, UINT32 code, UINT32 color, int flipx, int flipy, int sx, int sy, int scalex, int scaley, int cz_factor, int prioverchar, int alpha)
773762{
774763   namcos22_state *state = gfx->machine().driver_data<namcos22_state>();
775764   int sprite_screen_height = (scaley*gfx->height()+0x8000)>>16;
r20471r20472
833822
834823      poly_render_triangle_fan(state->m_poly, &dest_bmp, mClip.scissor, renderscanline_sprite, 2, 4, vert);
835824   }
836} /* poly3d_DrawSprite */
825}
837826
838static void
839ApplyGamma( running_machine &machine, bitmap_rgb32 &bitmap )
827static void ApplyGamma( running_machine &machine, bitmap_rgb32 &bitmap )
840828{
841829   namcos22_state *state = machine.driver_data<namcos22_state>();
842830   int x,y;
843831   if( state->m_bSuperSystem22 )
844   { /* super system 22 */
832   {
833      /* super system 22 */
845834      const UINT8 *rlut = (const UINT8 *)&state->m_gamma[0x100/4];
846835      const UINT8 *glut = (const UINT8 *)&state->m_gamma[0x200/4];
847836      const UINT8 *blut = (const UINT8 *)&state->m_gamma[0x300/4];
r20471r20472
859848      }
860849   }
861850   else
862   { /* system 22 */
851   {
852      /* system 22 */
863853      const UINT8 *rlut = 0x000+(const UINT8 *)machine.root_device().memregion("gamma_proms")->base();
864854      const UINT8 *glut = 0x100+rlut;
865855      const UINT8 *blut = 0x200+rlut;
r20471r20472
876866         }
877867      }
878868   }
879} /* ApplyGamma */
869}
880870
881871
882872#define DSP_FIXED_TO_FLOAT( X ) (((INT16)(X))/(float)0x7fff)
r20471r20472
885875#define NUM_CG_CHARS ((CGRAM_SIZE*8)/(64*16)) /* 0x3c0 */
886876
887877/* modal rendering properties */
888static void
889matrix3d_Multiply( float A[4][4], float B[4][4] )
878static void matrix3d_Multiply( float A[4][4], float B[4][4] )
890879{
891880   float temp[4][4];
892881   int row,col;
r20471r20472
905894      }
906895   }
907896   memcpy( A, temp, sizeof(temp) );
908} /* matrix3d_Multiply */
897}
909898
910static void
911matrix3d_Identity( float M[4][4] )
899static void matrix3d_Identity( float M[4][4] )
912900{
913901   int r,c;
914902
r20471r20472
919907         M[r][c] = (r==c)?1.0:0.0;
920908      }
921909   }
922} /* matrix3d_Identity */
910}
923911
924static void
925TransformPoint( float *vx, float *vy, float *vz, float m[4][4] )
912static void TransformPoint( float *vx, float *vy, float *vz, float m[4][4] )
926913{
927914   float x = *vx;
928915   float y = *vy;
r20471r20472
932919   *vz = m[0][2]*x + m[1][2]*y + m[2][2]*z + m[3][2];
933920}
934921
935static void
936TransformNormal( float *nx, float *ny, float *nz, float m[4][4] )
922static void TransformNormal( float *nx, float *ny, float *nz, float m[4][4] )
937923{
938924   float x = *nx;
939925   float y = *ny;
r20471r20472
1005991static struct SceneNode mSceneRoot;
1006992static struct SceneNode *mpFreeSceneNode;
1007993
1008static void
1009FreeSceneNode( struct SceneNode *node )
994static void FreeSceneNode( struct SceneNode *node )
1010995{
1011996   node->nextInBucket = mpFreeSceneNode;
1012997   mpFreeSceneNode = node;
1013} /* FreeSceneNode */
998}
1014999
1015static struct SceneNode *
1016MallocSceneNode( running_machine &machine )
1000static struct SceneNode *MallocSceneNode( running_machine &machine )
10171001{
10181002   struct SceneNode *node = mpFreeSceneNode;
10191003   if( node )
1020   { /* use free pool */
1004   {
1005      /* use free pool */
10211006      mpFreeSceneNode = node->nextInBucket;
10221007   }
10231008   else
r20471r20472
10261011   }
10271012   memset( node, 0, sizeof(*node) );
10281013   return node;
1029} /* MallocSceneNode */
1014}
10301015
1031static struct SceneNode *
1032NewSceneNode( running_machine &machine, UINT32 zsortvalue24, SceneNodeType type )
1016static struct SceneNode *NewSceneNode( running_machine &machine, UINT32 zsortvalue24, SceneNodeType type )
10331017{
10341018   struct SceneNode *node = &mSceneRoot;
10351019   struct SceneNode *prev = NULL;
r20471r20472
10391023      hash = (zsortvalue24>>20)&RADIX_MASK;
10401024      struct SceneNode *next = node->data.nonleaf.next[hash];
10411025      if( !next )
1042      { /* lazily allocate tree node for this radix */
1026      {
1027         /* lazily allocate tree node for this radix */
10431028         next = MallocSceneNode(machine);
10441029         next->type = eSCENENODE_NONLEAF;
10451030         node->data.nonleaf.next[hash] = next;
r20471r20472
10501035   }
10511036
10521037   if( node->type == eSCENENODE_NONLEAF )
1053   { /* first leaf allocation on this branch */
1038   {
1039      /* first leaf allocation on this branch */
10541040      node->type = type;
10551041      return node;
10561042   }
r20471r20472
10621048      prev->data.nonleaf.next[hash] = leaf;
10631049      return leaf;
10641050   }
1065} /* NewSceneNode */
1051}
10661052
10671053
10681054static void RenderSprite(running_machine &machine, bitmap_rgb32 &bitmap, struct SceneNode *node )
r20471r20472
10971083            0xff - node->data.sprite.translucency
10981084         );
10991085         i++;
1100      } /* next col */
1101   } /* next row */
1102} /* RenderSprite */
1086      }
1087   }
1088}
11031089
11041090static void RenderSceneHelper(running_machine &machine, bitmap_rgb32 &bitmap, struct SceneNode *node )
11051091{
r20471r20472
11601146         }
11611147      }
11621148   }
1163} /* RenderSceneHelper */
1149}
11641150
11651151static void RenderScene(running_machine &machine, bitmap_rgb32 &bitmap )
11661152{
r20471r20472
11741160   }
11751161   poly3d_NoClip();
11761162   poly_wait(state->m_poly, "DrawPolygons");
1177} /* RenderScene */
1163}
11781164
1179static float
1180DspFloatToNativeFloat( UINT32 iVal )
1165static float DspFloatToNativeFloat( UINT32 iVal )
11811166{
11821167   INT16 mantissa = (INT16)iVal;
11831168   float result = mantissa;//?((float)mantissa):((float)0x10000);
r20471r20472
11881173      exponent++;
11891174   }
11901175   return result;
1191} /* DspFloatToNativeFloat */
1176}
11921177
1193static INT32
1194GetPolyData( namcos22_state *state, INT32 addr )
1178static INT32 GetPolyData( namcos22_state *state, INT32 addr )
11951179{
11961180   UINT32 result;
11971181   if( addr<0 || addr>=state->m_PtRomSize )
r20471r20472
12171201   if( result&0x00800000 )
12181202      result |= 0xff000000; /* sign extend */
12191203   return result;
1220} /* GetPolyData */
1204}
12211205
1222UINT32
1223namcos22_point_rom_r( running_machine &machine, offs_t offs )
1206UINT32 namcos22_point_rom_r( running_machine &machine, offs_t offs )
12241207{
12251208   namcos22_state *state = machine.driver_data<namcos22_state>();
12261209   return GetPolyData(state, offs & 0x00ffffff);
r20471r20472
13141297}
13151298
13161299
1317static void
1318InitXYAttrToPixel( namcos22_state *state )
1300static void InitXYAttrToPixel( namcos22_state *state )
13191301{
13201302   unsigned attr,x,y,ix,iy,temp;
13211303   for( attr=0; attr<16; attr++ )
r20471r20472
13321314         }
13331315      }
13341316   }
1335} /* InitXYAttrToPixel */
1317}
13361318
1337static void
1338PatchTexture( namcos22_state *state )
1319static void PatchTexture( namcos22_state *state )
13391320{
13401321   int i;
13411322   switch( state->m_gametype )
r20471r20472
13591340      default:
13601341         break;
13611342   }
1362} /* PatchTexture */
1343}
13631344
1364void
1365namcos22_draw_direct_poly( running_machine &machine, const UINT16 *pSource )
1345void namcos22_draw_direct_poly( running_machine &machine, const UINT16 *pSource )
13661346{
13671347   if (machine.video().skip_this_frame()) return;
13681348   namcos22_state *state = machine.driver_data<namcos22_state>();
r20471r20472
14621442   node->data.quad3d.vy = 0;
14631443   node->data.quad3d.vw = -320;
14641444   node->data.quad3d.vh = -240;
1465} /* namcos22_draw_direct_poly */
1445}
14661446
1467static void
1468Prepare3dTexture( running_machine &machine, void *pTilemapROM, const void *pTextureROM )
1447static void Prepare3dTexture( running_machine &machine, void *pTilemapROM, const void *pTextureROM )
14691448{
14701449   namcos22_state *state = machine.driver_data<namcos22_state>();
14711450   int i;
14721451   assert( pTilemapROM && pTextureROM );
1473   { /* following setup is Namco System 22 specific */
1452   {
1453      /* following setup is Namco System 22 specific */
14741454      const UINT8 *pPackedTileAttr = 0x200000 + (UINT8 *)pTilemapROM;
14751455      UINT8 *pUnpackedTileAttr = auto_alloc_array(machine, UINT8, 0x080000*2);
14761456      {
r20471r20472
14871467         PatchTexture(state);
14881468      }
14891469   }
1490} /* Prepare3dTexture */
1470}
14911471
1492static void
1493DrawSpritesHelper(
1494   running_machine &machine,
1495   bitmap_rgb32 &bitmap,
1496   const rectangle &cliprect,
1497   UINT32 *pBase,
1498   const UINT32 *pSource,
1499   const UINT32 *pPal,
1500   int num_sprites,
1501   int deltax,
1502   int deltay,
1503   int y_lowres )
1472static void DrawSpritesHelper(running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT32 *pBase, const UINT32 *pSource, const UINT32 *pPal, int num_sprites, int deltax, int deltay, int y_lowres)
15041473{
15051474   for( int i=0; i<num_sprites; i++ )
15061475   {
r20471r20472
16241593      pSource += 4;
16251594      pPal += 2;
16261595   }
1627} /* DrawSpritesHelper */
1596}
16281597
1629static void
1630DrawSprites( running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect )
1598static void DrawSprites( running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect )
16311599{
16321600   namcos22_state *state = machine.driver_data<namcos22_state>();
16331601   UINT32 *spriteram32 = state->m_spriteram;
r20471r20472
17381706      pPal    = &state->m_vics_data[(state->m_vics_control[0x78/4]&0xffff)/4];
17391707      DrawSpritesHelper( machine, bitmap, cliprect, spriteram32, pSource, pPal, num_sprites, deltax, deltay, y_lowres );
17401708   }
1741} /* DrawSprites */
1709}
17421710
17431711READ32_MEMBER(namcos22_state::namcos22s_vics_control_r)
17441712{
r20471r20472
17891757         state->m_dirtypal[i] = 0;
17901758      }
17911759   }
1792} /* UpdatePalette */
1760}
17931761
17941762
17951763TILE_GET_INFO_MEMBER(namcos22_state::TextTilemapGetInfo)
r20471r20472
21002068/*********************************************************************************************/
21012069
21022070
2103static INT32
2104Signed18( UINT32 value )
2071static INT32 Signed18( UINT32 value )
21052072{
21062073   INT32 offset = value&0x03ffff;
21072074   if( offset&0x20000 )
2108   { /* sign extend */
2075   {
2076      /* sign extend */
21092077      offset |= ~0x03ffff;
21102078   }
21112079   return offset;
r20471r20472
21442112 *    0x07350 - guardrail
21452113 *    0x061a8 - red car
21462114 */
2147static void
2148BlitQuadHelper(
2149      running_machine &machine,
2150      bitmap_rgb32 &bitmap,
2151      unsigned color,
2152      unsigned addr,
2153      float m[4][4],
2154      INT32 polygonShiftValue22, /* 22 bits */
2155      int flags,
2156      int packetFormat )
2115static void BlitQuadHelper(running_machine &machine, bitmap_rgb32 &bitmap, unsigned color, unsigned addr, float m[4][4], INT32 polygonShiftValue22, int flags, int packetFormat)
21572116{
21582117   namcos22_state *state = machine.driver_data<namcos22_state>();
21592118   int absolutePriority = state->m_AbsolutePriority;
r20471r20472
22922251   node->data.quad3d.vy = mCamera.vy;
22932252   node->data.quad3d.vw = mCamera.vw;
22942253   node->data.quad3d.vh = mCamera.vh;
2295} /* BlitQuadHelper */
2254}
22962255
2297static void
2298RegisterNormals( namcos22_state *state, INT32 addr, float m[4][4] )
2256static void RegisterNormals( namcos22_state *state, INT32 addr, float m[4][4] )
22992257{
23002258   int i;
23012259   for( i=0; i<4; i++ )
r20471r20472
23122270         dotproduct = 0.0f;
23132271      state->m_LitSurfaceInfo[state->m_LitSurfaceCount++] = mCamera.ambient + mCamera.power*dotproduct;
23142272   }
2315} /* RegisterNormals */
2273}
23162274
2317static void
2318BlitQuads( running_machine &machine, bitmap_rgb32 &bitmap, INT32 addr, float m[4][4], INT32 base )
2275static void BlitQuads( running_machine &machine, bitmap_rgb32 &bitmap, INT32 addr, float m[4][4], INT32 base )
23192276{
23202277   namcos22_state *state = machine.driver_data<namcos22_state>();
23212278//  int numAdditionalNormals = 0;
r20471r20472
24032360      }
24042361      addr += packetLength;
24052362   }
2406} /* BlitQuads */
2363}
24072364
2408static void
2409BlitPolyObject( running_machine &machine, bitmap_rgb32 &bitmap, int code, float M[4][4] )
2365static void BlitPolyObject( running_machine &machine, bitmap_rgb32 &bitmap, int code, float M[4][4] )
24102366{
24112367   namcos22_state *state = machine.driver_data<namcos22_state>();
24122368   unsigned addr1 = GetPolyData(state, code);
r20471r20472
24192375         break;
24202376      BlitQuads( machine, bitmap, addr2, M, code );
24212377   }
2422} /* BlitPolyObject */
2378}
24232379
24242380/*******************************************************************************/
24252381
r20471r20472
24842440 * 0x5: transform
24852441 * >=0x45: draw primitive
24862442 */
2487static void
2488HandleBB0003( namcos22_state *state, const INT32 *pSource )
2443static void HandleBB0003( namcos22_state *state, const INT32 *pSource )
24892444{
24902445   /*
24912446       bb0003 or 3b0003
r20471r20472
25322487   state->m_ViewMatrix[2][2] = DSP_FIXED_TO_FLOAT(pSource[0x14]);
25332488
25342489   TransformNormal( &mCamera.lx, &mCamera.ly, &mCamera.lz, state->m_ViewMatrix );
2535} /* HandleBB0003 */
2490}
25362491
2537static void
2538Handle200002( running_machine &machine, bitmap_rgb32 &bitmap, const INT32 *pSource )
2492static void Handle200002( running_machine &machine, bitmap_rgb32 &bitmap, const INT32 *pSource )
25392493{
25402494   namcos22_state *state = machine.driver_data<namcos22_state>();
25412495   if( state->m_PrimitiveID>=0x45 )
r20471r20472
25682522      logerror( "Handle200002:unk code=0x%x\n", state->m_PrimitiveID );
25692523      // ridgerac title screen waving flag: 0x5
25702524   }
2571} /* Handle200002 */
2525}
25722526
2573static void
2574Handle300000( namcos22_state *state, const INT32 *pSource )
2527static void Handle300000( namcos22_state *state, const INT32 *pSource )
25752528{
25762529   state->m_ViewMatrix[0][0] = DSP_FIXED_TO_FLOAT(pSource[1]);
25772530   state->m_ViewMatrix[1][0] = DSP_FIXED_TO_FLOAT(pSource[2]);
r20471r20472
25862539   state->m_ViewMatrix[2][2] = DSP_FIXED_TO_FLOAT(pSource[9]);
25872540} /* Handle300000 */
25882541
2589static void
2590Handle233002( namcos22_state *state, const INT32 *pSource )
2542static void Handle233002( namcos22_state *state, const INT32 *pSource )
25912543{
25922544   /*
25932545   00233002
r20471r20472
26012553   */
26022554   state->m_cz_adjust = (pSource[1] & 0x00800000) ? pSource[1] | 0xff000000 : pSource[1] & 0x00ffffff;
26032555   state->m_ObjectShiftValue22 = pSource[2];
2604} /* Handle233002 */
2556}
26052557
2606static void
2607SimulateSlaveDSP( running_machine &machine, bitmap_rgb32 &bitmap )
2558static void SimulateSlaveDSP( running_machine &machine, bitmap_rgb32 &bitmap )
26082559{
26092560   namcos22_state *state = machine.driver_data<namcos22_state>();
26102561   const INT32 *pSource = 0x300 + (INT32 *)state->m_polygonram.target();
r20471r20472
26632614      pSource++; /* always 0xffff */
26642615      next = (INT16)*pSource++; /* link to next command */
26652616      if( (next&0x7fff) != (pSource - (INT32 *)state->m_polygonram.target()) )
2666      { /* end of list */
2617      {
2618         /* end of list */
26672619         break;
26682620      }
2669   } /* for(;;) */
2670} /* SimulateSlaveDSP */
2621   }
2622}
26712623
2672static void
2673DrawPolygons( running_machine &machine, bitmap_rgb32 &bitmap )
2624static void DrawPolygons( running_machine &machine, bitmap_rgb32 &bitmap )
26742625{
26752626   namcos22_state *state = machine.driver_data<namcos22_state>();
26762627   if( state->m_bDSPisActive )
r20471r20472
26782629      SimulateSlaveDSP( machine, bitmap );
26792630      poly_wait(state->m_poly, "DrawPolygons");
26802631   }
2681} /* DrawPolygons */
2632}
26822633
2683void
2684namcos22_enable_slave_simulation( running_machine &machine, int enable )
2634void namcos22_enable_slave_simulation( running_machine &machine, int enable )
26852635{
26862636   namcos22_state *state = machine.driver_data<namcos22_state>();
26872637   state->m_bDSPisActive = enable;
r20471r20472
29212871      break;
29222872   }
29232873   return (UINT16)value;
2924} /* namcos22_dspram16_r */
2874}
29252875
29262876WRITE16_MEMBER(namcos22_state::namcos22_dspram16_w)
29272877{
r20471r20472
29472897      break;
29482898   }
29492899   m_polygonram[offset] = (hi<<16)|lo;
2950} /* namcos22_dspram16_w */
2900}

Previous 199869 Revisions Next


© 1997-2024 The MAME Team