From 154d9c3beafe6fd11df7385c6d3453454ae0f62b Mon Sep 17 00:00:00 2001 From: Volker Ruppert Date: Sat, 27 Dec 2003 13:43:41 +0000 Subject: [PATCH] - divider chain reset implemented (fixes bug #865354) --- bochs/iodev/cmos.cc | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/bochs/iodev/cmos.cc b/bochs/iodev/cmos.cc index 6e987b026..0be226b56 100644 --- a/bochs/iodev/cmos.cc +++ b/bochs/iodev/cmos.cc @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: cmos.cc,v 1.43 2003-10-02 11:33:41 danielg4 Exp $ +// $Id: cmos.cc,v 1.44 2003-12-27 13:43:41 vruppert Exp $ ///////////////////////////////////////////////////////////////////////// // // Copyright (C) 2002 MandrakeSoft S.A. @@ -118,7 +118,7 @@ bx_cmos_c::~bx_cmos_c(void) void bx_cmos_c::init(void) { - BX_DEBUG(("Init $Id: cmos.cc,v 1.43 2003-10-02 11:33:41 danielg4 Exp $")); + BX_DEBUG(("Init $Id: cmos.cc,v 1.44 2003-12-27 13:43:41 vruppert Exp $")); // CMOS RAM & RTC DEV_register_ioread_handler(this, read_handler, 0x0070, "CMOS RAM", 1); @@ -453,8 +453,10 @@ bx_cmos_c::write(Bit32u address, Bit32u value, unsigned io_len) unsigned dcc; dcc = (value >> 4) & 0x07; - if (dcc != 0x02) { - BX_PANIC(("CRA: divider chain control 0x%02x", dcc)); + if ((dcc & 0x06) == 0x06) { + BX_INFO(("CRA: divider chain RESET")); + } else if (dcc != 0x02) { + BX_PANIC(("CRA: divider chain control 0x%02x", dcc)); } BX_CMOS_THIS s.reg[REG_STAT_A] &= 0x80; BX_CMOS_THIS s.reg[REG_STAT_A] |= (value & 0x7f); @@ -651,6 +653,10 @@ bx_cmos_c::one_second_timer_handler(void *this_ptr) void bx_cmos_c::one_second_timer() { + // divider chain reset - RTC stopped + if ((BX_CMOS_THIS s.reg[REG_STAT_A] & 0x60) == 0x60) + return; + // update internal time/date buffer BX_CMOS_THIS s.timeval++;