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 E81D6B0000 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[DE8A0000] mov ebx, txt_hello 153 0000000A E8BA6B0000 call print_msg 154 155 0000000F E8E9690000 call get_commandline 156 00000014 0F826C010000 jc .exit 157 158 ;;; 159 ; 11/01/2025 160 0000001A E8A06C0000 call detect_enable_audio_device 161 0000001F 0F8261010000 jc .exit 162 ;;; 163 164 00000025 31ED xor ebp, ebp 165 00000027 E80E640000 call mp3_init 166 0000002C E8086B0000 call open_and_mmap_the_file 167 00000031 0F824F010000 jc .exit 168 00000037 E84F010000 call detect_cpu_386_and_up 169 0000003C E89A6B0000 call GetTickCount 170 00000041 F7D8 neg eax 171 00000043 A3[FC750000] mov [millisecond_count], eax 172 00000048 E887640000 call mp3_check_1st_frame 173 0000004D 0F8233010000 jc .exit 174 00000053 803D[EB750000]00 cmp byte [option_test], 0 175 0000005A 7407 jz short .no_benchmark_test 176 0000005C E83D660000 call mp3_plain_test_without_output 177 178 00000061 EB6F jmp .decode_done 179 180 .no_benchmark_test: 181 00000063 833D[9C840000]00 cmp dword [mp3_pcm_fname], 0 182 0000006A 740A jz short .no_pcm_verify 183 0000006C E855670000 call mp3_verify_pcm_file 184 00000071 E910010000 jmp .exit 185 186 .no_pcm_verify: 187 00000076 833D[98840000]00 cmp dword [mp3_dst_fname], 0 188 0000007D 7407 jz short .no_wav_output 189 0000007F E84F660000 call mp3_cast_to_wav_file 190 00000084 EB4C jmp short .decode_done 191 192 .no_wav_output: 193 ; 15/01/2025 194 ;;;; -------------------------- 195 ;mov byte [convert], 0 196 00000086 B002 mov al, 2 197 00000088 3805[248D0000] cmp [audio_hardware], al ; 2 198 0000008E 7511 jne short .direct 199 200 00000090 803D[6C9D0000]02 cmp byte [mp3_output_num_channels], 2 201 00000097 7227 jb short .indirect ; mono (8bit or 16bit) 202 00000099 3805[749D0000] cmp [mp3_bytes_per_sample], al ; 2 203 0000009F 721F jb short .indirect 204 .direct: 205 ;;;; -------------------------- 206 207 ;;; 208 ; 20/10/2024 209 ;call detect_enable_audio_device 210 ;jc .exit 211 000000A1 E8066D0000 call audio_system_init 212 ;jc .exit 213 000000A6 7207 jc short .exit@ ; 15/01/2025 214 ;;; 215 216 000000A8 E8BD6D0000 call mp3_cast_to_speaker 217 218 ; 13/01/2025 219 ;;;; -------------------------- 220 000000AD EB23 jmp short .decode_done 221 222 ; 15/01/2025 223 .exit@: 224 ; Disable audio device 225 sys _audio, 0C00h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 000000AF 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 000000B4 B820000000 <1> mov eax, %1 130 <1> 131 000000B9 CD40 <1> int 40h 226 000000BB E93F6B0000 jmp ExitProcess 227 228 .indirect: 229 000000C0 FE05[388D0000] inc byte [convert] ; 1 230 000000C6 E83C6F0000 call audio_system_init_x 231 000000CB 72E2 jc short .exit@ 232 000000CD E8B96F0000 call mp3_cast_to_speaker_x 233 ;;;; -------------------------- 234 235 .decode_done: 236 000000D2 E8046B0000 call GetTickCount 237 000000D7 0105[FC750000] add [millisecond_count], eax 238 000000DD BA[D1840000] mov edx, txt_decode_timing1 ; "audio duration " 239 000000E2 E8F7640000 call wrstr_edx 240 000000E7 A1[2CF40000] mov eax, [mp3_total_output_size] 241 000000EC BAE8030000 mov edx, 1000 242 000000F1 F7E2 mul edx 243 000000F3 F735[709D0000] div dword [mp3_output_sample_rate] 244 000000F9 31D2 xor edx, edx 245 000000FB F735[6C9D0000] div dword [mp3_output_num_channels] 246 00000101 31D2 xor edx, edx 247 00000103 F735[749D0000] div dword [mp3_bytes_per_sample] 248 00000109 A3[F8750000] mov [mp3_output_milliseconds], eax 249 0000010E E801650000 call wr_decimal_eax_with_thousands_seperator 250 00000113 BA[E1840000] mov edx, txt_decode_timing2 ; " milliseconds, decoded in " 251 00000118 E8C1640000 call wrstr_edx 252 0000011D A1[FC750000] mov eax, [millisecond_count] 253 00000122 E8ED640000 call wr_decimal_eax_with_thousands_seperator 254 00000127 BA[FC840000] mov edx, txt_decode_timing3 ; " milliseconds\r\n" 255 0000012C E8AD640000 call wrstr_edx 256 00000131 BA[0C850000] mov edx, txt_clks_per_second ; " clock cycles per second:\r\n" 257 00000136 E8A3640000 call wrstr_edx 258 0000013B BE[00760000] mov esi, ttt ; rdtsc_list_start 259 260 .timelog_lop: 261 00000140 E8BB640000 call wrspc 262 00000145 8D5608 lea edx, [esi+8] 263 00000148 E891640000 call wrstr_edx 264 0000014D E8AE640000 call wrspc 265 00000152 8B06 mov eax, [esi] 266 00000154 8B5E04 mov ebx, [esi+4] 267 00000157 BAE8030000 mov edx, 1000 268 0000015C 0FAFDA imul ebx, edx 269 0000015F F7E2 mul edx 270 00000161 01DA add edx, ebx 271 00000163 3B15[F8750000] cmp edx, [mp3_output_milliseconds] 272 00000169 730B jnb short .timelog_oops 273 0000016B F735[F8750000] div dword [mp3_output_milliseconds] 274 00000171 E89E640000 call wr_decimal_eax_with_thousands_seperator 275 276 .timelog_oops: 277 00000176 E874640000 call wrcrlf 278 0000017B 83C618 add esi, 24 279 0000017E 81FE[C8770000] cmp esi, mp3_bitrate_tab 280 00000184 75BA jnz short .timelog_lop 281 282 .exit: 283 ;push 0 ; uExitCode 284 ;call ExitProcess 285 00000186 E9746A0000 jmp ExitProcess 286 287 288 ; =============== S U B R O U T I N E ======================================= 289 290 291 detect_cpu_386_and_up: 292 0000018B C605[F5750000]03 mov byte [detected_cpu], 3 293 00000192 89E3 mov ebx, esp 294 00000194 83E4FC and esp, ~ 3 ; not 3 295 00000197 9C pushf 296 00000198 58 pop eax 297 00000199 89C1 mov ecx, eax 298 0000019B 3500000400 xor eax, 40000h 299 000001A0 50 push eax 300 000001A1 9D popf 301 000001A2 9C pushf 302 000001A3 58 pop eax 303 000001A4 31C8 xor eax, ecx 304 000001A6 51 push ecx 305 000001A7 9D popf 306 000001A8 89DC mov esp, ebx 307 000001AA A900000400 test eax, 40000h 308 000001AF 7431 jz short .no_id 309 000001B1 FE05[F5750000] inc byte [detected_cpu] 310 000001B7 E827000000 call @@get_id_flag 311 000001BC 7507 jnz short .yep_id 312 000001BE E820000000 call @@get_id_flag 313 000001C3 741D jz short .no_id 314 315 .yep_id: 316 000001C5 B801000000 mov eax, 1 317 000001CA 0FA2 cpuid 318 000001CC 80E40F and ah, 0Fh 319 000001CF 8825[F5750000] mov [detected_cpu], ah 320 000001D5 C605[F4750000]01 mov byte [cpuid_exists], 1 321 000001DC 8915[F0750000] mov [cpuid_flags], edx 322 323 .no_id: 324 000001E2 C3 retn 325 326 ; =============== S U B R O U T I N E ======================================= 327 328 329 @@get_id_flag: 330 000001E3 9C pushf 331 000001E4 58 pop eax 332 000001E5 0D00002000 or eax, 200000h 333 000001EA 50 push eax 334 000001EB 9D popf 335 000001EC 9C pushf 336 000001ED 58 pop eax 337 000001EE A900002000 test eax, 200000h 338 000001F3 C3 retn 339 340 ; =============== S U B R O U T I N E ======================================= 341 342 bswap_eax: 343 000001F4 86E0 xchg al, ah 344 000001F6 C1C810 ror eax, 10h 345 000001F9 86E0 xchg al, ah 346 000001FB C3 retn 347 348 ; =============== S U B R O U T I N E ======================================= 349 350 mp3_recollect_bits: 351 000001FC F7C601000000 test esi, 1 352 00000202 7510 jnz short .odd 353 00000204 668B2E mov bp, [esi] 354 00000207 83C602 add esi, 2 355 0000020A 66C1CD08 ror bp, 8 356 0000020E C1E510 shl ebp, 16 357 00000211 B500 mov ch, 0 358 00000213 C3 retn 359 360 .odd: 361 00000214 0FB62E movzx ebp, byte [esi] 362 00000217 46 inc esi 363 00000218 C1E510 shl ebp, 16 364 0000021B 668B2E mov bp, [esi] 365 0000021E 83C602 add esi, 2 366 00000221 66C1CD08 ror bp, 8 367 00000225 C1E508 shl ebp, 8 368 00000228 B508 mov ch, 8 369 0000022A C3 retn 370 371 ; =============== S U B R O U T I N E ======================================= 372 373 374 mp3_get_bits: 375 0000022B 89E8 mov eax, ebp 376 0000022D D3E5 shl ebp, cl 377 0000022F D3C0 rol eax, cl 378 00000231 31E8 xor eax, ebp 379 00000233 28CD sub ch, cl 380 00000235 7801 js short mp3_collect_more 381 00000237 C3 retn 382 383 mp3_collect_more: 384 00000238 88E9 mov cl, ch 385 0000023A 80C510 add ch, 10h 386 0000023D D3C5 rol ebp, cl 387 0000023F 668B2E mov bp, [esi] 388 00000242 83C602 add esi, 2 389 00000245 66C1CD08 ror bp, 8 390 00000249 D3CD ror ebp, cl 391 0000024B C3 retn 392 393 ; =============== S U B R O U T I N E ======================================= 394 395 396 mp3_uncollect_bits: 397 0000024C 83EE02 sub esi, 2 398 0000024F C0ED03 shr ch, 3 399 00000252 0FB6CD movzx ecx, ch 400 00000255 29CE sub esi, ecx 401 00000257 C3 retn 402 403 ; =============== S U B R O U T I N E ======================================= 404 405 406 mp3_search_get_header: 407 00000258 F605[F0750000]10 test byte [cpuid_flags], 10h 408 0000025F 740E jz short .no_rdtsc_supported 409 00000261 0F31 rdtsc 410 00000263 2905[00760000] sub [ttt], eax 411 00000269 1915[04760000] sbb [ttt+4], edx 412 413 .no_rdtsc_supported: 414 0000026F C705[50F40000]0000- mov dword [mp3_extra_bytes], 0 414 00000277 0000 415 416 .retry_header: 417 00000279 833D[4CF40000]04 cmp dword [mp3_src_remain], 4 418 00000280 0F82B5010000 jb .fail_no_header 419 00000286 803EFF cmp byte [esi], 0FFh 420 00000289 7516 jnz short .bad_header 421 0000028B 8A4601 mov al, [esi+1] 422 0000028E 24E6 and al, 0E6h 423 00000290 3CE2 cmp al, 0E2h 424 00000292 750D jnz short .bad_header 425 00000294 8A4602 mov al, [esi+2] 426 00000297 3CF0 cmp al, 0F0h 427 00000299 7306 jnb short .bad_header 428 0000029B 240C and al, 0Ch 429 0000029D 3C0C cmp al, 0Ch 430 0000029F 7519 jnz short .good_header 431 432 .bad_header: 433 000002A1 46 inc esi 434 000002A2 FF0D[4CF40000] dec dword [mp3_src_remain] 435 000002A8 FF05[50F40000] inc dword [mp3_extra_bytes] 436 000002AE C705[3C9D0000]- mov dword [main_data_pool_wr_ptr], main_data_pool_start 436 000002B4 [3C8D0000] 437 000002B8 EBBF jmp short .retry_header 438 439 .good_header: 440 000002BA 8B06 mov eax, [esi] 441 000002BC E833FFFFFF call bswap_eax 442 000002C1 A3[4C9D0000] mov [mp3_hdr_32bit_header], eax 443 000002C6 C705[8C9D0000]0000- mov dword [mp3_hdr_flag_lsf], 0 443 000002CE 0000 444 000002D0 C705[549D0000]0000- mov dword [mp3_hdr_flag_mpeg25], 0 444 000002D8 0000 445 000002DA C705[5CF40000]0200- mov dword [mp3_nb_granules], 2 445 000002E2 0000 446 000002E4 A900000800 test eax, 80000h 447 000002E9 7525 jnz short .lsf_this 448 000002EB C705[8C9D0000]0100- mov dword [mp3_hdr_flag_lsf], 1 448 000002F3 0000 449 000002F5 C705[5CF40000]0100- mov dword [mp3_nb_granules], 1 449 000002FD 0000 450 000002FF A900001000 test eax, 100000h 451 00000304 750A jnz short .lsf_this 452 00000306 C705[549D0000]0100- mov dword [mp3_hdr_flag_mpeg25], 1 452 0000030E 0000 453 454 .lsf_this: 455 00000310 C1E80A shr eax, 10 456 00000313 83E003 and eax, 3 457 00000316 8B0D[8C9D0000] mov ecx, [mp3_hdr_flag_lsf] 458 0000031C 030D[549D0000] add ecx, [mp3_hdr_flag_mpeg25] 459 00000322 0FB79400[08780000] movzx edx, word [mp3_freq_tab+eax*2] 460 0000032A D3EA shr edx, cl 461 0000032C 8D0C49 lea ecx, [ecx+ecx*2] 462 0000032F 01C8 add eax, ecx 463 00000331 A3[609D0000] mov [mp3_hdr_sample_rate_index], eax 464 00000336 8915[5C9D0000] mov [mp3_sample_rate], edx 465 466 0000033C 8A0D[EE750000] mov cl, [option_rate_shift] 467 00000342 D3EA shr edx, cl 468 469 00000344 8915[709D0000] mov [mp3_output_sample_rate], edx 470 0000034A A1[4C9D0000] mov eax, [mp3_hdr_32bit_header] 471 0000034F C1E810 shr eax, 10h 472 00000352 F7D0 not eax 473 00000354 83E001 and eax, 1 474 00000357 A3[509D0000] mov [mp3_hdr_flag_crc], eax 475 0000035C A1[4C9D0000] mov eax, [mp3_hdr_32bit_header] 476 00000361 C1E809 shr eax, 9 477 00000364 83E001 and eax, 1 478 00000367 A3[589D0000] mov [mp3_hdr_flag_padding], eax 479 0000036C A1[4C9D0000] mov eax, [mp3_hdr_32bit_header] 480 00000371 C1E80C shr eax, 12 481 00000374 83E00F and eax, 0Fh 482 00000377 7512 jnz short .not_free_format 483 00000379 E85F5D0000 call mp3_detect_free_format_block_size 484 0000037E 0F821DFFFFFF jb .bad_header 485 00000384 A1[9CF30000] mov eax, [mp3_free_format_frame_size] 486 00000389 EB34 jmp short .this_frame_size_plus_padding 487 488 .not_free_format: 489 0000038B 8B15[8C9D0000] mov edx, [mp3_hdr_flag_lsf] 490 00000391 C1E204 shl edx, 4 491 00000394 01D0 add eax, edx 492 00000396 0FB78400[C8770000] movzx eax, word [mp3_bitrate_tab+eax*2] ; kbit/s 493 0000039E 69C0E8030000 imul eax, 1000 ; bit/s 494 000003A4 A3[649D0000] mov [mp3_bit_rate], eax 495 000003A9 69C090000000 imul eax, 144 ; 144=90h=8*18 496 000003AF 31D2 xor edx, edx 497 000003B1 F735[5C9D0000] div dword [mp3_sample_rate] 498 000003B7 8B0D[8C9D0000] mov ecx, [mp3_hdr_flag_lsf] 499 000003BD D3E8 shr eax, cl 500 501 .this_frame_size_plus_padding: 502 000003BF 0305[589D0000] add eax, [mp3_hdr_flag_padding] 503 000003C5 A3[449D0000] mov [mp3_src_frame_size], eax 504 000003CA 01F0 add eax, esi 505 000003CC A3[489D0000] mov [mp3_src_frame_end], eax 506 000003D1 A1[4C9D0000] mov eax, [mp3_hdr_32bit_header] 507 000003D6 C1E806 shr eax, 6 508 000003D9 83E003 and eax, 3 509 000003DC A3[849D0000] mov [mp3_hdr_mode_val], eax 510 000003E1 BA01000000 mov edx, 1 511 512 000003E6 3C03 cmp al, 3 513 000003E8 7401 jz short .this_channels 514 515 ;mov edx, 2 516 ; 10/01/2025 517 000003EA 42 inc edx 518 .this_channels: 519 000003EB 8915[689D0000] mov [mp3_src_num_channels], edx 520 000003F1 803D[EC750000]00 cmp byte [option_mono], 0 521 000003F8 7405 jz short .allow_stereo 522 000003FA BA01000000 mov edx, 1 523 .allow_stereo: 524 000003FF 8915[6C9D0000] mov [mp3_output_num_channels], edx 525 00000405 0FAF15[749D0000] imul edx, [mp3_bytes_per_sample] 526 0000040C 8915[38F40000] mov [mp3_samples_dst_step], edx 527 00000412 A1[4C9D0000] mov eax, [mp3_hdr_32bit_header] 528 00000417 C1E804 shr eax, 4 529 0000041A 83E003 and eax, 3 530 0000041D A3[889D0000] mov [mp3_hdr_mode_ext], eax 531 00000422 F605[F0750000]10 test byte [cpuid_flags], 10h 532 00000429 740E jz short .no_rdtsc_supported@ 533 0000042B 0F31 rdtsc 534 0000042D 0105[00760000] add [ttt], eax 535 00000433 1115[04760000] adc [ttt+4], edx 536 537 .no_rdtsc_supported@: 538 00000439 F8 clc 539 0000043A C3 retn 540 541 .fail_no_header: 542 0000043B F605[F0750000]10 test byte [cpuid_flags], 10h 543 00000442 740E jz short .no_rdtsc_supported@@ 544 00000444 0F31 rdtsc 545 00000446 0105[00760000] add [ttt], eax 546 0000044C 1115[04760000] adc [ttt+4], edx 547 548 .no_rdtsc_supported@@: 549 00000452 C705[449D0000]0000- mov dword [mp3_src_frame_size], 0 549 0000045A 0000 550 0000045C F9 stc 551 0000045D C3 retn 552 553 554 ; =============== S U B R O U T I N E ======================================= 555 556 557 mp3_bitstream_read_header_extra: 558 0000045E F605[F0750000]10 test byte [cpuid_flags], 10h 559 00000465 740E jz short .no_rdtsc_supported 560 00000467 0F31 rdtsc 561 00000469 2905[18760000] sub [rdtsc_read_header_extra], eax 562 0000046F 1915[1C760000] sbb [rdtsc_read_header_extra+4], edx 563 564 .no_rdtsc_supported: 565 00000475 833D[509D0000]00 cmp dword [mp3_hdr_flag_crc], 0 566 0000047C 7422 jz short .without_crc 567 0000047E 89E8 mov eax, ebp ; mp3mac_get_n_bits 16 568 00000480 C1E510 shl ebp, 10h 569 00000483 C1C010 rol eax, 10h 570 00000486 31E8 xor eax, ebp 571 00000488 80ED10 sub ch, 10h 572 0000048B 7913 jns short .without_crc 573 0000048D 88E9 mov cl, ch ; mp3mac_collect_more 574 0000048F 80C510 add ch, 10h 575 00000492 D3C5 rol ebp, cl 576 00000494 668B2E mov bp, [esi] 577 00000497 83C602 add esi, 2 578 0000049A 66C1CD08 ror bp, 8 579 0000049E D3CD ror ebp, cl 580 581 .without_crc: 582 000004A0 833D[8C9D0000]00 cmp dword [mp3_hdr_flag_lsf], 0 583 000004A7 745B jz short .pre_lsf_zero 584 000004A9 C705[58F40000]0900- mov dword [mp3_num_compress_bits], 9 584 000004B1 0000 585 000004B3 89E8 mov eax, ebp ; mp3mac_get_n_bits 8 586 000004B5 C1E508 shl ebp, 8 587 000004B8 C1C008 rol eax, 8 588 000004BB 31E8 xor eax, ebp 589 000004BD 80ED08 sub ch, 8 590 000004C0 7913 jns short .without_crc@ 591 000004C2 88E9 mov cl, ch 592 000004C4 80C510 add ch, 10h 593 000004C7 D3C5 rol ebp, cl 594 000004C9 668B2E mov bp, [esi] 595 000004CC 83C602 add esi, 2 596 000004CF 66C1CD08 ror bp, 8 597 000004D3 D3CD ror ebp, cl 598 599 .without_crc@: 600 000004D5 A3[54F40000] mov [mp3_main_data_begin], eax 601 000004DA 8A0D[689D0000] mov cl, byte [mp3_src_num_channels] 602 000004E0 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 603 000004E2 D3E5 shl ebp, cl 604 000004E4 D3C0 rol eax, cl 605 000004E6 31E8 xor eax, ebp 606 000004E8 28CD sub ch, cl 607 000004EA 7913 jns short .without_crc@@ 608 000004EC 88E9 mov cl, ch 609 000004EE 80C510 add ch, 10h 610 000004F1 D3C5 rol ebp, cl 611 000004F3 668B2E mov bp, [esi] 612 000004F6 83C602 add esi, 2 613 000004F9 66C1CD08 ror bp, 8 614 000004FD D3CD ror ebp, cl 615 616 .without_crc@@: 617 000004FF E9A1000000 jmp .pre_lsf_done 618 619 .pre_lsf_zero: 620 00000504 C705[58F40000]0400- mov dword [mp3_num_compress_bits], 4 620 0000050C 0000 621 0000050E 89E8 mov eax, ebp ; mp3mac_get_n_bits 9 622 00000510 C1E509 shl ebp, 9 623 00000513 C1C009 rol eax, 9 624 00000516 31E8 xor eax, ebp 625 00000518 80ED09 sub ch, 9 626 0000051B 7913 jns short .without_crc@@@ 627 0000051D 88E9 mov cl, ch 628 0000051F 80C510 add ch, 10h 629 00000522 D3C5 rol ebp, cl 630 00000524 668B2E mov bp, [esi] 631 00000527 83C602 add esi, 2 632 0000052A 66C1CD08 ror bp, 8 633 0000052E D3CD ror ebp, cl 634 635 .without_crc@@@: 636 00000530 A3[54F40000] mov [mp3_main_data_begin], eax 637 00000535 8A0D[689D0000] mov cl, byte [mp3_src_num_channels] 638 0000053B D0E1 shl cl, 1 ; 1,2 --> 2,4 639 0000053D 80F107 xor cl, 7 ; --> 5,3 640 00000540 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 641 00000542 D3E5 shl ebp, cl 642 00000544 D3C0 rol eax, cl 643 00000546 31E8 xor eax, ebp 644 00000548 28CD sub ch, cl 645 0000054A 7913 jns short .without_crc@@@@ 646 0000054C 88E9 mov cl, ch 647 0000054E 80C510 add ch, 10h 648 00000551 D3C5 rol ebp, cl 649 00000553 668B2E mov bp, [esi] 650 00000556 83C602 add esi, 2 651 00000559 66C1CD08 ror bp, 8 652 0000055D D3CD ror ebp, cl 653 654 .without_crc@@@@: 655 0000055F 8B15[689D0000] mov edx, [mp3_src_num_channels] 656 00000565 BB[60F40000] mov ebx, mp3_granules 657 658 .pre_channel_lop: 659 0000056A C7432800000000 mov dword [ebx+40], 0 ; [ebx+$mp3gr_scfsi] 660 00000571 81C3A0090000 add ebx, 2464 ; $mp3gr_entrysiz 661 00000577 89E8 mov eax, ebp ; mp3mac_get_n_bits 4 662 00000579 C1E504 shl ebp, 4 663 0000057C C1C004 rol eax, 4 664 0000057F 31E8 xor eax, ebp 665 00000581 80ED04 sub ch, 4 666 00000584 7913 jns short .without_crc@@@@@ 667 00000586 88E9 mov cl, ch 668 00000588 80C510 add ch, 10h 669 0000058B D3C5 rol ebp, cl 670 0000058D 668B2E mov bp, [esi] 671 00000590 83C602 add esi, 2 672 00000593 66C1CD08 ror bp, 8 673 00000597 D3CD ror ebp, cl 674 675 .without_crc@@@@@: 676 00000599 894328 mov [ebx+28h], eax ; [ebx+$mp3gr_scfsi] 677 0000059C 81C3A0090000 add ebx, 2464 ; $mp3gr_entrysiz 678 000005A2 4A dec edx 679 000005A3 75C5 jnz short .pre_channel_lop 680 681 .pre_lsf_done: 682 000005A5 A1[5CF40000] mov eax, [mp3_nb_granules] 683 000005AA 6BC012 imul eax, 12h 684 000005AD A3[809D0000] mov [mp3_nb_frames], eax 685 000005B2 A1[809D0000] mov eax, [mp3_nb_frames] 686 000005B7 0FAF05[6C9D0000] imul eax, [mp3_output_num_channels] 687 000005BE 0FAF05[749D0000] imul eax, [mp3_bytes_per_sample] 688 000005C5 C1E005 shl eax, 5 689 000005C8 8A0D[EE750000] mov cl, [option_rate_shift] 690 000005CE D3E8 shr eax, cl 691 000005D0 A3[34F40000] mov [mp3_samples_output_size], eax 692 000005D5 F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_read_header_extra 693 000005DC 740E jz short .no_rdtsc_supported@ 694 000005DE 0F31 rdtsc 695 000005E0 0105[18760000] add [rdtsc_read_header_extra], eax 696 000005E6 1115[1C760000] adc [rdtsc_read_header_extra+4], edx 697 698 .no_rdtsc_supported@: 699 000005EC C3 retn 700 701 702 ; =============== S U B R O U T I N E ======================================= 703 704 705 mp3_bitstream_read_granules: 706 000005ED F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_read_granule 707 000005F4 740E jz short .no_rdtsc_supported 708 000005F6 0F31 rdtsc 709 000005F8 2905[30760000] sub [rdtsc_read_granule], eax 710 000005FE 1915[34760000] sbb [rdtsc_read_granule+4], edx 711 712 .no_rdtsc_supported: 713 00000604 8925[541F0500] mov [_@@saved_sp], esp 714 0000060A C705[581F0500]0000- mov dword [mp3_main_data_siz], 0 714 00000612 0000 715 00000614 C705[40F40000]0000- mov dword [mp3_curr_granule], 0 715 0000061C 0000 716 0000061E BB[60F40000] mov ebx, mp3_granules 717 718 .hdr_granule_lop: 719 00000623 53 push ebx 720 00000624 C705[3CF40000]0000- mov dword [mp3_curr_channel], 0 720 0000062C 0000 721 722 .hdr_channel_lop: 723 0000062E 89E8 mov eax, ebp ; mp3mac_get_n_bits 12 724 00000630 C1E50C shl ebp, 12 725 00000633 C1C00C rol eax, 12 726 00000636 31E8 xor eax, ebp 727 00000638 80ED0C sub ch, 12 728 0000063B 7913 jns short .without_crc 729 0000063D 88E9 mov cl, ch 730 0000063F 80C510 add ch, 16 731 00000642 D3C5 rol ebp, cl 732 00000644 668B2E mov bp, [esi] 733 00000647 83C602 add esi, 2 734 0000064A 66C1CD08 ror bp, 8 735 0000064E D3CD ror ebp, cl 736 737 .without_crc: 738 00000650 8B15[581F0500] mov edx, [mp3_main_data_siz] 739 00000656 8903 mov [ebx], eax 740 00000658 895304 mov [ebx+4], edx 741 0000065B 01D0 add eax, edx 742 0000065D 894308 mov [ebx+8], eax 743 00000660 A3[581F0500] mov [mp3_main_data_siz], eax 744 00000665 89E8 mov eax, ebp ; mp3mac_get_n_bits 9 745 00000667 C1E509 shl ebp, 9 746 0000066A C1C009 rol eax, 9 747 0000066D 31E8 xor eax, ebp 748 0000066F 80ED09 sub ch, 9 749 00000672 7913 jns short .without_crc@ 750 00000674 88E9 mov cl, ch 751 00000676 80C510 add ch, 10h 752 00000679 D3C5 rol ebp, cl 753 0000067B 668B2E mov bp, [esi] 754 0000067E 83C602 add esi, 2 755 00000681 66C1CD08 ror bp, 8 756 00000685 D3CD ror ebp, cl 757 758 .without_crc@: 759 00000687 89430C mov [ebx+12], eax ; [ebx+$mp3gr_big_values] 760 0000068A 89E8 mov eax, ebp ; mp3mac_get_n_bits 8 761 0000068C C1E508 shl ebp, 8 762 0000068F C1C008 rol eax, 8 763 00000692 31E8 xor eax, ebp 764 00000694 80ED08 sub ch, 8 765 00000697 7913 jns short .without_crc@@ 766 00000699 88E9 mov cl, ch 767 0000069B 80C510 add ch, 10h 768 0000069E D3C5 rol ebp, cl 769 000006A0 668B2E mov bp, [esi] 770 000006A3 83C602 add esi, 2 771 000006A6 66C1CD08 ror bp, 8 772 000006AA D3CD ror ebp, cl 773 774 .without_crc@@: 775 000006AC 05BE000000 add eax, 190 ; 400-210 776 000006B1 833D[849D0000]01 cmp dword [mp3_hdr_mode_val], 1 777 000006B8 750F jnz short .not_ms_stereo 778 000006BA F705[889D0000]0200- test dword [mp3_hdr_mode_ext], 2 778 000006C2 0000 779 000006C4 7403 jz short .not_ms_stereo 780 000006C6 83E802 sub eax, 2 781 782 .not_ms_stereo: 783 000006C9 894310 mov [ebx+16], eax ; [ebx+$mp3gr_global_gain] 784 000006CC 8A0D[58F40000] mov cl, byte [mp3_num_compress_bits] 785 000006D2 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 786 000006D4 D3E5 shl ebp, cl 787 000006D6 D3C0 rol eax, cl 788 000006D8 31E8 xor eax, ebp 789 000006DA 28CD sub ch, cl 790 000006DC 7913 jns short .without_crc@@@ 791 000006DE 88E9 mov cl, ch 792 000006E0 80C510 add ch, 10h 793 000006E3 D3C5 rol ebp, cl 794 000006E5 668B2E mov bp, [esi] 795 000006E8 83C602 add esi, 2 796 000006EB 66C1CD08 ror bp, 8 797 000006EF D3CD ror ebp, cl 798 799 .without_crc@@@: 800 000006F1 894314 mov [ebx+20], eax ; [ebx+$mp3gr_scalefac_compress] 801 000006F4 FECD dec ch ; mp3mac_get_bit_to_cy 802 ; dec mp3_colNN 803 000006F6 D1E5 shl ebp, 1 ; shl mp3_col32,1 ; cy=data 804 000006F8 0F834F010000 jnb .no_blocksplit 805 000006FE 89E8 mov eax, ebp ; mp3mac_get_n_bits 2 806 00000700 C1E502 shl ebp, 2 807 00000703 C1C002 rol eax, 2 808 00000706 31E8 xor eax, ebp 809 00000708 80ED02 sub ch, 2 810 0000070B 7913 jns short .without_crc@@@@ 811 0000070D 88E9 mov cl, ch 812 0000070F 80C510 add ch, 10h 813 00000712 D3C5 rol ebp, cl 814 00000714 668B2E mov bp, [esi] 815 00000717 83C602 add esi, 2 816 0000071A 66C1CD08 ror bp, 8 817 0000071E D3CD ror ebp, cl 818 819 .without_crc@@@@: 820 00000720 83F800 cmp eax, 0 821 00000723 0F847B030000 jz .error 822 00000729 89432C mov [ebx+44], eax ; [ebx+$mp3gr_block_type] 823 0000072C 83F802 cmp eax, 2 824 0000072F B812000000 mov eax, 18 ; 36/2 ; region_size (default) 825 00000734 741C jz short .this_region_size 826 00000736 833D[609D0000]02 cmp dword [mp3_hdr_sample_rate_index], 2 827 0000073D 7613 jbe short .this_region_size 828 0000073F B81B000000 mov eax, 27 ; 54/2 ; region_size 829 00000744 833D[609D0000]08 cmp dword [mp3_hdr_sample_rate_index], 8 830 0000074B 7505 jnz short .this_region_size 831 0000074D B836000000 mov eax, 54 ; 108/2 ; region_size (for rate=8) 832 833 .this_region_size: 834 00000752 894350 mov [ebx+80], eax ; [ebx+$mp3gr_region_size+0*4] 835 00000755 C7435420010000 mov dword [ebx+84], 288 ; [ebx+$mp3gr_region_size+1*4],576/2 836 0000075C C7435820010000 mov dword [ebx+88], 288 ; [ebx+$mp3gr_region_size+2*4],576/2 837 00000763 89E8 mov eax, ebp ; mp3mac_get_n_bits 1 838 00000765 D1E5 shl ebp, 1 839 00000767 D1C0 rol eax, 1 840 00000769 31E8 xor eax, ebp 841 0000076B 80ED01 sub ch, 1 842 0000076E 7913 jns short .without_crc@@@@@ 843 00000770 88E9 mov cl, ch 844 00000772 80C510 add ch, 10h 845 00000775 D3C5 rol ebp, cl 846 00000777 668B2E mov bp, [esi] 847 0000077A 83C602 add esi, 2 848 0000077D 66C1CD08 ror bp, 8 849 00000781 D3CD ror ebp, cl 850 851 .without_crc@@@@@: 852 00000783 894330 mov [ebx+48], eax ; [ebx+$mp3gr_switch_point] 853 00000786 89E8 mov eax, ebp ; IRP nn,0,1 ; only 0..1 for blocksplit 854 00000788 C1E505 shl ebp, 5 ; mp3mac_get_n_bits 5 855 0000078B C1C005 rol eax, 5 856 0000078E 31E8 xor eax, ebp 857 00000790 80ED05 sub ch, 5 858 00000793 7913 jns short .without_crc@@@@@@ 859 00000795 88E9 mov cl, ch 860 00000797 80C510 add ch, 10h 861 0000079A D3C5 rol ebp, cl 862 0000079C 668B2E mov bp, [esi] 863 0000079F 83C602 add esi, 2 864 000007A2 66C1CD08 ror bp, 8 865 000007A6 D3CD ror ebp, cl 866 867 .without_crc@@@@@@: 868 000007A8 894338 mov [ebx+56], eax ; [ebx+$mp3gr_table_select+nn*4] ; nn=0 869 000007AB 89E8 mov eax, ebp ; mp3mac_get_n_bits 5 870 000007AD C1E505 shl ebp, 5 871 000007B0 C1C005 rol eax, 5 872 000007B3 31E8 xor eax, ebp 873 000007B5 80ED05 sub ch, 5 874 000007B8 7913 jns short .without_crc_@@@@ 875 000007BA 88E9 mov cl, ch 876 000007BC 80C510 add ch, 10h 877 000007BF D3C5 rol ebp, cl 878 000007C1 668B2E mov bp, [esi] 879 000007C4 83C602 add esi, 2 880 000007C7 66C1CD08 ror bp, 8 881 000007CB D3CD ror ebp, cl 882 883 .without_crc_@@@@: 884 000007CD 89433C mov [ebx+60], eax ; [ebx+$mp3gr_table_select+nn*4] ; nn=1 885 000007D0 89E8 mov eax, ebp ; mp3mac_get_n_bits 5 886 000007D2 C1E503 shl ebp, 3 ; IRP nn,0,1,2 887 000007D5 C1C003 rol eax, 3 ; mp3mac_get_n_bits 3 888 000007D8 31E8 xor eax, ebp 889 000007DA 80ED03 sub ch, 3 890 000007DD 7913 jns short .without_crc_@@@@@ 891 000007DF 88E9 mov cl, ch 892 000007E1 80C510 add ch, 10h 893 000007E4 D3C5 rol ebp, cl 894 000007E6 668B2E mov bp, [esi] 895 000007E9 83C602 add esi, 2 896 000007EC 66C1CD08 ror bp, 8 897 000007F0 D3CD ror ebp, cl 898 899 .without_crc_@@@@@: 900 000007F2 C1E003 shl eax, 3 901 000007F5 894344 mov [ebx+68], eax ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=0 902 000007F8 89E8 mov eax, ebp 903 000007FA C1E503 shl ebp, 3 904 000007FD C1C003 rol eax, 3 905 00000800 31E8 xor eax, ebp 906 00000802 80ED03 sub ch, 3 907 00000805 7913 jns short .without_crc_@@@@@@ 908 00000807 88E9 mov cl, ch 909 00000809 80C510 add ch, 10h 910 0000080C D3C5 rol ebp, cl 911 0000080E 668B2E mov bp, [esi] 912 00000811 83C602 add esi, 2 913 00000814 66C1CD08 ror bp, 8 914 00000818 D3CD ror ebp, cl 915 916 .without_crc_@@@@@@: 917 0000081A C1E003 shl eax, 3 918 0000081D 894348 mov [ebx+72], eax ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=1 919 00000820 89E8 mov eax, ebp 920 00000822 C1E503 shl ebp, 3 921 00000825 C1C003 rol eax, 3 922 00000828 31E8 xor eax, ebp 923 0000082A 80ED03 sub ch, 3 924 0000082D 7913 jns short .without_crc_@@@@@@@ 925 0000082F 88E9 mov cl, ch 926 00000831 80C510 add ch, 10h 927 00000834 D3C5 rol ebp, cl 928 00000836 668B2E mov bp, [esi] 929 00000839 83C602 add esi, 2 930 0000083C 66C1CD08 ror bp, 8 931 00000840 D3CD ror ebp, cl 932 933 .without_crc_@@@@@@@: 934 00000842 C1E003 shl eax, 3 935 00000845 89434C mov [ebx+76], eax ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=2 936 00000848 E910010000 jmp .blocksplit_done 937 938 .no_blocksplit: 939 0000084D C7432C00000000 mov dword [ebx+44], 0 ; [ebx+$mp3gr_block_type] 940 00000854 C7433000000000 mov dword [ebx+48], 0 ; [ebx+$mp3gr_switch_point] 941 0000085B 89E8 mov eax, ebp ; IRP nn,0,1,2 ; range 0..2 when non-blocksplit 942 0000085D C1E505 shl ebp, 5 ; mp3mac_get_n_bits 5 943 00000860 C1C005 rol eax, 5 944 00000863 31E8 xor eax, ebp 945 00000865 80ED05 sub ch, 5 946 00000868 7913 jns short .@_without_crc 947 0000086A 88E9 mov cl, ch 948 0000086C 80C510 add ch, 10h 949 0000086F D3C5 rol ebp, cl 950 00000871 668B2E mov bp, [esi] 951 00000874 83C602 add esi, 2 952 00000877 66C1CD08 ror bp, 8 953 0000087B D3CD ror ebp, cl 954 955 .@_without_crc: 956 0000087D 894338 mov [ebx+56], eax ; [ebx+$mp3gr_table_select+nn*4] ; nn=0 957 00000880 89E8 mov eax, ebp 958 00000882 C1E505 shl ebp, 5 959 00000885 C1C005 rol eax, 5 960 00000888 31E8 xor eax, ebp 961 0000088A 80ED05 sub ch, 5 962 0000088D 7913 jns short .@_without_crc_@ 963 0000088F 88E9 mov cl, ch 964 00000891 80C510 add ch, 10h 965 00000894 D3C5 rol ebp, cl 966 00000896 668B2E mov bp, [esi] 967 00000899 83C602 add esi, 2 968 0000089C 66C1CD08 ror bp, 8 969 000008A0 D3CD ror ebp, cl 970 971 .@_without_crc_@: 972 000008A2 89433C mov [ebx+60], eax ; [ebx+$mp3gr_table_select+nn*4] ; nn=1 973 000008A5 89E8 mov eax, ebp 974 000008A7 C1E505 shl ebp, 5 975 000008AA C1C005 rol eax, 5 976 000008AD 31E8 xor eax, ebp 977 000008AF 80ED05 sub ch, 5 978 000008B2 7913 jns short .@_without_crc_@@ 979 000008B4 88E9 mov cl, ch 980 000008B6 80C510 add ch, 10h 981 000008B9 D3C5 rol ebp, cl 982 000008BB 668B2E mov bp, [esi] 983 000008BE 83C602 add esi, 2 984 000008C1 66C1CD08 ror bp, 8 985 000008C5 D3CD ror ebp, cl 986 987 .@_without_crc_@@: 988 000008C7 894340 mov [ebx+64], eax ; [ebx+$mp3gr_table_select+nn*4] ; nn=2 989 000008CA 89E8 mov eax, ebp 990 000008CC C1E504 shl ebp, 4 991 000008CF C1C004 rol eax, 4 992 000008D2 31E8 xor eax, ebp 993 000008D4 80ED04 sub ch, 4 994 000008D7 7913 jns short .@_without_crc@@@ 995 000008D9 88E9 mov cl, ch 996 000008DB 80C510 add ch, 10h 997 000008DE D3C5 rol ebp, cl 998 000008E0 668B2E mov bp, [esi] 999 000008E3 83C602 add esi, 2 1000 000008E6 66C1CD08 ror bp, 8 1001 000008EA D3CD ror ebp, cl 1002 1003 .@_without_crc@@@: 1004 000008EC 40 inc eax 1005 000008ED A3[4C1F0500] mov [_@@region_address0], eax 1006 000008F2 89E8 mov eax, ebp ; mp3mac_get_n_bits 3 1007 000008F4 C1E503 shl ebp, 3 1008 000008F7 C1C003 rol eax, 3 1009 000008FA 31E8 xor eax, ebp 1010 000008FC 80ED03 sub ch, 3 1011 000008FF 7913 jns short .@_without_crc@@@@ 1012 00000901 88E9 mov cl, ch 1013 00000903 80C510 add ch, 10h 1014 00000906 D3C5 rol ebp, cl 1015 00000908 668B2E mov bp, [esi] 1016 0000090B 83C602 add esi, 2 1017 0000090E 66C1CD08 ror bp, 8 1018 00000912 D3CD ror ebp, cl 1019 1020 .@_without_crc@@@@: 1021 00000914 40 inc eax 1022 00000915 0305[4C1F0500] add eax, [_@@region_address0] 1023 0000091B A3[501F0500] mov [_@@region_address1], eax 1024 00000920 A1[609D0000] mov eax, [mp3_hdr_sample_rate_index] 1025 00000925 C1E005 shl eax, 5 1026 00000928 0305[4C1F0500] add eax, [_@@region_address0] 1027 0000092E 0FB78400[60D70100] movzx eax, word [mp3_band_index_long+eax*2] 1028 00000936 D1E8 shr eax, 1 1029 00000938 894350 mov [ebx+80], eax ; [ebx+$mp3gr_region_size+0*4] 1030 0000093B A1[609D0000] mov eax, [mp3_hdr_sample_rate_index] 1031 00000940 C1E005 shl eax, 5 1032 00000943 0305[501F0500] add eax, [_@@region_address1] 1033 00000949 0FB78400[60D70100] movzx eax, word [mp3_band_index_long+eax*2] 1034 00000951 D1E8 shr eax, 1 1035 00000953 894354 mov [ebx+84], eax ; [ebx+$mp3gr_region_size+1*4] 1036 00000956 C7435820010000 mov dword [ebx+88], 288 ; [ebx+$mp3gr_region_size+2*4],576/2 1037 1038 .blocksplit_done: 1039 0000095D 8D7B50 lea edi, [ebx+80] ; [ebx+$mp3gr_region_size+0] 1040 00000960 31D2 xor edx, edx 1041 00000962 B103 mov cl, 3 1042 1043 .trunc_region_size_lop: 1044 00000964 8B07 mov eax, [edi] 1045 00000966 3B430C cmp eax, [ebx+12] ; [ebx+$mp3gr_big_values] 1046 00000969 7603 jbe short .trunc_region_size_this 1047 0000096B 8B430C mov eax, [ebx+12] 1048 1049 .trunc_region_size_this: 1050 0000096E 29D0 sub eax, edx 1051 00000970 8907 mov [edi], eax 1052 00000972 01C2 add edx, eax 1053 00000974 83C704 add edi, 4 1054 00000977 FEC9 dec cl 1055 00000979 75E9 jnz short .trunc_region_size_lop 1056 0000097B C7431C0D000000 mov dword [ebx+28], 13 ; [ebx+$mp3gr_short_start] 1057 00000982 C7432016000000 mov dword [ebx+32], 22 ; [ebx+$mp3gr_long_end] 1058 00000989 837B2C02 cmp dword [ebx+44], 2 ; [ebx+$mp3gr_block_type] 1059 0000098D 7549 jnz short .these_band_indices 1060 0000098F C7431C00000000 mov dword [ebx+28], 0 ; [ebx+$mp3gr_short_start] 1061 00000996 C7432000000000 mov dword [ebx+32], 0 ; [ebx+$mp3gr_long_end] 1062 0000099D 837B3000 cmp dword [ebx+48], 0 ; [ebx+$mp3gr_switch_point] 1063 000009A1 7435 jz short .these_band_indices 1064 000009A3 C7431C02000000 mov dword [ebx+28], 2 ; [ebx+$mp3gr_short_start] 1065 000009AA C7432004000000 mov dword [ebx+32], 4 ; [ebx+$mp3gr_long_end] 1066 000009B1 833D[609D0000]08 cmp dword [mp3_hdr_sample_rate_index], 8 1067 000009B8 741E jz short .these_band_indices 1068 000009BA 833D[609D0000]02 cmp dword [mp3_hdr_sample_rate_index], 2 1069 000009C1 C7431C03000000 mov dword [ebx+28], 3 ; [ebx+$mp3gr_short_start] 1070 000009C8 C7432008000000 mov dword [ebx+32], 8 ; [ebx+$mp3gr_long_end] 1071 000009CF 7607 jbe short .these_band_indices 1072 000009D1 C7432006000000 mov dword [ebx+32], 6 ; [ebx+$mp3gr_long_end] 1073 1074 .these_band_indices: 1075 000009D8 31C0 xor eax, eax 1076 000009DA 833D[8C9D0000]00 cmp dword [mp3_hdr_flag_lsf], 0 1077 000009E1 7520 jnz short .no_preflag 1078 000009E3 89E8 mov eax, ebp ; mp3mac_get_n_bits 1 1079 000009E5 D1E5 shl ebp, 1 1080 000009E7 D1C0 rol eax, 1 1081 000009E9 31E8 xor eax, ebp 1082 000009EB 80ED01 sub ch, 1 1083 000009EE 7913 jns short .no_preflag 1084 000009F0 88E9 mov cl, ch 1085 000009F2 80C510 add ch, 10h 1086 000009F5 D3C5 rol ebp, cl 1087 000009F7 668B2E mov bp, [esi] 1088 000009FA 83C602 add esi, 2 1089 000009FD 66C1CD08 ror bp, 8 1090 00000A01 D3CD ror ebp, cl 1091 1092 .no_preflag: 1093 00000A03 894318 mov [ebx+24], eax ; [ebx+$mp3gr_preflag] 1094 00000A06 89E8 mov eax, ebp ; mp3mac_get_n_bits 1 1095 00000A08 D1E5 shl ebp, 1 1096 00000A0A D1C0 rol eax, 1 1097 00000A0C 31E8 xor eax, ebp 1098 00000A0E 80ED01 sub ch, 1 1099 00000A11 7913 jns short .@_without_crc@@@@@ 1100 00000A13 88E9 mov cl, ch 1101 00000A15 80C510 add ch, 10h 1102 00000A18 D3C5 rol ebp, cl 1103 00000A1A 668B2E mov bp, [esi] 1104 00000A1D 83C602 add esi, 2 1105 00000A20 66C1CD08 ror bp, 8 1106 00000A24 D3CD ror ebp, cl 1107 1108 .@_without_crc@@@@@: 1109 00000A26 40 inc eax 1110 00000A27 894334 mov [ebx+52], eax ; [ebx+$mp3gr_scalefac_scale] 1111 00000A2A 89E8 mov eax, ebp ; mp3mac_get_n_bits 1 1112 00000A2C D1E5 shl ebp, 1 1113 00000A2E D1C0 rol eax, 1 1114 00000A30 31E8 xor eax, ebp 1115 00000A32 80ED01 sub ch, 1 1116 00000A35 7913 jns short .@_without_crc@@@@@@ 1117 00000A37 88E9 mov cl, ch 1118 00000A39 80C510 add ch, 10h 1119 00000A3C D3C5 rol ebp, cl 1120 00000A3E 668B2E mov bp, [esi] 1121 00000A41 83C602 add esi, 2 1122 00000A44 66C1CD08 ror bp, 8 1123 00000A48 D3CD ror ebp, cl 1124 1125 .@_without_crc@@@@@@: 1126 00000A4A 83C010 add eax, 10h ; table 10h..11h (quad_vlc) 1127 00000A4D 894324 mov [ebx+36], eax ; [ebx+$mp3gr_count1table_select] 1128 00000A50 81C340130000 add ebx, 4928 ; $mp3gr_entrysiz*2 1129 00000A56 FF05[3CF40000] inc dword [mp3_curr_channel] 1130 00000A5C A1[3CF40000] mov eax, [mp3_curr_channel] 1131 00000A61 3B05[689D0000] cmp eax, [mp3_src_num_channels] 1132 00000A67 0F82C1FBFFFF jb .hdr_channel_lop 1133 00000A6D 5B pop ebx 1134 00000A6E 81C3A0090000 add ebx, 2464 ; $mp3gr_entrysiz 1135 00000A74 FF05[40F40000] inc dword [mp3_curr_granule] 1136 00000A7A A1[40F40000] mov eax, [mp3_curr_granule] 1137 00000A7F 3B05[5CF40000] cmp eax, [mp3_nb_granules] 1138 00000A85 0F8298FBFFFF jb .hdr_granule_lop 1139 00000A8B F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_read_granule 1140 00000A92 740E jz short .no_rdtsc_supported@ 1141 00000A94 0F31 rdtsc 1142 00000A96 0105[30760000] add [rdtsc_read_granule], eax 1143 00000A9C 1115[34760000] adc [rdtsc_read_granule+4], edx 1144 1145 .no_rdtsc_supported@: 1146 00000AA2 F8 clc 1147 00000AA3 C3 retn 1148 1149 .error: 1150 00000AA4 F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_read_granule 1151 00000AAB 740E jz short .no_rdtsc_supported@@ 1152 00000AAD 0F31 rdtsc 1153 00000AAF 0105[30760000] add [rdtsc_read_granule], eax 1154 00000AB5 1115[34760000] adc [rdtsc_read_granule+4], edx 1155 1156 .no_rdtsc_supported@@: 1157 00000ABB 8B25[541F0500] mov esp, [_@@saved_sp] 1158 00000AC1 F9 stc 1159 00000AC2 C3 retn 1160 1161 1162 ; =============== S U B R O U T I N E ======================================= 1163 1164 1165 mp3_bitstream_append_to_main_data_pool: 1166 00000AC3 F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_append_main 1167 00000ACA 740E jz short .no_rdtsc_supported 1168 00000ACC 0F31 rdtsc 1169 00000ACE 2905[48760000] sub [rdtsc_append_main], eax 1170 00000AD4 1915[4C760000] sbb [rdtsc_append_main+4], edx 1171 1172 .no_rdtsc_supported: 1173 00000ADA 8B0D[489D0000] mov ecx, [mp3_src_frame_end] 1174 00000AE0 29F1 sub ecx, esi 1175 00000AE2 0F8266020000 jb fatalunexpected 1176 00000AE8 8B3D[3C9D0000] mov edi, [main_data_pool_wr_ptr] 1177 00000AEE 8D040F lea eax, [edi+ecx] 1178 00000AF1 3D[3C9D0000] cmp eax, main_data_pool_wr_ptr 1179 00000AF6 7616 jbe short .pool_inrange 1180 00000AF8 51 push ecx 1181 00000AF9 56 push esi 1182 00000AFA 8DB700FEFFFF lea esi, [edi-200h] 1183 00000B00 BF[3C8D0000] mov edi, main_data_pool_start 1184 00000B05 B980000000 mov ecx, 128 1185 00000B0A F3A5 rep movsd 1186 00000B0C 5E pop esi 1187 00000B0D 59 pop ecx 1188 1189 .pool_inrange: 1190 00000B0E 89F8 mov eax, edi 1191 00000B10 2B05[54F40000] sub eax, [mp3_main_data_begin] 1192 00000B16 F3A4 rep movsb 1193 00000B18 893D[3C9D0000] mov [main_data_pool_wr_ptr], edi 1194 00000B1E 3D[3C8D0000] cmp eax, main_data_pool_start 1195 00000B23 7828 js short .below_pool_start 1196 00000B25 A3[48F40000] mov [mp3_bitstream_start], eax 1197 ; 22/10/2024 1198 ;mov eax, 0 1199 00000B2A 8B35[48F40000] mov esi, [mp3_bitstream_start] ; mp3mac_bitstream_set_position 1200 ;mov cl, al 1201 ;shr eax, 3 1202 ;and cl, 7 1203 ;add esi, eax 1204 00000B30 E8C7F6FFFF call mp3_recollect_bits 1205 ;mov eax, ebp ; mp3mac_get_n_bits cl 1206 ;shl ebp, cl 1207 ;rol eax, cl 1208 ;xor eax, ebp 1209 ;sub ch, cl 1210 ;jns short .cont 1211 ;mov cl, ch ; mp3mac_collect_more 1212 ;add ch, 10h 1213 ;rol ebp, cl 1214 ;mov bp, [esi] 1215 ;add esi, 2 1216 ;ror bp, 8 1217 ;ror ebp, cl 1218 1219 .cont: 1220 00000B35 F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_append_main 1221 00000B3C 740E jz short .no_rdtsc_supported@ 1222 00000B3E 0F31 rdtsc 1223 00000B40 0105[48760000] add [rdtsc_append_main], eax 1224 00000B46 1115[4C760000] adc [rdtsc_append_main+4], edx 1225 1226 .no_rdtsc_supported@: 1227 00000B4C C3 retn 1228 1229 .below_pool_start: 1230 00000B4D C705[34F40000]0000- mov dword [mp3_samples_output_size], 0 1230 00000B55 0000 1231 00000B57 EBDC jmp short .cont 1232 1233 1234 ; =============== S U B R O U T I N E ======================================= 1235 1236 1237 mp3_bitstream_read_scalefacs: 1238 00000B59 F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_read_scalefac 1239 00000B60 740E jz short .no_rdtsc_supported 1240 00000B62 0F31 rdtsc 1241 00000B64 2905[60760000] sub [rdtsc_read_scalefac], eax 1242 00000B6A 1915[64760000] sbb [rdtsc_read_scalefac+4], edx 1243 1244 .no_rdtsc_supported: 1245 00000B70 8D7B70 lea edi, [ebx+112] ; [ebx+$mp3gr_scale_factors] 1246 00000B73 833D[8C9D0000]00 cmp dword [mp3_hdr_flag_lsf], 0 1247 00000B7A 0F850D010000 jnz .body_lsf_nonzero 1248 00000B80 8B4314 mov eax, [ebx+20] ; [ebx+$mp3gr_scalefac_compress] 1249 00000B83 668B9400[407A0000] mov dx, [mp3_slen_table+eax*2] ; slen[0,1] 1250 00000B8B 837B2C02 cmp dword [ebx+44], 2 ; [ebx+$mp3gr_block_type] 1251 00000B8F 757F jnz short .body_lsf_zero_non_type2 1252 00000B91 53 push ebx 1253 00000B92 B012 mov al, 18 1254 00000B94 2A4330 sub al, [ebx+48] ; [ebx+$mp3gr_switch_point] 1255 00000B97 88C3 mov bl, al ; @@get_bl_scalefacs_with_dl_bits 0 1256 00000B99 80FA00 cmp dl, 0 1257 00000B9C 7428 jz short .quickfill 1258 1259 .scalefac_get_lop: 1260 00000B9E 88D1 mov cl, dl ; LSB of edx, slen[i] 1261 00000BA0 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 1262 00000BA2 D3E5 shl ebp, cl 1263 00000BA4 D3C0 rol eax, cl 1264 00000BA6 31E8 xor eax, ebp 1265 00000BA8 28CD sub ch, cl 1266 00000BAA 7913 jns short .cont@ 1267 00000BAC 88E9 mov cl, ch ; mp3mac_collect_more 1268 00000BAE 80C510 add ch, 10h 1269 00000BB1 D3C5 rol ebp, cl 1270 00000BB3 668B2E mov bp, [esi] 1271 00000BB6 83C602 add esi, 2 1272 00000BB9 66C1CD08 ror bp, 8 1273 00000BBD D3CD ror ebp, cl 1274 1275 .cont@: 1276 00000BBF AA stosb 1277 00000BC0 FECB dec bl 1278 00000BC2 75DA jnz short .scalefac_get_lop 1279 00000BC4 EB09 jmp short .skip_quickfill 1280 1281 .quickfill: 1282 00000BC6 51 push ecx 1283 00000BC7 0FB6CB movzx ecx, bl 1284 00000BCA B000 mov al, 0 ; NO_INTENSITY_FLAG 1285 00000BCC F3AA rep stosb 1286 00000BCE 59 pop ecx 1287 1288 .skip_quickfill: 1289 00000BCF C1EA08 shr edx, 8 1290 00000BD2 B312 mov bl, 18 1291 00000BD4 80FA00 cmp dl, 0 ; @@get_bl_scalefacs_with_dl_bits 0 1292 00000BD7 7428 jz short .quickfill@ 1293 1294 .scalefac_get_lop@: 1295 00000BD9 88D1 mov cl, dl 1296 00000BDB 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 1297 00000BDD D3E5 shl ebp, cl 1298 00000BDF D3C0 rol eax, cl 1299 00000BE1 31E8 xor eax, ebp 1300 00000BE3 28CD sub ch, cl 1301 00000BE5 7913 jns short .cont@@ 1302 00000BE7 88E9 mov cl, ch ; mp3mac_collect_more 1303 00000BE9 80C510 add ch, 10h 1304 00000BEC D3C5 rol ebp, cl 1305 00000BEE 668B2E mov bp, [esi] 1306 00000BF1 83C602 add esi, 2 1307 00000BF4 66C1CD08 ror bp, 8 1308 00000BF8 D3CD ror ebp, cl 1309 1310 .cont@@: 1311 00000BFA AA stosb 1312 00000BFB FECB dec bl 1313 00000BFD 75DA jnz short .scalefac_get_lop@ 1314 00000BFF EB09 jmp short .skip_quickfill@ 1315 1316 .quickfill@: 1317 00000C01 51 push ecx 1318 00000C02 0FB6CB movzx ecx, bl 1319 00000C05 B000 mov al, 0 1320 00000C07 F3AA rep stosb 1321 00000C09 59 pop ecx 1322 1323 .skip_quickfill@: 1324 00000C0A 5B pop ebx 1325 00000C0B E914010000 jmp .body_lsf_zeropad 1326 1327 .body_lsf_zero_non_type2: 1328 00000C10 53 push ebx 1329 00000C11 C1CA08 ror edx, 8 1330 00000C14 88D6 mov dh, dl ; slen[0,1,2,3] = slen[0,0,1,1] 1331 00000C16 C1C210 rol edx, 16 1332 00000C19 88F2 mov dl, dh 1333 00000C1B 8A4328 mov al, [ebx+40] ; [ebx+$mp3gr_scfsi] 1334 00000C1E C0E004 shl al, 4 ; move to upper 4bit 1335 00000C21 A2[5C1F0500] mov byte [_@@scfsi], al 1336 00000C26 BB06050505 mov ebx, 5050506h ; num[0..3] 1337 1338 .body_lsf_zero_non_type2_lop: 1339 00000C2B D025[5C1F0500] shl byte [_@@scfsi], 1 1340 00000C31 7238 jb short .body_lsf_zero_non_type2_copy 1341 00000C33 80FA00 cmp dl, 0 ; @@get_bl_scalefacs_with_dl_bits 0 1342 00000C36 7428 jz short .quickfill@@ 1343 1344 .scalefac_get_lop@@: 1345 00000C38 88D1 mov cl, dl 1346 00000C3A 89E8 mov eax, ebp 1347 00000C3C D3E5 shl ebp, cl 1348 00000C3E D3C0 rol eax, cl 1349 00000C40 31E8 xor eax, ebp 1350 00000C42 28CD sub ch, cl 1351 00000C44 7913 jns short .cont@@@ 1352 00000C46 88E9 mov cl, ch 1353 00000C48 80C510 add ch, 10h 1354 00000C4B D3C5 rol ebp, cl 1355 00000C4D 668B2E mov bp, [esi] 1356 00000C50 83C602 add esi, 2 1357 00000C53 66C1CD08 ror bp, 8 1358 00000C57 D3CD ror ebp, cl 1359 1360 .cont@@@: 1361 00000C59 AA stosb 1362 00000C5A FECB dec bl 1363 00000C5C 75DA jnz short .scalefac_get_lop@@ 1364 00000C5E EB09 jmp short .skip_quickfill@@ 1365 1366 .quickfill@@: 1367 00000C60 51 push ecx 1368 00000C61 0FB6CB movzx ecx, bl 1369 00000C64 B000 mov al, 0 1370 00000C66 F3AA rep stosb 1371 00000C68 59 pop ecx 1372 1373 .skip_quickfill@@: 1374 00000C69 EB11 jmp short .body_lsf_zero_non_type2_next 1375 1376 .body_lsf_zero_non_type2_copy: 1377 00000C6B 51 push ecx 1378 00000C6C 89F0 mov eax, esi 1379 00000C6E 0FB6CB movzx ecx, bl ; copy 1380 00000C71 8DB760F6FFFF lea esi, [edi-2464] ; [edi-$mp3gr_entrysiz] ; src=granule[0] ; from 1381 00000C77 F3A4 rep movsb ; prev 1382 00000C79 89C6 mov esi, eax 1383 00000C7B 59 pop ecx 1384 1385 .body_lsf_zero_non_type2_next: 1386 00000C7C C1EA08 shr edx, 8 ; dl=next slen 1387 00000C7F C1EB08 shr ebx, 8 ; bl=next numfacs 1388 00000C82 75A7 jnz short .body_lsf_zero_non_type2_lop 1389 00000C84 5B pop ebx 1390 00000C85 B000 mov al, 0 1391 00000C87 AA stosb 1392 00000C88 E9A9000000 jmp .body_lsf_done 1393 1394 .body_lsf_nonzero: 1395 00000C8D 8B5314 mov edx, [ebx+14h] ; [ebx+$mp3gr_scalefac_compress] 1396 00000C90 F705[889D0000]0100- test dword [mp3_hdr_mode_ext], 1 ; MODE_EXT_I_STEREO 1396 00000C98 0000 1397 00000C9A 740F jz short .normal_scalefac 1398 00000C9C 833D[3CF40000]00 cmp dword [mp3_curr_channel], 0 1399 00000CA3 7406 jz short .normal_scalefac 1400 00000CA5 81C200020000 add edx, 512 ; for 2nd channel of intensity_stereo 1401 1402 .normal_scalefac: 1403 00000CAB 8A04D5[51FF0400] mov al, [(mp3_lsf_sf_expand_exploded_table+5)+edx*8] 1404 00000CB2 084318 or [ebx+24], al ; [ebx+$mp3gr_preflag] 1405 00000CB5 53 push ebx 1406 00000CB6 0FB604D5[50FF0400] movzx eax, byte [(mp3_lsf_sf_expand_exploded_table+4)+edx*8] 1407 00000CBE 837B2C02 cmp dword [ebx+44], 2 ; [ebx+$mp3gr_block_type] 1408 00000CC2 7507 jnz short .this_tindex1 1409 00000CC4 8B5B30 mov ebx, [ebx+48] ; [ebx+$mp3gr_switch_point] 1410 00000CC7 8D449804 lea eax, [eax+ebx*4+4] 1411 1412 .this_tindex1: 1413 00000CCB 8B98[607A0000] mov ebx, [mp3_lsf_nsf_table+eax] 1414 00000CD1 8B14D5[4CFF0400] mov edx, dword [mp3_lsf_sf_expand_exploded_table+edx*8] 1415 1416 .scalefax_outer_lop: 1417 00000CD8 80FA00 cmp dl, 0 ; @@get_bl_scalefacs_with_dl_bits 1 1418 00000CDB 7435 jz short .@quickfil 1419 1420 .@scalefac_get_lop: 1421 00000CDD 88D1 mov cl, dl 1422 00000CDF 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 1423 00000CE1 D3E5 shl ebp, cl 1424 00000CE3 D3C0 rol eax, cl 1425 00000CE5 31E8 xor eax, ebp 1426 00000CE7 28CD sub ch, cl 1427 00000CE9 7913 jns short .cont 1428 00000CEB 88E9 mov cl, ch 1429 00000CED 80C510 add ch, 10h 1430 00000CF0 D3C5 rol ebp, cl 1431 00000CF2 668B2E mov bp, [esi] 1432 00000CF5 83C602 add esi, 2 1433 00000CF8 66C1CD08 ror bp, 8 1434 00000CFC D3CD ror ebp, cl 1435 1436 .cont: 1437 00000CFE 88D1 mov cl, dl ; numbits 1438 00000D00 88C4 mov ah, al 1439 00000D02 FEC4 inc ah ; val+1 1440 00000D04 D2EC shr ah, cl ; bit0=is.max.value 1441 00000D06 C0E407 shl ah, 7 ; bit7=is.max.value 1442 00000D09 08E0 or al, ah ; apply NO_INTENSITY_FLAG 1443 00000D0B AA stosb 1444 00000D0C FECB dec bl 1445 00000D0E 75CD jnz short .@scalefac_get_lop 1446 00000D10 EB09 jmp short .@skip_quickfill 1447 1448 .@quickfil: 1449 00000D12 51 push ecx 1450 00000D13 0FB6CB movzx ecx, bl 1451 00000D16 B080 mov al, 80h 1452 00000D18 F3AA rep stosb 1453 00000D1A 59 pop ecx 1454 1455 .@skip_quickfill: 1456 00000D1B C1EA08 shr edx, 8 1457 00000D1E C1EB08 shr ebx, 8 1458 00000D21 75B5 jnz short .scalefax_outer_lop 1459 00000D23 5B pop ebx 1460 1461 .body_lsf_zeropad: 1462 00000D24 89CA mov edx, ecx 1463 00000D26 8D8B98000000 lea ecx, [ebx+152] ; [ebx+$mp3gr_scale_factors+40] 1464 00000D2C 29F9 sub ecx, edi 1465 ;jb short fatal_scalefactors 1466 ; 21/10/2024 1467 00000D2E 721E jb short fatalunexpected 1468 00000D30 B000 mov al, 0 1469 00000D32 F3AA rep stosb 1470 00000D34 89D1 mov ecx, edx 1471 1472 .body_lsf_done: 1473 00000D36 F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_read_scalefac 1474 00000D3D 740E jz short .no_rdtsc_supported@@@ 1475 00000D3F 0F31 rdtsc 1476 00000D41 0105[60760000] add [rdtsc_read_scalefac], eax 1477 00000D47 1115[64760000] adc [rdtsc_read_scalefac+4], edx 1478 1479 .no_rdtsc_supported@@@: 1480 00000D4D C3 retn 1481 1482 ; 21/10/2024 1483 ;fatal_scalefactors: 1484 ;jmp fatalunexpected 1485 1486 ; --------------------------------------------------------------------------- 1487 1488 ; 21/10/2024 1489 fatalunexpected: 1490 00000D4E F735[CC840000] div dword [zero] 1491 hang: 1492 00000D54 EBFE jmp short hang 1493 1494 1495 ; =============== S U B R O U T I N E ======================================= 1496 1497 1498 mp3_get_exponents_from_scale_factors: 1499 00000D56 F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_xlat_scalefac 1500 00000D5D 740E jz short .no_rdtsc_supported 1501 00000D5F 0F31 rdtsc 1502 00000D61 2905[78760000] sub [rdtsc_xlat_scalefac], eax 1503 00000D67 1915[7C760000] sbb [rdtsc_xlat_scalefac+4], edx 1504 1505 .no_rdtsc_supported: 1506 00000D6D 51 push ecx ; mp3mac_push_bitstream 1507 00000D6E 55 push ebp 1508 00000D6F 56 push esi 1509 00000D70 C705[6C1F0500]0000- mov dword [_@@rle_point], 0 1509 00000D78 0000 1510 00000D7A 8A4B34 mov cl, [ebx+52] ; [ebx+$mp3gr_scalefac_scale] 1511 00000D7D BF[E01A0100] mov edi, mp3_exponents 1512 00000D82 31D2 xor edx, edx 1513 00000D84 3B5320 cmp edx, [ebx+32] ; [ebx+$mp3gr_long_end] 1514 00000D87 7345 jnb short .long_done 1515 00000D89 A1[609D0000] mov eax, [mp3_hdr_sample_rate_index] 1516 00000D8E 6BC016 imul eax, 22 1517 00000D91 8DA8[70800000] lea ebp, [mp3_band_size_long+eax] 1518 00000D97 8B4318 mov eax, [ebx+24] ; [ebx+$mp3gr_preflag] 1519 00000D9A 6BC016 imul eax, 22 1520 00000D9D 8DB0[C0810000] lea esi, [mp3_pretab+eax] 1521 1522 .long_lop: 1523 00000DA3 0FB6441370 movzx eax, byte [ebx+edx+112] ; [ebx+$mp3gr_scale_factors+edx] 1524 00000DA8 247F and al, 7Fh ; strip NO_INTENSITY_FLAG 1525 00000DAA 020416 add al, [esi+edx] 1526 00000DAD D3E0 shl eax, cl 1527 00000DAF F7D8 neg eax 1528 00000DB1 034310 add eax, [ebx+16] ; [ebx+$mp3gr_global_gain] 1529 00000DB4 C1E010 shl eax, 16 1530 00000DB7 8A441500 mov al, [ebp+edx+0] 1531 00000DBB 0305[6C1F0500] add eax, [_@@rle_point] 1532 00000DC1 66A3[6C1F0500] mov word [_@@rle_point], ax 1533 00000DC7 AB stosd 1534 00000DC8 42 inc edx 1535 00000DC9 3B5320 cmp edx, [ebx+32] ; [ebx+$mp3gr_long_end] 1536 00000DCC 72D5 jb short .long_lop 1537 1538 .long_done: 1539 00000DCE 8B531C mov edx, [ebx+28] ; [ebx+$mp3gr_short_start] 1540 00000DD1 83FA0D cmp edx, 13 1541 00000DD4 0F83AA000000 jnb .skip_shorts 1542 00000DDA A1[609D0000] mov eax, [mp3_hdr_sample_rate_index] 1543 00000DDF 6BC00D imul eax, 13 1544 00000DE2 8DA8[40810000] lea ebp, [mp3_band_size_short+eax] 1545 00000DE8 8B7320 mov esi, [ebx+32] ; [ebx+$mp3gr_long_end] 1546 00000DEB 8B4310 mov eax, [ebx+16] ; [ebx+$mp3gr_global_gain] 1547 ; IRP nn,0,1,2 1548 00000DEE 2B4344 sub eax, [ebx+68] ; [ebx+$mp3gr_subblock_gain+nn*4] 1549 00000DF1 A3[601F0500] mov [_@@gains], eax ; [@@gains+nn*4] 1550 00000DF6 8B4310 mov eax, [ebx+16] 1551 00000DF9 2B4348 sub eax, [ebx+72] 1552 00000DFC A3[641F0500] mov [_@@gains+4], eax ; [@@gains+nn*4] 1553 00000E01 8B4310 mov eax, [ebx+16] 1554 00000E04 2B434C sub eax, [ebx+76] ; [ebx+$mp3gr_subblock_gain+nn*4] 1555 00000E07 A3[681F0500] mov [_@@gains+8], eax ; [@@gains+nn*4] 1556 1557 .short_lop: 1558 00000E0C 0FB6443370 movzx eax, byte [ebx+esi+112] ; [ebx+$mp3gr_scale_factors+esi] 1559 ; IRP nn,0,1,2 1560 00000E11 247F and al, 7Fh ; strip NO_INTENSITY_FLAG 1561 00000E13 46 inc esi 1562 00000E14 D3E0 shl eax, cl 1563 00000E16 F7D8 neg eax 1564 00000E18 0305[601F0500] add eax, [_@@gains] ; [@@gains+nn*4] ; nn=0 1565 00000E1E C1E010 shl eax, 16 1566 00000E21 8A441500 mov al, [ebp+edx+0] ; bstab[edx] 1567 00000E25 0305[6C1F0500] add eax, [_@@rle_point] 1568 00000E2B 66A3[6C1F0500] mov word [_@@rle_point], ax 1569 00000E31 AB stosd ; msw=val, lsw=point 1570 00000E32 0FB6443370 movzx eax, byte [ebx+esi+112] ; [ebx+$mp3gr_scalefac_scale] 1571 00000E37 247F and al, 7Fh 1572 00000E39 46 inc esi 1573 00000E3A D3E0 shl eax, cl 1574 00000E3C F7D8 neg eax 1575 00000E3E 0305[641F0500] add eax, [_@@gains+4] ; [@@gains+nn*4] ; nn = 1 1576 00000E44 C1E010 shl eax, 16 1577 00000E47 8A441500 mov al, [ebp+edx+0] 1578 00000E4B 0305[6C1F0500] add eax, [_@@rle_point] 1579 00000E51 66A3[6C1F0500] mov word [_@@rle_point], ax 1580 00000E57 AB stosd 1581 00000E58 0FB6443370 movzx eax, byte [ebx+esi+70h] 1582 00000E5D 247F and al, 7Fh 1583 00000E5F 46 inc esi 1584 00000E60 D3E0 shl eax, cl 1585 00000E62 F7D8 neg eax 1586 00000E64 0305[681F0500] add eax, [_@@gains+8] ; [@@gains+nn*4] ; nn=2 1587 00000E6A C1E010 shl eax, 10h 1588 00000E6D 8A441500 mov al, [ebp+edx+0] 1589 00000E71 0305[6C1F0500] add eax, [_@@rle_point] 1590 00000E77 66A3[6C1F0500] mov word [_@@rle_point], ax 1591 00000E7D AB stosd 1592 00000E7E 42 inc edx 1593 00000E7F 83FA0D cmp edx, 13 1594 00000E82 7288 jb short .short_lop 1595 1596 .skip_shorts: 1597 00000E84 5E pop esi ; mp3mac_pop_bitstream 1598 00000E85 5D pop ebp 1599 00000E86 59 pop ecx 1600 00000E87 F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_xlat_scalefac 1601 00000E8E 740E jz short .no_rdtsc_supported@ 1602 00000E90 0F31 rdtsc 1603 00000E92 0105[78760000] add [rdtsc_xlat_scalefac], eax 1604 00000E98 1115[7C760000] adc [rdtsc_xlat_scalefac+4], edx 1605 1606 .no_rdtsc_supported@: 1607 00000E9E C3 retn 1608 1609 1610 ; =============== S U B R O U T I N E ======================================= 1611 1612 1613 mp3_huffman_decode: 1614 00000E9F F605[F0750000]10 test byte [cpuid_flags], 10h ; in: ebx=granule, out: [sb_hybrid..] 1615 ; timelog_start rdtsc_read_huffman 1616 00000EA6 740E jz short .no_rdtsc_supported 1617 00000EA8 0F31 rdtsc 1618 00000EAA 2905[90760000] sub [rdtsc_read_huffman], eax 1619 00000EB0 1915[94760000] sbb [rdtsc_read_huffman+4], edx 1620 1621 .no_rdtsc_supported: 1622 00000EB6 8B4308 mov eax, [ebx+8] ; [ebx+$mp3gr_part2_3_end] 1623 00000EB9 C1E803 shr eax, 3 1624 00000EBC 0305[48F40000] add eax, [mp3_bitstream_start] 1625 00000EC2 A3[801F0500] mov [_@@coarse_end], eax 1626 00000EC7 31FF xor edi, edi 1627 00000EC9 C705[881F0500]- mov dword [_@@rle_ptr], mp3_exponents 1627 00000ECF [E01A0100] 1628 00000ED3 C705[841F0500]0000- mov dword [_@rle_point], 0 1628 00000EDB 0000 1629 00000EDD C705[701F0500]0000- mov dword [_@@III], 0 ; i=0 1629 00000EE5 0000 1630 1631 .low_freq_lop_i: 1632 00000EE7 8B15[701F0500] mov edx, [_@@III] ; for i=0 to 2 1633 ; low frequencies (called big_values)... 1634 00000EED 8B449350 mov eax, [ebx+edx*4+80] ; [ebx+$mp3gr_region_size+edx*4] 1635 00000EF1 83F800 cmp eax, 0 1636 00000EF4 0F84D9020000 jz .low_freq_next_i 1637 00000EFA A3[741F0500] mov [_@@JJJ], eax 1638 00000EFF 8B549338 mov edx, [ebx+edx*4+56] ; [ebx+$mp3gr_table_select+edx*4] 1639 ; select vlc table 1640 00000F03 0FB68412[30800000] movzx eax, byte [mp3_huff_data+edx*2] ; get huff.table number 1641 00000F0B 83F800 cmp eax, 0 ; huff.table 1642 00000F0E 7528 jnz short .low_freq_nonzero 1643 00000F10 51 push ecx 1644 00000F11 57 push edi 1645 00000F12 8DBCBBA0000000 lea edi, [ebx+edi*4+160] ; [ebx+$mp3gr_sb_hybrid+edi*4] 1646 00000F19 8B0D[741F0500] mov ecx, [_@@JJJ] 1647 00000F1F D1E1 shl ecx, 1 1648 00000F21 31C0 xor eax, eax ; when huff.table=0, 1649 ; simply set NUM*2 entries to zero 1650 00000F23 F3AB rep stosd 1651 00000F25 5F pop edi 1652 00000F26 59 pop ecx 1653 00000F27 033D[741F0500] add edi, [_@@JJJ] ; raise index accordingly (by num*2) 1654 00000F2D 033D[741F0500] add edi, [_@@JJJ] 1655 00000F33 E99B020000 jmp .low_freq_next_i 1656 1657 .low_freq_nonzero: 1658 00000F38 A3[7C1F0500] mov [_@@vlc_table], eax ; =1..15 1659 00000F3D 83F80E cmp eax, 14 ; only table 14..15 have linbits 1660 00000F40 0F83FA000000 jnb .with_linbits ; so table 0..13 can use faster code... 1661 1662 .low_freq_lop_j_small: 1663 00000F46 3B35[801F0500] cmp esi, [_@@coarse_end] ; loop @@JJJ times.. 1664 00000F4C 0F87CF000000 ja .small_near_end 1665 1666 .small_not_end: 1667 00000F52 3B3D[841F0500] cmp edi, [_@rle_point] ; @@get_runlength small 1668 00000F58 0F839E030000 jnb .rle_fetch_next_small 1669 1670 .rle_back_small: 1671 00000F5E 8B15[7C1F0500] mov edx, [_@@vlc_table] ; get huffcode 1672 1673 .get_child_lop: 1674 00000F64 8A0C95[621F0100] mov cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode 1675 ; in: edx=table, out: eax=data 1676 ; bits (table size) (-7..-1) 1677 00000F6B 668B1495[601F0100] mov dx, word [huff_tree_buf+edx*4] ; code (child table) 1678 00000F73 89E8 mov eax, ebp ; mov eax,mp3_col32 ; peek bitstream 1679 00000F75 D3E8 shr eax, cl 1680 00000F77 01C2 add edx, eax 1681 00000F79 8A0C95[621F0100] mov cl, [(huff_tree_buf+2)+edx*4] ; bits (of entry) 1682 00000F80 80F900 cmp cl, 0 1683 00000F83 7823 js short .got_child 1684 00000F85 0FB70495[601F0100] movzx eax, word [huff_tree_buf+edx*4] ; return data value 1685 00000F8D D3E5 shl ebp, cl ; shl mp3_col32,cl ; discard cl bits 1686 00000F8F 28CD sub ch, cl ; sub mp3_colNN,cl 1687 00000F91 7932 jns short .got_done 1688 00000F93 88E9 mov cl, ch ; mp3mac_collect_more 1689 ; mov cl,mp3_colNN ; byte ptr [mp3_numbits_collected] 1690 00000F95 80C510 add ch, 16 ; byte ptr [mp3_numbits_collected] 1691 00000F98 D3C5 rol ebp, cl ; dword ptr [mp3_collected_data] 1692 00000F9A 668B2E mov bp, [esi] 1693 00000F9D 83C602 add esi, 2 1694 00000FA0 66C1CD08 ror bp, 8 ; ror mp3_col16,8 ; endianess 1695 00000FA4 D3CD ror ebp, cl ; ror mp3_col32,cl ; dword ptr [mp3_collected_data] 1696 00000FA6 EB1D jmp short .got_done 1697 1698 .got_child: 1699 00000FA8 C1E509 shl ebp, 9 ; shl mp3_col32,CHILD_BITS 1700 ; discard 7 bits 1701 ; (assuming that parents are always 7bit wide) 1702 00000FAB 80ED09 sub ch, 9 1703 00000FAE 79B4 jns short .get_child_lop 1704 00000FB0 88E9 mov cl, ch ; mp3mac_collect_more 1705 00000FB2 80C510 add ch, 10h 1706 00000FB5 D3C5 rol ebp, cl 1707 00000FB7 668B2E mov bp, [esi] 1708 00000FBA 83C602 add esi, 2 1709 00000FBD 66C1CD08 ror bp, 8 1710 00000FC1 D3CD ror ebp, cl 1711 00000FC3 EB9F jmp short .get_child_lop 1712 1713 .got_done: 1714 00000FC5 50 push eax 1715 00000FC6 C1E804 shr eax, 4 ; x 1716 00000FC9 7417 jz short .this_sign ; @@getexpval 0 ; @@getexpval macro has_linbits 1717 ; eax=0 (without sign) ; when x=0 1718 00000FCB 8B15[901F0500] mov edx, [_@@rle_val_x_40h] 1719 00000FD1 8B8482[CC620400] mov eax, [mp3_expval_table+edx+eax*4] 1720 00000FD8 FECD dec ch ; mp3mac_get_bit_to_cy 1721 ; ;jnc short @@this_sign 1722 ; ;neg eax 1723 00000FDA D1E5 shl ebp, 1 ; dec mp3_colNN ; shl mp3_col32,1 ; cy=data 1724 00000FDC 19D2 sbb edx, edx ; cy=0,1 --> 0,FFFFFFFF 1725 00000FDE 31D0 xor eax, edx ; invert if cy was 1 ; get sign (negate if sign=1) 1726 00000FE0 29D0 sub eax, edx ; add 1 if cy was 1 1727 1728 .this_sign: 1729 00000FE2 8984BBA0000000 mov [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0] 1730 00000FE9 58 pop eax 1731 00000FEA 83E00F and eax, 0Fh ; y 1732 00000FED 7417 jz short .this_sign@ ; @@getexpval 0 1733 00000FEF 8B15[901F0500] mov edx, [_@@rle_val_x_40h] 1734 00000FF5 8B8482[CC620400] mov eax, [mp3_expval_table+edx+eax*4] 1735 00000FFC FECD dec ch 1736 00000FFE D1E5 shl ebp, 1 1737 00001000 19D2 sbb edx, edx 1738 00001002 31D0 xor eax, edx 1739 00001004 29D0 sub eax, edx 1740 1741 .this_sign@: 1742 00001006 8984BBA4000000 mov [ebx+edi*4+164], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+4] 1743 0000100D 83C702 add edi, 2 1744 00001010 FF0D[741F0500] dec dword [_@@JJJ] 1745 00001016 0F852AFFFFFF jnz .low_freq_lop_j_small 1746 0000101C E9B2010000 jmp .low_freq_next_i 1747 1748 .small_near_end: 1749 00001021 89F0 mov eax, esi ; mp3mac_bitstream_get_position 1750 00001023 2B05[48F40000] sub eax, [mp3_bitstream_start] 1751 00001029 0FBED5 movsx edx, ch ; mp3_colNN 1752 0000102C F7DA neg edx 1753 0000102E 8D44C2F0 lea eax, [edx+eax*8-16] 1754 00001032 3B4308 cmp eax, [ebx+8] ; [ebx+$mp3gr_part2_3_end] 1755 00001035 0F8217FFFFFF jb .small_not_end 1756 0000103B E993010000 jmp .low_freq_next_i 1757 1758 .with_linbits: 1759 00001040 0FB68412[31800000] movzx eax, byte [(mp3_huff_data+1)+edx*2] 1760 00001048 A3[781F0500] mov [_@@linbits], eax 1761 1762 .low_freq_lop_j: 1763 0000104D 3B35[801F0500] cmp esi, [_@@coarse_end] ; mp3mac_bitstream_get_position 1764 ; loop @@JJJ times... 1765 00001053 0F8725030000 ja .lop_j_near_end 1766 1767 .small_not_end@: 1768 00001059 3B3D[841F0500] cmp edi, [_@rle_point] ; @@get_runlength small 1769 0000105F 0F83C5020000 jnb .rle_fetch_next_full 1770 1771 .rle_back_full: 1772 00001065 8B15[7C1F0500] mov edx, [_@@vlc_table] ; get huffcode 1773 1774 .get_child_lop@: 1775 0000106B 8A0C95[621F0100] mov cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode 1776 ; in: edx=table, out: eax=data 1777 ; bits (table size) (-7..-1) 1778 00001072 668B1495[601F0100] mov dx, word [huff_tree_buf+edx*4] ; code (child table) 1779 0000107A 89E8 mov eax, ebp 1780 0000107C D3E8 shr eax, cl 1781 0000107E 01C2 add edx, eax 1782 00001080 8A0C95[621F0100] mov cl, [(huff_tree_buf+2)+edx*4] ; bits (of entry) 1783 00001087 80F900 cmp cl, 0 1784 0000108A 7823 js short .got_child@ 1785 0000108C 0FB70495[601F0100] movzx eax, word [huff_tree_buf+edx*4] ; return data value 1786 00001094 D3E5 shl ebp, cl ; discard cl bits 1787 00001096 28CD sub ch, cl 1788 00001098 7932 jns short .got_done@ 1789 0000109A 88E9 mov cl, ch ; mp3mac_collect_more 1790 0000109C 80C510 add ch, 10h 1791 0000109F D3C5 rol ebp, cl 1792 000010A1 668B2E mov bp, [esi] 1793 000010A4 83C602 add esi, 2 1794 000010A7 66C1CD08 ror bp, 8 1795 000010AB D3CD ror ebp, cl 1796 000010AD EB1D jmp short .got_done@ 1797 1798 .got_child@: 1799 000010AF C1E509 shl ebp, 9 1800 000010B2 80ED09 sub ch, 9 1801 000010B5 79B4 jns short .get_child_lop@ 1802 000010B7 88E9 mov cl, ch 1803 000010B9 80C510 add ch, 10h 1804 000010BC D3C5 rol ebp, cl 1805 000010BE 668B2E mov bp, [esi] 1806 000010C1 83C602 add esi, 2 1807 000010C4 66C1CD08 ror bp, 8 1808 000010C8 D3CD ror ebp, cl 1809 000010CA EB9F jmp short .get_child_lop@ 1810 1811 .got_done@: 1812 000010CC 50 push eax 1813 000010CD C1E804 shr eax, 4 ; x 1814 000010D0 746F jz short .@this_sign ; @@getexpval 1 1815 000010D2 8B15[8C1F0500] mov edx, [_@@rle_val] 1816 000010D8 83F80F cmp eax, 15 1817 000010DB 7250 jb short .small ; when x=1..14 1818 000010DD 8A0D[781F0500] mov cl, byte [_@@linbits] ; =0..13 ; when x=15, with linbits 1819 000010E3 89E8 mov eax, ebp ; mp3mac_get_n_bits cl ; value = 0..1FFFh 1820 000010E5 D3E5 shl ebp, cl ; mp3mac_collect_more 1821 000010E7 D3C0 rol eax, cl 1822 000010E9 31E8 xor eax, ebp 1823 000010EB 28CD sub ch, cl 1824 000010ED 7913 jns short .cont 1825 000010EF 88E9 mov cl, ch ; mp3mac_collect_more 1826 000010F1 80C510 add ch, 16 1827 000010F4 D3C5 rol ebp, cl 1828 000010F6 668B2E mov bp, [esi] 1829 000010F9 83C602 add esi, 2 1830 000010FC 66C1CD08 ror bp, 8 1831 00001100 D3CD ror ebp, cl 1832 1833 .cont: 1834 00001102 88D1 mov cl, dl ; exponent.lsb 1835 00001104 80E103 and cl, 3 ; exponent.lsb 1836 00001107 C1EA02 shr edx, 2 ; exponent.msb 1837 0000110A 8D04853C000000 lea eax, [eax*4+60] ; (value+15)*4 1838 00001111 08C8 or al, cl ; exponent.lsb+(value+15)*4 1839 00001113 8A88[A0D90100] mov cl, [mp3_table_4_3_exp+eax] 1840 00001119 8B0485[DC590200] mov eax, [mp3_table_4_3_value+eax*4] 1841 00001120 28D1 sub cl, dl ; sub exponent.msb 1842 00001122 D3E8 shr eax, cl 1843 00001124 80F91F cmp cl, 31 1844 00001127 760E jbe short .get_sign 1845 00001129 31C0 xor eax, eax 1846 0000112B EB0A jmp short .get_sign 1847 1848 .small: 1849 0000112D C1E206 shl edx, 6 ; shl edx,4+2 ; mul16*4 ; when x<15 aka x=1..14 1850 00001130 8B8482[CC620400] mov eax, [mp3_expval_table+edx+eax*4] 1851 1852 .get_sign: 1853 00001137 FECD dec ch ; mp3mac_get_bit_to_cy 1854 00001139 D1E5 shl ebp, 1 1855 0000113B 19D2 sbb edx, edx ; get sign (negate if sign=1) 1856 0000113D 31D0 xor eax, edx 1857 0000113F 29D0 sub eax, edx 1858 1859 .@this_sign: 1860 00001141 8984BBA0000000 mov [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0] 1861 00001148 58 pop eax 1862 00001149 83E00F and eax, 0Fh ; y 1863 0000114C 746F jz short .@this_sign@ ; @@getexpval 1 1864 0000114E 8B15[8C1F0500] mov edx, [_@@rle_val] 1865 00001154 83F80F cmp eax, 0Fh 1866 00001157 7250 jb short .small@ 1867 00001159 8A0D[781F0500] mov cl, byte [_@@linbits] 1868 0000115F 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 1869 00001161 D3E5 shl ebp, cl 1870 00001163 D3C0 rol eax, cl 1871 00001165 31E8 xor eax, ebp 1872 00001167 28CD sub ch, cl 1873 00001169 7913 jns short .cont@ 1874 0000116B 88E9 mov cl, ch ; mp3mac_collect_more 1875 0000116D 80C510 add ch, 10h 1876 00001170 D3C5 rol ebp, cl 1877 00001172 668B2E mov bp, [esi] 1878 00001175 83C602 add esi, 2 1879 00001178 66C1CD08 ror bp, 8 1880 0000117C D3CD ror ebp, cl 1881 1882 .cont@: 1883 0000117E 88D1 mov cl, dl 1884 00001180 80E103 and cl, 3 1885 00001183 C1EA02 shr edx, 2 1886 00001186 8D04853C000000 lea eax, [eax*4+60] 1887 0000118D 08C8 or al, cl 1888 0000118F 8A88[A0D90100] mov cl, [mp3_table_4_3_exp+eax] 1889 00001195 8B0485[DC590200] mov eax, [mp3_table_4_3_value+eax*4] 1890 0000119C 28D1 sub cl, dl 1891 0000119E D3E8 shr eax, cl 1892 000011A0 80F91F cmp cl, 31 1893 000011A3 760E jbe short .get_sign@ 1894 000011A5 31C0 xor eax, eax 1895 000011A7 EB0A jmp short .get_sign@ 1896 1897 .small@: 1898 000011A9 C1E206 shl edx, 6 1899 000011AC 8B8482[CC620400] mov eax, [mp3_expval_table+edx+eax*4] 1900 1901 .get_sign@: 1902 000011B3 FECD dec ch ; dec mp3_colNN 1903 000011B5 D1E5 shl ebp, 1 ; shl mp3_col32,1 ; cy=data 1904 000011B7 19D2 sbb edx, edx ; cy=0,1 --> 0,FFFFFFFF 1905 000011B9 31D0 xor eax, edx ; invert if cy was 1 1906 000011BB 29D0 sub eax, edx ; add 1 if cy was 1 1907 1908 .@this_sign@: 1909 000011BD 8984BBA4000000 mov [ebx+edi*4+164], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+4] 1910 000011C4 83C702 add edi, 2 ; next j 1911 000011C7 FF0D[741F0500] dec dword [_@@JJJ] 1912 000011CD 0F857AFEFFFF jnz .low_freq_lop_j 1913 1914 .low_freq_next_i: 1915 000011D3 FF05[701F0500] inc dword [_@@III] ; next i 1916 000011D9 833D[701F0500]03 cmp dword [_@@III], 3 1917 000011E0 0F8201FDFFFF jb .low_freq_lop_i 1918 000011E6 81FF3C020000 cmp edi, 572 ; aka 576-4 ; skip if less than 4 entries left 1919 000011EC 0F87DA000000 ja .high_freq_done 1920 1921 .high_freq_lop: 1922 000011F2 3B35[801F0500] cmp esi, [_@@coarse_end] 1923 000011F8 7629 jbe short .high_freq_inrange 1924 000011FA 89F0 mov eax, esi ; mp3mac_bitstream_get_position 1925 000011FC 2B05[48F40000] sub eax, [mp3_bitstream_start] 1926 00001202 0FBED5 movsx edx, ch ; mp3_colNN 1927 00001205 F7DA neg edx 1928 00001207 8D44C2F0 lea eax, [edx+eax*8-16] 1929 0000120B 3B4308 cmp eax, [ebx+8] ; [ebx+$mp3gr_part2_3_end] ; check end 1930 0000120E 7213 jb short .high_freq_inrange ; not yet end 1931 00001210 0F84B6000000 jz .high_freq_done ; okay, exact end 1932 00001216 83FF04 cmp edi, 4 1933 00001219 7203 jb short .high_freq_cannot_stepback 1934 0000121B 83EF04 sub edi, 4 ; stepback, s_index-4 ; dst stepback 1935 1936 .high_freq_cannot_stepback: 1937 0000121E E9A9000000 jmp .high_freq_done 1938 1939 .high_freq_inrange: 1940 00001223 8B5324 mov edx, [ebx+24h] ; [ebx+$mp3gr_count1table_select] 1941 ; get huffcode (quad_vlc) 1942 1943 .get_child_lop@@: 1944 00001226 8A0C95[621F0100] mov cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode 1945 0000122D 668B1495[601F0100] mov dx, word [huff_tree_buf+edx*4] 1946 00001235 89E8 mov eax, ebp 1947 00001237 D3E8 shr eax, cl 1948 00001239 01C2 add edx, eax 1949 0000123B 8A0C95[621F0100] mov cl, [(huff_tree_buf+2)+edx*4] 1950 00001242 80F900 cmp cl, 0 1951 00001245 7823 js short .got_child@@ 1952 00001247 0FB70495[601F0100] movzx eax, word [huff_tree_buf+edx*4] 1953 0000124F D3E5 shl ebp, cl 1954 00001251 28CD sub ch, cl 1955 00001253 7932 jns short .got_done@@ 1956 00001255 88E9 mov cl, ch 1957 00001257 80C510 add ch, 10h 1958 0000125A D3C5 rol ebp, cl 1959 0000125C 668B2E mov bp, [esi] 1960 0000125F 83C602 add esi, 2 1961 00001262 66C1CD08 ror bp, 8 1962 00001266 D3CD ror ebp, cl 1963 00001268 EB1D jmp short .got_done@@ 1964 1965 .got_child@@: 1966 0000126A C1E509 shl ebp, 9 1967 0000126D 80ED09 sub ch, 9 1968 00001270 79B4 jns short .get_child_lop@@ 1969 00001272 88E9 mov cl, ch 1970 00001274 80C510 add ch, 10h 1971 00001277 D3C5 rol ebp, cl 1972 00001279 668B2E mov bp, [esi] 1973 0000127C 83C602 add esi, 2 1974 0000127F 66C1CD08 ror bp, 8 1975 00001283 D3CD ror ebp, cl 1976 00001285 EB9F jmp short .get_child_lop@@ 1977 1978 .got_done@@: 1979 00001287 88C2 mov dl, al ; flags 1980 00001289 C0E204 shl dl, 4 ; flags, to upper 4bit 1981 0000128C B604 mov dh, 4 ; lopcount 1982 1983 .high_freq_flag_lop: 1984 0000128E 31C0 xor eax, eax 1985 00001290 D0E2 shl dl, 1 ; flag 1986 00001292 7320 jnb short .high_freq_flag_this 1987 00001294 3B3D[841F0500] cmp edi, [_@rle_point] ; @@get_runlength quads 1988 0000129A 0F83B8000000 jnb .rle_fetch_next_quads 1989 1990 .rle_back_quads: 1991 000012A0 A1[8C1F0500] mov eax, [_@@rle_val] 1992 000012A5 8B0485[CC5A0400] mov eax, [mp3_exp_table+eax*4] ; xlat and get sign 1993 000012AC FECD dec ch ; mp3mac_get_bit_to_cy 1994 000012AE D1E5 shl ebp, 1 1995 000012B0 7302 jnb short .high_freq_flag_this ; 1996 ; sbb edx, edx ; cy=0,1 --> 0,FFFFFFFF 1997 ; xor eax, edx ; invert if cy was 1 1998 ; sub eax, edx ; add 1 if cy was 1 1999 000012B2 F7D8 neg eax 2000 2001 .high_freq_flag_this: 2002 000012B4 8984BBA0000000 mov [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0] 2003 000012BB 47 inc edi 2004 000012BC FECE dec dh 2005 000012BE 75CE jnz short .high_freq_flag_lop 2006 000012C0 81FF3C020000 cmp edi, 572 ; aka 576-4 ; loop while space for another 4 values 2007 000012C6 0F8626FFFFFF jbe .high_freq_lop 2008 2009 .high_freq_done: 2010 000012CC 897B5C mov [ebx+92], edi ; [ebx+$mp3gr_num_nonzero_hybrids] 2011 000012CF 51 push ecx 2012 000012D0 B940020000 mov ecx, 576 ; end 2013 000012D5 29F9 sub ecx, edi ; remain = end-curr 2014 ; zeropad remaining entries (can be 0 or 2 dwords, 2015 ; or more. If above loop was aborted) 2016 000012D7 8DBCBBA0000000 lea edi, [ebx+edi*4+160] ; [ebx+$mp3gr_sb_hybrid+edi*4] 2017 000012DE 31C0 xor eax, eax 2018 000012E0 F3AB rep stosd 2019 000012E2 59 pop ecx 2020 000012E3 F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_read_huffman 2021 000012EA 740E jz short .no_rdtsc_supported@ 2022 000012EC 0F31 rdtsc 2023 000012EE 0105[90760000] add [rdtsc_read_huffman], eax 2024 000012F4 1115[94760000] adc [rdtsc_read_huffman+4], edx 2025 2026 .no_rdtsc_supported@: 2027 000012FA F8 clc ; out: cy=0=okay 2028 000012FB C3 retn 2029 2030 .rle_fetch_next_small: 2031 000012FC A1[881F0500] mov eax, [_@@rle_ptr] ; @@next_runlength small 2032 00001301 8305[881F0500]04 add dword [_@@rle_ptr], 4 2033 00001308 8B00 mov eax, [eax] 2034 0000130A 6639C7 cmp di, ax 2035 0000130D 73ED jnb short .rle_fetch_next_small 2036 0000130F 66A3[841F0500] mov word [_@rle_point], ax 2037 00001315 C1E810 shr eax, 16 2038 00001318 A3[8C1F0500] mov [_@@rle_val], eax 2039 0000131D C1E006 shl eax, 6 2040 00001320 A3[901F0500] mov [_@@rle_val_x_40h], eax 2041 00001325 E934FCFFFF jmp .rle_back_small 2042 2043 .rle_fetch_next_full: 2044 0000132A A1[881F0500] mov eax, [_@@rle_ptr] ; @@next_runlength full 2045 0000132F 8305[881F0500]04 add dword [_@@rle_ptr], 4 2046 00001336 8B00 mov eax, [eax] 2047 00001338 6639C7 cmp di, ax 2048 0000133B 73ED jnb short .rle_fetch_next_full 2049 0000133D 66A3[841F0500] mov word [_@rle_point], ax 2050 00001343 C1E810 shr eax, 16 2051 00001346 A3[8C1F0500] mov [_@@rle_val], eax 2052 0000134B C1E006 shl eax, 6 2053 0000134E A3[901F0500] mov [_@@rle_val_x_40h], eax 2054 00001353 E90DFDFFFF jmp .rle_back_full 2055 2056 .rle_fetch_next_quads: 2057 00001358 A1[881F0500] mov eax, [_@@rle_ptr] ; msw=val, lsw=point 2058 0000135D 8305[881F0500]04 add dword [_@@rle_ptr], 4 ; 2+2 2059 00001364 8B00 mov eax, [eax] 2060 00001366 6639C7 cmp di, ax ; needed if rle fetching was skipped 2061 00001369 73ED jnb short .rle_fetch_next_quads 2062 0000136B 66A3[841F0500] mov word [_@rle_point], ax 2063 00001371 C1E810 shr eax, 16 2064 00001374 A3[8C1F0500] mov [_@@rle_val], eax 2065 00001379 E922FFFFFF jmp .rle_back_quads 2066 2067 .lop_j_near_end: 2068 0000137E 89F0 mov eax, esi 2069 00001380 2B05[48F40000] sub eax, [mp3_bitstream_start] 2070 00001386 0FBED5 movsx edx, ch 2071 00001389 F7DA neg edx 2072 0000138B 8D44C2F0 lea eax, [edx+eax*8-16] 2073 0000138F 3B4308 cmp eax, [ebx+8] 2074 00001392 0F82C1FCFFFF jb .small_not_end@ 2075 00001398 E936FEFFFF jmp .low_freq_next_i 2076 2077 2078 ; =============== S U B R O U T I N E ======================================= 2079 2080 2081 mp3_compute_stereo: 2082 0000139D 833D[6C9D0000]02 cmp dword [mp3_output_num_channels], 2 ; in: ebx=granule(s) 2083 000013A4 7515 jnz short .no_stereo 2084 000013A6 833D[889D0000]02 cmp dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO 2085 ; only MS stereo 2086 000013AD 740D jz short mp3_compute_ms_stereo 2087 000013AF F705[889D0000]0100- test dword [mp3_hdr_mode_ext], 1 ; MODE_EXT_I_STEREO 2087 000013B7 0000 2088 ; intensity stereo (optionally with MS stereo) 2089 000013B9 7567 jnz short mp3_compute_i_stereo 2090 2091 .no_stereo: 2092 000013BB C3 retn 2093 2094 mp3_compute_ms_stereo: 2095 000013BC F605[F0750000]10 test byte [cpuid_flags], 10h ; ms_stereo is most commonly used 2096 ; the 1/sqrt(2) normalization factor is included 2097 ; in the global gain 2098 000013C3 740E jz short .no_rdtsc_supported ; timelog_start rdtsc_ms_stereo 2099 000013C5 0F31 rdtsc 2100 000013C7 2905[A8760000] sub [rdtsc_ms_stereo], eax 2101 000013CD 1915[AC760000] sbb [rdtsc_ms_stereo+4], edx 2102 2103 .no_rdtsc_supported: 2104 000013D3 8DBBE0130000 lea edi, [ebx+5088] ; [ebx+$mp3gr_sb_hybrid+$mp3gr_entrysiz*2] 2105 ; for ch1 (2nd channel) 2106 000013D9 8B4B5C mov ecx, [ebx+92] ; [ebx+$mp3gr_num_nonzero_hybrids] ; ch0 2107 000013DC 8B839C130000 mov eax, [ebx+5020] ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)] ; ch1 2108 000013E2 39C1 cmp ecx, eax 2109 000013E4 7702 ja short .this_len 2110 000013E6 89C1 mov ecx, eax 2111 2112 .this_len: 2113 000013E8 E320 jecxz .ms_stereo_done 2114 000013EA 894B5C mov [ebx+92], ecx ; [ebx+$mp3gr_num_nonzero_hybrids] ; ch0 2115 000013ED 898B9C130000 mov [ebx+5020], ecx ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)] ; ch1 2116 2117 .ms_stereo_lop: 2118 000013F3 8B87C0ECFFFF mov eax, [edi-4928] ; for i=0 to 576-1 2119 ; [edi+@@ch0] 2120 ; @@ch0 equ (-$mp3gr_entrysiz*2) ; granule for channel=0 2121 ; tmp0 = granule.ch0.sb_hybrid[i] 2122 000013F9 8B17 mov edx, [edi] ; @@ch1 equ 0 ; granule for channel=1 2123 ; [edi+@@ch1] 2124 ; tmp1 = granule.ch1.sb_hybrid[i] 2125 000013FB 29D0 sub eax, edx ; tmp0 - tmp1 2126 000013FD 8D1450 lea edx, [eax+edx*2] ; tmp0 + tmp1 2127 00001400 8997C0ECFFFF mov [edi-4928], edx ; [edi+@@ch0] 2128 ; granule.ch0.sb_hybrid[i] = tmp0 + tmp1 2129 00001406 AB stosd ; [edi+@@ch1] 2130 ; granule.ch1.sb_hybrid[i] = tmp0 - tmp1 2131 00001407 49 dec ecx 2132 00001408 75E9 jnz short .ms_stereo_lop 2133 2134 .ms_stereo_done: 2135 0000140A F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_ms_stereo 2136 00001411 740E jz short .no_rdtsc_supported@ 2137 00001413 0F31 rdtsc 2138 00001415 0105[A8760000] add [rdtsc_ms_stereo], eax 2139 0000141B 1115[AC760000] adc [rdtsc_ms_stereo+4], edx 2140 2141 .no_rdtsc_supported@: 2142 00001421 C3 retn 2143 2144 mp3_compute_i_stereo: 2145 00001422 F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_i_stereo 2146 00001429 740E jz short .no_rdtsc_supported@@@ 2147 0000142B 0F31 rdtsc 2148 0000142D 2905[C0760000] sub [rdtsc_i_stereo], eax 2149 00001433 1915[C4760000] sbb [rdtsc_i_stereo+4], edx 2150 2151 .no_rdtsc_supported@@@: 2152 00001439 C7435C40020000 mov dword [ebx+92], 576 ; ch0 2153 ; [ebx+$mp3gr_num_nonzero_hybrids] 2154 00001440 C7839C130000400200- mov dword [ebx+5020], 576 ; ch1 2154 00001449 00 2155 ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)] 2156 0000144A 8B4320 mov eax, [ebx+32] ; [ebx+$mp3gr_long_end] 2157 0000144D A3[CC1F0500] mov [_@@n_long_sfb], eax 2158 00001452 B80D000000 mov eax, 13 ; 39/3 2159 00001457 2B431C sub eax, [ebx+28] ; [ebx+$mp3gr_short_start] 2160 0000145A 8D0440 lea eax, [eax+eax*2] ; mul3 2161 0000145D A3[D01F0500] mov [_@@n_short_sfb], eax 2162 00001462 0305[CC1F0500] add eax, [_@@n_long_sfb] 2163 00001468 A3[D41F0500] mov [_@@n_sfb], eax ; 2164 ; n_sfb = gr->n_long_sfb + gr->n_short_sfb; 2165 0000146D 803D[D01F0500]00 cmp byte [_@@n_short_sfb], 0 2166 00001474 B801000000 mov eax, 1 2167 00001479 7405 jz short .without_short 2168 0000147B B803000000 mov eax, 3 ; max_blocks = gr->n_short_sfb ? 3 : 1; 2169 2170 .without_short: 2171 00001480 A3[981F0500] mov [_@@max_blocks], eax 2172 00001485 BF[A01F0500] mov edi, _@@sfb_array 2173 0000148A A1[609D0000] mov eax, [mp3_hdr_sample_rate_index] ; bstab 2174 0000148F 6BC016 imul eax, 22 2175 00001492 8DB0[70800000] lea esi, [mp3_band_size_long+eax] 2176 00001498 8B0D[CC1F0500] mov ecx, [_@@n_long_sfb] 2177 0000149E F3A4 rep movsb 2178 000014A0 A1[609D0000] mov eax, [mp3_hdr_sample_rate_index] 2179 000014A5 6BC00D imul eax, 13 2180 000014A8 8DB0[40810000] lea esi, [mp3_band_size_short+eax] ; merge lieff-style 2181 000014AE 8B0D[D01F0500] mov ecx, [_@@n_short_sfb] 2182 000014B4 E30C jecxz .make_sfb_done ; doing that here is a bit slow, 2183 ; it would be better to pre-compute 2184 ; all merged-combinations 2185 000014B6 03731C add esi, [ebx+28] ; [ebx+$mp3gr_short_start] 2186 2187 .make_sfb_lop: 2188 000014B9 AC lodsb 2189 000014BA AA stosb 2190 000014BB AA stosb 2191 000014BC AA stosb 2192 000014BD 83E903 sub ecx, 3 2193 000014C0 75F7 jnz short .make_sfb_lop 2194 2195 .make_sfb_done: 2196 000014C2 E888000000 call _@@find_top_bands ; 2197 ; L3_stereo_top_band(left+576,gr->sfbtab,n_sfb,max_band); 2198 000014C7 803D[CC1F0500]00 cmp byte [_@@n_long_sfb], 0 2199 000014CE 7420 jz short .without_long 2200 000014D0 A1[941F0500] mov eax, dword [_@@max_bands] 2201 000014D5 38C4 cmp ah, al ; if (gr->n_long_sfb) 2202 000014D7 7F02 jg short .not_max1 ; max_band[0] = max_band[1] = max_band[2] = MINIMP3_MAX 2203 ; (MINIMP3_MAX(max_band[0], max_band[1]), max_band[2]); 2204 000014D9 88C4 mov ah, al 2205 2206 .not_max1: 2207 000014DB C1E808 shr eax, 8 2208 000014DE 38C4 cmp ah, al 2209 000014E0 7F02 jg short .not_max2 2210 000014E2 88C4 mov ah, al 2211 2212 .not_max2: 2213 000014E4 88E0 mov al, ah 2214 000014E6 C1E008 shl eax, 8 2215 000014E9 88E0 mov al, ah 2216 000014EB A3[941F0500] mov dword [_@@max_bands], eax 2217 2218 .without_long: 2219 000014F0 31ED xor ebp, ebp ; blk 2220 2221 .adjust_last_prev_lop: 2222 000014F2 8B15[D41F0500] mov edx, [_@@n_sfb] 2223 000014F8 2B15[981F0500] sub edx, [_@@max_blocks] ; itop = n_sfb - max_blocks + blk 2224 000014FE 01EA add edx, ebp 2225 00001500 89D1 mov ecx, edx 2226 00001502 2B0D[981F0500] sub ecx, [_@@max_blocks] ; prev = itop - max_blocks; 2227 00001508 A1[8C9D0000] mov eax, [mp3_hdr_flag_lsf] 2228 0000150D 8D0440 lea eax, [eax+eax*2] ; 0,1 --> 0,3 2229 ; default_pos = HDR_TEST_MPEG1(hdr) ? 3 2230 00001510 3403 xor al, 3 ; 0,3 --> 3,0 2231 00001512 363A8D[941F0500] cmp cl, [ss:_@@max_bands+ebp] 2232 00001519 7E07 jle short .use_default_pos ; ist_pos[itop] = max_band[blk] >= 2233 ; prev ? default_pos : ist_pos[prev] 2234 0000151B 8A840BB0130000 mov al, [ebx+ecx+5040] ; [ebx+@@right+$mp3gr_scale_factors+ecx] 2235 2236 .use_default_pos: 2237 00001522 888413B0130000 mov [ebx+edx+5040], al ; [ebx+@@right+$mp3gr_scale_factors+edx] 2238 00001529 45 inc ebp ; blk 2239 0000152A 3B2D[981F0500] cmp ebp, [_@@max_blocks] 2240 00001530 72C0 jb short .adjust_last_prev_lop 2241 00001532 E867000000 call _@@apply_i_stereo 2242 00001537 F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_i_stereo 2243 0000153E 740E jz short .no_rdtsc_supported@@@@ 2244 00001540 0F31 rdtsc 2245 00001542 0105[C0760000] add [rdtsc_i_stereo], eax 2246 00001548 1115[C4760000] adc [rdtsc_i_stereo+4], edx 2247 2248 .no_rdtsc_supported@@@@: 2249 0000154E C3 retn 2250 2251 2252 ; =============== S U B R O U T I N E ======================================= 2253 2254 2255 _@@find_top_bands: 2256 0000154F C705[941F0500]FFFF- mov dword [_@@max_bands], 0FFFFFFh ; set maxband[0..2]=(-1) 2256 00001557 FF00 2257 00001559 8DB3E0130000 lea esi, [ebx+5088] ; [ebx+@@right+$mp3gr_sb_hybrid] 2258 0000155F 31D2 xor edx, edx 2259 2260 .find_top_lop_iii: 2261 00001561 31C9 xor ecx, ecx ; for (i = 0; i < nbands; i++) 2262 2263 .find_top_lop_kkk: 2264 00001563 8B048E mov eax, [esi+ecx*4] ; for (k = 0; k < sfb[i]; k += 2) 2265 00001566 0B448E04 or eax, [esi+ecx*4+4] 2266 0000156A 750D jnz short .found_nonzero 2267 0000156C 83C102 add ecx, 2 2268 0000156F 3A8A[A01F0500] cmp cl, [_@@sfb_array+edx] 2269 00001575 72EC jb short .find_top_lop_kkk 2270 00001577 EB11 jmp short .find_top_next 2271 2272 .found_nonzero: 2273 00001579 89D0 mov eax, edx 2274 0000157B F635[AA8A0000] div byte [_@@const_3] 2275 00001581 0FB6C4 movzx eax, ah ; remainder (mod 3) 2276 00001584 8890[941F0500] mov [_@@max_bands+eax], dl ; max_bands[0..2]=i 2277 2278 .find_top_next: 2279 0000158A 0FB682[A01F0500] movzx eax, byte [_@@sfb_array+edx] 2280 00001591 8D3486 lea esi, [esi+eax*4] 2281 00001594 42 inc edx ; next 2282 00001595 3B15[D41F0500] cmp edx, [_@@n_sfb] 2283 0000159B 72C4 jb short .find_top_lop_iii 2284 0000159D C3 retn 2285 2286 ; =============== S U B R O U T I N E ======================================= 2287 2288 2289 _@@apply_i_stereo: 2290 0000159E B8[30840000] mov eax, mp3_is_table_normal 2291 000015A3 B907000000 mov ecx, 7 2292 000015A8 833D[8C9D0000]00 cmp dword [mp3_hdr_flag_lsf], 0 2293 000015AF 7425 jz short .this_lsf 2294 000015B1 8B8354130000 mov eax, [ebx+4948] ; [ebx+@@right+$mp3gr_scalefac_compress] 2295 000015B7 83E001 and eax, 1 ; bit0 2296 000015BA F705[889D0000]0200- test dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO 2296 000015C2 0000 2297 000015C4 7403 jz short .no_ms 2298 000015C6 83C802 or eax, 2 ; bit1=mul_1.414 2299 2300 .no_ms: 2301 000015C9 C1E009 shl eax, 9 ; N*40h*2*4 2302 000015CC 05[4CE70400] add eax, mp3_is_table_lsf 2303 000015D1 B940000000 mov ecx, 64 ; max (must be below NO_INTENSITY_FLAG) 2304 2305 .this_lsf: 2306 000015D6 890D[9C1F0500] mov [_@@max_pos], ecx ; 7 or 64 2307 000015DC A3[C81F0500] mov [_@@is_tab], eax ; table 2308 000015E1 8DB3A0000000 lea esi, [ebx+160] ; [ebx+$mp3gr_sb_hybrid] 2309 000015E7 31C9 xor ecx, ecx ; iii ; for (i = 0; sfb[i]; i++) 2310 2311 .apply_lop_i: 2312 000015E9 0FB6A9[A01F0500] movzx ebp, byte [_@@sfb_array+ecx] ; if ((int)i > max_band[i % 3] 2313 ; && ipos < max_pos) 2314 000015F0 89C8 mov eax, ecx 2315 000015F2 F635[AA8A0000] div byte [_@@const_3] ; max_band[i % 3] 2316 000015F8 0FB6C4 movzx eax, ah ; remainder (mod 3) 2317 000015FB 3A88[941F0500] cmp cl, [_@@max_bands+eax] ; iii,max_bands[0..2]; 2318 00001601 7E38 jle short .apply_ms_stereo 2319 00001603 0FB6BC0BB0130000 movzx edi, byte [ebx+ecx+5040] ; [ebx+@@right+$mp3gr_scale_factors+ecx] 2320 ; @@right = $mp3gr_entrysiz*2 = 4928 2321 ; $mp3gr_scale_factors = 112 2322 0000160B 3B3D[9C1F0500] cmp edi, [_@@max_pos] ; check ipos 2323 00001611 7328 jnb short .apply_ms_stereo 2324 00001613 C1E703 shl edi, 3 ; mul 2*4 2325 00001616 033D[C81F0500] add edi, [_@@is_tab] 2326 2327 .apply_pan_lop: 2328 0000161C 8B06 mov eax, [esi] ; tmp = granule.ch0.sb_hybrid 2329 0000161E C1E002 shl eax, 2 2330 00001621 F76F04 imul dword [edi+4] ; v1 2331 00001624 899640130000 mov [esi+4928], edx ; [esi+@@right] 2332 ; granule.ch1.sb_hybrid = tmp*v1 2333 0000162A 8B06 mov eax, [esi] ; tmp = granule.ch0.sb_hybrid 2334 0000162C C1E002 shl eax, 2 2335 0000162F F72F imul dword [edi] ; v0 2336 00001631 8916 mov [esi], edx ; granule.ch0.sb_hybrid = tmp*v0 2337 00001633 83C604 add esi, 4 2338 00001636 4D dec ebp 2339 00001637 75E3 jnz short .apply_pan_lop 2340 00001639 EB2C jmp short .apply_next 2341 2342 .apply_ms_stereo: 2343 0000163B F705[889D0000]0200- test dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO 2343 00001643 0000 2344 00001645 741D jz short .apply_none 2345 2346 .ms_stereo_lop: 2347 00001647 8B06 mov eax, [esi] ; tmp0 = granule.ch0.sb_hybrid[i] 2348 00001649 8B9640130000 mov edx, [esi+4928] ; [esi+@@right] 2349 ; tmp1 = granule.ch1.sb_hybrid[i] 2350 0000164F 29D0 sub eax, edx ; tmp0 - tmp1 2351 00001651 8D1450 lea edx, [eax+edx*2] ; tmp0 + tmp1 2352 00001654 8916 mov [esi], edx ; granule.ch0.sb_hybrid[i] = tmp0 + tmp1 2353 00001656 898640130000 mov [esi+4928], eax ; [esi+@@right] 2354 ; granule.ch1.sb_hybrid[i] = tmp0 - tmp1 2355 0000165C 83C604 add esi, 4 2356 0000165F 4D dec ebp 2357 00001660 75E5 jnz short .ms_stereo_lop 2358 00001662 EB03 jmp short .apply_next 2359 2360 .apply_none: 2361 00001664 8D34AE lea esi, [esi+ebp*4] ; skip, keep unchanged 2362 2363 .apply_next: 2364 00001667 41 inc ecx ; iii 2365 00001668 3B0D[D41F0500] cmp ecx, [_@@n_sfb] 2366 0000166E 0F8275FFFFFF jb .apply_lop_i ; next 2367 00001674 C3 retn 2368 2369 ; =============== S U B R O U T I N E ======================================= 2370 2371 2372 mp3_reorder_block: 2373 00001675 F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_reorder 2374 0000167C 740E jz short .no_rdtsc_supported 2375 0000167E 0F31 rdtsc 2376 00001680 2905[D8760000] sub [rdtsc_reorder], eax 2377 00001686 1915[DC760000] sbb [rdtsc_reorder+4], edx 2378 2379 .no_rdtsc_supported: 2380 0000168C 807B2C02 cmp byte [ebx+44], 2 ; ebx+$mp3gr_block_type] ; only for type 2 2381 00001690 7565 jnz short .no_reorder 2382 00001692 8DB3A0000000 lea esi, [ebx+160] ; [ebx+$mp3gr_sb_hybrid] ; ptr+0 2383 00001698 807B3000 cmp byte [ebx+48], 0 ; [ebx+$mp3gr_switch_point] 2384 0000169C 7412 jz short .this_src 2385 0000169E 81C690000000 add esi, 144 ; 36*4 ; ptr+36*4 2386 000016A4 833D[609D0000]08 cmp dword [mp3_hdr_sample_rate_index], 8 2387 000016AB 7503 jnz short .this_src 2388 000016AD 83C630 add esi, 48 ; 12*4 ; additionally to above 36*4 ; ptr+48*4 2389 2390 .this_src: 2391 000016B0 8B531C mov edx, [ebx+28] ; [ebx+$mp3gr_short_start] ; can be 13 2392 000016B3 83FA0D cmp edx, 13 2393 000016B6 733F jnb short .no_reorder 2394 000016B8 C7435C40020000 mov dword [ebx+92], 576 ; [ebx+$mp3gr_num_nonzero_hybrids] 2395 2396 .outer_lop: 2397 000016BF A1[609D0000] mov eax, [mp3_hdr_sample_rate_index] 2398 000016C4 6BC00D imul eax, 13 ; X*13 2399 000016C7 0FB68C10[40810000] movzx ecx, byte [mp3_band_size_short+eax+edx] ; [X*13+Y] 2400 000016CF BF[D81F0500] mov edi, _@@tmp 2401 000016D4 60 pusha 2402 000016D5 89CA mov edx, ecx ; step=len (4..44) ; copy LEN*3 dwords to tmp 2403 2404 .inner_lop: 2405 000016D7 8B06 mov eax, [esi] 2406 000016D9 AB stosd 2407 000016DA 8B0496 mov eax, [esi+edx*4] ; copy 3 dwords 2408 000016DD AB stosd 2409 000016DE 8B04D6 mov eax, [esi+edx*8] 2410 000016E1 AB stosd 2411 000016E2 83C604 add esi, 4 2412 000016E5 E2F0 loop .inner_lop 2413 000016E7 61 popa 2414 000016E8 8D0C49 lea ecx, [ecx+ecx*2] ; len*3 2415 000016EB 87FE xchg esi, edi ; copy LEN*3 dwords back from tmp 2416 000016ED F3A5 rep movsd 2417 000016EF 87FE xchg esi, edi 2418 000016F1 42 inc edx 2419 000016F2 83FA0D cmp edx, 13 2420 000016F5 72C8 jb short .outer_lop ; next 2421 2422 .no_reorder: 2423 000016F7 F605[F0750000]10 test byte [cpuid_flags], 10h 2424 000016FE 740E jz short .no_rdtsc_supported@ ; timelog_end rdtsc_reorder 2425 00001700 0F31 rdtsc 2426 00001702 0105[D8760000] add [rdtsc_reorder], eax 2427 00001708 1115[DC760000] adc [rdtsc_reorder+4], edx 2428 2429 .no_rdtsc_supported@: 2430 0000170E C3 retn 2431 2432 2433 ; =============== S U B R O U T I N E ======================================= 2434 2435 2436 mp3_compute_antialias: 2437 0000170F F605[F0750000]10 test byte [cpuid_flags], 10h ; in: ebx=granule 2438 00001716 740E jz short .no_rdtsc_supported ; timelog_start rdtsc_antialias 2439 00001718 0F31 rdtsc 2440 0000171A 2905[F0760000] sub [rdtsc_antialias], eax 2441 00001720 1915[F4760000] sbb [rdtsc_antialias+4], edx 2442 2443 .no_rdtsc_supported: 2444 00001726 8B435C mov eax, [ebx+92] ; [ebx+$mp3gr_num_nonzero_hybrids] 2445 00001729 83C008 add eax, 8 ; 9-1 ; 0..576+8 2446 0000172C 31D2 xor edx, edx 2447 0000172E B909000000 mov ecx, 9 2448 00001733 F7F1 div ecx ; (num/9) ; 0..64 2449 00001735 894360 mov [ebx+60h], eax 2450 00001738 D1E8 shr eax, 1 ; (num/18) ; 0..32 2451 0000173A 0F84B8010000 jz .no_antialias ; 0 (when num/9 = 0..1) 2452 00001740 89C1 mov ecx, eax ; 1..32 2453 00001742 C1E805 shr eax, 5 ; 0..1 2454 00001745 29C1 sub ecx, eax ; 1..31 ; len excluding zeropadding 2455 00001747 807B2C02 cmp byte [ebx+44], 2 ; [ebx+$mp3gr_block_type] 2456 0000174B 750F jnz short .this_len ; antialias only "long" bands 2457 0000174D 807B3000 cmp byte [ebx+48], 0 ; [ebx+$mp3gr_switch_point] 2458 00001751 0F84A1010000 jz .no_antialias 2459 00001757 B901000000 mov ecx, 1 ; check this for 8000Hz case 2460 2461 .this_len: 2462 0000175C 8D440901 lea eax, [1+ecx*2] 2463 00001760 394360 cmp [ebx+96], eax ; [ebx+$mp3gr_num_nonzero_hybrids_div9] 2464 00001763 7703 ja short .is_bigger 2465 00001765 894360 mov [ebx+96], eax ; opdate highest 2466 ; (nonzero required for l3-si_huff.bit) 2467 2468 .is_bigger: 2469 00001768 53 push ebx 2470 00001769 8D9BA0000000 lea ebx, [ebx+160] ; [ebx+$mp3gr_sb_hybrid] 2471 2472 .lop: 2473 0000176F 83C348 add ebx, 72 ; 18*4 2474 00001772 8B73FC mov esi, [ebx-4] ; IRP nn,0,1,2,3,4,5,6,7 ; INT_AA(nn=0..7) 2475 00001775 8B3B mov edi, [ebx] ; @@def_csa macro nn,cs,ca 2476 ; mp3_csa_&nn&_cs equ cs 2477 ; mp3_csa_&nn&_ca equ ca 2478 ; endm 2479 ; constants for mp3_csa_table 2480 00001777 C1E602 shl esi, 2 ; tmp0 = ptr[-nn-1]*4 2481 0000177A C1E702 shl edi, 2 ; tmp1 = ptr[+nn]*4 2482 0000177D 8D043E lea eax, [esi+edi] ; tmp2 = tmp0+tmp1 2483 00001780 BD032AE136 mov ebp, 36E12A03h ; @@def_csa 0,36E12A03h,-20ED7F9Ah ;-0.6 2484 ; mp3_csa_&nn&_cs 2485 00001785 F7ED imul ebp ; tmp2 = (tmp2*csa[0]) 2486 00001787 89D5 mov ebp, edx 2487 00001789 B8635631A8 mov eax, -57CEA99Dh ; mp3_csa_&nn&_ca-mp3_csa_&nn&_cs 2488 0000178E F7EE imul esi ; tmp0 = (tmp2+(tmp0*csa[3])) 2489 00001790 01EA add edx, ebp 2490 00001792 8913 mov [ebx], edx ; [ebx+(nn)*4] 2491 00001794 B869AAF315 mov eax, 15F3AA69h ; mp3_csa_&nn&_ca+mp3_csa_&nn&_cs 2492 00001799 F7EF imul edi ; tmp1 = (tmp2-(tmp1*csa[2])) 2493 0000179B 29D5 sub ebp, edx 2494 0000179D 896BFC mov [ebx-4], ebp ; [ebx-(nn+1)*4] 2495 000017A0 8B73F8 mov esi, [ebx-8] 2496 000017A3 8B7B04 mov edi, [ebx+4] 2497 000017A6 C1E602 shl esi, 2 2498 000017A9 C1E702 shl edi, 2 2499 000017AC 8D043E lea eax, [esi+edi] 2500 000017AF BDFD756E38 mov ebp, 386E75FDh ; @@def_csa 1,386E75FDh,-1E30DB48h ;-0.535 2501 000017B4 F7ED imul ebp 2502 000017B6 89D5 mov ebp, edx 2503 000017B8 B8BBAE60A9 mov eax, -569F5145h 2504 000017BD F7EE imul esi 2505 000017BF 01EA add edx, ebp 2506 000017C1 895304 mov [ebx+4], edx ; [ebx+(nn)*4] 2507 000017C4 B8B59A3D1A mov eax, 1A3D9AB5h 2508 000017C9 F7EF imul edi 2509 000017CB 29D5 sub ebp, edx 2510 000017CD 896BF8 mov [ebx-8], ebp ; [ebx-(nn+1)*4] 2511 000017D0 8B73F4 mov esi, [ebx-12] 2512 000017D3 8B7B08 mov edi, [ebx+8] 2513 000017D6 C1E602 shl esi, 2 2514 000017D9 C1E702 shl edi, 2 2515 000017DC 8D043E lea eax, [esi+edi] 2516 000017DF BD3EB7C63C mov ebp, 3CC6B73Eh ; @@def_csa 2,3CC6B73Eh,-140E604Fh ;-0.33 2517 000017E4 F7ED imul ebp 2518 000017E6 89D5 mov ebp, edx 2519 000017E8 B873E82AAF mov eax, -50D5178Dh 2520 000017ED F7EE imul esi 2521 000017EF 01EA add edx, ebp 2522 000017F1 895308 mov [ebx+8], edx ; [ebx+(nn)*4] 2523 000017F4 B8EF56B828 mov eax, 28B856EFh 2524 000017F9 F7EF imul edi 2525 000017FB 29D5 sub ebp, edx 2526 000017FD 896BF4 mov [ebx-12], ebp ; [ebx-(nn+1)*4] 2527 00001800 8B73F0 mov esi, [ebx-16] 2528 00001803 8B7B0C mov edi, [ebx+12] 2529 00001806 C1E602 shl esi, 2 2530 00001809 C1E702 shl edi, 2 2531 0000180C 8D043E lea eax, [esi+edi] 2532 0000180F BD55A0EE3E mov ebp, 3EEEA055h ; @@def_csa 3,3EEEA055h,-0BA47742h ;-0.185 2533 00001814 F7ED imul ebp 2534 00001816 89D5 mov ebp, edx 2535 00001818 B869E86CB5 mov eax, -4A931797h 2536 0000181D F7EE imul esi 2537 0000181F 01EA add edx, ebp 2538 00001821 89530C mov [ebx+12], edx ; [ebx+(nn)*4] 2539 00001824 B813294A33 mov eax, 334A2913h 2540 00001829 F7EF imul edi 2541 0000182B 29D5 sub ebp, edx 2542 0000182D 896BF0 mov [ebx-16], ebp ; [ebx-(nn+1)*4] 2543 00001830 8B73EC mov esi, [ebx-20] ; ebx-(nn+1)*4] ; tmp0 = ptr[-nn-1] 2544 00001833 8B7B10 mov edi, [ebx+16] ; [ebx+(nn)*4] ; tmp1 = ptr[+nn] 2545 00001836 C1E602 shl esi, 2 2546 00001839 C1E702 shl edi, 2 2547 0000183C 8D043E lea eax, [esi+edi] ; tmp2 = tmp0+tmp1 2548 0000183F BD5C90B63F mov ebp, 3FB6905Ch ; @@def_csa 4,3FB6905Ch,-060D80E9h ;-0.095 2549 00001844 F7ED imul ebp ; tmp2 = (tmp2*csa[0]) 2550 00001846 89D5 mov ebp, edx 2551 00001848 B8BBEE3BBA mov eax, -45C41145h 2552 0000184D F7EE imul esi ; tmp0 = (tmp2+(tmp0*csa[3])) 2553 0000184F 01EA add edx, ebp 2554 00001851 895310 mov [ebx+16], edx ; [ebx+(nn)*4] 2555 00001854 B8730FA939 mov eax, 39A90F73h 2556 00001859 F7EF imul edi ; tmp1 = (tmp2-(tmp1*csa[2])) 2557 0000185B 29D5 sub ebp, edx 2558 0000185D 896BEC mov [ebx-20], ebp ; [ebx-(nn+1)*4] 2559 00001860 8B73E8 mov esi, [ebx-24] 2560 00001863 8B7B14 mov edi, [ebx+20] 2561 00001866 C1E602 shl esi, 2 2562 00001869 C1E702 shl edi, 2 2563 0000186C 8D043E lea eax, [esi+edi] 2564 0000186F BD213FF23F mov ebp, 3FF23F21h ; @@def_csa 5,3FF23F21h,-029F2E1Bh ;-0.041 2565 00001874 F7ED imul ebp 2566 00001876 89D5 mov ebp, edx 2567 00001878 B8C4926EBD mov eax, -42916D3Ch 2568 0000187D F7EE imul esi 2569 0000187F 01EA add edx, ebp 2570 00001881 895314 mov [ebx+20], edx ; [ebx+(nn)*4] 2571 00001884 B80611533D mov eax, 3D531106h 2572 00001889 F7EF imul edi 2573 0000188B 29D5 sub ebp, edx 2574 0000188D 896BE8 mov [ebx-24], ebp ; [ebx-(nn+1)*4] 2575 00001890 8B73E4 mov esi, [ebx-28] 2576 00001893 8B7B18 mov edi, [ebx+24] 2577 00001896 C1E602 shl esi, 2 2578 00001899 C1E702 shl edi, 2 2579 0000189C 8D043E lea eax, [esi+edi] 2580 0000189F BD3259FE3F mov ebp, 3FFE5932h ; @@def_csa 6,3FFE5932h,-00E8A11Ch ;-0.0142 2581 000018A4 F7ED imul ebp 2582 000018A6 89D5 mov ebp, edx 2583 000018A8 B8B20519BF mov eax, -40E6FA4Eh 2584 000018AD F7EE imul esi 2585 000018AF 01EA add edx, ebp 2586 000018B1 895318 mov [ebx+24], edx ; [ebx+(nn)*4] 2587 000018B4 B816B8153F mov eax, 3F15B816h 2588 000018B9 F7EF imul edi 2589 000018BB 29D5 sub ebp, edx 2590 000018BD 896BE4 mov [ebx-28], ebp ; [ebx-(nn+1)*4] 2591 000018C0 8B73E0 mov esi, [ebx-32] 2592 000018C3 8B7B1C mov edi, [ebx+28] 2593 000018C6 C1E602 shl esi, 2 2594 000018C9 C1E702 shl edi, 2 2595 000018CC 8D043E lea eax, [esi+edi] 2596 000018CF BD4BE3FF3F mov ebp, 3FFFE34Bh ; @@def_csa 7,3FFFE34Bh,-003C9ED1h ;-0.0037 2597 000018D4 F7ED imul ebp 2598 000018D6 89D5 mov ebp, edx 2599 000018D8 B8E47DC3BF mov eax, -403C821Ch 2600 000018DD F7EE imul esi 2601 000018DF 01EA add edx, ebp 2602 000018E1 89531C mov [ebx+28], edx ; [ebx+(nn)*4] 2603 000018E4 B87A44C33F mov eax, 3FC3447Ah 2604 000018E9 F7EF imul edi 2605 000018EB 29D5 sub ebp, edx 2606 000018ED 896BE0 mov [ebx-32], ebp ; [ebx-(nn+1)*4] 2607 000018F0 49 dec ecx 2608 000018F1 0F8578FEFFFF jnz .lop 2609 000018F7 5B pop ebx 2610 2611 .no_antialias: 2612 000018F8 F605[F0750000]10 test byte [cpuid_flags], 10h 2613 000018FF 740E jz short .no_rdtsc_supported@ 2614 00001901 0F31 rdtsc 2615 00001903 0105[F0760000] add [rdtsc_antialias], eax 2616 00001909 1115[F4760000] adc [rdtsc_antialias+4], edx 2617 2618 .no_rdtsc_supported@: 2619 0000190F C3 retn 2620 2621 2622 ; =============== S U B R O U T I N E ======================================= 2623 2624 2625 mp3_imdct36: 2626 00001910 8B06 mov eax, [esi] ; in: esi=src (sb_hybrid) 2627 ; in: edi=dst (sb_samples) 2628 ; in: ebx=buf (mdct_buf) 2629 ; in: ebp=win (mdct_win) 2630 ; 2631 ; [esi+0*4] 2632 00001912 8B5604 mov edx, [esi+4] ; IRP i,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 2633 00001915 01D0 add eax, edx ; IF i AND 1 (*) ; mov edx,[esi+i*4] ; val[i] 2634 ; add val[i-1] 2635 00001917 894604 mov [esi+4], eax ; IF i GT 1 2636 ; add ecx,eax ; add val[i-2] 2637 ; mov [esi+(i)*4],ecx 2638 ; ELSE 2639 ; mov [esi+(i)*4],eax 2640 0000191A 89C1 mov ecx, eax ; memorize as val[i-2] 2641 0000191C 8B4608 mov eax, [esi+8] ; ELSE (*) ; [esi+i*4] ; val[i] 2642 0000191F 01C2 add edx, eax ; add val[i-1] 2643 00001921 895608 mov [esi+8], edx ; [esi+(i)*4 2644 00001924 8B560C mov edx, [esi+12] 2645 00001927 01D0 add eax, edx 2646 00001929 01C1 add ecx, eax 2647 0000192B 894E0C mov [esi+12], ecx 2648 0000192E 89C1 mov ecx, eax 2649 00001930 8B4610 mov eax, [esi+16] 2650 00001933 01C2 add edx, eax 2651 00001935 895610 mov [esi+16], edx 2652 00001938 8B5614 mov edx, [esi+20] 2653 0000193B 01D0 add eax, edx 2654 0000193D 01C1 add ecx, eax 2655 0000193F 894E14 mov [esi+20], ecx 2656 00001942 89C1 mov ecx, eax 2657 00001944 8B4618 mov eax, [esi+24] 2658 00001947 01C2 add edx, eax 2659 00001949 895618 mov [esi+24], edx 2660 0000194C 8B561C mov edx, [esi+28] 2661 0000194F 01D0 add eax, edx 2662 00001951 01C1 add ecx, eax 2663 00001953 894E1C mov [esi+28], ecx 2664 00001956 89C1 mov ecx, eax 2665 00001958 8B4620 mov eax, [esi+32] 2666 0000195B 01C2 add edx, eax 2667 0000195D 895620 mov [esi+32], edx 2668 00001960 8B5624 mov edx, [esi+36] 2669 00001963 01D0 add eax, edx 2670 00001965 01C1 add ecx, eax 2671 00001967 894E24 mov [esi+36], ecx 2672 0000196A 89C1 mov ecx, eax 2673 0000196C 8B4628 mov eax, [esi+40] 2674 0000196F 01C2 add edx, eax 2675 00001971 895628 mov [esi+40], edx 2676 00001974 8B562C mov edx, [esi+44] 2677 00001977 01D0 add eax, edx 2678 00001979 01C1 add ecx, eax 2679 0000197B 894E2C mov [esi+44], ecx 2680 0000197E 89C1 mov ecx, eax 2681 00001980 8B4630 mov eax, [esi+48] 2682 00001983 01C2 add edx, eax 2683 00001985 895630 mov [esi+48], edx 2684 00001988 8B5634 mov edx, [esi+52] 2685 0000198B 01D0 add eax, edx 2686 0000198D 01C1 add ecx, eax 2687 0000198F 894E34 mov [esi+52], ecx 2688 00001992 89C1 mov ecx, eax 2689 00001994 8B4638 mov eax, [esi+56] 2690 00001997 01C2 add edx, eax 2691 00001999 895638 mov [esi+56], edx 2692 0000199C 8B563C mov edx, [esi+60] 2693 0000199F 01D0 add eax, edx 2694 000019A1 01C1 add ecx, eax 2695 000019A3 894E3C mov [esi+60], ecx 2696 000019A6 89C1 mov ecx, eax 2697 000019A8 8B4640 mov eax, [esi+64] 2698 000019AB 01C2 add edx, eax 2699 000019AD 895640 mov [esi+64], edx 2700 000019B0 8B5644 mov edx, [esi+68] 2701 000019B3 01D0 add eax, edx 2702 000019B5 01C1 add ecx, eax 2703 000019B7 894E44 mov [esi+68], ecx 2704 000019BA 89C1 mov ecx, eax 2705 000019BC 53 push ebx 2706 000019BD 55 push ebp 2707 000019BE 57 push edi 2708 000019BF 8B0E mov ecx, [esi] ; IRP j,0,1 2709 000019C1 8B5E30 mov ebx, [esi+48] ; t1 = [esi+(0*2+j)*4], t0 = [esi+(6*2+j)*4] 2710 000019C4 8B7E20 mov edi, [esi+32] ; t2 = [esi+(4*2+j)*4] 2711 000019C7 037E40 add edi, [esi+64] ; + [esi+(8*2+j)*4] 2712 000019CA 2B7E10 sub edi, [esi+16] ; - [esi+(2*2+j)*4] 2713 000019CD 8D2C4B lea ebp, [ebx+ecx*2] ; t2 = src[4*2+j] + src[8*2+j] - src[2*2+j] 2714 ; t3 = [t1*2+t0] 2715 000019D0 D1FD sar ebp, 1 ; sar @@t3,1 2716 000019D2 29D9 sub ecx, ebx ; sub @@t1,@@t0 2717 000019D4 89C8 mov eax, ecx ; @@SUM [@@tmp+(16+j)*4],@@t1,add,@@t2 2718 000019D6 01F8 add eax, edi 2719 000019D8 A3[24290500] mov [_@@@tmp+40h], eax ; [@@tmp+(16+j)*4] 2720 000019DD D1FF sar edi, 1 ; sar @@t2,1 2721 000019DF 89C8 mov eax, ecx ; @@SUM [@@tmp+(6+j)*4],@@t1,sub,@@t2 2722 000019E1 29F8 sub eax, edi 2723 000019E3 A3[FC280500] mov [_@@@tmp+18h], eax ; [@@tmp+(6+j)*4] 2724 000019E8 8B4610 mov eax, [esi+16] ; [esi+(4*2+j)*4] 2725 000019EB 034620 add eax, [esi+32] ; [esi+(2*2+j)*4] 2726 000019EE D1E0 shl eax, 1 2727 000019F0 BA0AD94778 mov edx, 7847D90Ah ; C2 2728 000019F5 F7EA imul edx 2729 000019F7 89D3 mov ebx, edx 2730 000019F9 8B4620 mov eax, [esi+32] 2731 000019FC 2B4640 sub eax, [esi+64] 2732 000019FF BA04CB8BD3 mov edx, 0D38BCB04h ; negC8 2733 00001A04 F7EA imul edx 2734 00001A06 89D1 mov ecx, edx 2735 00001A08 8B4610 mov eax, [esi+16] 2736 00001A0B 034640 add eax, [esi+64] 2737 00001A0E D1E0 shl eax, 1 2738 00001A10 BA7541F29D mov edx, 9DF24175h ; negC4 2739 00001A15 F7EA imul edx 2740 00001A17 89E8 mov eax, ebp 2741 00001A19 01D8 add eax, ebx 2742 00001A1B 01C8 add eax, ecx 2743 00001A1D A3[EC280500] mov [_@@@tmp+8], eax 2744 00001A22 89E8 mov eax, ebp 2745 00001A24 29D8 sub eax, ebx 2746 00001A26 29D0 sub eax, edx 2747 00001A28 A3[0C290500] mov [_@@@tmp+28h], eax 2748 00001A2D 89E8 mov eax, ebp 2749 00001A2F 01D0 add eax, edx 2750 00001A31 29C8 sub eax, ecx 2751 00001A33 A3[1C290500] mov [_@@@tmp+38h], eax 2752 00001A38 8B4628 mov eax, [esi+40] 2753 00001A3B 034638 add eax, [esi+56] 2754 00001A3E 2B4608 sub eax, [esi+8] 2755 00001A41 D1E0 shl eax, 1 2756 00001A43 BA5F142691 mov edx, 9126145Fh ; negC3 2757 00001A48 F7EA imul edx 2758 00001A4A 8915[F4280500] mov [_@@@tmp+10h], edx 2759 00001A50 8B4608 mov eax, [esi+8] 2760 00001A53 034628 add eax, [esi+40] 2761 00001A56 D1E0 shl eax, 1 2762 00001A58 BA332E0E7E mov edx, 7E0E2E33h ; C1 2763 00001A5D F7EA imul edx 2764 00001A5F 89D7 mov edi, edx 2765 00001A61 8B4628 mov eax, [esi+40] 2766 00001A64 2B4638 sub eax, [esi+56] 2767 00001A67 BA2E5E71A8 mov edx, 0A8715E2Eh ; negC7 2768 00001A6C F7EA imul edx 2769 00001A6E 89D5 mov ebp, edx 2770 00001A70 8B4608 mov eax, [esi+8] 2771 00001A73 034638 add eax, [esi+56] 2772 00001A76 D1E0 shl eax, 1 2773 00001A78 BAB822B9AD mov edx, 0ADB922B8h ; negC5 2774 00001A7D F7EA imul edx 2775 00001A7F 89D1 mov ecx, edx 2776 00001A81 8B4618 mov eax, [esi+24] 2777 00001A84 D1E0 shl eax, 1 2778 00001A86 BAA2EBD96E mov edx, 6ED9EBA2h ; C3 2779 00001A8B F7EA imul edx 2780 00001A8D 89E8 mov eax, ebp 2781 00001A8F 01F8 add eax, edi 2782 00001A91 01D0 add eax, edx 2783 00001A93 A3[E4280500] mov [_@@@tmp], eax 2784 00001A98 89E8 mov eax, ebp 2785 00001A9A 29C8 sub eax, ecx 2786 00001A9C 29D0 sub eax, edx 2787 00001A9E A3[04290500] mov [_@@@tmp+20h], eax 2788 00001AA3 89F8 mov eax, edi 2789 00001AA5 01C8 add eax, ecx 2790 00001AA7 29D0 sub eax, edx 2791 00001AA9 A3[14290500] mov [_@@@tmp+30h], eax 2792 00001AAE 8B4E04 mov ecx, [esi+4] 2793 00001AB1 8B5E34 mov ebx, [esi+52] 2794 00001AB4 8B7E24 mov edi, [esi+36] 2795 00001AB7 037E44 add edi, [esi+68] 2796 00001ABA 2B7E14 sub edi, [esi+20] 2797 00001ABD 8D2C4B lea ebp, [ebx+ecx*2] 2798 00001AC0 D1FD sar ebp, 1 2799 00001AC2 29D9 sub ecx, ebx 2800 00001AC4 89C8 mov eax, ecx 2801 00001AC6 01F8 add eax, edi 2802 00001AC8 A3[28290500] mov [_@@@tmp+44h], eax 2803 00001ACD D1FF sar edi, 1 2804 00001ACF 89C8 mov eax, ecx 2805 00001AD1 29F8 sub eax, edi 2806 00001AD3 A3[00290500] mov [_@@@tmp+1Ch], eax 2807 00001AD8 8B4614 mov eax, [esi+20] ; t0 = MULH(2*(src[2*2+j]+src[4*2+j]),C2) 2808 00001ADB 034624 add eax, [esi+36] 2809 00001ADE D1E0 shl eax, 1 2810 00001AE0 BA0AD94778 mov edx, 7847D90Ah ; C2 2811 00001AE5 F7EA imul edx 2812 00001AE7 89D3 mov ebx, edx 2813 00001AE9 8B4624 mov eax, [esi+36] ; t1 = MULH(src[4*2+j]-src[8*2+j],negC8) 2814 00001AEC 2B4644 sub eax, [esi+68] 2815 00001AEF BA04CB8BD3 mov edx, 0D38BCB04h ; negC8 2816 00001AF4 F7EA imul edx 2817 00001AF6 89D1 mov ecx, edx 2818 00001AF8 8B4614 mov eax, [esi+20] ; t2 = MULH(2*(src[2*2+j]+src[8*2+j]),negC4) 2819 00001AFB 034644 add eax, [esi+68] 2820 00001AFE D1E0 shl eax, 1 2821 00001B00 BA7541F29D mov edx, 9DF24175h ; negC4 2822 00001B05 F7EA imul edx 2823 00001B07 89E8 mov eax, ebp ; tmp[2+j] = t3+t0+t1 2824 00001B09 01D8 add eax, ebx 2825 00001B0B 01C8 add eax, ecx 2826 00001B0D A3[F0280500] mov [_@@@tmp+0Ch], eax 2827 00001B12 89E8 mov eax, ebp ; tmp[10+j] = t3-t0-t2 2828 00001B14 29D8 sub eax, ebx 2829 00001B16 29D0 sub eax, edx 2830 00001B18 A3[10290500] mov [_@@@tmp+2Ch], eax 2831 00001B1D 89E8 mov eax, ebp ; tmp[14+j] = t3+t2-t1 2832 00001B1F 01D0 add eax, edx 2833 00001B21 29C8 sub eax, ecx 2834 00001B23 A3[20290500] mov [_@@@tmp+3Ch], eax 2835 00001B28 8B462C mov eax, [esi+44] ; tmp[4+j] = MULH(2*(src[5*2+j]+src[7*2+j]-src[1*2+j]),negC3) 2836 00001B2B 03463C add eax, [esi+60] 2837 00001B2E 2B460C sub eax, [esi+12] 2838 00001B31 D1E0 shl eax, 1 2839 00001B33 BA5F142691 mov edx, 9126145Fh ; negC3 2840 00001B38 F7EA imul edx 2841 00001B3A 8915[F8280500] mov [_@@@tmp+14h], edx 2842 00001B40 8B460C mov eax, [esi+12] ; @@MULH @@t2,[esi+(1*2+j)*4],add,[esi+(5*2+j)*4],-,- ,1,C1,- 2843 ; t2 = MULH(2*(src[1*2+j],add,src[5*2+j]),-,-,1,C1) 2844 00001B43 03462C add eax, [esi+44] 2845 00001B46 D1E0 shl eax, 1 2846 00001B48 BA332E0E7E mov edx, 7E0E2E33h ; C1 2847 00001B4D F7EA imul edx 2848 00001B4F 89D7 mov edi, edx 2849 00001B51 8B462C mov eax, [esi+44] ; @@MULH @@t3,[esi+(5*2+j)*4],sub,[esi+(7*2+j)*4],-,-, 2850 ; ,0,negC7,- 2851 ; 2852 ; t3 = MULH( src[5*2+j],sub,src[7*2+j],-,-,0,negC7) 2853 00001B54 2B463C sub eax, [esi+60] 2854 00001B57 BA2E5E71A8 mov edx, 0A8715E2Eh ; negC7 2855 00001B5C F7EA imul edx 2856 00001B5E 89D5 mov ebp, edx 2857 00001B60 8B460C mov eax, [esi+12] ; t1 = MULH(2*(src[1*2+j],add,src[7*2+j]),-,-,1,negC5) 2858 00001B63 03463C add eax, [esi+60] 2859 00001B66 D1E0 shl eax, 1 ; shift = 1 2860 00001B68 BAB822B9AD mov edx, 0ADB922B8h ; negC5 2861 00001B6D F7EA imul edx 2862 00001B6F 89D1 mov ecx, edx 2863 00001B71 8B461C mov eax, [esi+28] ; t0 = MULH(2*src[3*2+j],-,-,-,-,1,C3) 2864 00001B74 D1E0 shl eax, 1 2865 00001B76 BAA2EBD96E mov edx, 6ED9EBA2h ; C3 2866 00001B7B F7EA imul edx 2867 00001B7D 89E8 mov eax, ebp 2868 00001B7F 01F8 add eax, edi 2869 00001B81 01D0 add eax, edx 2870 00001B83 A3[E8280500] mov [_@@@tmp+4], eax 2871 00001B88 89E8 mov eax, ebp 2872 00001B8A 29C8 sub eax, ecx 2873 00001B8C 29D0 sub eax, edx 2874 00001B8E A3[08290500] mov [_@@@tmp+24h], eax 2875 00001B93 89F8 mov eax, edi ; @@SUM [@@tmp+(12+j)*4],@@t2,add,@@t1,sub,edx 2876 00001B95 01C8 add eax, ecx 2877 00001B97 29D0 sub eax, edx 2878 00001B99 A3[18290500] mov [_@@@tmp+34h], eax 2879 00001B9E 5F pop edi 2880 00001B9F 5D pop ebp 2881 00001BA0 5B pop ebx 2882 00001BA1 56 push esi ; IRP j,0,1,2,3 ; j = 0 2883 00001BA2 8B15[E4280500] mov edx, [_@@@tmp] ; t0 = [@@tmp+(j*4+0)*4] 2884 00001BA8 8B35[E8280500] mov esi, [_@@@tmp+4] ; t1 = [@@tmp+(j*4+1)*4] 2885 00001BAE A1[EC280500] mov eax, [_@@@tmp+8] ; t2 = [@@tmp+(j*4+2)*4] 2886 00001BB3 8B0D[F0280500] mov ecx, [_@@@tmp+0Ch] ; t2 = [@@tmp+(j*4+3)*4] 2887 00001BB9 29D0 sub eax, edx ; s2 = t2 - t0 2888 00001BBB 8D1450 lea edx, [eax+edx*2] ; s0 = t2 + t0 2889 00001BBE A3[DC280500] mov [_@@s2], eax ; @@MULH esi,eax ,-,-,-,-,1,icos36h_&j,- 2890 ; s2 = MULH(s2*2, icos36h[j]) 2891 00001BC3 8915[D8280500] mov [_@@s0], edx 2892 00001BC9 29F1 sub ecx, esi 2893 00001BCB 8D0471 lea eax, [ecx+esi*2] 2894 00001BCE D1E0 shl eax, 1 2895 00001BD0 BA90953E40 mov edx, 403E9590h ; icos36h_0 2896 00001BD5 F7EA imul edx 2897 00001BD7 89D6 mov esi, edx 2898 00001BD9 89C8 mov eax, ecx ; @@MULH @@s3,ecx,-,-,-,-,shift_for_8minus&j,icos36h_8minus&j,- 2899 ; s3 = MULL(s3,icos36[8-j]) ; <-- "MULL" with "icos36" 2900 00001BDB C1E004 shl eax, 4 2901 00001BDE BA2C2ACA5B mov edx, 5BCA2A2Ch ; icos36h_8 (8-0) 2902 00001BE3 F7EA imul edx 2903 00001BE5 8915[E0280500] mov [_@@s3], edx 2904 00001BEB 8B0D[D8280500] mov ecx, [_@@s0] 2905 00001BF1 29F1 sub ecx, esi 2906 00001BF3 8D3471 lea esi, [ecx+esi*2] 2907 00001BF6 8B4524 mov eax, [ebp+36] ; @@MULH [edi+(9+j)*SBLIMIT*4],[ebp+(9+j)*4], 2908 ; -,-,-,-,0,ecx,[ebx+(9+j)*4] 2909 ; out[(9+j)*SBLIMIT] = MULH(t0, win[9+j])+buf[9+j] 2910 00001BF9 F7E9 imul ecx 2911 00001BFB 035324 add edx, [ebx+36] ; [ebx+(9+j)*4] 2912 00001BFE 899780040000 mov [edi+1152], edx ; SBLIMIT=32 ; 9*SBLIMIT*4 = 1152 2913 00001C04 8B4520 mov eax, [ebp+32] ; @@MULH [edi+(8-j)*SBLIMIT*4],[ebp+(8-j)*4] 2914 ; ,-,-,-,-,0,ecx,[ebx+(8-j)*4] 2915 00001C07 F7E9 imul ecx 2916 00001C09 035320 add edx, [ebx+32] 2917 00001C0C 899700040000 mov [edi+1024], edx ; SBLIMIT=32 ; 8*SBLIMIT*4 = 1024 2918 00001C12 8B456C mov eax, [ebp+108] 2919 00001C15 F7EE imul esi 2920 00001C17 895324 mov [ebx+36], edx 2921 00001C1A 8B4568 mov eax, [ebp+104] ; @@MULH [ebx+(8-j)*4],[ebp+(8-j+18)*4],-,-,-,-,0,esi,- 2922 00001C1D F7EE imul esi 2923 00001C1F 895320 mov [ebx+32], edx 2924 00001C22 8B0D[DC280500] mov ecx, [_@@s2] 2925 00001C28 8B35[E0280500] mov esi, [_@@s3] 2926 00001C2E 29F1 sub ecx, esi ; t2 = s2 - s3 2927 00001C30 8D3471 lea esi, [ecx+esi*2] ; t3 = s2 + s3 2928 00001C33 8B4500 mov eax, [ebp+0] ; @@MULH [edi+(0+j)*SBLIMIT*4],[ebp+(0+j)*4], 2929 ; -,-,-,-,0,ecx,[ebx+(0+j)*4] 2930 00001C36 F7E9 imul ecx 2931 00001C38 0313 add edx, [ebx] 2932 00001C3A 8917 mov [edi], edx 2933 00001C3C 8B4544 mov eax, [ebp+68] ; @@MULH [edi+(17-j)*SBLIMIT*4],[ebp+(17-j)*4] 2934 ; ,-,-,-,-,0,ecx,[ebx+(17-j)*4] 2935 00001C3F F7E9 imul ecx 2936 00001C41 035344 add edx, [ebx+68] 2937 00001C44 899780080000 mov [edi+2176], edx ; 17*SBLIMIT*4 = 2176 2938 00001C4A 8B4548 mov eax, [ebp+72] ; @@MULH [ebx+(0+j)*4],[ebp+(0+j+18)*4],-,-,-,-,0,esi,- 2939 00001C4D F7EE imul esi 2940 00001C4F 8913 mov [ebx], edx 2941 00001C51 8B858C000000 mov eax, [ebp+140] ; @@MULH [ebx+(17-j)*4],[ebp+(17-j+18)*4],-,-,-,-,0,esi,- 2942 00001C57 F7EE imul esi 2943 00001C59 895344 mov [ebx+68], edx 2944 00001C5C 8B15[F4280500] mov edx, [_@@@tmp+10h] ; IRP j,0,1,2,3 ; j = 1 2945 00001C62 8B35[F8280500] mov esi, [_@@@tmp+14h] 2946 00001C68 A1[FC280500] mov eax, [_@@@tmp+18h] 2947 00001C6D 8B0D[00290500] mov ecx, [_@@@tmp+1Ch] 2948 00001C73 29D0 sub eax, edx 2949 00001C75 8D1450 lea edx, [eax+edx*2] 2950 00001C78 A3[DC280500] mov [_@@s2], eax 2951 00001C7D 8915[D8280500] mov [_@@s0], edx 2952 00001C83 29F1 sub ecx, esi 2953 00001C85 8D0471 lea eax, [ecx+esi*2] 2954 00001C88 D1E0 shl eax, 1 2955 00001C8A BA07F74142 mov edx, 4241F707h ; icos36h_1 2956 00001C8F F7EA imul edx 2957 00001C91 89D6 mov esi, edx 2958 00001C93 89C8 mov eax, ecx 2959 00001C95 C1E002 shl eax, 2 2960 00001C98 BA1E75A37B mov edx, 7BA3751Eh ; icos36h_7 (8-1) 2961 00001C9D F7EA imul edx 2962 00001C9F 8915[E0280500] mov [_@@s3], edx 2963 00001CA5 8B0D[D8280500] mov ecx, [_@@s0] 2964 00001CAB 29F1 sub ecx, esi 2965 00001CAD 8D3471 lea esi, [ecx+esi*2] 2966 00001CB0 8B4528 mov eax, [ebp+40] 2967 00001CB3 F7E9 imul ecx 2968 00001CB5 035328 add edx, [ebx+40] 2969 00001CB8 899700050000 mov [edi+1280], edx 2970 00001CBE 8B451C mov eax, [ebp+28] 2971 00001CC1 F7E9 imul ecx 2972 00001CC3 03531C add edx, [ebx+28] 2973 00001CC6 899780030000 mov [edi+896], edx 2974 00001CCC 8B4570 mov eax, [ebp+112] 2975 00001CCF F7EE imul esi 2976 00001CD1 895328 mov [ebx+40], edx 2977 00001CD4 8B4564 mov eax, [ebp+100] 2978 00001CD7 F7EE imul esi 2979 00001CD9 89531C mov [ebx+28], edx 2980 00001CDC 8B0D[DC280500] mov ecx, [_@@s2] 2981 00001CE2 8B35[E0280500] mov esi, [_@@s3] 2982 00001CE8 29F1 sub ecx, esi 2983 00001CEA 8D3471 lea esi, [ecx+esi*2] 2984 00001CED 8B4504 mov eax, [ebp+4] 2985 00001CF0 F7E9 imul ecx 2986 00001CF2 035304 add edx, [ebx+4] 2987 00001CF5 899780000000 mov [edi+128], edx 2988 00001CFB 8B4540 mov eax, [ebp+64] 2989 00001CFE F7E9 imul ecx 2990 00001D00 035340 add edx, [ebx+64] 2991 00001D03 899700080000 mov [edi+2048], edx 2992 00001D09 8B454C mov eax, [ebp+76] 2993 00001D0C F7EE imul esi 2994 00001D0E 895304 mov [ebx+4], edx 2995 00001D11 8B8588000000 mov eax, [ebp+136] 2996 00001D17 F7EE imul esi 2997 00001D19 895340 mov [ebx+64], edx 2998 00001D1C 8B15[04290500] mov edx, [_@@@tmp+20h] ; IRP j,0,1,2,3 ; j = 2 2999 00001D22 8B35[08290500] mov esi, [_@@@tmp+24h] 3000 00001D28 A1[0C290500] mov eax, [_@@@tmp+28h] 3001 00001D2D 8B0D[10290500] mov ecx, [_@@@tmp+2Ch] 3002 00001D33 29D0 sub eax, edx 3003 00001D35 8D1450 lea edx, [eax+edx*2] 3004 00001D38 A3[DC280500] mov [_@@s2], eax 3005 00001D3D 8915[D8280500] mov [_@@s0], edx 3006 00001D43 29F1 sub ecx, esi 3007 00001D45 8D0471 lea eax, [ecx+esi*2] 3008 00001D48 D1E0 shl eax, 1 3009 00001D4A BA6CBE9D46 mov edx, 469DBE6Ch ; icos36h_2 3010 00001D4F F7EA imul edx 3011 00001D51 89D6 mov esi, edx 3012 00001D53 89C8 mov eax, ecx 3013 00001D55 C1E002 shl eax, 2 3014 00001D58 BA62ECB74B mov edx, 4BB7EC62h ; icos36h_6 (8-2) 3015 00001D5D F7EA imul edx 3016 00001D5F 8915[E0280500] mov [_@@s3], edx 3017 00001D65 8B0D[D8280500] mov ecx, [_@@s0] 3018 00001D6B 29F1 sub ecx, esi 3019 00001D6D 8D3471 lea esi, [ecx+esi*2] 3020 00001D70 8B452C mov eax, [ebp+44] 3021 00001D73 F7E9 imul ecx 3022 00001D75 03532C add edx, [ebx+44] 3023 00001D78 899780050000 mov [edi+1408], edx 3024 00001D7E 8B4518 mov eax, [ebp+24] 3025 00001D81 F7E9 imul ecx 3026 00001D83 035318 add edx, [ebx+24] 3027 00001D86 899700030000 mov [edi+768], edx 3028 00001D8C 8B4574 mov eax, [ebp+116] 3029 00001D8F F7EE imul esi 3030 00001D91 89532C mov [ebx+44], edx 3031 00001D94 8B4560 mov eax, [ebp+96] 3032 00001D97 F7EE imul esi 3033 00001D99 895318 mov [ebx+24], edx 3034 00001D9C 8B0D[DC280500] mov ecx, [_@@s2] 3035 00001DA2 8B35[E0280500] mov esi, [_@@s3] 3036 00001DA8 29F1 sub ecx, esi 3037 00001DAA 8D3471 lea esi, [ecx+esi*2] 3038 00001DAD 8B4508 mov eax, [ebp+8] 3039 00001DB0 F7E9 imul ecx 3040 00001DB2 035308 add edx, [ebx+8] 3041 00001DB5 899700010000 mov [edi+256], edx 3042 00001DBB 8B453C mov eax, [ebp+60] 3043 00001DBE F7E9 imul ecx 3044 00001DC0 03533C add edx, [ebx+60] 3045 00001DC3 899780070000 mov [edi+1920], edx 3046 00001DC9 8B4550 mov eax, [ebp+80] 3047 00001DCC F7EE imul esi 3048 00001DCE 895308 mov [ebx+8], edx 3049 00001DD1 8B8584000000 mov eax, [ebp+132] 3050 00001DD7 F7EE imul esi 3051 00001DD9 89533C mov [ebx+60], edx 3052 00001DDC 8B15[14290500] mov edx, [_@@@tmp+30h] ; IRP j,0,1,2,3 ; j = 3 3053 00001DE2 8B35[18290500] mov esi, [_@@@tmp+34h] 3054 00001DE8 A1[1C290500] mov eax, [_@@@tmp+38h] 3055 00001DED 8B0D[20290500] mov ecx, [_@@@tmp+3Ch] 3056 00001DF3 29D0 sub eax, edx 3057 00001DF5 8D1450 lea edx, [eax+edx*2] 3058 00001DF8 A3[DC280500] mov [_@@s2], eax 3059 00001DFD 8915[D8280500] mov [_@@s0], edx 3060 00001E03 29F1 sub ecx, esi 3061 00001E05 8D0471 lea eax, [ecx+esi*2] 3062 00001E08 D1E0 shl eax, 1 3063 00001E0A BABE2B214E mov edx, 4E212BBEh ; icos36h_3 3064 00001E0F F7EA imul edx 3065 00001E11 89D6 mov esi, edx 3066 00001E13 89C8 mov eax, ecx 3067 00001E15 D1E0 shl eax, 1 3068 00001E17 BADFA1946F mov edx, 6F94A1DFh ; icos36h_5 (8-3) 3069 00001E1C F7EA imul edx 3070 00001E1E 8915[E0280500] mov [_@@s3], edx 3071 00001E24 8B0D[D8280500] mov ecx, [_@@s0] 3072 00001E2A 29F1 sub ecx, esi 3073 00001E2C 8D3471 lea esi, [ecx+esi*2] 3074 00001E2F 8B4530 mov eax, [ebp+48] 3075 00001E32 F7E9 imul ecx 3076 00001E34 035330 add edx, [ebx+48] 3077 00001E37 899700060000 mov [edi+1536], edx 3078 00001E3D 8B4514 mov eax, [ebp+20] 3079 00001E40 F7E9 imul ecx 3080 00001E42 035314 add edx, [ebx+20] 3081 00001E45 899780020000 mov [edi+640], edx 3082 00001E4B 8B4578 mov eax, [ebp+120] 3083 00001E4E F7EE imul esi 3084 00001E50 895330 mov [ebx+30h], edx 3085 00001E53 8B455C mov eax, [ebp+92] 3086 00001E56 F7EE imul esi 3087 00001E58 895314 mov [ebx+20], edx 3088 00001E5B 8B0D[DC280500] mov ecx, [_@@s2] 3089 00001E61 8B35[E0280500] mov esi, [_@@s3] 3090 00001E67 29F1 sub ecx, esi 3091 00001E69 8D3471 lea esi, [ecx+esi*2] 3092 00001E6C 8B450C mov eax, [ebp+12] 3093 00001E6F F7E9 imul ecx 3094 00001E71 03530C add edx, [ebx+12] 3095 00001E74 899780010000 mov [edi+384], edx 3096 00001E7A 8B4538 mov eax, [ebp+56] 3097 00001E7D F7E9 imul ecx 3098 00001E7F 035338 add edx, [ebx+56] 3099 00001E82 899700070000 mov [edi+1792], edx 3100 00001E88 8B4554 mov eax, [ebp+84] 3101 00001E8B F7EE imul esi 3102 00001E8D 89530C mov [ebx+12], edx 3103 00001E90 8B8580000000 mov eax, [ebp+128] 3104 00001E96 F7EE imul esi 3105 00001E98 895338 mov [ebx+56], edx 3106 00001E9B 8B0D[24290500] mov ecx, [_@@@tmp+40h] ; IRP j,4 3107 ; [@@tmp+(j*4+0)*4] 3108 00001EA1 A1[28290500] mov eax, [_@@@tmp+44h] ; [@@tmp+(j*4+1)*4] 3109 00001EA6 D1E0 shl eax, 1 3110 00001EA8 BA9A79825A mov edx, 5A82799Ah ; icos36h_4 (8-4) 3111 00001EAD F7EA imul edx 3112 00001EAF 29D1 sub ecx, edx 3113 00001EB1 8D3451 lea esi, [ecx+edx*2] 3114 00001EB4 8B4534 mov eax, [ebp+52] ; @@MULH [edi+(9+j)*SBLIMIT*4],[ebp+(9+j)*4], 3115 ; -,-,-,-,0,ecx,[ebx+(9+j)*4] 3116 ; out[(9+4)*SBLIMIT] = MULH(t0,win[9+4])+buf[9+4] 3117 00001EB7 F7E9 imul ecx 3118 00001EB9 035334 add edx, [ebx+52] 3119 00001EBC 899780060000 mov [edi+1664], edx ; 13*SBLIMIT*4 = 1664 3120 00001EC2 8B4510 mov eax, [ebp+16] ; @MULH [edi+(8-j)*SBLIMIT*4],[ebp+(8-j)*4], 3121 ; -,-,-,-,0,ecx,[ebx+(8-j)*4] 3122 00001EC5 F7E9 imul ecx 3123 00001EC7 035310 add edx, [ebx+16] 3124 00001ECA 899700020000 mov [edi+512], edx 3125 00001ED0 8B457C mov eax, [ebp+124] ; @@MULH [ebx+(9+j)*4],[ebp+(9+j+18)*4] ,-,-,-,-,0,esi,- 3126 00001ED3 F7EE imul esi 3127 00001ED5 895334 mov [ebx+52], edx 3128 00001ED8 8B4558 mov eax, [ebp+88] ; @@MULH [ebx+(8-j)*4],[ebp+(8-j+18)*4],-,-,-,-,0,esi,- 3129 00001EDB F7EE imul esi 3130 00001EDD 895310 mov [ebx+16], edx 3131 00001EE0 5E pop esi 3132 00001EE1 C3 retn 3133 3134 3135 ; =============== S U B R O U T I N E ======================================= 3136 3137 3138 mp3_imdct12: 3139 00001EE2 8B06 mov eax, [esi] ; in: esi=src - out: [out2_...] 3140 00001EE4 A3[2C290500] mov [_@@tmp0], eax ; IRP nn,0,1,2,3,4,5 3141 ; @@tmp&nn rd 1 3142 ; ENDM 3143 ; mov eax,[esi+0*3*4] ; = src[0*3] 3144 00001EE9 8B560C mov edx, [esi+12] ; [esi+1*3*4] ; = src[1*3] 3145 00001EEC 01D0 add eax, edx ; = src[0*3]+src[1*3] 3146 00001EEE A3[30290500] mov [_@@tmp1], eax 3147 00001EF3 8B4618 mov eax, [esi+24] 3148 00001EF6 01C2 add edx, eax 3149 00001EF8 8915[34290500] mov [_@@tmp2], edx 3150 00001EFE 8B5624 mov edx, [esi+36] ; [esi+3*3*4] 3151 00001F01 01D0 add eax, edx 3152 00001F03 A3[38290500] mov [_@@tmp3], eax 3153 00001F08 8B4630 mov eax, [esi+48] 3154 00001F0B 01C2 add edx, eax 3155 00001F0D 8915[3C290500] mov [_@@tmp4], edx 3156 00001F13 8B563C mov edx, [esi+60] ; [esi+5*3*4] 3157 00001F16 01D0 add eax, edx ; = src[4*3]+src[5*3] 3158 00001F18 0305[38290500] add eax, [_@@tmp3] 3159 00001F1E A3[40290500] mov [_@@tmp5], eax ; tmp5 = src[4*3]+src[5*3]+tmp3 3160 00001F23 8B15[30290500] mov edx, [_@@tmp1] 3161 00001F29 0115[38290500] add [_@@tmp3], edx 3162 00001F2F A1[34290500] mov eax, [_@@tmp2] ; @@MULH @@tmp2,@@tmp2,-,-,-,-,1,C3,- 3163 ; tmp2 = MULH(2*tmp2,C3) 3164 00001F34 D1E0 shl eax, 1 3165 00001F36 BAA2EBD96E mov edx, 6ED9EBA2h ; C3 3166 00001F3B F7EA imul edx 3167 00001F3D 8915[34290500] mov [_@@tmp2], edx 3168 00001F43 A1[38290500] mov eax, [_@@tmp3] ; @@MULH @@tmp3,@@tmp3,-,-,-,-,2,C3,- 3169 ; tmp3 = MULH(4*tmp3,C3) 3170 00001F48 C1E002 shl eax, 2 3171 00001F4B BAA2EBD96E mov edx, 6ED9EBA2h ; C3 3172 00001F50 F7EA imul edx 3173 00001F52 8915[38290500] mov [_@@tmp3], edx 3174 00001F58 A1[30290500] mov eax, [_@@tmp1] ; @@MULH edx,@@tmp1,sub,@@tmp5,-,-,1,icos36h_4,- 3175 00001F5D 2B05[40290500] sub eax, [_@@tmp5] ; t2 = MULH(2*(tmp1-tmp5),icos36h_4) 3176 00001F63 D1E0 shl eax, 1 3177 00001F65 BA9A79825A mov edx, 5A82799Ah ; icos36h_4 3178 00001F6A F7EA imul edx 3179 00001F6C A1[2C290500] mov eax, [_@@tmp0] ; @@SUM eax,@@tmp0,sub,@@tmp4,-,- 3180 00001F71 2B05[3C290500] sub eax, [_@@tmp4] ; t1 = tmp0 - tmp4 3181 00001F77 29D0 sub eax, edx ; @@CAST macro t1,t2,dst0,dst1,dst2,dst3 3182 ; sub t1,t2 ;t1-t2 3183 ; lea t2,[t1+t2*2] ;t1+t2 3184 ; mov dword ptr [mp3_out2_a&dst0],t1 ;t1-t2 3185 ; mov dword ptr [mp3_out2_b&dst0],t2 ;t1+t2 3186 ; endm 3187 00001F79 8D1450 lea edx, [eax+edx*2] ; @@CAST eax,edx,1,4,7,10 3188 ; out2[1,4,7,10]=t1-t2,t1-t2,t1+t2,t1+t2 3189 00001F7C A3[48290500] mov [mp3_out2_a1], eax 3190 00001F81 8915[54290500] mov [mp3_out2_b1], edx 3191 00001F87 A1[3C290500] mov eax, [_@@tmp4] 3192 00001F8C 8B15[30290500] mov edx, [_@@tmp1] 3193 00001F92 D1F8 sar eax, 1 3194 00001F94 D1E2 shl edx, 1 3195 00001F96 0105[2C290500] add [_@@tmp0], eax ; tmp0 = tmp0 + tmp4/2 3196 00001F9C 0115[40290500] add [_@@tmp5], edx ; tmp5 = tmp5 + tmp1*2 3197 00001FA2 A1[40290500] mov eax, [_@@tmp5] ; @@MULH edx,@@tmp5,add,@@tmp3,-,-,0,icos36h_1,- 3198 00001FA7 0305[38290500] add eax, [_@@tmp3] 3199 00001FAD BA07F74142 mov edx, 4241F707h ; icos36h_1 3200 00001FB2 F7EA imul edx 3201 00001FB4 A1[2C290500] mov eax, [_@@tmp0] ; @@SUM eax,@@tmp0,add,@@tmp2,-,- 3202 00001FB9 0305[34290500] add eax, [_@@tmp2] 3203 00001FBF 29D0 sub eax, edx ; @@CAST eax,edx,2,3,8,9 3204 00001FC1 8D1450 lea edx, [eax+edx*2] 3205 00001FC4 A3[4C290500] mov [mp3_out2_a2], eax 3206 00001FC9 8915[58290500] mov [mp3_out2_b2], edx 3207 00001FCF A1[40290500] mov eax, [_@@tmp5] ; @@MULH edx,@@tmp5,sub,@@tmp3,-,-,1,icos36h_7,- 3208 00001FD4 2B05[38290500] sub eax, [_@@tmp3] 3209 00001FDA D1E0 shl eax, 1 3210 00001FDC BA1E75A37B mov edx, 7BA3751Eh ; icos36h_7 3211 00001FE1 F7EA imul edx 3212 00001FE3 A1[2C290500] mov eax, [_@@tmp0] ; @@SUM eax,@@tmp0,sub,@@tmp2,-,- 3213 00001FE8 2B05[34290500] sub eax, [_@@tmp2] 3214 00001FEE 29D0 sub eax, edx ; @@CAST eax,edx,0,5,6,11 3215 00001FF0 8D1450 lea edx, [eax+edx*2] 3216 00001FF3 A3[44290500] mov [mp3_out2_a0], eax 3217 00001FF8 8915[50290500] mov [mp3_out2_b0], edx 3218 00001FFE C3 retn 3219 3220 3221 ; =============== S U B R O U T I N E ======================================= 3222 3223 3224 mp3_compute_imdct: 3225 00001FFF F605[F0750000]10 test byte [cpuid_flags], 10h ; in: ebx=granule 3226 00002006 740E jz short .no_rdtsc_supported ; timelog_start rdtsc_imdct 3227 00002008 0F31 rdtsc 3228 0000200A 2905[08770000] sub [rdtsc_imdct], eax 3229 00002010 1915[0C770000] sbb [rdtsc_imdct+4], edx 3230 3231 .no_rdtsc_supported: 3232 00002016 53 push ebx 3233 00002017 8B4B60 mov ecx, [ebx+96] ; [ebx+$mp3gr_num_nonzero_hybrids_div9] 3234 0000201A 6BC109 imul eax, ecx, 9 3235 0000201D 8DBC83A0000000 lea edi, [ebx+eax*4+160] ; [ebx+$mp3gr_sb_hybrid+eax*4] 3236 00002024 E322 jecxz .breakout 3237 3238 .scan_zero_lop: 3239 00002026 83EF24 sub edi, 36 ; index-9 3240 00002029 8B07 mov eax, [edi] ; [edi+0*4] 3241 0000202B 0B4704 or eax, [edi+4] 3242 0000202E 0B4708 or eax, [edi+8] 3243 00002031 0B470C or eax, [edi+12] 3244 00002034 0B4710 or eax, [edi+16] 3245 00002037 0B4714 or eax, [edi+20] 3246 0000203A 0B4718 or eax, [edi+24] 3247 0000203D 0B471C or eax, [edi+28] 3248 00002040 0B4720 or eax, [edi+32] ; [edi+8*4] 3249 00002043 7503 jnz short .breakout 3250 00002045 49 dec ecx 3251 00002046 75DE jnz short .scan_zero_lop 3252 3253 .breakout: 3254 00002048 41 inc ecx ; div9+1 3255 00002049 D1E9 shr ecx, 1 ; div18 3256 0000204B 890D[70290500] mov [_@@sblimit], ecx 3257 00002051 837B2C02 cmp dword [ebx+44], 2 ; [ebx+$mp3gr_block_type] 3258 00002055 7505 jnz short .this_long_end 3259 00002057 8B4B30 mov ecx, [ebx+48] ; [ebx+$mp3gr_switch_point] 3260 0000205A D1E1 shl ecx, 1 ; 0,1 --> 0,2 3261 3262 .this_long_end: 3263 0000205C 890D[6C290500] mov [_@@mdct_long_end], ecx 3264 00002062 8B4330 mov eax, [ebx+48] ; [ebx+$mp3gr_switch_point] 3265 00002065 A3[74290500] mov [_@@switch_point], eax 3266 0000206A 8B432C mov eax, [ebx+44] ; [ebx+$mp3gr_block_type] 3267 0000206D 69C090000000 imul eax, 144 ; 1*36*4 3268 00002073 A3[68290500] mov [_@@www], eax 3269 00002078 8B0D[3CF40000] mov ecx, [mp3_curr_channel] 3270 0000207E A1[40F40000] mov eax, [mp3_curr_granule] 3271 00002083 69C900120000 imul ecx, 4608 ; 36*SBLIMIT*4 ; channel ; sb_samples[ch][gr*18] 3272 00002089 69C000090000 imul eax, 2304 ; 18*SBLIMIT*4 ; frame=granule*18 3273 0000208F 8DBC01[9CBD0000] lea edi, [mp3_sb_samples+ecx+eax] 3274 00002096 8DB3A0000000 lea esi, [ebx+160] ; [ebx+$mp3gr_sb_hybrid] 3275 0000209C A1[3CF40000] mov eax, [mp3_curr_channel] 3276 000020A1 69C000090000 imul eax, 2304 ; SBLIMIT*18*4 3277 000020A7 8D98[9CE10000] lea ebx, [mp3_mdct_buf+eax] 3278 000020AD F605[F0750000]10 test byte [cpuid_flags], 10h 3279 000020B4 740E jz short .no_rdtsc_supported@ ; timelog_start rdtsc_imdct36 3280 000020B6 0F31 rdtsc 3281 000020B8 2905[20770000] sub [rdtsc_imdct36], eax 3282 000020BE 1915[24770000] sbb [rdtsc_imdct36+4], edx 3283 3284 .no_rdtsc_supported@: 3285 000020C4 C705[64290500]0000- mov dword [_@@@JJJ], 0 3285 000020CC 0000 3286 000020CE 833D[6C290500]00 cmp dword [_@@mdct_long_end], 0 3287 000020D5 744D jz short .imdct36_done 3288 3289 .imdct36_lop: 3290 000020D7 BD[CCE20400] mov ebp, mp3_mdct_win ; for j=0 to mdct_long_end-1 3291 000020DC 833D[64290500]02 cmp dword [_@@@JJJ], 2 3292 000020E3 19C0 sbb eax, eax 3293 000020E5 2305[74290500] and eax, [_@@switch_point] 3294 000020EB 7506 jnz short .this_window ; force window 0 3295 000020ED 032D[68290500] add ebp, [_@@www] ; mdct_win 3296 3297 .this_window: 3298 000020F3 A1[64290500] mov eax, [_@@@JJJ] 3299 000020F8 D1E8 shr eax, 1 ; cy=0,1 3300 000020FA 19C0 sbb eax, eax ; eax=0,FFFFFFFFh 3301 000020FC 2540020000 and eax, 576 ; 4*36*4 3302 00002101 01C5 add ebp, eax 3303 00002103 E808F8FFFF call mp3_imdct36 3304 00002108 83C704 add edi, 4 ; 1*4 ; dst 3305 0000210B 83C648 add esi, 72 ; 18*4 ; sb_hybrid 3306 0000210E 83C348 add ebx, 72 ; mdct_buf ; next 3307 00002111 FF05[64290500] inc dword [_@@@JJJ] 3308 00002117 A1[64290500] mov eax, [_@@@JJJ] 3309 0000211C 3B05[6C290500] cmp eax, [_@@mdct_long_end] 3310 00002122 72B3 jb short .imdct36_lop 3311 3312 .imdct36_done: 3313 00002124 F605[F0750000]10 test byte [cpuid_flags], 10h 3314 0000212B 740E jz short .no_rdtsc_supported@@ ; timelog_end rdtsc_imdct36 3315 0000212D 0F31 rdtsc 3316 0000212F 0105[20770000] add [rdtsc_imdct36], eax 3317 00002135 1115[24770000] adc [rdtsc_imdct36+4], edx 3318 3319 .no_rdtsc_supported@@: 3320 0000213B F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_imdct12 3321 00002142 740E jz short .no_rdtsc_supported@@@ 3322 00002144 0F31 rdtsc 3323 00002146 2905[38770000] sub [rdtsc_imdct12], eax 3324 0000214C 1915[3C770000] sbb [rdtsc_imdct12+4], edx 3325 3326 .no_rdtsc_supported@@@: 3327 00002152 A1[64290500] mov eax, [_@@@JJJ] 3328 00002157 3B05[70290500] cmp eax, [_@@sblimit] 3329 0000215D 0F83D7020000 jnb .imdct12_done 3330 3331 .imdct12_lop: 3332 00002163 BD[ECE30400] mov ebp, (mp3_mdct_win+120h) ; for j=mdct_long_end to sblimit-1 3333 00002168 A1[64290500] mov eax, [_@@@JJJ] 3334 0000216D D1E8 shr eax, 1 ; cy=0,1 3335 0000216F 19C0 sbb eax, eax ; eax=0,FFFFFFFFh 3336 00002171 2540020000 and eax, 576 ; 4*36*4 3337 00002176 01C5 add ebp, eax ; mdct_win 3338 00002178 8B03 mov eax, [ebx] ; IRP i,0,1,2,3,4,5 3339 0000217A 8907 mov [edi], eax ; @@SUM [edi+i*SBLIMIT*4],[ebx+(i+0)*4],-,-,-,- 3340 0000217C 8B4304 mov eax, [ebx+4] 3341 0000217F 898780000000 mov [edi+128], eax 3342 00002185 8B4308 mov eax, [ebx+8] 3343 00002188 898700010000 mov [edi+256], eax 3344 0000218E 8B430C mov eax, [ebx+12] 3345 00002191 898780010000 mov [edi+384], eax 3346 00002197 8B4310 mov eax, [ebx+16] 3347 0000219A 898700020000 mov [edi+512], eax 3348 000021A0 8B4314 mov eax, [ebx+20] 3349 000021A3 898780020000 mov [edi+640], eax ; ENDM 3350 000021A9 81C700030000 add edi, 768 ; 6*SBLIMIT*4 3351 000021AF E82EFDFFFF call mp3_imdct12 3352 000021B4 A1[44290500] mov eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5 3353 000021B9 8B5500 mov edx, [ebp+0] ; @@MULH [edi+i*SBLIMIT*4],[mp3_out2_a&i], 3354 ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(1*6+i)*4] 3355 000021BC F7EA imul edx 3356 000021BE 035318 add edx, [ebx+24] 3357 000021C1 8917 mov [edi], edx 3358 000021C3 A1[50290500] mov eax, [mp3_out2_b0] ; @@MULH [ebx+(2*6+i)*4],[mp3_out2_b&i], 3359 ; -,-,-,-,0,[ebp+(i+6)*4],- 3360 000021C8 8B5518 mov edx, [ebp+24] 3361 000021CB F7EA imul edx 3362 000021CD 895330 mov [ebx+48], edx 3363 000021D0 A1[48290500] mov eax, [mp3_out2_a1] ; i = 1 3364 000021D5 8B5504 mov edx, [ebp+4] 3365 000021D8 F7EA imul edx 3366 000021DA 03531C add edx, [ebx+28] 3367 000021DD 899780000000 mov [edi+128], edx 3368 000021E3 A1[54290500] mov eax, [mp3_out2_b1] 3369 000021E8 8B551C mov edx, [ebp+28] 3370 000021EB F7EA imul edx 3371 000021ED 895334 mov [ebx+52], edx 3372 000021F0 A1[4C290500] mov eax, [mp3_out2_a2] ; i = 2 3373 000021F5 8B5508 mov edx, [ebp+8] 3374 000021F8 F7EA imul edx 3375 000021FA 035320 add edx, [ebx+32] 3376 000021FD 899700010000 mov [edi+256], edx 3377 00002203 A1[58290500] mov eax, [mp3_out2_b2] 3378 00002208 8B5520 mov edx, [ebp+32] 3379 0000220B F7EA imul edx 3380 0000220D 895338 mov [ebx+56], edx 3381 00002210 A1[4C290500] mov eax, [mp3_out2_a2] ; i = 3 ; mp3_out2_a3 equ mp3_out2_a2 3382 00002215 8B550C mov edx, [ebp+12] 3383 00002218 F7EA imul edx 3384 0000221A 035324 add edx, [ebx+36] 3385 0000221D 899780010000 mov [edi+384], edx 3386 00002223 A1[58290500] mov eax, [mp3_out2_b2] ; mp3_out2_b3 equ mp3_out2_b2 3387 00002228 8B5524 mov edx, [ebp+36] 3388 0000222B F7EA imul edx 3389 0000222D 89533C mov [ebx+60], edx 3390 00002230 A1[48290500] mov eax, [mp3_out2_a1] ; i = 4 ; mp3_out2_a4 equ mp3_out2_a1 3391 00002235 8B5510 mov edx, [ebp+16] 3392 00002238 F7EA imul edx 3393 0000223A 035328 add edx, [ebx+40] 3394 0000223D 899700020000 mov [edi+512], edx 3395 00002243 A1[54290500] mov eax, [mp3_out2_b1] ; mp3_out2_b4 equ mp3_out2_b1 3396 00002248 8B5528 mov edx, [ebp+40] 3397 0000224B F7EA imul edx 3398 0000224D 895340 mov [ebx+64], edx 3399 00002250 A1[44290500] mov eax, [mp3_out2_a0] ; i = 5 ; mp3_out2_a5 equ mp3_out2_a0 3400 00002255 8B5514 mov edx, [ebp+20] 3401 00002258 F7EA imul edx 3402 0000225A 03532C add edx, [ebx+44] 3403 0000225D 899780020000 mov [edi+640], edx 3404 00002263 A1[50290500] mov eax, [mp3_out2_b0] ; mp3_out2_b5 equ mp3_out2_b0 3405 00002268 8B552C mov edx, [ebp+44] 3406 0000226B F7EA imul edx 3407 0000226D 895344 mov [ebx+68], edx ; ENDM 3408 00002270 81C700030000 add edi, 768 ; 6*SBLIMIT*4 3409 00002276 83C604 add esi, 4 ; sb_hybrid 3410 00002279 E864FCFFFF call mp3_imdct12 3411 0000227E A1[44290500] mov eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5 3412 00002283 8B5500 mov edx, [ebp+0] ; @@MULH [edi+i*SBLIMIT*4],[mp3_out2_a&i], 3413 ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(2*6+i)*4] 3414 00002286 F7EA imul edx ; @@MULH [ebx+(0*6+i)*4],[mp3_out2_b&i], 3415 ; -,-,-,-,0,[ebp+(i+6)*4],- 3416 00002288 035330 add edx, [ebx+48] 3417 0000228B 8917 mov [edi], edx 3418 0000228D A1[50290500] mov eax, [mp3_out2_b0] 3419 00002292 8B5518 mov edx, [ebp+18h] 3420 00002295 F7EA imul edx 3421 00002297 8913 mov [ebx], edx 3422 00002299 A1[48290500] mov eax, [mp3_out2_a1] ; i = 1 3423 0000229E 8B5504 mov edx, [ebp+4] 3424 000022A1 F7EA imul edx 3425 000022A3 035334 add edx, [ebx+52] 3426 000022A6 899780000000 mov [edi+128], edx 3427 000022AC A1[54290500] mov eax, [mp3_out2_b1] 3428 000022B1 8B551C mov edx, [ebp+28] 3429 000022B4 F7EA imul edx 3430 000022B6 895304 mov [ebx+4], edx 3431 000022B9 A1[4C290500] mov eax, [mp3_out2_a2] ; i = 2 3432 000022BE 8B5508 mov edx, [ebp+8] 3433 000022C1 F7EA imul edx 3434 000022C3 035338 add edx, [ebx+56] 3435 000022C6 899700010000 mov [edi+256], edx 3436 000022CC A1[58290500] mov eax, [mp3_out2_b2] 3437 000022D1 8B5520 mov edx, [ebp+32] 3438 000022D4 F7EA imul edx 3439 000022D6 895308 mov [ebx+8], edx 3440 000022D9 A1[4C290500] mov eax, [mp3_out2_a2] ; i = 3 3441 000022DE 8B550C mov edx, [ebp+12] 3442 000022E1 F7EA imul edx 3443 000022E3 03533C add edx, [ebx+60] 3444 000022E6 899780010000 mov [edi+384], edx 3445 000022EC A1[58290500] mov eax, [mp3_out2_b2] 3446 000022F1 8B5524 mov edx, [ebp+36] 3447 000022F4 F7EA imul edx 3448 000022F6 89530C mov [ebx+12], edx 3449 000022F9 A1[48290500] mov eax, [mp3_out2_a1] ; i = 4 3450 000022FE 8B5510 mov edx, [ebp+16] 3451 00002301 F7EA imul edx 3452 00002303 035340 add edx, [ebx+64] 3453 00002306 899700020000 mov [edi+512], edx 3454 0000230C A1[54290500] mov eax, [mp3_out2_b1] 3455 00002311 8B5528 mov edx, [ebp+40] 3456 00002314 F7EA imul edx 3457 00002316 895310 mov [ebx+16], edx 3458 00002319 A1[44290500] mov eax, [mp3_out2_a0] ; i = 5 3459 0000231E 8B5514 mov edx, [ebp+20] 3460 00002321 F7EA imul edx 3461 00002323 035344 add edx, [ebx+68] 3462 00002326 899780020000 mov [edi+640], edx 3463 0000232C A1[50290500] mov eax, [mp3_out2_b0] 3464 00002331 8B552C mov edx, [ebp+44] 3465 00002334 F7EA imul edx 3466 00002336 895314 mov [ebx+20], edx ; ENDM 3467 00002339 83C604 add esi, 4 3468 0000233C E8A1FBFFFF call mp3_imdct12 3469 00002341 A1[44290500] mov eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5 3470 00002346 8B5500 mov edx, [ebp+0] ; @@MULH [ebx+(0*6+i)*4],[mp3_out2_a&i], 3471 ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(0*6+i)*4] 3472 00002349 F7EA imul edx 3473 0000234B 0313 add edx, [ebx] 3474 0000234D 8913 mov [ebx], edx 3475 0000234F A1[50290500] mov eax, [mp3_out2_b0] ; @@MULH [ebx+(1*6+i)*4],[mp3_out2_b&i], 3476 ; -,-,-,-,0,[ebp+(i+6)*4],- 3477 00002354 8B5518 mov edx, [ebp+24] 3478 00002357 F7EA imul edx 3479 00002359 895318 mov [ebx+24], edx 3480 0000235C C7433000000000 mov dword [ebx+48], 0 ; [ebx+(2*6+i)*4] 3481 00002363 A1[48290500] mov eax, [mp3_out2_a1] ; i = 1 3482 00002368 8B5504 mov edx, [ebp+4] 3483 0000236B F7EA imul edx 3484 0000236D 035304 add edx, [ebx+4] 3485 00002370 895304 mov [ebx+4], edx 3486 00002373 A1[54290500] mov eax, [mp3_out2_b1] 3487 00002378 8B551C mov edx, [ebp+28] 3488 0000237B F7EA imul edx 3489 0000237D 89531C mov [ebx+28], edx 3490 00002380 C7433400000000 mov dword [ebx+52], 0 ; [ebx+(2*6+i)*4] 3491 00002387 A1[4C290500] mov eax, [mp3_out2_a2] ; i = 2 3492 0000238C 8B5508 mov edx, [ebp+8] 3493 0000238F F7EA imul edx 3494 00002391 035308 add edx, [ebx+8] 3495 00002394 895308 mov [ebx+8], edx 3496 00002397 A1[58290500] mov eax, [mp3_out2_b2] 3497 0000239C 8B5520 mov edx, [ebp+32] 3498 0000239F F7EA imul edx 3499 000023A1 895320 mov [ebx+32], edx 3500 000023A4 C7433800000000 mov dword [ebx+56], 0 3501 000023AB A1[4C290500] mov eax, [mp3_out2_a2] ; i = 3 3502 000023B0 8B550C mov edx, [ebp+12] 3503 000023B3 F7EA imul edx 3504 000023B5 03530C add edx, [ebx+0Ch] 3505 000023B8 89530C mov [ebx+12], edx 3506 000023BB A1[58290500] mov eax, [mp3_out2_b2] 3507 000023C0 8B5524 mov edx, [ebp+36] 3508 000023C3 F7EA imul edx 3509 000023C5 895324 mov [ebx+36], edx 3510 000023C8 C7433C00000000 mov dword [ebx+60], 0 ; [ebx+(2*6+i)*4] 3511 000023CF A1[48290500] mov eax, [mp3_out2_a1] ; i = 4 3512 000023D4 8B5510 mov edx, [ebp+16] 3513 000023D7 F7EA imul edx 3514 000023D9 035310 add edx, [ebx+16] 3515 000023DC 895310 mov [ebx+16], edx 3516 000023DF A1[54290500] mov eax, [mp3_out2_b1] 3517 000023E4 8B5528 mov edx, [ebp+40] 3518 000023E7 F7EA imul edx 3519 000023E9 895328 mov [ebx+40], edx 3520 000023EC C7434000000000 mov dword [ebx+64], 0 3521 000023F3 A1[44290500] mov eax, [mp3_out2_a0] ; i = 5 3522 000023F8 8B5514 mov edx, [ebp+20] 3523 000023FB F7EA imul edx 3524 000023FD 035314 add edx, [ebx+20] 3525 00002400 895314 mov [ebx+20], edx 3526 00002403 A1[50290500] mov eax, [mp3_out2_b0] 3527 00002408 8B552C mov edx, [ebp+44] 3528 0000240B F7EA imul edx 3529 0000240D 89532C mov [ebx+44], edx 3530 00002410 C7434400000000 mov dword [ebx+68], 0 ; [ebx+(2*6+i)*4] 3531 00002417 81C704FAFFFF add edi, -1532 ; (1*4) - (2*6*SBLIMIT*4) ; dst 3532 0000241D 83C640 add esi, 64 ; 18*4 - (2*4) ; sb_hybrid 3533 00002420 83C348 add ebx, 72 ; 18*4 ; mdct_buf 3534 00002423 FF05[64290500] inc dword [_@@@JJJ] ; next 3535 00002429 A1[64290500] mov eax, [_@@@JJJ] 3536 0000242E 3B05[70290500] cmp eax, [_@@sblimit] 3537 00002434 0F8229FDFFFF jb .imdct12_lop 3538 3539 .imdct12_done: 3540 0000243A F605[F0750000]10 test byte [cpuid_flags], 10h 3541 00002441 740E jz short .no_rdtsc_supported@@@@ ; timelog_end rdtsc_imdct12 3542 00002443 0F31 rdtsc 3543 00002445 0105[38770000] add [rdtsc_imdct12], eax 3544 0000244B 1115[3C770000] adc [rdtsc_imdct12+4], edx 3545 3546 .no_rdtsc_supported@@@@: 3547 00002451 F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_imdct0 3548 00002458 740E jz short .no_rdtsc_supported@@@@@ 3549 0000245A 0F31 rdtsc 3550 0000245C 2905[50770000] sub [rdtsc_imdct0], eax 3551 00002462 1915[54770000] sbb [rdtsc_imdct0+4], edx 3552 3553 .no_rdtsc_supported@@@@@: 3554 00002468 833D[64290500]20 cmp dword [_@@@JJJ], 32 ; SBLIMIT 3555 0000246F 0F8333010000 jnb .zero_outer_done 3556 3557 .zero_outer_lop: 3558 00002475 8B03 mov eax, [ebx] ; zero bands 3559 ; IRP nn,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 3560 ; mov eax,dword ptr [ebx+nn*4] 3561 ; mov dword ptr [ebx+nn*4],0 3562 ; mov dword ptr [edi+nn*SBLIMIT*4],eax ; [dst] 3563 ; ENDM 3564 00002477 C70300000000 mov dword [ebx], 0 ; nn = 0 3565 0000247D 8907 mov [edi], eax 3566 0000247F 8B4304 mov eax, [ebx+4] ; nn = 1 3567 00002482 C7430400000000 mov dword [ebx+4], 0 3568 00002489 898780000000 mov [edi+128], eax 3569 0000248F 8B4308 mov eax, [ebx+8] 3570 00002492 C7430800000000 mov dword [ebx+8], 0 3571 00002499 898700010000 mov [edi+256], eax 3572 0000249F 8B430C mov eax, [ebx+12] 3573 000024A2 C7430C00000000 mov dword [ebx+12], 0 3574 000024A9 898780010000 mov [edi+384], eax 3575 000024AF 8B4310 mov eax, [ebx+16] ; nn = 4 3576 000024B2 C7431000000000 mov dword [ebx+16], 0 3577 000024B9 898700020000 mov [edi+512], eax 3578 000024BF 8B4314 mov eax, [ebx+20] 3579 000024C2 C7431400000000 mov dword [ebx+20], 0 3580 000024C9 898780020000 mov [edi+640], eax ; [edi+5*SBLIMIT*4] 3581 000024CF 8B4318 mov eax, [ebx+24] 3582 000024D2 C7431800000000 mov dword [ebx+24], 0 3583 000024D9 898700030000 mov [edi+768], eax 3584 000024DF 8B431C mov eax, [ebx+28] ; nn = 7 3585 000024E2 C7431C00000000 mov dword [ebx+28], 0 3586 000024E9 898780030000 mov [edi+896], eax 3587 000024EF 8B4320 mov eax, [ebx+32] 3588 000024F2 C7432000000000 mov dword [ebx+32], 0 3589 000024F9 898700040000 mov [edi+1024], eax ; [edi+8*SBLIMIT*4] 3590 000024FF 8B4324 mov eax, [ebx+36] 3591 00002502 C7432400000000 mov dword [ebx+36], 0 3592 00002509 898780040000 mov [edi+1152], eax 3593 0000250F 8B4328 mov eax, [ebx+40] 3594 00002512 C7432800000000 mov dword [ebx+40], 0 3595 00002519 898700050000 mov [edi+1280], eax 3596 0000251F 8B432C mov eax, [ebx+44] 3597 00002522 C7432C00000000 mov dword [ebx+44], 0 3598 00002529 898780050000 mov [edi+1408], eax 3599 0000252F 8B4330 mov eax, [ebx+48] 3600 00002532 C7433000000000 mov dword [ebx+48], 0 3601 00002539 898700060000 mov [edi+1536], eax 3602 0000253F 8B4334 mov eax, [ebx+52] 3603 00002542 C7433400000000 mov dword [ebx+52], 0 3604 00002549 898780060000 mov [edi+1664], eax 3605 0000254F 8B4338 mov eax, [ebx+56] 3606 00002552 C7433800000000 mov dword [ebx+56], 0 3607 00002559 898700070000 mov [edi+1792], eax 3608 0000255F 8B433C mov eax, [ebx+60] 3609 00002562 C7433C00000000 mov dword [ebx+60], 0 3610 00002569 898780070000 mov [edi+1920], eax 3611 0000256F 8B4340 mov eax, [ebx+64] 3612 00002572 C7434000000000 mov dword [ebx+64], 0 ; [edi+16*SBLIMIT*4] 3613 00002579 898700080000 mov [edi+2048], eax 3614 0000257F 8B4344 mov eax, [ebx+68] ; nn = 17 3615 00002582 C7434400000000 mov dword [ebx+68], 0 3616 00002589 898780080000 mov [edi+2176], eax ; ENDM 3617 0000258F 83C348 add ebx, 72 ; 18*4 3618 00002592 83C704 add edi, 4 3619 00002595 FF05[64290500] inc dword [_@@@JJJ] 3620 0000259B 833D[64290500]20 cmp dword [_@@@JJJ], 32 3621 000025A2 0F82CDFEFFFF jb .zero_outer_lop 3622 3623 .zero_outer_done: 3624 000025A8 F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_imdct0 3625 000025AF 740E jz short .no_rdtsc_supported@@@@@@ 3626 000025B1 0F31 rdtsc 3627 000025B3 0105[50770000] add [rdtsc_imdct0], eax 3628 000025B9 1115[54770000] adc [rdtsc_imdct0+4], edx 3629 3630 .no_rdtsc_supported@@@@@@: 3631 000025BF 5B pop ebx 3632 000025C0 F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_imdct 3633 000025C7 740E jz short .no_rdtsc_supported@@@@@@@ 3634 000025C9 0F31 rdtsc 3635 000025CB 0105[08770000] add [rdtsc_imdct], eax 3636 000025D1 1115[0C770000] adc [rdtsc_imdct+4], edx 3637 3638 .no_rdtsc_supported@@@@@@@: 3639 000025D7 C3 retn 3640 3641 3642 ; =============== S U B R O U T I N E ======================================= 3643 3644 3645 mp3_dct32_shift_0: 3646 000025D8 8B06 mov eax, [esi] ; mp3_dct32_macro macro rate_shift ; rate_shift = 0 3647 000025DA 8B567C mov edx, [esi+124] ; @@BF macro a,b,sign,cos,shift 3648 ; @@BF 0,31,+,COS0_0,1 3649 ; @@need_a equ (rate_shift EQ 0) or (a LT 16) ; a = 0 3650 ; @@need_b equ (rate_shift EQ 0) or (b LT 16) ; b = 31 3651 ; IF @@need_a AND @@need_b ; rate_shift = 0 3652 ; mov eax,dword ptr [esi+a*4] 3653 ; mov edx,dword ptr [esi+b*4] 3654 ; add dword ptr [esi+a*4],edx 3655 000025DD 0116 add [esi], edx 3656 000025DF 29D0 sub eax, edx 3657 000025E1 D1E0 shl eax, 1 ; shl eax,shift 3658 ; (needed when COS.fraction is less than 32bit) 3659 000025E3 BA51C21340 mov edx, 4013C251h ; sign&&cos ; +COS0_0 = 4013C251h 3660 000025E8 F7EA imul edx 3661 000025EA 89567C mov [esi+124], edx ; [esi+b*4] ; upper 32bit of multiply result 3662 000025ED 8B463C mov eax, [esi+60] ; @@BF 15,16,+,COS0_15,5 3663 ; [esi+a*4] 3664 000025F0 8B5640 mov edx, [esi+64] ; [esi+b*4] 3665 000025F3 01563C add [esi+60], edx ; [esi+a*4] 3666 000025F6 29D0 sub eax, edx 3667 000025F8 C1E005 shl eax, 5 ; shl eax,shift 3668 000025FB BAFB228551 mov edx, 518522FBh ; sign&&cos ; +COS0_15 = 518522FBh 3669 00002600 F7EA imul edx 3670 00002602 895640 mov [esi+64], edx ; [esi+b*4] 3671 00002605 8B06 mov eax, [esi] ; @@BF 0,15,+,COS1_0,1 3672 00002607 8B563C mov edx, [esi+60] 3673 0000260A 0116 add [esi], edx 3674 0000260C 29D0 sub eax, edx 3675 0000260E D1E0 shl eax, 1 3676 00002610 BA72464F40 mov edx, 404F4672h ; +COS1_0 3677 00002615 F7EA imul edx 3678 00002617 89563C mov [esi+60], edx 3679 0000261A 8B4640 mov eax, [esi+64] ; @@BF 16,31,-,COS1_0,1 3680 0000261D 8B567C mov edx, [esi+124] 3681 00002620 015640 add [esi+64], edx 3682 00002623 29D0 sub eax, edx 3683 00002625 D1E0 shl eax, 1 3684 00002627 BA8EB9B0BF mov edx, 0BFB0B98Eh ; -COS1_0 3685 0000262C F7EA imul edx 3686 0000262E 89567C mov [esi+124], edx 3687 00002631 8B461C mov eax, [esi+28] ; @@BF 7,24,+,COS0_7,1 3688 00002634 8B5660 mov edx, [esi+96] 3689 00002637 01561C add [esi+28], edx 3690 0000263A 29D0 sub eax, edx 3691 0000263C D1E0 shl eax, 1 3692 0000263E BAA71E6056 mov edx, 56601EA7h 3693 00002643 F7EA imul edx 3694 00002645 895660 mov [esi+96], edx 3695 00002648 8B4620 mov eax, [esi+32] ; @@BF 8,23,+,COS0_8,1 3696 0000264B 8B565C mov edx, [esi+92] 3697 0000264E 015620 add [esi+32], edx 3698 00002651 29D0 sub eax, edx 3699 00002653 D1E0 shl eax, 1 3700 00002655 BAECF64C5F mov edx, 5F4CF6ECh 3701 0000265A F7EA imul edx 3702 0000265C 89565C mov [esi+92], edx 3703 0000265F 8B461C mov eax, [esi+28] ; @@BF 7,8,+,COS1_7,4 3704 00002662 8B5620 mov edx, [esi+32] 3705 00002665 01561C add [esi+28], edx 3706 00002668 29D0 sub eax, edx 3707 0000266A C1E004 shl eax, 4 3708 0000266D BA044E9E51 mov edx, 519E4E04h 3709 00002672 F7EA imul edx 3710 00002674 895620 mov [esi+32], edx 3711 00002677 8B465C mov eax, [esi+92] ; @@BF 23,24,-,COS1_7,4 3712 0000267A 8B5660 mov edx, [esi+96] 3713 0000267D 01565C add [esi+92], edx 3714 00002680 29D0 sub eax, edx 3715 00002682 C1E004 shl eax, 4 3716 00002685 BAFCB161AE mov edx, 0AE61B1FCh 3717 0000268A F7EA imul edx 3718 0000268C 895660 mov [esi+96], edx 3719 0000268F 8B06 mov eax, [esi] ; @@BF 0,7,+,COS2_0,1 3720 00002691 8B561C mov edx, [esi+28] 3721 00002694 0116 add [esi], edx 3722 00002696 29D0 sub eax, edx 3723 00002698 D1E0 shl eax, 1 3724 0000269A BA46FB4041 mov edx, 4140FB46h 3725 0000269F F7EA imul edx 3726 000026A1 89561C mov [esi+28], edx 3727 000026A4 8B4620 mov eax, [esi+32] ; @@BF 8,15,-,COS2_0,1 3728 000026A7 8B563C mov edx, [esi+60] 3729 000026AA 015620 add [esi+32], edx 3730 000026AD 29D0 sub eax, edx 3731 000026AF D1E0 shl eax, 1 3732 000026B1 BABA04BFBE mov edx, 0BEBF04BAh 3733 000026B6 F7EA imul edx 3734 000026B8 89563C mov [esi+60], edx 3735 000026BB 8B4640 mov eax, [esi+64] ; @@BF 16,23,+,COS2_0,1 3736 000026BE 8B565C mov edx, [esi+92] 3737 000026C1 015640 add [esi+40h], edx 3738 000026C4 29D0 sub eax, edx 3739 000026C6 D1E0 shl eax, 1 3740 000026C8 BA46FB4041 mov edx, 4140FB46h 3741 000026CD F7EA imul edx 3742 000026CF 89565C mov [esi+92], edx 3743 000026D2 8B4660 mov eax, [esi+96] ; @@BF 24,31,-,COS2_0,1 3744 000026D5 8B567C mov edx, [esi+124] 3745 000026D8 015660 add [esi+96], edx 3746 000026DB 29D0 sub eax, edx 3747 000026DD D1E0 shl eax, 1 3748 000026DF BABA04BFBE mov edx, 0BEBF04BAh 3749 000026E4 F7EA imul edx 3750 000026E6 89567C mov [esi+124], edx 3751 000026E9 8B460C mov eax, [esi+12] ; @@BF 3,28,+,COS0_3,1 3752 000026EC 8B5670 mov edx, [esi+112] 3753 000026EF 01560C add [esi+12], edx 3754 000026F2 29D0 sub eax, edx 3755 000026F4 D1E0 shl eax, 1 3756 000026F6 BA2134F943 mov edx, 43F93421h 3757 000026FB F7EA imul edx 3758 000026FD 895670 mov [esi+112], edx 3759 00002700 8B4630 mov eax, [esi+48] ; @@BF 12,19,+,COS0_12,2 3760 00002703 8B564C mov edx, [esi+76] 3761 00002706 015630 add [esi+48], edx 3762 00002709 29D0 sub eax, edx 3763 0000270B C1E002 shl eax, 2 3764 0000270E BA978DFC5E mov edx, 5EFC8D97h 3765 00002713 F7EA imul edx 3766 00002715 89564C mov [esi+76], edx 3767 00002718 8B460C mov eax, [esi+12] ; @@BF 3,12,+,COS1_3,1 3768 0000271B 8B5630 mov edx, [esi+48] 3769 0000271E 01560C add [esi+12], edx 3770 00002721 29D0 sub eax, edx 3771 00002723 D1E0 shl eax, 1 3772 00002725 BA630ECB52 mov edx, 52CB0E63h 3773 0000272A F7EA imul edx 3774 0000272C 895630 mov [esi+48], edx 3775 0000272F 8B464C mov eax, [esi+76] ; @@BF 19,28,-,COS1_3,1 3776 00002732 8B5670 mov edx, [esi+112] 3777 00002735 01564C add [esi+76], edx 3778 00002738 29D0 sub eax, edx 3779 0000273A D1E0 shl eax, 1 3780 0000273C BA9DF134AD mov edx, 0AD34F19Dh 3781 00002741 F7EA imul edx 3782 00002743 895670 mov [esi+112], edx 3783 00002746 8B4610 mov eax, [esi+16] ; @@BF 4,27,+,COS0_4,1 3784 00002749 8B566C mov edx, [esi+108] 3785 0000274C 015610 add [esi+16], edx 3786 0000274F 29D0 sub eax, edx 3787 00002751 D1E0 shl eax, 1 3788 00002753 BAC51BCC46 mov edx, 46CC1BC5h 3789 00002758 F7EA imul edx 3790 0000275A 89566C mov [esi+108], edx 3791 0000275D 8B462C mov eax, [esi+44] ; @@BF 11,20,+,COS0_11,2 3792 00002760 8B5650 mov edx, [esi+80] 3793 00002763 01562C add [esi+44], edx 3794 00002766 29D0 sub eax, edx 3795 00002768 C1E002 shl eax, 2 3796 0000276B BA981AD84A mov edx, 4AD81A98h 3797 00002770 F7EA imul edx 3798 00002772 895650 mov [esi+80], edx 3799 00002775 8B4610 mov eax, [esi+16] ; @@BF 4,11,+,COS1_4,1 3800 00002778 8B562C mov edx, [esi+44] 3801 0000277B 015610 add [esi+16], edx 3802 0000277E 29D0 sub eax, edx 3803 00002780 D1E0 shl eax, 1 3804 00002782 BA2E40E264 mov edx, 64E2402Eh 3805 00002787 F7EA imul edx 3806 00002789 89562C mov [esi+44], edx 3807 0000278C 8B4650 mov eax, [esi+80] ; @@BF 20,27,-,COS1_4,1 3808 0000278F 8B566C mov edx, [esi+108] 3809 00002792 015650 add [esi+80], edx 3810 00002795 29D0 sub eax, edx 3811 00002797 D1E0 shl eax, 1 3812 00002799 BAD2BF1D9B mov edx, 9B1DBFD2h 3813 0000279E F7EA imul edx 3814 000027A0 89566C mov [esi+108], edx 3815 000027A3 8B460C mov eax, [esi+12] ; @@BF 3,4,+,COS2_3,3 3816 000027A6 8B5610 mov edx, [esi+16] 3817 000027A9 01560C add [esi+12], edx 3818 000027AC 29D0 sub eax, edx 3819 000027AE C1E003 shl eax, 3 3820 000027B1 BA42670352 mov edx, 52036742h 3821 000027B6 F7EA imul edx 3822 000027B8 895610 mov [esi+16], edx 3823 000027BB 8B462C mov eax, [esi+44] ; @@BF 11,12,-,COS2_3,3 3824 000027BE 8B5630 mov edx, [esi+48] 3825 000027C1 01562C add [esi+44], edx 3826 000027C4 29D0 sub eax, edx 3827 000027C6 C1E003 shl eax, 3 3828 000027C9 BABE98FCAD mov edx, 0ADFC98BEh ; -COS2_3 3829 000027CE F7EA imul edx 3830 000027D0 895630 mov [esi+48], edx 3831 000027D3 8B464C mov eax, [esi+76] ; @@BF 19,20,+,COS2_3,3 3832 000027D6 8B5650 mov edx, [esi+80] 3833 000027D9 01564C add [esi+4Ch], edx 3834 000027DC 29D0 sub eax, edx 3835 000027DE C1E003 shl eax, 3 3836 000027E1 BA42670352 mov edx, 52036742h ; +COS2_3 3837 000027E6 F7EA imul edx 3838 000027E8 895650 mov [esi+80], edx 3839 000027EB 8B466C mov eax, [esi+108] ; @@BF 27,28,-,COS2_3,3 3840 000027EE 8B5670 mov edx, [esi+112] 3841 000027F1 01566C add [esi+108], edx 3842 000027F4 29D0 sub eax, edx 3843 000027F6 C1E003 shl eax, 3 3844 000027F9 BABE98FCAD mov edx, 0ADFC98BEh 3845 000027FE F7EA imul edx 3846 00002800 895670 mov [esi+112], edx 3847 00002803 8B06 mov eax, [esi] ; @@BF 0,3,+,COS3_0,1 3848 00002805 8B560C mov edx, [esi+12] 3849 00002808 0116 add [esi], edx 3850 0000280A 29D0 sub eax, edx 3851 0000280C D1E0 shl eax, 1 3852 0000280E BAF0E94545 mov edx, 4545E9F0h 3853 00002813 F7EA imul edx 3854 00002815 89560C mov [esi+12], edx 3855 00002818 8B4610 mov eax, [esi+16] ; @@BF 4,7,-,COS3_0,1 3856 0000281B 8B561C mov edx, [esi+28] 3857 0000281E 015610 add [esi+16], edx 3858 00002821 29D0 sub eax, edx 3859 00002823 D1E0 shl eax, 1 3860 00002825 BA1016BABA mov edx, 0BABA1610h 3861 0000282A F7EA imul edx 3862 0000282C 89561C mov [esi+28], edx 3863 0000282F 8B4620 mov eax, [esi+32] ; @@BF 8,11,+,COS3_0,1 3864 00002832 8B562C mov edx, [esi+44] 3865 00002835 015620 add [esi+32], edx 3866 00002838 29D0 sub eax, edx 3867 0000283A D1E0 shl eax, 1 3868 0000283C BAF0E94545 mov edx, 4545E9F0h 3869 00002841 F7EA imul edx 3870 00002843 89562C mov [esi+44], edx 3871 00002846 8B4630 mov eax, [esi+48] ; @@BF 12,15,-,COS3_0,1 3872 00002849 8B563C mov edx, [esi+60] 3873 0000284C 015630 add [esi+48], edx 3874 0000284F 29D0 sub eax, edx 3875 00002851 D1E0 shl eax, 1 3876 00002853 BA1016BABA mov edx, 0BABA1610h 3877 00002858 F7EA imul edx 3878 0000285A 89563C mov [esi+60], edx 3879 0000285D 8B4640 mov eax, [esi+64] ; @@BF 16,19,+,COS3_0,1 3880 00002860 8B564C mov edx, [esi+76] 3881 00002863 015640 add [esi+64], edx 3882 00002866 29D0 sub eax, edx 3883 00002868 D1E0 shl eax, 1 3884 0000286A BAF0E94545 mov edx, 4545E9F0h 3885 0000286F F7EA imul edx 3886 00002871 89564C mov [esi+76], edx 3887 00002874 8B4650 mov eax, [esi+80] ; @@BF 20,23,-,COS3_0,1 3888 00002877 8B565C mov edx, [esi+92] 3889 0000287A 015650 add [esi+80], edx 3890 0000287D 29D0 sub eax, edx 3891 0000287F D1E0 shl eax, 1 3892 00002881 BA1016BABA mov edx, 0BABA1610h ; -COS3_0 3893 00002886 F7EA imul edx 3894 00002888 89565C mov [esi+92], edx 3895 0000288B 8B4660 mov eax, [esi+96] ; @@BF 24,27,+,COS3_0,1 3896 0000288E 8B566C mov edx, [esi+108] 3897 00002891 015660 add [esi+96], edx 3898 00002894 29D0 sub eax, edx 3899 00002896 D1E0 shl eax, 1 3900 00002898 BAF0E94545 mov edx, 4545E9F0h ; +COS3_0 3901 0000289D F7EA imul edx 3902 0000289F 89566C mov [esi+108], edx 3903 000028A2 8B4670 mov eax, [esi+112] ; @@BF 28,31,-,COS3_0,1 3904 000028A5 8B567C mov edx, [esi+124] 3905 000028A8 015670 add [esi+112], edx 3906 000028AB 29D0 sub eax, edx 3907 000028AD D1E0 shl eax, 1 3908 000028AF BA1016BABA mov edx, 0BABA1610h 3909 000028B4 F7EA imul edx 3910 000028B6 89567C mov [esi+124], edx 3911 000028B9 8B4604 mov eax, [esi+4] ; @@BF 1,30,+,COS0_1,1 3912 000028BC 8B5678 mov edx, [esi+120] 3913 000028BF 015604 add [esi+4], edx 3914 000028C2 29D0 sub eax, edx 3915 000028C4 D1E0 shl eax, 1 3916 000028C6 BABD45B340 mov edx, 40B345BDh 3917 000028CB F7EA imul edx 3918 000028CD 895678 mov [esi+120], edx 3919 000028D0 8B4638 mov eax, [esi+56] ; @@BF 14,17,+,COS0_14,3 3920 000028D3 8B5644 mov edx, [esi+68] 3921 000028D6 015638 add [esi+56], edx 3922 000028D9 29D0 sub eax, edx 3923 000028DB C1E003 shl eax, 3 3924 000028DE BAD0200B6D mov edx, 6D0B20D0h 3925 000028E3 F7EA imul edx 3926 000028E5 895644 mov [esi+68], edx 3927 000028E8 8B4604 mov eax, [esi+4] ; @@BF 1,14,+,COS1_1,1 3928 000028EB 8B5638 mov edx, [esi+56] 3929 000028EE 015604 add [esi+4], edx 3930 000028F1 29D0 sub eax, edx 3931 000028F3 D1E0 shl eax, 1 3932 000028F5 BA103CE142 mov edx, 42E13C10h 3933 000028FA F7EA imul edx 3934 000028FC 895638 mov [esi+56], edx 3935 000028FF 8B4644 mov eax, [esi+68] ; @@BF 17,30,-,COS1_1,1 3936 00002902 8B5678 mov edx, [esi+120] 3937 00002905 015644 add [esi+68], edx 3938 00002908 29D0 sub eax, edx 3939 0000290A D1E0 shl eax, 1 3940 0000290C BAF0C31EBD mov edx, 0BD1EC3F0h 3941 00002911 F7EA imul edx 3942 00002913 895678 mov [esi+120], edx 3943 00002916 8B4618 mov eax, [esi+24] ; @@BF 6,25,+,COS0_6,1 3944 00002919 8B5664 mov edx, [esi+100] 3945 0000291C 015618 add [esi+24], edx 3946 0000291F 29D0 sub eax, edx 3947 00002921 D1E0 shl eax, 1 3948 00002923 BA1237AE4F mov edx, 4FAE3712h 3949 00002928 F7EA imul edx 3950 0000292A 895664 mov [esi+100], edx 3951 0000292D 8B4624 mov eax, [esi+36] ; @@BF 9,22,+,COS0_9,1 3952 00002930 8B5658 mov edx, [esi+88] 3953 00002933 015624 add [esi+36], edx 3954 00002936 29D0 sub eax, edx 3955 00002938 D1E0 shl eax, 1 3956 0000293A BA27CF6F6B mov edx, 6B6FCF27h 3957 0000293F F7EA imul edx 3958 00002941 895658 mov [esi+88], edx 3959 00002944 8B4618 mov eax, [esi+24] ; @@BF 6, 9,+,COS1_6,2 3960 00002947 8B5624 mov edx, [esi+36] 3961 0000294A 015618 add [esi+24], edx 3962 0000294D 29D0 sub eax, edx 3963 0000294F C1E002 shl eax, 2 3964 00002952 BAC2923C6E mov edx, 6E3C92C2h 3965 00002957 F7EA imul edx 3966 00002959 895624 mov [esi+36], edx 3967 0000295C 8B4658 mov eax, [esi+88] ; @@BF 22,25,-,COS1_6,2 3968 0000295F 8B5664 mov edx, [esi+100] 3969 00002962 015658 add [esi+88], edx 3970 00002965 29D0 sub eax, edx 3971 00002967 C1E002 shl eax, 2 3972 0000296A BA3E6DC391 mov edx, 91C36D3Eh 3973 0000296F F7EA imul edx 3974 00002971 895664 mov [esi+100], edx 3975 00002974 8B4604 mov eax, [esi+4] ; @@BF 1, 6,+,COS2_1,1 3976 00002977 8B5618 mov edx, [esi+24] 3977 0000297A 015604 add [esi+4], edx 3978 0000297D 29D0 sub eax, edx 3979 0000297F D1E0 shl eax, 1 3980 00002981 BA88DEF84C mov edx, 4CF8DE88h 3981 00002986 F7EA imul edx 3982 00002988 895618 mov [esi+24], edx 3983 0000298B 8B4624 mov eax, [esi+36] ; @@BF 9,14,-,COS2_1,1 3984 0000298E 8B5638 mov edx, [esi+56] 3985 00002991 015624 add [esi+36], edx 3986 00002994 29D0 sub eax, edx 3987 00002996 D1E0 shl eax, 1 3988 00002998 BA782107B3 mov edx, 0B3072178h 3989 0000299D F7EA imul edx 3990 0000299F 895638 mov [esi+56], edx 3991 000029A2 8B4644 mov eax, [esi+68] ; @@BF 17,22,+,COS2_1,1 3992 000029A5 8B5658 mov edx, [esi+88] 3993 000029A8 015644 add [esi+68], edx 3994 000029AB 29D0 sub eax, edx 3995 000029AD D1E0 shl eax, 1 3996 000029AF BA88DEF84C mov edx, 4CF8DE88h 3997 000029B4 F7EA imul edx 3998 000029B6 895658 mov [esi+88], edx 3999 000029B9 8B4664 mov eax, [esi+100] ; @@BF 25,30,-,COS2_1,1 4000 000029BC 8B5678 mov edx, [esi+120] 4001 000029BF 015664 add [esi+100], edx 4002 000029C2 29D0 sub eax, edx 4003 000029C4 D1E0 shl eax, 1 4004 000029C6 BA782107B3 mov edx, 0B3072178h 4005 000029CB F7EA imul edx 4006 000029CD 895678 mov [esi+120], edx 4007 000029D0 8B4608 mov eax, [esi+8] ; @@BF 2,29,+,COS0_2,1 4008 000029D3 8B5674 mov edx, [esi+116] 4009 000029D6 015608 add [esi+8], edx 4010 000029D9 29D0 sub eax, edx 4011 000029DB D1E0 shl eax, 1 4012 000029DD BA6E2DFA41 mov edx, 41FA2D6Eh 4013 000029E2 F7EA imul edx 4014 000029E4 895674 mov [esi+116], edx 4015 000029E7 8B4634 mov eax, [esi+52] ; @@BF 13,18,+,COS0_13,3 4016 000029EA 8B5648 mov edx, [esi+72] 4017 000029ED 015634 add [esi+52], edx 4018 000029F0 29D0 sub eax, edx 4019 000029F2 C1E003 shl eax, 3 4020 000029F5 BA9057D941 mov edx, 41D95790h 4021 000029FA F7EA imul edx 4022 000029FC 895648 mov [esi+72], edx 4023 000029FF 8B4608 mov eax, [esi+8] ; @@BF 2,13,+,COS1_2,1 4024 00002A02 8B5634 mov edx, [esi+52] 4025 00002A05 015608 add [esi+8], edx 4026 00002A08 29D0 sub eax, edx 4027 00002A0A D1E0 shl eax, 1 4028 00002A0C BA459F9148 mov edx, 48919F45h 4029 00002A11 F7EA imul edx 4030 00002A13 895634 mov [esi+52], edx 4031 00002A16 8B4648 mov eax, [esi+72] ; @@BF 18,29,-,COS1_2,1 4032 00002A19 8B5674 mov edx, [esi+116] 4033 00002A1C 015648 add [esi+72], edx 4034 00002A1F 29D0 sub eax, edx 4035 00002A21 D1E0 shl eax, 1 4036 00002A23 BABB606EB7 mov edx, 0B76E60BBh 4037 00002A28 F7EA imul edx 4038 00002A2A 895674 mov [esi+116], edx 4039 00002A2D 8B4614 mov eax, [esi+20] ; @@BF 5,26,+,COS0_5,1 4040 00002A30 8B5668 mov edx, [esi+104] 4041 00002A33 015614 add [esi+20], edx 4042 00002A36 29D0 sub eax, edx 4043 00002A38 D1E0 shl eax, 1 4044 00002A3A BAF19C9D4A mov edx, 4A9D9CF1h 4045 00002A3F F7EA imul edx 4046 00002A41 895668 mov [esi+104], edx 4047 00002A44 8B4628 mov eax, [esi+40] ; @@BF 10,21,+,COS0_10,1 4048 00002A47 8B5654 mov edx, [esi+84] 4049 00002A4A 015628 add [esi+40], edx 4050 00002A4D 29D0 sub eax, edx 4051 00002A4F D1E0 shl eax, 1 4052 00002A51 BAB41D7D7C mov edx, 7C7D1DB4h 4053 00002A56 F7EA imul edx 4054 00002A58 895654 mov [esi+84], edx 4055 00002A5B 8B4614 mov eax, [esi+20] ; @@BF 5,10,+,COS1_5,2 4056 00002A5E 8B5628 mov edx, [esi+40] 4057 00002A61 015614 add [esi+20], edx 4058 00002A64 29D0 sub eax, edx 4059 00002A66 C1E002 shl eax, 2 4060 00002A69 BAAA24E243 mov edx, 43E224AAh 4061 00002A6E F7EA imul edx 4062 00002A70 895628 mov [esi+40], edx 4063 00002A73 8B4654 mov eax, [esi+84] ; @@BF 21,26,-,COS1_5,2 4064 00002A76 8B5668 mov edx, [esi+104] 4065 00002A79 015654 add [esi+84], edx 4066 00002A7C 29D0 sub eax, edx 4067 00002A7E C1E002 shl eax, 2 4068 00002A81 BA56DB1DBC mov edx, 0BC1DDB56h 4069 00002A86 F7EA imul edx 4070 00002A88 895668 mov [esi+104], edx 4071 00002A8B 8B4608 mov eax, [esi+8] ; @@BF 2,5,+,COS2_2,1 4072 00002A8E 8B5614 mov edx, [esi+20] 4073 00002A91 015608 add [esi+8], edx 4074 00002A94 29D0 sub eax, edx 4075 00002A96 D1E0 shl eax, 1 4076 00002A98 BABF6B3273 mov edx, 73326BBFh ; +COS2_2 4077 00002A9D F7EA imul edx 4078 00002A9F 895614 mov [esi+20], edx 4079 00002AA2 8B4628 mov eax, [esi+40] ; @@BF 10,13,-,COS2_2,1 4080 00002AA5 8B5634 mov edx, [esi+52] 4081 00002AA8 015628 add [esi+40], edx 4082 00002AAB 29D0 sub eax, edx 4083 00002AAD D1E0 shl eax, 1 4084 00002AAF BA4194CD8C mov edx, 8CCD9441h ; -COS2_2 4085 00002AB4 F7EA imul edx 4086 00002AB6 895634 mov [esi+52], edx 4087 00002AB9 8B4648 mov eax, [esi+72] ; @@BF 18,21,+,COS2_2,1 4088 00002ABC 8B5654 mov edx, [esi+84] 4089 00002ABF 015648 add [esi+72], edx 4090 00002AC2 29D0 sub eax, edx 4091 00002AC4 D1E0 shl eax, 1 4092 00002AC6 BABF6B3273 mov edx, 73326BBFh 4093 00002ACB F7EA imul edx 4094 00002ACD 895654 mov [esi+84], edx 4095 00002AD0 8B4668 mov eax, [esi+104] ; @@BF 26,29,-,COS2_2,1 4096 00002AD3 8B5674 mov edx, [esi+116] 4097 00002AD6 015668 add [esi+104], edx 4098 00002AD9 29D0 sub eax, edx 4099 00002ADB D1E0 shl eax, 1 4100 00002ADD BA4194CD8C mov edx, 8CCD9441h 4101 00002AE2 F7EA imul edx 4102 00002AE4 895674 mov [esi+116], edx 4103 00002AE7 8B4604 mov eax, [esi+4] ; @@BF 1,2,+,COS3_1,2 4104 00002AEA 8B5608 mov edx, [esi+8] 4105 00002AED 015604 add [esi+4], edx 4106 00002AF0 29D0 sub eax, edx 4107 00002AF2 C1E002 shl eax, 2 4108 00002AF5 BA46BA9E53 mov edx, 539EBA46h 4109 00002AFA F7EA imul edx 4110 00002AFC 895608 mov [esi+8], edx 4111 00002AFF 8B4614 mov eax, [esi+20] ; @@BF 5,6,-,COS3_1,2 4112 00002B02 8B5618 mov edx, [esi+24] 4113 00002B05 015614 add [esi+20], edx 4114 00002B08 29D0 sub eax, edx 4115 00002B0A C1E002 shl eax, 2 4116 00002B0D BABA4561AC mov edx, 0AC6145BAh 4117 00002B12 F7EA imul edx 4118 00002B14 895618 mov [esi+24], edx 4119 00002B17 8B4624 mov eax, [esi+36] ; IF rate_shift LT 2 4120 ; @@BF 9,10,+,COS3_1,2 4121 00002B1A 8B5628 mov edx, [esi+40] 4122 00002B1D 015624 add [esi+36], edx 4123 00002B20 29D0 sub eax, edx 4124 00002B22 C1E002 shl eax, 2 4125 00002B25 BA46BA9E53 mov edx, 539EBA46h 4126 00002B2A F7EA imul edx 4127 00002B2C 895628 mov [esi+40], edx 4128 00002B2F 8B4634 mov eax, [esi+52] ; @@BF 13,14,-,COS3_1,2 4129 00002B32 8B5638 mov edx, [esi+56] 4130 00002B35 015634 add [esi+52], edx 4131 00002B38 29D0 sub eax, edx 4132 00002B3A C1E002 shl eax, 2 4133 00002B3D BABA4561AC mov edx, 0AC6145BAh 4134 00002B42 F7EA imul edx 4135 00002B44 895638 mov [esi+56], edx ; ENDIF 4136 00002B47 8B4644 mov eax, [esi+68] ; @@BF 17,18,+,COS3_1,2 4137 00002B4A 8B5648 mov edx, [esi+72] 4138 00002B4D 015644 add [esi+68], edx 4139 00002B50 29D0 sub eax, edx 4140 00002B52 C1E002 shl eax, 2 4141 00002B55 BA46BA9E53 mov edx, 539EBA46h 4142 00002B5A F7EA imul edx 4143 00002B5C 895648 mov [esi+72], edx 4144 00002B5F 8B4654 mov eax, [esi+84] ; @@BF 21,22,-,COS3_1,2 4145 00002B62 8B5658 mov edx, [esi+88] 4146 00002B65 015654 add [esi+84], edx 4147 00002B68 29D0 sub eax, edx 4148 00002B6A C1E002 shl eax, 2 4149 00002B6D BABA4561AC mov edx, 0AC6145BAh 4150 00002B72 F7EA imul edx 4151 00002B74 895658 mov [esi+88], edx 4152 00002B77 8B4664 mov eax, [esi+100] ; @@BF 25,26,+,COS3_1,2 4153 00002B7A 8B5668 mov edx, [esi+104] 4154 00002B7D 015664 add [esi+100], edx 4155 00002B80 29D0 sub eax, edx 4156 00002B82 C1E002 shl eax, 2 4157 00002B85 BA46BA9E53 mov edx, 539EBA46h 4158 00002B8A F7EA imul edx 4159 00002B8C 895668 mov [esi+104], edx 4160 00002B8F 8B4674 mov eax, [esi+116] ; @@BF 29,30,-,COS3_1,2 4161 00002B92 8B5678 mov edx, [esi+120] 4162 00002B95 015674 add [esi+116], edx 4163 00002B98 29D0 sub eax, edx 4164 00002B9A C1E002 shl eax, 2 4165 00002B9D BABA4561AC mov edx, 0AC6145BAh 4166 00002BA2 F7EA imul edx 4167 00002BA4 895678 mov [esi+120], edx 4168 00002BA7 8B06 mov eax, [esi] ; @@BF1 macro a, b, c, d 4169 ; @@BF a, b,+,COS4_0, 1 4170 ; @@BF c, d,-,COS4_0, 1 4171 ; @@ADD c, d 4172 ; endm 4173 ; @@BF1 0,1,2,3 4174 00002BA9 8B5604 mov edx, [esi+4] ; @@BF 0,1,+,COS4_0,1 4175 00002BAC 0116 add [esi], edx 4176 00002BAE 29D0 sub eax, edx 4177 00002BB0 D1E0 shl eax, 1 4178 00002BB2 BA9A79825A mov edx, 5A82799Ah ; +COS4_0 4179 00002BB7 F7EA imul edx 4180 00002BB9 895604 mov [esi+4], edx 4181 00002BBC 8B4608 mov eax, [esi+8] ; @@BF 2,3,-,COS4_0,1 4182 00002BBF 8B560C mov edx, [esi+12] 4183 00002BC2 015608 add [esi+8], edx 4184 00002BC5 29D0 sub eax, edx 4185 00002BC7 D1E0 shl eax, 1 4186 00002BC9 BA66867DA5 mov edx, 0A57D8666h ; -COS4_0 4187 00002BCE F7EA imul edx 4188 00002BD0 89560C mov [esi+12], edx 4189 00002BD3 8B460C mov eax, [esi+12] ; @@ADD 2,3 4190 00002BD6 014608 add [esi+8], eax 4191 00002BD9 8B4610 mov eax, [esi+16] ; @@BF2 macro a, b, c, d 4192 ; @@BF a, b,+,COS4_0, 1 4193 ; @@BF c, d,-,COS4_0, 1 4194 ; @@ADD c, d 4195 ; @@ADD a, c 4196 ; @@ADD c, b 4197 ; @@ADD b, d 4198 ; endm 4199 ; @@BF2 4,5,6,7 4200 00002BDC 8B5614 mov edx, [esi+20] ; @@BF 4,5,+,COS4_0,1 4201 00002BDF 015610 add [esi+16], edx 4202 00002BE2 29D0 sub eax, edx 4203 00002BE4 D1E0 shl eax, 1 4204 00002BE6 BA9A79825A mov edx, 5A82799Ah 4205 00002BEB F7EA imul edx 4206 00002BED 895614 mov [esi+20], edx 4207 00002BF0 8B4618 mov eax, [esi+24] ; @@BF 6,7,-,COS4_0,1 4208 00002BF3 8B561C mov edx, [esi+28] 4209 00002BF6 015618 add [esi+24], edx 4210 00002BF9 29D0 sub eax, edx 4211 00002BFB D1E0 shl eax, 1 4212 00002BFD BA66867DA5 mov edx, 0A57D8666h 4213 00002C02 F7EA imul edx 4214 00002C04 89561C mov [esi+28], edx 4215 00002C07 8B461C mov eax, [esi+28] ; @@ADD macro dst,src 4216 ; IF (rate_shift EQ 0) or (dst LT 16) 4217 ; ;tab[a] += tab[b] 4218 ; mov eax,dword ptr [esi+src*4] 4219 ; add dword ptr [esi+dst*4],eax 4220 ; ENDIF 4221 ; endm 4222 ; @@ADD 6,7 4223 00002C0A 014618 add [esi+24], eax 4224 00002C0D 8B4618 mov eax, [esi+24] ; @@ADD 4,6 4225 00002C10 014610 add [esi+16], eax 4226 00002C13 8B4614 mov eax, [esi+20] ; @@ADD 6,5 4227 00002C16 014618 add [esi+24], eax 4228 00002C19 8B461C mov eax, [esi+28] ; @@ADD 5,7 4229 00002C1C 014614 add [esi+20], eax 4230 00002C1F 8B4620 mov eax, [esi+32] ; IF rate_shift LT 2 4231 ; @@BF1 8,9,10,11 4232 00002C22 8B5624 mov edx, [esi+36] ; @@BF 8,9,+,COS4_0,1 4233 00002C25 015620 add [esi+32], edx 4234 00002C28 29D0 sub eax, edx 4235 00002C2A D1E0 shl eax, 1 4236 00002C2C BA9A79825A mov edx, 5A82799Ah 4237 00002C31 F7EA imul edx 4238 00002C33 895624 mov [esi+36], edx 4239 00002C36 8B4628 mov eax, [esi+40] ; @@BF 10,11,-,COS4_0,1 4240 00002C39 8B562C mov edx, [esi+44] 4241 00002C3C 015628 add [esi+40], edx 4242 00002C3F 29D0 sub eax, edx 4243 00002C41 D1E0 shl eax, 1 4244 00002C43 BA66867DA5 mov edx, 0A57D8666h 4245 00002C48 F7EA imul edx 4246 00002C4A 89562C mov [esi+44], edx 4247 00002C4D 8B462C mov eax, [esi+44] ; @@ADD 10,11 4248 00002C50 014628 add [esi+40], eax 4249 00002C53 8B4630 mov eax, [esi+48] ; @@BF2 12,13,14,15 4250 00002C56 8B5634 mov edx, [esi+52] ; @@BF 12,13,+,COS4_0,1 4251 00002C59 015630 add [esi+48], edx 4252 00002C5C 29D0 sub eax, edx 4253 00002C5E D1E0 shl eax, 1 4254 00002C60 BA9A79825A mov edx, 5A82799Ah 4255 00002C65 F7EA imul edx 4256 00002C67 895634 mov [esi+52], edx 4257 00002C6A 8B4638 mov eax, [esi+56] ; @@BF 14,15,-,COS4_0,1 4258 00002C6D 8B563C mov edx, [esi+60] 4259 00002C70 015638 add [esi+56], edx 4260 00002C73 29D0 sub eax, edx 4261 00002C75 D1E0 shl eax, 1 4262 00002C77 BA66867DA5 mov edx, 0A57D8666h 4263 00002C7C F7EA imul edx 4264 00002C7E 89563C mov [esi+60], edx 4265 00002C81 8B463C mov eax, [esi+60] ; @@ADD 14,15 4266 00002C84 014638 add [esi+56], eax 4267 00002C87 8B4638 mov eax, [esi+56] ; @@ADD 12,14 4268 00002C8A 014630 add [esi+48], eax 4269 00002C8D 8B4634 mov eax, [esi+52] ; @@ADD 14,13 4270 00002C90 014638 add [esi+56], eax 4271 00002C93 8B463C mov eax, [esi+60] ; @@ADD 13,15 4272 00002C96 014634 add [esi+52], eax ; ENDIF 4273 00002C99 8B4640 mov eax, [esi+64] ; @@BF1 16,17,18,19 4274 00002C9C 8B5644 mov edx, [esi+68] 4275 00002C9F 015640 add [esi+64], edx 4276 00002CA2 29D0 sub eax, edx 4277 00002CA4 D1E0 shl eax, 1 4278 00002CA6 BA9A79825A mov edx, 5A82799Ah ; +COS4_0 4279 00002CAB F7EA imul edx 4280 00002CAD 895644 mov [esi+68], edx 4281 00002CB0 8B4648 mov eax, [esi+72] 4282 00002CB3 8B564C mov edx, [esi+76] 4283 00002CB6 015648 add [esi+72], edx 4284 00002CB9 29D0 sub eax, edx 4285 00002CBB D1E0 shl eax, 1 4286 00002CBD BA66867DA5 mov edx, 0A57D8666h ; -COS4_0 4287 00002CC2 F7EA imul edx 4288 00002CC4 89564C mov [esi+76], edx 4289 00002CC7 8B464C mov eax, [esi+76] ; @@ADD 18,19 4290 00002CCA 014648 add [esi+72], eax 4291 00002CCD 8B4650 mov eax, [esi+80] ; @@BF2 20,21,22,23 4292 00002CD0 8B5654 mov edx, [esi+84] 4293 00002CD3 015650 add [esi+80], edx 4294 00002CD6 29D0 sub eax, edx 4295 00002CD8 D1E0 shl eax, 1 4296 00002CDA BA9A79825A mov edx, 5A82799Ah 4297 00002CDF F7EA imul edx 4298 00002CE1 895654 mov [esi+84], edx 4299 00002CE4 8B4658 mov eax, [esi+88] 4300 00002CE7 8B565C mov edx, [esi+92] 4301 00002CEA 015658 add [esi+88], edx 4302 00002CED 29D0 sub eax, edx 4303 00002CEF D1E0 shl eax, 1 4304 00002CF1 BA66867DA5 mov edx, 0A57D8666h 4305 00002CF6 F7EA imul edx 4306 00002CF8 89565C mov [esi+92], edx 4307 00002CFB 8B465C mov eax, [esi+92] ; @@ADD 22,23 4308 00002CFE 014658 add [esi+88], eax 4309 00002D01 8B4658 mov eax, [esi+88] ; @@ADD 20,22 4310 00002D04 014650 add [esi+80], eax 4311 00002D07 8B4654 mov eax, [esi+84] 4312 00002D0A 014658 add [esi+88], eax 4313 00002D0D 8B465C mov eax, [esi+92] 4314 00002D10 014654 add [esi+84], eax 4315 00002D13 8B4660 mov eax, [esi+96] ; @@BF1 24,25,26,27 4316 00002D16 8B5664 mov edx, [esi+100] 4317 00002D19 015660 add [esi+96], edx 4318 00002D1C 29D0 sub eax, edx 4319 00002D1E D1E0 shl eax, 1 4320 00002D20 BA9A79825A mov edx, 5A82799Ah 4321 00002D25 F7EA imul edx 4322 00002D27 895664 mov [esi+100], edx 4323 00002D2A 8B4668 mov eax, [esi+104] 4324 00002D2D 8B566C mov edx, [esi+108] 4325 00002D30 015668 add [esi+104], edx 4326 00002D33 29D0 sub eax, edx 4327 00002D35 D1E0 shl eax, 1 4328 00002D37 BA66867DA5 mov edx, 0A57D8666h 4329 00002D3C F7EA imul edx 4330 00002D3E 89566C mov [esi+108], edx 4331 00002D41 8B466C mov eax, [esi+108] 4332 00002D44 014668 add [esi+104], eax 4333 00002D47 8B4670 mov eax, [esi+112] ; @@BF2 28,29,30,31 4334 00002D4A 8B5674 mov edx, [esi+116] 4335 00002D4D 015670 add [esi+112], edx 4336 00002D50 29D0 sub eax, edx 4337 00002D52 D1E0 shl eax, 1 4338 00002D54 BA9A79825A mov edx, 5A82799Ah 4339 00002D59 F7EA imul edx 4340 00002D5B 895674 mov [esi+116], edx 4341 00002D5E 8B4678 mov eax, [esi+120] 4342 00002D61 8B567C mov edx, [esi+124] 4343 00002D64 015678 add [esi+120], edx 4344 00002D67 29D0 sub eax, edx 4345 00002D69 D1E0 shl eax, 1 4346 00002D6B BA66867DA5 mov edx, 0A57D8666h 4347 00002D70 F7EA imul edx 4348 00002D72 89567C mov [esi+124], edx 4349 00002D75 8B467C mov eax, [esi+124] 4350 00002D78 014678 add [esi+120], eax 4351 00002D7B 8B4678 mov eax, [esi+120] 4352 00002D7E 014670 add [esi+112], eax 4353 00002D81 8B4674 mov eax, [esi+116] 4354 00002D84 014678 add [esi+120], eax 4355 00002D87 8B467C mov eax, [esi+124] 4356 00002D8A 014674 add [esi+116], eax 4357 00002D8D 8B06 mov eax, [esi] ; @@OUT macro dst,src1,src2 4358 ; IF ((dst AND ((1 SHL rate_shift)-1)) EQ 0) 4359 ; mov eax,dword ptr [esi+src1*4] 4360 ; IFDIFI ,<-> 4361 ; add eax,dword ptr [esi+src2*4] 4362 ; ENDIF 4363 ; IF SYNTH32 4364 ; mov dword ptr [edi+dst*4],eax 4365 ; IF (LONG_WINDOW EQ 0) 4366 ; mov dword ptr [edi+dst*4+512*4],eax 4367 ; ENDIF 4368 ; ELSE 4369 ; ...... 4370 ; ENDIF 4371 ; @@OUT 0,0,- 4372 00002D8F 8907 mov [edi], eax ; mov dword ptr [edi+dst*4],eax 4373 00002D91 8B4604 mov eax, [esi+4] ; @@OUT 16,1, - 4374 ; mov eax,dword ptr [esi+src1*4] 4375 00002D94 894740 mov [edi+64], eax ; mov dword ptr [edi+dst*4],eax 4376 00002D97 8B4608 mov eax, [esi+8] ; @@OUT 8,2,- 4377 00002D9A 894720 mov [edi+32], eax 4378 00002D9D 8B460C mov eax, [esi+12] ; @@OUT 24,3,- 4379 00002DA0 894760 mov [edi+96], eax 4380 00002DA3 8B4610 mov eax, [esi+16] ; @@OUT 4,4,- 4381 00002DA6 894710 mov [edi+16], eax 4382 00002DA9 8B4614 mov eax, [esi+20] ; @@OUT 20,5,- 4383 00002DAC 894750 mov [edi+80], eax 4384 00002DAF 8B4618 mov eax, [esi+24] ; @@OUT 12,6,- 4385 00002DB2 894730 mov [edi+48], eax 4386 00002DB5 8B461C mov eax, [esi+28] ; @@OUT 28,7,- 4387 00002DB8 894770 mov [edi+112], eax 4388 00002DBB 8B4620 mov eax, [esi+32] ; @@OUT 2,8,12 4389 00002DBE 034630 add eax, [esi+48] ; add eax,dword ptr [esi+src2*4] 4390 00002DC1 894708 mov [edi+8], eax 4391 00002DC4 8B4624 mov eax, [esi+36] ; @@OUT 18,9,13 4392 00002DC7 034634 add eax, [esi+52] ; add eax,dword ptr [esi+src2*4] 4393 00002DCA 894748 mov [edi+72], eax 4394 00002DCD 8B4628 mov eax, [esi+40] ; @@OUT 10,10,14 4395 00002DD0 034638 add eax, [esi+56] 4396 00002DD3 894728 mov [edi+40], eax 4397 00002DD6 8B462C mov eax, [esi+44] ; @@OUT 26,11,15 4398 00002DD9 03463C add eax, [esi+60] 4399 00002DDC 894768 mov [edi+104], eax 4400 00002DDF 8B4630 mov eax, [esi+48] ; @@OUT 6,12,10 4401 00002DE2 034628 add eax, [esi+40] 4402 00002DE5 894718 mov [edi+24], eax 4403 00002DE8 8B4634 mov eax, [esi+52] ; @@OUT 22,13,11 4404 00002DEB 03462C add eax, [esi+44] 4405 00002DEE 894758 mov [edi+88], eax 4406 00002DF1 8B4638 mov eax, [esi+56] ; @@OUT 14,14,9 4407 00002DF4 034624 add eax, [esi+36] 4408 00002DF7 894738 mov [edi+56], eax 4409 00002DFA 8B463C mov eax, [esi+60] ; @@OUT 30,15,- 4410 00002DFD 894778 mov [edi+120], eax 4411 00002E00 8B4670 mov eax, [esi+112] ; @@ADD 24,28 4412 00002E03 014660 add [esi+96], eax 4413 00002E06 8B4668 mov eax, [esi+104] ; @@ADD 28,26 4414 00002E09 014670 add [esi+112], eax 4415 00002E0C 8B4678 mov eax, [esi+120] ; @@ADD 26,30 4416 00002E0F 014668 add [esi+104], eax 4417 00002E12 8B4664 mov eax, [esi+100] ; @@ADD 30,25 4418 00002E15 014678 add [esi+120], eax 4419 00002E18 8B4674 mov eax, [esi+116] ; @@ADD 25,29 4420 00002E1B 014664 add [esi+100], eax 4421 00002E1E 8B466C mov eax, [esi+108] ; @@ADD 29,27 4422 00002E21 014674 add [esi+116], eax 4423 00002E24 8B467C mov eax, [esi+124] ; @@ADD 27,31 4424 00002E27 01466C add [esi+108], eax 4425 00002E2A 8B4640 mov eax, [esi+64] ; @@OUT 1,16,24 4426 00002E2D 034660 add eax, [esi+96] 4427 00002E30 894704 mov [edi+4], eax 4428 00002E33 8B4644 mov eax, [esi+68] ; @@OUT 17,17,25 4429 00002E36 034664 add eax, [esi+100] 4430 00002E39 894744 mov [edi+68], eax 4431 00002E3C 8B4648 mov eax, [esi+72] ; @@OUT 9,18,26 4432 00002E3F 034668 add eax, [esi+104] 4433 00002E42 894724 mov [edi+36], eax 4434 00002E45 8B464C mov eax, [esi+76] ; @@OUT 25,19,27 4435 00002E48 03466C add eax, [esi+108] 4436 00002E4B 894764 mov [edi+100], eax 4437 00002E4E 8B4650 mov eax, [esi+80] ; @@OUT 5,20,28 4438 00002E51 034670 add eax, [esi+112] 4439 00002E54 894714 mov [edi+20], eax 4440 00002E57 8B4654 mov eax, [esi+84] ; @@OUT 21,21,29 4441 00002E5A 034674 add eax, [esi+116] 4442 00002E5D 894754 mov [edi+84], eax 4443 00002E60 8B4658 mov eax, [esi+88] ; @@OUT 13,22,30 4444 00002E63 034678 add eax, [esi+120] 4445 00002E66 894734 mov [edi+52], eax 4446 00002E69 8B465C mov eax, [esi+92] ; @@OUT 29,23,31 4447 00002E6C 03467C add eax, [esi+124] 4448 00002E6F 894774 mov [edi+116], eax 4449 00002E72 8B4660 mov eax, [esi+96] ; @@OUT 3,24,20 4450 00002E75 034650 add eax, [esi+80] 4451 00002E78 89470C mov [edi+12], eax 4452 00002E7B 8B4664 mov eax, [esi+100] ; @@OUT 19,25,21 4453 00002E7E 034654 add eax, [esi+84] 4454 00002E81 89474C mov [edi+76], eax 4455 00002E84 8B4668 mov eax, [esi+104] ; @@OUT 11,26,22 4456 00002E87 034658 add eax, [esi+88] 4457 00002E8A 89472C mov [edi+44], eax 4458 00002E8D 8B466C mov eax, [esi+108] ; @@OUT 27,27,23 4459 00002E90 03465C add eax, [esi+92] 4460 00002E93 89476C mov [edi+108], eax 4461 00002E96 8B4670 mov eax, [esi+112] ; @@OUT 7,28,18 4462 00002E99 034648 add eax, [esi+72] 4463 00002E9C 89471C mov [edi+28], eax 4464 00002E9F 8B4674 mov eax, [esi+116] ; @@OUT 23,29,19 4465 00002EA2 03464C add eax, [esi+76] 4466 00002EA5 89475C mov [edi+92], eax 4467 00002EA8 8B4678 mov eax, [esi+120] ; @@OUT 15,30,17 4468 00002EAB 034644 add eax, [esi+68] 4469 00002EAE 89473C mov [edi+60], eax 4470 00002EB1 8B467C mov eax, [esi+124] ; @@OUT 31,31,- 4471 00002EB4 89477C mov [edi+124], eax 4472 00002EB7 C3 retn 4473 4474 4475 ; =============== S U B R O U T I N E ======================================= 4476 4477 4478 mp3_dct32_shift_1: 4479 00002EB8 8B467C mov eax, [esi+124] ; mp3_dct32_macro macro rate_shift ; rate_shift = 1 4480 00002EBB 0106 add [esi], eax ; @@BF macro a,b,sign,cos,shift 4481 ; @@need_a equ (rate_shift EQ 0) or (a LT 16) ; a = 0 4482 ; @@need_b equ (rate_shift EQ 0) or (b LT 16) ; b = 31 4483 ; IF @@need_a AND @@need_b ; rate_shift = 0 4484 ; mov eax,dword ptr [esi+a*4] 4485 ; mov edx,dword ptr [esi+b*4] 4486 ; add dword ptr [esi+a*4],edx 4487 ; ELSEIF @@need_a 4488 ; mov eax,dword ptr [esi+b*4] 4489 ; add dword ptr [esi+a*4],eax 4490 ; 4491 ; @@BF 0,31,+,COS0_0,1 4492 00002EBD 8B4640 mov eax, [esi+64] ; @@BF 15,16,+,COS0_15,5 4493 00002EC0 01463C add [esi+60], eax 4494 00002EC3 8B06 mov eax, [esi] ; @@BF 0,15,+,COS1_0,1 4495 00002EC5 8B563C mov edx, [esi+60] 4496 00002EC8 0116 add [esi], edx 4497 00002ECA 29D0 sub eax, edx 4498 00002ECC D1E0 shl eax, 1 4499 00002ECE BA72464F40 mov edx, 404F4672h ; COS1_0 4500 00002ED3 F7EA imul edx 4501 00002ED5 89563C mov [esi+60], edx 4502 00002ED8 8B4660 mov eax, [esi+96] ; skip @@BF 16,31,-,COS1_0,1 4503 ; @@BF 7,24,+,COS0_7,1 4504 00002EDB 01461C add [esi+28], eax 4505 00002EDE 8B465C mov eax, [esi+92] ; @@BF 8,23,+,COS0_8,1 4506 00002EE1 014620 add [esi+32], eax 4507 00002EE4 8B461C mov eax, [esi+28] ; @@BF 7,8,+,COS1_7,4 4508 00002EE7 8B5620 mov edx, [esi+32] 4509 00002EEA 01561C add [esi+28], edx 4510 00002EED 29D0 sub eax, edx 4511 00002EEF C1E004 shl eax, 4 4512 00002EF2 BA044E9E51 mov edx, 519E4E04h ; COS1_7 4513 00002EF7 F7EA imul edx 4514 00002EF9 895620 mov [esi+32], edx 4515 00002EFC 8B06 mov eax, [esi] ; skip @@BF 23,24,-,COS1_7,4 4516 ; @@BF 0,7,+,COS2_0,1 4517 00002EFE 8B561C mov edx, [esi+28] 4518 00002F01 0116 add [esi], edx 4519 00002F03 29D0 sub eax, edx 4520 00002F05 D1E0 shl eax, 1 4521 00002F07 BA46FB4041 mov edx, 4140FB46h ; COS2_0 4522 00002F0C F7EA imul edx 4523 00002F0E 89561C mov [esi+28], edx 4524 00002F11 8B4620 mov eax, [esi+32] ; @@BF 8,15,-,COS2_0,1 4525 00002F14 8B563C mov edx, [esi+60] 4526 00002F17 015620 add [esi+32], edx 4527 00002F1A 29D0 sub eax, edx 4528 00002F1C D1E0 shl eax, 1 4529 00002F1E BABA04BFBE mov edx, 0BEBF04BAh ; -COS2_0 4530 00002F23 F7EA imul edx 4531 00002F25 89563C mov [esi+60], edx 4532 00002F28 8B4670 mov eax, [esi+112] ; skip @@BF 16,23,+,COS2_0,1 4533 ; @@BF 24,31,-,COS2_0,1 4534 ; @@BF 3,28,+,COS0_3,1 4535 00002F2B 01460C add [esi+12], eax 4536 00002F2E 8B464C mov eax, [esi+76] ; @@BF 12,19,+,COS0_12,2 4537 00002F31 014630 add [esi+48], eax 4538 00002F34 8B460C mov eax, [esi+12] ; @@BF 3,12,+,COS1_3,1 4539 00002F37 8B5630 mov edx, [esi+48] 4540 00002F3A 01560C add [esi+12], edx 4541 00002F3D 29D0 sub eax, edx 4542 00002F3F D1E0 shl eax, 1 4543 00002F41 BA630ECB52 mov edx, 52CB0E63h 4544 00002F46 F7EA imul edx 4545 00002F48 895630 mov [esi+48], edx 4546 00002F4B 8B466C mov eax, [esi+108] ; @@BF 4,27,+,COS0_4,1 4547 00002F4E 014610 add [esi+16], eax 4548 00002F51 8B4650 mov eax, [esi+80] ; @@BF 11,20,+,COS0_11,2 4549 00002F54 01462C add [esi+44], eax 4550 00002F57 8B4610 mov eax, [esi+16] ; @@BF 4,11,+,COS1_4,1 4551 00002F5A 8B562C mov edx, [esi+44] 4552 00002F5D 015610 add [esi+16], edx 4553 00002F60 29D0 sub eax, edx 4554 00002F62 D1E0 shl eax, 1 4555 00002F64 BA2E40E264 mov edx, 64E2402Eh ; COS1_4 4556 00002F69 F7EA imul edx 4557 00002F6B 89562C mov [esi+44], edx 4558 00002F6E 8B460C mov eax, [esi+12] ; @@BF 3,4,+,COS2_3,3 4559 00002F71 8B5610 mov edx, [esi+16] 4560 00002F74 01560C add [esi+12], edx 4561 00002F77 29D0 sub eax, edx 4562 00002F79 C1E003 shl eax, 3 4563 00002F7C BA42670352 mov edx, 52036742h 4564 00002F81 F7EA imul edx 4565 00002F83 895610 mov [esi+16], edx 4566 00002F86 8B462C mov eax, [esi+44] ; @@BF 11,12,-,COS2_3,3 4567 00002F89 8B5630 mov edx, [esi+48] 4568 00002F8C 01562C add [esi+44], edx 4569 00002F8F 29D0 sub eax, edx 4570 00002F91 C1E003 shl eax, 3 4571 00002F94 BABE98FCAD mov edx, 0ADFC98BEh ; -COS2_3 4572 00002F99 F7EA imul edx 4573 00002F9B 895630 mov [esi+48], edx 4574 00002F9E 8B06 mov eax, [esi] ; @@BF 0,3,+,COS3_0,1 4575 00002FA0 8B560C mov edx, [esi+12] 4576 00002FA3 0116 add [esi], edx 4577 00002FA5 29D0 sub eax, edx 4578 00002FA7 D1E0 shl eax, 1 4579 00002FA9 BAF0E94545 mov edx, 4545E9F0h 4580 00002FAE F7EA imul edx 4581 00002FB0 89560C mov [esi+12], edx 4582 00002FB3 8B4610 mov eax, [esi+16] ; @@BF 4,7,-,COS3_0,1 4583 00002FB6 8B561C mov edx, [esi+28] 4584 00002FB9 015610 add [esi+16], edx 4585 00002FBC 29D0 sub eax, edx 4586 00002FBE D1E0 shl eax, 1 4587 00002FC0 BA1016BABA mov edx, 0BABA1610h 4588 00002FC5 F7EA imul edx 4589 00002FC7 89561C mov [esi+28], edx 4590 00002FCA 8B4620 mov eax, [esi+32] ; @@BF 8,11,+,COS3_0,1 4591 00002FCD 8B562C mov edx, [esi+44] 4592 00002FD0 015620 add [esi+32], edx 4593 00002FD3 29D0 sub eax, edx 4594 00002FD5 D1E0 shl eax, 1 4595 00002FD7 BAF0E94545 mov edx, 4545E9F0h 4596 00002FDC F7EA imul edx 4597 00002FDE 89562C mov [esi+44], edx 4598 00002FE1 8B4630 mov eax, [esi+48] ; @@BF 12,15,-,COS3_0,1 4599 00002FE4 8B563C mov edx, [esi+60] 4600 00002FE7 015630 add [esi+48], edx 4601 00002FEA 29D0 sub eax, edx 4602 00002FEC D1E0 shl eax, 1 4603 00002FEE BA1016BABA mov edx, 0BABA1610h ; -COS3_0 4604 00002FF3 F7EA imul edx 4605 00002FF5 89563C mov [esi+60], edx 4606 00002FF8 8B4678 mov eax, [esi+120] ; @@BF 1,30,+,COS0_1,1 4607 00002FFB 014604 add [esi+4], eax 4608 00002FFE 8B4644 mov eax, [esi+68] ; @@BF 14,17,+,COS0_14,3 4609 00003001 014638 add [esi+56], eax 4610 00003004 8B4604 mov eax, [esi+4] ; @@BF 1,14,+,COS1_1,1 4611 00003007 8B5638 mov edx, [esi+56] 4612 0000300A 015604 add [esi+4], edx 4613 0000300D 29D0 sub eax, edx 4614 0000300F D1E0 shl eax, 1 4615 00003011 BA103CE142 mov edx, 42E13C10h 4616 00003016 F7EA imul edx 4617 00003018 895638 mov [esi+56], edx 4618 0000301B 8B4664 mov eax, [esi+100] ; @@BF 6,25,+,COS0_6,1 4619 0000301E 014618 add [esi+24], eax 4620 00003021 8B4658 mov eax, [esi+88] ; @@BF 9,22,+,COS0_9,1 4621 00003024 014624 add [esi+36], eax 4622 00003027 8B4618 mov eax, [esi+24] ; @@BF 6,9,+,COS1_6,2 4623 0000302A 8B5624 mov edx, [esi+36] 4624 0000302D 015618 add [esi+24], edx 4625 00003030 29D0 sub eax, edx 4626 00003032 C1E002 shl eax, 2 4627 00003035 BAC2923C6E mov edx, 6E3C92C2h ; +COS1_6 4628 0000303A F7EA imul edx 4629 0000303C 895624 mov [esi+36], edx 4630 0000303F 8B4604 mov eax, [esi+4] ; @@BF 1,6,+,COS2_1,1 4631 00003042 8B5618 mov edx, [esi+24] 4632 00003045 015604 add [esi+4], edx 4633 00003048 29D0 sub eax, edx 4634 0000304A D1E0 shl eax, 1 4635 0000304C BA88DEF84C mov edx, 4CF8DE88h 4636 00003051 F7EA imul edx 4637 00003053 895618 mov [esi+24], edx 4638 00003056 8B4624 mov eax, [esi+36] ; @@BF 9,14,-,COS2_1,1 4639 00003059 8B5638 mov edx, [esi+56] 4640 0000305C 015624 add [esi+36], edx 4641 0000305F 29D0 sub eax, edx 4642 00003061 D1E0 shl eax, 1 4643 00003063 BA782107B3 mov edx, 0B3072178h ; -COS2_1 4644 00003068 F7EA imul edx 4645 0000306A 895638 mov [esi+56], edx 4646 0000306D 8B4674 mov eax, [esi+116] ; @@BF 2,29,+,COS0_2,1 4647 00003070 014608 add [esi+8], eax 4648 00003073 8B4648 mov eax, [esi+72] ; @@BF 13,18,+,COS0_13,3 4649 00003076 014634 add [esi+52], eax 4650 00003079 8B4608 mov eax, [esi+8] ; @@BF 2,13,+,COS1_2,1 4651 0000307C 8B5634 mov edx, [esi+52] 4652 0000307F 015608 add [esi+8], edx 4653 00003082 29D0 sub eax, edx 4654 00003084 D1E0 shl eax, 1 4655 00003086 BA459F9148 mov edx, 48919F45h 4656 0000308B F7EA imul edx 4657 0000308D 895634 mov [esi+52], edx 4658 00003090 8B4668 mov eax, [esi+104] ; @@BF 5,26,+,COS0_5,1 4659 00003093 014614 add [esi+20], eax 4660 00003096 8B4654 mov eax, [esi+84] ; @@BF 10,21,+,COS0_10,1 4661 00003099 014628 add [esi+40], eax 4662 0000309C 8B4614 mov eax, [esi+20] ; @@BF 5,10,+,COS1_5,2 4663 0000309F 8B5628 mov edx, [esi+40] 4664 000030A2 015614 add [esi+20], edx 4665 000030A5 29D0 sub eax, edx 4666 000030A7 C1E002 shl eax, 2 4667 000030AA BAAA24E243 mov edx, 43E224AAh 4668 000030AF F7EA imul edx 4669 000030B1 895628 mov [esi+40], edx 4670 000030B4 8B4608 mov eax, [esi+8] ; @@BF 2,5,+,COS2_2,1 4671 000030B7 8B5614 mov edx, [esi+20] 4672 000030BA 015608 add [esi+8], edx 4673 000030BD 29D0 sub eax, edx 4674 000030BF D1E0 shl eax, 1 4675 000030C1 BABF6B3273 mov edx, 73326BBFh ; COS2_2 4676 000030C6 F7EA imul edx 4677 000030C8 895614 mov [esi+20], edx 4678 000030CB 8B4628 mov eax, [esi+40] ; @@BF 10,13,-,COS2_2,1 4679 000030CE 8B5634 mov edx, [esi+52] 4680 000030D1 015628 add [esi+40], edx 4681 000030D4 29D0 sub eax, edx 4682 000030D6 D1E0 shl eax, 1 4683 000030D8 BA4194CD8C mov edx, 8CCD9441h ; -COS2_2 4684 000030DD F7EA imul edx 4685 000030DF 895634 mov [esi+52], edx 4686 000030E2 8B4604 mov eax, [esi+4] ; @@BF 1,2,+,COS3_1,2 4687 000030E5 8B5608 mov edx, [esi+8] 4688 000030E8 015604 add [esi+4], edx 4689 000030EB 29D0 sub eax, edx 4690 000030ED C1E002 shl eax, 2 4691 000030F0 BA46BA9E53 mov edx, 539EBA46h 4692 000030F5 F7EA imul edx 4693 000030F7 895608 mov [esi+8], edx 4694 000030FA 8B4614 mov eax, [esi+20] ; @@BF 5,6,-,COS3_1,2 4695 000030FD 8B5618 mov edx, [esi+24] 4696 00003100 015614 add [esi+20], edx 4697 00003103 29D0 sub eax, edx 4698 00003105 C1E002 shl eax, 2 4699 00003108 BABA4561AC mov edx, 0AC6145BAh 4700 0000310D F7EA imul edx 4701 0000310F 895618 mov [esi+24], edx 4702 00003112 8B4624 mov eax, [esi+36] ; IF rate_shift LT 2 4703 ; @@BF 9,10,+,COS3_1,2 4704 00003115 8B5628 mov edx, [esi+40] 4705 00003118 015624 add [esi+36], edx 4706 0000311B 29D0 sub eax, edx 4707 0000311D C1E002 shl eax, 2 4708 00003120 BA46BA9E53 mov edx, 539EBA46h ; +COS3_1 4709 00003125 F7EA imul edx 4710 00003127 895628 mov [esi+40], edx 4711 0000312A 8B4634 mov eax, [esi+52] ; @@BF 13,14,-,COS3_1,2 4712 0000312D 8B5638 mov edx, [esi+56] 4713 00003130 015634 add [esi+52], edx 4714 00003133 29D0 sub eax, edx 4715 00003135 C1E002 shl eax, 2 4716 00003138 BABA4561AC mov edx, 0AC6145BAh ; -COS3_1 4717 0000313D F7EA imul edx 4718 0000313F 895638 mov [esi+56], edx ; ENDIF 4719 00003142 8B06 mov eax, [esi] ; @@BF1 macro a, b, c, d 4720 ; @@BF a, b,+,COS4_0, 1 4721 ; @@BF c, d,-,COS4_0, 1 4722 ; @@ADD c, d 4723 ; endm 4724 ; @@BF1 0,1,2,3 4725 00003144 8B5604 mov edx, [esi+4] ; @@BF 0,1,+,COS4_0,1 4726 00003147 0116 add [esi], edx 4727 00003149 29D0 sub eax, edx 4728 0000314B D1E0 shl eax, 1 4729 0000314D BA9A79825A mov edx, 5A82799Ah 4730 00003152 F7EA imul edx 4731 00003154 895604 mov [esi+4], edx 4732 00003157 8B4608 mov eax, [esi+8] ; @@BF 2,3,+,COS4_0,1 4733 0000315A 8B560C mov edx, [esi+12] 4734 0000315D 015608 add [esi+8], edx 4735 00003160 29D0 sub eax, edx 4736 00003162 D1E0 shl eax, 1 4737 00003164 BA66867DA5 mov edx, 0A57D8666h 4738 00003169 F7EA imul edx 4739 0000316B 89560C mov [esi+12], edx 4740 0000316E 8B460C mov eax, [esi+12] ; @@ADD 2,3 4741 00003171 014608 add [esi+8], eax 4742 00003174 8B4610 mov eax, [esi+16] ; @@BF2 macro a, b, c, d 4743 ; @@BF a, b,+,COS4_0, 1 4744 ; @@BF c, d,-,COS4_0, 1 4745 ; @@ADD c, d 4746 ; @@ADD a, c 4747 ; @@ADD c, b 4748 ; @@ADD b, d 4749 ; endm 4750 ; @@BF2 4,5,6,7 4751 00003177 8B5614 mov edx, [esi+20] ; @@BF 4,5,+,COS4_0,1 4752 0000317A 015610 add [esi+16], edx 4753 0000317D 29D0 sub eax, edx 4754 0000317F D1E0 shl eax, 1 4755 00003181 BA9A79825A mov edx, 5A82799Ah ; +COS4_0 4756 00003186 F7EA imul edx 4757 00003188 895614 mov [esi+20], edx 4758 0000318B 8B4618 mov eax, [esi+24] ; @@BF 6,7,-,COS4_0,1 4759 0000318E 8B561C mov edx, [esi+28] 4760 00003191 015618 add [esi+24], edx 4761 00003194 29D0 sub eax, edx 4762 00003196 D1E0 shl eax, 1 4763 00003198 BA66867DA5 mov edx, 0A57D8666h ; -COS4_0 4764 0000319D F7EA imul edx 4765 0000319F 89561C mov [esi+28], edx 4766 000031A2 8B461C mov eax, [esi+28] ; @@ADD macro dst,src 4767 ; IF (rate_shift EQ 0) or (dst LT 16) 4768 ; ;tab[a] += tab[b] 4769 ; mov eax,dword ptr [esi+src*4] 4770 ; add dword ptr [esi+dst*4],eax 4771 ; ENDIF 4772 ; endm 4773 ; @@ADD 6,7 4774 000031A5 014618 add [esi+24], eax 4775 000031A8 8B4618 mov eax, [esi+24] ; @@ADD 4,6 4776 000031AB 014610 add [esi+16], eax 4777 000031AE 8B4614 mov eax, [esi+20] ; @@ADD 6,5 4778 000031B1 014618 add [esi+24], eax 4779 000031B4 8B461C mov eax, [esi+28] ; @@ADD 5,7 4780 000031B7 014614 add [esi+20], eax 4781 000031BA 8B4620 mov eax, [esi+32] ; IF rate_shift LT 2 4782 ; @@BF1 8,9,10,11 4783 000031BD 8B5624 mov edx, [esi+36] 4784 000031C0 015620 add [esi+32], edx 4785 000031C3 29D0 sub eax, edx 4786 000031C5 D1E0 shl eax, 1 4787 000031C7 BA9A79825A mov edx, 5A82799Ah 4788 000031CC F7EA imul edx 4789 000031CE 895624 mov [esi+36], edx 4790 000031D1 8B4628 mov eax, [esi+40] 4791 000031D4 8B562C mov edx, [esi+44] 4792 000031D7 015628 add [esi+40], edx 4793 000031DA 29D0 sub eax, edx 4794 000031DC D1E0 shl eax, 1 4795 000031DE BA66867DA5 mov edx, 0A57D8666h 4796 000031E3 F7EA imul edx 4797 000031E5 89562C mov [esi+44], edx 4798 000031E8 8B462C mov eax, [esi+44] 4799 000031EB 014628 add [esi+40], eax 4800 000031EE 8B4630 mov eax, [esi+48] ; @@BF2 12,13,14,15 4801 000031F1 8B5634 mov edx, [esi+52] 4802 000031F4 015630 add [esi+48], edx 4803 000031F7 29D0 sub eax, edx 4804 000031F9 D1E0 shl eax, 1 4805 000031FB BA9A79825A mov edx, 5A82799Ah 4806 00003200 F7EA imul edx 4807 00003202 895634 mov [esi+52], edx 4808 00003205 8B4638 mov eax, [esi+56] 4809 00003208 8B563C mov edx, [esi+60] 4810 0000320B 015638 add [esi+56], edx 4811 0000320E 29D0 sub eax, edx 4812 00003210 D1E0 shl eax, 1 4813 00003212 BA66867DA5 mov edx, 0A57D8666h 4814 00003217 F7EA imul edx 4815 00003219 89563C mov [esi+60], edx 4816 0000321C 8B463C mov eax, [esi+60] 4817 0000321F 014638 add [esi+56], eax 4818 00003222 8B4638 mov eax, [esi+56] 4819 00003225 014630 add [esi+48], eax 4820 00003228 8B4634 mov eax, [esi+52] 4821 0000322B 014638 add [esi+56], eax 4822 0000322E 8B463C mov eax, [esi+60] 4823 00003231 014634 add [esi+52], eax 4824 00003234 8B06 mov eax, [esi] ; @@OUT macro dst,src1,src2 4825 ; IF ((dst AND ((1 SHL rate_shift)-1)) EQ 0) 4826 ; mov eax,dword ptr [esi+src1*4] 4827 ; IFDIFI ,<-> 4828 ; add eax,dword ptr [esi+src2*4] 4829 ; ENDIF 4830 ; IF SYNTH32 4831 ; mov dword ptr [edi+dst*4],eax 4832 ; IF (LONG_WINDOW EQ 0) 4833 ; mov dword ptr [edi+dst*4+512*4],eax 4834 ; ENDIF 4835 ; ELSE 4836 ; ...... 4837 ; ENDIF 4838 ; @@OUT 0,0,- 4839 00003236 8907 mov [edi], eax 4840 00003238 8B4604 mov eax, [esi+4] ; @@OUT 16,1,- 4841 0000323B 894740 mov [edi+64], eax 4842 0000323E 8B4608 mov eax, [esi+8] ; @@OUT 8,2,- 4843 00003241 894720 mov [edi+32], eax 4844 00003244 8B460C mov eax, [esi+12] ; @@OUT 24,3,- 4845 00003247 894760 mov [edi+96], eax 4846 0000324A 8B4610 mov eax, [esi+16] ; @@OUT 4,4,- 4847 0000324D 894710 mov [edi+16], eax 4848 00003250 8B4614 mov eax, [esi+20] ; @@OUT 20,5,- 4849 00003253 894750 mov [edi+80], eax 4850 00003256 8B4618 mov eax, [esi+24] ; @@OUT 12,6,- 4851 00003259 894730 mov [edi+48], eax 4852 0000325C 8B461C mov eax, [esi+28] ; @@OUT 28,7,- 4853 0000325F 894770 mov [edi+112], eax 4854 00003262 8B4620 mov eax, [esi+32] ; @@OUT 2,8,12 4855 00003265 034630 add eax, [esi+48] 4856 00003268 894708 mov [edi+8], eax 4857 0000326B 8B4624 mov eax, [esi+36] ; @@OUT 18,9,13 4858 0000326E 034634 add eax, [esi+52] 4859 00003271 894748 mov [edi+72], eax 4860 00003274 8B4628 mov eax, [esi+40] ; @@OUT 10,10,14 4861 00003277 034638 add eax, [esi+56] 4862 0000327A 894728 mov [edi+40], eax 4863 0000327D 8B462C mov eax, [esi+44] ; @@OUT 26,11,15 4864 00003280 03463C add eax, [esi+60] 4865 00003283 894768 mov [edi+104], eax 4866 00003286 8B4630 mov eax, [esi+48] ; @@OUT 6,12,10 4867 00003289 034628 add eax, [esi+40] 4868 0000328C 894718 mov [edi+24], eax 4869 0000328F 8B4634 mov eax, [esi+52] ; @@OUT 22,13,11 4870 00003292 03462C add eax, [esi+44] 4871 00003295 894758 mov [edi+88], eax 4872 00003298 8B4638 mov eax, [esi+56] ; @@OUT 14,14,9 4873 0000329B 034624 add eax, [esi+36] 4874 0000329E 894738 mov [edi+56], eax 4875 000032A1 8B463C mov eax, [esi+60] ; @@OUT 30,15,- 4876 000032A4 894778 mov [edi+120], eax 4877 000032A7 C3 retn 4878 4879 4880 ; =============== S U B R O U T I N E ======================================= 4881 4882 4883 mp3_dct32_shift_2: 4884 000032A8 8B467C mov eax, [esi+124] ; mp3_dct32_macro macro rate_shift ; rate_shift = 2 4885 000032AB 0106 add [esi], eax ; @@BF macro a,b,sign,cos,shift 4886 ; @@need_a equ (rate_shift EQ 0) or (a LT 16) ; a = 0 4887 ; @@need_b equ (rate_shift EQ 0) or (b LT 16) ; b = 31 4888 ; IF @@need_a AND @@need_b ; rate_shift = 0 4889 ; mov eax,dword ptr [esi+a*4] 4890 ; mov edx,dword ptr [esi+b*4] 4891 ; add dword ptr [esi+a*4],edx 4892 ; ELSEIF @@need_a 4893 ; mov eax,dword ptr [esi+b*4] 4894 ; add dword ptr [esi+a*4],eax 4895 ; 4896 ; @@BF 0,31,+,COS0_0,1 4897 000032AD 8B4640 mov eax, [esi+64] ; @@BF 15,16,+,COS0_15,5 4898 000032B0 01463C add [esi+60], eax 4899 000032B3 8B06 mov eax, [esi] ; @@BF 0,15,+,COS1_0,1 4900 000032B5 8B563C mov edx, [esi+60] 4901 000032B8 0116 add [esi], edx 4902 000032BA 29D0 sub eax, edx 4903 000032BC D1E0 shl eax, 1 4904 000032BE BA72464F40 mov edx, 404F4672h ; COS1_0 4905 000032C3 F7EA imul edx 4906 000032C5 89563C mov [esi+60], edx 4907 000032C8 8B4660 mov eax, [esi+96] ; @@BF 7,24,+,COS0_7,1 4908 000032CB 01461C add [esi+28], eax 4909 000032CE 8B465C mov eax, [esi+92] ; @@BF 8,23,+,COS0_8,1 4910 000032D1 014620 add [esi+32], eax 4911 000032D4 8B461C mov eax, [esi+28] ; @@BF 7,8,+,COS1_7,4 4912 000032D7 8B5620 mov edx, [esi+32] 4913 000032DA 01561C add [esi+28], edx 4914 000032DD 29D0 sub eax, edx 4915 000032DF C1E004 shl eax, 4 4916 000032E2 BA044E9E51 mov edx, 519E4E04h ; COS1_7 4917 000032E7 F7EA imul edx 4918 000032E9 895620 mov [esi+32], edx 4919 000032EC 8B06 mov eax, [esi] ; @@BF 0,7,+,COS2_0,1 4920 000032EE 8B561C mov edx, [esi+28] 4921 000032F1 0116 add [esi], edx 4922 000032F3 29D0 sub eax, edx 4923 000032F5 D1E0 shl eax, 1 4924 000032F7 BA46FB4041 mov edx, 4140FB46h ; COS2_0 4925 000032FC F7EA imul edx 4926 000032FE 89561C mov [esi+28], edx 4927 00003301 8B4620 mov eax, [esi+32] ; @@BF 8,15,-,COS2_0,1 4928 00003304 8B563C mov edx, [esi+60] 4929 00003307 015620 add [esi+32], edx 4930 0000330A 29D0 sub eax, edx 4931 0000330C D1E0 shl eax, 1 4932 0000330E BABA04BFBE mov edx, 0BEBF04BAh 4933 00003313 F7EA imul edx 4934 00003315 89563C mov [esi+60], edx 4935 00003318 8B4670 mov eax, [esi+112] ; @@BF 3,28,+,COS0_3,1 4936 0000331B 01460C add [esi+12], eax 4937 0000331E 8B464C mov eax, [esi+76] ; @@BF 12,19,+,COS0_12,2 4938 00003321 014630 add [esi+48], eax 4939 00003324 8B460C mov eax, [esi+12] ; @@BF 3,12,+,COS1_3,1 4940 00003327 8B5630 mov edx, [esi+48] 4941 0000332A 01560C add [esi+12], edx 4942 0000332D 29D0 sub eax, edx 4943 0000332F D1E0 shl eax, 1 4944 00003331 BA630ECB52 mov edx, 52CB0E63h ; COS1_3 4945 00003336 F7EA imul edx 4946 00003338 895630 mov [esi+48], edx 4947 0000333B 8B466C mov eax, [esi+108] ; @@BF 4,27,+,COS0_4,1 4948 0000333E 014610 add [esi+16], eax 4949 00003341 8B4650 mov eax, [esi+80] ; @@BF 11,20,+,COS0_11,2 4950 00003344 01462C add [esi+44], eax 4951 00003347 8B4610 mov eax, [esi+16] ; @@BF 4,11,+,COS1_4,1 4952 0000334A 8B562C mov edx, [esi+44] 4953 0000334D 015610 add [esi+16], edx 4954 00003350 29D0 sub eax, edx 4955 00003352 D1E0 shl eax, 1 4956 00003354 BA2E40E264 mov edx, 64E2402Eh 4957 00003359 F7EA imul edx 4958 0000335B 89562C mov [esi+44], edx 4959 0000335E 8B460C mov eax, [esi+12] ; @@BF 3,4,+,COS2_3,3 4960 00003361 8B5610 mov edx, [esi+16] 4961 00003364 01560C add [esi+12], edx 4962 00003367 29D0 sub eax, edx 4963 00003369 C1E003 shl eax, 3 4964 0000336C BA42670352 mov edx, 52036742h 4965 00003371 F7EA imul edx 4966 00003373 895610 mov [esi+16], edx 4967 00003376 8B462C mov eax, [esi+44] ; @@BF 11,12,-,COS2_3,3 4968 00003379 8B5630 mov edx, [esi+48] 4969 0000337C 01562C add [esi+44], edx 4970 0000337F 29D0 sub eax, edx 4971 00003381 C1E003 shl eax, 3 4972 00003384 BABE98FCAD mov edx, 0ADFC98BEh ; -COS2_3 4973 00003389 F7EA imul edx 4974 0000338B 895630 mov [esi+48], edx 4975 0000338E 8B06 mov eax, [esi] ; @@BF 0,3,+,COS3_0,1 4976 00003390 8B560C mov edx, [esi+12] 4977 00003393 0116 add [esi], edx 4978 00003395 29D0 sub eax, edx 4979 00003397 D1E0 shl eax, 1 4980 00003399 BAF0E94545 mov edx, 4545E9F0h 4981 0000339E F7EA imul edx 4982 000033A0 89560C mov [esi+12], edx 4983 000033A3 8B4610 mov eax, [esi+16] ; @@BF 4,7,-,COS3_0,1 4984 000033A6 8B561C mov edx, [esi+28] 4985 000033A9 015610 add [esi+16], edx 4986 000033AC 29D0 sub eax, edx 4987 000033AE D1E0 shl eax, 1 4988 000033B0 BA1016BABA mov edx, 0BABA1610h 4989 000033B5 F7EA imul edx 4990 000033B7 89561C mov [esi+28], edx 4991 000033BA 8B4620 mov eax, [esi+32] ; @@BF 8,11,+,COS3_0,1 4992 000033BD 8B562C mov edx, [esi+44] 4993 000033C0 015620 add [esi+32], edx 4994 000033C3 29D0 sub eax, edx 4995 000033C5 D1E0 shl eax, 1 4996 000033C7 BAF0E94545 mov edx, 4545E9F0h 4997 000033CC F7EA imul edx 4998 000033CE 89562C mov [esi+44], edx 4999 000033D1 8B4630 mov eax, [esi+48] ; @@BF 12,15,-,COS3_0,1 5000 000033D4 8B563C mov edx, [esi+60] 5001 000033D7 015630 add [esi+48], edx 5002 000033DA 29D0 sub eax, edx 5003 000033DC D1E0 shl eax, 1 5004 000033DE BA1016BABA mov edx, 0BABA1610h 5005 000033E3 F7EA imul edx 5006 000033E5 89563C mov [esi+60], edx 5007 000033E8 8B4678 mov eax, [esi+120] ; @@BF 1,30,+,COS0_1,1 5008 000033EB 014604 add [esi+4], eax 5009 000033EE 8B4644 mov eax, [esi+68] ; @@BF 14,17,+,COS0_14,3 5010 000033F1 014638 add [esi+56], eax 5011 000033F4 8B4604 mov eax, [esi+4] ; @@BF 1,14,+,COS1_1,1 5012 000033F7 8B5638 mov edx, [esi+56] 5013 000033FA 015604 add [esi+4], edx 5014 000033FD 29D0 sub eax, edx 5015 000033FF D1E0 shl eax, 1 5016 00003401 BA103CE142 mov edx, 42E13C10h ; COS1_1 5017 00003406 F7EA imul edx 5018 00003408 895638 mov [esi+56], edx 5019 0000340B 8B4664 mov eax, [esi+100] ; @@BF 6,25,+,COS0_6,1 5020 0000340E 014618 add [esi+24], eax 5021 00003411 8B4658 mov eax, [esi+88] ; @@BF 9,22,+,COS0_9,1 5022 00003414 014624 add [esi+36], eax 5023 00003417 8B4618 mov eax, [esi+24] ; @@BF 6,9,+,COS1_6,2 5024 0000341A 8B5624 mov edx, [esi+36] 5025 0000341D 015618 add [esi+24], edx 5026 00003420 29D0 sub eax, edx 5027 00003422 C1E002 shl eax, 2 5028 00003425 BAC2923C6E mov edx, 6E3C92C2h 5029 0000342A F7EA imul edx 5030 0000342C 895624 mov [esi+36], edx 5031 0000342F 8B4604 mov eax, [esi+4] ; @@BF 1,6,+,COS2_1,1 5032 00003432 8B5618 mov edx, [esi+24] 5033 00003435 015604 add [esi+4], edx 5034 00003438 29D0 sub eax, edx 5035 0000343A D1E0 shl eax, 1 5036 0000343C BA88DEF84C mov edx, 4CF8DE88h ; COS2_1 5037 00003441 F7EA imul edx 5038 00003443 895618 mov [esi+24], edx 5039 00003446 8B4624 mov eax, [esi+36] ; @@BF 9,14,-,COS2_1,1 5040 00003449 8B5638 mov edx, [esi+56] 5041 0000344C 015624 add [esi+36], edx 5042 0000344F 29D0 sub eax, edx 5043 00003451 D1E0 shl eax, 1 5044 00003453 BA782107B3 mov edx, 0B3072178h ; -COS2_1 5045 00003458 F7EA imul edx 5046 0000345A 895638 mov [esi+56], edx 5047 0000345D 8B4674 mov eax, [esi+116] ; @@BF 2,29,+,COS0_2,1 5048 00003460 014608 add [esi+8], eax 5049 00003463 8B4648 mov eax, [esi+72] ; @@BF 13,18,+,COS0_13,3 5050 00003466 014634 add [esi+52], eax 5051 00003469 8B4608 mov eax, [esi+8] ; @@BF 2,13,+,COS1_2,1 5052 0000346C 8B5634 mov edx, [esi+52] 5053 0000346F 015608 add [esi+8], edx 5054 00003472 29D0 sub eax, edx 5055 00003474 D1E0 shl eax, 1 5056 00003476 BA459F9148 mov edx, 48919F45h 5057 0000347B F7EA imul edx 5058 0000347D 895634 mov [esi+52], edx 5059 00003480 8B4668 mov eax, [esi+104] ; @@BF 5,26,+,COS0_5,1 5060 00003483 014614 add [esi+20], eax 5061 00003486 8B4654 mov eax, [esi+84] ; @@BF 10,21,+,COS0_10,1 5062 00003489 014628 add [esi+40], eax 5063 0000348C 8B4614 mov eax, [esi+20] ; @@BF 5,10,+,COS1_5,2 5064 0000348F 8B5628 mov edx, [esi+40] 5065 00003492 015614 add [esi+20], edx 5066 00003495 29D0 sub eax, edx 5067 00003497 C1E002 shl eax, 2 5068 0000349A BAAA24E243 mov edx, 43E224AAh 5069 0000349F F7EA imul edx 5070 000034A1 895628 mov [esi+40], edx 5071 000034A4 8B4608 mov eax, [esi+8] ; @@BF 2,5,+,COS2_2,1 5072 000034A7 8B5614 mov edx, [esi+20] 5073 000034AA 015608 add [esi+8], edx 5074 000034AD 29D0 sub eax, edx 5075 000034AF D1E0 shl eax, 1 5076 000034B1 BABF6B3273 mov edx, 73326BBFh ; COS2_2 5077 000034B6 F7EA imul edx 5078 000034B8 895614 mov [esi+20], edx 5079 000034BB 8B4628 mov eax, [esi+40] ; @@BF 10,13,-,COS2_2,1 5080 000034BE 8B5634 mov edx, [esi+52] 5081 000034C1 015628 add [esi+40], edx 5082 000034C4 29D0 sub eax, edx 5083 000034C6 D1E0 shl eax, 1 5084 000034C8 BA4194CD8C mov edx, 8CCD9441h ; -COS2_2 5085 000034CD F7EA imul edx 5086 000034CF 895634 mov [esi+52], edx 5087 000034D2 8B4604 mov eax, [esi+4] ; @@BF 1,2,+,COS3_1,2 5088 000034D5 8B5608 mov edx, [esi+8] 5089 000034D8 015604 add [esi+4], edx 5090 000034DB 29D0 sub eax, edx 5091 000034DD C1E002 shl eax, 2 5092 000034E0 BA46BA9E53 mov edx, 539EBA46h ; COS3_1 5093 000034E5 F7EA imul edx 5094 000034E7 895608 mov [esi+8], edx 5095 000034EA 8B4614 mov eax, [esi+20] ; @@BF 5,6,-,COS3_1,2 5096 000034ED 8B5618 mov edx, [esi+24] 5097 000034F0 015614 add [esi+14h], edx 5098 000034F3 29D0 sub eax, edx 5099 000034F5 C1E002 shl eax, 2 5100 000034F8 BABA4561AC mov edx, 0AC6145BAh ; -COS3_1 5101 000034FD F7EA imul edx 5102 000034FF 895618 mov [esi+24], edx 5103 00003502 8B06 mov eax, [esi] ; @@BF1 macro a, b, c, d 5104 ; @@BF a, b,+,COS4_0, 1 5105 ; @@BF c, d,-,COS4_0, 1 5106 ; @@ADD c, d 5107 ; endm 5108 ; @@BF1 0,1,2,3 5109 00003504 8B5604 mov edx, [esi+4] ; @@BF 0,1,+,COS4_0,1 5110 00003507 0116 add [esi], edx 5111 00003509 29D0 sub eax, edx 5112 0000350B D1E0 shl eax, 1 5113 0000350D BA9A79825A mov edx, 5A82799Ah 5114 00003512 F7EA imul edx 5115 00003514 895604 mov [esi+4], edx 5116 00003517 8B4608 mov eax, [esi+8] ; @@BF 2,3,-,COS4_0,1 5117 0000351A 8B560C mov edx, [esi+12] 5118 0000351D 015608 add [esi+8], edx 5119 00003520 29D0 sub eax, edx 5120 00003522 D1E0 shl eax, 1 5121 00003524 BA66867DA5 mov edx, 0A57D8666h 5122 00003529 F7EA imul edx 5123 0000352B 89560C mov [esi+12], edx 5124 0000352E 8B460C mov eax, [esi+12] ; @@ADD 2,3 5125 00003531 014608 add [esi+8], eax 5126 00003534 8B4610 mov eax, [esi+16] ; @@BF2 macro a, b, c, d 5127 ; @@BF a, b,+,COS4_0, 1 5128 ; @@BF c, d,-,COS4_0, 1 5129 ; @@ADD c, d 5130 ; @@ADD a, c 5131 ; @@ADD c, b 5132 ; @@ADD b, d 5133 ; endm 5134 ; @@BF2 4,5,6,7 5135 00003537 8B5614 mov edx, [esi+20] ; @@BF 4,5,+,COS4_0,1 5136 0000353A 015610 add [esi+16], edx 5137 0000353D 29D0 sub eax, edx 5138 0000353F D1E0 shl eax, 1 5139 00003541 BA9A79825A mov edx, 5A82799Ah ; COS4_0 5140 00003546 F7EA imul edx 5141 00003548 895614 mov [esi+20], edx 5142 0000354B 8B4618 mov eax, [esi+24] ; @@BF 6,7,-,COS4_0,1 5143 0000354E 8B561C mov edx, [esi+28] 5144 00003551 015618 add [esi+18h], edx 5145 00003554 29D0 sub eax, edx 5146 00003556 D1E0 shl eax, 1 5147 00003558 BA66867DA5 mov edx, 0A57D8666h ; -COS4_0 5148 0000355D F7EA imul edx 5149 0000355F 89561C mov [esi+28], edx 5150 00003562 8B461C mov eax, [esi+28] ; @@ADD 6,7 5151 00003565 014618 add [esi+24], eax 5152 00003568 8B4618 mov eax, [esi+24] ; @@ADD 4,6 5153 0000356B 014610 add [esi+16], eax 5154 0000356E 8B4614 mov eax, [esi+20] ; @@ADD 6,5 5155 00003571 014618 add [esi+24], eax 5156 00003574 8B461C mov eax, [esi+28] ; @@ADD 5,7 5157 00003577 014614 add [esi+20], eax 5158 0000357A 8B06 mov eax, [esi] ; @@OUT macro dst,src1,src2 5159 ; IF ((dst AND ((1 SHL rate_shift)-1)) EQ 0) 5160 ; mov eax,dword ptr [esi+src1*4] 5161 ; IFDIFI ,<-> 5162 ; add eax,dword ptr [esi+src2*4] 5163 ; ENDIF 5164 ; IF SYNTH32 5165 ; mov dword ptr [edi+dst*4],eax 5166 ; IF (LONG_WINDOW EQ 0) 5167 ; mov dword ptr [edi+dst*4+512*4],eax 5168 ; ENDIF 5169 ; ELSE 5170 ; ...... 5171 ; ENDIF 5172 ; @@OUT 0,0,- 5173 0000357C 8907 mov [edi], eax 5174 0000357E 8B4604 mov eax, [esi+4] ; @@OUT 16,1,- 5175 00003581 894740 mov [edi+64], eax 5176 00003584 8B4608 mov eax, [esi+8] ; @@OUT 8,2,- 5177 00003587 894720 mov [edi+32], eax 5178 0000358A 8B460C mov eax, [esi+12] ; @@OUT 24,3,- 5179 0000358D 894760 mov [edi+96], eax 5180 00003590 8B4610 mov eax, [esi+16] ; @@OUT 4,4,- 5181 00003593 894710 mov [edi+16], eax 5182 00003596 8B4614 mov eax, [esi+20] ; @@OUT 20,5,- 5183 00003599 894750 mov [edi+80], eax 5184 0000359C 8B4618 mov eax, [esi+24] ; @@OUT 12,6,- 5185 0000359F 894730 mov [edi+48], eax 5186 000035A2 8B461C mov eax, [esi+28] ; @@OUT 28,7,- 5187 000035A5 894770 mov [edi+112], eax 5188 000035A8 C3 retn 5189 5190 5191 ; =============== S U B R O U T I N E ======================================= 5192 5193 5194 synth_16bit_shift_0_fast: 5195 000035A9 F605[F0750000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 0,0,1 5196 000035B0 740E jz short .no_rdtsc_supported 5197 000035B2 0F31 rdtsc 5198 000035B4 2905[68770000] sub [rdtsc_synth_dct], eax 5199 000035BA 1915[6C770000] sbb [rdtsc_synth_dct+4], edx 5200 5201 .no_rdtsc_supported: 5202 000035C0 BE[9CBD0000] mov esi, mp3_sb_samples 5203 000035C5 8B3D[30F40000] mov edi, [mp3_samples_dst] 5204 000035CB C705[3CF40000]0000- mov dword [mp3_curr_channel], 0 5204 000035D3 0000 5205 5206 .synth_channel_lop: 5207 000035D5 56 push esi 5208 000035D6 57 push edi 5209 000035D7 893D[7C9D0000] mov [mp3_curr_syn_dst], edi 5210 000035DD C705[44F40000]0000- mov dword [mp3_curr_frame], 0 5210 000035E5 0000 5211 5212 .synth_frame_lop: 5213 000035E7 56 push esi 5214 000035E8 F605[F0750000]10 test byte [cpuid_flags], 10h 5215 000035EF 740E jz short .no_rdtsc_supported@ 5216 000035F1 0F31 rdtsc 5217 000035F3 2905[80770000] sub [rdtsc_dct32], eax 5218 000035F9 1915[84770000] sbb [rdtsc_dct32+4], edx 5219 5220 .no_rdtsc_supported@: 5221 000035FF 8B15[3CF40000] mov edx, [mp3_curr_channel] 5222 00003605 8B0495[94BD0000] mov eax, [mp3_synth_index+edx*4] 5223 0000360C 832C95[94BD0000]20 sub dword [mp3_synth_index+edx*4], 32 5224 00003614 C1E20A shl edx, 10 5225 00003617 25E0010000 and eax, 1E0h ; 1FFh-1Fh 5226 0000361C 09D0 or eax, edx 5227 0000361E A3[789D0000] mov [mp3_curr_syn_index], eax 5228 00003623 8B3D[789D0000] mov edi, [mp3_curr_syn_index] 5229 00003629 8D3CBD[949D0000] lea edi, [mp3_synth_buf+edi*4] 5230 00003630 E8A3EFFFFF call mp3_dct32_shift_0 5231 00003635 F605[F0750000]10 test byte [cpuid_flags], 10h 5232 0000363C 740E jz short .no_rdtsc_supported@@ 5233 0000363E 0F31 rdtsc 5234 00003640 0105[80770000] add [rdtsc_dct32], eax 5235 00003646 1115[84770000] adc [rdtsc_dct32+4], edx 5236 5237 .no_rdtsc_supported@@: 5238 0000364C F605[F0750000]10 test byte [cpuid_flags], 10h 5239 00003653 740E jz short .no_rdtsc_supported@@@ 5240 00003655 0F31 rdtsc 5241 00003657 2905[98770000] sub [rdtsc_synth], eax 5242 0000365D 1915[9C770000] sbb [rdtsc_synth+4], edx 5243 5244 .no_rdtsc_supported@@@: 5245 00003663 E888000000 call mp3_synth_filter_this_16bit_shift_0_fast ; 5246 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 5247 00003668 F605[F0750000]10 test byte [cpuid_flags], 10h 5248 0000366F 740E jz short .no_rdtsc_supported@@@@ 5249 00003671 0F31 rdtsc 5250 00003673 0105[98770000] add [rdtsc_synth], eax 5251 00003679 1115[9C770000] adc [rdtsc_synth+4], edx 5252 5253 .no_rdtsc_supported@@@@: 5254 0000367F 5E pop esi 5255 00003680 A1[38F40000] mov eax, [mp3_samples_dst_step] 5256 00003685 C1E005 shl eax, 5 5257 00003688 8A0D[EE750000] mov cl, [option_rate_shift] 5258 0000368E D3E8 shr eax, cl 5259 00003690 0105[7C9D0000] add [mp3_curr_syn_dst], eax 5260 00003696 81C680000000 add esi, 128 ; SBLIMIT*4 5261 0000369C FF05[44F40000] inc dword [mp3_curr_frame] 5262 000036A2 A1[44F40000] mov eax, [mp3_curr_frame] 5263 000036A7 3B05[809D0000] cmp eax, [mp3_nb_frames] 5264 000036AD 0F8234FFFFFF jb .synth_frame_lop 5265 000036B3 5F pop edi 5266 000036B4 5E pop esi 5267 000036B5 033D[749D0000] add edi, [mp3_bytes_per_sample] 5268 000036BB 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 5269 000036C1 FF05[3CF40000] inc dword [mp3_curr_channel] 5270 000036C7 A1[3CF40000] mov eax, [mp3_curr_channel] 5271 000036CC 3B05[6C9D0000] cmp eax, [mp3_output_num_channels] 5272 000036D2 0F82FDFEFFFF jb .synth_channel_lop 5273 000036D8 F605[F0750000]10 test byte [cpuid_flags], 10h 5274 000036DF 740E jz short .no_rdtsc_supported@@@@@ 5275 000036E1 0F31 rdtsc 5276 000036E3 0105[68770000] add [rdtsc_synth_dct], eax 5277 000036E9 1115[6C770000] adc [rdtsc_synth_dct+4], edx 5278 5279 .no_rdtsc_supported@@@@@: 5280 000036EF C3 retn 5281 5282 5283 ; =============== S U B R O U T I N E ======================================= 5284 5285 5286 mp3_synth_filter_this_16bit_shift_0_fast: 5287 000036F0 A1[789D0000] mov eax, [mp3_curr_syn_index] 5288 000036F5 A9E0010000 test eax, 1E0h ; 1FFh-1Fh 5289 000036FA 0F849C010000 jz .append_copy_to_window 5290 00003700 90 nop 5291 5292 .append_copy_to_window_back: 5293 00003701 89C5 mov ebp, eax 5294 00003703 81E5C0010000 and ebp, 1C0h ; @win1,1FFh-1Fh-20h 5295 00003709 2520040000 and eax, 420h ; and eax,20h+(1 shl 10) ; bit5 and channel 5296 0000370E 8D7010 lea esi, [eax+10h] ; @@syn1,[eax+10h] 5297 00003711 8D7830 lea edi, [eax+30h] ; @@syn2,[eax+30h] 5298 00003714 F7DD neg ebp 5299 00003716 81E5C0010000 and ebp, 1C0h ; @win1,1FFh-1Fh-20h 5300 0000371C 8B0D[7C9D0000] mov ecx, [mp3_curr_syn_dst] ; @@dst,dword ptr [mp3_curr_syn_dst] 5301 5302 .samples_lop: 5303 00003722 BB00200020 mov ebx, 20002000h ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 5304 ; @@out_shift equ (OUT_SHIFT_fast+(8*force_8bit)) 5305 ; out_shift = 14 5306 00003727 8B14B5[949D0000] mov edx, [mp3_synth_buf+esi*4] ; @@SUM8 macro sum,win,ww,syn 5307 ; @@SUM8 @@sum,@@win1,0,@@syn1 5308 ; IRP nn,0,1,2,3,4,5,6,7 5309 ; mov edx,dword ptr [mp3_synth_buf+syn*4+(nn*64*4)] 5310 ; movsx eax,word ptr [mp3_synth_win+win*2+(nn*64*2)+ww*2] 5311 ; imul eax,edx 5312 ; add sum,eax 5313 0000372E 0FBF842D[4CEF0400] movsx eax, word [mp3_synth_win+ebp*2] ; nn=0, ww=0 5314 00003736 0FAFC2 imul eax, edx 5315 00003739 01C3 add ebx, eax 5316 0000373B 8B14B5[949E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] 5317 00003742 0FBF842D[CCEF0400] movsx eax, word [(mp3_synth_win+80h)+ebp*2] ; nn=1, ww=0 5318 0000374A 0FAFC2 imul eax, edx 5319 0000374D 01C3 add ebx, eax 5320 0000374F 8B14B5[949F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 5321 00003756 0FBF842D[4CF00400] movsx eax, word [(mp3_synth_win+100h)+ebp*2] ; nn=2 5322 0000375E 0FAFC2 imul eax, edx 5323 00003761 01C3 add ebx, eax 5324 00003763 8B14B5[94A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 5325 0000376A 0FBF842D[CCF00400] movsx eax, word [(mp3_synth_win+180h)+ebp*2] ; nn=3 5326 00003772 0FAFC2 imul eax, edx 5327 00003775 01C3 add ebx, eax 5328 00003777 8B14B5[94A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] 5329 0000377E 0FBF842D[4CF10400] movsx eax, word [(mp3_synth_win+200h)+ebp*2] ; nn=4 5330 00003786 0FAFC2 imul eax, edx 5331 00003789 01C3 add ebx, eax 5332 0000378B 8B14B5[94A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 5333 00003792 0FBF842D[CCF10400] movsx eax, word [(mp3_synth_win+280h)+ebp*2] ; nn=5 5334 0000379A 0FAFC2 imul eax, edx 5335 0000379D 01C3 add ebx, eax 5336 0000379F 8B14B5[94A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 5337 000037A6 0FBF842D[4CF20400] movsx eax, word [(mp3_synth_win+300h)+ebp*2] ; nn=6 5338 000037AE 0FAFC2 imul eax, edx 5339 000037B1 01C3 add ebx, eax 5340 000037B3 8B14B5[94A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 5341 000037BA 0FBF842D[CCF20400] movsx eax, word [(mp3_synth_win+380h)+ebp*2] ; nn=7 5342 000037C2 0FAFC2 imul eax, edx 5343 000037C5 01C3 add ebx, eax 5344 000037C7 8B14BD[949D0000] mov edx, [mp3_synth_buf+edi*4] ; @@SUM8 @@sum,@@win1,32, @@syn2 5345 000037CE 0FBF842D[8CEF0400] movsx eax, word [(mp3_synth_win+40h)+ebp*2] ; nn=0, ww=32 5346 000037D6 0FAFC2 imul eax, edx 5347 000037D9 01C3 add ebx, eax 5348 000037DB 8B14BD[949E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 5349 000037E2 0FBF842D[0CF00400] movsx eax, word [(mp3_synth_win+0C0h)+ebp*2] ; nn=1, ww=32 5350 000037EA 0FAFC2 imul eax, edx 5351 000037ED 01C3 add ebx, eax 5352 000037EF 8B14BD[949F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] 5353 000037F6 0FBF842D[8CF00400] movsx eax, word [(mp3_synth_win+140h)+ebp*2] ; nn=2 5354 000037FE 0FAFC2 imul eax, edx 5355 00003801 01C3 add ebx, eax 5356 00003803 8B14BD[94A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 5357 0000380A 0FBF842D[0CF10400] movsx eax, word [(mp3_synth_win+1C0h)+ebp*2] ; nn=3 5358 00003812 0FAFC2 imul eax, edx 5359 00003815 01C3 add ebx, eax 5360 00003817 8B14BD[94A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 5361 0000381E 0FBF842D[8CF10400] movsx eax, word [(mp3_synth_win+240h)+ebp*2] ; nn=4 5362 00003826 0FAFC2 imul eax, edx 5363 00003829 01C3 add ebx, eax 5364 0000382B 8B14BD[94A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 5365 00003832 0FBF842D[0CF20400] movsx eax, word [(mp3_synth_win+2C0h)+ebp*2] ; nn=5 5366 0000383A 0FAFC2 imul eax, edx 5367 0000383D 01C3 add ebx, eax 5368 0000383F 8B14BD[94A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 5369 00003846 0FBF842D[8CF20400] movsx eax, word [(mp3_synth_win+340h)+ebp*2] ; nn=6 5370 0000384E 0FAFC2 imul eax, edx 5371 00003851 01C3 add ebx, eax 5372 00003853 8B14BD[94A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 5373 0000385A 0FBF842D[0CF30400] movsx eax, word [(mp3_synth_win+3C0h)+ebp*2] ; nn=7 5374 00003862 0FAFC2 imul eax, edx 5375 00003865 01C3 add ebx, eax 5376 00003867 81FB00000040 cmp ebx, 40000000h ; cmp @@sum,10000h SHL (@@out_shift) ; out_shift = 14 5377 0000386D 7322 jnb short .sat 5378 0000386F C1FB0E sar ebx, 14 ; sar @@sum,(@@out_shift) 5379 00003872 81EB00800000 sub ebx, 8000h ; sub @@sum,8000h ; make 16bit signed 5380 5381 .sat_back: 5382 00003878 668919 mov [ecx], bx ; mov word ptr [@@dst],@@sum_16bit 5383 0000387B 030D[38F40000] add ecx, [mp3_samples_dst_step] 5384 00003881 46 inc esi ; inc @@syn1 5385 00003882 4F dec edi ; dec @@syn2 5386 00003883 45 inc ebp ; inc @@win1 5387 00003884 F7C51F000000 test ebp, 1Fh ; IF LONG_WINDOW 5388 0000388A 0F8592FEFFFF jnz .samples_lop ; test @@win1,1Fh 5389 00003890 C3 retn 5390 5391 .sat: 5392 00003891 C1FB1F sar ebx, 31 ; sar @@sum,31 ; FFFFFFFFh,00000000h 5393 00003894 81F3FF7F0000 xor ebx, 7FFFh ; xor @@sum,7fffh ; FFFF8000h,00007FFFh (signed 16bit) 5394 0000389A EBDC jmp short .sat_back 5395 5396 .append_copy_to_window: 5397 0000389C 8D3485[949D0000] lea esi, [mp3_synth_buf+eax*4] ; IF SYNTH32 5398 000038A3 8DBE00080000 lea edi, [esi+2048] ; [esi+512*4] 5399 000038A9 B912000000 mov ecx, 18 ; (12h*4)/4 5400 000038AE F3A5 rep movsd 5401 000038B0 E94CFEFFFF jmp .append_copy_to_window_back 5402 5403 5404 ; =============== S U B R O U T I N E ======================================= 5405 5406 5407 synth_16bit_shift_1_fast: 5408 000038B5 F605[F0750000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 0,1,1 5409 000038BC 740E jz short .no_rdtsc_supported 5410 000038BE 0F31 rdtsc 5411 000038C0 2905[68770000] sub [rdtsc_synth_dct], eax 5412 000038C6 1915[6C770000] sbb [rdtsc_synth_dct+4], edx 5413 5414 .no_rdtsc_supported: 5415 000038CC BE[9CBD0000] mov esi, mp3_sb_samples 5416 000038D1 8B3D[30F40000] mov edi, [mp3_samples_dst] 5417 000038D7 C705[3CF40000]0000- mov dword [mp3_curr_channel], 0 5417 000038DF 0000 5418 5419 .synth_channel_lop: 5420 000038E1 56 push esi 5421 000038E2 57 push edi 5422 000038E3 893D[7C9D0000] mov [mp3_curr_syn_dst], edi 5423 000038E9 C705[44F40000]0000- mov dword [mp3_curr_frame], 0 5423 000038F1 0000 5424 5425 .synth_frame_lop: 5426 000038F3 56 push esi 5427 000038F4 F605[F0750000]10 test byte [cpuid_flags], 10h 5428 000038FB 740E jz short .no_rdtsc_supported@ 5429 000038FD 0F31 rdtsc 5430 000038FF 2905[80770000] sub [rdtsc_dct32], eax 5431 00003905 1915[84770000] sbb [rdtsc_dct32+4], edx 5432 5433 .no_rdtsc_supported@: 5434 0000390B 8B15[3CF40000] mov edx, [mp3_curr_channel] 5435 00003911 8B0495[94BD0000] mov eax, [mp3_synth_index+edx*4] 5436 00003918 832C95[94BD0000]20 sub dword [mp3_synth_index+edx*4], 32 5437 00003920 C1E20A shl edx, 10 5438 00003923 25E0010000 and eax, 1E0h ; 1FFh-1Fh 5439 00003928 09D0 or eax, edx 5440 0000392A A3[789D0000] mov [mp3_curr_syn_index], eax 5441 0000392F 8B3D[789D0000] mov edi, [mp3_curr_syn_index] 5442 00003935 8D3CBD[949D0000] lea edi, [mp3_synth_buf+edi*4] 5443 0000393C E877F5FFFF call mp3_dct32_shift_1 ; mp3_dct32_shift_&rate_shift 5444 00003941 F605[F0750000]10 test byte [cpuid_flags], 10h 5445 00003948 740E jz short .no_rdtsc_supported@@ 5446 0000394A 0F31 rdtsc 5447 0000394C 0105[80770000] add [rdtsc_dct32], eax 5448 00003952 1115[84770000] adc [rdtsc_dct32+4], edx 5449 5450 .no_rdtsc_supported@@: 5451 00003958 F605[F0750000]10 test byte [cpuid_flags], 10h 5452 0000395F 740E jz short .no_rdtsc_supported@@@ 5453 00003961 0F31 rdtsc 5454 00003963 2905[98770000] sub [rdtsc_synth], eax 5455 00003969 1915[9C770000] sbb [rdtsc_synth+4], edx 5456 5457 .no_rdtsc_supported@@@: 5458 0000396F E888000000 call mp3_synth_filter_this_16bit_shift_1_fast ; 5459 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 5460 00003974 F605[F0750000]10 test byte [cpuid_flags], 10h 5461 0000397B 740E jz short .no_rdtsc_supported@@@@ 5462 0000397D 0F31 rdtsc 5463 0000397F 0105[98770000] add [rdtsc_synth], eax 5464 00003985 1115[9C770000] adc [rdtsc_synth+4], edx 5465 5466 .no_rdtsc_supported@@@@: 5467 0000398B 5E pop esi 5468 0000398C A1[38F40000] mov eax, [mp3_samples_dst_step] 5469 00003991 C1E005 shl eax, 5 5470 00003994 8A0D[EE750000] mov cl, [option_rate_shift] 5471 0000399A D3E8 shr eax, cl 5472 0000399C 0105[7C9D0000] add [mp3_curr_syn_dst], eax 5473 000039A2 81C680000000 add esi, 128 ; SBLIMIT*4 5474 000039A8 FF05[44F40000] inc dword [mp3_curr_frame] 5475 000039AE A1[44F40000] mov eax, [mp3_curr_frame] 5476 000039B3 3B05[809D0000] cmp eax, [mp3_nb_frames] 5477 000039B9 0F8234FFFFFF jb .synth_frame_lop 5478 000039BF 5F pop edi 5479 000039C0 5E pop esi 5480 000039C1 033D[749D0000] add edi, [mp3_bytes_per_sample] 5481 000039C7 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 5482 000039CD FF05[3CF40000] inc dword [mp3_curr_channel] 5483 000039D3 A1[3CF40000] mov eax, [mp3_curr_channel] 5484 000039D8 3B05[6C9D0000] cmp eax, [mp3_output_num_channels] 5485 000039DE 0F82FDFEFFFF jb .synth_channel_lop 5486 000039E4 F605[F0750000]10 test byte [cpuid_flags], 10h 5487 000039EB 740E jz short .no_rdtsc_supported@@@@@ 5488 000039ED 0F31 rdtsc 5489 000039EF 0105[68770000] add [rdtsc_synth_dct], eax 5490 000039F5 1115[6C770000] adc [rdtsc_synth_dct+4], edx 5491 5492 .no_rdtsc_supported@@@@@: 5493 000039FB C3 retn 5494 5495 5496 ; =============== S U B R O U T I N E ======================================= 5497 5498 5499 mp3_synth_filter_this_16bit_shift_1_fast: 5500 000039FC A1[789D0000] mov eax, [mp3_curr_syn_index] 5501 00003A01 A9E0010000 test eax, 1E0h ; 1FFh-1Fh 5502 00003A06 0F84A2010000 jz .append_copy_to_window 5503 00003A0C 90 nop 5504 5505 .append_copy_to_window_back: 5506 00003A0D 89C5 mov ebp, eax 5507 00003A0F 81E5C0010000 and ebp, 1C0h 5508 00003A15 2520040000 and eax, 420h 5509 00003A1A 8D7010 lea esi, [eax+10h] 5510 00003A1D 8D7830 lea edi, [eax+30h] 5511 00003A20 F7DD neg ebp 5512 00003A22 81E5C0010000 and ebp, 1C0h 5513 00003A28 8B0D[7C9D0000] mov ecx, [mp3_curr_syn_dst] 5514 5515 .samples_lop: 5516 00003A2E BB00200020 mov ebx, 20002000h ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 5517 ; @@out_shift equ (OUT_SHIFT_fast+(8*force_8bit)) 5518 ; out_shift = 14 5519 00003A33 8B14B5[949D0000] mov edx, [mp3_synth_buf+esi*4] ; @@SUM8 macro sum,win,ww,syn 5520 ; @@SUM8 @@sum,@@win1,0,@@syn1 5521 ; IRP nn,0,1,2,3,4,5,6,7 5522 ; mov edx,dword ptr [mp3_synth_buf+syn*4+(nn*64*4)] 5523 ; movsx eax,word ptr [mp3_synth_win+win*2+(nn*64*2)+ww*2] 5524 ; imul eax,edx 5525 ; add sum,eax 5526 00003A3A 0FBF842D[4CEF0400] movsx eax, word [mp3_synth_win+ebp*2] 5527 00003A42 0FAFC2 imul eax, edx 5528 00003A45 01C3 add ebx, eax 5529 00003A47 8B14B5[949E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] ; nn=1 5530 00003A4E 0FBF842D[CCEF0400] movsx eax, word [(mp3_synth_win+80h)+ebp*2] ; ww=0 5531 00003A56 0FAFC2 imul eax, edx 5532 00003A59 01C3 add ebx, eax 5533 00003A5B 8B14B5[949F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 5534 00003A62 0FBF842D[4CF00400] movsx eax, word [(mp3_synth_win+100h)+ebp*2] 5535 00003A6A 0FAFC2 imul eax, edx 5536 00003A6D 01C3 add ebx, eax 5537 00003A6F 8B14B5[94A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 5538 00003A76 0FBF842D[CCF00400] movsx eax, word [(mp3_synth_win+180h)+ebp*2] 5539 00003A7E 0FAFC2 imul eax, edx 5540 00003A81 01C3 add ebx, eax 5541 00003A83 8B14B5[94A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] ; nn=4 5542 00003A8A 0FBF842D[4CF10400] movsx eax, word [(mp3_synth_win+200h)+ebp*2] 5543 00003A92 0FAFC2 imul eax, edx 5544 00003A95 01C3 add ebx, eax 5545 00003A97 8B14B5[94A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 5546 00003A9E 0FBF842D[CCF10400] movsx eax, word [(mp3_synth_win+280h)+ebp*2] 5547 00003AA6 0FAFC2 imul eax, edx 5548 00003AA9 01C3 add ebx, eax 5549 00003AAB 8B14B5[94A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 5550 00003AB2 0FBF842D[4CF20400] movsx eax, word [(mp3_synth_win+300h)+ebp*2] 5551 00003ABA 0FAFC2 imul eax, edx 5552 00003ABD 01C3 add ebx, eax 5553 00003ABF 8B14B5[94A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] ; nn=7 5554 00003AC6 0FBF842D[CCF20400] movsx eax, word [(mp3_synth_win+380h)+ebp*2] ; ww=0 5555 00003ACE 0FAFC2 imul eax, edx 5556 00003AD1 01C3 add ebx, eax 5557 00003AD3 8B14BD[949D0000] mov edx, [mp3_synth_buf+edi*4] 5558 00003ADA 0FBF842D[8CEF0400] movsx eax, word [(mp3_synth_win+40h)+ebp*2] 5559 00003AE2 0FAFC2 imul eax, edx 5560 00003AE5 01C3 add ebx, eax 5561 00003AE7 8B14BD[949E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 5562 00003AEE 0FBF842D[0CF00400] movsx eax, word [(mp3_synth_win+0C0h)+ebp*2] 5563 00003AF6 0FAFC2 imul eax, edx 5564 00003AF9 01C3 add ebx, eax 5565 00003AFB 8B14BD[949F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] ; nn=2, ww=32 5566 00003B02 0FBF842D[8CF00400] movsx eax, word [(mp3_synth_win+140h)+ebp*2] 5567 00003B0A 0FAFC2 imul eax, edx 5568 00003B0D 01C3 add ebx, eax 5569 00003B0F 8B14BD[94A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 5570 00003B16 0FBF842D[0CF10400] movsx eax, word [(mp3_synth_win+1C0h)+ebp*2] 5571 00003B1E 0FAFC2 imul eax, edx 5572 00003B21 01C3 add ebx, eax 5573 00003B23 8B14BD[94A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 5574 00003B2A 0FBF842D[8CF10400] movsx eax, word [(mp3_synth_win+240h)+ebp*2] 5575 00003B32 0FAFC2 imul eax, edx 5576 00003B35 01C3 add ebx, eax 5577 00003B37 8B14BD[94A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 5578 00003B3E 0FBF842D[0CF20400] movsx eax, word [(mp3_synth_win+2C0h)+ebp*2] 5579 00003B46 0FAFC2 imul eax, edx 5580 00003B49 01C3 add ebx, eax 5581 00003B4B 8B14BD[94A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] ; nn=6, ww=32 5582 00003B52 0FBF842D[8CF20400] movsx eax, word [(mp3_synth_win+340h)+ebp*2] 5583 00003B5A 0FAFC2 imul eax, edx 5584 00003B5D 01C3 add ebx, eax 5585 00003B5F 8B14BD[94A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 5586 00003B66 0FBF842D[0CF30400] movsx eax, word [(mp3_synth_win+3C0h)+ebp*2] 5587 00003B6E 0FAFC2 imul eax, edx 5588 00003B71 01C3 add ebx, eax 5589 00003B73 81FB00000040 cmp ebx, 40000000h ; cmp @@sum,10000h SHL (@@out_shift) 5590 00003B79 7328 jnb short .sat 5591 00003B7B C1FB0E sar ebx, 14 ; sar @@sum,(@@out_shift) 5592 00003B7E 81EB00800000 sub ebx, 8000h ; make 16bit signed 5593 5594 .sat_back: 5595 00003B84 668919 mov [ecx], bx 5596 00003B87 030D[38F40000] add ecx, [mp3_samples_dst_step] 5597 00003B8D 83C602 add esi, 2 ; IF rate_shift 5598 ; add @@syn1,1 shl rate_shift 5599 00003B90 83EF02 sub edi, 2 ; sub @@syn2,1 shl rate_shift 5600 00003B93 83C502 add ebp, 2 ; add @@win1,1 shl rate_shift 5601 00003B96 F7C51F000000 test ebp, 1Fh ; IF LONG_WINDOW 5602 00003B9C 0F858CFEFFFF jnz .samples_lop ; test @@win1,1fh 5603 00003BA2 C3 retn 5604 5605 .sat: 5606 00003BA3 C1FB1F sar ebx, 31 ; sar @@sum,31 ; FFFFFFFFh,00000000h 5607 00003BA6 81F3FF7F0000 xor ebx, 7FFFh ; xor @@sum,7fffh ; FFFF8000h,00007FFFh (signed 16bit) 5608 00003BAC EBD6 jmp short .sat_back 5609 5610 .append_copy_to_window: 5611 00003BAE 8D3485[949D0000] lea esi, [mp3_synth_buf+eax*4] 5612 00003BB5 8DBE00080000 lea edi, [esi+2048] ; [esi+512*4] 5613 00003BBB B912000000 mov ecx, 18 ; (12h*4)/4 5614 00003BC0 F3A5 rep movsd 5615 00003BC2 E946FEFFFF jmp .append_copy_to_window_back 5616 5617 5618 ; =============== S U B R O U T I N E ======================================= 5619 5620 5621 synth_16bit_shift_2_fast: 5622 00003BC7 F605[F0750000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 0,2,1 5623 00003BCE 740E jz short .no_rdtsc_supported 5624 00003BD0 0F31 rdtsc 5625 00003BD2 2905[68770000] sub [rdtsc_synth_dct], eax 5626 00003BD8 1915[6C770000] sbb [rdtsc_synth_dct+4], edx 5627 5628 .no_rdtsc_supported: 5629 00003BDE BE[9CBD0000] mov esi, mp3_sb_samples 5630 00003BE3 8B3D[30F40000] mov edi, [mp3_samples_dst] 5631 00003BE9 C705[3CF40000]0000- mov dword [mp3_curr_channel], 0 5631 00003BF1 0000 5632 5633 .synth_channel_lop: 5634 00003BF3 56 push esi 5635 00003BF4 57 push edi 5636 00003BF5 893D[7C9D0000] mov [mp3_curr_syn_dst], edi 5637 00003BFB C705[44F40000]0000- mov dword [mp3_curr_frame], 0 5637 00003C03 0000 5638 5639 .synth_frame_lop: 5640 00003C05 56 push esi 5641 00003C06 F605[F0750000]10 test byte [cpuid_flags], 10h 5642 00003C0D 740E jz short .no_rdtsc_supported@ 5643 00003C0F 0F31 rdtsc 5644 00003C11 2905[80770000] sub [rdtsc_dct32], eax 5645 00003C17 1915[84770000] sbb [rdtsc_dct32+4], edx 5646 5647 .no_rdtsc_supported@: 5648 00003C1D 8B15[3CF40000] mov edx, [mp3_curr_channel] 5649 00003C23 8B0495[94BD0000] mov eax, [mp3_synth_index+edx*4] 5650 00003C2A 832C95[94BD0000]20 sub dword [mp3_synth_index+edx*4], 32 5651 00003C32 C1E20A shl edx, 10 5652 00003C35 25E0010000 and eax, 1E0h ; 1FFh-1Fh 5653 00003C3A 09D0 or eax, edx 5654 00003C3C A3[789D0000] mov [mp3_curr_syn_index], eax 5655 00003C41 8B3D[789D0000] mov edi, [mp3_curr_syn_index] 5656 00003C47 8D3CBD[949D0000] lea edi, [mp3_synth_buf+edi*4] 5657 00003C4E E855F6FFFF call mp3_dct32_shift_2 ; mp3_dct32_shift_&rate_shift 5658 00003C53 F605[F0750000]10 test byte [cpuid_flags], 10h 5659 00003C5A 740E jz short .no_rdtsc_supported@@ 5660 00003C5C 0F31 rdtsc 5661 00003C5E 0105[80770000] add [rdtsc_dct32], eax 5662 00003C64 1115[84770000] adc [rdtsc_dct32+4], edx 5663 5664 .no_rdtsc_supported@@: 5665 00003C6A F605[F0750000]10 test byte [cpuid_flags], 10h 5666 00003C71 740E jz short .no_rdtsc_supported@@@ 5667 00003C73 0F31 rdtsc 5668 00003C75 2905[98770000] sub [rdtsc_synth], eax 5669 00003C7B 1915[9C770000] sbb [rdtsc_synth+4], edx 5670 5671 .no_rdtsc_supported@@@: 5672 00003C81 E888000000 call mp3_synth_filter_this_16bit_shift_2_fast ; 5673 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fas 5674 00003C86 F605[F0750000]10 test byte [cpuid_flags], 10h 5675 00003C8D 740E jz short .no_rdtsc_supported@@@@ 5676 00003C8F 0F31 rdtsc 5677 00003C91 0105[98770000] add [rdtsc_synth], eax 5678 00003C97 1115[9C770000] adc [rdtsc_synth+4], edx 5679 5680 .no_rdtsc_supported@@@@: 5681 00003C9D 5E pop esi 5682 00003C9E A1[38F40000] mov eax, [mp3_samples_dst_step] 5683 00003CA3 C1E005 shl eax, 5 5684 00003CA6 8A0D[EE750000] mov cl, [option_rate_shift] 5685 00003CAC D3E8 shr eax, cl 5686 00003CAE 0105[7C9D0000] add [mp3_curr_syn_dst], eax 5687 00003CB4 81C680000000 add esi, 128 ; SBLIMIT*4 5688 00003CBA FF05[44F40000] inc dword [mp3_curr_frame] 5689 00003CC0 A1[44F40000] mov eax, [mp3_curr_frame] 5690 00003CC5 3B05[809D0000] cmp eax, [mp3_nb_frames] 5691 00003CCB 0F8234FFFFFF jb .synth_frame_lop 5692 00003CD1 5F pop edi 5693 00003CD2 5E pop esi 5694 00003CD3 033D[749D0000] add edi, [mp3_bytes_per_sample] 5695 00003CD9 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 5696 00003CDF FF05[3CF40000] inc dword [mp3_curr_channel] 5697 00003CE5 A1[3CF40000] mov eax, [mp3_curr_channel] 5698 00003CEA 3B05[6C9D0000] cmp eax, [mp3_output_num_channels] 5699 00003CF0 0F82FDFEFFFF jb .synth_channel_lop 5700 00003CF6 F605[F0750000]10 test byte [cpuid_flags], 10h 5701 00003CFD 740E jz short .no_rdtsc_supported@@@@@ 5702 00003CFF 0F31 rdtsc 5703 00003D01 0105[68770000] add [rdtsc_synth_dct], eax 5704 00003D07 1115[6C770000] adc [rdtsc_synth_dct+4], edx 5705 5706 .no_rdtsc_supported@@@@@: 5707 00003D0D C3 retn 5708 5709 5710 ; =============== S U B R O U T I N E ======================================= 5711 5712 5713 mp3_synth_filter_this_16bit_shift_2_fast: 5714 00003D0E A1[789D0000] mov eax, [mp3_curr_syn_index] 5715 00003D13 A9E0010000 test eax, 1E0h ; 1FFh-1Fh 5716 00003D18 0F84A2010000 jz .append_copy_to_window 5717 00003D1E 90 nop 5718 5719 .append_copy_to_window_back: 5720 00003D1F 89C5 mov ebp, eax 5721 00003D21 81E5C0010000 and ebp, 1C0h ; 1FFh-1Fh-20h 5722 00003D27 2520040000 and eax, 420h ; 20h+(1 shl 10) 5723 00003D2C 8D7010 lea esi, [eax+10h] 5724 00003D2F 8D7830 lea edi, [eax+30h] 5725 00003D32 F7DD neg ebp 5726 00003D34 81E5C0010000 and ebp, 1C0h 5727 00003D3A 8B0D[7C9D0000] mov ecx, [mp3_curr_syn_dst] 5728 5729 .samples_lop: 5730 00003D40 BB00200020 mov ebx, 20002000h ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 5731 ; @@out_shift equ (OUT_SHIFT_fast+(8*force_8bit)) 5732 ; out_shift = 14 5733 00003D45 8B14B5[949D0000] mov edx, [mp3_synth_buf+esi*4] 5734 00003D4C 0FBF842D[4CEF0400] movsx eax, word [mp3_synth_win+ebp*2] 5735 00003D54 0FAFC2 imul eax, edx 5736 00003D57 01C3 add ebx, eax 5737 00003D59 8B14B5[949E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] 5738 00003D60 0FBF842D[CCEF0400] movsx eax, word [(mp3_synth_win+80h)+ebp*2] 5739 00003D68 0FAFC2 imul eax, edx 5740 00003D6B 01C3 add ebx, eax 5741 00003D6D 8B14B5[949F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 5742 00003D74 0FBF842D[4CF00400] movsx eax, word [(mp3_synth_win+100h)+ebp*2] 5743 00003D7C 0FAFC2 imul eax, edx 5744 00003D7F 01C3 add ebx, eax 5745 00003D81 8B14B5[94A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 5746 00003D88 0FBF842D[CCF00400] movsx eax, word [(mp3_synth_win+180h)+ebp*2] 5747 00003D90 0FAFC2 imul eax, edx 5748 00003D93 01C3 add ebx, eax 5749 00003D95 8B14B5[94A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] 5750 00003D9C 0FBF842D[4CF10400] movsx eax, word [(mp3_synth_win+200h)+ebp*2] 5751 00003DA4 0FAFC2 imul eax, edx 5752 00003DA7 01C3 add ebx, eax 5753 00003DA9 8B14B5[94A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 5754 00003DB0 0FBF842D[CCF10400] movsx eax, word [(mp3_synth_win+280h)+ebp*2] 5755 00003DB8 0FAFC2 imul eax, edx 5756 00003DBB 01C3 add ebx, eax 5757 00003DBD 8B14B5[94A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 5758 00003DC4 0FBF842D[4CF20400] movsx eax, word [(mp3_synth_win+300h)+ebp*2] 5759 00003DCC 0FAFC2 imul eax, edx 5760 00003DCF 01C3 add ebx, eax 5761 00003DD1 8B14B5[94A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 5762 00003DD8 0FBF842D[CCF20400] movsx eax, word [(mp3_synth_win+380h)+ebp*2] 5763 00003DE0 0FAFC2 imul eax, edx 5764 00003DE3 01C3 add ebx, eax 5765 00003DE5 8B14BD[949D0000] mov edx, [mp3_synth_buf+edi*4] 5766 00003DEC 0FBF842D[8CEF0400] movsx eax, word [(mp3_synth_win+40h)+ebp*2] 5767 00003DF4 0FAFC2 imul eax, edx 5768 00003DF7 01C3 add ebx, eax 5769 00003DF9 8B14BD[949E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 5770 00003E00 0FBF842D[0CF00400] movsx eax, word [(mp3_synth_win+0C0h)+ebp*2] 5771 00003E08 0FAFC2 imul eax, edx 5772 00003E0B 01C3 add ebx, eax 5773 00003E0D 8B14BD[949F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] 5774 00003E14 0FBF842D[8CF00400] movsx eax, word [(mp3_synth_win+140h)+ebp*2] 5775 00003E1C 0FAFC2 imul eax, edx 5776 00003E1F 01C3 add ebx, eax 5777 00003E21 8B14BD[94A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 5778 00003E28 0FBF842D[0CF10400] movsx eax, word [(mp3_synth_win+1C0h)+ebp*2] 5779 00003E30 0FAFC2 imul eax, edx 5780 00003E33 01C3 add ebx, eax 5781 00003E35 8B14BD[94A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 5782 00003E3C 0FBF842D[8CF10400] movsx eax, word [(mp3_synth_win+240h)+ebp*2] 5783 00003E44 0FAFC2 imul eax, edx 5784 00003E47 01C3 add ebx, eax 5785 00003E49 8B14BD[94A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 5786 00003E50 0FBF842D[0CF20400] movsx eax, word [(mp3_synth_win+2C0h)+ebp*2] 5787 00003E58 0FAFC2 imul eax, edx 5788 00003E5B 01C3 add ebx, eax 5789 00003E5D 8B14BD[94A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 5790 00003E64 0FBF842D[8CF20400] movsx eax, word [(mp3_synth_win+340h)+ebp*2] 5791 00003E6C 0FAFC2 imul eax, edx 5792 00003E6F 01C3 add ebx, eax 5793 00003E71 8B14BD[94A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 5794 00003E78 0FBF842D[0CF30400] movsx eax, word [(mp3_synth_win+3C0h)+ebp*2] 5795 00003E80 0FAFC2 imul eax, edx 5796 00003E83 01C3 add ebx, eax 5797 00003E85 81FB00000040 cmp ebx, 40000000h 5798 00003E8B 7328 jnb short .sat 5799 00003E8D C1FB0E sar ebx, 14 5800 00003E90 81EB00800000 sub ebx, 8000h ; make 16bit signed 5801 5802 .sat_back: 5803 00003E96 668919 mov [ecx], bx 5804 00003E99 030D[38F40000] add ecx, [mp3_samples_dst_step] 5805 00003E9F 83C604 add esi, 4 5806 00003EA2 83EF04 sub edi, 4 5807 00003EA5 83C504 add ebp, 4 5808 00003EA8 F7C51F000000 test ebp, 1Fh 5809 00003EAE 0F858CFEFFFF jnz .samples_lop 5810 00003EB4 C3 retn 5811 5812 .sat: 5813 00003EB5 C1FB1F sar ebx, 31 5814 00003EB8 81F3FF7F0000 xor ebx, 7FFFh 5815 00003EBE EBD6 jmp short .sat_back 5816 5817 .append_copy_to_window: 5818 00003EC0 8D3485[949D0000] lea esi, [mp3_synth_buf+eax*4] 5819 00003EC7 8DBE00080000 lea edi, [esi+2048] 5820 00003ECD B912000000 mov ecx, 18 5821 00003ED2 F3A5 rep movsd 5822 00003ED4 E946FEFFFF jmp .append_copy_to_window_back 5823 5824 5825 ; =============== S U B R O U T I N E ======================================= 5826 5827 5828 synth_8bit_shift_0_fast: 5829 00003ED9 F605[F0750000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 1,0,1 5830 00003EE0 740E jz short .no_rdtsc_supported 5831 00003EE2 0F31 rdtsc 5832 00003EE4 2905[68770000] sub [rdtsc_synth_dct], eax 5833 00003EEA 1915[6C770000] sbb [rdtsc_synth_dct+4], edx 5834 5835 .no_rdtsc_supported: 5836 00003EF0 BE[9CBD0000] mov esi, mp3_sb_samples 5837 00003EF5 8B3D[30F40000] mov edi, [mp3_samples_dst] 5838 00003EFB C705[3CF40000]0000- mov dword [mp3_curr_channel], 0 5838 00003F03 0000 5839 5840 .synth_channel_lop: 5841 00003F05 56 push esi 5842 00003F06 57 push edi 5843 00003F07 893D[7C9D0000] mov [mp3_curr_syn_dst], edi 5844 00003F0D C705[44F40000]0000- mov dword [mp3_curr_frame], 0 5844 00003F15 0000 5845 5846 .synth_frame_lop: 5847 00003F17 56 push esi 5848 00003F18 F605[F0750000]10 test byte [cpuid_flags], 10h 5849 00003F1F 740E jz short .no_rdtsc_supported@ 5850 00003F21 0F31 rdtsc 5851 00003F23 2905[80770000] sub [rdtsc_dct32], eax 5852 00003F29 1915[84770000] sbb [rdtsc_dct32+4], edx 5853 5854 .no_rdtsc_supported@: 5855 00003F2F 8B15[3CF40000] mov edx, [mp3_curr_channel] 5856 00003F35 8B0495[94BD0000] mov eax, [mp3_synth_index+edx*4] 5857 00003F3C 832C95[94BD0000]20 sub dword [mp3_synth_index+edx*4], 32 5858 00003F44 C1E20A shl edx, 10 5859 00003F47 25E0010000 and eax, 1E0h ; 1FFh-1Fh 5860 00003F4C 09D0 or eax, edx 5861 00003F4E A3[789D0000] mov [mp3_curr_syn_index], eax 5862 00003F53 8B3D[789D0000] mov edi, [mp3_curr_syn_index] 5863 00003F59 8D3CBD[949D0000] lea edi, [mp3_synth_buf+edi*4] 5864 00003F60 E873E6FFFF call mp3_dct32_shift_0 ; mp3_dct32_shift_&rate_shift 5865 00003F65 F605[F0750000]10 test byte [cpuid_flags], 10h 5866 00003F6C 740E jz short .no_rdtsc_supported@@ 5867 00003F6E 0F31 rdtsc 5868 00003F70 0105[80770000] add [rdtsc_dct32], eax 5869 00003F76 1115[84770000] adc [rdtsc_dct32+4], edx 5870 5871 .no_rdtsc_supported@@: 5872 00003F7C F605[F0750000]10 test byte [cpuid_flags], 10h 5873 00003F83 740E jz short .no_rdtsc_supported@@@ 5874 00003F85 0F31 rdtsc 5875 00003F87 2905[98770000] sub [rdtsc_synth], eax 5876 00003F8D 1915[9C770000] sbb [rdtsc_synth+4], edx 5877 5878 .no_rdtsc_supported@@@: 5879 00003F93 E888000000 call mp3_synth_filter_this_8bit_shift_0_fast ; 5880 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 5881 00003F98 F605[F0750000]10 test byte [cpuid_flags], 10h 5882 00003F9F 740E jz short .no_rdtsc_supported@@@@ 5883 00003FA1 0F31 rdtsc 5884 00003FA3 0105[98770000] add [rdtsc_synth], eax 5885 00003FA9 1115[9C770000] adc [rdtsc_synth+4], edx 5886 5887 .no_rdtsc_supported@@@@: 5888 00003FAF 5E pop esi 5889 00003FB0 A1[38F40000] mov eax, [mp3_samples_dst_step] 5890 00003FB5 C1E005 shl eax, 5 5891 00003FB8 8A0D[EE750000] mov cl, [option_rate_shift] 5892 00003FBE D3E8 shr eax, cl 5893 00003FC0 0105[7C9D0000] add [mp3_curr_syn_dst], eax 5894 00003FC6 81C680000000 add esi, 128 ; SBLIMIT*4 5895 00003FCC FF05[44F40000] inc dword [mp3_curr_frame] 5896 00003FD2 A1[44F40000] mov eax, [mp3_curr_frame] 5897 00003FD7 3B05[809D0000] cmp eax, [mp3_nb_frames] 5898 00003FDD 0F8234FFFFFF jb .synth_frame_lop 5899 00003FE3 5F pop edi 5900 00003FE4 5E pop esi 5901 00003FE5 033D[749D0000] add edi, [mp3_bytes_per_sample] 5902 00003FEB 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 5903 00003FF1 FF05[3CF40000] inc dword [mp3_curr_channel] 5904 00003FF7 A1[3CF40000] mov eax, [mp3_curr_channel] 5905 00003FFC 3B05[6C9D0000] cmp eax, [mp3_output_num_channels] 5906 00004002 0F82FDFEFFFF jb .synth_channel_lop 5907 00004008 F605[F0750000]10 test byte [cpuid_flags], 10h 5908 0000400F 740E jz short .no_rdtsc_supported@@@@@ 5909 00004011 0F31 rdtsc 5910 00004013 0105[68770000] add [rdtsc_synth_dct], eax 5911 00004019 1115[6C770000] adc [rdtsc_synth_dct+4], edx 5912 5913 .no_rdtsc_supported@@@@@: 5914 0000401F C3 retn 5915 5916 5917 ; =============== S U B R O U T I N E ======================================= 5918 5919 5920 mp3_synth_filter_this_8bit_shift_0_fast: 5921 00004020 A1[789D0000] mov eax, [mp3_curr_syn_index] 5922 00004025 A9E0010000 test eax, 1E0h ; 1FFh-1Fh 5923 0000402A 0F8491010000 jz .append_copy_to_window 5924 00004030 90 nop 5925 5926 .append_copy_to_window_back: 5927 00004031 89C5 mov ebp, eax 5928 00004033 81E5C0010000 and ebp, 1C0h ; 1FFh-1Fh-20h 5929 00004039 2520040000 and eax, 420h ; 20h+(1 shl 10) 5930 0000403E 8D7010 lea esi, [eax+10h] 5931 00004041 8D7830 lea edi, [eax+30h] 5932 00004044 F7DD neg ebp 5933 00004046 81E5C0010000 and ebp, 1C0h 5934 0000404C 8B0D[7C9D0000] mov ecx, [mp3_curr_syn_dst] 5935 5936 .samples_lop: 5937 00004052 BB00002020 mov ebx, 20200000h ; mov @@sum,(80h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 5938 ; @@out_shift equ (OUT_SHIFT_fast(8*force_8bit)) 5939 ; @@out_shift = 22 5940 00004057 8B14B5[949D0000] mov edx, [mp3_synth_buf+esi*4] ; @@SUM8 macro sum,win,ww,syn 5941 ; @@SUM8 @@sum,@@win1,0,@@syn1 5942 ; IRP nn,0,1,2,3,4,5,6,7 5943 ; mov edx,dword ptr [mp3_synth_buf+syn*4+(nn*64*4)] 5944 ; movsx eax,word ptr [mp3_synth_win+win*2+(nn*64*2)+ww*2] 5945 ; imul eax,edx 5946 ; add sum,eax 5947 0000405E 0FBF842D[4CEF0400] movsx eax, word [mp3_synth_win+ebp*2] 5948 00004066 0FAFC2 imul eax, edx 5949 00004069 01C3 add ebx, eax 5950 0000406B 8B14B5[949E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] ; nn=1 5951 00004072 0FBF842D[CCEF0400] movsx eax, word [(mp3_synth_win+80h)+ebp*2] ; ww=0 5952 0000407A 0FAFC2 imul eax, edx 5953 0000407D 01C3 add ebx, eax 5954 0000407F 8B14B5[949F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 5955 00004086 0FBF842D[4CF00400] movsx eax, word [(mp3_synth_win+100h)+ebp*2] 5956 0000408E 0FAFC2 imul eax, edx 5957 00004091 01C3 add ebx, eax 5958 00004093 8B14B5[94A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 5959 0000409A 0FBF842D[CCF00400] movsx eax, word [(mp3_synth_win+180h)+ebp*2] 5960 000040A2 0FAFC2 imul eax, edx 5961 000040A5 01C3 add ebx, eax 5962 000040A7 8B14B5[94A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] 5963 000040AE 0FBF842D[4CF10400] movsx eax, word [(mp3_synth_win+200h)+ebp*2] 5964 000040B6 0FAFC2 imul eax, edx 5965 000040B9 01C3 add ebx, eax 5966 000040BB 8B14B5[94A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 5967 000040C2 0FBF842D[CCF10400] movsx eax, word [(mp3_synth_win+280h)+ebp*2] 5968 000040CA 0FAFC2 imul eax, edx 5969 000040CD 01C3 add ebx, eax 5970 000040CF 8B14B5[94A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 5971 000040D6 0FBF842D[4CF20400] movsx eax, word [(mp3_synth_win+300h)+ebp*2] 5972 000040DE 0FAFC2 imul eax, edx 5973 000040E1 01C3 add ebx, eax 5974 000040E3 8B14B5[94A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 5975 000040EA 0FBF842D[CCF20400] movsx eax, word [(mp3_synth_win+380h)+ebp*2] 5976 000040F2 0FAFC2 imul eax, edx 5977 000040F5 01C3 add ebx, eax 5978 000040F7 8B14BD[949D0000] mov edx, [mp3_synth_buf+edi*4] 5979 000040FE 0FBF842D[8CEF0400] movsx eax, word [(mp3_synth_win+40h)+ebp*2] 5980 00004106 0FAFC2 imul eax, edx 5981 00004109 01C3 add ebx, eax 5982 0000410B 8B14BD[949E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 5983 00004112 0FBF842D[0CF00400] movsx eax, word [(mp3_synth_win+0C0h)+ebp*2] 5984 0000411A 0FAFC2 imul eax, edx 5985 0000411D 01C3 add ebx, eax 5986 0000411F 8B14BD[949F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] ; nn=2 5987 00004126 0FBF842D[8CF00400] movsx eax, word [(mp3_synth_win+140h)+ebp*2] ; ww=32 5988 0000412E 0FAFC2 imul eax, edx 5989 00004131 01C3 add ebx, eax 5990 00004133 8B14BD[94A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 5991 0000413A 0FBF842D[0CF10400] movsx eax, word [(mp3_synth_win+1C0h)+ebp*2] 5992 00004142 0FAFC2 imul eax, edx 5993 00004145 01C3 add ebx, eax 5994 00004147 8B14BD[94A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 5995 0000414E 0FBF842D[8CF10400] movsx eax, word [(mp3_synth_win+240h)+ebp*2] 5996 00004156 0FAFC2 imul eax, edx 5997 00004159 01C3 add ebx, eax 5998 0000415B 8B14BD[94A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 5999 00004162 0FBF842D[0CF20400] movsx eax, word [(mp3_synth_win+2C0h)+ebp*2] 6000 0000416A 0FAFC2 imul eax, edx 6001 0000416D 01C3 add ebx, eax 6002 0000416F 8B14BD[94A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 6003 00004176 0FBF842D[8CF20400] movsx eax, word [(mp3_synth_win+340h)+ebp*2] 6004 0000417E 0FAFC2 imul eax, edx 6005 00004181 01C3 add ebx, eax 6006 00004183 8B14BD[94A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 6007 0000418A 0FBF842D[0CF30400] movsx eax, word [(mp3_synth_win+3C0h)+ebp*2] 6008 00004192 0FAFC2 imul eax, edx 6009 00004195 01C3 add ebx, eax 6010 00004197 81FB00000040 cmp ebx, 40000000h ; cmp @@sum,100h SHL (@@out_shift) 6011 0000419D 731B jnb short .sat 6012 0000419F C1FB16 sar ebx, 22 ; sar @@sum,(@@out_shift) 6013 6014 .sat_back: 6015 000041A2 8819 mov [ecx], bl ; mov byte ptr [@@dst],@@sum_8bit 6016 000041A4 030D[38F40000] add ecx, [mp3_samples_dst_step] 6017 000041AA 46 inc esi ; inc @@syn1 6018 000041AB 4F dec edi ; dec @@syn2 6019 000041AC 45 inc ebp ; inc @@win1 6020 000041AD F7C51F000000 test ebp, 1Fh ; IF LONG_WINDOW 6021 ; test @@win1,1fh 6022 000041B3 0F8599FEFFFF jnz .samples_lop 6023 000041B9 C3 retn 6024 6025 .sat: 6026 000041BA C1FB1F sar ebx, 31 ; sar @@sum,31 ; FFFFFFFFh,00000000h 6027 000041BD F7D3 not ebx ; IF force_8bit 6028 ; not @@sum ; 00000000h,FFFFFFFFh (unsigned 8bit) 6029 000041BF EBE1 jmp short .sat_back 6030 6031 .append_copy_to_window: 6032 000041C1 8D3485[949D0000] lea esi, [mp3_synth_buf+eax*4] 6033 000041C8 8DBE00080000 lea edi, [esi+2048] ; [esi+512*4] 6034 000041CE B912000000 mov ecx, 18 ; (12h*4)/4 6035 000041D3 F3A5 rep movsd 6036 000041D5 E957FEFFFF jmp .append_copy_to_window_back 6037 6038 6039 ; =============== S U B R O U T I N E ======================================= 6040 6041 6042 synth_8bit_shift_1_fast: 6043 000041DA F605[F0750000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 1,1,1 6044 000041E1 740E jz short .no_rdtsc_supported 6045 000041E3 0F31 rdtsc 6046 000041E5 2905[68770000] sub [rdtsc_synth_dct], eax 6047 000041EB 1915[6C770000] sbb [rdtsc_synth_dct+4], edx 6048 6049 .no_rdtsc_supported: 6050 000041F1 BE[9CBD0000] mov esi, mp3_sb_samples 6051 000041F6 8B3D[30F40000] mov edi, [mp3_samples_dst] 6052 000041FC C705[3CF40000]0000- mov dword [mp3_curr_channel], 0 6052 00004204 0000 6053 6054 .synth_channel_lop: 6055 00004206 56 push esi 6056 00004207 57 push edi 6057 00004208 893D[7C9D0000] mov [mp3_curr_syn_dst], edi 6058 0000420E C705[44F40000]0000- mov dword [mp3_curr_frame], 0 6058 00004216 0000 6059 6060 .synth_frame_lop: 6061 00004218 56 push esi 6062 00004219 F605[F0750000]10 test byte [cpuid_flags], 10h 6063 00004220 740E jz short .no_rdtsc_supported@ 6064 00004222 0F31 rdtsc 6065 00004224 2905[80770000] sub [rdtsc_dct32], eax 6066 0000422A 1915[84770000] sbb [rdtsc_dct32+4], edx 6067 6068 .no_rdtsc_supported@: 6069 00004230 8B15[3CF40000] mov edx, [mp3_curr_channel] 6070 00004236 8B0495[94BD0000] mov eax, [mp3_synth_index+edx*4] 6071 0000423D 832C95[94BD0000]20 sub dword [mp3_synth_index+edx*4], 32 6072 00004245 C1E20A shl edx, 10 6073 00004248 25E0010000 and eax, 1E0h ; 1FFh-1Fh 6074 0000424D 09D0 or eax, edx 6075 0000424F A3[789D0000] mov [mp3_curr_syn_index], eax 6076 00004254 8B3D[789D0000] mov edi, [mp3_curr_syn_index] 6077 0000425A 8D3CBD[949D0000] lea edi, [mp3_synth_buf+edi*4] 6078 00004261 E852ECFFFF call mp3_dct32_shift_1 ; mp3_dct32_shift_&rate_shift 6079 00004266 F605[F0750000]10 test byte [cpuid_flags], 10h 6080 0000426D 740E jz short .no_rdtsc_supported@@ 6081 0000426F 0F31 rdtsc 6082 00004271 0105[80770000] add [rdtsc_dct32], eax 6083 00004277 1115[84770000] adc [rdtsc_dct32+4], edx 6084 6085 .no_rdtsc_supported@@: 6086 0000427D F605[F0750000]10 test byte [cpuid_flags], 10h 6087 00004284 740E jz short .no_rdtsc_supported@@@ 6088 00004286 0F31 rdtsc 6089 00004288 2905[98770000] sub [rdtsc_synth], eax 6090 0000428E 1915[9C770000] sbb [rdtsc_synth+4], edx 6091 6092 .no_rdtsc_supported@@@: 6093 00004294 E888000000 call mp3_synth_filter_this_8bit_shift_1_fast ; 6094 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 6095 00004299 F605[F0750000]10 test byte [cpuid_flags], 10h 6096 000042A0 740E jz short .no_rdtsc_supported@@@@ 6097 000042A2 0F31 rdtsc 6098 000042A4 0105[98770000] add [rdtsc_synth], eax 6099 000042AA 1115[9C770000] adc [rdtsc_synth+4], edx 6100 6101 .no_rdtsc_supported@@@@: 6102 000042B0 5E pop esi 6103 000042B1 A1[38F40000] mov eax, [mp3_samples_dst_step] 6104 000042B6 C1E005 shl eax, 5 6105 000042B9 8A0D[EE750000] mov cl, [option_rate_shift] 6106 000042BF D3E8 shr eax, cl 6107 000042C1 0105[7C9D0000] add [mp3_curr_syn_dst], eax 6108 000042C7 81C680000000 add esi, 128 ; SBLIMIT*4 6109 000042CD FF05[44F40000] inc dword [mp3_curr_frame] 6110 000042D3 A1[44F40000] mov eax, [mp3_curr_frame] 6111 000042D8 3B05[809D0000] cmp eax, [mp3_nb_frames] 6112 000042DE 0F8234FFFFFF jb .synth_frame_lop 6113 000042E4 5F pop edi 6114 000042E5 5E pop esi 6115 000042E6 033D[749D0000] add edi, [mp3_bytes_per_sample] 6116 000042EC 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 6117 000042F2 FF05[3CF40000] inc dword [mp3_curr_channel] 6118 000042F8 A1[3CF40000] mov eax, [mp3_curr_channel] 6119 000042FD 3B05[6C9D0000] cmp eax, [mp3_output_num_channels] 6120 00004303 0F82FDFEFFFF jb .synth_channel_lop 6121 00004309 F605[F0750000]10 test byte [cpuid_flags], 10h 6122 00004310 740E jz short .no_rdtsc_supported@@@@@ 6123 00004312 0F31 rdtsc 6124 00004314 0105[68770000] add [rdtsc_synth_dct], eax 6125 0000431A 1115[6C770000] adc [rdtsc_synth_dct+4], edx 6126 6127 .no_rdtsc_supported@@@@@: 6128 00004320 C3 retn 6129 6130 6131 ; =============== S U B R O U T I N E ======================================= 6132 6133 6134 mp3_synth_filter_this_8bit_shift_1_fast: 6135 00004321 A1[789D0000] mov eax, [mp3_curr_syn_index] 6136 00004326 A9E0010000 test eax, 1E0h 6137 0000432B 0F8497010000 jz .append_copy_to_window 6138 00004331 90 nop 6139 6140 .append_copy_to_window_back: 6141 00004332 89C5 mov ebp, eax 6142 00004334 81E5C0010000 and ebp, 1C0h 6143 0000433A 2520040000 and eax, 420h 6144 0000433F 8D7010 lea esi, [eax+10h] 6145 00004342 8D7830 lea edi, [eax+30h] 6146 00004345 F7DD neg ebp 6147 00004347 81E5C0010000 and ebp, 1C0h 6148 0000434D 8B0D[7C9D0000] mov ecx, [mp3_curr_syn_dst] 6149 6150 .samples_lop: 6151 00004353 BB00002020 mov ebx, 20200000h 6152 00004358 8B14B5[949D0000] mov edx, [mp3_synth_buf+esi*4] 6153 0000435F 0FBF842D[4CEF0400] movsx eax, word [mp3_synth_win+ebp*2] 6154 00004367 0FAFC2 imul eax, edx 6155 0000436A 01C3 add ebx, eax 6156 0000436C 8B14B5[949E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] 6157 00004373 0FBF842D[CCEF0400] movsx eax, word [(mp3_synth_win+80h)+ebp*2] 6158 0000437B 0FAFC2 imul eax, edx 6159 0000437E 01C3 add ebx, eax 6160 00004380 8B14B5[949F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 6161 00004387 0FBF842D[4CF00400] movsx eax, word [(mp3_synth_win+100h)+ebp*2] 6162 0000438F 0FAFC2 imul eax, edx 6163 00004392 01C3 add ebx, eax 6164 00004394 8B14B5[94A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 6165 0000439B 0FBF842D[CCF00400] movsx eax, word [(mp3_synth_win+180h)+ebp*2] 6166 000043A3 0FAFC2 imul eax, edx 6167 000043A6 01C3 add ebx, eax 6168 000043A8 8B14B5[94A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] 6169 000043AF 0FBF842D[4CF10400] movsx eax, word [(mp3_synth_win+200h)+ebp*2] 6170 000043B7 0FAFC2 imul eax, edx 6171 000043BA 01C3 add ebx, eax 6172 000043BC 8B14B5[94A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 6173 000043C3 0FBF842D[CCF10400] movsx eax, word [(mp3_synth_win+280h)+ebp*2] 6174 000043CB 0FAFC2 imul eax, edx 6175 000043CE 01C3 add ebx, eax 6176 000043D0 8B14B5[94A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 6177 000043D7 0FBF842D[4CF20400] movsx eax, word [(mp3_synth_win+300h)+ebp*2] 6178 000043DF 0FAFC2 imul eax, edx 6179 000043E2 01C3 add ebx, eax 6180 000043E4 8B14B5[94A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 6181 000043EB 0FBF842D[CCF20400] movsx eax, word [(mp3_synth_win+380h)+ebp*2] 6182 000043F3 0FAFC2 imul eax, edx 6183 000043F6 01C3 add ebx, eax 6184 000043F8 8B14BD[949D0000] mov edx, [mp3_synth_buf+edi*4] 6185 000043FF 0FBF842D[8CEF0400] movsx eax, word [(mp3_synth_win+40h)+ebp*2] 6186 00004407 0FAFC2 imul eax, edx 6187 0000440A 01C3 add ebx, eax 6188 0000440C 8B14BD[949E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 6189 00004413 0FBF842D[0CF00400] movsx eax, word [(mp3_synth_win+0C0h)+ebp*2] 6190 0000441B 0FAFC2 imul eax, edx 6191 0000441E 01C3 add ebx, eax 6192 00004420 8B14BD[949F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] 6193 00004427 0FBF842D[8CF00400] movsx eax, word [(mp3_synth_win+140h)+ebp*2] 6194 0000442F 0FAFC2 imul eax, edx 6195 00004432 01C3 add ebx, eax 6196 00004434 8B14BD[94A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 6197 0000443B 0FBF842D[0CF10400] movsx eax, word [(mp3_synth_win+1C0h)+ebp*2] 6198 00004443 0FAFC2 imul eax, edx 6199 00004446 01C3 add ebx, eax 6200 00004448 8B14BD[94A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 6201 0000444F 0FBF842D[8CF10400] movsx eax, word [(mp3_synth_win+240h)+ebp*2] 6202 00004457 0FAFC2 imul eax, edx 6203 0000445A 01C3 add ebx, eax 6204 0000445C 8B14BD[94A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 6205 00004463 0FBF842D[0CF20400] movsx eax, word [(mp3_synth_win+2C0h)+ebp*2] 6206 0000446B 0FAFC2 imul eax, edx 6207 0000446E 01C3 add ebx, eax 6208 00004470 8B14BD[94A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 6209 00004477 0FBF842D[8CF20400] movsx eax, word [(mp3_synth_win+340h)+ebp*2] 6210 0000447F 0FAFC2 imul eax, edx 6211 00004482 01C3 add ebx, eax 6212 00004484 8B14BD[94A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 6213 0000448B 0FBF842D[0CF30400] movsx eax, word [(mp3_synth_win+3C0h)+ebp*2] 6214 00004493 0FAFC2 imul eax, edx 6215 00004496 01C3 add ebx, eax 6216 00004498 81FB00000040 cmp ebx, 40000000h 6217 0000449E 7321 jnb short .sat 6218 000044A0 C1FB16 sar ebx, 22 6219 6220 .sat_back: 6221 000044A3 8819 mov [ecx], bl 6222 000044A5 030D[38F40000] add ecx, [mp3_samples_dst_step] 6223 000044AB 83C602 add esi, 2 6224 000044AE 83EF02 sub edi, 2 6225 000044B1 83C502 add ebp, 2 6226 000044B4 F7C51F000000 test ebp, 1Fh 6227 000044BA 0F8593FEFFFF jnz .samples_lop 6228 000044C0 C3 retn 6229 6230 .sat: 6231 000044C1 C1FB1F sar ebx, 31 6232 000044C4 F7D3 not ebx 6233 000044C6 EBDB jmp short .sat_back 6234 6235 .append_copy_to_window: 6236 000044C8 8D3485[949D0000] lea esi, [mp3_synth_buf+eax*4] 6237 000044CF 8DBE00080000 lea edi, [esi+2048] 6238 000044D5 B912000000 mov ecx, 18 6239 000044DA F3A5 rep movsd 6240 000044DC E951FEFFFF jmp .append_copy_to_window_back 6241 6242 6243 ; =============== S U B R O U T I N E ======================================= 6244 6245 6246 synth_8bit_shift_2_fast: 6247 000044E1 F605[F0750000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 1,2,1 6248 000044E8 740E jz short .no_rdtsc_supported 6249 000044EA 0F31 rdtsc 6250 000044EC 2905[68770000] sub [rdtsc_synth_dct], eax 6251 000044F2 1915[6C770000] sbb [rdtsc_synth_dct+4], edx 6252 6253 .no_rdtsc_supported: 6254 000044F8 BE[9CBD0000] mov esi, mp3_sb_samples 6255 000044FD 8B3D[30F40000] mov edi, [mp3_samples_dst] 6256 00004503 C705[3CF40000]0000- mov dword [mp3_curr_channel], 0 6256 0000450B 0000 6257 6258 .synth_channel_lop: 6259 0000450D 56 push esi 6260 0000450E 57 push edi 6261 0000450F 893D[7C9D0000] mov [mp3_curr_syn_dst], edi 6262 00004515 C705[44F40000]0000- mov dword [mp3_curr_frame], 0 6262 0000451D 0000 6263 6264 .synth_frame_lop: 6265 0000451F 56 push esi 6266 00004520 F605[F0750000]10 test byte [cpuid_flags], 10h 6267 00004527 740E jz short .no_rdtsc_supported@ 6268 00004529 0F31 rdtsc 6269 0000452B 2905[80770000] sub [rdtsc_dct32], eax 6270 00004531 1915[84770000] sbb [rdtsc_dct32+4], edx 6271 6272 .no_rdtsc_supported@: 6273 00004537 8B15[3CF40000] mov edx, [mp3_curr_channel] 6274 0000453D 8B0495[94BD0000] mov eax, [mp3_synth_index+edx*4] 6275 00004544 832C95[94BD0000]20 sub dword [mp3_synth_index+edx*4], 32 6276 0000454C C1E20A shl edx, 10 6277 0000454F 25E0010000 and eax, 1E0h ; 1FFh-1Fh 6278 00004554 09D0 or eax, edx 6279 00004556 A3[789D0000] mov [mp3_curr_syn_index], eax 6280 0000455B 8B3D[789D0000] mov edi, [mp3_curr_syn_index] 6281 00004561 8D3CBD[949D0000] lea edi, [mp3_synth_buf+edi*4] 6282 00004568 E83BEDFFFF call mp3_dct32_shift_2 ; mp3_dct32_shift_&rate_shift 6283 0000456D F605[F0750000]10 test byte [cpuid_flags], 10h 6284 00004574 740E jz short .no_rdtsc_supported@@ 6285 00004576 0F31 rdtsc 6286 00004578 0105[80770000] add [rdtsc_dct32], eax 6287 0000457E 1115[84770000] adc [rdtsc_dct32+4], edx 6288 6289 .no_rdtsc_supported@@: 6290 00004584 F605[F0750000]10 test byte [cpuid_flags], 10h 6291 0000458B 740E jz short .no_rdtsc_supported@@@ 6292 0000458D 0F31 rdtsc 6293 0000458F 2905[98770000] sub [rdtsc_synth], eax 6294 00004595 1915[9C770000] sbb [rdtsc_synth+4], edx 6295 6296 .no_rdtsc_supported@@@: 6297 0000459B E888000000 call mp3_synth_filter_this_8bit_shift_2_fast ; 6298 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 6299 000045A0 F605[F0750000]10 test byte [cpuid_flags], 10h 6300 000045A7 740E jz short .no_rdtsc_supported@@@@ 6301 000045A9 0F31 rdtsc 6302 000045AB 0105[98770000] add [rdtsc_synth], eax 6303 000045B1 1115[9C770000] adc [rdtsc_synth+4], edx 6304 6305 .no_rdtsc_supported@@@@: 6306 000045B7 5E pop esi 6307 000045B8 A1[38F40000] mov eax, [mp3_samples_dst_step] 6308 000045BD C1E005 shl eax, 5 6309 000045C0 8A0D[EE750000] mov cl, [option_rate_shift] 6310 000045C6 D3E8 shr eax, cl 6311 000045C8 0105[7C9D0000] add [mp3_curr_syn_dst], eax 6312 000045CE 81C680000000 add esi, 128 ; SBLIMIT*4 6313 000045D4 FF05[44F40000] inc dword [mp3_curr_frame] 6314 000045DA A1[44F40000] mov eax, [mp3_curr_frame] 6315 000045DF 3B05[809D0000] cmp eax, [mp3_nb_frames] 6316 000045E5 0F8234FFFFFF jb .synth_frame_lop 6317 000045EB 5F pop edi 6318 000045EC 5E pop esi 6319 000045ED 033D[749D0000] add edi, [mp3_bytes_per_sample] 6320 000045F3 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 6321 000045F9 FF05[3CF40000] inc dword [mp3_curr_channel] 6322 000045FF A1[3CF40000] mov eax, [mp3_curr_channel] 6323 00004604 3B05[6C9D0000] cmp eax, [mp3_output_num_channels] 6324 0000460A 0F82FDFEFFFF jb .synth_channel_lop 6325 00004610 F605[F0750000]10 test byte [cpuid_flags], 10h 6326 00004617 740E jz short .no_rdtsc_supported@@@@@ 6327 00004619 0F31 rdtsc 6328 0000461B 0105[68770000] add [rdtsc_synth_dct], eax 6329 00004621 1115[6C770000] adc [rdtsc_synth_dct+4], edx 6330 6331 .no_rdtsc_supported@@@@@: 6332 00004627 C3 retn 6333 6334 6335 ; =============== S U B R O U T I N E ======================================= 6336 6337 6338 mp3_synth_filter_this_8bit_shift_2_fast: 6339 00004628 A1[789D0000] mov eax, [mp3_curr_syn_index] 6340 0000462D A9E0010000 test eax, 1E0h 6341 00004632 0F8497010000 jz .append_copy_to_window 6342 00004638 90 nop 6343 6344 .append_copy_to_window_back: 6345 00004639 89C5 mov ebp, eax 6346 0000463B 81E5C0010000 and ebp, 1C0h 6347 00004641 2520040000 and eax, 420h 6348 00004646 8D7010 lea esi, [eax+10h] 6349 00004649 8D7830 lea edi, [eax+30h] 6350 0000464C F7DD neg ebp 6351 0000464E 81E5C0010000 and ebp, 1C0h 6352 00004654 8B0D[7C9D0000] mov ecx, [mp3_curr_syn_dst] 6353 6354 .samples_lop: 6355 0000465A BB00002020 mov ebx, 20200000h 6356 0000465F 8B14B5[949D0000] mov edx, [mp3_synth_buf+esi*4] 6357 00004666 0FBF842D[4CEF0400] movsx eax, word [mp3_synth_win+ebp*2] 6358 0000466E 0FAFC2 imul eax, edx 6359 00004671 01C3 add ebx, eax 6360 00004673 8B14B5[949E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] 6361 0000467A 0FBF842D[CCEF0400] movsx eax, word [(mp3_synth_win+80h)+ebp*2] 6362 00004682 0FAFC2 imul eax, edx 6363 00004685 01C3 add ebx, eax 6364 00004687 8B14B5[949F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 6365 0000468E 0FBF842D[4CF00400] movsx eax, word [(mp3_synth_win+100h)+ebp*2] 6366 00004696 0FAFC2 imul eax, edx 6367 00004699 01C3 add ebx, eax 6368 0000469B 8B14B5[94A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 6369 000046A2 0FBF842D[CCF00400] movsx eax, word [(mp3_synth_win+180h)+ebp*2] 6370 000046AA 0FAFC2 imul eax, edx 6371 000046AD 01C3 add ebx, eax 6372 000046AF 8B14B5[94A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] 6373 000046B6 0FBF842D[4CF10400] movsx eax, word [(mp3_synth_win+200h)+ebp*2] 6374 000046BE 0FAFC2 imul eax, edx 6375 000046C1 01C3 add ebx, eax 6376 000046C3 8B14B5[94A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 6377 000046CA 0FBF842D[CCF10400] movsx eax, word [(mp3_synth_win+280h)+ebp*2] 6378 000046D2 0FAFC2 imul eax, edx 6379 000046D5 01C3 add ebx, eax 6380 000046D7 8B14B5[94A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 6381 000046DE 0FBF842D[4CF20400] movsx eax, word [(mp3_synth_win+300h)+ebp*2] 6382 000046E6 0FAFC2 imul eax, edx 6383 000046E9 01C3 add ebx, eax 6384 000046EB 8B14B5[94A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 6385 000046F2 0FBF842D[CCF20400] movsx eax, word [(mp3_synth_win+380h)+ebp*2] 6386 000046FA 0FAFC2 imul eax, edx 6387 000046FD 01C3 add ebx, eax 6388 000046FF 8B14BD[949D0000] mov edx, [mp3_synth_buf+edi*4] 6389 00004706 0FBF842D[8CEF0400] movsx eax, word [(mp3_synth_win+40h)+ebp*2] 6390 0000470E 0FAFC2 imul eax, edx 6391 00004711 01C3 add ebx, eax 6392 00004713 8B14BD[949E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 6393 0000471A 0FBF842D[0CF00400] movsx eax, word [(mp3_synth_win+0C0h)+ebp*2] 6394 00004722 0FAFC2 imul eax, edx 6395 00004725 01C3 add ebx, eax 6396 00004727 8B14BD[949F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] 6397 0000472E 0FBF842D[8CF00400] movsx eax, word [(mp3_synth_win+140h)+ebp*2] 6398 00004736 0FAFC2 imul eax, edx 6399 00004739 01C3 add ebx, eax 6400 0000473B 8B14BD[94A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 6401 00004742 0FBF842D[0CF10400] movsx eax, word [(mp3_synth_win+1C0h)+ebp*2] 6402 0000474A 0FAFC2 imul eax, edx 6403 0000474D 01C3 add ebx, eax 6404 0000474F 8B14BD[94A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 6405 00004756 0FBF842D[8CF10400] movsx eax, word [(mp3_synth_win+240h)+ebp*2] 6406 0000475E 0FAFC2 imul eax, edx 6407 00004761 01C3 add ebx, eax 6408 00004763 8B14BD[94A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 6409 0000476A 0FBF842D[0CF20400] movsx eax, word [(mp3_synth_win+2C0h)+ebp*2] 6410 00004772 0FAFC2 imul eax, edx 6411 00004775 01C3 add ebx, eax 6412 00004777 8B14BD[94A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 6413 0000477E 0FBF842D[8CF20400] movsx eax, word [(mp3_synth_win+340h)+ebp*2] 6414 00004786 0FAFC2 imul eax, edx 6415 00004789 01C3 add ebx, eax 6416 0000478B 8B14BD[94A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 6417 00004792 0FBF842D[0CF30400] movsx eax, word [(mp3_synth_win+3C0h)+ebp*2] 6418 0000479A 0FAFC2 imul eax, edx 6419 0000479D 01C3 add ebx, eax 6420 0000479F 81FB00000040 cmp ebx, 40000000h 6421 000047A5 7321 jnb short .sat 6422 000047A7 C1FB16 sar ebx, 22 6423 6424 .sat_back: 6425 000047AA 8819 mov [ecx], bl 6426 000047AC 030D[38F40000] add ecx, [mp3_samples_dst_step] 6427 000047B2 83C604 add esi, 4 6428 000047B5 83EF04 sub edi, 4 6429 000047B8 83C504 add ebp, 4 6430 000047BB F7C51F000000 test ebp, 1Fh 6431 000047C1 0F8593FEFFFF jnz .samples_lop 6432 000047C7 C3 retn 6433 6434 .sat: 6435 000047C8 C1FB1F sar ebx, 31 6436 000047CB F7D3 not ebx 6437 000047CD EBDB jmp short .sat_back 6438 6439 .append_copy_to_window: 6440 000047CF 8D3485[949D0000] lea esi, [mp3_synth_buf+eax*4] 6441 000047D6 8DBE00080000 lea edi, [esi+2048] 6442 000047DC B912000000 mov ecx, 18 6443 000047E1 F3A5 rep movsd 6444 000047E3 E951FEFFFF jmp .append_copy_to_window_back 6445 6446 6447 ; =============== S U B R O U T I N E ======================================= 6448 6449 6450 synth_16bit_shift_0_slow: 6451 000047E8 F605[F0750000]10 test byte [cpuid_flags], 10h 6452 000047EF 740E jz short .no_rdtsc_supported 6453 000047F1 0F31 rdtsc 6454 000047F3 2905[68770000] sub [rdtsc_synth_dct], eax 6455 000047F9 1915[6C770000] sbb [rdtsc_synth_dct+4], edx 6456 6457 .no_rdtsc_supported: 6458 000047FF BE[9CBD0000] mov esi, mp3_sb_samples 6459 00004804 8B3D[30F40000] mov edi, [mp3_samples_dst] 6460 0000480A C705[3CF40000]0000- mov dword [mp3_curr_channel], 0 6460 00004812 0000 6461 6462 .synth_channel_lop: 6463 00004814 56 push esi 6464 00004815 57 push edi 6465 00004816 893D[7C9D0000] mov [mp3_curr_syn_dst], edi 6466 0000481C C705[44F40000]0000- mov dword [mp3_curr_frame], 0 6466 00004824 0000 6467 6468 .synth_frame_lop: 6469 00004826 56 push esi 6470 00004827 F605[F0750000]10 test byte [cpuid_flags], 10h 6471 0000482E 740E jz short .no_rdtsc_supported@ 6472 00004830 0F31 rdtsc 6473 00004832 2905[80770000] sub [rdtsc_dct32], eax 6474 00004838 1915[84770000] sbb [rdtsc_dct32+4], edx 6475 6476 .no_rdtsc_supported@: 6477 0000483E 8B15[3CF40000] mov edx, [mp3_curr_channel] 6478 00004844 8B0495[94BD0000] mov eax, [mp3_synth_index+edx*4] 6479 0000484B 832C95[94BD0000]20 sub dword [mp3_synth_index+edx*4], 32 6480 00004853 C1E20A shl edx, 10 ; channel*1024 6481 00004856 25E0010000 and eax, 1E0h ; 1FFh-1Fh 6482 0000485B 09D0 or eax, edx 6483 0000485D A3[789D0000] mov [mp3_curr_syn_index], eax 6484 00004862 8B3D[789D0000] mov edi, [mp3_curr_syn_index] 6485 00004868 8D3CBD[949D0000] lea edi, [mp3_synth_buf+edi*4] 6486 0000486F E864DDFFFF call mp3_dct32_shift_0 ; mp3_dct32_shift_&rate_shift 6487 00004874 F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_dct32 6488 0000487B 740E jz short .no_rdtsc_supported@@ 6489 0000487D 0F31 rdtsc 6490 0000487F 0105[80770000] add [rdtsc_dct32], eax 6491 00004885 1115[84770000] adc [rdtsc_dct32+4], edx 6492 6493 .no_rdtsc_supported@@: 6494 0000488B F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_synth 6495 00004892 740E jz short .no_rdtsc_supported@@@ 6496 00004894 0F31 rdtsc 6497 00004896 2905[98770000] sub [rdtsc_synth], eax 6498 0000489C 1915[9C770000] sbb [rdtsc_synth+4], edx 6499 6500 .no_rdtsc_supported@@@: 6501 000048A2 E888000000 call mp3_synth_filter_this_16bit_shift_0_slow 6502 000048A7 F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_synth 6503 000048AE 740E jz short .no_rdtsc_supported@@@@ 6504 000048B0 0F31 rdtsc 6505 000048B2 0105[98770000] add [rdtsc_synth], eax 6506 000048B8 1115[9C770000] adc [rdtsc_synth+4], edx 6507 6508 .no_rdtsc_supported@@@@: 6509 000048BE 5E pop esi 6510 000048BF A1[38F40000] mov eax, [mp3_samples_dst_step] 6511 000048C4 C1E005 shl eax, 5 6512 000048C7 8A0D[EE750000] mov cl, [option_rate_shift] 6513 000048CD D3E8 shr eax, cl 6514 000048CF 0105[7C9D0000] add [mp3_curr_syn_dst], eax 6515 000048D5 81C680000000 add esi, 128 ; SBLIMIT*4 6516 000048DB FF05[44F40000] inc dword [mp3_curr_frame] 6517 000048E1 A1[44F40000] mov eax, [mp3_curr_frame] 6518 000048E6 3B05[809D0000] cmp eax, [mp3_nb_frames] 6519 000048EC 0F8234FFFFFF jb .synth_frame_lop 6520 000048F2 5F pop edi 6521 000048F3 5E pop esi 6522 000048F4 033D[749D0000] add edi, [mp3_bytes_per_sample] 6523 000048FA 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 6524 00004900 FF05[3CF40000] inc dword [mp3_curr_channel] 6525 00004906 A1[3CF40000] mov eax, [mp3_curr_channel] 6526 0000490B 3B05[6C9D0000] cmp eax, [mp3_output_num_channels] 6527 00004911 0F82FDFEFFFF jb .synth_channel_lop 6528 00004917 F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_synth_dct 6529 0000491E 740E jz short .no_rdtsc_supported@@@@@ 6530 00004920 0F31 rdtsc 6531 00004922 0105[68770000] add [rdtsc_synth_dct], eax 6532 00004928 1115[6C770000] adc [rdtsc_synth_dct+4], edx 6533 6534 .no_rdtsc_supported@@@@@: 6535 0000492E C3 retn 6536 6537 6538 ; =============== S U B R O U T I N E ======================================= 6539 6540 6541 mp3_synth_filter_this_16bit_shift_0_slow: 6542 0000492F A1[789D0000] mov eax, [mp3_curr_syn_index] 6543 00004934 A9E0010000 test eax, 1E0h ; 1FFh-1Fh 6544 00004939 0F847C010000 jz .append_copy_to_window 6545 0000493F 90 nop 6546 6547 .append_copy_to_window_back: 6548 00004940 89C5 mov ebp, eax ; mov @@win1,eax 6549 00004942 81E5C0010000 and ebp, 1C0h ; and @@win1,1FFh-1Fh-20h 6550 00004948 2520040000 and eax, 420h ; and eax,20h+(1 shl 10) ; bit5, and channel 6551 0000494D 8D7010 lea esi, [eax+10h] ; lea @@syn1,[eax+10h] 6552 00004950 8D7830 lea edi, [eax+30h] ; lea @@syn2,[eax+30h] 6553 00004953 F7DD neg ebp 6554 00004955 81E5C0010000 and ebp, 1C0h ; and @@win1,1FFh-1Fh-20h 6555 0000495B 8B0D[7C9D0000] mov ecx, [mp3_curr_syn_dst] 6556 6557 .samples_lop: 6558 00004961 BB10001000 mov ebx, 100010h ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 6559 ; @@out_shift = 5 6560 6561 .SUM8_@: ; @@SUM8 macro sum,win,ww,syn 6562 00004966 8B14B5[949D0000] mov edx, [mp3_synth_buf+esi*4] ; IRP nn,0,1,2,3,4,5,6,7 6563 ; @@SUM8 @@sum,@@win1,0, @@syn1 6564 0000496D 8B04AD[4CEF0400] mov eax, [mp3_synth_win+ebp*4] ; [mp3_synth_buf+syn*4+(nn*64*4)] 6565 00004974 F7EA imul edx ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] 6566 00004976 01D3 add ebx, edx 6567 00004978 8B14B5[949E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] 6568 0000497F 8B04AD[4CF00400] mov eax, [(mp3_synth_win+100h)+ebp*4] 6569 00004986 F7EA imul edx 6570 00004988 01D3 add ebx, edx ; add sum,edx 6571 0000498A 8B14B5[949F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 6572 00004991 8B04AD[4CF10400] mov eax, [(mp3_synth_win+200h)+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] 6573 00004998 F7EA imul edx ; 64bit = 32bit * 32bit 6574 0000499A 01D3 add ebx, edx 6575 0000499C 8B14B5[94A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 6576 000049A3 8B04AD[4CF20400] mov eax, [(mp3_synth_win+300h)+ebp*4] 6577 000049AA F7EA imul edx 6578 000049AC 01D3 add ebx, edx 6579 000049AE 8B14B5[94A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] 6580 000049B5 8B04AD[4CF30400] mov eax, [(mp3_synth_win+400h)+ebp*4] 6581 000049BC F7EA imul edx 6582 000049BE 01D3 add ebx, edx 6583 000049C0 8B14B5[94A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 6584 000049C7 8B04AD[4CF40400] mov eax, [(mp3_synth_win+500h)+ebp*4] 6585 000049CE F7EA imul edx 6586 000049D0 01D3 add ebx, edx 6587 000049D2 8B14B5[94A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 6588 000049D9 8B04AD[4CF50400] mov eax, [(mp3_synth_win+600h)+ebp*4] 6589 000049E0 F7EA imul edx 6590 000049E2 01D3 add ebx, edx 6591 000049E4 8B14B5[94A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 6592 000049EB 8B04AD[4CF60400] mov eax, [(mp3_synth_win+700h)+ebp*4] 6593 000049F2 F7EA imul edx 6594 000049F4 01D3 add ebx, edx 6595 6596 .skippp: ; @@SUM8 macro sum,win,ww,syn 6597 000049F6 8B14BD[949D0000] mov edx, [mp3_synth_buf+edi*4] ; @@SUM8 @@sum,@@win1,32,@@syn2 6598 ; [mp3_synth_buf+syn*4+(nn*64*4)] 6599 000049FD 8B04AD[CCEF0400] mov eax, [(mp3_synth_win+80h)+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] 6600 00004A04 F7EA imul edx 6601 00004A06 01D3 add ebx, edx 6602 00004A08 8B14BD[949E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 6603 00004A0F 8B04AD[CCF00400] mov eax, [(mp3_synth_win+180h)+ebp*4] 6604 00004A16 F7EA imul edx 6605 00004A18 01D3 add ebx, edx 6606 00004A1A 8B14BD[949F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] 6607 00004A21 8B04AD[CCF10400] mov eax, [(mp3_synth_win+280h)+ebp*4] 6608 00004A28 F7EA imul edx 6609 00004A2A 01D3 add ebx, edx 6610 00004A2C 8B14BD[94A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 6611 00004A33 8B04AD[CCF20400] mov eax, [(mp3_synth_win+380h)+ebp*4] 6612 00004A3A F7EA imul edx 6613 00004A3C 01D3 add ebx, edx 6614 00004A3E 8B14BD[94A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 6615 00004A45 8B04AD[CCF30400] mov eax, [(mp3_synth_win+480h)+ebp*4] 6616 00004A4C F7EA imul edx 6617 00004A4E 01D3 add ebx, edx 6618 00004A50 8B14BD[94A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 6619 00004A57 8B04AD[CCF40400] mov eax, [(mp3_synth_win+580h)+ebp*4] 6620 00004A5E F7EA imul edx 6621 00004A60 01D3 add ebx, edx 6622 00004A62 8B14BD[94A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 6623 00004A69 8B04AD[CCF50400] mov eax, [(mp3_synth_win+680h)+ebp*4] 6624 00004A70 F7EA imul edx 6625 00004A72 01D3 add ebx, edx 6626 00004A74 8B14BD[94A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 6627 00004A7B 8B04AD[CCF60400] mov eax, [(mp3_synth_win+780h)+ebp*4] 6628 00004A82 F7EA imul edx 6629 00004A84 01D3 add ebx, edx 6630 00004A86 81FB00002000 cmp ebx, 200000h ; cmp @@sum,10000h SHL (@@out_shift) 6631 00004A8C 7322 jnb short .sat 6632 00004A8E C1FB05 sar ebx, 5 ; sar @@sum,(@@out_shift) 6633 00004A91 81EB00800000 sub ebx, 8000h ; make 16bit signed 6634 6635 .sat_back: 6636 00004A97 668919 mov [ecx], bx 6637 00004A9A 030D[38F40000] add ecx, [mp3_samples_dst_step] 6638 00004AA0 46 inc esi ; inc @@syn1 6639 00004AA1 4F dec edi ; dec @@syn2 6640 00004AA2 45 inc ebp ; inc @@win1 6641 00004AA3 F7C51F000000 test ebp, 1Fh ; test @@win1,1Fh 6642 00004AA9 0F85B2FEFFFF jnz .samples_lop 6643 00004AAF C3 retn 6644 6645 .sat: 6646 00004AB0 C1FB1F sar ebx, 31 ; FFFFFFFFh,00000000h 6647 00004AB3 81F3FF7F0000 xor ebx, 7FFFh ; FFFF8000h,00007FFFh (signed 16bit) 6648 00004AB9 EBDC jmp short .sat_back 6649 6650 .append_copy_to_window: 6651 00004ABB 8D3485[949D0000] lea esi, [mp3_synth_buf+eax*4] 6652 00004AC2 8DBE00080000 lea edi, [esi+2048] ; [esi+512*4] 6653 00004AC8 B912000000 mov ecx, 18 ; (12h*4)/4 6654 00004ACD F3A5 rep movsd 6655 00004ACF E96CFEFFFF jmp .append_copy_to_window_back 6656 6657 6658 ; =============== S U B R O U T I N E ======================================= 6659 6660 6661 synth_16bit_shift_1_slow: 6662 00004AD4 F605[F0750000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 0,1,0 6663 00004ADB 740E jz short .no_rdtsc_supported 6664 00004ADD 0F31 rdtsc 6665 00004ADF 2905[68770000] sub [rdtsc_synth_dct], eax 6666 00004AE5 1915[6C770000] sbb [rdtsc_synth_dct+4], edx 6667 6668 .no_rdtsc_supported: 6669 00004AEB BE[9CBD0000] mov esi, mp3_sb_samples 6670 00004AF0 8B3D[30F40000] mov edi, [mp3_samples_dst] 6671 00004AF6 C705[3CF40000]0000- mov dword [mp3_curr_channel], 0 6671 00004AFE 0000 6672 6673 .synth_channel_lop: 6674 00004B00 56 push esi 6675 00004B01 57 push edi 6676 00004B02 893D[7C9D0000] mov [mp3_curr_syn_dst], edi 6677 00004B08 C705[44F40000]0000- mov dword [mp3_curr_frame], 0 6677 00004B10 0000 6678 6679 .synth_frame_lop: 6680 00004B12 56 push esi 6681 00004B13 F605[F0750000]10 test byte [cpuid_flags], 10h 6682 00004B1A 740E jz short .no_rdtsc_supported@ 6683 00004B1C 0F31 rdtsc 6684 00004B1E 2905[80770000] sub [rdtsc_dct32], eax 6685 00004B24 1915[84770000] sbb [rdtsc_dct32+4], edx 6686 6687 .no_rdtsc_supported@: 6688 00004B2A 8B15[3CF40000] mov edx, [mp3_curr_channel] 6689 00004B30 8B0495[94BD0000] mov eax, [mp3_synth_index+edx*4] 6690 00004B37 832C95[94BD0000]20 sub dword [mp3_synth_index+edx*4], 32 6691 00004B3F C1E20A shl edx, 10 ; channel*1024 6692 00004B42 25E0010000 and eax, 1E0h ; 1FFh-1Fh ; index(0..511), align 32 6693 00004B47 09D0 or eax, edx 6694 00004B49 A3[789D0000] mov [mp3_curr_syn_index], eax 6695 00004B4E 8B3D[789D0000] mov edi, [mp3_curr_syn_index] 6696 00004B54 8D3CBD[949D0000] lea edi, [mp3_synth_buf+edi*4] 6697 00004B5B E858E3FFFF call mp3_dct32_shift_1 ; call mp3_dct32_shift_&rate_shift 6698 00004B60 F605[F0750000]10 test byte [cpuid_flags], 10h 6699 00004B67 740E jz short .no_rdtsc_supported@@ 6700 00004B69 0F31 rdtsc 6701 00004B6B 0105[80770000] add [rdtsc_dct32], eax 6702 00004B71 1115[84770000] adc [rdtsc_dct32+4], edx 6703 6704 .no_rdtsc_supported@@: 6705 00004B77 F605[F0750000]10 test byte [cpuid_flags], 10h 6706 00004B7E 740E jz short .no_rdtsc_supported@@@ 6707 00004B80 0F31 rdtsc 6708 00004B82 2905[98770000] sub [rdtsc_synth], eax 6709 00004B88 1915[9C770000] sbb [rdtsc_synth+4], edx 6710 6711 .no_rdtsc_supported@@@: 6712 00004B8E E888000000 call mp3_synth_filter_this_16bit_shift_1_slow ; 6713 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 6714 00004B93 F605[F0750000]10 test byte [cpuid_flags], 10h 6715 00004B9A 740E jz short .no_rdtsc_supported@@@@ 6716 00004B9C 0F31 rdtsc 6717 00004B9E 0105[98770000] add [rdtsc_synth], eax 6718 00004BA4 1115[9C770000] adc [rdtsc_synth+4], edx 6719 6720 .no_rdtsc_supported@@@@: 6721 00004BAA 5E pop esi 6722 00004BAB A1[38F40000] mov eax, [mp3_samples_dst_step] 6723 00004BB0 C1E005 shl eax, 5 6724 00004BB3 8A0D[EE750000] mov cl, [option_rate_shift] ; IF with_rate_shift 6725 00004BB9 D3E8 shr eax, cl 6726 00004BBB 0105[7C9D0000] add [mp3_curr_syn_dst], eax 6727 00004BC1 81C680000000 add esi, 128 ; SBLIMIT*4 ; src+32*4 6728 00004BC7 FF05[44F40000] inc dword [mp3_curr_frame] 6729 00004BCD A1[44F40000] mov eax, [mp3_curr_frame] 6730 00004BD2 3B05[809D0000] cmp eax, [mp3_nb_frames] 6731 00004BD8 0F8234FFFFFF jb .synth_frame_lop 6732 00004BDE 5F pop edi 6733 00004BDF 5E pop esi 6734 00004BE0 033D[749D0000] add edi, [mp3_bytes_per_sample] 6735 00004BE6 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 ; src 6736 00004BEC FF05[3CF40000] inc dword [mp3_curr_channel] 6737 00004BF2 A1[3CF40000] mov eax, [mp3_curr_channel] 6738 00004BF7 3B05[6C9D0000] cmp eax, [mp3_output_num_channels] 6739 00004BFD 0F82FDFEFFFF jb .synth_channel_lop 6740 00004C03 F605[F0750000]10 test byte [cpuid_flags], 10h 6741 00004C0A 740E jz short .no_rdtsc_supported@@@@@ 6742 00004C0C 0F31 rdtsc 6743 00004C0E 0105[68770000] add [rdtsc_synth_dct], eax 6744 00004C14 1115[6C770000] adc [rdtsc_synth_dct+4], edx 6745 6746 .no_rdtsc_supported@@@@@: 6747 00004C1A C3 retn 6748 6749 6750 ; =============== S U B R O U T I N E ======================================= 6751 6752 6753 mp3_synth_filter_this_16bit_shift_1_slow: 6754 00004C1B A1[789D0000] mov eax, [mp3_curr_syn_index] 6755 00004C20 A9E0010000 test eax, 1E0h 6756 00004C25 0F8482010000 jz .append_copy_to_window 6757 00004C2B 90 nop 6758 6759 .append_copy_to_window_back: 6760 00004C2C 89C5 mov ebp, eax 6761 00004C2E 81E5C0010000 and ebp, 1C0h 6762 00004C34 2520040000 and eax, 420h 6763 00004C39 8D7010 lea esi, [eax+10h] 6764 00004C3C 8D7830 lea edi, [eax+30h] 6765 00004C3F F7DD neg ebp 6766 00004C41 81E5C0010000 and ebp, 1C0h 6767 00004C47 8B0D[7C9D0000] mov ecx, [mp3_curr_syn_dst] 6768 6769 .samples_lop: 6770 00004C4D BB10001000 mov ebx, 100010h 6771 00004C52 8B14B5[949D0000] mov edx, [mp3_synth_buf+esi*4] 6772 00004C59 8B04AD[4CEF0400] mov eax, [mp3_synth_win+ebp*4] 6773 00004C60 F7EA imul edx 6774 00004C62 01D3 add ebx, edx 6775 00004C64 8B14B5[949E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] 6776 00004C6B 8B04AD[4CF00400] mov eax, [(mp3_synth_win+100h)+ebp*4] 6777 00004C72 F7EA imul edx 6778 00004C74 01D3 add ebx, edx 6779 00004C76 8B14B5[949F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 6780 00004C7D 8B04AD[4CF10400] mov eax, [(mp3_synth_win+200h)+ebp*4] 6781 00004C84 F7EA imul edx 6782 00004C86 01D3 add ebx, edx 6783 00004C88 8B14B5[94A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 6784 00004C8F 8B04AD[4CF20400] mov eax, [(mp3_synth_win+300h)+ebp*4] 6785 00004C96 F7EA imul edx 6786 00004C98 01D3 add ebx, edx 6787 00004C9A 8B14B5[94A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] 6788 00004CA1 8B04AD[4CF30400] mov eax, [(mp3_synth_win+400h)+ebp*4] 6789 00004CA8 F7EA imul edx 6790 00004CAA 01D3 add ebx, edx 6791 00004CAC 8B14B5[94A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 6792 00004CB3 8B04AD[4CF40400] mov eax, [(mp3_synth_win+500h)+ebp*4] 6793 00004CBA F7EA imul edx 6794 00004CBC 01D3 add ebx, edx 6795 00004CBE 8B14B5[94A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 6796 00004CC5 8B04AD[4CF50400] mov eax, [(mp3_synth_win+600h)+ebp*4] 6797 00004CCC F7EA imul edx 6798 00004CCE 01D3 add ebx, edx 6799 00004CD0 8B14B5[94A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 6800 00004CD7 8B04AD[4CF60400] mov eax, [(mp3_synth_win+700h)+ebp*4] 6801 00004CDE F7EA imul edx 6802 00004CE0 01D3 add ebx, edx 6803 00004CE2 8B14BD[949D0000] mov edx, [mp3_synth_buf+edi*4] 6804 00004CE9 8B04AD[CCEF0400] mov eax, [(mp3_synth_win+80h)+ebp*4] 6805 00004CF0 F7EA imul edx 6806 00004CF2 01D3 add ebx, edx 6807 00004CF4 8B14BD[949E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 6808 00004CFB 8B04AD[CCF00400] mov eax, [(mp3_synth_win+180h)+ebp*4] 6809 00004D02 F7EA imul edx 6810 00004D04 01D3 add ebx, edx 6811 00004D06 8B14BD[949F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] 6812 00004D0D 8B04AD[CCF10400] mov eax, [(mp3_synth_win+280h)+ebp*4] 6813 00004D14 F7EA imul edx 6814 00004D16 01D3 add ebx, edx 6815 00004D18 8B14BD[94A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 6816 00004D1F 8B04AD[CCF20400] mov eax, [(mp3_synth_win+380h)+ebp*4] 6817 00004D26 F7EA imul edx 6818 00004D28 01D3 add ebx, edx 6819 00004D2A 8B14BD[94A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 6820 00004D31 8B04AD[CCF30400] mov eax, [(mp3_synth_win+480h)+ebp*4] 6821 00004D38 F7EA imul edx 6822 00004D3A 01D3 add ebx, edx 6823 00004D3C 8B14BD[94A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 6824 00004D43 8B04AD[CCF40400] mov eax, [(mp3_synth_win+580h)+ebp*4] 6825 00004D4A F7EA imul edx 6826 00004D4C 01D3 add ebx, edx 6827 00004D4E 8B14BD[94A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 6828 00004D55 8B04AD[CCF50400] mov eax, [(mp3_synth_win+680h)+ebp*4] 6829 00004D5C F7EA imul edx 6830 00004D5E 01D3 add ebx, edx 6831 00004D60 8B14BD[94A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 6832 00004D67 8B04AD[CCF60400] mov eax, [(mp3_synth_win+780h)+ebp*4] 6833 00004D6E F7EA imul edx 6834 00004D70 01D3 add ebx, edx 6835 00004D72 81FB00002000 cmp ebx, 200000h 6836 00004D78 7328 jnb short .sat 6837 00004D7A C1FB05 sar ebx, 5 6838 00004D7D 81EB00800000 sub ebx, 8000h 6839 6840 .sat_back: 6841 00004D83 668919 mov [ecx], bx 6842 00004D86 030D[38F40000] add ecx, [mp3_samples_dst_step] 6843 00004D8C 83C602 add esi, 2 6844 00004D8F 83EF02 sub edi, 2 6845 00004D92 83C502 add ebp, 2 6846 00004D95 F7C51F000000 test ebp, 1Fh 6847 00004D9B 0F85ACFEFFFF jnz .samples_lop 6848 00004DA1 C3 retn 6849 6850 .sat: 6851 00004DA2 C1FB1F sar ebx, 31 6852 00004DA5 81F3FF7F0000 xor ebx, 7FFFh 6853 00004DAB EBD6 jmp short .sat_back 6854 6855 .append_copy_to_window: 6856 00004DAD 8D3485[949D0000] lea esi, [mp3_synth_buf+eax*4] 6857 00004DB4 8DBE00080000 lea edi, [esi+2048] 6858 00004DBA B912000000 mov ecx, 18 6859 00004DBF F3A5 rep movsd 6860 00004DC1 E966FEFFFF jmp .append_copy_to_window_back 6861 6862 6863 ; =============== S U B R O U T I N E ======================================= 6864 6865 6866 synth_16bit_shift_2_slow: 6867 00004DC6 F605[F0750000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 0,2,0 6868 00004DCD 740E jz short .no_rdtsc_supported 6869 00004DCF 0F31 rdtsc 6870 00004DD1 2905[68770000] sub [rdtsc_synth_dct], eax 6871 00004DD7 1915[6C770000] sbb [rdtsc_synth_dct+4], edx 6872 6873 .no_rdtsc_supported: 6874 00004DDD BE[9CBD0000] mov esi, mp3_sb_samples 6875 00004DE2 8B3D[30F40000] mov edi, [mp3_samples_dst] 6876 00004DE8 C705[3CF40000]0000- mov dword [mp3_curr_channel], 0 6876 00004DF0 0000 6877 6878 .synth_channel_lop: 6879 00004DF2 56 push esi 6880 00004DF3 57 push edi 6881 00004DF4 893D[7C9D0000] mov [mp3_curr_syn_dst], edi 6882 00004DFA C705[44F40000]0000- mov dword [mp3_curr_frame], 0 6882 00004E02 0000 6883 6884 .synth_frame_lop: 6885 00004E04 56 push esi 6886 00004E05 F605[F0750000]10 test byte [cpuid_flags], 10h 6887 00004E0C 740E jz short .no_rdtsc_supported@ 6888 00004E0E 0F31 rdtsc 6889 00004E10 2905[80770000] sub [rdtsc_dct32], eax 6890 00004E16 1915[84770000] sbb [rdtsc_dct32+4], edx 6891 6892 .no_rdtsc_supported@: 6893 00004E1C 8B15[3CF40000] mov edx, [mp3_curr_channel] 6894 00004E22 8B0495[94BD0000] mov eax, [mp3_synth_index+edx*4] 6895 00004E29 832C95[94BD0000]20 sub dword [mp3_synth_index+edx*4], 32 6896 00004E31 C1E20A shl edx, 10 6897 00004E34 25E0010000 and eax, 1E0h ; 1FFh-1Fh 6898 00004E39 09D0 or eax, edx 6899 00004E3B A3[789D0000] mov [mp3_curr_syn_index], eax 6900 00004E40 8B3D[789D0000] mov edi, [mp3_curr_syn_index] 6901 00004E46 8D3CBD[949D0000] lea edi, [mp3_synth_buf+edi*4] 6902 00004E4D E856E4FFFF call mp3_dct32_shift_2 ; call mp3_dct32_shift_&rate_shift 6903 00004E52 F605[F0750000]10 test byte [cpuid_flags], 10h 6904 00004E59 740E jz short .no_rdtsc_supported@@ 6905 00004E5B 0F31 rdtsc 6906 00004E5D 0105[80770000] add [rdtsc_dct32], eax 6907 00004E63 1115[84770000] adc [rdtsc_dct32+4], edx 6908 6909 .no_rdtsc_supported@@: 6910 00004E69 F605[F0750000]10 test byte [cpuid_flags], 10h 6911 00004E70 740E jz short .no_rdtsc_supported@@@ 6912 00004E72 0F31 rdtsc 6913 00004E74 2905[98770000] sub [rdtsc_synth], eax 6914 00004E7A 1915[9C770000] sbb [rdtsc_synth+4], edx 6915 6916 .no_rdtsc_supported@@@: 6917 00004E80 E888000000 call mp3_synth_filter_this_16bit_shift_2_slow ; 6918 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 6919 00004E85 F605[F0750000]10 test byte [cpuid_flags], 10h 6920 00004E8C 740E jz short .no_rdtsc_supported@@@@ 6921 00004E8E 0F31 rdtsc 6922 00004E90 0105[98770000] add [rdtsc_synth], eax 6923 00004E96 1115[9C770000] adc [rdtsc_synth+4], edx 6924 6925 .no_rdtsc_supported@@@@: 6926 00004E9C 5E pop esi 6927 00004E9D A1[38F40000] mov eax, [mp3_samples_dst_step] 6928 00004EA2 C1E005 shl eax, 5 6929 00004EA5 8A0D[EE750000] mov cl, [option_rate_shift] 6930 00004EAB D3E8 shr eax, cl 6931 00004EAD 0105[7C9D0000] add [mp3_curr_syn_dst], eax 6932 00004EB3 81C680000000 add esi, 128 ; SBLIMIT*4 6933 00004EB9 FF05[44F40000] inc dword [mp3_curr_frame] 6934 00004EBF A1[44F40000] mov eax, [mp3_curr_frame] 6935 00004EC4 3B05[809D0000] cmp eax, [mp3_nb_frames] 6936 00004ECA 0F8234FFFFFF jb .synth_frame_lop 6937 00004ED0 5F pop edi 6938 00004ED1 5E pop esi 6939 00004ED2 033D[749D0000] add edi, [mp3_bytes_per_sample] 6940 00004ED8 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 6941 00004EDE FF05[3CF40000] inc dword [mp3_curr_channel] 6942 00004EE4 A1[3CF40000] mov eax, [mp3_curr_channel] 6943 00004EE9 3B05[6C9D0000] cmp eax, [mp3_output_num_channels] 6944 00004EEF 0F82FDFEFFFF jb .synth_channel_lop 6945 00004EF5 F605[F0750000]10 test byte [cpuid_flags], 10h 6946 00004EFC 740E jz short .no_rdtsc_supported@@@@@ 6947 00004EFE 0F31 rdtsc 6948 00004F00 0105[68770000] add [rdtsc_synth_dct], eax 6949 00004F06 1115[6C770000] adc [rdtsc_synth_dct+4], edx 6950 6951 .no_rdtsc_supported@@@@@: 6952 00004F0C C3 retn 6953 6954 6955 ; =============== S U B R O U T I N E ======================================= 6956 6957 6958 mp3_synth_filter_this_16bit_shift_2_slow: 6959 00004F0D A1[789D0000] mov eax, [mp3_curr_syn_index] 6960 00004F12 A9E0010000 test eax, 1E0h 6961 00004F17 0F8482010000 jz .append_copy_to_window 6962 00004F1D 90 nop 6963 6964 .append_copy_to_window_back: 6965 00004F1E 89C5 mov ebp, eax 6966 00004F20 81E5C0010000 and ebp, 1C0h 6967 00004F26 2520040000 and eax, 420h 6968 00004F2B 8D7010 lea esi, [eax+10h] 6969 00004F2E 8D7830 lea edi, [eax+30h] 6970 00004F31 F7DD neg ebp 6971 00004F33 81E5C0010000 and ebp, 1C0h 6972 00004F39 8B0D[7C9D0000] mov ecx, [mp3_curr_syn_dst] 6973 6974 .samples_lop: 6975 00004F3F BB10001000 mov ebx, 100010h 6976 00004F44 8B14B5[949D0000] mov edx, [mp3_synth_buf+esi*4] 6977 00004F4B 8B04AD[4CEF0400] mov eax, [mp3_synth_win+ebp*4] 6978 00004F52 F7EA imul edx 6979 00004F54 01D3 add ebx, edx 6980 00004F56 8B14B5[949E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] 6981 00004F5D 8B04AD[4CF00400] mov eax, [(mp3_synth_win+100h)+ebp*4] 6982 00004F64 F7EA imul edx 6983 00004F66 01D3 add ebx, edx 6984 00004F68 8B14B5[949F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 6985 00004F6F 8B04AD[4CF10400] mov eax, [(mp3_synth_win+200h)+ebp*4] 6986 00004F76 F7EA imul edx 6987 00004F78 01D3 add ebx, edx 6988 00004F7A 8B14B5[94A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 6989 00004F81 8B04AD[4CF20400] mov eax, [(mp3_synth_win+300h)+ebp*4] 6990 00004F88 F7EA imul edx 6991 00004F8A 01D3 add ebx, edx 6992 00004F8C 8B14B5[94A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] 6993 00004F93 8B04AD[4CF30400] mov eax, [(mp3_synth_win+400h)+ebp*4] 6994 00004F9A F7EA imul edx 6995 00004F9C 01D3 add ebx, edx 6996 00004F9E 8B14B5[94A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 6997 00004FA5 8B04AD[4CF40400] mov eax, [(mp3_synth_win+500h)+ebp*4] 6998 00004FAC F7EA imul edx 6999 00004FAE 01D3 add ebx, edx 7000 00004FB0 8B14B5[94A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 7001 00004FB7 8B04AD[4CF50400] mov eax, [(mp3_synth_win+600h)+ebp*4] 7002 00004FBE F7EA imul edx 7003 00004FC0 01D3 add ebx, edx 7004 00004FC2 8B14B5[94A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 7005 00004FC9 8B04AD[4CF60400] mov eax, [(mp3_synth_win+700h)+ebp*4] 7006 00004FD0 F7EA imul edx 7007 00004FD2 01D3 add ebx, edx 7008 00004FD4 8B14BD[949D0000] mov edx, [mp3_synth_buf+edi*4] 7009 00004FDB 8B04AD[CCEF0400] mov eax, [(mp3_synth_win+80h)+ebp*4] 7010 00004FE2 F7EA imul edx 7011 00004FE4 01D3 add ebx, edx 7012 00004FE6 8B14BD[949E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 7013 00004FED 8B04AD[CCF00400] mov eax, [(mp3_synth_win+180h)+ebp*4] 7014 00004FF4 F7EA imul edx 7015 00004FF6 01D3 add ebx, edx 7016 00004FF8 8B14BD[949F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] 7017 00004FFF 8B04AD[CCF10400] mov eax, [(mp3_synth_win+280h)+ebp*4] 7018 00005006 F7EA imul edx 7019 00005008 01D3 add ebx, edx 7020 0000500A 8B14BD[94A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 7021 00005011 8B04AD[CCF20400] mov eax, [(mp3_synth_win+380h)+ebp*4] 7022 00005018 F7EA imul edx 7023 0000501A 01D3 add ebx, edx 7024 0000501C 8B14BD[94A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 7025 00005023 8B04AD[CCF30400] mov eax, [(mp3_synth_win+480h)+ebp*4] 7026 0000502A F7EA imul edx 7027 0000502C 01D3 add ebx, edx 7028 0000502E 8B14BD[94A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 7029 00005035 8B04AD[CCF40400] mov eax, [(mp3_synth_win+580h)+ebp*4] 7030 0000503C F7EA imul edx 7031 0000503E 01D3 add ebx, edx 7032 00005040 8B14BD[94A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 7033 00005047 8B04AD[CCF50400] mov eax, [(mp3_synth_win+680h)+ebp*4] 7034 0000504E F7EA imul edx 7035 00005050 01D3 add ebx, edx 7036 00005052 8B14BD[94A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 7037 00005059 8B04AD[CCF60400] mov eax, [(mp3_synth_win+780h)+ebp*4] 7038 00005060 F7EA imul edx 7039 00005062 01D3 add ebx, edx 7040 00005064 81FB00002000 cmp ebx, 200000h 7041 0000506A 7328 jnb short .sat 7042 0000506C C1FB05 sar ebx, 5 7043 0000506F 81EB00800000 sub ebx, 8000h 7044 7045 .sat_back: 7046 00005075 668919 mov [ecx], bx 7047 00005078 030D[38F40000] add ecx, [mp3_samples_dst_step] 7048 0000507E 83C604 add esi, 4 7049 00005081 83EF04 sub edi, 4 7050 00005084 83C504 add ebp, 4 7051 00005087 F7C51F000000 test ebp, 1Fh 7052 0000508D 0F85ACFEFFFF jnz .samples_lop 7053 00005093 C3 retn 7054 7055 .sat: 7056 00005094 C1FB1F sar ebx, 31 7057 00005097 81F3FF7F0000 xor ebx, 7FFFh 7058 0000509D EBD6 jmp short .sat_back 7059 7060 .append_copy_to_window: 7061 0000509F 8D3485[949D0000] lea esi, [mp3_synth_buf+eax*4] 7062 000050A6 8DBE00080000 lea edi, [esi+2048] 7063 000050AC B912000000 mov ecx, 18 7064 000050B1 F3A5 rep movsd 7065 000050B3 E966FEFFFF jmp .append_copy_to_window_back 7066 7067 7068 ; =============== S U B R O U T I N E ======================================= 7069 7070 7071 synth_8bit_shift_0_slow: 7072 000050B8 F605[F0750000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 1,0,0 7073 000050BF 740E jz short .no_rdtsc_supported 7074 000050C1 0F31 rdtsc 7075 000050C3 2905[68770000] sub [rdtsc_synth_dct], eax 7076 000050C9 1915[6C770000] sbb [rdtsc_synth_dct+4], edx 7077 7078 .no_rdtsc_supported: 7079 000050CF BE[9CBD0000] mov esi, mp3_sb_samples 7080 000050D4 8B3D[30F40000] mov edi, [mp3_samples_dst] 7081 000050DA C705[3CF40000]0000- mov dword [mp3_curr_channel], 0 7081 000050E2 0000 7082 7083 .synth_channel_lop: 7084 000050E4 56 push esi 7085 000050E5 57 push edi 7086 000050E6 893D[7C9D0000] mov [mp3_curr_syn_dst], edi 7087 000050EC C705[44F40000]0000- mov dword [mp3_curr_frame], 0 7087 000050F4 0000 7088 7089 .synth_frame_lop: 7090 000050F6 56 push esi 7091 000050F7 F605[F0750000]10 test byte [cpuid_flags], 10h 7092 000050FE 740E jz short .no_rdtsc_supported@ 7093 00005100 0F31 rdtsc 7094 00005102 2905[80770000] sub [rdtsc_dct32], eax 7095 00005108 1915[84770000] sbb [rdtsc_dct32+4], edx 7096 7097 .no_rdtsc_supported@: 7098 0000510E 8B15[3CF40000] mov edx, [mp3_curr_channel] 7099 00005114 8B0495[94BD0000] mov eax, [mp3_synth_index+edx*4] 7100 0000511B 832C95[94BD0000]20 sub dword [mp3_synth_index+edx*4], 32 7101 00005123 C1E20A shl edx, 10 7102 00005126 25E0010000 and eax, 1E0h ; 1FFh-1Fh 7103 0000512B 09D0 or eax, edx 7104 0000512D A3[789D0000] mov [mp3_curr_syn_index], eax 7105 00005132 8B3D[789D0000] mov edi, [mp3_curr_syn_index] 7106 00005138 8D3CBD[949D0000] lea edi, [mp3_synth_buf+edi*4] 7107 0000513F E894D4FFFF call mp3_dct32_shift_0 7108 00005144 F605[F0750000]10 test byte [cpuid_flags], 10h 7109 0000514B 740E jz short .no_rdtsc_supported@@ 7110 0000514D 0F31 rdtsc 7111 0000514F 0105[80770000] add [rdtsc_dct32], eax 7112 00005155 1115[84770000] adc [rdtsc_dct32+4], edx 7113 7114 .no_rdtsc_supported@@: 7115 0000515B F605[F0750000]10 test byte [cpuid_flags], 10h 7116 00005162 740E jz short .no_rdtsc_supported@@@ 7117 00005164 0F31 rdtsc 7118 00005166 2905[98770000] sub [rdtsc_synth], eax 7119 0000516C 1915[9C770000] sbb [rdtsc_synth+4], edx 7120 7121 .no_rdtsc_supported@@@: 7122 00005172 E888000000 call mp3_synth_filter_this_8bit_shift_0_slow ; 7123 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 7124 00005177 F605[F0750000]10 test byte [cpuid_flags], 10h 7125 0000517E 740E jz short .no_rdtsc_supported@@@@ 7126 00005180 0F31 rdtsc 7127 00005182 0105[98770000] add [rdtsc_synth], eax 7128 00005188 1115[9C770000] adc [rdtsc_synth+4], edx 7129 7130 .no_rdtsc_supported@@@@: 7131 0000518E 5E pop esi 7132 0000518F A1[38F40000] mov eax, [mp3_samples_dst_step] 7133 00005194 C1E005 shl eax, 5 7134 00005197 8A0D[EE750000] mov cl, [option_rate_shift] 7135 0000519D D3E8 shr eax, cl 7136 0000519F 0105[7C9D0000] add [mp3_curr_syn_dst], eax 7137 000051A5 81C680000000 add esi, 128 ; SBLIMIT*4 7138 000051AB FF05[44F40000] inc dword [mp3_curr_frame] 7139 000051B1 A1[44F40000] mov eax, [mp3_curr_frame] 7140 000051B6 3B05[809D0000] cmp eax, [mp3_nb_frames] 7141 000051BC 0F8234FFFFFF jb .synth_frame_lop 7142 000051C2 5F pop edi 7143 000051C3 5E pop esi 7144 000051C4 033D[749D0000] add edi, [mp3_bytes_per_sample] 7145 000051CA 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 7146 000051D0 FF05[3CF40000] inc dword [mp3_curr_channel] 7147 000051D6 A1[3CF40000] mov eax, [mp3_curr_channel] 7148 000051DB 3B05[6C9D0000] cmp eax, [mp3_output_num_channels] 7149 000051E1 0F82FDFEFFFF jb .synth_channel_lop 7150 000051E7 F605[F0750000]10 test byte [cpuid_flags], 10h 7151 000051EE 740E jz short .no_rdtsc_supported@@@@@ 7152 000051F0 0F31 rdtsc 7153 000051F2 0105[68770000] add [rdtsc_synth_dct], eax 7154 000051F8 1115[6C770000] adc [rdtsc_synth_dct+4], edx 7155 7156 .no_rdtsc_supported@@@@@: 7157 000051FE C3 retn 7158 7159 7160 ; =============== S U B R O U T I N E ======================================= 7161 7162 7163 mp3_synth_filter_this_8bit_shift_0_slow: 7164 000051FF A1[789D0000] mov eax, [mp3_curr_syn_index] 7165 00005204 A9E0010000 test eax, 1E0h 7166 00005209 0F8471010000 jz .append_copy_to_window 7167 0000520F 90 nop 7168 7169 .append_copy_to_window_back: 7170 00005210 89C5 mov ebp, eax 7171 00005212 81E5C0010000 and ebp, 1C0h 7172 00005218 2520040000 and eax, 420h 7173 0000521D 8D7010 lea esi, [eax+10h] 7174 00005220 8D7830 lea edi, [eax+30h] 7175 00005223 F7DD neg ebp 7176 00005225 81E5C0010000 and ebp, 1C0h 7177 0000522B 8B0D[7C9D0000] mov ecx, [mp3_curr_syn_dst] 7178 7179 .samples_lop: 7180 00005231 BB00101000 mov ebx, 101000h 7181 00005236 8B14B5[949D0000] mov edx, [mp3_synth_buf+esi*4] 7182 0000523D 8B04AD[4CEF0400] mov eax, [mp3_synth_win+ebp*4] 7183 00005244 F7EA imul edx 7184 00005246 01D3 add ebx, edx 7185 00005248 8B14B5[949E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] 7186 0000524F 8B04AD[4CF00400] mov eax, [(mp3_synth_win+100h)+ebp*4] 7187 00005256 F7EA imul edx 7188 00005258 01D3 add ebx, edx 7189 0000525A 8B14B5[949F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 7190 00005261 8B04AD[4CF10400] mov eax, [(mp3_synth_win+200h)+ebp*4] 7191 00005268 F7EA imul edx 7192 0000526A 01D3 add ebx, edx 7193 0000526C 8B14B5[94A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 7194 00005273 8B04AD[4CF20400] mov eax, [(mp3_synth_win+300h)+ebp*4] 7195 0000527A F7EA imul edx 7196 0000527C 01D3 add ebx, edx 7197 0000527E 8B14B5[94A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] 7198 00005285 8B04AD[4CF30400] mov eax, [(mp3_synth_win+400h)+ebp*4] 7199 0000528C F7EA imul edx 7200 0000528E 01D3 add ebx, edx 7201 00005290 8B14B5[94A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 7202 00005297 8B04AD[4CF40400] mov eax, [(mp3_synth_win+500h)+ebp*4] 7203 0000529E F7EA imul edx 7204 000052A0 01D3 add ebx, edx 7205 000052A2 8B14B5[94A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 7206 000052A9 8B04AD[4CF50400] mov eax, [(mp3_synth_win+600h)+ebp*4] 7207 000052B0 F7EA imul edx 7208 000052B2 01D3 add ebx, edx 7209 000052B4 8B14B5[94A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 7210 000052BB 8B04AD[4CF60400] mov eax, [(mp3_synth_win+700h)+ebp*4] 7211 000052C2 F7EA imul edx 7212 000052C4 01D3 add ebx, edx 7213 000052C6 8B14BD[949D0000] mov edx, [mp3_synth_buf+edi*4] 7214 000052CD 8B04AD[CCEF0400] mov eax, [(mp3_synth_win+80h)+ebp*4] 7215 000052D4 F7EA imul edx 7216 000052D6 01D3 add ebx, edx 7217 000052D8 8B14BD[949E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 7218 000052DF 8B04AD[CCF00400] mov eax, [(mp3_synth_win+180h)+ebp*4] 7219 000052E6 F7EA imul edx 7220 000052E8 01D3 add ebx, edx 7221 000052EA 8B14BD[949F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] 7222 000052F1 8B04AD[CCF10400] mov eax, [(mp3_synth_win+280h)+ebp*4] 7223 000052F8 F7EA imul edx 7224 000052FA 01D3 add ebx, edx 7225 000052FC 8B14BD[94A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 7226 00005303 8B04AD[CCF20400] mov eax, [(mp3_synth_win+380h)+ebp*4] 7227 0000530A F7EA imul edx 7228 0000530C 01D3 add ebx, edx 7229 0000530E 8B14BD[94A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 7230 00005315 8B04AD[CCF30400] mov eax, [(mp3_synth_win+480h)+ebp*4] 7231 0000531C F7EA imul edx 7232 0000531E 01D3 add ebx, edx 7233 00005320 8B14BD[94A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 7234 00005327 8B04AD[CCF40400] mov eax, [(mp3_synth_win+580h)+ebp*4] 7235 0000532E F7EA imul edx 7236 00005330 01D3 add ebx, edx 7237 00005332 8B14BD[94A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 7238 00005339 8B04AD[CCF50400] mov eax, [(mp3_synth_win+680h)+ebp*4] 7239 00005340 F7EA imul edx 7240 00005342 01D3 add ebx, edx 7241 00005344 8B14BD[94A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 7242 0000534B 8B04AD[CCF60400] mov eax, [(mp3_synth_win+780h)+ebp*4] 7243 00005352 F7EA imul edx 7244 00005354 01D3 add ebx, edx 7245 00005356 81FB00002000 cmp ebx, 200000h 7246 0000535C 731B jnb short .sat 7247 0000535E C1FB0D sar ebx, 13 7248 7249 .sat_back: 7250 00005361 8819 mov [ecx], bl 7251 00005363 030D[38F40000] add ecx, [mp3_samples_dst_step] 7252 00005369 46 inc esi 7253 0000536A 4F dec edi 7254 0000536B 45 inc ebp 7255 0000536C F7C51F000000 test ebp, 1Fh 7256 00005372 0F85B9FEFFFF jnz .samples_lop 7257 00005378 C3 retn 7258 7259 .sat: 7260 00005379 C1FB1F sar ebx, 31 7261 0000537C F7D3 not ebx 7262 0000537E EBE1 jmp short .sat_back 7263 7264 .append_copy_to_window: 7265 00005380 8D3485[949D0000] lea esi, [mp3_synth_buf+eax*4] 7266 00005387 8DBE00080000 lea edi, [esi+2048] 7267 0000538D B912000000 mov ecx, 18 7268 00005392 F3A5 rep movsd 7269 00005394 E977FEFFFF jmp .append_copy_to_window_back 7270 7271 7272 ; =============== S U B R O U T I N E ======================================= 7273 7274 7275 synth_8bit_shift_1_slow: 7276 00005399 F605[F0750000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 1,1,0 7277 ; force_8bit, rate_shift=1, force_fast=0 7278 000053A0 740E jz short .no_rdtsc_supported 7279 000053A2 0F31 rdtsc 7280 000053A4 2905[68770000] sub [rdtsc_synth_dct], eax 7281 000053AA 1915[6C770000] sbb [rdtsc_synth_dct+4], edx 7282 7283 .no_rdtsc_supported: 7284 000053B0 BE[9CBD0000] mov esi, mp3_sb_samples 7285 000053B5 8B3D[30F40000] mov edi, [mp3_samples_dst] 7286 000053BB C705[3CF40000]0000- mov dword [mp3_curr_channel], 0 7286 000053C3 0000 7287 7288 .synth_channel_lop: 7289 000053C5 56 push esi 7290 000053C6 57 push edi 7291 000053C7 893D[7C9D0000] mov [mp3_curr_syn_dst], edi 7292 000053CD C705[44F40000]0000- mov dword [mp3_curr_frame], 0 7292 000053D5 0000 7293 7294 .synth_frame_lop: 7295 000053D7 56 push esi 7296 000053D8 F605[F0750000]10 test byte [cpuid_flags], 10h 7297 000053DF 740E jz short .no_rdtsc_supported@ 7298 000053E1 0F31 rdtsc 7299 000053E3 2905[80770000] sub [rdtsc_dct32], eax 7300 000053E9 1915[84770000] sbb [rdtsc_dct32+4], edx 7301 7302 .no_rdtsc_supported@: 7303 000053EF 8B15[3CF40000] mov edx, [mp3_curr_channel] 7304 000053F5 8B0495[94BD0000] mov eax, [mp3_synth_index+edx*4] 7305 000053FC 832C95[94BD0000]20 sub dword [mp3_synth_index+edx*4], 32 7306 00005404 C1E20A shl edx, 10 7307 00005407 25E0010000 and eax, 1E0h ; 1FFh-1Fh 7308 0000540C 09D0 or eax, edx 7309 0000540E A3[789D0000] mov [mp3_curr_syn_index], eax 7310 00005413 8B3D[789D0000] mov edi, [mp3_curr_syn_index] 7311 00005419 8D3CBD[949D0000] lea edi, [mp3_synth_buf+edi*4] 7312 00005420 E893DAFFFF call mp3_dct32_shift_1 ; mp3_dct32_shift_&rate_shift ; rate_shift = 1 7313 00005425 F605[F0750000]10 test byte [cpuid_flags], 10h 7314 0000542C 740E jz short .no_rdtsc_supported@@ 7315 0000542E 0F31 rdtsc 7316 00005430 0105[80770000] add [rdtsc_dct32], eax 7317 00005436 1115[84770000] adc [rdtsc_dct32+4], edx 7318 7319 .no_rdtsc_supported@@: 7320 0000543C F605[F0750000]10 test byte [cpuid_flags], 10h 7321 00005443 740E jz short .no_rdtsc_supported@@@ 7322 00005445 0F31 rdtsc 7323 00005447 2905[98770000] sub [rdtsc_synth], eax 7324 0000544D 1915[9C770000] sbb [rdtsc_synth+4], edx 7325 7326 .no_rdtsc_supported@@@: 7327 00005453 E888000000 call mp3_synth_filter_this_8bit_shift_1_slow ; 7328 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 7329 00005458 F605[F0750000]10 test byte [cpuid_flags], 10h 7330 0000545F 740E jz short .no_rdtsc_supported@@@@ 7331 00005461 0F31 rdtsc 7332 00005463 0105[98770000] add [rdtsc_synth], eax 7333 00005469 1115[9C770000] adc [rdtsc_synth+4], edx 7334 7335 .no_rdtsc_supported@@@@: 7336 0000546F 5E pop esi 7337 00005470 A1[38F40000] mov eax, [mp3_samples_dst_step] 7338 00005475 C1E005 shl eax, 5 ; mul32 7339 00005478 8A0D[EE750000] mov cl, [option_rate_shift] 7340 0000547E D3E8 shr eax, cl 7341 00005480 0105[7C9D0000] add [mp3_curr_syn_dst], eax 7342 00005486 81C680000000 add esi, 128 ; SBLIMIT*4 7343 0000548C FF05[44F40000] inc dword [mp3_curr_frame] 7344 00005492 A1[44F40000] mov eax, [mp3_curr_frame] 7345 00005497 3B05[809D0000] cmp eax, [mp3_nb_frames] 7346 0000549D 0F8234FFFFFF jb .synth_frame_lop 7347 000054A3 5F pop edi 7348 000054A4 5E pop esi 7349 000054A5 033D[749D0000] add edi, [mp3_bytes_per_sample] 7350 000054AB 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 7351 000054B1 FF05[3CF40000] inc dword [mp3_curr_channel] 7352 000054B7 A1[3CF40000] mov eax, [mp3_curr_channel] 7353 000054BC 3B05[6C9D0000] cmp eax, [mp3_output_num_channels] 7354 000054C2 0F82FDFEFFFF jb .synth_channel_lop 7355 000054C8 F605[F0750000]10 test byte [cpuid_flags], 10h 7356 000054CF 740E jz short .no_rdtsc_supported@@@@@ 7357 000054D1 0F31 rdtsc 7358 000054D3 0105[68770000] add [rdtsc_synth_dct], eax 7359 000054D9 1115[6C770000] adc [rdtsc_synth_dct+4], edx 7360 7361 .no_rdtsc_supported@@@@@: 7362 000054DF C3 retn 7363 7364 7365 ; =============== S U B R O U T I N E ======================================= 7366 7367 7368 mp3_synth_filter_this_8bit_shift_1_slow: 7369 000054E0 A1[789D0000] mov eax, [mp3_curr_syn_index] ; IF LONG_WINDOW 7370 000054E5 A9E0010000 test eax, 1E0h ; 1FFh-1Fh 7371 000054EA 0F8477010000 jz .append_copy_to_window 7372 000054F0 90 nop 7373 7374 .append_copy_to_window_back: 7375 000054F1 89C5 mov ebp, eax 7376 000054F3 81E5C0010000 and ebp, 1C0h ; 1FFh-1Fh-20h 7377 000054F9 2520040000 and eax, 420h ; 20h+(1 shl 10) 7378 000054FE 8D7010 lea esi, [eax+10h] 7379 00005501 8D7830 lea edi, [eax+30h] 7380 00005504 F7DD neg ebp 7381 00005506 81E5C0010000 and ebp, 1C0h 7382 0000550C 8B0D[7C9D0000] mov ecx, [mp3_curr_syn_dst] 7383 7384 .samples_lop: 7385 00005512 BB00101000 mov ebx, 101000h ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 7386 ; @@out_shift equ (OUT_SHIFT_slow+(8*force_8bit)) 7387 ; OUT_SHIFT_slow = 5 ; @@out_shift = 13 7388 00005517 8B14B5[949D0000] mov edx, [mp3_synth_buf+esi*4] ; @@SUM8 @@sum,@@win1,0,@@syn1 7389 ; @@SUM8 macro sum,win,ww,syn 7390 ; IRP nn,0,1,2,3,4,5,6,7 7391 0000551E 8B04AD[4CEF0400] mov eax, [mp3_synth_win+ebp*4] 7392 00005525 F7EA imul edx 7393 00005527 01D3 add ebx, edx 7394 00005529 8B14B5[949E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] ; @@syn1 equ esi 7395 00005530 8B04AD[4CF00400] mov eax, [(mp3_synth_win+100h)+ebp*4] ; @@win1 equ ebp 7396 00005537 F7EA imul edx 7397 00005539 01D3 add ebx, edx 7398 0000553B 8B14B5[949F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 7399 00005542 8B04AD[4CF10400] mov eax, [(mp3_synth_win+200h)+ebp*4] 7400 00005549 F7EA imul edx 7401 0000554B 01D3 add ebx, edx 7402 0000554D 8B14B5[94A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 7403 00005554 8B04AD[4CF20400] mov eax, [(mp3_synth_win+300h)+ebp*4] 7404 0000555B F7EA imul edx 7405 0000555D 01D3 add ebx, edx 7406 0000555F 8B14B5[94A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] 7407 00005566 8B04AD[4CF30400] mov eax, [(mp3_synth_win+400h)+ebp*4] 7408 0000556D F7EA imul edx 7409 0000556F 01D3 add ebx, edx 7410 00005571 8B14B5[94A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 7411 00005578 8B04AD[4CF40400] mov eax, [(mp3_synth_win+500h)+ebp*4] 7412 0000557F F7EA imul edx 7413 00005581 01D3 add ebx, edx 7414 00005583 8B14B5[94A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 7415 0000558A 8B04AD[4CF50400] mov eax, [(mp3_synth_win+600h)+ebp*4] 7416 00005591 F7EA imul edx 7417 00005593 01D3 add ebx, edx 7418 00005595 8B14B5[94A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 7419 0000559C 8B04AD[4CF60400] mov eax, [(mp3_synth_win+700h)+ebp*4] 7420 000055A3 F7EA imul edx 7421 000055A5 01D3 add ebx, edx 7422 000055A7 8B14BD[949D0000] mov edx, [mp3_synth_buf+edi*4] 7423 000055AE 8B04AD[CCEF0400] mov eax, [(mp3_synth_win+80h)+ebp*4] 7424 000055B5 F7EA imul edx 7425 000055B7 01D3 add ebx, edx 7426 000055B9 8B14BD[949E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] ; @@SUM8 @@sum,@@win1,32,@@syn2 7427 ; @@syn2 equ edi 7428 ; @@win1 equ ebp 7429 000055C0 8B04AD[CCF00400] mov eax, [(mp3_synth_win+180h)+ebp*4] 7430 000055C7 F7EA imul edx 7431 000055C9 01D3 add ebx, edx 7432 000055CB 8B14BD[949F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] 7433 000055D2 8B04AD[CCF10400] mov eax, [(mp3_synth_win+280h)+ebp*4] 7434 000055D9 F7EA imul edx 7435 000055DB 01D3 add ebx, edx 7436 000055DD 8B14BD[94A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 7437 000055E4 8B04AD[CCF20400] mov eax, [(mp3_synth_win+380h)+ebp*4] 7438 000055EB F7EA imul edx 7439 000055ED 01D3 add ebx, edx 7440 000055EF 8B14BD[94A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 7441 000055F6 8B04AD[CCF30400] mov eax, [(mp3_synth_win+480h)+ebp*4] 7442 000055FD F7EA imul edx 7443 000055FF 01D3 add ebx, edx 7444 00005601 8B14BD[94A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 7445 00005608 8B04AD[CCF40400] mov eax, [(mp3_synth_win+580h)+ebp*4] 7446 0000560F F7EA imul edx 7447 00005611 01D3 add ebx, edx 7448 00005613 8B14BD[94A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 7449 0000561A 8B04AD[CCF50400] mov eax, [(mp3_synth_win+680h)+ebp*4] 7450 00005621 F7EA imul edx 7451 00005623 01D3 add ebx, edx 7452 00005625 8B14BD[94A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 7453 0000562C 8B04AD[CCF60400] mov eax, [(mp3_synth_win+780h)+ebp*4] 7454 00005633 F7EA imul edx 7455 00005635 01D3 add ebx, edx 7456 00005637 81FB00002000 cmp ebx, 200000h ; cmp @@sum,100h SHL (@@out_shift) 7457 0000563D 7321 jnb short .sat 7458 0000563F C1FB0D sar ebx, 13 ; sar @@sum,(@@out_shift) 7459 7460 .sat_back: 7461 00005642 8819 mov [ecx], bl 7462 00005644 030D[38F40000] add ecx, [mp3_samples_dst_step] 7463 0000564A 83C602 add esi, 2 7464 0000564D 83EF02 sub edi, 2 7465 00005650 83C502 add ebp, 2 7466 00005653 F7C51F000000 test ebp, 1Fh 7467 00005659 0F85B3FEFFFF jnz .samples_lop 7468 0000565F C3 retn 7469 7470 .sat: 7471 00005660 C1FB1F sar ebx, 31 ; sar @@sum,31 ; FFFFFFFFh,00000000h 7472 00005663 F7D3 not ebx 7473 00005665 EBDB jmp short .sat_back 7474 7475 .append_copy_to_window: 7476 00005667 8D3485[949D0000] lea esi, [mp3_synth_buf+eax*4] 7477 0000566E 8DBE00080000 lea edi, [esi+2048] 7478 00005674 B912000000 mov ecx, 18 7479 00005679 F3A5 rep movsd 7480 0000567B E971FEFFFF jmp .append_copy_to_window_back 7481 7482 7483 ; =============== S U B R O U T I N E ======================================= 7484 7485 7486 synth_8bit_shift_2_slow: 7487 00005680 F605[F0750000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 1,2,0 ; 8bit, quarter rate 7488 ; force_8bit, rate_shift=2, force_fast=0 7489 00005687 740E jz short .no_rdtsc_supported ; timelog_start rdtsc_synth_dct 7490 00005689 0F31 rdtsc 7491 0000568B 2905[68770000] sub [rdtsc_synth_dct], eax 7492 00005691 1915[6C770000] sbb [rdtsc_synth_dct+4], edx 7493 7494 .no_rdtsc_supported: 7495 00005697 BE[9CBD0000] mov esi, mp3_sb_samples 7496 0000569C 8B3D[30F40000] mov edi, [mp3_samples_dst] 7497 000056A2 C705[3CF40000]0000- mov dword [mp3_curr_channel], 0 7497 000056AA 0000 7498 7499 .synth_channel_lop: 7500 000056AC 56 push esi 7501 000056AD 57 push edi 7502 000056AE 893D[7C9D0000] mov [mp3_curr_syn_dst], edi 7503 000056B4 C705[44F40000]0000- mov dword [mp3_curr_frame], 0 7503 000056BC 0000 7504 7505 .synth_frame_lop: 7506 000056BE 56 push esi ; sb_samples[ch][i] 7507 000056BF F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_dct32 7508 000056C6 740E jz short .no_rdtsc_supported@ 7509 000056C8 0F31 rdtsc 7510 000056CA 2905[80770000] sub [rdtsc_dct32], eax 7511 000056D0 1915[84770000] sbb [rdtsc_dct32+4], edx 7512 7513 .no_rdtsc_supported@: 7514 000056D6 8B15[3CF40000] mov edx, [mp3_curr_channel] 7515 000056DC 8B0495[94BD0000] mov eax, [mp3_synth_index+edx*4] 7516 000056E3 832C95[94BD0000]20 sub dword [mp3_synth_index+edx*4], 32 7517 000056EB C1E20A shl edx, 10 ; channel*1024 7518 000056EE 25E0010000 and eax, 1E0h ; 1FFh-1Fh ; index(0..511), align 32 7519 000056F3 09D0 or eax, edx 7520 000056F5 A3[789D0000] mov [mp3_curr_syn_index], eax 7521 000056FA 8B3D[789D0000] mov edi, [mp3_curr_syn_index] 7522 00005700 8D3CBD[949D0000] lea edi, [mp3_synth_buf+edi*4] ; IF SYNTH32 7523 00005707 E89CDBFFFF call mp3_dct32_shift_2 ; mp3_dct32_shift_&rate_shift ; rate_shift=2 7524 0000570C F605[F0750000]10 test byte [cpuid_flags], 10h 7525 00005713 740E jz short .no_rdtsc_supported@@ ; timelog_end rdtsc_dct32 7526 00005715 0F31 rdtsc 7527 00005717 0105[80770000] add [rdtsc_dct32], eax 7528 0000571D 1115[84770000] adc [rdtsc_dct32+4], edx 7529 7530 .no_rdtsc_supported@@: 7531 00005723 F605[F0750000]10 test byte [cpuid_flags], 10h 7532 0000572A 740E jz short .no_rdtsc_supported@@@ ; timelog_start rdtsc_synth 7533 0000572C 0F31 rdtsc 7534 0000572E 2905[98770000] sub [rdtsc_synth], eax 7535 00005734 1915[9C770000] sbb [rdtsc_synth+4], edx 7536 7537 .no_rdtsc_supported@@@: 7538 0000573A E888000000 call mp3_synth_filter_this_8bit_shift_2_slow ; 7539 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 7540 0000573F F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_synth 7541 00005746 740E jz short .no_rdtsc_supported@@@@ 7542 00005748 0F31 rdtsc 7543 0000574A 0105[98770000] add [rdtsc_synth], eax 7544 00005750 1115[9C770000] adc [rdtsc_synth+4], edx 7545 7546 .no_rdtsc_supported@@@@: 7547 00005756 5E pop esi ; src 7548 00005757 A1[38F40000] mov eax, [mp3_samples_dst_step] 7549 0000575C C1E005 shl eax, 5 ; mul32 7550 0000575F 8A0D[EE750000] mov cl, [option_rate_shift] ; IF with_rate_shift 7551 00005765 D3E8 shr eax, cl 7552 00005767 0105[7C9D0000] add [mp3_curr_syn_dst], eax 7553 0000576D 81C680000000 add esi, 128 ; SBLIMIT*4 ; src+32*4 7554 00005773 FF05[44F40000] inc dword [mp3_curr_frame] 7555 00005779 A1[44F40000] mov eax, [mp3_curr_frame] 7556 0000577E 3B05[809D0000] cmp eax, [mp3_nb_frames] 7557 00005784 0F8234FFFFFF jb .synth_frame_lop 7558 0000578A 5F pop edi 7559 0000578B 5E pop esi 7560 0000578C 033D[749D0000] add edi, [mp3_bytes_per_sample] 7561 00005792 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 ; src 7562 00005798 FF05[3CF40000] inc dword [mp3_curr_channel] 7563 0000579E A1[3CF40000] mov eax, [mp3_curr_channel] 7564 000057A3 3B05[6C9D0000] cmp eax, [mp3_output_num_channels] 7565 000057A9 0F82FDFEFFFF jb .synth_channel_lop 7566 000057AF F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_synth_dct 7567 000057B6 740E jz short .no_rdtsc_supported@@@@@ 7568 000057B8 0F31 rdtsc 7569 000057BA 0105[68770000] add [rdtsc_synth_dct], eax 7570 000057C0 1115[6C770000] adc [rdtsc_synth_dct+4], edx 7571 7572 .no_rdtsc_supported@@@@@: 7573 000057C6 C3 retn 7574 7575 ; =============== S U B R O U T I N E ======================================= 7576 7577 7578 mp3_synth_filter_this_8bit_shift_2_slow: 7579 000057C7 A1[789D0000] mov eax, [mp3_curr_syn_index] 7580 000057CC A9E0010000 test eax, 1E0h ; 1FFh-1Fh ; offset 7581 000057D1 0F8477010000 jz .append_copy_to_window 7582 000057D7 90 nop 7583 7584 .append_copy_to_window_back: 7585 000057D8 89C5 mov ebp, eax ; @@win1 7586 000057DA 81E5C0010000 and ebp, 1C0h ; 1FFh-1Fh-20h 7587 000057E0 2520040000 and eax, 420h ; 20h+(1 shl 10) ; bit5 and channel 7588 000057E5 8D7010 lea esi, [eax+10h] ; @@syn1 7589 000057E8 8D7830 lea edi, [eax+30h] ; @@syn2 7590 000057EB F7DD neg ebp 7591 000057ED 81E5C0010000 and ebp, 1C0h ; 1FFh-1Fh-20h 7592 000057F3 8B0D[7C9D0000] mov ecx, [mp3_curr_syn_dst] ; @@dst 7593 7594 .samples_lop: 7595 000057F9 BB00101000 mov ebx, 101000h ; mov @@sum,(80h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 7596 ; @@out_shift equ (OUT_SHIFT_slow+(8*force_8bit)) 7597 ; @@out_shift = 13 ; OUT_SHIFT_slow = 5 7598 000057FE 8B14B5[949D0000] mov edx, [mp3_synth_buf+esi*4] ; @@SUM8 @@sum,@@win1,0,@@syn1 7599 ; @@SUM8 macro sum,win,ww, syn 7600 ; IRP nn,0,1,2,3,4,5,6,7 7601 ; [mp3_synth_buf+syn*4+(nn*64*4)] 7602 00005805 8B04AD[4CEF0400] mov eax, [mp3_synth_win+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] 7603 0000580C F7EA imul edx ; 64bit = 32bit * 32bit 7604 0000580E 01D3 add ebx, edx ; add sum,edx ; sum from MSW of result 7605 00005810 8B14B5[949E0000] mov edx, [(mp3_synth_buf+100h)+esi*4] ; 7606 ; [mp3_synth_buf+syn*4+(nn*64*4)] ; nn=1 7607 00005817 8B04AD[4CF00400] mov eax, [(mp3_synth_win+100h)+ebp*4] ; 7608 ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] ; nn=1 7609 0000581E F7EA imul edx 7610 00005820 01D3 add ebx, edx 7611 00005822 8B14B5[949F0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 7612 00005829 8B04AD[4CF10400] mov eax, [(mp3_synth_win+200h)+ebp*4] 7613 00005830 F7EA imul edx 7614 00005832 01D3 add ebx, edx 7615 00005834 8B14B5[94A00000] mov edx, [(mp3_synth_buf+300h)+esi*4] 7616 0000583B 8B04AD[4CF20400] mov eax, [(mp3_synth_win+300h)+ebp*4] 7617 00005842 F7EA imul edx 7618 00005844 01D3 add ebx, edx 7619 00005846 8B14B5[94A10000] mov edx, [(mp3_synth_buf+400h)+esi*4] ; 7620 ; [mp3_synth_buf+syn*4+(nn*64*4)] ; nn=4 7621 0000584D 8B04AD[4CF30400] mov eax, [(mp3_synth_win+400h)+ebp*4] ; 7622 ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] ; nn=4 7623 00005854 F7EA imul edx 7624 00005856 01D3 add ebx, edx 7625 00005858 8B14B5[94A20000] mov edx, [(mp3_synth_buf+500h)+esi*4] 7626 0000585F 8B04AD[4CF40400] mov eax, [(mp3_synth_win+500h)+ebp*4] 7627 00005866 F7EA imul edx 7628 00005868 01D3 add ebx, edx 7629 0000586A 8B14B5[94A30000] mov edx, [(mp3_synth_buf+600h)+esi*4] 7630 00005871 8B04AD[4CF50400] mov eax, [(mp3_synth_win+600h)+ebp*4] 7631 00005878 F7EA imul edx 7632 0000587A 01D3 add ebx, edx 7633 0000587C 8B14B5[94A40000] mov edx, [(mp3_synth_buf+700h)+esi*4] 7634 00005883 8B04AD[4CF60400] mov eax, [(mp3_synth_win+700h)+ebp*4] 7635 0000588A F7EA imul edx 7636 0000588C 01D3 add ebx, edx 7637 0000588E 8B14BD[949D0000] mov edx, [mp3_synth_buf+edi*4] ; @@SUM8 @@sum,@@win1,32,@@syn2 7638 00005895 8B04AD[CCEF0400] mov eax, [(mp3_synth_win+80h)+ebp*4] 7639 0000589C F7EA imul edx 7640 0000589E 01D3 add ebx, edx 7641 000058A0 8B14BD[949E0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 7642 000058A7 8B04AD[CCF00400] mov eax, [(mp3_synth_win+180h)+ebp*4] 7643 000058AE F7EA imul edx 7644 000058B0 01D3 add ebx, edx 7645 000058B2 8B14BD[949F0000] mov edx, [(mp3_synth_buf+200h)+edi*4] 7646 000058B9 8B04AD[CCF10400] mov eax, [(mp3_synth_win+280h)+ebp*4] 7647 000058C0 F7EA imul edx 7648 000058C2 01D3 add ebx, edx 7649 000058C4 8B14BD[94A00000] mov edx, [(mp3_synth_buf+300h)+edi*4] 7650 000058CB 8B04AD[CCF20400] mov eax, [(mp3_synth_win+380h)+ebp*4] 7651 000058D2 F7EA imul edx 7652 000058D4 01D3 add ebx, edx 7653 000058D6 8B14BD[94A10000] mov edx, [(mp3_synth_buf+400h)+edi*4] 7654 000058DD 8B04AD[CCF30400] mov eax, [(mp3_synth_win+480h)+ebp*4] 7655 000058E4 F7EA imul edx 7656 000058E6 01D3 add ebx, edx 7657 000058E8 8B14BD[94A20000] mov edx, [(mp3_synth_buf+500h)+edi*4] 7658 000058EF 8B04AD[CCF40400] mov eax, [(mp3_synth_win+580h)+ebp*4] 7659 000058F6 F7EA imul edx 7660 000058F8 01D3 add ebx, edx 7661 000058FA 8B14BD[94A30000] mov edx, [(mp3_synth_buf+600h)+edi*4] 7662 00005901 8B04AD[CCF50400] mov eax, [(mp3_synth_win+680h)+ebp*4] 7663 00005908 F7EA imul edx 7664 0000590A 01D3 add ebx, edx 7665 0000590C 8B14BD[94A40000] mov edx, [(mp3_synth_buf+700h)+edi*4] 7666 ; [mp3_synth_buf+syn*4+(nn*64*4)] ; nn=7 7667 00005913 8B04AD[CCF60400] mov eax, [(mp3_synth_win+780h)+ebp*4] 7668 ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] ; nn=7 7669 0000591A F7EA imul edx 7670 0000591C 01D3 add ebx, edx 7671 0000591E 81FB00002000 cmp ebx, 200000h ; cmp @@sum,100h SHL (@@out_shift) ; out_shift=13 7672 00005924 7321 jnb short .sat 7673 00005926 C1FB0D sar ebx, 13 ; sar @@sum,(@@out_shift) 7674 7675 .sat_back: 7676 00005929 8819 mov [ecx], bl ; mov byte ptr [@@dst],@@sum_8bit 7677 0000592B 030D[38F40000] add ecx, [mp3_samples_dst_step] 7678 00005931 83C604 add esi, 4 ; add @@syn1,1 shl rate_shift ; rate_shift=2 7679 00005934 83EF04 sub edi, 4 ; add @@syn2,1 shl rate_shift 7680 00005937 83C504 add ebp, 4 ; add @@win1,1 shl rate_shift 7681 0000593A F7C51F000000 test ebp, 1Fh ; test @@win1,1Fh 7682 00005940 0F85B3FEFFFF jnz .samples_lop 7683 00005946 C3 retn 7684 7685 .sat: 7686 00005947 C1FB1F sar ebx, 31 ; sar @@sum,31 ; FFFFFFFFh,00000000h 7687 0000594A F7D3 not ebx 7688 0000594C EBDB jmp short .sat_back 7689 7690 .append_copy_to_window: 7691 0000594E 8D3485[949D0000] lea esi, [mp3_synth_buf+eax*4] ; IF SYNTH32 7692 00005955 8DBE00080000 lea edi, [esi+2048] ; [esi+512*4] 7693 0000595B B912000000 mov ecx, 18 ; (12h*4)/4 7694 00005960 F3A5 rep movsd 7695 00005962 E971FEFFFF jmp .append_copy_to_window_back 7696 7697 7698 ; =============== S U B R O U T I N E ======================================= 7699 7700 7701 mp3_any_init_synth_window: 7702 00005967 31D2 xor edx, edx ; index (0..100h) 7703 00005969 31C9 xor ecx, ecx ; delta.val 7704 0000596B 898C12[4CEF0400] mov [mp3_synth_win+edx*2], ecx 7705 7706 .synth_lop: 7707 00005972 0FBF9C12[3E780000] movsx ebx, word [mp3_synth_win_src+edx*2] 7708 0000597A 01D9 add ecx, ebx 7709 0000597C 89C8 mov eax, ecx 7710 0000597E 803D[EF750000]00 cmp byte [option_fast], 0 7711 00005985 7403 jz short .not_fast 7712 00005987 C1F805 sar eax, 5 7713 7714 .not_fast: 7715 0000598A 803D[EF750000]00 cmp byte [option_fast], 0 7716 00005991 7503 jnz short .not_slow 7717 00005993 C1E00E shl eax, 14 ; (WFRAC_BITS_slow-WFRAC_BITS_default) 7718 7719 .not_slow: 7720 00005996 42 inc edx ; index (1..100h) 7721 00005997 BB00020000 mov ebx, 200h 7722 0000599C 29D3 sub ebx, edx ; 1FFh..100h 7723 0000599E 89049D[4CEF0400] mov [mp3_synth_win+ebx*4], eax 7724 000059A5 F7C23F000000 test edx, 3Fh 7725 000059AB 7402 jz short .synth_keep_sign 7726 000059AD F7D8 neg eax 7727 7728 .synth_keep_sign: 7729 000059AF 890495[4CEF0400] mov [mp3_synth_win+edx*4], eax 7730 000059B6 81FA00010000 cmp edx, 100h 7731 000059BC 72B4 jb short .synth_lop 7732 000059BE 31D2 xor edx, edx 7733 7734 .synth_neg_lop: 7735 000059C0 F7C230000000 test edx, 30h ; skip 0..0Fh (only negate 10h..3Fh) 7736 000059C6 7407 jz short .synth_neg_next 7737 000059C8 F71C95[4CEF0400] neg dword [mp3_synth_win+edx*4] 7738 7739 .synth_neg_next: 7740 000059CF 42 inc edx 7741 000059D0 81FA00020000 cmp edx, 200h 7742 000059D6 72E8 jb short .synth_neg_lop 7743 000059D8 31D2 xor edx, edx 7744 7745 .synth_swap_lop: 7746 000059DA 89D0 mov eax, edx 7747 000059DC 83E03F and eax, 3Fh 7748 000059DF 83E811 sub eax, 17 ; swap win [(17..31)] with win[(17..31)+32) 7749 000059E2 83F80E cmp eax, 14 ; 31-17 7750 000059E5 7715 ja short .synth_swap_next 7751 000059E7 8B0495[4CEF0400] mov eax, [mp3_synth_win+edx*4] 7752 000059EE 870495[CCEF0400] xchg eax, [(mp3_synth_win+80h)+edx*4] 7753 000059F5 890495[4CEF0400] mov [mp3_synth_win+edx*4], eax 7754 7755 .synth_swap_next: 7756 000059FC 42 inc edx 7757 000059FD 81FA00020000 cmp edx, 200h 7758 00005A03 72D5 jb short .synth_swap_lop 7759 00005A05 31D2 xor edx, edx 7760 7761 .synth_zero_lop: 7762 00005A07 C70495[8CEF0400]00- mov dword [(mp3_synth_win+40h)+edx*4], 0 7762 00005A0F 000000 7763 00005A12 83C240 add edx, 40h 7764 00005A15 81FA00020000 cmp edx, 200h 7765 00005A1B 72EA jb short .synth_zero_lop 7766 00005A1D BE[4CEF0400] mov esi, mp3_synth_win 7767 00005A22 8DBE00080000 lea edi, [esi+2048] ; [esi+512*4] 7768 00005A28 B900020000 mov ecx, 512 ; append another copy 7769 00005A2D F3A5 rep movsd 7770 00005A2F C3 retn 7771 7772 7773 ; =============== S U B R O U T I N E ======================================= 7774 7775 7776 mp3_init_post_collapse: 7777 00005A30 803D[EF750000]00 cmp byte [option_fast], 0 7778 00005A37 7411 jz short .not_fast 7779 00005A39 BE[4CEF0400] mov esi, mp3_synth_win 7780 00005A3E 89F7 mov edi, esi 7781 00005A40 B900040000 mov ecx, 1024 ; 512*(1+LONG_WINDOW) 7782 7783 .collapse_lop: 7784 00005A45 AD lodsd ; collapse 32bit to 16bit 7785 ; (that's slightly faster due to better caching) 7786 00005A46 66AB stosw 7787 00005A48 E2FB loop .collapse_lop 7788 7789 .not_fast: 7790 00005A4A C3 retn 7791 7792 7793 ; =============== S U B R O U T I N E ======================================= 7794 7795 7796 mp3_any_init_band_indices: 7797 00005A4B BE[70800000] mov esi, mp3_band_size_long 7798 00005A50 BF[60D70100] mov edi, mp3_band_index_long 7799 00005A55 BB09000000 mov ebx, 9 7800 7801 .band_index_lop_i: 7802 00005A5A 31C0 xor eax, eax 7803 00005A5C B916000000 mov ecx, 22 7804 7805 .band_index_lop_j: 7806 00005A61 66AB stosw 7807 00005A63 0FB616 movzx edx, byte [esi] 7808 00005A66 01D0 add eax, edx 7809 00005A68 46 inc esi 7810 00005A69 E2F6 loop .band_index_lop_j 7811 00005A6B 83C10A add ecx, 10 7812 00005A6E F366AB rep stosw 7813 00005A71 4B dec ebx 7814 00005A72 75E6 jnz short .band_index_lop_i 7815 00005A74 C3 retn 7816 7817 7818 ; =============== S U B R O U T I N E ======================================= 7819 7820 7821 mp3_any_init_lsf_sf_expand: 7822 00005A75 BE[0E780000] mov esi, mp3_lsf_sf_expand_init_table 7823 00005A7A BF[4CFF0400] mov edi, mp3_lsf_sf_expand_exploded_table 7824 00005A7F 31D2 xor edx, edx ; curr.index 7825 00005A81 31DB xor ebx, ebx ; curr.base 7826 7827 .lop: 7828 00005A83 663B5606 cmp dx, [esi+6] ; nextbase 7829 00005A87 7207 jb short .inrange 7830 00005A89 668B5E06 mov bx, [esi+6] 7831 00005A8D 83C608 add esi, 8 ; next entry 7832 7833 .inrange: 7834 00005A90 89D0 mov eax, edx 7835 00005A92 29D8 sub eax, ebx 7836 00005A94 8A0E mov cl, [esi] 7837 00005A96 D3E8 shr eax, cl ; div2 7838 00005A98 F67603 div byte [esi+3] ; mod3 ; [2]=slen[3] 7839 00005A9B 886703 mov [edi+3], ah 7840 00005A9E B400 mov ah, 0 ; eax=div.result 7841 00005AA0 F67602 div byte [esi+2] ; mod2 ; [2]=slen[2] 7842 00005AA3 886702 mov [edi+2], ah ; remainder 7843 00005AA6 B400 mov ah, 0 7844 00005AA8 F67601 div byte [esi+1] ; mod1 ; [1]=slen[1] 7845 00005AAB 668907 mov [edi], ax ; [0]=slen[0] 7846 00005AAE 668B4604 mov ax, [esi+4] ; [4]=tindex2 7847 00005AB2 66894704 mov [edi+4], ax ; [5]=force_preflag 7848 00005AB6 83C708 add edi, 8 7849 00005AB9 42 inc edx ; curr.index ; next 7850 00005ABA 81FA00040000 cmp edx, 1024 ; 512+512 7851 00005AC0 72C1 jb short .lop 7852 00005AC2 C3 retn 7853 7854 7855 ; =============== S U B R O U T I N E ======================================= 7856 7857 7858 mp3_any_init_huff_tables: 7859 00005AC3 BD[A87A0000] mov ebp, huff_tree_list_data 7860 00005AC8 BE[28850000] mov esi, huff_tree_list_numbits 7861 00005ACD BA01000000 mov edx, 1 ; idx (table 01h..11h) 7862 7863 .huffman_table_lop: 7864 00005AD2 31C0 xor eax, eax 7865 00005AD4 BF[78290500] mov edi, mp3_huff_tmp_bits 7866 00005AD9 B940000000 mov ecx, 40h ; 100h/4 ; 100h x 8bit 7867 00005ADE F3AB rep stosd 7868 00005AE0 BF[782A0500] mov edi, mp3_huff_tmp_codes 7869 00005AE5 B980000000 mov ecx, 80h ; 100h/2 ; 100h x 16bit 7870 00005AEA F3AB rep stosd 7871 00005AEC 31DB xor ebx, ebx 7872 7873 .huff_entry_lop: 7874 00005AEE 0FB67D00 movzx edi, byte [ebp+0] 7875 00005AF2 45 inc ebp ; dst=data 7876 00005AF3 AC lodsb ; numbits 7877 00005AF4 8887[78290500] mov [mp3_huff_tmp_bits+edi], al 7878 00005AFA B120 mov cl, 32 7879 00005AFC 28C1 sub cl, al ; 32-numbits 7880 00005AFE D3EB shr ebx, cl 7881 00005B00 66899C3F[782A0500] mov word [mp3_huff_tmp_codes+edi*2], bx 7882 00005B08 43 inc ebx ; next.code 7883 00005B09 D3E3 shl ebx, cl ; shift back to MSBs 7884 00005B0B 75E1 jnz short .huff_entry_lop 7885 00005B0D 60 pusha 7886 00005B0E B800010000 mov eax, 100h ; nb_codes 7887 00005B13 BB[78290500] mov ebx, mp3_huff_tmp_bits ; bits 7888 00005B18 BE[782A0500] mov esi, mp3_huff_tmp_codes ; codes 7889 00005B1D E837020000 call mp3_build_huff_table_root ; make table 7890 00005B22 61 popa 7891 00005B23 42 inc edx ; idx 7892 00005B24 83FA12 cmp edx, 12h 7893 00005B27 75A9 jnz short .huffman_table_lop ; next table 7894 00005B29 C3 retn 7895 7896 7897 ; =============== S U B R O U T I N E ======================================= 7898 7899 7900 mp3_integer_init_is_stereo_lsf: 7901 00005B2A 31FF xor edi, edi 7902 7903 .lsf_lop: 7904 00005B2C 89FE mov esi, edi 7905 00005B2E 83E63F and esi, 3Fh 7906 00005B31 46 inc esi 7907 00005B32 D1EE shr esi, 1 7908 00005B34 F7C740000000 test edi, 40h 7909 00005B3A 7402 jz short .lsf_no_shift 7910 00005B3C D1E6 shl esi, 1 7911 7912 .lsf_no_shift: 7913 00005B3E BA00000040 mov edx, 40000000h ; aka mul 1.000 7914 00005B43 83C604 add esi, 4 7915 00005B46 F7C780000000 test edi, 80h ; 2*40h 7916 00005B4C 7408 jz short .no_ms_stereo 7917 00005B4E BA9A79825A mov edx, 5A82799Ah ; 2D413CCDh*2 ; aka mul 1.414 7918 00005B53 83EE02 sub esi, 2 7919 7920 .no_ms_stereo: 7921 00005B56 89F1 mov ecx, esi 7922 00005B58 C1E902 shr ecx, 2 ; msbs 7923 00005B5B 83E603 and esi, 3 ; lsbs 7924 00005B5E 8B04B5[68840000] mov eax, [mp3_is_table_lsf_src+esi*4] 7925 00005B65 D3E8 shr eax, cl 7926 00005B67 F7C701000000 test edi, 1 7927 00005B6D 7501 jnz short .lsf_no_swap 7928 00005B6F 92 xchg eax, edx 7929 7930 .lsf_no_swap: 7931 00005B70 8904FD[4CE70400] mov [mp3_is_table_lsf+edi*8], eax 7932 00005B77 8914FD[50E70400] mov [(mp3_is_table_lsf+4)+edi*8], edx 7933 00005B7E 47 inc edi 7934 00005B7F 81FF00010000 cmp edi, 100h 7935 00005B85 72A5 jb short .lsf_lop 7936 00005B87 C3 retn 7937 7938 7939 ; =============== S U B R O U T I N E ======================================= 7940 7941 7942 mp3_integer_init_mdct_windows: 7943 00005B88 BF[CCE20400] mov edi, mp3_mdct_win 7944 00005B8D BE[F0810000] mov esi, mp3_mdct_win_src 7945 00005B92 B990000000 mov ecx, 144 ; 36*4 7946 00005B97 F3A5 rep movsd 7947 00005B99 BE[CCE20400] mov esi, mp3_mdct_win 7948 00005B9E BF[0CE50400] mov edi, (mp3_mdct_win+240h) 7949 00005BA3 B948000000 mov ecx, 72 ; 4*36/2 ; that is, 4*36 entry pairs 7950 7951 .mdct_lop_dupe: 7952 00005BA8 A5 movsd ; copy normal, [4..7][even] = +[0..3][even 7953 00005BA9 AD lodsd 7954 00005BAA F7D8 neg eax ; copy negated, [4..7][odd] = -[0..3][odd] 7955 00005BAC AB stosd 7956 00005BAD E2F9 loop .mdct_lop_dupe 7957 00005BAF C3 retn 7958 7959 7960 ; =============== S U B R O U T I N E ======================================= 7961 7962 7963 mp3_integer_init_table_4_3: 7964 00005BB0 803D[EF750000]00 cmp byte [option_fast], 0 7965 00005BB7 B048 mov al, 72 ; 100-6-VFRAC_BITS_slow 7966 00005BB9 7402 jz short .this_vfrac 7967 00005BBB B04C mov al, 76 ; 100-6-VFRAC_BITS_fast 7968 7969 .this_vfrac: 7970 00005BBD A2[A0F30000] mov [mp3_curr_vfrac_bits], al 7971 00005BC2 31FF xor edi, edi 7972 7973 .table_4_3_lop: 7974 00005BC4 57 push edi ; for i=1 to TABLE_4_3_SIZE-1 7975 00005BC5 89F8 mov eax, edi 7976 00005BC7 C1E802 shr eax, 2 7977 00005BCA F7E0 mul eax 7978 00005BCC F7E0 mul eax 7979 00005BCE 31DB xor ebx, ebx 7980 00005BD0 E8A2000000 call cbrt96 7981 00005BD5 020D[A0F30000] add cl, [mp3_curr_vfrac_bits] 7982 00005BDB 5F pop edi 7983 7984 .inner_lop: 7985 00005BDC 89F8 mov eax, edi 7986 00005BDE 83E003 and eax, 3 7987 00005BE1 8B0485[78840000] mov eax, [mp3_pow2_quarters+eax*4] 7988 00005BE8 F7E3 mul ebx 7989 00005BEA 88CD mov ch, cl 7990 00005BEC 09D2 or edx, edx 7991 00005BEE 7904 jns short .this 7992 00005BF0 D1EA shr edx, 1 7993 00005BF2 FECD dec ch 7994 7995 .this: 7996 00005BF4 8914BD[DC590200] mov [mp3_table_4_3_value+edi*4], edx 7997 00005BFB 88AF[A0D90100] mov [mp3_table_4_3_exp+edi], ch 7998 00005C01 47 inc edi 7999 00005C02 F7C703000000 test edi, 3 8000 00005C08 75D2 jnz short .inner_lop 8001 00005C0A 81FF3C800000 cmp edi, 803Ch 8002 00005C10 72B2 jb short .table_4_3_lop 8003 00005C12 C3 retn 8004 8005 8006 ; =============== S U B R O U T I N E ======================================= 8007 8008 8009 mp3_integer_init_exponent: 8010 00005C13 BF[CC620400] mov edi, mp3_expval_table 8011 00005C18 31D2 xor edx, edx 8012 8013 .exponent_lop: 8014 00005C1A 89D0 mov eax, edx ; val=i 8015 00005C1C 89D3 mov ebx, edx 8016 00005C1E 89D1 mov ecx, edx 8017 00005C20 C1EB04 shr ebx, 4 8018 00005C23 C1E906 shr ecx, 6 ; 4+2 8019 00005C26 83E00F and eax, 0Fh ; val=i AND 0Fh 8020 00005C29 83E303 and ebx, 3 8021 00005C2C 8D1C83 lea ebx, [ebx+eax*4] ; (0..0Fh)*4+(0..3) 8022 00005C2F 8B049D[DC590200] mov eax, [mp3_table_4_3_value+ebx*4] 8023 00005C36 09C0 or eax, eax 8024 00005C38 741A jz short .this 8025 00005C3A 2A8B[A0D90100] sub cl, [mp3_table_4_3_exp+ebx] 8026 00005C40 770D ja short .left_shift 8027 00005C42 F6D9 neg cl 8028 00005C44 D3E8 shr eax, cl 8029 00005C46 80F91F cmp cl, 1Fh 8030 00005C49 7609 jbe short .this 8031 00005C4B 31C0 xor eax, eax 8032 00005C4D EB05 jmp short .this 8033 8034 .left_shift: 8035 00005C4F B8FFFFFF7F mov eax, 7FFFFFFFh 8036 8037 .this: 8038 00005C54 AB stosd 8039 00005C55 42 inc edx 8040 00005C56 81FA00200000 cmp edx, 2000h 8041 00005C5C 72BC jb short .exponent_lop 8042 00005C5E BE[CC620400] mov esi, mp3_expval_table 8043 00005C63 BF[CC5A0400] mov edi, mp3_exp_table 8044 00005C68 B900020000 mov ecx, 200h 8045 8046 .exponent_dupe_lop: 8047 00005C6D 8B4604 mov eax, [esi+4] 8048 00005C70 AB stosd 8049 00005C71 83C640 add esi, 40h 8050 00005C74 E2F7 loop .exponent_dupe_lop 8051 00005C76 C3 retn 8052 8053 8054 ; =============== S U B R O U T I N E ======================================= 8055 8056 8057 cbrt96: 8058 00005C77 83EC18 sub esp, 18h ; cube root, val^(1/3), from https://gist.github.com/anonymous/729557 8059 ; in: ebx:edx:eax = unsigned 96bit input (integer) 8060 ; out: ebx = unsigned 32bit result (with fractional bits) 8061 ; out: cl = number of fractional bits 8062 00005C7A 890424 mov [esp], eax 8063 00005C7D 89542404 mov [esp+4], edx 8064 00005C81 895C2408 mov [esp+8], ebx 8065 00005C85 C744240C00000000 mov dword [esp+0Ch], 0 8066 00005C8D C744241000000000 mov dword [esp+10h], 0 8067 00005C95 C744241400000000 mov dword [esp+14h], 0 8068 00005C9D 31DB xor ebx, ebx ; result.value 8069 00005C9F B100 mov cl, 0 ; result.fraction 8070 00005CA1 09D0 or eax, edx ; skip if zero 8071 00005CA3 742F jz short .pre_shift_done 8072 8073 .pre_shift_lop: 8074 00005CA5 F7442408000000E0 test dword [esp+8], 0E0000000h 8075 00005CAD 7525 jnz short .pre_shift_done 8076 00005CAF D12424 shl dword [esp], 1 8077 00005CB2 D1542404 rcl dword [esp+4], 1 8078 00005CB6 D1542408 rcl dword [esp+8], 1 8079 00005CBA D12424 shl dword [esp], 1 8080 00005CBD D1542404 rcl dword [esp+4], 1 8081 00005CC1 D1542408 rcl dword [esp+8], 1 8082 00005CC5 D12424 shl dword [esp], 1 8083 00005CC8 D1542404 rcl dword [esp+4], 1 8084 00005CCC D1542408 rcl dword [esp+8], 1 8085 00005CD0 FEC1 inc cl 8086 00005CD2 EBD1 jmp short .pre_shift_lop 8087 8088 .pre_shift_done: 8089 00005CD4 B520 mov ch, 20h ; loopcount 8090 8091 .lop: 8092 00005CD6 01DB add ebx, ebx ; result*2 8093 00005CD8 89D8 mov eax, ebx ; y 8094 00005CDA 43 inc ebx ; result+1 8095 00005CDB F7E3 mul ebx ; y*(y+1) 8096 00005CDD 89C6 mov esi, eax 8097 00005CDF 89D7 mov edi, edx 8098 00005CE1 31ED xor ebp, ebp 8099 00005CE3 F9 stc 8100 00005CE4 11F6 adc esi, esi ; y*(y+1)*2+1 8101 00005CE6 11FF adc edi, edi 8102 00005CE8 11ED adc ebp, ebp 8103 00005CEA 01C6 add esi, eax 8104 00005CEC 11D7 adc edi, edx ; y*(y+1)*3+1 8105 00005CEE 83D500 adc ebp, 0 8106 00005CF1 D12424 shl dword [esp], 1 8107 00005CF4 D1542404 rcl dword [esp+4], 1 8108 00005CF8 D1542408 rcl dword [esp+8], 1 ; shl 3 8109 00005CFC D154240C rcl dword [esp+0Ch], 1 8110 00005D00 D1542410 rcl dword [esp+10h], 1 8111 00005D04 D1542414 rcl dword [esp+14h], 1 8112 00005D08 D12424 shl dword [esp], 1 8113 00005D0B D1542404 rcl dword [esp+4], 1 8114 00005D0F D1542408 rcl dword [esp+8], 1 8115 00005D13 D154240C rcl dword [esp+0Ch], 1 8116 00005D17 D1542410 rcl dword [esp+10h], 1 8117 00005D1B D1542414 rcl dword [esp+14h], 1 8118 00005D1F D12424 shl dword [esp], 1 8119 00005D22 D1542404 rcl dword [esp+4], 1 8120 00005D26 D1542408 rcl dword [esp+8], 1 8121 00005D2A D154240C rcl dword [esp+0Ch], 1 8122 00005D2E D1542410 rcl dword [esp+10h], 1 8123 00005D32 D1542414 rcl dword [esp+14h], 1 8124 00005D36 2974240C sub [esp+0Ch], esi 8125 00005D3A 197C2410 sbb [esp+10h], edi ; sub/compare 8126 00005D3E 196C2414 sbb [esp+14h], ebp 8127 00005D42 730D jnb short .next 8128 00005D44 4B dec ebx 8129 00005D45 0174240C add [esp+0Ch], esi 8130 00005D49 117C2410 adc [esp+10h], edi ; undo 8131 00005D4D 116C2414 adc [esp+14h], ebp 8132 8133 .next: 8134 00005D51 FECD dec ch 8135 00005D53 7581 jnz short .lop 8136 00005D55 83C418 add esp, 18h 8137 mp3_init_log_constants: 8138 00005D58 C3 retn 8139 8140 ;mp3_init_log_constants: 8141 ; retn 8142 8143 ; =============== S U B R O U T I N E ======================================= 8144 8145 8146 mp3_build_huff_table_root: 8147 00005D59 A3[7C2C0500] mov [_@@nb_codes], eax ; "init_vlc" 8148 00005D5E C705[802C0500]0000- mov dword [_@@prefix_numbits], 0 8148 00005D66 0000 8149 00005D68 C705[842C0500]0000- mov dword [_@@prefix_pattern], 0 8149 00005D70 0000 8150 00005D72 60 pusha 8151 00005D73 89C1 mov ecx, eax 8152 00005D75 31C0 xor eax, eax 8153 8154 .prescan_lop: 8155 00005D77 3A03 cmp al, [ebx] 8156 00005D79 7702 ja short .prescan_next 8157 00005D7B 8A03 mov al, [ebx] 8158 8159 .prescan_next: 8160 00005D7D 43 inc ebx 8161 00005D7E E2F7 loop .prescan_lop 8162 00005D80 3C09 cmp al, 9 ; CHILD_BITS 8163 00005D82 7202 jb short .prescan_this_limit 8164 00005D84 B009 mov al, 9 8165 8166 .prescan_this_limit: 8167 00005D86 A3[782C0500] mov [_@@table_nb_bits], eax 8168 00005D8B 61 popa 8169 8170 mp3_build_huff_table_recursive_child: 8171 00005D8C 8B0D[782C0500] mov ecx, [_@@table_nb_bits] 8172 00005D92 B801000000 mov eax, 1 8173 00005D97 D3E0 shl eax, cl 8174 00005D99 A3[882C0500] mov [_@@curr_table_size], eax 8175 00005D9E 48 dec eax 8176 00005D9F A3[8C2C0500] mov [_@@curr_table_mask], eax 8177 00005DA4 60 pusha 8178 00005DA5 8B1D[8C840000] mov ebx, [mp3_huff_num_entries] 8179 00005DAB 891D[902C0500] mov [_@@curr_table_index], ebx 8180 00005DB1 031D[882C0500] add ebx, [_@@curr_table_size] 8181 00005DB7 891D[8C840000] mov [mp3_huff_num_entries], ebx 8182 00005DBD 813D[8C840000]002E- cmp dword [mp3_huff_num_entries], 11776 ; HUFF_TREE_SIZE/4 8182 00005DC5 0000 8183 00005DC7 0F8781AFFFFF ja fatalunexpected 8184 00005DCD 61 popa 8185 00005DCE BF[601F0100] mov edi, huff_tree_buf 8186 00005DD3 A1[902C0500] mov eax, [_@@curr_table_index] 8187 00005DD8 66890497 mov [edi+edx*4], ax 8188 00005DDC A1[782C0500] mov eax, [_@@table_nb_bits] 8189 00005DE1 F7D8 neg eax 8190 00005DE3 6689449702 mov [edi+edx*4+2], ax 8191 00005DE8 BF[601F0100] mov edi, huff_tree_buf 8192 00005DED 8B15[902C0500] mov edx, [_@@curr_table_index] 8193 00005DF3 8B0D[882C0500] mov ecx, [_@@curr_table_size] 8194 8195 .clear_table_lop: 8196 00005DF9 66C70497FFFF mov word [edi+edx*4], 0FFFFh 8197 00005DFF 66C74497020000 mov word [edi+edx*4+2], 0 8198 00005E06 42 inc edx 8199 00005E07 E2F0 loop .clear_table_lop 8200 00005E09 53 push ebx 8201 00005E0A 56 push esi 8202 00005E0B 31D2 xor edx, edx 8203 8204 .make_table_lop: 8205 00005E0D 0FB60B movzx ecx, byte [ebx] 8206 00005E10 0FB706 movzx eax, word [esi] 8207 00005E13 2B0D[802C0500] sub ecx, [_@@prefix_numbits] 8208 00005E19 7E74 jle short .make_table_lop_next 8209 00005E1B D3E8 shr eax, cl 8210 00005E1D 3B05[842C0500] cmp eax, [_@@prefix_pattern] 8211 00005E23 756A jnz short .make_table_lop_next 8212 00005E25 BF[601F0100] mov edi, huff_tree_buf 8213 00005E2A 0FB706 movzx eax, word [esi] 8214 00005E2D 2B0D[782C0500] sub ecx, [_@@table_nb_bits] 8215 00005E33 773E ja short .create_child_table 8216 00005E35 F7D9 neg ecx 8217 00005E37 D3E0 shl eax, cl 8218 00005E39 2305[8C2C0500] and eax, [_@@curr_table_mask] 8219 00005E3F 0305[902C0500] add eax, [_@@curr_table_index] 8220 00005E45 8D3C87 lea edi, [edi+eax*4] 8221 00005E48 B801000000 mov eax, 1 8222 00005E4D D3E0 shl eax, cl 8223 00005E4F 89C1 mov ecx, eax 8224 00005E51 0FB603 movzx eax, byte [ebx] 8225 00005E54 2B05[802C0500] sub eax, [_@@prefix_numbits] 8226 8227 .make_rept_lop: 8228 00005E5A 66837F0200 cmp word [edi+2], 0 8229 00005E5F 0F85E9AEFFFF jnz fatalunexpected 8230 00005E65 668917 mov [edi], dx 8231 00005E68 66894702 mov [edi+2], ax 8232 00005E6C 83C704 add edi, 4 8233 00005E6F E2E9 loop .make_rept_lop 8234 00005E71 EB1C jmp short .make_table_lop_next 8235 8236 .create_child_table: 8237 00005E73 D3E8 shr eax, cl 8238 00005E75 2305[8C2C0500] and eax, [_@@curr_table_mask] 8239 00005E7B 0305[902C0500] add eax, [_@@curr_table_index] 8240 00005E81 F7D9 neg ecx 8241 00005E83 66394C8702 cmp [edi+eax*4+2], cx 8242 00005E88 7C05 jl short .make_table_lop_next 8243 00005E8A 66894C8702 mov [edi+eax*4+2], cx 8244 8245 .make_table_lop_next: 8246 00005E8F 83C602 add esi, 2 8247 00005E92 43 inc ebx 8248 00005E93 42 inc edx 8249 00005E94 3B15[7C2C0500] cmp edx, [_@@nb_codes] 8250 00005E9A 0F826DFFFFFF jb .make_table_lop 8251 00005EA0 5E pop esi 8252 00005EA1 5B pop ebx 8253 00005EA2 8B0D[882C0500] mov ecx, [_@@curr_table_size] 8254 00005EA8 8B15[902C0500] mov edx, [_@@curr_table_index] 8255 8256 .make_child_tables_lop: 8257 00005EAE BF[601F0100] mov edi, huff_tree_buf 8258 00005EB3 0FBF449702 movsx eax, word [edi+edx*4+2] 8259 00005EB8 83F800 cmp eax, 0 8260 00005EBB 796D jns short .make_child_tables_lop_next 8261 00005EBD F7D8 neg eax 8262 00005EBF 3B05[782C0500] cmp eax, [_@@table_nb_bits] 8263 00005EC5 7605 jbe short .make_child_tables_this 8264 00005EC7 A1[782C0500] mov eax, [_@@table_nb_bits] 8265 8266 .make_child_tables_this: 8267 00005ECC 51 push ecx 8268 00005ECD 52 push edx 8269 00005ECE FF35[902C0500] push dword [_@@curr_table_index] 8270 00005ED4 FF35[782C0500] push dword [_@@table_nb_bits] 8271 00005EDA FF35[802C0500] push dword [_@@prefix_numbits] 8272 00005EE0 FF35[842C0500] push dword [_@@prefix_pattern] 8273 00005EE6 8B0D[782C0500] mov ecx, [_@@table_nb_bits] 8274 00005EEC A3[782C0500] mov [_@@table_nb_bits], eax 8275 00005EF1 010D[802C0500] add [_@@prefix_numbits], ecx 8276 00005EF7 D325[842C0500] shl dword [_@@prefix_pattern], cl 8277 00005EFD 89D0 mov eax, edx 8278 00005EFF 2B05[902C0500] sub eax, [_@@curr_table_index] 8279 00005F05 0905[842C0500] or [_@@prefix_pattern], eax 8280 00005F0B E87CFEFFFF call mp3_build_huff_table_recursive_child 8281 00005F10 8F05[842C0500] pop dword [_@@prefix_pattern] 8282 00005F16 8F05[802C0500] pop dword [_@@prefix_numbits] 8283 00005F1C 8F05[782C0500] pop dword [_@@table_nb_bits] 8284 00005F22 8F05[902C0500] pop dword [_@@curr_table_index] 8285 00005F28 5A pop edx 8286 00005F29 59 pop ecx 8287 8288 .make_child_tables_lop_next: 8289 00005F2A 42 inc edx 8290 00005F2B E281 loop .make_child_tables_lop 8291 00005F2D C3 retn 8292 8293 8294 ; =============== S U B R O U T I N E ======================================= 8295 8296 8297 mp3_exclude_id3_and_tag: 8298 00005F2E 8B35[A02C0500] mov esi, [stream_pos] 8299 00005F34 8B0D[A42C0500] mov ecx, [bytes_left] 8300 00005F3A 83F90A cmp ecx, 10 8301 00005F3D 7240 jb short .no_id3 8302 00005F3F 8B06 mov eax, [esi] 8303 00005F41 25FFFFFF00 and eax, 0FFFFFFh 8304 ;cmp eax, '3DI' ; "ID3" 8305 ; 20/10/2024 8306 00005F46 3D49443300 cmp eax, 'ID3' ; FASM & NASM syntax 8307 00005F4B 7532 jnz short .no_id3 8308 00005F4D 8B4606 mov eax, [esi+6] 8309 00005F50 A980808080 test eax, 80808080h 8310 00005F55 7528 jnz short .no_id3 8311 8312 .xlat_4x7bit_to_28bit: 8313 00005F57 86E0 xchg al, ah 8314 00005F59 D0E0 shl al, 1 8315 00005F5B 66D1E0 shl ax, 1 8316 00005F5E 66C1E802 shr ax, 2 8317 00005F62 C1C810 ror eax, 16 8318 00005F65 86E0 xchg al, ah 8319 00005F67 D0E0 shl al, 1 8320 00005F69 66D1E0 shl ax, 1 8321 00005F6C C1E802 shr eax, 2 8322 00005F6F 83C00A add eax, 10 8323 00005F72 39C1 cmp ecx, eax 8324 00005F74 7209 jb short .no_id3 8325 00005F76 01C6 add esi, eax 8326 00005F78 29C1 sub ecx, eax 8327 00005F7A A3[20F40000] mov [mp3_id3_size], eax 8328 8329 .no_id3: 8330 00005F7F BA80000000 mov edx, 80h 8331 00005F84 39D1 cmp ecx, edx 8332 00005F86 721F jb short .no_tag_or_ext 8333 00005F88 8B440E80 mov eax, [esi+ecx-80h] 8334 00005F8C 25FFFFFF00 and eax, 0FFFFFFh 8335 ;cmp eax, 'GAT' ; "TAG" 8336 ; 20/10/2024 8337 00005F91 3D54414700 cmp eax, 'TAG' ; FASM & NASM syntax 8338 00005F96 0F8421010000 jz .got_tag_size_edx 8339 ;cmp eax, 'TXE' 8340 00005F9C 3D45585400 cmp eax, 'EXT' 8341 00005FA1 0F8416010000 jz .got_tag_size_edx 8342 8343 .no_tag_or_ext: 8344 00005FA7 BAE3000000 mov edx, 0E3h 8345 00005FAC 39D1 cmp ecx, edx 8346 00005FAE 7211 jb short .no_tagplus 8347 ;cmp dword [esi+ecx-0E3h], '+GAT' ; "TAG+" 8348 ; 20/10/2024 8349 00005FB0 81BC0E1DFFFFFF5441- cmp dword [esi+ecx-0E3h], 'TAG+' 8349 00005FB9 472B 8350 00005FBB 0F84FC000000 jz .got_tag_size_edx 8351 8352 .no_tagplus: 8353 00005FC1 BA14000000 mov edx, 20 ; 10+10 8354 00005FC6 39D1 cmp ecx, edx 8355 00005FC8 723C jb short .no_3di ; "3DI",04h 8356 00005FCA 817C0EF633444904 cmp dword [esi+ecx-10], 4494433h ; 'ID3'+04000000h 8357 00005FD2 7532 jnz short .no_3di 8358 00005FD4 F6440EFB10 test byte [esi+ecx-5], 10h ; bit 4 8359 00005FD9 742B jz short .no_3di 8360 00005FDB 8B440EFC mov eax, [esi+ecx-4] 8361 00005FDF A980808080 test eax, 80808080h 8362 00005FE4 7520 jnz short .no_3di 8363 8364 .@xlat_4x7bit_to_28bit: 8365 00005FE6 86E0 xchg al, ah 8366 00005FE8 D0E0 shl al, 1 8367 00005FEA 66D1E0 shl ax, 1 8368 00005FED 66C1E802 shr ax, 2 8369 00005FF1 C1C810 ror eax, 10h 8370 00005FF4 86E0 xchg al, ah 8371 00005FF6 D0E0 shl al, 1 8372 00005FF8 66D1E0 shl ax, 1 8373 00005FFB C1E802 shr eax, 2 8374 00005FFE 8D5014 lea edx, [eax+20] ; [eax+10+10] ; hdr+footer siz 8375 00006001 E9B7000000 jmp .got_tag_size_edx 8376 8377 .no_3di: 8378 ;cmp dword [esi+ecx-32], 'TEPA' ; [esi+ecx-32+0] 8379 ; 20/10/2024 8380 00006006 817C0EE041504554 cmp dword [esi+ecx-32], 'APET' 8381 ; check "APETAGEX" 8382 0000600E 7520 jnz short .no_ape 8383 ;cmp dword [esi+ecx-28], 'XEGA' ; [esi+ecx-32+4] 8384 00006010 817C0EE441474558 cmp dword [esi+ecx-28], 'AGEX' 8385 00006018 7516 jnz short .no_ape 8386 0000601A 8B540EEC mov edx, [esi+ecx-20] ; [esi+ecx-32+12] ; get size 8387 0000601E F7440EF400000080 test dword [esi+ecx-12], 80000000h ; [esi+ecx-32+20],1 shl 31 8388 00006026 7403 jz short .no_ape_header 8389 00006028 83C220 add edx, 32 ; hdr.size 8390 8391 .no_ape_header: 8392 0000602B E98D000000 jmp .got_tag_size_edx 8393 8394 .no_ape: 8395 00006030 BA14000000 mov edx, 20 ; 11+9 8396 00006035 39D1 cmp ecx, edx ; "LYRICSEND" or "LYRICS200" 8397 ; (11+N+9 bytes each) 8398 00006037 7258 jb short .no_lyrics 8399 ;cmp dword [esi+ecx-9], 'IRYL' 8400 ; 20/10/2024 8401 00006039 817C0EF74C595249 cmp dword [esi+ecx-9], 'LYRI' ; FASM & NASM syntax 8402 00006041 754E jnz short .no_lyrics 8403 00006043 807C0EFB43 cmp byte [esi+ecx-5], 'C' 8404 00006048 7547 jnz short .no_lyrics 8405 ;cmp dword [esi+ecx-4], 'DNES' 8406 0000604A 817C0EFC53454E44 cmp dword [esi+ecx-4], 'SEND' 8407 00006052 740C jz short .lyrics3_v1 8408 ;cmp dword [esi+ecx-4], '002S' 8409 00006054 817C0EFC53323030 cmp dword [esi+ecx-4], 'S200' 8410 0000605C 7440 jz short .lyrics3_v2 8411 0000605E 7531 jnz short .no_lyrics 8412 8413 .lyrics3_v1: 8414 00006060 BA14000000 mov edx, 20 ; 11+9 8415 8416 .lyrics3_v1_size_lop: 8417 00006065 8D040E lea eax, [esi+ecx] 8418 00006068 29D0 sub eax, edx 8419 ;cmp dword [eax], 'IRYL' ; "LYRICSBEGIN" 8420 ; 20/10/2024 8421 0000606A 81384C595249 cmp dword [eax], 'LYRI' 8422 00006070 7512 jnz short .lyrics3_v1_size_next 8423 ;cmp dword [eax+4], 'EBSC' 8424 00006072 81780443534245 cmp dword [eax+4], 'CSBE' 8425 00006079 7509 jnz short .lyrics3_v1_size_next 8426 ;cmp dword [eax+7], 'NIGE' 8427 0000607B 8178074547494E cmp dword [eax+7], 'EGIN' 8428 00006082 7439 jz short .got_tag_size_edx 8429 8430 .lyrics3_v1_size_next: 8431 00006084 42 inc edx 8432 00006085 81FA00140000 cmp edx, 5120 8433 0000608B 7704 ja short .no_lyrics 8434 0000608D 39CA cmp edx, ecx 8435 0000608F 76D4 jbe short .lyrics3_v1_size_lop 8436 ;jmp short .no_lyrics 8437 8438 .no_lyrics: 8439 ;jmp short .footer_tag_all_done 8440 ; 22/10/2024 8441 .footer_tag_all_done: 8442 00006091 8935[A02C0500] mov [stream_pos], esi 8443 00006097 890D[A42C0500] mov [bytes_left], ecx 8444 0000609D C3 retn 8445 8446 .lyrics3_v2: 8447 0000609E 51 push ecx 8448 0000609F 56 push esi 8449 000060A0 8D740EF1 lea esi, [esi+ecx-15] ; [esi+ecx-6-9] 8450 000060A4 B906000000 mov ecx, 6 8451 000060A9 31D2 xor edx, edx 8452 8453 .lyrics3_v2_size_lop: 8454 000060AB 6BD20A imul edx, 10 8455 000060AE 0FB606 movzx eax, byte [esi] 8456 000060B1 46 inc esi 8457 000060B2 2C30 sub al, 30h 8458 000060B4 01C2 add edx, eax 8459 000060B6 E2F3 loop .lyrics3_v2_size_lop 8460 000060B8 5E pop esi 8461 000060B9 59 pop ecx 8462 000060BA 83C20F add edx, 0Fh ; 6+9 8463 ;jmp short .got_tag_size_edx 8464 8465 .got_tag_size_edx: 8466 ;;; 8467 ; 22/10/2024 8468 000060BD 29D1 sub ecx, edx 8469 000060BF 7311 jnb short .cont 8470 ;;; 8471 000060C1 89D0 mov eax, edx 8472 000060C3 E853050000 call wr_decimal_eax 8473 000060C8 E822050000 call wrcrlf 8474 ;;; 8475 ;sub ecx, edx 8476 ;jb fatalunexpected 8477 000060CD E97CACFFFF jmp fatalunexpected 8478 .cont: 8479 ;;; 8480 000060D2 0115[24F40000] add [mp3_tag_size], edx 8481 000060D8 E9A2FEFFFF jmp .no_id3 8482 8483 8484 ; =============== S U B R O U T I N E ======================================= 8485 8486 8487 mp3_detect_free_format_block_size: 8488 000060DD 833D[9CF30000]00 cmp dword [mp3_free_format_frame_size], 0 8489 000060E4 0F85A5000000 jnz .already_detected 8490 000060EA 31D2 xor edx, edx 8491 8492 .find_distance_lop: 8493 000060EC 3B15[4CF40000] cmp edx, [mp3_src_remain] 8494 000060F2 742B jz short .match_eof 8495 000060F4 8D4204 lea eax, [edx+4] 8496 000060F7 3B05[4CF40000] cmp eax, [mp3_src_remain] 8497 000060FD 771E ja short .find_distance_failed 8498 000060FF 8B0416 mov eax, [esi+edx] 8499 00006102 E8EDA0FFFF call bswap_eax 8500 00006107 3305[4C9D0000] xor eax, [mp3_hdr_32bit_header] 8501 0000610D 25000CFEFF and eax, 0FFFE0C00h 8502 00006112 740B jz short .match_eof 8503 8504 .find_distance_next: 8505 00006114 42 inc edx 8506 00006115 81FA00100000 cmp edx, 1000h 8507 0000611B 76CF jbe short .find_distance_lop 8508 8509 .find_distance_failed: 8510 0000611D F9 stc 8511 0000611E C3 retn 8512 8513 .match_eof: 8514 0000611F 89D0 mov eax, edx 8515 00006121 2B05[589D0000] sub eax, [mp3_hdr_flag_padding] 8516 00006127 83F804 cmp eax, 4 8517 0000612A 72E8 jb short .find_distance_next 8518 0000612C A3[9CF30000] mov [mp3_free_format_frame_size], eax 8519 00006131 31DB xor ebx, ebx 8520 8521 .confirm_distance_lop: 8522 00006133 8B041E mov eax, [esi+ebx] 8523 00006136 E8B9A0FFFF call bswap_eax 8524 0000613B C1E80A shr eax, 10 ; 9+1 8525 0000613E 131D[9CF30000] adc ebx, [mp3_free_format_frame_size] 8526 00006144 3B1D[4CF40000] cmp ebx, [mp3_src_remain] 8527 0000614A 7422 jz short .confirm_distance_match_eof 8528 0000614C 8D4304 lea eax, [ebx+4] 8529 0000614F 3B05[4CF40000] cmp eax, [mp3_src_remain] 8530 00006155 77BD ja short .find_distance_next 8531 00006157 8B041E mov eax, [esi+ebx] 8532 0000615A E895A0FFFF call bswap_eax 8533 0000615F 3305[4C9D0000] xor eax, [mp3_hdr_32bit_header] 8534 00006165 25000CFEFF and eax, 0FFFE0C00h 8535 0000616A 75A8 jnz short .find_distance_next 8536 0000616C EBC5 jmp short .confirm_distance_lop 8537 8538 .confirm_distance_match_eof: 8539 0000616E A1[9CF30000] mov eax, [mp3_free_format_frame_size] 8540 00006173 C1E003 shl eax, 3 8541 00006176 F725[5C9D0000] mul dword [mp3_sample_rate] 8542 0000617C 8B0D[5CF40000] mov ecx, [mp3_nb_granules] 8543 00006182 69C940020000 imul ecx, 240h 8544 00006188 F7F1 div ecx 8545 0000618A A3[649D0000] mov [mp3_bit_rate], eax 8546 8547 .already_detected: 8548 0000618F F8 clc 8549 00006190 C3 retn 8550 8551 8552 ; =============== S U B R O U T I N E ======================================= 8553 8554 8555 mp3_check_xing_info: 8556 00006191 C705[A4F30000]0000- mov dword [mp3_xing_id], 0 8556 00006199 0000 8557 0000619B C705[ACF30000]0000- mov dword [mp3_xing_frames], 0 8557 000061A3 0000 8558 000061A5 C705[B0F30000]0000- mov dword [mp3_xing_filesize], 0 8558 000061AD 0000 8559 000061AF 8B35[409D0000] mov esi, [mp3_src_data_location] 8560 000061B5 AD lodsd 8561 ;cmp eax, 'gniX' 8562 ; 20/10/2024 8563 000061B6 3D58696E67 cmp eax, 'Xing' ; FASM & NASM syntax 8564 000061BB 7401 jz short .xing 8565 000061BD C3 retn 8566 8567 .xing: 8568 000061BE A3[A4F30000] mov [mp3_xing_id], eax 8569 000061C3 AD lodsd 8570 000061C4 E82BA0FFFF call bswap_eax 8571 000061C9 A3[A8F30000] mov [mp3_xing_flags], eax 8572 000061CE 89C2 mov edx, eax 8573 000061D0 F7C201000000 test edx, 1 8574 000061D6 740B jz short .no_xing_frames 8575 000061D8 AD lodsd 8576 000061D9 E816A0FFFF call bswap_eax 8577 000061DE A3[ACF30000] mov [mp3_xing_frames], eax 8578 8579 .no_xing_frames: 8580 000061E3 F7C202000000 test edx, 2 ; 1 shl 1 8581 000061E9 740B jz short .no_xing_filesize 8582 000061EB AD lodsd 8583 000061EC E803A0FFFF call bswap_eax 8584 000061F1 A3[B0F30000] mov [mp3_xing_filesize], eax 8585 8586 .no_xing_filesize: 8587 000061F6 F7C204000000 test edx, 4 ; 1 shl 2 8588 000061FC 740C jz short .no_xing_toc 8589 000061FE B964000000 mov ecx, 100 8590 00006203 BF[B4F30000] mov edi, mp3_xing_toc 8591 00006208 F3A4 rep movsb 8592 8593 .no_xing_toc: 8594 0000620A F7C208000000 test edx, 8 ; 1 shl 3 8595 00006210 740B jz short .no_xing_vbr_scale 8596 00006212 AD lodsd 8597 00006213 E8DC9FFFFF call bswap_eax 8598 00006218 A3[18F40000] mov [mp3_xing_vbr_scale], eax 8599 8600 .no_xing_vbr_scale: 8601 0000621D C705[649D0000]0000- mov dword [mp3_bit_rate], 0 8601 00006225 0000 8602 00006227 A1[5C9D0000] mov eax, [mp3_sample_rate] 8603 0000622C C1E003 shl eax, 3 8604 0000622F F725[B0F30000] mul dword [mp3_xing_filesize] 8605 00006235 8B0D[ACF30000] mov ecx, [mp3_xing_frames] 8606 0000623B 0FAF0D[5CF40000] imul ecx, [mp3_nb_granules] 8607 00006242 69C940020000 imul ecx, 576 ; 18*32 8608 00006248 39CA cmp edx, ecx 8609 0000624A 7307 jnb short .overflow 8610 0000624C F7F1 div ecx 8611 0000624E A3[649D0000] mov [mp3_bit_rate], eax 8612 8613 .overflow: 8614 00006253 C3 retn 8615 8616 8617 ; =============== S U B R O U T I N E ======================================= 8618 8619 ; 20/10/2024 8620 mp3_decode_frame: 8621 00006254 890D[4CF40000] mov [mp3_src_remain], ecx 8622 0000625A 893D[30F40000] mov [mp3_samples_dst], edi 8623 00006260 F605[F0750000]10 test byte [cpuid_flags], 10h 8624 00006267 740E jz short .no_rdtsc_supported@@@@ 8625 00006269 0F31 rdtsc 8626 0000626B 2905[B0770000] sub [rdtsc_total], eax 8627 00006271 1915[B4770000] sbb [rdtsc_total+4], edx 8628 8629 .no_rdtsc_supported@@@@: 8630 00006277 E8DC9FFFFF call mp3_search_get_header 8631 0000627C 0F8294010000 jc .error 8632 00006282 A1[449D0000] mov eax, [mp3_src_frame_size] 8633 00006287 83F800 cmp eax, 0 8634 0000628A 0F8E86010000 jle .error 8635 00006290 3B05[4CF40000] cmp eax, [mp3_src_remain] 8636 00006296 0F877A010000 ja .error 8637 0000629C 8935[48F40000] mov [mp3_bitstream_start], esi 8638 ; 11/01/2025 8639 ;mov eax, 32 8640 8641 .mp3mac_bitstream_set_position: 8642 ; 22/10/2024 8643 ;mov esi, [mp3_bitstream_start] 8644 ;mov cl, al 8645 ;shr eax, 3 8646 ;and cl, 7 8647 ;mov eax, 4 8648 ;add esi, eax 8649 000062A2 83C604 add esi, 4 8650 000062A5 E8529FFFFF call mp3_recollect_bits 8651 8652 .mp3mac_get_n_bits: 8653 ;mov eax, ebp ; mp3_col32 8654 ;shl ebp, cl 8655 ;rol eax, cl 8656 ;xor eax, ebp ; mp3_col32 8657 ;sub ch, cl ; sub mp3_colNN,num 8658 ;jns short .cont 8659 ;mov cl, ch ; mov cl,mp3_colNN 8660 ;add ch, 16 8661 ;rol ebp, cl ; rol mp3_col32,cl 8662 ;mov bp, [esi] ; mov mp3_col16,word ptr [esi] 8663 ;add esi, 2 8664 ;ror bp, 8 ; endianess 8665 ;ror ebp, cl ; ror mp3_col32,cl 8666 8667 .cont: 8668 000062AA E8AFA1FFFF call mp3_bitstream_read_header_extra 8669 000062AF E839A3FFFF call mp3_bitstream_read_granules 8670 000062B4 0F825C010000 jc .error 8671 000062BA E88D9FFFFF call mp3_uncollect_bits 8672 000062BF 8935[409D0000] mov [mp3_src_data_location], esi 8673 000062C5 833D[30F40000]00 cmp dword [mp3_samples_dst], 0 8674 000062CC 0F840F010000 jz .skip_decoding 8675 000062D2 E8ECA7FFFF call mp3_bitstream_append_to_main_data_pool 8676 000062D7 833D[34F40000]00 cmp dword [mp3_samples_output_size], 0 8677 000062DE 0F84FD000000 jz .skip_decoding 8678 000062E4 C705[40F40000]0000- mov dword [mp3_curr_granule], 0 8678 000062EC 0000 8679 000062EE BB[60F40000] mov ebx, mp3_granules 8680 8681 .body_granule_lop: 8682 000062F3 891D[942C0500] mov [_@@granule_addr], ebx 8683 000062F9 C705[3CF40000]0000- mov dword [mp3_curr_channel], 0 8683 00006301 0000 8684 8685 .body_channel_lop: 8686 00006303 8B4304 mov eax, [ebx+4] ; [ebx+$mp3gr_part2_3_start] 8687 00006306 8B35[48F40000] mov esi, [mp3_bitstream_start] 8688 0000630C 88C1 mov cl, al ; mp3mac_bitstream_set_position 8689 0000630E C1E803 shr eax, 3 8690 00006311 80E107 and cl, 7 8691 00006314 01C6 add esi, eax 8692 00006316 E8E19EFFFF call mp3_recollect_bits 8693 0000631B 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 8694 0000631D D3E5 shl ebp, cl 8695 0000631F D3C0 rol eax, cl 8696 00006321 31E8 xor eax, ebp 8697 00006323 28CD sub ch, cl 8698 00006325 7913 jns short .cont@ 8699 00006327 88E9 mov cl, ch ; mp3mac_collect_more 8700 00006329 80C510 add ch, 16 8701 0000632C D3C5 rol ebp, cl 8702 0000632E 668B2E mov bp, [esi] 8703 00006331 83C602 add esi, 2 8704 00006334 66C1CD08 ror bp, 8 8705 00006338 D3CD ror ebp, cl 8706 8707 .cont@: 8708 0000633A E81AA8FFFF call mp3_bitstream_read_scalefacs 8709 0000633F E812AAFFFF call mp3_get_exponents_from_scale_factors 8710 00006344 E856ABFFFF call mp3_huffman_decode ; reads up to $mp3gr_part2_3_end 8711 00006349 0F82C7000000 jc .error 8712 8713 .body_channel_next: 8714 0000634F 81C340130000 add ebx, 4928 ; $mp3gr_entrysiz*2 8715 00006355 FF05[3CF40000] inc dword [mp3_curr_channel] 8716 0000635B A1[3CF40000] mov eax, [mp3_curr_channel] 8717 00006360 3B05[6C9D0000] cmp eax, [mp3_output_num_channels] 8718 00006366 729B jb short .body_channel_lop 8719 00006368 8B1D[942C0500] mov ebx, [_@@granule_addr] 8720 8721 .mp3mac_push_bitstream: 8722 0000636E 51 push ecx 8723 0000636F 55 push ebp 8724 00006370 56 push esi 8725 00006371 E827B0FFFF call mp3_compute_stereo 8726 00006376 C705[3CF40000]0000- mov dword [mp3_curr_channel], 0 8726 0000637E 0000 8727 8728 .cast_channel_lop: 8729 00006380 E8F0B2FFFF call mp3_reorder_block 8730 00006385 E885B3FFFF call mp3_compute_antialias 8731 0000638A E870BCFFFF call mp3_compute_imdct 8732 0000638F 81C340130000 add ebx, 4928 ; $mp3gr_entrysiz*2 8733 00006395 FF05[3CF40000] inc dword [mp3_curr_channel] 8734 0000639B A1[3CF40000] mov eax, [mp3_curr_channel] 8735 000063A0 3B05[6C9D0000] cmp eax, [mp3_output_num_channels] 8736 000063A6 72D8 jc short .cast_channel_lop 8737 8738 .mp3mac_pop_bitstream: 8739 000063A8 5E pop esi 8740 000063A9 5D pop ebp 8741 000063AA 59 pop ecx 8742 000063AB 8B1D[942C0500] mov ebx, [_@@granule_addr] 8743 000063B1 81C3A0090000 add ebx, 2464 ; $mp3gr_entrysiz 8744 000063B7 FF05[40F40000] inc dword [mp3_curr_granule] 8745 000063BD A1[40F40000] mov eax, [mp3_curr_granule] 8746 000063C2 3B05[5CF40000] cmp eax, [mp3_nb_granules] 8747 000063C8 0F8225FFFFFF jc .body_granule_lop 8748 000063CE E8799EFFFF call mp3_uncollect_bits 8749 000063D3 3B35[3C9D0000] cmp esi, [main_data_pool_wr_ptr] 8750 000063D9 773B ja short .error 8751 000063DB FF15[909D0000] call dword [mp3_synth_filter_proc] ; synth maths 8752 8753 .skip_decoding: 8754 000063E1 A1[50F40000] mov eax, [mp3_extra_bytes] 8755 000063E6 0105[449D0000] add [mp3_src_frame_size], eax 8756 000063EC A1[34F40000] mov eax, [mp3_samples_output_size] 8757 000063F1 0105[2CF40000] add [mp3_total_output_size], eax 8758 000063F7 FF05[28F40000] inc dword [mp3_num_frames_decoded] 8759 8760 .timelog_end: ; timelog_end macro ttt 8761 000063FD F605[F0750000]10 test byte [cpuid_flags], 10h 8762 00006404 740F jz short .no_rdtsc_supported 8763 00006406 0F31 rdtsc ; read timestamp counter 8764 00006408 0105[B0770000] add [rdtsc_total], eax 8765 0000640E 1115[B4770000] adc [rdtsc_total+4], edx 8766 ; 22/10/2024 8767 00006414 F8 clc 8768 ; 20/10/2024 8769 .no_rdtsc_supported: 8770 ;clc 8771 00006415 C3 retn 8772 8773 .error: 8774 00006416 F605[F0750000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_total 8775 0000641D 740E jz short .no_rdtsc_supported@ 8776 0000641F 0F31 rdtsc 8777 00006421 0105[B0770000] add [rdtsc_total], eax 8778 00006427 1115[B4770000] adc [rdtsc_total+4], edx 8779 8780 ; 20/10/2024 8781 .no_rdtsc_supported@: 8782 0000642D A1[50F40000] mov eax, [mp3_extra_bytes] 8783 00006432 0105[449D0000] add [mp3_src_frame_size], eax 8784 00006438 F9 stc 8785 00006439 C3 retn 8786 8787 8788 ; =============== S U B R O U T I N E ======================================= 8789 8790 8791 mp3_init: 8792 0000643A BF[3C8D0000] mov edi, main_data_pool_start ; = mp3_context_start 8793 ;mov ecx, 74916 ; (mp3_context_end-mp3_context_start)/4 8794 0000643F B984240100 mov ecx, (mp3_context_end-mp3_context_start)/4 8795 00006444 31C0 xor eax, eax ; ERRIF @@len AND 03h 8796 00006446 F3AB rep stosd ; clear context 8797 00006448 C705[3C9D0000]- mov dword [main_data_pool_wr_ptr], main_data_pool_start 8797 0000644E [3C8D0000] 8798 00006452 833D[88840000]00 cmp dword [mp3_initialized], 0 8799 00006459 753C jnz short .already_initialized 8800 0000645B E8CAF6FFFF call mp3_integer_init_is_stereo_lsf 8801 00006460 E823F7FFFF call mp3_integer_init_mdct_windows 8802 00006465 E846F7FFFF call mp3_integer_init_table_4_3 8803 0000646A E8A4F7FFFF call mp3_integer_init_exponent 8804 0000646F E8F3F4FFFF call mp3_any_init_synth_window 8805 00006474 E8D2F5FFFF call mp3_any_init_band_indices 8806 00006479 E8F7F5FFFF call mp3_any_init_lsf_sf_expand 8807 0000647E E840F6FFFF call mp3_any_init_huff_tables 8808 00006483 E8D0F8FFFF call mp3_init_log_constants 8809 00006488 E8A3F5FFFF call mp3_init_post_collapse 8810 0000648D C705[88840000]0100- mov dword [mp3_initialized], 1 8810 00006495 0000 8811 8812 .already_initialized: 8813 00006497 0FB605[EF750000] movzx eax, byte [option_fast] 8814 0000649E C705[749D0000]0200- mov dword [mp3_bytes_per_sample], 2 8814 000064A6 0000 8815 000064A8 D1E0 shl eax, 1 8816 000064AA 0205[ED750000] add al, [option_8bit] 8817 000064B0 A801 test al, 1 8818 000064B2 740A jz short .not_8bit 8819 000064B4 C705[749D0000]0100- mov dword [mp3_bytes_per_sample], 1 8819 000064BC 0000 8820 8821 .not_8bit: 8822 000064BE 6BC003 imul eax, 3 8823 000064C1 0205[EE750000] add al, [option_rate_shift] 8824 000064C7 8B0485[AE8A0000] mov eax, [mp3_synth_filter_procs+eax*4] 8825 000064CE A3[909D0000] mov [mp3_synth_filter_proc], eax 8826 000064D3 C3 retn 8827 8828 8829 ; =============== S U B R O U T I N E ======================================= 8830 8831 8832 mp3_check_1st_frame: 8833 000064D4 E855FAFFFF call mp3_exclude_id3_and_tag 8834 000064D9 8B35[A02C0500] mov esi, [stream_pos] 8835 000064DF 8B0D[A42C0500] mov ecx, [bytes_left] 8836 000064E5 31FF xor edi, edi 8837 000064E7 31ED xor ebp, ebp 8838 000064E9 E866FDFFFF call mp3_decode_frame 8839 000064EE 0F82E9000000 jc .error 8840 000064F4 E898FCFFFF call mp3_check_xing_info 8841 000064F9 BA[0C8B0000] mov edx, txt_file_size ; "file size: " 8842 000064FE E8DB000000 call wrstr_edx 8843 00006503 A1[1CF40000] mov eax, [mp3_file_size] 8844 00006508 E807010000 call wr_decimal_eax_with_thousands_seperator 8845 0000650D BA[188B0000] mov edx, txt_id3_size ; ", id3 size: " 8846 00006512 E8C7000000 call wrstr_edx 8847 00006517 A1[20F40000] mov eax, [mp3_id3_size] 8848 0000651C E8F3000000 call wr_decimal_eax_with_thousands_seperator 8849 00006521 BA[258B0000] mov edx, txt_tag_size ; ", tag size: " 8850 00006526 E8B3000000 call wrstr_edx 8851 0000652B A1[24F40000] mov eax, [mp3_tag_size] 8852 00006530 E8DF000000 call wr_decimal_eax_with_thousands_seperator 8853 00006535 E8B5000000 call wrcrlf 8854 0000653A BA[328B0000] mov edx, txt_input ; "input: " 8855 0000653F E89A000000 call wrstr_edx 8856 00006544 A1[5C9D0000] mov eax, [mp3_sample_rate] 8857 00006549 E8CD000000 call wr_decimal_eax 8858 0000654E BA[438B0000] mov edx, txt_hz ; " hz, " 8859 00006553 E886000000 call wrstr_edx 8860 00006558 A1[689D0000] mov eax, [mp3_src_num_channels] 8861 0000655D E8B9000000 call wr_decimal_eax 8862 00006562 BA[498B0000] mov edx, txt_channels ; " channels, " 8863 00006567 E872000000 call wrstr_edx 8864 0000656C A1[649D0000] mov eax, [mp3_bit_rate] 8865 00006571 31D2 xor edx, edx 8866 00006573 B9E8030000 mov ecx, 1000 8867 00006578 F7F1 div ecx 8868 0000657A E89C000000 call wr_decimal_eax 8869 0000657F BA[5A8B0000] mov edx, txt_kbit_s ; " kbit/s" 8870 00006584 E855000000 call wrstr_edx 8871 00006589 E861000000 call wrcrlf 8872 0000658E BA[3A8B0000] mov edx, txt_output ; "output: " 8873 00006593 E846000000 call wrstr_edx 8874 00006598 A1[709D0000] mov eax, [mp3_output_sample_rate] 8875 0000659D E879000000 call wr_decimal_eax 8876 000065A2 BA[438B0000] mov edx, txt_hz ; " hz, " 8877 000065A7 E832000000 call wrstr_edx 8878 000065AC A1[6C9D0000] mov eax, [mp3_output_num_channels] 8879 000065B1 E865000000 call wr_decimal_eax 8880 000065B6 BA[498B0000] mov edx, txt_channels ; " channels, " 8881 000065BB E81E000000 call wrstr_edx 8882 000065C0 A1[749D0000] mov eax, [mp3_bytes_per_sample] 8883 000065C5 C1E003 shl eax, 3 8884 000065C8 E84E000000 call wr_decimal_eax 8885 000065CD BA[558B0000] mov edx, txt_bit ; " bit" 8886 000065D2 E807000000 call wrstr_edx 8887 000065D7 E813000000 call wrcrlf 8888 000065DC F8 clc 8889 .error: 8890 000065DD C3 retn 8891 8892 ;.error: 8893 ;stc 8894 ;retn 8895 8896 8897 ; =============== S U B R O U T I N E ======================================= 8898 8899 ;wrchr: 8900 ;pusha 8901 ;mov [wrchr_buf], al 8902 ;push 0 ; lpOverlapped 8903 ;push diskresult ; lpNumberOfBytesWritten 8904 ;push 1 ; nNumberOfBytesToWrite 8905 ;push wrchr_buf ; lpBuffer 8906 ;push [std_out] ; hFile 8907 ;call [WriteFile] 8908 ;popa 8909 ;retn 8910 8911 8912 ; =============== S U B R O U T I N E ======================================= 8913 8914 8915 wrstr_edx: 8916 000065DE 50 push eax 8917 .lop: 8918 000065DF 8A02 mov al, [edx] 8919 000065E1 42 inc edx 8920 000065E2 3C00 cmp al, 0 8921 000065E4 7407 jz short .done 8922 000065E6 E801040000 call wrchr 8923 000065EB EBF2 jmp short .lop 8924 .done: 8925 000065ED 58 pop eax 8926 000065EE C3 retn 8927 8928 ; =============== S U B R O U T I N E ======================================= 8929 8930 8931 wrcrlf: 8932 000065EF 50 push eax 8933 000065F0 B00D mov al, 0Dh 8934 000065F2 E8F5030000 call wrchr 8935 000065F7 B00A mov al, 0Ah 8936 000065F9 E8EE030000 call wrchr 8937 000065FE 58 pop eax 8938 000065FF C3 retn 8939 8940 ; =============== S U B R O U T I N E ======================================= 8941 8942 8943 wrspc: 8944 00006600 50 push eax 8945 00006601 B020 mov al, 20h 8946 00006603 E8E4030000 call wrchr 8947 00006608 58 pop eax 8948 00006609 C3 retn 8949 8950 ; =============== S U B R O U T I N E ======================================= 8951 8952 8953 wrcomma: 8954 0000660A 50 push eax 8955 0000660B B02C mov al, ',' 8956 0000660D E8DA030000 call wrchr 8957 00006612 58 pop eax 8958 00006613 C3 retn 8959 8960 ; =============== S U B R O U T I N E ======================================= 8961 8962 8963 wr_decimal_eax_with_thousands_seperator: 8964 00006614 51 push ecx 8965 00006615 66B90200 mov cx, 2 8966 00006619 EB03 jmp short wr_decimal_eax_inj 8967 8968 ; =============== S U B R O U T I N E ======================================= 8969 8970 8971 wr_decimal_eax: 8972 0000661B 51 push ecx 8973 0000661C 31C9 xor ecx, ecx 8974 8975 wr_decimal_eax_inj: 8976 0000661E 50 push eax 8977 0000661F 53 push ebx 8978 00006620 52 push edx 8979 00006621 BB00CA9A3B mov ebx, 1000000000 ; nine zeroes (32bit max 4.294.967.296) 8980 8981 .dezlop: 8982 00006626 FEC9 dec cl 8983 00006628 750C jnz short .no_thousands 8984 0000662A B103 mov cl, 3 8985 0000662C 80FD00 cmp ch, 0 8986 0000662F 7405 jz short .no_thousands 8987 00006631 E8D4FFFFFF call wrcomma 8988 8989 .no_thousands: 8990 00006636 31D2 xor edx, edx 8991 00006638 F7F3 div ebx 8992 0000663A 83FB01 cmp ebx, 1 8993 0000663D 7404 jz short .force_last_zero 8994 0000663F 08C5 or ch, al 8995 00006641 7407 jz short .skip_lead_zero 8996 8997 .force_last_zero: 8998 00006643 0430 add al, 30h 8999 00006645 E8A2030000 call wrchr 9000 9001 .skip_lead_zero: 9002 0000664A 52 push edx 9003 0000664B 89D8 mov eax, ebx 9004 0000664D BB0A000000 mov ebx, 10 9005 00006652 31D2 xor edx, edx 9006 00006654 F7F3 div ebx 9007 00006656 83F800 cmp eax, 0 9008 00006659 89C3 mov ebx, eax 9009 0000665B 58 pop eax 9010 0000665C 75C8 jnz short .dezlop 9011 0000665E 5A pop edx 9012 0000665F 5B pop ebx 9013 00006660 58 pop eax 9014 00006661 59 pop ecx 9015 00006662 C3 retn 9016 9017 ; =============== S U B R O U T I N E ======================================= 9018 9019 9020 wrdigital: 9021 00006663 50 push eax 9022 00006664 240F and al, 0Fh 9023 00006666 3C09 cmp al, 9 9024 00006668 7602 jbe short .this 9025 0000666A 0407 add al, 7 9026 9027 .this: 9028 0000666C 0430 add al, 30h 9029 0000666E E879030000 call wrchr 9030 00006673 58 pop eax 9031 00006674 C3 retn 9032 9033 ; =============== S U B R O U T I N E ======================================= 9034 9035 9036 wrhexal: 9037 00006675 C0C804 ror al, 4 9038 00006678 E8E6FFFFFF call wrdigital 9039 0000667D C0C804 ror al, 4 9040 00006680 EBE1 jmp short wrdigital 9041 9042 ; =============== S U B R O U T I N E ======================================= 9043 9044 9045 wrhexax: 9046 00006682 66C1C808 ror ax, 8 9047 00006686 E8EAFFFFFF call wrhexal 9048 0000668B 66C1C808 ror ax, 8 9049 0000668F EBE4 jmp short wrhexal 9050 9051 ; =============== S U B R O U T I N E ======================================= 9052 9053 9054 wrhexeax: 9055 00006691 C1C810 ror eax, 10h 9056 00006694 E8E9FFFFFF call wrhexax 9057 00006699 C1C810 ror eax, 10h 9058 0000669C EBE4 jmp short wrhexax 9059 9060 ; =============== S U B R O U T I N E ======================================= 9061 9062 %if 0 9063 9064 get_commandline: 9065 call [GetCommandLineA] 9066 mov esi, eax 9067 mov edi, cmdline_buf 9068 mov ecx, 1024 ; cmdline_max 9069 9070 .get_cmdline_lop: 9071 lodsb 9072 cmp al, 0 9073 stosb 9074 loopne .get_cmdline_lop 9075 mov byte [edi-1], 0 9076 mov esi, cmdline_buf 9077 mov edi, cmdline_buf 9078 call _@@get_item ; get/skip name of the executable itself 9079 9080 .get_items_lop: 9081 call _@@get_item 9082 mov al, [ebx] 9083 cmp al, 0 9084 jz .done 9085 cmp al, '/' 9086 jz short .switch 9087 cmp al, '-' 9088 jz short .switch 9089 mov eax, [edi-5] 9090 or eax, 20202000h 9091 ;cmp eax, 'vaw.' ; ".wav" 9092 cmp eax, '.wav' ; FASM & NASM syntax 9093 jnz short .not_wav_name 9094 mov [mp3_dst_fname], ebx 9095 jmp short .get_items_lop 9096 9097 .not_wav_name: 9098 mov eax, [edi-5] 9099 or eax, 20202000h 9100 ;cmp eax, 'mcp.' ; ".pcm" 9101 cmp eax, '.pcm' ; FASM & NASM syntax 9102 jnz short .not_pcm_name 9103 mov [mp3_pcm_fname], ebx 9104 jmp short .get_items_lop 9105 9106 .not_pcm_name: 9107 mov [mp3_src_fname], ebx 9108 jmp short .get_items_lop 9109 9110 .switch: 9111 ;cmp dword [ebx+1], 'onom' ; "mono" 9112 cmp dword [ebx+1], 'mono' 9113 jnz short .not_switch_mono 9114 mov byte [option_mono], 1 9115 jmp short .get_items_lop 9116 9117 .not_switch_mono: 9118 ;cmp dword [ebx+1], 'tsaf' ; "fast" 9119 cmp dword [ebx+1], 'fast' ; FASM & NASM syntax 9120 jnz short .not_fast_option 9121 mov byte [option_fast], 1 9122 jmp short .get_items_lop 9123 9124 .not_fast_option: 9125 ;cmp dword [ebx+1], 'tib8' ; "8bit" 9126 cmp dword [ebx+1], '8bit' 9127 jnz short .not_switch_8bit 9128 mov [option_8bit], 1 9129 jmp .get_items_lop 9130 9131 .not_switch_8bit: 9132 ;cmp dword [ebx+1], 'flah' ; "half" 9133 cmp dword [ebx+1], 'half' 9134 jnz short .not_switch_half 9135 mov [option_rate_shift], 1 9136 jmp .get_items_lop 9137 9138 .not_switch_half: 9139 ;cmp dword [ebx+1], 'rauq' ; "quar" 9140 cmp dword [ebx+1], 'quar' 9141 jnz short .not_switch_quarter 9142 mov [option_rate_shift], 2 9143 jmp .get_items_lop 9144 9145 .not_switch_quarter: 9146 ;cmp dword [ebx+1], 'tset' ; "test" 9147 cmp dword [ebx+1], 'test' 9148 jnz short .not_switch_test 9149 mov byte [option_test], 1 9150 jmp .get_items_lop 9151 9152 .not_switch_test: 9153 jmp short .help 9154 9155 .done: 9156 cmp dword [mp3_src_fname], 0 9157 jz short .help 9158 ;;; Erdogan Tan - 17/10/2024 9159 mov edx, txt_ctrlc 9160 call wrstr_edx 9161 ;;; 9162 mov edx, txt_file ; "file: " 9163 call wrstr_edx 9164 mov edx, [mp3_src_fname] 9165 call wrstr_edx 9166 call wrcrlf 9167 clc 9168 retn 9169 9170 .help: 9171 ;;; Erdogan Tan - 17/10/2024 9172 mov edx, txt_about 9173 call wrstr_edx 9174 ;;; 9175 mov edx, txt_help ; "usage: mp3play input.mp3 [output.wav] ["... 9176 call wrstr_edx 9177 stc 9178 retn 9179 9180 %endif 9181 9182 ; =============== S U B R O U T I N E ======================================= 9183 9184 %if 0 9185 9186 _@@get_item: 9187 lodsb 9188 dec al 9189 cmp al, 1Fh ; 20-1 9190 jbe short _@@get_item ; _@@skip_spc_lop 9191 dec esi 9192 mov ebx, edi 9193 mov ah, 0 ; flag initially not quoted 9194 9195 .char_lop: 9196 lodsb 9197 cmp al, '"' 9198 jnz short .no_quote 9199 xor ah, 1 9200 jmp short .char_lop 9201 9202 .no_quote: 9203 stosb 9204 cmp al, 0 9205 jz short .src_end 9206 cmp al, 20h 9207 ja short .char_lop 9208 cmp ah, 0 ; ignore spaces if inside "quoted area" 9209 jnz short .char_lop 9210 mov byte [edi-1], 0 ; eol (replace space by 00h) 9211 retn 9212 9213 .src_end: 9214 dec esi 9215 retn 9216 9217 %endif 9218 9219 ; =============== S U B R O U T I N E ======================================= 9220 9221 9222 %if 0 9223 9224 open_and_mmap_the_file: 9225 push 0 ; hTemplateFile 9226 push 0 ; dwFlagsAndAttributes 9227 push 3 ; dwCreationDisposition 9228 push 0 ; lpSecurityAttributes 9229 push 1 ; dwShareMode 9230 push 80000000h ; dwDesiredAccess 9231 push [mp3_src_fname] ; lpFileName 9232 call [CreateFileA] 9233 mov [hFile], eax 9234 cmp eax, 0FFFFFFFFh ; INVALID_HANDLE_VALUE 9235 jz short .not_found 9236 push 0 ; lpFileSizeHigh 9237 push [hFile] ; hFile 9238 call [GetFileSize] 9239 mov [mp3_file_size], eax 9240 mov [bytes_left], eax 9241 push 0 ; lpName 9242 push 0 ; dwMaximumSizeLow 9243 push 0 ; dwMaximumSizeHigh 9244 push 2 ; flProtect 9245 push 0 ; lpFileMappingAttributes 9246 push [hFile] ; hFile 9247 call [CreateFileMappingA] 9248 mov [hMap], eax 9249 push 0 ; dwNumberOfBytesToMap 9250 push 0 ; dwFileOffsetLow 9251 push 0 ; dwFileOffsetHigh 9252 push 4 ; dwDesiredAccess 9253 push [hMap] ; hFileMappingObject 9254 call [MapViewOfFile] 9255 mov [stream_start], eax 9256 mov [stream_pos], eax 9257 mov esi, [stream_start] 9258 mov ecx, [bytes_left] 9259 9260 .lll: 9261 lodsb 9262 loop .lll 9263 clc 9264 retn 9265 9266 .not_found: 9267 mov edx, txt_not_found ; "cannot open source file\r\n" 9268 call wrstr_edx 9269 stc 9270 retn 9271 9272 %endif 9273 9274 9275 ; =============== S U B R O U T I N E ======================================= 9276 9277 9278 mp3_plain_test_without_output: 9279 0000669E 60 pusha 9280 0000669F 8B35[A02C0500] mov esi, [stream_pos] 9281 000066A5 8B0D[A42C0500] mov ecx, [bytes_left] 9282 000066AB BF[00500500] mov edi, sample_buffer 9283 000066B0 31ED xor ebp, ebp 9284 000066B2 E89DFBFFFF call mp3_decode_frame 9285 000066B7 61 popa 9286 000066B8 7218 jc short .exit 9287 000066BA A1[449D0000] mov eax, [mp3_src_frame_size] 9288 000066BF 83F800 cmp eax, 0 9289 000066C2 740E jz short .exit 9290 000066C4 0105[A02C0500] add [stream_pos], eax 9291 000066CA 2905[A42C0500] sub [bytes_left], eax 9292 000066D0 EBCC jmp short mp3_plain_test_without_output 9293 9294 .exit: 9295 000066D2 C3 retn 9296 9297 9298 ; =============== S U B R O U T I N E ======================================= 9299 9300 ; 20/10/2024 9301 mp3_cast_to_wav_file: 9302 000066D3 E86F000000 call mp3_create_wav_file 9303 ; 20/10/2024 9304 000066D8 730A jnc short .lop 9305 000066DA BBFFFFFFFF mov ebx, -1 9306 000066DF E91B050000 jmp ExitProcess 9307 .lop: 9308 000066E4 60 pusha 9309 000066E5 8B35[A02C0500] mov esi, [stream_pos] 9310 000066EB 8B0D[A42C0500] mov ecx, [bytes_left] 9311 000066F1 BF[00500500] mov edi, sample_buffer 9312 000066F6 31ED xor ebp, ebp 9313 000066F8 E857FBFFFF call mp3_decode_frame 9314 000066FD 61 popa 9315 000066FE 7241 jc short .exit 9316 00006700 A1[449D0000] mov eax, [mp3_src_frame_size] 9317 00006705 83F800 cmp eax, 0 9318 00006708 7437 jz short .exit 9319 0000670A 0105[A02C0500] add [stream_pos], eax 9320 00006710 2905[A42C0500] sub [bytes_left], eax 9321 ;push 0 ; lpOverlapped 9322 ;push diskresult ; lpNumberOfBytesWritten 9323 00006716 FF35[34F40000] push dword [mp3_samples_output_size] ; nNumberOfBytesToWrite 9324 0000671C 68[00500500] push sample_buffer ; lpBuffer 9325 00006721 FF35[282D0500] push dword [mp3_wav_handle] ; hFile 9326 ;call [WriteFile] 9327 ;;; 9328 ; 20/10/2024 9329 00006727 E8DC040000 call WriteFile 9330 0000672C 7213 jc short .exit 9331 ;;; 9332 0000672E A1[34F40000] mov eax, [mp3_samples_output_size] 9333 00006733 0105[A4840000] add dword [mp3_wav_header+4], eax 9334 00006739 0105[C8840000] add dword [mp3_wav_header+28h], eax 9335 0000673F EBA3 jmp short .lop 9336 9337 .exit: 9338 00006741 E860000000 call mp3_close_wav_file 9339 00006746 C3 retn 9340 9341 9342 ; =============== S U B R O U T I N E ======================================= 9343 9344 ; 20/10/2024 9345 9346 mp3_create_wav_file: 9347 00006747 A1[709D0000] mov eax, [mp3_output_sample_rate] 9348 0000674C 8B0D[6C9D0000] mov ecx, [mp3_output_num_channels] 9349 00006752 8B15[749D0000] mov edx, [mp3_bytes_per_sample] 9350 00006758 66890D[B6840000] mov word [mp3_wav_header+16h], cx 9351 0000675F A3[B8840000] mov dword [mp3_wav_header+18h], eax 9352 00006764 0FAFCA imul ecx, edx 9353 00006767 0FAFC1 imul eax, ecx 9354 0000676A C1E203 shl edx, 3 9355 0000676D A3[BC840000] mov dword [mp3_wav_header+1Ch], eax 9356 00006772 66890D[C0840000] mov word [mp3_wav_header+20h], cx 9357 00006779 668915[C2840000] mov word [mp3_wav_header+22h], dx 9358 ;push 0 ; hTemplateFile 9359 ;push 80h ; dwFlagsAndAttributes 9360 ;push 2 ; dwCreationDisposition 9361 ;push 0 ; lpSecurityAttributes 9362 ;push 0 ; dwShareMode 9363 ;push 0C0000000h ; dwDesiredAccess 9364 00006780 FF35[98840000] push dword [mp3_dst_fname] ; lpFileName 9365 ;call [CreateFileA] 9366 ;;; 9367 ; 20/10/2024 9368 00006786 E8AF040000 call CreateFile 9369 0000678B 7301 jnc short .ok 9370 0000678D C3 retn 9371 .ok: 9372 ;;; 9373 0000678E A3[282D0500] mov [mp3_wav_handle], eax 9374 ; 20/10/2024 9375 ;call mp3_write_wav_header 9376 ;retn 9377 9378 9379 ; =============== S U B R O U T I N E ======================================= 9380 9381 ; 20/10/2024 9382 mp3_write_wav_header: 9383 ;push 0 ; lpOverlapped 9384 ;push diskresult ; lpNumberOfBytesWritten 9385 00006793 6A2C push 44 ; 2Ch ; nNumberOfBytesToWrite 9386 00006795 68[A0840000] push mp3_wav_header ; lpBuffer 9387 0000679A FF35[282D0500] push dword [mp3_wav_handle] ; hFile 9388 ;call [WriteFile] 9389 ;;; 9390 ; 20/10/2024 9391 000067A0 E863040000 call WriteFile 9392 ;;; 9393 000067A5 C3 retn 9394 9395 9396 ; =============== S U B R O U T I N E ======================================= 9397 9398 ; 20/10/2024 9399 mp3_close_wav_file: 9400 000067A6 6A00 push 0 ; dwMoveMethod 9401 ;push 0 ; lpDistanceToMoveHigh 9402 000067A8 6A00 push 0 ; lDistanceToMove 9403 000067AA FF35[282D0500] push dword [mp3_wav_handle] ; hFile 9404 ;call [SetFilePointer] 9405 ;;; 9406 ; 20/10/2024 9407 000067B0 E8C1040000 call SetFilePointer 9408 ;;; 9409 000067B5 E8D9FFFFFF call mp3_write_wav_header 9410 000067BA FF35[282D0500] push dword [mp3_wav_handle] ; hObject 9411 ;call [CloseHandle] 9412 ;;; 9413 ; 20/10/2024 9414 000067C0 E8EF040000 call CloseFile 9415 ;;; 9416 000067C5 C3 retn 9417 9418 9419 ; =============== S U B R O U T I N E ======================================= 9420 9421 ; 20/10/2024 9422 mp3_verify_pcm_file: 9423 000067C6 E804020000 call mp3_open_pcm_file 9424 ;;; 9425 ; 20/10/2024 9426 000067CB 7301 jnc short .verify 9427 000067CD C3 retn ; nothing to do (return without error msg) 9428 .verify: 9429 ;;; 9430 000067CE C705[302D0500]0000- mov dword [_@@max_diff], 0 9430 000067D6 0000 9431 000067D8 C705[342D0500]0000- mov dword [_@@avg_diff], 0 9431 000067E0 0000 9432 000067E2 C705[382D0500]0000- mov dword [_@@avg_diff+4], 0 9432 000067EA 0000 9433 000067EC C705[3C2D0500]0000- mov dword [pcm_filepos], 0 9433 000067F4 0000 9434 9435 .lop: 9436 000067F6 60 pusha 9437 000067F7 8B35[A02C0500] mov esi, [stream_pos] 9438 000067FD 8B0D[A42C0500] mov ecx, [bytes_left] 9439 00006803 BF[00500500] mov edi, sample_buffer 9440 00006808 31ED xor ebp, ebp 9441 0000680A E845FAFFFF call mp3_decode_frame 9442 0000680F 61 popa 9443 00006810 0F824D010000 jb .exit 9444 00006816 A1[449D0000] mov eax, [mp3_src_frame_size] 9445 0000681B 83F800 cmp eax, 0 9446 0000681E 0F843F010000 jz .exit 9447 00006824 31C0 xor eax, eax 9448 00006826 833D[6C9D0000]02 cmp dword [mp3_output_num_channels], 2 9449 0000682D 7207 jb short .this_mono_convert 9450 0000682F 0FB605[EC750000] movzx eax, byte [option_mono] 9451 9452 .this_mono_convert: 9453 00006836 A3[402D0500] mov [_@@mono_convert], eax 9454 0000683B 8A0D[EE750000] mov cl, [option_rate_shift] 9455 00006841 B802000000 mov eax, 2 9456 00006846 D3E0 shl eax, cl 9457 00006848 66A3[442D0500] mov [_@@pcm_steps], ax 9458 0000684E 66A3[462D0500] mov [_@@pcm_steps+2], ax 9459 00006854 833D[6C9D0000]02 cmp dword [mp3_output_num_channels], 2 9460 0000685B 7213 jb short .these_steps 9461 0000685D 66C705[442D0500]02- mov word [_@@pcm_steps], 2 9461 00006865 00 9462 00006866 8D4400FE lea eax, [eax*2-2] ; [0FFFFFFFEh+eax*2] 9463 0000686A 66A3[462D0500] mov [_@@pcm_steps+2], ax 9464 9465 .these_steps: 9466 00006870 A1[34F40000] mov eax, [mp3_samples_output_size] 9467 00006875 8A0D[EE750000] mov cl, [option_rate_shift] 9468 0000687B 020D[ED750000] add cl, [option_8bit] 9469 00006881 020D[402D0500] add cl, byte [_@@mono_convert] 9470 00006887 D3E0 shl eax, cl 9471 ;push 0 ; lpOverlapped 9472 ;push diskresult ; lpNumberOfBytesRead 9473 00006889 50 push eax ; nNumberOfBytesToRead 9474 0000688A 68[00620500] push (sample_buffer+1200h) ; sample_buffer+MP3_MAX_OUTPUT_SIZE 9475 0000688F FF35[2C2D0500] push dword [mp3_pcm_handle] ; hFile 9476 ;call [ReadFile] 9477 ;;; 9478 ; 20/10/2024 9479 00006895 E8E9030000 call ReadFile 9480 0000689A 7306 jnc short .pcm_read_ok 9481 ; Note: File read error msg has been displayed 9482 0000689C E83F010000 call mp3_close_pcm_file 9483 000068A1 C3 retn 9484 .pcm_read_ok: 9485 ;;; 9486 000068A2 8B0D[34F40000] mov ecx, [mp3_samples_output_size] 9487 000068A8 D1E9 shr ecx, 1 9488 000068AA 0F849D000000 jz .compare_done 9489 000068B0 BE[00500500] mov esi, sample_buffer ; decoded .mp3 9490 000068B5 BF[00620500] mov edi, (sample_buffer+1200h) ; loaded .pcm 9491 9492 .compare_lop: 9493 000068BA 0FBF17 movsx edx, word [edi] 9494 000068BD 833D[402D0500]00 cmp dword [_@@mono_convert], 0 9495 000068C4 7408 jz short .no_mono_convert 9496 000068C6 0FBF4702 movsx eax, word [edi+2] 9497 000068CA 01C2 add edx, eax 9498 000068CC D1FA sar edx, 1 9499 9500 .no_mono_convert: 9501 000068CE 803D[ED750000]00 cmp byte [option_8bit], 0 9502 000068D5 7508 jnz short .compare_8bit 9503 000068D7 0FBF06 movsx eax, word [esi] ; get 16bit from decoded .mp3 9504 000068DA 83C602 add esi, 2 9505 000068DD EB13 jmp short .compare_this 9506 9507 .compare_8bit: 9508 000068DF 0FB606 movzx eax, byte [esi] 9509 000068E2 46 inc esi ; convert .pcm 9510 000068E3 81C200800000 add edx, 8000h ; make unsigned 9511 000068E9 C1FA08 sar edx, 8 ; div 100h 9512 000068EC 80D200 adc dl, 0 ; round up 9513 000068EF 80DA00 sbb dl, 0 ; undo on unsigned overflow 9514 9515 .compare_this: 9516 000068F2 29D0 sub eax, edx 9517 000068F4 7902 jns short .compare_abs ; calc difference 9518 000068F6 F7D8 neg eax 9519 9520 .compare_abs: 9521 000068F8 0105[342D0500] add [_@@avg_diff], eax 9522 000068FE 8315[382D0500]00 adc dword [_@@avg_diff+4], 0 9523 00006905 3B05[302D0500] cmp eax, [_@@max_diff] 9524 0000690B 7223 jb short .not_max 9525 0000690D A3[302D0500] mov [_@@max_diff], eax 9526 00006912 8B15[3C2D0500] mov edx, [pcm_filepos] 9527 00006918 8915[482D0500] mov [_@@worst_pcm_filepos], edx 9528 0000691E 8B15[A02C0500] mov edx, [stream_pos] 9529 00006924 2B15[9C2C0500] sub edx, [stream_start] 9530 0000692A 8915[4C2D0500] mov [_@@worst_mp3_filepos], edx 9531 9532 .not_max: 9533 00006930 0FB705[442D0500] movzx eax, word [_@@pcm_steps] 9534 00006937 C10D[442D0500]10 ror dword [_@@pcm_steps], 16 ; next .pcm addr 9535 0000693E 01C7 add edi, eax 9536 00006940 0105[3C2D0500] add [pcm_filepos], eax 9537 00006946 49 dec ecx 9538 00006947 0F856DFFFFFF jnz .compare_lop 9539 9540 .compare_done: 9541 0000694D A1[449D0000] mov eax, [mp3_src_frame_size] 9542 00006952 0105[A02C0500] add [stream_pos], eax 9543 00006958 2905[A42C0500] sub [bytes_left], eax 9544 0000695E E993FEFFFF jmp .lop 9545 9546 .exit: 9547 00006963 E878000000 call mp3_close_pcm_file 9548 00006968 BA[FC8B0000] mov edx, _@@txt_verify1 ; "verify max difference = " 9549 0000696D E86CFCFFFF call wrstr_edx 9550 00006972 A1[302D0500] mov eax, [_@@max_diff] 9551 00006977 E89FFCFFFF call wr_decimal_eax 9552 0000697C BA[158C0000] mov edx, _@@txt_verify1_at_mp3 ; " at mp3:" 9553 00006981 E858FCFFFF call wrstr_edx 9554 00006986 A1[4C2D0500] mov eax, [_@@worst_mp3_filepos] 9555 0000698B E801FDFFFF call wrhexeax 9556 00006990 BA[1E8C0000] mov edx, _@@txt_verify2 ; ", average difference = " 9557 00006995 E844FCFFFF call wrstr_edx 9558 0000699A A1[342D0500] mov eax, [_@@avg_diff] 9559 0000699F 8B15[382D0500] mov edx, [_@@avg_diff+4] 9560 000069A5 8B0D[2CF40000] mov ecx, [mp3_total_output_size] 9561 000069AB D1E9 shr ecx, 1 9562 000069AD F7F1 div ecx 9563 000069AF E867FCFFFF call wr_decimal_eax 9564 000069B4 B02E mov al, '.' 9565 000069B6 E831000000 call wrchr 9566 000069BB B80A000000 mov eax, 10 9567 000069C0 F7E2 mul edx ; fraction*10 9568 000069C2 F7F1 div ecx 9569 000069C4 E89AFCFFFF call wrdigital ; show fraction of average difference 9570 000069C9 E821FCFFFF call wrcrlf 9571 000069CE C3 retn 9572 9573 9574 ; =============== S U B R O U T I N E ======================================= 9575 9576 ; 20/10/2024 9577 mp3_open_pcm_file: 9578 ;push 0 ; hTemplateFile 9579 ;push 80h ; dwFlagsAndAttributes 9580 ;push 3 ; dwCreationDisposition 9581 ;push 0 ; lpSecurityAttributes 9582 ;push 0 ; dwShareMode 9583 ;push 80000000h ; dwDesiredAccess 9584 000069CF FF35[9C840000] push dword [mp3_pcm_fname] ; lpFileName 9585 ;call [CreateFileA] 9586 ;;; 9587 ; 20/10/2024 9588 000069D5 E88F020000 call OpenFile 9589 ;jc short .return 9590 ;;; 9591 000069DA A3[2C2D0500] mov [mp3_pcm_handle], eax 9592 ;.return: 9593 000069DF C3 retn 9594 9595 9596 ; =============== S U B R O U T I N E ======================================= 9597 9598 ; 20/10/2024 9599 mp3_close_pcm_file: 9600 000069E0 FF35[2C2D0500] push dword [mp3_pcm_handle] ; hObject 9601 ;call [CloseHandle] 9602 ;retn 9603 ;;; 9604 ; 20/10/2024 9605 000069E6 E8C9020000 call CloseFile 9606 ;;; 9607 000069EB C3 retn 9608 9609 9610 ; --------------------------------------------------------------------------- 9611 9612 ; =============== S U B R O U T I N E ======================================= 9613 9614 ; 20/10/2024 9615 wrchr: 9616 ; TRDOS 386 System Call 9617 ; ebx = 2 -> write character onto STDOUT 9618 ;push ebx 9619 ;push ecx 9620 ;push eax 9621 000069EC 60 pusha 9622 ;;mov dword [diskresult], 0 9623 sys _stdio, 2, eax 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 000069ED BB02000000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 000069F2 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 000069F4 B82E000000 <1> mov eax, %1 130 <1> 131 000069F9 CD40 <1> int 40h 9624 ;jnc short .ok ; if EOF, eax = 0 9625 ;xor eax, eax ; 0 9626 ;.ok: 9627 ;mov [diskresult], eax ; written byte count 9628 000069FB 61 popa 9629 ;pop eax 9630 ;pop ecx 9631 ;pop ebx 9632 000069FC C3 retn 9633 9634 9635 ; =============== S U B R O U T I N E ======================================= 9636 9637 ; 20/10/2024 9638 get_commandline: 9639 ; 21/10/2024 9640 000069FD 5D pop ebp ; near call return address 9641 ; esp = command line start address 9642 ;mov [command_line],esp 9643 000069FE 59 pop ecx ; argc ; number of arguments 9644 ; esp = pointer to argument 1 ; argv[0] 9645 000069FF 49 dec ecx 9646 00006A00 0F8405010000 jz .help 9647 00006A06 58 pop eax ; argument 1 (PRG file name) 9648 00006A07 5E pop esi ; argument 2 (must be input file name) 9649 00006A08 BF[A82C0500] mov edi, cmdline_buf 9650 .get_item: 9651 00006A0D 89FB mov ebx, edi 9652 .char_lop: 9653 00006A0F AC lodsb 9654 00006A10 AA stosb 9655 00006A11 3C00 cmp al, 0 9656 00006A13 75FA jnz short .char_lop 9657 9658 00006A15 8A03 mov al, [ebx] 9659 00006A17 3C2F cmp al, '/' 9660 00006A19 7442 jz short .switch 9661 00006A1B 3C2D cmp al, '-' 9662 00006A1D 743E jz short .switch 9663 00006A1F 8B47FB mov eax, [edi-5] 9664 00006A22 0D00202020 or eax, 20202000h 9665 00006A27 3D2E776176 cmp eax, '.wav' ; FASM & NASM syntax 9666 00006A2C 7510 jnz short .not_wav_name 9667 00006A2E 891D[98840000] mov [mp3_dst_fname], ebx 9668 .get_items_lop: 9669 00006A34 49 dec ecx 9670 00006A35 0F8494000000 jz .done 9671 00006A3B 5E pop esi ; next argument 9672 00006A3C EBCF jmp short .get_item 9673 9674 .not_wav_name: 9675 00006A3E 8B47FB mov eax, [edi-5] 9676 00006A41 0D00202020 or eax, 20202000h 9677 00006A46 3D2E70636D cmp eax, '.pcm' ; FASM & NASM syntax 9678 00006A4B 7508 jnz short .not_pcm_name 9679 00006A4D 891D[9C840000] mov [mp3_pcm_fname], ebx 9680 00006A53 EBDF jmp short .get_items_lop 9681 9682 .not_pcm_name: 9683 00006A55 891D[94840000] mov [mp3_src_fname], ebx 9684 00006A5B EBD7 jmp short .get_items_lop 9685 9686 .switch: 9687 00006A5D 817B016D6F6E6F cmp dword [ebx+1], 'mono' 9688 00006A64 7509 jnz short .not_switch_mono 9689 00006A66 C605[EC750000]01 mov byte [option_mono], 1 9690 00006A6D EBC5 jmp short .get_items_lop 9691 9692 .not_switch_mono: 9693 00006A6F 817B0166617374 cmp dword [ebx+1], 'fast' ; FASM & NASM syntax 9694 00006A76 7509 jnz short .not_fast_option 9695 00006A78 C605[EF750000]01 mov byte [option_fast], 1 9696 00006A7F EBB3 jmp short .get_items_lop 9697 9698 .not_fast_option: 9699 00006A81 817B0138626974 cmp dword [ebx+1], '8bit' 9700 00006A88 7509 jnz short .not_switch_8bit 9701 00006A8A C605[ED750000]01 mov byte [option_8bit], 1 9702 00006A91 EBA1 jmp short .get_items_lop 9703 9704 .not_switch_8bit: 9705 00006A93 817B0168616C66 cmp dword [ebx+1], 'half' 9706 00006A9A 7509 jnz short .not_switch_half 9707 00006A9C C605[EE750000]01 mov byte [option_rate_shift], 1 9708 00006AA3 EB8F jmp short .get_items_lop 9709 9710 .not_switch_half: 9711 00006AA5 817B0171756172 cmp dword [ebx+1], 'quar' 9712 00006AAC 750C jnz short .not_switch_quarter 9713 00006AAE C605[EE750000]02 mov byte [option_rate_shift], 2 9714 00006AB5 E97AFFFFFF jmp .get_items_lop 9715 9716 .not_switch_quarter: 9717 00006ABA 817B0174657374 cmp dword [ebx+1], 'test' 9718 00006AC1 7548 jnz short .not_switch_test 9719 00006AC3 C605[EB750000]01 mov byte [option_test], 1 9720 00006ACA E965FFFFFF jmp .get_items_lop 9721 9722 .done: 9723 00006ACF 833D[94840000]00 cmp dword [mp3_src_fname], 0 9724 00006AD6 7433 jz short .help 9725 ;;; Erdogan Tan - 17/10/2024 9726 ;mov edx, txt_ctrlc 9727 ;call wrstr_edx 9728 ; 20/10/2024 9729 sys _msg, txt_ctrlc, txt_ctrlc_size, 0Fh ; white 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006AD8 BB[368C0000] <1> mov ebx, %2 122 <1> %if %0 >= 3 123 00006ADD B919000000 <1> mov ecx, %3 124 <1> %if %0 = 4 125 00006AE2 BA0F000000 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006AE7 B823000000 <1> mov eax, %1 130 <1> 131 00006AEC CD40 <1> int 40h 9730 ;;; 9731 00006AEE BA[058B0000] mov edx, txt_file ; "file: " 9732 00006AF3 E8E6FAFFFF call wrstr_edx 9733 00006AF8 8B15[94840000] mov edx, [mp3_src_fname] 9734 00006AFE E8DBFAFFFF call wrstr_edx 9735 00006B03 E8E7FAFFFF call wrcrlf 9736 00006B08 F8 clc 9737 00006B09 55 push ebp ; return address 9738 00006B0A C3 retn 9739 9740 .not_switch_test: 9741 .help: 9742 ;;; Erdogan Tan - 17/10/2024 9743 00006B0B BA[4F8C0000] mov edx, txt_about 9744 00006B10 E8C9FAFFFF call wrstr_edx 9745 ;;; 9746 00006B15 BA[7C8B0000] mov edx, txt_help ; "usage: mp3play input.mp3 [output.wav] ["... 9747 00006B1A E8BFFAFFFF call wrstr_edx 9748 00006B1F F9 stc 9749 00006B20 55 push ebp ; return address 9750 00006B21 C3 retn 9751 9752 ; =============== S U B R O U T I N E ======================================= 9753 9754 ; 21/10/2024 9755 set_break: 9756 ; set [u.break] -end of bss- address to 9757 ; end_of_bss at first (mp3 file will be loaded 9758 ; at the end of bss) 9759 ; ([u.break] initially points to the end of PRG file 9760 ; -code and data- except BSS section) 9761 ; 9762 ; TRDOS 386 system call 9763 ; Set break address 9764 ; ebx = new [u.break] 9765 9766 sys _break, end_of_bss 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006B22 BB[00E00500] <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 00006B27 B811000000 <1> mov eax, %1 130 <1> 131 00006B2C CD40 <1> int 40h 9767 9768 ; eax = new break address (dword aligned) 9769 9770 00006B2E A3[9C2C0500] mov [stream_start], eax 9771 00006B33 A3[A02C0500] mov [stream_pos], eax 9772 9773 00006B38 C3 retn 9774 9775 9776 ; =============== S U B R O U T I N E ======================================= 9777 9778 ; 20/10/2024 9779 9780 open_and_mmap_the_file: 9781 ; 21/10/2024 9782 ; TRDOS 386 system call 9783 ; Open File 9784 ; ebx = pointer to filename 9785 ; ecx = open mode, 0 = read 9786 sys _open, [mp3_src_fname], 0 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006B39 8B1D[94840000] <1> mov ebx, %2 122 <1> %if %0 >= 3 123 00006B3F 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 00006B44 B805000000 <1> mov eax, %1 130 <1> 131 00006B49 CD40 <1> int 40h 9787 00006B4B 7270 jc short .not_found 9788 9789 00006B4D A3[982C0500] mov [hFile], eax 9790 9791 ; get file size by using systell system call 9792 ; (not applicable for TRDOS 386 Kernel v2.0.9 and earlier) 9793 ; TRDOS 386 system call 9794 ; Get current file (offset) pointer 9795 ; ebx = file handle (file descriptor) 9796 ; ecx = 0, offset 9797 ; edx = 2, from the end of file 9798 ;sys _tell, eax, 0, 2 9799 ;mov [mp3_file_size], eax 9800 9801 ; *** get file size *** 9802 ; TRDOS 386 system call 9803 ; Set file (offset) pointer to file size 9804 ; (needed for TRDOS kernel v2.0.9 and earlier) 9805 ; ebx = file handle (file descriptor) 9806 ; ecx = 0, offset 9807 ; edx = 2, from the end of file 9808 sys _seek, eax, 0, 2 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006B52 89C3 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 00006B54 B900000000 <1> mov ecx, %3 124 <1> %if %0 = 4 125 00006B59 BA02000000 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006B5E B813000000 <1> mov eax, %1 130 <1> 131 00006B63 CD40 <1> int 40h 9809 ; TRDOS 386 system call 9810 ; Get current file (offset) pointer 9811 ; (needed for TRDOS 386 kernel version 2.0.9 and earlier) 9812 00006B65 31D2 xor edx, edx ; 0 9813 ; ecx = 0 9814 ; ebx = file handle 9815 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 00006B67 B814000000 <1> mov eax, %1 130 <1> 131 00006B6C CD40 <1> int 40h 9816 00006B6E A3[1CF40000] mov [mp3_file_size], eax 9817 9818 ; *** set file offset pointer to 0 again *** 9819 ; TRDOS 386 system call 9820 ; Set file (offset) pointer 9821 ; ebx = file handle (file descriptor) 9822 ; ecx = 0, offset 9823 ; edx = 0, from the beginning/start of file 9824 00006B73 50 push eax 9825 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 00006B74 B813000000 <1> mov eax, %1 130 <1> 131 00006B79 CD40 <1> int 40h 9826 00006B7B 58 pop eax 9827 9828 ; now, set [u.break] address to the end of mp3 file 9829 ; at memory -in BSS section- 9830 ; (not necessary for TRDOS 386 PRG files) 9831 ; (this system call will allocate user memory pages 9832 ; before sysread system call.. early) 9833 00006B7C 05[00E00500] add eax, end_of_bss 9834 9835 ; TRDOS 386 system call 9836 ; Set break address 9837 ; ebx = new [u.break] 9838 sys _break, eax 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006B81 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 00006B83 B811000000 <1> mov eax, %1 130 <1> 131 00006B88 CD40 <1> int 40h 9839 9840 ; TRDOS 386 system call 9841 ; Read file 9842 ; ebx = file handle (file descriptor) 9843 ; ecx = buffer address 9844 ; edx = byte count 9845 sys _read, [hFile], [stream_start], [mp3_file_size] 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006B8A 8B1D[982C0500] <1> mov ebx, %2 122 <1> %if %0 >= 3 123 00006B90 8B0D[9C2C0500] <1> mov ecx, %3 124 <1> %if %0 = 4 125 00006B96 8B15[1CF40000] <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006B9C B803000000 <1> mov eax, %1 130 <1> 131 00006BA1 CD40 <1> int 40h 9846 00006BA3 7204 jc short .read_error 9847 00006BA5 39D0 cmp eax, edx 9848 00006BA7 730E jnb short .ok 9849 ;or eax, eax 9850 ;jnz short .ok 9851 .read_error: 9852 ; TRDOS 386 system call 9853 ; Close file 9854 ; ebx = file handle (file descriptor) 9855 ;sys _close, [hFile] 9856 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 00006BA9 B806000000 <1> mov eax, %1 130 <1> 131 00006BAE CD40 <1> int 40h 9857 9858 00006BB0 BA[A16C0000] mov edx, txt_read_err 9859 00006BB5 EB0B jmp short .r_err_msg 9860 .ok: 9861 00006BB7 A3[A42C0500] mov [bytes_left], eax ; read count 9862 00006BBC C3 retn 9863 .not_found: 9864 00006BBD BA[628B0000] mov edx, txt_not_found ; "cannot open source file\r\n" 9865 .r_err_msg: 9866 00006BC2 E817FAFFFF call wrstr_edx 9867 00006BC7 F9 stc 9868 00006BC8 C3 retn 9869 9870 ;txt_read_err db 'File read error!',0Dh,0Ah,0 9871 9872 9873 ; =============== S U B R O U T I N E ======================================= 9874 9875 ; 20/10/2024 9876 print_msg: 9877 ; TRDOS 386 system call 9878 ; write/display message on screen 9879 ; ebx = ASCIIZ message (text) address 9880 ; ecx = max. message length (stop count before char zero) 9881 ; edx = character color (CGA) 9882 00006BC9 B9FF000000 mov ecx, 255 9883 00006BCE BA0B000000 mov edx, 0Bh ; DL ; cyan 9884 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 00006BD3 B823000000 <1> mov eax, %1 130 <1> 131 00006BD8 CD40 <1> int 40h 9885 00006BDA C3 retn 9886 9887 9888 ; =============== S U B R O U T I N E ======================================= 9889 9890 ; 20/10/2024 9891 GetTickCount: 9892 ; TRDOS 386 system call 9893 ; get current time, get tick count 9894 ; ebx = 4 -> get count of system timer ticks 9895 sys _time, 4 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006BDB 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 00006BE0 B80D000000 <1> mov eax, %1 130 <1> 131 00006BE5 CD40 <1> int 40h 9896 ; eax = system timer ticks (18.2 ticks per second) 9897 00006BE7 BA15F4BC20 mov edx, 549254165 ; 10^10/18.2 9898 00006BEC F7E2 mul edx 9899 ; edx:eax = milliseconds * 10^7 9900 00006BEE BB80969800 mov ebx, 10000000 9901 00006BF3 F7F3 div ebx ; 10^7 9902 ; eax = milliseconds 9903 00006BF5 81FA404B4C00 cmp edx, 5000000 ; 10^7/2 9904 00006BFB 7201 jb short .ok 9905 00006BFD 40 inc eax ; round up 9906 .ok: 9907 00006BFE C3 retn 9908 9909 9910 ; =============== E X I T =================================================== 9911 9912 ; 20/10/2024 9913 ExitProcess: 9914 00006BFF 31DB xor ebx, ebx ; mov ebx, 0 ; exit code 9915 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 00006C01 B801000000 <1> mov eax, %1 130 <1> 131 00006C06 CD40 <1> int 40h 9916 ;hang: 9917 ;jmp short hang 9918 9919 9920 ; =============== S U B R O U T I N E ======================================= 9921 9922 ; 20/10/2024 9923 WriteFile: 9924 00006C08 58 pop eax ; near call return address 9925 00006C09 5B pop ebx 9926 00006C0A 59 pop ecx 9927 00006C0B 5A pop edx 9928 00006C0C 50 push eax 9929 ; TRDOS 386 system call 9930 ; Write file 9931 ; ebx = file handle (file descriptor) 9932 ; ecx = buffer address 9933 ; edx = byte count 9934 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 00006C0D B804000000 <1> mov eax, %1 130 <1> 131 00006C12 CD40 <1> int 40h 9935 00006C14 730F jnc short .ok 9936 00006C16 39D0 cmp eax, edx 9937 00006C18 730B jnb short .ok 9938 ;or eax, eax 9939 ;jnz short .ok 9940 9941 00006C1A BA[266C0000] mov edx, txt_write_err 9942 00006C1F E8BAF9FFFF call wrstr_edx 9943 00006C24 F9 stc 9944 .ok: 9945 00006C25 C3 retn 9946 9947 00006C26 46696C652077726974- txt_write_err db 'File write error!',0Dh,0Ah,0 9947 00006C2F 65206572726F72210D- 9947 00006C38 0A00 9948 9949 9950 ; =============== S U B R O U T I N E ======================================= 9951 9952 ; 20/10/2024 9953 CreateFile: 9954 00006C3A 58 pop eax ; near call return address 9955 00006C3B 5B pop ebx 9956 00006C3C 50 push eax 9957 ; TRDOS 386 system call 9958 ; Create file 9959 ; ebx = (ASCIIZ) file name address 9960 ; ecx = mode 9961 00006C3D 31C9 xor ecx, ecx ; CL ; mov ecx, 0 ; ordinary file 9962 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 00006C3F B808000000 <1> mov eax, %1 130 <1> 131 00006C44 CD40 <1> int 40h 9963 00006C46 730B jnc short .ok ; eax = file handle 9964 9965 00006C48 BA[546C0000] mov edx, txt_create_err 9966 00006C4D E88CF9FFFF call wrstr_edx 9967 00006C52 F9 stc 9968 .ok: 9969 00006C53 C3 retn 9970 9971 00006C54 46696C652063726561- txt_create_err db 'File create error!',0Dh,0Ah,0 9971 00006C5D 7465206572726F7221- 9971 00006C66 0D0A00 9972 9973 9974 ; =============== S U B R O U T I N E ======================================= 9975 9976 ; 20/10/2024 9977 OpenFile: 9978 00006C69 58 pop eax ; near call return address 9979 00006C6A 5B pop ebx 9980 00006C6B 50 push eax 9981 ; TRDOS 386 system call 9982 ; Open file 9983 ; ebx = (ASCIIZ) file name address 9984 ; ecx = mode 9985 00006C6C 31C9 xor ecx, ecx ; CL ; mov ecx, 0 ; ordinary file 9986 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 00006C6E B805000000 <1> mov eax, %1 130 <1> 131 00006C73 CD40 <1> int 40h 9987 ;jnc short .ok ; eax = file handle 9988 ; 9989 ;mov edx, txt_open_err 9990 ;call wrstr_edx 9991 ;stc 9992 ;.ok: 9993 00006C75 C3 retn 9994 9995 ;txt_open_err db 'File not found!',0Dh,0Ah,0 9996 ;db 'File open error!',ODh,0Ah,0 9997 9998 9999 ; =============== S U B R O U T I N E ======================================= 10000 10001 ; 20/10/2024 10002 SetFilePointer: 10003 00006C76 58 pop eax ; near call return address 10004 00006C77 5B pop ebx 10005 00006C78 59 pop ecx 10006 00006C79 5A pop edx 10007 00006C7A 50 push eax 10008 ; TRDOS 386 system call 10009 ; Set file offset pointer ; sysseek 10010 ; ebx = file handle (file descriptor) 10011 ; ecx = offset 10012 ; edx = switch, DL = 0 = from the start of file 10013 ; 1 = from the current offset 10014 ; 2 = from the end of file 10015 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 00006C7B B813000000 <1> mov eax, %1 130 <1> 131 00006C80 CD40 <1> int 40h 10016 ; eax = (value of) new offset pointer 10017 10018 00006C82 C3 retn 10019 10020 10021 ; =============== S U B R O U T I N E ======================================= 10022 10023 ; 20/10/2024 10024 ReadFile: 10025 00006C83 58 pop eax ; near call return address 10026 00006C84 5B pop ebx 10027 00006C85 59 pop ecx 10028 00006C86 5A pop edx 10029 00006C87 50 push eax 10030 ; TRDOS 386 system call 10031 ; Read file 10032 ; ebx = file handle (file descriptor) 10033 ; ecx = buffer address 10034 ; edx = byte count 10035 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 00006C88 B803000000 <1> mov eax, %1 130 <1> 131 00006C8D CD40 <1> int 40h 10036 00006C8F 730F jnc short .ok 10037 00006C91 39D0 cmp eax, edx 10038 00006C93 730B jnb short .ok 10039 ;or eax, eax 10040 ;jnz short .ok 10041 10042 00006C95 BA[A16C0000] mov edx, txt_read_err 10043 00006C9A E83FF9FFFF call wrstr_edx 10044 00006C9F F9 stc 10045 .ok: 10046 00006CA0 C3 retn 10047 10048 00006CA1 46696C652072656164- txt_read_err db 'File read error!',0Dh,0Ah,0 10048 00006CAA 206572726F72210D0A- 10048 00006CB3 00 10049 10050 10051 ; =============== S U B R O U T I N E ======================================= 10052 10053 ; 20/10/2024 10054 CloseFile: 10055 00006CB4 58 pop eax ; near call return address 10056 00006CB5 5B pop ebx 10057 00006CB6 50 push eax 10058 ; TRDOS 386 system call 10059 ; Close file 10060 ; ebx = file handle (file descriptor) 10061 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 00006CB7 B806000000 <1> mov eax, %1 130 <1> 131 00006CBC CD40 <1> int 40h 10062 10063 00006CBE C3 retn 10064 10065 10066 ; --------------------------------------------------------------------------- 10067 ; TRDOS 386 Audio System Functions 10068 ; --------------------------------------------------------------------------- 10069 10070 ; =============== S U B R O U T I N E ======================================= 10071 10072 ; 10/01/2025 10073 ; 20/10/2024 10074 detect_enable_audio_device: 10075 00006CBF 66C705[268D0000]80- mov word [max_frequency], 48000 10075 00006CC7 BB 10076 ; 10/01/2025 10077 ;mov byte [blocks], 8 10078 10079 ; check AC'97 hardware at first 10080 ; (48kHz support) 10081 ; TRDOS 386 system call 10082 ; sysaudio 10083 ; Detect (BH=1) AC'97 (BL=2) Audio Device 10084 .ac97: 10085 sys _audio, 0102h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006CC8 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 00006CCD B820000000 <1> mov eax, %1 130 <1> 131 00006CD2 CD40 <1> int 40h 10086 00006CD4 7245 jc short .sb16 10087 00006CD6 C605[248D0000]02 mov byte [audio_hardware], 2 ; AC97 10088 10089 ;;;; 10090 ; 12/01/2025 (ref: playwav9.s, 18/12/2024) 10091 sys _audio, 0E00h ; get audio controller info 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006CDD 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 00006CE2 B820000000 <1> mov eax, %1 130 <1> 131 00006CE7 CD40 <1> int 40h 10092 ; EAX = IRQ Number in AL 10093 ; Audio Device Number in AH 10094 ; EBX = DEV/VENDOR ID 10095 ; (DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV) 10096 ; ECX = BUS/DEV/FN 10097 ; (00000000BBBBBBBBDDDDDFFF00000000) 10098 ; EDX = NABMBAR/NAMBAR (for AC97) 10099 ; (Low word, DX = NAMBAR address) 10100 ; EDX = Base IO Addr (DX) for SB16 & VT8233 10101 10102 00006CE9 891D[148D0000] mov [dev_vendor], ebx 10103 00006CEF 890D[108D0000] mov [bus_dev_fn], ecx 10104 10105 00006CF5 668915[188D0000] mov [NAMBAR], dx ; save audio mixer base addr 10106 ;shr edx, 16 10107 ;mov [NABMBAR], dx ; save bus master base addr 10108 00006CFC 8915[188D0000] mov [NAMBAR], edx 10109 10110 00006D02 A2[208D0000] mov [ac97_int_ln_reg], al 10111 ;;;; 10112 10113 ; TRDOS 386 system call 10114 ; sysaudio 10115 ; Get AC'97 Codec info 10116 ; (Function 14, sub function 1) 10117 sys _audio, 0E01h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006D07 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 00006D0C B820000000 <1> mov eax, %1 130 <1> 131 00006D11 CD40 <1> int 40h 10118 ; Save Variable Rate Audio support bit 10119 00006D13 2401 and al, 1 10120 00006D15 A2[258D0000] mov [vra], al 10121 00006D1A C3 retn 10122 .sb16: 10123 ; check Sound Blaster 16 card at second 10124 ; (44100Hz support, but 24kHz will be used) 10125 ; TRDOS 386 system call 10126 ; sysaudio 10127 ; Detect (BH=1) SB16 (BL=1) Audio Card 10128 sys _audio, 0101h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006D1B 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 00006D20 B820000000 <1> mov eax, %1 130 <1> 131 00006D25 CD40 <1> int 40h 10129 00006D27 7228 jc short .vt8233 10130 00006D29 C605[248D0000]01 mov byte [audio_hardware], 1 ; SB16 10131 00006D30 66C705[268D0000]44- mov word [max_frequency], 44100 10131 00006D38 AC 10132 ; 10/01/2025 10133 ;;mov byte [blocks], 7 10134 ;dec byte [blocks] 10135 10136 ;;;; 10137 ; 12/01/2025 (ref: sb16play.s, 20/12/2024) 10138 sys _audio, 0E00h ; get audio controller info 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006D39 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 00006D3E B820000000 <1> mov eax, %1 130 <1> 131 00006D43 CD40 <1> int 40h 10139 10140 00006D45 8915[1C8D0000] mov [audio_io_base], edx 10141 00006D4B A2[208D0000] mov [audio_intr], al 10142 ;;;; 10143 10144 00006D50 C3 retn 10145 .vt8233: 10146 ; check VIA VT3237R (VT8233) hardware at third 10147 ; (48kHz support) 10148 ; TRDOS 386 system call 10149 ; sysaudio 10150 ; Detect (BH=1) VT8237R (BL=3) Audio Device 10151 sys _audio, 0103h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006D51 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 00006D56 B820000000 <1> mov eax, %1 130 <1> 131 00006D5B CD40 <1> int 40h 10152 00006D5D 7208 jc short .hda 10153 00006D5F C605[248D0000]03 mov byte [audio_hardware], 3 ; VT8237R 10154 00006D66 C3 retn 10155 .hda: 10156 ; check Intel HDA hardware at last 10157 ; (48kHz support) 10158 ; TRDOS 386 system call 10159 ; sysaudio 10160 ; Detect (BH=1) Intel HDA (BL=4) Audio Device 10161 sys _audio, 0104h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006D67 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 00006D6C B820000000 <1> mov eax, %1 130 <1> 131 00006D71 CD40 <1> int 40h 10162 00006D73 7208 jc short .err 10163 00006D75 C605[248D0000]04 mov byte [audio_hardware], 4 ; HDA 10164 00006D7C C3 retn 10165 .err: 10166 00006D7D BA[896D0000] mov edx, txt_audio_nf_err 10167 00006D82 E857F8FFFF call wrstr_edx 10168 00006D87 F9 stc 10169 00006D88 C3 retn 10170 10171 00006D89 50726F706572206175- txt_audio_nf_err: db 'Proper audio hardware not found!',0Dh,0Ah,0 10171 00006D92 64696F206861726477- 10171 00006D9B 617265206E6F742066- 10171 00006DA4 6F756E64210D0A00 10172 10173 10174 ; =============== CONSTANT ================================================== 10175 10176 ; 21/10/2024 10177 MP3_MAX_OUTPUT_SIZE equ 2*2*18*32*2 10178 ; = 1200h = 4608 decimal = 2 channels, 2 granules, 18*32, 2 byte(16bit) 10179 10180 10181 ; =============== S U B R O U T I N E ======================================= 10182 10183 ; 12/01/2025 10184 audio_system_init: 10185 ;mov eax, sample_buffer_size 10186 ; 10/01/2025 10187 ;mov byte [blocks], 16 10188 ; 12/01/2025 10189 00006DAC C605[2A8D0000]08 mov byte [blocks], 8 10190 00006DB3 A1[34F40000] mov eax, [mp3_samples_output_size] 10191 00006DB8 C1E003 shl eax, 3 ; * 8 10192 ;shl eax, 4 ; * 16 10193 .asi@: 10194 ; 12/01/2025 10195 ;cmp eax, 65536 10196 ;jna short .asi@@ 10197 ;sub eax, [mp3_samples_output_size] 10198 ;dec byte [blocks] 10199 ;;; 10200 ; 11/01/2025 10201 ;test byte [blocks], 1 10202 ;jz short .asi@ 10203 ;dec byte [blocks] ; even number 10204 ;sub eax, [mp3_samples_output_size] 10205 ;;; 10206 ;jmp short .asi@ 10207 .asi@@: 10208 00006DBB 803D[248D0000]01 cmp byte [audio_hardware], 1 ; SB16 10209 00006DC2 7515 jne short .bufaloc 10210 .asi@@@: 10211 ; 10/01/2025 10212 00006DC4 3D00800000 cmp eax, 32768 10213 00006DC9 760E jna short .bufaloc 10214 ; sample_buffer_size = 36864 bytes ; 8 blocks 10215 ;sub eax, MP3_MAX_OUTPUT_SIZE 10216 ; eax = 32256 ; 7 blocks 10217 ; 10/01/2025 10218 00006DCB 2B05[34F40000] sub eax, [mp3_samples_output_size] 10219 00006DD1 FE0D[2A8D0000] dec byte [blocks] 10220 ;;; 10221 ; 11/01/2025 10222 ;test byte [blocks], 1 10223 ;jz short .asi@@@ 10224 ;dec byte [blocks] ; even number 10225 ;sub eax, [mp3_samples_output_size] 10226 ;;; 10227 00006DD7 EBEB jmp short .asi@@@ 10228 .bufaloc: 10229 ; TRDOS 386 system call 10230 ; sysaudio 10231 ; Allocate audio buffer (for user) 10232 ; ebx = 0200h (BH=2) 10233 ; ecx = buffer size (in bytes) 10234 ; edx = buffer address (virtual) 10235 00006DD9 A3[2C8D0000] mov [buffer_size], eax 10236 sys _audio, 0200h, eax, sample_buffer 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006DDE BB00020000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 00006DE3 89C1 <1> mov ecx, %3 124 <1> %if %0 = 4 125 00006DE5 BA[00500500] <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006DEA B820000000 <1> mov eax, %1 130 <1> 131 00006DEF CD40 <1> int 40h 10237 00006DF1 7225 jc short .init_err 10238 10239 ; 12/01/2025 10240 ; clear audio buffer (before playback) 10241 00006DF3 BF[00500500] mov edi, sample_buffer 10242 ; ecx = buffer size in bytes 10243 00006DF8 C1E902 shr ecx, 2 ; double word 10244 00006DFB 31C0 xor eax, eax 10245 00006DFD F3AB rep stosd 10246 10247 ; TRDOS 386 system call 10248 ; sysaudio 10249 ; Initialize audio device (bh = 3) 10250 ; bl = 01h -> CallBack method 10251 ; edx = Callback service address (virtual) 10252 ; ecx = 0 ; CL = srb value ; not used 10253 sys _audio, 0301h, 0, audio_callback 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006DFF BB01030000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 00006E04 B900000000 <1> mov ecx, %3 124 <1> %if %0 = 4 125 00006E09 BA[4B6E0000] <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00006E0E B820000000 <1> mov eax, %1 130 <1> 131 00006E13 CD40 <1> int 40h 10254 ; 12/01/2025 10255 ; SRB method (faster than callback method) 10256 ; bl = 0 -> Signal Response Byte method 10257 ; cl = 1 -> SRB set value 10258 ; (will be set by audio IRQ service of the kernel) 10259 ; edx = SRB address -one byte data- 10260 ;sys _audio, 0300h, 1, srb 10261 00006E15 7201 jc short .init_err 10262 00006E17 C3 retn 10263 .init_err: 10264 init_error: ; 13/01/2025 10265 00006E18 BA[246E0000] mov edx, txt_audio_init_err 10266 00006E1D E8BCF7FFFF call wrstr_edx 10267 00006E22 F9 stc 10268 00006E23 C3 retn 10269 10270 00006E24 417564696F20686172- txt_audio_init_err: db 'Audio hardware initialization error!',0Dh,0Ah,0 10270 00006E2D 647761726520696E69- 10270 00006E36 7469616C697A617469- 10270 00006E3F 6F6E206572726F7221- 10270 00006E48 0D0A00 10271 10272 10273 ; =============== S U B R O U T I N E ======================================= 10274 10275 ; 21/10/2024 10276 audio_callback: 10277 ; Operating system has directed CPU here because of 10278 ; user (2nd) stage of the audio hardware interrupt service. 10279 ; This procedure must be short and return to operating 10280 ; system again via sysrelease system call 10281 ; (or any system call here will be handled as sysrelease). 10282 10283 00006E4B C605[288D0000]01 mov byte [srb], 1 10284 10285 ; 12/01/2025 10286 00006E52 E83D010000 call try_enqueue_all_blocks 10287 10288 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 00006E57 B827000000 <1> mov eax, %1 130 <1> 131 00006E5C CD40 <1> int 40h 10289 10290 ; we must not come here ! 10291 00006E5E BBFFFFFFFF mov ebx, -1 10292 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 00006E63 B801000000 <1> mov eax, %1 130 <1> 131 00006E68 CD40 <1> int 40h 10293 ;jmp short audio_callback 10294 10295 10296 ; =============== S U B R O U T I N E ======================================= 10297 10298 ; 15/01/2025 (mp3play3.s & mp3play2.s) 10299 ; 13/01/2025 10300 ; 12/01/2025 10301 ; 10/01/2025 10302 ; 21/10/2024 10303 mp3_cast_to_speaker: 10304 ; 13/01/2025 10305 %if 1 10306 ; Start to play 10307 00006E6A A1[749D0000] mov eax, [mp3_bytes_per_sample] 10308 ;shr al, 1 ; 8 -> 0, 16 -> 1 10309 ;shl al, 1 ; 16 -> 2, 8 -> 0 10310 00006E6F 2402 and al, 2 ; 22/10/2024 10311 00006E71 8B1D[6C9D0000] mov ebx, [mp3_output_num_channels] 10312 00006E77 4B dec ebx 10313 00006E78 08C3 or bl, al 10314 00006E7A 8B0D[709D0000] mov ecx, [mp3_output_sample_rate] 10315 00006E80 B704 mov bh, 4 ; start to play 10316 10317 ; 13/01/2025 10318 mp3_cast_to_speaker_@: 10319 00006E82 53 push ebx 10320 00006E83 51 push ecx 10321 %endif 10322 ; 12/01/2025 10323 ;call try_enqueue_all_blocks 10324 10325 ; 12/01/2025 10326 ;cmp dword [bytes_left],0 10327 ;jz short .playback 10328 10329 ; 12/01/2025 10330 ; (here audio buffer -sample_buffer- is empty) 10331 ; (clear dma half buffer 1) 10332 sys _audio, 1001h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006E84 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 00006E89 B820000000 <1> mov eax, %1 130 <1> 131 00006E8E CD40 <1> int 40h 10333 ; (clear dma half buffer 2) 10334 ;sys _audio, 1002h 10335 10336 ; TRDOS 386 system call 10337 ; sysaudio 10338 ; bh = 16 : update (current, first) dma half buffer 10339 ; bl = 0 : then switch to the next (second) half buffer 10340 sys _audio, 1000h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006E90 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 00006E95 B820000000 <1> mov eax, %1 130 <1> 131 00006E9A CD40 <1> int 40h 10341 10342 ; 12/01/2025 10343 ; 22/10/2024 10344 ;call try_enqueue_all_blocks 10345 .playback: 10346 ; TRDOS 386 system call 10347 ; sysaudio 10348 ; Set Master Volume Level (BL=0 or 80h) 10349 ; for next playing (BL>=80h) 10350 ;sys _audio, 0B80h, 1D1Dh 10351 sys _audio, 0B00h, 1D1Dh 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006E9C BB000B0000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 00006EA1 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 00006EA6 B820000000 <1> mov eax, %1 130 <1> 131 00006EAB CD40 <1> int 40h 10352 10353 ;mov byte [volume_level], 1Dh 10354 00006EAD 880D[298D0000] mov [volume_level], cl 10355 ; 13/01/2025 10356 %if 0 10357 ; Start to play 10358 mov eax, [mp3_bytes_per_sample] 10359 ;shr al, 1 ; 8 -> 0, 16 -> 1 10360 ;shl al, 1 ; 16 -> 2, 8 -> 0 10361 and al, 2 ; 22/10/2024 10362 mov ebx, [mp3_output_num_channels] 10363 dec ebx 10364 or bl, al 10365 mov ecx, [mp3_output_sample_rate] 10366 mov bh, 4 ; start to play 10367 %else 10368 00006EB3 59 pop ecx ; sample rate (frequency) 10369 00006EB4 5B pop ebx ; play mode (bl) 10370 %endif 10371 ; TRDOS 386 system call 10372 ; sysaudio 10373 ; bh = 4 -> start to play 10374 ; bl = mode -> bit 0, 1 = stereo, 0 = mono 10375 ; bit 1, 1 = 16 bit, 0 = 8 bit 10376 ; cx = sample rate (hertz) 10377 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 00006EB5 B820000000 <1> mov eax, %1 130 <1> 131 00006EBA CD40 <1> int 40h 10378 10379 ; 12/01/2025 10380 00006EBC C605[288D0000]00 mov byte [srb], 0 10381 ;;; 10382 10383 .playback_lop: 10384 00006EC3 31C0 xor eax, eax 10385 00006EC5 3905[A42C0500] cmp [bytes_left], eax ; 0 10386 00006ECB 7508 jnz short .playback_next 10387 ; 22/10/2024 10388 00006ECD 3805[D0840000] cmp byte [num_enqueued_frames], al ; 0 10389 00006ED3 7415 jz short .playback_end 10390 .playback_next: 10391 00006ED5 A2[D0840000] mov [num_enqueued_frames], al ; 0 10392 00006EDA 803D[288D0000]01 cmp byte [srb], 1 ; audio interrupt status 10393 00006EE1 7238 jb short .getchar 10394 ;mov byte [srb], 0 ; reset 10395 00006EE3 A2[288D0000] mov [srb], al ; 0 10396 ; 12/01/2025 10397 ;call try_enqueue_all_blocks 10398 ; 15/01/2025 10399 00006EE8 EBD9 jmp short .playback_lop 10400 10401 .playback_end: 10402 ; TRDOS 386 system call 10403 ; sysaudio 10404 ; Stop playing 10405 sys _audio, 0700h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006EEA 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 00006EEF B820000000 <1> mov eax, %1 130 <1> 131 00006EF4 CD40 <1> int 40h 10406 ; Cancel callback service (for user) 10407 sys _audio, 0900h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006EF6 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 00006EFB B820000000 <1> mov eax, %1 130 <1> 131 00006F00 CD40 <1> int 40h 10408 ; Deallocate audio buffer (for user) 10409 sys _audio, 0A00h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006F02 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 00006F07 B820000000 <1> mov eax, %1 130 <1> 131 00006F0C CD40 <1> int 40h 10410 ; Disable audio device 10411 sys _audio, 0C00h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006F0E 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 00006F13 B820000000 <1> mov eax, %1 130 <1> 131 00006F18 CD40 <1> int 40h 10412 00006F1A C3 retn 10413 10414 .getchar: 10415 ; TRDOS 386 system call 10416 ; sysstdio 10417 ; BL = 1 -> read a character on stdin (no wait) 10418 sys _stdio, 1 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006F1B 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 00006F20 B82E000000 <1> mov eax, %1 130 <1> 131 00006F25 CD40 <1> int 40h 10419 00006F27 21C0 and eax, eax 10420 00006F29 74AA jz .playback_next ; 15/01/2024 10421 10422 00006F2B 3C2B cmp al, '+' ; increase sound volume 10423 00006F2D 7418 je short .inc_volume 10424 00006F2F 3C2D cmp al, '-' 10425 00006F31 743A je short .dec_volume 10426 10427 ;;; 10428 ; 10/01/2025 10429 ;cmp ah, 01h 10430 00006F33 3C1B cmp al, 1Bh ; ESC 10431 00006F35 74B3 je short .playback_end 10432 ;cmp ax, 2E03h 10433 00006F37 3C03 cmp al, 03h ; CTRL+C 10434 00006F39 74AF je short .playback_end 10435 ;;; 10436 ; 12/01/2025 10437 00006F3B 24DF and al, 0DFh 10438 00006F3D 3C48 cmp al, 'H' 10439 00006F3F 743F je short .hw_info 10440 00006F41 3C42 cmp al, 'B' 10441 00006F43 7445 je short .b_info 10442 00006F45 EB8E jmp .playback_next 10443 10444 .inc_volume: 10445 00006F47 8A0D[298D0000] mov cl, [volume_level] 10446 00006F4D 80F91F cmp cl, 1Fh ; 31 10447 00006F50 7383 jnb .playback_next 10448 00006F52 FEC1 inc cl 10449 .chg_volume: 10450 00006F54 880D[298D0000] mov [volume_level], cl 10451 00006F5A 88CD mov ch, cl 10452 ; TRDOS 386 system call 10453 ; sysstdio 10454 ; Set master volume level 10455 ; bh = 11 10456 ; cl = left channel volume (0 to 31 max) 10457 ; ch = right channel volume (0 to 31 max) 10458 sys _audio, 0B00h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00006F5C 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 00006F61 B820000000 <1> mov eax, %1 130 <1> 131 00006F66 CD40 <1> int 40h 10459 00006F68 E968FFFFFF jmp .playback_next 10460 .dec_volume: 10461 00006F6D 8A0D[298D0000] mov cl, [volume_level] 10462 00006F73 80F901 cmp cl, 1 ; 1 10463 00006F76 0F8659FFFFFF jna .playback_next 10464 00006F7C FEC9 dec cl 10465 00006F7E EBD4 jmp short .chg_volume 10466 10467 ; 12/01/2025 10468 .hw_info: 10469 00006F80 E80A020000 call write_audio_dev_info 10470 00006F85 E94BFFFFFF jmp .playback_next 10471 ; 12/01/2025 10472 .b_info: 10473 00006F8A E875040000 call write_buffer_size 10474 00006F8F E941FFFFFF jmp .playback_next 10475 10476 10477 ; =============== S U B R O U T I N E ======================================= 10478 10479 ; 15/01/2025 (mp3play2.s) -interpolation excluded- 10480 ; 13/01/2025 (mp3play3.s) -interpolation included- 10481 ; 12/01/2025 10482 ; 09/01/2025 10483 ; 21/10/2024 10484 try_enqueue_all_blocks: 10485 ; 12/01/2025 10486 00006F94 60 pusha 10487 00006F95 BF[00500500] mov edi, sample_buffer 10488 ; 10/01/2025 10489 ;jmp short .first_block 10490 ; 13/01/2025 10491 00006F9A EB15 jmp short try_enqueue_all_blocks_@ 10492 ;.next_block: 10493 teab_next_block: 10494 00006F9C 833D[A42C0500]00 cmp dword [bytes_left], 0 10495 ;jle short .enqueue_done 10496 ; 13/01/2025 10497 00006FA3 7E56 jle short teab_enqueue_done 10498 ; 10499 00006FA5 8B3D[30F40000] mov edi, [mp3_samples_dst] 10500 00006FAB 033D[34F40000] add edi, [mp3_samples_output_size] 10501 10502 try_enqueue_all_blocks_@: 10503 ;.first_block: 10504 ;pusha 10505 00006FB1 8B35[A02C0500] mov esi, [stream_pos] 10506 00006FB7 8B0D[A42C0500] mov ecx, [bytes_left] 10507 00006FBD 31ED xor ebp, ebp 10508 00006FBF E890F2FFFF call mp3_decode_frame 10509 ;popa 10510 ;jc short .enqueue_done 10511 ; 13/01/2025 10512 00006FC4 7235 jc short teab_enqueue_done 10513 00006FC6 A1[449D0000] mov eax, [mp3_src_frame_size] 10514 00006FCB 83F800 cmp eax, 0 10515 ;jz short .enqueue_done 10516 ; 13/01/2025 10517 00006FCE 742B jz short teab_enqueue_done 10518 00006FD0 0105[A02C0500] add [stream_pos], eax 10519 00006FD6 2905[A42C0500] sub [bytes_left], eax 10520 00006FDC A1[34F40000] mov eax, [mp3_samples_output_size] 10521 00006FE1 83F800 cmp eax, 0 10522 ;jz short .next_block 10523 ; 13/01/2025 10524 00006FE4 74B6 jz short teab_next_block 10525 ;.no_error: 10526 00006FE6 FE05[D0840000] inc byte [num_enqueued_frames] 10527 00006FEC A0[D0840000] mov al, [num_enqueued_frames] 10528 00006FF1 3A05[2A8D0000] cmp al, [blocks] 10529 ;jb short .next_block 10530 ; 13/01/2025 10531 00006FF7 72A3 jb short teab_next_block 10532 teab_rtn: 10533 ;.rtn: 10534 ; 12/01/2025 10535 00006FF9 61 popa 10536 00006FFA C3 retn 10537 ;.enqueue_done: 10538 teab_enqueue_done: 10539 00006FFB C705[A42C0500]0000- mov dword [bytes_left], 0 10539 00007003 0000 10540 ; 12/01/2025 10541 ;jmp short .rtn 10542 ; 13/01/2025 10543 00007005 EBF2 jmp short teab_rtn 10544 10545 10546 ; --------------------------------------------------------------------------- 10547 ; 15/01/2025 - mono to stereo - 8bit to 16bit - conversion procedures (AC97) 10548 ; --------------------------------------------------------------------------- 10549 10550 ; =============== S U B R O U T I N E ======================================= 10551 10552 ; 15/01/2025 10553 audio_system_init_x: 10554 00007007 8B0D[34F40000] mov ecx, [mp3_samples_output_size] 10555 0000700D 89C8 mov eax, ecx 10556 10557 ; 48 kHZ with 16 bit stereo conversion 10558 ; 10559 ; selected output is 10560 ; 8bit stereo or 16bit mono or 8bit mono 10561 ; (but AC97 hardware needs 16bit stereo samples) 10562 10563 0000700F D1E0 shl eax, 1 ; * 2 (mono to stereo) 10564 10565 00007011 BB[26710000] mov ebx, convert_to_stereo 10566 00007016 803D[749D0000]02 cmp byte [mp3_bytes_per_sample], 2 10567 0000701D 7415 je short .set_sizes ; 16bit mono 10568 10569 ; 8bit output (16bit conversion is neeed) 10570 0000701F BB[55710000] mov ebx, convert_to_16bit 10571 00007024 803D[6C9D0000]02 cmp byte [mp3_output_num_channels], 2 10572 0000702B 7407 je short .set_sizes ; 8bit stereo 10573 ; 8bit mono output 10574 0000702D D1E0 shl eax, 1 10575 0000702F BB[71710000] mov ebx, convert_to_stereo_16bit 10576 .set_sizes: 10577 00007034 891D[308D0000] mov [conversion], ebx 10578 0000703A 890D[348D0000] mov [loadsize], ecx 10579 ;;; 10580 ; align to 16bit stereo (if there is a defect) 10581 ;and al, ~3 10582 00007040 A3[2C8D0000] mov [buffer_size], eax 10583 ;;; 10584 .asix_@: 10585 ; TRDOS 386 system call 10586 ; sysaudio 10587 ; Allocate audio buffer (for user) 10588 ; ebx = 0200h (BH=2) 10589 ; ecx = buffer size (in bytes) 10590 ; edx = buffer address (virtual) 10591 10592 sys _audio, 0200h, [buffer_size], sample_buffer 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 00007045 BB00020000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 0000704A 8B0D[2C8D0000] <1> mov ecx, %3 124 <1> %if %0 = 4 125 00007050 BA[00500500] <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 00007055 B820000000 <1> mov eax, %1 130 <1> 131 0000705A CD40 <1> int 40h 10593 0000705C 7228 jc short .init_err 10594 10595 ; clear audio buffer (before playback) 10596 0000705E BF[00500500] mov edi, sample_buffer 10597 ; ecx = buffer size in bytes 10598 00007063 83C103 add ecx, 3 ; 13/01/2025 10599 00007066 C1E902 shr ecx, 2 10600 00007069 31C0 xor eax, eax 10601 0000706B F3AB rep stosd 10602 10603 ; TRDOS 386 system call 10604 ; sysaudio 10605 ; Initialize audio device (bh = 3) 10606 ; bl = 01h -> CallBack method 10607 ; edx = Callback service address (virtual) 10608 ; ecx = 0 ; CL = srb value ; not used 10609 sys _audio, 0301h, 0, audio_callback_x 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 0000706D BB01030000 <1> mov ebx, %2 122 <1> %if %0 >= 3 123 00007072 B900000000 <1> mov ecx, %3 124 <1> %if %0 = 4 125 00007077 BA[07710000] <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 0000707C B820000000 <1> mov eax, %1 130 <1> 131 00007081 CD40 <1> int 40h 10610 00007083 7201 jc short .init_err 10611 00007085 C3 retn 10612 .init_err: 10613 00007086 E98DFDFFFF jmp init_error 10614 10615 10616 ; =============== S U B R O U T I N E ======================================= 10617 10618 ; 15/01/2025 (mp3play2.s) 10619 ; 14/01/2025 (mp3play3.s) 10620 ; 13/01/2025 10621 mp3_cast_to_speaker_x: 10622 ; 13/01/2025 10623 %if 0 10624 ; Start to play 10625 mov eax, [mp3_bytes_per_sample] 10626 ;shr al, 1 ; 8 -> 0, 16 -> 1 10627 ;shl al, 1 ; 16 -> 2, 8 -> 0 10628 and al, 2 10629 mov ebx, [mp3_output_num_channels] 10630 dec ebx 10631 or bl, al 10632 mov ecx, [mp3_output_sample_rate] 10633 mov bh, 4 ; start to play 10634 %else 10635 ;; 48 kHZ, 16bit, stereo 10636 0000708B BB03040000 mov ebx, 0403h 10637 ; 15/01/2025 10638 ;mov ecx, 48000 10639 ;; 14/01/2025 10640 ;cmp byte [vra], 1 10641 ;jb short .jmpto@ 10642 00007090 8B0D[709D0000] mov ecx, [mp3_output_sample_rate] 10643 ;.jmpto@: 10644 %endif 10645 00007096 E9E7FDFFFF jmp mp3_cast_to_speaker_@ 10646 10647 10648 ; =============== S U B R O U T I N E ======================================= 10649 10650 ; 15/01/2025 (mp3play3.s & mp3play2.s) 10651 ; 13/01/2025 10652 try_enqueue_all_blocks_x: 10653 ; 12/01/2025 10654 0000709B 60 pusha 10655 0000709C BF[00300500] mov edi, decoding_buffer 10656 ; 15/01/2025 10657 ;jmp try_enqueue_all_blocks_@ 10658 000070A1 EB15 jmp short .first_block 10659 10660 ; 15/01/2025 10661 .next_block: 10662 000070A3 833D[A42C0500]00 cmp dword [bytes_left], 0 10663 000070AA 7E4F jle short .enqueue_done 10664 ; 10665 000070AC 8B3D[30F40000] mov edi, [mp3_samples_dst] 10666 000070B2 033D[34F40000] add edi, [mp3_samples_output_size] 10667 10668 ;try_enqueue_all_blocks_@: 10669 .first_block: 10670 ;pusha 10671 000070B8 8B35[A02C0500] mov esi, [stream_pos] 10672 000070BE 8B0D[A42C0500] mov ecx, [bytes_left] 10673 000070C4 31ED xor ebp, ebp 10674 000070C6 E889F1FFFF call mp3_decode_frame 10675 ;popa 10676 000070CB 722E jc short .enqueue_done 10677 10678 000070CD A1[449D0000] mov eax, [mp3_src_frame_size] 10679 000070D2 83F800 cmp eax, 0 10680 000070D5 7424 jz short .enqueue_done 10681 000070D7 0105[A02C0500] add [stream_pos], eax 10682 000070DD 2905[A42C0500] sub [bytes_left], eax 10683 10684 000070E3 A1[34F40000] mov eax, [mp3_samples_output_size] 10685 000070E8 83F800 cmp eax, 0 10686 000070EB 74B6 jz short .next_block 10687 10688 ; 15/01/2025 10689 000070ED FF15[308D0000] call dword [conversion] 10690 .no_error: 10691 ; 15/01/2025 10692 000070F3 FE05[D0840000] inc byte [num_enqueued_frames] 10693 .rtn: 10694 ; 12/01/2025 10695 000070F9 61 popa 10696 000070FA C3 retn 10697 .enqueue_done: 10698 000070FB C705[A42C0500]0000- mov dword [bytes_left], 0 10698 00007103 0000 10699 ; 12/01/2025 10700 00007105 EBF2 jmp short .rtn 10701 10702 10703 ; =============== S U B R O U T I N E ======================================= 10704 10705 ; 15/01/2025 (mp3play3.s & mp3play1.s) 10706 ; 13/01/2025 10707 audio_callback_x: 10708 ; Operating system has directed CPU here because of 10709 ; user (2nd) stage of the audio hardware interrupt service. 10710 ; This procedure must be short and return to operating 10711 ; system again via sysrelease system call 10712 ; (or any system call here will be handled as sysrelease). 10713 10714 00007107 C605[288D0000]01 mov byte [srb], 1 10715 10716 0000710E E888FFFFFF call try_enqueue_all_blocks_x 10717 10718 ; 15/01/2025 10719 ;call dword [conversion] 10720 10721 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 00007113 B827000000 <1> mov eax, %1 130 <1> 131 00007118 CD40 <1> int 40h 10722 10723 ; we must not come here ! 10724 0000711A BBFFFFFFFF mov ebx, -1 10725 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 0000711F B801000000 <1> mov eax, %1 130 <1> 131 00007124 CD40 <1> int 40h 10726 ;jmp short audio_callback 10727 10728 10729 ; --------------------------------------------------------------------------- 10730 ; conversion procedures 10731 ; --------------------------------------------------------------------------- 10732 10733 ; 15/01/2025 (mp3play1.s) 10734 ; 13/01/2025 (mp3play3.s) 10735 10736 ; convert_to_stereo: convert 16bit mono samples to 16bit stereo 10737 ; convert_to_16bit: convert 8bit stereo samples to 16bit stereo 10738 ; convert_to_stereo_16bit: convert 8bit mono samples to 16bit & stereo 10739 ; [loadsize] = decoding buffer size 10740 ; [buffer_size] = wav output buffer size (<= 64KB) 10741 10742 ; =============== S U B R O U T I N E ======================================= 10743 10744 ; ///// 10745 10746 ; 13/01/2025 10747 convert_to_stereo: 10748 00007126 BE[00300500] mov esi, decoding_buffer ; (contains 16bit mono samples) 10749 0000712B BF[00500500] mov edi, sample_buffer ; wav output buffer 10750 00007130 8B0D[348D0000] mov ecx, [loadsize] 10751 00007136 D1E9 shr ecx, 1 ; word count 10752 cts_1: 10753 00007138 66AD lodsw 10754 0000713A 66AB stosw ; left channel 10755 0000713C 66AB stosw ; right channel 10756 0000713E E2F8 loop cts_1 10757 cts_2: 10758 ; padfill 10759 00007140 8B0D[2C8D0000] mov ecx, [buffer_size] 10760 00007146 81C1[00500500] add ecx, sample_buffer 10761 0000714C 29F9 sub ecx, edi 10762 0000714E 7604 jna short cts_3 10763 00007150 31C0 xor eax, eax 10764 00007152 F3AA rep stosb 10765 cts_3: 10766 00007154 C3 retn 10767 10768 ; =============== S U B R O U T I N E ======================================= 10769 10770 ; ///// 10771 10772 ; 13/01/2025 10773 convert_to_16bit: 10774 00007155 BE[00300500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 10775 0000715A BF[00500500] mov edi, sample_buffer ; wav output buffer 10776 0000715F 8B0D[348D0000] mov ecx, [loadsize] 10777 ct16b_1: 10778 ; stereo & 8 bit 10779 00007165 AC lodsb 10780 00007166 2C80 sub al, 80h ; 08/11/2023 10781 00007168 C1E008 shl eax, 8 ; convert 8 bit sample to 16 bit sample 10782 0000716B 66AB stosw 10783 0000716D E2F6 loop ct16b_1 10784 0000716F EBCF jmp short cts_2 10785 10786 ; =============== S U B R O U T I N E ======================================= 10787 10788 ; ///// 10789 10790 ; 13/01/2025 10791 convert_to_stereo_16bit: 10792 00007171 BE[00300500] mov esi, decoding_buffer ; (contains 8bit mono samples) 10793 00007176 BF[00500500] mov edi, sample_buffer ; wav output buffer 10794 0000717B 8B0D[348D0000] mov ecx, [loadsize] 10795 cts16b_1: 10796 ; mono & 8 bit 10797 00007181 AC lodsb 10798 00007182 2C80 sub al, 80h ; 08/11/2023 10799 00007184 C1E008 shl eax, 8 ; convert 8 bit sample to 16 bit sample 10800 00007187 66AB stosw ; left channel 10801 00007189 66AB stosw ; right channel 10802 0000718B E2F4 loop cts16b_1 10803 0000718D EBB1 jmp short cts_2 10804 10805 ; ///// 10806 10807 10808 ; --------------------------------------------------------------------------- 10809 ; 12/01/2025- Hardware Info display/write procedures. 10810 ; --------------------------------------------------------------------------- 10811 ; ref: playwav9.s (18/12/2024) - sb16play.s (20/12/2024) 10812 10813 ; 15/01/2025 (mp3play3.s & mp3play2.s) 10814 ; 12/01/2025 10815 write_audio_dev_info: 10816 0000718F 803D[248D0000]02 cmp byte [audio_hardware], 2 10817 00007196 7203 jb short write_sb16_dev_info ; SB16 10818 00007198 745A je short write_ac97_pci_dev_info ; AC97 10819 0000719A C3 retn 10820 10821 ; 20/12/2024 (playwavx.s, sb16play.s) 10822 write_sb16_dev_info: 10823 ; 27/11/2024 10824 ; 24/11/2024 (sb16play.asm) 10825 10826 0000719B A1[1C8D0000] mov eax, [audio_io_base] 10827 000071A0 31DB xor ebx, ebx 10828 000071A2 88C3 mov bl, al 10829 000071A4 88DA mov dl, bl 10830 000071A6 80E30F and bl, 0Fh 10831 000071A9 8A83[D4740000] mov al, [ebx+hex_chars] 10832 000071AF A2[D2750000] mov [msgBasePort+2], al 10833 000071B4 88D3 mov bl, dl 10834 000071B6 C0EB04 shr bl, 4 10835 000071B9 8A83[D4740000] mov al, [ebx+hex_chars] 10836 000071BF A2[D1750000] mov [msgBasePort+1], al 10837 000071C4 88E3 mov bl, ah 10838 ;and bl, 0Fh 10839 000071C6 8A83[D4740000] mov al, [ebx+hex_chars] 10840 000071CC A2[D0750000] mov [msgBasePort], al 10841 10842 ;xor eax, eax 10843 ; 27/11/2024 10844 000071D1 A0[208D0000] mov al, [audio_intr] 10845 ;mov cl, 10 10846 ;div cl 10847 ;add ah, 30h 10848 ;mov [msgIRQnum], ah 10849 ; 25/11/2024 10850 000071D6 0430 add al, 30h 10851 000071D8 A2[E7750000] mov [msgIRQnum], al ; 12/01/2025 10852 10853 ; 12/01/2025 10854 ; 20/12/2024 10855 sys _msg, msgSB16Info, 255, 07h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 000071DD BB[9A750000] <1> mov ebx, %2 122 <1> %if %0 >= 3 123 000071E2 B9FF000000 <1> mov ecx, %3 124 <1> %if %0 = 4 125 000071E7 BA07000000 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 000071EC B823000000 <1> mov eax, %1 130 <1> 131 000071F1 CD40 <1> int 40h 10856 10857 000071F3 C3 retn 10858 10859 write_ac97_pci_dev_info: 10860 ; 19/11/2024 10861 ; 30/05/2024 10862 ; 06/06/2017 10863 ; 03/06/2017 10864 ; BUS/DEV/FN 10865 ; 00000000BBBBBBBBDDDDDFFF00000000 10866 ; DEV/VENDOR 10867 ; DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV 10868 10869 000071F4 A1[148D0000] mov eax, [dev_vendor] 10870 000071F9 31DB xor ebx, ebx 10871 000071FB 88C3 mov bl, al 10872 000071FD 88DA mov dl, bl 10873 000071FF 80E30F and bl, 0Fh 10874 00007202 8A83[D4740000] mov al, [ebx+hex_chars] 10875 00007208 A2[1B750000] mov [msgVendorId+3], al 10876 0000720D 88D3 mov bl, dl 10877 0000720F C0EB04 shr bl, 4 10878 00007212 8A83[D4740000] mov al, [ebx+hex_chars] 10879 00007218 A2[1A750000] mov [msgVendorId+2], al 10880 0000721D 88E3 mov bl, ah 10881 0000721F 88DA mov dl, bl 10882 00007221 80E30F and bl, 0Fh 10883 00007224 8A83[D4740000] mov al, [ebx+hex_chars] 10884 0000722A A2[19750000] mov [msgVendorId+1], al 10885 0000722F 88D3 mov bl, dl 10886 00007231 C0EB04 shr bl, 4 10887 00007234 8A83[D4740000] mov al, [ebx+hex_chars] 10888 0000723A A2[18750000] mov [msgVendorId], al 10889 0000723F C1E810 shr eax, 16 10890 00007242 88C3 mov bl, al 10891 00007244 88DA mov dl, bl 10892 00007246 80E30F and bl, 0Fh 10893 00007249 8A83[D4740000] mov al, [ebx+hex_chars] 10894 0000724F A2[2C750000] mov [msgDevId+3], al 10895 00007254 88D3 mov bl, dl 10896 00007256 C0EB04 shr bl, 4 10897 00007259 8A83[D4740000] mov al, [ebx+hex_chars] 10898 0000725F A2[2B750000] mov [msgDevId+2], al 10899 00007264 88E3 mov bl, ah 10900 00007266 88DA mov dl, bl 10901 00007268 80E30F and bl, 0Fh 10902 0000726B 8A83[D4740000] mov al, [ebx+hex_chars] 10903 00007271 A2[2A750000] mov [msgDevId+1], al 10904 00007276 88D3 mov bl, dl 10905 00007278 C0EB04 shr bl, 4 10906 0000727B 8A83[D4740000] mov al, [ebx+hex_chars] 10907 00007281 A2[29750000] mov [msgDevId], al 10908 10909 00007286 A1[108D0000] mov eax, [bus_dev_fn] 10910 0000728B C1E808 shr eax, 8 10911 0000728E 88C3 mov bl, al 10912 00007290 88DA mov dl, bl 10913 00007292 80E307 and bl, 7 ; bit 0,1,2 10914 00007295 8A83[D4740000] mov al, [ebx+hex_chars] 10915 0000729B A2[51750000] mov [msgFncNo+1], al 10916 000072A0 88D3 mov bl, dl 10917 000072A2 C0EB03 shr bl, 3 10918 000072A5 88DA mov dl, bl 10919 000072A7 80E30F and bl, 0Fh 10920 000072AA 8A83[D4740000] mov al, [ebx+hex_chars] 10921 000072B0 A2[43750000] mov [msgDevNo+1], al 10922 000072B5 88D3 mov bl, dl 10923 000072B7 C0EB04 shr bl, 4 10924 000072BA 8A83[D4740000] mov al, [ebx+hex_chars] 10925 000072C0 A2[42750000] mov [msgDevNo], al 10926 000072C5 88E3 mov bl, ah 10927 000072C7 88DA mov dl, bl 10928 000072C9 80E30F and bl, 0Fh 10929 000072CC 8A83[D4740000] mov al, [ebx+hex_chars] 10930 000072D2 A2[37750000] mov [msgBusNo+1], al 10931 000072D7 88D3 mov bl, dl 10932 000072D9 C0EB04 shr bl, 4 10933 000072DC 8A83[D4740000] mov al, [ebx+hex_chars] 10934 000072E2 A2[36750000] mov [msgBusNo], al 10935 10936 ;mov ax, [ac97_NamBar] 10937 000072E7 66A1[188D0000] mov ax, [NAMBAR] 10938 000072ED 88C3 mov bl, al 10939 000072EF 88DA mov dl, bl 10940 000072F1 80E30F and bl, 0Fh 10941 000072F4 8A83[D4740000] mov al, [ebx+hex_chars] 10942 000072FA A2[61750000] mov [msgNamBar+3], al 10943 000072FF 88D3 mov bl, dl 10944 00007301 C0EB04 shr bl, 4 10945 00007304 8A83[D4740000] mov al, [ebx+hex_chars] 10946 0000730A A2[60750000] mov [msgNamBar+2], al 10947 0000730F 88E3 mov bl, ah 10948 00007311 88DA mov dl, bl 10949 00007313 80E30F and bl, 0Fh 10950 00007316 8A83[D4740000] mov al, [ebx+hex_chars] 10951 0000731C A2[5F750000] mov [msgNamBar+1], al 10952 00007321 88D3 mov bl, dl 10953 00007323 C0EB04 shr bl, 4 10954 00007326 8A83[D4740000] mov al, [ebx+hex_chars] 10955 0000732C A2[5E750000] mov [msgNamBar], al 10956 10957 ;mov ax, [ac97_NabmBar] 10958 00007331 66A1[1A8D0000] mov ax, [NABMBAR] 10959 00007337 88C3 mov bl, al 10960 00007339 88DA mov dl, bl 10961 0000733B 80E30F and bl, 0Fh 10962 0000733E 8A83[D4740000] mov al, [ebx+hex_chars] 10963 00007344 A2[71750000] mov [msgNabmBar+3], al 10964 00007349 88D3 mov bl, dl 10965 0000734B C0EB04 shr bl, 4 10966 0000734E 8A83[D4740000] mov al, [ebx+hex_chars] 10967 00007354 A2[70750000] mov [msgNabmBar+2], al 10968 00007359 88E3 mov bl, ah 10969 0000735B 88DA mov dl, bl 10970 0000735D 80E30F and bl, 0Fh 10971 00007360 8A83[D4740000] mov al, [ebx+hex_chars] 10972 00007366 A2[6F750000] mov [msgNabmBar+1], al 10973 0000736B 88D3 mov bl, dl 10974 0000736D C0EB04 shr bl, 4 10975 00007370 8A83[D4740000] mov al, [ebx+hex_chars] 10976 00007376 A2[6E750000] mov [msgNabmBar], al 10977 10978 0000737B 31C0 xor eax, eax 10979 0000737D A0[208D0000] mov al, [ac97_int_ln_reg] 10980 00007382 B10A mov cl, 10 10981 00007384 F6F1 div cl 10982 ; 23/11/2024 10983 ;add [msgIRQ], ax 10984 00007386 66053030 add ax, 3030h 10985 0000738A 66A3[7A750000] mov [msgIRQ], ax 10986 ;and al, al 10987 00007390 3C30 cmp al, 30h 10988 00007392 750D jnz short _w_ac97imsg_ 10989 00007394 A0[7B750000] mov al, byte [msgIRQ+1] 10990 00007399 B420 mov ah, ' ' 10991 0000739B 66A3[7A750000] mov [msgIRQ], ax 10992 _w_ac97imsg_: 10993 ; 12/01/2025 10994 ; 01/12/2024 10995 sys _msg, msgAC97Info, 255, 07h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 000073A1 BB[E5740000] <1> mov ebx, %2 122 <1> %if %0 >= 3 123 000073A6 B9FF000000 <1> mov ecx, %3 124 <1> %if %0 = 4 125 000073AB BA07000000 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 000073B0 B823000000 <1> mov eax, %1 130 <1> 131 000073B5 CD40 <1> int 40h 10996 10997 ; 19/11/2024 10998 ;retn 10999 11000 ; 30/05/2024 11001 write_VRA_info: 11002 ; 12/01/2025 11003 ; 01/12/2024 11004 sys _msg, msgVRAheader, 255, 07h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 000073B7 BB[7F750000] <1> mov ebx, %2 122 <1> %if %0 >= 3 123 000073BC B9FF000000 <1> mov ecx, %3 124 <1> %if %0 = 4 125 000073C1 BA07000000 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 000073C6 B823000000 <1> mov eax, %1 130 <1> 131 000073CB CD40 <1> int 40h 11005 000073CD 803D[258D0000]00 cmp byte [vra], 0 11006 000073D4 7617 jna short _w_VRAi_no 11007 _w_VRAi_yes: 11008 sys _msg, msgVRAyes, 255, 07h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 000073D6 BB[8E750000] <1> mov ebx, %2 122 <1> %if %0 >= 3 123 000073DB B9FF000000 <1> mov ecx, %3 124 <1> %if %0 = 4 125 000073E0 BA07000000 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 000073E5 B823000000 <1> mov eax, %1 130 <1> 131 000073EA CD40 <1> int 40h 11009 000073EC C3 retn 11010 _w_VRAi_no: 11011 sys _msg, msgVRAno, 255, 07h 116 <1> 117 <1> 118 <1> 119 <1> 120 <1> %if %0 >= 2 121 000073ED BB[94750000] <1> mov ebx, %2 122 <1> %if %0 >= 3 123 000073F2 B9FF000000 <1> mov ecx, %3 124 <1> %if %0 = 4 125 000073F7 BA07000000 <1> mov edx, %4 126 <1> %endif 127 <1> %endif 128 <1> %endif 129 000073FC B823000000 <1> mov eax, %1 130 <1> 131 00007401 CD40 <1> int 40h 11012 11013 00007403 C3 retn 11014 11015 ; --------------------------------------------------------------------------- 11016 11017 ; 15/01/2025 11018 ; 13/01/2025 11019 ; 12/01/2025 11020 write_buffer_size: 11021 ;;; 11022 00007404 A0[2A8D0000] mov al, [blocks] ; (must be less than 10) 11023 00007409 0430 add al, '0' 11024 0000740B A2[88740000] mov byte [blocks_txt], al 11025 ;;; 11026 ;cmp byte [interpolation], 1 11027 ; 15/01/2025 (mp3play2.s) 11028 00007410 803D[388D0000]01 cmp byte [convert], 1 11029 00007417 731F jnb short write_buffer_size_x 11030 ;;; 11031 00007419 BA[70740000] mov edx, buffersize_txt 11032 0000741E E8BBF1FFFF call wrstr_edx 11033 00007423 A1[2C8D0000] mov eax, [buffer_size] 11034 00007428 E8E7F1FFFF call wr_decimal_eax_with_thousands_seperator 11035 0000742D BA[80740000] mov edx, bytes_txt 11036 00007432 E8A7F1FFFF call wrstr_edx 11037 00007437 C3 retn 11038 11039 ; 13/01/2025 (Indirect interpolation info) 11040 write_buffer_size_x: 11041 00007438 BA[95740000] mov edx, buffers1_txt 11042 0000743D E89CF1FFFF call wrstr_edx 11043 00007442 A1[348D0000] mov eax, [loadsize] ; decoding buffer size 11044 ; 15/01/2025 11045 00007447 E8C8F1FFFF call wr_decimal_eax_with_thousands_seperator 11046 0000744C E814000000 call w_dbuff_bytes 11047 00007451 BA[B9740000] mov edx, buffers2_txt 11048 00007456 E883F1FFFF call wrstr_edx 11049 0000745B A1[2C8D0000] mov eax, [buffer_size] ; wav buffer size 11050 00007460 E8AFF1FFFF call wr_decimal_eax_with_thousands_seperator 11051 w_dbuff_bytes: 11052 00007465 BA[CA740000] mov edx, bytes2_txt 11053 0000746A E86FF1FFFF call wrstr_edx 11054 0000746F C3 retn 11055 11056 ; 11/01/2025 11057 00007470 0D0A buffersize_txt db 0Dh, 0Ah 11058 00007472 427566666572205369- db 'Buffer Size: ', 0 11058 0000747B 7A653A2000 11059 ; 12/01/2025 11060 ;bytes_txt: db ' bytes ', 0Dh, 0Ah, 0 11061 00007480 2062797465732028 bytes_txt: db ' bytes (' 11062 00007488 3020626C6F636B7329- blocks_txt db '0 blocks) ', 0Dh, 0Ah, 0 11062 00007491 200D0A00 11063 11064 ; 13/01/2025 11065 00007495 0D0A buffers1_txt db 0Dh, 0Ah 11066 00007497 427566666572207369- db 'Buffer size for', 0Dh, 0Ah 11066 000074A0 7A6520666F720D0A 11067 000074A8 202020206465636F64- db ' decoding is ', 0 11067 000074B1 696E672069732000 11068 000074B9 2020776176206F7574- buffers2_txt db ' wav output is ', 0 11068 000074C2 7075742069732000 11069 000074CA 206279746573200D0A- bytes2_txt: db ' bytes ', 0Dh, 0Ah, 0 11069 000074D3 00 11070 11071 ; --------------------------------------------------------------------------- 11072 11073 ; 19/11/2024 11074 ; 03/06/2017 11075 000074D4 303132333435363738- hex_chars db "0123456789ABCDEF", 0 11075 000074DD 3941424344454600 11076 000074E5 0D0A msgAC97Info db 0Dh, 0Ah 11077 000074E7 204143393720417564- db " AC97 Audio Controller & Codec Info", 0Dh, 0Ah 11077 000074F0 696F20436F6E74726F- 11077 000074F9 6C6C6572202620436F- 11077 00007502 64656320496E666F0D- 11077 0000750B 0A 11078 0000750C 2056656E646F722049- db " Vendor ID: " 11078 00007515 443A20 11079 00007518 303030306820446576- msgVendorId db "0000h Device ID: " 11079 00007521 6963652049443A20 11080 00007529 30303030680D0A msgDevId db "0000h", 0Dh, 0Ah 11081 00007530 204275733A20 db " Bus: " 11082 00007536 303068204465766963- msgBusNo db "00h Device: " 11082 0000753F 653A20 11083 00007542 3030682046756E6374- msgDevNo db "00h Function: " 11083 0000754B 696F6E3A20 11084 00007550 303068 msgFncNo db "00h" 11085 00007553 0D0A db 0Dh, 0Ah 11086 00007555 204E414D4241523A20 db " NAMBAR: " 11087 0000755E 30303030682020 msgNamBar db "0000h " 11088 00007565 4E41424D4241523A20 db "NABMBAR: " 11089 0000756E 303030306820204952- msgNabmBar db "0000h IRQ: " 11089 00007577 513A20 11090 0000757A 3030 msgIRQ dw 3030h 11091 0000757C 0D0A00 db 0Dh, 0Ah, 0 11092 ; 25/11/2023 11093 0000757F 205652412073757070- msgVRAheader db " VRA support: " 11093 00007588 6F72743A20 11094 0000758D 00 db 0 11095 0000758E 5945530D0A00 msgVRAyes db "YES", 0Dh, 0Ah, 0 11096 00007594 4E4F200D0A msgVRAno db "NO ", 0Dh, 0Ah 11097 ; 12/01/2025 11098 ;db " (Interpolated sample rate playing method)" 11099 00007599 00 db 0 11100 ;db 0Dh, 0Ah, 0 11101 11102 ; ---------------------------------- 11103 11104 ; 24/11/2024 11105 0000759A 0D0A msgSB16Info db 0Dh, 0Ah 11106 0000759C 20417564696F204861- db " Audio Hardware: Sound Blaster 16", 0Dh, 0Ah 11106 000075A5 7264776172653A2053- 11106 000075AE 6F756E6420426C6173- 11106 000075B7 7465722031360D0A 11107 000075BF 202020202020426173- db " Base Port: " 11107 000075C8 6520506F72743A20 11108 000075D0 303030680D0A msgBasePort db "000h", 0Dh, 0Ah 11109 000075D6 202020202020202020- db " IRQ: " 11109 000075DF 2020204952513A20 11110 000075E7 30 msgIRQnum db 30h ; 12/01/2025 11111 crlf: ; 13/01/2025 11112 000075E8 0D0A00 db 0Dh, 0Ah, 0 11113 11114 11115 ; =========================================================================== 11116 ; end of TRDOS 386 specific procedures. 11117 ; --------------------------------------------------------------------------- 11118 11119 ; =========================================================================== 11120 ; Initialized DATA 11121 ; =========================================================================== 11122 11123 000075EB 00 option_test db 0 11124 000075EC 00 option_mono db 0 11125 000075ED 00 option_8bit db 0 11126 000075EE 00 option_rate_shift db 0 11127 000075EF 00 option_fast db 0 11128 align 4 11129 000075F0 00000000 cpuid_flags dd 0 11130 000075F4 00 cpuid_exists db 0 11131 000075F5 00 detected_cpu db 0 11132 000075F6 90 align 4 11133 000075F8 00000000 mp3_output_milliseconds dd 0 11134 000075FC 00000000 millisecond_count dd 0 11135 11136 ; 20/10/2024 11137 ; HANDLE hProcess 11138 ;hProcess dd 0 11139 ; HANDLE hThread 11140 ;hThread dd 0 11141 ; DWORD dwPriorityClass 11142 ;dwPriorityClass dd 0 11143 ; int nPriority 11144 ;nPriority dd 0 11145 11146 00007600 0000000000000000 ttt dd 2 dup(0) 11147 00007608 726561642068656164- rdtsc_read_header db 'read header ',0 11147 00007611 65722020202000 11148 00007618 0000000000000000 rdtsc_read_header_extra dd 0, 0 11149 00007620 726561642065787472- db 'read extra ',0 11149 00007629 61202020202000 11150 00007630 0000000000000000 rdtsc_read_granule dd 0, 0 11151 00007638 72656164206772616E- db 'read granule ',0 11151 00007641 756C6520202000 11152 00007648 0000000000000000 rdtsc_append_main dd 2 dup(0) 11153 00007650 617070656E64206D61- db 'append main ',0 11153 00007659 696E2020202000 11154 00007660 0000000000000000 rdtsc_read_scalefac dd 2 dup(0) 11155 00007668 72656164207363616C- db 'read scalefac ',0 11155 00007671 65666163202000 11156 00007678 0000000000000000 rdtsc_xlat_scalefac dd 2 dup(0) 11157 00007680 786C6174207363616C- db 'xlat scalefac ',0 11157 00007689 65666163202000 11158 00007690 0000000000000000 rdtsc_read_huffman dd 2 dup(0) 11159 00007698 726561642068756666- db 'read huffman ',0 11159 000076A1 6D616E20202000 11160 000076A8 0000000000000000 rdtsc_ms_stereo dd 2 dup(0) 11161 000076B0 6D732073746572656F- db 'ms stereo ',0 11161 000076B9 20202020202000 11162 000076C0 0000000000000000 rdtsc_i_stereo dd 2 dup(0) 11163 000076C8 692073746572656F20- db 'i stereo ',0 11163 000076D1 20202020202000 11164 000076D8 0000000000000000 rdtsc_reorder dd 2 dup(0) 11165 000076E0 72656F726465722020- db 'reorder ',0 11165 000076E9 20202020202000 11166 000076F0 0000000000000000 rdtsc_antialias dd 2 dup(0) 11167 000076F8 616E7469616C696173- db 'antialias ',0 11167 00007701 20202020202000 11168 00007708 0000000000000000 rdtsc_imdct dd 2 dup(0) 11169 00007710 696D64637420202020- db 'imdct ',0 11169 00007719 20202020202000 11170 00007720 0000000000000000 rdtsc_imdct36 dd 2 dup(0) 11171 00007728 20696D646374333620- db ' imdct36 ',0 11171 00007731 20202020202000 11172 00007738 0000000000000000 rdtsc_imdct12 dd 2 dup(0) 11173 00007740 20696D646374313220- db ' imdct12 ',0 11173 00007749 20202020202000 11174 00007750 0000000000000000 rdtsc_imdct0 dd 2 dup(0) 11175 00007758 20696D646374302020- db ' imdct0 ',0 11175 00007761 20202020202000 11176 00007768 0000000000000000 rdtsc_synth_dct dd 2 dup(0) 11177 00007770 73796E74682F646374- db 'synth/dct ',0 11177 00007779 20202020202000 11178 00007780 0000000000000000 rdtsc_dct32 dd 2 dup(0) 11179 00007788 2073796E74682E6463- db ' synth.dct32 ',0 11179 00007791 74333220202000 11180 00007798 0000000000000000 rdtsc_synth dd 2 dup(0) 11181 000077A0 2073796E74682E6F75- db ' synth.output ',0 11181 000077A9 74707574202000 11182 000077B0 0000000000000000 rdtsc_total dd 2 dup(0) 11183 000077B8 746F74616C20202020- db 'total ',0 11183 000077C1 20202020202000 11184 000077C8 000020002800300038- mp3_bitrate_tab dw 0,32,40,48,56,64,80,96,112,128,160,192,224,256,320, 0 11184 000077D1 004000500060007000- 11184 000077DA 8000A000C000E00000- 11184 000077E3 0140010000 11185 000077E8 000008001000180020- dw 0, 8,16,24,32,40,48,56,64,80,96,112,128,144,160, 0 11185 000077F1 002800300038004000- 11185 000077FA 500060007000800090- 11185 00007803 00A0000000 11186 00007808 44AC80BB007D mp3_freq_tab dw 44100,48000,32000 11187 0000780E 000504040000 mp3_lsf_sf_expand_init_table db 0, 5, 4, 4, 0, 0 11188 00007814 9001 dw 400 ; 0..399 ; normal case 11189 00007816 000504010C00 db 0, 5, 4, 1, 0Ch, 0 11190 0000781C F401 dw 500 ; 400..499 11191 0000781E 000301011801 db 0, 3, 1, 1, 18h, 1 11192 00007824 0002 dw 512 ; 500..511 11193 00007826 010606012400 db 1, 6, 6, 1, 24h, 0 11194 0000782C 6803 dw 872 ; 512+360 ; 0..359 for 2nd channel of intensity stereo 11195 0000782E 010404013000 db 1, 4, 4, 1, 30h, 0 11196 00007834 E803 dw 1000 ; 512+488 ; 360..487 11197 00007836 010301013C00 db 1, 3, 1, 1, 3Ch, 0 11198 0000783C 0004 dw 1024 ; 512+512 ; 488..511 11199 0000783E 010000000000000000- mp3_synth_win_src dw 1, 0, 0, 0, 0, 0, 1, 0 11199 00007847 00000001000000 11200 0000784E 000000000100000001- dw 0, 0, 1, 0, 1, 0, 1, 0 11200 00007857 00000001000000 11201 0000785E 010001000000010001- dw 1, 1, 0, 1, 1, 1, 1, 2 11201 00007867 00010001000200 11202 0000786E 010002000100020002- dw 1, 2, 1, 2, 2, 3, 2, 3 11202 00007877 00030002000300 11203 0000787E 020004000300030004- dw 2, 4, 3, 3, 4, 4, 4, 5 11203 00007887 00040004000500 11204 0000788E 050005000500060006- dw 5, 5, 5, 6, 6, 6, 6, 7 11204 00007897 00060006000700 11205 0000789E 070006000800070007- dw 7, 6, 8, 7, 7, 8, 7, 7 11205 000078A7 00080007000700 11206 000078AE 080007000700070006- dw 8, 7, 7, 7, 6, 6, 6, 5 11206 000078B7 00060006000500 11207 000078BE 51FEFCFFFDFFFEFFFF- dw 0FE51h,0FFFCh,0FFFDh,0FFFEh,0FFFFh, 0, 1, 3 11207 000078C7 FF000001000300 11208 000078CE 03000600070008000B- dw 3, 6, 7, 8, 0Bh, 0Ch, 0Eh, 11h 11208 000078D7 000C000E001100 11209 000078DE 1300150017001A001C- dw 13h, 15h, 17h, 1Ah, 1Ch, 1Fh, 22h, 24h 11209 000078E7 001F0022002400 11210 000078EE 27002A002C002F0032- dw 27h, 2Ah, 2Ch, 2Fh, 32h, 35h, 36h, 3Ah 11210 000078F7 00350036003A00 11211 000078FE 3C003E004000420044- dw 3Ch, 3Eh, 40h, 42h, 44h, 45h, 47h, 48h 11211 00007907 00450047004800 11212 0000790E 490049004900490049- dw 49h, 49h, 49h, 49h, 49h, 48h, 46h, 45h 11212 00007917 00480046004500 11213 0000791E 430040003D003A0035- dw 43h, 40h, 3Dh, 3Ah, 35h, 31h, 2Bh, 27h 11213 00007927 0031002B002700 11214 0000792E 1F00190012000A0002- dw 1Fh, 19h, 12h, 0Ah, 2,0FFF9h,0FFEFh,0FFE6h 11214 00007937 00F9FFEFFFE6FF 11215 0000793E 3BF030003B00470053- dw 0F03Bh, 30h, 3Bh, 47h, 53h, 5Fh, 6Dh, 79h 11215 00007947 005F006D007900 11216 0000794E 86009500A100B000BD- dw 86h, 95h, 0A1h, 0B0h, 0BDh, 0CBh, 0D9h, 0E6h 11216 00007957 00CB00D900E600 11217 0000795E F30001010D01190125- dw 0F3h, 101h, 10Dh, 119h, 125h, 130h, 13Ah, 144h 11217 00007967 0130013A014401 11218 0000796E 4D0155015B01620166- dw 14Dh, 155h, 15Bh, 162h, 166h, 16Ah, 16Bh, 16Dh 11218 00007977 016A016B016D01 11219 0000797E 6C016A01660160015A- dw 16Ch, 16Ah, 166h, 160h, 15Ah, 150h, 146h, 139h 11219 00007987 01500146013901 11220 0000798E 2B011A010801F300DD- dw 12Bh, 11Ah, 108h, 0F3h, 0DDh, 0C5h, 0A9h, 8Eh 11220 00007997 00C500A9008E00 11221 0000799E 6F004E002B000700E1- dw 6Fh, 4Eh, 2Bh, 7,0FFE1h,0FFB8h,0FF8Fh,0FF62h 11221 000079A7 FFB8FF8FFF62FF 11222 000079AE 35FF06FFD5FEA4FE70- dw 0FF35h,0FF06h,0FED5h,0FEA4h,0FE70h,0FE3Ch,0FE06h,0FDD0h 11222 000079B7 FE3CFE06FED0FD 11223 000079BE 0BCF9F02D702110349- dw 0CF0Bh, 29Fh, 2D7h, 311h, 349h, 382h, 3BBh, 3F4h 11223 000079C7 038203BB03F403 11224 000079CE 2C0464049A04D10405- dw 42Ch, 464h, 49Ah, 4D1h, 505h, 538h, 56Ah, 59Bh 11224 000079D7 0538056A059B05 11225 000079DE C805F505200647066C- dw 5C8h, 5F5h, 620h, 647h, 66Ch, 68Fh, 6AFh, 6CCh 11225 000079E7 068F06AF06CC06 11226 000079EE E506FC060F071F072B- dw 6E5h, 6FCh, 70Fh, 71Fh, 72Bh, 734h, 739h, 739h 11226 000079F7 07340739073907 11227 000079FE 370730072607170704- dw 737h, 730h, 726h, 717h, 704h, 6EDh, 6D3h, 6B4h 11227 00007A07 07ED06D306B406 11228 00007A0E 91066C0640061306E1- dw 691h, 66Ch, 640h, 613h, 5E1h, 5ABh, 573h, 537h 11228 00007A17 05AB0573053705 11229 00007A1E F704B4046F042704DB- dw 4F7h, 4B4h, 46Fh, 427h, 3DBh, 38Fh, 33Eh, 2EDh 11229 00007A27 038F033E03ED02 11230 00007A2E 9A024402ED0195013D- dw 29Ah, 244h, 1EDh, 195h, 13Dh, 0E2h, 88h, 2Eh 11230 00007A37 01E20088002E00 11231 00007A3E 00 db 0 11232 00007A3F 00 db 0 11233 00007A40 000000010002000303- mp3_slen_table dw 0000h, 0100h, 0200h, 0300h, 0003h, 0101h, 0201h, 0301h 11233 00007A49 00010101020103 11234 00007A50 020102020203030103- dw 0102h, 0202h, 0302h, 0103h, 0203h, 0303h, 0204h, 0304h 11234 00007A59 02030304020403 11235 00007A60 060505050909090906- mp3_lsf_nsf_table dd 05050506h, 09090909h, 09090906h 11235 00007A69 090909 11236 00007A6C 0605070309090C0606- dd 03070506h, 060C0909h, 060C0906h 11236 00007A75 090C06 11237 00007A78 0B0A0000121200000F- dd 00000A0Bh, 00001212h, 0000120Fh 11237 00007A81 120000 11238 00007A84 070707000C0C0C0006- dd 00070707h, 000C0C0Ch, 000C0F06h 11238 00007A8D 0F0C00 11239 00007A90 060606030C09090606- dd 03060606h, 0609090Ch, 06090C06h 11239 00007A99 0C0906 11240 00007A9C 080805000F0C090006- dd 00050808h, 00090C0Fh, 00091206h 11240 00007AA5 120900 11241 00007AA8 1101100022021221 huff_tree_list_data db 11h, 1, 10h, 0, 22h, 2, 12h, 21h 11242 00007AB0 2011011000220212 db 20h, 11h, 1, 10h, 0, 22h, 2, 12h 11243 00007AB8 2120101101003323 db 21h, 20h, 10h, 11h, 1, 0, 33h, 23h 11244 00007AC0 3231130330221221 db 32h, 31h, 13h, 3, 30h, 22h, 12h, 21h 11245 00007AC8 0220110110003303 db 2, 20h, 11h, 1, 10h, 0, 33h, 3 11246 00007AD0 2332301331220212 db 23h, 32h, 30h, 13h, 31h, 22h, 2, 12h 11247 00007AD8 2120011110005545 db 21h, 20h, 1, 11h, 10h, 0, 55h, 45h 11248 00007AE0 5453354425521551 db 54h, 53h, 35h, 44h, 25h, 52h, 15h, 51h 11249 00007AE8 0534504333244214 db 5, 34h, 50h, 43h, 33h, 24h, 42h, 14h 11250 00007AF0 4140042332031331 db 41h, 40h, 4, 23h, 32h, 3, 13h, 31h 11251 00007AF8 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 11252 00007B00 1000555445533544 db 10h, 0, 55h, 54h, 45h, 53h, 35h, 44h 11253 00007B08 2552051551344350 db 25h, 52h, 5, 15h, 51h, 34h, 43h, 50h 11254 00007B10 3324421441044023 db 33h, 24h, 42h, 14h, 41h, 4, 40h, 23h 11255 00007B18 3213310330220220 db 32h, 13h, 31h, 3, 30h, 22h, 2, 20h 11256 00007B20 1221110110005545 db 12h, 21h, 11h, 1, 10h, 0, 55h, 45h 11257 00007B28 3553540544255215 db 35h, 53h, 54h, 5, 44h, 25h, 52h, 15h 11258 00007B30 5134435004244233 db 51h, 34h, 43h, 50h, 4, 24h, 42h, 33h 11259 00007B38 4014412332133103 db 40h, 14h, 41h, 23h, 32h, 13h, 31h, 3 11260 00007B40 3022021221201101 db 30h, 22h, 2, 12h, 21h, 20h, 11h, 1 11261 00007B48 1000776776577566 db 10h, 0, 77h, 67h, 76h, 57h, 75h, 66h 11262 00007B50 4774566537734655 db 47h, 74h, 56h, 65h, 37h, 73h, 46h, 55h 11263 00007B58 5463277264077062 db 54h, 63h, 27h, 72h, 64h, 7, 70h, 62h 11264 00007B60 4535065344177136 db 45h, 35h, 6, 53h, 44h, 17h, 71h, 36h 11265 00007B68 2625521551344316 db 26h, 25h, 52h, 15h, 51h, 34h, 43h, 16h 11266 00007B70 6160055024423304 db 61h, 60h, 5, 50h, 24h, 42h, 33h, 4 11267 00007B78 1441402332031331 db 14h, 41h, 40h, 23h, 32h, 3, 13h, 31h 11268 00007B80 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 11269 00007B88 1000776776756647 db 10h, 0, 77h, 67h, 76h, 75h, 66h, 47h 11270 00007B90 7457555665377346 db 74h, 57h, 55h, 56h, 65h, 37h, 73h, 46h 11271 00007B98 4554355327726407 db 45h, 54h, 35h, 53h, 27h, 72h, 64h, 7 11272 00007BA0 7117703663604425 db 71h, 17h, 70h, 36h, 63h, 60h, 44h, 25h 11273 00007BA8 5205156226061661 db 52h, 5, 15h, 62h, 26h, 6, 16h, 61h 11274 00007BB0 5134504333244214 db 51h, 34h, 50h, 43h, 33h, 24h, 42h, 14h 11275 00007BB8 4104402332133103 db 41h, 4, 40h, 23h, 32h, 13h, 31h, 3 11276 00007BC0 3022211202201101 db 30h, 22h, 21h, 12h, 2, 20h, 11h, 1 11277 00007BC8 1000776776577566 db 10h, 0, 77h, 67h, 76h, 57h, 75h, 66h 11278 00007BD0 4774655637735527 db 47h, 74h, 65h, 56h, 37h, 73h, 55h, 27h 11279 00007BD8 7246641771077036 db 72h, 46h, 64h, 17h, 71h, 7, 70h, 36h 11280 00007BE0 6345544406052662 db 63h, 45h, 54h, 44h, 6, 5, 26h, 62h 11281 00007BE8 6116603553255215 db 61h, 16h, 60h, 35h, 53h, 25h, 52h, 15h 11282 00007BF0 5134435004244214 db 51h, 34h, 43h, 50h, 4, 24h, 42h, 14h 11283 00007BF8 3341233240033013 db 33h, 41h, 23h, 32h, 40h, 3, 30h, 13h 11284 00007C00 3122122102200011 db 31h, 22h, 12h, 21h, 2, 20h, 0, 11h 11285 00007C08 0110FEFCFDEDFFEF db 1, 10h,0FEh,0FCh,0FDh,0EDh,0FFh,0EFh 11286 00007C10 DFEECFDEBFFBCEDC db 0DFh,0EEh,0CFh,0DEh,0BFh,0FBh,0CEh,0DCh 11287 00007C18 AFE9ECDDFACDBEEB db 0AFh,0E9h,0ECh,0DDh,0FAh,0CDh,0BEh,0EBh 11288 00007C20 9FF9EABDDB8FF8CC db 9Fh,0F9h,0EAh,0BDh,0DBh, 8Fh,0F8h,0CCh 11289 00007C28 AE9E8E7F7EF7DAAD db 0AEh, 9Eh, 8Eh, 7Fh, 7Eh,0F7h,0DAh,0ADh 11290 00007C30 BCCBF66FE85F9DD9 db 0BCh,0CBh,0F6h, 6Fh,0E8h, 5Fh, 9Dh,0D9h 11291 00007C38 F5E7ACBB4FF4CAE6 db 0F5h,0E7h,0ACh,0BBh, 4Fh,0F4h,0CAh,0E6h 11292 00007C40 F33F8DD82FF26E9C db 0F3h, 3Fh, 8Dh,0D8h, 2Fh,0F2h, 6Eh, 9Ch 11293 00007C48 0FC95EAB7DD74EC8 db 0Fh,0C9h, 5Eh,0ABh, 7Dh,0D7h, 4Eh,0C8h 11294 00007C50 D63EB99BAA1FF1F0 db 0D6h, 3Eh,0B9h, 9Bh,0AAh, 1Fh,0F1h,0F0h 11295 00007C58 BAE5E48C6DE3E22E db 0BAh,0E5h,0E4h, 8Ch, 6Dh,0E3h,0E2h, 2Eh 11296 00007C60 0E1EE1E05DD57CC7 db 0Eh, 1Eh,0E1h,0E0h, 5Dh,0D5h, 7Ch,0C7h 11297 00007C68 4D8BB8D49AA96CC6 db 4Dh, 8Bh,0B8h,0D4h, 9Ah,0A9h, 6Ch,0C6h 11298 00007C70 3DD37B2DD21DB75C db 3Dh,0D3h, 7Bh, 2Dh,0D2h, 1Dh,0B7h, 5Ch 11299 00007C78 C5997AC3A7974BD1 db 0C5h, 99h, 7Ah,0C3h,0A7h, 97h, 4Bh,0D1h 11300 00007C80 0DD08AA84CC46BB6 db 0Dh,0D0h, 8Ah,0A8h, 4Ch,0C4h, 6Bh,0B6h 11301 00007C88 3C2CC25BB5891CC1 db 3Ch, 2Ch,0C2h, 5Bh,0B5h, 89h, 1Ch,0C1h 11302 00007C90 980CC0B46AA6793B db 98h, 0Ch,0C0h,0B4h, 6Ah,0A6h, 79h, 3Bh 11303 00007C98 B3885A2BA569A478 db 0B3h, 88h, 5Ah, 2Bh,0A5h, 69h,0A4h, 78h 11304 00007CA0 87947776B21BB10B db 87h, 94h, 77h, 76h,0B2h, 1Bh,0B1h, 0Bh 11305 00007CA8 B0964A3AA359952A db 0B0h, 96h, 4Ah, 3Ah,0A3h, 59h, 95h, 2Ah 11306 00007CB0 A21AA10A68A08649 db 0A2h, 1Ah,0A1h, 0Ah, 68h,0A0h, 86h, 49h 11307 00007CB8 9339588567299257 db 93h, 39h, 58h, 85h, 67h, 29h, 92h, 57h 11308 00007CC0 7538836647745665 db 75h, 38h, 83h, 66h, 47h, 74h, 56h, 65h 11309 00007CC8 7319910990488472 db 73h, 19h, 91h, 9, 90h, 48h, 84h, 72h 11310 00007CD0 4664288218372717 db 46h, 64h, 28h, 82h, 18h, 37h, 27h, 17h 11311 00007CD8 7155077036634554 db 71h, 55h, 7, 70h, 36h, 63h, 45h, 54h 11312 00007CE0 2662358108801661 db 26h, 62h, 35h, 81h, 8, 80h, 16h, 61h 11313 00007CE8 0660534425520515 db 6, 60h, 53h, 44h, 25h, 52h, 5, 15h 11314 00007CF0 5134435024423314 db 51h, 34h, 43h, 50h, 24h, 42h, 33h, 14h 11315 00007CF8 4104402332133103 db 41h, 4, 40h, 23h, 32h, 13h, 31h, 3 11316 00007D00 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 11317 00007D08 1000FFEFFEDFEEFD db 10h, 0,0FFh,0EFh,0FEh,0DFh,0EEh,0FDh 11318 00007D10 CFFCDEEDBFFBCEEC db 0CFh,0FCh,0DEh,0EDh,0BFh,0FBh,0CEh,0ECh 11319 00007D18 DDAFFABEEBCDDC9F db 0DDh,0AFh,0FAh,0BEh,0EBh,0CDh,0DCh, 9Fh 11320 00007D20 F9EABDDB8FF8CC9E db 0F9h,0EAh,0BDh,0DBh, 8Fh,0F8h,0CCh, 9Eh 11321 00007D28 E97FF7ADDABC6FAE db 0E9h, 7Fh,0F7h,0ADh,0DAh,0BCh, 6Fh,0AEh 11322 00007D30 0FCBF68EE85F9DF5 db 0Fh,0CBh,0F6h, 8Eh,0E8h, 5Fh, 9Dh,0F5h 11323 00007D38 7EE7ACCABBD98D4F db 7Eh,0E7h,0ACh,0CAh,0BBh,0D9h, 8Dh, 4Fh 11324 00007D40 F43FF3D8E62FF26E db 0F4h, 3Fh,0F3h,0D8h,0E6h, 2Fh,0F2h, 6Eh 11325 00007D48 F01FF19CC95EABBA db 0F0h, 1Fh,0F1h, 9Ch,0C9h, 5Eh,0ABh,0BAh 11326 00007D50 E57DD74EE48CC83E db 0E5h, 7Dh,0D7h, 4Eh,0E4h, 8Ch,0C8h, 3Eh 11327 00007D58 6DD6E39BB92EAAE2 db 6Dh,0D6h,0E3h, 9Bh,0B9h, 2Eh,0AAh,0E2h 11328 00007D60 1EE10EE05DD57CC7 db 1Eh,0E1h, 0Eh,0E0h, 5Dh,0D5h, 7Ch,0C7h 11329 00007D68 4D8BD4B89AA96CC6 db 4Dh, 8Bh,0D4h,0B8h, 9Ah,0A9h, 6Ch,0C6h 11330 00007D70 3DD3D22D0D1D7BB7 db 3Dh,0D3h,0D2h, 2Dh, 0Dh, 1Dh, 7Bh,0B7h 11331 00007D78 D15CD0C58AA84CC4 db 0D1h, 5Ch,0D0h,0C5h, 8Ah,0A8h, 4Ch,0C4h 11332 00007D80 6BB6990C3CC37AA7 db 6Bh,0B6h, 99h, 0Ch, 3Ch,0C3h, 7Ah,0A7h 11333 00007D88 A6C00BC22C5BB51C db 0A6h,0C0h, 0Bh,0C2h, 2Ch, 5Bh,0B5h, 1Ch 11334 00007D90 8998C14BB46A3B79 db 89h, 98h,0C1h, 4Bh,0B4h, 6Ah, 3Bh, 79h 11335 00007D98 B397882B5AB2A51B db 0B3h, 97h, 88h, 2Bh, 5Ah,0B2h,0A5h, 1Bh 11336 00007DA0 B1B069964AA47887 db 0B1h,0B0h, 69h, 96h, 4Ah,0A4h, 78h, 87h 11337 00007DA8 3AA359952AA21AA1 db 3Ah,0A3h, 59h, 95h, 2Ah,0A2h, 1Ah,0A1h 11338 00007DB0 0AA0688649943993 db 0Ah,0A0h, 68h, 86h, 49h, 94h, 39h, 93h 11339 00007DB8 7709588529677692 db 77h, 9, 58h, 85h, 29h, 67h, 76h, 92h 11340 00007DC0 9119904884577538 db 91h, 19h, 90h, 48h, 84h, 57h, 75h, 38h 11341 00007DC8 8366472882188174 db 83h, 66h, 47h, 28h, 82h, 18h, 81h, 74h 11342 00007DD0 0880566537734627 db 8, 80h, 56h, 65h, 37h, 73h, 46h, 27h 11343 00007DD8 7264175571077036 db 72h, 64h, 17h, 55h, 71h, 7, 70h, 36h 11344 00007DE0 6345542662160660 db 63h, 45h, 54h, 26h, 62h, 16h, 6, 60h 11345 00007DE8 3561534425521551 db 35h, 61h, 53h, 44h, 25h, 52h, 15h, 51h 11346 00007DF0 0550344324423341 db 5, 50h, 34h, 43h, 24h, 42h, 33h, 41h 11347 00007DF8 1404233240031331 db 14h, 4, 23h, 32h, 40h, 3, 13h, 31h 11348 00007E00 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 11349 00007E08 1000EFFEDFFDCFFC db 10h, 0,0EFh,0FEh,0DFh,0FDh,0CFh,0FCh 11350 00007E10 BFFBAFFA9FF9F88F db 0BFh,0FBh,0AFh,0FAh, 9Fh,0F9h,0F8h, 8Fh 11351 00007E18 7FF76FF6FF5FF54F db 7Fh,0F7h, 6Fh,0F6h,0FFh, 5Fh,0F5h, 4Fh 11352 00007E20 F4F3F03FCEECDDDE db 0F4h,0F3h,0F0h, 3Fh,0CEh,0ECh,0DDh,0DEh 11353 00007E28 E9EAD9EEEDEBBECD db 0E9h,0EAh,0D9h,0EEh,0EDh,0EBh,0BEh,0CDh 11354 00007E30 DCDBAECCADDA7EAC db 0DCh,0DBh,0AEh,0CCh,0ADh,0DAh, 7Eh,0ACh 11355 00007E38 CAC97D5EBDF22F0F db 0CAh,0C9h, 7Dh, 5Eh,0BDh,0F2h, 2Fh, 0Fh 11356 00007E40 1FF19EBCCB8EE89D db 1Fh,0F1h, 9Eh,0BCh,0CBh, 8Eh,0E8h, 9Dh 11357 00007E48 E7BB8DD86EE69CAB db 0E7h,0BBh, 8Dh,0D8h, 6Eh,0E6h, 9Ch,0ABh 11358 00007E50 BAE5D74EE48CC83E db 0BAh,0E5h,0D7h, 4Eh,0E4h, 8Ch,0C8h, 3Eh 11359 00007E58 6DD69BB9AAE1D4B8 db 6Dh,0D6h, 9Bh,0B9h,0AAh,0E1h,0D4h,0B8h 11360 00007E60 A97BB7D0E30EE05D db 0A9h, 7Bh,0B7h,0D0h,0E3h, 0Eh,0E0h, 5Dh 11361 00007E68 D57CC74D8B9A6CC6 db 0D5h, 7Ch,0C7h, 4Dh, 8Bh, 9Ah, 6Ch,0C6h 11362 00007E70 3D5CC50D8AA8994C db 3Dh, 5Ch,0C5h, 0Dh, 8Ah,0A8h, 99h, 4Ch 11363 00007E78 B67A3C5B891CC098 db 0B6h, 7Ah, 3Ch, 5Bh, 89h, 1Ch,0C0h, 98h 11364 00007E80 79E22E1ED32DD2D1 db 79h,0E2h, 2Eh, 1Eh,0D3h, 2Dh,0D2h,0D1h 11365 00007E88 3B97881DC46BC3A7 db 3Bh, 97h, 88h, 1Dh,0C4h, 6Bh,0C3h,0A7h 11366 00007E90 2CC2B5C10C4BB46A db 2Ch,0C2h,0B5h,0C1h, 0Ch, 4Bh,0B4h, 6Ah 11367 00007E98 A6B35AA52BB21BB1 db 0A6h,0B3h, 5Ah,0A5h, 2Bh,0B2h, 1Bh,0B1h 11368 00007EA0 0BB069964AA47887 db 0Bh,0B0h, 69h, 96h, 4Ah,0A4h, 78h, 87h 11369 00007EA8 A33A592A9568A186 db 0A3h, 3Ah, 59h, 2Ah, 95h, 68h,0A1h, 86h 11370 00007EB0 7794495767A21A0A db 77h, 94h, 49h, 57h, 67h,0A2h, 1Ah, 0Ah 11371 00007EB8 A039935885299276 db 0A0h, 39h, 93h, 58h, 85h, 29h, 92h, 76h 11372 00007EC0 0919919048847538 db 9, 19h, 91h, 90h, 48h, 84h, 75h, 38h 11373 00007EC8 8366288247741881 db 83h, 66h, 28h, 82h, 47h, 74h, 18h, 81h 11374 00007ED0 8008563773654627 db 80h, 8, 56h, 37h, 73h, 65h, 46h, 27h 11375 00007ED8 7264550717717036 db 72h, 64h, 55h, 7, 17h, 71h, 70h, 36h 11376 00007EE0 6345542662166106 db 63h, 45h, 54h, 26h, 62h, 16h, 61h, 6 11377 00007EE8 6053354425525115 db 60h, 53h, 35h, 44h, 25h, 52h, 51h, 15h 11378 00007EF0 0534435024423314 db 5, 34h, 43h, 50h, 24h, 42h, 33h, 14h 11379 00007EF8 4104402332133103 db 41h, 4, 40h, 23h, 32h, 13h, 31h, 3 11380 00007F00 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 11381 00007F08 1000EFFEDFFDCFFC db 10h, 0,0EFh,0FEh,0DFh,0FDh,0CFh,0FCh 11382 00007F10 BFFBFAAF9FF9F88F db 0BFh,0FBh,0FAh,0AFh, 9Fh,0F9h,0F8h, 8Fh 11383 00007F18 7FF76FF65FF54FF4 db 7Fh,0F7h, 6Fh,0F6h, 5Fh,0F5h, 4Fh,0F4h 11384 00007F20 3FF32FF2F11FF00F db 3Fh,0F3h, 2Fh,0F2h,0F1h, 1Fh,0F0h, 0Fh 11385 00007F28 EEDEEDCEECDDBEEB db 0EEh,0DEh,0EDh,0CEh,0ECh,0DDh,0BEh,0EBh 11386 00007F30 CDDCAEEABDDBCC9E db 0CDh,0DCh,0AEh,0EAh,0BDh,0DBh,0CCh, 9Eh 11387 00007F38 E9ADDABCCB8EE89D db 0E9h,0ADh,0DAh,0BCh,0CBh, 8Eh,0E8h, 9Dh 11388 00007F40 D97EE7ACFFCABB8D db 0D9h, 7Eh,0E7h,0ACh,0FFh,0CAh,0BBh, 8Dh 11389 00007F48 D80EE00DE66E9CC9 db 0D8h, 0Eh,0E0h, 0Dh,0E6h, 6Eh, 9Ch,0C9h 11390 00007F50 5EBAE5AB7DD7E48C db 5Eh,0BAh,0E5h,0ABh, 7Dh,0D7h,0E4h, 8Ch 11391 00007F58 C84E2E3E6DD6E39B db 0C8h, 4Eh, 2Eh, 3Eh, 6Dh,0D6h,0E3h, 9Bh 11392 00007F60 B9AAE21EE15DD57C db 0B9h,0AAh,0E2h, 1Eh,0E1h, 5Dh,0D5h, 7Ch 11393 00007F68 C74D8BB8D49AA96C db 0C7h, 4Dh, 8Bh,0B8h,0D4h, 9Ah,0A9h, 6Ch 11394 00007F70 C63DD32DD21D7BB7 db 0C6h, 3Dh,0D3h, 2Dh,0D2h, 1Dh, 7Bh,0B7h 11395 00007F78 D15CC58AA8994CC4 db 0D1h, 5Ch,0C5h, 8Ah,0A8h, 99h, 4Ch,0C4h 11396 00007F80 6BB6D00C3CC37AA7 db 6Bh,0B6h,0D0h, 0Ch, 3Ch,0C3h, 7Ah,0A7h 11397 00007F88 2CC25BB51C8998C1 db 2Ch,0C2h, 5Bh,0B5h, 1Ch, 89h, 98h,0C1h 11398 00007F90 4BC00B3BB00A1AB4 db 4Bh,0C0h, 0Bh, 3Bh,0B0h, 0Ah, 1Ah,0B4h 11399 00007F98 6AA67997A00990B3 db 6Ah,0A6h, 79h, 97h,0A0h, 9, 90h,0B3h 11400 00007FA0 882B5AB2A51BB169 db 88h, 2Bh, 5Ah,0B2h,0A5h, 1Bh,0B1h, 69h 11401 00007FA8 96A44A78873AA359 db 96h,0A4h, 4Ah, 78h, 87h, 3Ah,0A3h, 59h 11402 00007FB0 952AA2A168867749 db 95h, 2Ah,0A2h,0A1h, 68h, 86h, 77h, 49h 11403 00007FB8 9439935885296776 db 94h, 39h, 93h, 58h, 85h, 29h, 67h, 76h 11404 00007FC0 9219914884577538 db 92h, 19h, 91h, 48h, 84h, 57h, 75h, 38h 11405 00007FC8 8366288218477481 db 83h, 66h, 28h, 82h, 18h, 47h, 74h, 81h 11406 00007FD0 0880566517077073 db 8, 80h, 56h, 65h, 17h, 7, 70h, 73h 11407 00007FD8 3727724664557136 db 37h, 27h, 72h, 46h, 64h, 55h, 71h, 36h 11408 00007FE0 6345542662166106 db 63h, 45h, 54h, 26h, 62h, 16h, 61h, 6 11409 00007FE8 6035534425521505 db 60h, 35h, 53h, 44h, 25h, 52h, 15h, 5 11410 00007FF0 5051344324423314 db 50h, 51h, 34h, 43h, 24h, 42h, 33h, 14h 11411 00007FF8 4104402332133103 db 41h, 4, 40h, 23h, 32h, 13h, 31h, 3 11412 00008000 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 11413 00008008 10000B0F0D0E0705 db 10h, 0, 0Bh, 0Fh, 0Dh, 0Eh, 7, 5 11414 00008010 0906030A0C020104 db 9, 6, 3, 0Ah, 0Ch, 2, 1, 4 11415 00008018 08000F0E0D0C0B0A db 8, 0, 0Fh, 0Eh, 0Dh, 0Ch, 0Bh, 0Ah 11416 00008020 0908070605040302 db 9, 8, 7, 6, 5, 4, 3, 2 11417 00008028 0100 db 1, 0 11418 0000802A 000000000000 db 6 dup(0) 11419 00008030 0000 mp3_huff_data db 0, 0 11420 00008032 0100 db 1, 0 ; byte[32][2] ; table,linbits 11421 00008034 0200 db 2, 0 11422 00008036 0300 db 3, 0 11423 00008038 0000 db 0, 0 11424 0000803A 0400 db 4, 0 11425 0000803C 0500 db 5, 0 11426 0000803E 0600 db 6, 0 11427 00008040 0700 db 7, 0 11428 00008042 0800 db 8, 0 11429 00008044 0900 db 9, 0 11430 00008046 0A00 db 10, 0 11431 00008048 0B00 db 11, 0 11432 0000804A 0C00 db 12, 0 11433 0000804C 0000 db 0, 0 11434 0000804E 0D00 db 13, 0 11435 00008050 0E01 db 14, 1 11436 00008052 0E02 db 14, 2 11437 00008054 0E03 db 14, 3 11438 00008056 0E04 db 14, 4 11439 00008058 0E06 db 14, 6 11440 0000805A 0E08 db 14, 8 11441 0000805C 0E0A db 14, 10 11442 0000805E 0E0D db 14, 13 11443 00008060 0F04 db 15, 4 11444 00008062 0F05 db 15, 5 11445 00008064 0F06 db 15, 6 11446 00008066 0F07 db 15, 7 11447 00008068 0F08 db 15, 8 11448 0000806A 0F09 db 15, 9 11449 0000806C 0F0B db 15, 11 11450 0000806E 0F0D db 15, 13 11451 00008070 040404040404060608- mp3_band_size_long db 4, 4, 4, 4, 4, 4, 6, 6, 8, 8, 0Ah 11451 00008079 080A 11452 0000807B 0C1014181C222A3236- db 0Ch, 10h, 14h, 18h, 1Ch, 22h, 2Ah, 32h, 36h, 4Ch, 9Eh ; byte[9][22] 11452 00008084 4C9E 11453 00008086 040404040404060606- db 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 0Ah 11453 0000808F 080A 11454 00008091 0C1012161C22282E36- db 0Ch, 10h, 12h, 16h, 1Ch, 22h, 28h, 2Eh, 36h, 36h,0C0h 11454 0000809A 36C0 11455 0000809C 040404040404060608- db 4, 4, 4, 4, 4, 4, 6, 6, 8, 0Ah, 0Ch 11455 000080A5 0A0C 11456 000080A7 1014181E262E384454- db 10h, 14h, 18h, 1Eh, 26h, 2Eh, 38h, 44h, 54h, 66h, 1Ah 11456 000080B0 661A 11457 000080B2 060606060606080A0C- db 6, 6, 6, 6, 6, 6, 8, 0Ah, 0Ch, 0Eh, 10h 11457 000080BB 0E10 11458 000080BD 14181C20262E343C44- db 14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h 11458 000080C6 3A36 11459 000080C8 060606060606080A0C- db 6, 6, 6, 6, 6, 6, 8, 0Ah, 0Ch, 0Eh, 10h 11459 000080D1 0E10 11460 000080D3 12161A20262E344046- db 12h, 16h, 1Ah, 20h, 26h, 2Eh, 34h, 40h, 46h, 4Ch, 24h 11460 000080DC 4C24 11461 000080DE 060606060606080A0C- db 6, 6, 6, 6, 6, 6, 8, 0Ah, 0Ch, 0Eh, 10h 11461 000080E7 0E10 11462 000080E9 14181C20262E343C44- db 14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h 11462 000080F2 3A36 11463 000080F4 060606060606080A0C- db 6, 6, 6, 6, 6, 6, 8, 0Ah, 0Ch, 0Eh, 10h 11463 000080FD 0E10 11464 000080FF 14181C20262E343C44- db 14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h 11464 00008108 3A36 11465 0000810A 060606060606080A0C- db 6, 6, 6, 6, 6, 6, 8, 0Ah, 0Ch, 0Eh, 10h 11465 00008113 0E10 11466 00008115 14181C20262E343C44- db 14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h 11466 0000811E 3A36 11467 00008120 0C0C0C0C0C0C101418- db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 10h, 14h, 18h, 1Ch, 20h 11467 00008129 1C20 11468 0000812B 283038404C5A020202- db 28h, 30h, 38h, 40h, 4Ch, 5Ah, 2, 2, 2, 2, 2 11468 00008134 0202 11469 00008136 000000000000000000- db 10 dup(0) ; data align 11469 0000813F 00 11470 00008140 0404040406080A0C0E- mp3_band_size_short db 4, 4, 4, 4, 6, 8, 0Ah, 0Ch, 0Eh, 12h, 16h, 1Eh, 38h 11470 00008149 12161E38 11471 0000814D 0404040406060A0C0E- db 4, 4, 4, 4, 6, 6, 0Ah, 0Ch, 0Eh, 10h, 14h, 1Ah, 42h ; byte[9][16] ? ; byte [9][13] 11471 00008156 10141A42 11472 0000815A 0404040406080C1014- db 4, 4, 4, 4, 6, 8, 0Ch, 10h, 14h, 1Ah, 22h, 2Ah, 0Ch 11472 00008163 1A222A0C 11473 00008167 0404040606080A0E12- db 4, 4, 4, 6, 6, 8, 0Ah, 0Eh, 12h, 1Ah, 20h, 2Ah, 12h 11473 00008170 1A202A12 11474 00008174 04040406080A0C0E12- db 4, 4, 4, 6, 8, 0Ah, 0Ch, 0Eh, 12h, 18h, 20h, 2Ch, 0Ch 11474 0000817D 18202C0C 11475 00008181 04040406080A0C0E12- db 4, 4, 4, 6, 8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h 11475 0000818A 181E2812 11476 0000818E 04040406080A0C0E12- db 4, 4, 4, 6, 8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h 11476 00008197 181E2812 11477 0000819B 04040406080A0C0E12- db 4, 4, 4, 6, 8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h 11477 000081A4 181E2812 11478 000081A8 0808080C1014181C24- db 8, 8, 8, 0Ch, 10h, 14h, 18h, 1Ch, 24h, 2, 2, 2, 1Ah 11478 000081B1 0202021A 11479 000081B5 000000000000000000- db 11 dup(0) ; data align 11479 000081BE 0000 11480 000081C0 000000000000000000- mp3_pretab db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 11480 000081C9 0000 11481 000081CB 000000000000000000- db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 11481 000081D4 0000 11482 000081D6 000000000000000000- db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 11482 000081DF 0000 11483 000081E1 010101010202030303- db 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0 11483 000081EA 0200 11484 000081EC 00000000 db 4 dup(0) ; data align 11485 000081F0 4B1D4200028FDB0016- mp3_mdct_win_src dd 00421D4Bh, 00DB8F02h, 019C7F16h, 029ADCC0h, 04000001h, 06246711h 11485 000081F9 7F9C01C0DC9A020100- 11485 00008202 000411672406 11486 00008208 4506EE090CD6A71238- dd 09EE0645h, 12A7D60Ch, 3DF40538h,0BC63D32Fh,0E7B0025Bh,0F069D222h ; these are sine values divided by cosine values... 11486 00008211 05F43D2FD363BC5B02- 11486 0000821A B0E722D269F0 11487 00008220 567133F467D857F6A8- dd 0F4337156h,0F657D867h,0F7BCFBA8h,0F8BB5952h,0F97C4965h,0FA15BB1Ch 11487 00008229 FBBCF75259BBF86549- 11487 00008232 7CF91CBB15FA 11488 00008238 936D94FA8E5100FB70- dd 0FA946D93h,0FB00518Eh,0FB5EA270h,0FBB2FDEAh,0FC000000h,0FC479F38h 11488 00008241 A25EFBEAFDB2FB0000- 11488 0000824A 00FC389F47FC 11489 00008250 09668BFC9898CCFC0B- dd 0FC8B6609h,0FCCC9898h,0FD0C4F0Bh,0FD4B895Ch,0FD8B3FCFh,0FDCC725Eh 11489 00008259 4F0CFD5C894BFDCF3F- 11489 00008262 8BFD5E72CCFD 11490 00008268 2F3910FE67D857FE7D- dd 0FE10392Fh,0FE57D867h,0FEA4DA7Dh,0FEF935F7h,0FF5786D9h,0FFC36AD5h 11490 00008271 DAA4FEF735F9FED986- 11490 0000827A 57FFD56AC3FF 11491 00008280 4B1D4200028FDB0016- dd 00421D4Bh, 00DB8F02h, 019C7F16h, 029ADCC0h, 04000001h, 06246711h 11491 00008289 7F9C01C0DC9A020100- 11491 00008292 000411672406 11492 00008298 4506EE090CD6A71238- dd 09EE0645h, 12A7D60Ch, 3DF40538h,0BC63D32Fh,0E7B0025Bh,0F069D222h 11492 000082A1 05F43D2FD363BC5B02- 11492 000082AA B0E722D269F0 11493 000082B0 567133F467D857F6A8- dd 0F4337156h,0F657D867h,0F7BCFBA8h,0F8BB5952h,0F97C4965h,0FA15BB1Ch 11493 000082B9 FBBCF75259BBF86549- 11493 000082C2 7CF91CBB15FA 11494 000082C8 291B93FAB946F5FABB- dd 0FA931B29h,0FAF546B9h,0FB41DABBh,0FB7D8F97h,0FBABA162h,0FBCE4E62h 11494 000082D1 DA41FB978F7DFB62A1- 11494 000082DA ABFB624ECEFB 11495 000082E0 671CF0FBAFC845FC0D- dd 0FBF01C67h,0FC45C8AFh,0FCD2D50Dh,0FD9008D0h,0FE74C032h,0FF771894h 11495 000082E9 D5D2FCD00890FD32C0- 11495 000082F2 74FE941877FF 11496 000082F8 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 11496 00008301 000000000000000000- 11496 0000830A 000000000000 11497 00008310 028FDB00010000040C- dd 00DB8F02h, 04000001h, 12A7D60Ch,0E7B0025Bh,0F657D867h,0F97C4965h 11497 00008319 D6A7125B02B0E767D8- 11497 00008322 57F665497CF9 11498 00008328 8E5100FB000000FC98- dd 0FB00518Eh,0FC000000h,0FCCC9898h,0FD8B3FCFh,0FE57D867h,0FF5786D9h 11498 00008331 98CCFCCF3F8BFD67D8- 11498 0000833A 57FED98657FF 11499 00008340 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 11499 00008349 000000000000000000- 11499 00008352 000000000000 11500 00008358 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 11500 00008361 000000000000000000- 11500 0000836A 000000000000 11501 00008370 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 11501 00008379 000000000000000000- 11501 00008382 000000000000 11502 00008388 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 11502 00008391 000000000000000000- 11502 0000839A 000000000000 11503 000083A0 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 11503 000083A9 000000000000000000- 11503 000083B2 000000000000 11504 000083B8 B58869025237BA0B4F- dd 026988B5h, 0BBA3752h, 37D3294Fh,0B73F655Bh,0E3B0025Bh,0EDAD5D13h 11504 000083C1 29D3375B653FB75B02- 11504 000083CA B0E3135DADED 11505 000083D0 A2ADB2F2B8288CF5D6- dd 0F2B2ADA2h,0F58C28B8h,0F75657D6h,0F88E2C57h,0F96DE565h,0FA1449CDh 11505 000083D9 5756F7572C8EF865E5- 11505 000083E2 6DF9CD4914FA 11506 000083E8 936D94FA8E5100FB70- dd 0FA946D93h,0FB00518Eh,0FB5EA270h,0FBB2FDEAh,0FC000000h,0FC479F38h 11506 000083F1 A25EFBEAFDB2FB0000- 11506 000083FA 00FC389F47FC 11507 00008400 09668BFC9898CCFC0B- dd 0FC8B6609h,0FCCC9898h,0FD0C4F0Bh,0FD4B895Ch,0FD8B3FCFh,0FDCC725Eh 11507 00008409 4F0CFD5C894BFDCF3F- 11507 00008412 8BFD5E72CCFD 11508 00008418 2F3910FE67D857FE7D- dd 0FE10392Fh,0FE57D867h,0FEA4DA7Dh,0FEF935F7h,0FF5786D9h,0FFC36AD5h 11508 00008421 DAA4FEF735F9FED986- 11508 0000842A 57FFD56AC3FF 11509 00008430 0000000000000040 mp3_is_table_normal dd 00000000h, 40000000h 11510 00008438 BB58860D46A77932 dd 0D8658BBh, 3279A746h 11511 00008440 D1F56C17300A9328 dd 176CF5D1h, 28930A30h 11512 00008448 0000002000000020 dd 20000000h, 20000000h 11513 00008450 300A9328D1F56C17 dd 28930A30h, 176CF5D1h 11514 00008458 46A77932BB58860D dd 3279A746h, 0D8658BBh 11515 00008460 0000004000000000 dd 40000000h, 00000000h 11516 00008468 00000080 mp3_is_table_lsf_src dd 80000000h 11517 ; sqrt based constants... 11518 ; 40000000h*2 ; 2.0 (2^1.00) aka 2 11519 0000846C 667EA26B dd 6BA27E66h ; 35D13F33h*2 ; 1.681 (2^0.75) 11520 00008470 9A79825A dd 5A82799Ah ; 2D413CCDh*2 ; 1.414 (2^0.50) aka sqrt(2) 11521 00008474 2AF81B4C dd 4C1BF82Ah ; 260DFC15h*2 ; 1.189 (2^0.25) aka sqrt(sqrt(2)) 11522 00008478 00000080 mp3_pow2_quarters dd 80000000h 11523 ; 40000000h*2 ; 2^(0/4) 11524 0000847C 52F03798 dd 9837F052h ; 4C1BF829h*2 ; 2^(1/4) 11525 00008480 34F304B5 dd 0B504F334h ; 5A82799Ah*2 ; 2^(2/4) 11526 00008484 CCFC44D7 dd 0D744FCCCh ; 6BA27E66h*2 ; 2^(3/4) 11527 00008488 00000000 mp3_initialized dd 0 11528 0000848C 12000000 mp3_huff_num_entries dd 12h 11529 00008490 00 wrchr_buf db 0 11530 00008491 90 align 4 11531 ; LPCSTR mp3_src_fname 11532 00008494 00000000 mp3_src_fname dd 0 11533 ; LPCSTR mp3_dst_fname 11534 00008498 00000000 mp3_dst_fname dd 0 11535 ; LPCSTR mp3_pcm_fname 11536 0000849C 00000000 mp3_pcm_fname dd 0 11537 000084A0 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 11537 000084A9 415645666D74201000- 11537 000084B2 000001000200000000- 11537 000084BB 000000000004001000- 11537 000084C4 6461746100000000 11538 ; 21/10/2024 11539 000084CC 00000000 zero dd 0 11540 000084D0 00 num_enqueued_frames db 0 11541 000084D1 617564696F20647572- txt_decode_timing1 db 'audio duration ',0 11541 000084DA 6174696F6E2000 11542 000084E1 206D696C6C69736563- txt_decode_timing2 db ' milliseconds, decoded in ',0 11542 000084EA 6F6E64732C20646563- 11542 000084F3 6F64656420696E2000 11543 000084FC 206D696C6C69736563- txt_decode_timing3 db ' milliseconds',0Dh,0Ah,0 11543 00008505 6F6E64730D0A00 11544 0000850C 20636C6F636B206379- txt_clks_per_second db ' clock cycles per second:',0Dh,0Ah,0 11544 00008515 636C65732070657220- 11544 0000851E 7365636F6E643A0D0A- 11544 00008527 00 11545 00008528 0303020106060505 huff_tree_list_numbits db 3, 3, 2, 1, 6, 6, 5, 5 11546 00008530 0503030301060605 db 5, 3, 3, 3, 1, 6, 6, 5 11547 00008538 0505030202020808 db 5, 5, 3, 2, 2, 2, 8, 8 11548 00008540 0706070707070606 db 7, 6, 7, 7, 7, 7, 6, 6 11549 00008548 0606030303010707 db 6, 6, 3, 3, 3, 1, 7, 7 11550 00008550 0606060505050504 db 6, 6, 6, 5, 5, 5, 5, 4 11551 00008558 0404030203030A0A db 4, 4, 3, 2, 3, 3, 0Ah, 0Ah 11552 00008560 0A0A090909090808 db 0Ah, 0Ah, 9, 9, 9, 9, 8, 8 11553 00008568 0909080909080807 db 9, 9, 8, 9, 9, 8, 8, 7 11554 00008570 0707080808080707 db 7, 7, 8, 8, 8, 8, 7, 7 11555 00008578 0707060506060403 db 7, 7, 6, 5, 6, 6, 4, 3 11556 00008580 03010B0B0A090A0A db 3, 1, 0Bh, 0Bh, 0Ah, 9, 0Ah, 0Ah 11557 00008588 0909090808090909 db 9, 9, 9, 8, 8, 9, 9, 9 11558 00008590 0908080807080808 db 9, 8, 8, 8, 7, 8, 8, 8 11559 00008598 0808080808060606 db 8, 8, 8, 8, 8, 6, 6, 6 11560 000085A0 0404020303020909 db 4, 4, 2, 3, 3, 2, 9, 9 11561 000085A8 0808090908080808 db 8, 8, 9, 9, 8, 8, 8, 8 11562 000085B0 0707070808070707 db 7, 7, 7, 8, 8, 7, 7, 7 11563 000085B8 0706060606050506 db 7, 6, 6, 6, 6, 5, 5, 6 11564 000085C0 0605050404040303 db 6, 5, 5, 4, 4, 4, 3, 3 11565 000085C8 03030B0B0B0B0B0B db 3, 3, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11566 000085D0 0A0A0A0A0A0A0A0B db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Bh 11567 000085D8 0B0A09090A0A0909 db 0Bh, 0Ah, 9, 9, 0Ah, 0Ah, 9, 9 11568 000085E0 0A0A090A0A080809 db 0Ah, 0Ah, 9, 0Ah, 0Ah, 8, 8, 9 11569 000085E8 090A0A09090A0A08 db 9, 0Ah, 0Ah, 9, 9, 0Ah, 0Ah, 8 11570 000085F0 0808090909090909 db 8, 8, 9, 9, 9, 9, 9, 9 11571 000085F8 0808080808080707 db 8, 8, 8, 8, 8, 8, 7, 7 11572 00008600 0707060606060403 db 7, 7, 6, 6, 6, 6, 4, 3 11573 00008608 03010A0A0A0A0A0A db 3, 1, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11574 00008610 0A0B0B0A0A090909 db 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 9, 9, 9 11575 00008618 0A0A0A0A08080909 db 0Ah, 0Ah, 0Ah, 0Ah, 8, 8, 9, 9 11576 00008620 0708080808080909 db 7, 8, 8, 8, 8, 8, 9, 9 11577 00008628 0909080708080707 db 9, 9, 8, 7, 8, 8, 7, 7 11578 00008630 0808080909080808 db 8, 8, 8, 9, 9, 8, 8, 8 11579 00008638 0808080707060607 db 8, 8, 8, 7, 7, 6, 6, 7 11580 00008640 0706050405050303 db 7, 6, 5, 4, 5, 5, 3, 3 11581 00008648 03020A0A09090909 db 3, 2, 0Ah, 0Ah, 9, 9, 9, 9 11582 00008650 0909090808090908 db 9, 9, 9, 8, 8, 9, 9, 8 11583 00008658 0808080808090908 db 8, 8, 8, 8, 8, 9, 9, 8 11584 00008660 0808080809090707 db 8, 8, 8, 8, 9, 9, 7, 7 11585 00008668 0708080808080807 db 7, 8, 8, 8, 8, 8, 8, 7 11586 00008670 0707070808070707 db 7, 7, 7, 8, 8, 7, 7, 7 11587 00008678 0606060607070605 db 6, 6, 6, 6, 7, 7, 6, 5 11588 00008680 0505040405050403 db 5, 5, 4, 4, 5, 5, 4, 3 11589 00008688 0303131312111010 db 3, 3, 13h, 13h, 12h, 11h, 10h, 10h 11590 00008690 1010101010101010 db 10h, 10h, 10h, 10h, 10h, 10h, 10h, 10h 11591 00008698 11110F0F10100F0F db 11h, 11h, 0Fh, 0Fh, 10h, 10h, 0Fh, 0Fh 11592 000086A0 0F0F0F0F0F0F0F0F db 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh 11593 000086A8 10100F10100E0E0F db 10h, 10h, 0Fh, 10h, 10h, 0Eh, 0Eh, 0Fh 11594 000086B0 0F0F0F0E0E0E0E0E db 0Fh, 0Fh, 0Fh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh 11595 000086B8 0E0E0E0E0E0E0F0F db 0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Fh, 0Fh 11596 000086C0 0E0D0E0E0D0D0E0E db 0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh, 0Eh 11597 000086C8 0D0E0E0D0E0E0D0E db 0Dh, 0Eh, 0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Eh 11598 000086D0 0E0D0D0E0E0C0C0C db 0Eh, 0Dh, 0Dh, 0Eh, 0Eh, 0Ch, 0Ch, 0Ch 11599 000086D8 0D0D0D0D0D0D0C0D db 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh 11600 000086E0 0D0C0C0D0D0D0D0D db 0Dh, 0Ch, 0Ch, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh 11601 000086E8 0D0D0D0D0D0D0D0C db 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch 11602 000086F0 0C0D0D0C0C0C0C0D db 0Ch, 0Dh, 0Dh, 0Ch, 0Ch, 0Ch, 0Ch, 0Dh 11603 000086F8 0D0D0D0C0D0D0C0B db 0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Ch, 0Bh 11604 00008700 0C0C0C0C0C0C0C0C db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 11605 00008708 0B0B0B0B0C0C0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh 11606 00008710 0C0C0B0C0C0C0C0B db 0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Bh 11607 00008718 0B0C0C0B0C0C0B0C db 0Bh, 0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ch 11608 00008720 0C0B0C0C0A0A0A0B db 0Ch, 0Bh, 0Ch, 0Ch, 0Ah, 0Ah, 0Ah, 0Bh 11609 00008728 0B0B0B0B0B0B0B0A db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah 11610 00008730 0A0A0A0B0B0A0B0B db 0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh 11611 00008738 0A0B0B0B0B0A0A0B db 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh 11612 00008740 0B0A0A0B0B0B0B0B db 0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11613 00008748 0B09090A0A0A0A0A db 0Bh, 9, 9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11614 00008750 0B0B0909090A0A09 db 0Bh, 0Bh, 9, 9, 9, 0Ah, 0Ah, 9 11615 00008758 090A0A0A0A0A0A0A db 9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11616 00008760 0A0A0A0809090909 db 0Ah, 0Ah, 0Ah, 8, 9, 9, 9, 9 11617 00008768 09090A0A09090908 db 9, 9, 0Ah, 0Ah, 9, 9, 9, 8 11618 00008770 0809090909090908 db 8, 9, 9, 9, 9, 9, 9, 8 11619 00008778 0708080808070707 db 7, 8, 8, 8, 8, 7, 7, 7 11620 00008780 0707060606060404 db 7, 7, 6, 6, 6, 6, 4, 4 11621 00008788 03010D0D0D0D0C0D db 3, 1, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh 11622 00008790 0D0D0D0D0D0C0D0D db 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh 11623 00008798 0C0C0C0C0C0C0C0C db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 11624 000087A0 0C0C0C0C0C0C0C0C db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 11625 000087A8 0C0C0C0C0C0C0C0D db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Dh 11626 000087B0 0D0B0B0C0C0C0C0B db 0Dh, 0Bh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Bh 11627 000087B8 0B0B0B0B0B0C0C0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ch, 0Ch, 0Bh 11628 000087C0 0B0B0B0B0B0B0B0C db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ch 11629 000087C8 0C0B0B0B0B0B0B0B db 0Ch, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11630 000087D0 0B0B0B0B0B0B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11631 000087D8 0B0B0B0B0B0B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11632 000087E0 0B0B0C0C0B0B0B0B db 0Bh, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh, 0Bh, 0Bh 11633 000087E8 0B0B0A0B0B0B0B0B db 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11634 000087F0 0B0A0A0B0B0A0A0A db 0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah 11635 000087F8 0A0B0B0A0A0A0A0A db 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11636 00008800 0A0A0B0B0A0A0A0A db 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah 11637 00008808 0A0B0B090A0A0A0A db 0Ah, 0Bh, 0Bh, 9, 0Ah, 0Ah, 0Ah, 0Ah 11638 00008810 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11639 00008818 090A0A0A0A090A0A db 9, 0Ah, 0Ah, 0Ah, 0Ah, 9, 0Ah, 0Ah 11640 00008820 090A0A0A0A0A0A0A db 9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11641 00008828 0A09090909090909 db 0Ah, 9, 9, 9, 9, 9, 9, 9 11642 00008830 0A0A090909090909 db 0Ah, 0Ah, 9, 9, 9, 9, 9, 9 11643 00008838 0A0A090909090909 db 0Ah, 0Ah, 9, 9, 9, 9, 9, 9 11644 00008840 0809090909090909 db 8, 9, 9, 9, 9, 9, 9, 9 11645 00008848 0909090808080809 db 9, 9, 9, 8, 8, 8, 8, 9 11646 00008850 0909090909090908 db 9, 9, 9, 9, 9, 9, 9, 8 11647 00008858 0808080808090908 db 8, 8, 8, 8, 8, 9, 9, 8 11648 00008860 0808080808080909 db 8, 8, 8, 8, 8, 8, 9, 9 11649 00008868 0807080807070707 db 8, 7, 8, 8, 7, 7, 7, 7 11650 00008870 0808070707070706 db 8, 8, 7, 7, 7, 7, 7, 6 11651 00008878 0707060607070606 db 7, 7, 6, 6, 7, 7, 6, 6 11652 00008880 0605050505050304 db 6, 5, 5, 5, 5, 5, 3, 4 11653 00008888 04030B0B0B0B0B0B db 4, 3, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11654 00008890 0B0B0A0B0B0B0B0A db 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah 11655 00008898 0A0A0A0A080A0A09 db 0Ah, 0Ah, 0Ah, 0Ah, 8, 0Ah, 0Ah, 9 11656 000088A0 0909090A1011110F db 9, 9, 9, 0Ah, 10h, 11h, 11h, 0Fh 11657 000088A8 0F10100E0F0F0E0E db 0Fh, 10h, 10h, 0Eh, 0Fh, 0Fh, 0Eh, 0Eh 11658 000088B0 0F0F0E0E0F0F0F0F db 0Fh, 0Fh, 0Eh, 0Eh, 0Fh, 0Fh, 0Fh, 0Fh 11659 000088B8 0E0F0F0E0D080909 db 0Eh, 0Fh, 0Fh, 0Eh, 0Dh, 8, 9, 9 11660 000088C0 08080D0E0E0E0E0E db 8, 8, 0Dh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh 11661 000088C8 0E0E0E0E0E0D0D0E db 0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh 11662 000088D0 0E0E0E0D0E0E0D0D db 0Eh, 0Eh, 0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Dh 11663 000088D8 0D0E0E0E0E0D0D0E db 0Dh, 0Eh, 0Eh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh 11664 000088E0 0E0D0E0E0C0D0D0D db 0Eh, 0Dh, 0Eh, 0Eh, 0Ch, 0Dh, 0Dh, 0Dh 11665 000088E8 0D0D0D0D0D0D0D0D db 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh 11666 000088F0 0D0D0D0C0D0D0D0D db 0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Dh, 0Dh 11667 000088F8 0D0D0C0D0D0C0C0D db 0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Ch, 0Ch, 0Dh 11668 00008900 0D0B0C0C0C0C0C0C db 0Dh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 11669 00008908 0C0D0D0B0C0C0C0C db 0Ch, 0Dh, 0Dh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch 11670 00008910 0B0C0C0C0C0C0C0C db 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 11671 00008918 0C0B0C0C0B0B0B0B db 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh, 0Bh, 0Bh 11672 00008920 0C0C0C0C0C0C0C0C db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 11673 00008928 0B0C0C0B0C0C0B0C db 0Bh, 0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ch 11674 00008930 0C0B0C0C0B0A0A0B db 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ah, 0Ah, 0Bh 11675 00008938 0B0B0B0B0B0A0A0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh 11676 00008940 0B0A0A0B0B0B0B0B db 0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11677 00008948 0B0B0B0A0B0B0A0A db 0Bh, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah 11678 00008950 0A0B0B0A0A0B0B0A db 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah 11679 00008958 0A0B0B0A09090A0A db 0Ah, 0Bh, 0Bh, 0Ah, 9, 9, 0Ah, 0Ah 11680 00008960 0A0A0A0A0909090A db 0Ah, 0Ah, 0Ah, 0Ah, 9, 9, 9, 0Ah 11681 00008968 0A090A0A09090809 db 0Ah, 9, 0Ah, 0Ah, 9, 9, 8, 9 11682 00008970 0909090909090908 db 9, 9, 9, 9, 9, 9, 9, 8 11683 00008978 0809090808070708 db 8, 9, 9, 8, 8, 7, 7, 8 11684 00008980 0807060606060404 db 8, 7, 6, 6, 6, 6, 4, 4 11685 00008988 0301080808080808 db 3, 1, 8, 8, 8, 8, 8, 8 11686 00008990 0808070808070708 db 8, 8, 7, 8, 8, 7, 7, 8 11687 00008998 0807070707070707 db 8, 7, 7, 7, 7, 7, 7, 7 11688 000089A0 0707070707080809 db 7, 7, 7, 7, 7, 8, 8, 9 11689 000089A8 0B0B0B0B0B0B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11690 000089B0 0B0B0B0B0B0B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11691 000089B8 0B0B0B0B0B0B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 11692 000089C0 0B0B0B0B040B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 4, 0Bh, 0Bh, 0Bh 11693 000089C8 0B0C0C0B0A0B0B0A db 0Bh, 0Ch, 0Ch, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah 11694 000089D0 0A0A0A0B0B0A0A0A db 0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah 11695 000089D8 0A0B0B0A0A0A0A0A db 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11696 000089E0 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11697 000089E8 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11698 000089F0 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11699 000089F8 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11700 00008A00 0A0A0B0B0A0A0A0A db 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah 11701 00008A08 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 11702 00008A10 0A0B0B0A0B0B0A09 db 0Ah, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah, 9 11703 00008A18 0A0A0A0A0B0B0A09 db 0Ah, 0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 9 11704 00008A20 090A0A090A0A0A0A db 9, 0Ah, 0Ah, 9, 0Ah, 0Ah, 0Ah, 0Ah 11705 00008A28 09090A0A09090909 db 9, 9, 0Ah, 0Ah, 9, 9, 9, 9 11706 00008A30 0909090909090909 db 9, 9, 9, 9, 9, 9, 9, 9 11707 00008A38 0909090909090909 db 9, 9, 9, 9, 9, 9, 9, 9 11708 00008A40 0909090909090909 db 9, 9, 9, 9, 9, 9, 9, 9 11709 00008A48 0909090909090909 db 9, 9, 9, 9, 9, 9, 9, 9 11710 00008A50 0A0A0909090A0A08 db 0Ah, 0Ah, 9, 9, 9, 0Ah, 0Ah, 8 11711 00008A58 0909080808080808 db 9, 9, 8, 8, 8, 8, 8, 8 11712 00008A60 0808080808080809 db 8, 8, 8, 8, 8, 8, 8, 9 11713 00008A68 0908080808080809 db 9, 8, 8, 8, 8, 8, 8, 9 11714 00008A70 0907080807070707 db 9, 7, 8, 8, 7, 7, 7, 7 11715 00008A78 0708080707060607 db 7, 8, 8, 7, 7, 6, 6, 7 11716 00008A80 0706050506060404 db 7, 6, 5, 5, 6, 6, 4, 4 11717 00008A88 0404060606060606 db 4, 4, 6, 6, 6, 6, 6, 6 11718 00008A90 0505050505040404 db 5, 5, 5, 5, 5, 4, 4, 4 11719 00008A98 0401040404040404 db 4, 1, 4, 4, 4, 4, 4, 4 11720 00008AA0 0404040404040404 db 4, 4, 4, 4, 4, 4, 4, 4 11721 00008AA8 0404 db 4, 4 11722 00008AAA 03 _@@const_3 db 3 11723 00008AAB 000000 db 3 dup(0) 11724 00008AAE [E8470000] mp3_synth_filter_procs dd synth_16bit_shift_0_slow ; SYNTH_MACRO 0,0,0 11725 00008AB2 [D44A0000] dd synth_16bit_shift_1_slow ; SYNTH_MACRO 0,1,0 11726 00008AB6 [C64D0000] dd synth_16bit_shift_2_slow ; SYNTH_MACRO 0,2,0 11727 00008ABA [B8500000] dd synth_8bit_shift_0_slow ; SYNTH_MACRO 1,0,0 11728 00008ABE [99530000] dd synth_8bit_shift_1_slow ; SYNTH_MACRO 1,1,0 11729 00008AC2 [80560000] dd synth_8bit_shift_2_slow ; SYNTH_MACRO 1,2,0 11730 00008AC6 [A9350000] dd synth_16bit_shift_0_fast ; SYNTH_MACRO 0,0,1 11731 00008ACA [B5380000] dd synth_16bit_shift_1_fast ; SYNTH_MACRO 0,1,1 11732 00008ACE [C73B0000] dd synth_16bit_shift_2_fast ; SYNTH_MACRO 0,2,1 11733 00008AD2 [D93E0000] dd synth_8bit_shift_0_fast ; SYNTH_MACRO 1,0,1 11734 00008AD6 [DA410000] dd synth_8bit_shift_1_fast ; SYNTH_MACRO 1,1,1 11735 00008ADA [E1440000] dd synth_8bit_shift_2_fast ; SYNTH_MACRO 1,2,1 11736 ;txt_hello db 'nocash mp3 decoder v1.4, 2024 martin korth, press ctrl+c to quit,' 11737 ; db ' BDS now',0Dh,0Ah,0 11738 ; Erdogan Tan - 17/10/2024 11739 00008ADE 0D0A txt_hello db 13,10 11740 ;db 'NOCASH MP3 PLAYER v1.4 for Windows ',0 11741 ; 09/01/2025 11742 00008AE0 4E4F43415348204D50- db 'NOCASH MP3 PLAYER v1.0 for TRDOS386 ',0 11742 00008AE9 3320504C4159455220- 11742 00008AF2 76312E3020666F7220- 11742 00008AFB 5452444F5333383620- 11742 00008B04 00 11743 11744 00008B05 66696C653A2000 txt_file db 'file: ',0 11745 00008B0C 66696C652073697A65- txt_file_size db 'file size: ',0 11745 00008B15 3A2000 11746 00008B18 2C206964332073697A- txt_id3_size db ', id3 size: ',0 11746 00008B21 653A2000 11747 00008B25 2C207461672073697A- txt_tag_size db ', tag size: ',0 11747 00008B2E 653A2000 11748 00008B32 696E7075743A2000 txt_input db 'input: ',0 11749 00008B3A 6F75747075743A2000 txt_output db 'output: ',0 11750 00008B43 20687A2C2000 txt_hz db ' hz, ',0 11751 00008B49 206368616E6E656C73- txt_channels db ' channels, ',0 11751 00008B52 2C2000 11752 00008B55 2062697400 txt_bit db ' bit',0 11753 00008B5A 206B6269742F7300 txt_kbit_s db ' kbit/s',0 11754 00008B62 63616E6E6F74206F70- txt_not_found db 'cannot open source file',0Dh,0Ah,0 11754 00008B6B 656E20736F75726365- 11754 00008B74 2066696C650D0A00 11755 00008B7C 75736167653A206D70- txt_help db 'usage: mp3play input.mp3 [output.wav] [verify.pcm] [/test]', 0Dh,0Ah 11755 00008B85 33706C617920696E70- 11755 00008B8E 75742E6D7033205B6F- 11755 00008B97 75747075742E776176- 11755 00008BA0 5D205B766572696679- 11755 00008BA9 2E70636D5D205B2F74- 11755 00008BB2 6573745D0D0A 11756 00008BB8 202020202020202020- db ' [/mono] [/8bit] [/fast] [/half|/quarter]',0Dh,0Ah,0 11756 00008BC1 202020202020202020- 11756 00008BCA 202020202020205B2F- 11756 00008BD3 6D6F6E6F5D205B2F38- 11756 00008BDC 6269745D205B2F6661- 11756 00008BE5 73745D205B2F68616C- 11756 00008BEE 667C2F717561727465- 11756 00008BF7 725D0D0A00 11757 00008BFC 766572696679206D61- _@@txt_verify1 db 'verify max difference = ',0 11757 00008C05 782064696666657265- 11757 00008C0E 6E6365203D2000 11758 00008C15 206174206D70333A00 _@@txt_verify1_at_mp3 db ' at mp3:',0 11759 00008C1E 2C2061766572616765- _@@txt_verify2 db ', average difference = ',0 11759 00008C27 20646966666572656E- 11759 00008C30 6365203D2000 11760 11761 ; Erdogan Tan - 17/10/2024 11762 ;db 'NOCASH MP3 PLAYER v1.4 for Windows ',0 11763 00008C36 287072657373204354- txt_ctrlc db '(press CTRL+C to quit)', 13,10,0 11763 00008C3F 524C2B4320746F2071- 11763 00008C48 756974290D0A00 11764 txt_ctrlc_size equ $ - txt_ctrlc 11765 00008C4F 0D0A txt_about db 13,10 11766 ;db '----------------------------------',13,10 11767 00008C51 2D2D2D2D2D2D2D2D2D- db '-----------------------------------',13,10 11767 00008C5A 2D2D2D2D2D2D2D2D2D- 11767 00008C63 2D2D2D2D2D2D2D2D2D- 11767 00008C6C 2D2D2D2D2D2D2D2D0D- 11767 00008C75 0A 11768 00008C76 4572646F67616E2054- db 'Erdogan Tan - 15/01/2025 (Assembler: NASM)', 13,10 11768 00008C7F 616E202D2031352F30- 11768 00008C88 312F32303235202841- 11768 00008C91 7373656D626C65723A- 11768 00008C9A 204E41534D290D0A 11769 00008CA2 4F726967696E616C20- db 'Original code: MP3PLAYER.EXE v1.4 (20/09/2024)', 13,10 11769 00008CAB 636F64653A204D5033- 11769 00008CB4 504C415945522E4558- 11769 00008CBD 452076312E34202832- 11769 00008CC6 302F30392F32303234- 11769 00008CCF 290D0A 11770 00008CD2 202020202020202020- db ' by Martin Korth (TASM source code)' 11770 00008CDB 202020202020627920- 11770 00008CE4 4D617274696E204B6F- 11770 00008CED 72746820285441534D- 11770 00008CF6 20736F757263652063- 11770 00008CFF 6F646529 11771 00008D03 0D0A0D0A00 db 13,10,13,10,0 11772 00008D08 76312E342E30 db 'v1.4.0' 11773 ; 10/01/2025 11774 00008D0E 00 half_buffer db 0 11775 11776 ; =========================================================================== 11777 ; Uninitialized DATA (BSS) 11778 ; =========================================================================== 11779 11780 00008D0F 90 align 4 11781 11782 bss_start: 11783 11784 ; 10/01/2025 11785 ABSOLUTE bss_start 11786 11787 ; 12/01/2025 11788 ;;;; 11789 ; AC97 specific 11790 00008D10 ???????? bus_dev_fn resd 1 11791 00008D14 ???????? dev_vendor resd 1 11792 00008D18 ???? NAMBAR resw 1 11793 00008D1A ???? NABMBAR resw 1 11794 ; SB16 specific 11795 00008D1C ???????? audio_io_base resd 1 11796 ac97_int_ln_reg: 11797 00008D20 ?? audio_intr resb 1 11798 ;;;; 11799 11800 00008D21 ?????? alignb 4 11801 11802 ;;; 11803 ; 20/10/2024 (TRDOS 386 specific parameters) 11804 00008D24 ?? audio_hardware resb 1 11805 00008D25 ?? vra resb 1 11806 00008D26 ???? max_frequency resw 1 11807 00008D28 ?? srb resb 1 11808 00008D29 ?? volume_level resb 1 11809 00008D2A ?? blocks resb 1 11810 00008D2B ?? resb 1 11811 00008D2C ???????? buffer_size resd 1 11812 ;;; 11813 11814 ; 15/01/2025 (mp3play2.s) 11815 ;;;; 11816 ; 13/01/2025 (Interpolation parameters) 11817 00008D30 ???????? conversion resd 1 ; pointer to convers(t)ion 11818 ; or interpolation proc address 11819 00008D34 ???????? loadsize resd 1 ; decoding buffer size 11820 ;interpolation resb 1 ; interpolation status 11821 00008D38 ?? convert resb 1 ; mono to stereo or 8bit to 16bit 11822 ; conversion flag ; 15/01/2025 11823 00008D39 ?? counter resb 1 ; 15/01/2025 11824 00008D3A ???? resw 1 11825 ;;;; 11826 11827 11828 mp3_context_start: 11829 00008D3C main_data_pool_start resb 4096 11830 00009D3C ???????? main_data_pool_wr_ptr resd 1 11831 00009D40 ???????? mp3_src_data_location resd 1 11832 00009D44 ???????? mp3_src_frame_size resd 1 11833 00009D48 ???????? mp3_src_frame_end resd 1 11834 00009D4C ???????? mp3_hdr_32bit_header resd 1 11835 00009D50 ???????? mp3_hdr_flag_crc resd 1 11836 00009D54 ???????? mp3_hdr_flag_mpeg25 resd 1 11837 00009D58 ???????? mp3_hdr_flag_padding resd 1 11838 00009D5C ???????? mp3_sample_rate resd 1 11839 00009D60 ???????? mp3_hdr_sample_rate_index resd 1 11840 00009D64 ???????? mp3_bit_rate resd 1 11841 00009D68 ???????? mp3_src_num_channels resd 1 11842 00009D6C ???????? mp3_output_num_channels resd 1 11843 00009D70 ???????? mp3_output_sample_rate resd 1 11844 00009D74 ???????? mp3_bytes_per_sample resd 1 11845 00009D78 ???????? mp3_curr_syn_index resd 1 11846 00009D7C ???????? mp3_curr_syn_dst resd 1 11847 00009D80 ???????? mp3_nb_frames resd 1 11848 00009D84 ???????? mp3_hdr_mode_val resd 1 11849 00009D88 ???????? mp3_hdr_mode_ext resd 1 11850 00009D8C ???????? mp3_hdr_flag_lsf resd 1 11851 00009D90 ???????? mp3_synth_filter_proc resd 1 11852 11853 00009D94 mp3_synth_buf resd 2048 11854 0000BD94 ???????????????? mp3_synth_index resd 2 11855 0000BD9C mp3_sb_samples resd 2304 11856 ; MP3_MAX_CHANNELS*36*SBLIMIT 11857 0000E19C mp3_mdct_buf resd 1152 11858 ; MP3_MAX_CHANNELS*SBLIMIT*18 11859 0000F39C ???????? mp3_free_format_frame_size resd 1 11860 11861 0000F3A0 ?? mp3_curr_vfrac_bits resb 1 11862 11863 0000F3A1 ?????? alignb 4 11864 11865 0000F3A4 ???????? mp3_xing_id resd 1 11866 0000F3A8 ???????? mp3_xing_flags resd 1 11867 0000F3AC ???????? mp3_xing_frames resd 1 11868 0000F3B0 ???????? mp3_xing_filesize resd 1 11869 0000F3B4 mp3_xing_toc resb 100 11870 0000F418 ???????? mp3_xing_vbr_scale resd 1 11871 0000F41C ???????? mp3_file_size resd 1 11872 0000F420 ???????? mp3_id3_size resd 1 11873 0000F424 ???????? mp3_tag_size resd 1 11874 11875 0000F428 ???????? mp3_num_frames_decoded resd 1 11876 0000F42C ???????? mp3_total_output_size resd 1 11877 0000F430 ???????? mp3_samples_dst resd 1 11878 ; DWORD mp3_samples_output_size 11879 0000F434 ???????? mp3_samples_output_size resd 1 11880 0000F438 ???????? mp3_samples_dst_step resd 1 11881 11882 0000F43C ???????? mp3_curr_channel resd 1 11883 0000F440 ???????? mp3_curr_granule resd 1 11884 0000F444 ???????? mp3_curr_frame resd 1 11885 11886 0000F448 ???????? mp3_bitstream_start resd 1 11887 0000F44C ???????? mp3_src_remain resd 1 11888 0000F450 ???????? mp3_extra_bytes resd 1 11889 0000F454 ???????? mp3_main_data_begin resd 1 11890 0000F458 ???????? mp3_num_compress_bits resd 1 11891 11892 0000F45C ???????? mp3_nb_granules resd 1 11893 11894 0000F460 mp3_granules resb 9856 11895 00011AE0 mp3_exponents resw 576 11896 00011F60 huff_tree_buf resb 0B800h 11897 0001D760 mp3_band_index_long resw 288 11898 0001D9A0 mp3_table_4_3_exp resb 32828 11899 11900 000259DC mp3_table_4_3_value resd 32828 11901 00045ACC mp3_exp_table resd 512 11902 000462CC mp3_expval_table resd 8192 11903 0004E2CC mp3_mdct_win resd 288 11904 0004E74C mp3_is_table_lsf resd 512 11905 0004EF4C mp3_synth_win resd 1024 11906 0004FF4C mp3_lsf_sf_expand_exploded_table resb 8192 11907 mp3_context_end: 11908 00051F4C ???????? _@@region_address0 resd 1 11909 00051F50 ???????? _@@region_address1 resd 1 11910 00051F54 ???????? _@@saved_sp resd 1 11911 00051F58 ???????? mp3_main_data_siz resd 1 11912 00051F5C ???????? _@@scfsi resd 1 11913 00051F60 _@@gains resd 3 11914 00051F6C ???????? _@@rle_point resd 1 11915 00051F70 ???????? _@@III resd 1 11916 00051F74 ???????? _@@JJJ resd 1 11917 00051F78 ???????? _@@linbits resd 1 11918 00051F7C ???????? _@@vlc_table resd 1 11919 00051F80 ???????? _@@coarse_end resd 1 11920 11921 00051F84 ???????? _@rle_point resd 1 11922 00051F88 ???????? _@@rle_ptr resd 1 11923 00051F8C ???????? _@@rle_val resd 1 11924 00051F90 ???????? _@@rle_val_x_40h resd 1 11925 00051F94 ???????? _@@max_bands resb 4 11926 00051F98 ???????? _@@max_blocks resd 1 11927 00051F9C ???????? _@@max_pos resd 1 11928 00051FA0 _@@sfb_array resb 40 11929 00051FC8 ???????? _@@is_tab resd 1 11930 00051FCC ???????? _@@n_long_sfb resd 1 11931 00051FD0 ???????? _@@n_short_sfb resd 1 11932 00051FD4 ???????? _@@n_sfb resd 1 11933 00051FD8 _@@tmp resb 2304 11934 000528D8 ???????? _@@s0 resd 1 11935 000528DC ???????? _@@s2 resd 1 11936 000528E0 ???????? _@@s3 resd 1 11937 11938 000528E4 _@@@tmp resd 18 ; resb 72 11939 0005292C ???????? _@@tmp0 resd 1 11940 00052930 ???????? _@@tmp1 resd 1 11941 00052934 ???????? _@@tmp2 resd 1 11942 00052938 ???????? _@@tmp3 resd 1 11943 0005293C ???????? _@@tmp4 resd 1 11944 00052940 ???????? _@@tmp5 resd 1 11945 00052944 ???????? mp3_out2_a0 resd 1 11946 00052948 ???????? mp3_out2_a1 resd 1 11947 0005294C ???????? mp3_out2_a2 resd 1 11948 00052950 ???????? mp3_out2_b0 resd 1 11949 00052954 ???????? mp3_out2_b1 resd 1 11950 00052958 ???????? mp3_out2_b2 resd 1 11951 0005295C ???????? resd 1 11952 00052960 ???????? resd 1 11953 00052964 ???????? _@@@JJJ resd 1 11954 00052968 ???????? _@@www resd 1 11955 0005296C ???????? _@@mdct_long_end resd 1 11956 00052970 ???????? _@@sblimit resd 1 11957 00052974 ???????? _@@switch_point resd 1 11958 00052978 mp3_huff_tmp_bits resb 256 11959 00052A78 mp3_huff_tmp_codes resb 512 11960 00052C78 ???????? _@@table_nb_bits resd 1 11961 00052C7C ???????? _@@nb_codes resd 1 11962 00052C80 ???????? _@@prefix_numbits resd 1 11963 00052C84 ???????? _@@prefix_pattern resd 1 11964 00052C88 ???????? _@@curr_table_size resd 1 11965 00052C8C ???????? _@@curr_table_mask resd 1 11966 00052C90 ???????? _@@curr_table_index resd 1 11967 00052C94 ???????? _@@granule_addr resd 1 11968 ; HANDLE hFile 11969 00052C98 ???????? hFile resd 1 11970 ; HANDLE hMap 11971 ;hMap resd 1 11972 00052C9C ???????? stream_start resd 1 11973 00052CA0 ???????? stream_pos resd 1 11974 00052CA4 ???????? bytes_left resd 1 11975 11976 ; 20/10/2024 11977 ; DWORD diskresult 11978 ;diskresult resd 1 11979 ; HANDLE std_out 11980 ;std_out resd 1 11981 ;cmdline_buf resb 1024 11982 00052CA8 cmdline_buf resb 128 11983 ; HANDLE mp3_wav_handle 11984 00052D28 ???????? mp3_wav_handle resd 1 11985 ; HANDLE mp3_pcm_handleü 11986 00052D2C ???????? mp3_pcm_handle resd 1 11987 00052D30 ???????? _@@max_diff resd 1 11988 00052D34 ???????????????? _@@avg_diff resd 2 11989 00052D3C ???????? pcm_filepos resd 1 11990 00052D40 ???????? _@@mono_convert resd 1 11991 00052D44 ???????? _@@pcm_steps resw 2 11992 00052D48 ???????? _@@worst_pcm_filepos resd 1 11993 00052D4C ???????? _@@worst_mp3_filepos resd 1 11994 00052D50 ???????? resd 1 11995 ;alignb 4 11996 11997 ; 10/01/2025 11998 00052D54 alignb 4096 11999 12000 ; 12/01/2025 12001 ; 09/01/2025 12002 ;sample_buffer resb 36864 12003 ;;sample_buffer resb 8*MP3_MAX_OUTPUT_SIZE 12004 ;;sample_buffer_size equ $-sample_buffer 12005 12006 ; 15/01/2025 12007 00053000 decoding_buffer resb 8192 ; 2*4096 (max. 4608) 12008 00055000 sample_buffer resb 36864 ; 8*4608 12009 12010 ;alignb 4096 12011 12012 end_of_bss: 12013 12014 ; =========================================================================== 12015 ; end