I've been attacking the AM2 (DTPK) sound driver this past week and now understand enough of it to successfully rip dsfs. So, I tested out some Virtua Fighter 3TB rips with AOSDK 1.4.4 and noticed the following:

(1) They are playing way too slow.
(2) Many voices aren't being keyed-on properly (many are cut off abruptly).

(1) was obviously a timer problem. A quick scan through aica.c revealed a few places where the timer register offsets were incorrect (some of these were actually using SCSP offsets). I changed these offsets to the correct values and the VF3 tracks are now playing at the correct speed. Interestingly enough, the AM2 driver actually runs on Timer B (so it is actually used for something).

For (2), I was almost certain that was related to slot-monitoring based on previous experience with Segagaga. Some quick tests confirmed my hypothesis. I'm not exactly sure how to fix this, but commenting out the AEG monitoring fixes the rest of the problems with VF3TB dsf playback.

patch:
Code
diff -Nru aosdk_base/eng_dsf/aica.c aosdk/eng_dsf/aica.c
--- aosdk_base/eng_dsf/aica.c	2008-07-28 11:16:04.000000000 -0700
+++ aosdk/eng_dsf/aica.c	2008-10-29 22:54:12.000000000 -0700
@@ -469,6 +469,7 @@
 		slot->active=0;
 	}
 	slot->udata.data[0]&=~0x4000;
+	
 }
 
 #define log_base_2(n) (log((float) n)/log((float) 2))
@@ -712,16 +713,16 @@
 		case 0x95:
 			if(AICA->Master)
 			{
-				AICA->TimPris[1]=1<<((AICA->udata.data[0x92/2]>>8)&0x7);
-				AICA->TimCnt[1]=(AICA->udata.data[0x92/2]&0xff)<<8;
+				AICA->TimPris[1]=1<<((AICA->udata.data[0x94/2]>>8)&0x7);
+				AICA->TimCnt[1]=(AICA->udata.data[0x94/2]&0xff)<<8;
 			}
 			break;
 		case 0x98:
 		case 0x99:
 			if(AICA->Master)
 			{
-				AICA->TimPris[2]=1<<((AICA->udata.data[0x94/2]>>8)&0x7);
-				AICA->TimCnt[2]=(AICA->udata.data[0x94/2]&0xff)<<8;
+				AICA->TimPris[2]=1<<((AICA->udata.data[0x98/2]>>8)&0x7);
+				AICA->TimCnt[2]=(AICA->udata.data[0x98/2]&0xff)<<8;
 			}
 			break;
 		case 0xa4:	//SCIRE
@@ -912,7 +913,7 @@
 {
 	if(AICA->TimCnt[0]<=0xff00)
 	{
- 		AICA->TimCnt[0] += ticks << (8-((AICA->udata.data[0x18/2]>>8)&0x7));
+ 		AICA->TimCnt[0] += ticks << (8-((AICA->udata.data[0x90/2]>>8)&0x7));
 		if (AICA->TimCnt[0] > 0xFF00)
 		{
 			AICA->TimCnt[0] = 0xFFFF;
@@ -924,7 +925,7 @@
 
 	if(AICA->TimCnt[1]<=0xff00)
 	{
-		AICA->TimCnt[1] += ticks << (8-((AICA->udata.data[0x1a/2]>>8)&0x7));
+		AICA->TimCnt[1] += ticks << (8-((AICA->udata.data[0x94/2]>>8)&0x7));
 		if (AICA->TimCnt[1] > 0xFF00)
 		{
 			AICA->TimCnt[1] = 0xFFFF;
@@ -936,7 +937,7 @@
 
 	if(AICA->TimCnt[2]<=0xff00)
 	{
-		AICA->TimCnt[2] += ticks << (8-((AICA->udata.data[0x1c/2]>>8)&0x7));
+		AICA->TimCnt[2] += ticks << (8-((AICA->udata.data[0x98/2]>>8)&0x7));
 		if (AICA->TimCnt[2] > 0xFF00)
 		{
 			AICA->TimCnt[2] = 0xFFFF;
@@ -1096,7 +1097,7 @@
 		if (!(AFSEL(AICA)))
 		{
 			AICA->udata.data[0x10/2] |= slot->EG.state<<13;
-			AICA->udata.data[0x10/2] |= 0x3FF - (slot->EG.volume>>EG_SHIFT);
+			//AICA->udata.data[0x10/2] |= 0x3FF - (slot->EG.volume>>EG_SHIFT);
 		}
 	}
 

test data:
http://www.snesmusic.org/hoot/kingshriek/other/dsfdtpk_test.zip