ps2sdk  1.1
A collection of Open Source libraries used for developing applications on Sony's PlayStation 2® (PS2).
ExecPS2.h File Reference
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void * ExecPS2Patch (void *EntryPoint, void *gp, int argc, char *argv[])
 

Function Documentation

◆ ExecPS2Patch()

void* ExecPS2Patch ( void *  EntryPoint,
void *  gp,
int  argc,
char *  argv[] 
)

Definition at line 83 of file ExecPS2.c.

83  {
84  int i, CurrentThreadID;
85  struct TCB *tcb;
86 #ifndef REUSE_EXECPS2
87  char *ArgsPtr;
88 #endif
89 
90  CurrentThreadID=*p_ThreadID;
91  p_CancelWakeupThread(CurrentThreadID);
92  p_ChangeThreadPriority(CurrentThreadID, 0);
93 
94  //Like IOP kernels, the first thread is the idle thread.
95  for(i=1,tcb=&p_TCBs[1]; i<MAX_THREADS; i++,tcb++){
96  if(tcb->status!=0 && i!=CurrentThreadID){
98 
99  p_DeleteThread(i);
100  }
101  }
102 
105 
106  *p_ThreadStatus=0;
108 
109 #ifdef REUSE_EXECPS2
110  //Unlike the Sony patch, why don't we just reuse the original function in the kernel?
111  return p_ExecPS2(EntryPoint, gp, argc, argv);
112 #else
113  for(i=0,ArgsPtr=p_ArgsBuffer; i<argc; i++){
114  ArgsPtr=p_eestrcpy(ArgsPtr, argv[i]);
115  }
116 
117  tcb=&p_TCBs[CurrentThreadID];
118  tcb->argstring=p_ArgsBuffer;
119  tcb->argc=argc;
120  tcb->entry=EntryPoint;
121  tcb->entry_=EntryPoint;
122  tcb->gpReg=gp;
123  tcb->initPriority=0;
124  tcb->currentPriority=0;
125  tcb->wakeupCount=0;
126  tcb->waitSema=0;
127  tcb->semaId=0;
128 
129  p_FlushICache();
130  p_FlushDCache();
131 
132  return EntryPoint;
133 #endif
134 }
static int * p_ThreadID
Definition: ExecPS2.c:14
static char * p_ArgsBuffer
Definition: ExecPS2.c:37
static struct TCB * p_TCBs
Definition: ExecPS2.c:22
static int * p_ThreadStatus
Definition: ExecPS2.c:15
static int(* p_InitSemaphores)(void)
Definition: ExecPS2.c:19
static void SoftPeripheralEEReset(void)
Definition: ExecPS2.c:69
static void(* p_FlushDCache)(void)
Definition: ExecPS2.c:33
static int(* p_DeleteThread)(int thread_id)
Definition: ExecPS2.c:20
static char *(* p_eestrcpy)(char *dst, const char *src)
Definition: ExecPS2.c:35
static void(* p_FlushICache)(void)
Definition: ExecPS2.c:34
static int(* p_TerminateThread)(int ThreadID)
Definition: ExecPS2.c:21
static int(* p_InitPgifHandler2)(void)
Definition: ExecPS2.c:18
static int(* p_ChangeThreadPriority)(int ThreadID, int priority)
Definition: ExecPS2.c:17
static int(* p_CancelWakeupThread)(int ThreadID)
Definition: ExecPS2.c:16
#define gp
Definition: as_reg_compat.h:84
#define THS_DORMANT
Definition: kernel.h:244
#define MAX_THREADS
Definition: kernel.h:68
Definition: ExecPS2.c:46
short initPriority
Definition: ExecPS2.c:54
int semaId
Definition: ExecPS2.c:56
void * gpReg
Definition: ExecPS2.c:52
int status
Definition: ExecPS2.c:49
void(* entry_)(void *)
Definition: ExecPS2.c:60
int argc
Definition: ExecPS2.c:61
int wakeupCount
Definition: ExecPS2.c:57
char * argstring
Definition: ExecPS2.c:62
short currentPriority
Definition: ExecPS2.c:53
int waitSema
Definition: ExecPS2.c:55
void(* entry)(void *)
Definition: ExecPS2.c:50

References TCB::argc, TCB::argstring, TCB::currentPriority, TCB::entry, TCB::entry_, gp, TCB::gpReg, TCB::initPriority, MAX_THREADS, p_ArgsBuffer, p_CancelWakeupThread, p_ChangeThreadPriority, p_DeleteThread, p_eestrcpy, p_FlushDCache, p_FlushICache, p_InitPgifHandler2, p_InitSemaphores, p_TCBs, p_TerminateThread, p_ThreadID, p_ThreadStatus, TCB::semaId, SoftPeripheralEEReset(), TCB::status, THS_DORMANT, TCB::waitSema, and TCB::wakeupCount.