aboutsummaryrefslogtreecommitdiff
path: root/libpsn00b/include
diff options
context:
space:
mode:
authorJohn Wilbert M. Villamor <lameguy64@gmail.com>2019-06-23 07:42:16 +0800
committerJohn Wilbert M. Villamor <lameguy64@gmail.com>2019-06-23 07:42:16 +0800
commit7be9178c0f9b0e698a305ecc5c0c41fcc596a4fc (patch)
treee98c627e1da5c764563774b89b0c06d7ac5ad0a4 /libpsn00b/include
parentae9e545c3ed33d39ce21ae13ceb8337fa34901b8 (diff)
downloadpsn00bsdk-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.h7
-rw-r--r--libpsn00b/include/psxapi.h76
-rw-r--r--libpsn00b/include/psxgpu.h104
-rw-r--r--libpsn00b/include/psxpad.h2
-rw-r--r--libpsn00b/include/psxsio.h66
-rw-r--r--libpsn00b/include/stdio.h10
-rw-r--r--libpsn00b/include/stdlib.h8
-rw-r--r--libpsn00b/include/string.h7
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