📄 spf_dec.s
字号:
mov a3(1*4), r3
movi AGRAdr0, local_temp_buf_byte
mov r3, a2(1*4) //save 1/2 left-over word
mov a0(1*4), r3
j Lchannel_continue
L5_second_blk:
movi AGRAdr0, local_temp_buf_byte
nop
shr r3, a0(1*4), 16 //get 1/2 left-over word
shl r4, a2(0*4), 16
or a3(1*4), r3, r4
shr r3, a2(1*4), 16
shl r4, a2(0*4), 16
or a3(1*4), r3, r4
shr r3, a2(1*4), 16
mov a3(1*4), r3
jsr r29, SUB_5_channel
movi AGRAdr0, local_temp_buf_byte
mov r3, a2(1*4) //save 1 left-over word
mov a0(1*4), r3
j Lchannel_continue
L5_third_blk:
/* movi AGRAdr0, local_temp_buf_byte
nop
mov r3, a0(1*4)
mov a3(1*4), r3
mov r3, a2(1*4)
mov a3(1*4), r3
mov r3, a2(0*4)
andi a3(1*4), r3, 0xffff
jsr r29, SUB_5_channel
*/
L5_fourth_blk:
L5_fifth_blk:
j Lchannel_continue
L6_channel:
L7_channel:
L8_channel:
Lchannel_continue:
nop
nop
j Lupdate_channel_count
//------------------------ 96k -----------------------------------
L96k_case:
tsti r10, 1
beq L1_channel_96k
tsti r10, 2
beq L2_channel_96k
tsti r10, 3
beq L3_channel_96k
tsti r10, 4
beq L4_channel_96k
tsti r10, 5
beq L5_channel_96k
tsti r10, 6
beq L6_channel_96k
tsti r10, 7
beq L7_channel_96k
tsti r10, 8
beq L8_channel_96k
//---------------------------------------------------
L1_channel_96k:
movi TrapReg,0
nop
nop
#ifdef NON_DEF
loop 64, L1_channel_loop_96k
mov r3, a2(1*4)
andi r3, 0xffff //throw away second sample
mov a3(1*4), r3
mov a3(1*4), r0 //clear the non-existing channels
mov a3(1*4), r0
mov a3(1*4), r0
mov a3(1*4), r0
mov a3(1*4), r0
L1_channel_loop_96k:
#else
loop 128, L1_channel_loop_96k
mov r3, a2(1*4)
andi r3, 0xffff //throw away second sample
mov a3(1*4), r3
mov a3(1*4), r0 //clear the non-existing channels
mov a3(1*4), r0
L1_channel_loop_96k:
#endif
movi TrapReg,1<<2
j Lchannel_continue_96k
//---------------------------------------------------
L2_channel_96k:
movi TrapReg,0
nop
nop
#ifdef NON_DEF
movi r1, 0xffff
loop 32, L2_channel_loop_96k
and r3, r1, a2(0*4)
mov a3(1*4), r3 //L
shr r3, a2(2*4), 16
mov a3(1*4), r3 //R
mov a3(1*4), r0 //clear the non-existing channels
mov a3(1*4), r0
mov a3(1*4), r0
mov a3(1*4), r0
L2_channel_loop_96k:
#else
loop 64, L2_channel_loop_96k
mov r3, a2(2*4)
mov a3(1*4), r3
mov a3(1*4), r0 //clear the non-existing channels
mov a3(1*4), r0
L2_channel_loop_96k:
#endif
movi TrapReg,1<<2
j Lchannel_continue_96k
//---------------------------------------------------
L3_channel_96k:
tsti r19, 0
beq L3_first_blk_96k
tsti r19, 1
beq L3_second_blk_96k
tsti r19, 2
beq L3_third_blk_96k
L3_first_blk_96k:
jsr r29, SUB_3_channel_96k
movi AGRAdr0, local_temp_buf_byte
mov r3, a2(1*4) //save 2 left-over words
mov a0(1*4), r3
mov r3, a2(1*4)
mov a0(1*4), r3
j Lchannel_continue_96k
L3_second_blk_96k:
movi AGRAdr0, local_temp_buf_byte
nop
mov r3, a0(1*4) //get left-over from previous block
mov a3(1*4), r3
mov r3, a0(0*4)
andi r3, 0xffff
mov a3(1*4), r3
mov a3(1*4), r0 //clear the non-existing channels
shr r3, a0(1*4), 16
shl r4, a2(0*4), 16 //get new data
or a3(1*4), r3, r4
shr r3, a2(1*4), 16
mov a3(1*4), r3
mov a3(1*4), r0 //clear the non-existing channels
jsr r29, SUB_3_channel_96k
movi AGRAdr0, local_temp_buf_byte
mov r3, a2(1*4) //save 1 left-over words
mov a0(1*4), r3
j Lchannel_continue_96k
L3_third_blk_96k:
movi AGRAdr0, local_temp_buf_byte
nop
mov r3, a0(1*4) //get left-over from previous block
mov a3(1*4), r3
mov r3, a2(0*4) //get new data
andi r3, 0xffff
mov a3(1*4), r3
mov a3(1*4), r0 //clear the non-existing channels
shr r3, a2(1*4), 16
shl r4, a2(0*4), 16 //get new data
or a3(1*4), r3, r4
shr r3, a2(1*4), 16
mov a3(1*4), r3
mov a3(1*4), r0 //clear the non-existing channels
jsr r29, SUB_3_channel_96k
j Lchannel_continue_96k
//---------------------------------------------------
L4_channel_96k:
movi TrapReg,0
nop
nop
#ifdef NON_DEF
loop 32, L4_channel_loop_96k
#else
loop 64, L4_channel_loop_96k
#endif
mov r3, a2(0*4)
mov a3(1*4), r3
mov r3, a2(0*4)
mov a3(1*4), r3
mov a3(1*4), r0 //clear the non-existing channels
L4_channel_loop_96k:
movi TrapReg,1<<2
j Lchannel_continue_96k
//---------------------------------------------------
L5_channel_96k:
tsti r19, 0
beq L5_first_blk_96k
tsti r19, 1
beq L5_second_blk_96k
tsti r19, 2
beq L5_third_blk_96k
tsti r19, 3
beq L5_fourth_blk_96k
tsti r19, 4
beq L5_fifth_blk_96k
L5_first_blk_96k:
jsr r29, SUB_5_channel_96k
mov r3, a2(1*4)
mov a3(1*4), r3
mov r3, a2(1*4)
mov a3(1*4), r3
mov r3, a2(0*4)
andi r3, 0xffff
mov a3(1*4), r3
movi AGRAdr0, local_temp_buf_byte
mov r3, a2(1*4) //save 1/2 left-over word
mov a0(1*4), r3
j Lchannel_continue_96k
L5_second_blk_96k:
movi AGRAdr0, local_temp_buf_byte
nop
shr r3, a0(1*4), 16 //get 1/2 left-over word
shl r4, a2(0*4), 16
or a3(1*4), r3, r4
shr r3, a2(1*4), 16
shl r4, a2(0*4), 16
or a3(1*4), r3, r4
shr r3, a2(1*4), 16
mov a3(1*4), r3
jsr r29, SUB_5_channel_96k
movi AGRAdr0, local_temp_buf_byte
mov r3, a2(1*4) //save 1 left-over word
mov a0(1*4), r3
j Lchannel_continue_96k
L5_third_blk_96k:
/* movi AGRAdr0, local_temp_buf_byte
nop
mov r3, a0(1*4)
mov a3(1*4), r3
mov r3, a2(1*4)
mov a3(1*4), r3
mov r3, a2(0*4)
andi a3(1*4), r3, 0xffff
jsr r29, SUB_5_channel_96k
*/
L5_fourth_blk_96k:
L5_fifth_blk_96k:
j Lchannel_continue_96k
L6_channel_96k:
L7_channel_96k:
L8_channel_96k:
Lchannel_continue_96k:
//-----------------------------------------------------
Lupdate_channel_count:
addi r19, 1 //inc channel count
addi r18, 1
tst r18, r17
blt Lchannel_loop_start
//****************************************************
movb r1,LBblknum
addi r1,1
tsti r1, 6
blte blk_ok
movi r1,1 ; starts with 1
blk_ok:
movb LBblknum,r1
mult r4, r13, r17 //#blk * #chan
dlw r1, Stream_Start
dlw r2, Stream_End
#ifdef NON_DEF
shl r4, 6 //*16*4
#else
shl r4, 7 //*32*4
#endif
add r0, r21, r4
multi r10, r4, 3 //*6/2 (6 blk per PTS.16-bit per word)
tst r0, r2
blt end_PCM_decode
subi r0, PCM_IBUF_SIZE ;circular IBUF read ptr
end_PCM_decode:
// dsw r0, Stream_Rd_Ptr ;update IBUF read ptr
SvStrRdPtr r0
#if LS388
rswi r0, Comm_Reg3 //for host
andi r10,r0,0xffff
movh r3,LIold_rd_ptr
tst r10,r3
bgte 1f
addi r10,PCM_IBUF_SIZE
1: sub r10,r3
movh LIold_rd_ptr,r0
movw r3,LWbytecount
add r3,r10
movw LWbytecount,r3
#else // LS388
movh LIfrmsize, r10 ;for PTS
#endif // LS388
dsw r4, MIN_IBUF_VAR ;for testing buffer emptyness
.if 0
dlw r1, Stream_Start
dlw r2, Stream_End
addi r0, r21, OBUF_SIZE/6
// dsw r0, Stream_Rd_Ptr ;update IBUF read ptr
SvStrRdPtr r0
tst r0, r2
blt end_PCM_decode
// dsw r1, Stream_Rd_Ptr ;reset IBUF read ptr
SvStrRdPtr r1
end_PCM_decode:
.endif
j r31
// sub-routines
SUB_3_channel:
movi TrapReg,0
nop
nop
loop 42, L3_channel_loop
mov r3, a2(1*4)
mov a3(1*4), r3
mov r3, a2(0*4)
andi r3, 0xffff
mov a3(1*4), r3
mov a3(1*4), r0 //clear the non-existing channels
shr r3, a2(1*4), 16
shl r4, a2(0*4), 16
or a3(1*4), r3, r4
shr r3, a2(1*4), 16
mov a3(1*4), r3
mov a3(1*4), r0 //clear the non-existing channels
L3_channel_loop:
movi TrapReg,1<<2
j r29
SUB_5_channel:
movi TrapReg,0
nop
nop
loop 25, L5_channel_loop
mov r3, a2(1*4)
mov a3(1*4), r3
mov r3, a2(1*4)
mov a3(1*4), r3
mov r3, a2(0*4)
andi r3, 0xffff
mov a3(1*4), r3
shr r3, a2(1*4), 16
shl r4, a2(0*4), 16
or a3(1*4), r3, r4
shr r3, a2(1*4), 16
shl r4, a2(0*4), 16
or a3(1*4), r3, r4
shr r3, a2(1*4), 16
mov a3(1*4), r3
L5_channel_loop:
movi TrapReg,1<<2
j r29
SUB_3_channel_96k:
movi TrapReg,0
nop
nop
loop 42, L3_channel_loop_96k
mov r3, a2(1*4)
mov a3(1*4), r3
mov r3, a2(0*4)
andi r3, 0xffff
mov a3(1*4), r3
mov a3(1*4), r0 //clear the non-existing channels
shr r3, a2(1*4), 16
shl r4, a2(0*4), 16
or a3(1*4), r3, r4
shr r3, a2(1*4), 16
mov a3(1*4), r3
mov a3(1*4), r0 //clear the non-existing channels
L3_channel_loop_96k:
movi TrapReg,1<<2
j r29
SUB_5_channel_96k:
movi TrapReg,0
nop
nop
loop 25, L5_channel_loop_96k
mov r3, a2(1*4)
mov a3(1*4), r3
mov r3, a2(1*4)
mov a3(1*4), r3
mov r3, a2(0*4)
andi r3, 0xffff
mov a3(1*4), r3
shr r3, a2(1*4), 16
shl r4, a2(0*4), 16
or a3(1*4), r3, r4
shr r3, a2(1*4), 16
shl r4, a2(0*4), 16
or a3(1*4), r3, r4
shr r3, a2(1*4), 16
mov a3(1*4), r3
L5_channel_loop_96k:
movi TrapReg,1<<2
j r29
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -