📄 ecda.h
字号:
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
ulong CDAudio::getTrackLength(short track) {
ulong start, finish;
ushort CT;
CT = CDROMData.currentTrack;
setTrack(track);
start = CDROMData.trackPosition;
if (track < CDROMData.highAudio) {
setTrack (track + 1);
finish = CDROMData.trackPosition;
} else finish = CDROMData.endOfDisk;
setTrack(CT);
finish -= start;
return(finish);
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
void CDAudio::setTrack(short track) {
typedef struct trackData {
uchar mode;
uchar track;
ulong address;
uchar control;
} headData;
static struct IOCTLI * trayRequestPointers;
static struct trackData * trackDataPointers;
trayRequestPointers = (struct IOCTLI *) (CDDeviceReq.segment*16);
trackDataPointers = (struct trackData *) (CDDeviceExtra.segment*16);
memset (trayRequestPointers, 0, sizeof (struct IOCTLI));
memset (trackDataPointers, 0, sizeof (struct trackData));
trayRequestPointers->length = sizeof (struct IOCTLI);
trayRequestPointers->comcode = 3;
trayRequestPointers->address = CDDeviceExtra.segment<<16;
trayRequestPointers->bytes = 7;
trackDataPointers->mode = 0x0B;
trackDataPointers->track = track;
CDDeviceRequest();
CDROMData.error = trayRequestPointers->status;
CDROMData.trackPosition = HSG (trackDataPointers->address);
CDROMData.currentTrack = track;
CDROMData.trackType = trackDataPointers->control & TRACK_MASK;
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
void CDAudio::CDSeek (ulong location) {
typedef struct playRequest {
uchar length;
uchar subunit;
uchar comcode;
ushort status;
uchar unused[8];
uchar addressMode;
ulong transfer;
ushort sector;
ulong seekPos;
} playRequest;
uchar min, sec, frame;
static struct playRequest * playRequestPointers;
playRequestPointers = (struct playRequest *) (CDDeviceReq.segment*16);
memset (playRequestPointers, 0, sizeof (struct playRequest));
playRequestPointers->length = sizeof (struct playRequest);
playRequestPointers->comcode = 131;
playRequestPointers->seekPos = location;
CDDeviceRequest();
CDROMData.error = playRequestPointers->status;
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
void CDAudio::playAudio(ulong begin, ulong end) {
typedef struct playRequest {
uchar length;
uchar subunit;
uchar comcode;
ushort status;
uchar unused[8];
uchar addressMode;
ulong start;
ulong playLength;
} playRequest;
static struct playRequest * playRequestPointers;
playRequestPointers = (struct playRequest *) (CDDeviceReq.segment*16);
memset (playRequestPointers, 0, sizeof (struct playRequest));
playRequestPointers->length = sizeof (struct playRequest);
playRequestPointers->comcode = 132;
playRequestPointers->start = begin;
playRequestPointers->playLength = end-begin;
CDDeviceRequest();
CDROMData.error = playRequestPointers->status;
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
void CDAudio::stop (void) {
typedef struct stopRequest {
uchar length;
uchar subunit;
uchar comcode;
ushort status;
uchar unused[8];
} stopRequest;
static struct stopRequest * stopRequestPointers;
stopRequestPointers = (struct stopRequest *) (CDDeviceReq.segment*16);
memset (stopRequestPointers, 0, sizeof (struct stopRequest));
stopRequestPointers->length = sizeof (struct stopRequest);
stopRequestPointers->comcode = 133;
CDDeviceRequest();
CDROMData.error = stopRequestPointers->status;
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
void CDAudio::play(int track, int fullCD) {
setTrack(track);
CDSeek(CDROMData.trackPosition);
if ((fullCD == WHOLE_CD)&&(track<CDROMData.highAudio)) {
playAudio(CDROMData.trackPosition, CDROMData.endOfDisk);
} else {
// A crude hack.. ;-)
setTrack(fullCD);
long end = CDROMData.trackPosition;
setTrack(track);
playAudio(CDROMData.trackPosition, end);
}
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
void CDAudio::CDStatus(void) {
typedef struct CDData {
uchar mode;
ulong status;
} CDData;
static struct IOCTLI * trayRequestPointers;
static struct CDData * CDDataPointers;
trayRequestPointers = (struct IOCTLI *) (CDDeviceReq.segment*16);
CDDataPointers = (struct CDData *) (CDDeviceExtra.segment*16);
memset (trayRequestPointers, 0, sizeof (struct IOCTLI));
memset (CDDataPointers, 0, sizeof (struct CDData));
trayRequestPointers->length = sizeof (struct IOCTLI);
trayRequestPointers->comcode = 3;
trayRequestPointers->address = CDDeviceExtra.segment<<16;
trayRequestPointers->bytes = 5;
CDDataPointers->mode = 0x06;
CDDeviceRequest();
CDROMData.error = trayRequestPointers->status;
CDROMData.status = CDDataPointers->status;
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
ulong CDAudio::headPosition(void) {
typedef struct headData {
uchar mode;
uchar adrMode;
ulong address;
} headData;
static struct IOCTLI * trayRequestPointers;
static struct headData * headDataPointers;
trayRequestPointers = (struct IOCTLI *) (CDDeviceReq.segment*16);
headDataPointers = (struct headData *) (CDDeviceExtra.segment*16);
memset (trayRequestPointers, 0, sizeof (struct IOCTLI));
memset (headDataPointers, 0, sizeof (struct headData));
trayRequestPointers->length = sizeof (struct IOCTLI);
trayRequestPointers->comcode = 3;
trayRequestPointers->address = CDDeviceExtra.segment<<16;
trayRequestPointers->bytes = 6;
headDataPointers->mode = 0x01;
headDataPointers->adrMode = 0x00;
CDDeviceRequest();
CDROMData.error = trayRequestPointers->status;
return (headDataPointers->address);
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
void CDAudio::getVolume(void) {
static struct IOCTLI * trayRequestPointers;
static struct CDVolumeInfo * CDVolumePointers;
trayRequestPointers = (struct IOCTLI *) (CDDeviceReq.segment*16);
CDVolumePointers = (struct CDVolumeInfo *) (CDDeviceExtra.segment*16);
memset (trayRequestPointers, 0, sizeof (struct IOCTLI));
trayRequestPointers->length = sizeof (struct IOCTLI);
trayRequestPointers->comcode = 3;
trayRequestPointers->address = CDDeviceExtra.segment<<16;
trayRequestPointers->bytes = 9;
CDVolumePointers->mode = 0x04;
CDDeviceRequest();
memcpy(&CDVolumeInfo, CDVolumePointers, sizeof(struct CDVolumeInfo));
CDROMData.error = trayRequestPointers->status;
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
void CDAudio::setVolume(uchar v1, uchar v2, uchar v3, uchar v4) {
static struct IOCTLI * trayRequestPointers;
static struct CDVolumeInfo * CDVolumePointers;
trayRequestPointers = (struct IOCTLI *) (CDDeviceReq.segment*16);
CDVolumePointers = (struct CDVolumeInfo *) (CDDeviceExtra.segment*16);
CDVolumeInfo.volume0 = v1;
CDVolumeInfo.volume1 = v2;
CDVolumeInfo.volume2 = v3;
CDVolumeInfo.volume3 = v4;
memset (trayRequestPointers, 0, sizeof (struct IOCTLI));
memcpy (CDVolumePointers, &CDVolumeInfo, sizeof(struct CDVolumeInfo));
trayRequestPointers->length = sizeof (struct IOCTLI);
trayRequestPointers->comcode = 12;
trayRequestPointers->address = CDDeviceExtra.segment<<16;
trayRequestPointers->bytes = 9;
CDVolumePointers->mode = 0x03;
CDDeviceRequest();
CDROMData.error = trayRequestPointers->status;
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
short CDAudio::getUPC(void) {
typedef struct UPCData {
uchar mode;
uchar adr;
uchar UPC[17];
uchar zero;
uchar aFrame;
} UPCData;
static struct IOCTLI * trayRequestPointers;
static struct UPCData * UPCDataPointers;
trayRequestPointers = (struct IOCTLI *) (CDDeviceReq.segment*16);
UPCDataPointers = (struct UPCData *) (CDDeviceExtra.segment*16);
memset (trayRequestPointers, 0, sizeof (struct IOCTLI));
memset (UPCDataPointers, 0, sizeof (struct UPCData));
trayRequestPointers->length = sizeof (struct IOCTLI);
trayRequestPointers->comcode = 3;
trayRequestPointers->address = CDDeviceExtra.segment<<16;
trayRequestPointers->bytes = 11;
UPCDataPointers->mode = 0x0E;
UPCDataPointers->adr = 0x02;
CDDeviceRequest();
CDROMData.error = trayRequestPointers->status;
if (UPCDataPointers->adr == 0)
memset(&UPCDataPointers->UPC,0,7);
memcpy(&CDROMData.UPC[0], &UPCDataPointers->UPC[0],7);
return 1;
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
void CDAudio::info(void) {
cout << "Endeavour CD-Audio INTERFACE\n";
cout << "哪哪哪哪哪哪哪哪哪哪哪哪哪哪\n\n";
cout << "Version: " << VERSION << "\n";
cout << "Build: " << BUILD << "\n";
}
// 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -