Annotation of generator/ym2612/fm.h, revision 1.1.1.2

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_ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.