aboutsummaryrefslogtreecommitdiff
path: root/libpsn00b/psxgpu
diff options
context:
space:
mode:
authorJohn Wilbert M. Villamor <lameguy64@gmail.com>2020-09-19 20:43:05 +0800
committerJohn Wilbert M. Villamor <lameguy64@gmail.com>2020-09-19 20:43:05 +0800
commit9f4891f95070c66ea9f1aba99d72724d4ab24e5a (patch)
tree723e3ef2118a3d1a9e6dafa811ed1b8b1bc9196e /libpsn00b/psxgpu
parent6762c39551ded059450d17d8bb0cb80642c8aaab (diff)
downloadpsn00bsdk-9f4891f95070c66ea9f1aba99d72724d4ab24e5a.tar.gz
Revised makefiles, added strtok(), command line arguments, SetHeapSize(), moved ISR and callback system to psxetc, moved debug font to psxgpu, fixed CD-ROM library crashing on PSIO, fixed interrupt callback setup to fix crashing on ResetGraph()
Diffstat (limited to 'libpsn00b/psxgpu')
-rw-r--r--libpsn00b/psxgpu/dbugfont.c144
-rw-r--r--libpsn00b/psxgpu/dbugfont.timbin0 -> 2112 bytes
-rw-r--r--libpsn00b/psxgpu/dmacallback.s191
-rw-r--r--libpsn00b/psxgpu/fntsort.c47
-rw-r--r--libpsn00b/psxgpu/font.c225
-rw-r--r--libpsn00b/psxgpu/getinterruptcallback.s19
-rw-r--r--libpsn00b/psxgpu/interruptcallback.s48
-rw-r--r--libpsn00b/psxgpu/makefile34
-rw-r--r--libpsn00b/psxgpu/resetgraph.s171
-rw-r--r--libpsn00b/psxgpu/restartcallback.s50
10 files changed, 489 insertions, 440 deletions
diff --git a/libpsn00b/psxgpu/dbugfont.c b/libpsn00b/psxgpu/dbugfont.c
new file mode 100644
index 0000000..ff21d84
--- /dev/null
+++ b/libpsn00b/psxgpu/dbugfont.c
@@ -0,0 +1,144 @@
+unsigned int dbugfont_size=2112;
+unsigned char dbugfont[] = {
+0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x00,0x00,0xe0,
+0x01,0x10,0x00,0x01,0x00,0x00,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x08,0x00,0x00,0x80,0x02,0x00,0x00,
+0x20,0x00,0x20,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x01,0x01,
+0x00,0x10,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x11,
+0x00,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x01,
+0x00,0x00,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x10,0x00,0x10,0x00,0x10,0x00,
+0x01,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x01,0x00,
+0x00,0x00,0x00,0x00,0x00,0x10,0x11,0x11,0x00,0x01,0x01,0x00,0x00,0x11,0x01,
+0x01,0x00,0x10,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x00,
+0x10,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x10,0x00,0x11,
+0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x10,0x11,
+0x00,0x00,0x10,0x10,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x10,
+0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x10,0x11,0x00,0x00,0x11,0x11,0x01,0x00,
+0x00,0x00,0x00,0x00,0x11,0x11,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,
+0x00,0x10,0x10,0x10,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x11,
+0x11,0x00,0x00,0x01,0x01,0x00,0x00,0x01,0x01,0x00,0x01,0x10,0x01,0x00,0x00,
+0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x01,0x01,0x01,0x00,
+0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x01,0x00,0x00,0x10,0x01,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x10,0x10,0x11,0x00,0x01,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x11,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x01,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x10,0x11,0x00,0x00,0x01,
+0x00,0x01,0x00,0x10,0x01,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x11,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x10,0x11,0x11,0x00,0x00,0x10,0x01,0x00,
+0x10,0x11,0x11,0x00,0x00,0x11,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x10,0x00,
+0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x11,0x11,0x00,0x00,0x11,0x00,0x00,0x10,
+0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x01,0x01,0x00,0x10,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,
+0x00,0x00,0x11,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x01,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x01,0x10,
+0x10,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x01,0x00,
+0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x10,
+0x00,0x10,0x00,0x10,0x00,0x00,0x11,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,
+0x00,0x00,0x10,0x11,0x11,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x10,0x00,0x10,
+0x10,0x01,0x01,0x00,0x10,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x10,0x01,0x00,
+0x10,0x11,0x11,0x00,0x10,0x11,0x01,0x00,0x10,0x11,0x01,0x00,0x00,0x00,0x01,
+0x00,0x00,0x11,0x01,0x00,0x00,0x11,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x00,0x01,0x00,0x10,0x10,0x01,0x01,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,
+0x00,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x10,
+0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x10,0x11,0x11,0x00,0x00,
+0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x10,0x10,0x11,0x00,0x00,0x10,0x00,0x00,
+0x10,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x10,
+0x00,0x10,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x00,
+0x01,0x00,0x00,0x11,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x10,0x11,0x11,0x00,0x10,0x11,0x11,0x00,0x00,0x11,0x01,0x00,0x00,0x00,0x01,
+0x00,0x10,0x11,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x11,
+0x01,0x00,0x00,0x11,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x10,0x00,0x00,
+0x00,0x11,0x11,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x10,0x11,0x01,
+0x00,0x00,0x11,0x01,0x00,0x10,0x11,0x01,0x00,0x10,0x11,0x11,0x00,0x10,0x11,
+0x11,0x00,0x00,0x11,0x11,0x00,0x10,0x00,0x10,0x00,0x10,0x11,0x11,0x00,0x00,
+0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x10,0x00,
+0x10,0x00,0x10,0x00,0x00,0x11,0x01,0x00,0x10,0x11,0x01,0x00,0x00,0x01,0x01,
+0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,
+0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00,
+0x10,0x01,0x11,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,
+0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x10,0x00,
+0x10,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,
+0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x01,0x00,
+0x10,0x00,0x00,0x00,0x10,0x10,0x10,0x00,0x10,0x01,0x10,0x00,0x10,0x00,0x10,
+0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x11,0x01,0x00,0x10,0x00,
+0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x11,0x00,0x00,0x10,0x11,0x00,0x00,0x10,
+0x10,0x11,0x00,0x10,0x11,0x11,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x10,0x00,
+0x10,0x11,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x10,0x10,
+0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x11,0x11,0x00,0x10,0x00,
+0x10,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x10,
+0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x10,0x00,0x00,
+0x10,0x00,0x10,0x00,0x10,0x00,0x01,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x10,
+0x00,0x10,0x00,0x11,0x00,0x10,0x00,0x10,0x00,0x10,0x11,0x01,0x00,0x10,0x00,
+0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,
+0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,
+0x00,0x10,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,
+0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,
+0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x11,0x01,0x00,0x00,0x11,0x01,0x00,0x10,
+0x11,0x01,0x00,0x10,0x11,0x11,0x00,0x10,0x00,0x00,0x00,0x00,0x11,0x01,0x00,
+0x10,0x00,0x10,0x00,0x10,0x11,0x11,0x00,0x00,0x11,0x01,0x00,0x10,0x00,0x10,
+0x00,0x10,0x11,0x11,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x11,
+0x01,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x01,0x00,0x10,
+0x11,0x01,0x00,0x00,0x11,0x01,0x00,0x10,0x11,0x11,0x00,0x10,0x00,0x10,0x00,
+0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,
+0x00,0x10,0x11,0x11,0x00,0x00,0x11,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x11,
+0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x10,
+0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x10,0x00,0x00,
+0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,
+0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x01,0x00,0x00,0x10,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x11,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00,
+0x00,0x10,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,
+0x00,0x00,0x01,0x01,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x01,
+0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x10,0x01,0x11,0x00,0x00,
+0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x11,0x01,0x00,
+0x00,0x11,0x01,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,
+0x00,0x10,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x10,
+0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x00,
+0x10,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x10,
+0x00,0x10,0x00,0x10,0x00,0x10,0x10,0x10,0x00,0x00,0x01,0x01,0x00,0x00,0x10,
+0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x10,0x00,0x01,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x10,0x00,
+0x00,0x10,0x00,0x10,0x00,0x00,0x01,0x01,0x00,0x10,0x01,0x11,0x00,0x10,0x00,
+0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x11,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x11,0x01,
+0x00,0x00,0x10,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x00,0x00,0x10,0x00,
+0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x11,0x11,0x00,0x00,
+0x11,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x11,0x01,0x00,0x00,0x00,0x00,0x00,
+0x11,0x11,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+};
diff --git a/libpsn00b/psxgpu/dbugfont.tim b/libpsn00b/psxgpu/dbugfont.tim
new file mode 100644
index 0000000..4e6cce2
--- /dev/null
+++ b/libpsn00b/psxgpu/dbugfont.tim
Binary files differ
diff --git a/libpsn00b/psxgpu/dmacallback.s b/libpsn00b/psxgpu/dmacallback.s
deleted file mode 100644
index b2f86cf..0000000
--- a/libpsn00b/psxgpu/dmacallback.s
+++ /dev/null
@@ -1,191 +0,0 @@
-.set noreorder
-
-.include "hwregs_a.h"
-
-.section .text
-
-.global DMACallback
-.type DMACallback, @function
-DMACallback:
-
- # a0 - DMA channel
- # a1 - Callback function
-
- addiu $sp, -8
- sw $ra, 0($sp)
-
- beqz $a1, .Lremove_cb # Remove callback if function is NULL
- nop
-
- addiu $sp, -8 # Install IRQ handler for DMA handler
- sw $a0, 0($sp) # if not set installed yet
- sw $a1, 4($sp)
-
- jal GetInterruptCallback
- li $a0, 3
-
- bnez $v0, .Lskip_install
- nop
-
- la $a1, _dma_handler
- jal InterruptCallback
- li $a0, 3
-
-.Lskip_install:
-
- lw $a0, 0($sp)
- lw $a1, 4($sp)
- addiu $sp, 8
-
- la $v0, _dma_func_table
- sll $v1, $a0, 2
- addu $v0, $v1
- lw $v1, 0($v0)
- sw $a1, 0($v0)
- sw $v1, 4($sp)
-
- lui $a2, IOBASE
-
- lw $v0, DICR($a2) # Enable DMA interrupt
- lui $v1, 0x1
- sll $v1, $a0
- or $v0, $v1
- lui $v1, 0x80
- or $v0, $v1
- sw $v0, DICR($a2)
-
- b .Lskip_remove
- nop
-
-.Lremove_cb:
-
- la $v0, _dma_func_table # Set callback address
- sll $v1, $a0, 2
- addu $v0, $v1
- lw $v1, 0($v0)
- sw $a1, 0($v0)
- sw $v1, 4($sp)
-
- lui $a2, IOBASE # Disable DMA interrupt
- lw $v0, DICR($a2)
- lui $v1, 0x1
- sll $v1, $a0
- .set noat
- addiu $at, $0, -1
- xor $v1, $at
- and $v0, $v1
- lui $v1, 0x7f00
- xor $v1, $at
- and $v0, $v1
- .set at
- sw $v0, DICR($a2)
-
- jal _dma_has_cb # Check if callbacks are present
- nop
- bnez $v0, .Lskip_remove
- nop
- sw $0 , DICR($a2)
-
- jal GetInterruptCallback # Check if callback is the DMA handler
- li $a0, 3
- la $v1, _dma_handler
- bne $v0, $v1, .Lskip_remove
- nop
-
- li $a0, 3
- jal InterruptCallback
- move $a1, $0
-
-.Lskip_remove:
-
- lw $ra, 0($sp)
- lw $v0, 4($sp)
- jr $ra
- addiu $sp, 8
-
-
-.type _dma_has_cb, @function
-_dma_has_cb:
-
- la $v1, _dma_func_table
- li $t0, 6
-
-.Lscan_loop:
-
- lw $v0, 0($v1)
- addiu $v1, 4
- bnez $v0, .Lhas_cb
- nop
-
- bgtz $t0, .Lscan_loop
- addiu $t0, -1
-
- jr $ra
- move $v0, $0
-
-.Lhas_cb:
-
- jr $ra
- li $v0, 1
-
-
-.type _dma_handler, @function
-_dma_handler:
-
- addiu $sp, -12
- sw $ra, 0($sp)
- sw $s0, 4($sp)
- sw $s1, 8($sp)
-
- move $s0, $0
- la $s1, _dma_func_table
-
-.Lhandler_loop:
-
- lui $a0, IOBASE
- lw $v0, DICR($a0)
- li $v1, 24
- addu $v1, $s0
- srl $v0, $v1
- andi $v0, 0x1
-
- lw $v1, 0($s1)
-
- beqz $v0, .Lno_irq
- addiu $s1, 4
-
- beqz $v1, .Lno_irq
- nop
-
- jalr $v1
- nop
-
-.Lno_irq:
-
- blt $s0, 6, .Lhandler_loop
- addi $s0, 1
-
- lui $a0, IOBASE
- lw $v0, DICR($a0)
- nop
- sw $v0, DICR($a0)
-
- lw $ra, 0($sp)
- lw $s0, 4($sp)
- lw $s1, 8($sp)
-
- jr $ra
- addiu $sp, -12
-
-
-.section .data
-
-_dma_func_table:
- .word 0
- .word 0
- .word 0
- .word 0
- .word 0
- .word 0
- .word 0
- \ No newline at end of file
diff --git a/libpsn00b/psxgpu/fntsort.c b/libpsn00b/psxgpu/fntsort.c
new file mode 100644
index 0000000..3890ebb
--- /dev/null
+++ b/libpsn00b/psxgpu/fntsort.c
@@ -0,0 +1,47 @@
+#include <stdio.h>
+#include <ctype.h>
+#include <psxgpu.h>
+
+extern unsigned short _font_tpage;
+extern unsigned short _font_clut;
+
+char *FntSort(unsigned int *ot, char *pri, int x, int y, const char *text) {
+
+ DR_TPAGE *tpage;
+ SPRT_8 *sprt = (SPRT_8*)pri;
+ int i;
+
+ while( *text != 0 ) {
+
+ i = toupper( *text )-32;
+
+ if( i > 0 ) {
+
+ i--;
+ setSprt8( sprt );
+ setRGB0( sprt, 128, 128, 128 );
+ setXY0( sprt, x, y );
+ setUV0( sprt, (i%16)<<3, (i>>4)<<3 );
+ sprt->clut = _font_clut;
+ addPrim( ot, sprt );
+ sprt++;
+
+ }
+
+ x += 8;
+ text++;
+
+ }
+
+ pri = (char*)sprt;
+
+ tpage = (DR_TPAGE*)pri;
+ tpage->code[0] = _font_tpage;
+ setlen( tpage, 1 );
+ setcode( tpage, 0xe1 );
+ addPrim( ot, pri );
+ pri += sizeof(DR_TPAGE);
+
+ return pri;
+
+} \ No newline at end of file
diff --git a/libpsn00b/psxgpu/font.c b/libpsn00b/psxgpu/font.c
new file mode 100644
index 0000000..cd4acab
--- /dev/null
+++ b/libpsn00b/psxgpu/font.c
@@ -0,0 +1,225 @@
+#include <stdio.h>
+#include <string.h>
+#include <malloc.h>
+#include <ctype.h>
+#include <psxgpu.h>
+
+typedef struct _fnt_stream {
+ char *txtbuff;
+ char *txtnext;
+ char *pribuff;
+ short x,y;
+ short w,h;
+ int bg;
+ int maxchars;
+} _fnt_stream;
+
+static _fnt_stream _stream[8];
+static int _nstreams = 0;
+
+unsigned short _font_tpage;
+unsigned short _font_clut;
+
+extern unsigned char dbugfont[];
+
+void FntLoad(int x, int y) {
+
+ RECT pos;
+ TIM_IMAGE tim;
+
+ GetTimInfo( (unsigned int*)dbugfont, &tim );
+
+ // Load font image
+ pos = *tim.prect;
+ pos.x = x;
+ pos.y = y;
+
+ _font_tpage = getTPage( 0, 0, pos.x, pos.y );
+
+ LoadImage( &pos, tim.paddr );
+ DrawSync(0);
+
+ // Load font clut
+ pos = *tim.crect;
+ pos.x = x;
+ pos.y = y+tim.prect->h;
+
+ _font_clut = getClut( pos.x, pos.y );
+
+ LoadImage( &pos, tim.caddr );
+ DrawSync(0);
+
+ // Clear previously opened text streams
+ if( _nstreams ) {
+
+ int i;
+
+ for( i=0; i<_nstreams; i++ ) {
+ free(_stream[i].txtbuff);
+ free(_stream[i].pribuff);
+ }
+
+ _nstreams = 0;
+
+ }
+
+}
+
+int FntOpen(int x, int y, int w, int h, int isbg, int n) {
+
+ int i;
+
+ // Initialize a text stream
+ _stream[_nstreams].x = x;
+ _stream[_nstreams].y = y;
+ _stream[_nstreams].w = w;
+ _stream[_nstreams].h = h;
+
+ _stream[_nstreams].txtbuff = (char*)malloc(n+1);
+
+ i = (sizeof(SPRT_8)*n)+sizeof(DR_TPAGE);
+
+ if( isbg ) {
+ i += sizeof(TILE);
+ }
+
+ _stream[_nstreams].pribuff = (char*)malloc(i);
+ _stream[_nstreams].maxchars = n;
+
+ _stream[_nstreams].txtbuff[0] = 0x0;
+ _stream[_nstreams].txtnext = _stream[_nstreams].txtbuff;
+ _stream[_nstreams].bg = isbg;
+
+ n = _nstreams;
+ _nstreams++;
+
+ return n;
+
+}
+
+int FntPrint(int id, const char *fmt, ...) {
+
+ int n;
+ va_list ap;
+
+ if( id < 0 )
+ id = _nstreams-1;
+
+ n = strlen(_stream[id].txtbuff);
+
+ if( n >= _stream[id].maxchars ) {
+ return n;
+ }
+
+ va_start(ap, fmt);
+
+ n = vsnprintf(_stream[id].txtnext, _stream[id].maxchars-n, fmt, ap);
+
+ _stream[id].txtnext += n;
+
+ va_end(ap);
+
+ return strlen(_stream[id].txtbuff);
+
+}
+
+char *FntFlush(int id) {
+
+ char *opri;
+ SPRT_8 *sprt;
+ DR_TPAGE *tpage;
+ char *text;
+ int i,sx,sy;
+
+ if( id < 0 )
+ id = _nstreams-1;
+
+ sx = _stream[id].x;
+ sy = _stream[id].y;
+
+ text = _stream[id].txtbuff;
+
+ opri = _stream[id].pribuff;
+
+ // Create TPage primitive
+ tpage = (DR_TPAGE*)opri;
+ setDrawTPage(tpage, 0, 0, _font_tpage);
+
+ // Create a black rectangle background when enabled
+ if( _stream[id].bg ) {
+
+ TILE *tile;
+ opri += sizeof(DR_TPAGE);
+ tile = (TILE*)opri;
+
+ setTile(tile);
+
+ if( _stream[id].bg == 2 )
+ setSemiTrans(tile, 1);
+
+ setXY0(tile, _stream[id].x, _stream[id].y);
+ setWH(tile, _stream[id].w, _stream[id].h);
+ setRGB0(tile, 0, 0, 0);
+ setaddr(tpage, tile);
+ opri = (char*)tile;
+
+ sprt = (SPRT_8*)(opri+sizeof(TILE));
+
+ } else {
+
+ sprt = (SPRT_8*)(opri+sizeof(DR_TPAGE));
+
+ }
+
+ // Create the sprite primitives
+ while( *text != 0 ) {
+
+ if( ( *text == '\n' ) || ( ( sx-_stream[id].x ) > _stream[id].w-8 ) ) {
+ sx = _stream[id].x;
+ sy += 8;
+
+ if( *text == '\n' )
+ text++;
+
+ continue;
+ }
+
+ if( ( sy-_stream[id].y ) > _stream[id].h-8 ) {
+ break;
+ }
+
+ i = toupper( *text )-32;
+
+ if( i > 0 ) {
+
+ i--;
+ setSprt8( sprt );
+ setRGB0( sprt, 128, 128, 128 );
+ setXY0( sprt, sx, sy );
+ setUV0( sprt, (i%16)<<3, (i>>4)<<3 );
+ sprt->clut = _font_clut;
+ setaddr(opri, sprt);
+ opri = (char*)sprt;
+ sprt++;
+
+ }
+
+ sx += 8;
+ text++;
+
+ }
+
+ // Set a terminator value to the last primitive
+ termPrim(opri);
+
+ // Draw the primitives
+ DrawSync(0);
+ DrawOTag((unsigned int*)_stream[id].pribuff);
+ DrawSync(0);
+
+ _stream[id].txtnext = _stream[id].txtbuff;
+ _stream[id].txtbuff[0] = 0;
+
+ return _stream[id].pribuff;
+
+} \ No newline at end of file
diff --git a/libpsn00b/psxgpu/getinterruptcallback.s b/libpsn00b/psxgpu/getinterruptcallback.s
deleted file mode 100644
index 510447f..0000000
--- a/libpsn00b/psxgpu/getinterruptcallback.s
+++ /dev/null
@@ -1,19 +0,0 @@
-.set noreorder
-
-.section .text
-
-.global GetInterruptCallback
-.type GetInterruptCallback, @function
-GetInterruptCallback:
-
- # a0 - Interrupt number
-
- la $a1, _irq_func_table
- sll $a0, 2
- addu $a1, $a0
- lw $v0, 0($a1)
- nop
- jr $ra
- nop
-
- \ No newline at end of file
diff --git a/libpsn00b/psxgpu/interruptcallback.s b/libpsn00b/psxgpu/interruptcallback.s
deleted file mode 100644
index 8e912d8..0000000
--- a/libpsn00b/psxgpu/interruptcallback.s
+++ /dev/null
@@ -1,48 +0,0 @@
-.set noreorder
-
-.include "hwregs_a.h"
-
-.section .text
-
-.global InterruptCallback
-.type InterruptCallback, @function
-InterruptCallback:
-
- # a0 - Interrupt number
- # a1 - Callback function
-
- lui $a2, IOBASE
-
- beqz $a1, .Ldisable_irq
- nop
-
- lw $v0, IMASK($a2) # Enable interrupt mask
- li $v1, 1
- sll $v1, $a0
- or $v0, $v1
-
- b .Lcont
- sw $v0, IMASK($a2)
-
-.Ldisable_irq:
-
-.set noat
- lw $v0, IMASK($a2) # Disable interrupt mask
- li $v1, 1
- sll $v1, $a0
- addiu $at, $0 , -1
- xor $v1, $at
-.set at
- and $v0, $v1
- sw $v0, IMASK($a2)
-
-.Lcont:
-
- la $a2, _irq_func_table # Get address to IRQ function table
-
- sll $v1, $a0, 2 # Compute the slot
- addu $v1, $a2, $v1
- lw $v0, 0($v1) # Get old handler address
-
- jr $ra # Return and set new IRQ handler
- sw $a1, 0($v1)
diff --git a/libpsn00b/psxgpu/makefile b/libpsn00b/psxgpu/makefile
index 980e311..2e984d0 100644
--- a/libpsn00b/psxgpu/makefile
+++ b/libpsn00b/psxgpu/makefile
@@ -1,22 +1,26 @@
# Run using make (Linux) or gmake (BSD)
# Part of the PSn00bSDK Project
-# 2019 Lameguy64 / Meido-Tek Productions
+# 2019 - 2020 Lameguy64 / Meido-Tek Productions
-include ../common.mk
+include ../../psn00bsdk-setup.mk
-TARGET = ../libpsxgpu.a
+TARGET = libpsxgpu.a
-CFILES = $(notdir $(wildcard ./*.c))
-AFILES = $(notdir $(wildcard ./*.s))
-OFILES = $(addprefix build/,$(CFILES:.c=.o) $(AFILES:.s=.o))
+INCLUDE = -I../include
-CFLAGS = -g -O2 -msoft-float -fno-builtin -fdata-sections -ffunction-sections -Wa,--strip-local-absolute
-AFLAGS = -g -msoft-float -Wa,--strip-local-absolute
+CFILES = $(notdir $(wildcard ./*.c))
+AFILES = $(notdir $(wildcard ./*.s))
+OFILES = $(addprefix build/,$(CFILES:.c=.o) $(AFILES:.s=.o))
-CC = $(PREFIX)gcc
-AS = $(PREFIX)as
-AR = $(PREFIX)ar
-RANLIB = $(PREFIX)ranlib
+CFLAGS = -g -O2 -msoft-float -fno-builtin -fdata-sections \
+ -ffunction-sections -Wa,--strip-local-absolute
+AFLAGS = -g -msoft-float -Wa,--strip-local-absolute
+
+ifndef PSN00BSDK_LIBS
+
+PSN00BSDK_LIBS = ..
+
+endif
all: $(TARGET)
@@ -32,5 +36,11 @@ build/%.o: %.s
@mkdir -p $(dir $@)
$(CC) $(AFLAGS) $(INCLUDE) -c $< -o $@
+install:
+ifneq ($(PSN00BSDK_LIBS), "..")
+ @mkdir -p $(PSN00BSDK_LIBS)
+endif
+ cp $(TARGET) $(PSN00BSDK_LIBS)/$(TARGET)
+
clean:
rm -Rf build $(TARGET)
diff --git a/libpsn00b/psxgpu/resetgraph.s b/libpsn00b/psxgpu/resetgraph.s
index b956873..f469fbe 100644
--- a/libpsn00b/psxgpu/resetgraph.s
+++ b/libpsn00b/psxgpu/resetgraph.s
@@ -4,7 +4,7 @@
.section .text
-.set ISR_STACK_SIZE, 2048
+.set ISR_STACK_SIZE, 4096
.global ResetGraph # Resets the GPU and installs a
.type ResetGraph, @function # VSync event handler
@@ -13,11 +13,30 @@ ResetGraph:
sw $ra, 0($sp) # you call BIOS functions from asm)
sw $a0, 4($sp)
+ la $a0, resetgraph_msg
+ move $a1, $0
+ move $a2, $0
+ la $a1, _irq_func_table
+ la $a2, _custom_exit
+ jal printf
+ addiu $sp, -16
+ addiu $sp, 16
+
+ la $a0, sr_msg
+ mfc0 $a1, $12
+ jal printf
+ addiu $sp, -16
+ addiu $sp, 16
+
la $v0, _hooks_installed # Skip installing hooks if this function
lbu $v0, 0($v0) # has already been called before once
nop
bnez $v0, .Lskip_hook_init
nop
+
+ jal EnterCriticalSection # Disable interrupts as LoadExec() keeps
+ nop # interrupts enabled when transferring
+ # execution to the loaded program
lui $a3, 0x1f80 # Base address for I/O
@@ -38,31 +57,19 @@ ResetGraph:
la $a1, _vsync_irq_callback # Install VSync interrupt callback
jal InterruptCallback
li $a0, 0
-
- la $a0, _custom_exit # Set custom exit handler
- jal SetCustomExitFromException
- addiu $sp, -4
- addiu $sp, 4
-
- move $a0, $0
- jal ChangeClearPAD # Disable VSync IRQ auto ack
- addiu $sp, -4
- addiu $sp, 4
- li $a0, 3
- move $a1, $0
- jal ChangeClearRCnt # Remove RCnt timer IRQ auto ack
- addiu $sp, -8
- addiu $sp, 8
+ jal RestartCallback
+ nop
+ la $a0, cbhooks_msg
+ jal printf
+ addiu $sp, -16
+ addiu $sp, 16
+
jal _96_remove # Remove CD handling left by the BIOS
nop
- la $a0, resetgraph_msg
- move $a1, $0
- move $a2, $0
- la $a1, _irq_func_table
- la $a2, _custom_exit
+ la $a0, abouttoen_msg
jal printf
addiu $sp, -16
addiu $sp, 16
@@ -70,6 +77,11 @@ ResetGraph:
jal ExitCriticalSection # Re-enable interrupts
nop
+ la $a0, enableint_msg
+ jal printf
+ addiu $sp, -16
+ addiu $sp, 16
+
.Lskip_hook_init:
lui $a3, 0x1f80
@@ -301,62 +313,6 @@ _vsync_irq_callback:
nop
-# Global ISR handler of PSn00bSDK
-
-.set at
-
-.type _global_isr, @function
-_global_isr:
-
-.Lisr_loop:
-
- #la $gp, _gp # Keep restoring GP since it gets
- # changed elsewhere sometimes
-
- lui $a0, IOBASE # Get IRQ status
- lw $v0, IMASK($a0)
- nop
-
- srl $v0, $s1 # Check IRQ mask bit if set
- andi $v0, 0x1
-
- beqz $v0, .Lno_irq # Don't execute callback if IRQ not enabled
- nop
-
- lw $v0, ISTAT($a0)
- nop
- srl $v0, $s1 # Check IRQ status bit if set
- andi $v0, 0x1
- beqz $v0, .Lno_irq # Don't execute callback if no IRQ
- nop
-
- lw $v1, 0($s0) # Load IRQ callback function
- nop
-
- lw $v0, ISTAT($a0) # Acknowledge the IRQ (by writing a 0 bit)
- li $a1, 1
- sll $a1, $s1
- addiu $a2, $0 , -1
- xor $a1, $a2
- sw $a1, ISTAT($a0)
-
- beqz $v1, .Lno_irq # Don't execute if callback is not set
- nop
-
- jalr $v1 # Call interrupt handler
- nop
-
-.Lno_irq:
-
- addiu $s0, 4
-
- blt $s1, 11, .Lisr_loop
- addiu $s1, 1
-
- j ReturnFromException
- nop
-
-
.section .data
# VSync root counter
@@ -374,59 +330,34 @@ _vsync_lasthblank:
.comm _gpu_current_field, 4, 4
.comm _hooks_installed, 4, 4
-
-# Global ISR callback table
-
-.global _irq_func_table
-.type _irq_func_table, @object
-_irq_func_table:
- .word 0
- .word 0
- .word 0
- .word 0
- .word 0
- .word 0
- .word 0
- .word 0
- .word 0
- .word 0
- .word 0
- .word 0
-
-# Global ISR hook structure
-.global _custom_exit
-.type _custom_exit, @object
-_custom_exit:
- .word _global_isr # pc
- .word _custom_exit_stack+ISR_STACK_SIZE # sp
- .word 0 # fp
- .word _irq_func_table # s0
- .word 0 # s1
- .word 0 # s2
- .word 0 # s3
- .word 0 # s4
- .word 0 # s5
- .word 0 # s6
- .word 0 # s7
- .word _gp # gp
-
-# Global ISR stack
-# .fill 1024
-#_custom_exit_stack:
-# .fill 4
-.comm _custom_exit_stack, ISR_STACK_SIZE+4
.type vsynctimeout_msg, @object
vsynctimeout_msg:
.asciiz "VSync: timeout\n"
-
+
.type resetgraph_msg, @object
resetgraph_msg:
.asciiz "ResetGraph:itb=%08x,ehk=%08x\n"
+.type enableint_msg, @object
+enableint_msg:
+ .asciiz "ResetGraph:Interrupts enabled!\n"
+
+.type cbhooks_msg, @object
+cbhooks_msg:
+ .asciiz "ResetGraph:Interrupt hooks enabled.\n"
+
+.type abouttoen_msg, @object
+abouttoen_msg:
+ .asciiz "ResetGraph:About to init interrupts.\n"
+
+.type sr_msg, @object
+sr_msg:
+ .asciiz "ResetGraph:SR=%x\n"
+
.global psxgpu_credits
.type psxgpu_credits, @object
psxgpu_credits:
.ascii "psxgpu programs by Lameguy64\n"
- .asciiz "2019 PSn00bSDK Project / Meido-Tek Productions\n"
+ .asciiz "2020 PSn00bSDK Project / Meido-Tek Productions\n"
\ No newline at end of file
diff --git a/libpsn00b/psxgpu/restartcallback.s b/libpsn00b/psxgpu/restartcallback.s
deleted file mode 100644
index ffdeecd..0000000
--- a/libpsn00b/psxgpu/restartcallback.s
+++ /dev/null
@@ -1,50 +0,0 @@
-.set noreorder
-
-.include "hwregs_a.h"
-
-.section .text
-
-.global RestartCallback
-.type RestartCallback, @function
-RestartCallback:
-
- addiu $sp, -4
- sw $ra, 0($sp)
-
- la $a0, _custom_exit
- jal SetCustomExitFromException
- addiu $sp, -12
-
- jal ChangeClearPAD
- move $a0, $0
-
- li $a0, 3
- jal ChangeClearRCnt
- move $a1, $0
-
-
- la $a0, _irq_func_table
- move $a1, $0
- move $v0, $0
-
-.Lcheck_cbs:
- lw $v1, 0($a0)
- nop
- beqz $v1, .Lno_cb
- addiu $a0, 4
- li $v1, 1
- sll $v1, $a1
- or $v0, $v1
-.Lno_cb:
- blt $a1, 10, .Lcheck_cbs
- addiu $a1, 1
-
- lui $a0, IOBASE
- sw $0 , ISTAT($a0)
- sw $v0, IMASK($a0)
-
- addiu $sp, 12
- lw $ra, 0($sp)
- nop
- jr $ra
- nop \ No newline at end of file