227 lines
5.8 KiB
C
227 lines
5.8 KiB
C
|
|
|||
|
// Init Hardware PCM decoder
|
|||
|
|
|||
|
/*
|
|||
|
06a3 0082 0bb8 LRI $R02, #0x0bb8
|
|||
|
06a5 195e LRRI $AC0.M, @$R02
|
|||
|
06a6 2ed1 SRS @SampleFormat, $AC0.M
|
|||
|
06a7 195e LRRI $AC0.M, @$R02
|
|||
|
06a8 2ed4 SRS @ACSAH, $AC0.M
|
|||
|
06a9 195e LRRI $AC0.M, @$R02
|
|||
|
06aa 2ed5 SRS @ACSAL, $AC0.M
|
|||
|
06ab 195e LRRI $AC0.M, @$R02
|
|||
|
06ac 2ed6 SRS @ACEAH, $AC0.M
|
|||
|
06ad 195e LRRI $AC0.M, @$R02
|
|||
|
06ae 2ed7 SRS @ACEAL, $AC0.M
|
|||
|
06af 195e LRRI $AC0.M, @$R02
|
|||
|
06b0 2ed8 SRS @ACCAH, $AC0.M
|
|||
|
06b1 195e LRRI $AC0.M, @$R02
|
|||
|
06b2 2ed9 SRS @ACCAL, $AC0.M
|
|||
|
06b3 195e LRRI $AC0.M, @$R02
|
|||
|
06b4 2ea0 SRS @COEF_A1_0, $AC0.M
|
|||
|
06b5 195e LRRI $AC0.M, @$R02
|
|||
|
06b6 2ea1 SRS @COEF_A2_0, $AC0.M
|
|||
|
06b7 195e LRRI $AC0.M, @$R02
|
|||
|
06b8 2ea2 SRS @COEF_A1_1, $AC0.M
|
|||
|
06b9 195e LRRI $AC0.M, @$R02
|
|||
|
06ba 2ea3 SRS @COEF_A2_1, $AC0.M
|
|||
|
06bb 195e LRRI $AC0.M, @$R02
|
|||
|
06bc 2ea4 SRS @COEF_A1_2, $AC0.M
|
|||
|
06bd 195e LRRI $AC0.M, @$R02
|
|||
|
06be 2ea5 SRS @COEF_A2_2, $AC0.M
|
|||
|
06bf 195e LRRI $AC0.M, @$R02
|
|||
|
06c0 2ea6 SRS @COEF_A1_3, $AC0.M
|
|||
|
06c1 195e LRRI $AC0.M, @$R02
|
|||
|
06c2 2ea7 SRS @COEF_A2_3, $AC0.M
|
|||
|
06c3 195e LRRI $AC0.M, @$R02
|
|||
|
06c4 2ea8 SRS @COEF_A1_4, $AC0.M
|
|||
|
06c5 195e LRRI $AC0.M, @$R02
|
|||
|
06c6 2ea9 SRS @COEF_A2_4, $AC0.M
|
|||
|
06c7 195e LRRI $AC0.M, @$R02
|
|||
|
06c8 2eaa SRS @COEF_A1_5, $AC0.M
|
|||
|
06c9 195e LRRI $AC0.M, @$R02
|
|||
|
06ca 2eab SRS @COEF_A2_5, $AC0.M
|
|||
|
06cb 195e LRRI $AC0.M, @$R02
|
|||
|
06cc 2eac SRS @COEF_A1_6, $AC0.M
|
|||
|
06cd 195e LRRI $AC0.M, @$R02
|
|||
|
06ce 2ead SRS @COEF_A2_6, $AC0.M
|
|||
|
06cf 195e LRRI $AC0.M, @$R02
|
|||
|
06d0 2eae SRS @COEF_A1_7, $AC0.M
|
|||
|
06d1 195e LRRI $AC0.M, @$R02
|
|||
|
06d2 2eaf SRS @COEF_A2_7, $AC0.M
|
|||
|
06d3 195e LRRI $AC0.M, @$R02
|
|||
|
06d4 2ede SRS @GAIN, $AC0.M
|
|||
|
06d5 195e LRRI $AC0.M, @$R02
|
|||
|
06d6 2eda SRS @pred_scale, $AC0.M
|
|||
|
06d7 195e LRRI $AC0.M, @$R02
|
|||
|
06d8 2edb SRS @yn1, $AC0.M
|
|||
|
06d9 195e LRRI $AC0.M, @$R02
|
|||
|
06da 2edc SRS @yn2, $AC0.M
|
|||
|
*/
|
|||
|
|
|||
|
/// hmmmmmm
|
|||
|
/*
|
|||
|
06db 8c00 CLR15
|
|||
|
06dc 8a00 M2
|
|||
|
06dd 8e00 S40
|
|||
|
*/
|
|||
|
|
|||
|
///
|
|||
|
|
|||
|
AX0.L = *0xe16
|
|||
|
AX1.H = ratioHi // sample ratio from AXPBSRC
|
|||
|
AX1.L = ratioLo // sample ratio from AXPBSRC
|
|||
|
|
|||
|
AC0 = 0
|
|||
|
AC0.L = currentAddressFrac // AXPBSRC
|
|||
|
|
|||
|
*0x0e48 = last_samples[0]
|
|||
|
*0x0e49 = last_samples[1]
|
|||
|
*0x0e4A = last_samples[2]
|
|||
|
*0x0e4B = last_samples[3]
|
|||
|
|
|||
|
AC1.M = AX1.L
|
|||
|
ACC = ACC >> 0x05
|
|||
|
AC1 = AC1 + AC0
|
|||
|
|
|||
|
R04 = AC1.M
|
|||
|
R05 = AC1.L
|
|||
|
|
|||
|
AC1 = AC1 + 0xe0 // ?????? AC1 = AC1 - 2097152 (because 0xe0 is converted to signed and shift << 16)
|
|||
|
AC1 = AC1 >> 16
|
|||
|
AC1 = -AC1
|
|||
|
|
|||
|
R06 = -AC1
|
|||
|
|
|||
|
//////////////
|
|||
|
AC1 = 0
|
|||
|
AC1.L = R05
|
|||
|
AC1 = AC1 << 2
|
|||
|
R05 = AC1.M
|
|||
|
|
|||
|
|
|||
|
// 0x06fc
|
|||
|
|
|||
|
AX.0 = 0x1fc
|
|||
|
AC0 = 0xe48
|
|||
|
R01 = 0xFFDD
|
|||
|
R03 = 0x0D80
|
|||
|
|
|||
|
// 0x0704
|
|||
|
for (i=0; i<R04; i++)
|
|||
|
{
|
|||
|
AC0 = AC0 + AX1
|
|||
|
*R03++ = AC0.M
|
|||
|
|
|||
|
AC1.M = AC0.L
|
|||
|
LSR $AC1.M, #0x79
|
|||
|
AC1 = AC1 & AX0.H
|
|||
|
AC1 += AX0.L
|
|||
|
*R03++ = AC1
|
|||
|
|
|||
|
*R00++ = *ADPCM_DECODER
|
|||
|
*R00++ = *ADPCM_DECODER
|
|||
|
*R00++ = *ADPCM_DECODER
|
|||
|
*R00++ = *ADPCM_DECODER
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
0704 0064 0715 BLOOP $R04, 0x0715
|
|||
|
0706 1827 LRR $R07, @$R01
|
|||
|
0707 1b07 SRRI @$R00, $R07
|
|||
|
0708 4a00 ADDAX $AC0.M, $AX1.L
|
|||
|
0709 1ffc MRR $AC1.M, $AC0.L
|
|||
|
070a 1827 LRR $R07, @$R01
|
|||
|
070b 1b07 SRRI @$R00, $R07
|
|||
|
070c 1579 LSR $AC1.M, #0x79
|
|||
|
070d 3500 ANDR $AC1.M, $R00
|
|||
|
070e 1827 LRR $R07, @$R01
|
|||
|
070f 1b07 SRRI @$R00, $R07
|
|||
|
0710 4100 ADDR $AC1.M, $AX0.L
|
|||
|
0711 1b7e SRRI @$R03, $AC0.M
|
|||
|
0712 1827 LRR $R07, @$R01
|
|||
|
0713 1b07 SRRI @$R00, $R07
|
|||
|
0714 1b7f SRRI @$R03, $AC1.M
|
|||
|
0715 0000 NOP */
|
|||
|
|
|||
|
// 0x0715
|
|||
|
// prolly copies the "rest"
|
|||
|
|
|||
|
for (i=0; i<r05; i++)
|
|||
|
{
|
|||
|
R07 = *ADPCM_DECODER
|
|||
|
*R00++ = R07
|
|||
|
}
|
|||
|
|
|||
|
// 0x71c
|
|||
|
R03--
|
|||
|
AC1 = *R03
|
|||
|
|
|||
|
/* 071c 0007 DAR $R03
|
|||
|
071d 187f LRR $AC1.M, @$R03 */
|
|||
|
|
|||
|
for (i<0; i<r06; i++)
|
|||
|
{
|
|||
|
AC0 = AX1
|
|||
|
*R03++ = AC1.M
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
071e 0066 0724 BLOOP $R06, 0x0724
|
|||
|
0720 4a3b ADDAX<EFBFBD>S $AC0.M, $AX1.L : @$R03, $AC1.M
|
|||
|
0721 1ffc MRR $AC1.M, $AC0.L
|
|||
|
0722 1579 LSR $AC1.M, #0x79
|
|||
|
0723 3533 ANDR<EFBFBD>S $AC1.M, $R00 : @$R03, $AC0.M
|
|||
|
0724 4100 ADDR $AC1.M, $AX0.L
|
|||
|
*/
|
|||
|
|
|||
|
0725 1b7f SRRI @$R03, $AC1.M
|
|||
|
0726 0004 DAR $R00
|
|||
|
0727 189f LRRD $AC1.M, @$R00
|
|||
|
0728 1adf SRRD @$R02, $AC1.M
|
|||
|
0729 189f LRRD $AC1.M, @$R00
|
|||
|
072a 1adf SRRD @$R02, $AC1.M
|
|||
|
072b 189f LRRD $AC1.M, @$R00
|
|||
|
072c 1adf SRRD @$R02, $AC1.M
|
|||
|
072d 189f LRRD $AC1.M, @$R00
|
|||
|
072e 1adf SRRD @$R02, $AC1.M
|
|||
|
072f 1adc SRRD @$R02, $AC0.L
|
|||
|
0730 0082 0bd2 LRI $R02, #0x0bd2
|
|||
|
0732 27dc LRS $AC1.M, @yn2
|
|||
|
0733 1adf SRRD @$R02, $AC1.M
|
|||
|
0734 27db LRS $AC1.M, @yn1
|
|||
|
0735 1adf SRRD @$R02, $AC1.M
|
|||
|
0736 27da LRS $AC1.M, @pred_scale
|
|||
|
0737 1adf SRRD @$R02, $AC1.M
|
|||
|
0738 0082 0bbe LRI $R02, #0x0bbe
|
|||
|
073a 27d9 LRS $AC1.M, @ACCAL
|
|||
|
073b 1adf SRRD @$R02, $AC1.M
|
|||
|
073c 27d8 LRS $AC1.M, @ACCAH
|
|||
|
073d 1adf SRRD @$R02, $AC1.M
|
|||
|
|
|||
|
|
|||
|
073e 8f00 S16
|
|||
|
073f 00c1 0e42 LR $R01, @0x0e42
|
|||
|
0741 0082 0d80 LRI $R02, #0x0d80
|
|||
|
0743 1940 LRRI $R00, @$R02
|
|||
|
0744 1943 LRRI $R03, @$R02
|
|||
|
0745 80f0 NX<EFBFBD>LDX : $AX1.L, $AX1.H, @$R01
|
|||
|
0746 b8c0 MULX<EFBFBD>LDX $AX0.H, $AX1.H : $AX0.L, $AX0.H, @$R00
|
|||
|
0747 111f 074f BLOOPI #0x1f, 0x074f
|
|||
|
0749 a6f0 MULXMV<EFBFBD>LDX $AX0.L, $AX1.L, $AC0.M : $AX1.L, $AX1.H, @$R01
|
|||
|
074a bcf0 MULXAC<EFBFBD>LDX $AX0.H, $AX1.H, $AC0.M : $AX1.L, $AX1.H, @$R01
|
|||
|
074b 1940 LRRI $R00, @$R02
|
|||
|
074c 1943 LRRI $R03, @$R02
|
|||
|
074d bcf0 MULXAC<EFBFBD>LDX $AX0.H, $AX1.H, $AC0.M : $AX1.L, $AX1.H, @$R01
|
|||
|
074e 4ec0 ADDP<EFBFBD>LDX $AC0.M : $AX0.L, $AX0.H, @$R00
|
|||
|
074f b831 MULX<EFBFBD>S $AX0.H, $AX1.H : @$R01, $AC0.M
|
|||
|
0750 a6f0 MULXMV<EFBFBD>LDX $AX0.L, $AX1.L, $AC0.M : $AX1.L, $AX1.H, @$R01
|
|||
|
0751 bcf0 MULXAC<EFBFBD>LDX $AX0.H, $AX1.H, $AC0.M : $AX1.L, $AX1.H, @$R01
|
|||
|
0752 bc00 MULXAC $AX0.H, $AX1.H, $AC0.M
|
|||
|
0753 4e00 ADDP $AC0.M
|
|||
|
0754 1b3e SRRI @$R01, $AC0.M
|
|||
|
0755 00e1 0e42 SR @0x0e42, $R01
|
|||
|
0757 02df RET
|
|||
|
|