1 #ifndef __FMOPL_H_
2 #define __FMOPL_H_
3 
4 /* --- select emulation chips --- */
5 #define BUILD_YM3812 (HAS_YM3812)
6 #define BUILD_YM3526 (HAS_YM3526)
7 #define BUILD_Y8950  (HAS_Y8950)
8 
9 /* select output bits size of output : 8 or 16 */
10 #define OPL_SAMPLE_BITS 16
11 
12 /* compiler dependence */
13 #ifndef OSD_CPU_H
14 #define OSD_CPU_H
15 typedef unsigned char	UINT8;   /* unsigned  8bit */
16 typedef unsigned short	UINT16;  /* unsigned 16bit */
17 typedef unsigned int	UINT32;  /* unsigned 32bit */
18 typedef signed char		INT8;    /* signed  8bit   */
19 typedef signed short	INT16;   /* signed 16bit   */
20 typedef signed int		INT32;   /* signed 32bit   */
21 #endif
22 
23 #if (OPL_SAMPLE_BITS==16)
24 typedef INT16 OPLSAMPLE;
25 #endif
26 #if (OPL_SAMPLE_BITS==8)
27 typedef INT8 OPLSAMPLE;
28 #endif
29 
30 
31 typedef void (*OPL_TIMERHANDLER)(int channel,double interval_Sec);
32 typedef void (*OPL_IRQHANDLER)(int param,int irq);
33 typedef void (*OPL_UPDATEHANDLER)(int param,int min_interval_us);
34 typedef void (*OPL_PORTHANDLER_W)(int param,unsigned char data);
35 typedef unsigned char (*OPL_PORTHANDLER_R)(int param);
36 
37 
38 #if BUILD_YM3812
39 
40 int  YM3812Init(int num, int clock, int rate);
41 void YM3812Shutdown(void);
42 void YM3812ResetChip(int which);
43 int  YM3812Write(int which, int a, int v);
44 unsigned char YM3812Read(int which, int a);
45 int  YM3812TimerOver(int which, int c);
46 void YM3812UpdateOne(int which, INT16 *buffer, int length);
47 
48 void YM3812SetTimerHandler(int which, OPL_TIMERHANDLER TimerHandler, int channelOffset);
49 void YM3812SetIRQHandler(int which, OPL_IRQHANDLER IRQHandler, int param);
50 void YM3812SetUpdateHandler(int which, OPL_UPDATEHANDLER UpdateHandler, int param);
51 
52 #endif
53 
54 
55 #if BUILD_YM3526
56 
57 /*
58 ** Initialize YM3526 emulator(s).
59 **
60 ** 'num' is the number of virtual YM3526's to allocate
61 ** 'clock' is the chip clock in Hz
62 ** 'rate' is sampling rate
63 */
64 int  YM3526Init(int num, int clock, int rate);
65 /* shutdown the YM3526 emulators*/
66 void YM3526Shutdown(void);
67 void YM3526ResetChip(int which);
68 int  YM3526Write(int which, int a, int v);
69 unsigned char YM3526Read(int which, int a);
70 int  YM3526TimerOver(int which, int c);
71 /*
72 ** Generate samples for one of the YM3526's
73 **
74 ** 'which' is the virtual YM3526 number
75 ** '*buffer' is the output buffer pointer
76 ** 'length' is the number of samples that should be generated
77 */
78 void YM3526UpdateOne(int which, INT16 *buffer, int length);
79 
80 void YM3526SetTimerHandler(int which, OPL_TIMERHANDLER TimerHandler, int channelOffset);
81 void YM3526SetIRQHandler(int which, OPL_IRQHANDLER IRQHandler, int param);
82 void YM3526SetUpdateHandler(int which, OPL_UPDATEHANDLER UpdateHandler, int param);
83 
84 #endif
85 
86 
87 #if BUILD_Y8950
88 
89 /* Y8950 port handlers */
90 void Y8950SetPortHandler(int which, OPL_PORTHANDLER_W PortHandler_w, OPL_PORTHANDLER_R PortHandler_r, int param);
91 void Y8950SetKeyboardHandler(int which, OPL_PORTHANDLER_W KeyboardHandler_w, OPL_PORTHANDLER_R KeyboardHandler_r, int param);
92 void Y8950SetDeltaTMemory(int which, void * deltat_mem_ptr, int deltat_mem_size );
93 
94 int  Y8950Init (int num, int clock, int rate);
95 void Y8950Shutdown (void);
96 void Y8950ResetChip (int which);
97 int  Y8950Write (int which, int a, int v);
98 unsigned char Y8950Read (int which, int a);
99 int  Y8950TimerOver (int which, int c);
100 void Y8950UpdateOne (int which, INT16 *buffer, int length);
101 
102 void Y8950SetTimerHandler (int which, OPL_TIMERHANDLER TimerHandler, int channelOffset);
103 void Y8950SetIRQHandler (int which, OPL_IRQHANDLER IRQHandler, int param);
104 void Y8950SetUpdateHandler (int which, OPL_UPDATEHANDLER UpdateHandler, int param);
105 
106 #endif
107 
108 #define FM_OPL_SAVESTATE_YM3812		1
109 #define FM_OPL_SAVESTATE_YM3526		2
110 #define FM_OPL_SAVESTATE_Y8950		3
111 
112 void FMOPLScan(INT32 nType, INT32 which, INT32 nAction, INT32 *pnMin);
113 
114 #endif /* __FMOPL_H_ */
115