OSDN Git Service

[General][Qt] Merge upstream 2015-03-15.
[csp-qt/common_source_project-fm7.git] / source / src / vm / nand.cpp
1 /*
2         Skelton for retropc emulator
3
4         Author : Takeda.Toshiya
5         Date   : 2008.06.10-
6
7         [ nand gate ]
8 */
9
10 #include "nand.h"
11
12 void NAND::write_signal(int id, uint32 data, uint32 mask)
13 {
14         if(data & mask) {
15                 bits_in |= id;
16         } else {
17                 bits_in &= ~id;
18         }
19         bool next = (bits_mask != bits_in);
20         if(prev != next || first) {
21                 write_signals(&outputs, next ? 0xffffffff : 0);
22                 prev = next;
23                 first = false;
24         }
25 }
26
27 #define STATE_VERSION   1
28
29 void NAND::save_state(FILEIO* state_fio)
30 {
31         state_fio->FputUint32(STATE_VERSION);
32         state_fio->FputInt32(this_device_id);
33         
34         state_fio->FputUint32(bits_mask);
35         state_fio->FputUint32(bits_in);
36         state_fio->FputBool(prev);
37         state_fio->FputBool(first);
38 }
39
40 bool NAND::load_state(FILEIO* state_fio)
41 {
42         if(state_fio->FgetUint32() != STATE_VERSION) {
43                 return false;
44         }
45         if(state_fio->FgetInt32() != this_device_id) {
46                 return false;
47         }
48         bits_mask = state_fio->FgetUint32();
49         bits_in = state_fio->FgetUint32();
50         prev = state_fio->FgetBool();
51         first = state_fio->FgetBool();
52         return true;
53 }
54