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<41>S $AC0.M, $AX1.L : @$R03, $AC1.M
|
||
0721 1ffc MRR $AC1.M, $AC0.L
|
||
0722 1579 LSR $AC1.M, #0x79
|
||
0723 3533 ANDR<44>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
|
||
|