2 Systems Formulate BUBCOM80 Emulator 'eBUBCOM80'
4 Author : Takeda.Toshiya
14 void RTC::initialize()
16 get_host_time(&cur_time);
18 register_event_by_clock(this, EVENT_1HZ, CPU_CLOCKS, true, NULL);
23 tmp_time = cur_time; // ???
27 #define SET_DECIMAL_HI(t, v) \
30 #define SET_DECIMAL_LO(t, v) \
34 #define GET_DECIMAL_HI(t) TO_BCD_HI(t)
35 #define GET_DECIMAL_LO(t) TO_BCD_LO(t)
37 void RTC::write_io8(uint32_t addr, uint32_t data)
41 if(ctrl == 0x80 && data != 0x80) {
43 cur_time.initialized = true;
51 SET_DECIMAL_HI(tmp_time.year, data & 0x0f);
52 tmp_time.update_year();
53 tmp_time.update_day_of_week();
56 SET_DECIMAL_LO(tmp_time.year, data & 0x0f);
57 tmp_time.update_day_of_week();
60 SET_DECIMAL_HI(tmp_time.month, data & 0x01);
61 tmp_time.update_day_of_week();
64 SET_DECIMAL_LO(tmp_time.month, data & 0x0f);
65 tmp_time.update_day_of_week();
68 SET_DECIMAL_HI(tmp_time.day, data & 0x03);
69 tmp_time.update_day_of_week();
72 SET_DECIMAL_LO(tmp_time.day, data & 0x0f);
73 tmp_time.update_day_of_week();
76 // tmp_time.day_of_week = data & 0x07;
79 SET_DECIMAL_HI(tmp_time.hour, data & 0x03);
82 SET_DECIMAL_LO(tmp_time.hour, data & 0x0f);
85 SET_DECIMAL_HI(tmp_time.minute, data & 0x07);
88 SET_DECIMAL_LO(tmp_time.minute, data & 0x0f);
91 SET_DECIMAL_HI(tmp_time.second, data & 0x07);
94 SET_DECIMAL_LO(tmp_time.second, data & 0x0f);
99 uint32_t RTC::read_io8(uint32_t addr)
105 return GET_DECIMAL_HI(tmp_time.year);
107 return GET_DECIMAL_LO(tmp_time.year);
109 return GET_DECIMAL_HI(tmp_time.month);
111 return GET_DECIMAL_LO(tmp_time.month);
113 return GET_DECIMAL_HI(tmp_time.day);
115 return GET_DECIMAL_LO(tmp_time.day);
117 return tmp_time.day_of_week;
119 return GET_DECIMAL_HI(tmp_time.hour);
121 return GET_DECIMAL_LO(tmp_time.hour);
123 return GET_DECIMAL_HI(tmp_time.minute);
125 return GET_DECIMAL_LO(tmp_time.minute);
127 return GET_DECIMAL_HI(tmp_time.second);
129 return GET_DECIMAL_LO(tmp_time.second);
134 void RTC::event_callback(int event_id, int err)
136 if(event_id == EVENT_1HZ) {
138 if(cur_time.initialized) {
139 cur_time.increment();
141 get_host_time(&cur_time); // resync
142 cur_time.initialized = true;
147 #define STATE_VERSION 1
149 #include "../../statesub.h"
151 // ToDo: DECL_STATE_foo() for FIFO:: and cur_time_t:: .
152 void RTC::decl_state()
154 state_entry = new csp_state_utils(STATE_VERSION, this_device_id, _T("RTC"));
155 DECL_STATE_ENTRY_UINT8(ctrl);
158 void RTC::save_state(FILEIO* state_fio)
160 //state_fio->FputUint32(STATE_VERSION);
161 //state_fio->FputInt32(this_device_id);
163 if(state_entry != NULL) {
164 state_entry->save_state(state_fio);
166 cur_time.save_state((void *)state_fio);
167 tmp_time.save_state((void *)state_fio);
168 //state_fio->FputUint8(ctrl);
171 bool RTC::load_state(FILEIO* state_fio)
174 if(state_entry != NULL) {
175 mb = state_entry->load_state(state_fio);
177 if(!mb) return false;
178 //if(state_fio->FgetUint32() != STATE_VERSION) {
181 //if(state_fio->FgetInt32() != this_device_id) {
184 if(!cur_time.load_state((void *)state_fio)) {
187 if(!tmp_time.load_state((void *)state_fio)) {
190 //ctrl = state_fio->FgetUint8();