try fixing gpgx cd audio

This commit is contained in:
CasualPokePlayer 2024-04-27 03:09:37 -07:00
parent fb3578cfb4
commit 095d160034
3 changed files with 21 additions and 13 deletions

Binary file not shown.

View File

@ -6,14 +6,14 @@
#define SECTOR_DATA_SIZE 2352
#define SECTOR_SUBCODE_SIZE 96
ECL_INVISIBLE toc_t hotswap_toc;
ECL_INVISIBLE toc_t pending_toc;
int8 cd_index = 0;
struct cdStream_t
{
int sector_size;
int num_sectors;
int64_t current_sector;
unsigned sector_size;
unsigned num_sectors;
unsigned current_sector;
int64_t current_offset;
int64_t end_offset;
};
@ -31,9 +31,10 @@ static void cdStreamInit(cdStream* stream, toc_t* toc, int is_subcode)
if (!is_subcode)
{
for (int i = 0; i < toc->last; i++)
for (unsigned i = 0; i < toc->last; i++)
{
toc->tracks[i].fd = stream;
toc->tracks[i].offset = toc->tracks[i].start * SECTOR_DATA_SIZE;
}
}
}
@ -51,30 +52,37 @@ cdStream* cdStreamOpen(const char* fname)
{
if (!strcmp(fname, "PRIMARY_CD"))
{
if (load_archive("PRIMARY_CD", (unsigned char*)&cdd.toc, sizeof(toc_t), NULL))
if (load_archive("PRIMARY_CD", (unsigned char*)&pending_toc, sizeof(toc_t), NULL))
{
cd_index = 0;
cdStreamInit(&cd_streams[0], &cdd.toc, 0);
cdStreamInit(&cd_streams[0], &pending_toc, 0);
return &cd_streams[0];
}
}
else if (!strcmp(fname, "HOTSWAP_CD"))
{
memcpy(&cdd.toc, &hotswap_toc, sizeof(toc_t));
cdStreamInit(&cd_streams[cd_index], &cdd.toc, 0);
cdStreamInit(&cd_streams[cd_index], &pending_toc, 0);
return &cd_streams[cd_index];
}
}
else if (!strcmp(fext, ".iso"))
{
// an .iso will attempt to be loaded for the "secondary" CD
if (load_archive("SECONDARY_CD", (unsigned char*)&cdd.toc, sizeof(toc_t), NULL))
if (load_archive("SECONDARY_CD", (unsigned char*)&pending_toc, sizeof(toc_t), NULL))
{
cd_index = 0;
cdStreamInit(&cd_streams[0], &cdd.toc, 0);
cdStreamInit(&cd_streams[0], &pending_toc, 0);
return &cd_streams[0];
}
}
else if (!strcmp(fext, ".cue"))
{
// .cue file will attempt to be loaded for parsing
// we use this to know when to load in the TOC
// (can't do it when PRIMARY_CD/HOTSWAP_CD/SECONDARY_CD is opened, due to GPGX assuming those are a single track)
memcpy(&cdd.toc, &pending_toc, sizeof(toc_t));
return NULL;
}
else if (!strcmp(fext, ".sub"))
{
// separate stream for subcode

View File

@ -188,7 +188,7 @@ GPGX_EX void gpgx_advance(void)
nsamples = audio_update(soundbuffer);
}
extern toc_t hotswap_toc;
extern toc_t pending_toc;
extern int8 cd_index;
GPGX_EX void gpgx_swap_disc(const toc_t* toc, int8 index)
@ -199,7 +199,7 @@ GPGX_EX void gpgx_swap_disc(const toc_t* toc, int8 index)
{
char header[0x210];
cd_index = index;
memcpy(&hotswap_toc, toc, sizeof(toc_t));
memcpy(&pending_toc, toc, sizeof(toc_t));
cdd_load("HOTSWAP_CD", header);
}
else