1 ; **************************************************************************** 2 ; TMP3PLAY.PRG - Tiny MP3 PLAYER v1.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 ; 15/02/2025 8 ; 9 ; [ Last Modification: 24/02/2025 ] 10 ; 11 ; Modified from 'mp3play6.s' (14/02/2025) and 'twavply3.s' (10/02/2025) 12 ; 13 ; ---------------------------------------------------------------------------- 14 ; Modified from on MP3PLAY.ASM (for Windows console) source code - 17/10/2024 15 ; **************************************************************************** 16 ; Modified from Martin Korth's 'mp3play.asm' (TASM32) source code... (v1.4) 17 ; Applied development method: 18 ; Disassembling 'mp3play.exe' v1.4 by using HEX-RAYS disassembler; 19 ; then... converting disassembled code to FASM syntax, 20 ; adding '.idata' code (by help of FASM examples) to the raw 21 ; asm file. Converting 'proc' procedures to labels. 22 ; and Finally: assembling mp3play.asm (single) file by using 23 ; 'fasm mp3play.asm' command. 24 ; 25 ; NOTE: 26 ; Martin Korth's MP3PLAY.EXE (v1.4, 20/09/2024) file size is 45056 bytes. 27 ; (This) modified MP3PLAY.EXE (v1.4.0, 17/10/2024) is 37888 bytes. 28 ; 29 ; --------------------------------------------------------------------------- 30 ; Assembler: NASM (v2.15) 31 ; ------------------------------------------------ 32 ; nasm tmp3play.s -l tmp3play.txt -o TMP3PLAY.PRG 33 34 ; 13/01/2025 (mp3play3.s) 35 ; Interpolated sample rate playing method for non-VRA AC97 codecs. 36 37 ; =========================================================================== 38 ; TRDOS 386 Operating System Specific Procedures - Erdogan Tan - 20/10/2024 39 ; =========================================================================== 40 41 ; 20/10/2024 42 ; 20/08/2024 ; TRDOS 386 v2.0.9 43 ; TRDOS 386 system calls 44 _ver equ 0 45 _exit equ 1 46 _fork equ 2 47 _read equ 3 48 _write equ 4 49 _open equ 5 50 _close equ 6 51 _wait equ 7 52 _creat equ 8 53 _rename equ 9 54 _delete equ 10 55 _exec equ 11 56 _chdir equ 12 57 _time equ 13 58 _mkdir equ 14 59 _chmod equ 15 60 _rmdir equ 16 61 _break equ 17 62 _drive equ 18 63 _seek equ 19 64 _tell equ 20 65 _mem equ 21 66 _prompt equ 22 67 _path equ 23 68 _env equ 24 69 _stime equ 25 70 _quit equ 26 71 _intr equ 27 72 _dir equ 28 73 _emt equ 29 74 _ldvrt equ 30 75 _video equ 31 76 _audio equ 32 77 _timer equ 33 78 _sleep equ 34 79 _msg equ 35 80 _geterr equ 36 81 _fpsave equ 37 82 _pri equ 38 83 _rele equ 39 84 _fff equ 40 85 _fnf equ 41 86 _alloc equ 42 87 _dalloc equ 43 88 _calbac equ 44 89 _dma equ 45 90 _stdio equ 46 ; TRDOS 386 v2.0.9 91 92 ; --------------------------------------------------------------------------- 93 ; 'sys' macro 94 ; --------------------------------------------------------------------------- 95 ; 09/01/2025 96 97 %macro sys 1-4 98 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 99 ; 03/09/2015 100 ; 13/04/2015 101 ; Retro UNIX 386 v1 system call. 102 %if %0 >= 2 103 mov ebx, %2 104 %if %0 >= 3 105 mov ecx, %3 106 %if %0 = 4 107 mov edx, %4 108 %endif 109 %endif 110 %endif 111 mov eax, %1 112 ;int 30h 113 int 40h ; TRDOS 386 (TRDOS v2.0) 114 %endmacro 115 116 ; =========================================================================== 117 ; CODE 118 ; =========================================================================== 119 120 [BITS 32] ; 32-bit intructions 121 122 [ORG 0] 123 124 ; =========================================================================== 125 126 ; 15/02/2025 127 start: 128 ; 15/02/2025 129 sys _msg, txt_hello, 255, 0Bh 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00000000 BB[C0A70000] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00000005 B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 0000000A BA0B000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 0000000F B823000000 <1> mov eax, %1 112 <1> 113 00000014 CD40 <1> int 40h 130 131 ; 21/10/2024 132 00000016 E8A9390000 call set_break ; set and clear bss section 133 ; also set stream_start position 134 135 ; 15/02/2025 136 sys _msg, txt_bdate, 255, 0Fh 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 0000001B BB[F4A70000] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00000020 B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 00000025 BA0F000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 0000002A B823000000 <1> mov eax, %1 112 <1> 113 0000002F CD40 <1> int 40h 137 sys _msg, txt_original,255,07h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00000031 BB[F4A90000] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00000036 B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 0000003B BA07000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00000040 B823000000 <1> mov eax, %1 112 <1> 113 00000045 CD40 <1> int 40h 138 139 ;;; 140 ; 11/01/2025 141 00000047 E8453A0000 call detect_enable_audio_device 142 ; 15/02/2025 143 0000004C 731B jnc short GetFileName 144 _dev_not_ready: 145 ; couldn't find the audio device! 146 sys _msg, noDevMsg, 255, 0Fh 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 0000004E BB[E5AA0000] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00000053 B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 00000058 BA0F000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 0000005D B823000000 <1> mov eax, %1 112 <1> 113 00000062 CD40 <1> int 40h 147 00000064 E91F3A0000 jmp ExitP@ 148 149 ; --------------------------------------------------- 150 151 ; 20/02/2025 152 ; 15/02/2025 - tmp3play.s 153 ; 10/02/2025 - twavply3.s 154 GetFileName: 155 ; (TRDOS 386 -Retro UNIX 386- argument transfer method) 156 ; (stack: argc,argv0addr,argv1addr,argv2addr .. 157 ; .. argv0text, argv1text ..) 158 ; ---- argc, argv[] ---- 159 00000069 89E6 mov esi, esp 160 0000006B AD lodsd 161 0000006C 83F802 cmp eax, 2 ; two arguments 162 0000006F 7302 jnb short _x 163 00000071 EB4E jmp pmsg_usage 164 165 _x: 166 00000073 AD lodsd ; skip program (PRG) file name 167 00000074 8B36 mov esi, [esi] ; MP3 file name 168 169 ;mov edi, wav_file_name 170 ; 15/02/2025 171 00000076 BF[00550500] mov edi, mp3_file_name 172 0000007B 31C9 xor ecx, ecx ; 0 173 ScanName: 174 0000007D AC lodsb 175 176 0000007E 3C0D cmp al, 0Dh ; CR 177 00000080 7633 jna short a_4 178 _y: 179 00000082 3C20 cmp al, 20h 180 00000084 74F7 je short ScanName ; scan start of name. 181 00000086 AA stosb 182 00000087 B4FF mov ah, 0FFh 183 a_0: 184 00000089 FEC4 inc ah 185 a_1: 186 0000008B 41 inc ecx 187 0000008C AC lodsb 188 0000008D AA stosb 189 0000008E 3C2E cmp al, '.' 190 00000090 74F7 je short a_0 191 00000092 3C20 cmp al, 20h 192 00000094 7611 jna short a_3 193 00000096 20E4 and ah, ah 194 00000098 7406 jz short a_2 195 196 ; 20/02/2025 197 0000009A 3C2F cmp al, '/' 198 0000009C 7502 jne short a_2 199 0000009E B400 mov ah, 0 200 a_2: 201 000000A0 80F94B cmp cl, 75 ; 64+8+'.'+3 -> offset 75 is the last chr 202 000000A3 72E6 jb short a_1 203 000000A5 EB0E jmp short a_4 204 a_3: 205 000000A7 4F dec edi 206 000000A8 08E4 or ah, ah ; if period NOT found, 207 000000AA 7509 jnz short a_4 ; then add a .mp3 extension. 208 SetExt: 209 ; 15/02/2025 210 000000AC C7072E6D7033 mov dword [edi], '.mp3' 211 ;mov dword [edi], '.WAV' ; ! 64+12 is DOS limit 212 ; but writing +4 must not 213 ; destroy the following data 214 ; so, 80 bytes path + 0 is possible here 215 000000B2 83C704 add edi, 4 216 a_4: 217 000000B5 C60700 mov byte [edi], 0 218 219 000000B8 803D[00550500]20 cmp byte [mp3_file_name], 20h 220 000000BF 771B ja short mp3_filename_chk 221 222 pmsg_usage: 223 sys _msg, txt_help, 255, 0Fh 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 000000C1 BB[D5A90000] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 000000C6 B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 000000CB BA0F000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 000000D0 B823000000 <1> mov eax, %1 112 <1> 113 000000D5 CD40 <1> int 40h 224 225 000000D7 E9AC390000 jmp ExitP@ 226 227 ; --------------------------------------------------- 228 229 mp3_filename_chk: 230 000000DC 8B47FC mov eax, [edi-4] 231 000000DF 25FFDFDFFF and eax, 0FFDFDFFFh 232 000000E4 3D2E4D5033 cmp eax, '.MP3' 233 000000E9 751E jne short not_valid_mp3 234 235 ; --------------------------------------------------- 236 237 000000EB 31ED xor ebp, ebp 238 000000ED E810380000 call mp3_init 239 000000F2 E8E4380000 call open_and_mmap_the_file 240 ;jc .exit 241 ; 26/01/2025 242 000000F7 0F828B390000 jc ExitP@ 243 244 ; 13/02/2025 245 000000FD E839490000 call write_audio_dev_info 246 247 ; 15/02/2025 248 00000102 E854380000 call mp3_check_1st_frame 249 00000107 731B jnc short mp3_file_ready 250 251 not_valid_mp3: 252 ; not a proper/valid mp3 file ! 253 sys _msg, not_valid_mp3f, 255, 0Ch 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00000109 BB[33AB0000] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 0000010E B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 00000113 BA0C000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00000118 B823000000 <1> mov eax, %1 112 <1> 113 0000011D CD40 <1> int 40h 254 255 0000011F E964390000 jmp ExitP@ 256 257 ; --------------------------------------------------- 258 259 mp3_file_ready: 260 ; 13/02/2025 261 ; 22/01/2025 262 ; Forward/Backward position change parameters (*) 263 00000124 A1[EC4A0500] mov eax, [stream_pos] 264 00000129 A3[64AB0000] mov [stream_begin], eax ; * 265 0000012E A1[F04A0500] mov eax, [bytes_left] 266 00000133 A3[60AB0000] mov [stream_size], eax ; * 267 268 ; 15/02/2025 269 00000138 E85B4D0000 call SetTotalTime 270 271 ; 15/02/2025 272 0000013D E8D34D0000 call write_mp3_file_info 273 274 sys _msg, msgPressAKey, 255, 07h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00000142 BB[8AAA0000] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00000147 B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 0000014C BA07000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00000151 B823000000 <1> mov eax, %1 112 <1> 113 00000156 CD40 <1> int 40h 275 276 00000158 30E4 xor ah, ah 277 0000015A CD32 int 32h ; TRDOS 386 keyboard interrupt 278 ; getchar (wait for keystroke) 279 280 ;cmp al, 1Bh ; ESC 281 ;je ExitP@ 282 ; 13/02/2025 283 0000015C E87F4C0000 call check4keyboardstop.p_4 284 00000161 0F8221390000 jc ExitP@ 285 286 ; --------------------------------------------------- 287 288 ; 17/02/2025 289 ; [mp3_bytes_per_sample] = 2 290 ; 15/02/2025 (tmp3play.s) 291 ; 10/02/2025 (twavply3.s) 292 ; 13/02/2025 (mp3play6.s) 293 ; 26/01/2025 (mp3play5.s) 294 ;;;; 295 00000167 B800010000 mov eax, 256 296 0000016C B201 mov dl, 1 297 0000016E 3815[84AB0000] cmp byte [audio_hardware], dl ; 1 298 00000174 7714 ja short .stolp_s16 ; AC97 299 300 00000176 BA[53510000] mov edx, get_sb16_sound_data 301 ; SB16 302 0000017B 3815[C8BB0000] cmp byte [mp3_num_channels], dl ; 1 303 00000181 7707 ja short .stolp_s ; stereo 304 .stolp_m: 305 ;mov ebx, sdc_8bit_mono 306 ;cmp byte [mp3_bytes_per_sample], dl ; 1 307 ;jna short .stolp_ok ; 8bit, mono 308 00000183 BB[77510000] mov ebx, sdc_16bit_mono 309 00000188 EB09 jmp short .stolp_m16 ; 16bit, mono 310 .stolp_s: 311 ;mov ebx, sdc_8bit_stereo 312 ;cmp byte [mp3_bytes_per_sample], dl ; 1 313 ;jna short .stolp_s8 ; 8bit, stereo 314 ; 16bit, stereo 315 ;mov ebx, sdc_16bit_stereo 316 .stolp_s16: 317 0000018A 31DB xor ebx, ebx ; (not necessary) 318 0000018C BA[3B510000] mov edx, get_ac97_sound_data ; (**) 319 ; also for sb16, 16bit, stereo 320 00000191 D1E0 shl eax, 1 321 .stolp_s8: 322 .stolp_m16: 323 00000193 D1E0 shl eax, 1 324 .stolp_ok: 325 00000195 A3[6CAB0000] mov [sd_count], eax 326 0000019A 891D[00100600] mov [sounddata_copy], ebx 327 000001A0 8915[04100600] mov [get_sound_data], edx 328 ;;;; 329 330 ; 15/02/2025 331 ; --------------------------------------------------- 332 333 ; 13/02/2025 334 ; 30/12/2024 (cgaplay.s) 335 ;;; 336 ; DIRECT VGA MEMORY ACCESS 337 ; bl = 0, bh = 5 338 ; Direct access/map to VGA memory (0A0000h) 339 340 sys _video, 0500h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 000001A6 BB00050000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 000001AB B81F000000 <1> mov eax, %1 112 <1> 113 000001B0 CD40 <1> int 40h 341 000001B2 3D00000A00 cmp eax, 0A0000h 342 000001B7 7405 je short .vimem_map_ok 343 ; 30/12/2024 344 000001B9 E9C2000000 jmp trdos386_error 345 .vimem_map_ok: 346 ;;;; 347 348 ; --------------------------------------------------- 349 setgraphmode: 350 ; set VGA 640x480x16 graphics mode 351 000001BE 66B81200 mov ax, 12h 352 000001C2 CD31 int 31h ; TRDOS 386 Video Interrupt 353 ; Set video mode 354 000001C4 66BAC003 mov dx, 3C0h 355 000001C8 30C0 xor al, al 356 setgraphmodel0: 357 ;out dx, al 358 000001CA B401 mov ah, 1 ; outb 359 000001CC CD34 int 34h ; TRDOS 386 IOCTL Interrupt 360 ;out dx, al 361 ;mov ah, 1 ; outb 362 000001CE CD34 int 34h 363 000001D0 FEC0 inc al 364 000001D2 3C10 cmp al, 10h 365 000001D4 72F4 jb short setgraphmodel0 366 000001D6 B020 mov al, 20h 367 ;out dx, al 368 ;mov ah, 1 ; outb 369 000001D8 CD34 int 34h 370 ;;;; 371 372 ; --------------------------------------------------- 373 374 ; 17/02/2025 375 000001DA B900010000 mov ecx, 256 376 000001DF 31DB xor ebx, ebx 377 000001E1 BF[004B0500] mov edi, RowOfs 378 MakeOfs: 379 000001E6 89D8 mov eax, ebx 380 000001E8 C1E007 shl eax, 7 ; * 128 381 000001EB B050 mov al, 80 382 000001ED F6E4 mul ah 383 000001EF 66AB stosw 384 000001F1 43 inc ebx 385 000001F2 E2F2 loop MakeOfs 386 387 ; --------------------------------------------------- 388 389 ; 25/01/2025 390 ; 21/12/2024 391 ;;; --------------------------- 392 000001F4 E8B84F0000 call drawplayingscreen 393 ;;; --------------------------- 394 395 ; 15/02/2025 396 000001F9 B003 mov al, 3 ; 0 = max, 31 = min 397 000001FB E87A3A0000 call SetMasterVolume 398 399 ;;; --------------------------- 400 401 ; 16/02/2025 402 replay: 403 ; 17/02/2025 404 ; 15/02/2025 405 ; 13/01/2025 (interpolation procs for non-VRA AC97 codecs) 406 ;;;; -------------------------- 407 ;mov byte [interpolation], 0 408 00000200 B002 mov al, 2 409 00000202 3805[84AB0000] cmp [audio_hardware], al ; 2 410 00000208 7241 jb short .direct ; SB16 ; 17/02/2025 411 ; AC97 412 ;mov dword [get_sound_data], get_ac97_sound_data ; (**) 413 .chk_frq: 414 0000020A 813D[BCBB0000]80BB- cmp dword [mp3_sample_rate], 48000 ; 48 kHZ 414 00000212 0000 415 00000214 7212 jb short .chk_vra 416 00000216 803D[C8BB0000]02 cmp byte [mp3_num_channels], 2 417 ; 17/02/2025 418 ;jb short .convert ; mono (8bit or 16bit) 419 420 ;cmp byte [mp3_bytes_per_sample], al ; 2 421 ;jnb short .direct ; 16bit, stereo 422 ; 17/02/2025 423 0000021D 732C jnb short .direct 424 .convert: 425 ; 8bit m/s or 16bit mono 426 0000021F C605[98AB0000]01 mov byte [interpolation], 1 ; convert (to 16 bit stereo) 427 00000226 EB42 jmp short .indirect ; 21/01/2025 428 .chk_vra: 429 00000228 A2[98AB0000] mov [interpolation], al ; 2 = interpolation 430 0000022D 803D[85AB0000]01 cmp byte [vra], 1 431 00000234 7234 jb short .indirect ; 21/01/2025 432 00000236 FE0D[98AB0000] dec byte [interpolation] ; 1 = convert (to 16 bit stereo) 433 0000023C 803D[C8BB0000]02 cmp byte [mp3_num_channels], 2 434 00000243 7225 jb short .indirect ; 8 bit ; 21/01/2025 435 ; 17/02/2025 436 ;cmp byte [mp3_bytes_per_sample], al ; 2 437 ;jb short .indirect ; mono ; 21/01/2025 438 439 ; 14/01/2025 440 00000245 FE0D[98AB0000] dec byte [interpolation] ; 0 441 .direct: 442 ;;;; -------------------------- 443 444 ;;; 445 ; 20/10/2024 446 ;call detect_enable_audio_device 447 ;jc .exit 448 0000024B E81A390000 call audio_system_init 449 ;jc .exit 450 00000250 7207 jc short .exit@ ; 15/01/2025 451 ;;; 452 453 00000252 E83D3A0000 call mp3_cast_to_speaker 454 455 ; 15/02/2025 456 ; 13/01/2025 457 00000257 EB1D jmp short .decode_done 458 459 ; 15/01/2025 460 .exit@: 461 ; Disable audio device 462 sys _audio, 0C00h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00000259 BB000C0000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 0000025E B820000000 <1> mov eax, %1 112 <1> 113 00000263 CD40 <1> int 40h 463 ;jmp ExitProcess 464 ; 27/01/2025 465 00000265 E920380000 jmp ExitProcess@ 466 467 .indirect: 468 0000026A E8433B0000 call audio_system_init_x 469 0000026F 72E8 jc short .exit@ ; 15/01/2025 470 00000271 E83C3D0000 call mp3_cast_to_speaker_x 471 ;;;; -------------------------- 472 473 ; 15/02/2025 474 ; 22/01/2025 475 .decode_done: 476 ; set video mode to 03h again (clear screen) 477 ;mov ax, 03h 478 ;int 31h ; TRDOS 386 - Video interrupt 479 ; 25/01/2025 480 00000276 E8164C0000 call set_text_mode 481 .exit: 482 ;push 0 ; uExitCode 483 ;call ExitProcess 484 ;jmp ExitProcess 485 ; 27/01/2025 486 0000027B E90A380000 jmp ExitProcess@ 487 488 ; 13/02/2025 489 ; 25/01/2025 490 trdos386_error: 491 sys _msg, trdos386_err_msg, 255, 0Eh 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00000280 BB[C5AA0000] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00000285 B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 0000028A BA0E000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 0000028F B823000000 <1> mov eax, %1 112 <1> 113 00000294 CD40 <1> int 40h 492 00000296 BBFFFFFFFF mov ebx, -1 ; (not necessary) -error exit example- 493 0000029B E9EA370000 jmp ExitProcess@ 494 495 496 ; =============== S U B R O U T I N E ======================================= 497 498 bswap_eax: 499 000002A0 86E0 xchg al, ah 500 000002A2 C1C810 ror eax, 10h 501 000002A5 86E0 xchg al, ah 502 000002A7 C3 retn 503 504 ; =============== S U B R O U T I N E ======================================= 505 506 mp3_recollect_bits: 507 000002A8 F7C601000000 test esi, 1 508 000002AE 7510 jnz short .odd 509 000002B0 668B2E mov bp, [esi] 510 000002B3 83C602 add esi, 2 511 000002B6 66C1CD08 ror bp, 8 512 000002BA C1E510 shl ebp, 16 513 000002BD B500 mov ch, 0 514 000002BF C3 retn 515 516 .odd: 517 000002C0 0FB62E movzx ebp, byte [esi] 518 000002C3 46 inc esi 519 000002C4 C1E510 shl ebp, 16 520 000002C7 668B2E mov bp, [esi] 521 000002CA 83C602 add esi, 2 522 000002CD 66C1CD08 ror bp, 8 523 000002D1 C1E508 shl ebp, 8 524 000002D4 B508 mov ch, 8 525 000002D6 C3 retn 526 527 ; =============== S U B R O U T I N E ======================================= 528 529 530 mp3_get_bits: 531 000002D7 89E8 mov eax, ebp 532 000002D9 D3E5 shl ebp, cl 533 000002DB D3C0 rol eax, cl 534 000002DD 31E8 xor eax, ebp 535 000002DF 28CD sub ch, cl 536 000002E1 7801 js short mp3_collect_more 537 000002E3 C3 retn 538 539 mp3_collect_more: 540 000002E4 88E9 mov cl, ch 541 000002E6 80C510 add ch, 10h 542 000002E9 D3C5 rol ebp, cl 543 000002EB 668B2E mov bp, [esi] 544 000002EE 83C602 add esi, 2 545 000002F1 66C1CD08 ror bp, 8 546 000002F5 D3CD ror ebp, cl 547 000002F7 C3 retn 548 549 ; =============== S U B R O U T I N E ======================================= 550 551 552 mp3_uncollect_bits: 553 000002F8 83EE02 sub esi, 2 554 000002FB C0ED03 shr ch, 3 555 000002FE 0FB6CD movzx ecx, ch 556 00000301 29CE sub esi, ecx 557 00000303 C3 retn 558 559 ; =============== S U B R O U T I N E ======================================= 560 561 562 mp3_search_get_header: 563 ; 16/02/2025 564 00000304 C705[9C120100]0000- mov dword [mp3_extra_bytes], 0 564 0000030C 0000 565 566 .retry_header: 567 0000030E 833D[98120100]04 cmp dword [mp3_src_remain], 4 568 00000315 0F8276010000 jb .fail_no_header 569 0000031B 803EFF cmp byte [esi], 0FFh 570 0000031E 7516 jnz short .bad_header 571 00000320 8A4601 mov al, [esi+1] 572 00000323 24E6 and al, 0E6h 573 00000325 3CE2 cmp al, 0E2h 574 00000327 750D jnz short .bad_header 575 00000329 8A4602 mov al, [esi+2] 576 0000032C 3CF0 cmp al, 0F0h 577 0000032E 7306 jnb short .bad_header 578 00000330 240C and al, 0Ch 579 00000332 3C0C cmp al, 0Ch 580 00000334 7519 jnz short .good_header 581 582 .bad_header: 583 00000336 46 inc esi 584 00000337 FF0D[98120100] dec dword [mp3_src_remain] 585 0000033D FF05[9C120100] inc dword [mp3_extra_bytes] 586 00000343 C705[9CBB0000]- mov dword [main_data_pool_wr_ptr], main_data_pool_start 586 00000349 [9CAB0000] 587 0000034D EBBF jmp short .retry_header 588 589 .good_header: 590 0000034F 8B06 mov eax, [esi] 591 00000351 E84AFFFFFF call bswap_eax 592 00000356 A3[ACBB0000] mov [mp3_hdr_32bit_header], eax 593 0000035B C705[E0BB0000]0000- mov dword [mp3_hdr_flag_lsf], 0 593 00000363 0000 594 00000365 C705[B4BB0000]0000- mov dword [mp3_hdr_flag_mpeg25], 0 594 0000036D 0000 595 0000036F C705[A8120100]0200- mov dword [mp3_nb_granules], 2 595 00000377 0000 596 00000379 A900000800 test eax, 80000h 597 0000037E 7525 jnz short .lsf_this 598 00000380 C705[E0BB0000]0100- mov dword [mp3_hdr_flag_lsf], 1 598 00000388 0000 599 0000038A C705[A8120100]0100- mov dword [mp3_nb_granules], 1 599 00000392 0000 600 00000394 A900001000 test eax, 100000h 601 00000399 750A jnz short .lsf_this 602 0000039B C705[B4BB0000]0100- mov dword [mp3_hdr_flag_mpeg25], 1 602 000003A3 0000 603 604 .lsf_this: 605 000003A5 C1E80A shr eax, 10 606 000003A8 83E003 and eax, 3 607 000003AB 8B0D[E0BB0000] mov ecx, [mp3_hdr_flag_lsf] 608 000003B1 030D[B4BB0000] add ecx, [mp3_hdr_flag_mpeg25] 609 000003B7 0FB79400[AC950000] movzx edx, word [mp3_freq_tab+eax*2] 610 000003BF D3EA shr edx, cl 611 000003C1 8D0C49 lea ecx, [ecx+ecx*2] 612 000003C4 01C8 add eax, ecx 613 000003C6 A3[C0BB0000] mov [mp3_hdr_sample_rate_index], eax 614 000003CB 8915[BCBB0000] mov [mp3_sample_rate], edx 615 616 ; 15/02/2025 617 000003D1 A1[ACBB0000] mov eax, [mp3_hdr_32bit_header] 618 000003D6 C1E810 shr eax, 10h 619 000003D9 F7D0 not eax 620 000003DB 83E001 and eax, 1 621 000003DE A3[B0BB0000] mov [mp3_hdr_flag_crc], eax 622 000003E3 A1[ACBB0000] mov eax, [mp3_hdr_32bit_header] 623 000003E8 C1E809 shr eax, 9 624 000003EB 83E001 and eax, 1 625 000003EE A3[B8BB0000] mov [mp3_hdr_flag_padding], eax 626 000003F3 A1[ACBB0000] mov eax, [mp3_hdr_32bit_header] 627 000003F8 C1E80C shr eax, 12 628 000003FB 83E00F and eax, 0Fh 629 000003FE 7512 jnz short .not_free_format 630 00000400 E8ED310000 call mp3_detect_free_format_block_size 631 00000405 0F822BFFFFFF jb .bad_header 632 0000040B A1[EC110100] mov eax, [mp3_free_format_frame_size] 633 00000410 EB34 jmp short .this_frame_size_plus_padding 634 635 .not_free_format: 636 00000412 8B15[E0BB0000] mov edx, [mp3_hdr_flag_lsf] 637 00000418 C1E204 shl edx, 4 638 0000041B 01D0 add eax, edx 639 0000041D 0FB78400[6C950000] movzx eax, word [mp3_bitrate_tab+eax*2] ; kbit/s 640 00000425 69C0E8030000 imul eax, 1000 ; bit/s 641 0000042B A3[C4BB0000] mov [mp3_bit_rate], eax 642 00000430 69C090000000 imul eax, 144 ; 144=90h=8*18 643 00000436 31D2 xor edx, edx 644 00000438 F735[BCBB0000] div dword [mp3_sample_rate] 645 0000043E 8B0D[E0BB0000] mov ecx, [mp3_hdr_flag_lsf] 646 00000444 D3E8 shr eax, cl 647 648 .this_frame_size_plus_padding: 649 00000446 0305[B8BB0000] add eax, [mp3_hdr_flag_padding] 650 0000044C A3[A4BB0000] mov [mp3_src_frame_size], eax 651 00000451 01F0 add eax, esi 652 00000453 A3[A8BB0000] mov [mp3_src_frame_end], eax 653 00000458 A1[ACBB0000] mov eax, [mp3_hdr_32bit_header] 654 0000045D C1E806 shr eax, 6 655 00000460 83E003 and eax, 3 656 00000463 A3[D8BB0000] mov [mp3_hdr_mode_val], eax 657 00000468 BA01000000 mov edx, 1 658 659 0000046D 3C03 cmp al, 3 660 0000046F 7401 jz short .this_channels 661 662 ;mov edx, 2 663 ; 10/01/2025 664 00000471 42 inc edx 665 .this_channels: 666 00000472 8915[C8BB0000] mov [mp3_num_channels], edx 667 668 ; 15/02/2025 669 .allow_stereo: 670 ;imul edx, [mp3_bytes_per_sample] 671 ; 17/02/2025 672 00000478 D1E2 shl edx, 1 ; [mp3_bytes_per_sample] = 2 673 0000047A 8915[84120100] mov [mp3_samples_dst_step], edx 674 00000480 A1[ACBB0000] mov eax, [mp3_hdr_32bit_header] 675 00000485 C1E804 shr eax, 4 676 00000488 83E003 and eax, 3 677 0000048B A3[DCBB0000] mov [mp3_hdr_mode_ext], eax 678 ; 16/02/2025 679 .no_rdtsc_supported@: 680 ;clc 681 00000490 C3 retn 682 683 .fail_no_header: 684 ; 16/02/2025 685 .no_rdtsc_supported@@: 686 00000491 C705[A4BB0000]0000- mov dword [mp3_src_frame_size], 0 686 00000499 0000 687 0000049B F9 stc 688 0000049C C3 retn 689 690 691 ; =============== S U B R O U T I N E ======================================= 692 693 694 mp3_bitstream_read_header_extra: 695 ; 16/02/2025 696 697 .no_rdtsc_supported: 698 0000049D 833D[B0BB0000]00 cmp dword [mp3_hdr_flag_crc], 0 699 000004A4 7422 jz short .without_crc 700 000004A6 89E8 mov eax, ebp ; mp3mac_get_n_bits 16 701 000004A8 C1E510 shl ebp, 10h 702 000004AB C1C010 rol eax, 10h 703 000004AE 31E8 xor eax, ebp 704 000004B0 80ED10 sub ch, 10h 705 000004B3 7913 jns short .without_crc 706 000004B5 88E9 mov cl, ch ; mp3mac_collect_more 707 000004B7 80C510 add ch, 10h 708 000004BA D3C5 rol ebp, cl 709 000004BC 668B2E mov bp, [esi] 710 000004BF 83C602 add esi, 2 711 000004C2 66C1CD08 ror bp, 8 712 000004C6 D3CD ror ebp, cl 713 714 .without_crc: 715 000004C8 833D[E0BB0000]00 cmp dword [mp3_hdr_flag_lsf], 0 716 000004CF 745B jz short .pre_lsf_zero 717 000004D1 C705[A4120100]0900- mov dword [mp3_num_compress_bits], 9 717 000004D9 0000 718 000004DB 89E8 mov eax, ebp ; mp3mac_get_n_bits 8 719 000004DD C1E508 shl ebp, 8 720 000004E0 C1C008 rol eax, 8 721 000004E3 31E8 xor eax, ebp 722 000004E5 80ED08 sub ch, 8 723 000004E8 7913 jns short .without_crc@ 724 000004EA 88E9 mov cl, ch 725 000004EC 80C510 add ch, 10h 726 000004EF D3C5 rol ebp, cl 727 000004F1 668B2E mov bp, [esi] 728 000004F4 83C602 add esi, 2 729 000004F7 66C1CD08 ror bp, 8 730 000004FB D3CD ror ebp, cl 731 732 .without_crc@: 733 000004FD A3[A0120100] mov [mp3_main_data_begin], eax 734 00000502 8A0D[C8BB0000] mov cl, byte [mp3_num_channels] 735 00000508 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 736 0000050A D3E5 shl ebp, cl 737 0000050C D3C0 rol eax, cl 738 0000050E 31E8 xor eax, ebp 739 00000510 28CD sub ch, cl 740 00000512 7913 jns short .without_crc@@ 741 00000514 88E9 mov cl, ch 742 00000516 80C510 add ch, 10h 743 00000519 D3C5 rol ebp, cl 744 0000051B 668B2E mov bp, [esi] 745 0000051E 83C602 add esi, 2 746 00000521 66C1CD08 ror bp, 8 747 00000525 D3CD ror ebp, cl 748 749 .without_crc@@: 750 00000527 E9A1000000 jmp .pre_lsf_done 751 752 .pre_lsf_zero: 753 0000052C C705[A4120100]0400- mov dword [mp3_num_compress_bits], 4 753 00000534 0000 754 00000536 89E8 mov eax, ebp ; mp3mac_get_n_bits 9 755 00000538 C1E509 shl ebp, 9 756 0000053B C1C009 rol eax, 9 757 0000053E 31E8 xor eax, ebp 758 00000540 80ED09 sub ch, 9 759 00000543 7913 jns short .without_crc@@@ 760 00000545 88E9 mov cl, ch 761 00000547 80C510 add ch, 10h 762 0000054A D3C5 rol ebp, cl 763 0000054C 668B2E mov bp, [esi] 764 0000054F 83C602 add esi, 2 765 00000552 66C1CD08 ror bp, 8 766 00000556 D3CD ror ebp, cl 767 768 .without_crc@@@: 769 00000558 A3[A0120100] mov [mp3_main_data_begin], eax 770 0000055D 8A0D[C8BB0000] mov cl, byte [mp3_num_channels] 771 00000563 D0E1 shl cl, 1 ; 1,2 --> 2,4 772 00000565 80F107 xor cl, 7 ; --> 5,3 773 00000568 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 774 0000056A D3E5 shl ebp, cl 775 0000056C D3C0 rol eax, cl 776 0000056E 31E8 xor eax, ebp 777 00000570 28CD sub ch, cl 778 00000572 7913 jns short .without_crc@@@@ 779 00000574 88E9 mov cl, ch 780 00000576 80C510 add ch, 10h 781 00000579 D3C5 rol ebp, cl 782 0000057B 668B2E mov bp, [esi] 783 0000057E 83C602 add esi, 2 784 00000581 66C1CD08 ror bp, 8 785 00000585 D3CD ror ebp, cl 786 787 .without_crc@@@@: 788 00000587 8B15[C8BB0000] mov edx, [mp3_num_channels] 789 0000058D BB[AC120100] mov ebx, mp3_granules 790 791 .pre_channel_lop: 792 00000592 C7432800000000 mov dword [ebx+40], 0 ; [ebx+$mp3gr_scfsi] 793 00000599 81C3A0090000 add ebx, 2464 ; $mp3gr_entrysiz 794 0000059F 89E8 mov eax, ebp ; mp3mac_get_n_bits 4 795 000005A1 C1E504 shl ebp, 4 796 000005A4 C1C004 rol eax, 4 797 000005A7 31E8 xor eax, ebp 798 000005A9 80ED04 sub ch, 4 799 000005AC 7913 jns short .without_crc@@@@@ 800 000005AE 88E9 mov cl, ch 801 000005B0 80C510 add ch, 10h 802 000005B3 D3C5 rol ebp, cl 803 000005B5 668B2E mov bp, [esi] 804 000005B8 83C602 add esi, 2 805 000005BB 66C1CD08 ror bp, 8 806 000005BF D3CD ror ebp, cl 807 808 .without_crc@@@@@: 809 000005C1 894328 mov [ebx+28h], eax ; [ebx+$mp3gr_scfsi] 810 000005C4 81C3A0090000 add ebx, 2464 ; $mp3gr_entrysiz 811 000005CA 4A dec edx 812 000005CB 75C5 jnz short .pre_channel_lop 813 814 .pre_lsf_done: 815 000005CD A1[A8120100] mov eax, [mp3_nb_granules] 816 000005D2 6BC012 imul eax, 12h 817 000005D5 A3[D4BB0000] mov [mp3_nb_frames], eax 818 ; 14/01/2025 819 ;mov eax, [mp3_nb_frames] 820 ; 16/02/2025 821 000005DA 0FAF05[C8BB0000] imul eax, [mp3_num_channels] 822 ;imul eax, [mp3_bytes_per_sample] 823 ;shl eax, 5 824 ; 17/02/2025 825 ; [mp3_bytes_per_sample] = 2 826 000005E1 C1E006 shl eax, 6 ; (eax*2) << 5 827 ; 15/02/2025 828 000005E4 A3[80120100] mov [mp3_samples_output_size], eax 829 830 ; 16/02/2025 831 832 .no_rdtsc_supported@: 833 000005E9 C3 retn 834 835 836 ; =============== S U B R O U T I N E ======================================= 837 838 839 mp3_bitstream_read_granules: 840 ; 16/02/2025 841 842 .no_rdtsc_supported: 843 000005EA 8925[A03D0500] mov [_@@saved_sp], esp 844 000005F0 C705[A43D0500]0000- mov dword [mp3_main_data_siz], 0 844 000005F8 0000 845 000005FA C705[8C120100]0000- mov dword [mp3_curr_granule], 0 845 00000602 0000 846 00000604 BB[AC120100] mov ebx, mp3_granules 847 848 .hdr_granule_lop: 849 00000609 53 push ebx 850 0000060A C705[88120100]0000- mov dword [mp3_curr_channel], 0 850 00000612 0000 851 852 .hdr_channel_lop: 853 00000614 89E8 mov eax, ebp ; mp3mac_get_n_bits 12 854 00000616 C1E50C shl ebp, 12 855 00000619 C1C00C rol eax, 12 856 0000061C 31E8 xor eax, ebp 857 0000061E 80ED0C sub ch, 12 858 00000621 7913 jns short .without_crc 859 00000623 88E9 mov cl, ch 860 00000625 80C510 add ch, 16 861 00000628 D3C5 rol ebp, cl 862 0000062A 668B2E mov bp, [esi] 863 0000062D 83C602 add esi, 2 864 00000630 66C1CD08 ror bp, 8 865 00000634 D3CD ror ebp, cl 866 867 .without_crc: 868 00000636 8B15[A43D0500] mov edx, [mp3_main_data_siz] 869 0000063C 8903 mov [ebx], eax 870 0000063E 895304 mov [ebx+4], edx 871 00000641 01D0 add eax, edx 872 00000643 894308 mov [ebx+8], eax 873 00000646 A3[A43D0500] mov [mp3_main_data_siz], eax 874 0000064B 89E8 mov eax, ebp ; mp3mac_get_n_bits 9 875 0000064D C1E509 shl ebp, 9 876 00000650 C1C009 rol eax, 9 877 00000653 31E8 xor eax, ebp 878 00000655 80ED09 sub ch, 9 879 00000658 7913 jns short .without_crc@ 880 0000065A 88E9 mov cl, ch 881 0000065C 80C510 add ch, 10h 882 0000065F D3C5 rol ebp, cl 883 00000661 668B2E mov bp, [esi] 884 00000664 83C602 add esi, 2 885 00000667 66C1CD08 ror bp, 8 886 0000066B D3CD ror ebp, cl 887 888 .without_crc@: 889 0000066D 89430C mov [ebx+12], eax ; [ebx+$mp3gr_big_values] 890 00000670 89E8 mov eax, ebp ; mp3mac_get_n_bits 8 891 00000672 C1E508 shl ebp, 8 892 00000675 C1C008 rol eax, 8 893 00000678 31E8 xor eax, ebp 894 0000067A 80ED08 sub ch, 8 895 0000067D 7913 jns short .without_crc@@ 896 0000067F 88E9 mov cl, ch 897 00000681 80C510 add ch, 10h 898 00000684 D3C5 rol ebp, cl 899 00000686 668B2E mov bp, [esi] 900 00000689 83C602 add esi, 2 901 0000068C 66C1CD08 ror bp, 8 902 00000690 D3CD ror ebp, cl 903 904 .without_crc@@: 905 00000692 05BE000000 add eax, 190 ; 400-210 906 00000697 833D[D8BB0000]01 cmp dword [mp3_hdr_mode_val], 1 907 0000069E 750F jnz short .not_ms_stereo 908 000006A0 F705[DCBB0000]0200- test dword [mp3_hdr_mode_ext], 2 908 000006A8 0000 909 000006AA 7403 jz short .not_ms_stereo 910 000006AC 83E802 sub eax, 2 911 912 .not_ms_stereo: 913 000006AF 894310 mov [ebx+16], eax ; [ebx+$mp3gr_global_gain] 914 000006B2 8A0D[A4120100] mov cl, byte [mp3_num_compress_bits] 915 000006B8 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 916 000006BA D3E5 shl ebp, cl 917 000006BC D3C0 rol eax, cl 918 000006BE 31E8 xor eax, ebp 919 000006C0 28CD sub ch, cl 920 000006C2 7913 jns short .without_crc@@@ 921 000006C4 88E9 mov cl, ch 922 000006C6 80C510 add ch, 10h 923 000006C9 D3C5 rol ebp, cl 924 000006CB 668B2E mov bp, [esi] 925 000006CE 83C602 add esi, 2 926 000006D1 66C1CD08 ror bp, 8 927 000006D5 D3CD ror ebp, cl 928 929 .without_crc@@@: 930 000006D7 894314 mov [ebx+20], eax ; [ebx+$mp3gr_scalefac_compress] 931 000006DA FECD dec ch ; mp3mac_get_bit_to_cy 932 ; dec mp3_colNN 933 000006DC D1E5 shl ebp, 1 ; shl mp3_col32,1 ; cy=data 934 000006DE 0F834F010000 jnb .no_blocksplit 935 000006E4 89E8 mov eax, ebp ; mp3mac_get_n_bits 2 936 000006E6 C1E502 shl ebp, 2 937 000006E9 C1C002 rol eax, 2 938 000006EC 31E8 xor eax, ebp 939 000006EE 80ED02 sub ch, 2 940 000006F1 7913 jns short .without_crc@@@@ 941 000006F3 88E9 mov cl, ch 942 000006F5 80C510 add ch, 10h 943 000006F8 D3C5 rol ebp, cl 944 000006FA 668B2E mov bp, [esi] 945 000006FD 83C602 add esi, 2 946 00000700 66C1CD08 ror bp, 8 947 00000704 D3CD ror ebp, cl 948 949 .without_crc@@@@: 950 00000706 83F800 cmp eax, 0 951 00000709 0F8463030000 jz .error 952 0000070F 89432C mov [ebx+44], eax ; [ebx+$mp3gr_block_type] 953 00000712 83F802 cmp eax, 2 954 00000715 B812000000 mov eax, 18 ; 36/2 ; region_size (default) 955 0000071A 741C jz short .this_region_size 956 0000071C 833D[C0BB0000]02 cmp dword [mp3_hdr_sample_rate_index], 2 957 00000723 7613 jbe short .this_region_size 958 00000725 B81B000000 mov eax, 27 ; 54/2 ; region_size 959 0000072A 833D[C0BB0000]08 cmp dword [mp3_hdr_sample_rate_index], 8 960 00000731 7505 jnz short .this_region_size 961 00000733 B836000000 mov eax, 54 ; 108/2 ; region_size (for rate=8) 962 963 .this_region_size: 964 00000738 894350 mov [ebx+80], eax ; [ebx+$mp3gr_region_size+0*4] 965 0000073B C7435420010000 mov dword [ebx+84], 288 ; [ebx+$mp3gr_region_size+1*4],576/2 966 00000742 C7435820010000 mov dword [ebx+88], 288 ; [ebx+$mp3gr_region_size+2*4],576/2 967 00000749 89E8 mov eax, ebp ; mp3mac_get_n_bits 1 968 0000074B D1E5 shl ebp, 1 969 0000074D D1C0 rol eax, 1 970 0000074F 31E8 xor eax, ebp 971 00000751 80ED01 sub ch, 1 972 00000754 7913 jns short .without_crc@@@@@ 973 00000756 88E9 mov cl, ch 974 00000758 80C510 add ch, 10h 975 0000075B D3C5 rol ebp, cl 976 0000075D 668B2E mov bp, [esi] 977 00000760 83C602 add esi, 2 978 00000763 66C1CD08 ror bp, 8 979 00000767 D3CD ror ebp, cl 980 981 .without_crc@@@@@: 982 00000769 894330 mov [ebx+48], eax ; [ebx+$mp3gr_switch_point] 983 0000076C 89E8 mov eax, ebp ; IRP nn,0,1 ; only 0..1 for blocksplit 984 0000076E C1E505 shl ebp, 5 ; mp3mac_get_n_bits 5 985 00000771 C1C005 rol eax, 5 986 00000774 31E8 xor eax, ebp 987 00000776 80ED05 sub ch, 5 988 00000779 7913 jns short .without_crc@@@@@@ 989 0000077B 88E9 mov cl, ch 990 0000077D 80C510 add ch, 10h 991 00000780 D3C5 rol ebp, cl 992 00000782 668B2E mov bp, [esi] 993 00000785 83C602 add esi, 2 994 00000788 66C1CD08 ror bp, 8 995 0000078C D3CD ror ebp, cl 996 997 .without_crc@@@@@@: 998 0000078E 894338 mov [ebx+56], eax ; [ebx+$mp3gr_table_select+nn*4] ; nn=0 999 00000791 89E8 mov eax, ebp ; mp3mac_get_n_bits 5 1000 00000793 C1E505 shl ebp, 5 1001 00000796 C1C005 rol eax, 5 1002 00000799 31E8 xor eax, ebp 1003 0000079B 80ED05 sub ch, 5 1004 0000079E 7913 jns short .without_crc_@@@@ 1005 000007A0 88E9 mov cl, ch 1006 000007A2 80C510 add ch, 10h 1007 000007A5 D3C5 rol ebp, cl 1008 000007A7 668B2E mov bp, [esi] 1009 000007AA 83C602 add esi, 2 1010 000007AD 66C1CD08 ror bp, 8 1011 000007B1 D3CD ror ebp, cl 1012 1013 .without_crc_@@@@: 1014 000007B3 89433C mov [ebx+60], eax ; [ebx+$mp3gr_table_select+nn*4] ; nn=1 1015 000007B6 89E8 mov eax, ebp ; mp3mac_get_n_bits 5 1016 000007B8 C1E503 shl ebp, 3 ; IRP nn,0,1,2 1017 000007BB C1C003 rol eax, 3 ; mp3mac_get_n_bits 3 1018 000007BE 31E8 xor eax, ebp 1019 000007C0 80ED03 sub ch, 3 1020 000007C3 7913 jns short .without_crc_@@@@@ 1021 000007C5 88E9 mov cl, ch 1022 000007C7 80C510 add ch, 10h 1023 000007CA D3C5 rol ebp, cl 1024 000007CC 668B2E mov bp, [esi] 1025 000007CF 83C602 add esi, 2 1026 000007D2 66C1CD08 ror bp, 8 1027 000007D6 D3CD ror ebp, cl 1028 1029 .without_crc_@@@@@: 1030 000007D8 C1E003 shl eax, 3 1031 000007DB 894344 mov [ebx+68], eax ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=0 1032 000007DE 89E8 mov eax, ebp 1033 000007E0 C1E503 shl ebp, 3 1034 000007E3 C1C003 rol eax, 3 1035 000007E6 31E8 xor eax, ebp 1036 000007E8 80ED03 sub ch, 3 1037 000007EB 7913 jns short .without_crc_@@@@@@ 1038 000007ED 88E9 mov cl, ch 1039 000007EF 80C510 add ch, 10h 1040 000007F2 D3C5 rol ebp, cl 1041 000007F4 668B2E mov bp, [esi] 1042 000007F7 83C602 add esi, 2 1043 000007FA 66C1CD08 ror bp, 8 1044 000007FE D3CD ror ebp, cl 1045 1046 .without_crc_@@@@@@: 1047 00000800 C1E003 shl eax, 3 1048 00000803 894348 mov [ebx+72], eax ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=1 1049 00000806 89E8 mov eax, ebp 1050 00000808 C1E503 shl ebp, 3 1051 0000080B C1C003 rol eax, 3 1052 0000080E 31E8 xor eax, ebp 1053 00000810 80ED03 sub ch, 3 1054 00000813 7913 jns short .without_crc_@@@@@@@ 1055 00000815 88E9 mov cl, ch 1056 00000817 80C510 add ch, 10h 1057 0000081A D3C5 rol ebp, cl 1058 0000081C 668B2E mov bp, [esi] 1059 0000081F 83C602 add esi, 2 1060 00000822 66C1CD08 ror bp, 8 1061 00000826 D3CD ror ebp, cl 1062 1063 .without_crc_@@@@@@@: 1064 00000828 C1E003 shl eax, 3 1065 0000082B 89434C mov [ebx+76], eax ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=2 1066 0000082E E910010000 jmp .blocksplit_done 1067 1068 .no_blocksplit: 1069 00000833 C7432C00000000 mov dword [ebx+44], 0 ; [ebx+$mp3gr_block_type] 1070 0000083A C7433000000000 mov dword [ebx+48], 0 ; [ebx+$mp3gr_switch_point] 1071 00000841 89E8 mov eax, ebp ; IRP nn,0,1,2 ; range 0..2 when non-blocksplit 1072 00000843 C1E505 shl ebp, 5 ; mp3mac_get_n_bits 5 1073 00000846 C1C005 rol eax, 5 1074 00000849 31E8 xor eax, ebp 1075 0000084B 80ED05 sub ch, 5 1076 0000084E 7913 jns short .@_without_crc 1077 00000850 88E9 mov cl, ch 1078 00000852 80C510 add ch, 10h 1079 00000855 D3C5 rol ebp, cl 1080 00000857 668B2E mov bp, [esi] 1081 0000085A 83C602 add esi, 2 1082 0000085D 66C1CD08 ror bp, 8 1083 00000861 D3CD ror ebp, cl 1084 1085 .@_without_crc: 1086 00000863 894338 mov [ebx+56], eax ; [ebx+$mp3gr_table_select+nn*4] ; nn=0 1087 00000866 89E8 mov eax, ebp 1088 00000868 C1E505 shl ebp, 5 1089 0000086B C1C005 rol eax, 5 1090 0000086E 31E8 xor eax, ebp 1091 00000870 80ED05 sub ch, 5 1092 00000873 7913 jns short .@_without_crc_@ 1093 00000875 88E9 mov cl, ch 1094 00000877 80C510 add ch, 10h 1095 0000087A D3C5 rol ebp, cl 1096 0000087C 668B2E mov bp, [esi] 1097 0000087F 83C602 add esi, 2 1098 00000882 66C1CD08 ror bp, 8 1099 00000886 D3CD ror ebp, cl 1100 1101 .@_without_crc_@: 1102 00000888 89433C mov [ebx+60], eax ; [ebx+$mp3gr_table_select+nn*4] ; nn=1 1103 0000088B 89E8 mov eax, ebp 1104 0000088D C1E505 shl ebp, 5 1105 00000890 C1C005 rol eax, 5 1106 00000893 31E8 xor eax, ebp 1107 00000895 80ED05 sub ch, 5 1108 00000898 7913 jns short .@_without_crc_@@ 1109 0000089A 88E9 mov cl, ch 1110 0000089C 80C510 add ch, 10h 1111 0000089F D3C5 rol ebp, cl 1112 000008A1 668B2E mov bp, [esi] 1113 000008A4 83C602 add esi, 2 1114 000008A7 66C1CD08 ror bp, 8 1115 000008AB D3CD ror ebp, cl 1116 1117 .@_without_crc_@@: 1118 000008AD 894340 mov [ebx+64], eax ; [ebx+$mp3gr_table_select+nn*4] ; nn=2 1119 000008B0 89E8 mov eax, ebp 1120 000008B2 C1E504 shl ebp, 4 1121 000008B5 C1C004 rol eax, 4 1122 000008B8 31E8 xor eax, ebp 1123 000008BA 80ED04 sub ch, 4 1124 000008BD 7913 jns short .@_without_crc@@@ 1125 000008BF 88E9 mov cl, ch 1126 000008C1 80C510 add ch, 10h 1127 000008C4 D3C5 rol ebp, cl 1128 000008C6 668B2E mov bp, [esi] 1129 000008C9 83C602 add esi, 2 1130 000008CC 66C1CD08 ror bp, 8 1131 000008D0 D3CD ror ebp, cl 1132 1133 .@_without_crc@@@: 1134 000008D2 40 inc eax 1135 000008D3 A3[983D0500] mov [_@@region_address0], eax 1136 000008D8 89E8 mov eax, ebp ; mp3mac_get_n_bits 3 1137 000008DA C1E503 shl ebp, 3 1138 000008DD C1C003 rol eax, 3 1139 000008E0 31E8 xor eax, ebp 1140 000008E2 80ED03 sub ch, 3 1141 000008E5 7913 jns short .@_without_crc@@@@ 1142 000008E7 88E9 mov cl, ch 1143 000008E9 80C510 add ch, 10h 1144 000008EC D3C5 rol ebp, cl 1145 000008EE 668B2E mov bp, [esi] 1146 000008F1 83C602 add esi, 2 1147 000008F4 66C1CD08 ror bp, 8 1148 000008F8 D3CD ror ebp, cl 1149 1150 .@_without_crc@@@@: 1151 000008FA 40 inc eax 1152 000008FB 0305[983D0500] add eax, [_@@region_address0] 1153 00000901 A3[9C3D0500] mov [_@@region_address1], eax 1154 00000906 A1[C0BB0000] mov eax, [mp3_hdr_sample_rate_index] 1155 0000090B C1E005 shl eax, 5 1156 0000090E 0305[983D0500] add eax, [_@@region_address0] 1157 00000914 0FB78400[ACF50100] movzx eax, word [mp3_band_index_long+eax*2] 1158 0000091C D1E8 shr eax, 1 1159 0000091E 894350 mov [ebx+80], eax ; [ebx+$mp3gr_region_size+0*4] 1160 00000921 A1[C0BB0000] mov eax, [mp3_hdr_sample_rate_index] 1161 00000926 C1E005 shl eax, 5 1162 00000929 0305[9C3D0500] add eax, [_@@region_address1] 1163 0000092F 0FB78400[ACF50100] movzx eax, word [mp3_band_index_long+eax*2] 1164 00000937 D1E8 shr eax, 1 1165 00000939 894354 mov [ebx+84], eax ; [ebx+$mp3gr_region_size+1*4] 1166 0000093C C7435820010000 mov dword [ebx+88], 288 ; [ebx+$mp3gr_region_size+2*4],576/2 1167 1168 .blocksplit_done: 1169 00000943 8D7B50 lea edi, [ebx+80] ; [ebx+$mp3gr_region_size+0] 1170 00000946 31D2 xor edx, edx 1171 00000948 B103 mov cl, 3 1172 1173 .trunc_region_size_lop: 1174 0000094A 8B07 mov eax, [edi] 1175 0000094C 3B430C cmp eax, [ebx+12] ; [ebx+$mp3gr_big_values] 1176 0000094F 7603 jbe short .trunc_region_size_this 1177 00000951 8B430C mov eax, [ebx+12] 1178 1179 .trunc_region_size_this: 1180 00000954 29D0 sub eax, edx 1181 00000956 8907 mov [edi], eax 1182 00000958 01C2 add edx, eax 1183 0000095A 83C704 add edi, 4 1184 0000095D FEC9 dec cl 1185 0000095F 75E9 jnz short .trunc_region_size_lop 1186 00000961 C7431C0D000000 mov dword [ebx+28], 13 ; [ebx+$mp3gr_short_start] 1187 00000968 C7432016000000 mov dword [ebx+32], 22 ; [ebx+$mp3gr_long_end] 1188 0000096F 837B2C02 cmp dword [ebx+44], 2 ; [ebx+$mp3gr_block_type] 1189 00000973 7549 jnz short .these_band_indices 1190 00000975 C7431C00000000 mov dword [ebx+28], 0 ; [ebx+$mp3gr_short_start] 1191 0000097C C7432000000000 mov dword [ebx+32], 0 ; [ebx+$mp3gr_long_end] 1192 00000983 837B3000 cmp dword [ebx+48], 0 ; [ebx+$mp3gr_switch_point] 1193 00000987 7435 jz short .these_band_indices 1194 00000989 C7431C02000000 mov dword [ebx+28], 2 ; [ebx+$mp3gr_short_start] 1195 00000990 C7432004000000 mov dword [ebx+32], 4 ; [ebx+$mp3gr_long_end] 1196 00000997 833D[C0BB0000]08 cmp dword [mp3_hdr_sample_rate_index], 8 1197 0000099E 741E jz short .these_band_indices 1198 000009A0 833D[C0BB0000]02 cmp dword [mp3_hdr_sample_rate_index], 2 1199 000009A7 C7431C03000000 mov dword [ebx+28], 3 ; [ebx+$mp3gr_short_start] 1200 000009AE C7432008000000 mov dword [ebx+32], 8 ; [ebx+$mp3gr_long_end] 1201 000009B5 7607 jbe short .these_band_indices 1202 000009B7 C7432006000000 mov dword [ebx+32], 6 ; [ebx+$mp3gr_long_end] 1203 1204 .these_band_indices: 1205 000009BE 31C0 xor eax, eax 1206 000009C0 833D[E0BB0000]00 cmp dword [mp3_hdr_flag_lsf], 0 1207 000009C7 7520 jnz short .no_preflag 1208 000009C9 89E8 mov eax, ebp ; mp3mac_get_n_bits 1 1209 000009CB D1E5 shl ebp, 1 1210 000009CD D1C0 rol eax, 1 1211 000009CF 31E8 xor eax, ebp 1212 000009D1 80ED01 sub ch, 1 1213 000009D4 7913 jns short .no_preflag 1214 000009D6 88E9 mov cl, ch 1215 000009D8 80C510 add ch, 10h 1216 000009DB D3C5 rol ebp, cl 1217 000009DD 668B2E mov bp, [esi] 1218 000009E0 83C602 add esi, 2 1219 000009E3 66C1CD08 ror bp, 8 1220 000009E7 D3CD ror ebp, cl 1221 1222 .no_preflag: 1223 000009E9 894318 mov [ebx+24], eax ; [ebx+$mp3gr_preflag] 1224 000009EC 89E8 mov eax, ebp ; mp3mac_get_n_bits 1 1225 000009EE D1E5 shl ebp, 1 1226 000009F0 D1C0 rol eax, 1 1227 000009F2 31E8 xor eax, ebp 1228 000009F4 80ED01 sub ch, 1 1229 000009F7 7913 jns short .@_without_crc@@@@@ 1230 000009F9 88E9 mov cl, ch 1231 000009FB 80C510 add ch, 10h 1232 000009FE D3C5 rol ebp, cl 1233 00000A00 668B2E mov bp, [esi] 1234 00000A03 83C602 add esi, 2 1235 00000A06 66C1CD08 ror bp, 8 1236 00000A0A D3CD ror ebp, cl 1237 1238 .@_without_crc@@@@@: 1239 00000A0C 40 inc eax 1240 00000A0D 894334 mov [ebx+52], eax ; [ebx+$mp3gr_scalefac_scale] 1241 00000A10 89E8 mov eax, ebp ; mp3mac_get_n_bits 1 1242 00000A12 D1E5 shl ebp, 1 1243 00000A14 D1C0 rol eax, 1 1244 00000A16 31E8 xor eax, ebp 1245 00000A18 80ED01 sub ch, 1 1246 00000A1B 7913 jns short .@_without_crc@@@@@@ 1247 00000A1D 88E9 mov cl, ch 1248 00000A1F 80C510 add ch, 10h 1249 00000A22 D3C5 rol ebp, cl 1250 00000A24 668B2E mov bp, [esi] 1251 00000A27 83C602 add esi, 2 1252 00000A2A 66C1CD08 ror bp, 8 1253 00000A2E D3CD ror ebp, cl 1254 1255 .@_without_crc@@@@@@: 1256 00000A30 83C010 add eax, 10h ; table 10h..11h (quad_vlc) 1257 00000A33 894324 mov [ebx+36], eax ; [ebx+$mp3gr_count1table_select] 1258 00000A36 81C340130000 add ebx, 4928 ; $mp3gr_entrysiz*2 1259 00000A3C FF05[88120100] inc dword [mp3_curr_channel] 1260 00000A42 A1[88120100] mov eax, [mp3_curr_channel] 1261 00000A47 3B05[C8BB0000] cmp eax, [mp3_num_channels] 1262 00000A4D 0F82C1FBFFFF jb .hdr_channel_lop 1263 00000A53 5B pop ebx 1264 00000A54 81C3A0090000 add ebx, 2464 ; $mp3gr_entrysiz 1265 00000A5A FF05[8C120100] inc dword [mp3_curr_granule] 1266 00000A60 A1[8C120100] mov eax, [mp3_curr_granule] 1267 00000A65 3B05[A8120100] cmp eax, [mp3_nb_granules] 1268 00000A6B 0F8298FBFFFF jb .hdr_granule_lop 1269 1270 ; 16/02/2025 1271 .no_rdtsc_supported@: 1272 ;clc 1273 00000A71 C3 retn 1274 1275 .error: 1276 ; 16/02/2025 1277 .no_rdtsc_supported@@: 1278 00000A72 8B25[A03D0500] mov esp, [_@@saved_sp] 1279 00000A78 F9 stc 1280 00000A79 C3 retn 1281 1282 1283 ; =============== S U B R O U T I N E ======================================= 1284 1285 1286 mp3_bitstream_append_to_main_data_pool: 1287 ; 16/02/2025 1288 1289 .no_rdtsc_supported: 1290 00000A7A 8B0D[A8BB0000] mov ecx, [mp3_src_frame_end] 1291 00000A80 29F1 sub ecx, esi 1292 00000A82 0F8221020000 jb fatalunexpected 1293 00000A88 8B3D[9CBB0000] mov edi, [main_data_pool_wr_ptr] 1294 00000A8E 8D040F lea eax, [edi+ecx] 1295 00000A91 3D[9CBB0000] cmp eax, main_data_pool_wr_ptr 1296 00000A96 7616 jbe short .pool_inrange 1297 00000A98 51 push ecx 1298 00000A99 56 push esi 1299 00000A9A 8DB700FEFFFF lea esi, [edi-200h] 1300 00000AA0 BF[9CAB0000] mov edi, main_data_pool_start 1301 00000AA5 B980000000 mov ecx, 128 1302 00000AAA F3A5 rep movsd 1303 00000AAC 5E pop esi 1304 00000AAD 59 pop ecx 1305 1306 .pool_inrange: 1307 00000AAE 89F8 mov eax, edi 1308 00000AB0 2B05[A0120100] sub eax, [mp3_main_data_begin] 1309 00000AB6 F3A4 rep movsb 1310 00000AB8 893D[9CBB0000] mov [main_data_pool_wr_ptr], edi 1311 00000ABE 3D[9CAB0000] cmp eax, main_data_pool_start 1312 00000AC3 7811 js short .below_pool_start 1313 00000AC5 A3[94120100] mov [mp3_bitstream_start], eax 1314 ; 22/10/2024 1315 ;mov eax, 0 1316 00000ACA 8B35[94120100] mov esi, [mp3_bitstream_start] ; mp3mac_bitstream_set_position 1317 ;mov cl, al 1318 ;shr eax, 3 1319 ;and cl, 7 1320 ;add esi, eax 1321 00000AD0 E8D3F7FFFF call mp3_recollect_bits 1322 ;mov eax, ebp ; mp3mac_get_n_bits cl 1323 ;shl ebp, cl 1324 ;rol eax, cl 1325 ;xor eax, ebp 1326 ;sub ch, cl 1327 ;jns short .cont 1328 ;mov cl, ch ; mp3mac_collect_more 1329 ;add ch, 10h 1330 ;rol ebp, cl 1331 ;mov bp, [esi] 1332 ;add esi, 2 1333 ;ror bp, 8 1334 ;ror ebp, cl 1335 1336 .cont: 1337 ; 16/02/2025 1338 ; clc ; not needed 1339 1340 .no_rdtsc_supported@: 1341 00000AD5 C3 retn 1342 1343 .below_pool_start: 1344 00000AD6 C705[80120100]0000- mov dword [mp3_samples_output_size], 0 1344 00000ADE 0000 1345 00000AE0 EBF3 jmp short .cont 1346 1347 1348 ; =============== S U B R O U T I N E ======================================= 1349 1350 1351 mp3_bitstream_read_scalefacs: 1352 ; 16/02/2025 1353 1354 .no_rdtsc_supported: 1355 00000AE2 8D7B70 lea edi, [ebx+112] ; [ebx+$mp3gr_scale_factors] 1356 00000AE5 833D[E0BB0000]00 cmp dword [mp3_hdr_flag_lsf], 0 1357 00000AEC 0F850D010000 jnz .body_lsf_nonzero 1358 00000AF2 8B4314 mov eax, [ebx+20] ; [ebx+$mp3gr_scalefac_compress] 1359 00000AF5 668B9400[E4970000] mov dx, [mp3_slen_table+eax*2] ; slen[0,1] 1360 00000AFD 837B2C02 cmp dword [ebx+44], 2 ; [ebx+$mp3gr_block_type] 1361 00000B01 757F jnz short .body_lsf_zero_non_type2 1362 00000B03 53 push ebx 1363 00000B04 B012 mov al, 18 1364 00000B06 2A4330 sub al, [ebx+48] ; [ebx+$mp3gr_switch_point] 1365 00000B09 88C3 mov bl, al ; @@get_bl_scalefacs_with_dl_bits 0 1366 00000B0B 80FA00 cmp dl, 0 1367 00000B0E 7428 jz short .quickfill 1368 1369 .scalefac_get_lop: 1370 00000B10 88D1 mov cl, dl ; LSB of edx, slen[i] 1371 00000B12 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 1372 00000B14 D3E5 shl ebp, cl 1373 00000B16 D3C0 rol eax, cl 1374 00000B18 31E8 xor eax, ebp 1375 00000B1A 28CD sub ch, cl 1376 00000B1C 7913 jns short .cont@ 1377 00000B1E 88E9 mov cl, ch ; mp3mac_collect_more 1378 00000B20 80C510 add ch, 10h 1379 00000B23 D3C5 rol ebp, cl 1380 00000B25 668B2E mov bp, [esi] 1381 00000B28 83C602 add esi, 2 1382 00000B2B 66C1CD08 ror bp, 8 1383 00000B2F D3CD ror ebp, cl 1384 1385 .cont@: 1386 00000B31 AA stosb 1387 00000B32 FECB dec bl 1388 00000B34 75DA jnz short .scalefac_get_lop 1389 00000B36 EB09 jmp short .skip_quickfill 1390 1391 .quickfill: 1392 00000B38 51 push ecx 1393 00000B39 0FB6CB movzx ecx, bl 1394 00000B3C B000 mov al, 0 ; NO_INTENSITY_FLAG 1395 00000B3E F3AA rep stosb 1396 00000B40 59 pop ecx 1397 1398 .skip_quickfill: 1399 00000B41 C1EA08 shr edx, 8 1400 00000B44 B312 mov bl, 18 1401 00000B46 80FA00 cmp dl, 0 ; @@get_bl_scalefacs_with_dl_bits 0 1402 00000B49 7428 jz short .quickfill@ 1403 1404 .scalefac_get_lop@: 1405 00000B4B 88D1 mov cl, dl 1406 00000B4D 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 1407 00000B4F D3E5 shl ebp, cl 1408 00000B51 D3C0 rol eax, cl 1409 00000B53 31E8 xor eax, ebp 1410 00000B55 28CD sub ch, cl 1411 00000B57 7913 jns short .cont@@ 1412 00000B59 88E9 mov cl, ch ; mp3mac_collect_more 1413 00000B5B 80C510 add ch, 10h 1414 00000B5E D3C5 rol ebp, cl 1415 00000B60 668B2E mov bp, [esi] 1416 00000B63 83C602 add esi, 2 1417 00000B66 66C1CD08 ror bp, 8 1418 00000B6A D3CD ror ebp, cl 1419 1420 .cont@@: 1421 00000B6C AA stosb 1422 00000B6D FECB dec bl 1423 00000B6F 75DA jnz short .scalefac_get_lop@ 1424 00000B71 EB09 jmp short .skip_quickfill@ 1425 1426 .quickfill@: 1427 00000B73 51 push ecx 1428 00000B74 0FB6CB movzx ecx, bl 1429 00000B77 B000 mov al, 0 1430 00000B79 F3AA rep stosb 1431 00000B7B 59 pop ecx 1432 1433 .skip_quickfill@: 1434 00000B7C 5B pop ebx 1435 00000B7D E914010000 jmp .body_lsf_zeropad 1436 1437 .body_lsf_zero_non_type2: 1438 00000B82 53 push ebx 1439 00000B83 C1CA08 ror edx, 8 1440 00000B86 88D6 mov dh, dl ; slen[0,1,2,3] = slen[0,0,1,1] 1441 00000B88 C1C210 rol edx, 16 1442 00000B8B 88F2 mov dl, dh 1443 00000B8D 8A4328 mov al, [ebx+40] ; [ebx+$mp3gr_scfsi] 1444 00000B90 C0E004 shl al, 4 ; move to upper 4bit 1445 00000B93 A2[A83D0500] mov byte [_@@scfsi], al 1446 00000B98 BB06050505 mov ebx, 5050506h ; num[0..3] 1447 1448 .body_lsf_zero_non_type2_lop: 1449 00000B9D D025[A83D0500] shl byte [_@@scfsi], 1 1450 00000BA3 7238 jb short .body_lsf_zero_non_type2_copy 1451 00000BA5 80FA00 cmp dl, 0 ; @@get_bl_scalefacs_with_dl_bits 0 1452 00000BA8 7428 jz short .quickfill@@ 1453 1454 .scalefac_get_lop@@: 1455 00000BAA 88D1 mov cl, dl 1456 00000BAC 89E8 mov eax, ebp 1457 00000BAE D3E5 shl ebp, cl 1458 00000BB0 D3C0 rol eax, cl 1459 00000BB2 31E8 xor eax, ebp 1460 00000BB4 28CD sub ch, cl 1461 00000BB6 7913 jns short .cont@@@ 1462 00000BB8 88E9 mov cl, ch 1463 00000BBA 80C510 add ch, 10h 1464 00000BBD D3C5 rol ebp, cl 1465 00000BBF 668B2E mov bp, [esi] 1466 00000BC2 83C602 add esi, 2 1467 00000BC5 66C1CD08 ror bp, 8 1468 00000BC9 D3CD ror ebp, cl 1469 1470 .cont@@@: 1471 00000BCB AA stosb 1472 00000BCC FECB dec bl 1473 00000BCE 75DA jnz short .scalefac_get_lop@@ 1474 00000BD0 EB09 jmp short .skip_quickfill@@ 1475 1476 .quickfill@@: 1477 00000BD2 51 push ecx 1478 00000BD3 0FB6CB movzx ecx, bl 1479 00000BD6 B000 mov al, 0 1480 00000BD8 F3AA rep stosb 1481 00000BDA 59 pop ecx 1482 1483 .skip_quickfill@@: 1484 00000BDB EB11 jmp short .body_lsf_zero_non_type2_next 1485 1486 .body_lsf_zero_non_type2_copy: 1487 00000BDD 51 push ecx 1488 00000BDE 89F0 mov eax, esi 1489 00000BE0 0FB6CB movzx ecx, bl ; copy 1490 00000BE3 8DB760F6FFFF lea esi, [edi-2464] ; [edi-$mp3gr_entrysiz] ; src=granule[0] ; from 1491 00000BE9 F3A4 rep movsb ; prev 1492 00000BEB 89C6 mov esi, eax 1493 00000BED 59 pop ecx 1494 1495 .body_lsf_zero_non_type2_next: 1496 00000BEE C1EA08 shr edx, 8 ; dl=next slen 1497 00000BF1 C1EB08 shr ebx, 8 ; bl=next numfacs 1498 00000BF4 75A7 jnz short .body_lsf_zero_non_type2_lop 1499 00000BF6 5B pop ebx 1500 00000BF7 B000 mov al, 0 1501 00000BF9 AA stosb 1502 00000BFA E9A9000000 jmp .body_lsf_done 1503 1504 .body_lsf_nonzero: 1505 00000BFF 8B5314 mov edx, [ebx+14h] ; [ebx+$mp3gr_scalefac_compress] 1506 00000C02 F705[DCBB0000]0100- test dword [mp3_hdr_mode_ext], 1 ; MODE_EXT_I_STEREO 1506 00000C0A 0000 1507 00000C0C 740F jz short .normal_scalefac 1508 00000C0E 833D[88120100]00 cmp dword [mp3_curr_channel], 0 1509 00000C15 7406 jz short .normal_scalefac 1510 00000C17 81C200020000 add edx, 512 ; for 2nd channel of intensity_stereo 1511 1512 .normal_scalefac: 1513 00000C1D 8A04D5[9D1D0500] mov al, [(mp3_lsf_sf_expand_exploded_table+5)+edx*8] 1514 00000C24 084318 or [ebx+24], al ; [ebx+$mp3gr_preflag] 1515 00000C27 53 push ebx 1516 00000C28 0FB604D5[9C1D0500] movzx eax, byte [(mp3_lsf_sf_expand_exploded_table+4)+edx*8] 1517 00000C30 837B2C02 cmp dword [ebx+44], 2 ; [ebx+$mp3gr_block_type] 1518 00000C34 7507 jnz short .this_tindex1 1519 00000C36 8B5B30 mov ebx, [ebx+48] ; [ebx+$mp3gr_switch_point] 1520 00000C39 8D449804 lea eax, [eax+ebx*4+4] 1521 1522 .this_tindex1: 1523 00000C3D 8B98[04980000] mov ebx, [mp3_lsf_nsf_table+eax] 1524 00000C43 8B14D5[981D0500] mov edx, dword [mp3_lsf_sf_expand_exploded_table+edx*8] 1525 1526 .scalefax_outer_lop: 1527 00000C4A 80FA00 cmp dl, 0 ; @@get_bl_scalefacs_with_dl_bits 1 1528 00000C4D 7435 jz short .@quickfil 1529 1530 .@scalefac_get_lop: 1531 00000C4F 88D1 mov cl, dl 1532 00000C51 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 1533 00000C53 D3E5 shl ebp, cl 1534 00000C55 D3C0 rol eax, cl 1535 00000C57 31E8 xor eax, ebp 1536 00000C59 28CD sub ch, cl 1537 00000C5B 7913 jns short .cont 1538 00000C5D 88E9 mov cl, ch 1539 00000C5F 80C510 add ch, 10h 1540 00000C62 D3C5 rol ebp, cl 1541 00000C64 668B2E mov bp, [esi] 1542 00000C67 83C602 add esi, 2 1543 00000C6A 66C1CD08 ror bp, 8 1544 00000C6E D3CD ror ebp, cl 1545 1546 .cont: 1547 00000C70 88D1 mov cl, dl ; numbits 1548 00000C72 88C4 mov ah, al 1549 00000C74 FEC4 inc ah ; val+1 1550 00000C76 D2EC shr ah, cl ; bit0=is.max.value 1551 00000C78 C0E407 shl ah, 7 ; bit7=is.max.value 1552 00000C7B 08E0 or al, ah ; apply NO_INTENSITY_FLAG 1553 00000C7D AA stosb 1554 00000C7E FECB dec bl 1555 00000C80 75CD jnz short .@scalefac_get_lop 1556 00000C82 EB09 jmp short .@skip_quickfill 1557 1558 .@quickfil: 1559 00000C84 51 push ecx 1560 00000C85 0FB6CB movzx ecx, bl 1561 00000C88 B080 mov al, 80h 1562 00000C8A F3AA rep stosb 1563 00000C8C 59 pop ecx 1564 1565 .@skip_quickfill: 1566 00000C8D C1EA08 shr edx, 8 1567 00000C90 C1EB08 shr ebx, 8 1568 00000C93 75B5 jnz short .scalefax_outer_lop 1569 00000C95 5B pop ebx 1570 1571 .body_lsf_zeropad: 1572 00000C96 89CA mov edx, ecx 1573 00000C98 8D8B98000000 lea ecx, [ebx+152] ; [ebx+$mp3gr_scale_factors+40] 1574 00000C9E 29F9 sub ecx, edi 1575 ;jb short fatal_scalefactors 1576 ; 21/10/2024 1577 00000CA0 7207 jb short fatalunexpected 1578 00000CA2 B000 mov al, 0 1579 00000CA4 F3AA rep stosb 1580 00000CA6 89D1 mov ecx, edx 1581 1582 .body_lsf_done: 1583 ; 16/02/2025 1584 ; clc ; not needed 1585 1586 .no_rdtsc_supported@@@: 1587 00000CA8 C3 retn 1588 1589 ; 21/10/2024 1590 ;fatal_scalefactors: 1591 ;jmp fatalunexpected 1592 1593 ; --------------------------------------------------------------------------- 1594 1595 ; 21/10/2024 1596 fatalunexpected: 1597 00000CA9 F735[36A20000] div dword [zero] 1598 hang: 1599 00000CAF EBFE jmp short hang 1600 1601 1602 ; =============== S U B R O U T I N E ======================================= 1603 1604 1605 mp3_get_exponents_from_scale_factors: 1606 ; 16/02/2025 1607 1608 .no_rdtsc_supported: 1609 00000CB1 51 push ecx ; mp3mac_push_bitstream 1610 00000CB2 55 push ebp 1611 00000CB3 56 push esi 1612 00000CB4 C705[B83D0500]0000- mov dword [_@@rle_point], 0 1612 00000CBC 0000 1613 00000CBE 8A4B34 mov cl, [ebx+52] ; [ebx+$mp3gr_scalefac_scale] 1614 00000CC1 BF[2C390100] mov edi, mp3_exponents 1615 00000CC6 31D2 xor edx, edx 1616 00000CC8 3B5320 cmp edx, [ebx+32] ; [ebx+$mp3gr_long_end] 1617 00000CCB 7345 jnb short .long_done 1618 00000CCD A1[C0BB0000] mov eax, [mp3_hdr_sample_rate_index] 1619 00000CD2 6BC016 imul eax, 22 1620 00000CD5 8DA8[149E0000] lea ebp, [mp3_band_size_long+eax] 1621 00000CDB 8B4318 mov eax, [ebx+24] ; [ebx+$mp3gr_preflag] 1622 00000CDE 6BC016 imul eax, 22 1623 00000CE1 8DB0[649F0000] lea esi, [mp3_pretab+eax] 1624 1625 .long_lop: 1626 00000CE7 0FB6441370 movzx eax, byte [ebx+edx+112] ; [ebx+$mp3gr_scale_factors+edx] 1627 00000CEC 247F and al, 7Fh ; strip NO_INTENSITY_FLAG 1628 00000CEE 020416 add al, [esi+edx] 1629 00000CF1 D3E0 shl eax, cl 1630 00000CF3 F7D8 neg eax 1631 00000CF5 034310 add eax, [ebx+16] ; [ebx+$mp3gr_global_gain] 1632 00000CF8 C1E010 shl eax, 16 1633 00000CFB 8A441500 mov al, [ebp+edx+0] 1634 00000CFF 0305[B83D0500] add eax, [_@@rle_point] 1635 00000D05 66A3[B83D0500] mov word [_@@rle_point], ax 1636 00000D0B AB stosd 1637 00000D0C 42 inc edx 1638 00000D0D 3B5320 cmp edx, [ebx+32] ; [ebx+$mp3gr_long_end] 1639 00000D10 72D5 jb short .long_lop 1640 1641 .long_done: 1642 00000D12 8B531C mov edx, [ebx+28] ; [ebx+$mp3gr_short_start] 1643 00000D15 83FA0D cmp edx, 13 1644 00000D18 0F83AA000000 jnb .skip_shorts 1645 00000D1E A1[C0BB0000] mov eax, [mp3_hdr_sample_rate_index] 1646 00000D23 6BC00D imul eax, 13 1647 00000D26 8DA8[E49E0000] lea ebp, [mp3_band_size_short+eax] 1648 00000D2C 8B7320 mov esi, [ebx+32] ; [ebx+$mp3gr_long_end] 1649 00000D2F 8B4310 mov eax, [ebx+16] ; [ebx+$mp3gr_global_gain] 1650 ; IRP nn,0,1,2 1651 00000D32 2B4344 sub eax, [ebx+68] ; [ebx+$mp3gr_subblock_gain+nn*4] 1652 00000D35 A3[AC3D0500] mov [_@@gains], eax ; [@@gains+nn*4] 1653 00000D3A 8B4310 mov eax, [ebx+16] 1654 00000D3D 2B4348 sub eax, [ebx+72] 1655 00000D40 A3[B03D0500] mov [_@@gains+4], eax ; [@@gains+nn*4] 1656 00000D45 8B4310 mov eax, [ebx+16] 1657 00000D48 2B434C sub eax, [ebx+76] ; [ebx+$mp3gr_subblock_gain+nn*4] 1658 00000D4B A3[B43D0500] mov [_@@gains+8], eax ; [@@gains+nn*4] 1659 1660 .short_lop: 1661 00000D50 0FB6443370 movzx eax, byte [ebx+esi+112] ; [ebx+$mp3gr_scale_factors+esi] 1662 ; IRP nn,0,1,2 1663 00000D55 247F and al, 7Fh ; strip NO_INTENSITY_FLAG 1664 00000D57 46 inc esi 1665 00000D58 D3E0 shl eax, cl 1666 00000D5A F7D8 neg eax 1667 00000D5C 0305[AC3D0500] add eax, [_@@gains] ; [@@gains+nn*4] ; nn=0 1668 00000D62 C1E010 shl eax, 16 1669 00000D65 8A441500 mov al, [ebp+edx+0] ; bstab[edx] 1670 00000D69 0305[B83D0500] add eax, [_@@rle_point] 1671 00000D6F 66A3[B83D0500] mov word [_@@rle_point], ax 1672 00000D75 AB stosd ; msw=val, lsw=point 1673 00000D76 0FB6443370 movzx eax, byte [ebx+esi+112] ; [ebx+$mp3gr_scalefac_scale] 1674 00000D7B 247F and al, 7Fh 1675 00000D7D 46 inc esi 1676 00000D7E D3E0 shl eax, cl 1677 00000D80 F7D8 neg eax 1678 00000D82 0305[B03D0500] add eax, [_@@gains+4] ; [@@gains+nn*4] ; nn = 1 1679 00000D88 C1E010 shl eax, 16 1680 00000D8B 8A441500 mov al, [ebp+edx+0] 1681 00000D8F 0305[B83D0500] add eax, [_@@rle_point] 1682 00000D95 66A3[B83D0500] mov word [_@@rle_point], ax 1683 00000D9B AB stosd 1684 00000D9C 0FB6443370 movzx eax, byte [ebx+esi+70h] 1685 00000DA1 247F and al, 7Fh 1686 00000DA3 46 inc esi 1687 00000DA4 D3E0 shl eax, cl 1688 00000DA6 F7D8 neg eax 1689 00000DA8 0305[B43D0500] add eax, [_@@gains+8] ; [@@gains+nn*4] ; nn=2 1690 00000DAE C1E010 shl eax, 10h 1691 00000DB1 8A441500 mov al, [ebp+edx+0] 1692 00000DB5 0305[B83D0500] add eax, [_@@rle_point] 1693 00000DBB 66A3[B83D0500] mov word [_@@rle_point], ax 1694 00000DC1 AB stosd 1695 00000DC2 42 inc edx 1696 00000DC3 83FA0D cmp edx, 13 1697 00000DC6 7288 jb short .short_lop 1698 1699 .skip_shorts: 1700 00000DC8 5E pop esi ; mp3mac_pop_bitstream 1701 00000DC9 5D pop ebp 1702 00000DCA 59 pop ecx 1703 1704 ; 16/02/2025 1705 1706 .no_rdtsc_supported@: 1707 00000DCB C3 retn 1708 1709 1710 ; =============== S U B R O U T I N E ======================================= 1711 1712 1713 mp3_huffman_decode: 1714 ; 16/02/2025 1715 1716 .no_rdtsc_supported: 1717 00000DCC 8B4308 mov eax, [ebx+8] ; [ebx+$mp3gr_part2_3_end] 1718 00000DCF C1E803 shr eax, 3 1719 00000DD2 0305[94120100] add eax, [mp3_bitstream_start] 1720 00000DD8 A3[CC3D0500] mov [_@@coarse_end], eax 1721 00000DDD 31FF xor edi, edi 1722 00000DDF C705[D43D0500]- mov dword [_@@rle_ptr], mp3_exponents 1722 00000DE5 [2C390100] 1723 00000DE9 C705[D03D0500]0000- mov dword [_@rle_point], 0 1723 00000DF1 0000 1724 00000DF3 C705[BC3D0500]0000- mov dword [_@@III], 0 ; i=0 1724 00000DFB 0000 1725 1726 .low_freq_lop_i: 1727 00000DFD 8B15[BC3D0500] mov edx, [_@@III] ; for i=0 to 2 1728 ; low frequencies (called big_values)... 1729 00000E03 8B449350 mov eax, [ebx+edx*4+80] ; [ebx+$mp3gr_region_size+edx*4] 1730 00000E07 83F800 cmp eax, 0 1731 00000E0A 0F84D9020000 jz .low_freq_next_i 1732 00000E10 A3[C03D0500] mov [_@@JJJ], eax 1733 00000E15 8B549338 mov edx, [ebx+edx*4+56] ; [ebx+$mp3gr_table_select+edx*4] 1734 ; select vlc table 1735 00000E19 0FB68412[D49D0000] movzx eax, byte [mp3_huff_data+edx*2] ; get huff.table number 1736 00000E21 83F800 cmp eax, 0 ; huff.table 1737 00000E24 7528 jnz short .low_freq_nonzero 1738 00000E26 51 push ecx 1739 00000E27 57 push edi 1740 00000E28 8DBCBBA0000000 lea edi, [ebx+edi*4+160] ; [ebx+$mp3gr_sb_hybrid+edi*4] 1741 00000E2F 8B0D[C03D0500] mov ecx, [_@@JJJ] 1742 00000E35 D1E1 shl ecx, 1 1743 00000E37 31C0 xor eax, eax ; when huff.table=0, 1744 ; simply set NUM*2 entries to zero 1745 00000E39 F3AB rep stosd 1746 00000E3B 5F pop edi 1747 00000E3C 59 pop ecx 1748 00000E3D 033D[C03D0500] add edi, [_@@JJJ] ; raise index accordingly (by num*2) 1749 00000E43 033D[C03D0500] add edi, [_@@JJJ] 1750 00000E49 E99B020000 jmp .low_freq_next_i 1751 1752 .low_freq_nonzero: 1753 00000E4E A3[C83D0500] mov [_@@vlc_table], eax ; =1..15 1754 00000E53 83F80E cmp eax, 14 ; only table 14..15 have linbits 1755 00000E56 0F83FA000000 jnb .with_linbits ; so table 0..13 can use faster code... 1756 1757 .low_freq_lop_j_small: 1758 00000E5C 3B35[CC3D0500] cmp esi, [_@@coarse_end] ; loop @@JJJ times.. 1759 00000E62 0F87CF000000 ja .small_near_end 1760 1761 .small_not_end: 1762 00000E68 3B3D[D03D0500] cmp edi, [_@rle_point] ; @@get_runlength small 1763 00000E6E 0F8386030000 jnb .rle_fetch_next_small 1764 1765 .rle_back_small: 1766 00000E74 8B15[C83D0500] mov edx, [_@@vlc_table] ; get huffcode 1767 1768 .get_child_lop: 1769 00000E7A 8A0C95[AE3D0100] mov cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode 1770 ; in: edx=table, out: eax=data 1771 ; bits (table size) (-7..-1) 1772 00000E81 668B1495[AC3D0100] mov dx, word [huff_tree_buf+edx*4] ; code (child table) 1773 00000E89 89E8 mov eax, ebp ; mov eax,mp3_col32 ; peek bitstream 1774 00000E8B D3E8 shr eax, cl 1775 00000E8D 01C2 add edx, eax 1776 00000E8F 8A0C95[AE3D0100] mov cl, [(huff_tree_buf+2)+edx*4] ; bits (of entry) 1777 00000E96 80F900 cmp cl, 0 1778 00000E99 7823 js short .got_child 1779 00000E9B 0FB70495[AC3D0100] movzx eax, word [huff_tree_buf+edx*4] ; return data value 1780 00000EA3 D3E5 shl ebp, cl ; shl mp3_col32,cl ; discard cl bits 1781 00000EA5 28CD sub ch, cl ; sub mp3_colNN,cl 1782 00000EA7 7932 jns short .got_done 1783 00000EA9 88E9 mov cl, ch ; mp3mac_collect_more 1784 ; mov cl,mp3_colNN ; byte ptr [mp3_numbits_collected] 1785 00000EAB 80C510 add ch, 16 ; byte ptr [mp3_numbits_collected] 1786 00000EAE D3C5 rol ebp, cl ; dword ptr [mp3_collected_data] 1787 00000EB0 668B2E mov bp, [esi] 1788 00000EB3 83C602 add esi, 2 1789 00000EB6 66C1CD08 ror bp, 8 ; ror mp3_col16,8 ; endianess 1790 00000EBA D3CD ror ebp, cl ; ror mp3_col32,cl ; dword ptr [mp3_collected_data] 1791 00000EBC EB1D jmp short .got_done 1792 1793 .got_child: 1794 00000EBE C1E509 shl ebp, 9 ; shl mp3_col32,CHILD_BITS 1795 ; discard 7 bits 1796 ; (assuming that parents are always 7bit wide) 1797 00000EC1 80ED09 sub ch, 9 1798 00000EC4 79B4 jns short .get_child_lop 1799 00000EC6 88E9 mov cl, ch ; mp3mac_collect_more 1800 00000EC8 80C510 add ch, 10h 1801 00000ECB D3C5 rol ebp, cl 1802 00000ECD 668B2E mov bp, [esi] 1803 00000ED0 83C602 add esi, 2 1804 00000ED3 66C1CD08 ror bp, 8 1805 00000ED7 D3CD ror ebp, cl 1806 00000ED9 EB9F jmp short .get_child_lop 1807 1808 .got_done: 1809 00000EDB 50 push eax 1810 00000EDC C1E804 shr eax, 4 ; x 1811 00000EDF 7417 jz short .this_sign ; @@getexpval 0 ; @@getexpval macro has_linbits 1812 ; eax=0 (without sign) ; when x=0 1813 00000EE1 8B15[DC3D0500] mov edx, [_@@rle_val_x_40h] 1814 00000EE7 8B8482[18810400] mov eax, [mp3_expval_table+edx+eax*4] 1815 00000EEE FECD dec ch ; mp3mac_get_bit_to_cy 1816 ; ;jnc short @@this_sign 1817 ; ;neg eax 1818 00000EF0 D1E5 shl ebp, 1 ; dec mp3_colNN ; shl mp3_col32,1 ; cy=data 1819 00000EF2 19D2 sbb edx, edx ; cy=0,1 --> 0,FFFFFFFF 1820 00000EF4 31D0 xor eax, edx ; invert if cy was 1 ; get sign (negate if sign=1) 1821 00000EF6 29D0 sub eax, edx ; add 1 if cy was 1 1822 1823 .this_sign: 1824 00000EF8 8984BBA0000000 mov [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0] 1825 00000EFF 58 pop eax 1826 00000F00 83E00F and eax, 0Fh ; y 1827 00000F03 7417 jz short .this_sign@ ; @@getexpval 0 1828 00000F05 8B15[DC3D0500] mov edx, [_@@rle_val_x_40h] 1829 00000F0B 8B8482[18810400] mov eax, [mp3_expval_table+edx+eax*4] 1830 00000F12 FECD dec ch 1831 00000F14 D1E5 shl ebp, 1 1832 00000F16 19D2 sbb edx, edx 1833 00000F18 31D0 xor eax, edx 1834 00000F1A 29D0 sub eax, edx 1835 1836 .this_sign@: 1837 00000F1C 8984BBA4000000 mov [ebx+edi*4+164], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+4] 1838 00000F23 83C702 add edi, 2 1839 00000F26 FF0D[C03D0500] dec dword [_@@JJJ] 1840 00000F2C 0F852AFFFFFF jnz .low_freq_lop_j_small 1841 00000F32 E9B2010000 jmp .low_freq_next_i 1842 1843 .small_near_end: 1844 00000F37 89F0 mov eax, esi ; mp3mac_bitstream_get_position 1845 00000F39 2B05[94120100] sub eax, [mp3_bitstream_start] 1846 00000F3F 0FBED5 movsx edx, ch ; mp3_colNN 1847 00000F42 F7DA neg edx 1848 00000F44 8D44C2F0 lea eax, [edx+eax*8-16] 1849 00000F48 3B4308 cmp eax, [ebx+8] ; [ebx+$mp3gr_part2_3_end] 1850 00000F4B 0F8217FFFFFF jb .small_not_end 1851 00000F51 E993010000 jmp .low_freq_next_i 1852 1853 .with_linbits: 1854 00000F56 0FB68412[D59D0000] movzx eax, byte [(mp3_huff_data+1)+edx*2] 1855 00000F5E A3[C43D0500] mov [_@@linbits], eax 1856 1857 .low_freq_lop_j: 1858 00000F63 3B35[CC3D0500] cmp esi, [_@@coarse_end] ; mp3mac_bitstream_get_position 1859 ; loop @@JJJ times... 1860 00000F69 0F870D030000 ja .lop_j_near_end 1861 1862 .small_not_end@: 1863 00000F6F 3B3D[D03D0500] cmp edi, [_@rle_point] ; @@get_runlength small 1864 00000F75 0F83AD020000 jnb .rle_fetch_next_full 1865 1866 .rle_back_full: 1867 00000F7B 8B15[C83D0500] mov edx, [_@@vlc_table] ; get huffcode 1868 1869 .get_child_lop@: 1870 00000F81 8A0C95[AE3D0100] mov cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode 1871 ; in: edx=table, out: eax=data 1872 ; bits (table size) (-7..-1) 1873 00000F88 668B1495[AC3D0100] mov dx, word [huff_tree_buf+edx*4] ; code (child table) 1874 00000F90 89E8 mov eax, ebp 1875 00000F92 D3E8 shr eax, cl 1876 00000F94 01C2 add edx, eax 1877 00000F96 8A0C95[AE3D0100] mov cl, [(huff_tree_buf+2)+edx*4] ; bits (of entry) 1878 00000F9D 80F900 cmp cl, 0 1879 00000FA0 7823 js short .got_child@ 1880 00000FA2 0FB70495[AC3D0100] movzx eax, word [huff_tree_buf+edx*4] ; return data value 1881 00000FAA D3E5 shl ebp, cl ; discard cl bits 1882 00000FAC 28CD sub ch, cl 1883 00000FAE 7932 jns short .got_done@ 1884 00000FB0 88E9 mov cl, ch ; mp3mac_collect_more 1885 00000FB2 80C510 add ch, 10h 1886 00000FB5 D3C5 rol ebp, cl 1887 00000FB7 668B2E mov bp, [esi] 1888 00000FBA 83C602 add esi, 2 1889 00000FBD 66C1CD08 ror bp, 8 1890 00000FC1 D3CD ror ebp, cl 1891 00000FC3 EB1D jmp short .got_done@ 1892 1893 .got_child@: 1894 00000FC5 C1E509 shl ebp, 9 1895 00000FC8 80ED09 sub ch, 9 1896 00000FCB 79B4 jns short .get_child_lop@ 1897 00000FCD 88E9 mov cl, ch 1898 00000FCF 80C510 add ch, 10h 1899 00000FD2 D3C5 rol ebp, cl 1900 00000FD4 668B2E mov bp, [esi] 1901 00000FD7 83C602 add esi, 2 1902 00000FDA 66C1CD08 ror bp, 8 1903 00000FDE D3CD ror ebp, cl 1904 00000FE0 EB9F jmp short .get_child_lop@ 1905 1906 .got_done@: 1907 00000FE2 50 push eax 1908 00000FE3 C1E804 shr eax, 4 ; x 1909 00000FE6 746F jz short .@this_sign ; @@getexpval 1 1910 00000FE8 8B15[D83D0500] mov edx, [_@@rle_val] 1911 00000FEE 83F80F cmp eax, 15 1912 00000FF1 7250 jb short .small ; when x=1..14 1913 00000FF3 8A0D[C43D0500] mov cl, byte [_@@linbits] ; =0..13 ; when x=15, with linbits 1914 00000FF9 89E8 mov eax, ebp ; mp3mac_get_n_bits cl ; value = 0..1FFFh 1915 00000FFB D3E5 shl ebp, cl ; mp3mac_collect_more 1916 00000FFD D3C0 rol eax, cl 1917 00000FFF 31E8 xor eax, ebp 1918 00001001 28CD sub ch, cl 1919 00001003 7913 jns short .cont 1920 00001005 88E9 mov cl, ch ; mp3mac_collect_more 1921 00001007 80C510 add ch, 16 1922 0000100A D3C5 rol ebp, cl 1923 0000100C 668B2E mov bp, [esi] 1924 0000100F 83C602 add esi, 2 1925 00001012 66C1CD08 ror bp, 8 1926 00001016 D3CD ror ebp, cl 1927 1928 .cont: 1929 00001018 88D1 mov cl, dl ; exponent.lsb 1930 0000101A 80E103 and cl, 3 ; exponent.lsb 1931 0000101D C1EA02 shr edx, 2 ; exponent.msb 1932 00001020 8D04853C000000 lea eax, [eax*4+60] ; (value+15)*4 1933 00001027 08C8 or al, cl ; exponent.lsb+(value+15)*4 1934 00001029 8A88[ECF70100] mov cl, [mp3_table_4_3_exp+eax] 1935 0000102F 8B0485[28780200] mov eax, [mp3_table_4_3_value+eax*4] 1936 00001036 28D1 sub cl, dl ; sub exponent.msb 1937 00001038 D3E8 shr eax, cl 1938 0000103A 80F91F cmp cl, 31 1939 0000103D 760E jbe short .get_sign 1940 0000103F 31C0 xor eax, eax 1941 00001041 EB0A jmp short .get_sign 1942 1943 .small: 1944 00001043 C1E206 shl edx, 6 ; shl edx,4+2 ; mul16*4 ; when x<15 aka x=1..14 1945 00001046 8B8482[18810400] mov eax, [mp3_expval_table+edx+eax*4] 1946 1947 .get_sign: 1948 0000104D FECD dec ch ; mp3mac_get_bit_to_cy 1949 0000104F D1E5 shl ebp, 1 1950 00001051 19D2 sbb edx, edx ; get sign (negate if sign=1) 1951 00001053 31D0 xor eax, edx 1952 00001055 29D0 sub eax, edx 1953 1954 .@this_sign: 1955 00001057 8984BBA0000000 mov [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0] 1956 0000105E 58 pop eax 1957 0000105F 83E00F and eax, 0Fh ; y 1958 00001062 746F jz short .@this_sign@ ; @@getexpval 1 1959 00001064 8B15[D83D0500] mov edx, [_@@rle_val] 1960 0000106A 83F80F cmp eax, 0Fh 1961 0000106D 7250 jb short .small@ 1962 0000106F 8A0D[C43D0500] mov cl, byte [_@@linbits] 1963 00001075 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 1964 00001077 D3E5 shl ebp, cl 1965 00001079 D3C0 rol eax, cl 1966 0000107B 31E8 xor eax, ebp 1967 0000107D 28CD sub ch, cl 1968 0000107F 7913 jns short .cont@ 1969 00001081 88E9 mov cl, ch ; mp3mac_collect_more 1970 00001083 80C510 add ch, 10h 1971 00001086 D3C5 rol ebp, cl 1972 00001088 668B2E mov bp, [esi] 1973 0000108B 83C602 add esi, 2 1974 0000108E 66C1CD08 ror bp, 8 1975 00001092 D3CD ror ebp, cl 1976 1977 .cont@: 1978 00001094 88D1 mov cl, dl 1979 00001096 80E103 and cl, 3 1980 00001099 C1EA02 shr edx, 2 1981 0000109C 8D04853C000000 lea eax, [eax*4+60] 1982 000010A3 08C8 or al, cl 1983 000010A5 8A88[ECF70100] mov cl, [mp3_table_4_3_exp+eax] 1984 000010AB 8B0485[28780200] mov eax, [mp3_table_4_3_value+eax*4] 1985 000010B2 28D1 sub cl, dl 1986 000010B4 D3E8 shr eax, cl 1987 000010B6 80F91F cmp cl, 31 1988 000010B9 760E jbe short .get_sign@ 1989 000010BB 31C0 xor eax, eax 1990 000010BD EB0A jmp short .get_sign@ 1991 1992 .small@: 1993 000010BF C1E206 shl edx, 6 1994 000010C2 8B8482[18810400] mov eax, [mp3_expval_table+edx+eax*4] 1995 1996 .get_sign@: 1997 000010C9 FECD dec ch ; dec mp3_colNN 1998 000010CB D1E5 shl ebp, 1 ; shl mp3_col32,1 ; cy=data 1999 000010CD 19D2 sbb edx, edx ; cy=0,1 --> 0,FFFFFFFF 2000 000010CF 31D0 xor eax, edx ; invert if cy was 1 2001 000010D1 29D0 sub eax, edx ; add 1 if cy was 1 2002 2003 .@this_sign@: 2004 000010D3 8984BBA4000000 mov [ebx+edi*4+164], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+4] 2005 000010DA 83C702 add edi, 2 ; next j 2006 000010DD FF0D[C03D0500] dec dword [_@@JJJ] 2007 000010E3 0F857AFEFFFF jnz .low_freq_lop_j 2008 2009 .low_freq_next_i: 2010 000010E9 FF05[BC3D0500] inc dword [_@@III] ; next i 2011 000010EF 833D[BC3D0500]03 cmp dword [_@@III], 3 2012 000010F6 0F8201FDFFFF jb .low_freq_lop_i 2013 000010FC 81FF3C020000 cmp edi, 572 ; aka 576-4 ; skip if less than 4 entries left 2014 00001102 0F87DA000000 ja .high_freq_done 2015 2016 .high_freq_lop: 2017 00001108 3B35[CC3D0500] cmp esi, [_@@coarse_end] 2018 0000110E 7629 jbe short .high_freq_inrange 2019 00001110 89F0 mov eax, esi ; mp3mac_bitstream_get_position 2020 00001112 2B05[94120100] sub eax, [mp3_bitstream_start] 2021 00001118 0FBED5 movsx edx, ch ; mp3_colNN 2022 0000111B F7DA neg edx 2023 0000111D 8D44C2F0 lea eax, [edx+eax*8-16] 2024 00001121 3B4308 cmp eax, [ebx+8] ; [ebx+$mp3gr_part2_3_end] ; check end 2025 00001124 7213 jb short .high_freq_inrange ; not yet end 2026 00001126 0F84B6000000 jz .high_freq_done ; okay, exact end 2027 0000112C 83FF04 cmp edi, 4 2028 0000112F 7203 jb short .high_freq_cannot_stepback 2029 00001131 83EF04 sub edi, 4 ; stepback, s_index-4 ; dst stepback 2030 2031 .high_freq_cannot_stepback: 2032 00001134 E9A9000000 jmp .high_freq_done 2033 2034 .high_freq_inrange: 2035 00001139 8B5324 mov edx, [ebx+24h] ; [ebx+$mp3gr_count1table_select] 2036 ; get huffcode (quad_vlc) 2037 2038 .get_child_lop@@: 2039 0000113C 8A0C95[AE3D0100] mov cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode 2040 00001143 668B1495[AC3D0100] mov dx, word [huff_tree_buf+edx*4] 2041 0000114B 89E8 mov eax, ebp 2042 0000114D D3E8 shr eax, cl 2043 0000114F 01C2 add edx, eax 2044 00001151 8A0C95[AE3D0100] mov cl, [(huff_tree_buf+2)+edx*4] 2045 00001158 80F900 cmp cl, 0 2046 0000115B 7823 js short .got_child@@ 2047 0000115D 0FB70495[AC3D0100] movzx eax, word [huff_tree_buf+edx*4] 2048 00001165 D3E5 shl ebp, cl 2049 00001167 28CD sub ch, cl 2050 00001169 7932 jns short .got_done@@ 2051 0000116B 88E9 mov cl, ch 2052 0000116D 80C510 add ch, 10h 2053 00001170 D3C5 rol ebp, cl 2054 00001172 668B2E mov bp, [esi] 2055 00001175 83C602 add esi, 2 2056 00001178 66C1CD08 ror bp, 8 2057 0000117C D3CD ror ebp, cl 2058 0000117E EB1D jmp short .got_done@@ 2059 2060 .got_child@@: 2061 00001180 C1E509 shl ebp, 9 2062 00001183 80ED09 sub ch, 9 2063 00001186 79B4 jns short .get_child_lop@@ 2064 00001188 88E9 mov cl, ch 2065 0000118A 80C510 add ch, 10h 2066 0000118D D3C5 rol ebp, cl 2067 0000118F 668B2E mov bp, [esi] 2068 00001192 83C602 add esi, 2 2069 00001195 66C1CD08 ror bp, 8 2070 00001199 D3CD ror ebp, cl 2071 0000119B EB9F jmp short .get_child_lop@@ 2072 2073 .got_done@@: 2074 0000119D 88C2 mov dl, al ; flags 2075 0000119F C0E204 shl dl, 4 ; flags, to upper 4bit 2076 000011A2 B604 mov dh, 4 ; lopcount 2077 2078 .high_freq_flag_lop: 2079 000011A4 31C0 xor eax, eax 2080 000011A6 D0E2 shl dl, 1 ; flag 2081 000011A8 7320 jnb short .high_freq_flag_this 2082 000011AA 3B3D[D03D0500] cmp edi, [_@rle_point] ; @@get_runlength quads 2083 000011B0 0F83A0000000 jnb .rle_fetch_next_quads 2084 2085 .rle_back_quads: 2086 000011B6 A1[D83D0500] mov eax, [_@@rle_val] 2087 000011BB 8B0485[18790400] mov eax, [mp3_exp_table+eax*4] ; xlat and get sign 2088 000011C2 FECD dec ch ; mp3mac_get_bit_to_cy 2089 000011C4 D1E5 shl ebp, 1 2090 000011C6 7302 jnb short .high_freq_flag_this ; 2091 ; sbb edx, edx ; cy=0,1 --> 0,FFFFFFFF 2092 ; xor eax, edx ; invert if cy was 1 2093 ; sub eax, edx ; add 1 if cy was 1 2094 000011C8 F7D8 neg eax 2095 2096 .high_freq_flag_this: 2097 000011CA 8984BBA0000000 mov [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0] 2098 000011D1 47 inc edi 2099 000011D2 FECE dec dh 2100 000011D4 75CE jnz short .high_freq_flag_lop 2101 000011D6 81FF3C020000 cmp edi, 572 ; aka 576-4 ; loop while space for another 4 values 2102 000011DC 0F8626FFFFFF jbe .high_freq_lop 2103 2104 .high_freq_done: 2105 000011E2 897B5C mov [ebx+92], edi ; [ebx+$mp3gr_num_nonzero_hybrids] 2106 000011E5 51 push ecx 2107 000011E6 B940020000 mov ecx, 576 ; end 2108 000011EB 29F9 sub ecx, edi ; remain = end-curr 2109 ; zeropad remaining entries (can be 0 or 2 dwords, 2110 ; or more. If above loop was aborted) 2111 000011ED 8DBCBBA0000000 lea edi, [ebx+edi*4+160] ; [ebx+$mp3gr_sb_hybrid+edi*4] 2112 000011F4 31C0 xor eax, eax 2113 000011F6 F3AB rep stosd 2114 000011F8 59 pop ecx 2115 2116 ; 16/02/2025 2117 .no_rdtsc_supported@: 2118 ;clc ; out: cy=0=okay 2119 000011F9 C3 retn 2120 2121 .rle_fetch_next_small: 2122 000011FA A1[D43D0500] mov eax, [_@@rle_ptr] ; @@next_runlength small 2123 000011FF 8305[D43D0500]04 add dword [_@@rle_ptr], 4 2124 00001206 8B00 mov eax, [eax] 2125 00001208 6639C7 cmp di, ax 2126 0000120B 73ED jnb short .rle_fetch_next_small 2127 0000120D 66A3[D03D0500] mov word [_@rle_point], ax 2128 00001213 C1E810 shr eax, 16 2129 00001216 A3[D83D0500] mov [_@@rle_val], eax 2130 0000121B C1E006 shl eax, 6 2131 0000121E A3[DC3D0500] mov [_@@rle_val_x_40h], eax 2132 00001223 E94CFCFFFF jmp .rle_back_small 2133 2134 .rle_fetch_next_full: 2135 00001228 A1[D43D0500] mov eax, [_@@rle_ptr] ; @@next_runlength full 2136 0000122D 8305[D43D0500]04 add dword [_@@rle_ptr], 4 2137 00001234 8B00 mov eax, [eax] 2138 00001236 6639C7 cmp di, ax 2139 00001239 73ED jnb short .rle_fetch_next_full 2140 0000123B 66A3[D03D0500] mov word [_@rle_point], ax 2141 00001241 C1E810 shr eax, 16 2142 00001244 A3[D83D0500] mov [_@@rle_val], eax 2143 00001249 C1E006 shl eax, 6 2144 0000124C A3[DC3D0500] mov [_@@rle_val_x_40h], eax 2145 00001251 E925FDFFFF jmp .rle_back_full 2146 2147 .rle_fetch_next_quads: 2148 00001256 A1[D43D0500] mov eax, [_@@rle_ptr] ; msw=val, lsw=point 2149 0000125B 8305[D43D0500]04 add dword [_@@rle_ptr], 4 ; 2+2 2150 00001262 8B00 mov eax, [eax] 2151 00001264 6639C7 cmp di, ax ; needed if rle fetching was skipped 2152 00001267 73ED jnb short .rle_fetch_next_quads 2153 00001269 66A3[D03D0500] mov word [_@rle_point], ax 2154 0000126F C1E810 shr eax, 16 2155 00001272 A3[D83D0500] mov [_@@rle_val], eax 2156 00001277 E93AFFFFFF jmp .rle_back_quads 2157 2158 .lop_j_near_end: 2159 0000127C 89F0 mov eax, esi 2160 0000127E 2B05[94120100] sub eax, [mp3_bitstream_start] 2161 00001284 0FBED5 movsx edx, ch 2162 00001287 F7DA neg edx 2163 00001289 8D44C2F0 lea eax, [edx+eax*8-16] 2164 0000128D 3B4308 cmp eax, [ebx+8] 2165 00001290 0F82D9FCFFFF jb .small_not_end@ 2166 00001296 E94EFEFFFF jmp .low_freq_next_i 2167 2168 2169 ; =============== S U B R O U T I N E ======================================= 2170 2171 2172 mp3_compute_stereo: 2173 ; 16/02/2025 2174 0000129B 833D[C8BB0000]02 cmp dword [mp3_num_channels], 2 ; in: ebx=granule(s) 2175 000012A2 7515 jnz short .no_stereo 2176 000012A4 833D[DCBB0000]02 cmp dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO 2177 ; only MS stereo 2178 000012AB 740D jz short mp3_compute_ms_stereo 2179 000012AD F705[DCBB0000]0100- test dword [mp3_hdr_mode_ext], 1 ; MODE_EXT_I_STEREO 2179 000012B5 0000 2180 ; intensity stereo (optionally with MS stereo) 2181 000012B7 7539 jnz short mp3_compute_i_stereo 2182 2183 .no_stereo: 2184 000012B9 C3 retn 2185 2186 mp3_compute_ms_stereo: 2187 ; 16/02/2025 2188 2189 .no_rdtsc_supported: 2190 000012BA 8DBBE0130000 lea edi, [ebx+5088] ; [ebx+$mp3gr_sb_hybrid+$mp3gr_entrysiz*2] 2191 ; for ch1 (2nd channel) 2192 000012C0 8B4B5C mov ecx, [ebx+92] ; [ebx+$mp3gr_num_nonzero_hybrids] ; ch0 2193 000012C3 8B839C130000 mov eax, [ebx+5020] ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)] ; ch1 2194 000012C9 39C1 cmp ecx, eax 2195 000012CB 7702 ja short .this_len 2196 000012CD 89C1 mov ecx, eax 2197 2198 .this_len: 2199 000012CF E320 jecxz .ms_stereo_done 2200 000012D1 894B5C mov [ebx+92], ecx ; [ebx+$mp3gr_num_nonzero_hybrids] ; ch0 2201 000012D4 898B9C130000 mov [ebx+5020], ecx ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)] ; ch1 2202 2203 .ms_stereo_lop: 2204 000012DA 8B87C0ECFFFF mov eax, [edi-4928] ; for i=0 to 576-1 2205 ; [edi+@@ch0] 2206 ; @@ch0 equ (-$mp3gr_entrysiz*2) ; granule for channel=0 2207 ; tmp0 = granule.ch0.sb_hybrid[i] 2208 000012E0 8B17 mov edx, [edi] ; @@ch1 equ 0 ; granule for channel=1 2209 ; [edi+@@ch1] 2210 ; tmp1 = granule.ch1.sb_hybrid[i] 2211 000012E2 29D0 sub eax, edx ; tmp0 - tmp1 2212 000012E4 8D1450 lea edx, [eax+edx*2] ; tmp0 + tmp1 2213 000012E7 8997C0ECFFFF mov [edi-4928], edx ; [edi+@@ch0] 2214 ; granule.ch0.sb_hybrid[i] = tmp0 + tmp1 2215 000012ED AB stosd ; [edi+@@ch1] 2216 ; granule.ch1.sb_hybrid[i] = tmp0 - tmp1 2217 000012EE 49 dec ecx 2218 000012EF 75E9 jnz short .ms_stereo_lop 2219 2220 .ms_stereo_done: 2221 ; 16/02/2025 2222 2223 .no_rdtsc_supported@: 2224 000012F1 C3 retn 2225 2226 mp3_compute_i_stereo: 2227 ; 16/02/2025 2228 2229 .no_rdtsc_supported@@@: 2230 000012F2 C7435C40020000 mov dword [ebx+92], 576 ; ch0 2231 ; [ebx+$mp3gr_num_nonzero_hybrids] 2232 000012F9 C7839C130000400200- mov dword [ebx+5020], 576 ; ch1 2232 00001302 00 2233 ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)] 2234 00001303 8B4320 mov eax, [ebx+32] ; [ebx+$mp3gr_long_end] 2235 00001306 A3[183E0500] mov [_@@n_long_sfb], eax 2236 0000130B B80D000000 mov eax, 13 ; 39/3 2237 00001310 2B431C sub eax, [ebx+28] ; [ebx+$mp3gr_short_start] 2238 00001313 8D0440 lea eax, [eax+eax*2] ; mul3 2239 00001316 A3[1C3E0500] mov [_@@n_short_sfb], eax 2240 0000131B 0305[183E0500] add eax, [_@@n_long_sfb] 2241 00001321 A3[203E0500] mov [_@@n_sfb], eax ; 2242 ; n_sfb = gr->n_long_sfb + gr->n_short_sfb; 2243 00001326 803D[1C3E0500]00 cmp byte [_@@n_short_sfb], 0 2244 0000132D B801000000 mov eax, 1 2245 00001332 7405 jz short .without_short 2246 00001334 B803000000 mov eax, 3 ; max_blocks = gr->n_short_sfb ? 3 : 1; 2247 2248 .without_short: 2249 00001339 A3[E43D0500] mov [_@@max_blocks], eax 2250 0000133E BF[EC3D0500] mov edi, _@@sfb_array 2251 00001343 A1[C0BB0000] mov eax, [mp3_hdr_sample_rate_index] ; bstab 2252 00001348 6BC016 imul eax, 22 2253 0000134B 8DB0[149E0000] lea esi, [mp3_band_size_long+eax] 2254 00001351 8B0D[183E0500] mov ecx, [_@@n_long_sfb] 2255 00001357 F3A4 rep movsb 2256 00001359 A1[C0BB0000] mov eax, [mp3_hdr_sample_rate_index] 2257 0000135E 6BC00D imul eax, 13 2258 00001361 8DB0[E49E0000] lea esi, [mp3_band_size_short+eax] ; merge lieff-style 2259 00001367 8B0D[1C3E0500] mov ecx, [_@@n_short_sfb] 2260 0000136D E30C jecxz .make_sfb_done ; doing that here is a bit slow, 2261 ; it would be better to pre-compute 2262 ; all merged-combinations 2263 0000136F 03731C add esi, [ebx+28] ; [ebx+$mp3gr_short_start] 2264 2265 .make_sfb_lop: 2266 00001372 AC lodsb 2267 00001373 AA stosb 2268 00001374 AA stosb 2269 00001375 AA stosb 2270 00001376 83E903 sub ecx, 3 2271 00001379 75F7 jnz short .make_sfb_lop 2272 2273 .make_sfb_done: 2274 0000137B E871000000 call _@@find_top_bands ; 2275 ; L3_stereo_top_band(left+576,gr->sfbtab,n_sfb,max_band); 2276 00001380 803D[183E0500]00 cmp byte [_@@n_long_sfb], 0 2277 00001387 7420 jz short .without_long 2278 00001389 A1[E03D0500] mov eax, dword [_@@max_bands] 2279 0000138E 38C4 cmp ah, al ; if (gr->n_long_sfb) 2280 00001390 7F02 jg short .not_max1 ; max_band[0] = max_band[1] = max_band[2] = MINIMP3_MAX 2281 ; (MINIMP3_MAX(max_band[0], max_band[1]), max_band[2]); 2282 00001392 88C4 mov ah, al 2283 2284 .not_max1: 2285 00001394 C1E808 shr eax, 8 2286 00001397 38C4 cmp ah, al 2287 00001399 7F02 jg short .not_max2 2288 0000139B 88C4 mov ah, al 2289 2290 .not_max2: 2291 0000139D 88E0 mov al, ah 2292 0000139F C1E008 shl eax, 8 2293 000013A2 88E0 mov al, ah 2294 000013A4 A3[E03D0500] mov dword [_@@max_bands], eax 2295 2296 .without_long: 2297 000013A9 31ED xor ebp, ebp ; blk 2298 2299 .adjust_last_prev_lop: 2300 000013AB 8B15[203E0500] mov edx, [_@@n_sfb] 2301 000013B1 2B15[E43D0500] sub edx, [_@@max_blocks] ; itop = n_sfb - max_blocks + blk 2302 000013B7 01EA add edx, ebp 2303 000013B9 89D1 mov ecx, edx 2304 000013BB 2B0D[E43D0500] sub ecx, [_@@max_blocks] ; prev = itop - max_blocks; 2305 000013C1 A1[E0BB0000] mov eax, [mp3_hdr_flag_lsf] 2306 000013C6 8D0440 lea eax, [eax+eax*2] ; 0,1 --> 0,3 2307 ; default_pos = HDR_TEST_MPEG1(hdr) ? 3 2308 000013C9 3403 xor al, 3 ; 0,3 --> 3,0 2309 000013CB 363A8D[E03D0500] cmp cl, [ss:_@@max_bands+ebp] 2310 000013D2 7E07 jle short .use_default_pos ; ist_pos[itop] = max_band[blk] >= 2311 ; prev ? default_pos : ist_pos[prev] 2312 000013D4 8A840BB0130000 mov al, [ebx+ecx+5040] ; [ebx+@@right+$mp3gr_scale_factors+ecx] 2313 2314 .use_default_pos: 2315 000013DB 888413B0130000 mov [ebx+edx+5040], al ; [ebx+@@right+$mp3gr_scale_factors+edx] 2316 000013E2 45 inc ebp ; blk 2317 000013E3 3B2D[E43D0500] cmp ebp, [_@@max_blocks] 2318 000013E9 72C0 jb short .adjust_last_prev_lop 2319 000013EB E850000000 call _@@apply_i_stereo 2320 2321 ; 16/02/2025 2322 2323 .no_rdtsc_supported@@@@: 2324 000013F0 C3 retn 2325 2326 2327 ; =============== S U B R O U T I N E ======================================= 2328 2329 2330 _@@find_top_bands: 2331 000013F1 C705[E03D0500]FFFF- mov dword [_@@max_bands], 0FFFFFFh ; set maxband[0..2]=(-1) 2331 000013F9 FF00 2332 000013FB 8DB3E0130000 lea esi, [ebx+5088] ; [ebx+@@right+$mp3gr_sb_hybrid] 2333 00001401 31D2 xor edx, edx 2334 2335 .find_top_lop_iii: 2336 00001403 31C9 xor ecx, ecx ; for (i = 0; i < nbands; i++) 2337 2338 .find_top_lop_kkk: 2339 00001405 8B048E mov eax, [esi+ecx*4] ; for (k = 0; k < sfb[i]; k += 2) 2340 00001408 0B448E04 or eax, [esi+ecx*4+4] 2341 0000140C 750D jnz short .found_nonzero 2342 0000140E 83C102 add ecx, 2 2343 00001411 3A8A[EC3D0500] cmp cl, [_@@sfb_array+edx] 2344 00001417 72EC jb short .find_top_lop_kkk 2345 00001419 EB11 jmp short .find_top_next 2346 2347 .found_nonzero: 2348 0000141B 89D0 mov eax, edx 2349 0000141D F635[BCA70000] div byte [_@@const_3] 2350 00001423 0FB6C4 movzx eax, ah ; remainder (mod 3) 2351 00001426 8890[E03D0500] mov [_@@max_bands+eax], dl ; max_bands[0..2]=i 2352 2353 .find_top_next: 2354 0000142C 0FB682[EC3D0500] movzx eax, byte [_@@sfb_array+edx] 2355 00001433 8D3486 lea esi, [esi+eax*4] 2356 00001436 42 inc edx ; next 2357 00001437 3B15[203E0500] cmp edx, [_@@n_sfb] 2358 0000143D 72C4 jb short .find_top_lop_iii 2359 0000143F C3 retn 2360 2361 ; =============== S U B R O U T I N E ======================================= 2362 2363 2364 _@@apply_i_stereo: 2365 00001440 B8[D4A10000] mov eax, mp3_is_table_normal 2366 00001445 B907000000 mov ecx, 7 2367 0000144A 833D[E0BB0000]00 cmp dword [mp3_hdr_flag_lsf], 0 2368 00001451 7425 jz short .this_lsf 2369 00001453 8B8354130000 mov eax, [ebx+4948] ; [ebx+@@right+$mp3gr_scalefac_compress] 2370 00001459 83E001 and eax, 1 ; bit0 2371 0000145C F705[DCBB0000]0200- test dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO 2371 00001464 0000 2372 00001466 7403 jz short .no_ms 2373 00001468 83C802 or eax, 2 ; bit1=mul_1.414 2374 2375 .no_ms: 2376 0000146B C1E009 shl eax, 9 ; N*40h*2*4 2377 0000146E 05[98050500] add eax, mp3_is_table_lsf 2378 00001473 B940000000 mov ecx, 64 ; max (must be below NO_INTENSITY_FLAG) 2379 2380 .this_lsf: 2381 00001478 890D[E83D0500] mov [_@@max_pos], ecx ; 7 or 64 2382 0000147E A3[143E0500] mov [_@@is_tab], eax ; table 2383 00001483 8DB3A0000000 lea esi, [ebx+160] ; [ebx+$mp3gr_sb_hybrid] 2384 00001489 31C9 xor ecx, ecx ; iii ; for (i = 0; sfb[i]; i++) 2385 2386 .apply_lop_i: 2387 0000148B 0FB6A9[EC3D0500] movzx ebp, byte [_@@sfb_array+ecx] ; if ((int)i > max_band[i % 3] 2388 ; && ipos < max_pos) 2389 00001492 89C8 mov eax, ecx 2390 00001494 F635[BCA70000] div byte [_@@const_3] ; max_band[i % 3] 2391 0000149A 0FB6C4 movzx eax, ah ; remainder (mod 3) 2392 0000149D 3A88[E03D0500] cmp cl, [_@@max_bands+eax] ; iii,max_bands[0..2]; 2393 000014A3 7E38 jle short .apply_ms_stereo 2394 000014A5 0FB6BC0BB0130000 movzx edi, byte [ebx+ecx+5040] ; [ebx+@@right+$mp3gr_scale_factors+ecx] 2395 ; @@right = $mp3gr_entrysiz*2 = 4928 2396 ; $mp3gr_scale_factors = 112 2397 000014AD 3B3D[E83D0500] cmp edi, [_@@max_pos] ; check ipos 2398 000014B3 7328 jnb short .apply_ms_stereo 2399 000014B5 C1E703 shl edi, 3 ; mul 2*4 2400 000014B8 033D[143E0500] add edi, [_@@is_tab] 2401 2402 .apply_pan_lop: 2403 000014BE 8B06 mov eax, [esi] ; tmp = granule.ch0.sb_hybrid 2404 000014C0 C1E002 shl eax, 2 2405 000014C3 F76F04 imul dword [edi+4] ; v1 2406 000014C6 899640130000 mov [esi+4928], edx ; [esi+@@right] 2407 ; granule.ch1.sb_hybrid = tmp*v1 2408 000014CC 8B06 mov eax, [esi] ; tmp = granule.ch0.sb_hybrid 2409 000014CE C1E002 shl eax, 2 2410 000014D1 F72F imul dword [edi] ; v0 2411 000014D3 8916 mov [esi], edx ; granule.ch0.sb_hybrid = tmp*v0 2412 000014D5 83C604 add esi, 4 2413 000014D8 4D dec ebp 2414 000014D9 75E3 jnz short .apply_pan_lop 2415 000014DB EB2C jmp short .apply_next 2416 2417 .apply_ms_stereo: 2418 000014DD F705[DCBB0000]0200- test dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO 2418 000014E5 0000 2419 000014E7 741D jz short .apply_none 2420 2421 .ms_stereo_lop: 2422 000014E9 8B06 mov eax, [esi] ; tmp0 = granule.ch0.sb_hybrid[i] 2423 000014EB 8B9640130000 mov edx, [esi+4928] ; [esi+@@right] 2424 ; tmp1 = granule.ch1.sb_hybrid[i] 2425 000014F1 29D0 sub eax, edx ; tmp0 - tmp1 2426 000014F3 8D1450 lea edx, [eax+edx*2] ; tmp0 + tmp1 2427 000014F6 8916 mov [esi], edx ; granule.ch0.sb_hybrid[i] = tmp0 + tmp1 2428 000014F8 898640130000 mov [esi+4928], eax ; [esi+@@right] 2429 ; granule.ch1.sb_hybrid[i] = tmp0 - tmp1 2430 000014FE 83C604 add esi, 4 2431 00001501 4D dec ebp 2432 00001502 75E5 jnz short .ms_stereo_lop 2433 00001504 EB03 jmp short .apply_next 2434 2435 .apply_none: 2436 00001506 8D34AE lea esi, [esi+ebp*4] ; skip, keep unchanged 2437 2438 .apply_next: 2439 00001509 41 inc ecx ; iii 2440 0000150A 3B0D[203E0500] cmp ecx, [_@@n_sfb] 2441 00001510 0F8275FFFFFF jb .apply_lop_i ; next 2442 00001516 C3 retn 2443 2444 ; =============== S U B R O U T I N E ======================================= 2445 2446 2447 mp3_reorder_block: 2448 ; 16/02/2025 2449 2450 .no_rdtsc_supported: 2451 00001517 807B2C02 cmp byte [ebx+44], 2 ; ebx+$mp3gr_block_type] ; only for type 2 2452 0000151B 7565 jnz short .no_reorder 2453 0000151D 8DB3A0000000 lea esi, [ebx+160] ; [ebx+$mp3gr_sb_hybrid] ; ptr+0 2454 00001523 807B3000 cmp byte [ebx+48], 0 ; [ebx+$mp3gr_switch_point] 2455 00001527 7412 jz short .this_src 2456 00001529 81C690000000 add esi, 144 ; 36*4 ; ptr+36*4 2457 0000152F 833D[C0BB0000]08 cmp dword [mp3_hdr_sample_rate_index], 8 2458 00001536 7503 jnz short .this_src 2459 00001538 83C630 add esi, 48 ; 12*4 ; additionally to above 36*4 ; ptr+48*4 2460 2461 .this_src: 2462 0000153B 8B531C mov edx, [ebx+28] ; [ebx+$mp3gr_short_start] ; can be 13 2463 0000153E 83FA0D cmp edx, 13 2464 00001541 733F jnb short .no_reorder 2465 00001543 C7435C40020000 mov dword [ebx+92], 576 ; [ebx+$mp3gr_num_nonzero_hybrids] 2466 2467 .outer_lop: 2468 0000154A A1[C0BB0000] mov eax, [mp3_hdr_sample_rate_index] 2469 0000154F 6BC00D imul eax, 13 ; X*13 2470 00001552 0FB68C10[E49E0000] movzx ecx, byte [mp3_band_size_short+eax+edx] ; [X*13+Y] 2471 0000155A BF[243E0500] mov edi, _@@tmp 2472 0000155F 60 pusha 2473 00001560 89CA mov edx, ecx ; step=len (4..44) ; copy LEN*3 dwords to tmp 2474 2475 .inner_lop: 2476 00001562 8B06 mov eax, [esi] 2477 00001564 AB stosd 2478 00001565 8B0496 mov eax, [esi+edx*4] ; copy 3 dwords 2479 00001568 AB stosd 2480 00001569 8B04D6 mov eax, [esi+edx*8] 2481 0000156C AB stosd 2482 0000156D 83C604 add esi, 4 2483 00001570 E2F0 loop .inner_lop 2484 00001572 61 popa 2485 00001573 8D0C49 lea ecx, [ecx+ecx*2] ; len*3 2486 00001576 87FE xchg esi, edi ; copy LEN*3 dwords back from tmp 2487 00001578 F3A5 rep movsd 2488 0000157A 87FE xchg esi, edi 2489 0000157C 42 inc edx 2490 0000157D 83FA0D cmp edx, 13 2491 00001580 72C8 jb short .outer_lop ; next 2492 2493 .no_reorder: 2494 ; 16/02/2025 2495 2496 .no_rdtsc_supported@: 2497 00001582 C3 retn 2498 2499 2500 ; =============== S U B R O U T I N E ======================================= 2501 2502 2503 mp3_compute_antialias: 2504 ; 16/02/2025 2505 2506 .no_rdtsc_supported: 2507 00001583 8B435C mov eax, [ebx+92] ; [ebx+$mp3gr_num_nonzero_hybrids] 2508 00001586 83C008 add eax, 8 ; 9-1 ; 0..576+8 2509 00001589 31D2 xor edx, edx 2510 0000158B B909000000 mov ecx, 9 2511 00001590 F7F1 div ecx ; (num/9) ; 0..64 2512 00001592 894360 mov [ebx+60h], eax 2513 00001595 D1E8 shr eax, 1 ; (num/18) ; 0..32 2514 00001597 0F84B8010000 jz .no_antialias ; 0 (when num/9 = 0..1) 2515 0000159D 89C1 mov ecx, eax ; 1..32 2516 0000159F C1E805 shr eax, 5 ; 0..1 2517 000015A2 29C1 sub ecx, eax ; 1..31 ; len excluding zeropadding 2518 000015A4 807B2C02 cmp byte [ebx+44], 2 ; [ebx+$mp3gr_block_type] 2519 000015A8 750F jnz short .this_len ; antialias only "long" bands 2520 000015AA 807B3000 cmp byte [ebx+48], 0 ; [ebx+$mp3gr_switch_point] 2521 000015AE 0F84A1010000 jz .no_antialias 2522 000015B4 B901000000 mov ecx, 1 ; check this for 8000Hz case 2523 2524 .this_len: 2525 000015B9 8D440901 lea eax, [1+ecx*2] 2526 000015BD 394360 cmp [ebx+96], eax ; [ebx+$mp3gr_num_nonzero_hybrids_div9] 2527 000015C0 7703 ja short .is_bigger 2528 000015C2 894360 mov [ebx+96], eax ; opdate highest 2529 ; (nonzero required for l3-si_huff.bit) 2530 2531 .is_bigger: 2532 000015C5 53 push ebx 2533 000015C6 8D9BA0000000 lea ebx, [ebx+160] ; [ebx+$mp3gr_sb_hybrid] 2534 2535 .lop: 2536 000015CC 83C348 add ebx, 72 ; 18*4 2537 000015CF 8B73FC mov esi, [ebx-4] ; IRP nn,0,1,2,3,4,5,6,7 ; INT_AA(nn=0..7) 2538 000015D2 8B3B mov edi, [ebx] ; @@def_csa macro nn,cs,ca 2539 ; mp3_csa_&nn&_cs equ cs 2540 ; mp3_csa_&nn&_ca equ ca 2541 ; endm 2542 ; constants for mp3_csa_table 2543 000015D4 C1E602 shl esi, 2 ; tmp0 = ptr[-nn-1]*4 2544 000015D7 C1E702 shl edi, 2 ; tmp1 = ptr[+nn]*4 2545 000015DA 8D043E lea eax, [esi+edi] ; tmp2 = tmp0+tmp1 2546 000015DD BD032AE136 mov ebp, 36E12A03h ; @@def_csa 0,36E12A03h,-20ED7F9Ah ;-0.6 2547 ; mp3_csa_&nn&_cs 2548 000015E2 F7ED imul ebp ; tmp2 = (tmp2*csa[0]) 2549 000015E4 89D5 mov ebp, edx 2550 000015E6 B8635631A8 mov eax, -57CEA99Dh ; mp3_csa_&nn&_ca-mp3_csa_&nn&_cs 2551 000015EB F7EE imul esi ; tmp0 = (tmp2+(tmp0*csa[3])) 2552 000015ED 01EA add edx, ebp 2553 000015EF 8913 mov [ebx], edx ; [ebx+(nn)*4] 2554 000015F1 B869AAF315 mov eax, 15F3AA69h ; mp3_csa_&nn&_ca+mp3_csa_&nn&_cs 2555 000015F6 F7EF imul edi ; tmp1 = (tmp2-(tmp1*csa[2])) 2556 000015F8 29D5 sub ebp, edx 2557 000015FA 896BFC mov [ebx-4], ebp ; [ebx-(nn+1)*4] 2558 000015FD 8B73F8 mov esi, [ebx-8] 2559 00001600 8B7B04 mov edi, [ebx+4] 2560 00001603 C1E602 shl esi, 2 2561 00001606 C1E702 shl edi, 2 2562 00001609 8D043E lea eax, [esi+edi] 2563 0000160C BDFD756E38 mov ebp, 386E75FDh ; @@def_csa 1,386E75FDh,-1E30DB48h ;-0.535 2564 00001611 F7ED imul ebp 2565 00001613 89D5 mov ebp, edx 2566 00001615 B8BBAE60A9 mov eax, -569F5145h 2567 0000161A F7EE imul esi 2568 0000161C 01EA add edx, ebp 2569 0000161E 895304 mov [ebx+4], edx ; [ebx+(nn)*4] 2570 00001621 B8B59A3D1A mov eax, 1A3D9AB5h 2571 00001626 F7EF imul edi 2572 00001628 29D5 sub ebp, edx 2573 0000162A 896BF8 mov [ebx-8], ebp ; [ebx-(nn+1)*4] 2574 0000162D 8B73F4 mov esi, [ebx-12] 2575 00001630 8B7B08 mov edi, [ebx+8] 2576 00001633 C1E602 shl esi, 2 2577 00001636 C1E702 shl edi, 2 2578 00001639 8D043E lea eax, [esi+edi] 2579 0000163C BD3EB7C63C mov ebp, 3CC6B73Eh ; @@def_csa 2,3CC6B73Eh,-140E604Fh ;-0.33 2580 00001641 F7ED imul ebp 2581 00001643 89D5 mov ebp, edx 2582 00001645 B873E82AAF mov eax, -50D5178Dh 2583 0000164A F7EE imul esi 2584 0000164C 01EA add edx, ebp 2585 0000164E 895308 mov [ebx+8], edx ; [ebx+(nn)*4] 2586 00001651 B8EF56B828 mov eax, 28B856EFh 2587 00001656 F7EF imul edi 2588 00001658 29D5 sub ebp, edx 2589 0000165A 896BF4 mov [ebx-12], ebp ; [ebx-(nn+1)*4] 2590 0000165D 8B73F0 mov esi, [ebx-16] 2591 00001660 8B7B0C mov edi, [ebx+12] 2592 00001663 C1E602 shl esi, 2 2593 00001666 C1E702 shl edi, 2 2594 00001669 8D043E lea eax, [esi+edi] 2595 0000166C BD55A0EE3E mov ebp, 3EEEA055h ; @@def_csa 3,3EEEA055h,-0BA47742h ;-0.185 2596 00001671 F7ED imul ebp 2597 00001673 89D5 mov ebp, edx 2598 00001675 B869E86CB5 mov eax, -4A931797h 2599 0000167A F7EE imul esi 2600 0000167C 01EA add edx, ebp 2601 0000167E 89530C mov [ebx+12], edx ; [ebx+(nn)*4] 2602 00001681 B813294A33 mov eax, 334A2913h 2603 00001686 F7EF imul edi 2604 00001688 29D5 sub ebp, edx 2605 0000168A 896BF0 mov [ebx-16], ebp ; [ebx-(nn+1)*4] 2606 0000168D 8B73EC mov esi, [ebx-20] ; ebx-(nn+1)*4] ; tmp0 = ptr[-nn-1] 2607 00001690 8B7B10 mov edi, [ebx+16] ; [ebx+(nn)*4] ; tmp1 = ptr[+nn] 2608 00001693 C1E602 shl esi, 2 2609 00001696 C1E702 shl edi, 2 2610 00001699 8D043E lea eax, [esi+edi] ; tmp2 = tmp0+tmp1 2611 0000169C BD5C90B63F mov ebp, 3FB6905Ch ; @@def_csa 4,3FB6905Ch,-060D80E9h ;-0.095 2612 000016A1 F7ED imul ebp ; tmp2 = (tmp2*csa[0]) 2613 000016A3 89D5 mov ebp, edx 2614 000016A5 B8BBEE3BBA mov eax, -45C41145h 2615 000016AA F7EE imul esi ; tmp0 = (tmp2+(tmp0*csa[3])) 2616 000016AC 01EA add edx, ebp 2617 000016AE 895310 mov [ebx+16], edx ; [ebx+(nn)*4] 2618 000016B1 B8730FA939 mov eax, 39A90F73h 2619 000016B6 F7EF imul edi ; tmp1 = (tmp2-(tmp1*csa[2])) 2620 000016B8 29D5 sub ebp, edx 2621 000016BA 896BEC mov [ebx-20], ebp ; [ebx-(nn+1)*4] 2622 000016BD 8B73E8 mov esi, [ebx-24] 2623 000016C0 8B7B14 mov edi, [ebx+20] 2624 000016C3 C1E602 shl esi, 2 2625 000016C6 C1E702 shl edi, 2 2626 000016C9 8D043E lea eax, [esi+edi] 2627 000016CC BD213FF23F mov ebp, 3FF23F21h ; @@def_csa 5,3FF23F21h,-029F2E1Bh ;-0.041 2628 000016D1 F7ED imul ebp 2629 000016D3 89D5 mov ebp, edx 2630 000016D5 B8C4926EBD mov eax, -42916D3Ch 2631 000016DA F7EE imul esi 2632 000016DC 01EA add edx, ebp 2633 000016DE 895314 mov [ebx+20], edx ; [ebx+(nn)*4] 2634 000016E1 B80611533D mov eax, 3D531106h 2635 000016E6 F7EF imul edi 2636 000016E8 29D5 sub ebp, edx 2637 000016EA 896BE8 mov [ebx-24], ebp ; [ebx-(nn+1)*4] 2638 000016ED 8B73E4 mov esi, [ebx-28] 2639 000016F0 8B7B18 mov edi, [ebx+24] 2640 000016F3 C1E602 shl esi, 2 2641 000016F6 C1E702 shl edi, 2 2642 000016F9 8D043E lea eax, [esi+edi] 2643 000016FC BD3259FE3F mov ebp, 3FFE5932h ; @@def_csa 6,3FFE5932h,-00E8A11Ch ;-0.0142 2644 00001701 F7ED imul ebp 2645 00001703 89D5 mov ebp, edx 2646 00001705 B8B20519BF mov eax, -40E6FA4Eh 2647 0000170A F7EE imul esi 2648 0000170C 01EA add edx, ebp 2649 0000170E 895318 mov [ebx+24], edx ; [ebx+(nn)*4] 2650 00001711 B816B8153F mov eax, 3F15B816h 2651 00001716 F7EF imul edi 2652 00001718 29D5 sub ebp, edx 2653 0000171A 896BE4 mov [ebx-28], ebp ; [ebx-(nn+1)*4] 2654 0000171D 8B73E0 mov esi, [ebx-32] 2655 00001720 8B7B1C mov edi, [ebx+28] 2656 00001723 C1E602 shl esi, 2 2657 00001726 C1E702 shl edi, 2 2658 00001729 8D043E lea eax, [esi+edi] 2659 0000172C BD4BE3FF3F mov ebp, 3FFFE34Bh ; @@def_csa 7,3FFFE34Bh,-003C9ED1h ;-0.0037 2660 00001731 F7ED imul ebp 2661 00001733 89D5 mov ebp, edx 2662 00001735 B8E47DC3BF mov eax, -403C821Ch 2663 0000173A F7EE imul esi 2664 0000173C 01EA add edx, ebp 2665 0000173E 89531C mov [ebx+28], edx ; [ebx+(nn)*4] 2666 00001741 B87A44C33F mov eax, 3FC3447Ah 2667 00001746 F7EF imul edi 2668 00001748 29D5 sub ebp, edx 2669 0000174A 896BE0 mov [ebx-32], ebp ; [ebx-(nn+1)*4] 2670 0000174D 49 dec ecx 2671 0000174E 0F8578FEFFFF jnz .lop 2672 00001754 5B pop ebx 2673 2674 .no_antialias: 2675 ; 16/02/2025 2676 2677 .no_rdtsc_supported@: 2678 00001755 C3 retn 2679 2680 2681 ; =============== S U B R O U T I N E ======================================= 2682 2683 2684 mp3_imdct36: 2685 00001756 8B06 mov eax, [esi] ; in: esi=src (sb_hybrid) 2686 ; in: edi=dst (sb_samples) 2687 ; in: ebx=buf (mdct_buf) 2688 ; in: ebp=win (mdct_win) 2689 ; 2690 ; [esi+0*4] 2691 00001758 8B5604 mov edx, [esi+4] ; IRP i,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 2692 0000175B 01D0 add eax, edx ; IF i AND 1 (*) ; mov edx,[esi+i*4] ; val[i] 2693 ; add val[i-1] 2694 0000175D 894604 mov [esi+4], eax ; IF i GT 1 2695 ; add ecx,eax ; add val[i-2] 2696 ; mov [esi+(i)*4],ecx 2697 ; ELSE 2698 ; mov [esi+(i)*4],eax 2699 00001760 89C1 mov ecx, eax ; memorize as val[i-2] 2700 00001762 8B4608 mov eax, [esi+8] ; ELSE (*) ; [esi+i*4] ; val[i] 2701 00001765 01C2 add edx, eax ; add val[i-1] 2702 00001767 895608 mov [esi+8], edx ; [esi+(i)*4 2703 0000176A 8B560C mov edx, [esi+12] 2704 0000176D 01D0 add eax, edx 2705 0000176F 01C1 add ecx, eax 2706 00001771 894E0C mov [esi+12], ecx 2707 00001774 89C1 mov ecx, eax 2708 00001776 8B4610 mov eax, [esi+16] 2709 00001779 01C2 add edx, eax 2710 0000177B 895610 mov [esi+16], edx 2711 0000177E 8B5614 mov edx, [esi+20] 2712 00001781 01D0 add eax, edx 2713 00001783 01C1 add ecx, eax 2714 00001785 894E14 mov [esi+20], ecx 2715 00001788 89C1 mov ecx, eax 2716 0000178A 8B4618 mov eax, [esi+24] 2717 0000178D 01C2 add edx, eax 2718 0000178F 895618 mov [esi+24], edx 2719 00001792 8B561C mov edx, [esi+28] 2720 00001795 01D0 add eax, edx 2721 00001797 01C1 add ecx, eax 2722 00001799 894E1C mov [esi+28], ecx 2723 0000179C 89C1 mov ecx, eax 2724 0000179E 8B4620 mov eax, [esi+32] 2725 000017A1 01C2 add edx, eax 2726 000017A3 895620 mov [esi+32], edx 2727 000017A6 8B5624 mov edx, [esi+36] 2728 000017A9 01D0 add eax, edx 2729 000017AB 01C1 add ecx, eax 2730 000017AD 894E24 mov [esi+36], ecx 2731 000017B0 89C1 mov ecx, eax 2732 000017B2 8B4628 mov eax, [esi+40] 2733 000017B5 01C2 add edx, eax 2734 000017B7 895628 mov [esi+40], edx 2735 000017BA 8B562C mov edx, [esi+44] 2736 000017BD 01D0 add eax, edx 2737 000017BF 01C1 add ecx, eax 2738 000017C1 894E2C mov [esi+44], ecx 2739 000017C4 89C1 mov ecx, eax 2740 000017C6 8B4630 mov eax, [esi+48] 2741 000017C9 01C2 add edx, eax 2742 000017CB 895630 mov [esi+48], edx 2743 000017CE 8B5634 mov edx, [esi+52] 2744 000017D1 01D0 add eax, edx 2745 000017D3 01C1 add ecx, eax 2746 000017D5 894E34 mov [esi+52], ecx 2747 000017D8 89C1 mov ecx, eax 2748 000017DA 8B4638 mov eax, [esi+56] 2749 000017DD 01C2 add edx, eax 2750 000017DF 895638 mov [esi+56], edx 2751 000017E2 8B563C mov edx, [esi+60] 2752 000017E5 01D0 add eax, edx 2753 000017E7 01C1 add ecx, eax 2754 000017E9 894E3C mov [esi+60], ecx 2755 000017EC 89C1 mov ecx, eax 2756 000017EE 8B4640 mov eax, [esi+64] 2757 000017F1 01C2 add edx, eax 2758 000017F3 895640 mov [esi+64], edx 2759 000017F6 8B5644 mov edx, [esi+68] 2760 000017F9 01D0 add eax, edx 2761 000017FB 01C1 add ecx, eax 2762 000017FD 894E44 mov [esi+68], ecx 2763 00001800 89C1 mov ecx, eax 2764 00001802 53 push ebx 2765 00001803 55 push ebp 2766 00001804 57 push edi 2767 00001805 8B0E mov ecx, [esi] ; IRP j,0,1 2768 00001807 8B5E30 mov ebx, [esi+48] ; t1 = [esi+(0*2+j)*4], t0 = [esi+(6*2+j)*4] 2769 0000180A 8B7E20 mov edi, [esi+32] ; t2 = [esi+(4*2+j)*4] 2770 0000180D 037E40 add edi, [esi+64] ; + [esi+(8*2+j)*4] 2771 00001810 2B7E10 sub edi, [esi+16] ; - [esi+(2*2+j)*4] 2772 00001813 8D2C4B lea ebp, [ebx+ecx*2] ; t2 = src[4*2+j] + src[8*2+j] - src[2*2+j] 2773 ; t3 = [t1*2+t0] 2774 00001816 D1FD sar ebp, 1 ; sar @@t3,1 2775 00001818 29D9 sub ecx, ebx ; sub @@t1,@@t0 2776 0000181A 89C8 mov eax, ecx ; @@SUM [@@tmp+(16+j)*4],@@t1,add,@@t2 2777 0000181C 01F8 add eax, edi 2778 0000181E A3[70470500] mov [_@@@tmp+40h], eax ; [@@tmp+(16+j)*4] 2779 00001823 D1FF sar edi, 1 ; sar @@t2,1 2780 00001825 89C8 mov eax, ecx ; @@SUM [@@tmp+(6+j)*4],@@t1,sub,@@t2 2781 00001827 29F8 sub eax, edi 2782 00001829 A3[48470500] mov [_@@@tmp+18h], eax ; [@@tmp+(6+j)*4] 2783 0000182E 8B4610 mov eax, [esi+16] ; [esi+(4*2+j)*4] 2784 00001831 034620 add eax, [esi+32] ; [esi+(2*2+j)*4] 2785 00001834 D1E0 shl eax, 1 2786 00001836 BA0AD94778 mov edx, 7847D90Ah ; C2 2787 0000183B F7EA imul edx 2788 0000183D 89D3 mov ebx, edx 2789 0000183F 8B4620 mov eax, [esi+32] 2790 00001842 2B4640 sub eax, [esi+64] 2791 00001845 BA04CB8BD3 mov edx, 0D38BCB04h ; negC8 2792 0000184A F7EA imul edx 2793 0000184C 89D1 mov ecx, edx 2794 0000184E 8B4610 mov eax, [esi+16] 2795 00001851 034640 add eax, [esi+64] 2796 00001854 D1E0 shl eax, 1 2797 00001856 BA7541F29D mov edx, 9DF24175h ; negC4 2798 0000185B F7EA imul edx 2799 0000185D 89E8 mov eax, ebp 2800 0000185F 01D8 add eax, ebx 2801 00001861 01C8 add eax, ecx 2802 00001863 A3[38470500] mov [_@@@tmp+8], eax 2803 00001868 89E8 mov eax, ebp 2804 0000186A 29D8 sub eax, ebx 2805 0000186C 29D0 sub eax, edx 2806 0000186E A3[58470500] mov [_@@@tmp+28h], eax 2807 00001873 89E8 mov eax, ebp 2808 00001875 01D0 add eax, edx 2809 00001877 29C8 sub eax, ecx 2810 00001879 A3[68470500] mov [_@@@tmp+38h], eax 2811 0000187E 8B4628 mov eax, [esi+40] 2812 00001881 034638 add eax, [esi+56] 2813 00001884 2B4608 sub eax, [esi+8] 2814 00001887 D1E0 shl eax, 1 2815 00001889 BA5F142691 mov edx, 9126145Fh ; negC3 2816 0000188E F7EA imul edx 2817 00001890 8915[40470500] mov [_@@@tmp+10h], edx 2818 00001896 8B4608 mov eax, [esi+8] 2819 00001899 034628 add eax, [esi+40] 2820 0000189C D1E0 shl eax, 1 2821 0000189E BA332E0E7E mov edx, 7E0E2E33h ; C1 2822 000018A3 F7EA imul edx 2823 000018A5 89D7 mov edi, edx 2824 000018A7 8B4628 mov eax, [esi+40] 2825 000018AA 2B4638 sub eax, [esi+56] 2826 000018AD BA2E5E71A8 mov edx, 0A8715E2Eh ; negC7 2827 000018B2 F7EA imul edx 2828 000018B4 89D5 mov ebp, edx 2829 000018B6 8B4608 mov eax, [esi+8] 2830 000018B9 034638 add eax, [esi+56] 2831 000018BC D1E0 shl eax, 1 2832 000018BE BAB822B9AD mov edx, 0ADB922B8h ; negC5 2833 000018C3 F7EA imul edx 2834 000018C5 89D1 mov ecx, edx 2835 000018C7 8B4618 mov eax, [esi+24] 2836 000018CA D1E0 shl eax, 1 2837 000018CC BAA2EBD96E mov edx, 6ED9EBA2h ; C3 2838 000018D1 F7EA imul edx 2839 000018D3 89E8 mov eax, ebp 2840 000018D5 01F8 add eax, edi 2841 000018D7 01D0 add eax, edx 2842 000018D9 A3[30470500] mov [_@@@tmp], eax 2843 000018DE 89E8 mov eax, ebp 2844 000018E0 29C8 sub eax, ecx 2845 000018E2 29D0 sub eax, edx 2846 000018E4 A3[50470500] mov [_@@@tmp+20h], eax 2847 000018E9 89F8 mov eax, edi 2848 000018EB 01C8 add eax, ecx 2849 000018ED 29D0 sub eax, edx 2850 000018EF A3[60470500] mov [_@@@tmp+30h], eax 2851 000018F4 8B4E04 mov ecx, [esi+4] 2852 000018F7 8B5E34 mov ebx, [esi+52] 2853 000018FA 8B7E24 mov edi, [esi+36] 2854 000018FD 037E44 add edi, [esi+68] 2855 00001900 2B7E14 sub edi, [esi+20] 2856 00001903 8D2C4B lea ebp, [ebx+ecx*2] 2857 00001906 D1FD sar ebp, 1 2858 00001908 29D9 sub ecx, ebx 2859 0000190A 89C8 mov eax, ecx 2860 0000190C 01F8 add eax, edi 2861 0000190E A3[74470500] mov [_@@@tmp+44h], eax 2862 00001913 D1FF sar edi, 1 2863 00001915 89C8 mov eax, ecx 2864 00001917 29F8 sub eax, edi 2865 00001919 A3[4C470500] mov [_@@@tmp+1Ch], eax 2866 0000191E 8B4614 mov eax, [esi+20] ; t0 = MULH(2*(src[2*2+j]+src[4*2+j]),C2) 2867 00001921 034624 add eax, [esi+36] 2868 00001924 D1E0 shl eax, 1 2869 00001926 BA0AD94778 mov edx, 7847D90Ah ; C2 2870 0000192B F7EA imul edx 2871 0000192D 89D3 mov ebx, edx 2872 0000192F 8B4624 mov eax, [esi+36] ; t1 = MULH(src[4*2+j]-src[8*2+j],negC8) 2873 00001932 2B4644 sub eax, [esi+68] 2874 00001935 BA04CB8BD3 mov edx, 0D38BCB04h ; negC8 2875 0000193A F7EA imul edx 2876 0000193C 89D1 mov ecx, edx 2877 0000193E 8B4614 mov eax, [esi+20] ; t2 = MULH(2*(src[2*2+j]+src[8*2+j]),negC4) 2878 00001941 034644 add eax, [esi+68] 2879 00001944 D1E0 shl eax, 1 2880 00001946 BA7541F29D mov edx, 9DF24175h ; negC4 2881 0000194B F7EA imul edx 2882 0000194D 89E8 mov eax, ebp ; tmp[2+j] = t3+t0+t1 2883 0000194F 01D8 add eax, ebx 2884 00001951 01C8 add eax, ecx 2885 00001953 A3[3C470500] mov [_@@@tmp+0Ch], eax 2886 00001958 89E8 mov eax, ebp ; tmp[10+j] = t3-t0-t2 2887 0000195A 29D8 sub eax, ebx 2888 0000195C 29D0 sub eax, edx 2889 0000195E A3[5C470500] mov [_@@@tmp+2Ch], eax 2890 00001963 89E8 mov eax, ebp ; tmp[14+j] = t3+t2-t1 2891 00001965 01D0 add eax, edx 2892 00001967 29C8 sub eax, ecx 2893 00001969 A3[6C470500] mov [_@@@tmp+3Ch], eax 2894 0000196E 8B462C mov eax, [esi+44] ; tmp[4+j] = MULH(2*(src[5*2+j]+src[7*2+j]-src[1*2+j]),negC3) 2895 00001971 03463C add eax, [esi+60] 2896 00001974 2B460C sub eax, [esi+12] 2897 00001977 D1E0 shl eax, 1 2898 00001979 BA5F142691 mov edx, 9126145Fh ; negC3 2899 0000197E F7EA imul edx 2900 00001980 8915[44470500] mov [_@@@tmp+14h], edx 2901 00001986 8B460C mov eax, [esi+12] ; @@MULH @@t2,[esi+(1*2+j)*4],add,[esi+(5*2+j)*4],-,- ,1,C1,- 2902 ; t2 = MULH(2*(src[1*2+j],add,src[5*2+j]),-,-,1,C1) 2903 00001989 03462C add eax, [esi+44] 2904 0000198C D1E0 shl eax, 1 2905 0000198E BA332E0E7E mov edx, 7E0E2E33h ; C1 2906 00001993 F7EA imul edx 2907 00001995 89D7 mov edi, edx 2908 00001997 8B462C mov eax, [esi+44] ; @@MULH @@t3,[esi+(5*2+j)*4],sub,[esi+(7*2+j)*4],-,-, 2909 ; ,0,negC7,- 2910 ; 2911 ; t3 = MULH( src[5*2+j],sub,src[7*2+j],-,-,0,negC7) 2912 0000199A 2B463C sub eax, [esi+60] 2913 0000199D BA2E5E71A8 mov edx, 0A8715E2Eh ; negC7 2914 000019A2 F7EA imul edx 2915 000019A4 89D5 mov ebp, edx 2916 000019A6 8B460C mov eax, [esi+12] ; t1 = MULH(2*(src[1*2+j],add,src[7*2+j]),-,-,1,negC5) 2917 000019A9 03463C add eax, [esi+60] 2918 000019AC D1E0 shl eax, 1 ; shift = 1 2919 000019AE BAB822B9AD mov edx, 0ADB922B8h ; negC5 2920 000019B3 F7EA imul edx 2921 000019B5 89D1 mov ecx, edx 2922 000019B7 8B461C mov eax, [esi+28] ; t0 = MULH(2*src[3*2+j],-,-,-,-,1,C3) 2923 000019BA D1E0 shl eax, 1 2924 000019BC BAA2EBD96E mov edx, 6ED9EBA2h ; C3 2925 000019C1 F7EA imul edx 2926 000019C3 89E8 mov eax, ebp 2927 000019C5 01F8 add eax, edi 2928 000019C7 01D0 add eax, edx 2929 000019C9 A3[34470500] mov [_@@@tmp+4], eax 2930 000019CE 89E8 mov eax, ebp 2931 000019D0 29C8 sub eax, ecx 2932 000019D2 29D0 sub eax, edx 2933 000019D4 A3[54470500] mov [_@@@tmp+24h], eax 2934 000019D9 89F8 mov eax, edi ; @@SUM [@@tmp+(12+j)*4],@@t2,add,@@t1,sub,edx 2935 000019DB 01C8 add eax, ecx 2936 000019DD 29D0 sub eax, edx 2937 000019DF A3[64470500] mov [_@@@tmp+34h], eax 2938 000019E4 5F pop edi 2939 000019E5 5D pop ebp 2940 000019E6 5B pop ebx 2941 000019E7 56 push esi ; IRP j,0,1,2,3 ; j = 0 2942 000019E8 8B15[30470500] mov edx, [_@@@tmp] ; t0 = [@@tmp+(j*4+0)*4] 2943 000019EE 8B35[34470500] mov esi, [_@@@tmp+4] ; t1 = [@@tmp+(j*4+1)*4] 2944 000019F4 A1[38470500] mov eax, [_@@@tmp+8] ; t2 = [@@tmp+(j*4+2)*4] 2945 000019F9 8B0D[3C470500] mov ecx, [_@@@tmp+0Ch] ; t2 = [@@tmp+(j*4+3)*4] 2946 000019FF 29D0 sub eax, edx ; s2 = t2 - t0 2947 00001A01 8D1450 lea edx, [eax+edx*2] ; s0 = t2 + t0 2948 00001A04 A3[28470500] mov [_@@s2], eax ; @@MULH esi,eax ,-,-,-,-,1,icos36h_&j,- 2949 ; s2 = MULH(s2*2, icos36h[j]) 2950 00001A09 8915[24470500] mov [_@@s0], edx 2951 00001A0F 29F1 sub ecx, esi 2952 00001A11 8D0471 lea eax, [ecx+esi*2] 2953 00001A14 D1E0 shl eax, 1 2954 00001A16 BA90953E40 mov edx, 403E9590h ; icos36h_0 2955 00001A1B F7EA imul edx 2956 00001A1D 89D6 mov esi, edx 2957 00001A1F 89C8 mov eax, ecx ; @@MULH @@s3,ecx,-,-,-,-,shift_for_8minus&j,icos36h_8minus&j,- 2958 ; s3 = MULL(s3,icos36[8-j]) ; <-- "MULL" with "icos36" 2959 00001A21 C1E004 shl eax, 4 2960 00001A24 BA2C2ACA5B mov edx, 5BCA2A2Ch ; icos36h_8 (8-0) 2961 00001A29 F7EA imul edx 2962 00001A2B 8915[2C470500] mov [_@@s3], edx 2963 00001A31 8B0D[24470500] mov ecx, [_@@s0] 2964 00001A37 29F1 sub ecx, esi 2965 00001A39 8D3471 lea esi, [ecx+esi*2] 2966 00001A3C 8B4524 mov eax, [ebp+36] ; @@MULH [edi+(9+j)*SBLIMIT*4],[ebp+(9+j)*4], 2967 ; -,-,-,-,0,ecx,[ebx+(9+j)*4] 2968 ; out[(9+j)*SBLIMIT] = MULH(t0, win[9+j])+buf[9+j] 2969 00001A3F F7E9 imul ecx 2970 00001A41 035324 add edx, [ebx+36] ; [ebx+(9+j)*4] 2971 00001A44 899780040000 mov [edi+1152], edx ; SBLIMIT=32 ; 9*SBLIMIT*4 = 1152 2972 00001A4A 8B4520 mov eax, [ebp+32] ; @@MULH [edi+(8-j)*SBLIMIT*4],[ebp+(8-j)*4] 2973 ; ,-,-,-,-,0,ecx,[ebx+(8-j)*4] 2974 00001A4D F7E9 imul ecx 2975 00001A4F 035320 add edx, [ebx+32] 2976 00001A52 899700040000 mov [edi+1024], edx ; SBLIMIT=32 ; 8*SBLIMIT*4 = 1024 2977 00001A58 8B456C mov eax, [ebp+108] 2978 00001A5B F7EE imul esi 2979 00001A5D 895324 mov [ebx+36], edx 2980 00001A60 8B4568 mov eax, [ebp+104] ; @@MULH [ebx+(8-j)*4],[ebp+(8-j+18)*4],-,-,-,-,0,esi,- 2981 00001A63 F7EE imul esi 2982 00001A65 895320 mov [ebx+32], edx 2983 00001A68 8B0D[28470500] mov ecx, [_@@s2] 2984 00001A6E 8B35[2C470500] mov esi, [_@@s3] 2985 00001A74 29F1 sub ecx, esi ; t2 = s2 - s3 2986 00001A76 8D3471 lea esi, [ecx+esi*2] ; t3 = s2 + s3 2987 00001A79 8B4500 mov eax, [ebp+0] ; @@MULH [edi+(0+j)*SBLIMIT*4],[ebp+(0+j)*4], 2988 ; -,-,-,-,0,ecx,[ebx+(0+j)*4] 2989 00001A7C F7E9 imul ecx 2990 00001A7E 0313 add edx, [ebx] 2991 00001A80 8917 mov [edi], edx 2992 00001A82 8B4544 mov eax, [ebp+68] ; @@MULH [edi+(17-j)*SBLIMIT*4],[ebp+(17-j)*4] 2993 ; ,-,-,-,-,0,ecx,[ebx+(17-j)*4] 2994 00001A85 F7E9 imul ecx 2995 00001A87 035344 add edx, [ebx+68] 2996 00001A8A 899780080000 mov [edi+2176], edx ; 17*SBLIMIT*4 = 2176 2997 00001A90 8B4548 mov eax, [ebp+72] ; @@MULH [ebx+(0+j)*4],[ebp+(0+j+18)*4],-,-,-,-,0,esi,- 2998 00001A93 F7EE imul esi 2999 00001A95 8913 mov [ebx], edx 3000 00001A97 8B858C000000 mov eax, [ebp+140] ; @@MULH [ebx+(17-j)*4],[ebp+(17-j+18)*4],-,-,-,-,0,esi,- 3001 00001A9D F7EE imul esi 3002 00001A9F 895344 mov [ebx+68], edx 3003 00001AA2 8B15[40470500] mov edx, [_@@@tmp+10h] ; IRP j,0,1,2,3 ; j = 1 3004 00001AA8 8B35[44470500] mov esi, [_@@@tmp+14h] 3005 00001AAE A1[48470500] mov eax, [_@@@tmp+18h] 3006 00001AB3 8B0D[4C470500] mov ecx, [_@@@tmp+1Ch] 3007 00001AB9 29D0 sub eax, edx 3008 00001ABB 8D1450 lea edx, [eax+edx*2] 3009 00001ABE A3[28470500] mov [_@@s2], eax 3010 00001AC3 8915[24470500] mov [_@@s0], edx 3011 00001AC9 29F1 sub ecx, esi 3012 00001ACB 8D0471 lea eax, [ecx+esi*2] 3013 00001ACE D1E0 shl eax, 1 3014 00001AD0 BA07F74142 mov edx, 4241F707h ; icos36h_1 3015 00001AD5 F7EA imul edx 3016 00001AD7 89D6 mov esi, edx 3017 00001AD9 89C8 mov eax, ecx 3018 00001ADB C1E002 shl eax, 2 3019 00001ADE BA1E75A37B mov edx, 7BA3751Eh ; icos36h_7 (8-1) 3020 00001AE3 F7EA imul edx 3021 00001AE5 8915[2C470500] mov [_@@s3], edx 3022 00001AEB 8B0D[24470500] mov ecx, [_@@s0] 3023 00001AF1 29F1 sub ecx, esi 3024 00001AF3 8D3471 lea esi, [ecx+esi*2] 3025 00001AF6 8B4528 mov eax, [ebp+40] 3026 00001AF9 F7E9 imul ecx 3027 00001AFB 035328 add edx, [ebx+40] 3028 00001AFE 899700050000 mov [edi+1280], edx 3029 00001B04 8B451C mov eax, [ebp+28] 3030 00001B07 F7E9 imul ecx 3031 00001B09 03531C add edx, [ebx+28] 3032 00001B0C 899780030000 mov [edi+896], edx 3033 00001B12 8B4570 mov eax, [ebp+112] 3034 00001B15 F7EE imul esi 3035 00001B17 895328 mov [ebx+40], edx 3036 00001B1A 8B4564 mov eax, [ebp+100] 3037 00001B1D F7EE imul esi 3038 00001B1F 89531C mov [ebx+28], edx 3039 00001B22 8B0D[28470500] mov ecx, [_@@s2] 3040 00001B28 8B35[2C470500] mov esi, [_@@s3] 3041 00001B2E 29F1 sub ecx, esi 3042 00001B30 8D3471 lea esi, [ecx+esi*2] 3043 00001B33 8B4504 mov eax, [ebp+4] 3044 00001B36 F7E9 imul ecx 3045 00001B38 035304 add edx, [ebx+4] 3046 00001B3B 899780000000 mov [edi+128], edx 3047 00001B41 8B4540 mov eax, [ebp+64] 3048 00001B44 F7E9 imul ecx 3049 00001B46 035340 add edx, [ebx+64] 3050 00001B49 899700080000 mov [edi+2048], edx 3051 00001B4F 8B454C mov eax, [ebp+76] 3052 00001B52 F7EE imul esi 3053 00001B54 895304 mov [ebx+4], edx 3054 00001B57 8B8588000000 mov eax, [ebp+136] 3055 00001B5D F7EE imul esi 3056 00001B5F 895340 mov [ebx+64], edx 3057 00001B62 8B15[50470500] mov edx, [_@@@tmp+20h] ; IRP j,0,1,2,3 ; j = 2 3058 00001B68 8B35[54470500] mov esi, [_@@@tmp+24h] 3059 00001B6E A1[58470500] mov eax, [_@@@tmp+28h] 3060 00001B73 8B0D[5C470500] mov ecx, [_@@@tmp+2Ch] 3061 00001B79 29D0 sub eax, edx 3062 00001B7B 8D1450 lea edx, [eax+edx*2] 3063 00001B7E A3[28470500] mov [_@@s2], eax 3064 00001B83 8915[24470500] mov [_@@s0], edx 3065 00001B89 29F1 sub ecx, esi 3066 00001B8B 8D0471 lea eax, [ecx+esi*2] 3067 00001B8E D1E0 shl eax, 1 3068 00001B90 BA6CBE9D46 mov edx, 469DBE6Ch ; icos36h_2 3069 00001B95 F7EA imul edx 3070 00001B97 89D6 mov esi, edx 3071 00001B99 89C8 mov eax, ecx 3072 00001B9B C1E002 shl eax, 2 3073 00001B9E BA62ECB74B mov edx, 4BB7EC62h ; icos36h_6 (8-2) 3074 00001BA3 F7EA imul edx 3075 00001BA5 8915[2C470500] mov [_@@s3], edx 3076 00001BAB 8B0D[24470500] mov ecx, [_@@s0] 3077 00001BB1 29F1 sub ecx, esi 3078 00001BB3 8D3471 lea esi, [ecx+esi*2] 3079 00001BB6 8B452C mov eax, [ebp+44] 3080 00001BB9 F7E9 imul ecx 3081 00001BBB 03532C add edx, [ebx+44] 3082 00001BBE 899780050000 mov [edi+1408], edx 3083 00001BC4 8B4518 mov eax, [ebp+24] 3084 00001BC7 F7E9 imul ecx 3085 00001BC9 035318 add edx, [ebx+24] 3086 00001BCC 899700030000 mov [edi+768], edx 3087 00001BD2 8B4574 mov eax, [ebp+116] 3088 00001BD5 F7EE imul esi 3089 00001BD7 89532C mov [ebx+44], edx 3090 00001BDA 8B4560 mov eax, [ebp+96] 3091 00001BDD F7EE imul esi 3092 00001BDF 895318 mov [ebx+24], edx 3093 00001BE2 8B0D[28470500] mov ecx, [_@@s2] 3094 00001BE8 8B35[2C470500] mov esi, [_@@s3] 3095 00001BEE 29F1 sub ecx, esi 3096 00001BF0 8D3471 lea esi, [ecx+esi*2] 3097 00001BF3 8B4508 mov eax, [ebp+8] 3098 00001BF6 F7E9 imul ecx 3099 00001BF8 035308 add edx, [ebx+8] 3100 00001BFB 899700010000 mov [edi+256], edx 3101 00001C01 8B453C mov eax, [ebp+60] 3102 00001C04 F7E9 imul ecx 3103 00001C06 03533C add edx, [ebx+60] 3104 00001C09 899780070000 mov [edi+1920], edx 3105 00001C0F 8B4550 mov eax, [ebp+80] 3106 00001C12 F7EE imul esi 3107 00001C14 895308 mov [ebx+8], edx 3108 00001C17 8B8584000000 mov eax, [ebp+132] 3109 00001C1D F7EE imul esi 3110 00001C1F 89533C mov [ebx+60], edx 3111 00001C22 8B15[60470500] mov edx, [_@@@tmp+30h] ; IRP j,0,1,2,3 ; j = 3 3112 00001C28 8B35[64470500] mov esi, [_@@@tmp+34h] 3113 00001C2E A1[68470500] mov eax, [_@@@tmp+38h] 3114 00001C33 8B0D[6C470500] mov ecx, [_@@@tmp+3Ch] 3115 00001C39 29D0 sub eax, edx 3116 00001C3B 8D1450 lea edx, [eax+edx*2] 3117 00001C3E A3[28470500] mov [_@@s2], eax 3118 00001C43 8915[24470500] mov [_@@s0], edx 3119 00001C49 29F1 sub ecx, esi 3120 00001C4B 8D0471 lea eax, [ecx+esi*2] 3121 00001C4E D1E0 shl eax, 1 3122 00001C50 BABE2B214E mov edx, 4E212BBEh ; icos36h_3 3123 00001C55 F7EA imul edx 3124 00001C57 89D6 mov esi, edx 3125 00001C59 89C8 mov eax, ecx 3126 00001C5B D1E0 shl eax, 1 3127 00001C5D BADFA1946F mov edx, 6F94A1DFh ; icos36h_5 (8-3) 3128 00001C62 F7EA imul edx 3129 00001C64 8915[2C470500] mov [_@@s3], edx 3130 00001C6A 8B0D[24470500] mov ecx, [_@@s0] 3131 00001C70 29F1 sub ecx, esi 3132 00001C72 8D3471 lea esi, [ecx+esi*2] 3133 00001C75 8B4530 mov eax, [ebp+48] 3134 00001C78 F7E9 imul ecx 3135 00001C7A 035330 add edx, [ebx+48] 3136 00001C7D 899700060000 mov [edi+1536], edx 3137 00001C83 8B4514 mov eax, [ebp+20] 3138 00001C86 F7E9 imul ecx 3139 00001C88 035314 add edx, [ebx+20] 3140 00001C8B 899780020000 mov [edi+640], edx 3141 00001C91 8B4578 mov eax, [ebp+120] 3142 00001C94 F7EE imul esi 3143 00001C96 895330 mov [ebx+30h], edx 3144 00001C99 8B455C mov eax, [ebp+92] 3145 00001C9C F7EE imul esi 3146 00001C9E 895314 mov [ebx+20], edx 3147 00001CA1 8B0D[28470500] mov ecx, [_@@s2] 3148 00001CA7 8B35[2C470500] mov esi, [_@@s3] 3149 00001CAD 29F1 sub ecx, esi 3150 00001CAF 8D3471 lea esi, [ecx+esi*2] 3151 00001CB2 8B450C mov eax, [ebp+12] 3152 00001CB5 F7E9 imul ecx 3153 00001CB7 03530C add edx, [ebx+12] 3154 00001CBA 899780010000 mov [edi+384], edx 3155 00001CC0 8B4538 mov eax, [ebp+56] 3156 00001CC3 F7E9 imul ecx 3157 00001CC5 035338 add edx, [ebx+56] 3158 00001CC8 899700070000 mov [edi+1792], edx 3159 00001CCE 8B4554 mov eax, [ebp+84] 3160 00001CD1 F7EE imul esi 3161 00001CD3 89530C mov [ebx+12], edx 3162 00001CD6 8B8580000000 mov eax, [ebp+128] 3163 00001CDC F7EE imul esi 3164 00001CDE 895338 mov [ebx+56], edx 3165 00001CE1 8B0D[70470500] mov ecx, [_@@@tmp+40h] ; IRP j,4 3166 ; [@@tmp+(j*4+0)*4] 3167 00001CE7 A1[74470500] mov eax, [_@@@tmp+44h] ; [@@tmp+(j*4+1)*4] 3168 00001CEC D1E0 shl eax, 1 3169 00001CEE BA9A79825A mov edx, 5A82799Ah ; icos36h_4 (8-4) 3170 00001CF3 F7EA imul edx 3171 00001CF5 29D1 sub ecx, edx 3172 00001CF7 8D3451 lea esi, [ecx+edx*2] 3173 00001CFA 8B4534 mov eax, [ebp+52] ; @@MULH [edi+(9+j)*SBLIMIT*4],[ebp+(9+j)*4], 3174 ; -,-,-,-,0,ecx,[ebx+(9+j)*4] 3175 ; out[(9+4)*SBLIMIT] = MULH(t0,win[9+4])+buf[9+4] 3176 00001CFD F7E9 imul ecx 3177 00001CFF 035334 add edx, [ebx+52] 3178 00001D02 899780060000 mov [edi+1664], edx ; 13*SBLIMIT*4 = 1664 3179 00001D08 8B4510 mov eax, [ebp+16] ; @MULH [edi+(8-j)*SBLIMIT*4],[ebp+(8-j)*4], 3180 ; -,-,-,-,0,ecx,[ebx+(8-j)*4] 3181 00001D0B F7E9 imul ecx 3182 00001D0D 035310 add edx, [ebx+16] 3183 00001D10 899700020000 mov [edi+512], edx 3184 00001D16 8B457C mov eax, [ebp+124] ; @@MULH [ebx+(9+j)*4],[ebp+(9+j+18)*4] ,-,-,-,-,0,esi,- 3185 00001D19 F7EE imul esi 3186 00001D1B 895334 mov [ebx+52], edx 3187 00001D1E 8B4558 mov eax, [ebp+88] ; @@MULH [ebx+(8-j)*4],[ebp+(8-j+18)*4],-,-,-,-,0,esi,- 3188 00001D21 F7EE imul esi 3189 00001D23 895310 mov [ebx+16], edx 3190 00001D26 5E pop esi 3191 00001D27 C3 retn 3192 3193 3194 ; =============== S U B R O U T I N E ======================================= 3195 3196 3197 mp3_imdct12: 3198 00001D28 8B06 mov eax, [esi] ; in: esi=src - out: [out2_...] 3199 00001D2A A3[78470500] mov [_@@tmp0], eax ; IRP nn,0,1,2,3,4,5 3200 ; @@tmp&nn rd 1 3201 ; ENDM 3202 ; mov eax,[esi+0*3*4] ; = src[0*3] 3203 00001D2F 8B560C mov edx, [esi+12] ; [esi+1*3*4] ; = src[1*3] 3204 00001D32 01D0 add eax, edx ; = src[0*3]+src[1*3] 3205 00001D34 A3[7C470500] mov [_@@tmp1], eax 3206 00001D39 8B4618 mov eax, [esi+24] 3207 00001D3C 01C2 add edx, eax 3208 00001D3E 8915[80470500] mov [_@@tmp2], edx 3209 00001D44 8B5624 mov edx, [esi+36] ; [esi+3*3*4] 3210 00001D47 01D0 add eax, edx 3211 00001D49 A3[84470500] mov [_@@tmp3], eax 3212 00001D4E 8B4630 mov eax, [esi+48] 3213 00001D51 01C2 add edx, eax 3214 00001D53 8915[88470500] mov [_@@tmp4], edx 3215 00001D59 8B563C mov edx, [esi+60] ; [esi+5*3*4] 3216 00001D5C 01D0 add eax, edx ; = src[4*3]+src[5*3] 3217 00001D5E 0305[84470500] add eax, [_@@tmp3] 3218 00001D64 A3[8C470500] mov [_@@tmp5], eax ; tmp5 = src[4*3]+src[5*3]+tmp3 3219 00001D69 8B15[7C470500] mov edx, [_@@tmp1] 3220 00001D6F 0115[84470500] add [_@@tmp3], edx 3221 00001D75 A1[80470500] mov eax, [_@@tmp2] ; @@MULH @@tmp2,@@tmp2,-,-,-,-,1,C3,- 3222 ; tmp2 = MULH(2*tmp2,C3) 3223 00001D7A D1E0 shl eax, 1 3224 00001D7C BAA2EBD96E mov edx, 6ED9EBA2h ; C3 3225 00001D81 F7EA imul edx 3226 00001D83 8915[80470500] mov [_@@tmp2], edx 3227 00001D89 A1[84470500] mov eax, [_@@tmp3] ; @@MULH @@tmp3,@@tmp3,-,-,-,-,2,C3,- 3228 ; tmp3 = MULH(4*tmp3,C3) 3229 00001D8E C1E002 shl eax, 2 3230 00001D91 BAA2EBD96E mov edx, 6ED9EBA2h ; C3 3231 00001D96 F7EA imul edx 3232 00001D98 8915[84470500] mov [_@@tmp3], edx 3233 00001D9E A1[7C470500] mov eax, [_@@tmp1] ; @@MULH edx,@@tmp1,sub,@@tmp5,-,-,1,icos36h_4,- 3234 00001DA3 2B05[8C470500] sub eax, [_@@tmp5] ; t2 = MULH(2*(tmp1-tmp5),icos36h_4) 3235 00001DA9 D1E0 shl eax, 1 3236 00001DAB BA9A79825A mov edx, 5A82799Ah ; icos36h_4 3237 00001DB0 F7EA imul edx 3238 00001DB2 A1[78470500] mov eax, [_@@tmp0] ; @@SUM eax,@@tmp0,sub,@@tmp4,-,- 3239 00001DB7 2B05[88470500] sub eax, [_@@tmp4] ; t1 = tmp0 - tmp4 3240 00001DBD 29D0 sub eax, edx ; @@CAST macro t1,t2,dst0,dst1,dst2,dst3 3241 ; sub t1,t2 ;t1-t2 3242 ; lea t2,[t1+t2*2] ;t1+t2 3243 ; mov dword ptr [mp3_out2_a&dst0],t1 ;t1-t2 3244 ; mov dword ptr [mp3_out2_b&dst0],t2 ;t1+t2 3245 ; endm 3246 00001DBF 8D1450 lea edx, [eax+edx*2] ; @@CAST eax,edx,1,4,7,10 3247 ; out2[1,4,7,10]=t1-t2,t1-t2,t1+t2,t1+t2 3248 00001DC2 A3[94470500] mov [mp3_out2_a1], eax 3249 00001DC7 8915[A0470500] mov [mp3_out2_b1], edx 3250 00001DCD A1[88470500] mov eax, [_@@tmp4] 3251 00001DD2 8B15[7C470500] mov edx, [_@@tmp1] 3252 00001DD8 D1F8 sar eax, 1 3253 00001DDA D1E2 shl edx, 1 3254 00001DDC 0105[78470500] add [_@@tmp0], eax ; tmp0 = tmp0 + tmp4/2 3255 00001DE2 0115[8C470500] add [_@@tmp5], edx ; tmp5 = tmp5 + tmp1*2 3256 00001DE8 A1[8C470500] mov eax, [_@@tmp5] ; @@MULH edx,@@tmp5,add,@@tmp3,-,-,0,icos36h_1,- 3257 00001DED 0305[84470500] add eax, [_@@tmp3] 3258 00001DF3 BA07F74142 mov edx, 4241F707h ; icos36h_1 3259 00001DF8 F7EA imul edx 3260 00001DFA A1[78470500] mov eax, [_@@tmp0] ; @@SUM eax,@@tmp0,add,@@tmp2,-,- 3261 00001DFF 0305[80470500] add eax, [_@@tmp2] 3262 00001E05 29D0 sub eax, edx ; @@CAST eax,edx,2,3,8,9 3263 00001E07 8D1450 lea edx, [eax+edx*2] 3264 00001E0A A3[98470500] mov [mp3_out2_a2], eax 3265 00001E0F 8915[A4470500] mov [mp3_out2_b2], edx 3266 00001E15 A1[8C470500] mov eax, [_@@tmp5] ; @@MULH edx,@@tmp5,sub,@@tmp3,-,-,1,icos36h_7,- 3267 00001E1A 2B05[84470500] sub eax, [_@@tmp3] 3268 00001E20 D1E0 shl eax, 1 3269 00001E22 BA1E75A37B mov edx, 7BA3751Eh ; icos36h_7 3270 00001E27 F7EA imul edx 3271 00001E29 A1[78470500] mov eax, [_@@tmp0] ; @@SUM eax,@@tmp0,sub,@@tmp2,-,- 3272 00001E2E 2B05[80470500] sub eax, [_@@tmp2] 3273 00001E34 29D0 sub eax, edx ; @@CAST eax,edx,0,5,6,11 3274 00001E36 8D1450 lea edx, [eax+edx*2] 3275 00001E39 A3[90470500] mov [mp3_out2_a0], eax 3276 00001E3E 8915[9C470500] mov [mp3_out2_b0], edx 3277 00001E44 C3 retn 3278 3279 3280 ; =============== S U B R O U T I N E ======================================= 3281 3282 3283 mp3_compute_imdct: 3284 ; 16/02/2025 3285 3286 .no_rdtsc_supported: 3287 00001E45 53 push ebx 3288 00001E46 8B4B60 mov ecx, [ebx+96] ; [ebx+$mp3gr_num_nonzero_hybrids_div9] 3289 00001E49 6BC109 imul eax, ecx, 9 3290 00001E4C 8DBC83A0000000 lea edi, [ebx+eax*4+160] ; [ebx+$mp3gr_sb_hybrid+eax*4] 3291 00001E53 E322 jecxz .breakout 3292 3293 .scan_zero_lop: 3294 00001E55 83EF24 sub edi, 36 ; index-9 3295 00001E58 8B07 mov eax, [edi] ; [edi+0*4] 3296 00001E5A 0B4704 or eax, [edi+4] 3297 00001E5D 0B4708 or eax, [edi+8] 3298 00001E60 0B470C or eax, [edi+12] 3299 00001E63 0B4710 or eax, [edi+16] 3300 00001E66 0B4714 or eax, [edi+20] 3301 00001E69 0B4718 or eax, [edi+24] 3302 00001E6C 0B471C or eax, [edi+28] 3303 00001E6F 0B4720 or eax, [edi+32] ; [edi+8*4] 3304 00001E72 7503 jnz short .breakout 3305 00001E74 49 dec ecx 3306 00001E75 75DE jnz short .scan_zero_lop 3307 3308 .breakout: 3309 00001E77 41 inc ecx ; div9+1 3310 00001E78 D1E9 shr ecx, 1 ; div18 3311 00001E7A 890D[BC470500] mov [_@@sblimit], ecx 3312 00001E80 837B2C02 cmp dword [ebx+44], 2 ; [ebx+$mp3gr_block_type] 3313 00001E84 7505 jnz short .this_long_end 3314 00001E86 8B4B30 mov ecx, [ebx+48] ; [ebx+$mp3gr_switch_point] 3315 00001E89 D1E1 shl ecx, 1 ; 0,1 --> 0,2 3316 3317 .this_long_end: 3318 00001E8B 890D[B8470500] mov [_@@mdct_long_end], ecx 3319 00001E91 8B4330 mov eax, [ebx+48] ; [ebx+$mp3gr_switch_point] 3320 00001E94 A3[C0470500] mov [_@@switch_point], eax 3321 00001E99 8B432C mov eax, [ebx+44] ; [ebx+$mp3gr_block_type] 3322 00001E9C 69C090000000 imul eax, 144 ; 1*36*4 3323 00001EA2 A3[B4470500] mov [_@@www], eax 3324 00001EA7 8B0D[88120100] mov ecx, [mp3_curr_channel] 3325 00001EAD A1[8C120100] mov eax, [mp3_curr_granule] 3326 00001EB2 69C900120000 imul ecx, 4608 ; 36*SBLIMIT*4 ; channel ; sb_samples[ch][gr*18] 3327 00001EB8 69C000090000 imul eax, 2304 ; 18*SBLIMIT*4 ; frame=granule*18 3328 00001EBE 8DBC01[ECDB0000] lea edi, [mp3_sb_samples+ecx+eax] 3329 00001EC5 8DB3A0000000 lea esi, [ebx+160] ; [ebx+$mp3gr_sb_hybrid] 3330 00001ECB A1[88120100] mov eax, [mp3_curr_channel] 3331 00001ED0 69C000090000 imul eax, 2304 ; SBLIMIT*18*4 3332 00001ED6 8D98[ECFF0000] lea ebx, [mp3_mdct_buf+eax] 3333 3334 ; 16/02/2025 3335 .no_rdtsc_supported@: 3336 00001EDC C705[B0470500]0000- mov dword [_@@@JJJ], 0 3336 00001EE4 0000 3337 00001EE6 833D[B8470500]00 cmp dword [_@@mdct_long_end], 0 3338 00001EED 744D jz short .imdct36_done 3339 3340 .imdct36_lop: 3341 00001EEF BD[18010500] mov ebp, mp3_mdct_win ; for j=0 to mdct_long_end-1 3342 00001EF4 833D[B0470500]02 cmp dword [_@@@JJJ], 2 3343 00001EFB 19C0 sbb eax, eax 3344 00001EFD 2305[C0470500] and eax, [_@@switch_point] 3345 00001F03 7506 jnz short .this_window ; force window 0 3346 00001F05 032D[B4470500] add ebp, [_@@www] ; mdct_win 3347 3348 .this_window: 3349 00001F0B A1[B0470500] mov eax, [_@@@JJJ] 3350 00001F10 D1E8 shr eax, 1 ; cy=0,1 3351 00001F12 19C0 sbb eax, eax ; eax=0,FFFFFFFFh 3352 00001F14 2540020000 and eax, 576 ; 4*36*4 3353 00001F19 01C5 add ebp, eax 3354 00001F1B E836F8FFFF call mp3_imdct36 3355 00001F20 83C704 add edi, 4 ; 1*4 ; dst 3356 00001F23 83C648 add esi, 72 ; 18*4 ; sb_hybrid 3357 00001F26 83C348 add ebx, 72 ; mdct_buf ; next 3358 00001F29 FF05[B0470500] inc dword [_@@@JJJ] 3359 00001F2F A1[B0470500] mov eax, [_@@@JJJ] 3360 00001F34 3B05[B8470500] cmp eax, [_@@mdct_long_end] 3361 00001F3A 72B3 jb short .imdct36_lop 3362 3363 .imdct36_done: 3364 ; 16/02/2025 3365 .no_rdtsc_supported@@: 3366 3367 ; 16/02/2025 3368 .no_rdtsc_supported@@@: 3369 00001F3C A1[B0470500] mov eax, [_@@@JJJ] 3370 00001F41 3B05[BC470500] cmp eax, [_@@sblimit] 3371 00001F47 0F83D7020000 jnb .imdct12_done 3372 3373 .imdct12_lop: 3374 00001F4D BD[38020500] mov ebp, (mp3_mdct_win+120h) ; for j=mdct_long_end to sblimit-1 3375 00001F52 A1[B0470500] mov eax, [_@@@JJJ] 3376 00001F57 D1E8 shr eax, 1 ; cy=0,1 3377 00001F59 19C0 sbb eax, eax ; eax=0,FFFFFFFFh 3378 00001F5B 2540020000 and eax, 576 ; 4*36*4 3379 00001F60 01C5 add ebp, eax ; mdct_win 3380 00001F62 8B03 mov eax, [ebx] ; IRP i,0,1,2,3,4,5 3381 00001F64 8907 mov [edi], eax ; @@SUM [edi+i*SBLIMIT*4],[ebx+(i+0)*4],-,-,-,- 3382 00001F66 8B4304 mov eax, [ebx+4] 3383 00001F69 898780000000 mov [edi+128], eax 3384 00001F6F 8B4308 mov eax, [ebx+8] 3385 00001F72 898700010000 mov [edi+256], eax 3386 00001F78 8B430C mov eax, [ebx+12] 3387 00001F7B 898780010000 mov [edi+384], eax 3388 00001F81 8B4310 mov eax, [ebx+16] 3389 00001F84 898700020000 mov [edi+512], eax 3390 00001F8A 8B4314 mov eax, [ebx+20] 3391 00001F8D 898780020000 mov [edi+640], eax ; ENDM 3392 00001F93 81C700030000 add edi, 768 ; 6*SBLIMIT*4 3393 00001F99 E88AFDFFFF call mp3_imdct12 3394 00001F9E A1[90470500] mov eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5 3395 00001FA3 8B5500 mov edx, [ebp+0] ; @@MULH [edi+i*SBLIMIT*4],[mp3_out2_a&i], 3396 ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(1*6+i)*4] 3397 00001FA6 F7EA imul edx 3398 00001FA8 035318 add edx, [ebx+24] 3399 00001FAB 8917 mov [edi], edx 3400 00001FAD A1[9C470500] mov eax, [mp3_out2_b0] ; @@MULH [ebx+(2*6+i)*4],[mp3_out2_b&i], 3401 ; -,-,-,-,0,[ebp+(i+6)*4],- 3402 00001FB2 8B5518 mov edx, [ebp+24] 3403 00001FB5 F7EA imul edx 3404 00001FB7 895330 mov [ebx+48], edx 3405 00001FBA A1[94470500] mov eax, [mp3_out2_a1] ; i = 1 3406 00001FBF 8B5504 mov edx, [ebp+4] 3407 00001FC2 F7EA imul edx 3408 00001FC4 03531C add edx, [ebx+28] 3409 00001FC7 899780000000 mov [edi+128], edx 3410 00001FCD A1[A0470500] mov eax, [mp3_out2_b1] 3411 00001FD2 8B551C mov edx, [ebp+28] 3412 00001FD5 F7EA imul edx 3413 00001FD7 895334 mov [ebx+52], edx 3414 00001FDA A1[98470500] mov eax, [mp3_out2_a2] ; i = 2 3415 00001FDF 8B5508 mov edx, [ebp+8] 3416 00001FE2 F7EA imul edx 3417 00001FE4 035320 add edx, [ebx+32] 3418 00001FE7 899700010000 mov [edi+256], edx 3419 00001FED A1[A4470500] mov eax, [mp3_out2_b2] 3420 00001FF2 8B5520 mov edx, [ebp+32] 3421 00001FF5 F7EA imul edx 3422 00001FF7 895338 mov [ebx+56], edx 3423 00001FFA A1[98470500] mov eax, [mp3_out2_a2] ; i = 3 ; mp3_out2_a3 equ mp3_out2_a2 3424 00001FFF 8B550C mov edx, [ebp+12] 3425 00002002 F7EA imul edx 3426 00002004 035324 add edx, [ebx+36] 3427 00002007 899780010000 mov [edi+384], edx 3428 0000200D A1[A4470500] mov eax, [mp3_out2_b2] ; mp3_out2_b3 equ mp3_out2_b2 3429 00002012 8B5524 mov edx, [ebp+36] 3430 00002015 F7EA imul edx 3431 00002017 89533C mov [ebx+60], edx 3432 0000201A A1[94470500] mov eax, [mp3_out2_a1] ; i = 4 ; mp3_out2_a4 equ mp3_out2_a1 3433 0000201F 8B5510 mov edx, [ebp+16] 3434 00002022 F7EA imul edx 3435 00002024 035328 add edx, [ebx+40] 3436 00002027 899700020000 mov [edi+512], edx 3437 0000202D A1[A0470500] mov eax, [mp3_out2_b1] ; mp3_out2_b4 equ mp3_out2_b1 3438 00002032 8B5528 mov edx, [ebp+40] 3439 00002035 F7EA imul edx 3440 00002037 895340 mov [ebx+64], edx 3441 0000203A A1[90470500] mov eax, [mp3_out2_a0] ; i = 5 ; mp3_out2_a5 equ mp3_out2_a0 3442 0000203F 8B5514 mov edx, [ebp+20] 3443 00002042 F7EA imul edx 3444 00002044 03532C add edx, [ebx+44] 3445 00002047 899780020000 mov [edi+640], edx 3446 0000204D A1[9C470500] mov eax, [mp3_out2_b0] ; mp3_out2_b5 equ mp3_out2_b0 3447 00002052 8B552C mov edx, [ebp+44] 3448 00002055 F7EA imul edx 3449 00002057 895344 mov [ebx+68], edx ; ENDM 3450 0000205A 81C700030000 add edi, 768 ; 6*SBLIMIT*4 3451 00002060 83C604 add esi, 4 ; sb_hybrid 3452 00002063 E8C0FCFFFF call mp3_imdct12 3453 00002068 A1[90470500] mov eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5 3454 0000206D 8B5500 mov edx, [ebp+0] ; @@MULH [edi+i*SBLIMIT*4],[mp3_out2_a&i], 3455 ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(2*6+i)*4] 3456 00002070 F7EA imul edx ; @@MULH [ebx+(0*6+i)*4],[mp3_out2_b&i], 3457 ; -,-,-,-,0,[ebp+(i+6)*4],- 3458 00002072 035330 add edx, [ebx+48] 3459 00002075 8917 mov [edi], edx 3460 00002077 A1[9C470500] mov eax, [mp3_out2_b0] 3461 0000207C 8B5518 mov edx, [ebp+18h] 3462 0000207F F7EA imul edx 3463 00002081 8913 mov [ebx], edx 3464 00002083 A1[94470500] mov eax, [mp3_out2_a1] ; i = 1 3465 00002088 8B5504 mov edx, [ebp+4] 3466 0000208B F7EA imul edx 3467 0000208D 035334 add edx, [ebx+52] 3468 00002090 899780000000 mov [edi+128], edx 3469 00002096 A1[A0470500] mov eax, [mp3_out2_b1] 3470 0000209B 8B551C mov edx, [ebp+28] 3471 0000209E F7EA imul edx 3472 000020A0 895304 mov [ebx+4], edx 3473 000020A3 A1[98470500] mov eax, [mp3_out2_a2] ; i = 2 3474 000020A8 8B5508 mov edx, [ebp+8] 3475 000020AB F7EA imul edx 3476 000020AD 035338 add edx, [ebx+56] 3477 000020B0 899700010000 mov [edi+256], edx 3478 000020B6 A1[A4470500] mov eax, [mp3_out2_b2] 3479 000020BB 8B5520 mov edx, [ebp+32] 3480 000020BE F7EA imul edx 3481 000020C0 895308 mov [ebx+8], edx 3482 000020C3 A1[98470500] mov eax, [mp3_out2_a2] ; i = 3 3483 000020C8 8B550C mov edx, [ebp+12] 3484 000020CB F7EA imul edx 3485 000020CD 03533C add edx, [ebx+60] 3486 000020D0 899780010000 mov [edi+384], edx 3487 000020D6 A1[A4470500] mov eax, [mp3_out2_b2] 3488 000020DB 8B5524 mov edx, [ebp+36] 3489 000020DE F7EA imul edx 3490 000020E0 89530C mov [ebx+12], edx 3491 000020E3 A1[94470500] mov eax, [mp3_out2_a1] ; i = 4 3492 000020E8 8B5510 mov edx, [ebp+16] 3493 000020EB F7EA imul edx 3494 000020ED 035340 add edx, [ebx+64] 3495 000020F0 899700020000 mov [edi+512], edx 3496 000020F6 A1[A0470500] mov eax, [mp3_out2_b1] 3497 000020FB 8B5528 mov edx, [ebp+40] 3498 000020FE F7EA imul edx 3499 00002100 895310 mov [ebx+16], edx 3500 00002103 A1[90470500] mov eax, [mp3_out2_a0] ; i = 5 3501 00002108 8B5514 mov edx, [ebp+20] 3502 0000210B F7EA imul edx 3503 0000210D 035344 add edx, [ebx+68] 3504 00002110 899780020000 mov [edi+640], edx 3505 00002116 A1[9C470500] mov eax, [mp3_out2_b0] 3506 0000211B 8B552C mov edx, [ebp+44] 3507 0000211E F7EA imul edx 3508 00002120 895314 mov [ebx+20], edx ; ENDM 3509 00002123 83C604 add esi, 4 3510 00002126 E8FDFBFFFF call mp3_imdct12 3511 0000212B A1[90470500] mov eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5 3512 00002130 8B5500 mov edx, [ebp+0] ; @@MULH [ebx+(0*6+i)*4],[mp3_out2_a&i], 3513 ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(0*6+i)*4] 3514 00002133 F7EA imul edx 3515 00002135 0313 add edx, [ebx] 3516 00002137 8913 mov [ebx], edx 3517 00002139 A1[9C470500] mov eax, [mp3_out2_b0] ; @@MULH [ebx+(1*6+i)*4],[mp3_out2_b&i], 3518 ; -,-,-,-,0,[ebp+(i+6)*4],- 3519 0000213E 8B5518 mov edx, [ebp+24] 3520 00002141 F7EA imul edx 3521 00002143 895318 mov [ebx+24], edx 3522 00002146 C7433000000000 mov dword [ebx+48], 0 ; [ebx+(2*6+i)*4] 3523 0000214D A1[94470500] mov eax, [mp3_out2_a1] ; i = 1 3524 00002152 8B5504 mov edx, [ebp+4] 3525 00002155 F7EA imul edx 3526 00002157 035304 add edx, [ebx+4] 3527 0000215A 895304 mov [ebx+4], edx 3528 0000215D A1[A0470500] mov eax, [mp3_out2_b1] 3529 00002162 8B551C mov edx, [ebp+28] 3530 00002165 F7EA imul edx 3531 00002167 89531C mov [ebx+28], edx 3532 0000216A C7433400000000 mov dword [ebx+52], 0 ; [ebx+(2*6+i)*4] 3533 00002171 A1[98470500] mov eax, [mp3_out2_a2] ; i = 2 3534 00002176 8B5508 mov edx, [ebp+8] 3535 00002179 F7EA imul edx 3536 0000217B 035308 add edx, [ebx+8] 3537 0000217E 895308 mov [ebx+8], edx 3538 00002181 A1[A4470500] mov eax, [mp3_out2_b2] 3539 00002186 8B5520 mov edx, [ebp+32] 3540 00002189 F7EA imul edx 3541 0000218B 895320 mov [ebx+32], edx 3542 0000218E C7433800000000 mov dword [ebx+56], 0 3543 00002195 A1[98470500] mov eax, [mp3_out2_a2] ; i = 3 3544 0000219A 8B550C mov edx, [ebp+12] 3545 0000219D F7EA imul edx 3546 0000219F 03530C add edx, [ebx+0Ch] 3547 000021A2 89530C mov [ebx+12], edx 3548 000021A5 A1[A4470500] mov eax, [mp3_out2_b2] 3549 000021AA 8B5524 mov edx, [ebp+36] 3550 000021AD F7EA imul edx 3551 000021AF 895324 mov [ebx+36], edx 3552 000021B2 C7433C00000000 mov dword [ebx+60], 0 ; [ebx+(2*6+i)*4] 3553 000021B9 A1[94470500] mov eax, [mp3_out2_a1] ; i = 4 3554 000021BE 8B5510 mov edx, [ebp+16] 3555 000021C1 F7EA imul edx 3556 000021C3 035310 add edx, [ebx+16] 3557 000021C6 895310 mov [ebx+16], edx 3558 000021C9 A1[A0470500] mov eax, [mp3_out2_b1] 3559 000021CE 8B5528 mov edx, [ebp+40] 3560 000021D1 F7EA imul edx 3561 000021D3 895328 mov [ebx+40], edx 3562 000021D6 C7434000000000 mov dword [ebx+64], 0 3563 000021DD A1[90470500] mov eax, [mp3_out2_a0] ; i = 5 3564 000021E2 8B5514 mov edx, [ebp+20] 3565 000021E5 F7EA imul edx 3566 000021E7 035314 add edx, [ebx+20] 3567 000021EA 895314 mov [ebx+20], edx 3568 000021ED A1[9C470500] mov eax, [mp3_out2_b0] 3569 000021F2 8B552C mov edx, [ebp+44] 3570 000021F5 F7EA imul edx 3571 000021F7 89532C mov [ebx+44], edx 3572 000021FA C7434400000000 mov dword [ebx+68], 0 ; [ebx+(2*6+i)*4] 3573 00002201 81C704FAFFFF add edi, -1532 ; (1*4) - (2*6*SBLIMIT*4) ; dst 3574 00002207 83C640 add esi, 64 ; 18*4 - (2*4) ; sb_hybrid 3575 0000220A 83C348 add ebx, 72 ; 18*4 ; mdct_buf 3576 0000220D FF05[B0470500] inc dword [_@@@JJJ] ; next 3577 00002213 A1[B0470500] mov eax, [_@@@JJJ] 3578 00002218 3B05[BC470500] cmp eax, [_@@sblimit] 3579 0000221E 0F8229FDFFFF jb .imdct12_lop 3580 3581 .imdct12_done: 3582 ; 16/02/2025 3583 3584 .no_rdtsc_supported@@@@: 3585 3586 ; 16/02/2025 3587 .no_rdtsc_supported@@@@@: 3588 00002224 833D[B0470500]20 cmp dword [_@@@JJJ], 32 ; SBLIMIT 3589 0000222B 0F8333010000 jnb .zero_outer_done 3590 3591 .zero_outer_lop: 3592 00002231 8B03 mov eax, [ebx] ; zero bands 3593 ; IRP nn,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 3594 ; mov eax,dword ptr [ebx+nn*4] 3595 ; mov dword ptr [ebx+nn*4],0 3596 ; mov dword ptr [edi+nn*SBLIMIT*4],eax ; [dst] 3597 ; ENDM 3598 00002233 C70300000000 mov dword [ebx], 0 ; nn = 0 3599 00002239 8907 mov [edi], eax 3600 0000223B 8B4304 mov eax, [ebx+4] ; nn = 1 3601 0000223E C7430400000000 mov dword [ebx+4], 0 3602 00002245 898780000000 mov [edi+128], eax 3603 0000224B 8B4308 mov eax, [ebx+8] 3604 0000224E C7430800000000 mov dword [ebx+8], 0 3605 00002255 898700010000 mov [edi+256], eax 3606 0000225B 8B430C mov eax, [ebx+12] 3607 0000225E C7430C00000000 mov dword [ebx+12], 0 3608 00002265 898780010000 mov [edi+384], eax 3609 0000226B 8B4310 mov eax, [ebx+16] ; nn = 4 3610 0000226E C7431000000000 mov dword [ebx+16], 0 3611 00002275 898700020000 mov [edi+512], eax 3612 0000227B 8B4314 mov eax, [ebx+20] 3613 0000227E C7431400000000 mov dword [ebx+20], 0 3614 00002285 898780020000 mov [edi+640], eax ; [edi+5*SBLIMIT*4] 3615 0000228B 8B4318 mov eax, [ebx+24] 3616 0000228E C7431800000000 mov dword [ebx+24], 0 3617 00002295 898700030000 mov [edi+768], eax 3618 0000229B 8B431C mov eax, [ebx+28] ; nn = 7 3619 0000229E C7431C00000000 mov dword [ebx+28], 0 3620 000022A5 898780030000 mov [edi+896], eax 3621 000022AB 8B4320 mov eax, [ebx+32] 3622 000022AE C7432000000000 mov dword [ebx+32], 0 3623 000022B5 898700040000 mov [edi+1024], eax ; [edi+8*SBLIMIT*4] 3624 000022BB 8B4324 mov eax, [ebx+36] 3625 000022BE C7432400000000 mov dword [ebx+36], 0 3626 000022C5 898780040000 mov [edi+1152], eax 3627 000022CB 8B4328 mov eax, [ebx+40] 3628 000022CE C7432800000000 mov dword [ebx+40], 0 3629 000022D5 898700050000 mov [edi+1280], eax 3630 000022DB 8B432C mov eax, [ebx+44] 3631 000022DE C7432C00000000 mov dword [ebx+44], 0 3632 000022E5 898780050000 mov [edi+1408], eax 3633 000022EB 8B4330 mov eax, [ebx+48] 3634 000022EE C7433000000000 mov dword [ebx+48], 0 3635 000022F5 898700060000 mov [edi+1536], eax 3636 000022FB 8B4334 mov eax, [ebx+52] 3637 000022FE C7433400000000 mov dword [ebx+52], 0 3638 00002305 898780060000 mov [edi+1664], eax 3639 0000230B 8B4338 mov eax, [ebx+56] 3640 0000230E C7433800000000 mov dword [ebx+56], 0 3641 00002315 898700070000 mov [edi+1792], eax 3642 0000231B 8B433C mov eax, [ebx+60] 3643 0000231E C7433C00000000 mov dword [ebx+60], 0 3644 00002325 898780070000 mov [edi+1920], eax 3645 0000232B 8B4340 mov eax, [ebx+64] 3646 0000232E C7434000000000 mov dword [ebx+64], 0 ; [edi+16*SBLIMIT*4] 3647 00002335 898700080000 mov [edi+2048], eax 3648 0000233B 8B4344 mov eax, [ebx+68] ; nn = 17 3649 0000233E C7434400000000 mov dword [ebx+68], 0 3650 00002345 898780080000 mov [edi+2176], eax ; ENDM 3651 0000234B 83C348 add ebx, 72 ; 18*4 3652 0000234E 83C704 add edi, 4 3653 00002351 FF05[B0470500] inc dword [_@@@JJJ] 3654 00002357 833D[B0470500]20 cmp dword [_@@@JJJ], 32 3655 0000235E 0F82CDFEFFFF jb .zero_outer_lop 3656 3657 .zero_outer_done: 3658 ; 16/02/2025 3659 3660 .no_rdtsc_supported@@@@@@: 3661 00002364 5B pop ebx 3662 3663 ; 16/02/2025 3664 .no_rdtsc_supported@@@@@@@: 3665 00002365 C3 retn 3666 3667 3668 ; =============== S U B R O U T I N E ======================================= 3669 3670 3671 mp3_dct32_shift_0: 3672 00002366 8B06 mov eax, [esi] ; mp3_dct32_macro macro rate_shift ; rate_shift = 0 3673 00002368 8B567C mov edx, [esi+124] ; @@BF macro a,b,sign,cos,shift 3674 ; @@BF 0,31,+,COS0_0,1 3675 ; @@need_a equ (rate_shift EQ 0) or (a LT 16) ; a = 0 3676 ; @@need_b equ (rate_shift EQ 0) or (b LT 16) ; b = 31 3677 ; IF @@need_a AND @@need_b ; rate_shift = 0 3678 ; mov eax,dword ptr [esi+a*4] 3679 ; mov edx,dword ptr [esi+b*4] 3680 ; add dword ptr [esi+a*4],edx 3681 0000236B 0116 add [esi], edx 3682 0000236D 29D0 sub eax, edx 3683 0000236F D1E0 shl eax, 1 ; shl eax,shift 3684 ; (needed when COS.fraction is less than 32bit) 3685 00002371 BA51C21340 mov edx, 4013C251h ; sign&&cos ; +COS0_0 = 4013C251h 3686 00002376 F7EA imul edx 3687 00002378 89567C mov [esi+124], edx ; [esi+b*4] ; upper 32bit of multiply result 3688 0000237B 8B463C mov eax, [esi+60] ; @@BF 15,16,+,COS0_15,5 3689 ; [esi+a*4] 3690 0000237E 8B5640 mov edx, [esi+64] ; [esi+b*4] 3691 00002381 01563C add [esi+60], edx ; [esi+a*4] 3692 00002384 29D0 sub eax, edx 3693 00002386 C1E005 shl eax, 5 ; shl eax,shift 3694 00002389 BAFB228551 mov edx, 518522FBh ; sign&&cos ; +COS0_15 = 518522FBh 3695 0000238E F7EA imul edx 3696 00002390 895640 mov [esi+64], edx ; [esi+b*4] 3697 00002393 8B06 mov eax, [esi] ; @@BF 0,15,+,COS1_0,1 3698 00002395 8B563C mov edx, [esi+60] 3699 00002398 0116 add [esi], edx 3700 0000239A 29D0 sub eax, edx 3701 0000239C D1E0 shl eax, 1 3702 0000239E BA72464F40 mov edx, 404F4672h ; +COS1_0 3703 000023A3 F7EA imul edx 3704 000023A5 89563C mov [esi+60], edx 3705 000023A8 8B4640 mov eax, [esi+64] ; @@BF 16,31,-,COS1_0,1 3706 000023AB 8B567C mov edx, [esi+124] 3707 000023AE 015640 add [esi+64], edx 3708 000023B1 29D0 sub eax, edx 3709 000023B3 D1E0 shl eax, 1 3710 000023B5 BA8EB9B0BF mov edx, 0BFB0B98Eh ; -COS1_0 3711 000023BA F7EA imul edx 3712 000023BC 89567C mov [esi+124], edx 3713 000023BF 8B461C mov eax, [esi+28] ; @@BF 7,24,+,COS0_7,1 3714 000023C2 8B5660 mov edx, [esi+96] 3715 000023C5 01561C add [esi+28], edx 3716 000023C8 29D0 sub eax, edx 3717 000023CA D1E0 shl eax, 1 3718 000023CC BAA71E6056 mov edx, 56601EA7h 3719 000023D1 F7EA imul edx 3720 000023D3 895660 mov [esi+96], edx 3721 000023D6 8B4620 mov eax, [esi+32] ; @@BF 8,23,+,COS0_8,1 3722 000023D9 8B565C mov edx, [esi+92] 3723 000023DC 015620 add [esi+32], edx 3724 000023DF 29D0 sub eax, edx 3725 000023E1 D1E0 shl eax, 1 3726 000023E3 BAECF64C5F mov edx, 5F4CF6ECh 3727 000023E8 F7EA imul edx 3728 000023EA 89565C mov [esi+92], edx 3729 000023ED 8B461C mov eax, [esi+28] ; @@BF 7,8,+,COS1_7,4 3730 000023F0 8B5620 mov edx, [esi+32] 3731 000023F3 01561C add [esi+28], edx 3732 000023F6 29D0 sub eax, edx 3733 000023F8 C1E004 shl eax, 4 3734 000023FB BA044E9E51 mov edx, 519E4E04h 3735 00002400 F7EA imul edx 3736 00002402 895620 mov [esi+32], edx 3737 00002405 8B465C mov eax, [esi+92] ; @@BF 23,24,-,COS1_7,4 3738 00002408 8B5660 mov edx, [esi+96] 3739 0000240B 01565C add [esi+92], edx 3740 0000240E 29D0 sub eax, edx 3741 00002410 C1E004 shl eax, 4 3742 00002413 BAFCB161AE mov edx, 0AE61B1FCh 3743 00002418 F7EA imul edx 3744 0000241A 895660 mov [esi+96], edx 3745 0000241D 8B06 mov eax, [esi] ; @@BF 0,7,+,COS2_0,1 3746 0000241F 8B561C mov edx, [esi+28] 3747 00002422 0116 add [esi], edx 3748 00002424 29D0 sub eax, edx 3749 00002426 D1E0 shl eax, 1 3750 00002428 BA46FB4041 mov edx, 4140FB46h 3751 0000242D F7EA imul edx 3752 0000242F 89561C mov [esi+28], edx 3753 00002432 8B4620 mov eax, [esi+32] ; @@BF 8,15,-,COS2_0,1 3754 00002435 8B563C mov edx, [esi+60] 3755 00002438 015620 add [esi+32], edx 3756 0000243B 29D0 sub eax, edx 3757 0000243D D1E0 shl eax, 1 3758 0000243F BABA04BFBE mov edx, 0BEBF04BAh 3759 00002444 F7EA imul edx 3760 00002446 89563C mov [esi+60], edx 3761 00002449 8B4640 mov eax, [esi+64] ; @@BF 16,23,+,COS2_0,1 3762 0000244C 8B565C mov edx, [esi+92] 3763 0000244F 015640 add [esi+40h], edx 3764 00002452 29D0 sub eax, edx 3765 00002454 D1E0 shl eax, 1 3766 00002456 BA46FB4041 mov edx, 4140FB46h 3767 0000245B F7EA imul edx 3768 0000245D 89565C mov [esi+92], edx 3769 00002460 8B4660 mov eax, [esi+96] ; @@BF 24,31,-,COS2_0,1 3770 00002463 8B567C mov edx, [esi+124] 3771 00002466 015660 add [esi+96], edx 3772 00002469 29D0 sub eax, edx 3773 0000246B D1E0 shl eax, 1 3774 0000246D BABA04BFBE mov edx, 0BEBF04BAh 3775 00002472 F7EA imul edx 3776 00002474 89567C mov [esi+124], edx 3777 00002477 8B460C mov eax, [esi+12] ; @@BF 3,28,+,COS0_3,1 3778 0000247A 8B5670 mov edx, [esi+112] 3779 0000247D 01560C add [esi+12], edx 3780 00002480 29D0 sub eax, edx 3781 00002482 D1E0 shl eax, 1 3782 00002484 BA2134F943 mov edx, 43F93421h 3783 00002489 F7EA imul edx 3784 0000248B 895670 mov [esi+112], edx 3785 0000248E 8B4630 mov eax, [esi+48] ; @@BF 12,19,+,COS0_12,2 3786 00002491 8B564C mov edx, [esi+76] 3787 00002494 015630 add [esi+48], edx 3788 00002497 29D0 sub eax, edx 3789 00002499 C1E002 shl eax, 2 3790 0000249C BA978DFC5E mov edx, 5EFC8D97h 3791 000024A1 F7EA imul edx 3792 000024A3 89564C mov [esi+76], edx 3793 000024A6 8B460C mov eax, [esi+12] ; @@BF 3,12,+,COS1_3,1 3794 000024A9 8B5630 mov edx, [esi+48] 3795 000024AC 01560C add [esi+12], edx 3796 000024AF 29D0 sub eax, edx 3797 000024B1 D1E0 shl eax, 1 3798 000024B3 BA630ECB52 mov edx, 52CB0E63h 3799 000024B8 F7EA imul edx 3800 000024BA 895630 mov [esi+48], edx 3801 000024BD 8B464C mov eax, [esi+76] ; @@BF 19,28,-,COS1_3,1 3802 000024C0 8B5670 mov edx, [esi+112] 3803 000024C3 01564C add [esi+76], edx 3804 000024C6 29D0 sub eax, edx 3805 000024C8 D1E0 shl eax, 1 3806 000024CA BA9DF134AD mov edx, 0AD34F19Dh 3807 000024CF F7EA imul edx 3808 000024D1 895670 mov [esi+112], edx 3809 000024D4 8B4610 mov eax, [esi+16] ; @@BF 4,27,+,COS0_4,1 3810 000024D7 8B566C mov edx, [esi+108] 3811 000024DA 015610 add [esi+16], edx 3812 000024DD 29D0 sub eax, edx 3813 000024DF D1E0 shl eax, 1 3814 000024E1 BAC51BCC46 mov edx, 46CC1BC5h 3815 000024E6 F7EA imul edx 3816 000024E8 89566C mov [esi+108], edx 3817 000024EB 8B462C mov eax, [esi+44] ; @@BF 11,20,+,COS0_11,2 3818 000024EE 8B5650 mov edx, [esi+80] 3819 000024F1 01562C add [esi+44], edx 3820 000024F4 29D0 sub eax, edx 3821 000024F6 C1E002 shl eax, 2 3822 000024F9 BA981AD84A mov edx, 4AD81A98h 3823 000024FE F7EA imul edx 3824 00002500 895650 mov [esi+80], edx 3825 00002503 8B4610 mov eax, [esi+16] ; @@BF 4,11,+,COS1_4,1 3826 00002506 8B562C mov edx, [esi+44] 3827 00002509 015610 add [esi+16], edx 3828 0000250C 29D0 sub eax, edx 3829 0000250E D1E0 shl eax, 1 3830 00002510 BA2E40E264 mov edx, 64E2402Eh 3831 00002515 F7EA imul edx 3832 00002517 89562C mov [esi+44], edx 3833 0000251A 8B4650 mov eax, [esi+80] ; @@BF 20,27,-,COS1_4,1 3834 0000251D 8B566C mov edx, [esi+108] 3835 00002520 015650 add [esi+80], edx 3836 00002523 29D0 sub eax, edx 3837 00002525 D1E0 shl eax, 1 3838 00002527 BAD2BF1D9B mov edx, 9B1DBFD2h 3839 0000252C F7EA imul edx 3840 0000252E 89566C mov [esi+108], edx 3841 00002531 8B460C mov eax, [esi+12] ; @@BF 3,4,+,COS2_3,3 3842 00002534 8B5610 mov edx, [esi+16] 3843 00002537 01560C add [esi+12], edx 3844 0000253A 29D0 sub eax, edx 3845 0000253C C1E003 shl eax, 3 3846 0000253F BA42670352 mov edx, 52036742h 3847 00002544 F7EA imul edx 3848 00002546 895610 mov [esi+16], edx 3849 00002549 8B462C mov eax, [esi+44] ; @@BF 11,12,-,COS2_3,3 3850 0000254C 8B5630 mov edx, [esi+48] 3851 0000254F 01562C add [esi+44], edx 3852 00002552 29D0 sub eax, edx 3853 00002554 C1E003 shl eax, 3 3854 00002557 BABE98FCAD mov edx, 0ADFC98BEh ; -COS2_3 3855 0000255C F7EA imul edx 3856 0000255E 895630 mov [esi+48], edx 3857 00002561 8B464C mov eax, [esi+76] ; @@BF 19,20,+,COS2_3,3 3858 00002564 8B5650 mov edx, [esi+80] 3859 00002567 01564C add [esi+4Ch], edx 3860 0000256A 29D0 sub eax, edx 3861 0000256C C1E003 shl eax, 3 3862 0000256F BA42670352 mov edx, 52036742h ; +COS2_3 3863 00002574 F7EA imul edx 3864 00002576 895650 mov [esi+80], edx 3865 00002579 8B466C mov eax, [esi+108] ; @@BF 27,28,-,COS2_3,3 3866 0000257C 8B5670 mov edx, [esi+112] 3867 0000257F 01566C add [esi+108], edx 3868 00002582 29D0 sub eax, edx 3869 00002584 C1E003 shl eax, 3 3870 00002587 BABE98FCAD mov edx, 0ADFC98BEh 3871 0000258C F7EA imul edx 3872 0000258E 895670 mov [esi+112], edx 3873 00002591 8B06 mov eax, [esi] ; @@BF 0,3,+,COS3_0,1 3874 00002593 8B560C mov edx, [esi+12] 3875 00002596 0116 add [esi], edx 3876 00002598 29D0 sub eax, edx 3877 0000259A D1E0 shl eax, 1 3878 0000259C BAF0E94545 mov edx, 4545E9F0h 3879 000025A1 F7EA imul edx 3880 000025A3 89560C mov [esi+12], edx 3881 000025A6 8B4610 mov eax, [esi+16] ; @@BF 4,7,-,COS3_0,1 3882 000025A9 8B561C mov edx, [esi+28] 3883 000025AC 015610 add [esi+16], edx 3884 000025AF 29D0 sub eax, edx 3885 000025B1 D1E0 shl eax, 1 3886 000025B3 BA1016BABA mov edx, 0BABA1610h 3887 000025B8 F7EA imul edx 3888 000025BA 89561C mov [esi+28], edx 3889 000025BD 8B4620 mov eax, [esi+32] ; @@BF 8,11,+,COS3_0,1 3890 000025C0 8B562C mov edx, [esi+44] 3891 000025C3 015620 add [esi+32], edx 3892 000025C6 29D0 sub eax, edx 3893 000025C8 D1E0 shl eax, 1 3894 000025CA BAF0E94545 mov edx, 4545E9F0h 3895 000025CF F7EA imul edx 3896 000025D1 89562C mov [esi+44], edx 3897 000025D4 8B4630 mov eax, [esi+48] ; @@BF 12,15,-,COS3_0,1 3898 000025D7 8B563C mov edx, [esi+60] 3899 000025DA 015630 add [esi+48], edx 3900 000025DD 29D0 sub eax, edx 3901 000025DF D1E0 shl eax, 1 3902 000025E1 BA1016BABA mov edx, 0BABA1610h 3903 000025E6 F7EA imul edx 3904 000025E8 89563C mov [esi+60], edx 3905 000025EB 8B4640 mov eax, [esi+64] ; @@BF 16,19,+,COS3_0,1 3906 000025EE 8B564C mov edx, [esi+76] 3907 000025F1 015640 add [esi+64], edx 3908 000025F4 29D0 sub eax, edx 3909 000025F6 D1E0 shl eax, 1 3910 000025F8 BAF0E94545 mov edx, 4545E9F0h 3911 000025FD F7EA imul edx 3912 000025FF 89564C mov [esi+76], edx 3913 00002602 8B4650 mov eax, [esi+80] ; @@BF 20,23,-,COS3_0,1 3914 00002605 8B565C mov edx, [esi+92] 3915 00002608 015650 add [esi+80], edx 3916 0000260B 29D0 sub eax, edx 3917 0000260D D1E0 shl eax, 1 3918 0000260F BA1016BABA mov edx, 0BABA1610h ; -COS3_0 3919 00002614 F7EA imul edx 3920 00002616 89565C mov [esi+92], edx 3921 00002619 8B4660 mov eax, [esi+96] ; @@BF 24,27,+,COS3_0,1 3922 0000261C 8B566C mov edx, [esi+108] 3923 0000261F 015660 add [esi+96], edx 3924 00002622 29D0 sub eax, edx 3925 00002624 D1E0 shl eax, 1 3926 00002626 BAF0E94545 mov edx, 4545E9F0h ; +COS3_0 3927 0000262B F7EA imul edx 3928 0000262D 89566C mov [esi+108], edx 3929 00002630 8B4670 mov eax, [esi+112] ; @@BF 28,31,-,COS3_0,1 3930 00002633 8B567C mov edx, [esi+124] 3931 00002636 015670 add [esi+112], edx 3932 00002639 29D0 sub eax, edx 3933 0000263B D1E0 shl eax, 1 3934 0000263D BA1016BABA mov edx, 0BABA1610h 3935 00002642 F7EA imul edx 3936 00002644 89567C mov [esi+124], edx 3937 00002647 8B4604 mov eax, [esi+4] ; @@BF 1,30,+,COS0_1,1 3938 0000264A 8B5678 mov edx, [esi+120] 3939 0000264D 015604 add [esi+4], edx 3940 00002650 29D0 sub eax, edx 3941 00002652 D1E0 shl eax, 1 3942 00002654 BABD45B340 mov edx, 40B345BDh 3943 00002659 F7EA imul edx 3944 0000265B 895678 mov [esi+120], edx 3945 0000265E 8B4638 mov eax, [esi+56] ; @@BF 14,17,+,COS0_14,3 3946 00002661 8B5644 mov edx, [esi+68] 3947 00002664 015638 add [esi+56], edx 3948 00002667 29D0 sub eax, edx 3949 00002669 C1E003 shl eax, 3 3950 0000266C BAD0200B6D mov edx, 6D0B20D0h 3951 00002671 F7EA imul edx 3952 00002673 895644 mov [esi+68], edx 3953 00002676 8B4604 mov eax, [esi+4] ; @@BF 1,14,+,COS1_1,1 3954 00002679 8B5638 mov edx, [esi+56] 3955 0000267C 015604 add [esi+4], edx 3956 0000267F 29D0 sub eax, edx 3957 00002681 D1E0 shl eax, 1 3958 00002683 BA103CE142 mov edx, 42E13C10h 3959 00002688 F7EA imul edx 3960 0000268A 895638 mov [esi+56], edx 3961 0000268D 8B4644 mov eax, [esi+68] ; @@BF 17,30,-,COS1_1,1 3962 00002690 8B5678 mov edx, [esi+120] 3963 00002693 015644 add [esi+68], edx 3964 00002696 29D0 sub eax, edx 3965 00002698 D1E0 shl eax, 1 3966 0000269A BAF0C31EBD mov edx, 0BD1EC3F0h 3967 0000269F F7EA imul edx 3968 000026A1 895678 mov [esi+120], edx 3969 000026A4 8B4618 mov eax, [esi+24] ; @@BF 6,25,+,COS0_6,1 3970 000026A7 8B5664 mov edx, [esi+100] 3971 000026AA 015618 add [esi+24], edx 3972 000026AD 29D0 sub eax, edx 3973 000026AF D1E0 shl eax, 1 3974 000026B1 BA1237AE4F mov edx, 4FAE3712h 3975 000026B6 F7EA imul edx 3976 000026B8 895664 mov [esi+100], edx 3977 000026BB 8B4624 mov eax, [esi+36] ; @@BF 9,22,+,COS0_9,1 3978 000026BE 8B5658 mov edx, [esi+88] 3979 000026C1 015624 add [esi+36], edx 3980 000026C4 29D0 sub eax, edx 3981 000026C6 D1E0 shl eax, 1 3982 000026C8 BA27CF6F6B mov edx, 6B6FCF27h 3983 000026CD F7EA imul edx 3984 000026CF 895658 mov [esi+88], edx 3985 000026D2 8B4618 mov eax, [esi+24] ; @@BF 6, 9,+,COS1_6,2 3986 000026D5 8B5624 mov edx, [esi+36] 3987 000026D8 015618 add [esi+24], edx 3988 000026DB 29D0 sub eax, edx 3989 000026DD C1E002 shl eax, 2 3990 000026E0 BAC2923C6E mov edx, 6E3C92C2h 3991 000026E5 F7EA imul edx 3992 000026E7 895624 mov [esi+36], edx 3993 000026EA 8B4658 mov eax, [esi+88] ; @@BF 22,25,-,COS1_6,2 3994 000026ED 8B5664 mov edx, [esi+100] 3995 000026F0 015658 add [esi+88], edx 3996 000026F3 29D0 sub eax, edx 3997 000026F5 C1E002 shl eax, 2 3998 000026F8 BA3E6DC391 mov edx, 91C36D3Eh 3999 000026FD F7EA imul edx 4000 000026FF 895664 mov [esi+100], edx 4001 00002702 8B4604 mov eax, [esi+4] ; @@BF 1, 6,+,COS2_1,1 4002 00002705 8B5618 mov edx, [esi+24] 4003 00002708 015604 add [esi+4], edx 4004 0000270B 29D0 sub eax, edx 4005 0000270D D1E0 shl eax, 1 4006 0000270F BA88DEF84C mov edx, 4CF8DE88h 4007 00002714 F7EA imul edx 4008 00002716 895618 mov [esi+24], edx 4009 00002719 8B4624 mov eax, [esi+36] ; @@BF 9,14,-,COS2_1,1 4010 0000271C 8B5638 mov edx, [esi+56] 4011 0000271F 015624 add [esi+36], edx 4012 00002722 29D0 sub eax, edx 4013 00002724 D1E0 shl eax, 1 4014 00002726 BA782107B3 mov edx, 0B3072178h 4015 0000272B F7EA imul edx 4016 0000272D 895638 mov [esi+56], edx 4017 00002730 8B4644 mov eax, [esi+68] ; @@BF 17,22,+,COS2_1,1 4018 00002733 8B5658 mov edx, [esi+88] 4019 00002736 015644 add [esi+68], edx 4020 00002739 29D0 sub eax, edx 4021 0000273B D1E0 shl eax, 1 4022 0000273D BA88DEF84C mov edx, 4CF8DE88h 4023 00002742 F7EA imul edx 4024 00002744 895658 mov [esi+88], edx 4025 00002747 8B4664 mov eax, [esi+100] ; @@BF 25,30,-,COS2_1,1 4026 0000274A 8B5678 mov edx, [esi+120] 4027 0000274D 015664 add [esi+100], edx 4028 00002750 29D0 sub eax, edx 4029 00002752 D1E0 shl eax, 1 4030 00002754 BA782107B3 mov edx, 0B3072178h 4031 00002759 F7EA imul edx 4032 0000275B 895678 mov [esi+120], edx 4033 0000275E 8B4608 mov eax, [esi+8] ; @@BF 2,29,+,COS0_2,1 4034 00002761 8B5674 mov edx, [esi+116] 4035 00002764 015608 add [esi+8], edx 4036 00002767 29D0 sub eax, edx 4037 00002769 D1E0 shl eax, 1 4038 0000276B BA6E2DFA41 mov edx, 41FA2D6Eh 4039 00002770 F7EA imul edx 4040 00002772 895674 mov [esi+116], edx 4041 00002775 8B4634 mov eax, [esi+52] ; @@BF 13,18,+,COS0_13,3 4042 00002778 8B5648 mov edx, [esi+72] 4043 0000277B 015634 add [esi+52], edx 4044 0000277E 29D0 sub eax, edx 4045 00002780 C1E003 shl eax, 3 4046 00002783 BA9057D941 mov edx, 41D95790h 4047 00002788 F7EA imul edx 4048 0000278A 895648 mov [esi+72], edx 4049 0000278D 8B4608 mov eax, [esi+8] ; @@BF 2,13,+,COS1_2,1 4050 00002790 8B5634 mov edx, [esi+52] 4051 00002793 015608 add [esi+8], edx 4052 00002796 29D0 sub eax, edx 4053 00002798 D1E0 shl eax, 1 4054 0000279A BA459F9148 mov edx, 48919F45h 4055 0000279F F7EA imul edx 4056 000027A1 895634 mov [esi+52], edx 4057 000027A4 8B4648 mov eax, [esi+72] ; @@BF 18,29,-,COS1_2,1 4058 000027A7 8B5674 mov edx, [esi+116] 4059 000027AA 015648 add [esi+72], edx 4060 000027AD 29D0 sub eax, edx 4061 000027AF D1E0 shl eax, 1 4062 000027B1 BABB606EB7 mov edx, 0B76E60BBh 4063 000027B6 F7EA imul edx 4064 000027B8 895674 mov [esi+116], edx 4065 000027BB 8B4614 mov eax, [esi+20] ; @@BF 5,26,+,COS0_5,1 4066 000027BE 8B5668 mov edx, [esi+104] 4067 000027C1 015614 add [esi+20], edx 4068 000027C4 29D0 sub eax, edx 4069 000027C6 D1E0 shl eax, 1 4070 000027C8 BAF19C9D4A mov edx, 4A9D9CF1h 4071 000027CD F7EA imul edx 4072 000027CF 895668 mov [esi+104], edx 4073 000027D2 8B4628 mov eax, [esi+40] ; @@BF 10,21,+,COS0_10,1 4074 000027D5 8B5654 mov edx, [esi+84] 4075 000027D8 015628 add [esi+40], edx 4076 000027DB 29D0 sub eax, edx 4077 000027DD D1E0 shl eax, 1 4078 000027DF BAB41D7D7C mov edx, 7C7D1DB4h 4079 000027E4 F7EA imul edx 4080 000027E6 895654 mov [esi+84], edx 4081 000027E9 8B4614 mov eax, [esi+20] ; @@BF 5,10,+,COS1_5,2 4082 000027EC 8B5628 mov edx, [esi+40] 4083 000027EF 015614 add [esi+20], edx 4084 000027F2 29D0 sub eax, edx 4085 000027F4 C1E002 shl eax, 2 4086 000027F7 BAAA24E243 mov edx, 43E224AAh 4087 000027FC F7EA imul edx 4088 000027FE 895628 mov [esi+40], edx 4089 00002801 8B4654 mov eax, [esi+84] ; @@BF 21,26,-,COS1_5,2 4090 00002804 8B5668 mov edx, [esi+104] 4091 00002807 015654 add [esi+84], edx 4092 0000280A 29D0 sub eax, edx 4093 0000280C C1E002 shl eax, 2 4094 0000280F BA56DB1DBC mov edx, 0BC1DDB56h 4095 00002814 F7EA imul edx 4096 00002816 895668 mov [esi+104], edx 4097 00002819 8B4608 mov eax, [esi+8] ; @@BF 2,5,+,COS2_2,1 4098 0000281C 8B5614 mov edx, [esi+20] 4099 0000281F 015608 add [esi+8], edx 4100 00002822 29D0 sub eax, edx 4101 00002824 D1E0 shl eax, 1 4102 00002826 BABF6B3273 mov edx, 73326BBFh ; +COS2_2 4103 0000282B F7EA imul edx 4104 0000282D 895614 mov [esi+20], edx 4105 00002830 8B4628 mov eax, [esi+40] ; @@BF 10,13,-,COS2_2,1 4106 00002833 8B5634 mov edx, [esi+52] 4107 00002836 015628 add [esi+40], edx 4108 00002839 29D0 sub eax, edx 4109 0000283B D1E0 shl eax, 1 4110 0000283D BA4194CD8C mov edx, 8CCD9441h ; -COS2_2 4111 00002842 F7EA imul edx 4112 00002844 895634 mov [esi+52], edx 4113 00002847 8B4648 mov eax, [esi+72] ; @@BF 18,21,+,COS2_2,1 4114 0000284A 8B5654 mov edx, [esi+84] 4115 0000284D 015648 add [esi+72], edx 4116 00002850 29D0 sub eax, edx 4117 00002852 D1E0 shl eax, 1 4118 00002854 BABF6B3273 mov edx, 73326BBFh 4119 00002859 F7EA imul edx 4120 0000285B 895654 mov [esi+84], edx 4121 0000285E 8B4668 mov eax, [esi+104] ; @@BF 26,29,-,COS2_2,1 4122 00002861 8B5674 mov edx, [esi+116] 4123 00002864 015668 add [esi+104], edx 4124 00002867 29D0 sub eax, edx 4125 00002869 D1E0 shl eax, 1 4126 0000286B BA4194CD8C mov edx, 8CCD9441h 4127 00002870 F7EA imul edx 4128 00002872 895674 mov [esi+116], edx 4129 00002875 8B4604 mov eax, [esi+4] ; @@BF 1,2,+,COS3_1,2 4130 00002878 8B5608 mov edx, [esi+8] 4131 0000287B 015604 add [esi+4], edx 4132 0000287E 29D0 sub eax, edx 4133 00002880 C1E002 shl eax, 2 4134 00002883 BA46BA9E53 mov edx, 539EBA46h 4135 00002888 F7EA imul edx 4136 0000288A 895608 mov [esi+8], edx 4137 0000288D 8B4614 mov eax, [esi+20] ; @@BF 5,6,-,COS3_1,2 4138 00002890 8B5618 mov edx, [esi+24] 4139 00002893 015614 add [esi+20], edx 4140 00002896 29D0 sub eax, edx 4141 00002898 C1E002 shl eax, 2 4142 0000289B BABA4561AC mov edx, 0AC6145BAh 4143 000028A0 F7EA imul edx 4144 000028A2 895618 mov [esi+24], edx 4145 000028A5 8B4624 mov eax, [esi+36] ; IF rate_shift LT 2 4146 ; @@BF 9,10,+,COS3_1,2 4147 000028A8 8B5628 mov edx, [esi+40] 4148 000028AB 015624 add [esi+36], edx 4149 000028AE 29D0 sub eax, edx 4150 000028B0 C1E002 shl eax, 2 4151 000028B3 BA46BA9E53 mov edx, 539EBA46h 4152 000028B8 F7EA imul edx 4153 000028BA 895628 mov [esi+40], edx 4154 000028BD 8B4634 mov eax, [esi+52] ; @@BF 13,14,-,COS3_1,2 4155 000028C0 8B5638 mov edx, [esi+56] 4156 000028C3 015634 add [esi+52], edx 4157 000028C6 29D0 sub eax, edx 4158 000028C8 C1E002 shl eax, 2 4159 000028CB BABA4561AC mov edx, 0AC6145BAh 4160 000028D0 F7EA imul edx 4161 000028D2 895638 mov [esi+56], edx ; ENDIF 4162 000028D5 8B4644 mov eax, [esi+68] ; @@BF 17,18,+,COS3_1,2 4163 000028D8 8B5648 mov edx, [esi+72] 4164 000028DB 015644 add [esi+68], edx 4165 000028DE 29D0 sub eax, edx 4166 000028E0 C1E002 shl eax, 2 4167 000028E3 BA46BA9E53 mov edx, 539EBA46h 4168 000028E8 F7EA imul edx 4169 000028EA 895648 mov [esi+72], edx 4170 000028ED 8B4654 mov eax, [esi+84] ; @@BF 21,22,-,COS3_1,2 4171 000028F0 8B5658 mov edx, [esi+88] 4172 000028F3 015654 add [esi+84], edx 4173 000028F6 29D0 sub eax, edx 4174 000028F8 C1E002 shl eax, 2 4175 000028FB BABA4561AC mov edx, 0AC6145BAh 4176 00002900 F7EA imul edx 4177 00002902 895658 mov [esi+88], edx 4178 00002905 8B4664 mov eax, [esi+100] ; @@BF 25,26,+,COS3_1,2 4179 00002908 8B5668 mov edx, [esi+104] 4180 0000290B 015664 add [esi+100], edx 4181 0000290E 29D0 sub eax, edx 4182 00002910 C1E002 shl eax, 2 4183 00002913 BA46BA9E53 mov edx, 539EBA46h 4184 00002918 F7EA imul edx 4185 0000291A 895668 mov [esi+104], edx 4186 0000291D 8B4674 mov eax, [esi+116] ; @@BF 29,30,-,COS3_1,2 4187 00002920 8B5678 mov edx, [esi+120] 4188 00002923 015674 add [esi+116], edx 4189 00002926 29D0 sub eax, edx 4190 00002928 C1E002 shl eax, 2 4191 0000292B BABA4561AC mov edx, 0AC6145BAh 4192 00002930 F7EA imul edx 4193 00002932 895678 mov [esi+120], edx 4194 00002935 8B06 mov eax, [esi] ; @@BF1 macro a, b, c, d 4195 ; @@BF a, b,+,COS4_0, 1 4196 ; @@BF c, d,-,COS4_0, 1 4197 ; @@ADD c, d 4198 ; endm 4199 ; @@BF1 0,1,2,3 4200 00002937 8B5604 mov edx, [esi+4] ; @@BF 0,1,+,COS4_0,1 4201 0000293A 0116 add [esi], edx 4202 0000293C 29D0 sub eax, edx 4203 0000293E D1E0 shl eax, 1 4204 00002940 BA9A79825A mov edx, 5A82799Ah ; +COS4_0 4205 00002945 F7EA imul edx 4206 00002947 895604 mov [esi+4], edx 4207 0000294A 8B4608 mov eax, [esi+8] ; @@BF 2,3,-,COS4_0,1 4208 0000294D 8B560C mov edx, [esi+12] 4209 00002950 015608 add [esi+8], edx 4210 00002953 29D0 sub eax, edx 4211 00002955 D1E0 shl eax, 1 4212 00002957 BA66867DA5 mov edx, 0A57D8666h ; -COS4_0 4213 0000295C F7EA imul edx 4214 0000295E 89560C mov [esi+12], edx 4215 00002961 8B460C mov eax, [esi+12] ; @@ADD 2,3 4216 00002964 014608 add [esi+8], eax 4217 00002967 8B4610 mov eax, [esi+16] ; @@BF2 macro a, b, c, d 4218 ; @@BF a, b,+,COS4_0, 1 4219 ; @@BF c, d,-,COS4_0, 1 4220 ; @@ADD c, d 4221 ; @@ADD a, c 4222 ; @@ADD c, b 4223 ; @@ADD b, d 4224 ; endm 4225 ; @@BF2 4,5,6,7 4226 0000296A 8B5614 mov edx, [esi+20] ; @@BF 4,5,+,COS4_0,1 4227 0000296D 015610 add [esi+16], edx 4228 00002970 29D0 sub eax, edx 4229 00002972 D1E0 shl eax, 1 4230 00002974 BA9A79825A mov edx, 5A82799Ah 4231 00002979 F7EA imul edx 4232 0000297B 895614 mov [esi+20], edx 4233 0000297E 8B4618 mov eax, [esi+24] ; @@BF 6,7,-,COS4_0,1 4234 00002981 8B561C mov edx, [esi+28] 4235 00002984 015618 add [esi+24], edx 4236 00002987 29D0 sub eax, edx 4237 00002989 D1E0 shl eax, 1 4238 0000298B BA66867DA5 mov edx, 0A57D8666h 4239 00002990 F7EA imul edx 4240 00002992 89561C mov [esi+28], edx 4241 00002995 8B461C mov eax, [esi+28] ; @@ADD macro dst,src 4242 ; IF (rate_shift EQ 0) or (dst LT 16) 4243 ; ;tab[a] += tab[b] 4244 ; mov eax,dword ptr [esi+src*4] 4245 ; add dword ptr [esi+dst*4],eax 4246 ; ENDIF 4247 ; endm 4248 ; @@ADD 6,7 4249 00002998 014618 add [esi+24], eax 4250 0000299B 8B4618 mov eax, [esi+24] ; @@ADD 4,6 4251 0000299E 014610 add [esi+16], eax 4252 000029A1 8B4614 mov eax, [esi+20] ; @@ADD 6,5 4253 000029A4 014618 add [esi+24], eax 4254 000029A7 8B461C mov eax, [esi+28] ; @@ADD 5,7 4255 000029AA 014614 add [esi+20], eax 4256 000029AD 8B4620 mov eax, [esi+32] ; IF rate_shift LT 2 4257 ; @@BF1 8,9,10,11 4258 000029B0 8B5624 mov edx, [esi+36] ; @@BF 8,9,+,COS4_0,1 4259 000029B3 015620 add [esi+32], edx 4260 000029B6 29D0 sub eax, edx 4261 000029B8 D1E0 shl eax, 1 4262 000029BA BA9A79825A mov edx, 5A82799Ah 4263 000029BF F7EA imul edx 4264 000029C1 895624 mov [esi+36], edx 4265 000029C4 8B4628 mov eax, [esi+40] ; @@BF 10,11,-,COS4_0,1 4266 000029C7 8B562C mov edx, [esi+44] 4267 000029CA 015628 add [esi+40], edx 4268 000029CD 29D0 sub eax, edx 4269 000029CF D1E0 shl eax, 1 4270 000029D1 BA66867DA5 mov edx, 0A57D8666h 4271 000029D6 F7EA imul edx 4272 000029D8 89562C mov [esi+44], edx 4273 000029DB 8B462C mov eax, [esi+44] ; @@ADD 10,11 4274 000029DE 014628 add [esi+40], eax 4275 000029E1 8B4630 mov eax, [esi+48] ; @@BF2 12,13,14,15 4276 000029E4 8B5634 mov edx, [esi+52] ; @@BF 12,13,+,COS4_0,1 4277 000029E7 015630 add [esi+48], edx 4278 000029EA 29D0 sub eax, edx 4279 000029EC D1E0 shl eax, 1 4280 000029EE BA9A79825A mov edx, 5A82799Ah 4281 000029F3 F7EA imul edx 4282 000029F5 895634 mov [esi+52], edx 4283 000029F8 8B4638 mov eax, [esi+56] ; @@BF 14,15,-,COS4_0,1 4284 000029FB 8B563C mov edx, [esi+60] 4285 000029FE 015638 add [esi+56], edx 4286 00002A01 29D0 sub eax, edx 4287 00002A03 D1E0 shl eax, 1 4288 00002A05 BA66867DA5 mov edx, 0A57D8666h 4289 00002A0A F7EA imul edx 4290 00002A0C 89563C mov [esi+60], edx 4291 00002A0F 8B463C mov eax, [esi+60] ; @@ADD 14,15 4292 00002A12 014638 add [esi+56], eax 4293 00002A15 8B4638 mov eax, [esi+56] ; @@ADD 12,14 4294 00002A18 014630 add [esi+48], eax 4295 00002A1B 8B4634 mov eax, [esi+52] ; @@ADD 14,13 4296 00002A1E 014638 add [esi+56], eax 4297 00002A21 8B463C mov eax, [esi+60] ; @@ADD 13,15 4298 00002A24 014634 add [esi+52], eax ; ENDIF 4299 00002A27 8B4640 mov eax, [esi+64] ; @@BF1 16,17,18,19 4300 00002A2A 8B5644 mov edx, [esi+68] 4301 00002A2D 015640 add [esi+64], edx 4302 00002A30 29D0 sub eax, edx 4303 00002A32 D1E0 shl eax, 1 4304 00002A34 BA9A79825A mov edx, 5A82799Ah ; +COS4_0 4305 00002A39 F7EA imul edx 4306 00002A3B 895644 mov [esi+68], edx 4307 00002A3E 8B4648 mov eax, [esi+72] 4308 00002A41 8B564C mov edx, [esi+76] 4309 00002A44 015648 add [esi+72], edx 4310 00002A47 29D0 sub eax, edx 4311 00002A49 D1E0 shl eax, 1 4312 00002A4B BA66867DA5 mov edx, 0A57D8666h ; -COS4_0 4313 00002A50 F7EA imul edx 4314 00002A52 89564C mov [esi+76], edx 4315 00002A55 8B464C mov eax, [esi+76] ; @@ADD 18,19 4316 00002A58 014648 add [esi+72], eax 4317 00002A5B 8B4650 mov eax, [esi+80] ; @@BF2 20,21,22,23 4318 00002A5E 8B5654 mov edx, [esi+84] 4319 00002A61 015650 add [esi+80], edx 4320 00002A64 29D0 sub eax, edx 4321 00002A66 D1E0 shl eax, 1 4322 00002A68 BA9A79825A mov edx, 5A82799Ah 4323 00002A6D F7EA imul edx 4324 00002A6F 895654 mov [esi+84], edx 4325 00002A72 8B4658 mov eax, [esi+88] 4326 00002A75 8B565C mov edx, [esi+92] 4327 00002A78 015658 add [esi+88], edx 4328 00002A7B 29D0 sub eax, edx 4329 00002A7D D1E0 shl eax, 1 4330 00002A7F BA66867DA5 mov edx, 0A57D8666h 4331 00002A84 F7EA imul edx 4332 00002A86 89565C mov [esi+92], edx 4333 00002A89 8B465C mov eax, [esi+92] ; @@ADD 22,23 4334 00002A8C 014658 add [esi+88], eax 4335 00002A8F 8B4658 mov eax, [esi+88] ; @@ADD 20,22 4336 00002A92 014650 add [esi+80], eax 4337 00002A95 8B4654 mov eax, [esi+84] 4338 00002A98 014658 add [esi+88], eax 4339 00002A9B 8B465C mov eax, [esi+92] 4340 00002A9E 014654 add [esi+84], eax 4341 00002AA1 8B4660 mov eax, [esi+96] ; @@BF1 24,25,26,27 4342 00002AA4 8B5664 mov edx, [esi+100] 4343 00002AA7 015660 add [esi+96], edx 4344 00002AAA 29D0 sub eax, edx 4345 00002AAC D1E0 shl eax, 1 4346 00002AAE BA9A79825A mov edx, 5A82799Ah 4347 00002AB3 F7EA imul edx 4348 00002AB5 895664 mov [esi+100], edx 4349 00002AB8 8B4668 mov eax, [esi+104] 4350 00002ABB 8B566C mov edx, [esi+108] 4351 00002ABE 015668 add [esi+104], edx 4352 00002AC1 29D0 sub eax, edx 4353 00002AC3 D1E0 shl eax, 1 4354 00002AC5 BA66867DA5 mov edx, 0A57D8666h 4355 00002ACA F7EA imul edx 4356 00002ACC 89566C mov [esi+108], edx 4357 00002ACF 8B466C mov eax, [esi+108] 4358 00002AD2 014668 add [esi+104], eax 4359 00002AD5 8B4670 mov eax, [esi+112] ; @@BF2 28,29,30,31 4360 00002AD8 8B5674 mov edx, [esi+116] 4361 00002ADB 015670 add [esi+112], edx 4362 00002ADE 29D0 sub eax, edx 4363 00002AE0 D1E0 shl eax, 1 4364 00002AE2 BA9A79825A mov edx, 5A82799Ah 4365 00002AE7 F7EA imul edx 4366 00002AE9 895674 mov [esi+116], edx 4367 00002AEC 8B4678 mov eax, [esi+120] 4368 00002AEF 8B567C mov edx, [esi+124] 4369 00002AF2 015678 add [esi+120], edx 4370 00002AF5 29D0 sub eax, edx 4371 00002AF7 D1E0 shl eax, 1 4372 00002AF9 BA66867DA5 mov edx, 0A57D8666h 4373 00002AFE F7EA imul edx 4374 00002B00 89567C mov [esi+124], edx 4375 00002B03 8B467C mov eax, [esi+124] 4376 00002B06 014678 add [esi+120], eax 4377 00002B09 8B4678 mov eax, [esi+120] 4378 00002B0C 014670 add [esi+112], eax 4379 00002B0F 8B4674 mov eax, [esi+116] 4380 00002B12 014678 add [esi+120], eax 4381 00002B15 8B467C mov eax, [esi+124] 4382 00002B18 014674 add [esi+116], eax 4383 00002B1B 8B06 mov eax, [esi] ; @@OUT macro dst,src1,src2 4384 ; IF ((dst AND ((1 SHL rate_shift)-1)) EQ 0) 4385 ; mov eax,dword ptr [esi+src1*4] 4386 ; IFDIFI ,<-> 4387 ; add eax,dword ptr [esi+src2*4] 4388 ; ENDIF 4389 ; IF SYNTH32 4390 ; mov dword ptr [edi+dst*4],eax 4391 ; IF (LONG_WINDOW EQ 0) 4392 ; mov dword ptr [edi+dst*4+512*4],eax 4393 ; ENDIF 4394 ; ELSE 4395 ; ...... 4396 ; ENDIF 4397 ; @@OUT 0,0,- 4398 00002B1D 8907 mov [edi], eax ; mov dword ptr [edi+dst*4],eax 4399 00002B1F 8B4604 mov eax, [esi+4] ; @@OUT 16,1, - 4400 ; mov eax,dword ptr [esi+src1*4] 4401 00002B22 894740 mov [edi+64], eax ; mov dword ptr [edi+dst*4],eax 4402 00002B25 8B4608 mov eax, [esi+8] ; @@OUT 8,2,- 4403 00002B28 894720 mov [edi+32], eax 4404 00002B2B 8B460C mov eax, [esi+12] ; @@OUT 24,3,- 4405 00002B2E 894760 mov [edi+96], eax 4406 00002B31 8B4610 mov eax, [esi+16] ; @@OUT 4,4,- 4407 00002B34 894710 mov [edi+16], eax 4408 00002B37 8B4614 mov eax, [esi+20] ; @@OUT 20,5,- 4409 00002B3A 894750 mov [edi+80], eax 4410 00002B3D 8B4618 mov eax, [esi+24] ; @@OUT 12,6,- 4411 00002B40 894730 mov [edi+48], eax 4412 00002B43 8B461C mov eax, [esi+28] ; @@OUT 28,7,- 4413 00002B46 894770 mov [edi+112], eax 4414 00002B49 8B4620 mov eax, [esi+32] ; @@OUT 2,8,12 4415 00002B4C 034630 add eax, [esi+48] ; add eax,dword ptr [esi+src2*4] 4416 00002B4F 894708 mov [edi+8], eax 4417 00002B52 8B4624 mov eax, [esi+36] ; @@OUT 18,9,13 4418 00002B55 034634 add eax, [esi+52] ; add eax,dword ptr [esi+src2*4] 4419 00002B58 894748 mov [edi+72], eax 4420 00002B5B 8B4628 mov eax, [esi+40] ; @@OUT 10,10,14 4421 00002B5E 034638 add eax, [esi+56] 4422 00002B61 894728 mov [edi+40], eax 4423 00002B64 8B462C mov eax, [esi+44] ; @@OUT 26,11,15 4424 00002B67 03463C add eax, [esi+60] 4425 00002B6A 894768 mov [edi+104], eax 4426 00002B6D 8B4630 mov eax, [esi+48] ; @@OUT 6,12,10 4427 00002B70 034628 add eax, [esi+40] 4428 00002B73 894718 mov [edi+24], eax 4429 00002B76 8B4634 mov eax, [esi+52] ; @@OUT 22,13,11 4430 00002B79 03462C add eax, [esi+44] 4431 00002B7C 894758 mov [edi+88], eax 4432 00002B7F 8B4638 mov eax, [esi+56] ; @@OUT 14,14,9 4433 00002B82 034624 add eax, [esi+36] 4434 00002B85 894738 mov [edi+56], eax 4435 00002B88 8B463C mov eax, [esi+60] ; @@OUT 30,15,- 4436 00002B8B 894778 mov [edi+120], eax 4437 00002B8E 8B4670 mov eax, [esi+112] ; @@ADD 24,28 4438 00002B91 014660 add [esi+96], eax 4439 00002B94 8B4668 mov eax, [esi+104] ; @@ADD 28,26 4440 00002B97 014670 add [esi+112], eax 4441 00002B9A 8B4678 mov eax, [esi+120] ; @@ADD 26,30 4442 00002B9D 014668 add [esi+104], eax 4443 00002BA0 8B4664 mov eax, [esi+100] ; @@ADD 30,25 4444 00002BA3 014678 add [esi+120], eax 4445 00002BA6 8B4674 mov eax, [esi+116] ; @@ADD 25,29 4446 00002BA9 014664 add [esi+100], eax 4447 00002BAC 8B466C mov eax, [esi+108] ; @@ADD 29,27 4448 00002BAF 014674 add [esi+116], eax 4449 00002BB2 8B467C mov eax, [esi+124] ; @@ADD 27,31 4450 00002BB5 01466C add [esi+108], eax 4451 00002BB8 8B4640 mov eax, [esi+64] ; @@OUT 1,16,24 4452 00002BBB 034660 add eax, [esi+96] 4453 00002BBE 894704 mov [edi+4], eax 4454 00002BC1 8B4644 mov eax, [esi+68] ; @@OUT 17,17,25 4455 00002BC4 034664 add eax, [esi+100] 4456 00002BC7 894744 mov [edi+68], eax 4457 00002BCA 8B4648 mov eax, [esi+72] ; @@OUT 9,18,26 4458 00002BCD 034668 add eax, [esi+104] 4459 00002BD0 894724 mov [edi+36], eax 4460 00002BD3 8B464C mov eax, [esi+76] ; @@OUT 25,19,27 4461 00002BD6 03466C add eax, [esi+108] 4462 00002BD9 894764 mov [edi+100], eax 4463 00002BDC 8B4650 mov eax, [esi+80] ; @@OUT 5,20,28 4464 00002BDF 034670 add eax, [esi+112] 4465 00002BE2 894714 mov [edi+20], eax 4466 00002BE5 8B4654 mov eax, [esi+84] ; @@OUT 21,21,29 4467 00002BE8 034674 add eax, [esi+116] 4468 00002BEB 894754 mov [edi+84], eax 4469 00002BEE 8B4658 mov eax, [esi+88] ; @@OUT 13,22,30 4470 00002BF1 034678 add eax, [esi+120] 4471 00002BF4 894734 mov [edi+52], eax 4472 00002BF7 8B465C mov eax, [esi+92] ; @@OUT 29,23,31 4473 00002BFA 03467C add eax, [esi+124] 4474 00002BFD 894774 mov [edi+116], eax 4475 00002C00 8B4660 mov eax, [esi+96] ; @@OUT 3,24,20 4476 00002C03 034650 add eax, [esi+80] 4477 00002C06 89470C mov [edi+12], eax 4478 00002C09 8B4664 mov eax, [esi+100] ; @@OUT 19,25,21 4479 00002C0C 034654 add eax, [esi+84] 4480 00002C0F 89474C mov [edi+76], eax 4481 00002C12 8B4668 mov eax, [esi+104] ; @@OUT 11,26,22 4482 00002C15 034658 add eax, [esi+88] 4483 00002C18 89472C mov [edi+44], eax 4484 00002C1B 8B466C mov eax, [esi+108] ; @@OUT 27,27,23 4485 00002C1E 03465C add eax, [esi+92] 4486 00002C21 89476C mov [edi+108], eax 4487 00002C24 8B4670 mov eax, [esi+112] ; @@OUT 7,28,18 4488 00002C27 034648 add eax, [esi+72] 4489 00002C2A 89471C mov [edi+28], eax 4490 00002C2D 8B4674 mov eax, [esi+116] ; @@OUT 23,29,19 4491 00002C30 03464C add eax, [esi+76] 4492 00002C33 89475C mov [edi+92], eax 4493 00002C36 8B4678 mov eax, [esi+120] ; @@OUT 15,30,17 4494 00002C39 034644 add eax, [esi+68] 4495 00002C3C 89473C mov [edi+60], eax 4496 00002C3F 8B467C mov eax, [esi+124] ; @@OUT 31,31,- 4497 00002C42 89477C mov [edi+124], eax 4498 00002C45 C3 retn 4499 4500 4501 ; =============== S U B R O U T I N E ======================================= 4502 4503 ; 15/02/2025 4504 mp3_synth_filter_proc: 4505 ;;;; 4506 synth_16bit_shift_0_slow: 4507 4508 ; 16/02/2025 4509 .no_rdtsc_supported: 4510 00002C46 BE[ECDB0000] mov esi, mp3_sb_samples 4511 00002C4B 8B3D[7C120100] mov edi, [mp3_samples_dst] 4512 00002C51 C705[88120100]0000- mov dword [mp3_curr_channel], 0 4512 00002C59 0000 4513 4514 .synth_channel_lop: 4515 00002C5B 56 push esi 4516 00002C5C 57 push edi 4517 00002C5D 893D[D0BB0000] mov [mp3_curr_syn_dst], edi 4518 00002C63 C705[90120100]0000- mov dword [mp3_curr_frame], 0 4518 00002C6B 0000 4519 4520 .synth_frame_lop: 4521 00002C6D 56 push esi 4522 4523 ; 16/02/2025 4524 .no_rdtsc_supported@: 4525 00002C6E 8B15[88120100] mov edx, [mp3_curr_channel] 4526 00002C74 8B0495[E4DB0000] mov eax, [mp3_synth_index+edx*4] 4527 00002C7B 832C95[E4DB0000]20 sub dword [mp3_synth_index+edx*4], 32 4528 00002C83 C1E20A shl edx, 10 ; channel*1024 4529 00002C86 25E0010000 and eax, 1E0h ; 1FFh-1Fh 4530 00002C8B 09D0 or eax, edx 4531 00002C8D A3[CCBB0000] mov [mp3_curr_syn_index], eax 4532 00002C92 8B3D[CCBB0000] mov edi, [mp3_curr_syn_index] 4533 00002C98 8D3CBD[E4BB0000] lea edi, [mp3_synth_buf+edi*4] 4534 00002C9F E8C2F6FFFF call mp3_dct32_shift_0 ; mp3_dct32_shift_&rate_shift 4535 4536 ; 16/02/2025 4537 .no_rdtsc_supported@@: 4538 4539 ; 16/02/2025 4540 .no_rdtsc_supported@@@: 4541 00002CA4 E84A000000 call mp3_synth_filter_this_16bit_shift_0_slow 4542 4543 ; 16/02/2025 4544 .no_rdtsc_supported@@@@: 4545 00002CA9 5E pop esi 4546 00002CAA A1[84120100] mov eax, [mp3_samples_dst_step] 4547 00002CAF C1E005 shl eax, 5 4548 ; 15/02/2025 4549 00002CB2 0105[D0BB0000] add [mp3_curr_syn_dst], eax 4550 00002CB8 81C680000000 add esi, 128 ; SBLIMIT*4 4551 00002CBE FF05[90120100] inc dword [mp3_curr_frame] 4552 00002CC4 A1[90120100] mov eax, [mp3_curr_frame] 4553 00002CC9 3B05[D4BB0000] cmp eax, [mp3_nb_frames] 4554 00002CCF 729C jb .synth_frame_lop 4555 00002CD1 5F pop edi 4556 00002CD2 5E pop esi 4557 ;add edi, [mp3_bytes_per_sample] 4558 ; 17/02/2025 4559 ;add edi, 2 ; [mp3_bytes_per_sample] = 2 4560 00002CD3 47 inc edi 4561 00002CD4 47 inc edi 4562 00002CD5 81C600120000 add esi, 4608 ; 36*SBLIMIT*4 4563 00002CDB FF05[88120100] inc dword [mp3_curr_channel] 4564 00002CE1 A1[88120100] mov eax, [mp3_curr_channel] 4565 ; 16/02/2025 4566 00002CE6 3B05[C8BB0000] cmp eax, [mp3_num_channels] 4567 00002CEC 0F8269FFFFFF jb .synth_channel_lop 4568 4569 ; 16/02/2025 4570 .no_rdtsc_supported@@@@@: 4571 00002CF2 C3 retn 4572 4573 4574 ; =============== S U B R O U T I N E ======================================= 4575 4576 4577 mp3_synth_filter_this_16bit_shift_0_slow: 4578 00002CF3 A1[CCBB0000] mov eax, [mp3_curr_syn_index] 4579 00002CF8 A9E0010000 test eax, 1E0h ; 1FFh-1Fh 4580 00002CFD 0F847C010000 jz .append_copy_to_window 4581 00002D03 90 nop 4582 4583 .append_copy_to_window_back: 4584 00002D04 89C5 mov ebp, eax ; mov @@win1,eax 4585 00002D06 81E5C0010000 and ebp, 1C0h ; and @@win1,1FFh-1Fh-20h 4586 00002D0C 2520040000 and eax, 420h ; and eax,20h+(1 shl 10) ; bit5, and channel 4587 00002D11 8D7010 lea esi, [eax+10h] ; lea @@syn1,[eax+10h] 4588 00002D14 8D7830 lea edi, [eax+30h] ; lea @@syn2,[eax+30h] 4589 00002D17 F7DD neg ebp 4590 00002D19 81E5C0010000 and ebp, 1C0h ; and @@win1,1FFh-1Fh-20h 4591 00002D1F 8B0D[D0BB0000] mov ecx, [mp3_curr_syn_dst] 4592 4593 .samples_lop: 4594 00002D25 BB10001000 mov ebx, 100010h ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1)) 4595 ; @@out_shift = 5 4596 4597 .SUM8_@: ; @@SUM8 macro sum,win,ww,syn 4598 00002D2A 8B14B5[E4BB0000] mov edx, [mp3_synth_buf+esi*4] ; IRP nn,0,1,2,3,4,5,6,7 4599 ; @@SUM8 @@sum,@@win1,0, @@syn1 4600 00002D31 8B04AD[980D0500] mov eax, [mp3_synth_win+ebp*4] ; [mp3_synth_buf+syn*4+(nn*64*4)] 4601 00002D38 F7EA imul edx ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] 4602 00002D3A 01D3 add ebx, edx 4603 00002D3C 8B14B5[E4BC0000] mov edx, [(mp3_synth_buf+100h)+esi*4] 4604 00002D43 8B04AD[980E0500] mov eax, [(mp3_synth_win+100h)+ebp*4] 4605 00002D4A F7EA imul edx 4606 00002D4C 01D3 add ebx, edx ; add sum,edx 4607 00002D4E 8B14B5[E4BD0000] mov edx, [(mp3_synth_buf+200h)+esi*4] 4608 00002D55 8B04AD[980F0500] mov eax, [(mp3_synth_win+200h)+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] 4609 00002D5C F7EA imul edx ; 64bit = 32bit * 32bit 4610 00002D5E 01D3 add ebx, edx 4611 00002D60 8B14B5[E4BE0000] mov edx, [(mp3_synth_buf+300h)+esi*4] 4612 00002D67 8B04AD[98100500] mov eax, [(mp3_synth_win+300h)+ebp*4] 4613 00002D6E F7EA imul edx 4614 00002D70 01D3 add ebx, edx 4615 00002D72 8B14B5[E4BF0000] mov edx, [(mp3_synth_buf+400h)+esi*4] 4616 00002D79 8B04AD[98110500] mov eax, [(mp3_synth_win+400h)+ebp*4] 4617 00002D80 F7EA imul edx 4618 00002D82 01D3 add ebx, edx 4619 00002D84 8B14B5[E4C00000] mov edx, [(mp3_synth_buf+500h)+esi*4] 4620 00002D8B 8B04AD[98120500] mov eax, [(mp3_synth_win+500h)+ebp*4] 4621 00002D92 F7EA imul edx 4622 00002D94 01D3 add ebx, edx 4623 00002D96 8B14B5[E4C10000] mov edx, [(mp3_synth_buf+600h)+esi*4] 4624 00002D9D 8B04AD[98130500] mov eax, [(mp3_synth_win+600h)+ebp*4] 4625 00002DA4 F7EA imul edx 4626 00002DA6 01D3 add ebx, edx 4627 00002DA8 8B14B5[E4C20000] mov edx, [(mp3_synth_buf+700h)+esi*4] 4628 00002DAF 8B04AD[98140500] mov eax, [(mp3_synth_win+700h)+ebp*4] 4629 00002DB6 F7EA imul edx 4630 00002DB8 01D3 add ebx, edx 4631 4632 .skippp: ; @@SUM8 macro sum,win,ww,syn 4633 00002DBA 8B14BD[E4BB0000] mov edx, [mp3_synth_buf+edi*4] ; @@SUM8 @@sum,@@win1,32,@@syn2 4634 ; [mp3_synth_buf+syn*4+(nn*64*4)] 4635 00002DC1 8B04AD[180E0500] mov eax, [(mp3_synth_win+80h)+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] 4636 00002DC8 F7EA imul edx 4637 00002DCA 01D3 add ebx, edx 4638 00002DCC 8B14BD[E4BC0000] mov edx, [(mp3_synth_buf+100h)+edi*4] 4639 00002DD3 8B04AD[180F0500] mov eax, [(mp3_synth_win+180h)+ebp*4] 4640 00002DDA F7EA imul edx 4641 00002DDC 01D3 add ebx, edx 4642 00002DDE 8B14BD[E4BD0000] mov edx, [(mp3_synth_buf+200h)+edi*4] 4643 00002DE5 8B04AD[18100500] mov eax, [(mp3_synth_win+280h)+ebp*4] 4644 00002DEC F7EA imul edx 4645 00002DEE 01D3 add ebx, edx 4646 00002DF0 8B14BD[E4BE0000] mov edx, [(mp3_synth_buf+300h)+edi*4] 4647 00002DF7 8B04AD[18110500] mov eax, [(mp3_synth_win+380h)+ebp*4] 4648 00002DFE F7EA imul edx 4649 00002E00 01D3 add ebx, edx 4650 00002E02 8B14BD[E4BF0000] mov edx, [(mp3_synth_buf+400h)+edi*4] 4651 00002E09 8B04AD[18120500] mov eax, [(mp3_synth_win+480h)+ebp*4] 4652 00002E10 F7EA imul edx 4653 00002E12 01D3 add ebx, edx 4654 00002E14 8B14BD[E4C00000] mov edx, [(mp3_synth_buf+500h)+edi*4] 4655 00002E1B 8B04AD[18130500] mov eax, [(mp3_synth_win+580h)+ebp*4] 4656 00002E22 F7EA imul edx 4657 00002E24 01D3 add ebx, edx 4658 00002E26 8B14BD[E4C10000] mov edx, [(mp3_synth_buf+600h)+edi*4] 4659 00002E2D 8B04AD[18140500] mov eax, [(mp3_synth_win+680h)+ebp*4] 4660 00002E34 F7EA imul edx 4661 00002E36 01D3 add ebx, edx 4662 00002E38 8B14BD[E4C20000] mov edx, [(mp3_synth_buf+700h)+edi*4] 4663 00002E3F 8B04AD[18150500] mov eax, [(mp3_synth_win+780h)+ebp*4] 4664 00002E46 F7EA imul edx 4665 00002E48 01D3 add ebx, edx 4666 00002E4A 81FB00002000 cmp ebx, 200000h ; cmp @@sum,10000h SHL (@@out_shift) 4667 00002E50 7322 jnb short .sat 4668 00002E52 C1FB05 sar ebx, 5 ; sar @@sum,(@@out_shift) 4669 00002E55 81EB00800000 sub ebx, 8000h ; make 16bit signed 4670 4671 .sat_back: 4672 00002E5B 668919 mov [ecx], bx 4673 00002E5E 030D[84120100] add ecx, [mp3_samples_dst_step] 4674 00002E64 46 inc esi ; inc @@syn1 4675 00002E65 4F dec edi ; dec @@syn2 4676 00002E66 45 inc ebp ; inc @@win1 4677 00002E67 F7C51F000000 test ebp, 1Fh ; test @@win1,1Fh 4678 00002E6D 0F85B2FEFFFF jnz .samples_lop 4679 00002E73 C3 retn 4680 4681 .sat: 4682 00002E74 C1FB1F sar ebx, 31 ; FFFFFFFFh,00000000h 4683 00002E77 81F3FF7F0000 xor ebx, 7FFFh ; FFFF8000h,00007FFFh (signed 16bit) 4684 00002E7D EBDC jmp short .sat_back 4685 4686 .append_copy_to_window: 4687 00002E7F 8D3485[E4BB0000] lea esi, [mp3_synth_buf+eax*4] 4688 00002E86 8DBE00080000 lea edi, [esi+2048] ; [esi+512*4] 4689 00002E8C B912000000 mov ecx, 18 ; (12h*4)/4 4690 00002E91 F3A5 rep movsd 4691 00002E93 E96CFEFFFF jmp .append_copy_to_window_back 4692 4693 4694 ; =============== S U B R O U T I N E ======================================= 4695 4696 4697 mp3_any_init_synth_window: 4698 00002E98 31D2 xor edx, edx ; index (0..100h) 4699 00002E9A 31C9 xor ecx, ecx ; delta.val 4700 00002E9C 898C12[980D0500] mov [mp3_synth_win+edx*2], ecx 4701 4702 .synth_lop: 4703 00002EA3 0FBF9C12[E2950000] movsx ebx, word [mp3_synth_win_src+edx*2] 4704 00002EAB 01D9 add ecx, ebx 4705 00002EAD 89C8 mov eax, ecx 4706 4707 ; 15/02/2025 4708 00002EAF C1E00E shl eax, 14 ; (WFRAC_BITS_slow-WFRAC_BITS_default) 4709 4710 00002EB2 42 inc edx ; index (1..100h) 4711 00002EB3 BB00020000 mov ebx, 200h 4712 00002EB8 29D3 sub ebx, edx ; 1FFh..100h 4713 00002EBA 89049D[980D0500] mov [mp3_synth_win+ebx*4], eax 4714 00002EC1 F7C23F000000 test edx, 3Fh 4715 00002EC7 7402 jz short .synth_keep_sign 4716 00002EC9 F7D8 neg eax 4717 4718 .synth_keep_sign: 4719 00002ECB 890495[980D0500] mov [mp3_synth_win+edx*4], eax 4720 00002ED2 81FA00010000 cmp edx, 100h 4721 00002ED8 72C9 jb short .synth_lop 4722 00002EDA 31D2 xor edx, edx 4723 4724 .synth_neg_lop: 4725 00002EDC F7C230000000 test edx, 30h ; skip 0..0Fh (only negate 10h..3Fh) 4726 00002EE2 7407 jz short .synth_neg_next 4727 00002EE4 F71C95[980D0500] neg dword [mp3_synth_win+edx*4] 4728 4729 .synth_neg_next: 4730 00002EEB 42 inc edx 4731 00002EEC 81FA00020000 cmp edx, 200h 4732 00002EF2 72E8 jb short .synth_neg_lop 4733 00002EF4 31D2 xor edx, edx 4734 4735 .synth_swap_lop: 4736 00002EF6 89D0 mov eax, edx 4737 00002EF8 83E03F and eax, 3Fh 4738 00002EFB 83E811 sub eax, 17 ; swap win [(17..31)] with win[(17..31)+32) 4739 00002EFE 83F80E cmp eax, 14 ; 31-17 4740 00002F01 7715 ja short .synth_swap_next 4741 00002F03 8B0495[980D0500] mov eax, [mp3_synth_win+edx*4] 4742 00002F0A 870495[180E0500] xchg eax, [(mp3_synth_win+80h)+edx*4] 4743 00002F11 890495[980D0500] mov [mp3_synth_win+edx*4], eax 4744 4745 .synth_swap_next: 4746 00002F18 42 inc edx 4747 00002F19 81FA00020000 cmp edx, 200h 4748 00002F1F 72D5 jb short .synth_swap_lop 4749 00002F21 31D2 xor edx, edx 4750 4751 .synth_zero_lop: 4752 00002F23 C70495[D80D0500]00- mov dword [(mp3_synth_win+40h)+edx*4], 0 4752 00002F2B 000000 4753 00002F2E 83C240 add edx, 40h 4754 00002F31 81FA00020000 cmp edx, 200h 4755 00002F37 72EA jb short .synth_zero_lop 4756 00002F39 BE[980D0500] mov esi, mp3_synth_win 4757 00002F3E 8DBE00080000 lea edi, [esi+2048] ; [esi+512*4] 4758 00002F44 B900020000 mov ecx, 512 ; append another copy 4759 00002F49 F3A5 rep movsd 4760 00002F4B C3 retn 4761 4762 4763 ; =============== S U B R O U T I N E ======================================= 4764 4765 4766 mp3_any_init_band_indices: 4767 00002F4C BE[149E0000] mov esi, mp3_band_size_long 4768 00002F51 BF[ACF50100] mov edi, mp3_band_index_long 4769 00002F56 BB09000000 mov ebx, 9 4770 4771 .band_index_lop_i: 4772 00002F5B 31C0 xor eax, eax 4773 00002F5D B916000000 mov ecx, 22 4774 4775 .band_index_lop_j: 4776 00002F62 66AB stosw 4777 00002F64 0FB616 movzx edx, byte [esi] 4778 00002F67 01D0 add eax, edx 4779 00002F69 46 inc esi 4780 00002F6A E2F6 loop .band_index_lop_j 4781 00002F6C 83C10A add ecx, 10 4782 00002F6F F366AB rep stosw 4783 00002F72 4B dec ebx 4784 00002F73 75E6 jnz short .band_index_lop_i 4785 00002F75 C3 retn 4786 4787 4788 ; =============== S U B R O U T I N E ======================================= 4789 4790 4791 mp3_any_init_lsf_sf_expand: 4792 00002F76 BE[B2950000] mov esi, mp3_lsf_sf_expand_init_table 4793 00002F7B BF[981D0500] mov edi, mp3_lsf_sf_expand_exploded_table 4794 00002F80 31D2 xor edx, edx ; curr.index 4795 00002F82 31DB xor ebx, ebx ; curr.base 4796 4797 .lop: 4798 00002F84 663B5606 cmp dx, [esi+6] ; nextbase 4799 00002F88 7207 jb short .inrange 4800 00002F8A 668B5E06 mov bx, [esi+6] 4801 00002F8E 83C608 add esi, 8 ; next entry 4802 4803 .inrange: 4804 00002F91 89D0 mov eax, edx 4805 00002F93 29D8 sub eax, ebx 4806 00002F95 8A0E mov cl, [esi] 4807 00002F97 D3E8 shr eax, cl ; div2 4808 00002F99 F67603 div byte [esi+3] ; mod3 ; [2]=slen[3] 4809 00002F9C 886703 mov [edi+3], ah 4810 00002F9F B400 mov ah, 0 ; eax=div.result 4811 00002FA1 F67602 div byte [esi+2] ; mod2 ; [2]=slen[2] 4812 00002FA4 886702 mov [edi+2], ah ; remainder 4813 00002FA7 B400 mov ah, 0 4814 00002FA9 F67601 div byte [esi+1] ; mod1 ; [1]=slen[1] 4815 00002FAC 668907 mov [edi], ax ; [0]=slen[0] 4816 00002FAF 668B4604 mov ax, [esi+4] ; [4]=tindex2 4817 00002FB3 66894704 mov [edi+4], ax ; [5]=force_preflag 4818 00002FB7 83C708 add edi, 8 4819 00002FBA 42 inc edx ; curr.index ; next 4820 00002FBB 81FA00040000 cmp edx, 1024 ; 512+512 4821 00002FC1 72C1 jb short .lop 4822 00002FC3 C3 retn 4823 4824 4825 ; =============== S U B R O U T I N E ======================================= 4826 4827 4828 mp3_any_init_huff_tables: 4829 00002FC4 BD[4C980000] mov ebp, huff_tree_list_data 4830 00002FC9 BE[3AA20000] mov esi, huff_tree_list_numbits 4831 00002FCE BA01000000 mov edx, 1 ; idx (table 01h..11h) 4832 4833 .huffman_table_lop: 4834 00002FD3 31C0 xor eax, eax 4835 00002FD5 BF[C4470500] mov edi, mp3_huff_tmp_bits 4836 00002FDA B940000000 mov ecx, 40h ; 100h/4 ; 100h x 8bit 4837 00002FDF F3AB rep stosd 4838 00002FE1 BF[C4480500] mov edi, mp3_huff_tmp_codes 4839 00002FE6 B980000000 mov ecx, 80h ; 100h/2 ; 100h x 16bit 4840 00002FEB F3AB rep stosd 4841 00002FED 31DB xor ebx, ebx 4842 4843 .huff_entry_lop: 4844 00002FEF 0FB67D00 movzx edi, byte [ebp+0] 4845 00002FF3 45 inc ebp ; dst=data 4846 00002FF4 AC lodsb ; numbits 4847 00002FF5 8887[C4470500] mov [mp3_huff_tmp_bits+edi], al 4848 00002FFB B120 mov cl, 32 4849 00002FFD 28C1 sub cl, al ; 32-numbits 4850 00002FFF D3EB shr ebx, cl 4851 00003001 66899C3F[C4480500] mov word [mp3_huff_tmp_codes+edi*2], bx 4852 00003009 43 inc ebx ; next.code 4853 0000300A D3E3 shl ebx, cl ; shift back to MSBs 4854 0000300C 75E1 jnz short .huff_entry_lop 4855 0000300E 60 pusha 4856 0000300F B800010000 mov eax, 100h ; nb_codes 4857 00003014 BB[C4470500] mov ebx, mp3_huff_tmp_bits ; bits 4858 00003019 BE[C4480500] mov esi, mp3_huff_tmp_codes ; codes 4859 0000301E E82C020000 call mp3_build_huff_table_root ; make table 4860 00003023 61 popa 4861 00003024 42 inc edx ; idx 4862 00003025 83FA12 cmp edx, 12h 4863 00003028 75A9 jnz short .huffman_table_lop ; next table 4864 0000302A C3 retn 4865 4866 4867 ; =============== S U B R O U T I N E ======================================= 4868 4869 4870 mp3_integer_init_is_stereo_lsf: 4871 0000302B 31FF xor edi, edi 4872 4873 .lsf_lop: 4874 0000302D 89FE mov esi, edi 4875 0000302F 83E63F and esi, 3Fh 4876 00003032 46 inc esi 4877 00003033 D1EE shr esi, 1 4878 00003035 F7C740000000 test edi, 40h 4879 0000303B 7402 jz short .lsf_no_shift 4880 0000303D D1E6 shl esi, 1 4881 4882 .lsf_no_shift: 4883 0000303F BA00000040 mov edx, 40000000h ; aka mul 1.000 4884 00003044 83C604 add esi, 4 4885 00003047 F7C780000000 test edi, 80h ; 2*40h 4886 0000304D 7408 jz short .no_ms_stereo 4887 0000304F BA9A79825A mov edx, 5A82799Ah ; 2D413CCDh*2 ; aka mul 1.414 4888 00003054 83EE02 sub esi, 2 4889 4890 .no_ms_stereo: 4891 00003057 89F1 mov ecx, esi 4892 00003059 C1E902 shr ecx, 2 ; msbs 4893 0000305C 83E603 and esi, 3 ; lsbs 4894 0000305F 8B04B5[0CA20000] mov eax, [mp3_is_table_lsf_src+esi*4] 4895 00003066 D3E8 shr eax, cl 4896 00003068 F7C701000000 test edi, 1 4897 0000306E 7501 jnz short .lsf_no_swap 4898 00003070 92 xchg eax, edx 4899 4900 .lsf_no_swap: 4901 00003071 8904FD[98050500] mov [mp3_is_table_lsf+edi*8], eax 4902 00003078 8914FD[9C050500] mov [(mp3_is_table_lsf+4)+edi*8], edx 4903 0000307F 47 inc edi 4904 00003080 81FF00010000 cmp edi, 100h 4905 00003086 72A5 jb short .lsf_lop 4906 00003088 C3 retn 4907 4908 4909 ; =============== S U B R O U T I N E ======================================= 4910 4911 4912 mp3_integer_init_mdct_windows: 4913 00003089 BF[18010500] mov edi, mp3_mdct_win 4914 0000308E BE[949F0000] mov esi, mp3_mdct_win_src 4915 00003093 B990000000 mov ecx, 144 ; 36*4 4916 00003098 F3A5 rep movsd 4917 0000309A BE[18010500] mov esi, mp3_mdct_win 4918 0000309F BF[58030500] mov edi, (mp3_mdct_win+240h) 4919 000030A4 B948000000 mov ecx, 72 ; 4*36/2 ; that is, 4*36 entry pairs 4920 4921 .mdct_lop_dupe: 4922 000030A9 A5 movsd ; copy normal, [4..7][even] = +[0..3][even 4923 000030AA AD lodsd 4924 000030AB F7D8 neg eax ; copy negated, [4..7][odd] = -[0..3][odd] 4925 000030AD AB stosd 4926 000030AE E2F9 loop .mdct_lop_dupe 4927 000030B0 C3 retn 4928 4929 4930 ; =============== S U B R O U T I N E ======================================= 4931 4932 4933 mp3_integer_init_table_4_3: 4934 ; 15/02/2025 4935 000030B1 B048 mov al, 72 ; 100-6-VFRAC_BITS_slow 4936 .this_vfrac: 4937 000030B3 A2[F0110100] mov [mp3_curr_vfrac_bits], al 4938 000030B8 31FF xor edi, edi 4939 4940 .table_4_3_lop: 4941 000030BA 57 push edi ; for i=1 to TABLE_4_3_SIZE-1 4942 000030BB 89F8 mov eax, edi 4943 000030BD C1E802 shr eax, 2 4944 000030C0 F7E0 mul eax 4945 000030C2 F7E0 mul eax 4946 000030C4 31DB xor ebx, ebx 4947 000030C6 E8A2000000 call cbrt96 4948 000030CB 020D[F0110100] add cl, [mp3_curr_vfrac_bits] 4949 000030D1 5F pop edi 4950 4951 .inner_lop: 4952 000030D2 89F8 mov eax, edi 4953 000030D4 83E003 and eax, 3 4954 000030D7 8B0485[1CA20000] mov eax, [mp3_pow2_quarters+eax*4] 4955 000030DE F7E3 mul ebx 4956 000030E0 88CD mov ch, cl 4957 000030E2 09D2 or edx, edx 4958 000030E4 7904 jns short .this 4959 000030E6 D1EA shr edx, 1 4960 000030E8 FECD dec ch 4961 4962 .this: 4963 000030EA 8914BD[28780200] mov [mp3_table_4_3_value+edi*4], edx 4964 000030F1 88AF[ECF70100] mov [mp3_table_4_3_exp+edi], ch 4965 000030F7 47 inc edi 4966 000030F8 F7C703000000 test edi, 3 4967 000030FE 75D2 jnz short .inner_lop 4968 00003100 81FF3C800000 cmp edi, 803Ch 4969 00003106 72B2 jb short .table_4_3_lop 4970 00003108 C3 retn 4971 4972 4973 ; =============== S U B R O U T I N E ======================================= 4974 4975 4976 mp3_integer_init_exponent: 4977 00003109 BF[18810400] mov edi, mp3_expval_table 4978 0000310E 31D2 xor edx, edx 4979 4980 .exponent_lop: 4981 00003110 89D0 mov eax, edx ; val=i 4982 00003112 89D3 mov ebx, edx 4983 00003114 89D1 mov ecx, edx 4984 00003116 C1EB04 shr ebx, 4 4985 00003119 C1E906 shr ecx, 6 ; 4+2 4986 0000311C 83E00F and eax, 0Fh ; val=i AND 0Fh 4987 0000311F 83E303 and ebx, 3 4988 00003122 8D1C83 lea ebx, [ebx+eax*4] ; (0..0Fh)*4+(0..3) 4989 00003125 8B049D[28780200] mov eax, [mp3_table_4_3_value+ebx*4] 4990 0000312C 09C0 or eax, eax 4991 0000312E 741A jz short .this 4992 00003130 2A8B[ECF70100] sub cl, [mp3_table_4_3_exp+ebx] 4993 00003136 770D ja short .left_shift 4994 00003138 F6D9 neg cl 4995 0000313A D3E8 shr eax, cl 4996 0000313C 80F91F cmp cl, 1Fh 4997 0000313F 7609 jbe short .this 4998 00003141 31C0 xor eax, eax 4999 00003143 EB05 jmp short .this 5000 5001 .left_shift: 5002 00003145 B8FFFFFF7F mov eax, 7FFFFFFFh 5003 5004 .this: 5005 0000314A AB stosd 5006 0000314B 42 inc edx 5007 0000314C 81FA00200000 cmp edx, 2000h 5008 00003152 72BC jb short .exponent_lop 5009 00003154 BE[18810400] mov esi, mp3_expval_table 5010 00003159 BF[18790400] mov edi, mp3_exp_table 5011 0000315E B900020000 mov ecx, 200h 5012 5013 .exponent_dupe_lop: 5014 00003163 8B4604 mov eax, [esi+4] 5015 00003166 AB stosd 5016 00003167 83C640 add esi, 40h 5017 0000316A E2F7 loop .exponent_dupe_lop 5018 0000316C C3 retn 5019 5020 5021 ; =============== S U B R O U T I N E ======================================= 5022 5023 5024 cbrt96: 5025 0000316D 83EC18 sub esp, 18h ; cube root, val^(1/3), from https://gist.github.com/anonymous/729557 5026 ; in: ebx:edx:eax = unsigned 96bit input (integer) 5027 ; out: ebx = unsigned 32bit result (with fractional bits) 5028 ; out: cl = number of fractional bits 5029 00003170 890424 mov [esp], eax 5030 00003173 89542404 mov [esp+4], edx 5031 00003177 895C2408 mov [esp+8], ebx 5032 0000317B C744240C00000000 mov dword [esp+0Ch], 0 5033 00003183 C744241000000000 mov dword [esp+10h], 0 5034 0000318B C744241400000000 mov dword [esp+14h], 0 5035 00003193 31DB xor ebx, ebx ; result.value 5036 00003195 B100 mov cl, 0 ; result.fraction 5037 00003197 09D0 or eax, edx ; skip if zero 5038 00003199 742F jz short .pre_shift_done 5039 5040 .pre_shift_lop: 5041 0000319B F7442408000000E0 test dword [esp+8], 0E0000000h 5042 000031A3 7525 jnz short .pre_shift_done 5043 000031A5 D12424 shl dword [esp], 1 5044 000031A8 D1542404 rcl dword [esp+4], 1 5045 000031AC D1542408 rcl dword [esp+8], 1 5046 000031B0 D12424 shl dword [esp], 1 5047 000031B3 D1542404 rcl dword [esp+4], 1 5048 000031B7 D1542408 rcl dword [esp+8], 1 5049 000031BB D12424 shl dword [esp], 1 5050 000031BE D1542404 rcl dword [esp+4], 1 5051 000031C2 D1542408 rcl dword [esp+8], 1 5052 000031C6 FEC1 inc cl 5053 000031C8 EBD1 jmp short .pre_shift_lop 5054 5055 .pre_shift_done: 5056 000031CA B520 mov ch, 20h ; loopcount 5057 5058 .lop: 5059 000031CC 01DB add ebx, ebx ; result*2 5060 000031CE 89D8 mov eax, ebx ; y 5061 000031D0 43 inc ebx ; result+1 5062 000031D1 F7E3 mul ebx ; y*(y+1) 5063 000031D3 89C6 mov esi, eax 5064 000031D5 89D7 mov edi, edx 5065 000031D7 31ED xor ebp, ebp 5066 000031D9 F9 stc 5067 000031DA 11F6 adc esi, esi ; y*(y+1)*2+1 5068 000031DC 11FF adc edi, edi 5069 000031DE 11ED adc ebp, ebp 5070 000031E0 01C6 add esi, eax 5071 000031E2 11D7 adc edi, edx ; y*(y+1)*3+1 5072 000031E4 83D500 adc ebp, 0 5073 000031E7 D12424 shl dword [esp], 1 5074 000031EA D1542404 rcl dword [esp+4], 1 5075 000031EE D1542408 rcl dword [esp+8], 1 ; shl 3 5076 000031F2 D154240C rcl dword [esp+0Ch], 1 5077 000031F6 D1542410 rcl dword [esp+10h], 1 5078 000031FA D1542414 rcl dword [esp+14h], 1 5079 000031FE D12424 shl dword [esp], 1 5080 00003201 D1542404 rcl dword [esp+4], 1 5081 00003205 D1542408 rcl dword [esp+8], 1 5082 00003209 D154240C rcl dword [esp+0Ch], 1 5083 0000320D D1542410 rcl dword [esp+10h], 1 5084 00003211 D1542414 rcl dword [esp+14h], 1 5085 00003215 D12424 shl dword [esp], 1 5086 00003218 D1542404 rcl dword [esp+4], 1 5087 0000321C D1542408 rcl dword [esp+8], 1 5088 00003220 D154240C rcl dword [esp+0Ch], 1 5089 00003224 D1542410 rcl dword [esp+10h], 1 5090 00003228 D1542414 rcl dword [esp+14h], 1 5091 0000322C 2974240C sub [esp+0Ch], esi 5092 00003230 197C2410 sbb [esp+10h], edi ; sub/compare 5093 00003234 196C2414 sbb [esp+14h], ebp 5094 00003238 730D jnb short .next 5095 0000323A 4B dec ebx 5096 0000323B 0174240C add [esp+0Ch], esi 5097 0000323F 117C2410 adc [esp+10h], edi ; undo 5098 00003243 116C2414 adc [esp+14h], ebp 5099 5100 .next: 5101 00003247 FECD dec ch 5102 00003249 7581 jnz short .lop 5103 0000324B 83C418 add esp, 18h 5104 mp3_init_log_constants: 5105 0000324E C3 retn 5106 5107 ;mp3_init_log_constants: 5108 ; retn 5109 5110 ; =============== S U B R O U T I N E ======================================= 5111 5112 5113 mp3_build_huff_table_root: 5114 0000324F A3[C84A0500] mov [_@@nb_codes], eax ; "init_vlc" 5115 00003254 C705[CC4A0500]0000- mov dword [_@@prefix_numbits], 0 5115 0000325C 0000 5116 0000325E C705[D04A0500]0000- mov dword [_@@prefix_pattern], 0 5116 00003266 0000 5117 00003268 60 pusha 5118 00003269 89C1 mov ecx, eax 5119 0000326B 31C0 xor eax, eax 5120 5121 .prescan_lop: 5122 0000326D 3A03 cmp al, [ebx] 5123 0000326F 7702 ja short .prescan_next 5124 00003271 8A03 mov al, [ebx] 5125 5126 .prescan_next: 5127 00003273 43 inc ebx 5128 00003274 E2F7 loop .prescan_lop 5129 00003276 3C09 cmp al, 9 ; CHILD_BITS 5130 00003278 7202 jb short .prescan_this_limit 5131 0000327A B009 mov al, 9 5132 5133 .prescan_this_limit: 5134 0000327C A3[C44A0500] mov [_@@table_nb_bits], eax 5135 00003281 61 popa 5136 5137 mp3_build_huff_table_recursive_child: 5138 00003282 8B0D[C44A0500] mov ecx, [_@@table_nb_bits] 5139 00003288 B801000000 mov eax, 1 5140 0000328D D3E0 shl eax, cl 5141 0000328F A3[D44A0500] mov [_@@curr_table_size], eax 5142 00003294 48 dec eax 5143 00003295 A3[D84A0500] mov [_@@curr_table_mask], eax 5144 0000329A 60 pusha 5145 0000329B 8B1D[30A20000] mov ebx, [mp3_huff_num_entries] 5146 000032A1 891D[DC4A0500] mov [_@@curr_table_index], ebx 5147 000032A7 031D[D44A0500] add ebx, [_@@curr_table_size] 5148 000032AD 891D[30A20000] mov [mp3_huff_num_entries], ebx 5149 000032B3 813D[30A20000]002E- cmp dword [mp3_huff_num_entries], 11776 ; HUFF_TREE_SIZE/4 5149 000032BB 0000 5150 000032BD 0F87E6D9FFFF ja fatalunexpected 5151 000032C3 61 popa 5152 000032C4 BF[AC3D0100] mov edi, huff_tree_buf 5153 000032C9 A1[DC4A0500] mov eax, [_@@curr_table_index] 5154 000032CE 66890497 mov [edi+edx*4], ax 5155 000032D2 A1[C44A0500] mov eax, [_@@table_nb_bits] 5156 000032D7 F7D8 neg eax 5157 000032D9 6689449702 mov [edi+edx*4+2], ax 5158 000032DE BF[AC3D0100] mov edi, huff_tree_buf 5159 000032E3 8B15[DC4A0500] mov edx, [_@@curr_table_index] 5160 000032E9 8B0D[D44A0500] mov ecx, [_@@curr_table_size] 5161 5162 .clear_table_lop: 5163 000032EF 66C70497FFFF mov word [edi+edx*4], 0FFFFh 5164 000032F5 66C74497020000 mov word [edi+edx*4+2], 0 5165 000032FC 42 inc edx 5166 000032FD E2F0 loop .clear_table_lop 5167 000032FF 53 push ebx 5168 00003300 56 push esi 5169 00003301 31D2 xor edx, edx 5170 5171 .make_table_lop: 5172 00003303 0FB60B movzx ecx, byte [ebx] 5173 00003306 0FB706 movzx eax, word [esi] 5174 00003309 2B0D[CC4A0500] sub ecx, [_@@prefix_numbits] 5175 0000330F 7E74 jle short .make_table_lop_next 5176 00003311 D3E8 shr eax, cl 5177 00003313 3B05[D04A0500] cmp eax, [_@@prefix_pattern] 5178 00003319 756A jnz short .make_table_lop_next 5179 0000331B BF[AC3D0100] mov edi, huff_tree_buf 5180 00003320 0FB706 movzx eax, word [esi] 5181 00003323 2B0D[C44A0500] sub ecx, [_@@table_nb_bits] 5182 00003329 773E ja short .create_child_table 5183 0000332B F7D9 neg ecx 5184 0000332D D3E0 shl eax, cl 5185 0000332F 2305[D84A0500] and eax, [_@@curr_table_mask] 5186 00003335 0305[DC4A0500] add eax, [_@@curr_table_index] 5187 0000333B 8D3C87 lea edi, [edi+eax*4] 5188 0000333E B801000000 mov eax, 1 5189 00003343 D3E0 shl eax, cl 5190 00003345 89C1 mov ecx, eax 5191 00003347 0FB603 movzx eax, byte [ebx] 5192 0000334A 2B05[CC4A0500] sub eax, [_@@prefix_numbits] 5193 5194 .make_rept_lop: 5195 00003350 66837F0200 cmp word [edi+2], 0 5196 00003355 0F854ED9FFFF jnz fatalunexpected 5197 0000335B 668917 mov [edi], dx 5198 0000335E 66894702 mov [edi+2], ax 5199 00003362 83C704 add edi, 4 5200 00003365 E2E9 loop .make_rept_lop 5201 00003367 EB1C jmp short .make_table_lop_next 5202 5203 .create_child_table: 5204 00003369 D3E8 shr eax, cl 5205 0000336B 2305[D84A0500] and eax, [_@@curr_table_mask] 5206 00003371 0305[DC4A0500] add eax, [_@@curr_table_index] 5207 00003377 F7D9 neg ecx 5208 00003379 66394C8702 cmp [edi+eax*4+2], cx 5209 0000337E 7C05 jl short .make_table_lop_next 5210 00003380 66894C8702 mov [edi+eax*4+2], cx 5211 5212 .make_table_lop_next: 5213 00003385 83C602 add esi, 2 5214 00003388 43 inc ebx 5215 00003389 42 inc edx 5216 0000338A 3B15[C84A0500] cmp edx, [_@@nb_codes] 5217 00003390 0F826DFFFFFF jb .make_table_lop 5218 00003396 5E pop esi 5219 00003397 5B pop ebx 5220 00003398 8B0D[D44A0500] mov ecx, [_@@curr_table_size] 5221 0000339E 8B15[DC4A0500] mov edx, [_@@curr_table_index] 5222 5223 .make_child_tables_lop: 5224 000033A4 BF[AC3D0100] mov edi, huff_tree_buf 5225 000033A9 0FBF449702 movsx eax, word [edi+edx*4+2] 5226 000033AE 83F800 cmp eax, 0 5227 000033B1 796D jns short .make_child_tables_lop_next 5228 000033B3 F7D8 neg eax 5229 000033B5 3B05[C44A0500] cmp eax, [_@@table_nb_bits] 5230 000033BB 7605 jbe short .make_child_tables_this 5231 000033BD A1[C44A0500] mov eax, [_@@table_nb_bits] 5232 5233 .make_child_tables_this: 5234 000033C2 51 push ecx 5235 000033C3 52 push edx 5236 000033C4 FF35[DC4A0500] push dword [_@@curr_table_index] 5237 000033CA FF35[C44A0500] push dword [_@@table_nb_bits] 5238 000033D0 FF35[CC4A0500] push dword [_@@prefix_numbits] 5239 000033D6 FF35[D04A0500] push dword [_@@prefix_pattern] 5240 000033DC 8B0D[C44A0500] mov ecx, [_@@table_nb_bits] 5241 000033E2 A3[C44A0500] mov [_@@table_nb_bits], eax 5242 000033E7 010D[CC4A0500] add [_@@prefix_numbits], ecx 5243 000033ED D325[D04A0500] shl dword [_@@prefix_pattern], cl 5244 000033F3 89D0 mov eax, edx 5245 000033F5 2B05[DC4A0500] sub eax, [_@@curr_table_index] 5246 000033FB 0905[D04A0500] or [_@@prefix_pattern], eax 5247 00003401 E87CFEFFFF call mp3_build_huff_table_recursive_child 5248 00003406 8F05[D04A0500] pop dword [_@@prefix_pattern] 5249 0000340C 8F05[CC4A0500] pop dword [_@@prefix_numbits] 5250 00003412 8F05[C44A0500] pop dword [_@@table_nb_bits] 5251 00003418 8F05[DC4A0500] pop dword [_@@curr_table_index] 5252 0000341E 5A pop edx 5253 0000341F 59 pop ecx 5254 5255 .make_child_tables_lop_next: 5256 00003420 42 inc edx 5257 00003421 E281 loop .make_child_tables_lop 5258 00003423 C3 retn 5259 5260 5261 ; =============== S U B R O U T I N E ======================================= 5262 5263 5264 mp3_exclude_id3_and_tag: 5265 00003424 8B35[EC4A0500] mov esi, [stream_pos] 5266 0000342A 8B0D[F04A0500] mov ecx, [bytes_left] 5267 00003430 83F90A cmp ecx, 10 5268 00003433 7240 jb short .no_id3 5269 00003435 8B06 mov eax, [esi] 5270 00003437 25FFFFFF00 and eax, 0FFFFFFh 5271 ;cmp eax, '3DI' ; "ID3" 5272 ; 20/10/2024 5273 0000343C 3D49443300 cmp eax, 'ID3' ; FASM & NASM syntax 5274 00003441 7532 jnz short .no_id3 5275 00003443 8B4606 mov eax, [esi+6] 5276 00003446 A980808080 test eax, 80808080h 5277 0000344B 7528 jnz short .no_id3 5278 5279 .xlat_4x7bit_to_28bit: 5280 0000344D 86E0 xchg al, ah 5281 0000344F D0E0 shl al, 1 5282 00003451 66D1E0 shl ax, 1 5283 00003454 66C1E802 shr ax, 2 5284 00003458 C1C810 ror eax, 16 5285 0000345B 86E0 xchg al, ah 5286 0000345D D0E0 shl al, 1 5287 0000345F 66D1E0 shl ax, 1 5288 00003462 C1E802 shr eax, 2 5289 00003465 83C00A add eax, 10 5290 00003468 39C1 cmp ecx, eax 5291 0000346A 7209 jb short .no_id3 5292 0000346C 01C6 add esi, eax 5293 0000346E 29C1 sub ecx, eax 5294 00003470 A3[70120100] mov [mp3_id3_size], eax 5295 5296 .no_id3: 5297 00003475 BA80000000 mov edx, 80h 5298 0000347A 39D1 cmp ecx, edx 5299 0000347C 721F jb short .no_tag_or_ext 5300 0000347E 8B440E80 mov eax, [esi+ecx-80h] 5301 00003482 25FFFFFF00 and eax, 0FFFFFFh 5302 ;cmp eax, 'GAT' ; "TAG" 5303 ; 20/10/2024 5304 00003487 3D54414700 cmp eax, 'TAG' ; FASM & NASM syntax 5305 0000348C 0F8421010000 jz .got_tag_size_edx 5306 ;cmp eax, 'TXE' 5307 00003492 3D45585400 cmp eax, 'EXT' 5308 00003497 0F8416010000 jz .got_tag_size_edx 5309 5310 .no_tag_or_ext: 5311 0000349D BAE3000000 mov edx, 0E3h 5312 000034A2 39D1 cmp ecx, edx 5313 000034A4 7211 jb short .no_tagplus 5314 ;cmp dword [esi+ecx-0E3h], '+GAT' ; "TAG+" 5315 ; 20/10/2024 5316 000034A6 81BC0E1DFFFFFF5441- cmp dword [esi+ecx-0E3h], 'TAG+' 5316 000034AF 472B 5317 000034B1 0F84FC000000 jz .got_tag_size_edx 5318 5319 .no_tagplus: 5320 000034B7 BA14000000 mov edx, 20 ; 10+10 5321 000034BC 39D1 cmp ecx, edx 5322 000034BE 723C jb short .no_3di ; "3DI",04h 5323 000034C0 817C0EF633444904 cmp dword [esi+ecx-10], 4494433h ; 'ID3'+04000000h 5324 000034C8 7532 jnz short .no_3di 5325 000034CA F6440EFB10 test byte [esi+ecx-5], 10h ; bit 4 5326 000034CF 742B jz short .no_3di 5327 000034D1 8B440EFC mov eax, [esi+ecx-4] 5328 000034D5 A980808080 test eax, 80808080h 5329 000034DA 7520 jnz short .no_3di 5330 5331 .@xlat_4x7bit_to_28bit: 5332 000034DC 86E0 xchg al, ah 5333 000034DE D0E0 shl al, 1 5334 000034E0 66D1E0 shl ax, 1 5335 000034E3 66C1E802 shr ax, 2 5336 000034E7 C1C810 ror eax, 10h 5337 000034EA 86E0 xchg al, ah 5338 000034EC D0E0 shl al, 1 5339 000034EE 66D1E0 shl ax, 1 5340 000034F1 C1E802 shr eax, 2 5341 000034F4 8D5014 lea edx, [eax+20] ; [eax+10+10] ; hdr+footer siz 5342 000034F7 E9B7000000 jmp .got_tag_size_edx 5343 5344 .no_3di: 5345 ;cmp dword [esi+ecx-32], 'TEPA' ; [esi+ecx-32+0] 5346 ; 20/10/2024 5347 000034FC 817C0EE041504554 cmp dword [esi+ecx-32], 'APET' 5348 ; check "APETAGEX" 5349 00003504 7520 jnz short .no_ape 5350 ;cmp dword [esi+ecx-28], 'XEGA' ; [esi+ecx-32+4] 5351 00003506 817C0EE441474558 cmp dword [esi+ecx-28], 'AGEX' 5352 0000350E 7516 jnz short .no_ape 5353 00003510 8B540EEC mov edx, [esi+ecx-20] ; [esi+ecx-32+12] ; get size 5354 00003514 F7440EF400000080 test dword [esi+ecx-12], 80000000h ; [esi+ecx-32+20],1 shl 31 5355 0000351C 7403 jz short .no_ape_header 5356 0000351E 83C220 add edx, 32 ; hdr.size 5357 5358 .no_ape_header: 5359 00003521 E98D000000 jmp .got_tag_size_edx 5360 5361 .no_ape: 5362 00003526 BA14000000 mov edx, 20 ; 11+9 5363 0000352B 39D1 cmp ecx, edx ; "LYRICSEND" or "LYRICS200" 5364 ; (11+N+9 bytes each) 5365 0000352D 7258 jb short .no_lyrics 5366 ;cmp dword [esi+ecx-9], 'IRYL' 5367 ; 20/10/2024 5368 0000352F 817C0EF74C595249 cmp dword [esi+ecx-9], 'LYRI' ; FASM & NASM syntax 5369 00003537 754E jnz short .no_lyrics 5370 00003539 807C0EFB43 cmp byte [esi+ecx-5], 'C' 5371 0000353E 7547 jnz short .no_lyrics 5372 ;cmp dword [esi+ecx-4], 'DNES' 5373 00003540 817C0EFC53454E44 cmp dword [esi+ecx-4], 'SEND' 5374 00003548 740C jz short .lyrics3_v1 5375 ;cmp dword [esi+ecx-4], '002S' 5376 0000354A 817C0EFC53323030 cmp dword [esi+ecx-4], 'S200' 5377 00003552 7440 jz short .lyrics3_v2 5378 00003554 7531 jnz short .no_lyrics 5379 5380 .lyrics3_v1: 5381 00003556 BA14000000 mov edx, 20 ; 11+9 5382 5383 .lyrics3_v1_size_lop: 5384 0000355B 8D040E lea eax, [esi+ecx] 5385 0000355E 29D0 sub eax, edx 5386 ;cmp dword [eax], 'IRYL' ; "LYRICSBEGIN" 5387 ; 20/10/2024 5388 00003560 81384C595249 cmp dword [eax], 'LYRI' 5389 00003566 7512 jnz short .lyrics3_v1_size_next 5390 ;cmp dword [eax+4], 'EBSC' 5391 00003568 81780443534245 cmp dword [eax+4], 'CSBE' 5392 0000356F 7509 jnz short .lyrics3_v1_size_next 5393 ;cmp dword [eax+7], 'NIGE' 5394 00003571 8178074547494E cmp dword [eax+7], 'EGIN' 5395 00003578 7439 jz short .got_tag_size_edx 5396 5397 .lyrics3_v1_size_next: 5398 0000357A 42 inc edx 5399 0000357B 81FA00140000 cmp edx, 5120 5400 00003581 7704 ja short .no_lyrics 5401 00003583 39CA cmp edx, ecx 5402 00003585 76D4 jbe short .lyrics3_v1_size_lop 5403 ;jmp short .no_lyrics 5404 5405 .no_lyrics: 5406 ;jmp short .footer_tag_all_done 5407 ; 22/10/2024 5408 .footer_tag_all_done: 5409 00003587 8935[EC4A0500] mov [stream_pos], esi 5410 0000358D 890D[F04A0500] mov [bytes_left], ecx 5411 00003593 C3 retn 5412 5413 .lyrics3_v2: 5414 00003594 51 push ecx 5415 00003595 56 push esi 5416 00003596 8D740EF1 lea esi, [esi+ecx-15] ; [esi+ecx-6-9] 5417 0000359A B906000000 mov ecx, 6 5418 0000359F 31D2 xor edx, edx 5419 5420 .lyrics3_v2_size_lop: 5421 000035A1 6BD20A imul edx, 10 5422 000035A4 0FB606 movzx eax, byte [esi] 5423 000035A7 46 inc esi 5424 000035A8 2C30 sub al, 30h 5425 000035AA 01C2 add edx, eax 5426 000035AC E2F3 loop .lyrics3_v2_size_lop 5427 000035AE 5E pop esi 5428 000035AF 59 pop ecx 5429 000035B0 83C20F add edx, 0Fh ; 6+9 5430 ;jmp short .got_tag_size_edx 5431 5432 .got_tag_size_edx: 5433 ;;; 5434 ; 22/10/2024 5435 000035B3 29D1 sub ecx, edx 5436 000035B5 731B jnb short .cont 5437 ;;; 5438 ; 16/02/2025 5439 sys _msg, tag_size_err, 255, 0Ch 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 000035B7 BB[DD350000] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 000035BC B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 000035C1 BA0C000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 000035C6 B823000000 <1> mov eax, %1 112 <1> 113 000035CB CD40 <1> int 40h 5440 ;;; 5441 ;sub ecx, edx 5442 ;jb fatalunexpected 5443 000035CD E9D7D6FFFF jmp fatalunexpected 5444 .cont: 5445 ;;; 5446 000035D2 0115[74120100] add [mp3_tag_size], edx 5447 000035D8 E998FEFFFF jmp .no_id3 5448 5449 ; --------------------------------------------------------------------------- 5450 5451 ; 16/02/2025 5452 000035DD 0D0A tag_size_err: db 0Dh, 0Ah 5453 000035DF 5461672053697A6520- db "Tag Size Error!?" 5453 000035E8 4572726F72213F 5454 000035EF 0D0A00 db 0Dh, 0Ah, 0 5455 5456 ; =============== S U B R O U T I N E ======================================= 5457 5458 5459 mp3_detect_free_format_block_size: 5460 000035F2 833D[EC110100]00 cmp dword [mp3_free_format_frame_size], 0 5461 000035F9 0F85A5000000 jnz .already_detected 5462 000035FF 31D2 xor edx, edx 5463 5464 .find_distance_lop: 5465 00003601 3B15[98120100] cmp edx, [mp3_src_remain] 5466 00003607 742B jz short .match_eof 5467 00003609 8D4204 lea eax, [edx+4] 5468 0000360C 3B05[98120100] cmp eax, [mp3_src_remain] 5469 00003612 771E ja short .find_distance_failed 5470 00003614 8B0416 mov eax, [esi+edx] 5471 00003617 E884CCFFFF call bswap_eax 5472 0000361C 3305[ACBB0000] xor eax, [mp3_hdr_32bit_header] 5473 00003622 25000CFEFF and eax, 0FFFE0C00h 5474 00003627 740B jz short .match_eof 5475 5476 .find_distance_next: 5477 00003629 42 inc edx 5478 0000362A 81FA00100000 cmp edx, 1000h 5479 00003630 76CF jbe short .find_distance_lop 5480 5481 .find_distance_failed: 5482 00003632 F9 stc 5483 00003633 C3 retn 5484 5485 .match_eof: 5486 00003634 89D0 mov eax, edx 5487 00003636 2B05[B8BB0000] sub eax, [mp3_hdr_flag_padding] 5488 0000363C 83F804 cmp eax, 4 5489 0000363F 72E8 jb short .find_distance_next 5490 00003641 A3[EC110100] mov [mp3_free_format_frame_size], eax 5491 00003646 31DB xor ebx, ebx 5492 5493 .confirm_distance_lop: 5494 00003648 8B041E mov eax, [esi+ebx] 5495 0000364B E850CCFFFF call bswap_eax 5496 00003650 C1E80A shr eax, 10 ; 9+1 5497 00003653 131D[EC110100] adc ebx, [mp3_free_format_frame_size] 5498 00003659 3B1D[98120100] cmp ebx, [mp3_src_remain] 5499 0000365F 7422 jz short .confirm_distance_match_eof 5500 00003661 8D4304 lea eax, [ebx+4] 5501 00003664 3B05[98120100] cmp eax, [mp3_src_remain] 5502 0000366A 77BD ja short .find_distance_next 5503 0000366C 8B041E mov eax, [esi+ebx] 5504 0000366F E82CCCFFFF call bswap_eax 5505 00003674 3305[ACBB0000] xor eax, [mp3_hdr_32bit_header] 5506 0000367A 25000CFEFF and eax, 0FFFE0C00h 5507 0000367F 75A8 jnz short .find_distance_next 5508 00003681 EBC5 jmp short .confirm_distance_lop 5509 5510 .confirm_distance_match_eof: 5511 00003683 A1[EC110100] mov eax, [mp3_free_format_frame_size] 5512 00003688 C1E003 shl eax, 3 5513 0000368B F725[BCBB0000] mul dword [mp3_sample_rate] 5514 00003691 8B0D[A8120100] mov ecx, [mp3_nb_granules] 5515 00003697 69C940020000 imul ecx, 240h 5516 0000369D F7F1 div ecx 5517 0000369F A3[C4BB0000] mov [mp3_bit_rate], eax 5518 5519 .already_detected: 5520 000036A4 F8 clc 5521 000036A5 C3 retn 5522 5523 5524 ; =============== S U B R O U T I N E ======================================= 5525 5526 5527 mp3_check_xing_info: 5528 000036A6 C705[F4110100]0000- mov dword [mp3_xing_id], 0 5528 000036AE 0000 5529 000036B0 C705[FC110100]0000- mov dword [mp3_xing_frames], 0 5529 000036B8 0000 5530 000036BA C705[00120100]0000- mov dword [mp3_xing_filesize], 0 5530 000036C2 0000 5531 000036C4 8B35[A0BB0000] mov esi, [mp3_src_data_location] 5532 000036CA AD lodsd 5533 ;cmp eax, 'gniX' 5534 ; 20/10/2024 5535 000036CB 3D58696E67 cmp eax, 'Xing' ; FASM & NASM syntax 5536 000036D0 7401 jz short .xing 5537 000036D2 C3 retn 5538 5539 .xing: 5540 000036D3 A3[F4110100] mov [mp3_xing_id], eax 5541 000036D8 AD lodsd 5542 000036D9 E8C2CBFFFF call bswap_eax 5543 000036DE A3[F8110100] mov [mp3_xing_flags], eax 5544 000036E3 89C2 mov edx, eax 5545 000036E5 F7C201000000 test edx, 1 5546 000036EB 740B jz short .no_xing_frames 5547 000036ED AD lodsd 5548 000036EE E8ADCBFFFF call bswap_eax 5549 000036F3 A3[FC110100] mov [mp3_xing_frames], eax 5550 5551 .no_xing_frames: 5552 000036F8 F7C202000000 test edx, 2 ; 1 shl 1 5553 000036FE 740B jz short .no_xing_filesize 5554 00003700 AD lodsd 5555 00003701 E89ACBFFFF call bswap_eax 5556 00003706 A3[00120100] mov [mp3_xing_filesize], eax 5557 5558 .no_xing_filesize: 5559 0000370B F7C204000000 test edx, 4 ; 1 shl 2 5560 00003711 740C jz short .no_xing_toc 5561 00003713 B964000000 mov ecx, 100 5562 00003718 BF[04120100] mov edi, mp3_xing_toc 5563 0000371D F3A4 rep movsb 5564 5565 .no_xing_toc: 5566 0000371F F7C208000000 test edx, 8 ; 1 shl 3 5567 00003725 740B jz short .no_xing_vbr_scale 5568 00003727 AD lodsd 5569 00003728 E873CBFFFF call bswap_eax 5570 0000372D A3[68120100] mov [mp3_xing_vbr_scale], eax 5571 5572 .no_xing_vbr_scale: 5573 00003732 C705[C4BB0000]0000- mov dword [mp3_bit_rate], 0 5573 0000373A 0000 5574 0000373C A1[BCBB0000] mov eax, [mp3_sample_rate] 5575 00003741 C1E003 shl eax, 3 5576 00003744 F725[00120100] mul dword [mp3_xing_filesize] 5577 0000374A 8B0D[FC110100] mov ecx, [mp3_xing_frames] 5578 00003750 0FAF0D[A8120100] imul ecx, [mp3_nb_granules] 5579 00003757 69C940020000 imul ecx, 576 ; 18*32 5580 0000375D 39CA cmp edx, ecx 5581 0000375F 7307 jnb short .overflow 5582 00003761 F7F1 div ecx 5583 00003763 A3[C4BB0000] mov [mp3_bit_rate], eax 5584 .overflow: 5585 00003768 C3 retn 5586 5587 5588 ; =============== S U B R O U T I N E ======================================= 5589 5590 ; 16/02/2025 5591 ; 20/10/2024 5592 mp3_decode_frame: 5593 00003769 890D[98120100] mov [mp3_src_remain], ecx 5594 0000376F 893D[7C120100] mov [mp3_samples_dst], edi 5595 5596 ; 16/02/2025 5597 .no_rdtsc_supported@@@@: 5598 00003775 E88ACBFFFF call mp3_search_get_header 5599 0000377A 0F8275010000 jc .error 5600 00003780 A1[A4BB0000] mov eax, [mp3_src_frame_size] 5601 00003785 83F800 cmp eax, 0 5602 00003788 0F8E67010000 jle .error 5603 0000378E 3B05[98120100] cmp eax, [mp3_src_remain] 5604 00003794 0F875B010000 ja .error 5605 0000379A 8935[94120100] mov [mp3_bitstream_start], esi 5606 ; 11/01/2025 5607 ;mov eax, 32 5608 5609 .mp3mac_bitstream_set_position: 5610 ; 22/10/2024 5611 ;mov esi, [mp3_bitstream_start] 5612 ;mov cl, al 5613 ;shr eax, 3 5614 ;and cl, 7 5615 ;mov eax, 4 5616 ;add esi, eax 5617 000037A0 83C604 add esi, 4 5618 000037A3 E800CBFFFF call mp3_recollect_bits 5619 5620 .mp3mac_get_n_bits: 5621 ;mov eax, ebp ; mp3_col32 5622 ;shl ebp, cl 5623 ;rol eax, cl 5624 ;xor eax, ebp ; mp3_col32 5625 ;sub ch, cl ; sub mp3_colNN,num 5626 ;jns short .cont 5627 ;mov cl, ch ; mov cl,mp3_colNN 5628 ;add ch, 16 5629 ;rol ebp, cl ; rol mp3_col32,cl 5630 ;mov bp, [esi] ; mov mp3_col16,word ptr [esi] 5631 ;add esi, 2 5632 ;ror bp, 8 ; endianess 5633 ;ror ebp, cl ; ror mp3_col32,cl 5634 5635 .cont: 5636 000037A8 E8F0CCFFFF call mp3_bitstream_read_header_extra 5637 000037AD E838CEFFFF call mp3_bitstream_read_granules 5638 000037B2 0F823D010000 jc .error 5639 000037B8 E83BCBFFFF call mp3_uncollect_bits 5640 000037BD 8935[A0BB0000] mov [mp3_src_data_location], esi 5641 000037C3 833D[7C120100]00 cmp dword [mp3_samples_dst], 0 5642 000037CA 0F840E010000 jz .skip_decoding 5643 000037D0 E8A5D2FFFF call mp3_bitstream_append_to_main_data_pool 5644 000037D5 833D[80120100]00 cmp dword [mp3_samples_output_size], 0 5645 000037DC 0F84FC000000 jz .skip_decoding 5646 5647 000037E2 C705[8C120100]0000- mov dword [mp3_curr_granule], 0 5647 000037EA 0000 5648 000037EC BB[AC120100] mov ebx, mp3_granules 5649 5650 .body_granule_lop: 5651 000037F1 891D[E04A0500] mov [_@@granule_addr], ebx 5652 000037F7 C705[88120100]0000- mov dword [mp3_curr_channel], 0 5652 000037FF 0000 5653 5654 .body_channel_lop: 5655 00003801 8B4304 mov eax, [ebx+4] ; [ebx+$mp3gr_part2_3_start] 5656 00003804 8B35[94120100] mov esi, [mp3_bitstream_start] 5657 0000380A 88C1 mov cl, al ; mp3mac_bitstream_set_position 5658 0000380C C1E803 shr eax, 3 5659 0000380F 80E107 and cl, 7 5660 00003812 01C6 add esi, eax 5661 00003814 E88FCAFFFF call mp3_recollect_bits 5662 00003819 89E8 mov eax, ebp ; mp3mac_get_n_bits cl 5663 0000381B D3E5 shl ebp, cl 5664 0000381D D3C0 rol eax, cl 5665 0000381F 31E8 xor eax, ebp 5666 00003821 28CD sub ch, cl 5667 00003823 7913 jns short .cont@ 5668 00003825 88E9 mov cl, ch ; mp3mac_collect_more 5669 00003827 80C510 add ch, 16 5670 0000382A D3C5 rol ebp, cl 5671 0000382C 668B2E mov bp, [esi] 5672 0000382F 83C602 add esi, 2 5673 00003832 66C1CD08 ror bp, 8 5674 00003836 D3CD ror ebp, cl 5675 5676 .cont@: 5677 00003838 E8A5D2FFFF call mp3_bitstream_read_scalefacs 5678 0000383D E86FD4FFFF call mp3_get_exponents_from_scale_factors 5679 00003842 E885D5FFFF call mp3_huffman_decode ; reads up to $mp3gr_part2_3_end 5680 00003847 0F82A8000000 jc .error 5681 5682 .body_channel_next: 5683 0000384D 81C340130000 add ebx, 4928 ; $mp3gr_entrysiz*2 5684 00003853 FF05[88120100] inc dword [mp3_curr_channel] 5685 00003859 A1[88120100] mov eax, [mp3_curr_channel] 5686 ; 16/02/2025 5687 0000385E 3B05[C8BB0000] cmp eax, [mp3_num_channels] 5688 00003864 729B jb short .body_channel_lop 5689 00003866 8B1D[E04A0500] mov ebx, [_@@granule_addr] 5690 5691 .mp3mac_push_bitstream: 5692 0000386C 51 push ecx 5693 0000386D 55 push ebp 5694 0000386E 56 push esi 5695 0000386F E827DAFFFF call mp3_compute_stereo 5696 00003874 C705[88120100]0000- mov dword [mp3_curr_channel], 0 5696 0000387C 0000 5697 5698 .cast_channel_lop: 5699 0000387E E894DCFFFF call mp3_reorder_block 5700 00003883 E8FBDCFFFF call mp3_compute_antialias 5701 00003888 E8B8E5FFFF call mp3_compute_imdct 5702 0000388D 81C340130000 add ebx, 4928 ; $mp3gr_entrysiz*2 5703 00003893 FF05[88120100] inc dword [mp3_curr_channel] 5704 00003899 A1[88120100] mov eax, [mp3_curr_channel] 5705 ; 06/02/2025 5706 0000389E 3B05[C8BB0000] cmp eax, [mp3_num_channels] 5707 000038A4 72D8 jc short .cast_channel_lop 5708 5709 .mp3mac_pop_bitstream: 5710 000038A6 5E pop esi 5711 000038A7 5D pop ebp 5712 000038A8 59 pop ecx 5713 000038A9 8B1D[E04A0500] mov ebx, [_@@granule_addr] 5714 000038AF 81C3A0090000 add ebx, 2464 ; $mp3gr_entrysiz 5715 000038B5 FF05[8C120100] inc dword [mp3_curr_granule] 5716 000038BB A1[8C120100] mov eax, [mp3_curr_granule] 5717 000038C0 3B05[A8120100] cmp eax, [mp3_nb_granules] 5718 000038C6 0F8225FFFFFF jc .body_granule_lop 5719 000038CC E827CAFFFF call mp3_uncollect_bits 5720 000038D1 3B35[9CBB0000] cmp esi, [main_data_pool_wr_ptr] 5721 000038D7 771C ja short .error 5722 ;call dword [mp3_synth_filter_proc] ; synth maths 5723 ; 16/02/2025 5724 000038D9 E868F3FFFF call mp3_synth_filter_proc 5725 5726 .skip_decoding: 5727 000038DE A1[9C120100] mov eax, [mp3_extra_bytes] 5728 000038E3 0105[A4BB0000] add [mp3_src_frame_size], eax 5729 000038E9 A1[80120100] mov eax, [mp3_samples_output_size] 5730 ; 15/02/2025 5731 000038EE FF05[78120100] inc dword [mp3_num_frames_decoded] 5732 .timelog_end: 5733 ; 16/02/2025 5734 .no_rdtsc_supported: 5735 ;clc 5736 000038F4 C3 retn 5737 5738 .error: 5739 ; 16/02/2025 5740 ; 20/10/2024 5741 .no_rdtsc_supported@: 5742 000038F5 A1[9C120100] mov eax, [mp3_extra_bytes] 5743 000038FA 0105[A4BB0000] add [mp3_src_frame_size], eax 5744 00003900 F9 stc 5745 00003901 C3 retn 5746 5747 5748 ; =============== S U B R O U T I N E ======================================= 5749 5750 ; 16/02/2025 5751 ; 15/02/2025 5752 mp3_init: 5753 00003902 BF[9CAB0000] mov edi, main_data_pool_start ; = mp3_context_start 5754 ;mov ecx, 74916 ; (mp3_context_end-mp3_context_start)/4 5755 00003907 B97F240100 mov ecx, (mp3_context_end-mp3_context_start)/4 5756 0000390C 31C0 xor eax, eax ; ERRIF @@len AND 03h 5757 0000390E F3AB rep stosd ; clear context 5758 00003910 C705[9CBB0000]- mov dword [main_data_pool_wr_ptr], main_data_pool_start 5758 00003916 [9CAB0000] 5759 0000391A 833D[2CA20000]00 cmp dword [mp3_initialized], 0 5760 00003921 7537 jnz short .already_initialized 5761 00003923 E803F7FFFF call mp3_integer_init_is_stereo_lsf 5762 00003928 E85CF7FFFF call mp3_integer_init_mdct_windows 5763 0000392D E87FF7FFFF call mp3_integer_init_table_4_3 5764 00003932 E8D2F7FFFF call mp3_integer_init_exponent 5765 00003937 E85CF5FFFF call mp3_any_init_synth_window 5766 0000393C E80BF6FFFF call mp3_any_init_band_indices 5767 00003941 E830F6FFFF call mp3_any_init_lsf_sf_expand 5768 00003946 E879F6FFFF call mp3_any_init_huff_tables 5769 0000394B E8FEF8FFFF call mp3_init_log_constants 5770 ; 15/02/2025 5771 00003950 C705[2CA20000]0100- mov dword [mp3_initialized], 1 5771 00003958 0000 5772 5773 .already_initialized: 5774 ; 17/02/2025 5775 ; 16/02/2025 5776 ;mov dword [mp3_bytes_per_sample], 2 5777 ; 15/02/2025 5778 0000395A C3 retn 5779 5780 5781 ; =============== S U B R O U T I N E ======================================= 5782 5783 ; 16/02/2025 5784 mp3_check_1st_frame: 5785 0000395B E8C4FAFFFF call mp3_exclude_id3_and_tag 5786 00003960 8B35[EC4A0500] mov esi, [stream_pos] 5787 00003966 8B0D[F04A0500] mov ecx, [bytes_left] 5788 0000396C 31FF xor edi, edi 5789 0000396E 31ED xor ebp, ebp 5790 00003970 E8F4FDFFFF call mp3_decode_frame 5791 00003975 7206 jc short .error 5792 00003977 E82AFDFFFF call mp3_check_xing_info 5793 5794 ; 16/02/2025 5795 0000397C F8 clc 5796 .error: 5797 0000397D C3 retn 5798 5799 ;.error: 5800 ;stc 5801 ;retn 5802 5803 5804 ; =============== S U B R O U T I N E ======================================= 5805 5806 5807 mp3_plain_test_without_output: 5808 0000397E 60 pusha 5809 0000397F 8B35[EC4A0500] mov esi, [stream_pos] 5810 00003985 8B0D[F04A0500] mov ecx, [bytes_left] 5811 0000398B BF[00800500] mov edi, sample_buffer 5812 00003990 31ED xor ebp, ebp 5813 00003992 E8D2FDFFFF call mp3_decode_frame 5814 00003997 61 popa 5815 00003998 7218 jc short .exit 5816 0000399A A1[A4BB0000] mov eax, [mp3_src_frame_size] 5817 0000399F 83F800 cmp eax, 0 5818 000039A2 740E jz short .exit 5819 000039A4 0105[EC4A0500] add [stream_pos], eax 5820 000039AA 2905[F04A0500] sub [bytes_left], eax 5821 000039B0 EBCC jmp short mp3_plain_test_without_output 5822 .exit: 5823 000039B2 C3 retn 5824 5825 5826 ; =============== S U B R O U T I N E ======================================= 5827 5828 ; 20/10/2024 5829 wrchr: 5830 ; TRDOS 386 System Call 5831 ; ebx = 2 -> write character onto STDOUT 5832 ;push ebx 5833 ;push ecx 5834 ;push eax 5835 000039B3 60 pusha 5836 ;;mov dword [diskresult], 0 5837 sys _stdio, 2, eax 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 000039B4 BB02000000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 000039B9 89C1 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 000039BB B82E000000 <1> mov eax, %1 112 <1> 113 000039C0 CD40 <1> int 40h 5838 ;jnc short .ok ; if EOF, eax = 0 5839 ;xor eax, eax ; 0 5840 ;.ok: 5841 ;mov [diskresult], eax ; written byte count 5842 000039C2 61 popa 5843 ;pop eax 5844 ;pop ecx 5845 ;pop ebx 5846 000039C3 C3 retn 5847 5848 5849 ; =============== S U B R O U T I N E ======================================= 5850 5851 ; 14/02/2025 (mp3play6.s) 5852 ; 01/02/2025 (mp3play4.s) 5853 ; 21/10/2024 (mp3play1.s) 5854 set_break: 5855 ; set [u.break] -end of bss- address to 5856 ; end_of_bss at first (mp3 file will be loaded 5857 ; at the end of bss) 5858 ; ([u.break] initially points to the end of PRG file 5859 ; -code and data- except BSS section) 5860 ; 5861 ; TRDOS 386 system call 5862 ; Set break address 5863 ; ebx = new [u.break] 5864 ;sys _break, end_of_bss 5865 ; eax = new break address (dword aligned) 5866 5867 ; 10/01/2025 5868 sys _break, 100000h ; end of 1st 1MB 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 000039C4 BB00001000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 000039C9 B811000000 <1> mov eax, %1 112 <1> 113 000039CE CD40 <1> int 40h 5869 5870 000039D0 A3[E84A0500] mov [stream_start], eax 5871 000039D5 A3[EC4A0500] mov [stream_pos], eax 5872 5873 000039DA C3 retn 5874 5875 5876 ; =============== S U B R O U T I N E ======================================= 5877 5878 ; 16/02/2025 5879 ; 15/02/2025 (tmp3play.s) 5880 ; 14/02/2025 (mp3play6.s) 5881 ; 01/02/2025 (mp3play4.s) 5882 ; 20/10/2024 (mp3play1.s) 5883 5884 open_and_mmap_the_file: 5885 ; 21/10/2024 5886 ; TRDOS 386 system call 5887 ; Open File 5888 ; ebx = pointer to filename 5889 ; ecx = open mode, 0 = read 5890 ; 15/02/2025 5891 sys _open, mp3_file_name, 0 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 000039DB BB[00550500] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 000039E0 B900000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 000039E5 B805000000 <1> mov eax, %1 112 <1> 113 000039EA CD40 <1> int 40h 5892 000039EC 7277 jc short .not_found 5893 5894 000039EE A3[E44A0500] mov [hFile], eax 5895 5896 ; get file size by using systell system call 5897 ; (not applicable for TRDOS 386 Kernel v2.0.9 and earlier) 5898 ; TRDOS 386 system call 5899 ; Get current file (offset) pointer 5900 ; ebx = file handle (file descriptor) 5901 ; ecx = 0, offset 5902 ; edx = 2, from the end of file 5903 ;sys _tell, eax, 0, 2 5904 ;mov [mp3_file_size], eax 5905 5906 ; *** get file size *** 5907 ; TRDOS 386 system call 5908 ; Set file (offset) pointer to file size 5909 ; (needed for TRDOS kernel v2.0.9 and earlier) 5910 ; ebx = file handle (file descriptor) 5911 ; ecx = 0, offset 5912 ; edx = 2, from the end of file 5913 sys _seek, eax, 0, 2 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 000039F3 89C3 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 000039F5 B900000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 000039FA BA02000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 000039FF B813000000 <1> mov eax, %1 112 <1> 113 00003A04 CD40 <1> int 40h 5914 ; TRDOS 386 system call 5915 ; Get current file (offset) pointer 5916 ; (needed for TRDOS 386 kernel version 2.0.9 and earlier) 5917 00003A06 31D2 xor edx, edx ; 0 5918 ; ecx = 0 5919 ; ebx = file handle 5920 sys _tell 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003A08 B814000000 <1> mov eax, %1 112 <1> 113 00003A0D CD40 <1> int 40h 5921 00003A0F A3[6C120100] mov [mp3_file_size], eax 5922 5923 ; *** set file offset pointer to 0 again *** 5924 ; TRDOS 386 system call 5925 ; Set file (offset) pointer 5926 ; ebx = file handle (file descriptor) 5927 ; ecx = 0, offset 5928 ; edx = 0, from the beginning/start of file 5929 00003A14 50 push eax 5930 sys _seek 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003A15 B813000000 <1> mov eax, %1 112 <1> 113 00003A1A CD40 <1> int 40h 5931 00003A1C 58 pop eax 5932 5933 ; now, set [u.break] address to the end of mp3 file 5934 ; at memory -in BSS section- 5935 ; (not necessary for TRDOS 386 PRG files) 5936 ; (this system call will allocate user memory pages 5937 ; before sysread system call.. early) 5938 ;add eax, end_of_bss 5939 ; 13/01/2025 5940 00003A1D 0500001000 add eax, 100000h ; + end of 1st 1MB 5941 ; TRDOS 386 system call 5942 ; Set break address 5943 ; ebx = new [u.break] 5944 sys _break, eax 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003A22 89C3 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003A24 B811000000 <1> mov eax, %1 112 <1> 113 00003A29 CD40 <1> int 40h 5945 5946 ; TRDOS 386 system call 5947 ; Read file 5948 ; ebx = file handle (file descriptor) 5949 ; ecx = buffer address 5950 ; edx = byte count 5951 sys _read, [hFile], [stream_start], [mp3_file_size] 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003A2B 8B1D[E44A0500] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00003A31 8B0D[E84A0500] <1> mov ecx, %3 106 <1> %if %0 = 4 107 00003A37 8B15[6C120100] <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003A3D B803000000 <1> mov eax, %1 112 <1> 113 00003A42 CD40 <1> int 40h 5952 00003A44 7204 jc short .read_error 5953 00003A46 39D0 cmp eax, edx 5954 00003A48 730E jnb short .ok 5955 ;or eax, eax 5956 ;jnz short .ok 5957 .read_error: 5958 ; TRDOS 386 system call 5959 ; Close file 5960 ; ebx = file handle (file descriptor) 5961 ;sys _close, [hFile] 5962 sys _close 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003A4A B806000000 <1> mov eax, %1 112 <1> 113 00003A4F CD40 <1> int 40h 5963 5964 ; 16/02/2025 5965 00003A51 BE[6F3A0000] mov esi, txt_read_err 5966 00003A56 EB12 jmp short .r_err_msg 5967 .ok: 5968 00003A58 A3[F04A0500] mov [bytes_left], eax ; read count 5969 5970 ; 16/02/2025 5971 sys _close 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003A5D B806000000 <1> mov eax, %1 112 <1> 113 00003A62 CD40 <1> int 40h 5972 00003A64 C3 retn 5973 .not_found: 5974 ; 16/02/2025 5975 00003A65 BE[17AB0000] mov esi, txt_not_found ; ("Error: File not found !") 5976 .r_err_msg: 5977 ;call print_err_msg 5978 ;;stc 5979 ;retn 5980 ; 16/02/2025 5981 00003A6A E92D170000 jmp print_err_msg 5982 5983 ; --------------------------------------------------------------------------- 5984 5985 ; 16/02/2025 5986 txt_read_err: 5987 00003A6F 46696C652072656164- db 'File read error !', 0Dh, 0Ah, 0 5987 00003A78 206572726F7220210D- 5987 00003A81 0A00 5988 5989 5990 ; =============== E X I T =================================================== 5991 5992 ; 25/01/2025 5993 ; 20/10/2024 5994 ExitProcess: 5995 00003A83 E809140000 call set_text_mode 5996 ExitP@: 5997 00003A88 31DB xor ebx, ebx ; mov ebx, 0 ; exit code 5998 ExitProcess@: ; 13/01/2025 5999 sys _exit 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003A8A B801000000 <1> mov eax, %1 112 <1> 113 00003A8F CD40 <1> int 40h 6000 ;hang: 6001 ;jmp short hang 6002 6003 6004 ; --------------------------------------------------------------------------- 6005 ; TRDOS 386 Audio System Functions 6006 ; --------------------------------------------------------------------------- 6007 6008 ; =============== S U B R O U T I N E ======================================= 6009 6010 ; 10/01/2025 6011 ; 20/10/2024 6012 detect_enable_audio_device: 6013 ; 24/01/2025 6014 ;mov word [max_frequency], 48000 6015 ; 10/01/2025 6016 ;mov byte [blocks], 8 6017 6018 ; check AC'97 hardware at first 6019 ; (48kHz support) 6020 ; TRDOS 386 system call 6021 ; sysaudio 6022 ; Detect (BH=1) AC'97 (BL=2) Audio Device 6023 .ac97: 6024 sys _audio, 0102h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003A91 BB02010000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003A96 B820000000 <1> mov eax, %1 112 <1> 113 00003A9B CD40 <1> int 40h 6025 00003A9D 7245 jc short .sb16 6026 00003A9F C605[84AB0000]02 mov byte [audio_hardware], 2 ; AC97 6027 6028 ;;;; 6029 ; 12/01/2025 (ref: playwav9.s, 18/12/2024) 6030 sys _audio, 0E00h ; get audio controller info 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003AA6 BB000E0000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003AAB B820000000 <1> mov eax, %1 112 <1> 113 00003AB0 CD40 <1> int 40h 6031 ; EAX = IRQ Number in AL 6032 ; Audio Device Number in AH 6033 ; EBX = DEV/VENDOR ID 6034 ; (DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV) 6035 ; ECX = BUS/DEV/FN 6036 ; (00000000BBBBBBBBDDDDDFFF00000000) 6037 ; EDX = NABMBAR/NAMBAR (for AC97) 6038 ; (Low word, DX = NAMBAR address) 6039 ; EDX = Base IO Addr (DX) for SB16 & VT8233 6040 6041 00003AB2 891D[74AB0000] mov [dev_vendor], ebx 6042 00003AB8 890D[70AB0000] mov [bus_dev_fn], ecx 6043 6044 00003ABE 668915[78AB0000] mov [NAMBAR], dx ; save audio mixer base addr 6045 ;shr edx, 16 6046 ;mov [NABMBAR], dx ; save bus master base addr 6047 00003AC5 8915[78AB0000] mov dword [NAMBAR], edx 6048 6049 00003ACB A2[80AB0000] mov [ac97_int_ln_reg], al 6050 ;;;; 6051 6052 ; TRDOS 386 system call 6053 ; sysaudio 6054 ; Get AC'97 Codec info 6055 ; (Function 14, sub function 1) 6056 sys _audio, 0E01h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003AD0 BB010E0000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003AD5 B820000000 <1> mov eax, %1 112 <1> 113 00003ADA CD40 <1> int 40h 6057 ; Save Variable Rate Audio support bit 6058 00003ADC 2401 and al, 1 6059 00003ADE A2[85AB0000] mov [vra], al 6060 00003AE3 C3 retn 6061 .sb16: 6062 ; check Sound Blaster 16 card at second 6063 ; (44100Hz support, but 24kHz will be used) 6064 ; TRDOS 386 system call 6065 ; sysaudio 6066 ; Detect (BH=1) SB16 (BL=1) Audio Card 6067 sys _audio, 0101h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003AE4 BB01010000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003AE9 B820000000 <1> mov eax, %1 112 <1> 113 00003AEE CD40 <1> int 40h 6068 00003AF0 721F jc short .vt8233 6069 00003AF2 C605[84AB0000]01 mov byte [audio_hardware], 1 ; SB16 6070 ; 24/01/2025 6071 ;mov word [max_frequency], 44100 6072 ; 10/01/2025 6073 ;;mov byte [blocks], 7 6074 ;dec byte [blocks] 6075 6076 ;;;; 6077 ; 12/01/2025 (ref: sb16play.s, 20/12/2024) 6078 sys _audio, 0E00h ; get audio controller info 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003AF9 BB000E0000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003AFE B820000000 <1> mov eax, %1 112 <1> 113 00003B03 CD40 <1> int 40h 6079 6080 00003B05 8915[7CAB0000] mov [audio_io_base], edx 6081 00003B0B A2[80AB0000] mov [audio_intr], al 6082 ;;;; 6083 6084 00003B10 C3 retn 6085 .vt8233: 6086 ; check VIA VT3237R (VT8233) hardware at third 6087 ; (48kHz support) 6088 ; TRDOS 386 system call 6089 ; sysaudio 6090 ; Detect (BH=1) VT8237R (BL=3) Audio Device 6091 sys _audio, 0103h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003B11 BB03010000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003B16 B820000000 <1> mov eax, %1 112 <1> 113 00003B1B CD40 <1> int 40h 6092 00003B1D 7208 jc short .hda 6093 00003B1F C605[84AB0000]03 mov byte [audio_hardware], 3 ; VT8237R 6094 00003B26 C3 retn 6095 .hda: 6096 ; check Intel HDA hardware at last 6097 ; (48kHz support) 6098 ; TRDOS 386 system call 6099 ; sysaudio 6100 ; Detect (BH=1) Intel HDA (BL=4) Audio Device 6101 sys _audio, 0104h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003B27 BB04010000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003B2C B820000000 <1> mov eax, %1 112 <1> 113 00003B31 CD40 <1> int 40h 6102 00003B33 7208 jc short .err 6103 00003B35 C605[84AB0000]04 mov byte [audio_hardware], 4 ; HDA 6104 00003B3C C3 retn 6105 .err: 6106 ; 16/02/2025 6107 00003B3D BE[473B0000] mov esi, txt_audio_nf_err 6108 ;call print_err_msg 6109 ;;stc 6110 ;retn 6111 00003B42 E955160000 jmp print_err_msg 6112 6113 ; --------------------------------------------------------------------------- 6114 6115 00003B47 50726F706572206175- txt_audio_nf_err: db 'Proper audio hardware not found!',0Dh,0Ah,0 6115 00003B50 64696F206861726477- 6115 00003B59 617265206E6F742066- 6115 00003B62 6F756E64210D0A00 6116 6117 6118 ; =============== CONSTANT ================================================== 6119 6120 ; 21/10/2024 6121 ;MP3_MAX_OUTPUT_SIZE equ 2*2*18*32*2 6122 ; = 1200h = 4608 decimal = 2 channels, 2 granules, 18*32, 2 byte (16bit) 6123 6124 6125 ; =============== S U B R O U T I N E ======================================= 6126 6127 ; 29/01/2025 6128 ; 28/01/2025 6129 ; 27/01/2025 6130 ; 12/01/2025 6131 audio_system_init: 6132 ; 28/01/2025 6133 00003B6A A1[80120100] mov eax, [mp3_samples_output_size] 6134 6135 ; 29/01/2025 6136 00003B6F C605[87AB0000]01 mov byte [blocks], 1 6137 ; 6138 00003B76 803D[84AB0000]01 cmp byte [audio_hardware], 1 6139 00003B7D 750A jne short .bufaloc 6140 6141 ;mov eax, sample_buffer_size 6142 ; 10/01/2025 6143 ;mov byte [blocks], 16 6144 ; 12/01/2025 6145 ;mov byte [blocks], 8 6146 ;;mov eax, [mp3_samples_output_size] 6147 ;shl eax, 3 ; * 8 6148 ;;shl eax, 4 ; * 16 6149 6150 ; 29/01/2025 6151 00003B7F C025[87AB0000]02 shl byte [blocks], 2 ; 4 6152 00003B86 C1E002 shl eax, 2 ; * 4 6153 .asi@: 6154 ; 12/01/2025 6155 ;cmp eax, 65536 6156 ;jna short .asi@@ 6157 ;sub eax, [mp3_samples_output_size] 6158 ;dec byte [blocks] 6159 ;;; 6160 ; 11/01/2025 6161 ;test byte [blocks], 1 6162 ;jz short .asi@ 6163 ;dec byte [blocks] ; even number 6164 ;sub eax, [mp3_samples_output_size] 6165 ;;; 6166 ;jmp short .asi@ 6167 .asi@@: 6168 ; 29/01/2025 6169 ;cmp byte [audio_hardware], 1 ; SB16 6170 ;jne short .bufaloc 6171 .bufaloc: 6172 ; TRDOS 386 system call 6173 ; sysaudio 6174 ; Allocate audio buffer (for user) 6175 ; ebx = 0200h (BH=2) 6176 ; ecx = buffer size (in bytes) 6177 ; edx = buffer address (virtual) 6178 00003B89 A3[88AB0000] mov [buffer_size], eax 6179 sys _audio, 0200h, eax, sample_buffer 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003B8E BB00020000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00003B93 89C1 <1> mov ecx, %3 106 <1> %if %0 = 4 107 00003B95 BA[00800500] <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003B9A B820000000 <1> mov eax, %1 112 <1> 113 00003B9F CD40 <1> int 40h 6180 00003BA1 722E jc short .init_err 6181 6182 ; 12/01/2025 6183 ; clear audio buffer (before playback) 6184 00003BA3 BF[00800500] mov edi, sample_buffer 6185 ; ecx = buffer size in bytes 6186 00003BA8 C1E902 shr ecx, 2 ; double word 6187 00003BAB 31C0 xor eax, eax 6188 00003BAD F3AB rep stosd 6189 6190 ; TRDOS 386 system call 6191 ; sysaudio 6192 ; Initialize audio device (bh = 3) 6193 ; bl = 01h -> CallBack method 6194 ; edx = Callback service address (virtual) 6195 ; ecx = 0 ; CL = srb value ; not used 6196 sys _audio, 0301h, 0, audio_callback 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003BAF BB01030000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00003BB4 B900000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 00003BB9 BA[073C0000] <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003BBE B820000000 <1> mov eax, %1 112 <1> 113 00003BC3 CD40 <1> int 40h 6197 ; 12/01/2025 6198 ; SRB method (faster than callback method) 6199 ; bl = 0 -> Signal Response Byte method 6200 ; cl = 1 -> SRB set value 6201 ; (will be set by audio IRQ service of the kernel) 6202 ; edx = SRB address -one byte data- 6203 ;sys _audio, 0300h, 1, srb 6204 6205 00003BC5 720A jc short .init_err 6206 6207 ; 24/01/2025 6208 ;retn 6209 6210 00003BC7 A0[C4AA0000] mov al, [volume_level] 6211 ;call SetMasterVolume@ 6212 ;retn 6213 00003BCC E9AE000000 jmp SetMasterVolume@ 6214 6215 .init_err: 6216 init_error: 6217 ; 27/01/2025 6218 00003BD1 E8BB120000 call set_text_mode 6219 6220 ; 16/02/2025 6221 00003BD6 BE[E03B0000] mov esi, txt_audio_init_err 6222 ;call print_err_msg 6223 ;;stc 6224 ;retn 6225 00003BDB E9BC150000 jmp print_err_msg 6226 6227 ; --------------------------------------------------------------------------- 6228 6229 00003BE0 417564696F20686172- txt_audio_init_err: db 'Audio hardware initialization error!',0Dh,0Ah,0 6229 00003BE9 647761726520696E69- 6229 00003BF2 7469616C697A617469- 6229 00003BFB 6F6E206572726F7221- 6229 00003C04 0D0A00 6230 6231 6232 ; =============== S U B R O U T I N E ======================================= 6233 6234 ; 12/01/2025 6235 ; 21/10/2024 6236 audio_callback: 6237 ; Operating system has directed CPU here because of 6238 ; user (2nd) stage of the audio hardware interrupt service. 6239 ; This procedure must be short and return to operating 6240 ; system again via sysrelease system call 6241 ; (or any system call here will be handled as sysrelease). 6242 6243 00003C07 C605[86AB0000]01 mov byte [srb], 1 6244 6245 ; 12/01/2025 6246 00003C0E E82E010000 call try_enqueue_all_blocks 6247 .skip: 6248 sys _rele ; return from callback service 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003C13 B827000000 <1> mov eax, %1 112 <1> 113 00003C18 CD40 <1> int 40h 6249 6250 ; we must not come here ! 6251 00003C1A BBFFFFFFFF mov ebx, -1 6252 sys _exit 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003C1F B801000000 <1> mov eax, %1 112 <1> 113 00003C24 CD40 <1> int 40h 6253 ;jmp short audio_callback 6254 6255 6256 ; =============== S U B R O U T I N E ======================================= 6257 6258 ; 22/01/2025 6259 audio_f_stop: 6260 00003C26 C605[81AB0000]02 mov byte [stopped], 2 6261 6262 ; Stop playing 6263 sys _audio, 0700h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003C2D BB00070000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003C32 B820000000 <1> mov eax, %1 112 <1> 113 00003C37 CD40 <1> int 40h 6264 ; Cancel callback service (for user) 6265 sys _audio, 0900h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003C39 BB00090000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003C3E B820000000 <1> mov eax, %1 112 <1> 113 00003C43 CD40 <1> int 40h 6266 ; Deallocate audio buffer (for user) 6267 sys _audio, 0A00h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003C45 BB000A0000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003C4A B820000000 <1> mov eax, %1 112 <1> 113 00003C4F CD40 <1> int 40h 6268 00003C51 C3 retn 6269 6270 ; 22/01/2025 6271 audio_f_pause: 6272 00003C52 C605[81AB0000]01 mov byte [stopped], 1 ; paused 6273 6274 sys _audio, 0500h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003C59 BB00050000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003C5E B820000000 <1> mov eax, %1 112 <1> 113 00003C63 CD40 <1> int 40h 6275 00003C65 C3 retn 6276 6277 6278 ; 22/01/2025 6279 audio_f_play: ; continue to play (after pause) 6280 6281 00003C66 C605[81AB0000]00 mov byte [stopped], 0 6282 6283 sys _audio, 0600h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003C6D BB00060000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003C72 B820000000 <1> mov eax, %1 112 <1> 113 00003C77 CD40 <1> int 40h 6284 00003C79 C3 retn 6285 6286 ; =============== S U B R O U T I N E ======================================= 6287 6288 ; 22/01/2025 6289 SetMasterVolume: 6290 ;cmp al, 31 6291 ;ja short setvolume_ok 6292 00003C7A A2[C4AA0000] mov [volume_level], al ; max = 0, min = 31 6293 6294 ; 24/01/2025 6295 SetMasterVolume@: 6296 00003C7F B41F mov ah, 31 6297 00003C81 28C4 sub ah, al 6298 00003C83 88E0 mov al, ah 6299 6300 ; Set Master Volume Level (BL=0 or 80h) 6301 ; for next playing (BL>=80h) 6302 ;sys _audio, 0B80h, eax 6303 sys _audio, 0B00h, eax 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003C85 BB000B0000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00003C8A 89C1 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003C8C B820000000 <1> mov eax, %1 112 <1> 113 00003C91 CD40 <1> int 40h 6304 6305 setvolume_ok: 6306 00003C93 C3 retn 6307 6308 ; =============== S U B R O U T I N E ======================================= 6309 6310 ; 17/02/2025 6311 ; 16/02/2025 (tmp3play.s) 6312 ; 13/02/2025 (mp3play6.s) 6313 ; 26/01/2025 6314 ; 23/01/2025 6315 ; 22/01/2025 6316 ; 13/01/2025 6317 ; 12/01/2025 6318 ; 10/01/2025 6319 ; 21/10/2024 6320 mp3_cast_to_speaker: 6321 ; Start to play 6322 ; 17/02/2025 6323 ;mov eax, [mp3_bytes_per_sample] 6324 ;;shr al, 1 ; 8 -> 0, 16 -> 1 6325 ;;shl al, 1 ; 16 -> 2, 8 -> 0 6326 ;and al, 2 ; 22/10/2024 6327 ; 16/02/2025 6328 00003C94 8B1D[C8BB0000] mov ebx, [mp3_num_channels] 6329 00003C9A 4B dec ebx 6330 ;or bl, al 6331 ; 17/02/2025 ([mp3_bytes_per_sample] = 2) 6332 00003C9B 80CB02 or bl, 2 ; 16bit 6333 00003C9E 8B0D[BCBB0000] mov ecx, [mp3_sample_rate] 6334 00003CA4 B704 mov bh, 4 ; start to play 6335 6336 ; 13/01/2025 6337 mp3_cast_to_speaker_@: 6338 00003CA6 53 push ebx 6339 00003CA7 51 push ecx 6340 6341 ; 12/01/2025 6342 ;call try_enqueue_all_blocks 6343 6344 ; 12/01/2025 6345 ;cmp dword [bytes_left],0 6346 ;jz short .playback 6347 6348 ; 12/01/2025 6349 ; (here audio buffer -sample_buffer- is empty) 6350 ; (clear dma half buffer 1) 6351 sys _audio, 1001h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003CA8 BB01100000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003CAD B820000000 <1> mov eax, %1 112 <1> 113 00003CB2 CD40 <1> int 40h 6352 ; (clear dma half buffer 2) 6353 ;sys _audio, 1002h 6354 6355 ; TRDOS 386 system call 6356 ; sysaudio 6357 ; bh = 16 : update (current, first) dma half buffer 6358 ; bl = 0 : then switch to the next (second) half buffer 6359 sys _audio, 1000h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003CB4 BB00100000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003CB9 B820000000 <1> mov eax, %1 112 <1> 113 00003CBE CD40 <1> int 40h 6360 6361 ; 12/01/2025 6362 ; 22/10/2024 6363 ;call try_enqueue_all_blocks 6364 .playback: 6365 00003CC0 59 pop ecx ; sample rate (frequency) 6366 00003CC1 5B pop ebx ; play mode (bl) 6367 6368 ; TRDOS 386 system call 6369 ; sysaudio 6370 ; bh = 4 -> start to play 6371 ; bl = mode -> bit 0, 1 = stereo, 0 = mono 6372 ; bit 1, 1 = 16 bit, 0 = 8 bit 6373 ; cx = sample rate (hertz) 6374 sys _audio 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003CC2 B820000000 <1> mov eax, %1 112 <1> 113 00003CC7 CD40 <1> int 40h 6375 6376 ; 12/01/2025 6377 00003CC9 C605[86AB0000]00 mov byte [srb], 0 6378 ;;; 6379 6380 .playback_lop: 6381 ; 21/01/2025 6382 ;;;; --------------------- 6383 00003CD0 803D[81AB0000]00 cmp byte [stopped], 0 6384 00003CD7 7609 jna short .pb_l_@ 6385 00003CD9 E808100000 call checkUpdateEvents 6386 00003CDE 7230 jc short .playback_end 6387 6388 ; 16/02/2025 6389 00003CE0 EBEE jmp short .playback_lop 6390 .pb_l_@: 6391 ;;;; --------------------- 6392 6393 00003CE2 31C0 xor eax, eax 6394 00003CE4 3905[F04A0500] cmp [bytes_left], eax ; 0 6395 00003CEA 7508 jnz short .playback_next 6396 ; 22/10/2024 6397 00003CEC 3805[35A20000] cmp byte [num_enqueued_frames], al ; 0 6398 00003CF2 741C jz short .playback_end 6399 .playback_next: 6400 00003CF4 A2[35A20000] mov [num_enqueued_frames], al ; 0 6401 00003CF9 803D[86AB0000]01 cmp byte [srb], 1 ; audio interrupt status 6402 ;jb short .getchar 6403 ; 21/01/2025 6404 00003D00 7207 jb short .pb_l_@@ 6405 6406 ;mov byte [srb], 0 ; reset 6407 00003D02 A2[86AB0000] mov [srb], al ; 0 6408 6409 ; 12/01/2025 6410 ;call try_enqueue_all_blocks 6411 6412 ; 16/02/2025 6413 00003D07 EBC7 jmp short .playback_lop 6414 6415 ; 21/01/2025 6416 ;;;; --------------------- 6417 .pb_l_@@: 6418 00003D09 E8D80F0000 call checkUpdateEvents 6419 ;jc short .playback_end 6420 ;jmp short .playback_lop 6421 ; 16/02/2025 6422 00003D0E 73C0 jnc short .playback_lop 6423 6424 ;;;; --------------------- 6425 6426 .playback_end: 6427 ; 16/02/2025 6428 6429 ; TRDOS 386 system call 6430 ; sysaudio 6431 ; Stop playing 6432 sys _audio, 0700h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003D10 BB00070000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003D15 B820000000 <1> mov eax, %1 112 <1> 113 00003D1A CD40 <1> int 40h 6433 ; Cancel callback service (for user) 6434 sys _audio, 0900h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003D1C BB00090000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003D21 B820000000 <1> mov eax, %1 112 <1> 113 00003D26 CD40 <1> int 40h 6435 ; Deallocate audio buffer (for user) 6436 sys _audio, 0A00h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003D28 BB000A0000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003D2D B820000000 <1> mov eax, %1 112 <1> 113 00003D32 CD40 <1> int 40h 6437 ; Disable audio device 6438 sys _audio, 0C00h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003D34 BB000C0000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003D39 B820000000 <1> mov eax, %1 112 <1> 113 00003D3E CD40 <1> int 40h 6439 00003D40 C3 retn 6440 6441 6442 ; =============== S U B R O U T I N E ======================================= 6443 6444 ; 29/01/2025 6445 ; 23/01/2025 6446 ; 13/01/2025 6447 ; 12/01/2025 6448 ; 09/01/2025 6449 ; 21/10/2024 6450 try_enqueue_all_blocks: 6451 ; 12/01/2025 6452 00003D41 60 pusha 6453 00003D42 BF[00800500] mov edi, sample_buffer 6454 ; 10/01/2025 6455 ;jmp short .first_block 6456 ; 13/01/2025 6457 00003D47 EB15 jmp short try_enqueue_all_blocks_@ 6458 ;.next_block: 6459 teab_next_block: 6460 00003D49 833D[F04A0500]00 cmp dword [bytes_left], 0 6461 ;jle short .enqueue_done 6462 ; 13/01/2025 6463 00003D50 7E54 jle short teab_enqueue_done 6464 ; 6465 00003D52 8B3D[7C120100] mov edi, [mp3_samples_dst] 6466 00003D58 033D[80120100] add edi, [mp3_samples_output_size] 6467 6468 try_enqueue_all_blocks_@: 6469 ;.first_block: 6470 ;pusha 6471 00003D5E 8B35[EC4A0500] mov esi, [stream_pos] 6472 00003D64 8B0D[F04A0500] mov ecx, [bytes_left] 6473 00003D6A 31ED xor ebp, ebp 6474 00003D6C E8F8F9FFFF call mp3_decode_frame 6475 ;popa 6476 ;;jc short .enqueue_done 6477 ; 23/01/2025 (ignore error) -forward/backward- 6478 ; 13/01/2025 6479 ;jc short teab_enqueue_done 6480 00003D71 A1[A4BB0000] mov eax, [mp3_src_frame_size] 6481 00003D76 83F800 cmp eax, 0 6482 ;jz short .enqueue_done 6483 ; 13/01/2025 6484 00003D79 742B jz short teab_enqueue_done 6485 00003D7B 0105[EC4A0500] add [stream_pos], eax 6486 00003D81 2905[F04A0500] sub [bytes_left], eax 6487 00003D87 A1[80120100] mov eax, [mp3_samples_output_size] 6488 00003D8C 83F800 cmp eax, 0 6489 ;jz short .next_block 6490 ; 13/01/2025 6491 00003D8F 74B8 jz short teab_next_block 6492 ;.no_error: 6493 00003D91 FE05[35A20000] inc byte [num_enqueued_frames] 6494 ; 6495 00003D97 A0[35A20000] mov al, [num_enqueued_frames] 6496 00003D9C 3A05[87AB0000] cmp al, [blocks] 6497 ;jb short .next_block 6498 ; 13/01/2025 6499 00003DA2 72A5 jb short teab_next_block 6500 teab_rtn: 6501 ;.rtn: 6502 ; 12/01/2025 6503 00003DA4 61 popa 6504 00003DA5 C3 retn 6505 ;.enqueue_done: 6506 teab_enqueue_done: 6507 00003DA6 C705[F04A0500]0000- mov dword [bytes_left], 0 6507 00003DAE 0000 6508 ; 12/01/2025 6509 ;jmp short .rtn 6510 ; 13/01/2025 6511 00003DB0 EBF2 jmp short teab_rtn 6512 6513 ; --------------------------------------------------------------------------- 6514 ; 13/01/2025 - Interpolation procedures for non-VRA AC97 codecs 6515 ; --------------------------------------------------------------------------- 6516 6517 ; =============== S U B R O U T I N E ======================================= 6518 6519 ; 18/02/2025 6520 ; 17/02/2025 6521 ; 16/02/2025 6522 ; 30/01/2025 6523 ; 27/01/2025 6524 ; 26/01/2025 6525 ; 15/01/2025 6526 ; 14/01/2025 6527 ; 13/01/2025 6528 audio_system_init_x: 6529 00003DB2 8B0D[80120100] mov ecx, [mp3_samples_output_size] 6530 ;;; 6531 ; 15/01/2025 6532 00003DB8 89C8 mov eax, ecx 6533 ;mov [loadsize], ecx 6534 ;;; 6535 ; 15/01/2025 6536 ;shl ecx, 3 ; * 8 ; 8 blocks 6537 ; 14/01/2025 6538 ;mov byte [blocks], 8 6539 6540 00003DBA 803D[98AB0000]02 cmp byte [interpolation], 2 6541 00003DC1 731F jnb short .chk_sample_rate ; interpolation needed 6542 6543 ; 48 kHZ with 16 bit stereo conversion 6544 ; 6545 ; selected output is 6546 ; 8bit stereo or 16bit mono or 8bit mono 6547 ; (but AC97 hardware needs 16bit stereo samples) 6548 6549 ; 15/01/2025 6550 ;mov eax, ecx 6551 00003DC3 D1E0 shl eax, 1 ; * 2 (mono to stereo) 6552 6553 ; 18/02/2025 6554 ; 17/02/2025 6555 00003DC5 BB[59400000] mov ebx, convert_to_stereo 6556 6557 ; 17/02/2025 6558 ;cmp byte [mp3_bytes_per_sample], 2 6559 ;je short .set_sizes ; 16bit mono 6560 00003DCA EB00 jmp .set_sizes 6561 6562 ; 17/02/2025 6563 ; [mp3_bytes_per_sample] = 2 6564 ; 16bit mono or 16bit stereo 6565 ; (but 16bit stereo does not need conversion here) 6566 6567 ;; 8bit output (16bit conversion is neeed) 6568 ;mov ebx, convert_to_16bit 6569 ;; 16/02/2025 6570 ;cmp byte [mp3_num_channels], 2 6571 ;je short .set_sizes ; 8bit stereo 6572 ;; 8bit mono output 6573 ;;shr ecx, 1 ; / 2 ; 4 blocks 6574 ;; 14/01/2025 6575 ;shl eax, 1 6576 ;; 14/01/2025 6577 ;;shr byte [blocks], 1 6578 ;mov ebx, convert_to_stereo_16bit 6579 .set_sizes: 6580 .set_sizes_@: 6581 ; 18/02/2025 6582 00003DCC 891D[90AB0000] mov [conversion], ebx 6583 00003DD2 890D[94AB0000] mov [loadsize], ecx 6584 ;;; 6585 ; 14/01/2025 6586 ; align to 16bit stereo (if there is a defect) 6587 ; 15/01/2025 6588 ;and al, ~3 6589 00003DD8 A3[88AB0000] mov [buffer_size], eax 6590 00003DDD E981010000 jmp .asix_@ 6591 ; 13/01/2025 6592 ; ---------------------------- 6593 ; ref: playwav9.s - 18/12/2024 6594 .chk_sample_rate: 6595 ; set interpolation parameters 6596 ; (for 8, 11.025, 16, 22.050, 24, 32, 44.1 kHZ) 6597 ; 16/02/2025 6598 00003DE2 A1[BCBB0000] mov eax, [mp3_sample_rate] 6599 ; ecx = 8 * [mp3_samples_output_size] ; 8 blocks 6600 .chk_44khz: 6601 00003DE7 3D44AC0000 cmp eax, 44100 6602 00003DEC 7527 jne short .chk_32khz 6603 ; 30/01/2025 6604 00003DEE B819000000 mov eax, 25 ; * 6605 ; 17/02/2025 6606 ;cmp byte [mp3_bytes_per_sample], 1 6607 ;jna short .chk_44khz_1 6608 00003DF3 BB[A0460000] mov ebx, load_44khz_stereo_16_bit 6609 ; 16/02/2025 6610 00003DF8 803D[C8BB0000]01 cmp byte [mp3_num_channels], 1 6611 00003DFF 7509 jne short .chk_44khz_2 6612 00003E01 BB[54460000] mov ebx, load_44khz_mono_16_bit 6613 ;jmp short .chk_44khz_2 6614 ; 30/01/2025 6615 00003E06 EB00 jmp short .chk_44khz_3 6616 .chk_44khz_1: 6617 ; 17/02/2025 6618 ; [mp3_bytes_per_sample] = 2 6619 ;; 30/01/2025 6620 ;shl eax, 1 6621 ;mov ebx, load_44khz_stereo_8_bit 6622 ;; 16/02/2025 6623 ;cmp byte [mp3_num_channels], 1 6624 ;jne short .chk_44khz_2 6625 ;mov ebx, load_44khz_mono_8_bit 6626 .chk_44khz_3: 6627 ; 30/01/2025 6628 00003E08 D1E0 shl eax, 1 6629 .chk_44khz_2: 6630 ; 48000/44100 == 25/23 6631 00003E0A BD17000000 mov ebp, 23 6632 ;mov eax, 25 ; * 6633 00003E0F F7E1 mul ecx ; load (decoding buffer) size 6634 00003E11 F7F5 div ebp 6635 ;; eax = wav output buffer size 6636 ; 15/01/2025 6637 ; eax = 1 block output (converted) size 6638 00003E13 EBB7 jmp short .set_sizes 6639 6640 ; 15/01/2025 6641 ; ;;; 6642 ; ; 14/01/2025 6643 ;.set_sizes_@: 6644 ; cmp ecx, 4608 6645 ; ;ja short .set_sizes 6646 ; ; 15/01/2025 6647 ; jnb short .set_sizes 6648 ; ;shl ecx, 1 6649 ; ; ecx = [mp3_samples_output_size] 6650 ; shl byte [blocks], 1 6651 ; ; 15/01/2025 6652 ; ;shl eax, 1 6653 ; ;jmp short .set_sizes_@ 6654 ; jmp .set_sizes 6655 ;;; 6656 .chk_32khz: 6657 00003E15 3D007D0000 cmp eax, 32000 6658 00003E1A 7522 jne short .chk_24khz 6659 ; 30/01/2025 6660 00003E1C B803000000 mov eax, 3 ; * 6661 ; 17/02/2025 6662 ;cmp byte [mp3_bytes_per_sample], 1 6663 ;jna short .chk_32khz_1 6664 00003E21 BB[36440000] mov ebx, load_32khz_stereo_16_bit 6665 ; 16/02/2025 6666 00003E26 803D[C8BB0000]01 cmp byte [mp3_num_channels], 1 6667 00003E2D 7509 jne short .chk_32khz_2 6668 00003E2F BB[F6430000] mov ebx, load_32khz_mono_16_bit 6669 ;jmp short .chk_32khz_2 6670 ; 30/01/2025 6671 00003E34 EB00 jmp short .chk_32khz_3 6672 .chk_32khz_1: 6673 ; 17/02/2025 6674 ; [mp3_bytes_per_sample] = 2 6675 ;; 30/01/2025 6676 ;shl eax, 1 6677 ;mov ebx, load_32khz_stereo_8_bit 6678 ;; 16/02/2025 6679 ;cmp byte [mp3_num_channels], 1 6680 ;jne short .chk_32khz_2 6681 ;mov ebx, load_32khz_mono_8_bit 6682 .chk_32khz_3: 6683 ; 30/01/2025 6684 00003E36 D1E0 shl eax, 1 6685 .chk_32khz_2: 6686 ; 48000/32000 = 3/2 6687 ;mov eax, 3 ; * 6688 00003E38 F7E1 mul ecx ; *3 6689 ;mov eax, ecx 6690 ;add eax, eax 6691 ;add eax, ecx 6692 00003E3A D1E8 shr eax, 1 ; /2 6693 00003E3C EB8E jmp .set_sizes 6694 .chk_24khz: 6695 00003E3E 3DC05D0000 cmp eax, 24000 6696 00003E43 7520 jne short .chk_22khz 6697 ; 30/01/2025 6698 00003E45 89C8 mov eax, ecx ; * 6699 ; 17/02/2025 6700 ;cmp byte [mp3_bytes_per_sample], 1 6701 ;jna short .chk_24khz_1 6702 ; 14/01/2025 6703 ; bx -> ebx 6704 ; (BugFix, 'playwav9.s' has a bug here) 6705 00003E47 BB[94430000] mov ebx, load_24khz_stereo_16_bit 6706 ; 16/02/2025 6707 00003E4C 803D[C8BB0000]01 cmp byte [mp3_num_channels], 1 6708 00003E53 7509 jne short .chk_24khz_2 6709 00003E55 BB[58430000] mov ebx, load_24khz_mono_16_bit 6710 ;jmp short .chk_24khz_2 6711 ; 30/01/2025 6712 00003E5A EB00 jmp short .chk_24khz_3 6713 .chk_24khz_1: 6714 ; 17/02/2025 6715 ; [mp3_bytes_per_sample] = 2 6716 ;; 30/01/2025 6717 ;shl eax, 1 6718 ;mov ebx, load_24khz_stereo_8_bit 6719 ;; 16/02/2025 6720 ;cmp byte [mp3_num_channels], 1 6721 ;jne short .chk_24khz_2 6722 ;mov ebx, load_24khz_mono_8_bit 6723 .chk_24khz_3: 6724 ; 30/01/2025 6725 00003E5C D1E0 shl eax, 1 6726 .chk_24khz_2: 6727 ; 48000/24000 = 2/1 6728 ;mov eax, ecx ; * 6729 00003E5E D1E0 shl eax, 1 6730 00003E60 E967FFFFFF jmp .set_sizes_@ 6731 .chk_22khz: 6732 00003E65 3D22560000 cmp eax, 22050 6733 00003E6A 752A jne short .chk_16khz 6734 ; 30/01/2025 6735 00003E6C B825000000 mov eax, 37 ; * 6736 ; 17/02/2025 6737 ;cmp byte [mp3_bytes_per_sample], 1 6738 ;jna short .chk_22khz_1 6739 00003E71 BB[04450000] mov ebx, load_22khz_stereo_16_bit 6740 ; 16/02/2025 6741 00003E76 803D[C8BB0000]01 cmp byte [mp3_num_channels], 1 6742 00003E7D 7509 jne short .chk_22khz_2 6743 00003E7F BB[A1440000] mov ebx, load_22khz_mono_16_bit 6744 ;jmp short .chk_22khz_2 6745 ; 30/01/2025 6746 00003E84 EB00 jmp short .chk_22khz_3 6747 .chk_22khz_1: 6748 ; 17/02/2025 6749 ; [mp3_bytes_per_sample] = 2 6750 ;; 30/01/2025 6751 ;shl eax, 1 6752 ;mov ebx, load_22khz_stereo_8_bit 6753 ;; 16/02/2025 6754 ;cmp byte [mp3_num_channels], 1 6755 ;jne short .chk_22khz_2 6756 ;mov ebx, load_22khz_mono_8_bit 6757 .chk_22khz_3: 6758 ; 30/01/2025 6759 00003E86 D1E0 shl eax, 1 6760 .chk_22khz_2: 6761 ; 48000/22050 == 37/17 6762 00003E88 BD11000000 mov ebp, 17 6763 ;mov eax, 37 ; * 6764 00003E8D F7E1 mul ecx ; load (decoding buffer) size 6765 00003E8F F7F5 div ebp 6766 ;; eax = wav output buffer size 6767 ; 15/01/2025 6768 ; eax = 1 block output (converted) size 6769 00003E91 E936FFFFFF jmp .set_sizes_@ 6770 .chk_16khz: 6771 00003E96 3D803E0000 cmp eax, 16000 6772 00003E9B 7522 jne short .chk_11khz 6773 ; 30/01/2025 6774 00003E9D 89C8 mov eax, ecx ; * 6775 00003E9F D1E0 shl eax, 1 6776 00003EA1 01C8 add eax, ecx 6777 ; 17/02/2025 6778 ;cmp byte [mp3_bytes_per_sample], 1 6779 ;jna short .chk_16khz_1 6780 00003EA3 BB[A7420000] mov ebx, load_16khz_stereo_16_bit 6781 ; 16/02/2025 6782 00003EA8 803D[C8BB0000]01 cmp byte [mp3_num_channels], 1 6783 00003EAF 7509 jne short .chk_16khz_2 6784 00003EB1 BB[50420000] mov ebx, load_16khz_mono_16_bit 6785 ;jmp short .chk_16khz_2 6786 ; 30/01/2025 6787 00003EB6 EB00 jmp short .chk_16khz_3 6788 .chk_16khz_1: 6789 ; 17/02/2025 6790 ; [mp3_bytes_per_sample] = 2 6791 ;; 30/01/2025 6792 ;shl eax, 1 6793 ;mov ebx, load_16khz_stereo_8_bit 6794 ;; 16/02/2025 6795 ;cmp byte [mp3_num_channels], 1 6796 ;jne short .chk_16khz_2 6797 ;mov ebx, load_16khz_mono_8_bit 6798 .chk_16khz_3: 6799 ; 30/01/2025 6800 00003EB8 D1E0 shl eax, 1 6801 .chk_16khz_2: 6802 ; 48000/16000 = 3/1 6803 ;mov eax, ecx ; * 6804 ;shl eax, 1 6805 ;;add eax, eax 6806 ;add eax, ecx 6807 00003EBA E90DFFFFFF jmp .set_sizes_@ 6808 .chk_11khz: 6809 00003EBF 3D112B0000 cmp eax, 11025 6810 00003EC4 752A jne short .chk_8khz 6811 ; 30/01/2025 6812 00003EC6 B84A000000 mov eax, 74 6813 ; 17/02/2025 6814 ;cmp byte [mp3_bytes_per_sample], 1 6815 ;jna short .chk_11khz_1 6816 00003ECB BB[E4450000] mov ebx, load_11khz_stereo_16_bit 6817 ; 16/02/2025 6818 00003ED0 803D[C8BB0000]01 cmp byte [mp3_num_channels], 1 6819 00003ED7 7509 jne short .chk_11khz_2 6820 00003ED9 BB[90450000] mov ebx, load_11khz_mono_16_bit 6821 ;jmp short .chk_11khz_2 6822 ; 30/01/2025 6823 00003EDE EB00 jmp short .chk_11khz_3 6824 .chk_11khz_1: 6825 ; 17/02/2025 6826 ; [mp3_bytes_per_sample] = 2 6827 ;; 30/01/2025 6828 ;shl eax, 1 6829 ;mov ebx, load_11khz_stereo_8_bit 6830 ;; 16/02/2025 6831 ;cmp byte [mp3_num_channels], 1 6832 ;jne short .chk_11khz_2 6833 ;mov ebx, load_11khz_mono_8_bit 6834 .chk_11khz_3: 6835 ; 30/01/2025 6836 00003EE0 D1E0 shl eax, 1 6837 .chk_11khz_2: 6838 ; 48000/11025 == 74/17 6839 ; 14/01/2025 6840 ;shr ecx, 1 ; 4 blocks 6841 ;shr byte [blocks], 1 6842 00003EE2 BD11000000 mov ebp, 17 6843 ;mov eax, 74 ; * 6844 00003EE7 F7E1 mul ecx ; load (decoding buffer) size 6845 00003EE9 F7F5 div ebp 6846 ;; eax = wav output buffer size 6847 ; 15/01/2025 6848 ; eax = 1 block output (converted) size 6849 00003EEB E9DCFEFFFF jmp .set_sizes_@ 6850 .chk_8khz: 6851 00003EF0 3D401F0000 cmp eax, 8000 6852 ;jne short .vra_needed 6853 ; 01/02/2025 6854 00003EF5 7523 jne short .chk_12khz 6855 ; 30/01/2025 6856 00003EF7 B806000000 mov eax, 6 ; * 6857 ; 17/02/2025 6858 ;cmp byte [mp3_bytes_per_sample], 1 6859 ;jna short .chk_8khz_1 6860 00003EFC BB[2A410000] mov ebx, load_8khz_stereo_16_bit 6861 ; 16/02/2025 6862 00003F01 803D[C8BB0000]01 cmp byte [mp3_num_channels], 1 6863 00003F08 7509 jne short .chk_8khz_2 6864 00003F0A BB[88400000] mov ebx, load_8khz_mono_16_bit 6865 ;jmp short .chk_8khz_2 6866 ; 30/01/2025 6867 00003F0F EB00 jmp short .chk_8khz_3 6868 .chk_8khz_1: 6869 ; 17/02/2025 6870 ; [mp3_bytes_per_sample] = 2 6871 ;; 30/01/2025 6872 ;shl eax, 1 6873 ;mov ebx, load_8khz_stereo_8_bit 6874 ;; 16/02/2025 6875 ;cmp byte [mp3_num_channels], 1 6876 ;jne short .chk_8khz_2 6877 ;mov ebx, load_8khz_mono_8_bit 6878 .chk_8khz_3: 6879 ; 30/01/2025 6880 00003F11 D1E0 shl eax, 1 6881 .chk_8khz_2: 6882 ;mov eax, 6 ; * 6883 00003F13 F7E1 mul ecx 6884 00003F15 E9B2FEFFFF jmp .set_sizes_@ 6885 6886 ;;;; 6887 ; 01/02/2025 6888 .chk_12khz: 6889 00003F1A 3DE02E0000 cmp eax, 12000 6890 00003F1F 7521 jne short .vra_needed 6891 00003F21 89C8 mov eax, ecx ; * 6892 ; 17/02/2025 6893 ;cmp byte [mp3_bytes_per_sample], 1 6894 ;jna short .chk_12khz_1 6895 00003F23 BB[3E470000] mov ebx, load_12khz_stereo_16_bit 6896 ; 16/02/2025 6897 00003F28 803D[C8BB0000]01 cmp byte [mp3_num_channels], 1 6898 00003F2F 7509 jne short .chk_12khz_2 6899 00003F31 BB[14470000] mov ebx, load_12khz_mono_16_bit 6900 00003F36 EB00 jmp short .chk_12khz_3 6901 .chk_12khz_1: 6902 ; 17/02/2025 6903 ; [mp3_bytes_per_sample] = 2 6904 ;; 01/02/2025 6905 ;shl eax, 1 6906 ;mov ebx, load_12khz_stereo_8_bit 6907 ;; 16/02/2025 6908 ;cmp byte [mp3_num_channels], 1 6909 ;jne short .chk_12khz_2 6910 ;mov ebx, load_12khz_mono_8_bit 6911 .chk_12khz_3: 6912 00003F38 D1E0 shl eax, 1 6913 .chk_12khz_2: 6914 ; 48000/12000 = 4/1 6915 ;mov eax, ecx ; * 6916 00003F3A C1E002 shl eax, 2 6917 00003F3D E98AFEFFFF jmp .set_sizes_@ 6918 ;;;; 6919 6920 .vra_needed: 6921 00003F42 58 pop eax ; discard return address to the caller 6922 .vra_err: 6923 ; 27/01/2025 6924 00003F43 E8490F0000 call set_text_mode 6925 ; 6926 sys _msg, msg_no_vra, 255, 0Fh 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003F48 BB[AD4C0000] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00003F4D B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 00003F52 BA0F000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003F57 B823000000 <1> mov eax, %1 112 <1> 113 00003F5C CD40 <1> int 40h 6927 ;jmp ExitProcess 6928 ; 27/01/2025 6929 00003F5E E927FBFFFF jmp ExitProcess@ 6930 6931 .asix_@: 6932 ; TRDOS 386 system call 6933 ; sysaudio 6934 ; Allocate audio buffer (for user) 6935 ; ebx = 0200h (BH=2) 6936 ; ecx = buffer size (in bytes) 6937 ; edx = buffer address (virtual) 6938 6939 sys _audio, 0200h, [buffer_size], sample_buffer 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003F63 BB00020000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00003F68 8B0D[88AB0000] <1> mov ecx, %3 106 <1> %if %0 = 4 107 00003F6E BA[00800500] <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003F73 B820000000 <1> mov eax, %1 112 <1> 113 00003F78 CD40 <1> int 40h 6940 00003F7A 7231 jc short .init_err 6941 6942 ; 12/01/2025 6943 ; clear audio buffer (before playback) 6944 00003F7C BF[00800500] mov edi, sample_buffer 6945 ; ecx = buffer size in bytes 6946 00003F81 83C103 add ecx, 3 ; 13/01/2025 6947 00003F84 C1E902 shr ecx, 2 6948 00003F87 31C0 xor eax, eax 6949 00003F89 F3AB rep stosd 6950 6951 ; TRDOS 386 system call 6952 ; sysaudio 6953 ; Initialize audio device (bh = 3) 6954 ; bl = 01h -> CallBack method 6955 ; edx = Callback service address (virtual) 6956 ; ecx = 0 ; CL = srb value ; not used 6957 sys _audio, 0301h, 0, audio_callback_x ; 13/01/2025 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00003F8B BB01030000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00003F90 B900000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 00003F95 BA[3A400000] <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00003F9A B820000000 <1> mov eax, %1 112 <1> 113 00003F9F CD40 <1> int 40h 6958 ; 12/01/2025 6959 ; SRB method (faster than callback method) 6960 ; bl = 0 -> Signal Response Byte method 6961 ; cl = 1 -> SRB set value 6962 ; (will be set by audio IRQ service of the kernel) 6963 ; edx = SRB address -one byte data- 6964 ;sys _audio, 0300h, 1, srb 6965 00003FA1 720A jc short .init_err 6966 6967 ; 27/01/2025 6968 ; ; 26/01/2025 6969 ; ; Map system DMA buffer to user's memory space 6970 ; ; (for -fast- sound data graphics display) 6971 ; mov eax, [buffer_size] 6972 ; shl eax, 1 ; dma buff size is 2 * user's buff size 6973 ; sys _audio, 0D00h, eax, dmabuffer 6974 6975 ; 24/01/2025 6976 ;retn 6977 00003FA3 A0[C4AA0000] mov al, [volume_level] 6978 ;call SetMasterVolume@ 6979 ;retn 6980 00003FA8 E9D2FCFFFF jmp SetMasterVolume@ 6981 6982 .init_err: 6983 00003FAD E91FFCFFFF jmp init_error 6984 6985 6986 ; =============== S U B R O U T I N E ======================================= 6987 6988 ; 15/02/2025 6989 ; 14/01/2025 6990 ; 13/01/2025 6991 mp3_cast_to_speaker_x: 6992 ; 48 kHZ, 16bit, stereo 6993 00003FB2 BB03040000 mov ebx, 0403h 6994 00003FB7 B980BB0000 mov ecx, 48000 6995 ; 14/01/2025 6996 00003FBC 803D[85AB0000]01 cmp byte [vra], 1 6997 00003FC3 7206 jb short .jmpto@ 6998 ; 15/02/2025 6999 00003FC5 8B0D[BCBB0000] mov ecx, [mp3_sample_rate] 7000 .jmpto@: 7001 00003FCB E9D6FCFFFF jmp mp3_cast_to_speaker_@ 7002 7003 7004 ; =============== S U B R O U T I N E ======================================= 7005 7006 ; 18/02/2025 7007 ; 17/02/2025 7008 ; 23/01/2025 7009 ; 15/01/2025 7010 ; 13/01/2025 7011 try_enqueue_all_blocks_x: 7012 ; 12/01/2025 7013 00003FD0 60 pusha 7014 00003FD1 BF[00600500] mov edi, decoding_buffer 7015 ; 15/01/2025 7016 ;jmp try_enqueue_all_blocks_@ 7017 00003FD6 EB15 jmp short .first_block 7018 7019 ; 15/01/2025 7020 .next_block: 7021 00003FD8 833D[F04A0500]00 cmp dword [bytes_left], 0 7022 00003FDF 7E4D jle short .enqueue_done 7023 ; 7024 00003FE1 8B3D[7C120100] mov edi, [mp3_samples_dst] 7025 00003FE7 033D[80120100] add edi, [mp3_samples_output_size] 7026 7027 ;try_enqueue_all_blocks_@: 7028 .first_block: 7029 ;;pusha 7030 00003FED 8B35[EC4A0500] mov esi, [stream_pos] 7031 00003FF3 8B0D[F04A0500] mov ecx, [bytes_left] 7032 00003FF9 31ED xor ebp, ebp 7033 00003FFB E869F7FFFF call mp3_decode_frame 7034 ;;popa 7035 ; 23/01/2025 (ignore error) -forward/backward- 7036 ;jc short .enqueue_done 7037 7038 00004000 A1[A4BB0000] mov eax, [mp3_src_frame_size] 7039 00004005 83F800 cmp eax, 0 7040 00004008 7424 jz short .enqueue_done 7041 0000400A 0105[EC4A0500] add [stream_pos], eax 7042 00004010 2905[F04A0500] sub [bytes_left], eax 7043 7044 00004016 A1[80120100] mov eax, [mp3_samples_output_size] 7045 0000401B 83F800 cmp eax, 0 7046 0000401E 74B8 jz short .next_block 7047 7048 ; 18/02/2025 7049 ; 15/01/2025 7050 00004020 FF15[90AB0000] call dword [conversion] 7051 ; 17/02/2025 (only one option = 16bit mono) 7052 ;call convert_to_stereo 7053 7054 .no_error: 7055 ; 15/01/2025 7056 00004026 FE05[35A20000] inc byte [num_enqueued_frames] 7057 .rtn: 7058 ; 12/01/2025 7059 0000402C 61 popa 7060 0000402D C3 retn 7061 .enqueue_done: 7062 0000402E C705[F04A0500]0000- mov dword [bytes_left], 0 7062 00004036 0000 7063 ; 12/01/2025 7064 00004038 EBF2 jmp short .rtn 7065 7066 7067 ; =============== S U B R O U T I N E ======================================= 7068 7069 ; 13/01/2025 7070 audio_callback_x: 7071 ; Operating system has directed CPU here because of 7072 ; user (2nd) stage of the audio hardware interrupt service. 7073 ; This procedure must be short and return to operating 7074 ; system again via sysrelease system call 7075 ; (or any system call here will be handled as sysrelease). 7076 7077 0000403A C605[86AB0000]01 mov byte [srb], 1 7078 7079 00004041 E88AFFFFFF call try_enqueue_all_blocks_x 7080 7081 ; 15/01/2025 7082 ;call dword [conversion] 7083 7084 sys _rele ; return from callback service 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00004046 B827000000 <1> mov eax, %1 112 <1> 113 0000404B CD40 <1> int 40h 7085 7086 ; we must not come here ! 7087 0000404D BBFFFFFFFF mov ebx, -1 7088 sys _exit 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00004052 B801000000 <1> mov eax, %1 112 <1> 113 00004057 CD40 <1> int 40h 7089 ;jmp short audio_callback 7090 7091 7092 ; --------------------------------------------------------------------------- 7093 ; 13/01/2025 - Interpolation procedures for non-VRA AC97 codecs 7094 ; --------------------------------------------------------------------------- 7095 ; ref: playwav9.s - 18/12/2025 7096 7097 ; =============== S U B R O U T I N E ======================================= 7098 7099 ; 13/01/2025 7100 ; -------------------------------------------------------- 7101 ; 48 kHZ conversion procedures 7102 ; -------------------------------------------------------- 7103 ; convert_to_stereo: convert 16bit mono samples to 16bit stereo 7104 ; convert_to_16bit: convert 8bit stereo samples to 16bit stereo 7105 ; convert_to_stereo_16bit: convert 8bit mono samples to 16bit & stereo 7106 ; [loadsize] = decoding buffer size 7107 ; [buffer_size] = wav output buffer size (<= 64KB) 7108 7109 ; ///// 7110 7111 ; 13/01/2025 7112 convert_to_stereo: 7113 00004059 BE[00600500] mov esi, decoding_buffer ; (contains 16bit mono samples) 7114 0000405E BF[00800500] mov edi, sample_buffer ; wav output buffer 7115 00004063 8B0D[94AB0000] mov ecx, [loadsize] 7116 00004069 D1E9 shr ecx, 1 ; word count 7117 cts_1: 7118 0000406B 66AD lodsw 7119 0000406D 66AB stosw ; left channel 7120 0000406F 66AB stosw ; right channel 7121 00004071 E2F8 loop cts_1 7122 cts_2: 7123 ; padfill 7124 00004073 8B0D[88AB0000] mov ecx, [buffer_size] 7125 00004079 81C1[00800500] add ecx, sample_buffer 7126 0000407F 29F9 sub ecx, edi 7127 00004081 7604 jna short cts_3 7128 00004083 31C0 xor eax, eax 7129 00004085 F3AA rep stosb 7130 cts_3: 7131 00004087 C3 retn 7132 7133 ; ///// 7134 7135 ; 17/02/2025 7136 %if 0 7137 7138 ; 13/01/2025 7139 convert_to_16bit: 7140 mov esi, decoding_buffer ; (contains 8bit stereo samples) 7141 mov edi, sample_buffer ; wav output buffer 7142 mov ecx, [loadsize] 7143 ct16b_1: 7144 ; stereo & 8 bit 7145 lodsb 7146 sub al, 80h ; 08/11/2023 7147 shl eax, 8 ; convert 8 bit sample to 16 bit sample 7148 stosw 7149 loop ct16b_1 7150 jmp short cts_2 7151 7152 ; ///// 7153 7154 ; 13/01/2025 7155 convert_to_stereo_16bit: 7156 mov esi, decoding_buffer ; (contains 8bit mono samples) 7157 mov edi, sample_buffer ; wav output buffer 7158 mov ecx, [loadsize] 7159 cts16b_1: 7160 ; mono & 8 bit 7161 lodsb 7162 sub al, 80h ; 08/11/2023 7163 shl eax, 8 ; convert 8 bit sample to 16 bit sample 7164 stosw ; left channel 7165 stosw ; right channel 7166 loop cts16b_1 7167 jmp short cts_2 7168 7169 ; ///// 7170 7171 %endif 7172 7173 ; =============== S U B R O U T I N E ======================================= 7174 7175 ; -------------------------------------------------------- 7176 ; 13/01/2025 7177 ; -------------------------------------------------------- 7178 7179 ; 17/02/2025 - tmp3play.s 7180 ; 16bit stereo or 16bit mono playback 7181 ; 13/01/2025 - mp3player modifications (mp3play3.s) 7182 ; 07/12/2024 - playwav9.s 7183 ; 01/12/2024 - ac97play.s 7184 ; 29/05/2024 7185 ; 26/11/2023 7186 ; 25/11/2023 - playwav6.s (32 bit registers, TRDOS 386 adaption) 7187 ; 15/11/2023 - PLAYWAV5.COM, ich_wav5.asm 7188 ; 14/11/2023 7189 ; 13/11/2023 - Erdogan Tan - (VRA, sample rate conversion) 7190 ; -------------------------------------------------------- 7191 7192 ;;Note: At the end of every buffer load, 7193 ;; during buffer switch/swap, there will be discontinuity 7194 ;; between the last converted sample and the 1st sample 7195 ;; of the next buffer. 7196 ;; (like as a dot noises vaguely between normal sound samples) 7197 ;; -To avoid this defect, the 1st sample of 7198 ;; the next buffer may be read from the wav file but 7199 ;; the file pointer would need to be set to 1 sample back 7200 ;; again via seek system call. Time comsumption problem! - 7201 ;; 7202 ;; Erdogan Tan - 15/11/2023 7203 ;; 7204 ;; ((If entire wav data would be loaded at once.. conversion 7205 ;; defect/noise would disappear.. but for DOS, to keep 7206 ;; 64KB buffer limit is important also it is important 7207 ;; for running under 1MB barrier without HIMEM.SYS or DPMI. 7208 ;; I have tested this program by using 2-30MB wav files.)) 7209 ;; 7210 ;; Test Computer: ASUS desktop/mainboard, M2N4-SLI, 2010. 7211 ;; AMD Athlon 64 X2 2200 MHZ CPU. 7212 ;; NFORCE4 (CK804) AC97 audio hardware. 7213 ;; Realtek ALC850 codec. 7214 ;; Retro DOS v4.2 (MSDOS 6.22) operating system. 7215 7216 ; =============== S U B R O U T I N E ======================================= 7217 7218 load_8khz_mono_16_bit: 7219 ; 13/01/2025 (mp3play3.s) 7220 00004088 BE[00600500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 7221 0000408D BF[00800500] mov edi, sample_buffer ; wav output buffer 7222 00004092 8B0D[94AB0000] mov ecx, [loadsize] 7223 ; 13/01/2025 7224 00004098 D1E9 shr ecx, 1 ; word count 7225 lff8m2_1: 7226 0000409A 66AD lodsw 7227 0000409C 66AB stosw ; original sample (left channel) 7228 0000409E 66AB stosw ; original sample (right channel) 7229 000040A0 80C480 add ah, 80h ; convert sound level to 0-65535 format 7230 000040A3 66A3[324A0000] mov [previous_val], ax 7231 000040A9 31C0 xor eax, eax 7232 000040AB 49 dec ecx 7233 000040AC 7403 jz short lff8m2_2 7234 000040AE 668B06 mov ax, [esi] 7235 lff8m2_2: 7236 000040B1 80C480 add ah, 80h ; convert sound level to 0-65535 format 7237 000040B4 89C5 mov ebp, eax ; [next_val] 7238 000040B6 660305[324A0000] add ax, [previous_val] 7239 000040BD 66D1D8 rcr ax, 1 7240 000040C0 89C2 mov edx, eax ; this is interpolated middle (3th) sample 7241 000040C2 660305[324A0000] add ax, [previous_val] 7242 000040C9 66D1D8 rcr ax, 1 ; this is temporary interpolation value 7243 000040CC 89C3 mov ebx, eax 7244 000040CE 660305[324A0000] add ax, [previous_val] 7245 000040D5 66D1D8 rcr ax, 1 7246 000040D8 80EC80 sub ah, 80h ; -32768 to +32767 format again 7247 000040DB 66AB stosw ; this is 1st interpolated sample (L) 7248 000040DD 66AB stosw ; this is 1st interpolated sample (R) 7249 000040DF 89D8 mov eax, ebx 7250 000040E1 6601D0 add ax, dx 7251 000040E4 66D1D8 rcr ax, 1 7252 000040E7 80EC80 sub ah, 80h 7253 000040EA 66AB stosw ; this is 2nd interpolated sample (L) 7254 000040EC 66AB stosw ; this is 2nd interpolated sample (R) 7255 000040EE 89D0 mov eax, edx 7256 000040F0 80EC80 sub ah, 80h ; -32768 to +32767 format again 7257 000040F3 66AB stosw ; this is middle (3th) interpolated sample (L) 7258 000040F5 66AB stosw ; this is middle (3th) interpolated sample (R) 7259 000040F7 89E8 mov eax, ebp 7260 000040F9 6601D0 add ax, dx 7261 000040FC 66D1D8 rcr ax, 1 7262 000040FF 89C3 mov ebx, eax ; this is temporary interpolation value 7263 00004101 6601D0 add ax, dx 7264 00004104 66D1D8 rcr ax, 1 7265 00004107 80EC80 sub ah, 80h 7266 0000410A 66AB stosw ; this is 4th interpolated sample (L) 7267 0000410C 66AB stosw ; this is 4th interpolated sample (R) 7268 0000410E 89E8 mov eax, ebp 7269 00004110 6601D8 add ax, bx 7270 00004113 66D1D8 rcr ax, 1 7271 00004116 80EC80 sub ah, 80h ; -32768 to +32767 format again 7272 00004119 66AB stosw ; this is 5th interpolated sample (L) 7273 0000411B 66AB stosw ; this is 5th interpolated sample (R) 7274 ; 8 kHZ mono to 48 kHZ stereo conversion of the sample is OK 7275 0000411D 09C9 or ecx, ecx 7276 0000411F 0F8575FFFFFF jnz lff8m2_1 7277 ;jmp lff8m2_3 7278 ; 17/02/2025 7279 00004125 E9D0050000 jmp lff8_3 7280 7281 ; =============== S U B R O U T I N E ======================================= 7282 7283 load_8khz_stereo_16_bit: 7284 ; 13/01/2025 (mp3play3.s) 7285 0000412A BE[00600500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 7286 0000412F BF[00800500] mov edi, sample_buffer ; wav output buffer 7287 00004134 8B0D[94AB0000] mov ecx, [loadsize] 7288 ; 13/01/2025 7289 0000413A C1E902 shr ecx, 2 ; dword count 7290 lff8s2_1: 7291 0000413D 66AD lodsw 7292 0000413F 66AB stosw ; original sample (L) 7293 ; 15/11/2023 7294 00004141 80C480 add ah, 80h ; convert sound level to 0-65535 format 7295 00004144 66A3[324A0000] mov [previous_val_l], ax 7296 0000414A 66AD lodsw 7297 0000414C 66AB stosw ; original sample (R) 7298 0000414E 80C480 add ah, 80h ; convert sound level to 0-65535 format 7299 00004151 66A3[344A0000] mov [previous_val_r], ax 7300 00004157 31D2 xor edx, edx 7301 00004159 31C0 xor eax, eax 7302 ; 16/11/2023 7303 0000415B 49 dec ecx 7304 0000415C 7407 jz short lff8s2_2 7305 0000415E 668B06 mov ax, [esi] 7306 00004161 668B5602 mov dx, [esi+2] 7307 lff8s2_2: 7308 00004165 80C480 add ah, 80h ; convert sound level to 0-65535 format 7309 00004168 66A3[364A0000] mov [next_val_l], ax 7310 0000416E 80C680 add dh, 80h ; convert sound level to 0-65535 format 7311 00004171 668915[384A0000] mov [next_val_r], dx 7312 00004178 660305[324A0000] add ax, [previous_val_l] 7313 0000417F 66D1D8 rcr ax, 1 7314 00004182 89C2 mov edx, eax ; this is interpolated middle (3th) sample (L) 7315 00004184 660305[324A0000] add ax, [previous_val_l] 7316 0000418B 66D1D8 rcr ax, 1 7317 0000418E 89C3 mov ebx, eax ; this is temporary interpolation value (L) 7318 00004190 660305[324A0000] add ax, [previous_val_l] 7319 00004197 66D1D8 rcr ax, 1 7320 0000419A 80EC80 sub ah, 80h ; -32768 to +32767 format again 7321 0000419D 66AB stosw ; this is 1st interpolated sample (L) 7322 0000419F 66A1[384A0000] mov ax, [next_val_r] 7323 000041A5 660305[344A0000] add ax, [previous_val_r] 7324 000041AC 66D1D8 rcr ax, 1 7325 000041AF 89C5 mov ebp, eax ; this is interpolated middle (3th) sample (R) 7326 000041B1 660305[344A0000] add ax, [previous_val_r] 7327 000041B8 66D1D8 rcr ax, 1 7328 000041BB 50 push eax ; * ; this is temporary interpolation value (R) 7329 000041BC 660305[344A0000] add ax, [previous_val_r] 7330 000041C3 66D1D8 rcr ax, 1 7331 000041C6 80EC80 sub ah, 80h 7332 000041C9 66AB stosw ; this is 1st interpolated sample (R) 7333 000041CB 89D8 mov eax, ebx 7334 000041CD 6601D0 add ax, dx 7335 000041D0 66D1D8 rcr ax, 1 7336 000041D3 80EC80 sub ah, 80h ; -32768 to +32767 format again 7337 000041D6 66AB stosw ; this is 2nd interpolated sample (L) 7338 000041D8 58 pop eax ; * 7339 000041D9 6601E8 add ax, bp 7340 000041DC 66D1D8 rcr ax, 1 7341 000041DF 80EC80 sub ah, 80h 7342 000041E2 66AB stosw ; this is 2nd interpolated sample (R) 7343 000041E4 89D0 mov eax, edx 7344 000041E6 80EC80 sub ah, 80h 7345 000041E9 66AB stosw ; this is middle (3th) interpolated sample (L) 7346 000041EB 89E8 mov eax, ebp 7347 000041ED 80EC80 sub ah, 80h ; -32768 to +32767 format again 7348 000041F0 66AB stosw ; this is middle (3th) interpolated sample (R) 7349 000041F2 66A1[364A0000] mov ax, [next_val_l] 7350 000041F8 6601D0 add ax, dx 7351 000041FB 66D1D8 rcr ax, 1 7352 000041FE 89C3 mov ebx, eax ; this is temporary interpolation value (L) 7353 00004200 6601D0 add ax, dx 7354 00004203 66D1D8 rcr ax, 1 7355 00004206 80EC80 sub ah, 80h 7356 00004209 66AB stosw ; this is 4th interpolated sample (L) 7357 0000420B 66A1[384A0000] mov ax, [next_val_r] 7358 00004211 6601E8 add ax, bp 7359 00004214 66D1D8 rcr ax, 1 7360 00004217 50 push eax ; ** ; this is temporary interpolation value (R) 7361 00004218 6601E8 add ax, bp 7362 0000421B 66D1D8 rcr ax, 1 7363 0000421E 80EC80 sub ah, 80h 7364 00004221 66AB stosw ; this is 4th interpolated sample (R) 7365 00004223 66A1[364A0000] mov ax, [next_val_l] 7366 00004229 6601D8 add ax, bx 7367 0000422C 66D1D8 rcr ax, 1 7368 0000422F 80EC80 sub ah, 80h ; -32768 to +32767 format again 7369 00004232 66AB stosw ; this is 5th interpolated sample (L) 7370 00004234 58 pop eax ; ** 7371 00004235 660305[384A0000] add ax, [next_val_r] 7372 0000423C 66D1D8 rcr ax, 1 7373 0000423F 80EC80 sub ah, 80h 7374 00004242 66AB stosw ; this is 5th interpolated sample (R) 7375 ; 8 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 7376 00004244 E305 jecxz lff8_s2_9 7377 00004246 E9F2FEFFFF jmp lff8s2_1 7378 lff8_s2_9: 7379 ;jmp lff8s2_3 7380 ; 17/02/2025 7381 0000424B E9AA040000 jmp lff8_3 7382 7383 ; =============== S U B R O U T I N E ======================================= 7384 7385 load_16khz_mono_16_bit: 7386 ; 13/01/2025 (mp3play3.s) 7387 00004250 BE[00600500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 7388 00004255 BF[00800500] mov edi, sample_buffer ; wav output buffer 7389 0000425A 8B0D[94AB0000] mov ecx, [loadsize] 7390 ; 13/01/2025 7391 00004260 D1E9 shr ecx, 1 ; word count 7392 lff16m2_1: 7393 00004262 66AD lodsw 7394 00004264 66AB stosw ; original sample (left channel) 7395 00004266 66AB stosw ; original sample (right channel) 7396 00004268 80C480 add ah, 80h ; convert sound level 0 to 65535 format 7397 ;mov [previous_val], ax 7398 0000426B 89C3 mov ebx, eax 7399 0000426D 31C0 xor eax, eax 7400 0000426F 49 dec ecx 7401 00004270 7403 jz short lff16m2_2 7402 00004272 668B06 mov ax, [esi] 7403 lff16m2_2: 7404 00004275 80C480 add ah, 80h ; convert sound level 0 to 65535 format 7405 00004278 89C5 mov ebp, eax ; [next_val] 7406 ;add ax, [previous_val] 7407 0000427A 6601D8 add ax, bx 7408 0000427D 66D1D8 rcr ax, 1 7409 00004280 89C2 mov edx, eax ; this is temporary interpolation value 7410 ;add ax, [previous_val] 7411 00004282 6601D8 add ax, bx 7412 00004285 66D1D8 rcr ax, 1 7413 00004288 80EC80 sub ah, 80h ; -32768 to +32767 format again 7414 0000428B 66AB stosw ; this is 1st interpolated sample (L) 7415 0000428D 66AB stosw ; this is 1st interpolated sample (R) 7416 0000428F 89E8 mov eax, ebp 7417 00004291 6601D0 add ax, dx 7418 00004294 66D1D8 rcr ax, 1 7419 00004297 80EC80 sub ah, 80h ; -32768 to +32767 format again 7420 0000429A 66AB stosw ; this is 2nd interpolated sample (L) 7421 0000429C 66AB stosw ; this is 2nd interpolated sample (R) 7422 ; 16 kHZ mono to 48 kHZ stereo conversion of the sample is OK 7423 0000429E 09C9 or ecx, ecx 7424 000042A0 75C0 jnz short lff16m2_1 7425 ;jmp lff16m2_3 7426 ; 17/02/2025 7427 000042A2 E953040000 jmp lff16_3 7428 7429 ; =============== S U B R O U T I N E ======================================= 7430 7431 load_16khz_stereo_16_bit: 7432 ; 13/01/2025 (mp3play3.s) 7433 000042A7 BE[00600500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 7434 000042AC BF[00800500] mov edi, sample_buffer ; wav output buffer 7435 000042B1 8B0D[94AB0000] mov ecx, [loadsize] 7436 ; 13/01/2025 7437 000042B7 C1E902 shr ecx, 2 ; dword count 7438 lff16s2_1: 7439 000042BA 66AD lodsw 7440 000042BC 66AB stosw ; original sample (L) 7441 000042BE 80C480 add ah, 80h ; convert sound level 0 to 65535 format 7442 000042C1 66A3[324A0000] mov [previous_val_l], ax 7443 000042C7 66AD lodsw 7444 000042C9 66AB stosw ; original sample (R) 7445 000042CB 80C480 add ah, 80h ; convert sound level 0 to 65535 format 7446 000042CE 66A3[344A0000] mov [previous_val_r], ax 7447 000042D4 31D2 xor edx, edx 7448 000042D6 31C0 xor eax, eax 7449 ; 16/11/2023 7450 000042D8 49 dec ecx 7451 000042D9 7407 jz short lff16s2_2 7452 000042DB 668B06 mov ax, [esi] 7453 000042DE 668B5602 mov dx, [esi+2] 7454 lff16s2_2: 7455 000042E2 80C480 add ah, 80h ; convert sound level 0 to 65535 format 7456 ;mov [next_val_l], ax 7457 000042E5 89C5 mov ebp, eax 7458 000042E7 80C680 add dh, 80h ; convert sound level 0 to 65535 format 7459 000042EA 668915[384A0000] mov [next_val_r], dx 7460 000042F1 660305[324A0000] add ax, [previous_val_l] 7461 000042F8 66D1D8 rcr ax, 1 7462 000042FB 89C2 mov edx, eax ; this is temporary interpolation value (L) 7463 000042FD 660305[324A0000] add ax, [previous_val_l] 7464 00004304 66D1D8 rcr ax, 1 7465 00004307 80EC80 sub ah, 80h ; -32768 to +32767 format again 7466 0000430A 66AB stosw ; this is 1st interpolated sample (L) 7467 0000430C 66A1[384A0000] mov ax, [next_val_r] 7468 00004312 660305[344A0000] add ax, [previous_val_r] 7469 00004319 66D1D8 rcr ax, 1 7470 0000431C 89C3 mov ebx, eax ; this is temporary interpolation value (R) 7471 0000431E 660305[344A0000] add ax, [previous_val_r] 7472 00004325 66D1D8 rcr ax, 1 7473 00004328 80EC80 sub ah, 80h ; -32768 to +32767 format again 7474 0000432B 66AB stosw ; this is 1st interpolated sample (R) 7475 ;mov ax, [next_val_l] 7476 0000432D 89E8 mov eax, ebp 7477 0000432F 6601D0 add ax, dx 7478 00004332 66D1D8 rcr ax, 1 7479 00004335 80EC80 sub ah, 80h ; -32768 to +32767 format again 7480 00004338 66AB stosw ; this is 2nd interpolated sample (L) 7481 0000433A 66A1[384A0000] mov ax, [next_val_r] 7482 00004340 6601D8 add ax, bx 7483 00004343 66D1D8 rcr ax, 1 7484 00004346 80EC80 sub ah, 80h ; -32768 to +32767 format again 7485 00004349 66AB stosw ; this is 2nd interpolated sample (R) 7486 7487 ; 16 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 7488 0000434B 09C9 or ecx, ecx 7489 0000434D 0F8567FFFFFF jnz lff16s2_1 7490 ;jmp lff16s2_3 7491 ; 17/02/2025 7492 00004353 E9A2030000 jmp lff16_3 7493 7494 ; =============== S U B R O U T I N E ======================================= 7495 7496 load_24khz_mono_16_bit: 7497 ; 30/01/2025 7498 ; 13/01/2025 (mp3play3.s) 7499 00004358 BE[00600500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 7500 0000435D BF[00800500] mov edi, sample_buffer ; wav output buffer 7501 00004362 8B0D[94AB0000] mov ecx, [loadsize] 7502 ; 13/01/2025 7503 00004368 D1E9 shr ecx, 1 ; word count 7504 lff24m2_1: 7505 0000436A 66AD lodsw 7506 0000436C 66AB stosw ; original sample (left channel) 7507 0000436E 66AB stosw ; original sample (right channel) 7508 00004370 80C480 add ah, 80h ; convert sound level 0 to 65535 format 7509 ;mov [previous_val], ax 7510 ;mov ebx, eax 7511 ;xor eax, eax 7512 00004373 31DB xor ebx, ebx 7513 00004375 49 dec ecx 7514 00004376 7403 jz short lff24m2_2 7515 ;mov ax, [esi] 7516 00004378 668B1E mov bx, [esi] 7517 lff24m2_2: 7518 ; 30/01/2025 7519 0000437B 80C780 add bh, 80h ; convert sound level 0 to 65535 format 7520 ;add ah, 80h 7521 ;mov ebp, eax ; [next_val] 7522 ;add ax, [previous_val] 7523 ; ax = [previous_val] 7524 ; bx = [next_val] 7525 0000437E 6601D8 add ax, bx 7526 00004381 66D1D8 rcr ax, 1 7527 00004384 80EC80 sub ah, 80h ; -32768 to +32767 format again 7528 00004387 66AB stosw ; this is interpolated sample (L) 7529 00004389 66AB stosw ; this is interpolated sample (R) 7530 ; 24 kHZ mono to 48 kHZ stereo conversion of the sample is OK 7531 0000438B 09C9 or ecx, ecx 7532 0000438D 75DB jnz short lff24m2_1 7533 0000438F E966030000 jmp lff24_3 7534 7535 ; =============== S U B R O U T I N E ======================================= 7536 7537 load_24khz_stereo_16_bit: 7538 ; 13/01/2025 (mp3play3.s) 7539 00004394 BE[00600500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 7540 00004399 BF[00800500] mov edi, sample_buffer ; wav output buffer 7541 0000439E 8B0D[94AB0000] mov ecx, [loadsize] 7542 ; 13/01/2025 7543 000043A4 C1E902 shr ecx, 2 ; dword count 7544 lff24s2_1: 7545 000043A7 66AD lodsw 7546 000043A9 66AB stosw ; original sample (L) 7547 000043AB 80C480 add ah, 80h ; convert sound level 0 to 65535 format 7548 000043AE 66A3[324A0000] mov [previous_val_l], ax 7549 000043B4 66AD lodsw 7550 000043B6 66AB stosw ; original sample (R) 7551 000043B8 80C480 add ah, 80h ; convert sound level 0 to 65535 format 7552 ;mov [previous_val_r], ax 7553 000043BB 89C3 mov ebx, eax 7554 000043BD 31D2 xor edx, edx 7555 000043BF 31C0 xor eax, eax 7556 ; 16/11/2023 7557 000043C1 49 dec ecx 7558 000043C2 7407 jz short lff24s2_2 7559 000043C4 668B06 mov ax, [esi] 7560 000043C7 668B5602 mov dx, [esi+2] 7561 lff24s2_2: 7562 000043CB 80C480 add ah, 80h ; convert sound level 0 to 65535 format 7563 ;;mov [next_val_l], ax 7564 ;mov ebp, eax 7565 000043CE 80C680 add dh, 80h ; convert sound level 0 to 65535 format 7566 ;mov [next_val_r], dx 7567 000043D1 660305[324A0000] add ax, [previous_val_l] 7568 000043D8 66D1D8 rcr ax, 1 7569 000043DB 80EC80 sub ah, 80h ; -32768 to +32767 format again 7570 000043DE 66AB stosw ; this is interpolated sample (L) 7571 ;mov ax, [next_val_r] 7572 000043E0 89D0 mov eax, edx 7573 ;add ax, [previous_val_r] 7574 000043E2 6601D8 add ax, bx 7575 000043E5 66D1D8 rcr ax, 1 7576 000043E8 80EC80 sub ah, 80h ; -32768 to +32767 format again 7577 000043EB 66AB stosw ; this is interpolated sample (R) 7578 7579 ; 24 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 7580 000043ED 09C9 or ecx, ecx 7581 000043EF 75B6 jnz short lff24s2_1 7582 000043F1 E904030000 jmp lff24_3 7583 7584 ; =============== S U B R O U T I N E ======================================= 7585 7586 load_32khz_mono_16_bit: 7587 ; 13/01/2025 (mp3play3.s) 7588 000043F6 BE[00600500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 7589 000043FB BF[00800500] mov edi, sample_buffer ; wav output buffer 7590 00004400 8B0D[94AB0000] mov ecx, [loadsize] 7591 ; 13/01/2025 7592 00004406 D1E9 shr ecx, 1 ; word count 7593 lff32m2_1: 7594 00004408 66AD lodsw 7595 0000440A 66AB stosw ; original sample (left channel) 7596 0000440C 66AB stosw ; original sample (right channel) 7597 0000440E 80C480 add ah, 80h ; convert sound level 0 to 65535 format 7598 ;mov [previous_val], ax 7599 ;mov ebx, eax 7600 ;xor eax, eax 7601 00004411 31DB xor ebx, ebx 7602 00004413 49 dec ecx 7603 00004414 7403 jz short lff32m2_2 7604 ;mov ax, [esi] 7605 00004416 668B1E mov bx, [esi] 7606 lff32m2_2: 7607 ;add ah, 80h ; convert sound level 0 to 65535 format 7608 ;mov ebp, eax ; [next_val] 7609 ;add ax, [previous_val] 7610 ; ax = [previous_val] 7611 ; bx = [next_val] 7612 00004419 6601D8 add ax, bx 7613 0000441C 66D1D8 rcr ax, 1 7614 0000441F 80EC80 sub ah, 80h ; -32768 to +32767 format again 7615 00004422 66AB stosw ; this is interpolated sample (L) 7616 00004424 66AB stosw ; this is interpolated sample (R) 7617 7618 ; different than 8-16-24 kHZ ! 7619 ; 'original-interpolated-original' trio samples 7620 00004426 E309 jecxz lff32m2_3 7621 7622 00004428 66AD lodsw 7623 0000442A 66AB stosw ; original sample (left channel) 7624 0000442C 66AB stosw ; original sample (right channel) 7625 7626 ; 32 kHZ mono to 48 kHZ stereo conversion of the sample is OK 7627 0000442E 49 dec ecx 7628 0000442F 75D7 jnz short lff32m2_1 7629 lff32m2_3: 7630 00004431 E9C4020000 jmp lff32_3 7631 7632 ; =============== S U B R O U T I N E ======================================= 7633 7634 load_32khz_stereo_16_bit: 7635 ; 13/01/2025 (mp3play3.s) 7636 00004436 BE[00600500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 7637 0000443B BF[00800500] mov edi, sample_buffer ; wav output buffer 7638 00004440 8B0D[94AB0000] mov ecx, [loadsize] 7639 ; 13/01/2025 7640 00004446 C1E902 shr ecx, 2 ; dword count 7641 lff32s2_1: 7642 00004449 66AD lodsw 7643 0000444B 66AB stosw ; original sample (L) 7644 0000444D 80C480 add ah, 80h ; convert sound level 0 to 65535 format 7645 00004450 66A3[324A0000] mov [previous_val_l], ax 7646 00004456 66AD lodsw 7647 00004458 66AB stosw ; original sample (R) 7648 0000445A 80C480 add ah, 80h ; convert sound level 0 to 65535 format 7649 ;mov [previous_val_r], ax 7650 0000445D 89C3 mov ebx, eax 7651 0000445F 31D2 xor edx, edx 7652 00004461 31C0 xor eax, eax 7653 ; 16/11/2023 7654 00004463 49 dec ecx 7655 00004464 7407 jz short lff32s2_2 7656 00004466 668B06 mov ax, [esi] 7657 00004469 668B5602 mov dx, [esi+2] 7658 lff32s2_2: 7659 0000446D 80C480 add ah, 80h ; convert sound level 0 to 65535 format 7660 ;;mov [next_val_l], ax 7661 ;mov ebp, eax 7662 00004470 80C680 add dh, 80h ; convert sound level 0 to 65535 format 7663 ;mov [next_val_r], dx 7664 00004473 660305[324A0000] add ax, [previous_val_l] 7665 0000447A 66D1D8 rcr ax, 1 7666 0000447D 80EC80 sub ah, 80h ; -32768 to +32767 format again 7667 00004480 66AB stosw ; this is interpolated sample (L) 7668 ;mov ax, [next_val_r] 7669 00004482 89D0 mov eax, edx 7670 ;add ax, [previous_val_r] 7671 00004484 6601D8 add ax, bx 7672 00004487 66D1D8 rcr ax, 1 7673 0000448A 80EC80 sub ah, 80h ; -32768 to +32767 format again 7674 0000448D 66AB stosw ; this is interpolated sample (R) 7675 7676 ; different than 8-16-24 kHZ ! 7677 ; 'original-interpolated-original' trio samples 7678 0000448F E30B jecxz lff32s2_3 7679 7680 00004491 66AD lodsw 7681 00004493 66AB stosw ; original sample (L) 7682 00004495 66AD lodsw 7683 00004497 66AB stosw ; original sample (R) 7684 7685 ; 32 kHZ stereo to 48 kHZ stereo conversion of the sample is OK 7686 00004499 49 dec ecx 7687 0000449A 75AD jnz short lff32s2_1 7688 lff32s2_3: 7689 0000449C E959020000 jmp lff32_3 7690 7691 ; =============== S U B R O U T I N E ======================================= 7692 7693 load_22khz_mono_16_bit: 7694 ; 13/01/2025 (mp3play3.s) 7695 000044A1 BE[00600500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 7696 000044A6 BF[00800500] mov edi, sample_buffer ; wav output buffer 7697 000044AB 8B0D[94AB0000] mov ecx, [loadsize] 7698 ; 13/01/2025 7699 000044B1 D1E9 shr ecx, 1 ; word count 7700 lff22m2_9: 7701 000044B3 BD05000000 mov ebp, 5 ; interpolation (one step) loop count 7702 000044B8 C605[3A4A0000]03 mov byte [faz], 3 ; 3 steps/phases 7703 lff22m2_1: 7704 ; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2 ; 37/17 7705 000044BF 66AD lodsw 7706 000044C1 31D2 xor edx, edx 7707 000044C3 49 dec ecx 7708 000044C4 7403 jz short lff22m2_2_1 7709 000044C6 668B16 mov dx, [esi] 7710 lff22m2_2_1: 7711 ; ax = [previous_val] 7712 ; dx = [next_val] 7713 000044C9 E8AA020000 call interpolating_3_16bit_mono ; 1 of 17 7714 000044CE E32F jecxz lff22m2_3 7715 lff22m2_2_2: 7716 000044D0 66AD lodsw 7717 000044D2 31D2 xor edx, edx 7718 000044D4 49 dec ecx 7719 000044D5 7403 jz short lff22m2_2_3 7720 000044D7 668B16 mov dx, [esi] 7721 lff22m2_2_3: 7722 000044DA E82C030000 call interpolating_2_16bit_mono ; 2 of 17 .. 6 of 17 7723 000044DF E31E jecxz lff22m2_3 7724 000044E1 4D dec ebp 7725 000044E2 75EC jnz short lff22m2_2_2 7726 7727 000044E4 A0[3A4A0000] mov al, [faz] 7728 000044E9 FEC8 dec al 7729 000044EB 74C6 jz short lff22m2_9 7730 000044ED FE0D[3A4A0000] dec byte [faz] 7731 000044F3 BD04000000 mov ebp, 4 7732 000044F8 FEC8 dec al 7733 000044FA 75C3 jnz short lff22m2_1 ; 3:2:2:2:2 ; 7-11 of 17 7734 000044FC 45 inc ebp ; 5 7735 000044FD EBC0 jmp short lff22m2_1 ; 3:2:2:2:2:2 ; 12-17 of 17 7736 7737 lff22m2_3: 7738 lff22s2_3: 7739 000044FF E9F6010000 jmp lff22_3 ; padfill 7740 ; (put zeros in the remain words of the buffer) 7741 7742 ; =============== S U B R O U T I N E ======================================= 7743 7744 load_22khz_stereo_16_bit: 7745 ; 13/01/2025 (mp3play3.s) 7746 00004504 BE[00600500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 7747 00004509 BF[00800500] mov edi, sample_buffer ; wav output buffer 7748 0000450E 8B0D[94AB0000] mov ecx, [loadsize] 7749 ; 13/01/2025 7750 00004514 C1E902 shr ecx, 2 ; dword count 7751 lff22s2_9: 7752 00004517 BD05000000 mov ebp, 5 ; interpolation (one step) loop count 7753 0000451C C605[3A4A0000]03 mov byte [faz], 3 ; 3 steps/phase 7754 lff22s2_1: 7755 ; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2 ; 37/17 7756 00004523 66AD lodsw 7757 00004525 89C3 mov ebx, eax 7758 00004527 66AD lodsw 7759 00004529 8B16 mov edx, [esi] 7760 0000452B 668915[364A0000] mov [next_val_l], dx 7761 ; 26/11/2023 7762 00004532 C1EA10 shr edx, 16 7763 00004535 49 dec ecx 7764 00004536 7509 jnz short lff22s2_2_1 7765 00004538 31D2 xor edx, edx ; 0 7766 0000453A 668915[364A0000] mov [next_val_l], dx 7767 lff22s2_2_1: 7768 ; bx = [previous_val_l] 7769 ; ax = [previous_val_r] 7770 ; [next_val_l] 7771 ; dx = [next_val_r] 7772 00004541 E862020000 call interpolating_3_16bit_stereo ; 1 of 17 7773 00004546 E3B7 jecxz lff22s2_3 7774 lff22s2_2_2: 7775 00004548 66AD lodsw 7776 0000454A 89C3 mov ebx, eax 7777 0000454C 66AD lodsw 7778 0000454E 8B16 mov edx, [esi] 7779 00004550 668915[364A0000] mov [next_val_l], dx 7780 ; 26/11/2023 7781 00004557 C1EA10 shr edx, 16 7782 0000455A 49 dec ecx 7783 0000455B 7509 jnz short lff22s2_2_3 7784 0000455D 31D2 xor edx, edx ; 0 7785 0000455F 668915[364A0000] mov [next_val_l], dx 7786 lff22s2_2_3: 7787 00004566 E8B8020000 call interpolating_2_16bit_stereo ; 2 of 17 .. 6 of 17 7788 0000456B E31E jecxz lff22s2_2_4 7789 7790 0000456D 4D dec ebp 7791 0000456E 75D8 jnz short lff22s2_2_2 7792 7793 00004570 A0[3A4A0000] mov al, [faz] 7794 00004575 FEC8 dec al 7795 00004577 749E jz short lff22s2_9 7796 00004579 FE0D[3A4A0000] dec byte [faz] 7797 0000457F BD04000000 mov ebp, 4 7798 00004584 FEC8 dec al 7799 00004586 759B jnz short lff22s2_1 ; 3:2:2:2:2 ; 7-11 of 17 7800 00004588 45 inc ebp ; 5 7801 00004589 EB98 jmp short lff22s2_1 ; 3:2:2:2:2:2 ; 12-17 of 17 7802 7803 lff22s2_2_4: 7804 ; 26/11/2023 7805 0000458B E96A010000 jmp lff22_3 ; padfill 7806 7807 ; =============== S U B R O U T I N E ======================================= 7808 7809 load_11khz_mono_16_bit: 7810 ; 13/01/2025 (mp3play3.s) 7811 00004590 BE[00600500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 7812 00004595 BF[00800500] mov edi, sample_buffer ; wav output buffer 7813 0000459A 8B0D[94AB0000] mov ecx, [loadsize] 7814 ; 13/01/2025 7815 000045A0 D1E9 shr ecx, 1 ; word count 7816 lff11m2_9: 7817 000045A2 BD06000000 mov ebp, 6 ; interpolation (one step) loop count 7818 lff11m2_1: 7819 ; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4 ; 74/17 7820 000045A7 66AD lodsw 7821 000045A9 31D2 xor edx, edx 7822 000045AB 49 dec ecx 7823 000045AC 7403 jz short lff11m2_2_1 7824 000045AE 668B16 mov dx, [esi] 7825 lff11m2_2_1: 7826 ; ax = [previous_val] 7827 ; dx = [next_val] 7828 000045B1 E89C020000 call interpolating_5_16bit_mono 7829 000045B6 E327 jecxz lff11m2_3 7830 lff11m2_2_2: 7831 000045B8 66AD lodsw 7832 000045BA 31D2 xor edx, edx 7833 000045BC 49 dec ecx 7834 000045BD 7403 jz short lff11m2_2_3 7835 000045BF 668B16 mov dx, [esi] 7836 lff11m2_2_3: 7837 000045C2 E8B5030000 call interpolating_4_16bit_mono 7838 000045C7 E316 jecxz lff11m2_3 7839 7840 000045C9 4D dec ebp 7841 000045CA 74D6 jz short lff11m2_9 7842 7843 000045CC 66AD lodsw 7844 000045CE 31D2 xor edx, edx 7845 000045D0 49 dec ecx 7846 000045D1 7403 jz short lff11m2_2_4 7847 000045D3 668B16 mov dx, [esi] 7848 lff11m2_2_4: 7849 000045D6 E8A1030000 call interpolating_4_16bit_mono 7850 000045DB E302 jecxz lff11m2_3 7851 000045DD EBC8 jmp short lff11m2_1 7852 7853 lff11m2_3: 7854 000045DF E916010000 jmp lff11_3 ; padfill 7855 ; (put zeros in the remain words of the buffer) 7856 7857 ; =============== S U B R O U T I N E ======================================= 7858 7859 load_11khz_stereo_16_bit: 7860 ; 13/01/2025 (mp3play3.s) 7861 000045E4 BE[00600500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 7862 000045E9 BF[00800500] mov edi, sample_buffer ; wav output buffer 7863 000045EE 8B0D[94AB0000] mov ecx, [loadsize] 7864 ; 13/01/2025 7865 000045F4 C1E902 shr ecx, 2 ; dword count 7866 lff11s2_9: 7867 000045F7 BD06000000 mov ebp, 6 ; interpolation (one step) loop count 7868 lff11s2_1: 7869 ; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4 ; 74/17 7870 000045FC 66AD lodsw 7871 000045FE 89C3 mov ebx, eax 7872 00004600 66AD lodsw 7873 00004602 8B16 mov edx, [esi] 7874 ; 15/01/2025 7875 ;mov [next_val_l], edx 7876 ; 26/11/2023 7877 ;shr edx, 16 7878 ;mov [next_val_r], dx 7879 00004604 49 dec ecx 7880 00004605 7502 jnz short lff11s2_2_1 7881 00004607 31D2 xor edx, edx ; 0 7882 ;mov [next_val_l], dx 7883 ;mov [next_val_r], dx 7884 lff11s2_2_1: 7885 ; bx = [previous_val_l] 7886 ; ax = [previous_val_r] 7887 ; [next_val_l] 7888 ; dx = [next_val_r] 7889 ;;; 7890 ; 15/01/2025 (BugFix) 7891 00004609 8915[364A0000] mov [next_val_l], edx 7892 ;;; 7893 0000460F E899020000 call interpolating_5_16bit_stereo 7894 00004614 E339 jecxz lff11s2_3 7895 lff11s2_2_2: 7896 00004616 66AD lodsw 7897 00004618 89C3 mov ebx, eax 7898 0000461A 66AD lodsw 7899 0000461C 8B16 mov edx, [esi] 7900 ; 15/01/2025 7901 ;mov [next_val_l], dx 7902 ; 26/11/2023 7903 ;shr edx, 16 7904 ;mov [next_val_r], dx 7905 0000461E 49 dec ecx 7906 0000461F 7502 jnz short lff11s2_2_3 7907 00004621 31D2 xor edx, edx ; 0 7908 ;mov [next_val_l], dx 7909 ;mov [next_val_r], dx 7910 lff11s2_2_3: 7911 ;;; 7912 ; 15/01/2025 (BugFix) 7913 00004623 8915[364A0000] mov [next_val_l], edx 7914 ;;; 7915 00004629 E887030000 call interpolating_4_16bit_stereo 7916 0000462E E31F jecxz lff11s2_3 7917 7918 00004630 4D dec ebp 7919 00004631 74C4 jz short lff11s2_9 7920 7921 00004633 66AD lodsw 7922 00004635 89C3 mov ebx, eax 7923 00004637 66AD lodsw 7924 00004639 8B16 mov edx, [esi] 7925 ; 15/01/2025 7926 ;mov [next_val_l], dx 7927 ; 26/11/2023 7928 ;shr edx, 16 7929 ;mov [next_val_r], dx 7930 0000463B 49 dec ecx 7931 0000463C 7502 jnz short lff11s2_2_4 7932 0000463E 31D2 xor edx, edx ; 0 7933 ;mov [next_val_l], dx 7934 ;mov [next_val_r], dx 7935 lff11s2_2_4: 7936 ;;; 7937 ; 15/01/2025 (BugFix) 7938 00004640 8915[364A0000] mov [next_val_l], edx 7939 ;;; 7940 00004646 E86A030000 call interpolating_4_16bit_stereo 7941 0000464B E302 jecxz lff11s2_3 7942 0000464D EBAD jmp short lff11s2_1 7943 7944 lff11s2_3: 7945 0000464F E9A6000000 jmp lff11_3 ; padfill 7946 ; (put zeros in the remain words of the buffer) 7947 7948 ; =============== S U B R O U T I N E ======================================= 7949 7950 load_44khz_mono_16_bit: 7951 ; 13/01/2025 (mp3play3.s) 7952 00004654 BE[00600500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 7953 00004659 BF[00800500] mov edi, sample_buffer ; wav output buffer 7954 0000465E 8B0D[94AB0000] mov ecx, [loadsize] 7955 ; 13/01/2025 7956 00004664 D1E9 shr ecx, 1 ; word count 7957 lff44m2_9: 7958 00004666 BD0A000000 mov ebp, 10 ; interpolation (one step) loop count 7959 0000466B C605[3A4A0000]02 mov byte [faz], 2 ; 2 steps/phases 7960 lff44m2_1: 7961 ; 2:1:1:1:1:1:1:1:1:1:1:: ; 25/23 7962 ; 2:1:1:1:1:1:1:1:1:1:1:1 7963 00004672 66AD lodsw 7964 00004674 31D2 xor edx, edx 7965 00004676 49 dec ecx 7966 00004677 7403 jz short lff44m2_2_1 7967 00004679 668B16 mov dx, [esi] 7968 lff44m2_2_1: 7969 ; ax = [previous_val] 7970 ; dx = [next_val] 7971 0000467C E88A010000 call interpolating_2_16bit_mono 7972 00004681 E31B jecxz lff44m2_3 7973 lff44m2_2_2: 7974 00004683 66AD lodsw 7975 00004685 66AB stosw ; (L)eft Channel 7976 00004687 66AB stosw ; (R)ight Channel 7977 7978 00004689 49 dec ecx 7979 0000468A 7412 jz short lff44m2_3 7980 0000468C 4D dec ebp 7981 0000468D 75F4 jnz short lff44m2_2_2 7982 7983 0000468F FE0D[3A4A0000] dec byte [faz] 7984 00004695 74CF jz short lff44m2_9 7985 00004697 BD0B000000 mov ebp, 11 7986 0000469C EBD4 jmp short lff44m2_1 7987 7988 lff44m2_3: 7989 lff44s2_3: 7990 0000469E EB5A jmp short lff44_3 ; padfill 7991 ; (put zeros in the remain words of the buffer) 7992 7993 ; =============== S U B R O U T I N E ======================================= 7994 7995 load_44khz_stereo_16_bit: 7996 ; 13/01/2025 (mp3play3.s) 7997 000046A0 BE[00600500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 7998 000046A5 BF[00800500] mov edi, sample_buffer ; wav output buffer 7999 000046AA 8B0D[94AB0000] mov ecx, [loadsize] 8000 ; 13/01/2025 8001 000046B0 C1E902 shr ecx, 2 ; dword count 8002 lff44s2_9: 8003 000046B3 BD0A000000 mov ebp, 10 ; interpolation (one step) loop count 8004 000046B8 C605[3A4A0000]02 mov byte [faz], 2 ; 2 steps/phase 8005 lff44s2_1: 8006 ; 2:1:1:1:1:1:1:1:1:1:1:: ; 25/23 8007 ; 2:1:1:1:1:1:1:1:1:1:1:1 8008 000046BF 66AD lodsw 8009 000046C1 89C3 mov ebx, eax 8010 000046C3 66AD lodsw 8011 ;mov dx, [esi] 8012 ;mov [next_val_l], dx 8013 ;mov dx, [esi+2] 8014 ; 26/11/2023 8015 000046C5 8B16 mov edx, [esi] 8016 000046C7 668915[364A0000] mov [next_val_l], dx 8017 000046CE C1EA10 shr edx, 16 8018 000046D1 49 dec ecx 8019 000046D2 7509 jnz short lff44s2_2_1 8020 000046D4 31D2 xor edx, edx ; 0 8021 000046D6 668915[364A0000] mov [next_val_l], dx 8022 lff44s2_2_1: 8023 ; bx = [previous_val_l] 8024 ; ax = [previous_val_r] 8025 ; [next_val_l] 8026 ; dx = [next_val_r] 8027 000046DD E841010000 call interpolating_2_16bit_stereo 8028 000046E2 E3BA jecxz lff44s2_3 8029 lff44s2_2_2: 8030 ;movsw ; (L)eft Channel 8031 ;movsw ; (R)ight Channel 8032 000046E4 A5 movsd 8033 8034 000046E5 49 dec ecx 8035 ;jz short lff44s2_3 8036 ; 17/02/2025 8037 000046E6 7412 jz short lff44_3 8038 000046E8 4D dec ebp 8039 000046E9 75F9 jnz short lff44s2_2_2 8040 8041 000046EB FE0D[3A4A0000] dec byte [faz] 8042 000046F1 74C0 jz short lff44s2_9 8043 000046F3 BD0B000000 mov ebp, 11 8044 000046F8 EBC5 jmp short lff44s2_1 8045 8046 8047 ; --------------------------------------------------------------------------- 8048 8049 ; 17/02/2025 8050 ; padfill 8051 ; (put zeros in the remain words of the buffer) 8052 lff44_3: 8053 lff32_3: 8054 lff24_3: 8055 lff22_3: 8056 lff16_3: 8057 lff12_3: 8058 lff11_3: 8059 lff8_3: 8060 ; 17/02/2025 8061 000046FA 8B0D[88AB0000] mov ecx, [buffer_size] ; 16 bit (48 kHZ, stereo) samples 8062 00004700 81C1[00800500] add ecx, sample_buffer 8063 00004706 29F9 sub ecx, edi 8064 00004708 7609 jna short lff44_4 ; jbe 8065 0000470A 29F9 sub ecx, edi 8066 ;inc ecx 8067 0000470C C1E902 shr ecx, 2 8068 0000470F 31C0 xor eax, eax ; fill (remain part of) buffer with zeros 8069 00004711 F3AB rep stosd 8070 lff44_4: 8071 00004713 C3 retn 8072 8073 ; =============== S U B R O U T I N E ======================================= 8074 8075 ; 01/02/2025 8076 load_12khz_mono_16_bit: 8077 00004714 BE[00600500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 8078 00004719 BF[00800500] mov edi, sample_buffer ; wav output buffer 8079 0000471E 8B0D[94AB0000] mov ecx, [loadsize] 8080 00004724 D1E9 shr ecx, 1 ; word count 8081 lff12m2_9: 8082 00004726 BD06000000 mov ebp, 6 ; interpolation (one step) loop count 8083 lff12m2_1: 8084 ; original-interpolated-interpolated-interpolated 8085 0000472B 66AD lodsw 8086 0000472D 31D2 xor edx, edx 8087 0000472F 49 dec ecx 8088 00004730 7403 jz short lff12m2_2 8089 00004732 668B16 mov dx, [esi] 8090 lff12m2_2: 8091 ; ax = [previous_val] 8092 ; dx = [next_val] 8093 00004735 E842020000 call interpolating_4_16bit_mono 8094 0000473A E3BE jecxz lff12_3 ; 17/02/2025 8095 0000473C EBED jmp short lff12m2_1 8096 8097 ; =============== S U B R O U T I N E ======================================= 8098 8099 ; 01/02/2025 8100 load_12khz_stereo_16_bit: 8101 0000473E BE[00600500] mov esi, decoding_buffer ; (contains 8bit stereo samples) 8102 00004743 BF[00800500] mov edi, sample_buffer ; wav output buffer 8103 00004748 8B0D[94AB0000] mov ecx, [loadsize] 8104 0000474E C1E902 shr ecx, 2 ; dword count 8105 lff12s2_1: 8106 ; original-interpolated-interpolated-interpolated 8107 00004751 66AD lodsw 8108 00004753 89C3 mov ebx, eax 8109 00004755 66AD lodsw 8110 00004757 8B16 mov edx, [esi] 8111 00004759 49 dec ecx 8112 0000475A 7502 jnz short lff12s2_2 8113 0000475C 31D2 xor edx, edx ; 0 8114 lff12s2_2: 8115 0000475E 668915[364A0000] mov [next_val_l], dx 8116 00004765 C1EA10 shr edx, 16 8117 00004768 668915[384A0000] mov [next_val_r], dx 8118 ; bx = [previous_val_l] 8119 ; ax = [previous_val_r] 8120 ; [next_val_l] 8121 ; [next_val_r] 8122 0000476F E841020000 call interpolating_4_16bit_stereo 8123 00004774 E384 jecxz lff12_3 ; 17/02/2025 8124 00004776 EBD9 jmp short lff12s2_1 8125 8126 ; =============== S U B R O U T I N E ======================================= 8127 8128 interpolating_3_16bit_mono: 8129 ; 16/11/2023 8130 ; ax = [previous_val] 8131 ; dx = [next_val] 8132 ; original-interpolated-interpolated 8133 8134 00004778 66AB stosw ; original sample (L) 8135 0000477A 66AB stosw ; original sample (R) 8136 0000477C 80C480 add ah, 80h ; convert sound level 0 to 65535 format 8137 0000477F 50 push eax ; * ; [previous_val] 8138 00004780 80C680 add dh, 80h 8139 00004783 6601D0 add ax, dx 8140 00004786 66D1D8 rcr ax, 1 8141 00004789 5B pop ebx ; * 8142 0000478A 93 xchg ebx, eax ; bx = interpolated middle (temporary) 8143 0000478B 6601D8 add ax, bx ; [previous_val] + interpolated middle 8144 0000478E 66D1D8 rcr ax, 1 8145 00004791 80EC80 sub ah, 80h ; -32768 to +32767 format again 8146 00004794 66AB stosw ; interpolated sample 1 (L) 8147 00004796 66AB stosw ; interpolated sample 1 (R) 8148 00004798 89D8 mov eax, ebx 8149 0000479A 6601D0 add ax, dx ; interpolated middle + [next_val] 8150 0000479D 66D1D8 rcr ax, 1 8151 000047A0 80EC80 sub ah, 80h ; -32768 to +32767 format again 8152 000047A3 66AB stosw ; interpolated sample 2 (L) 8153 000047A5 66AB stosw ; interpolated sample 2 (R) 8154 000047A7 C3 retn 8155 8156 ; =============== S U B R O U T I N E ======================================= 8157 8158 interpolating_3_16bit_stereo: 8159 ; 16/11/2023 8160 ; bx = [previous_val_l] 8161 ; ax = [previous_val_r] 8162 ; [next_val_l] 8163 ; dx = [next_val_r] 8164 ; original-interpolated-interpolated 8165 8166 000047A8 93 xchg eax, ebx 8167 000047A9 66AB stosw ; original sample (L) 8168 000047AB 93 xchg eax, ebx 8169 000047AC 66AB stosw ; original sample (R) 8170 000047AE 80C480 add ah, 80h ; convert sound level 0 to 65535 format 8171 000047B1 50 push eax ; * ; [previous_val_r] 8172 000047B2 80C780 add bh, 80h 8173 000047B5 8005[374A0000]80 add byte [next_val_l+1], 80h 8174 000047BC 66A1[364A0000] mov ax, [next_val_l] 8175 000047C2 6601D8 add ax, bx ; [previous_val_l] 8176 000047C5 66D1D8 rcr ax, 1 8177 000047C8 93 xchg eax, ebx ; ax = [previous_val_l] 8178 000047C9 6601D8 add ax, bx ; bx = interpolated middle (L) 8179 000047CC 66D1D8 rcr ax, 1 8180 000047CF 80EC80 sub ah, 80h ; -32768 to +32767 format again 8181 000047D2 66AB stosw ; interpolated sample 1 (L) 8182 000047D4 58 pop eax ; * 8183 000047D5 80C680 add dh, 80h ; convert sound level 0 to 65535 format 8184 000047D8 52 push edx ; * ; [next_val_r] 8185 000047D9 92 xchg eax, edx 8186 000047DA 6601D0 add ax, dx ; [next_val_r] + [previous_val_r] 8187 000047DD 66D1D8 rcr ax, 1 ; / 2 8188 000047E0 50 push eax ; ** ; interpolated middle (R) 8189 000047E1 6601D0 add ax, dx ; + [previous_val_r] 8190 000047E4 66D1D8 rcr ax, 1 8191 000047E7 80EC80 sub ah, 80h ; -32768 to +32767 format again 8192 000047EA 66AB stosw ; interpolated sample 1 (R) 8193 000047EC 66A1[364A0000] mov ax, [next_val_l] 8194 000047F2 6601D8 add ax, bx ; + interpolated middle (L) 8195 000047F5 66D1D8 rcr ax, 1 8196 000047F8 80EC80 sub ah, 80h ; -32768 to +32767 format again 8197 000047FB 66AB stosw ; interpolated sample 2 (L) 8198 000047FD 58 pop eax ; ** 8199 000047FE 5A pop edx ; * 8200 000047FF 6601D0 add ax, dx ; interpolated middle + [next_val_r] 8201 00004802 66D1D8 rcr ax, 1 ; / 2 8202 00004805 80EC80 sub ah, 80h ; -32768 to +32767 format again 8203 00004808 66AB stosw ; interpolated sample 2 (L) 8204 0000480A C3 retn 8205 8206 ; =============== S U B R O U T I N E ======================================= 8207 8208 interpolating_2_16bit_mono: 8209 ; 16/11/2023 8210 ; ax = [previous_val] 8211 ; dx = [next_val] 8212 ; original-interpolated 8213 8214 0000480B 66AB stosw ; original sample (L) 8215 0000480D 66AB stosw ; original sample (R) 8216 0000480F 80C480 add ah, 80h ; convert sound level 0 to 65535 format 8217 00004812 80C680 add dh, 80h 8218 00004815 6601D0 add ax, dx 8219 00004818 66D1D8 rcr ax, 1 8220 0000481B 80EC80 sub ah, 80h ; -32768 to +32767 format again 8221 0000481E 66AB stosw ; interpolated sample (L) 8222 00004820 66AB stosw ; interpolated sample (R) 8223 00004822 C3 retn 8224 8225 ; =============== S U B R O U T I N E ======================================= 8226 8227 interpolating_2_16bit_stereo: 8228 ; 16/11/2023 8229 ; bx = [previous_val_l] 8230 ; ax = [previous_val_r] 8231 ; [next_val_l] 8232 ; dx = [next_val_r] 8233 ; original-interpolated 8234 8235 00004823 93 xchg eax, ebx 8236 00004824 66AB stosw ; original sample (L) 8237 00004826 93 xchg eax, ebx 8238 00004827 66AB stosw ; original sample (R) 8239 00004829 80C480 add ah, 80h ; convert sound level 0 to 65535 format 8240 0000482C 80C680 add dh, 80h 8241 0000482F 6601D0 add ax, dx ; [previous_val_r] + [next_val_r] 8242 00004832 66D1D8 rcr ax, 1 ; / 2 8243 ; 14/01/2025 8244 00004835 80EC80 sub ah, 80h ; -32768 to +32767 format again 8245 ;push eax ; * ; interpolated sample (R) 8246 ; 14/01/2025 8247 00004838 C1E010 shl eax, 16 8248 0000483B 66A1[364A0000] mov ax, [next_val_l] 8249 00004841 80C480 add ah, 80h 8250 00004844 80C780 add bh, 80h 8251 00004847 6601D8 add ax, bx ; [next_val_l] + [previous_val_l] 8252 0000484A 66D1D8 rcr ax, 1 ; / 2 8253 0000484D 80EC80 sub ah, 80h ; -32768 to +32767 format again 8254 ; 14/01/2025 8255 ;stosw ; interpolated sample (L) 8256 ;pop eax ; * 8257 ;sub ah, 80h ; -32768 to +32767 format again 8258 ;stosw ; interpolated sample (R) 8259 ; 14/01/2025 8260 00004850 AB stosd 8261 00004851 C3 retn 8262 8263 ; =============== S U B R O U T I N E ======================================= 8264 8265 interpolating_5_16bit_mono: 8266 ; 18/11/2023 8267 ; ax = [previous_val] 8268 ; dx = [next_val] 8269 ; original-interpltd-interpltd-interpltd-interpltd 8270 00004852 66AB stosw ; original sample (L) 8271 00004854 66AB stosw ; original sample (R) 8272 00004856 80C480 add ah, 80h ; convert sound level 0 to 65535 format 8273 00004859 89C3 mov ebx, eax ; [previous_val] 8274 0000485B 80C680 add dh, 80h 8275 0000485E 6601D0 add ax, dx 8276 00004861 66D1D8 rcr ax, 1 8277 00004864 50 push eax ; * ; interpolated middle (temporary) 8278 00004865 6601D8 add ax, bx ; interpolated middle + [previous_val] 8279 00004868 66D1D8 rcr ax, 1 8280 0000486B 50 push eax ; ** ; interpolated 1st quarter (temporary) 8281 0000486C 6601D8 add ax, bx ; 1st quarter + [previous_val] 8282 0000486F 66D1D8 rcr ax, 1 8283 00004872 80EC80 sub ah, 80h ; -32768 to +32767 format again 8284 00004875 66AB stosw ; interpolated sample 1 (L) 8285 00004877 66AB stosw ; interpolated sample 1 (R) 8286 00004879 58 pop eax ; ** 8287 0000487A 5B pop ebx ; * 8288 0000487B 6601D8 add ax, bx ; 1st quarter + middle 8289 0000487E 66D1D8 rcr ax, 1 ; / 2 8290 00004881 80EC80 sub ah, 80h ; -32768 to +32767 format again 8291 00004884 66AB stosw ; interpolated sample 2 (L) 8292 00004886 66AB stosw ; interpolated sample 2 (R) 8293 00004888 89D8 mov eax, ebx 8294 0000488A 6601D0 add ax, dx ; interpolated middle + [next_val] 8295 0000488D 66D1D8 rcr ax, 1 8296 00004890 50 push eax ; * ; interpolated 3rd quarter (temporary) 8297 00004891 6601D8 add ax, bx ; + interpolated middle 8298 00004894 66D1D8 rcr ax, 1 8299 00004897 80EC80 sub ah, 80h ; -32768 to +32767 format again 8300 0000489A 66AB stosw ; interpolated sample 3 (L) 8301 0000489C 66AB stosw ; interpolated sample 3 (R) 8302 0000489E 58 pop eax ; * 8303 0000489F 6601D0 add ax, dx ; 3rd quarter + [next_val] 8304 000048A2 66D1D8 rcr ax, 1 ; / 2 8305 000048A5 80EC80 sub ah, 80h ; -32768 to +32767 format again 8306 000048A8 66AB stosw ; interpolated sample 4 (L) 8307 000048AA 66AB stosw ; interpolated sample 4 (R) 8308 000048AC C3 retn 8309 8310 ; =============== S U B R O U T I N E ======================================= 8311 8312 interpolating_5_16bit_stereo: 8313 ; 18/11/2023 8314 ; bx = [previous_val_l] 8315 ; ax = [previous_val_r] 8316 ; [next_val_l] 8317 ; [next_val_r] 8318 ; original-interpltd-interpltd-interpltd-interpltd 8319 000048AD 51 push ecx ; ! 8320 000048AE 93 xchg eax, ebx 8321 000048AF 66AB stosw ; original sample (L) 8322 000048B1 93 xchg eax, ebx 8323 000048B2 66AB stosw ; original sample (R) 8324 000048B4 80C480 add ah, 80h ; convert sound level 0 to 65535 format 8325 000048B7 50 push eax ; * ; [previous_val_r] 8326 000048B8 80C780 add bh, 80h 8327 000048BB 8005[374A0000]80 add byte [next_val_l+1], 80h 8328 000048C2 66A1[364A0000] mov ax, [next_val_l] 8329 000048C8 6601D8 add ax, bx ; [previous_val_l] 8330 000048CB 66D1D8 rcr ax, 1 8331 000048CE 89C1 mov ecx, eax ; interpolated middle (L) 8332 000048D0 6601D8 add ax, bx 8333 000048D3 66D1D8 rcr ax, 1 8334 000048D6 89C2 mov edx, eax ; interpolated 1st quarter (L) 8335 000048D8 6601D8 add ax, bx ; [previous_val_l] 8336 000048DB 66D1D8 rcr ax, 1 8337 000048DE 80EC80 sub ah, 80h ; -32768 to +32767 format again 8338 000048E1 66AB stosw ; interpolated sample 1 (L) 8339 000048E3 89C8 mov eax, ecx 8340 000048E5 6601D0 add ax, dx ; middle (L) + 1st quarter (L) 8341 000048E8 66D1D8 rcr ax, 1 ; / 2 8342 000048EB 89C3 mov ebx, eax ; interpolated sample 2 (L) 8343 000048ED 5A pop edx ; * ; [previous_val_r] 8344 000048EE 89D0 mov eax, edx 8345 000048F0 8005[394A0000]80 add byte [next_val_r+1], 80h 8346 000048F7 660305[384A0000] add ax, [next_val_r] 8347 000048FE 66D1D8 rcr ax, 1 8348 00004901 50 push eax ; * ; interpolated middle (R) 8349 00004902 6601D0 add ax, dx 8350 00004905 66D1D8 rcr ax, 1 8351 00004908 50 push eax ; ** ; interpolated 1st quarter (R) 8352 00004909 6601D0 add ax, dx ; [previous_val_r] 8353 0000490C 66D1D8 rcr ax, 1 8354 0000490F 80EC80 sub ah, 80h ; -32768 to +32767 format again 8355 00004912 66AB stosw ; interpolated sample 1 (R) 8356 00004914 89D8 mov eax, ebx 8357 00004916 80EC80 sub ah, 80h ; -32768 to +32767 format again 8358 00004919 66AB stosw ; interpolated sample 2 (L) 8359 0000491B 58 pop eax ; ** 8360 0000491C 5A pop edx ; * 8361 0000491D 6601D0 add ax, dx ; 1st quarter (R) + middle (R) 8362 00004920 66D1D8 rcr ax, 1 ; / 2 8363 00004923 80EC80 sub ah, 80h ; -32768 to +32767 format again 8364 00004926 66AB stosw ; interpolated sample 2 (R) 8365 00004928 89C8 mov eax, ecx 8366 0000492A 660305[364A0000] add ax, [next_val_l] 8367 00004931 66D1D8 rcr ax, 1 8368 00004934 50 push eax ; * ; interpolated 3rd quarter (L) 8369 00004935 6601C8 add ax, cx ; interpolated middle (L) 8370 00004938 66D1D8 rcr ax, 1 8371 0000493B 80EC80 sub ah, 80h ; -32768 to +32767 format again 8372 0000493E 66AB stosw ; interpolated sample 3 (L) 8373 00004940 89D0 mov eax, edx 8374 00004942 660305[384A0000] add ax, [next_val_r] 8375 00004949 66D1D8 rcr ax, 1 8376 0000494C 50 push eax ; ** ; interpolated 3rd quarter (R) 8377 0000494D 6601D0 add ax, dx ; interpolated middle (R) 8378 00004950 66D1D8 rcr ax, 1 8379 00004953 80EC80 sub ah, 80h ; -32768 to +32767 format again 8380 00004956 66AB stosw ; interpolated sample 3 (R) 8381 00004958 5B pop ebx ; ** 8382 00004959 58 pop eax ; * 8383 0000495A 660305[364A0000] add ax, [next_val_l] 8384 00004961 66D1D8 rcr ax, 1 8385 00004964 80EC80 sub ah, 80h ; -32768 to +32767 format again 8386 00004967 66AB stosw ; interpolated sample 4 (L) 8387 00004969 89D8 mov eax, ebx 8388 0000496B 660305[384A0000] add ax, [next_val_r] 8389 00004972 66D1D8 rcr ax, 1 8390 00004975 80EC80 sub ah, 80h ; -32768 to +32767 format again 8391 00004978 66AB stosw ; interpolated sample 4 (R) 8392 0000497A 59 pop ecx ; ! 8393 0000497B C3 retn 8394 8395 ; =============== S U B R O U T I N E ======================================= 8396 8397 interpolating_4_16bit_mono: 8398 ; 18/11/2023 8399 ; ax = [previous_val] 8400 ; dx = [next_val] 8401 ; 01/02/2025 8402 ; original-interpolated-interpolated-interpolated 8403 8404 0000497C 66AB stosw ; original sample (L) 8405 0000497E 66AB stosw ; original sample (R) 8406 00004980 80C480 add ah, 80h ; convert sound level 0 to 65535 format 8407 00004983 89C3 mov ebx, eax ; [previous_val] 8408 00004985 80C680 add dh, 80h 8409 00004988 6601D0 add ax, dx ; [previous_val] + [next_val] 8410 0000498B 66D1D8 rcr ax, 1 8411 0000498E 93 xchg eax, ebx 8412 0000498F 6601D8 add ax, bx ; [previous_val] + interpolated middle 8413 00004992 66D1D8 rcr ax, 1 8414 00004995 80EC80 sub ah, 80h ; -32768 to +32767 format again 8415 00004998 66AB stosw ; interpolated sample 1 (L) 8416 0000499A 66AB stosw ; interpolated sample 1 (R) 8417 0000499C 89D8 mov eax, ebx ; interpolated middle 8418 0000499E 80EC80 sub ah, 80h ; -32768 to +32767 format again 8419 000049A1 66AB stosw ; interpolated sample 2 (L) 8420 000049A3 66AB stosw ; interpolated sample 2 (R) 8421 000049A5 89D8 mov eax, ebx 8422 000049A7 6601D0 add ax, dx ; interpolated middle + [next_val] 8423 000049AA 66D1D8 rcr ax, 1 8424 000049AD 80EC80 sub ah, 80h ; -32768 to +32767 format again 8425 000049B0 66AB stosw ; interpolated sample 3 (L) 8426 000049B2 66AB stosw ; interpolated sample 3 (R) 8427 000049B4 C3 retn 8428 8429 ; =============== S U B R O U T I N E ======================================= 8430 8431 interpolating_4_16bit_stereo: 8432 ; 18/11/2023 8433 ; bx = [previous_val_l] 8434 ; ax = [previous_val_r] 8435 ; [next_val_l] 8436 ; [next_val_r] 8437 ; original-interpolated-interpolated-interpolated 8438 000049B5 93 xchg eax, ebx 8439 000049B6 66AB stosw ; original sample (L) 8440 000049B8 93 xchg eax, ebx 8441 000049B9 66AB stosw ; original sample (R) 8442 000049BB 80C480 add ah, 80h ; convert sound level 0 to 65535 format 8443 000049BE 89C2 mov edx, eax ; [previous_val_r] 8444 000049C0 80C780 add bh, 80h 8445 000049C3 8005[374A0000]80 add byte [next_val_l+1], 80h 8446 000049CA 66A1[364A0000] mov ax, [next_val_l] 8447 000049D0 6601D8 add ax, bx ; [previous_val_l] 8448 000049D3 66D1D8 rcr ax, 1 8449 000049D6 93 xchg eax, ebx 8450 000049D7 6601D8 add ax, bx ; bx = interpolated middle (L) 8451 000049DA 66D1D8 rcr ax, 1 8452 000049DD 80EC80 sub ah, 80h ; -32768 to +32767 format again 8453 000049E0 66AB stosw ; interpolated sample 1 (L) 8454 000049E2 8005[394A0000]80 add byte [next_val_r+1], 80h 8455 000049E9 89D0 mov eax, edx ; [previous_val_r] 8456 000049EB 660305[384A0000] add ax, [next_val_r] 8457 000049F2 66D1D8 rcr ax, 1 8458 000049F5 92 xchg eax, edx 8459 000049F6 6601D0 add ax, dx ; dx = interpolated middle (R) 8460 000049F9 66D1D8 rcr ax, 1 8461 000049FC 80EC80 sub ah, 80h ; -32768 to +32767 format again 8462 000049FF 66AB stosw ; interpolated sample 1 (R) 8463 00004A01 89D8 mov eax, ebx 8464 00004A03 80EC80 sub ah, 80h ; -32768 to +32767 format again 8465 00004A06 66AB stosw ; interpolated sample 2 (L) 8466 00004A08 89D0 mov eax, edx 8467 00004A0A 80EC80 sub ah, 80h ; -32768 to +32767 format again 8468 00004A0D 66AB stosw ; interpolated sample 2 (R) 8469 00004A0F 89D8 mov eax, ebx 8470 00004A11 660305[364A0000] add ax, [next_val_l] 8471 00004A18 66D1D8 rcr ax, 1 8472 00004A1B 80EC80 sub ah, 80h ; -32768 to +32767 format again 8473 00004A1E 66AB stosw ; interpolated sample 3 (L) 8474 00004A20 89D0 mov eax, edx 8475 00004A22 660305[384A0000] add ax, [next_val_r] 8476 00004A29 66D1D8 rcr ax, 1 8477 00004A2C 80EC80 sub ah, 80h ; -32768 to +32767 format again 8478 00004A2F 66AB stosw ; interpolated sample 3 (R) 8479 00004A31 C3 retn 8480 8481 ; --------------------------------------------------------------------------- 8482 8483 ; 13/11/2023 8484 previous_val: 8485 00004A32 0000 previous_val_l: dw 0 8486 00004A34 0000 previous_val_r: dw 0 8487 next_val: 8488 00004A36 0000 next_val_l: dw 0 8489 00004A38 0000 next_val_r: dw 0 8490 8491 ; 16/11/2023 8492 00004A3A 00 faz: db 0 8493 8494 ; --------------------------------------------------------------------------- 8495 ; 15/02/2025 - Hardware Info display/write procedures. 8496 ; --------------------------------------------------------------------------- 8497 ; ref: twavply3.s (10/02/2025 8498 8499 ;============================================================================= 8500 ; Write AC'97 Hardware Information 8501 ;============================================================================= 8502 8503 ; 09/02/2025 8504 8505 write_audio_dev_info: 8506 00004A3B 31DB xor ebx, ebx 8507 00004A3D 803D[84AB0000]01 cmp byte [audio_hardware], 1 8508 00004A44 7557 jne short write_ac97_pci_dev_info 8509 8510 ;----------------------------------------------------------------------------- 8511 8512 ; 09/02/2025 8513 ; 05/02/2025 - sb16play.s 8514 8515 write_sb16_dev_info: 8516 00004A46 A1[7CAB0000] mov eax, [audio_io_base] 8517 ;xor ebx, ebx 8518 00004A4B 88C3 mov bl, al 8519 00004A4D 88DA mov dl, bl 8520 00004A4F 80E30F and bl, 0Fh 8521 00004A52 8A83[12A80000] mov al, [ebx+hex_chars] 8522 00004A58 A2[BCA90000] mov [msgBasePort+2], al 8523 00004A5D 88D3 mov bl, dl 8524 00004A5F C0EB04 shr bl, 4 8525 00004A62 8A83[12A80000] mov al, [ebx+hex_chars] 8526 00004A68 A2[BBA90000] mov [msgBasePort+1], al 8527 00004A6D 88E3 mov bl, ah 8528 ;and bl, 0Fh 8529 00004A6F 8A83[12A80000] mov al, [ebx+hex_chars] 8530 00004A75 A2[BAA90000] mov [msgBasePort], al 8531 8532 ;xor eax, eax 8533 00004A7A A0[80AB0000] mov al, [audio_intr] 8534 00004A7F 0430 add al, 30h 8535 00004A81 A2[D1A90000] mov [msgSB16IRQ], al 8536 8537 sys _msg, msgSB16Info, 255, 07h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00004A86 BB[84A90000] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00004A8B B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 00004A90 BA07000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00004A95 B823000000 <1> mov eax, %1 112 <1> 113 00004A9A CD40 <1> int 40h 8538 8539 00004A9C C3 retn 8540 8541 ;----------------------------------------------------------------------------- 8542 8543 ; 09/02/2025 8544 ; 05/02/2025 - ac97play.s 8545 8546 write_ac97_pci_dev_info: 8547 ; BUS/DEV/FN 8548 ; 00000000BBBBBBBBDDDDDFFF00000000 8549 ; DEV/VENDOR 8550 ; DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV 8551 8552 00004A9D A1[74AB0000] mov eax, [dev_vendor] 8553 ; 07/12/2024 8554 00004AA2 31DB xor ebx, ebx 8555 00004AA4 88C3 mov bl, al 8556 00004AA6 88DA mov dl, bl 8557 00004AA8 80E30F and bl, 0Fh 8558 00004AAB 8A83[12A80000] mov al, [ebx+hex_chars] 8559 00004AB1 A2[57A80000] mov [msgVendorId+3], al 8560 00004AB6 88D3 mov bl, dl 8561 00004AB8 C0EB04 shr bl, 4 8562 00004ABB 8A83[12A80000] mov al, [ebx+hex_chars] 8563 00004AC1 A2[56A80000] mov [msgVendorId+2], al 8564 00004AC6 88E3 mov bl, ah 8565 00004AC8 88DA mov dl, bl 8566 00004ACA 80E30F and bl, 0Fh 8567 00004ACD 8A83[12A80000] mov al, [ebx+hex_chars] 8568 00004AD3 A2[55A80000] mov [msgVendorId+1], al 8569 00004AD8 88D3 mov bl, dl 8570 00004ADA C0EB04 shr bl, 4 8571 00004ADD 8A83[12A80000] mov al, [ebx+hex_chars] 8572 00004AE3 A2[54A80000] mov [msgVendorId], al 8573 00004AE8 C1E810 shr eax, 16 8574 00004AEB 88C3 mov bl, al 8575 00004AED 88DA mov dl, bl 8576 00004AEF 80E30F and bl, 0Fh 8577 00004AF2 8A83[12A80000] mov al, [ebx+hex_chars] 8578 00004AF8 A2[68A80000] mov [msgDevId+3], al 8579 00004AFD 88D3 mov bl, dl 8580 00004AFF C0EB04 shr bl, 4 8581 00004B02 8A83[12A80000] mov al, [ebx+hex_chars] 8582 00004B08 A2[67A80000] mov [msgDevId+2], al 8583 00004B0D 88E3 mov bl, ah 8584 00004B0F 88DA mov dl, bl 8585 00004B11 80E30F and bl, 0Fh 8586 00004B14 8A83[12A80000] mov al, [ebx+hex_chars] 8587 00004B1A A2[66A80000] mov [msgDevId+1], al 8588 00004B1F 88D3 mov bl, dl 8589 00004B21 C0EB04 shr bl, 4 8590 00004B24 8A83[12A80000] mov al, [ebx+hex_chars] 8591 00004B2A A2[65A80000] mov [msgDevId], al 8592 8593 00004B2F A1[70AB0000] mov eax, [bus_dev_fn] 8594 00004B34 C1E808 shr eax, 8 8595 00004B37 88C3 mov bl, al 8596 00004B39 88DA mov dl, bl 8597 00004B3B 80E307 and bl, 7 ; bit 0,1,2 8598 00004B3E 8A83[12A80000] mov al, [ebx+hex_chars] 8599 00004B44 A2[8CA80000] mov [msgFncNo+1], al 8600 00004B49 88D3 mov bl, dl 8601 00004B4B C0EB03 shr bl, 3 8602 00004B4E 88DA mov dl, bl 8603 00004B50 80E30F and bl, 0Fh 8604 00004B53 8A83[12A80000] mov al, [ebx+hex_chars] 8605 00004B59 A2[7EA80000] mov [msgDevNo+1], al 8606 00004B5E 88D3 mov bl, dl 8607 00004B60 C0EB04 shr bl, 4 8608 00004B63 8A83[12A80000] mov al, [ebx+hex_chars] 8609 00004B69 A2[7DA80000] mov [msgDevNo], al 8610 00004B6E 88E3 mov bl, ah 8611 00004B70 88DA mov dl, bl 8612 00004B72 80E30F and bl, 0Fh 8613 00004B75 8A83[12A80000] mov al, [ebx+hex_chars] 8614 00004B7B A2[72A80000] mov [msgBusNo+1], al 8615 00004B80 88D3 mov bl, dl 8616 00004B82 C0EB04 shr bl, 4 8617 00004B85 8A83[12A80000] mov al, [ebx+hex_chars] 8618 00004B8B A2[71A80000] mov [msgBusNo], al 8619 8620 ;mov ax, [ac97_NamBar] 8621 00004B90 66A1[78AB0000] mov ax, [NAMBAR] 8622 00004B96 88C3 mov bl, al 8623 00004B98 88DA mov dl, bl 8624 00004B9A 80E30F and bl, 0Fh 8625 00004B9D 8A83[12A80000] mov al, [ebx+hex_chars] 8626 00004BA3 A2[9BA80000] mov [msgNamBar+3], al 8627 00004BA8 88D3 mov bl, dl 8628 00004BAA C0EB04 shr bl, 4 8629 00004BAD 8A83[12A80000] mov al, [ebx+hex_chars] 8630 00004BB3 A2[9AA80000] mov [msgNamBar+2], al 8631 00004BB8 88E3 mov bl, ah 8632 00004BBA 88DA mov dl, bl 8633 00004BBC 80E30F and bl, 0Fh 8634 00004BBF 8A83[12A80000] mov al, [ebx+hex_chars] 8635 00004BC5 A2[99A80000] mov [msgNamBar+1], al 8636 00004BCA 88D3 mov bl, dl 8637 00004BCC C0EB04 shr bl, 4 8638 00004BCF 8A83[12A80000] mov al, [ebx+hex_chars] 8639 00004BD5 A2[98A80000] mov [msgNamBar], al 8640 8641 ;mov ax, [ac97_NabmBar] 8642 00004BDA 66A1[7AAB0000] mov ax, [NABMBAR] 8643 00004BE0 88C3 mov bl, al 8644 00004BE2 88DA mov dl, bl 8645 00004BE4 80E30F and bl, 0Fh 8646 00004BE7 8A83[12A80000] mov al, [ebx+hex_chars] 8647 00004BED A2[ABA80000] mov [msgNabmBar+3], al 8648 00004BF2 88D3 mov bl, dl 8649 00004BF4 C0EB04 shr bl, 4 8650 00004BF7 8A83[12A80000] mov al, [ebx+hex_chars] 8651 00004BFD A2[AAA80000] mov [msgNabmBar+2], al 8652 00004C02 88E3 mov bl, ah 8653 00004C04 88DA mov dl, bl 8654 00004C06 80E30F and bl, 0Fh 8655 00004C09 8A83[12A80000] mov al, [ebx+hex_chars] 8656 00004C0F A2[A9A80000] mov [msgNabmBar+1], al 8657 00004C14 88D3 mov bl, dl 8658 00004C16 C0EB04 shr bl, 4 8659 00004C19 8A83[12A80000] mov al, [ebx+hex_chars] 8660 00004C1F A2[A8A80000] mov [msgNabmBar], al 8661 8662 00004C24 31C0 xor eax, eax 8663 00004C26 A0[80AB0000] mov al, [ac97_int_ln_reg] 8664 00004C2B B10A mov cl, 10 8665 00004C2D F6F1 div cl 8666 ;add [msgIRQ], ax 8667 00004C2F 66053030 add ax, 3030h 8668 00004C33 66A3[B4A80000] mov [msgIRQ], ax 8669 ;and al, al 8670 00004C39 3C30 cmp al, 30h 8671 00004C3B 750D jne short _w_ac97imsg_ 8672 00004C3D A0[B5A80000] mov al, [msgIRQ+1] 8673 00004C42 B420 mov ah, ' ' 8674 00004C44 66A3[B4A80000] mov [msgIRQ], ax 8675 _w_ac97imsg_: 8676 sys _msg, msgAC97Info, 255, 07h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00004C4A BB[23A80000] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00004C4F B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 00004C54 BA07000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00004C59 B823000000 <1> mov eax, %1 112 <1> 113 00004C5E CD40 <1> int 40h 8677 8678 ;retn 8679 8680 ;----------------------------------------------------------------------------- 8681 8682 write_VRA_info: 8683 sys _msg, msgVRAheader, 255, 07h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00004C60 BB[3FA90000] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00004C65 B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 00004C6A BA07000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00004C6F B823000000 <1> mov eax, %1 112 <1> 113 00004C74 CD40 <1> int 40h 8684 00004C76 803D[85AB0000]00 cmp byte [vra], 0 8685 00004C7D 7617 jna short _w_VRAi_no 8686 _w_VRAi_yes: 8687 sys _msg, msgVRAyes, 255, 07h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00004C7F BB[4DA90000] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00004C84 B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 00004C89 BA07000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00004C8E B823000000 <1> mov eax, %1 112 <1> 113 00004C93 CD40 <1> int 40h 8688 00004C95 C3 retn 8689 _w_VRAi_no: 8690 sys _msg, msgVRAno, 255, 07h 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00004C96 BB[53A90000] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00004C9B B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 00004CA0 BA07000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00004CA5 B823000000 <1> mov eax, %1 112 <1> 113 00004CAA CD40 <1> int 40h 8691 00004CAC C3 retn 8692 8693 ; 13/01/2025 8694 ; --------------------------------------------------------------------------- 8695 ; 25/11/2023 8696 msg_no_vra: 8697 00004CAD 0A0D db 10, 13 8698 00004CAF 4E6F20565241207375- db "No VRA support ! Only 48 kHZ sample rate supported !" 8698 00004CB8 70706F72742021204F- 8698 00004CC1 6E6C79203438206B48- 8698 00004CCA 5A2073616D706C6520- 8698 00004CD3 726174652073757070- 8698 00004CDC 6F727465642021 8699 00004CE3 0A0D00 db 10, 13, 0 8700 8701 8702 ; --------------------------------------------------------------------------- 8703 ; 22/01/2025 - Check Update Events 8704 ; --------------------------------------------------------------------------- 8705 ; ref: playwav9.s (17/01/2025) 8706 8707 ; =============== S U B R O U T I N E ======================================= 8708 8709 ; 16/02/2025 (tmp3play.s) 8710 ; 10/02/2025 (twavply3.s) 8711 ; 13/02/2025 (mp3play6.s) 8712 ; 26/01/2025 (mp3play5.s) 8713 ; 24/12/2024 (vgaplay.s) 8714 ; 23/01/2025 (mp3play4.s) 8715 ; 07/12/2024 (playwav9.s) 8716 8717 checkUpdateEvents: 8718 00004CE6 E8B4000000 call check4keyboardstop 8719 00004CEB 7259 jc short .c4ue_ok 8720 8721 00004CED 50 push eax ; * 8722 00004CEE 09C0 or eax, eax 8723 00004CF0 747F jz short .c4ue_cpt 8724 8725 00004CF2 3C20 cmp al, 20h ; SPACE (spacebar) ; pause/play 8726 00004CF4 7551 jne short .c4ue_chk_s 8727 00004CF6 803D[81AB0000]00 cmp byte [stopped], 0 8728 00004CFD 7707 ja short .c4ue_chk_ps 8729 ; pause 8730 00004CFF E84EEFFFFF call audio_f_pause 8731 8732 00004D04 EB6B jmp short .c4ue_cpt 8733 .c4ue_chk_ps: 8734 00004D06 803D[81AB0000]01 cmp byte [stopped], 1 8735 00004D0D 7707 ja short .c4ue_replay 8736 8737 ; continue to play (after a pause) 8738 00004D0F E852EFFFFF call audio_f_play 8739 00004D14 EB5B jmp .c4ue_cpt 8740 .c4ue_replay: 8741 00004D16 58 pop eax ; * 8742 00004D17 58 pop eax ; return address 8743 8744 00004D18 C605[81AB0000]00 mov byte [stopped], 0 8745 8746 ; move to beginning 8747 ;mov eax, [stream_start] 8748 00004D1F A1[64AB0000] mov eax, [stream_begin] ; 1st [stream_pos] value 8749 00004D24 A3[EC4A0500] mov [stream_pos], eax 8750 00004D29 A1[60AB0000] mov eax, [stream_size] 8751 00004D2E A3[F04A0500] mov [bytes_left], eax 8752 8753 00004D33 803D[98AB0000]00 cmp byte [interpolation], 0 8754 00004D3A 7705 ja short .c4ue_rp_indr 8755 ;jmp start.direct 8756 ; 16/02/2025 8757 00004D3C E90AB5FFFF jmp replay.direct 8758 .c4ue_rp_indr: 8759 ;jmp start.indirect 8760 ; 16/02/2025 8761 00004D41 E924B5FFFF jmp replay.indirect 8762 .c4ue_ok: 8763 00004D46 C3 retn 8764 .c4ue_chk_s: 8765 00004D47 3C53 cmp al, 'S' ; stop 8766 00004D49 7510 jne short .c4ue_chk_fb 8767 00004D4B 803D[81AB0000]00 cmp byte [stopped], 0 8768 00004D52 771D ja short .c4ue_cpt ; Already stopped/paused 8769 .c4ue_stop: 8770 00004D54 E8CDEEFFFF call audio_f_stop 8771 00004D59 EB16 jmp short .c4ue_cpt 8772 .c4ue_chk_fb: 8773 00004D5B 3C46 cmp al, 'F' 8774 00004D5D 7507 jne short .c4ue_chk_b 8775 ;call Player_ProcessKey_Forwards 8776 ; 16/02/2025 8777 00004D5F E89A000000 call move_forward 8778 00004D64 EB0B jmp short .c4ue_cpt 8779 .c4ue_chk_b: 8780 00004D66 3C42 cmp al, 'B' 8781 ; 16/02/2025 8782 00004D68 7507 jne short .c4ue_cpt 8783 ;call Player_ProcessKey_Backwards 8784 ; 16/02/2025 8785 00004D6A E8BC000000 call move_backward 8786 00004D6F EB00 jmp short .c4ue_cpt 8787 8788 ; 16/02/2025 8789 .c4ue_cpt: 8790 sys _time, 4 ; get timer ticks (18.2 ticks/second) 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00004D71 BB04000000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 <1> mov ecx, %3 106 <1> %if %0 = 4 107 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00004D76 B80D000000 <1> mov eax, %1 112 <1> 113 00004D7B CD40 <1> int 40h 8791 8792 00004D7D 59 pop ecx ; * 8793 00004D7E 3B05[8CAB0000] cmp eax, [timerticks] 8794 00004D84 7407 je short .c4ue_skip_utt 8795 .c4ue_utt: 8796 00004D86 A3[8CAB0000] mov [timerticks], eax 8797 00004D8B EB04 jmp short .c4ue_cpt_@ 8798 8799 .c4ue_skip_utt: 8800 00004D8D 21C9 and ecx, ecx 8801 00004D8F 74B5 jz short .c4ue_ok 8802 .c4ue_cpt_@: 8803 00004D91 803D[81AB0000]00 cmp byte [stopped], 0 8804 00004D98 77AC ja short .c4ue_ok 8805 8806 ; 16/02/2025 8807 00004D9A E9D1020000 jmp drawscopes 8808 8809 8810 ; =============== S U B R O U T I N E ======================================= 8811 8812 ; -------------------------------------------------------- 8813 ; 22/01/2025 - Check for Keyboard Stop (Request) 8814 ; -------------------------------------------------------- 8815 8816 ; 16/02/2025 8817 ; 23/01/2025 8818 ; 22/01/2025 8819 check4keyboardstop: 8820 00004D9F B411 mov ah, 11h 8821 ; (TRDOS 386 keyboard interrupt) 8822 00004DA1 CD32 int 32h 8823 ;clc 8824 00004DA3 7438 jz short .cksr 8825 8826 00004DA5 B410 mov ah, 10h 8827 00004DA7 CD32 int 32h 8828 8829 ; 13/02/2025 8830 ; 23/01/2025 8831 ;;;; 8832 .clear_keyb_buf: 8833 00004DA9 50 push eax ; * 8834 ; clear keyboard buffer 8835 00004DAA B411 mov ah, 11h 8836 00004DAC CD32 int 32h 8837 00004DAE 7407 jz short .c4ks 8838 00004DB0 B410 mov ah, 10h 8839 00004DB2 CD32 int 32h 8840 00004DB4 5A pop edx ; * 8841 00004DB5 EBF2 jmp short .clear_keyb_buf 8842 8843 ; TRDOS 386 system call 8844 ; sysstdio 8845 ; BL = 1 -> read a character on stdin (no wait) 8846 ;sys _stdio, 1 8847 ;and eax, eax 8848 ;jz short .cksr 8849 8850 ; 23/01/2025 8851 .c4ks: 8852 00004DB7 58 pop eax ; * 8853 ;;;; 8854 8855 ;;; 8856 ; (change PCM out volume) 8857 00004DB8 3C2B cmp al, '+' 8858 00004DBA 750D jne short .p_1 8859 8860 00004DBC A0[C4AA0000] mov al, [volume_level] 8861 00004DC1 3C00 cmp al, 0 8862 00004DC3 761A jna short .p_3 8863 00004DC5 FEC8 dec al 8864 00004DC7 EB0F jmp short .p_2 8865 .p_1: 8866 00004DC9 3C2D cmp al, '-' 8867 00004DCB 7513 jne short .p_4 8868 8869 00004DCD A0[C4AA0000] mov al, [volume_level] 8870 00004DD2 3C1F cmp al, 31 8871 00004DD4 7309 jnb short .p_3 8872 00004DD6 FEC0 inc al 8873 .p_2: 8874 ; 16/02/2025 8875 00004DD8 E89DEEFFFF call SetMasterVolume 8876 .cksr: 8877 00004DDD 31C0 xor eax, eax 8878 .p_3: 8879 00004DDF C3 retn 8880 .p_4: 8881 ;cmp ah, 01 ; ESC 8882 00004DE0 663D1B01 cmp ax, 011Bh ; ESC 8883 00004DE4 7416 je short .p_q 8884 ;cmp al, 03h ; CTRL+C 8885 00004DE6 663D032E cmp ax, 2E03h ; CTRL+C 8886 00004DEA 7410 je short .p_q 8887 8888 00004DEC 3C20 cmp al, 20h 8889 00004DEE 740D je short .p_r 8890 8891 00004DF0 3C0D cmp al, 0Dh ; CR/ENTER 8892 00004DF2 7409 je short .p_r 8893 8894 00004DF4 24DF and al, 0DFh 8895 8896 ;cmp al, 'B' 8897 ;je short .p_r 8898 ;cmp al, 'F' 8899 ;je short .p_r 8900 8901 00004DF6 3C51 cmp al, 'Q' 8902 00004DF8 7402 je short .p_q 8903 8904 00004DFA F8 clc 8905 00004DFB C3 retn 8906 8907 .p_q: 8908 00004DFC F9 stc 8909 .p_r: 8910 00004DFD C3 retn 8911 8912 8913 ; -------------------------------------------------------- 8914 ; 22/01/2025 - Goto Forward approx. 5 seconds 8915 ; -------------------------------------------------------- 8916 8917 ; 16/02/2025 8918 move_forward: 8919 ; 23/01/2025 8920 ; 22/01/2025 8921 ;Player_ProcessKey_Forwards: 8922 ;; 5 seconds forward 8923 ;;;; 8924 ;xor ebp, ebp ; 0 8925 ;;;; 8926 00004DFE A0[86AB0000] mov al, [srb] 8927 00004E03 50 push eax ; * 8928 00004E04 A1[68AB0000] mov eax, [fb_count] 8929 00004E09 8B0D[60AB0000] mov ecx, [stream_size] 8930 00004E0F 89CA mov edx, ecx 8931 00004E11 2B15[F04A0500] sub edx, [bytes_left] 8932 00004E17 01D0 add eax, edx 8933 00004E19 720C jc short .ppk_f@ 8934 ; 23/01/2025 8935 00004E1B 89CA mov edx, ecx 8936 00004E1D 2B15[68AB0000] sub edx, [fb_count] 8937 00004E23 39D0 cmp eax, edx 8938 ;jna short Player_ProcessKey_set_pos 8939 ; 16/02/2025 8940 00004E25 7626 jna short move_fwbw_set_pos 8941 .ppk_f@: 8942 00004E27 89D0 mov eax, edx ; offset 8943 ;jmp short Player_ProcessKey_set_pos 8944 ; 16/02/2025 8945 00004E29 EB22 jmp short move_fwbw_set_pos 8946 8947 ; -------------------------------------------------------- 8948 ; 22/01/2025 - Goto Backward approx. 5 seconds 8949 ; -------------------------------------------------------- 8950 8951 ; 16/02/2025 8952 move_backward: 8953 ; 22/01/2025 8954 ;Player_ProcessKey_Backwards: 8955 ;; 5 seconds backward 8956 ; 23/01/2025 8957 ;;;; 8958 ;xor ebp, 1 8959 ;;;; 8960 00004E2B A0[86AB0000] mov al, [srb] 8961 00004E30 50 push eax ; * 8962 00004E31 8B15[68AB0000] mov edx, [fb_count] 8963 00004E37 8B0D[60AB0000] mov ecx, [stream_size] 8964 ; the 1st/init value of [bytes_left] 8965 00004E3D 89C8 mov eax, ecx 8966 00004E3F 2B05[F04A0500] sub eax, [bytes_left] 8967 00004E45 7604 jna short .ppk_bw@ 8968 00004E47 29D0 sub eax, edx 8969 ;jnc short Player_ProcessKey_set_pos 8970 ; 16/02/2025 8971 00004E49 7302 jnc short move_fwbw_set_pos 8972 .ppk_bw@: 8973 00004E4B 31C0 xor eax, eax ; offset 8974 8975 ; -------------------------------------------------------- 8976 8977 ; 16/02/2025 8978 move_fwbw_set_pos: 8979 ; 23/01/2025 8980 ; 22/01/2025 8981 ;Player_ProcessKey_set_pos: 8982 00004E4D 5B pop ebx ; * 8983 ; skip position change if audio interrupt occurs 8984 ; during this f/b procedure 8985 ; (because [bytes_left] would be changed) 8986 00004E4E 803D[86AB0000]00 cmp byte [srb], 0 8987 00004E55 7605 jna short .ppk_sp@ ; proper to change 8988 00004E57 80FB00 cmp bl, 0 8989 00004E5A 7628 jna short .ppk_sp@@@ 8990 ; [srb] was 1 when starting this f/b procedure 8991 ; (so, there is not a conflict) 8992 .ppk_sp@: 8993 ; pause playback, pause/start audio interrupt 8994 00004E5C 51 push ecx 8995 00004E5D 50 push eax 8996 00004E5E E8EFEDFFFF call audio_f_pause 8997 00004E63 58 pop eax 8998 00004E64 59 pop ecx 8999 9000 00004E65 8B1D[64AB0000] mov ebx, [stream_begin] 9001 ; the 1st/init value of [stream_pos] 9002 00004E6B 01C3 add ebx, eax 9003 00004E6D 891D[EC4A0500] mov [stream_pos], ebx 9004 ; ecx = [stream_size] 9005 ; eax = offset 9006 00004E73 29C1 sub ecx, eax 9007 00004E75 7302 jnc short .ppk_sp@@ 9008 00004E77 31C9 xor ecx, ecx 9009 .ppk_sp@@: 9010 ; 23/01/2025 9011 00004E79 890D[F04A0500] mov [bytes_left], ecx 9012 9013 ;;;; 9014 ; continue to playback 9015 00004E7F E8E2EDFFFF call audio_f_play 9016 .ppk_sp@@@: 9017 ; clear keyboard buffer 9018 ;call clear_keyb_buf 9019 ; 23/01/2025 9020 .clear_keyb_buf: 9021 ; clear keyboard buffer 9022 00004E84 B401 mov ah, 1 9023 00004E86 CD32 int 32h 9024 00004E88 7406 jz short .ppk_sp_ok 9025 00004E8A B400 mov ah, 0 9026 00004E8C CD32 int 32h 9027 00004E8E EBF4 jmp short .clear_keyb_buf 9028 9029 .ppk_sp_ok: 9030 00004E90 C3 retn 9031 9032 9033 ; =============== S U B R O U T I N E ======================================= 9034 9035 ; 25/01/2025 9036 ; 21/12/2024 9037 set_text_mode: 9038 00004E91 30E4 xor ah, ah 9039 00004E93 B003 mov al, 3 9040 ;int 10h ; al = 03h text mode, int 10 video 9041 00004E95 CD31 int 31h ; TRDOS 386 - Video interrupt 9042 00004E97 C3 retn 9043 9044 ; =============== S U B R O U T I N E ======================================= 9045 9046 ; 16/02/2025 (tmp3play.s) 9047 ; 13/02/2025 (mp3play6.s) 9048 ; 30/12/2024 (cgaplay.s) 9049 ; 26/01/2025 9050 ; 25/01/2025 (mp3play5.s) -graphics/VGA mode- 9051 ; 21/12/2024 (vgaplay.s) 9052 ; 22/01/2025 (mp3play4.s) -text mode- 9053 ; 21/01/2025 9054 SetTotalTime: 9055 ;;;; 22/01/2025 9056 00004E98 8B1D[C4BB0000] mov ebx, [mp3_bit_rate] ; bit/s 9057 00004E9E 89D8 mov eax, ebx 9058 00004EA0 C1E803 shr eax, 3 ; byte/s 9059 00004EA3 BA05000000 mov edx, 5 9060 00004EA8 F7E2 mul edx 9061 9062 00004EAA F735[A4BB0000] div dword [mp3_src_frame_size] 9063 ; eax = count of frames per 5 seconds 9064 00004EB0 21D2 and edx, edx 9065 00004EB2 7401 jz short .skip@ 9066 00004EB4 40 inc eax 9067 .skip@: 9068 00004EB5 F725[A4BB0000] mul dword [mp3_src_frame_size] 9069 00004EBB A3[68AB0000] mov [fb_count], eax ; forward/backward count 9070 ;;;; 9071 9072 00004EC0 A1[60AB0000] mov eax, [stream_size] ; bytes 9073 00004EC5 BA08000000 mov edx, 8 ; 1 byte = 8 bits 9074 00004ECA F7E2 mul edx 9075 ;div dword [mp3_bit_rate] ; num of bits per sec 9076 00004ECC F7F3 div ebx ; 22/01/2025 9077 ; eax = total seconds 9078 9079 00004ECE B33C mov bl, 60 9080 00004ED0 F6F3 div bl 9081 9082 ; al = minutes, ah = seconds 9083 9084 ; 15/02/2025 9085 00004ED2 50 push eax 9086 00004ED3 B30A mov bl, 10 9087 00004ED5 30E4 xor ah, ah 9088 00004ED7 F6F3 div bl 9089 00004ED9 80C430 add ah, '0' 9090 00004EDC 8825[28A90000] mov [msgMinSec+1], ah 9091 00004EE2 20C0 and al, al 9092 00004EE4 740D jz short .skip@@ 9093 00004EE6 28E4 sub ah, ah 9094 00004EE8 F6F3 div bl 9095 00004EEA 80C430 add ah, '0' 9096 00004EED 8825[27A90000] mov [msgMinSec], ah 9097 .skip@@: 9098 00004EF3 58 pop eax 9099 00004EF4 88E0 mov al, ah 9100 00004EF6 30E4 xor ah, ah 9101 00004EF8 F6F3 div bl 9102 00004EFA 80C430 add ah, '0' 9103 00004EFD 8825[2BA90000] mov [msgMinSec+4], ah 9104 00004F03 08C0 or al, al 9105 00004F05 740D jz short .return 9106 00004F07 28E4 sub ah, ah 9107 00004F09 F6F3 div bl 9108 00004F0B 80C430 add ah, '0' 9109 00004F0E 8825[2AA90000] mov [msgMinSec+3], ah 9110 .return: 9111 00004F14 C3 retn 9112 9113 9114 ; =============== S U B R O U T I N E ======================================= 9115 9116 ; 15/02/2025 9117 write_mp3_file_info: 9118 sys _msg, msgFileName, 255, 0Fh 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00004F15 BB[B9A80000] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00004F1A B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 00004F1F BA0F000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00004F24 B823000000 <1> mov eax, %1 112 <1> 113 00004F29 CD40 <1> int 40h 9119 sys _msg, mp3_file_name, 255, 0Fh 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00004F2B BB[00550500] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00004F30 B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 00004F35 BA0F000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00004F3A B823000000 <1> mov eax, %1 112 <1> 113 00004F3F CD40 <1> int 40h 9120 write_sample_rate: 9121 00004F41 A1[BCBB0000] mov eax, [mp3_sample_rate] 9122 ; ax = sample rate (hertz) 9123 00004F46 31D2 xor edx, edx 9124 00004F48 66B90A00 mov cx, 10 9125 00004F4C 66F7F1 div cx 9126 00004F4F 0015[DAA80000] add [msgHertz+4], dl 9127 00004F55 29D2 sub edx, edx 9128 00004F57 66F7F1 div cx 9129 00004F5A 0015[D9A80000] add [msgHertz+3], dl 9130 00004F60 29D2 sub edx, edx 9131 00004F62 66F7F1 div cx 9132 00004F65 0015[D8A80000] add [msgHertz+2], dl 9133 00004F6B 29D2 sub edx, edx 9134 00004F6D 66F7F1 div cx 9135 00004F70 0015[D7A80000] add [msgHertz+1], dl 9136 00004F76 0005[D6A80000] add [msgHertz], al 9137 9138 sys _msg, msgSampleRate, 255, 0Fh 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00004F7C BB[C7A80000] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00004F81 B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 00004F86 BA0F000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00004F8B B823000000 <1> mov eax, %1 112 <1> 113 00004F90 CD40 <1> int 40h 9139 9140 00004F92 A1[C4BB0000] mov eax, [mp3_bit_rate] 9141 00004F97 31D2 xor edx, edx 9142 00004F99 B9E8030000 mov ecx, 1000 9143 00004F9E F7F1 div ecx 9144 00004FA0 BF[54550500] mov edi, txtSize 9145 00004FA5 89E5 mov ebp, esp 9146 00004FA7 B90A000000 mov ecx, 10 9147 kbits_1: 9148 00004FAC 31D2 xor edx, edx 9149 00004FAE F7F1 div ecx 9150 00004FB0 80C230 add dl, 30h ; '0' 9151 00004FB3 52 push edx 9152 00004FB4 09C0 or eax, eax 9153 00004FB6 75F4 jnz short kbits_1 9154 kbits_2: 9155 00004FB8 5A pop edx 9156 00004FB9 88D0 mov al, dl 9157 00004FBB AA stosb 9158 00004FBC 39EC cmp esp, ebp 9159 00004FBE 75F8 jne short kbits_2 9160 00004FC0 B000 mov al, 0 9161 00004FC2 AA stosb 9162 9163 sys _msg, msgKBitRate, 255, 0Fh 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00004FC3 BB[DFA80000] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00004FC8 B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 00004FCD BA0F000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00004FD2 B823000000 <1> mov eax, %1 112 <1> 113 00004FD7 CD40 <1> int 40h 9164 9165 sys _msg, txtSize, 255, 0Fh 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00004FD9 BB[54550500] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00004FDE B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 00004FE3 BA0F000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00004FE8 B823000000 <1> mov eax, %1 112 <1> 113 00004FED CD40 <1> int 40h 9166 9167 sys _msg, msgKBits, 255, 0Fh 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00004FEF BB[ECA80000] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00004FF4 B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 00004FF9 BA0F000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00004FFE B823000000 <1> mov eax, %1 112 <1> 113 00005003 CD40 <1> int 40h 9168 9169 sys _msg, msgPlayback, 255, 0Fh 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00005005 BB[F4A80000] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 0000500A B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 0000500F BA0F000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00005014 B823000000 <1> mov eax, %1 112 <1> 113 00005019 CD40 <1> int 40h 9170 9171 0000501B BE[08A90000] mov esi, msg16Bits 9172 9173 ; 17/02/2025 9174 ; [mp3_bytes_per_sample] = 2 9175 ; 9176 ;cmp byte [mp3_bytes_per_sample], 2 9177 ;je short wsr_1 9178 ;mov esi, msg8Bits 9179 wsr_1: 9180 sys _msg, esi, 255, 0Fh 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00005020 89F3 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00005022 B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 00005027 BA0F000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 0000502C B823000000 <1> mov eax, %1 112 <1> 113 00005031 CD40 <1> int 40h 9181 9182 00005033 BE[01A90000] mov esi, msgMono 9183 00005038 803D[C8BB0000]01 cmp byte [mp3_num_channels], 1 9184 0000503F 7405 je short wsr_2 9185 00005041 BE[12A90000] mov esi, msgStereo 9186 wsr_2: 9187 sys _msg, esi, 255, 0Fh 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00005046 89F3 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00005048 B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 0000504D BA0F000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00005052 B823000000 <1> mov eax, %1 112 <1> 113 00005057 CD40 <1> int 40h 9188 9189 sys _msg, msgDuration, 255, 0Fh 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00005059 BB[1BA90000] <1> mov ebx, %2 104 <1> %if %0 >= 3 105 0000505E B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 00005063 BA0F000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00005068 B823000000 <1> mov eax, %1 112 <1> 113 0000506D CD40 <1> int 40h 9190 0000506F C3 retn 9191 9192 ;============================================================================= 9193 ; drawscopes - draw wave/voice sample scopes 9194 ;============================================================================= 9195 9196 ; 15/02/2025 9197 ; 10/02/2025 - twavply3.s (32 bit) 9198 ; 09/02/2025 - twavplay.asm (16bit) 9199 ; 05/02/2025 - twavplay2.s 9200 drawscopes: 9201 ;call get_current_sound_data 9202 ; 15/02/2025 9203 00005070 FF15[04100600] call dword [get_sound_data] 9204 00005076 BE[00200600] mov esi, sounddata 9205 9206 0000507B 31C9 xor ecx, ecx 9207 0000507D 31D2 xor edx, edx 9208 0000507F 31FF xor edi, edi 9209 drawscope0: 9210 00005081 66AD lodsw 9211 00005083 80F480 xor ah, 80h 9212 00005086 0FB6DC movzx ebx, ah ; Left Channel 9213 00005089 D1E3 shl ebx, 1 9214 0000508B 668B83[004B0500] mov ax, [RowOfs+ebx] 9215 00005092 668987[004D0500] mov [NewScope_L+edi], ax 9216 00005099 30FF xor bh, bh 9217 0000509B 66AD lodsw 9218 0000509D 80F480 xor ah, 80h 9219 000050A0 88E3 mov bl, ah ; Right Channel 9220 000050A2 D1E3 shl ebx, 1 9221 000050A4 668B83[004B0500] mov ax, [RowOfs+ebx] 9222 000050AB 668987[004F0500] mov [NewScope_R+edi], ax 9223 000050B2 6683C702 add di, 2 9224 000050B6 FEC1 inc cl 9225 000050B8 75C7 jnz short drawscope0 9226 9227 000050BA 66BAC403 mov dx, 3C4h 9228 ;mov ax, 0802h 9229 ;out dx, ax 9230 000050BE 66BB0208 mov bx, 0802h 9231 000050C2 B403 mov ah, 3 ; outw 9232 000050C4 CD34 int 34h 9233 9234 ;mov dx, 3CEh 9235 000050C6 B2CE mov dl, 0CEh 9236 000050C8 B008 mov al, 08h 9237 ;out dx, al 9238 000050CA B401 mov ah, 1 ; outb 9239 000050CC CD34 int 34h 9240 9241 000050CE 42 inc edx 9242 9243 000050CF 31F6 xor esi, esi 9244 000050D1 BB45060A00 mov ebx, 0A0645h 9245 drawscopel4: 9246 000050D6 B080 mov al, 80h 9247 drawscopel2: 9248 000050D8 50 push eax ; ** 9249 000050D9 52 push edx ; * 9250 ;out dx, al 9251 000050DA B401 mov ah, 1 ; outb 9252 000050DC CD34 int 34h 9253 9254 ;mov ecx, 32 9255 000050DE B120 mov cl, 32 9256 000050E0 66B800FF mov ax, 0FF00h 9257 drawscopel3: 9258 000050E4 668BBE[00510500] mov di, [OldScope_L+esi] 9259 000050EB 668B96[004D0500] mov dx, [NewScope_L+esi] 9260 000050F2 39D7 cmp edi, edx 9261 000050F4 740D je short drawscopef3 9262 000050F6 88043B mov [ebx+edi], al ; L 9263 000050F9 882413 mov [ebx+edx], ah ; L 9264 000050FC 668996[00510500] mov [OldScope_L+esi], dx 9265 drawscopef3: 9266 00005103 668BBE[00530500] mov di, [OldScope_R+esi] 9267 0000510A 668B96[004F0500] mov dx, [NewScope_R+esi] 9268 00005111 39D7 cmp edi, edx 9269 00005113 740F je short drawscopef4 9270 00005115 88443B26 mov [ebx+edi+38], al ; R 9271 00005119 88641326 mov [ebx+edx+38], ah ; R 9272 0000511D 668996[00530500] mov [OldScope_R+esi], dx 9273 drawscopef4: 9274 00005124 83C610 add esi, 2*8 9275 00005127 43 inc ebx 9276 00005128 E2BA loop drawscopel3 9277 9278 0000512A 5A pop edx ; * 9279 0000512B 58 pop eax ; ** 9280 0000512C 81EEFE010000 sub esi, 2*256-2 9281 00005132 83EB20 sub ebx, 32 9282 00005135 D0E8 shr al, 1 9283 00005137 759F jnz short drawscopel2 9284 00005139 F8 clc 9285 0000513A C3 retn 9286 9287 9288 ; =============== S U B R O U T I N E ======================================= 9289 9290 ; -------------------------------------------------------- 9291 ; 15/02/2025 - Get Current Sound Data For Graphics 9292 ; -------------------------------------------------------- 9293 9294 ; 15/02/2025 (tmp3play.s) 9295 get_ac97_sound_data: 9296 ; [sd_count] = 1024 9297 sys _audio, 0F00h, [sd_count], sounddata 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 0000513B BB000F0000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 00005140 8B0D[6CAB0000] <1> mov ecx, %3 106 <1> %if %0 = 4 107 00005146 BA[00200600] <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 0000514B B820000000 <1> mov eax, %1 112 <1> 113 00005150 CD40 <1> int 40h 9298 00005152 C3 retn 9299 9300 ; -------------------------------------------------------- 9301 9302 ; 15/02/2025 (tmp3play.s) 9303 get_sb16_sound_data: 9304 00005153 BE[00240600] mov esi, sounddata2 9305 sys _audio, 0F00h, [sd_count], esi 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 00005158 BB000F0000 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 0000515D 8B0D[6CAB0000] <1> mov ecx, %3 106 <1> %if %0 = 4 107 00005163 89F2 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 00005165 B820000000 <1> mov eax, %1 112 <1> 113 0000516A CD40 <1> int 40h 9306 0000516C BF[00200600] mov edi, sounddata 9307 00005171 FF25[00100600] jmp dword [sounddata_copy] 9308 9309 ; -------------------------------------------------------- 9310 9311 ; ; 15/02/2025 9312 ; ; 10/02/2025 - twavply3.s (32bit) 9313 ; ; 09/02/2025 - twavplay.asm (16bit) 9314 ;sdc_16bit_stereo: 9315 ; ; esi = source/dma sound data buffer address 9316 ; ; ecx = load (source) count = 1024 9317 ; ; edi = target sound data buffer 9318 ; ;shr ecx, 1 9319 ; ;rep movsw 9320 ; shr ecx, 2 9321 ; rep movsd 9322 ; retn 9323 9324 ; -------------------------------------------------------- 9325 9326 ; 15/02/2025 9327 ; 10/02/2025 - twavply3.s (32bit) 9328 ; 09/02/2025 - twavplay.asm (16bit) 9329 sdc_16bit_mono: 9330 ; esi = source/dma sound data buffer address 9331 ; ecx = load (source) count = 512 9332 ; edi = target sound data buffer 9333 00005177 D1E9 shr ecx, 1 9334 sdc_16bm_loop: 9335 00005179 66AD lodsw 9336 0000517B 66AB stosw 9337 0000517D 66AB stosw 9338 0000517F E2F8 loop sdc_16bm_loop 9339 00005181 C3 retn 9340 9341 ; -------------------------------------------------------- 9342 9343 ; 15/02/2025 9344 ; 10/02/2025 - twavply3.s (32bit) 9345 ; 09/02/2025 - twavplay.asm (16bit) 9346 sdc_8bit_stereo: 9347 ; esi = source/dma sound data buffer address 9348 ; ecx = load (source) count = 512 9349 ; edi = target sound data buffer 9350 9351 ; convert to 16 bit sample 9352 sdc_8bs_loop: 9353 00005182 AC lodsb 9354 00005183 2C80 sub al, 80h ; middle = 0, min = -128, max = 127 9355 00005185 66C1E008 shl ax, 8 9356 00005189 66AB stosw 9357 0000518B E2F5 loop sdc_8bs_loop 9358 0000518D C3 retn 9359 9360 ; -------------------------------------------------------- 9361 9362 ; 15/02/2025 9363 ; 10/02/2025 - twavply3.s (32bit) 9364 ; 09/02/2025 - twavplay.asm (16bit) 9365 sdc_8bit_mono: 9366 ; esi = source/dma sound data buffer 9367 ; ecx = load (source) count = 256 9368 ; edi = target sound data buffer 9369 9370 ; convert to 16 bit sample 9371 sdc_8bm_loop: 9372 0000518E AC lodsb 9373 0000518F 2C80 sub al, 80h ; middle = 0, min = -128, max = 127 9374 00005191 66C1E008 shl ax, 8 9375 00005195 66AB stosw ; L 9376 ; convert to stereo 9377 00005197 66AB stosw ; R 9378 00005199 E2F3 loop sdc_8bm_loop 9379 0000519B C3 retn 9380 9381 ; =============== S U B R O U T I N E ======================================= 9382 9383 ; 16/02/2025 9384 print_err_msg: 9385 sys _msg, esi, 255, 0Ch 98 <1> 99 <1> 100 <1> 101 <1> 102 <1> %if %0 >= 2 103 0000519C 89F3 <1> mov ebx, %2 104 <1> %if %0 >= 3 105 0000519E B9FF000000 <1> mov ecx, %3 106 <1> %if %0 = 4 107 000051A3 BA0C000000 <1> mov edx, %4 108 <1> %endif 109 <1> %endif 110 <1> %endif 111 000051A8 B823000000 <1> mov eax, %1 112 <1> 113 000051AD CD40 <1> int 40h 9386 000051AF F9 stc ; (needed) 9387 000051B0 C3 retn 9388 9389 ;----------------------------------------------------------------------------- 9390 9391 ; 16/02/2025 9392 ; 10/02/2025 (twavply3.s) 9393 ;============================================================================= 9394 ; Load IFF/ILBM files for VGA 640x480x16 graphics mode 9395 ;============================================================================= 9396 9397 ; EX1B.ASM (21/6/1994, Carlos Hasan; MSDOS, 'RUNME.EXE', 'TNYPL211') 9398 9399 ; 21/10/2017 (TRDOS 386, 'tmodplay.s', Erdogan Tan, NASM syntax) 9400 9401 ;----------------------------------------------------------------------------- 9402 ; EQUATES AND STRUCTURES 9403 ;----------------------------------------------------------------------------- 9404 9405 ID_FORM equ 4D524F46h ; IFF/ILBM chunk IDs 9406 ID_ILBM equ 4D424C49h 9407 ID_BMHD equ 44484D42h 9408 ID_CMAP equ 50414D43h 9409 ID_BODY equ 59444F42h 9410 9411 struc Form ; IFF/ILBM header file format 9412 00000000 ???????? .ID: resd 1 9413 00000004 ???????? .Length: resd 1 9414 00000008 ???????? .Type: resd 1 9415 .size: 9416 endstruc 9417 9418 struc Chunk ; IFF/ILBM header chunk format 9419 00000000 ???????? .ID: resd 1 9420 00000004 ???????? .Length: resd 1 9421 .size: 9422 endstruc 9423 9424 struc BMHD ; IFF/ILBM BMHD chunk format 9425 00000000 ???? .Width: resw 1 9426 00000002 ???? .Height: resw 1 9427 00000004 ???? .PosX: resw 1 9428 00000006 ???? .PosY: resw 1 9429 00000008 ?? .Planes: resb 1 9430 00000009 ?? .Masking: resb 1 9431 0000000A ?? .Compression: resb 1 9432 0000000B ?? .Pad: resb 1 9433 0000000C ???? .Transparent: resw 1 9434 0000000E ?? .AspectX resb 1 9435 0000000F ?? .AspectY: resb 1 9436 00000010 ???? .PageWidth: resw 1 9437 00000012 ???? .PageHeight: resw 1 9438 .size: 9439 endstruc 9440 9441 struc CMAP ; IFF/ILBM CMAP chunk format 9442 00000000 .Colors: resb 768 9443 .size: 9444 endstruc 9445 9446 ;------------------------------------------------------------------------------ 9447 ; bswap - macro to reverse the byte order of a 32-bit register, converting 9448 ; a value in little/big endian form to big/little endian form. 9449 ;------------------------------------------------------------------------------ 9450 9451 %macro bswap 1 9452 xchg al, ah 9453 rol eax, 16 9454 xchg al, ah 9455 %endmacro 9456 9457 ; --------------------------------------------------------------------------- 9458 ; 25/01/2025 - Player Window Display Functions 9459 ; --------------------------------------------------------------------------- 9460 ; ref: vgaplay2.s (18/01/2025) 9461 9462 ; =============== S U B R O U T I N E ======================================= 9463 9464 ; 15/02/2025 9465 drawplayingscreen: 9466 ; 10/02/2025 - twavply3.s 9467 ; 05/02/2025 - twavply2.s 9468 putlbm: 9469 000051B1 BE[C0520000] mov esi, LOGO_ADDRESS 9470 9471 ;pushad 9472 9473 ; check if this is a valid IFF/ILBM Deluxe Paint file 9474 9475 ;cmp dword [esi+Form.ID], ID_FORM 9476 ;jne short putlbmd0 9477 ;cmp dword [esi+Form.Type], ID_ILBM 9478 ;jne short putlbmd0 9479 9480 ; get the IFF/ILBM file length in bytes 9481 9482 000051B6 8B4604 mov eax, [esi+Form.Length] 9483 bswap eax 9452 000051B9 86E0 <1> xchg al, ah 9453 000051BB C1C010 <1> rol eax, 16 9454 000051BE 86E0 <1> xchg al, ah 9484 000051C0 89C1 mov ecx, eax 9485 9486 ; decrease the file length and updates the file pointer 9487 9488 000051C2 83E904 sub ecx, 4 9489 000051C5 83C60C add esi, Form.size 9490 9491 ; IFF/ILBM main parser body loop 9492 9493 putlbml0: 9494 000051C8 85C9 test ecx, ecx 9495 000051CA 7E63 jle short putlbmd1 9496 9497 ; get the next chunk ID and length in bytes 9498 9499 000051CC 8B1E mov ebx, [esi+Chunk.ID] 9500 000051CE 8B4604 mov eax, [esi+Chunk.Length] 9501 bswap eax 9452 000051D1 86E0 <1> xchg al, ah 9453 000051D3 C1C010 <1> rol eax, 16 9454 000051D6 86E0 <1> xchg al, ah 9502 000051D8 93 xchg ebx, eax 9503 000051D9 83C608 add esi, Chunk.size 9504 9505 ; word align the chunk length and decrease the file length counter 9506 9507 000051DC 43 inc ebx 9508 000051DD 80E3FE and bl, 0FEh ; ~1 9509 000051E0 83E908 sub ecx, Chunk.size 9510 000051E3 29D9 sub ecx, ebx 9511 9512 ; check for the BMHD/CMAP/BODY chunk headers 9513 9514 000051E5 3D424D4844 cmp eax, ID_BMHD 9515 000051EA 7414 je short putlbmf0 9516 000051EC 3D434D4150 cmp eax, ID_CMAP 9517 000051F1 743E je short putlbmf1 9518 000051F3 3D424F4459 cmp eax, ID_BODY 9519 000051F8 7452 je short putlbmf2 9520 9521 ; advance to the next IFF/ILBM chunk structure 9522 9523 putlbmc0: 9524 000051FA 01DE add esi, ebx 9525 000051FC EBCA jmp short putlbml0 9526 9527 putlbmd0: 9528 000051FE F9 stc 9529 ;popad 9530 000051FF C3 retn 9531 9532 ; process the BMHD bitmap header chunk 9533 9534 putlbmf0: 9535 00005200 807E0804 cmp byte [esi+BMHD.Planes], 4 9536 00005204 75F8 jne short putlbmd0 9537 00005206 807E0A01 cmp byte [esi+BMHD.Compression], 1 9538 0000520A 75F2 jne short putlbmd0 9539 0000520C 807E0B00 cmp byte [esi+BMHD.Pad], 0 9540 00005210 75EC jne short putlbmd0 9541 00005212 0FB706 movzx eax, word [esi+BMHD.Width] 9542 00005215 86E0 xchg al, ah 9543 00005217 83C007 add eax, 7 9544 0000521A C1E803 shr eax, 3 9545 0000521D A3[58AB0000] mov [picture.width], eax 9546 00005222 0FB74602 movzx eax, word [esi+BMHD.Height] 9547 00005226 86E0 xchg al, ah 9548 00005228 A3[5CAB0000] mov [picture.height], eax 9549 0000522D EBCB jmp short putlbmc0 9550 9551 putlbmd1: 9552 0000522F F8 clc 9553 ;popad 9554 00005230 C3 retn 9555 9556 ; process the CMAP colormap chunk 9557 9558 putlbmf1: 9559 00005231 66BAC803 mov dx, 3C8h 9560 00005235 30C0 xor al, al 9561 ;out dx, al 9562 00005237 B401 mov ah, 1 ; outb 9563 00005239 CD34 int 34h 9564 ;inc dx 9565 0000523B 42 inc edx 9566 putlbml1: 9567 0000523C 8A06 mov al, [esi] 9568 0000523E C0E802 shr al, 2 9569 ;out dx, al 9570 ;mov ah, 1 ; outb 9571 00005241 CD34 int 34h ; IOCTL interrupt (IN/OUT) 9572 00005243 46 inc esi 9573 00005244 4B dec ebx 9574 00005245 7FF5 jg short putlbml1 9575 00005247 E97CFFFFFF jmp putlbml0 9576 9577 ; process the BODY bitmap body chunk 9578 9579 putlbmf2: 9580 0000524C 60 pushad 9581 0000524D BF00000A00 mov edi, 0A0000h 9582 ;cld 9583 00005252 66BACE03 mov dx, 3CEh 9584 ;mov ax, 0FF08h 9585 ;out dx, ax 9586 00005256 66BB08FF mov bx, 0FF08h 9587 0000525A B403 mov ah, 3 ; outw 9588 0000525C CD34 int 34h ; IOCTL interrupt (IN/OUT) 9589 ;mov dx, 3C4h 9590 0000525E B2C4 mov dl, 0C4h 9591 00005260 B002 mov al, 02h 9592 ;out dx, al 9593 00005262 B401 mov ah, 1 ; outb 9594 00005264 CD34 int 34h ; IOCTL interrupt (IN/OUT) 9595 ;inc dx 9596 00005266 42 inc edx 9597 00005267 8B0D[5CAB0000] mov ecx, [picture.height] 9598 putlbml2: 9599 0000526D 51 push ecx 9600 0000526E B011 mov al, 11h 9601 putlbml3: 9602 00005270 50 push eax 9603 00005271 57 push edi 9604 ;out dx, al 9605 00005272 B401 mov ah, 1 ; outb 9606 00005274 CD34 int 34h ; IOCTL interrupt (IN/OUT) 9607 00005276 8B1D[58AB0000] mov ebx, [picture.width] 9608 putlbml4: 9609 0000527C AC lodsb 9610 0000527D 31C9 xor ecx, ecx 9611 0000527F 84C0 test al, al 9612 00005281 7C09 jl short putlbmf3 9613 ;movzx ecx, al 9614 00005283 88C1 mov cl, al 9615 00005285 41 inc ecx 9616 00005286 29CB sub ebx, ecx 9617 00005288 F3A4 rep movsb 9618 0000528A EB0A jmp short putlbmc4 9619 putlbmf3: 9620 0000528C F6D8 neg al 9621 ;movzx ecx, al 9622 0000528E 88C1 mov cl, al 9623 00005290 41 inc ecx 9624 00005291 29CB sub ebx, ecx 9625 00005293 AC lodsb 9626 00005294 F3AA rep stosb 9627 putlbmc4: 9628 00005296 85DB test ebx, ebx 9629 00005298 7FE2 jg short putlbml4 9630 0000529A 5F pop edi 9631 0000529B 58 pop eax 9632 0000529C 00C0 add al, al 9633 0000529E 73D0 jnc short putlbml3 9634 000052A0 83C750 add edi, 80 9635 000052A3 59 pop ecx 9636 000052A4 E2C7 loop putlbml2 9637 000052A6 61 popad 9638 000052A7 E94EFFFFFF jmp putlbmc0 9639 9640 ; --------------------------------------------------------------------------- 9641 ; 16/02/2025 - Tiny Player Logo (Screen Image) 9642 ; --------------------------------------------------------------------------- 9643 9644 align 4 9645 9646 000052AC 00 db 0 9647 000052AD 54494E59504C41592E- db 'TINYPLAY.LBM Start', 0 9647 000052B6 4C424D205374617274- 9647 000052BF 00 9648 9649 LOGO_ADDRESS: 9650 000052C0 incbin "TINYPLAY.LBM" 9651 9652 00009558 00 db 0 9653 9654 00009559 54494E59504C41592E- db 'TINYPLAY.LBM End', 0 9654 00009562 4C424D20456E6400 9655 9656 ; =========================================================================== 9657 ; end of TRDOS 386 specific procedures. 9658 ; --------------------------------------------------------------------------- 9659 9660 ; =========================================================================== 9661 ; Initialized DATA 9662 ; =========================================================================== 9663 9664 ; 15/02/2025 9665 0000956A 90 align 4 9666 9667 mp3_bitrate_tab: 9668 0000956C 000020002800300038- dw 0,32,40,48,56,64,80,96,112,128,160,192,224,256,320, 0 9668 00009575 004000500060007000- 9668 0000957E 8000A000C000E00000- 9668 00009587 0140010000 9669 0000958C 000008001000180020- dw 0, 8,16,24,32,40,48,56,64,80,96,112,128,144,160, 0 9669 00009595 002800300038004000- 9669 0000959E 500060007000800090- 9669 000095A7 00A0000000 9670 mp3_freq_tab: 9671 000095AC 44AC80BB007D dw 44100,48000,32000 9672 mp3_lsf_sf_expand_init_table: 9673 000095B2 000504040000 db 0, 5, 4, 4, 0, 0 9674 000095B8 9001 dw 400 ; 0..399 ; normal case 9675 000095BA 000504010C00 db 0, 5, 4, 1, 0Ch, 0 9676 000095C0 F401 dw 500 ; 400..499 9677 000095C2 000301011801 db 0, 3, 1, 1, 18h, 1 9678 000095C8 0002 dw 512 ; 500..511 9679 000095CA 010606012400 db 1, 6, 6, 1, 24h, 0 9680 000095D0 6803 dw 872 ; 512+360 ; 0..359 for 2nd channel of intensity stereo 9681 000095D2 010404013000 db 1, 4, 4, 1, 30h, 0 9682 000095D8 E803 dw 1000 ; 512+488 ; 360..487 9683 000095DA 010301013C00 db 1, 3, 1, 1, 3Ch, 0 9684 000095E0 0004 dw 1024 ; 512+512 ; 488..511 9685 mp3_synth_win_src: 9686 000095E2 010000000000000000- dw 1, 0, 0, 0, 0, 0, 1, 0 9686 000095EB 00000001000000 9687 000095F2 000000000100000001- dw 0, 0, 1, 0, 1, 0, 1, 0 9687 000095FB 00000001000000 9688 00009602 010001000000010001- dw 1, 1, 0, 1, 1, 1, 1, 2 9688 0000960B 00010001000200 9689 00009612 010002000100020002- dw 1, 2, 1, 2, 2, 3, 2, 3 9689 0000961B 00030002000300 9690 00009622 020004000300030004- dw 2, 4, 3, 3, 4, 4, 4, 5 9690 0000962B 00040004000500 9691 00009632 050005000500060006- dw 5, 5, 5, 6, 6, 6, 6, 7 9691 0000963B 00060006000700 9692 00009642 070006000800070007- dw 7, 6, 8, 7, 7, 8, 7, 7 9692 0000964B 00080007000700 9693 00009652 080007000700070006- dw 8, 7, 7, 7, 6, 6, 6, 5 9693 0000965B 00060006000500 9694 00009662 51FEFCFFFDFFFEFFFF- dw 0FE51h,0FFFCh,0FFFDh,0FFFEh,0FFFFh, 0, 1, 3 9694 0000966B FF000001000300 9695 00009672 03000600070008000B- dw 3, 6, 7, 8, 0Bh, 0Ch, 0Eh, 11h 9695 0000967B 000C000E001100 9696 00009682 1300150017001A001C- dw 13h, 15h, 17h, 1Ah, 1Ch, 1Fh, 22h, 24h 9696 0000968B 001F0022002400 9697 00009692 27002A002C002F0032- dw 27h, 2Ah, 2Ch, 2Fh, 32h, 35h, 36h, 3Ah 9697 0000969B 00350036003A00 9698 000096A2 3C003E004000420044- dw 3Ch, 3Eh, 40h, 42h, 44h, 45h, 47h, 48h 9698 000096AB 00450047004800 9699 000096B2 490049004900490049- dw 49h, 49h, 49h, 49h, 49h, 48h, 46h, 45h 9699 000096BB 00480046004500 9700 000096C2 430040003D003A0035- dw 43h, 40h, 3Dh, 3Ah, 35h, 31h, 2Bh, 27h 9700 000096CB 0031002B002700 9701 000096D2 1F00190012000A0002- dw 1Fh, 19h, 12h, 0Ah, 2,0FFF9h,0FFEFh,0FFE6h 9701 000096DB 00F9FFEFFFE6FF 9702 000096E2 3BF030003B00470053- dw 0F03Bh, 30h, 3Bh, 47h, 53h, 5Fh, 6Dh, 79h 9702 000096EB 005F006D007900 9703 000096F2 86009500A100B000BD- dw 86h, 95h, 0A1h, 0B0h, 0BDh, 0CBh, 0D9h, 0E6h 9703 000096FB 00CB00D900E600 9704 00009702 F30001010D01190125- dw 0F3h, 101h, 10Dh, 119h, 125h, 130h, 13Ah, 144h 9704 0000970B 0130013A014401 9705 00009712 4D0155015B01620166- dw 14Dh, 155h, 15Bh, 162h, 166h, 16Ah, 16Bh, 16Dh 9705 0000971B 016A016B016D01 9706 00009722 6C016A01660160015A- dw 16Ch, 16Ah, 166h, 160h, 15Ah, 150h, 146h, 139h 9706 0000972B 01500146013901 9707 00009732 2B011A010801F300DD- dw 12Bh, 11Ah, 108h, 0F3h, 0DDh, 0C5h, 0A9h, 8Eh 9707 0000973B 00C500A9008E00 9708 00009742 6F004E002B000700E1- dw 6Fh, 4Eh, 2Bh, 7,0FFE1h,0FFB8h,0FF8Fh,0FF62h 9708 0000974B FFB8FF8FFF62FF 9709 00009752 35FF06FFD5FEA4FE70- dw 0FF35h,0FF06h,0FED5h,0FEA4h,0FE70h,0FE3Ch,0FE06h,0FDD0h 9709 0000975B FE3CFE06FED0FD 9710 00009762 0BCF9F02D702110349- dw 0CF0Bh, 29Fh, 2D7h, 311h, 349h, 382h, 3BBh, 3F4h 9710 0000976B 038203BB03F403 9711 00009772 2C0464049A04D10405- dw 42Ch, 464h, 49Ah, 4D1h, 505h, 538h, 56Ah, 59Bh 9711 0000977B 0538056A059B05 9712 00009782 C805F505200647066C- dw 5C8h, 5F5h, 620h, 647h, 66Ch, 68Fh, 6AFh, 6CCh 9712 0000978B 068F06AF06CC06 9713 00009792 E506FC060F071F072B- dw 6E5h, 6FCh, 70Fh, 71Fh, 72Bh, 734h, 739h, 739h 9713 0000979B 07340739073907 9714 000097A2 370730072607170704- dw 737h, 730h, 726h, 717h, 704h, 6EDh, 6D3h, 6B4h 9714 000097AB 07ED06D306B406 9715 000097B2 91066C0640061306E1- dw 691h, 66Ch, 640h, 613h, 5E1h, 5ABh, 573h, 537h 9715 000097BB 05AB0573053705 9716 000097C2 F704B4046F042704DB- dw 4F7h, 4B4h, 46Fh, 427h, 3DBh, 38Fh, 33Eh, 2EDh 9716 000097CB 038F033E03ED02 9717 000097D2 9A024402ED0195013D- dw 29Ah, 244h, 1EDh, 195h, 13Dh, 0E2h, 88h, 2Eh 9717 000097DB 01E20088002E00 9718 000097E2 00 db 0 9719 000097E3 00 db 0 9720 mp3_slen_table: 9721 000097E4 000000010002000303- dw 0000h, 0100h, 0200h, 0300h, 0003h, 0101h, 0201h, 0301h 9721 000097ED 00010101020103 9722 000097F4 020102020203030103- dw 0102h, 0202h, 0302h, 0103h, 0203h, 0303h, 0204h, 0304h 9722 000097FD 02030304020403 9723 mp3_lsf_nsf_table: 9724 00009804 060505050909090906- dd 05050506h, 09090909h, 09090906h 9724 0000980D 090909 9725 00009810 0605070309090C0606- dd 03070506h, 060C0909h, 060C0906h 9725 00009819 090C06 9726 0000981C 0B0A0000121200000F- dd 00000A0Bh, 00001212h, 0000120Fh 9726 00009825 120000 9727 00009828 070707000C0C0C0006- dd 00070707h, 000C0C0Ch, 000C0F06h 9727 00009831 0F0C00 9728 00009834 060606030C09090606- dd 03060606h, 0609090Ch, 06090C06h 9728 0000983D 0C0906 9729 00009840 080805000F0C090006- dd 00050808h, 00090C0Fh, 00091206h 9729 00009849 120900 9730 huff_tree_list_data: 9731 0000984C 1101100022021221 db 11h, 1, 10h, 0, 22h, 2, 12h, 21h 9732 00009854 2011011000220212 db 20h, 11h, 1, 10h, 0, 22h, 2, 12h 9733 0000985C 2120101101003323 db 21h, 20h, 10h, 11h, 1, 0, 33h, 23h 9734 00009864 3231130330221221 db 32h, 31h, 13h, 3, 30h, 22h, 12h, 21h 9735 0000986C 0220110110003303 db 2, 20h, 11h, 1, 10h, 0, 33h, 3 9736 00009874 2332301331220212 db 23h, 32h, 30h, 13h, 31h, 22h, 2, 12h 9737 0000987C 2120011110005545 db 21h, 20h, 1, 11h, 10h, 0, 55h, 45h 9738 00009884 5453354425521551 db 54h, 53h, 35h, 44h, 25h, 52h, 15h, 51h 9739 0000988C 0534504333244214 db 5, 34h, 50h, 43h, 33h, 24h, 42h, 14h 9740 00009894 4140042332031331 db 41h, 40h, 4, 23h, 32h, 3, 13h, 31h 9741 0000989C 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 9742 000098A4 1000555445533544 db 10h, 0, 55h, 54h, 45h, 53h, 35h, 44h 9743 000098AC 2552051551344350 db 25h, 52h, 5, 15h, 51h, 34h, 43h, 50h 9744 000098B4 3324421441044023 db 33h, 24h, 42h, 14h, 41h, 4, 40h, 23h 9745 000098BC 3213310330220220 db 32h, 13h, 31h, 3, 30h, 22h, 2, 20h 9746 000098C4 1221110110005545 db 12h, 21h, 11h, 1, 10h, 0, 55h, 45h 9747 000098CC 3553540544255215 db 35h, 53h, 54h, 5, 44h, 25h, 52h, 15h 9748 000098D4 5134435004244233 db 51h, 34h, 43h, 50h, 4, 24h, 42h, 33h 9749 000098DC 4014412332133103 db 40h, 14h, 41h, 23h, 32h, 13h, 31h, 3 9750 000098E4 3022021221201101 db 30h, 22h, 2, 12h, 21h, 20h, 11h, 1 9751 000098EC 1000776776577566 db 10h, 0, 77h, 67h, 76h, 57h, 75h, 66h 9752 000098F4 4774566537734655 db 47h, 74h, 56h, 65h, 37h, 73h, 46h, 55h 9753 000098FC 5463277264077062 db 54h, 63h, 27h, 72h, 64h, 7, 70h, 62h 9754 00009904 4535065344177136 db 45h, 35h, 6, 53h, 44h, 17h, 71h, 36h 9755 0000990C 2625521551344316 db 26h, 25h, 52h, 15h, 51h, 34h, 43h, 16h 9756 00009914 6160055024423304 db 61h, 60h, 5, 50h, 24h, 42h, 33h, 4 9757 0000991C 1441402332031331 db 14h, 41h, 40h, 23h, 32h, 3, 13h, 31h 9758 00009924 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 9759 0000992C 1000776776756647 db 10h, 0, 77h, 67h, 76h, 75h, 66h, 47h 9760 00009934 7457555665377346 db 74h, 57h, 55h, 56h, 65h, 37h, 73h, 46h 9761 0000993C 4554355327726407 db 45h, 54h, 35h, 53h, 27h, 72h, 64h, 7 9762 00009944 7117703663604425 db 71h, 17h, 70h, 36h, 63h, 60h, 44h, 25h 9763 0000994C 5205156226061661 db 52h, 5, 15h, 62h, 26h, 6, 16h, 61h 9764 00009954 5134504333244214 db 51h, 34h, 50h, 43h, 33h, 24h, 42h, 14h 9765 0000995C 4104402332133103 db 41h, 4, 40h, 23h, 32h, 13h, 31h, 3 9766 00009964 3022211202201101 db 30h, 22h, 21h, 12h, 2, 20h, 11h, 1 9767 0000996C 1000776776577566 db 10h, 0, 77h, 67h, 76h, 57h, 75h, 66h 9768 00009974 4774655637735527 db 47h, 74h, 65h, 56h, 37h, 73h, 55h, 27h 9769 0000997C 7246641771077036 db 72h, 46h, 64h, 17h, 71h, 7, 70h, 36h 9770 00009984 6345544406052662 db 63h, 45h, 54h, 44h, 6, 5, 26h, 62h 9771 0000998C 6116603553255215 db 61h, 16h, 60h, 35h, 53h, 25h, 52h, 15h 9772 00009994 5134435004244214 db 51h, 34h, 43h, 50h, 4, 24h, 42h, 14h 9773 0000999C 3341233240033013 db 33h, 41h, 23h, 32h, 40h, 3, 30h, 13h 9774 000099A4 3122122102200011 db 31h, 22h, 12h, 21h, 2, 20h, 0, 11h 9775 000099AC 0110FEFCFDEDFFEF db 1, 10h,0FEh,0FCh,0FDh,0EDh,0FFh,0EFh 9776 000099B4 DFEECFDEBFFBCEDC db 0DFh,0EEh,0CFh,0DEh,0BFh,0FBh,0CEh,0DCh 9777 000099BC AFE9ECDDFACDBEEB db 0AFh,0E9h,0ECh,0DDh,0FAh,0CDh,0BEh,0EBh 9778 000099C4 9FF9EABDDB8FF8CC db 9Fh,0F9h,0EAh,0BDh,0DBh, 8Fh,0F8h,0CCh 9779 000099CC AE9E8E7F7EF7DAAD db 0AEh, 9Eh, 8Eh, 7Fh, 7Eh,0F7h,0DAh,0ADh 9780 000099D4 BCCBF66FE85F9DD9 db 0BCh,0CBh,0F6h, 6Fh,0E8h, 5Fh, 9Dh,0D9h 9781 000099DC F5E7ACBB4FF4CAE6 db 0F5h,0E7h,0ACh,0BBh, 4Fh,0F4h,0CAh,0E6h 9782 000099E4 F33F8DD82FF26E9C db 0F3h, 3Fh, 8Dh,0D8h, 2Fh,0F2h, 6Eh, 9Ch 9783 000099EC 0FC95EAB7DD74EC8 db 0Fh,0C9h, 5Eh,0ABh, 7Dh,0D7h, 4Eh,0C8h 9784 000099F4 D63EB99BAA1FF1F0 db 0D6h, 3Eh,0B9h, 9Bh,0AAh, 1Fh,0F1h,0F0h 9785 000099FC BAE5E48C6DE3E22E db 0BAh,0E5h,0E4h, 8Ch, 6Dh,0E3h,0E2h, 2Eh 9786 00009A04 0E1EE1E05DD57CC7 db 0Eh, 1Eh,0E1h,0E0h, 5Dh,0D5h, 7Ch,0C7h 9787 00009A0C 4D8BB8D49AA96CC6 db 4Dh, 8Bh,0B8h,0D4h, 9Ah,0A9h, 6Ch,0C6h 9788 00009A14 3DD37B2DD21DB75C db 3Dh,0D3h, 7Bh, 2Dh,0D2h, 1Dh,0B7h, 5Ch 9789 00009A1C C5997AC3A7974BD1 db 0C5h, 99h, 7Ah,0C3h,0A7h, 97h, 4Bh,0D1h 9790 00009A24 0DD08AA84CC46BB6 db 0Dh,0D0h, 8Ah,0A8h, 4Ch,0C4h, 6Bh,0B6h 9791 00009A2C 3C2CC25BB5891CC1 db 3Ch, 2Ch,0C2h, 5Bh,0B5h, 89h, 1Ch,0C1h 9792 00009A34 980CC0B46AA6793B db 98h, 0Ch,0C0h,0B4h, 6Ah,0A6h, 79h, 3Bh 9793 00009A3C B3885A2BA569A478 db 0B3h, 88h, 5Ah, 2Bh,0A5h, 69h,0A4h, 78h 9794 00009A44 87947776B21BB10B db 87h, 94h, 77h, 76h,0B2h, 1Bh,0B1h, 0Bh 9795 00009A4C B0964A3AA359952A db 0B0h, 96h, 4Ah, 3Ah,0A3h, 59h, 95h, 2Ah 9796 00009A54 A21AA10A68A08649 db 0A2h, 1Ah,0A1h, 0Ah, 68h,0A0h, 86h, 49h 9797 00009A5C 9339588567299257 db 93h, 39h, 58h, 85h, 67h, 29h, 92h, 57h 9798 00009A64 7538836647745665 db 75h, 38h, 83h, 66h, 47h, 74h, 56h, 65h 9799 00009A6C 7319910990488472 db 73h, 19h, 91h, 9, 90h, 48h, 84h, 72h 9800 00009A74 4664288218372717 db 46h, 64h, 28h, 82h, 18h, 37h, 27h, 17h 9801 00009A7C 7155077036634554 db 71h, 55h, 7, 70h, 36h, 63h, 45h, 54h 9802 00009A84 2662358108801661 db 26h, 62h, 35h, 81h, 8, 80h, 16h, 61h 9803 00009A8C 0660534425520515 db 6, 60h, 53h, 44h, 25h, 52h, 5, 15h 9804 00009A94 5134435024423314 db 51h, 34h, 43h, 50h, 24h, 42h, 33h, 14h 9805 00009A9C 4104402332133103 db 41h, 4, 40h, 23h, 32h, 13h, 31h, 3 9806 00009AA4 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 9807 00009AAC 1000FFEFFEDFEEFD db 10h, 0,0FFh,0EFh,0FEh,0DFh,0EEh,0FDh 9808 00009AB4 CFFCDEEDBFFBCEEC db 0CFh,0FCh,0DEh,0EDh,0BFh,0FBh,0CEh,0ECh 9809 00009ABC DDAFFABEEBCDDC9F db 0DDh,0AFh,0FAh,0BEh,0EBh,0CDh,0DCh, 9Fh 9810 00009AC4 F9EABDDB8FF8CC9E db 0F9h,0EAh,0BDh,0DBh, 8Fh,0F8h,0CCh, 9Eh 9811 00009ACC E97FF7ADDABC6FAE db 0E9h, 7Fh,0F7h,0ADh,0DAh,0BCh, 6Fh,0AEh 9812 00009AD4 0FCBF68EE85F9DF5 db 0Fh,0CBh,0F6h, 8Eh,0E8h, 5Fh, 9Dh,0F5h 9813 00009ADC 7EE7ACCABBD98D4F db 7Eh,0E7h,0ACh,0CAh,0BBh,0D9h, 8Dh, 4Fh 9814 00009AE4 F43FF3D8E62FF26E db 0F4h, 3Fh,0F3h,0D8h,0E6h, 2Fh,0F2h, 6Eh 9815 00009AEC F01FF19CC95EABBA db 0F0h, 1Fh,0F1h, 9Ch,0C9h, 5Eh,0ABh,0BAh 9816 00009AF4 E57DD74EE48CC83E db 0E5h, 7Dh,0D7h, 4Eh,0E4h, 8Ch,0C8h, 3Eh 9817 00009AFC 6DD6E39BB92EAAE2 db 6Dh,0D6h,0E3h, 9Bh,0B9h, 2Eh,0AAh,0E2h 9818 00009B04 1EE10EE05DD57CC7 db 1Eh,0E1h, 0Eh,0E0h, 5Dh,0D5h, 7Ch,0C7h 9819 00009B0C 4D8BD4B89AA96CC6 db 4Dh, 8Bh,0D4h,0B8h, 9Ah,0A9h, 6Ch,0C6h 9820 00009B14 3DD3D22D0D1D7BB7 db 3Dh,0D3h,0D2h, 2Dh, 0Dh, 1Dh, 7Bh,0B7h 9821 00009B1C D15CD0C58AA84CC4 db 0D1h, 5Ch,0D0h,0C5h, 8Ah,0A8h, 4Ch,0C4h 9822 00009B24 6BB6990C3CC37AA7 db 6Bh,0B6h, 99h, 0Ch, 3Ch,0C3h, 7Ah,0A7h 9823 00009B2C A6C00BC22C5BB51C db 0A6h,0C0h, 0Bh,0C2h, 2Ch, 5Bh,0B5h, 1Ch 9824 00009B34 8998C14BB46A3B79 db 89h, 98h,0C1h, 4Bh,0B4h, 6Ah, 3Bh, 79h 9825 00009B3C B397882B5AB2A51B db 0B3h, 97h, 88h, 2Bh, 5Ah,0B2h,0A5h, 1Bh 9826 00009B44 B1B069964AA47887 db 0B1h,0B0h, 69h, 96h, 4Ah,0A4h, 78h, 87h 9827 00009B4C 3AA359952AA21AA1 db 3Ah,0A3h, 59h, 95h, 2Ah,0A2h, 1Ah,0A1h 9828 00009B54 0AA0688649943993 db 0Ah,0A0h, 68h, 86h, 49h, 94h, 39h, 93h 9829 00009B5C 7709588529677692 db 77h, 9, 58h, 85h, 29h, 67h, 76h, 92h 9830 00009B64 9119904884577538 db 91h, 19h, 90h, 48h, 84h, 57h, 75h, 38h 9831 00009B6C 8366472882188174 db 83h, 66h, 47h, 28h, 82h, 18h, 81h, 74h 9832 00009B74 0880566537734627 db 8, 80h, 56h, 65h, 37h, 73h, 46h, 27h 9833 00009B7C 7264175571077036 db 72h, 64h, 17h, 55h, 71h, 7, 70h, 36h 9834 00009B84 6345542662160660 db 63h, 45h, 54h, 26h, 62h, 16h, 6, 60h 9835 00009B8C 3561534425521551 db 35h, 61h, 53h, 44h, 25h, 52h, 15h, 51h 9836 00009B94 0550344324423341 db 5, 50h, 34h, 43h, 24h, 42h, 33h, 41h 9837 00009B9C 1404233240031331 db 14h, 4, 23h, 32h, 40h, 3, 13h, 31h 9838 00009BA4 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 9839 00009BAC 1000EFFEDFFDCFFC db 10h, 0,0EFh,0FEh,0DFh,0FDh,0CFh,0FCh 9840 00009BB4 BFFBAFFA9FF9F88F db 0BFh,0FBh,0AFh,0FAh, 9Fh,0F9h,0F8h, 8Fh 9841 00009BBC 7FF76FF6FF5FF54F db 7Fh,0F7h, 6Fh,0F6h,0FFh, 5Fh,0F5h, 4Fh 9842 00009BC4 F4F3F03FCEECDDDE db 0F4h,0F3h,0F0h, 3Fh,0CEh,0ECh,0DDh,0DEh 9843 00009BCC E9EAD9EEEDEBBECD db 0E9h,0EAh,0D9h,0EEh,0EDh,0EBh,0BEh,0CDh 9844 00009BD4 DCDBAECCADDA7EAC db 0DCh,0DBh,0AEh,0CCh,0ADh,0DAh, 7Eh,0ACh 9845 00009BDC CAC97D5EBDF22F0F db 0CAh,0C9h, 7Dh, 5Eh,0BDh,0F2h, 2Fh, 0Fh 9846 00009BE4 1FF19EBCCB8EE89D db 1Fh,0F1h, 9Eh,0BCh,0CBh, 8Eh,0E8h, 9Dh 9847 00009BEC E7BB8DD86EE69CAB db 0E7h,0BBh, 8Dh,0D8h, 6Eh,0E6h, 9Ch,0ABh 9848 00009BF4 BAE5D74EE48CC83E db 0BAh,0E5h,0D7h, 4Eh,0E4h, 8Ch,0C8h, 3Eh 9849 00009BFC 6DD69BB9AAE1D4B8 db 6Dh,0D6h, 9Bh,0B9h,0AAh,0E1h,0D4h,0B8h 9850 00009C04 A97BB7D0E30EE05D db 0A9h, 7Bh,0B7h,0D0h,0E3h, 0Eh,0E0h, 5Dh 9851 00009C0C D57CC74D8B9A6CC6 db 0D5h, 7Ch,0C7h, 4Dh, 8Bh, 9Ah, 6Ch,0C6h 9852 00009C14 3D5CC50D8AA8994C db 3Dh, 5Ch,0C5h, 0Dh, 8Ah,0A8h, 99h, 4Ch 9853 00009C1C B67A3C5B891CC098 db 0B6h, 7Ah, 3Ch, 5Bh, 89h, 1Ch,0C0h, 98h 9854 00009C24 79E22E1ED32DD2D1 db 79h,0E2h, 2Eh, 1Eh,0D3h, 2Dh,0D2h,0D1h 9855 00009C2C 3B97881DC46BC3A7 db 3Bh, 97h, 88h, 1Dh,0C4h, 6Bh,0C3h,0A7h 9856 00009C34 2CC2B5C10C4BB46A db 2Ch,0C2h,0B5h,0C1h, 0Ch, 4Bh,0B4h, 6Ah 9857 00009C3C A6B35AA52BB21BB1 db 0A6h,0B3h, 5Ah,0A5h, 2Bh,0B2h, 1Bh,0B1h 9858 00009C44 0BB069964AA47887 db 0Bh,0B0h, 69h, 96h, 4Ah,0A4h, 78h, 87h 9859 00009C4C A33A592A9568A186 db 0A3h, 3Ah, 59h, 2Ah, 95h, 68h,0A1h, 86h 9860 00009C54 7794495767A21A0A db 77h, 94h, 49h, 57h, 67h,0A2h, 1Ah, 0Ah 9861 00009C5C A039935885299276 db 0A0h, 39h, 93h, 58h, 85h, 29h, 92h, 76h 9862 00009C64 0919919048847538 db 9, 19h, 91h, 90h, 48h, 84h, 75h, 38h 9863 00009C6C 8366288247741881 db 83h, 66h, 28h, 82h, 47h, 74h, 18h, 81h 9864 00009C74 8008563773654627 db 80h, 8, 56h, 37h, 73h, 65h, 46h, 27h 9865 00009C7C 7264550717717036 db 72h, 64h, 55h, 7, 17h, 71h, 70h, 36h 9866 00009C84 6345542662166106 db 63h, 45h, 54h, 26h, 62h, 16h, 61h, 6 9867 00009C8C 6053354425525115 db 60h, 53h, 35h, 44h, 25h, 52h, 51h, 15h 9868 00009C94 0534435024423314 db 5, 34h, 43h, 50h, 24h, 42h, 33h, 14h 9869 00009C9C 4104402332133103 db 41h, 4, 40h, 23h, 32h, 13h, 31h, 3 9870 00009CA4 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 9871 00009CAC 1000EFFEDFFDCFFC db 10h, 0,0EFh,0FEh,0DFh,0FDh,0CFh,0FCh 9872 00009CB4 BFFBFAAF9FF9F88F db 0BFh,0FBh,0FAh,0AFh, 9Fh,0F9h,0F8h, 8Fh 9873 00009CBC 7FF76FF65FF54FF4 db 7Fh,0F7h, 6Fh,0F6h, 5Fh,0F5h, 4Fh,0F4h 9874 00009CC4 3FF32FF2F11FF00F db 3Fh,0F3h, 2Fh,0F2h,0F1h, 1Fh,0F0h, 0Fh 9875 00009CCC EEDEEDCEECDDBEEB db 0EEh,0DEh,0EDh,0CEh,0ECh,0DDh,0BEh,0EBh 9876 00009CD4 CDDCAEEABDDBCC9E db 0CDh,0DCh,0AEh,0EAh,0BDh,0DBh,0CCh, 9Eh 9877 00009CDC E9ADDABCCB8EE89D db 0E9h,0ADh,0DAh,0BCh,0CBh, 8Eh,0E8h, 9Dh 9878 00009CE4 D97EE7ACFFCABB8D db 0D9h, 7Eh,0E7h,0ACh,0FFh,0CAh,0BBh, 8Dh 9879 00009CEC D80EE00DE66E9CC9 db 0D8h, 0Eh,0E0h, 0Dh,0E6h, 6Eh, 9Ch,0C9h 9880 00009CF4 5EBAE5AB7DD7E48C db 5Eh,0BAh,0E5h,0ABh, 7Dh,0D7h,0E4h, 8Ch 9881 00009CFC C84E2E3E6DD6E39B db 0C8h, 4Eh, 2Eh, 3Eh, 6Dh,0D6h,0E3h, 9Bh 9882 00009D04 B9AAE21EE15DD57C db 0B9h,0AAh,0E2h, 1Eh,0E1h, 5Dh,0D5h, 7Ch 9883 00009D0C C74D8BB8D49AA96C db 0C7h, 4Dh, 8Bh,0B8h,0D4h, 9Ah,0A9h, 6Ch 9884 00009D14 C63DD32DD21D7BB7 db 0C6h, 3Dh,0D3h, 2Dh,0D2h, 1Dh, 7Bh,0B7h 9885 00009D1C D15CC58AA8994CC4 db 0D1h, 5Ch,0C5h, 8Ah,0A8h, 99h, 4Ch,0C4h 9886 00009D24 6BB6D00C3CC37AA7 db 6Bh,0B6h,0D0h, 0Ch, 3Ch,0C3h, 7Ah,0A7h 9887 00009D2C 2CC25BB51C8998C1 db 2Ch,0C2h, 5Bh,0B5h, 1Ch, 89h, 98h,0C1h 9888 00009D34 4BC00B3BB00A1AB4 db 4Bh,0C0h, 0Bh, 3Bh,0B0h, 0Ah, 1Ah,0B4h 9889 00009D3C 6AA67997A00990B3 db 6Ah,0A6h, 79h, 97h,0A0h, 9, 90h,0B3h 9890 00009D44 882B5AB2A51BB169 db 88h, 2Bh, 5Ah,0B2h,0A5h, 1Bh,0B1h, 69h 9891 00009D4C 96A44A78873AA359 db 96h,0A4h, 4Ah, 78h, 87h, 3Ah,0A3h, 59h 9892 00009D54 952AA2A168867749 db 95h, 2Ah,0A2h,0A1h, 68h, 86h, 77h, 49h 9893 00009D5C 9439935885296776 db 94h, 39h, 93h, 58h, 85h, 29h, 67h, 76h 9894 00009D64 9219914884577538 db 92h, 19h, 91h, 48h, 84h, 57h, 75h, 38h 9895 00009D6C 8366288218477481 db 83h, 66h, 28h, 82h, 18h, 47h, 74h, 81h 9896 00009D74 0880566517077073 db 8, 80h, 56h, 65h, 17h, 7, 70h, 73h 9897 00009D7C 3727724664557136 db 37h, 27h, 72h, 46h, 64h, 55h, 71h, 36h 9898 00009D84 6345542662166106 db 63h, 45h, 54h, 26h, 62h, 16h, 61h, 6 9899 00009D8C 6035534425521505 db 60h, 35h, 53h, 44h, 25h, 52h, 15h, 5 9900 00009D94 5051344324423314 db 50h, 51h, 34h, 43h, 24h, 42h, 33h, 14h 9901 00009D9C 4104402332133103 db 41h, 4, 40h, 23h, 32h, 13h, 31h, 3 9902 00009DA4 3022122102201101 db 30h, 22h, 12h, 21h, 2, 20h, 11h, 1 9903 00009DAC 10000B0F0D0E0705 db 10h, 0, 0Bh, 0Fh, 0Dh, 0Eh, 7, 5 9904 00009DB4 0906030A0C020104 db 9, 6, 3, 0Ah, 0Ch, 2, 1, 4 9905 00009DBC 08000F0E0D0C0B0A db 8, 0, 0Fh, 0Eh, 0Dh, 0Ch, 0Bh, 0Ah 9906 00009DC4 0908070605040302 db 9, 8, 7, 6, 5, 4, 3, 2 9907 00009DCC 0100 db 1, 0 9908 00009DCE 000000000000 db 6 dup(0) 9909 mp3_huff_data: 9910 00009DD4 0000 db 0, 0 9911 00009DD6 0100 db 1, 0 ; byte[32][2] ; table,linbits 9912 00009DD8 0200 db 2, 0 9913 00009DDA 0300 db 3, 0 9914 00009DDC 0000 db 0, 0 9915 00009DDE 0400 db 4, 0 9916 00009DE0 0500 db 5, 0 9917 00009DE2 0600 db 6, 0 9918 00009DE4 0700 db 7, 0 9919 00009DE6 0800 db 8, 0 9920 00009DE8 0900 db 9, 0 9921 00009DEA 0A00 db 10, 0 9922 00009DEC 0B00 db 11, 0 9923 00009DEE 0C00 db 12, 0 9924 00009DF0 0000 db 0, 0 9925 00009DF2 0D00 db 13, 0 9926 00009DF4 0E01 db 14, 1 9927 00009DF6 0E02 db 14, 2 9928 00009DF8 0E03 db 14, 3 9929 00009DFA 0E04 db 14, 4 9930 00009DFC 0E06 db 14, 6 9931 00009DFE 0E08 db 14, 8 9932 00009E00 0E0A db 14, 10 9933 00009E02 0E0D db 14, 13 9934 00009E04 0F04 db 15, 4 9935 00009E06 0F05 db 15, 5 9936 00009E08 0F06 db 15, 6 9937 00009E0A 0F07 db 15, 7 9938 00009E0C 0F08 db 15, 8 9939 00009E0E 0F09 db 15, 9 9940 00009E10 0F0B db 15, 11 9941 00009E12 0F0D db 15, 13 9942 mp3_band_size_long: 9943 00009E14 040404040404060608- db 4, 4, 4, 4, 4, 4, 6, 6, 8, 8, 0Ah 9943 00009E1D 080A 9944 00009E1F 0C1014181C222A3236- db 0Ch, 10h, 14h, 18h, 1Ch, 22h, 2Ah, 32h, 36h, 4Ch, 9Eh ; byte[9][22] 9944 00009E28 4C9E 9945 00009E2A 040404040404060606- db 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 0Ah 9945 00009E33 080A 9946 00009E35 0C1012161C22282E36- db 0Ch, 10h, 12h, 16h, 1Ch, 22h, 28h, 2Eh, 36h, 36h,0C0h 9946 00009E3E 36C0 9947 00009E40 040404040404060608- db 4, 4, 4, 4, 4, 4, 6, 6, 8, 0Ah, 0Ch 9947 00009E49 0A0C 9948 00009E4B 1014181E262E384454- db 10h, 14h, 18h, 1Eh, 26h, 2Eh, 38h, 44h, 54h, 66h, 1Ah 9948 00009E54 661A 9949 00009E56 060606060606080A0C- db 6, 6, 6, 6, 6, 6, 8, 0Ah, 0Ch, 0Eh, 10h 9949 00009E5F 0E10 9950 00009E61 14181C20262E343C44- db 14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h 9950 00009E6A 3A36 9951 00009E6C 060606060606080A0C- db 6, 6, 6, 6, 6, 6, 8, 0Ah, 0Ch, 0Eh, 10h 9951 00009E75 0E10 9952 00009E77 12161A20262E344046- db 12h, 16h, 1Ah, 20h, 26h, 2Eh, 34h, 40h, 46h, 4Ch, 24h 9952 00009E80 4C24 9953 00009E82 060606060606080A0C- db 6, 6, 6, 6, 6, 6, 8, 0Ah, 0Ch, 0Eh, 10h 9953 00009E8B 0E10 9954 00009E8D 14181C20262E343C44- db 14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h 9954 00009E96 3A36 9955 00009E98 060606060606080A0C- db 6, 6, 6, 6, 6, 6, 8, 0Ah, 0Ch, 0Eh, 10h 9955 00009EA1 0E10 9956 00009EA3 14181C20262E343C44- db 14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h 9956 00009EAC 3A36 9957 00009EAE 060606060606080A0C- db 6, 6, 6, 6, 6, 6, 8, 0Ah, 0Ch, 0Eh, 10h 9957 00009EB7 0E10 9958 00009EB9 14181C20262E343C44- db 14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h 9958 00009EC2 3A36 9959 00009EC4 0C0C0C0C0C0C101418- db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 10h, 14h, 18h, 1Ch, 20h 9959 00009ECD 1C20 9960 00009ECF 283038404C5A020202- db 28h, 30h, 38h, 40h, 4Ch, 5Ah, 2, 2, 2, 2, 2 9960 00009ED8 0202 9961 00009EDA 000000000000000000- db 10 dup(0) ; data align 9961 00009EE3 00 9962 mp3_band_size_short: 9963 00009EE4 0404040406080A0C0E- db 4, 4, 4, 4, 6, 8, 0Ah, 0Ch, 0Eh, 12h, 16h, 1Eh, 38h 9963 00009EED 12161E38 9964 00009EF1 0404040406060A0C0E- db 4, 4, 4, 4, 6, 6, 0Ah, 0Ch, 0Eh, 10h, 14h, 1Ah, 42h ; byte[9][16] ? ; byte [9][13] 9964 00009EFA 10141A42 9965 00009EFE 0404040406080C1014- db 4, 4, 4, 4, 6, 8, 0Ch, 10h, 14h, 1Ah, 22h, 2Ah, 0Ch 9965 00009F07 1A222A0C 9966 00009F0B 0404040606080A0E12- db 4, 4, 4, 6, 6, 8, 0Ah, 0Eh, 12h, 1Ah, 20h, 2Ah, 12h 9966 00009F14 1A202A12 9967 00009F18 04040406080A0C0E12- db 4, 4, 4, 6, 8, 0Ah, 0Ch, 0Eh, 12h, 18h, 20h, 2Ch, 0Ch 9967 00009F21 18202C0C 9968 00009F25 04040406080A0C0E12- db 4, 4, 4, 6, 8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h 9968 00009F2E 181E2812 9969 00009F32 04040406080A0C0E12- db 4, 4, 4, 6, 8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h 9969 00009F3B 181E2812 9970 00009F3F 04040406080A0C0E12- db 4, 4, 4, 6, 8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h 9970 00009F48 181E2812 9971 00009F4C 0808080C1014181C24- db 8, 8, 8, 0Ch, 10h, 14h, 18h, 1Ch, 24h, 2, 2, 2, 1Ah 9971 00009F55 0202021A 9972 00009F59 000000000000000000- db 11 dup(0) ; data align 9972 00009F62 0000 9973 mp3_pretab: 9974 00009F64 000000000000000000- db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 9974 00009F6D 0000 9975 00009F6F 000000000000000000- db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 9975 00009F78 0000 9976 00009F7A 000000000000000000- db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 9976 00009F83 0000 9977 00009F85 010101010202030303- db 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0 9977 00009F8E 0200 9978 00009F90 00000000 db 4 dup(0) ; data align 9979 mp3_mdct_win_src: 9980 00009F94 4B1D4200028FDB0016- dd 00421D4Bh, 00DB8F02h, 019C7F16h, 029ADCC0h, 04000001h, 06246711h 9980 00009F9D 7F9C01C0DC9A020100- 9980 00009FA6 000411672406 9981 00009FAC 4506EE090CD6A71238- dd 09EE0645h, 12A7D60Ch, 3DF40538h,0BC63D32Fh,0E7B0025Bh,0F069D222h ; these are sine values divided by cosine values... 9981 00009FB5 05F43D2FD363BC5B02- 9981 00009FBE B0E722D269F0 9982 00009FC4 567133F467D857F6A8- dd 0F4337156h,0F657D867h,0F7BCFBA8h,0F8BB5952h,0F97C4965h,0FA15BB1Ch 9982 00009FCD FBBCF75259BBF86549- 9982 00009FD6 7CF91CBB15FA 9983 00009FDC 936D94FA8E5100FB70- dd 0FA946D93h,0FB00518Eh,0FB5EA270h,0FBB2FDEAh,0FC000000h,0FC479F38h 9983 00009FE5 A25EFBEAFDB2FB0000- 9983 00009FEE 00FC389F47FC 9984 00009FF4 09668BFC9898CCFC0B- dd 0FC8B6609h,0FCCC9898h,0FD0C4F0Bh,0FD4B895Ch,0FD8B3FCFh,0FDCC725Eh 9984 00009FFD 4F0CFD5C894BFDCF3F- 9984 0000A006 8BFD5E72CCFD 9985 0000A00C 2F3910FE67D857FE7D- dd 0FE10392Fh,0FE57D867h,0FEA4DA7Dh,0FEF935F7h,0FF5786D9h,0FFC36AD5h 9985 0000A015 DAA4FEF735F9FED986- 9985 0000A01E 57FFD56AC3FF 9986 0000A024 4B1D4200028FDB0016- dd 00421D4Bh, 00DB8F02h, 019C7F16h, 029ADCC0h, 04000001h, 06246711h 9986 0000A02D 7F9C01C0DC9A020100- 9986 0000A036 000411672406 9987 0000A03C 4506EE090CD6A71238- dd 09EE0645h, 12A7D60Ch, 3DF40538h,0BC63D32Fh,0E7B0025Bh,0F069D222h 9987 0000A045 05F43D2FD363BC5B02- 9987 0000A04E B0E722D269F0 9988 0000A054 567133F467D857F6A8- dd 0F4337156h,0F657D867h,0F7BCFBA8h,0F8BB5952h,0F97C4965h,0FA15BB1Ch 9988 0000A05D FBBCF75259BBF86549- 9988 0000A066 7CF91CBB15FA 9989 0000A06C 291B93FAB946F5FABB- dd 0FA931B29h,0FAF546B9h,0FB41DABBh,0FB7D8F97h,0FBABA162h,0FBCE4E62h 9989 0000A075 DA41FB978F7DFB62A1- 9989 0000A07E ABFB624ECEFB 9990 0000A084 671CF0FBAFC845FC0D- dd 0FBF01C67h,0FC45C8AFh,0FCD2D50Dh,0FD9008D0h,0FE74C032h,0FF771894h 9990 0000A08D D5D2FCD00890FD32C0- 9990 0000A096 74FE941877FF 9991 0000A09C 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 9991 0000A0A5 000000000000000000- 9991 0000A0AE 000000000000 9992 0000A0B4 028FDB00010000040C- dd 00DB8F02h, 04000001h, 12A7D60Ch,0E7B0025Bh,0F657D867h,0F97C4965h 9992 0000A0BD D6A7125B02B0E767D8- 9992 0000A0C6 57F665497CF9 9993 0000A0CC 8E5100FB000000FC98- dd 0FB00518Eh,0FC000000h,0FCCC9898h,0FD8B3FCFh,0FE57D867h,0FF5786D9h 9993 0000A0D5 98CCFCCF3F8BFD67D8- 9993 0000A0DE 57FED98657FF 9994 0000A0E4 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 9994 0000A0ED 000000000000000000- 9994 0000A0F6 000000000000 9995 0000A0FC 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 9995 0000A105 000000000000000000- 9995 0000A10E 000000000000 9996 0000A114 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 9996 0000A11D 000000000000000000- 9996 0000A126 000000000000 9997 0000A12C 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 9997 0000A135 000000000000000000- 9997 0000A13E 000000000000 9998 0000A144 000000000000000000- dd 00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h 9998 0000A14D 000000000000000000- 9998 0000A156 000000000000 9999 0000A15C B58869025237BA0B4F- dd 026988B5h, 0BBA3752h, 37D3294Fh,0B73F655Bh,0E3B0025Bh,0EDAD5D13h 9999 0000A165 29D3375B653FB75B02- 9999 0000A16E B0E3135DADED 10000 0000A174 A2ADB2F2B8288CF5D6- dd 0F2B2ADA2h,0F58C28B8h,0F75657D6h,0F88E2C57h,0F96DE565h,0FA1449CDh 10000 0000A17D 5756F7572C8EF865E5- 10000 0000A186 6DF9CD4914FA 10001 0000A18C 936D94FA8E5100FB70- dd 0FA946D93h,0FB00518Eh,0FB5EA270h,0FBB2FDEAh,0FC000000h,0FC479F38h 10001 0000A195 A25EFBEAFDB2FB0000- 10001 0000A19E 00FC389F47FC 10002 0000A1A4 09668BFC9898CCFC0B- dd 0FC8B6609h,0FCCC9898h,0FD0C4F0Bh,0FD4B895Ch,0FD8B3FCFh,0FDCC725Eh 10002 0000A1AD 4F0CFD5C894BFDCF3F- 10002 0000A1B6 8BFD5E72CCFD 10003 0000A1BC 2F3910FE67D857FE7D- dd 0FE10392Fh,0FE57D867h,0FEA4DA7Dh,0FEF935F7h,0FF5786D9h,0FFC36AD5h 10003 0000A1C5 DAA4FEF735F9FED986- 10003 0000A1CE 57FFD56AC3FF 10004 mp3_is_table_normal: 10005 0000A1D4 0000000000000040 dd 00000000h, 40000000h 10006 0000A1DC BB58860D46A77932 dd 0D8658BBh, 3279A746h 10007 0000A1E4 D1F56C17300A9328 dd 176CF5D1h, 28930A30h 10008 0000A1EC 0000002000000020 dd 20000000h, 20000000h 10009 0000A1F4 300A9328D1F56C17 dd 28930A30h, 176CF5D1h 10010 0000A1FC 46A77932BB58860D dd 3279A746h, 0D8658BBh 10011 0000A204 0000004000000000 dd 40000000h, 00000000h 10012 mp3_is_table_lsf_src: ; sqrt based constants... 10013 0000A20C 00000080 dd 80000000h ; 40000000h*2 ; 2.0 (2^1.00) aka 2 10014 0000A210 667EA26B dd 6BA27E66h ; 35D13F33h*2 ; 1.681 (2^0.75) 10015 0000A214 9A79825A dd 5A82799Ah ; 2D413CCDh*2 ; 1.414 (2^0.50) aka sqrt(2) 10016 0000A218 2AF81B4C dd 4C1BF82Ah ; 260DFC15h*2 ; 1.189 (2^0.25) aka sqrt(sqrt(2)) 10017 mp3_pow2_quarters: 10018 0000A21C 00000080 dd 80000000h ; 40000000h*2 ; 2^(0/4) 10019 0000A220 52F03798 dd 9837F052h ; 4C1BF829h*2 ; 2^(1/4) 10020 0000A224 34F304B5 dd 0B504F334h ; 5A82799Ah*2 ; 2^(2/4) 10021 0000A228 CCFC44D7 dd 0D744FCCCh ; 6BA27E66h*2 ; 2^(3/4) 10022 mp3_initialized: 10023 0000A22C 00000000 dd 0 10024 mp3_huff_num_entries: 10025 0000A230 12000000 dd 12h 10026 wrchr_buf: 10027 0000A234 00 db 0 10028 10029 num_enqueued_frames: 10030 0000A235 00 db 0 10031 10032 ; align 4 10033 10034 ; 21/10/2024 10035 0000A236 00000000 zero dd 0 10036 10037 huff_tree_list_numbits: 10038 0000A23A 0303020106060505 db 3, 3, 2, 1, 6, 6, 5, 5 10039 0000A242 0503030301060605 db 5, 3, 3, 3, 1, 6, 6, 5 10040 0000A24A 0505030202020808 db 5, 5, 3, 2, 2, 2, 8, 8 10041 0000A252 0706070707070606 db 7, 6, 7, 7, 7, 7, 6, 6 10042 0000A25A 0606030303010707 db 6, 6, 3, 3, 3, 1, 7, 7 10043 0000A262 0606060505050504 db 6, 6, 6, 5, 5, 5, 5, 4 10044 0000A26A 0404030203030A0A db 4, 4, 3, 2, 3, 3, 0Ah, 0Ah 10045 0000A272 0A0A090909090808 db 0Ah, 0Ah, 9, 9, 9, 9, 8, 8 10046 0000A27A 0909080909080807 db 9, 9, 8, 9, 9, 8, 8, 7 10047 0000A282 0707080808080707 db 7, 7, 8, 8, 8, 8, 7, 7 10048 0000A28A 0707060506060403 db 7, 7, 6, 5, 6, 6, 4, 3 10049 0000A292 03010B0B0A090A0A db 3, 1, 0Bh, 0Bh, 0Ah, 9, 0Ah, 0Ah 10050 0000A29A 0909090808090909 db 9, 9, 9, 8, 8, 9, 9, 9 10051 0000A2A2 0908080807080808 db 9, 8, 8, 8, 7, 8, 8, 8 10052 0000A2AA 0808080808060606 db 8, 8, 8, 8, 8, 6, 6, 6 10053 0000A2B2 0404020303020909 db 4, 4, 2, 3, 3, 2, 9, 9 10054 0000A2BA 0808090908080808 db 8, 8, 9, 9, 8, 8, 8, 8 10055 0000A2C2 0707070808070707 db 7, 7, 7, 8, 8, 7, 7, 7 10056 0000A2CA 0706060606050506 db 7, 6, 6, 6, 6, 5, 5, 6 10057 0000A2D2 0605050404040303 db 6, 5, 5, 4, 4, 4, 3, 3 10058 0000A2DA 03030B0B0B0B0B0B db 3, 3, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 10059 0000A2E2 0A0A0A0A0A0A0A0B db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Bh 10060 0000A2EA 0B0A09090A0A0909 db 0Bh, 0Ah, 9, 9, 0Ah, 0Ah, 9, 9 10061 0000A2F2 0A0A090A0A080809 db 0Ah, 0Ah, 9, 0Ah, 0Ah, 8, 8, 9 10062 0000A2FA 090A0A09090A0A08 db 9, 0Ah, 0Ah, 9, 9, 0Ah, 0Ah, 8 10063 0000A302 0808090909090909 db 8, 8, 9, 9, 9, 9, 9, 9 10064 0000A30A 0808080808080707 db 8, 8, 8, 8, 8, 8, 7, 7 10065 0000A312 0707060606060403 db 7, 7, 6, 6, 6, 6, 4, 3 10066 0000A31A 03010A0A0A0A0A0A db 3, 1, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 10067 0000A322 0A0B0B0A0A090909 db 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 9, 9, 9 10068 0000A32A 0A0A0A0A08080909 db 0Ah, 0Ah, 0Ah, 0Ah, 8, 8, 9, 9 10069 0000A332 0708080808080909 db 7, 8, 8, 8, 8, 8, 9, 9 10070 0000A33A 0909080708080707 db 9, 9, 8, 7, 8, 8, 7, 7 10071 0000A342 0808080909080808 db 8, 8, 8, 9, 9, 8, 8, 8 10072 0000A34A 0808080707060607 db 8, 8, 8, 7, 7, 6, 6, 7 10073 0000A352 0706050405050303 db 7, 6, 5, 4, 5, 5, 3, 3 10074 0000A35A 03020A0A09090909 db 3, 2, 0Ah, 0Ah, 9, 9, 9, 9 10075 0000A362 0909090808090908 db 9, 9, 9, 8, 8, 9, 9, 8 10076 0000A36A 0808080808090908 db 8, 8, 8, 8, 8, 9, 9, 8 10077 0000A372 0808080809090707 db 8, 8, 8, 8, 9, 9, 7, 7 10078 0000A37A 0708080808080807 db 7, 8, 8, 8, 8, 8, 8, 7 10079 0000A382 0707070808070707 db 7, 7, 7, 8, 8, 7, 7, 7 10080 0000A38A 0606060607070605 db 6, 6, 6, 6, 7, 7, 6, 5 10081 0000A392 0505040405050403 db 5, 5, 4, 4, 5, 5, 4, 3 10082 0000A39A 0303131312111010 db 3, 3, 13h, 13h, 12h, 11h, 10h, 10h 10083 0000A3A2 1010101010101010 db 10h, 10h, 10h, 10h, 10h, 10h, 10h, 10h 10084 0000A3AA 11110F0F10100F0F db 11h, 11h, 0Fh, 0Fh, 10h, 10h, 0Fh, 0Fh 10085 0000A3B2 0F0F0F0F0F0F0F0F db 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh 10086 0000A3BA 10100F10100E0E0F db 10h, 10h, 0Fh, 10h, 10h, 0Eh, 0Eh, 0Fh 10087 0000A3C2 0F0F0F0E0E0E0E0E db 0Fh, 0Fh, 0Fh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh 10088 0000A3CA 0E0E0E0E0E0E0F0F db 0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Fh, 0Fh 10089 0000A3D2 0E0D0E0E0D0D0E0E db 0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh, 0Eh 10090 0000A3DA 0D0E0E0D0E0E0D0E db 0Dh, 0Eh, 0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Eh 10091 0000A3E2 0E0D0D0E0E0C0C0C db 0Eh, 0Dh, 0Dh, 0Eh, 0Eh, 0Ch, 0Ch, 0Ch 10092 0000A3EA 0D0D0D0D0D0D0C0D db 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh 10093 0000A3F2 0D0C0C0D0D0D0D0D db 0Dh, 0Ch, 0Ch, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh 10094 0000A3FA 0D0D0D0D0D0D0D0C db 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch 10095 0000A402 0C0D0D0C0C0C0C0D db 0Ch, 0Dh, 0Dh, 0Ch, 0Ch, 0Ch, 0Ch, 0Dh 10096 0000A40A 0D0D0D0C0D0D0C0B db 0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Ch, 0Bh 10097 0000A412 0C0C0C0C0C0C0C0C db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 10098 0000A41A 0B0B0B0B0C0C0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh 10099 0000A422 0C0C0B0C0C0C0C0B db 0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Bh 10100 0000A42A 0B0C0C0B0C0C0B0C db 0Bh, 0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ch 10101 0000A432 0C0B0C0C0A0A0A0B db 0Ch, 0Bh, 0Ch, 0Ch, 0Ah, 0Ah, 0Ah, 0Bh 10102 0000A43A 0B0B0B0B0B0B0B0A db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah 10103 0000A442 0A0A0A0B0B0A0B0B db 0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh 10104 0000A44A 0A0B0B0B0B0A0A0B db 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh 10105 0000A452 0B0A0A0B0B0B0B0B db 0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 10106 0000A45A 0B09090A0A0A0A0A db 0Bh, 9, 9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 10107 0000A462 0B0B0909090A0A09 db 0Bh, 0Bh, 9, 9, 9, 0Ah, 0Ah, 9 10108 0000A46A 090A0A0A0A0A0A0A db 9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 10109 0000A472 0A0A0A0809090909 db 0Ah, 0Ah, 0Ah, 8, 9, 9, 9, 9 10110 0000A47A 09090A0A09090908 db 9, 9, 0Ah, 0Ah, 9, 9, 9, 8 10111 0000A482 0809090909090908 db 8, 9, 9, 9, 9, 9, 9, 8 10112 0000A48A 0708080808070707 db 7, 8, 8, 8, 8, 7, 7, 7 10113 0000A492 0707060606060404 db 7, 7, 6, 6, 6, 6, 4, 4 10114 0000A49A 03010D0D0D0D0C0D db 3, 1, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh 10115 0000A4A2 0D0D0D0D0D0C0D0D db 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh 10116 0000A4AA 0C0C0C0C0C0C0C0C db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 10117 0000A4B2 0C0C0C0C0C0C0C0C db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 10118 0000A4BA 0C0C0C0C0C0C0C0D db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Dh 10119 0000A4C2 0D0B0B0C0C0C0C0B db 0Dh, 0Bh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Bh 10120 0000A4CA 0B0B0B0B0B0C0C0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ch, 0Ch, 0Bh 10121 0000A4D2 0B0B0B0B0B0B0B0C db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ch 10122 0000A4DA 0C0B0B0B0B0B0B0B db 0Ch, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 10123 0000A4E2 0B0B0B0B0B0B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 10124 0000A4EA 0B0B0B0B0B0B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 10125 0000A4F2 0B0B0C0C0B0B0B0B db 0Bh, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh, 0Bh, 0Bh 10126 0000A4FA 0B0B0A0B0B0B0B0B db 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 10127 0000A502 0B0A0A0B0B0A0A0A db 0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah 10128 0000A50A 0A0B0B0A0A0A0A0A db 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 10129 0000A512 0A0A0B0B0A0A0A0A db 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah 10130 0000A51A 0A0B0B090A0A0A0A db 0Ah, 0Bh, 0Bh, 9, 0Ah, 0Ah, 0Ah, 0Ah 10131 0000A522 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 10132 0000A52A 090A0A0A0A090A0A db 9, 0Ah, 0Ah, 0Ah, 0Ah, 9, 0Ah, 0Ah 10133 0000A532 090A0A0A0A0A0A0A db 9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 10134 0000A53A 0A09090909090909 db 0Ah, 9, 9, 9, 9, 9, 9, 9 10135 0000A542 0A0A090909090909 db 0Ah, 0Ah, 9, 9, 9, 9, 9, 9 10136 0000A54A 0A0A090909090909 db 0Ah, 0Ah, 9, 9, 9, 9, 9, 9 10137 0000A552 0809090909090909 db 8, 9, 9, 9, 9, 9, 9, 9 10138 0000A55A 0909090808080809 db 9, 9, 9, 8, 8, 8, 8, 9 10139 0000A562 0909090909090908 db 9, 9, 9, 9, 9, 9, 9, 8 10140 0000A56A 0808080808090908 db 8, 8, 8, 8, 8, 9, 9, 8 10141 0000A572 0808080808080909 db 8, 8, 8, 8, 8, 8, 9, 9 10142 0000A57A 0807080807070707 db 8, 7, 8, 8, 7, 7, 7, 7 10143 0000A582 0808070707070706 db 8, 8, 7, 7, 7, 7, 7, 6 10144 0000A58A 0707060607070606 db 7, 7, 6, 6, 7, 7, 6, 6 10145 0000A592 0605050505050304 db 6, 5, 5, 5, 5, 5, 3, 4 10146 0000A59A 04030B0B0B0B0B0B db 4, 3, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 10147 0000A5A2 0B0B0A0B0B0B0B0A db 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah 10148 0000A5AA 0A0A0A0A080A0A09 db 0Ah, 0Ah, 0Ah, 0Ah, 8, 0Ah, 0Ah, 9 10149 0000A5B2 0909090A1011110F db 9, 9, 9, 0Ah, 10h, 11h, 11h, 0Fh 10150 0000A5BA 0F10100E0F0F0E0E db 0Fh, 10h, 10h, 0Eh, 0Fh, 0Fh, 0Eh, 0Eh 10151 0000A5C2 0F0F0E0E0F0F0F0F db 0Fh, 0Fh, 0Eh, 0Eh, 0Fh, 0Fh, 0Fh, 0Fh 10152 0000A5CA 0E0F0F0E0D080909 db 0Eh, 0Fh, 0Fh, 0Eh, 0Dh, 8, 9, 9 10153 0000A5D2 08080D0E0E0E0E0E db 8, 8, 0Dh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh 10154 0000A5DA 0E0E0E0E0E0D0D0E db 0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh 10155 0000A5E2 0E0E0E0D0E0E0D0D db 0Eh, 0Eh, 0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Dh 10156 0000A5EA 0D0E0E0E0E0D0D0E db 0Dh, 0Eh, 0Eh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh 10157 0000A5F2 0E0D0E0E0C0D0D0D db 0Eh, 0Dh, 0Eh, 0Eh, 0Ch, 0Dh, 0Dh, 0Dh 10158 0000A5FA 0D0D0D0D0D0D0D0D db 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh 10159 0000A602 0D0D0D0C0D0D0D0D db 0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Dh, 0Dh 10160 0000A60A 0D0D0C0D0D0C0C0D db 0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Ch, 0Ch, 0Dh 10161 0000A612 0D0B0C0C0C0C0C0C db 0Dh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 10162 0000A61A 0C0D0D0B0C0C0C0C db 0Ch, 0Dh, 0Dh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch 10163 0000A622 0B0C0C0C0C0C0C0C db 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 10164 0000A62A 0C0B0C0C0B0B0B0B db 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh, 0Bh, 0Bh 10165 0000A632 0C0C0C0C0C0C0C0C db 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch 10166 0000A63A 0B0C0C0B0C0C0B0C db 0Bh, 0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ch 10167 0000A642 0C0B0C0C0B0A0A0B db 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ah, 0Ah, 0Bh 10168 0000A64A 0B0B0B0B0B0A0A0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh 10169 0000A652 0B0A0A0B0B0B0B0B db 0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 10170 0000A65A 0B0B0B0A0B0B0A0A db 0Bh, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah 10171 0000A662 0A0B0B0A0A0B0B0A db 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah 10172 0000A66A 0A0B0B0A09090A0A db 0Ah, 0Bh, 0Bh, 0Ah, 9, 9, 0Ah, 0Ah 10173 0000A672 0A0A0A0A0909090A db 0Ah, 0Ah, 0Ah, 0Ah, 9, 9, 9, 0Ah 10174 0000A67A 0A090A0A09090809 db 0Ah, 9, 0Ah, 0Ah, 9, 9, 8, 9 10175 0000A682 0909090909090908 db 9, 9, 9, 9, 9, 9, 9, 8 10176 0000A68A 0809090808070708 db 8, 9, 9, 8, 8, 7, 7, 8 10177 0000A692 0807060606060404 db 8, 7, 6, 6, 6, 6, 4, 4 10178 0000A69A 0301080808080808 db 3, 1, 8, 8, 8, 8, 8, 8 10179 0000A6A2 0808070808070708 db 8, 8, 7, 8, 8, 7, 7, 8 10180 0000A6AA 0807070707070707 db 8, 7, 7, 7, 7, 7, 7, 7 10181 0000A6B2 0707070707080809 db 7, 7, 7, 7, 7, 8, 8, 9 10182 0000A6BA 0B0B0B0B0B0B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 10183 0000A6C2 0B0B0B0B0B0B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 10184 0000A6CA 0B0B0B0B0B0B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh 10185 0000A6D2 0B0B0B0B040B0B0B db 0Bh, 0Bh, 0Bh, 0Bh, 4, 0Bh, 0Bh, 0Bh 10186 0000A6DA 0B0C0C0B0A0B0B0A db 0Bh, 0Ch, 0Ch, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah 10187 0000A6E2 0A0A0A0B0B0A0A0A db 0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah 10188 0000A6EA 0A0B0B0A0A0A0A0A db 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 10189 0000A6F2 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 10190 0000A6FA 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 10191 0000A702 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 10192 0000A70A 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 10193 0000A712 0A0A0B0B0A0A0A0A db 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah 10194 0000A71A 0A0A0A0A0A0A0A0A db 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah 10195 0000A722 0A0B0B0A0B0B0A09 db 0Ah, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah, 9 10196 0000A72A 0A0A0A0A0B0B0A09 db 0Ah, 0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 9 10197 0000A732 090A0A090A0A0A0A db 9, 0Ah, 0Ah, 9, 0Ah, 0Ah, 0Ah, 0Ah 10198 0000A73A 09090A0A09090909 db 9, 9, 0Ah, 0Ah, 9, 9, 9, 9 10199 0000A742 0909090909090909 db 9, 9, 9, 9, 9, 9, 9, 9 10200 0000A74A 0909090909090909 db 9, 9, 9, 9, 9, 9, 9, 9 10201 0000A752 0909090909090909 db 9, 9, 9, 9, 9, 9, 9, 9 10202 0000A75A 0909090909090909 db 9, 9, 9, 9, 9, 9, 9, 9 10203 0000A762 0A0A0909090A0A08 db 0Ah, 0Ah, 9, 9, 9, 0Ah, 0Ah, 8 10204 0000A76A 0909080808080808 db 9, 9, 8, 8, 8, 8, 8, 8 10205 0000A772 0808080808080809 db 8, 8, 8, 8, 8, 8, 8, 9 10206 0000A77A 0908080808080809 db 9, 8, 8, 8, 8, 8, 8, 9 10207 0000A782 0907080807070707 db 9, 7, 8, 8, 7, 7, 7, 7 10208 0000A78A 0708080707060607 db 7, 8, 8, 7, 7, 6, 6, 7 10209 0000A792 0706050506060404 db 7, 6, 5, 5, 6, 6, 4, 4 10210 0000A79A 0404060606060606 db 4, 4, 6, 6, 6, 6, 6, 6 10211 0000A7A2 0505050505040404 db 5, 5, 5, 5, 5, 4, 4, 4 10212 0000A7AA 0401040404040404 db 4, 1, 4, 4, 4, 4, 4, 4 10213 0000A7B2 0404040404040404 db 4, 4, 4, 4, 4, 4, 4, 4 10214 0000A7BA 0404 db 4, 4 10215 _@@const_3: 10216 0000A7BC 03 db 3 10217 0000A7BD 000000 db 3 dup(0) 10218 10219 ; 16/02/2025 10220 ;mp3_synth_filter_procs: 10221 ; 15/02/2025 10222 ;dd synth_16bit_shift_0_slow ; SYNTH_MACRO 0,0,0 10223 10224 ; Erdogan Tan - 17/10/2024 10225 txt_hello: 10226 0000A7C0 0D0A db 13,10 10227 ;db 'NOCASH MP3 PLAYER v1.4 for Windows ',0 10228 ; 09/01/2025 10229 ;db 'NOCASH MP3 PLAYER v1.0 for TRDOS386 ',0 10230 ; 15/02/2025 10231 0000A7C2 54696E79204D503320- db 'Tiny MP3 PLAYER v1.0 for TRDOS386 by Erdogan Tan.',0 10231 0000A7CB 504C41594552207631- 10231 0000A7D4 2E3020666F72205452- 10231 0000A7DD 444F53333836206279- 10231 0000A7E6 204572646F67616E20- 10231 0000A7EF 54616E2E00 10232 txt_bdate: 10233 0000A7F4 0D0A db 13,10 10234 0000A7F6 466562727561727920- db 'February 2025.',13,10,0 10234 0000A7FF 323032352E0D0A00 10235 10236 0000A807 32342F30322F323032- db "24/02/2025", 0 10236 0000A810 3500 10237 10238 0000A812 303132333435363738- hex_chars: db "0123456789ABCDEF", 0 10238 0000A81B 3941424344454600 10239 10240 0000A823 0D0A msgAC97Info: db 0Dh, 0Ah 10241 0000A825 414339372041756469- db "AC97 Audio Controller & Codec Info", 0Dh, 0Ah 10241 0000A82E 6F20436F6E74726F6C- 10241 0000A837 6C6572202620436F64- 10241 0000A840 656320496E666F0D0A 10242 0000A849 56656E646F72204944- db "Vendor ID: " 10242 0000A852 3A20 10243 0000A854 303030306820446576- msgVendorId: db "0000h Device ID: " 10243 0000A85D 6963652049443A20 10244 0000A865 30303030680D0A msgDevId: db "0000h", 0Dh, 0Ah 10245 0000A86C 4275733A20 db "Bus: " 10246 0000A871 303068204465766963- msgBusNo: db "00h Device: " 10246 0000A87A 653A20 10247 0000A87D 3030682046756E6374- msgDevNo: db "00h Function: " 10247 0000A886 696F6E3A20 10248 0000A88B 303068 msgFncNo: db "00h" 10249 0000A88E 0D0A db 0Dh, 0Ah 10250 10251 0000A890 4E414D4241523A20 db "NAMBAR: " 10252 0000A898 30303030682020 msgNamBar: db "0000h " 10253 0000A89F 4E41424D4241523A20 db "NABMBAR: " 10254 0000A8A8 303030306820204952- msgNabmBar: db "0000h IRQ: " 10254 0000A8B1 513A20 10255 0000A8B4 3030 msgIRQ: dw 3030h 10256 0000A8B6 0D0A00 db 0Dh, 0Ah, 0 10257 10258 0000A8B9 0D0A46696C65204E61- msgFileName: db 0Dh, 0Ah, "File Name: ",0 10258 0000A8C2 6D653A2000 10259 0000A8C7 0D0A53616D706C6520- msgSampleRate: db 0Dh, 0Ah, "Sample Rate: " 10259 0000A8D0 526174653A20 10260 0000A8D6 303030303020487A00 msgHertz: db "00000 Hz", 0 10261 0000A8DF 0D0A42697420526174- msgKBitRate: db 0Dh, 0Ah, "Bit Rate: ", 0 10261 0000A8E8 653A2000 10262 0000A8EC 206B6269742F7300 msgKBits: db " kbit/s", 0 10263 0000A8F4 0D0A506C6179626163- msgPlayback: db 0Dh, 0Ah, "Playback: ", 0 10263 0000A8FD 6B3A2000 10264 ; 17/02/2025 10265 ;msg8Bits: db "8 bits, ", 0 10266 0000A901 4D6F6E6F0D0A00 msgMono: db "Mono", 0Dh, 0Ah, 0 10267 0000A908 313620626974732C20- msg16Bits: db "16 bits, ", 0 10267 0000A911 00 10268 0000A912 53746572656F msgStereo: db "Stereo" 10269 0000A918 0D0A00 nextline: db 0Dh, 0Ah, 0 10270 10271 ; 15/02/2025 10272 0000A91B 0D0A msgDuration: db 0Dh, 0Ah 10273 0000A91D 4475726174696F6E3A- db "Duration: " 10273 0000A926 20 10274 0000A927 30303A303020286D69- msgMinSec: db "00:00 (minute:second)" 10274 0000A930 6E7574653A7365636F- 10274 0000A939 6E6429 10275 0000A93C 0D0A00 db 0Dh, 0Ah, 0 10276 10277 0000A93F 56524120737570706F- msgVRAheader: db "VRA support: " 10277 0000A948 72743A20 10278 0000A94C 00 db 0 10279 0000A94D 5945530D0A00 msgVRAyes: db "YES", 0Dh, 0Ah, 0 10280 0000A953 4E4F200D0A msgVRAno: db "NO ", 0Dh, 0Ah 10281 0000A958 28496E746572706F6C- db "(Interpolated sample rate playing method)" 10281 0000A961 617465642073616D70- 10281 0000A96A 6C6520726174652070- 10281 0000A973 6C6179696E67206D65- 10281 0000A97C 74686F6429 10282 0000A981 0D0A00 db 0Dh, 0Ah, 0 10283 10284 0000A984 0D0A msgSB16Info: db 0Dh, 0Ah 10285 0000A986 20417564696F204861- db " Audio Hardware: Sound Blaster 16", 0Dh, 0Ah 10285 0000A98F 7264776172653A2053- 10285 0000A998 6F756E6420426C6173- 10285 0000A9A1 7465722031360D0A 10286 0000A9A9 202020202020426173- db " Base Port: " 10286 0000A9B2 6520506F72743A20 10287 msgBasePort: 10288 0000A9BA 303030680D0A db "000h", 0Dh, 0Ah 10289 0000A9C0 202020202020202020- db " IRQ: " 10289 0000A9C9 2020204952513A20 10290 msgSB16IRQ: 10291 0000A9D1 30 db 30h 10292 0000A9D2 0D0A00 db 0Dh, 0Ah, 0 10293 10294 ; 15/02/2025 10295 0000A9D5 75736167653A20746D- txt_help: db 'usage: tmp3play filename.mp3',0Dh,0Ah,0 10295 0000A9DE 7033706C6179206669- 10295 0000A9E7 6C656E616D652E6D70- 10295 0000A9F0 330D0A00 10296 10297 0000A9F4 0D0A txt_original: db 13,10 10298 0000A9F6 4F726967696E616C20- db 'Original code: ', 13,10 10298 0000A9FF 636F64653A200D0A 10299 0000AA07 202020202020202020- db ' Nocash MP3 Decoder/Player', 13,10 10299 0000AA10 4E6F63617368204D50- 10299 0000AA19 33204465636F646572- 10299 0000AA22 2F506C617965720D0A 10300 0000AA2B 202020202020202020- db ' MP3PLAYER.EXE v1.4 (20/09/2024)', 13,10 10300 0000AA34 4D5033504C41594552- 10300 0000AA3D 2E4558452076312E34- 10300 0000AA46 202832302F30392F32- 10300 0000AA4F 303234290D0A 10301 0000AA55 202020202020202020- db ' by Martin Korth (TASM source code)' 10301 0000AA5E 6279204D617274696E- 10301 0000AA67 204B6F727468202854- 10301 0000AA70 41534D20736F757263- 10301 0000AA79 6520636F646529 10302 0000AA80 0D0A00 db 13,10,0 10303 0000AA83 76312E342E30 db 'v1.4.0' 10304 ; 10/01/2025 10305 0000AA89 00 half_buffer: db 0 10306 10307 ; 13/02/2025 10308 0000AA8A 0D0A msgPressAKey: db 0Dh, 0Ah 10309 0000AA8C 202E2E2E2070726573- db ' ... press a key to continue ... ' 10309 0000AA95 732061206B65792074- 10309 0000AA9E 6F20636F6E74696E75- 10309 0000AAA7 65202E2E2E20 10310 0000AAAD 0D0A0D0A00 db 0Dh, 0Ah, 0Dh, 0Ah, 0 10311 10312 ; --------------------------------------------------------------------------- 10313 10314 ; 13/02/2025 (mp3play6.s) 10315 ; 30/12/2024 (cgaplay.s) 10316 0000AAB2 FF fillblock: times 8 db 0FFh 10317 0000AABA 0000 dw 0 10318 10319 ; --------------------------------------------------------------------------- 10320 10321 ; 13/02/2025 10322 ; 23/11/2024 10323 0000AABC 0B0A0C0E090D0F colors: db 0Bh, 0Ah, 0Ch, 0Eh, 09h, 0Dh, 0Fh 10324 ; cyan, green, red, yellow, blue, magenta, white 10325 0000AAC3 0B ccolor: db 0Bh ; cyan 10326 10327 ; --------------------------------------------------------------------------- 10328 10329 ; 24/01/2025 10330 0000AAC4 03 volume_level db 3 10331 10332 ; --------------------------------------------------------------------------- 10333 10334 ; 26/01/2025 10335 ; 07/12/2024 10336 trdos386_err_msg: 10337 0000AAC5 5452444F5320333836- db 'TRDOS 386 System call error !',10,13,0 10337 0000AACE 2053797374656D2063- 10337 0000AAD7 616C6C206572726F72- 10337 0000AAE0 20210A0D00 10338 10339 ; --------------------------------------------------------------------------- 10340 10341 ; 15/02/2025 10342 0000AAE5 0A0D noDevMsg: db 10,13 10343 0000AAE7 4572726F723A20556E- db 'Error: Unable to find a proper audio device !' 10343 0000AAF0 61626C6520746F2066- 10343 0000AAF9 696E6420612070726F- 10343 0000AB02 70657220617564696F- 10343 0000AB0B 206465766963652021 10344 0000AB14 0A0D00 db 10,13,0 10345 10346 ; --------------------------------------------------------------------------- 10347 10348 ; 15/02/2025 10349 txt_not_found: 10350 0000AB17 0A0D noFileErrMsg: db 10,13 10351 0000AB19 4572726F723A204669- db 'Error: File not found !',10,13,0 10351 0000AB22 6C65206E6F7420666F- 10351 0000AB2B 756E6420210A0D00 10352 10353 ; --------------------------------------------------------------------------- 10354 10355 ; 15/02/2025 10356 0000AB33 0A0D not_valid_mp3f: db 10,13 10357 0000AB35 4E6F7420612070726F- db 'Not a proper/valid MP3 file !',10,13,0 10357 0000AB3E 7065722F76616C6964- 10357 0000AB47 204D50332066696C65- 10357 0000AB50 20210A0D00 10358 10359 ; --------------------------------------------------------------------------- 10360 10361 EOF: 10362 10363 ; =========================================================================== 10364 ; Uninitialized DATA (BSS) 10365 ; =========================================================================== 10366 10367 0000AB55 90 align 4 10368 10369 ; 15/02/2025 10370 bss_start: 10371 10372 ABSOLUTE bss_start 10373 10374 ;------------------------------------------------------------------------------ 10375 ; IFF/ILBM DATA 10376 ;------------------------------------------------------------------------------ 10377 10378 0000AB58 ???????? picture.width: resd 1 ; current picture width and height 10379 0000AB5C ???????? picture.height: resd 1 10380 10381 ;------------------------------------------------------------------------------ 10382 10383 ; 16/02/2025 (tmp3play.s) 10384 ; 13/02/2025 10385 ; 12/02/2025 (mp3play6.s) 10386 ; 05/02/2025 (cgaplay.s) 10387 10388 alignb 4 10389 10390 ; 25/01/2025 10391 0000AB60 ???????? stream_size resd 1 10392 ; 13/02/2025 10393 ;turn_on_leds resd 1 10394 ; 22/01/2025 10395 0000AB64 ???????? stream_begin resd 1 10396 0000AB68 ???????? fb_count resd 1 10397 10398 ; 26/01/2025 10399 0000AB6C ???????? sd_count resd 1 10400 10401 ; 12/01/2025 10402 ;;;; 10403 ; AC97 specific 10404 0000AB70 ???????? bus_dev_fn resd 1 10405 0000AB74 ???????? dev_vendor resd 1 10406 0000AB78 ???? NAMBAR resw 1 10407 0000AB7A ???? NABMBAR resw 1 10408 ; SB16 specific 10409 0000AB7C ???????? audio_io_base resd 1 10410 ac97_int_ln_reg: 10411 0000AB80 ?? audio_intr resb 1 10412 ;;;; 10413 10414 ; 13/02/2025 10415 0000AB81 ?? stopped resb 1 10416 10417 0000AB82 ???? alignb 4 10418 10419 ;;; 10420 ; 24/01/2025 10421 ; 20/10/2024 (TRDOS 386 specific parameters) 10422 0000AB84 ?? audio_hardware resb 1 10423 0000AB85 ?? vra resb 1 10424 0000AB86 ?? srb resb 1 10425 0000AB87 ?? blocks resb 1 10426 0000AB88 ???????? buffer_size resd 1 10427 ;;; 10428 10429 ; 23/05/2025 10430 0000AB8C ???????? timerticks resd 1 10431 10432 ; 15/01/2025 (FASM) 10433 ;;;; 10434 ; 13/01/2025 (Interpolation parameters) 10435 0000AB90 ???????? conversion resd 1 ; pointer to convers(t)ion 10436 ; ; or interpolation proc address 10437 0000AB94 ???????? loadsize resd 1 ; decoding buffer size 10438 0000AB98 ?? interpolation resb 1 ; interpolation status 10439 10440 ;------------------------------------------------------------------------------ 10441 10442 ; 25/01/2025 10443 0000AB99 ?????? alignb 4 10444 10445 ; 15/02/2025 10446 mp3_context_start: 10447 0000AB9C main_data_pool_start resb 4096 10448 0000BB9C ???????? main_data_pool_wr_ptr resd 1 10449 0000BBA0 ???????? mp3_src_data_location resd 1 10450 0000BBA4 ???????? mp3_src_frame_size resd 1 10451 0000BBA8 ???????? mp3_src_frame_end resd 1 10452 0000BBAC ???????? mp3_hdr_32bit_header resd 1 10453 0000BBB0 ???????? mp3_hdr_flag_crc resd 1 10454 0000BBB4 ???????? mp3_hdr_flag_mpeg25 resd 1 10455 0000BBB8 ???????? mp3_hdr_flag_padding resd 1 10456 0000BBBC ???????? mp3_sample_rate resd 1 10457 0000BBC0 ???????? mp3_hdr_sample_rate_index resd 1 10458 0000BBC4 ???????? mp3_bit_rate resd 1 10459 0000BBC8 ???????? mp3_num_channels resd 1 10460 ; 17/02/2025 10461 ;mp3_bytes_per_sample resd 1 10462 0000BBCC ???????? mp3_curr_syn_index resd 1 10463 0000BBD0 ???????? mp3_curr_syn_dst resd 1 10464 0000BBD4 ???????? mp3_nb_frames resd 1 10465 0000BBD8 ???????? mp3_hdr_mode_val resd 1 10466 0000BBDC ???????? mp3_hdr_mode_ext resd 1 10467 0000BBE0 ???????? mp3_hdr_flag_lsf resd 1 10468 10469 0000BBE4 mp3_synth_buf resd 2048 10470 0000DBE4 ???????????????? mp3_synth_index resd 2 10471 0000DBEC mp3_sb_samples resd 2304 10472 ; MP3_MAX_CHANNELS*36*SBLIMIT 10473 0000FFEC mp3_mdct_buf resd 1152 10474 ; MP3_MAX_CHANNELS*SBLIMIT*18 10475 000111EC ???????? mp3_free_format_frame_size resd 1 10476 10477 000111F0 ?? mp3_curr_vfrac_bits resb 1 10478 10479 000111F1 ?????? alignb 4 10480 10481 000111F4 ???????? mp3_xing_id resd 1 10482 000111F8 ???????? mp3_xing_flags resd 1 10483 000111FC ???????? mp3_xing_frames resd 1 10484 00011200 ???????? mp3_xing_filesize resd 1 10485 00011204 mp3_xing_toc resb 100 10486 00011268 ???????? mp3_xing_vbr_scale resd 1 10487 0001126C ???????? mp3_file_size resd 1 10488 00011270 ???????? mp3_id3_size resd 1 10489 00011274 ???????? mp3_tag_size resd 1 10490 10491 00011278 ???????? mp3_num_frames_decoded resd 1 10492 0001127C ???????? mp3_samples_dst resd 1 10493 ; DWORD mp3_samples_output_size 10494 00011280 ???????? mp3_samples_output_size resd 1 10495 00011284 ???????? mp3_samples_dst_step resd 1 10496 10497 00011288 ???????? mp3_curr_channel resd 1 10498 0001128C ???????? mp3_curr_granule resd 1 10499 00011290 ???????? mp3_curr_frame resd 1 10500 10501 00011294 ???????? mp3_bitstream_start resd 1 10502 00011298 ???????? mp3_src_remain resd 1 10503 0001129C ???????? mp3_extra_bytes resd 1 10504 000112A0 ???????? mp3_main_data_begin resd 1 10505 000112A4 ???????? mp3_num_compress_bits resd 1 10506 10507 000112A8 ???????? mp3_nb_granules resd 1 10508 10509 000112AC mp3_granules resb 9856 10510 0001392C mp3_exponents resw 576 10511 00013DAC huff_tree_buf resb 0B800h 10512 0001F5AC mp3_band_index_long resw 288 10513 0001F7EC mp3_table_4_3_exp resb 32828 10514 10515 00027828 mp3_table_4_3_value resd 32828 10516 00047918 mp3_exp_table resd 512 10517 00048118 mp3_expval_table resd 8192 10518 00050118 mp3_mdct_win resd 288 10519 00050598 mp3_is_table_lsf resd 512 10520 00050D98 mp3_synth_win resd 1024 10521 00051D98 mp3_lsf_sf_expand_exploded_table resb 8192 10522 mp3_context_end: 10523 00053D98 ???????? _@@region_address0 resd 1 10524 00053D9C ???????? _@@region_address1 resd 1 10525 00053DA0 ???????? _@@saved_sp resd 1 10526 00053DA4 ???????? mp3_main_data_siz resd 1 10527 00053DA8 ???????? _@@scfsi resd 1 10528 00053DAC _@@gains resd 3 10529 00053DB8 ???????? _@@rle_point resd 1 10530 00053DBC ???????? _@@III resd 1 10531 00053DC0 ???????? _@@JJJ resd 1 10532 00053DC4 ???????? _@@linbits resd 1 10533 00053DC8 ???????? _@@vlc_table resd 1 10534 00053DCC ???????? _@@coarse_end resd 1 10535 10536 00053DD0 ???????? _@rle_point resd 1 10537 00053DD4 ???????? _@@rle_ptr resd 1 10538 00053DD8 ???????? _@@rle_val resd 1 10539 00053DDC ???????? _@@rle_val_x_40h resd 1 10540 00053DE0 ???????? _@@max_bands resb 4 10541 00053DE4 ???????? _@@max_blocks resd 1 10542 00053DE8 ???????? _@@max_pos resd 1 10543 00053DEC _@@sfb_array resb 40 10544 00053E14 ???????? _@@is_tab resd 1 10545 00053E18 ???????? _@@n_long_sfb resd 1 10546 00053E1C ???????? _@@n_short_sfb resd 1 10547 00053E20 ???????? _@@n_sfb resd 1 10548 00053E24 _@@tmp resb 2304 10549 00054724 ???????? _@@s0 resd 1 10550 00054728 ???????? _@@s2 resd 1 10551 0005472C ???????? _@@s3 resd 1 10552 10553 00054730 _@@@tmp resd 18 ; resb 72 10554 00054778 ???????? _@@tmp0 resd 1 10555 0005477C ???????? _@@tmp1 resd 1 10556 00054780 ???????? _@@tmp2 resd 1 10557 00054784 ???????? _@@tmp3 resd 1 10558 00054788 ???????? _@@tmp4 resd 1 10559 0005478C ???????? _@@tmp5 resd 1 10560 00054790 ???????? mp3_out2_a0 resd 1 10561 00054794 ???????? mp3_out2_a1 resd 1 10562 00054798 ???????? mp3_out2_a2 resd 1 10563 0005479C ???????? mp3_out2_b0 resd 1 10564 000547A0 ???????? mp3_out2_b1 resd 1 10565 000547A4 ???????? mp3_out2_b2 resd 1 10566 000547A8 ???????? resd 1 10567 000547AC ???????? resd 1 10568 000547B0 ???????? _@@@JJJ resd 1 10569 000547B4 ???????? _@@www resd 1 10570 000547B8 ???????? _@@mdct_long_end resd 1 10571 000547BC ???????? _@@sblimit resd 1 10572 000547C0 ???????? _@@switch_point resd 1 10573 000547C4 mp3_huff_tmp_bits resb 256 10574 000548C4 mp3_huff_tmp_codes resb 512 10575 00054AC4 ???????? _@@table_nb_bits resd 1 10576 00054AC8 ???????? _@@nb_codes resd 1 10577 00054ACC ???????? _@@prefix_numbits resd 1 10578 00054AD0 ???????? _@@prefix_pattern resd 1 10579 00054AD4 ???????? _@@curr_table_size resd 1 10580 00054AD8 ???????? _@@curr_table_mask resd 1 10581 00054ADC ???????? _@@curr_table_index resd 1 10582 00054AE0 ???????? _@@granule_addr resd 1 10583 ; HANDLE hFile 10584 00054AE4 ???????? hFile resd 1 10585 ; HANDLE hMap 10586 ;hMap resd 1 10587 00054AE8 ???????? stream_start resd 1 10588 00054AEC ???????? stream_pos resd 1 10589 00054AF0 ???????? bytes_left resd 1 10590 10591 ; 17/02/2025 10592 ;; 20/10/2024 10593 ;; DWORD diskresult 10594 ;;diskresult resd 1 10595 ;; HANDLE std_out 10596 ;;std_out resd 1 10597 ;;cmdline_buf resb 1024 10598 ;cmdline_buf resb 128 10599 ;; HANDLE mp3_wav_handle 10600 ;mp3_wav_handle resd 1 10601 ;; HANDLE mp3_pcm_handle 10602 ;mp3_pcm_handle resd 1 10603 ;_@@max_diff resd 1 10604 ;_@@avg_diff resd 2 10605 ;pcm_filepos resd 1 10606 ;_@@mono_convert resd 1 10607 ;_@@pcm_steps resw 2 10608 ;_@@worst_pcm_filepos resd 1 10609 ;_@@worst_mp3_filepos resd 1 10610 ; resd 1 10611 10612 ;------------------------------------------------------------------------------ 10613 10614 ; 15/02/2025 10615 10616 00054AF4 alignb 16 10617 10618 00054B00 RowOfs resw 256 10619 10620 00054D00 NewScope_L resw 256 10621 00054F00 NewScope_R resw 256 10622 00055100 OldScope_L resw 256 10623 00055300 OldScope_R resw 256 10624 10625 ;------------------------------------------------------------------------------ 10626 10627 00055500 mp3_file_name resb 80 ; wave file, path name (<= 80 bytes) 10628 10629 00055550 ???????? resd 1 10630 00055554 ???????? txtSize resd 1 10631 10632 ;------------------------------------------------------------------------------ 10633 10634 ; 10/01/2025 10635 00055558 alignb 4096 10636 10637 ; 27/01/2025 10638 ; 15/01/2025 10639 00056000 decoding_buffer resb 8192 ; 2*4096 (max. 4608) 10640 00058000 sample_buffer resb 36864 ; 8*4608 10641 10642 ;------------------------------------------------------------------------------ 10643 10644 ; 26/01/2025 10645 ;alignb 4096 10646 10647 ; 15/02/2025 10648 00061000 ???????? sounddata_copy resd 1 ; address pointer for fast (conversion) copy 10649 00061004 ???????? get_sound_data resd 1 ; procedure pointer 10650 10651 ; 16/02/2025 10652 00061008 alignb 4096 10653 10654 00062000 sounddata resb 1024 ; 16 bit stereo samples for wave scope display 10655 00062400 sounddata2 resb 512 ; temporary buffer 10656 10657 ; 26/01/2025 10658 00062600 alignb 4096 10659 10660 end_of_bss: 10661 10662 ; =========================================================================== 10663 ; end