OSDN Git Service

[VM][STATE] Use namespace {VMNAME} to separate per VMs.
[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 using PASOPIA::RAMPAC2;
17 using PASOPIA::KANJIPAC2;
18 using PASOPIA::JOYPAC2;
19 using PASOPIA::PAC2DEV;
20
21 namespace PASOPIA {
22
23 void PAC2::initialize()
24 {
25         rampac2 = new RAMPAC2(static_cast<VM *>(vm), emu);
26         kanji = new KANJIPAC2(static_cast<VM *>(vm), emu);
27         joy = new JOYPAC2(static_cast<VM *>(vm), emu);
28         dummy = new PAC2DEV(static_cast<VM *>(vm), emu);
29         rampac2->initialize(1);
30         kanji->initialize(1);
31         joy->initialize(1);
32         dummy->initialize(1);
33 }
34
35 void PAC2::release()
36 {
37         rampac2->release();
38         delete rampac2;
39         delete kanji;
40         delete joy;
41         delete dummy;
42 }
43
44 void PAC2::reset()
45 {
46         device_type = config.device_type;
47         get_device()->reset();
48 }
49
50 void PAC2::write_io8(uint32_t addr, uint32_t data)
51 {
52         switch(addr & 0xff) {
53         case 0x18:
54         case 0x19:
55         case 0x1a:
56         case 0x1b:
57                 get_device()->write_io8(addr, data);
58                 break;
59         }
60 }
61
62 uint32_t PAC2::read_io8(uint32_t addr)
63 {
64         return get_device()->read_io8(addr);
65 }
66
67 PAC2DEV* PAC2::get_device()
68 {
69         switch(device_type) {
70         case DEVICE_RAM_PAC:
71                 return rampac2;
72         case DEVICE_KANJI_ROM:
73                 return kanji;
74         case DEVICE_JOYSTICK:
75                 return joy;
76         }
77         return dummy;
78 }
79
80 void PAC2::open_rampac2(const _TCHAR* file_path)
81 {
82         rampac2->open_file(file_path);
83 }
84
85 #define STATE_VERSION   1
86
87 bool PAC2::process_state(FILEIO* state_fio, bool loading)
88 {
89         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
90                 return false;
91         }
92         if(!state_fio->StateCheckInt32(this_device_id)) {
93                 return false;
94         }
95         state_fio->StateInt32(device_type);
96         return get_device()->process_state(state_fio, loading);
97 }
98
99 }