Well, I investigated the SCSP envelope processing a bit, and I found a bug in the SCSP emulation that's causing the envelope state machine to immediately exit the DECAY1 state upon entering - the comparison operator in the ATTACK-->DECAY1 step is backwards!

I have another patch that incorporates this fix as well as some others. I added (or at least attempted to add) support for LPSLNK and SBCTL. I also fixed a minor panning bug (now both left- and right- stereo channels are fully attenuated when the four least significant bits are set) and put in something more reasonable when key-rate scaling isn't used (it only makes sense to add in bit 9 of FNS when OCT is there as well).

Here's the patch (against AOSDK 1.1):

Code
--- aosdk_base\eng_ssf\scsp.c	2007-11-05 23:43:58.000000000 -0800
+++ aosdk\eng_ssf\scsp.c	2007-11-14 20:57:03.000000000 -0800
@@ -316,7 +316,7 @@
 	if(KRS(slot)!=0xf)
 		rate=2*(octave+KRS(slot))+((FNS(slot)>>9)&1);
 	else
-		rate=((FNS(slot)>>9)&1);
+		rate=0; //rate=((FNS(slot)>>9)&1);
 
 	slot->EG.volume=0;
 	slot->EG.AR=Get_AR(SCSP,rate,AR(slot));
@@ -337,9 +337,12 @@
 			slot->EG.volume+=slot->EG.AR;
 			if(slot->EG.volume>=(0x3ff<<EG_SHIFT))
 			{
-				slot->EG.state=DECAY1;
-				if(slot->EG.D1R>=(1024<<EG_SHIFT)) //Skip DECAY1, go directly to DECAY2
-					slot->EG.state=DECAY2;
+				if (!LPSLNK(slot)) 
+				{
+					slot->EG.state=DECAY1;
+					if(slot->EG.D1R>=(1024<<EG_SHIFT)) //Skip DECAY1, go directly to DECAY2
+						slot->EG.state=DECAY2;
+				}
 				slot->EG.volume=0x3ff<<EG_SHIFT;
 			}
 			if(slot->EG.EGHOLD)
@@ -347,7 +350,7 @@
 			break;
 		case DECAY1:
 			slot->EG.volume-=slot->EG.D1R;
-			if(slot->EG.volume>>(EG_SHIFT+5)>=slot->EG.DL)
+			if(slot->EG.volume>>(EG_SHIFT+5)<=slot->EG.DL)
 				slot->EG.state=DECAY2;
 			break;
 		case DECAY2:
@@ -412,6 +415,7 @@
 	Compute_LFO(slot);
 
 //	printf("StartSlot: SA %x PCM8B %x LPCTL %x ALFOS %x STWINH %x TL %x EFSDL %x\n", SA(slot), PCM8B(slot), LPCTL(slot), ALFOS(slot), STWINH(slot), TL(slot), EFSDL(slot));
+//	printf("           AR %x D1R %x D2R %x RR %x DL %x KRS %x EGHOLD %x LPSLNK %x\n", AR(slot), D1R(slot), D2R(slot), RR(slot), DL(slot), KRS(slot), EGHOLD(slot), LPSLNK(slot));
 }
 
 static void SCSP_StopSlot(struct _SLOT *slot,int keyoff)
@@ -498,7 +502,7 @@
 		if(iPAN&0x4) SegaDB-=12;
 		if(iPAN&0x8) SegaDB-=24;
 
-		if(iPAN==0xf) PAN=0.0;
+		if(iPAN&0xf==0xf) PAN=0.0;
 		else PAN=pow(10.0,SegaDB/20.0);
 
 		if(iPAN<0x10)
@@ -1104,6 +1108,12 @@
 			addr&=0x7ffff;
 	}
 
+	if(addr==LSA(slot))
+	{
+		if(LPSLNK(slot) && slot->EG.state==ATTACK)
+			slot->EG.state = DECAY1;
+	}
+
 	if(PCM8B(slot))	//8 bit signed
 	{
 		INT8 *p=(signed char *) (slot->base+(addr));
@@ -1115,6 +1125,11 @@
 		sample=LE16(p[0]);
 	}
 
+	if(SBCTL(slot)&0x1)
+		sample ^= 0x7FFF;
+	if(SBCTL(slot)&0x2)
+		sample = (INT16)(sample^0x8000);
+
 	if(slot->Backwards)
 		slot->cur_addr-=step;
 	else