+ // BIOS - boot ID (CD type)
+ stat->Type = ti[1].type;
+ }
+
+ // relative -> absolute time
+ sect = cddaCurPos;
+ sec2msf(sect, (char *)stat->Time);
+
+ return 0;
+}
+
+// read CDDA sector into buffer
+long CALLBACK ISOreadCDDA(unsigned char m, unsigned char s, unsigned char f, unsigned char *buffer) {
+ unsigned char msf[3] = {m, s, f};
+ unsigned int file, track, track_start = 0;
+ int ret;
+
+ cddaCurPos = msf2sec((char *)msf);
+
+ // find current track index
+ for (track = numtracks; ; track--) {
+ track_start = msf2sec(ti[track].start);
+ if (track_start <= cddaCurPos)
+ break;
+ if (track == 1)
+ break;
+ }
+
+ // data tracks play silent
+ if (ti[track].type != CDDA) {
+ memset(buffer, 0, CD_FRAMESIZE_RAW);
+ return 0;
+ }
+
+ file = 1;
+ if (multifile) {
+ // find the file that contains this track
+ for (file = track; file > 1; file--)
+ if (ti[file].handle != NULL)
+ break;
+ }
+
+ ret = cdimg_read_func(ti[file].handle, ti[track].start_offset,
+ buffer, cddaCurPos - track_start);
+ if (ret != CD_FRAMESIZE_RAW) {
+ memset(buffer, 0, CD_FRAMESIZE_RAW);
+ return -1;