OSDN Git Service

2dca822ca789dd518350b8d04b00798869cfe3e6
[csp-qt/common_source_project-fm7.git] / source / src / vm / pc100 / kanji.cpp
1 /*
2         NEC PC-100 Emulator 'ePC-100'
3
4         Author : Takeda.Toshiya
5         Date   : 2008.07.14 -
6
7         [ kanji rom ]
8 */
9
10 #include "kanji.h"
11
12 void KANJI::initialize()
13 {
14         // init image
15         memset(kanji, 0xff, sizeof(kanji));
16         
17         // load kanji image
18         FILEIO* fio = new FILEIO();
19         if(fio->Fopen(create_local_path(_T("KANJI.ROM")), FILEIO_READ_BINARY)) {
20                 fio->Fread(kanji, sizeof(kanji), 1);
21                 fio->Fclose();
22         }
23         delete fio;
24         
25         ptr = 0;
26         strobe = false;
27 }
28
29 void KANJI::write_io8(uint32_t addr, uint32_t data)
30 {
31         switch(addr & 0xff) {
32         case 0x80:
33                 ptr = (ptr & 0xff00) | data;
34                 break;
35         case 0x81:
36                 ptr = (ptr & 0x00ff) | (data << 8);
37                 break;
38         case 0x84:
39                 strobe = true;
40                 break;
41         case 0x86:
42                 strobe = false;
43                 break;
44         }
45 }
46
47 uint32_t KANJI::read_io8(uint32_t addr)
48 {
49         switch(addr & 0xff) {
50         case 0x80:
51                 return kanji[(ptr << 1) | 0];
52         case 0x81:
53                 return kanji[(ptr << 1) | 1];
54         }
55         return 0xff;
56 }
57
58 #define STATE_VERSION   1
59
60 #include "../../statesub.h"
61
62 void KANJI::decl_state()
63 {
64         enter_decl_state(STATE_VERSION);
65
66         DECL_STATE_ENTRY_UINT16(ptr);
67         DECL_STATE_ENTRY_BOOL(strobe);
68         
69         leave_decl_state();
70 }
71         
72 void KANJI::save_state(FILEIO* state_fio)
73 {
74         if(state_entry != NULL) {
75                 state_entry->save_state(state_fio);
76         }
77 //      state_fio->FputUint32(STATE_VERSION);
78 //      state_fio->FputInt32(this_device_id);
79         
80 //      state_fio->FputUint16(ptr);
81 //      state_fio->FputBool(strobe);
82 }
83
84 bool KANJI::load_state(FILEIO* state_fio)
85 {
86         bool mb = false;
87         if(state_entry != NULL) {
88                 mb = state_entry->load_state(state_fio);
89         }
90         if(!mb) {
91                 return false;
92         }
93 //      if(state_fio->FgetUint32() != STATE_VERSION) {
94 //              return false;
95 //      }
96 //      if(state_fio->FgetInt32() != this_device_id) {
97 //              return false;
98 //      }
99 //      ptr = state_fio->FgetUint16();
100 //      strobe = state_fio->FgetBool();
101         return true;
102 }
103
104 bool KANJI::process_state(FILEIO* state_fio, bool loading)
105 {
106         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
107                 return false;
108         }
109         if(!state_fio->StateCheckInt32(this_device_id)) {
110                 return false;
111         }
112         state_fio->StateUint16(ptr);
113         state_fio->StateBool(strobe);
114         return true;
115 }