📄 mpa.h
字号:
secInputBufferPtr_calm
/* saved input buffer pointer and limit */
_buffer_ptr:: dsw 16
.else
secCalmReservedAreaX_calm section udata, overlay, abs 0x200000
secCalmReservedAreaX_calm
_calm_reserved0:: dsw 0x4000
secCalmReservedAreaY_calm section udata, overlay, abs 0x220000
secCalmReservedAreaY_calm
_calm_reserved1:: dsw 0x4000
.endif /* .if( 1 ) */
/* */
/**************************************************************************/
.else
/****************************************************************/
/* */
/* E X T E R N V A R I A B L E S */
/* */
/****************************************************************/
/* variables */
.extern header_info, layer_info,
.extern bit_alloc, scfsi, scale_index,
.extern fraction, synthesis_buffer, synth_dct32
.extern pcm_ch_buffer
.extern backup_register, bs_status, _buffer_ptr, table_area,
.if( _DECODER_TYPE != MPEG_1_AUDIO )
.extern tc_alloc, dyn_cross_mode, dyn_second_stereo,
.extern aug_tc_alloc, aug_dyn_cross_mode,
.extern pcm_dm_buffer, pcm_lfe_buffer
.extern lfe_fraction,
.extern v0, v1, v2, w1, w2
//.extern mc_prediction, mc_predsi, mc_delay_comp, mc_pred_coeff, pred_buf,
.endif
/* tables */
.extern nbal_table, steps_table, bits_table, allocation_tables
.extern sbgr_table, scalefactor, separate_codes
.extern I_MSB_position, I_dequant_coeff_1, I_dequant_coeff_2
.extern II_MSB_position, II_dequant_coeff_D, II_dequant_coeff_C
.extern synthesis_window_Di, dct_even_even_8x8, dct_even_odd_8x8, dct_odd_16x16
.if( _DECODER_TYPE != MPEG_1_AUDIO )
.extern mc_allocation_table,
.extern tc_table, aug_tc_table, DRC_table
.extern denormalisation_factor, aug_denormalisation_factor
.extern aug_dematrix_factor, downmix_factor, aug_downmix_factor
.extern lfe_scale_factor, lfe_filter_coef
//.extern pred_coef_table, pred_coef_tblptr
.endif
.endif /* ifdef _MPA_MEMALLOC */
/***********************[ PM section definition ]**************************/
/* */
.if( 1 )
secFILE_mpa_frame section code, abs PM_CODE_START
secFILE_mpa_common section code, afteraddr PM_CODE_START
secFILE_mpa_crc section code, afteraddr PM_CODE_START
secFILE_mpa_dematrix section code, afteraddr PM_CODE_START
secFILE_mpa_denorm section code, afteraddr PM_CODE_START
secFILE_mpa_downmix section code, afteraddr PM_CODE_START
secFILE_mpa_drc section code, afteraddr PM_CODE_START
secFILE_mpa_error section code, afteraddr PM_CODE_START
secFILE_mpa_layer1 section code, afteraddr PM_CODE_START
secFILE_mpa_layer2 section code, afteraddr PM_CODE_START
secFILE_mpa_layer2aug section code, afteraddr PM_CODE_START
secFILE_mpa_layer2mc section code, afteraddr PM_CODE_START
secFILE_mpa_lfe section code, afteraddr PM_CODE_START
secFILE_mpa_output section code, afteraddr PM_CODE_START
secFILE_mpa_pred section code, afteraddr PM_CODE_START
secFILE_mpa_synth section code, afteraddr PM_CODE_START
.else
secFILE_mpa_frame section code
secFILE_mpa_common section code
secFILE_mpa_crc section code
secFILE_mpa_dematrix section code
secFILE_mpa_denorm section code
secFILE_mpa_downmix section code
secFILE_mpa_drc section code
secFILE_mpa_error section code
secFILE_mpa_layer1 section code
secFILE_mpa_layer2 section code
secFILE_mpa_layer2aug section code
secFILE_mpa_layer2mc section code
secFILE_mpa_lfe section code
secFILE_mpa_output section code
secFILE_mpa_pred section code
secFILE_mpa_synth section code
.endif
/* */
/* The code size of MPEG-2 multichannel decoder is [ Bytes]. */
/**************************************************************************/
/******************[ XYMEM tables section definition ]*********************/
/* */
secSynthWindow_mac section idata, word3, overlay, abs ymem_WINDOW_TBL
secDCT32Coeff_mac section idata, word3, overlay, abs ymem_DCT32_TBL
secDecodeTables_mac section idata, word3, overlay, abs ymem_TABLES
secSepCodes_mac section idata, word3, overlay, abs ymem_SEPCODE_TBL
secDRCTable_mac section idata, word3, overlay, abs ymem_DRC_TBL
secLfeSteps_mac section idata, word3, overlay, abs ymem_LFE_TBL
/* */
/* Size of tables in Y memory area is [ Bytes]. */
/**************************************************************************/
/* "C" variables */
.extern _fp_mpg, _fp_ext, _nbytes
/* Extern "C" functions */
.extern _smReadFile, _fread
/* Common debug functions */
.extern _print_fraction
.if( _DEBUG_BITS == TRUE )
.extern _bit_pos
;.extern _bit_pos_mc
.endif
/* common.s */
.extern getbits
.extern copy_decode_table
.extern MPG_seek_sync_base
.extern EXT_seek_sync_ext
.extern MPG_parse_base_header
.extern EXT_parse_ext_header
.extern MC_parse_mc_header
/* layer?.s */
.extern MPG_layer_I_decode
.extern MPG_layer_II_decode
//.extern MPG_II_decode_sample
//.extern MPG_II_denormalize_sample
.extern MC_layer_II_decode
.extern AUG_layer_II_decode
//.extern MC_II_denormalize_sample
.extern MC_II_dematricing
.extern MC_II_denormalizing
.extern MC_II_lfe_dequantize
.extern MC_AUG_dematricing
.extern MC_AUG_denormalizing
/* synth.s */
.extern MPG_synthesis_subband
/* downmix.s */
.extern MC_II_downmix_bypass
.extern MC_II_downmix_5ch_to_2ch
.extern AUG_II_downmix_7ch_to_2ch
.extern AUG_II_downmix_7ch_to_5ch
/* audio_out.s */
.extern output_pcm_sample
.extern output_digital
/* lfe.s */
.extern expand_lfe_sample
.extern lfe_filter
/* drc.s */
.extern dynamic_range_control
/* crc.s */
.extern MPG_I_CRC_calc
.extern MPG_II_CRC_calc
.extern recover_CRC_error
.extern MC_error_check
.extern MC_EXT_error_check
.extern AUG_error_check
/* error.s */
.extern mpa_error_process
.extern print_fraction
/* Miscellaneous */
.extern __xymemclr
.extern __xymemset
.extern __flush_data
.extern __pushRegs
.extern __popRegs
.extern __cache_simul_on
.extern __cache_simul_off
/****************************************************************/
/* */
/* M A C R O F U N C T I O N S */
/* */
/****************************************************************/
/* Macro functions */
GETBITS .macro
esft sr, a
esub a, sa
ecp a, #0
enop
brad ec2, ret_bits
eld d, sg
eld sr, @rp3 ; no delay in SB
esft sr, a
eadd d, sg
esub a, #BITS_PER_WORD ; 16
ret_bits eneg a
eld sa, a
.endm
mGETBITS .macro
esft sr, a
esub a, sa
ecp a, #0
enop
brad ec2, %f1
eld b, sg
eld sr, @rp3 ; no delay in SBF
esft sr, a
eadd b, sg
esub a, #BITS_PER_WORD ; 16
%1 eneg a
eld sa, a
.endm
mDEQUANT_SAMPLE .macro
eld rp3, rp2
eld a, @rp3+s0
esft b, a ; b= sample
etst c, ec3 ; check msb is +/-
brad ec3, %f1
eld b, #0 ; 0.0
ecld bh, r0 ; -1.0
%1 eld a, #-1
esft sr, a
eadd b, sr ; 2's complement sample
eld ma0, @rp3+s0 ; II_dequant_coeff_D
eadd b, ma0, y1, @rp3+s0 ; II_dequant_coeff_C
eld x0, b
emul x0y1
eld @rp0+d1, p ; dequantized sample[part]
.endm
mDIVIDE .macro dividend, divisor
er nq
ecr ma0
eld ma0l, dividend
eld p, divisor
esla ma0
ld r7, #23
loop bnzd r7, loop
edivq ma0, p
eresr ma0, p
eld dividend, ma0l ; quotient
esra ma0
eld divisor, ma0 ; remainder
.endm
mSBLOFFSET .macro offset, sbf, mode
ld a8, #SFR_BASE /* sbl0off or sbl1off */
ld r0, #mode /* fill or flush command*/
.if( (mode==SB0_RD) || (mode==SB1_RD) )
ldw @[a8+sbf], offset
ldw @[a8+rSBFCON], r0
.else /* SB0_WR or SB1_WR */
ldw @[a8+rSBFCON], r0
ldw @[a8+sbf], offset
.endif
.endm
mRETURN .macro value
ld r2, #value
.endm
mFREAD .macro ptr, size, fp, offset
jsr __cache_simul_off
push a10
ldw a10, @[a10+ptr]
add a10, #offset
ld a12, #fp
sub size, #offset
ld r2, size ; a number of bytes
ld r3, #0
jsr __fread ; return r3:r2 (nbytes)
chk_eof cmp eq, size, r2
brt 2
ld r2, #__EOF__
pop a10
jsr __cache_simul_on
.endm
mCONVLENDIAN .mac macreg ; macreg = a,b,c,d
.ifdef LITTLE_ENDIAN ; default: big endian format
ecld r0, macreg
ld r1, r0
slb r1
srb r0
or r0, r1
ecld macreg, r0
.endif
.endm
ebra .macro cond, label
.if 1 //( _ADM_VERSION == ADM2E )
enop
.endif
bra cond, label
.endm
ebrad .macro cond, label
.if 1 //( _ADM_VERSION == ADM2E )
enop
.endif
brad cond, label
.endm
.endif /* _MPA_H_ */
.list on
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -