OSDN Git Service

[General][Qt] Merge upstream 2015-03-15.
[csp-qt/common_source_project-fm7.git] / source / src / vm / pasopia / pac2.cpp
1 /*
2         TOSHIBA PASOPIA Emulator 'EmuPIA'
3
4         Author : Takeda.Toshiya
5         Date   : 2006.12.28 -
6
7         [ pac slot 2 ]
8 */
9
10 #include "pac2.h"
11 #include "pac2dev.h"
12 #include "rampac2.h"
13 #include "kanjipac2.h"
14 #include "joypac2.h"
15
16 void PAC2::initialize()
17 {
18         rampac2 = new RAMPAC2(vm, emu);
19         kanji = new KANJIPAC2(vm, emu);
20         joy = new JOYPAC2(vm, emu);
21         dummy = new PAC2DEV(vm, emu);
22         
23         rampac2->initialize(1);
24         kanji->initialize(1);
25         joy->initialize(1);
26         dummy->initialize(1);
27 }
28
29 void PAC2::release()
30 {
31         rampac2->release();
32         delete rampac2;
33         delete kanji;
34         delete joy;
35         delete dummy;
36 }
37
38 void PAC2::reset()
39 {
40         device_type = config.device_type;
41         get_device()->reset();
42 }
43
44 void PAC2::write_io8(uint32 addr, uint32 data)
45 {
46         switch(addr & 0xff) {
47         case 0x18:
48         case 0x19:
49         case 0x1a:
50         case 0x1b:
51                 get_device()->write_io8(addr, data);
52                 break;
53         }
54 }
55
56 uint32 PAC2::read_io8(uint32 addr)
57 {
58         return get_device()->read_io8(addr);
59 }
60
61 PAC2DEV* PAC2::get_device()
62 {
63         switch(device_type) {
64         case DEVICE_RAM_PAC:
65                 return rampac2;
66         case DEVICE_KANJI_ROM:
67                 return kanji;
68         case DEVICE_JOYSTICK:
69                 return joy;
70         }
71         return dummy;
72 }
73
74 void PAC2::open_rampac2(_TCHAR* file_path)
75 {
76         rampac2->open_file(file_path);
77 }
78
79 #define STATE_VERSION   1
80
81 void PAC2::save_state(FILEIO* state_fio)
82 {
83         state_fio->FputUint32(STATE_VERSION);
84         state_fio->FputInt32(this_device_id);
85         
86         state_fio->FputInt32(device_type);
87         get_device()->save_state(state_fio);
88 }
89
90 bool PAC2::load_state(FILEIO* state_fio)
91 {
92         if(state_fio->FgetUint32() != STATE_VERSION) {
93                 return false;
94         }
95         if(state_fio->FgetInt32() != this_device_id) {
96                 return false;
97         }
98         device_type = state_fio->FgetInt32();
99         if(!get_device()->load_state(state_fio)) {
100                 return false;
101         }
102         return true;
103 }
104