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