OSDN Git Service

[VM][WIP] Use namespace to devices per VMs.
[csp-qt/common_source_project-fm7.git] / source / src / vm / multi8 / kanji.cpp
1 /*
2         MITSUBISHI Electric MULTI8 Emulator 'EmuLTI8'
3
4         Author : Takeda.Toshiya
5         Date   : 2006.09.15 -
6
7         [ kanji rom ]
8 */
9
10 #include "kanji.h"
11 #include "../i8255.h"
12
13 namespace MULTI8 {
14
15 void KANJI::initialize()
16 {
17         // load rom image
18         FILEIO* fio = new FILEIO();
19         if(fio->Fopen(create_local_path(_T("KANJI.ROM")), FILEIO_READ_BINARY)) {
20                 fio->Fread(rom, sizeof(rom), 1);
21                 fio->Fclose();
22                 
23                 // 8255 Port A, bit6 = 0 (kanji rom exists)
24                 d_pio->write_signal(SIG_I8255_PORT_A, 0, 0x40);
25         } else {
26                 // 8255 Port A, bit6 = 1 (kanji rom does not exist)
27                 d_pio->write_signal(SIG_I8255_PORT_A, 0x40, 0x40);
28         }
29         delete fio;
30 }
31
32 void KANJI::reset()
33 {
34         ptr = 0;
35 }
36
37 void KANJI::write_io8(uint32_t addr, uint32_t data)
38 {
39         switch(addr & 0xff) {
40         case 0x40:
41                 ptr = (ptr & 0xff00) | data;
42                 break;
43         case 0x41:
44                 ptr = (ptr & 0x00ff) | (data << 8);
45                 break;
46         }
47 }
48
49 uint32_t KANJI::read_io8(uint32_t addr)
50 {
51         switch(addr & 0xff) {
52         case 0x40:
53                 return rom[(ptr << 1) | 0];
54         case 0x41:
55                 return rom[(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->StateUint32(ptr);
71         return true;
72 }
73
74 }