forked from dolphin-emu/dolphin
		
	
		
			
	
	
		
			213 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			213 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Pseudo C
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// DSP:
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Memory USAGE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								0x0B80 to 0x0C40			CurrentPB
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								0x0B87
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								0x0E15						SrcSelectFunction      // perhaps CMD0 setups some kind of jmp table at this addresses
							 | 
						||
| 
								 | 
							
								0x0E16						CoefFunction
							 | 
						||
| 
								 | 
							
								0x0E14						MixCtrlFunction
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								0x0e17						TmpBuffer exceptions
							 | 
						||
| 
								 | 
							
								0x0e18						TmpBuffer exceptions
							 | 
						||
| 
								 | 
							
								0x0e19						TmpBuffer exceptions
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// instrcution memory
							 | 
						||
| 
								 | 
							
								0x0B31 to 0x0B33			some kind of JMP-Table to handle srcSelect ???
							 | 
						||
| 
								 | 
							
								0x0B34 to 0x0B36			some kind of JMP-Table to handle coefSelect ???
							 | 
						||
| 
								 | 
							
								0x0B11 to 0x0B1F			some kind of JMP-Table to handle mixerCtrl ???
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void CMD2()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								// 0x1BC
							 | 
						||
| 
								 | 
							
									int_addrPB = (*r00 << 16) | *(r00+1)
							 | 
						||
| 
								 | 
							
									DMA_From_Memory(0x0B80, _addrPB, 0xC0);   // read first PB to 0x0B80
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
								// 0x1C7	
							 | 
						||
| 
								 | 
							
									*0x0E08 = 0x0000
							 | 
						||
| 
								 | 
							
									*0x0E09 = 0x0140
							 | 
						||
| 
								 | 
							
									*0x0E0A = 0x0280
							 | 
						||
| 
								 | 
							
									*0x0E0B = 0x0400
							 | 
						||
| 
								 | 
							
									*0x0E0C = 0x0540
							 | 
						||
| 
								 | 
							
									*0x0E0D = 0x0680
							 | 
						||
| 
								 | 
							
									*0x0E0E = 0x07C0
							 | 
						||
| 
								 | 
							
									*0x0E0F = 0x0900
							 | 
						||
| 
								 | 
							
									*0x0E10 = 0x0A40
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 0x1E4
							 | 
						||
| 
								 | 
							
									WaitForDMATransfer()
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
								// 0x1E6		
							 | 
						||
| 
								 | 
							
									Addr = (*0x0BA7 << 16) | *0x0BA8			
							 | 
						||
| 
								 | 
							
									DMA_From_Memory(0x03C0, Addr, 0x80);	// Copy Update Data to 0x03C0  (AXPBUPDATE dataHi, dataLo)
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
								// 0x1F4	
							 | 
						||
| 
								 | 
							
									R03 = (*0x0B84) + 0x0B31		// AXPB->srcSelect + 0x0B31 ??? some kind of flag handling ??? SRCSEL can be 0x0 to 0x2
							 | 
						||
| 
								 | 
							
									AC0.M = *R03
							 | 
						||
| 
								 | 
							
									*0x0E15 = *AC0.M
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
								// 0x1FD	
							 | 
						||
| 
								 | 
							
									R03 = (*0x0B85) + 0x0B34		// AXPB->coefSelect + 0x0B34 ??? some kind of flag handling ??? COEF can be 0x0 to 0x2
							 | 
						||
| 
								 | 
							
									AC0.M = *R03
							 | 
						||
| 
								 | 
							
									*0x0E16 = *AC0.M
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 0x206
							 | 
						||
| 
								 | 
							
									R03 = (*0x0B86) + 0x0B11		// AXPB->mixerCtrl + 0x0B36 ??? some kind of flag handling ???	MIXCTRL can be 0x0 to 0xE 
							 | 
						||
| 
								 | 
							
									AC0.M = *R03
							 | 
						||
| 
								 | 
							
									*0x0E14 = *AC0.M
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
								// 0x20F	
							 | 
						||
| 
								 | 
							
									if (*0x0B9B == 0)						// AXPBITD->flag  (on or off for this voice)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										// jmp to 0x23a
							 | 
						||
| 
								 | 
							
										*0x0E42 = 0x0CE0
							 | 
						||
| 
								 | 
							
										*0x0E40 = 0x0CE0
							 | 
						||
| 
								 | 
							
										*0x0E41 = 0x0CE0
							 | 
						||
| 
								 | 
							
										*0x0E43 = 0x0CE0	
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										WaitForDMATransfer()
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									else
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										// code at 0x216
							 | 
						||
| 
								 | 
							
										*0x0E40 = *0x0B9E + 0x0CC0		// AXPBITD->shiftL
							 | 
						||
| 
								 | 
							
										*0x0E41 = *0x0B9F + 0x0CC0		// AXPBITD->shiftR
							 | 
						||
| 
								 | 
							
										*0x0E42 = 0xCE0
							 | 
						||
| 
								 | 
							
										*0x0E43 = 0xCE0
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										WaitForDMATransfer()
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										// 0x22a
							 | 
						||
| 
								 | 
							
										Addr = (*0x0B9C << 16) | *0x0B9D	
							 | 
						||
| 
								 | 
							
										DMA_From_Memory(0x0CC0, Addr, 0x40);		// (AXPBITD->bufferHi << 16 | AXPBITD->bufferLo) -> 0xCC0
							 | 
						||
| 
								 | 
							
										WaitForDMATransfer()
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void CMD0()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void CMD3()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									0x0E07 = R00
							 | 
						||
| 
								 | 
							
									R00 = 0x0BA2		// AXPBUPDATE->updNum
							 | 
						||
| 
								 | 
							
									R01 = 0x03C0
							 | 
						||
| 
								 | 
							
									*0x0E04 = 0x05
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									AC1 = 0
							 | 
						||
| 
								 | 
							
									AC0 = 0
							 | 
						||
| 
								 | 
							
									AX0.H = *R00++   // AXPBUPDATE->updNum[0]
							 | 
						||
| 
								 | 
							
									AC1.M = 0x0B80
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 0x256
							 | 
						||
| 
								 | 
							
									for (i=0; i<AX0.H; i++)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										AC0.M = *R01++
							 | 
						||
| 
								 | 
							
										AC0.M = AC0.M + AC1.M
							 | 
						||
| 
								 | 
							
										AX1.L = *R01++
							 | 
						||
| 
								 | 
							
										R02 = AC0.M
							 | 
						||
| 
								 | 
							
										*R02 = AX1.L
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
								// 0x25c
							 | 
						||
| 
								 | 
							
									R03 = 0x0E05
							 | 
						||
| 
								 | 
							
									*R03++ = R01
							 | 
						||
| 
								 | 
							
									*R03++ = R02
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
								// 0x260
							 | 
						||
| 
								 | 
							
									AC0.M = *0x0B87   // AXPB->state
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if (AC0.M == 1)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										// JMP 0x267 (AX_PB_STATE_RUN)
							 | 
						||
| 
								 | 
							
										*0x0E1C = *0x0E42
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										CALLR *0x0E15   // Load Sample (SrcSelectFunction)
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										// 0x270
							 | 
						||
| 
								 | 
							
										AC0.M = *0xBB3 	// AXPBVE->currentDelta		(.15 volume at start of frame)
							 | 
						||
| 
								 | 
							
										AC1.M = *0xBB2	// AXPBVE->currentVolume
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										//  0x278
							 | 
						||
| 
								 | 
							
										AX0.L = AC1.M
							 | 
						||
| 
								 | 
							
										AC1.M = AC1.M + AC0.M
							 | 
						||
| 
								 | 
							
										AC0.M = AC0.M << 1
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										SET15 // ????
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										AX1.H = AC0.M
							 | 
						||
| 
								 | 
							
										AC0.M = AX0.L
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										AX0.L = 0x8000
							 | 
						||
| 
								 | 
							
										R00 = 0x0E44
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
								// 0x27f
							 | 
						||
| 
								 | 
							
										// scale volume table
							 | 
						||
| 
								 | 
							
										.
							 | 
						||
| 
								 | 
							
										.
							 | 
						||
| 
								 | 
							
										.
							 | 
						||
| 
								 | 
							
								/*		for (int i=0; i<32; i++)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											*R00++ = AC0.M; 			
							 | 
						||
| 
								 | 
							
											prod = AX0.L * AX1.H
							 | 
						||
| 
								 | 
							
											
							 | 
						||
| 
								 | 
							
											*R00++ = AC1.M; 
							 | 
						||
| 
								 | 
							
											AC0 = AC0 + prod
							 | 
						||
| 
								 | 
							
											prod = AX0.L * AX1.H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											*R00++ = AC0.M; 
							 | 
						||
| 
								 | 
							
											AC1 = AC1 + prod
							 | 
						||
| 
								 | 
							
											prod = AX0.L * AX1.H					
							 | 
						||
| 
								 | 
							
										}*/
							 | 
						||
| 
								 | 
							
												
							 | 
						||
| 
								 | 
							
								// 0x29f
							 | 
						||
| 
								 | 
							
										*0xBB2 = CurrentVolume
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
								// 0x2a1
							 | 
						||
| 
								 | 
							
										// mutiply volume with sample
							 | 
						||
| 
								 | 
							
										.
							 | 
						||
| 
								 | 
							
										.
							 | 
						||
| 
								 | 
							
										.
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
								// 0x2ea
							 | 
						||
| 
								 | 
							
									// Call mixer
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
								// 0x02f0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
												
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									else
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										// JMP 0x332
							 | 
						||
| 
								 | 
							
										.
							 | 
						||
| 
								 | 
							
										.
							 | 
						||
| 
								 | 
							
										.
							 | 
						||
| 
								 | 
							
										.
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ===============================================================
							 | 
						||
| 
								 | 
							
								void Func_0x065D()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
								}
							 |