diff --git a/src/hardware/cmos.cpp b/src/hardware/cmos.cpp index 7319e6ec..8d51aa41 100644 --- a/src/hardware/cmos.cpp +++ b/src/hardware/cmos.cpp @@ -71,6 +71,7 @@ static void cmos_writereg(Bitu port,Bitu val,Bitu iolen) { case 0x07: /* Date of month */ case 0x08: /* Month */ case 0x09: /* Year */ + case 0x32: /* Century */ /* Ignore writes to change alarm */ break; case 0x01: /* Seconds Alarm */ @@ -102,7 +103,7 @@ static void cmos_writereg(Bitu port,Bitu val,Bitu iolen) { } -#define MAKE_RETURN(_VAL) (cmos.bcd ? (((_VAL / 10) << 4) | (_VAL % 10)) : _VAL); +#define MAKE_RETURN(_VAL) (cmos.bcd ? ((((_VAL) / 10) << 4) | ((_VAL) % 10)) : (_VAL)); static Bitu cmos_readreg(Bitu port,Bitu iolen) { if (cmos.reg>0x3f) { @@ -128,13 +129,15 @@ static Bitu cmos_readreg(Bitu port,Bitu iolen) { case 0x04: /* Hours */ return MAKE_RETURN(loctime->tm_hour); case 0x06: /* Day of week */ - return MAKE_RETURN(loctime->tm_wday); + return MAKE_RETURN(loctime->tm_wday + 1); case 0x07: /* Date of month */ return MAKE_RETURN(loctime->tm_mday); case 0x08: /* Month */ - return MAKE_RETURN(loctime->tm_mon); + return MAKE_RETURN(loctime->tm_mon + 1); case 0x09: /* Year */ - return MAKE_RETURN(loctime->tm_year); + return MAKE_RETURN(loctime->tm_year % 100); + case 0x32: /* Century */ + return MAKE_RETURN(loctime->tm_year / 100 + 19); case 0x01: /* Seconds Alarm */ case 0x03: /* Minutes Alarm */ case 0x05: /* Hours Alarm */ diff --git a/src/ints/bios.cpp b/src/ints/bios.cpp index 9f5f8fac..ca8d2987 100644 --- a/src/ints/bios.cpp +++ b/src/ints/bios.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: bios.cpp,v 1.39 2005-02-10 10:21:11 qbix79 Exp $ */ +/* $Id: bios.cpp,v 1.40 2005-02-24 17:50:58 qbix79 Exp $ */ #include #include "dosbox.h" @@ -79,19 +79,20 @@ static Bitu INT1A_Handler(void) { reg_cl=IO_Read(0x71); IO_Write(0x70,0x00); //Seconds reg_dh=IO_Read(0x71); - reg_dl=0; //Daylight saving disabled + reg_dl=0; //Daylight saving disabled + CALLBACK_SCF(false); + break; + case 0x04: /* GET REAL-TIME ClOCK DATE (AT,XT286,PS) */ + IO_Write(0x70,0x32); //Centuries + reg_ch=IO_Read(0x71); + IO_Write(0x70,0x09); //Years + reg_cl=IO_Read(0x71); + IO_Write(0x70,0x08); //Months + reg_dh=IO_Read(0x71); + IO_Write(0x70,0x07); //Days + reg_dl=IO_Read(0x71); CALLBACK_SCF(false); break; - case 0x04: /* GET REAL-TIME ClOCK DATA (AT,XT286,PS) */ - reg_dx=0; - reg_cx=0x2003; - CALLBACK_SCF(false); - LOG(LOG_BIOS,LOG_ERROR)("INT1A:04:Faked RTC get date call"); - break; -// reg_dx=reg_cx=0; -// CALLBACK_SCF(false); -// LOG(LOG_BIOS,LOG_ERROR)("INT1A:04:Faked RTC get date call"); -// break; case 0x80: /* Pcjr Setup Sound Multiplexer */ LOG(LOG_BIOS,LOG_ERROR)("INT1A:80:Setup tandy sound multiplexer to %d",reg_al); break;