1 ; **************************************************************************** 2 ; MP3PLAY.PRG - MP3 DECODER/PLAYER 1.0 for TRDOS 386 Operating System 3 ; ---------------------------------------------------------------------------- 4 ; Based on 5 ; NOCASH MP3PLAY.EXE 1.4 (Windows) ASM source code (Martin Korth, 20/09/2024) 6 ; 7 ; FASM Source Code: Erdogan Tan - 19/10/2024 - 22/10/2024 8 ; NASM Source Code: Erdogan Tan - 09/01/2025 9 ; 10 ; [ Last Modification: 15/01/2025 ] 11 ; 12 ; ---------------------------------------------------------------------------- 13 ; Modified from on MP3PLAY.ASM (for Windows console) source code - 17/10/2024 14 ; **************************************************************************** 15 ; Modified from Martin Korth's 'mp3play.asm' (TASM32) source code... (v1.4) 16 ; Applied development method: 17 ; Disassembling 'mp3play.exe' v1.4 by using HEX-RAYS disassembler; 18 ; then... converting disassembled code to FASM syntax, 19 ; adding '.idata' code (by help of FASM examples) to the raw 20 ; asm file. Converting 'proc' procedures to labels. 21 ; and Finally: assembling mp3play.asm (single) file by using 22 ; 'fasm mp3play.asm' command. 23 ; 24 ; NOTE: 25 ; Martin Korth's MP3PLAY.EXE (v1.4, 20/09/2024) file size is 45056 bytes. 26 ; (This) modified MP3PLAY.EXE (v1.4.0, 17/10/2024) is 37888 bytes. 27 ; 28 ; --------------------------------------------------------------------------- 29 ; nasm mp3play.s -l mp3play.txt -o MP3PLAY.PRG -Z error.txt 30 31 ; =========================================================================== 32 ; TRDOS 386 Operating System Specific Procedures - Erdogan Tan - 20/10/2024 33 ; =========================================================================== 34 35 ; 20/10/2024 36 ; 20/08/2024 ; TRDOS 386 v2.0.9 37 ; TRDOS 386 system calls 38 _ver equ 0 39 _exit equ 1 40 _fork equ 2 41 _read equ 3 42 _write equ 4 43 _open equ 5 44 _close equ 6 45 _wait equ 7 46 _creat equ 8 47 _rename equ 9 48 _delete equ 10 49 _exec equ 11 50 _chdir equ 12 51 _time equ 13 52 _mkdir equ 14 53 _chmod equ 15 54 _rmdir equ 16 55 _break equ 17 56 _drive equ 18 57 _seek equ 19 58 _tell equ 20 59 _mem equ 21 60 _prompt equ 22 61 _path equ 23 62 _env equ 24 63 _stime equ 25 64 _quit equ 26 65 _intr equ 27 66 _dir equ 28 67 _emt equ 29 68 _ldvrt equ 30 69 _video equ 31 70 _audio equ 32 71 _timer equ 33 72 _sleep equ 34 73 _msg equ 35 74 _geterr equ 36 75 _fpsave equ 37 76 _pri equ 38 77 _rele equ 39 78 _fff equ 40 79 _fnf equ 41 80 _alloc equ 42 81 _dalloc equ 43 82 _calbac equ 44 83 _dma equ 45 84 _stdio equ 46 ; TRDOS 386 v2.0.9 85 86 ; --------------------------------------------------------------------------- 87 ; 'sys' macro in FASM format 88 ; --------------------------------------------------------------------------- 89 90 %if 0 91 macro sys op1,op2,op3,op4 92 { 93 if op4 eq 94 else 95 mov edx, op4 96 end if 97 if op3 eq 98 else 99 mov ecx, op3 100 end if 101 if op2 eq 102 else 103 mov ebx, op2 104 end if 105 mov eax, op1 106 int 40h 107 } 108 %endif 109 110 ; --------------------------------------------------------------------------- 111 ; 'sys' macro in NASM format 112 ; --------------------------------------------------------------------------- 113 ; 09/01/2025 114 115 %macro sys 1-4 116 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 117 ; 03/09/2015 118 ; 13/04/2015 119 ; Retro UNIX 386 v1 system call. 120 %if %0 >= 2 121 mov ebx, %2 122 %if %0 >= 3 123 mov ecx, %3 124 %if %0 = 4 125 mov edx, %4 126 %endif 127 %endif 128 %endif 129 mov eax, %1 130 ;int 30h 131 int 40h ; TRDOS 386 (TRDOS v2.0) 132 %endmacro 133 134 ; =========================================================================== 135 ; CODE 136 ; =========================================================================== 137 138 [BITS 32] ; 32-bit intructions 139 140 [ORG 0] 141 142 ; =========================================================================== 143 144 ; 20/10/2024 145 start: 146 ; 21/10/2024 147 00000000 E8376B0000 call set_break ; set and clear bss section 148 ; also set stream_start position 149 150 ;mov edx, txt_hello ; "nocash mp3 decoder v1.4, 2024" ... 151 ;call wrstr_edx 152 00000005 BB[428B0000] mov ebx, txt_hello 153 0000000A E8D46B0000 call print_msg 154 155 0000000F E8036A0000 call get_commandline 156 00000014 0F8286010000 jc .exit 157 158 ;;; 159 ; 11/01/2025 160 0000001A E8BA6C0000 call detect_enable_audio_device 161 0000001F 0F827B010000 jc .exit 162 ;;; 163 164 00000025 31ED xor ebp, ebp 165 00000027 E828640000 call mp3_init 166 0000002C E8226B0000 call open_and_mmap_the_file 167 00000031 0F8269010000 jc .exit 168 00000037 E869010000 call detect_cpu_386_and_up 169 0000003C E8B46B0000 call GetTickCount 170 00000041 F7D8 neg eax 171 00000043 A3[60760000] mov [millisecond_count], eax 172 00000048 E8A1640000 call mp3_check_1st_frame 173 0000004D 0F824D010000 jc .exit 174 00000053 803D[4C760000]00 cmp byte [option_test], 0 175 0000005A 740A jz short .no_benchmark_test 176 0000005C E857660000 call mp3_plain_test_without_output 177 178 00000061 E986000000 jmp .decode_done 179 180 .no_benchmark_test: 181 00000066 833D[00850000]00 cmp dword [mp3_pcm_fname], 0 182 0000006D 740A jz short .no_pcm_verify 183 0000006F E86C670000 call mp3_verify_pcm_file 184 00000074 E927010000 jmp .exit 185 186 .no_pcm_verify: 187 00000079 833D[FC840000]00 cmp dword [mp3_dst_fname], 0 188 00000080 7407 jz short .no_wav_output 189 00000082 E866660000 call mp3_cast_to_wav_file 190 00000087 EB63 jmp short .decode_done 191 192 .no_wav_output: 193 ; 15/01/2025 194 ; 10/01/2025 (Video memory access for buffer change indicator) 195 ; DIRECT CGA (TEXT MODE) MEMORY ACCESS 196 ; bl = 0, bh = 4 197 ; Direct access/map to CGA (Text) memory (0B8000h) 198 sys _video, 0400h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00000089 BB00040000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 0000008E B81F000000 <1> mov eax, %1 130 <1> 131 00000093 CD40 <1> int 40h 199 00000095 3D00800B00 cmp eax, 0B8000h 200 0000009A 0F8500010000 jne .exit ; 15/01/2025 201 ;;; 202 203 ; 15/01/2025 204 ;;;; -------------------------- 205 ;mov byte [convert], 0 206 000000A0 B002 mov al, 2 207 000000A2 3805[888D0000] cmp [audio_hardware], al ; 2 208 000000A8 7511 jne short .direct 209 210 000000AA 803D[D09D0000]02 cmp byte [mp3_output_num_channels], 2 211 000000B1 7227 jb short .indirect ; mono (8bit or 16bit) 212 000000B3 3805[D89D0000] cmp [mp3_bytes_per_sample], al ; 2 213 000000B9 721F jb short .indirect 214 .direct: 215 ;;;; -------------------------- 216 217 ;;; 218 ; 20/10/2024 219 ;call detect_enable_audio_device 220 ;jc .exit 221 000000BB E8066D0000 call audio_system_init 222 ;jc .exit 223 000000C0 7207 jc short .exit@ ; 15/01/2025 224 ;;; 225 226 000000C2 E8BD6D0000 call mp3_cast_to_speaker 227 228 ; 13/01/2025 229 ;;;; -------------------------- 230 000000C7 EB23 jmp short .decode_done 231 232 ; 15/01/2025 233 .exit@: 234 ; Disable audio device 235 sys _audio, 0C00h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 000000C9 BB000C0000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 000000CE B820000000 <1> mov eax, %1 130 <1> 131 000000D3 CD40 <1> int 40h 236 000000D5 E93F6B0000 jmp ExitProcess 237 238 .indirect: 239 000000DA FE05[9C8D0000] inc byte [convert] ; 1 240 000000E0 E8836F0000 call audio_system_init_x 241 000000E5 72E2 jc short .exit@ 242 000000E7 E800700000 call mp3_cast_to_speaker_x 243 ;;;; -------------------------- 244 245 .decode_done: 246 000000EC E8046B0000 call GetTickCount 247 000000F1 0105[60760000] add [millisecond_count], eax 248 000000F7 BA[35850000] mov edx, txt_decode_timing1 ; "audio duration " 249 000000FC E8F7640000 call wrstr_edx 250 00000101 A1[90F40000] mov eax, [mp3_total_output_size] 251 00000106 BAE8030000 mov edx, 1000 252 0000010B F7E2 mul edx 253 0000010D F735[D49D0000] div dword [mp3_output_sample_rate] 254 00000113 31D2 xor edx, edx 255 00000115 F735[D09D0000] div dword [mp3_output_num_channels] 256 0000011B 31D2 xor edx, edx 257 0000011D F735[D89D0000] div dword [mp3_bytes_per_sample] 258 00000123 A3[5C760000] mov [mp3_output_milliseconds], eax 259 00000128 E801650000 call wr_decimal_eax_with_thousands_seperator 260 0000012D BA[45850000] mov edx, txt_decode_timing2 ; " milliseconds, decoded in " 261 00000132 E8C1640000 call wrstr_edx 262 00000137 A1[60760000] mov eax, [millisecond_count] 263 0000013C E8ED640000 call wr_decimal_eax_with_thousands_seperator 264 00000141 BA[60850000] mov edx, txt_decode_timing3 ; " milliseconds\r\n" 265 00000146 E8AD640000 call wrstr_edx 266 0000014B BA[70850000] mov edx, txt_clks_per_second ; " clock cycles per second:\r\n" 267 00000150 E8A3640000 call wrstr_edx 268 00000155 BE[64760000] mov esi, ttt ; rdtsc_list_start 269 270 .timelog_lop: 271 0000015A E8BB640000 call wrspc 272 0000015F 8D5608 lea edx, [esi+8] 273 00000162 E891640000 call wrstr_edx 274 00000167 E8AE640000 call wrspc 275 0000016C 8B06 mov eax, [esi] 276 0000016E 8B5E04 mov ebx, [esi+4] 277 00000171 BAE8030000 mov edx, 1000 278 00000176 0FAFDA imul ebx, edx 279 00000179 F7E2 mul edx 280 0000017B 01DA add edx, ebx 281 0000017D 3B15[5C760000] cmp edx, [mp3_output_milliseconds] 282 00000183 730B jnb short .timelog_oops 283 00000185 F735[5C760000] div dword [mp3_output_milliseconds] 284 0000018B E89E640000 call wr_decimal_eax_with_thousands_seperator 285 286 .timelog_oops: 287 00000190 E874640000 call wrcrlf 288 00000195 83C618 add esi, 24 289 00000198 81FE[2C780000] cmp esi, mp3_bitrate_tab 290 0000019E 75BA jnz short .timelog_lop 291 292 .exit: 293 ;push 0 ; uExitCode 294 ;call ExitProcess 295 000001A0 E9746A0000 jmp ExitProcess 296 297 298 ; =============== S U B R O U T I N E ======================================= 299 300 301 detect_cpu_386_and_up: 302 000001A5 C605[59760000]03 mov byte [detected_cpu], 3 303 000001AC 89E3 mov ebx, esp 304 000001AE 83E4FC and esp, ~ 3 ; not 3 305 000001B1 9C pushf 306 000001B2 58 pop eax 307 000001B3 89C1 mov ecx, eax 308 000001B5 3500000400 xor eax, 40000h 309 000001BA 50 push eax 310 000001BB 9D popf 311 000001BC 9C pushf 312 000001BD 58 pop eax 313 000001BE 31C8 xor eax, ecx 314 000001C0 51 push ecx 315 000001C1 9D popf 316 000001C2 89DC mov esp, ebx 317 000001C4 A900000400 test eax, 40000h 318 000001C9 7431 jz short .no_id 319 000001CB FE05[59760000] inc byte [detected_cpu] 320 000001D1 E827000000 call @@get_id_flag 321 000001D6 7507 jnz short .yep_id 322 000001D8 E820000000 call @@get_id_flag 323 000001DD 741D jz short .no_id 324 325 .yep_id: 326 000001DF B801000000 mov eax, 1 327 000001E4 0FA2 cpuid 328 000001E6 80E40F and ah, 0Fh 329 000001E9 8825[59760000] mov [detected_cpu], ah 330 000001EF C605[58760000]01 mov byte [cpuid_exists], 1 331 000001F6 8915[54760000] mov [cpuid_flags], edx 332 333 .no_id: 334 000001FC C3 retn 335 336 ; =============== S U B R O U T I N E ======================================= 337 338 339 @@get_id_flag: 340 000001FD 9C pushf 341 000001FE 58 pop eax 342 000001FF 0D00002000 or eax, 200000h 343 00000204 50 push eax 344 00000205 9D popf 345 00000206 9C pushf 346 00000207 58 pop eax 347 00000208 A900002000 test eax, 200000h 348 0000020D C3 retn 349 350 ; =============== S U B R O U T I N E ======================================= 351 352 bswap_eax: 353 0000020E 86E0 xchg al, ah 354 00000210 C1C810 ror eax, 10h 355 00000213 86E0 xchg al, ah 356 00000215 C3 retn 357 358 ; =============== S U B R O U T I N E ======================================= 359 360 mp3_recollect_bits: 361 00000216 F7C601000000 test esi, 1 362 0000021C 7510 jnz short .odd 363 0000021E 668B2E mov bp, [esi] 364 00000221 83C602 add esi, 2 365 00000224 66C1CD08 ror bp, 8 366 00000228 C1E510 shl ebp, 16 367 0000022B B500 mov ch, 0 368 0000022D C3 retn 369 370 .odd: 371 0000022E 0FB62E movzx ebp, byte [esi] 372 00000231 46 inc esi 373 00000232 C1E510 shl ebp, 16 374 00000235 668B2E mov bp, [esi] 375 00000238 83C602 add esi, 2 376 0000023B 66C1CD08 ror bp, 8 377 0000023F C1E508 shl ebp, 8 378 00000242 B508 mov ch, 8 379 00000244 C3 retn 380 381 ; =============== S U B R O U T I N E ======================================= 382 383 384 mp3_get_bits: 385 00000245 89E8 mov eax, ebp 386 00000247 D3E5 shl ebp, cl 387 00000249 D3C0 rol eax, cl 388 0000024B 31E8 xor eax, ebp 389 0000024D 28CD sub ch, cl 390 0000024F 7801 js short mp3_collect_more 391 00000251 C3 retn 392 393 mp3_collect_more: 394 00000252 88E9 mov cl, ch 395 00000254 80C510 add ch, 10h 396 00000257 D3C5 rol ebp, cl 397 00000259 668B2E mov bp, [esi] 398 0000025C 83C602 add esi, 2 399 0000025F 66C1CD08 ror bp, 8 400 00000263 D3CD ror ebp, cl 401 00000265 C3 retn 402 403 ; =============== S U B R O U T I N E ======================================= 404 405 406 mp3_uncollect_bits: 407 00000266 83EE02 sub esi, 2 408 00000269 C0ED03 shr ch, 3 409 0000026C 0FB6CD movzx ecx, ch 410 0000026F 29CE sub esi, ecx 411 00000271 C3 retn 412 413 ; =============== S U B R O U T I N E ======================================= 414 415 416 mp3_search_get_header: 417 00000272 F605[54760000]10 test byte [cpuid_flags], 10h 418 00000279 740E jz short .no_rdtsc_supported 419 0000027B 0F31 rdtsc 420 0000027D 2905[64760000] sub [ttt], eax 421 00000283 1915[68760000] sbb [ttt+4], edx 422 423 .no_rdtsc_supported: 424 00000289 C705[B4F40000]0000- mov dword [mp3_extra_bytes], 0 424 00000291 0000 425 426 .retry_header: 427 00000293 833D[B0F40000]04 cmp dword [mp3_src_remain], 4 428 0000029A 0F82B5010000 jb .fail_no_header 429 000002A0 803EFF cmp byte [esi], 0FFh 430 000002A3 7516 jnz short .bad_header 431 000002A5 8A4601 mov al, [esi+1] 432 000002A8 24E6 and al, 0E6h 433 000002AA 3CE2 cmp al, 0E2h 434 000002AC 750D jnz short .bad_header 435 000002AE 8A4602 mov al, [esi+2] 436 000002B1 3CF0 cmp al, 0F0h 437 000002B3 7306 jnb short .bad_header 438 000002B5 240C and al, 0Ch 439 000002B7 3C0C cmp al, 0Ch 440 000002B9 7519 jnz short .good_header 441 442 .bad_header: 443 000002BB 46 inc esi 444 000002BC FF0D[B0F40000] dec dword [mp3_src_remain] 445 000002C2 FF05[B4F40000] inc dword [mp3_extra_bytes] 446 000002C8 C705[A09D0000]- mov dword [main_data_pool_wr_ptr], main_data_pool_start 446 000002CE [A08D0000] 447 000002D2 EBBF jmp short .retry_header 448 449 .good_header: 450 000002D4 8B06 mov eax, [esi] 451 000002D6 E833FFFFFF call bswap_eax 452 000002DB A3[B09D0000] mov [mp3_hdr_32bit_header], eax 453 000002E0 C705[F09D0000]0000- mov dword [mp3_hdr_flag_lsf], 0 453 000002E8 0000 454 000002EA C705[B89D0000]0000- mov dword [mp3_hdr_flag_mpeg25], 0 454 000002F2 0000 455 000002F4 C705[C0F40000]0200- mov dword [mp3_nb_granules], 2 455 000002FC 0000 456 000002FE A900000800 test eax, 80000h 457 00000303 7525 jnz short .lsf_this 458 00000305 C705[F09D0000]0100- mov dword [mp3_hdr_flag_lsf], 1 458 0000030D 0000 459 0000030F C705[C0F40000]0100- mov dword [mp3_nb_granules], 1 459 00000317 0000 460 00000319 A900001000 test eax, 100000h 461 0000031E 750A jnz short .lsf_this 462 00000320 C705[B89D0000]0100- mov dword [mp3_hdr_flag_mpeg25], 1 462 00000328 0000 463 464 .lsf_this: 465 0000032A C1E80A shr eax, 10 466 0000032D 83E003 and eax, 3 467 00000330 8B0D[F09D0000] mov ecx, [mp3_hdr_flag_lsf] 468 00000336 030D[B89D0000] add ecx, [mp3_hdr_flag_mpeg25] 469 0000033C 0FB79400[6C780000] movzx edx, word [mp3_freq_tab+eax*2] 470 00000344 D3EA shr edx, cl 471 00000346 8D0C49 lea ecx, [ecx+ecx*2] 472 00000349 01C8 add eax, ecx 473 0000034B A3[C49D0000] mov [mp3_hdr_sample_rate_index], eax 474 00000350 8915[C09D0000] mov [mp3_sample_rate], edx 475 476 00000356 8A0D[4F760000] mov cl, [option_rate_shift] 477 0000035C D3EA shr edx, cl 478 479 0000035E 8915[D49D0000] mov [mp3_output_sample_rate], edx 480 00000364 A1[B09D0000] mov eax, [mp3_hdr_32bit_header] 481 00000369 C1E810 shr eax, 10h 482 0000036C F7D0 not eax 483 0000036E 83E001 and eax, 1 484 00000371 A3[B49D0000] mov [mp3_hdr_flag_crc], eax 485 00000376 A1[B09D0000] mov eax, [mp3_hdr_32bit_header] 486 0000037B C1E809 shr eax, 9 487 0000037E 83E001 and eax, 1 488 00000381 A3[BC9D0000] mov [mp3_hdr_flag_padding], eax 489 00000386 A1[B09D0000] mov eax, [mp3_hdr_32bit_header] 490 0000038B C1E80C shr eax, 12 491 0000038E 83E00F and eax, 0Fh 492 00000391 7512 jnz short .not_free_format 493 00000393 E85F5D0000 call mp3_detect_free_format_block_size 494 00000398 0F821DFFFFFF jb .bad_header 495 0000039E A1[00F40000] mov eax, [mp3_free_format_frame_size] 496 000003A3 EB34 jmp short .this_frame_size_plus_padding 497 498 .not_free_format: 499 000003A5 8B15[F09D0000] mov edx, [mp3_hdr_flag_lsf] 500 000003AB C1E204 shl edx, 4 501 000003AE 01D0 add eax, edx 502 000003B0 0FB78400[2C780000] movzx eax, word [mp3_bitrate_tab+eax*2] ; kbit/s 503 000003B8 69C0E8030000 imul eax, 1000 ; bit/s 504 000003BE A3[C89D0000] mov [mp3_bit_rate], eax 505 000003C3 69C090000000 imul eax, 144 ; 144=90h=8*18 506 000003C9 31D2 xor edx, edx 507 000003CB F735[C09D0000] div dword [mp3_sample_rate] 508 000003D1 8B0D[F09D0000] mov ecx, [mp3_hdr_flag_lsf] 509 000003D7 D3E8 shr eax, cl 510 511 .this_frame_size_plus_padding: 512 000003D9 0305[BC9D0000] add eax, [mp3_hdr_flag_padding] 513 000003DF A3[A89D0000] mov [mp3_src_frame_size], eax 514 000003E4 01F0 add eax, esi 515 000003E6 A3[AC9D0000] mov [mp3_src_frame_end], eax 516 000003EB A1[B09D0000] mov eax, [mp3_hdr_32bit_header] 517 000003F0 C1E806 shr eax, 6 518 000003F3 83E003 and eax, 3 519 000003F6 A3[E89D0000] mov [mp3_hdr_mode_val], eax 520 000003FB BA01000000 mov edx, 1 521 522 00000400 3C03 cmp al, 3 523 00000402 7401 jz short .this_channels 524 525 ;mov edx, 2 526 ; 10/01/2025 527 00000404 42 inc edx 528 .this_channels: 529 00000405 8915[CC9D0000] mov [mp3_src_num_channels], edx 530 0000040B 803D[4D760000]00 cmp byte [option_mono], 0 531 00000412 7405 jz short .allow_stereo 532 00000414 BA01000000 mov edx, 1 533 .allow_stereo: 534 00000419 8915[D09D0000] mov [mp3_output_num_channels], edx 535 0000041F 0FAF15[D89D0000] imul edx, [mp3_bytes_per_sample] 536 00000426 8915[9CF40000] mov [mp3_samples_dst_step], edx 537 0000042C A1[B09D0000] mov eax, [mp3_hdr_32bit_header] 538 00000431 C1E804 shr eax, 4 539 00000434 83E003 and eax, 3 540 00000437 A3[EC9D0000] mov [mp3_hdr_mode_ext], eax 541 0000043C F605[54760000]10 test byte [cpuid_flags], 10h 542 00000443 740E jz short .no_rdtsc_supported@ 543 00000445 0F31 rdtsc 544 00000447 0105[64760000] add [ttt], eax 545 0000044D 1115[68760000] adc [ttt+4], edx 546 547 .no_rdtsc_supported@: 548 00000453 F8 clc 549 00000454 C3 retn 550 551 .fail_no_header: 552 00000455 F605[54760000]10 test byte [cpuid_flags], 10h 553 0000045C 740E jz short .no_rdtsc_supported@@ 554 0000045E 0F31 rdtsc 555 00000460 0105[64760000] add [ttt], eax 556 00000466 1115[68760000] adc [ttt+4], edx 557 558 .no_rdtsc_supported@@: 559 0000046C C705[A89D0000]0000- mov dword [mp3_src_frame_size], 0 559 00000474 0000 560 00000476 F9 stc 561 00000477 C3 retn 562 563 564 ; =============== S U B R O U T I N E ======================================= 565 566 567 mp3_bitstream_read_header_extra: 568 00000478 F605[54760000]10 test byte [cpuid_flags], 10h 569 0000047F 740E jz short .no_rdtsc_supported 570 00000481 0F31 rdtsc 571 00000483 2905[7C760000] sub [rdtsc_read_header_extra], eax 572 00000489 1915[80760000] sbb [rdtsc_read_header_extra+4], edx 573 574 .no_rdtsc_supported: 575 0000048F 833D[B49D0000]00 cmp dword [mp3_hdr_flag_crc], 0 576 00000496 7422 jz short .without_crc 577 00000498 89E8 mov eax, ebp ; mp3mac_get_n_bits 16 578 0000049A C1E510 shl ebp, 10h 579 0000049D C1C010 rol eax, 10h 580 000004A0 31E8 xor eax, ebp 581 000004A2 80ED10 sub ch, 10h 582 000004A5 7913 jns short .without_crc 583 000004A7 88E9 mov cl, ch ; mp3mac_collect_more 584 000004A9 80C510 add ch, 10h 585 000004AC D3C5 rol ebp, cl 586 000004AE 668B2E mov bp, [esi] 587 000004B1 83C602 add esi, 2 588 000004B4 66C1CD08 ror bp, 8 589 000004B8 D3CD ror ebp, cl 590 591 .without_crc: 592 000004BA 833D[F09D0000]00 cmp dword [mp3_hdr_flag_lsf], 0 593 000004C1 745B jz short .pre_lsf_zero 594 000004C3 C705[BCF40000]0900- mov dword [mp3_num_compress_bits], 9 594 000004CB 0000 595 000004CD 89E8 mov eax, ebp ; mp3mac_get_n_bits 8 596 000004CF C1E508 shl ebp, 8 597 000004D2 C1C008 rol eax, 8 598 000004D5 31E8 xor eax, ebp 599 000004D7 80ED08 sub ch, 8 600 000004DA 7913 jns short .without_crc@ 601 000004DC 88E9 mov cl, ch 602 000004DE 80C510 add ch, 10h 603 000004E1 D3C5 rol ebp, cl 604 000004E3 668B2E mov bp, [esi] 605 000004E6 83C602 add esi, 2 606 000004E9 66C1CD08 ror bp, 8 607 000004ED D3CD ror ebp, cl 608 609 .without_crc@: 610 000004EF A3[B8F40000] mov [mp3_main_data_begin], eax 611 000004F4 8A0D[CC9D0000] mov cl, byte [mp3_src_num_channels] 612 000004FA 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 613 000004FC D3E5 shl ebp, cl 614 000004FE D3C0 rol eax, cl 615 00000500 31E8 xor eax, ebp 616 00000502 28CD sub ch, cl 617 00000504 7913 jns short .without_crc@@ 618 00000506 88E9 mov cl, ch 619 00000508 80C510 add ch, 10h 620 0000050B D3C5 rol ebp, cl 621 0000050D 668B2E mov bp, [esi] 622 00000510 83C602 add esi, 2 623 00000513 66C1CD08 ror bp, 8 624 00000517 D3CD ror ebp, cl 625 626 .without_crc@@: 627 00000519 E9A1000000 jmp .pre_lsf_done 628 629 .pre_lsf_zero: 630 0000051E C705[BCF40000]0400- mov dword [mp3_num_compress_bits], 4 630 00000526 0000 631 00000528 89E8 mov eax, ebp ; mp3mac_get_n_bits 9 632 0000052A C1E509 shl ebp, 9 633 0000052D C1C009 rol eax, 9 634 00000530 31E8 xor eax, ebp 635 00000532 80ED09 sub ch, 9 636 00000535 7913 jns short .without_crc@@@ 637 00000537 88E9 mov cl, ch 638 00000539 80C510 add ch, 10h 639 0000053C D3C5 rol ebp, cl 640 0000053E 668B2E mov bp, [esi] 641 00000541 83C602 add esi, 2 642 00000544 66C1CD08 ror bp, 8 643 00000548 D3CD ror ebp, cl 644 645 .without_crc@@@: 646 0000054A A3[B8F40000] mov [mp3_main_data_begin], eax 647 0000054F 8A0D[CC9D0000] mov cl, byte [mp3_src_num_channels] 648 00000555 D0E1 shl cl, 1 ; 1,2 --> 2,4 649 00000557 80F107 xor cl, 7 ; --> 5,3 650 0000055A 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 651 0000055C D3E5 shl ebp, cl 652 0000055E D3C0 rol eax, cl 653 00000560 31E8 xor eax, ebp 654 00000562 28CD sub ch, cl 655 00000564 7913 jns short .without_crc@@@@ 656 00000566 88E9 mov cl, ch 657 00000568 80C510 add ch, 10h 658 0000056B D3C5 rol ebp, cl 659 0000056D 668B2E mov bp, [esi] 660 00000570 83C602 add esi, 2 661 00000573 66C1CD08 ror bp, 8 662 00000577 D3CD ror ebp, cl 663 664 .without_crc@@@@: 665 00000579 8B15[CC9D0000] mov edx, [mp3_src_num_channels] 666 0000057F BB[C4F40000] mov ebx, mp3_granules 667 668 .pre_channel_lop: 669 00000584 C7432800000000 mov dword [ebx+40], 0 ; [ebx+$mp3gr_scfsi] 670 0000058B 81C3A0090000 add ebx, 2464 ; $mp3gr_entrysiz 671 00000591 89E8 mov eax, ebp ; mp3mac_get_n_bits 4 672 00000593 C1E504 shl ebp, 4 673 00000596 C1C004 rol eax, 4 674 00000599 31E8 xor eax, ebp 675 0000059B 80ED04 sub ch, 4 676 0000059E 7913 jns short .without_crc@@@@@ 677 000005A0 88E9 mov cl, ch 678 000005A2 80C510 add ch, 10h 679 000005A5 D3C5 rol ebp, cl 680 000005A7 668B2E mov bp, [esi] 681 000005AA 83C602 add esi, 2 682 000005AD 66C1CD08 ror bp, 8 683 000005B1 D3CD ror ebp, cl 684 685 .without_crc@@@@@: 686 000005B3 894328 mov [ebx+28h], eax ; [ebx+$mp3gr_scfsi] 687 000005B6 81C3A0090000 add ebx, 2464 ; $mp3gr_entrysiz 688 000005BC 4A dec edx 689 000005BD 75C5 jnz short .pre_channel_lop 690 691 .pre_lsf_done: 692 000005BF A1[C0F40000] mov eax, [mp3_nb_granules] 693 000005C4 6BC012 imul eax, 12h 694 000005C7 A3[E49D0000] mov [mp3_nb_frames], eax 695 000005CC A1[E49D0000] mov eax, [mp3_nb_frames] 696 000005D1 0FAF05[D09D0000] imul eax, [mp3_output_num_channels] 697 000005D8 0FAF05[D89D0000] imul eax, [mp3_bytes_per_sample] 698 000005DF C1E005 shl eax, 5 699 000005E2 8A0D[4F760000] mov cl, [option_rate_shift] 700 000005E8 D3E8 shr eax, cl 701 000005EA A3[98F40000] mov [mp3_samples_output_size], eax 702 000005EF F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_read_header_extra 703 000005F6 740E jz short .no_rdtsc_supported@ 704 000005F8 0F31 rdtsc 705 000005FA 0105[7C760000] add [rdtsc_read_header_extra], eax 706 00000600 1115[80760000] adc [rdtsc_read_header_extra+4], edx 707 708 .no_rdtsc_supported@: 709 00000606 C3 retn 710 711 712 ; =============== S U B R O U T I N E ======================================= 713 714 715 mp3_bitstream_read_granules: 716 00000607 F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_read_granule 717 0000060E 740E jz short .no_rdtsc_supported 718 00000610 0F31 rdtsc 719 00000612 2905[94760000] sub [rdtsc_read_granule], eax 720 00000618 1915[98760000] sbb [rdtsc_read_granule+4], edx 721 722 .no_rdtsc_supported: 723 0000061E 8925[B81F0500] mov [_@@saved_sp], esp 724 00000624 C705[BC1F0500]0000- mov dword [mp3_main_data_siz], 0 724 0000062C 0000 725 0000062E C705[A4F40000]0000- mov dword [mp3_curr_granule], 0 725 00000636 0000 726 00000638 BB[C4F40000] mov ebx, mp3_granules 727 728 .hdr_granule_lop: 729 0000063D 53 push ebx 730 0000063E C705[A0F40000]0000- mov dword [mp3_curr_channel], 0 730 00000646 0000 731 732 .hdr_channel_lop: 733 00000648 89E8 mov eax, ebp ; mp3mac_get_n_bits 12 734 0000064A C1E50C shl ebp, 12 735 0000064D C1C00C rol eax, 12 736 00000650 31E8 xor eax, ebp 737 00000652 80ED0C sub ch, 12 738 00000655 7913 jns short .without_crc 739 00000657 88E9 mov cl, ch 740 00000659 80C510 add ch, 16 741 0000065C D3C5 rol ebp, cl 742 0000065E 668B2E mov bp, [esi] 743 00000661 83C602 add esi, 2 744 00000664 66C1CD08 ror bp, 8 745 00000668 D3CD ror ebp, cl 746 747 .without_crc: 748 0000066A 8B15[BC1F0500] mov edx, [mp3_main_data_siz] 749 00000670 8903 mov [ebx], eax 750 00000672 895304 mov [ebx+4], edx 751 00000675 01D0 add eax, edx 752 00000677 894308 mov [ebx+8], eax 753 0000067A A3[BC1F0500] mov [mp3_main_data_siz], eax 754 0000067F 89E8 mov eax, ebp ; mp3mac_get_n_bits 9 755 00000681 C1E509 shl ebp, 9 756 00000684 C1C009 rol eax, 9 757 00000687 31E8 xor eax, ebp 758 00000689 80ED09 sub ch, 9 759 0000068C 7913 jns short .without_crc@ 760 0000068E 88E9 mov cl, ch 761 00000690 80C510 add ch, 10h 762 00000693 D3C5 rol ebp, cl 763 00000695 668B2E mov bp, [esi] 764 00000698 83C602 add esi, 2 765 0000069B 66C1CD08 ror bp, 8 766 0000069F D3CD ror ebp, cl 767 768 .without_crc@: 769 000006A1 89430C mov [ebx+12], eax ; [ebx+$mp3gr_big_values] 770 000006A4 89E8 mov eax, ebp ; mp3mac_get_n_bits 8 771 000006A6 C1E508 shl ebp, 8 772 000006A9 C1C008 rol eax, 8 773 000006AC 31E8 xor eax, ebp 774 000006AE 80ED08 sub ch, 8 775 000006B1 7913 jns short .without_crc@@ 776 000006B3 88E9 mov cl, ch 777 000006B5 80C510 add ch, 10h 778 000006B8 D3C5 rol ebp, cl 779 000006BA 668B2E mov bp, [esi] 780 000006BD 83C602 add esi, 2 781 000006C0 66C1CD08 ror bp, 8 782 000006C4 D3CD ror ebp, cl 783 784 .without_crc@@: 785 000006C6 05BE000000 add eax, 190 ; 400-210 786 000006CB 833D[E89D0000]01 cmp dword [mp3_hdr_mode_val], 1 787 000006D2 750F jnz short .not_ms_stereo 788 000006D4 F705[EC9D0000]0200- test dword [mp3_hdr_mode_ext], 2 788 000006DC 0000 789 000006DE 7403 jz short .not_ms_stereo 790 000006E0 83E802 sub eax, 2 791 792 .not_ms_stereo: 793 000006E3 894310 mov [ebx+16], eax ; [ebx+$mp3gr_global_gain] 794 000006E6 8A0D[BCF40000] mov cl, byte [mp3_num_compress_bits] 795 000006EC 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 796 000006EE D3E5 shl ebp, cl 797 000006F0 D3C0 rol eax, cl 798 000006F2 31E8 xor eax, ebp 799 000006F4 28CD sub ch, cl 800 000006F6 7913 jns short .without_crc@@@ 801 000006F8 88E9 mov cl, ch 802 000006FA 80C510 add ch, 10h 803 000006FD D3C5 rol ebp, cl 804 000006FF 668B2E mov bp, [esi] 805 00000702 83C602 add esi, 2 806 00000705 66C1CD08 ror bp, 8 807 00000709 D3CD ror ebp, cl 808 809 .without_crc@@@: 810 0000070B 894314 mov [ebx+20], eax ; [ebx+$mp3gr_scalefac_compress] 811 0000070E FECD dec ch ; mp3mac_get_bit_to_cy 812 ; dec mp3_colNN 813 00000710 D1E5 shl ebp, 1 ; shl mp3_col32,1 ; cy=data 814 00000712 0F834F010000 jnb .no_blocksplit 815 00000718 89E8 mov eax, ebp ; mp3mac_get_n_bits 2 816 0000071A C1E502 shl ebp, 2 817 0000071D C1C002 rol eax, 2 818 00000720 31E8 xor eax, ebp 819 00000722 80ED02 sub ch, 2 820 00000725 7913 jns short .without_crc@@@@ 821 00000727 88E9 mov cl, ch 822 00000729 80C510 add ch, 10h 823 0000072C D3C5 rol ebp, cl 824 0000072E 668B2E mov bp, [esi] 825 00000731 83C602 add esi, 2 826 00000734 66C1CD08 ror bp, 8 827 00000738 D3CD ror ebp, cl 828 829 .without_crc@@@@: 830 0000073A 83F800 cmp eax, 0 831 0000073D 0F847B030000 jz .error 832 00000743 89432C mov [ebx+44], eax ; [ebx+$mp3gr_block_type] 833 00000746 83F802 cmp eax, 2 834 00000749 B812000000 mov eax, 18 ; 36/2 ; region_size (default) 835 0000074E 741C jz short .this_region_size 836 00000750 833D[C49D0000]02 cmp dword [mp3_hdr_sample_rate_index], 2 837 00000757 7613 jbe short .this_region_size 838 00000759 B81B000000 mov eax, 27 ; 54/2 ; region_size 839 0000075E 833D[C49D0000]08 cmp dword [mp3_hdr_sample_rate_index], 8 840 00000765 7505 jnz short .this_region_size 841 00000767 B836000000 mov eax, 54 ; 108/2 ; region_size (for rate=8) 842 843 .this_region_size: 844 0000076C 894350 mov [ebx+80], eax ; [ebx+$mp3gr_region_size+0*4] 845 0000076F C7435420010000 mov dword [ebx+84], 288 ; [ebx+$mp3gr_region_size+1*4],576/2 846 00000776 C7435820010000 mov dword [ebx+88], 288 ; [ebx+$mp3gr_region_size+2*4],576/2 847 0000077D 89E8 mov eax, ebp ; mp3mac_get_n_bits 1 848 0000077F D1E5 shl ebp, 1 849 00000781 D1C0 rol eax, 1 850 00000783 31E8 xor eax, ebp 851 00000785 80ED01 sub ch, 1 852 00000788 7913 jns short .without_crc@@@@@ 853 0000078A 88E9 mov cl, ch 854 0000078C 80C510 add ch, 10h 855 0000078F D3C5 rol ebp, cl 856 00000791 668B2E mov bp, [esi] 857 00000794 83C602 add esi, 2 858 00000797 66C1CD08 ror bp, 8 859 0000079B D3CD ror ebp, cl 860 861 .without_crc@@@@@: 862 0000079D 894330 mov [ebx+48], eax ; [ebx+$mp3gr_switch_point] 863 000007A0 89E8 mov eax, ebp ; IRP nn,0,1 ; only 0..1 for blocksplit 864 000007A2 C1E505 shl ebp, 5 ; mp3mac_get_n_bits 5 865 000007A5 C1C005 rol eax, 5 866 000007A8 31E8 xor eax, ebp 867 000007AA 80ED05 sub ch, 5 868 000007AD 7913 jns short .without_crc@@@@@@ 869 000007AF 88E9 mov cl, ch 870 000007B1 80C510 add ch, 10h 871 000007B4 D3C5 rol ebp, cl 872 000007B6 668B2E mov bp, [esi] 873 000007B9 83C602 add esi, 2 874 000007BC 66C1CD08 ror bp, 8 875 000007C0 D3CD ror ebp, cl 876 877 .without_crc@@@@@@: 878 000007C2 894338 mov [ebx+56], eax ; [ebx+$mp3gr_table_select+nn*4] ; nn=0 879 000007C5 89E8 mov eax, ebp ; mp3mac_get_n_bits 5 880 000007C7 C1E505 shl ebp, 5 881 000007CA C1C005 rol eax, 5 882 000007CD 31E8 xor eax, ebp 883 000007CF 80ED05 sub ch, 5 884 000007D2 7913 jns short .without_crc_@@@@ 885 000007D4 88E9 mov cl, ch 886 000007D6 80C510 add ch, 10h 887 000007D9 D3C5 rol ebp, cl 888 000007DB 668B2E mov bp, [esi] 889 000007DE 83C602 add esi, 2 890 000007E1 66C1CD08 ror bp, 8 891 000007E5 D3CD ror ebp, cl 892 893 .without_crc_@@@@: 894 000007E7 89433C mov [ebx+60], eax ; [ebx+$mp3gr_table_select+nn*4] ; nn=1 895 000007EA 89E8 mov eax, ebp ; mp3mac_get_n_bits 5 896 000007EC C1E503 shl ebp, 3 ; IRP nn,0,1,2 897 000007EF C1C003 rol eax, 3 ; mp3mac_get_n_bits 3 898 000007F2 31E8 xor eax, ebp 899 000007F4 80ED03 sub ch, 3 900 000007F7 7913 jns short .without_crc_@@@@@ 901 000007F9 88E9 mov cl, ch 902 000007FB 80C510 add ch, 10h 903 000007FE D3C5 rol ebp, cl 904 00000800 668B2E mov bp, [esi] 905 00000803 83C602 add esi, 2 906 00000806 66C1CD08 ror bp, 8 907 0000080A D3CD ror ebp, cl 908 909 .without_crc_@@@@@: 910 0000080C C1E003 shl eax, 3 911 0000080F 894344 mov [ebx+68], eax ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=0 912 00000812 89E8 mov eax, ebp 913 00000814 C1E503 shl ebp, 3 914 00000817 C1C003 rol eax, 3 915 0000081A 31E8 xor eax, ebp 916 0000081C 80ED03 sub ch, 3 917 0000081F 7913 jns short .without_crc_@@@@@@ 918 00000821 88E9 mov cl, ch 919 00000823 80C510 add ch, 10h 920 00000826 D3C5 rol ebp, cl 921 00000828 668B2E mov bp, [esi] 922 0000082B 83C602 add esi, 2 923 0000082E 66C1CD08 ror bp, 8 924 00000832 D3CD ror ebp, cl 925 926 .without_crc_@@@@@@: 927 00000834 C1E003 shl eax, 3 928 00000837 894348 mov [ebx+72], eax ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=1 929 0000083A 89E8 mov eax, ebp 930 0000083C C1E503 shl ebp, 3 931 0000083F C1C003 rol eax, 3 932 00000842 31E8 xor eax, ebp 933 00000844 80ED03 sub ch, 3 934 00000847 7913 jns short .without_crc_@@@@@@@ 935 00000849 88E9 mov cl, ch 936 0000084B 80C510 add ch, 10h 937 0000084E D3C5 rol ebp, cl 938 00000850 668B2E mov bp, [esi] 939 00000853 83C602 add esi, 2 940 00000856 66C1CD08 ror bp, 8 941 0000085A D3CD ror ebp, cl 942 943 .without_crc_@@@@@@@: 944 0000085C C1E003 shl eax, 3 945 0000085F 89434C mov [ebx+76], eax ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=2 946 00000862 E910010000 jmp .blocksplit_done 947 948 .no_blocksplit: 949 00000867 C7432C00000000 mov dword [ebx+44], 0 ; [ebx+$mp3gr_block_type] 950 0000086E C7433000000000 mov dword [ebx+48], 0 ; [ebx+$mp3gr_switch_point] 951 00000875 89E8 mov eax, ebp ; IRP nn,0,1,2 ; range 0..2 when non-blocksplit 952 00000877 C1E505 shl ebp, 5 ; mp3mac_get_n_bits 5 953 0000087A C1C005 rol eax, 5 954 0000087D 31E8 xor eax, ebp 955 0000087F 80ED05 sub ch, 5 956 00000882 7913 jns short .@_without_crc 957 00000884 88E9 mov cl, ch 958 00000886 80C510 add ch, 10h 959 00000889 D3C5 rol ebp, cl 960 0000088B 668B2E mov bp, [esi] 961 0000088E 83C602 add esi, 2 962 00000891 66C1CD08 ror bp, 8 963 00000895 D3CD ror ebp, cl 964 965 .@_without_crc: 966 00000897 894338 mov [ebx+56], eax ; [ebx+$mp3gr_table_select+nn*4] ; nn=0 967 0000089A 89E8 mov eax, ebp 968 0000089C C1E505 shl ebp, 5 969 0000089F C1C005 rol eax, 5 970 000008A2 31E8 xor eax, ebp 971 000008A4 80ED05 sub ch, 5 972 000008A7 7913 jns short .@_without_crc_@ 973 000008A9 88E9 mov cl, ch 974 000008AB 80C510 add ch, 10h 975 000008AE D3C5 rol ebp, cl 976 000008B0 668B2E mov bp, [esi] 977 000008B3 83C602 add esi, 2 978 000008B6 66C1CD08 ror bp, 8 979 000008BA D3CD ror ebp, cl 980 981 .@_without_crc_@: 982 000008BC 89433C mov [ebx+60], eax ; [ebx+$mp3gr_table_select+nn*4] ; nn=1 983 000008BF 89E8 mov eax, ebp 984 000008C1 C1E505 shl ebp, 5 985 000008C4 C1C005 rol eax, 5 986 000008C7 31E8 xor eax, ebp 987 000008C9 80ED05 sub ch, 5 988 000008CC 7913 jns short .@_without_crc_@@ 989 000008CE 88E9 mov cl, ch 990 000008D0 80C510 add ch, 10h 991 000008D3 D3C5 rol ebp, cl 992 000008D5 668B2E mov bp, [esi] 993 000008D8 83C602 add esi, 2 994 000008DB 66C1CD08 ror bp, 8 995 000008DF D3CD ror ebp, cl 996 997 .@_without_crc_@@: 998 000008E1 894340 mov [ebx+64], eax ; [ebx+$mp3gr_table_select+nn*4] ; nn=2 999 000008E4 89E8 mov eax, ebp 1000 000008E6 C1E504 shl ebp, 4 1001 000008E9 C1C004 rol eax, 4 1002 000008EC 31E8 xor eax, ebp 1003 000008EE 80ED04 sub ch, 4 1004 000008F1 7913 jns short .@_without_crc@@@ 1005 000008F3 88E9 mov cl, ch 1006 000008F5 80C510 add ch, 10h 1007 000008F8 D3C5 rol ebp, cl 1008 000008FA 668B2E mov bp, [esi] 1009 000008FD 83C602 add esi, 2 1010 00000900 66C1CD08 ror bp, 8 1011 00000904 D3CD ror ebp, cl 1012 1013 .@_without_crc@@@: 1014 00000906 40 inc eax 1015 00000907 A3[B01F0500] mov [_@@region_address0], eax 1016 0000090C 89E8 mov eax, ebp ; mp3mac_get_n_bits 3 1017 0000090E C1E503 shl ebp, 3 1018 00000911 C1C003 rol eax, 3 1019 00000914 31E8 xor eax, ebp 1020 00000916 80ED03 sub ch, 3 1021 00000919 7913 jns short .@_without_crc@@@@ 1022 0000091B 88E9 mov cl, ch 1023 0000091D 80C510 add ch, 10h 1024 00000920 D3C5 rol ebp, cl 1025 00000922 668B2E mov bp, [esi] 1026 00000925 83C602 add esi, 2 1027 00000928 66C1CD08 ror bp, 8 1028 0000092C D3CD ror ebp, cl 1029 1030 .@_without_crc@@@@: 1031 0000092E 40 inc eax 1032 0000092F 0305[B01F0500] add eax, [_@@region_address0] 1033 00000935 A3[B41F0500] mov [_@@region_address1], eax 1034 0000093A A1[C49D0000] mov eax, [mp3_hdr_sample_rate_index] 1035 0000093F C1E005 shl eax, 5 1036 00000942 0305[B01F0500] add eax, [_@@region_address0] 1037 00000948 0FB78400[C4D70100] movzx eax, word [mp3_band_index_long+eax*2] 1038 00000950 D1E8 shr eax, 1 1039 00000952 894350 mov [ebx+80], eax ; [ebx+$mp3gr_region_size+0*4] 1040 00000955 A1[C49D0000] mov eax, [mp3_hdr_sample_rate_index] 1041 0000095A C1E005 shl eax, 5 1042 0000095D 0305[B41F0500] add eax, [_@@region_address1] 1043 00000963 0FB78400[C4D70100] movzx eax, word [mp3_band_index_long+eax*2] 1044 0000096B D1E8 shr eax, 1 1045 0000096D 894354 mov [ebx+84], eax ; [ebx+$mp3gr_region_size+1*4] 1046 00000970 C7435820010000 mov dword [ebx+88], 288 ; [ebx+$mp3gr_region_size+2*4],576/2 1047 1048 .blocksplit_done: 1049 00000977 8D7B50 lea edi, [ebx+80] ; [ebx+$mp3gr_region_size+0] 1050 0000097A 31D2 xor edx, edx 1051 0000097C B103 mov cl, 3 1052 1053 .trunc_region_size_lop: 1054 0000097E 8B07 mov eax, [edi] 1055 00000980 3B430C cmp eax, [ebx+12] ; [ebx+$mp3gr_big_values] 1056 00000983 7603 jbe short .trunc_region_size_this 1057 00000985 8B430C mov eax, [ebx+12] 1058 1059 .trunc_region_size_this: 1060 00000988 29D0 sub eax, edx 1061 0000098A 8907 mov [edi], eax 1062 0000098C 01C2 add edx, eax 1063 0000098E 83C704 add edi, 4 1064 00000991 FEC9 dec cl 1065 00000993 75E9 jnz short .trunc_region_size_lop 1066 00000995 C7431C0D000000 mov dword [ebx+28], 13 ; [ebx+$mp3gr_short_start] 1067 0000099C C7432016000000 mov dword [ebx+32], 22 ; [ebx+$mp3gr_long_end] 1068 000009A3 837B2C02 cmp dword [ebx+44], 2 ; [ebx+$mp3gr_block_type] 1069 000009A7 7549 jnz short .these_band_indices 1070 000009A9 C7431C00000000 mov dword [ebx+28], 0 ; [ebx+$mp3gr_short_start] 1071 000009B0 C7432000000000 mov dword [ebx+32], 0 ; [ebx+$mp3gr_long_end] 1072 000009B7 837B3000 cmp dword [ebx+48], 0 ; [ebx+$mp3gr_switch_point] 1073 000009BB 7435 jz short .these_band_indices 1074 000009BD C7431C02000000 mov dword [ebx+28], 2 ; [ebx+$mp3gr_short_start] 1075 000009C4 C7432004000000 mov dword [ebx+32], 4 ; [ebx+$mp3gr_long_end] 1076 000009CB 833D[C49D0000]08 cmp dword [mp3_hdr_sample_rate_index], 8 1077 000009D2 741E jz short .these_band_indices 1078 000009D4 833D[C49D0000]02 cmp dword [mp3_hdr_sample_rate_index], 2 1079 000009DB C7431C03000000 mov dword [ebx+28], 3 ; [ebx+$mp3gr_short_start] 1080 000009E2 C7432008000000 mov dword [ebx+32], 8 ; [ebx+$mp3gr_long_end] 1081 000009E9 7607 jbe short .these_band_indices 1082 000009EB C7432006000000 mov dword [ebx+32], 6 ; [ebx+$mp3gr_long_end] 1083 1084 .these_band_indices: 1085 000009F2 31C0 xor eax, eax 1086 000009F4 833D[F09D0000]00 cmp dword [mp3_hdr_flag_lsf], 0 1087 000009FB 7520 jnz short .no_preflag 1088 000009FD 89E8 mov eax, ebp ; mp3mac_get_n_bits 1 1089 000009FF D1E5 shl ebp, 1 1090 00000A01 D1C0 rol eax, 1 1091 00000A03 31E8 xor eax, ebp 1092 00000A05 80ED01 sub ch, 1 1093 00000A08 7913 jns short .no_preflag 1094 00000A0A 88E9 mov cl, ch 1095 00000A0C 80C510 add ch, 10h 1096 00000A0F D3C5 rol ebp, cl 1097 00000A11 668B2E mov bp, [esi] 1098 00000A14 83C602 add esi, 2 1099 00000A17 66C1CD08 ror bp, 8 1100 00000A1B D3CD ror ebp, cl 1101 1102 .no_preflag: 1103 00000A1D 894318 mov [ebx+24], eax ; [ebx+$mp3gr_preflag] 1104 00000A20 89E8 mov eax, ebp ; mp3mac_get_n_bits 1 1105 00000A22 D1E5 shl ebp, 1 1106 00000A24 D1C0 rol eax, 1 1107 00000A26 31E8 xor eax, ebp 1108 00000A28 80ED01 sub ch, 1 1109 00000A2B 7913 jns short .@_without_crc@@@@@ 1110 00000A2D 88E9 mov cl, ch 1111 00000A2F 80C510 add ch, 10h 1112 00000A32 D3C5 rol ebp, cl 1113 00000A34 668B2E mov bp, [esi] 1114 00000A37 83C602 add esi, 2 1115 00000A3A 66C1CD08 ror bp, 8 1116 00000A3E D3CD ror ebp, cl 1117 1118 .@_without_crc@@@@@: 1119 00000A40 40 inc eax 1120 00000A41 894334 mov [ebx+52], eax ; [ebx+$mp3gr_scalefac_scale] 1121 00000A44 89E8 mov eax, ebp ; mp3mac_get_n_bits 1 1122 00000A46 D1E5 shl ebp, 1 1123 00000A48 D1C0 rol eax, 1 1124 00000A4A 31E8 xor eax, ebp 1125 00000A4C 80ED01 sub ch, 1 1126 00000A4F 7913 jns short .@_without_crc@@@@@@ 1127 00000A51 88E9 mov cl, ch 1128 00000A53 80C510 add ch, 10h 1129 00000A56 D3C5 rol ebp, cl 1130 00000A58 668B2E mov bp, [esi] 1131 00000A5B 83C602 add esi, 2 1132 00000A5E 66C1CD08 ror bp, 8 1133 00000A62 D3CD ror ebp, cl 1134 1135 .@_without_crc@@@@@@: 1136 00000A64 83C010 add eax, 10h ; table 10h..11h (quad_vlc) 1137 00000A67 894324 mov [ebx+36], eax ; [ebx+$mp3gr_count1table_select] 1138 00000A6A 81C340130000 add ebx, 4928 ; $mp3gr_entrysiz*2 1139 00000A70 FF05[A0F40000] inc dword [mp3_curr_channel] 1140 00000A76 A1[A0F40000] mov eax, [mp3_curr_channel] 1141 00000A7B 3B05[CC9D0000] cmp eax, [mp3_src_num_channels] 1142 00000A81 0F82C1FBFFFF jb .hdr_channel_lop 1143 00000A87 5B pop ebx 1144 00000A88 81C3A0090000 add ebx, 2464 ; $mp3gr_entrysiz 1145 00000A8E FF05[A4F40000] inc dword [mp3_curr_granule] 1146 00000A94 A1[A4F40000] mov eax, [mp3_curr_granule] 1147 00000A99 3B05[C0F40000] cmp eax, [mp3_nb_granules] 1148 00000A9F 0F8298FBFFFF jb .hdr_granule_lop 1149 00000AA5 F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_read_granule 1150 00000AAC 740E jz short .no_rdtsc_supported@ 1151 00000AAE 0F31 rdtsc 1152 00000AB0 0105[94760000] add [rdtsc_read_granule], eax 1153 00000AB6 1115[98760000] adc [rdtsc_read_granule+4], edx 1154 1155 .no_rdtsc_supported@: 1156 00000ABC F8 clc 1157 00000ABD C3 retn 1158 1159 .error: 1160 00000ABE F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_read_granule 1161 00000AC5 740E jz short .no_rdtsc_supported@@ 1162 00000AC7 0F31 rdtsc 1163 00000AC9 0105[94760000] add [rdtsc_read_granule], eax 1164 00000ACF 1115[98760000] adc [rdtsc_read_granule+4], edx 1165 1166 .no_rdtsc_supported@@: 1167 00000AD5 8B25[B81F0500] mov esp, [_@@saved_sp] 1168 00000ADB F9 stc 1169 00000ADC C3 retn 1170 1171 1172 ; =============== S U B R O U T I N E ======================================= 1173 1174 1175 mp3_bitstream_append_to_main_data_pool: 1176 00000ADD F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_append_main 1177 00000AE4 740E jz short .no_rdtsc_supported 1178 00000AE6 0F31 rdtsc 1179 00000AE8 2905[AC760000] sub [rdtsc_append_main], eax 1180 00000AEE 1915[B0760000] sbb [rdtsc_append_main+4], edx 1181 1182 .no_rdtsc_supported: 1183 00000AF4 8B0D[AC9D0000] mov ecx, [mp3_src_frame_end] 1184 00000AFA 29F1 sub ecx, esi 1185 00000AFC 0F8266020000 jb fatalunexpected 1186 00000B02 8B3D[A09D0000] mov edi, [main_data_pool_wr_ptr] 1187 00000B08 8D040F lea eax, [edi+ecx] 1188 00000B0B 3D[A09D0000] cmp eax, main_data_pool_wr_ptr 1189 00000B10 7616 jbe short .pool_inrange 1190 00000B12 51 push ecx 1191 00000B13 56 push esi 1192 00000B14 8DB700FEFFFF lea esi, [edi-200h] 1193 00000B1A BF[A08D0000] mov edi, main_data_pool_start 1194 00000B1F B980000000 mov ecx, 128 1195 00000B24 F3A5 rep movsd 1196 00000B26 5E pop esi 1197 00000B27 59 pop ecx 1198 1199 .pool_inrange: 1200 00000B28 89F8 mov eax, edi 1201 00000B2A 2B05[B8F40000] sub eax, [mp3_main_data_begin] 1202 00000B30 F3A4 rep movsb 1203 00000B32 893D[A09D0000] mov [main_data_pool_wr_ptr], edi 1204 00000B38 3D[A08D0000] cmp eax, main_data_pool_start 1205 00000B3D 7828 js short .below_pool_start 1206 00000B3F A3[ACF40000] mov [mp3_bitstream_start], eax 1207 ; 22/10/2024 1208 ;mov eax, 0 1209 00000B44 8B35[ACF40000] mov esi, [mp3_bitstream_start] ; mp3mac_bitstream_set_position 1210 ;mov cl, al 1211 ;shr eax, 3 1212 ;and cl, 7 1213 ;add esi, eax 1214 00000B4A E8C7F6FFFF call mp3_recollect_bits 1215 ;mov eax, ebp ; mp3mac_get_n_bits cl 1216 ;shl ebp, cl 1217 ;rol eax, cl 1218 ;xor eax, ebp 1219 ;sub ch, cl 1220 ;jns short .cont 1221 ;mov cl, ch ; mp3mac_collect_more 1222 ;add ch, 10h 1223 ;rol ebp, cl 1224 ;mov bp, [esi] 1225 ;add esi, 2 1226 ;ror bp, 8 1227 ;ror ebp, cl 1228 1229 .cont: 1230 00000B4F F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_append_main 1231 00000B56 740E jz short .no_rdtsc_supported@ 1232 00000B58 0F31 rdtsc 1233 00000B5A 0105[AC760000] add [rdtsc_append_main], eax 1234 00000B60 1115[B0760000] adc [rdtsc_append_main+4], edx 1235 1236 .no_rdtsc_supported@: 1237 00000B66 C3 retn 1238 1239 .below_pool_start: 1240 00000B67 C705[98F40000]0000- mov dword [mp3_samples_output_size], 0 1240 00000B6F 0000 1241 00000B71 EBDC jmp short .cont 1242 1243 1244 ; =============== S U B R O U T I N E ======================================= 1245 1246 1247 mp3_bitstream_read_scalefacs: 1248 00000B73 F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_read_scalefac 1249 00000B7A 740E jz short .no_rdtsc_supported 1250 00000B7C 0F31 rdtsc 1251 00000B7E 2905[C4760000] sub [rdtsc_read_scalefac], eax 1252 00000B84 1915[C8760000] sbb [rdtsc_read_scalefac+4], edx 1253 1254 .no_rdtsc_supported: 1255 00000B8A 8D7B70 lea edi, [ebx+112] ; [ebx+$mp3gr_scale_factors] 1256 00000B8D 833D[F09D0000]00 cmp dword [mp3_hdr_flag_lsf], 0 1257 00000B94 0F850D010000 jnz .body_lsf_nonzero 1258 00000B9A 8B4314 mov eax, [ebx+20] ; [ebx+$mp3gr_scalefac_compress] 1259 00000B9D 668B9400[A47A0000] mov dx, [mp3_slen_table+eax*2] ; slen[0,1] 1260 00000BA5 837B2C02 cmp dword [ebx+44], 2 ; [ebx+$mp3gr_block_type] 1261 00000BA9 757F jnz short .body_lsf_zero_non_type2 1262 00000BAB 53 push ebx 1263 00000BAC B012 mov al, 18 1264 00000BAE 2A4330 sub al, [ebx+48] ; [ebx+$mp3gr_switch_point] 1265 00000BB1 88C3 mov bl, al ; @@get_bl_scalefacs_with_dl_bits 0 1266 00000BB3 80FA00 cmp dl, 0 1267 00000BB6 7428 jz short .quickfill 1268 1269 .scalefac_get_lop: 1270 00000BB8 88D1 mov cl, dl ; LSB of edx, slen[i] 1271 00000BBA 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 1272 00000BBC D3E5 shl ebp, cl 1273 00000BBE D3C0 rol eax, cl 1274 00000BC0 31E8 xor eax, ebp 1275 00000BC2 28CD sub ch, cl 1276 00000BC4 7913 jns short .cont@ 1277 00000BC6 88E9 mov cl, ch ; mp3mac_collect_more 1278 00000BC8 80C510 add ch, 10h 1279 00000BCB D3C5 rol ebp, cl 1280 00000BCD 668B2E mov bp, [esi] 1281 00000BD0 83C602 add esi, 2 1282 00000BD3 66C1CD08 ror bp, 8 1283 00000BD7 D3CD ror ebp, cl 1284 1285 .cont@: 1286 00000BD9 AA stosb 1287 00000BDA FECB dec bl 1288 00000BDC 75DA jnz short .scalefac_get_lop 1289 00000BDE EB09 jmp short .skip_quickfill 1290 1291 .quickfill: 1292 00000BE0 51 push ecx 1293 00000BE1 0FB6CB movzx ecx, bl 1294 00000BE4 B000 mov al, 0 ; NO_INTENSITY_FLAG 1295 00000BE6 F3AA rep stosb 1296 00000BE8 59 pop ecx 1297 1298 .skip_quickfill: 1299 00000BE9 C1EA08 shr edx, 8 1300 00000BEC B312 mov bl, 18 1301 00000BEE 80FA00 cmp dl, 0 ; @@get_bl_scalefacs_with_dl_bits 0 1302 00000BF1 7428 jz short .quickfill@ 1303 1304 .scalefac_get_lop@: 1305 00000BF3 88D1 mov cl, dl 1306 00000BF5 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 1307 00000BF7 D3E5 shl ebp, cl 1308 00000BF9 D3C0 rol eax, cl 1309 00000BFB 31E8 xor eax, ebp 1310 00000BFD 28CD sub ch, cl 1311 00000BFF 7913 jns short .cont@@ 1312 00000C01 88E9 mov cl, ch ; mp3mac_collect_more 1313 00000C03 80C510 add ch, 10h 1314 00000C06 D3C5 rol ebp, cl 1315 00000C08 668B2E mov bp, [esi] 1316 00000C0B 83C602 add esi, 2 1317 00000C0E 66C1CD08 ror bp, 8 1318 00000C12 D3CD ror ebp, cl 1319 1320 .cont@@: 1321 00000C14 AA stosb 1322 00000C15 FECB dec bl 1323 00000C17 75DA jnz short .scalefac_get_lop@ 1324 00000C19 EB09 jmp short .skip_quickfill@ 1325 1326 .quickfill@: 1327 00000C1B 51 push ecx 1328 00000C1C 0FB6CB movzx ecx, bl 1329 00000C1F B000 mov al, 0 1330 00000C21 F3AA rep stosb 1331 00000C23 59 pop ecx 1332 1333 .skip_quickfill@: 1334 00000C24 5B pop ebx 1335 00000C25 E914010000 jmp .body_lsf_zeropad 1336 1337 .body_lsf_zero_non_type2: 1338 00000C2A 53 push ebx 1339 00000C2B C1CA08 ror edx, 8 1340 00000C2E 88D6 mov dh, dl ; slen[0,1,2,3] = slen[0,0,1,1] 1341 00000C30 C1C210 rol edx, 16 1342 00000C33 88F2 mov dl, dh 1343 00000C35 8A4328 mov al, [ebx+40] ; [ebx+$mp3gr_scfsi] 1344 00000C38 C0E004 shl al, 4 ; move to upper 4bit 1345 00000C3B A2[C01F0500] mov byte [_@@scfsi], al 1346 00000C40 BB06050505 mov ebx, 5050506h ; num[0..3] 1347 1348 .body_lsf_zero_non_type2_lop: 1349 00000C45 D025[C01F0500] shl byte [_@@scfsi], 1 1350 00000C4B 7238 jb short .body_lsf_zero_non_type2_copy 1351 00000C4D 80FA00 cmp dl, 0 ; @@get_bl_scalefacs_with_dl_bits 0 1352 00000C50 7428 jz short .quickfill@@ 1353 1354 .scalefac_get_lop@@: 1355 00000C52 88D1 mov cl, dl 1356 00000C54 89E8 mov eax, ebp 1357 00000C56 D3E5 shl ebp, cl 1358 00000C58 D3C0 rol eax, cl 1359 00000C5A 31E8 xor eax, ebp 1360 00000C5C 28CD sub ch, cl 1361 00000C5E 7913 jns short .cont@@@ 1362 00000C60 88E9 mov cl, ch 1363 00000C62 80C510 add ch, 10h 1364 00000C65 D3C5 rol ebp, cl 1365 00000C67 668B2E mov bp, [esi] 1366 00000C6A 83C602 add esi, 2 1367 00000C6D 66C1CD08 ror bp, 8 1368 00000C71 D3CD ror ebp, cl 1369 1370 .cont@@@: 1371 00000C73 AA stosb 1372 00000C74 FECB dec bl 1373 00000C76 75DA jnz short .scalefac_get_lop@@ 1374 00000C78 EB09 jmp short .skip_quickfill@@ 1375 1376 .quickfill@@: 1377 00000C7A 51 push ecx 1378 00000C7B 0FB6CB movzx ecx, bl 1379 00000C7E B000 mov al, 0 1380 00000C80 F3AA rep stosb 1381 00000C82 59 pop ecx 1382 1383 .skip_quickfill@@: 1384 00000C83 EB11 jmp short .body_lsf_zero_non_type2_next 1385 1386 .body_lsf_zero_non_type2_copy: 1387 00000C85 51 push ecx 1388 00000C86 89F0 mov eax, esi 1389 00000C88 0FB6CB movzx ecx, bl ; copy 1390 00000C8B 8DB760F6FFFF lea esi, [edi-2464] ; [edi-$mp3gr_entrysiz] ; src=granule[0] ; from 1391 00000C91 F3A4 rep movsb ; prev 1392 00000C93 89C6 mov esi, eax 1393 00000C95 59 pop ecx 1394 1395 .body_lsf_zero_non_type2_next: 1396 00000C96 C1EA08 shr edx, 8 ; dl=next slen 1397 00000C99 C1EB08 shr ebx, 8 ; bl=next numfacs 1398 00000C9C 75A7 jnz short .body_lsf_zero_non_type2_lop 1399 00000C9E 5B pop ebx 1400 00000C9F B000 mov al, 0 1401 00000CA1 AA stosb 1402 00000CA2 E9A9000000 jmp .body_lsf_done 1403 1404 .body_lsf_nonzero: 1405 00000CA7 8B5314 mov edx, [ebx+14h] ; [ebx+$mp3gr_scalefac_compress] 1406 00000CAA F705[EC9D0000]0100- test dword [mp3_hdr_mode_ext], 1 ; MODE_EXT_I_STEREO 1406 00000CB2 0000 1407 00000CB4 740F jz short .normal_scalefac 1408 00000CB6 833D[A0F40000]00 cmp dword [mp3_curr_channel], 0 1409 00000CBD 7406 jz short .normal_scalefac 1410 00000CBF 81C200020000 add edx, 512 ; for 2nd channel of intensity_stereo 1411 1412 .normal_scalefac: 1413 00000CC5 8A04D5[B5FF0400] mov al, [(mp3_lsf_sf_expand_exploded_table+5)+edx*8] 1414 00000CCC 084318 or [ebx+24], al ; [ebx+$mp3gr_preflag] 1415 00000CCF 53 push ebx 1416 00000CD0 0FB604D5[B4FF0400] movzx eax, byte [(mp3_lsf_sf_expand_exploded_table+4)+edx*8] 1417 00000CD8 837B2C02 cmp dword [ebx+44], 2 ; [ebx+$mp3gr_block_type] 1418 00000CDC 7507 jnz short .this_tindex1 1419 00000CDE 8B5B30 mov ebx, [ebx+48] ; [ebx+$mp3gr_switch_point] 1420 00000CE1 8D449804 lea eax, [eax+ebx*4+4] 1421 1422 .this_tindex1: 1423 00000CE5 8B98[C47A0000] mov ebx, [mp3_lsf_nsf_table+eax] 1424 00000CEB 8B14D5[B0FF0400] mov edx, dword [mp3_lsf_sf_expand_exploded_table+edx*8] 1425 1426 .scalefax_outer_lop: 1427 00000CF2 80FA00 cmp dl, 0 ; @@get_bl_scalefacs_with_dl_bits 1 1428 00000CF5 7435 jz short .@quickfil 1429 1430 .@scalefac_get_lop: 1431 00000CF7 88D1 mov cl, dl 1432 00000CF9 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 1433 00000CFB D3E5 shl ebp, cl 1434 00000CFD D3C0 rol eax, cl 1435 00000CFF 31E8 xor eax, ebp 1436 00000D01 28CD sub ch, cl 1437 00000D03 7913 jns short .cont 1438 00000D05 88E9 mov cl, ch 1439 00000D07 80C510 add ch, 10h 1440 00000D0A D3C5 rol ebp, cl 1441 00000D0C 668B2E mov bp, [esi] 1442 00000D0F 83C602 add esi, 2 1443 00000D12 66C1CD08 ror bp, 8 1444 00000D16 D3CD ror ebp, cl 1445 1446 .cont: 1447 00000D18 88D1 mov cl, dl ; numbits 1448 00000D1A 88C4 mov ah, al 1449 00000D1C FEC4 inc ah ; val+1 1450 00000D1E D2EC shr ah, cl ; bit0=is.max.value 1451 00000D20 C0E407 shl ah, 7 ; bit7=is.max.value 1452 00000D23 08E0 or al, ah ; apply NO_INTENSITY_FLAG 1453 00000D25 AA stosb 1454 00000D26 FECB dec bl 1455 00000D28 75CD jnz short .@scalefac_get_lop 1456 00000D2A EB09 jmp short .@skip_quickfill 1457 1458 .@quickfil: 1459 00000D2C 51 push ecx 1460 00000D2D 0FB6CB movzx ecx, bl 1461 00000D30 B080 mov al, 80h 1462 00000D32 F3AA rep stosb 1463 00000D34 59 pop ecx 1464 1465 .@skip_quickfill: 1466 00000D35 C1EA08 shr edx, 8 1467 00000D38 C1EB08 shr ebx, 8 1468 00000D3B 75B5 jnz short .scalefax_outer_lop 1469 00000D3D 5B pop ebx 1470 1471 .body_lsf_zeropad: 1472 00000D3E 89CA mov edx, ecx 1473 00000D40 8D8B98000000 lea ecx, [ebx+152] ; [ebx+$mp3gr_scale_factors+40] 1474 00000D46 29F9 sub ecx, edi 1475 ;jb short fatal_scalefactors 1476 ; 21/10/2024 1477 00000D48 721E jb short fatalunexpected 1478 00000D4A B000 mov al, 0 1479 00000D4C F3AA rep stosb 1480 00000D4E 89D1 mov ecx, edx 1481 1482 .body_lsf_done: 1483 00000D50 F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_read_scalefac 1484 00000D57 740E jz short .no_rdtsc_supported@@@ 1485 00000D59 0F31 rdtsc 1486 00000D5B 0105[C4760000] add [rdtsc_read_scalefac], eax 1487 00000D61 1115[C8760000] adc [rdtsc_read_scalefac+4], edx 1488 1489 .no_rdtsc_supported@@@: 1490 00000D67 C3 retn 1491 1492 ; 21/10/2024 1493 ;fatal_scalefactors: 1494 ;jmp fatalunexpected 1495 1496 ; --------------------------------------------------------------------------- 1497 1498 ; 21/10/2024 1499 fatalunexpected: 1500 00000D68 F735[30850000] div dword [zero] 1501 hang: 1502 00000D6E EBFE jmp short hang 1503 1504 1505 ; =============== S U B R O U T I N E ======================================= 1506 1507 1508 mp3_get_exponents_from_scale_factors: 1509 00000D70 F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_xlat_scalefac 1510 00000D77 740E jz short .no_rdtsc_supported 1511 00000D79 0F31 rdtsc 1512 00000D7B 2905[DC760000] sub [rdtsc_xlat_scalefac], eax 1513 00000D81 1915[E0760000] sbb [rdtsc_xlat_scalefac+4], edx 1514 1515 .no_rdtsc_supported: 1516 00000D87 51 push ecx ; mp3mac_push_bitstream 1517 00000D88 55 push ebp 1518 00000D89 56 push esi 1519 00000D8A C705[D01F0500]0000- mov dword [_@@rle_point], 0 1519 00000D92 0000 1520 00000D94 8A4B34 mov cl, [ebx+52] ; [ebx+$mp3gr_scalefac_scale] 1521 00000D97 BF[441B0100] mov edi, mp3_exponents 1522 00000D9C 31D2 xor edx, edx 1523 00000D9E 3B5320 cmp edx, [ebx+32] ; [ebx+$mp3gr_long_end] 1524 00000DA1 7345 jnb short .long_done 1525 00000DA3 A1[C49D0000] mov eax, [mp3_hdr_sample_rate_index] 1526 00000DA8 6BC016 imul eax, 22 1527 00000DAB 8DA8[D4800000] lea ebp, [mp3_band_size_long+eax] 1528 00000DB1 8B4318 mov eax, [ebx+24] ; [ebx+$mp3gr_preflag] 1529 00000DB4 6BC016 imul eax, 22 1530 00000DB7 8DB0[24820000] lea esi, [mp3_pretab+eax] 1531 1532 .long_lop: 1533 00000DBD 0FB6441370 movzx eax, byte [ebx+edx+112] ; [ebx+$mp3gr_scale_factors+edx] 1534 00000DC2 247F and al, 7Fh ; strip NO_INTENSITY_FLAG 1535 00000DC4 020416 add al, [esi+edx] 1536 00000DC7 D3E0 shl eax, cl 1537 00000DC9 F7D8 neg eax 1538 00000DCB 034310 add eax, [ebx+16] ; [ebx+$mp3gr_global_gain] 1539 00000DCE C1E010 shl eax, 16 1540 00000DD1 8A441500 mov al, [ebp+edx+0] 1541 00000DD5 0305[D01F0500] add eax, [_@@rle_point] 1542 00000DDB 66A3[D01F0500] mov word [_@@rle_point], ax 1543 00000DE1 AB stosd 1544 00000DE2 42 inc edx 1545 00000DE3 3B5320 cmp edx, [ebx+32] ; [ebx+$mp3gr_long_end] 1546 00000DE6 72D5 jb short .long_lop 1547 1548 .long_done: 1549 00000DE8 8B531C mov edx, [ebx+28] ; [ebx+$mp3gr_short_start] 1550 00000DEB 83FA0D cmp edx, 13 1551 00000DEE 0F83AA000000 jnb .skip_shorts 1552 00000DF4 A1[C49D0000] mov eax, [mp3_hdr_sample_rate_index] 1553 00000DF9 6BC00D imul eax, 13 1554 00000DFC 8DA8[A4810000] lea ebp, [mp3_band_size_short+eax] 1555 00000E02 8B7320 mov esi, [ebx+32] ; [ebx+$mp3gr_long_end] 1556 00000E05 8B4310 mov eax, [ebx+16] ; [ebx+$mp3gr_global_gain] 1557 ; IRP nn,0,1,2 1558 00000E08 2B4344 sub eax, [ebx+68] ; [ebx+$mp3gr_subblock_gain+nn*4] 1559 00000E0B A3[C41F0500] mov [_@@gains], eax ; [@@gains+nn*4] 1560 00000E10 8B4310 mov eax, [ebx+16] 1561 00000E13 2B4348 sub eax, [ebx+72] 1562 00000E16 A3[C81F0500] mov [_@@gains+4], eax ; [@@gains+nn*4] 1563 00000E1B 8B4310 mov eax, [ebx+16] 1564 00000E1E 2B434C sub eax, [ebx+76] ; [ebx+$mp3gr_subblock_gain+nn*4] 1565 00000E21 A3[CC1F0500] mov [_@@gains+8], eax ; [@@gains+nn*4] 1566 1567 .short_lop: 1568 00000E26 0FB6443370 movzx eax, byte [ebx+esi+112] ; [ebx+$mp3gr_scale_factors+esi] 1569 ; IRP nn,0,1,2 1570 00000E2B 247F and al, 7Fh ; strip NO_INTENSITY_FLAG 1571 00000E2D 46 inc esi 1572 00000E2E D3E0 shl eax, cl 1573 00000E30 F7D8 neg eax 1574 00000E32 0305[C41F0500] add eax, [_@@gains] ; [@@gains+nn*4] ; nn=0 1575 00000E38 C1E010 shl eax, 16 1576 00000E3B 8A441500 mov al, [ebp+edx+0] ; bstab[edx] 1577 00000E3F 0305[D01F0500] add eax, [_@@rle_point] 1578 00000E45 66A3[D01F0500] mov word [_@@rle_point], ax 1579 00000E4B AB stosd ; msw=val, lsw=point 1580 00000E4C 0FB6443370 movzx eax, byte [ebx+esi+112] ; [ebx+$mp3gr_scalefac_scale] 1581 00000E51 247F and al, 7Fh 1582 00000E53 46 inc esi 1583 00000E54 D3E0 shl eax, cl 1584 00000E56 F7D8 neg eax 1585 00000E58 0305[C81F0500] add eax, [_@@gains+4] ; [@@gains+nn*4] ; nn = 1 1586 00000E5E C1E010 shl eax, 16 1587 00000E61 8A441500 mov al, [ebp+edx+0] 1588 00000E65 0305[D01F0500] add eax, [_@@rle_point] 1589 00000E6B 66A3[D01F0500] mov word [_@@rle_point], ax 1590 00000E71 AB stosd 1591 00000E72 0FB6443370 movzx eax, byte [ebx+esi+70h] 1592 00000E77 247F and al, 7Fh 1593 00000E79 46 inc esi 1594 00000E7A D3E0 shl eax, cl 1595 00000E7C F7D8 neg eax 1596 00000E7E 0305[CC1F0500] add eax, [_@@gains+8] ; [@@gains+nn*4] ; nn=2 1597 00000E84 C1E010 shl eax, 10h 1598 00000E87 8A441500 mov al, [ebp+edx+0] 1599 00000E8B 0305[D01F0500] add eax, [_@@rle_point] 1600 00000E91 66A3[D01F0500] mov word [_@@rle_point], ax 1601 00000E97 AB stosd 1602 00000E98 42 inc edx 1603 00000E99 83FA0D cmp edx, 13 1604 00000E9C 7288 jb short .short_lop 1605 1606 .skip_shorts: 1607 00000E9E 5E pop esi ; mp3mac_pop_bitstream 1608 00000E9F 5D pop ebp 1609 00000EA0 59 pop ecx 1610 00000EA1 F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_xlat_scalefac 1611 00000EA8 740E jz short .no_rdtsc_supported@ 1612 00000EAA 0F31 rdtsc 1613 00000EAC 0105[DC760000] add [rdtsc_xlat_scalefac], eax 1614 00000EB2 1115[E0760000] adc [rdtsc_xlat_scalefac+4], edx 1615 1616 .no_rdtsc_supported@: 1617 00000EB8 C3 retn 1618 1619 1620 ; =============== S U B R O U T I N E ======================================= 1621 1622 1623 mp3_huffman_decode: 1624 00000EB9 F605[54760000]10 test byte [cpuid_flags], 10h ; in: ebx=granule, out: [sb_hybrid..] 1625 ; timelog_start rdtsc_read_huffman 1626 00000EC0 740E jz short .no_rdtsc_supported 1627 00000EC2 0F31 rdtsc 1628 00000EC4 2905[F4760000] sub [rdtsc_read_huffman], eax 1629 00000ECA 1915[F8760000] sbb [rdtsc_read_huffman+4], edx 1630 1631 .no_rdtsc_supported: 1632 00000ED0 8B4308 mov eax, [ebx+8] ; [ebx+$mp3gr_part2_3_end] 1633 00000ED3 C1E803 shr eax, 3 1634 00000ED6 0305[ACF40000] add eax, [mp3_bitstream_start] 1635 00000EDC A3[E41F0500] mov [_@@coarse_end], eax 1636 00000EE1 31FF xor edi, edi 1637 00000EE3 C705[EC1F0500]- mov dword [_@@rle_ptr], mp3_exponents 1637 00000EE9 [441B0100] 1638 00000EED C705[E81F0500]0000- mov dword [_@rle_point], 0 1638 00000EF5 0000 1639 00000EF7 C705[D41F0500]0000- mov dword [_@@III], 0 ; i=0 1639 00000EFF 0000 1640 1641 .low_freq_lop_i: 1642 00000F01 8B15[D41F0500] mov edx, [_@@III] ; for i=0 to 2 1643 ; low frequencies (called big_values)... 1644 00000F07 8B449350 mov eax, [ebx+edx*4+80] ; [ebx+$mp3gr_region_size+edx*4] 1645 00000F0B 83F800 cmp eax, 0 1646 00000F0E 0F84D9020000 jz .low_freq_next_i 1647 00000F14 A3[D81F0500] mov [_@@JJJ], eax 1648 00000F19 8B549338 mov edx, [ebx+edx*4+56] ; [ebx+$mp3gr_table_select+edx*4] 1649 ; select vlc table 1650 00000F1D 0FB68412[94800000] movzx eax, byte [mp3_huff_data+edx*2] ; get huff.table number 1651 00000F25 83F800 cmp eax, 0 ; huff.table 1652 00000F28 7528 jnz short .low_freq_nonzero 1653 00000F2A 51 push ecx 1654 00000F2B 57 push edi 1655 00000F2C 8DBCBBA0000000 lea edi, [ebx+edi*4+160] ; [ebx+$mp3gr_sb_hybrid+edi*4] 1656 00000F33 8B0D[D81F0500] mov ecx, [_@@JJJ] 1657 00000F39 D1E1 shl ecx, 1 1658 00000F3B 31C0 xor eax, eax ; when huff.table=0, 1659 ; simply set NUM*2 entries to zero 1660 00000F3D F3AB rep stosd 1661 00000F3F 5F pop edi 1662 00000F40 59 pop ecx 1663 00000F41 033D[D81F0500] add edi, [_@@JJJ] ; raise index accordingly (by num*2) 1664 00000F47 033D[D81F0500] add edi, [_@@JJJ] 1665 00000F4D E99B020000 jmp .low_freq_next_i 1666 1667 .low_freq_nonzero: 1668 00000F52 A3[E01F0500] mov [_@@vlc_table], eax ; =1..15 1669 00000F57 83F80E cmp eax, 14 ; only table 14..15 have linbits 1670 00000F5A 0F83FA000000 jnb .with_linbits ; so table 0..13 can use faster code... 1671 1672 .low_freq_lop_j_small: 1673 00000F60 3B35[E41F0500] cmp esi, [_@@coarse_end] ; loop @@JJJ times.. 1674 00000F66 0F87CF000000 ja .small_near_end 1675 1676 .small_not_end: 1677 00000F6C 3B3D[E81F0500] cmp edi, [_@rle_point] ; @@get_runlength small 1678 00000F72 0F839E030000 jnb .rle_fetch_next_small 1679 1680 .rle_back_small: 1681 00000F78 8B15[E01F0500] mov edx, [_@@vlc_table] ; get huffcode 1682 1683 .get_child_lop: 1684 00000F7E 8A0C95[C61F0100] mov cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode 1685 ; in: edx=table, out: eax=data 1686 ; bits (table size) (-7..-1) 1687 00000F85 668B1495[C41F0100] mov dx, word [huff_tree_buf+edx*4] ; code (child table) 1688 00000F8D 89E8 mov eax, ebp ; mov eax,mp3_col32 ; peek bitstream 1689 00000F8F D3E8 shr eax, cl 1690 00000F91 01C2 add edx, eax 1691 00000F93 8A0C95[C61F0100] mov cl, [(huff_tree_buf+2)+edx*4] ; bits (of entry) 1692 00000F9A 80F900 cmp cl, 0 1693 00000F9D 7823 js short .got_child 1694 00000F9F 0FB70495[C41F0100] movzx eax, word [huff_tree_buf+edx*4] ; return data value 1695 00000FA7 D3E5 shl ebp, cl ; shl mp3_col32,cl ; discard cl bits 1696 00000FA9 28CD sub ch, cl ; sub mp3_colNN,cl 1697 00000FAB 7932 jns short .got_done 1698 00000FAD 88E9 mov cl, ch ; mp3mac_collect_more 1699 ; mov cl,mp3_colNN ; byte ptr [mp3_numbits_collected] 1700 00000FAF 80C510 add ch, 16 ; byte ptr [mp3_numbits_collected] 1701 00000FB2 D3C5 rol ebp, cl ; dword ptr [mp3_collected_data] 1702 00000FB4 668B2E mov bp, [esi] 1703 00000FB7 83C602 add esi, 2 1704 00000FBA 66C1CD08 ror bp, 8 ; ror mp3_col16,8 ; endianess 1705 00000FBE D3CD ror ebp, cl ; ror mp3_col32,cl ; dword ptr [mp3_collected_data] 1706 00000FC0 EB1D jmp short .got_done 1707 1708 .got_child: 1709 00000FC2 C1E509 shl ebp, 9 ; shl mp3_col32,CHILD_BITS 1710 ; discard 7 bits 1711 ; (assuming that parents are always 7bit wide) 1712 00000FC5 80ED09 sub ch, 9 1713 00000FC8 79B4 jns short .get_child_lop 1714 00000FCA 88E9 mov cl, ch ; mp3mac_collect_more 1715 00000FCC 80C510 add ch, 10h 1716 00000FCF D3C5 rol ebp, cl 1717 00000FD1 668B2E mov bp, [esi] 1718 00000FD4 83C602 add esi, 2 1719 00000FD7 66C1CD08 ror bp, 8 1720 00000FDB D3CD ror ebp, cl 1721 00000FDD EB9F jmp short .get_child_lop 1722 1723 .got_done: 1724 00000FDF 50 push eax 1725 00000FE0 C1E804 shr eax, 4 ; x 1726 00000FE3 7417 jz short .this_sign ; @@getexpval 0 ; @@getexpval macro has_linbits 1727 ; eax=0 (without sign) ; when x=0 1728 00000FE5 8B15[F41F0500] mov edx, [_@@rle_val_x_40h] 1729 00000FEB 8B8482[30630400] mov eax, [mp3_expval_table+edx+eax*4] 1730 00000FF2 FECD dec ch ; mp3mac_get_bit_to_cy 1731 ; ;jnc short @@this_sign 1732 ; ;neg eax 1733 00000FF4 D1E5 shl ebp, 1 ; dec mp3_colNN ; shl mp3_col32,1 ; cy=data 1734 00000FF6 19D2 sbb edx, edx ; cy=0,1 --> 0,FFFFFFFF 1735 00000FF8 31D0 xor eax, edx ; invert if cy was 1 ; get sign (negate if sign=1) 1736 00000FFA 29D0 sub eax, edx ; add 1 if cy was 1 1737 1738 .this_sign: 1739 00000FFC 8984BBA0000000 mov [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0] 1740 00001003 58 pop eax 1741 00001004 83E00F and eax, 0Fh ; y 1742 00001007 7417 jz short .this_sign@ ; @@getexpval 0 1743 00001009 8B15[F41F0500] mov edx, [_@@rle_val_x_40h] 1744 0000100F 8B8482[30630400] mov eax, [mp3_expval_table+edx+eax*4] 1745 00001016 FECD dec ch 1746 00001018 D1E5 shl ebp, 1 1747 0000101A 19D2 sbb edx, edx 1748 0000101C 31D0 xor eax, edx 1749 0000101E 29D0 sub eax, edx 1750 1751 .this_sign@: 1752 00001020 8984BBA4000000 mov [ebx+edi*4+164], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+4] 1753 00001027 83C702 add edi, 2 1754 0000102A FF0D[D81F0500] dec dword [_@@JJJ] 1755 00001030 0F852AFFFFFF jnz .low_freq_lop_j_small 1756 00001036 E9B2010000 jmp .low_freq_next_i 1757 1758 .small_near_end: 1759 0000103B 89F0 mov eax, esi ; mp3mac_bitstream_get_position 1760 0000103D 2B05[ACF40000] sub eax, [mp3_bitstream_start] 1761 00001043 0FBED5 movsx edx, ch ; mp3_colNN 1762 00001046 F7DA neg edx 1763 00001048 8D44C2F0 lea eax, [edx+eax*8-16] 1764 0000104C 3B4308 cmp eax, [ebx+8] ; [ebx+$mp3gr_part2_3_end] 1765 0000104F 0F8217FFFFFF jb .small_not_end 1766 00001055 E993010000 jmp .low_freq_next_i 1767 1768 .with_linbits: 1769 0000105A 0FB68412[95800000] movzx eax, byte [(mp3_huff_data+1)+edx*2] 1770 00001062 A3[DC1F0500] mov [_@@linbits], eax 1771 1772 .low_freq_lop_j: 1773 00001067 3B35[E41F0500] cmp esi, [_@@coarse_end] ; mp3mac_bitstream_get_position 1774 ; loop @@JJJ times... 1775 0000106D 0F8725030000 ja .lop_j_near_end 1776 1777 .small_not_end@: 1778 00001073 3B3D[E81F0500] cmp edi, [_@rle_point] ; @@get_runlength small 1779 00001079 0F83C5020000 jnb .rle_fetch_next_full 1780 1781 .rle_back_full: 1782 0000107F 8B15[E01F0500] mov edx, [_@@vlc_table] ; get huffcode 1783 1784 .get_child_lop@: 1785 00001085 8A0C95[C61F0100] mov cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode 1786 ; in: edx=table, out: eax=data 1787 ; bits (table size) (-7..-1) 1788 0000108C 668B1495[C41F0100] mov dx, word [huff_tree_buf+edx*4] ; code (child table) 1789 00001094 89E8 mov eax, ebp 1790 00001096 D3E8 shr eax, cl 1791 00001098 01C2 add edx, eax 1792 0000109A 8A0C95[C61F0100] mov cl, [(huff_tree_buf+2)+edx*4] ; bits (of entry) 1793 000010A1 80F900 cmp cl, 0 1794 000010A4 7823 js short .got_child@ 1795 000010A6 0FB70495[C41F0100] movzx eax, word [huff_tree_buf+edx*4] ; return data value 1796 000010AE D3E5 shl ebp, cl ; discard cl bits 1797 000010B0 28CD sub ch, cl 1798 000010B2 7932 jns short .got_done@ 1799 000010B4 88E9 mov cl, ch ; mp3mac_collect_more 1800 000010B6 80C510 add ch, 10h 1801 000010B9 D3C5 rol ebp, cl 1802 000010BB 668B2E mov bp, [esi] 1803 000010BE 83C602 add esi, 2 1804 000010C1 66C1CD08 ror bp, 8 1805 000010C5 D3CD ror ebp, cl 1806 000010C7 EB1D jmp short .got_done@ 1807 1808 .got_child@: 1809 000010C9 C1E509 shl ebp, 9 1810 000010CC 80ED09 sub ch, 9 1811 000010CF 79B4 jns short .get_child_lop@ 1812 000010D1 88E9 mov cl, ch 1813 000010D3 80C510 add ch, 10h 1814 000010D6 D3C5 rol ebp, cl 1815 000010D8 668B2E mov bp, [esi] 1816 000010DB 83C602 add esi, 2 1817 000010DE 66C1CD08 ror bp, 8 1818 000010E2 D3CD ror ebp, cl 1819 000010E4 EB9F jmp short .get_child_lop@ 1820 1821 .got_done@: 1822 000010E6 50 push eax 1823 000010E7 C1E804 shr eax, 4 ; x 1824 000010EA 746F jz short .@this_sign ; @@getexpval 1 1825 000010EC 8B15[F01F0500] mov edx, [_@@rle_val] 1826 000010F2 83F80F cmp eax, 15 1827 000010F5 7250 jb short .small ; when x=1..14 1828 000010F7 8A0D[DC1F0500] mov cl, byte [_@@linbits] ; =0..13 ; when x=15, with linbits 1829 000010FD 89E8 mov eax, ebp ; mp3mac_get_n_bits cl ; value = 0..1FFFh 1830 000010FF D3E5 shl ebp, cl ; mp3mac_collect_more 1831 00001101 D3C0 rol eax, cl 1832 00001103 31E8 xor eax, ebp 1833 00001105 28CD sub ch, cl 1834 00001107 7913 jns short .cont 1835 00001109 88E9 mov cl, ch ; mp3mac_collect_more 1836 0000110B 80C510 add ch, 16 1837 0000110E D3C5 rol ebp, cl 1838 00001110 668B2E mov bp, [esi] 1839 00001113 83C602 add esi, 2 1840 00001116 66C1CD08 ror bp, 8 1841 0000111A D3CD ror ebp, cl 1842 1843 .cont: 1844 0000111C 88D1 mov cl, dl ; exponent.lsb 1845 0000111E 80E103 and cl, 3 ; exponent.lsb 1846 00001121 C1EA02 shr edx, 2 ; exponent.msb 1847 00001124 8D04853C000000 lea eax, [eax*4+60] ; (value+15)*4 1848 0000112B 08C8 or al, cl ; exponent.lsb+(value+15)*4 1849 0000112D 8A88[04DA0100] mov cl, [mp3_table_4_3_exp+eax] 1850 00001133 8B0485[405A0200] mov eax, [mp3_table_4_3_value+eax*4] 1851 0000113A 28D1 sub cl, dl ; sub exponent.msb 1852 0000113C D3E8 shr eax, cl 1853 0000113E 80F91F cmp cl, 31 1854 00001141 760E jbe short .get_sign 1855 00001143 31C0 xor eax, eax 1856 00001145 EB0A jmp short .get_sign 1857 1858 .small: 1859 00001147 C1E206 shl edx, 6 ; shl edx,4+2 ; mul16*4 ; when x<15 aka x=1..14 1860 0000114A 8B8482[30630400] mov eax, [mp3_expval_table+edx+eax*4] 1861 1862 .get_sign: 1863 00001151 FECD dec ch ; mp3mac_get_bit_to_cy 1864 00001153 D1E5 shl ebp, 1 1865 00001155 19D2 sbb edx, edx ; get sign (negate if sign=1) 1866 00001157 31D0 xor eax, edx 1867 00001159 29D0 sub eax, edx 1868 1869 .@this_sign: 1870 0000115B 8984BBA0000000 mov [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0] 1871 00001162 58 pop eax 1872 00001163 83E00F and eax, 0Fh ; y 1873 00001166 746F jz short .@this_sign@ ; @@getexpval 1 1874 00001168 8B15[F01F0500] mov edx, [_@@rle_val] 1875 0000116E 83F80F cmp eax, 0Fh 1876 00001171 7250 jb short .small@ 1877 00001173 8A0D[DC1F0500] mov cl, byte [_@@linbits] 1878 00001179 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 1879 0000117B D3E5 shl ebp, cl 1880 0000117D D3C0 rol eax, cl 1881 0000117F 31E8 xor eax, ebp 1882 00001181 28CD sub ch, cl 1883 00001183 7913 jns short .cont@ 1884 00001185 88E9 mov cl, ch ; mp3mac_collect_more 1885 00001187 80C510 add ch, 10h 1886 0000118A D3C5 rol ebp, cl 1887 0000118C 668B2E mov bp, [esi] 1888 0000118F 83C602 add esi, 2 1889 00001192 66C1CD08 ror bp, 8 1890 00001196 D3CD ror ebp, cl 1891 1892 .cont@: 1893 00001198 88D1 mov cl, dl 1894 0000119A 80E103 and cl, 3 1895 0000119D C1EA02 shr edx, 2 1896 000011A0 8D04853C000000 lea eax, [eax*4+60] 1897 000011A7 08C8 or al, cl 1898 000011A9 8A88[04DA0100] mov cl, [mp3_table_4_3_exp+eax] 1899 000011AF 8B0485[405A0200] mov eax, [mp3_table_4_3_value+eax*4] 1900 000011B6 28D1 sub cl, dl 1901 000011B8 D3E8 shr eax, cl 1902 000011BA 80F91F cmp cl, 31 1903 000011BD 760E jbe short .get_sign@ 1904 000011BF 31C0 xor eax, eax 1905 000011C1 EB0A jmp short .get_sign@ 1906 1907 .small@: 1908 000011C3 C1E206 shl edx, 6 1909 000011C6 8B8482[30630400] mov eax, [mp3_expval_table+edx+eax*4] 1910 1911 .get_sign@: 1912 000011CD FECD dec ch ; dec mp3_colNN 1913 000011CF D1E5 shl ebp, 1 ; shl mp3_col32,1 ; cy=data 1914 000011D1 19D2 sbb edx, edx ; cy=0,1 --> 0,FFFFFFFF 1915 000011D3 31D0 xor eax, edx ; invert if cy was 1 1916 000011D5 29D0 sub eax, edx ; add 1 if cy was 1 1917 1918 .@this_sign@: 1919 000011D7 8984BBA4000000 mov [ebx+edi*4+164], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+4] 1920 000011DE 83C702 add edi, 2 ; next j 1921 000011E1 FF0D[D81F0500] dec dword [_@@JJJ] 1922 000011E7 0F857AFEFFFF jnz .low_freq_lop_j 1923 1924 .low_freq_next_i: 1925 000011ED FF05[D41F0500] inc dword [_@@III] ; next i 1926 000011F3 833D[D41F0500]03 cmp dword [_@@III], 3 1927 000011FA 0F8201FDFFFF jb .low_freq_lop_i 1928 00001200 81FF3C020000 cmp edi, 572 ; aka 576-4 ; skip if less than 4 entries left 1929 00001206 0F87DA000000 ja .high_freq_done 1930 1931 .high_freq_lop: 1932 0000120C 3B35[E41F0500] cmp esi, [_@@coarse_end] 1933 00001212 7629 jbe short .high_freq_inrange 1934 00001214 89F0 mov eax, esi ; mp3mac_bitstream_get_position 1935 00001216 2B05[ACF40000] sub eax, [mp3_bitstream_start] 1936 0000121C 0FBED5 movsx edx, ch ; mp3_colNN 1937 0000121F F7DA neg edx 1938 00001221 8D44C2F0 lea eax, [edx+eax*8-16] 1939 00001225 3B4308 cmp eax, [ebx+8] ; [ebx+$mp3gr_part2_3_end] ; check end 1940 00001228 7213 jb short .high_freq_inrange ; not yet end 1941 0000122A 0F84B6000000 jz .high_freq_done ; okay, exact end 1942 00001230 83FF04 cmp edi, 4 1943 00001233 7203 jb short .high_freq_cannot_stepback 1944 00001235 83EF04 sub edi, 4 ; stepback, s_index-4 ; dst stepback 1945 1946 .high_freq_cannot_stepback: 1947 00001238 E9A9000000 jmp .high_freq_done 1948 1949 .high_freq_inrange: 1950 0000123D 8B5324 mov edx, [ebx+24h] ; [ebx+$mp3gr_count1table_select] 1951 ; get huffcode (quad_vlc) 1952 1953 .get_child_lop@@: 1954 00001240 8A0C95[C61F0100] mov cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode 1955 00001247 668B1495[C41F0100] mov dx, word [huff_tree_buf+edx*4] 1956 0000124F 89E8 mov eax, ebp 1957 00001251 D3E8 shr eax, cl 1958 00001253 01C2 add edx, eax 1959 00001255 8A0C95[C61F0100] mov cl, [(huff_tree_buf+2)+edx*4] 1960 0000125C 80F900 cmp cl, 0 1961 0000125F 7823 js short .got_child@@ 1962 00001261 0FB70495[C41F0100] movzx eax, word [huff_tree_buf+edx*4] 1963 00001269 D3E5 shl ebp, cl 1964 0000126B 28CD sub ch, cl 1965 0000126D 7932 jns short .got_done@@ 1966 0000126F 88E9 mov cl, ch 1967 00001271 80C510 add ch, 10h 1968 00001274 D3C5 rol ebp, cl 1969 00001276 668B2E mov bp, [esi] 1970 00001279 83C602 add esi, 2 1971 0000127C 66C1CD08 ror bp, 8 1972 00001280 D3CD ror ebp, cl 1973 00001282 EB1D jmp short .got_done@@ 1974 1975 .got_child@@: 1976 00001284 C1E509 shl ebp, 9 1977 00001287 80ED09 sub ch, 9 1978 0000128A 79B4 jns short .get_child_lop@@ 1979 0000128C 88E9 mov cl, ch 1980 0000128E 80C510 add ch, 10h 1981 00001291 D3C5 rol ebp, cl 1982 00001293 668B2E mov bp, [esi] 1983 00001296 83C602 add esi, 2 1984 00001299 66C1CD08 ror bp, 8 1985 0000129D D3CD ror ebp, cl 1986 0000129F EB9F jmp short .get_child_lop@@ 1987 1988 .got_done@@: 1989 000012A1 88C2 mov dl, al ; flags 1990 000012A3 C0E204 shl dl, 4 ; flags, to upper 4bit 1991 000012A6 B604 mov dh, 4 ; lopcount 1992 1993 .high_freq_flag_lop: 1994 000012A8 31C0 xor eax, eax 1995 000012AA D0E2 shl dl, 1 ; flag 1996 000012AC 7320 jnb short .high_freq_flag_this 1997 000012AE 3B3D[E81F0500] cmp edi, [_@rle_point] ; @@get_runlength quads 1998 000012B4 0F83B8000000 jnb .rle_fetch_next_quads 1999 2000 .rle_back_quads: 2001 000012BA A1[F01F0500] mov eax, [_@@rle_val] 2002 000012BF 8B0485[305B0400] mov eax, [mp3_exp_table+eax*4] ; xlat and get sign 2003 000012C6 FECD dec ch ; mp3mac_get_bit_to_cy 2004 000012C8 D1E5 shl ebp, 1 2005 000012CA 7302 jnb short .high_freq_flag_this ; 2006 ; sbb edx, edx ; cy=0,1 --> 0,FFFFFFFF 2007 ; xor eax, edx ; invert if cy was 1 2008 ; sub eax, edx ; add 1 if cy was 1 2009 000012CC F7D8 neg eax 2010 2011 .high_freq_flag_this: 2012 000012CE 8984BBA0000000 mov [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0] 2013 000012D5 47 inc edi 2014 000012D6 FECE dec dh 2015 000012D8 75CE jnz short .high_freq_flag_lop 2016 000012DA 81FF3C020000 cmp edi, 572 ; aka 576-4 ; loop while space for another 4 values 2017 000012E0 0F8626FFFFFF jbe .high_freq_lop 2018 2019 .high_freq_done: 2020 000012E6 897B5C mov [ebx+92], edi ; [ebx+$mp3gr_num_nonzero_hybrids] 2021 000012E9 51 push ecx 2022 000012EA B940020000 mov ecx, 576 ; end 2023 000012EF 29F9 sub ecx, edi ; remain = end-curr 2024 ; zeropad remaining entries (can be 0 or 2 dwords, 2025 ; or more. If above loop was aborted) 2026 000012F1 8DBCBBA0000000 lea edi, [ebx+edi*4+160] ; [ebx+$mp3gr_sb_hybrid+edi*4] 2027 000012F8 31C0 xor eax, eax 2028 000012FA F3AB rep stosd 2029 000012FC 59 pop ecx 2030 000012FD F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_read_huffman 2031 00001304 740E jz short .no_rdtsc_supported@ 2032 00001306 0F31 rdtsc 2033 00001308 0105[F4760000] add [rdtsc_read_huffman], eax 2034 0000130E 1115[F8760000] adc [rdtsc_read_huffman+4], edx 2035 2036 .no_rdtsc_supported@: 2037 00001314 F8 clc ; out: cy=0=okay 2038 00001315 C3 retn 2039 2040 .rle_fetch_next_small: 2041 00001316 A1[EC1F0500] mov eax, [_@@rle_ptr] ; @@next_runlength small 2042 0000131B 8305[EC1F0500]04 add dword [_@@rle_ptr], 4 2043 00001322 8B00 mov eax, [eax] 2044 00001324 6639C7 cmp di, ax 2045 00001327 73ED jnb short .rle_fetch_next_small 2046 00001329 66A3[E81F0500] mov word [_@rle_point], ax 2047 0000132F C1E810 shr eax, 16 2048 00001332 A3[F01F0500] mov [_@@rle_val], eax 2049 00001337 C1E006 shl eax, 6 2050 0000133A A3[F41F0500] mov [_@@rle_val_x_40h], eax 2051 0000133F E934FCFFFF jmp .rle_back_small 2052 2053 .rle_fetch_next_full: 2054 00001344 A1[EC1F0500] mov eax, [_@@rle_ptr] ; @@next_runlength full 2055 00001349 8305[EC1F0500]04 add dword [_@@rle_ptr], 4 2056 00001350 8B00 mov eax, [eax] 2057 00001352 6639C7 cmp di, ax 2058 00001355 73ED jnb short .rle_fetch_next_full 2059 00001357 66A3[E81F0500] mov word [_@rle_point], ax 2060 0000135D C1E810 shr eax, 16 2061 00001360 A3[F01F0500] mov [_@@rle_val], eax 2062 00001365 C1E006 shl eax, 6 2063 00001368 A3[F41F0500] mov [_@@rle_val_x_40h], eax 2064 0000136D E90DFDFFFF jmp .rle_back_full 2065 2066 .rle_fetch_next_quads: 2067 00001372 A1[EC1F0500] mov eax, [_@@rle_ptr] ; msw=val, lsw=point 2068 00001377 8305[EC1F0500]04 add dword [_@@rle_ptr], 4 ; 2+2 2069 0000137E 8B00 mov eax, [eax] 2070 00001380 6639C7 cmp di, ax ; needed if rle fetching was skipped 2071 00001383 73ED jnb short .rle_fetch_next_quads 2072 00001385 66A3[E81F0500] mov word [_@rle_point], ax 2073 0000138B C1E810 shr eax, 16 2074 0000138E A3[F01F0500] mov [_@@rle_val], eax 2075 00001393 E922FFFFFF jmp .rle_back_quads 2076 2077 .lop_j_near_end: 2078 00001398 89F0 mov eax, esi 2079 0000139A 2B05[ACF40000] sub eax, [mp3_bitstream_start] 2080 000013A0 0FBED5 movsx edx, ch 2081 000013A3 F7DA neg edx 2082 000013A5 8D44C2F0 lea eax, [edx+eax*8-16] 2083 000013A9 3B4308 cmp eax, [ebx+8] 2084 000013AC 0F82C1FCFFFF jb .small_not_end@ 2085 000013B2 E936FEFFFF jmp .low_freq_next_i 2086 2087 2088 ; =============== S U B R O U T I N E ======================================= 2089 2090 2091 mp3_compute_stereo: 2092 000013B7 833D[D09D0000]02 cmp dword [mp3_output_num_channels], 2 ; in: ebx=granule(s) 2093 000013BE 7515 jnz short .no_stereo 2094 000013C0 833D[EC9D0000]02 cmp dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO 2095 ; only MS stereo 2096 000013C7 740D jz short mp3_compute_ms_stereo 2097 000013C9 F705[EC9D0000]0100- test dword [mp3_hdr_mode_ext], 1 ; MODE_EXT_I_STEREO 2097 000013D1 0000 2098 ; intensity stereo (optionally with MS stereo) 2099 000013D3 7567 jnz short mp3_compute_i_stereo 2100 2101 .no_stereo: 2102 000013D5 C3 retn 2103 2104 mp3_compute_ms_stereo: 2105 000013D6 F605[54760000]10 test byte [cpuid_flags], 10h ; ms_stereo is most commonly used 2106 ; the 1/sqrt(2) normalization factor is included 2107 ; in the global gain 2108 000013DD 740E jz short .no_rdtsc_supported ; timelog_start rdtsc_ms_stereo 2109 000013DF 0F31 rdtsc 2110 000013E1 2905[0C770000] sub [rdtsc_ms_stereo], eax 2111 000013E7 1915[10770000] sbb [rdtsc_ms_stereo+4], edx 2112 2113 .no_rdtsc_supported: 2114 000013ED 8DBBE0130000 lea edi, [ebx+5088] ; [ebx+$mp3gr_sb_hybrid+$mp3gr_entrysiz*2] 2115 ; for ch1 (2nd channel) 2116 000013F3 8B4B5C mov ecx, [ebx+92] ; [ebx+$mp3gr_num_nonzero_hybrids] ; ch0 2117 000013F6 8B839C130000 mov eax, [ebx+5020] ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)] ; ch1 2118 000013FC 39C1 cmp ecx, eax 2119 000013FE 7702 ja short .this_len 2120 00001400 89C1 mov ecx, eax 2121 2122 .this_len: 2123 00001402 E320 jecxz .ms_stereo_done 2124 00001404 894B5C mov [ebx+92], ecx ; [ebx+$mp3gr_num_nonzero_hybrids] ; ch0 2125 00001407 898B9C130000 mov [ebx+5020], ecx ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)] ; ch1 2126 2127 .ms_stereo_lop: 2128 0000140D 8B87C0ECFFFF mov eax, [edi-4928] ; for i=0 to 576-1 2129 ; [edi+@@ch0] 2130 ; @@ch0 equ (-$mp3gr_entrysiz*2) ; granule for channel=0 2131 ; tmp0 = granule.ch0.sb_hybrid[i] 2132 00001413 8B17 mov edx, [edi] ; @@ch1 equ 0 ; granule for channel=1 2133 ; [edi+@@ch1] 2134 ; tmp1 = granule.ch1.sb_hybrid[i] 2135 00001415 29D0 sub eax, edx ; tmp0 - tmp1 2136 00001417 8D1450 lea edx, [eax+edx*2] ; tmp0 + tmp1 2137 0000141A 8997C0ECFFFF mov [edi-4928], edx ; [edi+@@ch0] 2138 ; granule.ch0.sb_hybrid[i] = tmp0 + tmp1 2139 00001420 AB stosd ; [edi+@@ch1] 2140 ; granule.ch1.sb_hybrid[i] = tmp0 - tmp1 2141 00001421 49 dec ecx 2142 00001422 75E9 jnz short .ms_stereo_lop 2143 2144 .ms_stereo_done: 2145 00001424 F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_ms_stereo 2146 0000142B 740E jz short .no_rdtsc_supported@ 2147 0000142D 0F31 rdtsc 2148 0000142F 0105[0C770000] add [rdtsc_ms_stereo], eax 2149 00001435 1115[10770000] adc [rdtsc_ms_stereo+4], edx 2150 2151 .no_rdtsc_supported@: 2152 0000143B C3 retn 2153 2154 mp3_compute_i_stereo: 2155 0000143C F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_i_stereo 2156 00001443 740E jz short .no_rdtsc_supported@@@ 2157 00001445 0F31 rdtsc 2158 00001447 2905[24770000] sub [rdtsc_i_stereo], eax 2159 0000144D 1915[28770000] sbb [rdtsc_i_stereo+4], edx 2160 2161 .no_rdtsc_supported@@@: 2162 00001453 C7435C40020000 mov dword [ebx+92], 576 ; ch0 2163 ; [ebx+$mp3gr_num_nonzero_hybrids] 2164 0000145A C7839C130000400200- mov dword [ebx+5020], 576 ; ch1 2164 00001463 00 2165 ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)] 2166 00001464 8B4320 mov eax, [ebx+32] ; [ebx+$mp3gr_long_end] 2167 00001467 A3[30200500] mov [_@@n_long_sfb], eax 2168 0000146C B80D000000 mov eax, 13 ; 39/3 2169 00001471 2B431C sub eax, [ebx+28] ; [ebx+$mp3gr_short_start] 2170 00001474 8D0440 lea eax, [eax+eax*2] ; mul3 2171 00001477 A3[34200500] mov [_@@n_short_sfb], eax 2172 0000147C 0305[30200500] add eax, [_@@n_long_sfb] 2173 00001482 A3[38200500] mov [_@@n_sfb], eax ; 2174 ; n_sfb = gr->n_long_sfb + gr->n_short_sfb; 2175 00001487 803D[34200500]00 cmp byte [_@@n_short_sfb], 0 2176 0000148E B801000000 mov eax, 1 2177 00001493 7405 jz short .without_short 2178 00001495 B803000000 mov eax, 3 ; max_blocks = gr->n_short_sfb ? 3 : 1; 2179 2180 .without_short: 2181 0000149A A3[FC1F0500] mov [_@@max_blocks], eax 2182 0000149F BF[04200500] mov edi, _@@sfb_array 2183 000014A4 A1[C49D0000] mov eax, [mp3_hdr_sample_rate_index] ; bstab 2184 000014A9 6BC016 imul eax, 22 2185 000014AC 8DB0[D4800000] lea esi, [mp3_band_size_long+eax] 2186 000014B2 8B0D[30200500] mov ecx, [_@@n_long_sfb] 2187 000014B8 F3A4 rep movsb 2188 000014BA A1[C49D0000] mov eax, [mp3_hdr_sample_rate_index] 2189 000014BF 6BC00D imul eax, 13 2190 000014C2 8DB0[A4810000] lea esi, [mp3_band_size_short+eax] ; merge lieff-style 2191 000014C8 8B0D[34200500] mov ecx, [_@@n_short_sfb] 2192 000014CE E30C jecxz .make_sfb_done ; doing that here is a bit slow, 2193 ; it would be better to pre-compute 2194 ; all merged-combinations 2195 000014D0 03731C add esi, [ebx+28] ; [ebx+$mp3gr_short_start] 2196 2197 .make_sfb_lop: 2198 000014D3 AC lodsb 2199 000014D4 AA stosb 2200 000014D5 AA stosb 2201 000014D6 AA stosb 2202 000014D7 83E903 sub ecx, 3 2203 000014DA 75F7 jnz short .make_sfb_lop 2204 2205 .make_sfb_done: 2206 000014DC E888000000 call _@@find_top_bands ; 2207 ; L3_stereo_top_band(left+576,gr->sfbtab,n_sfb,max_band); 2208 000014E1 803D[30200500]00 cmp byte [_@@n_long_sfb], 0 2209 000014E8 7420 jz short .without_long 2210 000014EA A1[F81F0500] mov eax, dword [_@@max_bands] 2211 000014EF 38C4 cmp ah, al ; if (gr->n_long_sfb) 2212 000014F1 7F02 jg short .not_max1 ; max_band[0] = max_band[1] = max_band[2] = MINIMP3_MAX 2213 ; (MINIMP3_MAX(max_band[0], max_band[1]), max_band[2]); 2214 000014F3 88C4 mov ah, al 2215 2216 .not_max1: 2217 000014F5 C1E808 shr eax, 8 2218 000014F8 38C4 cmp ah, al 2219 000014FA 7F02 jg short .not_max2 2220 000014FC 88C4 mov ah, al 2221 2222 .not_max2: 2223 000014FE 88E0 mov al, ah 2224 00001500 C1E008 shl eax, 8 2225 00001503 88E0 mov al, ah 2226 00001505 A3[F81F0500] mov dword [_@@max_bands], eax 2227 2228 .without_long: 2229 0000150A 31ED xor ebp, ebp ; blk 2230 2231 .adjust_last_prev_lop: 2232 0000150C 8B15[38200500] mov edx, [_@@n_sfb] 2233 00001512 2B15[FC1F0500] sub edx, [_@@max_blocks] ; itop = n_sfb - max_blocks + blk 2234 00001518 01EA add edx, ebp 2235 0000151A 89D1 mov ecx, edx 2236 0000151C 2B0D[FC1F0500] sub ecx, [_@@max_blocks] ; prev = itop - max_blocks; 2237 00001522 A1[F09D0000] mov eax, [mp3_hdr_flag_lsf] 2238 00001527 8D0440 lea eax, [eax+eax*2] ; 0,1 --> 0,3 2239 ; default_pos = HDR_TEST_MPEG1(hdr) ? 3 2240 0000152A 3403 xor al, 3 ; 0,3 --> 3,0 2241 0000152C 363A8D[F81F0500] cmp cl, [ss:_@@max_bands+ebp] 2242 00001533 7E07 jle short .use_default_pos ; ist_pos[itop] = max_band[blk] >= 2243 ; prev ? default_pos : ist_pos[prev] 2244 00001535 8A840BB0130000 mov al, [ebx+ecx+5040] ; [ebx+@@right+$mp3gr_scale_factors+ecx] 2245 2246 .use_default_pos: 2247 0000153C 888413B0130000 mov [ebx+edx+5040], al ; [ebx+@@right+$mp3gr_scale_factors+edx] 2248 00001543 45 inc ebp ; blk 2249 00001544 3B2D[FC1F0500] cmp ebp, [_@@max_blocks] 2250 0000154A 72C0 jb short .adjust_last_prev_lop 2251 0000154C E867000000 call _@@apply_i_stereo 2252 00001551 F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_i_stereo 2253 00001558 740E jz short .no_rdtsc_supported@@@@ 2254 0000155A 0F31 rdtsc 2255 0000155C 0105[24770000] add [rdtsc_i_stereo], eax 2256 00001562 1115[28770000] adc [rdtsc_i_stereo+4], edx 2257 2258 .no_rdtsc_supported@@@@: 2259 00001568 C3 retn 2260 2261 2262 ; =============== S U B R O U T I N E ======================================= 2263 2264 2265 _@@find_top_bands: 2266 00001569 C705[F81F0500]FFFF- mov dword [_@@max_bands], 0FFFFFFh ; set maxband[0..2]=(-1) 2266 00001571 FF00 2267 00001573 8DB3E0130000 lea esi, [ebx+5088] ; [ebx+@@right+$mp3gr_sb_hybrid] 2268 00001579 31D2 xor edx, edx 2269 2270 .find_top_lop_iii: 2271 0000157B 31C9 xor ecx, ecx ; for (i = 0; i < nbands; i++) 2272 2273 .find_top_lop_kkk: 2274 0000157D 8B048E mov eax, [esi+ecx*4] ; for (k = 0; k < sfb[i]; k += 2) 2275 00001580 0B448E04 or eax, [esi+ecx*4+4] 2276 00001584 750D jnz short .found_nonzero 2277 00001586 83C102 add ecx, 2 2278 00001589 3A8A[04200500] cmp cl, [_@@sfb_array+edx] 2279 0000158F 72EC jb short .find_top_lop_kkk 2280 00001591 EB11 jmp short .find_top_next 2281 2282 .found_nonzero: 2283 00001593 89D0 mov eax, edx 2284 00001595 F635[0E8B0000] div byte [_@@const_3] 2285 0000159B 0FB6C4 movzx eax, ah ; remainder (mod 3) 2286 0000159E 8890[F81F0500] mov [_@@max_bands+eax], dl ; max_bands[0..2]=i 2287 2288 .find_top_next: 2289 000015A4 0FB682[04200500] movzx eax, byte [_@@sfb_array+edx] 2290 000015AB 8D3486 lea esi, [esi+eax*4] 2291 000015AE 42 inc edx ; next 2292 000015AF 3B15[38200500] cmp edx, [_@@n_sfb] 2293 000015B5 72C4 jb short .find_top_lop_iii 2294 000015B7 C3 retn 2295 2296 ; =============== S U B R O U T I N E ======================================= 2297 2298 2299 _@@apply_i_stereo: 2300 000015B8 B8[94840000] mov eax, mp3_is_table_normal 2301 000015BD B907000000 mov ecx, 7 2302 000015C2 833D[F09D0000]00 cmp dword [mp3_hdr_flag_lsf], 0 2303 000015C9 7425 jz short .this_lsf 2304 000015CB 8B8354130000 mov eax, [ebx+4948] ; [ebx+@@right+$mp3gr_scalefac_compress] 2305 000015D1 83E001 and eax, 1 ; bit0 2306 000015D4 F705[EC9D0000]0200- test dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO 2306 000015DC 0000 2307 000015DE 7403 jz short .no_ms 2308 000015E0 83C802 or eax, 2 ; bit1=mul_1.414 2309 2310 .no_ms: 2311 000015E3 C1E009 shl eax, 9 ; N*40h*2*4 2312 000015E6 05[B0E70400] add eax, mp3_is_table_lsf 2313 000015EB B940000000 mov ecx, 64 ; max (must be below NO_INTENSITY_FLAG) 2314 2315 .this_lsf: 2316 000015F0 890D[00200500] mov [_@@max_pos], ecx ; 7 or 64 2317 000015F6 A3[2C200500] mov [_@@is_tab], eax ; table 2318 000015FB 8DB3A0000000 lea esi, [ebx+160] ; [ebx+$mp3gr_sb_hybrid] 2319 00001601 31C9 xor ecx, ecx ; iii ; for (i = 0; sfb[i]; i++) 2320 2321 .apply_lop_i: 2322 00001603 0FB6A9[04200500] movzx ebp, byte [_@@sfb_array+ecx] ; if ((int)i > max_band[i % 3] 2323 ; && ipos < max_pos) 2324 0000160A 89C8 mov eax, ecx 2325 0000160C F635[0E8B0000] div byte [_@@const_3] ; max_band[i % 3] 2326 00001612 0FB6C4 movzx eax, ah ; remainder (mod 3) 2327 00001615 3A88[F81F0500] cmp cl, [_@@max_bands+eax] ; iii,max_bands[0..2]; 2328 0000161B 7E38 jle short .apply_ms_stereo 2329 0000161D 0FB6BC0BB0130000 movzx edi, byte [ebx+ecx+5040] ; [ebx+@@right+$mp3gr_scale_factors+ecx] 2330 ; @@right = $mp3gr_entrysiz*2 = 4928 2331 ; $mp3gr_scale_factors = 112 2332 00001625 3B3D[00200500] cmp edi, [_@@max_pos] ; check ipos 2333 0000162B 7328 jnb short .apply_ms_stereo 2334 0000162D C1E703 shl edi, 3 ; mul 2*4 2335 00001630 033D[2C200500] add edi, [_@@is_tab] 2336 2337 .apply_pan_lop: 2338 00001636 8B06 mov eax, [esi] ; tmp = granule.ch0.sb_hybrid 2339 00001638 C1E002 shl eax, 2 2340 0000163B F76F04 imul dword [edi+4] ; v1 2341 0000163E 899640130000 mov [esi+4928], edx ; [esi+@@right] 2342 ; granule.ch1.sb_hybrid = tmp*v1 2343 00001644 8B06 mov eax, [esi] ; tmp = granule.ch0.sb_hybrid 2344 00001646 C1E002 shl eax, 2 2345 00001649 F72F imul dword [edi] ; v0 2346 0000164B 8916 mov [esi], edx ; granule.ch0.sb_hybrid = tmp*v0 2347 0000164D 83C604 add esi, 4 2348 00001650 4D dec ebp 2349 00001651 75E3 jnz short .apply_pan_lop 2350 00001653 EB2C jmp short .apply_next 2351 2352 .apply_ms_stereo: 2353 00001655 F705[EC9D0000]0200- test dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO 2353 0000165D 0000 2354 0000165F 741D jz short .apply_none 2355 2356 .ms_stereo_lop: 2357 00001661 8B06 mov eax, [esi] ; tmp0 = granule.ch0.sb_hybrid[i] 2358 00001663 8B9640130000 mov edx, [esi+4928] ; [esi+@@right] 2359 ; tmp1 = granule.ch1.sb_hybrid[i] 2360 00001669 29D0 sub eax, edx ; tmp0 - tmp1 2361 0000166B 8D1450 lea edx, [eax+edx*2] ; tmp0 + tmp1 2362 0000166E 8916 mov [esi], edx ; granule.ch0.sb_hybrid[i] = tmp0 + tmp1 2363 00001670 898640130000 mov [esi+4928], eax ; [esi+@@right] 2364 ; granule.ch1.sb_hybrid[i] = tmp0 - tmp1 2365 00001676 83C604 add esi, 4 2366 00001679 4D dec ebp 2367 0000167A 75E5 jnz short .ms_stereo_lop 2368 0000167C EB03 jmp short .apply_next 2369 2370 .apply_none: 2371 0000167E 8D34AE lea esi, [esi+ebp*4] ; skip, keep unchanged 2372 2373 .apply_next: 2374 00001681 41 inc ecx ; iii 2375 00001682 3B0D[38200500] cmp ecx, [_@@n_sfb] 2376 00001688 0F8275FFFFFF jb .apply_lop_i ; next 2377 0000168E C3 retn 2378 2379 ; =============== S U B R O U T I N E ======================================= 2380 2381 2382 mp3_reorder_block: 2383 0000168F F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_reorder 2384 00001696 740E jz short .no_rdtsc_supported 2385 00001698 0F31 rdtsc 2386 0000169A 2905[3C770000] sub [rdtsc_reorder], eax 2387 000016A0 1915[40770000] sbb [rdtsc_reorder+4], edx 2388 2389 .no_rdtsc_supported: 2390 000016A6 807B2C02 cmp byte [ebx+44], 2 ; ebx+$mp3gr_block_type] ; only for type 2 2391 000016AA 7565 jnz short .no_reorder 2392 000016AC 8DB3A0000000 lea esi, [ebx+160] ; [ebx+$mp3gr_sb_hybrid] ; ptr+0 2393 000016B2 807B3000 cmp byte [ebx+48], 0 ; [ebx+$mp3gr_switch_point] 2394 000016B6 7412 jz short .this_src 2395 000016B8 81C690000000 add esi, 144 ; 36*4 ; ptr+36*4 2396 000016BE 833D[C49D0000]08 cmp dword [mp3_hdr_sample_rate_index], 8 2397 000016C5 7503 jnz short .this_src 2398 000016C7 83C630 add esi, 48 ; 12*4 ; additionally to above 36*4 ; ptr+48*4 2399 2400 .this_src: 2401 000016CA 8B531C mov edx, [ebx+28] ; [ebx+$mp3gr_short_start] ; can be 13 2402 000016CD 83FA0D cmp edx, 13 2403 000016D0 733F jnb short .no_reorder 2404 000016D2 C7435C40020000 mov dword [ebx+92], 576 ; [ebx+$mp3gr_num_nonzero_hybrids] 2405 2406 .outer_lop: 2407 000016D9 A1[C49D0000] mov eax, [mp3_hdr_sample_rate_index] 2408 000016DE 6BC00D imul eax, 13 ; X*13 2409 000016E1 0FB68C10[A4810000] movzx ecx, byte [mp3_band_size_short+eax+edx] ; [X*13+Y] 2410 000016E9 BF[3C200500] mov edi, _@@tmp 2411 000016EE 60 pusha 2412 000016EF 89CA mov edx, ecx ; step=len (4..44) ; copy LEN*3 dwords to tmp 2413 2414 .inner_lop: 2415 000016F1 8B06 mov eax, [esi] 2416 000016F3 AB stosd 2417 000016F4 8B0496 mov eax, [esi+edx*4] ; copy 3 dwords 2418 000016F7 AB stosd 2419 000016F8 8B04D6 mov eax, [esi+edx*8] 2420 000016FB AB stosd 2421 000016FC 83C604 add esi, 4 2422 000016FF E2F0 loop .inner_lop 2423 00001701 61 popa 2424 00001702 8D0C49 lea ecx, [ecx+ecx*2] ; len*3 2425 00001705 87FE xchg esi, edi ; copy LEN*3 dwords back from tmp 2426 00001707 F3A5 rep movsd 2427 00001709 87FE xchg esi, edi 2428 0000170B 42 inc edx 2429 0000170C 83FA0D cmp edx, 13 2430 0000170F 72C8 jb short .outer_lop ; next 2431 2432 .no_reorder: 2433 00001711 F605[54760000]10 test byte [cpuid_flags], 10h 2434 00001718 740E jz short .no_rdtsc_supported@ ; timelog_end rdtsc_reorder 2435 0000171A 0F31 rdtsc 2436 0000171C 0105[3C770000] add [rdtsc_reorder], eax 2437 00001722 1115[40770000] adc [rdtsc_reorder+4], edx 2438 2439 .no_rdtsc_supported@: 2440 00001728 C3 retn 2441 2442 2443 ; =============== S U B R O U T I N E ======================================= 2444 2445 2446 mp3_compute_antialias: 2447 00001729 F605[54760000]10 test byte [cpuid_flags], 10h ; in: ebx=granule 2448 00001730 740E jz short .no_rdtsc_supported ; timelog_start rdtsc_antialias 2449 00001732 0F31 rdtsc 2450 00001734 2905[54770000] sub [rdtsc_antialias], eax 2451 0000173A 1915[58770000] sbb [rdtsc_antialias+4], edx 2452 2453 .no_rdtsc_supported: 2454 00001740 8B435C mov eax, [ebx+92] ; [ebx+$mp3gr_num_nonzero_hybrids] 2455 00001743 83C008 add eax, 8 ; 9-1 ; 0..576+8 2456 00001746 31D2 xor edx, edx 2457 00001748 B909000000 mov ecx, 9 2458 0000174D F7F1 div ecx ; (num/9) ; 0..64 2459 0000174F 894360 mov [ebx+60h], eax 2460 00001752 D1E8 shr eax, 1 ; (num/18) ; 0..32 2461 00001754 0F84B8010000 jz .no_antialias ; 0 (when num/9 = 0..1) 2462 0000175A 89C1 mov ecx, eax ; 1..32 2463 0000175C C1E805 shr eax, 5 ; 0..1 2464 0000175F 29C1 sub ecx, eax ; 1..31 ; len excluding zeropadding 2465 00001761 807B2C02 cmp byte [ebx+44], 2 ; [ebx+$mp3gr_block_type] 2466 00001765 750F jnz short .this_len ; antialias only "long" bands 2467 00001767 807B3000 cmp byte [ebx+48], 0 ; [ebx+$mp3gr_switch_point] 2468 0000176B 0F84A1010000 jz .no_antialias 2469 00001771 B901000000 mov ecx, 1 ; check this for 8000Hz case 2470 2471 .this_len: 2472 00001776 8D440901 lea eax, [1+ecx*2] 2473 0000177A 394360 cmp [ebx+96], eax ; [ebx+$mp3gr_num_nonzero_hybrids_div9] 2474 0000177D 7703 ja short .is_bigger 2475 0000177F 894360 mov [ebx+96], eax ; opdate highest 2476 ; (nonzero required for l3-si_huff.bit) 2477 2478 .is_bigger: 2479 00001782 53 push ebx 2480 00001783 8D9BA0000000 lea ebx, [ebx+160] ; [ebx+$mp3gr_sb_hybrid] 2481 2482 .lop: 2483 00001789 83C348 add ebx, 72 ; 18*4 2484 0000178C 8B73FC mov esi, [ebx-4] ; IRP nn,0,1,2,3,4,5,6,7 ; INT_AA(nn=0..7) 2485 0000178F 8B3B mov edi, [ebx] ; @@def_csa macro nn,cs,ca 2486 ; mp3_csa_&nn&_cs equ cs 2487 ; mp3_csa_&nn&_ca equ ca 2488 ; endm 2489 ; constants for mp3_csa_table 2490 00001791 C1E602 shl esi, 2 ; tmp0 = ptr[-nn-1]*4 2491 00001794 C1E702 shl edi, 2 ; tmp1 = ptr[+nn]*4 2492 00001797 8D043E lea eax, [esi+edi] ; tmp2 = tmp0+tmp1 2493 0000179A BD032AE136 mov ebp, 36E12A03h ; @@def_csa 0,36E12A03h,-20ED7F9Ah ;-0.6 2494 ; mp3_csa_&nn&_cs 2495 0000179F F7ED imul ebp ; tmp2 = (tmp2*csa[0]) 2496 000017A1 89D5 mov ebp, edx 2497 000017A3 B8635631A8 mov eax, -57CEA99Dh ; mp3_csa_&nn&_ca-mp3_csa_&nn&_cs 2498 000017A8 F7EE imul esi ; tmp0 = (tmp2+(tmp0*csa[3])) 2499 000017AA 01EA add edx, ebp 2500 000017AC 8913 mov [ebx], edx ; [ebx+(nn)*4] 2501 000017AE B869AAF315 mov eax, 15F3AA69h ; mp3_csa_&nn&_ca+mp3_csa_&nn&_cs 2502 000017B3 F7EF imul edi ; tmp1 = (tmp2-(tmp1*csa[2])) 2503 000017B5 29D5 sub ebp, edx 2504 000017B7 896BFC mov [ebx-4], ebp ; [ebx-(nn+1)*4] 2505 000017BA 8B73F8 mov esi, [ebx-8] 2506 000017BD 8B7B04 mov edi, [ebx+4] 2507 000017C0 C1E602 shl esi, 2 2508 000017C3 C1E702 shl edi, 2 2509 000017C6 8D043E lea eax, [esi+edi] 2510 000017C9 BDFD756E38 mov ebp, 386E75FDh ; @@def_csa 1,386E75FDh,-1E30DB48h ;-0.535 2511 000017CE F7ED imul ebp 2512 000017D0 89D5 mov ebp, edx 2513 000017D2 B8BBAE60A9 mov eax, -569F5145h 2514 000017D7 F7EE imul esi 2515 000017D9 01EA add edx, ebp 2516 000017DB 895304 mov [ebx+4], edx ; [ebx+(nn)*4] 2517 000017DE B8B59A3D1A mov eax, 1A3D9AB5h 2518 000017E3 F7EF imul edi 2519 000017E5 29D5 sub ebp, edx 2520 000017E7 896BF8 mov [ebx-8], ebp ; [ebx-(nn+1)*4] 2521 000017EA 8B73F4 mov esi, [ebx-12] 2522 000017ED 8B7B08 mov edi, [ebx+8] 2523 000017F0 C1E602 shl esi, 2 2524 000017F3 C1E702 shl edi, 2 2525 000017F6 8D043E lea eax, [esi+edi] 2526 000017F9 BD3EB7C63C mov ebp, 3CC6B73Eh ; @@def_csa 2,3CC6B73Eh,-140E604Fh ;-0.33 2527 000017FE F7ED imul ebp 2528 00001800 89D5 mov ebp, edx 2529 00001802 B873E82AAF mov eax, -50D5178Dh 2530 00001807 F7EE imul esi 2531 00001809 01EA add edx, ebp 2532 0000180B 895308 mov [ebx+8], edx ; [ebx+(nn)*4] 2533 0000180E B8EF56B828 mov eax, 28B856EFh 2534 00001813 F7EF imul edi 2535 00001815 29D5 sub ebp, edx 2536 00001817 896BF4 mov [ebx-12], ebp ; [ebx-(nn+1)*4] 2537 0000181A 8B73F0 mov esi, [ebx-16] 2538 0000181D 8B7B0C mov edi, [ebx+12] 2539 00001820 C1E602 shl esi, 2 2540 00001823 C1E702 shl edi, 2 2541 00001826 8D043E lea eax, [esi+edi] 2542 00001829 BD55A0EE3E mov ebp, 3EEEA055h ; @@def_csa 3,3EEEA055h,-0BA47742h ;-0.185 2543 0000182E F7ED imul ebp 2544 00001830 89D5 mov ebp, edx 2545 00001832 B869E86CB5 mov eax, -4A931797h 2546 00001837 F7EE imul esi 2547 00001839 01EA add edx, ebp 2548 0000183B 89530C mov [ebx+12], edx ; [ebx+(nn)*4] 2549 0000183E B813294A33 mov eax, 334A2913h 2550 00001843 F7EF imul edi 2551 00001845 29D5 sub ebp, edx 2552 00001847 896BF0 mov [ebx-16], ebp ; [ebx-(nn+1)*4] 2553 0000184A 8B73EC mov esi, [ebx-20] ; ebx-(nn+1)*4] ; tmp0 = ptr[-nn-1] 2554 0000184D 8B7B10 mov edi, [ebx+16] ; [ebx+(nn)*4] ; tmp1 = ptr[+nn] 2555 00001850 C1E602 shl esi, 2 2556 00001853 C1E702 shl edi, 2 2557 00001856 8D043E lea eax, [esi+edi] ; tmp2 = tmp0+tmp1 2558 00001859 BD5C90B63F mov ebp, 3FB6905Ch ; @@def_csa 4,3FB6905Ch,-060D80E9h ;-0.095 2559 0000185E F7ED imul ebp ; tmp2 = (tmp2*csa[0]) 2560 00001860 89D5 mov ebp, edx 2561 00001862 B8BBEE3BBA mov eax, -45C41145h 2562 00001867 F7EE imul esi ; tmp0 = (tmp2+(tmp0*csa[3])) 2563 00001869 01EA add edx, ebp 2564 0000186B 895310 mov [ebx+16], edx ; [ebx+(nn)*4] 2565 0000186E B8730FA939 mov eax, 39A90F73h 2566 00001873 F7EF imul edi ; tmp1 = (tmp2-(tmp1*csa[2])) 2567 00001875 29D5 sub ebp, edx 2568 00001877 896BEC mov [ebx-20], ebp ; [ebx-(nn+1)*4] 2569 0000187A 8B73E8 mov esi, [ebx-24] 2570 0000187D 8B7B14 mov edi, [ebx+20] 2571 00001880 C1E602 shl esi, 2 2572 00001883 C1E702 shl edi, 2 2573 00001886 8D043E lea eax, [esi+edi] 2574 00001889 BD213FF23F mov ebp, 3FF23F21h ; @@def_csa 5,3FF23F21h,-029F2E1Bh ;-0.041 2575 0000188E F7ED imul ebp 2576 00001890 89D5 mov ebp, edx 2577 00001892 B8C4926EBD mov eax, -42916D3Ch 2578 00001897 F7EE imul esi 2579 00001899 01EA add edx, ebp 2580 0000189B 895314 mov [ebx+20], edx ; [ebx+(nn)*4] 2581 0000189E B80611533D mov eax, 3D531106h 2582 000018A3 F7EF imul edi 2583 000018A5 29D5 sub ebp, edx 2584 000018A7 896BE8 mov [ebx-24], ebp ; [ebx-(nn+1)*4] 2585 000018AA 8B73E4 mov esi, [ebx-28] 2586 000018AD 8B7B18 mov edi, [ebx+24] 2587 000018B0 C1E602 shl esi, 2 2588 000018B3 C1E702 shl edi, 2 2589 000018B6 8D043E lea eax, [esi+edi] 2590 000018B9 BD3259FE3F mov ebp, 3FFE5932h ; @@def_csa 6,3FFE5932h,-00E8A11Ch ;-0.0142 2591 000018BE F7ED imul ebp 2592 000018C0 89D5 mov ebp, edx 2593 000018C2 B8B20519BF mov eax, -40E6FA4Eh 2594 000018C7 F7EE imul esi 2595 000018C9 01EA add edx, ebp 2596 000018CB 895318 mov [ebx+24], edx ; [ebx+(nn)*4] 2597 000018CE B816B8153F mov eax, 3F15B816h 2598 000018D3 F7EF imul edi 2599 000018D5 29D5 sub ebp, edx 2600 000018D7 896BE4 mov [ebx-28], ebp ; [ebx-(nn+1)*4] 2601 000018DA 8B73E0 mov esi, [ebx-32] 2602 000018DD 8B7B1C mov edi, [ebx+28] 2603 000018E0 C1E602 shl esi, 2 2604 000018E3 C1E702 shl edi, 2 2605 000018E6 8D043E lea eax, [esi+edi] 2606 000018E9 BD4BE3FF3F mov ebp, 3FFFE34Bh ; @@def_csa 7,3FFFE34Bh,-003C9ED1h ;-0.0037 2607 000018EE F7ED imul ebp 2608 000018F0 89D5 mov ebp, edx 2609 000018F2 B8E47DC3BF mov eax, -403C821Ch 2610 000018F7 F7EE imul esi 2611 000018F9 01EA add edx, ebp 2612 000018FB 89531C mov [ebx+28], edx ; [ebx+(nn)*4] 2613 000018FE B87A44C33F mov eax, 3FC3447Ah 2614 00001903 F7EF imul edi 2615 00001905 29D5 sub ebp, edx 2616 00001907 896BE0 mov [ebx-32], ebp ; [ebx-(nn+1)*4] 2617 0000190A 49 dec ecx 2618 0000190B 0F8578FEFFFF jnz .lop 2619 00001911 5B pop ebx 2620 2621 .no_antialias: 2622 00001912 F605[54760000]10 test byte [cpuid_flags], 10h 2623 00001919 740E jz short .no_rdtsc_supported@ 2624 0000191B 0F31 rdtsc 2625 0000191D 0105[54770000] add [rdtsc_antialias], eax 2626 00001923 1115[58770000] adc [rdtsc_antialias+4], edx 2627 2628 .no_rdtsc_supported@: 2629 00001929 C3 retn 2630 2631 2632 ; =============== S U B R O U T I N E ======================================= 2633 2634 2635 mp3_imdct36: 2636 0000192A 8B06 mov eax, [esi] ; in: esi=src (sb_hybrid) 2637 ; in: edi=dst (sb_samples) 2638 ; in: ebx=buf (mdct_buf) 2639 ; in: ebp=win (mdct_win) 2640 ; 2641 ; [esi+0*4] 2642 0000192C 8B5604 mov edx, [esi+4] ; IRP i,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 2643 0000192F 01D0 add eax, edx ; IF i AND 1 (*) ; mov edx,[esi+i*4] ; val[i] 2644 ; add val[i-1] 2645 00001931 894604 mov [esi+4], eax ; IF i GT 1 2646 ; add ecx,eax ; add val[i-2] 2647 ; mov [esi+(i)*4],ecx 2648 ; ELSE 2649 ; mov [esi+(i)*4],eax 2650 00001934 89C1 mov ecx, eax ; memorize as val[i-2] 2651 00001936 8B4608 mov eax, [esi+8] ; ELSE (*) ; [esi+i*4] ; val[i] 2652 00001939 01C2 add edx, eax ; add val[i-1] 2653 0000193B 895608 mov [esi+8], edx ; [esi+(i)*4 2654 0000193E 8B560C mov edx, [esi+12] 2655 00001941 01D0 add eax, edx 2656 00001943 01C1 add ecx, eax 2657 00001945 894E0C mov [esi+12], ecx 2658 00001948 89C1 mov ecx, eax 2659 0000194A 8B4610 mov eax, [esi+16] 2660 0000194D 01C2 add edx, eax 2661 0000194F 895610 mov [esi+16], edx 2662 00001952 8B5614 mov edx, [esi+20] 2663 00001955 01D0 add eax, edx 2664 00001957 01C1 add ecx, eax 2665 00001959 894E14 mov [esi+20], ecx 2666 0000195C 89C1 mov ecx, eax 2667 0000195E 8B4618 mov eax, [esi+24] 2668 00001961 01C2 add edx, eax 2669 00001963 895618 mov [esi+24], edx 2670 00001966 8B561C mov edx, [esi+28] 2671 00001969 01D0 add eax, edx 2672 0000196B 01C1 add ecx, eax 2673 0000196D 894E1C mov [esi+28], ecx 2674 00001970 89C1 mov ecx, eax 2675 00001972 8B4620 mov eax, [esi+32] 2676 00001975 01C2 add edx, eax 2677 00001977 895620 mov [esi+32], edx 2678 0000197A 8B5624 mov edx, [esi+36] 2679 0000197D 01D0 add eax, edx 2680 0000197F 01C1 add ecx, eax 2681 00001981 894E24 mov [esi+36], ecx 2682 00001984 89C1 mov ecx, eax 2683 00001986 8B4628 mov eax, [esi+40] 2684 00001989 01C2 add edx, eax 2685 0000198B 895628 mov [esi+40], edx 2686 0000198E 8B562C mov edx, [esi+44] 2687 00001991 01D0 add eax, edx 2688 00001993 01C1 add ecx, eax 2689 00001995 894E2C mov [esi+44], ecx 2690 00001998 89C1 mov ecx, eax 2691 0000199A 8B4630 mov eax, [esi+48] 2692 0000199D 01C2 add edx, eax 2693 0000199F 895630 mov [esi+48], edx 2694 000019A2 8B5634 mov edx, [esi+52] 2695 000019A5 01D0 add eax, edx 2696 000019A7 01C1 add ecx, eax 2697 000019A9 894E34 mov [esi+52], ecx 2698 000019AC 89C1 mov ecx, eax 2699 000019AE 8B4638 mov eax, [esi+56] 2700 000019B1 01C2 add edx, eax 2701 000019B3 895638 mov [esi+56], edx 2702 000019B6 8B563C mov edx, [esi+60] 2703 000019B9 01D0 add eax, edx 2704 000019BB 01C1 add ecx, eax 2705 000019BD 894E3C mov [esi+60], ecx 2706 000019C0 89C1 mov ecx, eax 2707 000019C2 8B4640 mov eax, [esi+64] 2708 000019C5 01C2 add edx, eax 2709 000019C7 895640 mov [esi+64], edx 2710 000019CA 8B5644 mov edx, [esi+68] 2711 000019CD 01D0 add eax, edx 2712 000019CF 01C1 add ecx, eax 2713 000019D1 894E44 mov [esi+68], ecx 2714 000019D4 89C1 mov ecx, eax 2715 000019D6 53 push ebx 2716 000019D7 55 push ebp 2717 000019D8 57 push edi 2718 000019D9 8B0E mov ecx, [esi] ; IRP j,0,1 2719 000019DB 8B5E30 mov ebx, [esi+48] ; t1 = [esi+(0*2+j)*4], t0 = [esi+(6*2+j)*4] 2720 000019DE 8B7E20 mov edi, [esi+32] ; t2 = [esi+(4*2+j)*4] 2721 000019E1 037E40 add edi, [esi+64] ; + [esi+(8*2+j)*4] 2722 000019E4 2B7E10 sub edi, [esi+16] ; - [esi+(2*2+j)*4] 2723 000019E7 8D2C4B lea ebp, [ebx+ecx*2] ; t2 = src[4*2+j] + src[8*2+j] - src[2*2+j] 2724 ; t3 = [t1*2+t0] 2725 000019EA D1FD sar ebp, 1 ; sar @@t3,1 2726 000019EC 29D9 sub ecx, ebx ; sub @@t1,@@t0 2727 000019EE 89C8 mov eax, ecx ; @@SUM [@@tmp+(16+j)*4],@@t1,add,@@t2 2728 000019F0 01F8 add eax, edi 2729 000019F2 A3[88290500] mov [_@@@tmp+40h], eax ; [@@tmp+(16+j)*4] 2730 000019F7 D1FF sar edi, 1 ; sar @@t2,1 2731 000019F9 89C8 mov eax, ecx ; @@SUM [@@tmp+(6+j)*4],@@t1,sub,@@t2 2732 000019FB 29F8 sub eax, edi 2733 000019FD A3[60290500] mov [_@@@tmp+18h], eax ; [@@tmp+(6+j)*4] 2734 00001A02 8B4610 mov eax, [esi+16] ; [esi+(4*2+j)*4] 2735 00001A05 034620 add eax, [esi+32] ; [esi+(2*2+j)*4] 2736 00001A08 D1E0 shl eax, 1 2737 00001A0A BA0AD94778 mov edx, 7847D90Ah ; C2 2738 00001A0F F7EA imul edx 2739 00001A11 89D3 mov ebx, edx 2740 00001A13 8B4620 mov eax, [esi+32] 2741 00001A16 2B4640 sub eax, [esi+64] 2742 00001A19 BA04CB8BD3 mov edx, 0D38BCB04h ; negC8 2743 00001A1E F7EA imul edx 2744 00001A20 89D1 mov ecx, edx 2745 00001A22 8B4610 mov eax, [esi+16] 2746 00001A25 034640 add eax, [esi+64] 2747 00001A28 D1E0 shl eax, 1 2748 00001A2A BA7541F29D mov edx, 9DF24175h ; negC4 2749 00001A2F F7EA imul edx 2750 00001A31 89E8 mov eax, ebp 2751 00001A33 01D8 add eax, ebx 2752 00001A35 01C8 add eax, ecx 2753 00001A37 A3[50290500] mov [_@@@tmp+8], eax 2754 00001A3C 89E8 mov eax, ebp 2755 00001A3E 29D8 sub eax, ebx 2756 00001A40 29D0 sub eax, edx 2757 00001A42 A3[70290500] mov [_@@@tmp+28h], eax 2758 00001A47 89E8 mov eax, ebp 2759 00001A49 01D0 add eax, edx 2760 00001A4B 29C8 sub eax, ecx 2761 00001A4D A3[80290500] mov [_@@@tmp+38h], eax 2762 00001A52 8B4628 mov eax, [esi+40] 2763 00001A55 034638 add eax, [esi+56] 2764 00001A58 2B4608 sub eax, [esi+8] 2765 00001A5B D1E0 shl eax, 1 2766 00001A5D BA5F142691 mov edx, 9126145Fh ; negC3 2767 00001A62 F7EA imul edx 2768 00001A64 8915[58290500] mov [_@@@tmp+10h], edx 2769 00001A6A 8B4608 mov eax, [esi+8] 2770 00001A6D 034628 add eax, [esi+40] 2771 00001A70 D1E0 shl eax, 1 2772 00001A72 BA332E0E7E mov edx, 7E0E2E33h ; C1 2773 00001A77 F7EA imul edx 2774 00001A79 89D7 mov edi, edx 2775 00001A7B 8B4628 mov eax, [esi+40] 2776 00001A7E 2B4638 sub eax, [esi+56] 2777 00001A81 BA2E5E71A8 mov edx, 0A8715E2Eh ; negC7 2778 00001A86 F7EA imul edx 2779 00001A88 89D5 mov ebp, edx 2780 00001A8A 8B4608 mov eax, [esi+8] 2781 00001A8D 034638 add eax, [esi+56] 2782 00001A90 D1E0 shl eax, 1 2783 00001A92 BAB822B9AD mov edx, 0ADB922B8h ; negC5 2784 00001A97 F7EA imul edx 2785 00001A99 89D1 mov ecx, edx 2786 00001A9B 8B4618 mov eax, [esi+24] 2787 00001A9E D1E0 shl eax, 1 2788 00001AA0 BAA2EBD96E mov edx, 6ED9EBA2h ; C3 2789 00001AA5 F7EA imul edx 2790 00001AA7 89E8 mov eax, ebp 2791 00001AA9 01F8 add eax, edi 2792 00001AAB 01D0 add eax, edx 2793 00001AAD A3[48290500] mov [_@@@tmp], eax 2794 00001AB2 89E8 mov eax, ebp 2795 00001AB4 29C8 sub eax, ecx 2796 00001AB6 29D0 sub eax, edx 2797 00001AB8 A3[68290500] mov [_@@@tmp+20h], eax 2798 00001ABD 89F8 mov eax, edi 2799 00001ABF 01C8 add eax, ecx 2800 00001AC1 29D0 sub eax, edx 2801 00001AC3 A3[78290500] mov [_@@@tmp+30h], eax 2802 00001AC8 8B4E04 mov ecx, [esi+4] 2803 00001ACB 8B5E34 mov ebx, [esi+52] 2804 00001ACE 8B7E24 mov edi, [esi+36] 2805 00001AD1 037E44 add edi, [esi+68] 2806 00001AD4 2B7E14 sub edi, [esi+20] 2807 00001AD7 8D2C4B lea ebp, [ebx+ecx*2] 2808 00001ADA D1FD sar ebp, 1 2809 00001ADC 29D9 sub ecx, ebx 2810 00001ADE 89C8 mov eax, ecx 2811 00001AE0 01F8 add eax, edi 2812 00001AE2 A3[8C290500] mov [_@@@tmp+44h], eax 2813 00001AE7 D1FF sar edi, 1 2814 00001AE9 89C8 mov eax, ecx 2815 00001AEB 29F8 sub eax, edi 2816 00001AED A3[64290500] mov [_@@@tmp+1Ch], eax 2817 00001AF2 8B4614 mov eax, [esi+20] ; t0 = MULH(2*(src[2*2+j]+src[4*2+j]),C2) 2818 00001AF5 034624 add eax, [esi+36] 2819 00001AF8 D1E0 shl eax, 1 2820 00001AFA BA0AD94778 mov edx, 7847D90Ah ; C2 2821 00001AFF F7EA imul edx 2822 00001B01 89D3 mov ebx, edx 2823 00001B03 8B4624 mov eax, [esi+36] ; t1 = MULH(src[4*2+j]-src[8*2+j],negC8) 2824 00001B06 2B4644 sub eax, [esi+68] 2825 00001B09 BA04CB8BD3 mov edx, 0D38BCB04h ; negC8 2826 00001B0E F7EA imul edx 2827 00001B10 89D1 mov ecx, edx 2828 00001B12 8B4614 mov eax, [esi+20] ; t2 = MULH(2*(src[2*2+j]+src[8*2+j]),negC4) 2829 00001B15 034644 add eax, [esi+68] 2830 00001B18 D1E0 shl eax, 1 2831 00001B1A BA7541F29D mov edx, 9DF24175h ; negC4 2832 00001B1F F7EA imul edx 2833 00001B21 89E8 mov eax, ebp ; tmp[2+j] = t3+t0+t1 2834 00001B23 01D8 add eax, ebx 2835 00001B25 01C8 add eax, ecx 2836 00001B27 A3[54290500] mov [_@@@tmp+0Ch], eax 2837 00001B2C 89E8 mov eax, ebp ; tmp[10+j] = t3-t0-t2 2838 00001B2E 29D8 sub eax, ebx 2839 00001B30 29D0 sub eax, edx 2840 00001B32 A3[74290500] mov [_@@@tmp+2Ch], eax 2841 00001B37 89E8 mov eax, ebp ; tmp[14+j] = t3+t2-t1 2842 00001B39 01D0 add eax, edx 2843 00001B3B 29C8 sub eax, ecx 2844 00001B3D A3[84290500] mov [_@@@tmp+3Ch], eax 2845 00001B42 8B462C mov eax, [esi+44] ; tmp[4+j] = MULH(2*(src[5*2+j]+src[7*2+j]-src[1*2+j]),negC3) 2846 00001B45 03463C add eax, [esi+60] 2847 00001B48 2B460C sub eax, [esi+12] 2848 00001B4B D1E0 shl eax, 1 2849 00001B4D BA5F142691 mov edx, 9126145Fh ; negC3 2850 00001B52 F7EA imul edx 2851 00001B54 8915[5C290500] mov [_@@@tmp+14h], edx 2852 00001B5A 8B460C mov eax, [esi+12] ; @@MULH @@t2,[esi+(1*2+j)*4],add,[esi+(5*2+j)*4],-,- ,1,C1,- 2853 ; t2 = MULH(2*(src[1*2+j],add,src[5*2+j]),-,-,1,C1) 2854 00001B5D 03462C add eax, [esi+44] 2855 00001B60 D1E0 shl eax, 1 2856 00001B62 BA332E0E7E mov edx, 7E0E2E33h ; C1 2857 00001B67 F7EA imul edx 2858 00001B69 89D7 mov edi, edx 2859 00001B6B 8B462C mov eax, [esi+44] ; @@MULH @@t3,[esi+(5*2+j)*4],sub,[esi+(7*2+j)*4],-,-, 2860 ; ,0,negC7,- 2861 ; 2862 ; t3 = MULH( src[5*2+j],sub,src[7*2+j],-,-,0,negC7) 2863 00001B6E 2B463C sub eax, [esi+60] 2864 00001B71 BA2E5E71A8 mov edx, 0A8715E2Eh ; negC7 2865 00001B76 F7EA imul edx 2866 00001B78 89D5 mov ebp, edx 2867 00001B7A 8B460C mov eax, [esi+12] ; t1 = MULH(2*(src[1*2+j],add,src[7*2+j]),-,-,1,negC5) 2868 00001B7D 03463C add eax, [esi+60] 2869 00001B80 D1E0 shl eax, 1 ; shift = 1 2870 00001B82 BAB822B9AD mov edx, 0ADB922B8h ; negC5 2871 00001B87 F7EA imul edx 2872 00001B89 89D1 mov ecx, edx 2873 00001B8B 8B461C mov eax, [esi+28] ; t0 = MULH(2*src[3*2+j],-,-,-,-,1,C3) 2874 00001B8E D1E0 shl eax, 1 2875 00001B90 BAA2EBD96E mov edx, 6ED9EBA2h ; C3 2876 00001B95 F7EA imul edx 2877 00001B97 89E8 mov eax, ebp 2878 00001B99 01F8 add eax, edi 2879 00001B9B 01D0 add eax, edx 2880 00001B9D A3[4C290500] mov [_@@@tmp+4], eax 2881 00001BA2 89E8 mov eax, ebp 2882 00001BA4 29C8 sub eax, ecx 2883 00001BA6 29D0 sub eax, edx 2884 00001BA8 A3[6C290500] mov [_@@@tmp+24h], eax 2885 00001BAD 89F8 mov eax, edi ; @@SUM [@@tmp+(12+j)*4],@@t2,add,@@t1,sub,edx 2886 00001BAF 01C8 add eax, ecx 2887 00001BB1 29D0 sub eax, edx 2888 00001BB3 A3[7C290500] mov [_@@@tmp+34h], eax 2889 00001BB8 5F pop edi 2890 00001BB9 5D pop ebp 2891 00001BBA 5B pop ebx 2892 00001BBB 56 push esi ; IRP j,0,1,2,3 ; j = 0 2893 00001BBC 8B15[48290500] mov edx, [_@@@tmp] ; t0 = [@@tmp+(j*4+0)*4] 2894 00001BC2 8B35[4C290500] mov esi, [_@@@tmp+4] ; t1 = [@@tmp+(j*4+1)*4] 2895 00001BC8 A1[50290500] mov eax, [_@@@tmp+8] ; t2 = [@@tmp+(j*4+2)*4] 2896 00001BCD 8B0D[54290500] mov ecx, [_@@@tmp+0Ch] ; t2 = [@@tmp+(j*4+3)*4] 2897 00001BD3 29D0 sub eax, edx ; s2 = t2 - t0 2898 00001BD5 8D1450 lea edx, [eax+edx*2] ; s0 = t2 + t0 2899 00001BD8 A3[40290500] mov [_@@s2], eax ; @@MULH esi,eax ,-,-,-,-,1,icos36h_&j,- 2900 ; s2 = MULH(s2*2, icos36h[j]) 2901 00001BDD 8915[3C290500] mov [_@@s0], edx 2902 00001BE3 29F1 sub ecx, esi 2903 00001BE5 8D0471 lea eax, [ecx+esi*2] 2904 00001BE8 D1E0 shl eax, 1 2905 00001BEA BA90953E40 mov edx, 403E9590h ; icos36h_0 2906 00001BEF F7EA imul edx 2907 00001BF1 89D6 mov esi, edx 2908 00001BF3 89C8 mov eax, ecx ; @@MULH @@s3,ecx,-,-,-,-,shift_for_8minus&j,icos36h_8minus&j,- 2909 ; s3 = MULL(s3,icos36[8-j]) ; <-- "MULL" with "icos36" 2910 00001BF5 C1E004 shl eax, 4 2911 00001BF8 BA2C2ACA5B mov edx, 5BCA2A2Ch ; icos36h_8 (8-0) 2912 00001BFD F7EA imul edx 2913 00001BFF 8915[44290500] mov [_@@s3], edx 2914 00001C05 8B0D[3C290500] mov ecx, [_@@s0] 2915 00001C0B 29F1 sub ecx, esi 2916 00001C0D 8D3471 lea esi, [ecx+esi*2] 2917 00001C10 8B4524 mov eax, [ebp+36] ; @@MULH [edi+(9+j)*SBLIMIT*4],[ebp+(9+j)*4], 2918 ; -,-,-,-,0,ecx,[ebx+(9+j)*4] 2919 ; out[(9+j)*SBLIMIT] = MULH(t0, win[9+j])+buf[9+j] 2920 00001C13 F7E9 imul ecx 2921 00001C15 035324 add edx, [ebx+36] ; [ebx+(9+j)*4] 2922 00001C18 899780040000 mov [edi+1152], edx ; SBLIMIT=32 ; 9*SBLIMIT*4 = 1152 2923 00001C1E 8B4520 mov eax, [ebp+32] ; @@MULH [edi+(8-j)*SBLIMIT*4],[ebp+(8-j)*4] 2924 ; ,-,-,-,-,0,ecx,[ebx+(8-j)*4] 2925 00001C21 F7E9 imul ecx 2926 00001C23 035320 add edx, [ebx+32] 2927 00001C26 899700040000 mov [edi+1024], edx ; SBLIMIT=32 ; 8*SBLIMIT*4 = 1024 2928 00001C2C 8B456C mov eax, [ebp+108] 2929 00001C2F F7EE imul esi 2930 00001C31 895324 mov [ebx+36], edx 2931 00001C34 8B4568 mov eax, [ebp+104] ; @@MULH [ebx+(8-j)*4],[ebp+(8-j+18)*4],-,-,-,-,0,esi,- 2932 00001C37 F7EE imul esi 2933 00001C39 895320 mov [ebx+32], edx 2934 00001C3C 8B0D[40290500] mov ecx, [_@@s2] 2935 00001C42 8B35[44290500] mov esi, [_@@s3] 2936 00001C48 29F1 sub ecx, esi ; t2 = s2 - s3 2937 00001C4A 8D3471 lea esi, [ecx+esi*2] ; t3 = s2 + s3 2938 00001C4D 8B4500 mov eax, [ebp+0] ; @@MULH [edi+(0+j)*SBLIMIT*4],[ebp+(0+j)*4], 2939 ; -,-,-,-,0,ecx,[ebx+(0+j)*4] 2940 00001C50 F7E9 imul ecx 2941 00001C52 0313 add edx, [ebx] 2942 00001C54 8917 mov [edi], edx 2943 00001C56 8B4544 mov eax, [ebp+68] ; @@MULH [edi+(17-j)*SBLIMIT*4],[ebp+(17-j)*4] 2944 ; ,-,-,-,-,0,ecx,[ebx+(17-j)*4] 2945 00001C59 F7E9 imul ecx 2946 00001C5B 035344 add edx, [ebx+68] 2947 00001C5E 899780080000 mov [edi+2176], edx ; 17*SBLIMIT*4 = 2176 2948 00001C64 8B4548 mov eax, [ebp+72] ; @@MULH [ebx+(0+j)*4],[ebp+(0+j+18)*4],-,-,-,-,0,esi,- 2949 00001C67 F7EE imul esi 2950 00001C69 8913 mov [ebx], edx 2951 00001C6B 8B858C000000 mov eax, [ebp+140] ; @@MULH [ebx+(17-j)*4],[ebp+(17-j+18)*4],-,-,-,-,0,esi,- 2952 00001C71 F7EE imul esi 2953 00001C73 895344 mov [ebx+68], edx 2954 00001C76 8B15[58290500] mov edx, [_@@@tmp+10h] ; IRP j,0,1,2,3 ; j = 1 2955 00001C7C 8B35[5C290500] mov esi, [_@@@tmp+14h] 2956 00001C82 A1[60290500] mov eax, [_@@@tmp+18h] 2957 00001C87 8B0D[64290500] mov ecx, [_@@@tmp+1Ch] 2958 00001C8D 29D0 sub eax, edx 2959 00001C8F 8D1450 lea edx, [eax+edx*2] 2960 00001C92 A3[40290500] mov [_@@s2], eax 2961 00001C97 8915[3C290500] mov [_@@s0], edx 2962 00001C9D 29F1 sub ecx, esi 2963 00001C9F 8D0471 lea eax, [ecx+esi*2] 2964 00001CA2 D1E0 shl eax, 1 2965 00001CA4 BA07F74142 mov edx, 4241F707h ; icos36h_1 2966 00001CA9 F7EA imul edx 2967 00001CAB 89D6 mov esi, edx 2968 00001CAD 89C8 mov eax, ecx 2969 00001CAF C1E002 shl eax, 2 2970 00001CB2 BA1E75A37B mov edx, 7BA3751Eh ; icos36h_7 (8-1) 2971 00001CB7 F7EA imul edx 2972 00001CB9 8915[44290500] mov [_@@s3], edx 2973 00001CBF 8B0D[3C290500] mov ecx, [_@@s0] 2974 00001CC5 29F1 sub ecx, esi 2975 00001CC7 8D3471 lea esi, [ecx+esi*2] 2976 00001CCA 8B4528 mov eax, [ebp+40] 2977 00001CCD F7E9 imul ecx 2978 00001CCF 035328 add edx, [ebx+40] 2979 00001CD2 899700050000 mov [edi+1280], edx 2980 00001CD8 8B451C mov eax, [ebp+28] 2981 00001CDB F7E9 imul ecx 2982 00001CDD 03531C add edx, [ebx+28] 2983 00001CE0 899780030000 mov [edi+896], edx 2984 00001CE6 8B4570 mov eax, [ebp+112] 2985 00001CE9 F7EE imul esi 2986 00001CEB 895328 mov [ebx+40], edx 2987 00001CEE 8B4564 mov eax, [ebp+100] 2988 00001CF1 F7EE imul esi 2989 00001CF3 89531C mov [ebx+28], edx 2990 00001CF6 8B0D[40290500] mov ecx, [_@@s2] 2991 00001CFC 8B35[44290500] mov esi, [_@@s3] 2992 00001D02 29F1 sub ecx, esi 2993 00001D04 8D3471 lea esi, [ecx+esi*2] 2994 00001D07 8B4504 mov eax, [ebp+4] 2995 00001D0A F7E9 imul ecx 2996 00001D0C 035304 add edx, [ebx+4] 2997 00001D0F 899780000000 mov [edi+128], edx 2998 00001D15 8B4540 mov eax, [ebp+64] 2999 00001D18 F7E9 imul ecx 3000 00001D1A 035340 add edx, [ebx+64] 3001 00001D1D 899700080000 mov [edi+2048], edx 3002 00001D23 8B454C mov eax, [ebp+76] 3003 00001D26 F7EE imul esi 3004 00001D28 895304 mov [ebx+4], edx 3005 00001D2B 8B8588000000 mov eax, [ebp+136] 3006 00001D31 F7EE imul esi 3007 00001D33 895340 mov [ebx+64], edx 3008 00001D36 8B15[68290500] mov edx, [_@@@tmp+20h] ; IRP j,0,1,2,3 ; j = 2 3009 00001D3C 8B35[6C290500] mov esi, [_@@@tmp+24h] 3010 00001D42 A1[70290500] mov eax, [_@@@tmp+28h] 3011 00001D47 8B0D[74290500] mov ecx, [_@@@tmp+2Ch] 3012 00001D4D 29D0 sub eax, edx 3013 00001D4F 8D1450 lea edx, [eax+edx*2] 3014 00001D52 A3[40290500] mov [_@@s2], eax 3015 00001D57 8915[3C290500] mov [_@@s0], edx 3016 00001D5D 29F1 sub ecx, esi 3017 00001D5F 8D0471 lea eax, [ecx+esi*2] 3018 00001D62 D1E0 shl eax, 1 3019 00001D64 BA6CBE9D46 mov edx, 469DBE6Ch ; icos36h_2 3020 00001D69 F7EA imul edx 3021 00001D6B 89D6 mov esi, edx 3022 00001D6D 89C8 mov eax, ecx 3023 00001D6F C1E002 shl eax, 2 3024 00001D72 BA62ECB74B mov edx, 4BB7EC62h ; icos36h_6 (8-2) 3025 00001D77 F7EA imul edx 3026 00001D79 8915[44290500] mov [_@@s3], edx 3027 00001D7F 8B0D[3C290500] mov ecx, [_@@s0] 3028 00001D85 29F1 sub ecx, esi 3029 00001D87 8D3471 lea esi, [ecx+esi*2] 3030 00001D8A 8B452C mov eax, [ebp+44] 3031 00001D8D F7E9 imul ecx 3032 00001D8F 03532C add edx, [ebx+44] 3033 00001D92 899780050000 mov [edi+1408], edx 3034 00001D98 8B4518 mov eax, [ebp+24] 3035 00001D9B F7E9 imul ecx 3036 00001D9D 035318 add edx, [ebx+24] 3037 00001DA0 899700030000 mov [edi+768], edx 3038 00001DA6 8B4574 mov eax, [ebp+116] 3039 00001DA9 F7EE imul esi 3040 00001DAB 89532C mov [ebx+44], edx 3041 00001DAE 8B4560 mov eax, [ebp+96] 3042 00001DB1 F7EE imul esi 3043 00001DB3 895318 mov [ebx+24], edx 3044 00001DB6 8B0D[40290500] mov ecx, [_@@s2] 3045 00001DBC 8B35[44290500] mov esi, [_@@s3] 3046 00001DC2 29F1 sub ecx, esi 3047 00001DC4 8D3471 lea esi, [ecx+esi*2] 3048 00001DC7 8B4508 mov eax, [ebp+8] 3049 00001DCA F7E9 imul ecx 3050 00001DCC 035308 add edx, [ebx+8] 3051 00001DCF 899700010000 mov [edi+256], edx 3052 00001DD5 8B453C mov eax, [ebp+60] 3053 00001DD8 F7E9 imul ecx 3054 00001DDA 03533C add edx, [ebx+60] 3055 00001DDD 899780070000 mov [edi+1920], edx 3056 00001DE3 8B4550 mov eax, [ebp+80] 3057 00001DE6 F7EE imul esi 3058 00001DE8 895308 mov [ebx+8], edx 3059 00001DEB 8B8584000000 mov eax, [ebp+132] 3060 00001DF1 F7EE imul esi 3061 00001DF3 89533C mov [ebx+60], edx 3062 00001DF6 8B15[78290500] mov edx, [_@@@tmp+30h] ; IRP j,0,1,2,3 ; j = 3 3063 00001DFC 8B35[7C290500] mov esi, [_@@@tmp+34h] 3064 00001E02 A1[80290500] mov eax, [_@@@tmp+38h] 3065 00001E07 8B0D[84290500] mov ecx, [_@@@tmp+3Ch] 3066 00001E0D 29D0 sub eax, edx 3067 00001E0F 8D1450 lea edx, [eax+edx*2] 3068 00001E12 A3[40290500] mov [_@@s2], eax 3069 00001E17 8915[3C290500] mov [_@@s0], edx 3070 00001E1D 29F1 sub ecx, esi 3071 00001E1F 8D0471 lea eax, [ecx+esi*2] 3072 00001E22 D1E0 shl eax, 1 3073 00001E24 BABE2B214E mov edx, 4E212BBEh ; icos36h_3 3074 00001E29 F7EA imul edx 3075 00001E2B 89D6 mov esi, edx 3076 00001E2D 89C8 mov eax, ecx 3077 00001E2F D1E0 shl eax, 1 3078 00001E31 BADFA1946F mov edx, 6F94A1DFh ; icos36h_5 (8-3) 3079 00001E36 F7EA imul edx 3080 00001E38 8915[44290500] mov [_@@s3], edx 3081 00001E3E 8B0D[3C290500] mov ecx, [_@@s0] 3082 00001E44 29F1 sub ecx, esi 3083 00001E46 8D3471 lea esi, [ecx+esi*2] 3084 00001E49 8B4530 mov eax, [ebp+48] 3085 00001E4C F7E9 imul ecx 3086 00001E4E 035330 add edx, [ebx+48] 3087 00001E51 899700060000 mov [edi+1536], edx 3088 00001E57 8B4514 mov eax, [ebp+20] 3089 00001E5A F7E9 imul ecx 3090 00001E5C 035314 add edx, [ebx+20] 3091 00001E5F 899780020000 mov [edi+640], edx 3092 00001E65 8B4578 mov eax, [ebp+120] 3093 00001E68 F7EE imul esi 3094 00001E6A 895330 mov [ebx+30h], edx 3095 00001E6D 8B455C mov eax, [ebp+92] 3096 00001E70 F7EE imul esi 3097 00001E72 895314 mov [ebx+20], edx 3098 00001E75 8B0D[40290500] mov ecx, [_@@s2] 3099 00001E7B 8B35[44290500] mov esi, [_@@s3] 3100 00001E81 29F1 sub ecx, esi 3101 00001E83 8D3471 lea esi, [ecx+esi*2] 3102 00001E86 8B450C mov eax, [ebp+12] 3103 00001E89 F7E9 imul ecx 3104 00001E8B 03530C add edx, [ebx+12] 3105 00001E8E 899780010000 mov [edi+384], edx 3106 00001E94 8B4538 mov eax, [ebp+56] 3107 00001E97 F7E9 imul ecx 3108 00001E99 035338 add edx, [ebx+56] 3109 00001E9C 899700070000 mov [edi+1792], edx 3110 00001EA2 8B4554 mov eax, [ebp+84] 3111 00001EA5 F7EE imul esi 3112 00001EA7 89530C mov [ebx+12], edx 3113 00001EAA 8B8580000000 mov eax, [ebp+128] 3114 00001EB0 F7EE imul esi 3115 00001EB2 895338 mov [ebx+56], edx 3116 00001EB5 8B0D[88290500] mov ecx, [_@@@tmp+40h] ; IRP j,4 3117 ; [@@tmp+(j*4+0)*4] 3118 00001EBB A1[8C290500] mov eax, [_@@@tmp+44h] ; [@@tmp+(j*4+1)*4] 3119 00001EC0 D1E0 shl eax, 1 3120 00001EC2 BA9A79825A mov edx, 5A82799Ah ; icos36h_4 (8-4) 3121 00001EC7 F7EA imul edx 3122 00001EC9 29D1 sub ecx, edx 3123 00001ECB 8D3451 lea esi, [ecx+edx*2] 3124 00001ECE 8B4534 mov eax, [ebp+52] ; @@MULH [edi+(9+j)*SBLIMIT*4],[ebp+(9+j)*4], 3125 ; -,-,-,-,0,ecx,[ebx+(9+j)*4] 3126 ; out[(9+4)*SBLIMIT] = MULH(t0,win[9+4])+buf[9+4] 3127 00001ED1 F7E9 imul ecx 3128 00001ED3 035334 add edx, [ebx+52] 3129 00001ED6 899780060000 mov [edi+1664], edx ; 13*SBLIMIT*4 = 1664 3130 00001EDC 8B4510 mov eax, [ebp+16] ; @MULH [edi+(8-j)*SBLIMIT*4],[ebp+(8-j)*4], 3131 ; -,-,-,-,0,ecx,[ebx+(8-j)*4] 3132 00001EDF F7E9 imul ecx 3133 00001EE1 035310 add edx, [ebx+16] 3134 00001EE4 899700020000 mov [edi+512], edx 3135 00001EEA 8B457C mov eax, [ebp+124] ; @@MULH [ebx+(9+j)*4],[ebp+(9+j+18)*4] ,-,-,-,-,0,esi,- 3136 00001EED F7EE imul esi 3137 00001EEF 895334 mov [ebx+52], edx 3138 00001EF2 8B4558 mov eax, [ebp+88] ; @@MULH [ebx+(8-j)*4],[ebp+(8-j+18)*4],-,-,-,-,0,esi,- 3139 00001EF5 F7EE imul esi 3140 00001EF7 895310 mov [ebx+16], edx 3141 00001EFA 5E pop esi 3142 00001EFB C3 retn 3143 3144 3145 ; =============== S U B R O U T I N E ======================================= 3146 3147 3148 mp3_imdct12: 3149 00001EFC 8B06 mov eax, [esi] ; in: esi=src - out: [out2_...] 3150 00001EFE A3[90290500] mov [_@@tmp0], eax ; IRP nn,0,1,2,3,4,5 3151 ; @@tmp&nn rd 1 3152 ; ENDM 3153 ; mov eax,[esi+0*3*4] ; = src[0*3] 3154 00001F03 8B560C mov edx, [esi+12] ; [esi+1*3*4] ; = src[1*3] 3155 00001F06 01D0 add eax, edx ; = src[0*3]+src[1*3] 3156 00001F08 A3[94290500] mov [_@@tmp1], eax 3157 00001F0D 8B4618 mov eax, [esi+24] 3158 00001F10 01C2 add edx, eax 3159 00001F12 8915[98290500] mov [_@@tmp2], edx 3160 00001F18 8B5624 mov edx, [esi+36] ; [esi+3*3*4] 3161 00001F1B 01D0 add eax, edx 3162 00001F1D A3[9C290500] mov [_@@tmp3], eax 3163 00001F22 8B4630 mov eax, [esi+48] 3164 00001F25 01C2 add edx, eax 3165 00001F27 8915[A0290500] mov [_@@tmp4], edx 3166 00001F2D 8B563C mov edx, [esi+60] ; [esi+5*3*4] 3167 00001F30 01D0 add eax, edx ; = src[4*3]+src[5*3] 3168 00001F32 0305[9C290500] add eax, [_@@tmp3] 3169 00001F38 A3[A4290500] mov [_@@tmp5], eax ; tmp5 = src[4*3]+src[5*3]+tmp3 3170 00001F3D 8B15[94290500] mov edx, [_@@tmp1] 3171 00001F43 0115[9C290500] add [_@@tmp3], edx 3172 00001F49 A1[98290500] mov eax, [_@@tmp2] ; @@MULH @@tmp2,@@tmp2,-,-,-,-,1,C3,- 3173 ; tmp2 = MULH(2*tmp2,C3) 3174 00001F4E D1E0 shl eax, 1 3175 00001F50 BAA2EBD96E mov edx, 6ED9EBA2h ; C3 3176 00001F55 F7EA imul edx 3177 00001F57 8915[98290500] mov [_@@tmp2], edx 3178 00001F5D A1[9C290500] mov eax, [_@@tmp3] ; @@MULH @@tmp3,@@tmp3,-,-,-,-,2,C3,- 3179 ; tmp3 = MULH(4*tmp3,C3) 3180 00001F62 C1E002 shl eax, 2 3181 00001F65 BAA2EBD96E mov edx, 6ED9EBA2h ; C3 3182 00001F6A F7EA imul edx 3183 00001F6C 8915[9C290500] mov [_@@tmp3], edx 3184 00001F72 A1[94290500] mov eax, [_@@tmp1] ; @@MULH edx,@@tmp1,sub,@@tmp5,-,-,1,icos36h_4,- 3185 00001F77 2B05[A4290500] sub eax, [_@@tmp5] ; t2 = MULH(2*(tmp1-tmp5),icos36h_4) 3186 00001F7D D1E0 shl eax, 1 3187 00001F7F BA9A79825A mov edx, 5A82799Ah ; icos36h_4 3188 00001F84 F7EA imul edx 3189 00001F86 A1[90290500] mov eax, [_@@tmp0] ; @@SUM eax,@@tmp0,sub,@@tmp4,-,- 3190 00001F8B 2B05[A0290500] sub eax, [_@@tmp4] ; t1 = tmp0 - tmp4 3191 00001F91 29D0 sub eax, edx ; @@CAST macro t1,t2,dst0,dst1,dst2,dst3 3192 ; sub t1,t2 ;t1-t2 3193 ; lea t2,[t1+t2*2] ;t1+t2 3194 ; mov dword ptr [mp3_out2_a&dst0],t1 ;t1-t2 3195 ; mov dword ptr [mp3_out2_b&dst0],t2 ;t1+t2 3196 ; endm 3197 00001F93 8D1450 lea edx, [eax+edx*2] ; @@CAST eax,edx,1,4,7,10 3198 ; out2[1,4,7,10]=t1-t2,t1-t2,t1+t2,t1+t2 3199 00001F96 A3[AC290500] mov [mp3_out2_a1], eax 3200 00001F9B 8915[B8290500] mov [mp3_out2_b1], edx 3201 00001FA1 A1[A0290500] mov eax, [_@@tmp4] 3202 00001FA6 8B15[94290500] mov edx, [_@@tmp1] 3203 00001FAC D1F8 sar eax, 1 3204 00001FAE D1E2 shl edx, 1 3205 00001FB0 0105[90290500] add [_@@tmp0], eax ; tmp0 = tmp0 + tmp4/2 3206 00001FB6 0115[A4290500] add [_@@tmp5], edx ; tmp5 = tmp5 + tmp1*2 3207 00001FBC A1[A4290500] mov eax, [_@@tmp5] ; @@MULH edx,@@tmp5,add,@@tmp3,-,-,0,icos36h_1,- 3208 00001FC1 0305[9C290500] add eax, [_@@tmp3] 3209 00001FC7 BA07F74142 mov edx, 4241F707h ; icos36h_1 3210 00001FCC F7EA imul edx 3211 00001FCE A1[90290500] mov eax, [_@@tmp0] ; @@SUM eax,@@tmp0,add,@@tmp2,-,- 3212 00001FD3 0305[98290500] add eax, [_@@tmp2] 3213 00001FD9 29D0 sub eax, edx ; @@CAST eax,edx,2,3,8,9 3214 00001FDB 8D1450 lea edx, [eax+edx*2] 3215 00001FDE A3[B0290500] mov [mp3_out2_a2], eax 3216 00001FE3 8915[BC290500] mov [mp3_out2_b2], edx 3217 00001FE9 A1[A4290500] mov eax, [_@@tmp5] ; @@MULH edx,@@tmp5,sub,@@tmp3,-,-,1,icos36h_7,- 3218 00001FEE 2B05[9C290500] sub eax, [_@@tmp3] 3219 00001FF4 D1E0 shl eax, 1 3220 00001FF6 BA1E75A37B mov edx, 7BA3751Eh ; icos36h_7 3221 00001FFB F7EA imul edx 3222 00001FFD A1[90290500] mov eax, [_@@tmp0] ; @@SUM eax,@@tmp0,sub,@@tmp2,-,- 3223 00002002 2B05[98290500] sub eax, [_@@tmp2] 3224 00002008 29D0 sub eax, edx ; @@CAST eax,edx,0,5,6,11 3225 0000200A 8D1450 lea edx, [eax+edx*2] 3226 0000200D A3[A8290500] mov [mp3_out2_a0], eax 3227 00002012 8915[B4290500] mov [mp3_out2_b0], edx 3228 00002018 C3 retn 3229 3230 3231 ; =============== S U B R O U T I N E ======================================= 3232 3233 3234 mp3_compute_imdct: 3235 00002019 F605[54760000]10 test byte [cpuid_flags], 10h ; in: ebx=granule 3236 00002020 740E jz short .no_rdtsc_supported ; timelog_start rdtsc_imdct 3237 00002022 0F31 rdtsc 3238 00002024 2905[6C770000] sub [rdtsc_imdct], eax 3239 0000202A 1915[70770000] sbb [rdtsc_imdct+4], edx 3240 3241 .no_rdtsc_supported: 3242 00002030 53 push ebx 3243 00002031 8B4B60 mov ecx, [ebx+96] ; [ebx+$mp3gr_num_nonzero_hybrids_div9] 3244 00002034 6BC109 imul eax, ecx, 9 3245 00002037 8DBC83A0000000 lea edi, [ebx+eax*4+160] ; [ebx+$mp3gr_sb_hybrid+eax*4] 3246 0000203E E322 jecxz .breakout 3247 3248 .scan_zero_lop: 3249 00002040 83EF24 sub edi, 36 ; index-9 3250 00002043 8B07 mov eax, [edi] ; [edi+0*4] 3251 00002045 0B4704 or eax, [edi+4] 3252 00002048 0B4708 or eax, [edi+8] 3253 0000204B 0B470C or eax, [edi+12] 3254 0000204E 0B4710 or eax, [edi+16] 3255 00002051 0B4714 or eax, [edi+20] 3256 00002054 0B4718 or eax, [edi+24] 3257 00002057 0B471C or eax, [edi+28] 3258 0000205A 0B4720 or eax, [edi+32] ; [edi+8*4] 3259 0000205D 7503 jnz short .breakout 3260 0000205F 49 dec ecx 3261 00002060 75DE jnz short .scan_zero_lop 3262 3263 .breakout: 3264 00002062 41 inc ecx ; div9+1 3265 00002063 D1E9 shr ecx, 1 ; div18 3266 00002065 890D[D4290500] mov [_@@sblimit], ecx 3267 0000206B 837B2C02 cmp dword [ebx+44], 2 ; [ebx+$mp3gr_block_type] 3268 0000206F 7505 jnz short .this_long_end 3269 00002071 8B4B30 mov ecx, [ebx+48] ; [ebx+$mp3gr_switch_point] 3270 00002074 D1E1 shl ecx, 1 ; 0,1 --> 0,2 3271 3272 .this_long_end: 3273 00002076 890D[D0290500] mov [_@@mdct_long_end], ecx 3274 0000207C 8B4330 mov eax, [ebx+48] ; [ebx+$mp3gr_switch_point] 3275 0000207F A3[D8290500] mov [_@@switch_point], eax 3276 00002084 8B432C mov eax, [ebx+44] ; [ebx+$mp3gr_block_type] 3277 00002087 69C090000000 imul eax, 144 ; 1*36*4 3278 0000208D A3[CC290500] mov [_@@www], eax 3279 00002092 8B0D[A0F40000] mov ecx, [mp3_curr_channel] 3280 00002098 A1[A4F40000] mov eax, [mp3_curr_granule] 3281 0000209D 69C900120000 imul ecx, 4608 ; 36*SBLIMIT*4 ; channel ; sb_samples[ch][gr*18] 3282 000020A3 69C000090000 imul eax, 2304 ; 18*SBLIMIT*4 ; frame=granule*18 3283 000020A9 8DBC01[00BE0000] lea edi, [mp3_sb_samples+ecx+eax] 3284 000020B0 8DB3A0000000 lea esi, [ebx+160] ; [ebx+$mp3gr_sb_hybrid] 3285 000020B6 A1[A0F40000] mov eax, [mp3_curr_channel] 3286 000020BB 69C000090000 imul eax, 2304 ; SBLIMIT*18*4 3287 000020C1 8D98[00E20000] lea ebx, [mp3_mdct_buf+eax] 3288 000020C7 F605[54760000]10 test byte [cpuid_flags], 10h 3289 000020CE 740E jz short .no_rdtsc_supported@ ; timelog_start rdtsc_imdct36 3290 000020D0 0F31 rdtsc 3291 000020D2 2905[84770000] sub [rdtsc_imdct36], eax 3292 000020D8 1915[88770000] sbb [rdtsc_imdct36+4], edx 3293 3294 .no_rdtsc_supported@: 3295 000020DE C705[C8290500]0000- mov dword [_@@@JJJ], 0 3295 000020E6 0000 3296 000020E8 833D[D0290500]00 cmp dword [_@@mdct_long_end], 0 3297 000020EF 744D jz short .imdct36_done 3298 3299 .imdct36_lop: 3300 000020F1 BD[30E30400] mov ebp, mp3_mdct_win ; for j=0 to mdct_long_end-1 3301 000020F6 833D[C8290500]02 cmp dword [_@@@JJJ], 2 3302 000020FD 19C0 sbb eax, eax 3303 000020FF 2305[D8290500] and eax, [_@@switch_point] 3304 00002105 7506 jnz short .this_window ; force window 0 3305 00002107 032D[CC290500] add ebp, [_@@www] ; mdct_win 3306 3307 .this_window: 3308 0000210D A1[C8290500] mov eax, [_@@@JJJ] 3309 00002112 D1E8 shr eax, 1 ; cy=0,1 3310 00002114 19C0 sbb eax, eax ; eax=0,FFFFFFFFh 3311 00002116 2540020000 and eax, 576 ; 4*36*4 3312 0000211B 01C5 add ebp, eax 3313 0000211D E808F8FFFF call mp3_imdct36 3314 00002122 83C704 add edi, 4 ; 1*4 ; dst 3315 00002125 83C648 add esi, 72 ; 18*4 ; sb_hybrid 3316 00002128 83C348 add ebx, 72 ; mdct_buf ; next 3317 0000212B FF05[C8290500] inc dword [_@@@JJJ] 3318 00002131 A1[C8290500] mov eax, [_@@@JJJ] 3319 00002136 3B05[D0290500] cmp eax, [_@@mdct_long_end] 3320 0000213C 72B3 jb short .imdct36_lop 3321 3322 .imdct36_done: 3323 0000213E F605[54760000]10 test byte [cpuid_flags], 10h 3324 00002145 740E jz short .no_rdtsc_supported@@ ; timelog_end rdtsc_imdct36 3325 00002147 0F31 rdtsc 3326 00002149 0105[84770000] add [rdtsc_imdct36], eax 3327 0000214F 1115[88770000] adc [rdtsc_imdct36+4], edx 3328 3329 .no_rdtsc_supported@@: 3330 00002155 F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_imdct12 3331 0000215C 740E jz short .no_rdtsc_supported@@@ 3332 0000215E 0F31 rdtsc 3333 00002160 2905[9C770000] sub [rdtsc_imdct12], eax 3334 00002166 1915[A0770000] sbb [rdtsc_imdct12+4], edx 3335 3336 .no_rdtsc_supported@@@: 3337 0000216C A1[C8290500] mov eax, [_@@@JJJ] 3338 00002171 3B05[D4290500] cmp eax, [_@@sblimit] 3339 00002177 0F83D7020000 jnb .imdct12_done 3340 3341 .imdct12_lop: 3342 0000217D BD[50E40400] mov ebp, (mp3_mdct_win+120h) ; for j=mdct_long_end to sblimit-1 3343 00002182 A1[C8290500] mov eax, [_@@@JJJ] 3344 00002187 D1E8 shr eax, 1 ; cy=0,1 3345 00002189 19C0 sbb eax, eax ; eax=0,FFFFFFFFh 3346 0000218B 2540020000 and eax, 576 ; 4*36*4 3347 00002190 01C5 add ebp, eax ; mdct_win 3348 00002192 8B03 mov eax, [ebx] ; IRP i,0,1,2,3,4,5 3349 00002194 8907 mov [edi], eax ; @@SUM [edi+i*SBLIMIT*4],[ebx+(i+0)*4],-,-,-,- 3350 00002196 8B4304 mov eax, [ebx+4] 3351 00002199 898780000000 mov [edi+128], eax 3352 0000219F 8B4308 mov eax, [ebx+8] 3353 000021A2 898700010000 mov [edi+256], eax 3354 000021A8 8B430C mov eax, [ebx+12] 3355 000021AB 898780010000 mov [edi+384], eax 3356 000021B1 8B4310 mov eax, [ebx+16] 3357 000021B4 898700020000 mov [edi+512], eax 3358 000021BA 8B4314 mov eax, [ebx+20] 3359 000021BD 898780020000 mov [edi+640], eax ; ENDM 3360 000021C3 81C700030000 add edi, 768 ; 6*SBLIMIT*4 3361 000021C9 E82EFDFFFF call mp3_imdct12 3362 000021CE A1[A8290500] mov eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5 3363 000021D3 8B5500 mov edx, [ebp+0] ; @@MULH [edi+i*SBLIMIT*4],[mp3_out2_a&i], 3364 ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(1*6+i)*4] 3365 000021D6 F7EA imul edx 3366 000021D8 035318 add edx, [ebx+24] 3367 000021DB 8917 mov [edi], edx 3368 000021DD A1[B4290500] mov eax, [mp3_out2_b0] ; @@MULH [ebx+(2*6+i)*4],[mp3_out2_b&i], 3369 ; -,-,-,-,0,[ebp+(i+6)*4],- 3370 000021E2 8B5518 mov edx, [ebp+24] 3371 000021E5 F7EA imul edx 3372 000021E7 895330 mov [ebx+48], edx 3373 000021EA A1[AC290500] mov eax, [mp3_out2_a1] ; i = 1 3374 000021EF 8B5504 mov edx, [ebp+4] 3375 000021F2 F7EA imul edx 3376 000021F4 03531C add edx, [ebx+28] 3377 000021F7 899780000000 mov [edi+128], edx 3378 000021FD A1[B8290500] mov eax, [mp3_out2_b1] 3379 00002202 8B551C mov edx, [ebp+28] 3380 00002205 F7EA imul edx 3381 00002207 895334 mov [ebx+52], edx 3382 0000220A A1[B0290500] mov eax, [mp3_out2_a2] ; i = 2 3383 0000220F 8B5508 mov edx, [ebp+8] 3384 00002212 F7EA imul edx 3385 00002214 035320 add edx, [ebx+32] 3386 00002217 899700010000 mov [edi+256], edx 3387 0000221D A1[BC290500] mov eax, [mp3_out2_b2] 3388 00002222 8B5520 mov edx, [ebp+32] 3389 00002225 F7EA imul edx 3390 00002227 895338 mov [ebx+56], edx 3391 0000222A A1[B0290500] mov eax, [mp3_out2_a2] ; i = 3 ; mp3_out2_a3 equ mp3_out2_a2 3392 0000222F 8B550C mov edx, [ebp+12] 3393 00002232 F7EA imul edx 3394 00002234 035324 add edx, [ebx+36] 3395 00002237 899780010000 mov [edi+384], edx 3396 0000223D A1[BC290500] mov eax, [mp3_out2_b2] ; mp3_out2_b3 equ mp3_out2_b2 3397 00002242 8B5524 mov edx, [ebp+36] 3398 00002245 F7EA imul edx 3399 00002247 89533C mov [ebx+60], edx 3400 0000224A A1[AC290500] mov eax, [mp3_out2_a1] ; i = 4 ; mp3_out2_a4 equ mp3_out2_a1 3401 0000224F 8B5510 mov edx, [ebp+16] 3402 00002252 F7EA imul edx 3403 00002254 035328 add edx, [ebx+40] 3404 00002257 899700020000 mov [edi+512], edx 3405 0000225D A1[B8290500] mov eax, [mp3_out2_b1] ; mp3_out2_b4 equ mp3_out2_b1 3406 00002262 8B5528 mov edx, [ebp+40] 3407 00002265 F7EA imul edx 3408 00002267 895340 mov [ebx+64], edx 3409 0000226A A1[A8290500] mov eax, [mp3_out2_a0] ; i = 5 ; mp3_out2_a5 equ mp3_out2_a0 3410 0000226F 8B5514 mov edx, [ebp+20] 3411 00002272 F7EA imul edx 3412 00002274 03532C add edx, [ebx+44] 3413 00002277 899780020000 mov [edi+640], edx 3414 0000227D A1[B4290500] mov eax, [mp3_out2_b0] ; mp3_out2_b5 equ mp3_out2_b0 3415 00002282 8B552C mov edx, [ebp+44] 3416 00002285 F7EA imul edx 3417 00002287 895344 mov [ebx+68], edx ; ENDM 3418 0000228A 81C700030000 add edi, 768 ; 6*SBLIMIT*4 3419 00002290 83C604 add esi, 4 ; sb_hybrid 3420 00002293 E864FCFFFF call mp3_imdct12 3421 00002298 A1[A8290500] mov eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5 3422 0000229D 8B5500 mov edx, [ebp+0] ; @@MULH [edi+i*SBLIMIT*4],[mp3_out2_a&i], 3423 ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(2*6+i)*4] 3424 000022A0 F7EA imul edx ; @@MULH [ebx+(0*6+i)*4],[mp3_out2_b&i], 3425 ; -,-,-,-,0,[ebp+(i+6)*4],- 3426 000022A2 035330 add edx, [ebx+48] 3427 000022A5 8917 mov [edi], edx 3428 000022A7 A1[B4290500] mov eax, [mp3_out2_b0] 3429 000022AC 8B5518 mov edx, [ebp+18h] 3430 000022AF F7EA imul edx 3431 000022B1 8913 mov [ebx], edx 3432 000022B3 A1[AC290500] mov eax, [mp3_out2_a1] ; i = 1 3433 000022B8 8B5504 mov edx, [ebp+4] 3434 000022BB F7EA imul edx 3435 000022BD 035334 add edx, [ebx+52] 3436 000022C0 899780000000 mov [edi+128], edx 3437 000022C6 A1[B8290500] mov eax, [mp3_out2_b1] 3438 000022CB 8B551C mov edx, [ebp+28] 3439 000022CE F7EA imul edx 3440 000022D0 895304 mov [ebx+4], edx 3441 000022D3 A1[B0290500] mov eax, [mp3_out2_a2] ; i = 2 3442 000022D8 8B5508 mov edx, [ebp+8] 3443 000022DB F7EA imul edx 3444 000022DD 035338 add edx, [ebx+56] 3445 000022E0 899700010000 mov [edi+256], edx 3446 000022E6 A1[BC290500] mov eax, [mp3_out2_b2] 3447 000022EB 8B5520 mov edx, [ebp+32] 3448 000022EE F7EA imul edx 3449 000022F0 895308 mov [ebx+8], edx 3450 000022F3 A1[B0290500] mov eax, [mp3_out2_a2] ; i = 3 3451 000022F8 8B550C mov edx, [ebp+12] 3452 000022FB F7EA imul edx 3453 000022FD 03533C add edx, [ebx+60] 3454 00002300 899780010000 mov [edi+384], edx 3455 00002306 A1[BC290500] mov eax, [mp3_out2_b2] 3456 0000230B 8B5524 mov edx, [ebp+36] 3457 0000230E F7EA imul edx 3458 00002310 89530C mov [ebx+12], edx 3459 00002313 A1[AC290500] mov eax, [mp3_out2_a1] ; i = 4 3460 00002318 8B5510 mov edx, [ebp+16] 3461 0000231B F7EA imul edx 3462 0000231D 035340 add edx, [ebx+64] 3463 00002320 899700020000 mov [edi+512], edx 3464 00002326 A1[B8290500] mov eax, [mp3_out2_b1] 3465 0000232B 8B5528 mov edx, [ebp+40] 3466 0000232E F7EA imul edx 3467 00002330 895310 mov [ebx+16], edx 3468 00002333 A1[A8290500] mov eax, [mp3_out2_a0] ; i = 5 3469 00002338 8B5514 mov edx, [ebp+20] 3470 0000233B F7EA imul edx 3471 0000233D 035344 add edx, [ebx+68] 3472 00002340 899780020000 mov [edi+640], edx 3473 00002346 A1[B4290500] mov eax, [mp3_out2_b0] 3474 0000234B 8B552C mov edx, [ebp+44] 3475 0000234E F7EA imul edx 3476 00002350 895314 mov [ebx+20], edx ; ENDM 3477 00002353 83C604 add esi, 4 3478 00002356 E8A1FBFFFF call mp3_imdct12 3479 0000235B A1[A8290500] mov eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5 3480 00002360 8B5500 mov edx, [ebp+0] ; @@MULH [ebx+(0*6+i)*4],[mp3_out2_a&i], 3481 ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(0*6+i)*4] 3482 00002363 F7EA imul edx 3483 00002365 0313 add edx, [ebx] 3484 00002367 8913 mov [ebx], edx 3485 00002369 A1[B4290500] mov eax, [mp3_out2_b0] ; @@MULH [ebx+(1*6+i)*4],[mp3_out2_b&i], 3486 ; -,-,-,-,0,[ebp+(i+6)*4],- 3487 0000236E 8B5518 mov edx, [ebp+24] 3488 00002371 F7EA imul edx 3489 00002373 895318 mov [ebx+24], edx 3490 00002376 C7433000000000 mov dword [ebx+48], 0 ; [ebx+(2*6+i)*4] 3491 0000237D A1[AC290500] mov eax, [mp3_out2_a1] ; i = 1 3492 00002382 8B5504 mov edx, [ebp+4] 3493 00002385 F7EA imul edx 3494 00002387 035304 add edx, [ebx+4] 3495 0000238A 895304 mov [ebx+4], edx 3496 0000238D A1[B8290500] mov eax, [mp3_out2_b1] 3497 00002392 8B551C mov edx, [ebp+28] 3498 00002395 F7EA imul edx 3499 00002397 89531C mov [ebx+28], edx 3500 0000239A C7433400000000 mov dword [ebx+52], 0 ; [ebx+(2*6+i)*4] 3501 000023A1 A1[B0290500] mov eax, [mp3_out2_a2] ; i = 2 3502 000023A6 8B5508 mov edx, [ebp+8] 3503 000023A9 F7EA imul edx 3504 000023AB 035308 add edx, [ebx+8] 3505 000023AE 895308 mov [ebx+8], edx 3506 000023B1 A1[BC290500] mov eax, [mp3_out2_b2] 3507 000023B6 8B5520 mov edx, [ebp+32] 3508 000023B9 F7EA imul edx 3509 000023BB 895320 mov [ebx+32], edx 3510 000023BE C7433800000000 mov dword [ebx+56], 0 3511 000023C5 A1[B0290500] mov eax, [mp3_out2_a2] ; i = 3 3512 000023CA 8B550C mov edx, [ebp+12] 3513 000023CD F7EA imul edx 3514 000023CF 03530C add edx, [ebx+0Ch] 3515 000023D2 89530C mov [ebx+12], edx 3516 000023D5 A1[BC290500] mov eax, [mp3_out2_b2] 3517 000023DA 8B5524 mov edx, [ebp+36] 3518 000023DD F7EA imul edx 3519 000023DF 895324 mov [ebx+36], edx 3520 000023E2 C7433C00000000 mov dword [ebx+60], 0 ; [ebx+(2*6+i)*4] 3521 000023E9 A1[AC290500] mov eax, [mp3_out2_a1] ; i = 4 3522 000023EE 8B5510 mov edx, [ebp+16] 3523 000023F1 F7EA imul edx 3524 000023F3 035310 add edx, [ebx+16] 3525 000023F6 895310 mov [ebx+16], edx 3526 000023F9 A1[B8290500] mov eax, [mp3_out2_b1] 3527 000023FE 8B5528 mov edx, [ebp+40] 3528 00002401 F7EA imul edx 3529 00002403 895328 mov [ebx+40], edx 3530 00002406 C7434000000000 mov dword [ebx+64], 0 3531 0000240D A1[A8290500] mov eax, [mp3_out2_a0] ; i = 5 3532 00002412 8B5514 mov edx, [ebp+20] 3533 00002415 F7EA imul edx 3534 00002417 035314 add edx, [ebx+20] 3535 0000241A 895314 mov [ebx+20], edx 3536 0000241D A1[B4290500] mov eax, [mp3_out2_b0] 3537 00002422 8B552C mov edx, [ebp+44] 3538 00002425 F7EA imul edx 3539 00002427 89532C mov [ebx+44], edx 3540 0000242A C7434400000000 mov dword [ebx+68], 0 ; [ebx+(2*6+i)*4] 3541 00002431 81C704FAFFFF add edi, -1532 ; (1*4) - (2*6*SBLIMIT*4) ; dst 3542 00002437 83C640 add esi, 64 ; 18*4 - (2*4) ; sb_hybrid 3543 0000243A 83C348 add ebx, 72 ; 18*4 ; mdct_buf 3544 0000243D FF05[C8290500] inc dword [_@@@JJJ] ; next 3545 00002443 A1[C8290500] mov eax, [_@@@JJJ] 3546 00002448 3B05[D4290500] cmp eax, [_@@sblimit] 3547 0000244E 0F8229FDFFFF jb .imdct12_lop 3548 3549 .imdct12_done: 3550 00002454 F605[54760000]10 test byte [cpuid_flags], 10h 3551 0000245B 740E jz short .no_rdtsc_supported@@@@ ; timelog_end rdtsc_imdct12 3552 0000245D 0F31 rdtsc 3553 0000245F 0105[9C770000] add [rdtsc_imdct12], eax 3554 00002465 1115[A0770000] adc [rdtsc_imdct12+4], edx 3555 3556 .no_rdtsc_supported@@@@: 3557 0000246B F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_imdct0 3558 00002472 740E jz short .no_rdtsc_supported@@@@@ 3559 00002474 0F31 rdtsc 3560 00002476 2905[B4770000] sub [rdtsc_imdct0], eax 3561 0000247C 1915[B8770000] sbb [rdtsc_imdct0+4], edx 3562 3563 .no_rdtsc_supported@@@@@: 3564 00002482 833D[C8290500]20 cmp dword [_@@@JJJ], 32 ; SBLIMIT 3565 00002489 0F8333010000 jnb .zero_outer_done 3566 3567 .zero_outer_lop: 3568 0000248F 8B03 mov eax, [ebx] ; zero bands 3569 ; IRP nn,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 3570 ; mov eax,dword ptr [ebx+nn*4] 3571 ; mov dword ptr [ebx+nn*4],0 3572 ; mov dword ptr [edi+nn*SBLIMIT*4],eax ; [dst] 3573 ; ENDM 3574 00002491 C70300000000 mov dword [ebx], 0 ; nn = 0 3575 00002497 8907 mov [edi], eax 3576 00002499 8B4304 mov eax, [ebx+4] ; nn = 1 3577 0000249C C7430400000000 mov dword [ebx+4], 0 3578 000024A3 898780000000 mov [edi+128], eax 3579 000024A9 8B4308 mov eax, [ebx+8] 3580 000024AC C7430800000000 mov dword [ebx+8], 0 3581 000024B3 898700010000 mov [edi+256], eax 3582 000024B9 8B430C mov eax, [ebx+12] 3583 000024BC C7430C00000000 mov dword [ebx+12], 0 3584 000024C3 898780010000 mov [edi+384], eax 3585 000024C9 8B4310 mov eax, [ebx+16] ; nn = 4 3586 000024CC C7431000000000 mov dword [ebx+16], 0 3587 000024D3 898700020000 mov [edi+512], eax 3588 000024D9 8B4314 mov eax, [ebx+20] 3589 000024DC C7431400000000 mov dword [ebx+20], 0 3590 000024E3 898780020000 mov [edi+640], eax ; [edi+5*SBLIMIT*4] 3591 000024E9 8B4318 mov eax, [ebx+24] 3592 000024EC C7431800000000 mov dword [ebx+24], 0 3593 000024F3 898700030000 mov [edi+768], eax 3594 000024F9 8B431C mov eax, [ebx+28] ; nn = 7 3595 000024FC C7431C00000000 mov dword [ebx+28], 0 3596 00002503 898780030000 mov [edi+896], eax 3597 00002509 8B4320 mov eax, [ebx+32] 3598 0000250C C7432000000000 mov dword [ebx+32], 0 3599 00002513 898700040000 mov [edi+1024], eax ; [edi+8*SBLIMIT*4] 3600 00002519 8B4324 mov eax, [ebx+36] 3601 0000251C C7432400000000 mov dword [ebx+36], 0 3602 00002523 898780040000 mov [edi+1152], eax 3603 00002529 8B4328 mov eax, [ebx+40] 3604 0000252C C7432800000000 mov dword [ebx+40], 0 3605 00002533 898700050000 mov [edi+1280], eax 3606 00002539 8B432C mov eax, [ebx+44] 3607 0000253C C7432C00000000 mov dword [ebx+44], 0 3608 00002543 898780050000 mov [edi+1408], eax 3609 00002549 8B4330 mov eax, [ebx+48] 3610 0000254C C7433000000000 mov dword [ebx+48], 0 3611 00002553 898700060000 mov [edi+1536], eax 3612 00002559 8B4334 mov eax, [ebx+52] 3613 0000255C C7433400000000 mov dword [ebx+52], 0 3614 00002563 898780060000 mov [edi+1664], eax 3615 00002569 8B4338 mov eax, [ebx+56] 3616 0000256C C7433800000000 mov dword [ebx+56], 0 3617 00002573 898700070000 mov [edi+1792], eax 3618 00002579 8B433C mov eax, [ebx+60] 3619 0000257C C7433C00000000 mov dword [ebx+60], 0 3620 00002583 898780070000 mov [edi+1920], eax 3621 00002589 8B4340 mov eax, [ebx+64] 3622 0000258C C7434000000000 mov dword [ebx+64], 0 ; [edi+16*SBLIMIT*4] 3623 00002593 898700080000 mov [edi+2048], eax 3624 00002599 8B4344 mov eax, [ebx+68] ; nn = 17 3625 0000259C C7434400000000 mov dword [ebx+68], 0 3626 000025A3 898780080000 mov [edi+2176], eax ; ENDM 3627 000025A9 83C348 add ebx, 72 ; 18*4 3628 000025AC 83C704 add edi, 4 3629 000025AF FF05[C8290500] inc dword [_@@@JJJ] 3630 000025B5 833D[C8290500]20 cmp dword [_@@@JJJ], 32 3631 000025BC 0F82CDFEFFFF jb .zero_outer_lop 3632 3633 .zero_outer_done: 3634 000025C2 F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_imdct0 3635 000025C9 740E jz short .no_rdtsc_supported@@@@@@ 3636 000025CB 0F31 rdtsc 3637 000025CD 0105[B4770000] add [rdtsc_imdct0], eax 3638 000025D3 1115[B8770000] adc [rdtsc_imdct0+4], edx 3639 3640 .no_rdtsc_supported@@@@@@: 3641 000025D9 5B pop ebx 3642 000025DA F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_imdct 3643 000025E1 740E jz short .no_rdtsc_supported@@@@@@@ 3644 000025E3 0F31 rdtsc 3645 000025E5 0105[6C770000] add [rdtsc_imdct], eax 3646 000025EB 1115[70770000] adc [rdtsc_imdct+4], edx 3647 3648 .no_rdtsc_supported@@@@@@@: 3649 000025F1 C3 retn 3650 3651 3652 ; =============== S U B R O U T I N E ======================================= 3653 3654 3655 mp3_dct32_shift_0: 3656 000025F2 8B06 mov eax, [esi] ; mp3_dct32_macro macro rate_shift ; rate_shift = 0 3657 000025F4 8B567C mov edx, [esi+124] ; @@BF macro a,b,sign,cos,shift 3658 ; @@BF 0,31,+,COS0_0,1 3659 ; @@need_a equ (rate_shift EQ 0) or (a LT 16) ; a = 0 3660 ; @@need_b equ (rate_shift EQ 0) or (b LT 16) ; b = 31 3661 ; IF @@need_a AND @@need_b ; rate_shift = 0 3662 ; mov eax,dword ptr [esi+a*4] 3663 ; mov edx,dword ptr [esi+b*4] 3664 ; add dword ptr [esi+a*4],edx 3665 000025F7 0116 add [esi], edx 3666 000025F9 29D0 sub eax, edx 3667 000025FB D1E0 shl eax, 1 ; shl eax,shift 3668 ; (needed when COS.fraction is less than 32bit) 3669 000025FD BA51C21340 mov edx, 4013C251h ; sign&&cos ; +COS0_0 = 4013C251h 3670 00002602 F7EA imul edx 3671 00002604 89567C mov [esi+124], edx ; [esi+b*4] ; upper 32bit of multiply result 3672 00002607 8B463C mov eax, [esi+60] ; @@BF 15,16,+,COS0_15,5 3673 ; [esi+a*4] 3674 0000260A 8B5640 mov edx, [esi+64] ; [esi+b*4] 3675 0000260D 01563C add [esi+60], edx ; [esi+a*4] 3676 00002610 29D0 sub eax, edx 3677 00002612 C1E005 shl eax, 5 ; shl eax,shift 3678 00002615 BAFB228551 mov edx, 518522FBh ; sign&&cos ; +COS0_15 = 518522FBh 3679 0000261A F7EA imul edx 3680 0000261C 895640 mov [esi+64], edx ; [esi+b*4] 3681 0000261F 8B06 mov eax, [esi] ; @@BF 0,15,+,COS1_0,1 3682 00002621 8B563C mov edx, [esi+60] 3683 00002624 0116 add [esi], edx 3684 00002626 29D0 sub eax, edx 3685 00002628 D1E0 shl eax, 1 3686 0000262A BA72464F40 mov edx, 404F4672h ; +COS1_0 3687 0000262F F7EA imul edx 3688 00002631 89563C mov [esi+60], edx 3689 00002634 8B4640 mov eax, [esi+64] ; @@BF 16,31,-,COS1_0,1 3690 00002637 8B567C mov edx, [esi+124] 3691 0000263A 015640 add [esi+64], edx 3692 0000263D 29D0 sub eax, edx 3693 0000263F D1E0 shl eax, 1 3694 00002641 BA8EB9B0BF mov edx, 0BFB0B98Eh ; -COS1_0 3695 00002646 F7EA imul edx 3696 00002648 89567C mov [esi+124], edx 3697 0000264B 8B461C mov eax, [esi+28] ; @@BF 7,24,+,COS0_7,1 3698 0000264E 8B5660 mov edx, [esi+96] 3699 00002651 01561C add [esi+28], edx 3700 00002654 29D0 sub eax, edx 3701 00002656 D1E0 shl eax, 1 3702 00002658 BAA71E6056 mov edx, 56601EA7h 3703 0000265D F7EA imul edx 3704 0000265F 895660 mov [esi+96], edx 3705 00002662 8B4620 mov eax, [esi+32] ; @@BF 8,23,+,COS0_8,1 3706 00002665 8B565C mov edx, [esi+92] 3707 00002668 015620 add [esi+32], edx 3708 0000266B 29D0 sub eax, edx 3709 0000266D D1E0 shl eax, 1 3710 0000266F BAECF64C5F mov edx, 5F4CF6ECh 3711 00002674 F7EA imul edx 3712 00002676 89565C mov [esi+92], edx 3713 00002679 8B461C mov eax, [esi+28] ; @@BF 7,8,+,COS1_7,4 3714 0000267C 8B5620 mov edx, [esi+32] 3715 0000267F 01561C add [esi+28], edx 3716 00002682 29D0 sub eax, edx 3717 00002684 C1E004 shl eax, 4 3718 00002687 BA044E9E51 mov edx, 519E4E04h 3719 0000268C F7EA imul edx 3720 0000268E 895620 mov [esi+32], edx 3721 00002691 8B465C mov eax, [esi+92] ; @@BF 23,24,-,COS1_7,4 3722 00002694 8B5660 mov edx, [esi+96] 3723 00002697 01565C add [esi+92], edx 3724 0000269A 29D0 sub eax, edx 3725 0000269C C1E004 shl eax, 4 3726 0000269F BAFCB161AE mov edx, 0AE61B1FCh 3727 000026A4 F7EA imul edx 3728 000026A6 895660 mov [esi+96], edx 3729 000026A9 8B06 mov eax, [esi] ; @@BF 0,7,+,COS2_0,1 3730 000026AB 8B561C mov edx, [esi+28] 3731 000026AE 0116 add [esi], edx 3732 000026B0 29D0 sub eax, edx 3733 000026B2 D1E0 shl eax, 1 3734 000026B4 BA46FB4041 mov edx, 4140FB46h 3735 000026B9 F7EA imul edx 3736 000026BB 89561C mov [esi+28], edx 3737 000026BE 8B4620 mov eax, [esi+32] ; @@BF 8,15,-,COS2_0,1 3738 000026C1 8B563C mov edx, [esi+60] 3739 000026C4 015620 add [esi+32], edx 3740 000026C7 29D0 sub eax, edx 3741 000026C9 D1E0 shl eax, 1 3742 000026CB BABA04BFBE mov edx, 0BEBF04BAh 3743 000026D0 F7EA imul edx 3744 000026D2 89563C mov [esi+60], edx 3745 000026D5 8B4640 mov eax, [esi+64] ; @@BF 16,23,+,COS2_0,1 3746 000026D8 8B565C mov edx, [esi+92] 3747 000026DB 015640 add [esi+40h], edx 3748 000026DE 29D0 sub eax, edx 3749 000026E0 D1E0 shl eax, 1 3750 000026E2 BA46FB4041 mov edx, 4140FB46h 3751 000026E7 F7EA imul edx 3752 000026E9 89565C mov [esi+92], edx 3753 000026EC 8B4660 mov eax, [esi+96] ; @@BF 24,31,-,COS2_0,1 3754 000026EF 8B567C mov edx, [esi+124] 3755 000026F2 015660 add [esi+96], edx 3756 000026F5 29D0 sub eax, edx 3757 000026F7 D1E0 shl eax, 1 3758 000026F9 BABA04BFBE mov edx, 0BEBF04BAh 3759 000026FE F7EA imul edx 3760 00002700 89567C mov [esi+124], edx 3761 00002703 8B460C mov eax, [esi+12] ; @@BF 3,28,+,COS0_3,1 3762 00002706 8B5670 mov edx, [esi+112] 3763 00002709 01560C add [esi+12], edx 3764 0000270C 29D0 sub eax, edx 3765 0000270E D1E0 shl eax, 1 3766 00002710 BA2134F943 mov edx, 43F93421h 3767 00002715 F7EA imul edx 3768 00002717 895670 mov [esi+112], edx 3769 0000271A 8B4630 mov eax, [esi+48] ; @@BF 12,19,+,COS0_12,2 3770 0000271D 8B564C mov edx, [esi+76] 3771 00002720 015630 add [esi+48], edx 3772 00002723 29D0 sub eax, edx 3773 00002725 C1E002 shl eax, 2 3774 00002728 BA978DFC5E mov edx, 5EFC8D97h 3775 0000272D F7EA imul edx 3776 0000272F 89564C mov [esi+76], edx 3777 00002732 8B460C mov eax, [esi+12] ; @@BF 3,12,+,COS1_3,1 3778 00002735 8B5630 mov edx, [esi+48] 3779 00002738 01560C add [esi+12], edx 3780 0000273B 29D0 sub eax, edx 3781 0000273D D1E0 shl eax, 1 3782 0000273F BA630ECB52 mov edx, 52CB0E63h 3783 00002744 F7EA imul edx 3784 00002746 895630 mov [esi+48], edx 3785 00002749 8B464C mov eax, [esi+76] ; @@BF 19,28,-,COS1_3,1 3786 0000274C 8B5670 mov edx, [esi+112] 3787 0000274F 01564C add [esi+76], edx 3788 00002752 29D0 sub eax, edx 3789 00002754 D1E0 shl eax, 1 3790 00002756 BA9DF134AD mov edx, 0AD34F19Dh 3791 0000275B F7EA imul edx 3792 0000275D 895670 mov [esi+112], edx 3793 00002760 8B4610 mov eax, [esi+16] ; @@BF 4,27,+,COS0_4,1 3794 00002763 8B566C mov edx, [esi+108] 3795 00002766 015610 add [esi+16], edx 3796 00002769 29D0 sub eax, edx 3797 0000276B D1E0 shl eax, 1 3798 0000276D BAC51BCC46 mov edx, 46CC1BC5h 3799 00002772 F7EA imul edx 3800 00002774 89566C mov [esi+108], edx 3801 00002777 8B462C mov eax, [esi+44] ; @@BF 11,20,+,COS0_11,2 3802 0000277A 8B5650 mov edx, [esi+80] 3803 0000277D 01562C add [esi+44], edx 3804 00002780 29D0 sub eax, edx 3805 00002782 C1E002 shl eax, 2 3806 00002785 BA981AD84A mov edx, 4AD81A98h 3807 0000278A F7EA imul edx 3808 0000278C 895650 mov [esi+80], edx 3809 0000278F 8B4610 mov eax, [esi+16] ; @@BF 4,11,+,COS1_4,1 3810 00002792 8B562C mov edx, [esi+44] 3811 00002795 015610 add [esi+16], edx 3812 00002798 29D0 sub eax, edx 3813 0000279A D1E0 shl eax, 1 3814 0000279C BA2E40E264 mov edx, 64E2402Eh 3815 000027A1 F7EA imul edx 3816 000027A3 89562C mov [esi+44], edx 3817 000027A6 8B4650 mov eax, [esi+80] ; @@BF 20,27,-,COS1_4,1 3818 000027A9 8B566C mov edx, [esi+108] 3819 000027AC 015650 add [esi+80], edx 3820 000027AF 29D0 sub eax, edx 3821 000027B1 D1E0 shl eax, 1 3822 000027B3 BAD2BF1D9B mov edx, 9B1DBFD2h 3823 000027B8 F7EA imul edx 3824 000027BA 89566C mov [esi+108], edx 3825 000027BD 8B460C mov eax, [esi+12] ; @@BF 3,4,+,COS2_3,3 3826 000027C0 8B5610 mov edx, [esi+16] 3827 000027C3 01560C add [esi+12], edx 3828 000027C6 29D0 sub eax, edx 3829 000027C8 C1E003 shl eax, 3 3830 000027CB BA42670352 mov edx, 52036742h 3831 000027D0 F7EA imul edx 3832 000027D2 895610 mov [esi+16], edx 3833 000027D5 8B462C mov eax, [esi+44] ; @@BF 11,12,-,COS2_3,3 3834 000027D8 8B5630 mov edx, [esi+48] 3835 000027DB 01562C add [esi+44], edx 3836 000027DE 29D0 sub eax, edx 3837 000027E0 C1E003 shl eax, 3 3838 000027E3 BABE98FCAD mov edx, 0ADFC98BEh ; -COS2_3 3839 000027E8 F7EA imul edx 3840 000027EA 895630 mov [esi+48], edx 3841 000027ED 8B464C mov eax, [esi+76] ; @@BF 19,20,+,COS2_3,3 3842 000027F0 8B5650 mov edx, [esi+80] 3843 000027F3 01564C add [esi+4Ch], edx 3844 000027F6 29D0 sub eax, edx 3845 000027F8 C1E003 shl eax, 3 3846 000027FB BA42670352 mov edx, 52036742h ; +COS2_3 3847 00002800 F7EA imul edx 3848 00002802 895650 mov [esi+80], edx 3849 00002805 8B466C mov eax, [esi+108] ; @@BF 27,28,-,COS2_3,3 3850 00002808 8B5670 mov edx, [esi+112] 3851 0000280B 01566C add [esi+108], edx 3852 0000280E 29D0 sub eax, edx 3853 00002810 C1E003 shl eax, 3 3854 00002813 BABE98FCAD mov edx, 0ADFC98BEh 3855 00002818 F7EA imul edx 3856 0000281A 895670 mov [esi+112], edx 3857 0000281D 8B06 mov eax, [esi] ; @@BF 0,3,+,COS3_0,1 3858 0000281F 8B560C mov edx, [esi+12] 3859 00002822 0116 add [esi], edx 3860 00002824 29D0 sub eax, edx 3861 00002826 D1E0 shl eax, 1 3862 00002828 BAF0E94545 mov edx, 4545E9F0h 3863 0000282D F7EA imul edx 3864 0000282F 89560C mov [esi+12], edx 3865 00002832 8B4610 mov eax, [esi+16] ; @@BF 4,7,-,COS3_0,1 3866 00002835 8B561C mov edx, [esi+28] 3867 00002838 015610 add [esi+16], edx 3868 0000283B 29D0 sub eax, edx 3869 0000283D D1E0 shl eax, 1 3870 0000283F BA1016BABA mov edx, 0BABA1610h 3871 00002844 F7EA imul edx 3872 00002846 89561C mov [esi+28], edx 3873 00002849 8B4620 mov eax, [esi+32] ; @@BF 8,11,+,COS3_0,1 3874 0000284C 8B562C mov edx, [esi+44] 3875 0000284F 015620 add [esi+32], edx 3876 00002852 29D0 sub eax, edx 3877 00002854 D1E0 shl eax, 1 3878 00002856 BAF0E94545 mov edx, 4545E9F0h 3879 0000285B F7EA imul edx 3880 0000285D 89562C mov [esi+44], edx 3881 00002860 8B4630 mov eax, [esi+48] ; @@BF 12,15,-,COS3_0,1 3882 00002863 8B563C mov edx, [esi+60] 3883 00002866 015630 add [esi+48], edx 3884 00002869 29D0 sub eax, edx 3885 0000286B D1E0 shl eax, 1 3886 0000286D BA1016BABA mov edx, 0BABA1610h 3887 00002872 F7EA imul edx 3888 00002874 89563C mov [esi+60], edx 3889 00002877 8B4640 mov eax, [esi+64] ; @@BF 16,19,+,COS3_0,1 3890 0000287A 8B564C mov edx, [esi+76] 3891 0000287D 015640 add [esi+64], edx 3892 00002880 29D0 sub eax, edx 3893 00002882 D1E0 shl eax, 1 3894 00002884 BAF0E94545 mov edx, 4545E9F0h 3895 00002889 F7EA imul edx 3896 0000288B 89564C mov [esi+76], edx 3897 0000288E 8B4650 mov eax, [esi+80] ; @@BF 20,23,-,COS3_0,1 3898 00002891 8B565C mov edx, [esi+92] 3899 00002894 015650 add [esi+80], edx 3900 00002897 29D0 sub eax, edx 3901 00002899 D1E0 shl eax, 1 3902 0000289B BA1016BABA mov edx, 0BABA1610h ; -COS3_0 3903 000028A0 F7EA imul edx 3904 000028A2 89565C mov [esi+92], edx 3905 000028A5 8B4660 mov eax, [esi+96] ; @@BF 24,27,+,COS3_0,1 3906 000028A8 8B566C mov edx, [esi+108] 3907 000028AB 015660 add [esi+96], edx 3908 000028AE 29D0 sub eax, edx 3909 000028B0 D1E0 shl eax, 1 3910 000028B2 BAF0E94545 mov edx, 4545E9F0h ; +COS3_0 3911 000028B7 F7EA imul edx 3912 000028B9 89566C mov [esi+108], edx 3913 000028BC 8B4670 mov eax, [esi+112] ; @@BF 28,31,-,COS3_0,1 3914 000028BF 8B567C mov edx, [esi+124] 3915 000028C2 015670 add [esi+112], edx 3916 000028C5 29D0 sub eax, edx 3917 000028C7 D1E0 shl eax, 1 3918 000028C9 BA1016BABA mov edx, 0BABA1610h 3919 000028CE F7EA imul edx 3920 000028D0 89567C mov [esi+124], edx 3921 000028D3 8B4604 mov eax, [esi+4] ; @@BF 1,30,+,COS0_1,1 3922 000028D6 8B5678 mov edx, [esi+120] 3923 000028D9 015604 add [esi+4], edx 3924 000028DC 29D0 sub eax, edx 3925 000028DE D1E0 shl eax, 1 3926 000028E0 BABD45B340 mov edx, 40B345BDh 3927 000028E5 F7EA imul edx 3928 000028E7 895678 mov [esi+120], edx 3929 000028EA 8B4638 mov eax, [esi+56] ; @@BF 14,17,+,COS0_14,3 3930 000028ED 8B5644 mov edx, [esi+68] 3931 000028F0 015638 add [esi+56], edx 3932 000028F3 29D0 sub eax, edx 3933 000028F5 C1E003 shl eax, 3 3934 000028F8 BAD0200B6D mov edx, 6D0B20D0h 3935 000028FD F7EA imul edx 3936 000028FF 895644 mov [esi+68], edx 3937 00002902 8B4604 mov eax, [esi+4] ; @@BF 1,14,+,COS1_1,1 3938 00002905 8B5638 mov edx, [esi+56] 3939 00002908 015604 add [esi+4], edx 3940 0000290B 29D0 sub eax, edx 3941 0000290D D1E0 shl eax, 1 3942 0000290F BA103CE142 mov edx, 42E13C10h 3943 00002914 F7EA imul edx 3944 00002916 895638 mov [esi+56], edx 3945 00002919 8B4644 mov eax, [esi+68] ; @@BF 17,30,-,COS1_1,1 3946 0000291C 8B5678 mov edx, [esi+120] 3947 0000291F 015644 add [esi+68], edx 3948 00002922 29D0 sub eax, edx 3949 00002924 D1E0 shl eax, 1 3950 00002926 BAF0C31EBD mov edx, 0BD1EC3F0h 3951 0000292B F7EA imul edx 3952 0000292D 895678 mov [esi+120], edx 3953 00002930 8B4618 mov eax, [esi+24] ; @@BF 6,25,+,COS0_6,1 3954 00002933 8B5664 mov edx, [esi+100] 3955 00002936 015618 add [esi+24], edx 3956 00002939 29D0 sub eax, edx 3957 0000293B D1E0 shl eax, 1 3958 0000293D BA1237AE4F mov edx, 4FAE3712h 3959 00002942 F7EA imul edx 3960 00002944 895664 mov [esi+100], edx 3961 00002947 8B4624 mov eax, [esi+36] ; @@BF 9,22,+,COS0_9,1 3962 0000294A 8B5658 mov edx, [esi+88] 3963 0000294D 015624 add [esi+36], edx 3964 00002950 29D0 sub eax, edx 3965 00002952 D1E0 shl eax, 1 3966 00002954 BA27CF6F6B mov edx, 6B6FCF27h 3967 00002959 F7EA imul edx 3968 0000295B 895658 mov [esi+88], edx 3969 0000295E 8B4618 mov eax, [esi+24] ; @@BF 6, 9,+,COS1_6,2 3970 00002961 8B5624 mov edx, [esi+36] 3971 00002964 015618 add [esi+24], edx 3972 00002967 29D0 sub eax, edx 3973 00002969 C1E002 shl eax, 2 3974 0000296C BAC2923C6E mov edx, 6E3C92C2h 3975 00002971 F7EA imul edx 3976 00002973 895624 mov [esi+36], edx 3977 00002976 8B4658 mov eax, [esi+88] ; @@BF 22,25,-,COS1_6,2 3978 00002979 8B5664 mov edx, [esi+100] 3979 0000297C 015658 add [esi+88], edx 3980 0000297F 29D0 sub eax, edx 3981 00002981 C1E002 shl eax, 2 3982 00002984 BA3E6DC391 mov edx, 91C36D3Eh 3983 00002989 F7EA imul edx 3984 0000298B 895664 mov [esi+100], edx 3985 0000298E 8B4604 mov eax, [esi+4] ; @@BF 1, 6,+,COS2_1,1 3986 00002991 8B5618 mov edx, [esi+24] 3987 00002994 015604 add [esi+4], edx 3988 00002997 29D0 sub eax, edx 3989 00002999 D1E0 shl eax, 1 3990 0000299B BA88DEF84C mov edx, 4CF8DE88h 3991 000029A0 F7EA imul edx 3992 000029A2 895618 mov [esi+24], edx 3993 000029A5 8B4624 mov eax, [esi+36] ; @@BF 9,14,-,COS2_1,1 3994 000029A8 8B5638 mov edx, [esi+56] 3995 000029AB 015624 add [esi+36], edx 3996 000029AE 29D0 sub eax, edx 3997 000029B0 D1E0 shl eax, 1 3998 000029B2 BA782107B3 mov edx, 0B3072178h 3999 000029B7 F7EA imul edx 4000 000029B9 895638 mov [esi+56], edx 4001 000029BC 8B4644 mov eax, [esi+68] ; @@BF 17,22,+,COS2_1,1 4002 000029BF 8B5658 mov edx, [esi+88] 4003 000029C2 015644 add [esi+68], edx 4004 000029C5 29D0 sub eax, edx 4005 000029C7 D1E0 shl eax, 1 4006 000029C9 BA88DEF84C mov edx, 4CF8DE88h 4007 000029CE F7EA imul edx 4008 000029D0 895658 mov [esi+88], edx 4009 000029D3 8B4664 mov eax, [esi+100] ; @@BF 25,30,-,COS2_1,1 4010 000029D6 8B5678 mov edx, [esi+120] 4011 000029D9 015664 add [esi+100], edx 4012 000029DC 29D0 sub eax, edx 4013 000029DE D1E0 shl eax, 1 4014 000029E0 BA782107B3 mov edx, 0B3072178h 4015 000029E5 F7EA imul edx 4016 000029E7 895678 mov [esi+120], edx 4017 000029EA 8B4608 mov eax, [esi+8] ; @@BF 2,29,+,COS0_2,1 4018 000029ED 8B5674 mov edx, [esi+116] 4019 000029F0 015608 add [esi+8], edx 4020 000029F3 29D0 sub eax, edx 4021 000029F5 D1E0 shl eax, 1 4022 000029F7 BA6E2DFA41 mov edx, 41FA2D6Eh 4023 000029FC F7EA imul edx 4024 000029FE 895674 mov [esi+116], edx 4025 00002A01 8B4634 mov eax, [esi+52] ; @@BF 13,18,+,COS0_13,3 4026 00002A04 8B5648 mov edx, [esi+72] 4027 00002A07 015634 add [esi+52], edx 4028 00002A0A 29D0 sub eax, edx 4029 00002A0C C1E003 shl eax, 3 4030 00002A0F BA9057D941 mov edx, 41D95790h 4031 00002A14 F7EA imul edx 4032 00002A16 895648 mov [esi+72], edx 4033 00002A19 8B4608 mov eax, [esi+8] ; @@BF 2,13,+,COS1_2,1 4034 00002A1C 8B5634 mov edx, [esi+52] 4035 00002A1F 015608 add [esi+8], edx 4036 00002A22 29D0 sub eax, edx 4037 00002A24 D1E0 shl eax, 1 4038 00002A26 BA459F9148 mov edx, 48919F45h 4039 00002A2B F7EA imul edx 4040 00002A2D 895634 mov [esi+52], edx 4041 00002A30 8B4648 mov eax, [esi+72] ; @@BF 18,29,-,COS1_2,1 4042 00002A33 8B5674 mov edx, [esi+116] 4043 00002A36 015648 add [esi+72], edx 4044 00002A39 29D0 sub eax, edx 4045 00002A3B D1E0 shl eax, 1 4046 00002A3D BABB606EB7 mov edx, 0B76E60BBh 4047 00002A42 F7EA imul edx 4048 00002A44 895674 mov [esi+116], edx 4049 00002A47 8B4614 mov eax, [esi+20] ; @@BF 5,26,+,COS0_5,1 4050 00002A4A 8B5668 mov edx, [esi+104] 4051 00002A4D 015614 add [esi+20], edx 4052 00002A50 29D0 sub eax, edx 4053 00002A52 D1E0 shl eax, 1 4054 00002A54 BAF19C9D4A mov edx, 4A9D9CF1h 4055 00002A59 F7EA imul edx 4056 00002A5B 895668 mov [esi+104], edx 4057 00002A5E 8B4628 mov eax, [esi+40] ; @@BF 10,21,+,COS0_10,1 4058 00002A61 8B5654 mov edx, [esi+84] 4059 00002A64 015628 add [esi+40], edx 4060 00002A67 29D0 sub eax, edx 4061 00002A69 D1E0 shl eax, 1 4062 00002A6B BAB41D7D7C mov edx, 7C7D1DB4h 4063 00002A70 F7EA imul edx 4064 00002A72 895654 mov [esi+84], edx 4065 00002A75 8B4614 mov eax, [esi+20] ; @@BF 5,10,+,COS1_5,2 4066 00002A78 8B5628 mov edx, [esi+40] 4067 00002A7B 015614 add [esi+20], edx 4068 00002A7E 29D0 sub eax, edx 4069 00002A80 C1E002 shl eax, 2 4070 00002A83 BAAA24E243 mov edx, 43E224AAh 4071 00002A88 F7EA imul edx 4072 00002A8A 895628 mov [esi+40], edx 4073 00002A8D 8B4654 mov eax, [esi+84] ; @@BF 21,26,-,COS1_5,2 4074 00002A90 8B5668 mov edx, [esi+104] 4075 00002A93 015654 add [esi+84], edx 4076 00002A96 29D0 sub eax, edx 4077 00002A98 C1E002 shl eax, 2 4078 00002A9B BA56DB1DBC mov edx, 0BC1DDB56h 4079 00002AA0 F7EA imul edx 4080 00002AA2 895668 mov [esi+104], edx 4081 00002AA5 8B4608 mov eax, [esi+8] ; @@BF 2,5,+,COS2_2,1 4082 00002AA8 8B5614 mov edx, [esi+20] 4083 00002AAB 015608 add [esi+8], edx 4084 00002AAE 29D0 sub eax, edx 4085 00002AB0 D1E0 shl eax, 1 4086 00002AB2 BABF6B3273 mov edx, 73326BBFh ; +COS2_2 4087 00002AB7 F7EA imul edx 4088 00002AB9 895614 mov [esi+20], edx 4089 00002ABC 8B4628 mov eax, [esi+40] ; @@BF 10,13,-,COS2_2,1 4090 00002ABF 8B5634 mov edx, [esi+52] 4091 00002AC2 015628 add [esi+40], edx 4092 00002AC5 29D0 sub eax, edx 4093 00002AC7 D1E0 shl eax, 1 4094 00002AC9 BA4194CD8C mov edx, 8CCD9441h ; -COS2_2 4095 00002ACE F7EA imul edx 4096 00002AD0 895634 mov [esi+52], edx 4097 00002AD3 8B4648 mov eax, [esi+72] ; @@BF 18,21,+,COS2_2,1 4098 00002AD6 8B5654 mov edx, [esi+84] 4099 00002AD9 015648 add [esi+72], edx 4100 00002ADC 29D0 sub eax, edx 4101 00002ADE D1E0 shl eax, 1 4102 00002AE0 BABF6B3273 mov edx, 73326BBFh 4103 00002AE5 F7EA imul edx 4104 00002AE7 895654 mov [esi+84], edx 4105 00002AEA 8B4668 mov eax, [esi+104] ; @@BF 26,29,-,COS2_2,1 4106 00002AED 8B5674 mov edx, [esi+116] 4107 00002AF0 015668 add [esi+104], edx 4108 00002AF3 29D0 sub eax, edx 4109 00002AF5 D1E0 shl eax, 1 4110 00002AF7 BA4194CD8C mov edx, 8CCD9441h 4111 00002AFC F7EA imul edx 4112 00002AFE 895674 mov [esi+116], edx 4113 00002B01 8B4604 mov eax, [esi+4] ; @@BF 1,2,+,COS3_1,2 4114 00002B04 8B5608 mov edx, [esi+8] 4115 00002B07 015604 add [esi+4], edx 4116 00002B0A 29D0 sub eax, edx 4117 00002B0C C1E002 shl eax, 2 4118 00002B0F BA46BA9E53 mov edx, 539EBA46h 4119 00002B14 F7EA imul edx 4120 00002B16 895608 mov [esi+8], edx 4121 00002B19 8B4614 mov eax, [esi+20] ; @@BF 5,6,-,COS3_1,2 4122 00002B1C 8B5618 mov edx, [esi+24] 4123 00002B1F 015614 add [esi+20], edx 4124 00002B22 29D0 sub eax, edx 4125 00002B24 C1E002 shl eax, 2 4126 00002B27 BABA4561AC mov edx, 0AC6145BAh 4127 00002B2C F7EA imul edx 4128 00002B2E 895618 mov [esi+24], edx 4129 00002B31 8B4624 mov eax, [esi+36] ; IF rate_shift LT 2 4130 ; @@BF 9,10,+,COS3_1,2 4131 00002B34 8B5628 mov edx, [esi+40] 4132 00002B37 015624 add [esi+36], edx 4133 00002B3A 29D0 sub eax, edx 4134 00002B3C C1E002 shl eax, 2 4135 00002B3F BA46BA9E53 mov edx, 539EBA46h 4136 00002B44 F7EA imul edx 4137 00002B46 895628 mov [esi+40], edx 4138 00002B49 8B4634 mov eax, [esi+52] ; @@BF 13,14,-,COS3_1,2 4139 00002B4C 8B5638 mov edx, [esi+56] 4140 00002B4F 015634 add [esi+52], edx 4141 00002B52 29D0 sub eax, edx 4142 00002B54 C1E002 shl eax, 2 4143 00002B57 BABA4561AC mov edx, 0AC6145BAh 4144 00002B5C F7EA imul edx 4145 00002B5E 895638 mov [esi+56], edx ; ENDIF 4146 00002B61 8B4644 mov eax, [esi+68] ; @@BF 17,18,+,COS3_1,2 4147 00002B64 8B5648 mov edx, [esi+72] 4148 00002B67 015644 add [esi+68], edx 4149 00002B6A 29D0 sub eax, edx 4150 00002B6C C1E002 shl eax, 2 4151 00002B6F BA46BA9E53 mov edx, 539EBA46h 4152 00002B74 F7EA imul edx 4153 00002B76 895648 mov [esi+72], edx 4154 00002B79 8B4654 mov eax, [esi+84] ; @@BF 21,22,-,COS3_1,2 4155 00002B7C 8B5658 mov edx, [esi+88] 4156 00002B7F 015654 add [esi+84], edx 4157 00002B82 29D0 sub eax, edx 4158 00002B84 C1E002 shl eax, 2 4159 00002B87 BABA4561AC mov edx, 0AC6145BAh 4160 00002B8C F7EA imul edx 4161 00002B8E 895658 mov [esi+88], edx 4162 00002B91 8B4664 mov eax, [esi+100] ; @@BF 25,26,+,COS3_1,2 4163 00002B94 8B5668 mov edx, [esi+104] 4164 00002B97 015664 add [esi+100], edx 4165 00002B9A 29D0 sub eax, edx 4166 00002B9C C1E002 shl eax, 2 4167 00002B9F BA46BA9E53 mov edx, 539EBA46h 4168 00002BA4 F7EA imul edx 4169 00002BA6 895668 mov [esi+104], edx 4170 00002BA9 8B4674 mov eax, [esi+116] ; @@BF 29,30,-,COS3_1,2 4171 00002BAC 8B5678 mov edx, [esi+120] 4172 00002BAF 015674 add [esi+116], edx 4173 00002BB2 29D0 sub eax, edx 4174 00002BB4 C1E002 shl eax, 2 4175 00002BB7 BABA4561AC mov edx, 0AC6145BAh 4176 00002BBC F7EA imul edx 4177 00002BBE 895678 mov [esi+120], edx 4178 00002BC1 8B06 mov eax, [esi] ; @@BF1 macro a, b, c, d 4179 ; @@BF a, b,+,COS4_0, 1 4180 ; @@BF c, d,-,COS4_0, 1 4181 ; @@ADD c, d 4182 ; endm 4183 ; @@BF1 0,1,2,3 4184 00002BC3 8B5604 mov edx, [esi+4] ; @@BF 0,1,+,COS4_0,1 4185 00002BC6 0116 add [esi], edx 4186 00002BC8 29D0 sub eax, edx 4187 00002BCA D1E0 shl eax, 1 4188 00002BCC BA9A79825A mov edx, 5A82799Ah ; +COS4_0 4189 00002BD1 F7EA imul edx 4190 00002BD3 895604 mov [esi+4], edx 4191 00002BD6 8B4608 mov eax, [esi+8] ; @@BF 2,3,-,COS4_0,1 4192 00002BD9 8B560C mov edx, [esi+12] 4193 00002BDC 015608 add [esi+8], edx 4194 00002BDF 29D0 sub eax, edx 4195 00002BE1 D1E0 shl eax, 1 4196 00002BE3 BA66867DA5 mov edx, 0A57D8666h ; -COS4_0 4197 00002BE8 F7EA imul edx 4198 00002BEA 89560C mov [esi+12], edx 4199 00002BED 8B460C mov eax, [esi+12] ; @@ADD 2,3 4200 00002BF0 014608 add [esi+8], eax 4201 00002BF3 8B4610 mov eax, [esi+16] ; @@BF2 macro a, b, c, d 4202 ; @@BF a, b,+,COS4_0, 1 4203 ; @@BF c, d,-,COS4_0, 1 4204 ; @@ADD c, d 4205 ; @@ADD a, c 4206 ; @@ADD c, b 4207 ; @@ADD b, d 4208 ; endm 4209 ; @@BF2 4,5,6,7 4210 00002BF6 8B5614 mov edx, [esi+20] ; @@BF 4,5,+,COS4_0,1 4211 00002BF9 015610 add [esi+16], edx 4212 00002BFC 29D0 sub eax, edx 4213 00002BFE D1E0 shl eax, 1 4214 00002C00 BA9A79825A mov edx, 5A82799Ah 4215 00002C05 F7EA imul edx 4216 00002C07 895614 mov [esi+20], edx 4217 00002C0A 8B4618 mov eax, [esi+24] ; @@BF 6,7,-,COS4_0,1 4218 00002C0D 8B561C mov edx, [esi+28] 4219 00002C10 015618 add [esi+24], edx 4220 00002C13 29D0 sub eax, edx 4221 00002C15 D1E0 shl eax, 1 4222 00002C17 BA66867DA5 mov edx, 0A57D8666h 4223 00002C1C F7EA imul edx 4224 00002C1E 89561C mov [esi+28], edx 4225 00002C21 8B461C mov eax, [esi+28] ; @@ADD macro dst,src 4226 ; IF (rate_shift EQ 0) or (dst LT 16) 4227 ; ;tab[a] += tab[b] 4228 ; mov eax,dword ptr [esi+src*4] 4229 ; add dword ptr [esi+dst*4],eax 4230 ; ENDIF 4231 ; endm 4232 ; @@ADD 6,7 4233 00002C24 014618 add [esi+24], eax 4234 00002C27 8B4618 mov eax, [esi+24] ; @@ADD 4,6 4235 00002C2A 014610 add [esi+16], eax 4236 00002C2D 8B4614 mov eax, [esi+20] ; @@ADD 6,5 4237 00002C30 014618 add [esi+24], eax 4238 00002C33 8B461C mov eax, [esi+28] ; @@ADD 5,7 4239 00002C36 014614 add [esi+20], eax 4240 00002C39 8B4620 mov eax, [esi+32] ; IF rate_shift LT 2 4241 ; @@BF1 8,9,10,11 4242 00002C3C 8B5624 mov edx, [esi+36] ; @@BF 8,9,+,COS4_0,1 4243 00002C3F 015620 add [esi+32], edx 4244 00002C42 29D0 sub eax, edx 4245 00002C44 D1E0 shl eax, 1 4246 00002C46 BA9A79825A mov edx, 5A82799Ah 4247 00002C4B F7EA imul edx 4248 00002C4D 895624 mov [esi+36], edx 4249 00002C50 8B4628 mov eax, [esi+40] ; @@BF 10,11,-,COS4_0,1 4250 00002C53 8B562C mov edx, [esi+44] 4251 00002C56 015628 add [esi+40], edx 4252 00002C59 29D0 sub eax, edx 4253 00002C5B D1E0 shl eax, 1 4254 00002C5D BA66867DA5 mov edx, 0A57D8666h 4255 00002C62 F7EA imul edx 4256 00002C64 89562C mov [esi+44], edx 4257 00002C67 8B462C mov eax, [esi+44] ; @@ADD 10,11 4258 00002C6A 014628 add [esi+40], eax 4259 00002C6D 8B4630 mov eax, [esi+48] ; @@BF2 12,13,14,15 4260 00002C70 8B5634 mov edx, [esi+52] ; @@BF 12,13,+,COS4_0,1 4261 00002C73 015630 add [esi+48], edx 4262 00002C76 29D0 sub eax, edx 4263 00002C78 D1E0 shl eax, 1 4264 00002C7A BA9A79825A mov edx, 5A82799Ah 4265 00002C7F F7EA imul edx 4266 00002C81 895634 mov [esi+52], edx 4267 00002C84 8B4638 mov eax, [esi+56] ; @@BF 14,15,-,COS4_0,1 4268 00002C87 8B563C mov edx, [esi+60] 4269 00002C8A 015638 add [esi+56], edx 4270 00002C8D 29D0 sub eax, edx 4271 00002C8F D1E0 shl eax, 1 4272 00002C91 BA66867DA5 mov edx, 0A57D8666h 4273 00002C96 F7EA imul edx 4274 00002C98 89563C mov [esi+60], edx 4275 00002C9B 8B463C mov eax, [esi+60] ; @@ADD 14,15 4276 00002C9E 014638 add [esi+56], eax 4277 00002CA1 8B4638 mov eax, [esi+56] ; @@ADD 12,14 4278 00002CA4 014630 add [esi+48], eax 4279 00002CA7 8B4634 mov eax, [esi+52] ; @@ADD 14,13 4280 00002CAA 014638 add [esi+56], eax 4281 00002CAD 8B463C mov eax, [esi+60] ; @@ADD 13,15 4282 00002CB0 014634 add [esi+52], eax ; ENDIF 4283 00002CB3 8B4640 mov eax, [esi+64] ; @@BF1 16,17,18,19 4284 00002CB6 8B5644 mov edx, [esi+68] 4285 00002CB9 015640 add [esi+64], edx 4286 00002CBC 29D0 sub eax, edx 4287 00002CBE D1E0 shl eax, 1 4288 00002CC0 BA9A79825A mov edx, 5A82799Ah ; +COS4_0 4289 00002CC5 F7EA imul edx 4290 00002CC7 895644 mov [esi+68], edx 4291 00002CCA 8B4648 mov eax, [esi+72] 4292 00002CCD 8B564C mov edx, [esi+76] 4293 00002CD0 015648 add [esi+72], edx 4294 00002CD3 29D0 sub eax, edx 4295 00002CD5 D1E0 shl eax, 1 4296 00002CD7 BA66867DA5 mov edx, 0A57D8666h ; -COS4_0 4297 00002CDC F7EA imul edx 4298 00002CDE 89564C mov [esi+76], edx 4299 00002CE1 8B464C mov eax, [esi+76] ; @@ADD 18,19 4300 00002CE4 014648 add [esi+72], eax 4301 00002CE7 8B4650 mov eax, [esi+80] ; @@BF2 20,21,22,23 4302 00002CEA 8B5654 mov edx, [esi+84] 4303 00002CED 015650 add [esi+80], edx 4304 00002CF0 29D0 sub eax, edx 4305 00002CF2 D1E0 shl eax, 1 4306 00002CF4 BA9A79825A mov edx, 5A82799Ah 4307 00002CF9 F7EA imul edx 4308 00002CFB 895654 mov [esi+84], edx 4309 00002CFE 8B4658 mov eax, [esi+88] 4310 00002D01 8B565C mov edx, [esi+92] 4311 00002D04 015658 add [esi+88], edx 4312 00002D07 29D0 sub eax, edx 4313 00002D09 D1E0 shl eax, 1 4314 00002D0B BA66867DA5 mov edx, 0A57D8666h 4315 00002D10 F7EA imul edx 4316 00002D12 89565C mov [esi+92], edx 4317 00002D15 8B465C mov eax, [esi+92] ; @@ADD 22,23 4318 00002D18 014658 add [esi+88], eax 4319 00002D1B 8B4658 mov eax, [esi+88] ; @@ADD 20,22 4320 00002D1E 014650 add [esi+80], eax 4321 00002D21 8B4654 mov eax, [esi+84] 4322 00002D24 014658 add [esi+88], eax 4323 00002D27 8B465C mov eax, [esi+92] 4324 00002D2A 014654 add [esi+84], eax 4325 00002D2D 8B4660 mov eax, [esi+96] ; @@BF1 24,25,26,27 4326 00002D30 8B5664 mov edx, [esi+100] 4327 00002D33 015660 add [esi+96], edx 4328 00002D36 29D0 sub eax, edx 4329 00002D38 D1E0 shl eax, 1 4330 00002D3A BA9A79825A mov edx, 5A82799Ah 4331 00002D3F F7EA imul edx 4332 00002D41 895664 mov [esi+100], edx 4333 00002D44 8B4668 mov eax, [esi+104] 4334 00002D47 8B566C mov edx, [esi+108] 4335 00002D4A 015668 add [esi+104], edx 4336 00002D4D 29D0 sub eax, edx 4337 00002D4F D1E0 shl eax, 1 4338 00002D51 BA66867DA5 mov edx, 0A57D8666h 4339 00002D56 F7EA imul edx 4340 00002D58 89566C mov [esi+108], edx 4341 00002D5B 8B466C mov eax, [esi+108] 4342 00002D5E 014668 add [esi+104], eax 4343 00002D61 8B4670 mov eax, [esi+112] ; @@BF2 28,29,30,31 4344 00002D64 8B5674 mov edx, [esi+116] 4345 00002D67 015670 add [esi+112], edx 4346 00002D6A 29D0 sub eax, edx 4347 00002D6C D1E0 shl eax, 1 4348 00002D6E BA9A79825A mov edx, 5A82799Ah 4349 00002D73 F7EA imul edx 4350 00002D75 895674 mov [esi+116], edx 4351 00002D78 8B4678 mov eax, [esi+120] 4352 00002D7B 8B567C mov edx, [esi+124] 4353 00002D7E 015678 add [esi+120], edx 4354 00002D81 29D0 sub eax, edx 4355 00002D83 D1E0 shl eax, 1 4356 00002D85 BA66867DA5 mov edx, 0A57D8666h 4357 00002D8A F7EA imul edx 4358 00002D8C 89567C mov [esi+124], edx 4359 00002D8F 8B467C mov eax, [esi+124] 4360 00002D92 014678 add [esi+120], eax 4361 00002D95 8B4678 mov eax, [esi+120] 4362 00002D98 014670 add [esi+112], eax 4363 00002D9B 8B4674 mov eax, [esi+116] 4364 00002D9E 014678 add [esi+120], eax 4365 00002DA1 8B467C mov eax, [esi+124] 4366 00002DA4 014674 add [esi+116], eax 4367 00002DA7 8B06 mov eax, [esi] ; @@OUT macro dst,src1,src2 4368 ; IF ((dst AND ((1 SHL rate_shift)-1)) EQ 0) 4369 ; mov eax,dword ptr [esi+src1*4] 4370 ; IFDIFI ,<-> 4371 ; add eax,dword ptr [esi+src2*4] 4372 ; ENDIF 4373 ; IF SYNTH32 4374 ; mov dword ptr [edi+dst*4],eax 4375 ; IF (LONG_WINDOW EQ 0) 4376 ; mov dword ptr [edi+dst*4+512*4],eax 4377 ; ENDIF 4378 ; ELSE 4379 ; ...... 4380 ; ENDIF 4381 ; @@OUT 0,0,- 4382 00002DA9 8907 mov [edi], eax ; mov dword ptr [edi+dst*4],eax 4383 00002DAB 8B4604 mov eax, [esi+4] ; @@OUT 16,1, - 4384 ; mov eax,dword ptr [esi+src1*4] 4385 00002DAE 894740 mov [edi+64], eax ; mov dword ptr [edi+dst*4],eax 4386 00002DB1 8B4608 mov eax, [esi+8] ; @@OUT 8,2,- 4387 00002DB4 894720 mov [edi+32], eax 4388 00002DB7 8B460C mov eax, [esi+12] ; @@OUT 24,3,- 4389 00002DBA 894760 mov [edi+96], eax 4390 00002DBD 8B4610 mov eax, [esi+16] ; @@OUT 4,4,- 4391 00002DC0 894710 mov [edi+16], eax 4392 00002DC3 8B4614 mov eax, [esi+20] ; @@OUT 20,5,- 4393 00002DC6 894750 mov [edi+80], eax 4394 00002DC9 8B4618 mov eax, [esi+24] ; @@OUT 12,6,- 4395 00002DCC 894730 mov [edi+48], eax 4396 00002DCF 8B461C mov eax, [esi+28] ; @@OUT 28,7,- 4397 00002DD2 894770 mov [edi+112], eax 4398 00002DD5 8B4620 mov eax, [esi+32] ; @@OUT 2,8,12 4399 00002DD8 034630 add eax, [esi+48] ; add eax,dword ptr [esi+src2*4] 4400 00002DDB 894708 mov [edi+8], eax 4401 00002DDE 8B4624 mov eax, [esi+36] ; @@OUT 18,9,13 4402 00002DE1 034634 add eax, [esi+52] ; add eax,dword ptr [esi+src2*4] 4403 00002DE4 894748 mov [edi+72], eax 4404 00002DE7 8B4628 mov eax, [esi+40] ; @@OUT 10,10,14 4405 00002DEA 034638 add eax, [esi+56] 4406 00002DED 894728 mov [edi+40], eax 4407 00002DF0 8B462C mov eax, [esi+44] ; @@OUT 26,11,15 4408 00002DF3 03463C add eax, [esi+60] 4409 00002DF6 894768 mov [edi+104], eax 4410 00002DF9 8B4630 mov eax, [esi+48] ; @@OUT 6,12,10 4411 00002DFC 034628 add eax, [esi+40] 4412 00002DFF 894718 mov [edi+24], eax 4413 00002E02 8B4634 mov eax, [esi+52] ; @@OUT 22,13,11 4414 00002E05 03462C add eax, [esi+44] 4415 00002E08 894758 mov [edi+88], eax 4416 00002E0B 8B4638 mov eax, [esi+56] ; @@OUT 14,14,9 4417 00002E0E 034624 add eax, [esi+36] 4418 00002E11 894738 mov [edi+56], eax 4419 00002E14 8B463C mov eax, [esi+60] ; @@OUT 30,15,- 4420 00002E17 894778 mov [edi+120], eax 4421 00002E1A 8B4670 mov eax, [esi+112] ; @@ADD 24,28 4422 00002E1D 014660 add [esi+96], eax 4423 00002E20 8B4668 mov eax, [esi+104] ; @@ADD 28,26 4424 00002E23 014670 add [esi+112], eax 4425 00002E26 8B4678 mov eax, [esi+120] ; @@ADD 26,30 4426 00002E29 014668 add [esi+104], eax 4427 00002E2C 8B4664 mov eax, [esi+100] ; @@ADD 30,25 4428 00002E2F 014678 add [esi+120], eax 4429 00002E32 8B4674 mov eax, [esi+116] ; @@ADD 25,29 4430 00002E35 014664 add [esi+100], eax 4431 00002E38 8B466C mov eax, [esi+108] ; @@ADD 29,27 4432 00002E3B 014674 add [esi+116], eax 4433 00002E3E 8B467C mov eax, [esi+124] ; @@ADD 27,31 4434 00002E41 01466C add [esi+108], eax 4435 00002E44 8B4640 mov eax, [esi+64] ; @@OUT 1,16,24 4436 00002E47 034660 add eax, [esi+96] 4437 00002E4A 894704 mov [edi+4], eax 4438 00002E4D 8B4644 mov eax, [esi+68] ; @@OUT 17,17,25 4439 00002E50 034664 add eax, [esi+100] 4440 00002E53 894744 mov [edi+68], eax 4441 00002E56 8B4648 mov eax, [esi+72] ; @@OUT 9,18,26 4442 00002E59 034668 add eax, [esi+104] 4443 00002E5C 894724 mov [edi+36], eax 4444 00002E5F 8B464C mov eax, [esi+76] ; @@OUT 25,19,27 4445 00002E62 03466C add eax, [esi+108] 4446 00002E65 894764 mov [edi+100], eax 4447 00002E68 8B4650 mov eax, [esi+80] ; @@OUT 5,20,28 4448 00002E6B 034670 add eax, [esi+112] 4449 00002E6E 894714 mov [edi+20], eax 4450 00002E71 8B4654 mov eax, [esi+84] ; @@OUT 21,21,29 4451 00002E74 034674 add eax, [esi+116] 4452 00002E77 894754 mov [edi+84], eax 4453 00002E7A 8B4658 mov eax, [esi+88] ; @@OUT 13,22,30 4454 00002E7D 034678 add eax, [esi+120] 4455 00002E80 894734 mov [edi+52], eax 4456 00002E83 8B465C mov eax, [esi+92] ; @@OUT 29,23,31 4457 00002E86 03467C add eax, [esi+124] 4458 00002E89 894774 mov [edi+116], eax 4459 00002E8C 8B4660 mov eax, [esi+96] ; @@OUT 3,24,20 4460 00002E8F 034650 add eax, [esi+80] 4461 00002E92 89470C mov [edi+12], eax 4462 00002E95 8B4664 mov eax, [esi+100] ; @@OUT 19,25,21 4463 00002E98 034654 add eax, [esi+84] 4464 00002E9B 89474C mov [edi+76], eax 4465 00002E9E 8B4668 mov eax, [esi+104] ; @@OUT 11,26,22 4466 00002EA1 034658 add eax, [esi+88] 4467 00002EA4 89472C mov [edi+44], eax 4468 00002EA7 8B466C mov eax, [esi+108] ; @@OUT 27,27,23 4469 00002EAA 03465C add eax, [esi+92] 4470 00002EAD 89476C mov [edi+108], eax 4471 00002EB0 8B4670 mov eax, [esi+112] ; @@OUT 7,28,18 4472 00002EB3 034648 add eax, [esi+72] 4473 00002EB6 89471C mov [edi+28], eax 4474 00002EB9 8B4674 mov eax, [esi+116] ; @@OUT 23,29,19 4475 00002EBC 03464C add eax, [esi+76] 4476 00002EBF 89475C mov [edi+92], eax 4477 00002EC2 8B4678 mov eax, [esi+120] ; @@OUT 15,30,17 4478 00002EC5 034644 add eax, [esi+68] 4479 00002EC8 89473C mov [edi+60], eax 4480 00002ECB 8B467C mov eax, [esi+124] ; @@OUT 31,31,- 4481 00002ECE 89477C mov [edi+124], eax 4482 00002ED1 C3 retn 4483 4484 4485 ; =============== S U B R O U T I N E ======================================= 4486 4487 4488 mp3_dct32_shift_1: 4489 00002ED2 8B467C mov eax, [esi+124] ; mp3_dct32_macro macro rate_shift ; rate_shift = 1 4490 00002ED5 0106 add [esi], eax ; @@BF macro a,b,sign,cos,shift 4491 ; @@need_a equ (rate_shift EQ 0) or (a LT 16) ; a = 0 4492 ; @@need_b equ (rate_shift EQ 0) or (b LT 16) ; b = 31 4493 ; IF @@need_a AND @@need_b ; rate_shift = 0 4494 ; mov eax,dword ptr [esi+a*4] 4495 ; mov edx,dword ptr [esi+b*4] 4496 ; add dword ptr [esi+a*4],edx 4497 ; ELSEIF @@need_a 4498 ; mov eax,dword ptr [esi+b*4] 4499 ; add dword ptr [esi+a*4],eax 4500 ; 4501 ; @@BF 0,31,+,COS0_0,1 4502 00002ED7 8B4640 mov eax, [esi+64] ; @@BF 15,16,+,COS0_15,5 4503 00002EDA 01463C add [esi+60], eax 4504 00002EDD 8B06 mov eax, [esi] ; @@BF 0,15,+,COS1_0,1 4505 00002EDF 8B563C mov edx, [esi+60] 4506 00002EE2 0116 add [esi], edx 4507 00002EE4 29D0 sub eax, edx 4508 00002EE6 D1E0 shl eax, 1 4509 00002EE8 BA72464F40 mov edx, 404F4672h ; COS1_0 4510 00002EED F7EA imul edx 4511 00002EEF 89563C mov [esi+60], edx 4512 00002EF2 8B4660 mov eax, [esi+96] ; skip @@BF 16,31,-,COS1_0,1 4513 ; @@BF 7,24,+,COS0_7,1 4514 00002EF5 01461C add [esi+28], eax 4515 00002EF8 8B465C mov eax, [esi+92] ; @@BF 8,23,+,COS0_8,1 4516 00002EFB 014620 add [esi+32], eax 4517 00002EFE 8B461C mov eax, [esi+28] ; @@BF 7,8,+,COS1_7,4 4518 00002F01 8B5620 mov edx, [esi+32] 4519 00002F04 01561C add [esi+28], edx 4520 00002F07 29D0 sub eax, edx 4521 00002F09 C1E004 shl eax, 4 4522 00002F0C BA044E9E51 mov edx, 519E4E04h ; COS1_7 4523 00002F11 F7EA imul edx 4524 00002F13 895620 mov [esi+32], edx 4525 00002F16 8B06 mov eax, [esi] ; skip @@BF 23,24,-,COS1_7,4 4526 ; @@BF 0,7,+,COS2_0,1 4527 00002F18 8B561C mov edx, [esi+28] 4528 00002F1B 0116 add [esi], edx 4529 00002F1D 29D0 sub eax, edx 4530 00002F1F D1E0 shl eax, 1 4531 00002F21 BA46FB4041 mov edx, 4140FB46h ; COS2_0 4532 00002F26 F7EA imul edx 4533 00002F28 89561C mov [esi+28], edx 4534 00002F2B 8B4620 mov eax, [esi+32] ; @@BF 8,15,-,COS2_0,1 4535 00002F2E 8B563C mov edx, [esi+60] 4536 00002F31 015620 add [esi+32], edx 4537 00002F34 29D0 sub eax, edx 4538 00002F36 D1E0 shl eax, 1 4539 00002F38 BABA04BFBE mov edx, 0BEBF04BAh ; -COS2_0 4540 00002F3D F7EA imul edx 4541 00002F3F 89563C mov [esi+60], edx 4542 00002F42 8B4670 mov eax, [esi+112] ; skip @@BF 16,23,+,COS2_0,1 4543 ; @@BF 24,31,-,COS2_0,1 4544 ; @@BF 3,28,+,COS0_3,1 4545 00002F45 01460C add [esi+12], eax 4546 00002F48 8B464C mov eax, [esi+76] ; @@BF 12,19,+,COS0_12,2 4547 00002F4B 014630 add [esi+48], eax 4548 00002F4E 8B460C mov eax, [esi+12] ; @@BF 3,12,+,COS1_3,1 4549 00002F51 8B5630 mov edx, [esi+48] 4550 00002F54 01560C add [esi+12], edx 4551 00002F57 29D0 sub eax, edx 4552 00002F59 D1E0 shl eax, 1 4553 00002F5B BA630ECB52 mov edx, 52CB0E63h 4554 00002F60 F7EA imul edx 4555 00002F62 895630 mov [esi+48], edx 4556 00002F65 8B466C mov eax, [esi+108] ; @@BF 4,27,+,COS0_4,1 4557 00002F68 014610 add [esi+16], eax 4558 00002F6B 8B4650 mov eax, [esi+80] ; @@BF 11,20,+,COS0_11,2 4559 00002F6E 01462C add [esi+44], eax 4560 00002F71 8B4610 mov eax, [esi+16] ; @@BF 4,11,+,COS1_4,1 4561 00002F74 8B562C mov edx, [esi+44] 4562 00002F77 015610 add [esi+16], edx 4563 00002F7A 29D0 sub eax, edx 4564 00002F7C D1E0 shl eax, 1 4565 00002F7E BA2E40E264 mov edx, 64E2402Eh ; COS1_4 4566 00002F83 F7EA imul edx 4567 00002F85 89562C mov [esi+44], edx 4568 00002F88 8B460C mov eax, [esi+12] ; @@BF 3,4,+,COS2_3,3 4569 00002F8B 8B5610 mov edx, [esi+16] 4570 00002F8E 01560C add [esi+12], edx 4571 00002F91 29D0 sub eax, edx 4572 00002F93 C1E003 shl eax, 3 4573 00002F96 BA42670352 mov edx, 52036742h 4574 00002F9B F7EA imul edx 4575 00002F9D 895610 mov [esi+16], edx 4576 00002FA0 8B462C mov eax, [esi+44] ; @@BF 11,12,-,COS2_3,3 4577 00002FA3 8B5630 mov edx, [esi+48] 4578 00002FA6 01562C add [esi+44], edx 4579 00002FA9 29D0 sub eax, edx 4580 00002FAB C1E003 shl eax, 3 4581 00002FAE BABE98FCAD mov edx, 0ADFC98BEh ; -COS2_3 4582 00002FB3 F7EA imul edx 4583 00002FB5 895630 mov [esi+48], edx 4584 00002FB8 8B06 mov eax, [esi] ; @@BF 0,3,+,COS3_0,1 4585 00002FBA 8B560C mov edx, [esi+12] 4586 00002FBD 0116 add [esi], edx 4587 00002FBF 29D0 sub eax, edx 4588 00002FC1 D1E0 shl eax, 1 4589 00002FC3 BAF0E94545 mov edx, 4545E9F0h 4590 00002FC8 F7EA imul edx 4591 00002FCA 89560C mov [esi+12], edx 4592 00002FCD 8B4610 mov eax, [esi+16] ; @@BF 4,7,-,COS3_0,1 4593 00002FD0 8B561C mov edx, [esi+28] 4594 00002FD3 015610 add [esi+16], edx 4595 00002FD6 29D0 sub eax, edx 4596 00002FD8 D1E0 shl eax, 1 4597 00002FDA BA1016BABA mov edx, 0BABA1610h 4598 00002FDF F7EA imul edx 4599 00002FE1 89561C mov [esi+28], edx 4600 00002FE4 8B4620 mov eax, [esi+32] ; @@BF 8,11,+,COS3_0,1 4601 00002FE7 8B562C mov edx, [esi+44] 4602 00002FEA 015620 add [esi+32], edx 4603 00002FED 29D0 sub eax, edx 4604 00002FEF D1E0 shl eax, 1 4605 00002FF1 BAF0E94545 mov edx, 4545E9F0h 4606 00002FF6 F7EA imul edx 4607 00002FF8 89562C mov [esi+44], edx 4608 00002FFB 8B4630 mov eax, [esi+48] ; @@BF 12,15,-,COS3_0,1 4609 00002FFE 8B563C mov edx, [esi+60] 4610 00003001 015630 add [esi+48], edx 4611 00003004 29D0 sub eax, edx 4612 00003006 D1E0 shl eax, 1 4613 00003008 BA1016BABA mov edx, 0BABA1610h ; -COS3_0 4614 0000300D F7EA imul edx 4615 0000300F 89563C mov [esi+60], edx 4616 00003012 8B4678 mov eax, [esi+120] ; @@BF 1,30,+,COS0_1,1 4617 00003015 014604 add [esi+4], eax 4618 00003018 8B4644 mov eax, [esi+68] ; @@BF 14,17,+,COS0_14,3 4619 0000301B 014638 add [esi+56], eax 4620 0000301E 8B4604 mov eax, [esi+4] ; @@BF 1,14,+,COS1_1,1 4621 00003021 8B5638 mov edx, [esi+56] 4622 00003024 015604 add [esi+4], edx 4623 00003027 29D0 sub eax, edx 4624 00003029 D1E0 shl eax, 1 4625 0000302B BA103CE142 mov edx, 42E13C10h 4626 00003030 F7EA imul edx 4627 00003032 895638 mov [esi+56], edx 4628 00003035 8B4664 mov eax, [esi+100] ; @@BF 6,25,+,COS0_6,1 4629 00003038 014618 add [esi+24], eax 4630 0000303B 8B4658 mov eax, [esi+88] ; @@BF 9,22,+,COS0_9,1 4631 0000303E 014624 add [esi+36], eax 4632 00003041 8B4618 mov eax, [esi+24] ; @@BF 6,9,+,COS1_6,2 4633 00003044 8B5624 mov edx, [esi+36] 4634 00003047 015618 add [esi+24], edx 4635 0000304A 29D0 sub eax, edx 4636 0000304C C1E002 shl eax, 2 4637 0000304F BAC2923C6E mov edx, 6E3C92C2h ; +COS1_6 4638 00003054 F7EA imul edx 4639 00003056 895624 mov [esi+36], edx 4640 00003059 8B4604 mov eax, [esi+4] ; @@BF 1,6,+,COS2_1,1 4641 0000305C 8B5618 mov edx, [esi+24] 4642 0000305F 015604 add [esi+4], edx 4643 00003062 29D0 sub eax, edx 4644 00003064 D1E0 shl eax, 1 4645 00003066 BA88DEF84C mov edx, 4CF8DE88h 4646 0000306B F7EA imul edx 4647 0000306D 895618 mov [esi+24], edx 4648 00003070 8B4624 mov eax, [esi+36] ; @@BF 9,14,-,COS2_1,1 4649 00003073 8B5638 mov edx, [esi+56] 4650 00003076 015624 add [esi+36], edx 4651 00003079 29D0 sub eax, edx 4652 0000307B D1E0 shl eax, 1 4653 0000307D BA782107B3 mov edx, 0B3072178h ; -COS2_1 4654 00003082 F7EA imul edx 4655 00003084 895638 mov [esi+56], edx 4656 00003087 8B4674 mov eax, [esi+116] ; @@BF 2,29,+,COS0_2,1 4657 0000308A 014608 add [esi+8], eax 4658 0000308D 8B4648 mov eax, [esi+72] ; @@BF 13,18,+,COS0_13,3 4659 00003090 014634 add [esi+52], eax 4660 00003093 8B4608 mov eax, [esi+8] ; @@BF 2,13,+,COS1_2,1 4661 00003096 8B5634 mov edx, [esi+52] 4662 00003099 015608 add [esi+8], edx 4663 0000309C 29D0 sub eax, edx 4664 0000309E D1E0 shl eax, 1 4665 000030A0 BA459F9148 mov edx, 48919F45h 4666 000030A5 F7EA imul edx 4667 000030A7 895634 mov [esi+52], edx 4668 000030AA 8B4668 mov eax, [esi+104] ; @@BF 5,26,+,COS0_5,1 4669 000030AD 014614 add [esi+20], eax 4670 000030B0 8B4654 mov eax, [esi+84] ; @@BF 10,21,+,COS0_10,1 4671 000030B3 014628 add [esi+40], eax 4672 000030B6 8B4614 mov eax, [esi+20] ; @@BF 5,10,+,COS1_5,2 4673 000030B9 8B5628 mov edx, [esi+40] 4674 000030BC 015614 add [esi+20], edx 4675 000030BF 29D0 sub eax, edx 4676 000030C1 C1E002 shl eax, 2 4677 000030C4 BAAA24E243 mov edx, 43E224AAh 4678 000030C9 F7EA imul edx 4679 000030CB 895628 mov [esi+40], edx 4680 000030CE 8B4608 mov eax, [esi+8] ; @@BF 2,5,+,COS2_2,1 4681 000030D1 8B5614 mov edx, [esi+20] 4682 000030D4 015608 add [esi+8], edx 4683 000030D7 29D0 sub eax, edx 4684 000030D9 D1E0 shl eax, 1 4685 000030DB BABF6B3273 mov edx, 73326BBFh ; COS2_2 4686 000030E0 F7EA imul edx 4687 000030E2 895614 mov [esi+20], edx 4688 000030E5 8B4628 mov eax, [esi+40] ; @@BF 10,13,-,COS2_2,1 4689 000030E8 8B5634 mov edx, [esi+52] 4690 000030EB 015628 add [esi+40], edx 4691 000030EE 29D0 sub eax, edx 4692 000030F0 D1E0 shl eax, 1 4693 000030F2 BA4194CD8C mov edx, 8CCD9441h ; -COS2_2 4694 000030F7 F7EA imul edx 4695 000030F9 895634 mov [esi+52], edx 4696 000030FC 8B4604 mov eax, [esi+4] ; @@BF 1,2,+,COS3_1,2 4697 000030FF 8B5608 mov edx, [esi+8] 4698 00003102 015604 add [esi+4], edx 4699 00003105 29D0 sub eax, edx 4700 00003107 C1E002 shl eax, 2 4701 0000310A BA46BA9E53 mov edx, 539EBA46h 4702 0000310F F7EA imul edx 4703 00003111 895608 mov [esi+8], edx 4704 00003114 8B4614 mov eax, [esi+20] ; @@BF 5,6,-,COS3_1,2 4705 00003117 8B5618 mov edx, [esi+24] 4706 0000311A 015614 add [esi+20], edx 4707 0000311D 29D0 sub eax, edx 4708 0000311F C1E002 shl eax, 2 4709 00003122 BABA4561AC mov edx, 0AC6145BAh 4710 00003127 F7EA imul edx 4711 00003129 895618 mov [esi+24], edx 4712 0000312C 8B4624 mov eax, [esi+36] ; IF rate_shift LT 2 4713 ; @@BF 9,10,+,COS3_1,2 4714 0000312F 8B5628 mov edx, [esi+40] 4715 00003132 015624 add [esi+36], edx 4716 00003135 29D0 sub eax, edx 4717 00003137 C1E002 shl eax, 2 4718 0000313A BA46BA9E53 mov edx, 539EBA46h ; +COS3_1 4719 0000313F F7EA imul edx 4720 00003141 895628 mov [esi+40], edx 4721 00003144 8B4634 mov eax, [esi+52] ; @@BF 13,14,-,COS3_1,2 4722 00003147 8B5638 mov edx, [esi+56] 4723 0000314A 015634 add [esi+52], edx 4724 0000314D 29D0 sub eax, edx 4725 0000314F C1E002 shl eax, 2 4726 00003152 BABA4561AC mov edx, 0AC6145BAh ; -COS3_1 4727 00003157 F7EA imul edx 4728 00003159 895638 mov [esi+56], edx ; ENDIF 4729 0000315C 8B06 mov eax, [esi] ; @@BF1 macro a, b, c, d 4730 ; @@BF a, b,+,COS4_0, 1 4731 ; @@BF c, d,-,COS4_0, 1 4732 ; @@ADD c, d 4733 ; endm 4734 ; @@BF1 0,1,2,3 4735 0000315E 8B5604 mov edx, [esi+4] ; @@BF 0,1,+,COS4_0,1 4736 00003161 0116 add [esi], edx 4737 00003163 29D0 sub eax, edx 4738 00003165 D1E0 shl eax, 1 4739 00003167 BA9A79825A mov edx, 5A82799Ah 4740 0000316C F7EA imul edx 4741 0000316E 895604 mov [esi+4], edx 4742 00003171 8B4608 mov eax, [esi+8] ; @@BF 2,3,+,COS4_0,1 4743 00003174 8B560C mov edx, [esi+12] 4744 00003177 015608 add [esi+8], edx 4745 0000317A 29D0 sub eax, edx 4746 0000317C D1E0 shl eax, 1 4747 0000317E BA66867DA5 mov edx, 0A57D8666h 4748 00003183 F7EA imul edx 4749 00003185 89560C mov [esi+12], edx 4750 00003188 8B460C mov eax, [esi+12] ; @@ADD 2,3 4751 0000318B 014608 add [esi+8], eax 4752 0000318E 8B4610 mov eax, [esi+16] ; @@BF2 macro a, b, c, d 4753 ; @@BF a, b,+,COS4_0, 1 4754 ; @@BF c, d,-,COS4_0, 1 4755 ; @@ADD c, d 4756 ; @@ADD a, c 4757 ; @@ADD c, b 4758 ; @@ADD b, d 4759 ; endm 4760 ; @@BF2 4,5,6,7 4761 00003191 8B5614 mov edx, [esi+20] ; @@BF 4,5,+,COS4_0,1 4762 00003194 015610 add [esi+16], edx 4763 00003197 29D0 sub eax, edx 4764 00003199 D1E0 shl eax, 1 4765 0000319B BA9A79825A mov edx, 5A82799Ah ; +COS4_0 4766 000031A0 F7EA imul edx 4767 000031A2 895614 mov [esi+20], edx 4768 000031A5 8B4618 mov eax, [esi+24] ; @@BF 6,7,-,COS4_0,1 4769 000031A8 8B561C mov edx, [esi+28] 4770 000031AB 015618 add [esi+24], edx 4771 000031AE 29D0 sub eax, edx 4772 000031B0 D1E0 shl eax, 1 4773 000031B2 BA66867DA5 mov edx, 0A57D8666h ; -COS4_0 4774 000031B7 F7EA imul edx 4775 000031B9 89561C mov [esi+28], edx 4776 000031BC 8B461C mov eax, [esi+28] ; @@ADD macro dst,src 4777 ; IF (rate_shift EQ 0) or (dst LT 16) 4778 ; ;tab[a] += tab[b] 4779 ; mov eax,dword ptr [esi+src*4] 4780 ; add dword ptr [esi+dst*4],eax 4781 ; ENDIF 4782 ; endm 4783 ; @@ADD 6,7 4784 000031BF 014618 add [esi+24], eax 4785 000031C2 8B4618 mov eax, [esi+24] ; @@ADD 4,6 4786 000031C5 014610 add [esi+16], eax 4787 000031C8 8B4614 mov eax, [esi+20] ; @@ADD 6,5 4788 000031CB 014618 add [esi+24], eax 4789 000031CE 8B461C mov eax, [esi+28] ; @@ADD 5,7 4790 000031D1 014614 add [esi+20], eax 4791 000031D4 8B4620 mov eax, [esi+32] ; IF rate_shift LT 2 4792 ; @@BF1 8,9,10,11 4793 000031D7 8B5624 mov edx, [esi+36] 4794 000031DA 015620 add [esi+32], edx 4795 000031DD 29D0 sub eax, edx 4796 000031DF D1E0 shl eax, 1 4797 000031E1 BA9A79825A mov edx, 5A82799Ah 4798 000031E6 F7EA imul edx 4799 000031E8 895624 mov [esi+36], edx 4800 000031EB 8B4628 mov eax, [esi+40] 4801 000031EE 8B562C mov edx, [esi+44] 4802 000031F1 015628 add [esi+40], edx 4803 000031F4 29D0 sub eax, edx 4804 000031F6 D1E0 shl eax, 1 4805 000031F8 BA66867DA5 mov edx, 0A57D8666h 4806 000031FD F7EA imul edx 4807 000031FF 89562C mov [esi+44], edx 4808 00003202 8B462C mov eax, [esi+44] 4809 00003205 014628 add [esi+40], eax 4810 00003208 8B4630 mov eax, [esi+48] ; @@BF2 12,13,14,15 4811 0000320B 8B5634 mov edx, [esi+52] 4812 0000320E 015630 add [esi+48], edx 4813 00003211 29D0 sub eax, edx 4814 00003213 D1E0 shl eax, 1 4815 00003215 BA9A79825A mov edx, 5A82799Ah 4816 0000321A F7EA imul edx 4817 0000321C 895634 mov [esi+52], edx 4818 0000321F 8B4638 mov eax, [esi+56] 4819 00003222 8B563C mov edx, [esi+60] 4820 00003225 015638 add [esi+56], edx 4821 00003228 29D0 sub eax, edx 4822 0000322A D1E0 shl eax, 1 4823 0000322C BA66867DA5 mov edx, 0A57D8666h 4824 00003231 F7EA imul edx 4825 00003233 89563C mov [esi+60], edx 4826 00003236 8B463C mov eax, [esi+60] 4827 00003239 014638 add [esi+56], eax 4828 0000323C 8B4638 mov eax, [esi+56] 4829 0000323F 014630 add [esi+48], eax 4830 00003242 8B4634 mov eax, [esi+52] 4831 00003245 014638 add [esi+56], eax 4832 00003248 8B463C mov eax, [esi+60] 4833 0000324B 014634 add [esi+52], eax 4834 0000324E 8B06 mov eax, [esi] ; @@OUT macro dst,src1,src2 4835 ; IF ((dst AND ((1 SHL rate_shift)-1)) EQ 0) 4836 ; mov eax,dword ptr [esi+src1*4] 4837 ; IFDIFI ,<-> 4838 ; add eax,dword ptr [esi+src2*4] 4839 ; ENDIF 4840 ; IF SYNTH32 4841 ; mov dword ptr [edi+dst*4],eax 4842 ; IF (LONG_WINDOW EQ 0) 4843 ; mov dword ptr [edi+dst*4+512*4],eax 4844 ; ENDIF 4845 ; ELSE 4846 ; ...... 4847 ; ENDIF 4848 ; @@OUT 0,0,- 4849 00003250 8907 mov [edi], eax 4850 00003252 8B4604 mov eax, [esi+4] ; @@OUT 16,1,- 4851 00003255 894740 mov [edi+64], eax 4852 00003258 8B4608 mov eax, [esi+8] ; @@OUT 8,2,- 4853 0000325B 894720 mov [edi+32], eax 4854 0000325E 8B460C mov eax, [esi+12] ; @@OUT 24,3,- 4855 00003261 894760 mov [edi+96], eax 4856 00003264 8B4610 mov eax, [esi+16] ; @@OUT 4,4,- 4857 00003267 894710 mov [edi+16], eax 4858 0000326A 8B4614 mov eax, [esi+20] ; @@OUT 20,5,- 4859 0000326D 894750 mov [edi+80], eax 4860 00003270 8B4618 mov eax, [esi+24] ; @@OUT 12,6,- 4861 00003273 894730 mov [edi+48], eax 4862 00003276 8B461C mov eax, [esi+28] ; @@OUT 28,7,- 4863 00003279 894770 mov [edi+112], eax 4864 0000327C 8B4620 mov eax, [esi+32] ; @@OUT 2,8,12 4865 0000327F 034630 add eax, [esi+48] 4866 00003282 894708 mov [edi+8], eax 4867 00003285 8B4624 mov eax, [esi+36] ; @@OUT 18,9,13 4868 00003288 034634 add eax, [esi+52] 4869 0000328B 894748 mov [edi+72], eax 4870 0000328E 8B4628 mov eax, [esi+40] ; @@OUT 10,10,14 4871 00003291 034638 add eax, [esi+56] 4872 00003294 894728 mov [edi+40], eax 4873 00003297 8B462C mov eax, [esi+44] ; @@OUT 26,11,15 4874 0000329A 03463C add eax, [esi+60] 4875 0000329D 894768 mov [edi+104], eax 4876 000032A0 8B4630 mov eax, [esi+48] ; @@OUT 6,12,10 4877 000032A3 034628 add eax, [esi+40] 4878 000032A6 894718 mov [edi+24], eax 4879 000032A9 8B4634 mov eax, [esi+52] ; @@OUT 22,13,11 4880 000032AC 03462C add eax, [esi+44] 4881 000032AF 894758 mov [edi+88], eax 4882 000032B2 8B4638 mov eax, [esi+56] ; @@OUT 14,14,9 4883 000032B5 034624 add eax, [esi+36] 4884 000032B8 894738 mov [edi+56], eax 4885 000032BB 8B463C mov eax, [esi+60] ; @@OUT 30,15,- 4886 000032BE 894778 mov [edi+120], eax 4887 000032C1 C3 retn 4888 4889 4890 ; =============== S U B R O U T I N E ======================================= 4891 4892 4893 mp3_dct32_shift_2: 4894 000032C2 8B467C mov eax, [esi+124] ; mp3_dct32_macro macro rate_shift ; rate_shift = 2 4895 000032C5 0106 add [esi], eax ; @@BF macro a,b,sign,cos,shift 4896 ; @@need_a equ (rate_shift EQ 0) or (a LT 16) ; a = 0 4897 ; @@need_b equ (rate_shift EQ 0) or (b LT 16) ; b = 31 4898 ; IF @@need_a AND @@need_b ; rate_shift = 0 4899 ; mov eax,dword ptr [esi+a*4] 4900 ; mov edx,dword ptr [esi+b*4] 4901 ; add dword ptr [esi+a*4],edx 4902 ; ELSEIF @@need_a 4903 ; mov eax,dword ptr [esi+b*4] 4904 ; add dword ptr [esi+a*4],eax 4905 ; 4906 ; @@BF 0,31,+,COS0_0,1 4907 000032C7 8B4640 mov eax, [esi+64] ; @@BF 15,16,+,COS0_15,5 4908 000032CA 01463C add [esi+60], eax 4909 000032CD 8B06 mov eax, [esi] ; @@BF 0,15,+,COS1_0,1 4910 000032CF 8B563C mov edx, [esi+60] 4911 000032D2 0116 add [esi], edx 4912 000032D4 29D0 sub eax, edx 4913 000032D6 D1E0 shl eax, 1 4914 000032D8 BA72464F40 mov edx, 404F4672h ; COS1_0 4915 000032DD F7EA imul edx 4916 000032DF 89563C mov [esi+60], edx 4917 000032E2 8B4660 mov eax, [esi+96] ; @@BF 7,24,+,COS0_7,1 4918 000032E5 01461C add [esi+28], eax 4919 000032E8 8B465C mov eax, [esi+92] ; @@BF 8,23,+,COS0_8,1 4920 000032EB 014620 add [esi+32], eax 4921 000032EE 8B461C mov eax, [esi+28] ; @@BF 7,8,+,COS1_7,4 4922 000032F1 8B5620 mov edx, [esi+32] 4923 000032F4 01561C add [esi+28], edx 4924 000032F7 29D0 sub eax, edx 4925 000032F9 C1E004 shl eax, 4 4926 000032FC BA044E9E51 mov edx, 519E4E04h ; COS1_7 4927 00003301 F7EA imul edx 4928 00003303 895620 mov [esi+32], edx 4929 00003306 8B06 mov eax, [esi] ; @@BF 0,7,+,COS2_0,1 4930 00003308 8B561C mov edx, [esi+28] 4931 0000330B 0116 add [esi], edx 4932 0000330D 29D0 sub eax, edx 4933 0000330F D1E0 shl eax, 1 4934 00003311 BA46FB4041 mov edx, 4140FB46h ; COS2_0 4935 00003316 F7EA imul edx 4936 00003318 89561C mov [esi+28], edx 4937 0000331B 8B4620 mov eax, [esi+32] ; @@BF 8,15,-,COS2_0,1 4938 0000331E 8B563C mov edx, [esi+60] 4939 00003321 015620 add [esi+32], edx 4940 00003324 29D0 sub eax, edx 4941 00003326 D1E0 shl eax, 1 4942 00003328 BABA04BFBE mov edx, 0BEBF04BAh 4943 0000332D F7EA imul edx 4944 0000332F 89563C mov [esi+60], edx 4945 00003332 8B4670 mov eax, [esi+112] ; @@BF 3,28,+,COS0_3,1 4946 00003335 01460C add [esi+12], eax 4947 00003338 8B464C mov eax, [esi+76] ; @@BF 12,19,+,COS0_12,2 4948 0000333B 014630 add [esi+48], eax 4949 0000333E 8B460C mov eax, [esi+12] ; @@BF 3,12,+,COS1_3,1 4950 00003341 8B5630 mov edx, [esi+48] 4951 00003344 01560C add [esi+12], edx 4952 00003347 29D0 sub eax, edx 4953 00003349 D1E0 shl eax, 1 4954 0000334B BA630ECB52 mov edx, 52CB0E63h ; COS1_3 4955 00003350 F7EA imul edx 4956 00003352 895630 mov [esi+48], edx 4957 00003355 8B466C mov eax, [esi+108] ; @@BF 4,27,+,COS0_4,1 4958 00003358 014610 add [esi+16], eax 4959 0000335B 8B4650 mov eax, [esi+80] ; @@BF 11,20,+,COS0_11,2 4960 0000335E 01462C add [esi+44], eax 4961 00003361 8B4610 mov eax, [esi+16] ; @@BF 4,11,+,COS1_4,1 4962 00003364 8B562C mov edx, [esi+44] 4963 00003367 015610 add [esi+16], edx 4964 0000336A 29D0 sub eax, edx 4965 0000336C D1E0 shl eax, 1 4966 0000336E BA2E40E264 mov edx, 64E2402Eh 4967 00003373 F7EA imul edx 4968 00003375 89562C mov [esi+44], edx 4969 00003378 8B460C mov eax, [esi+12] ; @@BF 3,4,+,COS2_3,3 4970 0000337B 8B5610 mov edx, [esi+16] 4971 0000337E 01560C add [esi+12], edx 4972 00003381 29D0 sub eax, edx 4973 00003383 C1E003 shl eax, 3 4974 00003386 BA42670352 mov edx, 52036742h 4975 0000338B F7EA imul edx 4976 0000338D 895610 mov [esi+16], edx 4977 00003390 8B462C mov eax, [esi+44] ; @@BF 11,12,-,COS2_3,3 4978 00003393 8B5630 mov edx, [esi+48] 4979 00003396 01562C add [esi+44], edx 4980 00003399 29D0 sub eax, edx 4981 0000339B C1E003 shl eax, 3 4982 0000339E BABE98FCAD mov edx, 0ADFC98BEh ; -COS2_3 4983 000033A3 F7EA imul edx 4984 000033A5 895630 mov [esi+48], edx 4985 000033A8 8B06 mov eax, [esi] ; @@BF 0,3,+,COS3_0,1 4986 000033AA 8B560C mov edx, [esi+12] 4987 000033AD 0116 add [esi], edx 4988 000033AF 29D0 sub eax, edx 4989 000033B1 D1E0 shl eax, 1 4990 000033B3 BAF0E94545 mov edx, 4545E9F0h 4991 000033B8 F7EA imul edx 4992 000033BA 89560C mov [esi+12], edx 4993 000033BD 8B4610 mov eax, [esi+16] ; @@BF 4,7,-,COS3_0,1 4994 000033C0 8B561C mov edx, [esi+28] 4995 000033C3 015610 add [esi+16], edx 4996 000033C6 29D0 sub eax, edx 4997 000033C8 D1E0 shl eax, 1 4998 000033CA BA1016BABA mov edx, 0BABA1610h 4999 000033CF F7EA imul edx 5000 000033D1 89561C mov [esi+28], edx 5001 000033D4 8B4620 mov eax, [esi+32] ; @@BF 8,11,+,COS3_0,1 5002 000033D7 8B562C mov edx, [esi+44] 5003 000033DA 015620 add [esi+32], edx 5004 000033DD 29D0 sub eax, edx 5005 000033DF D1E0 shl eax, 1 5006 000033E1 BAF0E94545 mov edx, 4545E9F0h 5007 000033E6 F7EA imul edx 5008 000033E8 89562C mov [esi+44], edx 5009 000033EB 8B4630 mov eax, [esi+48] ; @@BF 12,15,-,COS3_0,1 5010 000033EE 8B563C mov edx, [esi+60] 5011 000033F1 015630 add [esi+48], edx 5012 000033F4 29D0 sub eax, edx 5013 000033F6 D1E0 shl eax, 1 5014 000033F8 BA1016BABA mov edx, 0BABA1610h 5015 000033FD F7EA imul edx 5016 000033FF 89563C mov [esi+60], edx 5017 00003402 8B4678 mov eax, [esi+120] ; @@BF 1,30,+,COS0_1,1 5018 00003405 014604 add [esi+4], eax 5019 00003408 8B4644 mov eax, [esi+68] ; @@BF 14,17,+,COS0_14,3 5020 0000340B 014638 add [esi+56], eax 5021 0000340E 8B4604 mov eax, [esi+4] ; @@BF 1,14,+,COS1_1,1 5022 00003411 8B5638 mov edx, [esi+56] 5023 00003414 015604 add [esi+4], edx 5024 00003417 29D0 sub eax, edx 5025 00003419 D1E0 shl eax, 1 5026 0000341B BA103CE142 mov edx, 42E13C10h ; COS1_1 5027 00003420 F7EA imul edx 5028 00003422 895638 mov [esi+56], edx 5029 00003425 8B4664 mov eax, [esi+100] ; @@BF 6,25,+,COS0_6,1 5030 00003428 014618 add [esi+24], eax 5031 0000342B 8B4658 mov eax, [esi+88] ; @@BF 9,22,+,COS0_9,1 5032 0000342E 014624 add [esi+36], eax 5033 00003431 8B4618 mov eax, [esi+24] ; @@BF 6,9,+,COS1_6,2 5034 00003434 8B5624 mov edx, [esi+36] 5035 00003437 015618 add [esi+24], edx 5036 0000343A 29D0 sub eax, edx 5037 0000343C C1E002 shl eax, 2 5038 0000343F BAC2923C6E mov edx, 6E3C92C2h 5039 00003444 F7EA imul edx 5040 00003446 895624 mov [esi+36], edx 5041 00003449 8B4604 mov eax, [esi+4] ; @@BF 1,6,+,COS2_1,1 5042 0000344C 8B5618 mov edx, [esi+24] 5043 0000344F 015604 add [esi+4], edx 5044 00003452 29D0 sub eax, edx 5045 00003454 D1E0 shl eax, 1 5046 00003456 BA88DEF84C mov edx, 4CF8DE88h ; COS2_1 5047 0000345B F7EA imul edx 5048 0000345D 895618 mov [esi+24], edx 5049 00003460 8B4624 mov eax, [esi+36] ; @@BF 9,14,-,COS2_1,1 5050 00003463 8B5638 mov edx, [esi+56] 5051 00003466 015624 add [esi+36], edx 5052 00003469 29D0 sub eax, edx 5053 0000346B D1E0 shl eax, 1 5054 0000346D BA782107B3 mov edx, 0B3072178h ; -COS2_1 5055 00003472 F7EA imul edx 5056 00003474 895638 mov [esi+56], edx 5057 00003477 8B4674 mov eax, [esi+116] ; @@BF 2,29,+,COS0_2,1 5058 0000347A 014608 add [esi+8], eax 5059 0000347D 8B4648 mov eax, [esi+72] ; @@BF 13,18,+,COS0_13,3 5060 00003480 014634 add [esi+52], eax 5061 00003483 8B4608 mov eax, [esi+8] ; @@BF 2,13,+,COS1_2,1 5062 00003486 8B5634 mov edx, [esi+52] 5063 00003489 015608 add [esi+8], edx 5064 0000348C 29D0 sub eax, edx 5065 0000348E D1E0 shl eax, 1 5066 00003490 BA459F9148 mov edx, 48919F45h 5067 00003495 F7EA imul edx 5068 00003497 895634 mov [esi+52], edx 5069 0000349A 8B4668 mov eax, [esi+104] ; @@BF 5,26,+,COS0_5,1 5070 0000349D 014614 add [esi+20], eax 5071 000034A0 8B4654 mov eax, [esi+84] ; @@BF 10,21,+,COS0_10,1 5072 000034A3 014628 add [esi+40], eax 5073 000034A6 8B4614 mov eax, [esi+20] ; @@BF 5,10,+,COS1_5,2 5074 000034A9 8B5628 mov edx, [esi+40] 5075 000034AC 015614 add [esi+20], edx 5076 000034AF 29D0 sub eax, edx 5077 000034B1 C1E002 shl eax, 2 5078 000034B4 BAAA24E243 mov edx, 43E224AAh 5079 000034B9 F7EA imul edx 5080 000034BB 895628 mov [esi+40], edx 5081 000034BE 8B4608 mov eax, [esi+8] ; @@BF 2,5,+,COS2_2,1 5082 000034C1 8B5614 mov edx, [esi+20] 5083 000034C4 015608 add [esi+8], edx 5084 000034C7 29D0 sub eax, edx 5085 000034C9 D1E0 shl eax, 1 5086 000034CB BABF6B3273 mov edx, 73326BBFh ; COS2_2 5087 000034D0 F7EA imul edx 5088 000034D2 895614 mov [esi+20], edx 5089 000034D5 8B4628 mov eax, [esi+40] ; @@BF 10,13,-,COS2_2,1 5090 000034D8 8B5634 mov edx, [esi+52] 5091 000034DB 015628 add [esi+40], edx 5092 000034DE 29D0 sub eax, edx 5093 000034E0 D1E0 shl eax, 1 5094 000034E2 BA4194CD8C mov edx, 8CCD9441h ; -COS2_2 5095 000034E7 F7EA imul edx 5096 000034E9 895634 mov [esi+52], edx 5097 000034EC 8B4604 mov eax, [esi+4] ; @@BF 1,2,+,COS3_1,2 5098 000034EF 8B5608 mov edx, [esi+8] 5099 000034F2 015604 add [esi+4], edx 5100 000034F5 29D0 sub eax, edx 5101 000034F7 C1E002 shl eax, 2 5102 000034FA BA46BA9E53 mov edx, 539EBA46h ; COS3_1 5103 000034FF F7EA imul edx 5104 00003501 895608 mov [esi+8], edx 5105 00003504 8B4614 mov eax, [esi+20] ; @@BF 5,6,-,COS3_1,2 5106 00003507 8B5618 mov edx, [esi+24] 5107 0000350A 015614 add [esi+14h], edx 5108 0000350D 29D0 sub eax, edx 5109 0000350F C1E002 shl eax, 2 5110 00003512 BABA4561AC mov edx, 0AC6145BAh ; -COS3_1 5111 00003517 F7EA imul edx 5112 00003519 895618 mov [esi+24], edx 5113 0000351C 8B06 mov eax, [esi] ; @@BF1 macro a, b, c, d 5114 ; @@BF a, b,+,COS4_0, 1 5115 ; @@BF c, d,-,COS4_0, 1 5116 ; @@ADD c, d 5117 ; endm 5118 ; @@BF1 0,1,2,3 5119 0000351E 8B5604 mov edx, [esi+4] ; @@BF 0,1,+,COS4_0,1 5120 00003521 0116 add [esi], edx 5121 00003523 29D0 sub eax, edx 5122 00003525 D1E0 shl eax, 1 5123 00003527 BA9A79825A mov edx, 5A82799Ah 5124 0000352C F7EA imul edx 5125 0000352E 895604 mov [esi+4], edx 5126 00003531 8B4608 mov eax, [esi+8] ; @@BF 2,3,-,COS4_0,1 5127 00003534 8B560C mov edx, [esi+12] 5128 00003537 015608 add [esi+8], edx 5129 0000353A 29D0 sub eax, edx 5130 0000353C D1E0 shl eax, 1 5131 0000353E BA66867DA5 mov edx, 0A57D8666h 5132 00003543 F7EA imul edx 5133 00003545 89560C mov [esi+12], edx 5134 00003548 8B460C mov eax, [esi+12] ; @@ADD 2,3 5135 0000354B 014608 add [esi+8], eax 5136 0000354E 8B4610 mov eax, [esi+16] ; @@BF2 macro a, b, c, d 5137 ; @@BF a, b,+,COS4_0, 1 5138 ; @@BF c, d,-,COS4_0, 1 5139 ; @@ADD c, d 5140 ; @@ADD a, c 5141 ; @@ADD c, b 5142 ; @@ADD b, d 5143 ; endm 5144 ; @@BF2 4,5,6,7 5145 00003551 8B5614 mov edx, [esi+20] ; @@BF 4,5,+,COS4_0,1 5146 00003554 015610 add [esi+16], edx 5147 00003557 29D0 sub eax, edx 5148 00003559 D1E0 shl eax, 1 5149 0000355B BA9A79825A mov edx, 5A82799Ah ; COS4_0 5150 00003560 F7EA imul edx 5151 00003562 895614 mov [esi+20], edx 5152 00003565 8B4618 mov eax, [esi+24] ; @@BF 6,7,-,COS4_0,1 5153 00003568 8B561C mov edx, [esi+28] 5154 0000356B 015618 add [esi+18h], edx 5155 0000356E 29D0 sub eax, edx 5156 00003570 D1E0 shl eax, 1 5157 00003572 BA66867DA5 mov edx, 0A57D8666h ; -COS4_0 5158 00003577 F7EA imul edx 5159 00003579 89561C mov [esi+28], edx 5160 0000357C 8B461C mov eax, [esi+28] ; @@ADD 6,7 5161 0000357F 014618 add [esi+24], eax 5162 00003582 8B4618 mov eax, [esi+24] ; @@ADD 4,6 5163 00003585 014610 add [esi+16], eax 5164 00003588 8B4614 mov eax, [esi+20] ; @@ADD 6,5 5165 0000358B 014618 add [esi+24], eax 5166 0000358E 8B461C mov eax, [esi+28] ; @@ADD 5,7 5167 00003591 014614 add [esi+20], eax 5168 00003594 8B06 mov eax, [esi] ; @@OUT macro dst,src1,src2 5169 ; IF ((dst AND ((1 SHL rate_shift)-1)) EQ 0) 5170 ; mov eax,dword ptr [esi+src1*4] 5171 ; IFDIFI ,<-> 5172 ; add eax,dword ptr [esi+src2*4] 5173 ; ENDIF 5174 ; IF SYNTH32 5175 ; mov dword ptr [edi+dst*4],eax 5176 ; IF (LONG_WINDOW EQ 0) 5177 ; mov dword ptr [edi+dst*4+512*4],eax 5178 ; ENDIF 5179 ; ELSE 5180 ; ...... 5181 ; ENDIF 5182 ; @@OUT 0,0,- 5183 00003596 8907 mov [edi], eax 5184 00003598 8B4604 mov eax, [esi+4] ; @@OUT 16,1,- 5185 0000359B 894740 mov [edi+64], eax 5186 0000359E 8B4608 mov eax, [esi+8] ; @@OUT 8,2,- 5187 000035A1 894720 mov [edi+32], eax 5188 000035A4 8B460C mov eax, [esi+12] ; @@OUT 24,3,- 5189 000035A7 894760 mov [edi+96], eax 5190 000035AA 8B4610 mov eax, [esi+16] ; @@OUT 4,4,- 5191 000035AD 894710 mov [edi+16], eax 5192 000035B0 8B4614 mov eax, [esi+20] ; @@OUT 20,5,- 5193 000035B3 894750 mov [edi+80], eax 5194 000035B6 8B4618 mov eax, [esi+24] ; @@OUT 12,6,- 5195 000035B9 894730 mov [edi+48], eax 5196 000035BC 8B461C mov eax, [esi+28] ; @@OUT 28,7,- 5197 000035BF 894770 mov [edi+112], eax 5198 000035C2 C3 retn 5199 5200 5201 ; =============== S U B R O U T I N E ======================================= 5202 5203 5204 synth_16bit_shift_0_fast: 5205 000035C3 F605[54760000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 0,0,1 5206 000035CA 740E jz short .no_rdtsc_supported 5207 000035CC 0F31 rdtsc 5208 000035CE 2905[CC770000] sub [rdtsc_synth_dct], eax 5209 000035D4 1915[D0770000] sbb [rdtsc_synth_dct+4], edx 5210 5211 .no_rdtsc_supported: 5212 000035DA BE[00BE0000] mov esi, mp3_sb_samples 5213 000035DF 8B3D[94F40000] mov edi, [mp3_samples_dst] 5214 000035E5 C705[A0F40000]0000- mov dword [mp3_curr_channel], 0 5214 000035ED 0000 5215 5216 .synth_channel_lop: 5217 000035EF 56 push esi 5218 000035F0 57 push edi 5219 000035F1 893D[E09D0000] mov [mp3_curr_syn_dst], edi 5220 000035F7 C705[A8F40000]0000- mov dword [mp3_curr_frame], 0 5220 000035FF 0000 5221 5222 .synth_frame_lop: 5223 00003601 56 push esi 5224 00003602 F605[54760000]10 test byte [cpuid_flags], 10h 5225 00003609 740E jz short .no_rdtsc_supported@ 5226 0000360B 0F31 rdtsc 5227 0000360D 2905[E4770000] sub [rdtsc_dct32], eax 5228 00003613 1915[E8770000] sbb [rdtsc_dct32+4], edx 5229 5230 .no_rdtsc_supported@: 5231 00003619 8B15[A0F40000] mov edx, [mp3_curr_channel] 5232 0000361F 8B0495[F8BD0000] mov eax, [mp3_synth_index+edx*4] 5233 00003626 832C95[F8BD0000]20 sub dword [mp3_synth_index+edx*4], 32 5234 0000362E C1E20A shl edx, 10 5235 00003631 25E0010000 and eax, 1E0h ; 1FFh-1Fh 5236 00003636 09D0 or eax, edx 5237 00003638 A3[DC9D0000] mov [mp3_curr_syn_index], eax 5238 0000363D 8B3D[DC9D0000] mov edi, [mp3_curr_syn_index] 5239 00003643 8D3CBD[F89D0000] lea edi, [mp3_synth_buf+edi*4] 5240 0000364A E8A3EFFFFF call mp3_dct32_shift_0 5241 0000364F F605[54760000]10 test byte [cpuid_flags], 10h 5242 00003656 740E jz short .no_rdtsc_supported@@ 5243 00003658 0F31 rdtsc 5244 0000365A 0105[E4770000] add [rdtsc_dct32], eax 5245 00003660 1115[E8770000] adc [rdtsc_dct32+4], edx 5246 5247 .no_rdtsc_supported@@: 5248 00003666 F605[54760000]10 test byte [cpuid_flags], 10h 5249 0000366D 740E jz short .no_rdtsc_supported@@@ 5250 0000366F 0F31 rdtsc 5251 00003671 2905[FC770000] sub [rdtsc_synth], eax 5252 00003677 1915[00780000] sbb [rdtsc_synth+4], edx 5253 5254 .no_rdtsc_supported@@@: 5255 0000367D E888000000 call mp3_synth_filter_this_16bit_shift_0_fast ; 5256 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 5257 00003682 F605[54760000]10 test byte [cpuid_flags], 10h 5258 00003689 740E jz short .no_rdtsc_supported@@@@ 5259 0000368B 0F31 rdtsc 5260 0000368D 0105[FC770000] add [rdtsc_synth], eax 5261 00003693 1115[00780000] adc [rdtsc_synth+4], edx 5262 5263 .no_rdtsc_supported@@@@: 5264 00003699 5E pop esi 5265 0000369A A1[9CF40000] mov eax, [mp3_samples_dst_step] 5266 0000369F C1E005 shl eax, 5 5267 000036A2 8A0D[4F760000] mov cl, [option_rate_shift] 5268 000036A8 D3E8 shr eax, cl 5269 000036AA 0105[E09D0000] add [mp3_curr_syn_dst], eax 5270 000036B0 81C680000000 add esi, 128 ; SBLIMIT*4 5271 000036B6 FF05[A8F40000] inc dword [mp3_curr_frame] 5272 000036BC A1[A8F40000] mov eax, [mp3_curr_frame] 5273 000036C1 3B05[E49D0000] cmp eax, [mp3_nb_frames] 5274 000036C7 0F8234FFFFFF jb .synth_frame_lop 5275 000036CD 5F pop edi 5276 000036CE 5E pop esi 5277 000036CF 033D[D89D0000] add edi, [mp3_bytes_per_sample] 5278 000036D5 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 5279 000036DB FF05[A0F40000] inc dword [mp3_curr_channel] 5280 000036E1 A1[A0F40000] mov eax, [mp3_curr_channel] 5281 000036E6 3B05[D09D0000] cmp eax, [mp3_output_num_channels] 5282 000036EC 0F82FDFEFFFF jb .synth_channel_lop 5283 000036F2 F605[54760000]10 test byte [cpuid_flags], 10h 5284 000036F9 740E jz short .no_rdtsc_supported@@@@@ 5285 000036FB 0F31 rdtsc 5286 000036FD 0105[CC770000] add [rdtsc_synth_dct], eax 5287 00003703 1115[D0770000] adc [rdtsc_synth_dct+4], edx 5288 5289 .no_rdtsc_supported@@@@@: 5290 00003709 C3 retn 5291 5292 5293 ; =============== S U B R O U T I N E ======================================= 5294 5295 5296 mp3_synth_filter_this_16bit_shift_0_fast: 5297 0000370A A1[DC9D0000] mov eax, [mp3_curr_syn_index] 5298 0000370F A9E0010000 test eax, 1E0h ; 1FFh-1Fh 5299 00003714 0F849C010000 jz .append_copy_to_window 5300 0000371A 90 nop 5301 5302 .append_copy_to_window_back: 5303 0000371B 89C5 mov ebp, eax 5304 0000371D 81E5C0010000 and ebp, 1C0h ; @win1,1FFh-1Fh-20h 5305 00003723 2520040000 and eax, 420h ; and eax,20h+(1 shl 10) ; bit5 and channel 5306 00003728 8D7010 lea esi, [eax+10h] ; @@syn1,[eax+10h] 5307 0000372B 8D7830 lea edi, [eax+30h] ; @@syn2,[eax+30h] 5308 0000372E F7DD neg ebp 5309 00003730 81E5C0010000 and ebp, 1C0h ; @win1,1FFh-1Fh-20h 5310 00003736 8B0D[E09D0000] mov ecx, [mp3_curr_syn_dst] ; @@dst,dword ptr [mp3_curr_syn_dst] 5311 5312 .samples_lop: 5313 0000373C BB00200020 mov ebx, 20002000h ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 5314 ; @@out_shift equ (OUT_SHIFT_fast+(8*force_8bit)) 5315 ; out_shift = 14 5316 00003741 8B14B5[F89D0000] mov edx, [mp3_synth_buf+esi*4] ; @@SUM8 macro sum,win,ww,syn 5317 ; @@SUM8 @@sum,@@win1,0,@@syn1 5318 ; IRP nn,0,1,2,3,4,5,6,7 5319 ; mov edx,dword ptr [mp3_synth_buf+syn*4+(nn*64*4)] 5320 ; movsx eax,word ptr [mp3_synth_win+win*2+(nn*64*2)+ww*2] 5321 ; imul eax,edx 5322 ; add sum,eax 5323 00003748 0FBF842D[B0EF0400] movsx eax, word [mp3_synth_win+ebp*2] ; nn=0, ww=0 5324 00003750 0FAFC2 imul eax, edx 5325 00003753 01C3 add ebx, eax 5326 00003755 8B14B5[F89E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] 5327 0000375C 0FBF842D[30F00400] movsx eax, word [(mp3_synth_win+80h)+ebp*2] ; nn=1, ww=0 5328 00003764 0FAFC2 imul eax, edx 5329 00003767 01C3 add ebx, eax 5330 00003769 8B14B5[F89F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 5331 00003770 0FBF842D[B0F00400] movsx eax, word [(mp3_synth_win+100h)+ebp*2] ; nn=2 5332 00003778 0FAFC2 imul eax, edx 5333 0000377B 01C3 add ebx, eax 5334 0000377D 8B14B5[F8A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 5335 00003784 0FBF842D[30F10400] movsx eax, word [(mp3_synth_win+180h)+ebp*2] ; nn=3 5336 0000378C 0FAFC2 imul eax, edx 5337 0000378F 01C3 add ebx, eax 5338 00003791 8B14B5[F8A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] 5339 00003798 0FBF842D[B0F10400] movsx eax, word [(mp3_synth_win+200h)+ebp*2] ; nn=4 5340 000037A0 0FAFC2 imul eax, edx 5341 000037A3 01C3 add ebx, eax 5342 000037A5 8B14B5[F8A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 5343 000037AC 0FBF842D[30F20400] movsx eax, word [(mp3_synth_win+280h)+ebp*2] ; nn=5 5344 000037B4 0FAFC2 imul eax, edx 5345 000037B7 01C3 add ebx, eax 5346 000037B9 8B14B5[F8A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 5347 000037C0 0FBF842D[B0F20400] movsx eax, word [(mp3_synth_win+300h)+ebp*2] ; nn=6 5348 000037C8 0FAFC2 imul eax, edx 5349 000037CB 01C3 add ebx, eax 5350 000037CD 8B14B5[F8A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 5351 000037D4 0FBF842D[30F30400] movsx eax, word [(mp3_synth_win+380h)+ebp*2] ; nn=7 5352 000037DC 0FAFC2 imul eax, edx 5353 000037DF 01C3 add ebx, eax 5354 000037E1 8B14BD[F89D0000] mov edx, [mp3_synth_buf+edi*4] ; @@SUM8 @@sum,@@win1,32, @@syn2 5355 000037E8 0FBF842D[F0EF0400] movsx eax, word [(mp3_synth_win+40h)+ebp*2] ; nn=0, ww=32 5356 000037F0 0FAFC2 imul eax, edx 5357 000037F3 01C3 add ebx, eax 5358 000037F5 8B14BD[F89E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 5359 000037FC 0FBF842D[70F00400] movsx eax, word [(mp3_synth_win+0C0h)+ebp*2] ; nn=1, ww=32 5360 00003804 0FAFC2 imul eax, edx 5361 00003807 01C3 add ebx, eax 5362 00003809 8B14BD[F89F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] 5363 00003810 0FBF842D[F0F00400] movsx eax, word [(mp3_synth_win+140h)+ebp*2] ; nn=2 5364 00003818 0FAFC2 imul eax, edx 5365 0000381B 01C3 add ebx, eax 5366 0000381D 8B14BD[F8A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 5367 00003824 0FBF842D[70F10400] movsx eax, word [(mp3_synth_win+1C0h)+ebp*2] ; nn=3 5368 0000382C 0FAFC2 imul eax, edx 5369 0000382F 01C3 add ebx, eax 5370 00003831 8B14BD[F8A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 5371 00003838 0FBF842D[F0F10400] movsx eax, word [(mp3_synth_win+240h)+ebp*2] ; nn=4 5372 00003840 0FAFC2 imul eax, edx 5373 00003843 01C3 add ebx, eax 5374 00003845 8B14BD[F8A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 5375 0000384C 0FBF842D[70F20400] movsx eax, word [(mp3_synth_win+2C0h)+ebp*2] ; nn=5 5376 00003854 0FAFC2 imul eax, edx 5377 00003857 01C3 add ebx, eax 5378 00003859 8B14BD[F8A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 5379 00003860 0FBF842D[F0F20400] movsx eax, word [(mp3_synth_win+340h)+ebp*2] ; nn=6 5380 00003868 0FAFC2 imul eax, edx 5381 0000386B 01C3 add ebx, eax 5382 0000386D 8B14BD[F8A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 5383 00003874 0FBF842D[70F30400] movsx eax, word [(mp3_synth_win+3C0h)+ebp*2] ; nn=7 5384 0000387C 0FAFC2 imul eax, edx 5385 0000387F 01C3 add ebx, eax 5386 00003881 81FB00000040 cmp ebx, 40000000h ; cmp @@sum,10000h SHL (@@out_shift) ; out_shift = 14 5387 00003887 7322 jnb short .sat 5388 00003889 C1FB0E sar ebx, 14 ; sar @@sum,(@@out_shift) 5389 0000388C 81EB00800000 sub ebx, 8000h ; sub @@sum,8000h ; make 16bit signed 5390 5391 .sat_back: 5392 00003892 668919 mov [ecx], bx ; mov word ptr [@@dst],@@sum_16bit 5393 00003895 030D[9CF40000] add ecx, [mp3_samples_dst_step] 5394 0000389B 46 inc esi ; inc @@syn1 5395 0000389C 4F dec edi ; dec @@syn2 5396 0000389D 45 inc ebp ; inc @@win1 5397 0000389E F7C51F000000 test ebp, 1Fh ; IF LONG_WINDOW 5398 000038A4 0F8592FEFFFF jnz .samples_lop ; test @@win1,1Fh 5399 000038AA C3 retn 5400 5401 .sat: 5402 000038AB C1FB1F sar ebx, 31 ; sar @@sum,31 ; FFFFFFFFh,00000000h 5403 000038AE 81F3FF7F0000 xor ebx, 7FFFh ; xor @@sum,7fffh ; FFFF8000h,00007FFFh (signed 16bit) 5404 000038B4 EBDC jmp short .sat_back 5405 5406 .append_copy_to_window: 5407 000038B6 8D3485[F89D0000] lea esi, [mp3_synth_buf+eax*4] ; IF SYNTH32 5408 000038BD 8DBE00080000 lea edi, [esi+2048] ; [esi+512*4] 5409 000038C3 B912000000 mov ecx, 18 ; (12h*4)/4 5410 000038C8 F3A5 rep movsd 5411 000038CA E94CFEFFFF jmp .append_copy_to_window_back 5412 5413 5414 ; =============== S U B R O U T I N E ======================================= 5415 5416 5417 synth_16bit_shift_1_fast: 5418 000038CF F605[54760000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 0,1,1 5419 000038D6 740E jz short .no_rdtsc_supported 5420 000038D8 0F31 rdtsc 5421 000038DA 2905[CC770000] sub [rdtsc_synth_dct], eax 5422 000038E0 1915[D0770000] sbb [rdtsc_synth_dct+4], edx 5423 5424 .no_rdtsc_supported: 5425 000038E6 BE[00BE0000] mov esi, mp3_sb_samples 5426 000038EB 8B3D[94F40000] mov edi, [mp3_samples_dst] 5427 000038F1 C705[A0F40000]0000- mov dword [mp3_curr_channel], 0 5427 000038F9 0000 5428 5429 .synth_channel_lop: 5430 000038FB 56 push esi 5431 000038FC 57 push edi 5432 000038FD 893D[E09D0000] mov [mp3_curr_syn_dst], edi 5433 00003903 C705[A8F40000]0000- mov dword [mp3_curr_frame], 0 5433 0000390B 0000 5434 5435 .synth_frame_lop: 5436 0000390D 56 push esi 5437 0000390E F605[54760000]10 test byte [cpuid_flags], 10h 5438 00003915 740E jz short .no_rdtsc_supported@ 5439 00003917 0F31 rdtsc 5440 00003919 2905[E4770000] sub [rdtsc_dct32], eax 5441 0000391F 1915[E8770000] sbb [rdtsc_dct32+4], edx 5442 5443 .no_rdtsc_supported@: 5444 00003925 8B15[A0F40000] mov edx, [mp3_curr_channel] 5445 0000392B 8B0495[F8BD0000] mov eax, [mp3_synth_index+edx*4] 5446 00003932 832C95[F8BD0000]20 sub dword [mp3_synth_index+edx*4], 32 5447 0000393A C1E20A shl edx, 10 5448 0000393D 25E0010000 and eax, 1E0h ; 1FFh-1Fh 5449 00003942 09D0 or eax, edx 5450 00003944 A3[DC9D0000] mov [mp3_curr_syn_index], eax 5451 00003949 8B3D[DC9D0000] mov edi, [mp3_curr_syn_index] 5452 0000394F 8D3CBD[F89D0000] lea edi, [mp3_synth_buf+edi*4] 5453 00003956 E877F5FFFF call mp3_dct32_shift_1 ; mp3_dct32_shift_&rate_shift 5454 0000395B F605[54760000]10 test byte [cpuid_flags], 10h 5455 00003962 740E jz short .no_rdtsc_supported@@ 5456 00003964 0F31 rdtsc 5457 00003966 0105[E4770000] add [rdtsc_dct32], eax 5458 0000396C 1115[E8770000] adc [rdtsc_dct32+4], edx 5459 5460 .no_rdtsc_supported@@: 5461 00003972 F605[54760000]10 test byte [cpuid_flags], 10h 5462 00003979 740E jz short .no_rdtsc_supported@@@ 5463 0000397B 0F31 rdtsc 5464 0000397D 2905[FC770000] sub [rdtsc_synth], eax 5465 00003983 1915[00780000] sbb [rdtsc_synth+4], edx 5466 5467 .no_rdtsc_supported@@@: 5468 00003989 E888000000 call mp3_synth_filter_this_16bit_shift_1_fast ; 5469 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 5470 0000398E F605[54760000]10 test byte [cpuid_flags], 10h 5471 00003995 740E jz short .no_rdtsc_supported@@@@ 5472 00003997 0F31 rdtsc 5473 00003999 0105[FC770000] add [rdtsc_synth], eax 5474 0000399F 1115[00780000] adc [rdtsc_synth+4], edx 5475 5476 .no_rdtsc_supported@@@@: 5477 000039A5 5E pop esi 5478 000039A6 A1[9CF40000] mov eax, [mp3_samples_dst_step] 5479 000039AB C1E005 shl eax, 5 5480 000039AE 8A0D[4F760000] mov cl, [option_rate_shift] 5481 000039B4 D3E8 shr eax, cl 5482 000039B6 0105[E09D0000] add [mp3_curr_syn_dst], eax 5483 000039BC 81C680000000 add esi, 128 ; SBLIMIT*4 5484 000039C2 FF05[A8F40000] inc dword [mp3_curr_frame] 5485 000039C8 A1[A8F40000] mov eax, [mp3_curr_frame] 5486 000039CD 3B05[E49D0000] cmp eax, [mp3_nb_frames] 5487 000039D3 0F8234FFFFFF jb .synth_frame_lop 5488 000039D9 5F pop edi 5489 000039DA 5E pop esi 5490 000039DB 033D[D89D0000] add edi, [mp3_bytes_per_sample] 5491 000039E1 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 5492 000039E7 FF05[A0F40000] inc dword [mp3_curr_channel] 5493 000039ED A1[A0F40000] mov eax, [mp3_curr_channel] 5494 000039F2 3B05[D09D0000] cmp eax, [mp3_output_num_channels] 5495 000039F8 0F82FDFEFFFF jb .synth_channel_lop 5496 000039FE F605[54760000]10 test byte [cpuid_flags], 10h 5497 00003A05 740E jz short .no_rdtsc_supported@@@@@ 5498 00003A07 0F31 rdtsc 5499 00003A09 0105[CC770000] add [rdtsc_synth_dct], eax 5500 00003A0F 1115[D0770000] adc [rdtsc_synth_dct+4], edx 5501 5502 .no_rdtsc_supported@@@@@: 5503 00003A15 C3 retn 5504 5505 5506 ; =============== S U B R O U T I N E ======================================= 5507 5508 5509 mp3_synth_filter_this_16bit_shift_1_fast: 5510 00003A16 A1[DC9D0000] mov eax, [mp3_curr_syn_index] 5511 00003A1B A9E0010000 test eax, 1E0h ; 1FFh-1Fh 5512 00003A20 0F84A2010000 jz .append_copy_to_window 5513 00003A26 90 nop 5514 5515 .append_copy_to_window_back: 5516 00003A27 89C5 mov ebp, eax 5517 00003A29 81E5C0010000 and ebp, 1C0h 5518 00003A2F 2520040000 and eax, 420h 5519 00003A34 8D7010 lea esi, [eax+10h] 5520 00003A37 8D7830 lea edi, [eax+30h] 5521 00003A3A F7DD neg ebp 5522 00003A3C 81E5C0010000 and ebp, 1C0h 5523 00003A42 8B0D[E09D0000] mov ecx, [mp3_curr_syn_dst] 5524 5525 .samples_lop: 5526 00003A48 BB00200020 mov ebx, 20002000h ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 5527 ; @@out_shift equ (OUT_SHIFT_fast+(8*force_8bit)) 5528 ; out_shift = 14 5529 00003A4D 8B14B5[F89D0000] mov edx, [mp3_synth_buf+esi*4] ; @@SUM8 macro sum,win,ww,syn 5530 ; @@SUM8 @@sum,@@win1,0,@@syn1 5531 ; IRP nn,0,1,2,3,4,5,6,7 5532 ; mov edx,dword ptr [mp3_synth_buf+syn*4+(nn*64*4)] 5533 ; movsx eax,word ptr [mp3_synth_win+win*2+(nn*64*2)+ww*2] 5534 ; imul eax,edx 5535 ; add sum,eax 5536 00003A54 0FBF842D[B0EF0400] movsx eax, word [mp3_synth_win+ebp*2] 5537 00003A5C 0FAFC2 imul eax, edx 5538 00003A5F 01C3 add ebx, eax 5539 00003A61 8B14B5[F89E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] ; nn=1 5540 00003A68 0FBF842D[30F00400] movsx eax, word [(mp3_synth_win+80h)+ebp*2] ; ww=0 5541 00003A70 0FAFC2 imul eax, edx 5542 00003A73 01C3 add ebx, eax 5543 00003A75 8B14B5[F89F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 5544 00003A7C 0FBF842D[B0F00400] movsx eax, word [(mp3_synth_win+100h)+ebp*2] 5545 00003A84 0FAFC2 imul eax, edx 5546 00003A87 01C3 add ebx, eax 5547 00003A89 8B14B5[F8A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 5548 00003A90 0FBF842D[30F10400] movsx eax, word [(mp3_synth_win+180h)+ebp*2] 5549 00003A98 0FAFC2 imul eax, edx 5550 00003A9B 01C3 add ebx, eax 5551 00003A9D 8B14B5[F8A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] ; nn=4 5552 00003AA4 0FBF842D[B0F10400] movsx eax, word [(mp3_synth_win+200h)+ebp*2] 5553 00003AAC 0FAFC2 imul eax, edx 5554 00003AAF 01C3 add ebx, eax 5555 00003AB1 8B14B5[F8A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 5556 00003AB8 0FBF842D[30F20400] movsx eax, word [(mp3_synth_win+280h)+ebp*2] 5557 00003AC0 0FAFC2 imul eax, edx 5558 00003AC3 01C3 add ebx, eax 5559 00003AC5 8B14B5[F8A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 5560 00003ACC 0FBF842D[B0F20400] movsx eax, word [(mp3_synth_win+300h)+ebp*2] 5561 00003AD4 0FAFC2 imul eax, edx 5562 00003AD7 01C3 add ebx, eax 5563 00003AD9 8B14B5[F8A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] ; nn=7 5564 00003AE0 0FBF842D[30F30400] movsx eax, word [(mp3_synth_win+380h)+ebp*2] ; ww=0 5565 00003AE8 0FAFC2 imul eax, edx 5566 00003AEB 01C3 add ebx, eax 5567 00003AED 8B14BD[F89D0000] mov edx, [mp3_synth_buf+edi*4] 5568 00003AF4 0FBF842D[F0EF0400] movsx eax, word [(mp3_synth_win+40h)+ebp*2] 5569 00003AFC 0FAFC2 imul eax, edx 5570 00003AFF 01C3 add ebx, eax 5571 00003B01 8B14BD[F89E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 5572 00003B08 0FBF842D[70F00400] movsx eax, word [(mp3_synth_win+0C0h)+ebp*2] 5573 00003B10 0FAFC2 imul eax, edx 5574 00003B13 01C3 add ebx, eax 5575 00003B15 8B14BD[F89F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] ; nn=2, ww=32 5576 00003B1C 0FBF842D[F0F00400] movsx eax, word [(mp3_synth_win+140h)+ebp*2] 5577 00003B24 0FAFC2 imul eax, edx 5578 00003B27 01C3 add ebx, eax 5579 00003B29 8B14BD[F8A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 5580 00003B30 0FBF842D[70F10400] movsx eax, word [(mp3_synth_win+1C0h)+ebp*2] 5581 00003B38 0FAFC2 imul eax, edx 5582 00003B3B 01C3 add ebx, eax 5583 00003B3D 8B14BD[F8A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 5584 00003B44 0FBF842D[F0F10400] movsx eax, word [(mp3_synth_win+240h)+ebp*2] 5585 00003B4C 0FAFC2 imul eax, edx 5586 00003B4F 01C3 add ebx, eax 5587 00003B51 8B14BD[F8A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 5588 00003B58 0FBF842D[70F20400] movsx eax, word [(mp3_synth_win+2C0h)+ebp*2] 5589 00003B60 0FAFC2 imul eax, edx 5590 00003B63 01C3 add ebx, eax 5591 00003B65 8B14BD[F8A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] ; nn=6, ww=32 5592 00003B6C 0FBF842D[F0F20400] movsx eax, word [(mp3_synth_win+340h)+ebp*2] 5593 00003B74 0FAFC2 imul eax, edx 5594 00003B77 01C3 add ebx, eax 5595 00003B79 8B14BD[F8A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 5596 00003B80 0FBF842D[70F30400] movsx eax, word [(mp3_synth_win+3C0h)+ebp*2] 5597 00003B88 0FAFC2 imul eax, edx 5598 00003B8B 01C3 add ebx, eax 5599 00003B8D 81FB00000040 cmp ebx, 40000000h ; cmp @@sum,10000h SHL (@@out_shift) 5600 00003B93 7328 jnb short .sat 5601 00003B95 C1FB0E sar ebx, 14 ; sar @@sum,(@@out_shift) 5602 00003B98 81EB00800000 sub ebx, 8000h ; make 16bit signed 5603 5604 .sat_back: 5605 00003B9E 668919 mov [ecx], bx 5606 00003BA1 030D[9CF40000] add ecx, [mp3_samples_dst_step] 5607 00003BA7 83C602 add esi, 2 ; IF rate_shift 5608 ; add @@syn1,1 shl rate_shift 5609 00003BAA 83EF02 sub edi, 2 ; sub @@syn2,1 shl rate_shift 5610 00003BAD 83C502 add ebp, 2 ; add @@win1,1 shl rate_shift 5611 00003BB0 F7C51F000000 test ebp, 1Fh ; IF LONG_WINDOW 5612 00003BB6 0F858CFEFFFF jnz .samples_lop ; test @@win1,1fh 5613 00003BBC C3 retn 5614 5615 .sat: 5616 00003BBD C1FB1F sar ebx, 31 ; sar @@sum,31 ; FFFFFFFFh,00000000h 5617 00003BC0 81F3FF7F0000 xor ebx, 7FFFh ; xor @@sum,7fffh ; FFFF8000h,00007FFFh (signed 16bit) 5618 00003BC6 EBD6 jmp short .sat_back 5619 5620 .append_copy_to_window: 5621 00003BC8 8D3485[F89D0000] lea esi, [mp3_synth_buf+eax*4] 5622 00003BCF 8DBE00080000 lea edi, [esi+2048] ; [esi+512*4] 5623 00003BD5 B912000000 mov ecx, 18 ; (12h*4)/4 5624 00003BDA F3A5 rep movsd 5625 00003BDC E946FEFFFF jmp .append_copy_to_window_back 5626 5627 5628 ; =============== S U B R O U T I N E ======================================= 5629 5630 5631 synth_16bit_shift_2_fast: 5632 00003BE1 F605[54760000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 0,2,1 5633 00003BE8 740E jz short .no_rdtsc_supported 5634 00003BEA 0F31 rdtsc 5635 00003BEC 2905[CC770000] sub [rdtsc_synth_dct], eax 5636 00003BF2 1915[D0770000] sbb [rdtsc_synth_dct+4], edx 5637 5638 .no_rdtsc_supported: 5639 00003BF8 BE[00BE0000] mov esi, mp3_sb_samples 5640 00003BFD 8B3D[94F40000] mov edi, [mp3_samples_dst] 5641 00003C03 C705[A0F40000]0000- mov dword [mp3_curr_channel], 0 5641 00003C0B 0000 5642 5643 .synth_channel_lop: 5644 00003C0D 56 push esi 5645 00003C0E 57 push edi 5646 00003C0F 893D[E09D0000] mov [mp3_curr_syn_dst], edi 5647 00003C15 C705[A8F40000]0000- mov dword [mp3_curr_frame], 0 5647 00003C1D 0000 5648 5649 .synth_frame_lop: 5650 00003C1F 56 push esi 5651 00003C20 F605[54760000]10 test byte [cpuid_flags], 10h 5652 00003C27 740E jz short .no_rdtsc_supported@ 5653 00003C29 0F31 rdtsc 5654 00003C2B 2905[E4770000] sub [rdtsc_dct32], eax 5655 00003C31 1915[E8770000] sbb [rdtsc_dct32+4], edx 5656 5657 .no_rdtsc_supported@: 5658 00003C37 8B15[A0F40000] mov edx, [mp3_curr_channel] 5659 00003C3D 8B0495[F8BD0000] mov eax, [mp3_synth_index+edx*4] 5660 00003C44 832C95[F8BD0000]20 sub dword [mp3_synth_index+edx*4], 32 5661 00003C4C C1E20A shl edx, 10 5662 00003C4F 25E0010000 and eax, 1E0h ; 1FFh-1Fh 5663 00003C54 09D0 or eax, edx 5664 00003C56 A3[DC9D0000] mov [mp3_curr_syn_index], eax 5665 00003C5B 8B3D[DC9D0000] mov edi, [mp3_curr_syn_index] 5666 00003C61 8D3CBD[F89D0000] lea edi, [mp3_synth_buf+edi*4] 5667 00003C68 E855F6FFFF call mp3_dct32_shift_2 ; mp3_dct32_shift_&rate_shift 5668 00003C6D F605[54760000]10 test byte [cpuid_flags], 10h 5669 00003C74 740E jz short .no_rdtsc_supported@@ 5670 00003C76 0F31 rdtsc 5671 00003C78 0105[E4770000] add [rdtsc_dct32], eax 5672 00003C7E 1115[E8770000] adc [rdtsc_dct32+4], edx 5673 5674 .no_rdtsc_supported@@: 5675 00003C84 F605[54760000]10 test byte [cpuid_flags], 10h 5676 00003C8B 740E jz short .no_rdtsc_supported@@@ 5677 00003C8D 0F31 rdtsc 5678 00003C8F 2905[FC770000] sub [rdtsc_synth], eax 5679 00003C95 1915[00780000] sbb [rdtsc_synth+4], edx 5680 5681 .no_rdtsc_supported@@@: 5682 00003C9B E888000000 call mp3_synth_filter_this_16bit_shift_2_fast ; 5683 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fas 5684 00003CA0 F605[54760000]10 test byte [cpuid_flags], 10h 5685 00003CA7 740E jz short .no_rdtsc_supported@@@@ 5686 00003CA9 0F31 rdtsc 5687 00003CAB 0105[FC770000] add [rdtsc_synth], eax 5688 00003CB1 1115[00780000] adc [rdtsc_synth+4], edx 5689 5690 .no_rdtsc_supported@@@@: 5691 00003CB7 5E pop esi 5692 00003CB8 A1[9CF40000] mov eax, [mp3_samples_dst_step] 5693 00003CBD C1E005 shl eax, 5 5694 00003CC0 8A0D[4F760000] mov cl, [option_rate_shift] 5695 00003CC6 D3E8 shr eax, cl 5696 00003CC8 0105[E09D0000] add [mp3_curr_syn_dst], eax 5697 00003CCE 81C680000000 add esi, 128 ; SBLIMIT*4 5698 00003CD4 FF05[A8F40000] inc dword [mp3_curr_frame] 5699 00003CDA A1[A8F40000] mov eax, [mp3_curr_frame] 5700 00003CDF 3B05[E49D0000] cmp eax, [mp3_nb_frames] 5701 00003CE5 0F8234FFFFFF jb .synth_frame_lop 5702 00003CEB 5F pop edi 5703 00003CEC 5E pop esi 5704 00003CED 033D[D89D0000] add edi, [mp3_bytes_per_sample] 5705 00003CF3 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 5706 00003CF9 FF05[A0F40000] inc dword [mp3_curr_channel] 5707 00003CFF A1[A0F40000] mov eax, [mp3_curr_channel] 5708 00003D04 3B05[D09D0000] cmp eax, [mp3_output_num_channels] 5709 00003D0A 0F82FDFEFFFF jb .synth_channel_lop 5710 00003D10 F605[54760000]10 test byte [cpuid_flags], 10h 5711 00003D17 740E jz short .no_rdtsc_supported@@@@@ 5712 00003D19 0F31 rdtsc 5713 00003D1B 0105[CC770000] add [rdtsc_synth_dct], eax 5714 00003D21 1115[D0770000] adc [rdtsc_synth_dct+4], edx 5715 5716 .no_rdtsc_supported@@@@@: 5717 00003D27 C3 retn 5718 5719 5720 ; =============== S U B R O U T I N E ======================================= 5721 5722 5723 mp3_synth_filter_this_16bit_shift_2_fast: 5724 00003D28 A1[DC9D0000] mov eax, [mp3_curr_syn_index] 5725 00003D2D A9E0010000 test eax, 1E0h ; 1FFh-1Fh 5726 00003D32 0F84A2010000 jz .append_copy_to_window 5727 00003D38 90 nop 5728 5729 .append_copy_to_window_back: 5730 00003D39 89C5 mov ebp, eax 5731 00003D3B 81E5C0010000 and ebp, 1C0h ; 1FFh-1Fh-20h 5732 00003D41 2520040000 and eax, 420h ; 20h+(1 shl 10) 5733 00003D46 8D7010 lea esi, [eax+10h] 5734 00003D49 8D7830 lea edi, [eax+30h] 5735 00003D4C F7DD neg ebp 5736 00003D4E 81E5C0010000 and ebp, 1C0h 5737 00003D54 8B0D[E09D0000] mov ecx, [mp3_curr_syn_dst] 5738 5739 .samples_lop: 5740 00003D5A BB00200020 mov ebx, 20002000h ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 5741 ; @@out_shift equ (OUT_SHIFT_fast+(8*force_8bit)) 5742 ; out_shift = 14 5743 00003D5F 8B14B5[F89D0000] mov edx, [mp3_synth_buf+esi*4] 5744 00003D66 0FBF842D[B0EF0400] movsx eax, word [mp3_synth_win+ebp*2] 5745 00003D6E 0FAFC2 imul eax, edx 5746 00003D71 01C3 add ebx, eax 5747 00003D73 8B14B5[F89E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] 5748 00003D7A 0FBF842D[30F00400] movsx eax, word [(mp3_synth_win+80h)+ebp*2] 5749 00003D82 0FAFC2 imul eax, edx 5750 00003D85 01C3 add ebx, eax 5751 00003D87 8B14B5[F89F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 5752 00003D8E 0FBF842D[B0F00400] movsx eax, word [(mp3_synth_win+100h)+ebp*2] 5753 00003D96 0FAFC2 imul eax, edx 5754 00003D99 01C3 add ebx, eax 5755 00003D9B 8B14B5[F8A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 5756 00003DA2 0FBF842D[30F10400] movsx eax, word [(mp3_synth_win+180h)+ebp*2] 5757 00003DAA 0FAFC2 imul eax, edx 5758 00003DAD 01C3 add ebx, eax 5759 00003DAF 8B14B5[F8A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] 5760 00003DB6 0FBF842D[B0F10400] movsx eax, word [(mp3_synth_win+200h)+ebp*2] 5761 00003DBE 0FAFC2 imul eax, edx 5762 00003DC1 01C3 add ebx, eax 5763 00003DC3 8B14B5[F8A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 5764 00003DCA 0FBF842D[30F20400] movsx eax, word [(mp3_synth_win+280h)+ebp*2] 5765 00003DD2 0FAFC2 imul eax, edx 5766 00003DD5 01C3 add ebx, eax 5767 00003DD7 8B14B5[F8A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 5768 00003DDE 0FBF842D[B0F20400] movsx eax, word [(mp3_synth_win+300h)+ebp*2] 5769 00003DE6 0FAFC2 imul eax, edx 5770 00003DE9 01C3 add ebx, eax 5771 00003DEB 8B14B5[F8A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 5772 00003DF2 0FBF842D[30F30400] movsx eax, word [(mp3_synth_win+380h)+ebp*2] 5773 00003DFA 0FAFC2 imul eax, edx 5774 00003DFD 01C3 add ebx, eax 5775 00003DFF 8B14BD[F89D0000] mov edx, [mp3_synth_buf+edi*4] 5776 00003E06 0FBF842D[F0EF0400] movsx eax, word [(mp3_synth_win+40h)+ebp*2] 5777 00003E0E 0FAFC2 imul eax, edx 5778 00003E11 01C3 add ebx, eax 5779 00003E13 8B14BD[F89E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 5780 00003E1A 0FBF842D[70F00400] movsx eax, word [(mp3_synth_win+0C0h)+ebp*2] 5781 00003E22 0FAFC2 imul eax, edx 5782 00003E25 01C3 add ebx, eax 5783 00003E27 8B14BD[F89F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] 5784 00003E2E 0FBF842D[F0F00400] movsx eax, word [(mp3_synth_win+140h)+ebp*2] 5785 00003E36 0FAFC2 imul eax, edx 5786 00003E39 01C3 add ebx, eax 5787 00003E3B 8B14BD[F8A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 5788 00003E42 0FBF842D[70F10400] movsx eax, word [(mp3_synth_win+1C0h)+ebp*2] 5789 00003E4A 0FAFC2 imul eax, edx 5790 00003E4D 01C3 add ebx, eax 5791 00003E4F 8B14BD[F8A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 5792 00003E56 0FBF842D[F0F10400] movsx eax, word [(mp3_synth_win+240h)+ebp*2] 5793 00003E5E 0FAFC2 imul eax, edx 5794 00003E61 01C3 add ebx, eax 5795 00003E63 8B14BD[F8A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 5796 00003E6A 0FBF842D[70F20400] movsx eax, word [(mp3_synth_win+2C0h)+ebp*2] 5797 00003E72 0FAFC2 imul eax, edx 5798 00003E75 01C3 add ebx, eax 5799 00003E77 8B14BD[F8A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 5800 00003E7E 0FBF842D[F0F20400] movsx eax, word [(mp3_synth_win+340h)+ebp*2] 5801 00003E86 0FAFC2 imul eax, edx 5802 00003E89 01C3 add ebx, eax 5803 00003E8B 8B14BD[F8A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 5804 00003E92 0FBF842D[70F30400] movsx eax, word [(mp3_synth_win+3C0h)+ebp*2] 5805 00003E9A 0FAFC2 imul eax, edx 5806 00003E9D 01C3 add ebx, eax 5807 00003E9F 81FB00000040 cmp ebx, 40000000h 5808 00003EA5 7328 jnb short .sat 5809 00003EA7 C1FB0E sar ebx, 14 5810 00003EAA 81EB00800000 sub ebx, 8000h ; make 16bit signed 5811 5812 .sat_back: 5813 00003EB0 668919 mov [ecx], bx 5814 00003EB3 030D[9CF40000] add ecx, [mp3_samples_dst_step] 5815 00003EB9 83C604 add esi, 4 5816 00003EBC 83EF04 sub edi, 4 5817 00003EBF 83C504 add ebp, 4 5818 00003EC2 F7C51F000000 test ebp, 1Fh 5819 00003EC8 0F858CFEFFFF jnz .samples_lop 5820 00003ECE C3 retn 5821 5822 .sat: 5823 00003ECF C1FB1F sar ebx, 31 5824 00003ED2 81F3FF7F0000 xor ebx, 7FFFh 5825 00003ED8 EBD6 jmp short .sat_back 5826 5827 .append_copy_to_window: 5828 00003EDA 8D3485[F89D0000] lea esi, [mp3_synth_buf+eax*4] 5829 00003EE1 8DBE00080000 lea edi, [esi+2048] 5830 00003EE7 B912000000 mov ecx, 18 5831 00003EEC F3A5 rep movsd 5832 00003EEE E946FEFFFF jmp .append_copy_to_window_back 5833 5834 5835 ; =============== S U B R O U T I N E ======================================= 5836 5837 5838 synth_8bit_shift_0_fast: 5839 00003EF3 F605[54760000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 1,0,1 5840 00003EFA 740E jz short .no_rdtsc_supported 5841 00003EFC 0F31 rdtsc 5842 00003EFE 2905[CC770000] sub [rdtsc_synth_dct], eax 5843 00003F04 1915[D0770000] sbb [rdtsc_synth_dct+4], edx 5844 5845 .no_rdtsc_supported: 5846 00003F0A BE[00BE0000] mov esi, mp3_sb_samples 5847 00003F0F 8B3D[94F40000] mov edi, [mp3_samples_dst] 5848 00003F15 C705[A0F40000]0000- mov dword [mp3_curr_channel], 0 5848 00003F1D 0000 5849 5850 .synth_channel_lop: 5851 00003F1F 56 push esi 5852 00003F20 57 push edi 5853 00003F21 893D[E09D0000] mov [mp3_curr_syn_dst], edi 5854 00003F27 C705[A8F40000]0000- mov dword [mp3_curr_frame], 0 5854 00003F2F 0000 5855 5856 .synth_frame_lop: 5857 00003F31 56 push esi 5858 00003F32 F605[54760000]10 test byte [cpuid_flags], 10h 5859 00003F39 740E jz short .no_rdtsc_supported@ 5860 00003F3B 0F31 rdtsc 5861 00003F3D 2905[E4770000] sub [rdtsc_dct32], eax 5862 00003F43 1915[E8770000] sbb [rdtsc_dct32+4], edx 5863 5864 .no_rdtsc_supported@: 5865 00003F49 8B15[A0F40000] mov edx, [mp3_curr_channel] 5866 00003F4F 8B0495[F8BD0000] mov eax, [mp3_synth_index+edx*4] 5867 00003F56 832C95[F8BD0000]20 sub dword [mp3_synth_index+edx*4], 32 5868 00003F5E C1E20A shl edx, 10 5869 00003F61 25E0010000 and eax, 1E0h ; 1FFh-1Fh 5870 00003F66 09D0 or eax, edx 5871 00003F68 A3[DC9D0000] mov [mp3_curr_syn_index], eax 5872 00003F6D 8B3D[DC9D0000] mov edi, [mp3_curr_syn_index] 5873 00003F73 8D3CBD[F89D0000] lea edi, [mp3_synth_buf+edi*4] 5874 00003F7A E873E6FFFF call mp3_dct32_shift_0 ; mp3_dct32_shift_&rate_shift 5875 00003F7F F605[54760000]10 test byte [cpuid_flags], 10h 5876 00003F86 740E jz short .no_rdtsc_supported@@ 5877 00003F88 0F31 rdtsc 5878 00003F8A 0105[E4770000] add [rdtsc_dct32], eax 5879 00003F90 1115[E8770000] adc [rdtsc_dct32+4], edx 5880 5881 .no_rdtsc_supported@@: 5882 00003F96 F605[54760000]10 test byte [cpuid_flags], 10h 5883 00003F9D 740E jz short .no_rdtsc_supported@@@ 5884 00003F9F 0F31 rdtsc 5885 00003FA1 2905[FC770000] sub [rdtsc_synth], eax 5886 00003FA7 1915[00780000] sbb [rdtsc_synth+4], edx 5887 5888 .no_rdtsc_supported@@@: 5889 00003FAD E888000000 call mp3_synth_filter_this_8bit_shift_0_fast ; 5890 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 5891 00003FB2 F605[54760000]10 test byte [cpuid_flags], 10h 5892 00003FB9 740E jz short .no_rdtsc_supported@@@@ 5893 00003FBB 0F31 rdtsc 5894 00003FBD 0105[FC770000] add [rdtsc_synth], eax 5895 00003FC3 1115[00780000] adc [rdtsc_synth+4], edx 5896 5897 .no_rdtsc_supported@@@@: 5898 00003FC9 5E pop esi 5899 00003FCA A1[9CF40000] mov eax, [mp3_samples_dst_step] 5900 00003FCF C1E005 shl eax, 5 5901 00003FD2 8A0D[4F760000] mov cl, [option_rate_shift] 5902 00003FD8 D3E8 shr eax, cl 5903 00003FDA 0105[E09D0000] add [mp3_curr_syn_dst], eax 5904 00003FE0 81C680000000 add esi, 128 ; SBLIMIT*4 5905 00003FE6 FF05[A8F40000] inc dword [mp3_curr_frame] 5906 00003FEC A1[A8F40000] mov eax, [mp3_curr_frame] 5907 00003FF1 3B05[E49D0000] cmp eax, [mp3_nb_frames] 5908 00003FF7 0F8234FFFFFF jb .synth_frame_lop 5909 00003FFD 5F pop edi 5910 00003FFE 5E pop esi 5911 00003FFF 033D[D89D0000] add edi, [mp3_bytes_per_sample] 5912 00004005 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 5913 0000400B FF05[A0F40000] inc dword [mp3_curr_channel] 5914 00004011 A1[A0F40000] mov eax, [mp3_curr_channel] 5915 00004016 3B05[D09D0000] cmp eax, [mp3_output_num_channels] 5916 0000401C 0F82FDFEFFFF jb .synth_channel_lop 5917 00004022 F605[54760000]10 test byte [cpuid_flags], 10h 5918 00004029 740E jz short .no_rdtsc_supported@@@@@ 5919 0000402B 0F31 rdtsc 5920 0000402D 0105[CC770000] add [rdtsc_synth_dct], eax 5921 00004033 1115[D0770000] adc [rdtsc_synth_dct+4], edx 5922 5923 .no_rdtsc_supported@@@@@: 5924 00004039 C3 retn 5925 5926 5927 ; =============== S U B R O U T I N E ======================================= 5928 5929 5930 mp3_synth_filter_this_8bit_shift_0_fast: 5931 0000403A A1[DC9D0000] mov eax, [mp3_curr_syn_index] 5932 0000403F A9E0010000 test eax, 1E0h ; 1FFh-1Fh 5933 00004044 0F8491010000 jz .append_copy_to_window 5934 0000404A 90 nop 5935 5936 .append_copy_to_window_back: 5937 0000404B 89C5 mov ebp, eax 5938 0000404D 81E5C0010000 and ebp, 1C0h ; 1FFh-1Fh-20h 5939 00004053 2520040000 and eax, 420h ; 20h+(1 shl 10) 5940 00004058 8D7010 lea esi, [eax+10h] 5941 0000405B 8D7830 lea edi, [eax+30h] 5942 0000405E F7DD neg ebp 5943 00004060 81E5C0010000 and ebp, 1C0h 5944 00004066 8B0D[E09D0000] mov ecx, [mp3_curr_syn_dst] 5945 5946 .samples_lop: 5947 0000406C BB00002020 mov ebx, 20200000h ; mov @@sum,(80h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 5948 ; @@out_shift equ (OUT_SHIFT_fast(8*force_8bit)) 5949 ; @@out_shift = 22 5950 00004071 8B14B5[F89D0000] mov edx, [mp3_synth_buf+esi*4] ; @@SUM8 macro sum,win,ww,syn 5951 ; @@SUM8 @@sum,@@win1,0,@@syn1 5952 ; IRP nn,0,1,2,3,4,5,6,7 5953 ; mov edx,dword ptr [mp3_synth_buf+syn*4+(nn*64*4)] 5954 ; movsx eax,word ptr [mp3_synth_win+win*2+(nn*64*2)+ww*2] 5955 ; imul eax,edx 5956 ; add sum,eax 5957 00004078 0FBF842D[B0EF0400] movsx eax, word [mp3_synth_win+ebp*2] 5958 00004080 0FAFC2 imul eax, edx 5959 00004083 01C3 add ebx, eax 5960 00004085 8B14B5[F89E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] ; nn=1 5961 0000408C 0FBF842D[30F00400] movsx eax, word [(mp3_synth_win+80h)+ebp*2] ; ww=0 5962 00004094 0FAFC2 imul eax, edx 5963 00004097 01C3 add ebx, eax 5964 00004099 8B14B5[F89F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 5965 000040A0 0FBF842D[B0F00400] movsx eax, word [(mp3_synth_win+100h)+ebp*2] 5966 000040A8 0FAFC2 imul eax, edx 5967 000040AB 01C3 add ebx, eax 5968 000040AD 8B14B5[F8A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 5969 000040B4 0FBF842D[30F10400] movsx eax, word [(mp3_synth_win+180h)+ebp*2] 5970 000040BC 0FAFC2 imul eax, edx 5971 000040BF 01C3 add ebx, eax 5972 000040C1 8B14B5[F8A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] 5973 000040C8 0FBF842D[B0F10400] movsx eax, word [(mp3_synth_win+200h)+ebp*2] 5974 000040D0 0FAFC2 imul eax, edx 5975 000040D3 01C3 add ebx, eax 5976 000040D5 8B14B5[F8A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 5977 000040DC 0FBF842D[30F20400] movsx eax, word [(mp3_synth_win+280h)+ebp*2] 5978 000040E4 0FAFC2 imul eax, edx 5979 000040E7 01C3 add ebx, eax 5980 000040E9 8B14B5[F8A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 5981 000040F0 0FBF842D[B0F20400] movsx eax, word [(mp3_synth_win+300h)+ebp*2] 5982 000040F8 0FAFC2 imul eax, edx 5983 000040FB 01C3 add ebx, eax 5984 000040FD 8B14B5[F8A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 5985 00004104 0FBF842D[30F30400] movsx eax, word [(mp3_synth_win+380h)+ebp*2] 5986 0000410C 0FAFC2 imul eax, edx 5987 0000410F 01C3 add ebx, eax 5988 00004111 8B14BD[F89D0000] mov edx, [mp3_synth_buf+edi*4] 5989 00004118 0FBF842D[F0EF0400] movsx eax, word [(mp3_synth_win+40h)+ebp*2] 5990 00004120 0FAFC2 imul eax, edx 5991 00004123 01C3 add ebx, eax 5992 00004125 8B14BD[F89E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 5993 0000412C 0FBF842D[70F00400] movsx eax, word [(mp3_synth_win+0C0h)+ebp*2] 5994 00004134 0FAFC2 imul eax, edx 5995 00004137 01C3 add ebx, eax 5996 00004139 8B14BD[F89F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] ; nn=2 5997 00004140 0FBF842D[F0F00400] movsx eax, word [(mp3_synth_win+140h)+ebp*2] ; ww=32 5998 00004148 0FAFC2 imul eax, edx 5999 0000414B 01C3 add ebx, eax 6000 0000414D 8B14BD[F8A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 6001 00004154 0FBF842D[70F10400] movsx eax, word [(mp3_synth_win+1C0h)+ebp*2] 6002 0000415C 0FAFC2 imul eax, edx 6003 0000415F 01C3 add ebx, eax 6004 00004161 8B14BD[F8A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 6005 00004168 0FBF842D[F0F10400] movsx eax, word [(mp3_synth_win+240h)+ebp*2] 6006 00004170 0FAFC2 imul eax, edx 6007 00004173 01C3 add ebx, eax 6008 00004175 8B14BD[F8A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 6009 0000417C 0FBF842D[70F20400] movsx eax, word [(mp3_synth_win+2C0h)+ebp*2] 6010 00004184 0FAFC2 imul eax, edx 6011 00004187 01C3 add ebx, eax 6012 00004189 8B14BD[F8A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 6013 00004190 0FBF842D[F0F20400] movsx eax, word [(mp3_synth_win+340h)+ebp*2] 6014 00004198 0FAFC2 imul eax, edx 6015 0000419B 01C3 add ebx, eax 6016 0000419D 8B14BD[F8A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 6017 000041A4 0FBF842D[70F30400] movsx eax, word [(mp3_synth_win+3C0h)+ebp*2] 6018 000041AC 0FAFC2 imul eax, edx 6019 000041AF 01C3 add ebx, eax 6020 000041B1 81FB00000040 cmp ebx, 40000000h ; cmp @@sum,100h SHL (@@out_shift) 6021 000041B7 731B jnb short .sat 6022 000041B9 C1FB16 sar ebx, 22 ; sar @@sum,(@@out_shift) 6023 6024 .sat_back: 6025 000041BC 8819 mov [ecx], bl ; mov byte ptr [@@dst],@@sum_8bit 6026 000041BE 030D[9CF40000] add ecx, [mp3_samples_dst_step] 6027 000041C4 46 inc esi ; inc @@syn1 6028 000041C5 4F dec edi ; dec @@syn2 6029 000041C6 45 inc ebp ; inc @@win1 6030 000041C7 F7C51F000000 test ebp, 1Fh ; IF LONG_WINDOW 6031 ; test @@win1,1fh 6032 000041CD 0F8599FEFFFF jnz .samples_lop 6033 000041D3 C3 retn 6034 6035 .sat: 6036 000041D4 C1FB1F sar ebx, 31 ; sar @@sum,31 ; FFFFFFFFh,00000000h 6037 000041D7 F7D3 not ebx ; IF force_8bit 6038 ; not @@sum ; 00000000h,FFFFFFFFh (unsigned 8bit) 6039 000041D9 EBE1 jmp short .sat_back 6040 6041 .append_copy_to_window: 6042 000041DB 8D3485[F89D0000] lea esi, [mp3_synth_buf+eax*4] 6043 000041E2 8DBE00080000 lea edi, [esi+2048] ; [esi+512*4] 6044 000041E8 B912000000 mov ecx, 18 ; (12h*4)/4 6045 000041ED F3A5 rep movsd 6046 000041EF E957FEFFFF jmp .append_copy_to_window_back 6047 6048 6049 ; =============== S U B R O U T I N E ======================================= 6050 6051 6052 synth_8bit_shift_1_fast: 6053 000041F4 F605[54760000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 1,1,1 6054 000041FB 740E jz short .no_rdtsc_supported 6055 000041FD 0F31 rdtsc 6056 000041FF 2905[CC770000] sub [rdtsc_synth_dct], eax 6057 00004205 1915[D0770000] sbb [rdtsc_synth_dct+4], edx 6058 6059 .no_rdtsc_supported: 6060 0000420B BE[00BE0000] mov esi, mp3_sb_samples 6061 00004210 8B3D[94F40000] mov edi, [mp3_samples_dst] 6062 00004216 C705[A0F40000]0000- mov dword [mp3_curr_channel], 0 6062 0000421E 0000 6063 6064 .synth_channel_lop: 6065 00004220 56 push esi 6066 00004221 57 push edi 6067 00004222 893D[E09D0000] mov [mp3_curr_syn_dst], edi 6068 00004228 C705[A8F40000]0000- mov dword [mp3_curr_frame], 0 6068 00004230 0000 6069 6070 .synth_frame_lop: 6071 00004232 56 push esi 6072 00004233 F605[54760000]10 test byte [cpuid_flags], 10h 6073 0000423A 740E jz short .no_rdtsc_supported@ 6074 0000423C 0F31 rdtsc 6075 0000423E 2905[E4770000] sub [rdtsc_dct32], eax 6076 00004244 1915[E8770000] sbb [rdtsc_dct32+4], edx 6077 6078 .no_rdtsc_supported@: 6079 0000424A 8B15[A0F40000] mov edx, [mp3_curr_channel] 6080 00004250 8B0495[F8BD0000] mov eax, [mp3_synth_index+edx*4] 6081 00004257 832C95[F8BD0000]20 sub dword [mp3_synth_index+edx*4], 32 6082 0000425F C1E20A shl edx, 10 6083 00004262 25E0010000 and eax, 1E0h ; 1FFh-1Fh 6084 00004267 09D0 or eax, edx 6085 00004269 A3[DC9D0000] mov [mp3_curr_syn_index], eax 6086 0000426E 8B3D[DC9D0000] mov edi, [mp3_curr_syn_index] 6087 00004274 8D3CBD[F89D0000] lea edi, [mp3_synth_buf+edi*4] 6088 0000427B E852ECFFFF call mp3_dct32_shift_1 ; mp3_dct32_shift_&rate_shift 6089 00004280 F605[54760000]10 test byte [cpuid_flags], 10h 6090 00004287 740E jz short .no_rdtsc_supported@@ 6091 00004289 0F31 rdtsc 6092 0000428B 0105[E4770000] add [rdtsc_dct32], eax 6093 00004291 1115[E8770000] adc [rdtsc_dct32+4], edx 6094 6095 .no_rdtsc_supported@@: 6096 00004297 F605[54760000]10 test byte [cpuid_flags], 10h 6097 0000429E 740E jz short .no_rdtsc_supported@@@ 6098 000042A0 0F31 rdtsc 6099 000042A2 2905[FC770000] sub [rdtsc_synth], eax 6100 000042A8 1915[00780000] sbb [rdtsc_synth+4], edx 6101 6102 .no_rdtsc_supported@@@: 6103 000042AE E888000000 call mp3_synth_filter_this_8bit_shift_1_fast ; 6104 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 6105 000042B3 F605[54760000]10 test byte [cpuid_flags], 10h 6106 000042BA 740E jz short .no_rdtsc_supported@@@@ 6107 000042BC 0F31 rdtsc 6108 000042BE 0105[FC770000] add [rdtsc_synth], eax 6109 000042C4 1115[00780000] adc [rdtsc_synth+4], edx 6110 6111 .no_rdtsc_supported@@@@: 6112 000042CA 5E pop esi 6113 000042CB A1[9CF40000] mov eax, [mp3_samples_dst_step] 6114 000042D0 C1E005 shl eax, 5 6115 000042D3 8A0D[4F760000] mov cl, [option_rate_shift] 6116 000042D9 D3E8 shr eax, cl 6117 000042DB 0105[E09D0000] add [mp3_curr_syn_dst], eax 6118 000042E1 81C680000000 add esi, 128 ; SBLIMIT*4 6119 000042E7 FF05[A8F40000] inc dword [mp3_curr_frame] 6120 000042ED A1[A8F40000] mov eax, [mp3_curr_frame] 6121 000042F2 3B05[E49D0000] cmp eax, [mp3_nb_frames] 6122 000042F8 0F8234FFFFFF jb .synth_frame_lop 6123 000042FE 5F pop edi 6124 000042FF 5E pop esi 6125 00004300 033D[D89D0000] add edi, [mp3_bytes_per_sample] 6126 00004306 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 6127 0000430C FF05[A0F40000] inc dword [mp3_curr_channel] 6128 00004312 A1[A0F40000] mov eax, [mp3_curr_channel] 6129 00004317 3B05[D09D0000] cmp eax, [mp3_output_num_channels] 6130 0000431D 0F82FDFEFFFF jb .synth_channel_lop 6131 00004323 F605[54760000]10 test byte [cpuid_flags], 10h 6132 0000432A 740E jz short .no_rdtsc_supported@@@@@ 6133 0000432C 0F31 rdtsc 6134 0000432E 0105[CC770000] add [rdtsc_synth_dct], eax 6135 00004334 1115[D0770000] adc [rdtsc_synth_dct+4], edx 6136 6137 .no_rdtsc_supported@@@@@: 6138 0000433A C3 retn 6139 6140 6141 ; =============== S U B R O U T I N E ======================================= 6142 6143 6144 mp3_synth_filter_this_8bit_shift_1_fast: 6145 0000433B A1[DC9D0000] mov eax, [mp3_curr_syn_index] 6146 00004340 A9E0010000 test eax, 1E0h 6147 00004345 0F8497010000 jz .append_copy_to_window 6148 0000434B 90 nop 6149 6150 .append_copy_to_window_back: 6151 0000434C 89C5 mov ebp, eax 6152 0000434E 81E5C0010000 and ebp, 1C0h 6153 00004354 2520040000 and eax, 420h 6154 00004359 8D7010 lea esi, [eax+10h] 6155 0000435C 8D7830 lea edi, [eax+30h] 6156 0000435F F7DD neg ebp 6157 00004361 81E5C0010000 and ebp, 1C0h 6158 00004367 8B0D[E09D0000] mov ecx, [mp3_curr_syn_dst] 6159 6160 .samples_lop: 6161 0000436D BB00002020 mov ebx, 20200000h 6162 00004372 8B14B5[F89D0000] mov edx, [mp3_synth_buf+esi*4] 6163 00004379 0FBF842D[B0EF0400] movsx eax, word [mp3_synth_win+ebp*2] 6164 00004381 0FAFC2 imul eax, edx 6165 00004384 01C3 add ebx, eax 6166 00004386 8B14B5[F89E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] 6167 0000438D 0FBF842D[30F00400] movsx eax, word [(mp3_synth_win+80h)+ebp*2] 6168 00004395 0FAFC2 imul eax, edx 6169 00004398 01C3 add ebx, eax 6170 0000439A 8B14B5[F89F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 6171 000043A1 0FBF842D[B0F00400] movsx eax, word [(mp3_synth_win+100h)+ebp*2] 6172 000043A9 0FAFC2 imul eax, edx 6173 000043AC 01C3 add ebx, eax 6174 000043AE 8B14B5[F8A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 6175 000043B5 0FBF842D[30F10400] movsx eax, word [(mp3_synth_win+180h)+ebp*2] 6176 000043BD 0FAFC2 imul eax, edx 6177 000043C0 01C3 add ebx, eax 6178 000043C2 8B14B5[F8A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] 6179 000043C9 0FBF842D[B0F10400] movsx eax, word [(mp3_synth_win+200h)+ebp*2] 6180 000043D1 0FAFC2 imul eax, edx 6181 000043D4 01C3 add ebx, eax 6182 000043D6 8B14B5[F8A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 6183 000043DD 0FBF842D[30F20400] movsx eax, word [(mp3_synth_win+280h)+ebp*2] 6184 000043E5 0FAFC2 imul eax, edx 6185 000043E8 01C3 add ebx, eax 6186 000043EA 8B14B5[F8A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 6187 000043F1 0FBF842D[B0F20400] movsx eax, word [(mp3_synth_win+300h)+ebp*2] 6188 000043F9 0FAFC2 imul eax, edx 6189 000043FC 01C3 add ebx, eax 6190 000043FE 8B14B5[F8A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 6191 00004405 0FBF842D[30F30400] movsx eax, word [(mp3_synth_win+380h)+ebp*2] 6192 0000440D 0FAFC2 imul eax, edx 6193 00004410 01C3 add ebx, eax 6194 00004412 8B14BD[F89D0000] mov edx, [mp3_synth_buf+edi*4] 6195 00004419 0FBF842D[F0EF0400] movsx eax, word [(mp3_synth_win+40h)+ebp*2] 6196 00004421 0FAFC2 imul eax, edx 6197 00004424 01C3 add ebx, eax 6198 00004426 8B14BD[F89E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 6199 0000442D 0FBF842D[70F00400] movsx eax, word [(mp3_synth_win+0C0h)+ebp*2] 6200 00004435 0FAFC2 imul eax, edx 6201 00004438 01C3 add ebx, eax 6202 0000443A 8B14BD[F89F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] 6203 00004441 0FBF842D[F0F00400] movsx eax, word [(mp3_synth_win+140h)+ebp*2] 6204 00004449 0FAFC2 imul eax, edx 6205 0000444C 01C3 add ebx, eax 6206 0000444E 8B14BD[F8A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 6207 00004455 0FBF842D[70F10400] movsx eax, word [(mp3_synth_win+1C0h)+ebp*2] 6208 0000445D 0FAFC2 imul eax, edx 6209 00004460 01C3 add ebx, eax 6210 00004462 8B14BD[F8A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 6211 00004469 0FBF842D[F0F10400] movsx eax, word [(mp3_synth_win+240h)+ebp*2] 6212 00004471 0FAFC2 imul eax, edx 6213 00004474 01C3 add ebx, eax 6214 00004476 8B14BD[F8A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 6215 0000447D 0FBF842D[70F20400] movsx eax, word [(mp3_synth_win+2C0h)+ebp*2] 6216 00004485 0FAFC2 imul eax, edx 6217 00004488 01C3 add ebx, eax 6218 0000448A 8B14BD[F8A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 6219 00004491 0FBF842D[F0F20400] movsx eax, word [(mp3_synth_win+340h)+ebp*2] 6220 00004499 0FAFC2 imul eax, edx 6221 0000449C 01C3 add ebx, eax 6222 0000449E 8B14BD[F8A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 6223 000044A5 0FBF842D[70F30400] movsx eax, word [(mp3_synth_win+3C0h)+ebp*2] 6224 000044AD 0FAFC2 imul eax, edx 6225 000044B0 01C3 add ebx, eax 6226 000044B2 81FB00000040 cmp ebx, 40000000h 6227 000044B8 7321 jnb short .sat 6228 000044BA C1FB16 sar ebx, 22 6229 6230 .sat_back: 6231 000044BD 8819 mov [ecx], bl 6232 000044BF 030D[9CF40000] add ecx, [mp3_samples_dst_step] 6233 000044C5 83C602 add esi, 2 6234 000044C8 83EF02 sub edi, 2 6235 000044CB 83C502 add ebp, 2 6236 000044CE F7C51F000000 test ebp, 1Fh 6237 000044D4 0F8593FEFFFF jnz .samples_lop 6238 000044DA C3 retn 6239 6240 .sat: 6241 000044DB C1FB1F sar ebx, 31 6242 000044DE F7D3 not ebx 6243 000044E0 EBDB jmp short .sat_back 6244 6245 .append_copy_to_window: 6246 000044E2 8D3485[F89D0000] lea esi, [mp3_synth_buf+eax*4] 6247 000044E9 8DBE00080000 lea edi, [esi+2048] 6248 000044EF B912000000 mov ecx, 18 6249 000044F4 F3A5 rep movsd 6250 000044F6 E951FEFFFF jmp .append_copy_to_window_back 6251 6252 6253 ; =============== S U B R O U T I N E ======================================= 6254 6255 6256 synth_8bit_shift_2_fast: 6257 000044FB F605[54760000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 1,2,1 6258 00004502 740E jz short .no_rdtsc_supported 6259 00004504 0F31 rdtsc 6260 00004506 2905[CC770000] sub [rdtsc_synth_dct], eax 6261 0000450C 1915[D0770000] sbb [rdtsc_synth_dct+4], edx 6262 6263 .no_rdtsc_supported: 6264 00004512 BE[00BE0000] mov esi, mp3_sb_samples 6265 00004517 8B3D[94F40000] mov edi, [mp3_samples_dst] 6266 0000451D C705[A0F40000]0000- mov dword [mp3_curr_channel], 0 6266 00004525 0000 6267 6268 .synth_channel_lop: 6269 00004527 56 push esi 6270 00004528 57 push edi 6271 00004529 893D[E09D0000] mov [mp3_curr_syn_dst], edi 6272 0000452F C705[A8F40000]0000- mov dword [mp3_curr_frame], 0 6272 00004537 0000 6273 6274 .synth_frame_lop: 6275 00004539 56 push esi 6276 0000453A F605[54760000]10 test byte [cpuid_flags], 10h 6277 00004541 740E jz short .no_rdtsc_supported@ 6278 00004543 0F31 rdtsc 6279 00004545 2905[E4770000] sub [rdtsc_dct32], eax 6280 0000454B 1915[E8770000] sbb [rdtsc_dct32+4], edx 6281 6282 .no_rdtsc_supported@: 6283 00004551 8B15[A0F40000] mov edx, [mp3_curr_channel] 6284 00004557 8B0495[F8BD0000] mov eax, [mp3_synth_index+edx*4] 6285 0000455E 832C95[F8BD0000]20 sub dword [mp3_synth_index+edx*4], 32 6286 00004566 C1E20A shl edx, 10 6287 00004569 25E0010000 and eax, 1E0h ; 1FFh-1Fh 6288 0000456E 09D0 or eax, edx 6289 00004570 A3[DC9D0000] mov [mp3_curr_syn_index], eax 6290 00004575 8B3D[DC9D0000] mov edi, [mp3_curr_syn_index] 6291 0000457B 8D3CBD[F89D0000] lea edi, [mp3_synth_buf+edi*4] 6292 00004582 E83BEDFFFF call mp3_dct32_shift_2 ; mp3_dct32_shift_&rate_shift 6293 00004587 F605[54760000]10 test byte [cpuid_flags], 10h 6294 0000458E 740E jz short .no_rdtsc_supported@@ 6295 00004590 0F31 rdtsc 6296 00004592 0105[E4770000] add [rdtsc_dct32], eax 6297 00004598 1115[E8770000] adc [rdtsc_dct32+4], edx 6298 6299 .no_rdtsc_supported@@: 6300 0000459E F605[54760000]10 test byte [cpuid_flags], 10h 6301 000045A5 740E jz short .no_rdtsc_supported@@@ 6302 000045A7 0F31 rdtsc 6303 000045A9 2905[FC770000] sub [rdtsc_synth], eax 6304 000045AF 1915[00780000] sbb [rdtsc_synth+4], edx 6305 6306 .no_rdtsc_supported@@@: 6307 000045B5 E888000000 call mp3_synth_filter_this_8bit_shift_2_fast ; 6308 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 6309 000045BA F605[54760000]10 test byte [cpuid_flags], 10h 6310 000045C1 740E jz short .no_rdtsc_supported@@@@ 6311 000045C3 0F31 rdtsc 6312 000045C5 0105[FC770000] add [rdtsc_synth], eax 6313 000045CB 1115[00780000] adc [rdtsc_synth+4], edx 6314 6315 .no_rdtsc_supported@@@@: 6316 000045D1 5E pop esi 6317 000045D2 A1[9CF40000] mov eax, [mp3_samples_dst_step] 6318 000045D7 C1E005 shl eax, 5 6319 000045DA 8A0D[4F760000] mov cl, [option_rate_shift] 6320 000045E0 D3E8 shr eax, cl 6321 000045E2 0105[E09D0000] add [mp3_curr_syn_dst], eax 6322 000045E8 81C680000000 add esi, 128 ; SBLIMIT*4 6323 000045EE FF05[A8F40000] inc dword [mp3_curr_frame] 6324 000045F4 A1[A8F40000] mov eax, [mp3_curr_frame] 6325 000045F9 3B05[E49D0000] cmp eax, [mp3_nb_frames] 6326 000045FF 0F8234FFFFFF jb .synth_frame_lop 6327 00004605 5F pop edi 6328 00004606 5E pop esi 6329 00004607 033D[D89D0000] add edi, [mp3_bytes_per_sample] 6330 0000460D 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 6331 00004613 FF05[A0F40000] inc dword [mp3_curr_channel] 6332 00004619 A1[A0F40000] mov eax, [mp3_curr_channel] 6333 0000461E 3B05[D09D0000] cmp eax, [mp3_output_num_channels] 6334 00004624 0F82FDFEFFFF jb .synth_channel_lop 6335 0000462A F605[54760000]10 test byte [cpuid_flags], 10h 6336 00004631 740E jz short .no_rdtsc_supported@@@@@ 6337 00004633 0F31 rdtsc 6338 00004635 0105[CC770000] add [rdtsc_synth_dct], eax 6339 0000463B 1115[D0770000] adc [rdtsc_synth_dct+4], edx 6340 6341 .no_rdtsc_supported@@@@@: 6342 00004641 C3 retn 6343 6344 6345 ; =============== S U B R O U T I N E ======================================= 6346 6347 6348 mp3_synth_filter_this_8bit_shift_2_fast: 6349 00004642 A1[DC9D0000] mov eax, [mp3_curr_syn_index] 6350 00004647 A9E0010000 test eax, 1E0h 6351 0000464C 0F8497010000 jz .append_copy_to_window 6352 00004652 90 nop 6353 6354 .append_copy_to_window_back: 6355 00004653 89C5 mov ebp, eax 6356 00004655 81E5C0010000 and ebp, 1C0h 6357 0000465B 2520040000 and eax, 420h 6358 00004660 8D7010 lea esi, [eax+10h] 6359 00004663 8D7830 lea edi, [eax+30h] 6360 00004666 F7DD neg ebp 6361 00004668 81E5C0010000 and ebp, 1C0h 6362 0000466E 8B0D[E09D0000] mov ecx, [mp3_curr_syn_dst] 6363 6364 .samples_lop: 6365 00004674 BB00002020 mov ebx, 20200000h 6366 00004679 8B14B5[F89D0000] mov edx, [mp3_synth_buf+esi*4] 6367 00004680 0FBF842D[B0EF0400] movsx eax, word [mp3_synth_win+ebp*2] 6368 00004688 0FAFC2 imul eax, edx 6369 0000468B 01C3 add ebx, eax 6370 0000468D 8B14B5[F89E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] 6371 00004694 0FBF842D[30F00400] movsx eax, word [(mp3_synth_win+80h)+ebp*2] 6372 0000469C 0FAFC2 imul eax, edx 6373 0000469F 01C3 add ebx, eax 6374 000046A1 8B14B5[F89F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 6375 000046A8 0FBF842D[B0F00400] movsx eax, word [(mp3_synth_win+100h)+ebp*2] 6376 000046B0 0FAFC2 imul eax, edx 6377 000046B3 01C3 add ebx, eax 6378 000046B5 8B14B5[F8A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 6379 000046BC 0FBF842D[30F10400] movsx eax, word [(mp3_synth_win+180h)+ebp*2] 6380 000046C4 0FAFC2 imul eax, edx 6381 000046C7 01C3 add ebx, eax 6382 000046C9 8B14B5[F8A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] 6383 000046D0 0FBF842D[B0F10400] movsx eax, word [(mp3_synth_win+200h)+ebp*2] 6384 000046D8 0FAFC2 imul eax, edx 6385 000046DB 01C3 add ebx, eax 6386 000046DD 8B14B5[F8A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 6387 000046E4 0FBF842D[30F20400] movsx eax, word [(mp3_synth_win+280h)+ebp*2] 6388 000046EC 0FAFC2 imul eax, edx 6389 000046EF 01C3 add ebx, eax 6390 000046F1 8B14B5[F8A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 6391 000046F8 0FBF842D[B0F20400] movsx eax, word [(mp3_synth_win+300h)+ebp*2] 6392 00004700 0FAFC2 imul eax, edx 6393 00004703 01C3 add ebx, eax 6394 00004705 8B14B5[F8A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 6395 0000470C 0FBF842D[30F30400] movsx eax, word [(mp3_synth_win+380h)+ebp*2] 6396 00004714 0FAFC2 imul eax, edx 6397 00004717 01C3 add ebx, eax 6398 00004719 8B14BD[F89D0000] mov edx, [mp3_synth_buf+edi*4] 6399 00004720 0FBF842D[F0EF0400] movsx eax, word [(mp3_synth_win+40h)+ebp*2] 6400 00004728 0FAFC2 imul eax, edx 6401 0000472B 01C3 add ebx, eax 6402 0000472D 8B14BD[F89E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 6403 00004734 0FBF842D[70F00400] movsx eax, word [(mp3_synth_win+0C0h)+ebp*2] 6404 0000473C 0FAFC2 imul eax, edx 6405 0000473F 01C3 add ebx, eax 6406 00004741 8B14BD[F89F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] 6407 00004748 0FBF842D[F0F00400] movsx eax, word [(mp3_synth_win+140h)+ebp*2] 6408 00004750 0FAFC2 imul eax, edx 6409 00004753 01C3 add ebx, eax 6410 00004755 8B14BD[F8A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 6411 0000475C 0FBF842D[70F10400] movsx eax, word [(mp3_synth_win+1C0h)+ebp*2] 6412 00004764 0FAFC2 imul eax, edx 6413 00004767 01C3 add ebx, eax 6414 00004769 8B14BD[F8A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 6415 00004770 0FBF842D[F0F10400] movsx eax, word [(mp3_synth_win+240h)+ebp*2] 6416 00004778 0FAFC2 imul eax, edx 6417 0000477B 01C3 add ebx, eax 6418 0000477D 8B14BD[F8A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 6419 00004784 0FBF842D[70F20400] movsx eax, word [(mp3_synth_win+2C0h)+ebp*2] 6420 0000478C 0FAFC2 imul eax, edx 6421 0000478F 01C3 add ebx, eax 6422 00004791 8B14BD[F8A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 6423 00004798 0FBF842D[F0F20400] movsx eax, word [(mp3_synth_win+340h)+ebp*2] 6424 000047A0 0FAFC2 imul eax, edx 6425 000047A3 01C3 add ebx, eax 6426 000047A5 8B14BD[F8A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 6427 000047AC 0FBF842D[70F30400] movsx eax, word [(mp3_synth_win+3C0h)+ebp*2] 6428 000047B4 0FAFC2 imul eax, edx 6429 000047B7 01C3 add ebx, eax 6430 000047B9 81FB00000040 cmp ebx, 40000000h 6431 000047BF 7321 jnb short .sat 6432 000047C1 C1FB16 sar ebx, 22 6433 6434 .sat_back: 6435 000047C4 8819 mov [ecx], bl 6436 000047C6 030D[9CF40000] add ecx, [mp3_samples_dst_step] 6437 000047CC 83C604 add esi, 4 6438 000047CF 83EF04 sub edi, 4 6439 000047D2 83C504 add ebp, 4 6440 000047D5 F7C51F000000 test ebp, 1Fh 6441 000047DB 0F8593FEFFFF jnz .samples_lop 6442 000047E1 C3 retn 6443 6444 .sat: 6445 000047E2 C1FB1F sar ebx, 31 6446 000047E5 F7D3 not ebx 6447 000047E7 EBDB jmp short .sat_back 6448 6449 .append_copy_to_window: 6450 000047E9 8D3485[F89D0000] lea esi, [mp3_synth_buf+eax*4] 6451 000047F0 8DBE00080000 lea edi, [esi+2048] 6452 000047F6 B912000000 mov ecx, 18 6453 000047FB F3A5 rep movsd 6454 000047FD E951FEFFFF jmp .append_copy_to_window_back 6455 6456 6457 ; =============== S U B R O U T I N E ======================================= 6458 6459 6460 synth_16bit_shift_0_slow: 6461 00004802 F605[54760000]10 test byte [cpuid_flags], 10h 6462 00004809 740E jz short .no_rdtsc_supported 6463 0000480B 0F31 rdtsc 6464 0000480D 2905[CC770000] sub [rdtsc_synth_dct], eax 6465 00004813 1915[D0770000] sbb [rdtsc_synth_dct+4], edx 6466 6467 .no_rdtsc_supported: 6468 00004819 BE[00BE0000] mov esi, mp3_sb_samples 6469 0000481E 8B3D[94F40000] mov edi, [mp3_samples_dst] 6470 00004824 C705[A0F40000]0000- mov dword [mp3_curr_channel], 0 6470 0000482C 0000 6471 6472 .synth_channel_lop: 6473 0000482E 56 push esi 6474 0000482F 57 push edi 6475 00004830 893D[E09D0000] mov [mp3_curr_syn_dst], edi 6476 00004836 C705[A8F40000]0000- mov dword [mp3_curr_frame], 0 6476 0000483E 0000 6477 6478 .synth_frame_lop: 6479 00004840 56 push esi 6480 00004841 F605[54760000]10 test byte [cpuid_flags], 10h 6481 00004848 740E jz short .no_rdtsc_supported@ 6482 0000484A 0F31 rdtsc 6483 0000484C 2905[E4770000] sub [rdtsc_dct32], eax 6484 00004852 1915[E8770000] sbb [rdtsc_dct32+4], edx 6485 6486 .no_rdtsc_supported@: 6487 00004858 8B15[A0F40000] mov edx, [mp3_curr_channel] 6488 0000485E 8B0495[F8BD0000] mov eax, [mp3_synth_index+edx*4] 6489 00004865 832C95[F8BD0000]20 sub dword [mp3_synth_index+edx*4], 32 6490 0000486D C1E20A shl edx, 10 ; channel*1024 6491 00004870 25E0010000 and eax, 1E0h ; 1FFh-1Fh 6492 00004875 09D0 or eax, edx 6493 00004877 A3[DC9D0000] mov [mp3_curr_syn_index], eax 6494 0000487C 8B3D[DC9D0000] mov edi, [mp3_curr_syn_index] 6495 00004882 8D3CBD[F89D0000] lea edi, [mp3_synth_buf+edi*4] 6496 00004889 E864DDFFFF call mp3_dct32_shift_0 ; mp3_dct32_shift_&rate_shift 6497 0000488E F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_dct32 6498 00004895 740E jz short .no_rdtsc_supported@@ 6499 00004897 0F31 rdtsc 6500 00004899 0105[E4770000] add [rdtsc_dct32], eax 6501 0000489F 1115[E8770000] adc [rdtsc_dct32+4], edx 6502 6503 .no_rdtsc_supported@@: 6504 000048A5 F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_synth 6505 000048AC 740E jz short .no_rdtsc_supported@@@ 6506 000048AE 0F31 rdtsc 6507 000048B0 2905[FC770000] sub [rdtsc_synth], eax 6508 000048B6 1915[00780000] sbb [rdtsc_synth+4], edx 6509 6510 .no_rdtsc_supported@@@: 6511 000048BC E888000000 call mp3_synth_filter_this_16bit_shift_0_slow 6512 000048C1 F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_synth 6513 000048C8 740E jz short .no_rdtsc_supported@@@@ 6514 000048CA 0F31 rdtsc 6515 000048CC 0105[FC770000] add [rdtsc_synth], eax 6516 000048D2 1115[00780000] adc [rdtsc_synth+4], edx 6517 6518 .no_rdtsc_supported@@@@: 6519 000048D8 5E pop esi 6520 000048D9 A1[9CF40000] mov eax, [mp3_samples_dst_step] 6521 000048DE C1E005 shl eax, 5 6522 000048E1 8A0D[4F760000] mov cl, [option_rate_shift] 6523 000048E7 D3E8 shr eax, cl 6524 000048E9 0105[E09D0000] add [mp3_curr_syn_dst], eax 6525 000048EF 81C680000000 add esi, 128 ; SBLIMIT*4 6526 000048F5 FF05[A8F40000] inc dword [mp3_curr_frame] 6527 000048FB A1[A8F40000] mov eax, [mp3_curr_frame] 6528 00004900 3B05[E49D0000] cmp eax, [mp3_nb_frames] 6529 00004906 0F8234FFFFFF jb .synth_frame_lop 6530 0000490C 5F pop edi 6531 0000490D 5E pop esi 6532 0000490E 033D[D89D0000] add edi, [mp3_bytes_per_sample] 6533 00004914 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 6534 0000491A FF05[A0F40000] inc dword [mp3_curr_channel] 6535 00004920 A1[A0F40000] mov eax, [mp3_curr_channel] 6536 00004925 3B05[D09D0000] cmp eax, [mp3_output_num_channels] 6537 0000492B 0F82FDFEFFFF jb .synth_channel_lop 6538 00004931 F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_synth_dct 6539 00004938 740E jz short .no_rdtsc_supported@@@@@ 6540 0000493A 0F31 rdtsc 6541 0000493C 0105[CC770000] add [rdtsc_synth_dct], eax 6542 00004942 1115[D0770000] adc [rdtsc_synth_dct+4], edx 6543 6544 .no_rdtsc_supported@@@@@: 6545 00004948 C3 retn 6546 6547 6548 ; =============== S U B R O U T I N E ======================================= 6549 6550 6551 mp3_synth_filter_this_16bit_shift_0_slow: 6552 00004949 A1[DC9D0000] mov eax, [mp3_curr_syn_index] 6553 0000494E A9E0010000 test eax, 1E0h ; 1FFh-1Fh 6554 00004953 0F847C010000 jz .append_copy_to_window 6555 00004959 90 nop 6556 6557 .append_copy_to_window_back: 6558 0000495A 89C5 mov ebp, eax ; mov @@win1,eax 6559 0000495C 81E5C0010000 and ebp, 1C0h ; and @@win1,1FFh-1Fh-20h 6560 00004962 2520040000 and eax, 420h ; and eax,20h+(1 shl 10) ; bit5, and channel 6561 00004967 8D7010 lea esi, [eax+10h] ; lea @@syn1,[eax+10h] 6562 0000496A 8D7830 lea edi, [eax+30h] ; lea @@syn2,[eax+30h] 6563 0000496D F7DD neg ebp 6564 0000496F 81E5C0010000 and ebp, 1C0h ; and @@win1,1FFh-1Fh-20h 6565 00004975 8B0D[E09D0000] mov ecx, [mp3_curr_syn_dst] 6566 6567 .samples_lop: 6568 0000497B BB10001000 mov ebx, 100010h ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 6569 ; @@out_shift = 5 6570 6571 .SUM8_@: ; @@SUM8 macro sum,win,ww,syn 6572 00004980 8B14B5[F89D0000] mov edx, [mp3_synth_buf+esi*4] ; IRP nn,0,1,2,3,4,5,6,7 6573 ; @@SUM8 @@sum,@@win1,0, @@syn1 6574 00004987 8B04AD[B0EF0400] mov eax, [mp3_synth_win+ebp*4] ; [mp3_synth_buf+syn*4+(nn*64*4)] 6575 0000498E F7EA imul edx ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] 6576 00004990 01D3 add ebx, edx 6577 00004992 8B14B5[F89E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] 6578 00004999 8B04AD[B0F00400] mov eax, [(mp3_synth_win+100h)+ebp*4] 6579 000049A0 F7EA imul edx 6580 000049A2 01D3 add ebx, edx ; add sum,edx 6581 000049A4 8B14B5[F89F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 6582 000049AB 8B04AD[B0F10400] mov eax, [(mp3_synth_win+200h)+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] 6583 000049B2 F7EA imul edx ; 64bit = 32bit * 32bit 6584 000049B4 01D3 add ebx, edx 6585 000049B6 8B14B5[F8A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 6586 000049BD 8B04AD[B0F20400] mov eax, [(mp3_synth_win+300h)+ebp*4] 6587 000049C4 F7EA imul edx 6588 000049C6 01D3 add ebx, edx 6589 000049C8 8B14B5[F8A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] 6590 000049CF 8B04AD[B0F30400] mov eax, [(mp3_synth_win+400h)+ebp*4] 6591 000049D6 F7EA imul edx 6592 000049D8 01D3 add ebx, edx 6593 000049DA 8B14B5[F8A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 6594 000049E1 8B04AD[B0F40400] mov eax, [(mp3_synth_win+500h)+ebp*4] 6595 000049E8 F7EA imul edx 6596 000049EA 01D3 add ebx, edx 6597 000049EC 8B14B5[F8A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 6598 000049F3 8B04AD[B0F50400] mov eax, [(mp3_synth_win+600h)+ebp*4] 6599 000049FA F7EA imul edx 6600 000049FC 01D3 add ebx, edx 6601 000049FE 8B14B5[F8A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 6602 00004A05 8B04AD[B0F60400] mov eax, [(mp3_synth_win+700h)+ebp*4] 6603 00004A0C F7EA imul edx 6604 00004A0E 01D3 add ebx, edx 6605 6606 .skippp: ; @@SUM8 macro sum,win,ww,syn 6607 00004A10 8B14BD[F89D0000] mov edx, [mp3_synth_buf+edi*4] ; @@SUM8 @@sum,@@win1,32,@@syn2 6608 ; [mp3_synth_buf+syn*4+(nn*64*4)] 6609 00004A17 8B04AD[30F00400] mov eax, [(mp3_synth_win+80h)+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] 6610 00004A1E F7EA imul edx 6611 00004A20 01D3 add ebx, edx 6612 00004A22 8B14BD[F89E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 6613 00004A29 8B04AD[30F10400] mov eax, [(mp3_synth_win+180h)+ebp*4] 6614 00004A30 F7EA imul edx 6615 00004A32 01D3 add ebx, edx 6616 00004A34 8B14BD[F89F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] 6617 00004A3B 8B04AD[30F20400] mov eax, [(mp3_synth_win+280h)+ebp*4] 6618 00004A42 F7EA imul edx 6619 00004A44 01D3 add ebx, edx 6620 00004A46 8B14BD[F8A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 6621 00004A4D 8B04AD[30F30400] mov eax, [(mp3_synth_win+380h)+ebp*4] 6622 00004A54 F7EA imul edx 6623 00004A56 01D3 add ebx, edx 6624 00004A58 8B14BD[F8A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 6625 00004A5F 8B04AD[30F40400] mov eax, [(mp3_synth_win+480h)+ebp*4] 6626 00004A66 F7EA imul edx 6627 00004A68 01D3 add ebx, edx 6628 00004A6A 8B14BD[F8A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 6629 00004A71 8B04AD[30F50400] mov eax, [(mp3_synth_win+580h)+ebp*4] 6630 00004A78 F7EA imul edx 6631 00004A7A 01D3 add ebx, edx 6632 00004A7C 8B14BD[F8A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 6633 00004A83 8B04AD[30F60400] mov eax, [(mp3_synth_win+680h)+ebp*4] 6634 00004A8A F7EA imul edx 6635 00004A8C 01D3 add ebx, edx 6636 00004A8E 8B14BD[F8A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 6637 00004A95 8B04AD[30F70400] mov eax, [(mp3_synth_win+780h)+ebp*4] 6638 00004A9C F7EA imul edx 6639 00004A9E 01D3 add ebx, edx 6640 00004AA0 81FB00002000 cmp ebx, 200000h ; cmp @@sum,10000h SHL (@@out_shift) 6641 00004AA6 7322 jnb short .sat 6642 00004AA8 C1FB05 sar ebx, 5 ; sar @@sum,(@@out_shift) 6643 00004AAB 81EB00800000 sub ebx, 8000h ; make 16bit signed 6644 6645 .sat_back: 6646 00004AB1 668919 mov [ecx], bx 6647 00004AB4 030D[9CF40000] add ecx, [mp3_samples_dst_step] 6648 00004ABA 46 inc esi ; inc @@syn1 6649 00004ABB 4F dec edi ; dec @@syn2 6650 00004ABC 45 inc ebp ; inc @@win1 6651 00004ABD F7C51F000000 test ebp, 1Fh ; test @@win1,1Fh 6652 00004AC3 0F85B2FEFFFF jnz .samples_lop 6653 00004AC9 C3 retn 6654 6655 .sat: 6656 00004ACA C1FB1F sar ebx, 31 ; FFFFFFFFh,00000000h 6657 00004ACD 81F3FF7F0000 xor ebx, 7FFFh ; FFFF8000h,00007FFFh (signed 16bit) 6658 00004AD3 EBDC jmp short .sat_back 6659 6660 .append_copy_to_window: 6661 00004AD5 8D3485[F89D0000] lea esi, [mp3_synth_buf+eax*4] 6662 00004ADC 8DBE00080000 lea edi, [esi+2048] ; [esi+512*4] 6663 00004AE2 B912000000 mov ecx, 18 ; (12h*4)/4 6664 00004AE7 F3A5 rep movsd 6665 00004AE9 E96CFEFFFF jmp .append_copy_to_window_back 6666 6667 6668 ; =============== S U B R O U T I N E ======================================= 6669 6670 6671 synth_16bit_shift_1_slow: 6672 00004AEE F605[54760000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 0,1,0 6673 00004AF5 740E jz short .no_rdtsc_supported 6674 00004AF7 0F31 rdtsc 6675 00004AF9 2905[CC770000] sub [rdtsc_synth_dct], eax 6676 00004AFF 1915[D0770000] sbb [rdtsc_synth_dct+4], edx 6677 6678 .no_rdtsc_supported: 6679 00004B05 BE[00BE0000] mov esi, mp3_sb_samples 6680 00004B0A 8B3D[94F40000] mov edi, [mp3_samples_dst] 6681 00004B10 C705[A0F40000]0000- mov dword [mp3_curr_channel], 0 6681 00004B18 0000 6682 6683 .synth_channel_lop: 6684 00004B1A 56 push esi 6685 00004B1B 57 push edi 6686 00004B1C 893D[E09D0000] mov [mp3_curr_syn_dst], edi 6687 00004B22 C705[A8F40000]0000- mov dword [mp3_curr_frame], 0 6687 00004B2A 0000 6688 6689 .synth_frame_lop: 6690 00004B2C 56 push esi 6691 00004B2D F605[54760000]10 test byte [cpuid_flags], 10h 6692 00004B34 740E jz short .no_rdtsc_supported@ 6693 00004B36 0F31 rdtsc 6694 00004B38 2905[E4770000] sub [rdtsc_dct32], eax 6695 00004B3E 1915[E8770000] sbb [rdtsc_dct32+4], edx 6696 6697 .no_rdtsc_supported@: 6698 00004B44 8B15[A0F40000] mov edx, [mp3_curr_channel] 6699 00004B4A 8B0495[F8BD0000] mov eax, [mp3_synth_index+edx*4] 6700 00004B51 832C95[F8BD0000]20 sub dword [mp3_synth_index+edx*4], 32 6701 00004B59 C1E20A shl edx, 10 ; channel*1024 6702 00004B5C 25E0010000 and eax, 1E0h ; 1FFh-1Fh ; index(0..511), align 32 6703 00004B61 09D0 or eax, edx 6704 00004B63 A3[DC9D0000] mov [mp3_curr_syn_index], eax 6705 00004B68 8B3D[DC9D0000] mov edi, [mp3_curr_syn_index] 6706 00004B6E 8D3CBD[F89D0000] lea edi, [mp3_synth_buf+edi*4] 6707 00004B75 E858E3FFFF call mp3_dct32_shift_1 ; call mp3_dct32_shift_&rate_shift 6708 00004B7A F605[54760000]10 test byte [cpuid_flags], 10h 6709 00004B81 740E jz short .no_rdtsc_supported@@ 6710 00004B83 0F31 rdtsc 6711 00004B85 0105[E4770000] add [rdtsc_dct32], eax 6712 00004B8B 1115[E8770000] adc [rdtsc_dct32+4], edx 6713 6714 .no_rdtsc_supported@@: 6715 00004B91 F605[54760000]10 test byte [cpuid_flags], 10h 6716 00004B98 740E jz short .no_rdtsc_supported@@@ 6717 00004B9A 0F31 rdtsc 6718 00004B9C 2905[FC770000] sub [rdtsc_synth], eax 6719 00004BA2 1915[00780000] sbb [rdtsc_synth+4], edx 6720 6721 .no_rdtsc_supported@@@: 6722 00004BA8 E888000000 call mp3_synth_filter_this_16bit_shift_1_slow ; 6723 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 6724 00004BAD F605[54760000]10 test byte [cpuid_flags], 10h 6725 00004BB4 740E jz short .no_rdtsc_supported@@@@ 6726 00004BB6 0F31 rdtsc 6727 00004BB8 0105[FC770000] add [rdtsc_synth], eax 6728 00004BBE 1115[00780000] adc [rdtsc_synth+4], edx 6729 6730 .no_rdtsc_supported@@@@: 6731 00004BC4 5E pop esi 6732 00004BC5 A1[9CF40000] mov eax, [mp3_samples_dst_step] 6733 00004BCA C1E005 shl eax, 5 6734 00004BCD 8A0D[4F760000] mov cl, [option_rate_shift] ; IF with_rate_shift 6735 00004BD3 D3E8 shr eax, cl 6736 00004BD5 0105[E09D0000] add [mp3_curr_syn_dst], eax 6737 00004BDB 81C680000000 add esi, 128 ; SBLIMIT*4 ; src+32*4 6738 00004BE1 FF05[A8F40000] inc dword [mp3_curr_frame] 6739 00004BE7 A1[A8F40000] mov eax, [mp3_curr_frame] 6740 00004BEC 3B05[E49D0000] cmp eax, [mp3_nb_frames] 6741 00004BF2 0F8234FFFFFF jb .synth_frame_lop 6742 00004BF8 5F pop edi 6743 00004BF9 5E pop esi 6744 00004BFA 033D[D89D0000] add edi, [mp3_bytes_per_sample] 6745 00004C00 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 ; src 6746 00004C06 FF05[A0F40000] inc dword [mp3_curr_channel] 6747 00004C0C A1[A0F40000] mov eax, [mp3_curr_channel] 6748 00004C11 3B05[D09D0000] cmp eax, [mp3_output_num_channels] 6749 00004C17 0F82FDFEFFFF jb .synth_channel_lop 6750 00004C1D F605[54760000]10 test byte [cpuid_flags], 10h 6751 00004C24 740E jz short .no_rdtsc_supported@@@@@ 6752 00004C26 0F31 rdtsc 6753 00004C28 0105[CC770000] add [rdtsc_synth_dct], eax 6754 00004C2E 1115[D0770000] adc [rdtsc_synth_dct+4], edx 6755 6756 .no_rdtsc_supported@@@@@: 6757 00004C34 C3 retn 6758 6759 6760 ; =============== S U B R O U T I N E ======================================= 6761 6762 6763 mp3_synth_filter_this_16bit_shift_1_slow: 6764 00004C35 A1[DC9D0000] mov eax, [mp3_curr_syn_index] 6765 00004C3A A9E0010000 test eax, 1E0h 6766 00004C3F 0F8482010000 jz .append_copy_to_window 6767 00004C45 90 nop 6768 6769 .append_copy_to_window_back: 6770 00004C46 89C5 mov ebp, eax 6771 00004C48 81E5C0010000 and ebp, 1C0h 6772 00004C4E 2520040000 and eax, 420h 6773 00004C53 8D7010 lea esi, [eax+10h] 6774 00004C56 8D7830 lea edi, [eax+30h] 6775 00004C59 F7DD neg ebp 6776 00004C5B 81E5C0010000 and ebp, 1C0h 6777 00004C61 8B0D[E09D0000] mov ecx, [mp3_curr_syn_dst] 6778 6779 .samples_lop: 6780 00004C67 BB10001000 mov ebx, 100010h 6781 00004C6C 8B14B5[F89D0000] mov edx, [mp3_synth_buf+esi*4] 6782 00004C73 8B04AD[B0EF0400] mov eax, [mp3_synth_win+ebp*4] 6783 00004C7A F7EA imul edx 6784 00004C7C 01D3 add ebx, edx 6785 00004C7E 8B14B5[F89E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] 6786 00004C85 8B04AD[B0F00400] mov eax, [(mp3_synth_win+100h)+ebp*4] 6787 00004C8C F7EA imul edx 6788 00004C8E 01D3 add ebx, edx 6789 00004C90 8B14B5[F89F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 6790 00004C97 8B04AD[B0F10400] mov eax, [(mp3_synth_win+200h)+ebp*4] 6791 00004C9E F7EA imul edx 6792 00004CA0 01D3 add ebx, edx 6793 00004CA2 8B14B5[F8A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 6794 00004CA9 8B04AD[B0F20400] mov eax, [(mp3_synth_win+300h)+ebp*4] 6795 00004CB0 F7EA imul edx 6796 00004CB2 01D3 add ebx, edx 6797 00004CB4 8B14B5[F8A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] 6798 00004CBB 8B04AD[B0F30400] mov eax, [(mp3_synth_win+400h)+ebp*4] 6799 00004CC2 F7EA imul edx 6800 00004CC4 01D3 add ebx, edx 6801 00004CC6 8B14B5[F8A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 6802 00004CCD 8B04AD[B0F40400] mov eax, [(mp3_synth_win+500h)+ebp*4] 6803 00004CD4 F7EA imul edx 6804 00004CD6 01D3 add ebx, edx 6805 00004CD8 8B14B5[F8A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 6806 00004CDF 8B04AD[B0F50400] mov eax, [(mp3_synth_win+600h)+ebp*4] 6807 00004CE6 F7EA imul edx 6808 00004CE8 01D3 add ebx, edx 6809 00004CEA 8B14B5[F8A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 6810 00004CF1 8B04AD[B0F60400] mov eax, [(mp3_synth_win+700h)+ebp*4] 6811 00004CF8 F7EA imul edx 6812 00004CFA 01D3 add ebx, edx 6813 00004CFC 8B14BD[F89D0000] mov edx, [mp3_synth_buf+edi*4] 6814 00004D03 8B04AD[30F00400] mov eax, [(mp3_synth_win+80h)+ebp*4] 6815 00004D0A F7EA imul edx 6816 00004D0C 01D3 add ebx, edx 6817 00004D0E 8B14BD[F89E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 6818 00004D15 8B04AD[30F10400] mov eax, [(mp3_synth_win+180h)+ebp*4] 6819 00004D1C F7EA imul edx 6820 00004D1E 01D3 add ebx, edx 6821 00004D20 8B14BD[F89F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] 6822 00004D27 8B04AD[30F20400] mov eax, [(mp3_synth_win+280h)+ebp*4] 6823 00004D2E F7EA imul edx 6824 00004D30 01D3 add ebx, edx 6825 00004D32 8B14BD[F8A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 6826 00004D39 8B04AD[30F30400] mov eax, [(mp3_synth_win+380h)+ebp*4] 6827 00004D40 F7EA imul edx 6828 00004D42 01D3 add ebx, edx 6829 00004D44 8B14BD[F8A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 6830 00004D4B 8B04AD[30F40400] mov eax, [(mp3_synth_win+480h)+ebp*4] 6831 00004D52 F7EA imul edx 6832 00004D54 01D3 add ebx, edx 6833 00004D56 8B14BD[F8A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 6834 00004D5D 8B04AD[30F50400] mov eax, [(mp3_synth_win+580h)+ebp*4] 6835 00004D64 F7EA imul edx 6836 00004D66 01D3 add ebx, edx 6837 00004D68 8B14BD[F8A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 6838 00004D6F 8B04AD[30F60400] mov eax, [(mp3_synth_win+680h)+ebp*4] 6839 00004D76 F7EA imul edx 6840 00004D78 01D3 add ebx, edx 6841 00004D7A 8B14BD[F8A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 6842 00004D81 8B04AD[30F70400] mov eax, [(mp3_synth_win+780h)+ebp*4] 6843 00004D88 F7EA imul edx 6844 00004D8A 01D3 add ebx, edx 6845 00004D8C 81FB00002000 cmp ebx, 200000h 6846 00004D92 7328 jnb short .sat 6847 00004D94 C1FB05 sar ebx, 5 6848 00004D97 81EB00800000 sub ebx, 8000h 6849 6850 .sat_back: 6851 00004D9D 668919 mov [ecx], bx 6852 00004DA0 030D[9CF40000] add ecx, [mp3_samples_dst_step] 6853 00004DA6 83C602 add esi, 2 6854 00004DA9 83EF02 sub edi, 2 6855 00004DAC 83C502 add ebp, 2 6856 00004DAF F7C51F000000 test ebp, 1Fh 6857 00004DB5 0F85ACFEFFFF jnz .samples_lop 6858 00004DBB C3 retn 6859 6860 .sat: 6861 00004DBC C1FB1F sar ebx, 31 6862 00004DBF 81F3FF7F0000 xor ebx, 7FFFh 6863 00004DC5 EBD6 jmp short .sat_back 6864 6865 .append_copy_to_window: 6866 00004DC7 8D3485[F89D0000] lea esi, [mp3_synth_buf+eax*4] 6867 00004DCE 8DBE00080000 lea edi, [esi+2048] 6868 00004DD4 B912000000 mov ecx, 18 6869 00004DD9 F3A5 rep movsd 6870 00004DDB E966FEFFFF jmp .append_copy_to_window_back 6871 6872 6873 ; =============== S U B R O U T I N E ======================================= 6874 6875 6876 synth_16bit_shift_2_slow: 6877 00004DE0 F605[54760000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 0,2,0 6878 00004DE7 740E jz short .no_rdtsc_supported 6879 00004DE9 0F31 rdtsc 6880 00004DEB 2905[CC770000] sub [rdtsc_synth_dct], eax 6881 00004DF1 1915[D0770000] sbb [rdtsc_synth_dct+4], edx 6882 6883 .no_rdtsc_supported: 6884 00004DF7 BE[00BE0000] mov esi, mp3_sb_samples 6885 00004DFC 8B3D[94F40000] mov edi, [mp3_samples_dst] 6886 00004E02 C705[A0F40000]0000- mov dword [mp3_curr_channel], 0 6886 00004E0A 0000 6887 6888 .synth_channel_lop: 6889 00004E0C 56 push esi 6890 00004E0D 57 push edi 6891 00004E0E 893D[E09D0000] mov [mp3_curr_syn_dst], edi 6892 00004E14 C705[A8F40000]0000- mov dword [mp3_curr_frame], 0 6892 00004E1C 0000 6893 6894 .synth_frame_lop: 6895 00004E1E 56 push esi 6896 00004E1F F605[54760000]10 test byte [cpuid_flags], 10h 6897 00004E26 740E jz short .no_rdtsc_supported@ 6898 00004E28 0F31 rdtsc 6899 00004E2A 2905[E4770000] sub [rdtsc_dct32], eax 6900 00004E30 1915[E8770000] sbb [rdtsc_dct32+4], edx 6901 6902 .no_rdtsc_supported@: 6903 00004E36 8B15[A0F40000] mov edx, [mp3_curr_channel] 6904 00004E3C 8B0495[F8BD0000] mov eax, [mp3_synth_index+edx*4] 6905 00004E43 832C95[F8BD0000]20 sub dword [mp3_synth_index+edx*4], 32 6906 00004E4B C1E20A shl edx, 10 6907 00004E4E 25E0010000 and eax, 1E0h ; 1FFh-1Fh 6908 00004E53 09D0 or eax, edx 6909 00004E55 A3[DC9D0000] mov [mp3_curr_syn_index], eax 6910 00004E5A 8B3D[DC9D0000] mov edi, [mp3_curr_syn_index] 6911 00004E60 8D3CBD[F89D0000] lea edi, [mp3_synth_buf+edi*4] 6912 00004E67 E856E4FFFF call mp3_dct32_shift_2 ; call mp3_dct32_shift_&rate_shift 6913 00004E6C F605[54760000]10 test byte [cpuid_flags], 10h 6914 00004E73 740E jz short .no_rdtsc_supported@@ 6915 00004E75 0F31 rdtsc 6916 00004E77 0105[E4770000] add [rdtsc_dct32], eax 6917 00004E7D 1115[E8770000] adc [rdtsc_dct32+4], edx 6918 6919 .no_rdtsc_supported@@: 6920 00004E83 F605[54760000]10 test byte [cpuid_flags], 10h 6921 00004E8A 740E jz short .no_rdtsc_supported@@@ 6922 00004E8C 0F31 rdtsc 6923 00004E8E 2905[FC770000] sub [rdtsc_synth], eax 6924 00004E94 1915[00780000] sbb [rdtsc_synth+4], edx 6925 6926 .no_rdtsc_supported@@@: 6927 00004E9A E888000000 call mp3_synth_filter_this_16bit_shift_2_slow ; 6928 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 6929 00004E9F F605[54760000]10 test byte [cpuid_flags], 10h 6930 00004EA6 740E jz short .no_rdtsc_supported@@@@ 6931 00004EA8 0F31 rdtsc 6932 00004EAA 0105[FC770000] add [rdtsc_synth], eax 6933 00004EB0 1115[00780000] adc [rdtsc_synth+4], edx 6934 6935 .no_rdtsc_supported@@@@: 6936 00004EB6 5E pop esi 6937 00004EB7 A1[9CF40000] mov eax, [mp3_samples_dst_step] 6938 00004EBC C1E005 shl eax, 5 6939 00004EBF 8A0D[4F760000] mov cl, [option_rate_shift] 6940 00004EC5 D3E8 shr eax, cl 6941 00004EC7 0105[E09D0000] add [mp3_curr_syn_dst], eax 6942 00004ECD 81C680000000 add esi, 128 ; SBLIMIT*4 6943 00004ED3 FF05[A8F40000] inc dword [mp3_curr_frame] 6944 00004ED9 A1[A8F40000] mov eax, [mp3_curr_frame] 6945 00004EDE 3B05[E49D0000] cmp eax, [mp3_nb_frames] 6946 00004EE4 0F8234FFFFFF jb .synth_frame_lop 6947 00004EEA 5F pop edi 6948 00004EEB 5E pop esi 6949 00004EEC 033D[D89D0000] add edi, [mp3_bytes_per_sample] 6950 00004EF2 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 6951 00004EF8 FF05[A0F40000] inc dword [mp3_curr_channel] 6952 00004EFE A1[A0F40000] mov eax, [mp3_curr_channel] 6953 00004F03 3B05[D09D0000] cmp eax, [mp3_output_num_channels] 6954 00004F09 0F82FDFEFFFF jb .synth_channel_lop 6955 00004F0F F605[54760000]10 test byte [cpuid_flags], 10h 6956 00004F16 740E jz short .no_rdtsc_supported@@@@@ 6957 00004F18 0F31 rdtsc 6958 00004F1A 0105[CC770000] add [rdtsc_synth_dct], eax 6959 00004F20 1115[D0770000] adc [rdtsc_synth_dct+4], edx 6960 6961 .no_rdtsc_supported@@@@@: 6962 00004F26 C3 retn 6963 6964 6965 ; =============== S U B R O U T I N E ======================================= 6966 6967 6968 mp3_synth_filter_this_16bit_shift_2_slow: 6969 00004F27 A1[DC9D0000] mov eax, [mp3_curr_syn_index] 6970 00004F2C A9E0010000 test eax, 1E0h 6971 00004F31 0F8482010000 jz .append_copy_to_window 6972 00004F37 90 nop 6973 6974 .append_copy_to_window_back: 6975 00004F38 89C5 mov ebp, eax 6976 00004F3A 81E5C0010000 and ebp, 1C0h 6977 00004F40 2520040000 and eax, 420h 6978 00004F45 8D7010 lea esi, [eax+10h] 6979 00004F48 8D7830 lea edi, [eax+30h] 6980 00004F4B F7DD neg ebp 6981 00004F4D 81E5C0010000 and ebp, 1C0h 6982 00004F53 8B0D[E09D0000] mov ecx, [mp3_curr_syn_dst] 6983 6984 .samples_lop: 6985 00004F59 BB10001000 mov ebx, 100010h 6986 00004F5E 8B14B5[F89D0000] mov edx, [mp3_synth_buf+esi*4] 6987 00004F65 8B04AD[B0EF0400] mov eax, [mp3_synth_win+ebp*4] 6988 00004F6C F7EA imul edx 6989 00004F6E 01D3 add ebx, edx 6990 00004F70 8B14B5[F89E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] 6991 00004F77 8B04AD[B0F00400] mov eax, [(mp3_synth_win+100h)+ebp*4] 6992 00004F7E F7EA imul edx 6993 00004F80 01D3 add ebx, edx 6994 00004F82 8B14B5[F89F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 6995 00004F89 8B04AD[B0F10400] mov eax, [(mp3_synth_win+200h)+ebp*4] 6996 00004F90 F7EA imul edx 6997 00004F92 01D3 add ebx, edx 6998 00004F94 8B14B5[F8A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 6999 00004F9B 8B04AD[B0F20400] mov eax, [(mp3_synth_win+300h)+ebp*4] 7000 00004FA2 F7EA imul edx 7001 00004FA4 01D3 add ebx, edx 7002 00004FA6 8B14B5[F8A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] 7003 00004FAD 8B04AD[B0F30400] mov eax, [(mp3_synth_win+400h)+ebp*4] 7004 00004FB4 F7EA imul edx 7005 00004FB6 01D3 add ebx, edx 7006 00004FB8 8B14B5[F8A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 7007 00004FBF 8B04AD[B0F40400] mov eax, [(mp3_synth_win+500h)+ebp*4] 7008 00004FC6 F7EA imul edx 7009 00004FC8 01D3 add ebx, edx 7010 00004FCA 8B14B5[F8A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 7011 00004FD1 8B04AD[B0F50400] mov eax, [(mp3_synth_win+600h)+ebp*4] 7012 00004FD8 F7EA imul edx 7013 00004FDA 01D3 add ebx, edx 7014 00004FDC 8B14B5[F8A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 7015 00004FE3 8B04AD[B0F60400] mov eax, [(mp3_synth_win+700h)+ebp*4] 7016 00004FEA F7EA imul edx 7017 00004FEC 01D3 add ebx, edx 7018 00004FEE 8B14BD[F89D0000] mov edx, [mp3_synth_buf+edi*4] 7019 00004FF5 8B04AD[30F00400] mov eax, [(mp3_synth_win+80h)+ebp*4] 7020 00004FFC F7EA imul edx 7021 00004FFE 01D3 add ebx, edx 7022 00005000 8B14BD[F89E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 7023 00005007 8B04AD[30F10400] mov eax, [(mp3_synth_win+180h)+ebp*4] 7024 0000500E F7EA imul edx 7025 00005010 01D3 add ebx, edx 7026 00005012 8B14BD[F89F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] 7027 00005019 8B04AD[30F20400] mov eax, [(mp3_synth_win+280h)+ebp*4] 7028 00005020 F7EA imul edx 7029 00005022 01D3 add ebx, edx 7030 00005024 8B14BD[F8A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 7031 0000502B 8B04AD[30F30400] mov eax, [(mp3_synth_win+380h)+ebp*4] 7032 00005032 F7EA imul edx 7033 00005034 01D3 add ebx, edx 7034 00005036 8B14BD[F8A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 7035 0000503D 8B04AD[30F40400] mov eax, [(mp3_synth_win+480h)+ebp*4] 7036 00005044 F7EA imul edx 7037 00005046 01D3 add ebx, edx 7038 00005048 8B14BD[F8A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 7039 0000504F 8B04AD[30F50400] mov eax, [(mp3_synth_win+580h)+ebp*4] 7040 00005056 F7EA imul edx 7041 00005058 01D3 add ebx, edx 7042 0000505A 8B14BD[F8A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 7043 00005061 8B04AD[30F60400] mov eax, [(mp3_synth_win+680h)+ebp*4] 7044 00005068 F7EA imul edx 7045 0000506A 01D3 add ebx, edx 7046 0000506C 8B14BD[F8A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 7047 00005073 8B04AD[30F70400] mov eax, [(mp3_synth_win+780h)+ebp*4] 7048 0000507A F7EA imul edx 7049 0000507C 01D3 add ebx, edx 7050 0000507E 81FB00002000 cmp ebx, 200000h 7051 00005084 7328 jnb short .sat 7052 00005086 C1FB05 sar ebx, 5 7053 00005089 81EB00800000 sub ebx, 8000h 7054 7055 .sat_back: 7056 0000508F 668919 mov [ecx], bx 7057 00005092 030D[9CF40000] add ecx, [mp3_samples_dst_step] 7058 00005098 83C604 add esi, 4 7059 0000509B 83EF04 sub edi, 4 7060 0000509E 83C504 add ebp, 4 7061 000050A1 F7C51F000000 test ebp, 1Fh 7062 000050A7 0F85ACFEFFFF jnz .samples_lop 7063 000050AD C3 retn 7064 7065 .sat: 7066 000050AE C1FB1F sar ebx, 31 7067 000050B1 81F3FF7F0000 xor ebx, 7FFFh 7068 000050B7 EBD6 jmp short .sat_back 7069 7070 .append_copy_to_window: 7071 000050B9 8D3485[F89D0000] lea esi, [mp3_synth_buf+eax*4] 7072 000050C0 8DBE00080000 lea edi, [esi+2048] 7073 000050C6 B912000000 mov ecx, 18 7074 000050CB F3A5 rep movsd 7075 000050CD E966FEFFFF jmp .append_copy_to_window_back 7076 7077 7078 ; =============== S U B R O U T I N E ======================================= 7079 7080 7081 synth_8bit_shift_0_slow: 7082 000050D2 F605[54760000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 1,0,0 7083 000050D9 740E jz short .no_rdtsc_supported 7084 000050DB 0F31 rdtsc 7085 000050DD 2905[CC770000] sub [rdtsc_synth_dct], eax 7086 000050E3 1915[D0770000] sbb [rdtsc_synth_dct+4], edx 7087 7088 .no_rdtsc_supported: 7089 000050E9 BE[00BE0000] mov esi, mp3_sb_samples 7090 000050EE 8B3D[94F40000] mov edi, [mp3_samples_dst] 7091 000050F4 C705[A0F40000]0000- mov dword [mp3_curr_channel], 0 7091 000050FC 0000 7092 7093 .synth_channel_lop: 7094 000050FE 56 push esi 7095 000050FF 57 push edi 7096 00005100 893D[E09D0000] mov [mp3_curr_syn_dst], edi 7097 00005106 C705[A8F40000]0000- mov dword [mp3_curr_frame], 0 7097 0000510E 0000 7098 7099 .synth_frame_lop: 7100 00005110 56 push esi 7101 00005111 F605[54760000]10 test byte [cpuid_flags], 10h 7102 00005118 740E jz short .no_rdtsc_supported@ 7103 0000511A 0F31 rdtsc 7104 0000511C 2905[E4770000] sub [rdtsc_dct32], eax 7105 00005122 1915[E8770000] sbb [rdtsc_dct32+4], edx 7106 7107 .no_rdtsc_supported@: 7108 00005128 8B15[A0F40000] mov edx, [mp3_curr_channel] 7109 0000512E 8B0495[F8BD0000] mov eax, [mp3_synth_index+edx*4] 7110 00005135 832C95[F8BD0000]20 sub dword [mp3_synth_index+edx*4], 32 7111 0000513D C1E20A shl edx, 10 7112 00005140 25E0010000 and eax, 1E0h ; 1FFh-1Fh 7113 00005145 09D0 or eax, edx 7114 00005147 A3[DC9D0000] mov [mp3_curr_syn_index], eax 7115 0000514C 8B3D[DC9D0000] mov edi, [mp3_curr_syn_index] 7116 00005152 8D3CBD[F89D0000] lea edi, [mp3_synth_buf+edi*4] 7117 00005159 E894D4FFFF call mp3_dct32_shift_0 7118 0000515E F605[54760000]10 test byte [cpuid_flags], 10h 7119 00005165 740E jz short .no_rdtsc_supported@@ 7120 00005167 0F31 rdtsc 7121 00005169 0105[E4770000] add [rdtsc_dct32], eax 7122 0000516F 1115[E8770000] adc [rdtsc_dct32+4], edx 7123 7124 .no_rdtsc_supported@@: 7125 00005175 F605[54760000]10 test byte [cpuid_flags], 10h 7126 0000517C 740E jz short .no_rdtsc_supported@@@ 7127 0000517E 0F31 rdtsc 7128 00005180 2905[FC770000] sub [rdtsc_synth], eax 7129 00005186 1915[00780000] sbb [rdtsc_synth+4], edx 7130 7131 .no_rdtsc_supported@@@: 7132 0000518C E888000000 call mp3_synth_filter_this_8bit_shift_0_slow ; 7133 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 7134 00005191 F605[54760000]10 test byte [cpuid_flags], 10h 7135 00005198 740E jz short .no_rdtsc_supported@@@@ 7136 0000519A 0F31 rdtsc 7137 0000519C 0105[FC770000] add [rdtsc_synth], eax 7138 000051A2 1115[00780000] adc [rdtsc_synth+4], edx 7139 7140 .no_rdtsc_supported@@@@: 7141 000051A8 5E pop esi 7142 000051A9 A1[9CF40000] mov eax, [mp3_samples_dst_step] 7143 000051AE C1E005 shl eax, 5 7144 000051B1 8A0D[4F760000] mov cl, [option_rate_shift] 7145 000051B7 D3E8 shr eax, cl 7146 000051B9 0105[E09D0000] add [mp3_curr_syn_dst], eax 7147 000051BF 81C680000000 add esi, 128 ; SBLIMIT*4 7148 000051C5 FF05[A8F40000] inc dword [mp3_curr_frame] 7149 000051CB A1[A8F40000] mov eax, [mp3_curr_frame] 7150 000051D0 3B05[E49D0000] cmp eax, [mp3_nb_frames] 7151 000051D6 0F8234FFFFFF jb .synth_frame_lop 7152 000051DC 5F pop edi 7153 000051DD 5E pop esi 7154 000051DE 033D[D89D0000] add edi, [mp3_bytes_per_sample] 7155 000051E4 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 7156 000051EA FF05[A0F40000] inc dword [mp3_curr_channel] 7157 000051F0 A1[A0F40000] mov eax, [mp3_curr_channel] 7158 000051F5 3B05[D09D0000] cmp eax, [mp3_output_num_channels] 7159 000051FB 0F82FDFEFFFF jb .synth_channel_lop 7160 00005201 F605[54760000]10 test byte [cpuid_flags], 10h 7161 00005208 740E jz short .no_rdtsc_supported@@@@@ 7162 0000520A 0F31 rdtsc 7163 0000520C 0105[CC770000] add [rdtsc_synth_dct], eax 7164 00005212 1115[D0770000] adc [rdtsc_synth_dct+4], edx 7165 7166 .no_rdtsc_supported@@@@@: 7167 00005218 C3 retn 7168 7169 7170 ; =============== S U B R O U T I N E ======================================= 7171 7172 7173 mp3_synth_filter_this_8bit_shift_0_slow: 7174 00005219 A1[DC9D0000] mov eax, [mp3_curr_syn_index] 7175 0000521E A9E0010000 test eax, 1E0h 7176 00005223 0F8471010000 jz .append_copy_to_window 7177 00005229 90 nop 7178 7179 .append_copy_to_window_back: 7180 0000522A 89C5 mov ebp, eax 7181 0000522C 81E5C0010000 and ebp, 1C0h 7182 00005232 2520040000 and eax, 420h 7183 00005237 8D7010 lea esi, [eax+10h] 7184 0000523A 8D7830 lea edi, [eax+30h] 7185 0000523D F7DD neg ebp 7186 0000523F 81E5C0010000 and ebp, 1C0h 7187 00005245 8B0D[E09D0000] mov ecx, [mp3_curr_syn_dst] 7188 7189 .samples_lop: 7190 0000524B BB00101000 mov ebx, 101000h 7191 00005250 8B14B5[F89D0000] mov edx, [mp3_synth_buf+esi*4] 7192 00005257 8B04AD[B0EF0400] mov eax, [mp3_synth_win+ebp*4] 7193 0000525E F7EA imul edx 7194 00005260 01D3 add ebx, edx 7195 00005262 8B14B5[F89E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] 7196 00005269 8B04AD[B0F00400] mov eax, [(mp3_synth_win+100h)+ebp*4] 7197 00005270 F7EA imul edx 7198 00005272 01D3 add ebx, edx 7199 00005274 8B14B5[F89F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 7200 0000527B 8B04AD[B0F10400] mov eax, [(mp3_synth_win+200h)+ebp*4] 7201 00005282 F7EA imul edx 7202 00005284 01D3 add ebx, edx 7203 00005286 8B14B5[F8A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 7204 0000528D 8B04AD[B0F20400] mov eax, [(mp3_synth_win+300h)+ebp*4] 7205 00005294 F7EA imul edx 7206 00005296 01D3 add ebx, edx 7207 00005298 8B14B5[F8A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] 7208 0000529F 8B04AD[B0F30400] mov eax, [(mp3_synth_win+400h)+ebp*4] 7209 000052A6 F7EA imul edx 7210 000052A8 01D3 add ebx, edx 7211 000052AA 8B14B5[F8A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 7212 000052B1 8B04AD[B0F40400] mov eax, [(mp3_synth_win+500h)+ebp*4] 7213 000052B8 F7EA imul edx 7214 000052BA 01D3 add ebx, edx 7215 000052BC 8B14B5[F8A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 7216 000052C3 8B04AD[B0F50400] mov eax, [(mp3_synth_win+600h)+ebp*4] 7217 000052CA F7EA imul edx 7218 000052CC 01D3 add ebx, edx 7219 000052CE 8B14B5[F8A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 7220 000052D5 8B04AD[B0F60400] mov eax, [(mp3_synth_win+700h)+ebp*4] 7221 000052DC F7EA imul edx 7222 000052DE 01D3 add ebx, edx 7223 000052E0 8B14BD[F89D0000] mov edx, [mp3_synth_buf+edi*4] 7224 000052E7 8B04AD[30F00400] mov eax, [(mp3_synth_win+80h)+ebp*4] 7225 000052EE F7EA imul edx 7226 000052F0 01D3 add ebx, edx 7227 000052F2 8B14BD[F89E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 7228 000052F9 8B04AD[30F10400] mov eax, [(mp3_synth_win+180h)+ebp*4] 7229 00005300 F7EA imul edx 7230 00005302 01D3 add ebx, edx 7231 00005304 8B14BD[F89F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] 7232 0000530B 8B04AD[30F20400] mov eax, [(mp3_synth_win+280h)+ebp*4] 7233 00005312 F7EA imul edx 7234 00005314 01D3 add ebx, edx 7235 00005316 8B14BD[F8A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 7236 0000531D 8B04AD[30F30400] mov eax, [(mp3_synth_win+380h)+ebp*4] 7237 00005324 F7EA imul edx 7238 00005326 01D3 add ebx, edx 7239 00005328 8B14BD[F8A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 7240 0000532F 8B04AD[30F40400] mov eax, [(mp3_synth_win+480h)+ebp*4] 7241 00005336 F7EA imul edx 7242 00005338 01D3 add ebx, edx 7243 0000533A 8B14BD[F8A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 7244 00005341 8B04AD[30F50400] mov eax, [(mp3_synth_win+580h)+ebp*4] 7245 00005348 F7EA imul edx 7246 0000534A 01D3 add ebx, edx 7247 0000534C 8B14BD[F8A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 7248 00005353 8B04AD[30F60400] mov eax, [(mp3_synth_win+680h)+ebp*4] 7249 0000535A F7EA imul edx 7250 0000535C 01D3 add ebx, edx 7251 0000535E 8B14BD[F8A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 7252 00005365 8B04AD[30F70400] mov eax, [(mp3_synth_win+780h)+ebp*4] 7253 0000536C F7EA imul edx 7254 0000536E 01D3 add ebx, edx 7255 00005370 81FB00002000 cmp ebx, 200000h 7256 00005376 731B jnb short .sat 7257 00005378 C1FB0D sar ebx, 13 7258 7259 .sat_back: 7260 0000537B 8819 mov [ecx], bl 7261 0000537D 030D[9CF40000] add ecx, [mp3_samples_dst_step] 7262 00005383 46 inc esi 7263 00005384 4F dec edi 7264 00005385 45 inc ebp 7265 00005386 F7C51F000000 test ebp, 1Fh 7266 0000538C 0F85B9FEFFFF jnz .samples_lop 7267 00005392 C3 retn 7268 7269 .sat: 7270 00005393 C1FB1F sar ebx, 31 7271 00005396 F7D3 not ebx 7272 00005398 EBE1 jmp short .sat_back 7273 7274 .append_copy_to_window: 7275 0000539A 8D3485[F89D0000] lea esi, [mp3_synth_buf+eax*4] 7276 000053A1 8DBE00080000 lea edi, [esi+2048] 7277 000053A7 B912000000 mov ecx, 18 7278 000053AC F3A5 rep movsd 7279 000053AE E977FEFFFF jmp .append_copy_to_window_back 7280 7281 7282 ; =============== S U B R O U T I N E ======================================= 7283 7284 7285 synth_8bit_shift_1_slow: 7286 000053B3 F605[54760000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 1,1,0 7287 ; force_8bit, rate_shift=1, force_fast=0 7288 000053BA 740E jz short .no_rdtsc_supported 7289 000053BC 0F31 rdtsc 7290 000053BE 2905[CC770000] sub [rdtsc_synth_dct], eax 7291 000053C4 1915[D0770000] sbb [rdtsc_synth_dct+4], edx 7292 7293 .no_rdtsc_supported: 7294 000053CA BE[00BE0000] mov esi, mp3_sb_samples 7295 000053CF 8B3D[94F40000] mov edi, [mp3_samples_dst] 7296 000053D5 C705[A0F40000]0000- mov dword [mp3_curr_channel], 0 7296 000053DD 0000 7297 7298 .synth_channel_lop: 7299 000053DF 56 push esi 7300 000053E0 57 push edi 7301 000053E1 893D[E09D0000] mov [mp3_curr_syn_dst], edi 7302 000053E7 C705[A8F40000]0000- mov dword [mp3_curr_frame], 0 7302 000053EF 0000 7303 7304 .synth_frame_lop: 7305 000053F1 56 push esi 7306 000053F2 F605[54760000]10 test byte [cpuid_flags], 10h 7307 000053F9 740E jz short .no_rdtsc_supported@ 7308 000053FB 0F31 rdtsc 7309 000053FD 2905[E4770000] sub [rdtsc_dct32], eax 7310 00005403 1915[E8770000] sbb [rdtsc_dct32+4], edx 7311 7312 .no_rdtsc_supported@: 7313 00005409 8B15[A0F40000] mov edx, [mp3_curr_channel] 7314 0000540F 8B0495[F8BD0000] mov eax, [mp3_synth_index+edx*4] 7315 00005416 832C95[F8BD0000]20 sub dword [mp3_synth_index+edx*4], 32 7316 0000541E C1E20A shl edx, 10 7317 00005421 25E0010000 and eax, 1E0h ; 1FFh-1Fh 7318 00005426 09D0 or eax, edx 7319 00005428 A3[DC9D0000] mov [mp3_curr_syn_index], eax 7320 0000542D 8B3D[DC9D0000] mov edi, [mp3_curr_syn_index] 7321 00005433 8D3CBD[F89D0000] lea edi, [mp3_synth_buf+edi*4] 7322 0000543A E893DAFFFF call mp3_dct32_shift_1 ; mp3_dct32_shift_&rate_shift ; rate_shift = 1 7323 0000543F F605[54760000]10 test byte [cpuid_flags], 10h 7324 00005446 740E jz short .no_rdtsc_supported@@ 7325 00005448 0F31 rdtsc 7326 0000544A 0105[E4770000] add [rdtsc_dct32], eax 7327 00005450 1115[E8770000] adc [rdtsc_dct32+4], edx 7328 7329 .no_rdtsc_supported@@: 7330 00005456 F605[54760000]10 test byte [cpuid_flags], 10h 7331 0000545D 740E jz short .no_rdtsc_supported@@@ 7332 0000545F 0F31 rdtsc 7333 00005461 2905[FC770000] sub [rdtsc_synth], eax 7334 00005467 1915[00780000] sbb [rdtsc_synth+4], edx 7335 7336 .no_rdtsc_supported@@@: 7337 0000546D E888000000 call mp3_synth_filter_this_8bit_shift_1_slow ; 7338 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 7339 00005472 F605[54760000]10 test byte [cpuid_flags], 10h 7340 00005479 740E jz short .no_rdtsc_supported@@@@ 7341 0000547B 0F31 rdtsc 7342 0000547D 0105[FC770000] add [rdtsc_synth], eax 7343 00005483 1115[00780000] adc [rdtsc_synth+4], edx 7344 7345 .no_rdtsc_supported@@@@: 7346 00005489 5E pop esi 7347 0000548A A1[9CF40000] mov eax, [mp3_samples_dst_step] 7348 0000548F C1E005 shl eax, 5 ; mul32 7349 00005492 8A0D[4F760000] mov cl, [option_rate_shift] 7350 00005498 D3E8 shr eax, cl 7351 0000549A 0105[E09D0000] add [mp3_curr_syn_dst], eax 7352 000054A0 81C680000000 add esi, 128 ; SBLIMIT*4 7353 000054A6 FF05[A8F40000] inc dword [mp3_curr_frame] 7354 000054AC A1[A8F40000] mov eax, [mp3_curr_frame] 7355 000054B1 3B05[E49D0000] cmp eax, [mp3_nb_frames] 7356 000054B7 0F8234FFFFFF jb .synth_frame_lop 7357 000054BD 5F pop edi 7358 000054BE 5E pop esi 7359 000054BF 033D[D89D0000] add edi, [mp3_bytes_per_sample] 7360 000054C5 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 7361 000054CB FF05[A0F40000] inc dword [mp3_curr_channel] 7362 000054D1 A1[A0F40000] mov eax, [mp3_curr_channel] 7363 000054D6 3B05[D09D0000] cmp eax, [mp3_output_num_channels] 7364 000054DC 0F82FDFEFFFF jb .synth_channel_lop 7365 000054E2 F605[54760000]10 test byte [cpuid_flags], 10h 7366 000054E9 740E jz short .no_rdtsc_supported@@@@@ 7367 000054EB 0F31 rdtsc 7368 000054ED 0105[CC770000] add [rdtsc_synth_dct], eax 7369 000054F3 1115[D0770000] adc [rdtsc_synth_dct+4], edx 7370 7371 .no_rdtsc_supported@@@@@: 7372 000054F9 C3 retn 7373 7374 7375 ; =============== S U B R O U T I N E ======================================= 7376 7377 7378 mp3_synth_filter_this_8bit_shift_1_slow: 7379 000054FA A1[DC9D0000] mov eax, [mp3_curr_syn_index] ; IF LONG_WINDOW 7380 000054FF A9E0010000 test eax, 1E0h ; 1FFh-1Fh 7381 00005504 0F8477010000 jz .append_copy_to_window 7382 0000550A 90 nop 7383 7384 .append_copy_to_window_back: 7385 0000550B 89C5 mov ebp, eax 7386 0000550D 81E5C0010000 and ebp, 1C0h ; 1FFh-1Fh-20h 7387 00005513 2520040000 and eax, 420h ; 20h+(1 shl 10) 7388 00005518 8D7010 lea esi, [eax+10h] 7389 0000551B 8D7830 lea edi, [eax+30h] 7390 0000551E F7DD neg ebp 7391 00005520 81E5C0010000 and ebp, 1C0h 7392 00005526 8B0D[E09D0000] mov ecx, [mp3_curr_syn_dst] 7393 7394 .samples_lop: 7395 0000552C BB00101000 mov ebx, 101000h ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 7396 ; @@out_shift equ (OUT_SHIFT_slow+(8*force_8bit)) 7397 ; OUT_SHIFT_slow = 5 ; @@out_shift = 13 7398 00005531 8B14B5[F89D0000] mov edx, [mp3_synth_buf+esi*4] ; @@SUM8 @@sum,@@win1,0,@@syn1 7399 ; @@SUM8 macro sum,win,ww,syn 7400 ; IRP nn,0,1,2,3,4,5,6,7 7401 00005538 8B04AD[B0EF0400] mov eax, [mp3_synth_win+ebp*4] 7402 0000553F F7EA imul edx 7403 00005541 01D3 add ebx, edx 7404 00005543 8B14B5[F89E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] ; @@syn1 equ esi 7405 0000554A 8B04AD[B0F00400] mov eax, [(mp3_synth_win+100h)+ebp*4] ; @@win1 equ ebp 7406 00005551 F7EA imul edx 7407 00005553 01D3 add ebx, edx 7408 00005555 8B14B5[F89F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 7409 0000555C 8B04AD[B0F10400] mov eax, [(mp3_synth_win+200h)+ebp*4] 7410 00005563 F7EA imul edx 7411 00005565 01D3 add ebx, edx 7412 00005567 8B14B5[F8A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 7413 0000556E 8B04AD[B0F20400] mov eax, [(mp3_synth_win+300h)+ebp*4] 7414 00005575 F7EA imul edx 7415 00005577 01D3 add ebx, edx 7416 00005579 8B14B5[F8A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] 7417 00005580 8B04AD[B0F30400] mov eax, [(mp3_synth_win+400h)+ebp*4] 7418 00005587 F7EA imul edx 7419 00005589 01D3 add ebx, edx 7420 0000558B 8B14B5[F8A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 7421 00005592 8B04AD[B0F40400] mov eax, [(mp3_synth_win+500h)+ebp*4] 7422 00005599 F7EA imul edx 7423 0000559B 01D3 add ebx, edx 7424 0000559D 8B14B5[F8A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 7425 000055A4 8B04AD[B0F50400] mov eax, [(mp3_synth_win+600h)+ebp*4] 7426 000055AB F7EA imul edx 7427 000055AD 01D3 add ebx, edx 7428 000055AF 8B14B5[F8A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 7429 000055B6 8B04AD[B0F60400] mov eax, [(mp3_synth_win+700h)+ebp*4] 7430 000055BD F7EA imul edx 7431 000055BF 01D3 add ebx, edx 7432 000055C1 8B14BD[F89D0000] mov edx, [mp3_synth_buf+edi*4] 7433 000055C8 8B04AD[30F00400] mov eax, [(mp3_synth_win+80h)+ebp*4] 7434 000055CF F7EA imul edx 7435 000055D1 01D3 add ebx, edx 7436 000055D3 8B14BD[F89E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] ; @@SUM8 @@sum,@@win1,32,@@syn2 7437 ; @@syn2 equ edi 7438 ; @@win1 equ ebp 7439 000055DA 8B04AD[30F10400] mov eax, [(mp3_synth_win+180h)+ebp*4] 7440 000055E1 F7EA imul edx 7441 000055E3 01D3 add ebx, edx 7442 000055E5 8B14BD[F89F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] 7443 000055EC 8B04AD[30F20400] mov eax, [(mp3_synth_win+280h)+ebp*4] 7444 000055F3 F7EA imul edx 7445 000055F5 01D3 add ebx, edx 7446 000055F7 8B14BD[F8A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 7447 000055FE 8B04AD[30F30400] mov eax, [(mp3_synth_win+380h)+ebp*4] 7448 00005605 F7EA imul edx 7449 00005607 01D3 add ebx, edx 7450 00005609 8B14BD[F8A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 7451 00005610 8B04AD[30F40400] mov eax, [(mp3_synth_win+480h)+ebp*4] 7452 00005617 F7EA imul edx 7453 00005619 01D3 add ebx, edx 7454 0000561B 8B14BD[F8A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 7455 00005622 8B04AD[30F50400] mov eax, [(mp3_synth_win+580h)+ebp*4] 7456 00005629 F7EA imul edx 7457 0000562B 01D3 add ebx, edx 7458 0000562D 8B14BD[F8A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 7459 00005634 8B04AD[30F60400] mov eax, [(mp3_synth_win+680h)+ebp*4] 7460 0000563B F7EA imul edx 7461 0000563D 01D3 add ebx, edx 7462 0000563F 8B14BD[F8A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 7463 00005646 8B04AD[30F70400] mov eax, [(mp3_synth_win+780h)+ebp*4] 7464 0000564D F7EA imul edx 7465 0000564F 01D3 add ebx, edx 7466 00005651 81FB00002000 cmp ebx, 200000h ; cmp @@sum,100h SHL (@@out_shift) 7467 00005657 7321 jnb short .sat 7468 00005659 C1FB0D sar ebx, 13 ; sar @@sum,(@@out_shift) 7469 7470 .sat_back: 7471 0000565C 8819 mov [ecx], bl 7472 0000565E 030D[9CF40000] add ecx, [mp3_samples_dst_step] 7473 00005664 83C602 add esi, 2 7474 00005667 83EF02 sub edi, 2 7475 0000566A 83C502 add ebp, 2 7476 0000566D F7C51F000000 test ebp, 1Fh 7477 00005673 0F85B3FEFFFF jnz .samples_lop 7478 00005679 C3 retn 7479 7480 .sat: 7481 0000567A C1FB1F sar ebx, 31 ; sar @@sum,31 ; FFFFFFFFh,00000000h 7482 0000567D F7D3 not ebx 7483 0000567F EBDB jmp short .sat_back 7484 7485 .append_copy_to_window: 7486 00005681 8D3485[F89D0000] lea esi, [mp3_synth_buf+eax*4] 7487 00005688 8DBE00080000 lea edi, [esi+2048] 7488 0000568E B912000000 mov ecx, 18 7489 00005693 F3A5 rep movsd 7490 00005695 E971FEFFFF jmp .append_copy_to_window_back 7491 7492 7493 ; =============== S U B R O U T I N E ======================================= 7494 7495 7496 synth_8bit_shift_2_slow: 7497 0000569A F605[54760000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 1,2,0 ; 8bit, quarter rate 7498 ; force_8bit, rate_shift=2, force_fast=0 7499 000056A1 740E jz short .no_rdtsc_supported ; timelog_start rdtsc_synth_dct 7500 000056A3 0F31 rdtsc 7501 000056A5 2905[CC770000] sub [rdtsc_synth_dct], eax 7502 000056AB 1915[D0770000] sbb [rdtsc_synth_dct+4], edx 7503 7504 .no_rdtsc_supported: 7505 000056B1 BE[00BE0000] mov esi, mp3_sb_samples 7506 000056B6 8B3D[94F40000] mov edi, [mp3_samples_dst] 7507 000056BC C705[A0F40000]0000- mov dword [mp3_curr_channel], 0 7507 000056C4 0000 7508 7509 .synth_channel_lop: 7510 000056C6 56 push esi 7511 000056C7 57 push edi 7512 000056C8 893D[E09D0000] mov [mp3_curr_syn_dst], edi 7513 000056CE C705[A8F40000]0000- mov dword [mp3_curr_frame], 0 7513 000056D6 0000 7514 7515 .synth_frame_lop: 7516 000056D8 56 push esi ; sb_samples[ch][i] 7517 000056D9 F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_dct32 7518 000056E0 740E jz short .no_rdtsc_supported@ 7519 000056E2 0F31 rdtsc 7520 000056E4 2905[E4770000] sub [rdtsc_dct32], eax 7521 000056EA 1915[E8770000] sbb [rdtsc_dct32+4], edx 7522 7523 .no_rdtsc_supported@: 7524 000056F0 8B15[A0F40000] mov edx, [mp3_curr_channel] 7525 000056F6 8B0495[F8BD0000] mov eax, [mp3_synth_index+edx*4] 7526 000056FD 832C95[F8BD0000]20 sub dword [mp3_synth_index+edx*4], 32 7527 00005705 C1E20A shl edx, 10 ; channel*1024 7528 00005708 25E0010000 and eax, 1E0h ; 1FFh-1Fh ; index(0..511), align 32 7529 0000570D 09D0 or eax, edx 7530 0000570F A3[DC9D0000] mov [mp3_curr_syn_index], eax 7531 00005714 8B3D[DC9D0000] mov edi, [mp3_curr_syn_index] 7532 0000571A 8D3CBD[F89D0000] lea edi, [mp3_synth_buf+edi*4] ; IF SYNTH32 7533 00005721 E89CDBFFFF call mp3_dct32_shift_2 ; mp3_dct32_shift_&rate_shift ; rate_shift=2 7534 00005726 F605[54760000]10 test byte [cpuid_flags], 10h 7535 0000572D 740E jz short .no_rdtsc_supported@@ ; timelog_end rdtsc_dct32 7536 0000572F 0F31 rdtsc 7537 00005731 0105[E4770000] add [rdtsc_dct32], eax 7538 00005737 1115[E8770000] adc [rdtsc_dct32+4], edx 7539 7540 .no_rdtsc_supported@@: 7541 0000573D F605[54760000]10 test byte [cpuid_flags], 10h 7542 00005744 740E jz short .no_rdtsc_supported@@@ ; timelog_start rdtsc_synth 7543 00005746 0F31 rdtsc 7544 00005748 2905[FC770000] sub [rdtsc_synth], eax 7545 0000574E 1915[00780000] sbb [rdtsc_synth+4], edx 7546 7547 .no_rdtsc_supported@@@: 7548 00005754 E888000000 call mp3_synth_filter_this_8bit_shift_2_slow ; 7549 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 7550 00005759 F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_synth 7551 00005760 740E jz short .no_rdtsc_supported@@@@ 7552 00005762 0F31 rdtsc 7553 00005764 0105[FC770000] add [rdtsc_synth], eax 7554 0000576A 1115[00780000] adc [rdtsc_synth+4], edx 7555 7556 .no_rdtsc_supported@@@@: 7557 00005770 5E pop esi ; src 7558 00005771 A1[9CF40000] mov eax, [mp3_samples_dst_step] 7559 00005776 C1E005 shl eax, 5 ; mul32 7560 00005779 8A0D[4F760000] mov cl, [option_rate_shift] ; IF with_rate_shift 7561 0000577F D3E8 shr eax, cl 7562 00005781 0105[E09D0000] add [mp3_curr_syn_dst], eax 7563 00005787 81C680000000 add esi, 128 ; SBLIMIT*4 ; src+32*4 7564 0000578D FF05[A8F40000] inc dword [mp3_curr_frame] 7565 00005793 A1[A8F40000] mov eax, [mp3_curr_frame] 7566 00005798 3B05[E49D0000] cmp eax, [mp3_nb_frames] 7567 0000579E 0F8234FFFFFF jb .synth_frame_lop 7568 000057A4 5F pop edi 7569 000057A5 5E pop esi 7570 000057A6 033D[D89D0000] add edi, [mp3_bytes_per_sample] 7571 000057AC 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 ; src 7572 000057B2 FF05[A0F40000] inc dword [mp3_curr_channel] 7573 000057B8 A1[A0F40000] mov eax, [mp3_curr_channel] 7574 000057BD 3B05[D09D0000] cmp eax, [mp3_output_num_channels] 7575 000057C3 0F82FDFEFFFF jb .synth_channel_lop 7576 000057C9 F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_synth_dct 7577 000057D0 740E jz short .no_rdtsc_supported@@@@@ 7578 000057D2 0F31 rdtsc 7579 000057D4 0105[CC770000] add [rdtsc_synth_dct], eax 7580 000057DA 1115[D0770000] adc [rdtsc_synth_dct+4], edx 7581 7582 .no_rdtsc_supported@@@@@: 7583 000057E0 C3 retn 7584 7585 ; =============== S U B R O U T I N E ======================================= 7586 7587 7588 mp3_synth_filter_this_8bit_shift_2_slow: 7589 000057E1 A1[DC9D0000] mov eax, [mp3_curr_syn_index] 7590 000057E6 A9E0010000 test eax, 1E0h ; 1FFh-1Fh ; offset 7591 000057EB 0F8477010000 jz .append_copy_to_window 7592 000057F1 90 nop 7593 7594 .append_copy_to_window_back: 7595 000057F2 89C5 mov ebp, eax ; @@win1 7596 000057F4 81E5C0010000 and ebp, 1C0h ; 1FFh-1Fh-20h 7597 000057FA 2520040000 and eax, 420h ; 20h+(1 shl 10) ; bit5 and channel 7598 000057FF 8D7010 lea esi, [eax+10h] ; @@syn1 7599 00005802 8D7830 lea edi, [eax+30h] ; @@syn2 7600 00005805 F7DD neg ebp 7601 00005807 81E5C0010000 and ebp, 1C0h ; 1FFh-1Fh-20h 7602 0000580D 8B0D[E09D0000] mov ecx, [mp3_curr_syn_dst] ; @@dst 7603 7604 .samples_lop: 7605 00005813 BB00101000 mov ebx, 101000h ; mov @@sum,(80h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 7606 ; @@out_shift equ (OUT_SHIFT_slow+(8*force_8bit)) 7607 ; @@out_shift = 13 ; OUT_SHIFT_slow = 5 7608 00005818 8B14B5[F89D0000] mov edx, [mp3_synth_buf+esi*4] ; @@SUM8 @@sum,@@win1,0,@@syn1 7609 ; @@SUM8 macro sum,win,ww, syn 7610 ; IRP nn,0,1,2,3,4,5,6,7 7611 ; [mp3_synth_buf+syn*4+(nn*64*4)] 7612 0000581F 8B04AD[B0EF0400] mov eax, [mp3_synth_win+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] 7613 00005826 F7EA imul edx ; 64bit = 32bit * 32bit 7614 00005828 01D3 add ebx, edx ; add sum,edx ; sum from MSW of result 7615 0000582A 8B14B5[F89E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] ; 7616 ; [mp3_synth_buf+syn*4+(nn*64*4)] ; nn=1 7617 00005831 8B04AD[B0F00400] mov eax, [(mp3_synth_win+100h)+ebp*4] ; 7618 ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] ; nn=1 7619 00005838 F7EA imul edx 7620 0000583A 01D3 add ebx, edx 7621 0000583C 8B14B5[F89F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 7622 00005843 8B04AD[B0F10400] mov eax, [(mp3_synth_win+200h)+ebp*4] 7623 0000584A F7EA imul edx 7624 0000584C 01D3 add ebx, edx 7625 0000584E 8B14B5[F8A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 7626 00005855 8B04AD[B0F20400] mov eax, [(mp3_synth_win+300h)+ebp*4] 7627 0000585C F7EA imul edx 7628 0000585E 01D3 add ebx, edx 7629 00005860 8B14B5[F8A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] ; 7630 ; [mp3_synth_buf+syn*4+(nn*64*4)] ; nn=4 7631 00005867 8B04AD[B0F30400] mov eax, [(mp3_synth_win+400h)+ebp*4] ; 7632 ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] ; nn=4 7633 0000586E F7EA imul edx 7634 00005870 01D3 add ebx, edx 7635 00005872 8B14B5[F8A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 7636 00005879 8B04AD[B0F40400] mov eax, [(mp3_synth_win+500h)+ebp*4] 7637 00005880 F7EA imul edx 7638 00005882 01D3 add ebx, edx 7639 00005884 8B14B5[F8A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 7640 0000588B 8B04AD[B0F50400] mov eax, [(mp3_synth_win+600h)+ebp*4] 7641 00005892 F7EA imul edx 7642 00005894 01D3 add ebx, edx 7643 00005896 8B14B5[F8A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 7644 0000589D 8B04AD[B0F60400] mov eax, [(mp3_synth_win+700h)+ebp*4] 7645 000058A4 F7EA imul edx 7646 000058A6 01D3 add ebx, edx 7647 000058A8 8B14BD[F89D0000] mov edx, [mp3_synth_buf+edi*4] ; @@SUM8 @@sum,@@win1,32,@@syn2 7648 000058AF 8B04AD[30F00400] mov eax, [(mp3_synth_win+80h)+ebp*4] 7649 000058B6 F7EA imul edx 7650 000058B8 01D3 add ebx, edx 7651 000058BA 8B14BD[F89E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 7652 000058C1 8B04AD[30F10400] mov eax, [(mp3_synth_win+180h)+ebp*4] 7653 000058C8 F7EA imul edx 7654 000058CA 01D3 add ebx, edx 7655 000058CC 8B14BD[F89F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] 7656 000058D3 8B04AD[30F20400] mov eax, [(mp3_synth_win+280h)+ebp*4] 7657 000058DA F7EA imul edx 7658 000058DC 01D3 add ebx, edx 7659 000058DE 8B14BD[F8A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 7660 000058E5 8B04AD[30F30400] mov eax, [(mp3_synth_win+380h)+ebp*4] 7661 000058EC F7EA imul edx 7662 000058EE 01D3 add ebx, edx 7663 000058F0 8B14BD[F8A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 7664 000058F7 8B04AD[30F40400] mov eax, [(mp3_synth_win+480h)+ebp*4] 7665 000058FE F7EA imul edx 7666 00005900 01D3 add ebx, edx 7667 00005902 8B14BD[F8A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 7668 00005909 8B04AD[30F50400] mov eax, [(mp3_synth_win+580h)+ebp*4] 7669 00005910 F7EA imul edx 7670 00005912 01D3 add ebx, edx 7671 00005914 8B14BD[F8A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 7672 0000591B 8B04AD[30F60400] mov eax, [(mp3_synth_win+680h)+ebp*4] 7673 00005922 F7EA imul edx 7674 00005924 01D3 add ebx, edx 7675 00005926 8B14BD[F8A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 7676 ; [mp3_synth_buf+syn*4+(nn*64*4)] ; nn=7 7677 0000592D 8B04AD[30F70400] mov eax, [(mp3_synth_win+780h)+ebp*4] 7678 ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] ; nn=7 7679 00005934 F7EA imul edx 7680 00005936 01D3 add ebx, edx 7681 00005938 81FB00002000 cmp ebx, 200000h ; cmp @@sum,100h SHL (@@out_shift) ; out_shift=13 7682 0000593E 7321 jnb short .sat 7683 00005940 C1FB0D sar ebx, 13 ; sar @@sum,(@@out_shift) 7684 7685 .sat_back: 7686 00005943 8819 mov [ecx], bl ; mov byte ptr [@@dst],@@sum_8bit 7687 00005945 030D[9CF40000] add ecx, [mp3_samples_dst_step] 7688 0000594B 83C604 add esi, 4 ; add @@syn1,1 shl rate_shift ; rate_shift=2 7689 0000594E 83EF04 sub edi, 4 ; add @@syn2,1 shl rate_shift 7690 00005951 83C504 add ebp, 4 ; add @@win1,1 shl rate_shift 7691 00005954 F7C51F000000 test ebp, 1Fh ; test @@win1,1Fh 7692 0000595A 0F85B3FEFFFF jnz .samples_lop 7693 00005960 C3 retn 7694 7695 .sat: 7696 00005961 C1FB1F sar ebx, 31 ; sar @@sum,31 ; FFFFFFFFh,00000000h 7697 00005964 F7D3 not ebx 7698 00005966 EBDB jmp short .sat_back 7699 7700 .append_copy_to_window: 7701 00005968 8D3485[F89D0000] lea esi, [mp3_synth_buf+eax*4] ; IF SYNTH32 7702 0000596F 8DBE00080000 lea edi, [esi+2048] ; [esi+512*4] 7703 00005975 B912000000 mov ecx, 18 ; (12h*4)/4 7704 0000597A F3A5 rep movsd 7705 0000597C E971FEFFFF jmp .append_copy_to_window_back 7706 7707 7708 ; =============== S U B R O U T I N E ======================================= 7709 7710 7711 mp3_any_init_synth_window: 7712 00005981 31D2 xor edx, edx ; index (0..100h) 7713 00005983 31C9 xor ecx, ecx ; delta.val 7714 00005985 898C12[B0EF0400] mov [mp3_synth_win+edx*2], ecx 7715 7716 .synth_lop: 7717 0000598C 0FBF9C12[A2780000] movsx ebx, word [mp3_synth_win_src+edx*2] 7718 00005994 01D9 add ecx, ebx 7719 00005996 89C8 mov eax, ecx 7720 00005998 803D[50760000]00 cmp byte [option_fast], 0 7721 0000599F 7403 jz short .not_fast 7722 000059A1 C1F805 sar eax, 5 7723 7724 .not_fast: 7725 000059A4 803D[50760000]00 cmp byte [option_fast], 0 7726 000059AB 7503 jnz short .not_slow 7727 000059AD C1E00E shl eax, 14 ; (WFRAC_BITS_slow-WFRAC_BITS_default) 7728 7729 .not_slow: 7730 000059B0 42 inc edx ; index (1..100h) 7731 000059B1 BB00020000 mov ebx, 200h 7732 000059B6 29D3 sub ebx, edx ; 1FFh..100h 7733 000059B8 89049D[B0EF0400] mov [mp3_synth_win+ebx*4], eax 7734 000059BF F7C23F000000 test edx, 3Fh 7735 000059C5 7402 jz short .synth_keep_sign 7736 000059C7 F7D8 neg eax 7737 7738 .synth_keep_sign: 7739 000059C9 890495[B0EF0400] mov [mp3_synth_win+edx*4], eax 7740 000059D0 81FA00010000 cmp edx, 100h 7741 000059D6 72B4 jb short .synth_lop 7742 000059D8 31D2 xor edx, edx 7743 7744 .synth_neg_lop: 7745 000059DA F7C230000000 test edx, 30h ; skip 0..0Fh (only negate 10h..3Fh) 7746 000059E0 7407 jz short .synth_neg_next 7747 000059E2 F71C95[B0EF0400] neg dword [mp3_synth_win+edx*4] 7748 7749 .synth_neg_next: 7750 000059E9 42 inc edx 7751 000059EA 81FA00020000 cmp edx, 200h 7752 000059F0 72E8 jb short .synth_neg_lop 7753 000059F2 31D2 xor edx, edx 7754 7755 .synth_swap_lop: 7756 000059F4 89D0 mov eax, edx 7757 000059F6 83E03F and eax, 3Fh 7758 000059F9 83E811 sub eax, 17 ; swap win [(17..31)] with win[(17..31)+32) 7759 000059FC 83F80E cmp eax, 14 ; 31-17 7760 000059FF 7715 ja short .synth_swap_next 7761 00005A01 8B0495[B0EF0400] mov eax, [mp3_synth_win+edx*4] 7762 00005A08 870495[30F00400] xchg eax, [(mp3_synth_win+80h)+edx*4] 7763 00005A0F 890495[B0EF0400] mov [mp3_synth_win+edx*4], eax 7764 7765 .synth_swap_next: 7766 00005A16 42 inc edx 7767 00005A17 81FA00020000 cmp edx, 200h 7768 00005A1D 72D5 jb short .synth_swap_lop 7769 00005A1F 31D2 xor edx, edx 7770 7771 .synth_zero_lop: 7772 00005A21 C70495[F0EF0400]00- mov dword [(mp3_synth_win+40h)+edx*4], 0 7772 00005A29 000000 7773 00005A2C 83C240 add edx, 40h 7774 00005A2F 81FA00020000 cmp edx, 200h 7775 00005A35 72EA jb short .synth_zero_lop 7776 00005A37 BE[B0EF0400] mov esi, mp3_synth_win 7777 00005A3C 8DBE00080000 lea edi, [esi+2048] ; [esi+512*4] 7778 00005A42 B900020000 mov ecx, 512 ; append another copy 7779 00005A47 F3A5 rep movsd 7780 00005A49 C3 retn 7781 7782 7783 ; =============== S U B R O U T I N E ======================================= 7784 7785 7786 mp3_init_post_collapse: 7787 00005A4A 803D[50760000]00 cmp byte [option_fast], 0 7788 00005A51 7411 jz short .not_fast 7789 00005A53 BE[B0EF0400] mov esi, mp3_synth_win 7790 00005A58 89F7 mov edi, esi 7791 00005A5A B900040000 mov ecx, 1024 ; 512*(1+LONG_WINDOW) 7792 7793 .collapse_lop: 7794 00005A5F AD lodsd ; collapse 32bit to 16bit 7795 ; (that's slightly faster due to better caching) 7796 00005A60 66AB stosw 7797 00005A62 E2FB loop .collapse_lop 7798 7799 .not_fast: 7800 00005A64 C3 retn 7801 7802 7803 ; =============== S U B R O U T I N E ======================================= 7804 7805 7806 mp3_any_init_band_indices: 7807 00005A65 BE[D4800000] mov esi, mp3_band_size_long 7808 00005A6A BF[C4D70100] mov edi, mp3_band_index_long 7809 00005A6F BB09000000 mov ebx, 9 7810 7811 .band_index_lop_i: 7812 00005A74 31C0 xor eax, eax 7813 00005A76 B916000000 mov ecx, 22 7814 7815 .band_index_lop_j: 7816 00005A7B 66AB stosw 7817 00005A7D 0FB616 movzx edx, byte [esi] 7818 00005A80 01D0 add eax, edx 7819 00005A82 46 inc esi 7820 00005A83 E2F6 loop .band_index_lop_j 7821 00005A85 83C10A add ecx, 10 7822 00005A88 F366AB rep stosw 7823 00005A8B 4B dec ebx 7824 00005A8C 75E6 jnz short .band_index_lop_i 7825 00005A8E C3 retn 7826 7827 7828 ; =============== S U B R O U T I N E ======================================= 7829 7830 7831 mp3_any_init_lsf_sf_expand: 7832 00005A8F BE[72780000] mov esi, mp3_lsf_sf_expand_init_table 7833 00005A94 BF[B0FF0400] mov edi, mp3_lsf_sf_expand_exploded_table 7834 00005A99 31D2 xor edx, edx ; curr.index 7835 00005A9B 31DB xor ebx, ebx ; curr.base 7836 7837 .lop: 7838 00005A9D 663B5606 cmp dx, [esi+6] ; nextbase 7839 00005AA1 7207 jb short .inrange 7840 00005AA3 668B5E06 mov bx, [esi+6] 7841 00005AA7 83C608 add esi, 8 ; next entry 7842 7843 .inrange: 7844 00005AAA 89D0 mov eax, edx 7845 00005AAC 29D8 sub eax, ebx 7846 00005AAE 8A0E mov cl, [esi] 7847 00005AB0 D3E8 shr eax, cl ; div2 7848 00005AB2 F67603 div byte [esi+3] ; mod3 ; [2]=slen[3] 7849 00005AB5 886703 mov [edi+3], ah 7850 00005AB8 B400 mov ah, 0 ; eax=div.result 7851 00005ABA F67602 div byte [esi+2] ; mod2 ; [2]=slen[2] 7852 00005ABD 886702 mov [edi+2], ah ; remainder 7853 00005AC0 B400 mov ah, 0 7854 00005AC2 F67601 div byte [esi+1] ; mod1 ; [1]=slen[1] 7855 00005AC5 668907 mov [edi], ax ; [0]=slen[0] 7856 00005AC8 668B4604 mov ax, [esi+4] ; [4]=tindex2 7857 00005ACC 66894704 mov [edi+4], ax ; [5]=force_preflag 7858 00005AD0 83C708 add edi, 8 7859 00005AD3 42 inc edx ; curr.index ; next 7860 00005AD4 81FA00040000 cmp edx, 1024 ; 512+512 7861 00005ADA 72C1 jb short .lop 7862 00005ADC C3 retn 7863 7864 7865 ; =============== S U B R O U T I N E ======================================= 7866 7867 7868 mp3_any_init_huff_tables: 7869 00005ADD BD[0C7B0000] mov ebp, huff_tree_list_data 7870 00005AE2 BE[8C850000] mov esi, huff_tree_list_numbits 7871 00005AE7 BA01000000 mov edx, 1 ; idx (table 01h..11h) 7872 7873 .huffman_table_lop: 7874 00005AEC 31C0 xor eax, eax 7875 00005AEE BF[DC290500] mov edi, mp3_huff_tmp_bits 7876 00005AF3 B940000000 mov ecx, 40h ; 100h/4 ; 100h x 8bit 7877 00005AF8 F3AB rep stosd 7878 00005AFA BF[DC2A0500] mov edi, mp3_huff_tmp_codes 7879 00005AFF B980000000 mov ecx, 80h ; 100h/2 ; 100h x 16bit 7880 00005B04 F3AB rep stosd 7881 00005B06 31DB xor ebx, ebx 7882 7883 .huff_entry_lop: 7884 00005B08 0FB67D00 movzx edi, byte [ebp+0] 7885 00005B0C 45 inc ebp ; dst=data 7886 00005B0D AC lodsb ; numbits 7887 00005B0E 8887[DC290500] mov [mp3_huff_tmp_bits+edi], al 7888 00005B14 B120 mov cl, 32 7889 00005B16 28C1 sub cl, al ; 32-numbits 7890 00005B18 D3EB shr ebx, cl 7891 00005B1A 66899C3F[DC2A0500] mov word [mp3_huff_tmp_codes+edi*2], bx 7892 00005B22 43 inc ebx ; next.code 7893 00005B23 D3E3 shl ebx, cl ; shift back to MSBs 7894 00005B25 75E1 jnz short .huff_entry_lop 7895 00005B27 60 pusha 7896 00005B28 B800010000 mov eax, 100h ; nb_codes 7897 00005B2D BB[DC290500] mov ebx, mp3_huff_tmp_bits ; bits 7898 00005B32 BE[DC2A0500] mov esi, mp3_huff_tmp_codes ; codes 7899 00005B37 E837020000 call mp3_build_huff_table_root ; make table 7900 00005B3C 61 popa 7901 00005B3D 42 inc edx ; idx 7902 00005B3E 83FA12 cmp edx, 12h 7903 00005B41 75A9 jnz short .huffman_table_lop ; next table 7904 00005B43 C3 retn 7905 7906 7907 ; =============== S U B R O U T I N E ======================================= 7908 7909 7910 mp3_integer_init_is_stereo_lsf: 7911 00005B44 31FF xor edi, edi 7912 7913 .lsf_lop: 7914 00005B46 89FE mov esi, edi 7915 00005B48 83E63F and esi, 3Fh 7916 00005B4B 46 inc esi 7917 00005B4C D1EE shr esi, 1 7918 00005B4E F7C740000000 test edi, 40h 7919 00005B54 7402 jz short .lsf_no_shift 7920 00005B56 D1E6 shl esi, 1 7921 7922 .lsf_no_shift: 7923 00005B58 BA00000040 mov edx, 40000000h ; aka mul 1.000 7924 00005B5D 83C604 add esi, 4 7925 00005B60 F7C780000000 test edi, 80h ; 2*40h 7926 00005B66 7408 jz short .no_ms_stereo 7927 00005B68 BA9A79825A mov edx, 5A82799Ah ; 2D413CCDh*2 ; aka mul 1.414 7928 00005B6D 83EE02 sub esi, 2 7929 7930 .no_ms_stereo: 7931 00005B70 89F1 mov ecx, esi 7932 00005B72 C1E902 shr ecx, 2 ; msbs 7933 00005B75 83E603 and esi, 3 ; lsbs 7934 00005B78 8B04B5[CC840000] mov eax, [mp3_is_table_lsf_src+esi*4] 7935 00005B7F D3E8 shr eax, cl 7936 00005B81 F7C701000000 test edi, 1 7937 00005B87 7501 jnz short .lsf_no_swap 7938 00005B89 92 xchg eax, edx 7939 7940 .lsf_no_swap: 7941 00005B8A 8904FD[B0E70400] mov [mp3_is_table_lsf+edi*8], eax 7942 00005B91 8914FD[B4E70400] mov [(mp3_is_table_lsf+4)+edi*8], edx 7943 00005B98 47 inc edi 7944 00005B99 81FF00010000 cmp edi, 100h 7945 00005B9F 72A5 jb short .lsf_lop 7946 00005BA1 C3 retn 7947 7948 7949 ; =============== S U B R O U T I N E ======================================= 7950 7951 7952 mp3_integer_init_mdct_windows: 7953 00005BA2 BF[30E30400] mov edi, mp3_mdct_win 7954 00005BA7 BE[54820000] mov esi, mp3_mdct_win_src 7955 00005BAC B990000000 mov ecx, 144 ; 36*4 7956 00005BB1 F3A5 rep movsd 7957 00005BB3 BE[30E30400] mov esi, mp3_mdct_win 7958 00005BB8 BF[70E50400] mov edi, (mp3_mdct_win+240h) 7959 00005BBD B948000000 mov ecx, 72 ; 4*36/2 ; that is, 4*36 entry pairs 7960 7961 .mdct_lop_dupe: 7962 00005BC2 A5 movsd ; copy normal, [4..7][even] = +[0..3][even 7963 00005BC3 AD lodsd 7964 00005BC4 F7D8 neg eax ; copy negated, [4..7][odd] = -[0..3][odd] 7965 00005BC6 AB stosd 7966 00005BC7 E2F9 loop .mdct_lop_dupe 7967 00005BC9 C3 retn 7968 7969 7970 ; =============== S U B R O U T I N E ======================================= 7971 7972 7973 mp3_integer_init_table_4_3: 7974 00005BCA 803D[50760000]00 cmp byte [option_fast], 0 7975 00005BD1 B048 mov al, 72 ; 100-6-VFRAC_BITS_slow 7976 00005BD3 7402 jz short .this_vfrac 7977 00005BD5 B04C mov al, 76 ; 100-6-VFRAC_BITS_fast 7978 7979 .this_vfrac: 7980 00005BD7 A2[04F40000] mov [mp3_curr_vfrac_bits], al 7981 00005BDC 31FF xor edi, edi 7982 7983 .table_4_3_lop: 7984 00005BDE 57 push edi ; for i=1 to TABLE_4_3_SIZE-1 7985 00005BDF 89F8 mov eax, edi 7986 00005BE1 C1E802 shr eax, 2 7987 00005BE4 F7E0 mul eax 7988 00005BE6 F7E0 mul eax 7989 00005BE8 31DB xor ebx, ebx 7990 00005BEA E8A2000000 call cbrt96 7991 00005BEF 020D[04F40000] add cl, [mp3_curr_vfrac_bits] 7992 00005BF5 5F pop edi 7993 7994 .inner_lop: 7995 00005BF6 89F8 mov eax, edi 7996 00005BF8 83E003 and eax, 3 7997 00005BFB 8B0485[DC840000] mov eax, [mp3_pow2_quarters+eax*4] 7998 00005C02 F7E3 mul ebx 7999 00005C04 88CD mov ch, cl 8000 00005C06 09D2 or edx, edx 8001 00005C08 7904 jns short .this 8002 00005C0A D1EA shr edx, 1 8003 00005C0C FECD dec ch 8004 8005 .this: 8006 00005C0E 8914BD[405A0200] mov [mp3_table_4_3_value+edi*4], edx 8007 00005C15 88AF[04DA0100] mov [mp3_table_4_3_exp+edi], ch 8008 00005C1B 47 inc edi 8009 00005C1C F7C703000000 test edi, 3 8010 00005C22 75D2 jnz short .inner_lop 8011 00005C24 81FF3C800000 cmp edi, 803Ch 8012 00005C2A 72B2 jb short .table_4_3_lop 8013 00005C2C C3 retn 8014 8015 8016 ; =============== S U B R O U T I N E ======================================= 8017 8018 8019 mp3_integer_init_exponent: 8020 00005C2D BF[30630400] mov edi, mp3_expval_table 8021 00005C32 31D2 xor edx, edx 8022 8023 .exponent_lop: 8024 00005C34 89D0 mov eax, edx ; val=i 8025 00005C36 89D3 mov ebx, edx 8026 00005C38 89D1 mov ecx, edx 8027 00005C3A C1EB04 shr ebx, 4 8028 00005C3D C1E906 shr ecx, 6 ; 4+2 8029 00005C40 83E00F and eax, 0Fh ; val=i AND 0Fh 8030 00005C43 83E303 and ebx, 3 8031 00005C46 8D1C83 lea ebx, [ebx+eax*4] ; (0..0Fh)*4+(0..3) 8032 00005C49 8B049D[405A0200] mov eax, [mp3_table_4_3_value+ebx*4] 8033 00005C50 09C0 or eax, eax 8034 00005C52 741A jz short .this 8035 00005C54 2A8B[04DA0100] sub cl, [mp3_table_4_3_exp+ebx] 8036 00005C5A 770D ja short .left_shift 8037 00005C5C F6D9 neg cl 8038 00005C5E D3E8 shr eax, cl 8039 00005C60 80F91F cmp cl, 1Fh 8040 00005C63 7609 jbe short .this 8041 00005C65 31C0 xor eax, eax 8042 00005C67 EB05 jmp short .this 8043 8044 .left_shift: 8045 00005C69 B8FFFFFF7F mov eax, 7FFFFFFFh 8046 8047 .this: 8048 00005C6E AB stosd 8049 00005C6F 42 inc edx 8050 00005C70 81FA00200000 cmp edx, 2000h 8051 00005C76 72BC jb short .exponent_lop 8052 00005C78 BE[30630400] mov esi, mp3_expval_table 8053 00005C7D BF[305B0400] mov edi, mp3_exp_table 8054 00005C82 B900020000 mov ecx, 200h 8055 8056 .exponent_dupe_lop: 8057 00005C87 8B4604 mov eax, [esi+4] 8058 00005C8A AB stosd 8059 00005C8B 83C640 add esi, 40h 8060 00005C8E E2F7 loop .exponent_dupe_lop 8061 00005C90 C3 retn 8062 8063 8064 ; =============== S U B R O U T I N E ======================================= 8065 8066 8067 cbrt96: 8068 00005C91 83EC18 sub esp, 18h ; cube root, val^(1/3), from https://gist.github.com/anonymous/729557 8069 ; in: ebx:edx:eax = unsigned 96bit input (integer) 8070 ; out: ebx = unsigned 32bit result (with fractional bits) 8071 ; out: cl = number of fractional bits 8072 00005C94 890424 mov [esp], eax 8073 00005C97 89542404 mov [esp+4], edx 8074 00005C9B 895C2408 mov [esp+8], ebx 8075 00005C9F C744240C00000000 mov dword [esp+0Ch], 0 8076 00005CA7 C744241000000000 mov dword [esp+10h], 0 8077 00005CAF C744241400000000 mov dword [esp+14h], 0 8078 00005CB7 31DB xor ebx, ebx ; result.value 8079 00005CB9 B100 mov cl, 0 ; result.fraction 8080 00005CBB 09D0 or eax, edx ; skip if zero 8081 00005CBD 742F jz short .pre_shift_done 8082 8083 .pre_shift_lop: 8084 00005CBF F7442408000000E0 test dword [esp+8], 0E0000000h 8085 00005CC7 7525 jnz short .pre_shift_done 8086 00005CC9 D12424 shl dword [esp], 1 8087 00005CCC D1542404 rcl dword [esp+4], 1 8088 00005CD0 D1542408 rcl dword [esp+8], 1 8089 00005CD4 D12424 shl dword [esp], 1 8090 00005CD7 D1542404 rcl dword [esp+4], 1 8091 00005CDB D1542408 rcl dword [esp+8], 1 8092 00005CDF D12424 shl dword [esp], 1 8093 00005CE2 D1542404 rcl dword [esp+4], 1 8094 00005CE6 D1542408 rcl dword [esp+8], 1 8095 00005CEA FEC1 inc cl 8096 00005CEC EBD1 jmp short .pre_shift_lop 8097 8098 .pre_shift_done: 8099 00005CEE B520 mov ch, 20h ; loopcount 8100 8101 .lop: 8102 00005CF0 01DB add ebx, ebx ; result*2 8103 00005CF2 89D8 mov eax, ebx ; y 8104 00005CF4 43 inc ebx ; result+1 8105 00005CF5 F7E3 mul ebx ; y*(y+1) 8106 00005CF7 89C6 mov esi, eax 8107 00005CF9 89D7 mov edi, edx 8108 00005CFB 31ED xor ebp, ebp 8109 00005CFD F9 stc 8110 00005CFE 11F6 adc esi, esi ; y*(y+1)*2+1 8111 00005D00 11FF adc edi, edi 8112 00005D02 11ED adc ebp, ebp 8113 00005D04 01C6 add esi, eax 8114 00005D06 11D7 adc edi, edx ; y*(y+1)*3+1 8115 00005D08 83D500 adc ebp, 0 8116 00005D0B D12424 shl dword [esp], 1 8117 00005D0E D1542404 rcl dword [esp+4], 1 8118 00005D12 D1542408 rcl dword [esp+8], 1 ; shl 3 8119 00005D16 D154240C rcl dword [esp+0Ch], 1 8120 00005D1A D1542410 rcl dword [esp+10h], 1 8121 00005D1E D1542414 rcl dword [esp+14h], 1 8122 00005D22 D12424 shl dword [esp], 1 8123 00005D25 D1542404 rcl dword [esp+4], 1 8124 00005D29 D1542408 rcl dword [esp+8], 1 8125 00005D2D D154240C rcl dword [esp+0Ch], 1 8126 00005D31 D1542410 rcl dword [esp+10h], 1 8127 00005D35 D1542414 rcl dword [esp+14h], 1 8128 00005D39 D12424 shl dword [esp], 1 8129 00005D3C D1542404 rcl dword [esp+4], 1 8130 00005D40 D1542408 rcl dword [esp+8], 1 8131 00005D44 D154240C rcl dword [esp+0Ch], 1 8132 00005D48 D1542410 rcl dword [esp+10h], 1 8133 00005D4C D1542414 rcl dword [esp+14h], 1 8134 00005D50 2974240C sub [esp+0Ch], esi 8135 00005D54 197C2410 sbb [esp+10h], edi ; sub/compare 8136 00005D58 196C2414 sbb [esp+14h], ebp 8137 00005D5C 730D jnb short .next 8138 00005D5E 4B dec ebx 8139 00005D5F 0174240C add [esp+0Ch], esi 8140 00005D63 117C2410 adc [esp+10h], edi ; undo 8141 00005D67 116C2414 adc [esp+14h], ebp 8142 8143 .next: 8144 00005D6B FECD dec ch 8145 00005D6D 7581 jnz short .lop 8146 00005D6F 83C418 add esp, 18h 8147 mp3_init_log_constants: 8148 00005D72 C3 retn 8149 8150 ;mp3_init_log_constants: 8151 ; retn 8152 8153 ; =============== S U B R O U T I N E ======================================= 8154 8155 8156 mp3_build_huff_table_root: 8157 00005D73 A3[E02C0500] mov [_@@nb_codes], eax ; "init_vlc" 8158 00005D78 C705[E42C0500]0000- mov dword [_@@prefix_numbits], 0 8158 00005D80 0000 8159 00005D82 C705[E82C0500]0000- mov dword [_@@prefix_pattern], 0 8159 00005D8A 0000 8160 00005D8C 60 pusha 8161 00005D8D 89C1 mov ecx, eax 8162 00005D8F 31C0 xor eax, eax 8163 8164 .prescan_lop: 8165 00005D91 3A03 cmp al, [ebx] 8166 00005D93 7702 ja short .prescan_next 8167 00005D95 8A03 mov al, [ebx] 8168 8169 .prescan_next: 8170 00005D97 43 inc ebx 8171 00005D98 E2F7 loop .prescan_lop 8172 00005D9A 3C09 cmp al, 9 ; CHILD_BITS 8173 00005D9C 7202 jb short .prescan_this_limit 8174 00005D9E B009 mov al, 9 8175 8176 .prescan_this_limit: 8177 00005DA0 A3[DC2C0500] mov [_@@table_nb_bits], eax 8178 00005DA5 61 popa 8179 8180 mp3_build_huff_table_recursive_child: 8181 00005DA6 8B0D[DC2C0500] mov ecx, [_@@table_nb_bits] 8182 00005DAC B801000000 mov eax, 1 8183 00005DB1 D3E0 shl eax, cl 8184 00005DB3 A3[EC2C0500] mov [_@@curr_table_size], eax 8185 00005DB8 48 dec eax 8186 00005DB9 A3[F02C0500] mov [_@@curr_table_mask], eax 8187 00005DBE 60 pusha 8188 00005DBF 8B1D[F0840000] mov ebx, [mp3_huff_num_entries] 8189 00005DC5 891D[F42C0500] mov [_@@curr_table_index], ebx 8190 00005DCB 031D[EC2C0500] add ebx, [_@@curr_table_size] 8191 00005DD1 891D[F0840000] mov [mp3_huff_num_entries], ebx 8192 00005DD7 813D[F0840000]002E- cmp dword [mp3_huff_num_entries], 11776 ; HUFF_TREE_SIZE/4 8192 00005DDF 0000 8193 00005DE1 0F8781AFFFFF ja fatalunexpected 8194 00005DE7 61 popa 8195 00005DE8 BF[C41F0100] mov edi, huff_tree_buf 8196 00005DED A1[F42C0500] mov eax, [_@@curr_table_index] 8197 00005DF2 66890497 mov [edi+edx*4], ax 8198 00005DF6 A1[DC2C0500] mov eax, [_@@table_nb_bits] 8199 00005DFB F7D8 neg eax 8200 00005DFD 6689449702 mov [edi+edx*4+2], ax 8201 00005E02 BF[C41F0100] mov edi, huff_tree_buf 8202 00005E07 8B15[F42C0500] mov edx, [_@@curr_table_index] 8203 00005E0D 8B0D[EC2C0500] mov ecx, [_@@curr_table_size] 8204 8205 .clear_table_lop: 8206 00005E13 66C70497FFFF mov word [edi+edx*4], 0FFFFh 8207 00005E19 66C74497020000 mov word [edi+edx*4+2], 0 8208 00005E20 42 inc edx 8209 00005E21 E2F0 loop .clear_table_lop 8210 00005E23 53 push ebx 8211 00005E24 56 push esi 8212 00005E25 31D2 xor edx, edx 8213 8214 .make_table_lop: 8215 00005E27 0FB60B movzx ecx, byte [ebx] 8216 00005E2A 0FB706 movzx eax, word [esi] 8217 00005E2D 2B0D[E42C0500] sub ecx, [_@@prefix_numbits] 8218 00005E33 7E74 jle short .make_table_lop_next 8219 00005E35 D3E8 shr eax, cl 8220 00005E37 3B05[E82C0500] cmp eax, [_@@prefix_pattern] 8221 00005E3D 756A jnz short .make_table_lop_next 8222 00005E3F BF[C41F0100] mov edi, huff_tree_buf 8223 00005E44 0FB706 movzx eax, word [esi] 8224 00005E47 2B0D[DC2C0500] sub ecx, [_@@table_nb_bits] 8225 00005E4D 773E ja short .create_child_table 8226 00005E4F F7D9 neg ecx 8227 00005E51 D3E0 shl eax, cl 8228 00005E53 2305[F02C0500] and eax, [_@@curr_table_mask] 8229 00005E59 0305[F42C0500] add eax, [_@@curr_table_index] 8230 00005E5F 8D3C87 lea edi, [edi+eax*4] 8231 00005E62 B801000000 mov eax, 1 8232 00005E67 D3E0 shl eax, cl 8233 00005E69 89C1 mov ecx, eax 8234 00005E6B 0FB603 movzx eax, byte [ebx] 8235 00005E6E 2B05[E42C0500] sub eax, [_@@prefix_numbits] 8236 8237 .make_rept_lop: 8238 00005E74 66837F0200 cmp word [edi+2], 0 8239 00005E79 0F85E9AEFFFF jnz fatalunexpected 8240 00005E7F 668917 mov [edi], dx 8241 00005E82 66894702 mov [edi+2], ax 8242 00005E86 83C704 add edi, 4 8243 00005E89 E2E9 loop .make_rept_lop 8244 00005E8B EB1C jmp short .make_table_lop_next 8245 8246 .create_child_table: 8247 00005E8D D3E8 shr eax, cl 8248 00005E8F 2305[F02C0500] and eax, [_@@curr_table_mask] 8249 00005E95 0305[F42C0500] add eax, [_@@curr_table_index] 8250 00005E9B F7D9 neg ecx 8251 00005E9D 66394C8702 cmp [edi+eax*4+2], cx 8252 00005EA2 7C05 jl short .make_table_lop_next 8253 00005EA4 66894C8702 mov [edi+eax*4+2], cx 8254 8255 .make_table_lop_next: 8256 00005EA9 83C602 add esi, 2 8257 00005EAC 43 inc ebx 8258 00005EAD 42 inc edx 8259 00005EAE 3B15[E02C0500] cmp edx, [_@@nb_codes] 8260 00005EB4 0F826DFFFFFF jb .make_table_lop 8261 00005EBA 5E pop esi 8262 00005EBB 5B pop ebx 8263 00005EBC 8B0D[EC2C0500] mov ecx, [_@@curr_table_size] 8264 00005EC2 8B15[F42C0500] mov edx, [_@@curr_table_index] 8265 8266 .make_child_tables_lop: 8267 00005EC8 BF[C41F0100] mov edi, huff_tree_buf 8268 00005ECD 0FBF449702 movsx eax, word [edi+edx*4+2] 8269 00005ED2 83F800 cmp eax, 0 8270 00005ED5 796D jns short .make_child_tables_lop_next 8271 00005ED7 F7D8 neg eax 8272 00005ED9 3B05[DC2C0500] cmp eax, [_@@table_nb_bits] 8273 00005EDF 7605 jbe short .make_child_tables_this 8274 00005EE1 A1[DC2C0500] mov eax, [_@@table_nb_bits] 8275 8276 .make_child_tables_this: 8277 00005EE6 51 push ecx 8278 00005EE7 52 push edx 8279 00005EE8 FF35[F42C0500] push dword [_@@curr_table_index] 8280 00005EEE FF35[DC2C0500] push dword [_@@table_nb_bits] 8281 00005EF4 FF35[E42C0500] push dword [_@@prefix_numbits] 8282 00005EFA FF35[E82C0500] push dword [_@@prefix_pattern] 8283 00005F00 8B0D[DC2C0500] mov ecx, [_@@table_nb_bits] 8284 00005F06 A3[DC2C0500] mov [_@@table_nb_bits], eax 8285 00005F0B 010D[E42C0500] add [_@@prefix_numbits], ecx 8286 00005F11 D325[E82C0500] shl dword [_@@prefix_pattern], cl 8287 00005F17 89D0 mov eax, edx 8288 00005F19 2B05[F42C0500] sub eax, [_@@curr_table_index] 8289 00005F1F 0905[E82C0500] or [_@@prefix_pattern], eax 8290 00005F25 E87CFEFFFF call mp3_build_huff_table_recursive_child 8291 00005F2A 8F05[E82C0500] pop dword [_@@prefix_pattern] 8292 00005F30 8F05[E42C0500] pop dword [_@@prefix_numbits] 8293 00005F36 8F05[DC2C0500] pop dword [_@@table_nb_bits] 8294 00005F3C 8F05[F42C0500] pop dword [_@@curr_table_index] 8295 00005F42 5A pop edx 8296 00005F43 59 pop ecx 8297 8298 .make_child_tables_lop_next: 8299 00005F44 42 inc edx 8300 00005F45 E281 loop .make_child_tables_lop 8301 00005F47 C3 retn 8302 8303 8304 ; =============== S U B R O U T I N E ======================================= 8305 8306 8307 mp3_exclude_id3_and_tag: 8308 00005F48 8B35[042D0500] mov esi, [stream_pos] 8309 00005F4E 8B0D[082D0500] mov ecx, [bytes_left] 8310 00005F54 83F90A cmp ecx, 10 8311 00005F57 7240 jb short .no_id3 8312 00005F59 8B06 mov eax, [esi] 8313 00005F5B 25FFFFFF00 and eax, 0FFFFFFh 8314 ;cmp eax, '3DI' ; "ID3" 8315 ; 20/10/2024 8316 00005F60 3D49443300 cmp eax, 'ID3' ; FASM & NASM syntax 8317 00005F65 7532 jnz short .no_id3 8318 00005F67 8B4606 mov eax, [esi+6] 8319 00005F6A A980808080 test eax, 80808080h 8320 00005F6F 7528 jnz short .no_id3 8321 8322 .xlat_4x7bit_to_28bit: 8323 00005F71 86E0 xchg al, ah 8324 00005F73 D0E0 shl al, 1 8325 00005F75 66D1E0 shl ax, 1 8326 00005F78 66C1E802 shr ax, 2 8327 00005F7C C1C810 ror eax, 16 8328 00005F7F 86E0 xchg al, ah 8329 00005F81 D0E0 shl al, 1 8330 00005F83 66D1E0 shl ax, 1 8331 00005F86 C1E802 shr eax, 2 8332 00005F89 83C00A add eax, 10 8333 00005F8C 39C1 cmp ecx, eax 8334 00005F8E 7209 jb short .no_id3 8335 00005F90 01C6 add esi, eax 8336 00005F92 29C1 sub ecx, eax 8337 00005F94 A3[84F40000] mov [mp3_id3_size], eax 8338 8339 .no_id3: 8340 00005F99 BA80000000 mov edx, 80h 8341 00005F9E 39D1 cmp ecx, edx 8342 00005FA0 721F jb short .no_tag_or_ext 8343 00005FA2 8B440E80 mov eax, [esi+ecx-80h] 8344 00005FA6 25FFFFFF00 and eax, 0FFFFFFh 8345 ;cmp eax, 'GAT' ; "TAG" 8346 ; 20/10/2024 8347 00005FAB 3D54414700 cmp eax, 'TAG' ; FASM & NASM syntax 8348 00005FB0 0F8421010000 jz .got_tag_size_edx 8349 ;cmp eax, 'TXE' 8350 00005FB6 3D45585400 cmp eax, 'EXT' 8351 00005FBB 0F8416010000 jz .got_tag_size_edx 8352 8353 .no_tag_or_ext: 8354 00005FC1 BAE3000000 mov edx, 0E3h 8355 00005FC6 39D1 cmp ecx, edx 8356 00005FC8 7211 jb short .no_tagplus 8357 ;cmp dword [esi+ecx-0E3h], '+GAT' ; "TAG+" 8358 ; 20/10/2024 8359 00005FCA 81BC0E1DFFFFFF5441- cmp dword [esi+ecx-0E3h], 'TAG+' 8359 00005FD3 472B 8360 00005FD5 0F84FC000000 jz .got_tag_size_edx 8361 8362 .no_tagplus: 8363 00005FDB BA14000000 mov edx, 20 ; 10+10 8364 00005FE0 39D1 cmp ecx, edx 8365 00005FE2 723C jb short .no_3di ; "3DI",04h 8366 00005FE4 817C0EF633444904 cmp dword [esi+ecx-10], 4494433h ; 'ID3'+04000000h 8367 00005FEC 7532 jnz short .no_3di 8368 00005FEE F6440EFB10 test byte [esi+ecx-5], 10h ; bit 4 8369 00005FF3 742B jz short .no_3di 8370 00005FF5 8B440EFC mov eax, [esi+ecx-4] 8371 00005FF9 A980808080 test eax, 80808080h 8372 00005FFE 7520 jnz short .no_3di 8373 8374 .@xlat_4x7bit_to_28bit: 8375 00006000 86E0 xchg al, ah 8376 00006002 D0E0 shl al, 1 8377 00006004 66D1E0 shl ax, 1 8378 00006007 66C1E802 shr ax, 2 8379 0000600B C1C810 ror eax, 10h 8380 0000600E 86E0 xchg al, ah 8381 00006010 D0E0 shl al, 1 8382 00006012 66D1E0 shl ax, 1 8383 00006015 C1E802 shr eax, 2 8384 00006018 8D5014 lea edx, [eax+20] ; [eax+10+10] ; hdr+footer siz 8385 0000601B E9B7000000 jmp .got_tag_size_edx 8386 8387 .no_3di: 8388 ;cmp dword [esi+ecx-32], 'TEPA' ; [esi+ecx-32+0] 8389 ; 20/10/2024 8390 00006020 817C0EE041504554 cmp dword [esi+ecx-32], 'APET' 8391 ; check "APETAGEX" 8392 00006028 7520 jnz short .no_ape 8393 ;cmp dword [esi+ecx-28], 'XEGA' ; [esi+ecx-32+4] 8394 0000602A 817C0EE441474558 cmp dword [esi+ecx-28], 'AGEX' 8395 00006032 7516 jnz short .no_ape 8396 00006034 8B540EEC mov edx, [esi+ecx-20] ; [esi+ecx-32+12] ; get size 8397 00006038 F7440EF400000080 test dword [esi+ecx-12], 80000000h ; [esi+ecx-32+20],1 shl 31 8398 00006040 7403 jz short .no_ape_header 8399 00006042 83C220 add edx, 32 ; hdr.size 8400 8401 .no_ape_header: 8402 00006045 E98D000000 jmp .got_tag_size_edx 8403 8404 .no_ape: 8405 0000604A BA14000000 mov edx, 20 ; 11+9 8406 0000604F 39D1 cmp ecx, edx ; "LYRICSEND" or "LYRICS200" 8407 ; (11+N+9 bytes each) 8408 00006051 7258 jb short .no_lyrics 8409 ;cmp dword [esi+ecx-9], 'IRYL' 8410 ; 20/10/2024 8411 00006053 817C0EF74C595249 cmp dword [esi+ecx-9], 'LYRI' ; FASM & NASM syntax 8412 0000605B 754E jnz short .no_lyrics 8413 0000605D 807C0EFB43 cmp byte [esi+ecx-5], 'C' 8414 00006062 7547 jnz short .no_lyrics 8415 ;cmp dword [esi+ecx-4], 'DNES' 8416 00006064 817C0EFC53454E44 cmp dword [esi+ecx-4], 'SEND' 8417 0000606C 740C jz short .lyrics3_v1 8418 ;cmp dword [esi+ecx-4], '002S' 8419 0000606E 817C0EFC53323030 cmp dword [esi+ecx-4], 'S200' 8420 00006076 7440 jz short .lyrics3_v2 8421 00006078 7531 jnz short .no_lyrics 8422 8423 .lyrics3_v1: 8424 0000607A BA14000000 mov edx, 20 ; 11+9 8425 8426 .lyrics3_v1_size_lop: 8427 0000607F 8D040E lea eax, [esi+ecx] 8428 00006082 29D0 sub eax, edx 8429 ;cmp dword [eax], 'IRYL' ; "LYRICSBEGIN" 8430 ; 20/10/2024 8431 00006084 81384C595249 cmp dword [eax], 'LYRI' 8432 0000608A 7512 jnz short .lyrics3_v1_size_next 8433 ;cmp dword [eax+4], 'EBSC' 8434 0000608C 81780443534245 cmp dword [eax+4], 'CSBE' 8435 00006093 7509 jnz short .lyrics3_v1_size_next 8436 ;cmp dword [eax+7], 'NIGE' 8437 00006095 8178074547494E cmp dword [eax+7], 'EGIN' 8438 0000609C 7439 jz short .got_tag_size_edx 8439 8440 .lyrics3_v1_size_next: 8441 0000609E 42 inc edx 8442 0000609F 81FA00140000 cmp edx, 5120 8443 000060A5 7704 ja short .no_lyrics 8444 000060A7 39CA cmp edx, ecx 8445 000060A9 76D4 jbe short .lyrics3_v1_size_lop 8446 ;jmp short .no_lyrics 8447 8448 .no_lyrics: 8449 ;jmp short .footer_tag_all_done 8450 ; 22/10/2024 8451 .footer_tag_all_done: 8452 000060AB 8935[042D0500] mov [stream_pos], esi 8453 000060B1 890D[082D0500] mov [bytes_left], ecx 8454 000060B7 C3 retn 8455 8456 .lyrics3_v2: 8457 000060B8 51 push ecx 8458 000060B9 56 push esi 8459 000060BA 8D740EF1 lea esi, [esi+ecx-15] ; [esi+ecx-6-9] 8460 000060BE B906000000 mov ecx, 6 8461 000060C3 31D2 xor edx, edx 8462 8463 .lyrics3_v2_size_lop: 8464 000060C5 6BD20A imul edx, 10 8465 000060C8 0FB606 movzx eax, byte [esi] 8466 000060CB 46 inc esi 8467 000060CC 2C30 sub al, 30h 8468 000060CE 01C2 add edx, eax 8469 000060D0 E2F3 loop .lyrics3_v2_size_lop 8470 000060D2 5E pop esi 8471 000060D3 59 pop ecx 8472 000060D4 83C20F add edx, 0Fh ; 6+9 8473 ;jmp short .got_tag_size_edx 8474 8475 .got_tag_size_edx: 8476 ;;; 8477 ; 22/10/2024 8478 000060D7 29D1 sub ecx, edx 8479 000060D9 7311 jnb short .cont 8480 ;;; 8481 000060DB 89D0 mov eax, edx 8482 000060DD E853050000 call wr_decimal_eax 8483 000060E2 E822050000 call wrcrlf 8484 ;;; 8485 ;sub ecx, edx 8486 ;jb fatalunexpected 8487 000060E7 E97CACFFFF jmp fatalunexpected 8488 .cont: 8489 ;;; 8490 000060EC 0115[88F40000] add [mp3_tag_size], edx 8491 000060F2 E9A2FEFFFF jmp .no_id3 8492 8493 8494 ; =============== S U B R O U T I N E ======================================= 8495 8496 8497 mp3_detect_free_format_block_size: 8498 000060F7 833D[00F40000]00 cmp dword [mp3_free_format_frame_size], 0 8499 000060FE 0F85A5000000 jnz .already_detected 8500 00006104 31D2 xor edx, edx 8501 8502 .find_distance_lop: 8503 00006106 3B15[B0F40000] cmp edx, [mp3_src_remain] 8504 0000610C 742B jz short .match_eof 8505 0000610E 8D4204 lea eax, [edx+4] 8506 00006111 3B05[B0F40000] cmp eax, [mp3_src_remain] 8507 00006117 771E ja short .find_distance_failed 8508 00006119 8B0416 mov eax, [esi+edx] 8509 0000611C E8EDA0FFFF call bswap_eax 8510 00006121 3305[B09D0000] xor eax, [mp3_hdr_32bit_header] 8511 00006127 25000CFEFF and eax, 0FFFE0C00h 8512 0000612C 740B jz short .match_eof 8513 8514 .find_distance_next: 8515 0000612E 42 inc edx 8516 0000612F 81FA00100000 cmp edx, 1000h 8517 00006135 76CF jbe short .find_distance_lop 8518 8519 .find_distance_failed: 8520 00006137 F9 stc 8521 00006138 C3 retn 8522 8523 .match_eof: 8524 00006139 89D0 mov eax, edx 8525 0000613B 2B05[BC9D0000] sub eax, [mp3_hdr_flag_padding] 8526 00006141 83F804 cmp eax, 4 8527 00006144 72E8 jb short .find_distance_next 8528 00006146 A3[00F40000] mov [mp3_free_format_frame_size], eax 8529 0000614B 31DB xor ebx, ebx 8530 8531 .confirm_distance_lop: 8532 0000614D 8B041E mov eax, [esi+ebx] 8533 00006150 E8B9A0FFFF call bswap_eax 8534 00006155 C1E80A shr eax, 10 ; 9+1 8535 00006158 131D[00F40000] adc ebx, [mp3_free_format_frame_size] 8536 0000615E 3B1D[B0F40000] cmp ebx, [mp3_src_remain] 8537 00006164 7422 jz short .confirm_distance_match_eof 8538 00006166 8D4304 lea eax, [ebx+4] 8539 00006169 3B05[B0F40000] cmp eax, [mp3_src_remain] 8540 0000616F 77BD ja short .find_distance_next 8541 00006171 8B041E mov eax, [esi+ebx] 8542 00006174 E895A0FFFF call bswap_eax 8543 00006179 3305[B09D0000] xor eax, [mp3_hdr_32bit_header] 8544 0000617F 25000CFEFF and eax, 0FFFE0C00h 8545 00006184 75A8 jnz short .find_distance_next 8546 00006186 EBC5 jmp short .confirm_distance_lop 8547 8548 .confirm_distance_match_eof: 8549 00006188 A1[00F40000] mov eax, [mp3_free_format_frame_size] 8550 0000618D C1E003 shl eax, 3 8551 00006190 F725[C09D0000] mul dword [mp3_sample_rate] 8552 00006196 8B0D[C0F40000] mov ecx, [mp3_nb_granules] 8553 0000619C 69C940020000 imul ecx, 240h 8554 000061A2 F7F1 div ecx 8555 000061A4 A3[C89D0000] mov [mp3_bit_rate], eax 8556 8557 .already_detected: 8558 000061A9 F8 clc 8559 000061AA C3 retn 8560 8561 8562 ; =============== S U B R O U T I N E ======================================= 8563 8564 8565 mp3_check_xing_info: 8566 000061AB C705[08F40000]0000- mov dword [mp3_xing_id], 0 8566 000061B3 0000 8567 000061B5 C705[10F40000]0000- mov dword [mp3_xing_frames], 0 8567 000061BD 0000 8568 000061BF C705[14F40000]0000- mov dword [mp3_xing_filesize], 0 8568 000061C7 0000 8569 000061C9 8B35[A49D0000] mov esi, [mp3_src_data_location] 8570 000061CF AD lodsd 8571 ;cmp eax, 'gniX' 8572 ; 20/10/2024 8573 000061D0 3D58696E67 cmp eax, 'Xing' ; FASM & NASM syntax 8574 000061D5 7401 jz short .xing 8575 000061D7 C3 retn 8576 8577 .xing: 8578 000061D8 A3[08F40000] mov [mp3_xing_id], eax 8579 000061DD AD lodsd 8580 000061DE E82BA0FFFF call bswap_eax 8581 000061E3 A3[0CF40000] mov [mp3_xing_flags], eax 8582 000061E8 89C2 mov edx, eax 8583 000061EA F7C201000000 test edx, 1 8584 000061F0 740B jz short .no_xing_frames 8585 000061F2 AD lodsd 8586 000061F3 E816A0FFFF call bswap_eax 8587 000061F8 A3[10F40000] mov [mp3_xing_frames], eax 8588 8589 .no_xing_frames: 8590 000061FD F7C202000000 test edx, 2 ; 1 shl 1 8591 00006203 740B jz short .no_xing_filesize 8592 00006205 AD lodsd 8593 00006206 E803A0FFFF call bswap_eax 8594 0000620B A3[14F40000] mov [mp3_xing_filesize], eax 8595 8596 .no_xing_filesize: 8597 00006210 F7C204000000 test edx, 4 ; 1 shl 2 8598 00006216 740C jz short .no_xing_toc 8599 00006218 B964000000 mov ecx, 100 8600 0000621D BF[18F40000] mov edi, mp3_xing_toc 8601 00006222 F3A4 rep movsb 8602 8603 .no_xing_toc: 8604 00006224 F7C208000000 test edx, 8 ; 1 shl 3 8605 0000622A 740B jz short .no_xing_vbr_scale 8606 0000622C AD lodsd 8607 0000622D E8DC9FFFFF call bswap_eax 8608 00006232 A3[7CF40000] mov [mp3_xing_vbr_scale], eax 8609 8610 .no_xing_vbr_scale: 8611 00006237 C705[C89D0000]0000- mov dword [mp3_bit_rate], 0 8611 0000623F 0000 8612 00006241 A1[C09D0000] mov eax, [mp3_sample_rate] 8613 00006246 C1E003 shl eax, 3 8614 00006249 F725[14F40000] mul dword [mp3_xing_filesize] 8615 0000624F 8B0D[10F40000] mov ecx, [mp3_xing_frames] 8616 00006255 0FAF0D[C0F40000] imul ecx, [mp3_nb_granules] 8617 0000625C 69C940020000 imul ecx, 576 ; 18*32 8618 00006262 39CA cmp edx, ecx 8619 00006264 7307 jnb short .overflow 8620 00006266 F7F1 div ecx 8621 00006268 A3[C89D0000] mov [mp3_bit_rate], eax 8622 8623 .overflow: 8624 0000626D C3 retn 8625 8626 8627 ; =============== S U B R O U T I N E ======================================= 8628 8629 ; 20/10/2024 8630 mp3_decode_frame: 8631 0000626E 890D[B0F40000] mov [mp3_src_remain], ecx 8632 00006274 893D[94F40000] mov [mp3_samples_dst], edi 8633 0000627A F605[54760000]10 test byte [cpuid_flags], 10h 8634 00006281 740E jz short .no_rdtsc_supported@@@@ 8635 00006283 0F31 rdtsc 8636 00006285 2905[14780000] sub [rdtsc_total], eax 8637 0000628B 1915[18780000] sbb [rdtsc_total+4], edx 8638 8639 .no_rdtsc_supported@@@@: 8640 00006291 E8DC9FFFFF call mp3_search_get_header 8641 00006296 0F8294010000 jc .error 8642 0000629C A1[A89D0000] mov eax, [mp3_src_frame_size] 8643 000062A1 83F800 cmp eax, 0 8644 000062A4 0F8E86010000 jle .error 8645 000062AA 3B05[B0F40000] cmp eax, [mp3_src_remain] 8646 000062B0 0F877A010000 ja .error 8647 000062B6 8935[ACF40000] mov [mp3_bitstream_start], esi 8648 ; 11/01/2025 8649 ;mov eax, 32 8650 8651 .mp3mac_bitstream_set_position: 8652 ; 22/10/2024 8653 ;mov esi, [mp3_bitstream_start] 8654 ;mov cl, al 8655 ;shr eax, 3 8656 ;and cl, 7 8657 ;mov eax, 4 8658 ;add esi, eax 8659 000062BC 83C604 add esi, 4 8660 000062BF E8529FFFFF call mp3_recollect_bits 8661 8662 .mp3mac_get_n_bits: 8663 ;mov eax, ebp ; mp3_col32 8664 ;shl ebp, cl 8665 ;rol eax, cl 8666 ;xor eax, ebp ; mp3_col32 8667 ;sub ch, cl ; sub mp3_colNN,num 8668 ;jns short .cont 8669 ;mov cl, ch ; mov cl,mp3_colNN 8670 ;add ch, 16 8671 ;rol ebp, cl ; rol mp3_col32,cl 8672 ;mov bp, [esi] ; mov mp3_col16,word ptr [esi] 8673 ;add esi, 2 8674 ;ror bp, 8 ; endianess 8675 ;ror ebp, cl ; ror mp3_col32,cl 8676 8677 .cont: 8678 000062C4 E8AFA1FFFF call mp3_bitstream_read_header_extra 8679 000062C9 E839A3FFFF call mp3_bitstream_read_granules 8680 000062CE 0F825C010000 jc .error 8681 000062D4 E88D9FFFFF call mp3_uncollect_bits 8682 000062D9 8935[A49D0000] mov [mp3_src_data_location], esi 8683 000062DF 833D[94F40000]00 cmp dword [mp3_samples_dst], 0 8684 000062E6 0F840F010000 jz .skip_decoding 8685 000062EC E8ECA7FFFF call mp3_bitstream_append_to_main_data_pool 8686 000062F1 833D[98F40000]00 cmp dword [mp3_samples_output_size], 0 8687 000062F8 0F84FD000000 jz .skip_decoding 8688 000062FE C705[A4F40000]0000- mov dword [mp3_curr_granule], 0 8688 00006306 0000 8689 00006308 BB[C4F40000] mov ebx, mp3_granules 8690 8691 .body_granule_lop: 8692 0000630D 891D[F82C0500] mov [_@@granule_addr], ebx 8693 00006313 C705[A0F40000]0000- mov dword [mp3_curr_channel], 0 8693 0000631B 0000 8694 8695 .body_channel_lop: 8696 0000631D 8B4304 mov eax, [ebx+4] ; [ebx+$mp3gr_part2_3_start] 8697 00006320 8B35[ACF40000] mov esi, [mp3_bitstream_start] 8698 00006326 88C1 mov cl, al ; mp3mac_bitstream_set_position 8699 00006328 C1E803 shr eax, 3 8700 0000632B 80E107 and cl, 7 8701 0000632E 01C6 add esi, eax 8702 00006330 E8E19EFFFF call mp3_recollect_bits 8703 00006335 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 8704 00006337 D3E5 shl ebp, cl 8705 00006339 D3C0 rol eax, cl 8706 0000633B 31E8 xor eax, ebp 8707 0000633D 28CD sub ch, cl 8708 0000633F 7913 jns short .cont@ 8709 00006341 88E9 mov cl, ch ; mp3mac_collect_more 8710 00006343 80C510 add ch, 16 8711 00006346 D3C5 rol ebp, cl 8712 00006348 668B2E mov bp, [esi] 8713 0000634B 83C602 add esi, 2 8714 0000634E 66C1CD08 ror bp, 8 8715 00006352 D3CD ror ebp, cl 8716 8717 .cont@: 8718 00006354 E81AA8FFFF call mp3_bitstream_read_scalefacs 8719 00006359 E812AAFFFF call mp3_get_exponents_from_scale_factors 8720 0000635E E856ABFFFF call mp3_huffman_decode ; reads up to $mp3gr_part2_3_end 8721 00006363 0F82C7000000 jc .error 8722 8723 .body_channel_next: 8724 00006369 81C340130000 add ebx, 4928 ; $mp3gr_entrysiz*2 8725 0000636F FF05[A0F40000] inc dword [mp3_curr_channel] 8726 00006375 A1[A0F40000] mov eax, [mp3_curr_channel] 8727 0000637A 3B05[D09D0000] cmp eax, [mp3_output_num_channels] 8728 00006380 729B jb short .body_channel_lop 8729 00006382 8B1D[F82C0500] mov ebx, [_@@granule_addr] 8730 8731 .mp3mac_push_bitstream: 8732 00006388 51 push ecx 8733 00006389 55 push ebp 8734 0000638A 56 push esi 8735 0000638B E827B0FFFF call mp3_compute_stereo 8736 00006390 C705[A0F40000]0000- mov dword [mp3_curr_channel], 0 8736 00006398 0000 8737 8738 .cast_channel_lop: 8739 0000639A E8F0B2FFFF call mp3_reorder_block 8740 0000639F E885B3FFFF call mp3_compute_antialias 8741 000063A4 E870BCFFFF call mp3_compute_imdct 8742 000063A9 81C340130000 add ebx, 4928 ; $mp3gr_entrysiz*2 8743 000063AF FF05[A0F40000] inc dword [mp3_curr_channel] 8744 000063B5 A1[A0F40000] mov eax, [mp3_curr_channel] 8745 000063BA 3B05[D09D0000] cmp eax, [mp3_output_num_channels] 8746 000063C0 72D8 jc short .cast_channel_lop 8747 8748 .mp3mac_pop_bitstream: 8749 000063C2 5E pop esi 8750 000063C3 5D pop ebp 8751 000063C4 59 pop ecx 8752 000063C5 8B1D[F82C0500] mov ebx, [_@@granule_addr] 8753 000063CB 81C3A0090000 add ebx, 2464 ; $mp3gr_entrysiz 8754 000063D1 FF05[A4F40000] inc dword [mp3_curr_granule] 8755 000063D7 A1[A4F40000] mov eax, [mp3_curr_granule] 8756 000063DC 3B05[C0F40000] cmp eax, [mp3_nb_granules] 8757 000063E2 0F8225FFFFFF jc .body_granule_lop 8758 000063E8 E8799EFFFF call mp3_uncollect_bits 8759 000063ED 3B35[A09D0000] cmp esi, [main_data_pool_wr_ptr] 8760 000063F3 773B ja short .error 8761 000063F5 FF15[F49D0000] call dword [mp3_synth_filter_proc] ; synth maths 8762 8763 .skip_decoding: 8764 000063FB A1[B4F40000] mov eax, [mp3_extra_bytes] 8765 00006400 0105[A89D0000] add [mp3_src_frame_size], eax 8766 00006406 A1[98F40000] mov eax, [mp3_samples_output_size] 8767 0000640B 0105[90F40000] add [mp3_total_output_size], eax 8768 00006411 FF05[8CF40000] inc dword [mp3_num_frames_decoded] 8769 8770 .timelog_end: ; timelog_end macro ttt 8771 00006417 F605[54760000]10 test byte [cpuid_flags], 10h 8772 0000641E 740F jz short .no_rdtsc_supported 8773 00006420 0F31 rdtsc ; read timestamp counter 8774 00006422 0105[14780000] add [rdtsc_total], eax 8775 00006428 1115[18780000] adc [rdtsc_total+4], edx 8776 ; 22/10/2024 8777 0000642E F8 clc 8778 ; 20/10/2024 8779 .no_rdtsc_supported: 8780 ;clc 8781 0000642F C3 retn 8782 8783 .error: 8784 00006430 F605[54760000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_total 8785 00006437 740E jz short .no_rdtsc_supported@ 8786 00006439 0F31 rdtsc 8787 0000643B 0105[14780000] add [rdtsc_total], eax 8788 00006441 1115[18780000] adc [rdtsc_total+4], edx 8789 8790 ; 20/10/2024 8791 .no_rdtsc_supported@: 8792 00006447 A1[B4F40000] mov eax, [mp3_extra_bytes] 8793 0000644C 0105[A89D0000] add [mp3_src_frame_size], eax 8794 00006452 F9 stc 8795 00006453 C3 retn 8796 8797 8798 ; =============== S U B R O U T I N E ======================================= 8799 8800 8801 mp3_init: 8802 00006454 BF[A08D0000] mov edi, main_data_pool_start ; = mp3_context_start 8803 ;mov ecx, 74916 ; (mp3_context_end-mp3_context_start)/4 8804 00006459 B984240100 mov ecx, (mp3_context_end-mp3_context_start)/4 8805 0000645E 31C0 xor eax, eax ; ERRIF @@len AND 03h 8806 00006460 F3AB rep stosd ; clear context 8807 00006462 C705[A09D0000]- mov dword [main_data_pool_wr_ptr], main_data_pool_start 8807 00006468 [A08D0000] 8808 0000646C 833D[EC840000]00 cmp dword [mp3_initialized], 0 8809 00006473 753C jnz short .already_initialized 8810 00006475 E8CAF6FFFF call mp3_integer_init_is_stereo_lsf 8811 0000647A E823F7FFFF call mp3_integer_init_mdct_windows 8812 0000647F E846F7FFFF call mp3_integer_init_table_4_3 8813 00006484 E8A4F7FFFF call mp3_integer_init_exponent 8814 00006489 E8F3F4FFFF call mp3_any_init_synth_window 8815 0000648E E8D2F5FFFF call mp3_any_init_band_indices 8816 00006493 E8F7F5FFFF call mp3_any_init_lsf_sf_expand 8817 00006498 E840F6FFFF call mp3_any_init_huff_tables 8818 0000649D E8D0F8FFFF call mp3_init_log_constants 8819 000064A2 E8A3F5FFFF call mp3_init_post_collapse 8820 000064A7 C705[EC840000]0100- mov dword [mp3_initialized], 1 8820 000064AF 0000 8821 8822 .already_initialized: 8823 000064B1 0FB605[50760000] movzx eax, byte [option_fast] 8824 000064B8 C705[D89D0000]0200- mov dword [mp3_bytes_per_sample], 2 8824 000064C0 0000 8825 000064C2 D1E0 shl eax, 1 8826 000064C4 0205[4E760000] add al, [option_8bit] 8827 000064CA A801 test al, 1 8828 000064CC 740A jz short .not_8bit 8829 000064CE C705[D89D0000]0100- mov dword [mp3_bytes_per_sample], 1 8829 000064D6 0000 8830 8831 .not_8bit: 8832 000064D8 6BC003 imul eax, 3 8833 000064DB 0205[4F760000] add al, [option_rate_shift] 8834 000064E1 8B0485[128B0000] mov eax, [mp3_synth_filter_procs+eax*4] 8835 000064E8 A3[F49D0000] mov [mp3_synth_filter_proc], eax 8836 000064ED C3 retn 8837 8838 8839 ; =============== S U B R O U T I N E ======================================= 8840 8841 8842 mp3_check_1st_frame: 8843 000064EE E855FAFFFF call mp3_exclude_id3_and_tag 8844 000064F3 8B35[042D0500] mov esi, [stream_pos] 8845 000064F9 8B0D[082D0500] mov ecx, [bytes_left] 8846 000064FF 31FF xor edi, edi 8847 00006501 31ED xor ebp, ebp 8848 00006503 E866FDFFFF call mp3_decode_frame 8849 00006508 0F82E9000000 jc .error 8850 0000650E E898FCFFFF call mp3_check_xing_info 8851 00006513 BA[708B0000] mov edx, txt_file_size ; "file size: " 8852 00006518 E8DB000000 call wrstr_edx 8853 0000651D A1[80F40000] mov eax, [mp3_file_size] 8854 00006522 E807010000 call wr_decimal_eax_with_thousands_seperator 8855 00006527 BA[7C8B0000] mov edx, txt_id3_size ; ", id3 size: " 8856 0000652C E8C7000000 call wrstr_edx 8857 00006531 A1[84F40000] mov eax, [mp3_id3_size] 8858 00006536 E8F3000000 call wr_decimal_eax_with_thousands_seperator 8859 0000653B BA[898B0000] mov edx, txt_tag_size ; ", tag size: " 8860 00006540 E8B3000000 call wrstr_edx 8861 00006545 A1[88F40000] mov eax, [mp3_tag_size] 8862 0000654A E8DF000000 call wr_decimal_eax_with_thousands_seperator 8863 0000654F E8B5000000 call wrcrlf 8864 00006554 BA[968B0000] mov edx, txt_input ; "input: " 8865 00006559 E89A000000 call wrstr_edx 8866 0000655E A1[C09D0000] mov eax, [mp3_sample_rate] 8867 00006563 E8CD000000 call wr_decimal_eax 8868 00006568 BA[A78B0000] mov edx, txt_hz ; " hz, " 8869 0000656D E886000000 call wrstr_edx 8870 00006572 A1[CC9D0000] mov eax, [mp3_src_num_channels] 8871 00006577 E8B9000000 call wr_decimal_eax 8872 0000657C BA[AD8B0000] mov edx, txt_channels ; " channels, " 8873 00006581 E872000000 call wrstr_edx 8874 00006586 A1[C89D0000] mov eax, [mp3_bit_rate] 8875 0000658B 31D2 xor edx, edx 8876 0000658D B9E8030000 mov ecx, 1000 8877 00006592 F7F1 div ecx 8878 00006594 E89C000000 call wr_decimal_eax 8879 00006599 BA[BE8B0000] mov edx, txt_kbit_s ; " kbit/s" 8880 0000659E E855000000 call wrstr_edx 8881 000065A3 E861000000 call wrcrlf 8882 000065A8 BA[9E8B0000] mov edx, txt_output ; "output: " 8883 000065AD E846000000 call wrstr_edx 8884 000065B2 A1[D49D0000] mov eax, [mp3_output_sample_rate] 8885 000065B7 E879000000 call wr_decimal_eax 8886 000065BC BA[A78B0000] mov edx, txt_hz ; " hz, " 8887 000065C1 E832000000 call wrstr_edx 8888 000065C6 A1[D09D0000] mov eax, [mp3_output_num_channels] 8889 000065CB E865000000 call wr_decimal_eax 8890 000065D0 BA[AD8B0000] mov edx, txt_channels ; " channels, " 8891 000065D5 E81E000000 call wrstr_edx 8892 000065DA A1[D89D0000] mov eax, [mp3_bytes_per_sample] 8893 000065DF C1E003 shl eax, 3 8894 000065E2 E84E000000 call wr_decimal_eax 8895 000065E7 BA[B98B0000] mov edx, txt_bit ; " bit" 8896 000065EC E807000000 call wrstr_edx 8897 000065F1 E813000000 call wrcrlf 8898 000065F6 F8 clc 8899 .error: 8900 000065F7 C3 retn 8901 8902 ;.error: 8903 ;stc 8904 ;retn 8905 8906 8907 ; =============== S U B R O U T I N E ======================================= 8908 8909 ;wrchr: 8910 ;pusha 8911 ;mov [wrchr_buf], al 8912 ;push 0 ; lpOverlapped 8913 ;push diskresult ; lpNumberOfBytesWritten 8914 ;push 1 ; nNumberOfBytesToWrite 8915 ;push wrchr_buf ; lpBuffer 8916 ;push [std_out] ; hFile 8917 ;call [WriteFile] 8918 ;popa 8919 ;retn 8920 8921 8922 ; =============== S U B R O U T I N E ======================================= 8923 8924 8925 wrstr_edx: 8926 000065F8 50 push eax 8927 .lop: 8928 000065F9 8A02 mov al, [edx] 8929 000065FB 42 inc edx 8930 000065FC 3C00 cmp al, 0 8931 000065FE 7407 jz short .done 8932 00006600 E801040000 call wrchr 8933 00006605 EBF2 jmp short .lop 8934 .done: 8935 00006607 58 pop eax 8936 00006608 C3 retn 8937 8938 ; =============== S U B R O U T I N E ======================================= 8939 8940 8941 wrcrlf: 8942 00006609 50 push eax 8943 0000660A B00D mov al, 0Dh 8944 0000660C E8F5030000 call wrchr 8945 00006611 B00A mov al, 0Ah 8946 00006613 E8EE030000 call wrchr 8947 00006618 58 pop eax 8948 00006619 C3 retn 8949 8950 ; =============== S U B R O U T I N E ======================================= 8951 8952 8953 wrspc: 8954 0000661A 50 push eax 8955 0000661B B020 mov al, 20h 8956 0000661D E8E4030000 call wrchr 8957 00006622 58 pop eax 8958 00006623 C3 retn 8959 8960 ; =============== S U B R O U T I N E ======================================= 8961 8962 8963 wrcomma: 8964 00006624 50 push eax 8965 00006625 B02C mov al, ',' 8966 00006627 E8DA030000 call wrchr 8967 0000662C 58 pop eax 8968 0000662D C3 retn 8969 8970 ; =============== S U B R O U T I N E ======================================= 8971 8972 8973 wr_decimal_eax_with_thousands_seperator: 8974 0000662E 51 push ecx 8975 0000662F 66B90200 mov cx, 2 8976 00006633 EB03 jmp short wr_decimal_eax_inj 8977 8978 ; =============== S U B R O U T I N E ======================================= 8979 8980 8981 wr_decimal_eax: 8982 00006635 51 push ecx 8983 00006636 31C9 xor ecx, ecx 8984 8985 wr_decimal_eax_inj: 8986 00006638 50 push eax 8987 00006639 53 push ebx 8988 0000663A 52 push edx 8989 0000663B BB00CA9A3B mov ebx, 1000000000 ; nine zeroes (32bit max 4.294.967.296) 8990 8991 .dezlop: 8992 00006640 FEC9 dec cl 8993 00006642 750C jnz short .no_thousands 8994 00006644 B103 mov cl, 3 8995 00006646 80FD00 cmp ch, 0 8996 00006649 7405 jz short .no_thousands 8997 0000664B E8D4FFFFFF call wrcomma 8998 8999 .no_thousands: 9000 00006650 31D2 xor edx, edx 9001 00006652 F7F3 div ebx 9002 00006654 83FB01 cmp ebx, 1 9003 00006657 7404 jz short .force_last_zero 9004 00006659 08C5 or ch, al 9005 0000665B 7407 jz short .skip_lead_zero 9006 9007 .force_last_zero: 9008 0000665D 0430 add al, 30h 9009 0000665F E8A2030000 call wrchr 9010 9011 .skip_lead_zero: 9012 00006664 52 push edx 9013 00006665 89D8 mov eax, ebx 9014 00006667 BB0A000000 mov ebx, 10 9015 0000666C 31D2 xor edx, edx 9016 0000666E F7F3 div ebx 9017 00006670 83F800 cmp eax, 0 9018 00006673 89C3 mov ebx, eax 9019 00006675 58 pop eax 9020 00006676 75C8 jnz short .dezlop 9021 00006678 5A pop edx 9022 00006679 5B pop ebx 9023 0000667A 58 pop eax 9024 0000667B 59 pop ecx 9025 0000667C C3 retn 9026 9027 ; =============== S U B R O U T I N E ======================================= 9028 9029 9030 wrdigital: 9031 0000667D 50 push eax 9032 0000667E 240F and al, 0Fh 9033 00006680 3C09 cmp al, 9 9034 00006682 7602 jbe short .this 9035 00006684 0407 add al, 7 9036 9037 .this: 9038 00006686 0430 add al, 30h 9039 00006688 E879030000 call wrchr 9040 0000668D 58 pop eax 9041 0000668E C3 retn 9042 9043 ; =============== S U B R O U T I N E ======================================= 9044 9045 9046 wrhexal: 9047 0000668F C0C804 ror al, 4 9048 00006692 E8E6FFFFFF call wrdigital 9049 00006697 C0C804 ror al, 4 9050 0000669A EBE1 jmp short wrdigital 9051 9052 ; =============== S U B R O U T I N E ======================================= 9053 9054 9055 wrhexax: 9056 0000669C 66C1C808 ror ax, 8 9057 000066A0 E8EAFFFFFF call wrhexal 9058 000066A5 66C1C808 ror ax, 8 9059 000066A9 EBE4 jmp short wrhexal 9060 9061 ; =============== S U B R O U T I N E ======================================= 9062 9063 9064 wrhexeax: 9065 000066AB C1C810 ror eax, 10h 9066 000066AE E8E9FFFFFF call wrhexax 9067 000066B3 C1C810 ror eax, 10h 9068 000066B6 EBE4 jmp short wrhexax 9069 9070 ; =============== S U B R O U T I N E ======================================= 9071 9072 %if 0 9073 9074 get_commandline: 9075 call [GetCommandLineA] 9076 mov esi, eax 9077 mov edi, cmdline_buf 9078 mov ecx, 1024 ; cmdline_max 9079 9080 .get_cmdline_lop: 9081 lodsb 9082 cmp al, 0 9083 stosb 9084 loopne .get_cmdline_lop 9085 mov byte [edi-1], 0 9086 mov esi, cmdline_buf 9087 mov edi, cmdline_buf 9088 call _@@get_item ; get/skip name of the executable itself 9089 9090 .get_items_lop: 9091 call _@@get_item 9092 mov al, [ebx] 9093 cmp al, 0 9094 jz .done 9095 cmp al, '/' 9096 jz short .switch 9097 cmp al, '-' 9098 jz short .switch 9099 mov eax, [edi-5] 9100 or eax, 20202000h 9101 ;cmp eax, 'vaw.' ; ".wav" 9102 cmp eax, '.wav' ; FASM & NASM syntax 9103 jnz short .not_wav_name 9104 mov [mp3_dst_fname], ebx 9105 jmp short .get_items_lop 9106 9107 .not_wav_name: 9108 mov eax, [edi-5] 9109 or eax, 20202000h 9110 ;cmp eax, 'mcp.' ; ".pcm" 9111 cmp eax, '.pcm' ; FASM & NASM syntax 9112 jnz short .not_pcm_name 9113 mov [mp3_pcm_fname], ebx 9114 jmp short .get_items_lop 9115 9116 .not_pcm_name: 9117 mov [mp3_src_fname], ebx 9118 jmp short .get_items_lop 9119 9120 .switch: 9121 ;cmp dword [ebx+1], 'onom' ; "mono" 9122 cmp dword [ebx+1], 'mono' 9123 jnz short .not_switch_mono 9124 mov byte [option_mono], 1 9125 jmp short .get_items_lop 9126 9127 .not_switch_mono: 9128 ;cmp dword [ebx+1], 'tsaf' ; "fast" 9129 cmp dword [ebx+1], 'fast' ; FASM & NASM syntax 9130 jnz short .not_fast_option 9131 mov byte [option_fast], 1 9132 jmp short .get_items_lop 9133 9134 .not_fast_option: 9135 ;cmp dword [ebx+1], 'tib8' ; "8bit" 9136 cmp dword [ebx+1], '8bit' 9137 jnz short .not_switch_8bit 9138 mov [option_8bit], 1 9139 jmp .get_items_lop 9140 9141 .not_switch_8bit: 9142 ;cmp dword [ebx+1], 'flah' ; "half" 9143 cmp dword [ebx+1], 'half' 9144 jnz short .not_switch_half 9145 mov [option_rate_shift], 1 9146 jmp .get_items_lop 9147 9148 .not_switch_half: 9149 ;cmp dword [ebx+1], 'rauq' ; "quar" 9150 cmp dword [ebx+1], 'quar' 9151 jnz short .not_switch_quarter 9152 mov [option_rate_shift], 2 9153 jmp .get_items_lop 9154 9155 .not_switch_quarter: 9156 ;cmp dword [ebx+1], 'tset' ; "test" 9157 cmp dword [ebx+1], 'test' 9158 jnz short .not_switch_test 9159 mov byte [option_test], 1 9160 jmp .get_items_lop 9161 9162 .not_switch_test: 9163 jmp short .help 9164 9165 .done: 9166 cmp dword [mp3_src_fname], 0 9167 jz short .help 9168 ;;; Erdogan Tan - 17/10/2024 9169 mov edx, txt_ctrlc 9170 call wrstr_edx 9171 ;;; 9172 mov edx, txt_file ; "file: " 9173 call wrstr_edx 9174 mov edx, [mp3_src_fname] 9175 call wrstr_edx 9176 call wrcrlf 9177 clc 9178 retn 9179 9180 .help: 9181 ;;; Erdogan Tan - 17/10/2024 9182 mov edx, txt_about 9183 call wrstr_edx 9184 ;;; 9185 mov edx, txt_help ; "usage: mp3play input.mp3 [output.wav] ["... 9186 call wrstr_edx 9187 stc 9188 retn 9189 9190 %endif 9191 9192 ; =============== S U B R O U T I N E ======================================= 9193 9194 %if 0 9195 9196 _@@get_item: 9197 lodsb 9198 dec al 9199 cmp al, 1Fh ; 20-1 9200 jbe short _@@get_item ; _@@skip_spc_lop 9201 dec esi 9202 mov ebx, edi 9203 mov ah, 0 ; flag initially not quoted 9204 9205 .char_lop: 9206 lodsb 9207 cmp al, '"' 9208 jnz short .no_quote 9209 xor ah, 1 9210 jmp short .char_lop 9211 9212 .no_quote: 9213 stosb 9214 cmp al, 0 9215 jz short .src_end 9216 cmp al, 20h 9217 ja short .char_lop 9218 cmp ah, 0 ; ignore spaces if inside "quoted area" 9219 jnz short .char_lop 9220 mov byte [edi-1], 0 ; eol (replace space by 00h) 9221 retn 9222 9223 .src_end: 9224 dec esi 9225 retn 9226 9227 %endif 9228 9229 ; =============== S U B R O U T I N E ======================================= 9230 9231 9232 %if 0 9233 9234 open_and_mmap_the_file: 9235 push 0 ; hTemplateFile 9236 push 0 ; dwFlagsAndAttributes 9237 push 3 ; dwCreationDisposition 9238 push 0 ; lpSecurityAttributes 9239 push 1 ; dwShareMode 9240 push 80000000h ; dwDesiredAccess 9241 push [mp3_src_fname] ; lpFileName 9242 call [CreateFileA] 9243 mov [hFile], eax 9244 cmp eax, 0FFFFFFFFh ; INVALID_HANDLE_VALUE 9245 jz short .not_found 9246 push 0 ; lpFileSizeHigh 9247 push [hFile] ; hFile 9248 call [GetFileSize] 9249 mov [mp3_file_size], eax 9250 mov [bytes_left], eax 9251 push 0 ; lpName 9252 push 0 ; dwMaximumSizeLow 9253 push 0 ; dwMaximumSizeHigh 9254 push 2 ; flProtect 9255 push 0 ; lpFileMappingAttributes 9256 push [hFile] ; hFile 9257 call [CreateFileMappingA] 9258 mov [hMap], eax 9259 push 0 ; dwNumberOfBytesToMap 9260 push 0 ; dwFileOffsetLow 9261 push 0 ; dwFileOffsetHigh 9262 push 4 ; dwDesiredAccess 9263 push [hMap] ; hFileMappingObject 9264 call [MapViewOfFile] 9265 mov [stream_start], eax 9266 mov [stream_pos], eax 9267 mov esi, [stream_start] 9268 mov ecx, [bytes_left] 9269 9270 .lll: 9271 lodsb 9272 loop .lll 9273 clc 9274 retn 9275 9276 .not_found: 9277 mov edx, txt_not_found ; "cannot open source file\r\n" 9278 call wrstr_edx 9279 stc 9280 retn 9281 9282 %endif 9283 9284 9285 ; =============== S U B R O U T I N E ======================================= 9286 9287 9288 mp3_plain_test_without_output: 9289 000066B8 60 pusha 9290 000066B9 8B35[042D0500] mov esi, [stream_pos] 9291 000066BF 8B0D[082D0500] mov ecx, [bytes_left] 9292 000066C5 BF[00500500] mov edi, sample_buffer 9293 000066CA 31ED xor ebp, ebp 9294 000066CC E89DFBFFFF call mp3_decode_frame 9295 000066D1 61 popa 9296 000066D2 7218 jc short .exit 9297 000066D4 A1[A89D0000] mov eax, [mp3_src_frame_size] 9298 000066D9 83F800 cmp eax, 0 9299 000066DC 740E jz short .exit 9300 000066DE 0105[042D0500] add [stream_pos], eax 9301 000066E4 2905[082D0500] sub [bytes_left], eax 9302 000066EA EBCC jmp short mp3_plain_test_without_output 9303 9304 .exit: 9305 000066EC C3 retn 9306 9307 9308 ; =============== S U B R O U T I N E ======================================= 9309 9310 ; 20/10/2024 9311 mp3_cast_to_wav_file: 9312 000066ED E86F000000 call mp3_create_wav_file 9313 ; 20/10/2024 9314 000066F2 730A jnc short .lop 9315 000066F4 BBFFFFFFFF mov ebx, -1 9316 000066F9 E91B050000 jmp ExitProcess 9317 .lop: 9318 000066FE 60 pusha 9319 000066FF 8B35[042D0500] mov esi, [stream_pos] 9320 00006705 8B0D[082D0500] mov ecx, [bytes_left] 9321 0000670B BF[00500500] mov edi, sample_buffer 9322 00006710 31ED xor ebp, ebp 9323 00006712 E857FBFFFF call mp3_decode_frame 9324 00006717 61 popa 9325 00006718 7241 jc short .exit 9326 0000671A A1[A89D0000] mov eax, [mp3_src_frame_size] 9327 0000671F 83F800 cmp eax, 0 9328 00006722 7437 jz short .exit 9329 00006724 0105[042D0500] add [stream_pos], eax 9330 0000672A 2905[082D0500] sub [bytes_left], eax 9331 ;push 0 ; lpOverlapped 9332 ;push diskresult ; lpNumberOfBytesWritten 9333 00006730 FF35[98F40000] push dword [mp3_samples_output_size] ; nNumberOfBytesToWrite 9334 00006736 68[00500500] push sample_buffer ; lpBuffer 9335 0000673B FF35[8C2D0500] push dword [mp3_wav_handle] ; hFile 9336 ;call [WriteFile] 9337 ;;; 9338 ; 20/10/2024 9339 00006741 E8DC040000 call WriteFile 9340 00006746 7213 jc short .exit 9341 ;;; 9342 00006748 A1[98F40000] mov eax, [mp3_samples_output_size] 9343 0000674D 0105[08850000] add dword [mp3_wav_header+4], eax 9344 00006753 0105[2C850000] add dword [mp3_wav_header+28h], eax 9345 00006759 EBA3 jmp short .lop 9346 9347 .exit: 9348 0000675B E860000000 call mp3_close_wav_file 9349 00006760 C3 retn 9350 9351 9352 ; =============== S U B R O U T I N E ======================================= 9353 9354 ; 20/10/2024 9355 9356 mp3_create_wav_file: 9357 00006761 A1[D49D0000] mov eax, [mp3_output_sample_rate] 9358 00006766 8B0D[D09D0000] mov ecx, [mp3_output_num_channels] 9359 0000676C 8B15[D89D0000] mov edx, [mp3_bytes_per_sample] 9360 00006772 66890D[1A850000] mov word [mp3_wav_header+16h], cx 9361 00006779 A3[1C850000] mov dword [mp3_wav_header+18h], eax 9362 0000677E 0FAFCA imul ecx, edx 9363 00006781 0FAFC1 imul eax, ecx 9364 00006784 C1E203 shl edx, 3 9365 00006787 A3[20850000] mov dword [mp3_wav_header+1Ch], eax 9366 0000678C 66890D[24850000] mov word [mp3_wav_header+20h], cx 9367 00006793 668915[26850000] mov word [mp3_wav_header+22h], dx 9368 ;push 0 ; hTemplateFile 9369 ;push 80h ; dwFlagsAndAttributes 9370 ;push 2 ; dwCreationDisposition 9371 ;push 0 ; lpSecurityAttributes 9372 ;push 0 ; dwShareMode 9373 ;push 0C0000000h ; dwDesiredAccess 9374 0000679A FF35[FC840000] push dword [mp3_dst_fname] ; lpFileName 9375 ;call [CreateFileA] 9376 ;;; 9377 ; 20/10/2024 9378 000067A0 E8AF040000 call CreateFile 9379 000067A5 7301 jnc short .ok 9380 000067A7 C3 retn 9381 .ok: 9382 ;;; 9383 000067A8 A3[8C2D0500] mov [mp3_wav_handle], eax 9384 ; 20/10/2024 9385 ;call mp3_write_wav_header 9386 ;retn 9387 9388 9389 ; =============== S U B R O U T I N E ======================================= 9390 9391 ; 20/10/2024 9392 mp3_write_wav_header: 9393 ;push 0 ; lpOverlapped 9394 ;push diskresult ; lpNumberOfBytesWritten 9395 000067AD 6A2C push 44 ; 2Ch ; nNumberOfBytesToWrite 9396 000067AF 68[04850000] push mp3_wav_header ; lpBuffer 9397 000067B4 FF35[8C2D0500] push dword [mp3_wav_handle] ; hFile 9398 ;call [WriteFile] 9399 ;;; 9400 ; 20/10/2024 9401 000067BA E863040000 call WriteFile 9402 ;;; 9403 000067BF C3 retn 9404 9405 9406 ; =============== S U B R O U T I N E ======================================= 9407 9408 ; 20/10/2024 9409 mp3_close_wav_file: 9410 000067C0 6A00 push 0 ; dwMoveMethod 9411 ;push 0 ; lpDistanceToMoveHigh 9412 000067C2 6A00 push 0 ; lDistanceToMove 9413 000067C4 FF35[8C2D0500] push dword [mp3_wav_handle] ; hFile 9414 ;call [SetFilePointer] 9415 ;;; 9416 ; 20/10/2024 9417 000067CA E8C1040000 call SetFilePointer 9418 ;;; 9419 000067CF E8D9FFFFFF call mp3_write_wav_header 9420 000067D4 FF35[8C2D0500] push dword [mp3_wav_handle] ; hObject 9421 ;call [CloseHandle] 9422 ;;; 9423 ; 20/10/2024 9424 000067DA E8EF040000 call CloseFile 9425 ;;; 9426 000067DF C3 retn 9427 9428 9429 ; =============== S U B R O U T I N E ======================================= 9430 9431 ; 20/10/2024 9432 mp3_verify_pcm_file: 9433 000067E0 E804020000 call mp3_open_pcm_file 9434 ;;; 9435 ; 20/10/2024 9436 000067E5 7301 jnc short .verify 9437 000067E7 C3 retn ; nothing to do (return without error msg) 9438 .verify: 9439 ;;; 9440 000067E8 C705[942D0500]0000- mov dword [_@@max_diff], 0 9440 000067F0 0000 9441 000067F2 C705[982D0500]0000- mov dword [_@@avg_diff], 0 9441 000067FA 0000 9442 000067FC C705[9C2D0500]0000- mov dword [_@@avg_diff+4], 0 9442 00006804 0000 9443 00006806 C705[A02D0500]0000- mov dword [pcm_filepos], 0 9443 0000680E 0000 9444 9445 .lop: 9446 00006810 60 pusha 9447 00006811 8B35[042D0500] mov esi, [stream_pos] 9448 00006817 8B0D[082D0500] mov ecx, [bytes_left] 9449 0000681D BF[00500500] mov edi, sample_buffer 9450 00006822 31ED xor ebp, ebp 9451 00006824 E845FAFFFF call mp3_decode_frame 9452 00006829 61 popa 9453 0000682A 0F824D010000 jb .exit 9454 00006830 A1[A89D0000] mov eax, [mp3_src_frame_size] 9455 00006835 83F800 cmp eax, 0 9456 00006838 0F843F010000 jz .exit 9457 0000683E 31C0 xor eax, eax 9458 00006840 833D[D09D0000]02 cmp dword [mp3_output_num_channels], 2 9459 00006847 7207 jb short .this_mono_convert 9460 00006849 0FB605[4D760000] movzx eax, byte [option_mono] 9461 9462 .this_mono_convert: 9463 00006850 A3[A42D0500] mov [_@@mono_convert], eax 9464 00006855 8A0D[4F760000] mov cl, [option_rate_shift] 9465 0000685B B802000000 mov eax, 2 9466 00006860 D3E0 shl eax, cl 9467 00006862 66A3[A82D0500] mov [_@@pcm_steps], ax 9468 00006868 66A3[AA2D0500] mov [_@@pcm_steps+2], ax 9469 0000686E 833D[D09D0000]02 cmp dword [mp3_output_num_channels], 2 9470 00006875 7213 jb short .these_steps 9471 00006877 66C705[A82D0500]02- mov word [_@@pcm_steps], 2 9471 0000687F 00 9472 00006880 8D4400FE lea eax, [eax*2-2] ; [0FFFFFFFEh+eax*2] 9473 00006884 66A3[AA2D0500] mov [_@@pcm_steps+2], ax 9474 9475 .these_steps: 9476 0000688A A1[98F40000] mov eax, [mp3_samples_output_size] 9477 0000688F 8A0D[4F760000] mov cl, [option_rate_shift] 9478 00006895 020D[4E760000] add cl, [option_8bit] 9479 0000689B 020D[A42D0500] add cl, byte [_@@mono_convert] 9480 000068A1 D3E0 shl eax, cl 9481 ;push 0 ; lpOverlapped 9482 ;push diskresult ; lpNumberOfBytesRead 9483 000068A3 50 push eax ; nNumberOfBytesToRead 9484 000068A4 68[00620500] push (sample_buffer+1200h) ; sample_buffer+MP3_MAX_OUTPUT_SIZE 9485 000068A9 FF35[902D0500] push dword [mp3_pcm_handle] ; hFile 9486 ;call [ReadFile] 9487 ;;; 9488 ; 20/10/2024 9489 000068AF E8E9030000 call ReadFile 9490 000068B4 7306 jnc short .pcm_read_ok 9491 ; Note: File read error msg has been displayed 9492 000068B6 E83F010000 call mp3_close_pcm_file 9493 000068BB C3 retn 9494 .pcm_read_ok: 9495 ;;; 9496 000068BC 8B0D[98F40000] mov ecx, [mp3_samples_output_size] 9497 000068C2 D1E9 shr ecx, 1 9498 000068C4 0F849D000000 jz .compare_done 9499 000068CA BE[00500500] mov esi, sample_buffer ; decoded .mp3 9500 000068CF BF[00620500] mov edi, (sample_buffer+1200h) ; loaded .pcm 9501 9502 .compare_lop: 9503 000068D4 0FBF17 movsx edx, word [edi] 9504 000068D7 833D[A42D0500]00 cmp dword [_@@mono_convert], 0 9505 000068DE 7408 jz short .no_mono_convert 9506 000068E0 0FBF4702 movsx eax, word [edi+2] 9507 000068E4 01C2 add edx, eax 9508 000068E6 D1FA sar edx, 1 9509 9510 .no_mono_convert: 9511 000068E8 803D[4E760000]00 cmp byte [option_8bit], 0 9512 000068EF 7508 jnz short .compare_8bit 9513 000068F1 0FBF06 movsx eax, word [esi] ; get 16bit from decoded .mp3 9514 000068F4 83C602 add esi, 2 9515 000068F7 EB13 jmp short .compare_this 9516 9517 .compare_8bit: 9518 000068F9 0FB606 movzx eax, byte [esi] 9519 000068FC 46 inc esi ; convert .pcm 9520 000068FD 81C200800000 add edx, 8000h ; make unsigned 9521 00006903 C1FA08 sar edx, 8 ; div 100h 9522 00006906 80D200 adc dl, 0 ; round up 9523 00006909 80DA00 sbb dl, 0 ; undo on unsigned overflow 9524 9525 .compare_this: 9526 0000690C 29D0 sub eax, edx 9527 0000690E 7902 jns short .compare_abs ; calc difference 9528 00006910 F7D8 neg eax 9529 9530 .compare_abs: 9531 00006912 0105[982D0500] add [_@@avg_diff], eax 9532 00006918 8315[9C2D0500]00 adc dword [_@@avg_diff+4], 0 9533 0000691F 3B05[942D0500] cmp eax, [_@@max_diff] 9534 00006925 7223 jb short .not_max 9535 00006927 A3[942D0500] mov [_@@max_diff], eax 9536 0000692C 8B15[A02D0500] mov edx, [pcm_filepos] 9537 00006932 8915[AC2D0500] mov [_@@worst_pcm_filepos], edx 9538 00006938 8B15[042D0500] mov edx, [stream_pos] 9539 0000693E 2B15[002D0500] sub edx, [stream_start] 9540 00006944 8915[B02D0500] mov [_@@worst_mp3_filepos], edx 9541 9542 .not_max: 9543 0000694A 0FB705[A82D0500] movzx eax, word [_@@pcm_steps] 9544 00006951 C10D[A82D0500]10 ror dword [_@@pcm_steps], 16 ; next .pcm addr 9545 00006958 01C7 add edi, eax 9546 0000695A 0105[A02D0500] add [pcm_filepos], eax 9547 00006960 49 dec ecx 9548 00006961 0F856DFFFFFF jnz .compare_lop 9549 9550 .compare_done: 9551 00006967 A1[A89D0000] mov eax, [mp3_src_frame_size] 9552 0000696C 0105[042D0500] add [stream_pos], eax 9553 00006972 2905[082D0500] sub [bytes_left], eax 9554 00006978 E993FEFFFF jmp .lop 9555 9556 .exit: 9557 0000697D E878000000 call mp3_close_pcm_file 9558 00006982 BA[608C0000] mov edx, _@@txt_verify1 ; "verify max difference = " 9559 00006987 E86CFCFFFF call wrstr_edx 9560 0000698C A1[942D0500] mov eax, [_@@max_diff] 9561 00006991 E89FFCFFFF call wr_decimal_eax 9562 00006996 BA[798C0000] mov edx, _@@txt_verify1_at_mp3 ; " at mp3:" 9563 0000699B E858FCFFFF call wrstr_edx 9564 000069A0 A1[B02D0500] mov eax, [_@@worst_mp3_filepos] 9565 000069A5 E801FDFFFF call wrhexeax 9566 000069AA BA[828C0000] mov edx, _@@txt_verify2 ; ", average difference = " 9567 000069AF E844FCFFFF call wrstr_edx 9568 000069B4 A1[982D0500] mov eax, [_@@avg_diff] 9569 000069B9 8B15[9C2D0500] mov edx, [_@@avg_diff+4] 9570 000069BF 8B0D[90F40000] mov ecx, [mp3_total_output_size] 9571 000069C5 D1E9 shr ecx, 1 9572 000069C7 F7F1 div ecx 9573 000069C9 E867FCFFFF call wr_decimal_eax 9574 000069CE B02E mov al, '.' 9575 000069D0 E831000000 call wrchr 9576 000069D5 B80A000000 mov eax, 10 9577 000069DA F7E2 mul edx ; fraction*10 9578 000069DC F7F1 div ecx 9579 000069DE E89AFCFFFF call wrdigital ; show fraction of average difference 9580 000069E3 E821FCFFFF call wrcrlf 9581 000069E8 C3 retn 9582 9583 9584 ; =============== S U B R O U T I N E ======================================= 9585 9586 ; 20/10/2024 9587 mp3_open_pcm_file: 9588 ;push 0 ; hTemplateFile 9589 ;push 80h ; dwFlagsAndAttributes 9590 ;push 3 ; dwCreationDisposition 9591 ;push 0 ; lpSecurityAttributes 9592 ;push 0 ; dwShareMode 9593 ;push 80000000h ; dwDesiredAccess 9594 000069E9 FF35[00850000] push dword [mp3_pcm_fname] ; lpFileName 9595 ;call [CreateFileA] 9596 ;;; 9597 ; 20/10/2024 9598 000069EF E88F020000 call OpenFile 9599 ;jc short .return 9600 ;;; 9601 000069F4 A3[902D0500] mov [mp3_pcm_handle], eax 9602 ;.return: 9603 000069F9 C3 retn 9604 9605 9606 ; =============== S U B R O U T I N E ======================================= 9607 9608 ; 20/10/2024 9609 mp3_close_pcm_file: 9610 000069FA FF35[902D0500] push dword [mp3_pcm_handle] ; hObject 9611 ;call [CloseHandle] 9612 ;retn 9613 ;;; 9614 ; 20/10/2024 9615 00006A00 E8C9020000 call CloseFile 9616 ;;; 9617 00006A05 C3 retn 9618 9619 9620 ; --------------------------------------------------------------------------- 9621 9622 ; =============== S U B R O U T I N E ======================================= 9623 9624 ; 20/10/2024 9625 wrchr: 9626 ; TRDOS 386 System Call 9627 ; ebx = 2 -> write character onto STDOUT 9628 ;push ebx 9629 ;push ecx 9630 ;push eax 9631 00006A06 60 pusha 9632 ;;mov dword [diskresult], 0 9633 sys _stdio, 2, eax 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006A07 BB02000000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 00006A0C 89C1 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006A0E B82E000000 <1> mov eax, %1 130 <1> 131 00006A13 CD40 <1> int 40h 9634 ;jnc short .ok ; if EOF, eax = 0 9635 ;xor eax, eax ; 0 9636 ;.ok: 9637 ;mov [diskresult], eax ; written byte count 9638 00006A15 61 popa 9639 ;pop eax 9640 ;pop ecx 9641 ;pop ebx 9642 00006A16 C3 retn 9643 9644 9645 ; =============== S U B R O U T I N E ======================================= 9646 9647 ; 20/10/2024 9648 get_commandline: 9649 ; 21/10/2024 9650 00006A17 5D pop ebp ; near call return address 9651 ; esp = command line start address 9652 ;mov [command_line],esp 9653 00006A18 59 pop ecx ; argc ; number of arguments 9654 ; esp = pointer to argument 1 ; argv[0] 9655 00006A19 49 dec ecx 9656 00006A1A 0F8405010000 jz .help 9657 00006A20 58 pop eax ; argument 1 (PRG file name) 9658 00006A21 5E pop esi ; argument 2 (must be input file name) 9659 00006A22 BF[0C2D0500] mov edi, cmdline_buf 9660 .get_item: 9661 00006A27 89FB mov ebx, edi 9662 .char_lop: 9663 00006A29 AC lodsb 9664 00006A2A AA stosb 9665 00006A2B 3C00 cmp al, 0 9666 00006A2D 75FA jnz short .char_lop 9667 9668 00006A2F 8A03 mov al, [ebx] 9669 00006A31 3C2F cmp al, '/' 9670 00006A33 7442 jz short .switch 9671 00006A35 3C2D cmp al, '-' 9672 00006A37 743E jz short .switch 9673 00006A39 8B47FB mov eax, [edi-5] 9674 00006A3C 0D00202020 or eax, 20202000h 9675 00006A41 3D2E776176 cmp eax, '.wav' ; FASM & NASM syntax 9676 00006A46 7510 jnz short .not_wav_name 9677 00006A48 891D[FC840000] mov [mp3_dst_fname], ebx 9678 .get_items_lop: 9679 00006A4E 49 dec ecx 9680 00006A4F 0F8494000000 jz .done 9681 00006A55 5E pop esi ; next argument 9682 00006A56 EBCF jmp short .get_item 9683 9684 .not_wav_name: 9685 00006A58 8B47FB mov eax, [edi-5] 9686 00006A5B 0D00202020 or eax, 20202000h 9687 00006A60 3D2E70636D cmp eax, '.pcm' ; FASM & NASM syntax 9688 00006A65 7508 jnz short .not_pcm_name 9689 00006A67 891D[00850000] mov [mp3_pcm_fname], ebx 9690 00006A6D EBDF jmp short .get_items_lop 9691 9692 .not_pcm_name: 9693 00006A6F 891D[F8840000] mov [mp3_src_fname], ebx 9694 00006A75 EBD7 jmp short .get_items_lop 9695 9696 .switch: 9697 00006A77 817B016D6F6E6F cmp dword [ebx+1], 'mono' 9698 00006A7E 7509 jnz short .not_switch_mono 9699 00006A80 C605[4D760000]01 mov byte [option_mono], 1 9700 00006A87 EBC5 jmp short .get_items_lop 9701 9702 .not_switch_mono: 9703 00006A89 817B0166617374 cmp dword [ebx+1], 'fast' ; FASM & NASM syntax 9704 00006A90 7509 jnz short .not_fast_option 9705 00006A92 C605[50760000]01 mov byte [option_fast], 1 9706 00006A99 EBB3 jmp short .get_items_lop 9707 9708 .not_fast_option: 9709 00006A9B 817B0138626974 cmp dword [ebx+1], '8bit' 9710 00006AA2 7509 jnz short .not_switch_8bit 9711 00006AA4 C605[4E760000]01 mov byte [option_8bit], 1 9712 00006AAB EBA1 jmp short .get_items_lop 9713 9714 .not_switch_8bit: 9715 00006AAD 817B0168616C66 cmp dword [ebx+1], 'half' 9716 00006AB4 7509 jnz short .not_switch_half 9717 00006AB6 C605[4F760000]01 mov byte [option_rate_shift], 1 9718 00006ABD EB8F jmp short .get_items_lop 9719 9720 .not_switch_half: 9721 00006ABF 817B0171756172 cmp dword [ebx+1], 'quar' 9722 00006AC6 750C jnz short .not_switch_quarter 9723 00006AC8 C605[4F760000]02 mov byte [option_rate_shift], 2 9724 00006ACF E97AFFFFFF jmp .get_items_lop 9725 9726 .not_switch_quarter: 9727 00006AD4 817B0174657374 cmp dword [ebx+1], 'test' 9728 00006ADB 7548 jnz short .not_switch_test 9729 00006ADD C605[4C760000]01 mov byte [option_test], 1 9730 00006AE4 E965FFFFFF jmp .get_items_lop 9731 9732 .done: 9733 00006AE9 833D[F8840000]00 cmp dword [mp3_src_fname], 0 9734 00006AF0 7433 jz short .help 9735 ;;; Erdogan Tan - 17/10/2024 9736 ;mov edx, txt_ctrlc 9737 ;call wrstr_edx 9738 ; 20/10/2024 9739 sys _msg, txt_ctrlc, txt_ctrlc_size, 0Fh ; white 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006AF2 BB[9A8C0000] <1> mov ebx, %2 122 <1> %if %0 >= 3 123 00006AF7 B919000000 <1> mov ecx, %3 124 <1> %if %0 = 4 125 00006AFC BA0F000000 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006B01 B823000000 <1> mov eax, %1 130 <1> 131 00006B06 CD40 <1> int 40h 9740 ;;; 9741 00006B08 BA[698B0000] mov edx, txt_file ; "file: " 9742 00006B0D E8E6FAFFFF call wrstr_edx 9743 00006B12 8B15[F8840000] mov edx, [mp3_src_fname] 9744 00006B18 E8DBFAFFFF call wrstr_edx 9745 00006B1D E8E7FAFFFF call wrcrlf 9746 00006B22 F8 clc 9747 00006B23 55 push ebp ; return address 9748 00006B24 C3 retn 9749 9750 .not_switch_test: 9751 .help: 9752 ;;; Erdogan Tan - 17/10/2024 9753 00006B25 BA[B38C0000] mov edx, txt_about 9754 00006B2A E8C9FAFFFF call wrstr_edx 9755 ;;; 9756 00006B2F BA[E08B0000] mov edx, txt_help ; "usage: mp3play input.mp3 [output.wav] ["... 9757 00006B34 E8BFFAFFFF call wrstr_edx 9758 00006B39 F9 stc 9759 00006B3A 55 push ebp ; return address 9760 00006B3B C3 retn 9761 9762 ; =============== S U B R O U T I N E ======================================= 9763 9764 ; 21/10/2024 9765 set_break: 9766 ; set [u.break] -end of bss- address to 9767 ; end_of_bss at first (mp3 file will be loaded 9768 ; at the end of bss) 9769 ; ([u.break] initially points to the end of PRG file 9770 ; -code and data- except BSS section) 9771 ; 9772 ; TRDOS 386 system call 9773 ; Set break address 9774 ; ebx = new [u.break] 9775 ;sys _break, end_of_bss 9776 ; eax = new break address (dword aligned) 9777 9778 ; 10/01/2025 9779 sys _break, 100000h ; end of 1st 1MB 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006B3C BB00001000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006B41 B811000000 <1> mov eax, %1 130 <1> 131 00006B46 CD40 <1> int 40h 9780 9781 00006B48 A3[002D0500] mov [stream_start], eax 9782 00006B4D A3[042D0500] mov [stream_pos], eax 9783 9784 00006B52 C3 retn 9785 9786 9787 ; =============== S U B R O U T I N E ======================================= 9788 9789 ; 20/10/2024 9790 9791 open_and_mmap_the_file: 9792 ; 21/10/2024 9793 ; TRDOS 386 system call 9794 ; Open File 9795 ; ebx = pointer to filename 9796 ; ecx = open mode, 0 = read 9797 sys _open, [mp3_src_fname], 0 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006B53 8B1D[F8840000] <1> mov ebx, %2 122 <1> %if %0 >= 3 123 00006B59 B900000000 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006B5E B805000000 <1> mov eax, %1 130 <1> 131 00006B63 CD40 <1> int 40h 9798 00006B65 7270 jc short .not_found 9799 9800 00006B67 A3[FC2C0500] mov [hFile], eax 9801 9802 ; get file size by using systell system call 9803 ; (not applicable for TRDOS 386 Kernel v2.0.9 and earlier) 9804 ; TRDOS 386 system call 9805 ; Get current file (offset) pointer 9806 ; ebx = file handle (file descriptor) 9807 ; ecx = 0, offset 9808 ; edx = 2, from the end of file 9809 ;sys _tell, eax, 0, 2 9810 ;mov [mp3_file_size], eax 9811 9812 ; *** get file size *** 9813 ; TRDOS 386 system call 9814 ; Set file (offset) pointer to file size 9815 ; (needed for TRDOS kernel v2.0.9 and earlier) 9816 ; ebx = file handle (file descriptor) 9817 ; ecx = 0, offset 9818 ; edx = 2, from the end of file 9819 sys _seek, eax, 0, 2 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006B6C 89C3 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 00006B6E B900000000 <1> mov ecx, %3 124 <1> %if %0 = 4 125 00006B73 BA02000000 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006B78 B813000000 <1> mov eax, %1 130 <1> 131 00006B7D CD40 <1> int 40h 9820 ; TRDOS 386 system call 9821 ; Get current file (offset) pointer 9822 ; (needed for TRDOS 386 kernel version 2.0.9 and earlier) 9823 00006B7F 31D2 xor edx, edx ; 0 9824 ; ecx = 0 9825 ; ebx = file handle 9826 sys _tell 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006B81 B814000000 <1> mov eax, %1 130 <1> 131 00006B86 CD40 <1> int 40h 9827 00006B88 A3[80F40000] mov [mp3_file_size], eax 9828 9829 ; *** set file offset pointer to 0 again *** 9830 ; TRDOS 386 system call 9831 ; Set file (offset) pointer 9832 ; ebx = file handle (file descriptor) 9833 ; ecx = 0, offset 9834 ; edx = 0, from the beginning/start of file 9835 00006B8D 50 push eax 9836 sys _seek 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006B8E B813000000 <1> mov eax, %1 130 <1> 131 00006B93 CD40 <1> int 40h 9837 00006B95 58 pop eax 9838 9839 ; now, set [u.break] address to the end of mp3 file 9840 ; at memory -in BSS section- 9841 ; (not necessary for TRDOS 386 PRG files) 9842 ; (this system call will allocate user memory pages 9843 ; before sysread system call.. early) 9844 ;add eax, end_of_bss 9845 ; 13/01/2025 9846 00006B96 0500001000 add eax, 100000h ; + end of 1st 1MB 9847 ; TRDOS 386 system call 9848 ; Set break address 9849 ; ebx = new [u.break] 9850 sys _break, eax 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006B9B 89C3 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006B9D B811000000 <1> mov eax, %1 130 <1> 131 00006BA2 CD40 <1> int 40h 9851 9852 ; TRDOS 386 system call 9853 ; Read file 9854 ; ebx = file handle (file descriptor) 9855 ; ecx = buffer address 9856 ; edx = byte count 9857 sys _read, [hFile], [stream_start], [mp3_file_size] 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006BA4 8B1D[FC2C0500] <1> mov ebx, %2 122 <1> %if %0 >= 3 123 00006BAA 8B0D[002D0500] <1> mov ecx, %3 124 <1> %if %0 = 4 125 00006BB0 8B15[80F40000] <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006BB6 B803000000 <1> mov eax, %1 130 <1> 131 00006BBB CD40 <1> int 40h 9858 00006BBD 7204 jc short .read_error 9859 00006BBF 39D0 cmp eax, edx 9860 00006BC1 730E jnb short .ok 9861 ;or eax, eax 9862 ;jnz short .ok 9863 .read_error: 9864 ; TRDOS 386 system call 9865 ; Close file 9866 ; ebx = file handle (file descriptor) 9867 ;sys _close, [hFile] 9868 sys _close 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006BC3 B806000000 <1> mov eax, %1 130 <1> 131 00006BC8 CD40 <1> int 40h 9869 9870 00006BCA BA[BB6C0000] mov edx, txt_read_err 9871 00006BCF EB0B jmp short .r_err_msg 9872 .ok: 9873 00006BD1 A3[082D0500] mov [bytes_left], eax ; read count 9874 00006BD6 C3 retn 9875 .not_found: 9876 00006BD7 BA[C68B0000] mov edx, txt_not_found ; "cannot open source file\r\n" 9877 .r_err_msg: 9878 00006BDC E817FAFFFF call wrstr_edx 9879 00006BE1 F9 stc 9880 00006BE2 C3 retn 9881 9882 ;txt_read_err db 'File read error!',0Dh,0Ah,0 9883 9884 9885 ; =============== S U B R O U T I N E ======================================= 9886 9887 ; 20/10/2024 9888 print_msg: 9889 ; TRDOS 386 system call 9890 ; write/display message on screen 9891 ; ebx = ASCIIZ message (text) address 9892 ; ecx = max. message length (stop count before char zero) 9893 ; edx = character color (CGA) 9894 00006BE3 B9FF000000 mov ecx, 255 9895 00006BE8 BA0B000000 mov edx, 0Bh ; DL ; cyan 9896 sys _msg 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006BED B823000000 <1> mov eax, %1 130 <1> 131 00006BF2 CD40 <1> int 40h 9897 00006BF4 C3 retn 9898 9899 9900 ; =============== S U B R O U T I N E ======================================= 9901 9902 ; 20/10/2024 9903 GetTickCount: 9904 ; TRDOS 386 system call 9905 ; get current time, get tick count 9906 ; ebx = 4 -> get count of system timer ticks 9907 sys _time, 4 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006BF5 BB04000000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006BFA B80D000000 <1> mov eax, %1 130 <1> 131 00006BFF CD40 <1> int 40h 9908 ; eax = system timer ticks (18.2 ticks per second) 9909 00006C01 BA15F4BC20 mov edx, 549254165 ; 10^10/18.2 9910 00006C06 F7E2 mul edx 9911 ; edx:eax = milliseconds * 10^7 9912 00006C08 BB80969800 mov ebx, 10000000 9913 00006C0D F7F3 div ebx ; 10^7 9914 ; eax = milliseconds 9915 00006C0F 81FA404B4C00 cmp edx, 5000000 ; 10^7/2 9916 00006C15 7201 jb short .ok 9917 00006C17 40 inc eax ; round up 9918 .ok: 9919 00006C18 C3 retn 9920 9921 9922 ; =============== E X I T =================================================== 9923 9924 ; 20/10/2024 9925 ExitProcess: 9926 00006C19 31DB xor ebx, ebx ; mov ebx, 0 ; exit code 9927 sys _exit 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006C1B B801000000 <1> mov eax, %1 130 <1> 131 00006C20 CD40 <1> int 40h 9928 ;hang: 9929 ;jmp short hang 9930 9931 9932 ; =============== S U B R O U T I N E ======================================= 9933 9934 ; 20/10/2024 9935 WriteFile: 9936 00006C22 58 pop eax ; near call return address 9937 00006C23 5B pop ebx 9938 00006C24 59 pop ecx 9939 00006C25 5A pop edx 9940 00006C26 50 push eax 9941 ; TRDOS 386 system call 9942 ; Write file 9943 ; ebx = file handle (file descriptor) 9944 ; ecx = buffer address 9945 ; edx = byte count 9946 sys _write 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006C27 B804000000 <1> mov eax, %1 130 <1> 131 00006C2C CD40 <1> int 40h 9947 00006C2E 730F jnc short .ok 9948 00006C30 39D0 cmp eax, edx 9949 00006C32 730B jnb short .ok 9950 ;or eax, eax 9951 ;jnz short .ok 9952 9953 00006C34 BA[406C0000] mov edx, txt_write_err 9954 00006C39 E8BAF9FFFF call wrstr_edx 9955 00006C3E F9 stc 9956 .ok: 9957 00006C3F C3 retn 9958 9959 00006C40 46696C652077726974- txt_write_err db 'File write error!',0Dh,0Ah,0 9959 00006C49 65206572726F72210D- 9959 00006C52 0A00 9960 9961 9962 ; =============== S U B R O U T I N E ======================================= 9963 9964 ; 20/10/2024 9965 CreateFile: 9966 00006C54 58 pop eax ; near call return address 9967 00006C55 5B pop ebx 9968 00006C56 50 push eax 9969 ; TRDOS 386 system call 9970 ; Create file 9971 ; ebx = (ASCIIZ) file name address 9972 ; ecx = mode 9973 00006C57 31C9 xor ecx, ecx ; CL ; mov ecx, 0 ; ordinary file 9974 sys _creat 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006C59 B808000000 <1> mov eax, %1 130 <1> 131 00006C5E CD40 <1> int 40h 9975 00006C60 730B jnc short .ok ; eax = file handle 9976 9977 00006C62 BA[6E6C0000] mov edx, txt_create_err 9978 00006C67 E88CF9FFFF call wrstr_edx 9979 00006C6C F9 stc 9980 .ok: 9981 00006C6D C3 retn 9982 9983 00006C6E 46696C652063726561- txt_create_err db 'File create error!',0Dh,0Ah,0 9983 00006C77 7465206572726F7221- 9983 00006C80 0D0A00 9984 9985 9986 ; =============== S U B R O U T I N E ======================================= 9987 9988 ; 20/10/2024 9989 OpenFile: 9990 00006C83 58 pop eax ; near call return address 9991 00006C84 5B pop ebx 9992 00006C85 50 push eax 9993 ; TRDOS 386 system call 9994 ; Open file 9995 ; ebx = (ASCIIZ) file name address 9996 ; ecx = mode 9997 00006C86 31C9 xor ecx, ecx ; CL ; mov ecx, 0 ; ordinary file 9998 sys _open 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006C88 B805000000 <1> mov eax, %1 130 <1> 131 00006C8D CD40 <1> int 40h 9999 ;jnc short .ok ; eax = file handle 10000 ; 10001 ;mov edx, txt_open_err 10002 ;call wrstr_edx 10003 ;stc 10004 ;.ok: 10005 00006C8F C3 retn 10006 10007 ;txt_open_err db 'File not found!',0Dh,0Ah,0 10008 ;db 'File open error!',ODh,0Ah,0 10009 10010 10011 ; =============== S U B R O U T I N E ======================================= 10012 10013 ; 20/10/2024 10014 SetFilePointer: 10015 00006C90 58 pop eax ; near call return address 10016 00006C91 5B pop ebx 10017 00006C92 59 pop ecx 10018 00006C93 5A pop edx 10019 00006C94 50 push eax 10020 ; TRDOS 386 system call 10021 ; Set file offset pointer ; sysseek 10022 ; ebx = file handle (file descriptor) 10023 ; ecx = offset 10024 ; edx = switch, DL = 0 = from the start of file 10025 ; 1 = from the current offset 10026 ; 2 = from the end of file 10027 sys _seek 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006C95 B813000000 <1> mov eax, %1 130 <1> 131 00006C9A CD40 <1> int 40h 10028 ; eax = (value of) new offset pointer 10029 10030 00006C9C C3 retn 10031 10032 10033 ; =============== S U B R O U T I N E ======================================= 10034 10035 ; 20/10/2024 10036 ReadFile: 10037 00006C9D 58 pop eax ; near call return address 10038 00006C9E 5B pop ebx 10039 00006C9F 59 pop ecx 10040 00006CA0 5A pop edx 10041 00006CA1 50 push eax 10042 ; TRDOS 386 system call 10043 ; Read file 10044 ; ebx = file handle (file descriptor) 10045 ; ecx = buffer address 10046 ; edx = byte count 10047 sys _read 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006CA2 B803000000 <1> mov eax, %1 130 <1> 131 00006CA7 CD40 <1> int 40h 10048 00006CA9 730F jnc short .ok 10049 00006CAB 39D0 cmp eax, edx 10050 00006CAD 730B jnb short .ok 10051 ;or eax, eax 10052 ;jnz short .ok 10053 10054 00006CAF BA[BB6C0000] mov edx, txt_read_err 10055 00006CB4 E83FF9FFFF call wrstr_edx 10056 00006CB9 F9 stc 10057 .ok: 10058 00006CBA C3 retn 10059 10060 00006CBB 46696C652072656164- txt_read_err db 'File read error!',0Dh,0Ah,0 10060 00006CC4 206572726F72210D0A- 10060 00006CCD 00 10061 10062 10063 ; =============== S U B R O U T I N E ======================================= 10064 10065 ; 20/10/2024 10066 CloseFile: 10067 00006CCE 58 pop eax ; near call return address 10068 00006CCF 5B pop ebx 10069 00006CD0 50 push eax 10070 ; TRDOS 386 system call 10071 ; Close file 10072 ; ebx = file handle (file descriptor) 10073 sys _close 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006CD1 B806000000 <1> mov eax, %1 130 <1> 131 00006CD6 CD40 <1> int 40h 10074 10075 00006CD8 C3 retn 10076 10077 10078 ; --------------------------------------------------------------------------- 10079 ; TRDOS 386 Audio System Functions 10080 ; --------------------------------------------------------------------------- 10081 10082 ; =============== S U B R O U T I N E ======================================= 10083 10084 ; 10/01/2025 10085 ; 20/10/2024 10086 detect_enable_audio_device: 10087 00006CD9 66C705[8A8D0000]80- mov word [max_frequency], 48000 10087 00006CE1 BB 10088 ; 10/01/2025 10089 ;mov byte [blocks], 8 10090 10091 ; check AC'97 hardware at first 10092 ; (48kHz support) 10093 ; TRDOS 386 system call 10094 ; sysaudio 10095 ; Detect (BH=1) AC'97 (BL=2) Audio Device 10096 .ac97: 10097 sys _audio, 0102h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006CE2 BB02010000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006CE7 B820000000 <1> mov eax, %1 130 <1> 131 00006CEC CD40 <1> int 40h 10098 00006CEE 7245 jc short .sb16 10099 00006CF0 C605[888D0000]02 mov byte [audio_hardware], 2 ; AC97 10100 10101 ;;;; 10102 ; 12/01/2025 (ref: playwav9.s, 18/12/2024) 10103 sys _audio, 0E00h ; get audio controller info 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006CF7 BB000E0000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006CFC B820000000 <1> mov eax, %1 130 <1> 131 00006D01 CD40 <1> int 40h 10104 ; EAX = IRQ Number in AL 10105 ; Audio Device Number in AH 10106 ; EBX = DEV/VENDOR ID 10107 ; (DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV) 10108 ; ECX = BUS/DEV/FN 10109 ; (00000000BBBBBBBBDDDDDFFF00000000) 10110 ; EDX = NABMBAR/NAMBAR (for AC97) 10111 ; (Low word, DX = NAMBAR address) 10112 ; EDX = Base IO Addr (DX) for SB16 & VT8233 10113 10114 00006D03 891D[788D0000] mov [dev_vendor], ebx 10115 00006D09 890D[748D0000] mov [bus_dev_fn], ecx 10116 10117 00006D0F 668915[7C8D0000] mov [NAMBAR], dx ; save audio mixer base addr 10118 ;shr edx, 16 10119 ;mov [NABMBAR], dx ; save bus master base addr 10120 00006D16 8915[7C8D0000] mov [NAMBAR], edx 10121 10122 00006D1C A2[848D0000] mov [ac97_int_ln_reg], al 10123 ;;;; 10124 10125 ; TRDOS 386 system call 10126 ; sysaudio 10127 ; Get AC'97 Codec info 10128 ; (Function 14, sub function 1) 10129 sys _audio, 0E01h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006D21 BB010E0000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006D26 B820000000 <1> mov eax, %1 130 <1> 131 00006D2B CD40 <1> int 40h 10130 ; Save Variable Rate Audio support bit 10131 00006D2D 2401 and al, 1 10132 00006D2F A2[898D0000] mov [vra], al 10133 00006D34 C3 retn 10134 .sb16: 10135 ; check Sound Blaster 16 card at second 10136 ; (44100Hz support, but 24kHz will be used) 10137 ; TRDOS 386 system call 10138 ; sysaudio 10139 ; Detect (BH=1) SB16 (BL=1) Audio Card 10140 sys _audio, 0101h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006D35 BB01010000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006D3A B820000000 <1> mov eax, %1 130 <1> 131 00006D3F CD40 <1> int 40h 10141 00006D41 7228 jc short .vt8233 10142 00006D43 C605[888D0000]01 mov byte [audio_hardware], 1 ; SB16 10143 00006D4A 66C705[8A8D0000]44- mov word [max_frequency], 44100 10143 00006D52 AC 10144 ; 10/01/2025 10145 ;;mov byte [blocks], 7 10146 ;dec byte [blocks] 10147 10148 ;;;; 10149 ; 12/01/2025 (ref: sb16play.s, 20/12/2024) 10150 sys _audio, 0E00h ; get audio controller info 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006D53 BB000E0000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006D58 B820000000 <1> mov eax, %1 130 <1> 131 00006D5D CD40 <1> int 40h 10151 10152 00006D5F 8915[808D0000] mov [audio_io_base], edx 10153 00006D65 A2[848D0000] mov [audio_intr], al 10154 ;;;; 10155 10156 00006D6A C3 retn 10157 .vt8233: 10158 ; check VIA VT3237R (VT8233) hardware at third 10159 ; (48kHz support) 10160 ; TRDOS 386 system call 10161 ; sysaudio 10162 ; Detect (BH=1) VT8237R (BL=3) Audio Device 10163 sys _audio, 0103h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006D6B BB03010000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006D70 B820000000 <1> mov eax, %1 130 <1> 131 00006D75 CD40 <1> int 40h 10164 00006D77 7208 jc short .hda 10165 00006D79 C605[888D0000]03 mov byte [audio_hardware], 3 ; VT8237R 10166 00006D80 C3 retn 10167 .hda: 10168 ; check Intel HDA hardware at last 10169 ; (48kHz support) 10170 ; TRDOS 386 system call 10171 ; sysaudio 10172 ; Detect (BH=1) Intel HDA (BL=4) Audio Device 10173 sys _audio, 0104h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006D81 BB04010000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006D86 B820000000 <1> mov eax, %1 130 <1> 131 00006D8B CD40 <1> int 40h 10174 00006D8D 7208 jc short .err 10175 00006D8F C605[888D0000]04 mov byte [audio_hardware], 4 ; HDA 10176 00006D96 C3 retn 10177 .err: 10178 00006D97 BA[A36D0000] mov edx, txt_audio_nf_err 10179 00006D9C E857F8FFFF call wrstr_edx 10180 00006DA1 F9 stc 10181 00006DA2 C3 retn 10182 10183 00006DA3 50726F706572206175- txt_audio_nf_err: db 'Proper audio hardware not found!',0Dh,0Ah,0 10183 00006DAC 64696F206861726477- 10183 00006DB5 617265206E6F742066- 10183 00006DBE 6F756E64210D0A00 10184 10185 10186 ; =============== CONSTANT ================================================== 10187 10188 ; 21/10/2024 10189 MP3_MAX_OUTPUT_SIZE equ 2*2*18*32*2 10190 ; = 1200h = 4608 decimal = 2 channels, 2 granules, 18*32, 2 byte(16bit) 10191 10192 10193 ; =============== S U B R O U T I N E ======================================= 10194 10195 ; 12/01/2025 10196 audio_system_init: 10197 ;mov eax, sample_buffer_size 10198 ; 10/01/2025 10199 ;mov byte [blocks], 16 10200 ; 12/01/2025 10201 00006DC6 C605[8E8D0000]08 mov byte [blocks], 8 10202 00006DCD A1[98F40000] mov eax, [mp3_samples_output_size] 10203 00006DD2 C1E003 shl eax, 3 ; * 8 10204 ;shl eax, 4 ; * 16 10205 .asi@: 10206 ; 12/01/2025 10207 ;cmp eax, 65536 10208 ;jna short .asi@@ 10209 ;sub eax, [mp3_samples_output_size] 10210 ;dec byte [blocks] 10211 ;;; 10212 ; 11/01/2025 10213 ;test byte [blocks], 1 10214 ;jz short .asi@ 10215 ;dec byte [blocks] ; even number 10216 ;sub eax, [mp3_samples_output_size] 10217 ;;; 10218 ;jmp short .asi@ 10219 .asi@@: 10220 00006DD5 803D[888D0000]01 cmp byte [audio_hardware], 1 ; SB16 10221 00006DDC 7515 jne short .bufaloc 10222 .asi@@@: 10223 ; 10/01/2025 10224 00006DDE 3D00800000 cmp eax, 32768 10225 00006DE3 760E jna short .bufaloc 10226 ; sample_buffer_size = 36864 bytes ; 8 blocks 10227 ;sub eax, MP3_MAX_OUTPUT_SIZE 10228 ; eax = 32256 ; 7 blocks 10229 ; 10/01/2025 10230 00006DE5 2B05[98F40000] sub eax, [mp3_samples_output_size] 10231 00006DEB FE0D[8E8D0000] dec byte [blocks] 10232 ;;; 10233 ; 11/01/2025 10234 ;test byte [blocks], 1 10235 ;jz short .asi@@@ 10236 ;dec byte [blocks] ; even number 10237 ;sub eax, [mp3_samples_output_size] 10238 ;;; 10239 00006DF1 EBEB jmp short .asi@@@ 10240 .bufaloc: 10241 ; TRDOS 386 system call 10242 ; sysaudio 10243 ; Allocate audio buffer (for user) 10244 ; ebx = 0200h (BH=2) 10245 ; ecx = buffer size (in bytes) 10246 ; edx = buffer address (virtual) 10247 00006DF3 A3[908D0000] mov [buffer_size], eax 10248 sys _audio, 0200h, eax, sample_buffer 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006DF8 BB00020000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 00006DFD 89C1 <1> mov ecx, %3 124 <1> %if %0 = 4 125 00006DFF BA[00500500] <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006E04 B820000000 <1> mov eax, %1 130 <1> 131 00006E09 CD40 <1> int 40h 10249 00006E0B 7225 jc short .init_err 10250 10251 ; 12/01/2025 10252 ; clear audio buffer (before playback) 10253 00006E0D BF[00500500] mov edi, sample_buffer 10254 ; ecx = buffer size in bytes 10255 00006E12 C1E902 shr ecx, 2 ; double word 10256 00006E15 31C0 xor eax, eax 10257 00006E17 F3AB rep stosd 10258 10259 ; TRDOS 386 system call 10260 ; sysaudio 10261 ; Initialize audio device (bh = 3) 10262 ; bl = 01h -> CallBack method 10263 ; edx = Callback service address (virtual) 10264 ; ecx = 0 ; CL = srb value ; not used 10265 sys _audio, 0301h, 0, audio_callback 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006E19 BB01030000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 00006E1E B900000000 <1> mov ecx, %3 124 <1> %if %0 = 4 125 00006E23 BA[656E0000] <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006E28 B820000000 <1> mov eax, %1 130 <1> 131 00006E2D CD40 <1> int 40h 10266 ; 12/01/2025 10267 ; SRB method (faster than callback method) 10268 ; bl = 0 -> Signal Response Byte method 10269 ; cl = 1 -> SRB set value 10270 ; (will be set by audio IRQ service of the kernel) 10271 ; edx = SRB address -one byte data- 10272 ;sys _audio, 0300h, 1, srb 10273 00006E2F 7201 jc short .init_err 10274 00006E31 C3 retn 10275 .init_err: 10276 init_error: ; 13/01/2025 10277 00006E32 BA[3E6E0000] mov edx, txt_audio_init_err 10278 00006E37 E8BCF7FFFF call wrstr_edx 10279 00006E3C F9 stc 10280 00006E3D C3 retn 10281 10282 00006E3E 417564696F20686172- txt_audio_init_err: db 'Audio hardware initialization error!',0Dh,0Ah,0 10282 00006E47 647761726520696E69- 10282 00006E50 7469616C697A617469- 10282 00006E59 6F6E206572726F7221- 10282 00006E62 0D0A00 10283 10284 10285 ; =============== S U B R O U T I N E ======================================= 10286 10287 ; 21/10/2024 10288 audio_callback: 10289 ; Operating system has directed CPU here because of 10290 ; user (2nd) stage of the audio hardware interrupt service. 10291 ; This procedure must be short and return to operating 10292 ; system again via sysrelease system call 10293 ; (or any system call here will be handled as sysrelease). 10294 10295 00006E65 C605[8C8D0000]01 mov byte [srb], 1 10296 10297 ; 12/01/2025 10298 00006E6C E884010000 call try_enqueue_all_blocks 10299 10300 sys _rele ; return from callback service 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006E71 B827000000 <1> mov eax, %1 130 <1> 131 00006E76 CD40 <1> int 40h 10301 10302 ; we must not come here ! 10303 00006E78 BBFFFFFFFF mov ebx, -1 10304 sys _exit 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006E7D B801000000 <1> mov eax, %1 130 <1> 131 00006E82 CD40 <1> int 40h 10305 ;jmp short audio_callback 10306 10307 10308 ; =============== S U B R O U T I N E ======================================= 10309 10310 ; 15/01/2025 (mp3play3.s & mp3play2.s) 10311 ; 13/01/2025 10312 ; 12/01/2025 10313 ; 10/01/2025 10314 ; 21/10/2024 10315 mp3_cast_to_speaker: 10316 ; 13/01/2025 10317 %if 1 10318 ; Start to play 10319 00006E84 A1[D89D0000] mov eax, [mp3_bytes_per_sample] 10320 ;shr al, 1 ; 8 -> 0, 16 -> 1 10321 ;shl al, 1 ; 16 -> 2, 8 -> 0 10322 00006E89 2402 and al, 2 ; 22/10/2024 10323 00006E8B 8B1D[D09D0000] mov ebx, [mp3_output_num_channels] 10324 00006E91 4B dec ebx 10325 00006E92 08C3 or bl, al 10326 00006E94 8B0D[D49D0000] mov ecx, [mp3_output_sample_rate] 10327 00006E9A B704 mov bh, 4 ; start to play 10328 10329 ; 13/01/2025 10330 mp3_cast_to_speaker_@: 10331 00006E9C 53 push ebx 10332 00006E9D 51 push ecx 10333 %endif 10334 ; 12/01/2025 10335 ;call try_enqueue_all_blocks 10336 10337 ; 12/01/2025 10338 ;cmp dword [bytes_left],0 10339 ;jz short .playback 10340 10341 ; 12/01/2025 10342 ; (here audio buffer -sample_buffer- is empty) 10343 ; (clear dma half buffer 1) 10344 sys _audio, 1001h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006E9E BB01100000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006EA3 B820000000 <1> mov eax, %1 130 <1> 131 00006EA8 CD40 <1> int 40h 10345 ; (clear dma half buffer 2) 10346 ;sys _audio, 1002h 10347 10348 ; TRDOS 386 system call 10349 ; sysaudio 10350 ; bh = 16 : update (current, first) dma half buffer 10351 ; bl = 0 : then switch to the next (second) half buffer 10352 sys _audio, 1000h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006EAA BB00100000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006EAF B820000000 <1> mov eax, %1 130 <1> 131 00006EB4 CD40 <1> int 40h 10353 10354 ; 12/01/2025 10355 ; 22/10/2024 10356 ;call try_enqueue_all_blocks 10357 .playback: 10358 ; TRDOS 386 system call 10359 ; sysaudio 10360 ; Set Master Volume Level (BL=0 or 80h) 10361 ; for next playing (BL>=80h) 10362 ;sys _audio, 0B80h, 1D1Dh 10363 sys _audio, 0B00h, 1D1Dh 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006EB6 BB000B0000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 00006EBB B91D1D0000 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006EC0 B820000000 <1> mov eax, %1 130 <1> 131 00006EC5 CD40 <1> int 40h 10364 10365 ;mov byte [volume_level], 1Dh 10366 00006EC7 880D[8D8D0000] mov [volume_level], cl 10367 ; 13/01/2025 10368 %if 0 10369 ; Start to play 10370 mov eax, [mp3_bytes_per_sample] 10371 ;shr al, 1 ; 8 -> 0, 16 -> 1 10372 ;shl al, 1 ; 16 -> 2, 8 -> 0 10373 and al, 2 ; 22/10/2024 10374 mov ebx, [mp3_output_num_channels] 10375 dec ebx 10376 or bl, al 10377 mov ecx, [mp3_output_sample_rate] 10378 mov bh, 4 ; start to play 10379 %else 10380 00006ECD 59 pop ecx ; sample rate (frequency) 10381 00006ECE 5B pop ebx ; play mode (bl) 10382 %endif 10383 ; TRDOS 386 system call 10384 ; sysaudio 10385 ; bh = 4 -> start to play 10386 ; bl = mode -> bit 0, 1 = stereo, 0 = mono 10387 ; bit 1, 1 = 16 bit, 0 = 8 bit 10388 ; cx = sample rate (hertz) 10389 sys _audio 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006ECF B820000000 <1> mov eax, %1 130 <1> 131 00006ED4 CD40 <1> int 40h 10390 10391 ; 12/01/2025 10392 00006ED6 C605[8C8D0000]00 mov byte [srb], 0 10393 ;;; 10394 10395 .playback_lop: 10396 00006EDD 31C0 xor eax, eax 10397 00006EDF 3905[082D0500] cmp [bytes_left], eax ; 0 10398 00006EE5 7508 jnz short .playback_next 10399 ; 22/10/2024 10400 00006EE7 3805[34850000] cmp byte [num_enqueued_frames], al ; 0 10401 00006EED 7447 jz short .playback_end 10402 .playback_next: 10403 00006EEF A2[34850000] mov [num_enqueued_frames], al ; 0 10404 00006EF4 803D[8C8D0000]01 cmp byte [srb], 1 ; audio interrupt status 10405 00006EFB 7274 jb short .getchar 10406 ;mov byte [srb], 0 ; reset 10407 00006EFD A2[8C8D0000] mov [srb], al ; 0 10408 ; 12/01/2025 10409 ;call try_enqueue_all_blocks 10410 ; 15/01/2025 10411 ;cmp byte [blocks], 0 ; interpolation ? 10412 ;jna short .interpolated ; yes 10413 ; 15/01/2025 (mp3play2.s) 10414 00006F02 803D[9C8D0000]00 cmp byte [convert], 0 10415 00006F09 7718 ja short .converted 10416 10417 ; 15/01/2025 10418 00006F0B B44E mov ah, 4Eh ; red background, yellow font 10419 .indicator: 10420 ;;; 10/01/2025 10421 00006F0D A0[728D0000] mov al, [half_buffer] 10422 00006F12 8035[728D0000]01 xor byte [half_buffer], 1 10423 ;mov ah, 4Eh 10424 00006F19 0431 add al, '1' 10425 00006F1B 66A300800B00 mov [0B8000h], ax 10426 ;;; 10427 00006F21 EBBA jmp short .playback_lop 10428 10429 .converted: 10430 ;.interpolated: 10431 ; 15/01/2025 10432 ; (a solution for very fast indicator digit change) 10433 ; (8 to 1) 10434 00006F23 FE05[9D8D0000] inc byte [counter] 10435 00006F29 A0[9D8D0000] mov al, [counter] 10436 00006F2E 2407 and al, 7 10437 00006F30 75AB jnz short .playback_lop 10438 00006F32 B41E mov ah, 1Eh ; blue background, yellow font 10439 00006F34 EBD7 jmp short .indicator 10440 10441 .playback_end: 10442 ;;; 10/01/2025 10443 00006F36 66B8304E mov ax, 4E30h 10444 00006F3A 66A300800B00 mov [0B8000h], ax 10445 ;;; 10446 10447 ; TRDOS 386 system call 10448 ; sysaudio 10449 ; Stop playing 10450 sys _audio, 0700h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006F40 BB00070000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006F45 B820000000 <1> mov eax, %1 130 <1> 131 00006F4A CD40 <1> int 40h 10451 ; Cancel callback service (for user) 10452 sys _audio, 0900h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006F4C BB00090000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006F51 B820000000 <1> mov eax, %1 130 <1> 131 00006F56 CD40 <1> int 40h 10453 ; Deallocate audio buffer (for user) 10454 sys _audio, 0A00h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006F58 BB000A0000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006F5D B820000000 <1> mov eax, %1 130 <1> 131 00006F62 CD40 <1> int 40h 10455 ; Disable audio device 10456 sys _audio, 0C00h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006F64 BB000C0000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006F69 B820000000 <1> mov eax, %1 130 <1> 131 00006F6E CD40 <1> int 40h 10457 00006F70 C3 retn 10458 10459 .getchar: 10460 ; TRDOS 386 system call 10461 ; sysstdio 10462 ; BL = 1 -> read a character on stdin (no wait) 10463 sys _stdio, 1 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006F71 BB01000000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006F76 B82E000000 <1> mov eax, %1 130 <1> 131 00006F7B CD40 <1> int 40h 10464 00006F7D 21C0 and eax, eax 10465 00006F7F 0F846AFFFFFF jz .playback_next ; 15/01/2024 10466 10467 00006F85 3C2B cmp al, '+' ; increase sound volume 10468 00006F87 741B je short .inc_volume 10469 00006F89 3C2D cmp al, '-' 10470 00006F8B 7441 je short .dec_volume 10471 10472 ;;; 10473 ; 10/01/2025 10474 ;cmp ah, 01h 10475 00006F8D 3C1B cmp al, 1Bh ; ESC 10476 00006F8F 74A5 je short .playback_end 10477 ;cmp ax, 2E03h 10478 00006F91 3C03 cmp al, 03h ; CTRL+C 10479 00006F93 74A1 je short .playback_end 10480 ;;; 10481 ; 12/01/2025 10482 00006F95 24DF and al, 0DFh 10483 00006F97 3C48 cmp al, 'H' 10484 00006F99 7446 je short .hw_info 10485 00006F9B 3C42 cmp al, 'B' 10486 00006F9D 744C je short .b_info 10487 00006F9F E94BFFFFFF jmp .playback_next 10488 10489 .inc_volume: 10490 00006FA4 8A0D[8D8D0000] mov cl, [volume_level] 10491 00006FAA 80F91F cmp cl, 1Fh ; 31 10492 00006FAD 0F833CFFFFFF jnb .playback_next 10493 00006FB3 FEC1 inc cl 10494 .chg_volume: 10495 00006FB5 880D[8D8D0000] mov [volume_level], cl 10496 00006FBB 88CD mov ch, cl 10497 ; TRDOS 386 system call 10498 ; sysstdio 10499 ; Set master volume level 10500 ; bh = 11 10501 ; cl = left channel volume (0 to 31 max) 10502 ; ch = right channel volume (0 to 31 max) 10503 sys _audio, 0B00h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006FBD BB000B0000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006FC2 B820000000 <1> mov eax, %1 130 <1> 131 00006FC7 CD40 <1> int 40h 10504 00006FC9 E921FFFFFF jmp .playback_next 10505 .dec_volume: 10506 00006FCE 8A0D[8D8D0000] mov cl, [volume_level] 10507 00006FD4 80F901 cmp cl, 1 ; 1 10508 00006FD7 0F8612FFFFFF jna .playback_next 10509 00006FDD FEC9 dec cl 10510 00006FDF EBD4 jmp short .chg_volume 10511 10512 ; 12/01/2025 10513 .hw_info: 10514 00006FE1 E80A020000 call write_audio_dev_info 10515 00006FE6 E904FFFFFF jmp .playback_next 10516 ; 12/01/2025 10517 .b_info: 10518 00006FEB E875040000 call write_buffer_size 10519 00006FF0 E9FAFEFFFF jmp .playback_next 10520 10521 10522 ; =============== S U B R O U T I N E ======================================= 10523 10524 ; 15/01/2025 (mp3play2.s) -interpolation excluded- 10525 ; 13/01/2025 (mp3play3.s) -interpolation included- 10526 ; 12/01/2025 10527 ; 09/01/2025 10528 ; 21/10/2024 10529 try_enqueue_all_blocks: 10530 ; 12/01/2025 10531 00006FF5 60 pusha 10532 00006FF6 BF[00500500] mov edi, sample_buffer 10533 ; 10/01/2025 10534 ;jmp short .first_block 10535 ; 13/01/2025 10536 00006FFB EB15 jmp short try_enqueue_all_blocks_@ 10537 ;.next_block: 10538 teab_next_block: 10539 00006FFD 833D[082D0500]00 cmp dword [bytes_left], 0 10540 ;jle short .enqueue_done 10541 ; 13/01/2025 10542 00007004 7E56 jle short teab_enqueue_done 10543 ; 10544 00007006 8B3D[94F40000] mov edi, [mp3_samples_dst] 10545 0000700C 033D[98F40000] add edi, [mp3_samples_output_size] 10546 10547 try_enqueue_all_blocks_@: 10548 ;.first_block: 10549 ;pusha 10550 00007012 8B35[042D0500] mov esi, [stream_pos] 10551 00007018 8B0D[082D0500] mov ecx, [bytes_left] 10552 0000701E 31ED xor ebp, ebp 10553 00007020 E849F2FFFF call mp3_decode_frame 10554 ;popa 10555 ;jc short .enqueue_done 10556 ; 13/01/2025 10557 00007025 7235 jc short teab_enqueue_done 10558 00007027 A1[A89D0000] mov eax, [mp3_src_frame_size] 10559 0000702C 83F800 cmp eax, 0 10560 ;jz short .enqueue_done 10561 ; 13/01/2025 10562 0000702F 742B jz short teab_enqueue_done 10563 00007031 0105[042D0500] add [stream_pos], eax 10564 00007037 2905[082D0500] sub [bytes_left], eax 10565 0000703D A1[98F40000] mov eax, [mp3_samples_output_size] 10566 00007042 83F800 cmp eax, 0 10567 ;jz short .next_block 10568 ; 13/01/2025 10569 00007045 74B6 jz short teab_next_block 10570 ;.no_error: 10571 00007047 FE05[34850000] inc byte [num_enqueued_frames] 10572 0000704D A0[34850000] mov al, [num_enqueued_frames] 10573 00007052 3A05[8E8D0000] cmp al, [blocks] 10574 ;jb short .next_block 10575 ; 13/01/2025 10576 00007058 72A3 jb short teab_next_block 10577 teab_rtn: 10578 ;.rtn: 10579 ; 12/01/2025 10580 0000705A 61 popa 10581 0000705B C3 retn 10582 ;.enqueue_done: 10583 teab_enqueue_done: 10584 0000705C C705[082D0500]0000- mov dword [bytes_left], 0 10584 00007064 0000 10585 ; 12/01/2025 10586 ;jmp short .rtn 10587 ; 13/01/2025 10588 00007066 EBF2 jmp short teab_rtn 10589 10590 10591 ; --------------------------------------------------------------------------- 10592 ; 15/01/2025 - mono to stereo - 8bit to 16bit - conversion procedures (AC97) 10593 ; --------------------------------------------------------------------------- 10594 10595 ; =============== S U B R O U T I N E ======================================= 10596 10597 ; 15/01/2025 10598 audio_system_init_x: 10599 00007068 8B0D[98F40000] mov ecx, [mp3_samples_output_size] 10600 0000706E 89C8 mov eax, ecx 10601 10602 ; 48 kHZ with 16 bit stereo conversion 10603 ; 10604 ; selected output is 10605 ; 8bit stereo or 16bit mono or 8bit mono 10606 ; (but AC97 hardware needs 16bit stereo samples) 10607 10608 00007070 D1E0 shl eax, 1 ; * 2 (mono to stereo) 10609 10610 00007072 BB[87710000] mov ebx, convert_to_stereo 10611 00007077 803D[D89D0000]02 cmp byte [mp3_bytes_per_sample], 2 10612 0000707E 7415 je short .set_sizes ; 16bit mono 10613 10614 ; 8bit output (16bit conversion is neeed) 10615 00007080 BB[B6710000] mov ebx, convert_to_16bit 10616 00007085 803D[D09D0000]02 cmp byte [mp3_output_num_channels], 2 10617 0000708C 7407 je short .set_sizes ; 8bit stereo 10618 ; 8bit mono output 10619 0000708E D1E0 shl eax, 1 10620 00007090 BB[D2710000] mov ebx, convert_to_stereo_16bit 10621 .set_sizes: 10622 00007095 891D[948D0000] mov [conversion], ebx 10623 0000709B 890D[988D0000] mov [loadsize], ecx 10624 ;;; 10625 ; align to 16bit stereo (if there is a defect) 10626 ;and al, ~3 10627 000070A1 A3[908D0000] mov [buffer_size], eax 10628 ;;; 10629 .asix_@: 10630 ; TRDOS 386 system call 10631 ; sysaudio 10632 ; Allocate audio buffer (for user) 10633 ; ebx = 0200h (BH=2) 10634 ; ecx = buffer size (in bytes) 10635 ; edx = buffer address (virtual) 10636 10637 sys _audio, 0200h, [buffer_size], sample_buffer 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 000070A6 BB00020000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 000070AB 8B0D[908D0000] <1> mov ecx, %3 124 <1> %if %0 = 4 125 000070B1 BA[00500500] <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 000070B6 B820000000 <1> mov eax, %1 130 <1> 131 000070BB CD40 <1> int 40h 10638 000070BD 7228 jc short .init_err 10639 10640 ; clear audio buffer (before playback) 10641 000070BF BF[00500500] mov edi, sample_buffer 10642 ; ecx = buffer size in bytes 10643 000070C4 83C103 add ecx, 3 ; 13/01/2025 10644 000070C7 C1E902 shr ecx, 2 10645 000070CA 31C0 xor eax, eax 10646 000070CC F3AB rep stosd 10647 10648 ; TRDOS 386 system call 10649 ; sysaudio 10650 ; Initialize audio device (bh = 3) 10651 ; bl = 01h -> CallBack method 10652 ; edx = Callback service address (virtual) 10653 ; ecx = 0 ; CL = srb value ; not used 10654 sys _audio, 0301h, 0, audio_callback_x 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 000070CE BB01030000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 000070D3 B900000000 <1> mov ecx, %3 124 <1> %if %0 = 4 125 000070D8 BA[68710000] <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 000070DD B820000000 <1> mov eax, %1 130 <1> 131 000070E2 CD40 <1> int 40h 10655 000070E4 7201 jc short .init_err 10656 000070E6 C3 retn 10657 .init_err: 10658 000070E7 E946FDFFFF jmp init_error 10659 10660 10661 ; =============== S U B R O U T I N E ======================================= 10662 10663 ; 15/01/2025 (mp3play2.s) 10664 ; 14/01/2025 (mp3play3.s) 10665 ; 13/01/2025 10666 mp3_cast_to_speaker_x: 10667 ; 13/01/2025 10668 %if 0 10669 ; Start to play 10670 mov eax, [mp3_bytes_per_sample] 10671 ;shr al, 1 ; 8 -> 0, 16 -> 1 10672 ;shl al, 1 ; 16 -> 2, 8 -> 0 10673 and al, 2 10674 mov ebx, [mp3_output_num_channels] 10675 dec ebx 10676 or bl, al 10677 mov ecx, [mp3_output_sample_rate] 10678 mov bh, 4 ; start to play 10679 %else 10680 ;; 48 kHZ, 16bit, stereo 10681 000070EC BB03040000 mov ebx, 0403h 10682 ; 15/01/2025 10683 ;mov ecx, 48000 10684 ;; 14/01/2025 10685 ;cmp byte [vra], 1 10686 ;jb short .jmpto@ 10687 000070F1 8B0D[D49D0000] mov ecx, [mp3_output_sample_rate] 10688 ;.jmpto@: 10689 %endif 10690 000070F7 E9A0FDFFFF jmp mp3_cast_to_speaker_@ 10691 10692 10693 ; =============== S U B R O U T I N E ======================================= 10694 10695 ; 15/01/2025 (mp3play3.s & mp3play2.s) 10696 ; 13/01/2025 10697 try_enqueue_all_blocks_x: 10698 ; 12/01/2025 10699 000070FC 60 pusha 10700 000070FD BF[00300500] mov edi, decoding_buffer 10701 ; 15/01/2025 10702 ;jmp try_enqueue_all_blocks_@ 10703 00007102 EB15 jmp short .first_block 10704 10705 ; 15/01/2025 10706 .next_block: 10707 00007104 833D[082D0500]00 cmp dword [bytes_left], 0 10708 0000710B 7E4F jle short .enqueue_done 10709 ; 10710 0000710D 8B3D[94F40000] mov edi, [mp3_samples_dst] 10711 00007113 033D[98F40000] add edi, [mp3_samples_output_size] 10712 10713 ;try_enqueue_all_blocks_@: 10714 .first_block: 10715 ;pusha 10716 00007119 8B35[042D0500] mov esi, [stream_pos] 10717 0000711F 8B0D[082D0500] mov ecx, [bytes_left] 10718 00007125 31ED xor ebp, ebp 10719 00007127 E842F1FFFF call mp3_decode_frame 10720 ;popa 10721 0000712C 722E jc short .enqueue_done 10722 10723 0000712E A1[A89D0000] mov eax, [mp3_src_frame_size] 10724 00007133 83F800 cmp eax, 0 10725 00007136 7424 jz short .enqueue_done 10726 00007138 0105[042D0500] add [stream_pos], eax 10727 0000713E 2905[082D0500] sub [bytes_left], eax 10728 10729 00007144 A1[98F40000] mov eax, [mp3_samples_output_size] 10730 00007149 83F800 cmp eax, 0 10731 0000714C 74B6 jz short .next_block 10732 10733 ; 15/01/2025 10734 0000714E FF15[948D0000] call dword [conversion] 10735 .no_error: 10736 ; 15/01/2025 10737 00007154 FE05[34850000] inc byte [num_enqueued_frames] 10738 .rtn: 10739 ; 12/01/2025 10740 0000715A 61 popa 10741 0000715B C3 retn 10742 .enqueue_done: 10743 0000715C C705[082D0500]0000- mov dword [bytes_left], 0 10743 00007164 0000 10744 ; 12/01/2025 10745 00007166 EBF2 jmp short .rtn 10746 10747 10748 ; =============== S U B R O U T I N E ======================================= 10749 10750 ; 15/01/2025 (mp3play3.s & mp3play1.s) 10751 ; 13/01/2025 10752 audio_callback_x: 10753 ; Operating system has directed CPU here because of 10754 ; user (2nd) stage of the audio hardware interrupt service. 10755 ; This procedure must be short and return to operating 10756 ; system again via sysrelease system call 10757 ; (or any system call here will be handled as sysrelease). 10758 10759 00007168 C605[8C8D0000]01 mov byte [srb], 1 10760 10761 0000716F E888FFFFFF call try_enqueue_all_blocks_x 10762 10763 ; 15/01/2025 10764 ;call dword [conversion] 10765 10766 sys _rele ; return from callback service 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00007174 B827000000 <1> mov eax, %1 130 <1> 131 00007179 CD40 <1> int 40h 10767 10768 ; we must not come here ! 10769 0000717B BBFFFFFFFF mov ebx, -1 10770 sys _exit 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 <1> mov ecx, %3 124 <1> %if %0 = 4 125 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00007180 B801000000 <1> mov eax, %1 130 <1> 131 00007185 CD40 <1> int 40h 10771 ;jmp short audio_callback 10772 10773 10774 ; --------------------------------------------------------------------------- 10775 ; conversion procedures 10776 ; --------------------------------------------------------------------------- 10777 10778 ; 15/01/2025 (mp3play1.s) 10779 ; 13/01/2025 (mp3play3.s) 10780 10781 ; convert_to_stereo: convert 16bit mono samples to 16bit stereo 10782 ; convert_to_16bit: convert 8bit stereo samples to 16bit stereo 10783 ; convert_to_stereo_16bit: convert 8bit mono samples to 16bit & stereo 10784 ; [loadsize] = decoding buffer size 10785 ; [buffer_size] = wav output buffer size (<= 64KB) 10786 10787 ; =============== S U B R O U T I N E ======================================= 10788 10789 ; ///// 10790 10791 ; 13/01/2025 10792 convert_to_stereo: 10793 00007187 BE[00300500] mov esi, decoding_buffer ; (contains 16bit mono samples) 10794 0000718C BF[00500500] mov edi, sample_buffer ; wav output buffer 10795 00007191 8B0D[988D0000] mov ecx, [loadsize] 10796 00007197 D1E9 shr ecx, 1 ; word count 10797 cts_1: 10798 00007199 66AD lodsw 10799 0000719B 66AB stosw ; left channel 10800 0000719D 66AB stosw ; right channel 10801 0000719F E2F8 loop cts_1 10802 cts_2: 10803 ; padfill 10804 000071A1 8B0D[908D0000] mov ecx, [buffer_size] 10805 000071A7 81C1[00500500] add ecx, sample_buffer 10806 000071AD 29F9 sub ecx, edi 10807 000071AF 7604 jna short cts_3 10808 000071B1 31C0 xor eax, eax 10809 000071B3 F3AA rep stosb 10810 cts_3: 10811 000071B5 C3 retn 10812 10813 ; =============== S U B R O U T I N E ======================================= 10814 10815 ; ///// 10816 10817 ; 13/01/2025 10818 convert_to_16bit: 10819 000071B6 BE[00300500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 10820 000071BB BF[00500500] mov edi, sample_buffer ; wav output buffer 10821 000071C0 8B0D[988D0000] mov ecx, [loadsize] 10822 ct16b_1: 10823 ; stereo & 8 bit 10824 000071C6 AC lodsb 10825 000071C7 2C80 sub al, 80h ; 08/11/2023 10826 000071C9 C1E008 shl eax, 8 ; convert 8 bit sample to 16 bit sample 10827 000071CC 66AB stosw 10828 000071CE E2F6 loop ct16b_1 10829 000071D0 EBCF jmp short cts_2 10830 10831 ; =============== S U B R O U T I N E ======================================= 10832 10833 ; ///// 10834 10835 ; 13/01/2025 10836 convert_to_stereo_16bit: 10837 000071D2 BE[00300500] mov esi, decoding_buffer ; (contains 8bit mono samples) 10838 000071D7 BF[00500500] mov edi, sample_buffer ; wav output buffer 10839 000071DC 8B0D[988D0000] mov ecx, [loadsize] 10840 cts16b_1: 10841 ; mono & 8 bit 10842 000071E2 AC lodsb 10843 000071E3 2C80 sub al, 80h ; 08/11/2023 10844 000071E5 C1E008 shl eax, 8 ; convert 8 bit sample to 16 bit sample 10845 000071E8 66AB stosw ; left channel 10846 000071EA 66AB stosw ; right channel 10847 000071EC E2F4 loop cts16b_1 10848 000071EE EBB1 jmp short cts_2 10849 10850 ; ///// 10851 10852 10853 ; --------------------------------------------------------------------------- 10854 ; 12/01/2025- Hardware Info display/write procedures. 10855 ; --------------------------------------------------------------------------- 10856 ; ref: playwav9.s (18/12/2024) - sb16play.s (20/12/2024) 10857 10858 ; 15/01/2025 (mp3play3.s & mp3play2.s) 10859 ; 12/01/2025 10860 write_audio_dev_info: 10861 000071F0 803D[888D0000]02 cmp byte [audio_hardware], 2 10862 000071F7 7203 jb short write_sb16_dev_info ; SB16 10863 000071F9 745A je short write_ac97_pci_dev_info ; AC97 10864 000071FB C3 retn 10865 10866 ; 20/12/2024 (playwavx.s, sb16play.s) 10867 write_sb16_dev_info: 10868 ; 27/11/2024 10869 ; 24/11/2024 (sb16play.asm) 10870 10871 000071FC A1[808D0000] mov eax, [audio_io_base] 10872 00007201 31DB xor ebx, ebx 10873 00007203 88C3 mov bl, al 10874 00007205 88DA mov dl, bl 10875 00007207 80E30F and bl, 0Fh 10876 0000720A 8A83[35750000] mov al, [ebx+hex_chars] 10877 00007210 A2[33760000] mov [msgBasePort+2], al 10878 00007215 88D3 mov bl, dl 10879 00007217 C0EB04 shr bl, 4 10880 0000721A 8A83[35750000] mov al, [ebx+hex_chars] 10881 00007220 A2[32760000] mov [msgBasePort+1], al 10882 00007225 88E3 mov bl, ah 10883 ;and bl, 0Fh 10884 00007227 8A83[35750000] mov al, [ebx+hex_chars] 10885 0000722D A2[31760000] mov [msgBasePort], al 10886 10887 ;xor eax, eax 10888 ; 27/11/2024 10889 00007232 A0[848D0000] mov al, [audio_intr] 10890 ;mov cl, 10 10891 ;div cl 10892 ;add ah, 30h 10893 ;mov [msgIRQnum], ah 10894 ; 25/11/2024 10895 00007237 0430 add al, 30h 10896 00007239 A2[48760000] mov [msgIRQnum], al ; 12/01/2025 10897 10898 ; 12/01/2025 10899 ; 20/12/2024 10900 sys _msg, msgSB16Info, 255, 07h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 0000723E BB[FB750000] <1> mov ebx, %2 122 <1> %if %0 >= 3 123 00007243 B9FF000000 <1> mov ecx, %3 124 <1> %if %0 = 4 125 00007248 BA07000000 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 0000724D B823000000 <1> mov eax, %1 130 <1> 131 00007252 CD40 <1> int 40h 10901 10902 00007254 C3 retn 10903 10904 write_ac97_pci_dev_info: 10905 ; 19/11/2024 10906 ; 30/05/2024 10907 ; 06/06/2017 10908 ; 03/06/2017 10909 ; BUS/DEV/FN 10910 ; 00000000BBBBBBBBDDDDDFFF00000000 10911 ; DEV/VENDOR 10912 ; DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV 10913 10914 00007255 A1[788D0000] mov eax, [dev_vendor] 10915 0000725A 31DB xor ebx, ebx 10916 0000725C 88C3 mov bl, al 10917 0000725E 88DA mov dl, bl 10918 00007260 80E30F and bl, 0Fh 10919 00007263 8A83[35750000] mov al, [ebx+hex_chars] 10920 00007269 A2[7C750000] mov [msgVendorId+3], al 10921 0000726E 88D3 mov bl, dl 10922 00007270 C0EB04 shr bl, 4 10923 00007273 8A83[35750000] mov al, [ebx+hex_chars] 10924 00007279 A2[7B750000] mov [msgVendorId+2], al 10925 0000727E 88E3 mov bl, ah 10926 00007280 88DA mov dl, bl 10927 00007282 80E30F and bl, 0Fh 10928 00007285 8A83[35750000] mov al, [ebx+hex_chars] 10929 0000728B A2[7A750000] mov [msgVendorId+1], al 10930 00007290 88D3 mov bl, dl 10931 00007292 C0EB04 shr bl, 4 10932 00007295 8A83[35750000] mov al, [ebx+hex_chars] 10933 0000729B A2[79750000] mov [msgVendorId], al 10934 000072A0 C1E810 shr eax, 16 10935 000072A3 88C3 mov bl, al 10936 000072A5 88DA mov dl, bl 10937 000072A7 80E30F and bl, 0Fh 10938 000072AA 8A83[35750000] mov al, [ebx+hex_chars] 10939 000072B0 A2[8D750000] mov [msgDevId+3], al 10940 000072B5 88D3 mov bl, dl 10941 000072B7 C0EB04 shr bl, 4 10942 000072BA 8A83[35750000] mov al, [ebx+hex_chars] 10943 000072C0 A2[8C750000] mov [msgDevId+2], al 10944 000072C5 88E3 mov bl, ah 10945 000072C7 88DA mov dl, bl 10946 000072C9 80E30F and bl, 0Fh 10947 000072CC 8A83[35750000] mov al, [ebx+hex_chars] 10948 000072D2 A2[8B750000] mov [msgDevId+1], al 10949 000072D7 88D3 mov bl, dl 10950 000072D9 C0EB04 shr bl, 4 10951 000072DC 8A83[35750000] mov al, [ebx+hex_chars] 10952 000072E2 A2[8A750000] mov [msgDevId], al 10953 10954 000072E7 A1[748D0000] mov eax, [bus_dev_fn] 10955 000072EC C1E808 shr eax, 8 10956 000072EF 88C3 mov bl, al 10957 000072F1 88DA mov dl, bl 10958 000072F3 80E307 and bl, 7 ; bit 0,1,2 10959 000072F6 8A83[35750000] mov al, [ebx+hex_chars] 10960 000072FC A2[B2750000] mov [msgFncNo+1], al 10961 00007301 88D3 mov bl, dl 10962 00007303 C0EB03 shr bl, 3 10963 00007306 88DA mov dl, bl 10964 00007308 80E30F and bl, 0Fh 10965 0000730B 8A83[35750000] mov al, [ebx+hex_chars] 10966 00007311 A2[A4750000] mov [msgDevNo+1], al 10967 00007316 88D3 mov bl, dl 10968 00007318 C0EB04 shr bl, 4 10969 0000731B 8A83[35750000] mov al, [ebx+hex_chars] 10970 00007321 A2[A3750000] mov [msgDevNo], al 10971 00007326 88E3 mov bl, ah 10972 00007328 88DA mov dl, bl 10973 0000732A 80E30F and bl, 0Fh 10974 0000732D 8A83[35750000] mov al, [ebx+hex_chars] 10975 00007333 A2[98750000] mov [msgBusNo+1], al 10976 00007338 88D3 mov bl, dl 10977 0000733A C0EB04 shr bl, 4 10978 0000733D 8A83[35750000] mov al, [ebx+hex_chars] 10979 00007343 A2[97750000] mov [msgBusNo], al 10980 10981 ;mov ax, [ac97_NamBar] 10982 00007348 66A1[7C8D0000] mov ax, [NAMBAR] 10983 0000734E 88C3 mov bl, al 10984 00007350 88DA mov dl, bl 10985 00007352 80E30F and bl, 0Fh 10986 00007355 8A83[35750000] mov al, [ebx+hex_chars] 10987 0000735B A2[C2750000] mov [msgNamBar+3], al 10988 00007360 88D3 mov bl, dl 10989 00007362 C0EB04 shr bl, 4 10990 00007365 8A83[35750000] mov al, [ebx+hex_chars] 10991 0000736B A2[C1750000] mov [msgNamBar+2], al 10992 00007370 88E3 mov bl, ah 10993 00007372 88DA mov dl, bl 10994 00007374 80E30F and bl, 0Fh 10995 00007377 8A83[35750000] mov al, [ebx+hex_chars] 10996 0000737D A2[C0750000] mov [msgNamBar+1], al 10997 00007382 88D3 mov bl, dl 10998 00007384 C0EB04 shr bl, 4 10999 00007387 8A83[35750000] mov al, [ebx+hex_chars] 11000 0000738D A2[BF750000] mov [msgNamBar], al 11001 11002 ;mov ax, [ac97_NabmBar] 11003 00007392 66A1[7E8D0000] mov ax, [NABMBAR] 11004 00007398 88C3 mov bl, al 11005 0000739A 88DA mov dl, bl 11006 0000739C 80E30F and bl, 0Fh 11007 0000739F 8A83[35750000] mov al, [ebx+hex_chars] 11008 000073A5 A2[D2750000] mov [msgNabmBar+3], al 11009 000073AA 88D3 mov bl, dl 11010 000073AC C0EB04 shr bl, 4 11011 000073AF 8A83[35750000] mov al, [ebx+hex_chars] 11012 000073B5 A2[D1750000] mov [msgNabmBar+2], al 11013 000073BA 88E3 mov bl, ah 11014 000073BC 88DA mov dl, bl 11015 000073BE 80E30F and bl, 0Fh 11016 000073C1 8A83[35750000] mov al, [ebx+hex_chars] 11017 000073C7 A2[D0750000] mov [msgNabmBar+1], al 11018 000073CC 88D3 mov bl, dl 11019 000073CE C0EB04 shr bl, 4 11020 000073D1 8A83[35750000] mov al, [ebx+hex_chars] 11021 000073D7 A2[CF750000] mov [msgNabmBar], al 11022 11023 000073DC 31C0 xor eax, eax 11024 000073DE A0[848D0000] mov al, [ac97_int_ln_reg] 11025 000073E3 B10A mov cl, 10 11026 000073E5 F6F1 div cl 11027 ; 23/11/2024 11028 ;add [msgIRQ], ax 11029 000073E7 66053030 add ax, 3030h 11030 000073EB 66A3[DB750000] mov [msgIRQ], ax 11031 ;and al, al 11032 000073F1 3C30 cmp al, 30h 11033 000073F3 750D jnz short _w_ac97imsg_ 11034 000073F5 A0[DC750000] mov al, byte [msgIRQ+1] 11035 000073FA B420 mov ah, ' ' 11036 000073FC 66A3[DB750000] mov [msgIRQ], ax 11037 _w_ac97imsg_: 11038 ; 12/01/2025 11039 ; 01/12/2024 11040 sys _msg, msgAC97Info, 255, 07h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00007402 BB[46750000] <1> mov ebx, %2 122 <1> %if %0 >= 3 123 00007407 B9FF000000 <1> mov ecx, %3 124 <1> %if %0 = 4 125 0000740C BA07000000 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00007411 B823000000 <1> mov eax, %1 130 <1> 131 00007416 CD40 <1> int 40h 11041 11042 ; 19/11/2024 11043 ;retn 11044 11045 ; 30/05/2024 11046 write_VRA_info: 11047 ; 12/01/2025 11048 ; 01/12/2024 11049 sys _msg, msgVRAheader, 255, 07h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00007418 BB[E0750000] <1> mov ebx, %2 122 <1> %if %0 >= 3 123 0000741D B9FF000000 <1> mov ecx, %3 124 <1> %if %0 = 4 125 00007422 BA07000000 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00007427 B823000000 <1> mov eax, %1 130 <1> 131 0000742C CD40 <1> int 40h 11050 0000742E 803D[898D0000]00 cmp byte [vra], 0 11051 00007435 7617 jna short _w_VRAi_no 11052 _w_VRAi_yes: 11053 sys _msg, msgVRAyes, 255, 07h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00007437 BB[EF750000] <1> mov ebx, %2 122 <1> %if %0 >= 3 123 0000743C B9FF000000 <1> mov ecx, %3 124 <1> %if %0 = 4 125 00007441 BA07000000 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00007446 B823000000 <1> mov eax, %1 130 <1> 131 0000744B CD40 <1> int 40h 11054 0000744D C3 retn 11055 _w_VRAi_no: 11056 sys _msg, msgVRAno, 255, 07h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 0000744E BB[F5750000] <1> mov ebx, %2 122 <1> %if %0 >= 3 123 00007453 B9FF000000 <1> mov ecx, %3 124 <1> %if %0 = 4 125 00007458 BA07000000 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 0000745D B823000000 <1> mov eax, %1 130 <1> 131 00007462 CD40 <1> int 40h 11057 11058 00007464 C3 retn 11059 11060 ; --------------------------------------------------------------------------- 11061 11062 ; 15/01/2025 11063 ; 13/01/2025 11064 ; 12/01/2025 11065 write_buffer_size: 11066 ;;; 11067 00007465 A0[8E8D0000] mov al, [blocks] ; (must be less than 10) 11068 0000746A 0430 add al, '0' 11069 0000746C A2[E9740000] mov byte [blocks_txt], al 11070 ;;; 11071 ;cmp byte [interpolation], 1 11072 ; 15/01/2025 (mp3play2.s) 11073 00007471 803D[9C8D0000]01 cmp byte [convert], 1 11074 00007478 731F jnb short write_buffer_size_x 11075 ;;; 11076 0000747A BA[D1740000] mov edx, buffersize_txt 11077 0000747F E874F1FFFF call wrstr_edx 11078 00007484 A1[908D0000] mov eax, [buffer_size] 11079 00007489 E8A0F1FFFF call wr_decimal_eax_with_thousands_seperator 11080 0000748E BA[E1740000] mov edx, bytes_txt 11081 00007493 E860F1FFFF call wrstr_edx 11082 00007498 C3 retn 11083 11084 ; 13/01/2025 (Indirect interpolation info) 11085 write_buffer_size_x: 11086 00007499 BA[F6740000] mov edx, buffers1_txt 11087 0000749E E855F1FFFF call wrstr_edx 11088 000074A3 A1[988D0000] mov eax, [loadsize] ; decoding buffer size 11089 ; 15/01/2025 11090 000074A8 E881F1FFFF call wr_decimal_eax_with_thousands_seperator 11091 000074AD E814000000 call w_dbuff_bytes 11092 000074B2 BA[1A750000] mov edx, buffers2_txt 11093 000074B7 E83CF1FFFF call wrstr_edx 11094 000074BC A1[908D0000] mov eax, [buffer_size] ; wav buffer size 11095 000074C1 E868F1FFFF call wr_decimal_eax_with_thousands_seperator 11096 w_dbuff_bytes: 11097 000074C6 BA[2B750000] mov edx, bytes2_txt 11098 000074CB E828F1FFFF call wrstr_edx 11099 000074D0 C3 retn 11100 11101 ; 11/01/2025 11102 000074D1 0D0A buffersize_txt db 0Dh, 0Ah 11103 000074D3 427566666572205369- db 'Buffer Size: ', 0 11103 000074DC 7A653A2000 11104 ; 12/01/2025 11105 ;bytes_txt: db ' bytes ', 0Dh, 0Ah, 0 11106 000074E1 2062797465732028 bytes_txt: db ' bytes (' 11107 000074E9 3020626C6F636B7329- blocks_txt db '0 blocks) ', 0Dh, 0Ah, 0 11107 000074F2 200D0A00 11108 11109 ; 13/01/2025 11110 000074F6 0D0A buffers1_txt db 0Dh, 0Ah 11111 000074F8 427566666572207369- db 'Buffer size for', 0Dh, 0Ah 11111 00007501 7A6520666F720D0A 11112 00007509 202020206465636F64- db ' decoding is ', 0 11112 00007512 696E672069732000 11113 0000751A 2020776176206F7574- buffers2_txt db ' wav output is ', 0 11113 00007523 7075742069732000 11114 0000752B 206279746573200D0A- bytes2_txt: db ' bytes ', 0Dh, 0Ah, 0 11114 00007534 00 11115 11116 ; --------------------------------------------------------------------------- 11117 11118 ; 19/11/2024 11119 ; 03/06/2017 11120 00007535 303132333435363738- hex_chars db "0123456789ABCDEF", 0 11120 0000753E 3941424344454600 11121 00007546 0D0A msgAC97Info db 0Dh, 0Ah 11122 00007548 204143393720417564- db " AC97 Audio Controller & Codec Info", 0Dh, 0Ah 11122 00007551 696F20436F6E74726F- 11122 0000755A 6C6C6572202620436F- 11122 00007563 64656320496E666F0D- 11122 0000756C 0A 11123 0000756D 2056656E646F722049- db " Vendor ID: " 11123 00007576 443A20 11124 00007579 303030306820446576- msgVendorId db "0000h Device ID: " 11124 00007582 6963652049443A20 11125 0000758A 30303030680D0A msgDevId db "0000h", 0Dh, 0Ah 11126 00007591 204275733A20 db " Bus: " 11127 00007597 303068204465766963- msgBusNo db "00h Device: " 11127 000075A0 653A20 11128 000075A3 3030682046756E6374- msgDevNo db "00h Function: " 11128 000075AC 696F6E3A20 11129 000075B1 303068 msgFncNo db "00h" 11130 000075B4 0D0A db 0Dh, 0Ah 11131 000075B6 204E414D4241523A20 db " NAMBAR: " 11132 000075BF 30303030682020 msgNamBar db "0000h " 11133 000075C6 4E41424D4241523A20 db "NABMBAR: " 11134 000075CF 303030306820204952- msgNabmBar db "0000h IRQ: " 11134 000075D8 513A20 11135 000075DB 3030 msgIRQ dw 3030h 11136 000075DD 0D0A00 db 0Dh, 0Ah, 0 11137 ; 25/11/2023 11138 000075E0 205652412073757070- msgVRAheader db " VRA support: " 11138 000075E9 6F72743A20 11139 000075EE 00 db 0 11140 000075EF 5945530D0A00 msgVRAyes db "YES", 0Dh, 0Ah, 0 11141 000075F5 4E4F200D0A msgVRAno db "NO ", 0Dh, 0Ah 11142 ; 12/01/2025 11143 ;db " (Interpolated sample rate playing method)" 11144 000075FA 00 db 0 11145 ;db 0Dh, 0Ah, 0 11146 11147 ; ---------------------------------- 11148 11149 ; 24/11/2024 11150 000075FB 0D0A msgSB16Info db 0Dh, 0Ah 11151 000075FD 20417564696F204861- db " Audio Hardware: Sound Blaster 16", 0Dh, 0Ah 11151 00007606 7264776172653A2053- 11151 0000760F 6F756E6420426C6173- 11151 00007618 7465722031360D0A 11152 00007620 202020202020426173- db " Base Port: " 11152 00007629 6520506F72743A20 11153 00007631 303030680D0A msgBasePort db "000h", 0Dh, 0Ah 11154 00007637 202020202020202020- db " IRQ: " 11154 00007640 2020204952513A20 11155 00007648 30 msgIRQnum db 30h ; 12/01/2025 11156 crlf: ; 13/01/2025 11157 00007649 0D0A00 db 0Dh, 0Ah, 0 11158 11159 11160 ; =========================================================================== 11161 ; end of TRDOS 386 specific procedures. 11162 ; --------------------------------------------------------------------------- 11163 11164 ; =========================================================================== 11165 ; Initialized DATA 11166 ; =========================================================================== 11167 11168 0000764C 00 option_test db 0 11169 0000764D 00 option_mono db 0 11170 0000764E 00 option_8bit db 0 11171 0000764F 00 option_rate_shift db 0 11172 00007650 00 option_fast db 0 11173 00007651 90 align 4 11174 00007654 00000000 cpuid_flags dd 0 11175 00007658 00 cpuid_exists db 0 11176 00007659 00 detected_cpu db 0 11177 0000765A 90 align 4 11178 0000765C 00000000 mp3_output_milliseconds dd 0 11179 00007660 00000000 millisecond_count dd 0 11180 11181 ; 20/10/2024 11182 ; HANDLE hProcess 11183 ;hProcess dd 0 11184 ; HANDLE hThread 11185 ;hThread dd 0 11186 ; DWORD dwPriorityClass 11187 ;dwPriorityClass dd 0 11188 ; int nPriority 11189 ;nPriority dd 0 11190 11191 00007664 0000000000000000 ttt dd 2 dup(0) 11192 0000766C 726561642068656164- rdtsc_read_header db 'read header ',0 11192 00007675 65722020202000 11193 0000767C 0000000000000000 rdtsc_read_header_extra dd 0, 0 11194 00007684 726561642065787472- db 'read extra ',0 11194 0000768D 61202020202000 11195 00007694 0000000000000000 rdtsc_read_granule dd 0, 0 11196 0000769C 72656164206772616E- db 'read granule ',0 11196 000076A5 756C6520202000 11197 000076AC 0000000000000000 rdtsc_append_main dd 2 dup(0) 11198 000076B4 617070656E64206D61- db 'append main ',0 11198 000076BD 696E2020202000 11199 000076C4 0000000000000000 rdtsc_read_scalefac dd 2 dup(0) 11200 000076CC 72656164207363616C- db 'read scalefac ',0 11200 000076D5 65666163202000 11201 000076DC 0000000000000000 rdtsc_xlat_scalefac dd 2 dup(0) 11202 000076E4 786C6174207363616C- db 'xlat scalefac ',0 11202 000076ED 65666163202000 11203 000076F4 0000000000000000 rdtsc_read_huffman dd 2 dup(0) 11204 000076FC 726561642068756666- db 'read huffman ',0 11204 00007705 6D616E20202000 11205 0000770C 0000000000000000 rdtsc_ms_stereo dd 2 dup(0) 11206 00007714 6D732073746572656F- db 'ms stereo ',0 11206 0000771D 20202020202000 11207 00007724 0000000000000000 rdtsc_i_stereo dd 2 dup(0) 11208 0000772C 692073746572656F20- db 'i stereo ',0 11208 00007735 20202020202000 11209 0000773C 0000000000000000 rdtsc_reorder dd 2 dup(0) 11210 00007744 72656F726465722020- db 'reorder ',0 11210 0000774D 20202020202000 11211 00007754 0000000000000000 rdtsc_antialias dd 2 dup(0) 11212 0000775C 616E7469616C696173- db 'antialias ',0 11212 00007765 20202020202000 11213 0000776C 0000000000000000 rdtsc_imdct dd 2 dup(0) 11214 00007774 696D64637420202020- db 'imdct ',0 11214 0000777D 20202020202000 11215 00007784 0000000000000000 rdtsc_imdct36 dd 2 dup(0) 11216 0000778C 20696D646374333620- db ' imdct36 ',0 11216 00007795 20202020202000 11217 0000779C 0000000000000000 rdtsc_imdct12 dd 2 dup(0) 11218 000077A4 20696D646374313220- db ' imdct12 ',0 11218 000077AD 20202020202000 11219 000077B4 0000000000000000 rdtsc_imdct0 dd 2 dup(0) 11220 000077BC 20696D646374302020- db ' imdct0 ',0 11220 000077C5 20202020202000 11221 000077CC 0000000000000000 rdtsc_synth_dct dd 2 dup(0) 11222 000077D4 73796E74682F646374- db 'synth/dct ',0 11222 000077DD 20202020202000 11223 000077E4 0000000000000000 rdtsc_dct32 dd 2 dup(0) 11224 000077EC 2073796E74682E6463- db ' synth.dct32 ',0 11224 000077F5 74333220202000 11225 000077FC 0000000000000000 rdtsc_synth dd 2 dup(0) 11226 00007804 2073796E74682E6F75- db ' synth.output ',0 11226 0000780D 74707574202000 11227 00007814 0000000000000000 rdtsc_total dd 2 dup(0) 11228 0000781C 746F74616C20202020- db 'total ',0 11228 00007825 20202020202000 11229 0000782C 000020002800300038- mp3_bitrate_tab dw 0,32,40,48,56,64,80,96,112,128,160,192,224,256,320, 0 11229 00007835 004000500060007000- 11229 0000783E 8000A000C000E00000- 11229 00007847 0140010000 11230 0000784C 000008001000180020- dw 0, 8,16,24,32,40,48,56,64,80,96,112,128,144,160, 0 11230 00007855 002800300038004000- 11230 0000785E 500060007000800090- 11230 00007867 00A0000000 11231 0000786C 44AC80BB007D mp3_freq_tab dw 44100,48000,32000 11232 00007872 000504040000 mp3_lsf_sf_expand_init_table db 0, 5, 4, 4, 0, 0 11233 00007878 9001 dw 400 ; 0..399 ; normal case 11234 0000787A 000504010C00 db 0, 5, 4, 1, 0Ch, 0 11235 00007880 F401 dw 500 ; 400..499 11236 00007882 000301011801 db 0, 3, 1, 1, 18h, 1 11237 00007888 0002 dw 512 ; 500..511 11238 0000788A 010606012400 db 1, 6, 6, 1, 24h, 0 11239 00007890 6803 dw 872 ; 512+360 ; 0..359 for 2nd channel of intensity stereo 11240 00007892 010404013000 db 1, 4, 4, 1, 30h, 0 11241 00007898 E803 dw 1000 ; 512+488 ; 360..487 11242 0000789A 010301013C00 db 1, 3, 1, 1, 3Ch, 0 11243 000078A0 0004 dw 1024 ; 512+512 ; 488..511 11244 000078A2 010000000000000000- mp3_synth_win_src dw 1, 0, 0, 0, 0, 0, 1, 0 11244 000078AB 00000001000000 11245 000078B2 000000000100000001- dw 0, 0, 1, 0, 1, 0, 1, 0 11245 000078BB 00000001000000 11246 000078C2 010001000000010001- dw 1, 1, 0, 1, 1, 1, 1, 2 11246 000078CB 00010001000200 11247 000078D2 010002000100020002- dw 1, 2, 1, 2, 2, 3, 2, 3 11247 000078DB 00030002000300 11248 000078E2 020004000300030004- dw 2, 4, 3, 3, 4, 4, 4, 5 11248 000078EB 00040004000500 11249 000078F2 050005000500060006- dw 5, 5, 5, 6, 6, 6, 6, 7 11249 000078FB 00060006000700 11250 00007902 070006000800070007- dw 7, 6, 8, 7, 7, 8, 7, 7 11250 0000790B 00080007000700 11251 00007912 080007000700070006- dw 8, 7, 7, 7, 6, 6, 6, 5 11251 0000791B 00060006000500 11252 00007922 51FEFCFFFDFFFEFFFF- dw 0FE51h,0FFFCh,0FFFDh,0FFFEh,0FFFFh, 0, 1, 3 11252 0000792B FF000001000300 11253 00007932 03000600070008000B- dw 3, 6, 7, 8, 0Bh, 0Ch, 0Eh, 11h 11253 0000793B 000C000E001100 11254 00007942 1300150017001A001C- dw 13h, 15h, 17h, 1Ah, 1Ch, 1Fh, 22h, 24h 11254 0000794B 001F0022002400 11255 00007952 27002A002C002F0032- dw 27h, 2Ah, 2Ch, 2Fh, 32h, 35h, 36h, 3Ah 11255 0000795B 00350036003A00 11256 00007962 3C003E004000420044- dw 3Ch, 3Eh, 40h, 42h, 44h, 45h, 47h, 48h 11256 0000796B 00450047004800 11257 00007972 490049004900490049- dw 49h, 49h, 49h, 49h, 49h, 48h, 46h, 45h 11257 0000797B 00480046004500 11258 00007982 430040003D003A0035- dw 43h, 40h, 3Dh, 3Ah, 35h, 31h, 2Bh, 27h 11258 0000798B 0031002B002700 11259 00007992 1F00190012000A0002- dw 1Fh, 19h, 12h, 0Ah, 2,0FFF9h,0FFEFh,0FFE6h 11259 0000799B 00F9FFEFFFE6FF 11260 000079A2 3BF030003B00470053- dw 0F03Bh, 30h, 3Bh, 47h, 53h, 5Fh, 6Dh, 79h 11260 000079AB 005F006D007900 11261 000079B2 86009500A100B000BD- dw 86h, 95h, 0A1h, 0B0h, 0BDh, 0CBh, 0D9h, 0E6h 11261 000079BB 00CB00D900E600 11262 000079C2 F30001010D01190125- dw 0F3h, 101h, 10Dh, 119h, 125h, 130h, 13Ah, 144h 11262 000079CB 0130013A014401 11263 000079D2 4D0155015B01620166- dw 14Dh, 155h, 15Bh, 162h, 166h, 16Ah, 16Bh, 16Dh 11263 000079DB 016A016B016D01 11264 000079E2 6C016A01660160015A- dw 16Ch, 16Ah, 166h, 160h, 15Ah, 150h, 146h, 139h 11264 000079EB 01500146013901 11265 000079F2 2B011A010801F300DD- dw 12Bh, 11Ah, 108h, 0F3h, 0DDh, 0C5h, 0A9h, 8Eh 11265 000079FB 00C500A9008E00 11266 00007A02 6F004E002B000700E1- dw 6Fh, 4Eh, 2Bh, 7,0FFE1h,0FFB8h,0FF8Fh,0FF62h 11266 00007A0B FFB8FF8FFF62FF 11267 00007A12 35FF06FFD5FEA4FE70- dw 0FF35h,0FF06h,0FED5h,0FEA4h,0FE70h,0FE3Ch,0FE06h,0FDD0h 11267 00007A1B FE3CFE06FED0FD 11268 00007A22 0BCF9F02D702110349- dw 0CF0Bh, 29Fh, 2D7h, 311h, 349h, 382h, 3BBh, 3F4h 11268 00007A2B 038203BB03F403 11269 00007A32 2C0464049A04D10405- dw 42Ch, 464h, 49Ah, 4D1h, 505h, 538h, 56Ah, 59Bh 11269 00007A3B 0538056A059B05 11270 00007A42 C805F505200647066C- dw 5C8h, 5F5h, 620h, 647h, 66Ch, 68Fh, 6AFh, 6CCh 11270 00007A4B 068F06AF06CC06 11271 00007A52 E506FC060F071F072B- dw 6E5h, 6FCh, 70Fh, 71Fh, 72Bh, 734h, 739h, 739h 11271 00007A5B 07340739073907 11272 00007A62 370730072607170704- dw 737h, 730h, 726h, 717h, 704h, 6EDh, 6D3h, 6B4h 11272 00007A6B 07ED06D306B406 11273 00007A72 91066C0640061306E1- dw 691h, 66Ch, 640h, 613h, 5E1h, 5ABh, 573h, 537h 11273 00007A7B 05AB0573053705 11274 00007A82 F704B4046F042704DB- dw 4F7h, 4B4h, 46Fh, 427h, 3DBh, 38Fh, 33Eh, 2EDh 11274 00007A8B 038F033E03ED02 11275 00007A92 9A024402ED0195013D- dw 29Ah, 244h, 1EDh, 195h, 13Dh, 0E2h, 88h, 2Eh 11275 00007A9B 01E20088002E00 11276 00007AA2 00 db 0 11277 00007AA3 00 db 0 11278 00007AA4 000000010002000303- mp3_slen_table dw 0000h, 0100h, 0200h, 0300h, 0003h, 0101h, 0201h, 0301h 11278 00007AAD 00010101020103 11279 00007AB4 020102020203030103- dw 0102h, 0202h, 0302h, 0103h, 0203h, 0303h, 0204h, 0304h 11279 00007ABD 02030304020403 11280 00007AC4 060505050909090906- mp3_lsf_nsf_table dd 05050506h, 09090909h, 09090906h 11280 00007ACD 090909 11281 00007AD0 0605070309090C0606- dd 03070506h, 060C0909h, 060C0906h 11281 00007AD9 090C06 11282 00007ADC 0B0A0000121200000F- dd 00000A0Bh, 00001212h, 0000120Fh 11282 00007AE5 120000 11283 00007AE8 070707000C0C0C0006- dd 00070707h, 000C0C0Ch, 000C0F06h 11283 00007AF1 0F0C00 11284 00007AF4 060606030C09090606- dd 03060606h, 0609090Ch, 06090C06h 11284 00007AFD 0C0906 11285 00007B00 080805000F0C090006- dd 00050808h, 00090C0Fh, 00091206h 11285 00007B09 120900 11286 00007B0C 1101100022021221 huff_tree_list_data db 11h, 1, 10h, 0, 22h, 2, 12h, 21h 11287 00007B14 2011011000220212 db 20h, 11h, 1, 10h, 0, 22h, 2, 12h 11288 00007B1C 2120101101003323 db 21h, 20h, 10h, 11h, 1, 0, 33h, 23h 11289 00007B24 3231130330221221 db 32h, 31h, 13h, 3, 30h, 22h, 12h, 21h 11290 00007B2C 0220110110003303 db 2, 20h, 11h, 1, 10h, 0, 33h, 3 11291 00007B34 2332301331220212 db 23h, 32h, 30h, 13h, 31h, 22h, 2, 12h 11292 00007B3C 2120011110005545 db 21h, 20h, 1, 11h, 10h, 0, 55h, 45h 11293 00007B44 5453354425521551 db 54h, 53h, 35h, 44h, 25h, 52h, 15h, 51h 11294 00007B4C 0534504333244214 db 5, 34h, 50h, 43h, 33h, 24h, 42h, 14h 11295 00007B54 4140042332031331 db 41h, 40h, 4, 23h, 32h, 3, 13h, 31h 11296 00007B5C 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 11297 00007B64 1000555445533544 db 10h, 0, 55h, 54h, 45h, 53h, 35h, 44h 11298 00007B6C 2552051551344350 db 25h, 52h, 5, 15h, 51h, 34h, 43h, 50h 11299 00007B74 3324421441044023 db 33h, 24h, 42h, 14h, 41h, 4, 40h, 23h 11300 00007B7C 3213310330220220 db 32h, 13h, 31h, 3, 30h, 22h, 2, 20h 11301 00007B84 1221110110005545 db 12h, 21h, 11h, 1, 10h, 0, 55h, 45h 11302 00007B8C 3553540544255215 db 35h, 53h, 54h, 5, 44h, 25h, 52h, 15h 11303 00007B94 5134435004244233 db 51h, 34h, 43h, 50h, 4, 24h, 42h, 33h 11304 00007B9C 4014412332133103 db 40h, 14h, 41h, 23h, 32h, 13h, 31h, 3 11305 00007BA4 3022021221201101 db 30h, 22h, 2, 12h, 21h, 20h, 11h, 1 11306 00007BAC 1000776776577566 db 10h, 0, 77h, 67h, 76h, 57h, 75h, 66h 11307 00007BB4 4774566537734655 db 47h, 74h, 56h, 65h, 37h, 73h, 46h, 55h 11308 00007BBC 5463277264077062 db 54h, 63h, 27h, 72h, 64h, 7, 70h, 62h 11309 00007BC4 4535065344177136 db 45h, 35h, 6, 53h, 44h, 17h, 71h, 36h 11310 00007BCC 2625521551344316 db 26h, 25h, 52h, 15h, 51h, 34h, 43h, 16h 11311 00007BD4 6160055024423304 db 61h, 60h, 5, 50h, 24h, 42h, 33h, 4 11312 00007BDC 1441402332031331 db 14h, 41h, 40h, 23h, 32h, 3, 13h, 31h 11313 00007BE4 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 11314 00007BEC 1000776776756647 db 10h, 0, 77h, 67h, 76h, 75h, 66h, 47h 11315 00007BF4 7457555665377346 db 74h, 57h, 55h, 56h, 65h, 37h, 73h, 46h 11316 00007BFC 4554355327726407 db 45h, 54h, 35h, 53h, 27h, 72h, 64h, 7 11317 00007C04 7117703663604425 db 71h, 17h, 70h, 36h, 63h, 60h, 44h, 25h 11318 00007C0C 5205156226061661 db 52h, 5, 15h, 62h, 26h, 6, 16h, 61h 11319 00007C14 5134504333244214 db 51h, 34h, 50h, 43h, 33h, 24h, 42h, 14h 11320 00007C1C 4104402332133103 db 41h, 4, 40h, 23h, 32h, 13h, 31h, 3 11321 00007C24 3022211202201101 db 30h, 22h, 21h, 12h, 2, 20h, 11h, 1 11322 00007C2C 1000776776577566 db 10h, 0, 77h, 67h, 76h, 57h, 75h, 66h 11323 00007C34 4774655637735527 db 47h, 74h, 65h, 56h, 37h, 73h, 55h, 27h 11324 00007C3C 7246641771077036 db 72h, 46h, 64h, 17h, 71h, 7, 70h, 36h 11325 00007C44 6345544406052662 db 63h, 45h, 54h, 44h, 6, 5, 26h, 62h 11326 00007C4C 6116603553255215 db 61h, 16h, 60h, 35h, 53h, 25h, 52h, 15h 11327 00007C54 5134435004244214 db 51h, 34h, 43h, 50h, 4, 24h, 42h, 14h 11328 00007C5C 3341233240033013 db 33h, 41h, 23h, 32h, 40h, 3, 30h, 13h 11329 00007C64 3122122102200011 db 31h, 22h, 12h, 21h, 2, 20h, 0, 11h 11330 00007C6C 0110FEFCFDEDFFEF db 1, 10h,0FEh,0FCh,0FDh,0EDh,0FFh,0EFh 11331 00007C74 DFEECFDEBFFBCEDC db 0DFh,0EEh,0CFh,0DEh,0BFh,0FBh,0CEh,0DCh 11332 00007C7C AFE9ECDDFACDBEEB db 0AFh,0E9h,0ECh,0DDh,0FAh,0CDh,0BEh,0EBh 11333 00007C84 9FF9EABDDB8FF8CC db 9Fh,0F9h,0EAh,0BDh,0DBh, 8Fh,0F8h,0CCh 11334 00007C8C AE9E8E7F7EF7DAAD db 0AEh, 9Eh, 8Eh, 7Fh, 7Eh,0F7h,0DAh,0ADh 11335 00007C94 BCCBF66FE85F9DD9 db 0BCh,0CBh,0F6h, 6Fh,0E8h, 5Fh, 9Dh,0D9h 11336 00007C9C F5E7ACBB4FF4CAE6 db 0F5h,0E7h,0ACh,0BBh, 4Fh,0F4h,0CAh,0E6h 11337 00007CA4 F33F8DD82FF26E9C db 0F3h, 3Fh, 8Dh,0D8h, 2Fh,0F2h, 6Eh, 9Ch 11338 00007CAC 0FC95EAB7DD74EC8 db 0Fh,0C9h, 5Eh,0ABh, 7Dh,0D7h, 4Eh,0C8h 11339 00007CB4 D63EB99BAA1FF1F0 db 0D6h, 3Eh,0B9h, 9Bh,0AAh, 1Fh,0F1h,0F0h 11340 00007CBC BAE5E48C6DE3E22E db 0BAh,0E5h,0E4h, 8Ch, 6Dh,0E3h,0E2h, 2Eh 11341 00007CC4 0E1EE1E05DD57CC7 db 0Eh, 1Eh,0E1h,0E0h, 5Dh,0D5h, 7Ch,0C7h 11342 00007CCC 4D8BB8D49AA96CC6 db 4Dh, 8Bh,0B8h,0D4h, 9Ah,0A9h, 6Ch,0C6h 11343 00007CD4 3DD37B2DD21DB75C db 3Dh,0D3h, 7Bh, 2Dh,0D2h, 1Dh,0B7h, 5Ch 11344 00007CDC C5997AC3A7974BD1 db 0C5h, 99h, 7Ah,0C3h,0A7h, 97h, 4Bh,0D1h 11345 00007CE4 0DD08AA84CC46BB6 db 0Dh,0D0h, 8Ah,0A8h, 4Ch,0C4h, 6Bh,0B6h 11346 00007CEC 3C2CC25BB5891CC1 db 3Ch, 2Ch,0C2h, 5Bh,0B5h, 89h, 1Ch,0C1h 11347 00007CF4 980CC0B46AA6793B db 98h, 0Ch,0C0h,0B4h, 6Ah,0A6h, 79h, 3Bh 11348 00007CFC B3885A2BA569A478 db 0B3h, 88h, 5Ah, 2Bh,0A5h, 69h,0A4h, 78h 11349 00007D04 87947776B21BB10B db 87h, 94h, 77h, 76h,0B2h, 1Bh,0B1h, 0Bh 11350 00007D0C B0964A3AA359952A db 0B0h, 96h, 4Ah, 3Ah,0A3h, 59h, 95h, 2Ah 11351 00007D14 A21AA10A68A08649 db 0A2h, 1Ah,0A1h, 0Ah, 68h,0A0h, 86h, 49h 11352 00007D1C 9339588567299257 db 93h, 39h, 58h, 85h, 67h, 29h, 92h, 57h 11353 00007D24 7538836647745665 db 75h, 38h, 83h, 66h, 47h, 74h, 56h, 65h 11354 00007D2C 7319910990488472 db 73h, 19h, 91h, 9, 90h, 48h, 84h, 72h 11355 00007D34 4664288218372717 db 46h, 64h, 28h, 82h, 18h, 37h, 27h, 17h 11356 00007D3C 7155077036634554 db 71h, 55h, 7, 70h, 36h, 63h, 45h, 54h 11357 00007D44 2662358108801661 db 26h, 62h, 35h, 81h, 8, 80h, 16h, 61h 11358 00007D4C 0660534425520515 db 6, 60h, 53h, 44h, 25h, 52h, 5, 15h 11359 00007D54 5134435024423314 db 51h, 34h, 43h, 50h, 24h, 42h, 33h, 14h 11360 00007D5C 4104402332133103 db 41h, 4, 40h, 23h, 32h, 13h, 31h, 3 11361 00007D64 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 11362 00007D6C 1000FFEFFEDFEEFD db 10h, 0,0FFh,0EFh,0FEh,0DFh,0EEh,0FDh 11363 00007D74 CFFCDEEDBFFBCEEC db 0CFh,0FCh,0DEh,0EDh,0BFh,0FBh,0CEh,0ECh 11364 00007D7C DDAFFABEEBCDDC9F db 0DDh,0AFh,0FAh,0BEh,0EBh,0CDh,0DCh, 9Fh 11365 00007D84 F9EABDDB8FF8CC9E db 0F9h,0EAh,0BDh,0DBh, 8Fh,0F8h,0CCh, 9Eh 11366 00007D8C E97FF7ADDABC6FAE db 0E9h, 7Fh,0F7h,0ADh,0DAh,0BCh, 6Fh,0AEh 11367 00007D94 0FCBF68EE85F9DF5 db 0Fh,0CBh,0F6h, 8Eh,0E8h, 5Fh, 9Dh,0F5h 11368 00007D9C 7EE7ACCABBD98D4F db 7Eh,0E7h,0ACh,0CAh,0BBh,0D9h, 8Dh, 4Fh 11369 00007DA4 F43FF3D8E62FF26E db 0F4h, 3Fh,0F3h,0D8h,0E6h, 2Fh,0F2h, 6Eh 11370 00007DAC F01FF19CC95EABBA db 0F0h, 1Fh,0F1h, 9Ch,0C9h, 5Eh,0ABh,0BAh 11371 00007DB4 E57DD74EE48CC83E db 0E5h, 7Dh,0D7h, 4Eh,0E4h, 8Ch,0C8h, 3Eh 11372 00007DBC 6DD6E39BB92EAAE2 db 6Dh,0D6h,0E3h, 9Bh,0B9h, 2Eh,0AAh,0E2h 11373 00007DC4 1EE10EE05DD57CC7 db 1Eh,0E1h, 0Eh,0E0h, 5Dh,0D5h, 7Ch,0C7h 11374 00007DCC 4D8BD4B89AA96CC6 db 4Dh, 8Bh,0D4h,0B8h, 9Ah,0A9h, 6Ch,0C6h 11375 00007DD4 3DD3D22D0D1D7BB7 db 3Dh,0D3h,0D2h, 2Dh, 0Dh, 1Dh, 7Bh,0B7h 11376 00007DDC D15CD0C58AA84CC4 db 0D1h, 5Ch,0D0h,0C5h, 8Ah,0A8h, 4Ch,0C4h 11377 00007DE4 6BB6990C3CC37AA7 db 6Bh,0B6h, 99h, 0Ch, 3Ch,0C3h, 7Ah,0A7h 11378 00007DEC A6C00BC22C5BB51C db 0A6h,0C0h, 0Bh,0C2h, 2Ch, 5Bh,0B5h, 1Ch 11379 00007DF4 8998C14BB46A3B79 db 89h, 98h,0C1h, 4Bh,0B4h, 6Ah, 3Bh, 79h 11380 00007DFC B397882B5AB2A51B db 0B3h, 97h, 88h, 2Bh, 5Ah,0B2h,0A5h, 1Bh 11381 00007E04 B1B069964AA47887 db 0B1h,0B0h, 69h, 96h, 4Ah,0A4h, 78h, 87h 11382 00007E0C 3AA359952AA21AA1 db 3Ah,0A3h, 59h, 95h, 2Ah,0A2h, 1Ah,0A1h 11383 00007E14 0AA0688649943993 db 0Ah,0A0h, 68h, 86h, 49h, 94h, 39h, 93h 11384 00007E1C 7709588529677692 db 77h, 9, 58h, 85h, 29h, 67h, 76h, 92h 11385 00007E24 9119904884577538 db 91h, 19h, 90h, 48h, 84h, 57h, 75h, 38h 11386 00007E2C 8366472882188174 db 83h, 66h, 47h, 28h, 82h, 18h, 81h, 74h 11387 00007E34 0880566537734627 db 8, 80h, 56h, 65h, 37h, 73h, 46h, 27h 11388 00007E3C 7264175571077036 db 72h, 64h, 17h, 55h, 71h, 7, 70h, 36h 11389 00007E44 6345542662160660 db 63h, 45h, 54h, 26h, 62h, 16h, 6, 60h 11390 00007E4C 3561534425521551 db 35h, 61h, 53h, 44h, 25h, 52h, 15h, 51h 11391 00007E54 0550344324423341 db 5, 50h, 34h, 43h, 24h, 42h, 33h, 41h 11392 00007E5C 1404233240031331 db 14h, 4, 23h, 32h, 40h, 3, 13h, 31h 11393 00007E64 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 11394 00007E6C 1000EFFEDFFDCFFC db 10h, 0,0EFh,0FEh,0DFh,0FDh,0CFh,0FCh 11395 00007E74 BFFBAFFA9FF9F88F db 0BFh,0FBh,0AFh,0FAh, 9Fh,0F9h,0F8h, 8Fh 11396 00007E7C 7FF76FF6FF5FF54F db 7Fh,0F7h, 6Fh,0F6h,0FFh, 5Fh,0F5h, 4Fh 11397 00007E84 F4F3F03FCEECDDDE db 0F4h,0F3h,0F0h, 3Fh,0CEh,0ECh,0DDh,0DEh 11398 00007E8C E9EAD9EEEDEBBECD db 0E9h,0EAh,0D9h,0EEh,0EDh,0EBh,0BEh,0CDh 11399 00007E94 DCDBAECCADDA7EAC db 0DCh,0DBh,0AEh,0CCh,0ADh,0DAh, 7Eh,0ACh 11400 00007E9C CAC97D5EBDF22F0F db 0CAh,0C9h, 7Dh, 5Eh,0BDh,0F2h, 2Fh, 0Fh 11401 00007EA4 1FF19EBCCB8EE89D db 1Fh,0F1h, 9Eh,0BCh,0CBh, 8Eh,0E8h, 9Dh 11402 00007EAC E7BB8DD86EE69CAB db 0E7h,0BBh, 8Dh,0D8h, 6Eh,0E6h, 9Ch,0ABh 11403 00007EB4 BAE5D74EE48CC83E db 0BAh,0E5h,0D7h, 4Eh,0E4h, 8Ch,0C8h, 3Eh 11404 00007EBC 6DD69BB9AAE1D4B8 db 6Dh,0D6h, 9Bh,0B9h,0AAh,0E1h,0D4h,0B8h 11405 00007EC4 A97BB7D0E30EE05D db 0A9h, 7Bh,0B7h,0D0h,0E3h, 0Eh,0E0h, 5Dh 11406 00007ECC D57CC74D8B9A6CC6 db 0D5h, 7Ch,0C7h, 4Dh, 8Bh, 9Ah, 6Ch,0C6h 11407 00007ED4 3D5CC50D8AA8994C db 3Dh, 5Ch,0C5h, 0Dh, 8Ah,0A8h, 99h, 4Ch 11408 00007EDC B67A3C5B891CC098 db 0B6h, 7Ah, 3Ch, 5Bh, 89h, 1Ch,0C0h, 98h 11409 00007EE4 79E22E1ED32DD2D1 db 79h,0E2h, 2Eh, 1Eh,0D3h, 2Dh,0D2h,0D1h 11410 00007EEC 3B97881DC46BC3A7 db 3Bh, 97h, 88h, 1Dh,0C4h, 6Bh,0C3h,0A7h 11411 00007EF4 2CC2B5C10C4BB46A db 2Ch,0C2h,0B5h,0C1h, 0Ch, 4Bh,0B4h, 6Ah 11412 00007EFC A6B35AA52BB21BB1 db 0A6h,0B3h, 5Ah,0A5h, 2Bh,0B2h, 1Bh,0B1h 11413 00007F04 0BB069964AA47887 db 0Bh,0B0h, 69h, 96h, 4Ah,0A4h, 78h, 87h 11414 00007F0C A33A592A9568A186 db 0A3h, 3Ah, 59h, 2Ah, 95h, 68h,0A1h, 86h 11415 00007F14 7794495767A21A0A db 77h, 94h, 49h, 57h, 67h,0A2h, 1Ah, 0Ah 11416 00007F1C A039935885299276 db 0A0h, 39h, 93h, 58h, 85h, 29h, 92h, 76h 11417 00007F24 0919919048847538 db 9, 19h, 91h, 90h, 48h, 84h, 75h, 38h 11418 00007F2C 8366288247741881 db 83h, 66h, 28h, 82h, 47h, 74h, 18h, 81h 11419 00007F34 8008563773654627 db 80h, 8, 56h, 37h, 73h, 65h, 46h, 27h 11420 00007F3C 7264550717717036 db 72h, 64h, 55h, 7, 17h, 71h, 70h, 36h 11421 00007F44 6345542662166106 db 63h, 45h, 54h, 26h, 62h, 16h, 61h, 6 11422 00007F4C 6053354425525115 db 60h, 53h, 35h, 44h, 25h, 52h, 51h, 15h 11423 00007F54 0534435024423314 db 5, 34h, 43h, 50h, 24h, 42h, 33h, 14h 11424 00007F5C 4104402332133103 db 41h, 4, 40h, 23h, 32h, 13h, 31h, 3 11425 00007F64 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 11426 00007F6C 1000EFFEDFFDCFFC db 10h, 0,0EFh,0FEh,0DFh,0FDh,0CFh,0FCh 11427 00007F74 BFFBFAAF9FF9F88F db 0BFh,0FBh,0FAh,0AFh, 9Fh,0F9h,0F8h, 8Fh 11428 00007F7C 7FF76FF65FF54FF4 db 7Fh,0F7h, 6Fh,0F6h, 5Fh,0F5h, 4Fh,0F4h 11429 00007F84 3FF32FF2F11FF00F db 3Fh,0F3h, 2Fh,0F2h,0F1h, 1Fh,0F0h, 0Fh 11430 00007F8C EEDEEDCEECDDBEEB db 0EEh,0DEh,0EDh,0CEh,0ECh,0DDh,0BEh,0EBh 11431 00007F94 CDDCAEEABDDBCC9E db 0CDh,0DCh,0AEh,0EAh,0BDh,0DBh,0CCh, 9Eh 11432 00007F9C E9ADDABCCB8EE89D db 0E9h,0ADh,0DAh,0BCh,0CBh, 8Eh,0E8h, 9Dh 11433 00007FA4 D97EE7ACFFCABB8D db 0D9h, 7Eh,0E7h,0ACh,0FFh,0CAh,0BBh, 8Dh 11434 00007FAC D80EE00DE66E9CC9 db 0D8h, 0Eh,0E0h, 0Dh,0E6h, 6Eh, 9Ch,0C9h 11435 00007FB4 5EBAE5AB7DD7E48C db 5Eh,0BAh,0E5h,0ABh, 7Dh,0D7h,0E4h, 8Ch 11436 00007FBC C84E2E3E6DD6E39B db 0C8h, 4Eh, 2Eh, 3Eh, 6Dh,0D6h,0E3h, 9Bh 11437 00007FC4 B9AAE21EE15DD57C db 0B9h,0AAh,0E2h, 1Eh,0E1h, 5Dh,0D5h, 7Ch 11438 00007FCC C74D8BB8D49AA96C db 0C7h, 4Dh, 8Bh,0B8h,0D4h, 9Ah,0A9h, 6Ch 11439 00007FD4 C63DD32DD21D7BB7 db 0C6h, 3Dh,0D3h, 2Dh,0D2h, 1Dh, 7Bh,0B7h 11440 00007FDC D15CC58AA8994CC4 db 0D1h, 5Ch,0C5h, 8Ah,0A8h, 99h, 4Ch,0C4h 11441 00007FE4 6BB6D00C3CC37AA7 db 6Bh,0B6h,0D0h, 0Ch, 3Ch,0C3h, 7Ah,0A7h 11442 00007FEC 2CC25BB51C8998C1 db 2Ch,0C2h, 5Bh,0B5h, 1Ch, 89h, 98h,0C1h 11443 00007FF4 4BC00B3BB00A1AB4 db 4Bh,0C0h, 0Bh, 3Bh,0B0h, 0Ah, 1Ah,0B4h 11444 00007FFC 6AA67997A00990B3 db 6Ah,0A6h, 79h, 97h,0A0h, 9, 90h,0B3h 11445 00008004 882B5AB2A51BB169 db 88h, 2Bh, 5Ah,0B2h,0A5h, 1Bh,0B1h, 69h 11446 0000800C 96A44A78873AA359 db 96h,0A4h, 4Ah, 78h, 87h, 3Ah,0A3h, 59h 11447 00008014 952AA2A168867749 db 95h, 2Ah,0A2h,0A1h, 68h, 86h, 77h, 49h 11448 0000801C 9439935885296776 db 94h, 39h, 93h, 58h, 85h, 29h, 67h, 76h 11449 00008024 9219914884577538 db 92h, 19h, 91h, 48h, 84h, 57h, 75h, 38h 11450 0000802C 8366288218477481 db 83h, 66h, 28h, 82h, 18h, 47h, 74h, 81h 11451 00008034 0880566517077073 db 8, 80h, 56h, 65h, 17h, 7, 70h, 73h 11452 0000803C 3727724664557136 db 37h, 27h, 72h, 46h, 64h, 55h, 71h, 36h 11453 00008044 6345542662166106 db 63h, 45h, 54h, 26h, 62h, 16h, 61h, 6 11454 0000804C 6035534425521505 db 60h, 35h, 53h, 44h, 25h, 52h, 15h, 5 11455 00008054 5051344324423314 db 50h, 51h, 34h, 43h, 24h, 42h, 33h, 14h 11456 0000805C 4104402332133103 db 41h, 4, 40h, 23h, 32h, 13h, 31h, 3 11457 00008064 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 11458 0000806C 10000B0F0D0E0705 db 10h, 0, 0Bh, 0Fh, 0Dh, 0Eh, 7, 5 11459 00008074 0906030A0C020104 db 9, 6, 3, 0Ah, 0Ch, 2, 1, 4 11460 0000807C 08000F0E0D0C0B0A db 8, 0, 0Fh, 0Eh, 0Dh, 0Ch, 0Bh, 0Ah 11461 00008084 0908070605040302 db 9, 8, 7, 6, 5, 4, 3, 2 11462 0000808C 0100 db 1, 0 11463 0000808E 000000000000 db 6 dup(0) 11464 00008094 0000 mp3_huff_data db 0, 0 11465 00008096 0100 db 1, 0 ; byte[32][2] ; table,linbits 11466 00008098 0200 db 2, 0 11467 0000809A 0300 db 3, 0 11468 0000809C 0000 db 0, 0 11469 0000809E 0400 db 4, 0 11470 000080A0 0500 db 5, 0 11471 000080A2 0600 db 6, 0 11472 000080A4 0700 db 7, 0 11473 000080A6 0800 db 8, 0 11474 000080A8 0900 db 9, 0 11475 000080AA 0A00 db 10, 0 11476 000080AC 0B00 db 11, 0 11477 000080AE 0C00 db 12, 0 11478 000080B0 0000 db 0, 0 11479 000080B2 0D00 db 13, 0 11480 000080B4 0E01 db 14, 1 11481 000080B6 0E02 db 14, 2 11482 000080B8 0E03 db 14, 3 11483 000080BA 0E04 db 14, 4 11484 000080BC 0E06 db 14, 6 11485 000080BE 0E08 db 14, 8 11486 000080C0 0E0A db 14, 10 11487 000080C2 0E0D db 14, 13 11488 000080C4 0F04 db 15, 4 11489 000080C6 0F05 db 15, 5 11490 000080C8 0F06 db 15, 6 11491 000080CA 0F07 db 15, 7 11492 000080CC 0F08 db 15, 8 11493 000080CE 0F09 db 15, 9 11494 000080D0 0F0B db 15, 11 11495 000080D2 0F0D db 15, 13 11496 000080D4 040404040404060608- mp3_band_size_long db 4, 4, 4, 4, 4, 4, 6, 6, 8, 8, 0Ah 11496 000080DD 080A 11497 000080DF 0C1014181C222A3236- db 0Ch, 10h, 14h, 18h, 1Ch, 22h, 2Ah, 32h, 36h, 4Ch, 9Eh ; byte[9][22] 11497 000080E8 4C9E 11498 000080EA 040404040404060606- db 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 0Ah 11498 000080F3 080A 11499 000080F5 0C1012161C22282E36- db 0Ch, 10h, 12h, 16h, 1Ch, 22h, 28h, 2Eh, 36h, 36h,0C0h 11499 000080FE 36C0 11500 00008100 040404040404060608- db 4, 4, 4, 4, 4, 4, 6, 6, 8, 0Ah, 0Ch 11500 00008109 0A0C 11501 0000810B 1014181E262E384454- db 10h, 14h, 18h, 1Eh, 26h, 2Eh, 38h, 44h, 54h, 66h, 1Ah 11501 00008114 661A 11502 00008116 060606060606080A0C- db 6, 6, 6, 6, 6, 6, 8, 0Ah, 0Ch, 0Eh, 10h 11502 0000811F 0E10 11503 00008121 14181C20262E343C44- db 14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h 11503 0000812A 3A36 11504 0000812C 060606060606080A0C- db 6, 6, 6, 6, 6, 6, 8, 0Ah, 0Ch, 0Eh, 10h 11504 00008135 0E10 11505 00008137 12161A20262E344046- db 12h, 16h, 1Ah, 20h, 26h, 2Eh, 34h, 40h, 46h, 4Ch, 24h 11505 00008140 4C24 11506 00008142 060606060606080A0C- db 6, 6, 6, 6, 6, 6, 8, 0Ah, 0Ch, 0Eh, 10h 11506 0000814B 0E10 11507 0000814D 14181C20262E343C44- db 14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h 11507 00008156 3A36 11508 00008158 060606060606080A0C- db 6, 6, 6, 6, 6, 6, 8, 0Ah, 0Ch, 0Eh, 10h 11508 00008161 0E10 11509 00008163 14181C20262E343C44- db 14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h 11509 0000816C 3A36 11510 0000816E 060606060606080A0C- db 6, 6, 6, 6, 6, 6, 8, 0Ah, 0Ch, 0Eh, 10h 11510 00008177 0E10 11511 00008179 14181C20262E343C44- db 14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h 11511 00008182 3A36 11512 00008184 0C0C0C0C0C0C101418- db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 10h, 14h, 18h, 1Ch, 20h 11512 0000818D 1C20 11513 0000818F 283038404C5A020202- db 28h, 30h, 38h, 40h, 4Ch, 5Ah, 2, 2, 2, 2, 2 11513 00008198 0202 11514 0000819A 000000000000000000- db 10 dup(0) ; data align 11514 000081A3 00 11515 000081A4 0404040406080A0C0E- mp3_band_size_short db 4, 4, 4, 4, 6, 8, 0Ah, 0Ch, 0Eh, 12h, 16h, 1Eh, 38h 11515 000081AD 12161E38 11516 000081B1 0404040406060A0C0E- db 4, 4, 4, 4, 6, 6, 0Ah, 0Ch, 0Eh, 10h, 14h, 1Ah, 42h ; byte[9][16] ? ; byte [9][13] 11516 000081BA 10141A42 11517 000081BE 0404040406080C1014- db 4, 4, 4, 4, 6, 8, 0Ch, 10h, 14h, 1Ah, 22h, 2Ah, 0Ch 11517 000081C7 1A222A0C 11518 000081CB 0404040606080A0E12- db 4, 4, 4, 6, 6, 8, 0Ah, 0Eh, 12h, 1Ah, 20h, 2Ah, 12h 11518 000081D4 1A202A12 11519 000081D8 04040406080A0C0E12- db 4, 4, 4, 6, 8, 0Ah, 0Ch, 0Eh, 12h, 18h, 20h, 2Ch, 0Ch 11519 000081E1 18202C0C 11520 000081E5 04040406080A0C0E12- db 4, 4, 4, 6, 8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h 11520 000081EE 181E2812 11521 000081F2 04040406080A0C0E12- db 4, 4, 4, 6, 8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h 11521 000081FB 181E2812 11522 000081FF 04040406080A0C0E12- db 4, 4, 4, 6, 8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h 11522 00008208 181E2812 11523 0000820C 0808080C1014181C24- db 8, 8, 8, 0Ch, 10h, 14h, 18h, 1Ch, 24h, 2, 2, 2, 1Ah 11523 00008215 0202021A 11524 00008219 000000000000000000- db 11 dup(0) ; data align 11524 00008222 0000 11525 00008224 000000000000000000- mp3_pretab db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 11525 0000822D 0000 11526 0000822F 000000000000000000- db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 11526 00008238 0000 11527 0000823A 000000000000000000- db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 11527 00008243 0000 11528 00008245 010101010202030303- db 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0 11528 0000824E 0200 11529 00008250 00000000 db 4 dup(0) ; data align 11530 00008254 4B1D4200028FDB0016- mp3_mdct_win_src dd 00421D4Bh, 00DB8F02h, 019C7F16h, 029ADCC0h, 04000001h, 06246711h 11530 0000825D 7F9C01C0DC9A020100- 11530 00008266 000411672406 11531 0000826C 4506EE090CD6A71238- dd 09EE0645h, 12A7D60Ch, 3DF40538h,0BC63D32Fh,0E7B0025Bh,0F069D222h ; these are sine values divided by cosine values... 11531 00008275 05F43D2FD363BC5B02- 11531 0000827E B0E722D269F0 11532 00008284 567133F467D857F6A8- dd 0F4337156h,0F657D867h,0F7BCFBA8h,0F8BB5952h,0F97C4965h,0FA15BB1Ch 11532 0000828D FBBCF75259BBF86549- 11532 00008296 7CF91CBB15FA 11533 0000829C 936D94FA8E5100FB70- dd 0FA946D93h,0FB00518Eh,0FB5EA270h,0FBB2FDEAh,0FC000000h,0FC479F38h 11533 000082A5 A25EFBEAFDB2FB0000- 11533 000082AE 00FC389F47FC 11534 000082B4 09668BFC9898CCFC0B- dd 0FC8B6609h,0FCCC9898h,0FD0C4F0Bh,0FD4B895Ch,0FD8B3FCFh,0FDCC725Eh 11534 000082BD 4F0CFD5C894BFDCF3F- 11534 000082C6 8BFD5E72CCFD 11535 000082CC 2F3910FE67D857FE7D- dd 0FE10392Fh,0FE57D867h,0FEA4DA7Dh,0FEF935F7h,0FF5786D9h,0FFC36AD5h 11535 000082D5 DAA4FEF735F9FED986- 11535 000082DE 57FFD56AC3FF 11536 000082E4 4B1D4200028FDB0016- dd 00421D4Bh, 00DB8F02h, 019C7F16h, 029ADCC0h, 04000001h, 06246711h 11536 000082ED 7F9C01C0DC9A020100- 11536 000082F6 000411672406 11537 000082FC 4506EE090CD6A71238- dd 09EE0645h, 12A7D60Ch, 3DF40538h,0BC63D32Fh,0E7B0025Bh,0F069D222h 11537 00008305 05F43D2FD363BC5B02- 11537 0000830E B0E722D269F0 11538 00008314 567133F467D857F6A8- dd 0F4337156h,0F657D867h,0F7BCFBA8h,0F8BB5952h,0F97C4965h,0FA15BB1Ch 11538 0000831D FBBCF75259BBF86549- 11538 00008326 7CF91CBB15FA 11539 0000832C 291B93FAB946F5FABB- dd 0FA931B29h,0FAF546B9h,0FB41DABBh,0FB7D8F97h,0FBABA162h,0FBCE4E62h 11539 00008335 DA41FB978F7DFB62A1- 11539 0000833E ABFB624ECEFB 11540 00008344 671CF0FBAFC845FC0D- dd 0FBF01C67h,0FC45C8AFh,0FCD2D50Dh,0FD9008D0h,0FE74C032h,0FF771894h 11540 0000834D D5D2FCD00890FD32C0- 11540 00008356 74FE941877FF 11541 0000835C 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 11541 00008365 000000000000000000- 11541 0000836E 000000000000 11542 00008374 028FDB00010000040C- dd 00DB8F02h, 04000001h, 12A7D60Ch,0E7B0025Bh,0F657D867h,0F97C4965h 11542 0000837D D6A7125B02B0E767D8- 11542 00008386 57F665497CF9 11543 0000838C 8E5100FB000000FC98- dd 0FB00518Eh,0FC000000h,0FCCC9898h,0FD8B3FCFh,0FE57D867h,0FF5786D9h 11543 00008395 98CCFCCF3F8BFD67D8- 11543 0000839E 57FED98657FF 11544 000083A4 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 11544 000083AD 000000000000000000- 11544 000083B6 000000000000 11545 000083BC 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 11545 000083C5 000000000000000000- 11545 000083CE 000000000000 11546 000083D4 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 11546 000083DD 000000000000000000- 11546 000083E6 000000000000 11547 000083EC 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 11547 000083F5 000000000000000000- 11547 000083FE 000000000000 11548 00008404 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 11548 0000840D 000000000000000000- 11548 00008416 000000000000 11549 0000841C B58869025237BA0B4F- dd 026988B5h, 0BBA3752h, 37D3294Fh,0B73F655Bh,0E3B0025Bh,0EDAD5D13h 11549 00008425 29D3375B653FB75B02- 11549 0000842E B0E3135DADED 11550 00008434 A2ADB2F2B8288CF5D6- dd 0F2B2ADA2h,0F58C28B8h,0F75657D6h,0F88E2C57h,0F96DE565h,0FA1449CDh 11550 0000843D 5756F7572C8EF865E5- 11550 00008446 6DF9CD4914FA 11551 0000844C 936D94FA8E5100FB70- dd 0FA946D93h,0FB00518Eh,0FB5EA270h,0FBB2FDEAh,0FC000000h,0FC479F38h 11551 00008455 A25EFBEAFDB2FB0000- 11551 0000845E 00FC389F47FC 11552 00008464 09668BFC9898CCFC0B- dd 0FC8B6609h,0FCCC9898h,0FD0C4F0Bh,0FD4B895Ch,0FD8B3FCFh,0FDCC725Eh 11552 0000846D 4F0CFD5C894BFDCF3F- 11552 00008476 8BFD5E72CCFD 11553 0000847C 2F3910FE67D857FE7D- dd 0FE10392Fh,0FE57D867h,0FEA4DA7Dh,0FEF935F7h,0FF5786D9h,0FFC36AD5h 11553 00008485 DAA4FEF735F9FED986- 11553 0000848E 57FFD56AC3FF 11554 00008494 0000000000000040 mp3_is_table_normal dd 00000000h, 40000000h 11555 0000849C BB58860D46A77932 dd 0D8658BBh, 3279A746h 11556 000084A4 D1F56C17300A9328 dd 176CF5D1h, 28930A30h 11557 000084AC 0000002000000020 dd 20000000h, 20000000h 11558 000084B4 300A9328D1F56C17 dd 28930A30h, 176CF5D1h 11559 000084BC 46A77932BB58860D dd 3279A746h, 0D8658BBh 11560 000084C4 0000004000000000 dd 40000000h, 00000000h 11561 000084CC 00000080 mp3_is_table_lsf_src dd 80000000h 11562 ; sqrt based constants... 11563 ; 40000000h*2 ; 2.0 (2^1.00) aka 2 11564 000084D0 667EA26B dd 6BA27E66h ; 35D13F33h*2 ; 1.681 (2^0.75) 11565 000084D4 9A79825A dd 5A82799Ah ; 2D413CCDh*2 ; 1.414 (2^0.50) aka sqrt(2) 11566 000084D8 2AF81B4C dd 4C1BF82Ah ; 260DFC15h*2 ; 1.189 (2^0.25) aka sqrt(sqrt(2)) 11567 000084DC 00000080 mp3_pow2_quarters dd 80000000h 11568 ; 40000000h*2 ; 2^(0/4) 11569 000084E0 52F03798 dd 9837F052h ; 4C1BF829h*2 ; 2^(1/4) 11570 000084E4 34F304B5 dd 0B504F334h ; 5A82799Ah*2 ; 2^(2/4) 11571 000084E8 CCFC44D7 dd 0D744FCCCh ; 6BA27E66h*2 ; 2^(3/4) 11572 000084EC 00000000 mp3_initialized dd 0 11573 000084F0 12000000 mp3_huff_num_entries dd 12h 11574 000084F4 00 wrchr_buf db 0 11575 000084F5 90 align 4 11576 ; LPCSTR mp3_src_fname 11577 000084F8 00000000 mp3_src_fname dd 0 11578 ; LPCSTR mp3_dst_fname 11579 000084FC 00000000 mp3_dst_fname dd 0 11580 ; LPCSTR mp3_pcm_fname 11581 00008500 00000000 mp3_pcm_fname dd 0 11582 00008504 524946462400000057- mp3_wav_header db 'RIFF$',0,0,0,'WAVEfmt ',10h,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,4,0,10h,0,'data',0,0,0,0 11582 0000850D 415645666D74201000- 11582 00008516 000001000200000000- 11582 0000851F 000000000004001000- 11582 00008528 6461746100000000 11583 ; 21/10/2024 11584 00008530 00000000 zero dd 0 11585 00008534 00 num_enqueued_frames db 0 11586 00008535 617564696F20647572- txt_decode_timing1 db 'audio duration ',0 11586 0000853E 6174696F6E2000 11587 00008545 206D696C6C69736563- txt_decode_timing2 db ' milliseconds, decoded in ',0 11587 0000854E 6F6E64732C20646563- 11587 00008557 6F64656420696E2000 11588 00008560 206D696C6C69736563- txt_decode_timing3 db ' milliseconds',0Dh,0Ah,0 11588 00008569 6F6E64730D0A00 11589 00008570 20636C6F636B206379- txt_clks_per_second db ' clock cycles per second:',0Dh,0Ah,0 11589 00008579 636C65732070657220- 11589 00008582 7365636F6E643A0D0A- 11589 0000858B 00 11590 0000858C 0303020106060505 huff_tree_list_numbits db 3, 3, 2, 1, 6, 6, 5, 5 11591 00008594 0503030301060605 db 5, 3, 3, 3, 1, 6, 6, 5 11592 0000859C 0505030202020808 db 5, 5, 3, 2, 2, 2, 8, 8 11593 000085A4 0706070707070606 db 7, 6, 7, 7, 7, 7, 6, 6 11594 000085AC 0606030303010707 db 6, 6, 3, 3, 3, 1, 7, 7 11595 000085B4 0606060505050504 db 6, 6, 6, 5, 5, 5, 5, 4 11596 000085BC 0404030203030A0A db 4, 4, 3, 2, 3, 3, 0Ah, 0Ah 11597 000085C4 0A0A090909090808 db 0Ah, 0Ah, 9, 9, 9, 9, 8, 8 11598 000085CC 0909080909080807 db 9, 9, 8, 9, 9, 8, 8, 7 11599 000085D4 0707080808080707 db 7, 7, 8, 8, 8, 8, 7, 7 11600 000085DC 0707060506060403 db 7, 7, 6, 5, 6, 6, 4, 3 11601 000085E4 03010B0B0A090A0A db 3, 1, 0Bh, 0Bh, 0Ah, 9, 0Ah, 0Ah 11602 000085EC 0909090808090909 db 9, 9, 9, 8, 8, 9, 9, 9 11603 000085F4 0908080807080808 db 9, 8, 8, 8, 7, 8, 8, 8 11604 000085FC 0808080808060606 db 8, 8, 8, 8, 8, 6, 6, 6 11605 00008604 0404020303020909 db 4, 4, 2, 3, 3, 2, 9, 9 11606 0000860C 0808090908080808 db 8, 8, 9, 9, 8, 8, 8, 8 11607 00008614 0707070808070707 db 7, 7, 7, 8, 8, 7, 7, 7 11608 0000861C 0706060606050506 db 7, 6, 6, 6, 6, 5, 5, 6 11609 00008624 0605050404040303 db 6, 5, 5, 4, 4, 4, 3, 3 11610 0000862C 03030B0B0B0B0B0B db 3, 3, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11611 00008634 0A0A0A0A0A0A0A0B db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Bh 11612 0000863C 0B0A09090A0A0909 db 0Bh, 0Ah, 9, 9, 0Ah, 0Ah, 9, 9 11613 00008644 0A0A090A0A080809 db 0Ah, 0Ah, 9, 0Ah, 0Ah, 8, 8, 9 11614 0000864C 090A0A09090A0A08 db 9, 0Ah, 0Ah, 9, 9, 0Ah, 0Ah, 8 11615 00008654 0808090909090909 db 8, 8, 9, 9, 9, 9, 9, 9 11616 0000865C 0808080808080707 db 8, 8, 8, 8, 8, 8, 7, 7 11617 00008664 0707060606060403 db 7, 7, 6, 6, 6, 6, 4, 3 11618 0000866C 03010A0A0A0A0A0A db 3, 1, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11619 00008674 0A0B0B0A0A090909 db 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 9, 9, 9 11620 0000867C 0A0A0A0A08080909 db 0Ah, 0Ah, 0Ah, 0Ah, 8, 8, 9, 9 11621 00008684 0708080808080909 db 7, 8, 8, 8, 8, 8, 9, 9 11622 0000868C 0909080708080707 db 9, 9, 8, 7, 8, 8, 7, 7 11623 00008694 0808080909080808 db 8, 8, 8, 9, 9, 8, 8, 8 11624 0000869C 0808080707060607 db 8, 8, 8, 7, 7, 6, 6, 7 11625 000086A4 0706050405050303 db 7, 6, 5, 4, 5, 5, 3, 3 11626 000086AC 03020A0A09090909 db 3, 2, 0Ah, 0Ah, 9, 9, 9, 9 11627 000086B4 0909090808090908 db 9, 9, 9, 8, 8, 9, 9, 8 11628 000086BC 0808080808090908 db 8, 8, 8, 8, 8, 9, 9, 8 11629 000086C4 0808080809090707 db 8, 8, 8, 8, 9, 9, 7, 7 11630 000086CC 0708080808080807 db 7, 8, 8, 8, 8, 8, 8, 7 11631 000086D4 0707070808070707 db 7, 7, 7, 8, 8, 7, 7, 7 11632 000086DC 0606060607070605 db 6, 6, 6, 6, 7, 7, 6, 5 11633 000086E4 0505040405050403 db 5, 5, 4, 4, 5, 5, 4, 3 11634 000086EC 0303131312111010 db 3, 3, 13h, 13h, 12h, 11h, 10h, 10h 11635 000086F4 1010101010101010 db 10h, 10h, 10h, 10h, 10h, 10h, 10h, 10h 11636 000086FC 11110F0F10100F0F db 11h, 11h, 0Fh, 0Fh, 10h, 10h, 0Fh, 0Fh 11637 00008704 0F0F0F0F0F0F0F0F db 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh 11638 0000870C 10100F10100E0E0F db 10h, 10h, 0Fh, 10h, 10h, 0Eh, 0Eh, 0Fh 11639 00008714 0F0F0F0E0E0E0E0E db 0Fh, 0Fh, 0Fh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh 11640 0000871C 0E0E0E0E0E0E0F0F db 0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Fh, 0Fh 11641 00008724 0E0D0E0E0D0D0E0E db 0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh, 0Eh 11642 0000872C 0D0E0E0D0E0E0D0E db 0Dh, 0Eh, 0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Eh 11643 00008734 0E0D0D0E0E0C0C0C db 0Eh, 0Dh, 0Dh, 0Eh, 0Eh, 0Ch, 0Ch, 0Ch 11644 0000873C 0D0D0D0D0D0D0C0D db 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh 11645 00008744 0D0C0C0D0D0D0D0D db 0Dh, 0Ch, 0Ch, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh 11646 0000874C 0D0D0D0D0D0D0D0C db 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch 11647 00008754 0C0D0D0C0C0C0C0D db 0Ch, 0Dh, 0Dh, 0Ch, 0Ch, 0Ch, 0Ch, 0Dh 11648 0000875C 0D0D0D0C0D0D0C0B db 0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Ch, 0Bh 11649 00008764 0C0C0C0C0C0C0C0C db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 11650 0000876C 0B0B0B0B0C0C0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh 11651 00008774 0C0C0B0C0C0C0C0B db 0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Bh 11652 0000877C 0B0C0C0B0C0C0B0C db 0Bh, 0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ch 11653 00008784 0C0B0C0C0A0A0A0B db 0Ch, 0Bh, 0Ch, 0Ch, 0Ah, 0Ah, 0Ah, 0Bh 11654 0000878C 0B0B0B0B0B0B0B0A db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah 11655 00008794 0A0A0A0B0B0A0B0B db 0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh 11656 0000879C 0A0B0B0B0B0A0A0B db 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh 11657 000087A4 0B0A0A0B0B0B0B0B db 0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11658 000087AC 0B09090A0A0A0A0A db 0Bh, 9, 9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11659 000087B4 0B0B0909090A0A09 db 0Bh, 0Bh, 9, 9, 9, 0Ah, 0Ah, 9 11660 000087BC 090A0A0A0A0A0A0A db 9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11661 000087C4 0A0A0A0809090909 db 0Ah, 0Ah, 0Ah, 8, 9, 9, 9, 9 11662 000087CC 09090A0A09090908 db 9, 9, 0Ah, 0Ah, 9, 9, 9, 8 11663 000087D4 0809090909090908 db 8, 9, 9, 9, 9, 9, 9, 8 11664 000087DC 0708080808070707 db 7, 8, 8, 8, 8, 7, 7, 7 11665 000087E4 0707060606060404 db 7, 7, 6, 6, 6, 6, 4, 4 11666 000087EC 03010D0D0D0D0C0D db 3, 1, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh 11667 000087F4 0D0D0D0D0D0C0D0D db 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh 11668 000087FC 0C0C0C0C0C0C0C0C db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 11669 00008804 0C0C0C0C0C0C0C0C db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 11670 0000880C 0C0C0C0C0C0C0C0D db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Dh 11671 00008814 0D0B0B0C0C0C0C0B db 0Dh, 0Bh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Bh 11672 0000881C 0B0B0B0B0B0C0C0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ch, 0Ch, 0Bh 11673 00008824 0B0B0B0B0B0B0B0C db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ch 11674 0000882C 0C0B0B0B0B0B0B0B db 0Ch, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11675 00008834 0B0B0B0B0B0B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11676 0000883C 0B0B0B0B0B0B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11677 00008844 0B0B0C0C0B0B0B0B db 0Bh, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh, 0Bh, 0Bh 11678 0000884C 0B0B0A0B0B0B0B0B db 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11679 00008854 0B0A0A0B0B0A0A0A db 0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah 11680 0000885C 0A0B0B0A0A0A0A0A db 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11681 00008864 0A0A0B0B0A0A0A0A db 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah 11682 0000886C 0A0B0B090A0A0A0A db 0Ah, 0Bh, 0Bh, 9, 0Ah, 0Ah, 0Ah, 0Ah 11683 00008874 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11684 0000887C 090A0A0A0A090A0A db 9, 0Ah, 0Ah, 0Ah, 0Ah, 9, 0Ah, 0Ah 11685 00008884 090A0A0A0A0A0A0A db 9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11686 0000888C 0A09090909090909 db 0Ah, 9, 9, 9, 9, 9, 9, 9 11687 00008894 0A0A090909090909 db 0Ah, 0Ah, 9, 9, 9, 9, 9, 9 11688 0000889C 0A0A090909090909 db 0Ah, 0Ah, 9, 9, 9, 9, 9, 9 11689 000088A4 0809090909090909 db 8, 9, 9, 9, 9, 9, 9, 9 11690 000088AC 0909090808080809 db 9, 9, 9, 8, 8, 8, 8, 9 11691 000088B4 0909090909090908 db 9, 9, 9, 9, 9, 9, 9, 8 11692 000088BC 0808080808090908 db 8, 8, 8, 8, 8, 9, 9, 8 11693 000088C4 0808080808080909 db 8, 8, 8, 8, 8, 8, 9, 9 11694 000088CC 0807080807070707 db 8, 7, 8, 8, 7, 7, 7, 7 11695 000088D4 0808070707070706 db 8, 8, 7, 7, 7, 7, 7, 6 11696 000088DC 0707060607070606 db 7, 7, 6, 6, 7, 7, 6, 6 11697 000088E4 0605050505050304 db 6, 5, 5, 5, 5, 5, 3, 4 11698 000088EC 04030B0B0B0B0B0B db 4, 3, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11699 000088F4 0B0B0A0B0B0B0B0A db 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah 11700 000088FC 0A0A0A0A080A0A09 db 0Ah, 0Ah, 0Ah, 0Ah, 8, 0Ah, 0Ah, 9 11701 00008904 0909090A1011110F db 9, 9, 9, 0Ah, 10h, 11h, 11h, 0Fh 11702 0000890C 0F10100E0F0F0E0E db 0Fh, 10h, 10h, 0Eh, 0Fh, 0Fh, 0Eh, 0Eh 11703 00008914 0F0F0E0E0F0F0F0F db 0Fh, 0Fh, 0Eh, 0Eh, 0Fh, 0Fh, 0Fh, 0Fh 11704 0000891C 0E0F0F0E0D080909 db 0Eh, 0Fh, 0Fh, 0Eh, 0Dh, 8, 9, 9 11705 00008924 08080D0E0E0E0E0E db 8, 8, 0Dh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh 11706 0000892C 0E0E0E0E0E0D0D0E db 0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh 11707 00008934 0E0E0E0D0E0E0D0D db 0Eh, 0Eh, 0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Dh 11708 0000893C 0D0E0E0E0E0D0D0E db 0Dh, 0Eh, 0Eh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh 11709 00008944 0E0D0E0E0C0D0D0D db 0Eh, 0Dh, 0Eh, 0Eh, 0Ch, 0Dh, 0Dh, 0Dh 11710 0000894C 0D0D0D0D0D0D0D0D db 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh 11711 00008954 0D0D0D0C0D0D0D0D db 0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Dh, 0Dh 11712 0000895C 0D0D0C0D0D0C0C0D db 0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Ch, 0Ch, 0Dh 11713 00008964 0D0B0C0C0C0C0C0C db 0Dh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 11714 0000896C 0C0D0D0B0C0C0C0C db 0Ch, 0Dh, 0Dh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch 11715 00008974 0B0C0C0C0C0C0C0C db 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 11716 0000897C 0C0B0C0C0B0B0B0B db 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh, 0Bh, 0Bh 11717 00008984 0C0C0C0C0C0C0C0C db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 11718 0000898C 0B0C0C0B0C0C0B0C db 0Bh, 0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ch 11719 00008994 0C0B0C0C0B0A0A0B db 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ah, 0Ah, 0Bh 11720 0000899C 0B0B0B0B0B0A0A0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh 11721 000089A4 0B0A0A0B0B0B0B0B db 0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11722 000089AC 0B0B0B0A0B0B0A0A db 0Bh, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah 11723 000089B4 0A0B0B0A0A0B0B0A db 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah 11724 000089BC 0A0B0B0A09090A0A db 0Ah, 0Bh, 0Bh, 0Ah, 9, 9, 0Ah, 0Ah 11725 000089C4 0A0A0A0A0909090A db 0Ah, 0Ah, 0Ah, 0Ah, 9, 9, 9, 0Ah 11726 000089CC 0A090A0A09090809 db 0Ah, 9, 0Ah, 0Ah, 9, 9, 8, 9 11727 000089D4 0909090909090908 db 9, 9, 9, 9, 9, 9, 9, 8 11728 000089DC 0809090808070708 db 8, 9, 9, 8, 8, 7, 7, 8 11729 000089E4 0807060606060404 db 8, 7, 6, 6, 6, 6, 4, 4 11730 000089EC 0301080808080808 db 3, 1, 8, 8, 8, 8, 8, 8 11731 000089F4 0808070808070708 db 8, 8, 7, 8, 8, 7, 7, 8 11732 000089FC 0807070707070707 db 8, 7, 7, 7, 7, 7, 7, 7 11733 00008A04 0707070707080809 db 7, 7, 7, 7, 7, 8, 8, 9 11734 00008A0C 0B0B0B0B0B0B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11735 00008A14 0B0B0B0B0B0B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11736 00008A1C 0B0B0B0B0B0B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11737 00008A24 0B0B0B0B040B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 4, 0Bh, 0Bh, 0Bh 11738 00008A2C 0B0C0C0B0A0B0B0A db 0Bh, 0Ch, 0Ch, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah 11739 00008A34 0A0A0A0B0B0A0A0A db 0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah 11740 00008A3C 0A0B0B0A0A0A0A0A db 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11741 00008A44 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11742 00008A4C 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11743 00008A54 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11744 00008A5C 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11745 00008A64 0A0A0B0B0A0A0A0A db 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah 11746 00008A6C 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11747 00008A74 0A0B0B0A0B0B0A09 db 0Ah, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah, 9 11748 00008A7C 0A0A0A0A0B0B0A09 db 0Ah, 0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 9 11749 00008A84 090A0A090A0A0A0A db 9, 0Ah, 0Ah, 9, 0Ah, 0Ah, 0Ah, 0Ah 11750 00008A8C 09090A0A09090909 db 9, 9, 0Ah, 0Ah, 9, 9, 9, 9 11751 00008A94 0909090909090909 db 9, 9, 9, 9, 9, 9, 9, 9 11752 00008A9C 0909090909090909 db 9, 9, 9, 9, 9, 9, 9, 9 11753 00008AA4 0909090909090909 db 9, 9, 9, 9, 9, 9, 9, 9 11754 00008AAC 0909090909090909 db 9, 9, 9, 9, 9, 9, 9, 9 11755 00008AB4 0A0A0909090A0A08 db 0Ah, 0Ah, 9, 9, 9, 0Ah, 0Ah, 8 11756 00008ABC 0909080808080808 db 9, 9, 8, 8, 8, 8, 8, 8 11757 00008AC4 0808080808080809 db 8, 8, 8, 8, 8, 8, 8, 9 11758 00008ACC 0908080808080809 db 9, 8, 8, 8, 8, 8, 8, 9 11759 00008AD4 0907080807070707 db 9, 7, 8, 8, 7, 7, 7, 7 11760 00008ADC 0708080707060607 db 7, 8, 8, 7, 7, 6, 6, 7 11761 00008AE4 0706050506060404 db 7, 6, 5, 5, 6, 6, 4, 4 11762 00008AEC 0404060606060606 db 4, 4, 6, 6, 6, 6, 6, 6 11763 00008AF4 0505050505040404 db 5, 5, 5, 5, 5, 4, 4, 4 11764 00008AFC 0401040404040404 db 4, 1, 4, 4, 4, 4, 4, 4 11765 00008B04 0404040404040404 db 4, 4, 4, 4, 4, 4, 4, 4 11766 00008B0C 0404 db 4, 4 11767 00008B0E 03 _@@const_3 db 3 11768 00008B0F 000000 db 3 dup(0) 11769 00008B12 [02480000] mp3_synth_filter_procs dd synth_16bit_shift_0_slow ; SYNTH_MACRO 0,0,0 11770 00008B16 [EE4A0000] dd synth_16bit_shift_1_slow ; SYNTH_MACRO 0,1,0 11771 00008B1A [E04D0000] dd synth_16bit_shift_2_slow ; SYNTH_MACRO 0,2,0 11772 00008B1E [D2500000] dd synth_8bit_shift_0_slow ; SYNTH_MACRO 1,0,0 11773 00008B22 [B3530000] dd synth_8bit_shift_1_slow ; SYNTH_MACRO 1,1,0 11774 00008B26 [9A560000] dd synth_8bit_shift_2_slow ; SYNTH_MACRO 1,2,0 11775 00008B2A [C3350000] dd synth_16bit_shift_0_fast ; SYNTH_MACRO 0,0,1 11776 00008B2E [CF380000] dd synth_16bit_shift_1_fast ; SYNTH_MACRO 0,1,1 11777 00008B32 [E13B0000] dd synth_16bit_shift_2_fast ; SYNTH_MACRO 0,2,1 11778 00008B36 [F33E0000] dd synth_8bit_shift_0_fast ; SYNTH_MACRO 1,0,1 11779 00008B3A [F4410000] dd synth_8bit_shift_1_fast ; SYNTH_MACRO 1,1,1 11780 00008B3E [FB440000] dd synth_8bit_shift_2_fast ; SYNTH_MACRO 1,2,1 11781 ;txt_hello db 'nocash mp3 decoder v1.4, 2024 martin korth, press ctrl+c to quit,' 11782 ; db ' BDS now',0Dh,0Ah,0 11783 ; Erdogan Tan - 17/10/2024 11784 00008B42 0D0A txt_hello db 13,10 11785 ;db 'NOCASH MP3 PLAYER v1.4 for Windows ',0 11786 ; 09/01/2025 11787 00008B44 4E4F43415348204D50- db 'NOCASH MP3 PLAYER v1.0 for TRDOS386 ',0 11787 00008B4D 3320504C4159455220- 11787 00008B56 76312E3020666F7220- 11787 00008B5F 5452444F5333383620- 11787 00008B68 00 11788 11789 00008B69 66696C653A2000 txt_file db 'file: ',0 11790 00008B70 66696C652073697A65- txt_file_size db 'file size: ',0 11790 00008B79 3A2000 11791 00008B7C 2C206964332073697A- txt_id3_size db ', id3 size: ',0 11791 00008B85 653A2000 11792 00008B89 2C207461672073697A- txt_tag_size db ', tag size: ',0 11792 00008B92 653A2000 11793 00008B96 696E7075743A2000 txt_input db 'input: ',0 11794 00008B9E 6F75747075743A2000 txt_output db 'output: ',0 11795 00008BA7 20687A2C2000 txt_hz db ' hz, ',0 11796 00008BAD 206368616E6E656C73- txt_channels db ' channels, ',0 11796 00008BB6 2C2000 11797 00008BB9 2062697400 txt_bit db ' bit',0 11798 00008BBE 206B6269742F7300 txt_kbit_s db ' kbit/s',0 11799 00008BC6 63616E6E6F74206F70- txt_not_found db 'cannot open source file',0Dh,0Ah,0 11799 00008BCF 656E20736F75726365- 11799 00008BD8 2066696C650D0A00 11800 00008BE0 75736167653A206D70- txt_help db 'usage: mp3play input.mp3 [output.wav] [verify.pcm] [/test]', 0Dh,0Ah 11800 00008BE9 33706C617920696E70- 11800 00008BF2 75742E6D7033205B6F- 11800 00008BFB 75747075742E776176- 11800 00008C04 5D205B766572696679- 11800 00008C0D 2E70636D5D205B2F74- 11800 00008C16 6573745D0D0A 11801 00008C1C 202020202020202020- db ' [/mono] [/8bit] [/fast] [/half|/quarter]',0Dh,0Ah,0 11801 00008C25 202020202020202020- 11801 00008C2E 202020202020205B2F- 11801 00008C37 6D6F6E6F5D205B2F38- 11801 00008C40 6269745D205B2F6661- 11801 00008C49 73745D205B2F68616C- 11801 00008C52 667C2F717561727465- 11801 00008C5B 725D0D0A00 11802 00008C60 766572696679206D61- _@@txt_verify1 db 'verify max difference = ',0 11802 00008C69 782064696666657265- 11802 00008C72 6E6365203D2000 11803 00008C79 206174206D70333A00 _@@txt_verify1_at_mp3 db ' at mp3:',0 11804 00008C82 2C2061766572616765- _@@txt_verify2 db ', average difference = ',0 11804 00008C8B 20646966666572656E- 11804 00008C94 6365203D2000 11805 11806 ; Erdogan Tan - 17/10/2024 11807 ;db 'NOCASH MP3 PLAYER v1.4 for Windows ',0 11808 00008C9A 287072657373204354- txt_ctrlc db '(press CTRL+C to quit)', 13,10,0 11808 00008CA3 524C2B4320746F2071- 11808 00008CAC 756974290D0A00 11809 txt_ctrlc_size equ $ - txt_ctrlc 11810 00008CB3 0D0A txt_about db 13,10 11811 ;db '----------------------------------',13,10 11812 00008CB5 2D2D2D2D2D2D2D2D2D- db '-----------------------------------',13,10 11812 00008CBE 2D2D2D2D2D2D2D2D2D- 11812 00008CC7 2D2D2D2D2D2D2D2D2D- 11812 00008CD0 2D2D2D2D2D2D2D2D0D- 11812 00008CD9 0A 11813 00008CDA 4572646F67616E2054- db 'Erdogan Tan - 15/01/2025 (Assembler: NASM)', 13,10 11813 00008CE3 616E202D2031352F30- 11813 00008CEC 312F32303235202841- 11813 00008CF5 7373656D626C65723A- 11813 00008CFE 204E41534D290D0A 11814 00008D06 4F726967696E616C20- db 'Original code: MP3PLAYER.EXE v1.4 (20/09/2024)', 13,10 11814 00008D0F 636F64653A204D5033- 11814 00008D18 504C415945522E4558- 11814 00008D21 452076312E34202832- 11814 00008D2A 302F30392F32303234- 11814 00008D33 290D0A 11815 00008D36 202020202020202020- db ' by Martin Korth (TASM source code)' 11815 00008D3F 202020202020627920- 11815 00008D48 4D617274696E204B6F- 11815 00008D51 72746820285441534D- 11815 00008D5A 20736F757263652063- 11815 00008D63 6F646529 11816 00008D67 0D0A0D0A00 db 13,10,13,10,0 11817 00008D6C 76312E342E30 db 'v1.4.0' 11818 ; 10/01/2025 11819 00008D72 00 half_buffer db 0 11820 11821 ; =========================================================================== 11822 ; Uninitialized DATA (BSS) 11823 ; =========================================================================== 11824 11825 00008D73 90 align 4 11826 11827 bss_start: 11828 11829 ; 10/01/2025 11830 ABSOLUTE bss_start 11831 11832 ; 12/01/2025 11833 ;;;; 11834 ; AC97 specific 11835 00008D74 ???????? bus_dev_fn resd 1 11836 00008D78 ???????? dev_vendor resd 1 11837 00008D7C ???? NAMBAR resw 1 11838 00008D7E ???? NABMBAR resw 1 11839 ; SB16 specific 11840 00008D80 ???????? audio_io_base resd 1 11841 ac97_int_ln_reg: 11842 00008D84 ?? audio_intr resb 1 11843 ;;;; 11844 11845 00008D85 ?????? alignb 4 11846 11847 ;;; 11848 ; 20/10/2024 (TRDOS 386 specific parameters) 11849 00008D88 ?? audio_hardware resb 1 11850 00008D89 ?? vra resb 1 11851 00008D8A ???? max_frequency resw 1 11852 00008D8C ?? srb resb 1 11853 00008D8D ?? volume_level resb 1 11854 00008D8E ?? blocks resb 1 11855 00008D8F ?? resb 1 11856 00008D90 ???????? buffer_size resd 1 11857 ;;; 11858 11859 ; 15/01/2025 (mp3play2.s) 11860 ;;;; 11861 ; 13/01/2025 (Interpolation parameters) 11862 00008D94 ???????? conversion resd 1 ; pointer to convers(t)ion 11863 ; or interpolation proc address 11864 00008D98 ???????? loadsize resd 1 ; decoding buffer size 11865 ;interpolation resb 1 ; interpolation status 11866 00008D9C ?? convert resb 1 ; mono to stereo or 8bit to 16bit 11867 ; conversion flag ; 15/01/2025 11868 00008D9D ?? counter resb 1 ; 15/01/2025 11869 00008D9E ???? resw 1 11870 ;;;; 11871 11872 11873 mp3_context_start: 11874 00008DA0 main_data_pool_start resb 4096 11875 00009DA0 ???????? main_data_pool_wr_ptr resd 1 11876 00009DA4 ???????? mp3_src_data_location resd 1 11877 00009DA8 ???????? mp3_src_frame_size resd 1 11878 00009DAC ???????? mp3_src_frame_end resd 1 11879 00009DB0 ???????? mp3_hdr_32bit_header resd 1 11880 00009DB4 ???????? mp3_hdr_flag_crc resd 1 11881 00009DB8 ???????? mp3_hdr_flag_mpeg25 resd 1 11882 00009DBC ???????? mp3_hdr_flag_padding resd 1 11883 00009DC0 ???????? mp3_sample_rate resd 1 11884 00009DC4 ???????? mp3_hdr_sample_rate_index resd 1 11885 00009DC8 ???????? mp3_bit_rate resd 1 11886 00009DCC ???????? mp3_src_num_channels resd 1 11887 00009DD0 ???????? mp3_output_num_channels resd 1 11888 00009DD4 ???????? mp3_output_sample_rate resd 1 11889 00009DD8 ???????? mp3_bytes_per_sample resd 1 11890 00009DDC ???????? mp3_curr_syn_index resd 1 11891 00009DE0 ???????? mp3_curr_syn_dst resd 1 11892 00009DE4 ???????? mp3_nb_frames resd 1 11893 00009DE8 ???????? mp3_hdr_mode_val resd 1 11894 00009DEC ???????? mp3_hdr_mode_ext resd 1 11895 00009DF0 ???????? mp3_hdr_flag_lsf resd 1 11896 00009DF4 ???????? mp3_synth_filter_proc resd 1 11897 11898 00009DF8 mp3_synth_buf resd 2048 11899 0000BDF8 ???????????????? mp3_synth_index resd 2 11900 0000BE00 mp3_sb_samples resd 2304 11901 ; MP3_MAX_CHANNELS*36*SBLIMIT 11902 0000E200 mp3_mdct_buf resd 1152 11903 ; MP3_MAX_CHANNELS*SBLIMIT*18 11904 0000F400 ???????? mp3_free_format_frame_size resd 1 11905 11906 0000F404 ?? mp3_curr_vfrac_bits resb 1 11907 11908 0000F405 ?????? alignb 4 11909 11910 0000F408 ???????? mp3_xing_id resd 1 11911 0000F40C ???????? mp3_xing_flags resd 1 11912 0000F410 ???????? mp3_xing_frames resd 1 11913 0000F414 ???????? mp3_xing_filesize resd 1 11914 0000F418 mp3_xing_toc resb 100 11915 0000F47C ???????? mp3_xing_vbr_scale resd 1 11916 0000F480 ???????? mp3_file_size resd 1 11917 0000F484 ???????? mp3_id3_size resd 1 11918 0000F488 ???????? mp3_tag_size resd 1 11919 11920 0000F48C ???????? mp3_num_frames_decoded resd 1 11921 0000F490 ???????? mp3_total_output_size resd 1 11922 0000F494 ???????? mp3_samples_dst resd 1 11923 ; DWORD mp3_samples_output_size 11924 0000F498 ???????? mp3_samples_output_size resd 1 11925 0000F49C ???????? mp3_samples_dst_step resd 1 11926 11927 0000F4A0 ???????? mp3_curr_channel resd 1 11928 0000F4A4 ???????? mp3_curr_granule resd 1 11929 0000F4A8 ???????? mp3_curr_frame resd 1 11930 11931 0000F4AC ???????? mp3_bitstream_start resd 1 11932 0000F4B0 ???????? mp3_src_remain resd 1 11933 0000F4B4 ???????? mp3_extra_bytes resd 1 11934 0000F4B8 ???????? mp3_main_data_begin resd 1 11935 0000F4BC ???????? mp3_num_compress_bits resd 1 11936 11937 0000F4C0 ???????? mp3_nb_granules resd 1 11938 11939 0000F4C4 mp3_granules resb 9856 11940 00011B44 mp3_exponents resw 576 11941 00011FC4 huff_tree_buf resb 0B800h 11942 0001D7C4 mp3_band_index_long resw 288 11943 0001DA04 mp3_table_4_3_exp resb 32828 11944 11945 00025A40 mp3_table_4_3_value resd 32828 11946 00045B30 mp3_exp_table resd 512 11947 00046330 mp3_expval_table resd 8192 11948 0004E330 mp3_mdct_win resd 288 11949 0004E7B0 mp3_is_table_lsf resd 512 11950 0004EFB0 mp3_synth_win resd 1024 11951 0004FFB0 mp3_lsf_sf_expand_exploded_table resb 8192 11952 mp3_context_end: 11953 00051FB0 ???????? _@@region_address0 resd 1 11954 00051FB4 ???????? _@@region_address1 resd 1 11955 00051FB8 ???????? _@@saved_sp resd 1 11956 00051FBC ???????? mp3_main_data_siz resd 1 11957 00051FC0 ???????? _@@scfsi resd 1 11958 00051FC4 _@@gains resd 3 11959 00051FD0 ???????? _@@rle_point resd 1 11960 00051FD4 ???????? _@@III resd 1 11961 00051FD8 ???????? _@@JJJ resd 1 11962 00051FDC ???????? _@@linbits resd 1 11963 00051FE0 ???????? _@@vlc_table resd 1 11964 00051FE4 ???????? _@@coarse_end resd 1 11965 11966 00051FE8 ???????? _@rle_point resd 1 11967 00051FEC ???????? _@@rle_ptr resd 1 11968 00051FF0 ???????? _@@rle_val resd 1 11969 00051FF4 ???????? _@@rle_val_x_40h resd 1 11970 00051FF8 ???????? _@@max_bands resb 4 11971 00051FFC ???????? _@@max_blocks resd 1 11972 00052000 ???????? _@@max_pos resd 1 11973 00052004 _@@sfb_array resb 40 11974 0005202C ???????? _@@is_tab resd 1 11975 00052030 ???????? _@@n_long_sfb resd 1 11976 00052034 ???????? _@@n_short_sfb resd 1 11977 00052038 ???????? _@@n_sfb resd 1 11978 0005203C _@@tmp resb 2304 11979 0005293C ???????? _@@s0 resd 1 11980 00052940 ???????? _@@s2 resd 1 11981 00052944 ???????? _@@s3 resd 1 11982 11983 00052948 _@@@tmp resd 18 ; resb 72 11984 00052990 ???????? _@@tmp0 resd 1 11985 00052994 ???????? _@@tmp1 resd 1 11986 00052998 ???????? _@@tmp2 resd 1 11987 0005299C ???????? _@@tmp3 resd 1 11988 000529A0 ???????? _@@tmp4 resd 1 11989 000529A4 ???????? _@@tmp5 resd 1 11990 000529A8 ???????? mp3_out2_a0 resd 1 11991 000529AC ???????? mp3_out2_a1 resd 1 11992 000529B0 ???????? mp3_out2_a2 resd 1 11993 000529B4 ???????? mp3_out2_b0 resd 1 11994 000529B8 ???????? mp3_out2_b1 resd 1 11995 000529BC ???????? mp3_out2_b2 resd 1 11996 000529C0 ???????? resd 1 11997 000529C4 ???????? resd 1 11998 000529C8 ???????? _@@@JJJ resd 1 11999 000529CC ???????? _@@www resd 1 12000 000529D0 ???????? _@@mdct_long_end resd 1 12001 000529D4 ???????? _@@sblimit resd 1 12002 000529D8 ???????? _@@switch_point resd 1 12003 000529DC mp3_huff_tmp_bits resb 256 12004 00052ADC mp3_huff_tmp_codes resb 512 12005 00052CDC ???????? _@@table_nb_bits resd 1 12006 00052CE0 ???????? _@@nb_codes resd 1 12007 00052CE4 ???????? _@@prefix_numbits resd 1 12008 00052CE8 ???????? _@@prefix_pattern resd 1 12009 00052CEC ???????? _@@curr_table_size resd 1 12010 00052CF0 ???????? _@@curr_table_mask resd 1 12011 00052CF4 ???????? _@@curr_table_index resd 1 12012 00052CF8 ???????? _@@granule_addr resd 1 12013 ; HANDLE hFile 12014 00052CFC ???????? hFile resd 1 12015 ; HANDLE hMap 12016 ;hMap resd 1 12017 00052D00 ???????? stream_start resd 1 12018 00052D04 ???????? stream_pos resd 1 12019 00052D08 ???????? bytes_left resd 1 12020 12021 ; 20/10/2024 12022 ; DWORD diskresult 12023 ;diskresult resd 1 12024 ; HANDLE std_out 12025 ;std_out resd 1 12026 ;cmdline_buf resb 1024 12027 00052D0C cmdline_buf resb 128 12028 ; HANDLE mp3_wav_handle 12029 00052D8C ???????? mp3_wav_handle resd 1 12030 ; HANDLE mp3_pcm_handleü 12031 00052D90 ???????? mp3_pcm_handle resd 1 12032 00052D94 ???????? _@@max_diff resd 1 12033 00052D98 ???????????????? _@@avg_diff resd 2 12034 00052DA0 ???????? pcm_filepos resd 1 12035 00052DA4 ???????? _@@mono_convert resd 1 12036 00052DA8 ???????? _@@pcm_steps resw 2 12037 00052DAC ???????? _@@worst_pcm_filepos resd 1 12038 00052DB0 ???????? _@@worst_mp3_filepos resd 1 12039 00052DB4 ???????? resd 1 12040 ;alignb 4 12041 12042 ; 10/01/2025 12043 00052DB8 alignb 4096 12044 12045 ; 12/01/2025 12046 ; 09/01/2025 12047 ;sample_buffer resb 36864 12048 ;;sample_buffer resb 8*MP3_MAX_OUTPUT_SIZE 12049 ;;sample_buffer_size equ $-sample_buffer 12050 12051 ; 15/01/2025 12052 00053000 decoding_buffer resb 8192 ; 2*4096 (max. 4608) 12053 00055000 sample_buffer resb 36864 ; 8*4608 12054 12055 ;alignb 4096 12056 12057 end_of_bss: 12058 12059 ; =========================================================================== 12060 ; end