diff --git a/src/dos/cdrom_aspi_win32.cpp b/src/dos/cdrom_aspi_win32.cpp index 33d8c2a2..9a9e69c2 100644 --- a/src/dos/cdrom_aspi_win32.cpp +++ b/src/dos/cdrom_aspi_win32.cpp @@ -675,13 +675,6 @@ bool CDROM_Interface_Aspi::ReadSectors(void* buffer, bool raw, unsigned long sec memset(&s,0,sizeof(s)); - // FIXME : Is there a method to get cooked sectors with aspi ??? - // all combination i tried were failing. - // so we have to allocate extra mem and copy data to buffer if in cooked mode - char* inPtr = (char*)buffer; - if (!raw) inPtr = new char[num*2352]; - if (!inPtr) return false; - s.SRB_Cmd = SC_EXEC_SCSI_CMD; s.SRB_HaId = haId; s.SRB_Target = target; @@ -689,8 +682,8 @@ bool CDROM_Interface_Aspi::ReadSectors(void* buffer, bool raw, unsigned long sec s.SRB_Flags = SRB_DIR_IN | SRB_EVENT_NOTIFY; s.SRB_SenseLen = SENSE_LEN; - s.SRB_BufLen = 2352*num; //num*(raw?2352:2048); - s.SRB_BufPointer = (BYTE FAR*)inPtr; + s.SRB_BufLen = raw?2352*num:2048*num; + s.SRB_BufPointer = (BYTE FAR*)buffer; s.SRB_CDBLen = 12; s.SRB_PostProc = (LPVOID)hEvent; @@ -712,24 +705,7 @@ bool CDROM_Interface_Aspi::ReadSectors(void* buffer, bool raw, unsigned long sec CloseHandle(hEvent); - if (s.SRB_Status!=SS_COMP) { - if (!raw) delete[] inPtr; - return false; - } - - if (!raw) { - // copy user data to buffer - char* source = inPtr; - source+=16; // jump 16 bytes - char* outPtr = (char*)buffer; - for (unsigned long i=0; i #include // Ioctl stuff +#include #include "ntddcdrm.h" // Ioctl stuff #include "cdrom.h" @@ -207,35 +208,27 @@ bool CDROM_Interface_Ioctl::LoadUnloadMedia(bool unload) bool CDROM_Interface_Ioctl::ReadSectors(void* buffer, bool raw, unsigned long sector, unsigned long num) { - // TODO : How to copy cooked without current overhead ? - BOOL bStat; - DWORD byteCount; - RAW_READ_INFO in; - char* inPtr; - - in.DiskOffset.LowPart = sector; - in.DiskOffset.HighPart = 0; - in.SectorCount = num; - in.TrackMode = CDDA; - - if (!raw) inPtr = new char[num*RAW_SECTOR_SIZE]; - else inPtr = (char*)buffer; - - bStat = DeviceIoControl(hIOCTL,IOCTL_CDROM_RAW_READ, &in, sizeof(in), - inPtr, num*RAW_SECTOR_SIZE, &byteCount,NULL); + BOOL bStat; + DWORD byteCount = 0; + Open(); if (!raw) { - char* source = inPtr; - source+=16; // jump 16 bytes - char* outPtr = (char*)buffer; - for (unsigned long i=0; i0); }