OSDN Git Service

2139a11e5f54e93c4ece826a4761e2d52de4af56
[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 bool KANJI::process_state(FILEIO* state_fio, bool loading)
61 {
62         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
63                 return false;
64         }
65         if(!state_fio->StateCheckInt32(this_device_id)) {
66                 return false;
67         }
68         state_fio->StateUint16(ptr);
69         state_fio->StateBool(strobe);
70         return true;
71 }