OSDN Git Service

[VM][STATE][PC9801][X1] Apply new state framework to PC9801 series and X1 series.
[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 #ifdef SUPPORT_PC98_OPNA
26 void FMSOUND::reset()
27 {
28         mask = 0;
29 }
30 #endif
31
32 void FMSOUND::write_io8(uint32_t addr, uint32_t data)
33 {
34         switch(addr) {
35         case 0x0188:
36                 d_opn->write_io8(0, data);
37                 break;
38         case 0x018a:
39                 d_opn->write_io8(1, data);
40                 break;
41 #ifdef SUPPORT_PC98_OPNA
42         case 0x018c:
43                 if(mask & 1) {
44                         d_opn->write_io8(2, data);
45                 }
46                 break;
47         case 0x018e:
48                 if(mask & 1) {
49                         d_opn->write_io8(3, data);
50                 }
51                 break;
52         case 0xa460:
53                 mask = data;
54                 break;
55 #endif
56         }
57 }
58
59 uint32_t FMSOUND::read_io8(uint32_t addr)
60 {
61         switch(addr) {
62         case 0x0188:
63                 return d_opn->read_io8(0);
64         case 0x018a:
65                 return d_opn->read_io8(1);
66 #ifdef SUPPORT_PC98_OPNA
67         case 0x018c:
68                 if(mask & 1) {
69                         return d_opn->read_io8(2);
70                 }
71                 break;
72         case 0x018e:
73                 if(mask & 1) {
74                         return d_opn->read_io8(3);
75                 }
76                 break;
77         case 0xa460:
78                 return BOARD_ID | (mask & 3);
79 #endif
80         }
81         return 0xff;
82 }
83
84 #ifdef SUPPORT_PC98_OPNA
85 #define STATE_VERSION   1
86
87 #include "../statesub.h"
88
89 void FMSOUND::decl_state()
90 {
91         enter_decl_state(STATE_VERSION);
92         
93         DECL_STATE_ENTRY_UINT8(mask);
94         
95         leave_decl_state();
96 }
97
98 void FMSOUND::save_state(FILEIO* state_fio)
99 {
100         if(state_entry != NULL) {
101                 state_entry->save_state(state_fio);
102         }
103 //      state_fio->FputUint32(STATE_VERSION);
104 //      state_fio->FputInt32(this_device_id);
105         
106 //      state_fio->FputUint8(mask);
107 }
108
109 bool FMSOUND::load_state(FILEIO* state_fio)
110 {
111         bool mb = false;
112         if(state_entry != NULL) {
113                 mb = state_entry->load_state(state_fio);
114         }
115         if(!mb) return false;
116 //      if(state_fio->FgetUint32() != STATE_VERSION) {
117 //              return false;
118 //      }
119 //      if(state_fio->FgetInt32() != this_device_id) {
120 //              return false;
121 //      }
122 //      mask = state_fio->FgetUint8();
123         return true;
124 }
125 #endif
126