1 #ifndef DRIVER_H
2 #include "driver.h"
3 #endif
4 
5 #ifndef AY8910_CORE
6 extern "C" {
7 #endif
8 
9 #ifndef AY8910_H
10 #define AY8910_H
11 
12 #define MAX_8910 5
13 #define ALL_8910_CHANNELS -1
14 
15 struct AY8910interface
16 {
17 	INT32 num;	/* total number of 8910 in the machine */
18 	INT32 baseclock;
19 	INT32 mixing_level[MAX_8910];
20 	read8_handler portAread[MAX_8910];
21 	read8_handler portBread[MAX_8910];
22 	write8_handler portAwrite[MAX_8910];
23 	write8_handler portBwrite[MAX_8910];
24 	void (*handler[MAX_8910])(INT32 irq);	/* IRQ handler for the YM2203 */
25 };
26 
27 extern INT16 *pAY8910Buffer[(MAX_8910 + 1) * 3];
28 
29 extern INT32 ay8910burgertime_mode;
30 
31 extern INT32 ay8910_index_ym;
32 
33 void AY8910_set_clock(INT32 chip, INT32 clock);
34 
35 void AY8910Write(INT32 chip, INT32 a, INT32 data);
36 INT32 AY8910Read(INT32 chip);
37 
38 void AY8910Reset(INT32 chip);
39 void AY8910Exit(INT32 chip);
40 
41 // add signal ignored for any chip but #0
42 INT32 AY8910Init(INT32 chip, INT32 clock, INT32 add_signal);
43 
44 INT32 AY8910InitYM(INT32 chip, INT32 clock, INT32 sample_rate,
45 		read8_handler portAread, read8_handler portBread,
46 		write8_handler portAwrite, write8_handler portBwrite,
47 		void (*update_callback)(void));
48 
49 void AY8910Scan(INT32 nAction, INT32* pnMin);
50 
51 INT32 AY8910SetPorts(INT32 chip, read8_handler portAread, read8_handler portBread,write8_handler portAwrite, write8_handler portBwrite);
52 
53 void AY8910Render(INT16* dest, INT32 length); // render everything
54 void AY8910Update(INT32 chip, INT16** buffer, INT32 length); // render a single chip to buffer
55 void AY8910RenderInternal(INT32 length); // render everything to internal buffers (pAY8910Buffer[])
56 
57 void AY8910SetRoute(INT32 chip, INT32 nIndex, double nVolume, INT32 nRouteDir);
58 
59 #define BURN_SND_AY8910_ROUTE_1		0
60 #define BURN_SND_AY8910_ROUTE_2		1
61 #define BURN_SND_AY8910_ROUTE_3		2
62 
63 #define AY8910SetAllRoutes(i, v, d)	do {						\
64 	AY8910SetRoute(i, BURN_SND_AY8910_ROUTE_1, v, d);	\
65 	AY8910SetRoute(i, BURN_SND_AY8910_ROUTE_2, v, d);	\
66 	AY8910SetRoute(i, BURN_SND_AY8910_ROUTE_3, v, d);   \
67     } while (0)
68 #endif
69 
70 #ifndef AY8910_CORE
71 } // extern "C"
72 #endif
73