287 lines
7.7 KiB
C
287 lines
7.7 KiB
C
/* $PSLibId: Run-time Library Release 4.7$ */
|
|
/*
|
|
* libds.h
|
|
* Copyright(C) 1996 1997, Sony Computer Entertainment Inc.
|
|
* All Rights Reserved.
|
|
*/
|
|
|
|
#ifndef _LIBDS_H_
|
|
#define _LIBDS_H_
|
|
|
|
#include <kernel.h>
|
|
|
|
/*
|
|
* CD-ROM Mode (used int CdlSetmode)
|
|
*/
|
|
#define DslModeStream 0x100 /* Normal Streaming */
|
|
#define DslModeStream2 0x120 /* SUB HEADER information includes */
|
|
#define DslModeSpeed 0x80 /* 0: normal speed 1: double speed */
|
|
#define DslModeRT 0x40 /* 0: ADPCM off 1: ADPCM on */
|
|
#define DslModeSize1 0x20 /* 0: 2048 byte 1: 2340byte */
|
|
#define DslModeSize0 0x10 /* 0: - 1: 2328byte */
|
|
#define DslModeSF 0x08 /* 0: Channel off 1: Channel on */
|
|
#define DslModeRept 0x04 /* 0: Report off 1: Report on */
|
|
#define DslModeAP 0x02 /* 0: AutoPause off 1: AutoPause on */
|
|
#define DslModeDA 0x01 /* 0: CD-DA off 1: CD-DA on */
|
|
|
|
/*
|
|
* Status contents
|
|
*/
|
|
#define DslStatPlay 0x80 /* playing CD-DA */
|
|
#define DslStatSeek 0x40 /* seeking */
|
|
#define DslStatRead 0x20 /* reading data sectors */
|
|
#define DslStatShellOpen 0x10 /* once shell open */
|
|
#define DslStatSeekError 0x04 /* seek error detected */
|
|
#define DslStatStandby 0x02 /* spindle motor rotating */
|
|
#define DslStatError 0x01 /* command error detected */
|
|
|
|
/*
|
|
* Macros for DsGetDiskType()
|
|
*/
|
|
#define DslStatNoDisk 0x01
|
|
#define DslOtherFormat 0x02
|
|
#define DslCdromFormat 0x04
|
|
|
|
/*
|
|
* CD-ROM Primitive Commands
|
|
*/
|
|
#define DslNop 0x01 /* no operation */
|
|
#define DslSetloc 0x02 /* set head position */
|
|
#define DslPlay 0x03 /* play CD-DA */
|
|
#define DslForward 0x04 /* forward DA play */
|
|
#define DslBackward 0x05 /* backward DA play */
|
|
#define DslReadN 0x06 /* read data with retry */
|
|
#define DslStandby 0x07 /* start spindle motor */
|
|
#define DslStop 0x08 /* stop spindle motor */
|
|
#define DslPause 0x09 /* pause */
|
|
#define DslMute 0x0b /* mute on */
|
|
#define DslDemute 0x0c /* mute off */
|
|
#define DslSetfilter 0x0d /* set subheader filter */
|
|
#define DslSetmode 0x0e /* set mode */
|
|
#define DslGetparam 0x0f /* get mode */
|
|
#define DslGetlocL 0x10 /* get head position (data sector) */
|
|
#define DslGetlocP 0x11 /* get head position (DA sector) */
|
|
#define DslGetTN 0x13 /* get number of TOC */
|
|
#define DslGetTD 0x14 /* get TOC data */
|
|
#define DslSeekL 0x15 /* logical seek */
|
|
#define DslSeekP 0x16 /* phisical seek */
|
|
#define DslReadS 0x1B /* read data without retry */
|
|
|
|
/*
|
|
* Interrupts
|
|
*/
|
|
#define DslNoIntr 0x00 /* No interrupt */
|
|
#define DslDataReady 0x01 /* Data Ready */
|
|
#define DslComplete 0x02 /* Command Complete */
|
|
#define DslAcknowledge 0x03 /* Acknowledge (reserved) */
|
|
#define DslDataEnd 0x04 /* End of Data Detected */
|
|
#define DslDiskError 0x05 /* Error Detected */
|
|
|
|
#define DslNoResult 0x06
|
|
#define DslFinished 0x07
|
|
|
|
#ifndef btoi
|
|
#define btoi( b ) ( ( b ) / 16 * 10 + ( b ) % 16 )
|
|
#endif
|
|
#ifndef itob
|
|
#define itob( i ) ( ( i ) / 10 * 16 + ( i ) % 10 )
|
|
#endif
|
|
|
|
/*
|
|
* Position
|
|
*/
|
|
#define DslMAXTOC 100
|
|
|
|
/*
|
|
* Callback
|
|
*/
|
|
typedef void ( *DslCB )( u_char, u_char* );
|
|
typedef void ( *DslRCB )( u_char, u_char*, u_long* );
|
|
|
|
/*
|
|
* Location
|
|
*/
|
|
typedef struct {
|
|
u_char minute; /* minute (BCD) */
|
|
u_char second; /* second (BCD) */
|
|
u_char sector; /* sector (BCD) */
|
|
u_char track; /* track (void) */
|
|
} DslLOC;
|
|
|
|
/*
|
|
* ADPCM Filter
|
|
*/
|
|
typedef struct {
|
|
u_char file; /* file ID (always 1) */
|
|
u_char chan; /* channel ID */
|
|
u_short pad;
|
|
} DslFILTER;
|
|
|
|
/*
|
|
* Attenuator
|
|
*/
|
|
typedef struct {
|
|
u_char val0; /* volume for CD(L) -> SPU (L) */
|
|
u_char val1; /* volume for CD(L) -> SPU (R) */
|
|
u_char val2; /* volume for CD(R) -> SPU (L) */
|
|
u_char val3; /* volume for CD(R) -> SPU (R) */
|
|
} DslATV;
|
|
|
|
/*
|
|
* Low Level File System for DsSearchFile()
|
|
*/
|
|
#define DslMAXFILE 64 /* max number of files in a directory */
|
|
#define DslMAXDIR 128 /* max number of total directories */
|
|
#define DslMAXLEVEL 8 /* max levels of directories */
|
|
|
|
typedef struct {
|
|
DslLOC pos; /* file location */
|
|
u_long size; /* file size */
|
|
char name[ 16 ]; /* file name (body) */
|
|
} DslFILE;
|
|
|
|
#ifndef _LIBCD_H_
|
|
/*
|
|
* Streaming Structures
|
|
*/
|
|
typedef struct {
|
|
u_short id;
|
|
u_short type;
|
|
u_short secCount;
|
|
u_short nSectors;
|
|
u_long frameCount;
|
|
u_long frameSize;
|
|
|
|
u_short width;
|
|
u_short height;
|
|
u_long dummy1;
|
|
u_long dummy2;
|
|
DslLOC loc;
|
|
} StHEADER; /* CD-ROM STR structure */
|
|
|
|
#define StFREE 0x0000
|
|
#define StREWIND 0x0001
|
|
#define StCOMPLETE 0x0002
|
|
#define StBUSY 0x0003
|
|
#define StLOCK 0x0004
|
|
|
|
#define EDC 0
|
|
#define SECTOR_SIZE ( 512 ) /* Sector Size (word) */
|
|
#define HEADER_SIZE ( 8 ) /* Header Size (word) */
|
|
|
|
#define StSTATUS 0x00
|
|
#define StVER 0x00
|
|
#define StTYPE 0x01
|
|
#define StSECTOR_OFFSET 0x02
|
|
#define StSECTOR_SIZE 0x03
|
|
#define StFRAME_NO 0x04
|
|
#define StFRAME_SIZE 0x06
|
|
|
|
#define StMOVIE_WIDTH 0x08
|
|
#define StMOVIE_HEIGHT 0x09
|
|
|
|
/*
|
|
* streaming library prototype declarations */
|
|
|
|
#if defined(_LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus)
|
|
extern "C" {
|
|
#endif
|
|
|
|
void StSetRing( u_long* ring_addr, u_long ring_size );
|
|
void StClearRing( void );
|
|
void StUnSetRing( void );
|
|
void StSetStream( u_long mode, u_long start_frame, u_long end_frame,
|
|
void ( *func1 )(), void ( *func2 )() );
|
|
void StSetEmulate( u_long* addr, u_long mode, u_long start_frame,
|
|
u_long end_frame, void ( *func1 )(), void ( *func2 )() );
|
|
u_long StFreeRing( u_long* base );
|
|
u_long StGetNext( u_long** addr, u_long** header );
|
|
u_long StGetNextS( u_long** addr, u_long** header );
|
|
u_short StNextStatus( u_long** addr, u_long** header );
|
|
void StRingStatus( short* free_sectors, short* over_sectors );
|
|
void StSetMask( u_long mask, u_long start, u_long end );
|
|
void StCdInterrupt( void );
|
|
int StGetBackloc( DslLOC* loc );
|
|
int StSetChannel( u_long channel );
|
|
|
|
#if defined(_LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus)
|
|
}
|
|
#endif
|
|
|
|
#endif /* _LIBCD_H_ */
|
|
|
|
/* **** system status **** */
|
|
|
|
#define DslReady 1
|
|
#define DslBusy 2
|
|
#define DslNoCD 3
|
|
|
|
/* **** maximum number of commands that can be added to the queue **** */
|
|
#define DslMaxCOMMANDS 8
|
|
|
|
/***** maximum number of command execution results **** */
|
|
#define DslMaxRESULTS 8
|
|
|
|
/***** DS function prototype **** */
|
|
|
|
#if defined(_LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus)
|
|
extern "C" {
|
|
#endif
|
|
|
|
int DsInit( void );
|
|
int DsReset( void );
|
|
void DsClose( void );
|
|
int DsCommand( u_char com, u_char* param, DslCB cbsync, int count );
|
|
int DsPacket( u_char mode, DslLOC* pos, u_char com, DslCB func, int count );
|
|
DslCB DsSyncCallback( DslCB func );
|
|
DslCB DsReadyCallback( DslCB func );
|
|
int DsSync( int id, u_char* result );
|
|
int DsReady( u_char* result );
|
|
void DsFlush( void );
|
|
int DsSystemStatus( void );
|
|
int DsQueueLen( void );
|
|
u_char DsStatus( void );
|
|
int DsShellOpen( void );
|
|
|
|
int DsMix( DslATV* vol );
|
|
int DsGetSector( void* madr, int size );
|
|
int DsGetSector2( void* madr, int size );
|
|
int DsGetToc( DslLOC* loc );
|
|
void ( *DsDataCallback( void ( *func )() ) );
|
|
int DsDataSync( int mode );
|
|
DslLOC* DsIntToPos( int i, DslLOC* p );
|
|
int DsPosToInt( DslLOC* p );
|
|
int DsSetDebug( int level );
|
|
DslLOC* DsLastPos( DslLOC* p );
|
|
u_char DsLastCom( void );
|
|
|
|
char* DsComstr( u_char com );
|
|
char* DsIntstr( u_char intr );
|
|
|
|
int DsStartReadySystem( DslRCB func, int count );
|
|
void DsEndReadySystem( void );
|
|
int DsReadySystemMode( int mode );
|
|
|
|
int DsControlF( u_char com, u_char* param );
|
|
int DsControl( u_char com, u_char* param, u_char* result );
|
|
int DsControlB( u_char com, u_char* param, u_char* result );
|
|
|
|
int DsRead( DslLOC* pos, int sectors, u_long* buf, int mode );
|
|
int DsReadSync( u_char* result );
|
|
DslCB DsReadCallback( DslCB func );
|
|
void DsReadBreak( void );
|
|
int DsRead2( DslLOC* pos, int mode );
|
|
|
|
DslFILE* DsSearchFile( DslFILE* fp, char* name );
|
|
int DsReadFile( char* file, u_long* addr, int nbyte );
|
|
struct EXEC* DsReadExec( char* file );
|
|
int DsPlay( int mode, int* tracks, int offset );
|
|
|
|
int DsGetDiskType( void );
|
|
|
|
#if defined(_LANGUAGE_C_PLUS_PLUS)||defined(__cplusplus)||defined(c_plusplus)
|
|
}
|
|
#endif
|
|
|
|
#endif /* _LIBDS_H_ */
|