OSDN Git Service

[INITIAL] Import 20141226 version of http://homepage3.nifty.com/takeda-toshiya/common...
[csp-qt/common_source_project-fm7.git] / source / src / vm / pc9801 / fmsound.cpp
1 /*\r
2         NEC PC-9801 Emulator 'ePC-9801'\r
3         NEC PC-9801E/F/M Emulator 'ePC-9801E'\r
4         NEC PC-98DO Emulator 'ePC-98DO'\r
5 \r
6         Author : Takeda.Toshiya\r
7         Date   : 2012.02.03-\r
8 \r
9         [ PC-9801-26 ]\r
10 */\r
11 \r
12 #include "fmsound.h"\r
13 #include "../../fileio.h"\r
14 \r
15 // PC-98DO+\r
16 #define BOARD_ID        0\r
17 \r
18 #ifdef HAS_YM2608\r
19 void FMSOUND::reset()\r
20 {\r
21         mask = 0;\r
22 }\r
23 #endif\r
24 \r
25 void FMSOUND::write_io8(uint32 addr, uint32 data)\r
26 {\r
27         switch(addr & 0xffff) {\r
28         case 0x188:\r
29                 d_opn->write_io8(0, data);\r
30                 break;\r
31         case 0x18a:\r
32                 d_opn->write_io8(1, data);\r
33                 break;\r
34 #ifdef HAS_YM2608\r
35         case 0x18c:\r
36                 if(mask & 1) {\r
37                         d_opn->write_io8(2, data);\r
38                 }\r
39                 break;\r
40         case 0x18e:\r
41                 if(mask & 1) {\r
42                         d_opn->write_io8(3, data);\r
43                 }\r
44                 break;\r
45         case 0xa460:\r
46                 mask = data;\r
47                 break;\r
48 #endif\r
49         }\r
50 }\r
51 \r
52 uint32 FMSOUND::read_io8(uint32 addr)\r
53 {\r
54         switch(addr & 0xffff) {\r
55         case 0x188:\r
56                 return d_opn->read_io8(0);\r
57         case 0x18a:\r
58                 return d_opn->read_io8(1);\r
59 #ifdef HAS_YM2608\r
60         case 0x18c:\r
61                 if(mask & 1) {\r
62                         return d_opn->read_io8(2);\r
63                 }\r
64                 break;\r
65         case 0x18e:\r
66                 if(mask & 1) {\r
67                         return d_opn->read_io8(3);\r
68                 }\r
69                 break;\r
70         case 0xa460:\r
71                 return BOARD_ID | (mask & 3);\r
72 #endif\r
73         }\r
74         return 0xff;\r
75 }\r
76 \r
77 #ifdef HAS_YM2608\r
78 #define STATE_VERSION   1\r
79 \r
80 void FMSOUND::save_state(FILEIO* state_fio)\r
81 {\r
82         state_fio->FputUint32(STATE_VERSION);\r
83         state_fio->FputInt32(this_device_id);\r
84         \r
85         state_fio->FputUint8(mask);\r
86 }\r
87 \r
88 bool FMSOUND::load_state(FILEIO* state_fio)\r
89 {\r
90         if(state_fio->FgetUint32() != STATE_VERSION) {\r
91                 return false;\r
92         }\r
93         if(state_fio->FgetInt32() != this_device_id) {\r
94                 return false;\r
95         }\r
96         mask = state_fio->FgetUint8();\r
97         return true;\r
98 }\r
99 #endif\r
100 \r