OSDN Git Service

[VM][General] Merge upstream 2015-08-25.
[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(emu->bios_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 addr, uint32 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 KANJI::read_io8(uint32 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 void KANJI::save_state(FILEIO* state_fio)
61 {
62         state_fio->FputUint32(STATE_VERSION);
63         state_fio->FputInt32(this_device_id);
64         
65         state_fio->FputUint16(ptr);
66         state_fio->FputBool(strobe);
67 }
68
69 bool KANJI::load_state(FILEIO* state_fio)
70 {
71         if(state_fio->FgetUint32() != STATE_VERSION) {
72                 return false;
73         }
74         if(state_fio->FgetInt32() != this_device_id) {
75                 return false;
76         }
77         ptr = state_fio->FgetUint16();
78         strobe = state_fio->FgetBool();
79         return true;
80 }
81