Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Only in libpsx/project/jni/libpcsxcore: LnxMain.c
- Only in libpsx/project/jni/libpcsxcore: Makefile
- Only in libpsx/project/jni/libpcsxcore: Makefile.am
- Only in libpsx/project/jni/libpcsxcore: Makefile.in
- Only in libpsx/project/jni/libpcsxcore: android
- diff -u -r pcsx_rearmed/libpcsxcore/cdriso.c libpsx/project/jni/libpcsxcore/cdriso.c
- --- pcsx_rearmed/libpcsxcore/cdriso.c Tue Jan 10 12:44:37 2012
- +++ libpsx/project/jni/libpcsxcore/cdriso.c Mon Jan 9 18:42:13 2012
- @@ -32,6 +32,8 @@
- #include <sys/time.h>
- #endif
- +#include <zlib.h>
- +
- static FILE *cdHandle = NULL;
- static FILE *cddaHandle = NULL;
- static FILE *subHandle = NULL;
- @@ -39,22 +41,36 @@
- static boolean subChanMixed = FALSE;
- static boolean subChanRaw = FALSE;
- -static unsigned char cdbuffer[DATA_SIZE];
- +static unsigned char cdbuffer[CD_FRAMESIZE_RAW];
- +static unsigned char* cdlastbuffer = cdbuffer;
- static unsigned char subbuffer[SUB_FRAMESIZE];
- static unsigned char sndbuffer[CD_FRAMESIZE_RAW * 10];
- +typedef enum {
- + EBOOT,
- + ZISO,
- + ZNXISO,
- + NONE
- +} cd_compression_type;
- +
- +static cd_compression_type cd_compression = NONE;
- +
- #define CDDA_FRAMETIME (1000 * (sizeof(sndbuffer) / CD_FRAMESIZE_RAW) / 75)
- +#define MODE1_DATA_SIZE 2048
- +
- +static boolean isMode1ISO = FALSE;
- +
- #ifdef _WIN32
- static HANDLE threadid;
- #else
- static pthread_t threadid;
- #endif
- static unsigned int initial_offset = 0;
- -static boolean playing = FALSE;
- +static volatile boolean playing = FALSE;
- static boolean cddaBigEndian = FALSE;
- -static unsigned int cddaCurOffset = 0;
- +static volatile unsigned int cddaCurOffset = 0;
- static unsigned int cddaStartOffset;
- char* CALLBACK CDR__getDriveLetter(void);
- @@ -67,9 +83,9 @@
- extern void *hCDRDriver;
- struct trackinfo {
- - enum {DATA, CDDA} type;
- - char start[3]; // MSF-format
- - char length[3]; // MSF-format
- + enum {DATA=1, CDDA} type;
- + u8 start[3]; // MSF-format
- + u8 length[3]; // MSF-format
- FILE *handle; // for multi-track images CDDA
- };
- @@ -79,11 +95,11 @@
- static struct trackinfo ti[MAXTRACKS];
- // get a sector from a msf-array
- -static unsigned int msf2sec(char *msf) {
- +unsigned int msf2sec(char *msf) {
- return ((msf[0] * 60 + msf[1]) * 75) + msf[2];
- }
- -static void sec2msf(unsigned int s, char *msf) {
- +void sec2msf(unsigned int s, char *msf) {
- msf[0] = s / 75 / 60;
- s = s - msf[0] * 75 * 60;
- msf[1] = s / 75;
- @@ -135,6 +151,91 @@
- }
- #endif
- +u8* Ztable = NULL;
- +
- +static cd_compression_type GetCompressionType(const char *isofile)
- +{
- + s32 len = strlen(isofile);
- +
- + if (len >= 2)
- + {
- + if (!strncasecmp(isofile+(len-2), ".z", 2))
- + {
- + return ZISO;
- + }
- + }
- +
- + if (len >= 4)
- + {
- + if (!strncasecmp(isofile+(len-4), ".znx", 4))
- + {
- + return ZNXISO;
- + }
- +
- + if (!strncasecmp(isofile+(len-4), ".pbp", 4))
- + {
- + return EBOOT;
- + }
- + }
- +
- + return NONE;
- +}
- +
- +typedef struct
- +{
- + unsigned int offset;
- + unsigned int length;
- + unsigned int dummy[6];
- +} EbootIsoIndex;
- +
- +typedef struct
- +{
- + unsigned int off, len;
- +} eboot_entry;
- +
- +eboot_entry *eboot_table = NULL;
- +u8 eboot_buffer[0x9300];
- +u8 eboot_compressed_buffer[0x9300];
- +int eboot_buffer_index = -1;
- +int eboot_data_start;
- +
- +//copy of zlib "uncompress", but setting window_size to -15 to comply with eboot format
- +int uncompress_m15 (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)
- +{
- + z_stream stream;
- + int err;
- +
- + stream.next_in = (Bytef*)source;
- + stream.avail_in = (uInt)sourceLen;
- + /* Check for source > 64K on 16-bit machine: */
- + if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
- +
- + stream.next_out = dest;
- + stream.avail_out = (uInt)*destLen;
- + if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
- +
- + stream.zalloc = (alloc_func)0;
- + stream.zfree = (free_func)0;
- +
- + //err = inflateInit(&stream);
- + err = inflateInit2(&stream, -15);
- + if (err != Z_OK) return err;
- +
- + err = inflate(&stream, Z_FINISH);
- + if (err != Z_STREAM_END) {
- + inflateEnd(&stream);
- + return err == Z_OK ? Z_BUF_ERROR : err;
- + }
- + *destLen = stream.total_out;
- +
- + err = inflateEnd(&stream);
- + return err;
- +}
- +
- +u16 *iso_play_cdbuf;
- +u16 iso_play_bufptr;
- +
- +
- // this thread plays audio data
- #ifdef _WIN32
- static void playthread(void *param)
- @@ -144,9 +245,13 @@
- {
- long d, t, i, s;
- unsigned char tmp;
- + int sec;
- t = GetTickCount();
- + iso_play_cdbuf = 0;
- + iso_play_bufptr = 0;
- +
- while (playing) {
- d = t - (long)GetTickCount();
- if (d <= 0) {
- @@ -718,7 +823,9 @@
- // This function is invoked by the front-end when opening an ISO
- // file for playback
- -static long CALLBACK ISOopen(void) {
- +long CALLBACK CDR_open(void) {
- + u32 modeTest = 0;
- +
- if (cdHandle != NULL) {
- return 0; // it's already open
- }
- @@ -733,23 +840,104 @@
- cddaBigEndian = FALSE;
- subChanMixed = FALSE;
- subChanRaw = FALSE;
- + isMode1ISO = FALSE;
- +
- + cd_compression = GetCompressionType(GetIsoFile());
- +
- + if (cd_compression == ZISO || cd_compression == ZNXISO)
- + {
- + long filesize;
- + FILE *f;
- + char table[1024];
- +
- + sprintf(table, "%s.table", GetIsoFile());
- + f = fopen(table, "rb");
- + if( f == NULL )
- + {
- + fclose(cdHandle);
- + cdHandle = NULL;
- + return -1;
- + }
- +
- + fseek(f, 0, SEEK_END);
- + filesize = ftell(f);
- + fseek(f, 0, SEEK_SET);
- + Ztable = (u8*)malloc(filesize);
- + if (Ztable == NULL)
- + {
- + fclose(f);
- + fclose(cdHandle);
- + cdHandle = NULL;
- + return -1;
- + }
- +
- + fread(Ztable, 1, filesize, f);
- + fclose(f);
- + }
- +
- + if(cd_compression == EBOOT)
- + {
- + int i;
- + unsigned int header[10];
- + char buffer[16];
- + int n_entries = 0x100000 - 0x4000;
- + eboot_table = (eboot_entry*)malloc(n_entries * sizeof(eboot_entry));
- +
- + //read header
- + fread(header, 4, 10, cdHandle);
- +
- + //check valid psx eboot
- + fseek(cdHandle, header[9], SEEK_SET);
- + fread(buffer, 1, 8, cdHandle);
- + if(strncmp(buffer, "PSISOIMG", 8) != 0)
- + {
- + fclose(cdHandle);
- + return -1;
- + }
- +
- + //read index
- + fseek(cdHandle, header[9] + 0x4000, SEEK_SET);
- + for(i=0; i<n_entries; i++)
- + {
- + EbootIsoIndex idx;
- + fread(&idx, sizeof(EbootIsoIndex), 1, cdHandle);
- +
- + eboot_table[i].len = idx.length;
- + eboot_table[i].off = idx.offset;
- + }
- - if (parsecue(GetIsoFile()) == 0) {
- - SysPrintf("[+cue]");
- - }
- - else if (parsetoc(GetIsoFile()) == 0) {
- - SysPrintf("[+toc]");
- + //set image start
- + eboot_data_start = header[9] + 0x100000;
- }
- - else if (parseccd(GetIsoFile()) == 0) {
- +
- + if (parseccd(GetIsoFile()) == 0) {
- SysPrintf("[+ccd]");
- }
- else if (parsemds(GetIsoFile()) == 0) {
- SysPrintf("[+mds]");
- }
- + else if (parsecue(GetIsoFile()) == 0) {
- + SysPrintf("[+cue]");
- + }
- + else if (parsetoc(GetIsoFile()) == 0) {
- + SysPrintf("[+toc]");
- + } else {
- + //guess whether it is mode1/2048
- + fseek(cdHandle, 0, SEEK_END);
- + if(ftell(cdHandle) % 2048 == 0) {
- + fseek(cdHandle, 0, SEEK_SET);
- + fread(&modeTest, 4, 1, cdHandle);
- + if(modeTest!=0xffffff00) isMode1ISO = TRUE;
- + }
- + fseek(cdHandle, 0, SEEK_SET);
- + }
- +
- +
- if (!subChanMixed && opensubfile(GetIsoFile()) == 0) {
- SysPrintf("[+sub]");
- }
- +
- if (opensbifile(GetIsoFile()) == 0) {
- SysPrintf("[+sbi]");
- }
- @@ -767,7 +955,7 @@
- return 0;
- }
- -static long CALLBACK ISOclose(void) {
- +long CALLBACK CDR_close(void) {
- int i;
- if (cdHandle != NULL) {
- @@ -778,6 +966,10 @@
- fclose(subHandle);
- subHandle = NULL;
- }
- +
- + if(Ztable) { free(Ztable); Ztable = NULL; }
- + if(eboot_table) { free(eboot_table); eboot_table = NULL; }
- +
- stopCDDA();
- cddaHandle = NULL;
- @@ -793,15 +985,15 @@
- return 0;
- }
- -static long CALLBACK ISOinit(void) {
- +long CDR_init(void) {
- assert(cdHandle == NULL);
- assert(subHandle == NULL);
- return 0; // do nothing
- }
- -static long CALLBACK ISOshutdown(void) {
- - ISOclose();
- +long CDR_shutdown(void) {
- + CDR_close();
- return 0;
- }
- @@ -809,7 +1001,7 @@
- // buffer:
- // byte 0 - start track
- // byte 1 - end track
- -static long CALLBACK ISOgetTN(unsigned char *buffer) {
- +long CALLBACK CDR_getTN(unsigned char *buffer) {
- buffer[0] = 1;
- if (numtracks > 0) {
- @@ -827,7 +1019,7 @@
- // byte 0 - frame
- // byte 1 - second
- // byte 2 - minute
- -static long CALLBACK ISOgetTD(unsigned char track, unsigned char *buffer) {
- +long CALLBACK CDR_getTD(unsigned char track, unsigned char *buffer) {
- if (track == 0) {
- // CD length according pcsxr-svn (done a bit different here)
- unsigned int sect;
- @@ -871,42 +1063,131 @@
- // read track
- // time: byte 0 - minute; byte 1 - second; byte 2 - frame
- // uses bcd format
- -static long CALLBACK ISOreadTrack(unsigned char *time) {
- +long CALLBACK CDR_readTrack(unsigned char *time) {
- if (cdHandle == NULL) {
- return -1;
- }
- - if (subChanMixed) {
- + if(cd_compression == EBOOT) //PSP EBOOT - read in 16 sectors chunks
- + {
- + u32 curr_sector = MSF2SECT(btoi(time[0]), btoi(time[1]), btoi(time[2]));
- + int index = curr_sector / 16;
- + if(index != eboot_buffer_index)
- + {
- + eboot_entry entry = eboot_table[index];
- + fseek(cdHandle, eboot_data_start + entry.off, SEEK_SET);
- +
- + if(entry.len == 0x9300) //not compressed, just read
- + {
- + fread(eboot_buffer, 1, 0x9300, cdHandle);
- + }
- + else //decompress
- + {
- + uLongf destLen = 0x9300;
- + fread(eboot_compressed_buffer, 1, entry.len, cdHandle);
- + uncompress_m15(eboot_buffer, &destLen, eboot_compressed_buffer, entry.len);
- + }
- +
- + eboot_buffer_index = index;
- + }
- +
- + cdlastbuffer = eboot_buffer + (curr_sector % 16)*CD_FRAMESIZE_RAW;
- + }
- + else if (cd_compression == NONE && subChanMixed)
- + {
- fseek(cdHandle, MSF2SECT(btoi(time[0]), btoi(time[1]), btoi(time[2])) * (CD_FRAMESIZE_RAW + SUB_FRAMESIZE) + 12, SEEK_SET);
- fread(cdbuffer, 1, DATA_SIZE, cdHandle);
- fread(subbuffer, 1, SUB_FRAMESIZE, cdHandle);
- if (subChanRaw) DecodeRawSubData();
- + cdlastbuffer = cdbuffer;
- }
- - else {
- - fseek(cdHandle, MSF2SECT(btoi(time[0]), btoi(time[1]), btoi(time[2])) * CD_FRAMESIZE_RAW + 12, SEEK_SET);
- - fread(cdbuffer, 1, DATA_SIZE, cdHandle);
- -
- - if (subHandle != NULL) {
- - fseek(subHandle, MSF2SECT(btoi(time[0]), btoi(time[1]), btoi(time[2])) * SUB_FRAMESIZE, SEEK_SET);
- - fread(subbuffer, 1, SUB_FRAMESIZE, subHandle);
- -
- - if (subChanRaw) DecodeRawSubData();
- + else
- + {
- + cdlastbuffer = cdbuffer;
- +
- + if (cd_compression == ZISO)
- + {
- + u32 curr_sector = MSF2SECT(btoi(time[0]), btoi(time[1]), btoi(time[2]));
- + int ret;
- + u32 pos, p;
- + uLongf size;
- + u8 Zbuf[CD_FRAMESIZE_RAW+256];
- +
- + p = curr_sector;
- +
- + pos = (u32)(Ztable[p * 6] | (Ztable[p * 6 + 1] << 8) |
- + (Ztable[p * 6 + 2] << 16) | (Ztable[p * 6 + 3] << 24));
- + fseek(cdHandle, pos, SEEK_SET);
- +
- + p = (u16)(Ztable[p * 6 + 4] | (Ztable[p * 6 + 4 + 1] << 8));
- + fread(Zbuf, p, 1, cdHandle);
- +
- + size = CD_FRAMESIZE_RAW;
- + ret = uncompress(cdbuffer, &size, Zbuf, p);
- + if( ret != Z_OK )
- + {
- + printf("uncompress error %d !\n", ret);
- + }
- + }
- + else if (cd_compression == ZNXISO)
- + {
- + u32 curr_sector = MSF2SECT(btoi(time[0]), btoi(time[1]), btoi(time[2]));
- + int ret;
- + u32 pos, p;
- + uLongf size;
- + u8 Zbuf[CD_FRAMESIZE_RAW+256];
- +
- + p = curr_sector;
- +
- + pos = (u32)(Ztable[p * 10] | (Ztable[p * 10 + 1] << 8) | (Ztable[p * 10 + 2] << 16) | (Ztable[p * 10 + 3] << 24));
- + fseek(cdHandle, pos, SEEK_SET);
- +
- + p = (u16)(Ztable[p * 10 + 4] | (Ztable[p * 10 + 4 + 1] << 8));
- + fread(Zbuf, p, 1, cdHandle);
- + size = CD_FRAMESIZE_RAW;
- + ret = uncompress(cdbuffer, &size, Zbuf, p);
- + if( ret != Z_OK )
- + {
- + printf("uncompress error %d !\n", ret);
- + }
- }
- + else
- + {
- + if(isMode1ISO) {
- + fseek(cdHandle, MSF2SECT(btoi(time[0]), btoi(time[1]), btoi(time[2])) * MODE1_DATA_SIZE, SEEK_SET);
- + fread(cdbuffer + 12, 1, MODE1_DATA_SIZE, cdHandle);
- + memset(cdbuffer, 0, 12); //not really necessary, fake mode 2 header
- + cdbuffer[0] = (time[0]);
- + cdbuffer[1] = (time[1]);
- + cdbuffer[2] = (time[2]);
- + cdbuffer[3] = 1; //mode 1
- + } else {
- + fseek(cdHandle, MSF2SECT(btoi(time[0]), btoi(time[1]), btoi(time[2])) * CD_FRAMESIZE_RAW + 12, SEEK_SET);
- + fread(cdbuffer, 1, DATA_SIZE, cdHandle);
- + }
- +
- + if (subHandle != NULL) {
- + fseek(subHandle, MSF2SECT(btoi(time[0]), btoi(time[1]), btoi(time[2])) * SUB_FRAMESIZE, SEEK_SET);
- + fread(subbuffer, 1, SUB_FRAMESIZE, subHandle);
- +
- + if (subChanRaw) DecodeRawSubData();
- + }
- + }
- }
- return 0;
- }
- // return readed track
- -static unsigned char * CALLBACK ISOgetBuffer(void) {
- - return cdbuffer;
- +unsigned char * CALLBACK CDR_getBuffer(void) {
- + return cdlastbuffer + (cd_compression == NONE ? 0 : 12);
- }
- // plays cdda audio
- // sector: byte 0 - minute; byte 1 - second; byte 2 - frame
- // does NOT uses bcd format
- -static long CALLBACK ISOplay(unsigned char *time) {
- +long CALLBACK CDR_play(unsigned char *time) {
- unsigned int i, sect;
- if (numtracks <= 1)
- @@ -939,13 +1220,13 @@
- }
- // stops cdda audio
- -static long CALLBACK ISOstop(void) {
- +long CALLBACK CDR_stop(void) {
- stopCDDA();
- return 0;
- }
- // gets subchannel data
- -static unsigned char* CALLBACK ISOgetBufferSub(void) {
- +unsigned char* CALLBACK CDR_getBufferSub(void) {
- if (subHandle != NULL || subChanMixed) {
- return subbuffer;
- }
- @@ -953,7 +1234,7 @@
- return NULL;
- }
- -static long CALLBACK ISOgetStatus(struct CdrStat *stat) {
- +long CALLBACK CDR_getStatus(struct CdrStat *stat) {
- int sec;
- CDR__getStatus(stat);
- @@ -973,25 +1254,6 @@
- }
- void cdrIsoInit(void) {
- - CDR_init = ISOinit;
- - CDR_shutdown = ISOshutdown;
- - CDR_open = ISOopen;
- - CDR_close = ISOclose;
- - CDR_getTN = ISOgetTN;
- - CDR_getTD = ISOgetTD;
- - CDR_readTrack = ISOreadTrack;
- - CDR_getBuffer = ISOgetBuffer;
- - CDR_play = ISOplay;
- - CDR_stop = ISOstop;
- - CDR_getBufferSub = ISOgetBufferSub;
- - CDR_getStatus = ISOgetStatus;
- -
- - CDR_getDriveLetter = CDR__getDriveLetter;
- - CDR_configure = CDR__configure;
- - CDR_test = CDR__test;
- - CDR_about = CDR__about;
- - CDR_setfilename = CDR__setfilename;
- -
- numtracks = 0;
- }
- Only in libpsx/project/jni/libpcsxcore: config.h
- diff -u -r pcsx_rearmed/libpcsxcore/debug.h libpsx/project/jni/libpcsxcore/debug.h
- --- pcsx_rearmed/libpcsxcore/debug.h Tue Jan 10 10:52:39 2012
- +++ libpsx/project/jni/libpcsxcore/debug.h Mon Jan 9 18:42:13 2012
- @@ -51,12 +51,12 @@
- //#define PAD_LOG __Log
- //#define GTE_LOG __Log
- -//#define CDR_LOG __Log("%8.8lx %8.8lx: ", psxRegs.pc, psxRegs.cycle); __Log
- +//#define CDR_LOG __Log("%8.8lx %8.8lx: ", psxRegs->pc, psxRegs->cycle); __Log
- -//#define PSXHW_LOG __Log("%8.8lx %8.8lx: ", psxRegs.pc, psxRegs.cycle); __Log
- -//#define PSXBIOS_LOG __Log("%8.8lx %8.8lx: ", psxRegs.pc, psxRegs.cycle); __Log
- +//#define PSXHW_LOG __Log("%8.8lx %8.8lx: ", psxRegs->pc, psxRegs->cycle); __Log
- +//#define PSXBIOS_LOG __Log("%8.8lx %8.8lx: ", psxRegs->pc, psxRegs->cycle); __Log
- //#define PSXDMA_LOG __Log
- -//#define PSXMEM_LOG __Log("%8.8lx %8.8lx: ", psxRegs.pc, psxRegs.cycle); __Log
- +//#define PSXMEM_LOG __Log("%8.8lx %8.8lx: ", psxRegs->pc, psxRegs->cycle); __Log
- //#define PSXCPU_LOG __Log
- //#define CDRCMD_DEBUG
- diff -u -r pcsx_rearmed/libpcsxcore/decode_xa.c libpsx/project/jni/libpcsxcore/decode_xa.c
- --- pcsx_rearmed/libpcsxcore/decode_xa.c Tue Jan 10 10:52:39 2012
- +++ libpsx/project/jni/libpcsxcore/decode_xa.c Mon Jan 9 18:42:13 2012
- @@ -21,7 +21,7 @@
- * XA audio decoding functions (Kazzuya).
- */
- -#include "decode_xa.h"
- +#include "psxcommon.h"
- #define FIXED
- @@ -340,7 +340,7 @@
- //=== - 0 for any other successive sector
- //=== return -1 if error
- //================================================================
- -s32 xa_decode_sector( xa_decode_t *xdp,
- +long xa_decode_sector( xa_decode_t *xdp,
- unsigned char *sectorp, int is_first_sector ) {
- if (parse_xa_audio_sector(xdp, (xa_subheader_t *)sectorp, sectorp + sizeof(xa_subheader_t), is_first_sector))
- return -1;
- diff -u -r pcsx_rearmed/libpcsxcore/decode_xa.h libpsx/project/jni/libpcsxcore/decode_xa.h
- --- pcsx_rearmed/libpcsxcore/decode_xa.h Tue Jan 10 10:52:39 2012
- +++ libpsx/project/jni/libpcsxcore/decode_xa.h Mon Jan 9 18:42:13 2012
- @@ -24,10 +24,8 @@
- extern "C" {
- #endif
- -#include "psxcommon.h"
- -
- typedef struct {
- - s32 y0, y1;
- + long y0, y1;
- } ADPCM_Decode_t;
- typedef struct {
- @@ -39,7 +37,7 @@
- short pcm[16384];
- } xa_decode_t;
- -s32 xa_decode_sector( xa_decode_t *xdp,
- +long xa_decode_sector( xa_decode_t *xdp,
- unsigned char *sectorp,
- int is_first_sector );
- Only in libpsx/project/jni/libpcsxcore: gpuAPI
- Only in libpsx/project/jni/libpcsxcore: gte_neon.S
- Only in pcsx_rearmed/libpcsxcore: gte_neon.s
- Only in pcsx_rearmed/libpcsxcore: ix86
- Only in pcsx_rearmed/libpcsxcore: ix86_64
- Only in libpsx/project/jni/libpcsxcore: minimal.h
- diff -u -r pcsx_rearmed/libpcsxcore/misc.c libpsx/project/jni/libpcsxcore/misc.c
- --- pcsx_rearmed/libpcsxcore/misc.c Tue Jan 10 12:44:37 2012
- +++ libpsx/project/jni/libpcsxcore/misc.c Mon Jan 9 18:42:14 2012
- @@ -454,11 +454,11 @@
- // STATES
- -static const char PcsxHeader[32] = "STv4 PCSX v" PACKAGE_VERSION;
- +static const char PcsxHeader[32] = "STv5 PSX4 v" PACKAGE_VERSION;
- // Savestate Versioning!
- // If you make changes to the savestate version, please increment the value below.
- -static const u32 SaveVersion = 0x8b410006;
- +static const u32 SaveVersion = 0x8b410008;
- int SaveState(const char *file) {
- gzFile f;
- @@ -500,7 +500,7 @@
- // spu
- spufP = (SPUFreeze_t *) malloc(16);
- SPU_freeze(2, spufP);
- - Size = spufP->Size; gzwrite(f, &Size, 4);
- + Size = spufP->ulFreezeSize; gzwrite(f, &Size, 4);
- free(spufP);
- spufP = (SPUFreeze_t *) malloc(Size);
- SPU_freeze(1, spufP);
- @@ -512,6 +512,9 @@
- psxHwFreeze(f, 1);
- psxRcntFreeze(f, 1);
- mdecFreeze(f, 1);
- + gzwrite(f, (void *)&bias_vsync, sizeof(int));
- + gzwrite(f, (void *)&bias_cycle, sizeof(unsigned int));
- + gzwrite(f, (void *)&cdrom_precise, sizeof(int));
- gzclose(f);
- @@ -534,7 +537,7 @@
- gzread(f, &version, sizeof(u32));
- gzread(f, &hle, sizeof(boolean));
- - if (strncmp("STv4 PCSX", header, 9) != 0 || version != SaveVersion) {
- + if (strncmp("STv5 PSX4", header, 9) != 0 || version > SaveVersion || hle != Config.HLE) {
- gzclose(f);
- return -1;
- }
- @@ -572,7 +575,19 @@
- psxHwFreeze(f, 0);
- psxRcntFreeze(f, 0);
- mdecFreeze(f, 0);
- -
- + if(version == 0x8b410007)
- + {
- + gzread(f, &bias_vsync, sizeof(unsigned int));
- + //gzread(f, &bias_cycle, sizeof(unsigned int));
- + gzread(f, &cdrom_precise, sizeof(int));
- + }
- + if(version >= 0x8b410008)
- + {
- + gzread(f, &bias_vsync, sizeof(unsigned int));
- + gzread(f, &bias_cycle, sizeof(unsigned int));
- + gzread(f, &cdrom_precise, sizeof(int));
- + }
- +
- gzclose(f);
- new_dyna_restore();
- @@ -594,7 +609,7 @@
- gzclose(f);
- - if (strncmp("STv4 PCSX", header, 9) != 0 || version != SaveVersion)
- + if (strncmp("STv4 PCSX", header, 9) != 0 || version != SaveVersion || hle != Config.HLE)
- return -1;
- return 0;
- @@ -603,6 +618,7 @@
- // NET Function Helpers
- int SendPcsxInfo() {
- +#if 0
- if (NET_recvData == NULL || NET_sendData == NULL)
- return 0;
- @@ -612,13 +628,13 @@
- NET_sendData(&Config.RCntFix, sizeof(Config.RCntFix), PSE_NET_BLOCKING);
- NET_sendData(&Config.PsxType, sizeof(Config.PsxType), PSE_NET_BLOCKING);
- NET_sendData(&Config.Cpu, sizeof(Config.Cpu), PSE_NET_BLOCKING);
- -
- +#endif
- return 0;
- }
- int RecvPcsxInfo() {
- int tmp;
- -
- +#if 0
- if (NET_recvData == NULL || NET_sendData == NULL)
- return 0;
- @@ -645,7 +661,7 @@
- }
- psxCpu->Reset();
- }
- -
- +#endif
- return 0;
- }
- diff -u -r pcsx_rearmed/libpcsxcore/new_dynarec/assem_arm.c libpsx/project/jni/libpcsxcore/new_dynarec/assem_arm.c
- --- pcsx_rearmed/libpcsxcore/new_dynarec/assem_arm.c Tue Jan 10 12:46:33 2012
- +++ libpsx/project/jni/libpcsxcore/new_dynarec/assem_arm.c Mon Jan 9 18:42:14 2012
- @@ -48,6 +48,85 @@
- void jump_vaddr_r10();
- void jump_vaddr_r12();
- +void invalidate_addr_r0();
- +void invalidate_addr_r1();
- +void invalidate_addr_r2();
- +void invalidate_addr_r3();
- +void invalidate_addr_r4();
- +void invalidate_addr_r5();
- +void invalidate_addr_r6();
- +void invalidate_addr_r7();
- +void invalidate_addr_r8();
- +void invalidate_addr_r9();
- +void invalidate_addr_r10();
- +void invalidate_addr_r12();
- +
- +void gteRTPS_neon(void *cp2_regs, int opcode);
- +void gteRTPT_neon(void *cp2_regs, int opcode);
- +void gteMVMVA_neon(void *cp2_regs, int opcode);
- +void gteNCLIP_neon(void *cp2_regs, int opcode);
- +void gen_interupt();
- +void memdebug(int i);
- +
- +const u_int jump_table_symbols[] = {
- + (int)invalidate_addr_r0,
- + (int)invalidate_addr_r1,
- + (int)invalidate_addr_r2,
- + (int)invalidate_addr_r3,
- + (int)invalidate_addr_r4,
- + (int)invalidate_addr_r5,
- + (int)invalidate_addr_r6,
- + (int)invalidate_addr_r7,
- + (int)invalidate_addr_r8,
- + (int)invalidate_addr_r9,
- + (int)invalidate_addr_r10,
- + (int)invalidate_addr_r12,
- + (int)invalidate_addr_r0,
- + (int)indirect_jump_indexed,
- + (int)indirect_jump,
- + (int)invalidate_addr,
- + (int)verify_code,
- + (int)verify_code_vm,
- + (int)verify_code_ds,
- + (int)pcsx_mtc0_ds,
- + (int)pcsx_mtc0,
- +#if !defined(ARMv5_ONLY)
- + (int)gteRTPS_neon,
- + (int)gteRTPT_neon,
- + (int)gteMVMVA_neon,
- + (int)gteNCLIP_neon,
- +#endif
- + (int)jump_vaddr_r0,
- + (int)jump_vaddr_r1,
- + (int)jump_vaddr_r2,
- + (int)jump_vaddr_r3,
- + (int)jump_vaddr_r4,
- + (int)jump_vaddr_r5,
- + (int)jump_vaddr_r6,
- + (int)jump_vaddr_r7,
- + (int)jump_vaddr_r8,
- + (int)jump_vaddr_r9, // 30
- + (int)jump_vaddr_r10,
- + (int)jump_vaddr_r12,
- + (int)gen_interupt,
- + (int)get_addr_ht,
- + (int)get_addr,
- + (int)mult64,
- + (int)multu64,
- + (int)div64,
- + (int)divu64,
- + (int)memdebug,
- + (int)cc_interrupt,
- + (int)fp_exception_ds,
- + (int)fp_exception,
- + (int)jump_syscall_hle,
- + (int)jump_hlecall,
- + (int)jump_intcall,
- + (int)new_dyna_leave,
- +};
- +
- +#define JUMP_TABLE_SIZE (sizeof(jump_table_symbols)*2)
- +
- const u_int jump_vaddr_reg[16] = {
- (int)jump_vaddr_r0,
- (int)jump_vaddr_r1,
- @@ -66,19 +145,6 @@
- 0,
- 0};
- -void invalidate_addr_r0();
- -void invalidate_addr_r1();
- -void invalidate_addr_r2();
- -void invalidate_addr_r3();
- -void invalidate_addr_r4();
- -void invalidate_addr_r5();
- -void invalidate_addr_r6();
- -void invalidate_addr_r7();
- -void invalidate_addr_r8();
- -void invalidate_addr_r9();
- -void invalidate_addr_r10();
- -void invalidate_addr_r12();
- -
- const u_int invalidate_addr_reg[16] = {
- (int)invalidate_addr_r0,
- (int)invalidate_addr_r1,
- @@ -203,11 +269,14 @@
- u_int get_clean_addr(int addr)
- {
- int *ptr=(int *)addr;
- - #ifdef ARMv5_ONLY
- + if(!isARMv7)
- + {
- ptr+=4;
- - #else
- + }
- + else
- + {
- ptr+=6;
- - #endif
- + }
- if((*ptr&0xFF000000)!=0xeb000000) ptr++;
- assert((*ptr&0xFF000000)==0xeb000000); // bl instruction
- ptr++;
- @@ -220,23 +289,28 @@
- int verify_dirty(int addr)
- {
- u_int *ptr=(u_int *)addr;
- - #ifdef ARMv5_ONLY
- + u_int offset;
- + u_int *l_ptr;
- + u_int source;
- + u_int copy;
- + u_int len;
- + if(!isARMv7) {
- // get from literal pool
- assert((*ptr&0xFFF00000)==0xe5900000);
- - u_int offset=*ptr&0xfff;
- - u_int *l_ptr=(void *)ptr+offset+8;
- - u_int source=l_ptr[0];
- - u_int copy=l_ptr[1];
- - u_int len=l_ptr[2];
- + offset=*ptr&0xfff;
- + l_ptr=(void *)ptr+offset+8;
- + source=l_ptr[0];
- + copy=l_ptr[1];
- + len=l_ptr[2];
- ptr+=4;
- - #else
- + }else{
- // ARMv7 movw/movt
- assert((*ptr&0xFFF00000)==0xe3000000);
- - u_int source=(ptr[0]&0xFFF)+((ptr[0]>>4)&0xF000)+((ptr[2]<<16)&0xFFF0000)+((ptr[2]<<12)&0xF0000000);
- - u_int copy=(ptr[1]&0xFFF)+((ptr[1]>>4)&0xF000)+((ptr[3]<<16)&0xFFF0000)+((ptr[3]<<12)&0xF0000000);
- - u_int len=(ptr[4]&0xFFF)+((ptr[4]>>4)&0xF000);
- + source=(ptr[0]&0xFFF)+((ptr[0]>>4)&0xF000)+((ptr[2]<<16)&0xFFF0000)+((ptr[2]<<12)&0xF0000000);
- + copy=(ptr[1]&0xFFF)+((ptr[1]>>4)&0xF000)+((ptr[3]<<16)&0xFFF0000)+((ptr[3]<<12)&0xF0000000);
- + len=(ptr[4]&0xFFF)+((ptr[4]>>4)&0xF000);
- ptr+=6;
- - #endif
- + }
- if((*ptr&0xFF000000)!=0xeb000000) ptr++;
- assert((*ptr&0xFF000000)==0xeb000000); // bl instruction
- u_int verifier=(int)ptr+((signed int)(*ptr<<8)>>6)+8; // get target of bl
- @@ -257,11 +331,13 @@
- // guarantees that it's not dirty
- int isclean(int addr)
- {
- - #ifdef ARMv5_ONLY
- - int *ptr=((u_int *)addr)+4;
- - #else
- - int *ptr=((u_int *)addr)+6;
- - #endif
- + int *ptr;
- + if(!isARMv7)
- + {
- + ptr=((u_int *)addr)+4;
- + }else{
- + ptr=((u_int *)addr)+6;
- + }
- if((*ptr&0xFF000000)!=0xeb000000) ptr++;
- if((*ptr&0xFF000000)!=0xeb000000) return 1; // bl instruction
- if((int)ptr+((*ptr<<8)>>6)+8==(int)verify_code) return 0;
- @@ -273,23 +349,28 @@
- void get_bounds(int addr,u_int *start,u_int *end)
- {
- u_int *ptr=(u_int *)addr;
- - #ifdef ARMv5_ONLY
- + u_int offset;
- + u_int *l_ptr;
- + u_int source;
- + u_int len;
- +
- + if(!isARMv7) {
- // get from literal pool
- assert((*ptr&0xFFF00000)==0xe5900000);
- - u_int offset=*ptr&0xfff;
- - u_int *l_ptr=(void *)ptr+offset+8;
- - u_int source=l_ptr[0];
- + offset=*ptr&0xfff;
- + l_ptr=(void *)ptr+offset+8;
- + source=l_ptr[0];
- //u_int copy=l_ptr[1];
- - u_int len=l_ptr[2];
- + len=l_ptr[2];
- ptr+=4;
- - #else
- + }else{
- // ARMv7 movw/movt
- assert((*ptr&0xFFF00000)==0xe3000000);
- - u_int source=(ptr[0]&0xFFF)+((ptr[0]>>4)&0xF000)+((ptr[2]<<16)&0xFFF0000)+((ptr[2]<<12)&0xF0000000);
- + source=(ptr[0]&0xFFF)+((ptr[0]>>4)&0xF000)+((ptr[2]<<16)&0xFFF0000)+((ptr[2]<<12)&0xF0000000);
- //u_int copy=(ptr[1]&0xFFF)+((ptr[1]>>4)&0xF000)+((ptr[3]<<16)&0xFFF0000)+((ptr[3]<<12)&0xF0000000);
- - u_int len=(ptr[4]&0xFFF)+((ptr[4]>>4)&0xF000);
- + len=(ptr[4]&0xFFF)+((ptr[4]>>4)&0xF000);
- ptr+=6;
- - #endif
- + }
- if((*ptr&0xFF000000)!=0xeb000000) ptr++;
- assert((*ptr&0xFF000000)==0xeb000000); // bl instruction
- u_int verifier=(int)ptr+((signed int)(*ptr<<8)>>6)+8; // get target of bl
- @@ -467,7 +548,7 @@
- }
- }
- }
- - printf("This shouldn't happen (alloc_reg)");exit(1);
- + __android_log_print(ANDROID_LOG_WARN, LOG_TAG, "This shouldn't happen (alloc_reg)");exit(1);
- }
- void alloc_reg64(struct regstat *cur,int i,signed char reg)
- @@ -633,7 +714,7 @@
- }
- }
- }
- - printf("This shouldn't happen");exit(1);
- + __android_log_print(ANDROID_LOG_WARN, LOG_TAG, "This shouldn't happen");exit(1);
- }
- // Allocate a temporary register. This is done without regard to
- @@ -756,7 +837,7 @@
- }
- }
- }
- - printf("This shouldn't happen");exit(1);
- + __android_log_print(ANDROID_LOG_WARN, LOG_TAG, "This shouldn't happen");exit(1);
- }
- // Allocate a specific ARM register.
- void alloc_arm_reg(struct regstat *cur,int i,signed char reg,char hr)
- @@ -864,6 +945,23 @@
- }
- u_int genjmp(u_int addr)
- {
- + if(addr<4) return 0;
- + int offset=addr-(int)out-8;
- + if(offset<-33554432||offset>=33554432)
- + {
- + int n;
- + for (n=0;n<sizeof(jump_table_symbols)/4;n++)
- + {
- + if(addr==jump_table_symbols[n])
- + {
- + offset=BASE_ADDR+(1<<TARGET_SIZE_2)-JUMP_TABLE_SIZE+n*8-(int)out-8;
- + break;
- + }
- + }
- + }
- + assert(offset>=-33554432&&offset<33554432);
- + return ((u_int)offset>>2)&0xffffff;
- +/*
- int offset=addr-(int)out-8;
- if(offset<-33554432||offset>=33554432) {
- if (addr>2) {
- @@ -873,6 +971,7 @@
- return 0;
- }
- return ((u_int)offset>>2)&0xffffff;
- +*/
- }
- void emit_mov(int rs,int rt)
- @@ -974,21 +1073,21 @@
- assem_debug("mvn %s,#%d\n",regname[rt],imm);
- output_w32(0xe3e00000|rd_rn_rm(rt,0,0)|armval);
- }else if(imm<65536) {
- - #ifdef ARMv5_ONLY
- + if(!isARMv7) {
- assem_debug("mov %s,#%d\n",regname[rt],imm&0xFF00);
- output_w32(0xe3a00000|rd_rn_imm_shift(rt,0,imm>>8,8));
- assem_debug("add %s,%s,#%d\n",regname[rt],regname[rt],imm&0xFF);
- output_w32(0xe2800000|rd_rn_imm_shift(rt,rt,imm&0xff,0));
- - #else
- + }else{
- emit_movw(imm,rt);
- - #endif
- + }
- }else{
- - #ifdef ARMv5_ONLY
- + if(!isARMv7) {
- emit_loadlp(imm,rt);
- - #else
- + }else{
- emit_movw(imm&0x0000FFFF,rt);
- emit_movt(imm&0xFFFF0000,rt);
- - #endif
- + }
- }
- }
- void emit_pcreladdr(u_int rt)
- @@ -1246,25 +1345,25 @@
- assem_debug("bic %s,%s,#%d\n",regname[rt],regname[rs],imm);
- output_w32(0xe3c00000|rd_rn_rm(rt,rs,0)|armval);
- }else if(imm==65535) {
- - #ifdef ARMv5_ONLY
- + if(!isARMv7) {
- assem_debug("bic %s,%s,#FF000000\n",regname[rt],regname[rs]);
- output_w32(0xe3c00000|rd_rn_rm(rt,rs,0)|0x4FF);
- assem_debug("bic %s,%s,#00FF0000\n",regname[rt],regname[rt]);
- output_w32(0xe3c00000|rd_rn_rm(rt,rt,0)|0x8FF);
- - #else
- + }else{
- assem_debug("uxth %s,%s\n",regname[rt],regname[rs]);
- output_w32(0xe6ff0070|rd_rn_rm(rt,0,rs));
- - #endif
- + }
- }else{
- assert(imm>0&&imm<65535);
- - #ifdef ARMv5_ONLY
- + if(!isARMv7) {
- assem_debug("mov r14,#%d\n",imm&0xFF00);
- output_w32(0xe3a00000|rd_rn_imm_shift(HOST_TEMPREG,0,imm>>8,8));
- assem_debug("add r14,r14,#%d\n",imm&0xFF);
- output_w32(0xe2800000|rd_rn_imm_shift(HOST_TEMPREG,HOST_TEMPREG,imm&0xff,0));
- - #else
- + }else{
- emit_movw(imm,HOST_TEMPREG);
- - #endif
- + }
- assem_debug("and %s,%s,r14\n",regname[rt],regname[rs]);
- output_w32(0xe0000000|rd_rn_rm(rt,rs,HOST_TEMPREG));
- }
- @@ -1363,13 +1462,13 @@
- void emit_signextend16(int rs,int rt)
- {
- - #ifdef ARMv5_ONLY
- + if(!isARMv7) {
- emit_shlimm(rs,16,rt);
- emit_sarimm(rt,16,rt);
- - #else
- + }else{
- assem_debug("sxth %s,%s\n",regname[rt],regname[rs]);
- output_w32(0xe6bf0070|rd_rn_rm(rt,0,rs));
- - #endif
- + }
- }
- void emit_shl(u_int rs,u_int shift,u_int rt)
- @@ -1451,20 +1550,20 @@
- output_w32(0xe3700000|rd_rn_rm(0,rs,0)|armval);
- }else if(imm>0) {
- assert(imm<65536);
- - #ifdef ARMv5_ONLY
- + if(!isARMv7) {
- emit_movimm(imm,HOST_TEMPREG);
- - #else
- + }else{
- emit_movw(imm,HOST_TEMPREG);
- - #endif
- + }
- assem_debug("cmp %s,r14\n",regname[rs]);
- output_w32(0xe1500000|rd_rn_rm(0,rs,HOST_TEMPREG));
- }else{
- assert(imm>-65536);
- - #ifdef ARMv5_ONLY
- + if(!isARMv7) {
- emit_movimm(-imm,HOST_TEMPREG);
- - #else
- + }else{
- emit_movw(-imm,HOST_TEMPREG);
- - #endif
- + }
- assem_debug("cmn %s,r14\n",regname[rs]);
- output_w32(0xe1700000|rd_rn_rm(0,rs,HOST_TEMPREG));
- }
- @@ -2185,12 +2284,12 @@
- output_w32(0x12400000|rd_rn_rm(rt,rt,0)|armval);
- }
- else {
- - #ifdef ARMv5_ONLY
- + if(!isARMv7) {
- emit_movimm(imm1,rt);
- add_literal((int)out,imm2);
- assem_debug("ldrne %s,pc+? [=%x]\n",regname[rt],imm2);
- output_w32(0x15900000|rd_rn_rm(rt,15,0));
- - #else
- + }else{
- emit_movw(imm1&0x0000FFFF,rt);
- if((imm1&0xFFFF)!=(imm2&0xFFFF)) {
- assem_debug("movwne %s,#%d (0x%x)\n",regname[rt],imm2&0xFFFF,imm2&0xFFFF);
- @@ -2201,7 +2300,7 @@
- assem_debug("movtne %s,#%d (0x%x)\n",regname[rt],imm2&0xffff0000,imm2&0xffff0000);
- output_w32(0x13400000|rd_rn_rm(rt,0,0)|((imm2>>16)&0xfff)|((imm2>>12)&0xf0000));
- }
- - #endif
- + }
- }
- }
- @@ -3070,17 +3169,17 @@
- addr=(u_int)source;
- #endif
- // Careful about the code output here, verify_dirty needs to parse it.
- - #ifdef ARMv5_ONLY
- + if(!isARMv7) {
- emit_loadlp(addr,1);
- emit_loadlp((int)copy,2);
- emit_loadlp(slen*4,3);
- - #else
- + }else{
- emit_movw(addr&0x0000FFFF,1);
- emit_movw(((u_int)copy)&0x0000FFFF,2);
- emit_movt(addr&0xFFFF0000,1);
- emit_movt(((u_int)copy)&0xFFFF0000,2);
- emit_movw(slen*4,3);
- - #endif
- + }
- emit_movimm(start+i*4,0);
- emit_call((int)start<(int)0xC0000000?(int)&verify_code:(int)&verify_code_vm);
- int entry=(int)out;
- @@ -3093,17 +3192,17 @@
- void do_dirty_stub_ds()
- {
- // Careful about the code output here, verify_dirty needs to parse it.
- - #ifdef ARMv5_ONLY
- + if(!isARMv7) {
- emit_loadlp((int)start<(int)0xC0000000?(int)source:(int)start,1);
- emit_loadlp((int)copy,2);
- emit_loadlp(slen*4,3);
- - #else
- + }else{
- emit_movw(((int)start<(int)0xC0000000?(u_int)source:(u_int)start)&0x0000FFFF,1);
- emit_movw(((u_int)copy)&0x0000FFFF,2);
- emit_movt(((int)start<(int)0xC0000000?(u_int)source:(u_int)start)&0xFFFF0000,1);
- emit_movt(((u_int)copy)&0xFFFF0000,2);
- emit_movw(slen*4,3);
- - #endif
- + }
- emit_movimm(start+1,0);
- emit_call((int)&verify_code_ds);
- }
- @@ -3770,9 +3869,9 @@
- emit_movimm(source[i],1); // opcode
- if (cc>=0&>e_cycletab[c2op])
- emit_addimm(cc,gte_cycletab[c2op]/2,cc); // XXX: could just adjust ccadj?
- - emit_addimm(FP,(int)&psxRegs.CP2D.r[0]-(int)&dynarec_local,0); // cop2 regs
- - emit_writeword(1,(int)&psxRegs.code);
- - emit_call((int)gte_handlers[c2op]);
- + emit_addimm(FP,(u_int)&psxRegs.CP2D.r[0]-(u_int)&dynarec_local,0); // cop2 regs
- + emit_writeword(1,(u_int)&psxRegs.code);
- + emit_call((u_int)gte_handlers[c2op]);
- }
- if(i>=slen-1||itype[i+1]!=C2OP)
- @@ -4546,11 +4645,11 @@
- assert(m2l>=0);
- save_regs(0x100f);
- if(m1l!=0) emit_mov(m1l,0);
- - if(m1h==0) emit_readword((int)&dynarec_local,1);
- + if(m1h==0) emit_readword((u_int)&dynarec_local,1);
- else if(m1h>1) emit_mov(m1h,1);
- - if(m2l<2) emit_readword((int)&dynarec_local+m2l*4,2);
- + if(m2l<2) emit_readword((u_int)&dynarec_local+m2l*4,2);
- else if(m2l>2) emit_mov(m2l,2);
- - if(m2h<3) emit_readword((int)&dynarec_local+m2h*4,3);
- + if(m2h<3) emit_readword((u_int)&dynarec_local+m2h*4,3);
- else if(m2h>3) emit_mov(m2h,3);
- emit_call((int)&multu64);
- restore_regs(0x100f);
- @@ -4626,11 +4725,11 @@
- assert(d2l>=0);
- save_regs(0x100f);
- if(d1l!=0) emit_mov(d1l,0);
- - if(d1h==0) emit_readword((int)&dynarec_local,1);
- + if(d1h==0) emit_readword((u_int)&dynarec_local,1);
- else if(d1h>1) emit_mov(d1h,1);
- - if(d2l<2) emit_readword((int)&dynarec_local+d2l*4,2);
- + if(d2l<2) emit_readword((u_int)&dynarec_local+d2l*4,2);
- else if(d2l>2) emit_mov(d2l,2);
- - if(d2h<3) emit_readword((int)&dynarec_local+d2h*4,3);
- + if(d2h<3) emit_readword((u_int)&dynarec_local+d2h*4,3);
- else if(d2h>3) emit_mov(d2h,3);
- emit_call((int)&div64);
- restore_regs(0x100f);
- @@ -4659,11 +4758,11 @@
- assert(d2l>=0);
- save_regs(0x100f);
- if(d1l!=0) emit_mov(d1l,0);
- - if(d1h==0) emit_readword((int)&dynarec_local,1);
- + if(d1h==0) emit_readword((u_int)&dynarec_local,1);
- else if(d1h>1) emit_mov(d1h,1);
- - if(d2l<2) emit_readword((int)&dynarec_local+d2l*4,2);
- + if(d2l<2) emit_readword((u_int)&dynarec_local+d2l*4,2);
- else if(d2l>2) emit_mov(d2l,2);
- - if(d2h<3) emit_readword((int)&dynarec_local+d2h*4,3);
- + if(d2h<3) emit_readword((u_int)&dynarec_local+d2h*4,3);
- else if(d2h>3) emit_mov(d2h,3);
- emit_call((int)&divu64);
- restore_regs(0x100f);
- @@ -4697,7 +4796,7 @@
- }
- void do_preload_rhtbl(int ht) {
- - emit_addimm(FP,(int)&mini_ht-(int)&dynarec_local,ht);
- + emit_addimm(FP,(u_int)&mini_ht-(u_int)&dynarec_local,ht);
- }
- void do_rhash(int rs,int rh) {
- @@ -4721,20 +4820,20 @@
- }
- void do_miniht_insert(u_int return_address,int rt,int temp) {
- - #ifdef ARMv5_ONLY
- + if(!isARMv7) {
- emit_movimm(return_address,rt); // PC into link register
- add_to_linker((int)out,return_address,1);
- emit_pcreladdr(temp);
- emit_writeword(rt,(int)&mini_ht[(return_address&0xFF)>>3][0]);
- emit_writeword(temp,(int)&mini_ht[(return_address&0xFF)>>3][1]);
- - #else
- + }else{
- emit_movw(return_address&0x0000FFFF,rt);
- add_to_linker((int)out,return_address,1);
- emit_pcreladdr(temp);
- emit_writeword(temp,(int)&mini_ht[(return_address&0xFF)>>3][1]);
- emit_movt(return_address&0xFFFF0000,rt);
- emit_writeword(rt,(int)&mini_ht[(return_address&0xFF)>>3][0]);
- - #endif
- + }
- }
- // Sign-extend to 64 bits and write out upper half of a register
- @@ -4883,7 +4982,7 @@
- end+=4096;
- j++;
- }else{
- - __clear_cache((void *)start,(void *)end);
- + cacheflush((void *)start,(void *)end, 0);
- break;
- }
- }
- @@ -4902,6 +5001,27 @@
- rounding_modes[2]=0x1<<22; // ceil
- rounding_modes[3]=0x2<<22; // floor
- #endif
- +
- + // Trampolines for jumps >32M
- + int *ptr,*ptr2;
- + ptr=(int *)jump_table_symbols;
- + ptr2=(int *)((void *)BASE_ADDR+(1<<TARGET_SIZE_2)-JUMP_TABLE_SIZE);
- + while((void *)ptr<(void *)jump_table_symbols+sizeof(jump_table_symbols))
- + {
- + int offset=*ptr-(int)ptr2-8;
- + if(offset>=-33554432&&offset<33554432)
- + {
- + *ptr2=0xea000000|((offset>>2)&0xffffff); // direct branch
- + }
- + else
- + {
- + *ptr2=0xe51ff004; // ldr pc,[pc,#-4]
- + }
- + ptr2++;
- + *ptr2=*ptr;
- + ptr++;
- + ptr2++;
- + }
- }
- // vim:shiftwidth=2:expandtab
- diff -u -r pcsx_rearmed/libpcsxcore/new_dynarec/assem_arm.h libpsx/project/jni/libpcsxcore/new_dynarec/assem_arm.h
- --- pcsx_rearmed/libpcsxcore/new_dynarec/assem_arm.h Tue Jan 10 12:30:41 2012
- +++ libpsx/project/jni/libpcsxcore/new_dynarec/assem_arm.h Mon Jan 9 18:42:14 2012
- @@ -48,7 +48,10 @@
- extern char *invc_ptr;
- -#define BASE_ADDR 0x1000000 // Code generator target address
- +extern int isARMv7;
- +extern int isARMneon;
- +
- +#define BASE_ADDR ((unsigned long)dynarec_ptr) // Code generator target address
- #define TARGET_SIZE_2 24 // 2^24 = 16 megabytes
- // This is defined in linkage_arm.s, but gcc -O3 likes this better
- diff -u -r pcsx_rearmed/libpcsxcore/new_dynarec/emu_if.c libpsx/project/jni/libpcsxcore/new_dynarec/emu_if.c
- --- pcsx_rearmed/libpcsxcore/new_dynarec/emu_if.c Tue Jan 10 12:46:33 2012
- +++ libpsx/project/jni/libpcsxcore/new_dynarec/emu_if.c Mon Jan 9 18:42:14 2012
- @@ -161,11 +161,13 @@
- for (i = 0; i < ARRAY_SIZE(gte_handlers); i++)
- if (psxCP2[i] != psxNULL)
- gte_handlers[i] = psxCP2[i];
- -#if defined(__arm__) && !defined(DRC_DBG)
- +#if defined(__arm__) && !defined(DRC_DBG) && !defined(ARMv5_ONLY)
- + if(isARMneon) {
- gte_handlers[0x01] = gteRTPS_neon;
- gte_handlers[0x30] = gteRTPT_neon;
- gte_handlers[0x12] = gteMVMVA_neon;
- gte_handlers[0x06] = gteNCLIP_neon;
- + }
- #endif
- psxH_ptr = psxH;
- diff -u -r pcsx_rearmed/libpcsxcore/new_dynarec/emu_if.h libpsx/project/jni/libpcsxcore/new_dynarec/emu_if.h
- --- pcsx_rearmed/libpcsxcore/new_dynarec/emu_if.h Tue Jan 10 12:30:41 2012
- +++ libpsx/project/jni/libpcsxcore/new_dynarec/emu_if.h Mon Jan 9 18:42:14 2012
- @@ -57,3 +57,5 @@
- /* misc */
- extern void (*psxHLEt[])();
- +extern int isARMv7;
- +extern int isARMneon;
- Only in libpsx/project/jni/libpcsxcore/new_dynarec: linkage_arm.S
- Only in pcsx_rearmed/libpcsxcore/new_dynarec: linkage_arm.s
- diff -u -r pcsx_rearmed/libpcsxcore/new_dynarec/new_dynarec.c libpsx/project/jni/libpcsxcore/new_dynarec/new_dynarec.c
- --- pcsx_rearmed/libpcsxcore/new_dynarec/new_dynarec.c Tue Jan 10 12:46:33 2012
- +++ libpsx/project/jni/libpcsxcore/new_dynarec/new_dynarec.c Mon Jan 9 18:42:14 2012
- @@ -22,6 +22,9 @@
- #include <stdint.h> //include for uint64_t
- #include <assert.h>
- +#define LOG_TAG "libpsx Emulator"
- +#include <android/log.h>
- +
- #include "emu_if.h" //emulator interface
- #include <sys/mman.h>
- @@ -259,6 +262,9 @@
- int tracedebug=0;
- +unsigned char dynarec_addr[(1<<TARGET_SIZE_2) + 4096];
- +unsigned char* dynarec_ptr;
- +
- //#define DEBUG_CYCLE_COUNT 1
- void nullf() {}
- @@ -1224,7 +1230,7 @@
- restore_candidate[((page&2047)>>3)+256]|=1<<(page&7);
- }
- #ifdef __arm__
- - __clear_cache((void *)BASE_ADDR,(void *)BASE_ADDR+(1<<TARGET_SIZE_2));
- + cacheflush((void *)BASE_ADDR,(void *)BASE_ADDR+(1<<TARGET_SIZE_2), 0);
- #endif
- #ifdef USE_MINI_HT
- memset(mini_ht,-1,sizeof(mini_ht));
- @@ -7803,11 +7809,13 @@
- void new_dynarec_init()
- {
- printf("Init new dynarec\n");
- + dynarec_ptr = (unsigned char *)(((unsigned long) dynarec_addr + 4096) & ~(4095));
- out=(u_char *)BASE_ADDR;
- if (mmap (out, 1<<TARGET_SIZE_2,
- PROT_READ | PROT_WRITE | PROT_EXEC,
- MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS,
- -1, 0) <= 0) {printf("mmap() failed\n");}
- + mprotect(out, 1<<TARGET_SIZE_2, PROT_READ|PROT_WRITE|PROT_EXEC);
- #ifdef MUPEN64
- rdword=&readmem_dword;
- fake_pc.f.r.rs=&readmem_dword;
- @@ -7885,7 +7893,8 @@
- }
- */
- //if(Count==365117028) tracedebug=1;
- - assem_debug("NOTCOMPILED: addr = %x -> %x\n", (int)addr, (int)out);
- + //__android_log_print(ANDROID_LOG_WARN, LOG_TAG, "NOTCOMPILED: addr = %x -> %x\n", (int)addr, (int)out);
- +
- //printf("NOTCOMPILED: addr = %x -> %x\n", (int)addr, (int)out);
- //printf("TRACE: count=%d next=%d (compile %x)\n",Count,next_interupt,addr);
- //if(debug)
- @@ -7913,7 +7922,7 @@
- emit_writeword(0,(int)&pcaddr);
- emit_jmp((int)new_dyna_leave);
- #ifdef __arm__
- - __clear_cache((void *)beginning,out);
- + cacheflush((void *)beginning,out, 0);
- #endif
- ll_add(jump_in+page,start,(void *)beginning);
- return 0;
- @@ -11081,12 +11090,12 @@
- copy+=slen*4;
- #ifdef __arm__
- - __clear_cache((void *)beginning,out);
- + cacheflush((void *)beginning,out,0);
- #endif
- // If we're within 256K of the end of the buffer,
- // start over from the beginning. (Is 256K enough?)
- - if((int)out>BASE_ADDR+(1<<TARGET_SIZE_2)-MAX_OUTPUT_BLOCK_SIZE) out=(u_char *)BASE_ADDR;
- + if((int)out>BASE_ADDR+(1<<TARGET_SIZE_2)-MAX_OUTPUT_BLOCK_SIZE-JUMP_TABLE_SIZE) out=(u_char *)BASE_ADDR;
- // Trap writes to any of the pages we compiled
- for(i=start>>12;i<=(start+slen*4)>>12;i++) {
- diff -u -r pcsx_rearmed/libpcsxcore/plugins.c libpsx/project/jni/libpcsxcore/plugins.c
- --- pcsx_rearmed/libpcsxcore/plugins.c Tue Jan 10 10:52:39 2012
- +++ libpsx/project/jni/libpcsxcore/plugins.c Mon Jan 9 18:42:14 2012
- @@ -21,12 +21,15 @@
- * Plugin library callback/access functions.
- */
- +#include "minimal.h"
- #include "plugins.h"
- #include "cdriso.h"
- +#include <time.h>
- static char IsoFile[MAXPATHLEN] = "";
- static s64 cdOpenCaseTime = 0;
- +#if 0
- GPUupdateLace GPU_updateLace;
- GPUinit GPU_init;
- GPUshutdown GPU_shutdown;
- @@ -50,6 +53,8 @@
- GPUshowScreenPic GPU_showScreenPic;
- GPUclearDynarec GPU_clearDynarec;
- GPUvBlank GPU_vBlank;
- +GPUregisterCallback GPU_registerCallback;
- +GPUidle GPU_idle;
- CDRinit CDR_init;
- CDRshutdown CDR_shutdown;
- @@ -174,24 +179,23 @@
- #endif
- -static const char *err;
- -
- -#define CheckErr(func) { \
- - err = SysLibError(); \
- - if (err != NULL) { SysMessage(_("Error loading %s: %s"), func, err); return -1; } \
- -}
- -
- -#define LoadSym(dest, src, name, checkerr) { \
- - dest = (src)SysLoadSym(drv, name); \
- - if (checkerr) { CheckErr(name); } else SysLibError(); \
- +void CALLBACK GPUdisplayText(char *pText) {
- + SysPrintf("%s\n", pText);
- }
- +#endif
- -void *hGPUDriver = NULL;
- +long CALLBACK CDR__getStatus(struct CdrStat *stat) {
- + if (cdOpenCaseTime < 0 || cdOpenCaseTime > (s64)time(NULL))
- + stat->Status = 0x10;
- + else
- + stat->Status = 0;
- -void CALLBACK GPU__displayText(char *pText) {
- - SysPrintf("%s\n", pText);
- + return 0;
- }
- +void CALLBACK GPU_idle(void) {}
- +
- +#if 0
- long CALLBACK GPU__configure(void) { return 0; }
- long CALLBACK GPU__test(void) { return 0; }
- void CALLBACK GPU__about(void) {}
- @@ -201,6 +205,8 @@
- long CALLBACK GPU__showScreenPic(unsigned char *pMem) { return -1; }
- void CALLBACK GPU__clearDynarec(void (CALLBACK *callback)(void)) {}
- void CALLBACK GPU__vBlank(int val) {}
- +void CALLBACK GPU__registerCallback(void (CALLBACK *callback)(int)) {};
- +void CALLBACK GPU__idle(void) {}
- #define LoadGpuSym1(dest, name) \
- LoadSym(GPU_##dest, GPU##dest, name, TRUE);
- @@ -241,6 +247,8 @@
- LoadGpuSym0(showScreenPic, "GPUshowScreenPic");
- LoadGpuSym0(clearDynarec, "GPUclearDynarec");
- LoadGpuSym0(vBlank, "GPUvBlank");
- + LoadGpuSym0(registerCallback, "GPUregisterCallback");
- + LoadGpuSym0(idle, "GPUidle");
- LoadGpuSym0(configure, "GPUconfigure");
- LoadGpuSym0(test, "GPUtest");
- LoadGpuSym0(about, "GPUabout");
- @@ -361,6 +369,7 @@
- return 0;
- }
- +#endif
- void *hPAD1Driver = NULL;
- void *hPAD2Driver = NULL;
- @@ -440,7 +449,7 @@
- return buf[bufc++];
- }
- -unsigned char CALLBACK PAD1__startPoll(int pad) {
- +unsigned char CALLBACK PAD1_startPoll(int pad) {
- PadDataS padd;
- PAD1_readPort1(&padd);
- @@ -448,7 +457,7 @@
- return _PADstartPoll(&padd);
- }
- -unsigned char CALLBACK PAD1__poll(unsigned char value) {
- +unsigned char CALLBACK PAD1_poll(unsigned char value) {
- return _PADpoll(value);
- }
- @@ -468,6 +477,7 @@
- LoadSym(PAD1_##dest, PAD##dest, name, FALSE); \
- if (PAD1_##dest == NULL) PAD1_##dest = (PAD##dest) PAD1__##dest;
- +#if 0
- static int LoadPAD1plugin(const char *PAD1dll) {
- void *drv;
- @@ -493,8 +503,9 @@
- return 0;
- }
- +#endif
- -unsigned char CALLBACK PAD2__startPoll(int pad) {
- +unsigned char CALLBACK PAD2_startPoll(int pad) {
- PadDataS padd;
- PAD2_readPort2(&padd);
- @@ -502,16 +513,17 @@
- return _PADstartPoll(&padd);
- }
- -unsigned char CALLBACK PAD2__poll(unsigned char value) {
- - return _PADpoll(value);
- +unsigned char CALLBACK PAD2_poll(unsigned char value) {
- + return 0xFF; //_PADpoll(value);
- }
- -long CALLBACK PAD2__configure(void) { return 0; }
- -void CALLBACK PAD2__about(void) {}
- -long CALLBACK PAD2__test(void) { return 0; }
- -long CALLBACK PAD2__query(void) { return PSE_PAD_USE_PORT1 | PSE_PAD_USE_PORT2; }
- -long CALLBACK PAD2__keypressed() { return 0; }
- +long CALLBACK PAD2_configure(void) { return 0; }
- +void CALLBACK PAD2_about(void) {}
- +long CALLBACK PAD2_test(void) { return 0; }
- +long CALLBACK PAD2_query(void) { return PSE_PAD_USE_PORT1 | PSE_PAD_USE_PORT2; }
- +long CALLBACK PAD2_keypressed() { return 0; }
- +#if 0
- #define LoadPad2Sym1(dest, name) \
- LoadSym(PAD2_##dest, PAD##dest, name, TRUE);
- @@ -547,15 +559,198 @@
- return 0;
- }
- +#endif
- +
- +
- +long PadFlags = 0;
- +
- +long PAD1_init(long flags) {
- + PadFlags |= flags;
- +
- + return 0;
- +}
- +
- +long PAD2_init(long flags) {
- + PadFlags |= flags;
- +
- + return 0;
- +}
- +
- +long PAD1_shutdown(void) {
- + return 0;
- +}
- +
- +
- +long PAD2_shutdown(void) {
- + return 0;
- +}
- +
- +
- +long PAD1_open(void)
- +{
- + return 0;
- +}
- +
- +
- +long PAD2_open(void)
- +{
- + return 0;
- +}
- +
- +
- +long PAD1_close(void) {
- + return 0;
- +}
- +
- +
- +long PAD2_close(void) {
- + return 0;
- +}
- +
- +u16 ReadZodKeys()
- +{
- + u16 pad_status = 0xffff;
- + u32 keys = gp2x_joystick_read();
- +
- +#ifdef PANDORA
- + if( keys & GP2X_PUSH && keys & GP2X_L ) // L2
- + {
- + keys |= GP2X_VOL_DOWN;
- + }
- + if( keys & GP2X_PUSH && keys & GP2X_R ) // R2
- + {
- + keys |= GP2X_VOL_UP;
- + }
- +#endif
- +
- + if( keys & GP2X_VOL_DOWN ) // L2
- + {
- + pad_status &= ~(1<<8);
- + }
- + if (keys & GP2X_L)
- + {
- + pad_status &= ~(1<<10); // L ?
- + }
- +
- + if( keys & GP2X_VOL_UP ) // R2
- + {
- + pad_status &= ~(1<<9);
- + }
- + if (keys & GP2X_R)
- + {
- + pad_status &= ~(1<<11); // R ?
- + }
- +
- + if (keys & GP2X_UP)
- + {
- + pad_status &= ~(1<<4);
- + }
- + if (keys & GP2X_DOWN)
- + {
- + pad_status &= ~(1<<6);
- + }
- + if (keys & GP2X_LEFT)
- + {
- + pad_status &= ~(1<<7);
- + }
- + if (keys & GP2X_RIGHT)
- + {
- + pad_status &= ~(1<<5);
- + }
- + if (keys & GP2X_START)
- + {
- + pad_status &= ~(1<<3);
- + }
- + if (keys & GP2X_SELECT)
- + {
- + pad_status &= ~(1);
- + }
- +
- + if (keys & GP2X_X)
- + {
- + pad_status &= ~(1<<14);
- + }
- + if (keys & GP2X_B)
- + {
- + pad_status &= ~(1<<13);
- + }
- + if (keys & GP2X_A)
- + {
- + pad_status &= ~(1<<15);
- + }
- + if (keys & GP2X_Y)
- + {
- + pad_status &= ~(1<<12);
- + }
- +
- +#if !defined(IPHONE) && !defined(ANDROID)
- + if( (keys & GP2X_L) && (keys & GP2X_R) && (keys & GP2X_X) && (keys & GP2X_Y) && (keys & GP2X_A) && (keys & GP2X_B) )
- + {
- + SysClose();
- + }
- + if( keys == GP2X_PUSH )
- + {
- + // Menu system
- + u32 w = gp2xscreen_width;
- + u32 h = gp2xscreen_height;
- + u32 isRGB24;
- +
- + gp2x_change_res(320, 240, 16);
- + gp2x_sound_thread_mute();
- +
- + if( 0 != SelectOptions() )
- + {
- + GPU_force_res_change = 1;
- + psx4all_emulating=1;
- + psxCpu->Execute();
- + psx4all_emulating=0;
- + }
- +#if !defined(ANDROID)
- + gp2x_sound_thread_play(NULL);
- +#endif
- + isRGB24 = (GPU_GP1 & 0x00200000 ? 32 : 0);
- + gp2x_change_res(w, h, isRGB24 ? 24 : 16);
- + }
- +#endif
- +
- + return pad_status;
- +}
- +
- +long PAD1_readPort1(PadDataS* pad) {
- + u16 pad_status = 0xffff;
- + //SysPrintf("start PAD1_readPort()\r\n");
- + pad_status = ReadZodKeys();
- + pad->buttonStatus = pad_status;
- + pad->controllerType = 4; // standard
- + return 0;
- +}
- +
- +long PAD2_readPort1(PadDataS* pad) {
- + u16 pad_status = 0xffff;
- + //SysPrintf("start PAD1_readPort()\r\n");
- + pad_status = 0xffff;
- + pad->buttonStatus = pad_status;
- + pad->controllerType = 4; // standard
- + return 0;
- +}
- +
- +long PAD1_readPort2(PadDataS* a) {
- + return -1;
- +}
- +
- +long PAD2_readPort2(PadDataS* a) {
- + return -1;
- +}
- void *hNETDriver = NULL;
- -void CALLBACK NET__setInfo(netInfo *info) {}
- -void CALLBACK NET__keypressed(int key) {}
- -long CALLBACK NET__configure(void) { return 0; }
- -long CALLBACK NET__test(void) { return 0; }
- -void CALLBACK NET__about(void) {}
- +void CALLBACK NET_setInfo(netInfo *info) {}
- +void CALLBACK NET_keypressed(int key) {}
- +long CALLBACK NET_configure(void) { return 0; }
- +long CALLBACK NET_test(void) { return 0; }
- +void CALLBACK NET_about(void) {}
- +#if 0
- #define LoadNetSym1(dest, name) \
- LoadSym(NET_##dest, NET##dest, name, TRUE);
- @@ -593,7 +788,9 @@
- return 0;
- }
- +#endif
- +#if 0
- #ifdef ENABLE_SIO1API
- void *hSIO1Driver = NULL;
- @@ -692,6 +889,7 @@
- }
- #endif
- +#endif
- void CALLBACK clearDynarec(void) {
- psxCpu->Reset();
- @@ -701,15 +899,18 @@
- int ret;
- char Plugin[MAXPATHLEN];
- - ReleasePlugins();
- + //ReleasePlugins();
- +
- + cdrIsoInit();
- +#if 0
- if (UsingIso()) {
- LoadCDRplugin(NULL);
- } else {
- sprintf(Plugin, "%s/%s", Config.PluginsDir, Config.Cdr);
- if (LoadCDRplugin(Plugin) == -1) return -1;
- }
- -
- +
- sprintf(Plugin, "%s/%s", Config.PluginsDir, Config.Gpu);
- if (LoadGPUplugin(Plugin) == -1) return -1;
- @@ -734,6 +935,7 @@
- sprintf(Plugin, "%s/%s", Config.PluginsDir, Config.Sio1);
- if (LoadSIO1plugin(Plugin) == -1) return -1;
- #endif
- +#endif
- ret = CDR_init();
- if (ret < 0) { SysMessage (_("Error initializing CD-ROM plugin: %d"), ret); return -1; }
- @@ -746,27 +948,82 @@
- ret = PAD2_init(2);
- if (ret < 0) { SysMessage (_("Error initializing Controller 2 plugin: %d"), ret); return -1; }
- +#if 0 // TEMP!!!
- if (Config.UseNet) {
- ret = NET_init();
- if (ret < 0) { SysMessage (_("Error initializing NetPlay plugin: %d"), ret); return -1; }
- }
- +#endif
- #ifdef ENABLE_SIO1API
- ret = SIO1_init();
- if (ret < 0) { SysMessage (_("Error initializing SIO1 plugin: %d"), ret); return -1; }
- #endif
- + ret = CDR_open();
- + if (ret < 0) { SysMessage (_("Error open CD-ROM plugin: %d"), ret); return -1; }
- + ret = GPU_open(NULL, NULL, NULL);
- + if (ret < 0) { SysMessage (_("Error open GPU plugin: %d"), ret); return -1; }
- + ret = SPU_open();
- + if (ret < 0) { SysMessage (_("Error open SPU plugin: %d"), ret); return -1; }
- + SPU_registerCallback(SPUirq);
- + ret = PAD1_open();
- + if (ret < 0) { SysMessage (_("Error open Controller 1 plugin: %d"), ret); return -1; }
- + ret = PAD2_open();
- + if (ret < 0) { SysMessage (_("Error open Controller 2 plugin: %d"), ret); return -1; }
- +
- +#if 0 // TEMP!!!
- + if (Config.UseNet) {
- + ret = NET_open(NULL);
- + if (ret < 0) { SysMessage (_("Error open plugin: %d"), ret); return -1; }
- + }
- +#endif
- +
- +#ifdef ENABLE_SIO1API
- + ret = SIO1_open();
- + if (ret < 0) { SysMessage (_("Error open SIO1 plugin: %d"), ret); return -1; }
- +#endif
- SysPrintf(_("Plugins loaded.\n"));
- return 0;
- }
- void ReleasePlugins() {
- + s32 ret;
- +#if 0 // TEMP!!!
- if (Config.UseNet) {
- - int ret = NET_close();
- + ret = NET_close();
- if (ret < 0) Config.UseNet = FALSE;
- }
- +#endif
- NetOpened = FALSE;
- + ret = CDR_close();
- + if (ret < 0) { SysMessage("Error Closing CDR Plugin"); }
- + ret = SPU_close();
- + if (ret < 0) { SysMessage("Error Closing SPU Plugin"); }
- + ret = PAD1_close();
- + if (ret < 0) { SysMessage("Error Closing PAD1 Plugin"); }
- + ret = PAD2_close();
- + if (ret < 0) { SysMessage("Error Closing PAD2 Plugin"); }
- + ret = GPU_close();
- + if (ret < 0) { SysMessage("Error Closing GPU Plugin"); }
- +
- +#ifdef ENABLE_SIO1API
- + ret = SIO1_close();
- + if (ret < 0) { SysMessage("Error Closing SIO1 Plugin"); }
- +#endif
- +
- + CDR_shutdown();
- + GPU_shutdown();
- + SPU_shutdown();
- + PAD1_shutdown();
- + PAD2_shutdown();
- +#ifdef ENABLE_SIO1API
- + SIO1_shutdown();
- +#endif
- +
- +#if 0
- +
- if (hCDRDriver != NULL || cdrIsoActive()) CDR_shutdown();
- if (hGPUDriver != NULL) GPU_shutdown();
- if (hSPUDriver != NULL) SPU_shutdown();
- @@ -792,23 +1049,7 @@
- hSIO1Driver = NULL;
- }
- #endif
- -}
- -
- -// for CD swap
- -int ReloadCdromPlugin()
- -{
- - if (hCDRDriver != NULL || cdrIsoActive()) CDR_shutdown();
- - if (hCDRDriver != NULL) SysCloseLibrary(hCDRDriver); hCDRDriver = NULL;
- -
- - if (UsingIso()) {
- - LoadCDRplugin(NULL);
- - } else {
- - char Plugin[MAXPATHLEN];
- - sprintf(Plugin, "%s/%s", Config.PluginsDir, Config.Cdr);
- - if (LoadCDRplugin(Plugin) == -1) return -1;
- - }
- -
- - return CDR_init();
- +#endif
- }
- void SetIsoFile(const char *filename) {
- diff -u -r pcsx_rearmed/libpcsxcore/plugins.h libpsx/project/jni/libpcsxcore/plugins.h
- --- pcsx_rearmed/libpcsxcore/plugins.h Tue Jan 10 12:44:37 2012
- +++ libpsx/project/jni/libpcsxcore/plugins.h Mon Jan 9 18:42:14 2012
- @@ -33,11 +33,11 @@
- typedef void* HWND;
- #define CALLBACK
- -typedef long (*GPUopen)(unsigned long *, char *, char *);
- -typedef long (*SPUopen)(void);
- -typedef long (*PADopen)(unsigned long *);
- -typedef long (*NETopen)(unsigned long *);
- -typedef long (*SIO1open)(unsigned long *);
- +long GPU_open(unsigned long *, char *, char *);
- +long SPU_open(void);
- +long PAD_open(unsigned long *);
- +long NET_open(unsigned long *);
- +long SIO1_open(unsigned long *);
- #else
- @@ -62,88 +62,97 @@
- void ClosePlugins();
- int ReloadCdromPlugin();
- -typedef unsigned long (CALLBACK* PSEgetLibType)(void);
- -typedef unsigned long (CALLBACK* PSEgetLibVersion)(void);
- -typedef char *(CALLBACK* PSEgetLibName)(void);
- +unsigned long PSEgetLibType(void);
- +unsigned long PSEgetLibVersion(void);
- +char *PSEgetLibName(void);
- // GPU Functions
- -typedef long (CALLBACK* GPUinit)(void);
- -typedef long (CALLBACK* GPUshutdown)(void);
- -typedef long (CALLBACK* GPUclose)(void);
- -typedef void (CALLBACK* GPUwriteStatus)(uint32_t);
- -typedef void (CALLBACK* GPUwriteData)(uint32_t);
- -typedef void (CALLBACK* GPUwriteDataMem)(uint32_t *, int);
- -typedef uint32_t (CALLBACK* GPUreadStatus)(void);
- -typedef uint32_t (CALLBACK* GPUreadData)(void);
- -typedef void (CALLBACK* GPUreadDataMem)(uint32_t *, int);
- -typedef long (CALLBACK* GPUdmaChain)(uint32_t *,uint32_t);
- -typedef void (CALLBACK* GPUupdateLace)(void);
- -typedef long (CALLBACK* GPUconfigure)(void);
- -typedef long (CALLBACK* GPUtest)(void);
- -typedef void (CALLBACK* GPUabout)(void);
- -typedef void (CALLBACK* GPUmakeSnapshot)(void);
- -typedef void (CALLBACK* GPUkeypressed)(int);
- -typedef void (CALLBACK* GPUdisplayText)(char *);
- +long GPU_init(void);
- +long GPU_shutdown(void);
- +long GPU_close(void);
- +void GPU_writeStatus(uint32_t);
- +void GPU_writeData(uint32_t);
- +void GPU_writeDataMem(uint32_t *, int);
- +uint32_t GPU_readStatus(void);
- +uint32_t GPU_readData(void);
- +void GPU_readDataMem(uint32_t *, int);
- +long GPU_dmaChain(uint32_t *,uint32_t);
- +long GPU_configure(void);
- +long GPU_test(void);
- +void GPU_about(void);
- +void GPU_makeSnapshot(void);
- +void GPU_keypressed(int);
- +void GPU_displayText(char *);
- +#if 0
- typedef struct {
- uint32_t ulFreezeVersion;
- uint32_t ulStatus;
- uint32_t ulControl[256];
- unsigned char psxVRam[1024*512*2];
- } GPUFreeze_t;
- -typedef long (CALLBACK* GPUfreeze)(uint32_t, GPUFreeze_t *);
- -typedef long (CALLBACK* GPUgetScreenPic)(unsigned char *);
- -typedef long (CALLBACK* GPUshowScreenPic)(unsigned char *);
- -typedef void (CALLBACK* GPUclearDynarec)(void (CALLBACK *callback)(void));
- -typedef void (CALLBACK* GPUvBlank)(int);
- -
- -// GPU function pointers
- -extern GPUupdateLace GPU_updateLace;
- -extern GPUinit GPU_init;
- -extern GPUshutdown GPU_shutdown;
- -extern GPUconfigure GPU_configure;
- -extern GPUtest GPU_test;
- -extern GPUabout GPU_about;
- -extern GPUopen GPU_open;
- -extern GPUclose GPU_close;
- -extern GPUreadStatus GPU_readStatus;
- -extern GPUreadData GPU_readData;
- -extern GPUreadDataMem GPU_readDataMem;
- -extern GPUwriteStatus GPU_writeStatus;
- -extern GPUwriteData GPU_writeData;
- -extern GPUwriteDataMem GPU_writeDataMem;
- -extern GPUdmaChain GPU_dmaChain;
- -extern GPUkeypressed GPU_keypressed;
- -extern GPUdisplayText GPU_displayText;
- -extern GPUmakeSnapshot GPU_makeSnapshot;
- -extern GPUfreeze GPU_freeze;
- -extern GPUgetScreenPic GPU_getScreenPic;
- -extern GPUshowScreenPic GPU_showScreenPic;
- -extern GPUclearDynarec GPU_clearDynarec;
- -extern GPUvBlank GPU_vBlank;
- +long GPU_freeze(uint32_t, GPUFreeze_t *);
- +#else
- +typedef struct GPUFreeze_t
- +{
- + u32 ulFreezeVersion;
- + u32 GP1;
- + u32 Control[256];
- + u8 FrameBuffer[0x100000];
- + ///////////////////////////////////////////////////////////////////////////////
- + // Display status
- + s32 isPAL;
- + u32 isDisplaySet;
- + u32 DisplayArea [8];
- + u32 DirtyArea [4];
- + u32 LastDirtyArea [4];
- + u32 CheckArea [4];
- +
- + ///////////////////////////////////////////////////////////////////////////////
- + // Rasterizer status
- + u32 TextureWindow [4];
- + u32 DrawingArea [4];
- + u32 DrawingOffset [2];
- + u32 MaskU;
- + u32 MaskV;
- +
- + ///////////////////////////////////////////////////////////////////////////////
- + // Rasterizer status
- + u8 Masking;
- + u16 PixelMSB;
- + int vBlank;
- +} GPUFreeze_t;
- +long GPU_freeze(uint32_t, GPUFreeze_t *);
- +#endif
- +long GPU_getScreenPic(unsigned char *);
- +long GPU_showScreenPic(unsigned char *);
- +void GPU_clearDynarec(void (CALLBACK *callback)(void));
- +void GPU_vBlank(int);
- +void GPU_registerCallback(void (CALLBACK *callback)(int));
- +void GPU_idle(void);
- // CD-ROM Functions
- -typedef long (CALLBACK* CDRinit)(void);
- -typedef long (CALLBACK* CDRshutdown)(void);
- -typedef long (CALLBACK* CDRopen)(void);
- -typedef long (CALLBACK* CDRclose)(void);
- -typedef long (CALLBACK* CDRgetTN)(unsigned char *);
- -typedef long (CALLBACK* CDRgetTD)(unsigned char, unsigned char *);
- -typedef long (CALLBACK* CDRreadTrack)(unsigned char *);
- -typedef unsigned char* (CALLBACK* CDRgetBuffer)(void);
- -typedef unsigned char* (CALLBACK* CDRgetBufferSub)(void);
- -typedef long (CALLBACK* CDRconfigure)(void);
- -typedef long (CALLBACK* CDRtest)(void);
- -typedef void (CALLBACK* CDRabout)(void);
- -typedef long (CALLBACK* CDRplay)(unsigned char *);
- -typedef long (CALLBACK* CDRstop)(void);
- -typedef long (CALLBACK* CDRsetfilename)(char *);
- +long CDR_init(void);
- +long CDR_shutdown(void);
- +long CDR_open(void);
- +long CDR_close(void);
- +long CDR_getTN(unsigned char *);
- +long CDR_getTD(unsigned char, unsigned char *);
- +long CDR_readTrack(unsigned char *);
- +unsigned char* CDR_getBuffer(void);
- +unsigned char* CDR_getBufferSub(void);
- +long CDR_configure(void);
- +long CDR_test(void);
- +void CDR_about(void);
- +long CDR_play(unsigned char *);
- +long CDR_stop(void);
- +long CDR_setfilename(char *);
- struct CdrStat {
- uint32_t Type;
- uint32_t Status;
- unsigned char Time[3];
- };
- -typedef long (CALLBACK* CDRgetStatus)(struct CdrStat *);
- -typedef char* (CALLBACK* CDRgetDriveLetter)(void);
- +long CDR_getStatus(struct CdrStat *);
- +char* CDR_getDriveLetter(void);
- struct SubQ {
- char res0[12];
- unsigned char ControlAndADR;
- @@ -155,46 +164,26 @@
- unsigned char CRC[2];
- char res1[72];
- };
- -typedef long (CALLBACK* CDRreadCDDA)(unsigned char, unsigned char, unsigned char, unsigned char *);
- -typedef long (CALLBACK* CDRgetTE)(unsigned char, unsigned char *, unsigned char *, unsigned char *);
- -
- -// CD-ROM function pointers
- -extern CDRinit CDR_init;
- -extern CDRshutdown CDR_shutdown;
- -extern CDRopen CDR_open;
- -extern CDRclose CDR_close;
- -extern CDRtest CDR_test;
- -extern CDRgetTN CDR_getTN;
- -extern CDRgetTD CDR_getTD;
- -extern CDRreadTrack CDR_readTrack;
- -extern CDRgetBuffer CDR_getBuffer;
- -extern CDRgetBufferSub CDR_getBufferSub;
- -extern CDRplay CDR_play;
- -extern CDRstop CDR_stop;
- -extern CDRgetStatus CDR_getStatus;
- -extern CDRgetDriveLetter CDR_getDriveLetter;
- -extern CDRconfigure CDR_configure;
- -extern CDRabout CDR_about;
- -extern CDRsetfilename CDR_setfilename;
- -extern CDRreadCDDA CDR_readCDDA;
- -extern CDRgetTE CDR_getTE;
- +long CDR_readCDDA(unsigned char, unsigned char, unsigned char, unsigned char *);
- +long CDR_getTE(unsigned char, unsigned char *, unsigned char *, unsigned char *);
- // SPU Functions
- -typedef long (CALLBACK* SPUinit)(void);
- -typedef long (CALLBACK* SPUshutdown)(void);
- -typedef long (CALLBACK* SPUclose)(void);
- -typedef void (CALLBACK* SPUplaySample)(unsigned char);
- -typedef void (CALLBACK* SPUwriteRegister)(unsigned long, unsigned short);
- -typedef unsigned short (CALLBACK* SPUreadRegister)(unsigned long);
- -typedef void (CALLBACK* SPUwriteDMA)(unsigned short);
- -typedef unsigned short (CALLBACK* SPUreadDMA)(void);
- -typedef void (CALLBACK* SPUwriteDMAMem)(unsigned short *, int);
- -typedef void (CALLBACK* SPUreadDMAMem)(unsigned short *, int);
- -typedef void (CALLBACK* SPUplayADPCMchannel)(xa_decode_t *);
- -typedef void (CALLBACK* SPUregisterCallback)(void (CALLBACK *callback)(void));
- -typedef long (CALLBACK* SPUconfigure)(void);
- -typedef long (CALLBACK* SPUtest)(void);
- -typedef void (CALLBACK* SPUabout)(void);
- +long SPU_init(void);
- +long SPU_shutdown(void);
- +long SPU_close(void);
- +void SPU_playSample(unsigned char);
- +void SPU_writeRegister(unsigned long, unsigned short);
- +unsigned short SPU_readRegister(unsigned long);
- +void SPU_writeDMA(unsigned short);
- +unsigned short SPU_readDMA(void);
- +void SPU_writeDMAMem(unsigned short *, int);
- +void SPU_readDMAMem(unsigned short *, int);
- +void SPU_playADPCMchannel(xa_decode_t *);
- +void SPU_registerCallback(void (CALLBACK *callback)(void));
- +long SPU_configure(void);
- +long SPU_test(void);
- +void SPU_about(void);
- +/*
- typedef struct {
- unsigned char PluginName[8];
- uint32_t PluginVersion;
- @@ -204,98 +193,86 @@
- xa_decode_t xa;
- unsigned char *SPUInfo;
- } SPUFreeze_t;
- -typedef long (CALLBACK* SPUfreeze)(uint32_t, SPUFreeze_t *);
- -typedef void (CALLBACK* SPUasync)(uint32_t);
- -typedef void (CALLBACK* SPUplayCDDAchannel)(short *, int);
- -
- -// SPU function pointers
- -extern SPUconfigure SPU_configure;
- -extern SPUabout SPU_about;
- -extern SPUinit SPU_init;
- -extern SPUshutdown SPU_shutdown;
- -extern SPUtest SPU_test;
- -extern SPUopen SPU_open;
- -extern SPUclose SPU_close;
- -extern SPUplaySample SPU_playSample;
- -extern SPUwriteRegister SPU_writeRegister;
- -extern SPUreadRegister SPU_readRegister;
- -extern SPUwriteDMA SPU_writeDMA;
- -extern SPUreadDMA SPU_readDMA;
- -extern SPUwriteDMAMem SPU_writeDMAMem;
- -extern SPUreadDMAMem SPU_readDMAMem;
- -extern SPUplayADPCMchannel SPU_playADPCMchannel;
- -extern SPUfreeze SPU_freeze;
- -extern SPUregisterCallback SPU_registerCallback;
- -extern SPUasync SPU_async;
- -extern SPUplayCDDAchannel SPU_playCDDAchannel;
- +*/
- +/*typedef struct
- +{
- + char szSPUName[8];
- + unsigned long ulFreezeVersion;
- + unsigned long ulFreezeSize;
- + unsigned char cSPUPort[0x200];
- + unsigned char cSPURam[0x80000];
- + xa_decode_t xaS;
- + u32 Addr;
- +} SPUFreeze_t;*/
- +typedef struct
- +{
- + char szSPUName[8];
- + uint32_t ulFreezeVersion;
- + uint32_t ulFreezeSize;
- + unsigned char cSPUPort[0x200];
- + unsigned char cSPURam[0x80000];
- + xa_decode_t xaS;
- + unsigned char *SPUInfo;
- +} SPUFreeze_t;
- +long SPU_freeze(uint32_t, SPUFreeze_t *);
- +void SPU_async(uint32_t);
- +void SPU_playCDDAchannel(short *, int);
- // PAD Functions
- -typedef long (CALLBACK* PADconfigure)(void);
- -typedef void (CALLBACK* PADabout)(void);
- -typedef long (CALLBACK* PADinit)(long);
- -typedef long (CALLBACK* PADshutdown)(void);
- -typedef long (CALLBACK* PADtest)(void);
- -typedef long (CALLBACK* PADclose)(void);
- -typedef long (CALLBACK* PADquery)(void);
- -typedef long (CALLBACK* PADreadPort1)(PadDataS*);
- -typedef long (CALLBACK* PADreadPort2)(PadDataS*);
- -typedef long (CALLBACK* PADkeypressed)(void);
- -typedef unsigned char (CALLBACK* PADstartPoll)(int);
- -typedef unsigned char (CALLBACK* PADpoll)(unsigned char);
- -typedef void (CALLBACK* PADsetSensitive)(int);
- -
- -// PAD function pointers
- -extern PADconfigure PAD1_configure;
- -extern PADabout PAD1_about;
- -extern PADinit PAD1_init;
- -extern PADshutdown PAD1_shutdown;
- -extern PADtest PAD1_test;
- -extern PADopen PAD1_open;
- -extern PADclose PAD1_close;
- -extern PADquery PAD1_query;
- -extern PADreadPort1 PAD1_readPort1;
- -extern PADkeypressed PAD1_keypressed;
- -extern PADstartPoll PAD1_startPoll;
- -extern PADpoll PAD1_poll;
- -extern PADsetSensitive PAD1_setSensitive;
- -
- -extern PADconfigure PAD2_configure;
- -extern PADabout PAD2_about;
- -extern PADinit PAD2_init;
- -extern PADshutdown PAD2_shutdown;
- -extern PADtest PAD2_test;
- -extern PADopen PAD2_open;
- -extern PADclose PAD2_close;
- -extern PADquery PAD2_query;
- -extern PADreadPort2 PAD2_readPort2;
- -extern PADkeypressed PAD2_keypressed;
- -extern PADstartPoll PAD2_startPoll;
- -extern PADpoll PAD2_poll;
- -extern PADsetSensitive PAD2_setSensitive;
- +long PAD1_configure(void);
- +void PAD1_about(void);
- +long PAD1_init(long);
- +long PAD1_shutdown(void);
- +long PAD1_test(void);
- +long PAD1_close(void);
- +long PAD1_query(void);
- +long PAD1_readPort1(PadDataS*);
- +long PAD1_readPort2(PadDataS*);
- +long PAD1_keypressed(void);
- +unsigned char PAD1_startPoll(int);
- +unsigned char PAD1_poll(unsigned char);
- +void PAD1_setSensitive(int);
- +long PAD1_open(void);
- +
- +// PAD Functions
- +long PAD2_configure(void);
- +void PAD2_about(void);
- +long PAD2_init(long);
- +long PAD2_shutdown(void);
- +long PAD2_test(void);
- +long PAD2_close(void);
- +long PAD2_query(void);
- +long PAD2_readPort1(PadDataS*);
- +long PAD2_readPort2(PadDataS*);
- +long PAD2_keypressed(void);
- +unsigned char PAD2_startPoll(int);
- +unsigned char PAD2_poll(unsigned char);
- +void PAD2_setSensitive(int);
- +long PAD2_open(void);
- // NET Functions
- -typedef long (CALLBACK* NETinit)(void);
- -typedef long (CALLBACK* NETshutdown)(void);
- -typedef long (CALLBACK* NETclose)(void);
- -typedef long (CALLBACK* NETconfigure)(void);
- -typedef long (CALLBACK* NETtest)(void);
- -typedef void (CALLBACK* NETabout)(void);
- -typedef void (CALLBACK* NETpause)(void);
- -typedef void (CALLBACK* NETresume)(void);
- -typedef long (CALLBACK* NETqueryPlayer)(void);
- -typedef long (CALLBACK* NETsendData)(void *, int, int);
- -typedef long (CALLBACK* NETrecvData)(void *, int, int);
- -typedef long (CALLBACK* NETsendPadData)(void *, int);
- -typedef long (CALLBACK* NETrecvPadData)(void *, int);
- +long NET_init(void);
- +long NET_shutdown(void);
- +long NET_close(void);
- +long NET_configure(void);
- +long NET_test(void);
- +void NET_about(void);
- +void NET_pause(void);
- +void NET_resume(void);
- +long NET_queryPlayer(void);
- +long NET_sendData(void *, int, int);
- +long NET_recvData(void *, int, int);
- +long NET_sendPadData(void *, int);
- +long NET_recvPadData(void *, int);
- typedef struct {
- char EmuName[32];
- char CdromID[9]; // ie. 'SCPH12345', no \0 trailing character
- char CdromLabel[11];
- void *psxMem;
- - GPUshowScreenPic GPU_showScreenPic;
- - GPUdisplayText GPU_displayText;
- - PADsetSensitive PAD_setSensitive;
- + //GPUshowScreenPic GPU_showScreenPic;
- + //GPUdisplayText GPU_displayText;
- + //PADsetSensitive PAD_setSensitive;
- char GPUpath[256]; // paths must be absolute
- char SPUpath[256];
- char CDRpath[256];
- @@ -305,101 +282,50 @@
- char Unused[1024];
- } netInfo;
- -typedef long (CALLBACK* NETsetInfo)(netInfo *);
- -typedef long (CALLBACK* NETkeypressed)(int);
- -
- -// NET function pointers
- -extern NETinit NET_init;
- -extern NETshutdown NET_shutdown;
- -extern NETopen NET_open;
- -extern NETclose NET_close;
- -extern NETtest NET_test;
- -extern NETconfigure NET_configure;
- -extern NETabout NET_about;
- -extern NETpause NET_pause;
- -extern NETresume NET_resume;
- -extern NETqueryPlayer NET_queryPlayer;
- -extern NETsendData NET_sendData;
- -extern NETrecvData NET_recvData;
- -extern NETsendPadData NET_sendPadData;
- -extern NETrecvPadData NET_recvPadData;
- -extern NETsetInfo NET_setInfo;
- -extern NETkeypressed NET_keypressed;
- +void NET_setInfo(netInfo *);
- +void NET_keypressed(int);
- #ifdef ENABLE_SIO1API
- // SIO1 Functions (link cable)
- -typedef long (CALLBACK* SIO1init)(void);
- -typedef long (CALLBACK* SIO1shutdown)(void);
- -typedef long (CALLBACK* SIO1close)(void);
- -typedef long (CALLBACK* SIO1configure)(void);
- -typedef long (CALLBACK* SIO1test)(void);
- -typedef void (CALLBACK* SIO1about)(void);
- -typedef void (CALLBACK* SIO1pause)(void);
- -typedef void (CALLBACK* SIO1resume)(void);
- -typedef long (CALLBACK* SIO1keypressed)(int);
- -typedef void (CALLBACK* SIO1writeData8)(unsigned char);
- -typedef void (CALLBACK* SIO1writeData16)(unsigned short);
- -typedef void (CALLBACK* SIO1writeData32)(unsigned long);
- -typedef void (CALLBACK* SIO1writeStat16)(unsigned short);
- -typedef void (CALLBACK* SIO1writeStat32)(unsigned long);
- -typedef void (CALLBACK* SIO1writeMode16)(unsigned short);
- -typedef void (CALLBACK* SIO1writeMode32)(unsigned long);
- -typedef void (CALLBACK* SIO1writeCtrl16)(unsigned short);
- -typedef void (CALLBACK* SIO1writeCtrl32)(unsigned long);
- -typedef void (CALLBACK* SIO1writeBaud16)(unsigned short);
- -typedef void (CALLBACK* SIO1writeBaud32)(unsigned long);
- -typedef unsigned char (CALLBACK* SIO1readData8)(void);
- -typedef unsigned short (CALLBACK* SIO1readData16)(void);
- -typedef unsigned long (CALLBACK* SIO1readData32)(void);
- -typedef unsigned short (CALLBACK* SIO1readStat16)(void);
- -typedef unsigned long (CALLBACK* SIO1readStat32)(void);
- -typedef unsigned short (CALLBACK* SIO1readMode16)(void);
- -typedef unsigned long (CALLBACK* SIO1readMode32)(void);
- -typedef unsigned short (CALLBACK* SIO1readCtrl16)(void);
- -typedef unsigned long (CALLBACK* SIO1readCtrl32)(void);
- -typedef unsigned short (CALLBACK* SIO1readBaud16)(void);
- -typedef unsigned long (CALLBACK* SIO1readBaud32)(void);
- -typedef void (CALLBACK* SIO1registerCallback)(void (CALLBACK *callback)(void));
- -
- -// SIO1 function pointers
- -extern SIO1init SIO1_init;
- -extern SIO1shutdown SIO1_shutdown;
- -extern SIO1open SIO1_open;
- -extern SIO1close SIO1_close;
- -extern SIO1test SIO1_test;
- -extern SIO1configure SIO1_configure;
- -extern SIO1about SIO1_about;
- -extern SIO1pause SIO1_pause;
- -extern SIO1resume SIO1_resume;
- -extern SIO1keypressed SIO1_keypressed;
- -extern SIO1writeData8 SIO1_writeData8;
- -extern SIO1writeData16 SIO1_writeData16;
- -extern SIO1writeData32 SIO1_writeData32;
- -extern SIO1writeStat16 SIO1_writeStat16;
- -extern SIO1writeStat32 SIO1_writeStat32;
- -extern SIO1writeMode16 SIO1_writeMode16;
- -extern SIO1writeMode32 SIO1_writeMode32;
- -extern SIO1writeCtrl16 SIO1_writeCtrl16;
- -extern SIO1writeCtrl32 SIO1_writeCtrl32;
- -extern SIO1writeBaud16 SIO1_writeBaud16;
- -extern SIO1writeBaud32 SIO1_writeBaud32;
- -extern SIO1readData8 SIO1_readData8;
- -extern SIO1readData16 SIO1_readData16;
- -extern SIO1readData32 SIO1_readData32;
- -extern SIO1readStat16 SIO1_readStat16;
- -extern SIO1readStat32 SIO1_readStat32;
- -extern SIO1readMode16 SIO1_readMode16;
- -extern SIO1readMode32 SIO1_readMode32;
- -extern SIO1readCtrl16 SIO1_readCtrl16;
- -extern SIO1readCtrl32 SIO1_readCtrl32;
- -extern SIO1readBaud16 SIO1_readBaud16;
- -extern SIO1readBaud32 SIO1_readBaud32;
- -extern SIO1registerCallback SIO1_registerCallback;
- +long SIO1_init(void);
- +long SIO1_shutdown(void);
- +long SIO1_close(void);
- +long SIO1_configure(void);
- +long SIO1_test(void);
- +void SIO1_about(void);
- +void SIO1_pause(void);
- +void SIO1_resume(void);
- +long SIO1_keypressed(int);
- +void SIO1_writeData8(unsigned char);
- +void SIO1_writeData16(unsigned short);
- +void SIO1_writeData32(unsigned long);
- +void SIO1_writeStat16(unsigned short);
- +void SIO1_writeStat32(unsigned long);
- +void SIO1_writeMode16(unsigned short);
- +void SIO1_writeMode32(unsigned long);
- +void SIO1_writeCtrl16(unsigned short);
- +void SIO1_writeCtrl32(unsigned long);
- +void SIO1_writeBaud16(unsigned short);
- +void SIO1_writeBaud32(unsigned long);
- +unsigned char SIO1_readData8(void);
- +unsigned short SIO1_readData16(void);
- +unsigned long SIO1_readData32(void);
- +unsigned short SIO1_readStat16(void);
- +unsigned long SIO1_readStat32(void);
- +unsigned short SIO1_readMode16(void);
- +unsigned long SIO1_readMode32(void);
- +unsigned short SIO1_readCtrl16(void);
- +unsigned long SIO1_readCtrl32(void);
- +unsigned short SIO1_readBaud16(void);
- +unsigned long SIO1_readBaud32(void);
- +void SIO1_registerCallback(void (CALLBACK *callback)(void));
- #endif
- void CALLBACK clearDynarec(void);
- +
- +void CALLBACK GPU_busy( int ticks );
- void SetIsoFile(const char *filename);
- const char *GetIsoFile(void);
- Only in pcsx_rearmed/libpcsxcore: ppc
- diff -u -r pcsx_rearmed/libpcsxcore/psxbios.c libpsx/project/jni/libpcsxcore/psxbios.c
- --- pcsx_rearmed/libpcsxcore/psxbios.c Tue Jan 10 12:44:37 2012
- +++ libpsx/project/jni/libpcsxcore/psxbios.c Mon Jan 9 18:42:14 2012
- @@ -2673,7 +2673,7 @@
- PAD1_poll(0);
- data = PAD1_poll(0) << 8;
- data |= PAD1_poll(0);
- -
- +#if 0
- if (NET_sendPadData(&data, 2) == -1)
- netError();
- @@ -2681,11 +2681,12 @@
- netError();
- if (NET_recvPadData(&((u16*)buf)[1], 2) == -1)
- netError();
- +#endif
- }
- }
- if (Config.UseNet && pad_buf1 != NULL && pad_buf2 != NULL) {
- psxBios_PADpoll(1);
- -
- +#if 0
- if (NET_sendPadData(pad_buf1, i) == -1)
- netError();
- @@ -2693,6 +2694,7 @@
- netError();
- if (NET_recvPadData(pad_buf2, 2) == -1)
- netError();
- +#endif
- } else {
- if (pad_buf1) {
- psxBios_PADpoll(1);
- diff -u -r pcsx_rearmed/libpcsxcore/psxcommon.c libpsx/project/jni/libpcsxcore/psxcommon.c
- --- pcsx_rearmed/libpcsxcore/psxcommon.c Tue Jan 10 12:46:33 2012
- +++ libpsx/project/jni/libpcsxcore/psxcommon.c Mon Jan 9 18:42:14 2012
- @@ -26,6 +26,9 @@
- PcsxConfig Config;
- boolean NetOpened = FALSE;
- +unsigned int bias_cycle = 3;
- +unsigned int bias_vsync = 2;
- +int cdrom_precise = 0;
- int Log = 0;
- FILE *emuLog = NULL;
- @@ -57,7 +60,7 @@
- SysUpdate();
- ApplyCheats();
- - pl_frame_limit();
- + //pl_frame_limit();
- }
- void __Log(char *fmt, ...) {
- diff -u -r pcsx_rearmed/libpcsxcore/psxcommon.h libpsx/project/jni/libpcsxcore/psxcommon.h
- --- pcsx_rearmed/libpcsxcore/psxcommon.h Tue Jan 10 12:44:37 2012
- +++ libpsx/project/jni/libpcsxcore/psxcommon.h Mon Jan 9 18:42:14 2012
- @@ -71,7 +71,9 @@
- #include "system.h"
- #include "debug.h"
- -#if defined (__LINUX__) || defined (__MACOSX__)
- +#include "gpuAPI/gpuAPI.h"
- +
- +#if defined (__LINUX__) || defined (__MACOSX__) || defined(ANDROID) || defined(IPHONE)
- #define strnicmp strncasecmp
- #endif
- #define __inline inline
- @@ -135,7 +137,11 @@
- } PcsxConfig;
- extern PcsxConfig Config;
- +extern int psx4all_emulating;
- extern boolean NetOpened;
- +extern unsigned int bias_cycle;
- +extern unsigned int bias_vsync;
- +extern int cdrom_precise;
- #define gzfreeze(ptr, size) { \
- if (Mode == 1) gzwrite(f, ptr, size); \
- @@ -145,7 +151,9 @@
- // Make the timing events trigger faster as we are currently assuming everything
- // takes one cycle, which is not the case on real hardware.
- // FIXME: Count the proper cycle and get rid of this
- -#define BIAS 2
- +#define BIAS_CYCLE bias_cycle
- +#define BIAS_VSYNC bias_vsync
- +#define BIAS bias_cycle
- #define PSXCLK 33868800 /* 33.8688 MHz */
- enum {
- diff -u -r pcsx_rearmed/libpcsxcore/psxhw.c libpsx/project/jni/libpcsxcore/psxhw.c
- --- pcsx_rearmed/libpcsxcore/psxhw.c Tue Jan 10 12:44:37 2012
- +++ libpsx/project/jni/libpcsxcore/psxhw.c Mon Jan 9 18:42:14 2012
- @@ -728,13 +728,13 @@
- psxRcntWtarget(2, value & 0xffff); return;
- default:
- - // Dukes of Hazard 2 - car engine noise
- - if (add>=0x1f801c00 && add<0x1f801e00) {
- - SPU_writeRegister(add, value&0xffff);
- - SPU_writeRegister(add + 2, value>>16);
- - return;
- - }
- -
- + // Dukes of Hazard 2 - car engine noise
- + if (add>=0x1f801c00 && add<0x1f801e00) {
- + SPU_writeRegister(add, value&0xffff);
- + SPU_writeRegister(add + 2, value>>16);
- + return;
- + }
- +
- psxHu32ref(add) = SWAPu32(value);
- #ifdef PSXHW_LOG
- PSXHW_LOG("*Unknown 32bit write at address %x value %x\n", add, value);
- diff -u -r pcsx_rearmed/libpcsxcore/psxmem.c libpsx/project/jni/libpcsxcore/psxmem.c
- --- pcsx_rearmed/libpcsxcore/psxmem.c Tue Jan 10 11:06:59 2012
- +++ libpsx/project/jni/libpcsxcore/psxmem.c Mon Jan 9 18:42:14 2012
- @@ -67,17 +67,20 @@
- memset(psxMemRLUT, 0, 0x10000 * sizeof(void *));
- memset(psxMemWLUT, 0, 0x10000 * sizeof(void *));
- - psxM = mmap((void *)0x80000000, 0x00220000,
- - PROT_WRITE | PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
- + psxM = mmap((void *)0x80000000, 0x00220000, PROT_WRITE | PROT_READ, MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
- + //(s8 *)malloc(0x00220000);
- psxP = &psxM[0x200000];
- psxH = &psxM[0x210000];
- - psxR = mmap((void *)0x9fc00000, 0x80000,
- - PROT_WRITE | PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
- -
- + psxR = mmap((void *)0x9fc00000, 0x80000, PROT_WRITE | PROT_READ, MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
- + //(s8 *)malloc(0x80000);
- +
- if (psxMemRLUT == NULL || psxMemWLUT == NULL ||
- - psxM != (void *)0x80000000 || psxR != (void *)0x9fc00000 ||
- + //psxM == NULL ||
- + //psxR == NULL ||
- + psxM != (void *)0x80000000 ||
- + psxR != (void *)0x9fc00000 ||
- psxP == NULL || psxH == NULL) {
- SysMessage(_("Error allocating memory!"));
- return -1;
- @@ -133,9 +136,13 @@
- }
- void psxMemShutdown() {
- + //free(psxM);
- + //free(psxR);
- munmap(psxM, 0x00220000);
- munmap(psxR, 0x80000);
- + mmap((void *)0x80000000, 0x00220000, PROT_WRITE | PROT_READ | PROT_EXEC, MAP_FIXED | MAP_SHARED | MAP_ANONYMOUS, -1, 0);
- +
- free(psxMemRLUT);
- free(psxMemWLUT);
- }
- diff -u -r pcsx_rearmed/libpcsxcore/r3000a.c libpsx/project/jni/libpcsxcore/r3000a.c
- --- pcsx_rearmed/libpcsxcore/r3000a.c Tue Jan 10 12:44:37 2012
- +++ libpsx/project/jni/libpcsxcore/r3000a.c Mon Jan 9 18:42:14 2012
- @@ -26,8 +26,12 @@
- #include "mdec.h"
- #include "gte.h"
- +#ifdef ANDROID
- +int check_paused();
- +#endif
- +
- R3000Acpu *psxCpu = NULL;
- -psxRegisters psxRegs;
- +//psxRegisters psxRegs;
- int psxInit() {
- SysPrintf(_("Running PCSX Version %s (%s).\n"), PACKAGE_VERSION, __DATE__);
- @@ -226,7 +230,7 @@
- }
- void psxExecuteBios() {
- - while (psxRegs.pc != 0x80030000)
- + while (psxRegs.pc != 0x80030000 && psx4all_emulating)
- psxCpu->ExecuteBlock();
- }
- diff -u -r pcsx_rearmed/libpcsxcore/r3000a.h libpsx/project/jni/libpcsxcore/r3000a.h
- --- pcsx_rearmed/libpcsxcore/r3000a.h Tue Jan 10 10:53:14 2012
- +++ libpsx/project/jni/libpcsxcore/r3000a.h Mon Jan 9 18:42:14 2012
- @@ -40,9 +40,11 @@
- extern R3000Acpu *psxCpu;
- extern R3000Acpu psxInt;
- -#if (defined(__x86_64__) || defined(__i386__) || defined(__sh__) || defined(__ppc__) || defined(__arm__)) && !defined(NOPSXREC)
- +#if ((defined(__x86_64__) || defined(__i386__) || defined(__sh__) || defined(__ppc__)) && !defined(NOPSXREC)) || defined(PSXREC)
- extern R3000Acpu psxRec;
- +#ifndef PSXREC
- #define PSXREC
- +#endif
- #endif
- typedef union {
- diff -u -r pcsx_rearmed/libpcsxcore/sio.c libpsx/project/jni/libpcsxcore/sio.c
- --- pcsx_rearmed/libpcsxcore/sio.c Tue Jan 10 12:44:37 2012
- +++ libpsx/project/jni/libpcsxcore/sio.c Mon Jan 9 18:42:14 2012
- @@ -240,6 +240,7 @@
- }
- bufcount+= 3;
- +#if 0
- if (NET_sendPadData(buf, bufcount) == -1)
- netError();
- @@ -247,6 +248,7 @@
- netError();
- if (NET_recvPadData(buf + 128, 2) == -1)
- netError();
- +#endif
- } else {
- memcpy(buf, buf + 128, 32);
- }
- @@ -344,13 +346,15 @@
- }
- void netError() {
- - ClosePlugins();
- +#if 0
- + ReleasePlugins();
- SysMessage(_("Connection closed!\n"));
- CdromId[0] = '\0';
- CdromLabel[0] = '\0';
- SysRunGui();
- +#endif
- }
- void sioInterrupt() {
- Only in libpsx/project/jni/libpcsxcore: sound
- Only in libpsx/project/jni/libpcsxcore: video
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement