2 SHARP MZ-700 Emulator 'EmuZ-700'
3 SHARP MZ-800 Emulator 'EmuZ-800'
4 SHARP MZ-1500 Emulator 'EmuZ-1500'
6 Author : Takeda.Toshiya
14 #define DATA_SIZE 0x8000
15 #define ADDR_MASK (DATA_SIZE - 1)
17 void CMOS::initialize()
20 data_buffer = (uint8 *)malloc(DATA_SIZE);
21 memset(data_buffer, 0, DATA_SIZE);
25 FILEIO* fio = new FILEIO();
26 if(fio->Fopen(emu->bios_path(_T("CMOS.BIN")), FILEIO_READ_BINARY)) {
27 fio->Fread(data_buffer, DATA_SIZE, 1);
37 FILEIO* fio = new FILEIO();
38 if(fio->Fopen(emu->bios_path(_T("CMOS.BIN")), FILEIO_WRITE_BINARY)) {
39 fio->Fwrite(data_buffer, DATA_SIZE, 1);
54 void CMOS::write_io8(uint32 addr, uint32 data)
58 data_addr = (data_addr & 0x00ff) | (data << 8);
61 data_addr = (data_addr & 0xff00) | data;
64 if(data_buffer[data_addr & ADDR_MASK] != data) {
65 data_buffer[data_addr & ADDR_MASK] = data;
73 uint32 CMOS::read_io8(uint32 addr)
80 return data_buffer[(data_addr++) & ADDR_MASK];
85 #define STATE_VERSION 1
87 void CMOS::save_state(FILEIO* state_fio)
89 state_fio->FputUint32(STATE_VERSION);
90 state_fio->FputInt32(this_device_id);
92 state_fio->Fwrite(data_buffer, DATA_SIZE, 1);
93 state_fio->FputUint32(data_addr);
94 state_fio->FputBool(modified);
97 bool CMOS::load_state(FILEIO* state_fio)
99 if(state_fio->FgetUint32() != STATE_VERSION) {
102 if(state_fio->FgetInt32() != this_device_id) {
105 state_fio->Fread(data_buffer, DATA_SIZE, 1);
106 data_addr = state_fio->FgetUint32();
107 modified = state_fio->FgetBool();