diff --git a/include/usr/local/sce/ee/lib/eeregs.h b/include/usr/local/sce/ee/lib/eeregs.h new file mode 100644 index 0000000..f26f846 --- /dev/null +++ b/include/usr/local/sce/ee/lib/eeregs.h @@ -0,0 +1,15 @@ +#ifndef _EEREGS_H_ +#define _EEREGS_H_ + +#define D2_CHCR ((volatile unsigned int *)(0x1000a000)) +#define DGET_D2_CHCR() (*D2_CHCR) +#define DPUT_D2_CHCR(x) (*D2_CHCR = (x)) +#define D2_QWC ((volatile unsigned int *)(0x1000a020)) +#define DPUT_D2_QWC(x) (*D2_QWC = (x)) +#define D2_TADR ((volatile unsigned int *)(0x1000a030)) +#define DPUT_D2_TADR(x) (*D2_TADR = (x)) +#define D_STAT ((volatile unsigned int *)(0x1000e010)) +#define DPUT_D_STAT(x) (*D_STAT = (x)) + + +#endif /* _EEREGS_H_ */ diff --git a/include/usr/local/sega/px/src/pxtex2.h b/include/usr/local/sega/px/src/pxtex2.h index e69de29..983536b 100644 --- a/include/usr/local/sega/px/src/pxtex2.h +++ b/include/usr/local/sega/px/src/pxtex2.h @@ -0,0 +1,15 @@ +extern unsigned int pxgPath3TransAddr; // size: 0x4, address: 0x6D1F38 +extern unsigned int pxgPath3TransInvokeCount; // size: 0x4, address: 0x6D1F3C + +enum PXE_ERR { + PXE_ERR_OK = 0, + PXE_ERR_INVALIDARG = -1, + PXE_ERR_BUSY = -2, + PXE_ERR_NOTREADY = -10, + PXE_ERR_NOTVB = -50, + PXE_ERR_INVALIDVBVERSION = -51, + PXE_ERR_TOOMANYVERTICES = -52, + PXE_ERR_NODATA = -53, + PXE_ERR_NOTENOUGHBUFFER = -54, + PXE_ERR_INCORRECTDBINDEX = -55, +}; diff --git a/src/usr/local/sega/px/src/pxtex2.c b/src/usr/local/sega/px/src/pxtex2.c index e69de29..d02b29e 100644 --- a/src/usr/local/sega/px/src/pxtex2.c +++ b/src/usr/local/sega/px/src/pxtex2.c @@ -0,0 +1,18 @@ +#include "usr/local/sce/ee/lib/eeregs.h" +#include "usr/local/sega/px/src/pxtex2.h" + +unsigned int pxgPath3TransAddr; // size: 0x4, address: 0x6D1F38 +unsigned int pxgPath3TransInvokeCount; // size: 0x4, address: 0x6D1F3C + + +enum PXE_ERR PXStartPath3Trans(void * tagAddr) { + while (DGET_D2_CHCR() & 0x100); + DPUT_D_STAT(4); + DPUT_D2_QWC(0); + DPUT_D2_TADR((unsigned int)tagAddr & 0x0FFFFFFF); + asm("sync;"); + DPUT_D2_CHCR(0x185); + pxgPath3TransAddr = (unsigned int)tagAddr & 0x0FFFFFFF; + pxgPath3TransInvokeCount++; + return PXE_ERR_OK; +}