コード例 #1
0
ファイル: FM.cs プロジェクト: DarrenRainey/xnamame036
 static void CALC_FCSLOT(FM_SLOT SLOT, int fc, int kc)
 {
     int ksr;
     return;//xxx
     /* frequency step counter */
     /* SLOT.Incr= (fc+SLOT.DT[kc])*SLOT.mul; */
     SLOT.Incr = (uint)(fc * SLOT.mul + SLOT.DT[kc]);
     ksr = kc >> SLOT.KSR;
     if (SLOT.ksr != ksr)
     {
         SLOT.ksr = (byte)ksr;
         /* attack , decay rate recalcration */
         SLOT.evsa = SLOT.AR[ksr];
         SLOT.evsd = SLOT.DR[ksr];
         SLOT.evss = SLOT.SR[ksr];
         SLOT.evsr = SLOT.RR[ksr];
     }
     SLOT.TLL = SLOT.TL /* + KSL[kc]*/;
 }
コード例 #2
0
ファイル: FM.cs プロジェクト: DarrenRainey/xnamame036
 /* set sustain rate */
 static void set_sr(FM_SLOT SLOT, int v, IntSubArray dr_table)
 {
     SLOT.SR = (v &= 0x1f) != 0 ? new IntSubArray(dr_table, v << 1) : new IntSubArray(RATE_0);
     SLOT.evss = SLOT.SR[SLOT.ksr];
     if (SLOT.eg_next == FM_EG_SR) SLOT.evs = SLOT.evss;
 }
コード例 #3
0
ファイル: FM.cs プロジェクト: DarrenRainey/xnamame036
 /* set release rate */
 static void set_sl_rr(FM_SLOT SLOT, int v, IntSubArray dr_table)
 {
     SLOT.SL = SL_TABLE[(v >> 4)];
     SLOT.RR = new IntSubArray(dr_table, ((v & 0x0f) << 2) | 2);
     SLOT.evsr = SLOT.RR[SLOT.ksr];
     if (SLOT.eg_next == FM_EG_Release) SLOT.evs = SLOT.evsr;
 }
コード例 #4
0
ファイル: FM.cs プロジェクト: DarrenRainey/xnamame036
 /* set total level */
 static void set_tl(FM_CH CH, FM_SLOT SLOT, int v, int csmflag)
 {
     v &= 0x7f;
     v = (v << 7) | v; /* 7bit . 14bit */
     SLOT.TL = (v * EG_ENT) >> 14;
     if (csmflag == 0)
     {	/* not CSM latch total level */
         SLOT.TLL = SLOT.TL /* + KSL[CH.kcode] */;
     }
 }
コード例 #5
0
ファイル: FM.cs プロジェクト: DarrenRainey/xnamame036
 /* set attack rate & key scale  */
 static void set_ar_ksr(FM_CH CH, FM_SLOT SLOT, int v, IntSubArray ar_table)
 {
     SLOT.KSR = (byte)(3 - (v >> 6));
     SLOT.AR = (v &= 0x1f) != 0 ? new IntSubArray(ar_table, v << 1) : new IntSubArray(RATE_0);
     SLOT.evsa = SLOT.AR[SLOT.ksr];
     if (SLOT.eg_next == FM_EG_AR) SLOT.evs = SLOT.evsa;
     CH.SLOT[SLOT1].Incr = unchecked((uint)-1);
 }
コード例 #6
0
ファイル: FM.cs プロジェクト: DarrenRainey/xnamame036
 static bool FM_KEY_IS(FM_SLOT SLOT) { return (SLOT.eg_next != FM_EG_Release); }
コード例 #7
0
ファイル: FM.cs プロジェクト: DarrenRainey/xnamame036
 /* set detune & multiple */
 static void set_det_mul(FM_ST ST, FM_CH CH, FM_SLOT SLOT, int v)
 {
     SLOT.mul = (uint)MUL_TABLE[v & 0x0f];
     SLOT.DT = ST.DT_TABLE[(v >> 4) & 7];
     CH.SLOT[SLOT1].Incr = unchecked((uint)-1);
 }
コード例 #8
0
ファイル: FM.cs プロジェクト: DarrenRainey/xnamame036
 static void FM_EG_AR(FM_SLOT SLOT)
 {
     /* next DR */
     SLOT.eg_next = FM_EG_DR;
     SLOT.evc = EG_DST;
     SLOT.eve = SLOT.SL;
     SLOT.evs = SLOT.evsd;
 }
コード例 #9
0
ファイル: FM.cs プロジェクト: DarrenRainey/xnamame036
 static void FM_EG_Release(FM_SLOT SLOT)
 {
     SLOT.evc = EG_OFF;
     SLOT.eve = EG_OFF + 1;
     SLOT.evs = 0;
 }
コード例 #10
0
ファイル: FM.cs プロジェクト: DarrenRainey/xnamame036
 static void FM_EG_DR(FM_SLOT SLOT)
 {
     SLOT.eg_next = FM_EG_SR;
     SLOT.evc = SLOT.SL;
     SLOT.eve = EG_DED;
     SLOT.evs = SLOT.evss;
 }
コード例 #11
0
ファイル: FM.cs プロジェクト: DarrenRainey/xnamame036
 static void FM_EG_SR(FM_SLOT SLOT)
 {
     SLOT.evc = EG_OFF;
     SLOT.eve = EG_OFF + 1;
     SLOT.evs = 0;
 }
コード例 #12
0
ファイル: FM.cs プロジェクト: DarrenRainey/xnamame036
 public FM_CH()
 {
     for (int i = 0; i < 4; i++)
         SLOT[i] = new FM_SLOT();
 }
コード例 #13
0
ファイル: FM.cs プロジェクト: DarrenRainey/xnamame036
 static  void FM_CALC_EG(ref int OUT, FM_SLOT SLOT)
 {
 }
コード例 #14
0
ファイル: FM.cs プロジェクト: DarrenRainey/xnamame036
 static void FM_CALC_EG(ref uint OUT, FM_SLOT SLOT)
 {
     if ((SLOT.evc += SLOT.evs) >= SLOT.eve)
         SLOT.eg_next((SLOT));
     OUT = (uint)(SLOT.TLL + ENV_CURVE[SLOT.evc >> ENV_BITS]);
     if (SLOT.ams != 0)
         OUT += (SLOT.ams * lfo_amd / LFO_RATE);
 }