2 SHARP MZ-700 Emulator 'EmuZ-700'
\r
3 SHARP MZ-800 Emulator 'EmuZ-800'
\r
4 SHARP MZ-1500 Emulator 'EmuZ-1500'
\r
6 Author : Takeda.Toshiya
\r
13 #include "../../fileio.h"
\r
15 #define DATA_SIZE 0x8000
\r
16 #define ADDR_MASK (DATA_SIZE - 1)
\r
18 void CMOS::initialize()
\r
21 data_buffer = (uint8 *)malloc(DATA_SIZE);
\r
22 memset(data_buffer, 0, DATA_SIZE);
\r
26 FILEIO* fio = new FILEIO();
\r
27 if(fio->Fopen(emu->bios_path(_T("CMOS.BIN")), FILEIO_READ_BINARY)) {
\r
28 fio->Fread(data_buffer, DATA_SIZE, 1);
\r
34 void CMOS::release()
\r
38 FILEIO* fio = new FILEIO();
\r
39 if(fio->Fopen(emu->bios_path(_T("CMOS.BIN")), FILEIO_WRITE_BINARY)) {
\r
40 fio->Fwrite(data_buffer, DATA_SIZE, 1);
\r
55 void CMOS::write_io8(uint32 addr, uint32 data)
\r
57 switch(addr & 0xff) {
\r
59 data_addr = (data_addr & 0x00ff) | (data << 8);
\r
62 data_addr = (data_addr & 0xff00) | data;
\r
65 if(data_buffer[data_addr & ADDR_MASK] != data) {
\r
66 data_buffer[data_addr & ADDR_MASK] = data;
\r
74 uint32 CMOS::read_io8(uint32 addr)
\r
76 switch(addr & 0xff) {
\r
81 return data_buffer[(data_addr++) & ADDR_MASK];
\r
86 #define STATE_VERSION 1
\r
88 void CMOS::save_state(FILEIO* state_fio)
\r
90 state_fio->FputUint32(STATE_VERSION);
\r
91 state_fio->FputInt32(this_device_id);
\r
93 state_fio->Fwrite(data_buffer, DATA_SIZE, 1);
\r
94 state_fio->FputUint32(data_addr);
\r
95 state_fio->FputBool(modified);
\r
98 bool CMOS::load_state(FILEIO* state_fio)
\r
100 if(state_fio->FgetUint32() != STATE_VERSION) {
\r
103 if(state_fio->FgetInt32() != this_device_id) {
\r
106 state_fio->Fread(data_buffer, DATA_SIZE, 1);
\r
107 data_addr = state_fio->FgetUint32();
\r
108 modified = state_fio->FgetBool();
\r