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(); }