spu: rework synchronization
[pcsx_rearmed.git] / libpcsxcore / ppf.c
index 268ed1c..0d80107 100644 (file)
@@ -190,6 +190,8 @@ void BuildPPFCache() {
 
        FreePPFCache();
 
+       if (CdromId[0] == '\0') return;
+
        // Generate filename in the format of SLUS_123.45
        buffer[0] = toupper(CdromId[0]);
        buffer[1] = toupper(CdromId[1]);
@@ -335,25 +337,37 @@ void BuildPPFCache() {
 unsigned char *sbi_sectors;
 
 int LoadSBI(const char *fname, int sector_count) {
-       char buffer[16], sbifile[MAXPATHLEN];
+       char buffer[16];
        FILE *sbihandle;
-       u8 sbitime[3];
+       u8 sbitime[3], t;
        int s;
 
        sbihandle = fopen(fname, "rb");
        if (sbihandle == NULL)
                return -1;
 
-if (sbi_sectors != NULL) printf("sbi_sectors?\n");
        sbi_sectors = calloc(1, sector_count / 8);
        if (sbi_sectors == NULL)
                return -1;
 
        // 4-byte SBI header
        fread(buffer, 1, 4, sbihandle);
-       while (!feof(sbihandle)) {
-               fread(sbitime, 1, 3, sbihandle);
-               fread(buffer, 1, 11, sbihandle);
+       while (1) {
+               s = fread(sbitime, 1, 3, sbihandle);
+               if (s != 3)
+                       break;
+               fread(&t, 1, 1, sbihandle);
+               switch (t) {
+               default:
+               case 1:
+                       s = 10;
+                       break;
+               case 2:
+               case 3:
+                       s = 3;
+                       break;
+               }
+               fseek(sbihandle, s, SEEK_CUR);
 
                s = MSF2SECT(btoi(sbitime[0]), btoi(sbitime[1]), btoi(sbitime[2]));
                if (s < sector_count)