From 615dab6a1fb70432c52eb53afdf6b1722a1c5441 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Strohh=C3=A4cker?= Date: Tue, 19 Feb 2008 17:45:33 +0000 Subject: [PATCH] eat up some cycles for cdrom sector transfers (gets some cdrom speed checks to work better) Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3106 --- src/dos/dos_mscdex.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/dos/dos_mscdex.cpp b/src/dos/dos_mscdex.cpp index aac4c803..570ed64a 100644 --- a/src/dos/dos_mscdex.cpp +++ b/src/dos/dos_mscdex.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: dos_mscdex.cpp,v 1.52 2008-02-06 21:56:32 c2woody Exp $ */ +/* $Id: dos_mscdex.cpp,v 1.53 2008-02-19 17:45:33 c2woody Exp $ */ #include #include @@ -27,6 +27,7 @@ #include "setup.h" #include "support.h" #include "bios.h" +#include "cpu.h" #include "cdrom.h" @@ -628,27 +629,25 @@ bool CMscdex::GetUPC(Bit8u subUnit, Bit8u& attr, char* upc) return dinfo[subUnit].lastResult = cdrom[subUnit]->GetUPC(attr,&upc[0]); }; -bool CMscdex::ReadSectors(Bit8u subUnit, bool raw, Bit32u sector, Bit16u num, PhysPt data) -{ +bool CMscdex::ReadSectors(Bit8u subUnit, bool raw, Bit32u sector, Bit16u num, PhysPt data) { if (subUnit>=numDrives) return false; + if ((4*num*2048+5) < CPU_Cycles) CPU_Cycles -= 4*num*2048; + else CPU_Cycles = 5; dinfo[subUnit].lastResult = cdrom[subUnit]->ReadSectors(data,raw,sector,num); return dinfo[subUnit].lastResult; }; -bool CMscdex::ReadSectorsMSF(Bit8u subUnit, bool raw, Bit32u start, Bit16u num, PhysPt data) -{ +bool CMscdex::ReadSectorsMSF(Bit8u subUnit, bool raw, Bit32u start, Bit16u num, PhysPt data) { if (subUnit>=numDrives) return false; Bit8u min = (Bit8u)(start>>16) & 0xFF; Bit8u sec = (Bit8u)(start>> 8) & 0xFF; Bit8u fr = (Bit8u)(start>> 0) & 0xFF; Bit32u sector = min*60*75+sec*75+fr - 150; - // TODO: Check, if num has to be converted too ?! return ReadSectors(subUnit,raw,sector,num,data); }; -bool CMscdex::ReadSectors(Bit16u drive, Bit32u sector, Bit16u num, PhysPt data) // Called from INT 2F -{ +bool CMscdex::ReadSectors(Bit16u drive, Bit32u sector, Bit16u num, PhysPt data) { return ReadSectors(GetSubUnit(drive),false,sector,num,data); };