OSDN Git Service

27263d30b59e922884a4c36516a600c61f356eb4
[csp-qt/common_source_project-fm7.git] / source / src / vm / pasopia7 / iobus.cpp
1 /*
2         TOSHIBA PASOPIA 7 Emulator 'EmuPIA7'
3
4         Author : Takeda.Toshiya
5         Date   : 2006.09.20 -
6
7         [ 8bit i/o bus ]
8 */
9
10 #include "iobus.h"
11
12 void IOBUS::reset()
13 {
14         mio = false;
15 }
16
17 void IOBUS::write_io8(uint32_t addr, uint32_t data)
18 {
19         if(mio) {
20                 mio = false;
21                 ram[addr & 0xffff] = data;
22         } else {
23                 d_io->write_io8(addr, data);
24         }
25 }
26
27 uint32_t IOBUS::read_io8(uint32_t addr)
28 {
29         if(mio) {
30                 mio = false;
31                 return ram[addr & 0xffff];
32         } else {
33                 return d_io->read_io8(addr);
34         }
35 }
36
37 void IOBUS::write_signal(int id, uint32_t data, uint32_t mask)
38 {
39         if(id == SIG_IOBUS_MIO) {
40                 mio = ((data & mask) != 0);
41         }
42 }
43
44 #define STATE_VERSION   1
45
46 #include "../../statesub.h"
47
48 void IOBUS::decl_state()
49 {
50         enter_decl_state(STATE_VERSION);
51         
52         DECL_STATE_ENTRY_BOOL(mio);
53
54         leave_decl_state();
55 }
56
57 void IOBUS::save_state(FILEIO* state_fio)
58 {
59         if(state_entry != NULL) {
60                 state_entry->save_state(state_fio);
61         }
62 //      state_fio->FputUint32(STATE_VERSION);
63 //      state_fio->FputInt32(this_device_id);
64         
65 //      state_fio->FputBool(mio);
66 }
67
68 bool IOBUS::load_state(FILEIO* state_fio)
69 {
70         bool mb = false;
71         if(state_entry != NULL) {
72                 mb = state_entry->load_state(state_fio);
73         }
74         if(!mb) return false;
75 //      if(state_fio->FgetUint32() != STATE_VERSION) {
76 //              return false;
77 //      }
78 //      if(state_fio->FgetInt32() != this_device_id) {
79 //              return false;
80 //      }
81 //      mio = state_fio->FgetBool();
82         return true;
83 }
84
85 bool IOBUS::process_state(FILEIO* state_fio, bool loading)
86 {
87         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
88                 return false;
89         }
90         if(!state_fio->StateCheckInt32(this_device_id)) {
91                 return false;
92         }
93         state_fio->StateBool(mio);
94         return true;
95 }