summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/audio/seibu.h
blob: 4b898bd750ed145e04b1464478b69bd1f24d913d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
/***************************************************************************

    Seibu Sound System v1.02, games using this include:

    Cross Shooter    1987   * "START UP PROGRAM V1.02 (C)1986 SEIBU KAIHATSU INC." (YM2151 substituted for YM3812)
    Cabal            1988   * "Michel/Seibu    sound 11/04/88" (YM2151 substituted for YM3812, unknown ADPCM)
    Dead Angle       1988   * "START UP PROGRAM V1.02 (C)1986 SEIBU KAIHATSU INC." (2xYM2203 substituted for YM3812, unknown ADPCM)
    Dynamite Duke    1989   * "START UP PROGRAM V1.02 (C)1986 SEIBU KAIHATSU INC."
    Toki             1989   * "START UP PROGRAM V1.02 (C)1986 SEIBU KAIHATSU INC."
    Raiden           1990   * "START UP PROGRAM V1.02 (C)1986 SEIBU KAIHATSU INC."
    Blood Brothers   1990     "START UP PROGRAM V1.02 (C)1986 SEIBU KAIHATSU INC."
    D-Con            1992     "START UP PROGRAM V1.02 (C)1986 SEIBU KAIHATSU INC."

    Related sound programs (not implemented yet):

    Zero Team                 "START UP PROGRAM V1.02 (C)1986 SEIBU KAIHATSU INC."
    Legionaire                "START UP PROGRAM V1.02 (C)1986 SEIBU KAIHATSU INC." (YM2151 substituted for YM3812)
    Raiden 2                  "START UP PROGRAM V1.02 (C)1986 SEIBU KAIHATSU INC." (YM2151 substituted for YM3812, plus extra MSM6205)
    Raiden DX                 "START UP PROGRAM V1.02 (C)1986 SEIBU KAIHATSU INC." (YM2151 substituted for YM3812, plus extra MSM6205)
    Cup Soccer                "START UP PROGRAM V1.02 (C)1986 SEIBU KAIHATSU INC." (YM2151 substituted for YM3812, plus extra MSM6205)
    SD Gundam Psycho Salamander "Copyright by King Bee Sol 1991"
    * = encrypted

***************************************************************************/

#include "devlegcy.h"
#include "cpu/z80/z80.h"
#include "sound/3812intf.h"
#include "sound/2151intf.h"
#include "sound/2203intf.h"
#include "sound/okim6295.h"

ADDRESS_MAP_EXTERN(seibu_sound_map, 8);
ADDRESS_MAP_EXTERN(seibu2_sound_map, 8);
ADDRESS_MAP_EXTERN(seibu2_airraid_sound_map, 8);
ADDRESS_MAP_EXTERN(seibu2_raiden2_sound_map, 8);
ADDRESS_MAP_EXTERN(seibu_newzeroteam_sound_map, 8);
ADDRESS_MAP_EXTERN(seibu3_sound_map, 8);
ADDRESS_MAP_EXTERN(seibu3_adpcm_sound_map, 8);

READ16_HANDLER( seibu_main_word_r );
READ8_HANDLER( seibu_main_v30_r );
WRITE16_HANDLER( seibu_main_word_w );
WRITE8_HANDLER( seibu_main_v30_w );

WRITE16_HANDLER( seibu_main_mustb_w );

WRITE8_HANDLER( seibu_irq_clear_w );
WRITE8_HANDLER( seibu_rst10_ack_w );
WRITE8_HANDLER( seibu_rst18_ack_w );
WRITE8_HANDLER( seibu_bank_w );
WRITE8_HANDLER( seibu_coin_w );
void seibu_ym3812_irqhandler(device_t *device, int linestate);
void seibu_ym2151_irqhandler(device_t *device, int linestate);
void seibu_ym2203_irqhandler(device_t *device, int linestate);
READ8_HANDLER( seibu_soundlatch_r );
READ8_HANDLER( seibu_main_data_pending_r );
WRITE8_HANDLER( seibu_main_data_w );
MACHINE_RESET( seibu_sound );
void seibu_sound_decrypt(running_machine &machine,const char *cpu,int length);

void seibu_adpcm_decrypt(running_machine &machine, const char *region);
WRITE8_DEVICE_HANDLER( seibu_adpcm_adr_w );
WRITE8_DEVICE_HANDLER( seibu_adpcm_ctl_w );

DECLARE_LEGACY_SOUND_DEVICE(SEIBU_ADPCM, seibu_adpcm);

extern const ym3812_interface seibu_ym3812_interface;
extern const ym2151_interface seibu_ym2151_interface;
extern const ym2203_interface seibu_ym2203_interface;

typedef struct _seibu_adpcm_interface seibu_adpcm_interface;
struct _seibu_adpcm_interface
{
    const char *rom_region;
};

extern const seibu_adpcm_interface seibu_adpcm1_intf;
extern const seibu_adpcm_interface seibu_adpcm2_intf;

/**************************************************************************/

#define SEIBU_COIN_INPUTS											\
	PORT_START("COIN")												\
	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(4)		\
	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(4)		\
	PORT_BIT( 0xfc, IP_ACTIVE_HIGH, IPT_UNUSED )

#define SEIBU_COIN_INPUTS_INVERT									\
	PORT_START("COIN")												\
	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(4)		\
	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(4)		\
	PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )


#define SEIBU_SOUND_SYSTEM_CPU(freq)								\
	MCFG_CPU_ADD("audiocpu", Z80, freq)								\
	MCFG_CPU_PROGRAM_MAP(seibu_sound_map)							\

#define SEIBU2_SOUND_SYSTEM_CPU(freq)								\
	MCFG_CPU_ADD("audiocpu", Z80, freq)								\
	MCFG_CPU_PROGRAM_MAP(seibu2_sound_map)						\

#define SEIBU2_AIRRAID_SOUND_SYSTEM_CPU(freq)						\
	MCFG_CPU_ADD("audiocpu", Z80, freq)								\
	MCFG_CPU_PROGRAM_MAP(seibu2_airraid_sound_map)					\


#define SEIBU2_RAIDEN2_SOUND_SYSTEM_CPU(freq)						\
	MCFG_CPU_ADD("audiocpu",  Z80, freq)								\
	MCFG_CPU_PROGRAM_MAP(seibu2_raiden2_sound_map)				\

#define SEIBU_NEWZEROTEAM_SOUND_SYSTEM_CPU(freq)					\
	MCFG_CPU_ADD("audiocpu", Z80, freq)								\
	MCFG_CPU_PROGRAM_MAP(seibu_newzeroteam_sound_map)				\

#define SEIBU3_SOUND_SYSTEM_CPU(freq)								\
	MCFG_CPU_ADD("audiocpu", Z80, freq)								\
	MCFG_CPU_PROGRAM_MAP(seibu3_sound_map)						\

#define SEIBU3A_SOUND_SYSTEM_CPU(freq)								\
	MCFG_CPU_ADD("audiocpu", Z80, freq)								\
	MCFG_CPU_PROGRAM_MAP(seibu3_adpcm_sound_map)					\

#define SEIBU_SOUND_SYSTEM_YM3812_INTERFACE(freq1,freq2)			\
	MCFG_SPEAKER_STANDARD_MONO("mono")								\
																	\
	MCFG_SOUND_ADD("ymsnd", YM3812, freq1)								\
	MCFG_SOUND_CONFIG(seibu_ym3812_interface)						\
	MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)						\
																	\
	MCFG_OKIM6295_ADD("oki", freq2, OKIM6295_PIN7_LOW)				\
	MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)						\

#define SEIBU_SOUND_SYSTEM_YM3812_RAIDEN_INTERFACE(freq1,freq2)		\
	MCFG_SPEAKER_STANDARD_MONO("mono")								\
																	\
	MCFG_SOUND_ADD("ymsnd", YM3812, freq1)								\
	MCFG_SOUND_CONFIG(seibu_ym3812_interface)						\
	MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)						\
																	\
	MCFG_OKIM6295_ADD("oki", freq2, OKIM6295_PIN7_HIGH)				\
	MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)						\

#define SEIBU_SOUND_SYSTEM_YM2151_INTERFACE(freq1,freq2)			\
	MCFG_SPEAKER_STANDARD_MONO("mono")								\
																	\
	MCFG_SOUND_ADD("ymsnd", YM2151, freq1)								\
	MCFG_SOUND_CONFIG(seibu_ym2151_interface)						\
	MCFG_SOUND_ROUTE(0, "mono", 0.50)								\
	MCFG_SOUND_ROUTE(1, "mono", 0.50)								\
																	\
	MCFG_OKIM6295_ADD("oki", freq2, OKIM6295_PIN7_LOW)				\
	MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)						\

#define SEIBU_AIRRAID_SOUND_SYSTEM_YM2151_INTERFACE(freq1)			\
	MCFG_SPEAKER_STANDARD_MONO("mono")								\
																	\
	MCFG_SOUND_ADD("ymsnd", YM2151, freq1)								\
	MCFG_SOUND_CONFIG(seibu_ym2151_interface)						\
	MCFG_SOUND_ROUTE(0, "mono", 0.50)								\
	MCFG_SOUND_ROUTE(1, "mono", 0.50)								\
																	\


#define SEIBU_SOUND_SYSTEM_YM2151_RAIDEN2_INTERFACE(freq1,freq2,regiona, regionb)		\
	MCFG_SPEAKER_STANDARD_MONO("mono")								\
																	\
	MCFG_SOUND_ADD("ymsnd", YM2151, freq1)								\
	MCFG_SOUND_CONFIG(seibu_ym2151_interface)						\
	MCFG_SOUND_ROUTE(0, "mono", 0.50)								\
	MCFG_SOUND_ROUTE(1, "mono", 0.50)								\
																	\
	MCFG_OKIM6295_ADD("oki1", freq2, OKIM6295_PIN7_HIGH)			\
	MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)						\
																	\
	MCFG_OKIM6295_ADD("oki2", freq2, OKIM6295_PIN7_HIGH)			\
	MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)						\


#define SEIBU_SOUND_SYSTEM_YM2203_INTERFACE(freq)					\
	MCFG_SPEAKER_STANDARD_MONO("mono")								\
																	\
	MCFG_SOUND_ADD("ym1", YM2203, freq)								\
	MCFG_SOUND_CONFIG(seibu_ym2203_interface)						\
	MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)						\
																	\
	MCFG_SOUND_ADD("ym2", YM2203, freq)								\
	MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)						\

#define SEIBU_SOUND_SYSTEM_ADPCM_INTERFACE							\
	MCFG_SOUND_ADD("adpcm1", SEIBU_ADPCM, 8000)						\
    MCFG_SOUND_CONFIG(seibu_adpcm1_intf)                                  \
	MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) 					\
																	\
	MCFG_SOUND_ADD("adpcm2", SEIBU_ADPCM, 8000)						\
    MCFG_SOUND_CONFIG(seibu_adpcm2_intf)                                  \
	MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)						\


/**************************************************************************/