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