OSDN Git Service

cc427591293c0ea3bc4819ebdacc844aa44ceb21
[csp-qt/common_source_project-fm7.git] / source / src / vm / pasopia7 / kanjipac2.cpp
1 /*
2         TOSHIBA PASOPIA Emulator 'EmuPIA'
3         TOSHIBA PASOPIA 7 Emulator 'EmuPIA7'
4
5         Author : Takeda.Toshiya
6         Date   : 2006.09.20 -
7
8         [ kanji rom pac 2 ]
9 */
10
11 #include "kanjipac2.h"
12
13 void KANJIPAC2::initialize(int id)
14 {
15         FILEIO* fio = new FILEIO();
16         if(fio->Fopen(create_local_path(_T("KANJI.ROM")), FILEIO_READ_BINARY)) {
17                 fio->Fread(rom, sizeof(rom), 1);
18                 fio->Fclose();
19         }
20         delete fio;
21 }
22
23 void KANJIPAC2::reset()
24 {
25         ptr = 0;
26 }
27
28 void KANJIPAC2::write_io8(uint32_t addr, uint32_t data)
29 {
30         switch(addr & 0xff) {
31         case 0x18:
32                 ptr = (ptr & 0x1ff00) | data;
33                 break;
34         case 0x19:
35                 ptr = (ptr & 0x100ff) | (data << 8);
36                 break;
37         case 0x1a:
38                 ptr = (ptr & 0x0ffff) | ((data & 0x01) << 16);
39                 break;
40         }
41 }
42
43 uint32_t KANJIPAC2::read_io8(uint32_t addr)
44 {
45         return rom[ptr & 0x1ffff];
46 }
47
48 #define STATE_VERSION   1
49
50 #include "../../statesub.h"
51
52 void KANJIPAC2::decl_state()
53 {
54         state_entry = new csp_state_utils(STATE_VERSION, 0, (const _TCHAR *)_T("PAC2SLOT::KANJIPAC2"), NULL);
55
56         DECL_STATE_ENTRY_UINT32(ptr);
57         
58         //leave_decl_state();
59 }
60
61 void KANJIPAC2::save_state(FILEIO* state_fio)
62 {
63         if(state_entry != NULL) {
64                 state_entry->save_state(state_fio);
65         }
66 //      state_fio->FputUint32(STATE_VERSION);
67         
68 //      state_fio->FputUint32(ptr);
69 }
70
71 bool KANJIPAC2::load_state(FILEIO* state_fio)
72 {
73         bool mb = false;
74         if(state_entry != NULL) {
75                 mb = state_entry->load_state(state_fio);
76         }
77         if(!mb) return false;
78 //      if(state_fio->FgetUint32() != STATE_VERSION) {
79 //              return false;
80 //      }
81 //      ptr = state_fio->FgetUint32();
82         return true;
83 }
84
85 bool KANJIPAC2::process_state(FILEIO* state_fio, bool loading)
86 {
87         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
88                 return false;
89         }
90         state_fio->StateUint32(ptr);
91         return true;
92 }