📄 mpegsubb.a
字号:
bmi window_band4window_band3 move.w (a3)+,d1 muls.w (a2)+,d1 add.l d1,d5 dbra d0,window_band3window_band4 add.l a5,a3 ; buf1 += off1 move.w d4,d0 ; d0 = cnt0 bmi window_band6window_band5 move.w (a4)+,d1 muls.w (a2)+,d1 add.l d1,d5 dbra d0,window_band5window_band6 add.l a6,a4 ; buf0 += off0 add.l d2,a2 ; dewindow += offd asr.l d7,d5 ; sum >>= (WINDOW_FACTOR+INT_FACTOR-15) IFD WINDOW_CLIP cmp.l #-32768,d5 blt window_band4l cmp.l #32767,d5 bgt window_band4hwindow_band4n ENDC move.w d5,(a1)+ dbra d6,window_band2 IFD WINDOW_CLIP bra window_band9window_band4l move.l #-32768,d5 bra.s window_band4nwindow_band4h move.l #32767,d5 bra.s window_band4n ENDCwindow_band9 move.w (sp)+,d2 ; #2 movem.l (sp)+,d2-d7/a2-a6 rts ; ##1 Begin ELSE; MULADDWIN {a3|a4}MULADDWIN MACRO move.w (\1)+,d1 muls.w (a2)+,d1 add.l d1,d5 ENDM ; WARING GENAM bug in rept & macros ; rept part is moved to END of MACRO ! ;; MULADDN <rept num>,{a3|a4}MULADDN MACRO IFNE \2 REPT \2 MULADDWIN \1 ENDR ENDC ENDM; MULADD0 <rept num>MULADD0 MACRO clr.l d5 MULADDN a3,\1 ENDM; MULADD1 <rept num>MULADD1 MACRO add.l a5,a3 MULADDN a4,\1 ENDM IFD OLD_OVERFLOW ; ##3 Begin ; CHECKBOUNDS <loop label>CHECKBOUNDS MACRO add.l a6,a4 add.l d2,a2 asr.l d7,d5 IFD WINDOW_CLIP cmp.l #-32768,d5 blt .window_bandl cmp.l #32767,d5 bgt .window_bandh.window_bandn ENDC move.w d5,(a1)+ dbra d6,\1 bra window_band9 IFD WINDOW_CLIP bra window_band9.window_bandl move.w #-32768,d5 bra.s .window_bandn.window_bandh move.w #32767,d5 bra.s .window_bandn ENDC ENDM ELSE ; ##3 ; CHECKBOUNDS <loop label>CHECKBOUNDS MACRO add.l a6,a4 add.l d2,a2 asr.l d7,d5 IFD WINDOW_CLIP move.w d5,a0 cmp.l a0,d5 bne.b .window_bandov.window_bandn ENDC move.w d5,(a1)+ dbra d6,\1 bra window_band9 IFD WINDOW_CLIP bra window_band9.window_bandov not.l d5 add.l d5,d5 move.w #$8000,d5 negx.w d5 bra.s .window_bandn; move.w d5,(a1)+; dbra d6,\1; bra window_band9 ENDC ENDM ENDC ; ##3 End; move.w w_width,d3 ; #2 move.w (sp),d3 ; #2 lea window_q0muls,a0 cmp.w #4,d3 ble window_qmul lea window_q1muls,a0 cmp.w #8,d3 ble window_qmul lea window_q2muls,a0window_qmul move.l (a0,d4.w*4),a0 jmp (a0)window_q2mul0 MULADD0 16 MULADD1 0 CHECKBOUNDS window_q2mul0window_q2mul1 MULADD0 15 MULADD1 1 CHECKBOUNDS window_q2mul1window_q2mul2 MULADD0 14 MULADD1 2 CHECKBOUNDS window_q2mul2window_q2mul3 MULADD0 13 MULADD1 3 CHECKBOUNDS window_q2mul3window_q2mul4 MULADD0 12 MULADD1 4 CHECKBOUNDS window_q2mul4window_q2mul5 MULADD0 11 MULADD1 5 CHECKBOUNDS window_q2mul5window_q2mul6 MULADD0 10 MULADD1 6 CHECKBOUNDS window_q2mul6window_q2mul7 MULADD0 9 MULADD1 7 CHECKBOUNDS window_q2mul7window_q2mul8 MULADD0 8 MULADD1 8 CHECKBOUNDS window_q2mul8window_q2mul9 MULADD0 7 MULADD1 9 CHECKBOUNDS window_q2mul9window_q2mul10 MULADD0 6 MULADD1 10 CHECKBOUNDS window_q2mul10window_q2mul11 MULADD0 5 MULADD1 11 CHECKBOUNDS window_q2mul11window_q2mul12 MULADD0 4 MULADD1 12 CHECKBOUNDS window_q2mul12window_q2mul13 MULADD0 3 MULADD1 13 CHECKBOUNDS window_q2mul13window_q2mul14 MULADD0 2 MULADD1 14 CHECKBOUNDS window_q2mul14window_q2mul15 MULADD0 1 MULADD1 15 CHECKBOUNDS window_q2mul15window_q1mul0 MULADD0 8 MULADD1 0 CHECKBOUNDS window_q1mul0window_q1mul1 MULADD0 7 MULADD1 1 CHECKBOUNDS window_q1mul1window_q1mul2 MULADD0 6 MULADD1 2 CHECKBOUNDS window_q1mul2window_q1mul3 MULADD0 5 MULADD1 3 CHECKBOUNDS window_q1mul3window_q1mul4 MULADD0 4 MULADD1 4 CHECKBOUNDS window_q1mul4window_q1mul5 MULADD0 3 MULADD1 5 CHECKBOUNDS window_q1mul5window_q1mul6 MULADD0 2 MULADD1 6 CHECKBOUNDS window_q1mul6window_q1mul7 MULADD0 1 MULADD1 7 CHECKBOUNDS window_q1mul7window_q0mul0 MULADD0 4 MULADD1 0 CHECKBOUNDS window_q0mul0window_q0mul1 MULADD0 3 MULADD1 1 CHECKBOUNDS window_q0mul1window_q0mul2 MULADD0 2 MULADD1 2 CHECKBOUNDS window_q0mul2window_q0mul3 MULADD0 1 MULADD1 3 CHECKBOUNDS window_q0mul3window_band9 move.w (sp)+,d2 movem.l (sp)+,d2-d7/a2-a6 rtswindow_q2muls dc.l window_q2mul0, window_q2mul1, window_q2mul2, window_q2mul3 dc.l window_q2mul4, window_q2mul5, window_q2mul6, window_q2mul7 dc.l window_q2mul8, window_q2mul9, window_q2mul10, window_q2mul11 dc.l window_q2mul12, window_q2mul13, window_q2mul14, window_q2mul15window_q1muls dc.l window_q1mul0, window_q1mul1, window_q1mul2, window_q1mul3 dc.l window_q1mul4, window_q1mul5, window_q1mul6, window_q1mul7window_q0muls dc.l window_q0mul0, window_q0mul1, window_q0mul2, window_q0mul3 ENDC ; ##1 End ; #2 Begin: MPEGSUBB_config suppressed IFNE 0; Configure subband routines;; d0 = freq_div; d1 = quality; d2 = output_8bits;;@MPEGSUBB_config;_MPEGSUBB_config movem.l d2-d7/a2-a6,-(sp) move.w d0,freq_div move.w d1,quality move.w d2,output_8bits move.w #32,d3 ; pcm_count for full freq output cmp.w #2,d0 beq init_decode_1 cmp.w #4,d0 beq init_decode_2 bra init_decode_5init_decode_1 move.w #16,d3 ; pcm_count for half freq output bra init_decode_5init_decode_2 moveq.l #8,d3 ; pcm_count for quarter freq outputinit_decode_5 move.w d3,pcm_count moveq.l #0,d3 ; start offset for windowing moveq.l #16,d4 ; #coeff used for windowing move.w quality,d2 cmp.b #2,d2 ; best quality beq.s init_decode_6 move.w #4,d3 moveq.l #8,d4 cmp.b #1,d2 beq.s init_decode_6 move.w #6,d3 moveq.l #4,d4init_decode_6 move.w d3,w_begin move.w d4,w_width movem.l (sp)+,d2-d7/a2-a6 rts ENDC ; #2 End; ##4 Begin (Table suppressed) IFD OLD_DEW_TABLE section ASM_TABLES,dataWINDOW_FACTOR equ 14 evenwindow_table dc.w +0, -7, +53, -114, +509, -1288, +1643, -9372,+18759, +9372, +1643, +1288, +509, +114, +53, +7 dc.w +0, -7, +54, -129, +499, -1379, +1489, -9833,+18747, +8909, +1783, +1196, +515, +100, +51, +6 dc.w +0, -8, +55, -145, +487, -1469, +1321,-10293,+18713, +8447, +1909, +1106, +519, +86, +50, +6 dc.w +0, -9, +56, -161, +473, -1559, +1140,-10751,+18657, +7986, +2022, +1015, +521, +73, +49, +5 dc.w +0, -10, +56, -177, +455, -1647, +943,-11205,+18578, +7527, +2122, +926, +521, +61, +47, +4 dc.w +0, -11, +57, -194, +434, -1733, +733,-11654,+18476, +7072, +2209, +837, +518, +49, +45, +4 dc.w +0, -12, +57, -211, +410, -1817, +509,-12097,+18353, +6620, +2284, +750, +514, +38, +44, +4 dc.w +0, -13, +56, -229, +383, -1899, +270,-12534,+18208, +6173, +2347, +665, +507, +27, +42, +3 dc.w +0, -14, +56, -247, +353, -1977, +17,-12963,+18042, +5732, +2397, +582, +500, +18, +40, +3 dc.w +0, -15, +55, -266, +320, -2052, -249,-13383,+17854, +5297, +2437, +501, +490, +8, +38, +2 dc.w +0, -17, +53, -284, +282, -2122, -530,-13794,+17647, +4869, +2465, +422, +479, +0, +36, +2 dc.w +0, -18, +51, -302, +242, -2188, -824,-14194,+17419, +4449, +2483, +346, +467, -7, +34, +2 dc.w +0, -19, +50, -320, +198, -2249, -1133,-14583,+17172, +4038, +2491, +273, +454, -14, +32, +1 dc.w +0, -21, +47, -338, +151, -2304, -1454,-14959,+16907, +3636, +2489, +203, +439, -20, +31, +1 dc.w +0, -22, +44, -356, +100, -2353, -1788,-15322,+16623, +3244, +2478, +136, +424, -26, +29, +1 dc.w -1, -24, +40, -374, +46, -2396, -2134,-15670,+16322, +2863, +2459, +71, +408, -31, +27, +1 dc.w -1, -25, +36, -391, -11, -2431, -2493,-16004,+16004, +2493, +2431, +11, +391, -36, +25, +1 dc.w -1, -27, +31, -408, -71, -2459, -2863,-16322,+15670, +2134, +2396, -46, +374, -40, +24, +1 dc.w -1, -29, +26, -424, -136, -2478, -3244,-16623,+15322, +1788, +2353, -100, +356, -44, +22, +0 dc.w -1, -31, +20, -439, -203, -2489, -3636,-16907,+14959, +1454, +2304, -151, +339, -47, +21, +0 dc.w -1, -32, +14, -454, -273, -2491, -4038,-17172,+14583, +1133, +2249, -198, +320, -50, +19, +0 dc.w -2, -34, +7, -467, -346, -2483, -4449,-17419,+14194, +825, +2188, -242, +302, -51, +18, +0 dc.w -2, -36, +0, -479, -422, -2465, -4869,-17647,+13794, +530, +2122, -282, +284, -53, +17, +0 dc.w -2, -38, -8, -490, -501, -2437, -5297,-17854,+13383, +249, +2052, -319, +266, -55, +15, +0 dc.w -3, -40, -18, -500, -582, -2397, -5732,-18042,+12963, -17, +1977, -353, +247, -55, +14, +0 dc.w -3, -42, -27, -507, -665, -2347, -6173,-18208,+12534, -270, +1899, -383, +229, -56, +13, +0 dc.w -4, -44, -38, -514, -750, -2284, -6620,-18353,+12097, -509, +1817, -410, +211, -57, +12, +0 dc.w -4, -45, -49, -518, -837, -2209, -7072,-18476,+11654, -733, +1733, -434, +194, -57, +11, +0 dc.w -4, -47, -61, -521, -926, -2122, -7527,-18578,+11205, -943, +1647, -455, +177, -56, +10, +0 dc.w -5, -49, -73, -521, -1015, -2022, -7986,-18657,+10751, -1140, +1559, -473, +161, -56, +9, +0 dc.w -6, -50, -86, -519, -1106, -1909, -8447,-18713,+10293, -1321, +1469, -487, +145, -55, +8, +0 dc.w -6, -51, -100, -515, -1196, -1783, -8909,-18747, +9833, -1489, +1379, -499, +129, -54, +7, +0 ENDC; ##4 End ; #2: vars suppressed; section ASMVARS,bss;freq_div ds.w 1 ; 1,2 or 4;output_8bits ds.w 1 ; 0 if 16 bits output;quality ds.w 1 ; 0..2 (best);w_begin ds.w 1 ; start offset for windowing;w_width ds.w 1 ; #coeff used for windowing;pcm_count ds.w 1 ; # of samples per subband
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -