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: 01/02/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 ; 13/01/2025 32 ; Interpolated sample rate playing method for non-VRA AC97 codecs. 33 34 ; =========================================================================== 35 ; TRDOS 386 Operating System Specific Procedures - Erdogan Tan - 20/10/2024 36 ; =========================================================================== 37 38 ; 20/10/2024 39 ; 20/08/2024 ; TRDOS 386 v2.0.9 40 ; TRDOS 386 system calls 41 _ver equ 0 42 _exit equ 1 43 _fork equ 2 44 _read equ 3 45 _write equ 4 46 _open equ 5 47 _close equ 6 48 _wait equ 7 49 _creat equ 8 50 _rename equ 9 51 _delete equ 10 52 _exec equ 11 53 _chdir equ 12 54 _time equ 13 55 _mkdir equ 14 56 _chmod equ 15 57 _rmdir equ 16 58 _break equ 17 59 _drive equ 18 60 _seek equ 19 61 _tell equ 20 62 _mem equ 21 63 _prompt equ 22 64 _path equ 23 65 _env equ 24 66 _stime equ 25 67 _quit equ 26 68 _intr equ 27 69 _dir equ 28 70 _emt equ 29 71 _ldvrt equ 30 72 _video equ 31 73 _audio equ 32 74 _timer equ 33 75 _sleep equ 34 76 _msg equ 35 77 _geterr equ 36 78 _fpsave equ 37 79 _pri equ 38 80 _rele equ 39 81 _fff equ 40 82 _fnf equ 41 83 _alloc equ 42 84 _dalloc equ 43 85 _calbac equ 44 86 _dma equ 45 87 _stdio equ 46 ; TRDOS 386 v2.0.9 88 89 ; --------------------------------------------------------------------------- 90 ; 'sys' macro in FASM format 91 ; --------------------------------------------------------------------------- 92 93 %if 0 94 macro sys op1,op2,op3,op4 95 { 96 if op4 eq 97 else 98 mov edx, op4 99 end if 100 if op3 eq 101 else 102 mov ecx, op3 103 end if 104 if op2 eq 105 else 106 mov ebx, op2 107 end if 108 mov eax, op1 109 int 40h 110 } 111 %endif 112 113 ; --------------------------------------------------------------------------- 114 ; 'sys' macro in NASM format 115 ; --------------------------------------------------------------------------- 116 ; 09/01/2025 117 118 %macro sys 1-4 119 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 120 ; 03/09/2015 121 ; 13/04/2015 122 ; Retro UNIX 386 v1 system call. 123 %if %0 >= 2 124 mov ebx, %2 125 %if %0 >= 3 126 mov ecx, %3 127 %if %0 = 4 128 mov edx, %4 129 %endif 130 %endif 131 %endif 132 mov eax, %1 133 ;int 30h 134 int 40h ; TRDOS 386 (TRDOS v2.0) 135 %endmacro 136 137 ; =========================================================================== 138 ; CODE 139 ; =========================================================================== 140 141 [BITS 32] ; 32-bit intructions 142 143 [ORG 0] 144 145 ; =========================================================================== 146 147 ; 20/10/2024 148 start: 149 ; 21/10/2024 150 00000000 E86F6B0000 call set_break ; set and clear bss section 151 ; also set stream_start position 152 153 ;mov edx, txt_hello ; "nocash mp3 decoder v1.4, 2024" ... 154 ;call wrstr_edx 155 00000005 BB[0AA10000] mov ebx, txt_hello 156 0000000A E80C6C0000 call print_msg 157 158 0000000F E83B6A0000 call get_commandline 159 00000014 0F82C3010000 jc .exit 160 161 ;;; 162 ; 11/01/2025 163 0000001A E8F26C0000 call detect_enable_audio_device 164 0000001F 0F82B8010000 jc .exit 165 ;;; 166 167 00000025 31ED xor ebp, ebp 168 00000027 E860640000 call mp3_init 169 0000002C E85A6B0000 call open_and_mmap_the_file 170 00000031 0F82A6010000 jc .exit 171 00000037 E8A6010000 call detect_cpu_386_and_up 172 0000003C E8EC6B0000 call GetTickCount 173 00000041 F7D8 neg eax 174 00000043 A3[288C0000] mov [millisecond_count], eax 175 00000048 E8D9640000 call mp3_check_1st_frame 176 0000004D 0F828A010000 jc .exit 177 00000053 803D[148C0000]00 cmp byte [option_test], 0 178 0000005A 740A jz short .no_benchmark_test 179 0000005C E88F660000 call mp3_plain_test_without_output 180 00000061 E9C3000000 jmp .decode_done 181 182 .no_benchmark_test: 183 00000066 833D[C89A0000]00 cmp dword [mp3_pcm_fname], 0 184 0000006D 740A jz short .no_pcm_verify 185 0000006F E8A4670000 call mp3_verify_pcm_file 186 00000074 E964010000 jmp .exit 187 188 .no_pcm_verify: 189 00000079 833D[C49A0000]00 cmp dword [mp3_dst_fname], 0 190 00000080 740A jz short .no_wav_output 191 00000082 E89E660000 call mp3_cast_to_wav_file 192 00000087 E99D000000 jmp .decode_done 193 194 .no_wav_output: 195 ; 15/01/2025 196 ; 10/01/2025 (Video memory access for buffer change indicator) 197 ; DIRECT CGA (TEXT MODE) MEMORY ACCESS 198 ; bl = 0, bh = 4 199 ; Direct access/map to CGA (Text) memory (0B8000h) 200 sys _video, 0400h 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 0000008C BB00040000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00000091 B81F000000 <1> mov eax, %1 133 <1> 134 00000096 CD40 <1> int 40h 201 00000098 3D00800B00 cmp eax, 0B8000h 202 0000009D 0F853A010000 jne .exit ; 15/01/2025 203 ;;; 204 205 ; 13/01/2025 (interpolation procs for non-VRA AC97 codecs) 206 ;;;; -------------------------- 207 ;mov byte [interpolation], 0 208 000000A3 B002 mov al, 2 209 000000A5 3805[50A30000] cmp [audio_hardware], al ; 2 210 000000AB 7551 jne short .direct 211 .chk_frq: 212 000000AD 813D[9CB30000]80BB- cmp dword [mp3_output_sample_rate], 48000 ; 48 kHZ 212 000000B5 0000 213 000000B7 721A jb short .chk_vra 214 000000B9 803D[98B30000]02 cmp byte [mp3_output_num_channels], 2 215 000000C0 7208 jb short .convert ; mono (8bit or 16bit) 216 000000C2 3805[A0B30000] cmp [mp3_bytes_per_sample], al ; 2 217 000000C8 7334 jnb short .direct ; 16bit, stereo 218 .convert: 219 ; 8bit m/s or 16bit mono 220 000000CA C605[64A30000]01 mov byte [interpolation], 1 ; convert (to 16 bit stereo) 221 000000D1 EB4A jmp short .indirect 222 .chk_vra: 223 000000D3 A2[64A30000] mov [interpolation], al ; 2 = interpolation 224 000000D8 803D[51A30000]01 cmp byte [vra], 1 225 000000DF 723C jb short .indirect 226 000000E1 FE0D[64A30000] dec byte [interpolation] ; 1 = convert (to 16 bit stereo) 227 000000E7 803D[98B30000]02 cmp byte [mp3_output_num_channels], 2 228 000000EE 722D jb short .indirect ; 8 bit 229 000000F0 3805[A0B30000] cmp [mp3_bytes_per_sample], al ; 2 230 000000F6 7225 jb short .indirect ; mono 231 232 ; 14/01/2025 233 000000F8 FE0D[64A30000] dec byte [interpolation] ; 0 234 .direct: 235 ;;;; -------------------------- 236 237 ;;; 238 ; 20/10/2024 239 ;call detect_enable_audio_device 240 ;jc .exit 241 000000FE E8FB6C0000 call audio_system_init 242 ;jc .exit 243 00000103 7207 jc short .exit@ ; 15/01/2025 244 ;;; 245 246 00000105 E8B26D0000 call mp3_cast_to_speaker 247 248 ; 13/01/2025 249 ;;;; -------------------------- 250 0000010A EB1D jmp short .decode_done 251 252 ; 15/01/2025 253 .exit@: 254 ; Disable audio device 255 sys _audio, 0C00h 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 0000010C BB000C0000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00000111 B820000000 <1> mov eax, %1 133 <1> 134 00000116 CD40 <1> int 40h 256 00000118 E9346B0000 jmp ExitProcess 257 258 .indirect: 259 0000011D E87E6F0000 call audio_system_init_x 260 00000122 72E8 jc short .exit@ ; 15/01/2025 261 00000124 E878720000 call mp3_cast_to_speaker_x 262 ;;;; -------------------------- 263 .decode_done: 264 00000129 E8FF6A0000 call GetTickCount 265 0000012E 0105[288C0000] add [millisecond_count], eax 266 00000134 BA[FD9A0000] mov edx, txt_decode_timing1 ; "audio duration " 267 00000139 E8F2640000 call wrstr_edx 268 0000013E A1[580A0100] mov eax, [mp3_total_output_size] 269 00000143 BAE8030000 mov edx, 1000 270 00000148 F7E2 mul edx 271 0000014A F735[9CB30000] div dword [mp3_output_sample_rate] 272 00000150 31D2 xor edx, edx 273 00000152 F735[98B30000] div dword [mp3_output_num_channels] 274 00000158 31D2 xor edx, edx 275 0000015A F735[A0B30000] div dword [mp3_bytes_per_sample] 276 00000160 A3[248C0000] mov [mp3_output_milliseconds], eax 277 00000165 E8FC640000 call wr_decimal_eax_with_thousands_seperator 278 0000016A BA[0D9B0000] mov edx, txt_decode_timing2 ; " milliseconds, decoded in " 279 0000016F E8BC640000 call wrstr_edx 280 00000174 A1[288C0000] mov eax, [millisecond_count] 281 00000179 E8E8640000 call wr_decimal_eax_with_thousands_seperator 282 0000017E BA[289B0000] mov edx, txt_decode_timing3 ; " milliseconds\r\n" 283 00000183 E8A8640000 call wrstr_edx 284 00000188 BA[389B0000] mov edx, txt_clks_per_second ; " clock cycles per second:\r\n" 285 0000018D E89E640000 call wrstr_edx 286 00000192 BE[2C8C0000] mov esi, ttt ; rdtsc_list_start 287 288 .timelog_lop: 289 00000197 E8B6640000 call wrspc 290 0000019C 8D5608 lea edx, [esi+8] 291 0000019F E88C640000 call wrstr_edx 292 000001A4 E8A9640000 call wrspc 293 000001A9 8B06 mov eax, [esi] 294 000001AB 8B5E04 mov ebx, [esi+4] 295 000001AE BAE8030000 mov edx, 1000 296 000001B3 0FAFDA imul ebx, edx 297 000001B6 F7E2 mul edx 298 000001B8 01DA add edx, ebx 299 000001BA 3B15[248C0000] cmp edx, [mp3_output_milliseconds] 300 000001C0 730B jnb short .timelog_oops 301 000001C2 F735[248C0000] div dword [mp3_output_milliseconds] 302 000001C8 E899640000 call wr_decimal_eax_with_thousands_seperator 303 304 .timelog_oops: 305 000001CD E86F640000 call wrcrlf 306 000001D2 83C618 add esi, 24 307 000001D5 81FE[F48D0000] cmp esi, mp3_bitrate_tab 308 000001DB 75BA jnz short .timelog_lop 309 310 .exit: 311 ;push 0 ; uExitCode 312 ;call ExitProcess 313 000001DD E96F6A0000 jmp ExitProcess 314 315 316 ; =============== S U B R O U T I N E ======================================= 317 318 319 detect_cpu_386_and_up: 320 000001E2 C605[218C0000]03 mov byte [detected_cpu], 3 321 000001E9 89E3 mov ebx, esp 322 000001EB 83E4FC and esp, ~3 ; not 3 323 000001EE 9C pushf 324 000001EF 58 pop eax 325 000001F0 89C1 mov ecx, eax 326 000001F2 3500000400 xor eax, 40000h 327 000001F7 50 push eax 328 000001F8 9D popf 329 000001F9 9C pushf 330 000001FA 58 pop eax 331 000001FB 31C8 xor eax, ecx 332 000001FD 51 push ecx 333 000001FE 9D popf 334 000001FF 89DC mov esp, ebx 335 00000201 A900000400 test eax, 40000h 336 00000206 7431 jz short .no_id 337 00000208 FE05[218C0000] inc byte [detected_cpu] 338 0000020E E827000000 call @@get_id_flag 339 00000213 7507 jnz short .yep_id 340 00000215 E820000000 call @@get_id_flag 341 0000021A 741D jz short .no_id 342 343 .yep_id: 344 0000021C B801000000 mov eax, 1 345 00000221 0FA2 cpuid 346 00000223 80E40F and ah, 0Fh 347 00000226 8825[218C0000] mov [detected_cpu], ah 348 0000022C C605[208C0000]01 mov byte [cpuid_exists], 1 349 00000233 8915[1C8C0000] mov [cpuid_flags], edx 350 351 .no_id: 352 00000239 C3 retn 353 354 ; =============== S U B R O U T I N E ======================================= 355 356 357 @@get_id_flag: 358 0000023A 9C pushf 359 0000023B 58 pop eax 360 0000023C 0D00002000 or eax, 200000h 361 00000241 50 push eax 362 00000242 9D popf 363 00000243 9C pushf 364 00000244 58 pop eax 365 00000245 A900002000 test eax, 200000h 366 0000024A C3 retn 367 368 ; =============== S U B R O U T I N E ======================================= 369 370 bswap_eax: 371 0000024B 86E0 xchg al, ah 372 0000024D C1C810 ror eax, 10h 373 00000250 86E0 xchg al, ah 374 00000252 C3 retn 375 376 ; =============== S U B R O U T I N E ======================================= 377 378 mp3_recollect_bits: 379 00000253 F7C601000000 test esi, 1 380 00000259 7510 jnz short .odd 381 0000025B 668B2E mov bp, [esi] 382 0000025E 83C602 add esi, 2 383 00000261 66C1CD08 ror bp, 8 384 00000265 C1E510 shl ebp, 16 385 00000268 B500 mov ch, 0 386 0000026A C3 retn 387 388 .odd: 389 0000026B 0FB62E movzx ebp, byte [esi] 390 0000026E 46 inc esi 391 0000026F C1E510 shl ebp, 16 392 00000272 668B2E mov bp, [esi] 393 00000275 83C602 add esi, 2 394 00000278 66C1CD08 ror bp, 8 395 0000027C C1E508 shl ebp, 8 396 0000027F B508 mov ch, 8 397 00000281 C3 retn 398 399 ; =============== S U B R O U T I N E ======================================= 400 401 402 mp3_get_bits: 403 00000282 89E8 mov eax, ebp 404 00000284 D3E5 shl ebp, cl 405 00000286 D3C0 rol eax, cl 406 00000288 31E8 xor eax, ebp 407 0000028A 28CD sub ch, cl 408 0000028C 7801 js short mp3_collect_more 409 0000028E C3 retn 410 411 mp3_collect_more: 412 0000028F 88E9 mov cl, ch 413 00000291 80C510 add ch, 10h 414 00000294 D3C5 rol ebp, cl 415 00000296 668B2E mov bp, [esi] 416 00000299 83C602 add esi, 2 417 0000029C 66C1CD08 ror bp, 8 418 000002A0 D3CD ror ebp, cl 419 000002A2 C3 retn 420 421 ; =============== S U B R O U T I N E ======================================= 422 423 424 mp3_uncollect_bits: 425 000002A3 83EE02 sub esi, 2 426 000002A6 C0ED03 shr ch, 3 427 000002A9 0FB6CD movzx ecx, ch 428 000002AC 29CE sub esi, ecx 429 000002AE C3 retn 430 431 ; =============== S U B R O U T I N E ======================================= 432 433 434 mp3_search_get_header: 435 000002AF F605[1C8C0000]10 test byte [cpuid_flags], 10h 436 000002B6 740E jz short .no_rdtsc_supported 437 000002B8 0F31 rdtsc 438 000002BA 2905[2C8C0000] sub [ttt], eax 439 000002C0 1915[308C0000] sbb [ttt+4], edx 440 441 .no_rdtsc_supported: 442 000002C6 C705[7C0A0100]0000- mov dword [mp3_extra_bytes], 0 442 000002CE 0000 443 444 .retry_header: 445 000002D0 833D[780A0100]04 cmp dword [mp3_src_remain], 4 446 000002D7 0F82B5010000 jb .fail_no_header 447 000002DD 803EFF cmp byte [esi], 0FFh 448 000002E0 7516 jnz short .bad_header 449 000002E2 8A4601 mov al, [esi+1] 450 000002E5 24E6 and al, 0E6h 451 000002E7 3CE2 cmp al, 0E2h 452 000002E9 750D jnz short .bad_header 453 000002EB 8A4602 mov al, [esi+2] 454 000002EE 3CF0 cmp al, 0F0h 455 000002F0 7306 jnb short .bad_header 456 000002F2 240C and al, 0Ch 457 000002F4 3C0C cmp al, 0Ch 458 000002F6 7519 jnz short .good_header 459 460 .bad_header: 461 000002F8 46 inc esi 462 000002F9 FF0D[780A0100] dec dword [mp3_src_remain] 463 000002FF FF05[7C0A0100] inc dword [mp3_extra_bytes] 464 00000305 C705[68B30000]- mov dword [main_data_pool_wr_ptr], main_data_pool_start 464 0000030B [68A30000] 465 0000030F EBBF jmp short .retry_header 466 467 .good_header: 468 00000311 8B06 mov eax, [esi] 469 00000313 E833FFFFFF call bswap_eax 470 00000318 A3[78B30000] mov [mp3_hdr_32bit_header], eax 471 0000031D C705[B8B30000]0000- mov dword [mp3_hdr_flag_lsf], 0 471 00000325 0000 472 00000327 C705[80B30000]0000- mov dword [mp3_hdr_flag_mpeg25], 0 472 0000032F 0000 473 00000331 C705[880A0100]0200- mov dword [mp3_nb_granules], 2 473 00000339 0000 474 0000033B A900000800 test eax, 80000h 475 00000340 7525 jnz short .lsf_this 476 00000342 C705[B8B30000]0100- mov dword [mp3_hdr_flag_lsf], 1 476 0000034A 0000 477 0000034C C705[880A0100]0100- mov dword [mp3_nb_granules], 1 477 00000354 0000 478 00000356 A900001000 test eax, 100000h 479 0000035B 750A jnz short .lsf_this 480 0000035D C705[80B30000]0100- mov dword [mp3_hdr_flag_mpeg25], 1 480 00000365 0000 481 482 .lsf_this: 483 00000367 C1E80A shr eax, 10 484 0000036A 83E003 and eax, 3 485 0000036D 8B0D[B8B30000] mov ecx, [mp3_hdr_flag_lsf] 486 00000373 030D[80B30000] add ecx, [mp3_hdr_flag_mpeg25] 487 00000379 0FB79400[348E0000] movzx edx, word [mp3_freq_tab+eax*2] 488 00000381 D3EA shr edx, cl 489 00000383 8D0C49 lea ecx, [ecx+ecx*2] 490 00000386 01C8 add eax, ecx 491 00000388 A3[8CB30000] mov [mp3_hdr_sample_rate_index], eax 492 0000038D 8915[88B30000] mov [mp3_sample_rate], edx 493 494 00000393 8A0D[178C0000] mov cl, [option_rate_shift] 495 00000399 D3EA shr edx, cl 496 497 0000039B 8915[9CB30000] mov [mp3_output_sample_rate], edx 498 000003A1 A1[78B30000] mov eax, [mp3_hdr_32bit_header] 499 000003A6 C1E810 shr eax, 10h 500 000003A9 F7D0 not eax 501 000003AB 83E001 and eax, 1 502 000003AE A3[7CB30000] mov [mp3_hdr_flag_crc], eax 503 000003B3 A1[78B30000] mov eax, [mp3_hdr_32bit_header] 504 000003B8 C1E809 shr eax, 9 505 000003BB 83E001 and eax, 1 506 000003BE A3[84B30000] mov [mp3_hdr_flag_padding], eax 507 000003C3 A1[78B30000] mov eax, [mp3_hdr_32bit_header] 508 000003C8 C1E80C shr eax, 12 509 000003CB 83E00F and eax, 0Fh 510 000003CE 7512 jnz short .not_free_format 511 000003D0 E85A5D0000 call mp3_detect_free_format_block_size 512 000003D5 0F821DFFFFFF jb .bad_header 513 000003DB A1[C8090100] mov eax, [mp3_free_format_frame_size] 514 000003E0 EB34 jmp short .this_frame_size_plus_padding 515 516 .not_free_format: 517 000003E2 8B15[B8B30000] mov edx, [mp3_hdr_flag_lsf] 518 000003E8 C1E204 shl edx, 4 519 000003EB 01D0 add eax, edx 520 000003ED 0FB78400[F48D0000] movzx eax, word [mp3_bitrate_tab+eax*2] ; kbit/s 521 000003F5 69C0E8030000 imul eax, 1000 ; bit/s 522 000003FB A3[90B30000] mov [mp3_bit_rate], eax 523 00000400 69C090000000 imul eax, 144 ; 144=90h=8*18 524 00000406 31D2 xor edx, edx 525 00000408 F735[88B30000] div dword [mp3_sample_rate] 526 0000040E 8B0D[B8B30000] mov ecx, [mp3_hdr_flag_lsf] 527 00000414 D3E8 shr eax, cl 528 529 .this_frame_size_plus_padding: 530 00000416 0305[84B30000] add eax, [mp3_hdr_flag_padding] 531 0000041C A3[70B30000] mov [mp3_src_frame_size], eax 532 00000421 01F0 add eax, esi 533 00000423 A3[74B30000] mov [mp3_src_frame_end], eax 534 00000428 A1[78B30000] mov eax, [mp3_hdr_32bit_header] 535 0000042D C1E806 shr eax, 6 536 00000430 83E003 and eax, 3 537 00000433 A3[B0B30000] mov [mp3_hdr_mode_val], eax 538 00000438 BA01000000 mov edx, 1 539 540 0000043D 3C03 cmp al, 3 541 0000043F 7401 jz short .this_channels 542 543 ;mov edx, 2 544 ; 10/01/2025 545 00000441 42 inc edx 546 .this_channels: 547 00000442 8915[94B30000] mov [mp3_src_num_channels], edx 548 00000448 803D[158C0000]00 cmp byte [option_mono], 0 549 0000044F 7405 jz short .allow_stereo 550 00000451 BA01000000 mov edx, 1 551 .allow_stereo: 552 00000456 8915[98B30000] mov [mp3_output_num_channels], edx 553 0000045C 0FAF15[A0B30000] imul edx, [mp3_bytes_per_sample] 554 00000463 8915[640A0100] mov [mp3_samples_dst_step], edx 555 00000469 A1[78B30000] mov eax, [mp3_hdr_32bit_header] 556 0000046E C1E804 shr eax, 4 557 00000471 83E003 and eax, 3 558 00000474 A3[B4B30000] mov [mp3_hdr_mode_ext], eax 559 00000479 F605[1C8C0000]10 test byte [cpuid_flags], 10h 560 00000480 740E jz short .no_rdtsc_supported@ 561 00000482 0F31 rdtsc 562 00000484 0105[2C8C0000] add [ttt], eax 563 0000048A 1115[308C0000] adc [ttt+4], edx 564 565 .no_rdtsc_supported@: 566 00000490 F8 clc 567 00000491 C3 retn 568 569 .fail_no_header: 570 00000492 F605[1C8C0000]10 test byte [cpuid_flags], 10h 571 00000499 740E jz short .no_rdtsc_supported@@ 572 0000049B 0F31 rdtsc 573 0000049D 0105[2C8C0000] add [ttt], eax 574 000004A3 1115[308C0000] adc [ttt+4], edx 575 576 .no_rdtsc_supported@@: 577 000004A9 C705[70B30000]0000- mov dword [mp3_src_frame_size], 0 577 000004B1 0000 578 000004B3 F9 stc 579 000004B4 C3 retn 580 581 582 ; =============== S U B R O U T I N E ======================================= 583 584 585 mp3_bitstream_read_header_extra: 586 000004B5 F605[1C8C0000]10 test byte [cpuid_flags], 10h 587 000004BC 740E jz short .no_rdtsc_supported 588 000004BE 0F31 rdtsc 589 000004C0 2905[448C0000] sub [rdtsc_read_header_extra], eax 590 000004C6 1915[488C0000] sbb [rdtsc_read_header_extra+4], edx 591 592 .no_rdtsc_supported: 593 000004CC 833D[7CB30000]00 cmp dword [mp3_hdr_flag_crc], 0 594 000004D3 7422 jz short .without_crc 595 000004D5 89E8 mov eax, ebp ; mp3mac_get_n_bits 16 596 000004D7 C1E510 shl ebp, 10h 597 000004DA C1C010 rol eax, 10h 598 000004DD 31E8 xor eax, ebp 599 000004DF 80ED10 sub ch, 10h 600 000004E2 7913 jns short .without_crc 601 000004E4 88E9 mov cl, ch ; mp3mac_collect_more 602 000004E6 80C510 add ch, 10h 603 000004E9 D3C5 rol ebp, cl 604 000004EB 668B2E mov bp, [esi] 605 000004EE 83C602 add esi, 2 606 000004F1 66C1CD08 ror bp, 8 607 000004F5 D3CD ror ebp, cl 608 609 .without_crc: 610 000004F7 833D[B8B30000]00 cmp dword [mp3_hdr_flag_lsf], 0 611 000004FE 745B jz short .pre_lsf_zero 612 00000500 C705[840A0100]0900- mov dword [mp3_num_compress_bits], 9 612 00000508 0000 613 0000050A 89E8 mov eax, ebp ; mp3mac_get_n_bits 8 614 0000050C C1E508 shl ebp, 8 615 0000050F C1C008 rol eax, 8 616 00000512 31E8 xor eax, ebp 617 00000514 80ED08 sub ch, 8 618 00000517 7913 jns short .without_crc@ 619 00000519 88E9 mov cl, ch 620 0000051B 80C510 add ch, 10h 621 0000051E D3C5 rol ebp, cl 622 00000520 668B2E mov bp, [esi] 623 00000523 83C602 add esi, 2 624 00000526 66C1CD08 ror bp, 8 625 0000052A D3CD ror ebp, cl 626 627 .without_crc@: 628 0000052C A3[800A0100] mov [mp3_main_data_begin], eax 629 00000531 8A0D[94B30000] mov cl, byte [mp3_src_num_channels] 630 00000537 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 631 00000539 D3E5 shl ebp, cl 632 0000053B D3C0 rol eax, cl 633 0000053D 31E8 xor eax, ebp 634 0000053F 28CD sub ch, cl 635 00000541 7913 jns short .without_crc@@ 636 00000543 88E9 mov cl, ch 637 00000545 80C510 add ch, 10h 638 00000548 D3C5 rol ebp, cl 639 0000054A 668B2E mov bp, [esi] 640 0000054D 83C602 add esi, 2 641 00000550 66C1CD08 ror bp, 8 642 00000554 D3CD ror ebp, cl 643 644 .without_crc@@: 645 00000556 E9A1000000 jmp .pre_lsf_done 646 647 .pre_lsf_zero: 648 0000055B C705[840A0100]0400- mov dword [mp3_num_compress_bits], 4 648 00000563 0000 649 00000565 89E8 mov eax, ebp ; mp3mac_get_n_bits 9 650 00000567 C1E509 shl ebp, 9 651 0000056A C1C009 rol eax, 9 652 0000056D 31E8 xor eax, ebp 653 0000056F 80ED09 sub ch, 9 654 00000572 7913 jns short .without_crc@@@ 655 00000574 88E9 mov cl, ch 656 00000576 80C510 add ch, 10h 657 00000579 D3C5 rol ebp, cl 658 0000057B 668B2E mov bp, [esi] 659 0000057E 83C602 add esi, 2 660 00000581 66C1CD08 ror bp, 8 661 00000585 D3CD ror ebp, cl 662 663 .without_crc@@@: 664 00000587 A3[800A0100] mov [mp3_main_data_begin], eax 665 0000058C 8A0D[94B30000] mov cl, byte [mp3_src_num_channels] 666 00000592 D0E1 shl cl, 1 ; 1,2 --> 2,4 667 00000594 80F107 xor cl, 7 ; --> 5,3 668 00000597 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 669 00000599 D3E5 shl ebp, cl 670 0000059B D3C0 rol eax, cl 671 0000059D 31E8 xor eax, ebp 672 0000059F 28CD sub ch, cl 673 000005A1 7913 jns short .without_crc@@@@ 674 000005A3 88E9 mov cl, ch 675 000005A5 80C510 add ch, 10h 676 000005A8 D3C5 rol ebp, cl 677 000005AA 668B2E mov bp, [esi] 678 000005AD 83C602 add esi, 2 679 000005B0 66C1CD08 ror bp, 8 680 000005B4 D3CD ror ebp, cl 681 682 .without_crc@@@@: 683 000005B6 8B15[94B30000] mov edx, [mp3_src_num_channels] 684 000005BC BB[8C0A0100] mov ebx, mp3_granules 685 686 .pre_channel_lop: 687 000005C1 C7432800000000 mov dword [ebx+40], 0 ; [ebx+$mp3gr_scfsi] 688 000005C8 81C3A0090000 add ebx, 2464 ; $mp3gr_entrysiz 689 000005CE 89E8 mov eax, ebp ; mp3mac_get_n_bits 4 690 000005D0 C1E504 shl ebp, 4 691 000005D3 C1C004 rol eax, 4 692 000005D6 31E8 xor eax, ebp 693 000005D8 80ED04 sub ch, 4 694 000005DB 7913 jns short .without_crc@@@@@ 695 000005DD 88E9 mov cl, ch 696 000005DF 80C510 add ch, 10h 697 000005E2 D3C5 rol ebp, cl 698 000005E4 668B2E mov bp, [esi] 699 000005E7 83C602 add esi, 2 700 000005EA 66C1CD08 ror bp, 8 701 000005EE D3CD ror ebp, cl 702 703 .without_crc@@@@@: 704 000005F0 894328 mov [ebx+28h], eax ; [ebx+$mp3gr_scfsi] 705 000005F3 81C3A0090000 add ebx, 2464 ; $mp3gr_entrysiz 706 000005F9 4A dec edx 707 000005FA 75C5 jnz short .pre_channel_lop 708 709 .pre_lsf_done: 710 000005FC A1[880A0100] mov eax, [mp3_nb_granules] 711 00000601 6BC012 imul eax, 12h 712 00000604 A3[ACB30000] mov [mp3_nb_frames], eax 713 ; 14/01/2025 714 ;mov eax, [mp3_nb_frames] 715 00000609 0FAF05[98B30000] imul eax, [mp3_output_num_channels] 716 00000610 0FAF05[A0B30000] imul eax, [mp3_bytes_per_sample] 717 00000617 C1E005 shl eax, 5 718 0000061A 8A0D[178C0000] mov cl, [option_rate_shift] 719 00000620 D3E8 shr eax, cl 720 00000622 A3[600A0100] mov [mp3_samples_output_size], eax 721 00000627 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_read_header_extra 722 0000062E 740E jz short .no_rdtsc_supported@ 723 00000630 0F31 rdtsc 724 00000632 0105[448C0000] add [rdtsc_read_header_extra], eax 725 00000638 1115[488C0000] adc [rdtsc_read_header_extra+4], edx 726 727 .no_rdtsc_supported@: 728 0000063E C3 retn 729 730 731 ; =============== S U B R O U T I N E ======================================= 732 733 734 mp3_bitstream_read_granules: 735 0000063F F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_read_granule 736 00000646 740E jz short .no_rdtsc_supported 737 00000648 0F31 rdtsc 738 0000064A 2905[5C8C0000] sub [rdtsc_read_granule], eax 739 00000650 1915[608C0000] sbb [rdtsc_read_granule+4], edx 740 741 .no_rdtsc_supported: 742 00000656 8925[80350500] mov [_@@saved_sp], esp 743 0000065C C705[84350500]0000- mov dword [mp3_main_data_siz], 0 743 00000664 0000 744 00000666 C705[6C0A0100]0000- mov dword [mp3_curr_granule], 0 744 0000066E 0000 745 00000670 BB[8C0A0100] mov ebx, mp3_granules 746 747 .hdr_granule_lop: 748 00000675 53 push ebx 749 00000676 C705[680A0100]0000- mov dword [mp3_curr_channel], 0 749 0000067E 0000 750 751 .hdr_channel_lop: 752 00000680 89E8 mov eax, ebp ; mp3mac_get_n_bits 12 753 00000682 C1E50C shl ebp, 12 754 00000685 C1C00C rol eax, 12 755 00000688 31E8 xor eax, ebp 756 0000068A 80ED0C sub ch, 12 757 0000068D 7913 jns short .without_crc 758 0000068F 88E9 mov cl, ch 759 00000691 80C510 add ch, 16 760 00000694 D3C5 rol ebp, cl 761 00000696 668B2E mov bp, [esi] 762 00000699 83C602 add esi, 2 763 0000069C 66C1CD08 ror bp, 8 764 000006A0 D3CD ror ebp, cl 765 766 .without_crc: 767 000006A2 8B15[84350500] mov edx, [mp3_main_data_siz] 768 000006A8 8903 mov [ebx], eax 769 000006AA 895304 mov [ebx+4], edx 770 000006AD 01D0 add eax, edx 771 000006AF 894308 mov [ebx+8], eax 772 000006B2 A3[84350500] mov [mp3_main_data_siz], eax 773 000006B7 89E8 mov eax, ebp ; mp3mac_get_n_bits 9 774 000006B9 C1E509 shl ebp, 9 775 000006BC C1C009 rol eax, 9 776 000006BF 31E8 xor eax, ebp 777 000006C1 80ED09 sub ch, 9 778 000006C4 7913 jns short .without_crc@ 779 000006C6 88E9 mov cl, ch 780 000006C8 80C510 add ch, 10h 781 000006CB D3C5 rol ebp, cl 782 000006CD 668B2E mov bp, [esi] 783 000006D0 83C602 add esi, 2 784 000006D3 66C1CD08 ror bp, 8 785 000006D7 D3CD ror ebp, cl 786 787 .without_crc@: 788 000006D9 89430C mov [ebx+12], eax ; [ebx+$mp3gr_big_values] 789 000006DC 89E8 mov eax, ebp ; mp3mac_get_n_bits 8 790 000006DE C1E508 shl ebp, 8 791 000006E1 C1C008 rol eax, 8 792 000006E4 31E8 xor eax, ebp 793 000006E6 80ED08 sub ch, 8 794 000006E9 7913 jns short .without_crc@@ 795 000006EB 88E9 mov cl, ch 796 000006ED 80C510 add ch, 10h 797 000006F0 D3C5 rol ebp, cl 798 000006F2 668B2E mov bp, [esi] 799 000006F5 83C602 add esi, 2 800 000006F8 66C1CD08 ror bp, 8 801 000006FC D3CD ror ebp, cl 802 803 .without_crc@@: 804 000006FE 05BE000000 add eax, 190 ; 400-210 805 00000703 833D[B0B30000]01 cmp dword [mp3_hdr_mode_val], 1 806 0000070A 750F jnz short .not_ms_stereo 807 0000070C F705[B4B30000]0200- test dword [mp3_hdr_mode_ext], 2 807 00000714 0000 808 00000716 7403 jz short .not_ms_stereo 809 00000718 83E802 sub eax, 2 810 811 .not_ms_stereo: 812 0000071B 894310 mov [ebx+16], eax ; [ebx+$mp3gr_global_gain] 813 0000071E 8A0D[840A0100] mov cl, byte [mp3_num_compress_bits] 814 00000724 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 815 00000726 D3E5 shl ebp, cl 816 00000728 D3C0 rol eax, cl 817 0000072A 31E8 xor eax, ebp 818 0000072C 28CD sub ch, cl 819 0000072E 7913 jns short .without_crc@@@ 820 00000730 88E9 mov cl, ch 821 00000732 80C510 add ch, 10h 822 00000735 D3C5 rol ebp, cl 823 00000737 668B2E mov bp, [esi] 824 0000073A 83C602 add esi, 2 825 0000073D 66C1CD08 ror bp, 8 826 00000741 D3CD ror ebp, cl 827 828 .without_crc@@@: 829 00000743 894314 mov [ebx+20], eax ; [ebx+$mp3gr_scalefac_compress] 830 00000746 FECD dec ch ; mp3mac_get_bit_to_cy 831 ; dec mp3_colNN 832 00000748 D1E5 shl ebp, 1 ; shl mp3_col32,1 ; cy=data 833 0000074A 0F834F010000 jnb .no_blocksplit 834 00000750 89E8 mov eax, ebp ; mp3mac_get_n_bits 2 835 00000752 C1E502 shl ebp, 2 836 00000755 C1C002 rol eax, 2 837 00000758 31E8 xor eax, ebp 838 0000075A 80ED02 sub ch, 2 839 0000075D 7913 jns short .without_crc@@@@ 840 0000075F 88E9 mov cl, ch 841 00000761 80C510 add ch, 10h 842 00000764 D3C5 rol ebp, cl 843 00000766 668B2E mov bp, [esi] 844 00000769 83C602 add esi, 2 845 0000076C 66C1CD08 ror bp, 8 846 00000770 D3CD ror ebp, cl 847 848 .without_crc@@@@: 849 00000772 83F800 cmp eax, 0 850 00000775 0F847B030000 jz .error 851 0000077B 89432C mov [ebx+44], eax ; [ebx+$mp3gr_block_type] 852 0000077E 83F802 cmp eax, 2 853 00000781 B812000000 mov eax, 18 ; 36/2 ; region_size (default) 854 00000786 741C jz short .this_region_size 855 00000788 833D[8CB30000]02 cmp dword [mp3_hdr_sample_rate_index], 2 856 0000078F 7613 jbe short .this_region_size 857 00000791 B81B000000 mov eax, 27 ; 54/2 ; region_size 858 00000796 833D[8CB30000]08 cmp dword [mp3_hdr_sample_rate_index], 8 859 0000079D 7505 jnz short .this_region_size 860 0000079F B836000000 mov eax, 54 ; 108/2 ; region_size (for rate=8) 861 862 .this_region_size: 863 000007A4 894350 mov [ebx+80], eax ; [ebx+$mp3gr_region_size+0*4] 864 000007A7 C7435420010000 mov dword [ebx+84], 288 ; [ebx+$mp3gr_region_size+1*4],576/2 865 000007AE C7435820010000 mov dword [ebx+88], 288 ; [ebx+$mp3gr_region_size+2*4],576/2 866 000007B5 89E8 mov eax, ebp ; mp3mac_get_n_bits 1 867 000007B7 D1E5 shl ebp, 1 868 000007B9 D1C0 rol eax, 1 869 000007BB 31E8 xor eax, ebp 870 000007BD 80ED01 sub ch, 1 871 000007C0 7913 jns short .without_crc@@@@@ 872 000007C2 88E9 mov cl, ch 873 000007C4 80C510 add ch, 10h 874 000007C7 D3C5 rol ebp, cl 875 000007C9 668B2E mov bp, [esi] 876 000007CC 83C602 add esi, 2 877 000007CF 66C1CD08 ror bp, 8 878 000007D3 D3CD ror ebp, cl 879 880 .without_crc@@@@@: 881 000007D5 894330 mov [ebx+48], eax ; [ebx+$mp3gr_switch_point] 882 000007D8 89E8 mov eax, ebp ; IRP nn,0,1 ; only 0..1 for blocksplit 883 000007DA C1E505 shl ebp, 5 ; mp3mac_get_n_bits 5 884 000007DD C1C005 rol eax, 5 885 000007E0 31E8 xor eax, ebp 886 000007E2 80ED05 sub ch, 5 887 000007E5 7913 jns short .without_crc@@@@@@ 888 000007E7 88E9 mov cl, ch 889 000007E9 80C510 add ch, 10h 890 000007EC D3C5 rol ebp, cl 891 000007EE 668B2E mov bp, [esi] 892 000007F1 83C602 add esi, 2 893 000007F4 66C1CD08 ror bp, 8 894 000007F8 D3CD ror ebp, cl 895 896 .without_crc@@@@@@: 897 000007FA 894338 mov [ebx+56], eax ; [ebx+$mp3gr_table_select+nn*4] ; nn=0 898 000007FD 89E8 mov eax, ebp ; mp3mac_get_n_bits 5 899 000007FF C1E505 shl ebp, 5 900 00000802 C1C005 rol eax, 5 901 00000805 31E8 xor eax, ebp 902 00000807 80ED05 sub ch, 5 903 0000080A 7913 jns short .without_crc_@@@@ 904 0000080C 88E9 mov cl, ch 905 0000080E 80C510 add ch, 10h 906 00000811 D3C5 rol ebp, cl 907 00000813 668B2E mov bp, [esi] 908 00000816 83C602 add esi, 2 909 00000819 66C1CD08 ror bp, 8 910 0000081D D3CD ror ebp, cl 911 912 .without_crc_@@@@: 913 0000081F 89433C mov [ebx+60], eax ; [ebx+$mp3gr_table_select+nn*4] ; nn=1 914 00000822 89E8 mov eax, ebp ; mp3mac_get_n_bits 5 915 00000824 C1E503 shl ebp, 3 ; IRP nn,0,1,2 916 00000827 C1C003 rol eax, 3 ; mp3mac_get_n_bits 3 917 0000082A 31E8 xor eax, ebp 918 0000082C 80ED03 sub ch, 3 919 0000082F 7913 jns short .without_crc_@@@@@ 920 00000831 88E9 mov cl, ch 921 00000833 80C510 add ch, 10h 922 00000836 D3C5 rol ebp, cl 923 00000838 668B2E mov bp, [esi] 924 0000083B 83C602 add esi, 2 925 0000083E 66C1CD08 ror bp, 8 926 00000842 D3CD ror ebp, cl 927 928 .without_crc_@@@@@: 929 00000844 C1E003 shl eax, 3 930 00000847 894344 mov [ebx+68], eax ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=0 931 0000084A 89E8 mov eax, ebp 932 0000084C C1E503 shl ebp, 3 933 0000084F C1C003 rol eax, 3 934 00000852 31E8 xor eax, ebp 935 00000854 80ED03 sub ch, 3 936 00000857 7913 jns short .without_crc_@@@@@@ 937 00000859 88E9 mov cl, ch 938 0000085B 80C510 add ch, 10h 939 0000085E D3C5 rol ebp, cl 940 00000860 668B2E mov bp, [esi] 941 00000863 83C602 add esi, 2 942 00000866 66C1CD08 ror bp, 8 943 0000086A D3CD ror ebp, cl 944 945 .without_crc_@@@@@@: 946 0000086C C1E003 shl eax, 3 947 0000086F 894348 mov [ebx+72], eax ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=1 948 00000872 89E8 mov eax, ebp 949 00000874 C1E503 shl ebp, 3 950 00000877 C1C003 rol eax, 3 951 0000087A 31E8 xor eax, ebp 952 0000087C 80ED03 sub ch, 3 953 0000087F 7913 jns short .without_crc_@@@@@@@ 954 00000881 88E9 mov cl, ch 955 00000883 80C510 add ch, 10h 956 00000886 D3C5 rol ebp, cl 957 00000888 668B2E mov bp, [esi] 958 0000088B 83C602 add esi, 2 959 0000088E 66C1CD08 ror bp, 8 960 00000892 D3CD ror ebp, cl 961 962 .without_crc_@@@@@@@: 963 00000894 C1E003 shl eax, 3 964 00000897 89434C mov [ebx+76], eax ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=2 965 0000089A E910010000 jmp .blocksplit_done 966 967 .no_blocksplit: 968 0000089F C7432C00000000 mov dword [ebx+44], 0 ; [ebx+$mp3gr_block_type] 969 000008A6 C7433000000000 mov dword [ebx+48], 0 ; [ebx+$mp3gr_switch_point] 970 000008AD 89E8 mov eax, ebp ; IRP nn,0,1,2 ; range 0..2 when non-blocksplit 971 000008AF C1E505 shl ebp, 5 ; mp3mac_get_n_bits 5 972 000008B2 C1C005 rol eax, 5 973 000008B5 31E8 xor eax, ebp 974 000008B7 80ED05 sub ch, 5 975 000008BA 7913 jns short .@_without_crc 976 000008BC 88E9 mov cl, ch 977 000008BE 80C510 add ch, 10h 978 000008C1 D3C5 rol ebp, cl 979 000008C3 668B2E mov bp, [esi] 980 000008C6 83C602 add esi, 2 981 000008C9 66C1CD08 ror bp, 8 982 000008CD D3CD ror ebp, cl 983 984 .@_without_crc: 985 000008CF 894338 mov [ebx+56], eax ; [ebx+$mp3gr_table_select+nn*4] ; nn=0 986 000008D2 89E8 mov eax, ebp 987 000008D4 C1E505 shl ebp, 5 988 000008D7 C1C005 rol eax, 5 989 000008DA 31E8 xor eax, ebp 990 000008DC 80ED05 sub ch, 5 991 000008DF 7913 jns short .@_without_crc_@ 992 000008E1 88E9 mov cl, ch 993 000008E3 80C510 add ch, 10h 994 000008E6 D3C5 rol ebp, cl 995 000008E8 668B2E mov bp, [esi] 996 000008EB 83C602 add esi, 2 997 000008EE 66C1CD08 ror bp, 8 998 000008F2 D3CD ror ebp, cl 999 1000 .@_without_crc_@: 1001 000008F4 89433C mov [ebx+60], eax ; [ebx+$mp3gr_table_select+nn*4] ; nn=1 1002 000008F7 89E8 mov eax, ebp 1003 000008F9 C1E505 shl ebp, 5 1004 000008FC C1C005 rol eax, 5 1005 000008FF 31E8 xor eax, ebp 1006 00000901 80ED05 sub ch, 5 1007 00000904 7913 jns short .@_without_crc_@@ 1008 00000906 88E9 mov cl, ch 1009 00000908 80C510 add ch, 10h 1010 0000090B D3C5 rol ebp, cl 1011 0000090D 668B2E mov bp, [esi] 1012 00000910 83C602 add esi, 2 1013 00000913 66C1CD08 ror bp, 8 1014 00000917 D3CD ror ebp, cl 1015 1016 .@_without_crc_@@: 1017 00000919 894340 mov [ebx+64], eax ; [ebx+$mp3gr_table_select+nn*4] ; nn=2 1018 0000091C 89E8 mov eax, ebp 1019 0000091E C1E504 shl ebp, 4 1020 00000921 C1C004 rol eax, 4 1021 00000924 31E8 xor eax, ebp 1022 00000926 80ED04 sub ch, 4 1023 00000929 7913 jns short .@_without_crc@@@ 1024 0000092B 88E9 mov cl, ch 1025 0000092D 80C510 add ch, 10h 1026 00000930 D3C5 rol ebp, cl 1027 00000932 668B2E mov bp, [esi] 1028 00000935 83C602 add esi, 2 1029 00000938 66C1CD08 ror bp, 8 1030 0000093C D3CD ror ebp, cl 1031 1032 .@_without_crc@@@: 1033 0000093E 40 inc eax 1034 0000093F A3[78350500] mov [_@@region_address0], eax 1035 00000944 89E8 mov eax, ebp ; mp3mac_get_n_bits 3 1036 00000946 C1E503 shl ebp, 3 1037 00000949 C1C003 rol eax, 3 1038 0000094C 31E8 xor eax, ebp 1039 0000094E 80ED03 sub ch, 3 1040 00000951 7913 jns short .@_without_crc@@@@ 1041 00000953 88E9 mov cl, ch 1042 00000955 80C510 add ch, 10h 1043 00000958 D3C5 rol ebp, cl 1044 0000095A 668B2E mov bp, [esi] 1045 0000095D 83C602 add esi, 2 1046 00000960 66C1CD08 ror bp, 8 1047 00000964 D3CD ror ebp, cl 1048 1049 .@_without_crc@@@@: 1050 00000966 40 inc eax 1051 00000967 0305[78350500] add eax, [_@@region_address0] 1052 0000096D A3[7C350500] mov [_@@region_address1], eax 1053 00000972 A1[8CB30000] mov eax, [mp3_hdr_sample_rate_index] 1054 00000977 C1E005 shl eax, 5 1055 0000097A 0305[78350500] add eax, [_@@region_address0] 1056 00000980 0FB78400[8CED0100] movzx eax, word [mp3_band_index_long+eax*2] 1057 00000988 D1E8 shr eax, 1 1058 0000098A 894350 mov [ebx+80], eax ; [ebx+$mp3gr_region_size+0*4] 1059 0000098D A1[8CB30000] mov eax, [mp3_hdr_sample_rate_index] 1060 00000992 C1E005 shl eax, 5 1061 00000995 0305[7C350500] add eax, [_@@region_address1] 1062 0000099B 0FB78400[8CED0100] movzx eax, word [mp3_band_index_long+eax*2] 1063 000009A3 D1E8 shr eax, 1 1064 000009A5 894354 mov [ebx+84], eax ; [ebx+$mp3gr_region_size+1*4] 1065 000009A8 C7435820010000 mov dword [ebx+88], 288 ; [ebx+$mp3gr_region_size+2*4],576/2 1066 1067 .blocksplit_done: 1068 000009AF 8D7B50 lea edi, [ebx+80] ; [ebx+$mp3gr_region_size+0] 1069 000009B2 31D2 xor edx, edx 1070 000009B4 B103 mov cl, 3 1071 1072 .trunc_region_size_lop: 1073 000009B6 8B07 mov eax, [edi] 1074 000009B8 3B430C cmp eax, [ebx+12] ; [ebx+$mp3gr_big_values] 1075 000009BB 7603 jbe short .trunc_region_size_this 1076 000009BD 8B430C mov eax, [ebx+12] 1077 1078 .trunc_region_size_this: 1079 000009C0 29D0 sub eax, edx 1080 000009C2 8907 mov [edi], eax 1081 000009C4 01C2 add edx, eax 1082 000009C6 83C704 add edi, 4 1083 000009C9 FEC9 dec cl 1084 000009CB 75E9 jnz short .trunc_region_size_lop 1085 000009CD C7431C0D000000 mov dword [ebx+28], 13 ; [ebx+$mp3gr_short_start] 1086 000009D4 C7432016000000 mov dword [ebx+32], 22 ; [ebx+$mp3gr_long_end] 1087 000009DB 837B2C02 cmp dword [ebx+44], 2 ; [ebx+$mp3gr_block_type] 1088 000009DF 7549 jnz short .these_band_indices 1089 000009E1 C7431C00000000 mov dword [ebx+28], 0 ; [ebx+$mp3gr_short_start] 1090 000009E8 C7432000000000 mov dword [ebx+32], 0 ; [ebx+$mp3gr_long_end] 1091 000009EF 837B3000 cmp dword [ebx+48], 0 ; [ebx+$mp3gr_switch_point] 1092 000009F3 7435 jz short .these_band_indices 1093 000009F5 C7431C02000000 mov dword [ebx+28], 2 ; [ebx+$mp3gr_short_start] 1094 000009FC C7432004000000 mov dword [ebx+32], 4 ; [ebx+$mp3gr_long_end] 1095 00000A03 833D[8CB30000]08 cmp dword [mp3_hdr_sample_rate_index], 8 1096 00000A0A 741E jz short .these_band_indices 1097 00000A0C 833D[8CB30000]02 cmp dword [mp3_hdr_sample_rate_index], 2 1098 00000A13 C7431C03000000 mov dword [ebx+28], 3 ; [ebx+$mp3gr_short_start] 1099 00000A1A C7432008000000 mov dword [ebx+32], 8 ; [ebx+$mp3gr_long_end] 1100 00000A21 7607 jbe short .these_band_indices 1101 00000A23 C7432006000000 mov dword [ebx+32], 6 ; [ebx+$mp3gr_long_end] 1102 1103 .these_band_indices: 1104 00000A2A 31C0 xor eax, eax 1105 00000A2C 833D[B8B30000]00 cmp dword [mp3_hdr_flag_lsf], 0 1106 00000A33 7520 jnz short .no_preflag 1107 00000A35 89E8 mov eax, ebp ; mp3mac_get_n_bits 1 1108 00000A37 D1E5 shl ebp, 1 1109 00000A39 D1C0 rol eax, 1 1110 00000A3B 31E8 xor eax, ebp 1111 00000A3D 80ED01 sub ch, 1 1112 00000A40 7913 jns short .no_preflag 1113 00000A42 88E9 mov cl, ch 1114 00000A44 80C510 add ch, 10h 1115 00000A47 D3C5 rol ebp, cl 1116 00000A49 668B2E mov bp, [esi] 1117 00000A4C 83C602 add esi, 2 1118 00000A4F 66C1CD08 ror bp, 8 1119 00000A53 D3CD ror ebp, cl 1120 1121 .no_preflag: 1122 00000A55 894318 mov [ebx+24], eax ; [ebx+$mp3gr_preflag] 1123 00000A58 89E8 mov eax, ebp ; mp3mac_get_n_bits 1 1124 00000A5A D1E5 shl ebp, 1 1125 00000A5C D1C0 rol eax, 1 1126 00000A5E 31E8 xor eax, ebp 1127 00000A60 80ED01 sub ch, 1 1128 00000A63 7913 jns short .@_without_crc@@@@@ 1129 00000A65 88E9 mov cl, ch 1130 00000A67 80C510 add ch, 10h 1131 00000A6A D3C5 rol ebp, cl 1132 00000A6C 668B2E mov bp, [esi] 1133 00000A6F 83C602 add esi, 2 1134 00000A72 66C1CD08 ror bp, 8 1135 00000A76 D3CD ror ebp, cl 1136 1137 .@_without_crc@@@@@: 1138 00000A78 40 inc eax 1139 00000A79 894334 mov [ebx+52], eax ; [ebx+$mp3gr_scalefac_scale] 1140 00000A7C 89E8 mov eax, ebp ; mp3mac_get_n_bits 1 1141 00000A7E D1E5 shl ebp, 1 1142 00000A80 D1C0 rol eax, 1 1143 00000A82 31E8 xor eax, ebp 1144 00000A84 80ED01 sub ch, 1 1145 00000A87 7913 jns short .@_without_crc@@@@@@ 1146 00000A89 88E9 mov cl, ch 1147 00000A8B 80C510 add ch, 10h 1148 00000A8E D3C5 rol ebp, cl 1149 00000A90 668B2E mov bp, [esi] 1150 00000A93 83C602 add esi, 2 1151 00000A96 66C1CD08 ror bp, 8 1152 00000A9A D3CD ror ebp, cl 1153 1154 .@_without_crc@@@@@@: 1155 00000A9C 83C010 add eax, 10h ; table 10h..11h (quad_vlc) 1156 00000A9F 894324 mov [ebx+36], eax ; [ebx+$mp3gr_count1table_select] 1157 00000AA2 81C340130000 add ebx, 4928 ; $mp3gr_entrysiz*2 1158 00000AA8 FF05[680A0100] inc dword [mp3_curr_channel] 1159 00000AAE A1[680A0100] mov eax, [mp3_curr_channel] 1160 00000AB3 3B05[94B30000] cmp eax, [mp3_src_num_channels] 1161 00000AB9 0F82C1FBFFFF jb .hdr_channel_lop 1162 00000ABF 5B pop ebx 1163 00000AC0 81C3A0090000 add ebx, 2464 ; $mp3gr_entrysiz 1164 00000AC6 FF05[6C0A0100] inc dword [mp3_curr_granule] 1165 00000ACC A1[6C0A0100] mov eax, [mp3_curr_granule] 1166 00000AD1 3B05[880A0100] cmp eax, [mp3_nb_granules] 1167 00000AD7 0F8298FBFFFF jb .hdr_granule_lop 1168 00000ADD F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_read_granule 1169 00000AE4 740E jz short .no_rdtsc_supported@ 1170 00000AE6 0F31 rdtsc 1171 00000AE8 0105[5C8C0000] add [rdtsc_read_granule], eax 1172 00000AEE 1115[608C0000] adc [rdtsc_read_granule+4], edx 1173 1174 .no_rdtsc_supported@: 1175 00000AF4 F8 clc 1176 00000AF5 C3 retn 1177 1178 .error: 1179 00000AF6 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_read_granule 1180 00000AFD 740E jz short .no_rdtsc_supported@@ 1181 00000AFF 0F31 rdtsc 1182 00000B01 0105[5C8C0000] add [rdtsc_read_granule], eax 1183 00000B07 1115[608C0000] adc [rdtsc_read_granule+4], edx 1184 1185 .no_rdtsc_supported@@: 1186 00000B0D 8B25[80350500] mov esp, [_@@saved_sp] 1187 00000B13 F9 stc 1188 00000B14 C3 retn 1189 1190 1191 ; =============== S U B R O U T I N E ======================================= 1192 1193 1194 mp3_bitstream_append_to_main_data_pool: 1195 00000B15 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_append_main 1196 00000B1C 740E jz short .no_rdtsc_supported 1197 00000B1E 0F31 rdtsc 1198 00000B20 2905[748C0000] sub [rdtsc_append_main], eax 1199 00000B26 1915[788C0000] sbb [rdtsc_append_main+4], edx 1200 1201 .no_rdtsc_supported: 1202 00000B2C 8B0D[74B30000] mov ecx, [mp3_src_frame_end] 1203 00000B32 29F1 sub ecx, esi 1204 00000B34 0F8266020000 jb fatalunexpected 1205 00000B3A 8B3D[68B30000] mov edi, [main_data_pool_wr_ptr] 1206 00000B40 8D040F lea eax, [edi+ecx] 1207 00000B43 3D[68B30000] cmp eax, main_data_pool_wr_ptr 1208 00000B48 7616 jbe short .pool_inrange 1209 00000B4A 51 push ecx 1210 00000B4B 56 push esi 1211 00000B4C 8DB700FEFFFF lea esi, [edi-200h] 1212 00000B52 BF[68A30000] mov edi, main_data_pool_start 1213 00000B57 B980000000 mov ecx, 128 1214 00000B5C F3A5 rep movsd 1215 00000B5E 5E pop esi 1216 00000B5F 59 pop ecx 1217 1218 .pool_inrange: 1219 00000B60 89F8 mov eax, edi 1220 00000B62 2B05[800A0100] sub eax, [mp3_main_data_begin] 1221 00000B68 F3A4 rep movsb 1222 00000B6A 893D[68B30000] mov [main_data_pool_wr_ptr], edi 1223 00000B70 3D[68A30000] cmp eax, main_data_pool_start 1224 00000B75 7828 js short .below_pool_start 1225 00000B77 A3[740A0100] mov [mp3_bitstream_start], eax 1226 ; 22/10/2024 1227 ;mov eax, 0 1228 00000B7C 8B35[740A0100] mov esi, [mp3_bitstream_start] ; mp3mac_bitstream_set_position 1229 ;mov cl, al 1230 ;shr eax, 3 1231 ;and cl, 7 1232 ;add esi, eax 1233 00000B82 E8CCF6FFFF call mp3_recollect_bits 1234 ;mov eax, ebp ; mp3mac_get_n_bits cl 1235 ;shl ebp, cl 1236 ;rol eax, cl 1237 ;xor eax, ebp 1238 ;sub ch, cl 1239 ;jns short .cont 1240 ;mov cl, ch ; mp3mac_collect_more 1241 ;add ch, 10h 1242 ;rol ebp, cl 1243 ;mov bp, [esi] 1244 ;add esi, 2 1245 ;ror bp, 8 1246 ;ror ebp, cl 1247 1248 .cont: 1249 00000B87 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_append_main 1250 00000B8E 740E jz short .no_rdtsc_supported@ 1251 00000B90 0F31 rdtsc 1252 00000B92 0105[748C0000] add [rdtsc_append_main], eax 1253 00000B98 1115[788C0000] adc [rdtsc_append_main+4], edx 1254 1255 .no_rdtsc_supported@: 1256 00000B9E C3 retn 1257 1258 .below_pool_start: 1259 00000B9F C705[600A0100]0000- mov dword [mp3_samples_output_size], 0 1259 00000BA7 0000 1260 00000BA9 EBDC jmp short .cont 1261 1262 1263 ; =============== S U B R O U T I N E ======================================= 1264 1265 1266 mp3_bitstream_read_scalefacs: 1267 00000BAB F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_read_scalefac 1268 00000BB2 740E jz short .no_rdtsc_supported 1269 00000BB4 0F31 rdtsc 1270 00000BB6 2905[8C8C0000] sub [rdtsc_read_scalefac], eax 1271 00000BBC 1915[908C0000] sbb [rdtsc_read_scalefac+4], edx 1272 1273 .no_rdtsc_supported: 1274 00000BC2 8D7B70 lea edi, [ebx+112] ; [ebx+$mp3gr_scale_factors] 1275 00000BC5 833D[B8B30000]00 cmp dword [mp3_hdr_flag_lsf], 0 1276 00000BCC 0F850D010000 jnz .body_lsf_nonzero 1277 00000BD2 8B4314 mov eax, [ebx+20] ; [ebx+$mp3gr_scalefac_compress] 1278 00000BD5 668B9400[6C900000] mov dx, [mp3_slen_table+eax*2] ; slen[0,1] 1279 00000BDD 837B2C02 cmp dword [ebx+44], 2 ; [ebx+$mp3gr_block_type] 1280 00000BE1 757F jnz short .body_lsf_zero_non_type2 1281 00000BE3 53 push ebx 1282 00000BE4 B012 mov al, 18 1283 00000BE6 2A4330 sub al, [ebx+48] ; [ebx+$mp3gr_switch_point] 1284 00000BE9 88C3 mov bl, al ; @@get_bl_scalefacs_with_dl_bits 0 1285 00000BEB 80FA00 cmp dl, 0 1286 00000BEE 7428 jz short .quickfill 1287 1288 .scalefac_get_lop: 1289 00000BF0 88D1 mov cl, dl ; LSB of edx, slen[i] 1290 00000BF2 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 1291 00000BF4 D3E5 shl ebp, cl 1292 00000BF6 D3C0 rol eax, cl 1293 00000BF8 31E8 xor eax, ebp 1294 00000BFA 28CD sub ch, cl 1295 00000BFC 7913 jns short .cont@ 1296 00000BFE 88E9 mov cl, ch ; mp3mac_collect_more 1297 00000C00 80C510 add ch, 10h 1298 00000C03 D3C5 rol ebp, cl 1299 00000C05 668B2E mov bp, [esi] 1300 00000C08 83C602 add esi, 2 1301 00000C0B 66C1CD08 ror bp, 8 1302 00000C0F D3CD ror ebp, cl 1303 1304 .cont@: 1305 00000C11 AA stosb 1306 00000C12 FECB dec bl 1307 00000C14 75DA jnz short .scalefac_get_lop 1308 00000C16 EB09 jmp short .skip_quickfill 1309 1310 .quickfill: 1311 00000C18 51 push ecx 1312 00000C19 0FB6CB movzx ecx, bl 1313 00000C1C B000 mov al, 0 ; NO_INTENSITY_FLAG 1314 00000C1E F3AA rep stosb 1315 00000C20 59 pop ecx 1316 1317 .skip_quickfill: 1318 00000C21 C1EA08 shr edx, 8 1319 00000C24 B312 mov bl, 18 1320 00000C26 80FA00 cmp dl, 0 ; @@get_bl_scalefacs_with_dl_bits 0 1321 00000C29 7428 jz short .quickfill@ 1322 1323 .scalefac_get_lop@: 1324 00000C2B 88D1 mov cl, dl 1325 00000C2D 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 1326 00000C2F D3E5 shl ebp, cl 1327 00000C31 D3C0 rol eax, cl 1328 00000C33 31E8 xor eax, ebp 1329 00000C35 28CD sub ch, cl 1330 00000C37 7913 jns short .cont@@ 1331 00000C39 88E9 mov cl, ch ; mp3mac_collect_more 1332 00000C3B 80C510 add ch, 10h 1333 00000C3E D3C5 rol ebp, cl 1334 00000C40 668B2E mov bp, [esi] 1335 00000C43 83C602 add esi, 2 1336 00000C46 66C1CD08 ror bp, 8 1337 00000C4A D3CD ror ebp, cl 1338 1339 .cont@@: 1340 00000C4C AA stosb 1341 00000C4D FECB dec bl 1342 00000C4F 75DA jnz short .scalefac_get_lop@ 1343 00000C51 EB09 jmp short .skip_quickfill@ 1344 1345 .quickfill@: 1346 00000C53 51 push ecx 1347 00000C54 0FB6CB movzx ecx, bl 1348 00000C57 B000 mov al, 0 1349 00000C59 F3AA rep stosb 1350 00000C5B 59 pop ecx 1351 1352 .skip_quickfill@: 1353 00000C5C 5B pop ebx 1354 00000C5D E914010000 jmp .body_lsf_zeropad 1355 1356 .body_lsf_zero_non_type2: 1357 00000C62 53 push ebx 1358 00000C63 C1CA08 ror edx, 8 1359 00000C66 88D6 mov dh, dl ; slen[0,1,2,3] = slen[0,0,1,1] 1360 00000C68 C1C210 rol edx, 16 1361 00000C6B 88F2 mov dl, dh 1362 00000C6D 8A4328 mov al, [ebx+40] ; [ebx+$mp3gr_scfsi] 1363 00000C70 C0E004 shl al, 4 ; move to upper 4bit 1364 00000C73 A2[88350500] mov byte [_@@scfsi], al 1365 00000C78 BB06050505 mov ebx, 5050506h ; num[0..3] 1366 1367 .body_lsf_zero_non_type2_lop: 1368 00000C7D D025[88350500] shl byte [_@@scfsi], 1 1369 00000C83 7238 jb short .body_lsf_zero_non_type2_copy 1370 00000C85 80FA00 cmp dl, 0 ; @@get_bl_scalefacs_with_dl_bits 0 1371 00000C88 7428 jz short .quickfill@@ 1372 1373 .scalefac_get_lop@@: 1374 00000C8A 88D1 mov cl, dl 1375 00000C8C 89E8 mov eax, ebp 1376 00000C8E D3E5 shl ebp, cl 1377 00000C90 D3C0 rol eax, cl 1378 00000C92 31E8 xor eax, ebp 1379 00000C94 28CD sub ch, cl 1380 00000C96 7913 jns short .cont@@@ 1381 00000C98 88E9 mov cl, ch 1382 00000C9A 80C510 add ch, 10h 1383 00000C9D D3C5 rol ebp, cl 1384 00000C9F 668B2E mov bp, [esi] 1385 00000CA2 83C602 add esi, 2 1386 00000CA5 66C1CD08 ror bp, 8 1387 00000CA9 D3CD ror ebp, cl 1388 1389 .cont@@@: 1390 00000CAB AA stosb 1391 00000CAC FECB dec bl 1392 00000CAE 75DA jnz short .scalefac_get_lop@@ 1393 00000CB0 EB09 jmp short .skip_quickfill@@ 1394 1395 .quickfill@@: 1396 00000CB2 51 push ecx 1397 00000CB3 0FB6CB movzx ecx, bl 1398 00000CB6 B000 mov al, 0 1399 00000CB8 F3AA rep stosb 1400 00000CBA 59 pop ecx 1401 1402 .skip_quickfill@@: 1403 00000CBB EB11 jmp short .body_lsf_zero_non_type2_next 1404 1405 .body_lsf_zero_non_type2_copy: 1406 00000CBD 51 push ecx 1407 00000CBE 89F0 mov eax, esi 1408 00000CC0 0FB6CB movzx ecx, bl ; copy 1409 00000CC3 8DB760F6FFFF lea esi, [edi-2464] ; [edi-$mp3gr_entrysiz] ; src=granule[0] ; from 1410 00000CC9 F3A4 rep movsb ; prev 1411 00000CCB 89C6 mov esi, eax 1412 00000CCD 59 pop ecx 1413 1414 .body_lsf_zero_non_type2_next: 1415 00000CCE C1EA08 shr edx, 8 ; dl=next slen 1416 00000CD1 C1EB08 shr ebx, 8 ; bl=next numfacs 1417 00000CD4 75A7 jnz short .body_lsf_zero_non_type2_lop 1418 00000CD6 5B pop ebx 1419 00000CD7 B000 mov al, 0 1420 00000CD9 AA stosb 1421 00000CDA E9A9000000 jmp .body_lsf_done 1422 1423 .body_lsf_nonzero: 1424 00000CDF 8B5314 mov edx, [ebx+14h] ; [ebx+$mp3gr_scalefac_compress] 1425 00000CE2 F705[B4B30000]0100- test dword [mp3_hdr_mode_ext], 1 ; MODE_EXT_I_STEREO 1425 00000CEA 0000 1426 00000CEC 740F jz short .normal_scalefac 1427 00000CEE 833D[680A0100]00 cmp dword [mp3_curr_channel], 0 1428 00000CF5 7406 jz short .normal_scalefac 1429 00000CF7 81C200020000 add edx, 512 ; for 2nd channel of intensity_stereo 1430 1431 .normal_scalefac: 1432 00000CFD 8A04D5[7D150500] mov al, [(mp3_lsf_sf_expand_exploded_table+5)+edx*8] 1433 00000D04 084318 or [ebx+24], al ; [ebx+$mp3gr_preflag] 1434 00000D07 53 push ebx 1435 00000D08 0FB604D5[7C150500] movzx eax, byte [(mp3_lsf_sf_expand_exploded_table+4)+edx*8] 1436 00000D10 837B2C02 cmp dword [ebx+44], 2 ; [ebx+$mp3gr_block_type] 1437 00000D14 7507 jnz short .this_tindex1 1438 00000D16 8B5B30 mov ebx, [ebx+48] ; [ebx+$mp3gr_switch_point] 1439 00000D19 8D449804 lea eax, [eax+ebx*4+4] 1440 1441 .this_tindex1: 1442 00000D1D 8B98[8C900000] mov ebx, [mp3_lsf_nsf_table+eax] 1443 00000D23 8B14D5[78150500] mov edx, dword [mp3_lsf_sf_expand_exploded_table+edx*8] 1444 1445 .scalefax_outer_lop: 1446 00000D2A 80FA00 cmp dl, 0 ; @@get_bl_scalefacs_with_dl_bits 1 1447 00000D2D 7435 jz short .@quickfil 1448 1449 .@scalefac_get_lop: 1450 00000D2F 88D1 mov cl, dl 1451 00000D31 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 1452 00000D33 D3E5 shl ebp, cl 1453 00000D35 D3C0 rol eax, cl 1454 00000D37 31E8 xor eax, ebp 1455 00000D39 28CD sub ch, cl 1456 00000D3B 7913 jns short .cont 1457 00000D3D 88E9 mov cl, ch 1458 00000D3F 80C510 add ch, 10h 1459 00000D42 D3C5 rol ebp, cl 1460 00000D44 668B2E mov bp, [esi] 1461 00000D47 83C602 add esi, 2 1462 00000D4A 66C1CD08 ror bp, 8 1463 00000D4E D3CD ror ebp, cl 1464 1465 .cont: 1466 00000D50 88D1 mov cl, dl ; numbits 1467 00000D52 88C4 mov ah, al 1468 00000D54 FEC4 inc ah ; val+1 1469 00000D56 D2EC shr ah, cl ; bit0=is.max.value 1470 00000D58 C0E407 shl ah, 7 ; bit7=is.max.value 1471 00000D5B 08E0 or al, ah ; apply NO_INTENSITY_FLAG 1472 00000D5D AA stosb 1473 00000D5E FECB dec bl 1474 00000D60 75CD jnz short .@scalefac_get_lop 1475 00000D62 EB09 jmp short .@skip_quickfill 1476 1477 .@quickfil: 1478 00000D64 51 push ecx 1479 00000D65 0FB6CB movzx ecx, bl 1480 00000D68 B080 mov al, 80h 1481 00000D6A F3AA rep stosb 1482 00000D6C 59 pop ecx 1483 1484 .@skip_quickfill: 1485 00000D6D C1EA08 shr edx, 8 1486 00000D70 C1EB08 shr ebx, 8 1487 00000D73 75B5 jnz short .scalefax_outer_lop 1488 00000D75 5B pop ebx 1489 1490 .body_lsf_zeropad: 1491 00000D76 89CA mov edx, ecx 1492 00000D78 8D8B98000000 lea ecx, [ebx+152] ; [ebx+$mp3gr_scale_factors+40] 1493 00000D7E 29F9 sub ecx, edi 1494 ;jb short fatal_scalefactors 1495 ; 21/10/2024 1496 00000D80 721E jb short fatalunexpected 1497 00000D82 B000 mov al, 0 1498 00000D84 F3AA rep stosb 1499 00000D86 89D1 mov ecx, edx 1500 1501 .body_lsf_done: 1502 00000D88 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_read_scalefac 1503 00000D8F 740E jz short .no_rdtsc_supported@@@ 1504 00000D91 0F31 rdtsc 1505 00000D93 0105[8C8C0000] add [rdtsc_read_scalefac], eax 1506 00000D99 1115[908C0000] adc [rdtsc_read_scalefac+4], edx 1507 1508 .no_rdtsc_supported@@@: 1509 00000D9F C3 retn 1510 1511 ; 21/10/2024 1512 ;fatal_scalefactors: 1513 ;jmp fatalunexpected 1514 1515 ; --------------------------------------------------------------------------- 1516 1517 ; 21/10/2024 1518 fatalunexpected: 1519 00000DA0 F735[F89A0000] div dword [zero] 1520 hang: 1521 00000DA6 EBFE jmp short hang 1522 1523 1524 ; =============== S U B R O U T I N E ======================================= 1525 1526 1527 mp3_get_exponents_from_scale_factors: 1528 00000DA8 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_xlat_scalefac 1529 00000DAF 740E jz short .no_rdtsc_supported 1530 00000DB1 0F31 rdtsc 1531 00000DB3 2905[A48C0000] sub [rdtsc_xlat_scalefac], eax 1532 00000DB9 1915[A88C0000] sbb [rdtsc_xlat_scalefac+4], edx 1533 1534 .no_rdtsc_supported: 1535 00000DBF 51 push ecx ; mp3mac_push_bitstream 1536 00000DC0 55 push ebp 1537 00000DC1 56 push esi 1538 00000DC2 C705[98350500]0000- mov dword [_@@rle_point], 0 1538 00000DCA 0000 1539 00000DCC 8A4B34 mov cl, [ebx+52] ; [ebx+$mp3gr_scalefac_scale] 1540 00000DCF BF[0C310100] mov edi, mp3_exponents 1541 00000DD4 31D2 xor edx, edx 1542 00000DD6 3B5320 cmp edx, [ebx+32] ; [ebx+$mp3gr_long_end] 1543 00000DD9 7345 jnb short .long_done 1544 00000DDB A1[8CB30000] mov eax, [mp3_hdr_sample_rate_index] 1545 00000DE0 6BC016 imul eax, 22 1546 00000DE3 8DA8[9C960000] lea ebp, [mp3_band_size_long+eax] 1547 00000DE9 8B4318 mov eax, [ebx+24] ; [ebx+$mp3gr_preflag] 1548 00000DEC 6BC016 imul eax, 22 1549 00000DEF 8DB0[EC970000] lea esi, [mp3_pretab+eax] 1550 1551 .long_lop: 1552 00000DF5 0FB6441370 movzx eax, byte [ebx+edx+112] ; [ebx+$mp3gr_scale_factors+edx] 1553 00000DFA 247F and al, 7Fh ; strip NO_INTENSITY_FLAG 1554 00000DFC 020416 add al, [esi+edx] 1555 00000DFF D3E0 shl eax, cl 1556 00000E01 F7D8 neg eax 1557 00000E03 034310 add eax, [ebx+16] ; [ebx+$mp3gr_global_gain] 1558 00000E06 C1E010 shl eax, 16 1559 00000E09 8A441500 mov al, [ebp+edx+0] 1560 00000E0D 0305[98350500] add eax, [_@@rle_point] 1561 00000E13 66A3[98350500] mov word [_@@rle_point], ax 1562 00000E19 AB stosd 1563 00000E1A 42 inc edx 1564 00000E1B 3B5320 cmp edx, [ebx+32] ; [ebx+$mp3gr_long_end] 1565 00000E1E 72D5 jb short .long_lop 1566 1567 .long_done: 1568 00000E20 8B531C mov edx, [ebx+28] ; [ebx+$mp3gr_short_start] 1569 00000E23 83FA0D cmp edx, 13 1570 00000E26 0F83AA000000 jnb .skip_shorts 1571 00000E2C A1[8CB30000] mov eax, [mp3_hdr_sample_rate_index] 1572 00000E31 6BC00D imul eax, 13 1573 00000E34 8DA8[6C970000] lea ebp, [mp3_band_size_short+eax] 1574 00000E3A 8B7320 mov esi, [ebx+32] ; [ebx+$mp3gr_long_end] 1575 00000E3D 8B4310 mov eax, [ebx+16] ; [ebx+$mp3gr_global_gain] 1576 ; IRP nn,0,1,2 1577 00000E40 2B4344 sub eax, [ebx+68] ; [ebx+$mp3gr_subblock_gain+nn*4] 1578 00000E43 A3[8C350500] mov [_@@gains], eax ; [@@gains+nn*4] 1579 00000E48 8B4310 mov eax, [ebx+16] 1580 00000E4B 2B4348 sub eax, [ebx+72] 1581 00000E4E A3[90350500] mov [_@@gains+4], eax ; [@@gains+nn*4] 1582 00000E53 8B4310 mov eax, [ebx+16] 1583 00000E56 2B434C sub eax, [ebx+76] ; [ebx+$mp3gr_subblock_gain+nn*4] 1584 00000E59 A3[94350500] mov [_@@gains+8], eax ; [@@gains+nn*4] 1585 1586 .short_lop: 1587 00000E5E 0FB6443370 movzx eax, byte [ebx+esi+112] ; [ebx+$mp3gr_scale_factors+esi] 1588 ; IRP nn,0,1,2 1589 00000E63 247F and al, 7Fh ; strip NO_INTENSITY_FLAG 1590 00000E65 46 inc esi 1591 00000E66 D3E0 shl eax, cl 1592 00000E68 F7D8 neg eax 1593 00000E6A 0305[8C350500] add eax, [_@@gains] ; [@@gains+nn*4] ; nn=0 1594 00000E70 C1E010 shl eax, 16 1595 00000E73 8A441500 mov al, [ebp+edx+0] ; bstab[edx] 1596 00000E77 0305[98350500] add eax, [_@@rle_point] 1597 00000E7D 66A3[98350500] mov word [_@@rle_point], ax 1598 00000E83 AB stosd ; msw=val, lsw=point 1599 00000E84 0FB6443370 movzx eax, byte [ebx+esi+112] ; [ebx+$mp3gr_scalefac_scale] 1600 00000E89 247F and al, 7Fh 1601 00000E8B 46 inc esi 1602 00000E8C D3E0 shl eax, cl 1603 00000E8E F7D8 neg eax 1604 00000E90 0305[90350500] add eax, [_@@gains+4] ; [@@gains+nn*4] ; nn = 1 1605 00000E96 C1E010 shl eax, 16 1606 00000E99 8A441500 mov al, [ebp+edx+0] 1607 00000E9D 0305[98350500] add eax, [_@@rle_point] 1608 00000EA3 66A3[98350500] mov word [_@@rle_point], ax 1609 00000EA9 AB stosd 1610 00000EAA 0FB6443370 movzx eax, byte [ebx+esi+70h] 1611 00000EAF 247F and al, 7Fh 1612 00000EB1 46 inc esi 1613 00000EB2 D3E0 shl eax, cl 1614 00000EB4 F7D8 neg eax 1615 00000EB6 0305[94350500] add eax, [_@@gains+8] ; [@@gains+nn*4] ; nn=2 1616 00000EBC C1E010 shl eax, 10h 1617 00000EBF 8A441500 mov al, [ebp+edx+0] 1618 00000EC3 0305[98350500] add eax, [_@@rle_point] 1619 00000EC9 66A3[98350500] mov word [_@@rle_point], ax 1620 00000ECF AB stosd 1621 00000ED0 42 inc edx 1622 00000ED1 83FA0D cmp edx, 13 1623 00000ED4 7288 jb short .short_lop 1624 1625 .skip_shorts: 1626 00000ED6 5E pop esi ; mp3mac_pop_bitstream 1627 00000ED7 5D pop ebp 1628 00000ED8 59 pop ecx 1629 00000ED9 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_xlat_scalefac 1630 00000EE0 740E jz short .no_rdtsc_supported@ 1631 00000EE2 0F31 rdtsc 1632 00000EE4 0105[A48C0000] add [rdtsc_xlat_scalefac], eax 1633 00000EEA 1115[A88C0000] adc [rdtsc_xlat_scalefac+4], edx 1634 1635 .no_rdtsc_supported@: 1636 00000EF0 C3 retn 1637 1638 1639 ; =============== S U B R O U T I N E ======================================= 1640 1641 1642 mp3_huffman_decode: 1643 00000EF1 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; in: ebx=granule, out: [sb_hybrid..] 1644 ; timelog_start rdtsc_read_huffman 1645 00000EF8 740E jz short .no_rdtsc_supported 1646 00000EFA 0F31 rdtsc 1647 00000EFC 2905[BC8C0000] sub [rdtsc_read_huffman], eax 1648 00000F02 1915[C08C0000] sbb [rdtsc_read_huffman+4], edx 1649 1650 .no_rdtsc_supported: 1651 00000F08 8B4308 mov eax, [ebx+8] ; [ebx+$mp3gr_part2_3_end] 1652 00000F0B C1E803 shr eax, 3 1653 00000F0E 0305[740A0100] add eax, [mp3_bitstream_start] 1654 00000F14 A3[AC350500] mov [_@@coarse_end], eax 1655 00000F19 31FF xor edi, edi 1656 00000F1B C705[B4350500]- mov dword [_@@rle_ptr], mp3_exponents 1656 00000F21 [0C310100] 1657 00000F25 C705[B0350500]0000- mov dword [_@rle_point], 0 1657 00000F2D 0000 1658 00000F2F C705[9C350500]0000- mov dword [_@@III], 0 ; i=0 1658 00000F37 0000 1659 1660 .low_freq_lop_i: 1661 00000F39 8B15[9C350500] mov edx, [_@@III] ; for i=0 to 2 1662 ; low frequencies (called big_values)... 1663 00000F3F 8B449350 mov eax, [ebx+edx*4+80] ; [ebx+$mp3gr_region_size+edx*4] 1664 00000F43 83F800 cmp eax, 0 1665 00000F46 0F84D9020000 jz .low_freq_next_i 1666 00000F4C A3[A0350500] mov [_@@JJJ], eax 1667 00000F51 8B549338 mov edx, [ebx+edx*4+56] ; [ebx+$mp3gr_table_select+edx*4] 1668 ; select vlc table 1669 00000F55 0FB68412[5C960000] movzx eax, byte [mp3_huff_data+edx*2] ; get huff.table number 1670 00000F5D 83F800 cmp eax, 0 ; huff.table 1671 00000F60 7528 jnz short .low_freq_nonzero 1672 00000F62 51 push ecx 1673 00000F63 57 push edi 1674 00000F64 8DBCBBA0000000 lea edi, [ebx+edi*4+160] ; [ebx+$mp3gr_sb_hybrid+edi*4] 1675 00000F6B 8B0D[A0350500] mov ecx, [_@@JJJ] 1676 00000F71 D1E1 shl ecx, 1 1677 00000F73 31C0 xor eax, eax ; when huff.table=0, 1678 ; simply set NUM*2 entries to zero 1679 00000F75 F3AB rep stosd 1680 00000F77 5F pop edi 1681 00000F78 59 pop ecx 1682 00000F79 033D[A0350500] add edi, [_@@JJJ] ; raise index accordingly (by num*2) 1683 00000F7F 033D[A0350500] add edi, [_@@JJJ] 1684 00000F85 E99B020000 jmp .low_freq_next_i 1685 1686 .low_freq_nonzero: 1687 00000F8A A3[A8350500] mov [_@@vlc_table], eax ; =1..15 1688 00000F8F 83F80E cmp eax, 14 ; only table 14..15 have linbits 1689 00000F92 0F83FA000000 jnb .with_linbits ; so table 0..13 can use faster code... 1690 1691 .low_freq_lop_j_small: 1692 00000F98 3B35[AC350500] cmp esi, [_@@coarse_end] ; loop @@JJJ times.. 1693 00000F9E 0F87CF000000 ja .small_near_end 1694 1695 .small_not_end: 1696 00000FA4 3B3D[B0350500] cmp edi, [_@rle_point] ; @@get_runlength small 1697 00000FAA 0F839E030000 jnb .rle_fetch_next_small 1698 1699 .rle_back_small: 1700 00000FB0 8B15[A8350500] mov edx, [_@@vlc_table] ; get huffcode 1701 1702 .get_child_lop: 1703 00000FB6 8A0C95[8E350100] mov cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode 1704 ; in: edx=table, out: eax=data 1705 ; bits (table size) (-7..-1) 1706 00000FBD 668B1495[8C350100] mov dx, word [huff_tree_buf+edx*4] ; code (child table) 1707 00000FC5 89E8 mov eax, ebp ; mov eax,mp3_col32 ; peek bitstream 1708 00000FC7 D3E8 shr eax, cl 1709 00000FC9 01C2 add edx, eax 1710 00000FCB 8A0C95[8E350100] mov cl, [(huff_tree_buf+2)+edx*4] ; bits (of entry) 1711 00000FD2 80F900 cmp cl, 0 1712 00000FD5 7823 js short .got_child 1713 00000FD7 0FB70495[8C350100] movzx eax, word [huff_tree_buf+edx*4] ; return data value 1714 00000FDF D3E5 shl ebp, cl ; shl mp3_col32,cl ; discard cl bits 1715 00000FE1 28CD sub ch, cl ; sub mp3_colNN,cl 1716 00000FE3 7932 jns short .got_done 1717 00000FE5 88E9 mov cl, ch ; mp3mac_collect_more 1718 ; mov cl,mp3_colNN ; byte ptr [mp3_numbits_collected] 1719 00000FE7 80C510 add ch, 16 ; byte ptr [mp3_numbits_collected] 1720 00000FEA D3C5 rol ebp, cl ; dword ptr [mp3_collected_data] 1721 00000FEC 668B2E mov bp, [esi] 1722 00000FEF 83C602 add esi, 2 1723 00000FF2 66C1CD08 ror bp, 8 ; ror mp3_col16,8 ; endianess 1724 00000FF6 D3CD ror ebp, cl ; ror mp3_col32,cl ; dword ptr [mp3_collected_data] 1725 00000FF8 EB1D jmp short .got_done 1726 1727 .got_child: 1728 00000FFA C1E509 shl ebp, 9 ; shl mp3_col32,CHILD_BITS 1729 ; discard 7 bits 1730 ; (assuming that parents are always 7bit wide) 1731 00000FFD 80ED09 sub ch, 9 1732 00001000 79B4 jns short .get_child_lop 1733 00001002 88E9 mov cl, ch ; mp3mac_collect_more 1734 00001004 80C510 add ch, 10h 1735 00001007 D3C5 rol ebp, cl 1736 00001009 668B2E mov bp, [esi] 1737 0000100C 83C602 add esi, 2 1738 0000100F 66C1CD08 ror bp, 8 1739 00001013 D3CD ror ebp, cl 1740 00001015 EB9F jmp short .get_child_lop 1741 1742 .got_done: 1743 00001017 50 push eax 1744 00001018 C1E804 shr eax, 4 ; x 1745 0000101B 7417 jz short .this_sign ; @@getexpval 0 ; @@getexpval macro has_linbits 1746 ; eax=0 (without sign) ; when x=0 1747 0000101D 8B15[BC350500] mov edx, [_@@rle_val_x_40h] 1748 00001023 8B8482[F8780400] mov eax, [mp3_expval_table+edx+eax*4] 1749 0000102A FECD dec ch ; mp3mac_get_bit_to_cy 1750 ; ;jnc short @@this_sign 1751 ; ;neg eax 1752 0000102C D1E5 shl ebp, 1 ; dec mp3_colNN ; shl mp3_col32,1 ; cy=data 1753 0000102E 19D2 sbb edx, edx ; cy=0,1 --> 0,FFFFFFFF 1754 00001030 31D0 xor eax, edx ; invert if cy was 1 ; get sign (negate if sign=1) 1755 00001032 29D0 sub eax, edx ; add 1 if cy was 1 1756 1757 .this_sign: 1758 00001034 8984BBA0000000 mov [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0] 1759 0000103B 58 pop eax 1760 0000103C 83E00F and eax, 0Fh ; y 1761 0000103F 7417 jz short .this_sign@ ; @@getexpval 0 1762 00001041 8B15[BC350500] mov edx, [_@@rle_val_x_40h] 1763 00001047 8B8482[F8780400] mov eax, [mp3_expval_table+edx+eax*4] 1764 0000104E FECD dec ch 1765 00001050 D1E5 shl ebp, 1 1766 00001052 19D2 sbb edx, edx 1767 00001054 31D0 xor eax, edx 1768 00001056 29D0 sub eax, edx 1769 1770 .this_sign@: 1771 00001058 8984BBA4000000 mov [ebx+edi*4+164], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+4] 1772 0000105F 83C702 add edi, 2 1773 00001062 FF0D[A0350500] dec dword [_@@JJJ] 1774 00001068 0F852AFFFFFF jnz .low_freq_lop_j_small 1775 0000106E E9B2010000 jmp .low_freq_next_i 1776 1777 .small_near_end: 1778 00001073 89F0 mov eax, esi ; mp3mac_bitstream_get_position 1779 00001075 2B05[740A0100] sub eax, [mp3_bitstream_start] 1780 0000107B 0FBED5 movsx edx, ch ; mp3_colNN 1781 0000107E F7DA neg edx 1782 00001080 8D44C2F0 lea eax, [edx+eax*8-16] 1783 00001084 3B4308 cmp eax, [ebx+8] ; [ebx+$mp3gr_part2_3_end] 1784 00001087 0F8217FFFFFF jb .small_not_end 1785 0000108D E993010000 jmp .low_freq_next_i 1786 1787 .with_linbits: 1788 00001092 0FB68412[5D960000] movzx eax, byte [(mp3_huff_data+1)+edx*2] 1789 0000109A A3[A4350500] mov [_@@linbits], eax 1790 1791 .low_freq_lop_j: 1792 0000109F 3B35[AC350500] cmp esi, [_@@coarse_end] ; mp3mac_bitstream_get_position 1793 ; loop @@JJJ times... 1794 000010A5 0F8725030000 ja .lop_j_near_end 1795 1796 .small_not_end@: 1797 000010AB 3B3D[B0350500] cmp edi, [_@rle_point] ; @@get_runlength small 1798 000010B1 0F83C5020000 jnb .rle_fetch_next_full 1799 1800 .rle_back_full: 1801 000010B7 8B15[A8350500] mov edx, [_@@vlc_table] ; get huffcode 1802 1803 .get_child_lop@: 1804 000010BD 8A0C95[8E350100] mov cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode 1805 ; in: edx=table, out: eax=data 1806 ; bits (table size) (-7..-1) 1807 000010C4 668B1495[8C350100] mov dx, word [huff_tree_buf+edx*4] ; code (child table) 1808 000010CC 89E8 mov eax, ebp 1809 000010CE D3E8 shr eax, cl 1810 000010D0 01C2 add edx, eax 1811 000010D2 8A0C95[8E350100] mov cl, [(huff_tree_buf+2)+edx*4] ; bits (of entry) 1812 000010D9 80F900 cmp cl, 0 1813 000010DC 7823 js short .got_child@ 1814 000010DE 0FB70495[8C350100] movzx eax, word [huff_tree_buf+edx*4] ; return data value 1815 000010E6 D3E5 shl ebp, cl ; discard cl bits 1816 000010E8 28CD sub ch, cl 1817 000010EA 7932 jns short .got_done@ 1818 000010EC 88E9 mov cl, ch ; mp3mac_collect_more 1819 000010EE 80C510 add ch, 10h 1820 000010F1 D3C5 rol ebp, cl 1821 000010F3 668B2E mov bp, [esi] 1822 000010F6 83C602 add esi, 2 1823 000010F9 66C1CD08 ror bp, 8 1824 000010FD D3CD ror ebp, cl 1825 000010FF EB1D jmp short .got_done@ 1826 1827 .got_child@: 1828 00001101 C1E509 shl ebp, 9 1829 00001104 80ED09 sub ch, 9 1830 00001107 79B4 jns short .get_child_lop@ 1831 00001109 88E9 mov cl, ch 1832 0000110B 80C510 add ch, 10h 1833 0000110E D3C5 rol ebp, cl 1834 00001110 668B2E mov bp, [esi] 1835 00001113 83C602 add esi, 2 1836 00001116 66C1CD08 ror bp, 8 1837 0000111A D3CD ror ebp, cl 1838 0000111C EB9F jmp short .get_child_lop@ 1839 1840 .got_done@: 1841 0000111E 50 push eax 1842 0000111F C1E804 shr eax, 4 ; x 1843 00001122 746F jz short .@this_sign ; @@getexpval 1 1844 00001124 8B15[B8350500] mov edx, [_@@rle_val] 1845 0000112A 83F80F cmp eax, 15 1846 0000112D 7250 jb short .small ; when x=1..14 1847 0000112F 8A0D[A4350500] mov cl, byte [_@@linbits] ; =0..13 ; when x=15, with linbits 1848 00001135 89E8 mov eax, ebp ; mp3mac_get_n_bits cl ; value = 0..1FFFh 1849 00001137 D3E5 shl ebp, cl ; mp3mac_collect_more 1850 00001139 D3C0 rol eax, cl 1851 0000113B 31E8 xor eax, ebp 1852 0000113D 28CD sub ch, cl 1853 0000113F 7913 jns short .cont 1854 00001141 88E9 mov cl, ch ; mp3mac_collect_more 1855 00001143 80C510 add ch, 16 1856 00001146 D3C5 rol ebp, cl 1857 00001148 668B2E mov bp, [esi] 1858 0000114B 83C602 add esi, 2 1859 0000114E 66C1CD08 ror bp, 8 1860 00001152 D3CD ror ebp, cl 1861 1862 .cont: 1863 00001154 88D1 mov cl, dl ; exponent.lsb 1864 00001156 80E103 and cl, 3 ; exponent.lsb 1865 00001159 C1EA02 shr edx, 2 ; exponent.msb 1866 0000115C 8D04853C000000 lea eax, [eax*4+60] ; (value+15)*4 1867 00001163 08C8 or al, cl ; exponent.lsb+(value+15)*4 1868 00001165 8A88[CCEF0100] mov cl, [mp3_table_4_3_exp+eax] 1869 0000116B 8B0485[08700200] mov eax, [mp3_table_4_3_value+eax*4] 1870 00001172 28D1 sub cl, dl ; sub exponent.msb 1871 00001174 D3E8 shr eax, cl 1872 00001176 80F91F cmp cl, 31 1873 00001179 760E jbe short .get_sign 1874 0000117B 31C0 xor eax, eax 1875 0000117D EB0A jmp short .get_sign 1876 1877 .small: 1878 0000117F C1E206 shl edx, 6 ; shl edx,4+2 ; mul16*4 ; when x<15 aka x=1..14 1879 00001182 8B8482[F8780400] mov eax, [mp3_expval_table+edx+eax*4] 1880 1881 .get_sign: 1882 00001189 FECD dec ch ; mp3mac_get_bit_to_cy 1883 0000118B D1E5 shl ebp, 1 1884 0000118D 19D2 sbb edx, edx ; get sign (negate if sign=1) 1885 0000118F 31D0 xor eax, edx 1886 00001191 29D0 sub eax, edx 1887 1888 .@this_sign: 1889 00001193 8984BBA0000000 mov [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0] 1890 0000119A 58 pop eax 1891 0000119B 83E00F and eax, 0Fh ; y 1892 0000119E 746F jz short .@this_sign@ ; @@getexpval 1 1893 000011A0 8B15[B8350500] mov edx, [_@@rle_val] 1894 000011A6 83F80F cmp eax, 0Fh 1895 000011A9 7250 jb short .small@ 1896 000011AB 8A0D[A4350500] mov cl, byte [_@@linbits] 1897 000011B1 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 1898 000011B3 D3E5 shl ebp, cl 1899 000011B5 D3C0 rol eax, cl 1900 000011B7 31E8 xor eax, ebp 1901 000011B9 28CD sub ch, cl 1902 000011BB 7913 jns short .cont@ 1903 000011BD 88E9 mov cl, ch ; mp3mac_collect_more 1904 000011BF 80C510 add ch, 10h 1905 000011C2 D3C5 rol ebp, cl 1906 000011C4 668B2E mov bp, [esi] 1907 000011C7 83C602 add esi, 2 1908 000011CA 66C1CD08 ror bp, 8 1909 000011CE D3CD ror ebp, cl 1910 1911 .cont@: 1912 000011D0 88D1 mov cl, dl 1913 000011D2 80E103 and cl, 3 1914 000011D5 C1EA02 shr edx, 2 1915 000011D8 8D04853C000000 lea eax, [eax*4+60] 1916 000011DF 08C8 or al, cl 1917 000011E1 8A88[CCEF0100] mov cl, [mp3_table_4_3_exp+eax] 1918 000011E7 8B0485[08700200] mov eax, [mp3_table_4_3_value+eax*4] 1919 000011EE 28D1 sub cl, dl 1920 000011F0 D3E8 shr eax, cl 1921 000011F2 80F91F cmp cl, 31 1922 000011F5 760E jbe short .get_sign@ 1923 000011F7 31C0 xor eax, eax 1924 000011F9 EB0A jmp short .get_sign@ 1925 1926 .small@: 1927 000011FB C1E206 shl edx, 6 1928 000011FE 8B8482[F8780400] mov eax, [mp3_expval_table+edx+eax*4] 1929 1930 .get_sign@: 1931 00001205 FECD dec ch ; dec mp3_colNN 1932 00001207 D1E5 shl ebp, 1 ; shl mp3_col32,1 ; cy=data 1933 00001209 19D2 sbb edx, edx ; cy=0,1 --> 0,FFFFFFFF 1934 0000120B 31D0 xor eax, edx ; invert if cy was 1 1935 0000120D 29D0 sub eax, edx ; add 1 if cy was 1 1936 1937 .@this_sign@: 1938 0000120F 8984BBA4000000 mov [ebx+edi*4+164], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+4] 1939 00001216 83C702 add edi, 2 ; next j 1940 00001219 FF0D[A0350500] dec dword [_@@JJJ] 1941 0000121F 0F857AFEFFFF jnz .low_freq_lop_j 1942 1943 .low_freq_next_i: 1944 00001225 FF05[9C350500] inc dword [_@@III] ; next i 1945 0000122B 833D[9C350500]03 cmp dword [_@@III], 3 1946 00001232 0F8201FDFFFF jb .low_freq_lop_i 1947 00001238 81FF3C020000 cmp edi, 572 ; aka 576-4 ; skip if less than 4 entries left 1948 0000123E 0F87DA000000 ja .high_freq_done 1949 1950 .high_freq_lop: 1951 00001244 3B35[AC350500] cmp esi, [_@@coarse_end] 1952 0000124A 7629 jbe short .high_freq_inrange 1953 0000124C 89F0 mov eax, esi ; mp3mac_bitstream_get_position 1954 0000124E 2B05[740A0100] sub eax, [mp3_bitstream_start] 1955 00001254 0FBED5 movsx edx, ch ; mp3_colNN 1956 00001257 F7DA neg edx 1957 00001259 8D44C2F0 lea eax, [edx+eax*8-16] 1958 0000125D 3B4308 cmp eax, [ebx+8] ; [ebx+$mp3gr_part2_3_end] ; check end 1959 00001260 7213 jb short .high_freq_inrange ; not yet end 1960 00001262 0F84B6000000 jz .high_freq_done ; okay, exact end 1961 00001268 83FF04 cmp edi, 4 1962 0000126B 7203 jb short .high_freq_cannot_stepback 1963 0000126D 83EF04 sub edi, 4 ; stepback, s_index-4 ; dst stepback 1964 1965 .high_freq_cannot_stepback: 1966 00001270 E9A9000000 jmp .high_freq_done 1967 1968 .high_freq_inrange: 1969 00001275 8B5324 mov edx, [ebx+24h] ; [ebx+$mp3gr_count1table_select] 1970 ; get huffcode (quad_vlc) 1971 1972 .get_child_lop@@: 1973 00001278 8A0C95[8E350100] mov cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode 1974 0000127F 668B1495[8C350100] mov dx, word [huff_tree_buf+edx*4] 1975 00001287 89E8 mov eax, ebp 1976 00001289 D3E8 shr eax, cl 1977 0000128B 01C2 add edx, eax 1978 0000128D 8A0C95[8E350100] mov cl, [(huff_tree_buf+2)+edx*4] 1979 00001294 80F900 cmp cl, 0 1980 00001297 7823 js short .got_child@@ 1981 00001299 0FB70495[8C350100] movzx eax, word [huff_tree_buf+edx*4] 1982 000012A1 D3E5 shl ebp, cl 1983 000012A3 28CD sub ch, cl 1984 000012A5 7932 jns short .got_done@@ 1985 000012A7 88E9 mov cl, ch 1986 000012A9 80C510 add ch, 10h 1987 000012AC D3C5 rol ebp, cl 1988 000012AE 668B2E mov bp, [esi] 1989 000012B1 83C602 add esi, 2 1990 000012B4 66C1CD08 ror bp, 8 1991 000012B8 D3CD ror ebp, cl 1992 000012BA EB1D jmp short .got_done@@ 1993 1994 .got_child@@: 1995 000012BC C1E509 shl ebp, 9 1996 000012BF 80ED09 sub ch, 9 1997 000012C2 79B4 jns short .get_child_lop@@ 1998 000012C4 88E9 mov cl, ch 1999 000012C6 80C510 add ch, 10h 2000 000012C9 D3C5 rol ebp, cl 2001 000012CB 668B2E mov bp, [esi] 2002 000012CE 83C602 add esi, 2 2003 000012D1 66C1CD08 ror bp, 8 2004 000012D5 D3CD ror ebp, cl 2005 000012D7 EB9F jmp short .get_child_lop@@ 2006 2007 .got_done@@: 2008 000012D9 88C2 mov dl, al ; flags 2009 000012DB C0E204 shl dl, 4 ; flags, to upper 4bit 2010 000012DE B604 mov dh, 4 ; lopcount 2011 2012 .high_freq_flag_lop: 2013 000012E0 31C0 xor eax, eax 2014 000012E2 D0E2 shl dl, 1 ; flag 2015 000012E4 7320 jnb short .high_freq_flag_this 2016 000012E6 3B3D[B0350500] cmp edi, [_@rle_point] ; @@get_runlength quads 2017 000012EC 0F83B8000000 jnb .rle_fetch_next_quads 2018 2019 .rle_back_quads: 2020 000012F2 A1[B8350500] mov eax, [_@@rle_val] 2021 000012F7 8B0485[F8700400] mov eax, [mp3_exp_table+eax*4] ; xlat and get sign 2022 000012FE FECD dec ch ; mp3mac_get_bit_to_cy 2023 00001300 D1E5 shl ebp, 1 2024 00001302 7302 jnb short .high_freq_flag_this ; 2025 ; sbb edx, edx ; cy=0,1 --> 0,FFFFFFFF 2026 ; xor eax, edx ; invert if cy was 1 2027 ; sub eax, edx ; add 1 if cy was 1 2028 00001304 F7D8 neg eax 2029 2030 .high_freq_flag_this: 2031 00001306 8984BBA0000000 mov [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0] 2032 0000130D 47 inc edi 2033 0000130E FECE dec dh 2034 00001310 75CE jnz short .high_freq_flag_lop 2035 00001312 81FF3C020000 cmp edi, 572 ; aka 576-4 ; loop while space for another 4 values 2036 00001318 0F8626FFFFFF jbe .high_freq_lop 2037 2038 .high_freq_done: 2039 0000131E 897B5C mov [ebx+92], edi ; [ebx+$mp3gr_num_nonzero_hybrids] 2040 00001321 51 push ecx 2041 00001322 B940020000 mov ecx, 576 ; end 2042 00001327 29F9 sub ecx, edi ; remain = end-curr 2043 ; zeropad remaining entries (can be 0 or 2 dwords, 2044 ; or more. If above loop was aborted) 2045 00001329 8DBCBBA0000000 lea edi, [ebx+edi*4+160] ; [ebx+$mp3gr_sb_hybrid+edi*4] 2046 00001330 31C0 xor eax, eax 2047 00001332 F3AB rep stosd 2048 00001334 59 pop ecx 2049 00001335 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_read_huffman 2050 0000133C 740E jz short .no_rdtsc_supported@ 2051 0000133E 0F31 rdtsc 2052 00001340 0105[BC8C0000] add [rdtsc_read_huffman], eax 2053 00001346 1115[C08C0000] adc [rdtsc_read_huffman+4], edx 2054 2055 .no_rdtsc_supported@: 2056 0000134C F8 clc ; out: cy=0=okay 2057 0000134D C3 retn 2058 2059 .rle_fetch_next_small: 2060 0000134E A1[B4350500] mov eax, [_@@rle_ptr] ; @@next_runlength small 2061 00001353 8305[B4350500]04 add dword [_@@rle_ptr], 4 2062 0000135A 8B00 mov eax, [eax] 2063 0000135C 6639C7 cmp di, ax 2064 0000135F 73ED jnb short .rle_fetch_next_small 2065 00001361 66A3[B0350500] mov word [_@rle_point], ax 2066 00001367 C1E810 shr eax, 16 2067 0000136A A3[B8350500] mov [_@@rle_val], eax 2068 0000136F C1E006 shl eax, 6 2069 00001372 A3[BC350500] mov [_@@rle_val_x_40h], eax 2070 00001377 E934FCFFFF jmp .rle_back_small 2071 2072 .rle_fetch_next_full: 2073 0000137C A1[B4350500] mov eax, [_@@rle_ptr] ; @@next_runlength full 2074 00001381 8305[B4350500]04 add dword [_@@rle_ptr], 4 2075 00001388 8B00 mov eax, [eax] 2076 0000138A 6639C7 cmp di, ax 2077 0000138D 73ED jnb short .rle_fetch_next_full 2078 0000138F 66A3[B0350500] mov word [_@rle_point], ax 2079 00001395 C1E810 shr eax, 16 2080 00001398 A3[B8350500] mov [_@@rle_val], eax 2081 0000139D C1E006 shl eax, 6 2082 000013A0 A3[BC350500] mov [_@@rle_val_x_40h], eax 2083 000013A5 E90DFDFFFF jmp .rle_back_full 2084 2085 .rle_fetch_next_quads: 2086 000013AA A1[B4350500] mov eax, [_@@rle_ptr] ; msw=val, lsw=point 2087 000013AF 8305[B4350500]04 add dword [_@@rle_ptr], 4 ; 2+2 2088 000013B6 8B00 mov eax, [eax] 2089 000013B8 6639C7 cmp di, ax ; needed if rle fetching was skipped 2090 000013BB 73ED jnb short .rle_fetch_next_quads 2091 000013BD 66A3[B0350500] mov word [_@rle_point], ax 2092 000013C3 C1E810 shr eax, 16 2093 000013C6 A3[B8350500] mov [_@@rle_val], eax 2094 000013CB E922FFFFFF jmp .rle_back_quads 2095 2096 .lop_j_near_end: 2097 000013D0 89F0 mov eax, esi 2098 000013D2 2B05[740A0100] sub eax, [mp3_bitstream_start] 2099 000013D8 0FBED5 movsx edx, ch 2100 000013DB F7DA neg edx 2101 000013DD 8D44C2F0 lea eax, [edx+eax*8-16] 2102 000013E1 3B4308 cmp eax, [ebx+8] 2103 000013E4 0F82C1FCFFFF jb .small_not_end@ 2104 000013EA E936FEFFFF jmp .low_freq_next_i 2105 2106 2107 ; =============== S U B R O U T I N E ======================================= 2108 2109 2110 mp3_compute_stereo: 2111 000013EF 833D[98B30000]02 cmp dword [mp3_output_num_channels], 2 ; in: ebx=granule(s) 2112 000013F6 7515 jnz short .no_stereo 2113 000013F8 833D[B4B30000]02 cmp dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO 2114 ; only MS stereo 2115 000013FF 740D jz short mp3_compute_ms_stereo 2116 00001401 F705[B4B30000]0100- test dword [mp3_hdr_mode_ext], 1 ; MODE_EXT_I_STEREO 2116 00001409 0000 2117 ; intensity stereo (optionally with MS stereo) 2118 0000140B 7567 jnz short mp3_compute_i_stereo 2119 2120 .no_stereo: 2121 0000140D C3 retn 2122 2123 mp3_compute_ms_stereo: 2124 0000140E F605[1C8C0000]10 test byte [cpuid_flags], 10h ; ms_stereo is most commonly used 2125 ; the 1/sqrt(2) normalization factor is included 2126 ; in the global gain 2127 00001415 740E jz short .no_rdtsc_supported ; timelog_start rdtsc_ms_stereo 2128 00001417 0F31 rdtsc 2129 00001419 2905[D48C0000] sub [rdtsc_ms_stereo], eax 2130 0000141F 1915[D88C0000] sbb [rdtsc_ms_stereo+4], edx 2131 2132 .no_rdtsc_supported: 2133 00001425 8DBBE0130000 lea edi, [ebx+5088] ; [ebx+$mp3gr_sb_hybrid+$mp3gr_entrysiz*2] 2134 ; for ch1 (2nd channel) 2135 0000142B 8B4B5C mov ecx, [ebx+92] ; [ebx+$mp3gr_num_nonzero_hybrids] ; ch0 2136 0000142E 8B839C130000 mov eax, [ebx+5020] ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)] ; ch1 2137 00001434 39C1 cmp ecx, eax 2138 00001436 7702 ja short .this_len 2139 00001438 89C1 mov ecx, eax 2140 2141 .this_len: 2142 0000143A E320 jecxz .ms_stereo_done 2143 0000143C 894B5C mov [ebx+92], ecx ; [ebx+$mp3gr_num_nonzero_hybrids] ; ch0 2144 0000143F 898B9C130000 mov [ebx+5020], ecx ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)] ; ch1 2145 2146 .ms_stereo_lop: 2147 00001445 8B87C0ECFFFF mov eax, [edi-4928] ; for i=0 to 576-1 2148 ; [edi+@@ch0] 2149 ; @@ch0 equ (-$mp3gr_entrysiz*2) ; granule for channel=0 2150 ; tmp0 = granule.ch0.sb_hybrid[i] 2151 0000144B 8B17 mov edx, [edi] ; @@ch1 equ 0 ; granule for channel=1 2152 ; [edi+@@ch1] 2153 ; tmp1 = granule.ch1.sb_hybrid[i] 2154 0000144D 29D0 sub eax, edx ; tmp0 - tmp1 2155 0000144F 8D1450 lea edx, [eax+edx*2] ; tmp0 + tmp1 2156 00001452 8997C0ECFFFF mov [edi-4928], edx ; [edi+@@ch0] 2157 ; granule.ch0.sb_hybrid[i] = tmp0 + tmp1 2158 00001458 AB stosd ; [edi+@@ch1] 2159 ; granule.ch1.sb_hybrid[i] = tmp0 - tmp1 2160 00001459 49 dec ecx 2161 0000145A 75E9 jnz short .ms_stereo_lop 2162 2163 .ms_stereo_done: 2164 0000145C F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_ms_stereo 2165 00001463 740E jz short .no_rdtsc_supported@ 2166 00001465 0F31 rdtsc 2167 00001467 0105[D48C0000] add [rdtsc_ms_stereo], eax 2168 0000146D 1115[D88C0000] adc [rdtsc_ms_stereo+4], edx 2169 2170 .no_rdtsc_supported@: 2171 00001473 C3 retn 2172 2173 mp3_compute_i_stereo: 2174 00001474 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_i_stereo 2175 0000147B 740E jz short .no_rdtsc_supported@@@ 2176 0000147D 0F31 rdtsc 2177 0000147F 2905[EC8C0000] sub [rdtsc_i_stereo], eax 2178 00001485 1915[F08C0000] sbb [rdtsc_i_stereo+4], edx 2179 2180 .no_rdtsc_supported@@@: 2181 0000148B C7435C40020000 mov dword [ebx+92], 576 ; ch0 2182 ; [ebx+$mp3gr_num_nonzero_hybrids] 2183 00001492 C7839C130000400200- mov dword [ebx+5020], 576 ; ch1 2183 0000149B 00 2184 ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)] 2185 0000149C 8B4320 mov eax, [ebx+32] ; [ebx+$mp3gr_long_end] 2186 0000149F A3[F8350500] mov [_@@n_long_sfb], eax 2187 000014A4 B80D000000 mov eax, 13 ; 39/3 2188 000014A9 2B431C sub eax, [ebx+28] ; [ebx+$mp3gr_short_start] 2189 000014AC 8D0440 lea eax, [eax+eax*2] ; mul3 2190 000014AF A3[FC350500] mov [_@@n_short_sfb], eax 2191 000014B4 0305[F8350500] add eax, [_@@n_long_sfb] 2192 000014BA A3[00360500] mov [_@@n_sfb], eax ; 2193 ; n_sfb = gr->n_long_sfb + gr->n_short_sfb; 2194 000014BF 803D[FC350500]00 cmp byte [_@@n_short_sfb], 0 2195 000014C6 B801000000 mov eax, 1 2196 000014CB 7405 jz short .without_short 2197 000014CD B803000000 mov eax, 3 ; max_blocks = gr->n_short_sfb ? 3 : 1; 2198 2199 .without_short: 2200 000014D2 A3[C4350500] mov [_@@max_blocks], eax 2201 000014D7 BF[CC350500] mov edi, _@@sfb_array 2202 000014DC A1[8CB30000] mov eax, [mp3_hdr_sample_rate_index] ; bstab 2203 000014E1 6BC016 imul eax, 22 2204 000014E4 8DB0[9C960000] lea esi, [mp3_band_size_long+eax] 2205 000014EA 8B0D[F8350500] mov ecx, [_@@n_long_sfb] 2206 000014F0 F3A4 rep movsb 2207 000014F2 A1[8CB30000] mov eax, [mp3_hdr_sample_rate_index] 2208 000014F7 6BC00D imul eax, 13 2209 000014FA 8DB0[6C970000] lea esi, [mp3_band_size_short+eax] ; merge lieff-style 2210 00001500 8B0D[FC350500] mov ecx, [_@@n_short_sfb] 2211 00001506 E30C jecxz .make_sfb_done ; doing that here is a bit slow, 2212 ; it would be better to pre-compute 2213 ; all merged-combinations 2214 00001508 03731C add esi, [ebx+28] ; [ebx+$mp3gr_short_start] 2215 2216 .make_sfb_lop: 2217 0000150B AC lodsb 2218 0000150C AA stosb 2219 0000150D AA stosb 2220 0000150E AA stosb 2221 0000150F 83E903 sub ecx, 3 2222 00001512 75F7 jnz short .make_sfb_lop 2223 2224 .make_sfb_done: 2225 00001514 E888000000 call _@@find_top_bands ; 2226 ; L3_stereo_top_band(left+576,gr->sfbtab,n_sfb,max_band); 2227 00001519 803D[F8350500]00 cmp byte [_@@n_long_sfb], 0 2228 00001520 7420 jz short .without_long 2229 00001522 A1[C0350500] mov eax, dword [_@@max_bands] 2230 00001527 38C4 cmp ah, al ; if (gr->n_long_sfb) 2231 00001529 7F02 jg short .not_max1 ; max_band[0] = max_band[1] = max_band[2] = MINIMP3_MAX 2232 ; (MINIMP3_MAX(max_band[0], max_band[1]), max_band[2]); 2233 0000152B 88C4 mov ah, al 2234 2235 .not_max1: 2236 0000152D C1E808 shr eax, 8 2237 00001530 38C4 cmp ah, al 2238 00001532 7F02 jg short .not_max2 2239 00001534 88C4 mov ah, al 2240 2241 .not_max2: 2242 00001536 88E0 mov al, ah 2243 00001538 C1E008 shl eax, 8 2244 0000153B 88E0 mov al, ah 2245 0000153D A3[C0350500] mov dword [_@@max_bands], eax 2246 2247 .without_long: 2248 00001542 31ED xor ebp, ebp ; blk 2249 2250 .adjust_last_prev_lop: 2251 00001544 8B15[00360500] mov edx, [_@@n_sfb] 2252 0000154A 2B15[C4350500] sub edx, [_@@max_blocks] ; itop = n_sfb - max_blocks + blk 2253 00001550 01EA add edx, ebp 2254 00001552 89D1 mov ecx, edx 2255 00001554 2B0D[C4350500] sub ecx, [_@@max_blocks] ; prev = itop - max_blocks; 2256 0000155A A1[B8B30000] mov eax, [mp3_hdr_flag_lsf] 2257 0000155F 8D0440 lea eax, [eax+eax*2] ; 0,1 --> 0,3 2258 ; default_pos = HDR_TEST_MPEG1(hdr) ? 3 2259 00001562 3403 xor al, 3 ; 0,3 --> 3,0 2260 00001564 363A8D[C0350500] cmp cl, [ss:_@@max_bands+ebp] 2261 0000156B 7E07 jle short .use_default_pos ; ist_pos[itop] = max_band[blk] >= 2262 ; prev ? default_pos : ist_pos[prev] 2263 0000156D 8A840BB0130000 mov al, [ebx+ecx+5040] ; [ebx+@@right+$mp3gr_scale_factors+ecx] 2264 2265 .use_default_pos: 2266 00001574 888413B0130000 mov [ebx+edx+5040], al ; [ebx+@@right+$mp3gr_scale_factors+edx] 2267 0000157B 45 inc ebp ; blk 2268 0000157C 3B2D[C4350500] cmp ebp, [_@@max_blocks] 2269 00001582 72C0 jb short .adjust_last_prev_lop 2270 00001584 E867000000 call _@@apply_i_stereo 2271 00001589 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_i_stereo 2272 00001590 740E jz short .no_rdtsc_supported@@@@ 2273 00001592 0F31 rdtsc 2274 00001594 0105[EC8C0000] add [rdtsc_i_stereo], eax 2275 0000159A 1115[F08C0000] adc [rdtsc_i_stereo+4], edx 2276 2277 .no_rdtsc_supported@@@@: 2278 000015A0 C3 retn 2279 2280 2281 ; =============== S U B R O U T I N E ======================================= 2282 2283 2284 _@@find_top_bands: 2285 000015A1 C705[C0350500]FFFF- mov dword [_@@max_bands], 0FFFFFFh ; set maxband[0..2]=(-1) 2285 000015A9 FF00 2286 000015AB 8DB3E0130000 lea esi, [ebx+5088] ; [ebx+@@right+$mp3gr_sb_hybrid] 2287 000015B1 31D2 xor edx, edx 2288 2289 .find_top_lop_iii: 2290 000015B3 31C9 xor ecx, ecx ; for (i = 0; i < nbands; i++) 2291 2292 .find_top_lop_kkk: 2293 000015B5 8B048E mov eax, [esi+ecx*4] ; for (k = 0; k < sfb[i]; k += 2) 2294 000015B8 0B448E04 or eax, [esi+ecx*4+4] 2295 000015BC 750D jnz short .found_nonzero 2296 000015BE 83C102 add ecx, 2 2297 000015C1 3A8A[CC350500] cmp cl, [_@@sfb_array+edx] 2298 000015C7 72EC jb short .find_top_lop_kkk 2299 000015C9 EB11 jmp short .find_top_next 2300 2301 .found_nonzero: 2302 000015CB 89D0 mov eax, edx 2303 000015CD F635[D6A00000] div byte [_@@const_3] 2304 000015D3 0FB6C4 movzx eax, ah ; remainder (mod 3) 2305 000015D6 8890[C0350500] mov [_@@max_bands+eax], dl ; max_bands[0..2]=i 2306 2307 .find_top_next: 2308 000015DC 0FB682[CC350500] movzx eax, byte [_@@sfb_array+edx] 2309 000015E3 8D3486 lea esi, [esi+eax*4] 2310 000015E6 42 inc edx ; next 2311 000015E7 3B15[00360500] cmp edx, [_@@n_sfb] 2312 000015ED 72C4 jb short .find_top_lop_iii 2313 000015EF C3 retn 2314 2315 ; =============== S U B R O U T I N E ======================================= 2316 2317 2318 _@@apply_i_stereo: 2319 000015F0 B8[5C9A0000] mov eax, mp3_is_table_normal 2320 000015F5 B907000000 mov ecx, 7 2321 000015FA 833D[B8B30000]00 cmp dword [mp3_hdr_flag_lsf], 0 2322 00001601 7425 jz short .this_lsf 2323 00001603 8B8354130000 mov eax, [ebx+4948] ; [ebx+@@right+$mp3gr_scalefac_compress] 2324 00001609 83E001 and eax, 1 ; bit0 2325 0000160C F705[B4B30000]0200- test dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO 2325 00001614 0000 2326 00001616 7403 jz short .no_ms 2327 00001618 83C802 or eax, 2 ; bit1=mul_1.414 2328 2329 .no_ms: 2330 0000161B C1E009 shl eax, 9 ; N*40h*2*4 2331 0000161E 05[78FD0400] add eax, mp3_is_table_lsf 2332 00001623 B940000000 mov ecx, 64 ; max (must be below NO_INTENSITY_FLAG) 2333 2334 .this_lsf: 2335 00001628 890D[C8350500] mov [_@@max_pos], ecx ; 7 or 64 2336 0000162E A3[F4350500] mov [_@@is_tab], eax ; table 2337 00001633 8DB3A0000000 lea esi, [ebx+160] ; [ebx+$mp3gr_sb_hybrid] 2338 00001639 31C9 xor ecx, ecx ; iii ; for (i = 0; sfb[i]; i++) 2339 2340 .apply_lop_i: 2341 0000163B 0FB6A9[CC350500] movzx ebp, byte [_@@sfb_array+ecx] ; if ((int)i > max_band[i % 3] 2342 ; && ipos < max_pos) 2343 00001642 89C8 mov eax, ecx 2344 00001644 F635[D6A00000] div byte [_@@const_3] ; max_band[i % 3] 2345 0000164A 0FB6C4 movzx eax, ah ; remainder (mod 3) 2346 0000164D 3A88[C0350500] cmp cl, [_@@max_bands+eax] ; iii,max_bands[0..2]; 2347 00001653 7E38 jle short .apply_ms_stereo 2348 00001655 0FB6BC0BB0130000 movzx edi, byte [ebx+ecx+5040] ; [ebx+@@right+$mp3gr_scale_factors+ecx] 2349 ; @@right = $mp3gr_entrysiz*2 = 4928 2350 ; $mp3gr_scale_factors = 112 2351 0000165D 3B3D[C8350500] cmp edi, [_@@max_pos] ; check ipos 2352 00001663 7328 jnb short .apply_ms_stereo 2353 00001665 C1E703 shl edi, 3 ; mul 2*4 2354 00001668 033D[F4350500] add edi, [_@@is_tab] 2355 2356 .apply_pan_lop: 2357 0000166E 8B06 mov eax, [esi] ; tmp = granule.ch0.sb_hybrid 2358 00001670 C1E002 shl eax, 2 2359 00001673 F76F04 imul dword [edi+4] ; v1 2360 00001676 899640130000 mov [esi+4928], edx ; [esi+@@right] 2361 ; granule.ch1.sb_hybrid = tmp*v1 2362 0000167C 8B06 mov eax, [esi] ; tmp = granule.ch0.sb_hybrid 2363 0000167E C1E002 shl eax, 2 2364 00001681 F72F imul dword [edi] ; v0 2365 00001683 8916 mov [esi], edx ; granule.ch0.sb_hybrid = tmp*v0 2366 00001685 83C604 add esi, 4 2367 00001688 4D dec ebp 2368 00001689 75E3 jnz short .apply_pan_lop 2369 0000168B EB2C jmp short .apply_next 2370 2371 .apply_ms_stereo: 2372 0000168D F705[B4B30000]0200- test dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO 2372 00001695 0000 2373 00001697 741D jz short .apply_none 2374 2375 .ms_stereo_lop: 2376 00001699 8B06 mov eax, [esi] ; tmp0 = granule.ch0.sb_hybrid[i] 2377 0000169B 8B9640130000 mov edx, [esi+4928] ; [esi+@@right] 2378 ; tmp1 = granule.ch1.sb_hybrid[i] 2379 000016A1 29D0 sub eax, edx ; tmp0 - tmp1 2380 000016A3 8D1450 lea edx, [eax+edx*2] ; tmp0 + tmp1 2381 000016A6 8916 mov [esi], edx ; granule.ch0.sb_hybrid[i] = tmp0 + tmp1 2382 000016A8 898640130000 mov [esi+4928], eax ; [esi+@@right] 2383 ; granule.ch1.sb_hybrid[i] = tmp0 - tmp1 2384 000016AE 83C604 add esi, 4 2385 000016B1 4D dec ebp 2386 000016B2 75E5 jnz short .ms_stereo_lop 2387 000016B4 EB03 jmp short .apply_next 2388 2389 .apply_none: 2390 000016B6 8D34AE lea esi, [esi+ebp*4] ; skip, keep unchanged 2391 2392 .apply_next: 2393 000016B9 41 inc ecx ; iii 2394 000016BA 3B0D[00360500] cmp ecx, [_@@n_sfb] 2395 000016C0 0F8275FFFFFF jb .apply_lop_i ; next 2396 000016C6 C3 retn 2397 2398 ; =============== S U B R O U T I N E ======================================= 2399 2400 2401 mp3_reorder_block: 2402 000016C7 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_reorder 2403 000016CE 740E jz short .no_rdtsc_supported 2404 000016D0 0F31 rdtsc 2405 000016D2 2905[048D0000] sub [rdtsc_reorder], eax 2406 000016D8 1915[088D0000] sbb [rdtsc_reorder+4], edx 2407 2408 .no_rdtsc_supported: 2409 000016DE 807B2C02 cmp byte [ebx+44], 2 ; ebx+$mp3gr_block_type] ; only for type 2 2410 000016E2 7565 jnz short .no_reorder 2411 000016E4 8DB3A0000000 lea esi, [ebx+160] ; [ebx+$mp3gr_sb_hybrid] ; ptr+0 2412 000016EA 807B3000 cmp byte [ebx+48], 0 ; [ebx+$mp3gr_switch_point] 2413 000016EE 7412 jz short .this_src 2414 000016F0 81C690000000 add esi, 144 ; 36*4 ; ptr+36*4 2415 000016F6 833D[8CB30000]08 cmp dword [mp3_hdr_sample_rate_index], 8 2416 000016FD 7503 jnz short .this_src 2417 000016FF 83C630 add esi, 48 ; 12*4 ; additionally to above 36*4 ; ptr+48*4 2418 2419 .this_src: 2420 00001702 8B531C mov edx, [ebx+28] ; [ebx+$mp3gr_short_start] ; can be 13 2421 00001705 83FA0D cmp edx, 13 2422 00001708 733F jnb short .no_reorder 2423 0000170A C7435C40020000 mov dword [ebx+92], 576 ; [ebx+$mp3gr_num_nonzero_hybrids] 2424 2425 .outer_lop: 2426 00001711 A1[8CB30000] mov eax, [mp3_hdr_sample_rate_index] 2427 00001716 6BC00D imul eax, 13 ; X*13 2428 00001719 0FB68C10[6C970000] movzx ecx, byte [mp3_band_size_short+eax+edx] ; [X*13+Y] 2429 00001721 BF[04360500] mov edi, _@@tmp 2430 00001726 60 pusha 2431 00001727 89CA mov edx, ecx ; step=len (4..44) ; copy LEN*3 dwords to tmp 2432 2433 .inner_lop: 2434 00001729 8B06 mov eax, [esi] 2435 0000172B AB stosd 2436 0000172C 8B0496 mov eax, [esi+edx*4] ; copy 3 dwords 2437 0000172F AB stosd 2438 00001730 8B04D6 mov eax, [esi+edx*8] 2439 00001733 AB stosd 2440 00001734 83C604 add esi, 4 2441 00001737 E2F0 loop .inner_lop 2442 00001739 61 popa 2443 0000173A 8D0C49 lea ecx, [ecx+ecx*2] ; len*3 2444 0000173D 87FE xchg esi, edi ; copy LEN*3 dwords back from tmp 2445 0000173F F3A5 rep movsd 2446 00001741 87FE xchg esi, edi 2447 00001743 42 inc edx 2448 00001744 83FA0D cmp edx, 13 2449 00001747 72C8 jb short .outer_lop ; next 2450 2451 .no_reorder: 2452 00001749 F605[1C8C0000]10 test byte [cpuid_flags], 10h 2453 00001750 740E jz short .no_rdtsc_supported@ ; timelog_end rdtsc_reorder 2454 00001752 0F31 rdtsc 2455 00001754 0105[048D0000] add [rdtsc_reorder], eax 2456 0000175A 1115[088D0000] adc [rdtsc_reorder+4], edx 2457 2458 .no_rdtsc_supported@: 2459 00001760 C3 retn 2460 2461 2462 ; =============== S U B R O U T I N E ======================================= 2463 2464 2465 mp3_compute_antialias: 2466 00001761 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; in: ebx=granule 2467 00001768 740E jz short .no_rdtsc_supported ; timelog_start rdtsc_antialias 2468 0000176A 0F31 rdtsc 2469 0000176C 2905[1C8D0000] sub [rdtsc_antialias], eax 2470 00001772 1915[208D0000] sbb [rdtsc_antialias+4], edx 2471 2472 .no_rdtsc_supported: 2473 00001778 8B435C mov eax, [ebx+92] ; [ebx+$mp3gr_num_nonzero_hybrids] 2474 0000177B 83C008 add eax, 8 ; 9-1 ; 0..576+8 2475 0000177E 31D2 xor edx, edx 2476 00001780 B909000000 mov ecx, 9 2477 00001785 F7F1 div ecx ; (num/9) ; 0..64 2478 00001787 894360 mov [ebx+60h], eax 2479 0000178A D1E8 shr eax, 1 ; (num/18) ; 0..32 2480 0000178C 0F84B8010000 jz .no_antialias ; 0 (when num/9 = 0..1) 2481 00001792 89C1 mov ecx, eax ; 1..32 2482 00001794 C1E805 shr eax, 5 ; 0..1 2483 00001797 29C1 sub ecx, eax ; 1..31 ; len excluding zeropadding 2484 00001799 807B2C02 cmp byte [ebx+44], 2 ; [ebx+$mp3gr_block_type] 2485 0000179D 750F jnz short .this_len ; antialias only "long" bands 2486 0000179F 807B3000 cmp byte [ebx+48], 0 ; [ebx+$mp3gr_switch_point] 2487 000017A3 0F84A1010000 jz .no_antialias 2488 000017A9 B901000000 mov ecx, 1 ; check this for 8000Hz case 2489 2490 .this_len: 2491 000017AE 8D440901 lea eax, [1+ecx*2] 2492 000017B2 394360 cmp [ebx+96], eax ; [ebx+$mp3gr_num_nonzero_hybrids_div9] 2493 000017B5 7703 ja short .is_bigger 2494 000017B7 894360 mov [ebx+96], eax ; opdate highest 2495 ; (nonzero required for l3-si_huff.bit) 2496 2497 .is_bigger: 2498 000017BA 53 push ebx 2499 000017BB 8D9BA0000000 lea ebx, [ebx+160] ; [ebx+$mp3gr_sb_hybrid] 2500 2501 .lop: 2502 000017C1 83C348 add ebx, 72 ; 18*4 2503 000017C4 8B73FC mov esi, [ebx-4] ; IRP nn,0,1,2,3,4,5,6,7 ; INT_AA(nn=0..7) 2504 000017C7 8B3B mov edi, [ebx] ; @@def_csa macro nn,cs,ca 2505 ; mp3_csa_&nn&_cs equ cs 2506 ; mp3_csa_&nn&_ca equ ca 2507 ; endm 2508 ; constants for mp3_csa_table 2509 000017C9 C1E602 shl esi, 2 ; tmp0 = ptr[-nn-1]*4 2510 000017CC C1E702 shl edi, 2 ; tmp1 = ptr[+nn]*4 2511 000017CF 8D043E lea eax, [esi+edi] ; tmp2 = tmp0+tmp1 2512 000017D2 BD032AE136 mov ebp, 36E12A03h ; @@def_csa 0,36E12A03h,-20ED7F9Ah ;-0.6 2513 ; mp3_csa_&nn&_cs 2514 000017D7 F7ED imul ebp ; tmp2 = (tmp2*csa[0]) 2515 000017D9 89D5 mov ebp, edx 2516 000017DB B8635631A8 mov eax, -57CEA99Dh ; mp3_csa_&nn&_ca-mp3_csa_&nn&_cs 2517 000017E0 F7EE imul esi ; tmp0 = (tmp2+(tmp0*csa[3])) 2518 000017E2 01EA add edx, ebp 2519 000017E4 8913 mov [ebx], edx ; [ebx+(nn)*4] 2520 000017E6 B869AAF315 mov eax, 15F3AA69h ; mp3_csa_&nn&_ca+mp3_csa_&nn&_cs 2521 000017EB F7EF imul edi ; tmp1 = (tmp2-(tmp1*csa[2])) 2522 000017ED 29D5 sub ebp, edx 2523 000017EF 896BFC mov [ebx-4], ebp ; [ebx-(nn+1)*4] 2524 000017F2 8B73F8 mov esi, [ebx-8] 2525 000017F5 8B7B04 mov edi, [ebx+4] 2526 000017F8 C1E602 shl esi, 2 2527 000017FB C1E702 shl edi, 2 2528 000017FE 8D043E lea eax, [esi+edi] 2529 00001801 BDFD756E38 mov ebp, 386E75FDh ; @@def_csa 1,386E75FDh,-1E30DB48h ;-0.535 2530 00001806 F7ED imul ebp 2531 00001808 89D5 mov ebp, edx 2532 0000180A B8BBAE60A9 mov eax, -569F5145h 2533 0000180F F7EE imul esi 2534 00001811 01EA add edx, ebp 2535 00001813 895304 mov [ebx+4], edx ; [ebx+(nn)*4] 2536 00001816 B8B59A3D1A mov eax, 1A3D9AB5h 2537 0000181B F7EF imul edi 2538 0000181D 29D5 sub ebp, edx 2539 0000181F 896BF8 mov [ebx-8], ebp ; [ebx-(nn+1)*4] 2540 00001822 8B73F4 mov esi, [ebx-12] 2541 00001825 8B7B08 mov edi, [ebx+8] 2542 00001828 C1E602 shl esi, 2 2543 0000182B C1E702 shl edi, 2 2544 0000182E 8D043E lea eax, [esi+edi] 2545 00001831 BD3EB7C63C mov ebp, 3CC6B73Eh ; @@def_csa 2,3CC6B73Eh,-140E604Fh ;-0.33 2546 00001836 F7ED imul ebp 2547 00001838 89D5 mov ebp, edx 2548 0000183A B873E82AAF mov eax, -50D5178Dh 2549 0000183F F7EE imul esi 2550 00001841 01EA add edx, ebp 2551 00001843 895308 mov [ebx+8], edx ; [ebx+(nn)*4] 2552 00001846 B8EF56B828 mov eax, 28B856EFh 2553 0000184B F7EF imul edi 2554 0000184D 29D5 sub ebp, edx 2555 0000184F 896BF4 mov [ebx-12], ebp ; [ebx-(nn+1)*4] 2556 00001852 8B73F0 mov esi, [ebx-16] 2557 00001855 8B7B0C mov edi, [ebx+12] 2558 00001858 C1E602 shl esi, 2 2559 0000185B C1E702 shl edi, 2 2560 0000185E 8D043E lea eax, [esi+edi] 2561 00001861 BD55A0EE3E mov ebp, 3EEEA055h ; @@def_csa 3,3EEEA055h,-0BA47742h ;-0.185 2562 00001866 F7ED imul ebp 2563 00001868 89D5 mov ebp, edx 2564 0000186A B869E86CB5 mov eax, -4A931797h 2565 0000186F F7EE imul esi 2566 00001871 01EA add edx, ebp 2567 00001873 89530C mov [ebx+12], edx ; [ebx+(nn)*4] 2568 00001876 B813294A33 mov eax, 334A2913h 2569 0000187B F7EF imul edi 2570 0000187D 29D5 sub ebp, edx 2571 0000187F 896BF0 mov [ebx-16], ebp ; [ebx-(nn+1)*4] 2572 00001882 8B73EC mov esi, [ebx-20] ; ebx-(nn+1)*4] ; tmp0 = ptr[-nn-1] 2573 00001885 8B7B10 mov edi, [ebx+16] ; [ebx+(nn)*4] ; tmp1 = ptr[+nn] 2574 00001888 C1E602 shl esi, 2 2575 0000188B C1E702 shl edi, 2 2576 0000188E 8D043E lea eax, [esi+edi] ; tmp2 = tmp0+tmp1 2577 00001891 BD5C90B63F mov ebp, 3FB6905Ch ; @@def_csa 4,3FB6905Ch,-060D80E9h ;-0.095 2578 00001896 F7ED imul ebp ; tmp2 = (tmp2*csa[0]) 2579 00001898 89D5 mov ebp, edx 2580 0000189A B8BBEE3BBA mov eax, -45C41145h 2581 0000189F F7EE imul esi ; tmp0 = (tmp2+(tmp0*csa[3])) 2582 000018A1 01EA add edx, ebp 2583 000018A3 895310 mov [ebx+16], edx ; [ebx+(nn)*4] 2584 000018A6 B8730FA939 mov eax, 39A90F73h 2585 000018AB F7EF imul edi ; tmp1 = (tmp2-(tmp1*csa[2])) 2586 000018AD 29D5 sub ebp, edx 2587 000018AF 896BEC mov [ebx-20], ebp ; [ebx-(nn+1)*4] 2588 000018B2 8B73E8 mov esi, [ebx-24] 2589 000018B5 8B7B14 mov edi, [ebx+20] 2590 000018B8 C1E602 shl esi, 2 2591 000018BB C1E702 shl edi, 2 2592 000018BE 8D043E lea eax, [esi+edi] 2593 000018C1 BD213FF23F mov ebp, 3FF23F21h ; @@def_csa 5,3FF23F21h,-029F2E1Bh ;-0.041 2594 000018C6 F7ED imul ebp 2595 000018C8 89D5 mov ebp, edx 2596 000018CA B8C4926EBD mov eax, -42916D3Ch 2597 000018CF F7EE imul esi 2598 000018D1 01EA add edx, ebp 2599 000018D3 895314 mov [ebx+20], edx ; [ebx+(nn)*4] 2600 000018D6 B80611533D mov eax, 3D531106h 2601 000018DB F7EF imul edi 2602 000018DD 29D5 sub ebp, edx 2603 000018DF 896BE8 mov [ebx-24], ebp ; [ebx-(nn+1)*4] 2604 000018E2 8B73E4 mov esi, [ebx-28] 2605 000018E5 8B7B18 mov edi, [ebx+24] 2606 000018E8 C1E602 shl esi, 2 2607 000018EB C1E702 shl edi, 2 2608 000018EE 8D043E lea eax, [esi+edi] 2609 000018F1 BD3259FE3F mov ebp, 3FFE5932h ; @@def_csa 6,3FFE5932h,-00E8A11Ch ;-0.0142 2610 000018F6 F7ED imul ebp 2611 000018F8 89D5 mov ebp, edx 2612 000018FA B8B20519BF mov eax, -40E6FA4Eh 2613 000018FF F7EE imul esi 2614 00001901 01EA add edx, ebp 2615 00001903 895318 mov [ebx+24], edx ; [ebx+(nn)*4] 2616 00001906 B816B8153F mov eax, 3F15B816h 2617 0000190B F7EF imul edi 2618 0000190D 29D5 sub ebp, edx 2619 0000190F 896BE4 mov [ebx-28], ebp ; [ebx-(nn+1)*4] 2620 00001912 8B73E0 mov esi, [ebx-32] 2621 00001915 8B7B1C mov edi, [ebx+28] 2622 00001918 C1E602 shl esi, 2 2623 0000191B C1E702 shl edi, 2 2624 0000191E 8D043E lea eax, [esi+edi] 2625 00001921 BD4BE3FF3F mov ebp, 3FFFE34Bh ; @@def_csa 7,3FFFE34Bh,-003C9ED1h ;-0.0037 2626 00001926 F7ED imul ebp 2627 00001928 89D5 mov ebp, edx 2628 0000192A B8E47DC3BF mov eax, -403C821Ch 2629 0000192F F7EE imul esi 2630 00001931 01EA add edx, ebp 2631 00001933 89531C mov [ebx+28], edx ; [ebx+(nn)*4] 2632 00001936 B87A44C33F mov eax, 3FC3447Ah 2633 0000193B F7EF imul edi 2634 0000193D 29D5 sub ebp, edx 2635 0000193F 896BE0 mov [ebx-32], ebp ; [ebx-(nn+1)*4] 2636 00001942 49 dec ecx 2637 00001943 0F8578FEFFFF jnz .lop 2638 00001949 5B pop ebx 2639 2640 .no_antialias: 2641 0000194A F605[1C8C0000]10 test byte [cpuid_flags], 10h 2642 00001951 740E jz short .no_rdtsc_supported@ 2643 00001953 0F31 rdtsc 2644 00001955 0105[1C8D0000] add [rdtsc_antialias], eax 2645 0000195B 1115[208D0000] adc [rdtsc_antialias+4], edx 2646 2647 .no_rdtsc_supported@: 2648 00001961 C3 retn 2649 2650 2651 ; =============== S U B R O U T I N E ======================================= 2652 2653 2654 mp3_imdct36: 2655 00001962 8B06 mov eax, [esi] ; in: esi=src (sb_hybrid) 2656 ; in: edi=dst (sb_samples) 2657 ; in: ebx=buf (mdct_buf) 2658 ; in: ebp=win (mdct_win) 2659 ; 2660 ; [esi+0*4] 2661 00001964 8B5604 mov edx, [esi+4] ; IRP i,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 2662 00001967 01D0 add eax, edx ; IF i AND 1 (*) ; mov edx,[esi+i*4] ; val[i] 2663 ; add val[i-1] 2664 00001969 894604 mov [esi+4], eax ; IF i GT 1 2665 ; add ecx,eax ; add val[i-2] 2666 ; mov [esi+(i)*4],ecx 2667 ; ELSE 2668 ; mov [esi+(i)*4],eax 2669 0000196C 89C1 mov ecx, eax ; memorize as val[i-2] 2670 0000196E 8B4608 mov eax, [esi+8] ; ELSE (*) ; [esi+i*4] ; val[i] 2671 00001971 01C2 add edx, eax ; add val[i-1] 2672 00001973 895608 mov [esi+8], edx ; [esi+(i)*4 2673 00001976 8B560C mov edx, [esi+12] 2674 00001979 01D0 add eax, edx 2675 0000197B 01C1 add ecx, eax 2676 0000197D 894E0C mov [esi+12], ecx 2677 00001980 89C1 mov ecx, eax 2678 00001982 8B4610 mov eax, [esi+16] 2679 00001985 01C2 add edx, eax 2680 00001987 895610 mov [esi+16], edx 2681 0000198A 8B5614 mov edx, [esi+20] 2682 0000198D 01D0 add eax, edx 2683 0000198F 01C1 add ecx, eax 2684 00001991 894E14 mov [esi+20], ecx 2685 00001994 89C1 mov ecx, eax 2686 00001996 8B4618 mov eax, [esi+24] 2687 00001999 01C2 add edx, eax 2688 0000199B 895618 mov [esi+24], edx 2689 0000199E 8B561C mov edx, [esi+28] 2690 000019A1 01D0 add eax, edx 2691 000019A3 01C1 add ecx, eax 2692 000019A5 894E1C mov [esi+28], ecx 2693 000019A8 89C1 mov ecx, eax 2694 000019AA 8B4620 mov eax, [esi+32] 2695 000019AD 01C2 add edx, eax 2696 000019AF 895620 mov [esi+32], edx 2697 000019B2 8B5624 mov edx, [esi+36] 2698 000019B5 01D0 add eax, edx 2699 000019B7 01C1 add ecx, eax 2700 000019B9 894E24 mov [esi+36], ecx 2701 000019BC 89C1 mov ecx, eax 2702 000019BE 8B4628 mov eax, [esi+40] 2703 000019C1 01C2 add edx, eax 2704 000019C3 895628 mov [esi+40], edx 2705 000019C6 8B562C mov edx, [esi+44] 2706 000019C9 01D0 add eax, edx 2707 000019CB 01C1 add ecx, eax 2708 000019CD 894E2C mov [esi+44], ecx 2709 000019D0 89C1 mov ecx, eax 2710 000019D2 8B4630 mov eax, [esi+48] 2711 000019D5 01C2 add edx, eax 2712 000019D7 895630 mov [esi+48], edx 2713 000019DA 8B5634 mov edx, [esi+52] 2714 000019DD 01D0 add eax, edx 2715 000019DF 01C1 add ecx, eax 2716 000019E1 894E34 mov [esi+52], ecx 2717 000019E4 89C1 mov ecx, eax 2718 000019E6 8B4638 mov eax, [esi+56] 2719 000019E9 01C2 add edx, eax 2720 000019EB 895638 mov [esi+56], edx 2721 000019EE 8B563C mov edx, [esi+60] 2722 000019F1 01D0 add eax, edx 2723 000019F3 01C1 add ecx, eax 2724 000019F5 894E3C mov [esi+60], ecx 2725 000019F8 89C1 mov ecx, eax 2726 000019FA 8B4640 mov eax, [esi+64] 2727 000019FD 01C2 add edx, eax 2728 000019FF 895640 mov [esi+64], edx 2729 00001A02 8B5644 mov edx, [esi+68] 2730 00001A05 01D0 add eax, edx 2731 00001A07 01C1 add ecx, eax 2732 00001A09 894E44 mov [esi+68], ecx 2733 00001A0C 89C1 mov ecx, eax 2734 00001A0E 53 push ebx 2735 00001A0F 55 push ebp 2736 00001A10 57 push edi 2737 00001A11 8B0E mov ecx, [esi] ; IRP j,0,1 2738 00001A13 8B5E30 mov ebx, [esi+48] ; t1 = [esi+(0*2+j)*4], t0 = [esi+(6*2+j)*4] 2739 00001A16 8B7E20 mov edi, [esi+32] ; t2 = [esi+(4*2+j)*4] 2740 00001A19 037E40 add edi, [esi+64] ; + [esi+(8*2+j)*4] 2741 00001A1C 2B7E10 sub edi, [esi+16] ; - [esi+(2*2+j)*4] 2742 00001A1F 8D2C4B lea ebp, [ebx+ecx*2] ; t2 = src[4*2+j] + src[8*2+j] - src[2*2+j] 2743 ; t3 = [t1*2+t0] 2744 00001A22 D1FD sar ebp, 1 ; sar @@t3,1 2745 00001A24 29D9 sub ecx, ebx ; sub @@t1,@@t0 2746 00001A26 89C8 mov eax, ecx ; @@SUM [@@tmp+(16+j)*4],@@t1,add,@@t2 2747 00001A28 01F8 add eax, edi 2748 00001A2A A3[503F0500] mov [_@@@tmp+40h], eax ; [@@tmp+(16+j)*4] 2749 00001A2F D1FF sar edi, 1 ; sar @@t2,1 2750 00001A31 89C8 mov eax, ecx ; @@SUM [@@tmp+(6+j)*4],@@t1,sub,@@t2 2751 00001A33 29F8 sub eax, edi 2752 00001A35 A3[283F0500] mov [_@@@tmp+18h], eax ; [@@tmp+(6+j)*4] 2753 00001A3A 8B4610 mov eax, [esi+16] ; [esi+(4*2+j)*4] 2754 00001A3D 034620 add eax, [esi+32] ; [esi+(2*2+j)*4] 2755 00001A40 D1E0 shl eax, 1 2756 00001A42 BA0AD94778 mov edx, 7847D90Ah ; C2 2757 00001A47 F7EA imul edx 2758 00001A49 89D3 mov ebx, edx 2759 00001A4B 8B4620 mov eax, [esi+32] 2760 00001A4E 2B4640 sub eax, [esi+64] 2761 00001A51 BA04CB8BD3 mov edx, 0D38BCB04h ; negC8 2762 00001A56 F7EA imul edx 2763 00001A58 89D1 mov ecx, edx 2764 00001A5A 8B4610 mov eax, [esi+16] 2765 00001A5D 034640 add eax, [esi+64] 2766 00001A60 D1E0 shl eax, 1 2767 00001A62 BA7541F29D mov edx, 9DF24175h ; negC4 2768 00001A67 F7EA imul edx 2769 00001A69 89E8 mov eax, ebp 2770 00001A6B 01D8 add eax, ebx 2771 00001A6D 01C8 add eax, ecx 2772 00001A6F A3[183F0500] mov [_@@@tmp+8], eax 2773 00001A74 89E8 mov eax, ebp 2774 00001A76 29D8 sub eax, ebx 2775 00001A78 29D0 sub eax, edx 2776 00001A7A A3[383F0500] mov [_@@@tmp+28h], eax 2777 00001A7F 89E8 mov eax, ebp 2778 00001A81 01D0 add eax, edx 2779 00001A83 29C8 sub eax, ecx 2780 00001A85 A3[483F0500] mov [_@@@tmp+38h], eax 2781 00001A8A 8B4628 mov eax, [esi+40] 2782 00001A8D 034638 add eax, [esi+56] 2783 00001A90 2B4608 sub eax, [esi+8] 2784 00001A93 D1E0 shl eax, 1 2785 00001A95 BA5F142691 mov edx, 9126145Fh ; negC3 2786 00001A9A F7EA imul edx 2787 00001A9C 8915[203F0500] mov [_@@@tmp+10h], edx 2788 00001AA2 8B4608 mov eax, [esi+8] 2789 00001AA5 034628 add eax, [esi+40] 2790 00001AA8 D1E0 shl eax, 1 2791 00001AAA BA332E0E7E mov edx, 7E0E2E33h ; C1 2792 00001AAF F7EA imul edx 2793 00001AB1 89D7 mov edi, edx 2794 00001AB3 8B4628 mov eax, [esi+40] 2795 00001AB6 2B4638 sub eax, [esi+56] 2796 00001AB9 BA2E5E71A8 mov edx, 0A8715E2Eh ; negC7 2797 00001ABE F7EA imul edx 2798 00001AC0 89D5 mov ebp, edx 2799 00001AC2 8B4608 mov eax, [esi+8] 2800 00001AC5 034638 add eax, [esi+56] 2801 00001AC8 D1E0 shl eax, 1 2802 00001ACA BAB822B9AD mov edx, 0ADB922B8h ; negC5 2803 00001ACF F7EA imul edx 2804 00001AD1 89D1 mov ecx, edx 2805 00001AD3 8B4618 mov eax, [esi+24] 2806 00001AD6 D1E0 shl eax, 1 2807 00001AD8 BAA2EBD96E mov edx, 6ED9EBA2h ; C3 2808 00001ADD F7EA imul edx 2809 00001ADF 89E8 mov eax, ebp 2810 00001AE1 01F8 add eax, edi 2811 00001AE3 01D0 add eax, edx 2812 00001AE5 A3[103F0500] mov [_@@@tmp], eax 2813 00001AEA 89E8 mov eax, ebp 2814 00001AEC 29C8 sub eax, ecx 2815 00001AEE 29D0 sub eax, edx 2816 00001AF0 A3[303F0500] mov [_@@@tmp+20h], eax 2817 00001AF5 89F8 mov eax, edi 2818 00001AF7 01C8 add eax, ecx 2819 00001AF9 29D0 sub eax, edx 2820 00001AFB A3[403F0500] mov [_@@@tmp+30h], eax 2821 00001B00 8B4E04 mov ecx, [esi+4] 2822 00001B03 8B5E34 mov ebx, [esi+52] 2823 00001B06 8B7E24 mov edi, [esi+36] 2824 00001B09 037E44 add edi, [esi+68] 2825 00001B0C 2B7E14 sub edi, [esi+20] 2826 00001B0F 8D2C4B lea ebp, [ebx+ecx*2] 2827 00001B12 D1FD sar ebp, 1 2828 00001B14 29D9 sub ecx, ebx 2829 00001B16 89C8 mov eax, ecx 2830 00001B18 01F8 add eax, edi 2831 00001B1A A3[543F0500] mov [_@@@tmp+44h], eax 2832 00001B1F D1FF sar edi, 1 2833 00001B21 89C8 mov eax, ecx 2834 00001B23 29F8 sub eax, edi 2835 00001B25 A3[2C3F0500] mov [_@@@tmp+1Ch], eax 2836 00001B2A 8B4614 mov eax, [esi+20] ; t0 = MULH(2*(src[2*2+j]+src[4*2+j]),C2) 2837 00001B2D 034624 add eax, [esi+36] 2838 00001B30 D1E0 shl eax, 1 2839 00001B32 BA0AD94778 mov edx, 7847D90Ah ; C2 2840 00001B37 F7EA imul edx 2841 00001B39 89D3 mov ebx, edx 2842 00001B3B 8B4624 mov eax, [esi+36] ; t1 = MULH(src[4*2+j]-src[8*2+j],negC8) 2843 00001B3E 2B4644 sub eax, [esi+68] 2844 00001B41 BA04CB8BD3 mov edx, 0D38BCB04h ; negC8 2845 00001B46 F7EA imul edx 2846 00001B48 89D1 mov ecx, edx 2847 00001B4A 8B4614 mov eax, [esi+20] ; t2 = MULH(2*(src[2*2+j]+src[8*2+j]),negC4) 2848 00001B4D 034644 add eax, [esi+68] 2849 00001B50 D1E0 shl eax, 1 2850 00001B52 BA7541F29D mov edx, 9DF24175h ; negC4 2851 00001B57 F7EA imul edx 2852 00001B59 89E8 mov eax, ebp ; tmp[2+j] = t3+t0+t1 2853 00001B5B 01D8 add eax, ebx 2854 00001B5D 01C8 add eax, ecx 2855 00001B5F A3[1C3F0500] mov [_@@@tmp+0Ch], eax 2856 00001B64 89E8 mov eax, ebp ; tmp[10+j] = t3-t0-t2 2857 00001B66 29D8 sub eax, ebx 2858 00001B68 29D0 sub eax, edx 2859 00001B6A A3[3C3F0500] mov [_@@@tmp+2Ch], eax 2860 00001B6F 89E8 mov eax, ebp ; tmp[14+j] = t3+t2-t1 2861 00001B71 01D0 add eax, edx 2862 00001B73 29C8 sub eax, ecx 2863 00001B75 A3[4C3F0500] mov [_@@@tmp+3Ch], eax 2864 00001B7A 8B462C mov eax, [esi+44] ; tmp[4+j] = MULH(2*(src[5*2+j]+src[7*2+j]-src[1*2+j]),negC3) 2865 00001B7D 03463C add eax, [esi+60] 2866 00001B80 2B460C sub eax, [esi+12] 2867 00001B83 D1E0 shl eax, 1 2868 00001B85 BA5F142691 mov edx, 9126145Fh ; negC3 2869 00001B8A F7EA imul edx 2870 00001B8C 8915[243F0500] mov [_@@@tmp+14h], edx 2871 00001B92 8B460C mov eax, [esi+12] ; @@MULH @@t2,[esi+(1*2+j)*4],add,[esi+(5*2+j)*4],-,- ,1,C1,- 2872 ; t2 = MULH(2*(src[1*2+j],add,src[5*2+j]),-,-,1,C1) 2873 00001B95 03462C add eax, [esi+44] 2874 00001B98 D1E0 shl eax, 1 2875 00001B9A BA332E0E7E mov edx, 7E0E2E33h ; C1 2876 00001B9F F7EA imul edx 2877 00001BA1 89D7 mov edi, edx 2878 00001BA3 8B462C mov eax, [esi+44] ; @@MULH @@t3,[esi+(5*2+j)*4],sub,[esi+(7*2+j)*4],-,-, 2879 ; ,0,negC7,- 2880 ; 2881 ; t3 = MULH( src[5*2+j],sub,src[7*2+j],-,-,0,negC7) 2882 00001BA6 2B463C sub eax, [esi+60] 2883 00001BA9 BA2E5E71A8 mov edx, 0A8715E2Eh ; negC7 2884 00001BAE F7EA imul edx 2885 00001BB0 89D5 mov ebp, edx 2886 00001BB2 8B460C mov eax, [esi+12] ; t1 = MULH(2*(src[1*2+j],add,src[7*2+j]),-,-,1,negC5) 2887 00001BB5 03463C add eax, [esi+60] 2888 00001BB8 D1E0 shl eax, 1 ; shift = 1 2889 00001BBA BAB822B9AD mov edx, 0ADB922B8h ; negC5 2890 00001BBF F7EA imul edx 2891 00001BC1 89D1 mov ecx, edx 2892 00001BC3 8B461C mov eax, [esi+28] ; t0 = MULH(2*src[3*2+j],-,-,-,-,1,C3) 2893 00001BC6 D1E0 shl eax, 1 2894 00001BC8 BAA2EBD96E mov edx, 6ED9EBA2h ; C3 2895 00001BCD F7EA imul edx 2896 00001BCF 89E8 mov eax, ebp 2897 00001BD1 01F8 add eax, edi 2898 00001BD3 01D0 add eax, edx 2899 00001BD5 A3[143F0500] mov [_@@@tmp+4], eax 2900 00001BDA 89E8 mov eax, ebp 2901 00001BDC 29C8 sub eax, ecx 2902 00001BDE 29D0 sub eax, edx 2903 00001BE0 A3[343F0500] mov [_@@@tmp+24h], eax 2904 00001BE5 89F8 mov eax, edi ; @@SUM [@@tmp+(12+j)*4],@@t2,add,@@t1,sub,edx 2905 00001BE7 01C8 add eax, ecx 2906 00001BE9 29D0 sub eax, edx 2907 00001BEB A3[443F0500] mov [_@@@tmp+34h], eax 2908 00001BF0 5F pop edi 2909 00001BF1 5D pop ebp 2910 00001BF2 5B pop ebx 2911 00001BF3 56 push esi ; IRP j,0,1,2,3 ; j = 0 2912 00001BF4 8B15[103F0500] mov edx, [_@@@tmp] ; t0 = [@@tmp+(j*4+0)*4] 2913 00001BFA 8B35[143F0500] mov esi, [_@@@tmp+4] ; t1 = [@@tmp+(j*4+1)*4] 2914 00001C00 A1[183F0500] mov eax, [_@@@tmp+8] ; t2 = [@@tmp+(j*4+2)*4] 2915 00001C05 8B0D[1C3F0500] mov ecx, [_@@@tmp+0Ch] ; t2 = [@@tmp+(j*4+3)*4] 2916 00001C0B 29D0 sub eax, edx ; s2 = t2 - t0 2917 00001C0D 8D1450 lea edx, [eax+edx*2] ; s0 = t2 + t0 2918 00001C10 A3[083F0500] mov [_@@s2], eax ; @@MULH esi,eax ,-,-,-,-,1,icos36h_&j,- 2919 ; s2 = MULH(s2*2, icos36h[j]) 2920 00001C15 8915[043F0500] mov [_@@s0], edx 2921 00001C1B 29F1 sub ecx, esi 2922 00001C1D 8D0471 lea eax, [ecx+esi*2] 2923 00001C20 D1E0 shl eax, 1 2924 00001C22 BA90953E40 mov edx, 403E9590h ; icos36h_0 2925 00001C27 F7EA imul edx 2926 00001C29 89D6 mov esi, edx 2927 00001C2B 89C8 mov eax, ecx ; @@MULH @@s3,ecx,-,-,-,-,shift_for_8minus&j,icos36h_8minus&j,- 2928 ; s3 = MULL(s3,icos36[8-j]) ; <-- "MULL" with "icos36" 2929 00001C2D C1E004 shl eax, 4 2930 00001C30 BA2C2ACA5B mov edx, 5BCA2A2Ch ; icos36h_8 (8-0) 2931 00001C35 F7EA imul edx 2932 00001C37 8915[0C3F0500] mov [_@@s3], edx 2933 00001C3D 8B0D[043F0500] mov ecx, [_@@s0] 2934 00001C43 29F1 sub ecx, esi 2935 00001C45 8D3471 lea esi, [ecx+esi*2] 2936 00001C48 8B4524 mov eax, [ebp+36] ; @@MULH [edi+(9+j)*SBLIMIT*4],[ebp+(9+j)*4], 2937 ; -,-,-,-,0,ecx,[ebx+(9+j)*4] 2938 ; out[(9+j)*SBLIMIT] = MULH(t0, win[9+j])+buf[9+j] 2939 00001C4B F7E9 imul ecx 2940 00001C4D 035324 add edx, [ebx+36] ; [ebx+(9+j)*4] 2941 00001C50 899780040000 mov [edi+1152], edx ; SBLIMIT=32 ; 9*SBLIMIT*4 = 1152 2942 00001C56 8B4520 mov eax, [ebp+32] ; @@MULH [edi+(8-j)*SBLIMIT*4],[ebp+(8-j)*4] 2943 ; ,-,-,-,-,0,ecx,[ebx+(8-j)*4] 2944 00001C59 F7E9 imul ecx 2945 00001C5B 035320 add edx, [ebx+32] 2946 00001C5E 899700040000 mov [edi+1024], edx ; SBLIMIT=32 ; 8*SBLIMIT*4 = 1024 2947 00001C64 8B456C mov eax, [ebp+108] 2948 00001C67 F7EE imul esi 2949 00001C69 895324 mov [ebx+36], edx 2950 00001C6C 8B4568 mov eax, [ebp+104] ; @@MULH [ebx+(8-j)*4],[ebp+(8-j+18)*4],-,-,-,-,0,esi,- 2951 00001C6F F7EE imul esi 2952 00001C71 895320 mov [ebx+32], edx 2953 00001C74 8B0D[083F0500] mov ecx, [_@@s2] 2954 00001C7A 8B35[0C3F0500] mov esi, [_@@s3] 2955 00001C80 29F1 sub ecx, esi ; t2 = s2 - s3 2956 00001C82 8D3471 lea esi, [ecx+esi*2] ; t3 = s2 + s3 2957 00001C85 8B4500 mov eax, [ebp+0] ; @@MULH [edi+(0+j)*SBLIMIT*4],[ebp+(0+j)*4], 2958 ; -,-,-,-,0,ecx,[ebx+(0+j)*4] 2959 00001C88 F7E9 imul ecx 2960 00001C8A 0313 add edx, [ebx] 2961 00001C8C 8917 mov [edi], edx 2962 00001C8E 8B4544 mov eax, [ebp+68] ; @@MULH [edi+(17-j)*SBLIMIT*4],[ebp+(17-j)*4] 2963 ; ,-,-,-,-,0,ecx,[ebx+(17-j)*4] 2964 00001C91 F7E9 imul ecx 2965 00001C93 035344 add edx, [ebx+68] 2966 00001C96 899780080000 mov [edi+2176], edx ; 17*SBLIMIT*4 = 2176 2967 00001C9C 8B4548 mov eax, [ebp+72] ; @@MULH [ebx+(0+j)*4],[ebp+(0+j+18)*4],-,-,-,-,0,esi,- 2968 00001C9F F7EE imul esi 2969 00001CA1 8913 mov [ebx], edx 2970 00001CA3 8B858C000000 mov eax, [ebp+140] ; @@MULH [ebx+(17-j)*4],[ebp+(17-j+18)*4],-,-,-,-,0,esi,- 2971 00001CA9 F7EE imul esi 2972 00001CAB 895344 mov [ebx+68], edx 2973 00001CAE 8B15[203F0500] mov edx, [_@@@tmp+10h] ; IRP j,0,1,2,3 ; j = 1 2974 00001CB4 8B35[243F0500] mov esi, [_@@@tmp+14h] 2975 00001CBA A1[283F0500] mov eax, [_@@@tmp+18h] 2976 00001CBF 8B0D[2C3F0500] mov ecx, [_@@@tmp+1Ch] 2977 00001CC5 29D0 sub eax, edx 2978 00001CC7 8D1450 lea edx, [eax+edx*2] 2979 00001CCA A3[083F0500] mov [_@@s2], eax 2980 00001CCF 8915[043F0500] mov [_@@s0], edx 2981 00001CD5 29F1 sub ecx, esi 2982 00001CD7 8D0471 lea eax, [ecx+esi*2] 2983 00001CDA D1E0 shl eax, 1 2984 00001CDC BA07F74142 mov edx, 4241F707h ; icos36h_1 2985 00001CE1 F7EA imul edx 2986 00001CE3 89D6 mov esi, edx 2987 00001CE5 89C8 mov eax, ecx 2988 00001CE7 C1E002 shl eax, 2 2989 00001CEA BA1E75A37B mov edx, 7BA3751Eh ; icos36h_7 (8-1) 2990 00001CEF F7EA imul edx 2991 00001CF1 8915[0C3F0500] mov [_@@s3], edx 2992 00001CF7 8B0D[043F0500] mov ecx, [_@@s0] 2993 00001CFD 29F1 sub ecx, esi 2994 00001CFF 8D3471 lea esi, [ecx+esi*2] 2995 00001D02 8B4528 mov eax, [ebp+40] 2996 00001D05 F7E9 imul ecx 2997 00001D07 035328 add edx, [ebx+40] 2998 00001D0A 899700050000 mov [edi+1280], edx 2999 00001D10 8B451C mov eax, [ebp+28] 3000 00001D13 F7E9 imul ecx 3001 00001D15 03531C add edx, [ebx+28] 3002 00001D18 899780030000 mov [edi+896], edx 3003 00001D1E 8B4570 mov eax, [ebp+112] 3004 00001D21 F7EE imul esi 3005 00001D23 895328 mov [ebx+40], edx 3006 00001D26 8B4564 mov eax, [ebp+100] 3007 00001D29 F7EE imul esi 3008 00001D2B 89531C mov [ebx+28], edx 3009 00001D2E 8B0D[083F0500] mov ecx, [_@@s2] 3010 00001D34 8B35[0C3F0500] mov esi, [_@@s3] 3011 00001D3A 29F1 sub ecx, esi 3012 00001D3C 8D3471 lea esi, [ecx+esi*2] 3013 00001D3F 8B4504 mov eax, [ebp+4] 3014 00001D42 F7E9 imul ecx 3015 00001D44 035304 add edx, [ebx+4] 3016 00001D47 899780000000 mov [edi+128], edx 3017 00001D4D 8B4540 mov eax, [ebp+64] 3018 00001D50 F7E9 imul ecx 3019 00001D52 035340 add edx, [ebx+64] 3020 00001D55 899700080000 mov [edi+2048], edx 3021 00001D5B 8B454C mov eax, [ebp+76] 3022 00001D5E F7EE imul esi 3023 00001D60 895304 mov [ebx+4], edx 3024 00001D63 8B8588000000 mov eax, [ebp+136] 3025 00001D69 F7EE imul esi 3026 00001D6B 895340 mov [ebx+64], edx 3027 00001D6E 8B15[303F0500] mov edx, [_@@@tmp+20h] ; IRP j,0,1,2,3 ; j = 2 3028 00001D74 8B35[343F0500] mov esi, [_@@@tmp+24h] 3029 00001D7A A1[383F0500] mov eax, [_@@@tmp+28h] 3030 00001D7F 8B0D[3C3F0500] mov ecx, [_@@@tmp+2Ch] 3031 00001D85 29D0 sub eax, edx 3032 00001D87 8D1450 lea edx, [eax+edx*2] 3033 00001D8A A3[083F0500] mov [_@@s2], eax 3034 00001D8F 8915[043F0500] mov [_@@s0], edx 3035 00001D95 29F1 sub ecx, esi 3036 00001D97 8D0471 lea eax, [ecx+esi*2] 3037 00001D9A D1E0 shl eax, 1 3038 00001D9C BA6CBE9D46 mov edx, 469DBE6Ch ; icos36h_2 3039 00001DA1 F7EA imul edx 3040 00001DA3 89D6 mov esi, edx 3041 00001DA5 89C8 mov eax, ecx 3042 00001DA7 C1E002 shl eax, 2 3043 00001DAA BA62ECB74B mov edx, 4BB7EC62h ; icos36h_6 (8-2) 3044 00001DAF F7EA imul edx 3045 00001DB1 8915[0C3F0500] mov [_@@s3], edx 3046 00001DB7 8B0D[043F0500] mov ecx, [_@@s0] 3047 00001DBD 29F1 sub ecx, esi 3048 00001DBF 8D3471 lea esi, [ecx+esi*2] 3049 00001DC2 8B452C mov eax, [ebp+44] 3050 00001DC5 F7E9 imul ecx 3051 00001DC7 03532C add edx, [ebx+44] 3052 00001DCA 899780050000 mov [edi+1408], edx 3053 00001DD0 8B4518 mov eax, [ebp+24] 3054 00001DD3 F7E9 imul ecx 3055 00001DD5 035318 add edx, [ebx+24] 3056 00001DD8 899700030000 mov [edi+768], edx 3057 00001DDE 8B4574 mov eax, [ebp+116] 3058 00001DE1 F7EE imul esi 3059 00001DE3 89532C mov [ebx+44], edx 3060 00001DE6 8B4560 mov eax, [ebp+96] 3061 00001DE9 F7EE imul esi 3062 00001DEB 895318 mov [ebx+24], edx 3063 00001DEE 8B0D[083F0500] mov ecx, [_@@s2] 3064 00001DF4 8B35[0C3F0500] mov esi, [_@@s3] 3065 00001DFA 29F1 sub ecx, esi 3066 00001DFC 8D3471 lea esi, [ecx+esi*2] 3067 00001DFF 8B4508 mov eax, [ebp+8] 3068 00001E02 F7E9 imul ecx 3069 00001E04 035308 add edx, [ebx+8] 3070 00001E07 899700010000 mov [edi+256], edx 3071 00001E0D 8B453C mov eax, [ebp+60] 3072 00001E10 F7E9 imul ecx 3073 00001E12 03533C add edx, [ebx+60] 3074 00001E15 899780070000 mov [edi+1920], edx 3075 00001E1B 8B4550 mov eax, [ebp+80] 3076 00001E1E F7EE imul esi 3077 00001E20 895308 mov [ebx+8], edx 3078 00001E23 8B8584000000 mov eax, [ebp+132] 3079 00001E29 F7EE imul esi 3080 00001E2B 89533C mov [ebx+60], edx 3081 00001E2E 8B15[403F0500] mov edx, [_@@@tmp+30h] ; IRP j,0,1,2,3 ; j = 3 3082 00001E34 8B35[443F0500] mov esi, [_@@@tmp+34h] 3083 00001E3A A1[483F0500] mov eax, [_@@@tmp+38h] 3084 00001E3F 8B0D[4C3F0500] mov ecx, [_@@@tmp+3Ch] 3085 00001E45 29D0 sub eax, edx 3086 00001E47 8D1450 lea edx, [eax+edx*2] 3087 00001E4A A3[083F0500] mov [_@@s2], eax 3088 00001E4F 8915[043F0500] mov [_@@s0], edx 3089 00001E55 29F1 sub ecx, esi 3090 00001E57 8D0471 lea eax, [ecx+esi*2] 3091 00001E5A D1E0 shl eax, 1 3092 00001E5C BABE2B214E mov edx, 4E212BBEh ; icos36h_3 3093 00001E61 F7EA imul edx 3094 00001E63 89D6 mov esi, edx 3095 00001E65 89C8 mov eax, ecx 3096 00001E67 D1E0 shl eax, 1 3097 00001E69 BADFA1946F mov edx, 6F94A1DFh ; icos36h_5 (8-3) 3098 00001E6E F7EA imul edx 3099 00001E70 8915[0C3F0500] mov [_@@s3], edx 3100 00001E76 8B0D[043F0500] mov ecx, [_@@s0] 3101 00001E7C 29F1 sub ecx, esi 3102 00001E7E 8D3471 lea esi, [ecx+esi*2] 3103 00001E81 8B4530 mov eax, [ebp+48] 3104 00001E84 F7E9 imul ecx 3105 00001E86 035330 add edx, [ebx+48] 3106 00001E89 899700060000 mov [edi+1536], edx 3107 00001E8F 8B4514 mov eax, [ebp+20] 3108 00001E92 F7E9 imul ecx 3109 00001E94 035314 add edx, [ebx+20] 3110 00001E97 899780020000 mov [edi+640], edx 3111 00001E9D 8B4578 mov eax, [ebp+120] 3112 00001EA0 F7EE imul esi 3113 00001EA2 895330 mov [ebx+30h], edx 3114 00001EA5 8B455C mov eax, [ebp+92] 3115 00001EA8 F7EE imul esi 3116 00001EAA 895314 mov [ebx+20], edx 3117 00001EAD 8B0D[083F0500] mov ecx, [_@@s2] 3118 00001EB3 8B35[0C3F0500] mov esi, [_@@s3] 3119 00001EB9 29F1 sub ecx, esi 3120 00001EBB 8D3471 lea esi, [ecx+esi*2] 3121 00001EBE 8B450C mov eax, [ebp+12] 3122 00001EC1 F7E9 imul ecx 3123 00001EC3 03530C add edx, [ebx+12] 3124 00001EC6 899780010000 mov [edi+384], edx 3125 00001ECC 8B4538 mov eax, [ebp+56] 3126 00001ECF F7E9 imul ecx 3127 00001ED1 035338 add edx, [ebx+56] 3128 00001ED4 899700070000 mov [edi+1792], edx 3129 00001EDA 8B4554 mov eax, [ebp+84] 3130 00001EDD F7EE imul esi 3131 00001EDF 89530C mov [ebx+12], edx 3132 00001EE2 8B8580000000 mov eax, [ebp+128] 3133 00001EE8 F7EE imul esi 3134 00001EEA 895338 mov [ebx+56], edx 3135 00001EED 8B0D[503F0500] mov ecx, [_@@@tmp+40h] ; IRP j,4 3136 ; [@@tmp+(j*4+0)*4] 3137 00001EF3 A1[543F0500] mov eax, [_@@@tmp+44h] ; [@@tmp+(j*4+1)*4] 3138 00001EF8 D1E0 shl eax, 1 3139 00001EFA BA9A79825A mov edx, 5A82799Ah ; icos36h_4 (8-4) 3140 00001EFF F7EA imul edx 3141 00001F01 29D1 sub ecx, edx 3142 00001F03 8D3451 lea esi, [ecx+edx*2] 3143 00001F06 8B4534 mov eax, [ebp+52] ; @@MULH [edi+(9+j)*SBLIMIT*4],[ebp+(9+j)*4], 3144 ; -,-,-,-,0,ecx,[ebx+(9+j)*4] 3145 ; out[(9+4)*SBLIMIT] = MULH(t0,win[9+4])+buf[9+4] 3146 00001F09 F7E9 imul ecx 3147 00001F0B 035334 add edx, [ebx+52] 3148 00001F0E 899780060000 mov [edi+1664], edx ; 13*SBLIMIT*4 = 1664 3149 00001F14 8B4510 mov eax, [ebp+16] ; @MULH [edi+(8-j)*SBLIMIT*4],[ebp+(8-j)*4], 3150 ; -,-,-,-,0,ecx,[ebx+(8-j)*4] 3151 00001F17 F7E9 imul ecx 3152 00001F19 035310 add edx, [ebx+16] 3153 00001F1C 899700020000 mov [edi+512], edx 3154 00001F22 8B457C mov eax, [ebp+124] ; @@MULH [ebx+(9+j)*4],[ebp+(9+j+18)*4] ,-,-,-,-,0,esi,- 3155 00001F25 F7EE imul esi 3156 00001F27 895334 mov [ebx+52], edx 3157 00001F2A 8B4558 mov eax, [ebp+88] ; @@MULH [ebx+(8-j)*4],[ebp+(8-j+18)*4],-,-,-,-,0,esi,- 3158 00001F2D F7EE imul esi 3159 00001F2F 895310 mov [ebx+16], edx 3160 00001F32 5E pop esi 3161 00001F33 C3 retn 3162 3163 3164 ; =============== S U B R O U T I N E ======================================= 3165 3166 3167 mp3_imdct12: 3168 00001F34 8B06 mov eax, [esi] ; in: esi=src - out: [out2_...] 3169 00001F36 A3[583F0500] mov [_@@tmp0], eax ; IRP nn,0,1,2,3,4,5 3170 ; @@tmp&nn rd 1 3171 ; ENDM 3172 ; mov eax,[esi+0*3*4] ; = src[0*3] 3173 00001F3B 8B560C mov edx, [esi+12] ; [esi+1*3*4] ; = src[1*3] 3174 00001F3E 01D0 add eax, edx ; = src[0*3]+src[1*3] 3175 00001F40 A3[5C3F0500] mov [_@@tmp1], eax 3176 00001F45 8B4618 mov eax, [esi+24] 3177 00001F48 01C2 add edx, eax 3178 00001F4A 8915[603F0500] mov [_@@tmp2], edx 3179 00001F50 8B5624 mov edx, [esi+36] ; [esi+3*3*4] 3180 00001F53 01D0 add eax, edx 3181 00001F55 A3[643F0500] mov [_@@tmp3], eax 3182 00001F5A 8B4630 mov eax, [esi+48] 3183 00001F5D 01C2 add edx, eax 3184 00001F5F 8915[683F0500] mov [_@@tmp4], edx 3185 00001F65 8B563C mov edx, [esi+60] ; [esi+5*3*4] 3186 00001F68 01D0 add eax, edx ; = src[4*3]+src[5*3] 3187 00001F6A 0305[643F0500] add eax, [_@@tmp3] 3188 00001F70 A3[6C3F0500] mov [_@@tmp5], eax ; tmp5 = src[4*3]+src[5*3]+tmp3 3189 00001F75 8B15[5C3F0500] mov edx, [_@@tmp1] 3190 00001F7B 0115[643F0500] add [_@@tmp3], edx 3191 00001F81 A1[603F0500] mov eax, [_@@tmp2] ; @@MULH @@tmp2,@@tmp2,-,-,-,-,1,C3,- 3192 ; tmp2 = MULH(2*tmp2,C3) 3193 00001F86 D1E0 shl eax, 1 3194 00001F88 BAA2EBD96E mov edx, 6ED9EBA2h ; C3 3195 00001F8D F7EA imul edx 3196 00001F8F 8915[603F0500] mov [_@@tmp2], edx 3197 00001F95 A1[643F0500] mov eax, [_@@tmp3] ; @@MULH @@tmp3,@@tmp3,-,-,-,-,2,C3,- 3198 ; tmp3 = MULH(4*tmp3,C3) 3199 00001F9A C1E002 shl eax, 2 3200 00001F9D BAA2EBD96E mov edx, 6ED9EBA2h ; C3 3201 00001FA2 F7EA imul edx 3202 00001FA4 8915[643F0500] mov [_@@tmp3], edx 3203 00001FAA A1[5C3F0500] mov eax, [_@@tmp1] ; @@MULH edx,@@tmp1,sub,@@tmp5,-,-,1,icos36h_4,- 3204 00001FAF 2B05[6C3F0500] sub eax, [_@@tmp5] ; t2 = MULH(2*(tmp1-tmp5),icos36h_4) 3205 00001FB5 D1E0 shl eax, 1 3206 00001FB7 BA9A79825A mov edx, 5A82799Ah ; icos36h_4 3207 00001FBC F7EA imul edx 3208 00001FBE A1[583F0500] mov eax, [_@@tmp0] ; @@SUM eax,@@tmp0,sub,@@tmp4,-,- 3209 00001FC3 2B05[683F0500] sub eax, [_@@tmp4] ; t1 = tmp0 - tmp4 3210 00001FC9 29D0 sub eax, edx ; @@CAST macro t1,t2,dst0,dst1,dst2,dst3 3211 ; sub t1,t2 ;t1-t2 3212 ; lea t2,[t1+t2*2] ;t1+t2 3213 ; mov dword ptr [mp3_out2_a&dst0],t1 ;t1-t2 3214 ; mov dword ptr [mp3_out2_b&dst0],t2 ;t1+t2 3215 ; endm 3216 00001FCB 8D1450 lea edx, [eax+edx*2] ; @@CAST eax,edx,1,4,7,10 3217 ; out2[1,4,7,10]=t1-t2,t1-t2,t1+t2,t1+t2 3218 00001FCE A3[743F0500] mov [mp3_out2_a1], eax 3219 00001FD3 8915[803F0500] mov [mp3_out2_b1], edx 3220 00001FD9 A1[683F0500] mov eax, [_@@tmp4] 3221 00001FDE 8B15[5C3F0500] mov edx, [_@@tmp1] 3222 00001FE4 D1F8 sar eax, 1 3223 00001FE6 D1E2 shl edx, 1 3224 00001FE8 0105[583F0500] add [_@@tmp0], eax ; tmp0 = tmp0 + tmp4/2 3225 00001FEE 0115[6C3F0500] add [_@@tmp5], edx ; tmp5 = tmp5 + tmp1*2 3226 00001FF4 A1[6C3F0500] mov eax, [_@@tmp5] ; @@MULH edx,@@tmp5,add,@@tmp3,-,-,0,icos36h_1,- 3227 00001FF9 0305[643F0500] add eax, [_@@tmp3] 3228 00001FFF BA07F74142 mov edx, 4241F707h ; icos36h_1 3229 00002004 F7EA imul edx 3230 00002006 A1[583F0500] mov eax, [_@@tmp0] ; @@SUM eax,@@tmp0,add,@@tmp2,-,- 3231 0000200B 0305[603F0500] add eax, [_@@tmp2] 3232 00002011 29D0 sub eax, edx ; @@CAST eax,edx,2,3,8,9 3233 00002013 8D1450 lea edx, [eax+edx*2] 3234 00002016 A3[783F0500] mov [mp3_out2_a2], eax 3235 0000201B 8915[843F0500] mov [mp3_out2_b2], edx 3236 00002021 A1[6C3F0500] mov eax, [_@@tmp5] ; @@MULH edx,@@tmp5,sub,@@tmp3,-,-,1,icos36h_7,- 3237 00002026 2B05[643F0500] sub eax, [_@@tmp3] 3238 0000202C D1E0 shl eax, 1 3239 0000202E BA1E75A37B mov edx, 7BA3751Eh ; icos36h_7 3240 00002033 F7EA imul edx 3241 00002035 A1[583F0500] mov eax, [_@@tmp0] ; @@SUM eax,@@tmp0,sub,@@tmp2,-,- 3242 0000203A 2B05[603F0500] sub eax, [_@@tmp2] 3243 00002040 29D0 sub eax, edx ; @@CAST eax,edx,0,5,6,11 3244 00002042 8D1450 lea edx, [eax+edx*2] 3245 00002045 A3[703F0500] mov [mp3_out2_a0], eax 3246 0000204A 8915[7C3F0500] mov [mp3_out2_b0], edx 3247 00002050 C3 retn 3248 3249 3250 ; =============== S U B R O U T I N E ======================================= 3251 3252 3253 mp3_compute_imdct: 3254 00002051 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; in: ebx=granule 3255 00002058 740E jz short .no_rdtsc_supported ; timelog_start rdtsc_imdct 3256 0000205A 0F31 rdtsc 3257 0000205C 2905[348D0000] sub [rdtsc_imdct], eax 3258 00002062 1915[388D0000] sbb [rdtsc_imdct+4], edx 3259 3260 .no_rdtsc_supported: 3261 00002068 53 push ebx 3262 00002069 8B4B60 mov ecx, [ebx+96] ; [ebx+$mp3gr_num_nonzero_hybrids_div9] 3263 0000206C 6BC109 imul eax, ecx, 9 3264 0000206F 8DBC83A0000000 lea edi, [ebx+eax*4+160] ; [ebx+$mp3gr_sb_hybrid+eax*4] 3265 00002076 E322 jecxz .breakout 3266 3267 .scan_zero_lop: 3268 00002078 83EF24 sub edi, 36 ; index-9 3269 0000207B 8B07 mov eax, [edi] ; [edi+0*4] 3270 0000207D 0B4704 or eax, [edi+4] 3271 00002080 0B4708 or eax, [edi+8] 3272 00002083 0B470C or eax, [edi+12] 3273 00002086 0B4710 or eax, [edi+16] 3274 00002089 0B4714 or eax, [edi+20] 3275 0000208C 0B4718 or eax, [edi+24] 3276 0000208F 0B471C or eax, [edi+28] 3277 00002092 0B4720 or eax, [edi+32] ; [edi+8*4] 3278 00002095 7503 jnz short .breakout 3279 00002097 49 dec ecx 3280 00002098 75DE jnz short .scan_zero_lop 3281 3282 .breakout: 3283 0000209A 41 inc ecx ; div9+1 3284 0000209B D1E9 shr ecx, 1 ; div18 3285 0000209D 890D[9C3F0500] mov [_@@sblimit], ecx 3286 000020A3 837B2C02 cmp dword [ebx+44], 2 ; [ebx+$mp3gr_block_type] 3287 000020A7 7505 jnz short .this_long_end 3288 000020A9 8B4B30 mov ecx, [ebx+48] ; [ebx+$mp3gr_switch_point] 3289 000020AC D1E1 shl ecx, 1 ; 0,1 --> 0,2 3290 3291 .this_long_end: 3292 000020AE 890D[983F0500] mov [_@@mdct_long_end], ecx 3293 000020B4 8B4330 mov eax, [ebx+48] ; [ebx+$mp3gr_switch_point] 3294 000020B7 A3[A03F0500] mov [_@@switch_point], eax 3295 000020BC 8B432C mov eax, [ebx+44] ; [ebx+$mp3gr_block_type] 3296 000020BF 69C090000000 imul eax, 144 ; 1*36*4 3297 000020C5 A3[943F0500] mov [_@@www], eax 3298 000020CA 8B0D[680A0100] mov ecx, [mp3_curr_channel] 3299 000020D0 A1[6C0A0100] mov eax, [mp3_curr_granule] 3300 000020D5 69C900120000 imul ecx, 4608 ; 36*SBLIMIT*4 ; channel ; sb_samples[ch][gr*18] 3301 000020DB 69C000090000 imul eax, 2304 ; 18*SBLIMIT*4 ; frame=granule*18 3302 000020E1 8DBC01[C8D30000] lea edi, [mp3_sb_samples+ecx+eax] 3303 000020E8 8DB3A0000000 lea esi, [ebx+160] ; [ebx+$mp3gr_sb_hybrid] 3304 000020EE A1[680A0100] mov eax, [mp3_curr_channel] 3305 000020F3 69C000090000 imul eax, 2304 ; SBLIMIT*18*4 3306 000020F9 8D98[C8F70000] lea ebx, [mp3_mdct_buf+eax] 3307 000020FF F605[1C8C0000]10 test byte [cpuid_flags], 10h 3308 00002106 740E jz short .no_rdtsc_supported@ ; timelog_start rdtsc_imdct36 3309 00002108 0F31 rdtsc 3310 0000210A 2905[4C8D0000] sub [rdtsc_imdct36], eax 3311 00002110 1915[508D0000] sbb [rdtsc_imdct36+4], edx 3312 3313 .no_rdtsc_supported@: 3314 00002116 C705[903F0500]0000- mov dword [_@@@JJJ], 0 3314 0000211E 0000 3315 00002120 833D[983F0500]00 cmp dword [_@@mdct_long_end], 0 3316 00002127 744D jz short .imdct36_done 3317 3318 .imdct36_lop: 3319 00002129 BD[F8F80400] mov ebp, mp3_mdct_win ; for j=0 to mdct_long_end-1 3320 0000212E 833D[903F0500]02 cmp dword [_@@@JJJ], 2 3321 00002135 19C0 sbb eax, eax 3322 00002137 2305[A03F0500] and eax, [_@@switch_point] 3323 0000213D 7506 jnz short .this_window ; force window 0 3324 0000213F 032D[943F0500] add ebp, [_@@www] ; mdct_win 3325 3326 .this_window: 3327 00002145 A1[903F0500] mov eax, [_@@@JJJ] 3328 0000214A D1E8 shr eax, 1 ; cy=0,1 3329 0000214C 19C0 sbb eax, eax ; eax=0,FFFFFFFFh 3330 0000214E 2540020000 and eax, 576 ; 4*36*4 3331 00002153 01C5 add ebp, eax 3332 00002155 E808F8FFFF call mp3_imdct36 3333 0000215A 83C704 add edi, 4 ; 1*4 ; dst 3334 0000215D 83C648 add esi, 72 ; 18*4 ; sb_hybrid 3335 00002160 83C348 add ebx, 72 ; mdct_buf ; next 3336 00002163 FF05[903F0500] inc dword [_@@@JJJ] 3337 00002169 A1[903F0500] mov eax, [_@@@JJJ] 3338 0000216E 3B05[983F0500] cmp eax, [_@@mdct_long_end] 3339 00002174 72B3 jb short .imdct36_lop 3340 3341 .imdct36_done: 3342 00002176 F605[1C8C0000]10 test byte [cpuid_flags], 10h 3343 0000217D 740E jz short .no_rdtsc_supported@@ ; timelog_end rdtsc_imdct36 3344 0000217F 0F31 rdtsc 3345 00002181 0105[4C8D0000] add [rdtsc_imdct36], eax 3346 00002187 1115[508D0000] adc [rdtsc_imdct36+4], edx 3347 3348 .no_rdtsc_supported@@: 3349 0000218D F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_imdct12 3350 00002194 740E jz short .no_rdtsc_supported@@@ 3351 00002196 0F31 rdtsc 3352 00002198 2905[648D0000] sub [rdtsc_imdct12], eax 3353 0000219E 1915[688D0000] sbb [rdtsc_imdct12+4], edx 3354 3355 .no_rdtsc_supported@@@: 3356 000021A4 A1[903F0500] mov eax, [_@@@JJJ] 3357 000021A9 3B05[9C3F0500] cmp eax, [_@@sblimit] 3358 000021AF 0F83D7020000 jnb .imdct12_done 3359 3360 .imdct12_lop: 3361 000021B5 BD[18FA0400] mov ebp, (mp3_mdct_win+120h) ; for j=mdct_long_end to sblimit-1 3362 000021BA A1[903F0500] mov eax, [_@@@JJJ] 3363 000021BF D1E8 shr eax, 1 ; cy=0,1 3364 000021C1 19C0 sbb eax, eax ; eax=0,FFFFFFFFh 3365 000021C3 2540020000 and eax, 576 ; 4*36*4 3366 000021C8 01C5 add ebp, eax ; mdct_win 3367 000021CA 8B03 mov eax, [ebx] ; IRP i,0,1,2,3,4,5 3368 000021CC 8907 mov [edi], eax ; @@SUM [edi+i*SBLIMIT*4],[ebx+(i+0)*4],-,-,-,- 3369 000021CE 8B4304 mov eax, [ebx+4] 3370 000021D1 898780000000 mov [edi+128], eax 3371 000021D7 8B4308 mov eax, [ebx+8] 3372 000021DA 898700010000 mov [edi+256], eax 3373 000021E0 8B430C mov eax, [ebx+12] 3374 000021E3 898780010000 mov [edi+384], eax 3375 000021E9 8B4310 mov eax, [ebx+16] 3376 000021EC 898700020000 mov [edi+512], eax 3377 000021F2 8B4314 mov eax, [ebx+20] 3378 000021F5 898780020000 mov [edi+640], eax ; ENDM 3379 000021FB 81C700030000 add edi, 768 ; 6*SBLIMIT*4 3380 00002201 E82EFDFFFF call mp3_imdct12 3381 00002206 A1[703F0500] mov eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5 3382 0000220B 8B5500 mov edx, [ebp+0] ; @@MULH [edi+i*SBLIMIT*4],[mp3_out2_a&i], 3383 ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(1*6+i)*4] 3384 0000220E F7EA imul edx 3385 00002210 035318 add edx, [ebx+24] 3386 00002213 8917 mov [edi], edx 3387 00002215 A1[7C3F0500] mov eax, [mp3_out2_b0] ; @@MULH [ebx+(2*6+i)*4],[mp3_out2_b&i], 3388 ; -,-,-,-,0,[ebp+(i+6)*4],- 3389 0000221A 8B5518 mov edx, [ebp+24] 3390 0000221D F7EA imul edx 3391 0000221F 895330 mov [ebx+48], edx 3392 00002222 A1[743F0500] mov eax, [mp3_out2_a1] ; i = 1 3393 00002227 8B5504 mov edx, [ebp+4] 3394 0000222A F7EA imul edx 3395 0000222C 03531C add edx, [ebx+28] 3396 0000222F 899780000000 mov [edi+128], edx 3397 00002235 A1[803F0500] mov eax, [mp3_out2_b1] 3398 0000223A 8B551C mov edx, [ebp+28] 3399 0000223D F7EA imul edx 3400 0000223F 895334 mov [ebx+52], edx 3401 00002242 A1[783F0500] mov eax, [mp3_out2_a2] ; i = 2 3402 00002247 8B5508 mov edx, [ebp+8] 3403 0000224A F7EA imul edx 3404 0000224C 035320 add edx, [ebx+32] 3405 0000224F 899700010000 mov [edi+256], edx 3406 00002255 A1[843F0500] mov eax, [mp3_out2_b2] 3407 0000225A 8B5520 mov edx, [ebp+32] 3408 0000225D F7EA imul edx 3409 0000225F 895338 mov [ebx+56], edx 3410 00002262 A1[783F0500] mov eax, [mp3_out2_a2] ; i = 3 ; mp3_out2_a3 equ mp3_out2_a2 3411 00002267 8B550C mov edx, [ebp+12] 3412 0000226A F7EA imul edx 3413 0000226C 035324 add edx, [ebx+36] 3414 0000226F 899780010000 mov [edi+384], edx 3415 00002275 A1[843F0500] mov eax, [mp3_out2_b2] ; mp3_out2_b3 equ mp3_out2_b2 3416 0000227A 8B5524 mov edx, [ebp+36] 3417 0000227D F7EA imul edx 3418 0000227F 89533C mov [ebx+60], edx 3419 00002282 A1[743F0500] mov eax, [mp3_out2_a1] ; i = 4 ; mp3_out2_a4 equ mp3_out2_a1 3420 00002287 8B5510 mov edx, [ebp+16] 3421 0000228A F7EA imul edx 3422 0000228C 035328 add edx, [ebx+40] 3423 0000228F 899700020000 mov [edi+512], edx 3424 00002295 A1[803F0500] mov eax, [mp3_out2_b1] ; mp3_out2_b4 equ mp3_out2_b1 3425 0000229A 8B5528 mov edx, [ebp+40] 3426 0000229D F7EA imul edx 3427 0000229F 895340 mov [ebx+64], edx 3428 000022A2 A1[703F0500] mov eax, [mp3_out2_a0] ; i = 5 ; mp3_out2_a5 equ mp3_out2_a0 3429 000022A7 8B5514 mov edx, [ebp+20] 3430 000022AA F7EA imul edx 3431 000022AC 03532C add edx, [ebx+44] 3432 000022AF 899780020000 mov [edi+640], edx 3433 000022B5 A1[7C3F0500] mov eax, [mp3_out2_b0] ; mp3_out2_b5 equ mp3_out2_b0 3434 000022BA 8B552C mov edx, [ebp+44] 3435 000022BD F7EA imul edx 3436 000022BF 895344 mov [ebx+68], edx ; ENDM 3437 000022C2 81C700030000 add edi, 768 ; 6*SBLIMIT*4 3438 000022C8 83C604 add esi, 4 ; sb_hybrid 3439 000022CB E864FCFFFF call mp3_imdct12 3440 000022D0 A1[703F0500] mov eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5 3441 000022D5 8B5500 mov edx, [ebp+0] ; @@MULH [edi+i*SBLIMIT*4],[mp3_out2_a&i], 3442 ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(2*6+i)*4] 3443 000022D8 F7EA imul edx ; @@MULH [ebx+(0*6+i)*4],[mp3_out2_b&i], 3444 ; -,-,-,-,0,[ebp+(i+6)*4],- 3445 000022DA 035330 add edx, [ebx+48] 3446 000022DD 8917 mov [edi], edx 3447 000022DF A1[7C3F0500] mov eax, [mp3_out2_b0] 3448 000022E4 8B5518 mov edx, [ebp+18h] 3449 000022E7 F7EA imul edx 3450 000022E9 8913 mov [ebx], edx 3451 000022EB A1[743F0500] mov eax, [mp3_out2_a1] ; i = 1 3452 000022F0 8B5504 mov edx, [ebp+4] 3453 000022F3 F7EA imul edx 3454 000022F5 035334 add edx, [ebx+52] 3455 000022F8 899780000000 mov [edi+128], edx 3456 000022FE A1[803F0500] mov eax, [mp3_out2_b1] 3457 00002303 8B551C mov edx, [ebp+28] 3458 00002306 F7EA imul edx 3459 00002308 895304 mov [ebx+4], edx 3460 0000230B A1[783F0500] mov eax, [mp3_out2_a2] ; i = 2 3461 00002310 8B5508 mov edx, [ebp+8] 3462 00002313 F7EA imul edx 3463 00002315 035338 add edx, [ebx+56] 3464 00002318 899700010000 mov [edi+256], edx 3465 0000231E A1[843F0500] mov eax, [mp3_out2_b2] 3466 00002323 8B5520 mov edx, [ebp+32] 3467 00002326 F7EA imul edx 3468 00002328 895308 mov [ebx+8], edx 3469 0000232B A1[783F0500] mov eax, [mp3_out2_a2] ; i = 3 3470 00002330 8B550C mov edx, [ebp+12] 3471 00002333 F7EA imul edx 3472 00002335 03533C add edx, [ebx+60] 3473 00002338 899780010000 mov [edi+384], edx 3474 0000233E A1[843F0500] mov eax, [mp3_out2_b2] 3475 00002343 8B5524 mov edx, [ebp+36] 3476 00002346 F7EA imul edx 3477 00002348 89530C mov [ebx+12], edx 3478 0000234B A1[743F0500] mov eax, [mp3_out2_a1] ; i = 4 3479 00002350 8B5510 mov edx, [ebp+16] 3480 00002353 F7EA imul edx 3481 00002355 035340 add edx, [ebx+64] 3482 00002358 899700020000 mov [edi+512], edx 3483 0000235E A1[803F0500] mov eax, [mp3_out2_b1] 3484 00002363 8B5528 mov edx, [ebp+40] 3485 00002366 F7EA imul edx 3486 00002368 895310 mov [ebx+16], edx 3487 0000236B A1[703F0500] mov eax, [mp3_out2_a0] ; i = 5 3488 00002370 8B5514 mov edx, [ebp+20] 3489 00002373 F7EA imul edx 3490 00002375 035344 add edx, [ebx+68] 3491 00002378 899780020000 mov [edi+640], edx 3492 0000237E A1[7C3F0500] mov eax, [mp3_out2_b0] 3493 00002383 8B552C mov edx, [ebp+44] 3494 00002386 F7EA imul edx 3495 00002388 895314 mov [ebx+20], edx ; ENDM 3496 0000238B 83C604 add esi, 4 3497 0000238E E8A1FBFFFF call mp3_imdct12 3498 00002393 A1[703F0500] mov eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5 3499 00002398 8B5500 mov edx, [ebp+0] ; @@MULH [ebx+(0*6+i)*4],[mp3_out2_a&i], 3500 ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(0*6+i)*4] 3501 0000239B F7EA imul edx 3502 0000239D 0313 add edx, [ebx] 3503 0000239F 8913 mov [ebx], edx 3504 000023A1 A1[7C3F0500] mov eax, [mp3_out2_b0] ; @@MULH [ebx+(1*6+i)*4],[mp3_out2_b&i], 3505 ; -,-,-,-,0,[ebp+(i+6)*4],- 3506 000023A6 8B5518 mov edx, [ebp+24] 3507 000023A9 F7EA imul edx 3508 000023AB 895318 mov [ebx+24], edx 3509 000023AE C7433000000000 mov dword [ebx+48], 0 ; [ebx+(2*6+i)*4] 3510 000023B5 A1[743F0500] mov eax, [mp3_out2_a1] ; i = 1 3511 000023BA 8B5504 mov edx, [ebp+4] 3512 000023BD F7EA imul edx 3513 000023BF 035304 add edx, [ebx+4] 3514 000023C2 895304 mov [ebx+4], edx 3515 000023C5 A1[803F0500] mov eax, [mp3_out2_b1] 3516 000023CA 8B551C mov edx, [ebp+28] 3517 000023CD F7EA imul edx 3518 000023CF 89531C mov [ebx+28], edx 3519 000023D2 C7433400000000 mov dword [ebx+52], 0 ; [ebx+(2*6+i)*4] 3520 000023D9 A1[783F0500] mov eax, [mp3_out2_a2] ; i = 2 3521 000023DE 8B5508 mov edx, [ebp+8] 3522 000023E1 F7EA imul edx 3523 000023E3 035308 add edx, [ebx+8] 3524 000023E6 895308 mov [ebx+8], edx 3525 000023E9 A1[843F0500] mov eax, [mp3_out2_b2] 3526 000023EE 8B5520 mov edx, [ebp+32] 3527 000023F1 F7EA imul edx 3528 000023F3 895320 mov [ebx+32], edx 3529 000023F6 C7433800000000 mov dword [ebx+56], 0 3530 000023FD A1[783F0500] mov eax, [mp3_out2_a2] ; i = 3 3531 00002402 8B550C mov edx, [ebp+12] 3532 00002405 F7EA imul edx 3533 00002407 03530C add edx, [ebx+0Ch] 3534 0000240A 89530C mov [ebx+12], edx 3535 0000240D A1[843F0500] mov eax, [mp3_out2_b2] 3536 00002412 8B5524 mov edx, [ebp+36] 3537 00002415 F7EA imul edx 3538 00002417 895324 mov [ebx+36], edx 3539 0000241A C7433C00000000 mov dword [ebx+60], 0 ; [ebx+(2*6+i)*4] 3540 00002421 A1[743F0500] mov eax, [mp3_out2_a1] ; i = 4 3541 00002426 8B5510 mov edx, [ebp+16] 3542 00002429 F7EA imul edx 3543 0000242B 035310 add edx, [ebx+16] 3544 0000242E 895310 mov [ebx+16], edx 3545 00002431 A1[803F0500] mov eax, [mp3_out2_b1] 3546 00002436 8B5528 mov edx, [ebp+40] 3547 00002439 F7EA imul edx 3548 0000243B 895328 mov [ebx+40], edx 3549 0000243E C7434000000000 mov dword [ebx+64], 0 3550 00002445 A1[703F0500] mov eax, [mp3_out2_a0] ; i = 5 3551 0000244A 8B5514 mov edx, [ebp+20] 3552 0000244D F7EA imul edx 3553 0000244F 035314 add edx, [ebx+20] 3554 00002452 895314 mov [ebx+20], edx 3555 00002455 A1[7C3F0500] mov eax, [mp3_out2_b0] 3556 0000245A 8B552C mov edx, [ebp+44] 3557 0000245D F7EA imul edx 3558 0000245F 89532C mov [ebx+44], edx 3559 00002462 C7434400000000 mov dword [ebx+68], 0 ; [ebx+(2*6+i)*4] 3560 00002469 81C704FAFFFF add edi, -1532 ; (1*4) - (2*6*SBLIMIT*4) ; dst 3561 0000246F 83C640 add esi, 64 ; 18*4 - (2*4) ; sb_hybrid 3562 00002472 83C348 add ebx, 72 ; 18*4 ; mdct_buf 3563 00002475 FF05[903F0500] inc dword [_@@@JJJ] ; next 3564 0000247B A1[903F0500] mov eax, [_@@@JJJ] 3565 00002480 3B05[9C3F0500] cmp eax, [_@@sblimit] 3566 00002486 0F8229FDFFFF jb .imdct12_lop 3567 3568 .imdct12_done: 3569 0000248C F605[1C8C0000]10 test byte [cpuid_flags], 10h 3570 00002493 740E jz short .no_rdtsc_supported@@@@ ; timelog_end rdtsc_imdct12 3571 00002495 0F31 rdtsc 3572 00002497 0105[648D0000] add [rdtsc_imdct12], eax 3573 0000249D 1115[688D0000] adc [rdtsc_imdct12+4], edx 3574 3575 .no_rdtsc_supported@@@@: 3576 000024A3 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_imdct0 3577 000024AA 740E jz short .no_rdtsc_supported@@@@@ 3578 000024AC 0F31 rdtsc 3579 000024AE 2905[7C8D0000] sub [rdtsc_imdct0], eax 3580 000024B4 1915[808D0000] sbb [rdtsc_imdct0+4], edx 3581 3582 .no_rdtsc_supported@@@@@: 3583 000024BA 833D[903F0500]20 cmp dword [_@@@JJJ], 32 ; SBLIMIT 3584 000024C1 0F8333010000 jnb .zero_outer_done 3585 3586 .zero_outer_lop: 3587 000024C7 8B03 mov eax, [ebx] ; zero bands 3588 ; IRP nn,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 3589 ; mov eax,dword ptr [ebx+nn*4] 3590 ; mov dword ptr [ebx+nn*4],0 3591 ; mov dword ptr [edi+nn*SBLIMIT*4],eax ; [dst] 3592 ; ENDM 3593 000024C9 C70300000000 mov dword [ebx], 0 ; nn = 0 3594 000024CF 8907 mov [edi], eax 3595 000024D1 8B4304 mov eax, [ebx+4] ; nn = 1 3596 000024D4 C7430400000000 mov dword [ebx+4], 0 3597 000024DB 898780000000 mov [edi+128], eax 3598 000024E1 8B4308 mov eax, [ebx+8] 3599 000024E4 C7430800000000 mov dword [ebx+8], 0 3600 000024EB 898700010000 mov [edi+256], eax 3601 000024F1 8B430C mov eax, [ebx+12] 3602 000024F4 C7430C00000000 mov dword [ebx+12], 0 3603 000024FB 898780010000 mov [edi+384], eax 3604 00002501 8B4310 mov eax, [ebx+16] ; nn = 4 3605 00002504 C7431000000000 mov dword [ebx+16], 0 3606 0000250B 898700020000 mov [edi+512], eax 3607 00002511 8B4314 mov eax, [ebx+20] 3608 00002514 C7431400000000 mov dword [ebx+20], 0 3609 0000251B 898780020000 mov [edi+640], eax ; [edi+5*SBLIMIT*4] 3610 00002521 8B4318 mov eax, [ebx+24] 3611 00002524 C7431800000000 mov dword [ebx+24], 0 3612 0000252B 898700030000 mov [edi+768], eax 3613 00002531 8B431C mov eax, [ebx+28] ; nn = 7 3614 00002534 C7431C00000000 mov dword [ebx+28], 0 3615 0000253B 898780030000 mov [edi+896], eax 3616 00002541 8B4320 mov eax, [ebx+32] 3617 00002544 C7432000000000 mov dword [ebx+32], 0 3618 0000254B 898700040000 mov [edi+1024], eax ; [edi+8*SBLIMIT*4] 3619 00002551 8B4324 mov eax, [ebx+36] 3620 00002554 C7432400000000 mov dword [ebx+36], 0 3621 0000255B 898780040000 mov [edi+1152], eax 3622 00002561 8B4328 mov eax, [ebx+40] 3623 00002564 C7432800000000 mov dword [ebx+40], 0 3624 0000256B 898700050000 mov [edi+1280], eax 3625 00002571 8B432C mov eax, [ebx+44] 3626 00002574 C7432C00000000 mov dword [ebx+44], 0 3627 0000257B 898780050000 mov [edi+1408], eax 3628 00002581 8B4330 mov eax, [ebx+48] 3629 00002584 C7433000000000 mov dword [ebx+48], 0 3630 0000258B 898700060000 mov [edi+1536], eax 3631 00002591 8B4334 mov eax, [ebx+52] 3632 00002594 C7433400000000 mov dword [ebx+52], 0 3633 0000259B 898780060000 mov [edi+1664], eax 3634 000025A1 8B4338 mov eax, [ebx+56] 3635 000025A4 C7433800000000 mov dword [ebx+56], 0 3636 000025AB 898700070000 mov [edi+1792], eax 3637 000025B1 8B433C mov eax, [ebx+60] 3638 000025B4 C7433C00000000 mov dword [ebx+60], 0 3639 000025BB 898780070000 mov [edi+1920], eax 3640 000025C1 8B4340 mov eax, [ebx+64] 3641 000025C4 C7434000000000 mov dword [ebx+64], 0 ; [edi+16*SBLIMIT*4] 3642 000025CB 898700080000 mov [edi+2048], eax 3643 000025D1 8B4344 mov eax, [ebx+68] ; nn = 17 3644 000025D4 C7434400000000 mov dword [ebx+68], 0 3645 000025DB 898780080000 mov [edi+2176], eax ; ENDM 3646 000025E1 83C348 add ebx, 72 ; 18*4 3647 000025E4 83C704 add edi, 4 3648 000025E7 FF05[903F0500] inc dword [_@@@JJJ] 3649 000025ED 833D[903F0500]20 cmp dword [_@@@JJJ], 32 3650 000025F4 0F82CDFEFFFF jb .zero_outer_lop 3651 3652 .zero_outer_done: 3653 000025FA F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_imdct0 3654 00002601 740E jz short .no_rdtsc_supported@@@@@@ 3655 00002603 0F31 rdtsc 3656 00002605 0105[7C8D0000] add [rdtsc_imdct0], eax 3657 0000260B 1115[808D0000] adc [rdtsc_imdct0+4], edx 3658 3659 .no_rdtsc_supported@@@@@@: 3660 00002611 5B pop ebx 3661 00002612 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_imdct 3662 00002619 740E jz short .no_rdtsc_supported@@@@@@@ 3663 0000261B 0F31 rdtsc 3664 0000261D 0105[348D0000] add [rdtsc_imdct], eax 3665 00002623 1115[388D0000] adc [rdtsc_imdct+4], edx 3666 3667 .no_rdtsc_supported@@@@@@@: 3668 00002629 C3 retn 3669 3670 3671 ; =============== S U B R O U T I N E ======================================= 3672 3673 3674 mp3_dct32_shift_0: 3675 0000262A 8B06 mov eax, [esi] ; mp3_dct32_macro macro rate_shift ; rate_shift = 0 3676 0000262C 8B567C mov edx, [esi+124] ; @@BF macro a,b,sign,cos,shift 3677 ; @@BF 0,31,+,COS0_0,1 3678 ; @@need_a equ (rate_shift EQ 0) or (a LT 16) ; a = 0 3679 ; @@need_b equ (rate_shift EQ 0) or (b LT 16) ; b = 31 3680 ; IF @@need_a AND @@need_b ; rate_shift = 0 3681 ; mov eax,dword ptr [esi+a*4] 3682 ; mov edx,dword ptr [esi+b*4] 3683 ; add dword ptr [esi+a*4],edx 3684 0000262F 0116 add [esi], edx 3685 00002631 29D0 sub eax, edx 3686 00002633 D1E0 shl eax, 1 ; shl eax,shift 3687 ; (needed when COS.fraction is less than 32bit) 3688 00002635 BA51C21340 mov edx, 4013C251h ; sign&&cos ; +COS0_0 = 4013C251h 3689 0000263A F7EA imul edx 3690 0000263C 89567C mov [esi+124], edx ; [esi+b*4] ; upper 32bit of multiply result 3691 0000263F 8B463C mov eax, [esi+60] ; @@BF 15,16,+,COS0_15,5 3692 ; [esi+a*4] 3693 00002642 8B5640 mov edx, [esi+64] ; [esi+b*4] 3694 00002645 01563C add [esi+60], edx ; [esi+a*4] 3695 00002648 29D0 sub eax, edx 3696 0000264A C1E005 shl eax, 5 ; shl eax,shift 3697 0000264D BAFB228551 mov edx, 518522FBh ; sign&&cos ; +COS0_15 = 518522FBh 3698 00002652 F7EA imul edx 3699 00002654 895640 mov [esi+64], edx ; [esi+b*4] 3700 00002657 8B06 mov eax, [esi] ; @@BF 0,15,+,COS1_0,1 3701 00002659 8B563C mov edx, [esi+60] 3702 0000265C 0116 add [esi], edx 3703 0000265E 29D0 sub eax, edx 3704 00002660 D1E0 shl eax, 1 3705 00002662 BA72464F40 mov edx, 404F4672h ; +COS1_0 3706 00002667 F7EA imul edx 3707 00002669 89563C mov [esi+60], edx 3708 0000266C 8B4640 mov eax, [esi+64] ; @@BF 16,31,-,COS1_0,1 3709 0000266F 8B567C mov edx, [esi+124] 3710 00002672 015640 add [esi+64], edx 3711 00002675 29D0 sub eax, edx 3712 00002677 D1E0 shl eax, 1 3713 00002679 BA8EB9B0BF mov edx, 0BFB0B98Eh ; -COS1_0 3714 0000267E F7EA imul edx 3715 00002680 89567C mov [esi+124], edx 3716 00002683 8B461C mov eax, [esi+28] ; @@BF 7,24,+,COS0_7,1 3717 00002686 8B5660 mov edx, [esi+96] 3718 00002689 01561C add [esi+28], edx 3719 0000268C 29D0 sub eax, edx 3720 0000268E D1E0 shl eax, 1 3721 00002690 BAA71E6056 mov edx, 56601EA7h 3722 00002695 F7EA imul edx 3723 00002697 895660 mov [esi+96], edx 3724 0000269A 8B4620 mov eax, [esi+32] ; @@BF 8,23,+,COS0_8,1 3725 0000269D 8B565C mov edx, [esi+92] 3726 000026A0 015620 add [esi+32], edx 3727 000026A3 29D0 sub eax, edx 3728 000026A5 D1E0 shl eax, 1 3729 000026A7 BAECF64C5F mov edx, 5F4CF6ECh 3730 000026AC F7EA imul edx 3731 000026AE 89565C mov [esi+92], edx 3732 000026B1 8B461C mov eax, [esi+28] ; @@BF 7,8,+,COS1_7,4 3733 000026B4 8B5620 mov edx, [esi+32] 3734 000026B7 01561C add [esi+28], edx 3735 000026BA 29D0 sub eax, edx 3736 000026BC C1E004 shl eax, 4 3737 000026BF BA044E9E51 mov edx, 519E4E04h 3738 000026C4 F7EA imul edx 3739 000026C6 895620 mov [esi+32], edx 3740 000026C9 8B465C mov eax, [esi+92] ; @@BF 23,24,-,COS1_7,4 3741 000026CC 8B5660 mov edx, [esi+96] 3742 000026CF 01565C add [esi+92], edx 3743 000026D2 29D0 sub eax, edx 3744 000026D4 C1E004 shl eax, 4 3745 000026D7 BAFCB161AE mov edx, 0AE61B1FCh 3746 000026DC F7EA imul edx 3747 000026DE 895660 mov [esi+96], edx 3748 000026E1 8B06 mov eax, [esi] ; @@BF 0,7,+,COS2_0,1 3749 000026E3 8B561C mov edx, [esi+28] 3750 000026E6 0116 add [esi], edx 3751 000026E8 29D0 sub eax, edx 3752 000026EA D1E0 shl eax, 1 3753 000026EC BA46FB4041 mov edx, 4140FB46h 3754 000026F1 F7EA imul edx 3755 000026F3 89561C mov [esi+28], edx 3756 000026F6 8B4620 mov eax, [esi+32] ; @@BF 8,15,-,COS2_0,1 3757 000026F9 8B563C mov edx, [esi+60] 3758 000026FC 015620 add [esi+32], edx 3759 000026FF 29D0 sub eax, edx 3760 00002701 D1E0 shl eax, 1 3761 00002703 BABA04BFBE mov edx, 0BEBF04BAh 3762 00002708 F7EA imul edx 3763 0000270A 89563C mov [esi+60], edx 3764 0000270D 8B4640 mov eax, [esi+64] ; @@BF 16,23,+,COS2_0,1 3765 00002710 8B565C mov edx, [esi+92] 3766 00002713 015640 add [esi+40h], edx 3767 00002716 29D0 sub eax, edx 3768 00002718 D1E0 shl eax, 1 3769 0000271A BA46FB4041 mov edx, 4140FB46h 3770 0000271F F7EA imul edx 3771 00002721 89565C mov [esi+92], edx 3772 00002724 8B4660 mov eax, [esi+96] ; @@BF 24,31,-,COS2_0,1 3773 00002727 8B567C mov edx, [esi+124] 3774 0000272A 015660 add [esi+96], edx 3775 0000272D 29D0 sub eax, edx 3776 0000272F D1E0 shl eax, 1 3777 00002731 BABA04BFBE mov edx, 0BEBF04BAh 3778 00002736 F7EA imul edx 3779 00002738 89567C mov [esi+124], edx 3780 0000273B 8B460C mov eax, [esi+12] ; @@BF 3,28,+,COS0_3,1 3781 0000273E 8B5670 mov edx, [esi+112] 3782 00002741 01560C add [esi+12], edx 3783 00002744 29D0 sub eax, edx 3784 00002746 D1E0 shl eax, 1 3785 00002748 BA2134F943 mov edx, 43F93421h 3786 0000274D F7EA imul edx 3787 0000274F 895670 mov [esi+112], edx 3788 00002752 8B4630 mov eax, [esi+48] ; @@BF 12,19,+,COS0_12,2 3789 00002755 8B564C mov edx, [esi+76] 3790 00002758 015630 add [esi+48], edx 3791 0000275B 29D0 sub eax, edx 3792 0000275D C1E002 shl eax, 2 3793 00002760 BA978DFC5E mov edx, 5EFC8D97h 3794 00002765 F7EA imul edx 3795 00002767 89564C mov [esi+76], edx 3796 0000276A 8B460C mov eax, [esi+12] ; @@BF 3,12,+,COS1_3,1 3797 0000276D 8B5630 mov edx, [esi+48] 3798 00002770 01560C add [esi+12], edx 3799 00002773 29D0 sub eax, edx 3800 00002775 D1E0 shl eax, 1 3801 00002777 BA630ECB52 mov edx, 52CB0E63h 3802 0000277C F7EA imul edx 3803 0000277E 895630 mov [esi+48], edx 3804 00002781 8B464C mov eax, [esi+76] ; @@BF 19,28,-,COS1_3,1 3805 00002784 8B5670 mov edx, [esi+112] 3806 00002787 01564C add [esi+76], edx 3807 0000278A 29D0 sub eax, edx 3808 0000278C D1E0 shl eax, 1 3809 0000278E BA9DF134AD mov edx, 0AD34F19Dh 3810 00002793 F7EA imul edx 3811 00002795 895670 mov [esi+112], edx 3812 00002798 8B4610 mov eax, [esi+16] ; @@BF 4,27,+,COS0_4,1 3813 0000279B 8B566C mov edx, [esi+108] 3814 0000279E 015610 add [esi+16], edx 3815 000027A1 29D0 sub eax, edx 3816 000027A3 D1E0 shl eax, 1 3817 000027A5 BAC51BCC46 mov edx, 46CC1BC5h 3818 000027AA F7EA imul edx 3819 000027AC 89566C mov [esi+108], edx 3820 000027AF 8B462C mov eax, [esi+44] ; @@BF 11,20,+,COS0_11,2 3821 000027B2 8B5650 mov edx, [esi+80] 3822 000027B5 01562C add [esi+44], edx 3823 000027B8 29D0 sub eax, edx 3824 000027BA C1E002 shl eax, 2 3825 000027BD BA981AD84A mov edx, 4AD81A98h 3826 000027C2 F7EA imul edx 3827 000027C4 895650 mov [esi+80], edx 3828 000027C7 8B4610 mov eax, [esi+16] ; @@BF 4,11,+,COS1_4,1 3829 000027CA 8B562C mov edx, [esi+44] 3830 000027CD 015610 add [esi+16], edx 3831 000027D0 29D0 sub eax, edx 3832 000027D2 D1E0 shl eax, 1 3833 000027D4 BA2E40E264 mov edx, 64E2402Eh 3834 000027D9 F7EA imul edx 3835 000027DB 89562C mov [esi+44], edx 3836 000027DE 8B4650 mov eax, [esi+80] ; @@BF 20,27,-,COS1_4,1 3837 000027E1 8B566C mov edx, [esi+108] 3838 000027E4 015650 add [esi+80], edx 3839 000027E7 29D0 sub eax, edx 3840 000027E9 D1E0 shl eax, 1 3841 000027EB BAD2BF1D9B mov edx, 9B1DBFD2h 3842 000027F0 F7EA imul edx 3843 000027F2 89566C mov [esi+108], edx 3844 000027F5 8B460C mov eax, [esi+12] ; @@BF 3,4,+,COS2_3,3 3845 000027F8 8B5610 mov edx, [esi+16] 3846 000027FB 01560C add [esi+12], edx 3847 000027FE 29D0 sub eax, edx 3848 00002800 C1E003 shl eax, 3 3849 00002803 BA42670352 mov edx, 52036742h 3850 00002808 F7EA imul edx 3851 0000280A 895610 mov [esi+16], edx 3852 0000280D 8B462C mov eax, [esi+44] ; @@BF 11,12,-,COS2_3,3 3853 00002810 8B5630 mov edx, [esi+48] 3854 00002813 01562C add [esi+44], edx 3855 00002816 29D0 sub eax, edx 3856 00002818 C1E003 shl eax, 3 3857 0000281B BABE98FCAD mov edx, 0ADFC98BEh ; -COS2_3 3858 00002820 F7EA imul edx 3859 00002822 895630 mov [esi+48], edx 3860 00002825 8B464C mov eax, [esi+76] ; @@BF 19,20,+,COS2_3,3 3861 00002828 8B5650 mov edx, [esi+80] 3862 0000282B 01564C add [esi+4Ch], edx 3863 0000282E 29D0 sub eax, edx 3864 00002830 C1E003 shl eax, 3 3865 00002833 BA42670352 mov edx, 52036742h ; +COS2_3 3866 00002838 F7EA imul edx 3867 0000283A 895650 mov [esi+80], edx 3868 0000283D 8B466C mov eax, [esi+108] ; @@BF 27,28,-,COS2_3,3 3869 00002840 8B5670 mov edx, [esi+112] 3870 00002843 01566C add [esi+108], edx 3871 00002846 29D0 sub eax, edx 3872 00002848 C1E003 shl eax, 3 3873 0000284B BABE98FCAD mov edx, 0ADFC98BEh 3874 00002850 F7EA imul edx 3875 00002852 895670 mov [esi+112], edx 3876 00002855 8B06 mov eax, [esi] ; @@BF 0,3,+,COS3_0,1 3877 00002857 8B560C mov edx, [esi+12] 3878 0000285A 0116 add [esi], edx 3879 0000285C 29D0 sub eax, edx 3880 0000285E D1E0 shl eax, 1 3881 00002860 BAF0E94545 mov edx, 4545E9F0h 3882 00002865 F7EA imul edx 3883 00002867 89560C mov [esi+12], edx 3884 0000286A 8B4610 mov eax, [esi+16] ; @@BF 4,7,-,COS3_0,1 3885 0000286D 8B561C mov edx, [esi+28] 3886 00002870 015610 add [esi+16], edx 3887 00002873 29D0 sub eax, edx 3888 00002875 D1E0 shl eax, 1 3889 00002877 BA1016BABA mov edx, 0BABA1610h 3890 0000287C F7EA imul edx 3891 0000287E 89561C mov [esi+28], edx 3892 00002881 8B4620 mov eax, [esi+32] ; @@BF 8,11,+,COS3_0,1 3893 00002884 8B562C mov edx, [esi+44] 3894 00002887 015620 add [esi+32], edx 3895 0000288A 29D0 sub eax, edx 3896 0000288C D1E0 shl eax, 1 3897 0000288E BAF0E94545 mov edx, 4545E9F0h 3898 00002893 F7EA imul edx 3899 00002895 89562C mov [esi+44], edx 3900 00002898 8B4630 mov eax, [esi+48] ; @@BF 12,15,-,COS3_0,1 3901 0000289B 8B563C mov edx, [esi+60] 3902 0000289E 015630 add [esi+48], edx 3903 000028A1 29D0 sub eax, edx 3904 000028A3 D1E0 shl eax, 1 3905 000028A5 BA1016BABA mov edx, 0BABA1610h 3906 000028AA F7EA imul edx 3907 000028AC 89563C mov [esi+60], edx 3908 000028AF 8B4640 mov eax, [esi+64] ; @@BF 16,19,+,COS3_0,1 3909 000028B2 8B564C mov edx, [esi+76] 3910 000028B5 015640 add [esi+64], edx 3911 000028B8 29D0 sub eax, edx 3912 000028BA D1E0 shl eax, 1 3913 000028BC BAF0E94545 mov edx, 4545E9F0h 3914 000028C1 F7EA imul edx 3915 000028C3 89564C mov [esi+76], edx 3916 000028C6 8B4650 mov eax, [esi+80] ; @@BF 20,23,-,COS3_0,1 3917 000028C9 8B565C mov edx, [esi+92] 3918 000028CC 015650 add [esi+80], edx 3919 000028CF 29D0 sub eax, edx 3920 000028D1 D1E0 shl eax, 1 3921 000028D3 BA1016BABA mov edx, 0BABA1610h ; -COS3_0 3922 000028D8 F7EA imul edx 3923 000028DA 89565C mov [esi+92], edx 3924 000028DD 8B4660 mov eax, [esi+96] ; @@BF 24,27,+,COS3_0,1 3925 000028E0 8B566C mov edx, [esi+108] 3926 000028E3 015660 add [esi+96], edx 3927 000028E6 29D0 sub eax, edx 3928 000028E8 D1E0 shl eax, 1 3929 000028EA BAF0E94545 mov edx, 4545E9F0h ; +COS3_0 3930 000028EF F7EA imul edx 3931 000028F1 89566C mov [esi+108], edx 3932 000028F4 8B4670 mov eax, [esi+112] ; @@BF 28,31,-,COS3_0,1 3933 000028F7 8B567C mov edx, [esi+124] 3934 000028FA 015670 add [esi+112], edx 3935 000028FD 29D0 sub eax, edx 3936 000028FF D1E0 shl eax, 1 3937 00002901 BA1016BABA mov edx, 0BABA1610h 3938 00002906 F7EA imul edx 3939 00002908 89567C mov [esi+124], edx 3940 0000290B 8B4604 mov eax, [esi+4] ; @@BF 1,30,+,COS0_1,1 3941 0000290E 8B5678 mov edx, [esi+120] 3942 00002911 015604 add [esi+4], edx 3943 00002914 29D0 sub eax, edx 3944 00002916 D1E0 shl eax, 1 3945 00002918 BABD45B340 mov edx, 40B345BDh 3946 0000291D F7EA imul edx 3947 0000291F 895678 mov [esi+120], edx 3948 00002922 8B4638 mov eax, [esi+56] ; @@BF 14,17,+,COS0_14,3 3949 00002925 8B5644 mov edx, [esi+68] 3950 00002928 015638 add [esi+56], edx 3951 0000292B 29D0 sub eax, edx 3952 0000292D C1E003 shl eax, 3 3953 00002930 BAD0200B6D mov edx, 6D0B20D0h 3954 00002935 F7EA imul edx 3955 00002937 895644 mov [esi+68], edx 3956 0000293A 8B4604 mov eax, [esi+4] ; @@BF 1,14,+,COS1_1,1 3957 0000293D 8B5638 mov edx, [esi+56] 3958 00002940 015604 add [esi+4], edx 3959 00002943 29D0 sub eax, edx 3960 00002945 D1E0 shl eax, 1 3961 00002947 BA103CE142 mov edx, 42E13C10h 3962 0000294C F7EA imul edx 3963 0000294E 895638 mov [esi+56], edx 3964 00002951 8B4644 mov eax, [esi+68] ; @@BF 17,30,-,COS1_1,1 3965 00002954 8B5678 mov edx, [esi+120] 3966 00002957 015644 add [esi+68], edx 3967 0000295A 29D0 sub eax, edx 3968 0000295C D1E0 shl eax, 1 3969 0000295E BAF0C31EBD mov edx, 0BD1EC3F0h 3970 00002963 F7EA imul edx 3971 00002965 895678 mov [esi+120], edx 3972 00002968 8B4618 mov eax, [esi+24] ; @@BF 6,25,+,COS0_6,1 3973 0000296B 8B5664 mov edx, [esi+100] 3974 0000296E 015618 add [esi+24], edx 3975 00002971 29D0 sub eax, edx 3976 00002973 D1E0 shl eax, 1 3977 00002975 BA1237AE4F mov edx, 4FAE3712h 3978 0000297A F7EA imul edx 3979 0000297C 895664 mov [esi+100], edx 3980 0000297F 8B4624 mov eax, [esi+36] ; @@BF 9,22,+,COS0_9,1 3981 00002982 8B5658 mov edx, [esi+88] 3982 00002985 015624 add [esi+36], edx 3983 00002988 29D0 sub eax, edx 3984 0000298A D1E0 shl eax, 1 3985 0000298C BA27CF6F6B mov edx, 6B6FCF27h 3986 00002991 F7EA imul edx 3987 00002993 895658 mov [esi+88], edx 3988 00002996 8B4618 mov eax, [esi+24] ; @@BF 6, 9,+,COS1_6,2 3989 00002999 8B5624 mov edx, [esi+36] 3990 0000299C 015618 add [esi+24], edx 3991 0000299F 29D0 sub eax, edx 3992 000029A1 C1E002 shl eax, 2 3993 000029A4 BAC2923C6E mov edx, 6E3C92C2h 3994 000029A9 F7EA imul edx 3995 000029AB 895624 mov [esi+36], edx 3996 000029AE 8B4658 mov eax, [esi+88] ; @@BF 22,25,-,COS1_6,2 3997 000029B1 8B5664 mov edx, [esi+100] 3998 000029B4 015658 add [esi+88], edx 3999 000029B7 29D0 sub eax, edx 4000 000029B9 C1E002 shl eax, 2 4001 000029BC BA3E6DC391 mov edx, 91C36D3Eh 4002 000029C1 F7EA imul edx 4003 000029C3 895664 mov [esi+100], edx 4004 000029C6 8B4604 mov eax, [esi+4] ; @@BF 1, 6,+,COS2_1,1 4005 000029C9 8B5618 mov edx, [esi+24] 4006 000029CC 015604 add [esi+4], edx 4007 000029CF 29D0 sub eax, edx 4008 000029D1 D1E0 shl eax, 1 4009 000029D3 BA88DEF84C mov edx, 4CF8DE88h 4010 000029D8 F7EA imul edx 4011 000029DA 895618 mov [esi+24], edx 4012 000029DD 8B4624 mov eax, [esi+36] ; @@BF 9,14,-,COS2_1,1 4013 000029E0 8B5638 mov edx, [esi+56] 4014 000029E3 015624 add [esi+36], edx 4015 000029E6 29D0 sub eax, edx 4016 000029E8 D1E0 shl eax, 1 4017 000029EA BA782107B3 mov edx, 0B3072178h 4018 000029EF F7EA imul edx 4019 000029F1 895638 mov [esi+56], edx 4020 000029F4 8B4644 mov eax, [esi+68] ; @@BF 17,22,+,COS2_1,1 4021 000029F7 8B5658 mov edx, [esi+88] 4022 000029FA 015644 add [esi+68], edx 4023 000029FD 29D0 sub eax, edx 4024 000029FF D1E0 shl eax, 1 4025 00002A01 BA88DEF84C mov edx, 4CF8DE88h 4026 00002A06 F7EA imul edx 4027 00002A08 895658 mov [esi+88], edx 4028 00002A0B 8B4664 mov eax, [esi+100] ; @@BF 25,30,-,COS2_1,1 4029 00002A0E 8B5678 mov edx, [esi+120] 4030 00002A11 015664 add [esi+100], edx 4031 00002A14 29D0 sub eax, edx 4032 00002A16 D1E0 shl eax, 1 4033 00002A18 BA782107B3 mov edx, 0B3072178h 4034 00002A1D F7EA imul edx 4035 00002A1F 895678 mov [esi+120], edx 4036 00002A22 8B4608 mov eax, [esi+8] ; @@BF 2,29,+,COS0_2,1 4037 00002A25 8B5674 mov edx, [esi+116] 4038 00002A28 015608 add [esi+8], edx 4039 00002A2B 29D0 sub eax, edx 4040 00002A2D D1E0 shl eax, 1 4041 00002A2F BA6E2DFA41 mov edx, 41FA2D6Eh 4042 00002A34 F7EA imul edx 4043 00002A36 895674 mov [esi+116], edx 4044 00002A39 8B4634 mov eax, [esi+52] ; @@BF 13,18,+,COS0_13,3 4045 00002A3C 8B5648 mov edx, [esi+72] 4046 00002A3F 015634 add [esi+52], edx 4047 00002A42 29D0 sub eax, edx 4048 00002A44 C1E003 shl eax, 3 4049 00002A47 BA9057D941 mov edx, 41D95790h 4050 00002A4C F7EA imul edx 4051 00002A4E 895648 mov [esi+72], edx 4052 00002A51 8B4608 mov eax, [esi+8] ; @@BF 2,13,+,COS1_2,1 4053 00002A54 8B5634 mov edx, [esi+52] 4054 00002A57 015608 add [esi+8], edx 4055 00002A5A 29D0 sub eax, edx 4056 00002A5C D1E0 shl eax, 1 4057 00002A5E BA459F9148 mov edx, 48919F45h 4058 00002A63 F7EA imul edx 4059 00002A65 895634 mov [esi+52], edx 4060 00002A68 8B4648 mov eax, [esi+72] ; @@BF 18,29,-,COS1_2,1 4061 00002A6B 8B5674 mov edx, [esi+116] 4062 00002A6E 015648 add [esi+72], edx 4063 00002A71 29D0 sub eax, edx 4064 00002A73 D1E0 shl eax, 1 4065 00002A75 BABB606EB7 mov edx, 0B76E60BBh 4066 00002A7A F7EA imul edx 4067 00002A7C 895674 mov [esi+116], edx 4068 00002A7F 8B4614 mov eax, [esi+20] ; @@BF 5,26,+,COS0_5,1 4069 00002A82 8B5668 mov edx, [esi+104] 4070 00002A85 015614 add [esi+20], edx 4071 00002A88 29D0 sub eax, edx 4072 00002A8A D1E0 shl eax, 1 4073 00002A8C BAF19C9D4A mov edx, 4A9D9CF1h 4074 00002A91 F7EA imul edx 4075 00002A93 895668 mov [esi+104], edx 4076 00002A96 8B4628 mov eax, [esi+40] ; @@BF 10,21,+,COS0_10,1 4077 00002A99 8B5654 mov edx, [esi+84] 4078 00002A9C 015628 add [esi+40], edx 4079 00002A9F 29D0 sub eax, edx 4080 00002AA1 D1E0 shl eax, 1 4081 00002AA3 BAB41D7D7C mov edx, 7C7D1DB4h 4082 00002AA8 F7EA imul edx 4083 00002AAA 895654 mov [esi+84], edx 4084 00002AAD 8B4614 mov eax, [esi+20] ; @@BF 5,10,+,COS1_5,2 4085 00002AB0 8B5628 mov edx, [esi+40] 4086 00002AB3 015614 add [esi+20], edx 4087 00002AB6 29D0 sub eax, edx 4088 00002AB8 C1E002 shl eax, 2 4089 00002ABB BAAA24E243 mov edx, 43E224AAh 4090 00002AC0 F7EA imul edx 4091 00002AC2 895628 mov [esi+40], edx 4092 00002AC5 8B4654 mov eax, [esi+84] ; @@BF 21,26,-,COS1_5,2 4093 00002AC8 8B5668 mov edx, [esi+104] 4094 00002ACB 015654 add [esi+84], edx 4095 00002ACE 29D0 sub eax, edx 4096 00002AD0 C1E002 shl eax, 2 4097 00002AD3 BA56DB1DBC mov edx, 0BC1DDB56h 4098 00002AD8 F7EA imul edx 4099 00002ADA 895668 mov [esi+104], edx 4100 00002ADD 8B4608 mov eax, [esi+8] ; @@BF 2,5,+,COS2_2,1 4101 00002AE0 8B5614 mov edx, [esi+20] 4102 00002AE3 015608 add [esi+8], edx 4103 00002AE6 29D0 sub eax, edx 4104 00002AE8 D1E0 shl eax, 1 4105 00002AEA BABF6B3273 mov edx, 73326BBFh ; +COS2_2 4106 00002AEF F7EA imul edx 4107 00002AF1 895614 mov [esi+20], edx 4108 00002AF4 8B4628 mov eax, [esi+40] ; @@BF 10,13,-,COS2_2,1 4109 00002AF7 8B5634 mov edx, [esi+52] 4110 00002AFA 015628 add [esi+40], edx 4111 00002AFD 29D0 sub eax, edx 4112 00002AFF D1E0 shl eax, 1 4113 00002B01 BA4194CD8C mov edx, 8CCD9441h ; -COS2_2 4114 00002B06 F7EA imul edx 4115 00002B08 895634 mov [esi+52], edx 4116 00002B0B 8B4648 mov eax, [esi+72] ; @@BF 18,21,+,COS2_2,1 4117 00002B0E 8B5654 mov edx, [esi+84] 4118 00002B11 015648 add [esi+72], edx 4119 00002B14 29D0 sub eax, edx 4120 00002B16 D1E0 shl eax, 1 4121 00002B18 BABF6B3273 mov edx, 73326BBFh 4122 00002B1D F7EA imul edx 4123 00002B1F 895654 mov [esi+84], edx 4124 00002B22 8B4668 mov eax, [esi+104] ; @@BF 26,29,-,COS2_2,1 4125 00002B25 8B5674 mov edx, [esi+116] 4126 00002B28 015668 add [esi+104], edx 4127 00002B2B 29D0 sub eax, edx 4128 00002B2D D1E0 shl eax, 1 4129 00002B2F BA4194CD8C mov edx, 8CCD9441h 4130 00002B34 F7EA imul edx 4131 00002B36 895674 mov [esi+116], edx 4132 00002B39 8B4604 mov eax, [esi+4] ; @@BF 1,2,+,COS3_1,2 4133 00002B3C 8B5608 mov edx, [esi+8] 4134 00002B3F 015604 add [esi+4], edx 4135 00002B42 29D0 sub eax, edx 4136 00002B44 C1E002 shl eax, 2 4137 00002B47 BA46BA9E53 mov edx, 539EBA46h 4138 00002B4C F7EA imul edx 4139 00002B4E 895608 mov [esi+8], edx 4140 00002B51 8B4614 mov eax, [esi+20] ; @@BF 5,6,-,COS3_1,2 4141 00002B54 8B5618 mov edx, [esi+24] 4142 00002B57 015614 add [esi+20], edx 4143 00002B5A 29D0 sub eax, edx 4144 00002B5C C1E002 shl eax, 2 4145 00002B5F BABA4561AC mov edx, 0AC6145BAh 4146 00002B64 F7EA imul edx 4147 00002B66 895618 mov [esi+24], edx 4148 00002B69 8B4624 mov eax, [esi+36] ; IF rate_shift LT 2 4149 ; @@BF 9,10,+,COS3_1,2 4150 00002B6C 8B5628 mov edx, [esi+40] 4151 00002B6F 015624 add [esi+36], edx 4152 00002B72 29D0 sub eax, edx 4153 00002B74 C1E002 shl eax, 2 4154 00002B77 BA46BA9E53 mov edx, 539EBA46h 4155 00002B7C F7EA imul edx 4156 00002B7E 895628 mov [esi+40], edx 4157 00002B81 8B4634 mov eax, [esi+52] ; @@BF 13,14,-,COS3_1,2 4158 00002B84 8B5638 mov edx, [esi+56] 4159 00002B87 015634 add [esi+52], edx 4160 00002B8A 29D0 sub eax, edx 4161 00002B8C C1E002 shl eax, 2 4162 00002B8F BABA4561AC mov edx, 0AC6145BAh 4163 00002B94 F7EA imul edx 4164 00002B96 895638 mov [esi+56], edx ; ENDIF 4165 00002B99 8B4644 mov eax, [esi+68] ; @@BF 17,18,+,COS3_1,2 4166 00002B9C 8B5648 mov edx, [esi+72] 4167 00002B9F 015644 add [esi+68], edx 4168 00002BA2 29D0 sub eax, edx 4169 00002BA4 C1E002 shl eax, 2 4170 00002BA7 BA46BA9E53 mov edx, 539EBA46h 4171 00002BAC F7EA imul edx 4172 00002BAE 895648 mov [esi+72], edx 4173 00002BB1 8B4654 mov eax, [esi+84] ; @@BF 21,22,-,COS3_1,2 4174 00002BB4 8B5658 mov edx, [esi+88] 4175 00002BB7 015654 add [esi+84], edx 4176 00002BBA 29D0 sub eax, edx 4177 00002BBC C1E002 shl eax, 2 4178 00002BBF BABA4561AC mov edx, 0AC6145BAh 4179 00002BC4 F7EA imul edx 4180 00002BC6 895658 mov [esi+88], edx 4181 00002BC9 8B4664 mov eax, [esi+100] ; @@BF 25,26,+,COS3_1,2 4182 00002BCC 8B5668 mov edx, [esi+104] 4183 00002BCF 015664 add [esi+100], edx 4184 00002BD2 29D0 sub eax, edx 4185 00002BD4 C1E002 shl eax, 2 4186 00002BD7 BA46BA9E53 mov edx, 539EBA46h 4187 00002BDC F7EA imul edx 4188 00002BDE 895668 mov [esi+104], edx 4189 00002BE1 8B4674 mov eax, [esi+116] ; @@BF 29,30,-,COS3_1,2 4190 00002BE4 8B5678 mov edx, [esi+120] 4191 00002BE7 015674 add [esi+116], edx 4192 00002BEA 29D0 sub eax, edx 4193 00002BEC C1E002 shl eax, 2 4194 00002BEF BABA4561AC mov edx, 0AC6145BAh 4195 00002BF4 F7EA imul edx 4196 00002BF6 895678 mov [esi+120], edx 4197 00002BF9 8B06 mov eax, [esi] ; @@BF1 macro a, b, c, d 4198 ; @@BF a, b,+,COS4_0, 1 4199 ; @@BF c, d,-,COS4_0, 1 4200 ; @@ADD c, d 4201 ; endm 4202 ; @@BF1 0,1,2,3 4203 00002BFB 8B5604 mov edx, [esi+4] ; @@BF 0,1,+,COS4_0,1 4204 00002BFE 0116 add [esi], edx 4205 00002C00 29D0 sub eax, edx 4206 00002C02 D1E0 shl eax, 1 4207 00002C04 BA9A79825A mov edx, 5A82799Ah ; +COS4_0 4208 00002C09 F7EA imul edx 4209 00002C0B 895604 mov [esi+4], edx 4210 00002C0E 8B4608 mov eax, [esi+8] ; @@BF 2,3,-,COS4_0,1 4211 00002C11 8B560C mov edx, [esi+12] 4212 00002C14 015608 add [esi+8], edx 4213 00002C17 29D0 sub eax, edx 4214 00002C19 D1E0 shl eax, 1 4215 00002C1B BA66867DA5 mov edx, 0A57D8666h ; -COS4_0 4216 00002C20 F7EA imul edx 4217 00002C22 89560C mov [esi+12], edx 4218 00002C25 8B460C mov eax, [esi+12] ; @@ADD 2,3 4219 00002C28 014608 add [esi+8], eax 4220 00002C2B 8B4610 mov eax, [esi+16] ; @@BF2 macro a, b, c, d 4221 ; @@BF a, b,+,COS4_0, 1 4222 ; @@BF c, d,-,COS4_0, 1 4223 ; @@ADD c, d 4224 ; @@ADD a, c 4225 ; @@ADD c, b 4226 ; @@ADD b, d 4227 ; endm 4228 ; @@BF2 4,5,6,7 4229 00002C2E 8B5614 mov edx, [esi+20] ; @@BF 4,5,+,COS4_0,1 4230 00002C31 015610 add [esi+16], edx 4231 00002C34 29D0 sub eax, edx 4232 00002C36 D1E0 shl eax, 1 4233 00002C38 BA9A79825A mov edx, 5A82799Ah 4234 00002C3D F7EA imul edx 4235 00002C3F 895614 mov [esi+20], edx 4236 00002C42 8B4618 mov eax, [esi+24] ; @@BF 6,7,-,COS4_0,1 4237 00002C45 8B561C mov edx, [esi+28] 4238 00002C48 015618 add [esi+24], edx 4239 00002C4B 29D0 sub eax, edx 4240 00002C4D D1E0 shl eax, 1 4241 00002C4F BA66867DA5 mov edx, 0A57D8666h 4242 00002C54 F7EA imul edx 4243 00002C56 89561C mov [esi+28], edx 4244 00002C59 8B461C mov eax, [esi+28] ; @@ADD macro dst,src 4245 ; IF (rate_shift EQ 0) or (dst LT 16) 4246 ; ;tab[a] += tab[b] 4247 ; mov eax,dword ptr [esi+src*4] 4248 ; add dword ptr [esi+dst*4],eax 4249 ; ENDIF 4250 ; endm 4251 ; @@ADD 6,7 4252 00002C5C 014618 add [esi+24], eax 4253 00002C5F 8B4618 mov eax, [esi+24] ; @@ADD 4,6 4254 00002C62 014610 add [esi+16], eax 4255 00002C65 8B4614 mov eax, [esi+20] ; @@ADD 6,5 4256 00002C68 014618 add [esi+24], eax 4257 00002C6B 8B461C mov eax, [esi+28] ; @@ADD 5,7 4258 00002C6E 014614 add [esi+20], eax 4259 00002C71 8B4620 mov eax, [esi+32] ; IF rate_shift LT 2 4260 ; @@BF1 8,9,10,11 4261 00002C74 8B5624 mov edx, [esi+36] ; @@BF 8,9,+,COS4_0,1 4262 00002C77 015620 add [esi+32], edx 4263 00002C7A 29D0 sub eax, edx 4264 00002C7C D1E0 shl eax, 1 4265 00002C7E BA9A79825A mov edx, 5A82799Ah 4266 00002C83 F7EA imul edx 4267 00002C85 895624 mov [esi+36], edx 4268 00002C88 8B4628 mov eax, [esi+40] ; @@BF 10,11,-,COS4_0,1 4269 00002C8B 8B562C mov edx, [esi+44] 4270 00002C8E 015628 add [esi+40], edx 4271 00002C91 29D0 sub eax, edx 4272 00002C93 D1E0 shl eax, 1 4273 00002C95 BA66867DA5 mov edx, 0A57D8666h 4274 00002C9A F7EA imul edx 4275 00002C9C 89562C mov [esi+44], edx 4276 00002C9F 8B462C mov eax, [esi+44] ; @@ADD 10,11 4277 00002CA2 014628 add [esi+40], eax 4278 00002CA5 8B4630 mov eax, [esi+48] ; @@BF2 12,13,14,15 4279 00002CA8 8B5634 mov edx, [esi+52] ; @@BF 12,13,+,COS4_0,1 4280 00002CAB 015630 add [esi+48], edx 4281 00002CAE 29D0 sub eax, edx 4282 00002CB0 D1E0 shl eax, 1 4283 00002CB2 BA9A79825A mov edx, 5A82799Ah 4284 00002CB7 F7EA imul edx 4285 00002CB9 895634 mov [esi+52], edx 4286 00002CBC 8B4638 mov eax, [esi+56] ; @@BF 14,15,-,COS4_0,1 4287 00002CBF 8B563C mov edx, [esi+60] 4288 00002CC2 015638 add [esi+56], edx 4289 00002CC5 29D0 sub eax, edx 4290 00002CC7 D1E0 shl eax, 1 4291 00002CC9 BA66867DA5 mov edx, 0A57D8666h 4292 00002CCE F7EA imul edx 4293 00002CD0 89563C mov [esi+60], edx 4294 00002CD3 8B463C mov eax, [esi+60] ; @@ADD 14,15 4295 00002CD6 014638 add [esi+56], eax 4296 00002CD9 8B4638 mov eax, [esi+56] ; @@ADD 12,14 4297 00002CDC 014630 add [esi+48], eax 4298 00002CDF 8B4634 mov eax, [esi+52] ; @@ADD 14,13 4299 00002CE2 014638 add [esi+56], eax 4300 00002CE5 8B463C mov eax, [esi+60] ; @@ADD 13,15 4301 00002CE8 014634 add [esi+52], eax ; ENDIF 4302 00002CEB 8B4640 mov eax, [esi+64] ; @@BF1 16,17,18,19 4303 00002CEE 8B5644 mov edx, [esi+68] 4304 00002CF1 015640 add [esi+64], edx 4305 00002CF4 29D0 sub eax, edx 4306 00002CF6 D1E0 shl eax, 1 4307 00002CF8 BA9A79825A mov edx, 5A82799Ah ; +COS4_0 4308 00002CFD F7EA imul edx 4309 00002CFF 895644 mov [esi+68], edx 4310 00002D02 8B4648 mov eax, [esi+72] 4311 00002D05 8B564C mov edx, [esi+76] 4312 00002D08 015648 add [esi+72], edx 4313 00002D0B 29D0 sub eax, edx 4314 00002D0D D1E0 shl eax, 1 4315 00002D0F BA66867DA5 mov edx, 0A57D8666h ; -COS4_0 4316 00002D14 F7EA imul edx 4317 00002D16 89564C mov [esi+76], edx 4318 00002D19 8B464C mov eax, [esi+76] ; @@ADD 18,19 4319 00002D1C 014648 add [esi+72], eax 4320 00002D1F 8B4650 mov eax, [esi+80] ; @@BF2 20,21,22,23 4321 00002D22 8B5654 mov edx, [esi+84] 4322 00002D25 015650 add [esi+80], edx 4323 00002D28 29D0 sub eax, edx 4324 00002D2A D1E0 shl eax, 1 4325 00002D2C BA9A79825A mov edx, 5A82799Ah 4326 00002D31 F7EA imul edx 4327 00002D33 895654 mov [esi+84], edx 4328 00002D36 8B4658 mov eax, [esi+88] 4329 00002D39 8B565C mov edx, [esi+92] 4330 00002D3C 015658 add [esi+88], edx 4331 00002D3F 29D0 sub eax, edx 4332 00002D41 D1E0 shl eax, 1 4333 00002D43 BA66867DA5 mov edx, 0A57D8666h 4334 00002D48 F7EA imul edx 4335 00002D4A 89565C mov [esi+92], edx 4336 00002D4D 8B465C mov eax, [esi+92] ; @@ADD 22,23 4337 00002D50 014658 add [esi+88], eax 4338 00002D53 8B4658 mov eax, [esi+88] ; @@ADD 20,22 4339 00002D56 014650 add [esi+80], eax 4340 00002D59 8B4654 mov eax, [esi+84] 4341 00002D5C 014658 add [esi+88], eax 4342 00002D5F 8B465C mov eax, [esi+92] 4343 00002D62 014654 add [esi+84], eax 4344 00002D65 8B4660 mov eax, [esi+96] ; @@BF1 24,25,26,27 4345 00002D68 8B5664 mov edx, [esi+100] 4346 00002D6B 015660 add [esi+96], edx 4347 00002D6E 29D0 sub eax, edx 4348 00002D70 D1E0 shl eax, 1 4349 00002D72 BA9A79825A mov edx, 5A82799Ah 4350 00002D77 F7EA imul edx 4351 00002D79 895664 mov [esi+100], edx 4352 00002D7C 8B4668 mov eax, [esi+104] 4353 00002D7F 8B566C mov edx, [esi+108] 4354 00002D82 015668 add [esi+104], edx 4355 00002D85 29D0 sub eax, edx 4356 00002D87 D1E0 shl eax, 1 4357 00002D89 BA66867DA5 mov edx, 0A57D8666h 4358 00002D8E F7EA imul edx 4359 00002D90 89566C mov [esi+108], edx 4360 00002D93 8B466C mov eax, [esi+108] 4361 00002D96 014668 add [esi+104], eax 4362 00002D99 8B4670 mov eax, [esi+112] ; @@BF2 28,29,30,31 4363 00002D9C 8B5674 mov edx, [esi+116] 4364 00002D9F 015670 add [esi+112], edx 4365 00002DA2 29D0 sub eax, edx 4366 00002DA4 D1E0 shl eax, 1 4367 00002DA6 BA9A79825A mov edx, 5A82799Ah 4368 00002DAB F7EA imul edx 4369 00002DAD 895674 mov [esi+116], edx 4370 00002DB0 8B4678 mov eax, [esi+120] 4371 00002DB3 8B567C mov edx, [esi+124] 4372 00002DB6 015678 add [esi+120], edx 4373 00002DB9 29D0 sub eax, edx 4374 00002DBB D1E0 shl eax, 1 4375 00002DBD BA66867DA5 mov edx, 0A57D8666h 4376 00002DC2 F7EA imul edx 4377 00002DC4 89567C mov [esi+124], edx 4378 00002DC7 8B467C mov eax, [esi+124] 4379 00002DCA 014678 add [esi+120], eax 4380 00002DCD 8B4678 mov eax, [esi+120] 4381 00002DD0 014670 add [esi+112], eax 4382 00002DD3 8B4674 mov eax, [esi+116] 4383 00002DD6 014678 add [esi+120], eax 4384 00002DD9 8B467C mov eax, [esi+124] 4385 00002DDC 014674 add [esi+116], eax 4386 00002DDF 8B06 mov eax, [esi] ; @@OUT macro dst,src1,src2 4387 ; IF ((dst AND ((1 SHL rate_shift)-1)) EQ 0) 4388 ; mov eax,dword ptr [esi+src1*4] 4389 ; IFDIFI ,<-> 4390 ; add eax,dword ptr [esi+src2*4] 4391 ; ENDIF 4392 ; IF SYNTH32 4393 ; mov dword ptr [edi+dst*4],eax 4394 ; IF (LONG_WINDOW EQ 0) 4395 ; mov dword ptr [edi+dst*4+512*4],eax 4396 ; ENDIF 4397 ; ELSE 4398 ; ...... 4399 ; ENDIF 4400 ; @@OUT 0,0,- 4401 00002DE1 8907 mov [edi], eax ; mov dword ptr [edi+dst*4],eax 4402 00002DE3 8B4604 mov eax, [esi+4] ; @@OUT 16,1, - 4403 ; mov eax,dword ptr [esi+src1*4] 4404 00002DE6 894740 mov [edi+64], eax ; mov dword ptr [edi+dst*4],eax 4405 00002DE9 8B4608 mov eax, [esi+8] ; @@OUT 8,2,- 4406 00002DEC 894720 mov [edi+32], eax 4407 00002DEF 8B460C mov eax, [esi+12] ; @@OUT 24,3,- 4408 00002DF2 894760 mov [edi+96], eax 4409 00002DF5 8B4610 mov eax, [esi+16] ; @@OUT 4,4,- 4410 00002DF8 894710 mov [edi+16], eax 4411 00002DFB 8B4614 mov eax, [esi+20] ; @@OUT 20,5,- 4412 00002DFE 894750 mov [edi+80], eax 4413 00002E01 8B4618 mov eax, [esi+24] ; @@OUT 12,6,- 4414 00002E04 894730 mov [edi+48], eax 4415 00002E07 8B461C mov eax, [esi+28] ; @@OUT 28,7,- 4416 00002E0A 894770 mov [edi+112], eax 4417 00002E0D 8B4620 mov eax, [esi+32] ; @@OUT 2,8,12 4418 00002E10 034630 add eax, [esi+48] ; add eax,dword ptr [esi+src2*4] 4419 00002E13 894708 mov [edi+8], eax 4420 00002E16 8B4624 mov eax, [esi+36] ; @@OUT 18,9,13 4421 00002E19 034634 add eax, [esi+52] ; add eax,dword ptr [esi+src2*4] 4422 00002E1C 894748 mov [edi+72], eax 4423 00002E1F 8B4628 mov eax, [esi+40] ; @@OUT 10,10,14 4424 00002E22 034638 add eax, [esi+56] 4425 00002E25 894728 mov [edi+40], eax 4426 00002E28 8B462C mov eax, [esi+44] ; @@OUT 26,11,15 4427 00002E2B 03463C add eax, [esi+60] 4428 00002E2E 894768 mov [edi+104], eax 4429 00002E31 8B4630 mov eax, [esi+48] ; @@OUT 6,12,10 4430 00002E34 034628 add eax, [esi+40] 4431 00002E37 894718 mov [edi+24], eax 4432 00002E3A 8B4634 mov eax, [esi+52] ; @@OUT 22,13,11 4433 00002E3D 03462C add eax, [esi+44] 4434 00002E40 894758 mov [edi+88], eax 4435 00002E43 8B4638 mov eax, [esi+56] ; @@OUT 14,14,9 4436 00002E46 034624 add eax, [esi+36] 4437 00002E49 894738 mov [edi+56], eax 4438 00002E4C 8B463C mov eax, [esi+60] ; @@OUT 30,15,- 4439 00002E4F 894778 mov [edi+120], eax 4440 00002E52 8B4670 mov eax, [esi+112] ; @@ADD 24,28 4441 00002E55 014660 add [esi+96], eax 4442 00002E58 8B4668 mov eax, [esi+104] ; @@ADD 28,26 4443 00002E5B 014670 add [esi+112], eax 4444 00002E5E 8B4678 mov eax, [esi+120] ; @@ADD 26,30 4445 00002E61 014668 add [esi+104], eax 4446 00002E64 8B4664 mov eax, [esi+100] ; @@ADD 30,25 4447 00002E67 014678 add [esi+120], eax 4448 00002E6A 8B4674 mov eax, [esi+116] ; @@ADD 25,29 4449 00002E6D 014664 add [esi+100], eax 4450 00002E70 8B466C mov eax, [esi+108] ; @@ADD 29,27 4451 00002E73 014674 add [esi+116], eax 4452 00002E76 8B467C mov eax, [esi+124] ; @@ADD 27,31 4453 00002E79 01466C add [esi+108], eax 4454 00002E7C 8B4640 mov eax, [esi+64] ; @@OUT 1,16,24 4455 00002E7F 034660 add eax, [esi+96] 4456 00002E82 894704 mov [edi+4], eax 4457 00002E85 8B4644 mov eax, [esi+68] ; @@OUT 17,17,25 4458 00002E88 034664 add eax, [esi+100] 4459 00002E8B 894744 mov [edi+68], eax 4460 00002E8E 8B4648 mov eax, [esi+72] ; @@OUT 9,18,26 4461 00002E91 034668 add eax, [esi+104] 4462 00002E94 894724 mov [edi+36], eax 4463 00002E97 8B464C mov eax, [esi+76] ; @@OUT 25,19,27 4464 00002E9A 03466C add eax, [esi+108] 4465 00002E9D 894764 mov [edi+100], eax 4466 00002EA0 8B4650 mov eax, [esi+80] ; @@OUT 5,20,28 4467 00002EA3 034670 add eax, [esi+112] 4468 00002EA6 894714 mov [edi+20], eax 4469 00002EA9 8B4654 mov eax, [esi+84] ; @@OUT 21,21,29 4470 00002EAC 034674 add eax, [esi+116] 4471 00002EAF 894754 mov [edi+84], eax 4472 00002EB2 8B4658 mov eax, [esi+88] ; @@OUT 13,22,30 4473 00002EB5 034678 add eax, [esi+120] 4474 00002EB8 894734 mov [edi+52], eax 4475 00002EBB 8B465C mov eax, [esi+92] ; @@OUT 29,23,31 4476 00002EBE 03467C add eax, [esi+124] 4477 00002EC1 894774 mov [edi+116], eax 4478 00002EC4 8B4660 mov eax, [esi+96] ; @@OUT 3,24,20 4479 00002EC7 034650 add eax, [esi+80] 4480 00002ECA 89470C mov [edi+12], eax 4481 00002ECD 8B4664 mov eax, [esi+100] ; @@OUT 19,25,21 4482 00002ED0 034654 add eax, [esi+84] 4483 00002ED3 89474C mov [edi+76], eax 4484 00002ED6 8B4668 mov eax, [esi+104] ; @@OUT 11,26,22 4485 00002ED9 034658 add eax, [esi+88] 4486 00002EDC 89472C mov [edi+44], eax 4487 00002EDF 8B466C mov eax, [esi+108] ; @@OUT 27,27,23 4488 00002EE2 03465C add eax, [esi+92] 4489 00002EE5 89476C mov [edi+108], eax 4490 00002EE8 8B4670 mov eax, [esi+112] ; @@OUT 7,28,18 4491 00002EEB 034648 add eax, [esi+72] 4492 00002EEE 89471C mov [edi+28], eax 4493 00002EF1 8B4674 mov eax, [esi+116] ; @@OUT 23,29,19 4494 00002EF4 03464C add eax, [esi+76] 4495 00002EF7 89475C mov [edi+92], eax 4496 00002EFA 8B4678 mov eax, [esi+120] ; @@OUT 15,30,17 4497 00002EFD 034644 add eax, [esi+68] 4498 00002F00 89473C mov [edi+60], eax 4499 00002F03 8B467C mov eax, [esi+124] ; @@OUT 31,31,- 4500 00002F06 89477C mov [edi+124], eax 4501 00002F09 C3 retn 4502 4503 4504 ; =============== S U B R O U T I N E ======================================= 4505 4506 4507 mp3_dct32_shift_1: 4508 00002F0A 8B467C mov eax, [esi+124] ; mp3_dct32_macro macro rate_shift ; rate_shift = 1 4509 00002F0D 0106 add [esi], eax ; @@BF macro a,b,sign,cos,shift 4510 ; @@need_a equ (rate_shift EQ 0) or (a LT 16) ; a = 0 4511 ; @@need_b equ (rate_shift EQ 0) or (b LT 16) ; b = 31 4512 ; IF @@need_a AND @@need_b ; rate_shift = 0 4513 ; mov eax,dword ptr [esi+a*4] 4514 ; mov edx,dword ptr [esi+b*4] 4515 ; add dword ptr [esi+a*4],edx 4516 ; ELSEIF @@need_a 4517 ; mov eax,dword ptr [esi+b*4] 4518 ; add dword ptr [esi+a*4],eax 4519 ; 4520 ; @@BF 0,31,+,COS0_0,1 4521 00002F0F 8B4640 mov eax, [esi+64] ; @@BF 15,16,+,COS0_15,5 4522 00002F12 01463C add [esi+60], eax 4523 00002F15 8B06 mov eax, [esi] ; @@BF 0,15,+,COS1_0,1 4524 00002F17 8B563C mov edx, [esi+60] 4525 00002F1A 0116 add [esi], edx 4526 00002F1C 29D0 sub eax, edx 4527 00002F1E D1E0 shl eax, 1 4528 00002F20 BA72464F40 mov edx, 404F4672h ; COS1_0 4529 00002F25 F7EA imul edx 4530 00002F27 89563C mov [esi+60], edx 4531 00002F2A 8B4660 mov eax, [esi+96] ; skip @@BF 16,31,-,COS1_0,1 4532 ; @@BF 7,24,+,COS0_7,1 4533 00002F2D 01461C add [esi+28], eax 4534 00002F30 8B465C mov eax, [esi+92] ; @@BF 8,23,+,COS0_8,1 4535 00002F33 014620 add [esi+32], eax 4536 00002F36 8B461C mov eax, [esi+28] ; @@BF 7,8,+,COS1_7,4 4537 00002F39 8B5620 mov edx, [esi+32] 4538 00002F3C 01561C add [esi+28], edx 4539 00002F3F 29D0 sub eax, edx 4540 00002F41 C1E004 shl eax, 4 4541 00002F44 BA044E9E51 mov edx, 519E4E04h ; COS1_7 4542 00002F49 F7EA imul edx 4543 00002F4B 895620 mov [esi+32], edx 4544 00002F4E 8B06 mov eax, [esi] ; skip @@BF 23,24,-,COS1_7,4 4545 ; @@BF 0,7,+,COS2_0,1 4546 00002F50 8B561C mov edx, [esi+28] 4547 00002F53 0116 add [esi], edx 4548 00002F55 29D0 sub eax, edx 4549 00002F57 D1E0 shl eax, 1 4550 00002F59 BA46FB4041 mov edx, 4140FB46h ; COS2_0 4551 00002F5E F7EA imul edx 4552 00002F60 89561C mov [esi+28], edx 4553 00002F63 8B4620 mov eax, [esi+32] ; @@BF 8,15,-,COS2_0,1 4554 00002F66 8B563C mov edx, [esi+60] 4555 00002F69 015620 add [esi+32], edx 4556 00002F6C 29D0 sub eax, edx 4557 00002F6E D1E0 shl eax, 1 4558 00002F70 BABA04BFBE mov edx, 0BEBF04BAh ; -COS2_0 4559 00002F75 F7EA imul edx 4560 00002F77 89563C mov [esi+60], edx 4561 00002F7A 8B4670 mov eax, [esi+112] ; skip @@BF 16,23,+,COS2_0,1 4562 ; @@BF 24,31,-,COS2_0,1 4563 ; @@BF 3,28,+,COS0_3,1 4564 00002F7D 01460C add [esi+12], eax 4565 00002F80 8B464C mov eax, [esi+76] ; @@BF 12,19,+,COS0_12,2 4566 00002F83 014630 add [esi+48], eax 4567 00002F86 8B460C mov eax, [esi+12] ; @@BF 3,12,+,COS1_3,1 4568 00002F89 8B5630 mov edx, [esi+48] 4569 00002F8C 01560C add [esi+12], edx 4570 00002F8F 29D0 sub eax, edx 4571 00002F91 D1E0 shl eax, 1 4572 00002F93 BA630ECB52 mov edx, 52CB0E63h 4573 00002F98 F7EA imul edx 4574 00002F9A 895630 mov [esi+48], edx 4575 00002F9D 8B466C mov eax, [esi+108] ; @@BF 4,27,+,COS0_4,1 4576 00002FA0 014610 add [esi+16], eax 4577 00002FA3 8B4650 mov eax, [esi+80] ; @@BF 11,20,+,COS0_11,2 4578 00002FA6 01462C add [esi+44], eax 4579 00002FA9 8B4610 mov eax, [esi+16] ; @@BF 4,11,+,COS1_4,1 4580 00002FAC 8B562C mov edx, [esi+44] 4581 00002FAF 015610 add [esi+16], edx 4582 00002FB2 29D0 sub eax, edx 4583 00002FB4 D1E0 shl eax, 1 4584 00002FB6 BA2E40E264 mov edx, 64E2402Eh ; COS1_4 4585 00002FBB F7EA imul edx 4586 00002FBD 89562C mov [esi+44], edx 4587 00002FC0 8B460C mov eax, [esi+12] ; @@BF 3,4,+,COS2_3,3 4588 00002FC3 8B5610 mov edx, [esi+16] 4589 00002FC6 01560C add [esi+12], edx 4590 00002FC9 29D0 sub eax, edx 4591 00002FCB C1E003 shl eax, 3 4592 00002FCE BA42670352 mov edx, 52036742h 4593 00002FD3 F7EA imul edx 4594 00002FD5 895610 mov [esi+16], edx 4595 00002FD8 8B462C mov eax, [esi+44] ; @@BF 11,12,-,COS2_3,3 4596 00002FDB 8B5630 mov edx, [esi+48] 4597 00002FDE 01562C add [esi+44], edx 4598 00002FE1 29D0 sub eax, edx 4599 00002FE3 C1E003 shl eax, 3 4600 00002FE6 BABE98FCAD mov edx, 0ADFC98BEh ; -COS2_3 4601 00002FEB F7EA imul edx 4602 00002FED 895630 mov [esi+48], edx 4603 00002FF0 8B06 mov eax, [esi] ; @@BF 0,3,+,COS3_0,1 4604 00002FF2 8B560C mov edx, [esi+12] 4605 00002FF5 0116 add [esi], edx 4606 00002FF7 29D0 sub eax, edx 4607 00002FF9 D1E0 shl eax, 1 4608 00002FFB BAF0E94545 mov edx, 4545E9F0h 4609 00003000 F7EA imul edx 4610 00003002 89560C mov [esi+12], edx 4611 00003005 8B4610 mov eax, [esi+16] ; @@BF 4,7,-,COS3_0,1 4612 00003008 8B561C mov edx, [esi+28] 4613 0000300B 015610 add [esi+16], edx 4614 0000300E 29D0 sub eax, edx 4615 00003010 D1E0 shl eax, 1 4616 00003012 BA1016BABA mov edx, 0BABA1610h 4617 00003017 F7EA imul edx 4618 00003019 89561C mov [esi+28], edx 4619 0000301C 8B4620 mov eax, [esi+32] ; @@BF 8,11,+,COS3_0,1 4620 0000301F 8B562C mov edx, [esi+44] 4621 00003022 015620 add [esi+32], edx 4622 00003025 29D0 sub eax, edx 4623 00003027 D1E0 shl eax, 1 4624 00003029 BAF0E94545 mov edx, 4545E9F0h 4625 0000302E F7EA imul edx 4626 00003030 89562C mov [esi+44], edx 4627 00003033 8B4630 mov eax, [esi+48] ; @@BF 12,15,-,COS3_0,1 4628 00003036 8B563C mov edx, [esi+60] 4629 00003039 015630 add [esi+48], edx 4630 0000303C 29D0 sub eax, edx 4631 0000303E D1E0 shl eax, 1 4632 00003040 BA1016BABA mov edx, 0BABA1610h ; -COS3_0 4633 00003045 F7EA imul edx 4634 00003047 89563C mov [esi+60], edx 4635 0000304A 8B4678 mov eax, [esi+120] ; @@BF 1,30,+,COS0_1,1 4636 0000304D 014604 add [esi+4], eax 4637 00003050 8B4644 mov eax, [esi+68] ; @@BF 14,17,+,COS0_14,3 4638 00003053 014638 add [esi+56], eax 4639 00003056 8B4604 mov eax, [esi+4] ; @@BF 1,14,+,COS1_1,1 4640 00003059 8B5638 mov edx, [esi+56] 4641 0000305C 015604 add [esi+4], edx 4642 0000305F 29D0 sub eax, edx 4643 00003061 D1E0 shl eax, 1 4644 00003063 BA103CE142 mov edx, 42E13C10h 4645 00003068 F7EA imul edx 4646 0000306A 895638 mov [esi+56], edx 4647 0000306D 8B4664 mov eax, [esi+100] ; @@BF 6,25,+,COS0_6,1 4648 00003070 014618 add [esi+24], eax 4649 00003073 8B4658 mov eax, [esi+88] ; @@BF 9,22,+,COS0_9,1 4650 00003076 014624 add [esi+36], eax 4651 00003079 8B4618 mov eax, [esi+24] ; @@BF 6,9,+,COS1_6,2 4652 0000307C 8B5624 mov edx, [esi+36] 4653 0000307F 015618 add [esi+24], edx 4654 00003082 29D0 sub eax, edx 4655 00003084 C1E002 shl eax, 2 4656 00003087 BAC2923C6E mov edx, 6E3C92C2h ; +COS1_6 4657 0000308C F7EA imul edx 4658 0000308E 895624 mov [esi+36], edx 4659 00003091 8B4604 mov eax, [esi+4] ; @@BF 1,6,+,COS2_1,1 4660 00003094 8B5618 mov edx, [esi+24] 4661 00003097 015604 add [esi+4], edx 4662 0000309A 29D0 sub eax, edx 4663 0000309C D1E0 shl eax, 1 4664 0000309E BA88DEF84C mov edx, 4CF8DE88h 4665 000030A3 F7EA imul edx 4666 000030A5 895618 mov [esi+24], edx 4667 000030A8 8B4624 mov eax, [esi+36] ; @@BF 9,14,-,COS2_1,1 4668 000030AB 8B5638 mov edx, [esi+56] 4669 000030AE 015624 add [esi+36], edx 4670 000030B1 29D0 sub eax, edx 4671 000030B3 D1E0 shl eax, 1 4672 000030B5 BA782107B3 mov edx, 0B3072178h ; -COS2_1 4673 000030BA F7EA imul edx 4674 000030BC 895638 mov [esi+56], edx 4675 000030BF 8B4674 mov eax, [esi+116] ; @@BF 2,29,+,COS0_2,1 4676 000030C2 014608 add [esi+8], eax 4677 000030C5 8B4648 mov eax, [esi+72] ; @@BF 13,18,+,COS0_13,3 4678 000030C8 014634 add [esi+52], eax 4679 000030CB 8B4608 mov eax, [esi+8] ; @@BF 2,13,+,COS1_2,1 4680 000030CE 8B5634 mov edx, [esi+52] 4681 000030D1 015608 add [esi+8], edx 4682 000030D4 29D0 sub eax, edx 4683 000030D6 D1E0 shl eax, 1 4684 000030D8 BA459F9148 mov edx, 48919F45h 4685 000030DD F7EA imul edx 4686 000030DF 895634 mov [esi+52], edx 4687 000030E2 8B4668 mov eax, [esi+104] ; @@BF 5,26,+,COS0_5,1 4688 000030E5 014614 add [esi+20], eax 4689 000030E8 8B4654 mov eax, [esi+84] ; @@BF 10,21,+,COS0_10,1 4690 000030EB 014628 add [esi+40], eax 4691 000030EE 8B4614 mov eax, [esi+20] ; @@BF 5,10,+,COS1_5,2 4692 000030F1 8B5628 mov edx, [esi+40] 4693 000030F4 015614 add [esi+20], edx 4694 000030F7 29D0 sub eax, edx 4695 000030F9 C1E002 shl eax, 2 4696 000030FC BAAA24E243 mov edx, 43E224AAh 4697 00003101 F7EA imul edx 4698 00003103 895628 mov [esi+40], edx 4699 00003106 8B4608 mov eax, [esi+8] ; @@BF 2,5,+,COS2_2,1 4700 00003109 8B5614 mov edx, [esi+20] 4701 0000310C 015608 add [esi+8], edx 4702 0000310F 29D0 sub eax, edx 4703 00003111 D1E0 shl eax, 1 4704 00003113 BABF6B3273 mov edx, 73326BBFh ; COS2_2 4705 00003118 F7EA imul edx 4706 0000311A 895614 mov [esi+20], edx 4707 0000311D 8B4628 mov eax, [esi+40] ; @@BF 10,13,-,COS2_2,1 4708 00003120 8B5634 mov edx, [esi+52] 4709 00003123 015628 add [esi+40], edx 4710 00003126 29D0 sub eax, edx 4711 00003128 D1E0 shl eax, 1 4712 0000312A BA4194CD8C mov edx, 8CCD9441h ; -COS2_2 4713 0000312F F7EA imul edx 4714 00003131 895634 mov [esi+52], edx 4715 00003134 8B4604 mov eax, [esi+4] ; @@BF 1,2,+,COS3_1,2 4716 00003137 8B5608 mov edx, [esi+8] 4717 0000313A 015604 add [esi+4], edx 4718 0000313D 29D0 sub eax, edx 4719 0000313F C1E002 shl eax, 2 4720 00003142 BA46BA9E53 mov edx, 539EBA46h 4721 00003147 F7EA imul edx 4722 00003149 895608 mov [esi+8], edx 4723 0000314C 8B4614 mov eax, [esi+20] ; @@BF 5,6,-,COS3_1,2 4724 0000314F 8B5618 mov edx, [esi+24] 4725 00003152 015614 add [esi+20], edx 4726 00003155 29D0 sub eax, edx 4727 00003157 C1E002 shl eax, 2 4728 0000315A BABA4561AC mov edx, 0AC6145BAh 4729 0000315F F7EA imul edx 4730 00003161 895618 mov [esi+24], edx 4731 00003164 8B4624 mov eax, [esi+36] ; IF rate_shift LT 2 4732 ; @@BF 9,10,+,COS3_1,2 4733 00003167 8B5628 mov edx, [esi+40] 4734 0000316A 015624 add [esi+36], edx 4735 0000316D 29D0 sub eax, edx 4736 0000316F C1E002 shl eax, 2 4737 00003172 BA46BA9E53 mov edx, 539EBA46h ; +COS3_1 4738 00003177 F7EA imul edx 4739 00003179 895628 mov [esi+40], edx 4740 0000317C 8B4634 mov eax, [esi+52] ; @@BF 13,14,-,COS3_1,2 4741 0000317F 8B5638 mov edx, [esi+56] 4742 00003182 015634 add [esi+52], edx 4743 00003185 29D0 sub eax, edx 4744 00003187 C1E002 shl eax, 2 4745 0000318A BABA4561AC mov edx, 0AC6145BAh ; -COS3_1 4746 0000318F F7EA imul edx 4747 00003191 895638 mov [esi+56], edx ; ENDIF 4748 00003194 8B06 mov eax, [esi] ; @@BF1 macro a, b, c, d 4749 ; @@BF a, b,+,COS4_0, 1 4750 ; @@BF c, d,-,COS4_0, 1 4751 ; @@ADD c, d 4752 ; endm 4753 ; @@BF1 0,1,2,3 4754 00003196 8B5604 mov edx, [esi+4] ; @@BF 0,1,+,COS4_0,1 4755 00003199 0116 add [esi], edx 4756 0000319B 29D0 sub eax, edx 4757 0000319D D1E0 shl eax, 1 4758 0000319F BA9A79825A mov edx, 5A82799Ah 4759 000031A4 F7EA imul edx 4760 000031A6 895604 mov [esi+4], edx 4761 000031A9 8B4608 mov eax, [esi+8] ; @@BF 2,3,+,COS4_0,1 4762 000031AC 8B560C mov edx, [esi+12] 4763 000031AF 015608 add [esi+8], edx 4764 000031B2 29D0 sub eax, edx 4765 000031B4 D1E0 shl eax, 1 4766 000031B6 BA66867DA5 mov edx, 0A57D8666h 4767 000031BB F7EA imul edx 4768 000031BD 89560C mov [esi+12], edx 4769 000031C0 8B460C mov eax, [esi+12] ; @@ADD 2,3 4770 000031C3 014608 add [esi+8], eax 4771 000031C6 8B4610 mov eax, [esi+16] ; @@BF2 macro a, b, c, d 4772 ; @@BF a, b,+,COS4_0, 1 4773 ; @@BF c, d,-,COS4_0, 1 4774 ; @@ADD c, d 4775 ; @@ADD a, c 4776 ; @@ADD c, b 4777 ; @@ADD b, d 4778 ; endm 4779 ; @@BF2 4,5,6,7 4780 000031C9 8B5614 mov edx, [esi+20] ; @@BF 4,5,+,COS4_0,1 4781 000031CC 015610 add [esi+16], edx 4782 000031CF 29D0 sub eax, edx 4783 000031D1 D1E0 shl eax, 1 4784 000031D3 BA9A79825A mov edx, 5A82799Ah ; +COS4_0 4785 000031D8 F7EA imul edx 4786 000031DA 895614 mov [esi+20], edx 4787 000031DD 8B4618 mov eax, [esi+24] ; @@BF 6,7,-,COS4_0,1 4788 000031E0 8B561C mov edx, [esi+28] 4789 000031E3 015618 add [esi+24], edx 4790 000031E6 29D0 sub eax, edx 4791 000031E8 D1E0 shl eax, 1 4792 000031EA BA66867DA5 mov edx, 0A57D8666h ; -COS4_0 4793 000031EF F7EA imul edx 4794 000031F1 89561C mov [esi+28], edx 4795 000031F4 8B461C mov eax, [esi+28] ; @@ADD macro dst,src 4796 ; IF (rate_shift EQ 0) or (dst LT 16) 4797 ; ;tab[a] += tab[b] 4798 ; mov eax,dword ptr [esi+src*4] 4799 ; add dword ptr [esi+dst*4],eax 4800 ; ENDIF 4801 ; endm 4802 ; @@ADD 6,7 4803 000031F7 014618 add [esi+24], eax 4804 000031FA 8B4618 mov eax, [esi+24] ; @@ADD 4,6 4805 000031FD 014610 add [esi+16], eax 4806 00003200 8B4614 mov eax, [esi+20] ; @@ADD 6,5 4807 00003203 014618 add [esi+24], eax 4808 00003206 8B461C mov eax, [esi+28] ; @@ADD 5,7 4809 00003209 014614 add [esi+20], eax 4810 0000320C 8B4620 mov eax, [esi+32] ; IF rate_shift LT 2 4811 ; @@BF1 8,9,10,11 4812 0000320F 8B5624 mov edx, [esi+36] 4813 00003212 015620 add [esi+32], edx 4814 00003215 29D0 sub eax, edx 4815 00003217 D1E0 shl eax, 1 4816 00003219 BA9A79825A mov edx, 5A82799Ah 4817 0000321E F7EA imul edx 4818 00003220 895624 mov [esi+36], edx 4819 00003223 8B4628 mov eax, [esi+40] 4820 00003226 8B562C mov edx, [esi+44] 4821 00003229 015628 add [esi+40], edx 4822 0000322C 29D0 sub eax, edx 4823 0000322E D1E0 shl eax, 1 4824 00003230 BA66867DA5 mov edx, 0A57D8666h 4825 00003235 F7EA imul edx 4826 00003237 89562C mov [esi+44], edx 4827 0000323A 8B462C mov eax, [esi+44] 4828 0000323D 014628 add [esi+40], eax 4829 00003240 8B4630 mov eax, [esi+48] ; @@BF2 12,13,14,15 4830 00003243 8B5634 mov edx, [esi+52] 4831 00003246 015630 add [esi+48], edx 4832 00003249 29D0 sub eax, edx 4833 0000324B D1E0 shl eax, 1 4834 0000324D BA9A79825A mov edx, 5A82799Ah 4835 00003252 F7EA imul edx 4836 00003254 895634 mov [esi+52], edx 4837 00003257 8B4638 mov eax, [esi+56] 4838 0000325A 8B563C mov edx, [esi+60] 4839 0000325D 015638 add [esi+56], edx 4840 00003260 29D0 sub eax, edx 4841 00003262 D1E0 shl eax, 1 4842 00003264 BA66867DA5 mov edx, 0A57D8666h 4843 00003269 F7EA imul edx 4844 0000326B 89563C mov [esi+60], edx 4845 0000326E 8B463C mov eax, [esi+60] 4846 00003271 014638 add [esi+56], eax 4847 00003274 8B4638 mov eax, [esi+56] 4848 00003277 014630 add [esi+48], eax 4849 0000327A 8B4634 mov eax, [esi+52] 4850 0000327D 014638 add [esi+56], eax 4851 00003280 8B463C mov eax, [esi+60] 4852 00003283 014634 add [esi+52], eax 4853 00003286 8B06 mov eax, [esi] ; @@OUT macro dst,src1,src2 4854 ; IF ((dst AND ((1 SHL rate_shift)-1)) EQ 0) 4855 ; mov eax,dword ptr [esi+src1*4] 4856 ; IFDIFI ,<-> 4857 ; add eax,dword ptr [esi+src2*4] 4858 ; ENDIF 4859 ; IF SYNTH32 4860 ; mov dword ptr [edi+dst*4],eax 4861 ; IF (LONG_WINDOW EQ 0) 4862 ; mov dword ptr [edi+dst*4+512*4],eax 4863 ; ENDIF 4864 ; ELSE 4865 ; ...... 4866 ; ENDIF 4867 ; @@OUT 0,0,- 4868 00003288 8907 mov [edi], eax 4869 0000328A 8B4604 mov eax, [esi+4] ; @@OUT 16,1,- 4870 0000328D 894740 mov [edi+64], eax 4871 00003290 8B4608 mov eax, [esi+8] ; @@OUT 8,2,- 4872 00003293 894720 mov [edi+32], eax 4873 00003296 8B460C mov eax, [esi+12] ; @@OUT 24,3,- 4874 00003299 894760 mov [edi+96], eax 4875 0000329C 8B4610 mov eax, [esi+16] ; @@OUT 4,4,- 4876 0000329F 894710 mov [edi+16], eax 4877 000032A2 8B4614 mov eax, [esi+20] ; @@OUT 20,5,- 4878 000032A5 894750 mov [edi+80], eax 4879 000032A8 8B4618 mov eax, [esi+24] ; @@OUT 12,6,- 4880 000032AB 894730 mov [edi+48], eax 4881 000032AE 8B461C mov eax, [esi+28] ; @@OUT 28,7,- 4882 000032B1 894770 mov [edi+112], eax 4883 000032B4 8B4620 mov eax, [esi+32] ; @@OUT 2,8,12 4884 000032B7 034630 add eax, [esi+48] 4885 000032BA 894708 mov [edi+8], eax 4886 000032BD 8B4624 mov eax, [esi+36] ; @@OUT 18,9,13 4887 000032C0 034634 add eax, [esi+52] 4888 000032C3 894748 mov [edi+72], eax 4889 000032C6 8B4628 mov eax, [esi+40] ; @@OUT 10,10,14 4890 000032C9 034638 add eax, [esi+56] 4891 000032CC 894728 mov [edi+40], eax 4892 000032CF 8B462C mov eax, [esi+44] ; @@OUT 26,11,15 4893 000032D2 03463C add eax, [esi+60] 4894 000032D5 894768 mov [edi+104], eax 4895 000032D8 8B4630 mov eax, [esi+48] ; @@OUT 6,12,10 4896 000032DB 034628 add eax, [esi+40] 4897 000032DE 894718 mov [edi+24], eax 4898 000032E1 8B4634 mov eax, [esi+52] ; @@OUT 22,13,11 4899 000032E4 03462C add eax, [esi+44] 4900 000032E7 894758 mov [edi+88], eax 4901 000032EA 8B4638 mov eax, [esi+56] ; @@OUT 14,14,9 4902 000032ED 034624 add eax, [esi+36] 4903 000032F0 894738 mov [edi+56], eax 4904 000032F3 8B463C mov eax, [esi+60] ; @@OUT 30,15,- 4905 000032F6 894778 mov [edi+120], eax 4906 000032F9 C3 retn 4907 4908 4909 ; =============== S U B R O U T I N E ======================================= 4910 4911 4912 mp3_dct32_shift_2: 4913 000032FA 8B467C mov eax, [esi+124] ; mp3_dct32_macro macro rate_shift ; rate_shift = 2 4914 000032FD 0106 add [esi], eax ; @@BF macro a,b,sign,cos,shift 4915 ; @@need_a equ (rate_shift EQ 0) or (a LT 16) ; a = 0 4916 ; @@need_b equ (rate_shift EQ 0) or (b LT 16) ; b = 31 4917 ; IF @@need_a AND @@need_b ; rate_shift = 0 4918 ; mov eax,dword ptr [esi+a*4] 4919 ; mov edx,dword ptr [esi+b*4] 4920 ; add dword ptr [esi+a*4],edx 4921 ; ELSEIF @@need_a 4922 ; mov eax,dword ptr [esi+b*4] 4923 ; add dword ptr [esi+a*4],eax 4924 ; 4925 ; @@BF 0,31,+,COS0_0,1 4926 000032FF 8B4640 mov eax, [esi+64] ; @@BF 15,16,+,COS0_15,5 4927 00003302 01463C add [esi+60], eax 4928 00003305 8B06 mov eax, [esi] ; @@BF 0,15,+,COS1_0,1 4929 00003307 8B563C mov edx, [esi+60] 4930 0000330A 0116 add [esi], edx 4931 0000330C 29D0 sub eax, edx 4932 0000330E D1E0 shl eax, 1 4933 00003310 BA72464F40 mov edx, 404F4672h ; COS1_0 4934 00003315 F7EA imul edx 4935 00003317 89563C mov [esi+60], edx 4936 0000331A 8B4660 mov eax, [esi+96] ; @@BF 7,24,+,COS0_7,1 4937 0000331D 01461C add [esi+28], eax 4938 00003320 8B465C mov eax, [esi+92] ; @@BF 8,23,+,COS0_8,1 4939 00003323 014620 add [esi+32], eax 4940 00003326 8B461C mov eax, [esi+28] ; @@BF 7,8,+,COS1_7,4 4941 00003329 8B5620 mov edx, [esi+32] 4942 0000332C 01561C add [esi+28], edx 4943 0000332F 29D0 sub eax, edx 4944 00003331 C1E004 shl eax, 4 4945 00003334 BA044E9E51 mov edx, 519E4E04h ; COS1_7 4946 00003339 F7EA imul edx 4947 0000333B 895620 mov [esi+32], edx 4948 0000333E 8B06 mov eax, [esi] ; @@BF 0,7,+,COS2_0,1 4949 00003340 8B561C mov edx, [esi+28] 4950 00003343 0116 add [esi], edx 4951 00003345 29D0 sub eax, edx 4952 00003347 D1E0 shl eax, 1 4953 00003349 BA46FB4041 mov edx, 4140FB46h ; COS2_0 4954 0000334E F7EA imul edx 4955 00003350 89561C mov [esi+28], edx 4956 00003353 8B4620 mov eax, [esi+32] ; @@BF 8,15,-,COS2_0,1 4957 00003356 8B563C mov edx, [esi+60] 4958 00003359 015620 add [esi+32], edx 4959 0000335C 29D0 sub eax, edx 4960 0000335E D1E0 shl eax, 1 4961 00003360 BABA04BFBE mov edx, 0BEBF04BAh 4962 00003365 F7EA imul edx 4963 00003367 89563C mov [esi+60], edx 4964 0000336A 8B4670 mov eax, [esi+112] ; @@BF 3,28,+,COS0_3,1 4965 0000336D 01460C add [esi+12], eax 4966 00003370 8B464C mov eax, [esi+76] ; @@BF 12,19,+,COS0_12,2 4967 00003373 014630 add [esi+48], eax 4968 00003376 8B460C mov eax, [esi+12] ; @@BF 3,12,+,COS1_3,1 4969 00003379 8B5630 mov edx, [esi+48] 4970 0000337C 01560C add [esi+12], edx 4971 0000337F 29D0 sub eax, edx 4972 00003381 D1E0 shl eax, 1 4973 00003383 BA630ECB52 mov edx, 52CB0E63h ; COS1_3 4974 00003388 F7EA imul edx 4975 0000338A 895630 mov [esi+48], edx 4976 0000338D 8B466C mov eax, [esi+108] ; @@BF 4,27,+,COS0_4,1 4977 00003390 014610 add [esi+16], eax 4978 00003393 8B4650 mov eax, [esi+80] ; @@BF 11,20,+,COS0_11,2 4979 00003396 01462C add [esi+44], eax 4980 00003399 8B4610 mov eax, [esi+16] ; @@BF 4,11,+,COS1_4,1 4981 0000339C 8B562C mov edx, [esi+44] 4982 0000339F 015610 add [esi+16], edx 4983 000033A2 29D0 sub eax, edx 4984 000033A4 D1E0 shl eax, 1 4985 000033A6 BA2E40E264 mov edx, 64E2402Eh 4986 000033AB F7EA imul edx 4987 000033AD 89562C mov [esi+44], edx 4988 000033B0 8B460C mov eax, [esi+12] ; @@BF 3,4,+,COS2_3,3 4989 000033B3 8B5610 mov edx, [esi+16] 4990 000033B6 01560C add [esi+12], edx 4991 000033B9 29D0 sub eax, edx 4992 000033BB C1E003 shl eax, 3 4993 000033BE BA42670352 mov edx, 52036742h 4994 000033C3 F7EA imul edx 4995 000033C5 895610 mov [esi+16], edx 4996 000033C8 8B462C mov eax, [esi+44] ; @@BF 11,12,-,COS2_3,3 4997 000033CB 8B5630 mov edx, [esi+48] 4998 000033CE 01562C add [esi+44], edx 4999 000033D1 29D0 sub eax, edx 5000 000033D3 C1E003 shl eax, 3 5001 000033D6 BABE98FCAD mov edx, 0ADFC98BEh ; -COS2_3 5002 000033DB F7EA imul edx 5003 000033DD 895630 mov [esi+48], edx 5004 000033E0 8B06 mov eax, [esi] ; @@BF 0,3,+,COS3_0,1 5005 000033E2 8B560C mov edx, [esi+12] 5006 000033E5 0116 add [esi], edx 5007 000033E7 29D0 sub eax, edx 5008 000033E9 D1E0 shl eax, 1 5009 000033EB BAF0E94545 mov edx, 4545E9F0h 5010 000033F0 F7EA imul edx 5011 000033F2 89560C mov [esi+12], edx 5012 000033F5 8B4610 mov eax, [esi+16] ; @@BF 4,7,-,COS3_0,1 5013 000033F8 8B561C mov edx, [esi+28] 5014 000033FB 015610 add [esi+16], edx 5015 000033FE 29D0 sub eax, edx 5016 00003400 D1E0 shl eax, 1 5017 00003402 BA1016BABA mov edx, 0BABA1610h 5018 00003407 F7EA imul edx 5019 00003409 89561C mov [esi+28], edx 5020 0000340C 8B4620 mov eax, [esi+32] ; @@BF 8,11,+,COS3_0,1 5021 0000340F 8B562C mov edx, [esi+44] 5022 00003412 015620 add [esi+32], edx 5023 00003415 29D0 sub eax, edx 5024 00003417 D1E0 shl eax, 1 5025 00003419 BAF0E94545 mov edx, 4545E9F0h 5026 0000341E F7EA imul edx 5027 00003420 89562C mov [esi+44], edx 5028 00003423 8B4630 mov eax, [esi+48] ; @@BF 12,15,-,COS3_0,1 5029 00003426 8B563C mov edx, [esi+60] 5030 00003429 015630 add [esi+48], edx 5031 0000342C 29D0 sub eax, edx 5032 0000342E D1E0 shl eax, 1 5033 00003430 BA1016BABA mov edx, 0BABA1610h 5034 00003435 F7EA imul edx 5035 00003437 89563C mov [esi+60], edx 5036 0000343A 8B4678 mov eax, [esi+120] ; @@BF 1,30,+,COS0_1,1 5037 0000343D 014604 add [esi+4], eax 5038 00003440 8B4644 mov eax, [esi+68] ; @@BF 14,17,+,COS0_14,3 5039 00003443 014638 add [esi+56], eax 5040 00003446 8B4604 mov eax, [esi+4] ; @@BF 1,14,+,COS1_1,1 5041 00003449 8B5638 mov edx, [esi+56] 5042 0000344C 015604 add [esi+4], edx 5043 0000344F 29D0 sub eax, edx 5044 00003451 D1E0 shl eax, 1 5045 00003453 BA103CE142 mov edx, 42E13C10h ; COS1_1 5046 00003458 F7EA imul edx 5047 0000345A 895638 mov [esi+56], edx 5048 0000345D 8B4664 mov eax, [esi+100] ; @@BF 6,25,+,COS0_6,1 5049 00003460 014618 add [esi+24], eax 5050 00003463 8B4658 mov eax, [esi+88] ; @@BF 9,22,+,COS0_9,1 5051 00003466 014624 add [esi+36], eax 5052 00003469 8B4618 mov eax, [esi+24] ; @@BF 6,9,+,COS1_6,2 5053 0000346C 8B5624 mov edx, [esi+36] 5054 0000346F 015618 add [esi+24], edx 5055 00003472 29D0 sub eax, edx 5056 00003474 C1E002 shl eax, 2 5057 00003477 BAC2923C6E mov edx, 6E3C92C2h 5058 0000347C F7EA imul edx 5059 0000347E 895624 mov [esi+36], edx 5060 00003481 8B4604 mov eax, [esi+4] ; @@BF 1,6,+,COS2_1,1 5061 00003484 8B5618 mov edx, [esi+24] 5062 00003487 015604 add [esi+4], edx 5063 0000348A 29D0 sub eax, edx 5064 0000348C D1E0 shl eax, 1 5065 0000348E BA88DEF84C mov edx, 4CF8DE88h ; COS2_1 5066 00003493 F7EA imul edx 5067 00003495 895618 mov [esi+24], edx 5068 00003498 8B4624 mov eax, [esi+36] ; @@BF 9,14,-,COS2_1,1 5069 0000349B 8B5638 mov edx, [esi+56] 5070 0000349E 015624 add [esi+36], edx 5071 000034A1 29D0 sub eax, edx 5072 000034A3 D1E0 shl eax, 1 5073 000034A5 BA782107B3 mov edx, 0B3072178h ; -COS2_1 5074 000034AA F7EA imul edx 5075 000034AC 895638 mov [esi+56], edx 5076 000034AF 8B4674 mov eax, [esi+116] ; @@BF 2,29,+,COS0_2,1 5077 000034B2 014608 add [esi+8], eax 5078 000034B5 8B4648 mov eax, [esi+72] ; @@BF 13,18,+,COS0_13,3 5079 000034B8 014634 add [esi+52], eax 5080 000034BB 8B4608 mov eax, [esi+8] ; @@BF 2,13,+,COS1_2,1 5081 000034BE 8B5634 mov edx, [esi+52] 5082 000034C1 015608 add [esi+8], edx 5083 000034C4 29D0 sub eax, edx 5084 000034C6 D1E0 shl eax, 1 5085 000034C8 BA459F9148 mov edx, 48919F45h 5086 000034CD F7EA imul edx 5087 000034CF 895634 mov [esi+52], edx 5088 000034D2 8B4668 mov eax, [esi+104] ; @@BF 5,26,+,COS0_5,1 5089 000034D5 014614 add [esi+20], eax 5090 000034D8 8B4654 mov eax, [esi+84] ; @@BF 10,21,+,COS0_10,1 5091 000034DB 014628 add [esi+40], eax 5092 000034DE 8B4614 mov eax, [esi+20] ; @@BF 5,10,+,COS1_5,2 5093 000034E1 8B5628 mov edx, [esi+40] 5094 000034E4 015614 add [esi+20], edx 5095 000034E7 29D0 sub eax, edx 5096 000034E9 C1E002 shl eax, 2 5097 000034EC BAAA24E243 mov edx, 43E224AAh 5098 000034F1 F7EA imul edx 5099 000034F3 895628 mov [esi+40], edx 5100 000034F6 8B4608 mov eax, [esi+8] ; @@BF 2,5,+,COS2_2,1 5101 000034F9 8B5614 mov edx, [esi+20] 5102 000034FC 015608 add [esi+8], edx 5103 000034FF 29D0 sub eax, edx 5104 00003501 D1E0 shl eax, 1 5105 00003503 BABF6B3273 mov edx, 73326BBFh ; COS2_2 5106 00003508 F7EA imul edx 5107 0000350A 895614 mov [esi+20], edx 5108 0000350D 8B4628 mov eax, [esi+40] ; @@BF 10,13,-,COS2_2,1 5109 00003510 8B5634 mov edx, [esi+52] 5110 00003513 015628 add [esi+40], edx 5111 00003516 29D0 sub eax, edx 5112 00003518 D1E0 shl eax, 1 5113 0000351A BA4194CD8C mov edx, 8CCD9441h ; -COS2_2 5114 0000351F F7EA imul edx 5115 00003521 895634 mov [esi+52], edx 5116 00003524 8B4604 mov eax, [esi+4] ; @@BF 1,2,+,COS3_1,2 5117 00003527 8B5608 mov edx, [esi+8] 5118 0000352A 015604 add [esi+4], edx 5119 0000352D 29D0 sub eax, edx 5120 0000352F C1E002 shl eax, 2 5121 00003532 BA46BA9E53 mov edx, 539EBA46h ; COS3_1 5122 00003537 F7EA imul edx 5123 00003539 895608 mov [esi+8], edx 5124 0000353C 8B4614 mov eax, [esi+20] ; @@BF 5,6,-,COS3_1,2 5125 0000353F 8B5618 mov edx, [esi+24] 5126 00003542 015614 add [esi+14h], edx 5127 00003545 29D0 sub eax, edx 5128 00003547 C1E002 shl eax, 2 5129 0000354A BABA4561AC mov edx, 0AC6145BAh ; -COS3_1 5130 0000354F F7EA imul edx 5131 00003551 895618 mov [esi+24], edx 5132 00003554 8B06 mov eax, [esi] ; @@BF1 macro a, b, c, d 5133 ; @@BF a, b,+,COS4_0, 1 5134 ; @@BF c, d,-,COS4_0, 1 5135 ; @@ADD c, d 5136 ; endm 5137 ; @@BF1 0,1,2,3 5138 00003556 8B5604 mov edx, [esi+4] ; @@BF 0,1,+,COS4_0,1 5139 00003559 0116 add [esi], edx 5140 0000355B 29D0 sub eax, edx 5141 0000355D D1E0 shl eax, 1 5142 0000355F BA9A79825A mov edx, 5A82799Ah 5143 00003564 F7EA imul edx 5144 00003566 895604 mov [esi+4], edx 5145 00003569 8B4608 mov eax, [esi+8] ; @@BF 2,3,-,COS4_0,1 5146 0000356C 8B560C mov edx, [esi+12] 5147 0000356F 015608 add [esi+8], edx 5148 00003572 29D0 sub eax, edx 5149 00003574 D1E0 shl eax, 1 5150 00003576 BA66867DA5 mov edx, 0A57D8666h 5151 0000357B F7EA imul edx 5152 0000357D 89560C mov [esi+12], edx 5153 00003580 8B460C mov eax, [esi+12] ; @@ADD 2,3 5154 00003583 014608 add [esi+8], eax 5155 00003586 8B4610 mov eax, [esi+16] ; @@BF2 macro a, b, c, d 5156 ; @@BF a, b,+,COS4_0, 1 5157 ; @@BF c, d,-,COS4_0, 1 5158 ; @@ADD c, d 5159 ; @@ADD a, c 5160 ; @@ADD c, b 5161 ; @@ADD b, d 5162 ; endm 5163 ; @@BF2 4,5,6,7 5164 00003589 8B5614 mov edx, [esi+20] ; @@BF 4,5,+,COS4_0,1 5165 0000358C 015610 add [esi+16], edx 5166 0000358F 29D0 sub eax, edx 5167 00003591 D1E0 shl eax, 1 5168 00003593 BA9A79825A mov edx, 5A82799Ah ; COS4_0 5169 00003598 F7EA imul edx 5170 0000359A 895614 mov [esi+20], edx 5171 0000359D 8B4618 mov eax, [esi+24] ; @@BF 6,7,-,COS4_0,1 5172 000035A0 8B561C mov edx, [esi+28] 5173 000035A3 015618 add [esi+18h], edx 5174 000035A6 29D0 sub eax, edx 5175 000035A8 D1E0 shl eax, 1 5176 000035AA BA66867DA5 mov edx, 0A57D8666h ; -COS4_0 5177 000035AF F7EA imul edx 5178 000035B1 89561C mov [esi+28], edx 5179 000035B4 8B461C mov eax, [esi+28] ; @@ADD 6,7 5180 000035B7 014618 add [esi+24], eax 5181 000035BA 8B4618 mov eax, [esi+24] ; @@ADD 4,6 5182 000035BD 014610 add [esi+16], eax 5183 000035C0 8B4614 mov eax, [esi+20] ; @@ADD 6,5 5184 000035C3 014618 add [esi+24], eax 5185 000035C6 8B461C mov eax, [esi+28] ; @@ADD 5,7 5186 000035C9 014614 add [esi+20], eax 5187 000035CC 8B06 mov eax, [esi] ; @@OUT macro dst,src1,src2 5188 ; IF ((dst AND ((1 SHL rate_shift)-1)) EQ 0) 5189 ; mov eax,dword ptr [esi+src1*4] 5190 ; IFDIFI ,<-> 5191 ; add eax,dword ptr [esi+src2*4] 5192 ; ENDIF 5193 ; IF SYNTH32 5194 ; mov dword ptr [edi+dst*4],eax 5195 ; IF (LONG_WINDOW EQ 0) 5196 ; mov dword ptr [edi+dst*4+512*4],eax 5197 ; ENDIF 5198 ; ELSE 5199 ; ...... 5200 ; ENDIF 5201 ; @@OUT 0,0,- 5202 000035CE 8907 mov [edi], eax 5203 000035D0 8B4604 mov eax, [esi+4] ; @@OUT 16,1,- 5204 000035D3 894740 mov [edi+64], eax 5205 000035D6 8B4608 mov eax, [esi+8] ; @@OUT 8,2,- 5206 000035D9 894720 mov [edi+32], eax 5207 000035DC 8B460C mov eax, [esi+12] ; @@OUT 24,3,- 5208 000035DF 894760 mov [edi+96], eax 5209 000035E2 8B4610 mov eax, [esi+16] ; @@OUT 4,4,- 5210 000035E5 894710 mov [edi+16], eax 5211 000035E8 8B4614 mov eax, [esi+20] ; @@OUT 20,5,- 5212 000035EB 894750 mov [edi+80], eax 5213 000035EE 8B4618 mov eax, [esi+24] ; @@OUT 12,6,- 5214 000035F1 894730 mov [edi+48], eax 5215 000035F4 8B461C mov eax, [esi+28] ; @@OUT 28,7,- 5216 000035F7 894770 mov [edi+112], eax 5217 000035FA C3 retn 5218 5219 5220 ; =============== S U B R O U T I N E ======================================= 5221 5222 5223 synth_16bit_shift_0_fast: 5224 000035FB F605[1C8C0000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 0,0,1 5225 00003602 740E jz short .no_rdtsc_supported 5226 00003604 0F31 rdtsc 5227 00003606 2905[948D0000] sub [rdtsc_synth_dct], eax 5228 0000360C 1915[988D0000] sbb [rdtsc_synth_dct+4], edx 5229 5230 .no_rdtsc_supported: 5231 00003612 BE[C8D30000] mov esi, mp3_sb_samples 5232 00003617 8B3D[5C0A0100] mov edi, [mp3_samples_dst] 5233 0000361D C705[680A0100]0000- mov dword [mp3_curr_channel], 0 5233 00003625 0000 5234 5235 .synth_channel_lop: 5236 00003627 56 push esi 5237 00003628 57 push edi 5238 00003629 893D[A8B30000] mov [mp3_curr_syn_dst], edi 5239 0000362F C705[700A0100]0000- mov dword [mp3_curr_frame], 0 5239 00003637 0000 5240 5241 .synth_frame_lop: 5242 00003639 56 push esi 5243 0000363A F605[1C8C0000]10 test byte [cpuid_flags], 10h 5244 00003641 740E jz short .no_rdtsc_supported@ 5245 00003643 0F31 rdtsc 5246 00003645 2905[AC8D0000] sub [rdtsc_dct32], eax 5247 0000364B 1915[B08D0000] sbb [rdtsc_dct32+4], edx 5248 5249 .no_rdtsc_supported@: 5250 00003651 8B15[680A0100] mov edx, [mp3_curr_channel] 5251 00003657 8B0495[C0D30000] mov eax, [mp3_synth_index+edx*4] 5252 0000365E 832C95[C0D30000]20 sub dword [mp3_synth_index+edx*4], 32 5253 00003666 C1E20A shl edx, 10 5254 00003669 25E0010000 and eax, 1E0h ; 1FFh-1Fh 5255 0000366E 09D0 or eax, edx 5256 00003670 A3[A4B30000] mov [mp3_curr_syn_index], eax 5257 00003675 8B3D[A4B30000] mov edi, [mp3_curr_syn_index] 5258 0000367B 8D3CBD[C0B30000] lea edi, [mp3_synth_buf+edi*4] 5259 00003682 E8A3EFFFFF call mp3_dct32_shift_0 5260 00003687 F605[1C8C0000]10 test byte [cpuid_flags], 10h 5261 0000368E 740E jz short .no_rdtsc_supported@@ 5262 00003690 0F31 rdtsc 5263 00003692 0105[AC8D0000] add [rdtsc_dct32], eax 5264 00003698 1115[B08D0000] adc [rdtsc_dct32+4], edx 5265 5266 .no_rdtsc_supported@@: 5267 0000369E F605[1C8C0000]10 test byte [cpuid_flags], 10h 5268 000036A5 740E jz short .no_rdtsc_supported@@@ 5269 000036A7 0F31 rdtsc 5270 000036A9 2905[C48D0000] sub [rdtsc_synth], eax 5271 000036AF 1915[C88D0000] sbb [rdtsc_synth+4], edx 5272 5273 .no_rdtsc_supported@@@: 5274 000036B5 E888000000 call mp3_synth_filter_this_16bit_shift_0_fast ; 5275 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 5276 000036BA F605[1C8C0000]10 test byte [cpuid_flags], 10h 5277 000036C1 740E jz short .no_rdtsc_supported@@@@ 5278 000036C3 0F31 rdtsc 5279 000036C5 0105[C48D0000] add [rdtsc_synth], eax 5280 000036CB 1115[C88D0000] adc [rdtsc_synth+4], edx 5281 5282 .no_rdtsc_supported@@@@: 5283 000036D1 5E pop esi 5284 000036D2 A1[640A0100] mov eax, [mp3_samples_dst_step] 5285 000036D7 C1E005 shl eax, 5 5286 000036DA 8A0D[178C0000] mov cl, [option_rate_shift] 5287 000036E0 D3E8 shr eax, cl 5288 000036E2 0105[A8B30000] add [mp3_curr_syn_dst], eax 5289 000036E8 81C680000000 add esi, 128 ; SBLIMIT*4 5290 000036EE FF05[700A0100] inc dword [mp3_curr_frame] 5291 000036F4 A1[700A0100] mov eax, [mp3_curr_frame] 5292 000036F9 3B05[ACB30000] cmp eax, [mp3_nb_frames] 5293 000036FF 0F8234FFFFFF jb .synth_frame_lop 5294 00003705 5F pop edi 5295 00003706 5E pop esi 5296 00003707 033D[A0B30000] add edi, [mp3_bytes_per_sample] 5297 0000370D 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 5298 00003713 FF05[680A0100] inc dword [mp3_curr_channel] 5299 00003719 A1[680A0100] mov eax, [mp3_curr_channel] 5300 0000371E 3B05[98B30000] cmp eax, [mp3_output_num_channels] 5301 00003724 0F82FDFEFFFF jb .synth_channel_lop 5302 0000372A F605[1C8C0000]10 test byte [cpuid_flags], 10h 5303 00003731 740E jz short .no_rdtsc_supported@@@@@ 5304 00003733 0F31 rdtsc 5305 00003735 0105[948D0000] add [rdtsc_synth_dct], eax 5306 0000373B 1115[988D0000] adc [rdtsc_synth_dct+4], edx 5307 5308 .no_rdtsc_supported@@@@@: 5309 00003741 C3 retn 5310 5311 5312 ; =============== S U B R O U T I N E ======================================= 5313 5314 5315 mp3_synth_filter_this_16bit_shift_0_fast: 5316 00003742 A1[A4B30000] mov eax, [mp3_curr_syn_index] 5317 00003747 A9E0010000 test eax, 1E0h ; 1FFh-1Fh 5318 0000374C 0F849C010000 jz .append_copy_to_window 5319 00003752 90 nop 5320 5321 .append_copy_to_window_back: 5322 00003753 89C5 mov ebp, eax 5323 00003755 81E5C0010000 and ebp, 1C0h ; @win1,1FFh-1Fh-20h 5324 0000375B 2520040000 and eax, 420h ; and eax,20h+(1 shl 10) ; bit5 and channel 5325 00003760 8D7010 lea esi, [eax+10h] ; @@syn1,[eax+10h] 5326 00003763 8D7830 lea edi, [eax+30h] ; @@syn2,[eax+30h] 5327 00003766 F7DD neg ebp 5328 00003768 81E5C0010000 and ebp, 1C0h ; @win1,1FFh-1Fh-20h 5329 0000376E 8B0D[A8B30000] mov ecx, [mp3_curr_syn_dst] ; @@dst,dword ptr [mp3_curr_syn_dst] 5330 5331 .samples_lop: 5332 00003774 BB00200020 mov ebx, 20002000h ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 5333 ; @@out_shift equ (OUT_SHIFT_fast+(8*force_8bit)) 5334 ; out_shift = 14 5335 00003779 8B14B5[C0B30000] mov edx, [mp3_synth_buf+esi*4] ; @@SUM8 macro sum,win,ww,syn 5336 ; @@SUM8 @@sum,@@win1,0,@@syn1 5337 ; IRP nn,0,1,2,3,4,5,6,7 5338 ; mov edx,dword ptr [mp3_synth_buf+syn*4+(nn*64*4)] 5339 ; movsx eax,word ptr [mp3_synth_win+win*2+(nn*64*2)+ww*2] 5340 ; imul eax,edx 5341 ; add sum,eax 5342 00003780 0FBF842D[78050500] movsx eax, word [mp3_synth_win+ebp*2] ; nn=0, ww=0 5343 00003788 0FAFC2 imul eax, edx 5344 0000378B 01C3 add ebx, eax 5345 0000378D 8B14B5[C0B40000] mov edx, [(mp3_synth_buf+100h)+esi*4] 5346 00003794 0FBF842D[F8050500] movsx eax, word [(mp3_synth_win+80h)+ebp*2] ; nn=1, ww=0 5347 0000379C 0FAFC2 imul eax, edx 5348 0000379F 01C3 add ebx, eax 5349 000037A1 8B14B5[C0B50000] mov edx, [(mp3_synth_buf+200h)+esi*4] 5350 000037A8 0FBF842D[78060500] movsx eax, word [(mp3_synth_win+100h)+ebp*2] ; nn=2 5351 000037B0 0FAFC2 imul eax, edx 5352 000037B3 01C3 add ebx, eax 5353 000037B5 8B14B5[C0B60000] mov edx, [(mp3_synth_buf+300h)+esi*4] 5354 000037BC 0FBF842D[F8060500] movsx eax, word [(mp3_synth_win+180h)+ebp*2] ; nn=3 5355 000037C4 0FAFC2 imul eax, edx 5356 000037C7 01C3 add ebx, eax 5357 000037C9 8B14B5[C0B70000] mov edx, [(mp3_synth_buf+400h)+esi*4] 5358 000037D0 0FBF842D[78070500] movsx eax, word [(mp3_synth_win+200h)+ebp*2] ; nn=4 5359 000037D8 0FAFC2 imul eax, edx 5360 000037DB 01C3 add ebx, eax 5361 000037DD 8B14B5[C0B80000] mov edx, [(mp3_synth_buf+500h)+esi*4] 5362 000037E4 0FBF842D[F8070500] movsx eax, word [(mp3_synth_win+280h)+ebp*2] ; nn=5 5363 000037EC 0FAFC2 imul eax, edx 5364 000037EF 01C3 add ebx, eax 5365 000037F1 8B14B5[C0B90000] mov edx, [(mp3_synth_buf+600h)+esi*4] 5366 000037F8 0FBF842D[78080500] movsx eax, word [(mp3_synth_win+300h)+ebp*2] ; nn=6 5367 00003800 0FAFC2 imul eax, edx 5368 00003803 01C3 add ebx, eax 5369 00003805 8B14B5[C0BA0000] mov edx, [(mp3_synth_buf+700h)+esi*4] 5370 0000380C 0FBF842D[F8080500] movsx eax, word [(mp3_synth_win+380h)+ebp*2] ; nn=7 5371 00003814 0FAFC2 imul eax, edx 5372 00003817 01C3 add ebx, eax 5373 00003819 8B14BD[C0B30000] mov edx, [mp3_synth_buf+edi*4] ; @@SUM8 @@sum,@@win1,32, @@syn2 5374 00003820 0FBF842D[B8050500] movsx eax, word [(mp3_synth_win+40h)+ebp*2] ; nn=0, ww=32 5375 00003828 0FAFC2 imul eax, edx 5376 0000382B 01C3 add ebx, eax 5377 0000382D 8B14BD[C0B40000] mov edx, [(mp3_synth_buf+100h)+edi*4] 5378 00003834 0FBF842D[38060500] movsx eax, word [(mp3_synth_win+0C0h)+ebp*2] ; nn=1, ww=32 5379 0000383C 0FAFC2 imul eax, edx 5380 0000383F 01C3 add ebx, eax 5381 00003841 8B14BD[C0B50000] mov edx, [(mp3_synth_buf+200h)+edi*4] 5382 00003848 0FBF842D[B8060500] movsx eax, word [(mp3_synth_win+140h)+ebp*2] ; nn=2 5383 00003850 0FAFC2 imul eax, edx 5384 00003853 01C3 add ebx, eax 5385 00003855 8B14BD[C0B60000] mov edx, [(mp3_synth_buf+300h)+edi*4] 5386 0000385C 0FBF842D[38070500] movsx eax, word [(mp3_synth_win+1C0h)+ebp*2] ; nn=3 5387 00003864 0FAFC2 imul eax, edx 5388 00003867 01C3 add ebx, eax 5389 00003869 8B14BD[C0B70000] mov edx, [(mp3_synth_buf+400h)+edi*4] 5390 00003870 0FBF842D[B8070500] movsx eax, word [(mp3_synth_win+240h)+ebp*2] ; nn=4 5391 00003878 0FAFC2 imul eax, edx 5392 0000387B 01C3 add ebx, eax 5393 0000387D 8B14BD[C0B80000] mov edx, [(mp3_synth_buf+500h)+edi*4] 5394 00003884 0FBF842D[38080500] movsx eax, word [(mp3_synth_win+2C0h)+ebp*2] ; nn=5 5395 0000388C 0FAFC2 imul eax, edx 5396 0000388F 01C3 add ebx, eax 5397 00003891 8B14BD[C0B90000] mov edx, [(mp3_synth_buf+600h)+edi*4] 5398 00003898 0FBF842D[B8080500] movsx eax, word [(mp3_synth_win+340h)+ebp*2] ; nn=6 5399 000038A0 0FAFC2 imul eax, edx 5400 000038A3 01C3 add ebx, eax 5401 000038A5 8B14BD[C0BA0000] mov edx, [(mp3_synth_buf+700h)+edi*4] 5402 000038AC 0FBF842D[38090500] movsx eax, word [(mp3_synth_win+3C0h)+ebp*2] ; nn=7 5403 000038B4 0FAFC2 imul eax, edx 5404 000038B7 01C3 add ebx, eax 5405 000038B9 81FB00000040 cmp ebx, 40000000h ; cmp @@sum,10000h SHL (@@out_shift) ; out_shift = 14 5406 000038BF 7322 jnb short .sat 5407 000038C1 C1FB0E sar ebx, 14 ; sar @@sum,(@@out_shift) 5408 000038C4 81EB00800000 sub ebx, 8000h ; sub @@sum,8000h ; make 16bit signed 5409 5410 .sat_back: 5411 000038CA 668919 mov [ecx], bx ; mov word ptr [@@dst],@@sum_16bit 5412 000038CD 030D[640A0100] add ecx, [mp3_samples_dst_step] 5413 000038D3 46 inc esi ; inc @@syn1 5414 000038D4 4F dec edi ; dec @@syn2 5415 000038D5 45 inc ebp ; inc @@win1 5416 000038D6 F7C51F000000 test ebp, 1Fh ; IF LONG_WINDOW 5417 000038DC 0F8592FEFFFF jnz .samples_lop ; test @@win1,1Fh 5418 000038E2 C3 retn 5419 5420 .sat: 5421 000038E3 C1FB1F sar ebx, 31 ; sar @@sum,31 ; FFFFFFFFh,00000000h 5422 000038E6 81F3FF7F0000 xor ebx, 7FFFh ; xor @@sum,7fffh ; FFFF8000h,00007FFFh (signed 16bit) 5423 000038EC EBDC jmp short .sat_back 5424 5425 .append_copy_to_window: 5426 000038EE 8D3485[C0B30000] lea esi, [mp3_synth_buf+eax*4] ; IF SYNTH32 5427 000038F5 8DBE00080000 lea edi, [esi+2048] ; [esi+512*4] 5428 000038FB B912000000 mov ecx, 18 ; (12h*4)/4 5429 00003900 F3A5 rep movsd 5430 00003902 E94CFEFFFF jmp .append_copy_to_window_back 5431 5432 5433 ; =============== S U B R O U T I N E ======================================= 5434 5435 5436 synth_16bit_shift_1_fast: 5437 00003907 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 0,1,1 5438 0000390E 740E jz short .no_rdtsc_supported 5439 00003910 0F31 rdtsc 5440 00003912 2905[948D0000] sub [rdtsc_synth_dct], eax 5441 00003918 1915[988D0000] sbb [rdtsc_synth_dct+4], edx 5442 5443 .no_rdtsc_supported: 5444 0000391E BE[C8D30000] mov esi, mp3_sb_samples 5445 00003923 8B3D[5C0A0100] mov edi, [mp3_samples_dst] 5446 00003929 C705[680A0100]0000- mov dword [mp3_curr_channel], 0 5446 00003931 0000 5447 5448 .synth_channel_lop: 5449 00003933 56 push esi 5450 00003934 57 push edi 5451 00003935 893D[A8B30000] mov [mp3_curr_syn_dst], edi 5452 0000393B C705[700A0100]0000- mov dword [mp3_curr_frame], 0 5452 00003943 0000 5453 5454 .synth_frame_lop: 5455 00003945 56 push esi 5456 00003946 F605[1C8C0000]10 test byte [cpuid_flags], 10h 5457 0000394D 740E jz short .no_rdtsc_supported@ 5458 0000394F 0F31 rdtsc 5459 00003951 2905[AC8D0000] sub [rdtsc_dct32], eax 5460 00003957 1915[B08D0000] sbb [rdtsc_dct32+4], edx 5461 5462 .no_rdtsc_supported@: 5463 0000395D 8B15[680A0100] mov edx, [mp3_curr_channel] 5464 00003963 8B0495[C0D30000] mov eax, [mp3_synth_index+edx*4] 5465 0000396A 832C95[C0D30000]20 sub dword [mp3_synth_index+edx*4], 32 5466 00003972 C1E20A shl edx, 10 5467 00003975 25E0010000 and eax, 1E0h ; 1FFh-1Fh 5468 0000397A 09D0 or eax, edx 5469 0000397C A3[A4B30000] mov [mp3_curr_syn_index], eax 5470 00003981 8B3D[A4B30000] mov edi, [mp3_curr_syn_index] 5471 00003987 8D3CBD[C0B30000] lea edi, [mp3_synth_buf+edi*4] 5472 0000398E E877F5FFFF call mp3_dct32_shift_1 ; mp3_dct32_shift_&rate_shift 5473 00003993 F605[1C8C0000]10 test byte [cpuid_flags], 10h 5474 0000399A 740E jz short .no_rdtsc_supported@@ 5475 0000399C 0F31 rdtsc 5476 0000399E 0105[AC8D0000] add [rdtsc_dct32], eax 5477 000039A4 1115[B08D0000] adc [rdtsc_dct32+4], edx 5478 5479 .no_rdtsc_supported@@: 5480 000039AA F605[1C8C0000]10 test byte [cpuid_flags], 10h 5481 000039B1 740E jz short .no_rdtsc_supported@@@ 5482 000039B3 0F31 rdtsc 5483 000039B5 2905[C48D0000] sub [rdtsc_synth], eax 5484 000039BB 1915[C88D0000] sbb [rdtsc_synth+4], edx 5485 5486 .no_rdtsc_supported@@@: 5487 000039C1 E888000000 call mp3_synth_filter_this_16bit_shift_1_fast ; 5488 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 5489 000039C6 F605[1C8C0000]10 test byte [cpuid_flags], 10h 5490 000039CD 740E jz short .no_rdtsc_supported@@@@ 5491 000039CF 0F31 rdtsc 5492 000039D1 0105[C48D0000] add [rdtsc_synth], eax 5493 000039D7 1115[C88D0000] adc [rdtsc_synth+4], edx 5494 5495 .no_rdtsc_supported@@@@: 5496 000039DD 5E pop esi 5497 000039DE A1[640A0100] mov eax, [mp3_samples_dst_step] 5498 000039E3 C1E005 shl eax, 5 5499 000039E6 8A0D[178C0000] mov cl, [option_rate_shift] 5500 000039EC D3E8 shr eax, cl 5501 000039EE 0105[A8B30000] add [mp3_curr_syn_dst], eax 5502 000039F4 81C680000000 add esi, 128 ; SBLIMIT*4 5503 000039FA FF05[700A0100] inc dword [mp3_curr_frame] 5504 00003A00 A1[700A0100] mov eax, [mp3_curr_frame] 5505 00003A05 3B05[ACB30000] cmp eax, [mp3_nb_frames] 5506 00003A0B 0F8234FFFFFF jb .synth_frame_lop 5507 00003A11 5F pop edi 5508 00003A12 5E pop esi 5509 00003A13 033D[A0B30000] add edi, [mp3_bytes_per_sample] 5510 00003A19 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 5511 00003A1F FF05[680A0100] inc dword [mp3_curr_channel] 5512 00003A25 A1[680A0100] mov eax, [mp3_curr_channel] 5513 00003A2A 3B05[98B30000] cmp eax, [mp3_output_num_channels] 5514 00003A30 0F82FDFEFFFF jb .synth_channel_lop 5515 00003A36 F605[1C8C0000]10 test byte [cpuid_flags], 10h 5516 00003A3D 740E jz short .no_rdtsc_supported@@@@@ 5517 00003A3F 0F31 rdtsc 5518 00003A41 0105[948D0000] add [rdtsc_synth_dct], eax 5519 00003A47 1115[988D0000] adc [rdtsc_synth_dct+4], edx 5520 5521 .no_rdtsc_supported@@@@@: 5522 00003A4D C3 retn 5523 5524 5525 ; =============== S U B R O U T I N E ======================================= 5526 5527 5528 mp3_synth_filter_this_16bit_shift_1_fast: 5529 00003A4E A1[A4B30000] mov eax, [mp3_curr_syn_index] 5530 00003A53 A9E0010000 test eax, 1E0h ; 1FFh-1Fh 5531 00003A58 0F84A2010000 jz .append_copy_to_window 5532 00003A5E 90 nop 5533 5534 .append_copy_to_window_back: 5535 00003A5F 89C5 mov ebp, eax 5536 00003A61 81E5C0010000 and ebp, 1C0h 5537 00003A67 2520040000 and eax, 420h 5538 00003A6C 8D7010 lea esi, [eax+10h] 5539 00003A6F 8D7830 lea edi, [eax+30h] 5540 00003A72 F7DD neg ebp 5541 00003A74 81E5C0010000 and ebp, 1C0h 5542 00003A7A 8B0D[A8B30000] mov ecx, [mp3_curr_syn_dst] 5543 5544 .samples_lop: 5545 00003A80 BB00200020 mov ebx, 20002000h ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 5546 ; @@out_shift equ (OUT_SHIFT_fast+(8*force_8bit)) 5547 ; out_shift = 14 5548 00003A85 8B14B5[C0B30000] mov edx, [mp3_synth_buf+esi*4] ; @@SUM8 macro sum,win,ww,syn 5549 ; @@SUM8 @@sum,@@win1,0,@@syn1 5550 ; IRP nn,0,1,2,3,4,5,6,7 5551 ; mov edx,dword ptr [mp3_synth_buf+syn*4+(nn*64*4)] 5552 ; movsx eax,word ptr [mp3_synth_win+win*2+(nn*64*2)+ww*2] 5553 ; imul eax,edx 5554 ; add sum,eax 5555 00003A8C 0FBF842D[78050500] movsx eax, word [mp3_synth_win+ebp*2] 5556 00003A94 0FAFC2 imul eax, edx 5557 00003A97 01C3 add ebx, eax 5558 00003A99 8B14B5[C0B40000] mov edx, [(mp3_synth_buf+100h)+esi*4] ; nn=1 5559 00003AA0 0FBF842D[F8050500] movsx eax, word [(mp3_synth_win+80h)+ebp*2] ; ww=0 5560 00003AA8 0FAFC2 imul eax, edx 5561 00003AAB 01C3 add ebx, eax 5562 00003AAD 8B14B5[C0B50000] mov edx, [(mp3_synth_buf+200h)+esi*4] 5563 00003AB4 0FBF842D[78060500] movsx eax, word [(mp3_synth_win+100h)+ebp*2] 5564 00003ABC 0FAFC2 imul eax, edx 5565 00003ABF 01C3 add ebx, eax 5566 00003AC1 8B14B5[C0B60000] mov edx, [(mp3_synth_buf+300h)+esi*4] 5567 00003AC8 0FBF842D[F8060500] movsx eax, word [(mp3_synth_win+180h)+ebp*2] 5568 00003AD0 0FAFC2 imul eax, edx 5569 00003AD3 01C3 add ebx, eax 5570 00003AD5 8B14B5[C0B70000] mov edx, [(mp3_synth_buf+400h)+esi*4] ; nn=4 5571 00003ADC 0FBF842D[78070500] movsx eax, word [(mp3_synth_win+200h)+ebp*2] 5572 00003AE4 0FAFC2 imul eax, edx 5573 00003AE7 01C3 add ebx, eax 5574 00003AE9 8B14B5[C0B80000] mov edx, [(mp3_synth_buf+500h)+esi*4] 5575 00003AF0 0FBF842D[F8070500] movsx eax, word [(mp3_synth_win+280h)+ebp*2] 5576 00003AF8 0FAFC2 imul eax, edx 5577 00003AFB 01C3 add ebx, eax 5578 00003AFD 8B14B5[C0B90000] mov edx, [(mp3_synth_buf+600h)+esi*4] 5579 00003B04 0FBF842D[78080500] movsx eax, word [(mp3_synth_win+300h)+ebp*2] 5580 00003B0C 0FAFC2 imul eax, edx 5581 00003B0F 01C3 add ebx, eax 5582 00003B11 8B14B5[C0BA0000] mov edx, [(mp3_synth_buf+700h)+esi*4] ; nn=7 5583 00003B18 0FBF842D[F8080500] movsx eax, word [(mp3_synth_win+380h)+ebp*2] ; ww=0 5584 00003B20 0FAFC2 imul eax, edx 5585 00003B23 01C3 add ebx, eax 5586 00003B25 8B14BD[C0B30000] mov edx, [mp3_synth_buf+edi*4] 5587 00003B2C 0FBF842D[B8050500] movsx eax, word [(mp3_synth_win+40h)+ebp*2] 5588 00003B34 0FAFC2 imul eax, edx 5589 00003B37 01C3 add ebx, eax 5590 00003B39 8B14BD[C0B40000] mov edx, [(mp3_synth_buf+100h)+edi*4] 5591 00003B40 0FBF842D[38060500] movsx eax, word [(mp3_synth_win+0C0h)+ebp*2] 5592 00003B48 0FAFC2 imul eax, edx 5593 00003B4B 01C3 add ebx, eax 5594 00003B4D 8B14BD[C0B50000] mov edx, [(mp3_synth_buf+200h)+edi*4] ; nn=2, ww=32 5595 00003B54 0FBF842D[B8060500] movsx eax, word [(mp3_synth_win+140h)+ebp*2] 5596 00003B5C 0FAFC2 imul eax, edx 5597 00003B5F 01C3 add ebx, eax 5598 00003B61 8B14BD[C0B60000] mov edx, [(mp3_synth_buf+300h)+edi*4] 5599 00003B68 0FBF842D[38070500] movsx eax, word [(mp3_synth_win+1C0h)+ebp*2] 5600 00003B70 0FAFC2 imul eax, edx 5601 00003B73 01C3 add ebx, eax 5602 00003B75 8B14BD[C0B70000] mov edx, [(mp3_synth_buf+400h)+edi*4] 5603 00003B7C 0FBF842D[B8070500] movsx eax, word [(mp3_synth_win+240h)+ebp*2] 5604 00003B84 0FAFC2 imul eax, edx 5605 00003B87 01C3 add ebx, eax 5606 00003B89 8B14BD[C0B80000] mov edx, [(mp3_synth_buf+500h)+edi*4] 5607 00003B90 0FBF842D[38080500] movsx eax, word [(mp3_synth_win+2C0h)+ebp*2] 5608 00003B98 0FAFC2 imul eax, edx 5609 00003B9B 01C3 add ebx, eax 5610 00003B9D 8B14BD[C0B90000] mov edx, [(mp3_synth_buf+600h)+edi*4] ; nn=6, ww=32 5611 00003BA4 0FBF842D[B8080500] movsx eax, word [(mp3_synth_win+340h)+ebp*2] 5612 00003BAC 0FAFC2 imul eax, edx 5613 00003BAF 01C3 add ebx, eax 5614 00003BB1 8B14BD[C0BA0000] mov edx, [(mp3_synth_buf+700h)+edi*4] 5615 00003BB8 0FBF842D[38090500] movsx eax, word [(mp3_synth_win+3C0h)+ebp*2] 5616 00003BC0 0FAFC2 imul eax, edx 5617 00003BC3 01C3 add ebx, eax 5618 00003BC5 81FB00000040 cmp ebx, 40000000h ; cmp @@sum,10000h SHL (@@out_shift) 5619 00003BCB 7328 jnb short .sat 5620 00003BCD C1FB0E sar ebx, 14 ; sar @@sum,(@@out_shift) 5621 00003BD0 81EB00800000 sub ebx, 8000h ; make 16bit signed 5622 5623 .sat_back: 5624 00003BD6 668919 mov [ecx], bx 5625 00003BD9 030D[640A0100] add ecx, [mp3_samples_dst_step] 5626 00003BDF 83C602 add esi, 2 ; IF rate_shift 5627 ; add @@syn1,1 shl rate_shift 5628 00003BE2 83EF02 sub edi, 2 ; sub @@syn2,1 shl rate_shift 5629 00003BE5 83C502 add ebp, 2 ; add @@win1,1 shl rate_shift 5630 00003BE8 F7C51F000000 test ebp, 1Fh ; IF LONG_WINDOW 5631 00003BEE 0F858CFEFFFF jnz .samples_lop ; test @@win1,1fh 5632 00003BF4 C3 retn 5633 5634 .sat: 5635 00003BF5 C1FB1F sar ebx, 31 ; sar @@sum,31 ; FFFFFFFFh,00000000h 5636 00003BF8 81F3FF7F0000 xor ebx, 7FFFh ; xor @@sum,7fffh ; FFFF8000h,00007FFFh (signed 16bit) 5637 00003BFE EBD6 jmp short .sat_back 5638 5639 .append_copy_to_window: 5640 00003C00 8D3485[C0B30000] lea esi, [mp3_synth_buf+eax*4] 5641 00003C07 8DBE00080000 lea edi, [esi+2048] ; [esi+512*4] 5642 00003C0D B912000000 mov ecx, 18 ; (12h*4)/4 5643 00003C12 F3A5 rep movsd 5644 00003C14 E946FEFFFF jmp .append_copy_to_window_back 5645 5646 5647 ; =============== S U B R O U T I N E ======================================= 5648 5649 5650 synth_16bit_shift_2_fast: 5651 00003C19 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 0,2,1 5652 00003C20 740E jz short .no_rdtsc_supported 5653 00003C22 0F31 rdtsc 5654 00003C24 2905[948D0000] sub [rdtsc_synth_dct], eax 5655 00003C2A 1915[988D0000] sbb [rdtsc_synth_dct+4], edx 5656 5657 .no_rdtsc_supported: 5658 00003C30 BE[C8D30000] mov esi, mp3_sb_samples 5659 00003C35 8B3D[5C0A0100] mov edi, [mp3_samples_dst] 5660 00003C3B C705[680A0100]0000- mov dword [mp3_curr_channel], 0 5660 00003C43 0000 5661 5662 .synth_channel_lop: 5663 00003C45 56 push esi 5664 00003C46 57 push edi 5665 00003C47 893D[A8B30000] mov [mp3_curr_syn_dst], edi 5666 00003C4D C705[700A0100]0000- mov dword [mp3_curr_frame], 0 5666 00003C55 0000 5667 5668 .synth_frame_lop: 5669 00003C57 56 push esi 5670 00003C58 F605[1C8C0000]10 test byte [cpuid_flags], 10h 5671 00003C5F 740E jz short .no_rdtsc_supported@ 5672 00003C61 0F31 rdtsc 5673 00003C63 2905[AC8D0000] sub [rdtsc_dct32], eax 5674 00003C69 1915[B08D0000] sbb [rdtsc_dct32+4], edx 5675 5676 .no_rdtsc_supported@: 5677 00003C6F 8B15[680A0100] mov edx, [mp3_curr_channel] 5678 00003C75 8B0495[C0D30000] mov eax, [mp3_synth_index+edx*4] 5679 00003C7C 832C95[C0D30000]20 sub dword [mp3_synth_index+edx*4], 32 5680 00003C84 C1E20A shl edx, 10 5681 00003C87 25E0010000 and eax, 1E0h ; 1FFh-1Fh 5682 00003C8C 09D0 or eax, edx 5683 00003C8E A3[A4B30000] mov [mp3_curr_syn_index], eax 5684 00003C93 8B3D[A4B30000] mov edi, [mp3_curr_syn_index] 5685 00003C99 8D3CBD[C0B30000] lea edi, [mp3_synth_buf+edi*4] 5686 00003CA0 E855F6FFFF call mp3_dct32_shift_2 ; mp3_dct32_shift_&rate_shift 5687 00003CA5 F605[1C8C0000]10 test byte [cpuid_flags], 10h 5688 00003CAC 740E jz short .no_rdtsc_supported@@ 5689 00003CAE 0F31 rdtsc 5690 00003CB0 0105[AC8D0000] add [rdtsc_dct32], eax 5691 00003CB6 1115[B08D0000] adc [rdtsc_dct32+4], edx 5692 5693 .no_rdtsc_supported@@: 5694 00003CBC F605[1C8C0000]10 test byte [cpuid_flags], 10h 5695 00003CC3 740E jz short .no_rdtsc_supported@@@ 5696 00003CC5 0F31 rdtsc 5697 00003CC7 2905[C48D0000] sub [rdtsc_synth], eax 5698 00003CCD 1915[C88D0000] sbb [rdtsc_synth+4], edx 5699 5700 .no_rdtsc_supported@@@: 5701 00003CD3 E888000000 call mp3_synth_filter_this_16bit_shift_2_fast ; 5702 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fas 5703 00003CD8 F605[1C8C0000]10 test byte [cpuid_flags], 10h 5704 00003CDF 740E jz short .no_rdtsc_supported@@@@ 5705 00003CE1 0F31 rdtsc 5706 00003CE3 0105[C48D0000] add [rdtsc_synth], eax 5707 00003CE9 1115[C88D0000] adc [rdtsc_synth+4], edx 5708 5709 .no_rdtsc_supported@@@@: 5710 00003CEF 5E pop esi 5711 00003CF0 A1[640A0100] mov eax, [mp3_samples_dst_step] 5712 00003CF5 C1E005 shl eax, 5 5713 00003CF8 8A0D[178C0000] mov cl, [option_rate_shift] 5714 00003CFE D3E8 shr eax, cl 5715 00003D00 0105[A8B30000] add [mp3_curr_syn_dst], eax 5716 00003D06 81C680000000 add esi, 128 ; SBLIMIT*4 5717 00003D0C FF05[700A0100] inc dword [mp3_curr_frame] 5718 00003D12 A1[700A0100] mov eax, [mp3_curr_frame] 5719 00003D17 3B05[ACB30000] cmp eax, [mp3_nb_frames] 5720 00003D1D 0F8234FFFFFF jb .synth_frame_lop 5721 00003D23 5F pop edi 5722 00003D24 5E pop esi 5723 00003D25 033D[A0B30000] add edi, [mp3_bytes_per_sample] 5724 00003D2B 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 5725 00003D31 FF05[680A0100] inc dword [mp3_curr_channel] 5726 00003D37 A1[680A0100] mov eax, [mp3_curr_channel] 5727 00003D3C 3B05[98B30000] cmp eax, [mp3_output_num_channels] 5728 00003D42 0F82FDFEFFFF jb .synth_channel_lop 5729 00003D48 F605[1C8C0000]10 test byte [cpuid_flags], 10h 5730 00003D4F 740E jz short .no_rdtsc_supported@@@@@ 5731 00003D51 0F31 rdtsc 5732 00003D53 0105[948D0000] add [rdtsc_synth_dct], eax 5733 00003D59 1115[988D0000] adc [rdtsc_synth_dct+4], edx 5734 5735 .no_rdtsc_supported@@@@@: 5736 00003D5F C3 retn 5737 5738 5739 ; =============== S U B R O U T I N E ======================================= 5740 5741 5742 mp3_synth_filter_this_16bit_shift_2_fast: 5743 00003D60 A1[A4B30000] mov eax, [mp3_curr_syn_index] 5744 00003D65 A9E0010000 test eax, 1E0h ; 1FFh-1Fh 5745 00003D6A 0F84A2010000 jz .append_copy_to_window 5746 00003D70 90 nop 5747 5748 .append_copy_to_window_back: 5749 00003D71 89C5 mov ebp, eax 5750 00003D73 81E5C0010000 and ebp, 1C0h ; 1FFh-1Fh-20h 5751 00003D79 2520040000 and eax, 420h ; 20h+(1 shl 10) 5752 00003D7E 8D7010 lea esi, [eax+10h] 5753 00003D81 8D7830 lea edi, [eax+30h] 5754 00003D84 F7DD neg ebp 5755 00003D86 81E5C0010000 and ebp, 1C0h 5756 00003D8C 8B0D[A8B30000] mov ecx, [mp3_curr_syn_dst] 5757 5758 .samples_lop: 5759 00003D92 BB00200020 mov ebx, 20002000h ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 5760 ; @@out_shift equ (OUT_SHIFT_fast+(8*force_8bit)) 5761 ; out_shift = 14 5762 00003D97 8B14B5[C0B30000] mov edx, [mp3_synth_buf+esi*4] 5763 00003D9E 0FBF842D[78050500] movsx eax, word [mp3_synth_win+ebp*2] 5764 00003DA6 0FAFC2 imul eax, edx 5765 00003DA9 01C3 add ebx, eax 5766 00003DAB 8B14B5[C0B40000] mov edx, [(mp3_synth_buf+100h)+esi*4] 5767 00003DB2 0FBF842D[F8050500] movsx eax, word [(mp3_synth_win+80h)+ebp*2] 5768 00003DBA 0FAFC2 imul eax, edx 5769 00003DBD 01C3 add ebx, eax 5770 00003DBF 8B14B5[C0B50000] mov edx, [(mp3_synth_buf+200h)+esi*4] 5771 00003DC6 0FBF842D[78060500] movsx eax, word [(mp3_synth_win+100h)+ebp*2] 5772 00003DCE 0FAFC2 imul eax, edx 5773 00003DD1 01C3 add ebx, eax 5774 00003DD3 8B14B5[C0B60000] mov edx, [(mp3_synth_buf+300h)+esi*4] 5775 00003DDA 0FBF842D[F8060500] movsx eax, word [(mp3_synth_win+180h)+ebp*2] 5776 00003DE2 0FAFC2 imul eax, edx 5777 00003DE5 01C3 add ebx, eax 5778 00003DE7 8B14B5[C0B70000] mov edx, [(mp3_synth_buf+400h)+esi*4] 5779 00003DEE 0FBF842D[78070500] movsx eax, word [(mp3_synth_win+200h)+ebp*2] 5780 00003DF6 0FAFC2 imul eax, edx 5781 00003DF9 01C3 add ebx, eax 5782 00003DFB 8B14B5[C0B80000] mov edx, [(mp3_synth_buf+500h)+esi*4] 5783 00003E02 0FBF842D[F8070500] movsx eax, word [(mp3_synth_win+280h)+ebp*2] 5784 00003E0A 0FAFC2 imul eax, edx 5785 00003E0D 01C3 add ebx, eax 5786 00003E0F 8B14B5[C0B90000] mov edx, [(mp3_synth_buf+600h)+esi*4] 5787 00003E16 0FBF842D[78080500] movsx eax, word [(mp3_synth_win+300h)+ebp*2] 5788 00003E1E 0FAFC2 imul eax, edx 5789 00003E21 01C3 add ebx, eax 5790 00003E23 8B14B5[C0BA0000] mov edx, [(mp3_synth_buf+700h)+esi*4] 5791 00003E2A 0FBF842D[F8080500] movsx eax, word [(mp3_synth_win+380h)+ebp*2] 5792 00003E32 0FAFC2 imul eax, edx 5793 00003E35 01C3 add ebx, eax 5794 00003E37 8B14BD[C0B30000] mov edx, [mp3_synth_buf+edi*4] 5795 00003E3E 0FBF842D[B8050500] movsx eax, word [(mp3_synth_win+40h)+ebp*2] 5796 00003E46 0FAFC2 imul eax, edx 5797 00003E49 01C3 add ebx, eax 5798 00003E4B 8B14BD[C0B40000] mov edx, [(mp3_synth_buf+100h)+edi*4] 5799 00003E52 0FBF842D[38060500] movsx eax, word [(mp3_synth_win+0C0h)+ebp*2] 5800 00003E5A 0FAFC2 imul eax, edx 5801 00003E5D 01C3 add ebx, eax 5802 00003E5F 8B14BD[C0B50000] mov edx, [(mp3_synth_buf+200h)+edi*4] 5803 00003E66 0FBF842D[B8060500] movsx eax, word [(mp3_synth_win+140h)+ebp*2] 5804 00003E6E 0FAFC2 imul eax, edx 5805 00003E71 01C3 add ebx, eax 5806 00003E73 8B14BD[C0B60000] mov edx, [(mp3_synth_buf+300h)+edi*4] 5807 00003E7A 0FBF842D[38070500] movsx eax, word [(mp3_synth_win+1C0h)+ebp*2] 5808 00003E82 0FAFC2 imul eax, edx 5809 00003E85 01C3 add ebx, eax 5810 00003E87 8B14BD[C0B70000] mov edx, [(mp3_synth_buf+400h)+edi*4] 5811 00003E8E 0FBF842D[B8070500] movsx eax, word [(mp3_synth_win+240h)+ebp*2] 5812 00003E96 0FAFC2 imul eax, edx 5813 00003E99 01C3 add ebx, eax 5814 00003E9B 8B14BD[C0B80000] mov edx, [(mp3_synth_buf+500h)+edi*4] 5815 00003EA2 0FBF842D[38080500] movsx eax, word [(mp3_synth_win+2C0h)+ebp*2] 5816 00003EAA 0FAFC2 imul eax, edx 5817 00003EAD 01C3 add ebx, eax 5818 00003EAF 8B14BD[C0B90000] mov edx, [(mp3_synth_buf+600h)+edi*4] 5819 00003EB6 0FBF842D[B8080500] movsx eax, word [(mp3_synth_win+340h)+ebp*2] 5820 00003EBE 0FAFC2 imul eax, edx 5821 00003EC1 01C3 add ebx, eax 5822 00003EC3 8B14BD[C0BA0000] mov edx, [(mp3_synth_buf+700h)+edi*4] 5823 00003ECA 0FBF842D[38090500] movsx eax, word [(mp3_synth_win+3C0h)+ebp*2] 5824 00003ED2 0FAFC2 imul eax, edx 5825 00003ED5 01C3 add ebx, eax 5826 00003ED7 81FB00000040 cmp ebx, 40000000h 5827 00003EDD 7328 jnb short .sat 5828 00003EDF C1FB0E sar ebx, 14 5829 00003EE2 81EB00800000 sub ebx, 8000h ; make 16bit signed 5830 5831 .sat_back: 5832 00003EE8 668919 mov [ecx], bx 5833 00003EEB 030D[640A0100] add ecx, [mp3_samples_dst_step] 5834 00003EF1 83C604 add esi, 4 5835 00003EF4 83EF04 sub edi, 4 5836 00003EF7 83C504 add ebp, 4 5837 00003EFA F7C51F000000 test ebp, 1Fh 5838 00003F00 0F858CFEFFFF jnz .samples_lop 5839 00003F06 C3 retn 5840 5841 .sat: 5842 00003F07 C1FB1F sar ebx, 31 5843 00003F0A 81F3FF7F0000 xor ebx, 7FFFh 5844 00003F10 EBD6 jmp short .sat_back 5845 5846 .append_copy_to_window: 5847 00003F12 8D3485[C0B30000] lea esi, [mp3_synth_buf+eax*4] 5848 00003F19 8DBE00080000 lea edi, [esi+2048] 5849 00003F1F B912000000 mov ecx, 18 5850 00003F24 F3A5 rep movsd 5851 00003F26 E946FEFFFF jmp .append_copy_to_window_back 5852 5853 5854 ; =============== S U B R O U T I N E ======================================= 5855 5856 5857 synth_8bit_shift_0_fast: 5858 00003F2B F605[1C8C0000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 1,0,1 5859 00003F32 740E jz short .no_rdtsc_supported 5860 00003F34 0F31 rdtsc 5861 00003F36 2905[948D0000] sub [rdtsc_synth_dct], eax 5862 00003F3C 1915[988D0000] sbb [rdtsc_synth_dct+4], edx 5863 5864 .no_rdtsc_supported: 5865 00003F42 BE[C8D30000] mov esi, mp3_sb_samples 5866 00003F47 8B3D[5C0A0100] mov edi, [mp3_samples_dst] 5867 00003F4D C705[680A0100]0000- mov dword [mp3_curr_channel], 0 5867 00003F55 0000 5868 5869 .synth_channel_lop: 5870 00003F57 56 push esi 5871 00003F58 57 push edi 5872 00003F59 893D[A8B30000] mov [mp3_curr_syn_dst], edi 5873 00003F5F C705[700A0100]0000- mov dword [mp3_curr_frame], 0 5873 00003F67 0000 5874 5875 .synth_frame_lop: 5876 00003F69 56 push esi 5877 00003F6A F605[1C8C0000]10 test byte [cpuid_flags], 10h 5878 00003F71 740E jz short .no_rdtsc_supported@ 5879 00003F73 0F31 rdtsc 5880 00003F75 2905[AC8D0000] sub [rdtsc_dct32], eax 5881 00003F7B 1915[B08D0000] sbb [rdtsc_dct32+4], edx 5882 5883 .no_rdtsc_supported@: 5884 00003F81 8B15[680A0100] mov edx, [mp3_curr_channel] 5885 00003F87 8B0495[C0D30000] mov eax, [mp3_synth_index+edx*4] 5886 00003F8E 832C95[C0D30000]20 sub dword [mp3_synth_index+edx*4], 32 5887 00003F96 C1E20A shl edx, 10 5888 00003F99 25E0010000 and eax, 1E0h ; 1FFh-1Fh 5889 00003F9E 09D0 or eax, edx 5890 00003FA0 A3[A4B30000] mov [mp3_curr_syn_index], eax 5891 00003FA5 8B3D[A4B30000] mov edi, [mp3_curr_syn_index] 5892 00003FAB 8D3CBD[C0B30000] lea edi, [mp3_synth_buf+edi*4] 5893 00003FB2 E873E6FFFF call mp3_dct32_shift_0 ; mp3_dct32_shift_&rate_shift 5894 00003FB7 F605[1C8C0000]10 test byte [cpuid_flags], 10h 5895 00003FBE 740E jz short .no_rdtsc_supported@@ 5896 00003FC0 0F31 rdtsc 5897 00003FC2 0105[AC8D0000] add [rdtsc_dct32], eax 5898 00003FC8 1115[B08D0000] adc [rdtsc_dct32+4], edx 5899 5900 .no_rdtsc_supported@@: 5901 00003FCE F605[1C8C0000]10 test byte [cpuid_flags], 10h 5902 00003FD5 740E jz short .no_rdtsc_supported@@@ 5903 00003FD7 0F31 rdtsc 5904 00003FD9 2905[C48D0000] sub [rdtsc_synth], eax 5905 00003FDF 1915[C88D0000] sbb [rdtsc_synth+4], edx 5906 5907 .no_rdtsc_supported@@@: 5908 00003FE5 E888000000 call mp3_synth_filter_this_8bit_shift_0_fast ; 5909 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 5910 00003FEA F605[1C8C0000]10 test byte [cpuid_flags], 10h 5911 00003FF1 740E jz short .no_rdtsc_supported@@@@ 5912 00003FF3 0F31 rdtsc 5913 00003FF5 0105[C48D0000] add [rdtsc_synth], eax 5914 00003FFB 1115[C88D0000] adc [rdtsc_synth+4], edx 5915 5916 .no_rdtsc_supported@@@@: 5917 00004001 5E pop esi 5918 00004002 A1[640A0100] mov eax, [mp3_samples_dst_step] 5919 00004007 C1E005 shl eax, 5 5920 0000400A 8A0D[178C0000] mov cl, [option_rate_shift] 5921 00004010 D3E8 shr eax, cl 5922 00004012 0105[A8B30000] add [mp3_curr_syn_dst], eax 5923 00004018 81C680000000 add esi, 128 ; SBLIMIT*4 5924 0000401E FF05[700A0100] inc dword [mp3_curr_frame] 5925 00004024 A1[700A0100] mov eax, [mp3_curr_frame] 5926 00004029 3B05[ACB30000] cmp eax, [mp3_nb_frames] 5927 0000402F 0F8234FFFFFF jb .synth_frame_lop 5928 00004035 5F pop edi 5929 00004036 5E pop esi 5930 00004037 033D[A0B30000] add edi, [mp3_bytes_per_sample] 5931 0000403D 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 5932 00004043 FF05[680A0100] inc dword [mp3_curr_channel] 5933 00004049 A1[680A0100] mov eax, [mp3_curr_channel] 5934 0000404E 3B05[98B30000] cmp eax, [mp3_output_num_channels] 5935 00004054 0F82FDFEFFFF jb .synth_channel_lop 5936 0000405A F605[1C8C0000]10 test byte [cpuid_flags], 10h 5937 00004061 740E jz short .no_rdtsc_supported@@@@@ 5938 00004063 0F31 rdtsc 5939 00004065 0105[948D0000] add [rdtsc_synth_dct], eax 5940 0000406B 1115[988D0000] adc [rdtsc_synth_dct+4], edx 5941 5942 .no_rdtsc_supported@@@@@: 5943 00004071 C3 retn 5944 5945 5946 ; =============== S U B R O U T I N E ======================================= 5947 5948 5949 mp3_synth_filter_this_8bit_shift_0_fast: 5950 00004072 A1[A4B30000] mov eax, [mp3_curr_syn_index] 5951 00004077 A9E0010000 test eax, 1E0h ; 1FFh-1Fh 5952 0000407C 0F8491010000 jz .append_copy_to_window 5953 00004082 90 nop 5954 5955 .append_copy_to_window_back: 5956 00004083 89C5 mov ebp, eax 5957 00004085 81E5C0010000 and ebp, 1C0h ; 1FFh-1Fh-20h 5958 0000408B 2520040000 and eax, 420h ; 20h+(1 shl 10) 5959 00004090 8D7010 lea esi, [eax+10h] 5960 00004093 8D7830 lea edi, [eax+30h] 5961 00004096 F7DD neg ebp 5962 00004098 81E5C0010000 and ebp, 1C0h 5963 0000409E 8B0D[A8B30000] mov ecx, [mp3_curr_syn_dst] 5964 5965 .samples_lop: 5966 000040A4 BB00002020 mov ebx, 20200000h ; mov @@sum,(80h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 5967 ; @@out_shift equ (OUT_SHIFT_fast(8*force_8bit)) 5968 ; @@out_shift = 22 5969 000040A9 8B14B5[C0B30000] mov edx, [mp3_synth_buf+esi*4] ; @@SUM8 macro sum,win,ww,syn 5970 ; @@SUM8 @@sum,@@win1,0,@@syn1 5971 ; IRP nn,0,1,2,3,4,5,6,7 5972 ; mov edx,dword ptr [mp3_synth_buf+syn*4+(nn*64*4)] 5973 ; movsx eax,word ptr [mp3_synth_win+win*2+(nn*64*2)+ww*2] 5974 ; imul eax,edx 5975 ; add sum,eax 5976 000040B0 0FBF842D[78050500] movsx eax, word [mp3_synth_win+ebp*2] 5977 000040B8 0FAFC2 imul eax, edx 5978 000040BB 01C3 add ebx, eax 5979 000040BD 8B14B5[C0B40000] mov edx, [(mp3_synth_buf+100h)+esi*4] ; nn=1 5980 000040C4 0FBF842D[F8050500] movsx eax, word [(mp3_synth_win+80h)+ebp*2] ; ww=0 5981 000040CC 0FAFC2 imul eax, edx 5982 000040CF 01C3 add ebx, eax 5983 000040D1 8B14B5[C0B50000] mov edx, [(mp3_synth_buf+200h)+esi*4] 5984 000040D8 0FBF842D[78060500] movsx eax, word [(mp3_synth_win+100h)+ebp*2] 5985 000040E0 0FAFC2 imul eax, edx 5986 000040E3 01C3 add ebx, eax 5987 000040E5 8B14B5[C0B60000] mov edx, [(mp3_synth_buf+300h)+esi*4] 5988 000040EC 0FBF842D[F8060500] movsx eax, word [(mp3_synth_win+180h)+ebp*2] 5989 000040F4 0FAFC2 imul eax, edx 5990 000040F7 01C3 add ebx, eax 5991 000040F9 8B14B5[C0B70000] mov edx, [(mp3_synth_buf+400h)+esi*4] 5992 00004100 0FBF842D[78070500] movsx eax, word [(mp3_synth_win+200h)+ebp*2] 5993 00004108 0FAFC2 imul eax, edx 5994 0000410B 01C3 add ebx, eax 5995 0000410D 8B14B5[C0B80000] mov edx, [(mp3_synth_buf+500h)+esi*4] 5996 00004114 0FBF842D[F8070500] movsx eax, word [(mp3_synth_win+280h)+ebp*2] 5997 0000411C 0FAFC2 imul eax, edx 5998 0000411F 01C3 add ebx, eax 5999 00004121 8B14B5[C0B90000] mov edx, [(mp3_synth_buf+600h)+esi*4] 6000 00004128 0FBF842D[78080500] movsx eax, word [(mp3_synth_win+300h)+ebp*2] 6001 00004130 0FAFC2 imul eax, edx 6002 00004133 01C3 add ebx, eax 6003 00004135 8B14B5[C0BA0000] mov edx, [(mp3_synth_buf+700h)+esi*4] 6004 0000413C 0FBF842D[F8080500] movsx eax, word [(mp3_synth_win+380h)+ebp*2] 6005 00004144 0FAFC2 imul eax, edx 6006 00004147 01C3 add ebx, eax 6007 00004149 8B14BD[C0B30000] mov edx, [mp3_synth_buf+edi*4] 6008 00004150 0FBF842D[B8050500] movsx eax, word [(mp3_synth_win+40h)+ebp*2] 6009 00004158 0FAFC2 imul eax, edx 6010 0000415B 01C3 add ebx, eax 6011 0000415D 8B14BD[C0B40000] mov edx, [(mp3_synth_buf+100h)+edi*4] 6012 00004164 0FBF842D[38060500] movsx eax, word [(mp3_synth_win+0C0h)+ebp*2] 6013 0000416C 0FAFC2 imul eax, edx 6014 0000416F 01C3 add ebx, eax 6015 00004171 8B14BD[C0B50000] mov edx, [(mp3_synth_buf+200h)+edi*4] ; nn=2 6016 00004178 0FBF842D[B8060500] movsx eax, word [(mp3_synth_win+140h)+ebp*2] ; ww=32 6017 00004180 0FAFC2 imul eax, edx 6018 00004183 01C3 add ebx, eax 6019 00004185 8B14BD[C0B60000] mov edx, [(mp3_synth_buf+300h)+edi*4] 6020 0000418C 0FBF842D[38070500] movsx eax, word [(mp3_synth_win+1C0h)+ebp*2] 6021 00004194 0FAFC2 imul eax, edx 6022 00004197 01C3 add ebx, eax 6023 00004199 8B14BD[C0B70000] mov edx, [(mp3_synth_buf+400h)+edi*4] 6024 000041A0 0FBF842D[B8070500] movsx eax, word [(mp3_synth_win+240h)+ebp*2] 6025 000041A8 0FAFC2 imul eax, edx 6026 000041AB 01C3 add ebx, eax 6027 000041AD 8B14BD[C0B80000] mov edx, [(mp3_synth_buf+500h)+edi*4] 6028 000041B4 0FBF842D[38080500] movsx eax, word [(mp3_synth_win+2C0h)+ebp*2] 6029 000041BC 0FAFC2 imul eax, edx 6030 000041BF 01C3 add ebx, eax 6031 000041C1 8B14BD[C0B90000] mov edx, [(mp3_synth_buf+600h)+edi*4] 6032 000041C8 0FBF842D[B8080500] movsx eax, word [(mp3_synth_win+340h)+ebp*2] 6033 000041D0 0FAFC2 imul eax, edx 6034 000041D3 01C3 add ebx, eax 6035 000041D5 8B14BD[C0BA0000] mov edx, [(mp3_synth_buf+700h)+edi*4] 6036 000041DC 0FBF842D[38090500] movsx eax, word [(mp3_synth_win+3C0h)+ebp*2] 6037 000041E4 0FAFC2 imul eax, edx 6038 000041E7 01C3 add ebx, eax 6039 000041E9 81FB00000040 cmp ebx, 40000000h ; cmp @@sum,100h SHL (@@out_shift) 6040 000041EF 731B jnb short .sat 6041 000041F1 C1FB16 sar ebx, 22 ; sar @@sum,(@@out_shift) 6042 6043 .sat_back: 6044 000041F4 8819 mov [ecx], bl ; mov byte ptr [@@dst],@@sum_8bit 6045 000041F6 030D[640A0100] add ecx, [mp3_samples_dst_step] 6046 000041FC 46 inc esi ; inc @@syn1 6047 000041FD 4F dec edi ; dec @@syn2 6048 000041FE 45 inc ebp ; inc @@win1 6049 000041FF F7C51F000000 test ebp, 1Fh ; IF LONG_WINDOW 6050 ; test @@win1,1fh 6051 00004205 0F8599FEFFFF jnz .samples_lop 6052 0000420B C3 retn 6053 6054 .sat: 6055 0000420C C1FB1F sar ebx, 31 ; sar @@sum,31 ; FFFFFFFFh,00000000h 6056 0000420F F7D3 not ebx ; IF force_8bit 6057 ; not @@sum ; 00000000h,FFFFFFFFh (unsigned 8bit) 6058 00004211 EBE1 jmp short .sat_back 6059 6060 .append_copy_to_window: 6061 00004213 8D3485[C0B30000] lea esi, [mp3_synth_buf+eax*4] 6062 0000421A 8DBE00080000 lea edi, [esi+2048] ; [esi+512*4] 6063 00004220 B912000000 mov ecx, 18 ; (12h*4)/4 6064 00004225 F3A5 rep movsd 6065 00004227 E957FEFFFF jmp .append_copy_to_window_back 6066 6067 6068 ; =============== S U B R O U T I N E ======================================= 6069 6070 6071 synth_8bit_shift_1_fast: 6072 0000422C F605[1C8C0000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 1,1,1 6073 00004233 740E jz short .no_rdtsc_supported 6074 00004235 0F31 rdtsc 6075 00004237 2905[948D0000] sub [rdtsc_synth_dct], eax 6076 0000423D 1915[988D0000] sbb [rdtsc_synth_dct+4], edx 6077 6078 .no_rdtsc_supported: 6079 00004243 BE[C8D30000] mov esi, mp3_sb_samples 6080 00004248 8B3D[5C0A0100] mov edi, [mp3_samples_dst] 6081 0000424E C705[680A0100]0000- mov dword [mp3_curr_channel], 0 6081 00004256 0000 6082 6083 .synth_channel_lop: 6084 00004258 56 push esi 6085 00004259 57 push edi 6086 0000425A 893D[A8B30000] mov [mp3_curr_syn_dst], edi 6087 00004260 C705[700A0100]0000- mov dword [mp3_curr_frame], 0 6087 00004268 0000 6088 6089 .synth_frame_lop: 6090 0000426A 56 push esi 6091 0000426B F605[1C8C0000]10 test byte [cpuid_flags], 10h 6092 00004272 740E jz short .no_rdtsc_supported@ 6093 00004274 0F31 rdtsc 6094 00004276 2905[AC8D0000] sub [rdtsc_dct32], eax 6095 0000427C 1915[B08D0000] sbb [rdtsc_dct32+4], edx 6096 6097 .no_rdtsc_supported@: 6098 00004282 8B15[680A0100] mov edx, [mp3_curr_channel] 6099 00004288 8B0495[C0D30000] mov eax, [mp3_synth_index+edx*4] 6100 0000428F 832C95[C0D30000]20 sub dword [mp3_synth_index+edx*4], 32 6101 00004297 C1E20A shl edx, 10 6102 0000429A 25E0010000 and eax, 1E0h ; 1FFh-1Fh 6103 0000429F 09D0 or eax, edx 6104 000042A1 A3[A4B30000] mov [mp3_curr_syn_index], eax 6105 000042A6 8B3D[A4B30000] mov edi, [mp3_curr_syn_index] 6106 000042AC 8D3CBD[C0B30000] lea edi, [mp3_synth_buf+edi*4] 6107 000042B3 E852ECFFFF call mp3_dct32_shift_1 ; mp3_dct32_shift_&rate_shift 6108 000042B8 F605[1C8C0000]10 test byte [cpuid_flags], 10h 6109 000042BF 740E jz short .no_rdtsc_supported@@ 6110 000042C1 0F31 rdtsc 6111 000042C3 0105[AC8D0000] add [rdtsc_dct32], eax 6112 000042C9 1115[B08D0000] adc [rdtsc_dct32+4], edx 6113 6114 .no_rdtsc_supported@@: 6115 000042CF F605[1C8C0000]10 test byte [cpuid_flags], 10h 6116 000042D6 740E jz short .no_rdtsc_supported@@@ 6117 000042D8 0F31 rdtsc 6118 000042DA 2905[C48D0000] sub [rdtsc_synth], eax 6119 000042E0 1915[C88D0000] sbb [rdtsc_synth+4], edx 6120 6121 .no_rdtsc_supported@@@: 6122 000042E6 E888000000 call mp3_synth_filter_this_8bit_shift_1_fast ; 6123 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 6124 000042EB F605[1C8C0000]10 test byte [cpuid_flags], 10h 6125 000042F2 740E jz short .no_rdtsc_supported@@@@ 6126 000042F4 0F31 rdtsc 6127 000042F6 0105[C48D0000] add [rdtsc_synth], eax 6128 000042FC 1115[C88D0000] adc [rdtsc_synth+4], edx 6129 6130 .no_rdtsc_supported@@@@: 6131 00004302 5E pop esi 6132 00004303 A1[640A0100] mov eax, [mp3_samples_dst_step] 6133 00004308 C1E005 shl eax, 5 6134 0000430B 8A0D[178C0000] mov cl, [option_rate_shift] 6135 00004311 D3E8 shr eax, cl 6136 00004313 0105[A8B30000] add [mp3_curr_syn_dst], eax 6137 00004319 81C680000000 add esi, 128 ; SBLIMIT*4 6138 0000431F FF05[700A0100] inc dword [mp3_curr_frame] 6139 00004325 A1[700A0100] mov eax, [mp3_curr_frame] 6140 0000432A 3B05[ACB30000] cmp eax, [mp3_nb_frames] 6141 00004330 0F8234FFFFFF jb .synth_frame_lop 6142 00004336 5F pop edi 6143 00004337 5E pop esi 6144 00004338 033D[A0B30000] add edi, [mp3_bytes_per_sample] 6145 0000433E 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 6146 00004344 FF05[680A0100] inc dword [mp3_curr_channel] 6147 0000434A A1[680A0100] mov eax, [mp3_curr_channel] 6148 0000434F 3B05[98B30000] cmp eax, [mp3_output_num_channels] 6149 00004355 0F82FDFEFFFF jb .synth_channel_lop 6150 0000435B F605[1C8C0000]10 test byte [cpuid_flags], 10h 6151 00004362 740E jz short .no_rdtsc_supported@@@@@ 6152 00004364 0F31 rdtsc 6153 00004366 0105[948D0000] add [rdtsc_synth_dct], eax 6154 0000436C 1115[988D0000] adc [rdtsc_synth_dct+4], edx 6155 6156 .no_rdtsc_supported@@@@@: 6157 00004372 C3 retn 6158 6159 6160 ; =============== S U B R O U T I N E ======================================= 6161 6162 6163 mp3_synth_filter_this_8bit_shift_1_fast: 6164 00004373 A1[A4B30000] mov eax, [mp3_curr_syn_index] 6165 00004378 A9E0010000 test eax, 1E0h 6166 0000437D 0F8497010000 jz .append_copy_to_window 6167 00004383 90 nop 6168 6169 .append_copy_to_window_back: 6170 00004384 89C5 mov ebp, eax 6171 00004386 81E5C0010000 and ebp, 1C0h 6172 0000438C 2520040000 and eax, 420h 6173 00004391 8D7010 lea esi, [eax+10h] 6174 00004394 8D7830 lea edi, [eax+30h] 6175 00004397 F7DD neg ebp 6176 00004399 81E5C0010000 and ebp, 1C0h 6177 0000439F 8B0D[A8B30000] mov ecx, [mp3_curr_syn_dst] 6178 6179 .samples_lop: 6180 000043A5 BB00002020 mov ebx, 20200000h 6181 000043AA 8B14B5[C0B30000] mov edx, [mp3_synth_buf+esi*4] 6182 000043B1 0FBF842D[78050500] movsx eax, word [mp3_synth_win+ebp*2] 6183 000043B9 0FAFC2 imul eax, edx 6184 000043BC 01C3 add ebx, eax 6185 000043BE 8B14B5[C0B40000] mov edx, [(mp3_synth_buf+100h)+esi*4] 6186 000043C5 0FBF842D[F8050500] movsx eax, word [(mp3_synth_win+80h)+ebp*2] 6187 000043CD 0FAFC2 imul eax, edx 6188 000043D0 01C3 add ebx, eax 6189 000043D2 8B14B5[C0B50000] mov edx, [(mp3_synth_buf+200h)+esi*4] 6190 000043D9 0FBF842D[78060500] movsx eax, word [(mp3_synth_win+100h)+ebp*2] 6191 000043E1 0FAFC2 imul eax, edx 6192 000043E4 01C3 add ebx, eax 6193 000043E6 8B14B5[C0B60000] mov edx, [(mp3_synth_buf+300h)+esi*4] 6194 000043ED 0FBF842D[F8060500] movsx eax, word [(mp3_synth_win+180h)+ebp*2] 6195 000043F5 0FAFC2 imul eax, edx 6196 000043F8 01C3 add ebx, eax 6197 000043FA 8B14B5[C0B70000] mov edx, [(mp3_synth_buf+400h)+esi*4] 6198 00004401 0FBF842D[78070500] movsx eax, word [(mp3_synth_win+200h)+ebp*2] 6199 00004409 0FAFC2 imul eax, edx 6200 0000440C 01C3 add ebx, eax 6201 0000440E 8B14B5[C0B80000] mov edx, [(mp3_synth_buf+500h)+esi*4] 6202 00004415 0FBF842D[F8070500] movsx eax, word [(mp3_synth_win+280h)+ebp*2] 6203 0000441D 0FAFC2 imul eax, edx 6204 00004420 01C3 add ebx, eax 6205 00004422 8B14B5[C0B90000] mov edx, [(mp3_synth_buf+600h)+esi*4] 6206 00004429 0FBF842D[78080500] movsx eax, word [(mp3_synth_win+300h)+ebp*2] 6207 00004431 0FAFC2 imul eax, edx 6208 00004434 01C3 add ebx, eax 6209 00004436 8B14B5[C0BA0000] mov edx, [(mp3_synth_buf+700h)+esi*4] 6210 0000443D 0FBF842D[F8080500] movsx eax, word [(mp3_synth_win+380h)+ebp*2] 6211 00004445 0FAFC2 imul eax, edx 6212 00004448 01C3 add ebx, eax 6213 0000444A 8B14BD[C0B30000] mov edx, [mp3_synth_buf+edi*4] 6214 00004451 0FBF842D[B8050500] movsx eax, word [(mp3_synth_win+40h)+ebp*2] 6215 00004459 0FAFC2 imul eax, edx 6216 0000445C 01C3 add ebx, eax 6217 0000445E 8B14BD[C0B40000] mov edx, [(mp3_synth_buf+100h)+edi*4] 6218 00004465 0FBF842D[38060500] movsx eax, word [(mp3_synth_win+0C0h)+ebp*2] 6219 0000446D 0FAFC2 imul eax, edx 6220 00004470 01C3 add ebx, eax 6221 00004472 8B14BD[C0B50000] mov edx, [(mp3_synth_buf+200h)+edi*4] 6222 00004479 0FBF842D[B8060500] movsx eax, word [(mp3_synth_win+140h)+ebp*2] 6223 00004481 0FAFC2 imul eax, edx 6224 00004484 01C3 add ebx, eax 6225 00004486 8B14BD[C0B60000] mov edx, [(mp3_synth_buf+300h)+edi*4] 6226 0000448D 0FBF842D[38070500] movsx eax, word [(mp3_synth_win+1C0h)+ebp*2] 6227 00004495 0FAFC2 imul eax, edx 6228 00004498 01C3 add ebx, eax 6229 0000449A 8B14BD[C0B70000] mov edx, [(mp3_synth_buf+400h)+edi*4] 6230 000044A1 0FBF842D[B8070500] movsx eax, word [(mp3_synth_win+240h)+ebp*2] 6231 000044A9 0FAFC2 imul eax, edx 6232 000044AC 01C3 add ebx, eax 6233 000044AE 8B14BD[C0B80000] mov edx, [(mp3_synth_buf+500h)+edi*4] 6234 000044B5 0FBF842D[38080500] movsx eax, word [(mp3_synth_win+2C0h)+ebp*2] 6235 000044BD 0FAFC2 imul eax, edx 6236 000044C0 01C3 add ebx, eax 6237 000044C2 8B14BD[C0B90000] mov edx, [(mp3_synth_buf+600h)+edi*4] 6238 000044C9 0FBF842D[B8080500] movsx eax, word [(mp3_synth_win+340h)+ebp*2] 6239 000044D1 0FAFC2 imul eax, edx 6240 000044D4 01C3 add ebx, eax 6241 000044D6 8B14BD[C0BA0000] mov edx, [(mp3_synth_buf+700h)+edi*4] 6242 000044DD 0FBF842D[38090500] movsx eax, word [(mp3_synth_win+3C0h)+ebp*2] 6243 000044E5 0FAFC2 imul eax, edx 6244 000044E8 01C3 add ebx, eax 6245 000044EA 81FB00000040 cmp ebx, 40000000h 6246 000044F0 7321 jnb short .sat 6247 000044F2 C1FB16 sar ebx, 22 6248 6249 .sat_back: 6250 000044F5 8819 mov [ecx], bl 6251 000044F7 030D[640A0100] add ecx, [mp3_samples_dst_step] 6252 000044FD 83C602 add esi, 2 6253 00004500 83EF02 sub edi, 2 6254 00004503 83C502 add ebp, 2 6255 00004506 F7C51F000000 test ebp, 1Fh 6256 0000450C 0F8593FEFFFF jnz .samples_lop 6257 00004512 C3 retn 6258 6259 .sat: 6260 00004513 C1FB1F sar ebx, 31 6261 00004516 F7D3 not ebx 6262 00004518 EBDB jmp short .sat_back 6263 6264 .append_copy_to_window: 6265 0000451A 8D3485[C0B30000] lea esi, [mp3_synth_buf+eax*4] 6266 00004521 8DBE00080000 lea edi, [esi+2048] 6267 00004527 B912000000 mov ecx, 18 6268 0000452C F3A5 rep movsd 6269 0000452E E951FEFFFF jmp .append_copy_to_window_back 6270 6271 6272 ; =============== S U B R O U T I N E ======================================= 6273 6274 6275 synth_8bit_shift_2_fast: 6276 00004533 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 1,2,1 6277 0000453A 740E jz short .no_rdtsc_supported 6278 0000453C 0F31 rdtsc 6279 0000453E 2905[948D0000] sub [rdtsc_synth_dct], eax 6280 00004544 1915[988D0000] sbb [rdtsc_synth_dct+4], edx 6281 6282 .no_rdtsc_supported: 6283 0000454A BE[C8D30000] mov esi, mp3_sb_samples 6284 0000454F 8B3D[5C0A0100] mov edi, [mp3_samples_dst] 6285 00004555 C705[680A0100]0000- mov dword [mp3_curr_channel], 0 6285 0000455D 0000 6286 6287 .synth_channel_lop: 6288 0000455F 56 push esi 6289 00004560 57 push edi 6290 00004561 893D[A8B30000] mov [mp3_curr_syn_dst], edi 6291 00004567 C705[700A0100]0000- mov dword [mp3_curr_frame], 0 6291 0000456F 0000 6292 6293 .synth_frame_lop: 6294 00004571 56 push esi 6295 00004572 F605[1C8C0000]10 test byte [cpuid_flags], 10h 6296 00004579 740E jz short .no_rdtsc_supported@ 6297 0000457B 0F31 rdtsc 6298 0000457D 2905[AC8D0000] sub [rdtsc_dct32], eax 6299 00004583 1915[B08D0000] sbb [rdtsc_dct32+4], edx 6300 6301 .no_rdtsc_supported@: 6302 00004589 8B15[680A0100] mov edx, [mp3_curr_channel] 6303 0000458F 8B0495[C0D30000] mov eax, [mp3_synth_index+edx*4] 6304 00004596 832C95[C0D30000]20 sub dword [mp3_synth_index+edx*4], 32 6305 0000459E C1E20A shl edx, 10 6306 000045A1 25E0010000 and eax, 1E0h ; 1FFh-1Fh 6307 000045A6 09D0 or eax, edx 6308 000045A8 A3[A4B30000] mov [mp3_curr_syn_index], eax 6309 000045AD 8B3D[A4B30000] mov edi, [mp3_curr_syn_index] 6310 000045B3 8D3CBD[C0B30000] lea edi, [mp3_synth_buf+edi*4] 6311 000045BA E83BEDFFFF call mp3_dct32_shift_2 ; mp3_dct32_shift_&rate_shift 6312 000045BF F605[1C8C0000]10 test byte [cpuid_flags], 10h 6313 000045C6 740E jz short .no_rdtsc_supported@@ 6314 000045C8 0F31 rdtsc 6315 000045CA 0105[AC8D0000] add [rdtsc_dct32], eax 6316 000045D0 1115[B08D0000] adc [rdtsc_dct32+4], edx 6317 6318 .no_rdtsc_supported@@: 6319 000045D6 F605[1C8C0000]10 test byte [cpuid_flags], 10h 6320 000045DD 740E jz short .no_rdtsc_supported@@@ 6321 000045DF 0F31 rdtsc 6322 000045E1 2905[C48D0000] sub [rdtsc_synth], eax 6323 000045E7 1915[C88D0000] sbb [rdtsc_synth+4], edx 6324 6325 .no_rdtsc_supported@@@: 6326 000045ED E888000000 call mp3_synth_filter_this_8bit_shift_2_fast ; 6327 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 6328 000045F2 F605[1C8C0000]10 test byte [cpuid_flags], 10h 6329 000045F9 740E jz short .no_rdtsc_supported@@@@ 6330 000045FB 0F31 rdtsc 6331 000045FD 0105[C48D0000] add [rdtsc_synth], eax 6332 00004603 1115[C88D0000] adc [rdtsc_synth+4], edx 6333 6334 .no_rdtsc_supported@@@@: 6335 00004609 5E pop esi 6336 0000460A A1[640A0100] mov eax, [mp3_samples_dst_step] 6337 0000460F C1E005 shl eax, 5 6338 00004612 8A0D[178C0000] mov cl, [option_rate_shift] 6339 00004618 D3E8 shr eax, cl 6340 0000461A 0105[A8B30000] add [mp3_curr_syn_dst], eax 6341 00004620 81C680000000 add esi, 128 ; SBLIMIT*4 6342 00004626 FF05[700A0100] inc dword [mp3_curr_frame] 6343 0000462C A1[700A0100] mov eax, [mp3_curr_frame] 6344 00004631 3B05[ACB30000] cmp eax, [mp3_nb_frames] 6345 00004637 0F8234FFFFFF jb .synth_frame_lop 6346 0000463D 5F pop edi 6347 0000463E 5E pop esi 6348 0000463F 033D[A0B30000] add edi, [mp3_bytes_per_sample] 6349 00004645 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 6350 0000464B FF05[680A0100] inc dword [mp3_curr_channel] 6351 00004651 A1[680A0100] mov eax, [mp3_curr_channel] 6352 00004656 3B05[98B30000] cmp eax, [mp3_output_num_channels] 6353 0000465C 0F82FDFEFFFF jb .synth_channel_lop 6354 00004662 F605[1C8C0000]10 test byte [cpuid_flags], 10h 6355 00004669 740E jz short .no_rdtsc_supported@@@@@ 6356 0000466B 0F31 rdtsc 6357 0000466D 0105[948D0000] add [rdtsc_synth_dct], eax 6358 00004673 1115[988D0000] adc [rdtsc_synth_dct+4], edx 6359 6360 .no_rdtsc_supported@@@@@: 6361 00004679 C3 retn 6362 6363 6364 ; =============== S U B R O U T I N E ======================================= 6365 6366 6367 mp3_synth_filter_this_8bit_shift_2_fast: 6368 0000467A A1[A4B30000] mov eax, [mp3_curr_syn_index] 6369 0000467F A9E0010000 test eax, 1E0h 6370 00004684 0F8497010000 jz .append_copy_to_window 6371 0000468A 90 nop 6372 6373 .append_copy_to_window_back: 6374 0000468B 89C5 mov ebp, eax 6375 0000468D 81E5C0010000 and ebp, 1C0h 6376 00004693 2520040000 and eax, 420h 6377 00004698 8D7010 lea esi, [eax+10h] 6378 0000469B 8D7830 lea edi, [eax+30h] 6379 0000469E F7DD neg ebp 6380 000046A0 81E5C0010000 and ebp, 1C0h 6381 000046A6 8B0D[A8B30000] mov ecx, [mp3_curr_syn_dst] 6382 6383 .samples_lop: 6384 000046AC BB00002020 mov ebx, 20200000h 6385 000046B1 8B14B5[C0B30000] mov edx, [mp3_synth_buf+esi*4] 6386 000046B8 0FBF842D[78050500] movsx eax, word [mp3_synth_win+ebp*2] 6387 000046C0 0FAFC2 imul eax, edx 6388 000046C3 01C3 add ebx, eax 6389 000046C5 8B14B5[C0B40000] mov edx, [(mp3_synth_buf+100h)+esi*4] 6390 000046CC 0FBF842D[F8050500] movsx eax, word [(mp3_synth_win+80h)+ebp*2] 6391 000046D4 0FAFC2 imul eax, edx 6392 000046D7 01C3 add ebx, eax 6393 000046D9 8B14B5[C0B50000] mov edx, [(mp3_synth_buf+200h)+esi*4] 6394 000046E0 0FBF842D[78060500] movsx eax, word [(mp3_synth_win+100h)+ebp*2] 6395 000046E8 0FAFC2 imul eax, edx 6396 000046EB 01C3 add ebx, eax 6397 000046ED 8B14B5[C0B60000] mov edx, [(mp3_synth_buf+300h)+esi*4] 6398 000046F4 0FBF842D[F8060500] movsx eax, word [(mp3_synth_win+180h)+ebp*2] 6399 000046FC 0FAFC2 imul eax, edx 6400 000046FF 01C3 add ebx, eax 6401 00004701 8B14B5[C0B70000] mov edx, [(mp3_synth_buf+400h)+esi*4] 6402 00004708 0FBF842D[78070500] movsx eax, word [(mp3_synth_win+200h)+ebp*2] 6403 00004710 0FAFC2 imul eax, edx 6404 00004713 01C3 add ebx, eax 6405 00004715 8B14B5[C0B80000] mov edx, [(mp3_synth_buf+500h)+esi*4] 6406 0000471C 0FBF842D[F8070500] movsx eax, word [(mp3_synth_win+280h)+ebp*2] 6407 00004724 0FAFC2 imul eax, edx 6408 00004727 01C3 add ebx, eax 6409 00004729 8B14B5[C0B90000] mov edx, [(mp3_synth_buf+600h)+esi*4] 6410 00004730 0FBF842D[78080500] movsx eax, word [(mp3_synth_win+300h)+ebp*2] 6411 00004738 0FAFC2 imul eax, edx 6412 0000473B 01C3 add ebx, eax 6413 0000473D 8B14B5[C0BA0000] mov edx, [(mp3_synth_buf+700h)+esi*4] 6414 00004744 0FBF842D[F8080500] movsx eax, word [(mp3_synth_win+380h)+ebp*2] 6415 0000474C 0FAFC2 imul eax, edx 6416 0000474F 01C3 add ebx, eax 6417 00004751 8B14BD[C0B30000] mov edx, [mp3_synth_buf+edi*4] 6418 00004758 0FBF842D[B8050500] movsx eax, word [(mp3_synth_win+40h)+ebp*2] 6419 00004760 0FAFC2 imul eax, edx 6420 00004763 01C3 add ebx, eax 6421 00004765 8B14BD[C0B40000] mov edx, [(mp3_synth_buf+100h)+edi*4] 6422 0000476C 0FBF842D[38060500] movsx eax, word [(mp3_synth_win+0C0h)+ebp*2] 6423 00004774 0FAFC2 imul eax, edx 6424 00004777 01C3 add ebx, eax 6425 00004779 8B14BD[C0B50000] mov edx, [(mp3_synth_buf+200h)+edi*4] 6426 00004780 0FBF842D[B8060500] movsx eax, word [(mp3_synth_win+140h)+ebp*2] 6427 00004788 0FAFC2 imul eax, edx 6428 0000478B 01C3 add ebx, eax 6429 0000478D 8B14BD[C0B60000] mov edx, [(mp3_synth_buf+300h)+edi*4] 6430 00004794 0FBF842D[38070500] movsx eax, word [(mp3_synth_win+1C0h)+ebp*2] 6431 0000479C 0FAFC2 imul eax, edx 6432 0000479F 01C3 add ebx, eax 6433 000047A1 8B14BD[C0B70000] mov edx, [(mp3_synth_buf+400h)+edi*4] 6434 000047A8 0FBF842D[B8070500] movsx eax, word [(mp3_synth_win+240h)+ebp*2] 6435 000047B0 0FAFC2 imul eax, edx 6436 000047B3 01C3 add ebx, eax 6437 000047B5 8B14BD[C0B80000] mov edx, [(mp3_synth_buf+500h)+edi*4] 6438 000047BC 0FBF842D[38080500] movsx eax, word [(mp3_synth_win+2C0h)+ebp*2] 6439 000047C4 0FAFC2 imul eax, edx 6440 000047C7 01C3 add ebx, eax 6441 000047C9 8B14BD[C0B90000] mov edx, [(mp3_synth_buf+600h)+edi*4] 6442 000047D0 0FBF842D[B8080500] movsx eax, word [(mp3_synth_win+340h)+ebp*2] 6443 000047D8 0FAFC2 imul eax, edx 6444 000047DB 01C3 add ebx, eax 6445 000047DD 8B14BD[C0BA0000] mov edx, [(mp3_synth_buf+700h)+edi*4] 6446 000047E4 0FBF842D[38090500] movsx eax, word [(mp3_synth_win+3C0h)+ebp*2] 6447 000047EC 0FAFC2 imul eax, edx 6448 000047EF 01C3 add ebx, eax 6449 000047F1 81FB00000040 cmp ebx, 40000000h 6450 000047F7 7321 jnb short .sat 6451 000047F9 C1FB16 sar ebx, 22 6452 6453 .sat_back: 6454 000047FC 8819 mov [ecx], bl 6455 000047FE 030D[640A0100] add ecx, [mp3_samples_dst_step] 6456 00004804 83C604 add esi, 4 6457 00004807 83EF04 sub edi, 4 6458 0000480A 83C504 add ebp, 4 6459 0000480D F7C51F000000 test ebp, 1Fh 6460 00004813 0F8593FEFFFF jnz .samples_lop 6461 00004819 C3 retn 6462 6463 .sat: 6464 0000481A C1FB1F sar ebx, 31 6465 0000481D F7D3 not ebx 6466 0000481F EBDB jmp short .sat_back 6467 6468 .append_copy_to_window: 6469 00004821 8D3485[C0B30000] lea esi, [mp3_synth_buf+eax*4] 6470 00004828 8DBE00080000 lea edi, [esi+2048] 6471 0000482E B912000000 mov ecx, 18 6472 00004833 F3A5 rep movsd 6473 00004835 E951FEFFFF jmp .append_copy_to_window_back 6474 6475 6476 ; =============== S U B R O U T I N E ======================================= 6477 6478 6479 synth_16bit_shift_0_slow: 6480 0000483A F605[1C8C0000]10 test byte [cpuid_flags], 10h 6481 00004841 740E jz short .no_rdtsc_supported 6482 00004843 0F31 rdtsc 6483 00004845 2905[948D0000] sub [rdtsc_synth_dct], eax 6484 0000484B 1915[988D0000] sbb [rdtsc_synth_dct+4], edx 6485 6486 .no_rdtsc_supported: 6487 00004851 BE[C8D30000] mov esi, mp3_sb_samples 6488 00004856 8B3D[5C0A0100] mov edi, [mp3_samples_dst] 6489 0000485C C705[680A0100]0000- mov dword [mp3_curr_channel], 0 6489 00004864 0000 6490 6491 .synth_channel_lop: 6492 00004866 56 push esi 6493 00004867 57 push edi 6494 00004868 893D[A8B30000] mov [mp3_curr_syn_dst], edi 6495 0000486E C705[700A0100]0000- mov dword [mp3_curr_frame], 0 6495 00004876 0000 6496 6497 .synth_frame_lop: 6498 00004878 56 push esi 6499 00004879 F605[1C8C0000]10 test byte [cpuid_flags], 10h 6500 00004880 740E jz short .no_rdtsc_supported@ 6501 00004882 0F31 rdtsc 6502 00004884 2905[AC8D0000] sub [rdtsc_dct32], eax 6503 0000488A 1915[B08D0000] sbb [rdtsc_dct32+4], edx 6504 6505 .no_rdtsc_supported@: 6506 00004890 8B15[680A0100] mov edx, [mp3_curr_channel] 6507 00004896 8B0495[C0D30000] mov eax, [mp3_synth_index+edx*4] 6508 0000489D 832C95[C0D30000]20 sub dword [mp3_synth_index+edx*4], 32 6509 000048A5 C1E20A shl edx, 10 ; channel*1024 6510 000048A8 25E0010000 and eax, 1E0h ; 1FFh-1Fh 6511 000048AD 09D0 or eax, edx 6512 000048AF A3[A4B30000] mov [mp3_curr_syn_index], eax 6513 000048B4 8B3D[A4B30000] mov edi, [mp3_curr_syn_index] 6514 000048BA 8D3CBD[C0B30000] lea edi, [mp3_synth_buf+edi*4] 6515 000048C1 E864DDFFFF call mp3_dct32_shift_0 ; mp3_dct32_shift_&rate_shift 6516 000048C6 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_dct32 6517 000048CD 740E jz short .no_rdtsc_supported@@ 6518 000048CF 0F31 rdtsc 6519 000048D1 0105[AC8D0000] add [rdtsc_dct32], eax 6520 000048D7 1115[B08D0000] adc [rdtsc_dct32+4], edx 6521 6522 .no_rdtsc_supported@@: 6523 000048DD F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_synth 6524 000048E4 740E jz short .no_rdtsc_supported@@@ 6525 000048E6 0F31 rdtsc 6526 000048E8 2905[C48D0000] sub [rdtsc_synth], eax 6527 000048EE 1915[C88D0000] sbb [rdtsc_synth+4], edx 6528 6529 .no_rdtsc_supported@@@: 6530 000048F4 E888000000 call mp3_synth_filter_this_16bit_shift_0_slow 6531 000048F9 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_synth 6532 00004900 740E jz short .no_rdtsc_supported@@@@ 6533 00004902 0F31 rdtsc 6534 00004904 0105[C48D0000] add [rdtsc_synth], eax 6535 0000490A 1115[C88D0000] adc [rdtsc_synth+4], edx 6536 6537 .no_rdtsc_supported@@@@: 6538 00004910 5E pop esi 6539 00004911 A1[640A0100] mov eax, [mp3_samples_dst_step] 6540 00004916 C1E005 shl eax, 5 6541 00004919 8A0D[178C0000] mov cl, [option_rate_shift] 6542 0000491F D3E8 shr eax, cl 6543 00004921 0105[A8B30000] add [mp3_curr_syn_dst], eax 6544 00004927 81C680000000 add esi, 128 ; SBLIMIT*4 6545 0000492D FF05[700A0100] inc dword [mp3_curr_frame] 6546 00004933 A1[700A0100] mov eax, [mp3_curr_frame] 6547 00004938 3B05[ACB30000] cmp eax, [mp3_nb_frames] 6548 0000493E 0F8234FFFFFF jb .synth_frame_lop 6549 00004944 5F pop edi 6550 00004945 5E pop esi 6551 00004946 033D[A0B30000] add edi, [mp3_bytes_per_sample] 6552 0000494C 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 6553 00004952 FF05[680A0100] inc dword [mp3_curr_channel] 6554 00004958 A1[680A0100] mov eax, [mp3_curr_channel] 6555 0000495D 3B05[98B30000] cmp eax, [mp3_output_num_channels] 6556 00004963 0F82FDFEFFFF jb .synth_channel_lop 6557 00004969 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_synth_dct 6558 00004970 740E jz short .no_rdtsc_supported@@@@@ 6559 00004972 0F31 rdtsc 6560 00004974 0105[948D0000] add [rdtsc_synth_dct], eax 6561 0000497A 1115[988D0000] adc [rdtsc_synth_dct+4], edx 6562 6563 .no_rdtsc_supported@@@@@: 6564 00004980 C3 retn 6565 6566 6567 ; =============== S U B R O U T I N E ======================================= 6568 6569 6570 mp3_synth_filter_this_16bit_shift_0_slow: 6571 00004981 A1[A4B30000] mov eax, [mp3_curr_syn_index] 6572 00004986 A9E0010000 test eax, 1E0h ; 1FFh-1Fh 6573 0000498B 0F847C010000 jz .append_copy_to_window 6574 00004991 90 nop 6575 6576 .append_copy_to_window_back: 6577 00004992 89C5 mov ebp, eax ; mov @@win1,eax 6578 00004994 81E5C0010000 and ebp, 1C0h ; and @@win1,1FFh-1Fh-20h 6579 0000499A 2520040000 and eax, 420h ; and eax,20h+(1 shl 10) ; bit5, and channel 6580 0000499F 8D7010 lea esi, [eax+10h] ; lea @@syn1,[eax+10h] 6581 000049A2 8D7830 lea edi, [eax+30h] ; lea @@syn2,[eax+30h] 6582 000049A5 F7DD neg ebp 6583 000049A7 81E5C0010000 and ebp, 1C0h ; and @@win1,1FFh-1Fh-20h 6584 000049AD 8B0D[A8B30000] mov ecx, [mp3_curr_syn_dst] 6585 6586 .samples_lop: 6587 000049B3 BB10001000 mov ebx, 100010h ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 6588 ; @@out_shift = 5 6589 6590 .SUM8_@: ; @@SUM8 macro sum,win,ww,syn 6591 000049B8 8B14B5[C0B30000] mov edx, [mp3_synth_buf+esi*4] ; IRP nn,0,1,2,3,4,5,6,7 6592 ; @@SUM8 @@sum,@@win1,0, @@syn1 6593 000049BF 8B04AD[78050500] mov eax, [mp3_synth_win+ebp*4] ; [mp3_synth_buf+syn*4+(nn*64*4)] 6594 000049C6 F7EA imul edx ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] 6595 000049C8 01D3 add ebx, edx 6596 000049CA 8B14B5[C0B40000] mov edx, [(mp3_synth_buf+100h)+esi*4] 6597 000049D1 8B04AD[78060500] mov eax, [(mp3_synth_win+100h)+ebp*4] 6598 000049D8 F7EA imul edx 6599 000049DA 01D3 add ebx, edx ; add sum,edx 6600 000049DC 8B14B5[C0B50000] mov edx, [(mp3_synth_buf+200h)+esi*4] 6601 000049E3 8B04AD[78070500] mov eax, [(mp3_synth_win+200h)+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] 6602 000049EA F7EA imul edx ; 64bit = 32bit * 32bit 6603 000049EC 01D3 add ebx, edx 6604 000049EE 8B14B5[C0B60000] mov edx, [(mp3_synth_buf+300h)+esi*4] 6605 000049F5 8B04AD[78080500] mov eax, [(mp3_synth_win+300h)+ebp*4] 6606 000049FC F7EA imul edx 6607 000049FE 01D3 add ebx, edx 6608 00004A00 8B14B5[C0B70000] mov edx, [(mp3_synth_buf+400h)+esi*4] 6609 00004A07 8B04AD[78090500] mov eax, [(mp3_synth_win+400h)+ebp*4] 6610 00004A0E F7EA imul edx 6611 00004A10 01D3 add ebx, edx 6612 00004A12 8B14B5[C0B80000] mov edx, [(mp3_synth_buf+500h)+esi*4] 6613 00004A19 8B04AD[780A0500] mov eax, [(mp3_synth_win+500h)+ebp*4] 6614 00004A20 F7EA imul edx 6615 00004A22 01D3 add ebx, edx 6616 00004A24 8B14B5[C0B90000] mov edx, [(mp3_synth_buf+600h)+esi*4] 6617 00004A2B 8B04AD[780B0500] mov eax, [(mp3_synth_win+600h)+ebp*4] 6618 00004A32 F7EA imul edx 6619 00004A34 01D3 add ebx, edx 6620 00004A36 8B14B5[C0BA0000] mov edx, [(mp3_synth_buf+700h)+esi*4] 6621 00004A3D 8B04AD[780C0500] mov eax, [(mp3_synth_win+700h)+ebp*4] 6622 00004A44 F7EA imul edx 6623 00004A46 01D3 add ebx, edx 6624 6625 .skippp: ; @@SUM8 macro sum,win,ww,syn 6626 00004A48 8B14BD[C0B30000] mov edx, [mp3_synth_buf+edi*4] ; @@SUM8 @@sum,@@win1,32,@@syn2 6627 ; [mp3_synth_buf+syn*4+(nn*64*4)] 6628 00004A4F 8B04AD[F8050500] mov eax, [(mp3_synth_win+80h)+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] 6629 00004A56 F7EA imul edx 6630 00004A58 01D3 add ebx, edx 6631 00004A5A 8B14BD[C0B40000] mov edx, [(mp3_synth_buf+100h)+edi*4] 6632 00004A61 8B04AD[F8060500] mov eax, [(mp3_synth_win+180h)+ebp*4] 6633 00004A68 F7EA imul edx 6634 00004A6A 01D3 add ebx, edx 6635 00004A6C 8B14BD[C0B50000] mov edx, [(mp3_synth_buf+200h)+edi*4] 6636 00004A73 8B04AD[F8070500] mov eax, [(mp3_synth_win+280h)+ebp*4] 6637 00004A7A F7EA imul edx 6638 00004A7C 01D3 add ebx, edx 6639 00004A7E 8B14BD[C0B60000] mov edx, [(mp3_synth_buf+300h)+edi*4] 6640 00004A85 8B04AD[F8080500] mov eax, [(mp3_synth_win+380h)+ebp*4] 6641 00004A8C F7EA imul edx 6642 00004A8E 01D3 add ebx, edx 6643 00004A90 8B14BD[C0B70000] mov edx, [(mp3_synth_buf+400h)+edi*4] 6644 00004A97 8B04AD[F8090500] mov eax, [(mp3_synth_win+480h)+ebp*4] 6645 00004A9E F7EA imul edx 6646 00004AA0 01D3 add ebx, edx 6647 00004AA2 8B14BD[C0B80000] mov edx, [(mp3_synth_buf+500h)+edi*4] 6648 00004AA9 8B04AD[F80A0500] mov eax, [(mp3_synth_win+580h)+ebp*4] 6649 00004AB0 F7EA imul edx 6650 00004AB2 01D3 add ebx, edx 6651 00004AB4 8B14BD[C0B90000] mov edx, [(mp3_synth_buf+600h)+edi*4] 6652 00004ABB 8B04AD[F80B0500] mov eax, [(mp3_synth_win+680h)+ebp*4] 6653 00004AC2 F7EA imul edx 6654 00004AC4 01D3 add ebx, edx 6655 00004AC6 8B14BD[C0BA0000] mov edx, [(mp3_synth_buf+700h)+edi*4] 6656 00004ACD 8B04AD[F80C0500] mov eax, [(mp3_synth_win+780h)+ebp*4] 6657 00004AD4 F7EA imul edx 6658 00004AD6 01D3 add ebx, edx 6659 00004AD8 81FB00002000 cmp ebx, 200000h ; cmp @@sum,10000h SHL (@@out_shift) 6660 00004ADE 7322 jnb short .sat 6661 00004AE0 C1FB05 sar ebx, 5 ; sar @@sum,(@@out_shift) 6662 00004AE3 81EB00800000 sub ebx, 8000h ; make 16bit signed 6663 6664 .sat_back: 6665 00004AE9 668919 mov [ecx], bx 6666 00004AEC 030D[640A0100] add ecx, [mp3_samples_dst_step] 6667 00004AF2 46 inc esi ; inc @@syn1 6668 00004AF3 4F dec edi ; dec @@syn2 6669 00004AF4 45 inc ebp ; inc @@win1 6670 00004AF5 F7C51F000000 test ebp, 1Fh ; test @@win1,1Fh 6671 00004AFB 0F85B2FEFFFF jnz .samples_lop 6672 00004B01 C3 retn 6673 6674 .sat: 6675 00004B02 C1FB1F sar ebx, 31 ; FFFFFFFFh,00000000h 6676 00004B05 81F3FF7F0000 xor ebx, 7FFFh ; FFFF8000h,00007FFFh (signed 16bit) 6677 00004B0B EBDC jmp short .sat_back 6678 6679 .append_copy_to_window: 6680 00004B0D 8D3485[C0B30000] lea esi, [mp3_synth_buf+eax*4] 6681 00004B14 8DBE00080000 lea edi, [esi+2048] ; [esi+512*4] 6682 00004B1A B912000000 mov ecx, 18 ; (12h*4)/4 6683 00004B1F F3A5 rep movsd 6684 00004B21 E96CFEFFFF jmp .append_copy_to_window_back 6685 6686 6687 ; =============== S U B R O U T I N E ======================================= 6688 6689 6690 synth_16bit_shift_1_slow: 6691 00004B26 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 0,1,0 6692 00004B2D 740E jz short .no_rdtsc_supported 6693 00004B2F 0F31 rdtsc 6694 00004B31 2905[948D0000] sub [rdtsc_synth_dct], eax 6695 00004B37 1915[988D0000] sbb [rdtsc_synth_dct+4], edx 6696 6697 .no_rdtsc_supported: 6698 00004B3D BE[C8D30000] mov esi, mp3_sb_samples 6699 00004B42 8B3D[5C0A0100] mov edi, [mp3_samples_dst] 6700 00004B48 C705[680A0100]0000- mov dword [mp3_curr_channel], 0 6700 00004B50 0000 6701 6702 .synth_channel_lop: 6703 00004B52 56 push esi 6704 00004B53 57 push edi 6705 00004B54 893D[A8B30000] mov [mp3_curr_syn_dst], edi 6706 00004B5A C705[700A0100]0000- mov dword [mp3_curr_frame], 0 6706 00004B62 0000 6707 6708 .synth_frame_lop: 6709 00004B64 56 push esi 6710 00004B65 F605[1C8C0000]10 test byte [cpuid_flags], 10h 6711 00004B6C 740E jz short .no_rdtsc_supported@ 6712 00004B6E 0F31 rdtsc 6713 00004B70 2905[AC8D0000] sub [rdtsc_dct32], eax 6714 00004B76 1915[B08D0000] sbb [rdtsc_dct32+4], edx 6715 6716 .no_rdtsc_supported@: 6717 00004B7C 8B15[680A0100] mov edx, [mp3_curr_channel] 6718 00004B82 8B0495[C0D30000] mov eax, [mp3_synth_index+edx*4] 6719 00004B89 832C95[C0D30000]20 sub dword [mp3_synth_index+edx*4], 32 6720 00004B91 C1E20A shl edx, 10 ; channel*1024 6721 00004B94 25E0010000 and eax, 1E0h ; 1FFh-1Fh ; index(0..511), align 32 6722 00004B99 09D0 or eax, edx 6723 00004B9B A3[A4B30000] mov [mp3_curr_syn_index], eax 6724 00004BA0 8B3D[A4B30000] mov edi, [mp3_curr_syn_index] 6725 00004BA6 8D3CBD[C0B30000] lea edi, [mp3_synth_buf+edi*4] 6726 00004BAD E858E3FFFF call mp3_dct32_shift_1 ; call mp3_dct32_shift_&rate_shift 6727 00004BB2 F605[1C8C0000]10 test byte [cpuid_flags], 10h 6728 00004BB9 740E jz short .no_rdtsc_supported@@ 6729 00004BBB 0F31 rdtsc 6730 00004BBD 0105[AC8D0000] add [rdtsc_dct32], eax 6731 00004BC3 1115[B08D0000] adc [rdtsc_dct32+4], edx 6732 6733 .no_rdtsc_supported@@: 6734 00004BC9 F605[1C8C0000]10 test byte [cpuid_flags], 10h 6735 00004BD0 740E jz short .no_rdtsc_supported@@@ 6736 00004BD2 0F31 rdtsc 6737 00004BD4 2905[C48D0000] sub [rdtsc_synth], eax 6738 00004BDA 1915[C88D0000] sbb [rdtsc_synth+4], edx 6739 6740 .no_rdtsc_supported@@@: 6741 00004BE0 E888000000 call mp3_synth_filter_this_16bit_shift_1_slow ; 6742 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 6743 00004BE5 F605[1C8C0000]10 test byte [cpuid_flags], 10h 6744 00004BEC 740E jz short .no_rdtsc_supported@@@@ 6745 00004BEE 0F31 rdtsc 6746 00004BF0 0105[C48D0000] add [rdtsc_synth], eax 6747 00004BF6 1115[C88D0000] adc [rdtsc_synth+4], edx 6748 6749 .no_rdtsc_supported@@@@: 6750 00004BFC 5E pop esi 6751 00004BFD A1[640A0100] mov eax, [mp3_samples_dst_step] 6752 00004C02 C1E005 shl eax, 5 6753 00004C05 8A0D[178C0000] mov cl, [option_rate_shift] ; IF with_rate_shift 6754 00004C0B D3E8 shr eax, cl 6755 00004C0D 0105[A8B30000] add [mp3_curr_syn_dst], eax 6756 00004C13 81C680000000 add esi, 128 ; SBLIMIT*4 ; src+32*4 6757 00004C19 FF05[700A0100] inc dword [mp3_curr_frame] 6758 00004C1F A1[700A0100] mov eax, [mp3_curr_frame] 6759 00004C24 3B05[ACB30000] cmp eax, [mp3_nb_frames] 6760 00004C2A 0F8234FFFFFF jb .synth_frame_lop 6761 00004C30 5F pop edi 6762 00004C31 5E pop esi 6763 00004C32 033D[A0B30000] add edi, [mp3_bytes_per_sample] 6764 00004C38 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 ; src 6765 00004C3E FF05[680A0100] inc dword [mp3_curr_channel] 6766 00004C44 A1[680A0100] mov eax, [mp3_curr_channel] 6767 00004C49 3B05[98B30000] cmp eax, [mp3_output_num_channels] 6768 00004C4F 0F82FDFEFFFF jb .synth_channel_lop 6769 00004C55 F605[1C8C0000]10 test byte [cpuid_flags], 10h 6770 00004C5C 740E jz short .no_rdtsc_supported@@@@@ 6771 00004C5E 0F31 rdtsc 6772 00004C60 0105[948D0000] add [rdtsc_synth_dct], eax 6773 00004C66 1115[988D0000] adc [rdtsc_synth_dct+4], edx 6774 6775 .no_rdtsc_supported@@@@@: 6776 00004C6C C3 retn 6777 6778 6779 ; =============== S U B R O U T I N E ======================================= 6780 6781 6782 mp3_synth_filter_this_16bit_shift_1_slow: 6783 00004C6D A1[A4B30000] mov eax, [mp3_curr_syn_index] 6784 00004C72 A9E0010000 test eax, 1E0h 6785 00004C77 0F8482010000 jz .append_copy_to_window 6786 00004C7D 90 nop 6787 6788 .append_copy_to_window_back: 6789 00004C7E 89C5 mov ebp, eax 6790 00004C80 81E5C0010000 and ebp, 1C0h 6791 00004C86 2520040000 and eax, 420h 6792 00004C8B 8D7010 lea esi, [eax+10h] 6793 00004C8E 8D7830 lea edi, [eax+30h] 6794 00004C91 F7DD neg ebp 6795 00004C93 81E5C0010000 and ebp, 1C0h 6796 00004C99 8B0D[A8B30000] mov ecx, [mp3_curr_syn_dst] 6797 6798 .samples_lop: 6799 00004C9F BB10001000 mov ebx, 100010h 6800 00004CA4 8B14B5[C0B30000] mov edx, [mp3_synth_buf+esi*4] 6801 00004CAB 8B04AD[78050500] mov eax, [mp3_synth_win+ebp*4] 6802 00004CB2 F7EA imul edx 6803 00004CB4 01D3 add ebx, edx 6804 00004CB6 8B14B5[C0B40000] mov edx, [(mp3_synth_buf+100h)+esi*4] 6805 00004CBD 8B04AD[78060500] mov eax, [(mp3_synth_win+100h)+ebp*4] 6806 00004CC4 F7EA imul edx 6807 00004CC6 01D3 add ebx, edx 6808 00004CC8 8B14B5[C0B50000] mov edx, [(mp3_synth_buf+200h)+esi*4] 6809 00004CCF 8B04AD[78070500] mov eax, [(mp3_synth_win+200h)+ebp*4] 6810 00004CD6 F7EA imul edx 6811 00004CD8 01D3 add ebx, edx 6812 00004CDA 8B14B5[C0B60000] mov edx, [(mp3_synth_buf+300h)+esi*4] 6813 00004CE1 8B04AD[78080500] mov eax, [(mp3_synth_win+300h)+ebp*4] 6814 00004CE8 F7EA imul edx 6815 00004CEA 01D3 add ebx, edx 6816 00004CEC 8B14B5[C0B70000] mov edx, [(mp3_synth_buf+400h)+esi*4] 6817 00004CF3 8B04AD[78090500] mov eax, [(mp3_synth_win+400h)+ebp*4] 6818 00004CFA F7EA imul edx 6819 00004CFC 01D3 add ebx, edx 6820 00004CFE 8B14B5[C0B80000] mov edx, [(mp3_synth_buf+500h)+esi*4] 6821 00004D05 8B04AD[780A0500] mov eax, [(mp3_synth_win+500h)+ebp*4] 6822 00004D0C F7EA imul edx 6823 00004D0E 01D3 add ebx, edx 6824 00004D10 8B14B5[C0B90000] mov edx, [(mp3_synth_buf+600h)+esi*4] 6825 00004D17 8B04AD[780B0500] mov eax, [(mp3_synth_win+600h)+ebp*4] 6826 00004D1E F7EA imul edx 6827 00004D20 01D3 add ebx, edx 6828 00004D22 8B14B5[C0BA0000] mov edx, [(mp3_synth_buf+700h)+esi*4] 6829 00004D29 8B04AD[780C0500] mov eax, [(mp3_synth_win+700h)+ebp*4] 6830 00004D30 F7EA imul edx 6831 00004D32 01D3 add ebx, edx 6832 00004D34 8B14BD[C0B30000] mov edx, [mp3_synth_buf+edi*4] 6833 00004D3B 8B04AD[F8050500] mov eax, [(mp3_synth_win+80h)+ebp*4] 6834 00004D42 F7EA imul edx 6835 00004D44 01D3 add ebx, edx 6836 00004D46 8B14BD[C0B40000] mov edx, [(mp3_synth_buf+100h)+edi*4] 6837 00004D4D 8B04AD[F8060500] mov eax, [(mp3_synth_win+180h)+ebp*4] 6838 00004D54 F7EA imul edx 6839 00004D56 01D3 add ebx, edx 6840 00004D58 8B14BD[C0B50000] mov edx, [(mp3_synth_buf+200h)+edi*4] 6841 00004D5F 8B04AD[F8070500] mov eax, [(mp3_synth_win+280h)+ebp*4] 6842 00004D66 F7EA imul edx 6843 00004D68 01D3 add ebx, edx 6844 00004D6A 8B14BD[C0B60000] mov edx, [(mp3_synth_buf+300h)+edi*4] 6845 00004D71 8B04AD[F8080500] mov eax, [(mp3_synth_win+380h)+ebp*4] 6846 00004D78 F7EA imul edx 6847 00004D7A 01D3 add ebx, edx 6848 00004D7C 8B14BD[C0B70000] mov edx, [(mp3_synth_buf+400h)+edi*4] 6849 00004D83 8B04AD[F8090500] mov eax, [(mp3_synth_win+480h)+ebp*4] 6850 00004D8A F7EA imul edx 6851 00004D8C 01D3 add ebx, edx 6852 00004D8E 8B14BD[C0B80000] mov edx, [(mp3_synth_buf+500h)+edi*4] 6853 00004D95 8B04AD[F80A0500] mov eax, [(mp3_synth_win+580h)+ebp*4] 6854 00004D9C F7EA imul edx 6855 00004D9E 01D3 add ebx, edx 6856 00004DA0 8B14BD[C0B90000] mov edx, [(mp3_synth_buf+600h)+edi*4] 6857 00004DA7 8B04AD[F80B0500] mov eax, [(mp3_synth_win+680h)+ebp*4] 6858 00004DAE F7EA imul edx 6859 00004DB0 01D3 add ebx, edx 6860 00004DB2 8B14BD[C0BA0000] mov edx, [(mp3_synth_buf+700h)+edi*4] 6861 00004DB9 8B04AD[F80C0500] mov eax, [(mp3_synth_win+780h)+ebp*4] 6862 00004DC0 F7EA imul edx 6863 00004DC2 01D3 add ebx, edx 6864 00004DC4 81FB00002000 cmp ebx, 200000h 6865 00004DCA 7328 jnb short .sat 6866 00004DCC C1FB05 sar ebx, 5 6867 00004DCF 81EB00800000 sub ebx, 8000h 6868 6869 .sat_back: 6870 00004DD5 668919 mov [ecx], bx 6871 00004DD8 030D[640A0100] add ecx, [mp3_samples_dst_step] 6872 00004DDE 83C602 add esi, 2 6873 00004DE1 83EF02 sub edi, 2 6874 00004DE4 83C502 add ebp, 2 6875 00004DE7 F7C51F000000 test ebp, 1Fh 6876 00004DED 0F85ACFEFFFF jnz .samples_lop 6877 00004DF3 C3 retn 6878 6879 .sat: 6880 00004DF4 C1FB1F sar ebx, 31 6881 00004DF7 81F3FF7F0000 xor ebx, 7FFFh 6882 00004DFD EBD6 jmp short .sat_back 6883 6884 .append_copy_to_window: 6885 00004DFF 8D3485[C0B30000] lea esi, [mp3_synth_buf+eax*4] 6886 00004E06 8DBE00080000 lea edi, [esi+2048] 6887 00004E0C B912000000 mov ecx, 18 6888 00004E11 F3A5 rep movsd 6889 00004E13 E966FEFFFF jmp .append_copy_to_window_back 6890 6891 6892 ; =============== S U B R O U T I N E ======================================= 6893 6894 6895 synth_16bit_shift_2_slow: 6896 00004E18 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 0,2,0 6897 00004E1F 740E jz short .no_rdtsc_supported 6898 00004E21 0F31 rdtsc 6899 00004E23 2905[948D0000] sub [rdtsc_synth_dct], eax 6900 00004E29 1915[988D0000] sbb [rdtsc_synth_dct+4], edx 6901 6902 .no_rdtsc_supported: 6903 00004E2F BE[C8D30000] mov esi, mp3_sb_samples 6904 00004E34 8B3D[5C0A0100] mov edi, [mp3_samples_dst] 6905 00004E3A C705[680A0100]0000- mov dword [mp3_curr_channel], 0 6905 00004E42 0000 6906 6907 .synth_channel_lop: 6908 00004E44 56 push esi 6909 00004E45 57 push edi 6910 00004E46 893D[A8B30000] mov [mp3_curr_syn_dst], edi 6911 00004E4C C705[700A0100]0000- mov dword [mp3_curr_frame], 0 6911 00004E54 0000 6912 6913 .synth_frame_lop: 6914 00004E56 56 push esi 6915 00004E57 F605[1C8C0000]10 test byte [cpuid_flags], 10h 6916 00004E5E 740E jz short .no_rdtsc_supported@ 6917 00004E60 0F31 rdtsc 6918 00004E62 2905[AC8D0000] sub [rdtsc_dct32], eax 6919 00004E68 1915[B08D0000] sbb [rdtsc_dct32+4], edx 6920 6921 .no_rdtsc_supported@: 6922 00004E6E 8B15[680A0100] mov edx, [mp3_curr_channel] 6923 00004E74 8B0495[C0D30000] mov eax, [mp3_synth_index+edx*4] 6924 00004E7B 832C95[C0D30000]20 sub dword [mp3_synth_index+edx*4], 32 6925 00004E83 C1E20A shl edx, 10 6926 00004E86 25E0010000 and eax, 1E0h ; 1FFh-1Fh 6927 00004E8B 09D0 or eax, edx 6928 00004E8D A3[A4B30000] mov [mp3_curr_syn_index], eax 6929 00004E92 8B3D[A4B30000] mov edi, [mp3_curr_syn_index] 6930 00004E98 8D3CBD[C0B30000] lea edi, [mp3_synth_buf+edi*4] 6931 00004E9F E856E4FFFF call mp3_dct32_shift_2 ; call mp3_dct32_shift_&rate_shift 6932 00004EA4 F605[1C8C0000]10 test byte [cpuid_flags], 10h 6933 00004EAB 740E jz short .no_rdtsc_supported@@ 6934 00004EAD 0F31 rdtsc 6935 00004EAF 0105[AC8D0000] add [rdtsc_dct32], eax 6936 00004EB5 1115[B08D0000] adc [rdtsc_dct32+4], edx 6937 6938 .no_rdtsc_supported@@: 6939 00004EBB F605[1C8C0000]10 test byte [cpuid_flags], 10h 6940 00004EC2 740E jz short .no_rdtsc_supported@@@ 6941 00004EC4 0F31 rdtsc 6942 00004EC6 2905[C48D0000] sub [rdtsc_synth], eax 6943 00004ECC 1915[C88D0000] sbb [rdtsc_synth+4], edx 6944 6945 .no_rdtsc_supported@@@: 6946 00004ED2 E888000000 call mp3_synth_filter_this_16bit_shift_2_slow ; 6947 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 6948 00004ED7 F605[1C8C0000]10 test byte [cpuid_flags], 10h 6949 00004EDE 740E jz short .no_rdtsc_supported@@@@ 6950 00004EE0 0F31 rdtsc 6951 00004EE2 0105[C48D0000] add [rdtsc_synth], eax 6952 00004EE8 1115[C88D0000] adc [rdtsc_synth+4], edx 6953 6954 .no_rdtsc_supported@@@@: 6955 00004EEE 5E pop esi 6956 00004EEF A1[640A0100] mov eax, [mp3_samples_dst_step] 6957 00004EF4 C1E005 shl eax, 5 6958 00004EF7 8A0D[178C0000] mov cl, [option_rate_shift] 6959 00004EFD D3E8 shr eax, cl 6960 00004EFF 0105[A8B30000] add [mp3_curr_syn_dst], eax 6961 00004F05 81C680000000 add esi, 128 ; SBLIMIT*4 6962 00004F0B FF05[700A0100] inc dword [mp3_curr_frame] 6963 00004F11 A1[700A0100] mov eax, [mp3_curr_frame] 6964 00004F16 3B05[ACB30000] cmp eax, [mp3_nb_frames] 6965 00004F1C 0F8234FFFFFF jb .synth_frame_lop 6966 00004F22 5F pop edi 6967 00004F23 5E pop esi 6968 00004F24 033D[A0B30000] add edi, [mp3_bytes_per_sample] 6969 00004F2A 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 6970 00004F30 FF05[680A0100] inc dword [mp3_curr_channel] 6971 00004F36 A1[680A0100] mov eax, [mp3_curr_channel] 6972 00004F3B 3B05[98B30000] cmp eax, [mp3_output_num_channels] 6973 00004F41 0F82FDFEFFFF jb .synth_channel_lop 6974 00004F47 F605[1C8C0000]10 test byte [cpuid_flags], 10h 6975 00004F4E 740E jz short .no_rdtsc_supported@@@@@ 6976 00004F50 0F31 rdtsc 6977 00004F52 0105[948D0000] add [rdtsc_synth_dct], eax 6978 00004F58 1115[988D0000] adc [rdtsc_synth_dct+4], edx 6979 6980 .no_rdtsc_supported@@@@@: 6981 00004F5E C3 retn 6982 6983 6984 ; =============== S U B R O U T I N E ======================================= 6985 6986 6987 mp3_synth_filter_this_16bit_shift_2_slow: 6988 00004F5F A1[A4B30000] mov eax, [mp3_curr_syn_index] 6989 00004F64 A9E0010000 test eax, 1E0h 6990 00004F69 0F8482010000 jz .append_copy_to_window 6991 00004F6F 90 nop 6992 6993 .append_copy_to_window_back: 6994 00004F70 89C5 mov ebp, eax 6995 00004F72 81E5C0010000 and ebp, 1C0h 6996 00004F78 2520040000 and eax, 420h 6997 00004F7D 8D7010 lea esi, [eax+10h] 6998 00004F80 8D7830 lea edi, [eax+30h] 6999 00004F83 F7DD neg ebp 7000 00004F85 81E5C0010000 and ebp, 1C0h 7001 00004F8B 8B0D[A8B30000] mov ecx, [mp3_curr_syn_dst] 7002 7003 .samples_lop: 7004 00004F91 BB10001000 mov ebx, 100010h 7005 00004F96 8B14B5[C0B30000] mov edx, [mp3_synth_buf+esi*4] 7006 00004F9D 8B04AD[78050500] mov eax, [mp3_synth_win+ebp*4] 7007 00004FA4 F7EA imul edx 7008 00004FA6 01D3 add ebx, edx 7009 00004FA8 8B14B5[C0B40000] mov edx, [(mp3_synth_buf+100h)+esi*4] 7010 00004FAF 8B04AD[78060500] mov eax, [(mp3_synth_win+100h)+ebp*4] 7011 00004FB6 F7EA imul edx 7012 00004FB8 01D3 add ebx, edx 7013 00004FBA 8B14B5[C0B50000] mov edx, [(mp3_synth_buf+200h)+esi*4] 7014 00004FC1 8B04AD[78070500] mov eax, [(mp3_synth_win+200h)+ebp*4] 7015 00004FC8 F7EA imul edx 7016 00004FCA 01D3 add ebx, edx 7017 00004FCC 8B14B5[C0B60000] mov edx, [(mp3_synth_buf+300h)+esi*4] 7018 00004FD3 8B04AD[78080500] mov eax, [(mp3_synth_win+300h)+ebp*4] 7019 00004FDA F7EA imul edx 7020 00004FDC 01D3 add ebx, edx 7021 00004FDE 8B14B5[C0B70000] mov edx, [(mp3_synth_buf+400h)+esi*4] 7022 00004FE5 8B04AD[78090500] mov eax, [(mp3_synth_win+400h)+ebp*4] 7023 00004FEC F7EA imul edx 7024 00004FEE 01D3 add ebx, edx 7025 00004FF0 8B14B5[C0B80000] mov edx, [(mp3_synth_buf+500h)+esi*4] 7026 00004FF7 8B04AD[780A0500] mov eax, [(mp3_synth_win+500h)+ebp*4] 7027 00004FFE F7EA imul edx 7028 00005000 01D3 add ebx, edx 7029 00005002 8B14B5[C0B90000] mov edx, [(mp3_synth_buf+600h)+esi*4] 7030 00005009 8B04AD[780B0500] mov eax, [(mp3_synth_win+600h)+ebp*4] 7031 00005010 F7EA imul edx 7032 00005012 01D3 add ebx, edx 7033 00005014 8B14B5[C0BA0000] mov edx, [(mp3_synth_buf+700h)+esi*4] 7034 0000501B 8B04AD[780C0500] mov eax, [(mp3_synth_win+700h)+ebp*4] 7035 00005022 F7EA imul edx 7036 00005024 01D3 add ebx, edx 7037 00005026 8B14BD[C0B30000] mov edx, [mp3_synth_buf+edi*4] 7038 0000502D 8B04AD[F8050500] mov eax, [(mp3_synth_win+80h)+ebp*4] 7039 00005034 F7EA imul edx 7040 00005036 01D3 add ebx, edx 7041 00005038 8B14BD[C0B40000] mov edx, [(mp3_synth_buf+100h)+edi*4] 7042 0000503F 8B04AD[F8060500] mov eax, [(mp3_synth_win+180h)+ebp*4] 7043 00005046 F7EA imul edx 7044 00005048 01D3 add ebx, edx 7045 0000504A 8B14BD[C0B50000] mov edx, [(mp3_synth_buf+200h)+edi*4] 7046 00005051 8B04AD[F8070500] mov eax, [(mp3_synth_win+280h)+ebp*4] 7047 00005058 F7EA imul edx 7048 0000505A 01D3 add ebx, edx 7049 0000505C 8B14BD[C0B60000] mov edx, [(mp3_synth_buf+300h)+edi*4] 7050 00005063 8B04AD[F8080500] mov eax, [(mp3_synth_win+380h)+ebp*4] 7051 0000506A F7EA imul edx 7052 0000506C 01D3 add ebx, edx 7053 0000506E 8B14BD[C0B70000] mov edx, [(mp3_synth_buf+400h)+edi*4] 7054 00005075 8B04AD[F8090500] mov eax, [(mp3_synth_win+480h)+ebp*4] 7055 0000507C F7EA imul edx 7056 0000507E 01D3 add ebx, edx 7057 00005080 8B14BD[C0B80000] mov edx, [(mp3_synth_buf+500h)+edi*4] 7058 00005087 8B04AD[F80A0500] mov eax, [(mp3_synth_win+580h)+ebp*4] 7059 0000508E F7EA imul edx 7060 00005090 01D3 add ebx, edx 7061 00005092 8B14BD[C0B90000] mov edx, [(mp3_synth_buf+600h)+edi*4] 7062 00005099 8B04AD[F80B0500] mov eax, [(mp3_synth_win+680h)+ebp*4] 7063 000050A0 F7EA imul edx 7064 000050A2 01D3 add ebx, edx 7065 000050A4 8B14BD[C0BA0000] mov edx, [(mp3_synth_buf+700h)+edi*4] 7066 000050AB 8B04AD[F80C0500] mov eax, [(mp3_synth_win+780h)+ebp*4] 7067 000050B2 F7EA imul edx 7068 000050B4 01D3 add ebx, edx 7069 000050B6 81FB00002000 cmp ebx, 200000h 7070 000050BC 7328 jnb short .sat 7071 000050BE C1FB05 sar ebx, 5 7072 000050C1 81EB00800000 sub ebx, 8000h 7073 7074 .sat_back: 7075 000050C7 668919 mov [ecx], bx 7076 000050CA 030D[640A0100] add ecx, [mp3_samples_dst_step] 7077 000050D0 83C604 add esi, 4 7078 000050D3 83EF04 sub edi, 4 7079 000050D6 83C504 add ebp, 4 7080 000050D9 F7C51F000000 test ebp, 1Fh 7081 000050DF 0F85ACFEFFFF jnz .samples_lop 7082 000050E5 C3 retn 7083 7084 .sat: 7085 000050E6 C1FB1F sar ebx, 31 7086 000050E9 81F3FF7F0000 xor ebx, 7FFFh 7087 000050EF EBD6 jmp short .sat_back 7088 7089 .append_copy_to_window: 7090 000050F1 8D3485[C0B30000] lea esi, [mp3_synth_buf+eax*4] 7091 000050F8 8DBE00080000 lea edi, [esi+2048] 7092 000050FE B912000000 mov ecx, 18 7093 00005103 F3A5 rep movsd 7094 00005105 E966FEFFFF jmp .append_copy_to_window_back 7095 7096 7097 ; =============== S U B R O U T I N E ======================================= 7098 7099 7100 synth_8bit_shift_0_slow: 7101 0000510A F605[1C8C0000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 1,0,0 7102 00005111 740E jz short .no_rdtsc_supported 7103 00005113 0F31 rdtsc 7104 00005115 2905[948D0000] sub [rdtsc_synth_dct], eax 7105 0000511B 1915[988D0000] sbb [rdtsc_synth_dct+4], edx 7106 7107 .no_rdtsc_supported: 7108 00005121 BE[C8D30000] mov esi, mp3_sb_samples 7109 00005126 8B3D[5C0A0100] mov edi, [mp3_samples_dst] 7110 0000512C C705[680A0100]0000- mov dword [mp3_curr_channel], 0 7110 00005134 0000 7111 7112 .synth_channel_lop: 7113 00005136 56 push esi 7114 00005137 57 push edi 7115 00005138 893D[A8B30000] mov [mp3_curr_syn_dst], edi 7116 0000513E C705[700A0100]0000- mov dword [mp3_curr_frame], 0 7116 00005146 0000 7117 7118 .synth_frame_lop: 7119 00005148 56 push esi 7120 00005149 F605[1C8C0000]10 test byte [cpuid_flags], 10h 7121 00005150 740E jz short .no_rdtsc_supported@ 7122 00005152 0F31 rdtsc 7123 00005154 2905[AC8D0000] sub [rdtsc_dct32], eax 7124 0000515A 1915[B08D0000] sbb [rdtsc_dct32+4], edx 7125 7126 .no_rdtsc_supported@: 7127 00005160 8B15[680A0100] mov edx, [mp3_curr_channel] 7128 00005166 8B0495[C0D30000] mov eax, [mp3_synth_index+edx*4] 7129 0000516D 832C95[C0D30000]20 sub dword [mp3_synth_index+edx*4], 32 7130 00005175 C1E20A shl edx, 10 7131 00005178 25E0010000 and eax, 1E0h ; 1FFh-1Fh 7132 0000517D 09D0 or eax, edx 7133 0000517F A3[A4B30000] mov [mp3_curr_syn_index], eax 7134 00005184 8B3D[A4B30000] mov edi, [mp3_curr_syn_index] 7135 0000518A 8D3CBD[C0B30000] lea edi, [mp3_synth_buf+edi*4] 7136 00005191 E894D4FFFF call mp3_dct32_shift_0 7137 00005196 F605[1C8C0000]10 test byte [cpuid_flags], 10h 7138 0000519D 740E jz short .no_rdtsc_supported@@ 7139 0000519F 0F31 rdtsc 7140 000051A1 0105[AC8D0000] add [rdtsc_dct32], eax 7141 000051A7 1115[B08D0000] adc [rdtsc_dct32+4], edx 7142 7143 .no_rdtsc_supported@@: 7144 000051AD F605[1C8C0000]10 test byte [cpuid_flags], 10h 7145 000051B4 740E jz short .no_rdtsc_supported@@@ 7146 000051B6 0F31 rdtsc 7147 000051B8 2905[C48D0000] sub [rdtsc_synth], eax 7148 000051BE 1915[C88D0000] sbb [rdtsc_synth+4], edx 7149 7150 .no_rdtsc_supported@@@: 7151 000051C4 E888000000 call mp3_synth_filter_this_8bit_shift_0_slow ; 7152 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 7153 000051C9 F605[1C8C0000]10 test byte [cpuid_flags], 10h 7154 000051D0 740E jz short .no_rdtsc_supported@@@@ 7155 000051D2 0F31 rdtsc 7156 000051D4 0105[C48D0000] add [rdtsc_synth], eax 7157 000051DA 1115[C88D0000] adc [rdtsc_synth+4], edx 7158 7159 .no_rdtsc_supported@@@@: 7160 000051E0 5E pop esi 7161 000051E1 A1[640A0100] mov eax, [mp3_samples_dst_step] 7162 000051E6 C1E005 shl eax, 5 7163 000051E9 8A0D[178C0000] mov cl, [option_rate_shift] 7164 000051EF D3E8 shr eax, cl 7165 000051F1 0105[A8B30000] add [mp3_curr_syn_dst], eax 7166 000051F7 81C680000000 add esi, 128 ; SBLIMIT*4 7167 000051FD FF05[700A0100] inc dword [mp3_curr_frame] 7168 00005203 A1[700A0100] mov eax, [mp3_curr_frame] 7169 00005208 3B05[ACB30000] cmp eax, [mp3_nb_frames] 7170 0000520E 0F8234FFFFFF jb .synth_frame_lop 7171 00005214 5F pop edi 7172 00005215 5E pop esi 7173 00005216 033D[A0B30000] add edi, [mp3_bytes_per_sample] 7174 0000521C 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 7175 00005222 FF05[680A0100] inc dword [mp3_curr_channel] 7176 00005228 A1[680A0100] mov eax, [mp3_curr_channel] 7177 0000522D 3B05[98B30000] cmp eax, [mp3_output_num_channels] 7178 00005233 0F82FDFEFFFF jb .synth_channel_lop 7179 00005239 F605[1C8C0000]10 test byte [cpuid_flags], 10h 7180 00005240 740E jz short .no_rdtsc_supported@@@@@ 7181 00005242 0F31 rdtsc 7182 00005244 0105[948D0000] add [rdtsc_synth_dct], eax 7183 0000524A 1115[988D0000] adc [rdtsc_synth_dct+4], edx 7184 7185 .no_rdtsc_supported@@@@@: 7186 00005250 C3 retn 7187 7188 7189 ; =============== S U B R O U T I N E ======================================= 7190 7191 7192 mp3_synth_filter_this_8bit_shift_0_slow: 7193 00005251 A1[A4B30000] mov eax, [mp3_curr_syn_index] 7194 00005256 A9E0010000 test eax, 1E0h 7195 0000525B 0F8471010000 jz .append_copy_to_window 7196 00005261 90 nop 7197 7198 .append_copy_to_window_back: 7199 00005262 89C5 mov ebp, eax 7200 00005264 81E5C0010000 and ebp, 1C0h 7201 0000526A 2520040000 and eax, 420h 7202 0000526F 8D7010 lea esi, [eax+10h] 7203 00005272 8D7830 lea edi, [eax+30h] 7204 00005275 F7DD neg ebp 7205 00005277 81E5C0010000 and ebp, 1C0h 7206 0000527D 8B0D[A8B30000] mov ecx, [mp3_curr_syn_dst] 7207 7208 .samples_lop: 7209 00005283 BB00101000 mov ebx, 101000h 7210 00005288 8B14B5[C0B30000] mov edx, [mp3_synth_buf+esi*4] 7211 0000528F 8B04AD[78050500] mov eax, [mp3_synth_win+ebp*4] 7212 00005296 F7EA imul edx 7213 00005298 01D3 add ebx, edx 7214 0000529A 8B14B5[C0B40000] mov edx, [(mp3_synth_buf+100h)+esi*4] 7215 000052A1 8B04AD[78060500] mov eax, [(mp3_synth_win+100h)+ebp*4] 7216 000052A8 F7EA imul edx 7217 000052AA 01D3 add ebx, edx 7218 000052AC 8B14B5[C0B50000] mov edx, [(mp3_synth_buf+200h)+esi*4] 7219 000052B3 8B04AD[78070500] mov eax, [(mp3_synth_win+200h)+ebp*4] 7220 000052BA F7EA imul edx 7221 000052BC 01D3 add ebx, edx 7222 000052BE 8B14B5[C0B60000] mov edx, [(mp3_synth_buf+300h)+esi*4] 7223 000052C5 8B04AD[78080500] mov eax, [(mp3_synth_win+300h)+ebp*4] 7224 000052CC F7EA imul edx 7225 000052CE 01D3 add ebx, edx 7226 000052D0 8B14B5[C0B70000] mov edx, [(mp3_synth_buf+400h)+esi*4] 7227 000052D7 8B04AD[78090500] mov eax, [(mp3_synth_win+400h)+ebp*4] 7228 000052DE F7EA imul edx 7229 000052E0 01D3 add ebx, edx 7230 000052E2 8B14B5[C0B80000] mov edx, [(mp3_synth_buf+500h)+esi*4] 7231 000052E9 8B04AD[780A0500] mov eax, [(mp3_synth_win+500h)+ebp*4] 7232 000052F0 F7EA imul edx 7233 000052F2 01D3 add ebx, edx 7234 000052F4 8B14B5[C0B90000] mov edx, [(mp3_synth_buf+600h)+esi*4] 7235 000052FB 8B04AD[780B0500] mov eax, [(mp3_synth_win+600h)+ebp*4] 7236 00005302 F7EA imul edx 7237 00005304 01D3 add ebx, edx 7238 00005306 8B14B5[C0BA0000] mov edx, [(mp3_synth_buf+700h)+esi*4] 7239 0000530D 8B04AD[780C0500] mov eax, [(mp3_synth_win+700h)+ebp*4] 7240 00005314 F7EA imul edx 7241 00005316 01D3 add ebx, edx 7242 00005318 8B14BD[C0B30000] mov edx, [mp3_synth_buf+edi*4] 7243 0000531F 8B04AD[F8050500] mov eax, [(mp3_synth_win+80h)+ebp*4] 7244 00005326 F7EA imul edx 7245 00005328 01D3 add ebx, edx 7246 0000532A 8B14BD[C0B40000] mov edx, [(mp3_synth_buf+100h)+edi*4] 7247 00005331 8B04AD[F8060500] mov eax, [(mp3_synth_win+180h)+ebp*4] 7248 00005338 F7EA imul edx 7249 0000533A 01D3 add ebx, edx 7250 0000533C 8B14BD[C0B50000] mov edx, [(mp3_synth_buf+200h)+edi*4] 7251 00005343 8B04AD[F8070500] mov eax, [(mp3_synth_win+280h)+ebp*4] 7252 0000534A F7EA imul edx 7253 0000534C 01D3 add ebx, edx 7254 0000534E 8B14BD[C0B60000] mov edx, [(mp3_synth_buf+300h)+edi*4] 7255 00005355 8B04AD[F8080500] mov eax, [(mp3_synth_win+380h)+ebp*4] 7256 0000535C F7EA imul edx 7257 0000535E 01D3 add ebx, edx 7258 00005360 8B14BD[C0B70000] mov edx, [(mp3_synth_buf+400h)+edi*4] 7259 00005367 8B04AD[F8090500] mov eax, [(mp3_synth_win+480h)+ebp*4] 7260 0000536E F7EA imul edx 7261 00005370 01D3 add ebx, edx 7262 00005372 8B14BD[C0B80000] mov edx, [(mp3_synth_buf+500h)+edi*4] 7263 00005379 8B04AD[F80A0500] mov eax, [(mp3_synth_win+580h)+ebp*4] 7264 00005380 F7EA imul edx 7265 00005382 01D3 add ebx, edx 7266 00005384 8B14BD[C0B90000] mov edx, [(mp3_synth_buf+600h)+edi*4] 7267 0000538B 8B04AD[F80B0500] mov eax, [(mp3_synth_win+680h)+ebp*4] 7268 00005392 F7EA imul edx 7269 00005394 01D3 add ebx, edx 7270 00005396 8B14BD[C0BA0000] mov edx, [(mp3_synth_buf+700h)+edi*4] 7271 0000539D 8B04AD[F80C0500] mov eax, [(mp3_synth_win+780h)+ebp*4] 7272 000053A4 F7EA imul edx 7273 000053A6 01D3 add ebx, edx 7274 000053A8 81FB00002000 cmp ebx, 200000h 7275 000053AE 731B jnb short .sat 7276 000053B0 C1FB0D sar ebx, 13 7277 7278 .sat_back: 7279 000053B3 8819 mov [ecx], bl 7280 000053B5 030D[640A0100] add ecx, [mp3_samples_dst_step] 7281 000053BB 46 inc esi 7282 000053BC 4F dec edi 7283 000053BD 45 inc ebp 7284 000053BE F7C51F000000 test ebp, 1Fh 7285 000053C4 0F85B9FEFFFF jnz .samples_lop 7286 000053CA C3 retn 7287 7288 .sat: 7289 000053CB C1FB1F sar ebx, 31 7290 000053CE F7D3 not ebx 7291 000053D0 EBE1 jmp short .sat_back 7292 7293 .append_copy_to_window: 7294 000053D2 8D3485[C0B30000] lea esi, [mp3_synth_buf+eax*4] 7295 000053D9 8DBE00080000 lea edi, [esi+2048] 7296 000053DF B912000000 mov ecx, 18 7297 000053E4 F3A5 rep movsd 7298 000053E6 E977FEFFFF jmp .append_copy_to_window_back 7299 7300 7301 ; =============== S U B R O U T I N E ======================================= 7302 7303 7304 synth_8bit_shift_1_slow: 7305 000053EB F605[1C8C0000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 1,1,0 7306 ; force_8bit, rate_shift=1, force_fast=0 7307 000053F2 740E jz short .no_rdtsc_supported 7308 000053F4 0F31 rdtsc 7309 000053F6 2905[948D0000] sub [rdtsc_synth_dct], eax 7310 000053FC 1915[988D0000] sbb [rdtsc_synth_dct+4], edx 7311 7312 .no_rdtsc_supported: 7313 00005402 BE[C8D30000] mov esi, mp3_sb_samples 7314 00005407 8B3D[5C0A0100] mov edi, [mp3_samples_dst] 7315 0000540D C705[680A0100]0000- mov dword [mp3_curr_channel], 0 7315 00005415 0000 7316 7317 .synth_channel_lop: 7318 00005417 56 push esi 7319 00005418 57 push edi 7320 00005419 893D[A8B30000] mov [mp3_curr_syn_dst], edi 7321 0000541F C705[700A0100]0000- mov dword [mp3_curr_frame], 0 7321 00005427 0000 7322 7323 .synth_frame_lop: 7324 00005429 56 push esi 7325 0000542A F605[1C8C0000]10 test byte [cpuid_flags], 10h 7326 00005431 740E jz short .no_rdtsc_supported@ 7327 00005433 0F31 rdtsc 7328 00005435 2905[AC8D0000] sub [rdtsc_dct32], eax 7329 0000543B 1915[B08D0000] sbb [rdtsc_dct32+4], edx 7330 7331 .no_rdtsc_supported@: 7332 00005441 8B15[680A0100] mov edx, [mp3_curr_channel] 7333 00005447 8B0495[C0D30000] mov eax, [mp3_synth_index+edx*4] 7334 0000544E 832C95[C0D30000]20 sub dword [mp3_synth_index+edx*4], 32 7335 00005456 C1E20A shl edx, 10 7336 00005459 25E0010000 and eax, 1E0h ; 1FFh-1Fh 7337 0000545E 09D0 or eax, edx 7338 00005460 A3[A4B30000] mov [mp3_curr_syn_index], eax 7339 00005465 8B3D[A4B30000] mov edi, [mp3_curr_syn_index] 7340 0000546B 8D3CBD[C0B30000] lea edi, [mp3_synth_buf+edi*4] 7341 00005472 E893DAFFFF call mp3_dct32_shift_1 ; mp3_dct32_shift_&rate_shift ; rate_shift = 1 7342 00005477 F605[1C8C0000]10 test byte [cpuid_flags], 10h 7343 0000547E 740E jz short .no_rdtsc_supported@@ 7344 00005480 0F31 rdtsc 7345 00005482 0105[AC8D0000] add [rdtsc_dct32], eax 7346 00005488 1115[B08D0000] adc [rdtsc_dct32+4], edx 7347 7348 .no_rdtsc_supported@@: 7349 0000548E F605[1C8C0000]10 test byte [cpuid_flags], 10h 7350 00005495 740E jz short .no_rdtsc_supported@@@ 7351 00005497 0F31 rdtsc 7352 00005499 2905[C48D0000] sub [rdtsc_synth], eax 7353 0000549F 1915[C88D0000] sbb [rdtsc_synth+4], edx 7354 7355 .no_rdtsc_supported@@@: 7356 000054A5 E888000000 call mp3_synth_filter_this_8bit_shift_1_slow ; 7357 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 7358 000054AA F605[1C8C0000]10 test byte [cpuid_flags], 10h 7359 000054B1 740E jz short .no_rdtsc_supported@@@@ 7360 000054B3 0F31 rdtsc 7361 000054B5 0105[C48D0000] add [rdtsc_synth], eax 7362 000054BB 1115[C88D0000] adc [rdtsc_synth+4], edx 7363 7364 .no_rdtsc_supported@@@@: 7365 000054C1 5E pop esi 7366 000054C2 A1[640A0100] mov eax, [mp3_samples_dst_step] 7367 000054C7 C1E005 shl eax, 5 ; mul32 7368 000054CA 8A0D[178C0000] mov cl, [option_rate_shift] 7369 000054D0 D3E8 shr eax, cl 7370 000054D2 0105[A8B30000] add [mp3_curr_syn_dst], eax 7371 000054D8 81C680000000 add esi, 128 ; SBLIMIT*4 7372 000054DE FF05[700A0100] inc dword [mp3_curr_frame] 7373 000054E4 A1[700A0100] mov eax, [mp3_curr_frame] 7374 000054E9 3B05[ACB30000] cmp eax, [mp3_nb_frames] 7375 000054EF 0F8234FFFFFF jb .synth_frame_lop 7376 000054F5 5F pop edi 7377 000054F6 5E pop esi 7378 000054F7 033D[A0B30000] add edi, [mp3_bytes_per_sample] 7379 000054FD 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 7380 00005503 FF05[680A0100] inc dword [mp3_curr_channel] 7381 00005509 A1[680A0100] mov eax, [mp3_curr_channel] 7382 0000550E 3B05[98B30000] cmp eax, [mp3_output_num_channels] 7383 00005514 0F82FDFEFFFF jb .synth_channel_lop 7384 0000551A F605[1C8C0000]10 test byte [cpuid_flags], 10h 7385 00005521 740E jz short .no_rdtsc_supported@@@@@ 7386 00005523 0F31 rdtsc 7387 00005525 0105[948D0000] add [rdtsc_synth_dct], eax 7388 0000552B 1115[988D0000] adc [rdtsc_synth_dct+4], edx 7389 7390 .no_rdtsc_supported@@@@@: 7391 00005531 C3 retn 7392 7393 7394 ; =============== S U B R O U T I N E ======================================= 7395 7396 7397 mp3_synth_filter_this_8bit_shift_1_slow: 7398 00005532 A1[A4B30000] mov eax, [mp3_curr_syn_index] ; IF LONG_WINDOW 7399 00005537 A9E0010000 test eax, 1E0h ; 1FFh-1Fh 7400 0000553C 0F8477010000 jz .append_copy_to_window 7401 00005542 90 nop 7402 7403 .append_copy_to_window_back: 7404 00005543 89C5 mov ebp, eax 7405 00005545 81E5C0010000 and ebp, 1C0h ; 1FFh-1Fh-20h 7406 0000554B 2520040000 and eax, 420h ; 20h+(1 shl 10) 7407 00005550 8D7010 lea esi, [eax+10h] 7408 00005553 8D7830 lea edi, [eax+30h] 7409 00005556 F7DD neg ebp 7410 00005558 81E5C0010000 and ebp, 1C0h 7411 0000555E 8B0D[A8B30000] mov ecx, [mp3_curr_syn_dst] 7412 7413 .samples_lop: 7414 00005564 BB00101000 mov ebx, 101000h ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 7415 ; @@out_shift equ (OUT_SHIFT_slow+(8*force_8bit)) 7416 ; OUT_SHIFT_slow = 5 ; @@out_shift = 13 7417 00005569 8B14B5[C0B30000] mov edx, [mp3_synth_buf+esi*4] ; @@SUM8 @@sum,@@win1,0,@@syn1 7418 ; @@SUM8 macro sum,win,ww,syn 7419 ; IRP nn,0,1,2,3,4,5,6,7 7420 00005570 8B04AD[78050500] mov eax, [mp3_synth_win+ebp*4] 7421 00005577 F7EA imul edx 7422 00005579 01D3 add ebx, edx 7423 0000557B 8B14B5[C0B40000] mov edx, [(mp3_synth_buf+100h)+esi*4] ; @@syn1 equ esi 7424 00005582 8B04AD[78060500] mov eax, [(mp3_synth_win+100h)+ebp*4] ; @@win1 equ ebp 7425 00005589 F7EA imul edx 7426 0000558B 01D3 add ebx, edx 7427 0000558D 8B14B5[C0B50000] mov edx, [(mp3_synth_buf+200h)+esi*4] 7428 00005594 8B04AD[78070500] mov eax, [(mp3_synth_win+200h)+ebp*4] 7429 0000559B F7EA imul edx 7430 0000559D 01D3 add ebx, edx 7431 0000559F 8B14B5[C0B60000] mov edx, [(mp3_synth_buf+300h)+esi*4] 7432 000055A6 8B04AD[78080500] mov eax, [(mp3_synth_win+300h)+ebp*4] 7433 000055AD F7EA imul edx 7434 000055AF 01D3 add ebx, edx 7435 000055B1 8B14B5[C0B70000] mov edx, [(mp3_synth_buf+400h)+esi*4] 7436 000055B8 8B04AD[78090500] mov eax, [(mp3_synth_win+400h)+ebp*4] 7437 000055BF F7EA imul edx 7438 000055C1 01D3 add ebx, edx 7439 000055C3 8B14B5[C0B80000] mov edx, [(mp3_synth_buf+500h)+esi*4] 7440 000055CA 8B04AD[780A0500] mov eax, [(mp3_synth_win+500h)+ebp*4] 7441 000055D1 F7EA imul edx 7442 000055D3 01D3 add ebx, edx 7443 000055D5 8B14B5[C0B90000] mov edx, [(mp3_synth_buf+600h)+esi*4] 7444 000055DC 8B04AD[780B0500] mov eax, [(mp3_synth_win+600h)+ebp*4] 7445 000055E3 F7EA imul edx 7446 000055E5 01D3 add ebx, edx 7447 000055E7 8B14B5[C0BA0000] mov edx, [(mp3_synth_buf+700h)+esi*4] 7448 000055EE 8B04AD[780C0500] mov eax, [(mp3_synth_win+700h)+ebp*4] 7449 000055F5 F7EA imul edx 7450 000055F7 01D3 add ebx, edx 7451 000055F9 8B14BD[C0B30000] mov edx, [mp3_synth_buf+edi*4] 7452 00005600 8B04AD[F8050500] mov eax, [(mp3_synth_win+80h)+ebp*4] 7453 00005607 F7EA imul edx 7454 00005609 01D3 add ebx, edx 7455 0000560B 8B14BD[C0B40000] mov edx, [(mp3_synth_buf+100h)+edi*4] ; @@SUM8 @@sum,@@win1,32,@@syn2 7456 ; @@syn2 equ edi 7457 ; @@win1 equ ebp 7458 00005612 8B04AD[F8060500] mov eax, [(mp3_synth_win+180h)+ebp*4] 7459 00005619 F7EA imul edx 7460 0000561B 01D3 add ebx, edx 7461 0000561D 8B14BD[C0B50000] mov edx, [(mp3_synth_buf+200h)+edi*4] 7462 00005624 8B04AD[F8070500] mov eax, [(mp3_synth_win+280h)+ebp*4] 7463 0000562B F7EA imul edx 7464 0000562D 01D3 add ebx, edx 7465 0000562F 8B14BD[C0B60000] mov edx, [(mp3_synth_buf+300h)+edi*4] 7466 00005636 8B04AD[F8080500] mov eax, [(mp3_synth_win+380h)+ebp*4] 7467 0000563D F7EA imul edx 7468 0000563F 01D3 add ebx, edx 7469 00005641 8B14BD[C0B70000] mov edx, [(mp3_synth_buf+400h)+edi*4] 7470 00005648 8B04AD[F8090500] mov eax, [(mp3_synth_win+480h)+ebp*4] 7471 0000564F F7EA imul edx 7472 00005651 01D3 add ebx, edx 7473 00005653 8B14BD[C0B80000] mov edx, [(mp3_synth_buf+500h)+edi*4] 7474 0000565A 8B04AD[F80A0500] mov eax, [(mp3_synth_win+580h)+ebp*4] 7475 00005661 F7EA imul edx 7476 00005663 01D3 add ebx, edx 7477 00005665 8B14BD[C0B90000] mov edx, [(mp3_synth_buf+600h)+edi*4] 7478 0000566C 8B04AD[F80B0500] mov eax, [(mp3_synth_win+680h)+ebp*4] 7479 00005673 F7EA imul edx 7480 00005675 01D3 add ebx, edx 7481 00005677 8B14BD[C0BA0000] mov edx, [(mp3_synth_buf+700h)+edi*4] 7482 0000567E 8B04AD[F80C0500] mov eax, [(mp3_synth_win+780h)+ebp*4] 7483 00005685 F7EA imul edx 7484 00005687 01D3 add ebx, edx 7485 00005689 81FB00002000 cmp ebx, 200000h ; cmp @@sum,100h SHL (@@out_shift) 7486 0000568F 7321 jnb short .sat 7487 00005691 C1FB0D sar ebx, 13 ; sar @@sum,(@@out_shift) 7488 7489 .sat_back: 7490 00005694 8819 mov [ecx], bl 7491 00005696 030D[640A0100] add ecx, [mp3_samples_dst_step] 7492 0000569C 83C602 add esi, 2 7493 0000569F 83EF02 sub edi, 2 7494 000056A2 83C502 add ebp, 2 7495 000056A5 F7C51F000000 test ebp, 1Fh 7496 000056AB 0F85B3FEFFFF jnz .samples_lop 7497 000056B1 C3 retn 7498 7499 .sat: 7500 000056B2 C1FB1F sar ebx, 31 ; sar @@sum,31 ; FFFFFFFFh,00000000h 7501 000056B5 F7D3 not ebx 7502 000056B7 EBDB jmp short .sat_back 7503 7504 .append_copy_to_window: 7505 000056B9 8D3485[C0B30000] lea esi, [mp3_synth_buf+eax*4] 7506 000056C0 8DBE00080000 lea edi, [esi+2048] 7507 000056C6 B912000000 mov ecx, 18 7508 000056CB F3A5 rep movsd 7509 000056CD E971FEFFFF jmp .append_copy_to_window_back 7510 7511 7512 ; =============== S U B R O U T I N E ======================================= 7513 7514 7515 synth_8bit_shift_2_slow: 7516 000056D2 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; SYNTH_MACRO 1,2,0 ; 8bit, quarter rate 7517 ; force_8bit, rate_shift=2, force_fast=0 7518 000056D9 740E jz short .no_rdtsc_supported ; timelog_start rdtsc_synth_dct 7519 000056DB 0F31 rdtsc 7520 000056DD 2905[948D0000] sub [rdtsc_synth_dct], eax 7521 000056E3 1915[988D0000] sbb [rdtsc_synth_dct+4], edx 7522 7523 .no_rdtsc_supported: 7524 000056E9 BE[C8D30000] mov esi, mp3_sb_samples 7525 000056EE 8B3D[5C0A0100] mov edi, [mp3_samples_dst] 7526 000056F4 C705[680A0100]0000- mov dword [mp3_curr_channel], 0 7526 000056FC 0000 7527 7528 .synth_channel_lop: 7529 000056FE 56 push esi 7530 000056FF 57 push edi 7531 00005700 893D[A8B30000] mov [mp3_curr_syn_dst], edi 7532 00005706 C705[700A0100]0000- mov dword [mp3_curr_frame], 0 7532 0000570E 0000 7533 7534 .synth_frame_lop: 7535 00005710 56 push esi ; sb_samples[ch][i] 7536 00005711 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_start rdtsc_dct32 7537 00005718 740E jz short .no_rdtsc_supported@ 7538 0000571A 0F31 rdtsc 7539 0000571C 2905[AC8D0000] sub [rdtsc_dct32], eax 7540 00005722 1915[B08D0000] sbb [rdtsc_dct32+4], edx 7541 7542 .no_rdtsc_supported@: 7543 00005728 8B15[680A0100] mov edx, [mp3_curr_channel] 7544 0000572E 8B0495[C0D30000] mov eax, [mp3_synth_index+edx*4] 7545 00005735 832C95[C0D30000]20 sub dword [mp3_synth_index+edx*4], 32 7546 0000573D C1E20A shl edx, 10 ; channel*1024 7547 00005740 25E0010000 and eax, 1E0h ; 1FFh-1Fh ; index(0..511), align 32 7548 00005745 09D0 or eax, edx 7549 00005747 A3[A4B30000] mov [mp3_curr_syn_index], eax 7550 0000574C 8B3D[A4B30000] mov edi, [mp3_curr_syn_index] 7551 00005752 8D3CBD[C0B30000] lea edi, [mp3_synth_buf+edi*4] ; IF SYNTH32 7552 00005759 E89CDBFFFF call mp3_dct32_shift_2 ; mp3_dct32_shift_&rate_shift ; rate_shift=2 7553 0000575E F605[1C8C0000]10 test byte [cpuid_flags], 10h 7554 00005765 740E jz short .no_rdtsc_supported@@ ; timelog_end rdtsc_dct32 7555 00005767 0F31 rdtsc 7556 00005769 0105[AC8D0000] add [rdtsc_dct32], eax 7557 0000576F 1115[B08D0000] adc [rdtsc_dct32+4], edx 7558 7559 .no_rdtsc_supported@@: 7560 00005775 F605[1C8C0000]10 test byte [cpuid_flags], 10h 7561 0000577C 740E jz short .no_rdtsc_supported@@@ ; timelog_start rdtsc_synth 7562 0000577E 0F31 rdtsc 7563 00005780 2905[C48D0000] sub [rdtsc_synth], eax 7564 00005786 1915[C88D0000] sbb [rdtsc_synth+4], edx 7565 7566 .no_rdtsc_supported@@@: 7567 0000578C E888000000 call mp3_synth_filter_this_8bit_shift_2_slow ; 7568 ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast 7569 00005791 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_synth 7570 00005798 740E jz short .no_rdtsc_supported@@@@ 7571 0000579A 0F31 rdtsc 7572 0000579C 0105[C48D0000] add [rdtsc_synth], eax 7573 000057A2 1115[C88D0000] adc [rdtsc_synth+4], edx 7574 7575 .no_rdtsc_supported@@@@: 7576 000057A8 5E pop esi ; src 7577 000057A9 A1[640A0100] mov eax, [mp3_samples_dst_step] 7578 000057AE C1E005 shl eax, 5 ; mul32 7579 000057B1 8A0D[178C0000] mov cl, [option_rate_shift] ; IF with_rate_shift 7580 000057B7 D3E8 shr eax, cl 7581 000057B9 0105[A8B30000] add [mp3_curr_syn_dst], eax 7582 000057BF 81C680000000 add esi, 128 ; SBLIMIT*4 ; src+32*4 7583 000057C5 FF05[700A0100] inc dword [mp3_curr_frame] 7584 000057CB A1[700A0100] mov eax, [mp3_curr_frame] 7585 000057D0 3B05[ACB30000] cmp eax, [mp3_nb_frames] 7586 000057D6 0F8234FFFFFF jb .synth_frame_lop 7587 000057DC 5F pop edi 7588 000057DD 5E pop esi 7589 000057DE 033D[A0B30000] add edi, [mp3_bytes_per_sample] 7590 000057E4 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 ; src 7591 000057EA FF05[680A0100] inc dword [mp3_curr_channel] 7592 000057F0 A1[680A0100] mov eax, [mp3_curr_channel] 7593 000057F5 3B05[98B30000] cmp eax, [mp3_output_num_channels] 7594 000057FB 0F82FDFEFFFF jb .synth_channel_lop 7595 00005801 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_synth_dct 7596 00005808 740E jz short .no_rdtsc_supported@@@@@ 7597 0000580A 0F31 rdtsc 7598 0000580C 0105[948D0000] add [rdtsc_synth_dct], eax 7599 00005812 1115[988D0000] adc [rdtsc_synth_dct+4], edx 7600 7601 .no_rdtsc_supported@@@@@: 7602 00005818 C3 retn 7603 7604 ; =============== S U B R O U T I N E ======================================= 7605 7606 7607 mp3_synth_filter_this_8bit_shift_2_slow: 7608 00005819 A1[A4B30000] mov eax, [mp3_curr_syn_index] 7609 0000581E A9E0010000 test eax, 1E0h ; 1FFh-1Fh ; offset 7610 00005823 0F8477010000 jz .append_copy_to_window 7611 00005829 90 nop 7612 7613 .append_copy_to_window_back: 7614 0000582A 89C5 mov ebp, eax ; @@win1 7615 0000582C 81E5C0010000 and ebp, 1C0h ; 1FFh-1Fh-20h 7616 00005832 2520040000 and eax, 420h ; 20h+(1 shl 10) ; bit5 and channel 7617 00005837 8D7010 lea esi, [eax+10h] ; @@syn1 7618 0000583A 8D7830 lea edi, [eax+30h] ; @@syn2 7619 0000583D F7DD neg ebp 7620 0000583F 81E5C0010000 and ebp, 1C0h ; 1FFh-1Fh-20h 7621 00005845 8B0D[A8B30000] mov ecx, [mp3_curr_syn_dst] ; @@dst 7622 7623 .samples_lop: 7624 0000584B BB00101000 mov ebx, 101000h ; mov @@sum,(80h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 7625 ; @@out_shift equ (OUT_SHIFT_slow+(8*force_8bit)) 7626 ; @@out_shift = 13 ; OUT_SHIFT_slow = 5 7627 00005850 8B14B5[C0B30000] mov edx, [mp3_synth_buf+esi*4] ; @@SUM8 @@sum,@@win1,0,@@syn1 7628 ; @@SUM8 macro sum,win,ww, syn 7629 ; IRP nn,0,1,2,3,4,5,6,7 7630 ; [mp3_synth_buf+syn*4+(nn*64*4)] 7631 00005857 8B04AD[78050500] mov eax, [mp3_synth_win+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] 7632 0000585E F7EA imul edx ; 64bit = 32bit * 32bit 7633 00005860 01D3 add ebx, edx ; add sum,edx ; sum from MSW of result 7634 00005862 8B14B5[C0B40000] mov edx, [(mp3_synth_buf+100h)+esi*4] ; 7635 ; [mp3_synth_buf+syn*4+(nn*64*4)] ; nn=1 7636 00005869 8B04AD[78060500] mov eax, [(mp3_synth_win+100h)+ebp*4] ; 7637 ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] ; nn=1 7638 00005870 F7EA imul edx 7639 00005872 01D3 add ebx, edx 7640 00005874 8B14B5[C0B50000] mov edx, [(mp3_synth_buf+200h)+esi*4] 7641 0000587B 8B04AD[78070500] mov eax, [(mp3_synth_win+200h)+ebp*4] 7642 00005882 F7EA imul edx 7643 00005884 01D3 add ebx, edx 7644 00005886 8B14B5[C0B60000] mov edx, [(mp3_synth_buf+300h)+esi*4] 7645 0000588D 8B04AD[78080500] mov eax, [(mp3_synth_win+300h)+ebp*4] 7646 00005894 F7EA imul edx 7647 00005896 01D3 add ebx, edx 7648 00005898 8B14B5[C0B70000] mov edx, [(mp3_synth_buf+400h)+esi*4] ; 7649 ; [mp3_synth_buf+syn*4+(nn*64*4)] ; nn=4 7650 0000589F 8B04AD[78090500] mov eax, [(mp3_synth_win+400h)+ebp*4] ; 7651 ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] ; nn=4 7652 000058A6 F7EA imul edx 7653 000058A8 01D3 add ebx, edx 7654 000058AA 8B14B5[C0B80000] mov edx, [(mp3_synth_buf+500h)+esi*4] 7655 000058B1 8B04AD[780A0500] mov eax, [(mp3_synth_win+500h)+ebp*4] 7656 000058B8 F7EA imul edx 7657 000058BA 01D3 add ebx, edx 7658 000058BC 8B14B5[C0B90000] mov edx, [(mp3_synth_buf+600h)+esi*4] 7659 000058C3 8B04AD[780B0500] mov eax, [(mp3_synth_win+600h)+ebp*4] 7660 000058CA F7EA imul edx 7661 000058CC 01D3 add ebx, edx 7662 000058CE 8B14B5[C0BA0000] mov edx, [(mp3_synth_buf+700h)+esi*4] 7663 000058D5 8B04AD[780C0500] mov eax, [(mp3_synth_win+700h)+ebp*4] 7664 000058DC F7EA imul edx 7665 000058DE 01D3 add ebx, edx 7666 000058E0 8B14BD[C0B30000] mov edx, [mp3_synth_buf+edi*4] ; @@SUM8 @@sum,@@win1,32,@@syn2 7667 000058E7 8B04AD[F8050500] mov eax, [(mp3_synth_win+80h)+ebp*4] 7668 000058EE F7EA imul edx 7669 000058F0 01D3 add ebx, edx 7670 000058F2 8B14BD[C0B40000] mov edx, [(mp3_synth_buf+100h)+edi*4] 7671 000058F9 8B04AD[F8060500] mov eax, [(mp3_synth_win+180h)+ebp*4] 7672 00005900 F7EA imul edx 7673 00005902 01D3 add ebx, edx 7674 00005904 8B14BD[C0B50000] mov edx, [(mp3_synth_buf+200h)+edi*4] 7675 0000590B 8B04AD[F8070500] mov eax, [(mp3_synth_win+280h)+ebp*4] 7676 00005912 F7EA imul edx 7677 00005914 01D3 add ebx, edx 7678 00005916 8B14BD[C0B60000] mov edx, [(mp3_synth_buf+300h)+edi*4] 7679 0000591D 8B04AD[F8080500] mov eax, [(mp3_synth_win+380h)+ebp*4] 7680 00005924 F7EA imul edx 7681 00005926 01D3 add ebx, edx 7682 00005928 8B14BD[C0B70000] mov edx, [(mp3_synth_buf+400h)+edi*4] 7683 0000592F 8B04AD[F8090500] mov eax, [(mp3_synth_win+480h)+ebp*4] 7684 00005936 F7EA imul edx 7685 00005938 01D3 add ebx, edx 7686 0000593A 8B14BD[C0B80000] mov edx, [(mp3_synth_buf+500h)+edi*4] 7687 00005941 8B04AD[F80A0500] mov eax, [(mp3_synth_win+580h)+ebp*4] 7688 00005948 F7EA imul edx 7689 0000594A 01D3 add ebx, edx 7690 0000594C 8B14BD[C0B90000] mov edx, [(mp3_synth_buf+600h)+edi*4] 7691 00005953 8B04AD[F80B0500] mov eax, [(mp3_synth_win+680h)+ebp*4] 7692 0000595A F7EA imul edx 7693 0000595C 01D3 add ebx, edx 7694 0000595E 8B14BD[C0BA0000] mov edx, [(mp3_synth_buf+700h)+edi*4] 7695 ; [mp3_synth_buf+syn*4+(nn*64*4)] ; nn=7 7696 00005965 8B04AD[F80C0500] mov eax, [(mp3_synth_win+780h)+ebp*4] 7697 ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] ; nn=7 7698 0000596C F7EA imul edx 7699 0000596E 01D3 add ebx, edx 7700 00005970 81FB00002000 cmp ebx, 200000h ; cmp @@sum,100h SHL (@@out_shift) ; out_shift=13 7701 00005976 7321 jnb short .sat 7702 00005978 C1FB0D sar ebx, 13 ; sar @@sum,(@@out_shift) 7703 7704 .sat_back: 7705 0000597B 8819 mov [ecx], bl ; mov byte ptr [@@dst],@@sum_8bit 7706 0000597D 030D[640A0100] add ecx, [mp3_samples_dst_step] 7707 00005983 83C604 add esi, 4 ; add @@syn1,1 shl rate_shift ; rate_shift=2 7708 00005986 83EF04 sub edi, 4 ; add @@syn2,1 shl rate_shift 7709 00005989 83C504 add ebp, 4 ; add @@win1,1 shl rate_shift 7710 0000598C F7C51F000000 test ebp, 1Fh ; test @@win1,1Fh 7711 00005992 0F85B3FEFFFF jnz .samples_lop 7712 00005998 C3 retn 7713 7714 .sat: 7715 00005999 C1FB1F sar ebx, 31 ; sar @@sum,31 ; FFFFFFFFh,00000000h 7716 0000599C F7D3 not ebx 7717 0000599E EBDB jmp short .sat_back 7718 7719 .append_copy_to_window: 7720 000059A0 8D3485[C0B30000] lea esi, [mp3_synth_buf+eax*4] ; IF SYNTH32 7721 000059A7 8DBE00080000 lea edi, [esi+2048] ; [esi+512*4] 7722 000059AD B912000000 mov ecx, 18 ; (12h*4)/4 7723 000059B2 F3A5 rep movsd 7724 000059B4 E971FEFFFF jmp .append_copy_to_window_back 7725 7726 7727 ; =============== S U B R O U T I N E ======================================= 7728 7729 7730 mp3_any_init_synth_window: 7731 000059B9 31D2 xor edx, edx ; index (0..100h) 7732 000059BB 31C9 xor ecx, ecx ; delta.val 7733 000059BD 898C12[78050500] mov [mp3_synth_win+edx*2], ecx 7734 7735 .synth_lop: 7736 000059C4 0FBF9C12[6A8E0000] movsx ebx, word [mp3_synth_win_src+edx*2] 7737 000059CC 01D9 add ecx, ebx 7738 000059CE 89C8 mov eax, ecx 7739 000059D0 803D[188C0000]00 cmp byte [option_fast], 0 7740 000059D7 7403 jz short .not_fast 7741 000059D9 C1F805 sar eax, 5 7742 7743 .not_fast: 7744 000059DC 803D[188C0000]00 cmp byte [option_fast], 0 7745 000059E3 7503 jnz short .not_slow 7746 000059E5 C1E00E shl eax, 14 ; (WFRAC_BITS_slow-WFRAC_BITS_default) 7747 7748 .not_slow: 7749 000059E8 42 inc edx ; index (1..100h) 7750 000059E9 BB00020000 mov ebx, 200h 7751 000059EE 29D3 sub ebx, edx ; 1FFh..100h 7752 000059F0 89049D[78050500] mov [mp3_synth_win+ebx*4], eax 7753 000059F7 F7C23F000000 test edx, 3Fh 7754 000059FD 7402 jz short .synth_keep_sign 7755 000059FF F7D8 neg eax 7756 7757 .synth_keep_sign: 7758 00005A01 890495[78050500] mov [mp3_synth_win+edx*4], eax 7759 00005A08 81FA00010000 cmp edx, 100h 7760 00005A0E 72B4 jb short .synth_lop 7761 00005A10 31D2 xor edx, edx 7762 7763 .synth_neg_lop: 7764 00005A12 F7C230000000 test edx, 30h ; skip 0..0Fh (only negate 10h..3Fh) 7765 00005A18 7407 jz short .synth_neg_next 7766 00005A1A F71C95[78050500] neg dword [mp3_synth_win+edx*4] 7767 7768 .synth_neg_next: 7769 00005A21 42 inc edx 7770 00005A22 81FA00020000 cmp edx, 200h 7771 00005A28 72E8 jb short .synth_neg_lop 7772 00005A2A 31D2 xor edx, edx 7773 7774 .synth_swap_lop: 7775 00005A2C 89D0 mov eax, edx 7776 00005A2E 83E03F and eax, 3Fh 7777 00005A31 83E811 sub eax, 17 ; swap win [(17..31)] with win[(17..31)+32) 7778 00005A34 83F80E cmp eax, 14 ; 31-17 7779 00005A37 7715 ja short .synth_swap_next 7780 00005A39 8B0495[78050500] mov eax, [mp3_synth_win+edx*4] 7781 00005A40 870495[F8050500] xchg eax, [(mp3_synth_win+80h)+edx*4] 7782 00005A47 890495[78050500] mov [mp3_synth_win+edx*4], eax 7783 7784 .synth_swap_next: 7785 00005A4E 42 inc edx 7786 00005A4F 81FA00020000 cmp edx, 200h 7787 00005A55 72D5 jb short .synth_swap_lop 7788 00005A57 31D2 xor edx, edx 7789 7790 .synth_zero_lop: 7791 00005A59 C70495[B8050500]00- mov dword [(mp3_synth_win+40h)+edx*4], 0 7791 00005A61 000000 7792 00005A64 83C240 add edx, 40h 7793 00005A67 81FA00020000 cmp edx, 200h 7794 00005A6D 72EA jb short .synth_zero_lop 7795 00005A6F BE[78050500] mov esi, mp3_synth_win 7796 00005A74 8DBE00080000 lea edi, [esi+2048] ; [esi+512*4] 7797 00005A7A B900020000 mov ecx, 512 ; append another copy 7798 00005A7F F3A5 rep movsd 7799 00005A81 C3 retn 7800 7801 7802 ; =============== S U B R O U T I N E ======================================= 7803 7804 7805 mp3_init_post_collapse: 7806 00005A82 803D[188C0000]00 cmp byte [option_fast], 0 7807 00005A89 7411 jz short .not_fast 7808 00005A8B BE[78050500] mov esi, mp3_synth_win 7809 00005A90 89F7 mov edi, esi 7810 00005A92 B900040000 mov ecx, 1024 ; 512*(1+LONG_WINDOW) 7811 7812 .collapse_lop: 7813 00005A97 AD lodsd ; collapse 32bit to 16bit 7814 ; (that's slightly faster due to better caching) 7815 00005A98 66AB stosw 7816 00005A9A E2FB loop .collapse_lop 7817 7818 .not_fast: 7819 00005A9C C3 retn 7820 7821 7822 ; =============== S U B R O U T I N E ======================================= 7823 7824 7825 mp3_any_init_band_indices: 7826 00005A9D BE[9C960000] mov esi, mp3_band_size_long 7827 00005AA2 BF[8CED0100] mov edi, mp3_band_index_long 7828 00005AA7 BB09000000 mov ebx, 9 7829 7830 .band_index_lop_i: 7831 00005AAC 31C0 xor eax, eax 7832 00005AAE B916000000 mov ecx, 22 7833 7834 .band_index_lop_j: 7835 00005AB3 66AB stosw 7836 00005AB5 0FB616 movzx edx, byte [esi] 7837 00005AB8 01D0 add eax, edx 7838 00005ABA 46 inc esi 7839 00005ABB E2F6 loop .band_index_lop_j 7840 00005ABD 83C10A add ecx, 10 7841 00005AC0 F366AB rep stosw 7842 00005AC3 4B dec ebx 7843 00005AC4 75E6 jnz short .band_index_lop_i 7844 00005AC6 C3 retn 7845 7846 7847 ; =============== S U B R O U T I N E ======================================= 7848 7849 7850 mp3_any_init_lsf_sf_expand: 7851 00005AC7 BE[3A8E0000] mov esi, mp3_lsf_sf_expand_init_table 7852 00005ACC BF[78150500] mov edi, mp3_lsf_sf_expand_exploded_table 7853 00005AD1 31D2 xor edx, edx ; curr.index 7854 00005AD3 31DB xor ebx, ebx ; curr.base 7855 7856 .lop: 7857 00005AD5 663B5606 cmp dx, [esi+6] ; nextbase 7858 00005AD9 7207 jb short .inrange 7859 00005ADB 668B5E06 mov bx, [esi+6] 7860 00005ADF 83C608 add esi, 8 ; next entry 7861 7862 .inrange: 7863 00005AE2 89D0 mov eax, edx 7864 00005AE4 29D8 sub eax, ebx 7865 00005AE6 8A0E mov cl, [esi] 7866 00005AE8 D3E8 shr eax, cl ; div2 7867 00005AEA F67603 div byte [esi+3] ; mod3 ; [2]=slen[3] 7868 00005AED 886703 mov [edi+3], ah 7869 00005AF0 B400 mov ah, 0 ; eax=div.result 7870 00005AF2 F67602 div byte [esi+2] ; mod2 ; [2]=slen[2] 7871 00005AF5 886702 mov [edi+2], ah ; remainder 7872 00005AF8 B400 mov ah, 0 7873 00005AFA F67601 div byte [esi+1] ; mod1 ; [1]=slen[1] 7874 00005AFD 668907 mov [edi], ax ; [0]=slen[0] 7875 00005B00 668B4604 mov ax, [esi+4] ; [4]=tindex2 7876 00005B04 66894704 mov [edi+4], ax ; [5]=force_preflag 7877 00005B08 83C708 add edi, 8 7878 00005B0B 42 inc edx ; curr.index ; next 7879 00005B0C 81FA00040000 cmp edx, 1024 ; 512+512 7880 00005B12 72C1 jb short .lop 7881 00005B14 C3 retn 7882 7883 7884 ; =============== S U B R O U T I N E ======================================= 7885 7886 7887 mp3_any_init_huff_tables: 7888 00005B15 BD[D4900000] mov ebp, huff_tree_list_data 7889 00005B1A BE[549B0000] mov esi, huff_tree_list_numbits 7890 00005B1F BA01000000 mov edx, 1 ; idx (table 01h..11h) 7891 7892 .huffman_table_lop: 7893 00005B24 31C0 xor eax, eax 7894 00005B26 BF[A43F0500] mov edi, mp3_huff_tmp_bits 7895 00005B2B B940000000 mov ecx, 40h ; 100h/4 ; 100h x 8bit 7896 00005B30 F3AB rep stosd 7897 00005B32 BF[A4400500] mov edi, mp3_huff_tmp_codes 7898 00005B37 B980000000 mov ecx, 80h ; 100h/2 ; 100h x 16bit 7899 00005B3C F3AB rep stosd 7900 00005B3E 31DB xor ebx, ebx 7901 7902 .huff_entry_lop: 7903 00005B40 0FB67D00 movzx edi, byte [ebp+0] 7904 00005B44 45 inc ebp ; dst=data 7905 00005B45 AC lodsb ; numbits 7906 00005B46 8887[A43F0500] mov [mp3_huff_tmp_bits+edi], al 7907 00005B4C B120 mov cl, 32 7908 00005B4E 28C1 sub cl, al ; 32-numbits 7909 00005B50 D3EB shr ebx, cl 7910 00005B52 66899C3F[A4400500] mov word [mp3_huff_tmp_codes+edi*2], bx 7911 00005B5A 43 inc ebx ; next.code 7912 00005B5B D3E3 shl ebx, cl ; shift back to MSBs 7913 00005B5D 75E1 jnz short .huff_entry_lop 7914 00005B5F 60 pusha 7915 00005B60 B800010000 mov eax, 100h ; nb_codes 7916 00005B65 BB[A43F0500] mov ebx, mp3_huff_tmp_bits ; bits 7917 00005B6A BE[A4400500] mov esi, mp3_huff_tmp_codes ; codes 7918 00005B6F E837020000 call mp3_build_huff_table_root ; make table 7919 00005B74 61 popa 7920 00005B75 42 inc edx ; idx 7921 00005B76 83FA12 cmp edx, 12h 7922 00005B79 75A9 jnz short .huffman_table_lop ; next table 7923 00005B7B C3 retn 7924 7925 7926 ; =============== S U B R O U T I N E ======================================= 7927 7928 7929 mp3_integer_init_is_stereo_lsf: 7930 00005B7C 31FF xor edi, edi 7931 7932 .lsf_lop: 7933 00005B7E 89FE mov esi, edi 7934 00005B80 83E63F and esi, 3Fh 7935 00005B83 46 inc esi 7936 00005B84 D1EE shr esi, 1 7937 00005B86 F7C740000000 test edi, 40h 7938 00005B8C 7402 jz short .lsf_no_shift 7939 00005B8E D1E6 shl esi, 1 7940 7941 .lsf_no_shift: 7942 00005B90 BA00000040 mov edx, 40000000h ; aka mul 1.000 7943 00005B95 83C604 add esi, 4 7944 00005B98 F7C780000000 test edi, 80h ; 2*40h 7945 00005B9E 7408 jz short .no_ms_stereo 7946 00005BA0 BA9A79825A mov edx, 5A82799Ah ; 2D413CCDh*2 ; aka mul 1.414 7947 00005BA5 83EE02 sub esi, 2 7948 7949 .no_ms_stereo: 7950 00005BA8 89F1 mov ecx, esi 7951 00005BAA C1E902 shr ecx, 2 ; msbs 7952 00005BAD 83E603 and esi, 3 ; lsbs 7953 00005BB0 8B04B5[949A0000] mov eax, [mp3_is_table_lsf_src+esi*4] 7954 00005BB7 D3E8 shr eax, cl 7955 00005BB9 F7C701000000 test edi, 1 7956 00005BBF 7501 jnz short .lsf_no_swap 7957 00005BC1 92 xchg eax, edx 7958 7959 .lsf_no_swap: 7960 00005BC2 8904FD[78FD0400] mov [mp3_is_table_lsf+edi*8], eax 7961 00005BC9 8914FD[7CFD0400] mov [(mp3_is_table_lsf+4)+edi*8], edx 7962 00005BD0 47 inc edi 7963 00005BD1 81FF00010000 cmp edi, 100h 7964 00005BD7 72A5 jb short .lsf_lop 7965 00005BD9 C3 retn 7966 7967 7968 ; =============== S U B R O U T I N E ======================================= 7969 7970 7971 mp3_integer_init_mdct_windows: 7972 00005BDA BF[F8F80400] mov edi, mp3_mdct_win 7973 00005BDF BE[1C980000] mov esi, mp3_mdct_win_src 7974 00005BE4 B990000000 mov ecx, 144 ; 36*4 7975 00005BE9 F3A5 rep movsd 7976 00005BEB BE[F8F80400] mov esi, mp3_mdct_win 7977 00005BF0 BF[38FB0400] mov edi, (mp3_mdct_win+240h) 7978 00005BF5 B948000000 mov ecx, 72 ; 4*36/2 ; that is, 4*36 entry pairs 7979 7980 .mdct_lop_dupe: 7981 00005BFA A5 movsd ; copy normal, [4..7][even] = +[0..3][even 7982 00005BFB AD lodsd 7983 00005BFC F7D8 neg eax ; copy negated, [4..7][odd] = -[0..3][odd] 7984 00005BFE AB stosd 7985 00005BFF E2F9 loop .mdct_lop_dupe 7986 00005C01 C3 retn 7987 7988 7989 ; =============== S U B R O U T I N E ======================================= 7990 7991 7992 mp3_integer_init_table_4_3: 7993 00005C02 803D[188C0000]00 cmp byte [option_fast], 0 7994 00005C09 B048 mov al, 72 ; 100-6-VFRAC_BITS_slow 7995 00005C0B 7402 jz short .this_vfrac 7996 00005C0D B04C mov al, 76 ; 100-6-VFRAC_BITS_fast 7997 7998 .this_vfrac: 7999 00005C0F A2[CC090100] mov [mp3_curr_vfrac_bits], al 8000 00005C14 31FF xor edi, edi 8001 8002 .table_4_3_lop: 8003 00005C16 57 push edi ; for i=1 to TABLE_4_3_SIZE-1 8004 00005C17 89F8 mov eax, edi 8005 00005C19 C1E802 shr eax, 2 8006 00005C1C F7E0 mul eax 8007 00005C1E F7E0 mul eax 8008 00005C20 31DB xor ebx, ebx 8009 00005C22 E8A2000000 call cbrt96 8010 00005C27 020D[CC090100] add cl, [mp3_curr_vfrac_bits] 8011 00005C2D 5F pop edi 8012 8013 .inner_lop: 8014 00005C2E 89F8 mov eax, edi 8015 00005C30 83E003 and eax, 3 8016 00005C33 8B0485[A49A0000] mov eax, [mp3_pow2_quarters+eax*4] 8017 00005C3A F7E3 mul ebx 8018 00005C3C 88CD mov ch, cl 8019 00005C3E 09D2 or edx, edx 8020 00005C40 7904 jns short .this 8021 00005C42 D1EA shr edx, 1 8022 00005C44 FECD dec ch 8023 8024 .this: 8025 00005C46 8914BD[08700200] mov [mp3_table_4_3_value+edi*4], edx 8026 00005C4D 88AF[CCEF0100] mov [mp3_table_4_3_exp+edi], ch 8027 00005C53 47 inc edi 8028 00005C54 F7C703000000 test edi, 3 8029 00005C5A 75D2 jnz short .inner_lop 8030 00005C5C 81FF3C800000 cmp edi, 803Ch 8031 00005C62 72B2 jb short .table_4_3_lop 8032 00005C64 C3 retn 8033 8034 8035 ; =============== S U B R O U T I N E ======================================= 8036 8037 8038 mp3_integer_init_exponent: 8039 00005C65 BF[F8780400] mov edi, mp3_expval_table 8040 00005C6A 31D2 xor edx, edx 8041 8042 .exponent_lop: 8043 00005C6C 89D0 mov eax, edx ; val=i 8044 00005C6E 89D3 mov ebx, edx 8045 00005C70 89D1 mov ecx, edx 8046 00005C72 C1EB04 shr ebx, 4 8047 00005C75 C1E906 shr ecx, 6 ; 4+2 8048 00005C78 83E00F and eax, 0Fh ; val=i AND 0Fh 8049 00005C7B 83E303 and ebx, 3 8050 00005C7E 8D1C83 lea ebx, [ebx+eax*4] ; (0..0Fh)*4+(0..3) 8051 00005C81 8B049D[08700200] mov eax, [mp3_table_4_3_value+ebx*4] 8052 00005C88 09C0 or eax, eax 8053 00005C8A 741A jz short .this 8054 00005C8C 2A8B[CCEF0100] sub cl, [mp3_table_4_3_exp+ebx] 8055 00005C92 770D ja short .left_shift 8056 00005C94 F6D9 neg cl 8057 00005C96 D3E8 shr eax, cl 8058 00005C98 80F91F cmp cl, 1Fh 8059 00005C9B 7609 jbe short .this 8060 00005C9D 31C0 xor eax, eax 8061 00005C9F EB05 jmp short .this 8062 8063 .left_shift: 8064 00005CA1 B8FFFFFF7F mov eax, 7FFFFFFFh 8065 8066 .this: 8067 00005CA6 AB stosd 8068 00005CA7 42 inc edx 8069 00005CA8 81FA00200000 cmp edx, 2000h 8070 00005CAE 72BC jb short .exponent_lop 8071 00005CB0 BE[F8780400] mov esi, mp3_expval_table 8072 00005CB5 BF[F8700400] mov edi, mp3_exp_table 8073 00005CBA B900020000 mov ecx, 200h 8074 8075 .exponent_dupe_lop: 8076 00005CBF 8B4604 mov eax, [esi+4] 8077 00005CC2 AB stosd 8078 00005CC3 83C640 add esi, 40h 8079 00005CC6 E2F7 loop .exponent_dupe_lop 8080 00005CC8 C3 retn 8081 8082 8083 ; =============== S U B R O U T I N E ======================================= 8084 8085 8086 cbrt96: 8087 00005CC9 83EC18 sub esp, 18h ; cube root, val^(1/3), from https://gist.github.com/anonymous/729557 8088 ; in: ebx:edx:eax = unsigned 96bit input (integer) 8089 ; out: ebx = unsigned 32bit result (with fractional bits) 8090 ; out: cl = number of fractional bits 8091 00005CCC 890424 mov [esp], eax 8092 00005CCF 89542404 mov [esp+4], edx 8093 00005CD3 895C2408 mov [esp+8], ebx 8094 00005CD7 C744240C00000000 mov dword [esp+0Ch], 0 8095 00005CDF C744241000000000 mov dword [esp+10h], 0 8096 00005CE7 C744241400000000 mov dword [esp+14h], 0 8097 00005CEF 31DB xor ebx, ebx ; result.value 8098 00005CF1 B100 mov cl, 0 ; result.fraction 8099 00005CF3 09D0 or eax, edx ; skip if zero 8100 00005CF5 742F jz short .pre_shift_done 8101 8102 .pre_shift_lop: 8103 00005CF7 F7442408000000E0 test dword [esp+8], 0E0000000h 8104 00005CFF 7525 jnz short .pre_shift_done 8105 00005D01 D12424 shl dword [esp], 1 8106 00005D04 D1542404 rcl dword [esp+4], 1 8107 00005D08 D1542408 rcl dword [esp+8], 1 8108 00005D0C D12424 shl dword [esp], 1 8109 00005D0F D1542404 rcl dword [esp+4], 1 8110 00005D13 D1542408 rcl dword [esp+8], 1 8111 00005D17 D12424 shl dword [esp], 1 8112 00005D1A D1542404 rcl dword [esp+4], 1 8113 00005D1E D1542408 rcl dword [esp+8], 1 8114 00005D22 FEC1 inc cl 8115 00005D24 EBD1 jmp short .pre_shift_lop 8116 8117 .pre_shift_done: 8118 00005D26 B520 mov ch, 20h ; loopcount 8119 8120 .lop: 8121 00005D28 01DB add ebx, ebx ; result*2 8122 00005D2A 89D8 mov eax, ebx ; y 8123 00005D2C 43 inc ebx ; result+1 8124 00005D2D F7E3 mul ebx ; y*(y+1) 8125 00005D2F 89C6 mov esi, eax 8126 00005D31 89D7 mov edi, edx 8127 00005D33 31ED xor ebp, ebp 8128 00005D35 F9 stc 8129 00005D36 11F6 adc esi, esi ; y*(y+1)*2+1 8130 00005D38 11FF adc edi, edi 8131 00005D3A 11ED adc ebp, ebp 8132 00005D3C 01C6 add esi, eax 8133 00005D3E 11D7 adc edi, edx ; y*(y+1)*3+1 8134 00005D40 83D500 adc ebp, 0 8135 00005D43 D12424 shl dword [esp], 1 8136 00005D46 D1542404 rcl dword [esp+4], 1 8137 00005D4A D1542408 rcl dword [esp+8], 1 ; shl 3 8138 00005D4E D154240C rcl dword [esp+0Ch], 1 8139 00005D52 D1542410 rcl dword [esp+10h], 1 8140 00005D56 D1542414 rcl dword [esp+14h], 1 8141 00005D5A D12424 shl dword [esp], 1 8142 00005D5D D1542404 rcl dword [esp+4], 1 8143 00005D61 D1542408 rcl dword [esp+8], 1 8144 00005D65 D154240C rcl dword [esp+0Ch], 1 8145 00005D69 D1542410 rcl dword [esp+10h], 1 8146 00005D6D D1542414 rcl dword [esp+14h], 1 8147 00005D71 D12424 shl dword [esp], 1 8148 00005D74 D1542404 rcl dword [esp+4], 1 8149 00005D78 D1542408 rcl dword [esp+8], 1 8150 00005D7C D154240C rcl dword [esp+0Ch], 1 8151 00005D80 D1542410 rcl dword [esp+10h], 1 8152 00005D84 D1542414 rcl dword [esp+14h], 1 8153 00005D88 2974240C sub [esp+0Ch], esi 8154 00005D8C 197C2410 sbb [esp+10h], edi ; sub/compare 8155 00005D90 196C2414 sbb [esp+14h], ebp 8156 00005D94 730D jnb short .next 8157 00005D96 4B dec ebx 8158 00005D97 0174240C add [esp+0Ch], esi 8159 00005D9B 117C2410 adc [esp+10h], edi ; undo 8160 00005D9F 116C2414 adc [esp+14h], ebp 8161 8162 .next: 8163 00005DA3 FECD dec ch 8164 00005DA5 7581 jnz short .lop 8165 00005DA7 83C418 add esp, 18h 8166 mp3_init_log_constants: 8167 00005DAA C3 retn 8168 8169 ;mp3_init_log_constants: 8170 ; retn 8171 8172 ; =============== S U B R O U T I N E ======================================= 8173 8174 8175 mp3_build_huff_table_root: 8176 00005DAB A3[A8420500] mov [_@@nb_codes], eax ; "init_vlc" 8177 00005DB0 C705[AC420500]0000- mov dword [_@@prefix_numbits], 0 8177 00005DB8 0000 8178 00005DBA C705[B0420500]0000- mov dword [_@@prefix_pattern], 0 8178 00005DC2 0000 8179 00005DC4 60 pusha 8180 00005DC5 89C1 mov ecx, eax 8181 00005DC7 31C0 xor eax, eax 8182 8183 .prescan_lop: 8184 00005DC9 3A03 cmp al, [ebx] 8185 00005DCB 7702 ja short .prescan_next 8186 00005DCD 8A03 mov al, [ebx] 8187 8188 .prescan_next: 8189 00005DCF 43 inc ebx 8190 00005DD0 E2F7 loop .prescan_lop 8191 00005DD2 3C09 cmp al, 9 ; CHILD_BITS 8192 00005DD4 7202 jb short .prescan_this_limit 8193 00005DD6 B009 mov al, 9 8194 8195 .prescan_this_limit: 8196 00005DD8 A3[A4420500] mov [_@@table_nb_bits], eax 8197 00005DDD 61 popa 8198 8199 mp3_build_huff_table_recursive_child: 8200 00005DDE 8B0D[A4420500] mov ecx, [_@@table_nb_bits] 8201 00005DE4 B801000000 mov eax, 1 8202 00005DE9 D3E0 shl eax, cl 8203 00005DEB A3[B4420500] mov [_@@curr_table_size], eax 8204 00005DF0 48 dec eax 8205 00005DF1 A3[B8420500] mov [_@@curr_table_mask], eax 8206 00005DF6 60 pusha 8207 00005DF7 8B1D[B89A0000] mov ebx, [mp3_huff_num_entries] 8208 00005DFD 891D[BC420500] mov [_@@curr_table_index], ebx 8209 00005E03 031D[B4420500] add ebx, [_@@curr_table_size] 8210 00005E09 891D[B89A0000] mov [mp3_huff_num_entries], ebx 8211 00005E0F 813D[B89A0000]002E- cmp dword [mp3_huff_num_entries], 11776 ; HUFF_TREE_SIZE/4 8211 00005E17 0000 8212 00005E19 0F8781AFFFFF ja fatalunexpected 8213 00005E1F 61 popa 8214 00005E20 BF[8C350100] mov edi, huff_tree_buf 8215 00005E25 A1[BC420500] mov eax, [_@@curr_table_index] 8216 00005E2A 66890497 mov [edi+edx*4], ax 8217 00005E2E A1[A4420500] mov eax, [_@@table_nb_bits] 8218 00005E33 F7D8 neg eax 8219 00005E35 6689449702 mov [edi+edx*4+2], ax 8220 00005E3A BF[8C350100] mov edi, huff_tree_buf 8221 00005E3F 8B15[BC420500] mov edx, [_@@curr_table_index] 8222 00005E45 8B0D[B4420500] mov ecx, [_@@curr_table_size] 8223 8224 .clear_table_lop: 8225 00005E4B 66C70497FFFF mov word [edi+edx*4], 0FFFFh 8226 00005E51 66C74497020000 mov word [edi+edx*4+2], 0 8227 00005E58 42 inc edx 8228 00005E59 E2F0 loop .clear_table_lop 8229 00005E5B 53 push ebx 8230 00005E5C 56 push esi 8231 00005E5D 31D2 xor edx, edx 8232 8233 .make_table_lop: 8234 00005E5F 0FB60B movzx ecx, byte [ebx] 8235 00005E62 0FB706 movzx eax, word [esi] 8236 00005E65 2B0D[AC420500] sub ecx, [_@@prefix_numbits] 8237 00005E6B 7E74 jle short .make_table_lop_next 8238 00005E6D D3E8 shr eax, cl 8239 00005E6F 3B05[B0420500] cmp eax, [_@@prefix_pattern] 8240 00005E75 756A jnz short .make_table_lop_next 8241 00005E77 BF[8C350100] mov edi, huff_tree_buf 8242 00005E7C 0FB706 movzx eax, word [esi] 8243 00005E7F 2B0D[A4420500] sub ecx, [_@@table_nb_bits] 8244 00005E85 773E ja short .create_child_table 8245 00005E87 F7D9 neg ecx 8246 00005E89 D3E0 shl eax, cl 8247 00005E8B 2305[B8420500] and eax, [_@@curr_table_mask] 8248 00005E91 0305[BC420500] add eax, [_@@curr_table_index] 8249 00005E97 8D3C87 lea edi, [edi+eax*4] 8250 00005E9A B801000000 mov eax, 1 8251 00005E9F D3E0 shl eax, cl 8252 00005EA1 89C1 mov ecx, eax 8253 00005EA3 0FB603 movzx eax, byte [ebx] 8254 00005EA6 2B05[AC420500] sub eax, [_@@prefix_numbits] 8255 8256 .make_rept_lop: 8257 00005EAC 66837F0200 cmp word [edi+2], 0 8258 00005EB1 0F85E9AEFFFF jnz fatalunexpected 8259 00005EB7 668917 mov [edi], dx 8260 00005EBA 66894702 mov [edi+2], ax 8261 00005EBE 83C704 add edi, 4 8262 00005EC1 E2E9 loop .make_rept_lop 8263 00005EC3 EB1C jmp short .make_table_lop_next 8264 8265 .create_child_table: 8266 00005EC5 D3E8 shr eax, cl 8267 00005EC7 2305[B8420500] and eax, [_@@curr_table_mask] 8268 00005ECD 0305[BC420500] add eax, [_@@curr_table_index] 8269 00005ED3 F7D9 neg ecx 8270 00005ED5 66394C8702 cmp [edi+eax*4+2], cx 8271 00005EDA 7C05 jl short .make_table_lop_next 8272 00005EDC 66894C8702 mov [edi+eax*4+2], cx 8273 8274 .make_table_lop_next: 8275 00005EE1 83C602 add esi, 2 8276 00005EE4 43 inc ebx 8277 00005EE5 42 inc edx 8278 00005EE6 3B15[A8420500] cmp edx, [_@@nb_codes] 8279 00005EEC 0F826DFFFFFF jb .make_table_lop 8280 00005EF2 5E pop esi 8281 00005EF3 5B pop ebx 8282 00005EF4 8B0D[B4420500] mov ecx, [_@@curr_table_size] 8283 00005EFA 8B15[BC420500] mov edx, [_@@curr_table_index] 8284 8285 .make_child_tables_lop: 8286 00005F00 BF[8C350100] mov edi, huff_tree_buf 8287 00005F05 0FBF449702 movsx eax, word [edi+edx*4+2] 8288 00005F0A 83F800 cmp eax, 0 8289 00005F0D 796D jns short .make_child_tables_lop_next 8290 00005F0F F7D8 neg eax 8291 00005F11 3B05[A4420500] cmp eax, [_@@table_nb_bits] 8292 00005F17 7605 jbe short .make_child_tables_this 8293 00005F19 A1[A4420500] mov eax, [_@@table_nb_bits] 8294 8295 .make_child_tables_this: 8296 00005F1E 51 push ecx 8297 00005F1F 52 push edx 8298 00005F20 FF35[BC420500] push dword [_@@curr_table_index] 8299 00005F26 FF35[A4420500] push dword [_@@table_nb_bits] 8300 00005F2C FF35[AC420500] push dword [_@@prefix_numbits] 8301 00005F32 FF35[B0420500] push dword [_@@prefix_pattern] 8302 00005F38 8B0D[A4420500] mov ecx, [_@@table_nb_bits] 8303 00005F3E A3[A4420500] mov [_@@table_nb_bits], eax 8304 00005F43 010D[AC420500] add [_@@prefix_numbits], ecx 8305 00005F49 D325[B0420500] shl dword [_@@prefix_pattern], cl 8306 00005F4F 89D0 mov eax, edx 8307 00005F51 2B05[BC420500] sub eax, [_@@curr_table_index] 8308 00005F57 0905[B0420500] or [_@@prefix_pattern], eax 8309 00005F5D E87CFEFFFF call mp3_build_huff_table_recursive_child 8310 00005F62 8F05[B0420500] pop dword [_@@prefix_pattern] 8311 00005F68 8F05[AC420500] pop dword [_@@prefix_numbits] 8312 00005F6E 8F05[A4420500] pop dword [_@@table_nb_bits] 8313 00005F74 8F05[BC420500] pop dword [_@@curr_table_index] 8314 00005F7A 5A pop edx 8315 00005F7B 59 pop ecx 8316 8317 .make_child_tables_lop_next: 8318 00005F7C 42 inc edx 8319 00005F7D E281 loop .make_child_tables_lop 8320 00005F7F C3 retn 8321 8322 8323 ; =============== S U B R O U T I N E ======================================= 8324 8325 8326 mp3_exclude_id3_and_tag: 8327 00005F80 8B35[CC420500] mov esi, [stream_pos] 8328 00005F86 8B0D[D0420500] mov ecx, [bytes_left] 8329 00005F8C 83F90A cmp ecx, 10 8330 00005F8F 7240 jb short .no_id3 8331 00005F91 8B06 mov eax, [esi] 8332 00005F93 25FFFFFF00 and eax, 0FFFFFFh 8333 ;cmp eax, '3DI' ; "ID3" 8334 ; 20/10/2024 8335 00005F98 3D49443300 cmp eax, 'ID3' ; FASM & NASM syntax 8336 00005F9D 7532 jnz short .no_id3 8337 00005F9F 8B4606 mov eax, [esi+6] 8338 00005FA2 A980808080 test eax, 80808080h 8339 00005FA7 7528 jnz short .no_id3 8340 8341 .xlat_4x7bit_to_28bit: 8342 00005FA9 86E0 xchg al, ah 8343 00005FAB D0E0 shl al, 1 8344 00005FAD 66D1E0 shl ax, 1 8345 00005FB0 66C1E802 shr ax, 2 8346 00005FB4 C1C810 ror eax, 16 8347 00005FB7 86E0 xchg al, ah 8348 00005FB9 D0E0 shl al, 1 8349 00005FBB 66D1E0 shl ax, 1 8350 00005FBE C1E802 shr eax, 2 8351 00005FC1 83C00A add eax, 10 8352 00005FC4 39C1 cmp ecx, eax 8353 00005FC6 7209 jb short .no_id3 8354 00005FC8 01C6 add esi, eax 8355 00005FCA 29C1 sub ecx, eax 8356 00005FCC A3[4C0A0100] mov [mp3_id3_size], eax 8357 8358 .no_id3: 8359 00005FD1 BA80000000 mov edx, 80h 8360 00005FD6 39D1 cmp ecx, edx 8361 00005FD8 721F jb short .no_tag_or_ext 8362 00005FDA 8B440E80 mov eax, [esi+ecx-80h] 8363 00005FDE 25FFFFFF00 and eax, 0FFFFFFh 8364 ;cmp eax, 'GAT' ; "TAG" 8365 ; 20/10/2024 8366 00005FE3 3D54414700 cmp eax, 'TAG' ; FASM & NASM syntax 8367 00005FE8 0F8421010000 jz .got_tag_size_edx 8368 ;cmp eax, 'TXE' 8369 00005FEE 3D45585400 cmp eax, 'EXT' 8370 00005FF3 0F8416010000 jz .got_tag_size_edx 8371 8372 .no_tag_or_ext: 8373 00005FF9 BAE3000000 mov edx, 0E3h 8374 00005FFE 39D1 cmp ecx, edx 8375 00006000 7211 jb short .no_tagplus 8376 ;cmp dword [esi+ecx-0E3h], '+GAT' ; "TAG+" 8377 ; 20/10/2024 8378 00006002 81BC0E1DFFFFFF5441- cmp dword [esi+ecx-0E3h], 'TAG+' 8378 0000600B 472B 8379 0000600D 0F84FC000000 jz .got_tag_size_edx 8380 8381 .no_tagplus: 8382 00006013 BA14000000 mov edx, 20 ; 10+10 8383 00006018 39D1 cmp ecx, edx 8384 0000601A 723C jb short .no_3di ; "3DI",04h 8385 0000601C 817C0EF633444904 cmp dword [esi+ecx-10], 4494433h ; 'ID3'+04000000h 8386 00006024 7532 jnz short .no_3di 8387 00006026 F6440EFB10 test byte [esi+ecx-5], 10h ; bit 4 8388 0000602B 742B jz short .no_3di 8389 0000602D 8B440EFC mov eax, [esi+ecx-4] 8390 00006031 A980808080 test eax, 80808080h 8391 00006036 7520 jnz short .no_3di 8392 8393 .@xlat_4x7bit_to_28bit: 8394 00006038 86E0 xchg al, ah 8395 0000603A D0E0 shl al, 1 8396 0000603C 66D1E0 shl ax, 1 8397 0000603F 66C1E802 shr ax, 2 8398 00006043 C1C810 ror eax, 10h 8399 00006046 86E0 xchg al, ah 8400 00006048 D0E0 shl al, 1 8401 0000604A 66D1E0 shl ax, 1 8402 0000604D C1E802 shr eax, 2 8403 00006050 8D5014 lea edx, [eax+20] ; [eax+10+10] ; hdr+footer siz 8404 00006053 E9B7000000 jmp .got_tag_size_edx 8405 8406 .no_3di: 8407 ;cmp dword [esi+ecx-32], 'TEPA' ; [esi+ecx-32+0] 8408 ; 20/10/2024 8409 00006058 817C0EE041504554 cmp dword [esi+ecx-32], 'APET' 8410 ; check "APETAGEX" 8411 00006060 7520 jnz short .no_ape 8412 ;cmp dword [esi+ecx-28], 'XEGA' ; [esi+ecx-32+4] 8413 00006062 817C0EE441474558 cmp dword [esi+ecx-28], 'AGEX' 8414 0000606A 7516 jnz short .no_ape 8415 0000606C 8B540EEC mov edx, [esi+ecx-20] ; [esi+ecx-32+12] ; get size 8416 00006070 F7440EF400000080 test dword [esi+ecx-12], 80000000h ; [esi+ecx-32+20],1 shl 31 8417 00006078 7403 jz short .no_ape_header 8418 0000607A 83C220 add edx, 32 ; hdr.size 8419 8420 .no_ape_header: 8421 0000607D E98D000000 jmp .got_tag_size_edx 8422 8423 .no_ape: 8424 00006082 BA14000000 mov edx, 20 ; 11+9 8425 00006087 39D1 cmp ecx, edx ; "LYRICSEND" or "LYRICS200" 8426 ; (11+N+9 bytes each) 8427 00006089 7258 jb short .no_lyrics 8428 ;cmp dword [esi+ecx-9], 'IRYL' 8429 ; 20/10/2024 8430 0000608B 817C0EF74C595249 cmp dword [esi+ecx-9], 'LYRI' ; FASM & NASM syntax 8431 00006093 754E jnz short .no_lyrics 8432 00006095 807C0EFB43 cmp byte [esi+ecx-5], 'C' 8433 0000609A 7547 jnz short .no_lyrics 8434 ;cmp dword [esi+ecx-4], 'DNES' 8435 0000609C 817C0EFC53454E44 cmp dword [esi+ecx-4], 'SEND' 8436 000060A4 740C jz short .lyrics3_v1 8437 ;cmp dword [esi+ecx-4], '002S' 8438 000060A6 817C0EFC53323030 cmp dword [esi+ecx-4], 'S200' 8439 000060AE 7440 jz short .lyrics3_v2 8440 000060B0 7531 jnz short .no_lyrics 8441 8442 .lyrics3_v1: 8443 000060B2 BA14000000 mov edx, 20 ; 11+9 8444 8445 .lyrics3_v1_size_lop: 8446 000060B7 8D040E lea eax, [esi+ecx] 8447 000060BA 29D0 sub eax, edx 8448 ;cmp dword [eax], 'IRYL' ; "LYRICSBEGIN" 8449 ; 20/10/2024 8450 000060BC 81384C595249 cmp dword [eax], 'LYRI' 8451 000060C2 7512 jnz short .lyrics3_v1_size_next 8452 ;cmp dword [eax+4], 'EBSC' 8453 000060C4 81780443534245 cmp dword [eax+4], 'CSBE' 8454 000060CB 7509 jnz short .lyrics3_v1_size_next 8455 ;cmp dword [eax+7], 'NIGE' 8456 000060CD 8178074547494E cmp dword [eax+7], 'EGIN' 8457 000060D4 7439 jz short .got_tag_size_edx 8458 8459 .lyrics3_v1_size_next: 8460 000060D6 42 inc edx 8461 000060D7 81FA00140000 cmp edx, 5120 8462 000060DD 7704 ja short .no_lyrics 8463 000060DF 39CA cmp edx, ecx 8464 000060E1 76D4 jbe short .lyrics3_v1_size_lop 8465 ;jmp short .no_lyrics 8466 8467 .no_lyrics: 8468 ;jmp short .footer_tag_all_done 8469 ; 22/10/2024 8470 .footer_tag_all_done: 8471 000060E3 8935[CC420500] mov [stream_pos], esi 8472 000060E9 890D[D0420500] mov [bytes_left], ecx 8473 000060EF C3 retn 8474 8475 .lyrics3_v2: 8476 000060F0 51 push ecx 8477 000060F1 56 push esi 8478 000060F2 8D740EF1 lea esi, [esi+ecx-15] ; [esi+ecx-6-9] 8479 000060F6 B906000000 mov ecx, 6 8480 000060FB 31D2 xor edx, edx 8481 8482 .lyrics3_v2_size_lop: 8483 000060FD 6BD20A imul edx, 10 8484 00006100 0FB606 movzx eax, byte [esi] 8485 00006103 46 inc esi 8486 00006104 2C30 sub al, 30h 8487 00006106 01C2 add edx, eax 8488 00006108 E2F3 loop .lyrics3_v2_size_lop 8489 0000610A 5E pop esi 8490 0000610B 59 pop ecx 8491 0000610C 83C20F add edx, 0Fh ; 6+9 8492 ;jmp short .got_tag_size_edx 8493 8494 .got_tag_size_edx: 8495 ;;; 8496 ; 22/10/2024 8497 0000610F 29D1 sub ecx, edx 8498 00006111 7311 jnb short .cont 8499 ;;; 8500 00006113 89D0 mov eax, edx 8501 00006115 E853050000 call wr_decimal_eax 8502 0000611A E822050000 call wrcrlf 8503 ;;; 8504 ;sub ecx, edx 8505 ;jb fatalunexpected 8506 0000611F E97CACFFFF jmp fatalunexpected 8507 .cont: 8508 ;;; 8509 00006124 0115[500A0100] add [mp3_tag_size], edx 8510 0000612A E9A2FEFFFF jmp .no_id3 8511 8512 8513 ; =============== S U B R O U T I N E ======================================= 8514 8515 8516 mp3_detect_free_format_block_size: 8517 0000612F 833D[C8090100]00 cmp dword [mp3_free_format_frame_size], 0 8518 00006136 0F85A5000000 jnz .already_detected 8519 0000613C 31D2 xor edx, edx 8520 8521 .find_distance_lop: 8522 0000613E 3B15[780A0100] cmp edx, [mp3_src_remain] 8523 00006144 742B jz short .match_eof 8524 00006146 8D4204 lea eax, [edx+4] 8525 00006149 3B05[780A0100] cmp eax, [mp3_src_remain] 8526 0000614F 771E ja short .find_distance_failed 8527 00006151 8B0416 mov eax, [esi+edx] 8528 00006154 E8F2A0FFFF call bswap_eax 8529 00006159 3305[78B30000] xor eax, [mp3_hdr_32bit_header] 8530 0000615F 25000CFEFF and eax, 0FFFE0C00h 8531 00006164 740B jz short .match_eof 8532 8533 .find_distance_next: 8534 00006166 42 inc edx 8535 00006167 81FA00100000 cmp edx, 1000h 8536 0000616D 76CF jbe short .find_distance_lop 8537 8538 .find_distance_failed: 8539 0000616F F9 stc 8540 00006170 C3 retn 8541 8542 .match_eof: 8543 00006171 89D0 mov eax, edx 8544 00006173 2B05[84B30000] sub eax, [mp3_hdr_flag_padding] 8545 00006179 83F804 cmp eax, 4 8546 0000617C 72E8 jb short .find_distance_next 8547 0000617E A3[C8090100] mov [mp3_free_format_frame_size], eax 8548 00006183 31DB xor ebx, ebx 8549 8550 .confirm_distance_lop: 8551 00006185 8B041E mov eax, [esi+ebx] 8552 00006188 E8BEA0FFFF call bswap_eax 8553 0000618D C1E80A shr eax, 10 ; 9+1 8554 00006190 131D[C8090100] adc ebx, [mp3_free_format_frame_size] 8555 00006196 3B1D[780A0100] cmp ebx, [mp3_src_remain] 8556 0000619C 7422 jz short .confirm_distance_match_eof 8557 0000619E 8D4304 lea eax, [ebx+4] 8558 000061A1 3B05[780A0100] cmp eax, [mp3_src_remain] 8559 000061A7 77BD ja short .find_distance_next 8560 000061A9 8B041E mov eax, [esi+ebx] 8561 000061AC E89AA0FFFF call bswap_eax 8562 000061B1 3305[78B30000] xor eax, [mp3_hdr_32bit_header] 8563 000061B7 25000CFEFF and eax, 0FFFE0C00h 8564 000061BC 75A8 jnz short .find_distance_next 8565 000061BE EBC5 jmp short .confirm_distance_lop 8566 8567 .confirm_distance_match_eof: 8568 000061C0 A1[C8090100] mov eax, [mp3_free_format_frame_size] 8569 000061C5 C1E003 shl eax, 3 8570 000061C8 F725[88B30000] mul dword [mp3_sample_rate] 8571 000061CE 8B0D[880A0100] mov ecx, [mp3_nb_granules] 8572 000061D4 69C940020000 imul ecx, 240h 8573 000061DA F7F1 div ecx 8574 000061DC A3[90B30000] mov [mp3_bit_rate], eax 8575 8576 .already_detected: 8577 000061E1 F8 clc 8578 000061E2 C3 retn 8579 8580 8581 ; =============== S U B R O U T I N E ======================================= 8582 8583 8584 mp3_check_xing_info: 8585 000061E3 C705[D0090100]0000- mov dword [mp3_xing_id], 0 8585 000061EB 0000 8586 000061ED C705[D8090100]0000- mov dword [mp3_xing_frames], 0 8586 000061F5 0000 8587 000061F7 C705[DC090100]0000- mov dword [mp3_xing_filesize], 0 8587 000061FF 0000 8588 00006201 8B35[6CB30000] mov esi, [mp3_src_data_location] 8589 00006207 AD lodsd 8590 ;cmp eax, 'gniX' 8591 ; 20/10/2024 8592 00006208 3D58696E67 cmp eax, 'Xing' ; FASM & NASM syntax 8593 0000620D 7401 jz short .xing 8594 0000620F C3 retn 8595 8596 .xing: 8597 00006210 A3[D0090100] mov [mp3_xing_id], eax 8598 00006215 AD lodsd 8599 00006216 E830A0FFFF call bswap_eax 8600 0000621B A3[D4090100] mov [mp3_xing_flags], eax 8601 00006220 89C2 mov edx, eax 8602 00006222 F7C201000000 test edx, 1 8603 00006228 740B jz short .no_xing_frames 8604 0000622A AD lodsd 8605 0000622B E81BA0FFFF call bswap_eax 8606 00006230 A3[D8090100] mov [mp3_xing_frames], eax 8607 8608 .no_xing_frames: 8609 00006235 F7C202000000 test edx, 2 ; 1 shl 1 8610 0000623B 740B jz short .no_xing_filesize 8611 0000623D AD lodsd 8612 0000623E E808A0FFFF call bswap_eax 8613 00006243 A3[DC090100] mov [mp3_xing_filesize], eax 8614 8615 .no_xing_filesize: 8616 00006248 F7C204000000 test edx, 4 ; 1 shl 2 8617 0000624E 740C jz short .no_xing_toc 8618 00006250 B964000000 mov ecx, 100 8619 00006255 BF[E0090100] mov edi, mp3_xing_toc 8620 0000625A F3A4 rep movsb 8621 8622 .no_xing_toc: 8623 0000625C F7C208000000 test edx, 8 ; 1 shl 3 8624 00006262 740B jz short .no_xing_vbr_scale 8625 00006264 AD lodsd 8626 00006265 E8E19FFFFF call bswap_eax 8627 0000626A A3[440A0100] mov [mp3_xing_vbr_scale], eax 8628 8629 .no_xing_vbr_scale: 8630 0000626F C705[90B30000]0000- mov dword [mp3_bit_rate], 0 8630 00006277 0000 8631 00006279 A1[88B30000] mov eax, [mp3_sample_rate] 8632 0000627E C1E003 shl eax, 3 8633 00006281 F725[DC090100] mul dword [mp3_xing_filesize] 8634 00006287 8B0D[D8090100] mov ecx, [mp3_xing_frames] 8635 0000628D 0FAF0D[880A0100] imul ecx, [mp3_nb_granules] 8636 00006294 69C940020000 imul ecx, 576 ; 18*32 8637 0000629A 39CA cmp edx, ecx 8638 0000629C 7307 jnb short .overflow 8639 0000629E F7F1 div ecx 8640 000062A0 A3[90B30000] mov [mp3_bit_rate], eax 8641 8642 .overflow: 8643 000062A5 C3 retn 8644 8645 8646 ; =============== S U B R O U T I N E ======================================= 8647 8648 ; 20/10/2024 8649 mp3_decode_frame: 8650 000062A6 890D[780A0100] mov [mp3_src_remain], ecx 8651 000062AC 893D[5C0A0100] mov [mp3_samples_dst], edi 8652 000062B2 F605[1C8C0000]10 test byte [cpuid_flags], 10h 8653 000062B9 740E jz short .no_rdtsc_supported@@@@ 8654 000062BB 0F31 rdtsc 8655 000062BD 2905[DC8D0000] sub [rdtsc_total], eax 8656 000062C3 1915[E08D0000] sbb [rdtsc_total+4], edx 8657 8658 .no_rdtsc_supported@@@@: 8659 000062C9 E8E19FFFFF call mp3_search_get_header 8660 000062CE 0F8294010000 jc .error 8661 000062D4 A1[70B30000] mov eax, [mp3_src_frame_size] 8662 000062D9 83F800 cmp eax, 0 8663 000062DC 0F8E86010000 jle .error 8664 000062E2 3B05[780A0100] cmp eax, [mp3_src_remain] 8665 000062E8 0F877A010000 ja .error 8666 000062EE 8935[740A0100] mov [mp3_bitstream_start], esi 8667 ; 11/01/2025 8668 ;mov eax, 32 8669 8670 .mp3mac_bitstream_set_position: 8671 ; 22/10/2024 8672 ;mov esi, [mp3_bitstream_start] 8673 ;mov cl, al 8674 ;shr eax, 3 8675 ;and cl, 7 8676 ;mov eax, 4 8677 ;add esi, eax 8678 000062F4 83C604 add esi, 4 8679 000062F7 E8579FFFFF call mp3_recollect_bits 8680 8681 .mp3mac_get_n_bits: 8682 ;mov eax, ebp ; mp3_col32 8683 ;shl ebp, cl 8684 ;rol eax, cl 8685 ;xor eax, ebp ; mp3_col32 8686 ;sub ch, cl ; sub mp3_colNN,num 8687 ;jns short .cont 8688 ;mov cl, ch ; mov cl,mp3_colNN 8689 ;add ch, 16 8690 ;rol ebp, cl ; rol mp3_col32,cl 8691 ;mov bp, [esi] ; mov mp3_col16,word ptr [esi] 8692 ;add esi, 2 8693 ;ror bp, 8 ; endianess 8694 ;ror ebp, cl ; ror mp3_col32,cl 8695 8696 .cont: 8697 000062FC E8B4A1FFFF call mp3_bitstream_read_header_extra 8698 00006301 E839A3FFFF call mp3_bitstream_read_granules 8699 00006306 0F825C010000 jc .error 8700 0000630C E8929FFFFF call mp3_uncollect_bits 8701 00006311 8935[6CB30000] mov [mp3_src_data_location], esi 8702 00006317 833D[5C0A0100]00 cmp dword [mp3_samples_dst], 0 8703 0000631E 0F840F010000 jz .skip_decoding 8704 00006324 E8ECA7FFFF call mp3_bitstream_append_to_main_data_pool 8705 00006329 833D[600A0100]00 cmp dword [mp3_samples_output_size], 0 8706 00006330 0F84FD000000 jz .skip_decoding 8707 00006336 C705[6C0A0100]0000- mov dword [mp3_curr_granule], 0 8707 0000633E 0000 8708 00006340 BB[8C0A0100] mov ebx, mp3_granules 8709 8710 .body_granule_lop: 8711 00006345 891D[C0420500] mov [_@@granule_addr], ebx 8712 0000634B C705[680A0100]0000- mov dword [mp3_curr_channel], 0 8712 00006353 0000 8713 8714 .body_channel_lop: 8715 00006355 8B4304 mov eax, [ebx+4] ; [ebx+$mp3gr_part2_3_start] 8716 00006358 8B35[740A0100] mov esi, [mp3_bitstream_start] 8717 0000635E 88C1 mov cl, al ; mp3mac_bitstream_set_position 8718 00006360 C1E803 shr eax, 3 8719 00006363 80E107 and cl, 7 8720 00006366 01C6 add esi, eax 8721 00006368 E8E69EFFFF call mp3_recollect_bits 8722 0000636D 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 8723 0000636F D3E5 shl ebp, cl 8724 00006371 D3C0 rol eax, cl 8725 00006373 31E8 xor eax, ebp 8726 00006375 28CD sub ch, cl 8727 00006377 7913 jns short .cont@ 8728 00006379 88E9 mov cl, ch ; mp3mac_collect_more 8729 0000637B 80C510 add ch, 16 8730 0000637E D3C5 rol ebp, cl 8731 00006380 668B2E mov bp, [esi] 8732 00006383 83C602 add esi, 2 8733 00006386 66C1CD08 ror bp, 8 8734 0000638A D3CD ror ebp, cl 8735 8736 .cont@: 8737 0000638C E81AA8FFFF call mp3_bitstream_read_scalefacs 8738 00006391 E812AAFFFF call mp3_get_exponents_from_scale_factors 8739 00006396 E856ABFFFF call mp3_huffman_decode ; reads up to $mp3gr_part2_3_end 8740 0000639B 0F82C7000000 jc .error 8741 8742 .body_channel_next: 8743 000063A1 81C340130000 add ebx, 4928 ; $mp3gr_entrysiz*2 8744 000063A7 FF05[680A0100] inc dword [mp3_curr_channel] 8745 000063AD A1[680A0100] mov eax, [mp3_curr_channel] 8746 000063B2 3B05[98B30000] cmp eax, [mp3_output_num_channels] 8747 000063B8 729B jb short .body_channel_lop 8748 000063BA 8B1D[C0420500] mov ebx, [_@@granule_addr] 8749 8750 .mp3mac_push_bitstream: 8751 000063C0 51 push ecx 8752 000063C1 55 push ebp 8753 000063C2 56 push esi 8754 000063C3 E827B0FFFF call mp3_compute_stereo 8755 000063C8 C705[680A0100]0000- mov dword [mp3_curr_channel], 0 8755 000063D0 0000 8756 8757 .cast_channel_lop: 8758 000063D2 E8F0B2FFFF call mp3_reorder_block 8759 000063D7 E885B3FFFF call mp3_compute_antialias 8760 000063DC E870BCFFFF call mp3_compute_imdct 8761 000063E1 81C340130000 add ebx, 4928 ; $mp3gr_entrysiz*2 8762 000063E7 FF05[680A0100] inc dword [mp3_curr_channel] 8763 000063ED A1[680A0100] mov eax, [mp3_curr_channel] 8764 000063F2 3B05[98B30000] cmp eax, [mp3_output_num_channels] 8765 000063F8 72D8 jc short .cast_channel_lop 8766 8767 .mp3mac_pop_bitstream: 8768 000063FA 5E pop esi 8769 000063FB 5D pop ebp 8770 000063FC 59 pop ecx 8771 000063FD 8B1D[C0420500] mov ebx, [_@@granule_addr] 8772 00006403 81C3A0090000 add ebx, 2464 ; $mp3gr_entrysiz 8773 00006409 FF05[6C0A0100] inc dword [mp3_curr_granule] 8774 0000640F A1[6C0A0100] mov eax, [mp3_curr_granule] 8775 00006414 3B05[880A0100] cmp eax, [mp3_nb_granules] 8776 0000641A 0F8225FFFFFF jc .body_granule_lop 8777 00006420 E87E9EFFFF call mp3_uncollect_bits 8778 00006425 3B35[68B30000] cmp esi, [main_data_pool_wr_ptr] 8779 0000642B 773B ja short .error 8780 0000642D FF15[BCB30000] call dword [mp3_synth_filter_proc] ; synth maths 8781 8782 .skip_decoding: 8783 00006433 A1[7C0A0100] mov eax, [mp3_extra_bytes] 8784 00006438 0105[70B30000] add [mp3_src_frame_size], eax 8785 0000643E A1[600A0100] mov eax, [mp3_samples_output_size] 8786 00006443 0105[580A0100] add [mp3_total_output_size], eax 8787 00006449 FF05[540A0100] inc dword [mp3_num_frames_decoded] 8788 8789 .timelog_end: ; timelog_end macro ttt 8790 0000644F F605[1C8C0000]10 test byte [cpuid_flags], 10h 8791 00006456 740F jz short .no_rdtsc_supported 8792 00006458 0F31 rdtsc ; read timestamp counter 8793 0000645A 0105[DC8D0000] add [rdtsc_total], eax 8794 00006460 1115[E08D0000] adc [rdtsc_total+4], edx 8795 ; 22/10/2024 8796 00006466 F8 clc 8797 ; 20/10/2024 8798 .no_rdtsc_supported: 8799 ;clc 8800 00006467 C3 retn 8801 8802 .error: 8803 00006468 F605[1C8C0000]10 test byte [cpuid_flags], 10h ; timelog_end rdtsc_total 8804 0000646F 740E jz short .no_rdtsc_supported@ 8805 00006471 0F31 rdtsc 8806 00006473 0105[DC8D0000] add [rdtsc_total], eax 8807 00006479 1115[E08D0000] adc [rdtsc_total+4], edx 8808 8809 ; 20/10/2024 8810 .no_rdtsc_supported@: 8811 0000647F A1[7C0A0100] mov eax, [mp3_extra_bytes] 8812 00006484 0105[70B30000] add [mp3_src_frame_size], eax 8813 0000648A F9 stc 8814 0000648B C3 retn 8815 8816 8817 ; =============== S U B R O U T I N E ======================================= 8818 8819 8820 mp3_init: 8821 0000648C BF[68A30000] mov edi, main_data_pool_start ; = mp3_context_start 8822 ;mov ecx, 74916 ; (mp3_context_end-mp3_context_start)/4 8823 00006491 B984240100 mov ecx, (mp3_context_end-mp3_context_start)/4 8824 00006496 31C0 xor eax, eax ; ERRIF @@len AND 03h 8825 00006498 F3AB rep stosd ; clear context 8826 0000649A C705[68B30000]- mov dword [main_data_pool_wr_ptr], main_data_pool_start 8826 000064A0 [68A30000] 8827 000064A4 833D[B49A0000]00 cmp dword [mp3_initialized], 0 8828 000064AB 753C jnz short .already_initialized 8829 000064AD E8CAF6FFFF call mp3_integer_init_is_stereo_lsf 8830 000064B2 E823F7FFFF call mp3_integer_init_mdct_windows 8831 000064B7 E846F7FFFF call mp3_integer_init_table_4_3 8832 000064BC E8A4F7FFFF call mp3_integer_init_exponent 8833 000064C1 E8F3F4FFFF call mp3_any_init_synth_window 8834 000064C6 E8D2F5FFFF call mp3_any_init_band_indices 8835 000064CB E8F7F5FFFF call mp3_any_init_lsf_sf_expand 8836 000064D0 E840F6FFFF call mp3_any_init_huff_tables 8837 000064D5 E8D0F8FFFF call mp3_init_log_constants 8838 000064DA E8A3F5FFFF call mp3_init_post_collapse 8839 000064DF C705[B49A0000]0100- mov dword [mp3_initialized], 1 8839 000064E7 0000 8840 8841 .already_initialized: 8842 000064E9 0FB605[188C0000] movzx eax, byte [option_fast] 8843 000064F0 C705[A0B30000]0200- mov dword [mp3_bytes_per_sample], 2 8843 000064F8 0000 8844 000064FA D1E0 shl eax, 1 8845 000064FC 0205[168C0000] add al, [option_8bit] 8846 00006502 A801 test al, 1 8847 00006504 740A jz short .not_8bit 8848 00006506 C705[A0B30000]0100- mov dword [mp3_bytes_per_sample], 1 8848 0000650E 0000 8849 8850 .not_8bit: 8851 00006510 6BC003 imul eax, 3 8852 00006513 0205[178C0000] add al, [option_rate_shift] 8853 00006519 8B0485[DAA00000] mov eax, [mp3_synth_filter_procs+eax*4] 8854 00006520 A3[BCB30000] mov [mp3_synth_filter_proc], eax 8855 00006525 C3 retn 8856 8857 8858 ; =============== S U B R O U T I N E ======================================= 8859 8860 8861 mp3_check_1st_frame: 8862 00006526 E855FAFFFF call mp3_exclude_id3_and_tag 8863 0000652B 8B35[CC420500] mov esi, [stream_pos] 8864 00006531 8B0D[D0420500] mov ecx, [bytes_left] 8865 00006537 31FF xor edi, edi 8866 00006539 31ED xor ebp, ebp 8867 0000653B E866FDFFFF call mp3_decode_frame 8868 00006540 0F82E9000000 jc .error 8869 00006546 E898FCFFFF call mp3_check_xing_info 8870 0000654B BA[38A10000] mov edx, txt_file_size ; "file size: " 8871 00006550 E8DB000000 call wrstr_edx 8872 00006555 A1[480A0100] mov eax, [mp3_file_size] 8873 0000655A E807010000 call wr_decimal_eax_with_thousands_seperator 8874 0000655F BA[44A10000] mov edx, txt_id3_size ; ", id3 size: " 8875 00006564 E8C7000000 call wrstr_edx 8876 00006569 A1[4C0A0100] mov eax, [mp3_id3_size] 8877 0000656E E8F3000000 call wr_decimal_eax_with_thousands_seperator 8878 00006573 BA[51A10000] mov edx, txt_tag_size ; ", tag size: " 8879 00006578 E8B3000000 call wrstr_edx 8880 0000657D A1[500A0100] mov eax, [mp3_tag_size] 8881 00006582 E8DF000000 call wr_decimal_eax_with_thousands_seperator 8882 00006587 E8B5000000 call wrcrlf 8883 0000658C BA[5EA10000] mov edx, txt_input ; "input: " 8884 00006591 E89A000000 call wrstr_edx 8885 00006596 A1[88B30000] mov eax, [mp3_sample_rate] 8886 0000659B E8CD000000 call wr_decimal_eax 8887 000065A0 BA[6FA10000] mov edx, txt_hz ; " hz, " 8888 000065A5 E886000000 call wrstr_edx 8889 000065AA A1[94B30000] mov eax, [mp3_src_num_channels] 8890 000065AF E8B9000000 call wr_decimal_eax 8891 000065B4 BA[75A10000] mov edx, txt_channels ; " channels, " 8892 000065B9 E872000000 call wrstr_edx 8893 000065BE A1[90B30000] mov eax, [mp3_bit_rate] 8894 000065C3 31D2 xor edx, edx 8895 000065C5 B9E8030000 mov ecx, 1000 8896 000065CA F7F1 div ecx 8897 000065CC E89C000000 call wr_decimal_eax 8898 000065D1 BA[86A10000] mov edx, txt_kbit_s ; " kbit/s" 8899 000065D6 E855000000 call wrstr_edx 8900 000065DB E861000000 call wrcrlf 8901 000065E0 BA[66A10000] mov edx, txt_output ; "output: " 8902 000065E5 E846000000 call wrstr_edx 8903 000065EA A1[9CB30000] mov eax, [mp3_output_sample_rate] 8904 000065EF E879000000 call wr_decimal_eax 8905 000065F4 BA[6FA10000] mov edx, txt_hz ; " hz, " 8906 000065F9 E832000000 call wrstr_edx 8907 000065FE A1[98B30000] mov eax, [mp3_output_num_channels] 8908 00006603 E865000000 call wr_decimal_eax 8909 00006608 BA[75A10000] mov edx, txt_channels ; " channels, " 8910 0000660D E81E000000 call wrstr_edx 8911 00006612 A1[A0B30000] mov eax, [mp3_bytes_per_sample] 8912 00006617 C1E003 shl eax, 3 8913 0000661A E84E000000 call wr_decimal_eax 8914 0000661F BA[81A10000] mov edx, txt_bit ; " bit" 8915 00006624 E807000000 call wrstr_edx 8916 00006629 E813000000 call wrcrlf 8917 0000662E F8 clc 8918 .error: 8919 0000662F C3 retn 8920 8921 ;.error: 8922 ;stc 8923 ;retn 8924 8925 8926 ; =============== S U B R O U T I N E ======================================= 8927 8928 ;wrchr: 8929 ;pusha 8930 ;mov [wrchr_buf], al 8931 ;push 0 ; lpOverlapped 8932 ;push diskresult ; lpNumberOfBytesWritten 8933 ;push 1 ; nNumberOfBytesToWrite 8934 ;push wrchr_buf ; lpBuffer 8935 ;push [std_out] ; hFile 8936 ;call [WriteFile] 8937 ;popa 8938 ;retn 8939 8940 8941 ; =============== S U B R O U T I N E ======================================= 8942 8943 8944 wrstr_edx: 8945 00006630 50 push eax 8946 .lop: 8947 00006631 8A02 mov al, [edx] 8948 00006633 42 inc edx 8949 00006634 3C00 cmp al, 0 8950 00006636 7407 jz short .done 8951 00006638 E801040000 call wrchr 8952 0000663D EBF2 jmp short .lop 8953 .done: 8954 0000663F 58 pop eax 8955 00006640 C3 retn 8956 8957 ; =============== S U B R O U T I N E ======================================= 8958 8959 8960 wrcrlf: 8961 00006641 50 push eax 8962 00006642 B00D mov al, 0Dh 8963 00006644 E8F5030000 call wrchr 8964 00006649 B00A mov al, 0Ah 8965 0000664B E8EE030000 call wrchr 8966 00006650 58 pop eax 8967 00006651 C3 retn 8968 8969 ; =============== S U B R O U T I N E ======================================= 8970 8971 8972 wrspc: 8973 00006652 50 push eax 8974 00006653 B020 mov al, 20h 8975 00006655 E8E4030000 call wrchr 8976 0000665A 58 pop eax 8977 0000665B C3 retn 8978 8979 ; =============== S U B R O U T I N E ======================================= 8980 8981 8982 wrcomma: 8983 0000665C 50 push eax 8984 0000665D B02C mov al, ',' 8985 0000665F E8DA030000 call wrchr 8986 00006664 58 pop eax 8987 00006665 C3 retn 8988 8989 ; =============== S U B R O U T I N E ======================================= 8990 8991 8992 wr_decimal_eax_with_thousands_seperator: 8993 00006666 51 push ecx 8994 00006667 66B90200 mov cx, 2 8995 0000666B EB03 jmp short wr_decimal_eax_inj 8996 8997 ; =============== S U B R O U T I N E ======================================= 8998 8999 9000 wr_decimal_eax: 9001 0000666D 51 push ecx 9002 0000666E 31C9 xor ecx, ecx 9003 9004 wr_decimal_eax_inj: 9005 00006670 50 push eax 9006 00006671 53 push ebx 9007 00006672 52 push edx 9008 00006673 BB00CA9A3B mov ebx, 1000000000 ; nine zeroes (32bit max 4.294.967.296) 9009 9010 .dezlop: 9011 00006678 FEC9 dec cl 9012 0000667A 750C jnz short .no_thousands 9013 0000667C B103 mov cl, 3 9014 0000667E 80FD00 cmp ch, 0 9015 00006681 7405 jz short .no_thousands 9016 00006683 E8D4FFFFFF call wrcomma 9017 9018 .no_thousands: 9019 00006688 31D2 xor edx, edx 9020 0000668A F7F3 div ebx 9021 0000668C 83FB01 cmp ebx, 1 9022 0000668F 7404 jz short .force_last_zero 9023 00006691 08C5 or ch, al 9024 00006693 7407 jz short .skip_lead_zero 9025 9026 .force_last_zero: 9027 00006695 0430 add al, 30h 9028 00006697 E8A2030000 call wrchr 9029 9030 .skip_lead_zero: 9031 0000669C 52 push edx 9032 0000669D 89D8 mov eax, ebx 9033 0000669F BB0A000000 mov ebx, 10 9034 000066A4 31D2 xor edx, edx 9035 000066A6 F7F3 div ebx 9036 000066A8 83F800 cmp eax, 0 9037 000066AB 89C3 mov ebx, eax 9038 000066AD 58 pop eax 9039 000066AE 75C8 jnz short .dezlop 9040 000066B0 5A pop edx 9041 000066B1 5B pop ebx 9042 000066B2 58 pop eax 9043 000066B3 59 pop ecx 9044 000066B4 C3 retn 9045 9046 ; =============== S U B R O U T I N E ======================================= 9047 9048 9049 wrdigital: 9050 000066B5 50 push eax 9051 000066B6 240F and al, 0Fh 9052 000066B8 3C09 cmp al, 9 9053 000066BA 7602 jbe short .this 9054 000066BC 0407 add al, 7 9055 9056 .this: 9057 000066BE 0430 add al, 30h 9058 000066C0 E879030000 call wrchr 9059 000066C5 58 pop eax 9060 000066C6 C3 retn 9061 9062 ; =============== S U B R O U T I N E ======================================= 9063 9064 9065 wrhexal: 9066 000066C7 C0C804 ror al, 4 9067 000066CA E8E6FFFFFF call wrdigital 9068 000066CF C0C804 ror al, 4 9069 000066D2 EBE1 jmp short wrdigital 9070 9071 ; =============== S U B R O U T I N E ======================================= 9072 9073 9074 wrhexax: 9075 000066D4 66C1C808 ror ax, 8 9076 000066D8 E8EAFFFFFF call wrhexal 9077 000066DD 66C1C808 ror ax, 8 9078 000066E1 EBE4 jmp short wrhexal 9079 9080 ; =============== S U B R O U T I N E ======================================= 9081 9082 9083 wrhexeax: 9084 000066E3 C1C810 ror eax, 10h 9085 000066E6 E8E9FFFFFF call wrhexax 9086 000066EB C1C810 ror eax, 10h 9087 000066EE EBE4 jmp short wrhexax 9088 9089 ; =============== S U B R O U T I N E ======================================= 9090 9091 %if 0 9092 9093 get_commandline: 9094 call [GetCommandLineA] 9095 mov esi, eax 9096 mov edi, cmdline_buf 9097 mov ecx, 1024 ; cmdline_max 9098 9099 .get_cmdline_lop: 9100 lodsb 9101 cmp al, 0 9102 stosb 9103 loopne .get_cmdline_lop 9104 mov byte [edi-1], 0 9105 mov esi, cmdline_buf 9106 mov edi, cmdline_buf 9107 call _@@get_item ; get/skip name of the executable itself 9108 9109 .get_items_lop: 9110 call _@@get_item 9111 mov al, [ebx] 9112 cmp al, 0 9113 jz .done 9114 cmp al, '/' 9115 jz short .switch 9116 cmp al, '-' 9117 jz short .switch 9118 mov eax, [edi-5] 9119 or eax, 20202000h 9120 ;cmp eax, 'vaw.' ; ".wav" 9121 cmp eax, '.wav' ; FASM & NASM syntax 9122 jnz short .not_wav_name 9123 mov [mp3_dst_fname], ebx 9124 jmp short .get_items_lop 9125 9126 .not_wav_name: 9127 mov eax, [edi-5] 9128 or eax, 20202000h 9129 ;cmp eax, 'mcp.' ; ".pcm" 9130 cmp eax, '.pcm' ; FASM & NASM syntax 9131 jnz short .not_pcm_name 9132 mov [mp3_pcm_fname], ebx 9133 jmp short .get_items_lop 9134 9135 .not_pcm_name: 9136 mov [mp3_src_fname], ebx 9137 jmp short .get_items_lop 9138 9139 .switch: 9140 ;cmp dword [ebx+1], 'onom' ; "mono" 9141 cmp dword [ebx+1], 'mono' 9142 jnz short .not_switch_mono 9143 mov byte [option_mono], 1 9144 jmp short .get_items_lop 9145 9146 .not_switch_mono: 9147 ;cmp dword [ebx+1], 'tsaf' ; "fast" 9148 cmp dword [ebx+1], 'fast' ; FASM & NASM syntax 9149 jnz short .not_fast_option 9150 mov byte [option_fast], 1 9151 jmp short .get_items_lop 9152 9153 .not_fast_option: 9154 ;cmp dword [ebx+1], 'tib8' ; "8bit" 9155 cmp dword [ebx+1], '8bit' 9156 jnz short .not_switch_8bit 9157 mov [option_8bit], 1 9158 jmp .get_items_lop 9159 9160 .not_switch_8bit: 9161 ;cmp dword [ebx+1], 'flah' ; "half" 9162 cmp dword [ebx+1], 'half' 9163 jnz short .not_switch_half 9164 mov [option_rate_shift], 1 9165 jmp .get_items_lop 9166 9167 .not_switch_half: 9168 ;cmp dword [ebx+1], 'rauq' ; "quar" 9169 cmp dword [ebx+1], 'quar' 9170 jnz short .not_switch_quarter 9171 mov [option_rate_shift], 2 9172 jmp .get_items_lop 9173 9174 .not_switch_quarter: 9175 ;cmp dword [ebx+1], 'tset' ; "test" 9176 cmp dword [ebx+1], 'test' 9177 jnz short .not_switch_test 9178 mov byte [option_test], 1 9179 jmp .get_items_lop 9180 9181 .not_switch_test: 9182 jmp short .help 9183 9184 .done: 9185 cmp dword [mp3_src_fname], 0 9186 jz short .help 9187 ;;; Erdogan Tan - 17/10/2024 9188 mov edx, txt_ctrlc 9189 call wrstr_edx 9190 ;;; 9191 mov edx, txt_file ; "file: " 9192 call wrstr_edx 9193 mov edx, [mp3_src_fname] 9194 call wrstr_edx 9195 call wrcrlf 9196 clc 9197 retn 9198 9199 .help: 9200 ;;; Erdogan Tan - 17/10/2024 9201 mov edx, txt_about 9202 call wrstr_edx 9203 ;;; 9204 mov edx, txt_help ; "usage: mp3play input.mp3 [output.wav] ["... 9205 call wrstr_edx 9206 stc 9207 retn 9208 9209 %endif 9210 9211 ; =============== S U B R O U T I N E ======================================= 9212 9213 %if 0 9214 9215 _@@get_item: 9216 lodsb 9217 dec al 9218 cmp al, 1Fh ; 20-1 9219 jbe short _@@get_item ; _@@skip_spc_lop 9220 dec esi 9221 mov ebx, edi 9222 mov ah, 0 ; flag initially not quoted 9223 9224 .char_lop: 9225 lodsb 9226 cmp al, '"' 9227 jnz short .no_quote 9228 xor ah, 1 9229 jmp short .char_lop 9230 9231 .no_quote: 9232 stosb 9233 cmp al, 0 9234 jz short .src_end 9235 cmp al, 20h 9236 ja short .char_lop 9237 cmp ah, 0 ; ignore spaces if inside "quoted area" 9238 jnz short .char_lop 9239 mov byte [edi-1], 0 ; eol (replace space by 00h) 9240 retn 9241 9242 .src_end: 9243 dec esi 9244 retn 9245 9246 %endif 9247 9248 ; =============== S U B R O U T I N E ======================================= 9249 9250 9251 %if 0 9252 9253 open_and_mmap_the_file: 9254 push 0 ; hTemplateFile 9255 push 0 ; dwFlagsAndAttributes 9256 push 3 ; dwCreationDisposition 9257 push 0 ; lpSecurityAttributes 9258 push 1 ; dwShareMode 9259 push 80000000h ; dwDesiredAccess 9260 push [mp3_src_fname] ; lpFileName 9261 call [CreateFileA] 9262 mov [hFile], eax 9263 cmp eax, 0FFFFFFFFh ; INVALID_HANDLE_VALUE 9264 jz short .not_found 9265 push 0 ; lpFileSizeHigh 9266 push [hFile] ; hFile 9267 call [GetFileSize] 9268 mov [mp3_file_size], eax 9269 mov [bytes_left], eax 9270 push 0 ; lpName 9271 push 0 ; dwMaximumSizeLow 9272 push 0 ; dwMaximumSizeHigh 9273 push 2 ; flProtect 9274 push 0 ; lpFileMappingAttributes 9275 push [hFile] ; hFile 9276 call [CreateFileMappingA] 9277 mov [hMap], eax 9278 push 0 ; dwNumberOfBytesToMap 9279 push 0 ; dwFileOffsetLow 9280 push 0 ; dwFileOffsetHigh 9281 push 4 ; dwDesiredAccess 9282 push [hMap] ; hFileMappingObject 9283 call [MapViewOfFile] 9284 mov [stream_start], eax 9285 mov [stream_pos], eax 9286 mov esi, [stream_start] 9287 mov ecx, [bytes_left] 9288 9289 .lll: 9290 lodsb 9291 loop .lll 9292 clc 9293 retn 9294 9295 .not_found: 9296 mov edx, txt_not_found ; "cannot open source file\r\n" 9297 call wrstr_edx 9298 stc 9299 retn 9300 9301 %endif 9302 9303 9304 ; =============== S U B R O U T I N E ======================================= 9305 9306 9307 mp3_plain_test_without_output: 9308 000066F0 60 pusha 9309 000066F1 8B35[CC420500] mov esi, [stream_pos] 9310 000066F7 8B0D[D0420500] mov ecx, [bytes_left] 9311 000066FD BF[00700500] mov edi, sample_buffer 9312 00006702 31ED xor ebp, ebp 9313 00006704 E89DFBFFFF call mp3_decode_frame 9314 00006709 61 popa 9315 0000670A 7218 jc short .exit 9316 0000670C A1[70B30000] mov eax, [mp3_src_frame_size] 9317 00006711 83F800 cmp eax, 0 9318 00006714 740E jz short .exit 9319 00006716 0105[CC420500] add [stream_pos], eax 9320 0000671C 2905[D0420500] sub [bytes_left], eax 9321 00006722 EBCC jmp short mp3_plain_test_without_output 9322 9323 .exit: 9324 00006724 C3 retn 9325 9326 9327 ; =============== S U B R O U T I N E ======================================= 9328 9329 ; 20/10/2024 9330 mp3_cast_to_wav_file: 9331 00006725 E86F000000 call mp3_create_wav_file 9332 ; 20/10/2024 9333 0000672A 730A jnc short .lop 9334 0000672C BBFFFFFFFF mov ebx, -1 9335 00006731 E91D050000 jmp ExitProcess@ ; 13/01/2025 9336 .lop: 9337 00006736 60 pusha 9338 00006737 8B35[CC420500] mov esi, [stream_pos] 9339 0000673D 8B0D[D0420500] mov ecx, [bytes_left] 9340 00006743 BF[00700500] mov edi, sample_buffer 9341 00006748 31ED xor ebp, ebp 9342 0000674A E857FBFFFF call mp3_decode_frame 9343 0000674F 61 popa 9344 00006750 7241 jc short .exit 9345 00006752 A1[70B30000] mov eax, [mp3_src_frame_size] 9346 00006757 83F800 cmp eax, 0 9347 0000675A 7437 jz short .exit 9348 0000675C 0105[CC420500] add [stream_pos], eax 9349 00006762 2905[D0420500] sub [bytes_left], eax 9350 ;push 0 ; lpOverlapped 9351 ;push diskresult ; lpNumberOfBytesWritten 9352 00006768 FF35[600A0100] push dword [mp3_samples_output_size] ; nNumberOfBytesToWrite 9353 0000676E 68[00700500] push sample_buffer ; lpBuffer 9354 00006773 FF35[54430500] push dword [mp3_wav_handle] ; hFile 9355 ;call [WriteFile] 9356 ;;; 9357 ; 20/10/2024 9358 00006779 E8DC040000 call WriteFile 9359 0000677E 7213 jc short .exit 9360 ;;; 9361 00006780 A1[600A0100] mov eax, [mp3_samples_output_size] 9362 00006785 0105[D09A0000] add dword [mp3_wav_header+4], eax 9363 0000678B 0105[F49A0000] add dword [mp3_wav_header+28h], eax 9364 00006791 EBA3 jmp short .lop 9365 9366 .exit: 9367 00006793 E860000000 call mp3_close_wav_file 9368 00006798 C3 retn 9369 9370 9371 ; =============== S U B R O U T I N E ======================================= 9372 9373 ; 20/10/2024 9374 9375 mp3_create_wav_file: 9376 00006799 A1[9CB30000] mov eax, [mp3_output_sample_rate] 9377 0000679E 8B0D[98B30000] mov ecx, [mp3_output_num_channels] 9378 000067A4 8B15[A0B30000] mov edx, [mp3_bytes_per_sample] 9379 000067AA 66890D[E29A0000] mov word [mp3_wav_header+16h], cx 9380 000067B1 A3[E49A0000] mov dword [mp3_wav_header+18h], eax 9381 000067B6 0FAFCA imul ecx, edx 9382 000067B9 0FAFC1 imul eax, ecx 9383 000067BC C1E203 shl edx, 3 9384 000067BF A3[E89A0000] mov dword [mp3_wav_header+1Ch], eax 9385 000067C4 66890D[EC9A0000] mov word [mp3_wav_header+20h], cx 9386 000067CB 668915[EE9A0000] mov word [mp3_wav_header+22h], dx 9387 ;push 0 ; hTemplateFile 9388 ;push 80h ; dwFlagsAndAttributes 9389 ;push 2 ; dwCreationDisposition 9390 ;push 0 ; lpSecurityAttributes 9391 ;push 0 ; dwShareMode 9392 ;push 0C0000000h ; dwDesiredAccess 9393 000067D2 FF35[C49A0000] push dword [mp3_dst_fname] ; lpFileName 9394 ;call [CreateFileA] 9395 ;;; 9396 ; 20/10/2024 9397 000067D8 E8AF040000 call CreateFile 9398 000067DD 7301 jnc short .ok 9399 000067DF C3 retn 9400 .ok: 9401 ;;; 9402 000067E0 A3[54430500] mov [mp3_wav_handle], eax 9403 ; 20/10/2024 9404 ;call mp3_write_wav_header 9405 ;retn 9406 9407 9408 ; =============== S U B R O U T I N E ======================================= 9409 9410 ; 20/10/2024 9411 mp3_write_wav_header: 9412 ;push 0 ; lpOverlapped 9413 ;push diskresult ; lpNumberOfBytesWritten 9414 000067E5 6A2C push 44 ; 2Ch ; nNumberOfBytesToWrite 9415 000067E7 68[CC9A0000] push mp3_wav_header ; lpBuffer 9416 000067EC FF35[54430500] push dword [mp3_wav_handle] ; hFile 9417 ;call [WriteFile] 9418 ;;; 9419 ; 20/10/2024 9420 000067F2 E863040000 call WriteFile 9421 ;;; 9422 000067F7 C3 retn 9423 9424 9425 ; =============== S U B R O U T I N E ======================================= 9426 9427 ; 20/10/2024 9428 mp3_close_wav_file: 9429 000067F8 6A00 push 0 ; dwMoveMethod 9430 ;push 0 ; lpDistanceToMoveHigh 9431 000067FA 6A00 push 0 ; lDistanceToMove 9432 000067FC FF35[54430500] push dword [mp3_wav_handle] ; hFile 9433 ;call [SetFilePointer] 9434 ;;; 9435 ; 20/10/2024 9436 00006802 E8C1040000 call SetFilePointer 9437 ;;; 9438 00006807 E8D9FFFFFF call mp3_write_wav_header 9439 0000680C FF35[54430500] push dword [mp3_wav_handle] ; hObject 9440 ;call [CloseHandle] 9441 ;;; 9442 ; 20/10/2024 9443 00006812 E8EF040000 call CloseFile 9444 ;;; 9445 00006817 C3 retn 9446 9447 9448 ; =============== S U B R O U T I N E ======================================= 9449 9450 ; 20/10/2024 9451 mp3_verify_pcm_file: 9452 00006818 E804020000 call mp3_open_pcm_file 9453 ;;; 9454 ; 20/10/2024 9455 0000681D 7301 jnc short .verify 9456 0000681F C3 retn ; nothing to do (return without error msg) 9457 .verify: 9458 ;;; 9459 00006820 C705[5C430500]0000- mov dword [_@@max_diff], 0 9459 00006828 0000 9460 0000682A C705[60430500]0000- mov dword [_@@avg_diff], 0 9460 00006832 0000 9461 00006834 C705[64430500]0000- mov dword [_@@avg_diff+4], 0 9461 0000683C 0000 9462 0000683E C705[68430500]0000- mov dword [pcm_filepos], 0 9462 00006846 0000 9463 9464 .lop: 9465 00006848 60 pusha 9466 00006849 8B35[CC420500] mov esi, [stream_pos] 9467 0000684F 8B0D[D0420500] mov ecx, [bytes_left] 9468 00006855 BF[00700500] mov edi, sample_buffer 9469 0000685A 31ED xor ebp, ebp 9470 0000685C E845FAFFFF call mp3_decode_frame 9471 00006861 61 popa 9472 00006862 0F824D010000 jb .exit 9473 00006868 A1[70B30000] mov eax, [mp3_src_frame_size] 9474 0000686D 83F800 cmp eax, 0 9475 00006870 0F843F010000 jz .exit 9476 00006876 31C0 xor eax, eax 9477 00006878 833D[98B30000]02 cmp dword [mp3_output_num_channels], 2 9478 0000687F 7207 jb short .this_mono_convert 9479 00006881 0FB605[158C0000] movzx eax, byte [option_mono] 9480 9481 .this_mono_convert: 9482 00006888 A3[6C430500] mov [_@@mono_convert], eax 9483 0000688D 8A0D[178C0000] mov cl, [option_rate_shift] 9484 00006893 B802000000 mov eax, 2 9485 00006898 D3E0 shl eax, cl 9486 0000689A 66A3[70430500] mov [_@@pcm_steps], ax 9487 000068A0 66A3[72430500] mov [_@@pcm_steps+2], ax 9488 000068A6 833D[98B30000]02 cmp dword [mp3_output_num_channels], 2 9489 000068AD 7213 jb short .these_steps 9490 000068AF 66C705[70430500]02- mov word [_@@pcm_steps], 2 9490 000068B7 00 9491 000068B8 8D4400FE lea eax, [eax*2-2] ; [0FFFFFFFEh+eax*2] 9492 000068BC 66A3[72430500] mov [_@@pcm_steps+2], ax 9493 9494 .these_steps: 9495 000068C2 A1[600A0100] mov eax, [mp3_samples_output_size] 9496 000068C7 8A0D[178C0000] mov cl, [option_rate_shift] 9497 000068CD 020D[168C0000] add cl, [option_8bit] 9498 000068D3 020D[6C430500] add cl, byte [_@@mono_convert] 9499 000068D9 D3E0 shl eax, cl 9500 ;push 0 ; lpOverlapped 9501 ;push diskresult ; lpNumberOfBytesRead 9502 000068DB 50 push eax ; nNumberOfBytesToRead 9503 000068DC 68[00820500] push (sample_buffer+1200h) ; sample_buffer+MP3_MAX_OUTPUT_SIZE 9504 000068E1 FF35[58430500] push dword [mp3_pcm_handle] ; hFile 9505 ;call [ReadFile] 9506 ;;; 9507 ; 20/10/2024 9508 000068E7 E8E9030000 call ReadFile 9509 000068EC 7306 jnc short .pcm_read_ok 9510 ; Note: File read error msg has been displayed 9511 000068EE E83F010000 call mp3_close_pcm_file 9512 000068F3 C3 retn 9513 .pcm_read_ok: 9514 ;;; 9515 000068F4 8B0D[600A0100] mov ecx, [mp3_samples_output_size] 9516 000068FA D1E9 shr ecx, 1 9517 000068FC 0F849D000000 jz .compare_done 9518 00006902 BE[00700500] mov esi, sample_buffer ; decoded .mp3 9519 00006907 BF[00820500] mov edi, (sample_buffer+1200h) ; loaded .pcm 9520 9521 .compare_lop: 9522 0000690C 0FBF17 movsx edx, word [edi] 9523 0000690F 833D[6C430500]00 cmp dword [_@@mono_convert], 0 9524 00006916 7408 jz short .no_mono_convert 9525 00006918 0FBF4702 movsx eax, word [edi+2] 9526 0000691C 01C2 add edx, eax 9527 0000691E D1FA sar edx, 1 9528 9529 .no_mono_convert: 9530 00006920 803D[168C0000]00 cmp byte [option_8bit], 0 9531 00006927 7508 jnz short .compare_8bit 9532 00006929 0FBF06 movsx eax, word [esi] ; get 16bit from decoded .mp3 9533 0000692C 83C602 add esi, 2 9534 0000692F EB13 jmp short .compare_this 9535 9536 .compare_8bit: 9537 00006931 0FB606 movzx eax, byte [esi] 9538 00006934 46 inc esi ; convert .pcm 9539 00006935 81C200800000 add edx, 8000h ; make unsigned 9540 0000693B C1FA08 sar edx, 8 ; div 100h 9541 0000693E 80D200 adc dl, 0 ; round up 9542 00006941 80DA00 sbb dl, 0 ; undo on unsigned overflow 9543 9544 .compare_this: 9545 00006944 29D0 sub eax, edx 9546 00006946 7902 jns short .compare_abs ; calc difference 9547 00006948 F7D8 neg eax 9548 9549 .compare_abs: 9550 0000694A 0105[60430500] add [_@@avg_diff], eax 9551 00006950 8315[64430500]00 adc dword [_@@avg_diff+4], 0 9552 00006957 3B05[5C430500] cmp eax, [_@@max_diff] 9553 0000695D 7223 jb short .not_max 9554 0000695F A3[5C430500] mov [_@@max_diff], eax 9555 00006964 8B15[68430500] mov edx, [pcm_filepos] 9556 0000696A 8915[74430500] mov [_@@worst_pcm_filepos], edx 9557 00006970 8B15[CC420500] mov edx, [stream_pos] 9558 00006976 2B15[C8420500] sub edx, [stream_start] 9559 0000697C 8915[78430500] mov [_@@worst_mp3_filepos], edx 9560 9561 .not_max: 9562 00006982 0FB705[70430500] movzx eax, word [_@@pcm_steps] 9563 00006989 C10D[70430500]10 ror dword [_@@pcm_steps], 16 ; next .pcm addr 9564 00006990 01C7 add edi, eax 9565 00006992 0105[68430500] add [pcm_filepos], eax 9566 00006998 49 dec ecx 9567 00006999 0F856DFFFFFF jnz .compare_lop 9568 9569 .compare_done: 9570 0000699F A1[70B30000] mov eax, [mp3_src_frame_size] 9571 000069A4 0105[CC420500] add [stream_pos], eax 9572 000069AA 2905[D0420500] sub [bytes_left], eax 9573 000069B0 E993FEFFFF jmp .lop 9574 9575 .exit: 9576 000069B5 E878000000 call mp3_close_pcm_file 9577 000069BA BA[28A20000] mov edx, _@@txt_verify1 ; "verify max difference = " 9578 000069BF E86CFCFFFF call wrstr_edx 9579 000069C4 A1[5C430500] mov eax, [_@@max_diff] 9580 000069C9 E89FFCFFFF call wr_decimal_eax 9581 000069CE BA[41A20000] mov edx, _@@txt_verify1_at_mp3 ; " at mp3:" 9582 000069D3 E858FCFFFF call wrstr_edx 9583 000069D8 A1[78430500] mov eax, [_@@worst_mp3_filepos] 9584 000069DD E801FDFFFF call wrhexeax 9585 000069E2 BA[4AA20000] mov edx, _@@txt_verify2 ; ", average difference = " 9586 000069E7 E844FCFFFF call wrstr_edx 9587 000069EC A1[60430500] mov eax, [_@@avg_diff] 9588 000069F1 8B15[64430500] mov edx, [_@@avg_diff+4] 9589 000069F7 8B0D[580A0100] mov ecx, [mp3_total_output_size] 9590 000069FD D1E9 shr ecx, 1 9591 000069FF F7F1 div ecx 9592 00006A01 E867FCFFFF call wr_decimal_eax 9593 00006A06 B02E mov al, '.' 9594 00006A08 E831000000 call wrchr 9595 00006A0D B80A000000 mov eax, 10 9596 00006A12 F7E2 mul edx ; fraction*10 9597 00006A14 F7F1 div ecx 9598 00006A16 E89AFCFFFF call wrdigital ; show fraction of average difference 9599 00006A1B E821FCFFFF call wrcrlf 9600 00006A20 C3 retn 9601 9602 9603 ; =============== S U B R O U T I N E ======================================= 9604 9605 ; 20/10/2024 9606 mp3_open_pcm_file: 9607 ;push 0 ; hTemplateFile 9608 ;push 80h ; dwFlagsAndAttributes 9609 ;push 3 ; dwCreationDisposition 9610 ;push 0 ; lpSecurityAttributes 9611 ;push 0 ; dwShareMode 9612 ;push 80000000h ; dwDesiredAccess 9613 00006A21 FF35[C89A0000] push dword [mp3_pcm_fname] ; lpFileName 9614 ;call [CreateFileA] 9615 ;;; 9616 ; 20/10/2024 9617 00006A27 E88F020000 call OpenFile 9618 ;jc short .return 9619 ;;; 9620 00006A2C A3[58430500] mov [mp3_pcm_handle], eax 9621 ;.return: 9622 00006A31 C3 retn 9623 9624 9625 ; =============== S U B R O U T I N E ======================================= 9626 9627 ; 20/10/2024 9628 mp3_close_pcm_file: 9629 00006A32 FF35[58430500] push dword [mp3_pcm_handle] ; hObject 9630 ;call [CloseHandle] 9631 ;retn 9632 ;;; 9633 ; 20/10/2024 9634 00006A38 E8C9020000 call CloseFile 9635 ;;; 9636 00006A3D C3 retn 9637 9638 9639 ; --------------------------------------------------------------------------- 9640 9641 ; =============== S U B R O U T I N E ======================================= 9642 9643 ; 20/10/2024 9644 wrchr: 9645 ; TRDOS 386 System Call 9646 ; ebx = 2 -> write character onto STDOUT 9647 ;push ebx 9648 ;push ecx 9649 ;push eax 9650 00006A3E 60 pusha 9651 ;;mov dword [diskresult], 0 9652 sys _stdio, 2, eax 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006A3F BB02000000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 00006A44 89C1 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006A46 B82E000000 <1> mov eax, %1 133 <1> 134 00006A4B CD40 <1> int 40h 9653 ;jnc short .ok ; if EOF, eax = 0 9654 ;xor eax, eax ; 0 9655 ;.ok: 9656 ;mov [diskresult], eax ; written byte count 9657 00006A4D 61 popa 9658 ;pop eax 9659 ;pop ecx 9660 ;pop ebx 9661 00006A4E C3 retn 9662 9663 9664 ; =============== S U B R O U T I N E ======================================= 9665 9666 ; 20/10/2024 9667 get_commandline: 9668 ; 21/10/2024 9669 00006A4F 5D pop ebp ; near call return address 9670 ; esp = command line start address 9671 ;mov [command_line],esp 9672 00006A50 59 pop ecx ; argc ; number of arguments 9673 ; esp = pointer to argument 1 ; argv[0] 9674 00006A51 49 dec ecx 9675 00006A52 0F8405010000 jz .help 9676 00006A58 58 pop eax ; argument 1 (PRG file name) 9677 00006A59 5E pop esi ; argument 2 (must be input file name) 9678 00006A5A BF[D4420500] mov edi, cmdline_buf 9679 .get_item: 9680 00006A5F 89FB mov ebx, edi 9681 .char_lop: 9682 00006A61 AC lodsb 9683 00006A62 AA stosb 9684 00006A63 3C00 cmp al, 0 9685 00006A65 75FA jnz short .char_lop 9686 9687 00006A67 8A03 mov al, [ebx] 9688 00006A69 3C2F cmp al, '/' 9689 00006A6B 7442 jz short .switch 9690 00006A6D 3C2D cmp al, '-' 9691 00006A6F 743E jz short .switch 9692 00006A71 8B47FB mov eax, [edi-5] 9693 00006A74 0D00202020 or eax, 20202000h 9694 00006A79 3D2E776176 cmp eax, '.wav' ; FASM & NASM syntax 9695 00006A7E 7510 jnz short .not_wav_name 9696 00006A80 891D[C49A0000] mov [mp3_dst_fname], ebx 9697 .get_items_lop: 9698 00006A86 49 dec ecx 9699 00006A87 0F8494000000 jz .done 9700 00006A8D 5E pop esi ; next argument 9701 00006A8E EBCF jmp short .get_item 9702 9703 .not_wav_name: 9704 00006A90 8B47FB mov eax, [edi-5] 9705 00006A93 0D00202020 or eax, 20202000h 9706 00006A98 3D2E70636D cmp eax, '.pcm' ; FASM & NASM syntax 9707 00006A9D 7508 jnz short .not_pcm_name 9708 00006A9F 891D[C89A0000] mov [mp3_pcm_fname], ebx 9709 00006AA5 EBDF jmp short .get_items_lop 9710 9711 .not_pcm_name: 9712 00006AA7 891D[C09A0000] mov [mp3_src_fname], ebx 9713 00006AAD EBD7 jmp short .get_items_lop 9714 9715 .switch: 9716 00006AAF 817B016D6F6E6F cmp dword [ebx+1], 'mono' 9717 00006AB6 7509 jnz short .not_switch_mono 9718 00006AB8 C605[158C0000]01 mov byte [option_mono], 1 9719 00006ABF EBC5 jmp short .get_items_lop 9720 9721 .not_switch_mono: 9722 00006AC1 817B0166617374 cmp dword [ebx+1], 'fast' ; FASM & NASM syntax 9723 00006AC8 7509 jnz short .not_fast_option 9724 00006ACA C605[188C0000]01 mov byte [option_fast], 1 9725 00006AD1 EBB3 jmp short .get_items_lop 9726 9727 .not_fast_option: 9728 00006AD3 817B0138626974 cmp dword [ebx+1], '8bit' 9729 00006ADA 7509 jnz short .not_switch_8bit 9730 00006ADC C605[168C0000]01 mov byte [option_8bit], 1 9731 00006AE3 EBA1 jmp short .get_items_lop 9732 9733 .not_switch_8bit: 9734 00006AE5 817B0168616C66 cmp dword [ebx+1], 'half' 9735 00006AEC 7509 jnz short .not_switch_half 9736 00006AEE C605[178C0000]01 mov byte [option_rate_shift], 1 9737 00006AF5 EB8F jmp short .get_items_lop 9738 9739 .not_switch_half: 9740 00006AF7 817B0171756172 cmp dword [ebx+1], 'quar' 9741 00006AFE 750C jnz short .not_switch_quarter 9742 00006B00 C605[178C0000]02 mov byte [option_rate_shift], 2 9743 00006B07 E97AFFFFFF jmp .get_items_lop 9744 9745 .not_switch_quarter: 9746 00006B0C 817B0174657374 cmp dword [ebx+1], 'test' 9747 00006B13 7548 jnz short .not_switch_test 9748 00006B15 C605[148C0000]01 mov byte [option_test], 1 9749 00006B1C E965FFFFFF jmp .get_items_lop 9750 9751 .done: 9752 00006B21 833D[C09A0000]00 cmp dword [mp3_src_fname], 0 9753 00006B28 7433 jz short .help 9754 ;;; Erdogan Tan - 17/10/2024 9755 ;mov edx, txt_ctrlc 9756 ;call wrstr_edx 9757 ; 20/10/2024 9758 sys _msg, txt_ctrlc, txt_ctrlc_size, 0Fh ; white 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006B2A BB[62A20000] <1> mov ebx, %2 125 <1> %if %0 >= 3 126 00006B2F B919000000 <1> mov ecx, %3 127 <1> %if %0 = 4 128 00006B34 BA0F000000 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006B39 B823000000 <1> mov eax, %1 133 <1> 134 00006B3E CD40 <1> int 40h 9759 ;;; 9760 00006B40 BA[31A10000] mov edx, txt_file ; "file: " 9761 00006B45 E8E6FAFFFF call wrstr_edx 9762 00006B4A 8B15[C09A0000] mov edx, [mp3_src_fname] 9763 00006B50 E8DBFAFFFF call wrstr_edx 9764 00006B55 E8E7FAFFFF call wrcrlf 9765 00006B5A F8 clc 9766 00006B5B 55 push ebp ; return address 9767 00006B5C C3 retn 9768 9769 .not_switch_test: 9770 .help: 9771 ;;; Erdogan Tan - 17/10/2024 9772 00006B5D BA[7BA20000] mov edx, txt_about 9773 00006B62 E8C9FAFFFF call wrstr_edx 9774 ;;; 9775 00006B67 BA[A8A10000] mov edx, txt_help ; "usage: mp3play input.mp3 [output.wav] ["... 9776 00006B6C E8BFFAFFFF call wrstr_edx 9777 00006B71 F9 stc 9778 00006B72 55 push ebp ; return address 9779 00006B73 C3 retn 9780 9781 ; =============== S U B R O U T I N E ======================================= 9782 9783 ; 21/10/2024 9784 set_break: 9785 ; set [u.break] -end of bss- address to 9786 ; end_of_bss at first (mp3 file will be loaded 9787 ; at the end of bss) 9788 ; ([u.break] initially points to the end of PRG file 9789 ; -code and data- except BSS section) 9790 ; 9791 ; TRDOS 386 system call 9792 ; Set break address 9793 ; ebx = new [u.break] 9794 ;sys _break, end_of_bss 9795 ; eax = new break address (dword aligned) 9796 9797 ; 10/01/2025 9798 sys _break, 100000h ; end of 1st 1MB 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006B74 BB00001000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006B79 B811000000 <1> mov eax, %1 133 <1> 134 00006B7E CD40 <1> int 40h 9799 9800 00006B80 A3[C8420500] mov [stream_start], eax 9801 00006B85 A3[CC420500] mov [stream_pos], eax 9802 9803 00006B8A C3 retn 9804 9805 9806 ; =============== S U B R O U T I N E ======================================= 9807 9808 ; 20/10/2024 9809 9810 open_and_mmap_the_file: 9811 ; 21/10/2024 9812 ; TRDOS 386 system call 9813 ; Open File 9814 ; ebx = pointer to filename 9815 ; ecx = open mode, 0 = read 9816 sys _open, [mp3_src_fname], 0 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006B8B 8B1D[C09A0000] <1> mov ebx, %2 125 <1> %if %0 >= 3 126 00006B91 B900000000 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006B96 B805000000 <1> mov eax, %1 133 <1> 134 00006B9B CD40 <1> int 40h 9817 00006B9D 7270 jc short .not_found 9818 9819 00006B9F A3[C4420500] mov [hFile], eax 9820 9821 ; get file size by using systell system call 9822 ; (not applicable for TRDOS 386 Kernel v2.0.9 and earlier) 9823 ; TRDOS 386 system call 9824 ; Get current file (offset) pointer 9825 ; ebx = file handle (file descriptor) 9826 ; ecx = 0, offset 9827 ; edx = 2, from the end of file 9828 ;sys _tell, eax, 0, 2 9829 ;mov [mp3_file_size], eax 9830 9831 ; *** get file size *** 9832 ; TRDOS 386 system call 9833 ; Set file (offset) pointer to file size 9834 ; (needed for TRDOS kernel v2.0.9 and earlier) 9835 ; ebx = file handle (file descriptor) 9836 ; ecx = 0, offset 9837 ; edx = 2, from the end of file 9838 sys _seek, eax, 0, 2 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006BA4 89C3 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 00006BA6 B900000000 <1> mov ecx, %3 127 <1> %if %0 = 4 128 00006BAB BA02000000 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006BB0 B813000000 <1> mov eax, %1 133 <1> 134 00006BB5 CD40 <1> int 40h 9839 ; TRDOS 386 system call 9840 ; Get current file (offset) pointer 9841 ; (needed for TRDOS 386 kernel version 2.0.9 and earlier) 9842 00006BB7 31D2 xor edx, edx ; 0 9843 ; ecx = 0 9844 ; ebx = file handle 9845 sys _tell 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006BB9 B814000000 <1> mov eax, %1 133 <1> 134 00006BBE CD40 <1> int 40h 9846 00006BC0 A3[480A0100] mov [mp3_file_size], eax 9847 9848 ; *** set file offset pointer to 0 again *** 9849 ; TRDOS 386 system call 9850 ; Set file (offset) pointer 9851 ; ebx = file handle (file descriptor) 9852 ; ecx = 0, offset 9853 ; edx = 0, from the beginning/start of file 9854 00006BC5 50 push eax 9855 sys _seek 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006BC6 B813000000 <1> mov eax, %1 133 <1> 134 00006BCB CD40 <1> int 40h 9856 00006BCD 58 pop eax 9857 9858 ; now, set [u.break] address to the end of mp3 file 9859 ; at memory -in BSS section- 9860 ; (not necessary for TRDOS 386 PRG files) 9861 ; (this system call will allocate user memory pages 9862 ; before sysread system call.. early) 9863 ;add eax, end_of_bss 9864 ; 13/01/2025 9865 00006BCE 0500001000 add eax, 100000h ; + end of 1st 1MB 9866 ; TRDOS 386 system call 9867 ; Set break address 9868 ; ebx = new [u.break] 9869 sys _break, eax 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006BD3 89C3 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006BD5 B811000000 <1> mov eax, %1 133 <1> 134 00006BDA CD40 <1> int 40h 9870 9871 ; TRDOS 386 system call 9872 ; Read file 9873 ; ebx = file handle (file descriptor) 9874 ; ecx = buffer address 9875 ; edx = byte count 9876 sys _read, [hFile], [stream_start], [mp3_file_size] 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006BDC 8B1D[C4420500] <1> mov ebx, %2 125 <1> %if %0 >= 3 126 00006BE2 8B0D[C8420500] <1> mov ecx, %3 127 <1> %if %0 = 4 128 00006BE8 8B15[480A0100] <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006BEE B803000000 <1> mov eax, %1 133 <1> 134 00006BF3 CD40 <1> int 40h 9877 00006BF5 7204 jc short .read_error 9878 00006BF7 39D0 cmp eax, edx 9879 00006BF9 730E jnb short .ok 9880 ;or eax, eax 9881 ;jnz short .ok 9882 .read_error: 9883 ; TRDOS 386 system call 9884 ; Close file 9885 ; ebx = file handle (file descriptor) 9886 ;sys _close, [hFile] 9887 sys _close 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006BFB B806000000 <1> mov eax, %1 133 <1> 134 00006C00 CD40 <1> int 40h 9888 9889 00006C02 BA[F36C0000] mov edx, txt_read_err 9890 00006C07 EB0B jmp short .r_err_msg 9891 .ok: 9892 00006C09 A3[D0420500] mov [bytes_left], eax ; read count 9893 00006C0E C3 retn 9894 .not_found: 9895 00006C0F BA[8EA10000] mov edx, txt_not_found ; "cannot open source file\r\n" 9896 .r_err_msg: 9897 00006C14 E817FAFFFF call wrstr_edx 9898 00006C19 F9 stc 9899 00006C1A C3 retn 9900 9901 ;txt_read_err db 'File read error!',0Dh,0Ah,0 9902 9903 9904 ; =============== S U B R O U T I N E ======================================= 9905 9906 ; 20/10/2024 9907 print_msg: 9908 ; TRDOS 386 system call 9909 ; write/display message on screen 9910 ; ebx = ASCIIZ message (text) address 9911 ; ecx = max. message length (stop count before char zero) 9912 ; edx = character color (CGA) 9913 00006C1B B9FF000000 mov ecx, 255 9914 00006C20 BA0B000000 mov edx, 0Bh ; DL ; cyan 9915 sys _msg 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006C25 B823000000 <1> mov eax, %1 133 <1> 134 00006C2A CD40 <1> int 40h 9916 00006C2C C3 retn 9917 9918 9919 ; =============== S U B R O U T I N E ======================================= 9920 9921 ; 20/10/2024 9922 GetTickCount: 9923 ; TRDOS 386 system call 9924 ; get current time, get tick count 9925 ; ebx = 4 -> get count of system timer ticks 9926 sys _time, 4 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006C2D BB04000000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006C32 B80D000000 <1> mov eax, %1 133 <1> 134 00006C37 CD40 <1> int 40h 9927 ; eax = system timer ticks (18.2 ticks per second) 9928 00006C39 BA15F4BC20 mov edx, 549254165 ; 10^10/18.2 9929 00006C3E F7E2 mul edx 9930 ; edx:eax = milliseconds * 10^7 9931 00006C40 BB80969800 mov ebx, 10000000 9932 00006C45 F7F3 div ebx ; 10^7 9933 ; eax = milliseconds 9934 00006C47 81FA404B4C00 cmp edx, 5000000 ; 10^7/2 9935 00006C4D 7201 jb short .ok 9936 00006C4F 40 inc eax ; round up 9937 .ok: 9938 00006C50 C3 retn 9939 9940 9941 ; =============== E X I T =================================================== 9942 9943 ; 20/10/2024 9944 ExitProcess: 9945 00006C51 31DB xor ebx, ebx ; mov ebx, 0 ; exit code 9946 ExitProcess@: ; 13/01/2025 9947 sys _exit 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006C53 B801000000 <1> mov eax, %1 133 <1> 134 00006C58 CD40 <1> int 40h 9948 ;hang: 9949 ;jmp short hang 9950 9951 9952 ; =============== S U B R O U T I N E ======================================= 9953 9954 ; 20/10/2024 9955 WriteFile: 9956 00006C5A 58 pop eax ; near call return address 9957 00006C5B 5B pop ebx 9958 00006C5C 59 pop ecx 9959 00006C5D 5A pop edx 9960 00006C5E 50 push eax 9961 ; TRDOS 386 system call 9962 ; Write file 9963 ; ebx = file handle (file descriptor) 9964 ; ecx = buffer address 9965 ; edx = byte count 9966 sys _write 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006C5F B804000000 <1> mov eax, %1 133 <1> 134 00006C64 CD40 <1> int 40h 9967 00006C66 730F jnc short .ok 9968 00006C68 39D0 cmp eax, edx 9969 00006C6A 730B jnb short .ok 9970 ;or eax, eax 9971 ;jnz short .ok 9972 9973 00006C6C BA[786C0000] mov edx, txt_write_err 9974 00006C71 E8BAF9FFFF call wrstr_edx 9975 00006C76 F9 stc 9976 .ok: 9977 00006C77 C3 retn 9978 9979 00006C78 46696C652077726974- txt_write_err db 'File write error!',0Dh,0Ah,0 9979 00006C81 65206572726F72210D- 9979 00006C8A 0A00 9980 9981 9982 ; =============== S U B R O U T I N E ======================================= 9983 9984 ; 20/10/2024 9985 CreateFile: 9986 00006C8C 58 pop eax ; near call return address 9987 00006C8D 5B pop ebx 9988 00006C8E 50 push eax 9989 ; TRDOS 386 system call 9990 ; Create file 9991 ; ebx = (ASCIIZ) file name address 9992 ; ecx = mode 9993 00006C8F 31C9 xor ecx, ecx ; CL ; mov ecx, 0 ; ordinary file 9994 sys _creat 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006C91 B808000000 <1> mov eax, %1 133 <1> 134 00006C96 CD40 <1> int 40h 9995 00006C98 730B jnc short .ok ; eax = file handle 9996 9997 00006C9A BA[A66C0000] mov edx, txt_create_err 9998 00006C9F E88CF9FFFF call wrstr_edx 9999 00006CA4 F9 stc 10000 .ok: 10001 00006CA5 C3 retn 10002 10003 00006CA6 46696C652063726561- txt_create_err db 'File create error!',0Dh,0Ah,0 10003 00006CAF 7465206572726F7221- 10003 00006CB8 0D0A00 10004 10005 10006 ; =============== S U B R O U T I N E ======================================= 10007 10008 ; 20/10/2024 10009 OpenFile: 10010 00006CBB 58 pop eax ; near call return address 10011 00006CBC 5B pop ebx 10012 00006CBD 50 push eax 10013 ; TRDOS 386 system call 10014 ; Open file 10015 ; ebx = (ASCIIZ) file name address 10016 ; ecx = mode 10017 00006CBE 31C9 xor ecx, ecx ; CL ; mov ecx, 0 ; ordinary file 10018 sys _open 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006CC0 B805000000 <1> mov eax, %1 133 <1> 134 00006CC5 CD40 <1> int 40h 10019 ;jnc short .ok ; eax = file handle 10020 ; 10021 ;mov edx, txt_open_err 10022 ;call wrstr_edx 10023 ;stc 10024 ;.ok: 10025 00006CC7 C3 retn 10026 10027 ;txt_open_err db 'File not found!',0Dh,0Ah,0 10028 ;db 'File open error!',ODh,0Ah,0 10029 10030 10031 ; =============== S U B R O U T I N E ======================================= 10032 10033 ; 20/10/2024 10034 SetFilePointer: 10035 00006CC8 58 pop eax ; near call return address 10036 00006CC9 5B pop ebx 10037 00006CCA 59 pop ecx 10038 00006CCB 5A pop edx 10039 00006CCC 50 push eax 10040 ; TRDOS 386 system call 10041 ; Set file offset pointer ; sysseek 10042 ; ebx = file handle (file descriptor) 10043 ; ecx = offset 10044 ; edx = switch, DL = 0 = from the start of file 10045 ; 1 = from the current offset 10046 ; 2 = from the end of file 10047 sys _seek 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006CCD B813000000 <1> mov eax, %1 133 <1> 134 00006CD2 CD40 <1> int 40h 10048 ; eax = (value of) new offset pointer 10049 10050 00006CD4 C3 retn 10051 10052 10053 ; =============== S U B R O U T I N E ======================================= 10054 10055 ; 20/10/2024 10056 ReadFile: 10057 00006CD5 58 pop eax ; near call return address 10058 00006CD6 5B pop ebx 10059 00006CD7 59 pop ecx 10060 00006CD8 5A pop edx 10061 00006CD9 50 push eax 10062 ; TRDOS 386 system call 10063 ; Read file 10064 ; ebx = file handle (file descriptor) 10065 ; ecx = buffer address 10066 ; edx = byte count 10067 sys _read 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006CDA B803000000 <1> mov eax, %1 133 <1> 134 00006CDF CD40 <1> int 40h 10068 00006CE1 730F jnc short .ok 10069 00006CE3 39D0 cmp eax, edx 10070 00006CE5 730B jnb short .ok 10071 ;or eax, eax 10072 ;jnz short .ok 10073 10074 00006CE7 BA[F36C0000] mov edx, txt_read_err 10075 00006CEC E83FF9FFFF call wrstr_edx 10076 00006CF1 F9 stc 10077 .ok: 10078 00006CF2 C3 retn 10079 10080 00006CF3 46696C652072656164- txt_read_err db 'File read error!',0Dh,0Ah,0 10080 00006CFC 206572726F72210D0A- 10080 00006D05 00 10081 10082 10083 ; =============== S U B R O U T I N E ======================================= 10084 10085 ; 20/10/2024 10086 CloseFile: 10087 00006D06 58 pop eax ; near call return address 10088 00006D07 5B pop ebx 10089 00006D08 50 push eax 10090 ; TRDOS 386 system call 10091 ; Close file 10092 ; ebx = file handle (file descriptor) 10093 sys _close 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006D09 B806000000 <1> mov eax, %1 133 <1> 134 00006D0E CD40 <1> int 40h 10094 10095 00006D10 C3 retn 10096 10097 10098 ; --------------------------------------------------------------------------- 10099 ; TRDOS 386 Audio System Functions 10100 ; --------------------------------------------------------------------------- 10101 10102 ; =============== S U B R O U T I N E ======================================= 10103 10104 ; 10/01/2025 10105 ; 20/10/2024 10106 detect_enable_audio_device: 10107 00006D11 66C705[52A30000]80- mov word [max_frequency], 48000 10107 00006D19 BB 10108 ; 10/01/2025 10109 ;mov byte [blocks], 8 10110 10111 ; check AC'97 hardware at first 10112 ; (48kHz support) 10113 ; TRDOS 386 system call 10114 ; sysaudio 10115 ; Detect (BH=1) AC'97 (BL=2) Audio Device 10116 .ac97: 10117 sys _audio, 0102h 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006D1A BB02010000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006D1F B820000000 <1> mov eax, %1 133 <1> 134 00006D24 CD40 <1> int 40h 10118 00006D26 7245 jc short .sb16 10119 00006D28 C605[50A30000]02 mov byte [audio_hardware], 2 ; AC97 10120 10121 ;;;; 10122 ; 12/01/2025 (ref: playwav9.s, 18/12/2024) 10123 sys _audio, 0E00h ; get audio controller info 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006D2F BB000E0000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006D34 B820000000 <1> mov eax, %1 133 <1> 134 00006D39 CD40 <1> int 40h 10124 ; EAX = IRQ Number in AL 10125 ; Audio Device Number in AH 10126 ; EBX = DEV/VENDOR ID 10127 ; (DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV) 10128 ; ECX = BUS/DEV/FN 10129 ; (00000000BBBBBBBBDDDDDFFF00000000) 10130 ; EDX = NABMBAR/NAMBAR (for AC97) 10131 ; (Low word, DX = NAMBAR address) 10132 ; EDX = Base IO Addr (DX) for SB16 & VT8233 10133 10134 00006D3B 891D[40A30000] mov [dev_vendor], ebx 10135 00006D41 890D[3CA30000] mov [bus_dev_fn], ecx 10136 10137 00006D47 668915[44A30000] mov [NAMBAR], dx ; save audio mixer base addr 10138 ;shr edx, 16 10139 ;mov [NABMBAR], dx ; save bus master base addr 10140 00006D4E 8915[44A30000] mov [NAMBAR], edx 10141 10142 00006D54 A2[4CA30000] mov [ac97_int_ln_reg], al 10143 ;;;; 10144 10145 ; TRDOS 386 system call 10146 ; sysaudio 10147 ; Get AC'97 Codec info 10148 ; (Function 14, sub function 1) 10149 sys _audio, 0E01h 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006D59 BB010E0000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006D5E B820000000 <1> mov eax, %1 133 <1> 134 00006D63 CD40 <1> int 40h 10150 ; Save Variable Rate Audio support bit 10151 00006D65 2401 and al, 1 10152 00006D67 A2[51A30000] mov [vra], al 10153 00006D6C C3 retn 10154 .sb16: 10155 ; check Sound Blaster 16 card at second 10156 ; (44100Hz support, but 24kHz will be used) 10157 ; TRDOS 386 system call 10158 ; sysaudio 10159 ; Detect (BH=1) SB16 (BL=1) Audio Card 10160 sys _audio, 0101h 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006D6D BB01010000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006D72 B820000000 <1> mov eax, %1 133 <1> 134 00006D77 CD40 <1> int 40h 10161 00006D79 7228 jc short .vt8233 10162 00006D7B C605[50A30000]01 mov byte [audio_hardware], 1 ; SB16 10163 00006D82 66C705[52A30000]44- mov word [max_frequency], 44100 10163 00006D8A AC 10164 ; 10/01/2025 10165 ;;mov byte [blocks], 7 10166 ;dec byte [blocks] 10167 10168 ;;;; 10169 ; 12/01/2025 (ref: sb16play.s, 20/12/2024) 10170 sys _audio, 0E00h ; get audio controller info 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006D8B BB000E0000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006D90 B820000000 <1> mov eax, %1 133 <1> 134 00006D95 CD40 <1> int 40h 10171 10172 00006D97 8915[48A30000] mov [audio_io_base], edx 10173 00006D9D A2[4CA30000] mov [audio_intr], al 10174 ;;;; 10175 10176 00006DA2 C3 retn 10177 .vt8233: 10178 ; check VIA VT3237R (VT8233) hardware at third 10179 ; (48kHz support) 10180 ; TRDOS 386 system call 10181 ; sysaudio 10182 ; Detect (BH=1) VT8237R (BL=3) Audio Device 10183 sys _audio, 0103h 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006DA3 BB03010000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006DA8 B820000000 <1> mov eax, %1 133 <1> 134 00006DAD CD40 <1> int 40h 10184 00006DAF 7208 jc short .hda 10185 00006DB1 C605[50A30000]03 mov byte [audio_hardware], 3 ; VT8237R 10186 00006DB8 C3 retn 10187 .hda: 10188 ; check Intel HDA hardware at last 10189 ; (48kHz support) 10190 ; TRDOS 386 system call 10191 ; sysaudio 10192 ; Detect (BH=1) Intel HDA (BL=4) Audio Device 10193 sys _audio, 0104h 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006DB9 BB04010000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006DBE B820000000 <1> mov eax, %1 133 <1> 134 00006DC3 CD40 <1> int 40h 10194 00006DC5 7208 jc short .err 10195 00006DC7 C605[50A30000]04 mov byte [audio_hardware], 4 ; HDA 10196 00006DCE C3 retn 10197 .err: 10198 00006DCF BA[DB6D0000] mov edx, txt_audio_nf_err 10199 00006DD4 E857F8FFFF call wrstr_edx 10200 00006DD9 F9 stc 10201 00006DDA C3 retn 10202 10203 00006DDB 50726F706572206175- txt_audio_nf_err: db 'Proper audio hardware not found!',0Dh,0Ah,0 10203 00006DE4 64696F206861726477- 10203 00006DED 617265206E6F742066- 10203 00006DF6 6F756E64210D0A00 10204 10205 10206 ; =============== CONSTANT ================================================== 10207 10208 ; 21/10/2024 10209 MP3_MAX_OUTPUT_SIZE equ 2*2*18*32*2 10210 ; = 1200h = 4608 decimal = 2 channels, 2 granules, 18*32, 2 byte(16bit) 10211 10212 10213 ; =============== S U B R O U T I N E ======================================= 10214 10215 ; 12/01/2025 10216 audio_system_init: 10217 ;mov eax, sample_buffer_size 10218 ; 10/01/2025 10219 ;mov byte [blocks], 16 10220 ; 12/01/2025 10221 00006DFE C605[56A30000]08 mov byte [blocks], 8 10222 00006E05 A1[600A0100] mov eax, [mp3_samples_output_size] 10223 00006E0A C1E003 shl eax, 3 ; * 8 10224 ;shl eax, 4 ; * 16 10225 .asi@: 10226 ; 12/01/2025 10227 ;cmp eax, 65536 10228 ;jna short .asi@@ 10229 ;sub eax, [mp3_samples_output_size] 10230 ;dec byte [blocks] 10231 ;;; 10232 ; 11/01/2025 10233 ;test byte [blocks], 1 10234 ;jz short .asi@ 10235 ;dec byte [blocks] ; even number 10236 ;sub eax, [mp3_samples_output_size] 10237 ;;; 10238 ;jmp short .asi@ 10239 .asi@@: 10240 00006E0D 803D[50A30000]01 cmp byte [audio_hardware], 1 ; SB16 10241 00006E14 7515 jne short .bufaloc 10242 .asi@@@: 10243 ; 10/01/2025 10244 00006E16 3D00800000 cmp eax, 32768 10245 00006E1B 760E jna short .bufaloc 10246 ; sample_buffer_size = 36864 bytes ; 8 blocks 10247 ;sub eax, MP3_MAX_OUTPUT_SIZE 10248 ; eax = 32256 ; 7 blocks 10249 ; 10/01/2025 10250 00006E1D 2B05[600A0100] sub eax, [mp3_samples_output_size] 10251 00006E23 FE0D[56A30000] dec byte [blocks] 10252 ;;; 10253 ; 11/01/2025 10254 ;test byte [blocks], 1 10255 ;jz short .asi@@@ 10256 ;dec byte [blocks] ; even number 10257 ;sub eax, [mp3_samples_output_size] 10258 ;;; 10259 00006E29 EBEB jmp short .asi@@@ 10260 .bufaloc: 10261 ; TRDOS 386 system call 10262 ; sysaudio 10263 ; Allocate audio buffer (for user) 10264 ; ebx = 0200h (BH=2) 10265 ; ecx = buffer size (in bytes) 10266 ; edx = buffer address (virtual) 10267 00006E2B A3[58A30000] mov [buffer_size], eax 10268 sys _audio, 0200h, eax, sample_buffer 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006E30 BB00020000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 00006E35 89C1 <1> mov ecx, %3 127 <1> %if %0 = 4 128 00006E37 BA[00700500] <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006E3C B820000000 <1> mov eax, %1 133 <1> 134 00006E41 CD40 <1> int 40h 10269 00006E43 7225 jc short .init_err 10270 10271 ; 12/01/2025 10272 ; clear audio buffer (before playback) 10273 00006E45 BF[00700500] mov edi, sample_buffer 10274 ; ecx = buffer size in bytes 10275 00006E4A C1E902 shr ecx, 2 ; double word 10276 00006E4D 31C0 xor eax, eax 10277 00006E4F F3AB rep stosd 10278 10279 ; TRDOS 386 system call 10280 ; sysaudio 10281 ; Initialize audio device (bh = 3) 10282 ; bl = 01h -> CallBack method 10283 ; edx = Callback service address (virtual) 10284 ; ecx = 0 ; CL = srb value ; not used 10285 sys _audio, 0301h, 0, audio_callback 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006E51 BB01030000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 00006E56 B900000000 <1> mov ecx, %3 127 <1> %if %0 = 4 128 00006E5B BA[9D6E0000] <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006E60 B820000000 <1> mov eax, %1 133 <1> 134 00006E65 CD40 <1> int 40h 10286 ; 12/01/2025 10287 ; SRB method (faster than callback method) 10288 ; bl = 0 -> Signal Response Byte method 10289 ; cl = 1 -> SRB set value 10290 ; (will be set by audio IRQ service of the kernel) 10291 ; edx = SRB address -one byte data- 10292 ;sys _audio, 0300h, 1, srb 10293 00006E67 7201 jc short .init_err 10294 00006E69 C3 retn 10295 .init_err: 10296 init_error: ; 13/01/2025 10297 00006E6A BA[766E0000] mov edx, txt_audio_init_err 10298 00006E6F E8BCF7FFFF call wrstr_edx 10299 00006E74 F9 stc 10300 00006E75 C3 retn 10301 10302 00006E76 417564696F20686172- txt_audio_init_err: db 'Audio hardware initialization error!',0Dh,0Ah,0 10302 00006E7F 647761726520696E69- 10302 00006E88 7469616C697A617469- 10302 00006E91 6F6E206572726F7221- 10302 00006E9A 0D0A00 10303 10304 10305 ; =============== S U B R O U T I N E ======================================= 10306 10307 ; 21/10/2024 10308 audio_callback: 10309 ; Operating system has directed CPU here because of 10310 ; user (2nd) stage of the audio hardware interrupt service. 10311 ; This procedure must be short and return to operating 10312 ; system again via sysrelease system call 10313 ; (or any system call here will be handled as sysrelease). 10314 10315 00006E9D C605[54A30000]01 mov byte [srb], 1 10316 10317 ; 12/01/2025 10318 00006EA4 E884010000 call try_enqueue_all_blocks 10319 10320 sys _rele ; return from callback service 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006EA9 B827000000 <1> mov eax, %1 133 <1> 134 00006EAE CD40 <1> int 40h 10321 10322 ; we must not come here ! 10323 00006EB0 BBFFFFFFFF mov ebx, -1 10324 sys _exit 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006EB5 B801000000 <1> mov eax, %1 133 <1> 134 00006EBA CD40 <1> int 40h 10325 ;jmp short audio_callback 10326 10327 10328 ; =============== S U B R O U T I N E ======================================= 10329 10330 ; 13/01/2025 10331 ; 12/01/2025 10332 ; 10/01/2025 10333 ; 21/10/2024 10334 mp3_cast_to_speaker: 10335 ; 13/01/2025 10336 %if 1 10337 ; Start to play 10338 00006EBC A1[A0B30000] mov eax, [mp3_bytes_per_sample] 10339 ;shr al, 1 ; 8 -> 0, 16 -> 1 10340 ;shl al, 1 ; 16 -> 2, 8 -> 0 10341 00006EC1 2402 and al, 2 ; 22/10/2024 10342 00006EC3 8B1D[98B30000] mov ebx, [mp3_output_num_channels] 10343 00006EC9 4B dec ebx 10344 00006ECA 08C3 or bl, al 10345 00006ECC 8B0D[9CB30000] mov ecx, [mp3_output_sample_rate] 10346 00006ED2 B704 mov bh, 4 ; start to play 10347 10348 ; 13/01/2025 10349 mp3_cast_to_speaker_@: 10350 00006ED4 53 push ebx 10351 00006ED5 51 push ecx 10352 %endif 10353 ; 12/01/2025 10354 ;call try_enqueue_all_blocks 10355 10356 ; 12/01/2025 10357 ;cmp dword [bytes_left],0 10358 ;jz short .playback 10359 10360 ; 12/01/2025 10361 ; (here audio buffer -sample_buffer- is empty) 10362 ; (clear dma half buffer 1) 10363 sys _audio, 1001h 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006ED6 BB01100000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006EDB B820000000 <1> mov eax, %1 133 <1> 134 00006EE0 CD40 <1> int 40h 10364 ; (clear dma half buffer 2) 10365 ;sys _audio, 1002h 10366 10367 ; TRDOS 386 system call 10368 ; sysaudio 10369 ; bh = 16 : update (current, first) dma half buffer 10370 ; bl = 0 : then switch to the next (second) half buffer 10371 sys _audio, 1000h 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006EE2 BB00100000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006EE7 B820000000 <1> mov eax, %1 133 <1> 134 00006EEC CD40 <1> int 40h 10372 10373 ; 12/01/2025 10374 ; 22/10/2024 10375 ;call try_enqueue_all_blocks 10376 .playback: 10377 ; TRDOS 386 system call 10378 ; sysaudio 10379 ; Set Master Volume Level (BL=0 or 80h) 10380 ; for next playing (BL>=80h) 10381 ;sys _audio, 0B80h, 1D1Dh 10382 sys _audio, 0B00h, 1D1Dh 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006EEE BB000B0000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 00006EF3 B91D1D0000 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006EF8 B820000000 <1> mov eax, %1 133 <1> 134 00006EFD CD40 <1> int 40h 10383 10384 ;mov byte [volume_level], 1Dh 10385 00006EFF 880D[55A30000] mov [volume_level], cl 10386 ; 13/01/2025 10387 %if 0 10388 ; Start to play 10389 mov eax, [mp3_bytes_per_sample] 10390 ;shr al, 1 ; 8 -> 0, 16 -> 1 10391 ;shl al, 1 ; 16 -> 2, 8 -> 0 10392 and al, 2 ; 22/10/2024 10393 mov ebx, [mp3_output_num_channels] 10394 dec ebx 10395 or bl, al 10396 mov ecx, [mp3_output_sample_rate] 10397 mov bh, 4 ; start to play 10398 %else 10399 00006F05 59 pop ecx ; sample rate (frequency) 10400 00006F06 5B pop ebx ; play mode (bl) 10401 %endif 10402 ; TRDOS 386 system call 10403 ; sysaudio 10404 ; bh = 4 -> start to play 10405 ; bl = mode -> bit 0, 1 = stereo, 0 = mono 10406 ; bit 1, 1 = 16 bit, 0 = 8 bit 10407 ; cx = sample rate (hertz) 10408 sys _audio 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006F07 B820000000 <1> mov eax, %1 133 <1> 134 00006F0C CD40 <1> int 40h 10409 10410 ; 12/01/2025 10411 00006F0E C605[54A30000]00 mov byte [srb], 0 10412 ;;; 10413 10414 .playback_lop: 10415 00006F15 31C0 xor eax, eax 10416 00006F17 3905[D0420500] cmp [bytes_left], eax ; 0 10417 00006F1D 7508 jnz short .playback_next 10418 ; 22/10/2024 10419 00006F1F 3805[FC9A0000] cmp byte [num_enqueued_frames], al ; 0 10420 00006F25 7447 jz short .playback_end 10421 .playback_next: 10422 00006F27 A2[FC9A0000] mov [num_enqueued_frames], al ; 0 10423 00006F2C 803D[54A30000]01 cmp byte [srb], 1 ; audio interrupt status 10424 00006F33 7274 jb short .getchar 10425 ;mov byte [srb], 0 ; reset 10426 00006F35 A2[54A30000] mov [srb], al ; 0 10427 ; 12/01/2025 10428 ;call try_enqueue_all_blocks 10429 ; 15/01/2025 10430 00006F3A 803D[56A30000]00 cmp byte [blocks], 0 ; interpolation ? 10431 00006F41 7618 jna short .interpolated ; yes 10432 10433 ; 15/01/2025 10434 00006F43 B44E mov ah, 4Eh ; red backgroud, yellow font 10435 .indicator: 10436 ;;; 10/01/2025 10437 00006F45 A0[3AA30000] mov al, [half_buffer] 10438 00006F4A 8035[3AA30000]01 xor byte [half_buffer], 1 10439 ;mov ah, 4Eh 10440 00006F51 0431 add al, '1' 10441 00006F53 66A300800B00 mov [0B8000h], ax 10442 ;;; 10443 00006F59 EBBA jmp short .playback_lop 10444 10445 .interpolated: 10446 ; 15/01/2025 10447 ; (a solution for very fast indicator digit change) 10448 ; (8 to 1) 10449 00006F5B FE05[65A30000] inc byte [counter] 10450 00006F61 A0[65A30000] mov al, [counter] 10451 00006F66 2407 and al, 7 10452 00006F68 75AB jnz short .playback_lop 10453 00006F6A B41E mov ah, 1Eh ; blue backgroud, yellow font 10454 00006F6C EBD7 jmp short .indicator 10455 10456 .playback_end: 10457 ;;; 10/01/2025 10458 00006F6E 66B8304E mov ax, 4E30h 10459 00006F72 66A300800B00 mov [0B8000h], ax 10460 ;;; 10461 10462 ; TRDOS 386 system call 10463 ; sysaudio 10464 ; Stop playing 10465 sys _audio, 0700h 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006F78 BB00070000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006F7D B820000000 <1> mov eax, %1 133 <1> 134 00006F82 CD40 <1> int 40h 10466 ; Cancel callback service (for user) 10467 sys _audio, 0900h 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006F84 BB00090000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006F89 B820000000 <1> mov eax, %1 133 <1> 134 00006F8E CD40 <1> int 40h 10468 ; Deallocate audio buffer (for user) 10469 sys _audio, 0A00h 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006F90 BB000A0000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006F95 B820000000 <1> mov eax, %1 133 <1> 134 00006F9A CD40 <1> int 40h 10470 ; Disable audio device 10471 sys _audio, 0C00h 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006F9C BB000C0000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006FA1 B820000000 <1> mov eax, %1 133 <1> 134 00006FA6 CD40 <1> int 40h 10472 00006FA8 C3 retn 10473 10474 .getchar: 10475 ; TRDOS 386 system call 10476 ; sysstdio 10477 ; BL = 1 -> read a character on stdin (no wait) 10478 sys _stdio, 1 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006FA9 BB01000000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006FAE B82E000000 <1> mov eax, %1 133 <1> 134 00006FB3 CD40 <1> int 40h 10479 00006FB5 21C0 and eax, eax 10480 00006FB7 0F846AFFFFFF jz .playback_next ; 15/01/2024 10481 10482 00006FBD 3C2B cmp al, '+' ; increase sound volume 10483 00006FBF 741B je short .inc_volume 10484 00006FC1 3C2D cmp al, '-' 10485 00006FC3 7441 je short .dec_volume 10486 10487 ;;; 10488 ; 10/01/2025 10489 ;cmp ah, 01h 10490 00006FC5 3C1B cmp al, 1Bh ; ESC 10491 00006FC7 74A5 je short .playback_end 10492 ;cmp ax, 2E03h 10493 00006FC9 3C03 cmp al, 03h ; CTRL+C 10494 00006FCB 74A1 je short .playback_end 10495 ;;; 10496 ; 12/01/2025 10497 00006FCD 24DF and al, 0DFh 10498 00006FCF 3C48 cmp al, 'H' 10499 00006FD1 7446 je short .hw_info 10500 00006FD3 3C42 cmp al, 'B' 10501 00006FD5 744C je short .b_info 10502 00006FD7 E94BFFFFFF jmp .playback_next 10503 10504 .inc_volume: 10505 00006FDC 8A0D[55A30000] mov cl, [volume_level] 10506 00006FE2 80F91F cmp cl, 1Fh ; 31 10507 00006FE5 0F833CFFFFFF jnb .playback_next 10508 00006FEB FEC1 inc cl 10509 .chg_volume: 10510 00006FED 880D[55A30000] mov [volume_level], cl 10511 00006FF3 88CD mov ch, cl 10512 ; TRDOS 386 system call 10513 ; sysstdio 10514 ; Set master volume level 10515 ; bh = 11 10516 ; cl = left channel volume (0 to 31 max) 10517 ; ch = right channel volume (0 to 31 max) 10518 sys _audio, 0B00h 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00006FF5 BB000B0000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00006FFA B820000000 <1> mov eax, %1 133 <1> 134 00006FFF CD40 <1> int 40h 10519 00007001 E921FFFFFF jmp .playback_next 10520 .dec_volume: 10521 00007006 8A0D[55A30000] mov cl, [volume_level] 10522 0000700C 80F901 cmp cl, 1 ; 1 10523 0000700F 0F8612FFFFFF jna .playback_next 10524 00007015 FEC9 dec cl 10525 00007017 EBD4 jmp short .chg_volume 10526 10527 ; 12/01/2025 10528 .hw_info: 10529 00007019 E816170000 call write_audio_dev_info 10530 0000701E E904FFFFFF jmp .playback_next 10531 ; 12/01/2025 10532 .b_info: 10533 00007023 E8B7190000 call write_buffer_size 10534 00007028 E9FAFEFFFF jmp .playback_next 10535 10536 10537 ; =============== S U B R O U T I N E ======================================= 10538 10539 ; 13/01/2025 10540 ; 12/01/2025 10541 ; 09/01/2025 10542 ; 21/10/2024 10543 try_enqueue_all_blocks: 10544 ; 12/01/2025 10545 0000702D 60 pusha 10546 0000702E BF[00700500] mov edi, sample_buffer 10547 ; 10/01/2025 10548 ;jmp short .first_block 10549 ; 13/01/2025 10550 00007033 EB15 jmp short try_enqueue_all_blocks_@ 10551 ;.next_block: 10552 teab_next_block: 10553 00007035 833D[D0420500]00 cmp dword [bytes_left], 0 10554 ;jle short .enqueue_done 10555 ; 13/01/2025 10556 0000703C 7E56 jle short teab_enqueue_done 10557 ; 10558 0000703E 8B3D[5C0A0100] mov edi, [mp3_samples_dst] 10559 00007044 033D[600A0100] add edi, [mp3_samples_output_size] 10560 10561 try_enqueue_all_blocks_@: 10562 ;.first_block: 10563 ;pusha 10564 0000704A 8B35[CC420500] mov esi, [stream_pos] 10565 00007050 8B0D[D0420500] mov ecx, [bytes_left] 10566 00007056 31ED xor ebp, ebp 10567 00007058 E849F2FFFF call mp3_decode_frame 10568 ;popa 10569 ;jc short .enqueue_done 10570 ; 13/01/2025 10571 0000705D 7235 jc short teab_enqueue_done 10572 0000705F A1[70B30000] mov eax, [mp3_src_frame_size] 10573 00007064 83F800 cmp eax, 0 10574 ;jz short .enqueue_done 10575 ; 13/01/2025 10576 00007067 742B jz short teab_enqueue_done 10577 00007069 0105[CC420500] add [stream_pos], eax 10578 0000706F 2905[D0420500] sub [bytes_left], eax 10579 00007075 A1[600A0100] mov eax, [mp3_samples_output_size] 10580 0000707A 83F800 cmp eax, 0 10581 ;jz short .next_block 10582 ; 13/01/2025 10583 0000707D 74B6 jz short teab_next_block 10584 ;.no_error: 10585 0000707F FE05[FC9A0000] inc byte [num_enqueued_frames] 10586 00007085 A0[FC9A0000] mov al, [num_enqueued_frames] 10587 0000708A 3A05[56A30000] cmp al, [blocks] 10588 ;jb short .next_block 10589 ; 13/01/2025 10590 00007090 72A3 jb short teab_next_block 10591 teab_rtn: 10592 ;.rtn: 10593 ; 12/01/2025 10594 00007092 61 popa 10595 00007093 C3 retn 10596 ;.enqueue_done: 10597 teab_enqueue_done: 10598 00007094 C705[D0420500]0000- mov dword [bytes_left], 0 10598 0000709C 0000 10599 ; 12/01/2025 10600 ;jmp short .rtn 10601 ; 13/01/2025 10602 0000709E EBF2 jmp short teab_rtn 10603 10604 10605 ; --------------------------------------------------------------------------- 10606 ; 13/01/2025 - Interpolation procedures for non-VRA AC97 codecs 10607 ; --------------------------------------------------------------------------- 10608 10609 ; =============== S U B R O U T I N E ======================================= 10610 10611 ; 30/01/2025 10612 ; 15/01/2025 10613 ; 14/01/2025 10614 ; 13/01/2025 10615 audio_system_init_x: 10616 000070A0 8B0D[600A0100] mov ecx, [mp3_samples_output_size] 10617 ;;; 10618 ; 15/01/2025 10619 000070A6 89C8 mov eax, ecx 10620 ;mov [loadsize], ecx 10621 ;;; 10622 ; 15/01/2025 10623 ;shl ecx, 3 ; * 8 ; 8 blocks 10624 ; 14/01/2025 10625 ;mov byte [blocks], 8 10626 10627 000070A8 803D[64A30000]02 cmp byte [interpolation], 2 10628 000070AF 733B jnb short .chk_sample_rate ; interpolation needed 10629 10630 ; 48 kHZ with 16 bit stereo conversion 10631 ; 10632 ; selected output is 10633 ; 8bit stereo or 16bit mono or 8bit mono 10634 ; (but AC97 hardware needs 16bit stereo samples) 10635 10636 ; 15/01/2025 10637 ;mov eax, ecx 10638 000070B1 D1E0 shl eax, 1 ; * 2 (mono to stereo) 10639 10640 000070B3 BB[4A740000] mov ebx, convert_to_stereo 10641 000070B8 803D[A0B30000]02 cmp byte [mp3_bytes_per_sample], 2 10642 000070BF 7415 je short .set_sizes ; 16bit mono 10643 10644 ; 8bit output (16bit conversion is neeed) 10645 000070C1 BB[79740000] mov ebx, convert_to_16bit 10646 000070C6 803D[98B30000]02 cmp byte [mp3_output_num_channels], 2 10647 000070CD 7407 je short .set_sizes ; 8bit stereo 10648 ; 8bit mono output 10649 ;shr ecx, 1 ; / 2 ; 4 blocks 10650 ; 14/01/2025 10651 000070CF D1E0 shl eax, 1 10652 ; 14/01/2025 10653 ;shr byte [blocks], 1 10654 000070D1 BB[95740000] mov ebx, convert_to_stereo_16bit 10655 .set_sizes: 10656 .set_sizes_@: 10657 000070D6 891D[5CA30000] mov [conversion], ebx 10658 000070DC 890D[60A30000] mov [loadsize], ecx 10659 ;;; 10660 ; 14/01/2025 10661 ; align to 16bit stereo (if there is a defect) 10662 ; 15/01/2025 10663 ;and al, ~3 10664 000070E2 A3[58A30000] mov [buffer_size], eax 10665 000070E7 E96F020000 jmp .asix_@ 10666 10667 ; 13/01/2025 10668 ; ---------------------------- 10669 ; ref: playwav9.s - 18/12/2024 10670 .chk_sample_rate: 10671 ; set interpolation parameters 10672 ; (for 8, 11.025, 16, 22.050, 24, 32, 44.1 kHZ) 10673 000070EC A1[9CB30000] mov eax, [mp3_output_sample_rate] 10674 ; ecx = 8 * [mp3_samples_output_size] ; 8 blocks 10675 .chk_44khz: 10676 000070F1 3D44AC0000 cmp eax, 44100 10677 000070F6 7545 jne short .chk_32khz 10678 ; 30/01/2025 10679 000070F8 B819000000 mov eax, 25 ; * 10680 000070FD 803D[A0B30000]01 cmp byte [mp3_bytes_per_sample], 1 10681 00007104 7615 jna short .chk_44khz_1 10682 00007106 BB[D6800000] mov ebx, load_44khz_stereo_16_bit 10683 0000710B 803D[98B30000]01 cmp byte [mp3_output_num_channels], 1 10684 00007112 751E jne short .chk_44khz_2 10685 00007114 BB[87800000] mov ebx, load_44khz_mono_16_bit 10686 ;jmp short .chk_44khz_2 10687 ; 30/01/2025 10688 00007119 EB15 jmp short .chk_44khz_3 10689 .chk_44khz_1: 10690 ; 30/01/2025 10691 0000711B D1E0 shl eax, 1 10692 0000711D BB[2F800000] mov ebx, load_44khz_stereo_8_bit 10693 00007122 803D[98B30000]01 cmp byte [mp3_output_num_channels], 1 10694 00007129 7507 jne short .chk_44khz_2 10695 0000712B BB[DF7F0000] mov ebx, load_44khz_mono_8_bit 10696 .chk_44khz_3: 10697 ; 30/01/2025 10698 00007130 D1E0 shl eax, 1 10699 .chk_44khz_2: 10700 ; 48000/44100 == 25/23 10701 00007132 BD17000000 mov ebp, 23 10702 ;mov eax, 25 ; * 10703 00007137 F7E1 mul ecx ; load (decoding buffer) size 10704 00007139 F7F5 div ebp 10705 ;; eax = wav output buffer size 10706 ; 15/01/2025 10707 ; eax = 1 block output (converted) size 10708 0000713B EB99 jmp short .set_sizes 10709 10710 ; 15/01/2025 10711 ; ;;; 10712 ; ; 14/01/2025 10713 ;.set_sizes_@: 10714 ; cmp ecx, 4608 10715 ; ;ja short .set_sizes 10716 ; ; 15/01/2025 10717 ; jnb short .set_sizes 10718 ; ;shl ecx, 1 10719 ; ; ecx = [mp3_samples_output_size] 10720 ; shl byte [blocks], 1 10721 ; ; 15/01/2025 10722 ; ;shl eax, 1 10723 ; ;jmp short .set_sizes_@ 10724 ; jmp .set_sizes 10725 ;;; 10726 .chk_32khz: 10727 0000713D 3D007D0000 cmp eax, 32000 10728 00007142 7543 jne short .chk_24khz 10729 ; 30/01/2025 10730 00007144 B803000000 mov eax, 3 ; * 10731 00007149 803D[A0B30000]01 cmp byte [mp3_bytes_per_sample], 1 10732 00007150 7615 jna short .chk_32khz_1 10733 00007152 BB[617C0000] mov ebx, load_32khz_stereo_16_bit 10734 00007157 803D[98B30000]01 cmp byte [mp3_output_num_channels], 1 10735 0000715E 751E jne short .chk_32khz_2 10736 00007160 BB[217C0000] mov ebx, load_32khz_mono_16_bit 10737 ;jmp short .chk_32khz_2 10738 ; 30/01/2025 10739 00007165 EB15 jmp short .chk_32khz_3 10740 .chk_32khz_1: 10741 ; 30/01/2025 10742 00007167 D1E0 shl eax, 1 10743 00007169 BB[A97B0000] mov ebx, load_32khz_stereo_8_bit 10744 0000716E 803D[98B30000]01 cmp byte [mp3_output_num_channels], 1 10745 00007175 7507 jne short .chk_32khz_2 10746 00007177 BB[627B0000] mov ebx, load_32khz_mono_8_bit 10747 .chk_32khz_3: 10748 ; 30/01/2025 10749 0000717C D1E0 shl eax, 1 10750 .chk_32khz_2: 10751 ; 48000/32000 = 3/2 10752 ;mov eax, 3 ; * 10753 0000717E F7E1 mul ecx ; *3 10754 ;mov eax, ecx 10755 ;add eax, eax 10756 ;add eax, ecx 10757 00007180 D1E8 shr eax, 1 ; /2 10758 00007182 E94FFFFFFF jmp .set_sizes 10759 .chk_24khz: 10760 00007187 3DC05D0000 cmp eax, 24000 10761 0000718C 753E jne short .chk_22khz 10762 ; 30/01/2025 10763 0000718E 89C8 mov eax, ecx ; * 10764 00007190 803D[A0B30000]01 cmp byte [mp3_bytes_per_sample], 1 10765 00007197 7615 jna short .chk_24khz_1 10766 ; 14/01/2025 10767 ; bx -> ebx 10768 ; (BugFix, 'playwav9.s' has a bug here) 10769 00007199 BB[007B0000] mov ebx, load_24khz_stereo_16_bit 10770 0000719E 803D[98B30000]01 cmp byte [mp3_output_num_channels], 1 10771 000071A5 751E jne short .chk_24khz_2 10772 000071A7 BB[C47A0000] mov ebx, load_24khz_mono_16_bit 10773 ;jmp short .chk_24khz_2 10774 ; 30/01/2025 10775 000071AC EB15 jmp short .chk_24khz_3 10776 .chk_24khz_1: 10777 ; 30/01/2025 10778 000071AE D1E0 shl eax, 1 10779 000071B0 BB[5F7A0000] mov ebx, load_24khz_stereo_8_bit 10780 000071B5 803D[98B30000]01 cmp byte [mp3_output_num_channels], 1 10781 000071BC 7507 jne short .chk_24khz_2 10782 000071BE BB[247A0000] mov ebx, load_24khz_mono_8_bit 10783 .chk_24khz_3: 10784 ; 30/01/2025 10785 000071C3 D1E0 shl eax, 1 10786 .chk_24khz_2: 10787 ; 48000/24000 = 2/1 10788 ;mov eax, ecx ; * 10789 000071C5 D1E0 shl eax, 1 10790 000071C7 E90AFFFFFF jmp .set_sizes_@ 10791 .chk_22khz: 10792 000071CC 3D22560000 cmp eax, 22050 10793 000071D1 7548 jne short .chk_16khz 10794 ; 30/01/2025 10795 000071D3 B825000000 mov eax, 37 ; * 10796 000071D8 803D[A0B30000]01 cmp byte [mp3_bytes_per_sample], 1 10797 000071DF 7615 jna short .chk_22khz_1 10798 000071E1 BB[EE7D0000] mov ebx, load_22khz_stereo_16_bit 10799 000071E6 803D[98B30000]01 cmp byte [mp3_output_num_channels], 1 10800 000071ED 751E jne short .chk_22khz_2 10801 000071EF BB[8B7D0000] mov ebx, load_22khz_mono_16_bit 10802 ;jmp short .chk_22khz_2 10803 ; 30/01/2025 10804 000071F4 EB15 jmp short .chk_22khz_3 10805 .chk_22khz_1: 10806 ; 30/01/2025 10807 000071F6 D1E0 shl eax, 1 10808 000071F8 BB[297D0000] mov ebx, load_22khz_stereo_8_bit 10809 000071FD 803D[98B30000]01 cmp byte [mp3_output_num_channels], 1 10810 00007204 7507 jne short .chk_22khz_2 10811 00007206 BB[CC7C0000] mov ebx, load_22khz_mono_8_bit 10812 .chk_22khz_3: 10813 ; 30/01/2025 10814 0000720B D1E0 shl eax, 1 10815 .chk_22khz_2: 10816 ; 48000/22050 == 37/17 10817 0000720D BD11000000 mov ebp, 17 10818 ;mov eax, 37 ; * 10819 00007212 F7E1 mul ecx ; load (decoding buffer) size 10820 00007214 F7F5 div ebp 10821 ;; eax = wav output buffer size 10822 ; 15/01/2025 10823 ; eax = 1 block output (converted) size 10824 00007216 E9BBFEFFFF jmp .set_sizes_@ 10825 .chk_16khz: 10826 0000721B 3D803E0000 cmp eax, 16000 10827 00007220 7540 jne short .chk_11khz 10828 ; 30/01/2025 10829 00007222 89C8 mov eax, ecx ; * 10830 00007224 D1E0 shl eax, 1 10831 00007226 01C8 add eax, ecx 10832 00007228 803D[A0B30000]01 cmp byte [mp3_bytes_per_sample], 1 10833 0000722F 7615 jna short .chk_16khz_1 10834 00007231 BB[73790000] mov ebx, load_16khz_stereo_16_bit 10835 00007236 803D[98B30000]01 cmp byte [mp3_output_num_channels], 1 10836 0000723D 751E jne short .chk_16khz_2 10837 0000723F BB[1C790000] mov ebx, load_16khz_mono_16_bit 10838 ;jmp short .chk_16khz_2 10839 ; 30/01/2025 10840 00007244 EB15 jmp short .chk_16khz_3 10841 .chk_16khz_1: 10842 ; 30/01/2025 10843 00007246 D1E0 shl eax, 1 10844 00007248 BB[87780000] mov ebx, load_16khz_stereo_8_bit 10845 0000724D 803D[98B30000]01 cmp byte [mp3_output_num_channels], 1 10846 00007254 7507 jne short .chk_16khz_2 10847 00007256 BB[34780000] mov ebx, load_16khz_mono_8_bit 10848 .chk_16khz_3: 10849 ; 30/01/2025 10850 0000725B D1E0 shl eax, 1 10851 .chk_16khz_2: 10852 ; 48000/16000 = 3/1 10853 ;mov eax, ecx ; * 10854 ;shl eax, 1 10855 ;;add eax, eax 10856 ;add eax, ecx 10857 0000725D E974FEFFFF jmp .set_sizes_@ 10858 .chk_11khz: 10859 00007262 3D112B0000 cmp eax, 11025 10860 00007267 7548 jne short .chk_8khz 10861 ; 30/01/2025 10862 00007269 B84A000000 mov eax, 74 10863 0000726E 803D[A0B30000]01 cmp byte [mp3_bytes_per_sample], 1 10864 00007275 7615 jna short .chk_11khz_1 10865 00007277 BB[6F7F0000] mov ebx, load_11khz_stereo_16_bit 10866 0000727C 803D[98B30000]01 cmp byte [mp3_output_num_channels], 1 10867 00007283 751E jne short .chk_11khz_2 10868 00007285 BB[1B7F0000] mov ebx, load_11khz_mono_16_bit 10869 ;jmp short .chk_11khz_2 10870 ; 30/01/2025 10871 0000728A EB15 jmp short .chk_11khz_3 10872 .chk_11khz_1: 10873 ; 30/01/2025 10874 0000728C D1E0 shl eax, 1 10875 0000728E BB[C17E0000] mov ebx, load_11khz_stereo_8_bit 10876 00007293 803D[98B30000]01 cmp byte [mp3_output_num_channels], 1 10877 0000729A 7507 jne short .chk_11khz_2 10878 0000729C BB[7A7E0000] mov ebx, load_11khz_mono_8_bit 10879 .chk_11khz_3: 10880 ; 30/01/2025 10881 000072A1 D1E0 shl eax, 1 10882 .chk_11khz_2: 10883 ; 48000/11025 == 74/17 10884 ; 14/01/2025 10885 ;shr ecx, 1 ; 4 blocks 10886 ;shr byte [blocks], 1 10887 000072A3 BD11000000 mov ebp, 17 10888 ;mov eax, 74 ; * 10889 000072A8 F7E1 mul ecx ; load (decoding buffer) size 10890 000072AA F7F5 div ebp 10891 ;; eax = wav output buffer size 10892 ; 15/01/2025 10893 ; eax = 1 block output (converted) size 10894 000072AC E925FEFFFF jmp .set_sizes_@ 10895 .chk_8khz: 10896 000072B1 3D401F0000 cmp eax, 8000 10897 ;jne short .vra_needed 10898 ; 01/02/2025 10899 000072B6 7541 jne short .chk_12khz 10900 ; 30/01/2025 10901 000072B8 B806000000 mov eax, 6 ; * 10902 000072BD 803D[A0B30000]01 cmp byte [mp3_bytes_per_sample], 1 10903 000072C4 7615 jna short .chk_8khz_1 10904 000072C6 BB[0E770000] mov ebx, load_8khz_stereo_16_bit 10905 000072CB 803D[98B30000]01 cmp byte [mp3_output_num_channels], 1 10906 000072D2 751E jne short .chk_8khz_2 10907 000072D4 BB[6C760000] mov ebx, load_8khz_mono_16_bit 10908 ;jmp short .chk_8khz_2 10909 ; 30/01/2025 10910 000072D9 EB15 jmp short .chk_8khz_3 10911 .chk_8khz_1: 10912 ; 30/01/2025 10913 000072DB D1E0 shl eax, 1 10914 000072DD BB[5C750000] mov ebx, load_8khz_stereo_8_bit 10915 000072E2 803D[98B30000]01 cmp byte [mp3_output_num_channels], 1 10916 000072E9 7507 jne short .chk_8khz_2 10917 000072EB BB[B3740000] mov ebx, load_8khz_mono_8_bit 10918 .chk_8khz_3: 10919 ; 30/01/2025 10920 000072F0 D1E0 shl eax, 1 10921 .chk_8khz_2: 10922 ;mov eax, 6 ; * 10923 000072F2 F7E1 mul ecx 10924 000072F4 E9DDFDFFFF jmp .set_sizes_@ 10925 10926 ;;;; 10927 ; 01/02/2025 10928 .chk_12khz: 10929 000072F9 3DE02E0000 cmp eax, 12000 10930 000072FE 753F jne short .vra_needed 10931 00007300 89C8 mov eax, ecx ; * 10932 00007302 803D[A0B30000]01 cmp byte [mp3_bytes_per_sample], 1 10933 00007309 7615 jna short .chk_12khz_1 10934 0000730B BB[A7810000] mov ebx, load_12khz_stereo_16_bit 10935 00007310 803D[98B30000]01 cmp byte [mp3_output_num_channels], 1 10936 00007317 751E jne short .chk_12khz_2 10937 00007319 BB[7D810000] mov ebx, load_12khz_mono_16_bit 10938 0000731E EB15 jmp short .chk_12khz_3 10939 .chk_12khz_1: 10940 00007320 D1E0 shl eax, 1 10941 00007322 BB[51810000] mov ebx, load_12khz_stereo_8_bit 10942 00007327 803D[98B30000]01 cmp byte [mp3_output_num_channels], 1 10943 0000732E 7507 jne short .chk_12khz_2 10944 00007330 BB[30810000] mov ebx, load_12khz_mono_8_bit 10945 .chk_12khz_3: 10946 00007335 D1E0 shl eax, 1 10947 .chk_12khz_2: 10948 ; 48000/12000 = 4/1 10949 ;mov eax, ecx ; * 10950 00007337 C1E002 shl eax, 2 10951 0000733A E997FDFFFF jmp .set_sizes_@ 10952 ;;;; 10953 10954 .vra_needed: 10955 0000733F 58 pop eax ; discard return address to the caller 10956 .vra_err: 10957 sys _msg, msg_no_vra, 255, 0Fh 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00007340 BB[DB8B0000] <1> mov ebx, %2 125 <1> %if %0 >= 3 126 00007345 B9FF000000 <1> mov ecx, %3 127 <1> %if %0 = 4 128 0000734A BA0F000000 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 0000734F B823000000 <1> mov eax, %1 133 <1> 134 00007354 CD40 <1> int 40h 10958 00007356 E9F6F8FFFF jmp ExitProcess 10959 10960 .asix_@: 10961 ; TRDOS 386 system call 10962 ; sysaudio 10963 ; Allocate audio buffer (for user) 10964 ; ebx = 0200h (BH=2) 10965 ; ecx = buffer size (in bytes) 10966 ; edx = buffer address (virtual) 10967 10968 sys _audio, 0200h, [buffer_size], sample_buffer 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 0000735B BB00020000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 00007360 8B0D[58A30000] <1> mov ecx, %3 127 <1> %if %0 = 4 128 00007366 BA[00700500] <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 0000736B B820000000 <1> mov eax, %1 133 <1> 134 00007370 CD40 <1> int 40h 10969 00007372 7228 jc short .init_err 10970 10971 ; 12/01/2025 10972 ; clear audio buffer (before playback) 10973 00007374 BF[00700500] mov edi, sample_buffer 10974 ; ecx = buffer size in bytes 10975 00007379 83C103 add ecx, 3 ; 13/01/2025 10976 0000737C C1E902 shr ecx, 2 10977 0000737F 31C0 xor eax, eax 10978 00007381 F3AB rep stosd 10979 10980 ; TRDOS 386 system call 10981 ; sysaudio 10982 ; Initialize audio device (bh = 3) 10983 ; bl = 01h -> CallBack method 10984 ; edx = Callback service address (virtual) 10985 ; ecx = 0 ; CL = srb value ; not used 10986 sys _audio, 0301h, 0, audio_callback_x ; 13/01/2025 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00007383 BB01030000 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 00007388 B900000000 <1> mov ecx, %3 127 <1> %if %0 = 4 128 0000738D BA[2B740000] <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00007392 B820000000 <1> mov eax, %1 133 <1> 134 00007397 CD40 <1> int 40h 10987 ; 12/01/2025 10988 ; SRB method (faster than callback method) 10989 ; bl = 0 -> Signal Response Byte method 10990 ; cl = 1 -> SRB set value 10991 ; (will be set by audio IRQ service of the kernel) 10992 ; edx = SRB address -one byte data- 10993 ;sys _audio, 0300h, 1, srb 10994 00007399 7201 jc short .init_err 10995 0000739B C3 retn 10996 .init_err: 10997 0000739C E9C9FAFFFF jmp init_error 10998 10999 11000 ; =============== S U B R O U T I N E ======================================= 11001 11002 ; 14/01/2025 11003 ; 13/01/2025 11004 mp3_cast_to_speaker_x: 11005 ; 13/01/2025 11006 %if 0 11007 ; Start to play 11008 mov eax, [mp3_bytes_per_sample] 11009 ;shr al, 1 ; 8 -> 0, 16 -> 1 11010 ;shl al, 1 ; 16 -> 2, 8 -> 0 11011 and al, 2 11012 mov ebx, [mp3_output_num_channels] 11013 dec ebx 11014 or bl, al 11015 mov ecx, [mp3_output_sample_rate] 11016 mov bh, 4 ; start to play 11017 %else 11018 ; 48 kHZ, 16bit, stereo 11019 000073A1 BB03040000 mov ebx, 0403h 11020 000073A6 B980BB0000 mov ecx, 48000 11021 ; 14/01/2025 11022 000073AB 803D[51A30000]01 cmp byte [vra], 1 11023 000073B2 7206 jb short .jmpto@ 11024 000073B4 8B0D[9CB30000] mov ecx, [mp3_output_sample_rate] 11025 .jmpto@: 11026 %endif 11027 000073BA E915FBFFFF jmp mp3_cast_to_speaker_@ 11028 11029 11030 ; =============== S U B R O U T I N E ======================================= 11031 11032 ; 15/01/2025 11033 ; 13/01/2025 11034 try_enqueue_all_blocks_x: 11035 ; 12/01/2025 11036 000073BF 60 pusha 11037 000073C0 BF[00500500] mov edi, decoding_buffer 11038 ; 15/01/2025 11039 ;jmp try_enqueue_all_blocks_@ 11040 000073C5 EB15 jmp short .first_block 11041 11042 ; 15/01/2025 11043 .next_block: 11044 000073C7 833D[D0420500]00 cmp dword [bytes_left], 0 11045 000073CE 7E4F jle short .enqueue_done 11046 ; 11047 000073D0 8B3D[5C0A0100] mov edi, [mp3_samples_dst] 11048 000073D6 033D[600A0100] add edi, [mp3_samples_output_size] 11049 11050 ;try_enqueue_all_blocks_@: 11051 .first_block: 11052 ;pusha 11053 000073DC 8B35[CC420500] mov esi, [stream_pos] 11054 000073E2 8B0D[D0420500] mov ecx, [bytes_left] 11055 000073E8 31ED xor ebp, ebp 11056 000073EA E8B7EEFFFF call mp3_decode_frame 11057 ;popa 11058 000073EF 722E jc short .enqueue_done 11059 11060 000073F1 A1[70B30000] mov eax, [mp3_src_frame_size] 11061 000073F6 83F800 cmp eax, 0 11062 000073F9 7424 jz short .enqueue_done 11063 000073FB 0105[CC420500] add [stream_pos], eax 11064 00007401 2905[D0420500] sub [bytes_left], eax 11065 11066 00007407 A1[600A0100] mov eax, [mp3_samples_output_size] 11067 0000740C 83F800 cmp eax, 0 11068 0000740F 74B6 jz short .next_block 11069 11070 ; 15/01/2025 11071 00007411 FF15[5CA30000] call dword [conversion] 11072 .no_error: 11073 ; 15/01/2025 11074 00007417 FE05[FC9A0000] inc byte [num_enqueued_frames] 11075 .rtn: 11076 ; 12/01/2025 11077 0000741D 61 popa 11078 0000741E C3 retn 11079 .enqueue_done: 11080 0000741F C705[D0420500]0000- mov dword [bytes_left], 0 11080 00007427 0000 11081 ; 12/01/2025 11082 00007429 EBF2 jmp short .rtn 11083 11084 11085 ; =============== S U B R O U T I N E ======================================= 11086 11087 ; 13/01/2025 11088 audio_callback_x: 11089 ; Operating system has directed CPU here because of 11090 ; user (2nd) stage of the audio hardware interrupt service. 11091 ; This procedure must be short and return to operating 11092 ; system again via sysrelease system call 11093 ; (or any system call here will be handled as sysrelease). 11094 11095 0000742B C605[54A30000]01 mov byte [srb], 1 11096 11097 00007432 E888FFFFFF call try_enqueue_all_blocks_x 11098 11099 ; 15/01/2025 11100 ;call dword [conversion] 11101 11102 sys _rele ; return from callback service 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00007437 B827000000 <1> mov eax, %1 133 <1> 134 0000743C CD40 <1> int 40h 11103 11104 ; we must not come here ! 11105 0000743E BBFFFFFFFF mov ebx, -1 11106 sys _exit 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 <1> mov ebx, %2 125 <1> %if %0 >= 3 126 <1> mov ecx, %3 127 <1> %if %0 = 4 128 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00007443 B801000000 <1> mov eax, %1 133 <1> 134 00007448 CD40 <1> int 40h 11107 ;jmp short audio_callback 11108 11109 11110 ; --------------------------------------------------------------------------- 11111 ; 13/01/2025 - Interpolation procedures for non-VRA AC97 codecs 11112 ; --------------------------------------------------------------------------- 11113 ; ref: playwav9.s - 18/12/2025 11114 11115 11116 ; 13/01/2025 11117 ; -------------------------------------------------------- 11118 ; 48 kHZ conversion procedures 11119 ; -------------------------------------------------------- 11120 ; convert_to_stereo: convert 16bit mono samples to 16bit stereo 11121 ; convert_to_16bit: convert 8bit stereo samples to 16bit stereo 11122 ; convert_to_stereo_16bit: convert 8bit mono samples to 16bit & stereo 11123 ; [loadsize] = decoding buffer size 11124 ; [buffer_size] = wav output buffer size (<= 64KB) 11125 11126 ; ///// 11127 11128 ; 13/01/2025 11129 convert_to_stereo: 11130 0000744A BE[00500500] mov esi, decoding_buffer ; (contains 16bit mono samples) 11131 0000744F BF[00700500] mov edi, sample_buffer ; wav output buffer 11132 00007454 8B0D[60A30000] mov ecx, [loadsize] 11133 0000745A D1E9 shr ecx, 1 ; word count 11134 cts_1: 11135 0000745C 66AD lodsw 11136 0000745E 66AB stosw ; left channel 11137 00007460 66AB stosw ; right channel 11138 00007462 E2F8 loop cts_1 11139 cts_2: 11140 ; padfill 11141 00007464 8B0D[58A30000] mov ecx, [buffer_size] 11142 0000746A 81C1[00700500] add ecx, sample_buffer 11143 00007470 29F9 sub ecx, edi 11144 00007472 7604 jna short cts_3 11145 00007474 31C0 xor eax, eax 11146 00007476 F3AA rep stosb 11147 cts_3: 11148 00007478 C3 retn 11149 11150 ; ///// 11151 11152 ; 13/01/2025 11153 convert_to_16bit: 11154 00007479 BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 11155 0000747E BF[00700500] mov edi, sample_buffer ; wav output buffer 11156 00007483 8B0D[60A30000] mov ecx, [loadsize] 11157 ct16b_1: 11158 ; stereo & 8 bit 11159 00007489 AC lodsb 11160 0000748A 2C80 sub al, 80h ; 08/11/2023 11161 0000748C C1E008 shl eax, 8 ; convert 8 bit sample to 16 bit sample 11162 0000748F 66AB stosw 11163 00007491 E2F6 loop ct16b_1 11164 00007493 EBCF jmp short cts_2 11165 11166 ; ///// 11167 11168 ; 13/01/2025 11169 convert_to_stereo_16bit: 11170 00007495 BE[00500500] mov esi, decoding_buffer ; (contains 8bit mono samples) 11171 0000749A BF[00700500] mov edi, sample_buffer ; wav output buffer 11172 0000749F 8B0D[60A30000] mov ecx, [loadsize] 11173 cts16b_1: 11174 ; mono & 8 bit 11175 000074A5 AC lodsb 11176 000074A6 2C80 sub al, 80h ; 08/11/2023 11177 000074A8 C1E008 shl eax, 8 ; convert 8 bit sample to 16 bit sample 11178 000074AB 66AB stosw ; left channel 11179 000074AD 66AB stosw ; right channel 11180 000074AF E2F4 loop cts16b_1 11181 000074B1 EBB1 jmp short cts_2 11182 11183 ; ///// 11184 11185 ; -------------------------------------------------------- 11186 ; 13/01/2025 11187 ; -------------------------------------------------------- 11188 11189 ; 13/01/2025 - mp3player modifications (mp3play3.s) 11190 ; 07/12/2024 - playwav9.s 11191 ; 01/12/2024 - ac97play.s 11192 ; 29/05/2024 11193 ; 26/11/2023 11194 ; 25/11/2023 - playwav6.s (32 bit registers, TRDOS 386 adaption) 11195 ; 15/11/2023 - PLAYWAV5.COM, ich_wav5.asm 11196 ; 14/11/2023 11197 ; 13/11/2023 - Erdogan Tan - (VRA, sample rate conversion) 11198 ; -------------------------------------------------------- 11199 11200 ;;Note: At the end of every buffer load, 11201 ;; during buffer switch/swap, there will be discontinuity 11202 ;; between the last converted sample and the 1st sample 11203 ;; of the next buffer. 11204 ;; (like as a dot noises vaguely between normal sound samples) 11205 ;; -To avoid this defect, the 1st sample of 11206 ;; the next buffer may be read from the wav file but 11207 ;; the file pointer would need to be set to 1 sample back 11208 ;; again via seek system call. Time comsumption problem! - 11209 ;; 11210 ;; Erdogan Tan - 15/11/2023 11211 ;; 11212 ;; ((If entire wav data would be loaded at once.. conversion 11213 ;; defect/noise would disappear.. but for DOS, to keep 11214 ;; 64KB buffer limit is important also it is important 11215 ;; for running under 1MB barrier without HIMEM.SYS or DPMI. 11216 ;; I have tested this program by using 2-30MB wav files.)) 11217 ;; 11218 ;; Test Computer: ASUS desktop/mainboard, M2N4-SLI, 2010. 11219 ;; AMD Athlon 64 X2 2200 MHZ CPU. 11220 ;; NFORCE4 (CK804) AC97 audio hardware. 11221 ;; Realtek ALC850 codec. 11222 ;; Retro DOS v4.2 (MSDOS 6.22) operating system. 11223 11224 load_8khz_mono_8_bit: 11225 ; 13/01/2025 (mp3play3.s) 11226 000074B3 BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 11227 000074B8 BF[00700500] mov edi, sample_buffer ; wav output buffer 11228 000074BD 8B0D[60A30000] mov ecx, [loadsize] 11229 ; 13/01/2025 11230 lff8m_1: 11231 000074C3 AC lodsb 11232 000074C4 A2[2B870000] mov [previous_val], al 11233 000074C9 2C80 sub al, 80h 11234 000074CB 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 11235 000074CF 66AB stosw ; original sample (left channel) 11236 000074D1 66AB stosw ; original sample (right channel) 11237 ;xor eax, eax 11238 000074D3 B080 mov al, 80h 11239 000074D5 49 dec ecx 11240 000074D6 7402 jz short lff8m_2 11241 000074D8 8A06 mov al, [esi] 11242 lff8m_2: 11243 ;mov [next_val], ax 11244 000074DA 88C7 mov bh, al ; [next_val] 11245 000074DC 8A25[2B870000] mov ah, [previous_val] 11246 000074E2 00E0 add al, ah ; [previous_val] 11247 000074E4 D0D8 rcr al, 1 11248 000074E6 88C2 mov dl, al ; this is interpolated middle (3th) sample 11249 000074E8 00E0 add al, ah ; [previous_val] 11250 000074EA D0D8 rcr al, 1 11251 000074EC 88C3 mov bl, al ; this is temporary interpolation value 11252 000074EE 00E0 add al, ah ; [previous_val] 11253 000074F0 D0D8 rcr al, 1 11254 000074F2 2C80 sub al, 80h 11255 000074F4 66C1E008 shl ax, 8 11256 000074F8 66AB stosw ; this is 1st interpolated sample (L) 11257 000074FA 66AB stosw ; this is 1st interpolated sample (R) 11258 000074FC 88D8 mov al, bl 11259 000074FE 00D0 add al, dl 11260 00007500 D0D8 rcr al, 1 11261 00007502 2C80 sub al, 80h 11262 00007504 66C1E008 shl ax, 8 11263 00007508 66AB stosw ; this is 2nd interpolated sample (L) 11264 0000750A 66AB stosw ; this is 2nd interpolated sample (R) 11265 0000750C 88D0 mov al, dl 11266 0000750E 2C80 sub al, 80h 11267 00007510 66C1E008 shl ax, 8 11268 00007514 66AB stosw ; this is middle (3th) interpolated sample (L) 11269 00007516 66AB stosw ; this is middle (3th) interpolated sample (R) 11270 ;mov al, [next_val] 11271 00007518 88F8 mov al, bh 11272 0000751A 00D0 add al, dl 11273 0000751C D0D8 rcr al, 1 11274 0000751E 88C3 mov bl, al ; this is temporary interpolation value 11275 00007520 00D0 add al, dl 11276 00007522 D0D8 rcr al, 1 11277 00007524 2C80 sub al, 80h 11278 00007526 66C1E008 shl ax, 8 11279 0000752A 66AB stosw ; this is 4th interpolated sample (L) 11280 0000752C 66AB stosw ; this is 4th interpolated sample (R) 11281 ;mov al, [next_val] 11282 0000752E 88F8 mov al, bh 11283 00007530 00D8 add al, bl 11284 00007532 D0D8 rcr al, 1 11285 00007534 2C80 sub al, 80h 11286 00007536 66C1E008 shl ax, 8 11287 0000753A 66AB stosw ; this is 5th interpolated sample (L) 11288 0000753C 66AB stosw ; this is 5th interpolated sample (R) 11289 ; 8 kHZ mono to 48 kHZ stereo conversion of the sample is OK 11290 0000753E 09C9 or ecx, ecx 11291 00007540 7581 jnz short lff8m_1 11292 11293 ; -------------- 11294 11295 lff8s_3: 11296 lff8m_3: 11297 lff8s2_3: 11298 lff8m2_3: 11299 lff16s_3: 11300 lff16m_3: 11301 lff16s2_3: 11302 lff16m2_3: 11303 lff24_3: 11304 lff32_3: 11305 lff44_3: 11306 lff22_3: 11307 lff11_3: 11308 lff12_3: ; 01/02/2025 11309 ; 08/12/2024 (BugFix) 11310 ; 31/05/2024 (BugFix) 11311 00007542 8B0D[58A30000] mov ecx, [buffer_size] ; 16 bit (48 kHZ, stereo) samples 11312 ;shl ecx, 1 ; byte count ; Bug ! 11313 ; 08/12/2024 11314 ;add ecx, audio_buffer 11315 ; 13/01/2025 (mp3play3.s) 11316 00007548 81C1[00700500] add ecx, sample_buffer 11317 0000754E 29F9 sub ecx, edi 11318 00007550 7609 jna short lff8m_4 ; jbe 11319 00007552 29F9 sub ecx, edi 11320 ;inc ecx 11321 00007554 C1E902 shr ecx, 2 11322 00007557 31C0 xor eax, eax ; fill (remain part of) buffer with zeros 11323 00007559 F3AB rep stosd 11324 lff8m_4: 11325 ; 31/05/2024 (BugFix) 11326 ; cf=1 ; Bug ! 11327 ; 08/12/2024 11328 ;clc 11329 0000755B C3 retn 11330 11331 ; -------------------------------------------------------- 11332 11333 load_8khz_stereo_8_bit: 11334 ; 13/01/2025 (mp3play3.s) 11335 0000755C BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 11336 00007561 BF[00700500] mov edi, sample_buffer ; wav output buffer 11337 00007566 8B0D[60A30000] mov ecx, [loadsize] 11338 ; 13/01/2025 11339 0000756C D1E9 shr ecx, 1 ; word count 11340 lff8s_1: 11341 0000756E AC lodsb 11342 0000756F A2[2B870000] mov [previous_val_l], al 11343 00007574 2C80 sub al, 80h 11344 00007576 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 11345 0000757A 66AB stosw ; original sample (L) 11346 0000757C AC lodsb 11347 0000757D A2[2D870000] mov [previous_val_r], al 11348 00007582 2C80 sub al, 80h 11349 00007584 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 11350 00007588 66AB stosw ; original sample (R) 11351 11352 ;xor eax, eax 11353 0000758A 66B88080 mov ax, 8080h 11354 0000758E 49 dec ecx 11355 0000758F 7403 jz short lff8s_2 11356 ; convert 8 bit sample to 16 bit sample 11357 00007591 668B06 mov ax, [esi] 11358 lff8s_2: 11359 00007594 A2[2F870000] mov [next_val_l], al 11360 00007599 8825[31870000] mov [next_val_r], ah 11361 0000759F 8A25[2B870000] mov ah, [previous_val_l] 11362 000075A5 00E0 add al, ah 11363 000075A7 D0D8 rcr al, 1 11364 000075A9 88C2 mov dl, al ; this is interpolated middle (3th) sample (L) 11365 000075AB 00E0 add al, ah 11366 000075AD D0D8 rcr al, 1 11367 000075AF 88C3 mov bl, al ; this is temporary interpolation value (L) 11368 000075B1 00E0 add al, ah 11369 000075B3 D0D8 rcr al, 1 11370 000075B5 2C80 sub al, 80h 11371 000075B7 66C1E008 shl ax, 8 11372 000075BB 66AB stosw ; this is 1st interpolated sample (L) 11373 000075BD A0[31870000] mov al, [next_val_r] 11374 000075C2 8A25[2D870000] mov ah, [previous_val_r] 11375 000075C8 00E0 add al, ah 11376 000075CA D0D8 rcr al, 1 11377 000075CC 88C6 mov dh, al ; this is interpolated middle (3th) sample (R) 11378 000075CE 00E0 add al, ah 11379 000075D0 D0D8 rcr al, 1 11380 000075D2 88C7 mov bh, al ; this is temporary interpolation value (R) 11381 000075D4 00E0 add al, ah 11382 000075D6 D0D8 rcr al, 1 11383 000075D8 2C80 sub al, 80h 11384 000075DA 66C1E008 shl ax, 8 11385 000075DE 66AB stosw ; this is 1st interpolated sample (R) 11386 000075E0 88D8 mov al, bl 11387 000075E2 00D0 add al, dl 11388 000075E4 D0D8 rcr al, 1 11389 000075E6 2C80 sub al, 80h 11390 000075E8 66C1E008 shl ax, 8 11391 000075EC 66AB stosw ; this is 2nd interpolated sample (L) 11392 000075EE 88F8 mov al, bh 11393 000075F0 00F0 add al, dh 11394 000075F2 D0D8 rcr al, 1 11395 000075F4 2C80 sub al, 80h 11396 000075F6 66C1E008 shl ax, 8 11397 000075FA 66AB stosw ; this is 2nd interpolated sample (R) 11398 000075FC 88D0 mov al, dl 11399 000075FE 2C80 sub al, 80h 11400 00007600 66C1E008 shl ax, 8 11401 00007604 66AB stosw ; this is middle (3th) interpolated sample (L) 11402 00007606 88F0 mov al, dh 11403 00007608 2C80 sub al, 80h 11404 0000760A 66C1E008 shl ax, 8 11405 0000760E 66AB stosw ; this is middle (3th) interpolated sample (R) 11406 00007610 A0[2F870000] mov al, [next_val_l] 11407 00007615 00D0 add al, dl 11408 00007617 D0D8 rcr al, 1 11409 00007619 88C3 mov bl, al ; this is temporary interpolation value (L) 11410 0000761B 00D0 add al, dl 11411 0000761D D0D8 rcr al, 1 11412 0000761F 2C80 sub al, 80h 11413 00007621 66C1E008 shl ax, 8 11414 00007625 66AB stosw ; this is 4th interpolated sample (L) 11415 00007627 A0[31870000] mov al, [next_val_r] 11416 0000762C 00F0 add al, dh 11417 0000762E D0D8 rcr al, 1 11418 00007630 88C7 mov bh, al ; this is temporary interpolation value (R) 11419 00007632 00F0 add al, dh 11420 00007634 D0D8 rcr al, 1 11421 00007636 2C80 sub al, 80h 11422 00007638 66C1E008 shl ax, 8 11423 0000763C 66AB stosw ; this is 4th interpolated sample (R) 11424 0000763E A0[2F870000] mov al, [next_val_l] 11425 00007643 00D8 add al, bl 11426 00007645 D0D8 rcr al, 1 11427 00007647 2C80 sub al, 80h 11428 00007649 66C1E008 shl ax, 8 11429 0000764D 66AB stosw ; this is 5th interpolated sample (L) 11430 0000764F A0[31870000] mov al, [next_val_r] 11431 00007654 00F8 add al, bh 11432 00007656 D0D8 rcr al, 1 11433 00007658 2C80 sub al, 80h 11434 0000765A 66C1E008 shl ax, 8 11435 0000765E 66AB stosw ; this is 5th interpolated sample (R) 11436 ; 8 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 11437 00007660 E305 jecxz lff8s_6 11438 00007662 E907FFFFFF jmp lff8s_1 11439 lff8s_6: 11440 00007667 E9D6FEFFFF jmp lff8s_3 11441 11442 ; -------------------------------------------------------- 11443 11444 load_8khz_mono_16_bit: 11445 ; 13/01/2025 (mp3play3.s) 11446 0000766C BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 11447 00007671 BF[00700500] mov edi, sample_buffer ; wav output buffer 11448 00007676 8B0D[60A30000] mov ecx, [loadsize] 11449 ; 13/01/2025 11450 0000767C D1E9 shr ecx, 1 ; word count 11451 lff8m2_1: 11452 0000767E 66AD lodsw 11453 00007680 66AB stosw ; original sample (left channel) 11454 00007682 66AB stosw ; original sample (right channel) 11455 00007684 80C480 add ah, 80h ; convert sound level to 0-65535 format 11456 00007687 66A3[2B870000] mov [previous_val], ax 11457 0000768D 31C0 xor eax, eax 11458 0000768F 49 dec ecx 11459 00007690 7403 jz short lff8m2_2 11460 00007692 668B06 mov ax, [esi] 11461 lff8m2_2: 11462 00007695 80C480 add ah, 80h ; convert sound level to 0-65535 format 11463 00007698 89C5 mov ebp, eax ; [next_val] 11464 0000769A 660305[2B870000] add ax, [previous_val] 11465 000076A1 66D1D8 rcr ax, 1 11466 000076A4 89C2 mov edx, eax ; this is interpolated middle (3th) sample 11467 000076A6 660305[2B870000] add ax, [previous_val] 11468 000076AD 66D1D8 rcr ax, 1 ; this is temporary interpolation value 11469 000076B0 89C3 mov ebx, eax 11470 000076B2 660305[2B870000] add ax, [previous_val] 11471 000076B9 66D1D8 rcr ax, 1 11472 000076BC 80EC80 sub ah, 80h ; -32768 to +32767 format again 11473 000076BF 66AB stosw ; this is 1st interpolated sample (L) 11474 000076C1 66AB stosw ; this is 1st interpolated sample (R) 11475 000076C3 89D8 mov eax, ebx 11476 000076C5 6601D0 add ax, dx 11477 000076C8 66D1D8 rcr ax, 1 11478 000076CB 80EC80 sub ah, 80h 11479 000076CE 66AB stosw ; this is 2nd interpolated sample (L) 11480 000076D0 66AB stosw ; this is 2nd interpolated sample (R) 11481 000076D2 89D0 mov eax, edx 11482 000076D4 80EC80 sub ah, 80h ; -32768 to +32767 format again 11483 000076D7 66AB stosw ; this is middle (3th) interpolated sample (L) 11484 000076D9 66AB stosw ; this is middle (3th) interpolated sample (R) 11485 000076DB 89E8 mov eax, ebp 11486 000076DD 6601D0 add ax, dx 11487 000076E0 66D1D8 rcr ax, 1 11488 000076E3 89C3 mov ebx, eax ; this is temporary interpolation value 11489 000076E5 6601D0 add ax, dx 11490 000076E8 66D1D8 rcr ax, 1 11491 000076EB 80EC80 sub ah, 80h 11492 000076EE 66AB stosw ; this is 4th interpolated sample (L) 11493 000076F0 66AB stosw ; this is 4th interpolated sample (R) 11494 000076F2 89E8 mov eax, ebp 11495 000076F4 6601D8 add ax, bx 11496 000076F7 66D1D8 rcr ax, 1 11497 000076FA 80EC80 sub ah, 80h ; -32768 to +32767 format again 11498 000076FD 66AB stosw ; this is 5th interpolated sample (L) 11499 000076FF 66AB stosw ; this is 5th interpolated sample (R) 11500 ; 8 kHZ mono to 48 kHZ stereo conversion of the sample is OK 11501 00007701 09C9 or ecx, ecx 11502 00007703 0F8575FFFFFF jnz lff8m2_1 11503 00007709 E934FEFFFF jmp lff8m2_3 11504 11505 ; -------------------------------------------------------- 11506 11507 load_8khz_stereo_16_bit: 11508 ; 13/01/2025 (mp3play3.s) 11509 0000770E BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 11510 00007713 BF[00700500] mov edi, sample_buffer ; wav output buffer 11511 00007718 8B0D[60A30000] mov ecx, [loadsize] 11512 ; 13/01/2025 11513 0000771E C1E902 shr ecx, 2 ; dword count 11514 lff8s2_1: 11515 00007721 66AD lodsw 11516 00007723 66AB stosw ; original sample (L) 11517 ; 15/11/2023 11518 00007725 80C480 add ah, 80h ; convert sound level to 0-65535 format 11519 00007728 66A3[2B870000] mov [previous_val_l], ax 11520 0000772E 66AD lodsw 11521 00007730 66AB stosw ; original sample (R) 11522 00007732 80C480 add ah, 80h ; convert sound level to 0-65535 format 11523 00007735 66A3[2D870000] mov [previous_val_r], ax 11524 0000773B 31D2 xor edx, edx 11525 0000773D 31C0 xor eax, eax 11526 ; 16/11/2023 11527 0000773F 49 dec ecx 11528 00007740 7407 jz short lff8s2_2 11529 00007742 668B06 mov ax, [esi] 11530 00007745 668B5602 mov dx, [esi+2] 11531 lff8s2_2: 11532 00007749 80C480 add ah, 80h ; convert sound level to 0-65535 format 11533 0000774C 66A3[2F870000] mov [next_val_l], ax 11534 00007752 80C680 add dh, 80h ; convert sound level to 0-65535 format 11535 00007755 668915[31870000] mov [next_val_r], dx 11536 0000775C 660305[2B870000] add ax, [previous_val_l] 11537 00007763 66D1D8 rcr ax, 1 11538 00007766 89C2 mov edx, eax ; this is interpolated middle (3th) sample (L) 11539 00007768 660305[2B870000] add ax, [previous_val_l] 11540 0000776F 66D1D8 rcr ax, 1 11541 00007772 89C3 mov ebx, eax ; this is temporary interpolation value (L) 11542 00007774 660305[2B870000] add ax, [previous_val_l] 11543 0000777B 66D1D8 rcr ax, 1 11544 0000777E 80EC80 sub ah, 80h ; -32768 to +32767 format again 11545 00007781 66AB stosw ; this is 1st interpolated sample (L) 11546 00007783 66A1[31870000] mov ax, [next_val_r] 11547 00007789 660305[2D870000] add ax, [previous_val_r] 11548 00007790 66D1D8 rcr ax, 1 11549 00007793 89C5 mov ebp, eax ; this is interpolated middle (3th) sample (R) 11550 00007795 660305[2D870000] add ax, [previous_val_r] 11551 0000779C 66D1D8 rcr ax, 1 11552 0000779F 50 push eax ; * ; this is temporary interpolation value (R) 11553 000077A0 660305[2D870000] add ax, [previous_val_r] 11554 000077A7 66D1D8 rcr ax, 1 11555 000077AA 80EC80 sub ah, 80h 11556 000077AD 66AB stosw ; this is 1st interpolated sample (R) 11557 000077AF 89D8 mov eax, ebx 11558 000077B1 6601D0 add ax, dx 11559 000077B4 66D1D8 rcr ax, 1 11560 000077B7 80EC80 sub ah, 80h ; -32768 to +32767 format again 11561 000077BA 66AB stosw ; this is 2nd interpolated sample (L) 11562 000077BC 58 pop eax ; * 11563 000077BD 6601E8 add ax, bp 11564 000077C0 66D1D8 rcr ax, 1 11565 000077C3 80EC80 sub ah, 80h 11566 000077C6 66AB stosw ; this is 2nd interpolated sample (R) 11567 000077C8 89D0 mov eax, edx 11568 000077CA 80EC80 sub ah, 80h 11569 000077CD 66AB stosw ; this is middle (3th) interpolated sample (L) 11570 000077CF 89E8 mov eax, ebp 11571 000077D1 80EC80 sub ah, 80h ; -32768 to +32767 format again 11572 000077D4 66AB stosw ; this is middle (3th) interpolated sample (R) 11573 000077D6 66A1[2F870000] mov ax, [next_val_l] 11574 000077DC 6601D0 add ax, dx 11575 000077DF 66D1D8 rcr ax, 1 11576 000077E2 89C3 mov ebx, eax ; this is temporary interpolation value (L) 11577 000077E4 6601D0 add ax, dx 11578 000077E7 66D1D8 rcr ax, 1 11579 000077EA 80EC80 sub ah, 80h 11580 000077ED 66AB stosw ; this is 4th interpolated sample (L) 11581 000077EF 66A1[31870000] mov ax, [next_val_r] 11582 000077F5 6601E8 add ax, bp 11583 000077F8 66D1D8 rcr ax, 1 11584 000077FB 50 push eax ; ** ; this is temporary interpolation value (R) 11585 000077FC 6601E8 add ax, bp 11586 000077FF 66D1D8 rcr ax, 1 11587 00007802 80EC80 sub ah, 80h 11588 00007805 66AB stosw ; this is 4th interpolated sample (R) 11589 00007807 66A1[2F870000] mov ax, [next_val_l] 11590 0000780D 6601D8 add ax, bx 11591 00007810 66D1D8 rcr ax, 1 11592 00007813 80EC80 sub ah, 80h ; -32768 to +32767 format again 11593 00007816 66AB stosw ; this is 5th interpolated sample (L) 11594 00007818 58 pop eax ; ** 11595 00007819 660305[31870000] add ax, [next_val_r] 11596 00007820 66D1D8 rcr ax, 1 11597 00007823 80EC80 sub ah, 80h 11598 00007826 66AB stosw ; this is 5th interpolated sample (R) 11599 ; 8 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 11600 00007828 E305 jecxz lff8_s2_9 11601 0000782A E9F2FEFFFF jmp lff8s2_1 11602 lff8_s2_9: 11603 0000782F E90EFDFFFF jmp lff8s2_3 11604 11605 ; -------------------------------------------------------- 11606 11607 load_16khz_mono_8_bit: 11608 ; 13/01/2025 (mp3play3.s) 11609 00007834 BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 11610 00007839 BF[00700500] mov edi, sample_buffer ; wav output buffer 11611 0000783E 8B0D[60A30000] mov ecx, [loadsize] 11612 ; 13/01/2025 11613 lff16m_1: 11614 00007844 AC lodsb 11615 ;mov [previous_val], al 11616 00007845 88C3 mov bl, al 11617 00007847 2C80 sub al, 80h 11618 00007849 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 11619 0000784D 66AB stosw ; original sample (left channel) 11620 0000784F 66AB stosw ; original sample (right channel) 11621 ;xor ax, ax 11622 ; 14/11/22023 11623 00007851 B080 mov al, 80h 11624 00007853 49 dec ecx 11625 00007854 7402 jz short lff16m_2 11626 00007856 8A06 mov al, [esi] 11627 lff16m_2: 11628 ;mov [next_val], al 11629 00007858 88C7 mov bh, al 11630 ;add al, [previous_val] 11631 0000785A 00D8 add al, bl 11632 0000785C D0D8 rcr al, 1 11633 0000785E 88C2 mov dl, al ; this is interpolated middle (temp) sample 11634 ;add al, [previous_val] 11635 00007860 00D8 add al, bl 11636 00007862 D0D8 rcr al, 1 11637 00007864 2C80 sub al, 80h 11638 00007866 66C1E008 shl ax, 8 11639 0000786A 66AB stosw ; this is 1st interpolated sample (L) 11640 0000786C 66AB stosw ; this is 1st interpolated sample (R) 11641 ;mov al, [next_val] 11642 0000786E 88F8 mov al, bh 11643 00007870 00D0 add al, dl 11644 00007872 D0D8 rcr al, 1 11645 00007874 2C80 sub al, 80h 11646 00007876 66C1E008 shl ax, 8 11647 0000787A 66AB stosw ; this is 2nd interpolated sample (L) 11648 0000787C 66AB stosw ; this is 2nd interpolated sample (R) 11649 11650 ; 16 kHZ mono to 48 kHZ stereo conversion of the sample is OK 11651 0000787E 09C9 or ecx, ecx 11652 00007880 75C2 jnz short lff16m_1 11653 00007882 E9BBFCFFFF jmp lff16m_3 11654 11655 ; -------------------------------------------------------- 11656 11657 load_16khz_stereo_8_bit: 11658 ; 13/01/2025 (mp3play3.s) 11659 00007887 BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 11660 0000788C BF[00700500] mov edi, sample_buffer ; wav output buffer 11661 00007891 8B0D[60A30000] mov ecx, [loadsize] 11662 ; 13/01/2025 11663 00007897 D1E9 shr ecx, 1 ; word count 11664 lff16s_1: 11665 00007899 AC lodsb 11666 0000789A A2[2B870000] mov [previous_val_l], al 11667 0000789F 2C80 sub al, 80h 11668 000078A1 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 11669 000078A5 66AB stosw ; original sample (L) 11670 000078A7 AC lodsb 11671 000078A8 A2[2D870000] mov [previous_val_r], al 11672 000078AD 2C80 sub al, 80h 11673 000078AF 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 11674 000078B3 66AB stosw ; original sample (R) 11675 11676 ;xor eax, eax 11677 000078B5 66B88080 mov ax, 8080h 11678 000078B9 49 dec ecx 11679 000078BA 7403 jz short lff16s_2 11680 ; convert 8 bit sample to 16 bit sample 11681 000078BC 668B06 mov ax, [esi] 11682 lff16s_2: 11683 ;mov [next_val_l], al 11684 ;mov [next_val_r], ah 11685 000078BF 89C3 mov ebx, eax 11686 000078C1 0205[2B870000] add al, [previous_val_l] 11687 000078C7 D0D8 rcr al, 1 11688 000078C9 88C2 mov dl, al ; this is temporary interpolation value (L) 11689 000078CB 0205[2B870000] add al, [previous_val_l] 11690 000078D1 D0D8 rcr al, 1 11691 000078D3 2C80 sub al, 80h 11692 000078D5 66C1E008 shl ax, 8 11693 000078D9 66AB stosw ; this is 1st interpolated sample (L) 11694 000078DB 88F8 mov al, bh ; [next_val_r] 11695 000078DD 0205[2D870000] add al, [previous_val_r] 11696 000078E3 D0D8 rcr al, 1 11697 000078E5 88C6 mov dh, al ; this is temporary interpolation value (R) 11698 000078E7 0205[2D870000] add al, [previous_val_r] 11699 000078ED D0D8 rcr al, 1 11700 000078EF 2C80 sub al, 80h 11701 000078F1 66C1E008 shl ax, 8 11702 000078F5 66AB stosw ; this is 1st interpolated sample (R) 11703 000078F7 88D0 mov al, dl 11704 000078F9 00D8 add al, bl ; [next_val_l] 11705 000078FB D0D8 rcr al, 1 11706 000078FD 2C80 sub al, 80h 11707 000078FF 66C1E008 shl ax, 8 11708 00007903 66AB stosw ; this is 2nd interpolated sample (L) 11709 00007905 88F0 mov al, dh 11710 00007907 00F8 add al, bh ; [next_val_r] 11711 00007909 D0D8 rcr al, 1 11712 0000790B 2C80 sub al, 80h 11713 0000790D 66C1E008 shl ax, 8 11714 00007911 66AB stosw ; this is 2nd interpolated sample (R) 11715 11716 ; 16 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 11717 00007913 09C9 or ecx, ecx 11718 00007915 7582 jnz short lff16s_1 11719 00007917 E926FCFFFF jmp lff16s_3 11720 11721 ; -------------------------------------------------------- 11722 11723 load_16khz_mono_16_bit: 11724 ; 13/01/2025 (mp3play3.s) 11725 0000791C BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 11726 00007921 BF[00700500] mov edi, sample_buffer ; wav output buffer 11727 00007926 8B0D[60A30000] mov ecx, [loadsize] 11728 ; 13/01/2025 11729 0000792C D1E9 shr ecx, 1 ; word count 11730 lff16m2_1: 11731 0000792E 66AD lodsw 11732 00007930 66AB stosw ; original sample (left channel) 11733 00007932 66AB stosw ; original sample (right channel) 11734 00007934 80C480 add ah, 80h ; convert sound level 0 to 65535 format 11735 ;mov [previous_val], ax 11736 00007937 89C3 mov ebx, eax 11737 00007939 31C0 xor eax, eax 11738 0000793B 49 dec ecx 11739 0000793C 7403 jz short lff16m2_2 11740 0000793E 668B06 mov ax, [esi] 11741 lff16m2_2: 11742 00007941 80C480 add ah, 80h ; convert sound level 0 to 65535 format 11743 00007944 89C5 mov ebp, eax ; [next_val] 11744 ;add ax, [previous_val] 11745 00007946 6601D8 add ax, bx 11746 00007949 66D1D8 rcr ax, 1 11747 0000794C 89C2 mov edx, eax ; this is temporary interpolation value 11748 ;add ax, [previous_val] 11749 0000794E 6601D8 add ax, bx 11750 00007951 66D1D8 rcr ax, 1 11751 00007954 80EC80 sub ah, 80h ; -32768 to +32767 format again 11752 00007957 66AB stosw ; this is 1st interpolated sample (L) 11753 00007959 66AB stosw ; this is 1st interpolated sample (R) 11754 0000795B 89E8 mov eax, ebp 11755 0000795D 6601D0 add ax, dx 11756 00007960 66D1D8 rcr ax, 1 11757 00007963 80EC80 sub ah, 80h ; -32768 to +32767 format again 11758 00007966 66AB stosw ; this is 2nd interpolated sample (L) 11759 00007968 66AB stosw ; this is 2nd interpolated sample (R) 11760 ; 16 kHZ mono to 48 kHZ stereo conversion of the sample is OK 11761 0000796A 09C9 or ecx, ecx 11762 0000796C 75C0 jnz short lff16m2_1 11763 0000796E E9CFFBFFFF jmp lff16m2_3 11764 11765 ; -------------------------------------------------------- 11766 11767 load_16khz_stereo_16_bit: 11768 ; 13/01/2025 (mp3play3.s) 11769 00007973 BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 11770 00007978 BF[00700500] mov edi, sample_buffer ; wav output buffer 11771 0000797D 8B0D[60A30000] mov ecx, [loadsize] 11772 ; 13/01/2025 11773 00007983 C1E902 shr ecx, 2 ; dword count 11774 lff16s2_1: 11775 00007986 66AD lodsw 11776 00007988 66AB stosw ; original sample (L) 11777 0000798A 80C480 add ah, 80h ; convert sound level 0 to 65535 format 11778 0000798D 66A3[2B870000] mov [previous_val_l], ax 11779 00007993 66AD lodsw 11780 00007995 66AB stosw ; original sample (R) 11781 00007997 80C480 add ah, 80h ; convert sound level 0 to 65535 format 11782 0000799A 66A3[2D870000] mov [previous_val_r], ax 11783 000079A0 31D2 xor edx, edx 11784 000079A2 31C0 xor eax, eax 11785 ; 16/11/2023 11786 000079A4 49 dec ecx 11787 000079A5 7407 jz short lff16s2_2 11788 000079A7 668B06 mov ax, [esi] 11789 000079AA 668B5602 mov dx, [esi+2] 11790 lff16s2_2: 11791 000079AE 80C480 add ah, 80h ; convert sound level 0 to 65535 format 11792 ;mov [next_val_l], ax 11793 000079B1 89C5 mov ebp, eax 11794 000079B3 80C680 add dh, 80h ; convert sound level 0 to 65535 format 11795 000079B6 668915[31870000] mov [next_val_r], dx 11796 000079BD 660305[2B870000] add ax, [previous_val_l] 11797 000079C4 66D1D8 rcr ax, 1 11798 000079C7 89C2 mov edx, eax ; this is temporary interpolation value (L) 11799 000079C9 660305[2B870000] add ax, [previous_val_l] 11800 000079D0 66D1D8 rcr ax, 1 11801 000079D3 80EC80 sub ah, 80h ; -32768 to +32767 format again 11802 000079D6 66AB stosw ; this is 1st interpolated sample (L) 11803 000079D8 66A1[31870000] mov ax, [next_val_r] 11804 000079DE 660305[2D870000] add ax, [previous_val_r] 11805 000079E5 66D1D8 rcr ax, 1 11806 000079E8 89C3 mov ebx, eax ; this is temporary interpolation value (R) 11807 000079EA 660305[2D870000] add ax, [previous_val_r] 11808 000079F1 66D1D8 rcr ax, 1 11809 000079F4 80EC80 sub ah, 80h ; -32768 to +32767 format again 11810 000079F7 66AB stosw ; this is 1st interpolated sample (R) 11811 ;mov ax, [next_val_l] 11812 000079F9 89E8 mov eax, ebp 11813 000079FB 6601D0 add ax, dx 11814 000079FE 66D1D8 rcr ax, 1 11815 00007A01 80EC80 sub ah, 80h ; -32768 to +32767 format again 11816 00007A04 66AB stosw ; this is 2nd interpolated sample (L) 11817 00007A06 66A1[31870000] mov ax, [next_val_r] 11818 00007A0C 6601D8 add ax, bx 11819 00007A0F 66D1D8 rcr ax, 1 11820 00007A12 80EC80 sub ah, 80h ; -32768 to +32767 format again 11821 00007A15 66AB stosw ; this is 2nd interpolated sample (R) 11822 11823 ; 16 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 11824 00007A17 09C9 or ecx, ecx 11825 00007A19 0F8567FFFFFF jnz lff16s2_1 11826 00007A1F E91EFBFFFF jmp lff16s2_3 11827 11828 ; -------------------------------------------------------- 11829 11830 load_24khz_mono_8_bit: 11831 ; 13/01/2025 (mp3play3.s) 11832 00007A24 BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 11833 00007A29 BF[00700500] mov edi, sample_buffer ; wav output buffer 11834 00007A2E 8B0D[60A30000] mov ecx, [loadsize] 11835 ; 13/01/2025 11836 lff24m_1: 11837 00007A34 AC lodsb 11838 ;mov [previous_val], al 11839 00007A35 88C3 mov bl, al 11840 00007A37 2C80 sub al, 80h 11841 00007A39 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 11842 00007A3D 66AB stosw ; original sample (left channel) 11843 00007A3F 66AB stosw ; original sample (right channel) 11844 ;xor eax, eax 11845 00007A41 B080 mov al, 80h 11846 00007A43 49 dec ecx 11847 00007A44 7402 jz short lff24m_2 11848 00007A46 8A06 mov al, [esi] 11849 lff24m_2: 11850 ;;mov [next_val], al 11851 ;mov bh, al 11852 ;add al, [previous_val] 11853 00007A48 00D8 add al, bl 11854 00007A4A D0D8 rcr al, 1 11855 00007A4C 2C80 sub al, 80h 11856 00007A4E 66C1E008 shl ax, 8 11857 00007A52 66AB stosw ; this is interpolated sample (L) 11858 00007A54 66AB stosw ; this is interpolated sample (R) 11859 11860 ; 24 kHZ mono to 48 kHZ stereo conversion of the sample is OK 11861 00007A56 09C9 or ecx, ecx 11862 00007A58 75DA jnz short lff24m_1 11863 00007A5A E9E3FAFFFF jmp lff24_3 11864 11865 ; -------------------------------------------------------- 11866 11867 load_24khz_stereo_8_bit: 11868 ; 13/01/2025 (mp3play3.s) 11869 00007A5F BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 11870 00007A64 BF[00700500] mov edi, sample_buffer ; wav output buffer 11871 00007A69 8B0D[60A30000] mov ecx, [loadsize] 11872 ; 13/01/2025 11873 00007A6F D1E9 shr ecx, 1 ; word count 11874 lff24s_1: 11875 00007A71 AC lodsb 11876 00007A72 A2[2B870000] mov [previous_val_l], al 11877 00007A77 2C80 sub al, 80h 11878 00007A79 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 11879 00007A7D 66AB stosw ; original sample (L) 11880 00007A7F AC lodsb 11881 00007A80 A2[2D870000] mov [previous_val_r], al 11882 00007A85 2C80 sub al, 80h 11883 00007A87 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 11884 00007A8B 66AB stosw ; original sample (R) 11885 11886 ;xor eax, eax 11887 00007A8D 66B88080 mov ax, 8080h 11888 00007A91 49 dec ecx 11889 00007A92 7403 jz short lff24s_2 11890 ; convert 8 bit sample to 16 bit sample 11891 00007A94 668B06 mov ax, [esi] 11892 lff24s_2: 11893 ;;mov [next_val_l], al 11894 ;;mov [next_val_r], ah 11895 ;mov bx, ax 11896 00007A97 88E7 mov bh, ah 11897 00007A99 0205[2B870000] add al, [previous_val_l] 11898 00007A9F D0D8 rcr al, 1 11899 ;mov dl, al 11900 00007AA1 2C80 sub al, 80h 11901 00007AA3 66C1E008 shl ax, 8 11902 00007AA7 66AB stosw ; this is interpolated sample (L) 11903 00007AA9 88F8 mov al, bh ; [next_val_r] 11904 00007AAB 0205[2D870000] add al, [previous_val_r] 11905 00007AB1 D0D8 rcr al, 1 11906 ;mov dh, al 11907 00007AB3 2C80 sub al, 80h 11908 00007AB5 66C1E008 shl ax, 8 11909 00007AB9 66AB stosw ; this is interpolated sample (R) 11910 11911 ; 24 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 11912 00007ABB 09C9 or ecx, ecx 11913 00007ABD 75B2 jnz short lff24s_1 11914 00007ABF E97EFAFFFF jmp lff24_3 11915 11916 ; -------------------------------------------------------- 11917 11918 load_24khz_mono_16_bit: 11919 ; 30/01/2025 11920 ; 13/01/2025 (mp3play3.s) 11921 00007AC4 BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 11922 00007AC9 BF[00700500] mov edi, sample_buffer ; wav output buffer 11923 00007ACE 8B0D[60A30000] mov ecx, [loadsize] 11924 ; 13/01/2025 11925 00007AD4 D1E9 shr ecx, 1 ; word count 11926 lff24m2_1: 11927 00007AD6 66AD lodsw 11928 00007AD8 66AB stosw ; original sample (left channel) 11929 00007ADA 66AB stosw ; original sample (right channel) 11930 00007ADC 80C480 add ah, 80h ; convert sound level 0 to 65535 format 11931 ;mov [previous_val], ax 11932 ;mov ebx, eax 11933 ;xor eax, eax 11934 00007ADF 31DB xor ebx, ebx 11935 00007AE1 49 dec ecx 11936 00007AE2 7403 jz short lff24m2_2 11937 ;mov ax, [esi] 11938 00007AE4 668B1E mov bx, [esi] 11939 lff24m2_2: 11940 ; 30/01/2025 11941 00007AE7 80C780 add bh, 80h ; convert sound level 0 to 65535 format 11942 ;add ah, 80h 11943 ;mov ebp, eax ; [next_val] 11944 ;add ax, [previous_val] 11945 ; ax = [previous_val] 11946 ; bx = [next_val] 11947 00007AEA 6601D8 add ax, bx 11948 00007AED 66D1D8 rcr ax, 1 11949 00007AF0 80EC80 sub ah, 80h ; -32768 to +32767 format again 11950 00007AF3 66AB stosw ; this is interpolated sample (L) 11951 00007AF5 66AB stosw ; this is interpolated sample (R) 11952 ; 24 kHZ mono to 48 kHZ stereo conversion of the sample is OK 11953 00007AF7 09C9 or ecx, ecx 11954 00007AF9 75DB jnz short lff24m2_1 11955 00007AFB E942FAFFFF jmp lff24_3 11956 11957 ; -------------------------------------------------------- 11958 11959 load_24khz_stereo_16_bit: 11960 ; 13/01/2025 (mp3play3.s) 11961 00007B00 BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 11962 00007B05 BF[00700500] mov edi, sample_buffer ; wav output buffer 11963 00007B0A 8B0D[60A30000] mov ecx, [loadsize] 11964 ; 13/01/2025 11965 00007B10 C1E902 shr ecx, 2 ; dword count 11966 lff24s2_1: 11967 00007B13 66AD lodsw 11968 00007B15 66AB stosw ; original sample (L) 11969 00007B17 80C480 add ah, 80h ; convert sound level 0 to 65535 format 11970 00007B1A 66A3[2B870000] mov [previous_val_l], ax 11971 00007B20 66AD lodsw 11972 00007B22 66AB stosw ; original sample (R) 11973 00007B24 80C480 add ah, 80h ; convert sound level 0 to 65535 format 11974 ;mov [previous_val_r], ax 11975 00007B27 89C3 mov ebx, eax 11976 00007B29 31D2 xor edx, edx 11977 00007B2B 31C0 xor eax, eax 11978 ; 16/11/2023 11979 00007B2D 49 dec ecx 11980 00007B2E 7407 jz short lff24s2_2 11981 00007B30 668B06 mov ax, [esi] 11982 00007B33 668B5602 mov dx, [esi+2] 11983 lff24s2_2: 11984 00007B37 80C480 add ah, 80h ; convert sound level 0 to 65535 format 11985 ;;mov [next_val_l], ax 11986 ;mov ebp, eax 11987 00007B3A 80C680 add dh, 80h ; convert sound level 0 to 65535 format 11988 ;mov [next_val_r], dx 11989 00007B3D 660305[2B870000] add ax, [previous_val_l] 11990 00007B44 66D1D8 rcr ax, 1 11991 00007B47 80EC80 sub ah, 80h ; -32768 to +32767 format again 11992 00007B4A 66AB stosw ; this is interpolated sample (L) 11993 ;mov ax, [next_val_r] 11994 00007B4C 89D0 mov eax, edx 11995 ;add ax, [previous_val_r] 11996 00007B4E 6601D8 add ax, bx 11997 00007B51 66D1D8 rcr ax, 1 11998 00007B54 80EC80 sub ah, 80h ; -32768 to +32767 format again 11999 00007B57 66AB stosw ; this is interpolated sample (R) 12000 12001 ; 24 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 12002 00007B59 09C9 or ecx, ecx 12003 00007B5B 75B6 jnz short lff24s2_1 12004 00007B5D E9E0F9FFFF jmp lff24_3 12005 12006 ; -------------------------------------------------------- 12007 12008 load_32khz_mono_8_bit: 12009 ; 13/01/2025 (mp3play3.s) 12010 00007B62 BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 12011 00007B67 BF[00700500] mov edi, sample_buffer ; wav output buffer 12012 00007B6C 8B0D[60A30000] mov ecx, [loadsize] 12013 ; 13/01/2025 12014 lff32m_1: 12015 00007B72 AC lodsb 12016 ;mov [previous_val], al 12017 00007B73 88C3 mov bl, al 12018 00007B75 2C80 sub al, 80h 12019 00007B77 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 12020 00007B7B 66AB stosw ; original sample (left channel) 12021 00007B7D 66AB stosw ; original sample (right channel) 12022 ;xor eax, eax 12023 00007B7F B080 mov al, 80h 12024 00007B81 49 dec ecx 12025 00007B82 7402 jz short lff32m_2 12026 00007B84 8A06 mov al, [esi] 12027 lff32m_2: 12028 ;;mov [next_val], al 12029 ;mov bh, al 12030 ;add al, [previous_val] 12031 00007B86 00D8 add al, bl 12032 00007B88 D0D8 rcr al, 1 12033 00007B8A 2C80 sub al, 80h 12034 00007B8C 66C1E008 shl ax, 8 12035 00007B90 66AB stosw ; this is interpolated sample (L) 12036 00007B92 66AB stosw ; this is interpolated sample (R) 12037 12038 ; different than 8-16-24 kHZ ! 12039 ; 'original-interpolated-original' trio samples 12040 00007B94 E30E jecxz lff32m_3 12041 12042 00007B96 AC lodsb 12043 00007B97 2C80 sub al, 80h 12044 00007B99 66C1E008 shl ax, 8 12045 00007B9D 66AB stosw ; original sample (left channel) 12046 00007B9F 66AB stosw ; original sample (right channel) 12047 12048 ; 32 kHZ mono to 48 kHZ stereo conversion of the sample is OK 12049 00007BA1 49 dec ecx 12050 00007BA2 75CE jnz short lff32m_1 12051 lff32m_3: 12052 00007BA4 E999F9FFFF jmp lff32_3 12053 12054 ; -------------------------------------------------------- 12055 12056 load_32khz_stereo_8_bit: 12057 ; 13/01/2025 (mp3play3.s) 12058 00007BA9 BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 12059 00007BAE BF[00700500] mov edi, sample_buffer ; wav output buffer 12060 00007BB3 8B0D[60A30000] mov ecx, [loadsize] 12061 ; 13/01/2025 12062 00007BB9 D1E9 shr ecx, 1 ; word count 12063 lff32s_1: 12064 00007BBB AC lodsb 12065 00007BBC A2[2B870000] mov [previous_val_l], al 12066 00007BC1 2C80 sub al, 80h 12067 00007BC3 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 12068 00007BC7 66AB stosw ; original sample (L) 12069 00007BC9 AC lodsb 12070 00007BCA A2[2D870000] mov [previous_val_r], al 12071 00007BCF 2C80 sub al, 80h 12072 00007BD1 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 12073 00007BD5 66AB stosw ; original sample (R) 12074 12075 ;xor eax, eax 12076 00007BD7 66B88080 mov ax, 8080h 12077 00007BDB 49 dec ecx 12078 00007BDC 7403 jz short lff32s_2 12079 ; convert 8 bit sample to 16 bit sample 12080 00007BDE 668B06 mov ax, [esi] 12081 lff32s_2: 12082 ;;mov [next_val_l], al 12083 ;;mov [next_val_r], ah 12084 ;mov bx, ax 12085 00007BE1 88E7 mov bh, ah 12086 00007BE3 0205[2B870000] add al, [previous_val_l] 12087 00007BE9 D0D8 rcr al, 1 12088 ;mov dl, al 12089 00007BEB 2C80 sub al, 80h 12090 00007BED 66C1E008 shl ax, 8 12091 00007BF1 66AB stosw ; this is interpolated sample (L) 12092 00007BF3 88F8 mov al, bh ; [next_val_r] 12093 00007BF5 0205[2D870000] add al, [previous_val_r] 12094 00007BFB D0D8 rcr al, 1 12095 ;mov dh, al 12096 00007BFD 2C80 sub al, 80h 12097 00007BFF 66C1E008 shl ax, 8 12098 00007C03 66AB stosw ; this is interpolated sample (R) 12099 12100 ; different than 8-16-24 kHZ ! 12101 ; 'original-interpolated-original' trio samples 12102 00007C05 E315 jecxz lff32s_3 12103 12104 00007C07 AC lodsb 12105 00007C08 2C80 sub al, 80h 12106 00007C0A 66C1E008 shl ax, 8 12107 00007C0E 66AB stosw ; original sample (left channel) 12108 12109 00007C10 AC lodsb 12110 00007C11 2C80 sub al, 80h 12111 00007C13 66C1E008 shl ax, 8 12112 00007C17 66AB stosw ; original sample (right channel) 12113 12114 ; 32 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 12115 00007C19 49 dec ecx 12116 00007C1A 759F jnz short lff32s_1 12117 lff32s_3: 12118 00007C1C E921F9FFFF jmp lff32_3 12119 12120 ; -------------------------------------------------------- 12121 12122 load_32khz_mono_16_bit: 12123 ; 13/01/2025 (mp3play3.s) 12124 00007C21 BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 12125 00007C26 BF[00700500] mov edi, sample_buffer ; wav output buffer 12126 00007C2B 8B0D[60A30000] mov ecx, [loadsize] 12127 ; 13/01/2025 12128 00007C31 D1E9 shr ecx, 1 ; word count 12129 lff32m2_1: 12130 00007C33 66AD lodsw 12131 00007C35 66AB stosw ; original sample (left channel) 12132 00007C37 66AB stosw ; original sample (right channel) 12133 00007C39 80C480 add ah, 80h ; convert sound level 0 to 65535 format 12134 ;mov [previous_val], ax 12135 ;mov ebx, eax 12136 ;xor eax, eax 12137 00007C3C 31DB xor ebx, ebx 12138 00007C3E 49 dec ecx 12139 00007C3F 7403 jz short lff32m2_2 12140 ;mov ax, [esi] 12141 00007C41 668B1E mov bx, [esi] 12142 lff32m2_2: 12143 ;add ah, 80h ; convert sound level 0 to 65535 format 12144 ;mov ebp, eax ; [next_val] 12145 ;add ax, [previous_val] 12146 ; ax = [previous_val] 12147 ; bx = [next_val] 12148 00007C44 6601D8 add ax, bx 12149 00007C47 66D1D8 rcr ax, 1 12150 00007C4A 80EC80 sub ah, 80h ; -32768 to +32767 format again 12151 00007C4D 66AB stosw ; this is interpolated sample (L) 12152 00007C4F 66AB stosw ; this is interpolated sample (R) 12153 12154 ; different than 8-16-24 kHZ ! 12155 ; 'original-interpolated-original' trio samples 12156 00007C51 E309 jecxz lff32m2_3 12157 12158 00007C53 66AD lodsw 12159 00007C55 66AB stosw ; original sample (left channel) 12160 00007C57 66AB stosw ; original sample (right channel) 12161 12162 ; 32 kHZ mono to 48 kHZ stereo conversion of the sample is OK 12163 00007C59 49 dec ecx 12164 00007C5A 75D7 jnz short lff32m2_1 12165 lff32m2_3: 12166 00007C5C E9E1F8FFFF jmp lff32_3 12167 12168 ; -------------------------------------------------------- 12169 12170 load_32khz_stereo_16_bit: 12171 ; 13/01/2025 (mp3play3.s) 12172 00007C61 BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 12173 00007C66 BF[00700500] mov edi, sample_buffer ; wav output buffer 12174 00007C6B 8B0D[60A30000] mov ecx, [loadsize] 12175 ; 13/01/2025 12176 00007C71 C1E902 shr ecx, 2 ; dword count 12177 lff32s2_1: 12178 00007C74 66AD lodsw 12179 00007C76 66AB stosw ; original sample (L) 12180 00007C78 80C480 add ah, 80h ; convert sound level 0 to 65535 format 12181 00007C7B 66A3[2B870000] mov [previous_val_l], ax 12182 00007C81 66AD lodsw 12183 00007C83 66AB stosw ; original sample (R) 12184 00007C85 80C480 add ah, 80h ; convert sound level 0 to 65535 format 12185 ;mov [previous_val_r], ax 12186 00007C88 89C3 mov ebx, eax 12187 00007C8A 31D2 xor edx, edx 12188 00007C8C 31C0 xor eax, eax 12189 ; 16/11/2023 12190 00007C8E 49 dec ecx 12191 00007C8F 7407 jz short lff32s2_2 12192 00007C91 668B06 mov ax, [esi] 12193 00007C94 668B5602 mov dx, [esi+2] 12194 lff32s2_2: 12195 00007C98 80C480 add ah, 80h ; convert sound level 0 to 65535 format 12196 ;;mov [next_val_l], ax 12197 ;mov ebp, eax 12198 00007C9B 80C680 add dh, 80h ; convert sound level 0 to 65535 format 12199 ;mov [next_val_r], dx 12200 00007C9E 660305[2B870000] add ax, [previous_val_l] 12201 00007CA5 66D1D8 rcr ax, 1 12202 00007CA8 80EC80 sub ah, 80h ; -32768 to +32767 format again 12203 00007CAB 66AB stosw ; this is interpolated sample (L) 12204 ;mov ax, [next_val_r] 12205 00007CAD 89D0 mov eax, edx 12206 ;add ax, [previous_val_r] 12207 00007CAF 6601D8 add ax, bx 12208 00007CB2 66D1D8 rcr ax, 1 12209 00007CB5 80EC80 sub ah, 80h ; -32768 to +32767 format again 12210 00007CB8 66AB stosw ; this is interpolated sample (R) 12211 12212 ; different than 8-16-24 kHZ ! 12213 ; 'original-interpolated-original' trio samples 12214 00007CBA E30B jecxz lff32s2_3 12215 12216 00007CBC 66AD lodsw 12217 00007CBE 66AB stosw ; original sample (L) 12218 00007CC0 66AD lodsw 12219 00007CC2 66AB stosw ; original sample (R) 12220 12221 ; 32 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 12222 00007CC4 49 dec ecx 12223 00007CC5 75AD jnz short lff32s2_1 12224 lff32s2_3: 12225 00007CC7 E976F8FFFF jmp lff32_3 12226 12227 ; -------------------------------------------------------- 12228 12229 load_22khz_mono_8_bit: 12230 ; 13/01/2025 (mp3play3.s) 12231 00007CCC BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 12232 00007CD1 BF[00700500] mov edi, sample_buffer ; wav output buffer 12233 00007CD6 8B0D[60A30000] mov ecx, [loadsize] 12234 ; 13/01/2025 12235 lff22m_9: 12236 00007CDC BD05000000 mov ebp, 5 ; interpolation (one step) loop count 12237 00007CE1 C605[33870000]03 mov byte [faz], 3 ; 3 steps/phases 12238 lff22m_1: 12239 ; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2 ; 37/17 12240 00007CE8 AC lodsb 12241 00007CE9 B280 mov dl, 80h 12242 00007CEB 49 dec ecx 12243 00007CEC 7402 jz short lff22m_2_1 12244 00007CEE 8A16 mov dl, [esi] 12245 lff22m_2_1: 12246 ; al = [previous_val] 12247 ; dl = [next_val] 12248 00007CF0 E8EC040000 call interpolating_3_8bit_mono ; 1 of 17 12249 00007CF5 E32D jecxz lff22m_3 12250 lff22m_2_2: 12251 00007CF7 AC lodsb 12252 00007CF8 B280 mov dl, 80h 12253 00007CFA 49 dec ecx 12254 00007CFB 7402 jz short lff22m_2_3 12255 00007CFD 8A16 mov dl, [esi] 12256 lff22m_2_3: 12257 00007CFF E867050000 call interpolating_2_8bit_mono ; 2 of 17 .. 6 of 17 12258 00007D04 E31E jecxz lff22m_3 12259 00007D06 4D dec ebp 12260 00007D07 75EE jnz short lff22m_2_2 12261 12262 00007D09 A0[33870000] mov al, [faz] 12263 00007D0E FEC8 dec al 12264 00007D10 74CA jz short lff22m_9 12265 00007D12 FE0D[33870000] dec byte [faz] 12266 00007D18 BD04000000 mov ebp, 4 12267 00007D1D FEC8 dec al 12268 00007D1F 75C7 jnz short lff22m_1 ; 3:2:2:2:2 ; 7-11 of 17 12269 00007D21 45 inc ebp ; 5 12270 00007D22 EBC4 jmp short lff22m_1 ; 3:2:2:2:2:2 ; 12-17 of 17 12271 12272 lff22m_3: 12273 lff22s_3: 12274 00007D24 E919F8FFFF jmp lff22_3 ; padfill 12275 ; (put zeros in the remain words of the buffer) 12276 12277 ; -------------------------------------------------------- 12278 12279 load_22khz_stereo_8_bit: 12280 ; 13/01/2025 (mp3play3.s) 12281 00007D29 BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 12282 00007D2E BF[00700500] mov edi, sample_buffer ; wav output buffer 12283 00007D33 8B0D[60A30000] mov ecx, [loadsize] 12284 ; 13/01/2025 12285 00007D39 D1E9 shr ecx, 1 ; word count 12286 lff22s_9: 12287 00007D3B BD05000000 mov ebp, 5 ; interpolation (one step) loop count 12288 00007D40 C605[33870000]03 mov byte [faz], 3 ; 3 steps/phase 12289 lff22s_1: 12290 ; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2 ; 37/17 12291 00007D47 66AD lodsw 12292 00007D49 66BA8080 mov dx, 8080h 12293 00007D4D 49 dec ecx 12294 00007D4E 7403 jz short lff22s_2_1 12295 00007D50 668B16 mov dx, [esi] 12296 lff22s_2_1: 12297 ; al = [previous_val_l] 12298 ; ah = [previous_val_r] 12299 ; dl = [next_val_l] 12300 ; dh = [next_val_r] 12301 00007D53 E8BC040000 call interpolating_3_8bit_stereo ; 1 of 17 12302 00007D58 E3CA jecxz lff22s_3 12303 lff22s_2_2: 12304 00007D5A 66AD lodsw 12305 00007D5C 66BA8080 mov dx, 8080h 12306 00007D60 49 dec ecx 12307 00007D61 7403 jz short lff22s_2_3 12308 00007D63 668B16 mov dx, [esi] 12309 lff22s_2_3: 12310 00007D66 E81D050000 call interpolating_2_8bit_stereo ; 2 of 17 .. 6 of 17 12311 00007D6B E3B7 jecxz lff22s_3 12312 00007D6D 4D dec ebp 12313 00007D6E 75EA jnz short lff22s_2_2 12314 12315 00007D70 A0[33870000] mov al, [faz] 12316 00007D75 FEC8 dec al 12317 00007D77 74C2 jz short lff22s_9 12318 00007D79 FE0D[33870000] dec byte [faz] 12319 00007D7F BD04000000 mov ebp, 4 12320 00007D84 FEC8 dec al 12321 00007D86 75BF jnz short lff22s_1 ; 3:2:2:2:2 ; 7-11 of 17 12322 00007D88 45 inc ebp ; 5 12323 00007D89 EBBC jmp short lff22s_1 ; 3:2:2:2:2:2 ; 12-17 of 17 12324 12325 ; -------------------------------------------------------- 12326 12327 load_22khz_mono_16_bit: 12328 ; 13/01/2025 (mp3play3.s) 12329 00007D8B BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 12330 00007D90 BF[00700500] mov edi, sample_buffer ; wav output buffer 12331 00007D95 8B0D[60A30000] mov ecx, [loadsize] 12332 ; 13/01/2025 12333 00007D9B D1E9 shr ecx, 1 ; word count 12334 lff22m2_9: 12335 00007D9D BD05000000 mov ebp, 5 ; interpolation (one step) loop count 12336 00007DA2 C605[33870000]03 mov byte [faz], 3 ; 3 steps/phases 12337 lff22m2_1: 12338 ; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2 ; 37/17 12339 00007DA9 66AD lodsw 12340 00007DAB 31D2 xor edx, edx 12341 00007DAD 49 dec ecx 12342 00007DAE 7403 jz short lff22m2_2_1 12343 00007DB0 668B16 mov dx, [esi] 12344 lff22m2_2_1: 12345 ; ax = [previous_val] 12346 ; dx = [next_val] 12347 00007DB3 E801050000 call interpolating_3_16bit_mono ; 1 of 17 12348 00007DB8 E32F jecxz lff22m2_3 12349 lff22m2_2_2: 12350 00007DBA 66AD lodsw 12351 00007DBC 31D2 xor edx, edx 12352 00007DBE 49 dec ecx 12353 00007DBF 7403 jz short lff22m2_2_3 12354 00007DC1 668B16 mov dx, [esi] 12355 lff22m2_2_3: 12356 00007DC4 E883050000 call interpolating_2_16bit_mono ; 2 of 17 .. 6 of 17 12357 00007DC9 E31E jecxz lff22m2_3 12358 00007DCB 4D dec ebp 12359 00007DCC 75EC jnz short lff22m2_2_2 12360 12361 00007DCE A0[33870000] mov al, [faz] 12362 00007DD3 FEC8 dec al 12363 00007DD5 74C6 jz short lff22m2_9 12364 00007DD7 FE0D[33870000] dec byte [faz] 12365 00007DDD BD04000000 mov ebp, 4 12366 00007DE2 FEC8 dec al 12367 00007DE4 75C3 jnz short lff22m2_1 ; 3:2:2:2:2 ; 7-11 of 17 12368 00007DE6 45 inc ebp ; 5 12369 00007DE7 EBC0 jmp short lff22m2_1 ; 3:2:2:2:2:2 ; 12-17 of 17 12370 12371 lff22m2_3: 12372 lff22s2_3: 12373 00007DE9 E954F7FFFF jmp lff22_3 ; padfill 12374 ; (put zeros in the remain words of the buffer) 12375 12376 ; -------------------------------------------------------- 12377 12378 load_22khz_stereo_16_bit: 12379 ; 13/01/2025 (mp3play3.s) 12380 00007DEE BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 12381 00007DF3 BF[00700500] mov edi, sample_buffer ; wav output buffer 12382 00007DF8 8B0D[60A30000] mov ecx, [loadsize] 12383 ; 13/01/2025 12384 00007DFE C1E902 shr ecx, 2 ; dword count 12385 lff22s2_9: 12386 00007E01 BD05000000 mov ebp, 5 ; interpolation (one step) loop count 12387 00007E06 C605[33870000]03 mov byte [faz], 3 ; 3 steps/phase 12388 lff22s2_1: 12389 ; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2 ; 37/17 12390 00007E0D 66AD lodsw 12391 00007E0F 89C3 mov ebx, eax 12392 00007E11 66AD lodsw 12393 00007E13 8B16 mov edx, [esi] 12394 00007E15 668915[2F870000] mov [next_val_l], dx 12395 ; 26/11/2023 12396 00007E1C C1EA10 shr edx, 16 12397 00007E1F 49 dec ecx 12398 00007E20 7509 jnz short lff22s2_2_1 12399 00007E22 31D2 xor edx, edx ; 0 12400 00007E24 668915[2F870000] mov [next_val_l], dx 12401 lff22s2_2_1: 12402 ; bx = [previous_val_l] 12403 ; ax = [previous_val_r] 12404 ; [next_val_l] 12405 ; dx = [next_val_r] 12406 00007E2B E8B9040000 call interpolating_3_16bit_stereo ; 1 of 17 12407 00007E30 E3B7 jecxz lff22s2_3 12408 lff22s2_2_2: 12409 00007E32 66AD lodsw 12410 00007E34 89C3 mov ebx, eax 12411 00007E36 66AD lodsw 12412 00007E38 8B16 mov edx, [esi] 12413 00007E3A 668915[2F870000] mov [next_val_l], dx 12414 ; 26/11/2023 12415 00007E41 C1EA10 shr edx, 16 12416 00007E44 49 dec ecx 12417 00007E45 7509 jnz short lff22s2_2_3 12418 00007E47 31D2 xor edx, edx ; 0 12419 00007E49 668915[2F870000] mov [next_val_l], dx 12420 lff22s2_2_3: 12421 00007E50 E80F050000 call interpolating_2_16bit_stereo ; 2 of 17 .. 6 of 17 12422 00007E55 E31E jecxz lff22s2_2_4 12423 12424 00007E57 4D dec ebp 12425 00007E58 75D8 jnz short lff22s2_2_2 12426 12427 00007E5A A0[33870000] mov al, [faz] 12428 00007E5F FEC8 dec al 12429 00007E61 749E jz short lff22s2_9 12430 00007E63 FE0D[33870000] dec byte [faz] 12431 00007E69 BD04000000 mov ebp, 4 12432 00007E6E FEC8 dec al 12433 00007E70 759B jnz short lff22s2_1 ; 3:2:2:2:2 ; 7-11 of 17 12434 00007E72 45 inc ebp ; 5 12435 00007E73 EB98 jmp short lff22s2_1 ; 3:2:2:2:2:2 ; 12-17 of 17 12436 12437 lff22s2_2_4: 12438 ; 26/11/2023 12439 00007E75 E9C8F6FFFF jmp lff22_3 ; padfill 12440 12441 ; -------------------------------------------------------- 12442 12443 load_11khz_mono_8_bit: 12444 ; 13/01/2025 (mp3play3.s) 12445 00007E7A BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 12446 00007E7F BF[00700500] mov edi, sample_buffer ; wav output buffer 12447 00007E84 8B0D[60A30000] mov ecx, [loadsize] 12448 ; 13/01/2025 12449 lff11m_9: 12450 00007E8A BD06000000 mov ebp, 6 ; interpolation (one step) loop count 12451 lff11m_1: 12452 ; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4 ; 74/17 12453 00007E8F AC lodsb 12454 00007E90 B280 mov dl, 80h 12455 00007E92 49 dec ecx 12456 00007E93 7402 jz short lff11m_2_1 12457 00007E95 8A16 mov dl, [esi] 12458 lff11m_2_1: 12459 ; al = [previous_val] 12460 ; dl = [next_val] 12461 00007E97 E8F7040000 call interpolating_5_8bit_mono 12462 00007E9C E378 jecxz lff11m_3 12463 lff11m_2_2: 12464 00007E9E AC lodsb 12465 00007E9F B280 mov dl, 80h 12466 00007EA1 49 dec ecx 12467 00007EA2 7402 jz short lff11m_2_3 12468 00007EA4 8A16 mov dl, [esi] 12469 lff11m_2_3: 12470 00007EA6 E8F4050000 call interpolating_4_8bit_mono 12471 00007EAB E369 jecxz lff11m_3 12472 12473 00007EAD 4D dec ebp 12474 00007EAE 74DA jz short lff11m_9 12475 12476 00007EB0 AC lodsb 12477 00007EB1 B280 mov dl, 80h 12478 00007EB3 49 dec ecx 12479 00007EB4 7402 jz short lff11m_2_4 12480 00007EB6 8A16 mov dl, [esi] 12481 lff11m_2_4: 12482 00007EB8 E8E2050000 call interpolating_4_8bit_mono 12483 00007EBD E357 jecxz lff11m_3 12484 00007EBF EBCE jmp short lff11m_1 12485 12486 ; -------------------------------------------------------- 12487 12488 load_11khz_stereo_8_bit: 12489 ; 13/01/2025 (mp3play3.s) 12490 00007EC1 BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 12491 00007EC6 BF[00700500] mov edi, sample_buffer ; wav output buffer 12492 00007ECB 8B0D[60A30000] mov ecx, [loadsize] 12493 ; 13/01/2025 12494 00007ED1 D1E9 shr ecx, 1 ; word count 12495 lff11s_9: 12496 00007ED3 BD06000000 mov ebp, 6 ; interpolation (one step) loop count 12497 lff11s_1: 12498 ; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4 ; 74/17 12499 00007ED8 66AD lodsw 12500 00007EDA 66BA8080 mov dx, 8080h 12501 00007EDE 49 dec ecx 12502 00007EDF 7403 jz short lff11s_2_1 12503 00007EE1 668B16 mov dx, [esi] 12504 lff11s_2_1: 12505 ; al = [previous_val_l] 12506 ; ah = [previous_val_r] 12507 ; dl = [next_val_l] 12508 ; dh = [next_val_r] 12509 00007EE4 E809050000 call interpolating_5_8bit_stereo 12510 00007EE9 E32B jecxz lff11s_3 12511 lff11s_2_2: 12512 00007EEB 66AD lodsw 12513 00007EED 66BA8080 mov dx, 8080h 12514 00007EF1 49 dec ecx 12515 00007EF2 7403 jz short lff11s_2_3 12516 00007EF4 668B16 mov dx, [esi] 12517 lff11s_2_3: 12518 00007EF7 E8E2050000 call interpolating_4_8bit_stereo 12519 00007EFC E318 jecxz lff11s_3 12520 12521 00007EFE 4D dec ebp 12522 00007EFF 74D2 jz short lff11s_9 12523 12524 00007F01 66AD lodsw 12525 00007F03 66BA8080 mov dx, 8080h 12526 00007F07 49 dec ecx 12527 00007F08 7403 jz short lff11s_2_4 12528 00007F0A 668B16 mov dx, [esi] 12529 lff11s_2_4: 12530 00007F0D E8CC050000 call interpolating_4_8bit_stereo 12531 00007F12 E302 jecxz lff11s_3 12532 00007F14 EBC2 jmp short lff11s_1 12533 12534 lff11m_3: 12535 lff11s_3: 12536 00007F16 E927F6FFFF jmp lff11_3 ; padfill 12537 ; (put zeros in the remain words of the buffer) 12538 12539 ; -------------------------------------------------------- 12540 12541 load_11khz_mono_16_bit: 12542 ; 13/01/2025 (mp3play3.s) 12543 00007F1B BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 12544 00007F20 BF[00700500] mov edi, sample_buffer ; wav output buffer 12545 00007F25 8B0D[60A30000] mov ecx, [loadsize] 12546 ; 13/01/2025 12547 00007F2B D1E9 shr ecx, 1 ; word count 12548 lff11m2_9: 12549 00007F2D BD06000000 mov ebp, 6 ; interpolation (one step) loop count 12550 lff11m2_1: 12551 ; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4 ; 74/17 12552 00007F32 66AD lodsw 12553 00007F34 31D2 xor edx, edx 12554 00007F36 49 dec ecx 12555 00007F37 7403 jz short lff11m2_2_1 12556 00007F39 668B16 mov dx, [esi] 12557 lff11m2_2_1: 12558 ; ax = [previous_val] 12559 ; dx = [next_val] 12560 00007F3C E80A060000 call interpolating_5_16bit_mono 12561 00007F41 E327 jecxz lff11m2_3 12562 lff11m2_2_2: 12563 00007F43 66AD lodsw 12564 00007F45 31D2 xor edx, edx 12565 00007F47 49 dec ecx 12566 00007F48 7403 jz short lff11m2_2_3 12567 00007F4A 668B16 mov dx, [esi] 12568 lff11m2_2_3: 12569 00007F4D E823070000 call interpolating_4_16bit_mono 12570 00007F52 E316 jecxz lff11m2_3 12571 12572 00007F54 4D dec ebp 12573 00007F55 74D6 jz short lff11m2_9 12574 12575 00007F57 66AD lodsw 12576 00007F59 31D2 xor edx, edx 12577 00007F5B 49 dec ecx 12578 00007F5C 7403 jz short lff11m2_2_4 12579 00007F5E 668B16 mov dx, [esi] 12580 lff11m2_2_4: 12581 00007F61 E80F070000 call interpolating_4_16bit_mono 12582 00007F66 E302 jecxz lff11m2_3 12583 00007F68 EBC8 jmp short lff11m2_1 12584 12585 lff11m2_3: 12586 00007F6A E9D3F5FFFF jmp lff11_3 ; padfill 12587 ; (put zeros in the remain words of the buffer) 12588 12589 ; -------------------------------------------------------- 12590 12591 load_11khz_stereo_16_bit: 12592 ; 13/01/2025 (mp3play3.s) 12593 00007F6F BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 12594 00007F74 BF[00700500] mov edi, sample_buffer ; wav output buffer 12595 00007F79 8B0D[60A30000] mov ecx, [loadsize] 12596 ; 13/01/2025 12597 00007F7F C1E902 shr ecx, 2 ; dword count 12598 lff11s2_9: 12599 00007F82 BD06000000 mov ebp, 6 ; interpolation (one step) loop count 12600 lff11s2_1: 12601 ; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4 ; 74/17 12602 00007F87 66AD lodsw 12603 00007F89 89C3 mov ebx, eax 12604 00007F8B 66AD lodsw 12605 00007F8D 8B16 mov edx, [esi] 12606 ; 15/01/2025 12607 ;mov [next_val_l], edx 12608 ; 26/11/2023 12609 ;shr edx, 16 12610 ;mov [next_val_r], dx 12611 00007F8F 49 dec ecx 12612 00007F90 7502 jnz short lff11s2_2_1 12613 00007F92 31D2 xor edx, edx ; 0 12614 ;mov [next_val_l], dx 12615 ;mov [next_val_r], dx 12616 lff11s2_2_1: 12617 ; bx = [previous_val_l] 12618 ; ax = [previous_val_r] 12619 ; [next_val_l] 12620 ; dx = [next_val_r] 12621 ;;; 12622 ; 15/01/2025 (BugFix) 12623 00007F94 8915[2F870000] mov [next_val_l], edx 12624 ;;; 12625 00007F9A E807060000 call interpolating_5_16bit_stereo 12626 00007F9F E339 jecxz lff11s2_3 12627 lff11s2_2_2: 12628 00007FA1 66AD lodsw 12629 00007FA3 89C3 mov ebx, eax 12630 00007FA5 66AD lodsw 12631 00007FA7 8B16 mov edx, [esi] 12632 ; 15/01/2025 12633 ;mov [next_val_l], dx 12634 ; 26/11/2023 12635 ;shr edx, 16 12636 ;mov [next_val_r], dx 12637 00007FA9 49 dec ecx 12638 00007FAA 7502 jnz short lff11s2_2_3 12639 00007FAC 31D2 xor edx, edx ; 0 12640 ;mov [next_val_l], dx 12641 ;mov [next_val_r], dx 12642 lff11s2_2_3: 12643 ;;; 12644 ; 15/01/2025 (BugFix) 12645 00007FAE 8915[2F870000] mov [next_val_l], edx 12646 ;;; 12647 00007FB4 E8F5060000 call interpolating_4_16bit_stereo 12648 00007FB9 E31F jecxz lff11s2_3 12649 12650 00007FBB 4D dec ebp 12651 00007FBC 74C4 jz short lff11s2_9 12652 12653 00007FBE 66AD lodsw 12654 00007FC0 89C3 mov ebx, eax 12655 00007FC2 66AD lodsw 12656 00007FC4 8B16 mov edx, [esi] 12657 ; 15/01/2025 12658 ;mov [next_val_l], dx 12659 ; 26/11/2023 12660 ;shr edx, 16 12661 ;mov [next_val_r], dx 12662 00007FC6 49 dec ecx 12663 00007FC7 7502 jnz short lff11s2_2_4 12664 00007FC9 31D2 xor edx, edx ; 0 12665 ;mov [next_val_l], dx 12666 ;mov [next_val_r], dx 12667 lff11s2_2_4: 12668 ;;; 12669 ; 15/01/2025 (BugFix) 12670 00007FCB 8915[2F870000] mov [next_val_l], edx 12671 ;;; 12672 00007FD1 E8D8060000 call interpolating_4_16bit_stereo 12673 00007FD6 E302 jecxz lff11s2_3 12674 00007FD8 EBAD jmp short lff11s2_1 12675 12676 lff11s2_3: 12677 00007FDA E963F5FFFF jmp lff11_3 ; padfill 12678 ; (put zeros in the remain words of the buffer) 12679 12680 ; -------------------------------------------------------- 12681 12682 load_44khz_mono_8_bit: 12683 ; 13/01/2025 (mp3play3.s) 12684 00007FDF BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 12685 00007FE4 BF[00700500] mov edi, sample_buffer ; wav output buffer 12686 00007FE9 8B0D[60A30000] mov ecx, [loadsize] 12687 ; 13/01/2025 12688 lff44m_9: 12689 00007FEF BD0A000000 mov ebp, 10 ; interpolation (one step) loop count 12690 00007FF4 C605[33870000]02 mov byte [faz], 2 ; 2 steps/phases 12691 lff44m_1: 12692 ; 2:1:1:1:1:1:1:1:1:1:1:: ; 25/23 12693 ; 2:1:1:1:1:1:1:1:1:1:1:1 12694 00007FFB AC lodsb 12695 00007FFC B280 mov dl, 80h 12696 00007FFE 49 dec ecx 12697 00007FFF 7402 jz short lff44m_2_1 12698 00008001 8A16 mov dl, [esi] 12699 lff44m_2_1: 12700 ; al = [previous_val] 12701 ; dl = [next_val] 12702 00008003 E863020000 call interpolating_2_8bit_mono 12703 00008008 E320 jecxz lff44m_3 12704 lff44m_2_2: 12705 0000800A AC lodsb 12706 0000800B 2C80 sub al, 80h 12707 0000800D 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 12708 00008011 66AB stosw ; (L) 12709 00008013 66AB stosw ; (R) 12710 12711 00008015 49 dec ecx 12712 00008016 7412 jz short lff44m_3 12713 00008018 4D dec ebp 12714 00008019 75EF jnz short lff44m_2_2 12715 12716 0000801B FE0D[33870000] dec byte [faz] 12717 00008021 74CC jz short lff44m_9 12718 00008023 BD0B000000 mov ebp, 11 12719 00008028 EBD1 jmp short lff44m_1 12720 12721 lff44m_3: 12722 lff44s_3: 12723 0000802A E913F5FFFF jmp lff44_3 ; padfill 12724 ; (put zeros in the remain words of the buffer) 12725 12726 ; -------------------------------------------------------- 12727 12728 load_44khz_stereo_8_bit: 12729 ; 13/01/2025 (mp3play3.s) 12730 0000802F BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 12731 00008034 BF[00700500] mov edi, sample_buffer ; wav output buffer 12732 00008039 8B0D[60A30000] mov ecx, [loadsize] 12733 ; 13/01/2025 12734 0000803F D1E9 shr ecx, 1 ; word count 12735 lff44s_9: 12736 00008041 BD0A000000 mov ebp, 10 ; interpolation (one step) loop count 12737 00008046 C605[33870000]02 mov byte [faz], 2 ; 2 steps/phase 12738 lff44s_1: 12739 ; 2:1:1:1:1:1:1:1:1:1:1:: ; 25/23 12740 ; 2:1:1:1:1:1:1:1:1:1:1:1 12741 0000804D 66AD lodsw 12742 0000804F 66BA8080 mov dx, 8080h 12743 00008053 49 dec ecx 12744 00008054 7403 jz short lff44s_2_1 12745 00008056 668B16 mov dx, [esi] 12746 lff44s_2_1: 12747 ; al = [previous_val_l] 12748 ; ah = [previous_val_r] 12749 ; dl = [next_val_l] 12750 ; dh = [next_val_r] 12751 00008059 E82A020000 call interpolating_2_8bit_stereo 12752 0000805E E3CA jecxz lff44s_3 12753 lff44s_2_2: 12754 00008060 AC lodsb 12755 00008061 2C80 sub al, 80h 12756 00008063 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 12757 00008067 66AB stosw ; (L) 12758 00008069 AC lodsb 12759 0000806A 2C80 sub al, 80h 12760 0000806C 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 12761 00008070 66AB stosw ; (R) 12762 12763 00008072 49 dec ecx 12764 00008073 74B5 jz short lff44s_3 12765 00008075 4D dec ebp 12766 00008076 75E8 jnz short lff44s_2_2 12767 12768 00008078 FE0D[33870000] dec byte [faz] 12769 0000807E 74C1 jz short lff44s_9 12770 00008080 BD0B000000 mov ebp, 11 12771 00008085 EBC6 jmp short lff44s_1 12772 12773 ; -------------------------------------------------------- 12774 12775 load_44khz_mono_16_bit: 12776 ; 13/01/2025 (mp3play3.s) 12777 00008087 BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 12778 0000808C BF[00700500] mov edi, sample_buffer ; wav output buffer 12779 00008091 8B0D[60A30000] mov ecx, [loadsize] 12780 ; 13/01/2025 12781 00008097 D1E9 shr ecx, 1 ; word count 12782 lff44m2_9: 12783 00008099 BD0A000000 mov ebp, 10 ; interpolation (one step) loop count 12784 0000809E C605[33870000]02 mov byte [faz], 2 ; 2 steps/phases 12785 lff44m2_1: 12786 ; 2:1:1:1:1:1:1:1:1:1:1:: ; 25/23 12787 ; 2:1:1:1:1:1:1:1:1:1:1:1 12788 000080A5 66AD lodsw 12789 000080A7 31D2 xor edx, edx 12790 000080A9 49 dec ecx 12791 000080AA 7403 jz short lff44m2_2_1 12792 000080AC 668B16 mov dx, [esi] 12793 lff44m2_2_1: 12794 ; ax = [previous_val] 12795 ; dx = [next_val] 12796 000080AF E898020000 call interpolating_2_16bit_mono 12797 000080B4 E31B jecxz lff44m2_3 12798 lff44m2_2_2: 12799 000080B6 66AD lodsw 12800 000080B8 66AB stosw ; (L)eft Channel 12801 000080BA 66AB stosw ; (R)ight Channel 12802 12803 000080BC 49 dec ecx 12804 000080BD 7412 jz short lff44m2_3 12805 000080BF 4D dec ebp 12806 000080C0 75F4 jnz short lff44m2_2_2 12807 12808 000080C2 FE0D[33870000] dec byte [faz] 12809 000080C8 74CF jz short lff44m2_9 12810 000080CA BD0B000000 mov ebp, 11 12811 000080CF EBD4 jmp short lff44m2_1 12812 12813 lff44m2_3: 12814 lff44s2_3: 12815 000080D1 E96CF4FFFF jmp lff44_3 ; padfill 12816 ; (put zeros in the remain words of the buffer) 12817 12818 ; -------------------------------------------------------- 12819 12820 load_44khz_stereo_16_bit: 12821 ; 13/01/2025 (mp3play3.s) 12822 000080D6 BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 12823 000080DB BF[00700500] mov edi, sample_buffer ; wav output buffer 12824 000080E0 8B0D[60A30000] mov ecx, [loadsize] 12825 ; 13/01/2025 12826 000080E6 C1E902 shr ecx, 2 ; dword count 12827 lff44s2_9: 12828 000080E9 BD0A000000 mov ebp, 10 ; interpolation (one step) loop count 12829 000080EE C605[33870000]02 mov byte [faz], 2 ; 2 steps/phase 12830 lff44s2_1: 12831 ; 2:1:1:1:1:1:1:1:1:1:1:: ; 25/23 12832 ; 2:1:1:1:1:1:1:1:1:1:1:1 12833 000080F5 66AD lodsw 12834 000080F7 89C3 mov ebx, eax 12835 000080F9 66AD lodsw 12836 ;mov dx, [esi] 12837 ;mov [next_val_l], dx 12838 ;mov dx, [esi+2] 12839 ; 26/11/2023 12840 000080FB 8B16 mov edx, [esi] 12841 000080FD 668915[2F870000] mov [next_val_l], dx 12842 00008104 C1EA10 shr edx, 16 12843 00008107 49 dec ecx 12844 00008108 7509 jnz short lff44s2_2_1 12845 0000810A 31D2 xor edx, edx ; 0 12846 0000810C 668915[2F870000] mov [next_val_l], dx 12847 lff44s2_2_1: 12848 ; bx = [previous_val_l] 12849 ; ax = [previous_val_r] 12850 ; [next_val_l] 12851 ; dx = [next_val_r] 12852 00008113 E84C020000 call interpolating_2_16bit_stereo 12853 00008118 E3B7 jecxz lff44s2_3 12854 lff44s2_2_2: 12855 ;movsw ; (L)eft Channel 12856 ;movsw ; (R)ight Channel 12857 0000811A A5 movsd 12858 12859 0000811B 49 dec ecx 12860 0000811C 74B3 jz short lff44s2_3 12861 0000811E 4D dec ebp 12862 0000811F 75F9 jnz short lff44s2_2_2 12863 12864 00008121 FE0D[33870000] dec byte [faz] 12865 00008127 74C0 jz short lff44s2_9 12866 00008129 BD0B000000 mov ebp, 11 12867 0000812E EBC5 jmp short lff44s2_1 12868 12869 ; -------------------------------------------------------- 12870 12871 ; 02/01/2025 12872 load_12khz_mono_8_bit: 12873 00008130 BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 12874 00008135 BF[00700500] mov edi, sample_buffer ; wav output buffer 12875 0000813A 8B0D[60A30000] mov ecx, [loadsize] 12876 lff12m_1: 12877 ; original-interpolated-interpolated-interpolated 12878 00008140 AC lodsb 12879 00008141 B280 mov dl, 80h 12880 00008143 49 dec ecx 12881 00008144 7402 jz short lff12m_2 12882 00008146 8A16 mov dl, [esi] 12883 lff12m_2: 12884 ; al = [previous_val] 12885 ; dl = [next_val] 12886 00008148 E852030000 call interpolating_4_8bit_mono 12887 0000814D E329 jecxz lff12m_3 12888 0000814F EBEF jmp short lff12m_1 12889 12890 ; -------------------------------------------------------- 12891 12892 ; 01/02/2025 12893 load_12khz_stereo_8_bit: 12894 ; 13/01/2025 (mp3play3.s) 12895 00008151 BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 12896 00008156 BF[00700500] mov edi, sample_buffer ; wav output buffer 12897 0000815B 8B0D[60A30000] mov ecx, [loadsize] 12898 00008161 D1E9 shr ecx, 1 ; word count 12899 lff12s_1: 12900 ; original-interpolated-interpolated-interpolated 12901 00008163 66AD lodsw 12902 00008165 66BA8080 mov dx, 8080h 12903 00008169 49 dec ecx 12904 0000816A 7403 jz short lff12s_2 12905 0000816C 668B16 mov dx, [esi] 12906 lff12s_2: 12907 ; al = [previous_val_l] 12908 ; ah = [previous_val_r] 12909 ; dl = [next_val_l] 12910 ; dh = [next_val_r] 12911 0000816F E86A030000 call interpolating_4_8bit_stereo 12912 00008174 E302 jecxz lff12s_3 12913 00008176 EBEB jmp short lff12s_1 12914 12915 lff12m_3: 12916 lff12s_3: 12917 00008178 E9C5F3FFFF jmp lff12_3 ; padfill 12918 ; (put zeros in the remain words of the buffer) 12919 12920 ; -------------------------------------------------------- 12921 12922 ; 01/02/2025 12923 load_12khz_mono_16_bit: 12924 0000817D BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 12925 00008182 BF[00700500] mov edi, sample_buffer ; wav output buffer 12926 00008187 8B0D[60A30000] mov ecx, [loadsize] 12927 0000818D D1E9 shr ecx, 1 ; word count 12928 lff12m2_9: 12929 0000818F BD06000000 mov ebp, 6 ; interpolation (one step) loop count 12930 lff12m2_1: 12931 ; original-interpolated-interpolated-interpolated 12932 00008194 66AD lodsw 12933 00008196 31D2 xor edx, edx 12934 00008198 49 dec ecx 12935 00008199 7403 jz short lff12m2_2 12936 0000819B 668B16 mov dx, [esi] 12937 lff12m2_2: 12938 ; ax = [previous_val] 12939 ; dx = [next_val] 12940 0000819E E8D2040000 call interpolating_4_16bit_mono 12941 000081A3 E3D3 jecxz lff12m_3 12942 000081A5 EBED jmp short lff12m2_1 12943 12944 ; -------------------------------------------------------- 12945 12946 ; 01/02/2025 12947 load_12khz_stereo_16_bit: 12948 000081A7 BE[00500500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 12949 000081AC BF[00700500] mov edi, sample_buffer ; wav output buffer 12950 000081B1 8B0D[60A30000] mov ecx, [loadsize] 12951 000081B7 C1E902 shr ecx, 2 ; dword count 12952 lff12s2_1: 12953 ; original-interpolated-interpolated-interpolated 12954 000081BA 66AD lodsw 12955 000081BC 89C3 mov ebx, eax 12956 000081BE 66AD lodsw 12957 000081C0 8B16 mov edx, [esi] 12958 000081C2 49 dec ecx 12959 000081C3 7502 jnz short lff12s2_2 12960 000081C5 31D2 xor edx, edx ; 0 12961 lff12s2_2: 12962 000081C7 668915[2F870000] mov [next_val_l], dx 12963 000081CE C1EA10 shr edx, 16 12964 000081D1 668915[31870000] mov [next_val_r], dx 12965 ; bx = [previous_val_l] 12966 ; ax = [previous_val_r] 12967 ; [next_val_l] 12968 ; [next_val_r] 12969 000081D8 E8D1040000 call interpolating_4_16bit_stereo 12970 000081DD E399 jecxz lff12s_3 12971 000081DF EBD9 jmp short lff12s2_1 12972 12973 ; -------------------------------------------------------- 12974 12975 interpolating_3_8bit_mono: 12976 ; 01/02/2025 12977 ; 16/11/2023 12978 ; al = [previous_val] 12979 ; dl = [next_val] 12980 ; original-interpolated-interpolated 12981 000081E1 88C3 mov bl, al 12982 000081E3 2C80 sub al, 80h 12983 000081E5 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 12984 000081E9 66AB stosw ; original sample (L) 12985 000081EB 66AB stosw ; original sample (R) 12986 000081ED 88D8 mov al, bl 12987 000081EF 00D0 add al, dl 12988 000081F1 D0D8 rcr al, 1 12989 000081F3 88C7 mov bh, al ; interpolated middle (temporary) 12990 000081F5 00D8 add al, bl 12991 000081F7 D0D8 rcr al, 1 12992 000081F9 2C80 sub al, 80h 12993 000081FB 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 12994 000081FF 66AB stosw ; interpolated sample 1 (L) 12995 00008201 66AB stosw ; interpolated sample 1 (R) 12996 00008203 88F8 mov al, bh 12997 00008205 00D0 add al, dl ; [next_val] 12998 00008207 D0D8 rcr al, 1 12999 ; 01/02/2025 13000 00008209 2C80 sub al, 80h 13001 0000820B 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13002 0000820F 66AB stosw ; interpolated sample 2 (L) 13003 00008211 66AB stosw ; interpolated sample 2 (R) 13004 00008213 C3 retn 13005 13006 interpolating_3_8bit_stereo: 13007 ; 01/02/2025 13008 ; 16/11/2023 13009 ; al = [previous_val_l] 13010 ; ah = [previous_val_r] 13011 ; dl = [next_val_l] 13012 ; dh = [next_val_r] 13013 ; original-interpolated-interpolated 13014 00008214 89C3 mov ebx, eax 13015 00008216 2C80 sub al, 80h 13016 00008218 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13017 0000821C 66AB stosw ; original sample (L) 13018 0000821E 88F8 mov al, bh 13019 00008220 2C80 sub al, 80h 13020 00008222 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13021 00008226 66AB stosw ; original sample (R) 13022 00008228 88D8 mov al, bl 13023 0000822A 00D0 add al, dl ; [next_val_l] 13024 0000822C D0D8 rcr al, 1 13025 0000822E 50 push eax ; * ; al = interpolated middle (L) (temporary) 13026 0000822F 00D8 add al, bl ; [previous_val_l] 13027 00008231 D0D8 rcr al, 1 13028 00008233 2C80 sub al, 80h 13029 00008235 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13030 00008239 66AB stosw ; interpolated sample 1 (L) 13031 0000823B 88F8 mov al, bh 13032 0000823D 00F0 add al, dh ; [next_val_r] 13033 0000823F D0D8 rcr al, 1 13034 00008241 50 push eax ; ** ; al = interpolated middle (R) (temporary) 13035 00008242 00F8 add al, bh ; [previous_val_r] 13036 00008244 D0D8 rcr al, 1 13037 00008246 2C80 sub al, 80h 13038 00008248 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13039 0000824C 66AB stosw ; interpolated sample 1 (R) 13040 0000824E 5B pop ebx ; ** 13041 0000824F 58 pop eax ; * 13042 00008250 00D0 add al, dl ; [next_val_l] 13043 00008252 D0D8 rcr al, 1 13044 ; 01/02/2025 13045 00008254 2C80 sub al, 80h 13046 00008256 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13047 0000825A 66AB stosw ; interpolated sample 2 (L) 13048 0000825C 88D8 mov al, bl 13049 0000825E 00F0 add al, dh ; [next_val_r] 13050 00008260 D0D8 rcr al, 1 13051 ; 01/02/2025 13052 00008262 2C80 sub al, 80h 13053 00008264 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13054 00008268 66AB stosw ; interpolated sample 2 (R) 13055 0000826A C3 retn 13056 13057 interpolating_2_8bit_mono: 13058 ; 16/11/2023 13059 ; al = [previous_val] 13060 ; dl = [next_val] 13061 ; original-interpolated 13062 0000826B 88C3 mov bl, al 13063 0000826D 2C80 sub al, 80h 13064 0000826F 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13065 00008273 66AB stosw ; original sample (L) 13066 00008275 66AB stosw ; original sample (R) 13067 00008277 88D8 mov al, bl 13068 00008279 00D0 add al, dl 13069 0000827B D0D8 rcr al, 1 13070 0000827D 2C80 sub al, 80h 13071 0000827F 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13072 00008283 66AB stosw ; interpolated sample (L) 13073 00008285 66AB stosw ; interpolated sample (R) 13074 00008287 C3 retn 13075 13076 interpolating_2_8bit_stereo: 13077 ; 16/11/2023 13078 ; al = [previous_val_l] 13079 ; ah = [previous_val_r] 13080 ; dl = [next_val_l] 13081 ; dh = [next_val_r] 13082 ; original-interpolated 13083 00008288 89C3 mov ebx, eax 13084 0000828A 2C80 sub al, 80h 13085 0000828C 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13086 00008290 66AB stosw ; original sample (L) 13087 00008292 88F8 mov al, bh 13088 00008294 2C80 sub al, 80h 13089 00008296 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13090 0000829A 66AB stosw ; original sample (R) 13091 0000829C 88D8 mov al, bl ; [previous_val_l] 13092 0000829E 00D0 add al, dl ; [next_val_l] 13093 000082A0 D0D8 rcr al, 1 13094 000082A2 2C80 sub al, 80h 13095 000082A4 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13096 000082A8 66AB stosw ; interpolated sample (L) 13097 000082AA 88F8 mov al, bh 13098 000082AC 00F0 add al, dh ; [next_val_r] 13099 000082AE D0D8 rcr al, 1 13100 000082B0 2C80 sub al, 80h 13101 000082B2 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13102 000082B6 66AB stosw ; interpolated sample (R) 13103 000082B8 C3 retn 13104 13105 interpolating_3_16bit_mono: 13106 ; 16/11/2023 13107 ; ax = [previous_val] 13108 ; dx = [next_val] 13109 ; original-interpolated-interpolated 13110 13111 000082B9 66AB stosw ; original sample (L) 13112 000082BB 66AB stosw ; original sample (R) 13113 000082BD 80C480 add ah, 80h ; convert sound level 0 to 65535 format 13114 000082C0 50 push eax ; * ; [previous_val] 13115 000082C1 80C680 add dh, 80h 13116 000082C4 6601D0 add ax, dx 13117 000082C7 66D1D8 rcr ax, 1 13118 000082CA 5B pop ebx ; * 13119 000082CB 93 xchg ebx, eax ; bx = interpolated middle (temporary) 13120 000082CC 6601D8 add ax, bx ; [previous_val] + interpolated middle 13121 000082CF 66D1D8 rcr ax, 1 13122 000082D2 80EC80 sub ah, 80h ; -32768 to +32767 format again 13123 000082D5 66AB stosw ; interpolated sample 1 (L) 13124 000082D7 66AB stosw ; interpolated sample 1 (R) 13125 000082D9 89D8 mov eax, ebx 13126 000082DB 6601D0 add ax, dx ; interpolated middle + [next_val] 13127 000082DE 66D1D8 rcr ax, 1 13128 000082E1 80EC80 sub ah, 80h ; -32768 to +32767 format again 13129 000082E4 66AB stosw ; interpolated sample 2 (L) 13130 000082E6 66AB stosw ; interpolated sample 2 (R) 13131 000082E8 C3 retn 13132 13133 interpolating_3_16bit_stereo: 13134 ; 16/11/2023 13135 ; bx = [previous_val_l] 13136 ; ax = [previous_val_r] 13137 ; [next_val_l] 13138 ; dx = [next_val_r] 13139 ; original-interpolated-interpolated 13140 13141 000082E9 93 xchg eax, ebx 13142 000082EA 66AB stosw ; original sample (L) 13143 000082EC 93 xchg eax, ebx 13144 000082ED 66AB stosw ; original sample (R) 13145 000082EF 80C480 add ah, 80h ; convert sound level 0 to 65535 format 13146 000082F2 50 push eax ; * ; [previous_val_r] 13147 000082F3 80C780 add bh, 80h 13148 000082F6 8005[30870000]80 add byte [next_val_l+1], 80h 13149 000082FD 66A1[2F870000] mov ax, [next_val_l] 13150 00008303 6601D8 add ax, bx ; [previous_val_l] 13151 00008306 66D1D8 rcr ax, 1 13152 00008309 93 xchg eax, ebx ; ax = [previous_val_l] 13153 0000830A 6601D8 add ax, bx ; bx = interpolated middle (L) 13154 0000830D 66D1D8 rcr ax, 1 13155 00008310 80EC80 sub ah, 80h ; -32768 to +32767 format again 13156 00008313 66AB stosw ; interpolated sample 1 (L) 13157 00008315 58 pop eax ; * 13158 00008316 80C680 add dh, 80h ; convert sound level 0 to 65535 format 13159 00008319 52 push edx ; * ; [next_val_r] 13160 0000831A 92 xchg eax, edx 13161 0000831B 6601D0 add ax, dx ; [next_val_r] + [previous_val_r] 13162 0000831E 66D1D8 rcr ax, 1 ; / 2 13163 00008321 50 push eax ; ** ; interpolated middle (R) 13164 00008322 6601D0 add ax, dx ; + [previous_val_r] 13165 00008325 66D1D8 rcr ax, 1 13166 00008328 80EC80 sub ah, 80h ; -32768 to +32767 format again 13167 0000832B 66AB stosw ; interpolated sample 1 (R) 13168 0000832D 66A1[2F870000] mov ax, [next_val_l] 13169 00008333 6601D8 add ax, bx ; + interpolated middle (L) 13170 00008336 66D1D8 rcr ax, 1 13171 00008339 80EC80 sub ah, 80h ; -32768 to +32767 format again 13172 0000833C 66AB stosw ; interpolated sample 2 (L) 13173 0000833E 58 pop eax ; ** 13174 0000833F 5A pop edx ; * 13175 00008340 6601D0 add ax, dx ; interpolated middle + [next_val_r] 13176 00008343 66D1D8 rcr ax, 1 ; / 2 13177 00008346 80EC80 sub ah, 80h ; -32768 to +32767 format again 13178 00008349 66AB stosw ; interpolated sample 2 (L) 13179 0000834B C3 retn 13180 13181 interpolating_2_16bit_mono: 13182 ; 16/11/2023 13183 ; ax = [previous_val] 13184 ; dx = [next_val] 13185 ; original-interpolated 13186 13187 0000834C 66AB stosw ; original sample (L) 13188 0000834E 66AB stosw ; original sample (R) 13189 00008350 80C480 add ah, 80h ; convert sound level 0 to 65535 format 13190 00008353 80C680 add dh, 80h 13191 00008356 6601D0 add ax, dx 13192 00008359 66D1D8 rcr ax, 1 13193 0000835C 80EC80 sub ah, 80h ; -32768 to +32767 format again 13194 0000835F 66AB stosw ; interpolated sample (L) 13195 00008361 66AB stosw ; interpolated sample (R) 13196 00008363 C3 retn 13197 13198 interpolating_2_16bit_stereo: 13199 ; 16/11/2023 13200 ; bx = [previous_val_l] 13201 ; ax = [previous_val_r] 13202 ; [next_val_l] 13203 ; dx = [next_val_r] 13204 ; original-interpolated 13205 13206 00008364 93 xchg eax, ebx 13207 00008365 66AB stosw ; original sample (L) 13208 00008367 93 xchg eax, ebx 13209 00008368 66AB stosw ; original sample (R) 13210 0000836A 80C480 add ah, 80h ; convert sound level 0 to 65535 format 13211 0000836D 80C680 add dh, 80h 13212 00008370 6601D0 add ax, dx ; [previous_val_r] + [next_val_r] 13213 00008373 66D1D8 rcr ax, 1 ; / 2 13214 ; 14/01/2025 13215 00008376 80EC80 sub ah, 80h ; -32768 to +32767 format again 13216 ;push eax ; * ; interpolated sample (R) 13217 ; 14/01/2025 13218 00008379 C1E010 shl eax, 16 13219 0000837C 66A1[2F870000] mov ax, [next_val_l] 13220 00008382 80C480 add ah, 80h 13221 00008385 80C780 add bh, 80h 13222 00008388 6601D8 add ax, bx ; [next_val_l] + [previous_val_l] 13223 0000838B 66D1D8 rcr ax, 1 ; / 2 13224 0000838E 80EC80 sub ah, 80h ; -32768 to +32767 format again 13225 ; 14/01/2025 13226 ;stosw ; interpolated sample (L) 13227 ;pop eax ; * 13228 ;sub ah, 80h ; -32768 to +32767 format again 13229 ;stosw ; interpolated sample (R) 13230 ; 14/01/2025 13231 00008391 AB stosd 13232 00008392 C3 retn 13233 13234 interpolating_5_8bit_mono: 13235 ; 17/11/2023 13236 ; al = [previous_val] 13237 ; dl = [next_val] 13238 ; original-interpltd-interpltd-interpltd-interpltd 13239 00008393 88C3 mov bl, al 13240 00008395 2C80 sub al, 80h 13241 00008397 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13242 0000839B 66AB stosw ; original sample (L) 13243 0000839D 66AB stosw ; original sample (R) 13244 0000839F 88D8 mov al, bl 13245 000083A1 00D0 add al, dl 13246 000083A3 D0D8 rcr al, 1 13247 000083A5 88C7 mov bh, al ; interpolated middle (temporary) 13248 000083A7 00D8 add al, bl ; [previous_val] 13249 000083A9 D0D8 rcr al, 1 13250 000083AB 88C6 mov dh, al ; interpolated 1st quarter (temporary) 13251 000083AD 00D8 add al, bl 13252 000083AF D0D8 rcr al, 1 13253 000083B1 2C80 sub al, 80h 13254 000083B3 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13255 000083B7 66AB stosw ; interpolated sample 1 (L) 13256 000083B9 66AB stosw ; interpolated sample 1 (R) 13257 000083BB 88F8 mov al, bh 13258 000083BD 00F0 add al, dh 13259 000083BF D0D8 rcr al, 1 13260 000083C1 2C80 sub al, 80h 13261 000083C3 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13262 000083C7 66AB stosw ; interpolated sample 2 (L) 13263 000083C9 66AB stosw ; interpolated sample 2 (R) 13264 000083CB 88F8 mov al, bh 13265 000083CD 00D0 add al, dl ; [next_val] 13266 000083CF D0D8 rcr al, 1 13267 000083D1 88C6 mov dh, al ; interpolated 3rd quarter (temporary) 13268 000083D3 00F8 add al, bh 13269 000083D5 D0D8 rcr al, 1 13270 000083D7 2C80 sub al, 80h 13271 000083D9 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13272 000083DD 66AB stosw ; interpolated sample 3 (L) 13273 000083DF 66AB stosw ; interpolated sample 3 (R) 13274 000083E1 88F0 mov al, dh 13275 000083E3 00D0 add al, dl 13276 000083E5 D0D8 rcr al, 1 13277 000083E7 2C80 sub al, 80h 13278 000083E9 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13279 000083ED 66AB stosw ; interpolated sample 4 (L) 13280 000083EF 66AB stosw ; interpolated sample 4 (R) 13281 000083F1 C3 retn 13282 13283 interpolating_5_8bit_stereo: 13284 ; 17/11/2023 13285 ; al = [previous_val_l] 13286 ; ah = [previous_val_r] 13287 ; dl = [next_val_l] 13288 ; dh = [next_val_r] 13289 ; original-interpltd-interpltd-interpltd-interpltd 13290 000083F2 89C3 mov ebx, eax 13291 000083F4 2C80 sub al, 80h 13292 000083F6 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13293 000083FA 66AB stosw ; original sample (L) 13294 000083FC 88F8 mov al, bh 13295 000083FE 2C80 sub al, 80h 13296 00008400 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13297 00008404 66AB stosw ; original sample (R) 13298 00008406 52 push edx ; * 13299 00008407 88D8 mov al, bl 13300 00008409 00D0 add al, dl ; [next_val_l] 13301 0000840B D0D8 rcr al, 1 13302 0000840D 50 push eax ; ** ; al = interpolated middle (L) (temporary) 13303 0000840E 00D8 add al, bl ; [previous_val_l] 13304 00008410 D0D8 rcr al, 1 13305 00008412 86D8 xchg al, bl 13306 00008414 00D8 add al, bl ; bl = interpolated 1st quarter (L) (temp) 13307 00008416 D0D8 rcr al, 1 13308 00008418 2C80 sub al, 80h 13309 0000841A 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13310 0000841E 66AB stosw ; interpolated sample 1 (L) 13311 00008420 88F8 mov al, bh 13312 00008422 00F0 add al, dh ; [next_val_r] 13313 00008424 D0D8 rcr al, 1 13314 00008426 50 push eax ; *** ; al = interpolated middle (R) (temporary) 13315 00008427 00F8 add al, bh ; [previous_val_r] 13316 00008429 D0D8 rcr al, 1 13317 0000842B 86F8 xchg al, bh 13318 0000842D 00F8 add al, bh ; bh = interpolated 1st quarter (R) (temp) 13319 0000842F D0D8 rcr al, 1 13320 00008431 2C80 sub al, 80h 13321 00008433 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13322 00008437 66AB stosw ; interpolated sample 1 (R) 13323 00008439 5A pop edx ; *** 13324 0000843A 58 pop eax ; ** ; al = interpolated middle (L) (temporary) 13325 0000843B 86D8 xchg al, bl ; al = interpolated 1st quarter (L) (temp) 13326 0000843D 00D8 add al, bl ; bl = interpolated middle (L) (temporary) 13327 0000843F D0D8 rcr al, 1 13328 00008441 2C80 sub al, 80h 13329 00008443 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13330 00008447 66AB stosw ; interpolated sample 2 (L) 13331 00008449 88D0 mov al, dl ; interpolated middle (R) (temporary) 13332 0000844B 86F8 xchg al, bh ; al = interpolated 1st quarter (R) (temp) 13333 0000844D 00F8 add al, bh ; bh = interpolated middle (R) (temporary) 13334 0000844F D0D8 rcr al, 1 13335 00008451 2C80 sub al, 80h 13336 00008453 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13337 00008457 66AB stosw ; interpolated sample 2 (R) 13338 00008459 5A pop edx ; * 13339 0000845A 88D8 mov al, bl ; interpolated middle (L) (temporary) 13340 0000845C 00D0 add al, dl ; [next_val_l] 13341 0000845E D0D8 rcr al, 1 13342 00008460 86D8 xchg al, bl ; al = interpolated middle (R) (temporary) 13343 00008462 00D8 add al, bl ; bl = interpolated 3rd quarter (L) (temp) 13344 00008464 D0D8 rcr al, 1 13345 00008466 2C80 sub al, 80h 13346 00008468 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13347 0000846C 66AB stosw ; interpolated sample 3 (L) 13348 0000846E 88F8 mov al, bh 13349 00008470 00F0 add al, dh ; interpolated middle (R) + [next_val_r] 13350 00008472 D0D8 rcr al, 1 13351 00008474 86F8 xchg al, bh ; al = interpolated middle (R) 13352 00008476 00F8 add al, bh ; bh = interpolated 3rd quarter (R) (temp) 13353 00008478 D0D8 rcr al, 1 13354 0000847A 2C80 sub al, 80h 13355 0000847C 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13356 00008480 66AB stosw ; interpolated sample 3 (R) 13357 00008482 88D8 mov al, bl 13358 00008484 00D0 add al, dl ; [next_val_l] 13359 00008486 D0D8 rcr al, 1 13360 00008488 2C80 sub al, 80h 13361 0000848A 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13362 0000848E 66AB stosw ; interpolated sample 4 (L) 13363 00008490 88F8 mov al, bh 13364 00008492 00F0 add al, dh ; [next_val_r] 13365 00008494 D0D8 rcr al, 1 13366 00008496 2C80 sub al, 80h 13367 00008498 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13368 0000849C 66AB stosw ; interpolated sample 4 (R) 13369 0000849E C3 retn 13370 13371 interpolating_4_8bit_mono: 13372 ; 17/11/2023 13373 ; al = [previous_val] 13374 ; dl = [next_val] 13375 ; original-interpolated-interpolated-interpolated 13376 0000849F 88C3 mov bl, al 13377 000084A1 2C80 sub al, 80h 13378 000084A3 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13379 000084A7 66AB stosw ; original sample (L) 13380 000084A9 66AB stosw ; original sample (R) 13381 000084AB 88D8 mov al, bl 13382 000084AD 00D0 add al, dl 13383 000084AF D0D8 rcr al, 1 13384 000084B1 86D8 xchg al, bl ; al = [previous_val] 13385 000084B3 00D8 add al, bl ; bl = interpolated middle (sample 2) 13386 000084B5 D0D8 rcr al, 1 13387 000084B7 2C80 sub al, 80h 13388 000084B9 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13389 000084BD 66AB stosw ; interpolated sample 1 (L) 13390 000084BF 66AB stosw ; interpolated sample 1 (R) 13391 000084C1 88D8 mov al, bl ; interpolated middle (sample 2) 13392 000084C3 2C80 sub al, 80h 13393 000084C5 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13394 000084C9 66AB stosw ; interpolated sample 2 (L) 13395 000084CB 66AB stosw ; interpolated sample 2 (R) 13396 000084CD 88D8 mov al, bl 13397 000084CF 00D0 add al, dl ; [next_val] 13398 000084D1 D0D8 rcr al, 1 13399 000084D3 2C80 sub al, 80h 13400 000084D5 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13401 000084D9 66AB stosw ; interpolated sample 3 (L) 13402 000084DB 66AB stosw ; interpolated sample 3 (R) 13403 000084DD C3 retn 13404 13405 interpolating_4_8bit_stereo: 13406 ; 17/11/2023 13407 ; al = [previous_val_l] 13408 ; ah = [previous_val_r] 13409 ; dl = [next_val_l] 13410 ; dh = [next_val_r] 13411 ; original-interpolated-interpolated-interpolated 13412 000084DE 89C3 mov ebx, eax 13413 000084E0 2C80 sub al, 80h 13414 000084E2 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13415 000084E6 66AB stosw ; original sample (L) 13416 000084E8 88F8 mov al, bh 13417 000084EA 2C80 sub al, 80h 13418 000084EC 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13419 000084F0 66AB stosw ; original sample (R) 13420 000084F2 88D8 mov al, bl 13421 000084F4 00D0 add al, dl ; [next_val_l] 13422 000084F6 D0D8 rcr al, 1 13423 000084F8 86D8 xchg al, bl ; al = [previous_val_l] 13424 000084FA 00D8 add al, bl ; bl = interpolated middle (L) (sample 2) 13425 000084FC D0D8 rcr al, 1 13426 000084FE 2C80 sub al, 80h 13427 00008500 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13428 00008504 66AB stosw ; interpolated sample 1 (L) 13429 00008506 88F8 mov al, bh 13430 00008508 00F0 add al, dh ; [next_val_r] 13431 0000850A D0D8 rcr al, 1 13432 0000850C 86F8 xchg al, bh ; al = [previous_val_h] 13433 0000850E 00F8 add al, bh ; bh = interpolated middle (R) (sample 2) 13434 00008510 D0D8 rcr al, 1 13435 00008512 2C80 sub al, 80h 13436 00008514 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13437 00008518 66AB stosw ; interpolated sample 1 (R) 13438 0000851A 88D8 mov al, bl ; interpolated middle (L) (sample 2) 13439 0000851C 2C80 sub al, 80h 13440 0000851E 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13441 00008522 66AB stosw ; interpolated sample 2 (L) 13442 00008524 88F8 mov al, bh ; interpolated middle (L) (sample 2) 13443 00008526 2C80 sub al, 80h 13444 00008528 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13445 0000852C 66AB stosw ; interpolated sample 2 (L) 13446 0000852E 88D8 mov al, bl 13447 00008530 00D0 add al, dl ; [next_val_l] 13448 00008532 D0D8 rcr al, 1 13449 00008534 2C80 sub al, 80h 13450 00008536 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13451 0000853A 66AB stosw ; interpolated sample 3 (L) 13452 0000853C 88F8 mov al, bh 13453 0000853E 00F0 add al, dh ; [next_val_r] 13454 00008540 D0D8 rcr al, 1 13455 00008542 2C80 sub al, 80h 13456 00008544 66C1E008 shl ax, 8 ; convert 8 bit sample to 16 bit sample 13457 00008548 66AB stosw ; interpolated sample 3 (R) 13458 0000854A C3 retn 13459 13460 interpolating_5_16bit_mono: 13461 ; 18/11/2023 13462 ; ax = [previous_val] 13463 ; dx = [next_val] 13464 ; original-interpltd-interpltd-interpltd-interpltd 13465 0000854B 66AB stosw ; original sample (L) 13466 0000854D 66AB stosw ; original sample (R) 13467 0000854F 80C480 add ah, 80h ; convert sound level 0 to 65535 format 13468 00008552 89C3 mov ebx, eax ; [previous_val] 13469 00008554 80C680 add dh, 80h 13470 00008557 6601D0 add ax, dx 13471 0000855A 66D1D8 rcr ax, 1 13472 0000855D 50 push eax ; * ; interpolated middle (temporary) 13473 0000855E 6601D8 add ax, bx ; interpolated middle + [previous_val] 13474 00008561 66D1D8 rcr ax, 1 13475 00008564 50 push eax ; ** ; interpolated 1st quarter (temporary) 13476 00008565 6601D8 add ax, bx ; 1st quarter + [previous_val] 13477 00008568 66D1D8 rcr ax, 1 13478 0000856B 80EC80 sub ah, 80h ; -32768 to +32767 format again 13479 0000856E 66AB stosw ; interpolated sample 1 (L) 13480 00008570 66AB stosw ; interpolated sample 1 (R) 13481 00008572 58 pop eax ; ** 13482 00008573 5B pop ebx ; * 13483 00008574 6601D8 add ax, bx ; 1st quarter + middle 13484 00008577 66D1D8 rcr ax, 1 ; / 2 13485 0000857A 80EC80 sub ah, 80h ; -32768 to +32767 format again 13486 0000857D 66AB stosw ; interpolated sample 2 (L) 13487 0000857F 66AB stosw ; interpolated sample 2 (R) 13488 00008581 89D8 mov eax, ebx 13489 00008583 6601D0 add ax, dx ; interpolated middle + [next_val] 13490 00008586 66D1D8 rcr ax, 1 13491 00008589 50 push eax ; * ; interpolated 3rd quarter (temporary) 13492 0000858A 6601D8 add ax, bx ; + interpolated middle 13493 0000858D 66D1D8 rcr ax, 1 13494 00008590 80EC80 sub ah, 80h ; -32768 to +32767 format again 13495 00008593 66AB stosw ; interpolated sample 3 (L) 13496 00008595 66AB stosw ; interpolated sample 3 (R) 13497 00008597 58 pop eax ; * 13498 00008598 6601D0 add ax, dx ; 3rd quarter + [next_val] 13499 0000859B 66D1D8 rcr ax, 1 ; / 2 13500 0000859E 80EC80 sub ah, 80h ; -32768 to +32767 format again 13501 000085A1 66AB stosw ; interpolated sample 4 (L) 13502 000085A3 66AB stosw ; interpolated sample 4 (R) 13503 000085A5 C3 retn 13504 13505 interpolating_5_16bit_stereo: 13506 ; 18/11/2023 13507 ; bx = [previous_val_l] 13508 ; ax = [previous_val_r] 13509 ; [next_val_l] 13510 ; [next_val_r] 13511 ; original-interpltd-interpltd-interpltd-interpltd 13512 000085A6 51 push ecx ; ! 13513 000085A7 93 xchg eax, ebx 13514 000085A8 66AB stosw ; original sample (L) 13515 000085AA 93 xchg eax, ebx 13516 000085AB 66AB stosw ; original sample (R) 13517 000085AD 80C480 add ah, 80h ; convert sound level 0 to 65535 format 13518 000085B0 50 push eax ; * ; [previous_val_r] 13519 000085B1 80C780 add bh, 80h 13520 000085B4 8005[30870000]80 add byte [next_val_l+1], 80h 13521 000085BB 66A1[2F870000] mov ax, [next_val_l] 13522 000085C1 6601D8 add ax, bx ; [previous_val_l] 13523 000085C4 66D1D8 rcr ax, 1 13524 000085C7 89C1 mov ecx, eax ; interpolated middle (L) 13525 000085C9 6601D8 add ax, bx 13526 000085CC 66D1D8 rcr ax, 1 13527 000085CF 89C2 mov edx, eax ; interpolated 1st quarter (L) 13528 000085D1 6601D8 add ax, bx ; [previous_val_l] 13529 000085D4 66D1D8 rcr ax, 1 13530 000085D7 80EC80 sub ah, 80h ; -32768 to +32767 format again 13531 000085DA 66AB stosw ; interpolated sample 1 (L) 13532 000085DC 89C8 mov eax, ecx 13533 000085DE 6601D0 add ax, dx ; middle (L) + 1st quarter (L) 13534 000085E1 66D1D8 rcr ax, 1 ; / 2 13535 000085E4 89C3 mov ebx, eax ; interpolated sample 2 (L) 13536 000085E6 5A pop edx ; * ; [previous_val_r] 13537 000085E7 89D0 mov eax, edx 13538 000085E9 8005[32870000]80 add byte [next_val_r+1], 80h 13539 000085F0 660305[31870000] add ax, [next_val_r] 13540 000085F7 66D1D8 rcr ax, 1 13541 000085FA 50 push eax ; * ; interpolated middle (R) 13542 000085FB 6601D0 add ax, dx 13543 000085FE 66D1D8 rcr ax, 1 13544 00008601 50 push eax ; ** ; interpolated 1st quarter (R) 13545 00008602 6601D0 add ax, dx ; [previous_val_r] 13546 00008605 66D1D8 rcr ax, 1 13547 00008608 80EC80 sub ah, 80h ; -32768 to +32767 format again 13548 0000860B 66AB stosw ; interpolated sample 1 (R) 13549 0000860D 89D8 mov eax, ebx 13550 0000860F 80EC80 sub ah, 80h ; -32768 to +32767 format again 13551 00008612 66AB stosw ; interpolated sample 2 (L) 13552 00008614 58 pop eax ; ** 13553 00008615 5A pop edx ; * 13554 00008616 6601D0 add ax, dx ; 1st quarter (R) + middle (R) 13555 00008619 66D1D8 rcr ax, 1 ; / 2 13556 0000861C 80EC80 sub ah, 80h ; -32768 to +32767 format again 13557 0000861F 66AB stosw ; interpolated sample 2 (R) 13558 00008621 89C8 mov eax, ecx 13559 00008623 660305[2F870000] add ax, [next_val_l] 13560 0000862A 66D1D8 rcr ax, 1 13561 0000862D 50 push eax ; * ; interpolated 3rd quarter (L) 13562 0000862E 6601C8 add ax, cx ; interpolated middle (L) 13563 00008631 66D1D8 rcr ax, 1 13564 00008634 80EC80 sub ah, 80h ; -32768 to +32767 format again 13565 00008637 66AB stosw ; interpolated sample 3 (L) 13566 00008639 89D0 mov eax, edx 13567 0000863B 660305[31870000] add ax, [next_val_r] 13568 00008642 66D1D8 rcr ax, 1 13569 00008645 50 push eax ; ** ; interpolated 3rd quarter (R) 13570 00008646 6601D0 add ax, dx ; interpolated middle (R) 13571 00008649 66D1D8 rcr ax, 1 13572 0000864C 80EC80 sub ah, 80h ; -32768 to +32767 format again 13573 0000864F 66AB stosw ; interpolated sample 3 (R) 13574 00008651 5B pop ebx ; ** 13575 00008652 58 pop eax ; * 13576 00008653 660305[2F870000] add ax, [next_val_l] 13577 0000865A 66D1D8 rcr ax, 1 13578 0000865D 80EC80 sub ah, 80h ; -32768 to +32767 format again 13579 00008660 66AB stosw ; interpolated sample 4 (L) 13580 00008662 89D8 mov eax, ebx 13581 00008664 660305[31870000] add ax, [next_val_r] 13582 0000866B 66D1D8 rcr ax, 1 13583 0000866E 80EC80 sub ah, 80h ; -32768 to +32767 format again 13584 00008671 66AB stosw ; interpolated sample 4 (R) 13585 00008673 59 pop ecx ; ! 13586 00008674 C3 retn 13587 13588 interpolating_4_16bit_mono: 13589 ; 18/11/2023 13590 ; ax = [previous_val] 13591 ; dx = [next_val] 13592 ; 01/02/2025 13593 ; original-interpolated-interpolated-interpolated 13594 13595 00008675 66AB stosw ; original sample (L) 13596 00008677 66AB stosw ; original sample (R) 13597 00008679 80C480 add ah, 80h ; convert sound level 0 to 65535 format 13598 0000867C 89C3 mov ebx, eax ; [previous_val] 13599 0000867E 80C680 add dh, 80h 13600 00008681 6601D0 add ax, dx ; [previous_val] + [next_val] 13601 00008684 66D1D8 rcr ax, 1 13602 00008687 93 xchg eax, ebx 13603 00008688 6601D8 add ax, bx ; [previous_val] + interpolated middle 13604 0000868B 66D1D8 rcr ax, 1 13605 0000868E 80EC80 sub ah, 80h ; -32768 to +32767 format again 13606 00008691 66AB stosw ; interpolated sample 1 (L) 13607 00008693 66AB stosw ; interpolated sample 1 (R) 13608 00008695 89D8 mov eax, ebx ; interpolated middle 13609 00008697 80EC80 sub ah, 80h ; -32768 to +32767 format again 13610 0000869A 66AB stosw ; interpolated sample 2 (L) 13611 0000869C 66AB stosw ; interpolated sample 2 (R) 13612 0000869E 89D8 mov eax, ebx 13613 000086A0 6601D0 add ax, dx ; interpolated middle + [next_val] 13614 000086A3 66D1D8 rcr ax, 1 13615 000086A6 80EC80 sub ah, 80h ; -32768 to +32767 format again 13616 000086A9 66AB stosw ; interpolated sample 3 (L) 13617 000086AB 66AB stosw ; interpolated sample 3 (R) 13618 000086AD C3 retn 13619 13620 interpolating_4_16bit_stereo: 13621 ; 18/11/2023 13622 ; bx = [previous_val_l] 13623 ; ax = [previous_val_r] 13624 ; [next_val_l] 13625 ; [next_val_r] 13626 ; original-interpolated-interpolated-interpolated 13627 000086AE 93 xchg eax, ebx 13628 000086AF 66AB stosw ; original sample (L) 13629 000086B1 93 xchg eax, ebx 13630 000086B2 66AB stosw ; original sample (R) 13631 000086B4 80C480 add ah, 80h ; convert sound level 0 to 65535 format 13632 000086B7 89C2 mov edx, eax ; [previous_val_r] 13633 000086B9 80C780 add bh, 80h 13634 000086BC 8005[30870000]80 add byte [next_val_l+1], 80h 13635 000086C3 66A1[2F870000] mov ax, [next_val_l] 13636 000086C9 6601D8 add ax, bx ; [previous_val_l] 13637 000086CC 66D1D8 rcr ax, 1 13638 000086CF 93 xchg eax, ebx 13639 000086D0 6601D8 add ax, bx ; bx = interpolated middle (L) 13640 000086D3 66D1D8 rcr ax, 1 13641 000086D6 80EC80 sub ah, 80h ; -32768 to +32767 format again 13642 000086D9 66AB stosw ; interpolated sample 1 (L) 13643 000086DB 8005[32870000]80 add byte [next_val_r+1], 80h 13644 000086E2 89D0 mov eax, edx ; [previous_val_r] 13645 000086E4 660305[31870000] add ax, [next_val_r] 13646 000086EB 66D1D8 rcr ax, 1 13647 000086EE 92 xchg eax, edx 13648 000086EF 6601D0 add ax, dx ; dx = interpolated middle (R) 13649 000086F2 66D1D8 rcr ax, 1 13650 000086F5 80EC80 sub ah, 80h ; -32768 to +32767 format again 13651 000086F8 66AB stosw ; interpolated sample 1 (R) 13652 000086FA 89D8 mov eax, ebx 13653 000086FC 80EC80 sub ah, 80h ; -32768 to +32767 format again 13654 000086FF 66AB stosw ; interpolated sample 2 (L) 13655 00008701 89D0 mov eax, edx 13656 00008703 80EC80 sub ah, 80h ; -32768 to +32767 format again 13657 00008706 66AB stosw ; interpolated sample 2 (R) 13658 00008708 89D8 mov eax, ebx 13659 0000870A 660305[2F870000] add ax, [next_val_l] 13660 00008711 66D1D8 rcr ax, 1 13661 00008714 80EC80 sub ah, 80h ; -32768 to +32767 format again 13662 00008717 66AB stosw ; interpolated sample 3 (L) 13663 00008719 89D0 mov eax, edx 13664 0000871B 660305[31870000] add ax, [next_val_r] 13665 00008722 66D1D8 rcr ax, 1 13666 00008725 80EC80 sub ah, 80h ; -32768 to +32767 format again 13667 00008728 66AB stosw ; interpolated sample 3 (R) 13668 0000872A C3 retn 13669 13670 ; 13/11/2023 13671 previous_val: 13672 0000872B 0000 previous_val_l: dw 0 13673 0000872D 0000 previous_val_r: dw 0 13674 next_val: 13675 0000872F 0000 next_val_l: dw 0 13676 00008731 0000 next_val_r: dw 0 13677 13678 ; 16/11/2023 13679 00008733 00 faz: db 0 13680 13681 ; --------------------------------------------------------------------------- 13682 ; 12/01/2025- Hardware Info display/write procedures. 13683 ; --------------------------------------------------------------------------- 13684 ; ref: playwav9.s (18/12/2024) - sb16play.s (20/12/2024) 13685 13686 ; 12/01/2025 13687 write_audio_dev_info: 13688 00008734 803D[50A30000]02 cmp byte [audio_hardware], 2 13689 0000873B 7203 jb short write_sb16_dev_info ; SB16 13690 0000873D 745A je short write_ac97_pci_dev_info ; AC97 13691 0000873F C3 retn 13692 13693 ; 20/12/2024 (playwavx.s, sb16play.s) 13694 write_sb16_dev_info: 13695 ; 27/11/2024 13696 ; 24/11/2024 (sb16play.asm) 13697 13698 00008740 A1[48A30000] mov eax, [audio_io_base] 13699 00008745 31DB xor ebx, ebx 13700 00008747 88C3 mov bl, al 13701 00008749 88DA mov dl, bl 13702 0000874B 80E30F and bl, 0Fh 13703 0000874E 8A83[AF8A0000] mov al, [ebx+hex_chars] 13704 00008754 A2[C28B0000] mov [msgBasePort+2], al 13705 00008759 88D3 mov bl, dl 13706 0000875B C0EB04 shr bl, 4 13707 0000875E 8A83[AF8A0000] mov al, [ebx+hex_chars] 13708 00008764 A2[C18B0000] mov [msgBasePort+1], al 13709 00008769 88E3 mov bl, ah 13710 ;and bl, 0Fh 13711 0000876B 8A83[AF8A0000] mov al, [ebx+hex_chars] 13712 00008771 A2[C08B0000] mov [msgBasePort], al 13713 13714 ;xor eax, eax 13715 ; 27/11/2024 13716 00008776 A0[4CA30000] mov al, [audio_intr] 13717 ;mov cl, 10 13718 ;div cl 13719 ;add ah, 30h 13720 ;mov [msgIRQnum], ah 13721 ; 25/11/2024 13722 0000877B 0430 add al, 30h 13723 0000877D A2[D78B0000] mov [msgIRQnum], al ; 12/01/2025 13724 13725 ; 12/01/2025 13726 ; 20/12/2024 13727 sys _msg, msgSB16Info, 255, 07h 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00008782 BB[8A8B0000] <1> mov ebx, %2 125 <1> %if %0 >= 3 126 00008787 B9FF000000 <1> mov ecx, %3 127 <1> %if %0 = 4 128 0000878C BA07000000 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00008791 B823000000 <1> mov eax, %1 133 <1> 134 00008796 CD40 <1> int 40h 13728 13729 00008798 C3 retn 13730 13731 write_ac97_pci_dev_info: 13732 ; 19/11/2024 13733 ; 30/05/2024 13734 ; 06/06/2017 13735 ; 03/06/2017 13736 ; BUS/DEV/FN 13737 ; 00000000BBBBBBBBDDDDDFFF00000000 13738 ; DEV/VENDOR 13739 ; DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV 13740 13741 00008799 A1[40A30000] mov eax, [dev_vendor] 13742 0000879E 31DB xor ebx, ebx 13743 000087A0 88C3 mov bl, al 13744 000087A2 88DA mov dl, bl 13745 000087A4 80E30F and bl, 0Fh 13746 000087A7 8A83[AF8A0000] mov al, [ebx+hex_chars] 13747 000087AD A2[F68A0000] mov [msgVendorId+3], al 13748 000087B2 88D3 mov bl, dl 13749 000087B4 C0EB04 shr bl, 4 13750 000087B7 8A83[AF8A0000] mov al, [ebx+hex_chars] 13751 000087BD A2[F58A0000] mov [msgVendorId+2], al 13752 000087C2 88E3 mov bl, ah 13753 000087C4 88DA mov dl, bl 13754 000087C6 80E30F and bl, 0Fh 13755 000087C9 8A83[AF8A0000] mov al, [ebx+hex_chars] 13756 000087CF A2[F48A0000] mov [msgVendorId+1], al 13757 000087D4 88D3 mov bl, dl 13758 000087D6 C0EB04 shr bl, 4 13759 000087D9 8A83[AF8A0000] mov al, [ebx+hex_chars] 13760 000087DF A2[F38A0000] mov [msgVendorId], al 13761 000087E4 C1E810 shr eax, 16 13762 000087E7 88C3 mov bl, al 13763 000087E9 88DA mov dl, bl 13764 000087EB 80E30F and bl, 0Fh 13765 000087EE 8A83[AF8A0000] mov al, [ebx+hex_chars] 13766 000087F4 A2[078B0000] mov [msgDevId+3], al 13767 000087F9 88D3 mov bl, dl 13768 000087FB C0EB04 shr bl, 4 13769 000087FE 8A83[AF8A0000] mov al, [ebx+hex_chars] 13770 00008804 A2[068B0000] mov [msgDevId+2], al 13771 00008809 88E3 mov bl, ah 13772 0000880B 88DA mov dl, bl 13773 0000880D 80E30F and bl, 0Fh 13774 00008810 8A83[AF8A0000] mov al, [ebx+hex_chars] 13775 00008816 A2[058B0000] mov [msgDevId+1], al 13776 0000881B 88D3 mov bl, dl 13777 0000881D C0EB04 shr bl, 4 13778 00008820 8A83[AF8A0000] mov al, [ebx+hex_chars] 13779 00008826 A2[048B0000] mov [msgDevId], al 13780 13781 0000882B A1[3CA30000] mov eax, [bus_dev_fn] 13782 00008830 C1E808 shr eax, 8 13783 00008833 88C3 mov bl, al 13784 00008835 88DA mov dl, bl 13785 00008837 80E307 and bl, 7 ; bit 0,1,2 13786 0000883A 8A83[AF8A0000] mov al, [ebx+hex_chars] 13787 00008840 A2[2C8B0000] mov [msgFncNo+1], al 13788 00008845 88D3 mov bl, dl 13789 00008847 C0EB03 shr bl, 3 13790 0000884A 88DA mov dl, bl 13791 0000884C 80E30F and bl, 0Fh 13792 0000884F 8A83[AF8A0000] mov al, [ebx+hex_chars] 13793 00008855 A2[1E8B0000] mov [msgDevNo+1], al 13794 0000885A 88D3 mov bl, dl 13795 0000885C C0EB04 shr bl, 4 13796 0000885F 8A83[AF8A0000] mov al, [ebx+hex_chars] 13797 00008865 A2[1D8B0000] mov [msgDevNo], al 13798 0000886A 88E3 mov bl, ah 13799 0000886C 88DA mov dl, bl 13800 0000886E 80E30F and bl, 0Fh 13801 00008871 8A83[AF8A0000] mov al, [ebx+hex_chars] 13802 00008877 A2[128B0000] mov [msgBusNo+1], al 13803 0000887C 88D3 mov bl, dl 13804 0000887E C0EB04 shr bl, 4 13805 00008881 8A83[AF8A0000] mov al, [ebx+hex_chars] 13806 00008887 A2[118B0000] mov [msgBusNo], al 13807 13808 ;mov ax, [ac97_NamBar] 13809 0000888C 66A1[44A30000] mov ax, [NAMBAR] 13810 00008892 88C3 mov bl, al 13811 00008894 88DA mov dl, bl 13812 00008896 80E30F and bl, 0Fh 13813 00008899 8A83[AF8A0000] mov al, [ebx+hex_chars] 13814 0000889F A2[3C8B0000] mov [msgNamBar+3], al 13815 000088A4 88D3 mov bl, dl 13816 000088A6 C0EB04 shr bl, 4 13817 000088A9 8A83[AF8A0000] mov al, [ebx+hex_chars] 13818 000088AF A2[3B8B0000] mov [msgNamBar+2], al 13819 000088B4 88E3 mov bl, ah 13820 000088B6 88DA mov dl, bl 13821 000088B8 80E30F and bl, 0Fh 13822 000088BB 8A83[AF8A0000] mov al, [ebx+hex_chars] 13823 000088C1 A2[3A8B0000] mov [msgNamBar+1], al 13824 000088C6 88D3 mov bl, dl 13825 000088C8 C0EB04 shr bl, 4 13826 000088CB 8A83[AF8A0000] mov al, [ebx+hex_chars] 13827 000088D1 A2[398B0000] mov [msgNamBar], al 13828 13829 ;mov ax, [ac97_NabmBar] 13830 000088D6 66A1[46A30000] mov ax, [NABMBAR] 13831 000088DC 88C3 mov bl, al 13832 000088DE 88DA mov dl, bl 13833 000088E0 80E30F and bl, 0Fh 13834 000088E3 8A83[AF8A0000] mov al, [ebx+hex_chars] 13835 000088E9 A2[4C8B0000] mov [msgNabmBar+3], al 13836 000088EE 88D3 mov bl, dl 13837 000088F0 C0EB04 shr bl, 4 13838 000088F3 8A83[AF8A0000] mov al, [ebx+hex_chars] 13839 000088F9 A2[4B8B0000] mov [msgNabmBar+2], al 13840 000088FE 88E3 mov bl, ah 13841 00008900 88DA mov dl, bl 13842 00008902 80E30F and bl, 0Fh 13843 00008905 8A83[AF8A0000] mov al, [ebx+hex_chars] 13844 0000890B A2[4A8B0000] mov [msgNabmBar+1], al 13845 00008910 88D3 mov bl, dl 13846 00008912 C0EB04 shr bl, 4 13847 00008915 8A83[AF8A0000] mov al, [ebx+hex_chars] 13848 0000891B A2[498B0000] mov [msgNabmBar], al 13849 13850 00008920 31C0 xor eax, eax 13851 00008922 A0[4CA30000] mov al, [ac97_int_ln_reg] 13852 00008927 B10A mov cl, 10 13853 00008929 F6F1 div cl 13854 ; 23/11/2024 13855 ;add [msgIRQ], ax 13856 0000892B 66053030 add ax, 3030h 13857 0000892F 66A3[558B0000] mov [msgIRQ], ax 13858 ;and al, al 13859 00008935 3C30 cmp al, 30h 13860 00008937 750D jnz short _w_ac97imsg_ 13861 00008939 A0[568B0000] mov al, byte [msgIRQ+1] 13862 0000893E B420 mov ah, ' ' 13863 00008940 66A3[558B0000] mov [msgIRQ], ax 13864 _w_ac97imsg_: 13865 ; 12/01/2025 13866 ; 01/12/2024 13867 sys _msg, msgAC97Info, 255, 07h 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00008946 BB[C08A0000] <1> mov ebx, %2 125 <1> %if %0 >= 3 126 0000894B B9FF000000 <1> mov ecx, %3 127 <1> %if %0 = 4 128 00008950 BA07000000 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 00008955 B823000000 <1> mov eax, %1 133 <1> 134 0000895A CD40 <1> int 40h 13868 13869 ; 19/11/2024 13870 ;retn 13871 13872 ; 30/05/2024 13873 write_VRA_info: 13874 ; 12/01/2025 13875 ; 01/12/2024 13876 sys _msg, msgVRAheader, 255, 07h 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 0000895C BB[5A8B0000] <1> mov ebx, %2 125 <1> %if %0 >= 3 126 00008961 B9FF000000 <1> mov ecx, %3 127 <1> %if %0 = 4 128 00008966 BA07000000 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 0000896B B823000000 <1> mov eax, %1 133 <1> 134 00008970 CD40 <1> int 40h 13877 00008972 803D[51A30000]00 cmp byte [vra], 0 13878 00008979 7617 jna short _w_VRAi_no 13879 _w_VRAi_yes: 13880 sys _msg, msgVRAyes, 255, 07h 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 0000897B BB[698B0000] <1> mov ebx, %2 125 <1> %if %0 >= 3 126 00008980 B9FF000000 <1> mov ecx, %3 127 <1> %if %0 = 4 128 00008985 BA07000000 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 0000898A B823000000 <1> mov eax, %1 133 <1> 134 0000898F CD40 <1> int 40h 13881 00008991 C3 retn 13882 _w_VRAi_no: 13883 sys _msg, msgVRAno, 255, 07h 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 00008992 BB[6F8B0000] <1> mov ebx, %2 125 <1> %if %0 >= 3 126 00008997 B9FF000000 <1> mov ecx, %3 127 <1> %if %0 = 4 128 0000899C BA07000000 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 000089A1 B823000000 <1> mov eax, %1 133 <1> 134 000089A6 CD40 <1> int 40h 13884 13885 ; 13/01/2025 13886 000089A8 803D[64A30000]00 cmp byte [interpolation], 0 13887 000089AF 7717 ja short _w_VRAi_no_yes 13888 13889 sys _msg, crlf, 2, 07h 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 000089B1 BB[D88B0000] <1> mov ebx, %2 125 <1> %if %0 >= 3 126 000089B6 B902000000 <1> mov ecx, %3 127 <1> %if %0 = 4 128 000089BB BA07000000 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 000089C0 B823000000 <1> mov eax, %1 133 <1> 134 000089C5 CD40 <1> int 40h 13890 13891 000089C7 C3 retn 13892 13893 _w_VRAi_no_yes: 13894 sys _msg, msgInterp, 255, 07h 119 <1> 120 <1> 121 <1> 122 <1> 123 <1> %if %0 >= 2 124 000089C8 BB[738B0000] <1> mov ebx, %2 125 <1> %if %0 >= 3 126 000089CD B9FF000000 <1> mov ecx, %3 127 <1> %if %0 = 4 128 000089D2 BA07000000 <1> mov edx, %4 129 <1> %endif 130 <1> %endif 131 <1> %endif 132 000089D7 B823000000 <1> mov eax, %1 133 <1> 134 000089DC CD40 <1> int 40h 13895 000089DE C3 retn 13896 13897 ; --------------------------------------------------------------------------- 13898 13899 ; 13/01/2025 13900 ; 12/01/2025 13901 write_buffer_size: 13902 ;;; 13903 000089DF A0[56A30000] mov al, [blocks] ; (must be less than 10) 13904 000089E4 0430 add al, '0' 13905 000089E6 A2[638A0000] mov byte [blocks_txt], al 13906 ;;; 13907 000089EB 803D[64A30000]01 cmp byte [interpolation], 1 13908 000089F2 731F jnb short write_buffer_size_x 13909 ;;; 13910 000089F4 BA[4B8A0000] mov edx, buffersize_txt 13911 000089F9 E832DCFFFF call wrstr_edx 13912 000089FE A1[58A30000] mov eax, [buffer_size] 13913 00008A03 E85EDCFFFF call wr_decimal_eax_with_thousands_seperator 13914 00008A08 BA[5B8A0000] mov edx, bytes_txt 13915 00008A0D E81EDCFFFF call wrstr_edx 13916 00008A12 C3 retn 13917 13918 ; 13/01/2025 (Indirect interpolation info) 13919 write_buffer_size_x: 13920 00008A13 BA[708A0000] mov edx, buffers1_txt 13921 00008A18 E813DCFFFF call wrstr_edx 13922 00008A1D A1[60A30000] mov eax, [loadsize] ; decoding buffer size 13923 ; 15/01/2025 13924 00008A22 E83FDCFFFF call wr_decimal_eax_with_thousands_seperator 13925 00008A27 E814000000 call w_dbuff_bytes 13926 00008A2C BA[948A0000] mov edx, buffers2_txt 13927 00008A31 E8FADBFFFF call wrstr_edx 13928 00008A36 A1[58A30000] mov eax, [buffer_size] ; wav buffer size 13929 00008A3B E826DCFFFF call wr_decimal_eax_with_thousands_seperator 13930 w_dbuff_bytes: 13931 00008A40 BA[A58A0000] mov edx, bytes2_txt 13932 00008A45 E8E6DBFFFF call wrstr_edx 13933 00008A4A C3 retn 13934 13935 ; 11/01/2025 13936 00008A4B 0D0A buffersize_txt db 0Dh, 0Ah 13937 00008A4D 427566666572205369- db 'Buffer Size: ', 0 13937 00008A56 7A653A2000 13938 ; 12/01/2025 13939 ;bytes_txt: db ' bytes ', 0Dh, 0Ah, 0 13940 00008A5B 2062797465732028 bytes_txt: db ' bytes (' 13941 00008A63 3020626C6F636B7329- blocks_txt db '0 blocks) ', 0Dh, 0Ah, 0 13941 00008A6C 200D0A00 13942 13943 ; 13/01/2025 13944 00008A70 0D0A buffers1_txt db 0Dh, 0Ah 13945 00008A72 427566666572207369- db 'Buffer size for', 0Dh, 0Ah 13945 00008A7B 7A6520666F720D0A 13946 00008A83 202020206465636F64- db ' decoding is ', 0 13946 00008A8C 696E672069732000 13947 00008A94 2020776176206F7574- buffers2_txt db ' wav output is ', 0 13947 00008A9D 7075742069732000 13948 00008AA5 206279746573200D0A- bytes2_txt: db ' bytes ', 0Dh, 0Ah, 0 13948 00008AAE 00 13949 13950 ; --------------------------------------------------------------------------- 13951 13952 ; 19/11/2024 13953 ; 03/06/2017 13954 00008AAF 303132333435363738- hex_chars db "0123456789ABCDEF", 0 13954 00008AB8 3941424344454600 13955 00008AC0 0D0A msgAC97Info db 0Dh, 0Ah 13956 00008AC2 204143393720417564- db " AC97 Audio Controller & Codec Info", 0Dh, 0Ah 13956 00008ACB 696F20436F6E74726F- 13956 00008AD4 6C6C6572202620436F- 13956 00008ADD 64656320496E666F0D- 13956 00008AE6 0A 13957 00008AE7 2056656E646F722049- db " Vendor ID: " 13957 00008AF0 443A20 13958 00008AF3 303030306820446576- msgVendorId db "0000h Device ID: " 13958 00008AFC 6963652049443A20 13959 00008B04 30303030680D0A msgDevId db "0000h", 0Dh, 0Ah 13960 00008B0B 204275733A20 db " Bus: " 13961 00008B11 303068204465766963- msgBusNo db "00h Device: " 13961 00008B1A 653A20 13962 00008B1D 3030682046756E6374- msgDevNo db "00h Function: " 13962 00008B26 696F6E3A20 13963 00008B2B 303068 msgFncNo db "00h" 13964 00008B2E 0D0A db 0Dh, 0Ah 13965 00008B30 204E414D4241523A20 db " NAMBAR: " 13966 00008B39 30303030682020 msgNamBar db "0000h " 13967 00008B40 4E41424D4241523A20 db "NABMBAR: " 13968 00008B49 303030306820204952- msgNabmBar db "0000h IRQ: " 13968 00008B52 513A20 13969 00008B55 3030 msgIRQ dw 3030h 13970 00008B57 0D0A00 db 0Dh, 0Ah, 0 13971 ; 25/11/2023 13972 00008B5A 205652412073757070- msgVRAheader db " VRA support: " 13972 00008B63 6F72743A20 13973 00008B68 00 db 0 13974 00008B69 5945530D0A00 msgVRAyes db "YES", 0Dh, 0Ah, 0 13975 00008B6F 4E4F20 msgVRAno db "NO " ; 13/01/2025 13976 ;db "NO ", 0Dh, 0Ah 13977 ; 12/01/2025 13978 ;db " (Interpolated sample rate playing method)" 13979 00008B72 00 db 0 13980 ;db 0Dh, 0Ah, 0 13981 13982 ; 13/01/2025 13983 00008B73 28494E544552504F4C- msgInterp db "(INTERPOLATION: YES)" 13983 00008B7C 4154494F4E3A205945- 13983 00008B85 5329 13984 00008B87 0D0A00 db 0Dh, 0Ah, 0 13985 13986 ; ---------------------------------- 13987 13988 ; 24/11/2024 13989 00008B8A 0D0A msgSB16Info db 0Dh, 0Ah 13990 00008B8C 20417564696F204861- db " Audio Hardware: Sound Blaster 16", 0Dh, 0Ah 13990 00008B95 7264776172653A2053- 13990 00008B9E 6F756E6420426C6173- 13990 00008BA7 7465722031360D0A 13991 00008BAF 202020202020426173- db " Base Port: " 13991 00008BB8 6520506F72743A20 13992 00008BC0 303030680D0A msgBasePort db "000h", 0Dh, 0Ah 13993 00008BC6 202020202020202020- db " IRQ: " 13993 00008BCF 2020204952513A20 13994 00008BD7 30 msgIRQnum db 30h ; 12/01/2025 13995 crlf: ; 13/01/2025 13996 00008BD8 0D0A00 db 0Dh, 0Ah, 0 13997 13998 13999 ; 13/01/2025 14000 ; ---------------------------------- 14001 ; 25/11/2023 14002 msg_no_vra: 14003 00008BDB 0A0D db 10, 13 14004 00008BDD 4E6F20565241207375- db "No VRA support ! Only 48 kHZ sample rate supported !" 14004 00008BE6 70706F72742021204F- 14004 00008BEF 6E6C79203438206B48- 14004 00008BF8 5A2073616D706C6520- 14004 00008C01 726174652073757070- 14004 00008C0A 6F727465642021 14005 00008C11 0A0D00 db 10, 13, 0 14006 14007 ; =========================================================================== 14008 ; end of TRDOS 386 specific procedures. 14009 ; --------------------------------------------------------------------------- 14010 14011 ; =========================================================================== 14012 ; Initialized DATA 14013 ; =========================================================================== 14014 14015 00008C14 00 option_test db 0 14016 00008C15 00 option_mono db 0 14017 00008C16 00 option_8bit db 0 14018 00008C17 00 option_rate_shift db 0 14019 00008C18 00 option_fast db 0 14020 00008C19 90 align 4 14021 00008C1C 00000000 cpuid_flags dd 0 14022 00008C20 00 cpuid_exists db 0 14023 00008C21 00 detected_cpu db 0 14024 00008C22 90 align 4 14025 00008C24 00000000 mp3_output_milliseconds dd 0 14026 00008C28 00000000 millisecond_count dd 0 14027 14028 ; 20/10/2024 14029 ; HANDLE hProcess 14030 ;hProcess dd 0 14031 ; HANDLE hThread 14032 ;hThread dd 0 14033 ; DWORD dwPriorityClass 14034 ;dwPriorityClass dd 0 14035 ; int nPriority 14036 ;nPriority dd 0 14037 14038 00008C2C 0000000000000000 ttt dd 2 dup(0) 14039 00008C34 726561642068656164- rdtsc_read_header db 'read header ',0 14039 00008C3D 65722020202000 14040 00008C44 0000000000000000 rdtsc_read_header_extra dd 0, 0 14041 00008C4C 726561642065787472- db 'read extra ',0 14041 00008C55 61202020202000 14042 00008C5C 0000000000000000 rdtsc_read_granule dd 0, 0 14043 00008C64 72656164206772616E- db 'read granule ',0 14043 00008C6D 756C6520202000 14044 00008C74 0000000000000000 rdtsc_append_main dd 2 dup(0) 14045 00008C7C 617070656E64206D61- db 'append main ',0 14045 00008C85 696E2020202000 14046 00008C8C 0000000000000000 rdtsc_read_scalefac dd 2 dup(0) 14047 00008C94 72656164207363616C- db 'read scalefac ',0 14047 00008C9D 65666163202000 14048 00008CA4 0000000000000000 rdtsc_xlat_scalefac dd 2 dup(0) 14049 00008CAC 786C6174207363616C- db 'xlat scalefac ',0 14049 00008CB5 65666163202000 14050 00008CBC 0000000000000000 rdtsc_read_huffman dd 2 dup(0) 14051 00008CC4 726561642068756666- db 'read huffman ',0 14051 00008CCD 6D616E20202000 14052 00008CD4 0000000000000000 rdtsc_ms_stereo dd 2 dup(0) 14053 00008CDC 6D732073746572656F- db 'ms stereo ',0 14053 00008CE5 20202020202000 14054 00008CEC 0000000000000000 rdtsc_i_stereo dd 2 dup(0) 14055 00008CF4 692073746572656F20- db 'i stereo ',0 14055 00008CFD 20202020202000 14056 00008D04 0000000000000000 rdtsc_reorder dd 2 dup(0) 14057 00008D0C 72656F726465722020- db 'reorder ',0 14057 00008D15 20202020202000 14058 00008D1C 0000000000000000 rdtsc_antialias dd 2 dup(0) 14059 00008D24 616E7469616C696173- db 'antialias ',0 14059 00008D2D 20202020202000 14060 00008D34 0000000000000000 rdtsc_imdct dd 2 dup(0) 14061 00008D3C 696D64637420202020- db 'imdct ',0 14061 00008D45 20202020202000 14062 00008D4C 0000000000000000 rdtsc_imdct36 dd 2 dup(0) 14063 00008D54 20696D646374333620- db ' imdct36 ',0 14063 00008D5D 20202020202000 14064 00008D64 0000000000000000 rdtsc_imdct12 dd 2 dup(0) 14065 00008D6C 20696D646374313220- db ' imdct12 ',0 14065 00008D75 20202020202000 14066 00008D7C 0000000000000000 rdtsc_imdct0 dd 2 dup(0) 14067 00008D84 20696D646374302020- db ' imdct0 ',0 14067 00008D8D 20202020202000 14068 00008D94 0000000000000000 rdtsc_synth_dct dd 2 dup(0) 14069 00008D9C 73796E74682F646374- db 'synth/dct ',0 14069 00008DA5 20202020202000 14070 00008DAC 0000000000000000 rdtsc_dct32 dd 2 dup(0) 14071 00008DB4 2073796E74682E6463- db ' synth.dct32 ',0 14071 00008DBD 74333220202000 14072 00008DC4 0000000000000000 rdtsc_synth dd 2 dup(0) 14073 00008DCC 2073796E74682E6F75- db ' synth.output ',0 14073 00008DD5 74707574202000 14074 00008DDC 0000000000000000 rdtsc_total dd 2 dup(0) 14075 00008DE4 746F74616C20202020- db 'total ',0 14075 00008DED 20202020202000 14076 00008DF4 000020002800300038- mp3_bitrate_tab dw 0,32,40,48,56,64,80,96,112,128,160,192,224,256,320, 0 14076 00008DFD 004000500060007000- 14076 00008E06 8000A000C000E00000- 14076 00008E0F 0140010000 14077 00008E14 000008001000180020- dw 0, 8,16,24,32,40,48,56,64,80,96,112,128,144,160, 0 14077 00008E1D 002800300038004000- 14077 00008E26 500060007000800090- 14077 00008E2F 00A0000000 14078 00008E34 44AC80BB007D mp3_freq_tab dw 44100,48000,32000 14079 00008E3A 000504040000 mp3_lsf_sf_expand_init_table db 0, 5, 4, 4, 0, 0 14080 00008E40 9001 dw 400 ; 0..399 ; normal case 14081 00008E42 000504010C00 db 0, 5, 4, 1, 0Ch, 0 14082 00008E48 F401 dw 500 ; 400..499 14083 00008E4A 000301011801 db 0, 3, 1, 1, 18h, 1 14084 00008E50 0002 dw 512 ; 500..511 14085 00008E52 010606012400 db 1, 6, 6, 1, 24h, 0 14086 00008E58 6803 dw 872 ; 512+360 ; 0..359 for 2nd channel of intensity stereo 14087 00008E5A 010404013000 db 1, 4, 4, 1, 30h, 0 14088 00008E60 E803 dw 1000 ; 512+488 ; 360..487 14089 00008E62 010301013C00 db 1, 3, 1, 1, 3Ch, 0 14090 00008E68 0004 dw 1024 ; 512+512 ; 488..511 14091 00008E6A 010000000000000000- mp3_synth_win_src dw 1, 0, 0, 0, 0, 0, 1, 0 14091 00008E73 00000001000000 14092 00008E7A 000000000100000001- dw 0, 0, 1, 0, 1, 0, 1, 0 14092 00008E83 00000001000000 14093 00008E8A 010001000000010001- dw 1, 1, 0, 1, 1, 1, 1, 2 14093 00008E93 00010001000200 14094 00008E9A 010002000100020002- dw 1, 2, 1, 2, 2, 3, 2, 3 14094 00008EA3 00030002000300 14095 00008EAA 020004000300030004- dw 2, 4, 3, 3, 4, 4, 4, 5 14095 00008EB3 00040004000500 14096 00008EBA 050005000500060006- dw 5, 5, 5, 6, 6, 6, 6, 7 14096 00008EC3 00060006000700 14097 00008ECA 070006000800070007- dw 7, 6, 8, 7, 7, 8, 7, 7 14097 00008ED3 00080007000700 14098 00008EDA 080007000700070006- dw 8, 7, 7, 7, 6, 6, 6, 5 14098 00008EE3 00060006000500 14099 00008EEA 51FEFCFFFDFFFEFFFF- dw 0FE51h,0FFFCh,0FFFDh,0FFFEh,0FFFFh, 0, 1, 3 14099 00008EF3 FF000001000300 14100 00008EFA 03000600070008000B- dw 3, 6, 7, 8, 0Bh, 0Ch, 0Eh, 11h 14100 00008F03 000C000E001100 14101 00008F0A 1300150017001A001C- dw 13h, 15h, 17h, 1Ah, 1Ch, 1Fh, 22h, 24h 14101 00008F13 001F0022002400 14102 00008F1A 27002A002C002F0032- dw 27h, 2Ah, 2Ch, 2Fh, 32h, 35h, 36h, 3Ah 14102 00008F23 00350036003A00 14103 00008F2A 3C003E004000420044- dw 3Ch, 3Eh, 40h, 42h, 44h, 45h, 47h, 48h 14103 00008F33 00450047004800 14104 00008F3A 490049004900490049- dw 49h, 49h, 49h, 49h, 49h, 48h, 46h, 45h 14104 00008F43 00480046004500 14105 00008F4A 430040003D003A0035- dw 43h, 40h, 3Dh, 3Ah, 35h, 31h, 2Bh, 27h 14105 00008F53 0031002B002700 14106 00008F5A 1F00190012000A0002- dw 1Fh, 19h, 12h, 0Ah, 2,0FFF9h,0FFEFh,0FFE6h 14106 00008F63 00F9FFEFFFE6FF 14107 00008F6A 3BF030003B00470053- dw 0F03Bh, 30h, 3Bh, 47h, 53h, 5Fh, 6Dh, 79h 14107 00008F73 005F006D007900 14108 00008F7A 86009500A100B000BD- dw 86h, 95h, 0A1h, 0B0h, 0BDh, 0CBh, 0D9h, 0E6h 14108 00008F83 00CB00D900E600 14109 00008F8A F30001010D01190125- dw 0F3h, 101h, 10Dh, 119h, 125h, 130h, 13Ah, 144h 14109 00008F93 0130013A014401 14110 00008F9A 4D0155015B01620166- dw 14Dh, 155h, 15Bh, 162h, 166h, 16Ah, 16Bh, 16Dh 14110 00008FA3 016A016B016D01 14111 00008FAA 6C016A01660160015A- dw 16Ch, 16Ah, 166h, 160h, 15Ah, 150h, 146h, 139h 14111 00008FB3 01500146013901 14112 00008FBA 2B011A010801F300DD- dw 12Bh, 11Ah, 108h, 0F3h, 0DDh, 0C5h, 0A9h, 8Eh 14112 00008FC3 00C500A9008E00 14113 00008FCA 6F004E002B000700E1- dw 6Fh, 4Eh, 2Bh, 7,0FFE1h,0FFB8h,0FF8Fh,0FF62h 14113 00008FD3 FFB8FF8FFF62FF 14114 00008FDA 35FF06FFD5FEA4FE70- dw 0FF35h,0FF06h,0FED5h,0FEA4h,0FE70h,0FE3Ch,0FE06h,0FDD0h 14114 00008FE3 FE3CFE06FED0FD 14115 00008FEA 0BCF9F02D702110349- dw 0CF0Bh, 29Fh, 2D7h, 311h, 349h, 382h, 3BBh, 3F4h 14115 00008FF3 038203BB03F403 14116 00008FFA 2C0464049A04D10405- dw 42Ch, 464h, 49Ah, 4D1h, 505h, 538h, 56Ah, 59Bh 14116 00009003 0538056A059B05 14117 0000900A C805F505200647066C- dw 5C8h, 5F5h, 620h, 647h, 66Ch, 68Fh, 6AFh, 6CCh 14117 00009013 068F06AF06CC06 14118 0000901A E506FC060F071F072B- dw 6E5h, 6FCh, 70Fh, 71Fh, 72Bh, 734h, 739h, 739h 14118 00009023 07340739073907 14119 0000902A 370730072607170704- dw 737h, 730h, 726h, 717h, 704h, 6EDh, 6D3h, 6B4h 14119 00009033 07ED06D306B406 14120 0000903A 91066C0640061306E1- dw 691h, 66Ch, 640h, 613h, 5E1h, 5ABh, 573h, 537h 14120 00009043 05AB0573053705 14121 0000904A F704B4046F042704DB- dw 4F7h, 4B4h, 46Fh, 427h, 3DBh, 38Fh, 33Eh, 2EDh 14121 00009053 038F033E03ED02 14122 0000905A 9A024402ED0195013D- dw 29Ah, 244h, 1EDh, 195h, 13Dh, 0E2h, 88h, 2Eh 14122 00009063 01E20088002E00 14123 0000906A 00 db 0 14124 0000906B 00 db 0 14125 0000906C 000000010002000303- mp3_slen_table dw 0000h, 0100h, 0200h, 0300h, 0003h, 0101h, 0201h, 0301h 14125 00009075 00010101020103 14126 0000907C 020102020203030103- dw 0102h, 0202h, 0302h, 0103h, 0203h, 0303h, 0204h, 0304h 14126 00009085 02030304020403 14127 0000908C 060505050909090906- mp3_lsf_nsf_table dd 05050506h, 09090909h, 09090906h 14127 00009095 090909 14128 00009098 0605070309090C0606- dd 03070506h, 060C0909h, 060C0906h 14128 000090A1 090C06 14129 000090A4 0B0A0000121200000F- dd 00000A0Bh, 00001212h, 0000120Fh 14129 000090AD 120000 14130 000090B0 070707000C0C0C0006- dd 00070707h, 000C0C0Ch, 000C0F06h 14130 000090B9 0F0C00 14131 000090BC 060606030C09090606- dd 03060606h, 0609090Ch, 06090C06h 14131 000090C5 0C0906 14132 000090C8 080805000F0C090006- dd 00050808h, 00090C0Fh, 00091206h 14132 000090D1 120900 14133 000090D4 1101100022021221 huff_tree_list_data db 11h, 1, 10h, 0, 22h, 2, 12h, 21h 14134 000090DC 2011011000220212 db 20h, 11h, 1, 10h, 0, 22h, 2, 12h 14135 000090E4 2120101101003323 db 21h, 20h, 10h, 11h, 1, 0, 33h, 23h 14136 000090EC 3231130330221221 db 32h, 31h, 13h, 3, 30h, 22h, 12h, 21h 14137 000090F4 0220110110003303 db 2, 20h, 11h, 1, 10h, 0, 33h, 3 14138 000090FC 2332301331220212 db 23h, 32h, 30h, 13h, 31h, 22h, 2, 12h 14139 00009104 2120011110005545 db 21h, 20h, 1, 11h, 10h, 0, 55h, 45h 14140 0000910C 5453354425521551 db 54h, 53h, 35h, 44h, 25h, 52h, 15h, 51h 14141 00009114 0534504333244214 db 5, 34h, 50h, 43h, 33h, 24h, 42h, 14h 14142 0000911C 4140042332031331 db 41h, 40h, 4, 23h, 32h, 3, 13h, 31h 14143 00009124 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 14144 0000912C 1000555445533544 db 10h, 0, 55h, 54h, 45h, 53h, 35h, 44h 14145 00009134 2552051551344350 db 25h, 52h, 5, 15h, 51h, 34h, 43h, 50h 14146 0000913C 3324421441044023 db 33h, 24h, 42h, 14h, 41h, 4, 40h, 23h 14147 00009144 3213310330220220 db 32h, 13h, 31h, 3, 30h, 22h, 2, 20h 14148 0000914C 1221110110005545 db 12h, 21h, 11h, 1, 10h, 0, 55h, 45h 14149 00009154 3553540544255215 db 35h, 53h, 54h, 5, 44h, 25h, 52h, 15h 14150 0000915C 5134435004244233 db 51h, 34h, 43h, 50h, 4, 24h, 42h, 33h 14151 00009164 4014412332133103 db 40h, 14h, 41h, 23h, 32h, 13h, 31h, 3 14152 0000916C 3022021221201101 db 30h, 22h, 2, 12h, 21h, 20h, 11h, 1 14153 00009174 1000776776577566 db 10h, 0, 77h, 67h, 76h, 57h, 75h, 66h 14154 0000917C 4774566537734655 db 47h, 74h, 56h, 65h, 37h, 73h, 46h, 55h 14155 00009184 5463277264077062 db 54h, 63h, 27h, 72h, 64h, 7, 70h, 62h 14156 0000918C 4535065344177136 db 45h, 35h, 6, 53h, 44h, 17h, 71h, 36h 14157 00009194 2625521551344316 db 26h, 25h, 52h, 15h, 51h, 34h, 43h, 16h 14158 0000919C 6160055024423304 db 61h, 60h, 5, 50h, 24h, 42h, 33h, 4 14159 000091A4 1441402332031331 db 14h, 41h, 40h, 23h, 32h, 3, 13h, 31h 14160 000091AC 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 14161 000091B4 1000776776756647 db 10h, 0, 77h, 67h, 76h, 75h, 66h, 47h 14162 000091BC 7457555665377346 db 74h, 57h, 55h, 56h, 65h, 37h, 73h, 46h 14163 000091C4 4554355327726407 db 45h, 54h, 35h, 53h, 27h, 72h, 64h, 7 14164 000091CC 7117703663604425 db 71h, 17h, 70h, 36h, 63h, 60h, 44h, 25h 14165 000091D4 5205156226061661 db 52h, 5, 15h, 62h, 26h, 6, 16h, 61h 14166 000091DC 5134504333244214 db 51h, 34h, 50h, 43h, 33h, 24h, 42h, 14h 14167 000091E4 4104402332133103 db 41h, 4, 40h, 23h, 32h, 13h, 31h, 3 14168 000091EC 3022211202201101 db 30h, 22h, 21h, 12h, 2, 20h, 11h, 1 14169 000091F4 1000776776577566 db 10h, 0, 77h, 67h, 76h, 57h, 75h, 66h 14170 000091FC 4774655637735527 db 47h, 74h, 65h, 56h, 37h, 73h, 55h, 27h 14171 00009204 7246641771077036 db 72h, 46h, 64h, 17h, 71h, 7, 70h, 36h 14172 0000920C 6345544406052662 db 63h, 45h, 54h, 44h, 6, 5, 26h, 62h 14173 00009214 6116603553255215 db 61h, 16h, 60h, 35h, 53h, 25h, 52h, 15h 14174 0000921C 5134435004244214 db 51h, 34h, 43h, 50h, 4, 24h, 42h, 14h 14175 00009224 3341233240033013 db 33h, 41h, 23h, 32h, 40h, 3, 30h, 13h 14176 0000922C 3122122102200011 db 31h, 22h, 12h, 21h, 2, 20h, 0, 11h 14177 00009234 0110FEFCFDEDFFEF db 1, 10h,0FEh,0FCh,0FDh,0EDh,0FFh,0EFh 14178 0000923C DFEECFDEBFFBCEDC db 0DFh,0EEh,0CFh,0DEh,0BFh,0FBh,0CEh,0DCh 14179 00009244 AFE9ECDDFACDBEEB db 0AFh,0E9h,0ECh,0DDh,0FAh,0CDh,0BEh,0EBh 14180 0000924C 9FF9EABDDB8FF8CC db 9Fh,0F9h,0EAh,0BDh,0DBh, 8Fh,0F8h,0CCh 14181 00009254 AE9E8E7F7EF7DAAD db 0AEh, 9Eh, 8Eh, 7Fh, 7Eh,0F7h,0DAh,0ADh 14182 0000925C BCCBF66FE85F9DD9 db 0BCh,0CBh,0F6h, 6Fh,0E8h, 5Fh, 9Dh,0D9h 14183 00009264 F5E7ACBB4FF4CAE6 db 0F5h,0E7h,0ACh,0BBh, 4Fh,0F4h,0CAh,0E6h 14184 0000926C F33F8DD82FF26E9C db 0F3h, 3Fh, 8Dh,0D8h, 2Fh,0F2h, 6Eh, 9Ch 14185 00009274 0FC95EAB7DD74EC8 db 0Fh,0C9h, 5Eh,0ABh, 7Dh,0D7h, 4Eh,0C8h 14186 0000927C D63EB99BAA1FF1F0 db 0D6h, 3Eh,0B9h, 9Bh,0AAh, 1Fh,0F1h,0F0h 14187 00009284 BAE5E48C6DE3E22E db 0BAh,0E5h,0E4h, 8Ch, 6Dh,0E3h,0E2h, 2Eh 14188 0000928C 0E1EE1E05DD57CC7 db 0Eh, 1Eh,0E1h,0E0h, 5Dh,0D5h, 7Ch,0C7h 14189 00009294 4D8BB8D49AA96CC6 db 4Dh, 8Bh,0B8h,0D4h, 9Ah,0A9h, 6Ch,0C6h 14190 0000929C 3DD37B2DD21DB75C db 3Dh,0D3h, 7Bh, 2Dh,0D2h, 1Dh,0B7h, 5Ch 14191 000092A4 C5997AC3A7974BD1 db 0C5h, 99h, 7Ah,0C3h,0A7h, 97h, 4Bh,0D1h 14192 000092AC 0DD08AA84CC46BB6 db 0Dh,0D0h, 8Ah,0A8h, 4Ch,0C4h, 6Bh,0B6h 14193 000092B4 3C2CC25BB5891CC1 db 3Ch, 2Ch,0C2h, 5Bh,0B5h, 89h, 1Ch,0C1h 14194 000092BC 980CC0B46AA6793B db 98h, 0Ch,0C0h,0B4h, 6Ah,0A6h, 79h, 3Bh 14195 000092C4 B3885A2BA569A478 db 0B3h, 88h, 5Ah, 2Bh,0A5h, 69h,0A4h, 78h 14196 000092CC 87947776B21BB10B db 87h, 94h, 77h, 76h,0B2h, 1Bh,0B1h, 0Bh 14197 000092D4 B0964A3AA359952A db 0B0h, 96h, 4Ah, 3Ah,0A3h, 59h, 95h, 2Ah 14198 000092DC A21AA10A68A08649 db 0A2h, 1Ah,0A1h, 0Ah, 68h,0A0h, 86h, 49h 14199 000092E4 9339588567299257 db 93h, 39h, 58h, 85h, 67h, 29h, 92h, 57h 14200 000092EC 7538836647745665 db 75h, 38h, 83h, 66h, 47h, 74h, 56h, 65h 14201 000092F4 7319910990488472 db 73h, 19h, 91h, 9, 90h, 48h, 84h, 72h 14202 000092FC 4664288218372717 db 46h, 64h, 28h, 82h, 18h, 37h, 27h, 17h 14203 00009304 7155077036634554 db 71h, 55h, 7, 70h, 36h, 63h, 45h, 54h 14204 0000930C 2662358108801661 db 26h, 62h, 35h, 81h, 8, 80h, 16h, 61h 14205 00009314 0660534425520515 db 6, 60h, 53h, 44h, 25h, 52h, 5, 15h 14206 0000931C 5134435024423314 db 51h, 34h, 43h, 50h, 24h, 42h, 33h, 14h 14207 00009324 4104402332133103 db 41h, 4, 40h, 23h, 32h, 13h, 31h, 3 14208 0000932C 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 14209 00009334 1000FFEFFEDFEEFD db 10h, 0,0FFh,0EFh,0FEh,0DFh,0EEh,0FDh 14210 0000933C CFFCDEEDBFFBCEEC db 0CFh,0FCh,0DEh,0EDh,0BFh,0FBh,0CEh,0ECh 14211 00009344 DDAFFABEEBCDDC9F db 0DDh,0AFh,0FAh,0BEh,0EBh,0CDh,0DCh, 9Fh 14212 0000934C F9EABDDB8FF8CC9E db 0F9h,0EAh,0BDh,0DBh, 8Fh,0F8h,0CCh, 9Eh 14213 00009354 E97FF7ADDABC6FAE db 0E9h, 7Fh,0F7h,0ADh,0DAh,0BCh, 6Fh,0AEh 14214 0000935C 0FCBF68EE85F9DF5 db 0Fh,0CBh,0F6h, 8Eh,0E8h, 5Fh, 9Dh,0F5h 14215 00009364 7EE7ACCABBD98D4F db 7Eh,0E7h,0ACh,0CAh,0BBh,0D9h, 8Dh, 4Fh 14216 0000936C F43FF3D8E62FF26E db 0F4h, 3Fh,0F3h,0D8h,0E6h, 2Fh,0F2h, 6Eh 14217 00009374 F01FF19CC95EABBA db 0F0h, 1Fh,0F1h, 9Ch,0C9h, 5Eh,0ABh,0BAh 14218 0000937C E57DD74EE48CC83E db 0E5h, 7Dh,0D7h, 4Eh,0E4h, 8Ch,0C8h, 3Eh 14219 00009384 6DD6E39BB92EAAE2 db 6Dh,0D6h,0E3h, 9Bh,0B9h, 2Eh,0AAh,0E2h 14220 0000938C 1EE10EE05DD57CC7 db 1Eh,0E1h, 0Eh,0E0h, 5Dh,0D5h, 7Ch,0C7h 14221 00009394 4D8BD4B89AA96CC6 db 4Dh, 8Bh,0D4h,0B8h, 9Ah,0A9h, 6Ch,0C6h 14222 0000939C 3DD3D22D0D1D7BB7 db 3Dh,0D3h,0D2h, 2Dh, 0Dh, 1Dh, 7Bh,0B7h 14223 000093A4 D15CD0C58AA84CC4 db 0D1h, 5Ch,0D0h,0C5h, 8Ah,0A8h, 4Ch,0C4h 14224 000093AC 6BB6990C3CC37AA7 db 6Bh,0B6h, 99h, 0Ch, 3Ch,0C3h, 7Ah,0A7h 14225 000093B4 A6C00BC22C5BB51C db 0A6h,0C0h, 0Bh,0C2h, 2Ch, 5Bh,0B5h, 1Ch 14226 000093BC 8998C14BB46A3B79 db 89h, 98h,0C1h, 4Bh,0B4h, 6Ah, 3Bh, 79h 14227 000093C4 B397882B5AB2A51B db 0B3h, 97h, 88h, 2Bh, 5Ah,0B2h,0A5h, 1Bh 14228 000093CC B1B069964AA47887 db 0B1h,0B0h, 69h, 96h, 4Ah,0A4h, 78h, 87h 14229 000093D4 3AA359952AA21AA1 db 3Ah,0A3h, 59h, 95h, 2Ah,0A2h, 1Ah,0A1h 14230 000093DC 0AA0688649943993 db 0Ah,0A0h, 68h, 86h, 49h, 94h, 39h, 93h 14231 000093E4 7709588529677692 db 77h, 9, 58h, 85h, 29h, 67h, 76h, 92h 14232 000093EC 9119904884577538 db 91h, 19h, 90h, 48h, 84h, 57h, 75h, 38h 14233 000093F4 8366472882188174 db 83h, 66h, 47h, 28h, 82h, 18h, 81h, 74h 14234 000093FC 0880566537734627 db 8, 80h, 56h, 65h, 37h, 73h, 46h, 27h 14235 00009404 7264175571077036 db 72h, 64h, 17h, 55h, 71h, 7, 70h, 36h 14236 0000940C 6345542662160660 db 63h, 45h, 54h, 26h, 62h, 16h, 6, 60h 14237 00009414 3561534425521551 db 35h, 61h, 53h, 44h, 25h, 52h, 15h, 51h 14238 0000941C 0550344324423341 db 5, 50h, 34h, 43h, 24h, 42h, 33h, 41h 14239 00009424 1404233240031331 db 14h, 4, 23h, 32h, 40h, 3, 13h, 31h 14240 0000942C 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 14241 00009434 1000EFFEDFFDCFFC db 10h, 0,0EFh,0FEh,0DFh,0FDh,0CFh,0FCh 14242 0000943C BFFBAFFA9FF9F88F db 0BFh,0FBh,0AFh,0FAh, 9Fh,0F9h,0F8h, 8Fh 14243 00009444 7FF76FF6FF5FF54F db 7Fh,0F7h, 6Fh,0F6h,0FFh, 5Fh,0F5h, 4Fh 14244 0000944C F4F3F03FCEECDDDE db 0F4h,0F3h,0F0h, 3Fh,0CEh,0ECh,0DDh,0DEh 14245 00009454 E9EAD9EEEDEBBECD db 0E9h,0EAh,0D9h,0EEh,0EDh,0EBh,0BEh,0CDh 14246 0000945C DCDBAECCADDA7EAC db 0DCh,0DBh,0AEh,0CCh,0ADh,0DAh, 7Eh,0ACh 14247 00009464 CAC97D5EBDF22F0F db 0CAh,0C9h, 7Dh, 5Eh,0BDh,0F2h, 2Fh, 0Fh 14248 0000946C 1FF19EBCCB8EE89D db 1Fh,0F1h, 9Eh,0BCh,0CBh, 8Eh,0E8h, 9Dh 14249 00009474 E7BB8DD86EE69CAB db 0E7h,0BBh, 8Dh,0D8h, 6Eh,0E6h, 9Ch,0ABh 14250 0000947C BAE5D74EE48CC83E db 0BAh,0E5h,0D7h, 4Eh,0E4h, 8Ch,0C8h, 3Eh 14251 00009484 6DD69BB9AAE1D4B8 db 6Dh,0D6h, 9Bh,0B9h,0AAh,0E1h,0D4h,0B8h 14252 0000948C A97BB7D0E30EE05D db 0A9h, 7Bh,0B7h,0D0h,0E3h, 0Eh,0E0h, 5Dh 14253 00009494 D57CC74D8B9A6CC6 db 0D5h, 7Ch,0C7h, 4Dh, 8Bh, 9Ah, 6Ch,0C6h 14254 0000949C 3D5CC50D8AA8994C db 3Dh, 5Ch,0C5h, 0Dh, 8Ah,0A8h, 99h, 4Ch 14255 000094A4 B67A3C5B891CC098 db 0B6h, 7Ah, 3Ch, 5Bh, 89h, 1Ch,0C0h, 98h 14256 000094AC 79E22E1ED32DD2D1 db 79h,0E2h, 2Eh, 1Eh,0D3h, 2Dh,0D2h,0D1h 14257 000094B4 3B97881DC46BC3A7 db 3Bh, 97h, 88h, 1Dh,0C4h, 6Bh,0C3h,0A7h 14258 000094BC 2CC2B5C10C4BB46A db 2Ch,0C2h,0B5h,0C1h, 0Ch, 4Bh,0B4h, 6Ah 14259 000094C4 A6B35AA52BB21BB1 db 0A6h,0B3h, 5Ah,0A5h, 2Bh,0B2h, 1Bh,0B1h 14260 000094CC 0BB069964AA47887 db 0Bh,0B0h, 69h, 96h, 4Ah,0A4h, 78h, 87h 14261 000094D4 A33A592A9568A186 db 0A3h, 3Ah, 59h, 2Ah, 95h, 68h,0A1h, 86h 14262 000094DC 7794495767A21A0A db 77h, 94h, 49h, 57h, 67h,0A2h, 1Ah, 0Ah 14263 000094E4 A039935885299276 db 0A0h, 39h, 93h, 58h, 85h, 29h, 92h, 76h 14264 000094EC 0919919048847538 db 9, 19h, 91h, 90h, 48h, 84h, 75h, 38h 14265 000094F4 8366288247741881 db 83h, 66h, 28h, 82h, 47h, 74h, 18h, 81h 14266 000094FC 8008563773654627 db 80h, 8, 56h, 37h, 73h, 65h, 46h, 27h 14267 00009504 7264550717717036 db 72h, 64h, 55h, 7, 17h, 71h, 70h, 36h 14268 0000950C 6345542662166106 db 63h, 45h, 54h, 26h, 62h, 16h, 61h, 6 14269 00009514 6053354425525115 db 60h, 53h, 35h, 44h, 25h, 52h, 51h, 15h 14270 0000951C 0534435024423314 db 5, 34h, 43h, 50h, 24h, 42h, 33h, 14h 14271 00009524 4104402332133103 db 41h, 4, 40h, 23h, 32h, 13h, 31h, 3 14272 0000952C 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 14273 00009534 1000EFFEDFFDCFFC db 10h, 0,0EFh,0FEh,0DFh,0FDh,0CFh,0FCh 14274 0000953C BFFBFAAF9FF9F88F db 0BFh,0FBh,0FAh,0AFh, 9Fh,0F9h,0F8h, 8Fh 14275 00009544 7FF76FF65FF54FF4 db 7Fh,0F7h, 6Fh,0F6h, 5Fh,0F5h, 4Fh,0F4h 14276 0000954C 3FF32FF2F11FF00F db 3Fh,0F3h, 2Fh,0F2h,0F1h, 1Fh,0F0h, 0Fh 14277 00009554 EEDEEDCEECDDBEEB db 0EEh,0DEh,0EDh,0CEh,0ECh,0DDh,0BEh,0EBh 14278 0000955C CDDCAEEABDDBCC9E db 0CDh,0DCh,0AEh,0EAh,0BDh,0DBh,0CCh, 9Eh 14279 00009564 E9ADDABCCB8EE89D db 0E9h,0ADh,0DAh,0BCh,0CBh, 8Eh,0E8h, 9Dh 14280 0000956C D97EE7ACFFCABB8D db 0D9h, 7Eh,0E7h,0ACh,0FFh,0CAh,0BBh, 8Dh 14281 00009574 D80EE00DE66E9CC9 db 0D8h, 0Eh,0E0h, 0Dh,0E6h, 6Eh, 9Ch,0C9h 14282 0000957C 5EBAE5AB7DD7E48C db 5Eh,0BAh,0E5h,0ABh, 7Dh,0D7h,0E4h, 8Ch 14283 00009584 C84E2E3E6DD6E39B db 0C8h, 4Eh, 2Eh, 3Eh, 6Dh,0D6h,0E3h, 9Bh 14284 0000958C B9AAE21EE15DD57C db 0B9h,0AAh,0E2h, 1Eh,0E1h, 5Dh,0D5h, 7Ch 14285 00009594 C74D8BB8D49AA96C db 0C7h, 4Dh, 8Bh,0B8h,0D4h, 9Ah,0A9h, 6Ch 14286 0000959C C63DD32DD21D7BB7 db 0C6h, 3Dh,0D3h, 2Dh,0D2h, 1Dh, 7Bh,0B7h 14287 000095A4 D15CC58AA8994CC4 db 0D1h, 5Ch,0C5h, 8Ah,0A8h, 99h, 4Ch,0C4h 14288 000095AC 6BB6D00C3CC37AA7 db 6Bh,0B6h,0D0h, 0Ch, 3Ch,0C3h, 7Ah,0A7h 14289 000095B4 2CC25BB51C8998C1 db 2Ch,0C2h, 5Bh,0B5h, 1Ch, 89h, 98h,0C1h 14290 000095BC 4BC00B3BB00A1AB4 db 4Bh,0C0h, 0Bh, 3Bh,0B0h, 0Ah, 1Ah,0B4h 14291 000095C4 6AA67997A00990B3 db 6Ah,0A6h, 79h, 97h,0A0h, 9, 90h,0B3h 14292 000095CC 882B5AB2A51BB169 db 88h, 2Bh, 5Ah,0B2h,0A5h, 1Bh,0B1h, 69h 14293 000095D4 96A44A78873AA359 db 96h,0A4h, 4Ah, 78h, 87h, 3Ah,0A3h, 59h 14294 000095DC 952AA2A168867749 db 95h, 2Ah,0A2h,0A1h, 68h, 86h, 77h, 49h 14295 000095E4 9439935885296776 db 94h, 39h, 93h, 58h, 85h, 29h, 67h, 76h 14296 000095EC 9219914884577538 db 92h, 19h, 91h, 48h, 84h, 57h, 75h, 38h 14297 000095F4 8366288218477481 db 83h, 66h, 28h, 82h, 18h, 47h, 74h, 81h 14298 000095FC 0880566517077073 db 8, 80h, 56h, 65h, 17h, 7, 70h, 73h 14299 00009604 3727724664557136 db 37h, 27h, 72h, 46h, 64h, 55h, 71h, 36h 14300 0000960C 6345542662166106 db 63h, 45h, 54h, 26h, 62h, 16h, 61h, 6 14301 00009614 6035534425521505 db 60h, 35h, 53h, 44h, 25h, 52h, 15h, 5 14302 0000961C 5051344324423314 db 50h, 51h, 34h, 43h, 24h, 42h, 33h, 14h 14303 00009624 4104402332133103 db 41h, 4, 40h, 23h, 32h, 13h, 31h, 3 14304 0000962C 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 14305 00009634 10000B0F0D0E0705 db 10h, 0, 0Bh, 0Fh, 0Dh, 0Eh, 7, 5 14306 0000963C 0906030A0C020104 db 9, 6, 3, 0Ah, 0Ch, 2, 1, 4 14307 00009644 08000F0E0D0C0B0A db 8, 0, 0Fh, 0Eh, 0Dh, 0Ch, 0Bh, 0Ah 14308 0000964C 0908070605040302 db 9, 8, 7, 6, 5, 4, 3, 2 14309 00009654 0100 db 1, 0 14310 00009656 000000000000 db 6 dup(0) 14311 0000965C 0000 mp3_huff_data db 0, 0 14312 0000965E 0100 db 1, 0 ; byte[32][2] ; table,linbits 14313 00009660 0200 db 2, 0 14314 00009662 0300 db 3, 0 14315 00009664 0000 db 0, 0 14316 00009666 0400 db 4, 0 14317 00009668 0500 db 5, 0 14318 0000966A 0600 db 6, 0 14319 0000966C 0700 db 7, 0 14320 0000966E 0800 db 8, 0 14321 00009670 0900 db 9, 0 14322 00009672 0A00 db 10, 0 14323 00009674 0B00 db 11, 0 14324 00009676 0C00 db 12, 0 14325 00009678 0000 db 0, 0 14326 0000967A 0D00 db 13, 0 14327 0000967C 0E01 db 14, 1 14328 0000967E 0E02 db 14, 2 14329 00009680 0E03 db 14, 3 14330 00009682 0E04 db 14, 4 14331 00009684 0E06 db 14, 6 14332 00009686 0E08 db 14, 8 14333 00009688 0E0A db 14, 10 14334 0000968A 0E0D db 14, 13 14335 0000968C 0F04 db 15, 4 14336 0000968E 0F05 db 15, 5 14337 00009690 0F06 db 15, 6 14338 00009692 0F07 db 15, 7 14339 00009694 0F08 db 15, 8 14340 00009696 0F09 db 15, 9 14341 00009698 0F0B db 15, 11 14342 0000969A 0F0D db 15, 13 14343 0000969C 040404040404060608- mp3_band_size_long db 4, 4, 4, 4, 4, 4, 6, 6, 8, 8, 0Ah 14343 000096A5 080A 14344 000096A7 0C1014181C222A3236- db 0Ch, 10h, 14h, 18h, 1Ch, 22h, 2Ah, 32h, 36h, 4Ch, 9Eh ; byte[9][22] 14344 000096B0 4C9E 14345 000096B2 040404040404060606- db 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 0Ah 14345 000096BB 080A 14346 000096BD 0C1012161C22282E36- db 0Ch, 10h, 12h, 16h, 1Ch, 22h, 28h, 2Eh, 36h, 36h,0C0h 14346 000096C6 36C0 14347 000096C8 040404040404060608- db 4, 4, 4, 4, 4, 4, 6, 6, 8, 0Ah, 0Ch 14347 000096D1 0A0C 14348 000096D3 1014181E262E384454- db 10h, 14h, 18h, 1Eh, 26h, 2Eh, 38h, 44h, 54h, 66h, 1Ah 14348 000096DC 661A 14349 000096DE 060606060606080A0C- db 6, 6, 6, 6, 6, 6, 8, 0Ah, 0Ch, 0Eh, 10h 14349 000096E7 0E10 14350 000096E9 14181C20262E343C44- db 14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h 14350 000096F2 3A36 14351 000096F4 060606060606080A0C- db 6, 6, 6, 6, 6, 6, 8, 0Ah, 0Ch, 0Eh, 10h 14351 000096FD 0E10 14352 000096FF 12161A20262E344046- db 12h, 16h, 1Ah, 20h, 26h, 2Eh, 34h, 40h, 46h, 4Ch, 24h 14352 00009708 4C24 14353 0000970A 060606060606080A0C- db 6, 6, 6, 6, 6, 6, 8, 0Ah, 0Ch, 0Eh, 10h 14353 00009713 0E10 14354 00009715 14181C20262E343C44- db 14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h 14354 0000971E 3A36 14355 00009720 060606060606080A0C- db 6, 6, 6, 6, 6, 6, 8, 0Ah, 0Ch, 0Eh, 10h 14355 00009729 0E10 14356 0000972B 14181C20262E343C44- db 14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h 14356 00009734 3A36 14357 00009736 060606060606080A0C- db 6, 6, 6, 6, 6, 6, 8, 0Ah, 0Ch, 0Eh, 10h 14357 0000973F 0E10 14358 00009741 14181C20262E343C44- db 14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h 14358 0000974A 3A36 14359 0000974C 0C0C0C0C0C0C101418- db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 10h, 14h, 18h, 1Ch, 20h 14359 00009755 1C20 14360 00009757 283038404C5A020202- db 28h, 30h, 38h, 40h, 4Ch, 5Ah, 2, 2, 2, 2, 2 14360 00009760 0202 14361 00009762 000000000000000000- db 10 dup(0) ; data align 14361 0000976B 00 14362 0000976C 0404040406080A0C0E- mp3_band_size_short db 4, 4, 4, 4, 6, 8, 0Ah, 0Ch, 0Eh, 12h, 16h, 1Eh, 38h 14362 00009775 12161E38 14363 00009779 0404040406060A0C0E- db 4, 4, 4, 4, 6, 6, 0Ah, 0Ch, 0Eh, 10h, 14h, 1Ah, 42h ; byte[9][16] ? ; byte [9][13] 14363 00009782 10141A42 14364 00009786 0404040406080C1014- db 4, 4, 4, 4, 6, 8, 0Ch, 10h, 14h, 1Ah, 22h, 2Ah, 0Ch 14364 0000978F 1A222A0C 14365 00009793 0404040606080A0E12- db 4, 4, 4, 6, 6, 8, 0Ah, 0Eh, 12h, 1Ah, 20h, 2Ah, 12h 14365 0000979C 1A202A12 14366 000097A0 04040406080A0C0E12- db 4, 4, 4, 6, 8, 0Ah, 0Ch, 0Eh, 12h, 18h, 20h, 2Ch, 0Ch 14366 000097A9 18202C0C 14367 000097AD 04040406080A0C0E12- db 4, 4, 4, 6, 8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h 14367 000097B6 181E2812 14368 000097BA 04040406080A0C0E12- db 4, 4, 4, 6, 8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h 14368 000097C3 181E2812 14369 000097C7 04040406080A0C0E12- db 4, 4, 4, 6, 8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h 14369 000097D0 181E2812 14370 000097D4 0808080C1014181C24- db 8, 8, 8, 0Ch, 10h, 14h, 18h, 1Ch, 24h, 2, 2, 2, 1Ah 14370 000097DD 0202021A 14371 000097E1 000000000000000000- db 11 dup(0) ; data align 14371 000097EA 0000 14372 000097EC 000000000000000000- mp3_pretab db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 14372 000097F5 0000 14373 000097F7 000000000000000000- db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 14373 00009800 0000 14374 00009802 000000000000000000- db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 14374 0000980B 0000 14375 0000980D 010101010202030303- db 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0 14375 00009816 0200 14376 00009818 00000000 db 4 dup(0) ; data align 14377 0000981C 4B1D4200028FDB0016- mp3_mdct_win_src dd 00421D4Bh, 00DB8F02h, 019C7F16h, 029ADCC0h, 04000001h, 06246711h 14377 00009825 7F9C01C0DC9A020100- 14377 0000982E 000411672406 14378 00009834 4506EE090CD6A71238- dd 09EE0645h, 12A7D60Ch, 3DF40538h,0BC63D32Fh,0E7B0025Bh,0F069D222h ; these are sine values divided by cosine values... 14378 0000983D 05F43D2FD363BC5B02- 14378 00009846 B0E722D269F0 14379 0000984C 567133F467D857F6A8- dd 0F4337156h,0F657D867h,0F7BCFBA8h,0F8BB5952h,0F97C4965h,0FA15BB1Ch 14379 00009855 FBBCF75259BBF86549- 14379 0000985E 7CF91CBB15FA 14380 00009864 936D94FA8E5100FB70- dd 0FA946D93h,0FB00518Eh,0FB5EA270h,0FBB2FDEAh,0FC000000h,0FC479F38h 14380 0000986D A25EFBEAFDB2FB0000- 14380 00009876 00FC389F47FC 14381 0000987C 09668BFC9898CCFC0B- dd 0FC8B6609h,0FCCC9898h,0FD0C4F0Bh,0FD4B895Ch,0FD8B3FCFh,0FDCC725Eh 14381 00009885 4F0CFD5C894BFDCF3F- 14381 0000988E 8BFD5E72CCFD 14382 00009894 2F3910FE67D857FE7D- dd 0FE10392Fh,0FE57D867h,0FEA4DA7Dh,0FEF935F7h,0FF5786D9h,0FFC36AD5h 14382 0000989D DAA4FEF735F9FED986- 14382 000098A6 57FFD56AC3FF 14383 000098AC 4B1D4200028FDB0016- dd 00421D4Bh, 00DB8F02h, 019C7F16h, 029ADCC0h, 04000001h, 06246711h 14383 000098B5 7F9C01C0DC9A020100- 14383 000098BE 000411672406 14384 000098C4 4506EE090CD6A71238- dd 09EE0645h, 12A7D60Ch, 3DF40538h,0BC63D32Fh,0E7B0025Bh,0F069D222h 14384 000098CD 05F43D2FD363BC5B02- 14384 000098D6 B0E722D269F0 14385 000098DC 567133F467D857F6A8- dd 0F4337156h,0F657D867h,0F7BCFBA8h,0F8BB5952h,0F97C4965h,0FA15BB1Ch 14385 000098E5 FBBCF75259BBF86549- 14385 000098EE 7CF91CBB15FA 14386 000098F4 291B93FAB946F5FABB- dd 0FA931B29h,0FAF546B9h,0FB41DABBh,0FB7D8F97h,0FBABA162h,0FBCE4E62h 14386 000098FD DA41FB978F7DFB62A1- 14386 00009906 ABFB624ECEFB 14387 0000990C 671CF0FBAFC845FC0D- dd 0FBF01C67h,0FC45C8AFh,0FCD2D50Dh,0FD9008D0h,0FE74C032h,0FF771894h 14387 00009915 D5D2FCD00890FD32C0- 14387 0000991E 74FE941877FF 14388 00009924 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 14388 0000992D 000000000000000000- 14388 00009936 000000000000 14389 0000993C 028FDB00010000040C- dd 00DB8F02h, 04000001h, 12A7D60Ch,0E7B0025Bh,0F657D867h,0F97C4965h 14389 00009945 D6A7125B02B0E767D8- 14389 0000994E 57F665497CF9 14390 00009954 8E5100FB000000FC98- dd 0FB00518Eh,0FC000000h,0FCCC9898h,0FD8B3FCFh,0FE57D867h,0FF5786D9h 14390 0000995D 98CCFCCF3F8BFD67D8- 14390 00009966 57FED98657FF 14391 0000996C 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 14391 00009975 000000000000000000- 14391 0000997E 000000000000 14392 00009984 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 14392 0000998D 000000000000000000- 14392 00009996 000000000000 14393 0000999C 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 14393 000099A5 000000000000000000- 14393 000099AE 000000000000 14394 000099B4 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 14394 000099BD 000000000000000000- 14394 000099C6 000000000000 14395 000099CC 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 14395 000099D5 000000000000000000- 14395 000099DE 000000000000 14396 000099E4 B58869025237BA0B4F- dd 026988B5h, 0BBA3752h, 37D3294Fh,0B73F655Bh,0E3B0025Bh,0EDAD5D13h 14396 000099ED 29D3375B653FB75B02- 14396 000099F6 B0E3135DADED 14397 000099FC A2ADB2F2B8288CF5D6- dd 0F2B2ADA2h,0F58C28B8h,0F75657D6h,0F88E2C57h,0F96DE565h,0FA1449CDh 14397 00009A05 5756F7572C8EF865E5- 14397 00009A0E 6DF9CD4914FA 14398 00009A14 936D94FA8E5100FB70- dd 0FA946D93h,0FB00518Eh,0FB5EA270h,0FBB2FDEAh,0FC000000h,0FC479F38h 14398 00009A1D A25EFBEAFDB2FB0000- 14398 00009A26 00FC389F47FC 14399 00009A2C 09668BFC9898CCFC0B- dd 0FC8B6609h,0FCCC9898h,0FD0C4F0Bh,0FD4B895Ch,0FD8B3FCFh,0FDCC725Eh 14399 00009A35 4F0CFD5C894BFDCF3F- 14399 00009A3E 8BFD5E72CCFD 14400 00009A44 2F3910FE67D857FE7D- dd 0FE10392Fh,0FE57D867h,0FEA4DA7Dh,0FEF935F7h,0FF5786D9h,0FFC36AD5h 14400 00009A4D DAA4FEF735F9FED986- 14400 00009A56 57FFD56AC3FF 14401 00009A5C 0000000000000040 mp3_is_table_normal dd 00000000h, 40000000h 14402 00009A64 BB58860D46A77932 dd 0D8658BBh, 3279A746h 14403 00009A6C D1F56C17300A9328 dd 176CF5D1h, 28930A30h 14404 00009A74 0000002000000020 dd 20000000h, 20000000h 14405 00009A7C 300A9328D1F56C17 dd 28930A30h, 176CF5D1h 14406 00009A84 46A77932BB58860D dd 3279A746h, 0D8658BBh 14407 00009A8C 0000004000000000 dd 40000000h, 00000000h 14408 00009A94 00000080 mp3_is_table_lsf_src dd 80000000h 14409 ; sqrt based constants... 14410 ; 40000000h*2 ; 2.0 (2^1.00) aka 2 14411 00009A98 667EA26B dd 6BA27E66h ; 35D13F33h*2 ; 1.681 (2^0.75) 14412 00009A9C 9A79825A dd 5A82799Ah ; 2D413CCDh*2 ; 1.414 (2^0.50) aka sqrt(2) 14413 00009AA0 2AF81B4C dd 4C1BF82Ah ; 260DFC15h*2 ; 1.189 (2^0.25) aka sqrt(sqrt(2)) 14414 00009AA4 00000080 mp3_pow2_quarters dd 80000000h 14415 ; 40000000h*2 ; 2^(0/4) 14416 00009AA8 52F03798 dd 9837F052h ; 4C1BF829h*2 ; 2^(1/4) 14417 00009AAC 34F304B5 dd 0B504F334h ; 5A82799Ah*2 ; 2^(2/4) 14418 00009AB0 CCFC44D7 dd 0D744FCCCh ; 6BA27E66h*2 ; 2^(3/4) 14419 00009AB4 00000000 mp3_initialized dd 0 14420 00009AB8 12000000 mp3_huff_num_entries dd 12h 14421 00009ABC 00 wrchr_buf db 0 14422 00009ABD 90 align 4 14423 ; LPCSTR mp3_src_fname 14424 00009AC0 00000000 mp3_src_fname dd 0 14425 ; LPCSTR mp3_dst_fname 14426 00009AC4 00000000 mp3_dst_fname dd 0 14427 ; LPCSTR mp3_pcm_fname 14428 00009AC8 00000000 mp3_pcm_fname dd 0 14429 00009ACC 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 14429 00009AD5 415645666D74201000- 14429 00009ADE 000001000200000000- 14429 00009AE7 000000000004001000- 14429 00009AF0 6461746100000000 14430 ; 21/10/2024 14431 00009AF8 00000000 zero dd 0 14432 00009AFC 00 num_enqueued_frames db 0 14433 00009AFD 617564696F20647572- txt_decode_timing1 db 'audio duration ',0 14433 00009B06 6174696F6E2000 14434 00009B0D 206D696C6C69736563- txt_decode_timing2 db ' milliseconds, decoded in ',0 14434 00009B16 6F6E64732C20646563- 14434 00009B1F 6F64656420696E2000 14435 00009B28 206D696C6C69736563- txt_decode_timing3 db ' milliseconds',0Dh,0Ah,0 14435 00009B31 6F6E64730D0A00 14436 00009B38 20636C6F636B206379- txt_clks_per_second db ' clock cycles per second:',0Dh,0Ah,0 14436 00009B41 636C65732070657220- 14436 00009B4A 7365636F6E643A0D0A- 14436 00009B53 00 14437 00009B54 0303020106060505 huff_tree_list_numbits db 3, 3, 2, 1, 6, 6, 5, 5 14438 00009B5C 0503030301060605 db 5, 3, 3, 3, 1, 6, 6, 5 14439 00009B64 0505030202020808 db 5, 5, 3, 2, 2, 2, 8, 8 14440 00009B6C 0706070707070606 db 7, 6, 7, 7, 7, 7, 6, 6 14441 00009B74 0606030303010707 db 6, 6, 3, 3, 3, 1, 7, 7 14442 00009B7C 0606060505050504 db 6, 6, 6, 5, 5, 5, 5, 4 14443 00009B84 0404030203030A0A db 4, 4, 3, 2, 3, 3, 0Ah, 0Ah 14444 00009B8C 0A0A090909090808 db 0Ah, 0Ah, 9, 9, 9, 9, 8, 8 14445 00009B94 0909080909080807 db 9, 9, 8, 9, 9, 8, 8, 7 14446 00009B9C 0707080808080707 db 7, 7, 8, 8, 8, 8, 7, 7 14447 00009BA4 0707060506060403 db 7, 7, 6, 5, 6, 6, 4, 3 14448 00009BAC 03010B0B0A090A0A db 3, 1, 0Bh, 0Bh, 0Ah, 9, 0Ah, 0Ah 14449 00009BB4 0909090808090909 db 9, 9, 9, 8, 8, 9, 9, 9 14450 00009BBC 0908080807080808 db 9, 8, 8, 8, 7, 8, 8, 8 14451 00009BC4 0808080808060606 db 8, 8, 8, 8, 8, 6, 6, 6 14452 00009BCC 0404020303020909 db 4, 4, 2, 3, 3, 2, 9, 9 14453 00009BD4 0808090908080808 db 8, 8, 9, 9, 8, 8, 8, 8 14454 00009BDC 0707070808070707 db 7, 7, 7, 8, 8, 7, 7, 7 14455 00009BE4 0706060606050506 db 7, 6, 6, 6, 6, 5, 5, 6 14456 00009BEC 0605050404040303 db 6, 5, 5, 4, 4, 4, 3, 3 14457 00009BF4 03030B0B0B0B0B0B db 3, 3, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 14458 00009BFC 0A0A0A0A0A0A0A0B db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Bh 14459 00009C04 0B0A09090A0A0909 db 0Bh, 0Ah, 9, 9, 0Ah, 0Ah, 9, 9 14460 00009C0C 0A0A090A0A080809 db 0Ah, 0Ah, 9, 0Ah, 0Ah, 8, 8, 9 14461 00009C14 090A0A09090A0A08 db 9, 0Ah, 0Ah, 9, 9, 0Ah, 0Ah, 8 14462 00009C1C 0808090909090909 db 8, 8, 9, 9, 9, 9, 9, 9 14463 00009C24 0808080808080707 db 8, 8, 8, 8, 8, 8, 7, 7 14464 00009C2C 0707060606060403 db 7, 7, 6, 6, 6, 6, 4, 3 14465 00009C34 03010A0A0A0A0A0A db 3, 1, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 14466 00009C3C 0A0B0B0A0A090909 db 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 9, 9, 9 14467 00009C44 0A0A0A0A08080909 db 0Ah, 0Ah, 0Ah, 0Ah, 8, 8, 9, 9 14468 00009C4C 0708080808080909 db 7, 8, 8, 8, 8, 8, 9, 9 14469 00009C54 0909080708080707 db 9, 9, 8, 7, 8, 8, 7, 7 14470 00009C5C 0808080909080808 db 8, 8, 8, 9, 9, 8, 8, 8 14471 00009C64 0808080707060607 db 8, 8, 8, 7, 7, 6, 6, 7 14472 00009C6C 0706050405050303 db 7, 6, 5, 4, 5, 5, 3, 3 14473 00009C74 03020A0A09090909 db 3, 2, 0Ah, 0Ah, 9, 9, 9, 9 14474 00009C7C 0909090808090908 db 9, 9, 9, 8, 8, 9, 9, 8 14475 00009C84 0808080808090908 db 8, 8, 8, 8, 8, 9, 9, 8 14476 00009C8C 0808080809090707 db 8, 8, 8, 8, 9, 9, 7, 7 14477 00009C94 0708080808080807 db 7, 8, 8, 8, 8, 8, 8, 7 14478 00009C9C 0707070808070707 db 7, 7, 7, 8, 8, 7, 7, 7 14479 00009CA4 0606060607070605 db 6, 6, 6, 6, 7, 7, 6, 5 14480 00009CAC 0505040405050403 db 5, 5, 4, 4, 5, 5, 4, 3 14481 00009CB4 0303131312111010 db 3, 3, 13h, 13h, 12h, 11h, 10h, 10h 14482 00009CBC 1010101010101010 db 10h, 10h, 10h, 10h, 10h, 10h, 10h, 10h 14483 00009CC4 11110F0F10100F0F db 11h, 11h, 0Fh, 0Fh, 10h, 10h, 0Fh, 0Fh 14484 00009CCC 0F0F0F0F0F0F0F0F db 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh 14485 00009CD4 10100F10100E0E0F db 10h, 10h, 0Fh, 10h, 10h, 0Eh, 0Eh, 0Fh 14486 00009CDC 0F0F0F0E0E0E0E0E db 0Fh, 0Fh, 0Fh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh 14487 00009CE4 0E0E0E0E0E0E0F0F db 0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Fh, 0Fh 14488 00009CEC 0E0D0E0E0D0D0E0E db 0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh, 0Eh 14489 00009CF4 0D0E0E0D0E0E0D0E db 0Dh, 0Eh, 0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Eh 14490 00009CFC 0E0D0D0E0E0C0C0C db 0Eh, 0Dh, 0Dh, 0Eh, 0Eh, 0Ch, 0Ch, 0Ch 14491 00009D04 0D0D0D0D0D0D0C0D db 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh 14492 00009D0C 0D0C0C0D0D0D0D0D db 0Dh, 0Ch, 0Ch, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh 14493 00009D14 0D0D0D0D0D0D0D0C db 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch 14494 00009D1C 0C0D0D0C0C0C0C0D db 0Ch, 0Dh, 0Dh, 0Ch, 0Ch, 0Ch, 0Ch, 0Dh 14495 00009D24 0D0D0D0C0D0D0C0B db 0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Ch, 0Bh 14496 00009D2C 0C0C0C0C0C0C0C0C db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 14497 00009D34 0B0B0B0B0C0C0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh 14498 00009D3C 0C0C0B0C0C0C0C0B db 0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Bh 14499 00009D44 0B0C0C0B0C0C0B0C db 0Bh, 0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ch 14500 00009D4C 0C0B0C0C0A0A0A0B db 0Ch, 0Bh, 0Ch, 0Ch, 0Ah, 0Ah, 0Ah, 0Bh 14501 00009D54 0B0B0B0B0B0B0B0A db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah 14502 00009D5C 0A0A0A0B0B0A0B0B db 0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh 14503 00009D64 0A0B0B0B0B0A0A0B db 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh 14504 00009D6C 0B0A0A0B0B0B0B0B db 0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 14505 00009D74 0B09090A0A0A0A0A db 0Bh, 9, 9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 14506 00009D7C 0B0B0909090A0A09 db 0Bh, 0Bh, 9, 9, 9, 0Ah, 0Ah, 9 14507 00009D84 090A0A0A0A0A0A0A db 9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 14508 00009D8C 0A0A0A0809090909 db 0Ah, 0Ah, 0Ah, 8, 9, 9, 9, 9 14509 00009D94 09090A0A09090908 db 9, 9, 0Ah, 0Ah, 9, 9, 9, 8 14510 00009D9C 0809090909090908 db 8, 9, 9, 9, 9, 9, 9, 8 14511 00009DA4 0708080808070707 db 7, 8, 8, 8, 8, 7, 7, 7 14512 00009DAC 0707060606060404 db 7, 7, 6, 6, 6, 6, 4, 4 14513 00009DB4 03010D0D0D0D0C0D db 3, 1, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh 14514 00009DBC 0D0D0D0D0D0C0D0D db 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh 14515 00009DC4 0C0C0C0C0C0C0C0C db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 14516 00009DCC 0C0C0C0C0C0C0C0C db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 14517 00009DD4 0C0C0C0C0C0C0C0D db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Dh 14518 00009DDC 0D0B0B0C0C0C0C0B db 0Dh, 0Bh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Bh 14519 00009DE4 0B0B0B0B0B0C0C0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ch, 0Ch, 0Bh 14520 00009DEC 0B0B0B0B0B0B0B0C db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ch 14521 00009DF4 0C0B0B0B0B0B0B0B db 0Ch, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 14522 00009DFC 0B0B0B0B0B0B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 14523 00009E04 0B0B0B0B0B0B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 14524 00009E0C 0B0B0C0C0B0B0B0B db 0Bh, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh, 0Bh, 0Bh 14525 00009E14 0B0B0A0B0B0B0B0B db 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 14526 00009E1C 0B0A0A0B0B0A0A0A db 0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah 14527 00009E24 0A0B0B0A0A0A0A0A db 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 14528 00009E2C 0A0A0B0B0A0A0A0A db 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah 14529 00009E34 0A0B0B090A0A0A0A db 0Ah, 0Bh, 0Bh, 9, 0Ah, 0Ah, 0Ah, 0Ah 14530 00009E3C 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 14531 00009E44 090A0A0A0A090A0A db 9, 0Ah, 0Ah, 0Ah, 0Ah, 9, 0Ah, 0Ah 14532 00009E4C 090A0A0A0A0A0A0A db 9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 14533 00009E54 0A09090909090909 db 0Ah, 9, 9, 9, 9, 9, 9, 9 14534 00009E5C 0A0A090909090909 db 0Ah, 0Ah, 9, 9, 9, 9, 9, 9 14535 00009E64 0A0A090909090909 db 0Ah, 0Ah, 9, 9, 9, 9, 9, 9 14536 00009E6C 0809090909090909 db 8, 9, 9, 9, 9, 9, 9, 9 14537 00009E74 0909090808080809 db 9, 9, 9, 8, 8, 8, 8, 9 14538 00009E7C 0909090909090908 db 9, 9, 9, 9, 9, 9, 9, 8 14539 00009E84 0808080808090908 db 8, 8, 8, 8, 8, 9, 9, 8 14540 00009E8C 0808080808080909 db 8, 8, 8, 8, 8, 8, 9, 9 14541 00009E94 0807080807070707 db 8, 7, 8, 8, 7, 7, 7, 7 14542 00009E9C 0808070707070706 db 8, 8, 7, 7, 7, 7, 7, 6 14543 00009EA4 0707060607070606 db 7, 7, 6, 6, 7, 7, 6, 6 14544 00009EAC 0605050505050304 db 6, 5, 5, 5, 5, 5, 3, 4 14545 00009EB4 04030B0B0B0B0B0B db 4, 3, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 14546 00009EBC 0B0B0A0B0B0B0B0A db 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah 14547 00009EC4 0A0A0A0A080A0A09 db 0Ah, 0Ah, 0Ah, 0Ah, 8, 0Ah, 0Ah, 9 14548 00009ECC 0909090A1011110F db 9, 9, 9, 0Ah, 10h, 11h, 11h, 0Fh 14549 00009ED4 0F10100E0F0F0E0E db 0Fh, 10h, 10h, 0Eh, 0Fh, 0Fh, 0Eh, 0Eh 14550 00009EDC 0F0F0E0E0F0F0F0F db 0Fh, 0Fh, 0Eh, 0Eh, 0Fh, 0Fh, 0Fh, 0Fh 14551 00009EE4 0E0F0F0E0D080909 db 0Eh, 0Fh, 0Fh, 0Eh, 0Dh, 8, 9, 9 14552 00009EEC 08080D0E0E0E0E0E db 8, 8, 0Dh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh 14553 00009EF4 0E0E0E0E0E0D0D0E db 0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh 14554 00009EFC 0E0E0E0D0E0E0D0D db 0Eh, 0Eh, 0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Dh 14555 00009F04 0D0E0E0E0E0D0D0E db 0Dh, 0Eh, 0Eh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh 14556 00009F0C 0E0D0E0E0C0D0D0D db 0Eh, 0Dh, 0Eh, 0Eh, 0Ch, 0Dh, 0Dh, 0Dh 14557 00009F14 0D0D0D0D0D0D0D0D db 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh 14558 00009F1C 0D0D0D0C0D0D0D0D db 0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Dh, 0Dh 14559 00009F24 0D0D0C0D0D0C0C0D db 0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Ch, 0Ch, 0Dh 14560 00009F2C 0D0B0C0C0C0C0C0C db 0Dh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 14561 00009F34 0C0D0D0B0C0C0C0C db 0Ch, 0Dh, 0Dh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch 14562 00009F3C 0B0C0C0C0C0C0C0C db 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 14563 00009F44 0C0B0C0C0B0B0B0B db 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh, 0Bh, 0Bh 14564 00009F4C 0C0C0C0C0C0C0C0C db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 14565 00009F54 0B0C0C0B0C0C0B0C db 0Bh, 0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ch 14566 00009F5C 0C0B0C0C0B0A0A0B db 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ah, 0Ah, 0Bh 14567 00009F64 0B0B0B0B0B0A0A0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh 14568 00009F6C 0B0A0A0B0B0B0B0B db 0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 14569 00009F74 0B0B0B0A0B0B0A0A db 0Bh, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah 14570 00009F7C 0A0B0B0A0A0B0B0A db 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah 14571 00009F84 0A0B0B0A09090A0A db 0Ah, 0Bh, 0Bh, 0Ah, 9, 9, 0Ah, 0Ah 14572 00009F8C 0A0A0A0A0909090A db 0Ah, 0Ah, 0Ah, 0Ah, 9, 9, 9, 0Ah 14573 00009F94 0A090A0A09090809 db 0Ah, 9, 0Ah, 0Ah, 9, 9, 8, 9 14574 00009F9C 0909090909090908 db 9, 9, 9, 9, 9, 9, 9, 8 14575 00009FA4 0809090808070708 db 8, 9, 9, 8, 8, 7, 7, 8 14576 00009FAC 0807060606060404 db 8, 7, 6, 6, 6, 6, 4, 4 14577 00009FB4 0301080808080808 db 3, 1, 8, 8, 8, 8, 8, 8 14578 00009FBC 0808070808070708 db 8, 8, 7, 8, 8, 7, 7, 8 14579 00009FC4 0807070707070707 db 8, 7, 7, 7, 7, 7, 7, 7 14580 00009FCC 0707070707080809 db 7, 7, 7, 7, 7, 8, 8, 9 14581 00009FD4 0B0B0B0B0B0B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 14582 00009FDC 0B0B0B0B0B0B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 14583 00009FE4 0B0B0B0B0B0B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 14584 00009FEC 0B0B0B0B040B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 4, 0Bh, 0Bh, 0Bh 14585 00009FF4 0B0C0C0B0A0B0B0A db 0Bh, 0Ch, 0Ch, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah 14586 00009FFC 0A0A0A0B0B0A0A0A db 0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah 14587 0000A004 0A0B0B0A0A0A0A0A db 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 14588 0000A00C 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 14589 0000A014 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 14590 0000A01C 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 14591 0000A024 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 14592 0000A02C 0A0A0B0B0A0A0A0A db 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah 14593 0000A034 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 14594 0000A03C 0A0B0B0A0B0B0A09 db 0Ah, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah, 9 14595 0000A044 0A0A0A0A0B0B0A09 db 0Ah, 0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 9 14596 0000A04C 090A0A090A0A0A0A db 9, 0Ah, 0Ah, 9, 0Ah, 0Ah, 0Ah, 0Ah 14597 0000A054 09090A0A09090909 db 9, 9, 0Ah, 0Ah, 9, 9, 9, 9 14598 0000A05C 0909090909090909 db 9, 9, 9, 9, 9, 9, 9, 9 14599 0000A064 0909090909090909 db 9, 9, 9, 9, 9, 9, 9, 9 14600 0000A06C 0909090909090909 db 9, 9, 9, 9, 9, 9, 9, 9 14601 0000A074 0909090909090909 db 9, 9, 9, 9, 9, 9, 9, 9 14602 0000A07C 0A0A0909090A0A08 db 0Ah, 0Ah, 9, 9, 9, 0Ah, 0Ah, 8 14603 0000A084 0909080808080808 db 9, 9, 8, 8, 8, 8, 8, 8 14604 0000A08C 0808080808080809 db 8, 8, 8, 8, 8, 8, 8, 9 14605 0000A094 0908080808080809 db 9, 8, 8, 8, 8, 8, 8, 9 14606 0000A09C 0907080807070707 db 9, 7, 8, 8, 7, 7, 7, 7 14607 0000A0A4 0708080707060607 db 7, 8, 8, 7, 7, 6, 6, 7 14608 0000A0AC 0706050506060404 db 7, 6, 5, 5, 6, 6, 4, 4 14609 0000A0B4 0404060606060606 db 4, 4, 6, 6, 6, 6, 6, 6 14610 0000A0BC 0505050505040404 db 5, 5, 5, 5, 5, 4, 4, 4 14611 0000A0C4 0401040404040404 db 4, 1, 4, 4, 4, 4, 4, 4 14612 0000A0CC 0404040404040404 db 4, 4, 4, 4, 4, 4, 4, 4 14613 0000A0D4 0404 db 4, 4 14614 0000A0D6 03 _@@const_3 db 3 14615 0000A0D7 000000 db 3 dup(0) 14616 0000A0DA [3A480000] mp3_synth_filter_procs dd synth_16bit_shift_0_slow ; SYNTH_MACRO 0,0,0 14617 0000A0DE [264B0000] dd synth_16bit_shift_1_slow ; SYNTH_MACRO 0,1,0 14618 0000A0E2 [184E0000] dd synth_16bit_shift_2_slow ; SYNTH_MACRO 0,2,0 14619 0000A0E6 [0A510000] dd synth_8bit_shift_0_slow ; SYNTH_MACRO 1,0,0 14620 0000A0EA [EB530000] dd synth_8bit_shift_1_slow ; SYNTH_MACRO 1,1,0 14621 0000A0EE [D2560000] dd synth_8bit_shift_2_slow ; SYNTH_MACRO 1,2,0 14622 0000A0F2 [FB350000] dd synth_16bit_shift_0_fast ; SYNTH_MACRO 0,0,1 14623 0000A0F6 [07390000] dd synth_16bit_shift_1_fast ; SYNTH_MACRO 0,1,1 14624 0000A0FA [193C0000] dd synth_16bit_shift_2_fast ; SYNTH_MACRO 0,2,1 14625 0000A0FE [2B3F0000] dd synth_8bit_shift_0_fast ; SYNTH_MACRO 1,0,1 14626 0000A102 [2C420000] dd synth_8bit_shift_1_fast ; SYNTH_MACRO 1,1,1 14627 0000A106 [33450000] dd synth_8bit_shift_2_fast ; SYNTH_MACRO 1,2,1 14628 ;txt_hello db 'nocash mp3 decoder v1.4, 2024 martin korth, press ctrl+c to quit,' 14629 ; db ' BDS now',0Dh,0Ah,0 14630 ; Erdogan Tan - 17/10/2024 14631 0000A10A 0D0A txt_hello db 13,10 14632 ;db 'NOCASH MP3 PLAYER v1.4 for Windows ',0 14633 ; 09/01/2025 14634 0000A10C 4E4F43415348204D50- db 'NOCASH MP3 PLAYER v1.0 for TRDOS386 ',0 14634 0000A115 3320504C4159455220- 14634 0000A11E 76312E3020666F7220- 14634 0000A127 5452444F5333383620- 14634 0000A130 00 14635 14636 0000A131 66696C653A2000 txt_file db 'file: ',0 14637 0000A138 66696C652073697A65- txt_file_size db 'file size: ',0 14637 0000A141 3A2000 14638 0000A144 2C206964332073697A- txt_id3_size db ', id3 size: ',0 14638 0000A14D 653A2000 14639 0000A151 2C207461672073697A- txt_tag_size db ', tag size: ',0 14639 0000A15A 653A2000 14640 0000A15E 696E7075743A2000 txt_input db 'input: ',0 14641 0000A166 6F75747075743A2000 txt_output db 'output: ',0 14642 0000A16F 20687A2C2000 txt_hz db ' hz, ',0 14643 0000A175 206368616E6E656C73- txt_channels db ' channels, ',0 14643 0000A17E 2C2000 14644 0000A181 2062697400 txt_bit db ' bit',0 14645 0000A186 206B6269742F7300 txt_kbit_s db ' kbit/s',0 14646 0000A18E 63616E6E6F74206F70- txt_not_found db 'cannot open source file',0Dh,0Ah,0 14646 0000A197 656E20736F75726365- 14646 0000A1A0 2066696C650D0A00 14647 0000A1A8 75736167653A206D70- txt_help db 'usage: mp3play input.mp3 [output.wav] [verify.pcm] [/test]', 0Dh,0Ah 14647 0000A1B1 33706C617920696E70- 14647 0000A1BA 75742E6D7033205B6F- 14647 0000A1C3 75747075742E776176- 14647 0000A1CC 5D205B766572696679- 14647 0000A1D5 2E70636D5D205B2F74- 14647 0000A1DE 6573745D0D0A 14648 0000A1E4 202020202020202020- db ' [/mono] [/8bit] [/fast] [/half|/quarter]',0Dh,0Ah,0 14648 0000A1ED 202020202020202020- 14648 0000A1F6 202020202020205B2F- 14648 0000A1FF 6D6F6E6F5D205B2F38- 14648 0000A208 6269745D205B2F6661- 14648 0000A211 73745D205B2F68616C- 14648 0000A21A 667C2F717561727465- 14648 0000A223 725D0D0A00 14649 0000A228 766572696679206D61- _@@txt_verify1 db 'verify max difference = ',0 14649 0000A231 782064696666657265- 14649 0000A23A 6E6365203D2000 14650 0000A241 206174206D70333A00 _@@txt_verify1_at_mp3 db ' at mp3:',0 14651 0000A24A 2C2061766572616765- _@@txt_verify2 db ', average difference = ',0 14651 0000A253 20646966666572656E- 14651 0000A25C 6365203D2000 14652 14653 ; Erdogan Tan - 17/10/2024 14654 ;db 'NOCASH MP3 PLAYER v1.4 for Windows ',0 14655 0000A262 287072657373204354- txt_ctrlc db '(press CTRL+C to quit)', 13,10,0 14655 0000A26B 524C2B4320746F2071- 14655 0000A274 756974290D0A00 14656 txt_ctrlc_size equ $ - txt_ctrlc 14657 0000A27B 0D0A txt_about db 13,10 14658 ;db '----------------------------------',13,10 14659 0000A27D 2D2D2D2D2D2D2D2D2D- db '-----------------------------------',13,10 14659 0000A286 2D2D2D2D2D2D2D2D2D- 14659 0000A28F 2D2D2D2D2D2D2D2D2D- 14659 0000A298 2D2D2D2D2D2D2D2D0D- 14659 0000A2A1 0A 14660 0000A2A2 4572646F67616E2054- db 'Erdogan Tan - 01/02/2025 (Assembler: NASM)', 13,10 14660 0000A2AB 616E202D2030312F30- 14660 0000A2B4 322F32303235202841- 14660 0000A2BD 7373656D626C65723A- 14660 0000A2C6 204E41534D290D0A 14661 0000A2CE 4F726967696E616C20- db 'Original code: MP3PLAYER.EXE v1.4 (20/09/2024)', 13,10 14661 0000A2D7 636F64653A204D5033- 14661 0000A2E0 504C415945522E4558- 14661 0000A2E9 452076312E34202832- 14661 0000A2F2 302F30392F32303234- 14661 0000A2FB 290D0A 14662 0000A2FE 202020202020202020- db ' by Martin Korth (TASM source code)' 14662 0000A307 202020202020627920- 14662 0000A310 4D617274696E204B6F- 14662 0000A319 72746820285441534D- 14662 0000A322 20736F757263652063- 14662 0000A32B 6F646529 14663 0000A32F 0D0A0D0A00 db 13,10,13,10,0 14664 0000A334 76312E342E30 db 'v1.4.0' 14665 ; 10/01/2025 14666 0000A33A 00 half_buffer db 0 14667 14668 ; =========================================================================== 14669 ; Uninitialized DATA (BSS) 14670 ; =========================================================================== 14671 14672 0000A33B 90 align 4 14673 14674 bss_start: 14675 14676 ; 10/01/2025 14677 ABSOLUTE bss_start 14678 14679 ; 12/01/2025 14680 ;;;; 14681 ; AC97 specific 14682 0000A33C ???????? bus_dev_fn resd 1 14683 0000A340 ???????? dev_vendor resd 1 14684 0000A344 ???? NAMBAR resw 1 14685 0000A346 ???? NABMBAR resw 1 14686 ; SB16 specific 14687 0000A348 ???????? audio_io_base resd 1 14688 ac97_int_ln_reg: 14689 0000A34C ?? audio_intr resb 1 14690 ;;;; 14691 14692 0000A34D ?????? alignb 4 14693 14694 ;;; 14695 ; 20/10/2024 (TRDOS 386 specific parameters) 14696 0000A350 ?? audio_hardware resb 1 14697 0000A351 ?? vra resb 1 14698 0000A352 ???? max_frequency resw 1 14699 0000A354 ?? srb resb 1 14700 0000A355 ?? volume_level resb 1 14701 0000A356 ?? blocks resb 1 14702 0000A357 ?? resb 1 14703 0000A358 ???????? buffer_size resd 1 14704 ;;; 14705 14706 ;;;; 14707 ; 13/01/2025 (Interpolation parameters) 14708 0000A35C ???????? conversion resd 1 ; pointer to convers(t)ion 14709 ; or interpolation proc address 14710 0000A360 ???????? loadsize resd 1 ; decoding buffer size 14711 0000A364 ?? interpolation resb 1 ; interpolation status 14712 0000A365 ?? counter resb 1 ; 15/01/2025 14713 0000A366 ???? resw 1 14714 ;;;; 14715 14716 mp3_context_start: 14717 0000A368 main_data_pool_start resb 4096 14718 0000B368 ???????? main_data_pool_wr_ptr resd 1 14719 0000B36C ???????? mp3_src_data_location resd 1 14720 0000B370 ???????? mp3_src_frame_size resd 1 14721 0000B374 ???????? mp3_src_frame_end resd 1 14722 0000B378 ???????? mp3_hdr_32bit_header resd 1 14723 0000B37C ???????? mp3_hdr_flag_crc resd 1 14724 0000B380 ???????? mp3_hdr_flag_mpeg25 resd 1 14725 0000B384 ???????? mp3_hdr_flag_padding resd 1 14726 0000B388 ???????? mp3_sample_rate resd 1 14727 0000B38C ???????? mp3_hdr_sample_rate_index resd 1 14728 0000B390 ???????? mp3_bit_rate resd 1 14729 0000B394 ???????? mp3_src_num_channels resd 1 14730 0000B398 ???????? mp3_output_num_channels resd 1 14731 0000B39C ???????? mp3_output_sample_rate resd 1 14732 0000B3A0 ???????? mp3_bytes_per_sample resd 1 14733 0000B3A4 ???????? mp3_curr_syn_index resd 1 14734 0000B3A8 ???????? mp3_curr_syn_dst resd 1 14735 0000B3AC ???????? mp3_nb_frames resd 1 14736 0000B3B0 ???????? mp3_hdr_mode_val resd 1 14737 0000B3B4 ???????? mp3_hdr_mode_ext resd 1 14738 0000B3B8 ???????? mp3_hdr_flag_lsf resd 1 14739 0000B3BC ???????? mp3_synth_filter_proc resd 1 14740 14741 0000B3C0 mp3_synth_buf resd 2048 14742 0000D3C0 ???????????????? mp3_synth_index resd 2 14743 0000D3C8 mp3_sb_samples resd 2304 14744 ; MP3_MAX_CHANNELS*36*SBLIMIT 14745 0000F7C8 mp3_mdct_buf resd 1152 14746 ; MP3_MAX_CHANNELS*SBLIMIT*18 14747 000109C8 ???????? mp3_free_format_frame_size resd 1 14748 14749 000109CC ?? mp3_curr_vfrac_bits resb 1 14750 14751 000109CD ?????? alignb 4 14752 14753 000109D0 ???????? mp3_xing_id resd 1 14754 000109D4 ???????? mp3_xing_flags resd 1 14755 000109D8 ???????? mp3_xing_frames resd 1 14756 000109DC ???????? mp3_xing_filesize resd 1 14757 000109E0 mp3_xing_toc resb 100 14758 00010A44 ???????? mp3_xing_vbr_scale resd 1 14759 00010A48 ???????? mp3_file_size resd 1 14760 00010A4C ???????? mp3_id3_size resd 1 14761 00010A50 ???????? mp3_tag_size resd 1 14762 14763 00010A54 ???????? mp3_num_frames_decoded resd 1 14764 00010A58 ???????? mp3_total_output_size resd 1 14765 00010A5C ???????? mp3_samples_dst resd 1 14766 ; DWORD mp3_samples_output_size 14767 00010A60 ???????? mp3_samples_output_size resd 1 14768 00010A64 ???????? mp3_samples_dst_step resd 1 14769 14770 00010A68 ???????? mp3_curr_channel resd 1 14771 00010A6C ???????? mp3_curr_granule resd 1 14772 00010A70 ???????? mp3_curr_frame resd 1 14773 14774 00010A74 ???????? mp3_bitstream_start resd 1 14775 00010A78 ???????? mp3_src_remain resd 1 14776 00010A7C ???????? mp3_extra_bytes resd 1 14777 00010A80 ???????? mp3_main_data_begin resd 1 14778 00010A84 ???????? mp3_num_compress_bits resd 1 14779 14780 00010A88 ???????? mp3_nb_granules resd 1 14781 14782 00010A8C mp3_granules resb 9856 14783 0001310C mp3_exponents resw 576 14784 0001358C huff_tree_buf resb 0B800h 14785 0001ED8C mp3_band_index_long resw 288 14786 0001EFCC mp3_table_4_3_exp resb 32828 14787 14788 00027008 mp3_table_4_3_value resd 32828 14789 000470F8 mp3_exp_table resd 512 14790 000478F8 mp3_expval_table resd 8192 14791 0004F8F8 mp3_mdct_win resd 288 14792 0004FD78 mp3_is_table_lsf resd 512 14793 00050578 mp3_synth_win resd 1024 14794 00051578 mp3_lsf_sf_expand_exploded_table resb 8192 14795 mp3_context_end: 14796 00053578 ???????? _@@region_address0 resd 1 14797 0005357C ???????? _@@region_address1 resd 1 14798 00053580 ???????? _@@saved_sp resd 1 14799 00053584 ???????? mp3_main_data_siz resd 1 14800 00053588 ???????? _@@scfsi resd 1 14801 0005358C _@@gains resd 3 14802 00053598 ???????? _@@rle_point resd 1 14803 0005359C ???????? _@@III resd 1 14804 000535A0 ???????? _@@JJJ resd 1 14805 000535A4 ???????? _@@linbits resd 1 14806 000535A8 ???????? _@@vlc_table resd 1 14807 000535AC ???????? _@@coarse_end resd 1 14808 14809 000535B0 ???????? _@rle_point resd 1 14810 000535B4 ???????? _@@rle_ptr resd 1 14811 000535B8 ???????? _@@rle_val resd 1 14812 000535BC ???????? _@@rle_val_x_40h resd 1 14813 000535C0 ???????? _@@max_bands resb 4 14814 000535C4 ???????? _@@max_blocks resd 1 14815 000535C8 ???????? _@@max_pos resd 1 14816 000535CC _@@sfb_array resb 40 14817 000535F4 ???????? _@@is_tab resd 1 14818 000535F8 ???????? _@@n_long_sfb resd 1 14819 000535FC ???????? _@@n_short_sfb resd 1 14820 00053600 ???????? _@@n_sfb resd 1 14821 00053604 _@@tmp resb 2304 14822 00053F04 ???????? _@@s0 resd 1 14823 00053F08 ???????? _@@s2 resd 1 14824 00053F0C ???????? _@@s3 resd 1 14825 14826 00053F10 _@@@tmp resd 18 ; resb 72 14827 00053F58 ???????? _@@tmp0 resd 1 14828 00053F5C ???????? _@@tmp1 resd 1 14829 00053F60 ???????? _@@tmp2 resd 1 14830 00053F64 ???????? _@@tmp3 resd 1 14831 00053F68 ???????? _@@tmp4 resd 1 14832 00053F6C ???????? _@@tmp5 resd 1 14833 00053F70 ???????? mp3_out2_a0 resd 1 14834 00053F74 ???????? mp3_out2_a1 resd 1 14835 00053F78 ???????? mp3_out2_a2 resd 1 14836 00053F7C ???????? mp3_out2_b0 resd 1 14837 00053F80 ???????? mp3_out2_b1 resd 1 14838 00053F84 ???????? mp3_out2_b2 resd 1 14839 00053F88 ???????? resd 1 14840 00053F8C ???????? resd 1 14841 00053F90 ???????? _@@@JJJ resd 1 14842 00053F94 ???????? _@@www resd 1 14843 00053F98 ???????? _@@mdct_long_end resd 1 14844 00053F9C ???????? _@@sblimit resd 1 14845 00053FA0 ???????? _@@switch_point resd 1 14846 00053FA4 mp3_huff_tmp_bits resb 256 14847 000540A4 mp3_huff_tmp_codes resb 512 14848 000542A4 ???????? _@@table_nb_bits resd 1 14849 000542A8 ???????? _@@nb_codes resd 1 14850 000542AC ???????? _@@prefix_numbits resd 1 14851 000542B0 ???????? _@@prefix_pattern resd 1 14852 000542B4 ???????? _@@curr_table_size resd 1 14853 000542B8 ???????? _@@curr_table_mask resd 1 14854 000542BC ???????? _@@curr_table_index resd 1 14855 000542C0 ???????? _@@granule_addr resd 1 14856 ; HANDLE hFile 14857 000542C4 ???????? hFile resd 1 14858 ; HANDLE hMap 14859 ;hMap resd 1 14860 000542C8 ???????? stream_start resd 1 14861 000542CC ???????? stream_pos resd 1 14862 000542D0 ???????? bytes_left resd 1 14863 14864 ; 20/10/2024 14865 ; DWORD diskresult 14866 ;diskresult resd 1 14867 ; HANDLE std_out 14868 ;std_out resd 1 14869 ;cmdline_buf resb 1024 14870 000542D4 cmdline_buf resb 128 14871 ; HANDLE mp3_wav_handle 14872 00054354 ???????? mp3_wav_handle resd 1 14873 ; HANDLE mp3_pcm_handle 14874 00054358 ???????? mp3_pcm_handle resd 1 14875 0005435C ???????? _@@max_diff resd 1 14876 00054360 ???????????????? _@@avg_diff resd 2 14877 00054368 ???????? pcm_filepos resd 1 14878 0005436C ???????? _@@mono_convert resd 1 14879 00054370 ???????? _@@pcm_steps resw 2 14880 00054374 ???????? _@@worst_pcm_filepos resd 1 14881 00054378 ???????? _@@worst_mp3_filepos resd 1 14882 0005437C ???????? resd 1 14883 ;alignb 4 14884 14885 ; 10/01/2025 14886 00054380 alignb 4096 14887 14888 ; 12/01/2025 14889 ; 09/01/2025 14890 ;sample_buffer resb 36864 14891 ;sample_buffer resb 8*MP3_MAX_OUTPUT_SIZE 14892 ;sample_buffer_size equ $-sample_buffer 14893 14894 ; 15/01/2025 14895 00055000 decoding_buffer resb 8192 ; 2*4096 (max. 4608) 14896 00057000 sample_buffer resb 36864 ; 8*4608 14897 14898 ;alignb 4096 14899 14900 end_of_bss: 14901 14902 ; =========================================================================== 14903 ; end