kopia lustrzana https://github.com/Jean-MarcHarvengt/MCUME
182 wiersze
5.4 KiB
C
182 wiersze
5.4 KiB
C
|
|
#ifndef _H_FM_FM_
|
|
#define _H_FM_FM_
|
|
|
|
#define HAS_YM2612 1
|
|
|
|
#define BUILD_YM2612 (HAS_YM2612 || HAS_YM3438)
|
|
|
|
#define FM_STEREO_MIX 0
|
|
#define FM_OUTPUT_BIT 16
|
|
#define FM_INTERNAL_TIMER 0
|
|
|
|
#define FM_LFO_SUPPORT 1
|
|
#define FM_SEG_SUPPORT 0
|
|
|
|
#if BUILD_YM2612
|
|
/* in 2612intf.c */
|
|
#define YM2612UpdateReq(chip) YM2612UpdateRequest(chip);
|
|
#endif
|
|
|
|
/* compiler dependence */
|
|
#ifndef OSD_CPU_H
|
|
#define OSD_CPU_H
|
|
typedef unsigned char UINT8; /* unsigned 8bit */
|
|
typedef unsigned short UINT16; /* unsigned 16bit */
|
|
typedef unsigned int UINT32; /* unsigned 32bit */
|
|
typedef signed char INT8; /* signed 8bit */
|
|
typedef signed short INT16; /* signed 16bit */
|
|
typedef signed int INT32; /* signed 32bit */
|
|
#endif
|
|
|
|
#define YM2203_NUMBUF 1
|
|
#if FM_STEREO_MIX
|
|
#define YM2151_NUMBUF 1
|
|
#define YM2608_NUMBUF 1
|
|
#define YM2612_NUMBUF 1
|
|
#define YM2610_NUMBUF 1
|
|
#else
|
|
#define YM2151_NUMBUF 2 /* FM L+R */
|
|
#define YM2608_NUMBUF 2 /* FM L+R+ADPCM+RYTHM */
|
|
#define YM2610_NUMBUF 2 /* FM L+R+ADPCMA+ADPCMB */
|
|
#define YM2612_NUMBUF 2 /* FM L+R */
|
|
#endif
|
|
|
|
#if (FM_OUTPUT_BIT==16)
|
|
typedef INT16 FMSAMPLE;
|
|
typedef unsigned long FMSAMPLE_MIX;
|
|
#endif
|
|
#if (FM_OUTPUT_BIT==8)
|
|
typedef unsigned char FMSAMPLE;
|
|
typedef unsigned short FMSAMPLE_MIX;
|
|
#endif
|
|
|
|
typedef void (*FM_TIMERHANDLER)(int n,int c,int cnt,double stepTime);
|
|
typedef void (*FM_IRQHANDLER)(int n,int irq);
|
|
/* FM_TIMERHANDLER : Stop or Start timer */
|
|
/* int n = chip number */
|
|
/* int c = Channel 0=TimerA,1=TimerB */
|
|
/* int count = timer count (0=stop) */
|
|
/* doube stepTime = step time of one count (sec.)*/
|
|
|
|
/* FM_IRQHHANDLER : IRQ level changing sense */
|
|
/* int n = chip number */
|
|
/* int irq = IRQ level 0=OFF,1=ON */
|
|
|
|
#if BUILD_YM2203
|
|
/* -------------------- YM2203(OPN) Interface -------------------- */
|
|
|
|
/*
|
|
** Initialize YM2203 emulator(s).
|
|
**
|
|
** 'num' is the number of virtual YM2203's to allocate
|
|
** 'baseclock'
|
|
** 'rate' is sampling rate
|
|
** 'TimerHandler' timer callback handler when timer start and clear
|
|
** 'IRQHandler' IRQ callback handler when changed IRQ level
|
|
** return 0 = success
|
|
*/
|
|
int YM2203Init(int num, int baseclock, int rate,
|
|
FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler);
|
|
|
|
/*
|
|
** shutdown the YM2203 emulators .. make sure that no sound system stuff
|
|
** is touching our audio buffers ...
|
|
*/
|
|
void YM2203Shutdown(void);
|
|
|
|
/*
|
|
** reset all chip registers for YM2203 number 'num'
|
|
*/
|
|
void YM2203ResetChip(int num);
|
|
/*
|
|
** update one of chip
|
|
*/
|
|
|
|
void YM2203UpdateOne(int num, INT16 *buffer, int length);
|
|
|
|
/*
|
|
** Write
|
|
** return : InterruptLevel
|
|
*/
|
|
int YM2203Write(int n,int a,unsigned char v);
|
|
/*
|
|
** Read
|
|
** return : InterruptLevel
|
|
*/
|
|
unsigned char YM2203Read(int n,int a);
|
|
|
|
/*
|
|
** Timer OverFlow
|
|
*/
|
|
int YM2203TimerOver(int n, int c);
|
|
|
|
#endif /* BUILD_YM2203 */
|
|
|
|
#if BUILD_YM2608
|
|
/* -------------------- YM2608(OPNA) Interface -------------------- */
|
|
int YM2608Init(int num, int baseclock, int rate,
|
|
void **pcmroma,int *pcmsizea,short *rhythmrom,int *rhythmpos,
|
|
FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler);
|
|
void YM2608Shutdown(void);
|
|
void YM2608ResetChip(int num);
|
|
void YM2608UpdateOne(int num, INT16 **buffer, int length);
|
|
|
|
int YM2608Write(int n, int a,unsigned char v);
|
|
unsigned char YM2608Read(int n,int a);
|
|
int YM2608TimerOver(int n, int c );
|
|
#endif /* BUILD_YM2608 */
|
|
|
|
#if (BUILD_YM2610||BUILD_YM2610B)
|
|
/* -------------------- YM2610(OPNB) Interface -------------------- */
|
|
int YM2610Init(int num, int baseclock, int rate,
|
|
void **pcmroma,int *pcmasize,void **pcmromb,int *pcmbsize,
|
|
FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler);
|
|
void YM2610Shutdown(void);
|
|
void YM2610ResetChip(int num);
|
|
void YM2610UpdateOne(int num, INT16 **buffer, int length);
|
|
#if BUILD_YM2610B
|
|
void YM2610BUpdateOne(int num, INT16 **buffer, int length);
|
|
#endif
|
|
|
|
int YM2610Write(int n, int a,unsigned char v);
|
|
unsigned char YM2610Read(int n,int a);
|
|
int YM2610TimerOver(int n, int c );
|
|
|
|
#endif /* BUILD_YM2610 */
|
|
|
|
#if BUILD_YM2612
|
|
int YM2612Init(int num, int baseclock, int rate,
|
|
FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler);
|
|
void YM2612Shutdown(void);
|
|
void YM2612ResetChip(int num);
|
|
void YM2612UpdateOne(int num, INT16 **buffer, int length);
|
|
int YM2612Write(int n, int a,unsigned char v);
|
|
unsigned char YM2612Read(int n,int a);
|
|
int YM2612TimerOver(int n, int c );
|
|
|
|
#endif /* BUILD_YM2612 */
|
|
|
|
#if BUILD_YM2151
|
|
/* -------------------- YM2151(OPM) Interface -------------------- */
|
|
int OPMInit(int num, int baseclock, int rate,
|
|
FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler);
|
|
void OPMShutdown(void);
|
|
void OPMResetChip(int num);
|
|
|
|
void OPMUpdateOne(int num, INT16 **buffer, int length );
|
|
/* ---- set callback hander when port CT0/1 write ----- */
|
|
/* CT.bit0 = CT0 , CT.bit1 = CT1 */
|
|
/*
|
|
typedef void (*mem_write_handler)(int offset,int data);
|
|
*/
|
|
void OPMSetPortHander(int n,mem_write_handler PortWrite);
|
|
/* JB 981119 - so it will match MAME's memory write functions scheme*/
|
|
|
|
int YM2151Write(int n,int a,unsigned char v);
|
|
unsigned char YM2151Read(int n,int a);
|
|
int YM2151TimerOver(int n,int c);
|
|
#endif /* BUILD_YM2151 */
|
|
|
|
#endif /* _H_FM_FM_ */
|