diff options
author | Simon Howard | 2010-08-15 14:57:37 +0000 |
---|---|---|
committer | Simon Howard | 2010-08-15 14:57:37 +0000 |
commit | 578a06c798f9b0d52f74d8bfc9258ef74a9bb6c9 (patch) | |
tree | 1da709cc927ec95ab1aaa907b59e0b794a8b1fc5 /opl/fmopl.h | |
parent | 6ebf557c44b11a16ff15e5f560a81753be33bad3 (diff) | |
download | chocolate-doom-578a06c798f9b0d52f74d8bfc9258ef74a9bb6c9.tar.gz chocolate-doom-578a06c798f9b0d52f74d8bfc9258ef74a9bb6c9.tar.bz2 chocolate-doom-578a06c798f9b0d52f74d8bfc9258ef74a9bb6c9.zip |
Hook DBOPL into OPL library and remove FMOPL. Does not generate any
sound yet.
Subversion-branch: /trunk/chocolate-doom
Subversion-revision: 1956
Diffstat (limited to 'opl/fmopl.h')
-rw-r--r-- | opl/fmopl.h | 167 |
1 files changed, 0 insertions, 167 deletions
diff --git a/opl/fmopl.h b/opl/fmopl.h deleted file mode 100644 index 2bbe8363..00000000 --- a/opl/fmopl.h +++ /dev/null @@ -1,167 +0,0 @@ -/* This file is derived from fmopl.h from ScummVM. - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * LGPL licensed version of MAMEs fmopl (V0.37a modified) by - * Tatsuyuki Satoh. Included from LGPL'ed AdPlug. - */ - - -#ifndef OPL_FMOPL_H -#define OPL_FMOPL_H - -#include "inttypes.h" - -enum { - FMOPL_ENV_BITS_HQ = 16, - FMOPL_ENV_BITS_MQ = 8, - FMOPL_ENV_BITS_LQ = 8, - FMOPL_EG_ENT_HQ = 4096, - FMOPL_EG_ENT_MQ = 1024, - FMOPL_EG_ENT_LQ = 128 -}; - -typedef void (*OPL_TIMERHANDLER)(int channel,double interval_Sec); -typedef void (*OPL_IRQHANDLER)(int param,int irq); -typedef void (*OPL_UPDATEHANDLER)(int param,int min_interval_us); - -#define OPL_TYPE_WAVESEL 0x01 /* waveform select */ - -/* Saving is necessary for member of the 'R' mark for suspend/resume */ -/* ---------- OPL one of slot ---------- */ -typedef struct fm_opl_slot { - int TL; /* total level :TL << 8 */ - int TLL; /* adjusted now TL */ - uint8_t KSR; /* key scale rate :(shift down bit) */ - int *AR; /* attack rate :&AR_TABLE[AR<<2] */ - int *DR; /* decay rate :&DR_TABLE[DR<<2] */ - int SL; /* sustain level :SL_TABLE[SL] */ - int *RR; /* release rate :&DR_TABLE[RR<<2] */ - uint8_t ksl; /* keyscale level :(shift down bits) */ - uint8_t ksr; /* key scale rate :kcode>>KSR */ - unsigned int mul; /* multiple :ML_TABLE[ML] */ - unsigned int Cnt; /* frequency count */ - unsigned int Incr; /* frequency step */ - - /* envelope generator state */ - uint8_t eg_typ;/* envelope type flag */ - uint8_t evm; /* envelope phase */ - int evc; /* envelope counter */ - int eve; /* envelope counter end point */ - int evs; /* envelope counter step */ - int evsa; /* envelope step for AR :AR[ksr] */ - int evsd; /* envelope step for DR :DR[ksr] */ - int evsr; /* envelope step for RR :RR[ksr] */ - - /* LFO */ - uint8_t ams; /* ams flag */ - uint8_t vib; /* vibrate flag */ - /* wave selector */ - int **wavetable; -} OPL_SLOT; - -/* ---------- OPL one of channel ---------- */ -typedef struct fm_opl_channel { - OPL_SLOT SLOT[2]; - uint8_t CON; /* connection type */ - uint8_t FB; /* feed back :(shift down bit)*/ - int *connect1; /* slot1 output pointer */ - int *connect2; /* slot2 output pointer */ - int op1_out[2]; /* slot1 output for selfeedback */ - - /* phase generator state */ - unsigned int block_fnum; /* block+fnum */ - uint8_t kcode; /* key code : KeyScaleCode */ - unsigned int fc; /* Freq. Increment base */ - unsigned int ksl_base; /* KeyScaleLevel Base step */ - uint8_t keyon; /* key on/off flag */ -} OPL_CH; - -/* OPL state */ -typedef struct fm_opl_f { - uint8_t type; /* chip type */ - int clock; /* master clock (Hz) */ - int rate; /* sampling rate (Hz) */ - double freqbase; /* frequency base */ - double TimerBase; /* Timer base time (==sampling time) */ - uint8_t address; /* address register */ - uint8_t status; /* status flag */ - uint8_t statusmask; /* status mask */ - unsigned int mode; /* Reg.08 : CSM , notesel,etc. */ - - /* Timer */ - int T[2]; /* timer counter */ - uint8_t st[2]; /* timer enable */ - - /* FM channel slots */ - OPL_CH *P_CH; /* pointer of CH */ - int max_ch; /* maximum channel */ - - /* Rythm sention */ - uint8_t rythm; /* Rythm mode , key flag */ - - /* time tables */ - int AR_TABLE[76]; /* atttack rate tables */ - int DR_TABLE[76]; /* decay rate tables */ - unsigned int FN_TABLE[1024];/* fnumber -> increment counter */ - - /* LFO */ - int *ams_table; - int *vib_table; - int amsCnt; - int amsIncr; - int vibCnt; - int vibIncr; - - /* wave selector enable flag */ - uint8_t wavesel; - - /* external event callback handler */ - OPL_TIMERHANDLER TimerHandler; /* TIMER handler */ - int TimerParam; /* TIMER parameter */ - OPL_IRQHANDLER IRQHandler; /* IRQ handler */ - int IRQParam; /* IRQ parameter */ - OPL_UPDATEHANDLER UpdateHandler; /* stream update handler */ - int UpdateParam; /* stream update parameter */ -} FM_OPL; - -/* ---------- Generic interface section ---------- */ -#define OPL_TYPE_YM3526 (0) -#define OPL_TYPE_YM3812 (OPL_TYPE_WAVESEL) - -void OPLBuildTables(int ENV_BITS_PARAM, int EG_ENT_PARAM); - -FM_OPL *OPLCreate(int type, int clock, int rate); -void OPLDestroy(FM_OPL *OPL); -void OPLSetTimerHandler(FM_OPL *OPL, OPL_TIMERHANDLER TimerHandler, int channelOffset); -void OPLSetIRQHandler(FM_OPL *OPL, OPL_IRQHANDLER IRQHandler, int param); -void OPLSetUpdateHandler(FM_OPL *OPL, OPL_UPDATEHANDLER UpdateHandler, int param); - -void OPLResetChip(FM_OPL *OPL); -int OPLWrite(FM_OPL *OPL, int a, int v); -unsigned char OPLRead(FM_OPL *OPL, int a); -int OPLTimerOver(FM_OPL *OPL, int c); -void OPLWriteReg(FM_OPL *OPL, int r, int v); -void YM3812UpdateOne(FM_OPL *OPL, int16_t *buffer, int length, int interleave); - -// Factory method -FM_OPL *makeAdlibOPL(int rate); - -#endif - |