mirror of https://github.com/PCSX2/pcsx2.git
updated GSSoft code to compile to help developing fpsbios under a virtualbox vm. Does not work properly yet, but it compiles under xubuntu 8.10. Only useful for devs.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@402 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
a2791d843e
commit
a5b07e46e2
|
@ -69,19 +69,24 @@ void _CacheLoadTexture32(Cache *tex) {
|
||||||
for (v=0; v<tex->tex0.th; v++) {
|
for (v=0; v<tex->tex0.th; v++) {
|
||||||
for (u=0; u<tex->tex0.tw; u+=8) {
|
for (u=0; u<tex->tex0.tw; u+=8) {
|
||||||
mem = &vRamUL[getPixelAddress32(u, v, tex->tex0.tbp0, tex->tex0.tbw)];
|
mem = &vRamUL[getPixelAddress32(u, v, tex->tex0.tbp0, tex->tex0.tbw)];
|
||||||
|
/*
|
||||||
|
* This gives the following error:
|
||||||
|
Cache.c:73: error: memory input 2 is not directly addressable
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"movsd %1, %%xmm0\n"
|
"movsd %1, %%xmm0\n"
|
||||||
"movhps %2, %%xmm0\n"
|
"movhps %2, %%xmm0\n"
|
||||||
"movaps %%xmm0, %0\n"
|
"movaps %%xmm0, %0\n"
|
||||||
: "=m"(&ptr[0]) : "m"(&mem[0]), "m"(&mem[4])
|
: "=m"(&ptr[0]) : "m"(mem), "m"(mem+4)
|
||||||
);
|
);
|
||||||
#else
|
#else
|
||||||
|
*/
|
||||||
ptr[0] = mem[0]; ptr[1] = mem[1];
|
ptr[0] = mem[0]; ptr[1] = mem[1];
|
||||||
ptr[2] = mem[4]; ptr[3] = mem[5];
|
ptr[2] = mem[4]; ptr[3] = mem[5];
|
||||||
ptr[4] = mem[8]; ptr[5] = mem[9];
|
ptr[4] = mem[8]; ptr[5] = mem[9];
|
||||||
ptr[6] = mem[12]; ptr[7] = mem[13];
|
ptr[6] = mem[12]; ptr[7] = mem[13];
|
||||||
#endif
|
/* #endif */
|
||||||
ptr+= 8;
|
ptr+= 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
#include "Cache.h"
|
#include "Cache.h"
|
||||||
#include "Regs.h"
|
#include "Regs.h"
|
||||||
#if defined(__i386__) || defined(__x86_64__)
|
#if defined(__i386__) || defined(__x86_64__)
|
||||||
#include "ix86.h"
|
#include "x86/ix86.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __MSCW32__
|
#ifdef __MSCW32__
|
||||||
|
@ -39,6 +39,7 @@
|
||||||
char *codeclist[] = { "MPEG1", /*"DIVX", "MPEG2",*/ NULL };
|
char *codeclist[] = { "MPEG1", /*"DIVX", "MPEG2",*/ NULL };
|
||||||
char *filterslist[] = { "Disabled", "Scale2x", NULL };
|
char *filterslist[] = { "Disabled", "Scale2x", NULL };
|
||||||
|
|
||||||
|
u8* g_pBasePS2Mem = NULL;
|
||||||
|
|
||||||
const unsigned char version = PS2E_GS_VERSION;
|
const unsigned char version = PS2E_GS_VERSION;
|
||||||
const unsigned char revision = 1; // revision and build gives plugin version
|
const unsigned char revision = 1; // revision and build gives plugin version
|
||||||
|
@ -84,6 +85,10 @@ void __Log(char *fmt, ...) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void CALLBACK GSsetBaseMem(void* pmem) {
|
||||||
|
g_pBasePS2Mem = (u8*)pmem;
|
||||||
|
}
|
||||||
|
|
||||||
void gsSetCtxt(int ctxt) {
|
void gsSetCtxt(int ctxt) {
|
||||||
if (gs.ctxt == ctxt) return;
|
if (gs.ctxt == ctxt) return;
|
||||||
gs.ctxt = ctxt;
|
gs.ctxt = ctxt;
|
||||||
|
@ -190,7 +195,7 @@ void CALLBACK GSshutdown() {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 CALLBACK GSopen(void *pDsp, char *Title) {
|
s32 CALLBACK GSopen(void *pDsp, char *Title, int multithread) {
|
||||||
s32 dsp;
|
s32 dsp;
|
||||||
|
|
||||||
#ifdef GS_LOG
|
#ifdef GS_LOG
|
||||||
|
@ -232,6 +237,11 @@ void CALLBACK GSirqCallback(void (*callback)()) {
|
||||||
GSirq = callback;
|
GSirq = callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CALLBACK GSwriteCSR(u32 write)
|
||||||
|
{
|
||||||
|
gs.CSRw = write;
|
||||||
|
}
|
||||||
|
|
||||||
void CALLBACK GSmakeSnapshot(char *path) {
|
void CALLBACK GSmakeSnapshot(char *path) {
|
||||||
FILE *bmpfile;
|
FILE *bmpfile;
|
||||||
char filename[256];
|
char filename[256];
|
||||||
|
@ -275,7 +285,7 @@ void CALLBACK GSmakeSnapshot(char *path) {
|
||||||
for (;;) {
|
for (;;) {
|
||||||
snapshotnr++;
|
snapshotnr++;
|
||||||
|
|
||||||
sprintf(filename,"%ssnap%03ld.bmp", path, snapshotnr);
|
sprintf(filename,"%ssnap%03d.bmp", path, snapshotnr);
|
||||||
|
|
||||||
bmpfile=fopen(filename,"rb");
|
bmpfile=fopen(filename,"rb");
|
||||||
if (bmpfile == NULL) break;
|
if (bmpfile == NULL) break;
|
||||||
|
@ -300,7 +310,7 @@ void CALLBACK GSmakeSnapshot(char *path) {
|
||||||
fclose(bmpfile);
|
fclose(bmpfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CALLBACK GSvsync() {
|
void CALLBACK GSvsync(int interlace) {
|
||||||
#ifdef GS_LOG
|
#ifdef GS_LOG
|
||||||
GS_LOG("\nGSvsync\n\n");
|
GS_LOG("\nGSvsync\n\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -47,7 +47,7 @@ void SysMessage(char *fmt, ...) {
|
||||||
|
|
||||||
if (msg[strlen(msg)-1] == '\n') msg[strlen(msg)-1] = 0;
|
if (msg[strlen(msg)-1] == '\n') msg[strlen(msg)-1] = 0;
|
||||||
|
|
||||||
MsgDlg = gtk_window_new (GTK_WINDOW_DIALOG);
|
MsgDlg = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||||
gtk_window_set_position(GTK_WINDOW(MsgDlg), GTK_WIN_POS_CENTER);
|
gtk_window_set_position(GTK_WINDOW(MsgDlg), GTK_WIN_POS_CENTER);
|
||||||
gtk_window_set_title(GTK_WINDOW(MsgDlg), "GSsoft Msg");
|
gtk_window_set_title(GTK_WINDOW(MsgDlg), "GSsoft Msg");
|
||||||
gtk_container_set_border_width(GTK_CONTAINER(MsgDlg), 5);
|
gtk_container_set_border_width(GTK_CONTAINER(MsgDlg), 5);
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
# Create a shared library libGSSoft
|
||||||
|
AUTOMAKE_OPTIONS = foreign
|
||||||
|
noinst_LIBRARIES = libGSSoft.a
|
||||||
|
|
||||||
|
libGSSoft_a_CPPFLAGS = $(shell pkg-config --cflags gtk+-2.0) $(shell pkg-config --cflags sdl)
|
||||||
|
libGSSoft_a_CXXFLAGS = $(shell pkg-config --cflags gtk+-2.0) $(shell pkg-config --cflags sdl)
|
||||||
|
|
||||||
|
if X86_64
|
||||||
|
libGSSoft_a_CPPFLAGS += -fPIC
|
||||||
|
libGSSoft_a_CXXFLAGS += -fPIC
|
||||||
|
CCASFLAGS += -fPIC
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Create a shared object by faking an exe (thanks to ODE makefiles)
|
||||||
|
traplibdir=$(prefix)
|
||||||
|
|
||||||
|
if RELEASE_TO_PUBLIC
|
||||||
|
preext=r
|
||||||
|
endif
|
||||||
|
|
||||||
|
EXEEXT=$(preext)@so_ext@
|
||||||
|
|
||||||
|
traplib_PROGRAMS=libGSSoft
|
||||||
|
libGSSoft_SOURCES=
|
||||||
|
libGSSoft_DEPENDENCIES = libGSSoft.a
|
||||||
|
libGSSoft_LDFLAGS= @SHARED_LDFLAGS@
|
||||||
|
libGSSoft_LDFLAGS+=-Wl,-soname,@GSSOFT_SONAME@
|
||||||
|
libGSSoft_LDADD=$(libGSSoft_a_OBJECTS)
|
||||||
|
|
||||||
|
libGSSoft_a_SOURCES = \
|
||||||
|
Cache.c Color.c Draw.c GS.c Mem.c Page.c Prim.c Rec.c Regs.c \
|
||||||
|
scale2x.c SDL.c SDL_gfxPrimitives.c Soft.c Texts.c Transfer.c \
|
||||||
|
Linux/Conf.c Linux/interface.c Linux/Linux.c \
|
||||||
|
Linux/support.c x86/ix86_cpudetect.c
|
||||||
|
|
|
@ -1,8 +1,25 @@
|
||||||
|
/* Pcsx2 - Pc Ps2 Emulator
|
||||||
|
* Copyright (C) 2002-2008 Pcsx2 Team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
#ifndef __PS2EDEFS_H__
|
#ifndef __PS2EDEFS_H__
|
||||||
#define __PS2EDEFS_H__
|
#define __PS2EDEFS_H__
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PS2E Definitions v0.5.7 (beta)
|
* PS2E Definitions v0.6.2 (beta)
|
||||||
*
|
*
|
||||||
* Author: linuzappz@hotmail.com
|
* Author: linuzappz@hotmail.com
|
||||||
* shadowpcsx2@yahoo.gr
|
* shadowpcsx2@yahoo.gr
|
||||||
|
@ -15,7 +32,7 @@
|
||||||
|
|
||||||
* OSflags:
|
* OSflags:
|
||||||
__LINUX__ (linux OS)
|
__LINUX__ (linux OS)
|
||||||
__WIN32__ (win32 OS)
|
_WIN32 (win32 OS)
|
||||||
|
|
||||||
* common return values (for ie. GSinit):
|
* common return values (for ie. GSinit):
|
||||||
0 - success
|
0 - success
|
||||||
|
@ -39,30 +56,37 @@
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* common defines */
|
|
||||||
|
|
||||||
#if defined(GSdefs) || defined(PADdefs) || \
|
/* common defines */
|
||||||
defined(SPU2defs)|| defined(CDVDdefs)
|
#ifndef C_ASSERT
|
||||||
|
#define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(GSdefs) || defined(PADdefs) || defined(SIOdefs) || \
|
||||||
|
defined(SPU2defs) || defined(CDVDdefs) || defined(DEV9defs) || \
|
||||||
|
defined(USBdefs) || defined(FWdefs)
|
||||||
#define COMMONdefs
|
#define COMMONdefs
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// PS2EgetLibType returns (may be OR'd)
|
// PS2EgetLibType returns (may be OR'd)
|
||||||
#define PS2E_LT_GS 0x01
|
#define PS2E_LT_GS 0x01
|
||||||
#define PS2E_LT_PAD 0x02
|
#define PS2E_LT_PAD 0x02 // -=[ OBSOLETE ]=-
|
||||||
#define PS2E_LT_SPU2 0x04
|
#define PS2E_LT_SPU2 0x04
|
||||||
#define PS2E_LT_CDVD 0x08
|
#define PS2E_LT_CDVD 0x08
|
||||||
#define PS2E_LT_DEV9 0x10
|
#define PS2E_LT_DEV9 0x10
|
||||||
#define PS2E_LT_USB 0x20
|
#define PS2E_LT_USB 0x20
|
||||||
#define PS2E_LT_FIREWIRE 0x40
|
#define PS2E_LT_FW 0x40
|
||||||
|
#define PS2E_LT_SIO 0x80
|
||||||
|
|
||||||
// PS2EgetLibVersion2 (high 16 bits)
|
// PS2EgetLibVersion2 (high 16 bits)
|
||||||
#define PS2E_GS_VERSION 0x0006
|
#define PS2E_GS_VERSION 0x0006
|
||||||
#define PS2E_PAD_VERSION 0x0002
|
#define PS2E_PAD_VERSION 0x0002 // -=[ OBSOLETE ]=-
|
||||||
#define PS2E_SPU2_VERSION 0x0004
|
#define PS2E_SPU2_VERSION 0x0005
|
||||||
#define PS2E_CDVD_VERSION 0x0003
|
#define PS2E_CDVD_VERSION 0x0005
|
||||||
#define PS2E_DEV9_VERSION 0x0003
|
#define PS2E_DEV9_VERSION 0x0003
|
||||||
#define PS2E_USB_VERSION 0x0003
|
#define PS2E_USB_VERSION 0x0003
|
||||||
#define PS2E_FIREWIRE_VERSION 0x0002
|
#define PS2E_FW_VERSION 0x0002
|
||||||
|
#define PS2E_SIO_VERSION 0x0001
|
||||||
#ifdef COMMONdefs
|
#ifdef COMMONdefs
|
||||||
|
|
||||||
u32 CALLBACK PS2EgetLibType(void);
|
u32 CALLBACK PS2EgetLibType(void);
|
||||||
|
@ -86,15 +110,38 @@ typedef struct {
|
||||||
u32 event;
|
u32 event;
|
||||||
} keyEvent;
|
} keyEvent;
|
||||||
|
|
||||||
|
// for 64bit compilers
|
||||||
|
typedef char __keyEvent_Size__[(sizeof(keyEvent) == 8)?1:-1];
|
||||||
|
|
||||||
|
// plugin types
|
||||||
|
#define SIO_TYPE_PAD 0x00000001
|
||||||
|
#define SIO_TYPE_MTAP 0x00000004
|
||||||
|
#define SIO_TYPE_RM 0x00000040
|
||||||
|
#define SIO_TYPE_MC 0x00000100
|
||||||
|
|
||||||
|
typedef int (CALLBACK * SIOchangeSlotCB)(int slot);
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
u8 ctrl:4; // control and mode bits
|
||||||
|
u8 mode:4; // control and mode bits
|
||||||
|
u8 trackNum; // current track number (1 to 99)
|
||||||
|
u8 trackIndex; // current index within track (0 to 99)
|
||||||
|
u8 trackM; // current minute location on the disc (BCD encoded)
|
||||||
|
u8 trackS; // current sector location on the disc (BCD encoded)
|
||||||
|
u8 trackF; // current frame location on the disc (BCD encoded)
|
||||||
|
u8 pad; // unused
|
||||||
|
u8 discM; // current minute offset from first track (BCD encoded)
|
||||||
|
u8 discS; // current sector offset from first track (BCD encoded)
|
||||||
|
u8 discF; // current frame offset from first track (BCD encoded)
|
||||||
|
} cdvdSubQ;
|
||||||
|
|
||||||
typedef struct { // NOT bcd coded
|
typedef struct { // NOT bcd coded
|
||||||
u8 minute;
|
u32 lsn;
|
||||||
u8 second;
|
|
||||||
u8 frame;
|
|
||||||
u8 type;
|
u8 type;
|
||||||
} cdvdTD;
|
} cdvdTD;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
u8 strack; //number of the first track (usualy 1)
|
u8 strack; //number of the first track (usually 1)
|
||||||
u8 etrack; //number of the last track
|
u8 etrack; //number of the last track
|
||||||
} cdvdTN;
|
} cdvdTN;
|
||||||
|
|
||||||
|
@ -105,7 +152,7 @@ typedef struct {
|
||||||
#define CDVD_MODE_2048 3 // skip sync+head+sub (24) bytes
|
#define CDVD_MODE_2048 3 // skip sync+head+sub (24) bytes
|
||||||
#define CDVD_MODE_2368 4 // full 2352 bytes + 16 subq
|
#define CDVD_MODE_2368 4 // full 2352 bytes + 16 subq
|
||||||
|
|
||||||
// CDVDgetType returns:
|
// CDVDgetDiskType returns:
|
||||||
#define CDVD_TYPE_ILLEGAL 0xff // Illegal Disc
|
#define CDVD_TYPE_ILLEGAL 0xff // Illegal Disc
|
||||||
#define CDVD_TYPE_DVDV 0xfe // DVD Video
|
#define CDVD_TYPE_DVDV 0xfe // DVD Video
|
||||||
#define CDVD_TYPE_CDDA 0xfd // Audio CD
|
#define CDVD_TYPE_CDDA 0xfd // Audio CD
|
||||||
|
@ -125,9 +172,9 @@ typedef struct {
|
||||||
#define CDVD_TRAY_CLOSE 0x00
|
#define CDVD_TRAY_CLOSE 0x00
|
||||||
#define CDVD_TRAY_OPEN 0x01
|
#define CDVD_TRAY_OPEN 0x01
|
||||||
|
|
||||||
// cdvdLoc:track type
|
// cdvdTD.type (track types for cds)
|
||||||
#define CDVD_AUDIO_TRACK 0x01
|
#define CDVD_AUDIO_TRACK 0x01
|
||||||
#define CDVD_MODE1_TRACK 0x41
|
#define CDVD_MODE1_TRACK 0x41
|
||||||
#define CDVD_MODE2_TRACK 0x61
|
#define CDVD_MODE2_TRACK 0x61
|
||||||
|
|
||||||
#define CDVD_AUDIO_MASK 0x00
|
#define CDVD_AUDIO_MASK 0x00
|
||||||
|
@ -145,17 +192,12 @@ typedef int (*USBhandler)(void);
|
||||||
#define FREEZE_SAVE 1
|
#define FREEZE_SAVE 1
|
||||||
#define FREEZE_SIZE 2
|
#define FREEZE_SIZE 2
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int size;
|
|
||||||
s8 *data;
|
|
||||||
} freezeData;
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char name[8];
|
char name[8];
|
||||||
void *common;
|
void *common;
|
||||||
} GSdriverInfo;
|
} GSdriverInfo;
|
||||||
|
|
||||||
#ifdef __WIN32__
|
#ifdef _WIN32
|
||||||
typedef struct { // unsupported values must be set to zero
|
typedef struct { // unsupported values must be set to zero
|
||||||
HWND hWnd;
|
HWND hWnd;
|
||||||
HMENU hMenu;
|
HMENU hMenu;
|
||||||
|
@ -172,32 +214,42 @@ typedef struct { // unsupported values must be set to zero
|
||||||
// basic funcs
|
// basic funcs
|
||||||
|
|
||||||
s32 CALLBACK GSinit();
|
s32 CALLBACK GSinit();
|
||||||
s32 CALLBACK GSopen(void *pDsp, char *Title);
|
s32 CALLBACK GSopen(void *pDsp, char *Title, int multithread);
|
||||||
void CALLBACK GSclose();
|
void CALLBACK GSclose();
|
||||||
void CALLBACK GSshutdown();
|
void CALLBACK GSshutdown();
|
||||||
void CALLBACK GSvsync();
|
void CALLBACK GSvsync(int field);
|
||||||
void CALLBACK GSgifTransfer1(u32 *pMem, u32 addr);
|
void CALLBACK GSgifTransfer1(u32 *pMem, u32 addr);
|
||||||
void CALLBACK GSgifTransfer2(u32 *pMem, u32 size);
|
void CALLBACK GSgifTransfer2(u32 *pMem, u32 size);
|
||||||
void CALLBACK GSgifTransfer3(u32 *pMem, u32 size);
|
void CALLBACK GSgifTransfer3(u32 *pMem, u32 size);
|
||||||
void CALLBACK GSwrite8(u32 mem, u8 value);
|
void CALLBACK GSgetLastTag(u64* ptag); // returns the last tag processed (64 bits)
|
||||||
void CALLBACK GSwrite16(u32 mem, u16 value);
|
void CALLBACK GSgifSoftReset(u32 mask);
|
||||||
void CALLBACK GSwrite32(u32 mem, u32 value);
|
|
||||||
void CALLBACK GSwrite64(u32 mem, u64 value);
|
|
||||||
u8 CALLBACK GSread8(u32 mem);
|
|
||||||
u16 CALLBACK GSread16(u32 mem);
|
|
||||||
u32 CALLBACK GSread32(u32 mem);
|
|
||||||
u64 CALLBACK GSread64(u32 mem);
|
|
||||||
void CALLBACK GSreadFIFO(u64 *mem);
|
void CALLBACK GSreadFIFO(u64 *mem);
|
||||||
|
void CALLBACK GSreadFIFO2(u64 *mem, int qwc);
|
||||||
|
|
||||||
// extended funcs
|
// extended funcs
|
||||||
|
|
||||||
// GSkeyEvent gets called when there is a keyEvent from the PAD plugin
|
// GSkeyEvent gets called when there is a keyEvent from the PAD plugin
|
||||||
void CALLBACK GSkeyEvent(keyEvent *ev);
|
void CALLBACK GSkeyEvent(keyEvent *ev);
|
||||||
|
void CALLBACK GSchangeSaveState(int, const char* filename);
|
||||||
void CALLBACK GSmakeSnapshot(char *path);
|
void CALLBACK GSmakeSnapshot(char *path);
|
||||||
|
void CALLBACK GSmakeSnapshot2(char *pathname, int* snapdone, int savejpg);
|
||||||
void CALLBACK GSirqCallback(void (*callback)());
|
void CALLBACK GSirqCallback(void (*callback)());
|
||||||
void CALLBACK GSprintf(int timeout, char *fmt, ...);
|
void CALLBACK GSprintf(int timeout, char *fmt, ...);
|
||||||
|
void CALLBACK GSsetBaseMem(void*);
|
||||||
|
void CALLBACK GSsetGameCRC(int crc, int gameoptions);
|
||||||
|
|
||||||
|
// controls frame skipping in the GS, if this routine isn't present, frame skipping won't be done
|
||||||
|
void CALLBACK GSsetFrameSkip(int frameskip);
|
||||||
|
|
||||||
|
// if start is 1, starts recording spu2 data, else stops
|
||||||
|
// returns a non zero value if successful
|
||||||
|
// for now, pData is not used
|
||||||
|
int CALLBACK GSsetupRecording(int start, void* pData);
|
||||||
|
|
||||||
|
void CALLBACK GSreset();
|
||||||
|
void CALLBACK GSwriteCSR(u32 value);
|
||||||
void CALLBACK GSgetDriverInfo(GSdriverInfo *info);
|
void CALLBACK GSgetDriverInfo(GSdriverInfo *info);
|
||||||
#ifdef __WIN32__
|
#ifdef _WIN32
|
||||||
s32 CALLBACK GSsetWindowInfo(winInfo *info);
|
s32 CALLBACK GSsetWindowInfo(winInfo *info);
|
||||||
#endif
|
#endif
|
||||||
s32 CALLBACK GSfreeze(int mode, freezeData *data);
|
s32 CALLBACK GSfreeze(int mode, freezeData *data);
|
||||||
|
@ -207,7 +259,7 @@ s32 CALLBACK GStest();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* PAD plugin API */
|
/* PAD plugin API -=[ OBSOLETE ]=- */
|
||||||
|
|
||||||
// if this file is included with this define
|
// if this file is included with this define
|
||||||
// the next api will not be skipped by the compiler
|
// the next api will not be skipped by the compiler
|
||||||
|
@ -228,6 +280,15 @@ u8 CALLBACK PADpoll(u8 value);
|
||||||
// 3 if both are supported
|
// 3 if both are supported
|
||||||
u32 CALLBACK PADquery();
|
u32 CALLBACK PADquery();
|
||||||
|
|
||||||
|
// call to give a hint to the PAD plugin to query for the keyboard state. A
|
||||||
|
// good plugin will query the OS for keyboard state ONLY in this function.
|
||||||
|
// This function is necessary when multithreading because otherwise
|
||||||
|
// the PAD plugin can get into deadlocks with the thread that really owns
|
||||||
|
// the window (and input). Note that PADupdate can be called from a different
|
||||||
|
// thread than the other functions, so mutex or other multithreading primitives
|
||||||
|
// have to be added to maintain data integrity.
|
||||||
|
void CALLBACK PADupdate(int pad);
|
||||||
|
|
||||||
// extended funcs
|
// extended funcs
|
||||||
|
|
||||||
void CALLBACK PADgsDriverInfo(GSdriverInfo *info);
|
void CALLBACK PADgsDriverInfo(GSdriverInfo *info);
|
||||||
|
@ -237,6 +298,31 @@ s32 CALLBACK PADtest();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* SIO plugin API */
|
||||||
|
|
||||||
|
// if this file is included with this define
|
||||||
|
// the next api will not be skipped by the compiler
|
||||||
|
#ifdef SIOdefs
|
||||||
|
|
||||||
|
// basic funcs
|
||||||
|
|
||||||
|
s32 CALLBACK SIOinit(u32 port, u32 slot, SIOchangeSlotCB f);
|
||||||
|
s32 CALLBACK SIOopen(void *pDsp);
|
||||||
|
void CALLBACK SIOclose();
|
||||||
|
void CALLBACK SIOshutdown();
|
||||||
|
u8 CALLBACK SIOstartPoll(u8 value);
|
||||||
|
u8 CALLBACK SIOpoll(u8 value);
|
||||||
|
// returns: SIO_TYPE_{PAD,MTAP,RM,MC}
|
||||||
|
u32 CALLBACK SIOquery();
|
||||||
|
|
||||||
|
// extended funcs
|
||||||
|
|
||||||
|
void CALLBACK SIOconfigure();
|
||||||
|
void CALLBACK SIOabout();
|
||||||
|
s32 CALLBACK SIOtest();
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/* SPU2 plugin API */
|
/* SPU2 plugin API */
|
||||||
|
|
||||||
// if this file is included with this define
|
// if this file is included with this define
|
||||||
|
@ -256,10 +342,23 @@ void CALLBACK SPU2writeDMA4Mem(u16 *pMem, int size);
|
||||||
void CALLBACK SPU2interruptDMA4();
|
void CALLBACK SPU2interruptDMA4();
|
||||||
void CALLBACK SPU2readDMA7Mem(u16* pMem, int size);
|
void CALLBACK SPU2readDMA7Mem(u16* pMem, int size);
|
||||||
void CALLBACK SPU2writeDMA7Mem(u16 *pMem, int size);
|
void CALLBACK SPU2writeDMA7Mem(u16 *pMem, int size);
|
||||||
|
|
||||||
|
// all addresses passed by dma will be pointers to the array starting at baseaddr
|
||||||
|
// This function is necessary to successfully save and reload the spu2 state
|
||||||
|
void CALLBACK SPU2setDMABaseAddr(uptr baseaddr);
|
||||||
|
|
||||||
void CALLBACK SPU2interruptDMA7();
|
void CALLBACK SPU2interruptDMA7();
|
||||||
void CALLBACK SPU2irqCallback(void (*callback)());
|
u32 CALLBACK SPU2ReadMemAddr(int core);
|
||||||
|
void CALLBACK SPU2WriteMemAddr(int core,u32 value);
|
||||||
|
void CALLBACK SPU2irqCallback(void (*SPU2callback)(),void (*DMA4callback)(),void (*DMA7callback)());
|
||||||
|
|
||||||
// extended funcs
|
// extended funcs
|
||||||
|
// if start is 1, starts recording spu2 data, else stops
|
||||||
|
// returns a non zero value if successful
|
||||||
|
// for now, pData is not used
|
||||||
|
int CALLBACK SPU2setupRecording(int start, void* pData);
|
||||||
|
|
||||||
|
void CALLBACK SPU2setClockPtr(u32* ptr);
|
||||||
|
|
||||||
void CALLBACK SPU2async(u32 cycles);
|
void CALLBACK SPU2async(u32 cycles);
|
||||||
s32 CALLBACK SPU2freeze(int mode, freezeData *data);
|
s32 CALLBACK SPU2freeze(int mode, freezeData *data);
|
||||||
|
@ -278,7 +377,7 @@ s32 CALLBACK SPU2test();
|
||||||
// basic funcs
|
// basic funcs
|
||||||
|
|
||||||
s32 CALLBACK CDVDinit();
|
s32 CALLBACK CDVDinit();
|
||||||
s32 CALLBACK CDVDopen();
|
s32 CALLBACK CDVDopen(const char* pTitleFilename);
|
||||||
void CALLBACK CDVDclose();
|
void CALLBACK CDVDclose();
|
||||||
void CALLBACK CDVDshutdown();
|
void CALLBACK CDVDshutdown();
|
||||||
s32 CALLBACK CDVDreadTrack(u32 lsn, int mode);
|
s32 CALLBACK CDVDreadTrack(u32 lsn, int mode);
|
||||||
|
@ -286,16 +385,21 @@ s32 CALLBACK CDVDreadTrack(u32 lsn, int mode);
|
||||||
// return can be NULL (for async modes)
|
// return can be NULL (for async modes)
|
||||||
u8* CALLBACK CDVDgetBuffer();
|
u8* CALLBACK CDVDgetBuffer();
|
||||||
|
|
||||||
s32 CALLBACK CDVDgetTN(cdvdTN *Buffer); //disk information
|
s32 CALLBACK CDVDreadSubQ(u32 lsn, cdvdSubQ* subq);//read subq from disc (only cds have subq data)
|
||||||
|
s32 CALLBACK CDVDgetTN(cdvdTN *Buffer); //disk information
|
||||||
s32 CALLBACK CDVDgetTD(u8 Track, cdvdTD *Buffer); //track info: min,sec,frame,type
|
s32 CALLBACK CDVDgetTD(u8 Track, cdvdTD *Buffer); //track info: min,sec,frame,type
|
||||||
s32 CALLBACK CDVDgetType(); //CDVD_TYPE_xxxx
|
s32 CALLBACK CDVDgetTOC(void* toc); //gets ps2 style toc from disc
|
||||||
s32 CALLBACK CDVDgetTrayStatus(); //CDVD_TRAY_xxxx
|
s32 CALLBACK CDVDgetDiskType(); //CDVD_TYPE_xxxx
|
||||||
|
s32 CALLBACK CDVDgetTrayStatus(); //CDVD_TRAY_xxxx
|
||||||
|
s32 CALLBACK CDVDctrlTrayOpen(); //open disc tray
|
||||||
|
s32 CALLBACK CDVDctrlTrayClose(); //close disc tray
|
||||||
|
|
||||||
// extended funcs
|
// extended funcs
|
||||||
|
|
||||||
void CALLBACK CDVDconfigure();
|
void CALLBACK CDVDconfigure();
|
||||||
void CALLBACK CDVDabout();
|
void CALLBACK CDVDabout();
|
||||||
s32 CALLBACK CDVDtest();
|
s32 CALLBACK CDVDtest();
|
||||||
|
void CALLBACK CDVDnewDiskCB(void (*callback)());
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -307,6 +411,8 @@ s32 CALLBACK CDVDtest();
|
||||||
|
|
||||||
// basic funcs
|
// basic funcs
|
||||||
|
|
||||||
|
// NOTE: The read/write functions CANNOT use XMM/MMX regs
|
||||||
|
// If you want to use them, need to save and restore current ones
|
||||||
s32 CALLBACK DEV9init();
|
s32 CALLBACK DEV9init();
|
||||||
s32 CALLBACK DEV9open(void *pDsp);
|
s32 CALLBACK DEV9open(void *pDsp);
|
||||||
void CALLBACK DEV9close();
|
void CALLBACK DEV9close();
|
||||||
|
@ -351,6 +457,8 @@ u32 CALLBACK USBread32(u32 addr);
|
||||||
void CALLBACK USBwrite8(u32 addr, u8 value);
|
void CALLBACK USBwrite8(u32 addr, u8 value);
|
||||||
void CALLBACK USBwrite16(u32 addr, u16 value);
|
void CALLBACK USBwrite16(u32 addr, u16 value);
|
||||||
void CALLBACK USBwrite32(u32 addr, u32 value);
|
void CALLBACK USBwrite32(u32 addr, u32 value);
|
||||||
|
void CALLBACK USBasync(u32 cycles);
|
||||||
|
|
||||||
// cycles = IOP cycles before calling callback,
|
// cycles = IOP cycles before calling callback,
|
||||||
// if callback returns 1 the irq is triggered, else not
|
// if callback returns 1 the irq is triggered, else not
|
||||||
void CALLBACK USBirqCallback(USBcallback callback);
|
void CALLBACK USBirqCallback(USBcallback callback);
|
||||||
|
@ -365,27 +473,30 @@ void CALLBACK USBabout();
|
||||||
s32 CALLBACK USBtest();
|
s32 CALLBACK USBtest();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
/* Firewire plugin API */
|
|
||||||
|
/* FW plugin API */
|
||||||
|
|
||||||
// if this file is included with this define
|
// if this file is included with this define
|
||||||
// the next api will not be skipped by the compiler
|
// the next api will not be skipped by the compiler
|
||||||
#ifdef FIREWIREdefs
|
#ifdef FWdefs
|
||||||
// basic funcs
|
// basic funcs
|
||||||
|
|
||||||
s32 CALLBACK FireWireinit();
|
// NOTE: The read/write functions CANNOT use XMM/MMX regs
|
||||||
s32 CALLBACK FireWireopen(void *pDsp);
|
// If you want to use them, need to save and restore current ones
|
||||||
void CALLBACK FireWireclose();
|
s32 CALLBACK FWinit();
|
||||||
void CALLBACK FireWireshutdown();
|
s32 CALLBACK FWopen(void *pDsp);
|
||||||
u32 CALLBACK FireWireread32(u32 addr);
|
void CALLBACK FWclose();
|
||||||
void CALLBACK FireWirewrite32(u32 addr, u32 value);
|
void CALLBACK FWshutdown();
|
||||||
void CALLBACK FireWireirqCallback(void (*callback)());
|
u32 CALLBACK FWread32(u32 addr);
|
||||||
|
void CALLBACK FWwrite32(u32 addr, u32 value);
|
||||||
|
void CALLBACK FWirqCallback(void (*callback)());
|
||||||
|
|
||||||
// extended funcs
|
// extended funcs
|
||||||
|
|
||||||
s32 CALLBACK FireWirefreeze(int mode, freezeData *data);
|
s32 CALLBACK FWfreeze(int mode, freezeData *data);
|
||||||
void CALLBACK FireWireconfigure();
|
void CALLBACK FWconfigure();
|
||||||
void CALLBACK FireWireabout();
|
void CALLBACK FWabout();
|
||||||
s32 CALLBACK FireWiretest();
|
s32 CALLBACK FWtest();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// might be useful for emulators
|
// might be useful for emulators
|
||||||
|
@ -396,32 +507,37 @@ typedef u32 (CALLBACK* _PS2EgetLibVersion2)(u32 type);
|
||||||
typedef char*(CALLBACK* _PS2EgetLibName)(void);
|
typedef char*(CALLBACK* _PS2EgetLibName)(void);
|
||||||
|
|
||||||
// GS
|
// GS
|
||||||
|
// NOTE: GSreadFIFOX/GSwriteCSR functions CANNOT use XMM/MMX regs
|
||||||
|
// If you want to use them, need to save and restore current ones
|
||||||
typedef s32 (CALLBACK* _GSinit)();
|
typedef s32 (CALLBACK* _GSinit)();
|
||||||
typedef s32 (CALLBACK* _GSopen)(void *pDsp, char *Title);
|
typedef s32 (CALLBACK* _GSopen)(void *pDsp, char *Title, int multithread);
|
||||||
typedef void (CALLBACK* _GSclose)();
|
typedef void (CALLBACK* _GSclose)();
|
||||||
typedef void (CALLBACK* _GSshutdown)();
|
typedef void (CALLBACK* _GSshutdown)();
|
||||||
typedef void (CALLBACK* _GSvsync)();
|
typedef void (CALLBACK* _GSvsync)(int field);
|
||||||
typedef void (CALLBACK* _GSwrite8)(u32 mem, u8 value);
|
|
||||||
typedef void (CALLBACK* _GSwrite16)(u32 mem, u16 value);
|
|
||||||
typedef void (CALLBACK* _GSwrite32)(u32 mem, u32 value);
|
|
||||||
typedef void (CALLBACK* _GSwrite64)(u32 mem, u64 value);
|
|
||||||
typedef u8 (CALLBACK* _GSread8)(u32 mem);
|
|
||||||
typedef u16 (CALLBACK* _GSread16)(u32 mem);
|
|
||||||
typedef u32 (CALLBACK* _GSread32)(u32 mem);
|
|
||||||
typedef u64 (CALLBACK* _GSread64)(u32 mem);
|
|
||||||
typedef void (CALLBACK* _GSgifTransfer1)(u32 *pMem, u32 addr);
|
typedef void (CALLBACK* _GSgifTransfer1)(u32 *pMem, u32 addr);
|
||||||
typedef void (CALLBACK* _GSgifTransfer2)(u32 *pMem, u32 size);
|
typedef void (CALLBACK* _GSgifTransfer2)(u32 *pMem, u32 size);
|
||||||
typedef void (CALLBACK* _GSgifTransfer3)(u32 *pMem, u32 size);
|
typedef void (CALLBACK* _GSgifTransfer3)(u32 *pMem, u32 size);
|
||||||
|
typedef void (CALLBACK* _GSgetLastTag)(u64* ptag); // returns the last tag processed (64 bits)
|
||||||
|
typedef void (CALLBACK* _GSgifSoftReset)(u32 mask);
|
||||||
typedef void (CALLBACK* _GSreadFIFO)(u64 *pMem);
|
typedef void (CALLBACK* _GSreadFIFO)(u64 *pMem);
|
||||||
|
typedef void (CALLBACK* _GSreadFIFO2)(u64 *pMem, int qwc);
|
||||||
|
|
||||||
typedef void (CALLBACK* _GSkeyEvent)(keyEvent* ev);
|
typedef void (CALLBACK* _GSkeyEvent)(keyEvent* ev);
|
||||||
|
typedef void (CALLBACK* _GSchangeSaveState)(int, const char* filename);
|
||||||
typedef void (CALLBACK* _GSirqCallback)(void (*callback)());
|
typedef void (CALLBACK* _GSirqCallback)(void (*callback)());
|
||||||
typedef void (CALLBACK* _GSprintf)(int timeout, char *fmt, ...);
|
typedef void (CALLBACK* _GSprintf)(int timeout, char *fmt, ...);
|
||||||
|
typedef void (CALLBACK* _GSsetBaseMem)(void*);
|
||||||
|
typedef void (CALLBACK* _GSsetGameCRC)(int, int);
|
||||||
|
typedef void (CALLBACK* _GSsetFrameSkip)(int frameskip);
|
||||||
|
typedef int (CALLBACK* _GSsetupRecording)(int, void*);
|
||||||
|
typedef void (CALLBACK* _GSreset)();
|
||||||
|
typedef void (CALLBACK* _GSwriteCSR)(u32 value);
|
||||||
typedef void (CALLBACK* _GSgetDriverInfo)(GSdriverInfo *info);
|
typedef void (CALLBACK* _GSgetDriverInfo)(GSdriverInfo *info);
|
||||||
#ifdef __WIN32__
|
#ifdef _WIN32
|
||||||
typedef s32 (CALLBACK* _GSsetWindowInfo)(winInfo *info);
|
typedef s32 (CALLBACK* _GSsetWindowInfo)(winInfo *info);
|
||||||
#endif
|
#endif
|
||||||
typedef void (CALLBACK* _GSmakeSnapshot)(char *path);
|
typedef void (CALLBACK* _GSmakeSnapshot)(char *path);
|
||||||
|
typedef void (CALLBACK* _GSmakeSnapshot2)(char *path, int*, int);
|
||||||
typedef s32 (CALLBACK* _GSfreeze)(int mode, freezeData *data);
|
typedef s32 (CALLBACK* _GSfreeze)(int mode, freezeData *data);
|
||||||
typedef void (CALLBACK* _GSconfigure)();
|
typedef void (CALLBACK* _GSconfigure)();
|
||||||
typedef s32 (CALLBACK* _GStest)();
|
typedef s32 (CALLBACK* _GStest)();
|
||||||
|
@ -436,13 +552,29 @@ typedef keyEvent* (CALLBACK* _PADkeyEvent)();
|
||||||
typedef u8 (CALLBACK* _PADstartPoll)(int pad);
|
typedef u8 (CALLBACK* _PADstartPoll)(int pad);
|
||||||
typedef u8 (CALLBACK* _PADpoll)(u8 value);
|
typedef u8 (CALLBACK* _PADpoll)(u8 value);
|
||||||
typedef u32 (CALLBACK* _PADquery)();
|
typedef u32 (CALLBACK* _PADquery)();
|
||||||
|
typedef void (CALLBACK* _PADupdate)(int pad);
|
||||||
|
|
||||||
typedef void (CALLBACK* _PADgsDriverInfo)(GSdriverInfo *info);
|
typedef void (CALLBACK* _PADgsDriverInfo)(GSdriverInfo *info);
|
||||||
typedef void (CALLBACK* _PADconfigure)();
|
typedef void (CALLBACK* _PADconfigure)();
|
||||||
typedef s32 (CALLBACK* _PADtest)();
|
typedef s32 (CALLBACK* _PADtest)();
|
||||||
typedef void (CALLBACK* _PADabout)();
|
typedef void (CALLBACK* _PADabout)();
|
||||||
|
|
||||||
|
// SIO
|
||||||
|
typedef s32 (CALLBACK* _SIOinit)(u32 port, u32 slot, SIOchangeSlotCB f);
|
||||||
|
typedef s32 (CALLBACK* _SIOopen)(void *pDsp);
|
||||||
|
typedef void (CALLBACK* _SIOclose)();
|
||||||
|
typedef void (CALLBACK* _SIOshutdown)();
|
||||||
|
typedef u8 (CALLBACK* _SIOstartPoll)(u8 value);
|
||||||
|
typedef u8 (CALLBACK* _SIOpoll)(u8 value);
|
||||||
|
typedef u32 (CALLBACK* _SIOquery)();
|
||||||
|
|
||||||
|
typedef void (CALLBACK* _SIOconfigure)();
|
||||||
|
typedef s32 (CALLBACK* _SIOtest)();
|
||||||
|
typedef void (CALLBACK* _SIOabout)();
|
||||||
|
|
||||||
// SPU2
|
// SPU2
|
||||||
|
// NOTE: The read/write functions CANNOT use XMM/MMX regs
|
||||||
|
// If you want to use them, need to save and restore current ones
|
||||||
typedef s32 (CALLBACK* _SPU2init)();
|
typedef s32 (CALLBACK* _SPU2init)();
|
||||||
typedef s32 (CALLBACK* _SPU2open)(void *pDsp);
|
typedef s32 (CALLBACK* _SPU2open)(void *pDsp);
|
||||||
typedef void (CALLBACK* _SPU2close)();
|
typedef void (CALLBACK* _SPU2close)();
|
||||||
|
@ -454,32 +586,48 @@ typedef void (CALLBACK* _SPU2writeDMA4Mem)(u16 *pMem, int size);
|
||||||
typedef void (CALLBACK* _SPU2interruptDMA4)();
|
typedef void (CALLBACK* _SPU2interruptDMA4)();
|
||||||
typedef void (CALLBACK* _SPU2readDMA7Mem)(u16 *pMem, int size);
|
typedef void (CALLBACK* _SPU2readDMA7Mem)(u16 *pMem, int size);
|
||||||
typedef void (CALLBACK* _SPU2writeDMA7Mem)(u16 *pMem, int size);
|
typedef void (CALLBACK* _SPU2writeDMA7Mem)(u16 *pMem, int size);
|
||||||
|
typedef void (CALLBACK* _SPU2setDMABaseAddr)(uptr baseaddr);
|
||||||
typedef void (CALLBACK* _SPU2interruptDMA7)();
|
typedef void (CALLBACK* _SPU2interruptDMA7)();
|
||||||
typedef void (CALLBACK* _SPU2irqCallback)(void (*callback)());
|
typedef void (CALLBACK* _SPU2irqCallback)(void (*SPU2callback)(),void (*DMA4callback)(),void (*DMA7callback)());
|
||||||
|
typedef int (CALLBACK* _SPU2setupRecording)(int, void*);
|
||||||
|
|
||||||
|
typedef void (CALLBACK* _SPU2setClockPtr)(u32*ptr);
|
||||||
|
|
||||||
|
typedef u32 (CALLBACK* _SPU2ReadMemAddr)(int core);
|
||||||
|
typedef void (CALLBACK* _SPU2WriteMemAddr)(int core,u32 value);
|
||||||
typedef void (CALLBACK* _SPU2async)(u32 cycles);
|
typedef void (CALLBACK* _SPU2async)(u32 cycles);
|
||||||
typedef s32 (CALLBACK* _SPU2freeze)(int mode, freezeData *data);
|
typedef s32 (CALLBACK* _SPU2freeze)(int mode, freezeData *data);
|
||||||
typedef void (CALLBACK* _SPU2configure)();
|
typedef void (CALLBACK* _SPU2configure)();
|
||||||
typedef s32 (CALLBACK* _SPU2test)();
|
typedef s32 (CALLBACK* _SPU2test)();
|
||||||
typedef void (CALLBACK* _SPU2about)();
|
typedef void (CALLBACK* _SPU2about)();
|
||||||
|
|
||||||
|
|
||||||
// CDVD
|
// CDVD
|
||||||
|
// NOTE: The read/write functions CANNOT use XMM/MMX regs
|
||||||
|
// If you want to use them, need to save and restore current ones
|
||||||
typedef s32 (CALLBACK* _CDVDinit)();
|
typedef s32 (CALLBACK* _CDVDinit)();
|
||||||
typedef s32 (CALLBACK* _CDVDopen)();
|
typedef s32 (CALLBACK* _CDVDopen)(const char* pTitleFilename);
|
||||||
typedef void (CALLBACK* _CDVDclose)();
|
typedef void (CALLBACK* _CDVDclose)();
|
||||||
typedef void (CALLBACK* _CDVDshutdown)();
|
typedef void (CALLBACK* _CDVDshutdown)();
|
||||||
typedef s32 (CALLBACK* _CDVDreadTrack)(u32 lsn, int mode);
|
typedef s32 (CALLBACK* _CDVDreadTrack)(u32 lsn, int mode);
|
||||||
typedef u8* (CALLBACK* _CDVDgetBuffer)();
|
typedef u8* (CALLBACK* _CDVDgetBuffer)();
|
||||||
|
typedef s32 (CALLBACK* _CDVDreadSubQ)(u32 lsn, cdvdSubQ* subq);
|
||||||
typedef s32 (CALLBACK* _CDVDgetTN)(cdvdTN *Buffer);
|
typedef s32 (CALLBACK* _CDVDgetTN)(cdvdTN *Buffer);
|
||||||
typedef s32 (CALLBACK* _CDVDgetTD)(u8 Track, cdvdTD *Buffer);
|
typedef s32 (CALLBACK* _CDVDgetTD)(u8 Track, cdvdTD *Buffer);
|
||||||
typedef s32 (CALLBACK* _CDVDgetType)();
|
typedef s32 (CALLBACK* _CDVDgetTOC)(void* toc);
|
||||||
|
typedef s32 (CALLBACK* _CDVDgetDiskType)();
|
||||||
typedef s32 (CALLBACK* _CDVDgetTrayStatus)();
|
typedef s32 (CALLBACK* _CDVDgetTrayStatus)();
|
||||||
|
typedef s32 (CALLBACK* _CDVDctrlTrayOpen)();
|
||||||
|
typedef s32 (CALLBACK* _CDVDctrlTrayClose)();
|
||||||
|
|
||||||
typedef void (CALLBACK* _CDVDconfigure)();
|
typedef void (CALLBACK* _CDVDconfigure)();
|
||||||
typedef s32 (CALLBACK* _CDVDtest)();
|
typedef s32 (CALLBACK* _CDVDtest)();
|
||||||
typedef void (CALLBACK* _CDVDabout)();
|
typedef void (CALLBACK* _CDVDabout)();
|
||||||
|
typedef void (CALLBACK* _CDVDnewDiskCB)(void (*callback)());
|
||||||
|
|
||||||
// DEV9
|
// DEV9
|
||||||
|
// NOTE: The read/write functions CANNOT use XMM/MMX regs
|
||||||
|
// If you want to use them, need to save and restore current ones
|
||||||
typedef s32 (CALLBACK* _DEV9init)();
|
typedef s32 (CALLBACK* _DEV9init)();
|
||||||
typedef s32 (CALLBACK* _DEV9open)(void *pDsp);
|
typedef s32 (CALLBACK* _DEV9open)(void *pDsp);
|
||||||
typedef void (CALLBACK* _DEV9close)();
|
typedef void (CALLBACK* _DEV9close)();
|
||||||
|
@ -501,6 +649,8 @@ typedef s32 (CALLBACK* _DEV9test)();
|
||||||
typedef void (CALLBACK* _DEV9about)();
|
typedef void (CALLBACK* _DEV9about)();
|
||||||
|
|
||||||
// USB
|
// USB
|
||||||
|
// NOTE: The read/write functions CANNOT use XMM/MMX regs
|
||||||
|
// If you want to use them, need to save and restore current ones
|
||||||
typedef s32 (CALLBACK* _USBinit)();
|
typedef s32 (CALLBACK* _USBinit)();
|
||||||
typedef s32 (CALLBACK* _USBopen)(void *pDsp);
|
typedef s32 (CALLBACK* _USBopen)(void *pDsp);
|
||||||
typedef void (CALLBACK* _USBclose)();
|
typedef void (CALLBACK* _USBclose)();
|
||||||
|
@ -511,6 +661,9 @@ typedef u32 (CALLBACK* _USBread32)(u32 mem);
|
||||||
typedef void (CALLBACK* _USBwrite8)(u32 mem, u8 value);
|
typedef void (CALLBACK* _USBwrite8)(u32 mem, u8 value);
|
||||||
typedef void (CALLBACK* _USBwrite16)(u32 mem, u16 value);
|
typedef void (CALLBACK* _USBwrite16)(u32 mem, u16 value);
|
||||||
typedef void (CALLBACK* _USBwrite32)(u32 mem, u32 value);
|
typedef void (CALLBACK* _USBwrite32)(u32 mem, u32 value);
|
||||||
|
typedef void (CALLBACK* _USBasync)(u32 cycles);
|
||||||
|
|
||||||
|
|
||||||
typedef void (CALLBACK* _USBirqCallback)(USBcallback callback);
|
typedef void (CALLBACK* _USBirqCallback)(USBcallback callback);
|
||||||
typedef USBhandler (CALLBACK* _USBirqHandler)(void);
|
typedef USBhandler (CALLBACK* _USBirqHandler)(void);
|
||||||
typedef void (CALLBACK* _USBsetRAM)(void *mem);
|
typedef void (CALLBACK* _USBsetRAM)(void *mem);
|
||||||
|
@ -520,19 +673,19 @@ typedef void (CALLBACK* _USBconfigure)();
|
||||||
typedef s32 (CALLBACK* _USBtest)();
|
typedef s32 (CALLBACK* _USBtest)();
|
||||||
typedef void (CALLBACK* _USBabout)();
|
typedef void (CALLBACK* _USBabout)();
|
||||||
|
|
||||||
//FireWire
|
//FW
|
||||||
typedef s32 (CALLBACK* _FireWireinit)();
|
typedef s32 (CALLBACK* _FWinit)();
|
||||||
typedef s32 (CALLBACK* _FireWireopen)(void *pDsp);
|
typedef s32 (CALLBACK* _FWopen)(void *pDsp);
|
||||||
typedef void (CALLBACK* _FireWireclose)();
|
typedef void (CALLBACK* _FWclose)();
|
||||||
typedef void (CALLBACK* _FireWireshutdown)();
|
typedef void (CALLBACK* _FWshutdown)();
|
||||||
typedef u32 (CALLBACK* _FireWireread32)(u32 mem);
|
typedef u32 (CALLBACK* _FWread32)(u32 mem);
|
||||||
typedef void (CALLBACK* _FireWirewrite32)(u32 mem, u32 value);
|
typedef void (CALLBACK* _FWwrite32)(u32 mem, u32 value);
|
||||||
typedef void (CALLBACK* _FireWireirqCallback)(void (*callback)());
|
typedef void (CALLBACK* _FWirqCallback)(void (*callback)());
|
||||||
|
|
||||||
typedef s32 (CALLBACK* _FireWirefreeze)(int mode, freezeData *data);
|
typedef s32 (CALLBACK* _FWfreeze)(int mode, freezeData *data);
|
||||||
typedef void (CALLBACK* _FireWireconfigure)();
|
typedef void (CALLBACK* _FWconfigure)();
|
||||||
typedef s32 (CALLBACK* _FireWiretest)();
|
typedef s32 (CALLBACK* _FWtest)();
|
||||||
typedef void (CALLBACK* _FireWireabout)();
|
typedef void (CALLBACK* _FWabout)();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -544,25 +697,28 @@ _GSopen GSopen;
|
||||||
_GSclose GSclose;
|
_GSclose GSclose;
|
||||||
_GSshutdown GSshutdown;
|
_GSshutdown GSshutdown;
|
||||||
_GSvsync GSvsync;
|
_GSvsync GSvsync;
|
||||||
_GSwrite8 GSwrite8;
|
|
||||||
_GSwrite16 GSwrite16;
|
|
||||||
_GSwrite32 GSwrite32;
|
|
||||||
_GSwrite64 GSwrite64;
|
|
||||||
_GSread8 GSread8;
|
|
||||||
_GSread16 GSread16;
|
|
||||||
_GSread32 GSread32;
|
|
||||||
_GSread64 GSread64;
|
|
||||||
_GSgifTransfer1 GSgifTransfer1;
|
_GSgifTransfer1 GSgifTransfer1;
|
||||||
_GSgifTransfer2 GSgifTransfer2;
|
_GSgifTransfer2 GSgifTransfer2;
|
||||||
_GSgifTransfer3 GSgifTransfer3;
|
_GSgifTransfer3 GSgifTransfer3;
|
||||||
|
_GSgetLastTag GSgetLastTag;
|
||||||
|
_GSgifSoftReset GSgifSoftReset;
|
||||||
_GSreadFIFO GSreadFIFO;
|
_GSreadFIFO GSreadFIFO;
|
||||||
|
_GSreadFIFO2 GSreadFIFO2;
|
||||||
|
|
||||||
_GSkeyEvent GSkeyEvent;
|
_GSkeyEvent GSkeyEvent;
|
||||||
|
_GSchangeSaveState GSchangeSaveState;
|
||||||
_GSmakeSnapshot GSmakeSnapshot;
|
_GSmakeSnapshot GSmakeSnapshot;
|
||||||
|
_GSmakeSnapshot2 GSmakeSnapshot2;
|
||||||
_GSirqCallback GSirqCallback;
|
_GSirqCallback GSirqCallback;
|
||||||
_GSprintf GSprintf;
|
_GSprintf GSprintf;
|
||||||
|
_GSsetBaseMem GSsetBaseMem;
|
||||||
|
_GSsetGameCRC GSsetGameCRC;
|
||||||
|
_GSsetFrameSkip GSsetFrameSkip;
|
||||||
|
_GSsetupRecording GSsetupRecording;
|
||||||
|
_GSreset GSreset;
|
||||||
|
_GSwriteCSR GSwriteCSR;
|
||||||
_GSgetDriverInfo GSgetDriverInfo;
|
_GSgetDriverInfo GSgetDriverInfo;
|
||||||
#ifdef __WIN32__
|
#ifdef _WIN32
|
||||||
_GSsetWindowInfo GSsetWindowInfo;
|
_GSsetWindowInfo GSsetWindowInfo;
|
||||||
#endif
|
#endif
|
||||||
_GSfreeze GSfreeze;
|
_GSfreeze GSfreeze;
|
||||||
|
@ -579,6 +735,7 @@ _PADkeyEvent PAD1keyEvent;
|
||||||
_PADstartPoll PAD1startPoll;
|
_PADstartPoll PAD1startPoll;
|
||||||
_PADpoll PAD1poll;
|
_PADpoll PAD1poll;
|
||||||
_PADquery PAD1query;
|
_PADquery PAD1query;
|
||||||
|
_PADupdate PAD1update;
|
||||||
|
|
||||||
_PADgsDriverInfo PAD1gsDriverInfo;
|
_PADgsDriverInfo PAD1gsDriverInfo;
|
||||||
_PADconfigure PAD1configure;
|
_PADconfigure PAD1configure;
|
||||||
|
@ -594,12 +751,26 @@ _PADkeyEvent PAD2keyEvent;
|
||||||
_PADstartPoll PAD2startPoll;
|
_PADstartPoll PAD2startPoll;
|
||||||
_PADpoll PAD2poll;
|
_PADpoll PAD2poll;
|
||||||
_PADquery PAD2query;
|
_PADquery PAD2query;
|
||||||
|
_PADupdate PAD2update;
|
||||||
|
|
||||||
_PADgsDriverInfo PAD2gsDriverInfo;
|
_PADgsDriverInfo PAD2gsDriverInfo;
|
||||||
_PADconfigure PAD2configure;
|
_PADconfigure PAD2configure;
|
||||||
_PADtest PAD2test;
|
_PADtest PAD2test;
|
||||||
_PADabout PAD2about;
|
_PADabout PAD2about;
|
||||||
|
|
||||||
|
// SIO[2]
|
||||||
|
_SIOinit SIOinit[2][9];
|
||||||
|
_SIOopen SIOopen[2][9];
|
||||||
|
_SIOclose SIOclose[2][9];
|
||||||
|
_SIOshutdown SIOshutdown[2][9];
|
||||||
|
_SIOstartPoll SIOstartPoll[2][9];
|
||||||
|
_SIOpoll SIOpoll[2][9];
|
||||||
|
_SIOquery SIOquery[2][9];
|
||||||
|
|
||||||
|
_SIOconfigure SIOconfigure[2][9];
|
||||||
|
_SIOtest SIOtest[2][9];
|
||||||
|
_SIOabout SIOabout[2][9];
|
||||||
|
|
||||||
// SPU2
|
// SPU2
|
||||||
_SPU2init SPU2init;
|
_SPU2init SPU2init;
|
||||||
_SPU2open SPU2open;
|
_SPU2open SPU2open;
|
||||||
|
@ -612,9 +783,15 @@ _SPU2writeDMA4Mem SPU2writeDMA4Mem;
|
||||||
_SPU2interruptDMA4 SPU2interruptDMA4;
|
_SPU2interruptDMA4 SPU2interruptDMA4;
|
||||||
_SPU2readDMA7Mem SPU2readDMA7Mem;
|
_SPU2readDMA7Mem SPU2readDMA7Mem;
|
||||||
_SPU2writeDMA7Mem SPU2writeDMA7Mem;
|
_SPU2writeDMA7Mem SPU2writeDMA7Mem;
|
||||||
|
_SPU2setDMABaseAddr SPU2setDMABaseAddr;
|
||||||
_SPU2interruptDMA7 SPU2interruptDMA7;
|
_SPU2interruptDMA7 SPU2interruptDMA7;
|
||||||
|
_SPU2ReadMemAddr SPU2ReadMemAddr;
|
||||||
|
_SPU2setupRecording SPU2setupRecording;
|
||||||
|
_SPU2WriteMemAddr SPU2WriteMemAddr;
|
||||||
_SPU2irqCallback SPU2irqCallback;
|
_SPU2irqCallback SPU2irqCallback;
|
||||||
|
|
||||||
|
_SPU2setClockPtr SPU2setClockPtr;
|
||||||
|
|
||||||
_SPU2async SPU2async;
|
_SPU2async SPU2async;
|
||||||
_SPU2freeze SPU2freeze;
|
_SPU2freeze SPU2freeze;
|
||||||
_SPU2configure SPU2configure;
|
_SPU2configure SPU2configure;
|
||||||
|
@ -628,14 +805,19 @@ _CDVDclose CDVDclose;
|
||||||
_CDVDshutdown CDVDshutdown;
|
_CDVDshutdown CDVDshutdown;
|
||||||
_CDVDreadTrack CDVDreadTrack;
|
_CDVDreadTrack CDVDreadTrack;
|
||||||
_CDVDgetBuffer CDVDgetBuffer;
|
_CDVDgetBuffer CDVDgetBuffer;
|
||||||
|
_CDVDreadSubQ CDVDreadSubQ;
|
||||||
_CDVDgetTN CDVDgetTN;
|
_CDVDgetTN CDVDgetTN;
|
||||||
_CDVDgetTD CDVDgetTD;
|
_CDVDgetTD CDVDgetTD;
|
||||||
_CDVDgetType CDVDgetType;
|
_CDVDgetTOC CDVDgetTOC;
|
||||||
|
_CDVDgetDiskType CDVDgetDiskType;
|
||||||
_CDVDgetTrayStatus CDVDgetTrayStatus;
|
_CDVDgetTrayStatus CDVDgetTrayStatus;
|
||||||
|
_CDVDctrlTrayOpen CDVDctrlTrayOpen;
|
||||||
|
_CDVDctrlTrayClose CDVDctrlTrayClose;
|
||||||
|
|
||||||
_CDVDconfigure CDVDconfigure;
|
_CDVDconfigure CDVDconfigure;
|
||||||
_CDVDtest CDVDtest;
|
_CDVDtest CDVDtest;
|
||||||
_CDVDabout CDVDabout;
|
_CDVDabout CDVDabout;
|
||||||
|
_CDVDnewDiskCB CDVDnewDiskCB;
|
||||||
|
|
||||||
// DEV9
|
// DEV9
|
||||||
_DEV9init DEV9init;
|
_DEV9init DEV9init;
|
||||||
|
@ -669,6 +851,8 @@ _USBread32 USBread32;
|
||||||
_USBwrite8 USBwrite8;
|
_USBwrite8 USBwrite8;
|
||||||
_USBwrite16 USBwrite16;
|
_USBwrite16 USBwrite16;
|
||||||
_USBwrite32 USBwrite32;
|
_USBwrite32 USBwrite32;
|
||||||
|
_USBasync USBasync;
|
||||||
|
|
||||||
_USBirqCallback USBirqCallback;
|
_USBirqCallback USBirqCallback;
|
||||||
_USBirqHandler USBirqHandler;
|
_USBirqHandler USBirqHandler;
|
||||||
_USBsetRAM USBsetRAM;
|
_USBsetRAM USBsetRAM;
|
||||||
|
@ -678,19 +862,19 @@ _USBfreeze USBfreeze;
|
||||||
_USBtest USBtest;
|
_USBtest USBtest;
|
||||||
_USBabout USBabout;
|
_USBabout USBabout;
|
||||||
|
|
||||||
// FireWire
|
// FW
|
||||||
_FireWireinit FireWireinit;
|
_FWinit FWinit;
|
||||||
_FireWireopen FireWireopen;
|
_FWopen FWopen;
|
||||||
_FireWireclose FireWireclose;
|
_FWclose FWclose;
|
||||||
_FireWireshutdown FireWireshutdown;
|
_FWshutdown FWshutdown;
|
||||||
_FireWireread32 FireWireread32;
|
_FWread32 FWread32;
|
||||||
_FireWirewrite32 FireWirewrite32;
|
_FWwrite32 FWwrite32;
|
||||||
_FireWireirqCallback FireWireirqCallback;
|
_FWirqCallback FWirqCallback;
|
||||||
|
|
||||||
_FireWireconfigure FireWireconfigure;
|
_FWconfigure FWconfigure;
|
||||||
_FireWirefreeze FireWirefreeze;
|
_FWfreeze FWfreeze;
|
||||||
_FireWiretest FireWiretest;
|
_FWtest FWtest;
|
||||||
_FireWireabout FireWireabout;
|
_FWabout FWabout;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* __PS2EDEFS_H__ */
|
#endif /* __PS2EDEFS_H__ */
|
||||||
|
|
|
@ -1,8 +1,42 @@
|
||||||
|
/* Pcsx2 - Pc Ps2 Emulator
|
||||||
|
* Copyright (C) 2002-2008 Pcsx2 Team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
#ifndef __PS2ETYPES_H__
|
#ifndef __PS2ETYPES_H__
|
||||||
#define __PS2ETYPES_H__
|
#define __PS2ETYPES_H__
|
||||||
|
|
||||||
|
#if defined (__linux__) && !defined(__LINUX__) // some distributions are lower case
|
||||||
|
#define __LINUX__
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __CYGWIN__
|
||||||
|
#define __LINUX__
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <windows.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ARRAYSIZE
|
||||||
|
#define ARRAYSIZE(x) (sizeof(x)/sizeof((x)[0]))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// Basic types
|
// Basic types
|
||||||
#if defined(__MSCW32__)
|
#if defined(_MSC_VER)
|
||||||
|
|
||||||
typedef __int8 s8;
|
typedef __int8 s8;
|
||||||
typedef __int16 s16;
|
typedef __int16 s16;
|
||||||
|
@ -14,13 +48,10 @@ typedef unsigned __int16 u16;
|
||||||
typedef unsigned __int32 u32;
|
typedef unsigned __int32 u32;
|
||||||
typedef unsigned __int64 u64;
|
typedef unsigned __int64 u64;
|
||||||
|
|
||||||
#if defined(__x86_64__)
|
#define PCSX2_ALIGNED16(x) __declspec(align(16)) x
|
||||||
typedef u64 uptr;
|
#define PCSX2_ALIGNED16_DECL(x) __declspec(align(16)) x
|
||||||
#else
|
|
||||||
typedef u32 uptr;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#elif defined(__LINUX__) || defined(__MINGW32__)
|
#else
|
||||||
|
|
||||||
typedef char s8;
|
typedef char s8;
|
||||||
typedef short s16;
|
typedef short s16;
|
||||||
|
@ -32,12 +63,43 @@ typedef unsigned short u16;
|
||||||
typedef unsigned int u32;
|
typedef unsigned int u32;
|
||||||
typedef unsigned long long u64;
|
typedef unsigned long long u64;
|
||||||
|
|
||||||
#if defined(__x86_64__)
|
#ifdef __LINUX__
|
||||||
typedef u64 uptr;
|
typedef union _LARGE_INTEGER
|
||||||
#else
|
{
|
||||||
typedef u32 uptr;
|
long long QuadPart;
|
||||||
|
} LARGE_INTEGER;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(__MINGW32__)
|
||||||
|
#define PCSX2_ALIGNED16(x) __declspec(align(16)) x
|
||||||
|
#else
|
||||||
|
#define PCSX2_ALIGNED16(x) x __attribute((aligned(16)))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define PCSX2_ALIGNED16_DECL(x) x
|
||||||
|
|
||||||
|
#ifndef __forceinline
|
||||||
|
#define __forceinline inline
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // _MSC_VER
|
||||||
|
|
||||||
|
#if defined(__x86_64__)
|
||||||
|
typedef u64 uptr;
|
||||||
|
typedef s64 sptr;
|
||||||
|
#else
|
||||||
|
typedef u32 uptr;
|
||||||
|
typedef s32 sptr;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int size;
|
||||||
|
s8 *data;
|
||||||
|
} freezeData;
|
||||||
|
|
||||||
|
/* common defines */
|
||||||
|
#ifndef C_ASSERT
|
||||||
|
#define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* __PS2ETYPES_H__ */
|
#endif /* __PS2ETYPES_H__ */
|
||||||
|
|
|
@ -356,6 +356,31 @@ void CALLBACK GSwrite64(u32 mem, u64 value) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u32 CALLBACK GSread32(u32 mem) {
|
||||||
|
u32 ret;
|
||||||
|
|
||||||
|
switch (mem) {
|
||||||
|
case 0x12001000: // CSR
|
||||||
|
// gs.interlace = 1 - gs.interlace;
|
||||||
|
ret = gs.interlace << 13;
|
||||||
|
ret|= gs.CSRr;
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
case 0x12001080: // SIGLBLID
|
||||||
|
ret = gs.SIGLBLID.sigid;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
ret = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef PREG_LOG
|
||||||
|
PREG_LOG("GSread32 mem %x ret %8.8lx\n", mem, ret);
|
||||||
|
#endif
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
u8 CALLBACK GSread8(u32 mem) {
|
u8 CALLBACK GSread8(u32 mem) {
|
||||||
u8 ret;
|
u8 ret;
|
||||||
|
|
||||||
|
@ -406,31 +431,6 @@ u16 CALLBACK GSread16(u32 mem) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 CALLBACK GSread32(u32 mem) {
|
|
||||||
u32 ret;
|
|
||||||
|
|
||||||
switch (mem) {
|
|
||||||
case 0x12001000: // CSR
|
|
||||||
// gs.interlace = 1 - gs.interlace;
|
|
||||||
ret = gs.interlace << 13;
|
|
||||||
ret|= gs.CSRr;
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
case 0x12001080: // SIGLBLID
|
|
||||||
ret = gs.SIGLBLID.sigid;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
ret = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef PREG_LOG
|
|
||||||
PREG_LOG("GSread32 mem %x ret %8.8lx\n", mem, ret);
|
|
||||||
#endif
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
u64 CALLBACK GSread64(u32 mem) {
|
u64 CALLBACK GSread64(u32 mem) {
|
||||||
u64 ret;
|
u64 ret;
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
#include "Rec.h"
|
#include "Rec.h"
|
||||||
#include "scale2x.h"
|
#include "scale2x.h"
|
||||||
#if defined(__i386__) || defined(__x86_64__)
|
#if defined(__i386__) || defined(__x86_64__)
|
||||||
#include "ix86.h"
|
#include "x86/ix86.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SDL_Surface *surf1x;
|
SDL_Surface *surf1x;
|
||||||
|
@ -47,7 +47,7 @@ void DXclearScr() {
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 DXopen() {
|
s32 DXopen() {
|
||||||
#ifdef __LINUX__
|
#ifndef __WIN32__
|
||||||
int screen;
|
int screen;
|
||||||
int w, h;
|
int w, h;
|
||||||
#endif
|
#endif
|
||||||
|
@ -60,7 +60,7 @@ s32 DXopen() {
|
||||||
SDL_VERSION(&info.version);
|
SDL_VERSION(&info.version);
|
||||||
if (SDL_GetWMInfo(&info) == 0) return -1;
|
if (SDL_GetWMInfo(&info) == 0) return -1;
|
||||||
|
|
||||||
#ifdef __LINUX__
|
#ifndef __WIN32__
|
||||||
info.info.x11.lock_func();
|
info.info.x11.lock_func();
|
||||||
screen = DefaultScreen(info.info.x11.display);
|
screen = DefaultScreen(info.info.x11.display);
|
||||||
w = DisplayWidth(info.info.x11.display, screen);
|
w = DisplayWidth(info.info.x11.display, screen);
|
||||||
|
|
|
@ -517,7 +517,7 @@ void DumpTexture() {
|
||||||
for (;;) {
|
for (;;) {
|
||||||
snapshotnr++;
|
snapshotnr++;
|
||||||
|
|
||||||
sprintf(filename,"tex%03ld_%x.bmp", snapshotnr, tex0->tbp0);
|
sprintf(filename,"tex%03d_%x.bmp", snapshotnr, tex0->tbp0);
|
||||||
|
|
||||||
bmpfile=fopen(filename,"rb");
|
bmpfile=fopen(filename,"rb");
|
||||||
if (bmpfile == NULL) break;
|
if (bmpfile == NULL) break;
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
curdir=`pwd`
|
||||||
|
|
||||||
|
echo ----------------------
|
||||||
|
echo Building GSSoft
|
||||||
|
echo ----------------------
|
||||||
|
|
||||||
|
if [ $# -gt 0 ] && [ $1 = "all" ]
|
||||||
|
then
|
||||||
|
|
||||||
|
aclocal
|
||||||
|
automake
|
||||||
|
autoconf
|
||||||
|
chmod +x configure
|
||||||
|
./configure --enable-sse2 --prefix=${PCSX2PLUGINS}
|
||||||
|
make clean
|
||||||
|
make install
|
||||||
|
|
||||||
|
else
|
||||||
|
make $@
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
exit 1
|
||||||
|
fi
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,114 @@
|
||||||
|
AC_INIT(GSSoft,1.0,zerofrog@gmail.com)
|
||||||
|
|
||||||
|
AM_INIT_AUTOMAKE(GSSoft,1.0)
|
||||||
|
|
||||||
|
AC_PROG_CC([gcc g++ cl KCC CC cxx cc++ xlC aCC c++])
|
||||||
|
AC_PROG_CXX([gcc g++ cl KCC CC cxx cc++ xlC aCC c++])
|
||||||
|
AC_PROG_CPP([gcc g++ cl KCC CC cxx cc++ xlC aCC c++])
|
||||||
|
|
||||||
|
AC_PROG_INSTALL
|
||||||
|
AC_PROG_RANLIB
|
||||||
|
|
||||||
|
dnl necessary for compiling assembly
|
||||||
|
AM_PROG_AS
|
||||||
|
|
||||||
|
GSSOFT_CURRENT=1
|
||||||
|
GSSOFT_REVISION=0
|
||||||
|
GSSOFT_AGE=0
|
||||||
|
GSSOFT_SONAME=libZeroGSogl.so.[$GSSOFT_CURRENT].[$GSSOFT_REVISION].[$GSSOFT_AGE]
|
||||||
|
GSSOFT_RELEASE=[$GSSOFT_CURRENT].[$GSSOFT_REVISION].[$GSSOFT_AGE]
|
||||||
|
|
||||||
|
AC_SUBST(GSSOFT_CURRENT)
|
||||||
|
AC_SUBST(GSSOFT_REVISION)
|
||||||
|
AC_SUBST(GSSOFT_AGE)
|
||||||
|
AC_SUBST(GSSOFT_RELEASE)
|
||||||
|
AC_SUBST(GSSOFT_SONAME)
|
||||||
|
|
||||||
|
dnl Check for debug build
|
||||||
|
AC_MSG_CHECKING(debug build)
|
||||||
|
AC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug], [debug build]),
|
||||||
|
debug=$enableval,debug=no)
|
||||||
|
if test "x$debug" == xyes
|
||||||
|
then
|
||||||
|
AC_DEFINE(_DEBUG,1,[_DEBUG])
|
||||||
|
CFLAGS="-g "
|
||||||
|
CPPFLAGS="-g "
|
||||||
|
CXXFLAGS="-g "
|
||||||
|
else
|
||||||
|
AC_DEFINE(NDEBUG,1,[NDEBUG])
|
||||||
|
CFLAGS="-O3 -fomit-frame-pointer "
|
||||||
|
CPPFLAGS="-O3 -fomit-frame-pointer "
|
||||||
|
CXXFLAGS="-O3 -fomit-frame-pointer "
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT($debug)
|
||||||
|
|
||||||
|
AC_CHECK_FUNCS([ _aligned_malloc _aligned_free ], AC_DEFINE(HAVE_ALIGNED_MALLOC))
|
||||||
|
|
||||||
|
dnl Check for dev build
|
||||||
|
AC_MSG_CHECKING(for development build...)
|
||||||
|
AC_ARG_ENABLE(devbuild, AC_HELP_STRING([--enable-devbuild], [Special Build for developers that simplifies testing and adds extra checks]),
|
||||||
|
devbuild=$enableval,devbuild=no)
|
||||||
|
if test "x$devbuild" == xno
|
||||||
|
then
|
||||||
|
AC_DEFINE(RELEASE_TO_PUBLIC,1,[RELEASE_TO_PUBLIC])
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT($devbuild)
|
||||||
|
AM_CONDITIONAL(RELEASE_TO_PUBLIC, test x$devbuild = xno)
|
||||||
|
|
||||||
|
|
||||||
|
dnl Check for 64bit CPU
|
||||||
|
AC_MSG_CHECKING(for a x86-64 CPU)
|
||||||
|
dnl if test "$build_os" == "target_os"
|
||||||
|
dnl then
|
||||||
|
AC_TRY_RUN([
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int a = 0;
|
||||||
|
int*pa = &a;
|
||||||
|
asm(".intel_syntax\n"
|
||||||
|
"mov %%rax, %0\n"
|
||||||
|
"mov %%eax, [%%rax]\n"
|
||||||
|
".att_syntax\n"
|
||||||
|
: : "r"(pa) : "%rax");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
],cpu64=yes,cpu64=no,)
|
||||||
|
dnl else
|
||||||
|
dnl cpu64=no
|
||||||
|
dnl fi
|
||||||
|
if test "x$cpu64" == xyes
|
||||||
|
then
|
||||||
|
AC_DEFINE(__x86_64__,1,[__x86_64__])
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT($cpu64)
|
||||||
|
AM_CONDITIONAL(X86_64, test x$cpu64 = xyes)
|
||||||
|
|
||||||
|
dnl gtk2
|
||||||
|
AC_MSG_CHECKING(gtk2+)
|
||||||
|
AC_CHECK_PROG(GTK_CONFIG, pkg-config, pkg-config)
|
||||||
|
LIBS+=$(pkg-config --libs gtk+-2.0)
|
||||||
|
|
||||||
|
LIBS+=$(pkg-config --libs sdl)
|
||||||
|
|
||||||
|
dnl assuming linux environment
|
||||||
|
so_ext=".so.$GSSOFT_RELEASE"
|
||||||
|
SHARED_LDFLAGS="-shared"
|
||||||
|
AC_SUBST(so_ext)
|
||||||
|
AC_SUBST(SHARED_LDFLAGS)
|
||||||
|
|
||||||
|
AC_CHECK_LIB(jpeg,main,[LIBS="$LIBS -ljpeg"])
|
||||||
|
AC_CHECK_LIB(pthread,main,[LIBS="$LIBS -lpthread"])
|
||||||
|
AC_CHECK_LIB(stdc++,main,[LIBS="$LIBS -lstdc++"])
|
||||||
|
AC_CHECK_LIB(z,main,[LIBS="$LIBS -lz"])
|
||||||
|
AC_CHECK_LIB(dl,main,[LIBS="$LIBS -ldl"])
|
||||||
|
AC_CHECK_LIB(Xxf86vm,main,[LIBS="$LIBS -lXxf86vm"])
|
||||||
|
|
||||||
|
AC_OUTPUT([
|
||||||
|
Makefile
|
||||||
|
])
|
||||||
|
|
||||||
|
echo "Configuration:"
|
||||||
|
echo " Target system type: $target"
|
||||||
|
echo " x86-64 build? $cpu64"
|
||||||
|
echo " Debug build? $debug"
|
||||||
|
echo " Dev build? $devbuild"
|
|
@ -0,0 +1,589 @@
|
||||||
|
#! /bin/sh
|
||||||
|
# depcomp - compile a program generating dependencies as side-effects
|
||||||
|
|
||||||
|
scriptversion=2007-03-29.01
|
||||||
|
|
||||||
|
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
|
||||||
|
# Foundation, Inc.
|
||||||
|
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
# any later version.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
# 02110-1301, USA.
|
||||||
|
|
||||||
|
# As a special exception to the GNU General Public License, if you
|
||||||
|
# distribute this file as part of a program that contains a
|
||||||
|
# configuration script generated by Autoconf, you may include it under
|
||||||
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
|
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
'')
|
||||||
|
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
||||||
|
exit 1;
|
||||||
|
;;
|
||||||
|
-h | --h*)
|
||||||
|
cat <<\EOF
|
||||||
|
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
|
||||||
|
|
||||||
|
Run PROGRAMS ARGS to compile a file, generating dependencies
|
||||||
|
as side-effects.
|
||||||
|
|
||||||
|
Environment variables:
|
||||||
|
depmode Dependency tracking mode.
|
||||||
|
source Source file read by `PROGRAMS ARGS'.
|
||||||
|
object Object file output by `PROGRAMS ARGS'.
|
||||||
|
DEPDIR directory where to store dependencies.
|
||||||
|
depfile Dependency file to output.
|
||||||
|
tmpdepfile Temporary file to use when outputing dependencies.
|
||||||
|
libtool Whether libtool is used (yes/no).
|
||||||
|
|
||||||
|
Report bugs to <bug-automake@gnu.org>.
|
||||||
|
EOF
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
-v | --v*)
|
||||||
|
echo "depcomp $scriptversion"
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
||||||
|
echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
|
||||||
|
depfile=${depfile-`echo "$object" |
|
||||||
|
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
|
||||||
|
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
||||||
|
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
|
||||||
|
# Some modes work just like other modes, but use different flags. We
|
||||||
|
# parameterize here, but still list the modes in the big case below,
|
||||||
|
# to make depend.m4 easier to write. Note that we *cannot* use a case
|
||||||
|
# here, because this file can only contain one case statement.
|
||||||
|
if test "$depmode" = hp; then
|
||||||
|
# HP compiler uses -M and no extra arg.
|
||||||
|
gccflag=-M
|
||||||
|
depmode=gcc
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$depmode" = dashXmstdout; then
|
||||||
|
# This is just like dashmstdout with a different argument.
|
||||||
|
dashmflag=-xM
|
||||||
|
depmode=dashmstdout
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$depmode" in
|
||||||
|
gcc3)
|
||||||
|
## gcc 3 implements dependency tracking that does exactly what
|
||||||
|
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
|
||||||
|
## it if -MD -MP comes after the -MF stuff. Hmm.
|
||||||
|
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
|
||||||
|
## the command line argument order; so add the flags where they
|
||||||
|
## appear in depend2.am. Note that the slowdown incurred here
|
||||||
|
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
case $arg in
|
||||||
|
-c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
|
||||||
|
*) set fnord "$@" "$arg" ;;
|
||||||
|
esac
|
||||||
|
shift # fnord
|
||||||
|
shift # $arg
|
||||||
|
done
|
||||||
|
"$@"
|
||||||
|
stat=$?
|
||||||
|
if test $stat -eq 0; then :
|
||||||
|
else
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
exit $stat
|
||||||
|
fi
|
||||||
|
mv "$tmpdepfile" "$depfile"
|
||||||
|
;;
|
||||||
|
|
||||||
|
gcc)
|
||||||
|
## There are various ways to get dependency output from gcc. Here's
|
||||||
|
## why we pick this rather obscure method:
|
||||||
|
## - Don't want to use -MD because we'd like the dependencies to end
|
||||||
|
## up in a subdir. Having to rename by hand is ugly.
|
||||||
|
## (We might end up doing this anyway to support other compilers.)
|
||||||
|
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
|
||||||
|
## -MM, not -M (despite what the docs say).
|
||||||
|
## - Using -M directly means running the compiler twice (even worse
|
||||||
|
## than renaming).
|
||||||
|
if test -z "$gccflag"; then
|
||||||
|
gccflag=-MD,
|
||||||
|
fi
|
||||||
|
"$@" -Wp,"$gccflag$tmpdepfile"
|
||||||
|
stat=$?
|
||||||
|
if test $stat -eq 0; then :
|
||||||
|
else
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
exit $stat
|
||||||
|
fi
|
||||||
|
rm -f "$depfile"
|
||||||
|
echo "$object : \\" > "$depfile"
|
||||||
|
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
|
||||||
|
## The second -e expression handles DOS-style file names with drive letters.
|
||||||
|
sed -e 's/^[^:]*: / /' \
|
||||||
|
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
|
||||||
|
## This next piece of magic avoids the `deleted header file' problem.
|
||||||
|
## The problem is that when a header file which appears in a .P file
|
||||||
|
## is deleted, the dependency causes make to die (because there is
|
||||||
|
## typically no way to rebuild the header). We avoid this by adding
|
||||||
|
## dummy dependencies for each header file. Too bad gcc doesn't do
|
||||||
|
## this for us directly.
|
||||||
|
tr ' ' '
|
||||||
|
' < "$tmpdepfile" |
|
||||||
|
## Some versions of gcc put a space before the `:'. On the theory
|
||||||
|
## that the space means something, we add a space to the output as
|
||||||
|
## well.
|
||||||
|
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||||
|
## correctly. Breaking it into two sed invocations is a workaround.
|
||||||
|
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
;;
|
||||||
|
|
||||||
|
hp)
|
||||||
|
# This case exists only to let depend.m4 do its work. It works by
|
||||||
|
# looking at the text of this script. This case will never be run,
|
||||||
|
# since it is checked for above.
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
sgi)
|
||||||
|
if test "$libtool" = yes; then
|
||||||
|
"$@" "-Wp,-MDupdate,$tmpdepfile"
|
||||||
|
else
|
||||||
|
"$@" -MDupdate "$tmpdepfile"
|
||||||
|
fi
|
||||||
|
stat=$?
|
||||||
|
if test $stat -eq 0; then :
|
||||||
|
else
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
exit $stat
|
||||||
|
fi
|
||||||
|
rm -f "$depfile"
|
||||||
|
|
||||||
|
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
|
||||||
|
echo "$object : \\" > "$depfile"
|
||||||
|
|
||||||
|
# Clip off the initial element (the dependent). Don't try to be
|
||||||
|
# clever and replace this with sed code, as IRIX sed won't handle
|
||||||
|
# lines with more than a fixed number of characters (4096 in
|
||||||
|
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
|
||||||
|
# the IRIX cc adds comments like `#:fec' to the end of the
|
||||||
|
# dependency line.
|
||||||
|
tr ' ' '
|
||||||
|
' < "$tmpdepfile" \
|
||||||
|
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
|
||||||
|
tr '
|
||||||
|
' ' ' >> $depfile
|
||||||
|
echo >> $depfile
|
||||||
|
|
||||||
|
# The second pass generates a dummy entry for each header file.
|
||||||
|
tr ' ' '
|
||||||
|
' < "$tmpdepfile" \
|
||||||
|
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
|
||||||
|
>> $depfile
|
||||||
|
else
|
||||||
|
# The sourcefile does not contain any dependencies, so just
|
||||||
|
# store a dummy comment line, to avoid errors with the Makefile
|
||||||
|
# "include basename.Plo" scheme.
|
||||||
|
echo "#dummy" > "$depfile"
|
||||||
|
fi
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
;;
|
||||||
|
|
||||||
|
aix)
|
||||||
|
# The C for AIX Compiler uses -M and outputs the dependencies
|
||||||
|
# in a .u file. In older versions, this file always lives in the
|
||||||
|
# current directory. Also, the AIX compiler puts `$object:' at the
|
||||||
|
# start of each line; $object doesn't have directory information.
|
||||||
|
# Version 6 uses the directory in both cases.
|
||||||
|
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||||
|
test "x$dir" = "x$object" && dir=
|
||||||
|
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||||
|
if test "$libtool" = yes; then
|
||||||
|
tmpdepfile1=$dir$base.u
|
||||||
|
tmpdepfile2=$base.u
|
||||||
|
tmpdepfile3=$dir.libs/$base.u
|
||||||
|
"$@" -Wc,-M
|
||||||
|
else
|
||||||
|
tmpdepfile1=$dir$base.u
|
||||||
|
tmpdepfile2=$dir$base.u
|
||||||
|
tmpdepfile3=$dir$base.u
|
||||||
|
"$@" -M
|
||||||
|
fi
|
||||||
|
stat=$?
|
||||||
|
|
||||||
|
if test $stat -eq 0; then :
|
||||||
|
else
|
||||||
|
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||||
|
exit $stat
|
||||||
|
fi
|
||||||
|
|
||||||
|
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||||
|
do
|
||||||
|
test -f "$tmpdepfile" && break
|
||||||
|
done
|
||||||
|
if test -f "$tmpdepfile"; then
|
||||||
|
# Each line is of the form `foo.o: dependent.h'.
|
||||||
|
# Do two passes, one to just change these to
|
||||||
|
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||||
|
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
||||||
|
# That's a tab and a space in the [].
|
||||||
|
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
|
||||||
|
else
|
||||||
|
# The sourcefile does not contain any dependencies, so just
|
||||||
|
# store a dummy comment line, to avoid errors with the Makefile
|
||||||
|
# "include basename.Plo" scheme.
|
||||||
|
echo "#dummy" > "$depfile"
|
||||||
|
fi
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
;;
|
||||||
|
|
||||||
|
icc)
|
||||||
|
# Intel's C compiler understands `-MD -MF file'. However on
|
||||||
|
# icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
|
||||||
|
# ICC 7.0 will fill foo.d with something like
|
||||||
|
# foo.o: sub/foo.c
|
||||||
|
# foo.o: sub/foo.h
|
||||||
|
# which is wrong. We want:
|
||||||
|
# sub/foo.o: sub/foo.c
|
||||||
|
# sub/foo.o: sub/foo.h
|
||||||
|
# sub/foo.c:
|
||||||
|
# sub/foo.h:
|
||||||
|
# ICC 7.1 will output
|
||||||
|
# foo.o: sub/foo.c sub/foo.h
|
||||||
|
# and will wrap long lines using \ :
|
||||||
|
# foo.o: sub/foo.c ... \
|
||||||
|
# sub/foo.h ... \
|
||||||
|
# ...
|
||||||
|
|
||||||
|
"$@" -MD -MF "$tmpdepfile"
|
||||||
|
stat=$?
|
||||||
|
if test $stat -eq 0; then :
|
||||||
|
else
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
exit $stat
|
||||||
|
fi
|
||||||
|
rm -f "$depfile"
|
||||||
|
# Each line is of the form `foo.o: dependent.h',
|
||||||
|
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
|
||||||
|
# Do two passes, one to just change these to
|
||||||
|
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||||
|
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
|
||||||
|
# Some versions of the HPUX 10.20 sed can't process this invocation
|
||||||
|
# correctly. Breaking it into two sed invocations is a workaround.
|
||||||
|
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
|
||||||
|
sed -e 's/$/ :/' >> "$depfile"
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
;;
|
||||||
|
|
||||||
|
hp2)
|
||||||
|
# The "hp" stanza above does not work with aCC (C++) and HP's ia64
|
||||||
|
# compilers, which have integrated preprocessors. The correct option
|
||||||
|
# to use with these is +Maked; it writes dependencies to a file named
|
||||||
|
# 'foo.d', which lands next to the object file, wherever that
|
||||||
|
# happens to be.
|
||||||
|
# Much of this is similar to the tru64 case; see comments there.
|
||||||
|
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||||
|
test "x$dir" = "x$object" && dir=
|
||||||
|
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||||
|
if test "$libtool" = yes; then
|
||||||
|
tmpdepfile1=$dir$base.d
|
||||||
|
tmpdepfile2=$dir.libs/$base.d
|
||||||
|
"$@" -Wc,+Maked
|
||||||
|
else
|
||||||
|
tmpdepfile1=$dir$base.d
|
||||||
|
tmpdepfile2=$dir$base.d
|
||||||
|
"$@" +Maked
|
||||||
|
fi
|
||||||
|
stat=$?
|
||||||
|
if test $stat -eq 0; then :
|
||||||
|
else
|
||||||
|
rm -f "$tmpdepfile1" "$tmpdepfile2"
|
||||||
|
exit $stat
|
||||||
|
fi
|
||||||
|
|
||||||
|
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
|
||||||
|
do
|
||||||
|
test -f "$tmpdepfile" && break
|
||||||
|
done
|
||||||
|
if test -f "$tmpdepfile"; then
|
||||||
|
sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
|
||||||
|
# Add `dependent.h:' lines.
|
||||||
|
sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
|
||||||
|
else
|
||||||
|
echo "#dummy" > "$depfile"
|
||||||
|
fi
|
||||||
|
rm -f "$tmpdepfile" "$tmpdepfile2"
|
||||||
|
;;
|
||||||
|
|
||||||
|
tru64)
|
||||||
|
# The Tru64 compiler uses -MD to generate dependencies as a side
|
||||||
|
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
|
||||||
|
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
|
||||||
|
# dependencies in `foo.d' instead, so we check for that too.
|
||||||
|
# Subdirectories are respected.
|
||||||
|
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||||
|
test "x$dir" = "x$object" && dir=
|
||||||
|
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||||
|
|
||||||
|
if test "$libtool" = yes; then
|
||||||
|
# With Tru64 cc, shared objects can also be used to make a
|
||||||
|
# static library. This mechanism is used in libtool 1.4 series to
|
||||||
|
# handle both shared and static libraries in a single compilation.
|
||||||
|
# With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
|
||||||
|
#
|
||||||
|
# With libtool 1.5 this exception was removed, and libtool now
|
||||||
|
# generates 2 separate objects for the 2 libraries. These two
|
||||||
|
# compilations output dependencies in $dir.libs/$base.o.d and
|
||||||
|
# in $dir$base.o.d. We have to check for both files, because
|
||||||
|
# one of the two compilations can be disabled. We should prefer
|
||||||
|
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
|
||||||
|
# automatically cleaned when .libs/ is deleted, while ignoring
|
||||||
|
# the former would cause a distcleancheck panic.
|
||||||
|
tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
|
||||||
|
tmpdepfile2=$dir$base.o.d # libtool 1.5
|
||||||
|
tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
|
||||||
|
tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
|
||||||
|
"$@" -Wc,-MD
|
||||||
|
else
|
||||||
|
tmpdepfile1=$dir$base.o.d
|
||||||
|
tmpdepfile2=$dir$base.d
|
||||||
|
tmpdepfile3=$dir$base.d
|
||||||
|
tmpdepfile4=$dir$base.d
|
||||||
|
"$@" -MD
|
||||||
|
fi
|
||||||
|
|
||||||
|
stat=$?
|
||||||
|
if test $stat -eq 0; then :
|
||||||
|
else
|
||||||
|
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
||||||
|
exit $stat
|
||||||
|
fi
|
||||||
|
|
||||||
|
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
||||||
|
do
|
||||||
|
test -f "$tmpdepfile" && break
|
||||||
|
done
|
||||||
|
if test -f "$tmpdepfile"; then
|
||||||
|
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
||||||
|
# That's a tab and a space in the [].
|
||||||
|
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
|
||||||
|
else
|
||||||
|
echo "#dummy" > "$depfile"
|
||||||
|
fi
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
;;
|
||||||
|
|
||||||
|
#nosideeffect)
|
||||||
|
# This comment above is used by automake to tell side-effect
|
||||||
|
# dependency tracking mechanisms from slower ones.
|
||||||
|
|
||||||
|
dashmstdout)
|
||||||
|
# Important note: in order to support this mode, a compiler *must*
|
||||||
|
# always write the preprocessed file to stdout, regardless of -o.
|
||||||
|
"$@" || exit $?
|
||||||
|
|
||||||
|
# Remove the call to Libtool.
|
||||||
|
if test "$libtool" = yes; then
|
||||||
|
while test $1 != '--mode=compile'; do
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Remove `-o $object'.
|
||||||
|
IFS=" "
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
case $arg in
|
||||||
|
-o)
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
$object)
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
set fnord "$@" "$arg"
|
||||||
|
shift # fnord
|
||||||
|
shift # $arg
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
test -z "$dashmflag" && dashmflag=-M
|
||||||
|
# Require at least two characters before searching for `:'
|
||||||
|
# in the target name. This is to cope with DOS-style filenames:
|
||||||
|
# a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
|
||||||
|
"$@" $dashmflag |
|
||||||
|
sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
|
||||||
|
rm -f "$depfile"
|
||||||
|
cat < "$tmpdepfile" > "$depfile"
|
||||||
|
tr ' ' '
|
||||||
|
' < "$tmpdepfile" | \
|
||||||
|
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||||
|
## correctly. Breaking it into two sed invocations is a workaround.
|
||||||
|
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
;;
|
||||||
|
|
||||||
|
dashXmstdout)
|
||||||
|
# This case only exists to satisfy depend.m4. It is never actually
|
||||||
|
# run, as this mode is specially recognized in the preamble.
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
makedepend)
|
||||||
|
"$@" || exit $?
|
||||||
|
# Remove any Libtool call
|
||||||
|
if test "$libtool" = yes; then
|
||||||
|
while test $1 != '--mode=compile'; do
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
# X makedepend
|
||||||
|
shift
|
||||||
|
cleared=no
|
||||||
|
for arg in "$@"; do
|
||||||
|
case $cleared in
|
||||||
|
no)
|
||||||
|
set ""; shift
|
||||||
|
cleared=yes ;;
|
||||||
|
esac
|
||||||
|
case "$arg" in
|
||||||
|
-D*|-I*)
|
||||||
|
set fnord "$@" "$arg"; shift ;;
|
||||||
|
# Strip any option that makedepend may not understand. Remove
|
||||||
|
# the object too, otherwise makedepend will parse it as a source file.
|
||||||
|
-*|$object)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
set fnord "$@" "$arg"; shift ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
obj_suffix="`echo $object | sed 's/^.*\././'`"
|
||||||
|
touch "$tmpdepfile"
|
||||||
|
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
|
||||||
|
rm -f "$depfile"
|
||||||
|
cat < "$tmpdepfile" > "$depfile"
|
||||||
|
sed '1,2d' "$tmpdepfile" | tr ' ' '
|
||||||
|
' | \
|
||||||
|
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||||
|
## correctly. Breaking it into two sed invocations is a workaround.
|
||||||
|
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||||
|
rm -f "$tmpdepfile" "$tmpdepfile".bak
|
||||||
|
;;
|
||||||
|
|
||||||
|
cpp)
|
||||||
|
# Important note: in order to support this mode, a compiler *must*
|
||||||
|
# always write the preprocessed file to stdout.
|
||||||
|
"$@" || exit $?
|
||||||
|
|
||||||
|
# Remove the call to Libtool.
|
||||||
|
if test "$libtool" = yes; then
|
||||||
|
while test $1 != '--mode=compile'; do
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Remove `-o $object'.
|
||||||
|
IFS=" "
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
case $arg in
|
||||||
|
-o)
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
$object)
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
set fnord "$@" "$arg"
|
||||||
|
shift # fnord
|
||||||
|
shift # $arg
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
"$@" -E |
|
||||||
|
sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
|
||||||
|
-e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
|
||||||
|
sed '$ s: \\$::' > "$tmpdepfile"
|
||||||
|
rm -f "$depfile"
|
||||||
|
echo "$object : \\" > "$depfile"
|
||||||
|
cat < "$tmpdepfile" >> "$depfile"
|
||||||
|
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
;;
|
||||||
|
|
||||||
|
msvisualcpp)
|
||||||
|
# Important note: in order to support this mode, a compiler *must*
|
||||||
|
# always write the preprocessed file to stdout, regardless of -o,
|
||||||
|
# because we must use -o when running libtool.
|
||||||
|
"$@" || exit $?
|
||||||
|
IFS=" "
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
case "$arg" in
|
||||||
|
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
|
||||||
|
set fnord "$@"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
set fnord "$@" "$arg"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
"$@" -E |
|
||||||
|
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
|
||||||
|
rm -f "$depfile"
|
||||||
|
echo "$object : \\" > "$depfile"
|
||||||
|
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
|
||||||
|
echo " " >> "$depfile"
|
||||||
|
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
;;
|
||||||
|
|
||||||
|
none)
|
||||||
|
exec "$@"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "Unknown depmode $depmode" 1>&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
# Local Variables:
|
||||||
|
# mode: shell-script
|
||||||
|
# sh-indentation: 2
|
||||||
|
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-end: "$"
|
||||||
|
# End:
|
|
@ -0,0 +1,519 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# install - install a program, script, or datafile
|
||||||
|
|
||||||
|
scriptversion=2006-12-25.00
|
||||||
|
|
||||||
|
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||||
|
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||||
|
# following copyright and license.
|
||||||
|
#
|
||||||
|
# Copyright (C) 1994 X Consortium
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
# of this software and associated documentation files (the "Software"), to
|
||||||
|
# deal in the Software without restriction, including without limitation the
|
||||||
|
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
|
# sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
# furnished to do so, subject to the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be included in
|
||||||
|
# all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
|
||||||
|
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
#
|
||||||
|
# Except as contained in this notice, the name of the X Consortium shall not
|
||||||
|
# be used in advertising or otherwise to promote the sale, use or other deal-
|
||||||
|
# ings in this Software without prior written authorization from the X Consor-
|
||||||
|
# tium.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# FSF changes to this file are in the public domain.
|
||||||
|
#
|
||||||
|
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||||
|
# `make' implicit rules from creating a file called install from it
|
||||||
|
# when there is no Makefile.
|
||||||
|
#
|
||||||
|
# This script is compatible with the BSD install script, but was written
|
||||||
|
# from scratch.
|
||||||
|
|
||||||
|
nl='
|
||||||
|
'
|
||||||
|
IFS=" "" $nl"
|
||||||
|
|
||||||
|
# set DOITPROG to echo to test this script
|
||||||
|
|
||||||
|
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
||||||
|
doit=${DOITPROG-}
|
||||||
|
if test -z "$doit"; then
|
||||||
|
doit_exec=exec
|
||||||
|
else
|
||||||
|
doit_exec=$doit
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Put in absolute file names if you don't have them in your path;
|
||||||
|
# or use environment vars.
|
||||||
|
|
||||||
|
chgrpprog=${CHGRPPROG-chgrp}
|
||||||
|
chmodprog=${CHMODPROG-chmod}
|
||||||
|
chownprog=${CHOWNPROG-chown}
|
||||||
|
cmpprog=${CMPPROG-cmp}
|
||||||
|
cpprog=${CPPROG-cp}
|
||||||
|
mkdirprog=${MKDIRPROG-mkdir}
|
||||||
|
mvprog=${MVPROG-mv}
|
||||||
|
rmprog=${RMPROG-rm}
|
||||||
|
stripprog=${STRIPPROG-strip}
|
||||||
|
|
||||||
|
posix_glob='?'
|
||||||
|
initialize_posix_glob='
|
||||||
|
test "$posix_glob" != "?" || {
|
||||||
|
if (set -f) 2>/dev/null; then
|
||||||
|
posix_glob=
|
||||||
|
else
|
||||||
|
posix_glob=:
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
'
|
||||||
|
|
||||||
|
posix_mkdir=
|
||||||
|
|
||||||
|
# Desired mode of installed file.
|
||||||
|
mode=0755
|
||||||
|
|
||||||
|
chgrpcmd=
|
||||||
|
chmodcmd=$chmodprog
|
||||||
|
chowncmd=
|
||||||
|
mvcmd=$mvprog
|
||||||
|
rmcmd="$rmprog -f"
|
||||||
|
stripcmd=
|
||||||
|
|
||||||
|
src=
|
||||||
|
dst=
|
||||||
|
dir_arg=
|
||||||
|
dst_arg=
|
||||||
|
|
||||||
|
copy_on_change=false
|
||||||
|
no_target_directory=
|
||||||
|
|
||||||
|
usage="\
|
||||||
|
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
||||||
|
or: $0 [OPTION]... SRCFILES... DIRECTORY
|
||||||
|
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
|
||||||
|
or: $0 [OPTION]... -d DIRECTORIES...
|
||||||
|
|
||||||
|
In the 1st form, copy SRCFILE to DSTFILE.
|
||||||
|
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
|
||||||
|
In the 4th, create DIRECTORIES.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
--help display this help and exit.
|
||||||
|
--version display version info and exit.
|
||||||
|
|
||||||
|
-c (ignored)
|
||||||
|
-C install only if different (preserve the last data modification time)
|
||||||
|
-d create directories instead of installing files.
|
||||||
|
-g GROUP $chgrpprog installed files to GROUP.
|
||||||
|
-m MODE $chmodprog installed files to MODE.
|
||||||
|
-o USER $chownprog installed files to USER.
|
||||||
|
-s $stripprog installed files.
|
||||||
|
-t DIRECTORY install into DIRECTORY.
|
||||||
|
-T report an error if DSTFILE is a directory.
|
||||||
|
|
||||||
|
Environment variables override the default commands:
|
||||||
|
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
|
||||||
|
RMPROG STRIPPROG
|
||||||
|
"
|
||||||
|
|
||||||
|
while test $# -ne 0; do
|
||||||
|
case $1 in
|
||||||
|
-c) ;;
|
||||||
|
|
||||||
|
-C) copy_on_change=true;;
|
||||||
|
|
||||||
|
-d) dir_arg=true;;
|
||||||
|
|
||||||
|
-g) chgrpcmd="$chgrpprog $2"
|
||||||
|
shift;;
|
||||||
|
|
||||||
|
--help) echo "$usage"; exit $?;;
|
||||||
|
|
||||||
|
-m) mode=$2
|
||||||
|
case $mode in
|
||||||
|
*' '* | *' '* | *'
|
||||||
|
'* | *'*'* | *'?'* | *'['*)
|
||||||
|
echo "$0: invalid mode: $mode" >&2
|
||||||
|
exit 1;;
|
||||||
|
esac
|
||||||
|
shift;;
|
||||||
|
|
||||||
|
-o) chowncmd="$chownprog $2"
|
||||||
|
shift;;
|
||||||
|
|
||||||
|
-s) stripcmd=$stripprog;;
|
||||||
|
|
||||||
|
-t) dst_arg=$2
|
||||||
|
shift;;
|
||||||
|
|
||||||
|
-T) no_target_directory=true;;
|
||||||
|
|
||||||
|
--version) echo "$0 $scriptversion"; exit $?;;
|
||||||
|
|
||||||
|
--) shift
|
||||||
|
break;;
|
||||||
|
|
||||||
|
-*) echo "$0: invalid option: $1" >&2
|
||||||
|
exit 1;;
|
||||||
|
|
||||||
|
*) break;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
|
||||||
|
# When -d is used, all remaining arguments are directories to create.
|
||||||
|
# When -t is used, the destination is already specified.
|
||||||
|
# Otherwise, the last argument is the destination. Remove it from $@.
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
if test -n "$dst_arg"; then
|
||||||
|
# $@ is not empty: it contains at least $arg.
|
||||||
|
set fnord "$@" "$dst_arg"
|
||||||
|
shift # fnord
|
||||||
|
fi
|
||||||
|
shift # arg
|
||||||
|
dst_arg=$arg
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test $# -eq 0; then
|
||||||
|
if test -z "$dir_arg"; then
|
||||||
|
echo "$0: no input file specified." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
# It's OK to call `install-sh -d' without argument.
|
||||||
|
# This can happen when creating conditional directories.
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -z "$dir_arg"; then
|
||||||
|
trap '(exit $?); exit' 1 2 13 15
|
||||||
|
|
||||||
|
# Set umask so as not to create temps with too-generous modes.
|
||||||
|
# However, 'strip' requires both read and write access to temps.
|
||||||
|
case $mode in
|
||||||
|
# Optimize common cases.
|
||||||
|
*644) cp_umask=133;;
|
||||||
|
*755) cp_umask=22;;
|
||||||
|
|
||||||
|
*[0-7])
|
||||||
|
if test -z "$stripcmd"; then
|
||||||
|
u_plus_rw=
|
||||||
|
else
|
||||||
|
u_plus_rw='% 200'
|
||||||
|
fi
|
||||||
|
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
|
||||||
|
*)
|
||||||
|
if test -z "$stripcmd"; then
|
||||||
|
u_plus_rw=
|
||||||
|
else
|
||||||
|
u_plus_rw=,u+rw
|
||||||
|
fi
|
||||||
|
cp_umask=$mode$u_plus_rw;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
for src
|
||||||
|
do
|
||||||
|
# Protect names starting with `-'.
|
||||||
|
case $src in
|
||||||
|
-*) src=./$src;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if test -n "$dir_arg"; then
|
||||||
|
dst=$src
|
||||||
|
dstdir=$dst
|
||||||
|
test -d "$dstdir"
|
||||||
|
dstdir_status=$?
|
||||||
|
else
|
||||||
|
|
||||||
|
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
||||||
|
# might cause directories to be created, which would be especially bad
|
||||||
|
# if $src (and thus $dsttmp) contains '*'.
|
||||||
|
if test ! -f "$src" && test ! -d "$src"; then
|
||||||
|
echo "$0: $src does not exist." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -z "$dst_arg"; then
|
||||||
|
echo "$0: no destination specified." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
dst=$dst_arg
|
||||||
|
# Protect names starting with `-'.
|
||||||
|
case $dst in
|
||||||
|
-*) dst=./$dst;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# If destination is a directory, append the input filename; won't work
|
||||||
|
# if double slashes aren't ignored.
|
||||||
|
if test -d "$dst"; then
|
||||||
|
if test -n "$no_target_directory"; then
|
||||||
|
echo "$0: $dst_arg: Is a directory" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
dstdir=$dst
|
||||||
|
dst=$dstdir/`basename "$src"`
|
||||||
|
dstdir_status=0
|
||||||
|
else
|
||||||
|
# Prefer dirname, but fall back on a substitute if dirname fails.
|
||||||
|
dstdir=`
|
||||||
|
(dirname "$dst") 2>/dev/null ||
|
||||||
|
expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
||||||
|
X"$dst" : 'X\(//\)[^/]' \| \
|
||||||
|
X"$dst" : 'X\(//\)$' \| \
|
||||||
|
X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
|
||||||
|
echo X"$dst" |
|
||||||
|
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
/^X\(\/\/\)[^/].*/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
/^X\(\/\/\)$/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
/^X\(\/\).*/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
s/.*/./; q'
|
||||||
|
`
|
||||||
|
|
||||||
|
test -d "$dstdir"
|
||||||
|
dstdir_status=$?
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
obsolete_mkdir_used=false
|
||||||
|
|
||||||
|
if test $dstdir_status != 0; then
|
||||||
|
case $posix_mkdir in
|
||||||
|
'')
|
||||||
|
# Create intermediate dirs using mode 755 as modified by the umask.
|
||||||
|
# This is like FreeBSD 'install' as of 1997-10-28.
|
||||||
|
umask=`umask`
|
||||||
|
case $stripcmd.$umask in
|
||||||
|
# Optimize common cases.
|
||||||
|
*[2367][2367]) mkdir_umask=$umask;;
|
||||||
|
.*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
|
||||||
|
|
||||||
|
*[0-7])
|
||||||
|
mkdir_umask=`expr $umask + 22 \
|
||||||
|
- $umask % 100 % 40 + $umask % 20 \
|
||||||
|
- $umask % 10 % 4 + $umask % 2
|
||||||
|
`;;
|
||||||
|
*) mkdir_umask=$umask,go-w;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# With -d, create the new directory with the user-specified mode.
|
||||||
|
# Otherwise, rely on $mkdir_umask.
|
||||||
|
if test -n "$dir_arg"; then
|
||||||
|
mkdir_mode=-m$mode
|
||||||
|
else
|
||||||
|
mkdir_mode=
|
||||||
|
fi
|
||||||
|
|
||||||
|
posix_mkdir=false
|
||||||
|
case $umask in
|
||||||
|
*[123567][0-7][0-7])
|
||||||
|
# POSIX mkdir -p sets u+wx bits regardless of umask, which
|
||||||
|
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
||||||
|
trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
|
||||||
|
|
||||||
|
if (umask $mkdir_umask &&
|
||||||
|
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
if test -z "$dir_arg" || {
|
||||||
|
# Check for POSIX incompatibilities with -m.
|
||||||
|
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
||||||
|
# other-writeable bit of parent directory when it shouldn't.
|
||||||
|
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
||||||
|
ls_ld_tmpdir=`ls -ld "$tmpdir"`
|
||||||
|
case $ls_ld_tmpdir in
|
||||||
|
d????-?r-*) different_mode=700;;
|
||||||
|
d????-?--*) different_mode=755;;
|
||||||
|
*) false;;
|
||||||
|
esac &&
|
||||||
|
$mkdirprog -m$different_mode -p -- "$tmpdir" && {
|
||||||
|
ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
|
||||||
|
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
then posix_mkdir=:
|
||||||
|
fi
|
||||||
|
rmdir "$tmpdir/d" "$tmpdir"
|
||||||
|
else
|
||||||
|
# Remove any dirs left behind by ancient mkdir implementations.
|
||||||
|
rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
|
||||||
|
fi
|
||||||
|
trap '' 0;;
|
||||||
|
esac;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if
|
||||||
|
$posix_mkdir && (
|
||||||
|
umask $mkdir_umask &&
|
||||||
|
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
|
||||||
|
)
|
||||||
|
then :
|
||||||
|
else
|
||||||
|
|
||||||
|
# The umask is ridiculous, or mkdir does not conform to POSIX,
|
||||||
|
# or it failed possibly due to a race condition. Create the
|
||||||
|
# directory the slow way, step by step, checking for races as we go.
|
||||||
|
|
||||||
|
case $dstdir in
|
||||||
|
/*) prefix='/';;
|
||||||
|
-*) prefix='./';;
|
||||||
|
*) prefix='';;
|
||||||
|
esac
|
||||||
|
|
||||||
|
eval "$initialize_posix_glob"
|
||||||
|
|
||||||
|
oIFS=$IFS
|
||||||
|
IFS=/
|
||||||
|
$posix_glob set -f
|
||||||
|
set fnord $dstdir
|
||||||
|
shift
|
||||||
|
$posix_glob set +f
|
||||||
|
IFS=$oIFS
|
||||||
|
|
||||||
|
prefixes=
|
||||||
|
|
||||||
|
for d
|
||||||
|
do
|
||||||
|
test -z "$d" && continue
|
||||||
|
|
||||||
|
prefix=$prefix$d
|
||||||
|
if test -d "$prefix"; then
|
||||||
|
prefixes=
|
||||||
|
else
|
||||||
|
if $posix_mkdir; then
|
||||||
|
(umask=$mkdir_umask &&
|
||||||
|
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
||||||
|
# Don't fail if two instances are running concurrently.
|
||||||
|
test -d "$prefix" || exit 1
|
||||||
|
else
|
||||||
|
case $prefix in
|
||||||
|
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
|
||||||
|
*) qprefix=$prefix;;
|
||||||
|
esac
|
||||||
|
prefixes="$prefixes '$qprefix'"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
prefix=$prefix/
|
||||||
|
done
|
||||||
|
|
||||||
|
if test -n "$prefixes"; then
|
||||||
|
# Don't fail if two instances are running concurrently.
|
||||||
|
(umask $mkdir_umask &&
|
||||||
|
eval "\$doit_exec \$mkdirprog $prefixes") ||
|
||||||
|
test -d "$dstdir" || exit 1
|
||||||
|
obsolete_mkdir_used=true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -n "$dir_arg"; then
|
||||||
|
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
|
||||||
|
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
|
||||||
|
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
|
||||||
|
test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
|
||||||
|
else
|
||||||
|
|
||||||
|
# Make a couple of temp file names in the proper directory.
|
||||||
|
dsttmp=$dstdir/_inst.$$_
|
||||||
|
rmtmp=$dstdir/_rm.$$_
|
||||||
|
|
||||||
|
# Trap to clean up those temp files at exit.
|
||||||
|
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
||||||
|
|
||||||
|
# Copy the file name to the temp name.
|
||||||
|
(umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
|
||||||
|
|
||||||
|
# and set any options; do chmod last to preserve setuid bits.
|
||||||
|
#
|
||||||
|
# If any of these fail, we abort the whole thing. If we want to
|
||||||
|
# ignore errors from any of these, just make sure not to ignore
|
||||||
|
# errors from the above "$doit $cpprog $src $dsttmp" command.
|
||||||
|
#
|
||||||
|
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
|
||||||
|
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
|
||||||
|
{ test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
|
||||||
|
{ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
|
||||||
|
|
||||||
|
# If -C, don't bother to copy if it wouldn't change the file.
|
||||||
|
if $copy_on_change &&
|
||||||
|
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
|
||||||
|
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
|
||||||
|
|
||||||
|
eval "$initialize_posix_glob" &&
|
||||||
|
$posix_glob set -f &&
|
||||||
|
set X $old && old=:$2:$4:$5:$6 &&
|
||||||
|
set X $new && new=:$2:$4:$5:$6 &&
|
||||||
|
$posix_glob set +f &&
|
||||||
|
|
||||||
|
test "$old" = "$new" &&
|
||||||
|
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
rm -f "$dsttmp"
|
||||||
|
else
|
||||||
|
# Rename the file to the real destination.
|
||||||
|
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
|
||||||
|
|
||||||
|
# The rename failed, perhaps because mv can't rename something else
|
||||||
|
# to itself, or perhaps because mv is so ancient that it does not
|
||||||
|
# support -f.
|
||||||
|
{
|
||||||
|
# Now remove or move aside any old file at destination location.
|
||||||
|
# We try this two ways since rm can't unlink itself on some
|
||||||
|
# systems and the destination file might be busy for other
|
||||||
|
# reasons. In this case, the final cleanup might fail but the new
|
||||||
|
# file should still install successfully.
|
||||||
|
{
|
||||||
|
test ! -f "$dst" ||
|
||||||
|
$doit $rmcmd -f "$dst" 2>/dev/null ||
|
||||||
|
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
|
||||||
|
{ $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
|
||||||
|
} ||
|
||||||
|
{ echo "$0: cannot unlink or rename $dst" >&2
|
||||||
|
(exit 1); exit 1
|
||||||
|
}
|
||||||
|
} &&
|
||||||
|
|
||||||
|
# Now rename the file to the real destination.
|
||||||
|
$doit $mvcmd "$dsttmp" "$dst"
|
||||||
|
}
|
||||||
|
fi || exit 1
|
||||||
|
|
||||||
|
trap '' 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Local variables:
|
||||||
|
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-end: "$"
|
||||||
|
# End:
|
|
@ -0,0 +1,367 @@
|
||||||
|
#! /bin/sh
|
||||||
|
# Common stub for a few missing GNU programs while installing.
|
||||||
|
|
||||||
|
scriptversion=2006-05-10.23
|
||||||
|
|
||||||
|
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
|
||||||
|
# Free Software Foundation, Inc.
|
||||||
|
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
|
||||||
|
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
# any later version.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
# 02110-1301, USA.
|
||||||
|
|
||||||
|
# As a special exception to the GNU General Public License, if you
|
||||||
|
# distribute this file as part of a program that contains a
|
||||||
|
# configuration script generated by Autoconf, you may include it under
|
||||||
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
|
if test $# -eq 0; then
|
||||||
|
echo 1>&2 "Try \`$0 --help' for more information"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
run=:
|
||||||
|
sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
|
||||||
|
sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
|
||||||
|
|
||||||
|
# In the cases where this matters, `missing' is being run in the
|
||||||
|
# srcdir already.
|
||||||
|
if test -f configure.ac; then
|
||||||
|
configure_ac=configure.ac
|
||||||
|
else
|
||||||
|
configure_ac=configure.in
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg="missing on your system"
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
--run)
|
||||||
|
# Try to run requested program, and just exit if it succeeds.
|
||||||
|
run=
|
||||||
|
shift
|
||||||
|
"$@" && exit 0
|
||||||
|
# Exit code 63 means version mismatch. This often happens
|
||||||
|
# when the user try to use an ancient version of a tool on
|
||||||
|
# a file that requires a minimum version. In this case we
|
||||||
|
# we should proceed has if the program had been absent, or
|
||||||
|
# if --run hadn't been passed.
|
||||||
|
if test $? = 63; then
|
||||||
|
run=:
|
||||||
|
msg="probably too old"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
-h|--h|--he|--hel|--help)
|
||||||
|
echo "\
|
||||||
|
$0 [OPTION]... PROGRAM [ARGUMENT]...
|
||||||
|
|
||||||
|
Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
|
||||||
|
error status if there is no known handling for PROGRAM.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-h, --help display this help and exit
|
||||||
|
-v, --version output version information and exit
|
||||||
|
--run try to run the given command, and emulate it if it fails
|
||||||
|
|
||||||
|
Supported PROGRAM values:
|
||||||
|
aclocal touch file \`aclocal.m4'
|
||||||
|
autoconf touch file \`configure'
|
||||||
|
autoheader touch file \`config.h.in'
|
||||||
|
autom4te touch the output file, or create a stub one
|
||||||
|
automake touch all \`Makefile.in' files
|
||||||
|
bison create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||||
|
flex create \`lex.yy.c', if possible, from existing .c
|
||||||
|
help2man touch the output file
|
||||||
|
lex create \`lex.yy.c', if possible, from existing .c
|
||||||
|
makeinfo touch the output file
|
||||||
|
tar try tar, gnutar, gtar, then tar without non-portable flags
|
||||||
|
yacc create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||||
|
|
||||||
|
Send bug reports to <bug-automake@gnu.org>."
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
|
||||||
|
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
||||||
|
echo "missing $scriptversion (GNU Automake)"
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
|
||||||
|
-*)
|
||||||
|
echo 1>&2 "$0: Unknown \`$1' option"
|
||||||
|
echo 1>&2 "Try \`$0 --help' for more information"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Now exit if we have it, but it failed. Also exit now if we
|
||||||
|
# don't have it and --version was passed (most likely to detect
|
||||||
|
# the program).
|
||||||
|
case $1 in
|
||||||
|
lex|yacc)
|
||||||
|
# Not GNU programs, they don't have --version.
|
||||||
|
;;
|
||||||
|
|
||||||
|
tar)
|
||||||
|
if test -n "$run"; then
|
||||||
|
echo 1>&2 "ERROR: \`tar' requires --run"
|
||||||
|
exit 1
|
||||||
|
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||||
|
# We have it, but it failed.
|
||||||
|
exit 1
|
||||||
|
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
||||||
|
# Could not run --version or --help. This is probably someone
|
||||||
|
# running `$TOOL --version' or `$TOOL --help' to check whether
|
||||||
|
# $TOOL exists and not knowing $TOOL uses missing.
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# If it does not exist, or fails to run (possibly an outdated version),
|
||||||
|
# try to emulate it.
|
||||||
|
case $1 in
|
||||||
|
aclocal*)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is $msg. You should only need it if
|
||||||
|
you modified \`acinclude.m4' or \`${configure_ac}'. You might want
|
||||||
|
to install the \`Automake' and \`Perl' packages. Grab them from
|
||||||
|
any GNU archive site."
|
||||||
|
touch aclocal.m4
|
||||||
|
;;
|
||||||
|
|
||||||
|
autoconf)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is $msg. You should only need it if
|
||||||
|
you modified \`${configure_ac}'. You might want to install the
|
||||||
|
\`Autoconf' and \`GNU m4' packages. Grab them from any GNU
|
||||||
|
archive site."
|
||||||
|
touch configure
|
||||||
|
;;
|
||||||
|
|
||||||
|
autoheader)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is $msg. You should only need it if
|
||||||
|
you modified \`acconfig.h' or \`${configure_ac}'. You might want
|
||||||
|
to install the \`Autoconf' and \`GNU m4' packages. Grab them
|
||||||
|
from any GNU archive site."
|
||||||
|
files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
|
||||||
|
test -z "$files" && files="config.h"
|
||||||
|
touch_files=
|
||||||
|
for f in $files; do
|
||||||
|
case $f in
|
||||||
|
*:*) touch_files="$touch_files "`echo "$f" |
|
||||||
|
sed -e 's/^[^:]*://' -e 's/:.*//'`;;
|
||||||
|
*) touch_files="$touch_files $f.in";;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
touch $touch_files
|
||||||
|
;;
|
||||||
|
|
||||||
|
automake*)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is $msg. You should only need it if
|
||||||
|
you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
|
||||||
|
You might want to install the \`Automake' and \`Perl' packages.
|
||||||
|
Grab them from any GNU archive site."
|
||||||
|
find . -type f -name Makefile.am -print |
|
||||||
|
sed 's/\.am$/.in/' |
|
||||||
|
while read f; do touch "$f"; done
|
||||||
|
;;
|
||||||
|
|
||||||
|
autom4te)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is needed, but is $msg.
|
||||||
|
You might have modified some files without having the
|
||||||
|
proper tools for further handling them.
|
||||||
|
You can get \`$1' as part of \`Autoconf' from any GNU
|
||||||
|
archive site."
|
||||||
|
|
||||||
|
file=`echo "$*" | sed -n "$sed_output"`
|
||||||
|
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||||
|
if test -f "$file"; then
|
||||||
|
touch $file
|
||||||
|
else
|
||||||
|
test -z "$file" || exec >$file
|
||||||
|
echo "#! /bin/sh"
|
||||||
|
echo "# Created by GNU Automake missing as a replacement of"
|
||||||
|
echo "# $ $@"
|
||||||
|
echo "exit 0"
|
||||||
|
chmod +x $file
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
bison|yacc)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' $msg. You should only need it if
|
||||||
|
you modified a \`.y' file. You may need the \`Bison' package
|
||||||
|
in order for those modifications to take effect. You can get
|
||||||
|
\`Bison' from any GNU archive site."
|
||||||
|
rm -f y.tab.c y.tab.h
|
||||||
|
if test $# -ne 1; then
|
||||||
|
eval LASTARG="\${$#}"
|
||||||
|
case $LASTARG in
|
||||||
|
*.y)
|
||||||
|
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
|
||||||
|
if test -f "$SRCFILE"; then
|
||||||
|
cp "$SRCFILE" y.tab.c
|
||||||
|
fi
|
||||||
|
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
|
||||||
|
if test -f "$SRCFILE"; then
|
||||||
|
cp "$SRCFILE" y.tab.h
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
if test ! -f y.tab.h; then
|
||||||
|
echo >y.tab.h
|
||||||
|
fi
|
||||||
|
if test ! -f y.tab.c; then
|
||||||
|
echo 'main() { return 0; }' >y.tab.c
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
lex|flex)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is $msg. You should only need it if
|
||||||
|
you modified a \`.l' file. You may need the \`Flex' package
|
||||||
|
in order for those modifications to take effect. You can get
|
||||||
|
\`Flex' from any GNU archive site."
|
||||||
|
rm -f lex.yy.c
|
||||||
|
if test $# -ne 1; then
|
||||||
|
eval LASTARG="\${$#}"
|
||||||
|
case $LASTARG in
|
||||||
|
*.l)
|
||||||
|
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
|
||||||
|
if test -f "$SRCFILE"; then
|
||||||
|
cp "$SRCFILE" lex.yy.c
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
if test ! -f lex.yy.c; then
|
||||||
|
echo 'main() { return 0; }' >lex.yy.c
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
help2man)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is $msg. You should only need it if
|
||||||
|
you modified a dependency of a manual page. You may need the
|
||||||
|
\`Help2man' package in order for those modifications to take
|
||||||
|
effect. You can get \`Help2man' from any GNU archive site."
|
||||||
|
|
||||||
|
file=`echo "$*" | sed -n "$sed_output"`
|
||||||
|
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||||
|
if test -f "$file"; then
|
||||||
|
touch $file
|
||||||
|
else
|
||||||
|
test -z "$file" || exec >$file
|
||||||
|
echo ".ab help2man is required to generate this page"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
makeinfo)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is $msg. You should only need it if
|
||||||
|
you modified a \`.texi' or \`.texinfo' file, or any other file
|
||||||
|
indirectly affecting the aspect of the manual. The spurious
|
||||||
|
call might also be the consequence of using a buggy \`make' (AIX,
|
||||||
|
DU, IRIX). You might want to install the \`Texinfo' package or
|
||||||
|
the \`GNU make' package. Grab either from any GNU archive site."
|
||||||
|
# The file to touch is that specified with -o ...
|
||||||
|
file=`echo "$*" | sed -n "$sed_output"`
|
||||||
|
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||||
|
if test -z "$file"; then
|
||||||
|
# ... or it is the one specified with @setfilename ...
|
||||||
|
infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
|
||||||
|
file=`sed -n '
|
||||||
|
/^@setfilename/{
|
||||||
|
s/.* \([^ ]*\) *$/\1/
|
||||||
|
p
|
||||||
|
q
|
||||||
|
}' $infile`
|
||||||
|
# ... or it is derived from the source name (dir/f.texi becomes f.info)
|
||||||
|
test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
|
||||||
|
fi
|
||||||
|
# If the file does not exist, the user really needs makeinfo;
|
||||||
|
# let's fail without touching anything.
|
||||||
|
test -f $file || exit 1
|
||||||
|
touch $file
|
||||||
|
;;
|
||||||
|
|
||||||
|
tar)
|
||||||
|
shift
|
||||||
|
|
||||||
|
# We have already tried tar in the generic part.
|
||||||
|
# Look for gnutar/gtar before invocation to avoid ugly error
|
||||||
|
# messages.
|
||||||
|
if (gnutar --version > /dev/null 2>&1); then
|
||||||
|
gnutar "$@" && exit 0
|
||||||
|
fi
|
||||||
|
if (gtar --version > /dev/null 2>&1); then
|
||||||
|
gtar "$@" && exit 0
|
||||||
|
fi
|
||||||
|
firstarg="$1"
|
||||||
|
if shift; then
|
||||||
|
case $firstarg in
|
||||||
|
*o*)
|
||||||
|
firstarg=`echo "$firstarg" | sed s/o//`
|
||||||
|
tar "$firstarg" "$@" && exit 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
case $firstarg in
|
||||||
|
*h*)
|
||||||
|
firstarg=`echo "$firstarg" | sed s/h//`
|
||||||
|
tar "$firstarg" "$@" && exit 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: I can't seem to be able to run \`tar' with the given arguments.
|
||||||
|
You may want to install GNU tar or Free paxutils, or check the
|
||||||
|
command line arguments."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is needed, and is $msg.
|
||||||
|
You might have modified some files without having the
|
||||||
|
proper tools for further handling them. Check the \`README' file,
|
||||||
|
it often tells you about the needed prerequisites for installing
|
||||||
|
this package. You may also peek at any GNU archive site, in case
|
||||||
|
some other package would contain this missing \`$1' program."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
# Local variables:
|
||||||
|
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-end: "$"
|
||||||
|
# End:
|
File diff suppressed because it is too large
Load Diff
|
@ -1,17 +1,30 @@
|
||||||
|
/* Cpudetection lib
|
||||||
#if defined (__WIN32__)
|
* Copyright (C) 2002-2008 Pcsx2 Team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
|
#if defined (_WIN32)
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <memory.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "ix86.h"
|
#include "ix86.h"
|
||||||
|
|
||||||
#if defined (__VCNET2005__)
|
#if defined (_MSC_VER) && _MSC_VER >= 1400
|
||||||
|
|
||||||
void __cpuid(int* CPUInfo, int InfoType);
|
void __cpuid(int* CPUInfo, int InfoType);
|
||||||
unsigned __int64 __rdtsc();
|
unsigned __int64 __rdtsc();
|
||||||
|
@ -21,68 +34,29 @@
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
u32 hasFloatingPointUnit;
|
CAPABILITIES cpucaps;
|
||||||
u32 hasVirtual8086ModeEnhancements;
|
CPUINFO cpuinfo;
|
||||||
u32 hasDebuggingExtensions;
|
|
||||||
u32 hasPageSizeExtensions;
|
|
||||||
u32 hasTimeStampCounter;
|
|
||||||
u32 hasModelSpecificRegisters;
|
|
||||||
u32 hasPhysicalAddressExtension;
|
|
||||||
u32 hasMachineCheckArchitecture;
|
|
||||||
u32 hasCOMPXCHG8BInstruction;
|
|
||||||
u32 hasAdvancedProgrammableInterruptController;
|
|
||||||
u32 hasSEPFastSystemCall;
|
|
||||||
u32 hasMemoryTypeRangeRegisters;
|
|
||||||
u32 hasPTEGlobalFlag;
|
|
||||||
u32 hasMachineCheckArchitecture;
|
|
||||||
u32 hasConditionalMoveAndCompareInstructions;
|
|
||||||
u32 hasFGPageAttributeTable;
|
|
||||||
u32 has36bitPageSizeExtension;
|
|
||||||
u32 hasProcessorSerialNumber;
|
|
||||||
u32 hasCFLUSHInstruction;
|
|
||||||
u32 hasDebugStore;
|
|
||||||
u32 hasACPIThermalMonitorAndClockControl;
|
|
||||||
u32 hasMultimediaExtensions;
|
|
||||||
u32 hasFastStreamingSIMDExtensionsSaveRestore;
|
|
||||||
u32 hasStreamingSIMDExtensions;
|
|
||||||
u32 hasStreamingSIMD2Extensions;
|
|
||||||
u32 hasSelfSnoop;
|
|
||||||
u32 hasHyperThreading;
|
|
||||||
u32 hasThermalMonitor;
|
|
||||||
u32 hasIntel64BitArchitecture;
|
|
||||||
//that is only for AMDs
|
|
||||||
u32 hasMultimediaExtensionsExt;
|
|
||||||
u32 hasAMD64BitArchitecture;
|
|
||||||
u32 has3DNOWInstructionExtensionsExt;
|
|
||||||
u32 has3DNOWInstructionExtensions;
|
|
||||||
|
|
||||||
s8 x86ID[16]; // Vendor ID
|
#define cpuid(cmd,a,b,c,d) \
|
||||||
u32 x86Family; // Processor Family
|
__asm__ __volatile__("xchgl %%ebx, %1; cpuid; xchgl %%ebx, %1" \
|
||||||
u32 x86Model; // Processor Model
|
: "=a" (a), "=r" (b), "=c" (c), "=d" (d) : "0" (cmd))
|
||||||
u32 x86PType; // Processor Type
|
|
||||||
u32 x86StepID; // Stepping ID
|
|
||||||
u32 x86Flags; // Feature Flags
|
|
||||||
u32 x86EFlags; // Extended Feature Flags
|
|
||||||
//AMD 64 STUFF
|
|
||||||
u32 x86_64_8BITBRANDID;
|
|
||||||
u32 x86_64_12BITBRANDID;
|
|
||||||
s8 x86Type[20]; //cpu type in char format
|
|
||||||
s8 x86Fam[50]; // family in char format
|
|
||||||
u32 cpuspeed; // speed of cpu
|
|
||||||
int cputype; // Cpu type
|
|
||||||
|
|
||||||
static s32 iCpuId( u32 cmd, u32 *regs )
|
extern s32 iCpuId( u32 cmd, u32 *regs )
|
||||||
{
|
{
|
||||||
int flag;
|
int flag=1;
|
||||||
|
|
||||||
#if defined (__VCNET2005__)
|
#if defined (_MSC_VER) && _MSC_VER >= 1400
|
||||||
|
|
||||||
__cpuid( regs, cmd );
|
__cpuid( regs, cmd );
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
#elif defined (__MSCW32__) && !defined(__x86_64__)
|
#elif defined (_MSC_VER)
|
||||||
__asm
|
|
||||||
|
#ifdef __x86_64__
|
||||||
|
assert(0);
|
||||||
|
#else // __x86_64__
|
||||||
|
__asm
|
||||||
{
|
{
|
||||||
push ebx;
|
push ebx;
|
||||||
push edi;
|
push edi;
|
||||||
|
@ -103,7 +77,7 @@ static s32 iCpuId( u32 cmd, u32 *regs )
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
__asm
|
__asm
|
||||||
{
|
{
|
||||||
mov eax, cmd;
|
mov eax, cmd;
|
||||||
cpuid;
|
cpuid;
|
||||||
|
@ -116,16 +90,16 @@ static s32 iCpuId( u32 cmd, u32 *regs )
|
||||||
pop edi;
|
pop edi;
|
||||||
pop ebx;
|
pop ebx;
|
||||||
}
|
}
|
||||||
|
#endif // __x86_64__
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
#ifndef __x86_64__
|
||||||
|
// see if we can use cpuid
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
#ifdef __x86_64__
|
"sub $0x18, %%esp\n"
|
||||||
"sub $0x18, %%rsp\n"
|
|
||||||
#endif
|
|
||||||
"pushf\n"
|
"pushf\n"
|
||||||
"pop %%eax\n"
|
"pop %%eax\n"
|
||||||
"mov %%eax, %%edx\n"
|
"mov %%eax, %%edx\n"
|
||||||
|
@ -136,37 +110,26 @@ static s32 iCpuId( u32 cmd, u32 *regs )
|
||||||
"pop %%eax\n"
|
"pop %%eax\n"
|
||||||
"xor %%edx, %%eax\n"
|
"xor %%edx, %%eax\n"
|
||||||
"mov %%eax, %0\n"
|
"mov %%eax, %0\n"
|
||||||
#ifdef __x86_64__
|
"add $0x18, %%esp\n"
|
||||||
"add $0x18, %%rsp\n"
|
"cmpl $0x0,%%eax\n"
|
||||||
#endif
|
"jne 1f\n"
|
||||||
|
"mov $0xffffffff, %%eax\n"
|
||||||
|
"leave\n"
|
||||||
|
"ret\n"
|
||||||
|
"1:\n"
|
||||||
: "=r"(flag) :
|
: "=r"(flag) :
|
||||||
);
|
);
|
||||||
|
|
||||||
if ( ! flag )
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
|
||||||
"mov %4, %%eax\n"
|
|
||||||
"cpuid\n"
|
|
||||||
"mov %%eax, %0\n"
|
|
||||||
"mov %%ebx, %1\n"
|
|
||||||
"mov %%ecx, %2\n"
|
|
||||||
"mov %%edx, %3\n"
|
|
||||||
: "=m" (regs[0]), "=m" (regs[1]),
|
|
||||||
"=m" (regs[2]), "=m" (regs[3])
|
|
||||||
: "m"(cmd)
|
|
||||||
: "eax", "ebx", "ecx", "edx"
|
|
||||||
);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
cpuid(cmd, regs[0], regs[1], regs[2], regs[3]);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
#endif // _MSC_VER
|
||||||
}
|
}
|
||||||
|
|
||||||
u64 GetCPUTick( void )
|
u64 GetCPUTick( void )
|
||||||
{
|
{
|
||||||
#if defined (__VCNET2005__)
|
#if defined (_MSC_VER) && _MSC_VER >= 1400
|
||||||
|
|
||||||
return __rdtsc();
|
return __rdtsc();
|
||||||
|
|
||||||
|
@ -187,12 +150,14 @@ u64 GetCPUTick( void )
|
||||||
|
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <sys/timeb.h>
|
||||||
|
|
||||||
u32 timeGetTime( void )
|
|
||||||
|
u32 timeGetTime()
|
||||||
{
|
{
|
||||||
struct timeval tv;
|
struct timeb t;
|
||||||
gettimeofday( &tv, 0 );
|
ftime(&t);
|
||||||
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
|
return (u32)(t.time*1000+t.millitm);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -205,7 +170,7 @@ s64 CPUSpeedHz( unsigned int time )
|
||||||
endTick;
|
endTick;
|
||||||
s64 overhead;
|
s64 overhead;
|
||||||
|
|
||||||
if( ! hasTimeStampCounter )
|
if( ! cpucaps.hasTimeStampCounter )
|
||||||
{
|
{
|
||||||
return 0; //check if function is supported
|
return 0; //check if function is supported
|
||||||
}
|
}
|
||||||
|
@ -217,7 +182,7 @@ s64 CPUSpeedHz( unsigned int time )
|
||||||
{
|
{
|
||||||
timeStart = timeGetTime( );
|
timeStart = timeGetTime( );
|
||||||
}
|
}
|
||||||
while ( 1 )
|
for(;;)
|
||||||
{
|
{
|
||||||
timeStop = timeGetTime( );
|
timeStop = timeGetTime( );
|
||||||
if ( ( timeStop - timeStart ) > 1 )
|
if ( ( timeStop - timeStart ) > 1 )
|
||||||
|
@ -228,7 +193,7 @@ s64 CPUSpeedHz( unsigned int time )
|
||||||
}
|
}
|
||||||
|
|
||||||
timeStart = timeStop;
|
timeStart = timeStop;
|
||||||
while ( 1 )
|
for(;;)
|
||||||
{
|
{
|
||||||
timeStop = timeGetTime( );
|
timeStop = timeGetTime( );
|
||||||
if ( ( timeStop - timeStart ) > time )
|
if ( ( timeStop - timeStart ) > time )
|
||||||
|
@ -240,38 +205,45 @@ s64 CPUSpeedHz( unsigned int time )
|
||||||
|
|
||||||
return (s64)( ( endTick - startTick ) + ( overhead ) );
|
return (s64)( ( endTick - startTick ) + ( overhead ) );
|
||||||
}
|
}
|
||||||
u32 AMDspeed;
|
|
||||||
s8 AMDspeedString[10];
|
|
||||||
////////////////////////////////////////////////////
|
////////////////////////////////////////////////////
|
||||||
void x86Init( void )
|
int arr[] = {0x65746e49, 0x2952286c, 0x726f4320, 0x4d542865,
|
||||||
|
0x51203229,0x20646175,0x20555043,0x20202020 ,
|
||||||
|
0x20202020,0x20402020,0x36362e32,0x7a4847};
|
||||||
|
|
||||||
|
void cpudetectInit( void )
|
||||||
{
|
{
|
||||||
u32 regs[ 4 ];
|
u32 regs[ 4 ];
|
||||||
u32 cmds;
|
u32 cmds;
|
||||||
|
int cputype=0; // Cpu type
|
||||||
memset( x86ID, 0, sizeof( x86ID ) );
|
//AMD 64 STUFF
|
||||||
x86Family = 0;
|
u32 x86_64_8BITBRANDID;
|
||||||
x86Model = 0;
|
u32 x86_64_12BITBRANDID;
|
||||||
x86PType = 0;
|
memset( cpuinfo.x86ID, 0, sizeof( cpuinfo.x86ID ) );
|
||||||
x86StepID = 0;
|
cpuinfo.x86Family = 0;
|
||||||
x86Flags = 0;
|
cpuinfo.x86Model = 0;
|
||||||
x86EFlags = 0;
|
cpuinfo.x86PType = 0;
|
||||||
|
cpuinfo.x86StepID = 0;
|
||||||
|
cpuinfo.x86Flags = 0;
|
||||||
|
cpuinfo.x86EFlags = 0;
|
||||||
|
|
||||||
if ( iCpuId( 0, regs ) == -1 ) return;
|
if ( iCpuId( 0, regs ) == -1 ) return;
|
||||||
|
|
||||||
cmds = regs[ 0 ];
|
cmds = regs[ 0 ];
|
||||||
((u32*)x86ID)[ 0 ] = regs[ 1 ];
|
((u32*)cpuinfo.x86ID)[ 0 ] = regs[ 1 ];
|
||||||
((u32*)x86ID)[ 1 ] = regs[ 3 ];
|
((u32*)cpuinfo.x86ID)[ 1 ] = regs[ 3 ];
|
||||||
((u32*)x86ID)[ 2 ] = regs[ 2 ];
|
((u32*)cpuinfo.x86ID)[ 2 ] = regs[ 2 ];
|
||||||
if ( cmds >= 0x00000001 )
|
if ( cmds >= 0x00000001 )
|
||||||
{
|
{
|
||||||
if ( iCpuId( 0x00000001, regs ) != -1 )
|
if ( iCpuId( 0x00000001, regs ) != -1 )
|
||||||
{
|
{
|
||||||
x86StepID = regs[ 0 ] & 0xf;
|
cpuinfo.x86StepID = regs[ 0 ] & 0xf;
|
||||||
x86Model = (regs[ 0 ] >> 4) & 0xf;
|
cpuinfo.x86Model = (regs[ 0 ] >> 4) & 0xf;
|
||||||
x86Family = (regs[ 0 ] >> 8) & 0xf;
|
cpuinfo.x86Family = (regs[ 0 ] >> 8) & 0xf;
|
||||||
x86PType = (regs[ 0 ] >> 12) & 0x3;
|
cpuinfo.x86PType = (regs[ 0 ] >> 12) & 0x3;
|
||||||
x86_64_8BITBRANDID = regs[1] & 0xff;
|
x86_64_8BITBRANDID = regs[1] & 0xff;
|
||||||
x86Flags = regs[ 3 ];
|
cpuinfo.x86Flags = regs[ 3 ];
|
||||||
|
cpuinfo.x86Flags2 = regs[ 2 ];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( iCpuId( 0x80000000, regs ) != -1 )
|
if ( iCpuId( 0x80000000, regs ) != -1 )
|
||||||
|
@ -279,232 +251,76 @@ void x86Init( void )
|
||||||
cmds = regs[ 0 ];
|
cmds = regs[ 0 ];
|
||||||
if ( cmds >= 0x80000001 )
|
if ( cmds >= 0x80000001 )
|
||||||
{
|
{
|
||||||
if ( iCpuId( 0x80000001, regs ) != -1 )
|
if ( iCpuId( 0x80000001, regs ) != -1 )
|
||||||
{
|
{
|
||||||
x86_64_12BITBRANDID = regs[1] & 0xfff;
|
x86_64_12BITBRANDID = regs[1] & 0xfff;
|
||||||
x86EFlags = regs[ 3 ];
|
cpuinfo.x86EFlags = regs[ 3 ];
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch(x86PType)
|
|
||||||
|
switch(cpuinfo.x86PType)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
strcpy( x86Type, "Standard OEM");
|
strcpy( cpuinfo.x86Type, "Standard OEM");
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
strcpy( x86Type, "Overdrive");
|
strcpy( cpuinfo.x86Type, "Overdrive");
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
strcpy( x86Type, "Dual");
|
strcpy( cpuinfo.x86Type, "Dual");
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
strcpy( x86Type, "Reserved");
|
strcpy( cpuinfo.x86Type, "Reserved");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
strcpy( x86Type, "Unknown");
|
strcpy( cpuinfo.x86Type, "Unknown");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ( x86ID[ 0 ] == 'G' ){ cputype=0;}//trick lines but if you know a way better ;p
|
if ( cpuinfo.x86ID[ 0 ] == 'G' ){ cputype=0;}//trick lines but if you know a way better ;p
|
||||||
if ( x86ID[ 0 ] == 'A' ){ cputype=1;}
|
if ( cpuinfo.x86ID[ 0 ] == 'A' ){ cputype=1;}
|
||||||
|
|
||||||
if ( cputype == 0 ) //intel cpu
|
memset(cpuinfo.x86Fam, 0, sizeof(cpuinfo.x86Fam));
|
||||||
{
|
iCpuId( 0x80000002, (u32*)cpuinfo.x86Fam);
|
||||||
if( ( x86Family >= 7 ) && ( x86Family < 15 ) )
|
iCpuId( 0x80000003, (u32*)(cpuinfo.x86Fam+16));
|
||||||
{
|
iCpuId( 0x80000004, (u32*)(cpuinfo.x86Fam+32));
|
||||||
strcpy( x86Fam, "Intel P6 family (Not PIV and Higher then PPro" );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
switch( x86Family )
|
|
||||||
{
|
|
||||||
// Start at 486 because if it's below 486 there is no cpuid instruction
|
|
||||||
case 4:
|
|
||||||
strcpy( x86Fam, "Intel 486" );
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
switch( x86Model )
|
|
||||||
{
|
|
||||||
case 4:
|
|
||||||
case 8: // 0.25 µm
|
|
||||||
strcpy( x86Fam, "Intel Pentium (MMX)");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
strcpy( x86Fam, "Intel Pentium" );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
switch( x86Model )
|
|
||||||
{
|
|
||||||
case 0: // Pentium pro (P6 A-Step)
|
|
||||||
case 1: // Pentium pro
|
|
||||||
strcpy( x86Fam, "Intel Pentium Pro" );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2: // 66 MHz FSB
|
|
||||||
case 5: // Xeon/Celeron (0.25 µm)
|
|
||||||
case 6: // Internal L2 cache
|
|
||||||
strcpy( x86Fam, "Intel Pentium II" );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 7: // Xeon external L2 cache
|
|
||||||
case 8: // Xeon/Celeron with 256 KB on-die L2 cache
|
|
||||||
case 10: // Xeon/Celeron with 1 or 2 MB on-die L2 cache
|
|
||||||
case 11: // Xeon/Celeron with Tualatin core, on-die cache
|
|
||||||
strcpy( x86Fam, "Intel Pentium III" );
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
strcpy( x86Fam, "Intel Pentium Pro (Unknown)" );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 15:
|
|
||||||
switch( x86Model )
|
|
||||||
{
|
|
||||||
case 0: // Willamette (A-Step)
|
|
||||||
case 1: // Willamette
|
|
||||||
strcpy( x86Fam, "Willamette Intel Pentium IV" );
|
|
||||||
break;
|
|
||||||
case 2: // Northwood
|
|
||||||
strcpy( x86Fam, "Northwood Intel Pentium IV" );
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
strcpy( x86Fam, "Intel Pentium IV (Unknown)" );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
strcpy( x86Fam, "Unknown Intel CPU" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ( cputype == 1 ) //AMD cpu
|
|
||||||
{
|
|
||||||
if( x86Family >= 7 )
|
|
||||||
{
|
|
||||||
if((x86_64_12BITBRANDID !=0) || (x86_64_8BITBRANDID !=0))
|
|
||||||
{
|
|
||||||
if(x86_64_8BITBRANDID == 0 )
|
|
||||||
{
|
|
||||||
switch((x86_64_12BITBRANDID >>6)& 0x3f)
|
|
||||||
{
|
|
||||||
case 4:
|
|
||||||
strcpy(x86Fam,"AMD Athlon(tm) 64 Processor");
|
|
||||||
AMDspeed = 22 + (x86_64_12BITBRANDID & 0x1f);
|
|
||||||
//AMDspeedString = strtol(AMDspeed, (char**)NULL,10);
|
|
||||||
sprintf(AMDspeedString," %d",AMDspeed);
|
|
||||||
strcat(AMDspeedString,"00+");
|
|
||||||
strcat(x86Fam,AMDspeedString);
|
|
||||||
break;
|
|
||||||
case 12:
|
|
||||||
strcpy(x86Fam,"AMD Opteron(tm) Processor");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
strcpy(x86Fam,"Unknown AMD 64 proccesor");
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else //8bit brand id is non zero
|
|
||||||
{
|
|
||||||
strcpy(x86Fam,"Unsupported yet AMD64 cpu");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
strcpy( x86Fam, "AMD K7+" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
switch ( x86Family )
|
|
||||||
{
|
|
||||||
case 4:
|
|
||||||
switch( x86Model )
|
|
||||||
{
|
|
||||||
case 14:
|
|
||||||
case 15: // Write-back enhanced
|
|
||||||
strcpy( x86Fam, "AMD 5x86" );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3: // DX2
|
|
||||||
case 7: // Write-back enhanced DX2
|
|
||||||
case 8: // DX4
|
|
||||||
case 9: // Write-back enhanced DX4
|
|
||||||
strcpy( x86Fam, "AMD 486" );
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
strcpy( x86Fam, "AMD Unknown" );
|
|
||||||
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 5:
|
|
||||||
switch( x86Model)
|
|
||||||
{
|
|
||||||
case 0: // SSA 5 (75, 90 and 100 Mhz)
|
|
||||||
case 1: // 5k86 (PR 120 and 133 MHz)
|
|
||||||
case 2: // 5k86 (PR 166 MHz)
|
|
||||||
case 3: // K5 5k86 (PR 200 MHz)
|
|
||||||
strcpy( x86Fam, "AMD K5" );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 6:
|
|
||||||
case 7: // (0.25 µm)
|
|
||||||
case 8: // K6-2
|
|
||||||
case 9: // K6-III
|
|
||||||
case 14: // K6-2+ / K6-III+
|
|
||||||
strcpy( x86Fam, "AMD K6" );
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
strcpy( x86Fam, "AMD Unknown" );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
strcpy( x86Fam, "AMD K7" );
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
strcpy( x86Fam, "Unknown AMD CPU" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//capabilities
|
//capabilities
|
||||||
hasFloatingPointUnit = ( x86Flags >> 0 ) & 1;
|
cpucaps.hasFloatingPointUnit = ( cpuinfo.x86Flags >> 0 ) & 1;
|
||||||
hasVirtual8086ModeEnhancements = ( x86Flags >> 1 ) & 1;
|
cpucaps.hasVirtual8086ModeEnhancements = ( cpuinfo.x86Flags >> 1 ) & 1;
|
||||||
hasDebuggingExtensions = ( x86Flags >> 2 ) & 1;
|
cpucaps.hasDebuggingExtensions = ( cpuinfo.x86Flags >> 2 ) & 1;
|
||||||
hasPageSizeExtensions = ( x86Flags >> 3 ) & 1;
|
cpucaps.hasPageSizeExtensions = ( cpuinfo.x86Flags >> 3 ) & 1;
|
||||||
hasTimeStampCounter = ( x86Flags >> 4 ) & 1;
|
cpucaps.hasTimeStampCounter = ( cpuinfo.x86Flags >> 4 ) & 1;
|
||||||
hasModelSpecificRegisters = ( x86Flags >> 5 ) & 1;
|
cpucaps.hasModelSpecificRegisters = ( cpuinfo.x86Flags >> 5 ) & 1;
|
||||||
hasPhysicalAddressExtension = ( x86Flags >> 6 ) & 1;
|
cpucaps.hasPhysicalAddressExtension = ( cpuinfo.x86Flags >> 6 ) & 1;
|
||||||
hasMachineCheckArchitecture = ( x86Flags >> 7 ) & 1;
|
cpucaps.hasMachineCheckArchitecture = ( cpuinfo.x86Flags >> 7 ) & 1;
|
||||||
hasCOMPXCHG8BInstruction = ( x86Flags >> 8 ) & 1;
|
cpucaps.hasCOMPXCHG8BInstruction = ( cpuinfo.x86Flags >> 8 ) & 1;
|
||||||
hasAdvancedProgrammableInterruptController = ( x86Flags >> 9 ) & 1;
|
cpucaps.hasAdvancedProgrammableInterruptController = ( cpuinfo.x86Flags >> 9 ) & 1;
|
||||||
hasSEPFastSystemCall = ( x86Flags >> 11 ) & 1;
|
cpucaps.hasSEPFastSystemCall = ( cpuinfo.x86Flags >> 11 ) & 1;
|
||||||
hasMemoryTypeRangeRegisters = ( x86Flags >> 12 ) & 1;
|
cpucaps.hasMemoryTypeRangeRegisters = ( cpuinfo.x86Flags >> 12 ) & 1;
|
||||||
hasPTEGlobalFlag = ( x86Flags >> 13 ) & 1;
|
cpucaps.hasPTEGlobalFlag = ( cpuinfo.x86Flags >> 13 ) & 1;
|
||||||
hasMachineCheckArchitecture = ( x86Flags >> 14 ) & 1;
|
cpucaps.hasMachineCheckArchitecture = ( cpuinfo.x86Flags >> 14 ) & 1;
|
||||||
hasConditionalMoveAndCompareInstructions = ( x86Flags >> 15 ) & 1;
|
cpucaps.hasConditionalMoveAndCompareInstructions = ( cpuinfo.x86Flags >> 15 ) & 1;
|
||||||
hasFGPageAttributeTable = ( x86Flags >> 16 ) & 1;
|
cpucaps.hasFGPageAttributeTable = ( cpuinfo.x86Flags >> 16 ) & 1;
|
||||||
has36bitPageSizeExtension = ( x86Flags >> 17 ) & 1;
|
cpucaps.has36bitPageSizeExtension = ( cpuinfo.x86Flags >> 17 ) & 1;
|
||||||
hasProcessorSerialNumber = ( x86Flags >> 18 ) & 1;
|
cpucaps.hasProcessorSerialNumber = ( cpuinfo.x86Flags >> 18 ) & 1;
|
||||||
hasCFLUSHInstruction = ( x86Flags >> 19 ) & 1;
|
cpucaps.hasCFLUSHInstruction = ( cpuinfo.x86Flags >> 19 ) & 1;
|
||||||
hasDebugStore = ( x86Flags >> 21 ) & 1;
|
cpucaps.hasDebugStore = ( cpuinfo.x86Flags >> 21 ) & 1;
|
||||||
hasACPIThermalMonitorAndClockControl = ( x86Flags >> 22 ) & 1;
|
cpucaps.hasACPIThermalMonitorAndClockControl = ( cpuinfo.x86Flags >> 22 ) & 1;
|
||||||
hasMultimediaExtensions = ( x86Flags >> 23 ) & 1; //mmx
|
cpucaps.hasMultimediaExtensions = ( cpuinfo.x86Flags >> 23 ) & 1; //mmx
|
||||||
hasFastStreamingSIMDExtensionsSaveRestore = ( x86Flags >> 24 ) & 1;
|
cpucaps.hasFastStreamingSIMDExtensionsSaveRestore = ( cpuinfo.x86Flags >> 24 ) & 1;
|
||||||
hasStreamingSIMDExtensions = ( x86Flags >> 25 ) & 1; //sse
|
cpucaps.hasStreamingSIMDExtensions = ( cpuinfo.x86Flags >> 25 ) & 1; //sse
|
||||||
hasStreamingSIMD2Extensions = ( x86Flags >> 26 ) & 1; //sse2
|
cpucaps.hasStreamingSIMD2Extensions = ( cpuinfo.x86Flags >> 26 ) & 1; //sse2
|
||||||
hasSelfSnoop = ( x86Flags >> 27 ) & 1;
|
cpucaps.hasStreamingSIMD4Extensions = ( cpuinfo.x86Flags2 >> 19 ) & 1; //sse4.1
|
||||||
hasHyperThreading = ( x86Flags >> 28 ) & 1;
|
cpucaps.hasSelfSnoop = ( cpuinfo.x86Flags >> 27 ) & 1;
|
||||||
hasThermalMonitor = ( x86Flags >> 29 ) & 1;
|
cpucaps.hasHyperThreading = ( cpuinfo.x86Flags >> 28 ) & 1;
|
||||||
hasIntel64BitArchitecture = ( x86Flags >> 30 ) & 1;
|
cpucaps.hasThermalMonitor = ( cpuinfo.x86Flags >> 29 ) & 1;
|
||||||
|
cpucaps.hasIntel64BitArchitecture = ( cpuinfo.x86Flags >> 30 ) & 1;
|
||||||
//that is only for AMDs
|
//that is only for AMDs
|
||||||
hasMultimediaExtensionsExt = ( x86EFlags >> 22 ) & 1; //mmx2
|
cpucaps.hasMultimediaExtensionsExt = ( cpuinfo.x86EFlags >> 22 ) & 1; //mmx2
|
||||||
hasAMD64BitArchitecture = ( x86EFlags >> 29 ) & 1; //64bit cpu
|
cpucaps.hasAMD64BitArchitecture = ( cpuinfo.x86EFlags >> 29 ) & 1; //64bit cpu
|
||||||
has3DNOWInstructionExtensionsExt = ( x86EFlags >> 30 ) & 1; //3dnow+
|
cpucaps.has3DNOWInstructionExtensionsExt = ( cpuinfo.x86EFlags >> 30 ) & 1; //3dnow+
|
||||||
has3DNOWInstructionExtensions = ( x86EFlags >> 31 ) & 1; //3dnow
|
cpucaps.has3DNOWInstructionExtensions = ( cpuinfo.x86EFlags >> 31 ) & 1; //3dnow
|
||||||
|
cpuinfo.cpuspeed = (u32 )(CPUSpeedHz( 1000 ) / 1000000);
|
||||||
cpuspeed = (u32 )(CPUSpeedHz( 1000 ) / 1000000);
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue