OSDN Git Service

[VM][STATE] Use namespace {VMNAME} to separate per VMs.
[csp-qt/common_source_project-fm7.git] / source / src / vm / pc9801 / fmsound.cpp
1 /*
2         NEC PC-9801 Emulator 'ePC-9801'
3         NEC PC-9801E/F/M Emulator 'ePC-9801E'
4         NEC PC-9801U Emulator 'ePC-9801U'
5         NEC PC-9801VF Emulator 'ePC-9801VF'
6         NEC PC-9801VM Emulator 'ePC-9801VM'
7         NEC PC-9801VX Emulator 'ePC-9801VX'
8         NEC PC-9801RA Emulator 'ePC-9801RA'
9         NEC PC-98XA Emulator 'ePC-98XA'
10         NEC PC-98XL Emulator 'ePC-98XL'
11         NEC PC-98RL Emulator 'ePC-98RL'
12         NEC PC-98DO Emulator 'ePC-98DO'
13
14         Author : Takeda.Toshiya
15         Date   : 2012.02.03-
16
17         [ PC-9801-26 ]
18 */
19
20 #include "fmsound.h"
21
22 // PC-98DO+
23 #define BOARD_ID        0
24
25 namespace PC9801 {
26
27 #ifdef SUPPORT_PC98_OPNA
28 void FMSOUND::reset()
29 {
30         mask = 0;
31 }
32 #endif
33
34 void FMSOUND::write_io8(uint32_t addr, uint32_t data)
35 {
36         switch(addr) {
37         case 0x0188:
38                 d_opn->write_io8(0, data);
39                 break;
40         case 0x018a:
41                 d_opn->write_io8(1, data);
42                 break;
43 #ifdef SUPPORT_PC98_OPNA
44         case 0x018c:
45                 if(mask & 1) {
46                         d_opn->write_io8(2, data);
47                 }
48                 break;
49         case 0x018e:
50                 if(mask & 1) {
51                         d_opn->write_io8(3, data);
52                 }
53                 break;
54         case 0xa460:
55                 mask = data;
56                 break;
57 #endif
58         }
59 }
60
61 uint32_t FMSOUND::read_io8(uint32_t addr)
62 {
63         switch(addr) {
64         case 0x0188:
65                 return d_opn->read_io8(0);
66         case 0x018a:
67                 return d_opn->read_io8(1);
68 #ifdef SUPPORT_PC98_OPNA
69         case 0x018c:
70                 if(mask & 1) {
71                         return d_opn->read_io8(2);
72                 }
73                 break;
74         case 0x018e:
75                 if(mask & 1) {
76                         return d_opn->read_io8(3);
77                 }
78                 break;
79         case 0xa460:
80                 return BOARD_ID | (mask & 3);
81 #endif
82         }
83         return 0xff;
84 }
85
86 #ifdef SUPPORT_PC98_OPNA
87 #define STATE_VERSION   1
88
89 bool FMSOUND::process_state(FILEIO* state_fio, bool loading)
90 {
91         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
92                 return false;
93         }
94         if(!state_fio->StateCheckInt32(this_device_id)) {
95                 return false;
96         }
97         state_fio->StateUint8(mask);
98         return true;
99 }
100 #endif
101
102 }