30#define ExitHandler() __asm__ __volatile__("sync\nei\n")
33#define EE_SYNC() __asm__ __volatile__("sync")
34#define EE_SYNCL() __asm__ __volatile__("sync.l")
35#define EE_SYNCP() __asm__ __volatile__("sync.p")
37#define UNCACHED_SEG(x) \
38 ((void *)(((u32)(x)) | 0x20000000))
40#define IS_UNCACHED_SEG(x) \
41 (((u32)(x)) & 0x20000000)
44 ((void *)(((u32)(x)) | 0x30000000))
46#define PUSHDATA(t, x, v, l) \
50#define POPDATA(t, x, v, l) \
54#define ALIGNED(x) __attribute__((aligned((x))))
57extern void *ChangeGP(
void *gp);
58extern void SetGP(
void *gp);
59extern void *GetGP(
void);
62#define SetModuleGP() ChangeGP(&_gp)
72#define MAX_THREADS 256
73#define MAX_SEMAPHORES 256
74#define MAX_PRIORITY 128
75#define MAX_HANDLERS 128
79#define WRITEBACK_DCACHE 0
80#define INVALIDATE_DCACHE 1
81#define INVALIDATE_ICACHE 2
82#define INVALIDATE_CACHE 3
104#define kINTC_GS INTC_GS
105#define kINTC_SBUS INTC_SBUS
106#define kINTC_VBLANK_START INTC_VBLANK_S
107#define kINTC_VBLANK_END INTC_VBLANK_E
108#define kINTC_VIF0 INTC_VIF0
109#define kINTC_VIF1 INTC_VIF1
110#define kINTC_VU0 INTC_VU0
111#define kINTC_VU1 INTC_VU1
112#define kINTC_IPU INTC_IPU
113#define kINTC_TIMER0 INTC_TIM0
114#define kINTC_TIMER1 INTC_TIM1
135#define INIT_DMAC 0x01
137#define INIT_VIF1 0x04
140#define INIT_VIF0 0x20
143static inline void nopdelay(
void)
148 __asm__ __volatile__(
"nop\nnop\nnop\nnop\nnop\n");
152static inline int ee_get_opmode(
void)
158 return ((status >> 3) & 3);
161static inline int ee_set_opmode(u32 opmode)
169 return ((status >> 3) & 3);
172static inline int ee_kmode_enter()
183static inline int ee_kmode_exit()
211 int initial_priority;
212 int current_priority;
220#define THS_READY 0x02
222#define THS_SUSPEND 0x08
223#define THS_WAITSUSPEND 0x0c
224#define THS_DORMANT 0x10
239 int initial_priority;
240 int current_priority;
250 CPU_CONFIG_ENABLE_DIE = 0,
251 CPU_CONFIG_ENABLE_ICE,
252 CPU_CONFIG_ENABLE_DCE,
253 CPU_CONFIG_DISBLE_DIE,
254 CPU_CONFIG_DISBLE_ICE,
255 CPU_CONFIG_DISBLE_DCE
259#define CPU_DATA_CACHE 1
260#define CPU_INSTRUCTION_CACHE 2
296extern void _InitSys(
void);
298extern void TerminateLibrary(
void);
301extern int InitThread(
void);
303extern s32 iWakeupThread(s32 thread_id);
304extern s32 iRotateThreadReadyQueue(s32 priority);
305extern s32 iSuspendThread(s32 thread_id);
308extern void InitTLBFunctions(
void);
310extern void InitTLB(
void);
312extern s32 ExecPS2(
void *entry,
void *gp,
int num_args,
char *args[]);
313extern void LoadExecPS2(
const char *filename, s32 num_args,
char *args[])
__attribute__((noreturn));
314extern void ExecOSD(
int num_args,
char *args[])
__attribute__((noreturn));
317extern void InitAlarm(
void);
320extern void InitExecPS2(
void);
321extern void InitOsd(
void);
323extern int PatchIsNeeded(
void);
326extern void InitDebug(
void);
329extern int DIntr(
void);
330extern int EIntr(
void);
332extern int EnableIntc(
int intc);
333extern int DisableIntc(
int intc);
334extern int EnableDmac(
int dmac);
335extern int DisableDmac(
int dmac);
337extern int iEnableIntc(
int intc);
338extern int iDisableIntc(
int intc);
339extern int iEnableDmac(
int dmac);
340extern int iDisableDmac(
int dmac);
342extern void SyncDCache(
void *start,
void *end);
343extern void iSyncDCache(
void *start,
void *end);
344extern void InvalidDCache(
void *start,
void *end);
345extern void iInvalidDCache(
void *start,
void *end);
348extern void ResetEE(u32 init_bitfield);
349extern void SetGsCrt(s16 interlace, s16 pal_ntsc, s16 field);
351extern void _LoadExecPS2(
const char *filename, s32 num_args,
char *args[])
__attribute__((noreturn));
352extern s32 _ExecPS2(
void *entry,
void *gp,
int num_args,
char *args[]);
353extern void RFU009(u32 arg0, u32 arg1);
354extern s32 AddSbusIntcHandler(s32 cause,
void (*handler)(
int call));
355extern s32 RemoveSbusIntcHandler(s32 cause);
356extern s32 Interrupt2Iop(s32 cause);
357extern void SetVTLBRefillHandler(s32 handler_num,
void *handler_func);
358extern void SetVCommonHandler(s32 handler_num,
void *handler_func);
359extern void SetVInterruptHandler(s32 handler_num,
void *handler_func);
360extern s32 AddIntcHandler(s32 cause, s32 (*handler_func)(s32 cause), s32 next);
361extern s32 AddIntcHandler2(s32 cause, s32 (*handler_func)(s32 cause,
void *arg,
void *addr), s32 next,
void *arg);
362extern s32 RemoveIntcHandler(s32 cause, s32 handler_id);
363extern s32 AddDmacHandler(s32 channel, s32 (*handler)(s32 channel), s32 next);
364extern s32 AddDmacHandler2(s32 channel, s32 (*handler)(s32 channel,
void *arg,
void *addr), s32 next,
void *arg);
365extern s32 RemoveDmacHandler(s32 channel, s32 handler_id);
366extern s32 _EnableIntc(s32 cause);
367extern s32 _DisableIntc(s32 cause);
368extern s32 _EnableDmac(s32 channel);
369extern s32 _DisableDmac(s32 channel);
372extern s32 SetAlarm(u16 time,
void (*callback)(s32 alarm_id, u16 time,
void *common),
void *common);
373extern s32 _SetAlarm(u16 time,
void (*callback)(s32 alarm_id, u16 time,
void *common),
void *common);
374extern s32 ReleaseAlarm(s32 alarm_id);
375extern s32 _ReleaseAlarm(s32 alarm_id);
377extern s32 _iEnableIntc(s32 cause);
378extern s32 _iDisableIntc(s32 cause);
379extern s32 _iEnableDmac(s32 channel);
380extern s32 _iDisableDmac(s32 channel);
382extern s32 iSetAlarm(u16 time,
void (*callback)(s32 alarm_id, u16 time,
void *common),
void *common);
383extern s32 _iSetAlarm(u16 time,
void (*callback)(s32 alarm_id, u16 time,
void *common),
void *common);
384extern s32 iReleaseAlarm(s32 alarm_id);
385extern s32 _iReleaseAlarm(s32 alarm_id);
387extern s32 CreateThread(ee_thread_t *
thread);
388extern s32 DeleteThread(s32 thread_id);
389extern s32 StartThread(s32 thread_id,
void *args);
390extern void ExitThread(
void);
391extern void ExitDeleteThread(
void);
392extern s32 TerminateThread(s32 thread_id);
393extern s32 iTerminateThread(s32 thread_id);
396extern s32 ChangeThreadPriority(s32 thread_id, s32 priority);
397extern s32 iChangeThreadPriority(s32 thread_id, s32 priority);
398extern s32 RotateThreadReadyQueue(s32 priority);
399extern s32 _iRotateThreadReadyQueue(s32 priority);
400extern s32 ReleaseWaitThread(s32 thread_id);
401extern s32 iReleaseWaitThread(s32 thread_id);
402extern s32 GetThreadId(
void);
403extern s32 _iGetThreadId(
void);
404extern s32 ReferThreadStatus(s32 thread_id, ee_thread_status_t *info);
405extern s32 iReferThreadStatus(s32 thread_id, ee_thread_status_t *info);
406extern s32 SleepThread(
void);
407extern s32 WakeupThread(s32 thread_id);
408extern s32 _iWakeupThread(s32 thread_id);
409extern s32 CancelWakeupThread(s32 thread_id);
410extern s32 iCancelWakeupThread(s32 thread_id);
411extern s32 SuspendThread(s32 thread_id);
412extern s32 _iSuspendThread(s32 thread_id);
413extern s32 ResumeThread(s32 thread_id);
414extern s32 iResumeThread(s32 thread_id);
416extern u8 RFU059(
void);
418extern void *SetupThread(
void *gp,
void *stack, s32 stack_size,
void *args,
void *root_func);
419extern void SetupHeap(
void *heap_start, s32 heap_size);
420extern void *EndOfHeap(
void);
422extern s32 CreateSema(ee_sema_t *sema);
423extern s32 DeleteSema(s32 sema_id);
424extern s32 SignalSema(s32 sema_id);
425extern s32 iSignalSema(s32 sema_id);
426extern s32 WaitSema(s32 sema_id);
427extern s32 PollSema(s32 sema_id);
428extern s32 iPollSema(s32 sema_id);
429extern s32 ReferSemaStatus(s32 sema_id, ee_sema_t *sema);
430extern s32 iReferSemaStatus(s32 sema_id, ee_sema_t *sema);
431extern s32 iDeleteSema(s32 sema_id);
432extern void SetOsdConfigParam(
void *addr);
433extern void GetOsdConfigParam(
void *addr);
434extern void GetGsHParam(
void *addr1,
void *addr2,
void *addr3);
435extern s32 GetGsVParam(
void);
436extern void SetGsHParam(
void *addr1,
void *addr2,
void *addr3,
void *addr4);
437extern void SetGsVParam(s32 arg1);
440extern int PutTLBEntry(
unsigned int PageMask,
unsigned int EntryHi,
unsigned int EntryLo0,
unsigned int EntryLo1);
441extern int iPutTLBEntry(
unsigned int PageMask,
unsigned int EntryHi,
unsigned int EntryLo0,
unsigned int EntryLo1);
442extern int _SetTLBEntry(
unsigned int index,
unsigned int PageMask,
unsigned int EntryHi,
unsigned int EntryLo0,
unsigned int EntryLo1);
443extern int iSetTLBEntry(
unsigned int index,
unsigned int PageMask,
unsigned int EntryHi,
unsigned int EntryLo0,
unsigned int EntryLo1);
444extern int GetTLBEntry(
unsigned int index,
unsigned int *PageMask,
unsigned int *EntryHi,
unsigned int *EntryLo0,
unsigned int *EntryLo1);
445extern int iGetTLBEntry(
unsigned int index,
unsigned int *PageMask,
unsigned int *EntryHi,
unsigned int *EntryLo0,
unsigned int *EntryLo1);
446extern int ProbeTLBEntry(
unsigned int EntryHi,
unsigned int *PageMask,
unsigned int *EntryLo0,
unsigned int *EntryLo1);
447extern int iProbeTLBEntry(
unsigned int EntryHi,
unsigned int *PageMask,
unsigned int *EntryLo0,
unsigned int *EntryLo1);
448extern int ExpandScratchPad(
unsigned int page);
450extern void EnableIntcHandler(u32 cause);
451extern void iEnableIntcHandler(u32 cause);
452extern void DisableIntcHandler(u32 cause);
453extern void iDisableIntcHandler(u32 cause);
454extern void EnableDmacHandler(u32 channel);
455extern void iEnableDmacHandler(u32 channel);
456extern void DisableDmacHandler(u32 channel);
457extern void iDisableDmacHandler(u32 channel);
458extern void KSeg0(s32 arg1);
459extern s32 EnableCache(s32 cache);
460extern s32 DisableCache(s32 cache);
461extern u32 GetCop0(s32 reg_id);
462extern void FlushCache(s32 operation);
463extern u32 CpuConfig(u32 config);
464extern u32 iGetCop0(s32 reg_id);
465extern void iFlushCache(s32 operation);
466extern u32 iCpuConfig(u32 config);
467extern void SetCPUTimerHandler(
void (*handler)(
void));
468extern void SetCPUTimer(s32 compval);
471extern void SetOsdConfigParam2(
void *config, s32 size, s32 offset);
472extern void GetOsdConfigParam2(
void *config, s32 size, s32 offset);
474extern u64 GsGetIMR(
void);
475extern u64 iGsGetIMR(
void);
476extern u64 GsPutIMR(u64 imr);
477extern u64 iGsPutIMR(u64 imr);
478extern void SetPgifHandler(
void *handler);
479extern void SetVSyncFlag(u32 *, u64 *);
480extern void SetSyscall(s32 syscall_num,
void *handler);
481extern void _print(
const char *fmt, ...);
483extern void sceSifStopDma(
void);
485extern int sceSifDmaStat(
int trid);
486extern int sceiSifDmaStat(
int trid);
487extern int sceSifSetDma(SifDmaTransfer_t *dmat,
int count);
488extern int isceSifSetDma(SifDmaTransfer_t *dmat,
int count);
491extern void sceSifSetDChain(
void);
492extern void isceSifSetDChain(
void);
495extern int sceSifSetReg(u32 register_num,
int register_value);
496extern int sceSifGetReg(u32 register_num);
498extern void _ExecOSD(
int num_args,
char *args[])
__attribute__((noreturn));
499extern s32 Deci2Call(s32, u32 *);
500extern void PSMode(
void);
501extern s32 MachineType(
void);
502extern s32 GetMemorySize(
void);
505extern void _GetGsDxDyOffset(
int mode,
int *dx,
int *dy,
int *dw,
int *dh);
508extern int _InitTLB(
void);
512extern int SetMemoryMode(
int mode);
514extern int GetMemoryMode(
void);
516extern void _SyncDCache(
void *start,
void *end);
517extern void _InvalidDCache(
void *start,
void *end);
524extern int kCopy(
void *dest,
const void *src,
int size);
525extern int kCopyBytes(
void *dest,
const void *src,
int size);
526extern int Copy(
void *dest,
const void *src,
int size);
527extern void setup(
int syscall_num,
void *handler);
528extern void *GetEntryAddress(
int syscall);
531#define SifStopDma(...) sceSifStopDma(__VA_ARGS__)
533#define iSifDmaStat(...) isceSifDmaStat(__VA_ARGS__)
535#define iSifSetDma(...) isceSifSetDma(__VA_ARGS__)
536#define SifSetDChain(...) sceSifSetDChain(__VA_ARGS__)
537#define iSifSetDChain(...) isceSifSetDChain(__VA_ARGS__)
538#define SifSetReg(...) sceSifSetReg(__VA_ARGS__)
539#define SifGetReg(...) sceSifGetReg(__VA_ARGS__)
543#define DISABLE_PATCHED_Exit() \
544 void Exit(s32 exit_code) { KExit(exit_code); }
546#define DISABLE_PATCHED_LoadExecPS2() \
547 void LoadExecPS2(const char *filename, s32 num_args, char *args[]) { _LoadExecPS2(filename, num_args, args); }
549#define NO_PATCHED_ExecOSD() \
550 void ExecOSD(int num_args, char *args[]) { _ExecOSD(num_args, args); }
552#define DISABLE_TimerSystemTime() \
553 void _ps2sdk_init_timer() {} \
554 void _ps2sdk_deinit_timer() {}
556#define DISABLE_TimerAlarm() \
557 void ForTimer_InitAlarm(void) {}
559#define DISABLE_PATCHED_ALARMS() \
560 void InitAlarm(void) {}
562#define DISABLE_PATCHED_THREADS() \
563 int InitThread(void) { return 0; } \
564 s32 iRotateThreadReadyQueue(s32 priority) { return _iRotateThreadReadyQueue(priority); } \
565 s32 iWakeupThread(s32 thread_id) { return _iWakeupThread(thread_id); } \
566 s32 iSuspendThread(s32 thread_id) { return _iSuspendThread(thread_id); }
568#define DISABLE_PATCHED_ExecPS2() \
569 void InitExecPS2(void) {} \
570 s32 ExecPS2(void *entry, void *gp, int num_args, char *args[]) { return _ExecPS2(entry, gp, num_args, args); }
572#define DISABLE_PATCHED_TLBFunctions() \
573 void InitTLBFunctions(void) {} \
574 void InitTLB(void) {}
576#define DISABLE_PATCHED_FUNCTIONS() \
577 DISABLE_PATCHED_ALARMS() \
578 DISABLE_PATCHED_THREADS() \
579 DISABLE_PATCHED_ExecPS2() \
580 DISABLE_PATCHED_TLBFunctions() \
581 DISABLE_PATCHED_Exit() \
582 DISABLE_PATCHED_LoadExecPS2()
584#define DISABLE_EXTRA_TIMERS_FUNCTIONS() \
585 DISABLE_TimerSystemTime() \
void * GetExceptionHandler(int except_no)
void * GetSyscallHandler(int syscall_no)
void * GetInterruptHandler(int intr_no)
u32 count
start sector of fragmented bd/file