diff options
| author | John Wilbert M. Villamor <lameguy64@gmail.com> | 2019-06-23 07:42:16 +0800 |
|---|---|---|
| committer | John Wilbert M. Villamor <lameguy64@gmail.com> | 2019-06-23 07:42:16 +0800 |
| commit | 7be9178c0f9b0e698a305ecc5c0c41fcc596a4fc (patch) | |
| tree | e98c627e1da5c764563774b89b0c06d7ac5ad0a4 /libpsn00b/include | |
| parent | ae9e545c3ed33d39ce21ae13ceb8337fa34901b8 (diff) | |
| download | psn00bsdk-7be9178c0f9b0e698a305ecc5c0c41fcc596a4fc.tar.gz | |
LibPSn00b officially v0.10b, added psxsio library, better DrawSync() and VSync(), better reference manual.
Diffstat (limited to 'libpsn00b/include')
| -rw-r--r-- | libpsn00b/include/hwregs_a.h | 7 | ||||
| -rw-r--r-- | libpsn00b/include/psxapi.h | 76 | ||||
| -rw-r--r-- | libpsn00b/include/psxgpu.h | 104 | ||||
| -rw-r--r-- | libpsn00b/include/psxpad.h | 2 | ||||
| -rw-r--r-- | libpsn00b/include/psxsio.h | 66 | ||||
| -rw-r--r-- | libpsn00b/include/stdio.h | 10 | ||||
| -rw-r--r-- | libpsn00b/include/stdlib.h | 8 | ||||
| -rw-r--r-- | libpsn00b/include/string.h | 7 |
8 files changed, 204 insertions, 76 deletions
diff --git a/libpsn00b/include/hwregs_a.h b/libpsn00b/include/hwregs_a.h index a71a657..27cfc88 100644 --- a/libpsn00b/include/hwregs_a.h +++ b/libpsn00b/include/hwregs_a.h @@ -63,6 +63,13 @@ .set JOY_CTRL, 0x104A .set JOY_BAUD, 0x104E +# Serial +.set SIO_TXRX, 0x1050 +.set SIO_STAT, 0x1054 +.set SIO_MODE, 0x1058 +.set SIO_CTRL, 0x105a +.set SIO_BAUD, 0x105e + # IRQ .set ISTAT, 0x1070 .set IMASK, 0x1074 diff --git a/libpsn00b/include/psxapi.h b/libpsn00b/include/psxapi.h index 9cfb6cb..68dac67 100644 --- a/libpsn00b/include/psxapi.h +++ b/libpsn00b/include/psxapi.h @@ -47,6 +47,20 @@ struct DIRENTRY { // Directory entry char system[4]; }; +struct EXEC { + unsigned int pc0; + unsigned int gp0; + unsigned int t_addr; + unsigned int t_size; + unsigned int d_addr; + unsigned int d_size; + unsigned int b_addr; + unsigned int b_size; + unsigned int s_addr; + unsigned int s_size; + unsigned int sp,fp,rp,ret,base; +}; + // Not recommended to use these functions to install IRQ handlers typedef struct { @@ -56,48 +70,60 @@ typedef struct { unsigned int pad; } INT_RP; -extern void SysEnqIntRP(int pri, INT_RP *rp); -extern void SysDeqIntRP(int pri, INT_RP *rp); +#ifdef __cplusplus +extern "C" { +#endif -// Use event handlers instead +void SysEnqIntRP(int pri, INT_RP *rp); +void SysDeqIntRP(int pri, INT_RP *rp); -extern int OpenEvent(unsigned int class, int spec, int mode, void (*func)()); -extern int CloseEvent(int ev_desc); -extern int EnableEvent(int ev_desc); -extern int DisableEvent(int ev_desc); +// Event handler stuff + +int OpenEvent(unsigned int class, int spec, int mode, void (*func)()); +int CloseEvent(int ev_desc); +int EnableEvent(int ev_desc); +int DisableEvent(int ev_desc); // BIOS file functions -extern int open(const char *name, int mode); -extern int close(int fd); -extern int seek(int fd, unsigned int offset, int mode); -extern int read(int fd, char *buff, unsigned int len); -extern int write(int fd, const char *buff, unsigned int len); -extern int ioctl(int fd, int cmd, int arg); -extern struct DIRENTRY *firstfile(const char *wildcard, struct DIRENTRY *entry); -extern struct DIRENTRY *nextfile(struct DIRENTRY *entry); -extern int erase(const char *name); -extern int chdir(const char *path); +int open(const char *name, int mode); +int close(int fd); +int seek(int fd, unsigned int offset, int mode); +int read(int fd, char *buff, unsigned int len); +int write(int fd, const char *buff, unsigned int len); +int ioctl(int fd, int cmd, int arg); +struct DIRENTRY *firstfile(const char *wildcard, struct DIRENTRY *entry); +struct DIRENTRY *nextfile(struct DIRENTRY *entry); +int erase(const char *name); +int chdir(const char *path); #define delete( p ) erase( p ) #define cd( p ) chdir( p ) // For compatibility int AddDev(DCB *dcb); int DelDev(const char *name); -extern void ListDev(void); - -extern void EnterCriticalSection(void); -extern void ExitCriticalSection(void); +void ListDev(void); -extern void _InitCd(void); -extern void _96_init(void); -extern void _96_remove(void); +void EnterCriticalSection(void); +void ExitCriticalSection(void); -extern void ChangeClearPAD(int mode); +void _InitCd(void); +void _96_init(void); +void _96_remove(void); // BIOS pad functions void _InitPad(char *buff1, int len1, char *buff2, int len2); void _StartPad(void); void _StopPad(void); +void ChangeClearPAD(int mode); +void ChangeClearRCnt(int t, int m); + +// Executable functions +int Exec(struct EXEC *exec, int argc, char *argv); + +#ifdef __cplusplus +} +#endif + #endif diff --git a/libpsn00b/include/psxgpu.h b/libpsn00b/include/psxgpu.h index 24d023a..40b9159 100644 --- a/libpsn00b/include/psxgpu.h +++ b/libpsn00b/include/psxgpu.h @@ -38,8 +38,8 @@ #define setDrawTPage( p, tp, abr, x, y ) \ ( (p)->code[0] = getTPage( tp, abr, x, y ), \ setlen( p, 1 ), setcode( p, 0xe1 ) ) - -/** ORIGINAL FUNCTION **/ + +/* ORIGINAL */ #define setDrawTPageVal( p, tp ) \ ( (p)->code[0] = tp, \ setlen( p, 1 ), setcode( p, 0xe1 ) ) @@ -217,25 +217,24 @@ typedef struct { unsigned int tag; unsigned char r0,g0,b0,code; short x0,y0; - unsigned char u0,v0; - unsigned short clut; short x1,y1; - unsigned char u1,v1; - unsigned short tpage; short x2,y2; - unsigned char u2,v2; - unsigned short pad; -} POLY_FT3; + short x3,y3; +} POLY_F4; typedef struct { unsigned int tag; unsigned char r0,g0,b0,code; short x0,y0; - unsigned char r1,g1,b1,pad0; + unsigned char u0,v0; + unsigned short clut; short x1,y1; - unsigned char r2,g2,b2,pad1; + unsigned char u1,v1; + unsigned short tpage; short x2,y2; -} POLY_G3; + unsigned char u2,v2; + unsigned short pad; +} POLY_FT3; typedef struct { unsigned int tag; @@ -243,53 +242,54 @@ typedef struct { short x0,y0; unsigned char u0,v0; unsigned short clut; - unsigned char r1,g1,b1,pad0; short x1,y1; unsigned char u1,v1; unsigned short tpage; - unsigned char r2,g2,b2,pad1; short x2,y2; unsigned char u2,v2; - unsigned short pad2; -} POLY_GT3; + unsigned short pad0; + short x3,y3; + unsigned char u3,v3; + unsigned short pad1; +} POLY_FT4; typedef struct { unsigned int tag; unsigned char r0,g0,b0,code; short x0,y0; + unsigned char r1,g1,b1,pad0; short x1,y1; + unsigned char r2,g2,b2,pad1; short x2,y2; - short x3,y3; -} POLY_F4; +} POLY_G3; typedef struct { unsigned int tag; unsigned char r0,g0,b0,code; short x0,y0; - unsigned char u0,v0; - unsigned short clut; + unsigned char r1,g1,b1,pad0; short x1,y1; - unsigned char u1,v1; - unsigned short tpage; + unsigned char r2,g2,b2,pad1; short x2,y2; - unsigned char u2,v2; - unsigned short pad0; + unsigned char r3,g3,b3,pad2; short x3,y3; - unsigned char u3,v3; - unsigned short pad1; -} POLY_FT4; +} POLY_G4; typedef struct { unsigned int tag; unsigned char r0,g0,b0,code; short x0,y0; + unsigned char u0,v0; + unsigned short clut; unsigned char r1,g1,b1,pad0; short x1,y1; + unsigned char u1,v1; + unsigned short tpage; unsigned char r2,g2,b2,pad1; short x2,y2; - unsigned char r3,g3,b3,pad2; - short x3,y3; -} POLY_G4; + unsigned char u2,v2; + unsigned short pad2; +} POLY_GT3; typedef struct { unsigned int tag; @@ -431,21 +431,6 @@ typedef struct { /* * VRAM fill and transfer primitive definitions */ -typedef struct { - unsigned int tag; - unsigned char r0,g0,b0,code; - unsigned short x0,y0; // Note: coordinates must be in 16 pixel steps - unsigned short w,h; -} FILL; - -typedef struct { - unsigned int tag; - unsigned char p0,p1,p2,code; - unsigned short x0,y0; - unsigned short x1,y1; - unsigned short w,h; - unsigned int nop[4]; -} VRAM2VRAM; typedef struct { unsigned int tag; @@ -462,11 +447,26 @@ typedef struct { unsigned int code[1]; } DR_TPAGE; -typedef struct { /* ORIGINAL CODE */ +typedef struct { /* ORIGINAL */ unsigned int tag; unsigned int code[1]; } DR_MASK; +typedef struct { /* ORIGINAL */ + unsigned int tag; + unsigned char r0,g0,b0,code; + unsigned short x0,y0; // Note: coordinates must be in 16 pixel steps + unsigned short w,h; +} FILL; + +typedef struct { /* ORIGINAL */ + unsigned int tag; + unsigned char p0,p1,p2,code; + unsigned short x0,y0; + unsigned short x1,y1; + unsigned short w,h; + unsigned int nop[4]; +} VRAM2VRAM; // General structs @@ -528,17 +528,23 @@ void PutDrawEnv(DRAWENV *draw); void SetDispMask(int mask); -void VSync(); -void DrawSync(); +int VSync(int m); +int DrawSync(int m); void WaitGPUcmd(); void WaitGPUdma(); -void VSyncCallback(void (*func)()); +void *VSyncCallback(void (*func)()); +void *DrawSyncCallback(void (*func)()); + +void *DMACallback(int dma, void (*func)()); +void *InterruptCallback(int irq, void (*func)()); +void *GetInterruptCallback(int irq); // Original void LoadImage(RECT *rect, unsigned int *data); void ClearOTagR(unsigned int* ot, int n); void DrawOTag(unsigned int* ot); +void DrawPrim(void *pri); void AddPrim(unsigned int* ot, void* pri); diff --git a/libpsn00b/include/psxpad.h b/libpsn00b/include/psxpad.h index 5478596..01aff06 100644 --- a/libpsn00b/include/psxpad.h +++ b/libpsn00b/include/psxpad.h @@ -68,7 +68,7 @@ typedef struct { unsigned char stat; unsigned char len:4; unsigned char type:4; // Device type (0x1) - unsigned char btn; + unsigned short btn; char x_mov; // X movement of mouse char y_mov; // Y movement of mouse } MOUSETYPE; diff --git a/libpsn00b/include/psxsio.h b/libpsn00b/include/psxsio.h new file mode 100644 index 0000000..df218ac --- /dev/null +++ b/libpsn00b/include/psxsio.h @@ -0,0 +1,66 @@ +#ifndef __PSXSIO_H +#define __PSXSIO_H + +#define SR_TXRDY 0x1 +#define SR_RXRDY 0x2 +#define SR_TXU 0x4 +#define SR_PERROR 0x8 +#define SR_OE 0x10 +#define SR_FE 0x20 +#define SR_DSR 0x80 +#define SR_CTS 0x100 +#define SR_IRQ 0x200 + +#define SIO_TXRDY 0x1 +#define SIO_RXRDY 0x2 +#define SIO_TXU 0x4 +#define SIO_PERROR 0x8 +#define SIO_OE 0x10 +#define SIO_FE 0x20 +#define SIO_DSR 0x80 +#define SIO_CTS 0x100 +#define SIO_IRQ 0x200 + +#define MR_CHLEN_5 0x00 +#define MR_CHLEN_6 0x04 +#define MR_CHLEN_7 0x08 +#define MR_CHLEN_8 0x0C +#define MR_PEN 0x10 +#define MR_P_EVEN 0x30 +#define MR_SB_01 0x40 +#define MR_SB_10 0x80 +#define MR_SB_11 0xc0 + +#define CR_TXEN 0x1 +#define CR_DTR 0x2 +#define CR_RXEN 0x4 +#define CR_BRK 0x8 +#define CR_INTRST 0x10 +#define CR_RTS 0x20 +#define CR_ERRRST 0x40 +#define CR_BUFSZ_1 0x00 +#define CR_BUFSZ_2 0x100 +#define CR_BUFSZ_4 0x200 +#define CR_BUFSZ_8 0x300 +#define CR_TXIEN 0x400 +#define CR_RXIEN 0x800 +#define CR_DSRIEN 0x1000 + +#ifdef __cplusplus +extern "C" { +#endif + +int _sio_control(int cmd, int arg, int param); +void AddSIO(int baud); +void DelSIO(void); + +void *Sio1Callback(void (*func)(void)); + +// ORIGINAL +void WaitSIO(void); + +#ifdef __cplusplus +} +#endif + +#endif
\ No newline at end of file diff --git a/libpsn00b/include/stdio.h b/libpsn00b/include/stdio.h index 5ee9e9b..98c69d0 100644 --- a/libpsn00b/include/stdio.h +++ b/libpsn00b/include/stdio.h @@ -4,7 +4,7 @@ #include <stdarg.h> #ifndef NULL -#define NULL (void*)0 +#define NULL 0 #endif // BIOS seek modes @@ -32,6 +32,14 @@ extern void printf (const char *__format, ...); extern int getc(int __fd); extern int putc(int __char, int __fd); + +#define fputc(__char, __fd) putc(__char, __fd) +#define fgetc(__char, __fd) getc(__char, __fd) + +// Console TTY +extern void gets(char *__s); +extern void puts(const char *__s); +extern int getchar(void); extern void putchar(int __c); // The following functions do not use the BIOS diff --git a/libpsn00b/include/stdlib.h b/libpsn00b/include/stdlib.h index 3909796..f9f41db 100644 --- a/libpsn00b/include/stdlib.h +++ b/libpsn00b/include/stdlib.h @@ -41,6 +41,10 @@ void *calloc(int number, int size); void *realloc(void *buf , int n); */ +#ifdef __cplusplus +extern "C" { +#endif + int rand(); void srand(unsigned long seed); @@ -53,5 +57,9 @@ long double strtold(const char *nptr, char **endptr); double strtod(const char *nptr, char **endptr); float strtof(const char *nptr, char **endptr); +#ifdef __cplusplus +} +#endif + #endif diff --git a/libpsn00b/include/string.h b/libpsn00b/include/string.h index 95796d5..9cd1d64 100644 --- a/libpsn00b/include/string.h +++ b/libpsn00b/include/string.h @@ -9,6 +9,10 @@ #ifndef _STRING_H #define _STRING_H +#ifdef __cplusplus +extern "C" { +#endif + int strcmp(const char *dst , const char *src); int strncmp(const char *dst , const char *src , int len); char *strpbrk(const char *dst , const char *src); @@ -37,6 +41,9 @@ void *memcpy(void *dst , const void *src , int n); void *memset(void *dst , char c , int n); int memcmp(const void *b1 , const void *b2 , int n); +#ifdef __cplusplus +} +#endif #endif |
