Previous 199869 Revisions Next

r25486 Wednesday 2nd October, 2013 at 01:25:15 UTC by Ryan Holtz
Fix N64 controls, nw
[src/mame/includes]n64.h
[src/mame/machine]n64.c

trunk/src/mame/includes/n64.h
r25485r25486
221221   void handle_pif();
222222   int pif_channel_handle_command(int channel, int slength, UINT8 *sdata, int rlength, UINT8 *rdata);
223223   UINT8 calc_mempak_crc(UINT8 *buffer, int length);
224   UINT32 pif_ram[0x10];
224   UINT8 pif_ram[0x40];
225225   UINT8 pif_cmd[0x40];
226226   UINT32 si_dram_addr;
227227   UINT32 si_pif_addr;
trunk/src/mame/machine/n64.c
r25485r25486
4545   switch(cic_type)
4646   {
4747      case 1:
48         pif_ram[0x09] = 0x00063f3f;
48         pif_ram[0x24] = 0x00;
49         pif_ram[0x25] = 0x06;
50         pif_ram[0x26] = 0x3f;
51         pif_ram[0x27] = 0x3f;
4952         break;
5053      case 3:
51         pif_ram[0x09] = 0x0002783f;
54         pif_ram[0x24] = 0x00;
55         pif_ram[0x25] = 0x02;
56         pif_ram[0x26] = 0x78;
57         pif_ram[0x27] = 0x3f;
5258         break;
5359      case 5:
54         pif_ram[0x09] = 0x0002913f;
60         pif_ram[0x24] = 0x00;
61         pif_ram[0x25] = 0x02;
62         pif_ram[0x26] = 0x91;
63         pif_ram[0x27] = 0x3f;
5564         break;
5665      case 6:
57         pif_ram[0x09] = 0x0002853f;
66         pif_ram[0x24] = 0x00;
67         pif_ram[0x25] = 0x02;
68         pif_ram[0x26] = 0x85;
69         pif_ram[0x27] = 0x3f;
5870         break;
5971      case 0xd:
60         pif_ram[0x09] = 0x000add3f;
72         pif_ram[0x24] = 0x00;
73         pif_ram[0x25] = 0x0a;
74         pif_ram[0x26] = 0xdd;
75         pif_ram[0x27] = 0x3f;
6176         break;
6277      default:
63         pif_ram[0x09] = 0x00023f3f;
78         pif_ram[0x24] = 0x00;
79         pif_ram[0x25] = 0x02;
80         pif_ram[0x26] = 0x3f;
81         pif_ram[0x27] = 0x3f;
6482         break;
6583   }
6684}
r25485r25486
195213   }
196214
197215   // CIC-NUS-6102 (default)
198   pif_ram[0x09] = 0x00003f3f;
216   pif_ram[0x24] = 0x00;
217   pif_ram[0x25] = 0x00;
218   pif_ram[0x26] = 0x3f;
219   pif_ram[0x27] = 0x3f;
199220   dd_present = false;
200221   cic_type=2;
201222   mem_map->write_dword(0x00000318, 0x800000);
202223
203224   if (boot_checksum == U64(0x00000000001ff230))
204225   {
205      pif_ram[0x09] = 0x3fdd0800;
226      pif_ram[0x24] = 0x00;
227      pif_ram[0x25] = 0x08;
228      pif_ram[0x26] = 0xdd;
229      pif_ram[0x27] = 0x3f;
206230      dd_present = true;
207231      cic_type=0xd;
208232   }
209233   else if (boot_checksum == U64(0x000000cffb830843) || boot_checksum == U64(0x000000d0027fdf31))
210234   {
211235      // CIC-NUS-6101
212      pif_ram[0x09] = 0x00043f3f;
236      pif_ram[0x24] = 0x00;
237      pif_ram[0x25] = 0x04;
238      pif_ram[0x26] = 0x3f;
239      pif_ram[0x27] = 0x3f;
213240      cic_type=1;
214241   }
215242   else if (boot_checksum == U64(0x000000d6499e376b))
216243   {
217244      // CIC-NUS-6103
218      pif_ram[0x09] = 0x0000783f;
245      pif_ram[0x24] = 0x00;
246      pif_ram[0x25] = 0x00;
247      pif_ram[0x26] = 0x78;
248      pif_ram[0x27] = 0x3f;
219249      cic_type=3;
220250   }
221251   else if (boot_checksum == U64(0x0000011a4a1604b6))
222252   {
223253      // CIC-NUS-6105
224      pif_ram[0x09] = 0x0000913f;
254      pif_ram[0x24] = 0x00;
255      pif_ram[0x25] = 0x00;
256      pif_ram[0x26] = 0x91;
257      pif_ram[0x27] = 0x3f;
225258      cic_type=5;
226259      mem_map->write_dword(0x000003f0, 0x800000);
227260   }
228261   else if (boot_checksum == U64(0x000000d6d5de4ba0))
229262   {
230263      // CIC-NUS-6106
231      pif_ram[0x09] = 0x0000853f;
264      pif_ram[0x24] = 0x00;
265      pif_ram[0x25] = 0x00;
266      pif_ram[0x26] = 0x85;
267      pif_ram[0x27] = 0x3f;
232268      cic_type=6;
233269   }
234270   else
r25485r25486
20152051                  }
20162052                  for(int j = 0; j < bytes_to_recv; j++)
20172053                  {
2018                     ram[cmd_ptr ^ BYTE4_XOR_BE(0)] = recv_buffer[j];
2019                     cmd_ptr++;
2054                     pif_ram[cmd_ptr++] = recv_buffer[j];
20202055                  }
20212056               }
20222057               else if (res == 1)
20232058               {
20242059                  int offset = 0;//bytes_to_send;
2025                  ram[(cmd_ptr - offset - 2) ^ BYTE4_XOR_BE(0)] |= 0x80;
2060                  pif_ram[cmd_ptr - offset - 2] |= 0x80;
20262061               }
20272062            }
20282063
r25485r25486
20462081
20472082void n64_periphs::pif_dma(int direction)
20482083{
2049   UINT8 *ram = (UINT8*)pif_ram;
2050
20512084   if (si_dram_addr & 0x3)
20522085   {
20532086      fatalerror("pif_dma: si_dram_addr unaligned: %08X\n", si_dram_addr);
r25485r25486
20592092
20602093      for(int i = 0; i < 64; i+=4)
20612094      {
2062         ram[i >> 2] = *src;
2063         src++;
2095         UINT32 d = *src++;
2096         pif_ram[i+0] = (d >> 24) & 0xff;
2097         pif_ram[i+1] = (d >> 16) & 0xff;
2098         pif_ram[i+2] = (d >>  8) & 0xff;
2099         pif_ram[i+3] = (d >>  0) & 0xff;
20642100      }
20652101
20662102      memcpy(pif_cmd, pif_ram, 0x40);
r25485r25486
20732109
20742110      for(int i = 0; i < 64; i+=4)
20752111      {
2076         *dst = ram[i >> 2];
2077         dst++;
2112         UINT32 d = 0;
2113         d |= pif_ram[i+0] << 24;
2114         d |= pif_ram[i+1] << 16;
2115         d |= pif_ram[i+2] <<  8;
2116         d |= pif_ram[i+3] <<  0;
2117
2118         *dst++ = d;
20782119      }
20792120   }
20802121
r25485r25486
23472388         return cic_status;
23482389      }
23492390   }
2350   return pif_ram[offset] & mem_mask;
2391   return ( ( pif_ram[offset*4+0] << 24 ) | ( pif_ram[offset*4+1] << 16 ) | ( pif_ram[offset*4+2] <<  8 ) | ( pif_ram[offset*4+3] <<  0 ) ) & mem_mask;
23512392}
23522393
23532394WRITE32_MEMBER( n64_periphs::pif_ram_w )
23542395{
2355   COMBINE_DATA(&pif_ram[offset]);
2396   if( mem_mask & 0xff000000 )
2397   {
2398      pif_ram[offset*4+0] = ( data >> 24 ) & 0x000000ff;
2399   }
2400   if( mem_mask & 0x00ff0000 )
2401   {
2402      pif_ram[offset*4+1] = ( data >> 16 ) & 0x000000ff;
2403   }
2404   if( mem_mask & 0x0000ff00 )
2405   {
2406      pif_ram[offset*4+2] = ( data >>  8 ) & 0x000000ff;
2407   }
2408   if( mem_mask & 0x000000ff )
2409   {
2410      pif_ram[offset*4+3] = ( data >>  0 ) & 0x000000ff;
2411   }
2412
23562413   signal_rcp_interrupt(SI_INTERRUPT);
23572414}
23582415

Previous 199869 Revisions Next


© 1997-2024 The MAME Team