Advertisement
Guest User

Untitled

a guest
May 20th, 2018
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 81.14 KB | None | 0 0
  1. Only in libpsx/project/jni/libpcsxcore: LnxMain.c
  2. Only in libpsx/project/jni/libpcsxcore: Makefile
  3. Only in libpsx/project/jni/libpcsxcore: Makefile.am
  4. Only in libpsx/project/jni/libpcsxcore: Makefile.in
  5. Only in libpsx/project/jni/libpcsxcore: android
  6. diff -u -r pcsx_rearmed/libpcsxcore/cdriso.c libpsx/project/jni/libpcsxcore/cdriso.c
  7. --- pcsx_rearmed/libpcsxcore/cdriso.c   Tue Jan 10 12:44:37 2012
  8. +++ libpsx/project/jni/libpcsxcore/cdriso.c Mon Jan  9 18:42:13 2012
  9. @@ -32,6 +32,8 @@
  10.  #include <sys/time.h>
  11.  #endif
  12.  
  13. +#include <zlib.h>
  14. +
  15.  static FILE *cdHandle = NULL;
  16.  static FILE *cddaHandle = NULL;
  17.  static FILE *subHandle = NULL;
  18. @@ -39,22 +41,36 @@
  19.  static boolean subChanMixed = FALSE;
  20.  static boolean subChanRaw = FALSE;
  21.  
  22. -static unsigned char cdbuffer[DATA_SIZE];
  23. +static unsigned char cdbuffer[CD_FRAMESIZE_RAW];
  24. +static unsigned char* cdlastbuffer = cdbuffer;
  25.  static unsigned char subbuffer[SUB_FRAMESIZE];
  26.  
  27.  static unsigned char sndbuffer[CD_FRAMESIZE_RAW * 10];
  28.  
  29. +typedef enum {
  30. +   EBOOT,
  31. +   ZISO,
  32. +   ZNXISO,
  33. +   NONE
  34. +} cd_compression_type;
  35. +
  36. +static cd_compression_type cd_compression = NONE;
  37. +
  38.  #define CDDA_FRAMETIME         (1000 * (sizeof(sndbuffer) / CD_FRAMESIZE_RAW) / 75)
  39.  
  40. +#define MODE1_DATA_SIZE            2048
  41. +
  42. +static boolean isMode1ISO = FALSE;
  43. +
  44.  #ifdef _WIN32
  45.  static HANDLE threadid;
  46.  #else
  47.  static pthread_t threadid;
  48.  #endif
  49.  static unsigned int initial_offset = 0;
  50. -static boolean playing = FALSE;
  51. +static volatile boolean playing = FALSE;
  52.  static boolean cddaBigEndian = FALSE;
  53. -static unsigned int cddaCurOffset = 0;
  54. +static volatile unsigned int cddaCurOffset = 0;
  55.  static unsigned int cddaStartOffset;
  56.  
  57.  char* CALLBACK CDR__getDriveLetter(void);
  58. @@ -67,9 +83,9 @@
  59.  extern void *hCDRDriver;
  60.  
  61.  struct trackinfo {
  62. -   enum {DATA, CDDA} type;
  63. -   char start[3];      // MSF-format
  64. -   char length[3];     // MSF-format
  65. +   enum {DATA=1, CDDA} type;
  66. +   u8 start[3];        // MSF-format
  67. +   u8 length[3];       // MSF-format
  68.     FILE *handle;       // for multi-track images CDDA
  69.  };
  70.  
  71. @@ -79,11 +95,11 @@
  72.  static struct trackinfo ti[MAXTRACKS];
  73.  
  74.  // get a sector from a msf-array
  75. -static unsigned int msf2sec(char *msf) {
  76. +unsigned int msf2sec(char *msf) {
  77.     return ((msf[0] * 60 + msf[1]) * 75) + msf[2];
  78.  }
  79.  
  80. -static void sec2msf(unsigned int s, char *msf) {
  81. +void sec2msf(unsigned int s, char *msf) {
  82.     msf[0] = s / 75 / 60;
  83.     s = s - msf[0] * 75 * 60;
  84.     msf[1] = s / 75;
  85. @@ -135,6 +151,91 @@
  86.  }
  87.  #endif
  88.  
  89. +u8* Ztable = NULL;
  90. +
  91. +static cd_compression_type GetCompressionType(const char *isofile)
  92. +{
  93. +   s32 len = strlen(isofile);
  94. +
  95. +   if (len >= 2)
  96. +   {
  97. +       if (!strncasecmp(isofile+(len-2), ".z", 2))
  98. +       {
  99. +           return ZISO;
  100. +       }
  101. +   }
  102. +
  103. +   if (len >= 4)
  104. +   {
  105. +       if (!strncasecmp(isofile+(len-4), ".znx", 4))
  106. +       {
  107. +           return ZNXISO;
  108. +       }
  109. +
  110. +       if (!strncasecmp(isofile+(len-4), ".pbp", 4))
  111. +       {
  112. +           return EBOOT;
  113. +       }
  114. +   }
  115. +  
  116. +   return NONE;
  117. +}
  118. +
  119. +typedef struct
  120. +{
  121. +       unsigned int offset;
  122. +       unsigned int length;
  123. +       unsigned int dummy[6];
  124. +} EbootIsoIndex;
  125. +
  126. +typedef struct
  127. +{
  128. +   unsigned int off, len;
  129. +} eboot_entry;
  130. +
  131. +eboot_entry *eboot_table = NULL;
  132. +u8 eboot_buffer[0x9300];
  133. +u8 eboot_compressed_buffer[0x9300];
  134. +int eboot_buffer_index = -1;
  135. +int eboot_data_start;
  136. +
  137. +//copy of zlib "uncompress", but setting window_size to -15 to comply with eboot format
  138. +int uncompress_m15 (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)
  139. +{
  140. +    z_stream stream;
  141. +    int err;
  142. +
  143. +    stream.next_in = (Bytef*)source;
  144. +    stream.avail_in = (uInt)sourceLen;
  145. +    /* Check for source > 64K on 16-bit machine: */
  146. +    if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
  147. +
  148. +    stream.next_out = dest;
  149. +    stream.avail_out = (uInt)*destLen;
  150. +    if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
  151. +
  152. +    stream.zalloc = (alloc_func)0;
  153. +    stream.zfree = (free_func)0;
  154. +
  155. +    //err = inflateInit(&stream);
  156. +   err = inflateInit2(&stream, -15);
  157. +    if (err != Z_OK) return err;
  158. +
  159. +    err = inflate(&stream, Z_FINISH);
  160. +    if (err != Z_STREAM_END) {
  161. +        inflateEnd(&stream);
  162. +        return err == Z_OK ? Z_BUF_ERROR : err;
  163. +    }
  164. +    *destLen = stream.total_out;
  165. +
  166. +    err = inflateEnd(&stream);
  167. +    return err;
  168. +}
  169. +
  170. +u16 *iso_play_cdbuf;
  171. +u16 iso_play_bufptr;
  172. +
  173. +
  174.  // this thread plays audio data
  175.  #ifdef _WIN32
  176.  static void playthread(void *param)
  177. @@ -144,9 +245,13 @@
  178.  {
  179.     long            d, t, i, s;
  180.     unsigned char   tmp;
  181. +   int sec;
  182.  
  183.     t = GetTickCount();
  184.  
  185. +   iso_play_cdbuf = 0;
  186. +   iso_play_bufptr = 0;
  187. +
  188.     while (playing) {
  189.         d = t - (long)GetTickCount();
  190.         if (d <= 0) {
  191. @@ -718,7 +823,9 @@
  192.  
  193.  // This function is invoked by the front-end when opening an ISO
  194.  // file for playback
  195. -static long CALLBACK ISOopen(void) {
  196. +long CALLBACK CDR_open(void) {
  197. +   u32 modeTest = 0;
  198. +
  199.     if (cdHandle != NULL) {
  200.         return 0; // it's already open
  201.     }
  202. @@ -733,23 +840,104 @@
  203.     cddaBigEndian = FALSE;
  204.     subChanMixed = FALSE;
  205.     subChanRaw = FALSE;
  206. +  isMode1ISO = FALSE;
  207. +  
  208. +  cd_compression = GetCompressionType(GetIsoFile());
  209. +  
  210. +   if (cd_compression == ZISO || cd_compression == ZNXISO)
  211. +   {
  212. +    long filesize;
  213. +       FILE *f;
  214. +       char table[1024];
  215. +
  216. +       sprintf(table, "%s.table", GetIsoFile());
  217. +       f = fopen(table, "rb");
  218. +       if( f == NULL )
  219. +       {
  220. +      fclose(cdHandle);
  221. +           cdHandle = NULL;
  222. +           return -1;
  223. +       }
  224. +      
  225. +       fseek(f, 0, SEEK_END);
  226. +       filesize = ftell(f);
  227. +       fseek(f, 0, SEEK_SET);
  228. +       Ztable = (u8*)malloc(filesize);
  229. +       if (Ztable == NULL)
  230. +       {
  231. +      fclose(f);
  232. +         fclose(cdHandle);
  233. +           cdHandle = NULL;
  234. +           return -1;
  235. +       }
  236. +
  237. +       fread(Ztable, 1, filesize, f);
  238. +       fclose(f);
  239. +   }
  240. +
  241. +   if(cd_compression == EBOOT)
  242. +   {
  243. +    int i;
  244. +       unsigned int header[10];
  245. +       char buffer[16];
  246. +       int n_entries = 0x100000 - 0x4000;
  247. +       eboot_table = (eboot_entry*)malloc(n_entries * sizeof(eboot_entry));
  248. +
  249. +       //read header
  250. +       fread(header, 4, 10, cdHandle);
  251. +
  252. +       //check valid psx eboot
  253. +       fseek(cdHandle, header[9], SEEK_SET);
  254. +       fread(buffer, 1, 8, cdHandle);
  255. +       if(strncmp(buffer, "PSISOIMG", 8) != 0)
  256. +       {
  257. +      fclose(cdHandle);
  258. +           return -1;
  259. +       }
  260. +
  261. +       //read index
  262. +       fseek(cdHandle, header[9] + 0x4000, SEEK_SET);
  263. +       for(i=0; i<n_entries; i++)
  264. +       {
  265. +           EbootIsoIndex idx;
  266. +           fread(&idx, sizeof(EbootIsoIndex), 1, cdHandle);
  267. +
  268. +           eboot_table[i].len = idx.length;
  269. +           eboot_table[i].off = idx.offset;
  270. +       }
  271.  
  272. -   if (parsecue(GetIsoFile()) == 0) {
  273. -       SysPrintf("[+cue]");
  274. -   }
  275. -   else if (parsetoc(GetIsoFile()) == 0) {
  276. -       SysPrintf("[+toc]");
  277. +       //set image start
  278. +       eboot_data_start = header[9] + 0x100000;
  279.     }
  280. -   else if (parseccd(GetIsoFile()) == 0) {
  281. +  
  282. +   if (parseccd(GetIsoFile()) == 0) {
  283.         SysPrintf("[+ccd]");
  284.     }
  285.     else if (parsemds(GetIsoFile()) == 0) {
  286.         SysPrintf("[+mds]");
  287.     }
  288. +   else if (parsecue(GetIsoFile()) == 0) {
  289. +       SysPrintf("[+cue]");
  290. +   }
  291. +   else if (parsetoc(GetIsoFile()) == 0) {
  292. +       SysPrintf("[+toc]");
  293. +  } else {
  294. +   //guess whether it is mode1/2048
  295. +   fseek(cdHandle, 0, SEEK_END);
  296. +   if(ftell(cdHandle) % 2048 == 0) {
  297. +       fseek(cdHandle, 0, SEEK_SET);
  298. +       fread(&modeTest, 4, 1, cdHandle);
  299. +       if(modeTest!=0xffffff00) isMode1ISO = TRUE;
  300. +   }
  301. +   fseek(cdHandle, 0, SEEK_SET);
  302. +  }
  303. +
  304. +
  305.  
  306.     if (!subChanMixed && opensubfile(GetIsoFile()) == 0) {
  307.         SysPrintf("[+sub]");
  308.     }
  309. +
  310.     if (opensbifile(GetIsoFile()) == 0) {
  311.         SysPrintf("[+sbi]");
  312.     }
  313. @@ -767,7 +955,7 @@
  314.     return 0;
  315.  }
  316.  
  317. -static long CALLBACK ISOclose(void) {
  318. +long CALLBACK CDR_close(void) {
  319.     int i;
  320.  
  321.     if (cdHandle != NULL) {
  322. @@ -778,6 +966,10 @@
  323.         fclose(subHandle);
  324.         subHandle = NULL;
  325.     }
  326. +  
  327. +   if(Ztable) { free(Ztable); Ztable = NULL; }
  328. +   if(eboot_table) { free(eboot_table); eboot_table = NULL; }
  329. +
  330.     stopCDDA();
  331.     cddaHandle = NULL;
  332.  
  333. @@ -793,15 +985,15 @@
  334.     return 0;
  335.  }
  336.  
  337. -static long CALLBACK ISOinit(void) {
  338. +long CDR_init(void) {
  339.     assert(cdHandle == NULL);
  340.     assert(subHandle == NULL);
  341.  
  342.     return 0; // do nothing
  343.  }
  344.  
  345. -static long CALLBACK ISOshutdown(void) {
  346. -   ISOclose();
  347. +long CDR_shutdown(void) {
  348. +   CDR_close();
  349.     return 0;
  350.  }
  351.  
  352. @@ -809,7 +1001,7 @@
  353.  // buffer:
  354.  //  byte 0 - start track
  355.  //  byte 1 - end track
  356. -static long CALLBACK ISOgetTN(unsigned char *buffer) {
  357. +long CALLBACK CDR_getTN(unsigned char *buffer) {
  358.     buffer[0] = 1;
  359.  
  360.     if (numtracks > 0) {
  361. @@ -827,7 +1019,7 @@
  362.  //  byte 0 - frame
  363.  //  byte 1 - second
  364.  //  byte 2 - minute
  365. -static long CALLBACK ISOgetTD(unsigned char track, unsigned char *buffer) {
  366. +long CALLBACK CDR_getTD(unsigned char track, unsigned char *buffer) {
  367.     if (track == 0) {
  368.         // CD length according pcsxr-svn (done a bit different here)
  369.         unsigned int sect;
  370. @@ -871,42 +1063,131 @@
  371.  // read track
  372.  // time: byte 0 - minute; byte 1 - second; byte 2 - frame
  373.  // uses bcd format
  374. -static long CALLBACK ISOreadTrack(unsigned char *time) {
  375. +long CALLBACK CDR_readTrack(unsigned char *time) {
  376.     if (cdHandle == NULL) {
  377.         return -1;
  378.     }
  379.  
  380. -   if (subChanMixed) {
  381. +   if(cd_compression == EBOOT) //PSP EBOOT - read in 16 sectors chunks
  382. +   {
  383. +    u32 curr_sector = MSF2SECT(btoi(time[0]), btoi(time[1]), btoi(time[2]));
  384. +       int index = curr_sector / 16;
  385. +       if(index != eboot_buffer_index)
  386. +       {
  387. +           eboot_entry entry = eboot_table[index];
  388. +           fseek(cdHandle, eboot_data_start + entry.off, SEEK_SET);
  389. +
  390. +           if(entry.len == 0x9300) //not compressed, just read
  391. +           {
  392. +               fread(eboot_buffer, 1, 0x9300, cdHandle);
  393. +           }
  394. +           else //decompress
  395. +           {
  396. +               uLongf destLen = 0x9300;
  397. +               fread(eboot_compressed_buffer, 1, entry.len, cdHandle);
  398. +               uncompress_m15(eboot_buffer, &destLen, eboot_compressed_buffer, entry.len);
  399. +           }
  400. +
  401. +           eboot_buffer_index = index;
  402. +       }
  403. +
  404. +       cdlastbuffer = eboot_buffer + (curr_sector % 16)*CD_FRAMESIZE_RAW;
  405. +   }
  406. +   else if (cd_compression == NONE && subChanMixed)
  407. +   {
  408.         fseek(cdHandle, MSF2SECT(btoi(time[0]), btoi(time[1]), btoi(time[2])) * (CD_FRAMESIZE_RAW + SUB_FRAMESIZE) + 12, SEEK_SET);
  409.         fread(cdbuffer, 1, DATA_SIZE, cdHandle);
  410.         fread(subbuffer, 1, SUB_FRAMESIZE, cdHandle);
  411.  
  412.         if (subChanRaw) DecodeRawSubData();
  413. +    cdlastbuffer = cdbuffer;
  414.     }
  415. -   else {
  416. -       fseek(cdHandle, MSF2SECT(btoi(time[0]), btoi(time[1]), btoi(time[2])) * CD_FRAMESIZE_RAW + 12, SEEK_SET);
  417. -       fread(cdbuffer, 1, DATA_SIZE, cdHandle);
  418. -
  419. -       if (subHandle != NULL) {
  420. -           fseek(subHandle, MSF2SECT(btoi(time[0]), btoi(time[1]), btoi(time[2])) * SUB_FRAMESIZE, SEEK_SET);
  421. -           fread(subbuffer, 1, SUB_FRAMESIZE, subHandle);
  422. -
  423. -           if (subChanRaw) DecodeRawSubData();
  424. +   else
  425. +   {
  426. +     cdlastbuffer = cdbuffer;
  427. +    
  428. +     if (cd_compression == ZISO)
  429. +     {
  430. +       u32 curr_sector = MSF2SECT(btoi(time[0]), btoi(time[1]), btoi(time[2]));
  431. +           int ret;
  432. +           u32 pos, p;
  433. +           uLongf size;
  434. +           u8 Zbuf[CD_FRAMESIZE_RAW+256];
  435. +
  436. +           p = curr_sector;
  437. +
  438. +           pos = (u32)(Ztable[p * 6] | (Ztable[p * 6 + 1] << 8) |
  439. +               (Ztable[p * 6 + 2] << 16) | (Ztable[p * 6 + 3] << 24));
  440. +           fseek(cdHandle, pos, SEEK_SET);
  441. +
  442. +           p = (u16)(Ztable[p * 6 + 4] | (Ztable[p * 6 + 4 + 1] << 8));
  443. +       fread(Zbuf, p, 1, cdHandle);
  444. +
  445. +           size = CD_FRAMESIZE_RAW;
  446. +           ret = uncompress(cdbuffer, &size, Zbuf, p);
  447. +           if( ret != Z_OK )
  448. +           {
  449. +               printf("uncompress error %d !\n", ret);
  450. +           }
  451. +       }
  452. +       else if (cd_compression == ZNXISO)
  453. +       {
  454. +         u32 curr_sector = MSF2SECT(btoi(time[0]), btoi(time[1]), btoi(time[2]));
  455. +           int ret;
  456. +           u32 pos, p;
  457. +           uLongf size;
  458. +           u8 Zbuf[CD_FRAMESIZE_RAW+256];
  459. +
  460. +           p = curr_sector;
  461. +
  462. +           pos = (u32)(Ztable[p * 10] | (Ztable[p * 10 + 1] << 8) | (Ztable[p * 10 + 2] << 16) | (Ztable[p * 10 + 3] << 24));
  463. +           fseek(cdHandle, pos, SEEK_SET);
  464. +
  465. +           p = (u16)(Ztable[p * 10 + 4] | (Ztable[p * 10 + 4 + 1] << 8));
  466. +       fread(Zbuf, p, 1, cdHandle);
  467. +           size = CD_FRAMESIZE_RAW;
  468. +           ret = uncompress(cdbuffer, &size, Zbuf, p);
  469. +           if( ret != Z_OK )
  470. +           {
  471. +               printf("uncompress error %d !\n", ret);
  472. +           }
  473.         }
  474. +       else
  475. +       {
  476. +         if(isMode1ISO) {
  477. +           fseek(cdHandle, MSF2SECT(btoi(time[0]), btoi(time[1]), btoi(time[2])) * MODE1_DATA_SIZE, SEEK_SET);
  478. +           fread(cdbuffer + 12, 1, MODE1_DATA_SIZE, cdHandle);
  479. +           memset(cdbuffer, 0, 12); //not really necessary, fake mode 2 header
  480. +           cdbuffer[0] = (time[0]);
  481. +           cdbuffer[1] = (time[1]);
  482. +           cdbuffer[2] = (time[2]);
  483. +           cdbuffer[3] = 1; //mode 1
  484. +       } else {
  485. +         fseek(cdHandle, MSF2SECT(btoi(time[0]), btoi(time[1]), btoi(time[2])) * CD_FRAMESIZE_RAW + 12, SEEK_SET);
  486. +         fread(cdbuffer, 1, DATA_SIZE, cdHandle);
  487. +      }
  488. +      
  489. +       if (subHandle != NULL) {
  490. +           fseek(subHandle, MSF2SECT(btoi(time[0]), btoi(time[1]), btoi(time[2])) * SUB_FRAMESIZE, SEEK_SET);
  491. +           fread(subbuffer, 1, SUB_FRAMESIZE, subHandle);
  492. +
  493. +           if (subChanRaw) DecodeRawSubData();
  494. +       }
  495. +    }
  496.     }
  497.  
  498.     return 0;
  499.  }
  500.  
  501.  // return readed track
  502. -static unsigned char * CALLBACK ISOgetBuffer(void) {
  503. -   return cdbuffer;
  504. +unsigned char * CALLBACK CDR_getBuffer(void) {
  505. +   return cdlastbuffer + (cd_compression == NONE ? 0 : 12);
  506.  }
  507.  
  508.  // plays cdda audio
  509.  // sector: byte 0 - minute; byte 1 - second; byte 2 - frame
  510.  // does NOT uses bcd format
  511. -static long CALLBACK ISOplay(unsigned char *time) {
  512. +long CALLBACK CDR_play(unsigned char *time) {
  513.     unsigned int i, sect;
  514.  
  515.     if (numtracks <= 1)
  516. @@ -939,13 +1220,13 @@
  517.  }
  518.  
  519.  // stops cdda audio
  520. -static long CALLBACK ISOstop(void) {
  521. +long CALLBACK CDR_stop(void) {
  522.     stopCDDA();
  523.     return 0;
  524.  }
  525.  
  526.  // gets subchannel data
  527. -static unsigned char* CALLBACK ISOgetBufferSub(void) {
  528. +unsigned char* CALLBACK CDR_getBufferSub(void) {
  529.     if (subHandle != NULL || subChanMixed) {
  530.         return subbuffer;
  531.     }
  532. @@ -953,7 +1234,7 @@
  533.     return NULL;
  534.  }
  535.  
  536. -static long CALLBACK ISOgetStatus(struct CdrStat *stat) {
  537. +long CALLBACK CDR_getStatus(struct CdrStat *stat) {
  538.     int sec;
  539.  
  540.     CDR__getStatus(stat);
  541. @@ -973,25 +1254,6 @@
  542.  }
  543.  
  544.  void cdrIsoInit(void) {
  545. -   CDR_init = ISOinit;
  546. -   CDR_shutdown = ISOshutdown;
  547. -   CDR_open = ISOopen;
  548. -   CDR_close = ISOclose;
  549. -   CDR_getTN = ISOgetTN;
  550. -   CDR_getTD = ISOgetTD;
  551. -   CDR_readTrack = ISOreadTrack;
  552. -   CDR_getBuffer = ISOgetBuffer;
  553. -   CDR_play = ISOplay;
  554. -   CDR_stop = ISOstop;
  555. -   CDR_getBufferSub = ISOgetBufferSub;
  556. -   CDR_getStatus = ISOgetStatus;
  557. -
  558. -   CDR_getDriveLetter = CDR__getDriveLetter;
  559. -   CDR_configure = CDR__configure;
  560. -   CDR_test = CDR__test;
  561. -   CDR_about = CDR__about;
  562. -   CDR_setfilename = CDR__setfilename;
  563. -
  564.     numtracks = 0;
  565.  }
  566.  
  567. Only in libpsx/project/jni/libpcsxcore: config.h
  568. diff -u -r pcsx_rearmed/libpcsxcore/debug.h libpsx/project/jni/libpcsxcore/debug.h
  569. --- pcsx_rearmed/libpcsxcore/debug.h    Tue Jan 10 10:52:39 2012
  570. +++ libpsx/project/jni/libpcsxcore/debug.h  Mon Jan  9 18:42:13 2012
  571. @@ -51,12 +51,12 @@
  572.  
  573.  //#define PAD_LOG  __Log
  574.  //#define GTE_LOG  __Log
  575. -//#define CDR_LOG  __Log("%8.8lx %8.8lx: ", psxRegs.pc, psxRegs.cycle); __Log
  576. +//#define CDR_LOG  __Log("%8.8lx %8.8lx: ", psxRegs->pc, psxRegs->cycle); __Log
  577.  
  578. -//#define PSXHW_LOG   __Log("%8.8lx %8.8lx: ", psxRegs.pc, psxRegs.cycle); __Log
  579. -//#define PSXBIOS_LOG __Log("%8.8lx %8.8lx: ", psxRegs.pc, psxRegs.cycle); __Log
  580. +//#define PSXHW_LOG   __Log("%8.8lx %8.8lx: ", psxRegs->pc, psxRegs->cycle); __Log
  581. +//#define PSXBIOS_LOG __Log("%8.8lx %8.8lx: ", psxRegs->pc, psxRegs->cycle); __Log
  582.  //#define PSXDMA_LOG  __Log
  583. -//#define PSXMEM_LOG  __Log("%8.8lx %8.8lx: ", psxRegs.pc, psxRegs.cycle); __Log
  584. +//#define PSXMEM_LOG  __Log("%8.8lx %8.8lx: ", psxRegs->pc, psxRegs->cycle); __Log
  585.  //#define PSXCPU_LOG  __Log
  586.  
  587.  //#define CDRCMD_DEBUG
  588. diff -u -r pcsx_rearmed/libpcsxcore/decode_xa.c libpsx/project/jni/libpcsxcore/decode_xa.c
  589. --- pcsx_rearmed/libpcsxcore/decode_xa.c    Tue Jan 10 10:52:39 2012
  590. +++ libpsx/project/jni/libpcsxcore/decode_xa.c  Mon Jan  9 18:42:13 2012
  591. @@ -21,7 +21,7 @@
  592.  * XA audio decoding functions (Kazzuya).
  593.  */
  594.  
  595. -#include "decode_xa.h"
  596. +#include "psxcommon.h"
  597.  
  598.  #define FIXED
  599.  
  600. @@ -340,7 +340,7 @@
  601.  //===                  - 0 for any other successive sector
  602.  //=== return -1 if error
  603.  //================================================================
  604. -s32 xa_decode_sector( xa_decode_t *xdp,
  605. +long xa_decode_sector( xa_decode_t *xdp,
  606.                        unsigned char *sectorp, int is_first_sector ) {
  607.     if (parse_xa_audio_sector(xdp, (xa_subheader_t *)sectorp, sectorp + sizeof(xa_subheader_t), is_first_sector))
  608.         return -1;
  609. diff -u -r pcsx_rearmed/libpcsxcore/decode_xa.h libpsx/project/jni/libpcsxcore/decode_xa.h
  610. --- pcsx_rearmed/libpcsxcore/decode_xa.h    Tue Jan 10 10:52:39 2012
  611. +++ libpsx/project/jni/libpcsxcore/decode_xa.h  Mon Jan  9 18:42:13 2012
  612. @@ -24,10 +24,8 @@
  613.  extern "C" {
  614.  #endif
  615.  
  616. -#include "psxcommon.h"
  617. -
  618.  typedef struct {
  619. -   s32 y0, y1;
  620. +   long    y0, y1;
  621.  } ADPCM_Decode_t;
  622.  
  623.  typedef struct {
  624. @@ -39,7 +37,7 @@
  625.     short           pcm[16384];
  626.  } xa_decode_t;
  627.  
  628. -s32 xa_decode_sector( xa_decode_t *xdp,
  629. +long xa_decode_sector( xa_decode_t *xdp,
  630.                        unsigned char *sectorp,
  631.                        int is_first_sector );
  632.  
  633. Only in libpsx/project/jni/libpcsxcore: gpuAPI
  634. Only in libpsx/project/jni/libpcsxcore: gte_neon.S
  635. Only in pcsx_rearmed/libpcsxcore: gte_neon.s
  636. Only in pcsx_rearmed/libpcsxcore: ix86
  637. Only in pcsx_rearmed/libpcsxcore: ix86_64
  638. Only in libpsx/project/jni/libpcsxcore: minimal.h
  639. diff -u -r pcsx_rearmed/libpcsxcore/misc.c libpsx/project/jni/libpcsxcore/misc.c
  640. --- pcsx_rearmed/libpcsxcore/misc.c Tue Jan 10 12:44:37 2012
  641. +++ libpsx/project/jni/libpcsxcore/misc.c   Mon Jan  9 18:42:14 2012
  642. @@ -454,11 +454,11 @@
  643.  
  644.  // STATES
  645.  
  646. -static const char PcsxHeader[32] = "STv4 PCSX v" PACKAGE_VERSION;
  647. +static const char PcsxHeader[32] = "STv5 PSX4 v" PACKAGE_VERSION;
  648.  
  649.  // Savestate Versioning!
  650.  // If you make changes to the savestate version, please increment the value below.
  651. -static const u32 SaveVersion = 0x8b410006;
  652. +static const u32 SaveVersion = 0x8b410008;
  653.  
  654.  int SaveState(const char *file) {
  655.     gzFile f;
  656. @@ -500,7 +500,7 @@
  657.     // spu
  658.     spufP = (SPUFreeze_t *) malloc(16);
  659.     SPU_freeze(2, spufP);
  660. -   Size = spufP->Size; gzwrite(f, &Size, 4);
  661. +   Size = spufP->ulFreezeSize; gzwrite(f, &Size, 4);
  662.     free(spufP);
  663.     spufP = (SPUFreeze_t *) malloc(Size);
  664.     SPU_freeze(1, spufP);
  665. @@ -512,6 +512,9 @@
  666.     psxHwFreeze(f, 1);
  667.     psxRcntFreeze(f, 1);
  668.     mdecFreeze(f, 1);
  669. +   gzwrite(f, (void *)&bias_vsync, sizeof(int));
  670. +   gzwrite(f, (void *)&bias_cycle, sizeof(unsigned int));
  671. +   gzwrite(f, (void *)&cdrom_precise, sizeof(int));
  672.  
  673.     gzclose(f);
  674.  
  675. @@ -534,7 +537,7 @@
  676.     gzread(f, &version, sizeof(u32));
  677.     gzread(f, &hle, sizeof(boolean));
  678.  
  679. -   if (strncmp("STv4 PCSX", header, 9) != 0 || version != SaveVersion) {
  680. +   if (strncmp("STv5 PSX4", header, 9) != 0 || version > SaveVersion || hle != Config.HLE) {
  681.         gzclose(f);
  682.         return -1;
  683.     }
  684. @@ -572,7 +575,19 @@
  685.     psxHwFreeze(f, 0);
  686.     psxRcntFreeze(f, 0);
  687.     mdecFreeze(f, 0);
  688. -
  689. +  if(version == 0x8b410007)
  690. +  {
  691. +       gzread(f, &bias_vsync, sizeof(unsigned int));
  692. +       //gzread(f, &bias_cycle, sizeof(unsigned int));
  693. +       gzread(f, &cdrom_precise, sizeof(int));
  694. +  }
  695. +  if(version >= 0x8b410008)
  696. +  {
  697. +       gzread(f, &bias_vsync, sizeof(unsigned int));
  698. +       gzread(f, &bias_cycle, sizeof(unsigned int));
  699. +       gzread(f, &cdrom_precise, sizeof(int));
  700. +  }
  701. +  
  702.     gzclose(f);
  703.     new_dyna_restore();
  704.  
  705. @@ -594,7 +609,7 @@
  706.  
  707.     gzclose(f);
  708.  
  709. -   if (strncmp("STv4 PCSX", header, 9) != 0 || version != SaveVersion)
  710. +   if (strncmp("STv4 PCSX", header, 9) != 0 || version != SaveVersion || hle != Config.HLE)
  711.         return -1;
  712.  
  713.     return 0;
  714. @@ -603,6 +618,7 @@
  715.  // NET Function Helpers
  716.  
  717.  int SendPcsxInfo() {
  718. +#if 0
  719.     if (NET_recvData == NULL || NET_sendData == NULL)
  720.         return 0;
  721.  
  722. @@ -612,13 +628,13 @@
  723.     NET_sendData(&Config.RCntFix, sizeof(Config.RCntFix), PSE_NET_BLOCKING);
  724.     NET_sendData(&Config.PsxType, sizeof(Config.PsxType), PSE_NET_BLOCKING);
  725.     NET_sendData(&Config.Cpu, sizeof(Config.Cpu), PSE_NET_BLOCKING);
  726. -
  727. +#endif
  728.     return 0;
  729.  }
  730.  
  731.  int RecvPcsxInfo() {
  732.     int tmp;
  733. -
  734. +#if 0
  735.     if (NET_recvData == NULL || NET_sendData == NULL)
  736.         return 0;
  737.  
  738. @@ -645,7 +661,7 @@
  739.         }
  740.         psxCpu->Reset();
  741.     }
  742. -
  743. +#endif
  744.     return 0;
  745.  }
  746.  
  747. diff -u -r pcsx_rearmed/libpcsxcore/new_dynarec/assem_arm.c libpsx/project/jni/libpcsxcore/new_dynarec/assem_arm.c
  748. --- pcsx_rearmed/libpcsxcore/new_dynarec/assem_arm.c    Tue Jan 10 12:46:33 2012
  749. +++ libpsx/project/jni/libpcsxcore/new_dynarec/assem_arm.c  Mon Jan  9 18:42:14 2012
  750. @@ -48,6 +48,85 @@
  751.  void jump_vaddr_r10();
  752.  void jump_vaddr_r12();
  753.  
  754. +void invalidate_addr_r0();
  755. +void invalidate_addr_r1();
  756. +void invalidate_addr_r2();
  757. +void invalidate_addr_r3();
  758. +void invalidate_addr_r4();
  759. +void invalidate_addr_r5();
  760. +void invalidate_addr_r6();
  761. +void invalidate_addr_r7();
  762. +void invalidate_addr_r8();
  763. +void invalidate_addr_r9();
  764. +void invalidate_addr_r10();
  765. +void invalidate_addr_r12();
  766. +
  767. +void gteRTPS_neon(void *cp2_regs, int opcode);
  768. +void gteRTPT_neon(void *cp2_regs, int opcode);
  769. +void gteMVMVA_neon(void *cp2_regs, int opcode);
  770. +void gteNCLIP_neon(void *cp2_regs, int opcode);
  771. +void gen_interupt();
  772. +void memdebug(int i);
  773. +
  774. +const u_int jump_table_symbols[] = {
  775. +  (int)invalidate_addr_r0,
  776. +  (int)invalidate_addr_r1,
  777. +  (int)invalidate_addr_r2,
  778. +  (int)invalidate_addr_r3,
  779. +  (int)invalidate_addr_r4,
  780. +  (int)invalidate_addr_r5,
  781. +  (int)invalidate_addr_r6,
  782. +  (int)invalidate_addr_r7,
  783. +  (int)invalidate_addr_r8,
  784. +  (int)invalidate_addr_r9,
  785. +  (int)invalidate_addr_r10,
  786. +  (int)invalidate_addr_r12,
  787. +  (int)invalidate_addr_r0,
  788. +  (int)indirect_jump_indexed,
  789. +  (int)indirect_jump,
  790. +  (int)invalidate_addr,
  791. +  (int)verify_code,
  792. +  (int)verify_code_vm,
  793. +  (int)verify_code_ds,
  794. +  (int)pcsx_mtc0_ds,
  795. +  (int)pcsx_mtc0,
  796. +#if !defined(ARMv5_ONLY)
  797. +  (int)gteRTPS_neon,
  798. +  (int)gteRTPT_neon,
  799. +  (int)gteMVMVA_neon,
  800. +  (int)gteNCLIP_neon,
  801. +#endif
  802. +  (int)jump_vaddr_r0,
  803. +  (int)jump_vaddr_r1,
  804. +  (int)jump_vaddr_r2,
  805. +  (int)jump_vaddr_r3,
  806. +  (int)jump_vaddr_r4,
  807. +  (int)jump_vaddr_r5,
  808. +  (int)jump_vaddr_r6,
  809. +  (int)jump_vaddr_r7,
  810. +  (int)jump_vaddr_r8,
  811. +  (int)jump_vaddr_r9, // 30
  812. +  (int)jump_vaddr_r10,
  813. +  (int)jump_vaddr_r12,
  814. +  (int)gen_interupt,
  815. +  (int)get_addr_ht,
  816. +  (int)get_addr,
  817. +  (int)mult64,
  818. +  (int)multu64,
  819. +  (int)div64,
  820. +  (int)divu64,
  821. +  (int)memdebug,
  822. +  (int)cc_interrupt,
  823. +  (int)fp_exception_ds,
  824. +  (int)fp_exception,
  825. +  (int)jump_syscall_hle,
  826. +  (int)jump_hlecall,
  827. +  (int)jump_intcall,
  828. +  (int)new_dyna_leave,
  829. +};
  830. +  
  831. +#define JUMP_TABLE_SIZE (sizeof(jump_table_symbols)*2)
  832. +
  833.  const u_int jump_vaddr_reg[16] = {
  834.    (int)jump_vaddr_r0,
  835.    (int)jump_vaddr_r1,
  836. @@ -66,19 +145,6 @@
  837.    0,
  838.    0};
  839.  
  840. -void invalidate_addr_r0();
  841. -void invalidate_addr_r1();
  842. -void invalidate_addr_r2();
  843. -void invalidate_addr_r3();
  844. -void invalidate_addr_r4();
  845. -void invalidate_addr_r5();
  846. -void invalidate_addr_r6();
  847. -void invalidate_addr_r7();
  848. -void invalidate_addr_r8();
  849. -void invalidate_addr_r9();
  850. -void invalidate_addr_r10();
  851. -void invalidate_addr_r12();
  852. -
  853.  const u_int invalidate_addr_reg[16] = {
  854.    (int)invalidate_addr_r0,
  855.    (int)invalidate_addr_r1,
  856. @@ -203,11 +269,14 @@
  857.  u_int get_clean_addr(int addr)
  858.  {
  859.    int *ptr=(int *)addr;
  860. -  #ifdef ARMv5_ONLY
  861. +  if(!isARMv7)
  862. +  {
  863.    ptr+=4;
  864. -  #else
  865. +  }
  866. +  else
  867. +  {
  868.    ptr+=6;
  869. -  #endif
  870. +  }
  871.    if((*ptr&0xFF000000)!=0xeb000000) ptr++;
  872.    assert((*ptr&0xFF000000)==0xeb000000); // bl instruction
  873.    ptr++;
  874. @@ -220,23 +289,28 @@
  875.  int verify_dirty(int addr)
  876.  {
  877.    u_int *ptr=(u_int *)addr;
  878. -  #ifdef ARMv5_ONLY
  879. +  u_int offset;
  880. +  u_int *l_ptr;
  881. +  u_int source;
  882. +  u_int copy;
  883. +  u_int len;
  884. +  if(!isARMv7) {
  885.    // get from literal pool
  886.    assert((*ptr&0xFFF00000)==0xe5900000);
  887. -  u_int offset=*ptr&0xfff;
  888. -  u_int *l_ptr=(void *)ptr+offset+8;
  889. -  u_int source=l_ptr[0];
  890. -  u_int copy=l_ptr[1];
  891. -  u_int len=l_ptr[2];
  892. +  offset=*ptr&0xfff;
  893. +  l_ptr=(void *)ptr+offset+8;
  894. +  source=l_ptr[0];
  895. +  copy=l_ptr[1];
  896. +  len=l_ptr[2];
  897.    ptr+=4;
  898. -  #else
  899. +  }else{
  900.    // ARMv7 movw/movt
  901.    assert((*ptr&0xFFF00000)==0xe3000000);
  902. -  u_int source=(ptr[0]&0xFFF)+((ptr[0]>>4)&0xF000)+((ptr[2]<<16)&0xFFF0000)+((ptr[2]<<12)&0xF0000000);
  903. -  u_int copy=(ptr[1]&0xFFF)+((ptr[1]>>4)&0xF000)+((ptr[3]<<16)&0xFFF0000)+((ptr[3]<<12)&0xF0000000);
  904. -  u_int len=(ptr[4]&0xFFF)+((ptr[4]>>4)&0xF000);
  905. +  source=(ptr[0]&0xFFF)+((ptr[0]>>4)&0xF000)+((ptr[2]<<16)&0xFFF0000)+((ptr[2]<<12)&0xF0000000);
  906. +  copy=(ptr[1]&0xFFF)+((ptr[1]>>4)&0xF000)+((ptr[3]<<16)&0xFFF0000)+((ptr[3]<<12)&0xF0000000);
  907. +  len=(ptr[4]&0xFFF)+((ptr[4]>>4)&0xF000);
  908.    ptr+=6;
  909. -  #endif
  910. +  }
  911.    if((*ptr&0xFF000000)!=0xeb000000) ptr++;
  912.    assert((*ptr&0xFF000000)==0xeb000000); // bl instruction
  913.    u_int verifier=(int)ptr+((signed int)(*ptr<<8)>>6)+8; // get target of bl
  914. @@ -257,11 +331,13 @@
  915.  // guarantees that it's not dirty
  916.  int isclean(int addr)
  917.  {
  918. -  #ifdef ARMv5_ONLY
  919. -  int *ptr=((u_int *)addr)+4;
  920. -  #else
  921. -  int *ptr=((u_int *)addr)+6;
  922. -  #endif
  923. +  int *ptr;
  924. +  if(!isARMv7)
  925. +  {
  926. +  ptr=((u_int *)addr)+4;
  927. +  }else{
  928. +  ptr=((u_int *)addr)+6;
  929. +  }
  930.    if((*ptr&0xFF000000)!=0xeb000000) ptr++;
  931.    if((*ptr&0xFF000000)!=0xeb000000) return 1; // bl instruction
  932.    if((int)ptr+((*ptr<<8)>>6)+8==(int)verify_code) return 0;
  933. @@ -273,23 +349,28 @@
  934.  void get_bounds(int addr,u_int *start,u_int *end)
  935.  {
  936.    u_int *ptr=(u_int *)addr;
  937. -  #ifdef ARMv5_ONLY
  938. +  u_int offset;
  939. +  u_int *l_ptr;
  940. +  u_int source;
  941. +  u_int len;
  942. +
  943. +  if(!isARMv7) {
  944.    // get from literal pool
  945.    assert((*ptr&0xFFF00000)==0xe5900000);
  946. -  u_int offset=*ptr&0xfff;
  947. -  u_int *l_ptr=(void *)ptr+offset+8;
  948. -  u_int source=l_ptr[0];
  949. +  offset=*ptr&0xfff;
  950. +  l_ptr=(void *)ptr+offset+8;
  951. +  source=l_ptr[0];
  952.    //u_int copy=l_ptr[1];
  953. -  u_int len=l_ptr[2];
  954. +  len=l_ptr[2];
  955.    ptr+=4;
  956. -  #else
  957. +  }else{
  958.    // ARMv7 movw/movt
  959.    assert((*ptr&0xFFF00000)==0xe3000000);
  960. -  u_int source=(ptr[0]&0xFFF)+((ptr[0]>>4)&0xF000)+((ptr[2]<<16)&0xFFF0000)+((ptr[2]<<12)&0xF0000000);
  961. +  source=(ptr[0]&0xFFF)+((ptr[0]>>4)&0xF000)+((ptr[2]<<16)&0xFFF0000)+((ptr[2]<<12)&0xF0000000);
  962.    //u_int copy=(ptr[1]&0xFFF)+((ptr[1]>>4)&0xF000)+((ptr[3]<<16)&0xFFF0000)+((ptr[3]<<12)&0xF0000000);
  963. -  u_int len=(ptr[4]&0xFFF)+((ptr[4]>>4)&0xF000);
  964. +  len=(ptr[4]&0xFFF)+((ptr[4]>>4)&0xF000);
  965.    ptr+=6;
  966. -  #endif
  967. +  }
  968.    if((*ptr&0xFF000000)!=0xeb000000) ptr++;
  969.    assert((*ptr&0xFF000000)==0xeb000000); // bl instruction
  970.    u_int verifier=(int)ptr+((signed int)(*ptr<<8)>>6)+8; // get target of bl
  971. @@ -467,7 +548,7 @@
  972.        }
  973.      }
  974.    }
  975. -  printf("This shouldn't happen (alloc_reg)");exit(1);
  976. +  __android_log_print(ANDROID_LOG_WARN, LOG_TAG, "This shouldn't happen (alloc_reg)");exit(1);
  977.  }
  978.  
  979.  void alloc_reg64(struct regstat *cur,int i,signed char reg)
  980. @@ -633,7 +714,7 @@
  981.        }
  982.      }
  983.    }
  984. -  printf("This shouldn't happen");exit(1);
  985. +  __android_log_print(ANDROID_LOG_WARN, LOG_TAG, "This shouldn't happen");exit(1);
  986.  }
  987.  
  988.  // Allocate a temporary register.  This is done without regard to
  989. @@ -756,7 +837,7 @@
  990.        }
  991.      }
  992.    }
  993. -  printf("This shouldn't happen");exit(1);
  994. +  __android_log_print(ANDROID_LOG_WARN, LOG_TAG, "This shouldn't happen");exit(1);
  995.  }
  996.  // Allocate a specific ARM register.
  997.  void alloc_arm_reg(struct regstat *cur,int i,signed char reg,char hr)
  998. @@ -864,6 +945,23 @@
  999.  }
  1000.  u_int genjmp(u_int addr)
  1001.  {
  1002. +  if(addr<4) return 0;
  1003. +  int offset=addr-(int)out-8;
  1004. +  if(offset<-33554432||offset>=33554432)
  1005. +  {
  1006. +    int n;
  1007. +    for (n=0;n<sizeof(jump_table_symbols)/4;n++)
  1008. +    {
  1009. +      if(addr==jump_table_symbols[n])
  1010. +      {
  1011. +        offset=BASE_ADDR+(1<<TARGET_SIZE_2)-JUMP_TABLE_SIZE+n*8-(int)out-8;
  1012. +        break;
  1013. +      }
  1014. +    }
  1015. +  }
  1016. +  assert(offset>=-33554432&&offset<33554432);
  1017. +  return ((u_int)offset>>2)&0xffffff;
  1018. +/*    
  1019.    int offset=addr-(int)out-8;
  1020.    if(offset<-33554432||offset>=33554432) {
  1021.      if (addr>2) {
  1022. @@ -873,6 +971,7 @@
  1023.      return 0;
  1024.    }
  1025.    return ((u_int)offset>>2)&0xffffff;
  1026. +*/
  1027.  }
  1028.  
  1029.  void emit_mov(int rs,int rt)
  1030. @@ -974,21 +1073,21 @@
  1031.      assem_debug("mvn %s,#%d\n",regname[rt],imm);
  1032.      output_w32(0xe3e00000|rd_rn_rm(rt,0,0)|armval);
  1033.    }else if(imm<65536) {
  1034. -    #ifdef ARMv5_ONLY
  1035. +    if(!isARMv7) {
  1036.      assem_debug("mov %s,#%d\n",regname[rt],imm&0xFF00);
  1037.      output_w32(0xe3a00000|rd_rn_imm_shift(rt,0,imm>>8,8));
  1038.      assem_debug("add %s,%s,#%d\n",regname[rt],regname[rt],imm&0xFF);
  1039.      output_w32(0xe2800000|rd_rn_imm_shift(rt,rt,imm&0xff,0));
  1040. -    #else
  1041. +    }else{
  1042.      emit_movw(imm,rt);
  1043. -    #endif
  1044. +    }
  1045.    }else{
  1046. -    #ifdef ARMv5_ONLY
  1047. +    if(!isARMv7) {
  1048.      emit_loadlp(imm,rt);
  1049. -    #else
  1050. +    }else{
  1051.      emit_movw(imm&0x0000FFFF,rt);
  1052.      emit_movt(imm&0xFFFF0000,rt);
  1053. -    #endif
  1054. +    }
  1055.    }
  1056.  }
  1057.  void emit_pcreladdr(u_int rt)
  1058. @@ -1246,25 +1345,25 @@
  1059.      assem_debug("bic %s,%s,#%d\n",regname[rt],regname[rs],imm);
  1060.      output_w32(0xe3c00000|rd_rn_rm(rt,rs,0)|armval);
  1061.    }else if(imm==65535) {
  1062. -    #ifdef ARMv5_ONLY
  1063. +    if(!isARMv7) {
  1064.      assem_debug("bic %s,%s,#FF000000\n",regname[rt],regname[rs]);
  1065.      output_w32(0xe3c00000|rd_rn_rm(rt,rs,0)|0x4FF);
  1066.      assem_debug("bic %s,%s,#00FF0000\n",regname[rt],regname[rt]);
  1067.      output_w32(0xe3c00000|rd_rn_rm(rt,rt,0)|0x8FF);
  1068. -    #else
  1069. +    }else{
  1070.      assem_debug("uxth %s,%s\n",regname[rt],regname[rs]);
  1071.      output_w32(0xe6ff0070|rd_rn_rm(rt,0,rs));
  1072. -    #endif
  1073. +    }
  1074.    }else{
  1075.      assert(imm>0&&imm<65535);
  1076. -    #ifdef ARMv5_ONLY
  1077. +    if(!isARMv7) {
  1078.      assem_debug("mov r14,#%d\n",imm&0xFF00);
  1079.      output_w32(0xe3a00000|rd_rn_imm_shift(HOST_TEMPREG,0,imm>>8,8));
  1080.      assem_debug("add r14,r14,#%d\n",imm&0xFF);
  1081.      output_w32(0xe2800000|rd_rn_imm_shift(HOST_TEMPREG,HOST_TEMPREG,imm&0xff,0));
  1082. -    #else
  1083. +    }else{
  1084.      emit_movw(imm,HOST_TEMPREG);
  1085. -    #endif
  1086. +    }
  1087.      assem_debug("and %s,%s,r14\n",regname[rt],regname[rs]);
  1088.      output_w32(0xe0000000|rd_rn_rm(rt,rs,HOST_TEMPREG));
  1089.    }
  1090. @@ -1363,13 +1462,13 @@
  1091.  
  1092.  void emit_signextend16(int rs,int rt)
  1093.  {
  1094. -  #ifdef ARMv5_ONLY
  1095. +  if(!isARMv7) {
  1096.    emit_shlimm(rs,16,rt);
  1097.    emit_sarimm(rt,16,rt);
  1098. -  #else
  1099. +  }else{
  1100.    assem_debug("sxth %s,%s\n",regname[rt],regname[rs]);
  1101.    output_w32(0xe6bf0070|rd_rn_rm(rt,0,rs));
  1102. -  #endif
  1103. +  }
  1104.  }
  1105.  
  1106.  void emit_shl(u_int rs,u_int shift,u_int rt)
  1107. @@ -1451,20 +1550,20 @@
  1108.      output_w32(0xe3700000|rd_rn_rm(0,rs,0)|armval);
  1109.    }else if(imm>0) {
  1110.      assert(imm<65536);
  1111. -    #ifdef ARMv5_ONLY
  1112. +    if(!isARMv7) {
  1113.      emit_movimm(imm,HOST_TEMPREG);
  1114. -    #else
  1115. +    }else{
  1116.      emit_movw(imm,HOST_TEMPREG);
  1117. -    #endif
  1118. +    }
  1119.      assem_debug("cmp %s,r14\n",regname[rs]);
  1120.      output_w32(0xe1500000|rd_rn_rm(0,rs,HOST_TEMPREG));
  1121.    }else{
  1122.      assert(imm>-65536);
  1123. -    #ifdef ARMv5_ONLY
  1124. +    if(!isARMv7) {
  1125.      emit_movimm(-imm,HOST_TEMPREG);
  1126. -    #else
  1127. +    }else{
  1128.      emit_movw(-imm,HOST_TEMPREG);
  1129. -    #endif
  1130. +    }
  1131.      assem_debug("cmn %s,r14\n",regname[rs]);
  1132.      output_w32(0xe1700000|rd_rn_rm(0,rs,HOST_TEMPREG));
  1133.    }
  1134. @@ -2185,12 +2284,12 @@
  1135.      output_w32(0x12400000|rd_rn_rm(rt,rt,0)|armval);
  1136.    }
  1137.    else {
  1138. -    #ifdef ARMv5_ONLY
  1139. +    if(!isARMv7) {
  1140.      emit_movimm(imm1,rt);
  1141.      add_literal((int)out,imm2);
  1142.      assem_debug("ldrne %s,pc+? [=%x]\n",regname[rt],imm2);
  1143.      output_w32(0x15900000|rd_rn_rm(rt,15,0));
  1144. -    #else
  1145. +    }else{
  1146.      emit_movw(imm1&0x0000FFFF,rt);
  1147.      if((imm1&0xFFFF)!=(imm2&0xFFFF)) {
  1148.        assem_debug("movwne %s,#%d (0x%x)\n",regname[rt],imm2&0xFFFF,imm2&0xFFFF);
  1149. @@ -2201,7 +2300,7 @@
  1150.        assem_debug("movtne %s,#%d (0x%x)\n",regname[rt],imm2&0xffff0000,imm2&0xffff0000);
  1151.        output_w32(0x13400000|rd_rn_rm(rt,0,0)|((imm2>>16)&0xfff)|((imm2>>12)&0xf0000));
  1152.      }
  1153. -    #endif
  1154. +    }
  1155.    }
  1156.  }
  1157.  
  1158. @@ -3070,17 +3169,17 @@
  1159.    addr=(u_int)source;
  1160.    #endif
  1161.    // Careful about the code output here, verify_dirty needs to parse it.
  1162. -  #ifdef ARMv5_ONLY
  1163. +  if(!isARMv7) {
  1164.    emit_loadlp(addr,1);
  1165.    emit_loadlp((int)copy,2);
  1166.    emit_loadlp(slen*4,3);
  1167. -  #else
  1168. +  }else{
  1169.    emit_movw(addr&0x0000FFFF,1);
  1170.    emit_movw(((u_int)copy)&0x0000FFFF,2);
  1171.    emit_movt(addr&0xFFFF0000,1);
  1172.    emit_movt(((u_int)copy)&0xFFFF0000,2);
  1173.    emit_movw(slen*4,3);
  1174. -  #endif
  1175. +  }
  1176.    emit_movimm(start+i*4,0);
  1177.    emit_call((int)start<(int)0xC0000000?(int)&verify_code:(int)&verify_code_vm);
  1178.    int entry=(int)out;
  1179. @@ -3093,17 +3192,17 @@
  1180.  void do_dirty_stub_ds()
  1181.  {
  1182.    // Careful about the code output here, verify_dirty needs to parse it.
  1183. -  #ifdef ARMv5_ONLY
  1184. +  if(!isARMv7) {
  1185.    emit_loadlp((int)start<(int)0xC0000000?(int)source:(int)start,1);
  1186.    emit_loadlp((int)copy,2);
  1187.    emit_loadlp(slen*4,3);
  1188. -  #else
  1189. +  }else{
  1190.    emit_movw(((int)start<(int)0xC0000000?(u_int)source:(u_int)start)&0x0000FFFF,1);
  1191.    emit_movw(((u_int)copy)&0x0000FFFF,2);
  1192.    emit_movt(((int)start<(int)0xC0000000?(u_int)source:(u_int)start)&0xFFFF0000,1);
  1193.    emit_movt(((u_int)copy)&0xFFFF0000,2);
  1194.    emit_movw(slen*4,3);
  1195. -  #endif
  1196. +  }
  1197.    emit_movimm(start+1,0);
  1198.    emit_call((int)&verify_code_ds);
  1199.  }
  1200. @@ -3770,9 +3869,9 @@
  1201.      emit_movimm(source[i],1); // opcode
  1202.      if (cc>=0&&gte_cycletab[c2op])
  1203.        emit_addimm(cc,gte_cycletab[c2op]/2,cc); // XXX: could just adjust ccadj?
  1204. -    emit_addimm(FP,(int)&psxRegs.CP2D.r[0]-(int)&dynarec_local,0); // cop2 regs
  1205. -    emit_writeword(1,(int)&psxRegs.code);
  1206. -    emit_call((int)gte_handlers[c2op]);
  1207. +    emit_addimm(FP,(u_int)&psxRegs.CP2D.r[0]-(u_int)&dynarec_local,0); // cop2 regs
  1208. +    emit_writeword(1,(u_int)&psxRegs.code);
  1209. +    emit_call((u_int)gte_handlers[c2op]);
  1210.    }
  1211.  
  1212.    if(i>=slen-1||itype[i+1]!=C2OP)
  1213. @@ -4546,11 +4645,11 @@
  1214.          assert(m2l>=0);
  1215.          save_regs(0x100f);
  1216.          if(m1l!=0) emit_mov(m1l,0);
  1217. -        if(m1h==0) emit_readword((int)&dynarec_local,1);
  1218. +        if(m1h==0) emit_readword((u_int)&dynarec_local,1);
  1219.          else if(m1h>1) emit_mov(m1h,1);
  1220. -        if(m2l<2) emit_readword((int)&dynarec_local+m2l*4,2);
  1221. +        if(m2l<2) emit_readword((u_int)&dynarec_local+m2l*4,2);
  1222.          else if(m2l>2) emit_mov(m2l,2);
  1223. -        if(m2h<3) emit_readword((int)&dynarec_local+m2h*4,3);
  1224. +        if(m2h<3) emit_readword((u_int)&dynarec_local+m2h*4,3);
  1225.          else if(m2h>3) emit_mov(m2h,3);
  1226.          emit_call((int)&multu64);
  1227.          restore_regs(0x100f);
  1228. @@ -4626,11 +4725,11 @@
  1229.          assert(d2l>=0);
  1230.          save_regs(0x100f);
  1231.          if(d1l!=0) emit_mov(d1l,0);
  1232. -        if(d1h==0) emit_readword((int)&dynarec_local,1);
  1233. +        if(d1h==0) emit_readword((u_int)&dynarec_local,1);
  1234.          else if(d1h>1) emit_mov(d1h,1);
  1235. -        if(d2l<2) emit_readword((int)&dynarec_local+d2l*4,2);
  1236. +        if(d2l<2) emit_readword((u_int)&dynarec_local+d2l*4,2);
  1237.          else if(d2l>2) emit_mov(d2l,2);
  1238. -        if(d2h<3) emit_readword((int)&dynarec_local+d2h*4,3);
  1239. +        if(d2h<3) emit_readword((u_int)&dynarec_local+d2h*4,3);
  1240.          else if(d2h>3) emit_mov(d2h,3);
  1241.          emit_call((int)&div64);
  1242.          restore_regs(0x100f);
  1243. @@ -4659,11 +4758,11 @@
  1244.          assert(d2l>=0);
  1245.          save_regs(0x100f);
  1246.          if(d1l!=0) emit_mov(d1l,0);
  1247. -        if(d1h==0) emit_readword((int)&dynarec_local,1);
  1248. +        if(d1h==0) emit_readword((u_int)&dynarec_local,1);
  1249.          else if(d1h>1) emit_mov(d1h,1);
  1250. -        if(d2l<2) emit_readword((int)&dynarec_local+d2l*4,2);
  1251. +        if(d2l<2) emit_readword((u_int)&dynarec_local+d2l*4,2);
  1252.          else if(d2l>2) emit_mov(d2l,2);
  1253. -        if(d2h<3) emit_readword((int)&dynarec_local+d2h*4,3);
  1254. +        if(d2h<3) emit_readword((u_int)&dynarec_local+d2h*4,3);
  1255.          else if(d2h>3) emit_mov(d2h,3);
  1256.          emit_call((int)&divu64);
  1257.          restore_regs(0x100f);
  1258. @@ -4697,7 +4796,7 @@
  1259.  }
  1260.  
  1261.  void do_preload_rhtbl(int ht) {
  1262. -  emit_addimm(FP,(int)&mini_ht-(int)&dynarec_local,ht);
  1263. +  emit_addimm(FP,(u_int)&mini_ht-(u_int)&dynarec_local,ht);
  1264.  }
  1265.  
  1266.  void do_rhash(int rs,int rh) {
  1267. @@ -4721,20 +4820,20 @@
  1268.  }
  1269.  
  1270.  void do_miniht_insert(u_int return_address,int rt,int temp) {
  1271. -  #ifdef ARMv5_ONLY
  1272. +  if(!isARMv7) {
  1273.    emit_movimm(return_address,rt); // PC into link register
  1274.    add_to_linker((int)out,return_address,1);
  1275.    emit_pcreladdr(temp);
  1276.    emit_writeword(rt,(int)&mini_ht[(return_address&0xFF)>>3][0]);
  1277.    emit_writeword(temp,(int)&mini_ht[(return_address&0xFF)>>3][1]);
  1278. -  #else
  1279. +  }else{
  1280.    emit_movw(return_address&0x0000FFFF,rt);
  1281.    add_to_linker((int)out,return_address,1);
  1282.    emit_pcreladdr(temp);
  1283.    emit_writeword(temp,(int)&mini_ht[(return_address&0xFF)>>3][1]);
  1284.    emit_movt(return_address&0xFFFF0000,rt);
  1285.    emit_writeword(rt,(int)&mini_ht[(return_address&0xFF)>>3][0]);
  1286. -  #endif
  1287. +  }
  1288.  }
  1289.  
  1290.  // Sign-extend to 64 bits and write out upper half of a register
  1291. @@ -4883,7 +4982,7 @@
  1292.                end+=4096;
  1293.                j++;
  1294.              }else{
  1295. -              __clear_cache((void *)start,(void *)end);
  1296. +              cacheflush((void *)start,(void *)end, 0);
  1297.                break;
  1298.              }
  1299.            }
  1300. @@ -4902,6 +5001,27 @@
  1301.    rounding_modes[2]=0x1<<22; // ceil
  1302.    rounding_modes[3]=0x2<<22; // floor
  1303.  #endif
  1304. +
  1305. +  // Trampolines for jumps >32M
  1306. +  int *ptr,*ptr2;
  1307. +  ptr=(int *)jump_table_symbols;
  1308. +  ptr2=(int *)((void *)BASE_ADDR+(1<<TARGET_SIZE_2)-JUMP_TABLE_SIZE);
  1309. +  while((void *)ptr<(void *)jump_table_symbols+sizeof(jump_table_symbols))
  1310. +  {
  1311. +    int offset=*ptr-(int)ptr2-8;
  1312. +    if(offset>=-33554432&&offset<33554432)
  1313. +    {
  1314. +      *ptr2=0xea000000|((offset>>2)&0xffffff); // direct branch
  1315. +    }
  1316. +    else
  1317. +    {
  1318. +      *ptr2=0xe51ff004; // ldr pc,[pc,#-4]
  1319. +    }
  1320. +    ptr2++;
  1321. +    *ptr2=*ptr;
  1322. +    ptr++;
  1323. +    ptr2++;
  1324. +  }
  1325.  }
  1326.  
  1327.  // vim:shiftwidth=2:expandtab
  1328. diff -u -r pcsx_rearmed/libpcsxcore/new_dynarec/assem_arm.h libpsx/project/jni/libpcsxcore/new_dynarec/assem_arm.h
  1329. --- pcsx_rearmed/libpcsxcore/new_dynarec/assem_arm.h    Tue Jan 10 12:30:41 2012
  1330. +++ libpsx/project/jni/libpcsxcore/new_dynarec/assem_arm.h  Mon Jan  9 18:42:14 2012
  1331. @@ -48,7 +48,10 @@
  1332.  
  1333.  extern char *invc_ptr;
  1334.  
  1335. -#define BASE_ADDR 0x1000000 // Code generator target address
  1336. +extern int isARMv7;
  1337. +extern int isARMneon;
  1338. +
  1339. +#define BASE_ADDR ((unsigned long)dynarec_ptr) // Code generator target address
  1340.  #define TARGET_SIZE_2 24 // 2^24 = 16 megabytes
  1341.  
  1342.  // This is defined in linkage_arm.s, but gcc -O3 likes this better
  1343. diff -u -r pcsx_rearmed/libpcsxcore/new_dynarec/emu_if.c libpsx/project/jni/libpcsxcore/new_dynarec/emu_if.c
  1344. --- pcsx_rearmed/libpcsxcore/new_dynarec/emu_if.c   Tue Jan 10 12:46:33 2012
  1345. +++ libpsx/project/jni/libpcsxcore/new_dynarec/emu_if.c Mon Jan  9 18:42:14 2012
  1346. @@ -161,11 +161,13 @@
  1347.     for (i = 0; i < ARRAY_SIZE(gte_handlers); i++)
  1348.         if (psxCP2[i] != psxNULL)
  1349.             gte_handlers[i] = psxCP2[i];
  1350. -#if defined(__arm__) && !defined(DRC_DBG)
  1351. +#if defined(__arm__) && !defined(DRC_DBG) && !defined(ARMv5_ONLY)
  1352. +  if(isARMneon) {
  1353.     gte_handlers[0x01] = gteRTPS_neon;
  1354.     gte_handlers[0x30] = gteRTPT_neon;
  1355.     gte_handlers[0x12] = gteMVMVA_neon;
  1356.     gte_handlers[0x06] = gteNCLIP_neon;
  1357. +  }
  1358.  #endif
  1359.     psxH_ptr = psxH;
  1360.  
  1361. diff -u -r pcsx_rearmed/libpcsxcore/new_dynarec/emu_if.h libpsx/project/jni/libpcsxcore/new_dynarec/emu_if.h
  1362. --- pcsx_rearmed/libpcsxcore/new_dynarec/emu_if.h   Tue Jan 10 12:30:41 2012
  1363. +++ libpsx/project/jni/libpcsxcore/new_dynarec/emu_if.h Mon Jan  9 18:42:14 2012
  1364. @@ -57,3 +57,5 @@
  1365.  
  1366.  /* misc */
  1367.  extern void (*psxHLEt[])();
  1368. +extern int isARMv7;
  1369. +extern int isARMneon;
  1370. Only in libpsx/project/jni/libpcsxcore/new_dynarec: linkage_arm.S
  1371. Only in pcsx_rearmed/libpcsxcore/new_dynarec: linkage_arm.s
  1372. diff -u -r pcsx_rearmed/libpcsxcore/new_dynarec/new_dynarec.c libpsx/project/jni/libpcsxcore/new_dynarec/new_dynarec.c
  1373. --- pcsx_rearmed/libpcsxcore/new_dynarec/new_dynarec.c  Tue Jan 10 12:46:33 2012
  1374. +++ libpsx/project/jni/libpcsxcore/new_dynarec/new_dynarec.c    Mon Jan  9 18:42:14 2012
  1375. @@ -22,6 +22,9 @@
  1376.  #include <stdint.h> //include for uint64_t
  1377.  #include <assert.h>
  1378.  
  1379. +#define LOG_TAG "libpsx Emulator"
  1380. +#include <android/log.h>
  1381. +
  1382.  #include "emu_if.h" //emulator interface
  1383.  
  1384.  #include <sys/mman.h>
  1385. @@ -259,6 +262,9 @@
  1386.  
  1387.  int tracedebug=0;
  1388.  
  1389. +unsigned char dynarec_addr[(1<<TARGET_SIZE_2) + 4096];
  1390. +unsigned char* dynarec_ptr;
  1391. +
  1392.  //#define DEBUG_CYCLE_COUNT 1
  1393.  
  1394.  void nullf() {}
  1395. @@ -1224,7 +1230,7 @@
  1396.        restore_candidate[((page&2047)>>3)+256]|=1<<(page&7);
  1397.      }
  1398.    #ifdef __arm__
  1399. -  __clear_cache((void *)BASE_ADDR,(void *)BASE_ADDR+(1<<TARGET_SIZE_2));
  1400. +  cacheflush((void *)BASE_ADDR,(void *)BASE_ADDR+(1<<TARGET_SIZE_2), 0);
  1401.    #endif
  1402.    #ifdef USE_MINI_HT
  1403.    memset(mini_ht,-1,sizeof(mini_ht));
  1404. @@ -7803,11 +7809,13 @@
  1405.  void new_dynarec_init()
  1406.  {
  1407.    printf("Init new dynarec\n");
  1408. +  dynarec_ptr = (unsigned char *)(((unsigned long) dynarec_addr + 4096) & ~(4095));
  1409.    out=(u_char *)BASE_ADDR;
  1410.    if (mmap (out, 1<<TARGET_SIZE_2,
  1411.              PROT_READ | PROT_WRITE | PROT_EXEC,
  1412.              MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS,
  1413.              -1, 0) <= 0) {printf("mmap() failed\n");}
  1414. +  mprotect(out, 1<<TARGET_SIZE_2, PROT_READ|PROT_WRITE|PROT_EXEC);
  1415.  #ifdef MUPEN64
  1416.    rdword=&readmem_dword;
  1417.    fake_pc.f.r.rs=&readmem_dword;
  1418. @@ -7885,7 +7893,8 @@
  1419.    }
  1420.  */
  1421.    //if(Count==365117028) tracedebug=1;
  1422. -  assem_debug("NOTCOMPILED: addr = %x -> %x\n", (int)addr, (int)out);
  1423. +  //__android_log_print(ANDROID_LOG_WARN, LOG_TAG, "NOTCOMPILED: addr = %x -> %x\n", (int)addr, (int)out);
  1424. +  
  1425.    //printf("NOTCOMPILED: addr = %x -> %x\n", (int)addr, (int)out);
  1426.    //printf("TRACE: count=%d next=%d (compile %x)\n",Count,next_interupt,addr);
  1427.    //if(debug)
  1428. @@ -7913,7 +7922,7 @@
  1429.      emit_writeword(0,(int)&pcaddr);
  1430.      emit_jmp((int)new_dyna_leave);
  1431.  #ifdef __arm__
  1432. -    __clear_cache((void *)beginning,out);
  1433. +    cacheflush((void *)beginning,out, 0);
  1434.  #endif
  1435.      ll_add(jump_in+page,start,(void *)beginning);
  1436.      return 0;
  1437. @@ -11081,12 +11090,12 @@
  1438.    copy+=slen*4;
  1439.    
  1440.    #ifdef __arm__
  1441. -  __clear_cache((void *)beginning,out);
  1442. +  cacheflush((void *)beginning,out,0);
  1443.    #endif
  1444.    
  1445.    // If we're within 256K of the end of the buffer,
  1446.    // start over from the beginning. (Is 256K enough?)
  1447. -  if((int)out>BASE_ADDR+(1<<TARGET_SIZE_2)-MAX_OUTPUT_BLOCK_SIZE) out=(u_char *)BASE_ADDR;
  1448. +  if((int)out>BASE_ADDR+(1<<TARGET_SIZE_2)-MAX_OUTPUT_BLOCK_SIZE-JUMP_TABLE_SIZE) out=(u_char *)BASE_ADDR;
  1449.    
  1450.    // Trap writes to any of the pages we compiled
  1451.    for(i=start>>12;i<=(start+slen*4)>>12;i++) {
  1452. diff -u -r pcsx_rearmed/libpcsxcore/plugins.c libpsx/project/jni/libpcsxcore/plugins.c
  1453. --- pcsx_rearmed/libpcsxcore/plugins.c  Tue Jan 10 10:52:39 2012
  1454. +++ libpsx/project/jni/libpcsxcore/plugins.c    Mon Jan  9 18:42:14 2012
  1455. @@ -21,12 +21,15 @@
  1456.  * Plugin library callback/access functions.
  1457.  */
  1458.  
  1459. +#include "minimal.h"
  1460.  #include "plugins.h"
  1461.  #include "cdriso.h"
  1462. +#include <time.h>
  1463.  
  1464.  static char IsoFile[MAXPATHLEN] = "";
  1465.  static s64 cdOpenCaseTime = 0;
  1466.  
  1467. +#if 0
  1468.  GPUupdateLace         GPU_updateLace;
  1469.  GPUinit               GPU_init;
  1470.  GPUshutdown           GPU_shutdown;
  1471. @@ -50,6 +53,8 @@
  1472.  GPUshowScreenPic      GPU_showScreenPic;
  1473.  GPUclearDynarec       GPU_clearDynarec;
  1474.  GPUvBlank             GPU_vBlank;
  1475. +GPUregisterCallback   GPU_registerCallback;
  1476. +GPUidle               GPU_idle;
  1477.  
  1478.  CDRinit               CDR_init;
  1479.  CDRshutdown           CDR_shutdown;
  1480. @@ -174,24 +179,23 @@
  1481.  
  1482.  #endif
  1483.  
  1484. -static const char *err;
  1485. -
  1486. -#define CheckErr(func) { \
  1487. -   err = SysLibError(); \
  1488. -   if (err != NULL) { SysMessage(_("Error loading %s: %s"), func, err); return -1; } \
  1489. -}
  1490. -
  1491. -#define LoadSym(dest, src, name, checkerr) { \
  1492. -   dest = (src)SysLoadSym(drv, name); \
  1493. -   if (checkerr) { CheckErr(name); } else SysLibError(); \
  1494. +void CALLBACK GPUdisplayText(char *pText) {
  1495. +   SysPrintf("%s\n", pText);
  1496.  }
  1497. +#endif
  1498.  
  1499. -void *hGPUDriver = NULL;
  1500. +long CALLBACK CDR__getStatus(struct CdrStat *stat) {
  1501. +   if (cdOpenCaseTime < 0 || cdOpenCaseTime > (s64)time(NULL))
  1502. +       stat->Status = 0x10;
  1503. +   else
  1504. +       stat->Status = 0;
  1505.  
  1506. -void CALLBACK GPU__displayText(char *pText) {
  1507. -   SysPrintf("%s\n", pText);
  1508. +   return 0;
  1509.  }
  1510.  
  1511. +void CALLBACK GPU_idle(void) {}
  1512. +
  1513. +#if 0
  1514.  long CALLBACK GPU__configure(void) { return 0; }
  1515.  long CALLBACK GPU__test(void) { return 0; }
  1516.  void CALLBACK GPU__about(void) {}
  1517. @@ -201,6 +205,8 @@
  1518.  long CALLBACK GPU__showScreenPic(unsigned char *pMem) { return -1; }
  1519.  void CALLBACK GPU__clearDynarec(void (CALLBACK *callback)(void)) {}
  1520.  void CALLBACK GPU__vBlank(int val) {}
  1521. +void CALLBACK GPU__registerCallback(void (CALLBACK *callback)(int)) {};
  1522. +void CALLBACK GPU__idle(void) {}
  1523.  
  1524.  #define LoadGpuSym1(dest, name) \
  1525.     LoadSym(GPU_##dest, GPU##dest, name, TRUE);
  1526. @@ -241,6 +247,8 @@
  1527.     LoadGpuSym0(showScreenPic, "GPUshowScreenPic");
  1528.     LoadGpuSym0(clearDynarec, "GPUclearDynarec");
  1529.      LoadGpuSym0(vBlank, "GPUvBlank");
  1530. +    LoadGpuSym0(registerCallback, "GPUregisterCallback");
  1531. +    LoadGpuSym0(idle, "GPUidle");
  1532.     LoadGpuSym0(configure, "GPUconfigure");
  1533.     LoadGpuSym0(test, "GPUtest");
  1534.     LoadGpuSym0(about, "GPUabout");
  1535. @@ -361,6 +369,7 @@
  1536.  
  1537.     return 0;
  1538.  }
  1539. +#endif
  1540.  
  1541.  void *hPAD1Driver = NULL;
  1542.  void *hPAD2Driver = NULL;
  1543. @@ -440,7 +449,7 @@
  1544.      return buf[bufc++];
  1545.  }
  1546.  
  1547. -unsigned char CALLBACK PAD1__startPoll(int pad) {
  1548. +unsigned char CALLBACK PAD1_startPoll(int pad) {
  1549.      PadDataS padd;
  1550.  
  1551.      PAD1_readPort1(&padd);
  1552. @@ -448,7 +457,7 @@
  1553.      return _PADstartPoll(&padd);
  1554.  }
  1555.  
  1556. -unsigned char CALLBACK PAD1__poll(unsigned char value) {
  1557. +unsigned char CALLBACK PAD1_poll(unsigned char value) {
  1558.      return _PADpoll(value);
  1559.  }
  1560.  
  1561. @@ -468,6 +477,7 @@
  1562.     LoadSym(PAD1_##dest, PAD##dest, name, FALSE); \
  1563.     if (PAD1_##dest == NULL) PAD1_##dest = (PAD##dest) PAD1__##dest;
  1564.  
  1565. +#if 0
  1566.  static int LoadPAD1plugin(const char *PAD1dll) {
  1567.     void *drv;
  1568.  
  1569. @@ -493,8 +503,9 @@
  1570.  
  1571.     return 0;
  1572.  }
  1573. +#endif
  1574.  
  1575. -unsigned char CALLBACK PAD2__startPoll(int pad) {
  1576. +unsigned char CALLBACK PAD2_startPoll(int pad) {
  1577.     PadDataS padd;
  1578.  
  1579.     PAD2_readPort2(&padd);
  1580. @@ -502,16 +513,17 @@
  1581.     return _PADstartPoll(&padd);
  1582.  }
  1583.  
  1584. -unsigned char CALLBACK PAD2__poll(unsigned char value) {
  1585. -   return _PADpoll(value);
  1586. +unsigned char CALLBACK PAD2_poll(unsigned char value) {
  1587. +  return 0xFF; //_PADpoll(value);
  1588.  }
  1589.  
  1590. -long CALLBACK PAD2__configure(void) { return 0; }
  1591. -void CALLBACK PAD2__about(void) {}
  1592. -long CALLBACK PAD2__test(void) { return 0; }
  1593. -long CALLBACK PAD2__query(void) { return PSE_PAD_USE_PORT1 | PSE_PAD_USE_PORT2; }
  1594. -long CALLBACK PAD2__keypressed() { return 0; }
  1595. +long CALLBACK PAD2_configure(void) { return 0; }
  1596. +void CALLBACK PAD2_about(void) {}
  1597. +long CALLBACK PAD2_test(void) { return 0; }
  1598. +long CALLBACK PAD2_query(void) { return PSE_PAD_USE_PORT1 | PSE_PAD_USE_PORT2; }
  1599. +long CALLBACK PAD2_keypressed() { return 0; }
  1600.  
  1601. +#if 0
  1602.  #define LoadPad2Sym1(dest, name) \
  1603.     LoadSym(PAD2_##dest, PAD##dest, name, TRUE);
  1604.  
  1605. @@ -547,15 +559,198 @@
  1606.  
  1607.     return 0;
  1608.  }
  1609. +#endif
  1610. +
  1611. +
  1612. +long  PadFlags = 0;
  1613. +
  1614. +long PAD1_init(long flags) {
  1615. +   PadFlags |= flags;
  1616. +  
  1617. +   return 0;
  1618. +}
  1619. +
  1620. +long PAD2_init(long flags) {
  1621. +   PadFlags |= flags;
  1622. +  
  1623. +   return 0;
  1624. +}
  1625. +
  1626. +long PAD1_shutdown(void) {
  1627. +   return 0;
  1628. +}
  1629. +
  1630. +
  1631. +long PAD2_shutdown(void) {
  1632. +   return 0;
  1633. +}
  1634. +
  1635. +
  1636. +long PAD1_open(void)
  1637. +{
  1638. +   return 0;
  1639. +}
  1640. +
  1641. +
  1642. +long PAD2_open(void)
  1643. +{
  1644. +   return 0;
  1645. +}
  1646. +
  1647. +
  1648. +long PAD1_close(void) {
  1649. +   return 0;
  1650. +}
  1651. +
  1652. +
  1653. +long PAD2_close(void) {
  1654. +   return 0;
  1655. +}
  1656. +
  1657. +u16 ReadZodKeys()
  1658. +{
  1659. +   u16 pad_status = 0xffff;
  1660. +   u32 keys = gp2x_joystick_read();
  1661. +
  1662. +#ifdef PANDORA
  1663. +  if(  keys & GP2X_PUSH && keys & GP2X_L ) // L2
  1664. +  {
  1665. +   keys |= GP2X_VOL_DOWN;
  1666. +  }
  1667. +  if(  keys & GP2X_PUSH && keys & GP2X_R ) // R2
  1668. +  {
  1669. +   keys |= GP2X_VOL_UP;
  1670. +  }
  1671. +#endif
  1672. +
  1673. +  if(  keys & GP2X_VOL_DOWN ) // L2
  1674. +   {
  1675. +       pad_status &= ~(1<<8);
  1676. +   }
  1677. +   if (keys & GP2X_L)
  1678. +   {
  1679. +       pad_status &= ~(1<<10); // L ?
  1680. +   }
  1681. +  
  1682. +   if( keys & GP2X_VOL_UP ) // R2
  1683. +   {
  1684. +       pad_status &= ~(1<<9);
  1685. +   }
  1686. +   if (keys & GP2X_R)
  1687. +   {
  1688. +       pad_status &= ~(1<<11); // R ?
  1689. +   }
  1690. +  
  1691. +   if (keys & GP2X_UP)
  1692. +   {
  1693. +       pad_status &= ~(1<<4);
  1694. +   }
  1695. +   if (keys & GP2X_DOWN)
  1696. +   {
  1697. +       pad_status &= ~(1<<6);
  1698. +   }
  1699. +   if (keys & GP2X_LEFT)
  1700. +   {
  1701. +       pad_status &= ~(1<<7);
  1702. +   }
  1703. +   if (keys & GP2X_RIGHT)
  1704. +   {
  1705. +       pad_status &= ~(1<<5);
  1706. +   }
  1707. +   if (keys & GP2X_START)
  1708. +   {
  1709. +       pad_status &= ~(1<<3);
  1710. +   }
  1711. +   if (keys & GP2X_SELECT)
  1712. +   {          
  1713. +       pad_status &= ~(1);
  1714. +   }
  1715. +      
  1716. +   if (keys & GP2X_X)
  1717. +   {
  1718. +       pad_status &= ~(1<<14);
  1719. +   }
  1720. +   if (keys & GP2X_B)
  1721. +   {
  1722. +       pad_status &= ~(1<<13);
  1723. +   }
  1724. +   if (keys & GP2X_A)
  1725. +   {
  1726. +       pad_status &= ~(1<<15);
  1727. +   }
  1728. +   if (keys & GP2X_Y)
  1729. +   {
  1730. +       pad_status &= ~(1<<12);
  1731. +   }
  1732. +
  1733. +#if !defined(IPHONE) && !defined(ANDROID)  
  1734. +  if( (keys & GP2X_L) && (keys & GP2X_R) && (keys & GP2X_X) && (keys & GP2X_Y) && (keys & GP2X_A) && (keys & GP2X_B) )
  1735. +  {
  1736. +    SysClose();
  1737. +  }
  1738. +  if( keys == GP2X_PUSH )
  1739. +   {
  1740. +       // Menu system
  1741. +       u32 w = gp2xscreen_width;
  1742. +       u32 h = gp2xscreen_height;
  1743. +    u32 isRGB24;
  1744. +    
  1745. +       gp2x_change_res(320, 240, 16);
  1746. +    gp2x_sound_thread_mute();
  1747. +
  1748. +       if( 0 != SelectOptions() )
  1749. +       {
  1750. +      GPU_force_res_change = 1;
  1751. +           psx4all_emulating=1;
  1752. +           psxCpu->Execute();
  1753. +           psx4all_emulating=0;
  1754. +       }
  1755. +#if !defined(ANDROID)
  1756. +    gp2x_sound_thread_play(NULL);
  1757. +#endif
  1758. +       isRGB24 = (GPU_GP1 & 0x00200000 ? 32 : 0);
  1759. +    gp2x_change_res(w, h, isRGB24 ? 24 : 16);
  1760. +   }
  1761. +#endif
  1762. +
  1763. +   return pad_status;
  1764. +}
  1765. +
  1766. +long PAD1_readPort1(PadDataS* pad) {
  1767. +   u16 pad_status = 0xffff;
  1768. +   //SysPrintf("start PAD1_readPort()\r\n");
  1769. +   pad_status = ReadZodKeys();
  1770. +   pad->buttonStatus = pad_status;
  1771. +   pad->controllerType = 4; // standard   
  1772. +   return 0;
  1773. +}
  1774. +
  1775. +long PAD2_readPort1(PadDataS* pad) {
  1776. +   u16 pad_status = 0xffff;
  1777. +   //SysPrintf("start PAD1_readPort()\r\n");
  1778. +   pad_status = 0xffff;
  1779. +   pad->buttonStatus = pad_status;
  1780. +   pad->controllerType = 4; // standard
  1781. +   return 0;
  1782. +}
  1783. +
  1784. +long PAD1_readPort2(PadDataS* a) {
  1785. +   return -1;
  1786. +}
  1787. +
  1788. +long PAD2_readPort2(PadDataS* a) {
  1789. +   return -1;
  1790. +}
  1791.  
  1792.  void *hNETDriver = NULL;
  1793.  
  1794. -void CALLBACK NET__setInfo(netInfo *info) {}
  1795. -void CALLBACK NET__keypressed(int key) {}
  1796. -long CALLBACK NET__configure(void) { return 0; }
  1797. -long CALLBACK NET__test(void) { return 0; }
  1798. -void CALLBACK NET__about(void) {}
  1799. +void CALLBACK NET_setInfo(netInfo *info) {}
  1800. +void CALLBACK NET_keypressed(int key) {}
  1801. +long CALLBACK NET_configure(void) { return 0; }
  1802. +long CALLBACK NET_test(void) { return 0; }
  1803. +void CALLBACK NET_about(void) {}
  1804.  
  1805. +#if 0
  1806.  #define LoadNetSym1(dest, name) \
  1807.     LoadSym(NET_##dest, NET##dest, name, TRUE);
  1808.  
  1809. @@ -593,7 +788,9 @@
  1810.  
  1811.     return 0;
  1812.  }
  1813. +#endif
  1814.  
  1815. +#if 0
  1816.  #ifdef ENABLE_SIO1API
  1817.  
  1818.  void *hSIO1Driver = NULL;
  1819. @@ -692,6 +889,7 @@
  1820.  }
  1821.  
  1822.  #endif
  1823. +#endif
  1824.  
  1825.  void CALLBACK clearDynarec(void) {
  1826.     psxCpu->Reset();
  1827. @@ -701,15 +899,18 @@
  1828.     int ret;
  1829.     char Plugin[MAXPATHLEN];
  1830.  
  1831. -   ReleasePlugins();
  1832. +   //ReleasePlugins();
  1833. +
  1834. +  cdrIsoInit();
  1835.  
  1836. +#if 0
  1837.     if (UsingIso()) {
  1838.         LoadCDRplugin(NULL);
  1839.     } else {
  1840.         sprintf(Plugin, "%s/%s", Config.PluginsDir, Config.Cdr);
  1841.         if (LoadCDRplugin(Plugin) == -1) return -1;
  1842.     }
  1843. -
  1844. +  
  1845.     sprintf(Plugin, "%s/%s", Config.PluginsDir, Config.Gpu);
  1846.     if (LoadGPUplugin(Plugin) == -1) return -1;
  1847.  
  1848. @@ -734,6 +935,7 @@
  1849.     sprintf(Plugin, "%s/%s", Config.PluginsDir, Config.Sio1);
  1850.     if (LoadSIO1plugin(Plugin) == -1) return -1;
  1851.  #endif
  1852. +#endif
  1853.  
  1854.     ret = CDR_init();
  1855.     if (ret < 0) { SysMessage (_("Error initializing CD-ROM plugin: %d"), ret); return -1; }
  1856. @@ -746,27 +948,82 @@
  1857.     ret = PAD2_init(2);
  1858.     if (ret < 0) { SysMessage (_("Error initializing Controller 2 plugin: %d"), ret); return -1; }
  1859.  
  1860. +#if 0 // TEMP!!!
  1861.     if (Config.UseNet) {
  1862.         ret = NET_init();
  1863.         if (ret < 0) { SysMessage (_("Error initializing NetPlay plugin: %d"), ret); return -1; }
  1864.     }
  1865. +#endif
  1866.  
  1867.  #ifdef ENABLE_SIO1API
  1868.     ret = SIO1_init();
  1869.     if (ret < 0) { SysMessage (_("Error initializing SIO1 plugin: %d"), ret); return -1; }
  1870.  #endif
  1871.  
  1872. +   ret = CDR_open();
  1873. +   if (ret < 0) { SysMessage (_("Error open CD-ROM plugin: %d"), ret); return -1; }
  1874. +   ret = GPU_open(NULL, NULL, NULL);
  1875. +   if (ret < 0) { SysMessage (_("Error open GPU plugin: %d"), ret); return -1; }
  1876. +   ret = SPU_open();
  1877. +   if (ret < 0) { SysMessage (_("Error open SPU plugin: %d"), ret); return -1; }
  1878. +   SPU_registerCallback(SPUirq);
  1879. +   ret = PAD1_open();
  1880. +   if (ret < 0) { SysMessage (_("Error open Controller 1 plugin: %d"), ret); return -1; }
  1881. +   ret = PAD2_open();
  1882. +   if (ret < 0) { SysMessage (_("Error open Controller 2 plugin: %d"), ret); return -1; }
  1883. +
  1884. +#if 0 // TEMP!!!
  1885. +   if (Config.UseNet) {
  1886. +       ret = NET_open(NULL);
  1887. +       if (ret < 0) { SysMessage (_("Error open plugin: %d"), ret); return -1; }
  1888. +   }
  1889. +#endif
  1890. +
  1891. +#ifdef ENABLE_SIO1API
  1892. +   ret = SIO1_open();
  1893. +   if (ret < 0) { SysMessage (_("Error open SIO1 plugin: %d"), ret); return -1; }
  1894. +#endif
  1895.     SysPrintf(_("Plugins loaded.\n"));
  1896.     return 0;
  1897.  }
  1898.  
  1899.  void ReleasePlugins() {
  1900. +  s32 ret;
  1901. +#if 0 // TEMP!!!
  1902.     if (Config.UseNet) {
  1903. -       int ret = NET_close();
  1904. +       ret = NET_close();
  1905.         if (ret < 0) Config.UseNet = FALSE;
  1906.     }
  1907. +#endif
  1908.     NetOpened = FALSE;
  1909.  
  1910. +   ret = CDR_close();
  1911. +   if (ret < 0) { SysMessage("Error Closing CDR Plugin"); }
  1912. +   ret = SPU_close();
  1913. +   if (ret < 0) { SysMessage("Error Closing SPU Plugin"); }
  1914. +   ret = PAD1_close();
  1915. +   if (ret < 0) { SysMessage("Error Closing PAD1 Plugin"); }
  1916. +   ret = PAD2_close();
  1917. +   if (ret < 0) { SysMessage("Error Closing PAD2 Plugin"); }
  1918. +   ret = GPU_close();
  1919. +   if (ret < 0) { SysMessage("Error Closing GPU Plugin"); }
  1920. +
  1921. +#ifdef ENABLE_SIO1API
  1922. +   ret = SIO1_close();
  1923. +   if (ret < 0) { SysMessage("Error Closing SIO1 Plugin"); }
  1924. +#endif
  1925. +
  1926. +  CDR_shutdown();
  1927. +  GPU_shutdown();
  1928. +  SPU_shutdown();
  1929. +  PAD1_shutdown();
  1930. +  PAD2_shutdown();
  1931. +#ifdef ENABLE_SIO1API
  1932. +   SIO1_shutdown();
  1933. +#endif
  1934. +  
  1935. +#if 0
  1936. +
  1937.     if (hCDRDriver != NULL || cdrIsoActive()) CDR_shutdown();
  1938.     if (hGPUDriver != NULL) GPU_shutdown();
  1939.     if (hSPUDriver != NULL) SPU_shutdown();
  1940. @@ -792,23 +1049,7 @@
  1941.         hSIO1Driver = NULL;
  1942.     }
  1943.  #endif
  1944. -}
  1945. -
  1946. -// for CD swap
  1947. -int ReloadCdromPlugin()
  1948. -{
  1949. -   if (hCDRDriver != NULL || cdrIsoActive()) CDR_shutdown();
  1950. -   if (hCDRDriver != NULL) SysCloseLibrary(hCDRDriver); hCDRDriver = NULL;
  1951. -
  1952. -   if (UsingIso()) {
  1953. -       LoadCDRplugin(NULL);
  1954. -   } else {
  1955. -       char Plugin[MAXPATHLEN];
  1956. -       sprintf(Plugin, "%s/%s", Config.PluginsDir, Config.Cdr);
  1957. -       if (LoadCDRplugin(Plugin) == -1) return -1;
  1958. -   }
  1959. -
  1960. -   return CDR_init();
  1961. +#endif
  1962.  }
  1963.  
  1964.  void SetIsoFile(const char *filename) {
  1965. diff -u -r pcsx_rearmed/libpcsxcore/plugins.h libpsx/project/jni/libpcsxcore/plugins.h
  1966. --- pcsx_rearmed/libpcsxcore/plugins.h  Tue Jan 10 12:44:37 2012
  1967. +++ libpsx/project/jni/libpcsxcore/plugins.h    Mon Jan  9 18:42:14 2012
  1968. @@ -33,11 +33,11 @@
  1969.  typedef void* HWND;
  1970.  #define CALLBACK
  1971.  
  1972. -typedef long (*GPUopen)(unsigned long *, char *, char *);
  1973. -typedef long (*SPUopen)(void);
  1974. -typedef long (*PADopen)(unsigned long *);
  1975. -typedef long (*NETopen)(unsigned long *);
  1976. -typedef long (*SIO1open)(unsigned long *);
  1977. +long GPU_open(unsigned long *, char *, char *);
  1978. +long SPU_open(void);
  1979. +long PAD_open(unsigned long *);
  1980. +long NET_open(unsigned long *);
  1981. +long SIO1_open(unsigned long *);
  1982.  
  1983.  #else
  1984.  
  1985. @@ -62,88 +62,97 @@
  1986.  void ClosePlugins();
  1987.  int ReloadCdromPlugin();
  1988.  
  1989. -typedef unsigned long (CALLBACK* PSEgetLibType)(void);
  1990. -typedef unsigned long (CALLBACK* PSEgetLibVersion)(void);
  1991. -typedef char *(CALLBACK* PSEgetLibName)(void);
  1992. +unsigned long PSEgetLibType(void);
  1993. +unsigned long PSEgetLibVersion(void);
  1994. +char *PSEgetLibName(void);
  1995.  
  1996.  // GPU Functions
  1997. -typedef long (CALLBACK* GPUinit)(void);
  1998. -typedef long (CALLBACK* GPUshutdown)(void);
  1999. -typedef long (CALLBACK* GPUclose)(void);
  2000. -typedef void (CALLBACK* GPUwriteStatus)(uint32_t);
  2001. -typedef void (CALLBACK* GPUwriteData)(uint32_t);
  2002. -typedef void (CALLBACK* GPUwriteDataMem)(uint32_t *, int);
  2003. -typedef uint32_t (CALLBACK* GPUreadStatus)(void);
  2004. -typedef uint32_t (CALLBACK* GPUreadData)(void);
  2005. -typedef void (CALLBACK* GPUreadDataMem)(uint32_t *, int);
  2006. -typedef long (CALLBACK* GPUdmaChain)(uint32_t *,uint32_t);
  2007. -typedef void (CALLBACK* GPUupdateLace)(void);
  2008. -typedef long (CALLBACK* GPUconfigure)(void);
  2009. -typedef long (CALLBACK* GPUtest)(void);
  2010. -typedef void (CALLBACK* GPUabout)(void);
  2011. -typedef void (CALLBACK* GPUmakeSnapshot)(void);
  2012. -typedef void (CALLBACK* GPUkeypressed)(int);
  2013. -typedef void (CALLBACK* GPUdisplayText)(char *);
  2014. +long GPU_init(void);
  2015. +long GPU_shutdown(void);
  2016. +long GPU_close(void);
  2017. +void GPU_writeStatus(uint32_t);
  2018. +void GPU_writeData(uint32_t);
  2019. +void GPU_writeDataMem(uint32_t *, int);
  2020. +uint32_t GPU_readStatus(void);
  2021. +uint32_t GPU_readData(void);
  2022. +void GPU_readDataMem(uint32_t *, int);
  2023. +long GPU_dmaChain(uint32_t *,uint32_t);
  2024. +long GPU_configure(void);
  2025. +long GPU_test(void);
  2026. +void GPU_about(void);
  2027. +void GPU_makeSnapshot(void);
  2028. +void GPU_keypressed(int);
  2029. +void GPU_displayText(char *);
  2030. +#if 0
  2031.  typedef struct {
  2032.     uint32_t ulFreezeVersion;
  2033.     uint32_t ulStatus;
  2034.     uint32_t ulControl[256];
  2035.     unsigned char psxVRam[1024*512*2];
  2036.  } GPUFreeze_t;
  2037. -typedef long (CALLBACK* GPUfreeze)(uint32_t, GPUFreeze_t *);
  2038. -typedef long (CALLBACK* GPUgetScreenPic)(unsigned char *);
  2039. -typedef long (CALLBACK* GPUshowScreenPic)(unsigned char *);
  2040. -typedef void (CALLBACK* GPUclearDynarec)(void (CALLBACK *callback)(void));
  2041. -typedef void (CALLBACK* GPUvBlank)(int);
  2042. -
  2043. -// GPU function pointers
  2044. -extern GPUupdateLace    GPU_updateLace;
  2045. -extern GPUinit          GPU_init;
  2046. -extern GPUshutdown      GPU_shutdown;
  2047. -extern GPUconfigure     GPU_configure;
  2048. -extern GPUtest          GPU_test;
  2049. -extern GPUabout         GPU_about;
  2050. -extern GPUopen          GPU_open;
  2051. -extern GPUclose         GPU_close;
  2052. -extern GPUreadStatus    GPU_readStatus;
  2053. -extern GPUreadData      GPU_readData;
  2054. -extern GPUreadDataMem   GPU_readDataMem;
  2055. -extern GPUwriteStatus   GPU_writeStatus;
  2056. -extern GPUwriteData     GPU_writeData;
  2057. -extern GPUwriteDataMem  GPU_writeDataMem;
  2058. -extern GPUdmaChain      GPU_dmaChain;
  2059. -extern GPUkeypressed    GPU_keypressed;
  2060. -extern GPUdisplayText   GPU_displayText;
  2061. -extern GPUmakeSnapshot  GPU_makeSnapshot;
  2062. -extern GPUfreeze        GPU_freeze;
  2063. -extern GPUgetScreenPic  GPU_getScreenPic;
  2064. -extern GPUshowScreenPic GPU_showScreenPic;
  2065. -extern GPUclearDynarec  GPU_clearDynarec;
  2066. -extern GPUvBlank        GPU_vBlank;
  2067. +long GPU_freeze(uint32_t, GPUFreeze_t *);
  2068. +#else
  2069. +typedef struct  GPUFreeze_t
  2070. +{
  2071. +   u32 ulFreezeVersion;
  2072. +   u32 GP1;
  2073. +   u32 Control[256];
  2074. +   u8  FrameBuffer[0x100000];
  2075. +   ///////////////////////////////////////////////////////////////////////////////
  2076. +   //  Display status
  2077. +   s32 isPAL;
  2078. +   u32 isDisplaySet;
  2079. +   u32 DisplayArea   [8];
  2080. +   u32 DirtyArea     [4];
  2081. +   u32 LastDirtyArea [4];
  2082. +   u32 CheckArea     [4];
  2083. +  
  2084. +   ///////////////////////////////////////////////////////////////////////////////
  2085. +   //  Rasterizer status
  2086. +   u32 TextureWindow [4];
  2087. +   u32 DrawingArea   [4];
  2088. +   u32 DrawingOffset [2];
  2089. +   u32 MaskU;
  2090. +   u32 MaskV;
  2091. +  
  2092. +   ///////////////////////////////////////////////////////////////////////////////
  2093. +   //  Rasterizer status
  2094. +   u8  Masking;
  2095. +   u16 PixelMSB;
  2096. +  int vBlank;
  2097. +} GPUFreeze_t;
  2098. +long GPU_freeze(uint32_t, GPUFreeze_t *);
  2099. +#endif
  2100. +long GPU_getScreenPic(unsigned char *);
  2101. +long GPU_showScreenPic(unsigned char *);
  2102. +void GPU_clearDynarec(void (CALLBACK *callback)(void));
  2103. +void GPU_vBlank(int);
  2104. +void GPU_registerCallback(void (CALLBACK *callback)(int));
  2105. +void GPU_idle(void);
  2106.  
  2107.  // CD-ROM Functions
  2108. -typedef long (CALLBACK* CDRinit)(void);
  2109. -typedef long (CALLBACK* CDRshutdown)(void);
  2110. -typedef long (CALLBACK* CDRopen)(void);
  2111. -typedef long (CALLBACK* CDRclose)(void);
  2112. -typedef long (CALLBACK* CDRgetTN)(unsigned char *);
  2113. -typedef long (CALLBACK* CDRgetTD)(unsigned char, unsigned char *);
  2114. -typedef long (CALLBACK* CDRreadTrack)(unsigned char *);
  2115. -typedef unsigned char* (CALLBACK* CDRgetBuffer)(void);
  2116. -typedef unsigned char* (CALLBACK* CDRgetBufferSub)(void);
  2117. -typedef long (CALLBACK* CDRconfigure)(void);
  2118. -typedef long (CALLBACK* CDRtest)(void);
  2119. -typedef void (CALLBACK* CDRabout)(void);
  2120. -typedef long (CALLBACK* CDRplay)(unsigned char *);
  2121. -typedef long (CALLBACK* CDRstop)(void);
  2122. -typedef long (CALLBACK* CDRsetfilename)(char *);
  2123. +long CDR_init(void);
  2124. +long CDR_shutdown(void);
  2125. +long CDR_open(void);
  2126. +long CDR_close(void);
  2127. +long CDR_getTN(unsigned char *);
  2128. +long CDR_getTD(unsigned char, unsigned char *);
  2129. +long CDR_readTrack(unsigned char *);
  2130. +unsigned char* CDR_getBuffer(void);
  2131. +unsigned char* CDR_getBufferSub(void);
  2132. +long CDR_configure(void);
  2133. +long CDR_test(void);
  2134. +void CDR_about(void);
  2135. +long CDR_play(unsigned char *);
  2136. +long CDR_stop(void);
  2137. +long CDR_setfilename(char *);
  2138.  struct CdrStat {
  2139.     uint32_t Type;
  2140.     uint32_t Status;
  2141.     unsigned char Time[3];
  2142.  };
  2143. -typedef long (CALLBACK* CDRgetStatus)(struct CdrStat *);
  2144. -typedef char* (CALLBACK* CDRgetDriveLetter)(void);
  2145. +long CDR_getStatus(struct CdrStat *);
  2146. +char* CDR_getDriveLetter(void);
  2147.  struct SubQ {
  2148.     char res0[12];
  2149.     unsigned char ControlAndADR;
  2150. @@ -155,46 +164,26 @@
  2151.     unsigned char CRC[2];
  2152.     char res1[72];
  2153.  };
  2154. -typedef long (CALLBACK* CDRreadCDDA)(unsigned char, unsigned char, unsigned char, unsigned char *);
  2155. -typedef long (CALLBACK* CDRgetTE)(unsigned char, unsigned char *, unsigned char *, unsigned char *);
  2156. -
  2157. -// CD-ROM function pointers
  2158. -extern CDRinit               CDR_init;
  2159. -extern CDRshutdown           CDR_shutdown;
  2160. -extern CDRopen               CDR_open;
  2161. -extern CDRclose              CDR_close;
  2162. -extern CDRtest               CDR_test;
  2163. -extern CDRgetTN              CDR_getTN;
  2164. -extern CDRgetTD              CDR_getTD;
  2165. -extern CDRreadTrack          CDR_readTrack;
  2166. -extern CDRgetBuffer          CDR_getBuffer;
  2167. -extern CDRgetBufferSub       CDR_getBufferSub;
  2168. -extern CDRplay               CDR_play;
  2169. -extern CDRstop               CDR_stop;
  2170. -extern CDRgetStatus          CDR_getStatus;
  2171. -extern CDRgetDriveLetter     CDR_getDriveLetter;
  2172. -extern CDRconfigure          CDR_configure;
  2173. -extern CDRabout              CDR_about;
  2174. -extern CDRsetfilename        CDR_setfilename;
  2175. -extern CDRreadCDDA           CDR_readCDDA;
  2176. -extern CDRgetTE              CDR_getTE;
  2177. +long CDR_readCDDA(unsigned char, unsigned char, unsigned char, unsigned char *);
  2178. +long CDR_getTE(unsigned char, unsigned char *, unsigned char *, unsigned char *);
  2179.  
  2180.  // SPU Functions
  2181. -typedef long (CALLBACK* SPUinit)(void);               
  2182. -typedef long (CALLBACK* SPUshutdown)(void);   
  2183. -typedef long (CALLBACK* SPUclose)(void);          
  2184. -typedef void (CALLBACK* SPUplaySample)(unsigned char);    
  2185. -typedef void (CALLBACK* SPUwriteRegister)(unsigned long, unsigned short);
  2186. -typedef unsigned short (CALLBACK* SPUreadRegister)(unsigned long);
  2187. -typedef void (CALLBACK* SPUwriteDMA)(unsigned short);
  2188. -typedef unsigned short (CALLBACK* SPUreadDMA)(void);
  2189. -typedef void (CALLBACK* SPUwriteDMAMem)(unsigned short *, int);
  2190. -typedef void (CALLBACK* SPUreadDMAMem)(unsigned short *, int);
  2191. -typedef void (CALLBACK* SPUplayADPCMchannel)(xa_decode_t *);
  2192. -typedef void (CALLBACK* SPUregisterCallback)(void (CALLBACK *callback)(void));
  2193. -typedef long (CALLBACK* SPUconfigure)(void);
  2194. -typedef long (CALLBACK* SPUtest)(void);
  2195. -typedef void (CALLBACK* SPUabout)(void);
  2196. +long SPU_init(void);              
  2197. +long SPU_shutdown(void);  
  2198. +long SPU_close(void);         
  2199. +void SPU_playSample(unsigned char);       
  2200. +void SPU_writeRegister(unsigned long, unsigned short);
  2201. +unsigned short SPU_readRegister(unsigned long);
  2202. +void SPU_writeDMA(unsigned short);
  2203. +unsigned short SPU_readDMA(void);
  2204. +void SPU_writeDMAMem(unsigned short *, int);
  2205. +void SPU_readDMAMem(unsigned short *, int);
  2206. +void SPU_playADPCMchannel(xa_decode_t *);
  2207. +void SPU_registerCallback(void (CALLBACK *callback)(void));
  2208. +long SPU_configure(void);
  2209. +long SPU_test(void);
  2210. +void SPU_about(void);
  2211. +/*
  2212.  typedef struct {
  2213.     unsigned char PluginName[8];
  2214.     uint32_t PluginVersion;
  2215. @@ -204,98 +193,86 @@
  2216.     xa_decode_t xa;
  2217.     unsigned char *SPUInfo;
  2218.  } SPUFreeze_t;
  2219. -typedef long (CALLBACK* SPUfreeze)(uint32_t, SPUFreeze_t *);
  2220. -typedef void (CALLBACK* SPUasync)(uint32_t);
  2221. -typedef void (CALLBACK* SPUplayCDDAchannel)(short *, int);
  2222. -
  2223. -// SPU function pointers
  2224. -extern SPUconfigure        SPU_configure;
  2225. -extern SPUabout            SPU_about;
  2226. -extern SPUinit             SPU_init;
  2227. -extern SPUshutdown         SPU_shutdown;
  2228. -extern SPUtest             SPU_test;
  2229. -extern SPUopen             SPU_open;
  2230. -extern SPUclose            SPU_close;
  2231. -extern SPUplaySample       SPU_playSample;
  2232. -extern SPUwriteRegister    SPU_writeRegister;
  2233. -extern SPUreadRegister     SPU_readRegister;
  2234. -extern SPUwriteDMA         SPU_writeDMA;
  2235. -extern SPUreadDMA          SPU_readDMA;
  2236. -extern SPUwriteDMAMem      SPU_writeDMAMem;
  2237. -extern SPUreadDMAMem       SPU_readDMAMem;
  2238. -extern SPUplayADPCMchannel SPU_playADPCMchannel;
  2239. -extern SPUfreeze           SPU_freeze;
  2240. -extern SPUregisterCallback SPU_registerCallback;
  2241. -extern SPUasync            SPU_async;
  2242. -extern SPUplayCDDAchannel  SPU_playCDDAchannel;
  2243. +*/
  2244. +/*typedef struct
  2245. +{
  2246. + char          szSPUName[8];
  2247. + unsigned long ulFreezeVersion;
  2248. + unsigned long ulFreezeSize;
  2249. + unsigned char cSPUPort[0x200];
  2250. + unsigned char cSPURam[0x80000];
  2251. + xa_decode_t   xaS;    
  2252. + u32           Addr;
  2253. +} SPUFreeze_t;*/
  2254. +typedef struct
  2255. +{
  2256. + char          szSPUName[8];
  2257. + uint32_t ulFreezeVersion;
  2258. + uint32_t ulFreezeSize;
  2259. + unsigned char cSPUPort[0x200];
  2260. + unsigned char cSPURam[0x80000];
  2261. + xa_decode_t   xaS;    
  2262. + unsigned char *SPUInfo;
  2263. +} SPUFreeze_t;
  2264. +long SPU_freeze(uint32_t, SPUFreeze_t *);
  2265. +void SPU_async(uint32_t);
  2266. +void SPU_playCDDAchannel(short *, int);
  2267.  
  2268.  // PAD Functions
  2269. -typedef long (CALLBACK* PADconfigure)(void);
  2270. -typedef void (CALLBACK* PADabout)(void);
  2271. -typedef long (CALLBACK* PADinit)(long);
  2272. -typedef long (CALLBACK* PADshutdown)(void);   
  2273. -typedef long (CALLBACK* PADtest)(void);       
  2274. -typedef long (CALLBACK* PADclose)(void);
  2275. -typedef long (CALLBACK* PADquery)(void);
  2276. -typedef long (CALLBACK* PADreadPort1)(PadDataS*);
  2277. -typedef long (CALLBACK* PADreadPort2)(PadDataS*);
  2278. -typedef long (CALLBACK* PADkeypressed)(void);
  2279. -typedef unsigned char (CALLBACK* PADstartPoll)(int);
  2280. -typedef unsigned char (CALLBACK* PADpoll)(unsigned char);
  2281. -typedef void (CALLBACK* PADsetSensitive)(int);
  2282. -
  2283. -// PAD function pointers
  2284. -extern PADconfigure        PAD1_configure;
  2285. -extern PADabout            PAD1_about;
  2286. -extern PADinit             PAD1_init;
  2287. -extern PADshutdown         PAD1_shutdown;
  2288. -extern PADtest             PAD1_test;
  2289. -extern PADopen             PAD1_open;
  2290. -extern PADclose            PAD1_close;
  2291. -extern PADquery            PAD1_query;
  2292. -extern PADreadPort1        PAD1_readPort1;
  2293. -extern PADkeypressed       PAD1_keypressed;
  2294. -extern PADstartPoll        PAD1_startPoll;
  2295. -extern PADpoll             PAD1_poll;
  2296. -extern PADsetSensitive     PAD1_setSensitive;
  2297. -
  2298. -extern PADconfigure        PAD2_configure;
  2299. -extern PADabout            PAD2_about;
  2300. -extern PADinit             PAD2_init;
  2301. -extern PADshutdown         PAD2_shutdown;
  2302. -extern PADtest             PAD2_test;
  2303. -extern PADopen             PAD2_open;
  2304. -extern PADclose            PAD2_close;
  2305. -extern PADquery            PAD2_query;
  2306. -extern PADreadPort2        PAD2_readPort2;
  2307. -extern PADkeypressed       PAD2_keypressed;
  2308. -extern PADstartPoll        PAD2_startPoll;
  2309. -extern PADpoll             PAD2_poll;
  2310. -extern PADsetSensitive     PAD2_setSensitive;
  2311. +long PAD1_configure(void);
  2312. +void PAD1_about(void);
  2313. +long PAD1_init(long);
  2314. +long PAD1_shutdown(void)
  2315. +long PAD1_test(void);     
  2316. +long PAD1_close(void);
  2317. +long PAD1_query(void);
  2318. +long PAD1_readPort1(PadDataS*);
  2319. +long PAD1_readPort2(PadDataS*);
  2320. +long PAD1_keypressed(void);
  2321. +unsigned char PAD1_startPoll(int);
  2322. +unsigned char PAD1_poll(unsigned char);
  2323. +void PAD1_setSensitive(int);
  2324. +long PAD1_open(void);
  2325. +
  2326. +// PAD Functions
  2327. +long PAD2_configure(void);
  2328. +void PAD2_about(void);
  2329. +long PAD2_init(long);
  2330. +long PAD2_shutdown(void)
  2331. +long PAD2_test(void);     
  2332. +long PAD2_close(void);
  2333. +long PAD2_query(void);
  2334. +long PAD2_readPort1(PadDataS*);
  2335. +long PAD2_readPort2(PadDataS*);
  2336. +long PAD2_keypressed(void);
  2337. +unsigned char PAD2_startPoll(int);
  2338. +unsigned char PAD2_poll(unsigned char);
  2339. +void PAD2_setSensitive(int);
  2340. +long PAD2_open(void);
  2341.  
  2342.  // NET Functions
  2343. -typedef long (CALLBACK* NETinit)(void);
  2344. -typedef long (CALLBACK* NETshutdown)(void);
  2345. -typedef long (CALLBACK* NETclose)(void);
  2346. -typedef long (CALLBACK* NETconfigure)(void);
  2347. -typedef long (CALLBACK* NETtest)(void);
  2348. -typedef void (CALLBACK* NETabout)(void);
  2349. -typedef void (CALLBACK* NETpause)(void);
  2350. -typedef void (CALLBACK* NETresume)(void);
  2351. -typedef long (CALLBACK* NETqueryPlayer)(void);
  2352. -typedef long (CALLBACK* NETsendData)(void *, int, int);
  2353. -typedef long (CALLBACK* NETrecvData)(void *, int, int);
  2354. -typedef long (CALLBACK* NETsendPadData)(void *, int);
  2355. -typedef long (CALLBACK* NETrecvPadData)(void *, int);
  2356. +long NET_init(void);
  2357. +long NET_shutdown(void);
  2358. +long NET_close(void);
  2359. +long NET_configure(void);
  2360. +long NET_test(void);
  2361. +void NET_about(void);
  2362. +void NET_pause(void);
  2363. +void NET_resume(void);
  2364. +long NET_queryPlayer(void);
  2365. +long NET_sendData(void *, int, int);
  2366. +long NET_recvData(void *, int, int);
  2367. +long NET_sendPadData(void *, int);
  2368. +long NET_recvPadData(void *, int);
  2369.  
  2370.  typedef struct {
  2371.     char EmuName[32];
  2372.     char CdromID[9];    // ie. 'SCPH12345', no \0 trailing character
  2373.     char CdromLabel[11];
  2374.     void *psxMem;
  2375. -   GPUshowScreenPic GPU_showScreenPic;
  2376. -   GPUdisplayText GPU_displayText;
  2377. -   PADsetSensitive PAD_setSensitive;
  2378. +   //GPUshowScreenPic GPU_showScreenPic;
  2379. +   //GPUdisplayText GPU_displayText;
  2380. +   //PADsetSensitive PAD_setSensitive;
  2381.     char GPUpath[256];  // paths must be absolute
  2382.     char SPUpath[256];
  2383.     char CDRpath[256];
  2384. @@ -305,101 +282,50 @@
  2385.     char Unused[1024];
  2386.  } netInfo;
  2387.  
  2388. -typedef long (CALLBACK* NETsetInfo)(netInfo *);
  2389. -typedef long (CALLBACK* NETkeypressed)(int);
  2390. -
  2391. -// NET function pointers
  2392. -extern NETinit               NET_init;
  2393. -extern NETshutdown           NET_shutdown;
  2394. -extern NETopen               NET_open;
  2395. -extern NETclose              NET_close;
  2396. -extern NETtest               NET_test;
  2397. -extern NETconfigure          NET_configure;
  2398. -extern NETabout              NET_about;
  2399. -extern NETpause              NET_pause;
  2400. -extern NETresume             NET_resume;
  2401. -extern NETqueryPlayer        NET_queryPlayer;
  2402. -extern NETsendData           NET_sendData;
  2403. -extern NETrecvData           NET_recvData;
  2404. -extern NETsendPadData        NET_sendPadData;
  2405. -extern NETrecvPadData        NET_recvPadData;
  2406. -extern NETsetInfo            NET_setInfo;
  2407. -extern NETkeypressed         NET_keypressed;
  2408. +void NET_setInfo(netInfo *);
  2409. +void NET_keypressed(int);
  2410.  
  2411.  #ifdef ENABLE_SIO1API
  2412.  
  2413.  // SIO1 Functions (link cable)
  2414. -typedef long (CALLBACK* SIO1init)(void);
  2415. -typedef long (CALLBACK* SIO1shutdown)(void);
  2416. -typedef long (CALLBACK* SIO1close)(void);
  2417. -typedef long (CALLBACK* SIO1configure)(void);
  2418. -typedef long (CALLBACK* SIO1test)(void);
  2419. -typedef void (CALLBACK* SIO1about)(void);
  2420. -typedef void (CALLBACK* SIO1pause)(void);
  2421. -typedef void (CALLBACK* SIO1resume)(void);
  2422. -typedef long (CALLBACK* SIO1keypressed)(int);
  2423. -typedef void (CALLBACK* SIO1writeData8)(unsigned char);
  2424. -typedef void (CALLBACK* SIO1writeData16)(unsigned short);
  2425. -typedef void (CALLBACK* SIO1writeData32)(unsigned long);
  2426. -typedef void (CALLBACK* SIO1writeStat16)(unsigned short);
  2427. -typedef void (CALLBACK* SIO1writeStat32)(unsigned long);
  2428. -typedef void (CALLBACK* SIO1writeMode16)(unsigned short);
  2429. -typedef void (CALLBACK* SIO1writeMode32)(unsigned long);
  2430. -typedef void (CALLBACK* SIO1writeCtrl16)(unsigned short);
  2431. -typedef void (CALLBACK* SIO1writeCtrl32)(unsigned long);
  2432. -typedef void (CALLBACK* SIO1writeBaud16)(unsigned short);
  2433. -typedef void (CALLBACK* SIO1writeBaud32)(unsigned long);
  2434. -typedef unsigned char (CALLBACK* SIO1readData8)(void);
  2435. -typedef unsigned short (CALLBACK* SIO1readData16)(void);
  2436. -typedef unsigned long (CALLBACK* SIO1readData32)(void);
  2437. -typedef unsigned short (CALLBACK* SIO1readStat16)(void);
  2438. -typedef unsigned long (CALLBACK* SIO1readStat32)(void);
  2439. -typedef unsigned short (CALLBACK* SIO1readMode16)(void);
  2440. -typedef unsigned long (CALLBACK* SIO1readMode32)(void);
  2441. -typedef unsigned short (CALLBACK* SIO1readCtrl16)(void);
  2442. -typedef unsigned long (CALLBACK* SIO1readCtrl32)(void);
  2443. -typedef unsigned short (CALLBACK* SIO1readBaud16)(void);
  2444. -typedef unsigned long (CALLBACK* SIO1readBaud32)(void);
  2445. -typedef void (CALLBACK* SIO1registerCallback)(void (CALLBACK *callback)(void));
  2446. -
  2447. -// SIO1 function pointers
  2448. -extern SIO1init               SIO1_init;
  2449. -extern SIO1shutdown           SIO1_shutdown;
  2450. -extern SIO1open               SIO1_open;
  2451. -extern SIO1close              SIO1_close;
  2452. -extern SIO1test               SIO1_test;
  2453. -extern SIO1configure          SIO1_configure;
  2454. -extern SIO1about              SIO1_about;
  2455. -extern SIO1pause              SIO1_pause;
  2456. -extern SIO1resume             SIO1_resume;
  2457. -extern SIO1keypressed         SIO1_keypressed;
  2458. -extern SIO1writeData8         SIO1_writeData8;
  2459. -extern SIO1writeData16        SIO1_writeData16;
  2460. -extern SIO1writeData32        SIO1_writeData32;
  2461. -extern SIO1writeStat16        SIO1_writeStat16;
  2462. -extern SIO1writeStat32        SIO1_writeStat32;
  2463. -extern SIO1writeMode16        SIO1_writeMode16;
  2464. -extern SIO1writeMode32        SIO1_writeMode32;
  2465. -extern SIO1writeCtrl16        SIO1_writeCtrl16;
  2466. -extern SIO1writeCtrl32        SIO1_writeCtrl32;
  2467. -extern SIO1writeBaud16        SIO1_writeBaud16;
  2468. -extern SIO1writeBaud32        SIO1_writeBaud32;
  2469. -extern SIO1readData8          SIO1_readData8;
  2470. -extern SIO1readData16         SIO1_readData16;
  2471. -extern SIO1readData32         SIO1_readData32;
  2472. -extern SIO1readStat16         SIO1_readStat16;
  2473. -extern SIO1readStat32         SIO1_readStat32;
  2474. -extern SIO1readMode16         SIO1_readMode16;
  2475. -extern SIO1readMode32         SIO1_readMode32;
  2476. -extern SIO1readCtrl16         SIO1_readCtrl16;
  2477. -extern SIO1readCtrl32         SIO1_readCtrl32;
  2478. -extern SIO1readBaud16         SIO1_readBaud16;
  2479. -extern SIO1readBaud32         SIO1_readBaud32;
  2480. -extern SIO1registerCallback   SIO1_registerCallback;
  2481. +long SIO1_init(void);
  2482. +long SIO1_shutdown(void);
  2483. +long SIO1_close(void);
  2484. +long SIO1_configure(void);
  2485. +long SIO1_test(void);
  2486. +void SIO1_about(void);
  2487. +void SIO1_pause(void);
  2488. +void SIO1_resume(void);
  2489. +long SIO1_keypressed(int);
  2490. +void SIO1_writeData8(unsigned char);
  2491. +void SIO1_writeData16(unsigned short);
  2492. +void SIO1_writeData32(unsigned long);
  2493. +void SIO1_writeStat16(unsigned short);
  2494. +void SIO1_writeStat32(unsigned long);
  2495. +void SIO1_writeMode16(unsigned short);
  2496. +void SIO1_writeMode32(unsigned long);
  2497. +void SIO1_writeCtrl16(unsigned short);
  2498. +void SIO1_writeCtrl32(unsigned long);
  2499. +void SIO1_writeBaud16(unsigned short);
  2500. +void SIO1_writeBaud32(unsigned long);
  2501. +unsigned char SIO1_readData8(void);
  2502. +unsigned short SIO1_readData16(void);
  2503. +unsigned long SIO1_readData32(void);
  2504. +unsigned short SIO1_readStat16(void);
  2505. +unsigned long SIO1_readStat32(void);
  2506. +unsigned short SIO1_readMode16(void);
  2507. +unsigned long SIO1_readMode32(void);
  2508. +unsigned short SIO1_readCtrl16(void);
  2509. +unsigned long SIO1_readCtrl32(void);
  2510. +unsigned short SIO1_readBaud16(void);
  2511. +unsigned long SIO1_readBaud32(void);
  2512. +void SIO1_registerCallback(void (CALLBACK *callback)(void));
  2513.  
  2514.  #endif
  2515.  
  2516.  void CALLBACK clearDynarec(void);
  2517. +
  2518. +void CALLBACK GPU_busy( int ticks );
  2519.  
  2520.  void SetIsoFile(const char *filename);
  2521.  const char *GetIsoFile(void);
  2522. Only in pcsx_rearmed/libpcsxcore: ppc
  2523. diff -u -r pcsx_rearmed/libpcsxcore/psxbios.c libpsx/project/jni/libpcsxcore/psxbios.c
  2524. --- pcsx_rearmed/libpcsxcore/psxbios.c  Tue Jan 10 12:44:37 2012
  2525. +++ libpsx/project/jni/libpcsxcore/psxbios.c    Mon Jan  9 18:42:14 2012
  2526. @@ -2673,7 +2673,7 @@
  2527.                 PAD1_poll(0);
  2528.                 data = PAD1_poll(0) << 8;
  2529.                 data |= PAD1_poll(0);
  2530. -
  2531. +#if 0
  2532.                 if (NET_sendPadData(&data, 2) == -1)
  2533.                     netError();
  2534.  
  2535. @@ -2681,11 +2681,12 @@
  2536.                     netError();
  2537.                 if (NET_recvPadData(&((u16*)buf)[1], 2) == -1)
  2538.                     netError();
  2539. +#endif
  2540.             }
  2541.         }
  2542.         if (Config.UseNet && pad_buf1 != NULL && pad_buf2 != NULL) {
  2543.             psxBios_PADpoll(1);
  2544. -
  2545. +#if 0
  2546.             if (NET_sendPadData(pad_buf1, i) == -1)
  2547.                 netError();
  2548.  
  2549. @@ -2693,6 +2694,7 @@
  2550.                 netError();
  2551.             if (NET_recvPadData(pad_buf2, 2) == -1)
  2552.                 netError();
  2553. +#endif
  2554.         } else {
  2555.             if (pad_buf1) {
  2556.                 psxBios_PADpoll(1);
  2557. diff -u -r pcsx_rearmed/libpcsxcore/psxcommon.c libpsx/project/jni/libpcsxcore/psxcommon.c
  2558. --- pcsx_rearmed/libpcsxcore/psxcommon.c    Tue Jan 10 12:46:33 2012
  2559. +++ libpsx/project/jni/libpcsxcore/psxcommon.c  Mon Jan  9 18:42:14 2012
  2560. @@ -26,6 +26,9 @@
  2561.  
  2562.  PcsxConfig Config;
  2563.  boolean NetOpened = FALSE;
  2564. +unsigned int bias_cycle = 3;
  2565. +unsigned int bias_vsync = 2;
  2566. +int cdrom_precise = 0;
  2567.  
  2568.  int Log = 0;
  2569.  FILE *emuLog = NULL;
  2570. @@ -57,7 +60,7 @@
  2571.         SysUpdate();
  2572.  
  2573.     ApplyCheats();
  2574. -   pl_frame_limit();
  2575. +   //pl_frame_limit();
  2576.  }
  2577.  
  2578.  void __Log(char *fmt, ...) {
  2579. diff -u -r pcsx_rearmed/libpcsxcore/psxcommon.h libpsx/project/jni/libpcsxcore/psxcommon.h
  2580. --- pcsx_rearmed/libpcsxcore/psxcommon.h    Tue Jan 10 12:44:37 2012
  2581. +++ libpsx/project/jni/libpcsxcore/psxcommon.h  Mon Jan  9 18:42:14 2012
  2582. @@ -71,7 +71,9 @@
  2583.  #include "system.h"
  2584.  #include "debug.h"
  2585.  
  2586. -#if defined (__LINUX__) || defined (__MACOSX__)
  2587. +#include "gpuAPI/gpuAPI.h"
  2588. +
  2589. +#if defined (__LINUX__) || defined (__MACOSX__) || defined(ANDROID) || defined(IPHONE)
  2590.  #define strnicmp strncasecmp
  2591.  #endif
  2592.  #define __inline inline
  2593. @@ -135,7 +137,11 @@
  2594.  } PcsxConfig;
  2595.  
  2596.  extern PcsxConfig Config;
  2597. +extern int psx4all_emulating;
  2598.  extern boolean NetOpened;
  2599. +extern unsigned int bias_cycle;
  2600. +extern unsigned int bias_vsync;
  2601. +extern int cdrom_precise;
  2602.  
  2603.  #define gzfreeze(ptr, size) { \
  2604.     if (Mode == 1) gzwrite(f, ptr, size); \
  2605. @@ -145,7 +151,9 @@
  2606.  // Make the timing events trigger faster as we are currently assuming everything
  2607.  // takes one cycle, which is not the case on real hardware.
  2608.  // FIXME: Count the proper cycle and get rid of this
  2609. -#define BIAS   2
  2610. +#define BIAS_CYCLE      bias_cycle
  2611. +#define BIAS_VSYNC      bias_vsync
  2612. +#define BIAS             bias_cycle
  2613.  #define PSXCLK 33868800    /* 33.8688 MHz */
  2614.  
  2615.  enum {
  2616. diff -u -r pcsx_rearmed/libpcsxcore/psxhw.c libpsx/project/jni/libpcsxcore/psxhw.c
  2617. --- pcsx_rearmed/libpcsxcore/psxhw.c    Tue Jan 10 12:44:37 2012
  2618. +++ libpsx/project/jni/libpcsxcore/psxhw.c  Mon Jan  9 18:42:14 2012
  2619. @@ -728,13 +728,13 @@
  2620.             psxRcntWtarget(2, value & 0xffff); return;
  2621.  
  2622.         default:
  2623. -           // Dukes of Hazard 2 - car engine noise
  2624. -           if (add>=0x1f801c00 && add<0x1f801e00) {
  2625. -               SPU_writeRegister(add, value&0xffff);
  2626. -               SPU_writeRegister(add + 2, value>>16);
  2627. -               return;
  2628. -           }
  2629. -
  2630. +           // Dukes of Hazard 2 - car engine noise
  2631. +           if (add>=0x1f801c00 && add<0x1f801e00) {
  2632. +               SPU_writeRegister(add, value&0xffff);
  2633. +               SPU_writeRegister(add + 2, value>>16);
  2634. +               return;
  2635. +           }
  2636. +
  2637.             psxHu32ref(add) = SWAPu32(value);
  2638.  #ifdef PSXHW_LOG
  2639.             PSXHW_LOG("*Unknown 32bit write at address %x value %x\n", add, value);
  2640. diff -u -r pcsx_rearmed/libpcsxcore/psxmem.c libpsx/project/jni/libpcsxcore/psxmem.c
  2641. --- pcsx_rearmed/libpcsxcore/psxmem.c   Tue Jan 10 11:06:59 2012
  2642. +++ libpsx/project/jni/libpcsxcore/psxmem.c Mon Jan  9 18:42:14 2012
  2643. @@ -67,17 +67,20 @@
  2644.     memset(psxMemRLUT, 0, 0x10000 * sizeof(void *));
  2645.     memset(psxMemWLUT, 0, 0x10000 * sizeof(void *));
  2646.  
  2647. -   psxM = mmap((void *)0x80000000, 0x00220000,
  2648. -       PROT_WRITE | PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
  2649. +  psxM = mmap((void *)0x80000000, 0x00220000, PROT_WRITE | PROT_READ, MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
  2650. +  //(s8 *)malloc(0x00220000);
  2651.  
  2652.     psxP = &psxM[0x200000];
  2653.     psxH = &psxM[0x210000];
  2654.  
  2655. -   psxR = mmap((void *)0x9fc00000, 0x80000,
  2656. -       PROT_WRITE | PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
  2657. -
  2658. +   psxR = mmap((void *)0x9fc00000, 0x80000, PROT_WRITE | PROT_READ, MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
  2659. +  //(s8 *)malloc(0x80000);
  2660. +  
  2661.     if (psxMemRLUT == NULL || psxMemWLUT == NULL ||
  2662. -       psxM != (void *)0x80000000 || psxR != (void *)0x9fc00000 ||
  2663. +       //psxM == NULL ||
  2664. +       //psxR == NULL ||
  2665. +       psxM != (void *)0x80000000 ||
  2666. +       psxR != (void *)0x9fc00000 ||
  2667.         psxP == NULL || psxH == NULL) {
  2668.         SysMessage(_("Error allocating memory!"));
  2669.         return -1;
  2670. @@ -133,9 +136,13 @@
  2671.  }
  2672.  
  2673.  void psxMemShutdown() {
  2674. +  //free(psxM);
  2675. +  //free(psxR);  
  2676.     munmap(psxM, 0x00220000);
  2677.     munmap(psxR, 0x80000);
  2678.  
  2679. +  mmap((void *)0x80000000, 0x00220000, PROT_WRITE | PROT_READ | PROT_EXEC, MAP_FIXED | MAP_SHARED | MAP_ANONYMOUS, -1, 0);
  2680. +  
  2681.     free(psxMemRLUT);
  2682.     free(psxMemWLUT);
  2683.  }
  2684. diff -u -r pcsx_rearmed/libpcsxcore/r3000a.c libpsx/project/jni/libpcsxcore/r3000a.c
  2685. --- pcsx_rearmed/libpcsxcore/r3000a.c   Tue Jan 10 12:44:37 2012
  2686. +++ libpsx/project/jni/libpcsxcore/r3000a.c Mon Jan  9 18:42:14 2012
  2687. @@ -26,8 +26,12 @@
  2688.  #include "mdec.h"
  2689.  #include "gte.h"
  2690.  
  2691. +#ifdef ANDROID
  2692. +int check_paused();
  2693. +#endif
  2694. +
  2695.  R3000Acpu *psxCpu = NULL;
  2696. -psxRegisters psxRegs;
  2697. +//psxRegisters psxRegs;
  2698.  
  2699.  int psxInit() {
  2700.     SysPrintf(_("Running PCSX Version %s (%s).\n"), PACKAGE_VERSION, __DATE__);
  2701. @@ -226,7 +230,7 @@
  2702.  }
  2703.  
  2704.  void psxExecuteBios() {
  2705. -   while (psxRegs.pc != 0x80030000)
  2706. +   while (psxRegs.pc != 0x80030000 && psx4all_emulating)
  2707.         psxCpu->ExecuteBlock();
  2708.  }
  2709.  
  2710. diff -u -r pcsx_rearmed/libpcsxcore/r3000a.h libpsx/project/jni/libpcsxcore/r3000a.h
  2711. --- pcsx_rearmed/libpcsxcore/r3000a.h   Tue Jan 10 10:53:14 2012
  2712. +++ libpsx/project/jni/libpcsxcore/r3000a.h Mon Jan  9 18:42:14 2012
  2713. @@ -40,9 +40,11 @@
  2714.  
  2715.  extern R3000Acpu *psxCpu;
  2716.  extern R3000Acpu psxInt;
  2717. -#if (defined(__x86_64__) || defined(__i386__) || defined(__sh__) || defined(__ppc__) || defined(__arm__)) && !defined(NOPSXREC)
  2718. +#if ((defined(__x86_64__) || defined(__i386__) || defined(__sh__) || defined(__ppc__)) && !defined(NOPSXREC)) || defined(PSXREC)
  2719.  extern R3000Acpu psxRec;
  2720. +#ifndef PSXREC
  2721.  #define PSXREC
  2722. +#endif
  2723.  #endif
  2724.  
  2725.  typedef union {
  2726. diff -u -r pcsx_rearmed/libpcsxcore/sio.c libpsx/project/jni/libpcsxcore/sio.c
  2727. --- pcsx_rearmed/libpcsxcore/sio.c  Tue Jan 10 12:44:37 2012
  2728. +++ libpsx/project/jni/libpcsxcore/sio.c    Mon Jan  9 18:42:14 2012
  2729. @@ -240,6 +240,7 @@
  2730.                     }
  2731.                     bufcount+= 3;
  2732.  
  2733. +#if 0
  2734.                     if (NET_sendPadData(buf, bufcount) == -1)
  2735.                         netError();
  2736.  
  2737. @@ -247,6 +248,7 @@
  2738.                         netError();
  2739.                     if (NET_recvPadData(buf + 128, 2) == -1)
  2740.                         netError();
  2741. +#endif
  2742.                 } else {
  2743.                     memcpy(buf, buf + 128, 32);
  2744.                 }
  2745. @@ -344,13 +346,15 @@
  2746.  }
  2747.  
  2748.  void netError() {
  2749. -   ClosePlugins();
  2750. +#if 0
  2751. +   ReleasePlugins();
  2752.     SysMessage(_("Connection closed!\n"));
  2753.  
  2754.     CdromId[0] = '\0';
  2755.     CdromLabel[0] = '\0';
  2756.  
  2757.     SysRunGui();
  2758. +#endif
  2759.  }
  2760.  
  2761.  void sioInterrupt() {
  2762. Only in libpsx/project/jni/libpcsxcore: sound
  2763. Only in libpsx/project/jni/libpcsxcore: video
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement