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); }
} 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(slot->EG.volume>=(0x3ff<<EG_SHIFT)) { if (!LPSLNK(slot))
} 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 (!LPSLNK(slot)) { slot->EG.state=SCSP_DECAY1;
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 (!LPSLNK(slot)) {
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; if(slot->EG.volume>=(0x3ff<<EG_SHIFT)) { slot->EG.state=DECAY1;