From 039e32658a161a0cb119b0c190cb4d762c8c1a72 Mon Sep 17 00:00:00 2001 From: Ralf Grillenberger Date: Sun, 12 Jun 2011 16:58:14 +0000 Subject: [PATCH] Patch: - Fix regression with Romantic Blue caused by the midnight overflow patch - Preserve AH - Derive conversion value from known constants instead of using a magic number Thanks to ripsaw8080. Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3720 --- src/dos/dos.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/dos/dos.cpp b/src/dos/dos.cpp index e05922bf..83007e15 100644 --- a/src/dos/dos.cpp +++ b/src/dos/dos.cpp @@ -429,17 +429,19 @@ static Bitu DOS_21Handler(void) { reg_ax=0; // get time CALLBACK_RunRealInt(0x1a); if(reg_al) DOS_AddDays(reg_al); + reg_ah=0x2c; - Bitu time=((Bitu)reg_cx<<16)|reg_dx; - Bitu ticks=(Bitu)(5.49254945 * (double)time); + Bitu ticks=((Bitu)reg_cx<<16)|reg_dx; + if(time_start<=ticks) ticks-=time_start; + Bitu time=(Bitu)((100.0/((double)PIT_TICK_RATE/65536.0)) * (double)ticks); - reg_dl=(Bit8u)((Bitu)ticks % 100); // 1/100 seconds - ticks/=100; - reg_dh=(Bit8u)((Bitu)ticks % 60); // seconds - ticks/=60; - reg_cl=(Bit8u)((Bitu)ticks % 60); // minutes - ticks/=60; - reg_ch=(Bit8u)((Bitu)ticks % 24); // hours + reg_dl=(Bit8u)((Bitu)time % 100); // 1/100 seconds + time/=100; + reg_dh=(Bit8u)((Bitu)time % 60); // seconds + time/=60; + reg_cl=(Bit8u)((Bitu)time % 60); // minutes + time/=60; + reg_ch=(Bit8u)((Bitu)time % 24); // hours //Simulate DOS overhead for timing-sensitive games //Robomaze 2