|
|
1.1.1.2 ! root 1: /* ! 2: File: fm.h -- header file for software emulation for FM sound generator ! 3: ! 4: */ ! 5: #ifndef _H_FM_FM_ ! 6: #define _H_FM_FM_ ! 7: ! 8: /* James Ponder: bits added for Generator */ ! 9: void YM2612_save_state(void); ! 10: ! 11: /* --- select emulation chips --- */ ! 12: #define BUILD_YM2203 (HAS_YM2203) /* build YM2203(OPN) emulator */ ! 13: #define BUILD_YM2608 (HAS_YM2608) /* build YM2608(OPNA) emulator */ ! 14: #define BUILD_YM2610 (HAS_YM2610) /* build YM2610(OPNB) emulator */ ! 15: #define BUILD_YM2610B (HAS_YM2610B) /* build YM2610B(OPNB?)emulator */ ! 16: #define BUILD_YM2612 (HAS_YM2612 || HAS_YM3438) /* build YM2612(OPN2) emulator */ ! 17: #define BUILD_YM2151 (HAS_YM2151) /* build YM2151(OPM) emulator */ ! 18: ! 19: /* --- system optimize --- */ ! 20: /* select stereo output buffer : 1=mixing / 0=separate */ ! 21: #define FM_STEREO_MIX 0 ! 22: /* select bit size of output : 8 or 16 */ ! 23: #define FM_SAMPLE_BITS 16 ! 24: /* select timer system internal or external */ ! 25: /* James Ponder 2001-09-30: use internal timer in Generator */ ! 26: #define FM_INTERNAL_TIMER 1 ! 27: ! 28: /* --- speedup optimize --- */ ! 29: /* support OPN SSG type envelope mode */ ! 30: #define FM_SEG_SUPPORT 0 ! 31: /* busy flag enulation , The definition of FM_GET_TIME_NOW() is necessary. */ ! 32: /* James Ponder 2001-09-30: XXX: no busy flag emulation - needs fixing? */ ! 33: #define FM_BUSY_FLAG_SUPPORT 0 ! 34: ! 35: /* --- external SSG(YM2149/AY-3-8910)emulator interface port */ ! 36: /* used by YM2203,YM2608,and YM2610 */ ! 37: ! 38: /* SSGClk : Set SSG Clock */ ! 39: /* int n = chip number */ ! 40: /* int clk = MasterClock(Hz) */ ! 41: /* int rate = sample rate(Hz) */ ! 42: #define SSGClk(chip,clock) AY8910_set_clock((chip)+ay8910_index_ym,clock) ! 43: ! 44: /* SSGWrite : Write SSG port */ ! 45: /* int n = chip number */ ! 46: /* int a = address */ ! 47: /* int v = data */ ! 48: #define SSGWrite(n,a,v) AY8910Write((n)+ay8910_index_ym,a,v) ! 49: ! 50: /* SSGRead : Read SSG port */ ! 51: /* int n = chip number */ ! 52: /* return = Read data */ ! 53: #define SSGRead(n) AY8910Read((n)+ay8910_index_ym) ! 54: ! 55: /* SSGReset : Reset SSG chip */ ! 56: /* int n = chip number */ ! 57: #define SSGReset(chip) AY8910_reset((chip)+ay8910_index_ym) ! 58: ! 59: /* --- external callback funstions for realtime update --- */ ! 60: ! 61: /* for busy flag emulation , function FM_GET_TIME_NOW() should be */ ! 62: /* return the present time in second unit with (double) value */ ! 63: /* in timer.c */ ! 64: #define FM_GET_TIME_NOW() timer_get_time() ! 65: ! 66: #if BUILD_YM2203 ! 67: /* in 2203intf.c */ ! 68: #define YM2203UpdateReq(chip) YM2203UpdateRequest(chip) ! 69: #endif ! 70: #if BUILD_YM2608 ! 71: /* in 2608intf.c */ ! 72: #define YM2608UpdateReq(chip) YM2608UpdateRequest(chip); ! 73: #endif ! 74: #if BUILD_YM2610 ! 75: /* in 2610intf.c */ ! 76: #define YM2610UpdateReq(chip) YM2610UpdateRequest(chip); ! 77: #endif ! 78: #if BUILD_YM2612 ! 79: /* in 2612intf.c */ ! 80: #define YM2612UpdateReq(chip) YM2612UpdateRequest(chip); ! 81: #endif ! 82: #if BUILD_YM2151 ! 83: /* in 2151intf.c */ ! 84: #define YM2151UpdateReq(chip) YM2151UpdateRequest(chip); ! 85: #endif ! 86: ! 87: /* compiler dependence */ ! 88: #ifndef OSD_CPU_H ! 89: #define OSD_CPU_H ! 90: /* James Ponder: only define these types if they don't already exist */ ! 91: #ifndef UINT8 ! 92: typedef unsigned char UINT8; /* unsigned 8bit */ ! 93: #endif ! 94: #ifndef UINT16 ! 95: typedef unsigned short UINT16; /* unsigned 16bit */ ! 96: #endif ! 97: #ifndef UINT32 ! 98: typedef unsigned int UINT32; /* unsigned 32bit */ ! 99: #endif ! 100: #ifndef INT8 ! 101: typedef signed char INT8; /* signed 8bit */ ! 102: #endif ! 103: #ifndef INT16 ! 104: typedef signed short INT16; /* signed 16bit */ ! 105: #endif ! 106: #ifndef INT32 ! 107: typedef signed int INT32; /* signed 32bit */ ! 108: #endif ! 109: #endif ! 110: ! 111: #define YM2203_NUMBUF 1 ! 112: #if FM_STEREO_MIX ! 113: #define YM2151_NUMBUF 1 ! 114: #define YM2608_NUMBUF 1 ! 115: #define YM2612_NUMBUF 1 ! 116: #define YM2610_NUMBUF 1 ! 117: #else ! 118: #define YM2151_NUMBUF 2 /* FM L+R */ ! 119: #define YM2608_NUMBUF 2 /* FM L+R+ADPCM+RYTHM */ ! 120: #define YM2610_NUMBUF 2 /* FM L+R+ADPCMA+ADPCMB */ ! 121: #define YM2612_NUMBUF 2 /* FM L+R */ ! 122: #endif ! 123: ! 124: #if (FM_SAMPLE_BITS==16) ! 125: typedef INT16 FMSAMPLE; ! 126: typedef unsigned long FMSAMPLE_MIX; ! 127: #endif ! 128: #if (FM_SAMPLE_BITS==8) ! 129: typedef unsigned char FMSAMPLE; ! 130: typedef unsigned short FMSAMPLE_MIX; ! 131: #endif ! 132: ! 133: typedef void (*FM_TIMERHANDLER)(int n,int c,int cnt,double stepTime); ! 134: typedef void (*FM_IRQHANDLER)(int n,int irq); ! 135: /* FM_TIMERHANDLER : Stop or Start timer */ ! 136: /* int n = chip number */ ! 137: /* int c = Channel 0=TimerA,1=TimerB */ ! 138: /* int count = timer count (0=stop) */ ! 139: /* doube stepTime = step time of one count (sec.)*/ ! 140: ! 141: /* FM_IRQHHANDLER : IRQ level changing sense */ ! 142: /* int n = chip number */ ! 143: /* int irq = IRQ level 0=OFF,1=ON */ ! 144: ! 145: #if BUILD_YM2203 ! 146: /* -------------------- YM2203(OPN) Interface -------------------- */ ! 147: ! 148: /* ! 149: ** Initialize YM2203 emulator(s). ! 150: ** ! 151: ** 'num' is the number of virtual YM2203's to allocate ! 152: ** 'baseclock' ! 153: ** 'rate' is sampling rate ! 154: ** 'TimerHandler' timer callback handler when timer start and clear ! 155: ** 'IRQHandler' IRQ callback handler when changed IRQ level ! 156: ** return 0 = success ! 157: */ ! 158: int YM2203Init(int num, int baseclock, int rate, ! 159: FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler); ! 160: ! 161: /* ! 162: ** shutdown the YM2203 emulators .. make sure that no sound system stuff ! 163: ** is touching our audio buffers ... ! 164: */ ! 165: void YM2203Shutdown(void); ! 166: ! 167: /* ! 168: ** reset all chip registers for YM2203 number 'num' ! 169: */ ! 170: void YM2203ResetChip(int num); ! 171: /* ! 172: ** update one of chip ! 173: */ ! 174: ! 175: void YM2203UpdateOne(int num, INT16 *buffer, int length); ! 176: ! 177: /* ! 178: ** Write ! 179: ** return : InterruptLevel ! 180: */ ! 181: int YM2203Write(int n,int a,unsigned char v); ! 182: /* ! 183: ** Read ! 184: ** return : InterruptLevel ! 185: */ ! 186: unsigned char YM2203Read(int n,int a); ! 187: ! 188: /* ! 189: ** Timer OverFlow ! 190: */ ! 191: int YM2203TimerOver(int n, int c); ! 192: ! 193: #endif /* BUILD_YM2203 */ ! 194: ! 195: #if BUILD_YM2608 ! 196: /* -------------------- YM2608(OPNA) Interface -------------------- */ ! 197: int YM2608Init(int num, int baseclock, int rate, ! 198: void **pcmroma,int *pcmsizea,short *rhythmrom,int *rhythmpos, ! 199: FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler); ! 200: void YM2608Shutdown(void); ! 201: void YM2608ResetChip(int num); ! 202: void YM2608UpdateOne(int num, INT16 **buffer, int length); ! 203: ! 204: int YM2608Write(int n, int a,unsigned char v); ! 205: unsigned char YM2608Read(int n,int a); ! 206: int YM2608TimerOver(int n, int c ); ! 207: #endif /* BUILD_YM2608 */ ! 208: ! 209: #if (BUILD_YM2610||BUILD_YM2610B) ! 210: /* -------------------- YM2610(OPNB) Interface -------------------- */ ! 211: int YM2610Init(int num, int baseclock, int rate, ! 212: void **pcmroma,int *pcmasize,void **pcmromb,int *pcmbsize, ! 213: FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler); ! 214: void YM2610Shutdown(void); ! 215: void YM2610ResetChip(int num); ! 216: void YM2610UpdateOne(int num, INT16 **buffer, int length); ! 217: #if BUILD_YM2610B ! 218: void YM2610BUpdateOne(int num, INT16 **buffer, int length); ! 219: #endif ! 220: ! 221: int YM2610Write(int n, int a,unsigned char v); ! 222: unsigned char YM2610Read(int n,int a); ! 223: int YM2610TimerOver(int n, int c ); ! 224: ! 225: #endif /* BUILD_YM2610 */ ! 226: ! 227: #if BUILD_YM2612 ! 228: int YM2612Init(int num, int baseclock, int rate, ! 229: FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler); ! 230: void YM2612Shutdown(void); ! 231: void YM2612ResetChip(int num); ! 232: void YM2612UpdateOne(int num, INT16 **buffer, int length); ! 233: int YM2612Write(int n, int a,unsigned char v); ! 234: unsigned char YM2612Read(int n,int a); ! 235: int YM2612TimerOver(int n, int c ); ! 236: ! 237: #endif /* BUILD_YM2612 */ ! 238: ! 239: #if BUILD_YM2151 ! 240: /* -------------------- YM2151(OPM) Interface -------------------- */ ! 241: int OPMInit(int num, int baseclock, int rate, ! 242: FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler); ! 243: void OPMShutdown(void); ! 244: void OPMResetChip(int num); ! 245: ! 246: void OPMUpdateOne(int num, INT16 **buffer, int length ); ! 247: /* ---- set callback hander when port CT0/1 write ----- */ ! 248: /* CT.bit0 = CT0 , CT.bit1 = CT1 */ ! 249: /* ! 250: typedef void (*mem_write_handler)(int offset,int data); ! 251: */ ! 252: void OPMSetPortHander(int n,mem_write_handler PortWrite); ! 253: /* JB 981119 - so it will match MAME's memory write functions scheme*/ ! 254: ! 255: int YM2151Write(int n,int a,unsigned char v); ! 256: unsigned char YM2151Read(int n,int a); ! 257: int YM2151TimerOver(int n,int c); ! 258: #endif /* BUILD_YM2151 */ ! 259: ! 260: #endif /* _H_FM_FM_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.