📄 update.asm
字号:
end_dqsez11
stl A, *AR2 ;*AR2=state_ptr->a[0]
;-------------------------------------------------------
; /* LIMD */
; a1ul = 15360 - a2p;
; if (state_ptr->a[0] < -a1ul)
; state_ptr->a[0] = -a1ul;
; else if (state_ptr->a[0] > a1ul)
; state_ptr->a[0] = a1ul;
;-------------------------------------------------------
ld *SP(temp_a2p), B
sub #15360, B ;B=-a1ul
sub B, A
bcd a1ul1, AGEQ
add B, A
nop
stl B, *AR2
b end_a1
a1ul1:
add B, A
bc end_a1, ALEQ
neg B ;B=a1ul
stl B, *AR2
end_a1
;-----------------------------------------------------------
; /* UPB : update predictor zeros b[6] */
; for (cnt = 0; cnt < 6; cnt++) {
; /* for 40Kbps G.723 */
; state_ptr->b[cnt] -= state_ptr->b[cnt] >> 9;
;
; if (dq & 0x7FFF) { /* XOR */
; if ((dq ^ state_ptr->dq[cnt]) >= 0)
; state_ptr->b[cnt] += 128;
; else
; state_ptr->b[cnt] -= 128;
; }
; }
; }
;------------------------------------------------------------------
mvmm AR7, AR2
mar *+AR2(b) ;AR2=state_ptr->b
mvmm AR7, AR4
mar *+AR4(dq) ;AR4=state_ptr->dq
stm #5, AR3
cnt
ld *AR2, A
sub *AR2, -9, A ;A=state_ptr->b[cnt]
stl A, *AR2
ld *AR5, A ;*AR5=dq
and #0x7fff, A
bc cnt1, AEQ
ld *AR4+, A
;xor *AR5, A
ld *AR5, B
xor B, A
bc b1, ALT
ld *AR2, A
add #128, A
stl A, *AR2+
b end_cnt
b1:
ld *AR2, A
sub #128, A
stl A, *AR2+
b end_cnt
cnt1:
mar *AR2+
end_cnt
banz cnt, *AR3-
;----------------------------------------------------------------------
; for (cnt = 5; cnt > 0; cnt--)
; state_ptr->dq[cnt] = state_ptr->dq[cnt-1];
; /* FLOAT A : convert dq[0] to 4-bit exp, 6-bit mantissa f.p. */
;----------------------------------------------------------------------
dqsez0:
mvmm AR7, AR4
;mar *+AR4(dq+5)
mar *+AR4(dq+4)
delay *AR4-
delay *AR4-
delay *AR4-
delay *AR4-
delay *AR4-
;----------------------------------------------------------------------
; if (mag == 0) {
; state_ptr->dq[0] = (dq >= 0) ? 0x20 : 0xFC20;
; }
; else {
; exp = quan(mag, power2, 15);
; state_ptr->dq[0] = (dq >= 0) ?
; (exp << 6) + ( mag >>(exp-6) ) :
; (exp << 6) + ( mag >>(exp-6) ) - 0x400;
; }
;----------------------------------------------------------------------
ld *SP(temp_mag), A
bc mag1, ANEQ
mvmm AR7, AR4
mar *+AR4(dq)
ld *AR5, A ;*AR5=dq
ld #0xfc20, B
xc 1, AGEQ
ld #0x20, B
stl B, *AR4
b end_mag
mag1:
mar *AR4+
ld A, B
stm #tab_power2, AR3
pshm AR5
pshm AR4
call quan ;B=mag, AR3=power2
;return exp=B
nop
popm AR4
popm AR5
nop
stl B, *SP(temp_exp)
sub #6, B
neg B
stlm B, T
ld *SP(temp_mag), A
norm A ;A= ( mag >>(exp-6) )
ld *SP(temp_exp), B
add B, 6, A
ld *AR5, B ;*AR5=dq
nop
nop
xc 2, BLT
sub #0x0400, A
stl A, *AR4 ;*AR4=state_ptr->dq[0]
end_mag
;-------------------------------------------------------------------
; state_ptr->sr[1] = state_ptr->sr[0];
; /* FLOAT B : convert sr to 4-bit exp., 6-bit mantissa f.p. */
; if (sr == 0) {
; state_ptr->sr[0] = 0x20;
; } else if (sr > 0) {
; exp = quan(sr, power2, 15);
; state_ptr->sr[0] = (exp << 6) + (sr >> (exp-6) );
; } else if (sr > -32768) {
; mag = -sr;
; exp = quan(mag, power2, 15);
; state_ptr->sr[0] = (exp << 6) + ( mag >> (exp-6) ) - 0x400;
; } else
; state_ptr->sr[0] = 0xFC20;
;--------------------------------------------------------------------
mvmm AR7, AR4
mar *+AR4(sr) ;*AR4=state_ptr->sr[0]
delay *AR4
ld *AR6, A ;*AR6=sr
bc sr1, ANEQ
st #0x20, *AR4 ;*AR4=state_ptr->sr[0]
b end_sr
sr1:
bc sr2, ALEQ
ld A, B
pshm AR4
stm #tab_power2, AR3
call quan ;return exp=B
popm AR4
nop
stl B, *SP(temp_exp)
sub #6, B
neg B
stlm B, T
nop
nop
norm A ;A=sr
ld *SP(temp_exp), B
add B, 6, A
stl A, *AR4 ;*AR4=state_ptr->sr[0]
b end_sr
sr2:
sub #-32768, A
bcd sr3, ALEQ
add #-32768, A
ld A, B
neg B ;B=mag
ld B, A ;B=mag
pshm AR4
stm #tab_power2, AR3
call quan ;B=exp
popm AR4
nop
stl B, *SP(temp_exp)
sub #6, B
neg B
stlm B, T
nop
nop
norm A ;A=mag
ld *SP(temp_exp), B
add B, 6, A
sub #0x400, A
stl A, *AR4 ;*AR4=state_ptr->sr[0]
b end_sr
sr3:
st #0xfc20, *AR4
end_sr
;--------------------------------------------------------------------
; /* DELAY A */
; state_ptr->pk[1] = state_ptr->pk[0];
; state_ptr->pk[0] = pk0;
;--------------------------------------------------------------------
mvmm AR7, AR4
mar *+AR4(pk)
delay *AR4
ld *SP(temp_pk0), A
stl A, *AR4
;--------------------------------------------------------------------
; /* TONE */
; if (tr == 1) /* this sample has been treated as data */
; state_ptr->td = 0; /* next one will be treated as voice */
; else if (a2p < -11776) /* small sample-to-sample correlation */
; state_ptr->td = 1; /* signal may be data */
; else /* signal is voice */
; state_ptr->td = 0;
;--------------------------------------------------------------------
mvmm AR7, AR4
mar *+AR4(td)
ld *SP(temp_tr), A
sub #1, A
bc tr11, ANEQ
st #0, *AR4 ;*AR4=state_ptr->td
b end_td
tr11:
ld *SP(temp_a2p), A
sub #-11776, A
bc tr22, AGEQ
st #1, *AR4
b end_td
tr22:
st #0, *AR4
end_td
;---------------------------------------------------------------------
; /*
; * Adaptation speed control.
; */
; state_ptr->dms += (fi - state_ptr->dms) >> 5; /* FILTA */
; state_ptr->dml += (((fi << 2) - state_ptr->dml) >> 7); /* FILTB */
;----------------------------------------------------------------------
ld *SP(temp_i), A
add #tab_fitab, A
stlm A, AR4 ;*AR4=fi
mvmm AR7, AR3
mar *+AR3(dms)
ld *AR3, B
sub *AR4, B
neg B ;B= fi - state_ptr->dms
ld *AR3, A
add B, -5, A
stl A, *AR3
mvmm AR7, AR3
mar *+AR3(dml)
ld *AR4, 2, B ; B=fi << 2
sub *AR3, B
ld *AR3, A
add B, -7, A
stl A, *AR3
;-----------------------------------------------------------
; if (tr == 1)
; state_ptr->ap = 256;
; else if (y < 1536) /* SUBTC */
; state_ptr->ap += (0x200 - state_ptr->ap) >> 4;
; else if (state_ptr->td == 1)
; state_ptr->ap += (0x200 - state_ptr->ap) >> 4;
; else if (abs((state_ptr->dms << 2) - state_ptr->dml) >=
; (state_ptr->dml >> 3))
; state_ptr->ap += (0x200 - state_ptr->ap) >> 4;
; else
; state_ptr->ap += (-state_ptr->ap) >> 4;
;}
;------------------------------------------------------------
ld *SP(temp_tr), A
sub #1, A
mvmm AR7, ar3
mar *+AR3(ap)
bc ap1, ANEQ
st #256, *AR3
frame #11
ret
ap1:
ld *SP(temp_y), A
sub #1356, A
bc ap2, AGEQ
ld #0x200, A
sub *AR3, A
ld *AR3, B
add A, -4, B
stl B, *AR3
frame #11
ret
ap2:
mvmm AR7, AR4
mar *+AR4(td)
ld #1, A
sub *AR4, A
bc ap3, ANEQ
ld #0x200, A
sub *AR3, A ;*AR3=state_ptr->ap
ld *AR3, B
add A, -4, B
stl B, *AR3
frame #11
ret
ap3:
mvmm AR7, AR5
mar *+AR5(dms)
ld *AR5, 2, A
mvmm AR7, AR6
mar *+AR6(dml)
sub *AR6, A
abs A
ld *AR6, -3, B
sub B, A
bc ap4, ALT
ld #0x200, A
sub *AR3, A ;*AR3=state_ptr->ap
ld *AR3, B
add A, -4, B
stl B, *AR3
frame #11
ret
ap4:
ld *AR3, A
neg A
ld *AR3, B
add A, -4, B
stl B, *AR3
end_ap
frame #11
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -