KallistiOS  2.0.0
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
Data Structures | Macros | Functions
cdrom.h File Reference

CD access to the GD-ROM drive. More...

#include <sys/cdefs.h>
#include <arch/types.h>

Go to the source code of this file.

Data Structures

struct  CDROM_TOC
 TOC structure returned by the BIOS. More...

Macros

#define CMD_PIOREAD   16
 Read via PIO.
#define CMD_DMAREAD   17
 Read via DMA.
#define CMD_GETTOC   18
 Read TOC.
#define CMD_GETTOC2   19
 Read TOC.
#define CMD_PLAY   20
 Play track.
#define CMD_PLAY2   21
 Play sectors.
#define CMD_PAUSE   22
 Pause playback.
#define CMD_RELEASE   23
 Resume from pause.
#define CMD_INIT   24
 Initialize the drive.
#define CMD_SEEK   27
 Seek to a new position.
#define CMD_READ   28
 Read raw sectors.
#define CMD_STOP   33
 Stop the disc from spinning.
#define CMD_GETSCD   34
 Get subcode data.
#define CMD_GETSES   35
 Get session.
#define ERR_OK   0
 No error.
#define ERR_NO_DISC   1
 No disc in drive.
#define ERR_DISC_CHG   2
 Disc changed, but not reinitted yet.
#define ERR_SYS   3
 System error.
#define ERR_ABORTED   4
 Command aborted.
#define ERR_NO_ACTIVE   5
 System inactive?
#define FAILED   -1
 Command failed.
#define NO_ACTIVE   0
 System inactive?
#define PROCESSING   1
 Processing command.
#define COMPLETED   2
 Command completed successfully.
#define ABORTED   3
 Command aborted before completion.
#define CDDA_TRACKS   1
 Play by track number.
#define CDDA_SECTORS   2
 Play by sector number.
#define CD_STATUS_BUSY   0
 Drive is busy.
#define CD_STATUS_PAUSED   1
 Disc is paused.
#define CD_STATUS_STANDBY   2
 Drive is in standby.
#define CD_STATUS_PLAYING   3
 Drive is currently playing.
#define CD_STATUS_SEEKING   4
 Drive is currently seeking.
#define CD_STATUS_SCANNING   5
 Drive is scanning.
#define CD_STATUS_OPEN   6
 Disc tray is open.
#define CD_STATUS_NO_DISC   7
 No disc inserted.
#define CD_CDDA   0
 Audio CD (Red book)
#define CD_CDROM   0x10
 CD-ROM or CD-R (Yellow book)
#define CD_CDROM_XA   0x20
 CD-ROM XA (Yellow book extension)
#define CD_CDI   0x30
 CD-i (Green book)
#define CD_GDROM   0x80
 GD-ROM.
#define TOC_LBA(n)   ((n) & 0x00ffffff)
 Get the FAD address of a TOC entry.
#define TOC_ADR(n)   ( ((n) & 0x0f000000) >> 24 )
 Get the address of a TOC entry.
#define TOC_CTRL(n)   ( ((n) & 0xf0000000) >> 28 )
 Get the control data of a TOC entry.
#define TOC_TRACK(n)   ( ((n) & 0x00ff0000) >> 16 )
 Get the track number of a TOC entry.

Functions

void cdrom_set_sector_size (int size)
 Set the sector size for read sectors.
int cdrom_exec_cmd (int cmd, void *param)
 Execute a CD-ROM command.
int cdrom_get_status (int *status, int *disc_type)
 Get the status of the GD-ROM drive.
int cdrom_reinit ()
 Re-initialize the GD-ROM drive.
int cdrom_read_toc (CDROM_TOC *toc_buffer, int session)
 Read the table of contents from the disc.
int cdrom_read_sectors (void *buffer, int sector, int cnt)
 Read one or more sector from a CD-ROM.
uint32 cdrom_locate_data_track (CDROM_TOC *toc)
 Locate the sector of the data track.
int cdrom_cdda_play (uint32 start, uint32 end, uint32 loops, int mode)
 Play CDDA audio tracks or sectors.
int cdrom_cdda_pause ()
 Pause CDDA audio playback.
int cdrom_cdda_resume ()
 Resume CDDA audio playback after a pause.
int cdrom_spin_down ()
 Spin down the CD.
int cdrom_init ()
 Initialize the GD-ROM for reading CDs.
void cdrom_shutdown ()
 Shutdown the CD reading system.

Detailed Description

CD access to the GD-ROM drive.

This file contains the interface to the Dreamcast's GD-ROM drive. It is simply called cdrom.h and cdrom.c because, by design, you cannot directly use this code to read the high-density area of GD-ROMs. This is the way it always has been, and always will be.

The way things are set up, as long as you're using fs_iso9660 to access the CD, it will automatically detect and react to disc changes for you.

This file only facilitates reading raw sectors and doing other fairly low- level things with CDs. If you're looking for higher-level stuff, like normal file reading, consult with the stuff for the fs and for fs_iso9660.

Author:
Dan Potter
See also:
kos/fs.h
dc/fs_iso9660.h

Function Documentation

int cdrom_cdda_pause ( )

Pause CDDA audio playback.

Returns:
CD-ROM command responses
int cdrom_cdda_play ( uint32  start,
uint32  end,
uint32  loops,
int  mode 
)

Play CDDA audio tracks or sectors.

This function starts playback of CDDA audio.

Parameters:
startThe track or sector to start playback from.
endThe track or sector to end playback at.
loopsThe number of times to repeat (max of 15).
modeThe mode to play (see CDDA read modes).
Returns:
CD-ROM command responses
int cdrom_cdda_resume ( )

Resume CDDA audio playback after a pause.

Returns:
CD-ROM command responses
int cdrom_exec_cmd ( int  cmd,
void *  param 
)

Execute a CD-ROM command.

This function executes the specified command using the BIOS syscall for executing GD-ROM commands.

Parameters:
cmdThe command number to execute.
paramData to pass to the syscall.
Returns:
CD-ROM command responses
int cdrom_get_status ( int *  status,
int *  disc_type 
)

Get the status of the GD-ROM drive.

Parameters:
statusSpace to return the drive's status.
disc_typeSpace to return the type of disc in the drive.
Returns:
CD-ROM command responses
See also:
CD-ROM status values
CD-ROM drive disc types
int cdrom_init ( )

Initialize the GD-ROM for reading CDs.

This initializes the CD-ROM reading system, reactivating the drive and handling initial setup of the disc.

Return values:
0On success.
-1If cdrom_init() has already been called.
uint32 cdrom_locate_data_track ( CDROM_TOC toc)

Locate the sector of the data track.

This function will search the toc for the last entry that has a CTRL value of 4, and return its FAD address.

Parameters:
tocThe TOC to search through.
Returns:
The FAD of the track, or 0 if none is found.
int cdrom_read_sectors ( void *  buffer,
int  sector,
int  cnt 
)

Read one or more sector from a CD-ROM.

This function reads the specified number of sectors from the disc, starting where requested. This will respect the size of the sectors set with cdrom_set_sector_size(). The buffer must have enough space to store the specified number of sectors.

Parameters:
bufferSpace to store the read sectors.
sectorThe sector to start reading from.
cntThe number of sectors to read.
Returns:
CD-ROM command responses
int cdrom_read_toc ( CDROM_TOC toc_buffer,
int  session 
)

Read the table of contents from the disc.

This function reads the TOC from the specified session of the disc.

Parameters:
toc_bufferSpace to store the returned TOC in.
sessionThe session of the disc to read.
Returns:
CD-ROM command responses
int cdrom_reinit ( )

Re-initialize the GD-ROM drive.

This function is for reinitializing the GD-ROM drive after a disc change, or something of the like.

Returns:
CD-ROM command responses
void cdrom_set_sector_size ( int  size)

Set the sector size for read sectors.

This function sets the sector size that the cdrom_read_sectors() function will return. Be sure to set this to the correct value for the type of sectors you're trying to read. Common values are 2048 (for reading CD-ROM sectors) or 2352 (for reading raw sectors).

Parameters:
sizeThe size of the sector data.
void cdrom_shutdown ( )

Shutdown the CD reading system.

int cdrom_spin_down ( )

Spin down the CD.

This stops the disc in the drive from spinning until it is accessed again.

Returns:
CD-ROM command responses