- if cmos image is enabled, save it on exit

This commit is contained in:
Volker Ruppert 2005-12-04 17:43:09 +00:00
parent b59b3aed31
commit ef51fd3595
5 changed files with 33 additions and 12 deletions

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: cmos.cc,v 1.50 2005-09-18 07:16:28 vruppert Exp $
// $Id: cmos.cc,v 1.51 2005-12-04 17:43:09 vruppert Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2002 MandrakeSoft S.A.
@ -139,7 +139,7 @@ bx_cmos_c::~bx_cmos_c(void)
void
bx_cmos_c::init(void)
{
BX_DEBUG(("Init $Id: cmos.cc,v 1.50 2005-09-18 07:16:28 vruppert Exp $"));
BX_DEBUG(("Init $Id: cmos.cc,v 1.51 2005-12-04 17:43:09 vruppert Exp $"));
// CMOS RAM & RTC
DEV_register_ioread_handler(this, read_handler, 0x0070, "CMOS RAM", 1);
@ -197,7 +197,6 @@ bx_cmos_c::init(void)
// load CMOS from image file if requested.
if (bx_options.cmosimage.Oenabled->get ()) {
// CMOS image file requested
int fd, ret;
struct stat stat_buf;
@ -257,8 +256,7 @@ bx_cmos_c::init(void)
BX_CMOS_THIS s.timeval_change = 0;
}
void
bx_cmos_c::reset(unsigned type)
void bx_cmos_c::reset(unsigned type)
{
BX_CMOS_THIS s.cmos_mem_address = 0;
@ -278,8 +276,26 @@ bx_cmos_c::reset(unsigned type)
BX_CMOS_THIS CRA_change();
}
void
bx_cmos_c::CRA_change(void)
void bx_cmos_c::save_image(void)
{
int fd, ret;
// save CMOS to image file if requested.
if (bx_options.cmosimage.Oenabled->get ()) {
fd = open(bx_options.cmosimage.Opath->getptr (), O_WRONLY
#ifdef O_BINARY
| O_BINARY
#endif
);
ret = ::write(fd, (bx_ptr_t) BX_CMOS_THIS s.reg, 128);
if (ret != 128) {
BX_PANIC(("CMOS: error writing cmos file."));
}
close(fd);
}
}
void bx_cmos_c::CRA_change(void)
{
Bit8u nibble, dcc;

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: cmos.h,v 1.12 2005-09-11 20:03:56 vruppert Exp $
// $Id: cmos.h,v 1.13 2005-12-04 17:43:09 vruppert Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2002 MandrakeSoft S.A.
@ -42,6 +42,7 @@ public:
virtual void init(void);
virtual void checksum_cmos(void);
virtual void reset(unsigned type);
virtual void save_image(void);
virtual Bit32u get_reg(unsigned reg) {
return s.reg[reg];

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: iodev.h,v 1.66 2005-12-02 17:27:19 vruppert Exp $
// $Id: iodev.h,v 1.67 2005-12-04 17:43:09 vruppert Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2002 MandrakeSoft S.A.
@ -173,12 +173,14 @@ class BOCHSAPI bx_cmos_stub_c : public bx_devmodel_c {
STUBFUNC(cmos, set_reg);
}
virtual time_t get_timeval() {
// STUBFUNC(cmos, get_timeval);
return 0;
}
virtual void checksum_cmos(void) {
STUBFUNC(cmos, checksum);
}
virtual void save_image(void) {
STUBFUNC(cmos, save_image);
}
};
class BOCHSAPI bx_dma_stub_c : public bx_devmodel_c {

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: pc_system.cc,v 1.44 2005-10-18 18:07:51 sshwarts Exp $
// $Id: pc_system.cc,v 1.45 2005-12-04 17:43:08 vruppert Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2002 MandrakeSoft S.A.
@ -221,6 +221,7 @@ Bit8u bx_pc_system_c::IAC(void)
void bx_pc_system_c::exit(void)
{
DEV_cmos_save_image();
if (DEV_hd_present())
DEV_hd_close_harddrive();

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: plugin.h,v 1.44 2005-12-02 17:27:18 vruppert Exp $
// $Id: plugin.h,v 1.45 2005-12-04 17:43:09 vruppert Exp $
/////////////////////////////////////////////////////////////////////////
//
// This file provides macros and types needed for plugins. It is based on
@ -101,6 +101,7 @@ extern "C" {
#define DEV_cmos_set_reg(a,b) (bx_devices.pluginCmosDevice->set_reg(a,b))
#define DEV_cmos_checksum() (bx_devices.pluginCmosDevice->checksum_cmos())
#define DEV_cmos_get_timeval() (bx_devices.pluginCmosDevice->get_timeval())
#define DEV_cmos_save_image() (bx_devices.pluginCmosDevice->save_image())
///////// keyboard macros
#define DEV_mouse_motion(dx, dy, state) \