| 
    
        |  | This Technical Note discusses the public interface to the Apple
CD-ROM driver. This information supersedes the "Macintosh CD-ROM
Device Driver" chapter of the AppleCD SC Developer's Guide. If you're writing 
special purpose application software that needs to access the audio or data portions 
of a CD-ROM directly, this Note will be of interest to you. [Apr 06 1999] |  
 
 
 
 
 
 Topics
   Status & Control calls for the Apple CD-ROM Driver.Differences between the various Apple CD-ROM drives. 
 This Technote describes version 4.0.X through version 5.2.X of the
Apple CD-ROM driver. Previous versions of the Apple CD-ROM driver are
documented in the AppleCD SC Developer's Guide. Version 5.2.X History: Version 5.2 adds support for ATAPI
CD-ROM drives. Version 5.1.X History: Version 5.1 adds support for the
AppleCD 600, support for multi-session CDs, support for an
independent icon for CD-Extra, support for asynchronous calls, and
support for playing audio track lists with 5 new calls:
SetTrackList,GetTrackList,GetTrackIndex,SetPlayMode, andGetPlayMode. Version 5.0.X History: Version 5.0 adds support for the
AppleCD 300 Plus and three new calls: DriverGestalt,ReturnDeviceIdent, andGetCDFeatures.
Version 5.0 is also the first version to support asynchronous I/O
using SCSI Manager 4.3. TheReadMCNandReadISRCcalls 
did not return the correct information in version 4.0.X when using an AppleCD 300. 
Those two calls now work in version 5.0, but the format of the returned parameters 
has changed for all drives. Version 5.0.1 fixes the following problems: an empty
tray can be ejected using theEjectcontrol call; when third-party SCSI 
accelerator cards are installed, the driver now sees the CD-ROM drives, and theWhoIsTherecall works correctly; andDriverGestaltwill 
no longer modifycsParam[0]. Version 4.0.X History: Version 4.0 of the Apple CD-ROM
extension was the first version to support dual-speed operation and
multiple-session Photo CDs on the AppleCD 300. Version 4.0 also
supports single-session Photo CDs on all other Apple CD-ROM drives.
Version 4.0 had problems with certain CD-ROMs that used encryption
technology to restrict access to files. When the customer was given a
decryption key to gain access to a file, the file would not always
appear in the Finder. Version 4.0.1 was produced to fix this problem.
However, this version was tested only on the Macintosh IIvx and
Performa 600. Version 4.0.2 was tested on all Macintosh computers,
and a few changes were made to ensure compatibility across the
Macintosh product line. Version 4.0.2 corrected problems when sending
audio commands using block addressing only. Audio calls using
minute-second-frame addressing continued to work correctly. Audio compact discs and CD-ROM discs conform to two standards,
called the Red Book and the Yellow Book. The Red book specifies audio
standards; the Yellow book specifies additional standards for CD-ROM.
"Red Book" is the common name of the "Compact Disc Digital Audio
Standard" standard, CEI IEC 908. When a disc conforms to the Red Book
standard, it will usually have "digital audio" printed below the
"disc" logo. Most music CDs conform to this standard. "Yellow Book"
is the standard for CD-ROM, ISO 10149. When a disc conforms to the
Yellow Book, the words "data storage" usually are printed beneath the
"disc" logo. There are several other standards usually associated with CD-ROM
technology: the "Green Book" standard defines CD-I (Compact Disc
Interactive); "Orange Book" defines write-once compact discs; and
"Blue Book" defines CD-Extra (Compact Disc Digital Audio plus
Data). You can get the Red Book and Yellow Book from: ANSIAttn: Sales
 1430 Broadway
 New York, NY 10018
 (212) 642-4900
 
 Red Book: CEI IEC 908
 Yellow Book: ISO 10149:1989
 You can get the Green Book from: American CD-I Association11111 Santa Monica, Suite 750
 Los Angeles, CA 90025
 (310) 444-6619
 The other standards are available only to Sony/Philips licensees.
Contact Sony or Philips for licensing details. Beginning with version 4.0 of the Apple CD-ROM software, several
new Gestaltselectors are installed by Foreign File
Access and various file system translators. Each selector is a
version number, as defined in Inside Macintosh volume VI, page
VI-3-34. The list includes: 
   
      | Apple Photo Access | 'kpcd'
 |  
      | Foreign File Access | 'ufox'
 |  
      | High Sierra File Access | 'hscd'
 |  
      | ISO 9660 File Access, version 1.0 through 4.0 | 'hscd'
 |  
      | ISO 9660 File Access, version 5.0 | 'iscd'
 |  
      | Audio CD Access | 'aucd'
 |  
 To call the Macintosh driver, you need to understand the possible
addressing formats for audio blocks on a CD. The three addressing
formats are: 
   logical blockabsolute minute, second, and frametrack number An audio CD contains up to 74 minutes of sound. (By decreasing the
inter-track gap and other tricks, you can put more than 74 minutes of
sound on a CD. Doing this is only marginally within the standard.
Such CDs may not be playable on all drives.) These minutes are
divided into 60 seconds. Each second contains 75 frames. There is a
two-second lead-in area at the beginning of the disc that contains
table of contents information about the tracks on that CD. You can
have a maximum of 99 tracks on a CD. You can address sound down to the frame level, that is, down to
the 1/75th of a second. You can address sound by specifying an
absolute block number (e.g., start playing at absolute block
1,234,567 from the start of the disc), or by absolute minute, second,
and frame number (e.g., start playing at minute 42, second 30, frame
15 on the disc), or by logical track number (e.g., start playing at
track 2). The driver requires that the logical track number or absolute
minute-second-frame numbers be specified in BCD (e.g., the decimal
number 12 is stored as hex 0x0012, not as0x000C). Optical Positioning Type Many calls require an optical pick-up positioning type. This is
used to specify what kind of address is being used in other
parameters of a given call. There are four different optical pick-up
positioning types: 
   
      | Type | Description |  
      | 0x0000
 | 32-bit Logical Block Address |  
      | 0x0001
 | An AMIN-ASEC-AFRAME descriptor that gives the running
         time from the beginning of the disc (in BCD) |  
      | 0x0002
 | A track number (in BCD) |  
      | 0x0003
 | An index into the driver's track play list |  
 Track Control Field Many calls return a control field. This field describes the format
of the current track, and has the following values: 
   
      | Bits3210
 | Function |  
      | 00x0 | 2 audio channels without pre-emphasis |  
      | 00x1 | 2 audio channels with pre-emphasis |  
      | 10x0 | 4 audio channels without pre-emphasis |  
      | 10x1 | 4 audio channels with pre-emphasis |  
      | 01x0 | data track |  
      | 01x1 | reserved |  
      | 11xx | reserved |  
      | xx0x | digital copy prohibited |  
      | xx1x | digital copy permitted |  
 Audio Play Mode Many calls require a play mode. This field describes how to play
the audio track, and this field has the following values: 
   
      | Bits 3210 | Effect |  
      | 0000 | Muting on (no audio) |  
      | 0001 | Right channel through right channel only |  
      | 0010 | Left channel through right channel only |  
      | 0011 | Left and right channel through right channel only * |  
      | 0100 | Right channel through left channel only |  
      | 0101 | Right channel through left and right channel |  
      | 0110 | Right channel through left channel, left channel through
         right channel |  
      | 0111 | Right channel through left channel, left and right
         channel through right channel * |  
      | 1000 | Left channel through left channel only |  
      | 1001 | Left channel through left channel, right channel through
         right channel (stereo) |  
      | 1010 | Left channel through left and right channel |  
      | 1011 | Left channel through left channel, left and right channel
         through right channel * |  
      | 1100 | Left and right channel through left channel * |  
      | 1101 | Left and right channel through left channel, right
         channel through right channel * |  
      | 1110 | Left and right channel through left channel, left channel
         through right channel * |  
      | 1111 | Left and right channel through left channel, left and
         right channel through right channel (monaural) * |  
 *Not available on AppleCD 300 Plus In the absolute minute-second-frame address, the ranges are as
follows: 
   
      | Minutes | 00 to 99 (effectively, from 00 to 75) |  
      | Seconds | 00 to 59 |  
      | Frames | 00 to 74 |  
 Making a High-Level Driver Call The Apple CD-ROM driver does not conform to the normal design of a
driver. In particular, the Apple CD-ROM driver returns some
additional status information in some of its control calls, and
expects to receive some additional control information in some of its
status calls. The high-level control and status calls weren't
designed with this in mind. The glue for control does not fill in the
csParamPtrfield with the results of any changes due to
a control call, and the glue for status does not use thecsParamfield passed in as part of the call it creates
on the stack. Do not use high-level control and status calls to
access the Apple CD-ROM driver; use only thePBControlandPBStatuscalls. Making a Low-Level Driver Call The low-level calls require that you pass in two parameters: a
pointer to a parameter block, and a flag indicating synchronous or
asynchronous completion. You must fill in the parameter block
yourself, and may find it easier to define your own custom parameter
block variants for the various calls. Here's some example MPW C code
to get audio status: 
   
      | #include <Devices.h>
short gDrvRefNum;         // set up somewhere else
// this is a custom version of the CntrlParam parameter
// block defined on page II-181 and II-183 or in
// Devices.h
#if PRAGMA_STRUCT_ALIGN
    #pragma options align=mac68k
#endif
typedef struct {
    QElemPtr qLink;
    int qType;
    int ioTrap;
    Ptr ioCmdAddr;
    ProcPtr ioCompletion;
    OsErr ioResult;
    StringPtr ioNamePtr;
    int ioVRefNum;
    int ioRefNum;
    int csCode;
    // Everything below this replaces: short csParam[11]
    unsigned char status;
    unsigned char play;
    unsigned char control;
    unsigned char minute;
    unsigned char second;
    unsigned char frame;
    char unused[16]; // for the rest
} CDCntrlParam;
#if PRAGMA_STRUCT_ALIGN
    #pragma options align=reset
#endif
// GetAudioStuff
//     requires one input, the driver reference number that we
//     got by calling PBOpen().
//     fills in six parameters with appropriate information
//     from the driver call.
//     We're assuming that only one CD player is attached.
//     To generalize this code, fill in the ioVRefNum dynamically.
OSErr GetAudioStuff(status, play, control, minute, second, frame)
unsigned char *status, *play, *control, *minute, *second, *frame;
{
    OSErr result;
    CDCntrlParam myPB;
    myPB.ioCompletion = 0;
    myPB.ioVRefNum = 1; // assuming only 1 volume
    myPB.ioRefNum = gDrvRefNum; // determined elsewhere
    myPB.csCode = 107;
    result = PBControl(&myPB, false);
    if (result == noErr)
    {
    *status = myPB.status;
    *play = myPB.play;
    *control = myPB.control;
    *minute = myPB.minute;
    *second = myPB.second;
    *frame = myPB.frame;
    }
    return(result);
}
 |  
 Back to top Driver SummaryName .AppleCD Conventions 
   Each call description will follow this format:    
   
      
      A detailed description of the device driver
      function is given here. Relevant csCodeandcsParam[]requirements 
      are listed here. Any returned data is listed here. A list of possible status return codes this
      function can return are listed here. 
   Reserved fields are assumed to be filled with zeros, to ensure
   compatibility with future releases of the driver.Several status return codes are generic to any driver call and
   will not be repeated within each call description. Suggested
   possible meanings for these error codes are given in Inside
   Macintosh. The generic status return codes are: controlErrbadUnitErr
 notOpenErr
 ioErr
 wPrErr
 paramErr
 offLinErr
 
 
   All control calls not listed below will return
   controlErr. Supported Control Calls 
   
      | csCode | Function | Name Description |  
 Standard Driver Calls 
   
      | 1 |   | KillIO
 | Interrupt all asynchronous driver operations. |  
      | 5 |   | VerifyTheDisc
 | Verify the data on the disc. |  
      | 6 |   | FormatTheDisc
 | Format the disc. |  
      | 7 |   | EjectTheDisc
 | Eject disc from drive. |  
      | 21 |   | GetDriveIcon
 | Return ICN#information for the drive hardware. |  
      | 22 |   | GetMediaIcon
 | Return ICN#information for the drive
         media. |  
      | 23 |   | DriveInfo
 | Return drive characteristics information. |  
      | 65 |   | accRun
 | Driver-specific needTimecode. |  Special CD-ROM Control Calls
 
 
   
      | 70
 |   | SetPowerMode
 | Allow users to set the power mode of a CD-ROM drive. |  
      | 76 |   | ModifyPostEvent
 | Enable/disable PostEvent()sfor non-HFS
         discs. |  
      | 79 |   | SetBlockSize
 | Modify block size of device. |  
      | 80 |   | SetUserEject
 | Enable/disable the button on the front of the CD-ROM
         device. |  
      | 81 |   | SetPollFreq
 | Modify period of the VBL/dNeedTimetask
         execution. |  
      | 1079
 |   | Quiescence
 | Enable/Disable the CD driver Quiescence mode. |  Audio track Control Calls
 
 
   
      | 100 |   | ReadTOC
 | Return a disc's Table of Contents (TOC) information. |  
      | 101 |   | ReadTheQSubcode
 | Return Q-Subcode information. |  
      | 102 |   | ReadHeader
 | Return 4-byte header information for a specified
         block. |  
      | 103 |   | AudioTrackSearch
 | Search disc for a specified track. |  
      | 104 |   | AudioPlay
 | Cause drive to play a given range of audio. |  
      | 105 |   | AudioPause
 | Cause drive to enter/exit the Hold Track State. |  
      | 106 |   | AudioStop
 | Specify an address to cause the CD-ROM to stop. |  
      | 107 |   | AudioStatus
 | Request the play status information from a drive. |  
      | 108 |   | AudioScan
 | Cause drive to fast-forward/reverse. |  
      | 109 |   | AudioControl
 | Set volume level for drive (not available on AppleCD
         SC). |  
      | 110 |   | ReadMCN
 | Return Media Catalog Number (not available on AppleCD
         SC). |  
      | 111 |   | ReadISRC
 | Return International Standard Recording Code (not
         available on AppleCD SC). |  
      | 112 |   | ReadAudioVolume
 | Return Audio Volume Control Data (not available on
         AppleCD SC). |  
      | 113 |   | GetSpindleSpeed
 | Return the current spindle speed. |  
      | 114 |   | SetSpindleSpeed
 | Set the spindle speed. |  
      | 115 |   | ReadAudio
 | Return digital audio data (not supported by AppleCD SC,
         SC Plus/AppleCD 150). |  
      | 116 |   | ReadAllSubcodes
 | Return subcodes while playing audio (not supported by
         AppleCD SC, AppleCD SC Plus/AppleCD 150). |  Audio track list Control Calls
 
 
   
      | 122 |   | SetTrackList
 | Set the audio tracks playlist. |  
      | 123 |   | GetTrackList
 | Get the current audio tracks playlist. |  
      | 124 |   | GetTrackIndex
 | Get the current audio tracks playlist index. |  
      | 125 |   | SetPlayMode
 | Set the audio tracks play mode (including repeat). |  
      | 126 |   | GetPlayMode
 | Get the current audio tracks play mode (including
         repeat). |  Special System Control Calls
 
   
      | -1 |   | GoodBye
 | Executes necessary cleanup before shutdown. |  Supported Status Calls
 
 
   
      | csCode
 |   | Function Name | Description |  
   
      | 8 |   | DriveStatus
 | Provides drive/disc information about a specified device
         ID. |  
      | 43 |   | DriverGestalt
 | Returns various driver information. |  
      | 70 |   | GetPowerMode
 | Returns the current power mode of a CD drive at a given
         device ID. |  
      | 95 |   | Get2KOffset
 | Returns last Primecall's offset from start
         of 2K physical block. |  
      | 96 |   | GetDriveType
 | Returns the type of CD drive at a given device ID. |  
      | 98 |   | GetBlockSize
 | Returns the block size of the disc at a given device
         ID. |  
      | 120 |   | ReturnDeviceIdent
 | Returns the DeviceIdentof the CD-ROM
         drive. |  
      | 121 |   | GetCDFeatures
 | Returns various CD-ROM drive features (spindle speed,
         drawer or tray type, etc.). |  
 Back to top 
 Control Call Descriptions
 KillIO
 
 The purpose of this call is to allow the interruption of all
asynchronous device driver operations. This call is not supported and
returns noErrif called. Input Parameters: 
   Status Return Codes:
      |   | csCode
 | 1 |  
      |   | csParam[0-10]
 | Reserved. |  
   
      |   | noErr
 | This is the only expected status return code. |  
 
 VerifyTheDisc
 
 The purpose of this call is to ensure the validity of the data on the
disc. Since CD-ROMs cannot be changed (they are read-only, as the
name implies), when this control call is made, the CD-ROM driver will
return noErr(as long as a disc is mounted). If no disc
is mounted, the CD-ROM driver will returnoffLinErr. Input Parameters: 
   Status Return Codes:
      |   | csCode
 | 5 |  
      |   | csParam[0-10]
 | Reserved. |  
   
      |   | noErr
 | The entire disc was successfully verified with no errors
         detected. |  
      |   | offLinErr
 | No disc inserted at the specified device ID. |  
 
 FormatTheDisc
 
 The purpose of this call is to format and initialize the CD-ROM disc
for use in the Macintosh. However, a CD-ROM cannot be modified after
it has been pressed, so this command always returns a
writErrstatus code. Input Parameters: 
   Status Return Codes:
      |   | csCode
 | 6 |  
      |   | csParam[0-10]
 | Reserved. |  
   
      |   | writErr
 | This control call is not valid for this device. |  
 
 EjectTheDisc
 
 The purpose of this call is to cause a disc eject at a specified
device ID. First, a Prevent/Allow Medium Removalcommand
is issued to reactivate the external Eject button on the front panel
of the CD-ROM drive. Then, the specified device is sent an "eject"
command to eject the disc. Next, thedNeedTimeflag in
the specified device ID's DCE is set so that new disc insertions will
be periodically checked for (see theaccRuncontrol call
for more details). Finally, the drive queue entry associated with
this drive is marked as being Off-Line and Ejected. Input Parameters: 
   Status Return Codes:
      |   | csCode
 | 7 |  
      |  | csParam[0-10]
 | Reserved. |  
   
      |   | noErr
 | The entire disc was successfully ejected. |  
      |   | offLinErr
 | No disc inserted at the specified device ID. |  
 
 GetDriveIcon
 
 The purpose of this call is to return ICN#-style icon
data and name string that is typically displayed by the Startup Disk
Control Panel module. The drive icon is the same as the media icon in
this driver. There is no true drive icon because there is no way of
determining if an internal or external drive should represented.
Starting on version 5.1, the driver returns a special icon when a
CD-Extra is present in the drive, and a generic icon when any other
type of CD is present. See Figure 1 for a picture of the icons
returned. Input Parameters: 
   
      |   | csCode
 | 21 |  
      |   | csParam[0-10]
 | Reserved. |  
 Output Produced: 
   
      |   | csParam[0-1]
 | Address of ICN#and name string. |  
 Status Return Codes: 
   
      |   | noErr
 | This is the only possible status return code. |  
 
   
      | 
 |   | 
 |  
      |   |   |   |  
      | Generic CD icon |   | CD-Extra icon |  Figure 1: Icons returned by
 GetDriveIconcontrol call
 GetMediaIcon
 
 The purpose of this call is to return ICN#-style icon
data and name string that is displayed whenever the disc media is
shown. This icon can be seen on the desktop or when the "Get Info"
(Cmd-I) command from the Finder is executed under System 7. See
Figure 2 for a picture of the icons returned. Input Parameters: 
   
      |   | csCode
 | 22 |  
      |   | csParam[0-10]
 | Reserved. |  
 Output Produced: 
   
      |   | csParam[0-1]
 | Address of ICN#and name string. |  
 Status Return Codes: 
   
      |   | noErr
 | This is the only possible status return code. |  
 
   
      | 
 |   | 
 |  
      |   |   |   |  
      | Generic CD icon |   | CD-Extra icon |  
 Figure 2 : Icons returned by GetDriveIconcontrol call 
 DriveInfo
 
 The purpose of this call is to return information describing drive
characteristics for the specified device ID. The values to be
returned are defined in Inside Macintosh, volume V, pages
470-471. The 32-bit value returned by the Apple CD-ROM driver is
$00000B01. Bits 7-0 equal to0x01means
that this is an "unspecified" drive. Bit 8 equal to 1 means that this
is an "external" drive (this will be set even if the drive is
actually mounted internally). Bit 9 equal to 1 means that this is a
SCSI drive (this will be set even if the drive is actually an ATAPI
drive). Bit 10 equal to 0 means that this is a removable media drive.
Bit 11 equal to 1 means that this is a "secondary" drive. All other
bits are reserved. Input Parameters: 
   
      |   | csCode
 | 23 |  
      |   | csParam[0-10]
 | Reserved. |  
 Output Produced: 
   
      |   | csParam[0-1]
 | Drive information ($00000B01). |  
 Status Return Codes: 
   
      |   | noErr
 | This is the only possible status return code. |  
 
 accRun
 
 The purpose of this call is to perform operations required by the
driver on an "as-needed" basis. There is no need for an application to issue this call. Almost all
Macintosh programs make a call to the MacOS routine SystemTask(), 
and one of the functions of that routine is occasionally to make some CPU time 
available to all devices that request it by executing itsaccRuncall. 
(See Inside Macintosh, Volume II, pg. 189 for a further discussion ofaccRun). This is done by setting thedNeedTimeflag in the Device Control Entry (DCE) for a given device. Since the CD-ROM device is a removable media device and does not
generate interrupts when a disc is inserted, the only way to detect
disc insertion is by occasionally polling all devices known by the
driver to be "empty" (disc is not inserted or is still off-line). So,
the main function of the accRuncontrol call is testing
for disc insertions. In addition, during the Macintosh boot process, if the driver is
installed before the System file is read in, the driver cannot
install its custom CD-ROM Disk Switch subroutine. When the System
file is read in and installed, it will overwrite the low-memory
global that defines the address of the standard Disk Switch routine.
So, the installation of our custom Disk Switch routine is held off
until the first invocation of SystemTask(). At that
time, the System file has already been loaded and the standard Disk
Switch routine has been initialized. TheaccRuncontrol
call also handles track play lists. Input Parameters: 
   
      |   | csCode
 | 65 |  
      |   | csParam[0-10]
 | Reserved. |  
 Status Return Codes: 
   
      |   | noErr
 | This is the only possible status return code. |  
 
 SetPowerMode
 
 The purpose of this call is to select the power mode of a CD-ROM
drive. The currently available power modes are: 
      pmActivepmStandbypmIdlepmSleep
 Input Parameters: 
   
      |   | csCode
 | 70 |  
      |   | csParam[0]:15-8
 | New power mode to be set: |  
      |   |   | 0 -- Active, normal operation. |  
      |   |   | 1 -- Standby, minimal energy-saving state. |  
      |   |   | 2 -- Idle, substantial energy-saving state. |  
      |   |   | 3 -- Sleep, maximum energy-saving state. |  
      |   | csParam[0]:7-0
 | Reserved. |  
      |   | csParam[1-10]
 | Reserved. |  
 Status Return Codes: 
   
      |   | noErr
 | Drive set to the new power mode. |  
      |   | paramErr
 | Invalid power mode sent to the driver. |  
 
 ModifyPostEvent
 
 The purpose of this call is to allow an application to modify the
driver's behavior when non-HFS discs are inserted into the CD-ROM
drive. The default action of the driver is to post a disc-inserted
event for all discs that are inserted into the CD-ROM drive,
regardless of whether or not the disc actually contains valid
partition information and HFS file system. There may be some reason
why the driver should not post the disc-inserted event and this call
allows that "feature" to be turned off. When this feature is turned
off for a specified device ID, it will stay off until it is
reactivated via another call to ModifyPostEvent, or
until the machine is restarted. Input Parameters: 
   
      |   | csCode
 | 76 |   |  
      |   | csParam[0]
 | 0 | -- Do not issue disc-insert events for non-HFS CD-ROM
         discs |  
      |   |   | ¬0 | -- Issue disc-insert events for non-HFS CD-ROM discs |  
      |   | csParam[1-10]
 | Reserved |   |  
 Status Return Codes: 
   
      |   | noErr
 | This is the only possible status return code. |  
 
 ChangeBlockSize
 
 The purpose of this call is to allow an application to modify the
"block size" the drive is currently using to read data. The standard
HFS file system block size is 512 bytes/block. Applications and file
system translators dealing with non-HFS file systems may require
other block sizes to read their data correctly. The supported block sizes are 512, 2048, 2056, 2336, 2340, 2352,
2646, and 2647 bytes. The AppleCD SC cannot handle block sizes of
2056, 2352, 2646, and 2647 bytes. The AppleCD SC Plus cannot handle
block sizes of 2352, 2646, and 2647 bytes. The following tables show the type of data that is returned for
each of the valid block sizes: CD-ROM Mode 1 Data Format: 
   
      | Block Size(bytes)
 | Block Contents(size in bytes)
 |  
      | 512 | User data (512) |  
      | 2048 | User data (2048) |  
      | 2336 | User data (2048) + EDC (4) + Zero (8) + ECC (276) |  
      | 2340 | Header (4) + User data (2048) + EDC (4) + Zero (8) + ECC
         (276) |  
      | 2352 | Sync (12) + Header (4) + User data (2048) + EDC (4) +
         Zero (8) + ECC (276) |  
 CD-ROM Mode 2 Data Format:  
   
      | Block Size(bytes)
 | Block Contents(size in bytes)
 |  
      | 2336 | Mode 2 User data (2336) |  
      | 2340 | Header (4) + Mode 2 User data (2336) |  
      | 2352 | Sync (12) + Header (4) + Mode 2 User data (2336) |  
 CD-ROM Mode 2 Form 1 Data Format (CD-XA or CD-I): 
   
      | Block Size(bytes)
 | Block Contents(size in bytes)
 |  
      | 512 | User data (512) |  
      | 2048 | User data (2048) |  
      | 2056 | Subheader (8) + User data (2048) |  
      | 2336 | Subheader (8) + User data (2048) + EDC (4) + ECC
         (276) |  
      | 2340 | Header (4) + Subheader (8) + User data (2048) + EDC (4) +
         ECC (276) |  
      | 2352 | Sync (12) + Header (4) + Subheader (8) + User data (2048)
         + EDC (4) + ECC (276) |  
      | 2646 | Sync (12) + Header (4) + Subheader (8) + User data (2048)
         + EDC (4) + ECC (276) + Byte Error Flags (294) |  
      | 2647 | Sync (12) + Header (4) + Subheader (8) + User data (2048)
         + EDC (4) + ECC (276) + Block Error Flag (1) + Byte Error
         Flags (294) |  
 CD-ROM Mode 2 Form 2 Data Format (CD-XA or CD-I): 
   
      | Block Size(bytes)
 | Block Contents(size in bytes)
 |  
      | 2336 | Subheader (8) + User data (2324) + Reserved or EDC
         (4) |  
      | 2340 | Header (4) + Subheader (8) + User data (2324) + Reserved
         or EDC (4) |  
      | 2352 | Sync (12) + Header (4) + Subheader (8) + User data (2324)
         + Reserved or EDC (4) |  
      | 2646 | Sync (12) + Header (4) + Subheader (8) + User data (2324)
         + Reserved or EDC (4) + Byte Error Flags (294) |  
      | 2647 | Sync (12) + Header (4) + Subheader (8) + User data (2324)
         + Reserved or EDC (4) + Block Error Flag (1) + Byte Error
         Flags (294) |  
 Input Parameters: 
   
      |   | csCode
 | 79 |  
      |   | csParam[0]
 | Block size the drive should use from now on. |  
      |   | csParam[1-10]
 | Reserved. |  
 Status Return Codes: 
   
      |   | noErr
 | The block size change completed successfully. |  
      |   | paramErr
 | An invalid block size was specified. |  
 
 SetUserEject 
 The purpose of this call is to allow the user to enable/disable the
physical Eject button on the front of the CD-ROM device while
a disc is in the drive. The CD-ROM device does not generate an interrupt when a disc is
inserted or ejected, so if the button is left active we have no way
of accurately knowing whether or not there is really a disc in the
drive. The MacOS assumes it has final say over when an ejectable disc
is actually ejected, and issues an EjectTheDisccontrol
call when it wishes to eject the disc. This call provides a method to disable/enable the manual eject
button for the drive on the specified device ID. Internal variables
are maintained for each device ID that reflect the current state of
the manual eject button. If the button is enabled, the driver sets
the dNeedTimeflag in the appropriate DCE, telling the
driver to periodically poll the device to see whether a disc has been
ejected, or inserted. This is the only way the driver has to ensure
the validity of its global variables in this situation. When a disc
is inserted, the button setting reverts back to disabled. Input Parameters: 
   
      |   | csCode
 | 80 |   |  
      |   | csParam[0]
 | 1 | Enable the manual eject button. |  
      |   |   | ¬1 | Disable the manual eject button. {default} |  
      |   | csParam[1-10]
 | Reserved. |   |  
 Status Return Codes: 
   
      |   | noErr | The button was successfully enabled/disabled. |  
      |   | offLinErr | No disc inserted in the drive. |  
 
 SetPollFreq
 
 The purpose of this call is to allow an application to specify a polling 
frequency (in Macintosh time ticks) different from the driver
default value (120). This polling frequency is the value used for
determining how often the accRuncontrol call is issued,
as well as the polling frequency for a VBL task initiated during the
execution of the driver's custom Disk Switch routine. Input Parameters: 
   
      |   | csCode
 | 81 |  
      |   | csParam[0]
 | Number of Macintosh ticks to be used for polling
         frequency. |  
      |   | csParam[1-10]
 | Reserved. |  
      |   |   |   |  
 Status Return Codes: 
   
      |   | noErr
 | This is the only possible status return code. |  
 
 Quiescence 
 The purpose of this call is to allow the user to enable/disable the
driver quiescent mode. This is used when an application wishes to 
communicate directly to the drive, in effect bypassing the CD driver.
In this case the  procedure for  communicate directly with the drive, is as follows: 
 Wake up the drive using the SetPowerMode command.
 
 Place the driver into quiescent mode. During quiescent mode, the driver will be completely inactive.
Note that if the driver is not put into  quiescent mode immediately after it 
awakens the drive, the driver will during the first accRun put that empty 
drive back to sleep. 
After the application is done talkimg to the drive, remove the driver from quiescent mode. Input Parameters: 
   
      |   | csCode
 | 1079 |   |  
      |   | csParam[0]
 | 0 | Enable Quiescence. |  
      |   |   | 1 | Disable Quiescence. |  
      |   | csParam[1-10]
 | Reserved. |   |  
 Status Return Codes: 
   
      |   | noErr | Quiescence mode was successfully enabled/disabled. |  
 
 ReadTOC
 
 The purpose of this call is to allow an application to receive
various types of Table Of Contents (TOC) data from the drive. There
are six varieties of the ReadTOCcall: 
   
      | csParam[0](word)
 | Description |  
      | 1 | Transfers the first track number of the first (or only)
         session and the last track number of the last (or only)
         session.AppleCD SC, AppleCD SC Plus, and AppleCD 150: Transfers the
         first and last user track number (in BCD) of the first (or
         only) session.
 |  
      | 2 | Transfers the starting address of the Lead Out area of
         the last (or only) session in BCD MIN-SEC-FRAME format.AppleCD SC, AppleCD SC Plus, and AppleCD 150: Transfers the
         starting address of the Lead Out area of the first (or only)
         session in BCD MIN-SEC-FRAME format.
 |  
      | 3 | Transfers the starting address of each track in a range
         of specified tracks, starting from the specified starting
         track and proceeding in ascending order until the specified
         buffer is filled or the data for the last track on the disc
         is transferred, whichever is less. Four bytes of information
         are transferred to describe the starting address.AppleCD SC, AppleCD SC Plus, and AppleCD 150: Only the first
         session TOC information can be accessed in a multi-session
         disc.
 |  
      | 4 | Transfers the entire table of contents for a disc (all
         track entries and points A0, A1, and A2) to the specified
         buffer.AppleCD SC: Not available.
 |  
      | 5 | Transfers information about the number of sessions on the
         disc and the location of the last session.AppleCD SC, AppleCD SC Plus, and AppleCD 150: Not
         available.
 |  
      | 6 | Transfers all Q-subcode entries in the lead-in areas of a
         disc (including TOC information), starting from the
         specified session number and proceeding in ascending order
         until the specified buffer is filled, or the data for the
         last Q-subcode entry on the disc is transferred, whichever
         is less.AppleCD SC, AppleCD SC Plus, and AppleCD 150: Not
         available.
 |  
 For transfer types 1, 2, and 5, the TOC
information is returned directly in the caller's
csParam[0-10]array. For types 3,
4, and 6, the caller is required to specify a buffer to
place the information into. In the case of a type 4 transfer,
the buffer must be 512 bytes long. Input Parameters: 
   
      |   | csCode
 | 100 |  
      | For Type 1: |   |   |  
      |   | csParam[0]
 | The transfer type value 1. |  
      |   | csParam[1-10]
 | Reserved. |  
      | For Type 2: |   |   |  
      |   | csParam[0]
 | The transfer type value 2. |  
      |   | csParam[1-10]
 | Reserved. |  
      | For Type 3: |  
      |   | csParam[0]
 | The transfer type value 3. |  
      |   | csParam[1-2]
 | The address of a buffer to return the requested
         information. |  
      |   | csParam[3]
 | The size of the buffer specified in
         csParam[1-2], in bytes. |  
      |   | csParam[4]
 | The MSByte (the upper 8 bits) of this 16-bit word must
         contain the starting track number (in BCD). |  
      | For Type 4 (Not available on AppleCD SC): |  
      |   | csParam[0]
 | The transfer type value 4. |  
      |   | csParam[1-2]
 | The address of a buffer to return the requested
         information. |  
      | For Type 5 (Not available on AppleCD SC, AppleCD SC
         Plus, and AppleCD): |  
      |   | csParam[0]
 | The transfer type value 5. |  
      |   | csParam[1-10]
 | Reserved. |  
      | For Type 6 (Not available on AppleCD SC, AppleCD SC
         Plus, and AppleCD): |  
      |   | csParam[0]
 | The transfer type value 6. |  
      |   | csParam[1-2]
 | The address of a buffer to return the requested
         information. |  
      |   | csParam[3]
 | The size of the buffer specified in
         csParam[1-2], in bytes. |  
      |   | csParam[4]
 | The MSByte(the upper 8 bits) of this 16-bit
         word must contain the starting session number (in BCD). |  
 Output Produced: For Type 1: 
   
      |   | csParam[0]:15-8
 | First user track number (in BCD). |  
      |   | csParam[0]:7-0
 | Last user track number (in BCD). |  
 For Type 2: 
   
      |   | csParam[0]:15-8
 | MIN field of a MIN-SEC-FRAME descriptor that describes
         the Lead Out starting address (in BCD). |  
      |   | csParam[0]:7-0
 | SEC field of the Lead Out starting address
         descriptor. |  
      |   | csParam[1]:15-8
 | FRAME field of the Lead Out starting address
         descriptor. |  
 For Type 3: The user must specify a return buffer address and the
   size of the buffer. The buffer is filled with 4-byte entries for
   each track in the requested range. Each entry is of the form:
 
   
      | Entry (byte offset) | Contents |   |  
      | 0 | Bits 7-4: | Reserved. |  
      |   | Bits 3-0: | Control Field (see Track Control Field at the beginning
         of this document for more information). |  
      | 1 | The MIN field of a MIN-SEC-FRAME descriptor that
         describes the start of the associated track. |  
      | 2 | The SEC field of the track starting address
         descriptor. |  
      | 3 | The FRAME field of the track starting address
         descriptor. |  
 Note: no entries will be returned for data tracks on CD-I discs. For Type 4 (Not available on AppleCD SC): The user must specify a return buffer address. The buffer
   must be 512 bytes long, and is filled with the entire table of
   contents, which is returned in the form:
 
   
      |   | Entry(byte offset)
 | Contents |  
      |   | 0 | Reserved. |  
      |   | 1-5 | TOC entry for point A0 (first track number). |  
      |   | 6-10 | TOC entry for point A1 (last track number). |  
      |   | 11-15 | TOC entry for point A2 (address of beginning of lead out
         area). |  
      |   | 16-20 | TOC entry for track 1. |  
      |   | . | . |   |  
      |   | . | . |   |  
      |   | . | . |   |  
      |   | 506-510 | TOC entry for track 99. |  
 Each five-byte entry is of the form: 
   
      |   | Entry(byte offset)
 | Contents |  
      |   | 0 | Reserved. |   |  
      |   |   | Bits 7-4: | Reserved. |  
      |   |   | Bits 3-0: | Control Field (see Track Control Field at the beginning
         of this document for more information). |  
      |   | 1 | Point or track number. |  
      |   | 2 | PMIN. |  
      |   | 3 | PSEC. |  
      |   | 4 | PFRAME. |  
 Note: this option is not valid for the AppleCD SC drive. Type 5 (Not available on AppleCD SC, APPLECD SC Plus, and AppleCD 150): 
   
      |   | csParam[0]
 | The first session number (in BCD). |  
      |   | csParam[1]
 | The last session number (in BCD). |  
      |   | csParam[2]
 | First track number of last session (in BCD). |  
      |   | csParam[3]:15-12
 | Reserved |  
      |   | csParam[3]:11-8
 | Control Field of first track in last session. (see Track
         Control Field at the beginning of this document for more
         information). |  
      |   | csParam[3]:7-0
 | The MIN field of a MIN-SEC-FRAME descriptor that
         describes the start of the first track of the last session
         (in BCD). |  
      |   | csParam[4]:15-8
 | The SEC field of the track starting address descriptor
         (in BCD). |  
      |   | csParam[4]:7-0
 | The FRAME field of the track starting address descriptor
         (in BCD). |  
 For Type 6 (Not available on AppleCD SC, AppleCD SC Plus, and
AppleCD 150): The user must specify a return buffer address and the
   size of the buffer. The buffer is filled with a 4-byte header and
   8-byte entries for each Q-subcode entry in the requested range.
   The first three entries are for points A0, A1, and A2, and are
   followed by the track entries for that session. After that, the
   Q-subcode entries are sorted in ascending order using the ADR
   field and within each ADR group by ascending order of the POINT
   field. This pattern is repeated for each session on the disc.
 The 4-byte header is of the form: 
   
      | Header(byte offset)
 | Contents |  
      | 0-1 | Total number of TOC data bytes transferred excluding
         these two length bytes. |  
      | 2 | First session number on the disc (in BCD). |  
      | 3 | Last session number on the disc (in BCD). |  
 Each TOC entry is of the form: 
   
      | Entry (byte offset) | Contents |   |  
      | 0 | The session number (in hex). |  
      | 1 | Bits 7-4: | ADR field, i.e., Q-subcode mode field |  
      |   | Bits 3-0: | Control Field (see Track Control Field at the beginning
         of this document for more information) |  
      | 2 | TNO - Track number. |  
      | 3 | POINT. |   |  
      | 4 | MIN. |   |  
      | 5 | SEC. |   |  
      | 6 | FRAME. |   |  
      | 7 | ZERO. |   |  
      | 8 | PMIN. |   |  
      | 9 | PSEC. |   |  
      | 10 | PFRAME. |   |  
 
The values come directly from the disc and will be in
either BCD or hexadecimal format, depending on the field. The
session number, ADR/Control and POINT fields are in hexadecimal.
All other fields are in BCD. For more information on the format of
the TOC, please refer to the "Yellow Book" specification for
CD-ROM discs, ISO 10149. In some early CD-300 units, the values for Entries 2 and
3 are swapped. This is due to a firmware bug, which was
corrected on later drives. You should always ORthe two values
together to always receive the proper value. Status Return Codes: 
   
      |   | noErr
 | TOC data successfully retrieved. |  
      |   | paramErr
 | An invalid TOC type specified. This can happen due to the
         TOC type being out of range, or due to the call not being
         supported by the drive in question (e.g., Type 6 call issued
         to AppleCD SC drive). |  
 
 ReadTheQSubcode
 
 The purpose of this call is to allow an application access to the
Q-subcode information for the current track. The current track is the
track that the optical pickup is currently over on a disc. Input Parameters: 
   
      |   | csCode
 | 101 |  
      |   | csParam[0-4]
 | Reserved (Q-Subcode data will be returned here). |  
      |   | csParam[5-10]
 | Reserved. |  
 Output Produced: 
   
      |   | csParam[0]:[15-8]
 | Control Field information (see Track Control Field at the
         beginning of this document for more information). |  
      |   | csParam[0]:[7-0]
 | Current track number (in BCD). |  
      |   | csParam[1]:[15-8]
 | Current index number in the current track. |  
      |   | csParam[1]:[7-0]
 | MIN field of a MIN-SEC-FRAME descriptor, which describes
         the relative running time from the beginning of the
         track. |  
      |   | csParam[2]:[15-8]
 | SEC field for a MIN-SEC-FRAME descriptor. |  
      |   | csParam[2]:[7-0]
 | FRAME field for a MIN-SEC-FRAME descriptor. |  
      |   | csParam[3]:[15-8]
 | AMIN field of an AMIN-ASEC-AFRAME descriptor, which
         describes the relative running time from the beginning of
         the disc. |  
      |   | csParam[3]:[7-0]
 | ASEC field of an AMIN-ASEC-AFRAME descriptor. |  
      |   | csParam[4]:[15-8]
 | AFRAME field of an AMIN-ASEC-AFRAME descriptor. |  
      |   | csParam[4]:[7-0]
 | LSB unused. |  
 Status Return Codes: 
   
      |   | noErr
 | Q-subcode data successfully retrieved. |  
 
 ReadHeader
 
 The purpose of this call is to allow the user/application access to
the header information for a specified logical block. This
information concerns the absolute AMIN-ASEC-AFRAME address of a given
logical block (the absolute running time from the beginning of the
disc) and the CD-ROM Data Mode of that logical block. If a requested
block is within an audio track (CD-DA) of the disc, a paramErrwill be returned. Input Parameters: 
   
      |   | csCode
 | 102 |  
      |   | csParam[0-1]
 | 32-bit logical block address from which to retrieve
         Header information. |  
      |   | csParam[2-10]
 | Reserved. |  
 Output Produced: 
   
      |   | csParam[0]:[15-8]
 | AMIN field of an AMIN-ASEC-AFRAME descriptor, which
         describes the absolute running time from the beginning of
         the disc. Value is in BCD format. |  
      |   | csParam[0]:[7-0]
 | ASEC field of an AMIN-ASEC-AFRAME descriptor. Value is in
         BCD format. |  
      |   | csParam[1]:[15-8]
 | AFRAME field of an AMIN-ASEC-AFRAME descriptor. Value is
         in BCD format. |  
      |   | csParam[1]:[7-0]
 | CD-ROM data mode of the logical block which defines what
         type of data will be within the 2048 data bytes and 288
         auxiliary bytes of the logical block: |  
 
   
      | Data Mode | User Data Field(2048 bytes)
 | Auxiliary Field288 bytes)
 |  
      | 0 | all bytes zero | all bytes zero |  
      | 1 | user data | EDC, L-EC bytes |  
      | 2 | user | data user data |  
 Status Return Codes: 
   
      |   | noErr
 | Header information successfully retrieved. |  
      |   | paramErr
 | The requested block is within an audio track (CD-DA) of
         the disc. |  
 
 AudioTrackSearch
 
 The purpose of this call is to position the optical pick-up at the
specified audio address. In addition, you can also tell the drive
either to start to play at the given address, or to pause at this
address until an AudioPlaycommand is executed and in
what Play Mode it should output the audio information. Input Parameters: 
   
      |   | csCode
 | 103 |  
      |   | csParam[0]
 | The optical pick-up positioning address type (see
         "Optical Positioning Types" at the beginning of this
         document for more information). |  
      |   | csParam[1-2]
 | 32-bit value representing the search address required by
         the corresponding type value in
         csParam[0](see above). |  
      |   | csParam[3]
 | A boolean value indicating what the drive should do when
         positioning of the pick-up is complete: |  
      |   |   | 0 | Enter a Hold Track state ("pause") |  
      |   |   | ¬0 | Start playing the audio track, according to the specified
         Play Mode. |  
      |   | csParam[4]
 | The "Play Mode" (see "Audio Play Modes" at the beginning
         of this document for more information). |  
      |   | csParam[5-10]
 | Reserved. |  
 Status Return Codes: 
   
      |   | noErr
 | Optical pick-up successfully positioned. |  
      |   | paramErr
 | Invalid type, Play Mode, or Search Address value
         specified or tried to execute this audio operation on a data
         track. |  
 
 AudioPlay
 
 The purpose of this call is to position the optical pick-up at the
specified audio address and begin playback of the audio at that
address. It can be similar to the AudioTrackSearchcommand that automatically begins playing at the specified Search
Address (see the documentation on theAudioTrackSearchcall for more detail). However, this command can also be used to
specify a "Stop Address." The proper way to use the AudioPlay-related commands is: 
   
      |   |  | First, specify where the audio playback should stop, by
         issuing an AudioPlaycommand to mark the
         stopping address. |  
      |   |  | Next, (optionally) to pre-position the optical pick-up
         where the audio playback should start, by issuing an
         AudioTrackSearchcommand and entering the
         "pause" state. |  
      |   |  | At this point, playback can then be started by an
         AudioPlayorAudioTrackSearchcommand and the drive will play audio until it reaches the
         position marked by the firstAudioPlaycommand. |  
 If no stop address is specified before issuing the actual play
command, the current active stop address in the drive may be lower
than the address at which we are trying to play audio, causing the
drive to return an error when the play command is issued. This model should always be followed irregardless of the audio
play mode to be used, even when playing track lists. Input Parameters: 
   
      |   | csCode
 | 104 |  
      |   | csParam[0]
 | The optical pick-up positioning address type (see
         "Optical Positioning Types" at the beginning of this
         document for more information). |  
      |   | csParam[1-2]
 | 32-bit value representing the search address required by
         the corresponding type value in
         csParam[0]. |  
      |   | csParam[3]
 | A boolean value indicating whether the address specified
         in csParam[1-2]is a starting address
         or a stopping address. |  
      |   |   | 0 | The address specified is a Starting Address. |  
      |   |   | ¬0 | The address specified is a Stopping Address. |  
      |   | csParam[4]
 | The "Play Mode" (see "Audio Play Modes" at the beginning
         of this document for more information). |  
      |   | csParam[5-10]
 | Reserved. |  
 Status Return Codes: 
   
      |   | noErr
 | Operation successful. |  
      |   | paramErr
 | Invalid type, Play Mode, or Search Address value
         specified or tried to execute this audio operation on a data
         track. |  
 
 AudioPause
 
 The purpose of this call is to cause the CD-ROM drive to enter either
a Hold Track ("Pause") or Play state. Note: This command is only valid after the issuance of an
AudioTrackSearch, orAudioPlaycommand. Input Parameters: 
   
      |   | csCode
 | 105 |   |  
      |   | csParam[0-1]
 | A (long) boolean value that tells the CD-ROM drive either
         to pause or continue: |  
      |   |   | 0 | Release the "Pause" state and continue playing at the
         same Q-subcode address before the last
         AudioPause. |  
      |   |   | 1 | Enter a Hold Track ("Pause") state. |  
      |   | csParam[2-10]
 | Reserved. |  
 Status Return Codes: 
   
      |   | noErr
 | CD-ROM device successfully paused or released from
         pause. |  
      |   | paramErr
 | Invalid pause value specified or tried to execute this
         audio operation on a data track. |  
 
 AudioStop
 
 The purpose of this call is to specify an address to the CD-ROM drive
at which it should end the current Playoperation. Note: If the optical pick-up positioning address type is 0
and the stop address is also 0, the command will immediately
stop the Play operation. Input Parameters: 
   
      |   | csCode
 | 106 |  
      |   | csParam[0]
 | The optical pick-up positioning address type (see
         "Optical Positioning Types" at the beginning of this
         document for more information). |  
      |   | csParam[1-2]
 | 32-bit value representing the stop address required by
         the corresponding type value in
         csParam[0]. |  
      |   | csParam[3-10]
 | Reserved. |  
 Status Return Codes: 
   
      |   | noErr
 | Optical pick-up successfully positioned. |  
      |   | paramErr
 | Invalid type or Search Address value specified or tried
         to execute this audio operation on a data track. |  
 
 AudioStatus
 
 The purpose of this call is to return the current audio play status
information and the starting Q-subcode address for the current track.
The audio play status information includes the Play Mode, and status
and control information for the current track. Input Parameters: 
   
      |   | csCode
 | 107 |  
      |   | csParam[0-10]
 | Reserved (Audio Status data will be returned here). |  
 Output Produced: 
   
      |   | csParam[0]:15-8
 | The Status Field: |  
      |   |   | 0 | Audio Play operation in progress. |  
      |   |   | 1 | CD-ROM device currently in Hold Track ("Pause") state |  
      |   |   | 2 | MUTING-ON operation in progress |  
      |   |   | 3 | Audio Play completed |  
      |   |   | 4 | Error occurred during audio play operation |  
      |   |   | 5 | Audio play operation not requested |  
      |   | csParam[0]:7-4
 | Reserved. |  
      |   | csParam[0]:3-0
 | Play Mode (see "Audio Play Modes" at the beginning of
         this document for more information). |  
      |   | csParam[1]:15-12
 | Reserved. |  
      |   | csParam[1]:11-8
 | The Control Field (see Track Control Field at the
         beginning of this document for more information). |  
      |   | csParam[1]:7-0
 | The AMIN field of an AMIN-ASEC-AFRAME descriptor that
         describes the current Q-subcode. |  
      |   | csParam[2]:15-8
 | The ASEC field of an AMIN-ASEC-AFRAME descriptor for the
         current Q-subcode. |  
      |   | csParam[2]:7-0
 | The AFRAME field of an AMIN-ASEC-AFRAME descriptor for
         the current Q-subcode. |  
 Status Return Codes: 
   
      |   | noErr
 | Status information successfully read. |  
      |   | paramErr
 | Tried to execute this audio operation on a data
         track. |  
 
 AudioScan
 
 The purpose of this call is to request the CD-ROM drive to perform a
fast-forward or fast-reverse operation starting from a specified
address. Input Parameters: 
   
      |   | csCode
 | 108 |  
      |   | csParam[0]
 | The optical pick-up positioning address type (see
         "Optical Positioning Types" at the beginning of this
         document for more information). |  
      |   | csParam[1-2]
 | 32-bit value representing the search address required by
         the corresponding type value in
         csParam[0]. |  
      |   | csParam[3]
 | The direction the scan should take place: |  
      |   |   | 0 | Scan in the fast-forward direction |  
      |   |   | ¬0 | Scan in the fast-reverse direction |  
      |   | csParam[4-10]
 | Reserved. |  
 Status Return Codes: 
   
      |   | noErr
 | Optical pick-up successfully positioned. |  
      |   | paramErr
 | Invalid type or Search Address value specified or tried
         to execute this audio operation on a data track. |  
 
 AudioControl
 
 The purpose of this call is to set the output volume for the drive's
audio channels. Each channel can be given a value from zero to 255,
where zero indicates that the channel output is muted, and 255
indicates maximum volume. 
   
      | Notes: | · | This call can be used even if no disc is mounted. |  
      |   | · | Beginning with driver version 4.0.5, the last volume
         setting used before powering down a drive will be restored
         when the drive is reinitialized.
 |  
      |   | · | This command is not available on the AppleCD SC. |  
 Input Parameters: 
   
      |   | csCode
 | 109 |  
      |   | csParam[0]:15-8
 | Left channel volume (0-FFh). |  
      |   | csParam[0]:7-0
 | Right Channel volume (0-FFh). |  
      |   | csParam[1-10]
 | Reserved. |  
 Status Return Codes: 
   
      |   | noErr
 | Audio volume successfully set. |  
 ReadMCN
 
 The purpose of this call is to allow an application access to the
Media Catalog Number for the disc. The Media Catalog Number consists of the UPC/Bar Code information
for the disc. The output format was changed from binary data to a
Pascal string beginning with driver version 5.0. Applications can
check the upper bit of csParam[0]for theMCValbit. If set, the application can use the version
4.0 output format. If theMCValis not set, but the upper
byte incsParam[0]is not equal to zero, then
the application can use the version 5.0 output. 
   
      | Notes: |  | This command is not available on the AppleCD SC. |  
      |   |  | Driver version 4.0.X does not return the correct MCN data
         when using an AppleCD 300. |  
 Input Parameters: 
   
      |   | csCode
 | 110 |  
      |   | csParam[0-6]
 | Reserved (MCN data will be returned here). |  
      |   | csParam[7-10]
 | Reserved. |  
 Output Produced (version 5.X): 
   
      |   | csParam[0-6]:
 | Pascal string containing the MCN (UPC/Bar Code). If the
         string length (upper eight bits of
         csParam[0]) is zero, an MCN was not
         found on the disc. |  
 Output Produced (version 4.X): 
   
      |   | csParam[0]:[15-8]
 | MCValbit (bit 15). If this bit is set to
         one, then the Media Catalog Number data was found and the
         rest of the returned fields are valid. If this bit is set to
         zero, then the Media Catalog Number data was not found and
         the rest of the returned fields are invalid.
 |  
      |   | csParam[0]:[7-0]
 | MSB of the Media Catalog Number (UPC/Bar Code) data if
         the MCValbit is set. |  
      |   | csParam[1-7]
 | Contains the rest of the Media Catalog Number (UPC/Bar
         Code) data if the MCValbit is set. The LSB
         of csParam[7]contains the LSB of the
         Media Catalog Number data. |  
 Status Return Codes: 
   
      |   | noErr
 | Media Catalog Number data successfully retrieved, or no
         MCN was found on the disc. |  
      |   | paramErr
 | Tried to execute this audio operation on a data
         track. |  
 
 ReadISRC
 
 The purpose of this call is to allow an application access to the
International Standard Recording Code information for a specified
track on a disc. For more information about the ISRC, please refer to
ISO 10149. The output format was changed from binary data to a Pascal
string beginning with driver version 5.0. Applications can check the
upper bit of csParam[0]for theTCValbit. If set, the application can use the version
4.0 output format. If theTCValis not set but the upper
byte incsParam[0]is not equal to zero, then
the application can use the version 5.0 output. 
   
      | Notes: |  | This command is not available on the AppleCD SC.
 |  
      |   |  | Driver version 4.0.X does not return the correct ISRC
         data when using an AppleCD 300. |  
 Input Parameters: 
   
      |   | csCode
 | 111 |  
      |   | csParam[0]
 | A track number (in BCD). |  
      |   | csParam[1-10]
 | Reserved (ISRC data will be returned here). |  
 Output Produced (version 5.X): 
   
      |   | csParam[0-6]:
 | Pascal string containing the ISRC. If the string length
         (upper eight bits of csParam[0]) is
         zero, an ISRC was not found for the specified track. |  
 Output Produced (version 4.X): 
   
      |   | csParam[0]:[15-8]
 | TCValbit (bit 15). If this bit is set to
         one, then the ISRC data was found for the specified track
         and the rest of the returned fields are valid. If this bit
         is set to zero, then the ISRC data was not found for the
         specified track and the rest of the returned fields are
         invalid.
 |  
      |   | csParam[0]:[7-0]
 | MSB of the ISRC data for the specified track if the
         TCValbit is set. |  
      |   | csParam[1-7]
 | Contains the rest of the ISRC data if the
         TCValbit is set. The LSB ofcsParam[7]contains the LSB of the ISRC
         data. |  
 Status Return Codes: 
   
      |   | noErr
 | ISRC data successfully retrieved. |  
      |   | paramErr
 | Tried to execute this audio operation on a data
         track. |  
 
 ReadAudioVolume
 
 The purpose of this call is to return the current audio volume
control data for the drive. 
   
      | Notes: |  | This call can be used even if no disc is mounted. |  
      |   |  | This call is not available on the AppleCD SC. |  
 Input Parameters: 
   
      |   | csCode
 | 112 |  
      |   | csParam[0]
 | Reserved (Audio Volume data will be returned here). |  
      |   | csParam[1-10]
 | Reserved. |  
 Output Produced: 
   
      |   | csParam[0]:15-8
 | The left channel volume (0-FFh). |  
      |   | csParam[0]:7-0
 | The right channel volume (0-FFh). |  Status Return Codes: 
   
      |   | noErr
 | Status information successfully read. |  
 
 GetSpindleSpeed
 
 The purpose of this call is to return the current rotational speed of
the drive. This call always return 00 on normal speed (1X)
drives, like the Apple AppleCD SC and AppleCD SC Plus/AppleCD 150. Input Parameters: 
   
      |   |   | csCode
 | 113 |  
      |   |   | csParam[0]
 | Reserved (Speed information will be returned here). |  
      |   |   | csParam[1-10]
 | Reserved. |  
 Output Produced: 
   
      |   | csParam[0]
 | The current rotational speed: |  
      |   |   | 00 | Normal speed. |  
      |   |   | FF | Maximum speed. |  
 Status Return Codes: 
   
      |   | noErr
 | Speed information successfully read. |  
 
 SetSpindleSpeed
 
 The purpose of this call is to set the rotational speed of the drive. This call will return paramErrfor an AppleCD SC or AppleCD SC Plus/AppleCD 150 if the input parameter is not 00 (normal speed). Input Parameters: 
   
      |   | cscode
 | 114 |  
      |   | csParam[0]
 | Speed setting: |  
      |   |   | 00 | Normal speed |  
      |   |   | FF | Maximum speed |  
      |   | csParam[1-10]
 | Reserved. |  
 Status Return Codes: 
   
      |   | noErr
 | Rotational speed successfully set. |  
      |   | paramErr
 | An invalid speed setting was specified. |  
 
 ReadAudio
 
 The purpose of this call is to read digital audio and/or subcode data
from the disc into a specified buffer. The starting audio address may
be specified in one of three formats (see the "Audio Play Modes" at
the beginning of this document for more information). There are four possible formats for the audio data that is returned: 
   
      | Type Values | Description |  
      | 0 | Audio data only--2352 bytes per audio block. |  
      | 1 | Audio data with Q-subcode--2352 audio bytes, 10 bytes
         Q-subcode,and 6 zero bytes = 2368 bytes per block. |  
      | 2 | Audio data with all subcode data (P~W)--2352 audio bytes
         and 96 subcode bytes = 2448 bytes per block. |  
      | 3 | All subcode data only (P~W)--96 subcode bytes per
         block. |  
 The position of an audio block cannot be determined exactly. Thus,
two ReadAudiocalls with the same starting address will
not necessarily return the same data in the same position. Typically
the data will be shifted up to 1.5 frames (3528 bytes). To read large
sections of audio data using multipleReadAudiocalls
and not have a gap are overlap in the audio data, theReadAudiocalls must occur frequently enough to prevent
the internal drive buffer from overflowing. If the Macintosh is too
slow, acontrolErrwill be returned along with the audio
data. ThecontrolErrindicates that the audio data just
received has a gap or overlap in it. For type 2 and type 3, the P- and
Q-subcodes are accurately aligned to the CD block boundary,
but the R- through W-subcodes may be offset by one pack
(i.e. 24 subcode bytes) from the P- and Q-subcodes.
Thus, in any 96-byte subcode data from block n, the last 24 bytes
contain R- through W-subcodes from the next block
(n+1). The current volume setting has no effect on the audio data that is
returned. When using ReadAudiowith type 3, the
audio is played through any connected speakers. The audio can be
muted to avoid hearing anything while reading the subcode data. For
types 0, 1, and 2 the data rate can be adjusted
by changing the drive speed prior to callingReadAudio.
For type 3 only, subcode data is always transferred at an
average throughput of 150 KBytes per second. This call is not supported by AppleCD SC, AppleCD SC Plus/AppleCD
150. Most ATAPI drives will not support ReadAudiotype
1, 2 or 3. Input Parameters: 
   
      |   | cscode
 | 115
 |  
      |   | csParam[0]
 | Audio Type (see above) |  
      |   | csParam[1-2] 
 | The address of the buffer to return the requested
         information. |  
      |   | csParam[3]
 | The starting address type (see "Optical Positioning
         Types" at the beginning of this document for more
         information). |  
      |   | csParam[4-5]
 | 32-bit value representing the start address required by
         the corresponding type value in
         csParam[3]. |  
      |   | csParam[6]
 | The number of consecutive audio blocks to return.
 |  
      |   | csParam[7-10]
 | Reserved. |  
 Status Return Codes: 
   
      |   | noErr
 | Audio data successfully retrieved. |  
      |   | paramErr
 | An invalid audio type, address type, or audio address
         specified or tried to execute this audio operation on a data
         track. |  
 
 ReadAllSubcodes
 
 The purpose of this call is to read consecutive blocks of subcode
information (P~W) as the drive is playing audio. When one of
the commands is issued that begins playing audio, the subcode
information corresponding to the audio blocks is stored in a buffer
within the drive. ReadAllSubcodesretrieves the subcode
information from this buffer. If the number of subcode blocks requested 
exceeds the quantity currently in the buffer, the control call waits until 
more subcode blocks are available before returning data. An option allows 
any subcode data currently in the buffer to be purged, allowing the host to 
re-synchronize to the latest subcode data. If the Macintosh does not send ReadAllSubcoderequests frequently enough, acontrolErrwill be
returned indicating that the internal drive buffer overflowed and
some subcode data was lost. AReadAllSubcodescall must
be made with the purge parameter set to clear the overflow condition. 
   
      | Note: The R- through W-subcodes that are
         returned are accurately aligned to the CD block boundary,
         but the P- and Q-subcodes may be offset by one
         pack (i.e. 24 subcode bytes) from the R- through
         W-subcodes. Thus, in any 96-byte subcode data from
         block n, the first 24 bytes may contain the P and Q
         subcodes from the previous block (n-1). |  
 This call is not supported by AppleCD SC, AppleCD SC Plus/AppleCD
150. Most ATAPI drives will not support this call. Input Parameters: 
   
      |   | cscode
 | 116 |  
      |   | csParam[0-1]
 | The address of the buffer to return the requested subcode
         blocks. |  
      |   | csParam[2]
 | A boolean value indicating whether the current information in
         the drive buffer should be purged before retrieving any
         subcode data: |  
      |   |   | 0 | retrieve buffered subcode blocks |  
      |   |   | ¬0 | delete any blocks in the subcode buffer and wait for
         new data |  
      |   | csParam[3]
 | The number of consecutive subcode blocks (96 bytes per
         block) to return. |  
      |   | csParam[4-10]
 | Reserved. |  
 Status Return Codes: 
   
      |   | noErr
 | Audio data successfully retrieved. |  
      |   | controlErr
 | A buffer overflow occurred during the
         ReadAllSubcodescommand execution. |  
      |   | paramErr
 | Audio operation on a data track. |  
 
 SetTrackList
 
 The purpose of this call is to indicate to the driver the order in
which audio tracks will be played. This ordering is passed in as a
pointer to an array (of bytes)--called the track play list--containing 
the track numbers in the order they should be played. The track play list 
should have a maximum of 99 entries. The driver verifies that all elements 
in the track play list are valid. The proper way to use the audio track list related commands is: 
   
      | · | First, use the SetTrackListcommand to send
         to the driver an audio track list defining the order in
         which you want the audio tracks to be played. |  
      | · | Next, specify where the audio playback should stop, by
         issuing an AudioPlaycommand to mark the last
         track in the list to be played. |  
      | · | Next (optionally), to pre-position the optical pick-up on
         the track in the list where the audio playback should start,
         by issuing an AudioTrackSearchcommand and
         entering the "pause" state. |  
      | · | At this point, playback can then be started by an
         AudioPlayorAudioTrackSearchcommand, and the drive will play audio until it finishes the
         track marked by the firstAudioPlaycommand. |  
 All AudioPlayandAudioTrackSearchcommands issued should use the optical positioning type
(csParam[0]) set to 3 so the address
field (csParam[1-2]) can be interpreted as an
index into the driver's audio track play list. Input Parameters: 
   
      |   | cscode
 | 122 |  
      |   | csParam[0]
 | Length of the new track play list (must be less than
         100). |  
      |   | csParam[1-2]
 | Pointer to new track play list. |  
      |   | csParam[3-10]
 | Reserved. |  
 Status Return Codes: 
   
      |   | noErr
 | Track list data successfully set. |  
      |   | paramErr
 | Either (1) the pointer to track list wasn't provided by
         the client code, (2) at least one element of the play list
         wasn't valid, or (3) more than 99 elements were passed
         in. |  
 
 GetTrackList
 
 Retrieve the current track play list from driver (see
SetTrackListcommand). Input Parameters: 
   
      |   | cscode
 | 123 |  
      |   | csParam[0]
 | Reserved (Length of current track play list will be
         returned here). |  
      |   | csParam[1-2]
 | The address of a buffer to return the current track play
         list data. |  
      |   | csParam[3-10]
 | Reserved. |  
 Output Produced: 
   
      |   | csParam[0]
 | Length of current track play list. |  
      |   | csParam[1-2]
 | The address of the buffer containing the current track
         play list data. |  
 Status Return Codes: 
   
      |   | noErr
 | Track list data successfully retrieved. |  
      |   | paramErr
 | Pointer to track list wasn't provided by the client
         code. |  
 
 GetTrackIndex
 
 Return the current track play list index. The AudioPlayandAudioTrackSearch commands set track play list index
when called with optical positioning type (csParam[0]) set to 3. 
TheAudioStopcommand andPrimecalls (i.e.,Read) will 
stop audio play and reset the track play list index (to -1). Input Parameters: 
   
      |   | cscode
 | 124 |  
      |   | csParam[0]
 | Reserved (Current track index will be returned here). |  
      |   | csParam[1-10]
 | Reserved. |  
 Output Produced: 
   
      |   | csParam[0]
 | The current track index. |  
 Status Return Codes: 
   
      |   | noErr
 | This is the only possible status return code. |  
 
 SetPlayMode
 
 The CD-ROM driver can set the CD-ROM drive to play audio from a start
address to an end address (kNormalMode), to randomly
shuffle between tracks (kShuffleMode), or to play tracks
in a specified order (kProgMode). ForkNormalModeandkProgMode, play can be
extended by repeating the tracks. The SetPlayModecommand is used to set the track play
mode and the repeat mode. The three possible track play modes are: 
   
      |   |   | kNormalMode
 | 0 |  
      |   |   | kShuffleMode
 | 1 |  
      |   |   | kProgMode
 | 2 |  
 Input Parameters: 
   
      |   | cscode
 | 125 |   |  
      |   | csParam[0]:15-8
 | The repeat flag: |   |  
      |   |   |   | True -- Repeat function is on. |   |  
      |   |   |   | False -- Repeat function is off. |   |  
      |   | csParam[0]:7-0
 | The track play mode. |   |  
      |   | csParam[1-10]
 | Reserved. |   |  
 Status Return Codes: 
   
      |   | noErr
 | This is the only possible status return code. |  
 
 GetPlayMode
 
 Return current settings for repeat and track play mode (see
SetPlayMode). Input Parameters: 
   
      |   | cscode
 | 126 |  
      |   | csParam[0]
 | Reserved (Track play mode will be returned here). |  
      |   | csParam[1-10]
 | Reserved. |  
 Output Produced: 
   
      |   | csParam[0]:15-8
 | The repeat flag: |  
      |   |   |   | True -- Repeat function is on. |  
      |   |   |   | False -- Repeat function is off. |  
      |   | csParam[0]:7-0
 | The track play mode. |  
 Status Return Codes: 
   
      |   | noErr
 | This is the only possible status return code.
 |  
 
 GoodBye
 
 Executes necessary cleanup before system shutdown. Input Parameters: 
   
      |   | cscode
 | -1 |  
      |   | csParam[0-10]
 | Reserved. |  
 Status Return Codes: 
   
      |   | noErr
 | This is the only possible status return code. |  
 Back to top 
 Status Call Descriptions
 DriveStatus
 
 The purpose of this call is to return information about the
drive/disc as described in Inside Macintosh, Volume II, page
215. Input Parameters: 
   
      |   | cscode
 | 8 |  
      |   | csParam[0-10]
 | Reserved (On exit, contains information that maps to the
         DrvStsrecord/structure). |  
 Output Produced: 
   
      |   | csParam[0]
 | Current track( always 0. |  
      |   | csParam[1]:15
 | Volume locked bit: |  
      |   |   | 0 (volume not locked) |  
      |   |   | 1 (volume locked) |  
      |   | csParam[1]:7-0
 | Disc in place: |  
      |   |   | 0 (disc not in drive) |  
      |   |   | 1 (disc in drive) |  
      |   | csParam[2]:15-8
 | Drive installed (always 1). |  
      |   | csParam[2]:7
 | Sides flag (always 0) (single-sided). |  
      |   | csParam[2]:6-0
 | Number of sides (always 1) (single-sided). |  
      |   | csParam[3-4]
 | Next queue entry (always 0). |  
      |   | csParam[5]
 | Reserved. |  
      |   | csParam[6]
 | Drive number. |  
      |   | csParam[7]
 | Drive reference number. |  
      |   | csParam[8]
 | File system identifier (always 1). |  
      |   | csParam[9] 15-8
 | Two-sided format (always 0) (single-sided). |  
      |   | csParam[9] 7-0
 | Reserved. |  
      |   | csParam[10]
 | Disk error count (always 0). |  
 Status Return Codes: 
   
      |   | noErr
 | This is the only possible status return code. |  
 
 DriverGestalt
 
 The purpose of this call is to return Gestalt-type
information about the driver itself. Currently defined driverGestaltselectors are: 
   
      |   | driverGestaltSyncResponse=sync; //
 | True if the driver only behaves synchronously. |  
      |   | driverGestaltVersResponse=vers; //
 | Version number of the driver (First 4 bytes of the vers
         #1 resource). |  
      |   | driverGestaltIntfResponse=intf; //
 | Physical interface to device. |  
      |   | driverGestaltDevTResponse=devt; //
 | Type of device the driver is driving. |  
      |   | driverGestaltBootResponse=boot; //
 | PRAM value to designate this driver/drive. Valid only for
         ATAPI drives or when SCSI Manager 4.3 is active. |  
 The following response buffers are defined for the driverGestaltselectors: 
   
      | struct driverGestaltSyncResponse
{
    Boolean behavesSynchronously; // true/false = sync/async
};
typedef struct driverGestaltSyncResponse driverGestaltSyncResponse
struct driverGestaltVersResponse
{
    NumVersion driverVersion;
};
typedef struct driverGestaltVersResponse driverGestaltVersResponse
struct driverGestaltIntfResponse
{
    OSType interfaceType; // 'scsi' or 'atpi'
};
typedef struct driverGestaltIntfResponse driverGestaltIntfResponse
struct driverGestaltDevTResponse
{
    OSType deviceType; // 'cdrm'
};
typedef struct driverGestaltDevTResponse driverGestaltDevTResponse
typedef struct
{
    unsigned char extDev;   // SCSI = Target (upper 5 bits)
                            // SCSI = LUN (lower 3 bits)
                            // ATAPI = Bus
    unsigned char partition; // Unused
    unsigned char SIMSlot;  // SCSI = Slot
                            // ATAPI = 0x20 (internal ATA)
    unsigned char SIMsRSRC; // SCSI = sRsrcID
                            // ATAPI = 0 (unused)
} driverGestaltBootResponse;
 |  
 Input Parameters: 
   
      |   | cscode
 | 43 |  
      |   | csParam[0-1]
 | driverGestaltSelector
 |  
      |   | csParam[2-3]
 | Reserved (driverGestaltResponsedata will be
         returned here). |  
      |   | csParam[4-10]
 | Reserved. |  
 Output Produced: 
   
      |   | csParam[2-3]:
 | driverGestaltResponse
 |  
 Status Return Codes: 
   
      |   | noErr
 | This is the only possible status return code. |  
 
 GetPowerMode
 
 The purpose of this call is to return the current power mode of a
CD-ROM drive (see SetPowerMode). Input Parameters: 
   
      |   | cscode
 | 70 |  
      |   | csParam[0-10]
 | Reserved. |  
 Output Produced: 
   Status Return Codes:
      |   | csParam[0]:15-8
 | The current power mode. |  
   
      |   | noErr
 | This is the only possible status return code. |  
 
 Get2KOffset
 
 The purpose of this call is to return information to the caller that
allows subsequent Primecalls to be aligned to the 2K
physical block size of the CD-ROM. This can be used in applications
(e.g., QuickTime) to increase streaming performance by avoiding data
requests that span across a 2K-disc block. This call returns the
number of bytes between the beginning of the 2K physical block and
the first byte read in the previousPrimecall. Possible
values are 0, 512, 1024, and 1536. For example, if aPrimecall 
causes a read of the last 512 bytes within a 2K physical block, this call will 
return 3 x 512 = 1536 bytes. This is the offset from the beginning of the 2K block 
to the start of the first data byte read. Note that this call assumes that the file
system actually makes aPrimecall and that a file system cache did not 
fill the read request. Input Parameters: 
   
      |   | cscode
 | 95 |  
      |   | csParam[0-1]:
 | Reserved (on exit contains 2K offset). |  
      |   | csParam[2-10]
 | Reserved. |  
 Output Produced: 
   
      |   | csParam[0-1]
 | The offset between the beginning of the 2K physical block
         and the first byte of the last read call. |  
 Status Return Codes: 
   
      |   | noErr
 | The offset for the specified device ID was returned. |  
      |   | statusErr
 | Primewas not previously called.
 |  
 
 GetDriveType
 
 The purpose of this call is to return to the caller the type of
CD-ROM drive located at the specified device ID. Note: Applications should begin using the new GetCDFeaturescall instead ofGetDriveType. Input Parameters: 
   
      |   | cscode
 | 96 |  
      |   | csParam[0]:
 | Reserved (on exit contains the type of CD-ROM drive). |  
      |   | csParam[1-10]
 | Reserved. |  
 Output Produced: 
   Status Return Codes:
      |   | csParam[0]
 | A code indicating the type of CD-ROM drive located at the
         specified device ID. These codes are defined as follows: |  
      |   |   | 1 -- Drive is an AppleCD SC |  
      |   |   | 2 -- Drive is an AppleCD SC Plus / AppleCD 150 |  
      |   |   | 3 -- Drive is an AppleCD 300 or newer (multiple speed
         drives) |  
   
      |   | noErr
 | The drive type for the specified device ID was
         returned. |  
      |   | statusErr
 | The specified device ID is not a CD-ROM drive. |  
 
 GetBlockSize
 
 The purpose of this call is to return to the caller the current block
size of the CD-ROM drive. Note: If the user has set the block size to 512, but the driver
has set the actual block size to 2048 and does the 2048-byte to 512-byte 
conversion, this call will return 512 as the current block size. Input Parameters: 
   Output Produced:
      |   | cscode
 | 98 |  
      |   | csParam[0]
 | Reserved (on exit, it contains the block size). |  
      |   | csParam[1-10]
 | Reserved. |  
   
      |   | csParam[0]
 | The block size of the disc inserted in the specified
         device ID. |  
 Status Return Codes: 
   
      |   | noErr
 | The block size of the disc in the specified device ID was
         returned. |  
 
 ReturnDeviceIdent
 
 The purpose of this call is to return the DeviceIdentfor the CD-ROM drive being controlled by this instance (entry in the
unit table) of the driver. This call was first available in driver
version 5.0. The following is the format of the DeviceIdent: 
   
      | struct DeviceIdent {
  UInt8      diReserved;     /* reserved               */
  UInt8      bus;            /* SCSI - Bus Number      */
  UInt8      targetID;       /* SCSI - Target SCSI ID  */
  UInt8      LUN;            /* SCSI - LUN             */
};
typedef struct DeviceIdent DeviceIdent;
 |  
 Input Parameters: 
   
      |   | cscode
 | 120 |  
      |   | csParam[0-1]
 | Reserved (DeviceIdentwill be returned
         here). |  
      |   | csParam[2-10]
 | Reserved. |  
 Output Produced: 
   
      |   | csParam[0-1]:
 | The DeviceIdent. |  
 Status Return Codes: 
   
      |   | noErr
 | The DeviceIdentwas returned. |  
 
 GetCDFeatures
 
 The purpose of this call is to determine the features of a particular
CD-ROM drive. Prior to driver version 5.0, this was done using the
GetDriveTypestatus call, which returned a specific
model of CD-ROM drive. This makes client code difficult to maintain
since it must be modified each time a new CD-ROM drive is introduced.
To alleviate this problem, the features of the device have been
broken out into testable bits. A fixed point number containing the sustained transfer rate of the
drive relative to an AppleCD 150 is also included (e.g., AppleCD 300
Plus = 2.0, AppleCD 150 = 1.0). This information is returned in the following structure: 
   
      | struct CDDeviceCharacteristics
{
    unsigned char speedMajor;   // High byte of fixed point speed
    unsigned char speedMinor;   // Low byte of fixed point speed.
    unsignedshort cdFlags;      // Flags for features of this drive
};
typedef struct CDDeviceCharacteristics CDDeviceCharacteristics;
enum /* Flags for CD Features field */
{
    cdPowerInject       = 0,    // device supports power inject of media
    cdNotPowerEject     = 1,    // device does not support power eject of media
    cdMute              = 2,    // device supports audio channels muting
    cdLeftToChannel     = 3,    // device supports left channel only mono audio
    cdRightToChannel    = 4,    // device supports right channel only mono audio
    cdLeftPlusRight     = 5,    // device supports left + right channels mono audio
    cdSCSI_2            = 10,   // device supports SCSI2 command set (SCSI only)
    cdStereoVolume      = 11,   // device supports independent volume per channel
    cdDisconnect        = 12,   // device supports disconnect / reconnect (SCSI only)
    cdWriteOnce         = 13,   // device is a write-once type of drive
    cdPowerInject_Mask    = 1 << cdPowerInject,
    cdNotPowerEject_Mask  = 1 << cdNotPowerEject,
    cdMute_Mask           = 1 << cdMute,
    cdLeftToChannel_Mask  = 1 << cdLeftToChannel,
    cdRightToChannel_Mask = 1 << cdRightToChannel,
    cdLeftPlusRight_Mask  = 1 << cdLeftPlusRight,
    cdSCSI_2_Mask         = 1 << cdSCSI_2,
    cdStereoVolume_Mask   = 1 << cdStereoVolume,
    cdDisconnect_Mask     = 1 << cdDisconnect,
    cdWriteOnce_Mask      = 1 << cdWriteOnce
};
 |  
 Input Parameters: 
   
      |   | cscode
 | 121 |  
      |   | csParam[0-1]
 | Reserved (CD-ROM drive features will be returned
         here). |  
      |   | csParam[2-10]
 | Reserved. |  
 Output Produced: 
   
      |   | csParam[0-1]:
 | The CD-ROM drive features as defined above. |  
 Status Return Codes: 
   
      |   | noErr
 | The CD-ROM drive features were returned. |  
 Back to top ReferencesAppleCD SC Developer's Guide, Second Edition Apple CD-ROM Handbook (Addison-Wesley) Breaking Through: A Technical Guide for the Design
            and Development of CD-ROMs (Apple Multimedia Program
            - 030-0879-A) CD-ROM and the Macintosh Computer, on the Developer
            CD series Inside Macintosh: Devices ISO 10149 Information technology - Data
            interchange on read-only 120 mm optical data disks
            (CD-ROM) ("Yellow Book") CEI IEC 908 Compact Disc digital audio system
            ("Red Book") Back to top Change History
            
               | 01-September-1998 | Added Quiescence mode. |  
               | 01-May-1994 | Added power management, play
list calls and an icon for CD-Extra discs, which is available starting in 
version 5.1.X of the Apple CD-ROM driver extension. Removed SCSI-specific 
calls and support for block sizes of 256 and 1024 bytes/block, which are not 
available starting in version 5.2.X of the Apple CD-ROM driver extension. Fixed 
the definition of the "CD Features" flags in GetCDFeatures. Corrected 
some minor errors. |  
 Back to top Downloadables
            
               | 
                  
                   | Acrobat version of this Note (132K) | Download |  
 Back to top |