ps2sdk  1.1
A collection of Open Source libraries used for developing applications on Sony's PlayStation 2® (PS2).
ExecPS2.c File Reference
#include <kernel.h>
#include "ExecPS2.h"
+ Include dependency graph for ExecPS2.c:

Go to the source code of this file.

Data Structures

struct  TCB
 

Functions

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

Variables

static int * p_ThreadID =(int*)0x800125EC
 
static int * p_ThreadStatus =(int*)0x800125F4
 
static int(* p_CancelWakeupThread )(int ThreadID) =(void*)0x80004970
 
static int(* p_ChangeThreadPriority )(int ThreadID, int priority) =(void*)0x80004288
 
static int(* p_InitPgifHandler2 )(void) =(void*)0x800021b0
 
static int(* p_InitSemaphores )(void) =(void*)0x80004e68
 
static int(* p_DeleteThread )(int thread_id) =(void*)0x80003f00
 
static int(* p_TerminateThread )(int ThreadID) =(void*)0x80003e00
 
static struct TCBp_TCBs =(struct TCB *)0x80017400
 
static void(* p_InitializeINTC )(int interrupts) =(void*)0x8000b8d0
 
static void(* p_InitializeTIMER )(void) =(void*)0x8000b900
 
static void(* p_InitializeFPU )(void) =(void*)0x8000b7a8
 
static void(* p_InitializeScratchPad )(void) =(void*)0x8000b840
 
static int(* p_ResetEE )(int flags) =(void*)0x8000ad68
 
static void(* p_InitializeGS )(void) =(void*)0x8000aa60
 
static void(* p_SetGSCrt )(unsigned short int interlace, unsigned short int mode, unsigned short int ffmd) =(void*)0x8000a060
 
static void(* p_FlushDCache )(void) =(void*)0x80002a80
 
static void(* p_FlushICache )(void) =(void*)0x80002ac0
 
static char *(* p_eestrcpy )(char *dst, const char *src) =(void*)0x80005560
 
static char * p_ArgsBuffer =(char*)0x80012608
 

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.

◆ SoftPeripheralEEReset()

static void SoftPeripheralEEReset ( void  )
inlinestatic

Definition at line 69 of file ExecPS2.c.

69  {
70  *(volatile unsigned int *)0x1000f000=4;
71  while((*(volatile unsigned int *)0x1000f000&4)==0){};
72  *(volatile unsigned int *)0x1000f000=4;
73 
75  p_SetGSCrt(1, 2, 1); //Interlaced, NTSC, field mode.
76  p_InitializeINTC(0xdffd);
78  p_ResetEE(0x7F);
81 }
static int(* p_ResetEE)(int flags)
Definition: ExecPS2.c:27
static void(* p_InitializeINTC)(int interrupts)
Definition: ExecPS2.c:23
static void(* p_InitializeGS)(void)
Definition: ExecPS2.c:28
static void(* p_SetGSCrt)(unsigned short int interlace, unsigned short int mode, unsigned short int ffmd)
Definition: ExecPS2.c:29
static void(* p_InitializeScratchPad)(void)
Definition: ExecPS2.c:26
static void(* p_InitializeTIMER)(void)
Definition: ExecPS2.c:24
static void(* p_InitializeFPU)(void)
Definition: ExecPS2.c:25

References p_InitializeFPU, p_InitializeGS, p_InitializeINTC, p_InitializeScratchPad, p_InitializeTIMER, p_ResetEE, and p_SetGSCrt.

Referenced by ExecPS2Patch().

Variable Documentation

◆ p_ArgsBuffer

char* p_ArgsBuffer =(char*)0x80012608
static

Definition at line 37 of file ExecPS2.c.

Referenced by ExecPS2Patch().

◆ p_CancelWakeupThread

int(* p_CancelWakeupThread) (int ThreadID) ( int  ThreadID) =(void*)0x80004970
static

Definition at line 16 of file ExecPS2.c.

Referenced by ExecPS2Patch().

◆ p_ChangeThreadPriority

int(* p_ChangeThreadPriority) (int ThreadID, int priority) ( int  ThreadID,
int  priority 
) =(void*)0x80004288
static

Definition at line 17 of file ExecPS2.c.

Referenced by ExecPS2Patch().

◆ p_DeleteThread

int(* p_DeleteThread) (int thread_id) ( int  thread_id) =(void*)0x80003f00
static

Definition at line 20 of file ExecPS2.c.

Referenced by ExecPS2Patch().

◆ p_eestrcpy

char*(* p_eestrcpy) (char *dst, const char *src) ( char *  dst,
const char *  src 
) =(void*)0x80005560
static

Definition at line 35 of file ExecPS2.c.

Referenced by ExecPS2Patch().

◆ p_FlushDCache

void(* p_FlushDCache) (void) ( void  ) =(void*)0x80002a80
static

Definition at line 33 of file ExecPS2.c.

Referenced by ExecPS2Patch().

◆ p_FlushICache

void(* p_FlushICache) (void) ( void  ) =(void*)0x80002ac0
static

Definition at line 34 of file ExecPS2.c.

Referenced by ExecPS2Patch().

◆ p_InitializeFPU

void(* p_InitializeFPU) (void) ( void  ) =(void*)0x8000b7a8
static

Definition at line 25 of file ExecPS2.c.

Referenced by SoftPeripheralEEReset().

◆ p_InitializeGS

void(* p_InitializeGS) (void) ( void  ) =(void*)0x8000aa60
static

Definition at line 28 of file ExecPS2.c.

Referenced by SoftPeripheralEEReset().

◆ p_InitializeINTC

void(* p_InitializeINTC) (int interrupts) ( int  interrupts) =(void*)0x8000b8d0
static

Definition at line 23 of file ExecPS2.c.

Referenced by SoftPeripheralEEReset().

◆ p_InitializeScratchPad

void(* p_InitializeScratchPad) (void) ( void  ) =(void*)0x8000b840
static

Definition at line 26 of file ExecPS2.c.

Referenced by SoftPeripheralEEReset().

◆ p_InitializeTIMER

void(* p_InitializeTIMER) (void) ( void  ) =(void*)0x8000b900
static

Definition at line 24 of file ExecPS2.c.

Referenced by SoftPeripheralEEReset().

◆ p_InitPgifHandler2

int(* p_InitPgifHandler2) (void) ( void  ) =(void*)0x800021b0
static

Definition at line 18 of file ExecPS2.c.

Referenced by ExecPS2Patch().

◆ p_InitSemaphores

int(* p_InitSemaphores) (void) ( void  ) =(void*)0x80004e68
static

Definition at line 19 of file ExecPS2.c.

Referenced by ExecPS2Patch().

◆ p_ResetEE

int(* p_ResetEE) (int flags) ( int  flags) =(void*)0x8000ad68
static

Definition at line 27 of file ExecPS2.c.

Referenced by SoftPeripheralEEReset().

◆ p_SetGSCrt

void(* p_SetGSCrt) (unsigned short int interlace, unsigned short int mode, unsigned short int ffmd) ( unsigned short int  interlace,
unsigned short int  mode,
unsigned short int  ffmd 
) =(void*)0x8000a060
static

Definition at line 29 of file ExecPS2.c.

Referenced by SoftPeripheralEEReset().

◆ p_TCBs

struct TCB* p_TCBs =(struct TCB *)0x80017400
static

Definition at line 22 of file ExecPS2.c.

Referenced by ExecPS2Patch().

◆ p_TerminateThread

int(* p_TerminateThread) (int ThreadID) ( int  ThreadID) =(void*)0x80003e00
static

Definition at line 21 of file ExecPS2.c.

Referenced by ExecPS2Patch().

◆ p_ThreadID

int* p_ThreadID =(int*)0x800125EC
static

Definition at line 14 of file ExecPS2.c.

Referenced by ExecPS2Patch().

◆ p_ThreadStatus

int* p_ThreadStatus =(int*)0x800125F4
static

Definition at line 15 of file ExecPS2.c.

Referenced by ExecPS2Patch().