[ros-diffs] [hpoussin] 45817: [freeldr] Don't write twice the delay method and how to read the RTC. Use those in the HAL

hpoussin at svn.reactos.org hpoussin at svn.reactos.org
Thu Mar 4 00:13:06 CET 2010


Author: hpoussin
Date: Thu Mar  4 00:13:06 2010
New Revision: 45817

URL: http://svn.reactos.org/svn/reactos?rev=45817&view=rev
Log:
[freeldr] Don't write twice the delay method and how to read the RTC. Use those in the HAL

Modified:
    trunk/reactos/boot/freeldr/freeldr/arch/i386/pcrtc.c
    trunk/reactos/boot/freeldr/freeldr/include/freeldr.h
    trunk/reactos/hal/halx86/generic/bios.c

Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/pcrtc.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/i386/pcrtc.c?rev=45817&r1=45816&r2=45817&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/pcrtc.c [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/pcrtc.c [iso-8859-1] Thu Mar  4 00:13:06 2010
@@ -19,63 +19,25 @@
 
 #include <freeldr.h>
 
-#define BCD_INT(bcd) (((bcd & 0xf0) >> 4) * 10 + (bcd &0x0f))
+BOOLEAN
+NTAPI
+HalQueryRealTimeClock(OUT PTIME_FIELDS Time);
 
 TIMEINFO*
 PcGetTime(VOID)
 {
     static TIMEINFO TimeInfo;
-    REGS Regs;
+    TIME_FIELDS Time;
 
-    /* Some BIOSes, such as the 1998/07/25 system ROM
-     * in the Compaq Deskpro EP/SB, leave CF unchanged
-     * if successful, so CF should be cleared before
-     * calling this function. */
-    __writeeflags(__readeflags() & ~EFLAGS_CF);
+    if (!HalQueryRealTimeClock(&Time))
+        return NULL;
 
-    /* Int 1Ah AH=04h
-     * TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS)
-     *
-     * AH = 04h
-     * CF clear to avoid bug
-     * Return:
-     * CF clear if successful
-     * CH = century (BCD)
-     * CL = year (BCD)
-     * DH = month (BCD)
-     * DL = day (BCD)
-     * CF set on error
-     */
-    Regs.b.ah = 0x04;
-    Int386(0x1A, &Regs, &Regs);
-
-    TimeInfo.Year = 100 * BCD_INT(Regs.b.ch) + BCD_INT(Regs.b.cl);
-    TimeInfo.Month = BCD_INT(Regs.b.dh);
-    TimeInfo.Day = BCD_INT(Regs.b.dl);
-
-    /* Some BIOSes leave CF unchanged if successful,
-     * so CF should be cleared before calling this function. */
-    __writeeflags(__readeflags() & ~EFLAGS_CF);
-
-    /* Int 1Ah AH=02h
-     * TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS)
-     *
-     * AH = 02h
-     * CF clear to avoid bug
-     * Return:
-     * CF clear if successful
-     * CH = hour (BCD)
-     * CL = minutes (BCD)
-     * DH = seconds (BCD)
-     * DL = daylight savings flag (00h standard time, 01h daylight time)
-     * CF set on error (i.e. clock not running or in middle of update)
-     */
-    Regs.b.ah = 0x02;
-    Int386(0x1A, &Regs, &Regs);
-
-    TimeInfo.Hour = BCD_INT(Regs.b.ch);
-    TimeInfo.Minute = BCD_INT(Regs.b.cl);
-    TimeInfo.Second = BCD_INT(Regs.b.dh);
+    TimeInfo.Year = Time.Year;
+    TimeInfo.Month = Time.Month;
+    TimeInfo.Day = Time.Day;
+    TimeInfo.Hour = Time.Hour;
+    TimeInfo.Minute = Time.Minute;
+    TimeInfo.Second = Time.Second;
 
     return &TimeInfo;
 }

Modified: trunk/reactos/boot/freeldr/freeldr/include/freeldr.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/include/freeldr.h?rev=45817&r1=45816&r2=45817&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/include/freeldr.h [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/include/freeldr.h [iso-8859-1] Thu Mar  4 00:13:06 2010
@@ -39,6 +39,7 @@
 #include <ndk/asm.h>
 #include <ndk/rtlfuncs.h>
 #include <ndk/ldrtypes.h>
+#include <ndk/halfuncs.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <ctype.h>

Modified: trunk/reactos/hal/halx86/generic/bios.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/hal/halx86/generic/bios.c?rev=45817&r1=45816&r2=45817&view=diff
==============================================================================
--- trunk/reactos/hal/halx86/generic/bios.c [iso-8859-1] (original)
+++ trunk/reactos/hal/halx86/generic/bios.c [iso-8859-1] Thu Mar  4 00:13:06 2010
@@ -235,7 +235,6 @@
     longjmp(HalpSavedContext, 1);
     UNREACHABLE;
 }
-#endif
 
 /* V8086 ENTER ****************************************************************/
 
@@ -278,6 +277,7 @@
     /* Exit to V86 mode */
     HalpExitToV86((PKTRAP_FRAME)&V86TrapFrame);
 }
+#endif
 
 /* FUNCTIONS ******************************************************************/
 
@@ -432,6 +432,7 @@
     while (i--) HalpSavedIoMap[HalpSavedIoMapData[i][0]] = HalpSavedIoMapData[i][1];
 }
 
+#ifndef _MINIHAL_
 VOID
 NTAPI
 HalpMapRealModeMemory(VOID)
@@ -499,7 +500,6 @@
     HalpFlushTLB();
 }
 
-#ifndef _MINIHAL_
 VOID
 NTAPI
 HalpSwitchToRealModeTrapHandlers(VOID)




More information about the Ros-diffs mailing list