psxsdk/libpsx/include/psxbios.h

225 lines
5.0 KiB
C

/*
* PSXSDK: Bios functions
*/
#ifndef _PSXBIOS_H
#define _PSXBIOS_H
#ifdef __cplusplus
extern "C"
{
#endif
/* Joypad functions */
extern void PAD_init(unsigned long mode, unsigned long *pad_buf);
extern int PAD_dr(void);
/* ROM information functions */
/**
* Returns PSX kernel date.
* @return Kernel date n 0xYYYYMMDD BCD format.
*/
unsigned long GetKernelDate(void);
/**
* Returns a pointer to a zero-terminated
* string which contains the kernel ROM version.
* @return Pointer to a zero-terminated string which contains the kernel ROM version.
*/
const char *GetKernelRomVersion(void);
/**
* Returns a pointer to a zero-terminated
* string which contains the system ROM version.
* @return Zero-terminated string which contains the system ROM version.
*/
const char *GetSystemRomVersion(void);
/**
* GetRamSize() should return size of RAM in bytes.
* It doesn't seem to work most times. On SCPH1001, it returns 0.
* On SCPH1000, it returns 2 (which is the number of megabytes of RAM
* the PSX has.)
* @return Size of RAM in bytes.
*/
unsigned int GetRamSize(void);
/* Interrupt/Exception functions */
/*void Exception();*/
/**
* Enters a critical section.
*/
void EnterCriticalSection(void);
/**
* Exits a critical section.
*/
void ExitCriticalSection(void);
void SysEnqIntRP(int index, unsigned int *buf);
void SysDeqIntRP(int index, unsigned int *buf);
void ResetEntryInt(void);
/**
* Directory entry
*/
struct DIRENTRY
{
/** Filename */
char name[20];
/** Attributes */
unsigned int attr;
/** File size in bytes */
int size;
/** Pointer to next file entry */
struct DIRENTRY *next;
/** System reserved */
unsigned char system[8];
};
/**
* Gets information about the first file which
* matches the pattern. ? and * wildcards can be used.
* Characters after * are ignored.
* @param name File name string
* @param dirent Pointer to a struct DIRENTRY object.
* @return dirent on success, NULL on failure.
*/
struct DIRENTRY *firstfile(const char *name, struct DIRENTRY *dirent);
/**
* Finds a file with the same conditions as the previous call to firstfile().
* If a corresponding file is found, file information is stored
* to the structure pointed to by dir.
*
* @param dir Pointer to a struct DIRENTRY object.
* @return dir on success, NULL on failure.
*/
struct DIRENTRY *nextfile(struct DIRENTRY *dir);
/**
* Gets the file size of the file named "name".
* It is actually just a wrapper around firstfile.
* It rounds the file size to the block size (2048).
* @param name FIle name string
* @return File size in bytes, rounded.
*/
int get_file_size(const char *name);
/**
* This function is like get_file_size() but doesn't round
* the file size to the block size.
* @param name File name string
* @return File size in bytes, unrounded.
*/
int get_real_file_size(const char *name);
void InitHeap(void *block , int size);
void FlushCache(void);
void SetRCntHandler(void (*callback)(), int spec, unsigned short target);
void RemoveRCntHandler(int spec);
/**
* Opens an event, and returns its identifier
* Must be executed in a critical section
* @param desc Numerical cause descriptor
* @param spec Numerical event type
* @param mode Numerical mode
* @param func Function pointer to callback function
* @return Numerical identifier for the event opened
*/
int OpenEvent(
int desc, // Cause descriptor
int spec, // Event type
int mode, // Mode
int *(*func)(void) // Pointer to callback function
);
/**
* Enables an event by its identifier returned by OpenEvent()
* @param event Numerical event identifier
* @return ???
*/
int EnableEvent(unsigned int event);
/**
* Closes an event by its identifier
* @param event Numerical event identifier
* @return ???
*/
int CloseEvent(unsigned int event);
/**
* Disables an event by its identifier
* @param event Numerical event identifier
* @return ???
*/
int DisableEvent(unsigned int event);
/**
* Generates an event. This must be executed in a critical section.
* If the event to deliver is set to generate an interrupt, the handler function is called.
* @param ev1 Numerical cause descriptor
* @param ev2 Numerical event class
* @return ???
*/
int DeliverEvent(unsigned int ev1, // Cause descriptor
int ev2); // Event class
/**
* Checks if the event specified by its identifier has occured
* @param event Numerical event identifier
* @return 1 if the event has occured, 0 if it has not
*/
int TestEvent(unsigned int event);
/**
* Waits until the event specified by identifier occurs.
* @param event Numerical event identifier
* @return 1 on success, 0 on failure.
*/
int WaitEvent(unsigned int event);
/**
* Replaces the executable image in memory with the one
* contained in another executable file in PSX-EXE format.
* WARNING: Does not work right now.
*
* Most likely you want PSX_RunExe()
* @param name Path name of PSX-EXE executable
* @param argc Number of arguments
* @param argv Pointer to an array of string pointers for each argument
*/
void LoadExec(char *name, int argc, char **argv);
#ifdef __cplusplus
}
#endif
#endif