?? mpa_dematrix.s
字號:
;;;>> loop control <<<====================================================
dp2_loop_sblimit
ld r7, #PARTS-1
inc r6
cmp eq, r6, #SBLIMIT ; sblimit loop
jpf a13
erpn rp3, #MAX_CHANNEL*PARTS*SBLIMIT-SBLIMIT
ld r6, #0
dt r8 ; granules loop
jpf a13
_end_dematrixing_
er op
er xsd
pop a14
ret
/********************************************************************
Function: MC_AUG_dematricing
Description: Dematricing augmentation channels.
Dematrix equations are used in DVD specification
Part 3. Video Specifications Version 1.0,
5.4.2.3.2 MPEG audio 7.1-channel augmentation
dematrix_procedure: 0, 1, 2
c0 sqrt(2)/6 (=0.2357022603955)
c1 3*sqrt(2) (=4.2426406871193)
dematrix_procedure: 3
c0 1.0/3.0 (=0.3333333333333)
c1 1.0/c0 (=3.0000000000000)
Arguments:
index registers:
@bank0
d1 d0 s1 s0
---------------------------------------
sd0: -96 96 -96 96
sd1: x x x 0
sd2: x x x 1
sd3: x x 32 -95
********************************************************************/
MC_AUG_dematricing::
es usm
es psh1
es op
es opm
er xsd
eld sd0, #0x0000
eld sd3, #0x0001
es xsd
eld sd0, #0xa6a6
eld sd3, #0x002a
esd1 s0, #0
esd2 s0, #1
eld a, rpd0.dematrix_procedure
eld b, rpd1.aug_mtx_proc
ecld r0, b
eld rp2, #aug_dematrix_factor
ecp a, #3
ebra ec1, 4
erpn rp2, #2
eld x1, @rp2+s0 ; c0
eld y1, @rp2+s0 ; c1
eld rp3, #fraction
eld rp2, #sbgr_table
eld mc0, #aug_tc_alloc
ld r8, #GRANULES ; gr count
ld r7, #PARTS-1 ; part count
ld r6, #0 ; sb count
check_aug_dematrix_procedure
cmp eq, r0, #0 ; aug_mtx_proc == 0
brt aug_dematrix_procedure_0
cmp eq, r0, #1 ; aug_mtx_proc == 1
brt aug_dematrix_procedure_1
bra _end_aug_dematrixing_
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
;:: ::;
;:: Aug dematrix procedure 0 ::;
;:: ::;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
aug_dematrix_procedure_0
ld a13, pc
nop
/*loop_start*/ eld rp0, rp3
eld a, @rp2+s0 ; the number of sbgr.
eld rp1, mc0
erpn rp1, a
eld a, @rp1 ; aug_tc_alloc[sbgr]
ecld r5, a
cmp eq, r5, #0 ; tc_alloc
brt dp0_aug_tc_alloc_0
cmp eq, r5, #1
brt dp0_aug_tc_alloc_1
cmp eq, r5, #2
brt dp0_aug_tc_alloc_2
cmp eq, r5, #3
brt dp0_aug_tc_alloc_3
cmp eq, r5, #4
brt dp0_aug_tc_alloc_4
cmp eq, r5, #5
brt dp0_aug_tc_alloc_5
cmp eq, r5, #6
brt dp0_aug_tc_alloc_6
cmp eq, r5, #7
brt dp0_aug_tc_alloc_7
.ifdef _DEBUG_
/** debug **/ bra $
.endif
dp0_aug_tc_alloc_0
eld a, @rp0+s0
eld b, @rp0+s0
eld ma0, @rp0+s0
erpn rp0, #96*2
eld c, @rp0+s0
esub a, c, d, @rp0+s0
esub b, d
eadd c, d
eld y0, c
emul x1y0
erpn rp0, #-(96*7)
eld ma1, p, @rp0+d0, a
esla ma1
esla ma1
eld p, ma1
esub ma0, p, @rp0+d0, b
eld @rp0+d0, ma0
erps rp3+s1
bnzd r7, dp0_aug_tc_alloc_0
eld rp0, rp3
brad aug_dp0_loop_sblimit
erps rp3+s0
dp0_aug_tc_alloc_1
eld a, @rp0+s0
eld b, @rp0+s0
eld ma0, @rp0+s0
erpn rp0, #96*2
eld c, @rp0+s0
esub a, c, d, @rp0+s0
esub b, d
eadd d, a
eld y0, d
emul x1y0
eld ma1, c
erpn rp0, #-(96*7)
eld ma1, p, @rp0+d0, ma1
esla ma1
esla ma1
eld p, ma1
esub ma0, p, @rp0+d0, b
eld @rp0+d0, ma0
erpn rp0, #96*2
eld @rp0+d0, a
erps rp3+s1
bnzd r7, dp0_aug_tc_alloc_1
eld rp0, rp3
brad aug_dp0_loop_sblimit
erps rp3+s0
dp0_aug_tc_alloc_2
eld a, @rp0+s0
eld b, @rp0+s0
eld ma0, @rp0+s0
erpn rp0, #96*2
eld c, @rp0+s0
esub a, c, d, @rp0+s0
esub b, d
eadd c, b
eld y0, c
emul x1y0
erpn rp0, #-(96*7)
eld ma1, p, @rp0+d0, a
esla ma1
esla ma1
eld p, ma1
esub ma0, p
eld @rp0+d0, d
eld @rp0+d0, ma0
erpn rp0, #96*3
eld @rp0+d0, b
erps rp3+s1
bnzd r7, dp0_aug_tc_alloc_2
eld rp0, rp3
brad aug_dp0_loop_sblimit
erps rp3+s0
dp0_aug_tc_alloc_3
eld a, @rp0+s0
eld b, @rp0+s0
eld ma0, @rp0+s0
erpn rp0, #96*2
eld c, @rp0+s0
esub a, c, d, @rp0+s1
esub b, d
eld c, a
eadd c, b
eld y0, c
emul x1y0
eld ma1, p, x0, @rp0+s0
esla ma1
esla ma1
eld p, ma1
eld ma1, x0
erpn rp0, #-(96*6)
esub ma0, p, @rp0+d0, ma1
eld @rp0+d0, d
eld @rp0+d0, ma0
erpn rp0, #96*2
eld @rp0+d0, a
eld @rp0+d0, b
erps rp3+s1
bnzd r7, dp0_aug_tc_alloc_3
eld rp0, rp3
brad aug_dp0_loop_sblimit
erps rp3+s0
dp0_aug_tc_alloc_4
eld a, @rp0+s0
eld b, @rp0+s0
eld c, @rp0+s0
erpn rp0, #96*2
eld ma0, @rp0+s0
esub a, ma0, y0, @rp0+s0
esub c, y0
eld x0, c
emul x0y1
erpn rp0, #-(96*7)
eld ma1, p, @rp0+d0, a
esla ma1
esla ma1
eld d, ma1
esub d, ma0
esub b, d
eld @rp0+d0, b
eld @rp0+d0, y0
erpn rp0, #96*3
eld @rp0+d0, d
erps rp3+s1
bnzd r7, dp0_aug_tc_alloc_4
eld rp0, rp3
brad aug_dp0_loop_sblimit
erps rp3+s0
dp0_aug_tc_alloc_5
eld a, @rp0+s0
eld b, @rp0+s0
eld c, @rp0+s0
erpn rp0, #96*2
eld ma0, @rp0+s0
esub a, ma0, y0, @rp0+s0
esub c, y0
eld x0, c
emul x0y1
erpn rp0, #-(96*7)
eld ma1, p, @rp0+d0, ma0
esla ma1
esla ma1
eld d, ma1rn
esub d, a
esub b, d
eld @rp0+d0, b
eld @rp0+d0, y0
erpn rp0, #96*2
eld @rp0+d0, a
eld @rp0+d0, d
erps rp3+s1
bnzd r7, dp0_aug_tc_alloc_5
eld rp0, rp3
brad aug_dp0_loop_sblimit
erps rp3+s0
dp0_aug_tc_alloc_6
eld a, @rp0+s0
eld c, @rp0+s0
eld b, @rp0+s0
erpn rp0, #96*2
eld d, @rp0+s0
esub b, d, d, @rp0+s1
esub c, d
eld x0, b
emul x0y1
eld ma1, p, y0, @rp0+s0
esla ma1
esla ma1
eld b, ma1
esub b, d
esub a, b
erpn rp0, #-(96*6)
eld @rp0+d0, a
eld @rp0+d0, c
eld @rp0+d0, y0
erpn rp0, #96*2
eld @rp0+d0, b
erps rp3+s1
bnzd r7, dp0_aug_tc_alloc_6
eld rp0, rp3
brad aug_dp0_loop_sblimit
erps rp3+s0
dp0_aug_tc_alloc_7
eld a, @rp0+s0
eld c, @rp0+s0
eld b, @rp0+s0
erpn rp0, #96*2
eld d, @rp0+s0
esub b, d, d, @rp0+s1
esub c, d
eld x0, b
emul x0y1
eld ma1, p, y0, @rp0+s0
esla ma1
esla ma1
eld b, ma1
esub b, c
esub a, b
erpn rp0, #-(96*6)
eld @rp0+d0, a
eld @rp0+d0, d
eld @rp0+d0, y0
erpn rp0, #96*2
eld @rp0+d0, b
eld @rp0+d0, c
erps rp3+s1
bnzd r7, dp0_aug_tc_alloc_7
eld rp0, rp3
brad aug_dp0_loop_sblimit
erps rp3+s0
;;;>> loop control <<<====================================================
aug_dp0_loop_sblimit
ld r7, #PARTS-1
inc r6
cmp eq, r6, #SBLIMIT ; sblimit loop
jpf a13
eld rp2, #sbgr_table
erpn rp3, #MAX_CHANNEL*PARTS*SBLIMIT-SBLIMIT
ld r6, #0
dt r8 ; granules loop
jpf a13
jmp _end_aug_dematrixing_
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
;:: ::;
;:: Aug dematrix procedure 1 ::;
;:: ::;
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
aug_dematrix_procedure_1
ld a13, pc
nop
/*loop_start*/ eld rp0, rp3
eld a, @rp2+s0 ; the number of sbgr.
eld rp1, mc0
erpn rp1, a
eld a, @rp1 ; aug_tc_alloc[sbgr]
ecld r5, a
cmp eq, r5, #0 ; tc_alloc
brt dp1_aug_tc_alloc_0
cmp eq, r5, #1
brt dp1_aug_tc_alloc_1
cmp eq, r5, #2
brt dp1_aug_tc_alloc_2
cmp eq, r5, #3
brt dp1_aug_tc_alloc_3
.ifdef _DEBUG_
/** debug **/ bra $
.endif
dp1_aug_tc_alloc_0
eld a, @rp0+s0
eld b, @rp0+s0
erpn rp0, #96*3
eld c, @rp0+s0
esub a, c, d, @rp0+s0
esub b, d
erpn rp0, #-(96*7)
eld @rp0+d0, a
eld @rp0+d0, b
erps rp3+s1
bnzd r7, dp1_aug_tc_alloc_0
eld rp0, rp3
brad aug_dp1_loop_sblimit
erps rp3+s0
dp1_aug_tc_alloc_1
eld a, @rp0+s0
eld b, @rp0+s0
erpn rp0, #96*3
eld c, @rp0+s0
esub a, c, d, @rp0+s0
esub b, d
erpn rp0, #-(96*7)
eld @rp0+d0, c
eld @rp0+d0, b
erpn rp0, #96*3
eld @rp0+d0, a
erps rp3+s1
bnzd r7, dp1_aug_tc_alloc_1
eld rp0, rp3
brad aug_dp1_loop_sblimit
erps rp3+s0
dp1_aug_tc_alloc_2
eld a, @rp0+s0
eld b, @rp0+s0
erpn rp0, #96*3
eld c, @rp0+s0
esub a, c, d, @rp0+s0
esub b, d
erpn rp0, #-(96*7)
eld @rp0+d0, a
eld @rp0+d0, d
erpn rp0, #96*4
eld @rp0+d0, b
erps rp3+s1
bnzd r7, dp1_aug_tc_alloc_2
eld rp0, rp3
brad aug_dp1_loop_sblimit
erps rp3+s0
dp1_aug_tc_alloc_3
eld a, @rp0+s0
eld b, @rp0+s0
erpn rp0, #96*3
eld c, @rp0+s0
esub a, c, d, @rp0+s0
esub b, d
erpn rp0, #-(96*7)
eld @rp0+d0, c
eld @rp0+d0, d
erpn rp0, #96*3
eld @rp0+d0, a
eld @rp0+d0, b
erps rp3+s1
bnzd r7, dp1_aug_tc_alloc_3
eld rp0, rp3
brad aug_dp1_loop_sblimit
erps rp3+s0
aug_dp1_loop_sblimit
ld r7, #PARTS-1
inc r6
cmp eq, r6, #SBLIMIT ; sblimit loop
jpf a13
eld rp2, #sbgr_table
erpn rp3, #MAX_CHANNEL*PARTS*SBLIMIT-SBLIMIT
ld r6, #0
dt r8 ; granules loop
jpf a13
jmp _end_aug_dematrixing_
_end_aug_dematrixing_
er op
er opm
er xsd
er usm
er psh1
ret
.endif /* .if( _DECODER_TYPE != MPEG_1_AUDIO ) */
.end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -