fm.h
1 2 #ifndef _H_FM_FM_ 3 #define _H_FM_FM_ 4 5 #define HAS_YM2612 1 6 7 #define BUILD_YM2612 (HAS_YM2612 || HAS_YM3438) 8 9 #define FM_STEREO_MIX 0 10 #define FM_OUTPUT_BIT 16 11 #define FM_INTERNAL_TIMER 0 12 13 #define FM_LFO_SUPPORT 1 14 #define FM_SEG_SUPPORT 0 15 16 #if BUILD_YM2612 17 /* in 2612intf.c */ 18 #define YM2612UpdateReq(chip) YM2612UpdateRequest(chip); 19 #endif 20 21 /* compiler dependence */ 22 #ifndef OSD_CPU_H 23 #define OSD_CPU_H 24 typedef unsigned char UINT8; /* unsigned 8bit */ 25 typedef unsigned short UINT16; /* unsigned 16bit */ 26 typedef unsigned int UINT32; /* unsigned 32bit */ 27 typedef signed char INT8; /* signed 8bit */ 28 typedef signed short INT16; /* signed 16bit */ 29 typedef signed int INT32; /* signed 32bit */ 30 #endif 31 32 #define YM2203_NUMBUF 1 33 #if FM_STEREO_MIX 34 #define YM2151_NUMBUF 1 35 #define YM2608_NUMBUF 1 36 #define YM2612_NUMBUF 1 37 #define YM2610_NUMBUF 1 38 #else 39 #define YM2151_NUMBUF 2 /* FM L+R */ 40 #define YM2608_NUMBUF 2 /* FM L+R+ADPCM+RYTHM */ 41 #define YM2610_NUMBUF 2 /* FM L+R+ADPCMA+ADPCMB */ 42 #define YM2612_NUMBUF 2 /* FM L+R */ 43 #endif 44 45 #if (FM_OUTPUT_BIT==16) 46 typedef INT16 FMSAMPLE; 47 typedef unsigned long FMSAMPLE_MIX; 48 #endif 49 #if (FM_OUTPUT_BIT==8) 50 typedef unsigned char FMSAMPLE; 51 typedef unsigned short FMSAMPLE_MIX; 52 #endif 53 54 typedef void (*FM_TIMERHANDLER)(int n,int c,int cnt,double stepTime); 55 typedef void (*FM_IRQHANDLER)(int n,int irq); 56 /* FM_TIMERHANDLER : Stop or Start timer */ 57 /* int n = chip number */ 58 /* int c = Channel 0=TimerA,1=TimerB */ 59 /* int count = timer count (0=stop) */ 60 /* doube stepTime = step time of one count (sec.)*/ 61 62 /* FM_IRQHHANDLER : IRQ level changing sense */ 63 /* int n = chip number */ 64 /* int irq = IRQ level 0=OFF,1=ON */ 65 66 #if BUILD_YM2203 67 /* -------------------- YM2203(OPN) Interface -------------------- */ 68 69 /* 70 ** Initialize YM2203 emulator(s). 71 ** 72 ** 'num' is the number of virtual YM2203's to allocate 73 ** 'baseclock' 74 ** 'rate' is sampling rate 75 ** 'TimerHandler' timer callback handler when timer start and clear 76 ** 'IRQHandler' IRQ callback handler when changed IRQ level 77 ** return 0 = success 78 */ 79 int YM2203Init(int num, int baseclock, int rate, 80 FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler); 81 82 /* 83 ** shutdown the YM2203 emulators .. make sure that no sound system stuff 84 ** is touching our audio buffers ... 85 */ 86 void YM2203Shutdown(void); 87 88 /* 89 ** reset all chip registers for YM2203 number 'num' 90 */ 91 void YM2203ResetChip(int num); 92 /* 93 ** update one of chip 94 */ 95 96 void YM2203UpdateOne(int num, INT16 *buffer, int length); 97 98 /* 99 ** Write 100 ** return : InterruptLevel 101 */ 102 int YM2203Write(int n,int a,unsigned char v); 103 /* 104 ** Read 105 ** return : InterruptLevel 106 */ 107 unsigned char YM2203Read(int n,int a); 108 109 /* 110 ** Timer OverFlow 111 */ 112 int YM2203TimerOver(int n, int c); 113 114 #endif /* BUILD_YM2203 */ 115 116 #if BUILD_YM2608 117 /* -------------------- YM2608(OPNA) Interface -------------------- */ 118 int YM2608Init(int num, int baseclock, int rate, 119 void **pcmroma,int *pcmsizea,short *rhythmrom,int *rhythmpos, 120 FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler); 121 void YM2608Shutdown(void); 122 void YM2608ResetChip(int num); 123 void YM2608UpdateOne(int num, INT16 **buffer, int length); 124 125 int YM2608Write(int n, int a,unsigned char v); 126 unsigned char YM2608Read(int n,int a); 127 int YM2608TimerOver(int n, int c ); 128 #endif /* BUILD_YM2608 */ 129 130 #if (BUILD_YM2610||BUILD_YM2610B) 131 /* -------------------- YM2610(OPNB) Interface -------------------- */ 132 int YM2610Init(int num, int baseclock, int rate, 133 void **pcmroma,int *pcmasize,void **pcmromb,int *pcmbsize, 134 FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler); 135 void YM2610Shutdown(void); 136 void YM2610ResetChip(int num); 137 void YM2610UpdateOne(int num, INT16 **buffer, int length); 138 #if BUILD_YM2610B 139 void YM2610BUpdateOne(int num, INT16 **buffer, int length); 140 #endif 141 142 int YM2610Write(int n, int a,unsigned char v); 143 unsigned char YM2610Read(int n,int a); 144 int YM2610TimerOver(int n, int c ); 145 146 #endif /* BUILD_YM2610 */ 147 148 #if BUILD_YM2612 149 int YM2612Init(int num, int baseclock, int rate, 150 FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler); 151 void YM2612Shutdown(void); 152 void YM2612ResetChip(int num); 153 void YM2612UpdateOne(int num, INT16 **buffer, int length); 154 int YM2612Write(int n, int a,unsigned char v); 155 unsigned char YM2612Read(int n,int a); 156 int YM2612TimerOver(int n, int c ); 157 158 #endif /* BUILD_YM2612 */ 159 160 #if BUILD_YM2151 161 /* -------------------- YM2151(OPM) Interface -------------------- */ 162 int OPMInit(int num, int baseclock, int rate, 163 FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler); 164 void OPMShutdown(void); 165 void OPMResetChip(int num); 166 167 void OPMUpdateOne(int num, INT16 **buffer, int length ); 168 /* ---- set callback hander when port CT0/1 write ----- */ 169 /* CT.bit0 = CT0 , CT.bit1 = CT1 */ 170 /* 171 typedef void (*mem_write_handler)(int offset,int data); 172 */ 173 void OPMSetPortHander(int n,mem_write_handler PortWrite); 174 /* JB 981119 - so it will match MAME's memory write functions scheme*/ 175 176 int YM2151Write(int n,int a,unsigned char v); 177 unsigned char YM2151Read(int n,int a); 178 int YM2151TimerOver(int n,int c); 179 #endif /* BUILD_YM2151 */ 180 181 #endif /* _H_FM_FM_ */