static void Compute_EG(struct _SLOT *slot) { int rate; rate=0; slot->EG.volume=0; slot->EG.AR=Get_AR(rate,AR(slot)); slot->EG.D1R=Get_DR(rate,D1R(slot)); slot->EG.D2R=Get_DR(rate,D2R(slot)); slot->EG.RR=Get_RR(rate,RR(slot)); slot->EG.DL=0x1f-DL(slot); slot->EG.EGHOLD=EGHOLD(slot); }
if(Rate>63) Rate=63; if(Rate<0) Rate=0; return scsp->DRTABLE[Rate]; } static void Compute_EG(scsp_state *scsp,SLOT *slot) { int octave=(OCT(slot)^8)-8; int rate; if(KRS(slot)!=0xf) rate=octave+2*KRS(slot)+((FNS(slot)>>9)&1); else rate=0; //rate=((FNS(slot)>>9)&1); slot->EG.volume=0x17F<<EG_SHIFT; slot->EG.AR=Get_AR(scsp,rate,AR(slot)); slot->EG.D1R=Get_DR(scsp,rate,D1R(slot)); slot->EG.D2R=Get_DR(scsp,rate,D2R(slot)); slot->EG.RR=Get_RR(scsp,rate,RR(slot)); slot->EG.DL=0x1f-DL(slot); slot->EG.EGHOLD=EGHOLD(slot); } static void SCSP_StopSlot(SLOT *slot,int keyoff); static int EG_Update(SLOT *slot) { switch(slot->EG.state) { case ATTACK: slot->EG.volume+=slot->EG.AR;
if(Rate>63) Rate=63; if(Rate<0) Rate=0; return m_DRTABLE[Rate]; } void scsp_device::Compute_EG(SCSP_SLOT *slot) { int octave=(OCT(slot)^8)-8; int rate; if(KRS(slot)!=0xf) rate=octave+2*KRS(slot)+((FNS(slot)>>9)&1); else rate=0; //rate=((FNS(slot)>>9)&1); slot->EG.volume=0x17F<<EG_SHIFT; slot->EG.AR=Get_AR(rate,AR(slot)); slot->EG.D1R=Get_DR(rate,D1R(slot)); slot->EG.D2R=Get_DR(rate,D2R(slot)); slot->EG.RR=Get_RR(rate,RR(slot)); slot->EG.DL=0x1f-DL(slot); slot->EG.EGHOLD=EGHOLD(slot); } int scsp_device::EG_Update(SCSP_SLOT *slot) { switch(slot->EG.state) { case SCSP_ATTACK: slot->EG.volume+=slot->EG.AR; if(slot->EG.volume>=(0x3ff<<EG_SHIFT)) {
if(Rate<0) Rate=0; return AICA->DRTABLE[Rate]; } static void Compute_EG(struct _AICA *AICA,struct _SLOT *slot) { int octave=OCT(slot); int rate; if(octave&8) octave=octave-16; if(KRS(slot)!=0xf) rate=octave+2*KRS(slot)+((FNS(slot)>>9)&1); else rate=0; //rate=((FNS(slot)>>9)&1); slot->EG.volume=0x17f<<EG_SHIFT; slot->EG.AR=Get_AR(AICA,rate,AR(slot)); slot->EG.D1R=Get_DR(AICA,rate,D1R(slot)); slot->EG.D2R=Get_DR(AICA,rate,D2R(slot)); slot->EG.RR=Get_RR(AICA,rate,RR(slot)); slot->EG.DL=0x1f-DL(slot); } static void AICA_StopSlot(struct _SLOT *slot,int keyoff); INLINE static int EG_Update(struct _SLOT *slot) { switch(slot->EG.state) { case ATTACK: slot->EG.volume+=slot->EG.AR; if(slot->EG.volume>=(0x3ff<<EG_SHIFT))
if(Rate<0) Rate=0; return SCSP->ARTABLE[63-Rate]; } static void Compute_EG(struct _SCSP *SCSP,struct _SLOT *slot) { int octave=OCT(slot); int rate; if(octave&8) octave=octave-16; if(KRS(slot)!=0xf) rate=2*(octave+KRS(slot))+((FNS(slot)>>9)&1); else rate=((FNS(slot)>>9)&1); slot->EG.volume=0; slot->EG.AR=Get_AR(SCSP,rate,AR(slot)); slot->EG.D1R=Get_DR(SCSP,rate,D1R(slot)); slot->EG.D2R=Get_DR(SCSP,rate,D2R(slot)); slot->EG.RR=Get_RR(SCSP,rate,RR(slot)); slot->EG.DL=0x1f-DL(slot); slot->EG.EGHOLD=EGHOLD(slot); } static void SCSP_StopSlot(struct _SLOT *slot,int keyoff); static int EG_Update(struct _SLOT *slot) { switch(slot->EG.state) { case ATTACK: slot->EG.volume+=slot->EG.AR;