OSDN Git Service

[VM][STATE] Use namespace {VMNAME} to separate per VMs.
[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 namespace PC100 {
13
14 void KANJI::initialize()
15 {
16         // init image
17         memset(kanji, 0xff, sizeof(kanji));
18         
19         // load kanji image
20         FILEIO* fio = new FILEIO();
21         if(fio->Fopen(create_local_path(_T("KANJI.ROM")), FILEIO_READ_BINARY)) {
22                 fio->Fread(kanji, sizeof(kanji), 1);
23                 fio->Fclose();
24         }
25         delete fio;
26         
27         ptr = 0;
28         strobe = false;
29 }
30
31 void KANJI::write_io8(uint32_t addr, uint32_t data)
32 {
33         switch(addr & 0xff) {
34         case 0x80:
35                 ptr = (ptr & 0xff00) | data;
36                 break;
37         case 0x81:
38                 ptr = (ptr & 0x00ff) | (data << 8);
39                 break;
40         case 0x84:
41                 strobe = true;
42                 break;
43         case 0x86:
44                 strobe = false;
45                 break;
46         }
47 }
48
49 uint32_t KANJI::read_io8(uint32_t addr)
50 {
51         switch(addr & 0xff) {
52         case 0x80:
53                 return kanji[(ptr << 1) | 0];
54         case 0x81:
55                 return kanji[(ptr << 1) | 1];
56         }
57         return 0xff;
58 }
59
60 #define STATE_VERSION   1
61
62 bool KANJI::process_state(FILEIO* state_fio, bool loading)
63 {
64         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
65                 return false;
66         }
67         if(!state_fio->StateCheckInt32(this_device_id)) {
68                 return false;
69         }
70         state_fio->StateUint16(ptr);
71         state_fio->StateBool(strobe);
72         return true;
73 }
74
75 }