From e43f83a68acb96e7b014b37d74455cc112878322 Mon Sep 17 00:00:00 2001 From: Patryk Obara Date: Sun, 1 Dec 2019 12:37:33 +0100 Subject: [PATCH] Remove ASPI CD-ROM interface ASPI was supported by Microsoft only for Windows 95, 98 and, ME. Adaptec supported this interface going forward for Windows NT, 2000, and XP (32-bit only). --- README | 12 +- docs/dosbox.1 | 4 +- src/dos/Makefile.am | 4 +- src/dos/cdrom.h | 51 --- src/dos/cdrom_aspi_win32.cpp | 767 ----------------------------------- src/dos/dos_mscdex.cpp | 6 - src/dos/dos_programs.cpp | 6 +- src/dos/wnaspi32.h | 354 ---------------- vs/dosbox.vcxproj | 2 - 9 files changed, 8 insertions(+), 1198 deletions(-) delete mode 100644 src/dos/cdrom_aspi_win32.cpp delete mode 100644 src/dos/wnaspi32.h diff --git a/README b/README index eb49726f..b03b43ae 100644 --- a/README +++ b/README @@ -143,8 +143,6 @@ CD-ROM: My CD-ROM doesn't work. - mount d f:\ -t cdrom -ioctl_mci To force ioctl-only access (Windows-only): - mount d f:\ -t cdrom -ioctl_dio - To enable low-level aspi-support (win98 with aspi-layer installed): - - mount d f:\ -t cdrom -aspi explanation: - d driveletter you will get in DOSBox (d is the best, don't change it!) @@ -161,7 +159,7 @@ CD-ROM: The game/application can't find its CD-ROM. MSCDEX interface required by DOS games to interface with CD-ROMs. Also try adding the correct label (-label LABEL) to the mount command, where LABEL is the CD-label (volume ID) of the CD-ROM. - Under Windows you can specify -ioctl, -aspi or -noioctl. Look at the + Under Windows you can specify -ioctl or -noioctl. Look at the description of the mount command in Section 4: "Internal programs" for their meaning and the additional audio-CD related options -ioctl_dx, -ioctl_mci, -ioctl_dio. @@ -484,7 +482,7 @@ To get a list of the internal commands type "HELP" at the prompt. In addition, the following commands are available: MOUNT "Emulated Drive letter" "Real Drive or Directory" - [-t type] [-aspi] [-ioctl] [-noioctl] [-usecd number] [-size drivesize] + [-t type] [-ioctl] [-noioctl] [-usecd number] [-size drivesize] [-label drivelabel] [-freesize size_in_mb] [-freesize size_in_kb (floppies)] MOUNT -cd @@ -522,17 +520,13 @@ MOUNT -u "Emulated Drive letter" if the CD-ROM label isn't read correctly (useful when a program can't find its CD-ROM). If you don't specify a label and no lowlevel support is selected (that is omitting the -usecd # - and/or -aspi parameters, or specifying -noioctl): + parameter, or specifying -noioctl): For Windows: label is extracted from "Real Drive". For Linux: label is set to NO_LABEL. If you do specify a label, this label will be kept as long as the drive is mounted. It will not be updated !! - -aspi - Forces use of the aspi layer. Only valid if mounting a CD-ROM under - Windows systems with an ASPI-Layer. - -ioctl (automatic selection of the CD audio interface) -ioctl_dx (digital audio extraction used for CD audio) -ioctl_dio (ioctl calls used for CD audio) diff --git a/docs/dosbox.1 b/docs/dosbox.1 index 72c2459b..e64f3653 100644 --- a/docs/dosbox.1 +++ b/docs/dosbox.1 @@ -1,5 +1,5 @@ .\" Hey, EMACS: -*- nroff -*- -.TH DOSBOX 1 "Sep 08, 2015" +.TH DOSBOX 1 "Nov 29, 2019" .\" Please adjust this date whenever revising the manpage. .SH NAME dosbox \- an x86/DOS emulator with sound/graphics @@ -162,7 +162,7 @@ Sets the amount of free space available on a drive in MB's. This is a more .RI "Sets the name of the drive to " drivelabel ". Needed on some" systems if the cd label isn't read correctly. Useful when a program can't find its cdrom. If you don't specify a label and no -.RB "lowlevel support is selected (" "\-usecd #" " and/or " "\-ioctl/aspi" "):" +.RB "lowlevel support is selected (" "\-usecd #" " and/or " "\-ioctl" "):" .RS .LP For win32: label is extracted from "Real Drive". diff --git a/src/dos/Makefile.am b/src/dos/Makefile.am index bb538d46..792cb1ec 100644 --- a/src/dos/Makefile.am +++ b/src/dos/Makefile.am @@ -1,10 +1,10 @@ AM_CPPFLAGS = -I$(top_srcdir)/include noinst_LIBRARIES = libdos.a -EXTRA_DIST = scsidefs.h wnaspi32.h dos_codepages.h dos_keyboard_layout_data.h +EXTRA_DIST = scsidefs.h dos_codepages.h dos_keyboard_layout_data.h libdos_a_SOURCES = dos.cpp dos_devices.cpp dos_execute.cpp dos_files.cpp dos_ioctl.cpp dos_memory.cpp \ dos_misc.cpp dos_classes.cpp dos_programs.cpp dos_tables.cpp \ drives.cpp drives.h drive_virtual.cpp drive_local.cpp drive_cache.cpp drive_fat.cpp \ drive_iso.cpp dev_con.h dos_mscdex.cpp dos_keyboard_layout.cpp \ - cdrom.h cdrom.cpp cdrom_ioctl_win32.cpp cdrom_aspi_win32.cpp cdrom_ioctl_linux.cpp cdrom_image.cpp \ + cdrom.h cdrom.cpp cdrom_ioctl_win32.cpp cdrom_ioctl_linux.cpp cdrom_image.cpp \ drive_overlay.cpp diff --git a/src/dos/cdrom.h b/src/dos/cdrom.h index 60c25caa..d16eb558 100644 --- a/src/dos/cdrom.h +++ b/src/dos/cdrom.h @@ -20,8 +20,6 @@ #ifndef __CDROM_INTERFACE__ #define __CDROM_INTERFACE__ -#define MAX_ASPI_CDROM 5 - #include #include #include @@ -49,7 +47,6 @@ enum { CDROM_USE_SDL, - CDROM_USE_ASPI, CDROM_USE_IOCTL_DIO, CDROM_USE_IOCTL_DX, CDROM_USE_IOCTL_MCI @@ -286,55 +283,7 @@ private: #endif #include -#include "wnaspi32.h" // Aspi stuff -class CDROM_Interface_Aspi : public CDROM_Interface -{ -public: - CDROM_Interface_Aspi (void); - virtual ~CDROM_Interface_Aspi(void); - - bool SetDevice (char* path, int forceCD); - - bool GetUPC (unsigned char& attr, char* upc); - - bool GetAudioTracks (int& stTrack, int& end, TMSF& leadOut); - bool GetAudioTrackInfo (int track, TMSF& start, unsigned char& attr); - bool GetAudioSub (unsigned char& attr, unsigned char& track, unsigned char& index, TMSF& relPos, TMSF& absPos); - bool GetAudioStatus (bool& playing, bool& pause); - bool GetMediaTrayStatus (bool& mediaPresent, bool& mediaChanged, bool& trayOpen); - - bool PlayAudioSector (unsigned long start,unsigned long len); - bool PauseAudio (bool resume); - bool StopAudio (void); - void ChannelControl (TCtrl ctrl) { return; }; - - bool ReadSectors (PhysPt buffer, bool raw, unsigned long sector, unsigned long num); - - bool LoadUnloadMedia (bool unload); - -private: - DWORD GetTOC (LPTOC toc); - HANDLE OpenIOCTLFile (char cLetter, BOOL bAsync); - void GetIOCTLAdapter (HANDLE hF,int * iDA,int * iDT,int * iDL); - bool ScanRegistryFindKey (HKEY& hKeyBase); - bool ScanRegistry (HKEY& hKeyBase); - BYTE GetHostAdapter (char* hardwareID); - bool GetVendor (BYTE HA_num, BYTE SCSI_Id, BYTE SCSI_Lun, char* szBuffer); - - // ASPI stuff - BYTE haId; - BYTE target; - BYTE lun; - char letter; - - // Windows stuff - HINSTANCE hASPI; - HANDLE hEvent; // global event - DWORD (*pGetASPI32SupportInfo) (void); // ptrs to aspi funcs - DWORD (*pSendASPI32Command) (LPSRB); - TMSF oldLeadOut; -}; class CDROM_Interface_Ioctl : public CDROM_Interface { diff --git a/src/dos/cdrom_aspi_win32.cpp b/src/dos/cdrom_aspi_win32.cpp deleted file mode 100644 index 66b0d013..00000000 --- a/src/dos/cdrom_aspi_win32.cpp +++ /dev/null @@ -1,767 +0,0 @@ -/* - * Copyright (C) 2002-2019 The DOSBox Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#include "cdrom.h" - -#if defined (WIN32) - -#include - -#include "support.h" - -//Are actually system includes but leave for now -#include "wnaspi32.h" - -#if defined (_MSC_VER) -#include // Ioctl stuff -#include -#include // Ioctl stuff -#elif (defined __MINGW64_VERSION_MAJOR) -#include // Ioctl stuff -#include // Ioctl stuff -#include -#else -#include "ddk/ntddcdrm.h" // Ioctl stuff -#include "ddk/ntddscsi.h" -#endif - -#include "scsidefs.h" - -// always use a buffer of the maximum struct size (like the union of all 'SRB_*' struct types) -// Thanx SaPu -typedef union { - SRB_HAInquiry hainquiry; - SRB_GDEVBlock gdevblock; - SRB_ExecSCSICmd execscsicmd; - SRB_Abort abort; - SRB_BusDeviceReset busdevicereset; - SRB_GetDiskInfo getdiskinfo; - SRB_RescanPort rescanport; - SRB_GetSetTimeouts getsettimeouts; -} ASPI_SRB; - -// ***************************************************************** -// Windows ASPI functions (should work for all WIN with ASPI layer) -// ***************************************************************** - -CDROM_Interface_Aspi::CDROM_Interface_Aspi(void) -{ - hASPI = NULL; - hEvent = NULL; - pGetASPI32SupportInfo = NULL; - pSendASPI32Command = NULL; - memset(&oldLeadOut,0,sizeof(oldLeadOut)); -}; - -CDROM_Interface_Aspi::~CDROM_Interface_Aspi(void) -{ - // Stop Audio - StopAudio(); - - pGetASPI32SupportInfo = NULL; // clear funcs - pSendASPI32Command = NULL; - - if (hASPI) { // free aspi - FreeLibrary(hASPI); - hASPI=NULL; - } -}; - -bool GetRegistryValue(HKEY& hKey,char* valueName, char* buffer, ULONG bufferSize) -// hKey has to be open -{ - // Read subkey - ULONG valType; - ULONG result; - result = RegQueryValueEx(hKey,valueName,NULL,&valType,(unsigned char*)&buffer[0],&bufferSize); - return (result == ERROR_SUCCESS); -}; - -BYTE CDROM_Interface_Aspi::GetHostAdapter(char* hardwareID) -{ - ASPI_SRB sh; - ASPI_SRB sd; - DWORD d = pGetASPI32SupportInfo(); - int cnt = LOBYTE(LOWORD(d)); - int i,j,k,max; - - for(i=0; i4)) { - if (GetDriveType(path)==DRIVE_CDROM) { - // WIN XP/NT/2000 - int iDA,iDT,iDL; - letter = path[0]; - HANDLE hF = OpenIOCTLFile(letter,FALSE); - GetIOCTLAdapter(hF,&iDA,&iDT,&iDL); - CloseHandle(hF); - // Set SCSI IDs - haId = iDA; - target = iDT; - lun = iDL; - return true; - } - } else { - // win 95/98/ME have to scan the registry... - // lets hope the layout is always the same... i dunno... - char key[2048]; - HKEY hKeyBase; - bool found = false; - strcpy(key,"ENUM\\SCSI"); - if (RegOpenKeyEx (HKEY_LOCAL_MACHINE,key,0,KEY_READ,&hKeyBase)==ERROR_SUCCESS) { - found = ScanRegistry(hKeyBase); - }; - RegCloseKey(hKeyBase); - return found; - } - return false; -}; - -bool CDROM_Interface_Aspi::GetAudioTracks(int& stTrack, int& endTrack, TMSF& leadOut) -{ - TOC toc; - if (GetTOC((LPTOC)&toc) == SS_COMP) { - stTrack = toc.cFirstTrack; - endTrack = toc.cLastTrack; - leadOut.min = (unsigned char)(toc.tracks[endTrack].lAddr >> 8) &0xFF; - leadOut.sec = (unsigned char)(toc.tracks[endTrack].lAddr >> 16) &0xFF; - leadOut.fr = (unsigned char)(toc.tracks[endTrack].lAddr >> 24) &0xFF; - return true; - } - return false; -}; - -bool CDROM_Interface_Aspi::GetAudioTrackInfo (int track, TMSF& start, unsigned char& attr) -{ - TOC toc; - if (GetTOC((LPTOC)&toc) == SS_COMP) { - start.min = (unsigned char)(toc.tracks[track-1].lAddr >> 8) &0xFF; - start.sec = (unsigned char)(toc.tracks[track-1].lAddr >> 16) &0xFF; - start.fr = (unsigned char)(toc.tracks[track-1].lAddr >> 24) &0xFF; - attr = (toc.tracks[track-1].cAdrCtrl << 4) & 0xEF; - return true; - }; - return false; -}; - -HANDLE CDROM_Interface_Aspi::OpenIOCTLFile(char cLetter,BOOL bAsync) -{ - HANDLE hF; - char szFName[16]; - OSVERSIONINFO ov; - DWORD dwFlags; - DWORD dwIOCTLAttr; -// if(bAsync) dwIOCTLAttr=FILE_FLAG_OVERLAPPED; -// else - dwIOCTLAttr=0; - - memset(&ov,0,sizeof(OSVERSIONINFO)); - ov.dwOSVersionInfoSize=sizeof(OSVERSIONINFO); - GetVersionEx(&ov); - - if ((ov.dwPlatformId==VER_PLATFORM_WIN32_NT) && (ov.dwMajorVersion>4)) - dwFlags = GENERIC_READ|GENERIC_WRITE; // add gen write on W2k/XP - else - dwFlags = GENERIC_READ; - - wsprintf(szFName, "\\\\.\\%c:",cLetter); - - hF=CreateFile(szFName,dwFlags,FILE_SHARE_READ, // open drive - NULL,OPEN_EXISTING,dwIOCTLAttr,NULL); - - if (hF==INVALID_HANDLE_VALUE) { - dwFlags^=GENERIC_WRITE; // mmm... no success - hF=CreateFile(szFName,dwFlags,FILE_SHARE_READ, // -> open drive again - NULL,OPEN_EXISTING,dwIOCTLAttr,NULL); - if (hF==INVALID_HANDLE_VALUE) return NULL; - } - return hF; -} - -void CDROM_Interface_Aspi::GetIOCTLAdapter(HANDLE hF,int * iDA,int * iDT,int * iDL) -{ - char szBuf[1024]; - PSCSI_ADDRESS pSA; - DWORD dwRet; - - *iDA=*iDT=*iDL=-1; - if(hF==NULL) return; - - memset(szBuf,0,1024); - - pSA=(PSCSI_ADDRESS)szBuf; - pSA->Length=sizeof(SCSI_ADDRESS); - - if(!DeviceIoControl(hF,IOCTL_SCSI_GET_ADDRESS,NULL, - 0,pSA,sizeof(SCSI_ADDRESS), - &dwRet,NULL)) - return; - - *iDA = pSA->PortNumber; - *iDT = pSA->TargetId; - *iDL = pSA->Lun; -} - -DWORD CDROM_Interface_Aspi::GetTOC(LPTOC toc) -{ -// SRB_ExecSCSICmd s; - ASPI_SRB s; - DWORD dwStatus; - - hEvent = CreateEvent(NULL,TRUE,FALSE,NULL); - - memset(&s,0,sizeof(s)); - - s.execscsicmd.SRB_Cmd = SC_EXEC_SCSI_CMD; - s.execscsicmd.SRB_HaId = haId; - s.execscsicmd.SRB_Target = target; - s.execscsicmd.SRB_Lun = lun; - s.execscsicmd.SRB_Flags = SRB_DIR_IN | SRB_EVENT_NOTIFY; - s.execscsicmd.SRB_BufLen = sizeof(*toc); - s.execscsicmd.SRB_BufPointer = (BYTE FAR *)toc; - s.execscsicmd.SRB_SenseLen = SENSE_LEN; - s.execscsicmd.SRB_CDBLen = 0x0A; - s.execscsicmd.SRB_PostProc = (LPVOID)hEvent; - s.execscsicmd.CDBByte[0] = SCSI_READ_TOC; - s.execscsicmd.CDBByte[1] = 0x02; // 0x02 for MSF - s.execscsicmd.CDBByte[7] = 0x03; - s.execscsicmd.CDBByte[8] = 0x24; - - ResetEvent(hEvent); - dwStatus=pSendASPI32Command((LPSRB)&s); - - if (dwStatus==SS_PENDING) WaitForSingleObject(hEvent,30000); - - CloseHandle(hEvent); - - return (s.execscsicmd.SRB_Status==SS_COMP); -} - -bool CDROM_Interface_Aspi::PlayAudioSector(unsigned long start,unsigned long len) -{ -// SRB_ExecSCSICmd s; - ASPI_SRB s; - DWORD dwStatus; - - hEvent = CreateEvent(NULL,TRUE,FALSE,NULL); - - memset(&s,0,sizeof(s)); - s.execscsicmd.SRB_Cmd = SC_EXEC_SCSI_CMD; - s.execscsicmd.SRB_HaId = haId; - s.execscsicmd.SRB_Target = target; - s.execscsicmd.SRB_Lun = lun; - s.execscsicmd.SRB_Flags = SRB_DIR_IN | SRB_EVENT_NOTIFY; - s.execscsicmd.SRB_BufLen = 0; - s.execscsicmd.SRB_BufPointer = 0; - s.execscsicmd.SRB_SenseLen = SENSE_LEN; - s.execscsicmd.SRB_CDBLen = 12; - s.execscsicmd.SRB_PostProc = (LPVOID)hEvent; - - s.execscsicmd.CDBByte[0] = SCSI_PLAYAUD_12; - s.execscsicmd.CDBByte[1] = lun << 5; - s.execscsicmd.CDBByte[2] = (unsigned char)((start >> 24) & 0xFF); - s.execscsicmd.CDBByte[3] = (unsigned char)((start >> 16) & 0xFF); - s.execscsicmd.CDBByte[4] = (unsigned char)((start >> 8) & 0xFF); - s.execscsicmd.CDBByte[5] = (unsigned char)((start & 0xFF)); - s.execscsicmd.CDBByte[6] = (unsigned char)((len >> 24) & 0xFF); - s.execscsicmd.CDBByte[7] = (unsigned char)((len >> 16) & 0xFF); - s.execscsicmd.CDBByte[8] = (unsigned char)((len >> 8) & 0xFF); - s.execscsicmd.CDBByte[9] = (unsigned char)(len & 0xFF); - - ResetEvent(hEvent); - - dwStatus = pSendASPI32Command((LPSRB)&s); - - if(dwStatus==SS_PENDING) WaitForSingleObject(hEvent,10000); - - CloseHandle(hEvent); - - return s.execscsicmd.SRB_Status==SS_COMP; -} - -bool CDROM_Interface_Aspi::StopAudio(void) -{ - return PauseAudio(false); -}; - -bool CDROM_Interface_Aspi::PauseAudio(bool resume) -{ - //SRB_ExecSCSICmd s; - ASPI_SRB s; - DWORD dwStatus; - - hEvent = CreateEvent(NULL,TRUE,FALSE,NULL); - - memset(&s,0,sizeof(s)); - - s.execscsicmd.SRB_Cmd = SC_EXEC_SCSI_CMD; - s.execscsicmd.SRB_HaId = haId; - s.execscsicmd.SRB_Target = target; - s.execscsicmd.SRB_Lun = lun; - s.execscsicmd.SRB_Flags = SRB_DIR_IN | SRB_EVENT_NOTIFY; - s.execscsicmd.SRB_BufLen = 0x00; - s.execscsicmd.SRB_SenseLen = SENSE_LEN; - s.execscsicmd.SRB_CDBLen = 0x0A; - s.execscsicmd.SRB_PostProc = (LPVOID)hEvent; - s.execscsicmd.CDBByte[0] = 0x4B; - s.execscsicmd.CDBByte[8] = (unsigned char)resume; // Pause - - ResetEvent(hEvent); - dwStatus=pSendASPI32Command((LPSRB)&s); - - if (dwStatus==SS_PENDING) WaitForSingleObject(hEvent,30000); - - CloseHandle(hEvent); - - return (s.execscsicmd.SRB_Status==SS_COMP); -}; - -bool CDROM_Interface_Aspi::GetAudioSub(unsigned char& attr, unsigned char& track, unsigned char& index, TMSF& relPos, TMSF& absPos) -{ - SUB_Q_CURRENT_POSITION pos; -// SRB_ExecSCSICmd s; - ASPI_SRB s; - DWORD dwStatus; - - hEvent = CreateEvent(NULL,TRUE,FALSE,NULL); - - memset(&s,0,sizeof(s)); - - s.execscsicmd.SRB_Cmd = SC_EXEC_SCSI_CMD; - s.execscsicmd.SRB_HaId = haId; - s.execscsicmd.SRB_Target = target; - s.execscsicmd.SRB_Lun = lun; - s.execscsicmd.SRB_Flags = SRB_DIR_IN | SRB_EVENT_NOTIFY; - s.execscsicmd.SRB_SenseLen = SENSE_LEN; - - s.execscsicmd.SRB_BufLen = sizeof(pos); - s.execscsicmd.SRB_BufPointer = (BYTE FAR *)&pos; - s.execscsicmd.SRB_CDBLen = 10; - s.execscsicmd.SRB_PostProc = (LPVOID)hEvent; - - s.execscsicmd.CDBByte[0] = SCSI_SUBCHANNEL; - s.execscsicmd.CDBByte[1] = (lun<<5)|2; // lun & msf - s.execscsicmd.CDBByte[2] = 0x40; // subq - s.execscsicmd.CDBByte[3] = 0x01; // curr pos info - s.execscsicmd.CDBByte[6] = 0; // track number (only in isrc mode, ignored) - s.execscsicmd.CDBByte[7] = 0; // alloc len - s.execscsicmd.CDBByte[8] = sizeof(pos); - - ResetEvent(hEvent); - - dwStatus = pSendASPI32Command((LPSRB)&s); - - if (dwStatus==SS_PENDING) WaitForSingleObject(hEvent,0xFFFFFFFF); - - CloseHandle(hEvent); - - if (s.execscsicmd.SRB_Status!=SS_COMP) return false; - - attr = (pos.Control<<4) &0xEF; - track = pos.TrackNumber; - index = pos.IndexNumber; - absPos.min = pos.AbsoluteAddress[1]; - absPos.sec = pos.AbsoluteAddress[2]; - absPos.fr = pos.AbsoluteAddress[3]; - relPos.min = pos.TrackRelativeAddress[1]; - relPos.sec = pos.TrackRelativeAddress[2]; - relPos.fr = pos.TrackRelativeAddress[3]; - - return true; -}; - -bool CDROM_Interface_Aspi::GetUPC(unsigned char& attr, char* upcdata) -{ - SUB_Q_MEDIA_CATALOG_NUMBER upc; - ASPI_SRB s; - //SRB_ExecSCSICmd s; - DWORD dwStatus; - - hEvent = CreateEvent(NULL,TRUE,FALSE,NULL); - - memset(&s,0,sizeof(s)); - - s.execscsicmd.SRB_Cmd = SC_EXEC_SCSI_CMD; - s.execscsicmd.SRB_HaId = haId; - s.execscsicmd.SRB_Target = target; - s.execscsicmd.SRB_Lun = lun; - s.execscsicmd.SRB_Flags = SRB_DIR_IN | SRB_EVENT_NOTIFY; - s.execscsicmd.SRB_SenseLen = SENSE_LEN; - - s.execscsicmd.SRB_BufLen = sizeof(upc); - s.execscsicmd.SRB_BufPointer = (BYTE FAR *)&upc; - s.execscsicmd.SRB_CDBLen = 10; - s.execscsicmd.SRB_PostProc = (LPVOID)hEvent; - - s.execscsicmd.CDBByte[0] = SCSI_SUBCHANNEL; - s.execscsicmd.CDBByte[1] = (lun<<5)|2; // lun & msf - s.execscsicmd.CDBByte[2] = 0x40; // subq - s.execscsicmd.CDBByte[3] = 0x02; // get upc - s.execscsicmd.CDBByte[6] = 0; // track number (only in isrc mode, ignored) - s.execscsicmd.CDBByte[7] = 0; // alloc len - s.execscsicmd.CDBByte[8] = sizeof(upc); - - ResetEvent(hEvent); - - dwStatus = pSendASPI32Command((LPSRB)&s); - - if (dwStatus==SS_PENDING) WaitForSingleObject(hEvent,0xFFFFFFFF); - - CloseHandle(hEvent); - - if (s.execscsicmd.SRB_Status!=SS_COMP) return false; - -// attr = (upc.ADR<<4) | upc.Control; - attr = 0; - // Convert to mscdex format - for (int i=0; i<7; i++) upcdata[i] = upc.MediaCatalog[i]; - for (int i=0; i<7; i++) upcdata[i] = (upc.MediaCatalog[i*2] << 4) | (upc.MediaCatalog[i*2+1] & 0x0F); - - return true; -}; - -bool CDROM_Interface_Aspi::GetAudioStatus(bool& playing, bool& pause) -{ - playing = pause = false; - - SUB_Q_HEADER sub; -// SRB_ExecSCSICmd s; - ASPI_SRB s; - DWORD dwStatus; - - hEvent = CreateEvent(NULL,TRUE,FALSE,NULL); - - memset(&s,0,sizeof(s)); - - s.execscsicmd.SRB_Cmd = SC_EXEC_SCSI_CMD; - s.execscsicmd.SRB_HaId = haId; - s.execscsicmd.SRB_Target = target; - s.execscsicmd.SRB_Lun = lun; - s.execscsicmd.SRB_Flags = SRB_DIR_IN | SRB_EVENT_NOTIFY; - s.execscsicmd.SRB_SenseLen = SENSE_LEN; - - s.execscsicmd.SRB_BufLen = sizeof(sub); - s.execscsicmd.SRB_BufPointer = (BYTE FAR *)⊂ - s.execscsicmd.SRB_CDBLen = 10; - s.execscsicmd.SRB_PostProc = (LPVOID)hEvent; - - s.execscsicmd.CDBByte[0] = SCSI_SUBCHANNEL; - s.execscsicmd.CDBByte[1] = (lun<<5)|2; // lun & msf - s.execscsicmd.CDBByte[2] = 0x00; // no subq - s.execscsicmd.CDBByte[3] = 0x00; // dont care - s.execscsicmd.CDBByte[6] = 0; // track number (only in isrc mode, ignored) - s.execscsicmd.CDBByte[7] = 0; // alloc len - s.execscsicmd.CDBByte[8] = sizeof(sub); - - ResetEvent(hEvent); - - dwStatus = pSendASPI32Command((LPSRB)&s); - - if (dwStatus==SS_PENDING) WaitForSingleObject(hEvent,0xFFFFFFFF); - - CloseHandle(hEvent); - - if (s.execscsicmd.SRB_Status!=SS_COMP) return false; - - playing = (sub.AudioStatus==0x11); - pause = (sub.AudioStatus==0x12); - - return true; -}; - -bool CDROM_Interface_Aspi::LoadUnloadMedia(bool unload) -{ - //SRB_ExecSCSICmd s; - ASPI_SRB s; - DWORD dwStatus; - - hEvent = CreateEvent(NULL,TRUE,FALSE,NULL); - - memset(&s,0,sizeof(s)); - - s.execscsicmd.SRB_Cmd = SC_EXEC_SCSI_CMD; - s.execscsicmd.SRB_HaId = haId; - s.execscsicmd.SRB_Target = target; - s.execscsicmd.SRB_Lun = lun; - s.execscsicmd.SRB_Flags = SRB_DIR_IN | SRB_EVENT_NOTIFY; - s.execscsicmd.SRB_SenseLen = SENSE_LEN; - - s.execscsicmd.SRB_BufLen = 0; - s.execscsicmd.SRB_BufPointer = 0; - s.execscsicmd.SRB_CDBLen = 6; // 14; - s.execscsicmd.SRB_PostProc = (LPVOID)hEvent; - - s.execscsicmd.CDBByte[0] = SCSI_LOAD_UN; - s.execscsicmd.CDBByte[1] = (lun<<5)|1; // lun & immediate - s.execscsicmd.CDBByte[4] = (unload ? 0x02:0x03); // unload/load media - - ResetEvent(hEvent); - - dwStatus = pSendASPI32Command((LPSRB)&s); - - if (dwStatus==SS_PENDING) WaitForSingleObject(hEvent,0xFFFFFFFF); - - CloseHandle(hEvent); - - if (s.execscsicmd.SRB_Status!=SS_COMP) return false; - - return true; -}; - -bool CDROM_Interface_Aspi::GetMediaTrayStatus(bool& mediaPresent, bool& mediaChanged, bool& trayOpen) -{ - // Seems not possible to get this values using ioctl... - int track1,track2; - TMSF leadOut; - // If we can read, there's a media - mediaPresent = GetAudioTracks(track1, track2, leadOut), - trayOpen = !mediaPresent; - mediaChanged = (oldLeadOut.min!=leadOut.min) || (oldLeadOut.sec!=leadOut.sec) || (oldLeadOut.fr!=leadOut.fr); - // Save old values - oldLeadOut.min = leadOut.min; - oldLeadOut.sec = leadOut.sec; - oldLeadOut.fr = leadOut.fr; - // always success - return true; -}; - -bool CDROM_Interface_Aspi::ReadSectors(PhysPt buffer, bool raw, unsigned long sector, unsigned long num) -{ - //SRB_ExecSCSICmd s; - ASPI_SRB s; - DWORD dwStatus; - - hEvent = CreateEvent(NULL,TRUE,FALSE,NULL); - - memset(&s,0,sizeof(s)); - - Bitu buflen = raw?2352*num:2048*num; - Bit8u* bufdata = new Bit8u[buflen]; - - s.execscsicmd.SRB_Cmd = SC_EXEC_SCSI_CMD; - s.execscsicmd.SRB_HaId = haId; - s.execscsicmd.SRB_Target = target; - s.execscsicmd.SRB_Lun = lun; - s.execscsicmd.SRB_Flags = SRB_DIR_IN | SRB_EVENT_NOTIFY; - s.execscsicmd.SRB_SenseLen = SENSE_LEN; - - s.execscsicmd.SRB_BufLen = buflen; - s.execscsicmd.SRB_BufPointer = (BYTE FAR*)bufdata; - s.execscsicmd.SRB_CDBLen = 12; - s.execscsicmd.SRB_PostProc = (LPVOID)hEvent; - - s.execscsicmd.CDBByte[0] = 0xBE; - s.execscsicmd.CDBByte[2] = (unsigned char)((sector >> 24) & 0xFF); - s.execscsicmd.CDBByte[3] = (unsigned char)((sector >> 16) & 0xFF); - s.execscsicmd.CDBByte[4] = (unsigned char)((sector >> 8) & 0xFF); - s.execscsicmd.CDBByte[5] = (unsigned char)((sector & 0xFF)); - s.execscsicmd.CDBByte[6] = (unsigned char)((num >> 16) & 0xFF); - s.execscsicmd.CDBByte[7] = (unsigned char)((num >> 8) & 0xFF); - s.execscsicmd.CDBByte[8] = (unsigned char) (num & 0xFF); - s.execscsicmd.CDBByte[9] = (raw?0xF0:0x10); - - ResetEvent(hEvent); - - dwStatus = pSendASPI32Command((LPSRB)&s); - - if (dwStatus==SS_PENDING) WaitForSingleObject(hEvent,0xFFFFFFFF); - - CloseHandle(hEvent); - - // Copy to PhysPt - MEM_BlockWrite(buffer,bufdata,buflen); - - delete[] bufdata; - - return (s.execscsicmd.SRB_Status==SS_COMP); -}; - -#endif diff --git a/src/dos/dos_mscdex.cpp b/src/dos/dos_mscdex.cpp index 43af4b4a..b0339ec1 100644 --- a/src/dos/dos_mscdex.cpp +++ b/src/dos/dos_mscdex.cpp @@ -278,12 +278,6 @@ int CMscdex::AddDrive(Bit16u _drive, char* physicalPath, Bit8u& subUnit) break; } } - if (useCdromInterface==CDROM_USE_ASPI) { - // all Wins - ASPI - cdrom[numDrives] = new CDROM_Interface_Aspi(); - LOG(LOG_MISC,LOG_NORMAL)("MSCDEX: ASPI Interface."); - break; - } #endif #if defined (LINUX) // Always use IOCTL in Linux diff --git a/src/dos/dos_programs.cpp b/src/dos/dos_programs.cpp index 2c7e0bf4..4b3262e3 100644 --- a/src/dos/dos_programs.cpp +++ b/src/dos/dos_programs.cpp @@ -327,9 +327,7 @@ public: int num = -1; cmd->FindInt("-usecd",num,true); int error = 0; - if (cmd->FindExist("-aspi",false)) { - MSCDEX_SetCDInterface(CDROM_USE_ASPI, num); - } else if (cmd->FindExist("-ioctl_dio",false)) { + if (cmd->FindExist("-ioctl_dio", false)) { MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DIO, num); } else if (cmd->FindExist("-ioctl_dx",false)) { MSCDEX_SetCDInterface(CDROM_USE_IOCTL_DX, num); @@ -1698,8 +1696,6 @@ void DOS_SetupPrograms(void) { "The \033[33mlast\033[0m level of support depends on your Operating System:\n" "For \033[1mWindows 2000\033[0m, \033[1mWindows XP\033[0m and \033[1mLinux\033[0m:\n" "\033[34;1mmount d \033[0;31mD:\\\033[34;1m -t cdrom -usecd \033[33m0 \033[34m-ioctl\033[0m\n" - "For \033[1mWindows 9x\033[0m with a ASPI layer installed:\n" - "\033[34;1mmount d \033[0;31mD:\\\033[34;1m -t cdrom -usecd \033[33m0 \033[34m-aspi\033[0m\n" "\n" "Replace \033[0;31mD:\\\033[0m with the location of your CD-ROM.\n" "Replace the \033[33;1m0\033[0m in \033[34;1m-usecd \033[33m0\033[0m with the number reported for your CD-ROM if you type:\n" diff --git a/src/dos/wnaspi32.h b/src/dos/wnaspi32.h deleted file mode 100644 index 92b9921b..00000000 --- a/src/dos/wnaspi32.h +++ /dev/null @@ -1,354 +0,0 @@ -/****************************************************************************** -** -** Module Name: wnaspi32.h -** -** Description: Header file for ASPI for Win32. This header includes -** macro and type declarations, and can be included without -** modification when using Borland C++ or Microsoft Visual -** C++ with 32-bit compilation. If you are using a different -** compiler then you MUST ensure that structures are packed -** onto byte alignments, and that C++ name mangling is turned -** off. -** -** Notes: This file created using 4 spaces per tab. -** -******************************************************************************/ - -#ifndef __WNASPI32_H__ -#define __WNASPI32_H__ - -/* -** Make sure structures are packed and undecorated. -*/ - -#ifdef __BORLANDC__ -#pragma option -a1 -#endif //__BORLANDC__ - -#ifdef _MSC_VER -#pragma pack(1) -#endif //__MSC_VER - -#ifdef __cplusplus -extern "C" { -#endif //__cplusplus - -//***************************************************************************** -// %%% SCSI MISCELLANEOUS EQUATES %%% -//***************************************************************************** - -#define SENSE_LEN 14 // Default sense buffer length -#define SRB_DIR_SCSI 0x00 // Direction determined by SCSI -#define SRB_POSTING 0x01 // Enable ASPI posting -#define SRB_ENABLE_RESIDUAL_COUNT 0x04 // Enable residual byte count reporting -#define SRB_DIR_IN 0x08 // Transfer from SCSI target to host -#define SRB_DIR_OUT 0x10 // Transfer from host to SCSI target -#define SRB_EVENT_NOTIFY 0x40 // Enable ASPI event notification - -#define RESIDUAL_COUNT_SUPPORTED 0x02 // Extended buffer flag -#define MAX_SRB_TIMEOUT 108000lu // 30 hour maximum timeout in s -#define DEFAULT_SRB_TIMEOUT 108000lu // Max timeout by default - - -//***************************************************************************** -// %%% ASPI Command Definitions %%% -//***************************************************************************** - -#define SC_HA_INQUIRY 0x00 // Host adapter inquiry -#define SC_GET_DEV_TYPE 0x01 // Get device type -#define SC_EXEC_SCSI_CMD 0x02 // Execute SCSI command -#define SC_ABORT_SRB 0x03 // Abort an SRB -#define SC_RESET_DEV 0x04 // SCSI bus device reset -#define SC_SET_HA_PARMS 0x05 // Set HA parameters -#define SC_GET_DISK_INFO 0x06 // Get Disk information -#define SC_RESCAN_SCSI_BUS 0x07 // ReBuild SCSI device map -#define SC_GETSET_TIMEOUTS 0x08 // Get/Set target timeouts - -//***************************************************************************** -// %%% SRB Status %%% -//***************************************************************************** - -#define SS_PENDING 0x00 // SRB being processed -#define SS_COMP 0x01 // SRB completed without error -#define SS_ABORTED 0x02 // SRB aborted -#define SS_ABORT_FAIL 0x03 // Unable to abort SRB -#define SS_ERR 0x04 // SRB completed with error - -#define SS_INVALID_CMD 0x80 // Invalid ASPI command -#define SS_INVALID_HA 0x81 // Invalid host adapter number -#define SS_NO_DEVICE 0x82 // SCSI device not installed - -#define SS_INVALID_SRB 0xE0 // Invalid parameter set in SRB -#define SS_OLD_MANAGER 0xE1 // ASPI manager doesn't support Windows -#define SS_BUFFER_ALIGN 0xE1 // Buffer not aligned (replaces OLD_MANAGER in Win32) -#define SS_ILLEGAL_MODE 0xE2 // Unsupported Windows mode -#define SS_NO_ASPI 0xE3 // No ASPI managers resident -#define SS_FAILED_INIT 0xE4 // ASPI for windows failed init -#define SS_ASPI_IS_BUSY 0xE5 // No resources available to execute cmd -#define SS_BUFFER_TO_BIG 0xE6 // Buffer size to big to handle! -#define SS_MISMATCHED_COMPONENTS 0xE7 // The DLLs/EXEs of ASPI don't version check -#define SS_NO_ADAPTERS 0xE8 // No host adapters to manage -#define SS_INSUFFICIENT_RESOURCES 0xE9 // Couldn't allocate resources needed to init -#define SS_ASPI_IS_SHUTDOWN 0xEA // Call came to ASPI after PROCESS_DETACH -#define SS_BAD_INSTALL 0xEB // The DLL or other components are installed wrong - -//***************************************************************************** -// %%% Host Adapter Status %%% -//***************************************************************************** - -#define HASTAT_OK 0x00 // Host adapter did not detect an // error -#define HASTAT_SEL_TO 0x11 // Selection Timeout -#define HASTAT_DO_DU 0x12 // Data overrun data underrun -#define HASTAT_BUS_FREE 0x13 // Unexpected bus free -#define HASTAT_PHASE_ERR 0x14 // Target bus phase sequence // failure -#define HASTAT_TIMEOUT 0x09 // Timed out while SRB was waiting to beprocessed. -#define HASTAT_COMMAND_TIMEOUT 0x0B // Adapter timed out processing SRB. -#define HASTAT_MESSAGE_REJECT 0x0D // While processing SRB, the // adapter received a MESSAGE -#define HASTAT_BUS_RESET 0x0E // A bus reset was detected. -#define HASTAT_PARITY_ERROR 0x0F // A parity error was detected. -#define HASTAT_REQUEST_SENSE_FAILED 0x10 // The adapter failed in issuing - -//***************************************************************************** -// %%% SRB - HOST ADAPTER INQUIRY - SC_HA_INQUIRY (0) %%% -//***************************************************************************** - -typedef struct // Offset -{ // HX/DEC - BYTE SRB_Cmd; // 00/000 ASPI command code = SC_HA_INQUIRY - BYTE SRB_Status; // 01/001 ASPI command status byte - BYTE SRB_HaId; // 02/002 ASPI host adapter number - BYTE SRB_Flags; // 03/003 ASPI request flags - DWORD SRB_Hdr_Rsvd; // 04/004 Reserved, MUST = 0 - BYTE HA_Count; // 08/008 Number of host adapters present - BYTE HA_SCSI_ID; // 09/009 SCSI ID of host adapter - BYTE HA_ManagerId[16]; // 0A/010 String describing the manager - BYTE HA_Identifier[16]; // 1A/026 String describing the host adapter - BYTE HA_Unique[16]; // 2A/042 Host Adapter Unique parameters - WORD HA_Rsvd1; // 3A/058 Reserved, MUST = 0 -} -SRB_HAInquiry, *PSRB_HAInquiry, FAR *LPSRB_HAInquiry; - -//***************************************************************************** -// %%% SRB - GET DEVICE TYPE - SC_GET_DEV_TYPE (1) %%% -//***************************************************************************** - -typedef struct // Offset -{ // HX/DEC - BYTE SRB_Cmd; // 00/000 ASPI command code = SC_GET_DEV_TYPE - BYTE SRB_Status; // 01/001 ASPI command status byte - BYTE SRB_HaId; // 02/002 ASPI host adapter number - BYTE SRB_Flags; // 03/003 Reserved, MUST = 0 - DWORD SRB_Hdr_Rsvd; // 04/004 Reserved, MUST = 0 - BYTE SRB_Target; // 08/008 Target's SCSI ID - BYTE SRB_Lun; // 09/009 Target's LUN number - BYTE SRB_DeviceType; // 0A/010 Target's peripheral device type - BYTE SRB_Rsvd1; // 0B/011 Reserved, MUST = 0 -} -SRB_GDEVBlock, *PSRB_GDEVBlock, FAR *LPSRB_GDEVBlock; - -//***************************************************************************** -// %%% SRB - EXECUTE SCSI COMMAND - SC_EXEC_SCSI_CMD (2) %%% -//***************************************************************************** - -typedef struct // Offset -{ // HX/DEC - BYTE SRB_Cmd; // 00/000 ASPI command code = SC_EXEC_SCSI_CMD - BYTE SRB_Status; // 01/001 ASPI command status byte - BYTE SRB_HaId; // 02/002 ASPI host adapter number - BYTE SRB_Flags; // 03/003 ASPI request flags - DWORD SRB_Hdr_Rsvd; // 04/004 Reserved - BYTE SRB_Target; // 08/008 Target's SCSI ID - BYTE SRB_Lun; // 09/009 Target's LUN number - WORD SRB_Rsvd1; // 0A/010 Reserved for Alignment - DWORD SRB_BufLen; // 0C/012 Data Allocation Length - BYTE FAR *SRB_BufPointer; // 10/016 Data Buffer Pointer - BYTE SRB_SenseLen; // 14/020 Sense Allocation Length - BYTE SRB_CDBLen; // 15/021 CDB Length - BYTE SRB_HaStat; // 16/022 Host Adapter Status - BYTE SRB_TargStat; // 17/023 Target Status - VOID FAR *SRB_PostProc; // 18/024 Post routine - BYTE SRB_Rsvd2[20]; // 1C/028 Reserved, MUST = 0 - BYTE CDBByte[16]; // 30/048 SCSI CDB - BYTE SenseArea[SENSE_LEN+2]; // 50/064 Request Sense buffer -} -SRB_ExecSCSICmd, *PSRB_ExecSCSICmd, FAR *LPSRB_ExecSCSICmd; - -//***************************************************************************** -// %%% SRB - ABORT AN SRB - SC_ABORT_SRB (3) %%% -//***************************************************************************** - -typedef struct // Offset -{ // HX/DEC - BYTE SRB_Cmd; // 00/000 ASPI command code = SC_ABORT_SRB - BYTE SRB_Status; // 01/001 ASPI command status byte - BYTE SRB_HaId; // 02/002 ASPI host adapter number - BYTE SRB_Flags; // 03/003 Reserved - DWORD SRB_Hdr_Rsvd; // 04/004 Reserved - VOID FAR *SRB_ToAbort; // 08/008 Pointer to SRB to abort -} -SRB_Abort, *PSRB_Abort, FAR *LPSRB_Abort; - -//***************************************************************************** -// %%% SRB - BUS DEVICE RESET - SC_RESET_DEV (4) %%% -//***************************************************************************** - -typedef struct // Offset -{ // HX/DEC - BYTE SRB_Cmd; // 00/000 ASPI command code = SC_RESET_DEV - BYTE SRB_Status; // 01/001 ASPI command status byte - BYTE SRB_HaId; // 02/002 ASPI host adapter number - BYTE SRB_Flags; // 03/003 ASPI request flags - DWORD SRB_Hdr_Rsvd; // 04/004 Reserved - BYTE SRB_Target; // 08/008 Target's SCSI ID - BYTE SRB_Lun; // 09/009 Target's LUN number - BYTE SRB_Rsvd1[12]; // 0A/010 Reserved for Alignment - BYTE SRB_HaStat; // 16/022 Host Adapter Status - BYTE SRB_TargStat; // 17/023 Target Status - VOID FAR *SRB_PostProc; // 18/024 Post routine - BYTE SRB_Rsvd2[36]; // 1C/028 Reserved, MUST = 0 -} -SRB_BusDeviceReset, *PSRB_BusDeviceReset, FAR *LPSRB_BusDeviceReset; - -//***************************************************************************** -// %%% SRB - GET DISK INFORMATION - SC_GET_DISK_INFO %%% -//***************************************************************************** - -typedef struct // Offset -{ // HX/DEC - BYTE SRB_Cmd; // 00/000 ASPI command code = SC_GET_DISK_INFO - BYTE SRB_Status; // 01/001 ASPI command status byte - BYTE SRB_HaId; // 02/002 ASPI host adapter number - BYTE SRB_Flags; // 03/003 Reserved, MUST = 0 - DWORD SRB_Hdr_Rsvd; // 04/004 Reserved, MUST = 0 - BYTE SRB_Target; // 08/008 Target's SCSI ID - BYTE SRB_Lun; // 09/009 Target's LUN number - BYTE SRB_DriveFlags; // 0A/010 Driver flags - BYTE SRB_Int13HDriveInfo; // 0B/011 Host Adapter Status - BYTE SRB_Heads; // 0C/012 Preferred number of heads translation - BYTE SRB_Sectors; // 0D/013 Preferred number of sectors translation - BYTE SRB_Rsvd1[10]; // 0E/014 Reserved, MUST = 0 -} -SRB_GetDiskInfo, *PSRB_GetDiskInfo, FAR *LPSRB_GetDiskInfo; - -//***************************************************************************** -// %%% SRB - RESCAN SCSI BUS(ES) ON SCSIPORT %%% -//***************************************************************************** - -typedef struct // Offset -{ // HX/DEC - BYTE SRB_Cmd; // 00/000 ASPI command code = SC_RESCAN_SCSI_BUS - BYTE SRB_Status; // 01/001 ASPI command status byte - BYTE SRB_HaId; // 02/002 ASPI host adapter number - BYTE SRB_Flags; // 03/003 Reserved, MUST = 0 - DWORD SRB_Hdr_Rsvd; // 04/004 Reserved, MUST = 0 -} -SRB_RescanPort, *PSRB_RescanPort, FAR *LPSRB_RescanPort; - -//***************************************************************************** -// %%% SRB - GET/SET TARGET TIMEOUTS %%% -//***************************************************************************** - -typedef struct // Offset -{ // HX/DEC - BYTE SRB_Cmd; // 00/000 ASPI command code = SC_GETSET_TIMEOUTS - BYTE SRB_Status; // 01/001 ASPI command status byte - BYTE SRB_HaId; // 02/002 ASPI host adapter number - BYTE SRB_Flags; // 03/003 ASPI request flags - DWORD SRB_Hdr_Rsvd; // 04/004 Reserved, MUST = 0 - BYTE SRB_Target; // 08/008 Target's SCSI ID - BYTE SRB_Lun; // 09/009 Target's LUN number - DWORD SRB_Timeout; // 0A/010 Timeout in half seconds -} -SRB_GetSetTimeouts, *PSRB_GetSetTimeouts, FAR *LPSRB_GetSetTimeouts; - -//***************************************************************************** -// %%% ASPIBUFF - Structure For Controllng I/O Buffers %%% -//***************************************************************************** - -typedef struct tag_ASPI32BUFF // Offset -{ // HX/DEC - PBYTE AB_BufPointer; // 00/000 Pointer to the ASPI allocated buffer - DWORD AB_BufLen; // 04/004 Length in bytes of the buffer - DWORD AB_ZeroFill; // 08/008 Flag set to 1 if buffer should be zeroed - DWORD AB_Reserved; // 0C/012 Reserved -} -ASPI32BUFF, *PASPI32BUFF, FAR *LPASPI32BUFF; - -//***************************************************************************** -// %%% TOC structures %%% -//***************************************************************************** - -typedef struct -{ - unsigned char reserved1; - unsigned char cAdrCtrl; - unsigned char cTrackNum; - unsigned char reserved2; - unsigned long lAddr; -} TOC_TRACK; - -typedef struct -{ - unsigned short usTocDataLen; - unsigned char cFirstTrack; - unsigned char cLastTrack; - TOC_TRACK tracks[100]; -} TOC, *PTOC, FAR *LPTOC; - -//***************************************************************************** -// %%% PROTOTYPES - User Callable ASPI for Win32 Functions %%% -//***************************************************************************** - -typedef struct -{ - BYTE SRB_Cmd; - BYTE SRB_Status; - BYTE SRB_HaId; - BYTE SRB_Flags; - DWORD SRB_Hdr_Rsvd; -} SRB, *PSRB, FAR *LPSRB; - - -#if defined(__BORLANDC__) - -DWORD _import GetASPI32SupportInfo( void ); -DWORD _import SendASPI32Command( LPSRB ); -BOOL _import GetASPI32Buffer( PASPI32BUFF ); -BOOL _import FreeASPI32Buffer( PASPI32BUFF ); -BOOL _import TranslateASPI32Address( PDWORD, PDWORD ); - -#elif defined(_MSC_VER) - -__declspec(dllimport) DWORD GetASPI32SupportInfo( void ); -__declspec(dllimport) DWORD SendASPI32Command( LPSRB ); -__declspec(dllimport) BOOL GetASPI32Buffer( PASPI32BUFF ); -__declspec(dllimport) BOOL FreeASPI32Buffer( PASPI32BUFF ); -__declspec(dllimport) BOOL TranslateASPI32Address( PDWORD, PDWORD ); - -#else - -extern DWORD GetASPI32SupportInfo( void ); -extern DWORD GetASPI32Command( LPSRB ); -extern BOOL GetASPI32Buffer( PASPI32BUFF ); -extern BOOL FreeASPI32Buffer( PASPI32BUFF ); -extern BOOL TranslateASPI32Address( PDWORD, PDWORD ); - -#endif - -/* -** Restore compiler default packing and close off the C declarations. -*/ - -#ifdef __BORLANDC__ -#pragma option -a. -#endif //__BORLANDC__ - -#ifdef _MSC_VER -#pragma pack() -#endif //_MSC_VER - -#ifdef __cplusplus -} -#endif //__cplusplus - -#endif //__WNASPI32_H__ diff --git a/vs/dosbox.vcxproj b/vs/dosbox.vcxproj index 72380df1..04e8aad1 100644 --- a/vs/dosbox.vcxproj +++ b/vs/dosbox.vcxproj @@ -152,7 +152,6 @@ - @@ -345,7 +344,6 @@ -