aboutsummaryrefslogtreecommitdiff
path: root/libpsn00b/psxcd/psxcd.c
diff options
context:
space:
mode:
authorJohn "Lameguy" Wilbert Villamor <lameguy64@gmail.com>2022-10-19 17:57:06 +0800
committerGitHub <noreply@github.com>2022-10-19 17:57:06 +0800
commite08a3d9366f8ca14a76b3dd569dac1fb9f569748 (patch)
tree33654513b0b184c27f8035dbc405640fcbeb44ab /libpsn00b/psxcd/psxcd.c
parentc4a2533d21dfd05cde841ea48c67b05e0e6a853f (diff)
parent9b2ffc6078a850b7d354855cca7622090b41f30c (diff)
downloadpsn00bsdk-e08a3d9366f8ca14a76b3dd569dac1fb9f569748.tar.gz
Merge pull request #59 from spicyjpeg/psxmdec
IRQ handler fix, .STR playback example, multiple library builds (v0.21)
Diffstat (limited to 'libpsn00b/psxcd/psxcd.c')
-rw-r--r--libpsn00b/psxcd/psxcd.c72
1 files changed, 30 insertions, 42 deletions
diff --git a/libpsn00b/psxcd/psxcd.c b/libpsn00b/psxcd/psxcd.c
index 6340638..b914b5e 100644
--- a/libpsn00b/psxcd/psxcd.c
+++ b/libpsn00b/psxcd/psxcd.c
@@ -1,6 +1,7 @@
#include <stdint.h>
-#include <stdio.h>
#include <psxgpu.h>
+#include <psxetc.h>
+#include <psxapi.h>
#include "psxcd.h"
#define READ_TIMEOUT 600 // 10 seconds for NTSC
@@ -25,8 +26,7 @@ void _cd_control(unsigned char com, const void *param, int plen);
void _cd_wait_ack(void);
void _cd_wait(void);
-int CdInit(void)
-{
+int CdInit(void) {
// Sets up CD-ROM hardware and low-level subsystem
_cd_init();
@@ -37,14 +37,11 @@ int CdInit(void)
CdControl(CdlNop, 0, 0);
CdControl(CdlInit, 0, 0);
- if( CdSync(0, 0) != CdlDiskError )
- {
+ if(CdSync(0, 0) != CdlDiskError) {
CdControl(CdlDemute, 0, 0);
- printf("psxcd: Init Ok!\n");
- }
- else
- {
- printf("psxcd: Error initializing. Bad disc/drive or no disc inserted.\n");
+ _sdk_log("psxcd: setup done\n");
+ } else {
+ _sdk_log("psxcd: setup error, bad disc/drive or no disc inserted\n");
}
return 1;
@@ -86,7 +83,7 @@ int CdControlB(unsigned char com, const void *param, unsigned char *result)
int CdControlF(unsigned char com, const void *param)
{
int param_len=0;
-
+
// Command specific parameters
switch(com)
{
@@ -104,31 +101,26 @@ int CdControlF(unsigned char com, const void *param)
param_len = 2;
break;
case CdlSetmode:
- param_len = 1;
- break;
case CdlSetsession:
- param_len = 1;
- break;
case CdlTest:
- param_len = 1;
- break;
case CdlGetTD:
param_len = 1;
+ break;
+ case CdlReadN:
+ case CdlReadS:
+ case CdlSeekL:
+ case CdlSeekP:
+ if( param )
+ {
+ _cd_control(CdlSetloc, param, 3);
+ _cd_last_setloc = *((CdlLOC*)param);
+ }
+ break;
}
-
- // Issue Setloc if parameters are specified on CdlReadN and CdlReadS
- if( ( com == CdlReadN ) || ( com == CdlReadS ) )
- {
- if( param )
- {
- _cd_control(CdlSetloc, param, 3);
- _cd_last_setloc = *((CdlLOC*)param);
- }
- }
-
+
// Issue CD command
_cd_control(com, param, param_len);
-
+
return 1;
}
@@ -288,24 +280,18 @@ int CdRead(int sectors, uint32_t *buf, int mode)
_cd_read_addr = buf;
// Determine sector based on mode flags
- if( mode & CdlModeSize0 )
- {
- _cd_read_sector_sz = 2328 / 4;
- }
- else if( mode & CdlModeSize1 )
- {
+ if( mode & CdlModeSize )
_cd_read_sector_sz = 2340 / 4;
- }
else
- {
_cd_read_sector_sz = 2048 / 4;
- }
_cd_read_counter = VSync(-1);
// Set read callback
+ EnterCriticalSection();
_cd_read_oldcb = CdReadyCallback(_CdReadReadyCallback);
-
+ ExitCriticalSection();
+
// Set specified mode
CdControl(CdlSetmode, (uint8_t*)&mode, 0);
@@ -319,7 +305,7 @@ static void CdDoRetry()
{
int cb;
- printf( "CdRead: Retrying...\n" );
+ _sdk_log("psxcd: retrying read...\n");
// Stop reading
CdControl(CdlPause, 0, 0);
@@ -331,9 +317,11 @@ static void CdDoRetry()
// Reset timeout
_cd_read_counter = VSync(-1);
-
+
+ EnterCriticalSection();
CdReadyCallback(_CdReadReadyCallback);
-
+ ExitCriticalSection();
+
// Retry read
CdControl(CdlSetloc, (void*)&_cd_last_setloc, 0);
CdControl(CdlReadN, 0, (uint8_t*)_cd_read_result);