aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorspicyjpeg <thatspicyjpeg@gmail.com>2022-10-06 12:15:24 +0200
committerspicyjpeg <thatspicyjpeg@gmail.com>2022-10-06 12:15:24 +0200
commit6ee55c23b042a1559e8cabfccf3b9d3320c4c5cc (patch)
tree1bc6862819944ecbe8a19054ad18597c473b81b5
parentc4a2533d21dfd05cde841ea48c67b05e0e6a853f (diff)
downloadpsn00bsdk-6ee55c23b042a1559e8cabfccf3b9d3320c4c5cc.tar.gz
Replace psxgpu debug font, add CdGetSector2()
-rw-r--r--libpsn00b/include/psxcd.h1
-rw-r--r--libpsn00b/psxcd/cdgetsector.s56
-rw-r--r--libpsn00b/psxcd/getsector.c35
-rw-r--r--libpsn00b/psxcd/isofs.c8
-rw-r--r--libpsn00b/psxcd/psxcd_asm.s8
-rw-r--r--libpsn00b/psxgpu/dbugfont.pngbin0 -> 1090 bytes
-rw-r--r--libpsn00b/psxgpu/dbugfont.timbin2112 -> 2112 bytes
-rw-r--r--libpsn00b/psxgpu/font.c36
8 files changed, 60 insertions, 84 deletions
diff --git a/libpsn00b/include/psxcd.h b/libpsn00b/include/psxcd.h
index 03ee792..cf9ecad 100644
--- a/libpsn00b/include/psxcd.h
+++ b/libpsn00b/include/psxcd.h
@@ -145,6 +145,7 @@ uint32_t CdSyncCallback(CdlCB func);
long CdReadyCallback(CdlCB func);
int CdGetSector(void *madr, int size);
+int CdGetSector2(void *madr, int size);
CdlFILE* CdSearchFile(CdlFILE *loc, const char *filename);
diff --git a/libpsn00b/psxcd/cdgetsector.s b/libpsn00b/psxcd/cdgetsector.s
deleted file mode 100644
index 6a29069..0000000
--- a/libpsn00b/psxcd/cdgetsector.s
+++ /dev/null
@@ -1,56 +0,0 @@
-.set noreorder
-
-.include "hwregs_a.inc"
-
-.section .text
-
-.global CdGetSector
-.type CdGetSector, @function
-CdGetSector:
-
- lui $a2, IOBASE
-
-#.Lwait_fifo: # Probably redundant as the BIOS CD-ROM
-# lbu $v0, CD_REG0($a2) # routines do not not wait for this
-# nop
-# andi $v0, 0x40
-# beqz $v0, .Lwait_fifo
-# nop
-
- lui $v0, 0x1
-# srl $a1, 2 # (the official implementation expects $a1/size
- # to be in 32-bit words rather than bytes)
- or $v0, $a1
- sw $a0, DMA3_MADR($a2) # Set DMA base address and transfer length
- sw $v0, DMA3_BCR($a2)
-
- lui $v0, 0x1100 # Start DMA transfer
- sw $v0, DMA3_CHCR($a2)
- nop
- nop
-
-.Ldma_wait: # Ensure DMA transfer has completed
- lw $v0, DMA3_CHCR($a2)
- nop
- srl $v0, 24
- andi $v0, 0x1
-
- bnez $v0, .Ldma_wait
- nop
-
-# Not stable
-# sb $0 , CD_REG0($a2)
-#.Lflush_fifo: # Read out any remaining bytes in the buffer
-# lbu $v1, CD_REG0($a2)
-# li $v0, 0x40
-# and $v1, $v0
-# beqz $v1, .Lend_flush
-# nop
-# lbu $v0, CD_REG2($a2)
-# b .Lflush_fifo
-# nop
-#.Lend_flush:
-
- jr $ra
- li $v0, 1
-
diff --git a/libpsn00b/psxcd/getsector.c b/libpsn00b/psxcd/getsector.c
new file mode 100644
index 0000000..bc1c8ae
--- /dev/null
+++ b/libpsn00b/psxcd/getsector.c
@@ -0,0 +1,35 @@
+/*
+ * PSn00bSDK CD drive library (sector DMA API)
+ * (C) 2022 spicyjpeg - MPL licensed
+ */
+
+#include <stdint.h>
+#include <psxcd.h>
+#include <hwregs_c.h>
+
+/* DMA transfer functions */
+
+int CdGetSector(void *madr, int size) {
+ //while (!(CD_STAT & (1 << 6)))
+ //__asm__ volatile("");
+
+ DMA_MADR(3) = (uint32_t) madr;
+ DMA_BCR(3) = size | (1 << 16);
+ DMA_CHCR(3) = 0x11000000;
+
+ while (DMA_CHCR(3) & (1 << 24))
+ __asm__ volatile("");
+
+ return 1;
+}
+
+int CdGetSector2(void *madr, int size) {
+ //while (!(CD_STAT & (1 << 6)))
+ //__asm__ volatile("");
+
+ DMA_MADR(3) = (uint32_t) madr;
+ DMA_BCR(3) = size | (1 << 16);
+ DMA_CHCR(3) = 0x11400100; // Transfer 1 word every 16 CPU cycles
+
+ return 1;
+}
diff --git a/libpsn00b/psxcd/isofs.c b/libpsn00b/psxcd/isofs.c
index 582b8d9..d620377 100644
--- a/libpsn00b/psxcd/isofs.c
+++ b/libpsn00b/psxcd/isofs.c
@@ -434,8 +434,8 @@ static int find_dir_entry(const char *name, ISO_DIR_ENTRY *dirent)
static char* get_pathname(char *path, const char *filename)
{
- char *c = 0;
- for (char *i = filename; *i; i++) {
+ const char *c = 0;
+ for (const char *i = filename; *i; i++) {
if (IS_PATH_SEP(*i))
c = i;
}
@@ -453,8 +453,8 @@ static char* get_pathname(char *path, const char *filename)
static char* get_filename(char *name, const char *filename)
{
- char *c = 0;
- for (char *i = filename; *i; i++) {
+ const char *c = 0;
+ for (const char *i = filename; *i; i++) {
if (IS_PATH_SEP(*i))
c = i;
}
diff --git a/libpsn00b/psxcd/psxcd_asm.s b/libpsn00b/psxcd/psxcd_asm.s
index 906ab32..16e17d8 100644
--- a/libpsn00b/psxcd/psxcd_asm.s
+++ b/libpsn00b/psxcd/psxcd_asm.s
@@ -490,13 +490,7 @@ CdSyncCallback:
.section .data
-
-.global psxcd_credits
-.type psxcd_credits, @object
-psxgpu_credits:
- .ascii "psxcd library programs by Lameguy64\n"
- .asciiz "2020 PSn00bSDK Project / Meido-Tek Productions\n"
-
+
.comm _cd_last_cmd, 1, 1
.comm _cd_last_mode, 1, 1
.comm _cd_ack_wait, 1, 1
diff --git a/libpsn00b/psxgpu/dbugfont.png b/libpsn00b/psxgpu/dbugfont.png
new file mode 100644
index 0000000..ed84268
--- /dev/null
+++ b/libpsn00b/psxgpu/dbugfont.png
Binary files differ
diff --git a/libpsn00b/psxgpu/dbugfont.tim b/libpsn00b/psxgpu/dbugfont.tim
index 4e6cce2..1edd4af 100644
--- a/libpsn00b/psxgpu/dbugfont.tim
+++ b/libpsn00b/psxgpu/dbugfont.tim
Binary files differ
diff --git a/libpsn00b/psxgpu/font.c b/libpsn00b/psxgpu/font.c
index 2d4105f..b1c3c7a 100644
--- a/libpsn00b/psxgpu/font.c
+++ b/libpsn00b/psxgpu/font.c
@@ -27,16 +27,16 @@ void FntLoad(int x, int y) {
RECT pos;
TIM_IMAGE tim;
- GetTimInfo( (const uint32_t *) _gpu_debug_font, &tim );
+ GetTimInfo((const uint32_t *) _gpu_debug_font, &tim);
// Load font image
pos = *tim.prect;
pos.x = x;
pos.y = y;
- _font_tpage = getTPage( 0, 0, pos.x, pos.y );
+ _font_tpage = getTPage(0, 0, pos.x, pos.y);
- LoadImage( &pos, tim.paddr );
+ LoadImage(&pos, tim.paddr);
DrawSync(0);
// Load font clut
@@ -44,9 +44,9 @@ void FntLoad(int x, int y) {
pos.x = x;
pos.y = y+tim.prect->h;
- _font_clut = getClut( pos.x, pos.y );
+ _font_clut = getClut(pos.x, pos.y);
- LoadImage( &pos, tim.caddr );
+ LoadImage(&pos, tim.caddr);
DrawSync(0);
// Clear previously opened text streams
@@ -193,10 +193,11 @@ char *FntFlush(int id) {
if( i > 0 ) {
i--;
- setSprt8( sprt );
- setRGB0( sprt, 128, 128, 128 );
- setXY0( sprt, sx, sy );
- setUV0( sprt, (i%16)<<3, (i>>4)<<3 );
+ setSprt8(sprt);
+ setShadeTex(sprt, 1);
+ setSemiTrans(sprt, 1);
+ setXY0(sprt, sx, sy);
+ setUV0(sprt, (i % 16) * 8, (i / 16) * 8);
sprt->clut = _font_clut;
setaddr(opri, sprt);
opri = (char*)sprt;
@@ -237,12 +238,13 @@ char *FntSort(uint32_t *ot, char *pri, int x, int y, const char *text) {
if( i > 0 ) {
i--;
- setSprt8( sprt );
- setRGB0( sprt, 128, 128, 128 );
- setXY0( sprt, x, y );
- setUV0( sprt, (i%16)<<3, (i>>4)<<3 );
+ setSprt8(sprt);
+ setShadeTex(sprt, 1);
+ setSemiTrans(sprt, 1);
+ setXY0(sprt, x, y);
+ setUV0(sprt, (i % 16) * 8, (i / 16) * 8);
sprt->clut = _font_clut;
- addPrim( ot, sprt );
+ addPrim(ot, sprt);
sprt++;
}
@@ -256,9 +258,9 @@ char *FntSort(uint32_t *ot, char *pri, int x, int y, const char *text) {
tpage = (DR_TPAGE*)pri;
tpage->code[0] = _font_tpage;
- setlen( tpage, 1 );
- setcode( tpage, 0xe1 );
- addPrim( ot, pri );
+ setlen(tpage, 1);
+ setcode(tpage, 0xe1);
+ addPrim(ot, pri);
pri += sizeof(DR_TPAGE);
return pri;