ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/cdrom.cpp
(Generate patch)

Comparing BasiliskII/src/cdrom.cpp (file contents):
Revision 1.16 by cebix, 2002-01-15T14:58:32Z vs.
Revision 1.23 by asvitkine, 2008-06-28T18:36:18Z

# Line 1 | Line 1
1   /*
2   *  cdrom.cpp - CD-ROM driver
3   *
4 < *  Basilisk II (C) 1997-2002 Christian Bauer
4 > *  Basilisk II (C) 1997-2008 Christian Bauer
5   *
6   *  This program is free software; you can redistribute it and/or modify
7   *  it under the terms of the GNU General Public License as published by
# Line 180 | Line 180 | static void find_hfs_partition(cdrom_dri
180   {
181          info.start_byte = 0;
182          uint8 *map = new uint8[512];
183 +        D(bug("Looking for HFS partitions on CD-ROM...\n"));
184  
185          // Search first 64 blocks for HFS partition
186          for (int i=0; i<64; i++) {
187                  if (Sys_read(info.fh, map, i * 512, 512) != 512)
188                          break;
189 +                D(bug(" block %d, signature '%c%c' (%02x%02x)\n", i, map[0], map[1], map[0], map[1]));
190  
191                  // Not a partition map block? Then look at next block
192                  uint16 sig = (map[0] << 8) | map[1];
# Line 193 | Line 195 | static void find_hfs_partition(cdrom_dri
195  
196                  // Partition map block found, Apple HFS partition?
197                  if (strcmp((char *)(map + 48), "Apple_HFS") == 0) {
198 <                        info.start_byte = ntohl(((uint32 *)map)[2]) << 9;
199 <                        D(bug(" HFS partition found at %d, %d blocks\n", info.start_byte, ntohl(((uint32 *)map)[3])));
198 >                        info.start_byte = (loff_t)((map[8] << 24) | (map[9] << 16) | (map[10] << 8) | map[11]) << 9;
199 >                        uint32 num_blocks = (map[12] << 24) | (map[13] << 16) | (map[14] << 8) | map[15];
200 >                        D(bug(" HFS partition found at %d, %d blocks\n", info.start_byte, num_blocks));
201                          break;
202                  }
203          }
# Line 211 | Line 214 | static void read_toc(cdrom_drive_info &i
214          // Read TOC
215          memset(info.toc, 0, sizeof(info.toc));
216          SysCDReadTOC(info.fh, info.toc);
217 <        D(bug(" TOC: %08lx %08lx\n", ntohl(((uint32 *)info.toc)[0]), ntohl(((uint32 *)info.toc)[1])));
217 >
218 > #if DEBUG
219 >        // Dump TOC for debugging
220 >        D(bug(" TOC:\n  %02x%02x%02x%02x        : %d bytes, first track = %d, last track = %d\n", info.toc[0], info.toc[1], info.toc[2], info.toc[3], (info.toc[0] << 8) | info.toc[1], info.toc[2], info.toc[3]));
221 >        for (int i=4; i<804; i+=8) {
222 >                D(bug("  %02x%02x%02x%02x%02x%02x%02x%02x: ", info.toc[i+0], info.toc[i+1], info.toc[i+2], info.toc[i+3], info.toc[i+4], info.toc[i+5], info.toc[i+6], info.toc[i+7]));
223 >                const char *type = (info.toc[i+2] == 0xaa ? "lead-out" : (info.toc[i+1] & 0x04 ? "data" : "audio"));
224 >                D(bug("track %d (%s), addr/ctrl 0x%02x, M %d S %d F %d\n", info.toc[i+2], type, info.toc[i+1], info.toc[i+5], info.toc[i+6], info.toc[i+7]));
225 >                if (info.toc[i+2] == 0xaa)
226 >                        break;
227 >        }
228 > #endif
229  
230          // Find lead-out track
231          info.lead_out[0] = 0;
# Line 896 | Line 910 | int16 CDROMStatus(uint32 pb, uint32 dce)
910                          }
911                          return noErr;
912                  }
913 +
914 +                case 97: {      // WhoIsThere
915 +                        uint8 drives_present = 0;
916 +                        drive_vec::iterator info, end = drives.end();
917 +                        for (info = drives.begin(); info != end; ++info) {
918 +                                if (info->num <= 6)
919 +                                        drives_present |= (1 << info->num);
920 +                        }
921 +                        WriteMacInt8(pb + csParam + 1, drives_present);
922 +                        return noErr;
923 +                }
924          }
925  
926          // Drive valid?
# Line 947 | Line 972 | int16 CDROMStatus(uint32 pb, uint32 dce)
972  
973                  case 121:               // Get CD features
974                          WriteMacInt16(pb + csParam, 0x0200);    // 300 KB/s
975 <                        WriteMacInt16(pb + csParam, 0x0300);    // SCSI-2, stereo
975 >                        WriteMacInt16(pb + csParam + 2, 0x0c00);        // SCSI-2, stereo
976                          return noErr;
977  
978                  default:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines