From eeaafcc047cb78dd97ffa445e1a813ca886052f9 Mon Sep 17 00:00:00 2001
From: Andreas Mohr <a.mohr@mailto.de>
Date: Sun, 3 Jan 1999 12:30:43 +0000
Subject: [PATCH] Added automatic CMOS RAM checksum calculation.

---
 msdos/ioports.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/msdos/ioports.c b/msdos/ioports.c
index 14cdcefdd1d..1154c3e8583 100644
--- a/msdos/ioports.c
+++ b/msdos/ioports.c
@@ -29,7 +29,7 @@ static BYTE cmosimage[64] =
   0x40, 0xb1, 0x00, 0x9c, 0x01, 0x80, 0x02, 0x00,
   0x1c, 0x00, 0x00, 0xad, 0x02, 0x10, 0x00, 0x00,
   0x08, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x03, 0x58,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x03, 0x19,
   0x00, 0x1c, 0x19, 0x81, 0x00, 0x0e, 0x00, 0x80,
   0x1b, 0x7b, 0x21, 0x00, 0x00, 0x00, 0x05, 0x5f
 };
@@ -52,6 +52,18 @@ static char port_permissions[0x10000];
 
 #endif  /* DIRECT_IO_ACCESS */
 
+static void IO_FixCMOSCheckSum()
+{
+	WORD sum = 0;
+	int i;
+
+	for (i=0x10; i < 0x2d; i++)
+		sum += cmosimage[i];
+	cmosimage[0x2e] = sum >> 8; /* yes, this IS hi byte !! */
+	cmosimage[0x2f] = sum & 0xff;
+	TRACE(int, "calculated hi %02x, lo %02x\n", cmosimage[0x2e], cmosimage[0x2f]);
+}
+
 /**********************************************************************
  *	    IO_port_init
  */
@@ -188,6 +200,7 @@ void IO_port_init()
 		do_IO_port_init_read_or_write(temp, IO_WRITE);
 	}
 #endif  /* DIRECT_IO_ACCESS */
+    IO_FixCMOSCheckSum();
 }
 
 
-- 
GitLab