     1                                  ; ****************************************************************************
     2                                  ; MP3PLAY.PRG - MP3 DECODER/PLAYER 1.0 for TRDOS 386 Operating System
     3                                  ; ----------------------------------------------------------------------------
     4                                  ; Based on 
     5                                  ; NOCASH MP3PLAY.EXE 1.4 (Windows) ASM source code (Martin Korth, 20/09/2024)
     6                                  ;
     7                                  ; FASM Source Code: Erdogan Tan - 19/10/2024 - 22/10/2024
     8                                  ; NASM Source Code: Erdogan Tan - 09/01/2025
     9                                  ;
    10                                  ; [ Last Modification: 15/01/2025 ]
    11                                  ;
    12                                  ; ----------------------------------------------------------------------------
    13                                  ; Modified from on MP3PLAY.ASM (for Windows console) source code - 17/10/2024
    14                                  ; ****************************************************************************
    15                                  ; Modified from Martin Korth's 'mp3play.asm' (TASM32) source code... (v1.4)
    16                                  ; Applied development method:
    17                                  ;         Disassembling 'mp3play.exe' v1.4 by using HEX-RAYS disassembler;
    18                                  ;         then... converting disassembled code to FASM syntax,
    19                                  ;                 adding '.idata' code (by help of FASM examples) to the raw
    20                                  ;                        asm file. Converting 'proc' procedures to labels.
    21                                  ;               and Finally: assembling mp3play.asm (single) file by using
    22                                  ;                           'fasm mp3play.asm' command.
    23                                  ;
    24                                  ; NOTE:
    25                                  ; Martin Korth's MP3PLAY.EXE (v1.4, 20/09/2024) file size is 45056 bytes.
    26                                  ; (This) modified MP3PLAY.EXE (v1.4.0, 17/10/2024) is 37888 bytes.
    27                                  ;
    28                                  ; ---------------------------------------------------------------------------
    29                                  ; nasm mp3play.s -l mp3play.txt -o MP3PLAY.PRG -Z error.txt
    30                                  
    31                                  ; ===========================================================================
    32                                  ;  TRDOS 386 Operating System Specific Procedures - Erdogan Tan - 20/10/2024
    33                                  ; ===========================================================================
    34                                  
    35                                  ; 20/10/2024
    36                                  ; 20/08/2024 ; TRDOS 386 v2.0.9
    37                                  ; TRDOS 386 system calls
    38                                  _ver 	equ 0
    39                                  _exit 	equ 1
    40                                  _fork 	equ 2
    41                                  _read 	equ 3
    42                                  _write	equ 4
    43                                  _open	equ 5
    44                                  _close 	equ 6
    45                                  _wait 	equ 7
    46                                  _creat 	equ 8
    47                                  _rename equ 9
    48                                  _delete equ 10
    49                                  _exec	equ 11
    50                                  _chdir	equ 12
    51                                  _time 	equ 13
    52                                  _mkdir 	equ 14
    53                                  _chmod	equ 15
    54                                  _rmdir	equ 16
    55                                  _break	equ 17
    56                                  _drive	equ 18
    57                                  _seek	equ 19
    58                                  _tell 	equ 20
    59                                  _mem	equ 21
    60                                  _prompt	equ 22
    61                                  _path	equ 23
    62                                  _env	equ 24
    63                                  _stime	equ 25
    64                                  _quit	equ 26
    65                                  _intr	equ 27
    66                                  _dir	equ 28
    67                                  _emt 	equ 29
    68                                  _ldvrt 	equ 30
    69                                  _video 	equ 31
    70                                  _audio	equ 32
    71                                  _timer	equ 33
    72                                  _sleep	equ 34
    73                                  _msg    equ 35
    74                                  _geterr	equ 36
    75                                  _fpsave	equ 37
    76                                  _pri	equ 38
    77                                  _rele	equ 39
    78                                  _fff	equ 40
    79                                  _fnf	equ 41
    80                                  _alloc	equ 42
    81                                  _dalloc equ 43
    82                                  _calbac equ 44
    83                                  _dma	equ 45
    84                                  _stdio  equ 46	;  TRDOS 386 v2.0.9
    85                                  
    86                                  ; ---------------------------------------------------------------------------
    87                                  ; 'sys' macro in FASM format
    88                                  ; ---------------------------------------------------------------------------
    89                                  
    90                                  %if 0
    91                                  macro sys op1,op2,op3,op4
    92                                  {
    93                                      if op4 eq 
    94                                      else
    95                                          mov edx, op4
    96                                      end if
    97                                      if op3 eq
    98                                      else
    99                                          mov ecx, op3
   100                                      end if
   101                                      if op2 eq
   102                                      else
   103                                          mov ebx, op2
   104                                      end if
   105                                      mov eax, op1
   106                                      int 40h
   107                                  }
   108                                  %endif
   109                                  
   110                                  ; ---------------------------------------------------------------------------
   111                                  ; 'sys' macro in NASM format
   112                                  ; ---------------------------------------------------------------------------
   113                                  ; 09/01/2025
   114                                  
   115                                  %macro sys 1-4
   116                                      ; 29/04/2016 - TRDOS 386 (TRDOS v2.0)
   117                                      ; 03/09/2015
   118                                      ; 13/04/2015
   119                                      ; Retro UNIX 386 v1 system call.
   120                                      %if %0 >= 2
   121                                          mov ebx, %2
   122                                          %if %0 >= 3
   123                                              mov ecx, %3
   124                                              %if %0 = 4
   125                                                 mov edx, %4
   126                                              %endif
   127                                          %endif
   128                                      %endif
   129                                      mov eax, %1
   130                                      ;int 30h
   131                                      int 40h ; TRDOS 386 (TRDOS v2.0)
   132                                  %endmacro
   133                                  
   134                                  ; ===========================================================================
   135                                  ; CODE
   136                                  ; ===========================================================================
   137                                  
   138                                  		[BITS 32] ; 32-bit intructions
   139                                  
   140                                  		[ORG 0]
   141                                  
   142                                  ; ===========================================================================
   143                                  
   144                                  		; 20/10/2024
   145                                  start:
   146                                  		; 21/10/2024
   147 00000000 E81D6B0000              		call	set_break	; set and clear bss section
   148                                  					; also set stream_start position
   149                                  
   150                                                  ;mov    edx, txt_hello  ; "nocash mp3 decoder v1.4, 2024" ...
   151                                                  ;call   wrstr_edx
   152 00000005 BB[DE8A0000]            		mov	ebx, txt_hello
   153 0000000A E8BA6B0000              		call	print_msg
   154                                  
   155 0000000F E8E9690000                              call    get_commandline
   156 00000014 0F826C010000                            jc      .exit
   157                                  
   158                                  		;;;
   159                                  		; 11/01/2025
   160 0000001A E8A06C0000              		call	detect_enable_audio_device
   161 0000001F 0F8261010000            		jc	.exit
   162                                  		;;;
   163                                  
   164 00000025 31ED                                    xor     ebp, ebp
   165 00000027 E80E640000                              call    mp3_init
   166 0000002C E8086B0000                              call    open_and_mmap_the_file
   167 00000031 0F824F010000                            jc      .exit
   168 00000037 E84F010000                              call    detect_cpu_386_and_up
   169 0000003C E89A6B0000                              call    GetTickCount
   170 00000041 F7D8                                    neg     eax
   171 00000043 A3[FC750000]                            mov     [millisecond_count], eax
   172 00000048 E887640000                              call    mp3_check_1st_frame
   173 0000004D 0F8233010000                            jc      .exit
   174 00000053 803D[EB750000]00                        cmp     byte [option_test], 0
   175 0000005A 7407                                    jz      short .no_benchmark_test
   176 0000005C E83D660000                              call    mp3_plain_test_without_output
   177                                  
   178 00000061 EB6F                                    jmp    .decode_done
   179                                   
   180                                  .no_benchmark_test:
   181 00000063 833D[9C840000]00                        cmp     dword [mp3_pcm_fname], 0
   182 0000006A 740A                                    jz      short .no_pcm_verify
   183 0000006C E855670000                              call    mp3_verify_pcm_file
   184 00000071 E910010000                              jmp     .exit
   185                                  
   186                                  .no_pcm_verify:
   187 00000076 833D[98840000]00                        cmp     dword [mp3_dst_fname], 0
   188 0000007D 7407                                    jz      short .no_wav_output
   189 0000007F E84F660000                              call    mp3_cast_to_wav_file
   190 00000084 EB4C                                    jmp     short .decode_done
   191                                  
   192                                  .no_wav_output:
   193                                  		; 15/01/2025
   194                                  		;;;; --------------------------
   195                                  		;mov	byte [convert], 0
   196 00000086 B002                    		mov	al, 2 
   197 00000088 3805[248D0000]          		cmp	[audio_hardware], al ; 2
   198 0000008E 7511                    		jne	short .direct
   199                                  
   200 00000090 803D[6C9D0000]02        		cmp	byte [mp3_output_num_channels], 2
   201 00000097 7227                    		jb	short .indirect	; mono (8bit or 16bit)
   202 00000099 3805[749D0000]          		cmp	[mp3_bytes_per_sample], al ; 2
   203 0000009F 721F                    		jb	short .indirect
   204                                  .direct:
   205                                  		;;;; --------------------------
   206                                  
   207                                  		;;; 
   208                                  		; 20/10/2024
   209                                  		;call	detect_enable_audio_device
   210                                  		;jc	.exit
   211 000000A1 E8066D0000              		call	audio_system_init
   212                                  		;jc	.exit
   213 000000A6 7207                    		jc	short .exit@ ; 15/01/2025
   214                                  		;;;
   215                                  
   216 000000A8 E8BD6D0000                              call    mp3_cast_to_speaker
   217                                  
   218                                  		; 13/01/2025
   219                                  		;;;; --------------------------
   220 000000AD EB23                    		jmp	short .decode_done
   221                                  
   222                                  		; 15/01/2025
   223                                  .exit@:
   224                                  		; Disable audio device
   225                                  		sys	_audio, 0C00h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 000000AF BB000C0000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 000000B4 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 000000B9 CD40                <1>  int 40h
   226 000000BB E93F6B0000              		jmp	ExitProcess
   227                                  
   228                                  .indirect:
   229 000000C0 FE05[388D0000]          		inc	byte [convert] ; 1
   230 000000C6 E83C6F0000              		call	audio_system_init_x
   231 000000CB 72E2                    		jc	short .exit@
   232 000000CD E8B96F0000              		call    mp3_cast_to_speaker_x
   233                                  		;;;; --------------------------
   234                                  
   235                                  .decode_done:
   236 000000D2 E8046B0000                              call    GetTickCount
   237 000000D7 0105[FC750000]                          add     [millisecond_count], eax
   238 000000DD BA[D1840000]                            mov     edx, txt_decode_timing1 ; "audio duration "
   239 000000E2 E8F7640000                              call    wrstr_edx
   240 000000E7 A1[2CF40000]                            mov     eax, [mp3_total_output_size]
   241 000000EC BAE8030000                              mov     edx, 1000
   242 000000F1 F7E2                                    mul     edx
   243 000000F3 F735[709D0000]                          div     dword [mp3_output_sample_rate]
   244 000000F9 31D2                                    xor     edx, edx
   245 000000FB F735[6C9D0000]                          div     dword [mp3_output_num_channels]
   246 00000101 31D2                                    xor     edx, edx
   247 00000103 F735[749D0000]                          div     dword [mp3_bytes_per_sample]
   248 00000109 A3[F8750000]                            mov     [mp3_output_milliseconds], eax
   249 0000010E E801650000                              call    wr_decimal_eax_with_thousands_seperator
   250 00000113 BA[E1840000]                            mov     edx, txt_decode_timing2 ; " milliseconds, decoded in "
   251 00000118 E8C1640000                              call    wrstr_edx
   252 0000011D A1[FC750000]                            mov     eax, [millisecond_count]
   253 00000122 E8ED640000                              call    wr_decimal_eax_with_thousands_seperator
   254 00000127 BA[FC840000]                            mov     edx, txt_decode_timing3 ; " milliseconds\r\n"
   255 0000012C E8AD640000                              call    wrstr_edx
   256 00000131 BA[0C850000]                            mov     edx, txt_clks_per_second ; " clock cycles per second:\r\n"
   257 00000136 E8A3640000                              call    wrstr_edx
   258 0000013B BE[00760000]                            mov     esi, ttt ; rdtsc_list_start
   259                                  
   260                                  .timelog_lop:
   261 00000140 E8BB640000                              call    wrspc
   262 00000145 8D5608                                  lea     edx, [esi+8]
   263 00000148 E891640000                              call    wrstr_edx
   264 0000014D E8AE640000                              call    wrspc
   265 00000152 8B06                                    mov     eax, [esi]
   266 00000154 8B5E04                                  mov     ebx, [esi+4]
   267 00000157 BAE8030000                              mov     edx, 1000
   268 0000015C 0FAFDA                                  imul    ebx, edx
   269 0000015F F7E2                                    mul     edx
   270 00000161 01DA                                    add     edx, ebx
   271 00000163 3B15[F8750000]                          cmp     edx, [mp3_output_milliseconds]
   272 00000169 730B                                    jnb     short .timelog_oops
   273 0000016B F735[F8750000]                          div     dword [mp3_output_milliseconds]
   274 00000171 E89E640000                              call    wr_decimal_eax_with_thousands_seperator
   275                                  
   276                                  .timelog_oops:
   277 00000176 E874640000                              call    wrcrlf
   278 0000017B 83C618                                  add     esi, 24
   279 0000017E 81FE[C8770000]                          cmp     esi, mp3_bitrate_tab
   280 00000184 75BA                                    jnz     short .timelog_lop
   281                                  
   282                                  .exit:
   283                                  		;push   0               ; uExitCode
   284                                                  ;call   ExitProcess
   285 00000186 E9746A0000              		jmp	ExitProcess
   286                                  
   287                                  
   288                                  ; =============== S U B R O U T I N E =======================================
   289                                  
   290                                  
   291                                  detect_cpu_386_and_up:
   292 0000018B C605[F5750000]03                        mov     byte [detected_cpu], 3
   293 00000192 89E3                                    mov     ebx, esp
   294 00000194 83E4FC                                  and     esp, ~ 3 ; not 3
   295 00000197 9C                                      pushf
   296 00000198 58                                      pop     eax
   297 00000199 89C1                                    mov     ecx, eax
   298 0000019B 3500000400                              xor     eax, 40000h
   299 000001A0 50                                      push    eax
   300 000001A1 9D                                      popf
   301 000001A2 9C                                      pushf
   302 000001A3 58                                      pop     eax
   303 000001A4 31C8                                    xor     eax, ecx
   304 000001A6 51                                      push    ecx
   305 000001A7 9D                                      popf
   306 000001A8 89DC                                    mov     esp, ebx
   307 000001AA A900000400                              test    eax, 40000h
   308 000001AF 7431                                    jz      short .no_id
   309 000001B1 FE05[F5750000]                          inc	byte [detected_cpu]
   310 000001B7 E827000000                              call    @@get_id_flag
   311 000001BC 7507                                    jnz     short .yep_id
   312 000001BE E820000000                              call    @@get_id_flag
   313 000001C3 741D                                    jz      short .no_id
   314                                  
   315                                  .yep_id:
   316 000001C5 B801000000                              mov     eax, 1
   317 000001CA 0FA2                                    cpuid
   318 000001CC 80E40F                                  and     ah, 0Fh
   319 000001CF 8825[F5750000]                          mov     [detected_cpu], ah
   320 000001D5 C605[F4750000]01                        mov	byte [cpuid_exists], 1
   321 000001DC 8915[F0750000]                          mov     [cpuid_flags], edx
   322                                  
   323                                  .no_id:
   324 000001E2 C3                                      retn
   325                                  
   326                                  ; =============== S U B R O U T I N E =======================================
   327                                  
   328                                  
   329                                  @@get_id_flag:
   330 000001E3 9C                                      pushf
   331 000001E4 58                                      pop     eax
   332 000001E5 0D00002000                              or      eax, 200000h
   333 000001EA 50                                      push    eax
   334 000001EB 9D                                      popf
   335 000001EC 9C                                      pushf
   336 000001ED 58                                      pop     eax
   337 000001EE A900002000                              test    eax, 200000h
   338 000001F3 C3                                      retn
   339                                  
   340                                  ; =============== S U B R O U T I N E =======================================
   341                                  
   342                                  bswap_eax:
   343 000001F4 86E0                                    xchg    al, ah
   344 000001F6 C1C810                                  ror     eax, 10h
   345 000001F9 86E0                                    xchg    al, ah
   346 000001FB C3                                      retn
   347                                  
   348                                  ; =============== S U B R O U T I N E =======================================
   349                                  
   350                                  mp3_recollect_bits:
   351 000001FC F7C601000000                            test    esi, 1
   352 00000202 7510                                    jnz     short .odd
   353 00000204 668B2E                                  mov     bp, [esi]
   354 00000207 83C602                                  add     esi, 2
   355 0000020A 66C1CD08                                ror     bp, 8
   356 0000020E C1E510                                  shl     ebp, 16
   357 00000211 B500                                    mov     ch, 0
   358 00000213 C3                                      retn
   359                                  
   360                                  .odd:
   361 00000214 0FB62E                                  movzx   ebp, byte [esi]
   362 00000217 46                                      inc     esi
   363 00000218 C1E510                                  shl     ebp, 16
   364 0000021B 668B2E                                  mov     bp, [esi]
   365 0000021E 83C602                                  add     esi, 2
   366 00000221 66C1CD08                                ror     bp, 8
   367 00000225 C1E508                                  shl     ebp, 8
   368 00000228 B508                                    mov     ch, 8
   369 0000022A C3                                      retn
   370                                  
   371                                  ; =============== S U B R O U T I N E =======================================
   372                                  
   373                                  
   374                                  mp3_get_bits:
   375 0000022B 89E8                                    mov     eax, ebp
   376 0000022D D3E5                                    shl     ebp, cl
   377 0000022F D3C0                                    rol     eax, cl
   378 00000231 31E8                                    xor     eax, ebp
   379 00000233 28CD                                    sub     ch, cl
   380 00000235 7801                                    js      short mp3_collect_more
   381 00000237 C3                                      retn
   382                                  
   383                                  mp3_collect_more:
   384 00000238 88E9                                    mov     cl, ch
   385 0000023A 80C510                                  add     ch, 10h
   386 0000023D D3C5                                    rol     ebp, cl
   387 0000023F 668B2E                                  mov     bp, [esi]
   388 00000242 83C602                                  add     esi, 2
   389 00000245 66C1CD08                                ror     bp, 8
   390 00000249 D3CD                                    ror     ebp, cl
   391 0000024B C3                                      retn
   392                                  
   393                                  ; =============== S U B R O U T I N E =======================================
   394                                  
   395                                  
   396                                  mp3_uncollect_bits:
   397 0000024C 83EE02                                  sub     esi, 2
   398 0000024F C0ED03                                  shr     ch, 3
   399 00000252 0FB6CD                                  movzx   ecx, ch
   400 00000255 29CE                                    sub     esi, ecx
   401 00000257 C3                                      retn
   402                                  
   403                                  ; =============== S U B R O U T I N E =======================================
   404                                  
   405                                  
   406                                  mp3_search_get_header:
   407 00000258 F605[F0750000]10                        test    byte [cpuid_flags], 10h
   408 0000025F 740E                                    jz      short .no_rdtsc_supported
   409 00000261 0F31                                    rdtsc
   410 00000263 2905[00760000]                          sub     [ttt], eax
   411 00000269 1915[04760000]                          sbb     [ttt+4], edx
   412                                  
   413                                  .no_rdtsc_supported:
   414 0000026F C705[50F40000]0000-                     mov	dword [mp3_extra_bytes], 0
   414 00000277 0000               
   415                                  
   416                                  .retry_header:
   417 00000279 833D[4CF40000]04                        cmp	dword [mp3_src_remain], 4
   418 00000280 0F82B5010000                            jb      .fail_no_header
   419 00000286 803EFF                                  cmp     byte [esi], 0FFh
   420 00000289 7516                                    jnz     short .bad_header
   421 0000028B 8A4601                                  mov     al, [esi+1]
   422 0000028E 24E6                                    and     al, 0E6h
   423 00000290 3CE2                                    cmp     al, 0E2h
   424 00000292 750D                                    jnz     short .bad_header
   425 00000294 8A4602                                  mov     al, [esi+2]
   426 00000297 3CF0                                    cmp     al, 0F0h
   427 00000299 7306                                    jnb     short .bad_header
   428 0000029B 240C                                    and     al, 0Ch
   429 0000029D 3C0C                                    cmp     al, 0Ch
   430 0000029F 7519                                    jnz     short .good_header
   431                                  
   432                                  .bad_header:
   433 000002A1 46                                      inc	esi
   434 000002A2 FF0D[4CF40000]                          dec	dword [mp3_src_remain]
   435 000002A8 FF05[50F40000]                          inc	dword [mp3_extra_bytes]
   436 000002AE C705[3C9D0000]-                         mov	dword [main_data_pool_wr_ptr], main_data_pool_start
   436 000002B4 [3C8D0000]         
   437 000002B8 EBBF                                    jmp	short .retry_header
   438                                  
   439                                  .good_header:
   440 000002BA 8B06                                    mov	eax, [esi]
   441 000002BC E833FFFFFF                              call	bswap_eax
   442 000002C1 A3[4C9D0000]                            mov	[mp3_hdr_32bit_header], eax
   443 000002C6 C705[8C9D0000]0000-                     mov	dword [mp3_hdr_flag_lsf], 0
   443 000002CE 0000               
   444 000002D0 C705[549D0000]0000-                     mov	dword [mp3_hdr_flag_mpeg25], 0
   444 000002D8 0000               
   445 000002DA C705[5CF40000]0200-                     mov	dword [mp3_nb_granules], 2
   445 000002E2 0000               
   446 000002E4 A900000800                              test	eax, 80000h
   447 000002E9 7525                                    jnz	short .lsf_this
   448 000002EB C705[8C9D0000]0100-                     mov	dword [mp3_hdr_flag_lsf], 1
   448 000002F3 0000               
   449 000002F5 C705[5CF40000]0100-                     mov	dword [mp3_nb_granules], 1
   449 000002FD 0000               
   450 000002FF A900001000                              test	eax, 100000h
   451 00000304 750A                                    jnz	short .lsf_this
   452 00000306 C705[549D0000]0100-                     mov	dword [mp3_hdr_flag_mpeg25], 1
   452 0000030E 0000               
   453                                  
   454                                  .lsf_this:
   455 00000310 C1E80A                                  shr     eax, 10
   456 00000313 83E003                                  and     eax, 3
   457 00000316 8B0D[8C9D0000]                          mov     ecx, [mp3_hdr_flag_lsf]
   458 0000031C 030D[549D0000]                          add     ecx, [mp3_hdr_flag_mpeg25]
   459 00000322 0FB79400[08780000]                      movzx   edx, word [mp3_freq_tab+eax*2]
   460 0000032A D3EA                                    shr     edx, cl
   461 0000032C 8D0C49                                  lea     ecx, [ecx+ecx*2]
   462 0000032F 01C8                                    add     eax, ecx
   463 00000331 A3[609D0000]                            mov     [mp3_hdr_sample_rate_index], eax
   464 00000336 8915[5C9D0000]                          mov     [mp3_sample_rate], edx
   465                                  
   466 0000033C 8A0D[EE750000]                          mov     cl, [option_rate_shift]
   467 00000342 D3EA                                    shr     edx, cl
   468                                  
   469 00000344 8915[709D0000]                          mov     [mp3_output_sample_rate], edx
   470 0000034A A1[4C9D0000]                            mov     eax, [mp3_hdr_32bit_header]
   471 0000034F C1E810                                  shr     eax, 10h
   472 00000352 F7D0                                    not     eax
   473 00000354 83E001                                  and     eax, 1
   474 00000357 A3[509D0000]                            mov     [mp3_hdr_flag_crc], eax
   475 0000035C A1[4C9D0000]                            mov     eax, [mp3_hdr_32bit_header]
   476 00000361 C1E809                                  shr     eax, 9
   477 00000364 83E001                                  and     eax, 1
   478 00000367 A3[589D0000]                            mov     [mp3_hdr_flag_padding], eax
   479 0000036C A1[4C9D0000]                            mov     eax, [mp3_hdr_32bit_header]
   480 00000371 C1E80C                                  shr     eax, 12
   481 00000374 83E00F                                  and     eax, 0Fh
   482 00000377 7512                                    jnz     short .not_free_format
   483 00000379 E85F5D0000                              call    mp3_detect_free_format_block_size
   484 0000037E 0F821DFFFFFF                            jb      .bad_header
   485 00000384 A1[9CF30000]                            mov     eax, [mp3_free_format_frame_size]
   486 00000389 EB34                                    jmp     short .this_frame_size_plus_padding
   487                                  
   488                                  .not_free_format:
   489 0000038B 8B15[8C9D0000]                          mov     edx, [mp3_hdr_flag_lsf]
   490 00000391 C1E204                                  shl     edx, 4
   491 00000394 01D0                                    add     eax, edx
   492 00000396 0FB78400[C8770000]                      movzx   eax, word [mp3_bitrate_tab+eax*2] ; kbit/s
   493 0000039E 69C0E8030000                            imul    eax, 1000       ; bit/s
   494 000003A4 A3[649D0000]                            mov     [mp3_bit_rate], eax
   495 000003A9 69C090000000                            imul    eax, 144        ; 144=90h=8*18
   496 000003AF 31D2                                    xor     edx, edx
   497 000003B1 F735[5C9D0000]                          div     dword [mp3_sample_rate]
   498 000003B7 8B0D[8C9D0000]                          mov     ecx, [mp3_hdr_flag_lsf]
   499 000003BD D3E8                                    shr     eax, cl
   500                                  
   501                                  .this_frame_size_plus_padding:
   502 000003BF 0305[589D0000]                          add     eax, [mp3_hdr_flag_padding]
   503 000003C5 A3[449D0000]                            mov     [mp3_src_frame_size], eax
   504 000003CA 01F0                                    add     eax, esi
   505 000003CC A3[489D0000]                            mov     [mp3_src_frame_end], eax
   506 000003D1 A1[4C9D0000]                            mov     eax, [mp3_hdr_32bit_header]
   507 000003D6 C1E806                                  shr     eax, 6
   508 000003D9 83E003                                  and     eax, 3
   509 000003DC A3[849D0000]                            mov     [mp3_hdr_mode_val], eax
   510 000003E1 BA01000000                              mov     edx, 1
   511                                  
   512 000003E6 3C03                    		cmp     al, 3
   513 000003E8 7401                                    jz      short .this_channels
   514                                  
   515                                                  ;mov    edx, 2
   516                                  		; 10/01/2025
   517 000003EA 42                      		inc	edx
   518                                  .this_channels:
   519 000003EB 8915[689D0000]                          mov	[mp3_src_num_channels], edx
   520 000003F1 803D[EC750000]00                        cmp	byte [option_mono], 0
   521 000003F8 7405                                    jz	short .allow_stereo
   522 000003FA BA01000000                              mov	edx, 1
   523                                  .allow_stereo:
   524 000003FF 8915[6C9D0000]                          mov     [mp3_output_num_channels], edx
   525 00000405 0FAF15[749D0000]                        imul    edx, [mp3_bytes_per_sample]
   526 0000040C 8915[38F40000]                          mov     [mp3_samples_dst_step], edx
   527 00000412 A1[4C9D0000]                            mov     eax, [mp3_hdr_32bit_header]
   528 00000417 C1E804                                  shr     eax, 4
   529 0000041A 83E003                                  and     eax, 3
   530 0000041D A3[889D0000]                            mov     [mp3_hdr_mode_ext], eax
   531 00000422 F605[F0750000]10                        test    byte [cpuid_flags], 10h
   532 00000429 740E                                    jz      short .no_rdtsc_supported@
   533 0000042B 0F31                                    rdtsc
   534 0000042D 0105[00760000]                          add     [ttt], eax
   535 00000433 1115[04760000]                          adc     [ttt+4], edx
   536                                  
   537                                  .no_rdtsc_supported@:
   538 00000439 F8                                      clc
   539 0000043A C3                                      retn
   540                                  
   541                                  .fail_no_header:
   542 0000043B F605[F0750000]10                        test    byte [cpuid_flags], 10h
   543 00000442 740E                                    jz      short .no_rdtsc_supported@@
   544 00000444 0F31                                    rdtsc
   545 00000446 0105[00760000]                          add     [ttt], eax
   546 0000044C 1115[04760000]                          adc     [ttt+4], edx
   547                                  
   548                                  .no_rdtsc_supported@@:
   549 00000452 C705[449D0000]0000-                     mov     dword [mp3_src_frame_size], 0
   549 0000045A 0000               
   550 0000045C F9                                      stc
   551 0000045D C3                                      retn
   552                                  
   553                                  
   554                                  ; =============== S U B R O U T I N E =======================================
   555                                  
   556                                  
   557                                  mp3_bitstream_read_header_extra:
   558 0000045E F605[F0750000]10                        test    byte [cpuid_flags], 10h
   559 00000465 740E                                    jz      short .no_rdtsc_supported
   560 00000467 0F31                                    rdtsc
   561 00000469 2905[18760000]                          sub     [rdtsc_read_header_extra], eax
   562 0000046F 1915[1C760000]                          sbb     [rdtsc_read_header_extra+4], edx
   563                                  
   564                                  .no_rdtsc_supported:
   565 00000475 833D[509D0000]00                        cmp     dword [mp3_hdr_flag_crc], 0
   566 0000047C 7422                                    jz      short .without_crc
   567 0000047E 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 16
   568 00000480 C1E510                                  shl     ebp, 10h
   569 00000483 C1C010                                  rol     eax, 10h
   570 00000486 31E8                                    xor     eax, ebp
   571 00000488 80ED10                                  sub     ch, 10h
   572 0000048B 7913                                    jns     short .without_crc
   573 0000048D 88E9                                    mov     cl, ch          ; mp3mac_collect_more
   574 0000048F 80C510                                  add     ch, 10h
   575 00000492 D3C5                                    rol     ebp, cl
   576 00000494 668B2E                                  mov     bp, [esi]
   577 00000497 83C602                                  add     esi, 2
   578 0000049A 66C1CD08                                ror     bp, 8
   579 0000049E D3CD                                    ror     ebp, cl
   580                                  
   581                                  .without_crc:
   582 000004A0 833D[8C9D0000]00                        cmp     dword [mp3_hdr_flag_lsf], 0
   583 000004A7 745B                                    jz      short .pre_lsf_zero
   584 000004A9 C705[58F40000]0900-                     mov     dword [mp3_num_compress_bits], 9
   584 000004B1 0000               
   585 000004B3 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 8
   586 000004B5 C1E508                                  shl     ebp, 8
   587 000004B8 C1C008                                  rol     eax, 8
   588 000004BB 31E8                                    xor     eax, ebp
   589 000004BD 80ED08                                  sub     ch, 8
   590 000004C0 7913                                    jns     short .without_crc@
   591 000004C2 88E9                                    mov     cl, ch
   592 000004C4 80C510                                  add     ch, 10h
   593 000004C7 D3C5                                    rol     ebp, cl
   594 000004C9 668B2E                                  mov     bp, [esi]
   595 000004CC 83C602                                  add     esi, 2
   596 000004CF 66C1CD08                                ror     bp, 8
   597 000004D3 D3CD                                    ror     ebp, cl
   598                                  
   599                                  .without_crc@:
   600 000004D5 A3[54F40000]                            mov     [mp3_main_data_begin], eax
   601 000004DA 8A0D[689D0000]                          mov     cl, byte [mp3_src_num_channels]
   602 000004E0 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
   603 000004E2 D3E5                                    shl     ebp, cl
   604 000004E4 D3C0                                    rol     eax, cl
   605 000004E6 31E8                                    xor     eax, ebp
   606 000004E8 28CD                                    sub     ch, cl
   607 000004EA 7913                                    jns     short .without_crc@@
   608 000004EC 88E9                                    mov     cl, ch
   609 000004EE 80C510                                  add     ch, 10h
   610 000004F1 D3C5                                    rol     ebp, cl
   611 000004F3 668B2E                                  mov     bp, [esi]
   612 000004F6 83C602                                  add     esi, 2
   613 000004F9 66C1CD08                                ror     bp, 8
   614 000004FD D3CD                                    ror     ebp, cl
   615                                  
   616                                  .without_crc@@:
   617 000004FF E9A1000000                              jmp     .pre_lsf_done
   618                                  
   619                                  .pre_lsf_zero:
   620 00000504 C705[58F40000]0400-                     mov     dword [mp3_num_compress_bits], 4
   620 0000050C 0000               
   621 0000050E 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 9
   622 00000510 C1E509                                  shl     ebp, 9
   623 00000513 C1C009                                  rol     eax, 9
   624 00000516 31E8                                    xor     eax, ebp
   625 00000518 80ED09                                  sub     ch, 9
   626 0000051B 7913                                    jns     short .without_crc@@@
   627 0000051D 88E9                                    mov     cl, ch
   628 0000051F 80C510                                  add     ch, 10h
   629 00000522 D3C5                                    rol     ebp, cl
   630 00000524 668B2E                                  mov     bp, [esi]
   631 00000527 83C602                                  add     esi, 2
   632 0000052A 66C1CD08                                ror     bp, 8
   633 0000052E D3CD                                    ror     ebp, cl
   634                                  
   635                                  .without_crc@@@:
   636 00000530 A3[54F40000]                            mov     [mp3_main_data_begin], eax
   637 00000535 8A0D[689D0000]                          mov     cl, byte [mp3_src_num_channels]
   638 0000053B D0E1                                    shl     cl, 1           ; 1,2 --> 2,4
   639 0000053D 80F107                                  xor     cl, 7           ;     --> 5,3
   640 00000540 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
   641 00000542 D3E5                                    shl     ebp, cl
   642 00000544 D3C0                                    rol     eax, cl
   643 00000546 31E8                                    xor     eax, ebp
   644 00000548 28CD                                    sub     ch, cl
   645 0000054A 7913                                    jns     short .without_crc@@@@
   646 0000054C 88E9                                    mov     cl, ch
   647 0000054E 80C510                                  add     ch, 10h
   648 00000551 D3C5                                    rol     ebp, cl
   649 00000553 668B2E                                  mov     bp, [esi]
   650 00000556 83C602                                  add     esi, 2
   651 00000559 66C1CD08                                ror     bp, 8
   652 0000055D D3CD                                    ror     ebp, cl
   653                                  
   654                                  .without_crc@@@@:
   655 0000055F 8B15[689D0000]                          mov     edx, [mp3_src_num_channels]
   656 00000565 BB[60F40000]                            mov     ebx, mp3_granules
   657                                  
   658                                  .pre_channel_lop:
   659 0000056A C7432800000000                          mov     dword [ebx+40], 0 ; [ebx+$mp3gr_scfsi]
   660 00000571 81C3A0090000                            add     ebx, 2464       ; $mp3gr_entrysiz
   661 00000577 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 4
   662 00000579 C1E504                                  shl     ebp, 4
   663 0000057C C1C004                                  rol     eax, 4
   664 0000057F 31E8                                    xor     eax, ebp
   665 00000581 80ED04                                  sub     ch, 4
   666 00000584 7913                                    jns     short .without_crc@@@@@
   667 00000586 88E9                                    mov     cl, ch
   668 00000588 80C510                                  add     ch, 10h
   669 0000058B D3C5                                    rol     ebp, cl
   670 0000058D 668B2E                                  mov     bp, [esi]
   671 00000590 83C602                                  add     esi, 2
   672 00000593 66C1CD08                                ror     bp, 8
   673 00000597 D3CD                                    ror     ebp, cl
   674                                  
   675                                  .without_crc@@@@@:
   676 00000599 894328                                  mov     [ebx+28h], eax  ; [ebx+$mp3gr_scfsi]
   677 0000059C 81C3A0090000                            add     ebx, 2464       ; $mp3gr_entrysiz
   678 000005A2 4A                                      dec     edx
   679 000005A3 75C5                                    jnz     short .pre_channel_lop
   680                                  
   681                                  .pre_lsf_done:
   682 000005A5 A1[5CF40000]                            mov     eax, [mp3_nb_granules]
   683 000005AA 6BC012                                  imul    eax, 12h
   684 000005AD A3[809D0000]                            mov     [mp3_nb_frames], eax
   685 000005B2 A1[809D0000]                            mov     eax, [mp3_nb_frames]
   686 000005B7 0FAF05[6C9D0000]                        imul    eax, [mp3_output_num_channels]
   687 000005BE 0FAF05[749D0000]                        imul    eax, [mp3_bytes_per_sample]
   688 000005C5 C1E005                                  shl     eax, 5
   689 000005C8 8A0D[EE750000]                          mov     cl, [option_rate_shift]
   690 000005CE D3E8                                    shr     eax, cl
   691 000005D0 A3[34F40000]                            mov     [mp3_samples_output_size], eax
   692 000005D5 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_read_header_extra
   693 000005DC 740E                                    jz      short .no_rdtsc_supported@
   694 000005DE 0F31                                    rdtsc
   695 000005E0 0105[18760000]                          add     [rdtsc_read_header_extra], eax
   696 000005E6 1115[1C760000]                          adc     [rdtsc_read_header_extra+4], edx
   697                                  
   698                                  .no_rdtsc_supported@:
   699 000005EC C3                                      retn
   700                                  
   701                                  
   702                                  ; =============== S U B R O U T I N E =======================================
   703                                  
   704                                  
   705                                  mp3_bitstream_read_granules:
   706 000005ED F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_read_granule
   707 000005F4 740E                                    jz      short .no_rdtsc_supported
   708 000005F6 0F31                                    rdtsc
   709 000005F8 2905[30760000]                          sub     [rdtsc_read_granule], eax
   710 000005FE 1915[34760000]                          sbb     [rdtsc_read_granule+4], edx
   711                                  
   712                                  .no_rdtsc_supported:
   713 00000604 8925[541F0500]                          mov	[_@@saved_sp], esp
   714 0000060A C705[581F0500]0000-                     mov	dword [mp3_main_data_siz], 0
   714 00000612 0000               
   715 00000614 C705[40F40000]0000-                     mov	dword [mp3_curr_granule], 0
   715 0000061C 0000               
   716 0000061E BB[60F40000]                            mov	ebx, mp3_granules
   717                                  
   718                                  .hdr_granule_lop:
   719 00000623 53                                      push    ebx
   720 00000624 C705[3CF40000]0000-                     mov     dword [mp3_curr_channel], 0
   720 0000062C 0000               
   721                                  
   722                                  .hdr_channel_lop:
   723 0000062E 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 12
   724 00000630 C1E50C                                  shl     ebp, 12
   725 00000633 C1C00C                                  rol     eax, 12
   726 00000636 31E8                                    xor     eax, ebp
   727 00000638 80ED0C                                  sub     ch, 12
   728 0000063B 7913                                    jns     short .without_crc
   729 0000063D 88E9                                    mov     cl, ch
   730 0000063F 80C510                                  add     ch, 16
   731 00000642 D3C5                                    rol     ebp, cl
   732 00000644 668B2E                                  mov     bp, [esi]
   733 00000647 83C602                                  add     esi, 2
   734 0000064A 66C1CD08                                ror     bp, 8
   735 0000064E D3CD                                    ror     ebp, cl
   736                                  
   737                                  .without_crc:
   738 00000650 8B15[581F0500]                          mov     edx, [mp3_main_data_siz]
   739 00000656 8903                                    mov     [ebx], eax
   740 00000658 895304                                  mov     [ebx+4], edx
   741 0000065B 01D0                                    add     eax, edx
   742 0000065D 894308                                  mov     [ebx+8], eax
   743 00000660 A3[581F0500]                            mov     [mp3_main_data_siz], eax
   744 00000665 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 9
   745 00000667 C1E509                                  shl     ebp, 9
   746 0000066A C1C009                                  rol     eax, 9
   747 0000066D 31E8                                    xor     eax, ebp
   748 0000066F 80ED09                                  sub     ch, 9
   749 00000672 7913                                    jns     short .without_crc@
   750 00000674 88E9                                    mov     cl, ch
   751 00000676 80C510                                  add     ch, 10h
   752 00000679 D3C5                                    rol     ebp, cl
   753 0000067B 668B2E                                  mov     bp, [esi]
   754 0000067E 83C602                                  add     esi, 2
   755 00000681 66C1CD08                                ror     bp, 8
   756 00000685 D3CD                                    ror     ebp, cl
   757                                  
   758                                  .without_crc@:
   759 00000687 89430C                                  mov     [ebx+12], eax   ; [ebx+$mp3gr_big_values]
   760 0000068A 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 8
   761 0000068C C1E508                                  shl     ebp, 8
   762 0000068F C1C008                                  rol     eax, 8
   763 00000692 31E8                                    xor     eax, ebp
   764 00000694 80ED08                                  sub     ch, 8
   765 00000697 7913                                    jns     short .without_crc@@
   766 00000699 88E9                                    mov     cl, ch
   767 0000069B 80C510                                  add     ch, 10h
   768 0000069E D3C5                                    rol     ebp, cl
   769 000006A0 668B2E                                  mov     bp, [esi]
   770 000006A3 83C602                                  add     esi, 2
   771 000006A6 66C1CD08                                ror     bp, 8
   772 000006AA D3CD                                    ror     ebp, cl
   773                                  
   774                                  .without_crc@@:
   775 000006AC 05BE000000                              add	eax, 190        ; 400-210
   776 000006B1 833D[849D0000]01                        cmp	dword [mp3_hdr_mode_val], 1
   777 000006B8 750F                                    jnz	short .not_ms_stereo
   778 000006BA F705[889D0000]0200-                     test	dword [mp3_hdr_mode_ext], 2
   778 000006C2 0000               
   779 000006C4 7403                                    jz	short .not_ms_stereo
   780 000006C6 83E802                                  sub	eax, 2
   781                                  
   782                                  .not_ms_stereo:
   783 000006C9 894310                                  mov     [ebx+16], eax   ; [ebx+$mp3gr_global_gain]
   784 000006CC 8A0D[58F40000]                          mov     cl, byte [mp3_num_compress_bits]
   785 000006D2 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
   786 000006D4 D3E5                                    shl     ebp, cl
   787 000006D6 D3C0                                    rol     eax, cl
   788 000006D8 31E8                                    xor     eax, ebp
   789 000006DA 28CD                                    sub     ch, cl
   790 000006DC 7913                                    jns     short .without_crc@@@
   791 000006DE 88E9                                    mov     cl, ch
   792 000006E0 80C510                                  add     ch, 10h
   793 000006E3 D3C5                                    rol     ebp, cl
   794 000006E5 668B2E                                  mov     bp, [esi]
   795 000006E8 83C602                                  add     esi, 2
   796 000006EB 66C1CD08                                ror     bp, 8
   797 000006EF D3CD                                    ror     ebp, cl
   798                                  
   799                                  .without_crc@@@:
   800 000006F1 894314                                  mov     [ebx+20], eax   ; [ebx+$mp3gr_scalefac_compress]
   801 000006F4 FECD                                    dec     ch              ; mp3mac_get_bit_to_cy
   802                                                                          ; dec mp3_colNN
   803 000006F6 D1E5                                    shl     ebp, 1          ; shl mp3_col32,1 ; cy=data
   804 000006F8 0F834F010000                            jnb     .no_blocksplit
   805 000006FE 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 2
   806 00000700 C1E502                                  shl     ebp, 2
   807 00000703 C1C002                                  rol     eax, 2
   808 00000706 31E8                                    xor     eax, ebp
   809 00000708 80ED02                                  sub     ch, 2
   810 0000070B 7913                                    jns     short .without_crc@@@@
   811 0000070D 88E9                                    mov     cl, ch
   812 0000070F 80C510                                  add     ch, 10h
   813 00000712 D3C5                                    rol     ebp, cl
   814 00000714 668B2E                                  mov     bp, [esi]
   815 00000717 83C602                                  add     esi, 2
   816 0000071A 66C1CD08                                ror     bp, 8
   817 0000071E D3CD                                    ror     ebp, cl
   818                                  
   819                                  .without_crc@@@@:
   820 00000720 83F800                                  cmp     eax, 0
   821 00000723 0F847B030000                            jz      .error
   822 00000729 89432C                                  mov     [ebx+44], eax   ; [ebx+$mp3gr_block_type]
   823 0000072C 83F802                                  cmp     eax, 2
   824 0000072F B812000000                              mov     eax, 18         ; 36/2 ; region_size (default)
   825 00000734 741C                                    jz      short .this_region_size
   826 00000736 833D[609D0000]02                        cmp     dword [mp3_hdr_sample_rate_index], 2
   827 0000073D 7613                                    jbe     short .this_region_size
   828 0000073F B81B000000                              mov     eax, 27         ; 54/2 ; region_size
   829 00000744 833D[609D0000]08                        cmp     dword [mp3_hdr_sample_rate_index], 8
   830 0000074B 7505                                    jnz     short .this_region_size
   831 0000074D B836000000                              mov     eax, 54         ; 108/2 ; region_size (for rate=8)
   832                                  
   833                                  .this_region_size:
   834 00000752 894350                                  mov     [ebx+80], eax   ; [ebx+$mp3gr_region_size+0*4]
   835 00000755 C7435420010000                          mov     dword [ebx+84], 288 ; [ebx+$mp3gr_region_size+1*4],576/2
   836 0000075C C7435820010000                          mov     dword [ebx+88], 288 ; [ebx+$mp3gr_region_size+2*4],576/2
   837 00000763 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 1
   838 00000765 D1E5                                    shl     ebp, 1
   839 00000767 D1C0                                    rol     eax, 1
   840 00000769 31E8                                    xor     eax, ebp
   841 0000076B 80ED01                                  sub     ch, 1
   842 0000076E 7913                                    jns     short .without_crc@@@@@
   843 00000770 88E9                                    mov     cl, ch
   844 00000772 80C510                                  add     ch, 10h
   845 00000775 D3C5                                    rol     ebp, cl
   846 00000777 668B2E                                  mov     bp, [esi]
   847 0000077A 83C602                                  add     esi, 2
   848 0000077D 66C1CD08                                ror     bp, 8
   849 00000781 D3CD                                    ror     ebp, cl
   850                                  
   851                                  .without_crc@@@@@:
   852 00000783 894330                                  mov     [ebx+48], eax   ; [ebx+$mp3gr_switch_point]
   853 00000786 89E8                                    mov     eax, ebp        ; IRP nn,0,1 ; only 0..1 for blocksplit
   854 00000788 C1E505                                  shl     ebp, 5          ; mp3mac_get_n_bits 5
   855 0000078B C1C005                                  rol     eax, 5
   856 0000078E 31E8                                    xor     eax, ebp
   857 00000790 80ED05                                  sub     ch, 5
   858 00000793 7913                                    jns     short .without_crc@@@@@@
   859 00000795 88E9                                    mov     cl, ch
   860 00000797 80C510                                  add     ch, 10h
   861 0000079A D3C5                                    rol     ebp, cl
   862 0000079C 668B2E                                  mov     bp, [esi]
   863 0000079F 83C602                                  add     esi, 2
   864 000007A2 66C1CD08                                ror     bp, 8
   865 000007A6 D3CD                                    ror     ebp, cl
   866                                  
   867                                  .without_crc@@@@@@:
   868 000007A8 894338                                  mov     [ebx+56], eax   ; [ebx+$mp3gr_table_select+nn*4] ; nn=0
   869 000007AB 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 5
   870 000007AD C1E505                                  shl     ebp, 5
   871 000007B0 C1C005                                  rol     eax, 5
   872 000007B3 31E8                                    xor     eax, ebp
   873 000007B5 80ED05                                  sub     ch, 5
   874 000007B8 7913                                    jns     short .without_crc_@@@@
   875 000007BA 88E9                                    mov     cl, ch
   876 000007BC 80C510                                  add     ch, 10h
   877 000007BF D3C5                                    rol     ebp, cl
   878 000007C1 668B2E                                  mov     bp, [esi]
   879 000007C4 83C602                                  add     esi, 2
   880 000007C7 66C1CD08                                ror     bp, 8
   881 000007CB D3CD                                    ror     ebp, cl
   882                                  
   883                                  .without_crc_@@@@:
   884 000007CD 89433C                                  mov     [ebx+60], eax   ; [ebx+$mp3gr_table_select+nn*4] ; nn=1
   885 000007D0 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 5
   886 000007D2 C1E503                                  shl     ebp, 3          ; IRP nn,0,1,2
   887 000007D5 C1C003                                  rol     eax, 3          ; mp3mac_get_n_bits 3
   888 000007D8 31E8                                    xor     eax, ebp
   889 000007DA 80ED03                                  sub     ch, 3
   890 000007DD 7913                                    jns     short .without_crc_@@@@@
   891 000007DF 88E9                                    mov     cl, ch
   892 000007E1 80C510                                  add     ch, 10h
   893 000007E4 D3C5                                    rol     ebp, cl
   894 000007E6 668B2E                                  mov     bp, [esi]
   895 000007E9 83C602                                  add     esi, 2
   896 000007EC 66C1CD08                                ror     bp, 8
   897 000007F0 D3CD                                    ror     ebp, cl
   898                                  
   899                                  .without_crc_@@@@@:
   900 000007F2 C1E003                                  shl     eax, 3
   901 000007F5 894344                                  mov     [ebx+68], eax   ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=0
   902 000007F8 89E8                                    mov     eax, ebp
   903 000007FA C1E503                                  shl     ebp, 3
   904 000007FD C1C003                                  rol     eax, 3
   905 00000800 31E8                                    xor     eax, ebp
   906 00000802 80ED03                                  sub     ch, 3
   907 00000805 7913                                    jns     short .without_crc_@@@@@@
   908 00000807 88E9                                    mov     cl, ch
   909 00000809 80C510                                  add     ch, 10h
   910 0000080C D3C5                                    rol     ebp, cl
   911 0000080E 668B2E                                  mov     bp, [esi]
   912 00000811 83C602                                  add     esi, 2
   913 00000814 66C1CD08                                ror     bp, 8
   914 00000818 D3CD                                    ror     ebp, cl
   915                                  
   916                                  .without_crc_@@@@@@:
   917 0000081A C1E003                                  shl     eax, 3
   918 0000081D 894348                                  mov     [ebx+72], eax   ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=1
   919 00000820 89E8                                    mov     eax, ebp
   920 00000822 C1E503                                  shl     ebp, 3
   921 00000825 C1C003                                  rol     eax, 3
   922 00000828 31E8                                    xor     eax, ebp
   923 0000082A 80ED03                                  sub     ch, 3
   924 0000082D 7913                                    jns     short .without_crc_@@@@@@@
   925 0000082F 88E9                                    mov     cl, ch
   926 00000831 80C510                                  add     ch, 10h
   927 00000834 D3C5                                    rol     ebp, cl
   928 00000836 668B2E                                  mov     bp, [esi]
   929 00000839 83C602                                  add     esi, 2
   930 0000083C 66C1CD08                                ror     bp, 8
   931 00000840 D3CD                                    ror     ebp, cl
   932                                  
   933                                  .without_crc_@@@@@@@:
   934 00000842 C1E003                                  shl     eax, 3
   935 00000845 89434C                                  mov     [ebx+76], eax   ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=2
   936 00000848 E910010000                              jmp     .blocksplit_done
   937                                  
   938                                  .no_blocksplit:                       
   939 0000084D C7432C00000000                          mov     dword [ebx+44], 0 ; [ebx+$mp3gr_block_type]
   940 00000854 C7433000000000                          mov     dword [ebx+48], 0 ; [ebx+$mp3gr_switch_point]
   941 0000085B 89E8                                    mov     eax, ebp        ; IRP nn,0,1,2 ; range 0..2 when non-blocksplit
   942 0000085D C1E505                                  shl     ebp, 5          ; mp3mac_get_n_bits 5
   943 00000860 C1C005                                  rol     eax, 5
   944 00000863 31E8                                    xor     eax, ebp
   945 00000865 80ED05                                  sub     ch, 5
   946 00000868 7913                                    jns     short .@_without_crc
   947 0000086A 88E9                                    mov     cl, ch
   948 0000086C 80C510                                  add     ch, 10h
   949 0000086F D3C5                                    rol     ebp, cl
   950 00000871 668B2E                                  mov     bp, [esi]
   951 00000874 83C602                                  add     esi, 2
   952 00000877 66C1CD08                                ror     bp, 8
   953 0000087B D3CD                                    ror     ebp, cl
   954                                  
   955                                  .@_without_crc:
   956 0000087D 894338                                  mov     [ebx+56], eax   ; [ebx+$mp3gr_table_select+nn*4] ; nn=0
   957 00000880 89E8                                    mov     eax, ebp
   958 00000882 C1E505                                  shl     ebp, 5
   959 00000885 C1C005                                  rol     eax, 5
   960 00000888 31E8                                    xor     eax, ebp
   961 0000088A 80ED05                                  sub     ch, 5
   962 0000088D 7913                                    jns     short .@_without_crc_@
   963 0000088F 88E9                                    mov     cl, ch
   964 00000891 80C510                                  add     ch, 10h
   965 00000894 D3C5                                    rol     ebp, cl
   966 00000896 668B2E                                  mov     bp, [esi]
   967 00000899 83C602                                  add     esi, 2
   968 0000089C 66C1CD08                                ror     bp, 8
   969 000008A0 D3CD                                    ror     ebp, cl
   970                                  
   971                                  .@_without_crc_@:
   972 000008A2 89433C                                  mov     [ebx+60], eax   ; [ebx+$mp3gr_table_select+nn*4] ; nn=1
   973 000008A5 89E8                                    mov     eax, ebp
   974 000008A7 C1E505                                  shl     ebp, 5
   975 000008AA C1C005                                  rol     eax, 5
   976 000008AD 31E8                                    xor     eax, ebp
   977 000008AF 80ED05                                  sub     ch, 5
   978 000008B2 7913                                    jns     short .@_without_crc_@@
   979 000008B4 88E9                                    mov     cl, ch
   980 000008B6 80C510                                  add     ch, 10h
   981 000008B9 D3C5                                    rol     ebp, cl
   982 000008BB 668B2E                                  mov     bp, [esi]
   983 000008BE 83C602                                  add     esi, 2
   984 000008C1 66C1CD08                                ror     bp, 8
   985 000008C5 D3CD                                    ror     ebp, cl
   986                                  
   987                                  .@_without_crc_@@:
   988 000008C7 894340                                  mov     [ebx+64], eax   ; [ebx+$mp3gr_table_select+nn*4] ; nn=2
   989 000008CA 89E8                                    mov     eax, ebp
   990 000008CC C1E504                                  shl     ebp, 4
   991 000008CF C1C004                                  rol     eax, 4
   992 000008D2 31E8                                    xor     eax, ebp
   993 000008D4 80ED04                                  sub     ch, 4
   994 000008D7 7913                                    jns     short .@_without_crc@@@
   995 000008D9 88E9                                    mov     cl, ch
   996 000008DB 80C510                                  add     ch, 10h
   997 000008DE D3C5                                    rol     ebp, cl
   998 000008E0 668B2E                                  mov     bp, [esi]
   999 000008E3 83C602                                  add     esi, 2
  1000 000008E6 66C1CD08                                ror     bp, 8
  1001 000008EA D3CD                                    ror     ebp, cl
  1002                                  
  1003                                  .@_without_crc@@@:
  1004 000008EC 40                                      inc     eax
  1005 000008ED A3[4C1F0500]                            mov     [_@@region_address0], eax
  1006 000008F2 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 3
  1007 000008F4 C1E503                                  shl     ebp, 3
  1008 000008F7 C1C003                                  rol     eax, 3
  1009 000008FA 31E8                                    xor     eax, ebp
  1010 000008FC 80ED03                                  sub     ch, 3
  1011 000008FF 7913                                    jns     short .@_without_crc@@@@
  1012 00000901 88E9                                    mov     cl, ch
  1013 00000903 80C510                                  add     ch, 10h
  1014 00000906 D3C5                                    rol     ebp, cl
  1015 00000908 668B2E                                  mov     bp, [esi]
  1016 0000090B 83C602                                  add     esi, 2
  1017 0000090E 66C1CD08                                ror     bp, 8
  1018 00000912 D3CD                                    ror     ebp, cl
  1019                                  
  1020                                  .@_without_crc@@@@:
  1021 00000914 40                                      inc     eax
  1022 00000915 0305[4C1F0500]                          add     eax, [_@@region_address0]
  1023 0000091B A3[501F0500]                            mov     [_@@region_address1], eax
  1024 00000920 A1[609D0000]                            mov     eax, [mp3_hdr_sample_rate_index]
  1025 00000925 C1E005                                  shl     eax, 5
  1026 00000928 0305[4C1F0500]                          add     eax, [_@@region_address0]
  1027 0000092E 0FB78400[60D70100]                      movzx   eax, word [mp3_band_index_long+eax*2]
  1028 00000936 D1E8                                    shr     eax, 1
  1029 00000938 894350                                  mov     [ebx+80], eax   ; [ebx+$mp3gr_region_size+0*4]
  1030 0000093B A1[609D0000]                            mov     eax, [mp3_hdr_sample_rate_index]
  1031 00000940 C1E005                                  shl     eax, 5
  1032 00000943 0305[501F0500]                          add     eax, [_@@region_address1]
  1033 00000949 0FB78400[60D70100]                      movzx   eax, word [mp3_band_index_long+eax*2]
  1034 00000951 D1E8                                    shr     eax, 1
  1035 00000953 894354                                  mov     [ebx+84], eax   ; [ebx+$mp3gr_region_size+1*4]
  1036 00000956 C7435820010000                          mov     dword [ebx+88], 288 ; [ebx+$mp3gr_region_size+2*4],576/2
  1037                                  
  1038                                  .blocksplit_done:
  1039 0000095D 8D7B50                                  lea     edi, [ebx+80]   ; [ebx+$mp3gr_region_size+0]
  1040 00000960 31D2                                    xor     edx, edx
  1041 00000962 B103                                    mov     cl, 3
  1042                                  
  1043                                  .trunc_region_size_lop:
  1044 00000964 8B07                                    mov     eax, [edi]
  1045 00000966 3B430C                                  cmp     eax, [ebx+12]   ; [ebx+$mp3gr_big_values]
  1046 00000969 7603                                    jbe     short .trunc_region_size_this
  1047 0000096B 8B430C                                  mov     eax, [ebx+12]
  1048                                  
  1049                                  .trunc_region_size_this:
  1050 0000096E 29D0                                    sub     eax, edx
  1051 00000970 8907                                    mov     [edi], eax
  1052 00000972 01C2                                    add     edx, eax
  1053 00000974 83C704                                  add     edi, 4
  1054 00000977 FEC9                                    dec     cl
  1055 00000979 75E9                                    jnz     short .trunc_region_size_lop
  1056 0000097B C7431C0D000000                          mov     dword [ebx+28], 13 ; [ebx+$mp3gr_short_start]
  1057 00000982 C7432016000000                          mov     dword [ebx+32], 22 ; [ebx+$mp3gr_long_end]
  1058 00000989 837B2C02                                cmp     dword [ebx+44], 2 ; [ebx+$mp3gr_block_type]
  1059 0000098D 7549                                    jnz     short .these_band_indices
  1060 0000098F C7431C00000000                          mov     dword [ebx+28], 0 ; [ebx+$mp3gr_short_start]
  1061 00000996 C7432000000000                          mov     dword [ebx+32], 0 ; [ebx+$mp3gr_long_end]
  1062 0000099D 837B3000                                cmp     dword [ebx+48], 0 ; [ebx+$mp3gr_switch_point]
  1063 000009A1 7435                                    jz      short .these_band_indices
  1064 000009A3 C7431C02000000                          mov     dword [ebx+28], 2 ; [ebx+$mp3gr_short_start]
  1065 000009AA C7432004000000                          mov     dword [ebx+32], 4 ; [ebx+$mp3gr_long_end]
  1066 000009B1 833D[609D0000]08                        cmp     dword [mp3_hdr_sample_rate_index], 8
  1067 000009B8 741E                                    jz      short .these_band_indices
  1068 000009BA 833D[609D0000]02                        cmp     dword [mp3_hdr_sample_rate_index], 2
  1069 000009C1 C7431C03000000                          mov     dword [ebx+28], 3 ; [ebx+$mp3gr_short_start]
  1070 000009C8 C7432008000000                          mov     dword [ebx+32], 8 ; [ebx+$mp3gr_long_end]
  1071 000009CF 7607                                    jbe     short .these_band_indices
  1072 000009D1 C7432006000000                          mov     dword [ebx+32], 6 ; [ebx+$mp3gr_long_end]
  1073                                  
  1074                                  .these_band_indices:
  1075 000009D8 31C0                                    xor     eax, eax
  1076 000009DA 833D[8C9D0000]00                        cmp     dword [mp3_hdr_flag_lsf], 0
  1077 000009E1 7520                                    jnz     short .no_preflag
  1078 000009E3 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 1
  1079 000009E5 D1E5                                    shl     ebp, 1
  1080 000009E7 D1C0                                    rol     eax, 1
  1081 000009E9 31E8                                    xor     eax, ebp
  1082 000009EB 80ED01                                  sub     ch, 1
  1083 000009EE 7913                                    jns     short .no_preflag
  1084 000009F0 88E9                                    mov     cl, ch
  1085 000009F2 80C510                                  add     ch, 10h
  1086 000009F5 D3C5                                    rol     ebp, cl
  1087 000009F7 668B2E                                  mov     bp, [esi]
  1088 000009FA 83C602                                  add     esi, 2
  1089 000009FD 66C1CD08                                ror     bp, 8
  1090 00000A01 D3CD                                    ror     ebp, cl
  1091                                  
  1092                                  .no_preflag:
  1093 00000A03 894318                                  mov     [ebx+24], eax   ; [ebx+$mp3gr_preflag]
  1094 00000A06 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 1
  1095 00000A08 D1E5                                    shl     ebp, 1
  1096 00000A0A D1C0                                    rol     eax, 1
  1097 00000A0C 31E8                                    xor     eax, ebp
  1098 00000A0E 80ED01                                  sub     ch, 1
  1099 00000A11 7913                                    jns     short .@_without_crc@@@@@
  1100 00000A13 88E9                                    mov     cl, ch
  1101 00000A15 80C510                                  add     ch, 10h
  1102 00000A18 D3C5                                    rol     ebp, cl
  1103 00000A1A 668B2E                                  mov     bp, [esi]
  1104 00000A1D 83C602                                  add     esi, 2
  1105 00000A20 66C1CD08                                ror     bp, 8
  1106 00000A24 D3CD                                    ror     ebp, cl
  1107                                  
  1108                                  .@_without_crc@@@@@:
  1109 00000A26 40                                      inc     eax
  1110 00000A27 894334                                  mov     [ebx+52], eax   ; [ebx+$mp3gr_scalefac_scale]
  1111 00000A2A 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 1
  1112 00000A2C D1E5                                    shl     ebp, 1
  1113 00000A2E D1C0                                    rol     eax, 1
  1114 00000A30 31E8                                    xor     eax, ebp
  1115 00000A32 80ED01                                  sub     ch, 1
  1116 00000A35 7913                                    jns     short .@_without_crc@@@@@@
  1117 00000A37 88E9                                    mov     cl, ch
  1118 00000A39 80C510                                  add     ch, 10h
  1119 00000A3C D3C5                                    rol     ebp, cl
  1120 00000A3E 668B2E                                  mov     bp, [esi]
  1121 00000A41 83C602                                  add     esi, 2
  1122 00000A44 66C1CD08                                ror     bp, 8
  1123 00000A48 D3CD                                    ror     ebp, cl
  1124                                  
  1125                                  .@_without_crc@@@@@@: 
  1126 00000A4A 83C010                                  add     eax, 10h        ; table 10h..11h (quad_vlc)
  1127 00000A4D 894324                                  mov     [ebx+36], eax   ; [ebx+$mp3gr_count1table_select]
  1128 00000A50 81C340130000                            add     ebx, 4928       ; $mp3gr_entrysiz*2
  1129 00000A56 FF05[3CF40000]                          inc     dword [mp3_curr_channel]
  1130 00000A5C A1[3CF40000]                            mov     eax, [mp3_curr_channel]
  1131 00000A61 3B05[689D0000]                          cmp     eax, [mp3_src_num_channels]
  1132 00000A67 0F82C1FBFFFF                            jb      .hdr_channel_lop
  1133 00000A6D 5B                                      pop     ebx
  1134 00000A6E 81C3A0090000                            add     ebx, 2464       ; $mp3gr_entrysiz
  1135 00000A74 FF05[40F40000]                          inc     dword [mp3_curr_granule]
  1136 00000A7A A1[40F40000]                            mov     eax, [mp3_curr_granule]
  1137 00000A7F 3B05[5CF40000]                          cmp     eax, [mp3_nb_granules]
  1138 00000A85 0F8298FBFFFF                            jb      .hdr_granule_lop
  1139 00000A8B F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_read_granule
  1140 00000A92 740E                                    jz      short .no_rdtsc_supported@
  1141 00000A94 0F31                                    rdtsc
  1142 00000A96 0105[30760000]                          add     [rdtsc_read_granule], eax
  1143 00000A9C 1115[34760000]                          adc     [rdtsc_read_granule+4], edx
  1144                                  
  1145                                  .no_rdtsc_supported@:
  1146 00000AA2 F8                                      clc
  1147 00000AA3 C3                                      retn
  1148                                  
  1149                                  .error:
  1150 00000AA4 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_read_granule
  1151 00000AAB 740E                                    jz      short .no_rdtsc_supported@@
  1152 00000AAD 0F31                                    rdtsc
  1153 00000AAF 0105[30760000]                          add     [rdtsc_read_granule], eax
  1154 00000AB5 1115[34760000]                          adc     [rdtsc_read_granule+4], edx
  1155                                  
  1156                                  .no_rdtsc_supported@@:
  1157 00000ABB 8B25[541F0500]                          mov     esp, [_@@saved_sp]
  1158 00000AC1 F9                                      stc
  1159 00000AC2 C3                                      retn
  1160                                  
  1161                                  
  1162                                  ; =============== S U B R O U T I N E =======================================
  1163                                  
  1164                                  
  1165                                  mp3_bitstream_append_to_main_data_pool:
  1166 00000AC3 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_append_main
  1167 00000ACA 740E                                    jz      short .no_rdtsc_supported
  1168 00000ACC 0F31                                    rdtsc
  1169 00000ACE 2905[48760000]                          sub     [rdtsc_append_main], eax
  1170 00000AD4 1915[4C760000]                          sbb     [rdtsc_append_main+4], edx
  1171                                  
  1172                                  .no_rdtsc_supported:
  1173 00000ADA 8B0D[489D0000]                          mov     ecx, [mp3_src_frame_end]
  1174 00000AE0 29F1                                    sub     ecx, esi
  1175 00000AE2 0F8266020000                            jb      fatalunexpected
  1176 00000AE8 8B3D[3C9D0000]                          mov     edi, [main_data_pool_wr_ptr]
  1177 00000AEE 8D040F                                  lea     eax, [edi+ecx]
  1178 00000AF1 3D[3C9D0000]                            cmp     eax, main_data_pool_wr_ptr
  1179 00000AF6 7616                                    jbe     short .pool_inrange
  1180 00000AF8 51                                      push    ecx
  1181 00000AF9 56                                      push    esi
  1182 00000AFA 8DB700FEFFFF                            lea     esi, [edi-200h]
  1183 00000B00 BF[3C8D0000]                            mov     edi, main_data_pool_start
  1184 00000B05 B980000000                              mov     ecx, 128
  1185 00000B0A F3A5                                    rep movsd
  1186 00000B0C 5E                                      pop     esi
  1187 00000B0D 59                                      pop     ecx
  1188                                  
  1189                                  .pool_inrange:
  1190 00000B0E 89F8                                    mov     eax, edi
  1191 00000B10 2B05[54F40000]                          sub     eax, [mp3_main_data_begin]
  1192 00000B16 F3A4                                    rep movsb
  1193 00000B18 893D[3C9D0000]                          mov     [main_data_pool_wr_ptr], edi
  1194 00000B1E 3D[3C8D0000]                            cmp     eax, main_data_pool_start
  1195 00000B23 7828                                    js      short .below_pool_start
  1196 00000B25 A3[48F40000]                            mov     [mp3_bitstream_start], eax
  1197                                                  ; 22/10/2024
  1198                                  		;mov    eax, 0
  1199 00000B2A 8B35[48F40000]                          mov     esi, [mp3_bitstream_start] ; mp3mac_bitstream_set_position
  1200                                                  ;mov    cl, al
  1201                                                  ;shr    eax, 3
  1202                                                  ;and    cl, 7
  1203                                                  ;add    esi, eax
  1204 00000B30 E8C7F6FFFF                              call    mp3_recollect_bits
  1205                                                  ;mov    eax, ebp        ; mp3mac_get_n_bits cl
  1206                                                  ;shl    ebp, cl
  1207                                                  ;rol    eax, cl
  1208                                                  ;xor    eax, ebp
  1209                                                  ;sub    ch, cl
  1210                                                  ;jns    short .cont
  1211                                                  ;mov    cl, ch          ; mp3mac_collect_more
  1212                                                  ;add    ch, 10h
  1213                                                  ;rol    ebp, cl
  1214                                                  ;mov    bp, [esi]
  1215                                                  ;add    esi, 2
  1216                                                  ;ror    bp, 8
  1217                                                  ;ror    ebp, cl
  1218                                  
  1219                                  .cont:
  1220 00000B35 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_append_main
  1221 00000B3C 740E                                    jz      short .no_rdtsc_supported@
  1222 00000B3E 0F31                                    rdtsc
  1223 00000B40 0105[48760000]                          add     [rdtsc_append_main], eax
  1224 00000B46 1115[4C760000]                          adc     [rdtsc_append_main+4], edx
  1225                                  
  1226                                  .no_rdtsc_supported@:
  1227 00000B4C C3                                      retn
  1228                                  
  1229                                  .below_pool_start:
  1230 00000B4D C705[34F40000]0000-                     mov     dword [mp3_samples_output_size], 0
  1230 00000B55 0000               
  1231 00000B57 EBDC                                    jmp     short .cont
  1232                                  
  1233                                  
  1234                                  ; =============== S U B R O U T I N E =======================================
  1235                                  
  1236                                  
  1237                                  mp3_bitstream_read_scalefacs:
  1238 00000B59 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_read_scalefac
  1239 00000B60 740E                                    jz      short .no_rdtsc_supported
  1240 00000B62 0F31                                    rdtsc
  1241 00000B64 2905[60760000]                          sub     [rdtsc_read_scalefac], eax
  1242 00000B6A 1915[64760000]                          sbb     [rdtsc_read_scalefac+4], edx
  1243                                  
  1244                                  .no_rdtsc_supported:
  1245 00000B70 8D7B70                                  lea     edi, [ebx+112]  ; [ebx+$mp3gr_scale_factors]
  1246 00000B73 833D[8C9D0000]00                        cmp     dword [mp3_hdr_flag_lsf], 0
  1247 00000B7A 0F850D010000                            jnz     .body_lsf_nonzero
  1248 00000B80 8B4314                                  mov     eax, [ebx+20]   ; [ebx+$mp3gr_scalefac_compress]
  1249 00000B83 668B9400[407A0000]                      mov     dx, [mp3_slen_table+eax*2] ; slen[0,1]
  1250 00000B8B 837B2C02                                cmp     dword [ebx+44], 2 ; [ebx+$mp3gr_block_type]
  1251 00000B8F 757F                                    jnz     short .body_lsf_zero_non_type2
  1252 00000B91 53                                      push    ebx
  1253 00000B92 B012                                    mov     al, 18
  1254 00000B94 2A4330                                  sub     al, [ebx+48]    ; [ebx+$mp3gr_switch_point]
  1255 00000B97 88C3                                    mov     bl, al          ; @@get_bl_scalefacs_with_dl_bits 0
  1256 00000B99 80FA00                                  cmp     dl, 0
  1257 00000B9C 7428                                    jz      short .quickfill
  1258                                  
  1259                                  .scalefac_get_lop:
  1260 00000B9E 88D1                                    mov     cl, dl          ; LSB of edx, slen[i]
  1261 00000BA0 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
  1262 00000BA2 D3E5                                    shl     ebp, cl
  1263 00000BA4 D3C0                                    rol     eax, cl
  1264 00000BA6 31E8                                    xor     eax, ebp
  1265 00000BA8 28CD                                    sub     ch, cl
  1266 00000BAA 7913                                    jns     short .cont@
  1267 00000BAC 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1268 00000BAE 80C510                                  add     ch, 10h
  1269 00000BB1 D3C5                                    rol     ebp, cl
  1270 00000BB3 668B2E                                  mov     bp, [esi]
  1271 00000BB6 83C602                                  add     esi, 2
  1272 00000BB9 66C1CD08                                ror     bp, 8
  1273 00000BBD D3CD                                    ror     ebp, cl
  1274                                  
  1275                                  .cont@:
  1276 00000BBF AA                                      stosb
  1277 00000BC0 FECB                                    dec     bl
  1278 00000BC2 75DA                                    jnz     short .scalefac_get_lop
  1279 00000BC4 EB09                                    jmp     short .skip_quickfill
  1280                                  
  1281                                  .quickfill:
  1282 00000BC6 51                                      push    ecx
  1283 00000BC7 0FB6CB                                  movzx   ecx, bl
  1284 00000BCA B000                                    mov     al, 0           ; NO_INTENSITY_FLAG
  1285 00000BCC F3AA                                    rep stosb
  1286 00000BCE 59                                      pop     ecx
  1287                                  
  1288                                  .skip_quickfill:
  1289 00000BCF C1EA08                                  shr     edx, 8
  1290 00000BD2 B312                                    mov     bl, 18
  1291 00000BD4 80FA00                                  cmp     dl, 0           ; @@get_bl_scalefacs_with_dl_bits 0
  1292 00000BD7 7428                                    jz      short .quickfill@
  1293                                  
  1294                                  .scalefac_get_lop@:
  1295 00000BD9 88D1                                    mov     cl, dl
  1296 00000BDB 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
  1297 00000BDD D3E5                                    shl     ebp, cl
  1298 00000BDF D3C0                                    rol     eax, cl
  1299 00000BE1 31E8                                    xor     eax, ebp
  1300 00000BE3 28CD                                    sub     ch, cl
  1301 00000BE5 7913                                    jns     short .cont@@
  1302 00000BE7 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1303 00000BE9 80C510                                  add     ch, 10h
  1304 00000BEC D3C5                                    rol     ebp, cl
  1305 00000BEE 668B2E                                  mov     bp, [esi]
  1306 00000BF1 83C602                                  add     esi, 2
  1307 00000BF4 66C1CD08                                ror     bp, 8
  1308 00000BF8 D3CD                                    ror     ebp, cl
  1309                                  
  1310                                  .cont@@:
  1311 00000BFA AA                                      stosb
  1312 00000BFB FECB                                    dec     bl
  1313 00000BFD 75DA                                    jnz     short .scalefac_get_lop@
  1314 00000BFF EB09                                    jmp     short .skip_quickfill@
  1315                                  
  1316                                  .quickfill@:
  1317 00000C01 51                                      push    ecx
  1318 00000C02 0FB6CB                                  movzx   ecx, bl
  1319 00000C05 B000                                    mov     al, 0
  1320 00000C07 F3AA                                    rep stosb
  1321 00000C09 59                                      pop     ecx
  1322                                  
  1323                                  .skip_quickfill@:
  1324 00000C0A 5B                                      pop     ebx
  1325 00000C0B E914010000                              jmp     .body_lsf_zeropad
  1326                                  
  1327                                  .body_lsf_zero_non_type2:
  1328 00000C10 53                                      push    ebx
  1329 00000C11 C1CA08                                  ror     edx, 8
  1330 00000C14 88D6                                    mov     dh, dl          ; slen[0,1,2,3] = slen[0,0,1,1]
  1331 00000C16 C1C210                                  rol     edx, 16
  1332 00000C19 88F2                                    mov     dl, dh
  1333 00000C1B 8A4328                                  mov     al, [ebx+40]    ; [ebx+$mp3gr_scfsi]
  1334 00000C1E C0E004                                  shl     al, 4           ; move to upper 4bit
  1335 00000C21 A2[5C1F0500]                            mov     byte [_@@scfsi], al
  1336 00000C26 BB06050505                              mov     ebx, 5050506h   ; num[0..3]
  1337                                  
  1338                                  .body_lsf_zero_non_type2_lop:
  1339 00000C2B D025[5C1F0500]                          shl     byte [_@@scfsi], 1
  1340 00000C31 7238                                    jb      short .body_lsf_zero_non_type2_copy
  1341 00000C33 80FA00                                  cmp     dl, 0           ; @@get_bl_scalefacs_with_dl_bits 0
  1342 00000C36 7428                                    jz      short .quickfill@@
  1343                                  
  1344                                  .scalefac_get_lop@@:
  1345 00000C38 88D1                                    mov     cl, dl
  1346 00000C3A 89E8                                    mov     eax, ebp
  1347 00000C3C D3E5                                    shl     ebp, cl
  1348 00000C3E D3C0                                    rol     eax, cl
  1349 00000C40 31E8                                    xor     eax, ebp
  1350 00000C42 28CD                                    sub     ch, cl
  1351 00000C44 7913                                    jns     short .cont@@@
  1352 00000C46 88E9                                    mov     cl, ch
  1353 00000C48 80C510                                  add     ch, 10h
  1354 00000C4B D3C5                                    rol     ebp, cl
  1355 00000C4D 668B2E                                  mov     bp, [esi]
  1356 00000C50 83C602                                  add     esi, 2
  1357 00000C53 66C1CD08                                ror     bp, 8
  1358 00000C57 D3CD                                    ror     ebp, cl
  1359                                  
  1360                                  .cont@@@:
  1361 00000C59 AA                                      stosb
  1362 00000C5A FECB                                    dec     bl
  1363 00000C5C 75DA                                    jnz     short .scalefac_get_lop@@
  1364 00000C5E EB09                                    jmp     short .skip_quickfill@@
  1365                                  
  1366                                  .quickfill@@:
  1367 00000C60 51                                      push    ecx
  1368 00000C61 0FB6CB                                  movzx   ecx, bl
  1369 00000C64 B000                                    mov     al, 0
  1370 00000C66 F3AA                                    rep stosb
  1371 00000C68 59                                      pop     ecx
  1372                                  
  1373                                  .skip_quickfill@@:
  1374 00000C69 EB11                                    jmp     short .body_lsf_zero_non_type2_next
  1375                                  
  1376                                  .body_lsf_zero_non_type2_copy:
  1377 00000C6B 51                                      push    ecx
  1378 00000C6C 89F0                                    mov     eax, esi
  1379 00000C6E 0FB6CB                                  movzx   ecx, bl         ; copy
  1380 00000C71 8DB760F6FFFF                            lea     esi, [edi-2464] ; [edi-$mp3gr_entrysiz] ; src=granule[0] ; from
  1381 00000C77 F3A4                                    rep movsb               ; prev
  1382 00000C79 89C6                                    mov     esi, eax
  1383 00000C7B 59                                      pop     ecx
  1384                                  
  1385                                  .body_lsf_zero_non_type2_next:
  1386 00000C7C C1EA08                                  shr     edx, 8          ; dl=next slen
  1387 00000C7F C1EB08                                  shr     ebx, 8          ; bl=next numfacs
  1388 00000C82 75A7                                    jnz     short .body_lsf_zero_non_type2_lop
  1389 00000C84 5B                                      pop     ebx
  1390 00000C85 B000                                    mov     al, 0
  1391 00000C87 AA                                      stosb
  1392 00000C88 E9A9000000                              jmp     .body_lsf_done
  1393                                  
  1394                                  .body_lsf_nonzero:
  1395 00000C8D 8B5314                                  mov     edx, [ebx+14h]  ; [ebx+$mp3gr_scalefac_compress]
  1396 00000C90 F705[889D0000]0100-                     test    dword [mp3_hdr_mode_ext], 1 ; MODE_EXT_I_STEREO
  1396 00000C98 0000               
  1397 00000C9A 740F                                    jz      short .normal_scalefac
  1398 00000C9C 833D[3CF40000]00                        cmp     dword [mp3_curr_channel], 0
  1399 00000CA3 7406                                    jz      short .normal_scalefac
  1400 00000CA5 81C200020000                            add     edx, 512        ; for 2nd channel of intensity_stereo
  1401                                  
  1402                                  .normal_scalefac:
  1403 00000CAB 8A04D5[51FF0400]                        mov     al, [(mp3_lsf_sf_expand_exploded_table+5)+edx*8]
  1404 00000CB2 084318                                  or      [ebx+24], al    ; [ebx+$mp3gr_preflag]
  1405 00000CB5 53                                      push    ebx
  1406 00000CB6 0FB604D5[50FF0400]                      movzx   eax, byte [(mp3_lsf_sf_expand_exploded_table+4)+edx*8]
  1407 00000CBE 837B2C02                                cmp     dword [ebx+44], 2 ;  [ebx+$mp3gr_block_type]
  1408 00000CC2 7507                                    jnz     short .this_tindex1
  1409 00000CC4 8B5B30                                  mov     ebx, [ebx+48]   ; [ebx+$mp3gr_switch_point]
  1410 00000CC7 8D449804                                lea     eax, [eax+ebx*4+4]
  1411                                  
  1412                                  .this_tindex1:
  1413 00000CCB 8B98[607A0000]                          mov     ebx, [mp3_lsf_nsf_table+eax]
  1414 00000CD1 8B14D5[4CFF0400]                        mov     edx, dword [mp3_lsf_sf_expand_exploded_table+edx*8]
  1415                                  
  1416                                  .scalefax_outer_lop:
  1417 00000CD8 80FA00                                  cmp     dl, 0           ; @@get_bl_scalefacs_with_dl_bits 1
  1418 00000CDB 7435                                    jz      short .@quickfil
  1419                                  
  1420                                  .@scalefac_get_lop:
  1421 00000CDD 88D1                                    mov     cl, dl
  1422 00000CDF 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
  1423 00000CE1 D3E5                                    shl     ebp, cl
  1424 00000CE3 D3C0                                    rol     eax, cl
  1425 00000CE5 31E8                                    xor     eax, ebp
  1426 00000CE7 28CD                                    sub     ch, cl
  1427 00000CE9 7913                                    jns     short .cont
  1428 00000CEB 88E9                                    mov     cl, ch
  1429 00000CED 80C510                                  add     ch, 10h
  1430 00000CF0 D3C5                                    rol     ebp, cl
  1431 00000CF2 668B2E                                  mov     bp, [esi]
  1432 00000CF5 83C602                                  add     esi, 2
  1433 00000CF8 66C1CD08                                ror     bp, 8
  1434 00000CFC D3CD                                    ror     ebp, cl
  1435                                  
  1436                                  .cont:
  1437 00000CFE 88D1                                    mov     cl, dl          ; numbits
  1438 00000D00 88C4                                    mov     ah, al
  1439 00000D02 FEC4                                    inc     ah              ; val+1
  1440 00000D04 D2EC                                    shr     ah, cl          ; bit0=is.max.value
  1441 00000D06 C0E407                                  shl     ah, 7           ; bit7=is.max.value
  1442 00000D09 08E0                                    or      al, ah          ; apply NO_INTENSITY_FLAG
  1443 00000D0B AA                                      stosb
  1444 00000D0C FECB                                    dec     bl
  1445 00000D0E 75CD                                    jnz     short .@scalefac_get_lop
  1446 00000D10 EB09                                    jmp     short .@skip_quickfill
  1447                                  
  1448                                  .@quickfil:
  1449 00000D12 51                                      push    ecx
  1450 00000D13 0FB6CB                                  movzx   ecx, bl
  1451 00000D16 B080                                    mov     al, 80h
  1452 00000D18 F3AA                                    rep stosb
  1453 00000D1A 59                                      pop     ecx
  1454                                  
  1455                                  .@skip_quickfill:
  1456 00000D1B C1EA08                                  shr     edx, 8
  1457 00000D1E C1EB08                                  shr     ebx, 8
  1458 00000D21 75B5                                    jnz     short .scalefax_outer_lop
  1459 00000D23 5B                                      pop     ebx
  1460                                  
  1461                                  .body_lsf_zeropad:
  1462 00000D24 89CA                                    mov     edx, ecx
  1463 00000D26 8D8B98000000                            lea     ecx, [ebx+152]  ; [ebx+$mp3gr_scale_factors+40]
  1464 00000D2C 29F9                                    sub     ecx, edi
  1465                                                  ;jb     short fatal_scalefactors
  1466                                  		; 21/10/2024
  1467 00000D2E 721E                    		jb	short fatalunexpected
  1468 00000D30 B000                                    mov     al, 0
  1469 00000D32 F3AA                                    rep stosb
  1470 00000D34 89D1                                    mov     ecx, edx
  1471                                  
  1472                                  .body_lsf_done:
  1473 00000D36 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_read_scalefac
  1474 00000D3D 740E                                    jz      short .no_rdtsc_supported@@@
  1475 00000D3F 0F31                                    rdtsc
  1476 00000D41 0105[60760000]                          add     [rdtsc_read_scalefac], eax
  1477 00000D47 1115[64760000]                          adc     [rdtsc_read_scalefac+4], edx
  1478                                  
  1479                                  .no_rdtsc_supported@@@:
  1480 00000D4D C3                                      retn
  1481                                  
  1482                                  		; 21/10/2024
  1483                                  ;fatal_scalefactors:
  1484                                                  ;jmp    fatalunexpected
  1485                                  
  1486                                  ; ---------------------------------------------------------------------------
  1487                                  
  1488                                  		; 21/10/2024
  1489                                  fatalunexpected:                       
  1490 00000D4E F735[CC840000]                          div	dword [zero]
  1491                                  hang:
  1492 00000D54 EBFE                                    jmp     short hang
  1493                                  
  1494                                  
  1495                                  ; =============== S U B R O U T I N E =======================================
  1496                                  
  1497                                  
  1498                                  mp3_get_exponents_from_scale_factors:
  1499 00000D56 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_xlat_scalefac
  1500 00000D5D 740E                                    jz      short .no_rdtsc_supported
  1501 00000D5F 0F31                                    rdtsc
  1502 00000D61 2905[78760000]                          sub     [rdtsc_xlat_scalefac], eax
  1503 00000D67 1915[7C760000]                          sbb     [rdtsc_xlat_scalefac+4], edx
  1504                                  
  1505                                  .no_rdtsc_supported:
  1506 00000D6D 51                                      push    ecx             ; mp3mac_push_bitstream
  1507 00000D6E 55                                      push    ebp
  1508 00000D6F 56                                      push    esi
  1509 00000D70 C705[6C1F0500]0000-                     mov     dword [_@@rle_point], 0
  1509 00000D78 0000               
  1510 00000D7A 8A4B34                                  mov     cl, [ebx+52]    ; [ebx+$mp3gr_scalefac_scale]
  1511 00000D7D BF[E01A0100]                            mov     edi, mp3_exponents
  1512 00000D82 31D2                                    xor     edx, edx
  1513 00000D84 3B5320                                  cmp     edx, [ebx+32]   ; [ebx+$mp3gr_long_end]
  1514 00000D87 7345                                    jnb     short .long_done
  1515 00000D89 A1[609D0000]                            mov     eax, [mp3_hdr_sample_rate_index]
  1516 00000D8E 6BC016                                  imul    eax, 22
  1517 00000D91 8DA8[70800000]                          lea     ebp, [mp3_band_size_long+eax]
  1518 00000D97 8B4318                                  mov     eax, [ebx+24]   ; [ebx+$mp3gr_preflag]
  1519 00000D9A 6BC016                                  imul    eax, 22
  1520 00000D9D 8DB0[C0810000]                          lea     esi, [mp3_pretab+eax]
  1521                                  
  1522                                  .long_lop:
  1523 00000DA3 0FB6441370                              movzx   eax, byte [ebx+edx+112] ; [ebx+$mp3gr_scale_factors+edx]
  1524 00000DA8 247F                                    and     al, 7Fh         ; strip NO_INTENSITY_FLAG
  1525 00000DAA 020416                                  add     al, [esi+edx]
  1526 00000DAD D3E0                                    shl     eax, cl
  1527 00000DAF F7D8                                    neg     eax
  1528 00000DB1 034310                                  add     eax, [ebx+16]   ; [ebx+$mp3gr_global_gain]
  1529 00000DB4 C1E010                                  shl     eax, 16
  1530 00000DB7 8A441500                                mov     al, [ebp+edx+0]
  1531 00000DBB 0305[6C1F0500]                          add     eax, [_@@rle_point]
  1532 00000DC1 66A3[6C1F0500]                          mov     word [_@@rle_point], ax
  1533 00000DC7 AB                                      stosd
  1534 00000DC8 42                                      inc     edx
  1535 00000DC9 3B5320                                  cmp     edx, [ebx+32]   ; [ebx+$mp3gr_long_end]
  1536 00000DCC 72D5                                    jb      short .long_lop
  1537                                  
  1538                                  .long_done:
  1539 00000DCE 8B531C                                  mov     edx, [ebx+28]   ; [ebx+$mp3gr_short_start]
  1540 00000DD1 83FA0D                                  cmp     edx, 13
  1541 00000DD4 0F83AA000000                            jnb     .skip_shorts
  1542 00000DDA A1[609D0000]                            mov     eax, [mp3_hdr_sample_rate_index]
  1543 00000DDF 6BC00D                                  imul    eax, 13
  1544 00000DE2 8DA8[40810000]                          lea     ebp, [mp3_band_size_short+eax]
  1545 00000DE8 8B7320                                  mov     esi, [ebx+32]   ; [ebx+$mp3gr_long_end]
  1546 00000DEB 8B4310                                  mov     eax, [ebx+16]   ; [ebx+$mp3gr_global_gain]
  1547                                                                          ; IRP nn,0,1,2
  1548 00000DEE 2B4344                                  sub     eax, [ebx+68]   ; [ebx+$mp3gr_subblock_gain+nn*4]
  1549 00000DF1 A3[601F0500]                            mov     [_@@gains], eax ; [@@gains+nn*4]
  1550 00000DF6 8B4310                                  mov     eax, [ebx+16]
  1551 00000DF9 2B4348                                  sub     eax, [ebx+72]
  1552 00000DFC A3[641F0500]                            mov     [_@@gains+4], eax ; [@@gains+nn*4]
  1553 00000E01 8B4310                                  mov     eax, [ebx+16]
  1554 00000E04 2B434C                                  sub     eax, [ebx+76]   ; [ebx+$mp3gr_subblock_gain+nn*4]
  1555 00000E07 A3[681F0500]                            mov     [_@@gains+8], eax ; [@@gains+nn*4]
  1556                                  
  1557                                  .short_lop:
  1558 00000E0C 0FB6443370                              movzx   eax, byte [ebx+esi+112] ; [ebx+$mp3gr_scale_factors+esi]
  1559                                                                          ; IRP nn,0,1,2
  1560 00000E11 247F                                    and     al, 7Fh         ; strip NO_INTENSITY_FLAG
  1561 00000E13 46                                      inc     esi
  1562 00000E14 D3E0                                    shl     eax, cl
  1563 00000E16 F7D8                                    neg     eax
  1564 00000E18 0305[601F0500]                          add     eax, [_@@gains] ; [@@gains+nn*4] ; nn=0
  1565 00000E1E C1E010                                  shl     eax, 16
  1566 00000E21 8A441500                                mov     al, [ebp+edx+0] ; bstab[edx]
  1567 00000E25 0305[6C1F0500]                          add     eax, [_@@rle_point]
  1568 00000E2B 66A3[6C1F0500]                          mov     word [_@@rle_point], ax
  1569 00000E31 AB                                      stosd                   ; msw=val, lsw=point
  1570 00000E32 0FB6443370                              movzx   eax, byte [ebx+esi+112] ; [ebx+$mp3gr_scalefac_scale]
  1571 00000E37 247F                                    and     al, 7Fh
  1572 00000E39 46                                      inc     esi
  1573 00000E3A D3E0                                    shl     eax, cl
  1574 00000E3C F7D8                                    neg     eax
  1575 00000E3E 0305[641F0500]                          add     eax, [_@@gains+4] ; [@@gains+nn*4] ; nn = 1
  1576 00000E44 C1E010                                  shl     eax, 16
  1577 00000E47 8A441500                                mov     al, [ebp+edx+0]
  1578 00000E4B 0305[6C1F0500]                          add     eax, [_@@rle_point]
  1579 00000E51 66A3[6C1F0500]                          mov     word [_@@rle_point], ax
  1580 00000E57 AB                                      stosd
  1581 00000E58 0FB6443370                              movzx   eax, byte [ebx+esi+70h]
  1582 00000E5D 247F                                    and     al, 7Fh
  1583 00000E5F 46                                      inc     esi
  1584 00000E60 D3E0                                    shl     eax, cl
  1585 00000E62 F7D8                                    neg     eax
  1586 00000E64 0305[681F0500]                          add     eax, [_@@gains+8] ; [@@gains+nn*4] ; nn=2
  1587 00000E6A C1E010                                  shl     eax, 10h
  1588 00000E6D 8A441500                                mov     al, [ebp+edx+0]
  1589 00000E71 0305[6C1F0500]                          add     eax, [_@@rle_point]
  1590 00000E77 66A3[6C1F0500]                          mov     word [_@@rle_point], ax
  1591 00000E7D AB                                      stosd
  1592 00000E7E 42                                      inc     edx
  1593 00000E7F 83FA0D                                  cmp     edx, 13
  1594 00000E82 7288                                    jb      short .short_lop
  1595                                  
  1596                                  .skip_shorts:
  1597 00000E84 5E                                      pop     esi             ; mp3mac_pop_bitstream
  1598 00000E85 5D                                      pop     ebp
  1599 00000E86 59                                      pop     ecx
  1600 00000E87 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_xlat_scalefac
  1601 00000E8E 740E                                    jz      short .no_rdtsc_supported@
  1602 00000E90 0F31                                    rdtsc
  1603 00000E92 0105[78760000]                          add     [rdtsc_xlat_scalefac], eax
  1604 00000E98 1115[7C760000]                          adc     [rdtsc_xlat_scalefac+4], edx
  1605                                  
  1606                                  .no_rdtsc_supported@:
  1607 00000E9E C3                                      retn
  1608                                  
  1609                                  
  1610                                  ; =============== S U B R O U T I N E =======================================
  1611                                  
  1612                                  
  1613                                  mp3_huffman_decode:
  1614 00000E9F F605[F0750000]10                        test    byte [cpuid_flags], 10h ; in: ebx=granule, out: [sb_hybrid..]
  1615                                                                          ; timelog_start rdtsc_read_huffman
  1616 00000EA6 740E                                    jz      short .no_rdtsc_supported
  1617 00000EA8 0F31                                    rdtsc
  1618 00000EAA 2905[90760000]                          sub     [rdtsc_read_huffman], eax
  1619 00000EB0 1915[94760000]                          sbb     [rdtsc_read_huffman+4], edx
  1620                                  
  1621                                  .no_rdtsc_supported:
  1622 00000EB6 8B4308                                  mov	eax, [ebx+8]    ; [ebx+$mp3gr_part2_3_end]
  1623 00000EB9 C1E803                                  shr	eax, 3
  1624 00000EBC 0305[48F40000]                          add	eax, [mp3_bitstream_start]
  1625 00000EC2 A3[801F0500]                            mov	[_@@coarse_end], eax
  1626 00000EC7 31FF                                    xor	edi, edi
  1627 00000EC9 C705[881F0500]-                         mov	dword [_@@rle_ptr], mp3_exponents
  1627 00000ECF [E01A0100]         
  1628 00000ED3 C705[841F0500]0000-                     mov	dword [_@rle_point], 0
  1628 00000EDB 0000               
  1629 00000EDD C705[701F0500]0000-                     mov	dword [_@@III], 0  ; i=0
  1629 00000EE5 0000               
  1630                                  
  1631                                  .low_freq_lop_i:
  1632 00000EE7 8B15[701F0500]                          mov     edx, [_@@III] ; for i=0 to 2
  1633                                                                          ; low frequencies (called big_values)...
  1634 00000EED 8B449350                                mov     eax, [ebx+edx*4+80] ; [ebx+$mp3gr_region_size+edx*4]
  1635 00000EF1 83F800                                  cmp     eax, 0
  1636 00000EF4 0F84D9020000                            jz      .low_freq_next_i
  1637 00000EFA A3[741F0500]                            mov     [_@@JJJ], eax
  1638 00000EFF 8B549338                                mov     edx, [ebx+edx*4+56] ; [ebx+$mp3gr_table_select+edx*4]
  1639                                                                          ; select vlc table
  1640 00000F03 0FB68412[30800000]                      movzx   eax, byte [mp3_huff_data+edx*2] ; get huff.table number
  1641 00000F0B 83F800                                  cmp     eax, 0          ; huff.table
  1642 00000F0E 7528                                    jnz     short .low_freq_nonzero
  1643 00000F10 51                                      push    ecx
  1644 00000F11 57                                      push    edi
  1645 00000F12 8DBCBBA0000000                          lea     edi, [ebx+edi*4+160] ; [ebx+$mp3gr_sb_hybrid+edi*4]
  1646 00000F19 8B0D[741F0500]                          mov     ecx, [_@@JJJ]
  1647 00000F1F D1E1                                    shl     ecx, 1
  1648 00000F21 31C0                                    xor     eax, eax        ; when huff.table=0,
  1649                                                                          ; simply set NUM*2 entries to zero
  1650 00000F23 F3AB                                    rep stosd
  1651 00000F25 5F                                      pop     edi
  1652 00000F26 59                                      pop     ecx
  1653 00000F27 033D[741F0500]                          add     edi, [_@@JJJ] ; raise index accordingly (by num*2)
  1654 00000F2D 033D[741F0500]                          add     edi, [_@@JJJ]
  1655 00000F33 E99B020000                              jmp     .low_freq_next_i
  1656                                  
  1657                                  .low_freq_nonzero:
  1658 00000F38 A3[7C1F0500]                            mov     [_@@vlc_table], eax ; =1..15
  1659 00000F3D 83F80E                                  cmp     eax, 14         ; only table 14..15 have linbits
  1660 00000F40 0F83FA000000                            jnb     .with_linbits  ; so table 0..13 can use faster code...
  1661                                  
  1662                                  .low_freq_lop_j_small:
  1663 00000F46 3B35[801F0500]                          cmp     esi, [_@@coarse_end] ; loop @@JJJ times..
  1664 00000F4C 0F87CF000000                            ja      .small_near_end
  1665                                  
  1666                                  .small_not_end:
  1667 00000F52 3B3D[841F0500]                          cmp     edi, [_@rle_point] ; @@get_runlength small
  1668 00000F58 0F839E030000                            jnb     .rle_fetch_next_small
  1669                                  
  1670                                  .rle_back_small:
  1671 00000F5E 8B15[7C1F0500]                          mov     edx, [_@@vlc_table] ; get huffcode
  1672                                  
  1673                                  .get_child_lop:
  1674 00000F64 8A0C95[621F0100]                        mov     cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode
  1675                                                                          ; in: edx=table, out: eax=data
  1676                                                                          ; bits (table size) (-7..-1)
  1677 00000F6B 668B1495[601F0100]                      mov     dx, word [huff_tree_buf+edx*4] ; code (child table)
  1678 00000F73 89E8                                    mov     eax, ebp        ; mov eax,mp3_col32 ; peek bitstream
  1679 00000F75 D3E8                                    shr     eax, cl
  1680 00000F77 01C2                                    add     edx, eax
  1681 00000F79 8A0C95[621F0100]                        mov     cl, [(huff_tree_buf+2)+edx*4] ; bits (of entry)
  1682 00000F80 80F900                                  cmp     cl, 0
  1683 00000F83 7823                                    js      short .got_child
  1684 00000F85 0FB70495[601F0100]                      movzx   eax, word [huff_tree_buf+edx*4] ; return data value
  1685 00000F8D D3E5                                    shl     ebp, cl         ; shl mp3_col32,cl ; discard cl bits
  1686 00000F8F 28CD                                    sub     ch, cl          ; sub mp3_colNN,cl
  1687 00000F91 7932                                    jns     short .got_done
  1688 00000F93 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1689                                                                          ; mov cl,mp3_colNN ; byte ptr [mp3_numbits_collected]
  1690 00000F95 80C510                                  add     ch, 16          ; byte ptr [mp3_numbits_collected]
  1691 00000F98 D3C5                                    rol     ebp, cl         ; dword ptr [mp3_collected_data]
  1692 00000F9A 668B2E                                  mov     bp, [esi]
  1693 00000F9D 83C602                                  add     esi, 2
  1694 00000FA0 66C1CD08                                ror     bp, 8           ; ror mp3_col16,8 ; endianess
  1695 00000FA4 D3CD                                    ror     ebp, cl         ; ror mp3_col32,cl ; dword ptr [mp3_collected_data]
  1696 00000FA6 EB1D                                    jmp     short .got_done
  1697                                  
  1698                                  .got_child:
  1699 00000FA8 C1E509                                  shl     ebp, 9          ; shl mp3_col32,CHILD_BITS
  1700                                                                          ; discard 7 bits
  1701                                                                          ; (assuming that parents are always 7bit wide)
  1702 00000FAB 80ED09                                  sub     ch, 9
  1703 00000FAE 79B4                                    jns     short .get_child_lop
  1704 00000FB0 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1705 00000FB2 80C510                                  add     ch, 10h
  1706 00000FB5 D3C5                                    rol     ebp, cl
  1707 00000FB7 668B2E                                  mov     bp, [esi]
  1708 00000FBA 83C602                                  add     esi, 2
  1709 00000FBD 66C1CD08                                ror     bp, 8
  1710 00000FC1 D3CD                                    ror     ebp, cl
  1711 00000FC3 EB9F                                    jmp     short .get_child_lop
  1712                                  
  1713                                  .got_done:
  1714 00000FC5 50                                      push    eax
  1715 00000FC6 C1E804                                  shr     eax, 4          ; x
  1716 00000FC9 7417                                    jz      short .this_sign ; @@getexpval 0 ; @@getexpval macro has_linbits
  1717                                                                          ; eax=0 (without sign) ; when x=0
  1718 00000FCB 8B15[901F0500]                          mov     edx, [_@@rle_val_x_40h]
  1719 00000FD1 8B8482[CC620400]                        mov     eax, [mp3_expval_table+edx+eax*4]
  1720 00000FD8 FECD                                    dec     ch              ; mp3mac_get_bit_to_cy
  1721                                                                          ; ;jnc short @@this_sign
  1722                                                                          ; ;neg  eax
  1723 00000FDA D1E5                                    shl     ebp, 1          ; dec mp3_colNN ; shl mp3_col32,1 ; cy=data
  1724 00000FDC 19D2                                    sbb     edx, edx        ; cy=0,1 --> 0,FFFFFFFF
  1725 00000FDE 31D0                                    xor     eax, edx        ; invert if cy was 1 ; get sign (negate if sign=1)
  1726 00000FE0 29D0                                    sub     eax, edx        ; add 1 if cy was 1
  1727                                  
  1728                                  .this_sign:
  1729 00000FE2 8984BBA0000000                          mov     [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0]
  1730 00000FE9 58                                      pop     eax
  1731 00000FEA 83E00F                                  and     eax, 0Fh        ; y
  1732 00000FED 7417                                    jz      short .this_sign@ ; @@getexpval 0
  1733 00000FEF 8B15[901F0500]                          mov     edx, [_@@rle_val_x_40h]
  1734 00000FF5 8B8482[CC620400]                        mov     eax, [mp3_expval_table+edx+eax*4]
  1735 00000FFC FECD                                    dec     ch
  1736 00000FFE D1E5                                    shl     ebp, 1
  1737 00001000 19D2                                    sbb     edx, edx
  1738 00001002 31D0                                    xor     eax, edx
  1739 00001004 29D0                                    sub     eax, edx
  1740                                  
  1741                                  .this_sign@:
  1742 00001006 8984BBA4000000                          mov     [ebx+edi*4+164], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+4]
  1743 0000100D 83C702                                  add     edi, 2
  1744 00001010 FF0D[741F0500]                          dec     dword [_@@JJJ]
  1745 00001016 0F852AFFFFFF                            jnz     .low_freq_lop_j_small
  1746 0000101C E9B2010000                              jmp     .low_freq_next_i
  1747                                  
  1748                                  .small_near_end:
  1749 00001021 89F0                                    mov     eax, esi        ; mp3mac_bitstream_get_position
  1750 00001023 2B05[48F40000]                          sub     eax, [mp3_bitstream_start]
  1751 00001029 0FBED5                                  movsx   edx, ch         ; mp3_colNN
  1752 0000102C F7DA                                    neg     edx
  1753 0000102E 8D44C2F0                                lea     eax, [edx+eax*8-16]
  1754 00001032 3B4308                                  cmp     eax, [ebx+8]    ; [ebx+$mp3gr_part2_3_end]
  1755 00001035 0F8217FFFFFF                            jb      .small_not_end
  1756 0000103B E993010000                              jmp     .low_freq_next_i
  1757                                  
  1758                                  .with_linbits:
  1759 00001040 0FB68412[31800000]                      movzx   eax, byte [(mp3_huff_data+1)+edx*2]
  1760 00001048 A3[781F0500]                            mov     [_@@linbits], eax
  1761                                  
  1762                                  .low_freq_lop_j:
  1763 0000104D 3B35[801F0500]                          cmp     esi, [_@@coarse_end] ; mp3mac_bitstream_get_position
  1764                                                                          ; loop @@JJJ times...
  1765 00001053 0F8725030000                            ja      .lop_j_near_end
  1766                                  
  1767                                  .small_not_end@:
  1768 00001059 3B3D[841F0500]                          cmp     edi, [_@rle_point] ; @@get_runlength small
  1769 0000105F 0F83C5020000                            jnb     .rle_fetch_next_full
  1770                                  
  1771                                  .rle_back_full:
  1772 00001065 8B15[7C1F0500]                          mov     edx, [_@@vlc_table] ; get huffcode
  1773                                  
  1774                                  .get_child_lop@:
  1775 0000106B 8A0C95[621F0100]                        mov     cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode
  1776                                                                          ; in: edx=table, out: eax=data
  1777                                                                          ; bits (table size) (-7..-1)
  1778 00001072 668B1495[601F0100]                      mov     dx, word [huff_tree_buf+edx*4] ; code (child table)
  1779 0000107A 89E8                                    mov     eax, ebp
  1780 0000107C D3E8                                    shr     eax, cl
  1781 0000107E 01C2                                    add     edx, eax
  1782 00001080 8A0C95[621F0100]                        mov     cl, [(huff_tree_buf+2)+edx*4] ; bits (of entry)
  1783 00001087 80F900                                  cmp     cl, 0
  1784 0000108A 7823                                    js      short .got_child@
  1785 0000108C 0FB70495[601F0100]                      movzx   eax, word [huff_tree_buf+edx*4] ; return data value
  1786 00001094 D3E5                                    shl     ebp, cl         ; discard cl bits
  1787 00001096 28CD                                    sub     ch, cl
  1788 00001098 7932                                    jns     short .got_done@
  1789 0000109A 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1790 0000109C 80C510                                  add     ch, 10h
  1791 0000109F D3C5                                    rol     ebp, cl
  1792 000010A1 668B2E                                  mov     bp, [esi]
  1793 000010A4 83C602                                  add     esi, 2
  1794 000010A7 66C1CD08                                ror     bp, 8
  1795 000010AB D3CD                                    ror     ebp, cl
  1796 000010AD EB1D                                    jmp     short .got_done@
  1797                                  
  1798                                  .got_child@:
  1799 000010AF C1E509                                  shl     ebp, 9
  1800 000010B2 80ED09                                  sub     ch, 9
  1801 000010B5 79B4                                    jns     short .get_child_lop@
  1802 000010B7 88E9                                    mov     cl, ch
  1803 000010B9 80C510                                  add     ch, 10h
  1804 000010BC D3C5                                    rol     ebp, cl
  1805 000010BE 668B2E                                  mov     bp, [esi]
  1806 000010C1 83C602                                  add     esi, 2
  1807 000010C4 66C1CD08                                ror     bp, 8
  1808 000010C8 D3CD                                    ror     ebp, cl
  1809 000010CA EB9F                                    jmp     short .get_child_lop@
  1810                                  
  1811                                  .got_done@:
  1812 000010CC 50                                      push    eax
  1813 000010CD C1E804                                  shr     eax, 4          ; x
  1814 000010D0 746F                                    jz      short .@this_sign ; @@getexpval 1
  1815 000010D2 8B15[8C1F0500]                          mov     edx, [_@@rle_val]
  1816 000010D8 83F80F                                  cmp     eax, 15
  1817 000010DB 7250                                    jb      short .small    ; when x=1..14
  1818 000010DD 8A0D[781F0500]                          mov     cl, byte [_@@linbits] ; =0..13 ; when x=15, with linbits
  1819 000010E3 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl ; value = 0..1FFFh
  1820 000010E5 D3E5                                    shl     ebp, cl         ; mp3mac_collect_more
  1821 000010E7 D3C0                                    rol     eax, cl
  1822 000010E9 31E8                                    xor     eax, ebp
  1823 000010EB 28CD                                    sub     ch, cl
  1824 000010ED 7913                                    jns     short .cont
  1825 000010EF 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1826 000010F1 80C510                                  add     ch, 16
  1827 000010F4 D3C5                                    rol     ebp, cl
  1828 000010F6 668B2E                                  mov     bp, [esi]
  1829 000010F9 83C602                                  add     esi, 2
  1830 000010FC 66C1CD08                                ror     bp, 8
  1831 00001100 D3CD                                    ror     ebp, cl
  1832                                  
  1833                                  .cont:
  1834 00001102 88D1                                    mov     cl, dl          ; exponent.lsb
  1835 00001104 80E103                                  and     cl, 3           ; exponent.lsb
  1836 00001107 C1EA02                                  shr     edx, 2          ; exponent.msb
  1837 0000110A 8D04853C000000                          lea     eax, [eax*4+60] ; (value+15)*4
  1838 00001111 08C8                                    or      al, cl          ; exponent.lsb+(value+15)*4
  1839 00001113 8A88[A0D90100]                          mov     cl, [mp3_table_4_3_exp+eax]
  1840 00001119 8B0485[DC590200]                        mov     eax, [mp3_table_4_3_value+eax*4]
  1841 00001120 28D1                                    sub     cl, dl          ; sub exponent.msb
  1842 00001122 D3E8                                    shr     eax, cl
  1843 00001124 80F91F                                  cmp     cl, 31
  1844 00001127 760E                                    jbe     short .get_sign
  1845 00001129 31C0                                    xor     eax, eax
  1846 0000112B EB0A                                    jmp     short .get_sign
  1847                                  
  1848                                  .small:
  1849 0000112D C1E206                                  shl     edx, 6          ; shl edx,4+2 ; mul16*4 ; when x<15 aka x=1..14
  1850 00001130 8B8482[CC620400]                        mov     eax, [mp3_expval_table+edx+eax*4]
  1851                                  
  1852                                  .get_sign:
  1853 00001137 FECD                                    dec     ch              ; mp3mac_get_bit_to_cy
  1854 00001139 D1E5                                    shl     ebp, 1
  1855 0000113B 19D2                                    sbb     edx, edx        ; get sign (negate if sign=1)
  1856 0000113D 31D0                                    xor     eax, edx
  1857 0000113F 29D0                                    sub     eax, edx
  1858                                  
  1859                                  .@this_sign:
  1860 00001141 8984BBA0000000                          mov     [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0]
  1861 00001148 58                                      pop     eax
  1862 00001149 83E00F                                  and     eax, 0Fh        ; y
  1863 0000114C 746F                                    jz      short .@this_sign@ ; @@getexpval 1
  1864 0000114E 8B15[8C1F0500]                          mov     edx, [_@@rle_val]
  1865 00001154 83F80F                                  cmp     eax, 0Fh
  1866 00001157 7250                                    jb      short .small@
  1867 00001159 8A0D[781F0500]                          mov     cl, byte [_@@linbits]
  1868 0000115F 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
  1869 00001161 D3E5                                    shl     ebp, cl
  1870 00001163 D3C0                                    rol     eax, cl
  1871 00001165 31E8                                    xor     eax, ebp
  1872 00001167 28CD                                    sub     ch, cl
  1873 00001169 7913                                    jns     short .cont@
  1874 0000116B 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1875 0000116D 80C510                                  add     ch, 10h
  1876 00001170 D3C5                                    rol     ebp, cl
  1877 00001172 668B2E                                  mov     bp, [esi]
  1878 00001175 83C602                                  add     esi, 2
  1879 00001178 66C1CD08                                ror     bp, 8
  1880 0000117C D3CD                                    ror     ebp, cl
  1881                                  
  1882                                  .cont@:
  1883 0000117E 88D1                                    mov     cl, dl
  1884 00001180 80E103                                  and     cl, 3
  1885 00001183 C1EA02                                  shr     edx, 2
  1886 00001186 8D04853C000000                          lea     eax, [eax*4+60]
  1887 0000118D 08C8                                    or      al, cl
  1888 0000118F 8A88[A0D90100]                          mov     cl, [mp3_table_4_3_exp+eax]
  1889 00001195 8B0485[DC590200]                        mov     eax, [mp3_table_4_3_value+eax*4]
  1890 0000119C 28D1                                    sub     cl, dl
  1891 0000119E D3E8                                    shr     eax, cl
  1892 000011A0 80F91F                                  cmp     cl, 31
  1893 000011A3 760E                                    jbe     short .get_sign@
  1894 000011A5 31C0                                    xor     eax, eax
  1895 000011A7 EB0A                                    jmp     short .get_sign@
  1896                                  
  1897                                  .small@:
  1898 000011A9 C1E206                                  shl     edx, 6
  1899 000011AC 8B8482[CC620400]                        mov     eax, [mp3_expval_table+edx+eax*4]
  1900                                  
  1901                                  .get_sign@:                           
  1902 000011B3 FECD                                    dec     ch              ; dec mp3_colNN
  1903 000011B5 D1E5                                    shl     ebp, 1          ; shl mp3_col32,1 ; cy=data
  1904 000011B7 19D2                                    sbb     edx, edx        ; cy=0,1 --> 0,FFFFFFFF
  1905 000011B9 31D0                                    xor     eax, edx        ; invert if cy was 1
  1906 000011BB 29D0                                    sub     eax, edx        ; add 1 if cy was 1
  1907                                  
  1908                                  .@this_sign@:
  1909 000011BD 8984BBA4000000                          mov	[ebx+edi*4+164], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+4]
  1910 000011C4 83C702                                  add	edi, 2          ; next j
  1911 000011C7 FF0D[741F0500]                          dec	dword [_@@JJJ]
  1912 000011CD 0F857AFEFFFF                            jnz	.low_freq_lop_j
  1913                                  
  1914                                  .low_freq_next_i:
  1915 000011D3 FF05[701F0500]                          inc	dword [_@@III]	; next i
  1916 000011D9 833D[701F0500]03                        cmp	dword [_@@III], 3
  1917 000011E0 0F8201FDFFFF                            jb	.low_freq_lop_i
  1918 000011E6 81FF3C020000                            cmp	edi, 572	; aka 576-4 ; skip if less than 4 entries left
  1919 000011EC 0F87DA000000                            ja	.high_freq_done
  1920                                  
  1921                                  .high_freq_lop:
  1922 000011F2 3B35[801F0500]                          cmp     esi, [_@@coarse_end]
  1923 000011F8 7629                                    jbe     short .high_freq_inrange
  1924 000011FA 89F0                                    mov     eax, esi        ; mp3mac_bitstream_get_position
  1925 000011FC 2B05[48F40000]                          sub     eax, [mp3_bitstream_start]
  1926 00001202 0FBED5                                  movsx   edx, ch         ; mp3_colNN
  1927 00001205 F7DA                                    neg     edx
  1928 00001207 8D44C2F0                                lea     eax, [edx+eax*8-16]
  1929 0000120B 3B4308                                  cmp     eax, [ebx+8]    ; [ebx+$mp3gr_part2_3_end] ; check end
  1930 0000120E 7213                                    jb      short .high_freq_inrange ; not yet end
  1931 00001210 0F84B6000000                            jz      .high_freq_done ; okay, exact end
  1932 00001216 83FF04                                  cmp     edi, 4
  1933 00001219 7203                                    jb      short .high_freq_cannot_stepback
  1934 0000121B 83EF04                                  sub     edi, 4          ; stepback, s_index-4 ; dst stepback
  1935                                  
  1936                                  .high_freq_cannot_stepback:
  1937 0000121E E9A9000000                              jmp     .high_freq_done
  1938                                  
  1939                                  .high_freq_inrange:
  1940 00001223 8B5324                                  mov     edx, [ebx+24h]  ; [ebx+$mp3gr_count1table_select]
  1941                                                                          ; get huffcode (quad_vlc)
  1942                                  
  1943                                  .get_child_lop@@:
  1944 00001226 8A0C95[621F0100]                        mov     cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode
  1945 0000122D 668B1495[601F0100]                      mov     dx, word [huff_tree_buf+edx*4]
  1946 00001235 89E8                                    mov     eax, ebp
  1947 00001237 D3E8                                    shr     eax, cl
  1948 00001239 01C2                                    add     edx, eax
  1949 0000123B 8A0C95[621F0100]                        mov     cl, [(huff_tree_buf+2)+edx*4]
  1950 00001242 80F900                                  cmp     cl, 0
  1951 00001245 7823                                    js      short .got_child@@
  1952 00001247 0FB70495[601F0100]                      movzx   eax, word [huff_tree_buf+edx*4]
  1953 0000124F D3E5                                    shl     ebp, cl
  1954 00001251 28CD                                    sub     ch, cl
  1955 00001253 7932                                    jns     short .got_done@@
  1956 00001255 88E9                                    mov     cl, ch
  1957 00001257 80C510                                  add     ch, 10h
  1958 0000125A D3C5                                    rol     ebp, cl
  1959 0000125C 668B2E                                  mov     bp, [esi]
  1960 0000125F 83C602                                  add     esi, 2
  1961 00001262 66C1CD08                                ror     bp, 8
  1962 00001266 D3CD                                    ror     ebp, cl
  1963 00001268 EB1D                                    jmp     short .got_done@@
  1964                                  
  1965                                  .got_child@@:
  1966 0000126A C1E509                                  shl     ebp, 9
  1967 0000126D 80ED09                                  sub     ch, 9
  1968 00001270 79B4                                    jns     short .get_child_lop@@
  1969 00001272 88E9                                    mov     cl, ch
  1970 00001274 80C510                                  add     ch, 10h
  1971 00001277 D3C5                                    rol     ebp, cl
  1972 00001279 668B2E                                  mov     bp, [esi]
  1973 0000127C 83C602                                  add     esi, 2
  1974 0000127F 66C1CD08                                ror     bp, 8
  1975 00001283 D3CD                                    ror     ebp, cl
  1976 00001285 EB9F                                    jmp     short .get_child_lop@@
  1977                                  
  1978                                  .got_done@@:
  1979 00001287 88C2                                    mov     dl, al          ; flags
  1980 00001289 C0E204                                  shl     dl, 4           ; flags, to upper 4bit
  1981 0000128C B604                                    mov     dh, 4           ; lopcount
  1982                                  
  1983                                  .high_freq_flag_lop:
  1984 0000128E 31C0                                    xor     eax, eax
  1985 00001290 D0E2                                    shl     dl, 1           ; flag
  1986 00001292 7320                                    jnb     short .high_freq_flag_this
  1987 00001294 3B3D[841F0500]                          cmp     edi, [_@rle_point] ; @@get_runlength quads
  1988 0000129A 0F83B8000000                            jnb     .rle_fetch_next_quads
  1989                                  
  1990                                  .rle_back_quads:
  1991 000012A0 A1[8C1F0500]                            mov     eax, [_@@rle_val]
  1992 000012A5 8B0485[CC5A0400]                        mov     eax, [mp3_exp_table+eax*4] ; xlat and get sign
  1993 000012AC FECD                                    dec     ch              ; mp3mac_get_bit_to_cy
  1994 000012AE D1E5                                    shl     ebp, 1
  1995 000012B0 7302                                    jnb     short .high_freq_flag_this ;
  1996                                                                          ; sbb edx, edx ; cy=0,1 --> 0,FFFFFFFF
  1997                                                                          ; xor eax, edx ; invert if cy was 1
  1998                                                                          ; sub eax, edx ; add 1 if cy was 1
  1999 000012B2 F7D8                                    neg     eax
  2000                                  
  2001                                  .high_freq_flag_this:
  2002 000012B4 8984BBA0000000                          mov     [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0]
  2003 000012BB 47                                      inc     edi
  2004 000012BC FECE                                    dec     dh
  2005 000012BE 75CE                                    jnz     short .high_freq_flag_lop
  2006 000012C0 81FF3C020000                            cmp     edi, 572        ; aka 576-4 ; loop while space for another 4 values
  2007 000012C6 0F8626FFFFFF                            jbe     .high_freq_lop
  2008                                  
  2009                                  .high_freq_done:
  2010 000012CC 897B5C                                  mov     [ebx+92], edi   ; [ebx+$mp3gr_num_nonzero_hybrids]
  2011 000012CF 51                                      push    ecx
  2012 000012D0 B940020000                              mov     ecx, 576        ; end
  2013 000012D5 29F9                                    sub     ecx, edi        ; remain = end-curr
  2014                                                                          ; zeropad remaining entries (can be 0 or 2 dwords,
  2015                                                                          ; or more. If above loop was aborted)
  2016 000012D7 8DBCBBA0000000                          lea     edi, [ebx+edi*4+160] ; [ebx+$mp3gr_sb_hybrid+edi*4]
  2017 000012DE 31C0                                    xor     eax, eax
  2018 000012E0 F3AB                                    rep stosd
  2019 000012E2 59                                      pop     ecx
  2020 000012E3 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_read_huffman
  2021 000012EA 740E                                    jz      short .no_rdtsc_supported@
  2022 000012EC 0F31                                    rdtsc
  2023 000012EE 0105[90760000]                          add     [rdtsc_read_huffman], eax
  2024 000012F4 1115[94760000]                          adc     [rdtsc_read_huffman+4], edx
  2025                                  
  2026                                  .no_rdtsc_supported@:
  2027 000012FA F8                                      clc                     ; out: cy=0=okay
  2028 000012FB C3                                      retn
  2029                                  
  2030                                  .rle_fetch_next_small:
  2031 000012FC A1[881F0500]                            mov     eax, [_@@rle_ptr] ; @@next_runlength small
  2032 00001301 8305[881F0500]04                        add     dword [_@@rle_ptr], 4
  2033 00001308 8B00                                    mov     eax, [eax]
  2034 0000130A 6639C7                                  cmp     di, ax
  2035 0000130D 73ED                                    jnb     short .rle_fetch_next_small
  2036 0000130F 66A3[841F0500]                          mov     word [_@rle_point], ax
  2037 00001315 C1E810                                  shr     eax, 16
  2038 00001318 A3[8C1F0500]                            mov     [_@@rle_val], eax
  2039 0000131D C1E006                                  shl     eax, 6
  2040 00001320 A3[901F0500]                            mov     [_@@rle_val_x_40h], eax
  2041 00001325 E934FCFFFF                              jmp     .rle_back_small
  2042                                  
  2043                                  .rle_fetch_next_full:
  2044 0000132A A1[881F0500]                            mov     eax, [_@@rle_ptr] ; @@next_runlength full
  2045 0000132F 8305[881F0500]04                        add	dword [_@@rle_ptr], 4
  2046 00001336 8B00                                    mov     eax, [eax]
  2047 00001338 6639C7                                  cmp     di, ax
  2048 0000133B 73ED                                    jnb     short .rle_fetch_next_full
  2049 0000133D 66A3[841F0500]                          mov     word [_@rle_point], ax
  2050 00001343 C1E810                                  shr     eax, 16
  2051 00001346 A3[8C1F0500]                            mov     [_@@rle_val], eax
  2052 0000134B C1E006                                  shl     eax, 6
  2053 0000134E A3[901F0500]                            mov     [_@@rle_val_x_40h], eax
  2054 00001353 E90DFDFFFF                              jmp     .rle_back_full
  2055                                  
  2056                                  .rle_fetch_next_quads:
  2057 00001358 A1[881F0500]                            mov	eax, [_@@rle_ptr] ; msw=val, lsw=point
  2058 0000135D 8305[881F0500]04                        add	dword [_@@rle_ptr], 4 ; 2+2
  2059 00001364 8B00                                    mov	eax, [eax]
  2060 00001366 6639C7                                  cmp	di, ax          ; needed if rle fetching was skipped
  2061 00001369 73ED                                    jnb	short .rle_fetch_next_quads
  2062 0000136B 66A3[841F0500]                          mov	word [_@rle_point], ax
  2063 00001371 C1E810                                  shr	eax, 16
  2064 00001374 A3[8C1F0500]                            mov	[_@@rle_val], eax
  2065 00001379 E922FFFFFF                              jmp	.rle_back_quads
  2066                                  
  2067                                  .lop_j_near_end:
  2068 0000137E 89F0                                    mov     eax, esi
  2069 00001380 2B05[48F40000]                          sub     eax, [mp3_bitstream_start]
  2070 00001386 0FBED5                                  movsx   edx, ch
  2071 00001389 F7DA                                    neg     edx
  2072 0000138B 8D44C2F0                                lea     eax, [edx+eax*8-16]
  2073 0000138F 3B4308                                  cmp     eax, [ebx+8]
  2074 00001392 0F82C1FCFFFF                            jb      .small_not_end@
  2075 00001398 E936FEFFFF                              jmp     .low_freq_next_i
  2076                                  
  2077                                  
  2078                                  ; =============== S U B R O U T I N E =======================================
  2079                                  
  2080                                  
  2081                                  mp3_compute_stereo:
  2082 0000139D 833D[6C9D0000]02                        cmp	dword [mp3_output_num_channels], 2 ; in: ebx=granule(s)
  2083 000013A4 7515                                    jnz	short .no_stereo
  2084 000013A6 833D[889D0000]02                        cmp	dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO
  2085                                                                          ; only MS stereo
  2086 000013AD 740D                                    jz	short mp3_compute_ms_stereo
  2087 000013AF F705[889D0000]0100-                     test	dword [mp3_hdr_mode_ext], 1 ; MODE_EXT_I_STEREO
  2087 000013B7 0000               
  2088                                                                          ; intensity stereo (optionally with MS stereo)
  2089 000013B9 7567                                    jnz	short mp3_compute_i_stereo
  2090                                  
  2091                                  .no_stereo:
  2092 000013BB C3                                      retn
  2093                                  
  2094                                  mp3_compute_ms_stereo:
  2095 000013BC F605[F0750000]10                        test    byte [cpuid_flags], 10h ; ms_stereo is most commonly used
  2096                                                                          ; the 1/sqrt(2) normalization factor is included
  2097                                                                          ; in the global gain
  2098 000013C3 740E                                    jz      short .no_rdtsc_supported ; timelog_start rdtsc_ms_stereo
  2099 000013C5 0F31                                    rdtsc
  2100 000013C7 2905[A8760000]                          sub     [rdtsc_ms_stereo], eax
  2101 000013CD 1915[AC760000]                          sbb     [rdtsc_ms_stereo+4], edx
  2102                                  
  2103                                  .no_rdtsc_supported:
  2104 000013D3 8DBBE0130000                            lea     edi, [ebx+5088] ; [ebx+$mp3gr_sb_hybrid+$mp3gr_entrysiz*2]
  2105                                                                          ; for ch1 (2nd channel)
  2106 000013D9 8B4B5C                                  mov     ecx, [ebx+92]   ; [ebx+$mp3gr_num_nonzero_hybrids] ; ch0
  2107 000013DC 8B839C130000                            mov     eax, [ebx+5020] ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)] ; ch1
  2108 000013E2 39C1                                    cmp     ecx, eax
  2109 000013E4 7702                                    ja      short .this_len
  2110 000013E6 89C1                                    mov     ecx, eax
  2111                                  
  2112                                  .this_len:
  2113 000013E8 E320                                    jecxz   .ms_stereo_done
  2114 000013EA 894B5C                                  mov     [ebx+92], ecx   ; [ebx+$mp3gr_num_nonzero_hybrids] ; ch0
  2115 000013ED 898B9C130000                            mov     [ebx+5020], ecx ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)] ; ch1
  2116                                  
  2117                                  .ms_stereo_lop:
  2118 000013F3 8B87C0ECFFFF                            mov     eax, [edi-4928] ; for i=0 to 576-1
  2119                                                                          ; [edi+@@ch0]
  2120                                                                          ; @@ch0 equ (-$mp3gr_entrysiz*2) ; granule for channel=0
  2121                                                                          ; tmp0 = granule.ch0.sb_hybrid[i]
  2122 000013F9 8B17                                    mov     edx, [edi]      ; @@ch1 equ 0 ; granule for channel=1
  2123                                                                          ; [edi+@@ch1]
  2124                                                                          ; tmp1 = granule.ch1.sb_hybrid[i]
  2125 000013FB 29D0                                    sub     eax, edx        ; tmp0 - tmp1
  2126 000013FD 8D1450                                  lea     edx, [eax+edx*2] ; tmp0 + tmp1
  2127 00001400 8997C0ECFFFF                            mov     [edi-4928], edx ; [edi+@@ch0]
  2128                                                                          ; granule.ch0.sb_hybrid[i] = tmp0 + tmp1
  2129 00001406 AB                                      stosd                   ; [edi+@@ch1]
  2130                                                                          ; granule.ch1.sb_hybrid[i] = tmp0 - tmp1
  2131 00001407 49                                      dec     ecx
  2132 00001408 75E9                                    jnz     short .ms_stereo_lop
  2133                                  
  2134                                  .ms_stereo_done:
  2135 0000140A F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_ms_stereo
  2136 00001411 740E                                    jz      short .no_rdtsc_supported@
  2137 00001413 0F31                                    rdtsc
  2138 00001415 0105[A8760000]                          add     [rdtsc_ms_stereo], eax
  2139 0000141B 1115[AC760000]                          adc     [rdtsc_ms_stereo+4], edx
  2140                                  
  2141                                  .no_rdtsc_supported@:
  2142 00001421 C3                                      retn
  2143                                  
  2144                                  mp3_compute_i_stereo:
  2145 00001422 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_i_stereo
  2146 00001429 740E                                    jz      short .no_rdtsc_supported@@@
  2147 0000142B 0F31                                    rdtsc
  2148 0000142D 2905[C0760000]                          sub     [rdtsc_i_stereo], eax
  2149 00001433 1915[C4760000]                          sbb     [rdtsc_i_stereo+4], edx
  2150                                  
  2151                                  .no_rdtsc_supported@@@:
  2152 00001439 C7435C40020000                          mov     dword [ebx+92], 576 ; ch0
  2153                                                                          ; [ebx+$mp3gr_num_nonzero_hybrids]
  2154 00001440 C7839C130000400200-                     mov     dword [ebx+5020], 576 ; ch1
  2154 00001449 00                 
  2155                                                                          ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)]
  2156 0000144A 8B4320                                  mov     eax, [ebx+32]   ; [ebx+$mp3gr_long_end]
  2157 0000144D A3[CC1F0500]                            mov     [_@@n_long_sfb], eax
  2158 00001452 B80D000000                              mov     eax, 13         ; 39/3
  2159 00001457 2B431C                                  sub     eax, [ebx+28]   ; [ebx+$mp3gr_short_start]
  2160 0000145A 8D0440                                  lea     eax, [eax+eax*2] ; mul3
  2161 0000145D A3[D01F0500]                            mov     [_@@n_short_sfb], eax
  2162 00001462 0305[CC1F0500]                          add     eax, [_@@n_long_sfb]
  2163 00001468 A3[D41F0500]                            mov     [_@@n_sfb], eax ;
  2164                                                                          ; n_sfb = gr->n_long_sfb + gr->n_short_sfb;
  2165 0000146D 803D[D01F0500]00                        cmp     byte [_@@n_short_sfb], 0
  2166 00001474 B801000000                              mov     eax, 1
  2167 00001479 7405                                    jz      short .without_short
  2168 0000147B B803000000                              mov     eax, 3          ; max_blocks = gr->n_short_sfb ? 3 : 1;
  2169                                  
  2170                                  .without_short:
  2171 00001480 A3[981F0500]                            mov     [_@@max_blocks], eax
  2172 00001485 BF[A01F0500]                            mov     edi, _@@sfb_array
  2173 0000148A A1[609D0000]                            mov     eax, [mp3_hdr_sample_rate_index] ; bstab
  2174 0000148F 6BC016                                  imul    eax, 22
  2175 00001492 8DB0[70800000]                          lea     esi, [mp3_band_size_long+eax]
  2176 00001498 8B0D[CC1F0500]                          mov     ecx, [_@@n_long_sfb]
  2177 0000149E F3A4                                    rep movsb
  2178 000014A0 A1[609D0000]                            mov     eax, [mp3_hdr_sample_rate_index]
  2179 000014A5 6BC00D                                  imul    eax, 13
  2180 000014A8 8DB0[40810000]                          lea     esi, [mp3_band_size_short+eax] ; merge lieff-style
  2181 000014AE 8B0D[D01F0500]                          mov     ecx, [_@@n_short_sfb]
  2182 000014B4 E30C                                    jecxz   .make_sfb_done ; doing that here is a bit slow,
  2183                                                                          ; it would be better to pre-compute
  2184                                                                          ; all merged-combinations
  2185 000014B6 03731C                                  add     esi, [ebx+28]   ; [ebx+$mp3gr_short_start]
  2186                                  
  2187                                  .make_sfb_lop:
  2188 000014B9 AC                                      lodsb
  2189 000014BA AA                                      stosb
  2190 000014BB AA                                      stosb
  2191 000014BC AA                                      stosb
  2192 000014BD 83E903                                  sub     ecx, 3
  2193 000014C0 75F7                                    jnz     short .make_sfb_lop
  2194                                  
  2195                                  .make_sfb_done:
  2196 000014C2 E888000000                              call    _@@find_top_bands ;
  2197                                                                          ; L3_stereo_top_band(left+576,gr->sfbtab,n_sfb,max_band);
  2198 000014C7 803D[CC1F0500]00                        cmp     byte [_@@n_long_sfb], 0
  2199 000014CE 7420                                    jz      short .without_long
  2200 000014D0 A1[941F0500]                            mov     eax, dword [_@@max_bands]
  2201 000014D5 38C4                                    cmp     ah, al          ; if (gr->n_long_sfb)
  2202 000014D7 7F02                                    jg      short .not_max1 ; max_band[0] = max_band[1] = max_band[2] = MINIMP3_MAX
  2203                                                                          ; (MINIMP3_MAX(max_band[0], max_band[1]), max_band[2]);
  2204 000014D9 88C4                                    mov     ah, al
  2205                                  
  2206                                  .not_max1:
  2207 000014DB C1E808                                  shr     eax, 8
  2208 000014DE 38C4                                    cmp     ah, al
  2209 000014E0 7F02                                    jg      short .not_max2
  2210 000014E2 88C4                                    mov     ah, al
  2211                                  
  2212                                  .not_max2:
  2213 000014E4 88E0                                    mov     al, ah
  2214 000014E6 C1E008                                  shl     eax, 8
  2215 000014E9 88E0                                    mov     al, ah
  2216 000014EB A3[941F0500]                            mov     dword [_@@max_bands], eax
  2217                                  
  2218                                  .without_long:
  2219 000014F0 31ED                                    xor     ebp, ebp        ; blk
  2220                                  
  2221                                  .adjust_last_prev_lop:
  2222 000014F2 8B15[D41F0500]                          mov     edx, [_@@n_sfb]
  2223 000014F8 2B15[981F0500]                          sub     edx, [_@@max_blocks] ; itop = n_sfb - max_blocks + blk
  2224 000014FE 01EA                                    add     edx, ebp
  2225 00001500 89D1                                    mov     ecx, edx
  2226 00001502 2B0D[981F0500]                          sub     ecx, [_@@max_blocks] ; prev = itop - max_blocks;
  2227 00001508 A1[8C9D0000]                            mov     eax, [mp3_hdr_flag_lsf]
  2228 0000150D 8D0440                                  lea     eax, [eax+eax*2] ; 0,1 --> 0,3
  2229                                                                          ; default_pos = HDR_TEST_MPEG1(hdr) ? 3
  2230 00001510 3403                                    xor     al, 3           ; 0,3 --> 3,0
  2231 00001512 363A8D[941F0500]                        cmp     cl, [ss:_@@max_bands+ebp]
  2232 00001519 7E07                                    jle     short .use_default_pos ; ist_pos[itop] = max_band[blk] >=
  2233                                                                          ; prev ? default_pos : ist_pos[prev]
  2234 0000151B 8A840BB0130000                          mov     al, [ebx+ecx+5040] ; [ebx+@@right+$mp3gr_scale_factors+ecx]
  2235                                  
  2236                                  .use_default_pos:
  2237 00001522 888413B0130000                          mov     [ebx+edx+5040], al ; [ebx+@@right+$mp3gr_scale_factors+edx]
  2238 00001529 45                                      inc     ebp             ; blk
  2239 0000152A 3B2D[981F0500]                          cmp     ebp, [_@@max_blocks]
  2240 00001530 72C0                                    jb      short .adjust_last_prev_lop
  2241 00001532 E867000000                              call    _@@apply_i_stereo
  2242 00001537 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_i_stereo
  2243 0000153E 740E                                    jz      short .no_rdtsc_supported@@@@
  2244 00001540 0F31                                    rdtsc
  2245 00001542 0105[C0760000]                          add     [rdtsc_i_stereo], eax
  2246 00001548 1115[C4760000]                          adc     [rdtsc_i_stereo+4], edx
  2247                                  
  2248                                  .no_rdtsc_supported@@@@:
  2249 0000154E C3                                      retn
  2250                                  
  2251                                  
  2252                                  ; =============== S U B R O U T I N E =======================================
  2253                                  
  2254                                  
  2255                                  _@@find_top_bands:
  2256 0000154F C705[941F0500]FFFF-                     mov     dword [_@@max_bands], 0FFFFFFh ; set maxband[0..2]=(-1)
  2256 00001557 FF00               
  2257 00001559 8DB3E0130000                            lea     esi, [ebx+5088] ; [ebx+@@right+$mp3gr_sb_hybrid]
  2258 0000155F 31D2                                    xor     edx, edx
  2259                                  
  2260                                  .find_top_lop_iii:                    
  2261 00001561 31C9                                    xor     ecx, ecx        ; for (i = 0; i < nbands; i++)
  2262                                  
  2263                                  .find_top_lop_kkk:                    
  2264 00001563 8B048E                                  mov     eax, [esi+ecx*4] ; for (k = 0; k < sfb[i]; k += 2)
  2265 00001566 0B448E04                                or      eax, [esi+ecx*4+4]
  2266 0000156A 750D                                    jnz     short .found_nonzero
  2267 0000156C 83C102                                  add     ecx, 2
  2268 0000156F 3A8A[A01F0500]                          cmp     cl, [_@@sfb_array+edx]
  2269 00001575 72EC                                    jb      short .find_top_lop_kkk
  2270 00001577 EB11                                    jmp     short .find_top_next
  2271                                  
  2272                                  .found_nonzero:
  2273 00001579 89D0                                    mov     eax, edx
  2274 0000157B F635[AA8A0000]                          div     byte [_@@const_3]
  2275 00001581 0FB6C4                                  movzx   eax, ah         ; remainder (mod 3)
  2276 00001584 8890[941F0500]                          mov     [_@@max_bands+eax], dl ; max_bands[0..2]=i
  2277                                  
  2278                                  .find_top_next:
  2279 0000158A 0FB682[A01F0500]                        movzx   eax, byte [_@@sfb_array+edx]
  2280 00001591 8D3486                                  lea     esi, [esi+eax*4]
  2281 00001594 42                                      inc     edx             ; next
  2282 00001595 3B15[D41F0500]                          cmp     edx, [_@@n_sfb]
  2283 0000159B 72C4                                    jb      short .find_top_lop_iii
  2284 0000159D C3                                      retn
  2285                                  
  2286                                  ; =============== S U B R O U T I N E =======================================
  2287                                  
  2288                                  
  2289                                  _@@apply_i_stereo:
  2290 0000159E B8[30840000]                            mov     eax, mp3_is_table_normal
  2291 000015A3 B907000000                              mov     ecx, 7
  2292 000015A8 833D[8C9D0000]00                        cmp     dword [mp3_hdr_flag_lsf], 0
  2293 000015AF 7425                                    jz      short .this_lsf
  2294 000015B1 8B8354130000                            mov     eax, [ebx+4948] ; [ebx+@@right+$mp3gr_scalefac_compress]
  2295 000015B7 83E001                                  and     eax, 1          ; bit0
  2296 000015BA F705[889D0000]0200-                     test    dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO
  2296 000015C2 0000               
  2297 000015C4 7403                                    jz      short .no_ms
  2298 000015C6 83C802                                  or      eax, 2          ; bit1=mul_1.414
  2299                                  
  2300                                  .no_ms:
  2301 000015C9 C1E009                                  shl     eax, 9          ; N*40h*2*4
  2302 000015CC 05[4CE70400]                            add     eax, mp3_is_table_lsf
  2303 000015D1 B940000000                              mov     ecx, 64         ; max (must be below NO_INTENSITY_FLAG)
  2304                                  
  2305                                  .this_lsf:
  2306 000015D6 890D[9C1F0500]                          mov     [_@@max_pos], ecx ; 7 or 64
  2307 000015DC A3[C81F0500]                            mov     [_@@is_tab], eax ; table
  2308 000015E1 8DB3A0000000                            lea     esi, [ebx+160]  ; [ebx+$mp3gr_sb_hybrid]
  2309 000015E7 31C9                                    xor     ecx, ecx        ; iii ; for (i = 0; sfb[i]; i++)
  2310                                  
  2311                                  .apply_lop_i:
  2312 000015E9 0FB6A9[A01F0500]                        movzx   ebp, byte [_@@sfb_array+ecx] ; if ((int)i > max_band[i % 3]
  2313                                                                          ; && ipos < max_pos)
  2314 000015F0 89C8                                    mov     eax, ecx
  2315 000015F2 F635[AA8A0000]                          div     byte [_@@const_3] ; max_band[i % 3]
  2316 000015F8 0FB6C4                                  movzx   eax, ah         ; remainder (mod 3)
  2317 000015FB 3A88[941F0500]                          cmp     cl, [_@@max_bands+eax] ; iii,max_bands[0..2];
  2318 00001601 7E38                                    jle     short .apply_ms_stereo
  2319 00001603 0FB6BC0BB0130000                        movzx   edi, byte [ebx+ecx+5040] ; [ebx+@@right+$mp3gr_scale_factors+ecx]
  2320                                                                          ; @@right = $mp3gr_entrysiz*2 = 4928
  2321                                                                          ; $mp3gr_scale_factors = 112
  2322 0000160B 3B3D[9C1F0500]                          cmp     edi, [_@@max_pos] ; check ipos
  2323 00001611 7328                                    jnb     short .apply_ms_stereo
  2324 00001613 C1E703                                  shl     edi, 3          ; mul 2*4
  2325 00001616 033D[C81F0500]                          add     edi, [_@@is_tab]
  2326                                  
  2327                                  .apply_pan_lop:
  2328 0000161C 8B06                                    mov     eax, [esi]      ; tmp = granule.ch0.sb_hybrid
  2329 0000161E C1E002                                  shl     eax, 2
  2330 00001621 F76F04                                  imul    dword [edi+4] ; v1
  2331 00001624 899640130000                            mov     [esi+4928], edx ; [esi+@@right]
  2332                                                                          ; granule.ch1.sb_hybrid = tmp*v1
  2333 0000162A 8B06                                    mov     eax, [esi]      ; tmp = granule.ch0.sb_hybrid
  2334 0000162C C1E002                                  shl     eax, 2
  2335 0000162F F72F                                    imul    dword [edi] ; v0
  2336 00001631 8916                                    mov     [esi], edx      ; granule.ch0.sb_hybrid = tmp*v0
  2337 00001633 83C604                                  add     esi, 4
  2338 00001636 4D                                      dec     ebp
  2339 00001637 75E3                                    jnz     short .apply_pan_lop
  2340 00001639 EB2C                                    jmp     short .apply_next
  2341                                  
  2342                                  .apply_ms_stereo:
  2343 0000163B F705[889D0000]0200-                     test	dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO
  2343 00001643 0000               
  2344 00001645 741D                                    jz	short .apply_none
  2345                                  
  2346                                  .ms_stereo_lop:
  2347 00001647 8B06                                    mov     eax, [esi]      ; tmp0 = granule.ch0.sb_hybrid[i]
  2348 00001649 8B9640130000                            mov     edx, [esi+4928] ; [esi+@@right]
  2349                                                                          ; tmp1 = granule.ch1.sb_hybrid[i]
  2350 0000164F 29D0                                    sub     eax, edx        ; tmp0 - tmp1
  2351 00001651 8D1450                                  lea     edx, [eax+edx*2] ; tmp0 + tmp1
  2352 00001654 8916                                    mov     [esi], edx      ; granule.ch0.sb_hybrid[i] = tmp0 + tmp1
  2353 00001656 898640130000                            mov     [esi+4928], eax ; [esi+@@right]
  2354                                                                          ; granule.ch1.sb_hybrid[i] = tmp0 - tmp1
  2355 0000165C 83C604                                  add     esi, 4
  2356 0000165F 4D                                      dec     ebp
  2357 00001660 75E5                                    jnz     short .ms_stereo_lop
  2358 00001662 EB03                                    jmp     short .apply_next
  2359                                  
  2360                                  .apply_none:
  2361 00001664 8D34AE                                  lea     esi, [esi+ebp*4] ; skip, keep unchanged
  2362                                  
  2363                                  .apply_next:
  2364 00001667 41                                      inc     ecx             ; iii
  2365 00001668 3B0D[D41F0500]                          cmp     ecx, [_@@n_sfb]
  2366 0000166E 0F8275FFFFFF                            jb      .apply_lop_i   ; next
  2367 00001674 C3                                      retn
  2368                                  
  2369                                  ; =============== S U B R O U T I N E =======================================
  2370                                  
  2371                                  
  2372                                  mp3_reorder_block:
  2373 00001675 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_reorder
  2374 0000167C 740E                                    jz      short .no_rdtsc_supported
  2375 0000167E 0F31                                    rdtsc
  2376 00001680 2905[D8760000]                          sub     [rdtsc_reorder], eax
  2377 00001686 1915[DC760000]                          sbb     [rdtsc_reorder+4], edx
  2378                                  
  2379                                  .no_rdtsc_supported:
  2380 0000168C 807B2C02                                cmp	byte [ebx+44], 2 ; ebx+$mp3gr_block_type] ; only for type 2
  2381 00001690 7565                                    jnz	short .no_reorder
  2382 00001692 8DB3A0000000                            lea	esi, [ebx+160]  ; [ebx+$mp3gr_sb_hybrid] ; ptr+0
  2383 00001698 807B3000                                cmp	byte [ebx+48], 0 ; [ebx+$mp3gr_switch_point]
  2384 0000169C 7412                                    jz	short .this_src
  2385 0000169E 81C690000000                            add	esi, 144        ; 36*4 ; ptr+36*4
  2386 000016A4 833D[609D0000]08                        cmp	dword [mp3_hdr_sample_rate_index], 8
  2387 000016AB 7503                                    jnz	short .this_src
  2388 000016AD 83C630                                  add	esi, 48         ; 12*4 ; additionally to above 36*4 ; ptr+48*4
  2389                                  
  2390                                  .this_src:
  2391 000016B0 8B531C                                  mov     edx, [ebx+28]   ; [ebx+$mp3gr_short_start] ; can be 13
  2392 000016B3 83FA0D                                  cmp     edx, 13
  2393 000016B6 733F                                    jnb     short .no_reorder
  2394 000016B8 C7435C40020000                          mov     dword [ebx+92], 576 ; [ebx+$mp3gr_num_nonzero_hybrids]
  2395                                  
  2396                                  .outer_lop:
  2397 000016BF A1[609D0000]                            mov     eax, [mp3_hdr_sample_rate_index]
  2398 000016C4 6BC00D                                  imul    eax, 13         ; X*13
  2399 000016C7 0FB68C10[40810000]                      movzx   ecx, byte [mp3_band_size_short+eax+edx] ; [X*13+Y]
  2400 000016CF BF[D81F0500]                            mov     edi, _@@tmp
  2401 000016D4 60                                      pusha
  2402 000016D5 89CA                                    mov     edx, ecx        ; step=len (4..44) ; copy LEN*3 dwords to tmp
  2403                                  
  2404                                  .inner_lop:
  2405 000016D7 8B06                                    mov     eax, [esi]
  2406 000016D9 AB                                      stosd
  2407 000016DA 8B0496                                  mov     eax, [esi+edx*4] ; copy 3 dwords
  2408 000016DD AB                                      stosd
  2409 000016DE 8B04D6                                  mov     eax, [esi+edx*8]
  2410 000016E1 AB                                      stosd
  2411 000016E2 83C604                                  add     esi, 4
  2412 000016E5 E2F0                                    loop    .inner_lop
  2413 000016E7 61                                      popa
  2414 000016E8 8D0C49                                  lea     ecx, [ecx+ecx*2] ; len*3
  2415 000016EB 87FE                                    xchg    esi, edi        ; copy LEN*3 dwords back from tmp
  2416 000016ED F3A5                                    rep movsd
  2417 000016EF 87FE                                    xchg    esi, edi
  2418 000016F1 42                                      inc     edx
  2419 000016F2 83FA0D                                  cmp     edx, 13
  2420 000016F5 72C8                                    jb      short .outer_lop ; next
  2421                                  
  2422                                  .no_reorder:
  2423 000016F7 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  2424 000016FE 740E                                    jz      short .no_rdtsc_supported@ ; timelog_end rdtsc_reorder
  2425 00001700 0F31                                    rdtsc
  2426 00001702 0105[D8760000]                          add     [rdtsc_reorder], eax
  2427 00001708 1115[DC760000]                          adc     [rdtsc_reorder+4], edx
  2428                                  
  2429                                  .no_rdtsc_supported@:
  2430 0000170E C3                                      retn
  2431                                  
  2432                                  
  2433                                  ; =============== S U B R O U T I N E =======================================
  2434                                  
  2435                                  
  2436                                  mp3_compute_antialias:
  2437 0000170F F605[F0750000]10                        test    byte [cpuid_flags], 10h ; in: ebx=granule
  2438 00001716 740E                                    jz      short .no_rdtsc_supported ; timelog_start rdtsc_antialias
  2439 00001718 0F31                                    rdtsc
  2440 0000171A 2905[F0760000]                          sub     [rdtsc_antialias], eax
  2441 00001720 1915[F4760000]                          sbb     [rdtsc_antialias+4], edx
  2442                                  
  2443                                  .no_rdtsc_supported:
  2444 00001726 8B435C                                  mov     eax, [ebx+92]   ; [ebx+$mp3gr_num_nonzero_hybrids]
  2445 00001729 83C008                                  add     eax, 8          ; 9-1 ; 0..576+8
  2446 0000172C 31D2                                    xor     edx, edx
  2447 0000172E B909000000                              mov     ecx, 9
  2448 00001733 F7F1                                    div     ecx             ; (num/9) ; 0..64
  2449 00001735 894360                                  mov     [ebx+60h], eax
  2450 00001738 D1E8                                    shr     eax, 1          ; (num/18) ; 0..32
  2451 0000173A 0F84B8010000                            jz      .no_antialias  ; 0 (when num/9 = 0..1)
  2452 00001740 89C1                                    mov     ecx, eax        ; 1..32
  2453 00001742 C1E805                                  shr     eax, 5          ; 0..1
  2454 00001745 29C1                                    sub     ecx, eax        ; 1..31 ; len excluding zeropadding
  2455 00001747 807B2C02                                cmp     byte [ebx+44], 2 ; [ebx+$mp3gr_block_type]
  2456 0000174B 750F                                    jnz     short .this_len ; antialias only "long" bands
  2457 0000174D 807B3000                                cmp     byte [ebx+48], 0 ; [ebx+$mp3gr_switch_point]
  2458 00001751 0F84A1010000                            jz      .no_antialias
  2459 00001757 B901000000                              mov     ecx, 1          ; check this for 8000Hz case
  2460                                  
  2461                                  .this_len:
  2462 0000175C 8D440901                                lea     eax, [1+ecx*2]
  2463 00001760 394360                                  cmp     [ebx+96], eax   ; [ebx+$mp3gr_num_nonzero_hybrids_div9]
  2464 00001763 7703                                    ja      short .is_bigger
  2465 00001765 894360                                  mov     [ebx+96], eax   ; opdate highest
  2466                                                                          ; (nonzero required for l3-si_huff.bit)
  2467                                  
  2468                                  .is_bigger:
  2469 00001768 53                                      push    ebx
  2470 00001769 8D9BA0000000                            lea     ebx, [ebx+160]  ; [ebx+$mp3gr_sb_hybrid]
  2471                                  
  2472                                  .lop:
  2473 0000176F 83C348                                  add     ebx, 72         ; 18*4
  2474 00001772 8B73FC                                  mov     esi, [ebx-4]    ; IRP nn,0,1,2,3,4,5,6,7 ; INT_AA(nn=0..7)
  2475 00001775 8B3B                                    mov     edi, [ebx]      ; @@def_csa macro nn,cs,ca
  2476                                                                          ;   mp3_csa_&nn&_cs equ cs
  2477                                                                          ;   mp3_csa_&nn&_ca equ ca
  2478                                                                          ;  endm
  2479                                                                          ; constants for mp3_csa_table
  2480 00001777 C1E602                                  shl     esi, 2          ; tmp0 = ptr[-nn-1]*4
  2481 0000177A C1E702                                  shl     edi, 2          ; tmp1 = ptr[+nn]*4
  2482 0000177D 8D043E                                  lea     eax, [esi+edi]  ; tmp2 = tmp0+tmp1
  2483 00001780 BD032AE136                              mov     ebp, 36E12A03h  ; @@def_csa 0,36E12A03h,-20ED7F9Ah  ;-0.6
  2484                                                                          ; mp3_csa_&nn&_cs
  2485 00001785 F7ED                                    imul    ebp             ; tmp2 = (tmp2*csa[0])
  2486 00001787 89D5                                    mov     ebp, edx
  2487 00001789 B8635631A8                              mov     eax, -57CEA99Dh ; mp3_csa_&nn&_ca-mp3_csa_&nn&_cs
  2488 0000178E F7EE                                    imul    esi             ; tmp0 = (tmp2+(tmp0*csa[3]))
  2489 00001790 01EA                                    add     edx, ebp
  2490 00001792 8913                                    mov     [ebx], edx      ; [ebx+(nn)*4]
  2491 00001794 B869AAF315                              mov     eax, 15F3AA69h  ; mp3_csa_&nn&_ca+mp3_csa_&nn&_cs
  2492 00001799 F7EF                                    imul    edi             ; tmp1 = (tmp2-(tmp1*csa[2]))
  2493 0000179B 29D5                                    sub     ebp, edx
  2494 0000179D 896BFC                                  mov     [ebx-4], ebp    ; [ebx-(nn+1)*4]
  2495 000017A0 8B73F8                                  mov     esi, [ebx-8]
  2496 000017A3 8B7B04                                  mov     edi, [ebx+4]
  2497 000017A6 C1E602                                  shl     esi, 2
  2498 000017A9 C1E702                                  shl     edi, 2
  2499 000017AC 8D043E                                  lea     eax, [esi+edi]
  2500 000017AF BDFD756E38                              mov     ebp, 386E75FDh  ; @@def_csa 1,386E75FDh,-1E30DB48h  ;-0.535
  2501 000017B4 F7ED                                    imul    ebp
  2502 000017B6 89D5                                    mov     ebp, edx
  2503 000017B8 B8BBAE60A9                              mov     eax, -569F5145h
  2504 000017BD F7EE                                    imul    esi
  2505 000017BF 01EA                                    add     edx, ebp
  2506 000017C1 895304                                  mov     [ebx+4], edx    ; [ebx+(nn)*4]
  2507 000017C4 B8B59A3D1A                              mov     eax, 1A3D9AB5h
  2508 000017C9 F7EF                                    imul    edi
  2509 000017CB 29D5                                    sub     ebp, edx
  2510 000017CD 896BF8                                  mov     [ebx-8], ebp    ; [ebx-(nn+1)*4]
  2511 000017D0 8B73F4                                  mov     esi, [ebx-12]
  2512 000017D3 8B7B08                                  mov     edi, [ebx+8]
  2513 000017D6 C1E602                                  shl     esi, 2
  2514 000017D9 C1E702                                  shl     edi, 2
  2515 000017DC 8D043E                                  lea     eax, [esi+edi]
  2516 000017DF BD3EB7C63C                              mov     ebp, 3CC6B73Eh  ;  @@def_csa 2,3CC6B73Eh,-140E604Fh  ;-0.33
  2517 000017E4 F7ED                                    imul    ebp
  2518 000017E6 89D5                                    mov     ebp, edx
  2519 000017E8 B873E82AAF                              mov     eax, -50D5178Dh
  2520 000017ED F7EE                                    imul    esi
  2521 000017EF 01EA                                    add     edx, ebp
  2522 000017F1 895308                                  mov     [ebx+8], edx    ; [ebx+(nn)*4]
  2523 000017F4 B8EF56B828                              mov     eax, 28B856EFh
  2524 000017F9 F7EF                                    imul    edi
  2525 000017FB 29D5                                    sub     ebp, edx
  2526 000017FD 896BF4                                  mov     [ebx-12], ebp   ; [ebx-(nn+1)*4]
  2527 00001800 8B73F0                                  mov     esi, [ebx-16]
  2528 00001803 8B7B0C                                  mov     edi, [ebx+12]
  2529 00001806 C1E602                                  shl     esi, 2
  2530 00001809 C1E702                                  shl     edi, 2
  2531 0000180C 8D043E                                  lea     eax, [esi+edi]
  2532 0000180F BD55A0EE3E                              mov     ebp, 3EEEA055h  ; @@def_csa 3,3EEEA055h,-0BA47742h  ;-0.185
  2533 00001814 F7ED                                    imul    ebp
  2534 00001816 89D5                                    mov     ebp, edx
  2535 00001818 B869E86CB5                              mov     eax, -4A931797h
  2536 0000181D F7EE                                    imul    esi
  2537 0000181F 01EA                                    add     edx, ebp
  2538 00001821 89530C                                  mov     [ebx+12], edx   ; [ebx+(nn)*4]
  2539 00001824 B813294A33                              mov     eax, 334A2913h
  2540 00001829 F7EF                                    imul    edi
  2541 0000182B 29D5                                    sub     ebp, edx
  2542 0000182D 896BF0                                  mov     [ebx-16], ebp   ; [ebx-(nn+1)*4]
  2543 00001830 8B73EC                                  mov     esi, [ebx-20]   ; ebx-(nn+1)*4] ; tmp0 = ptr[-nn-1]
  2544 00001833 8B7B10                                  mov     edi, [ebx+16]   ; [ebx+(nn)*4] ; tmp1 = ptr[+nn]
  2545 00001836 C1E602                                  shl     esi, 2
  2546 00001839 C1E702                                  shl     edi, 2
  2547 0000183C 8D043E                                  lea     eax, [esi+edi]  ; tmp2 = tmp0+tmp1
  2548 0000183F BD5C90B63F                              mov     ebp, 3FB6905Ch  ; @@def_csa 4,3FB6905Ch,-060D80E9h  ;-0.095
  2549 00001844 F7ED                                    imul    ebp             ; tmp2 = (tmp2*csa[0])
  2550 00001846 89D5                                    mov     ebp, edx
  2551 00001848 B8BBEE3BBA                              mov     eax, -45C41145h
  2552 0000184D F7EE                                    imul    esi             ; tmp0 = (tmp2+(tmp0*csa[3]))
  2553 0000184F 01EA                                    add     edx, ebp
  2554 00001851 895310                                  mov     [ebx+16], edx   ; [ebx+(nn)*4]
  2555 00001854 B8730FA939                              mov     eax, 39A90F73h
  2556 00001859 F7EF                                    imul    edi             ; tmp1 = (tmp2-(tmp1*csa[2]))
  2557 0000185B 29D5                                    sub     ebp, edx
  2558 0000185D 896BEC                                  mov     [ebx-20], ebp   ; [ebx-(nn+1)*4]
  2559 00001860 8B73E8                                  mov     esi, [ebx-24]
  2560 00001863 8B7B14                                  mov     edi, [ebx+20]
  2561 00001866 C1E602                                  shl     esi, 2
  2562 00001869 C1E702                                  shl     edi, 2
  2563 0000186C 8D043E                                  lea     eax, [esi+edi]
  2564 0000186F BD213FF23F                              mov     ebp, 3FF23F21h  ; @@def_csa 5,3FF23F21h,-029F2E1Bh  ;-0.041
  2565 00001874 F7ED                                    imul    ebp
  2566 00001876 89D5                                    mov     ebp, edx
  2567 00001878 B8C4926EBD                              mov     eax, -42916D3Ch
  2568 0000187D F7EE                                    imul    esi
  2569 0000187F 01EA                                    add     edx, ebp
  2570 00001881 895314                                  mov     [ebx+20], edx   ; [ebx+(nn)*4]
  2571 00001884 B80611533D                              mov     eax, 3D531106h
  2572 00001889 F7EF                                    imul    edi
  2573 0000188B 29D5                                    sub     ebp, edx
  2574 0000188D 896BE8                                  mov     [ebx-24], ebp   ; [ebx-(nn+1)*4]
  2575 00001890 8B73E4                                  mov     esi, [ebx-28]
  2576 00001893 8B7B18                                  mov     edi, [ebx+24]
  2577 00001896 C1E602                                  shl     esi, 2
  2578 00001899 C1E702                                  shl     edi, 2
  2579 0000189C 8D043E                                  lea     eax, [esi+edi]
  2580 0000189F BD3259FE3F                              mov     ebp, 3FFE5932h  ; @@def_csa 6,3FFE5932h,-00E8A11Ch  ;-0.0142
  2581 000018A4 F7ED                                    imul    ebp
  2582 000018A6 89D5                                    mov     ebp, edx
  2583 000018A8 B8B20519BF                              mov     eax, -40E6FA4Eh
  2584 000018AD F7EE                                    imul    esi
  2585 000018AF 01EA                                    add     edx, ebp
  2586 000018B1 895318                                  mov     [ebx+24], edx   ; [ebx+(nn)*4]
  2587 000018B4 B816B8153F                              mov     eax, 3F15B816h
  2588 000018B9 F7EF                                    imul    edi
  2589 000018BB 29D5                                    sub     ebp, edx
  2590 000018BD 896BE4                                  mov     [ebx-28], ebp   ; [ebx-(nn+1)*4]
  2591 000018C0 8B73E0                                  mov     esi, [ebx-32]
  2592 000018C3 8B7B1C                                  mov     edi, [ebx+28]
  2593 000018C6 C1E602                                  shl     esi, 2
  2594 000018C9 C1E702                                  shl     edi, 2
  2595 000018CC 8D043E                                  lea     eax, [esi+edi]
  2596 000018CF BD4BE3FF3F                              mov     ebp, 3FFFE34Bh  ; @@def_csa 7,3FFFE34Bh,-003C9ED1h  ;-0.0037
  2597 000018D4 F7ED                                    imul    ebp
  2598 000018D6 89D5                                    mov     ebp, edx
  2599 000018D8 B8E47DC3BF                              mov     eax, -403C821Ch
  2600 000018DD F7EE                                    imul    esi
  2601 000018DF 01EA                                    add     edx, ebp
  2602 000018E1 89531C                                  mov     [ebx+28], edx   ; [ebx+(nn)*4]
  2603 000018E4 B87A44C33F                              mov     eax, 3FC3447Ah
  2604 000018E9 F7EF                                    imul    edi
  2605 000018EB 29D5                                    sub     ebp, edx
  2606 000018ED 896BE0                                  mov     [ebx-32], ebp   ; [ebx-(nn+1)*4]
  2607 000018F0 49                                      dec     ecx
  2608 000018F1 0F8578FEFFFF                            jnz     .lop
  2609 000018F7 5B                                      pop     ebx
  2610                                  
  2611                                  .no_antialias:
  2612 000018F8 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  2613 000018FF 740E                                    jz      short .no_rdtsc_supported@
  2614 00001901 0F31                                    rdtsc
  2615 00001903 0105[F0760000]                          add     [rdtsc_antialias], eax
  2616 00001909 1115[F4760000]                          adc     [rdtsc_antialias+4], edx
  2617                                  
  2618                                  .no_rdtsc_supported@:
  2619 0000190F C3                                      retn
  2620                                  
  2621                                  
  2622                                  ; =============== S U B R O U T I N E =======================================
  2623                                  
  2624                                  
  2625                                  mp3_imdct36:
  2626 00001910 8B06                                    mov     eax, [esi]      ; in: esi=src (sb_hybrid)
  2627                                                                          ; in: edi=dst (sb_samples)
  2628                                                                          ; in: ebx=buf (mdct_buf)
  2629                                                                          ; in: ebp=win (mdct_win)
  2630                                                                          ;
  2631                                                                          ; [esi+0*4]
  2632 00001912 8B5604                                  mov     edx, [esi+4]    ; IRP i,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
  2633 00001915 01D0                                    add     eax, edx        ; IF i AND 1 (*) ; mov edx,[esi+i*4] ; val[i]
  2634                                                                          ;  add val[i-1]
  2635 00001917 894604                                  mov     [esi+4], eax    ;  IF i GT 1
  2636                                                                          ;   add  ecx,eax ; add val[i-2]
  2637                                                                          ;   mov  [esi+(i)*4],ecx
  2638                                                                          ;  ELSE
  2639                                                                          ;   mov  [esi+(i)*4],eax
  2640 0000191A 89C1                                    mov     ecx, eax        ;  memorize as val[i-2]
  2641 0000191C 8B4608                                  mov     eax, [esi+8]    ; ELSE (*) ; [esi+i*4] ; val[i]
  2642 0000191F 01C2                                    add     edx, eax        ;  add val[i-1]
  2643 00001921 895608                                  mov     [esi+8], edx    ; [esi+(i)*4
  2644 00001924 8B560C                                  mov     edx, [esi+12]
  2645 00001927 01D0                                    add     eax, edx
  2646 00001929 01C1                                    add     ecx, eax
  2647 0000192B 894E0C                                  mov     [esi+12], ecx
  2648 0000192E 89C1                                    mov     ecx, eax
  2649 00001930 8B4610                                  mov     eax, [esi+16]
  2650 00001933 01C2                                    add     edx, eax
  2651 00001935 895610                                  mov     [esi+16], edx
  2652 00001938 8B5614                                  mov     edx, [esi+20]
  2653 0000193B 01D0                                    add     eax, edx
  2654 0000193D 01C1                                    add     ecx, eax
  2655 0000193F 894E14                                  mov     [esi+20], ecx
  2656 00001942 89C1                                    mov     ecx, eax
  2657 00001944 8B4618                                  mov     eax, [esi+24]
  2658 00001947 01C2                                    add     edx, eax
  2659 00001949 895618                                  mov     [esi+24], edx
  2660 0000194C 8B561C                                  mov     edx, [esi+28]
  2661 0000194F 01D0                                    add     eax, edx
  2662 00001951 01C1                                    add     ecx, eax
  2663 00001953 894E1C                                  mov     [esi+28], ecx
  2664 00001956 89C1                                    mov     ecx, eax
  2665 00001958 8B4620                                  mov     eax, [esi+32]
  2666 0000195B 01C2                                    add     edx, eax
  2667 0000195D 895620                                  mov     [esi+32], edx
  2668 00001960 8B5624                                  mov     edx, [esi+36]
  2669 00001963 01D0                                    add     eax, edx
  2670 00001965 01C1                                    add     ecx, eax
  2671 00001967 894E24                                  mov     [esi+36], ecx
  2672 0000196A 89C1                                    mov     ecx, eax
  2673 0000196C 8B4628                                  mov     eax, [esi+40]
  2674 0000196F 01C2                                    add     edx, eax
  2675 00001971 895628                                  mov     [esi+40], edx
  2676 00001974 8B562C                                  mov     edx, [esi+44]
  2677 00001977 01D0                                    add     eax, edx
  2678 00001979 01C1                                    add     ecx, eax
  2679 0000197B 894E2C                                  mov     [esi+44], ecx
  2680 0000197E 89C1                                    mov     ecx, eax
  2681 00001980 8B4630                                  mov     eax, [esi+48]
  2682 00001983 01C2                                    add     edx, eax
  2683 00001985 895630                                  mov     [esi+48], edx
  2684 00001988 8B5634                                  mov     edx, [esi+52]
  2685 0000198B 01D0                                    add     eax, edx
  2686 0000198D 01C1                                    add     ecx, eax
  2687 0000198F 894E34                                  mov     [esi+52], ecx
  2688 00001992 89C1                                    mov     ecx, eax
  2689 00001994 8B4638                                  mov     eax, [esi+56]
  2690 00001997 01C2                                    add     edx, eax
  2691 00001999 895638                                  mov     [esi+56], edx
  2692 0000199C 8B563C                                  mov     edx, [esi+60]
  2693 0000199F 01D0                                    add     eax, edx
  2694 000019A1 01C1                                    add     ecx, eax
  2695 000019A3 894E3C                                  mov     [esi+60], ecx
  2696 000019A6 89C1                                    mov     ecx, eax
  2697 000019A8 8B4640                                  mov     eax, [esi+64]
  2698 000019AB 01C2                                    add     edx, eax
  2699 000019AD 895640                                  mov     [esi+64], edx
  2700 000019B0 8B5644                                  mov     edx, [esi+68]
  2701 000019B3 01D0                                    add     eax, edx
  2702 000019B5 01C1                                    add     ecx, eax
  2703 000019B7 894E44                                  mov     [esi+68], ecx
  2704 000019BA 89C1                                    mov     ecx, eax
  2705 000019BC 53                                      push    ebx
  2706 000019BD 55                                      push    ebp
  2707 000019BE 57                                      push    edi
  2708 000019BF 8B0E                                    mov     ecx, [esi]      ; IRP j,0,1
  2709 000019C1 8B5E30                                  mov     ebx, [esi+48]   ; t1 = [esi+(0*2+j)*4], t0 = [esi+(6*2+j)*4]
  2710 000019C4 8B7E20                                  mov     edi, [esi+32]   ; t2 = [esi+(4*2+j)*4]
  2711 000019C7 037E40                                  add     edi, [esi+64]   ; + [esi+(8*2+j)*4]
  2712 000019CA 2B7E10                                  sub     edi, [esi+16]   ; - [esi+(2*2+j)*4]
  2713 000019CD 8D2C4B                                  lea     ebp, [ebx+ecx*2] ; t2 = src[4*2+j] + src[8*2+j] - src[2*2+j]
  2714                                                                          ; t3 = [t1*2+t0]
  2715 000019D0 D1FD                                    sar     ebp, 1          ; sar @@t3,1
  2716 000019D2 29D9                                    sub     ecx, ebx        ; sub @@t1,@@t0
  2717 000019D4 89C8                                    mov     eax, ecx        ; @@SUM [@@tmp+(16+j)*4],@@t1,add,@@t2
  2718 000019D6 01F8                                    add     eax, edi
  2719 000019D8 A3[24290500]                            mov     [_@@@tmp+40h], eax ; [@@tmp+(16+j)*4]
  2720 000019DD D1FF                                    sar     edi, 1          ; sar @@t2,1
  2721 000019DF 89C8                                    mov     eax, ecx        ; @@SUM [@@tmp+(6+j)*4],@@t1,sub,@@t2
  2722 000019E1 29F8                                    sub     eax, edi
  2723 000019E3 A3[FC280500]                            mov     [_@@@tmp+18h], eax ; [@@tmp+(6+j)*4]
  2724 000019E8 8B4610                                  mov     eax, [esi+16]   ; [esi+(4*2+j)*4]
  2725 000019EB 034620                                  add     eax, [esi+32]   ; [esi+(2*2+j)*4]
  2726 000019EE D1E0                                    shl     eax, 1
  2727 000019F0 BA0AD94778                              mov     edx, 7847D90Ah  ; C2
  2728 000019F5 F7EA                                    imul    edx
  2729 000019F7 89D3                                    mov     ebx, edx
  2730 000019F9 8B4620                                  mov     eax, [esi+32]
  2731 000019FC 2B4640                                  sub     eax, [esi+64]
  2732 000019FF BA04CB8BD3                              mov     edx, 0D38BCB04h ; negC8
  2733 00001A04 F7EA                                    imul    edx
  2734 00001A06 89D1                                    mov     ecx, edx
  2735 00001A08 8B4610                                  mov     eax, [esi+16]
  2736 00001A0B 034640                                  add     eax, [esi+64]
  2737 00001A0E D1E0                                    shl     eax, 1
  2738 00001A10 BA7541F29D                              mov     edx, 9DF24175h  ; negC4
  2739 00001A15 F7EA                                    imul    edx
  2740 00001A17 89E8                                    mov     eax, ebp
  2741 00001A19 01D8                                    add     eax, ebx
  2742 00001A1B 01C8                                    add     eax, ecx
  2743 00001A1D A3[EC280500]                            mov     [_@@@tmp+8], eax
  2744 00001A22 89E8                                    mov     eax, ebp
  2745 00001A24 29D8                                    sub     eax, ebx
  2746 00001A26 29D0                                    sub     eax, edx
  2747 00001A28 A3[0C290500]                            mov     [_@@@tmp+28h], eax
  2748 00001A2D 89E8                                    mov     eax, ebp
  2749 00001A2F 01D0                                    add     eax, edx
  2750 00001A31 29C8                                    sub     eax, ecx
  2751 00001A33 A3[1C290500]                            mov     [_@@@tmp+38h], eax
  2752 00001A38 8B4628                                  mov     eax, [esi+40]
  2753 00001A3B 034638                                  add     eax, [esi+56]
  2754 00001A3E 2B4608                                  sub     eax, [esi+8]
  2755 00001A41 D1E0                                    shl     eax, 1
  2756 00001A43 BA5F142691                              mov     edx, 9126145Fh  ; negC3
  2757 00001A48 F7EA                                    imul    edx
  2758 00001A4A 8915[F4280500]                          mov     [_@@@tmp+10h], edx
  2759 00001A50 8B4608                                  mov     eax, [esi+8]
  2760 00001A53 034628                                  add     eax, [esi+40]
  2761 00001A56 D1E0                                    shl     eax, 1
  2762 00001A58 BA332E0E7E                              mov     edx, 7E0E2E33h  ; C1
  2763 00001A5D F7EA                                    imul    edx
  2764 00001A5F 89D7                                    mov     edi, edx
  2765 00001A61 8B4628                                  mov     eax, [esi+40]
  2766 00001A64 2B4638                                  sub     eax, [esi+56]
  2767 00001A67 BA2E5E71A8                              mov     edx, 0A8715E2Eh ; negC7
  2768 00001A6C F7EA                                    imul    edx
  2769 00001A6E 89D5                                    mov     ebp, edx
  2770 00001A70 8B4608                                  mov     eax, [esi+8]
  2771 00001A73 034638                                  add     eax, [esi+56]
  2772 00001A76 D1E0                                    shl     eax, 1
  2773 00001A78 BAB822B9AD                              mov     edx, 0ADB922B8h ; negC5
  2774 00001A7D F7EA                                    imul    edx
  2775 00001A7F 89D1                                    mov     ecx, edx
  2776 00001A81 8B4618                                  mov     eax, [esi+24]
  2777 00001A84 D1E0                                    shl     eax, 1
  2778 00001A86 BAA2EBD96E                              mov     edx, 6ED9EBA2h  ; C3
  2779 00001A8B F7EA                                    imul    edx
  2780 00001A8D 89E8                                    mov     eax, ebp
  2781 00001A8F 01F8                                    add     eax, edi
  2782 00001A91 01D0                                    add     eax, edx
  2783 00001A93 A3[E4280500]                            mov     [_@@@tmp], eax
  2784 00001A98 89E8                                    mov     eax, ebp
  2785 00001A9A 29C8                                    sub     eax, ecx
  2786 00001A9C 29D0                                    sub     eax, edx
  2787 00001A9E A3[04290500]                            mov     [_@@@tmp+20h], eax
  2788 00001AA3 89F8                                    mov     eax, edi
  2789 00001AA5 01C8                                    add     eax, ecx
  2790 00001AA7 29D0                                    sub     eax, edx
  2791 00001AA9 A3[14290500]                            mov     [_@@@tmp+30h], eax
  2792 00001AAE 8B4E04                                  mov     ecx, [esi+4]
  2793 00001AB1 8B5E34                                  mov     ebx, [esi+52]
  2794 00001AB4 8B7E24                                  mov     edi, [esi+36]
  2795 00001AB7 037E44                                  add     edi, [esi+68]
  2796 00001ABA 2B7E14                                  sub     edi, [esi+20]
  2797 00001ABD 8D2C4B                                  lea     ebp, [ebx+ecx*2]
  2798 00001AC0 D1FD                                    sar     ebp, 1
  2799 00001AC2 29D9                                    sub     ecx, ebx
  2800 00001AC4 89C8                                    mov     eax, ecx
  2801 00001AC6 01F8                                    add     eax, edi
  2802 00001AC8 A3[28290500]                            mov     [_@@@tmp+44h], eax
  2803 00001ACD D1FF                                    sar     edi, 1
  2804 00001ACF 89C8                                    mov     eax, ecx
  2805 00001AD1 29F8                                    sub     eax, edi
  2806 00001AD3 A3[00290500]                            mov     [_@@@tmp+1Ch], eax
  2807 00001AD8 8B4614                                  mov     eax, [esi+20]   ; t0 = MULH(2*(src[2*2+j]+src[4*2+j]),C2)
  2808 00001ADB 034624                                  add     eax, [esi+36]
  2809 00001ADE D1E0                                    shl     eax, 1
  2810 00001AE0 BA0AD94778                              mov     edx, 7847D90Ah  ; C2
  2811 00001AE5 F7EA                                    imul    edx
  2812 00001AE7 89D3                                    mov     ebx, edx
  2813 00001AE9 8B4624                                  mov     eax, [esi+36]   ; t1 = MULH(src[4*2+j]-src[8*2+j],negC8)
  2814 00001AEC 2B4644                                  sub     eax, [esi+68]
  2815 00001AEF BA04CB8BD3                              mov     edx, 0D38BCB04h ; negC8
  2816 00001AF4 F7EA                                    imul    edx
  2817 00001AF6 89D1                                    mov     ecx, edx
  2818 00001AF8 8B4614                                  mov     eax, [esi+20]   ; t2 = MULH(2*(src[2*2+j]+src[8*2+j]),negC4)
  2819 00001AFB 034644                                  add     eax, [esi+68]
  2820 00001AFE D1E0                                    shl     eax, 1
  2821 00001B00 BA7541F29D                              mov     edx, 9DF24175h  ; negC4
  2822 00001B05 F7EA                                    imul    edx
  2823 00001B07 89E8                                    mov     eax, ebp        ; tmp[2+j] = t3+t0+t1
  2824 00001B09 01D8                                    add     eax, ebx
  2825 00001B0B 01C8                                    add     eax, ecx
  2826 00001B0D A3[F0280500]                            mov     [_@@@tmp+0Ch], eax
  2827 00001B12 89E8                                    mov     eax, ebp        ; tmp[10+j] = t3-t0-t2
  2828 00001B14 29D8                                    sub     eax, ebx
  2829 00001B16 29D0                                    sub     eax, edx
  2830 00001B18 A3[10290500]                            mov     [_@@@tmp+2Ch], eax
  2831 00001B1D 89E8                                    mov     eax, ebp        ; tmp[14+j] = t3+t2-t1
  2832 00001B1F 01D0                                    add     eax, edx
  2833 00001B21 29C8                                    sub     eax, ecx
  2834 00001B23 A3[20290500]                            mov     [_@@@tmp+3Ch], eax
  2835 00001B28 8B462C                                  mov     eax, [esi+44]   ; tmp[4+j] = MULH(2*(src[5*2+j]+src[7*2+j]-src[1*2+j]),negC3)
  2836 00001B2B 03463C                                  add     eax, [esi+60]
  2837 00001B2E 2B460C                                  sub     eax, [esi+12]
  2838 00001B31 D1E0                                    shl     eax, 1
  2839 00001B33 BA5F142691                              mov     edx, 9126145Fh  ; negC3
  2840 00001B38 F7EA                                    imul    edx
  2841 00001B3A 8915[F8280500]                          mov     [_@@@tmp+14h], edx
  2842 00001B40 8B460C                                  mov     eax, [esi+12]   ; @@MULH @@t2,[esi+(1*2+j)*4],add,[esi+(5*2+j)*4],-,-              ,1,C1,-
  2843                                                                          ; t2 = MULH(2*(src[1*2+j],add,src[5*2+j]),-,-,1,C1)
  2844 00001B43 03462C                                  add     eax, [esi+44]
  2845 00001B46 D1E0                                    shl     eax, 1
  2846 00001B48 BA332E0E7E                              mov     edx, 7E0E2E33h  ; C1
  2847 00001B4D F7EA                                    imul    edx
  2848 00001B4F 89D7                                    mov     edi, edx
  2849 00001B51 8B462C                                  mov     eax, [esi+44]   ; @@MULH @@t3,[esi+(5*2+j)*4],sub,[esi+(7*2+j)*4],-,-,
  2850                                                                          ; ,0,negC7,-
  2851                                                                          ;
  2852                                                                          ; t3 = MULH( src[5*2+j],sub,src[7*2+j],-,-,0,negC7)
  2853 00001B54 2B463C                                  sub     eax, [esi+60]
  2854 00001B57 BA2E5E71A8                              mov     edx, 0A8715E2Eh ; negC7
  2855 00001B5C F7EA                                    imul    edx
  2856 00001B5E 89D5                                    mov     ebp, edx
  2857 00001B60 8B460C                                  mov     eax, [esi+12]   ; t1 = MULH(2*(src[1*2+j],add,src[7*2+j]),-,-,1,negC5)
  2858 00001B63 03463C                                  add     eax, [esi+60]
  2859 00001B66 D1E0                                    shl     eax, 1          ; shift = 1
  2860 00001B68 BAB822B9AD                              mov     edx, 0ADB922B8h ; negC5
  2861 00001B6D F7EA                                    imul    edx
  2862 00001B6F 89D1                                    mov     ecx, edx
  2863 00001B71 8B461C                                  mov     eax, [esi+28]   ; t0 = MULH(2*src[3*2+j],-,-,-,-,1,C3)
  2864 00001B74 D1E0                                    shl     eax, 1
  2865 00001B76 BAA2EBD96E                              mov     edx, 6ED9EBA2h  ; C3
  2866 00001B7B F7EA                                    imul    edx
  2867 00001B7D 89E8                                    mov     eax, ebp
  2868 00001B7F 01F8                                    add     eax, edi
  2869 00001B81 01D0                                    add     eax, edx
  2870 00001B83 A3[E8280500]                            mov     [_@@@tmp+4], eax
  2871 00001B88 89E8                                    mov     eax, ebp
  2872 00001B8A 29C8                                    sub     eax, ecx
  2873 00001B8C 29D0                                    sub     eax, edx
  2874 00001B8E A3[08290500]                            mov     [_@@@tmp+24h], eax
  2875 00001B93 89F8                                    mov     eax, edi        ; @@SUM [@@tmp+(12+j)*4],@@t2,add,@@t1,sub,edx
  2876 00001B95 01C8                                    add     eax, ecx
  2877 00001B97 29D0                                    sub     eax, edx
  2878 00001B99 A3[18290500]                            mov     [_@@@tmp+34h], eax
  2879 00001B9E 5F                                      pop     edi
  2880 00001B9F 5D                                      pop     ebp
  2881 00001BA0 5B                                      pop     ebx
  2882 00001BA1 56                                      push    esi             ; IRP j,0,1,2,3 ; j = 0
  2883 00001BA2 8B15[E4280500]                          mov     edx, [_@@@tmp] ; t0 = [@@tmp+(j*4+0)*4]
  2884 00001BA8 8B35[E8280500]                          mov     esi, [_@@@tmp+4] ; t1 = [@@tmp+(j*4+1)*4]
  2885 00001BAE A1[EC280500]                            mov     eax, [_@@@tmp+8] ; t2 = [@@tmp+(j*4+2)*4]
  2886 00001BB3 8B0D[F0280500]                          mov     ecx, [_@@@tmp+0Ch] ; t2 = [@@tmp+(j*4+3)*4]
  2887 00001BB9 29D0                                    sub     eax, edx        ; s2 = t2 - t0
  2888 00001BBB 8D1450                                  lea     edx, [eax+edx*2] ; s0 = t2 + t0
  2889 00001BBE A3[DC280500]                            mov     [_@@s2], eax ; @@MULH esi,eax ,-,-,-,-,1,icos36h_&j,-
  2890                                                                          ; s2 = MULH(s2*2, icos36h[j])
  2891 00001BC3 8915[D8280500]                          mov     [_@@s0], edx
  2892 00001BC9 29F1                                    sub     ecx, esi
  2893 00001BCB 8D0471                                  lea     eax, [ecx+esi*2]
  2894 00001BCE D1E0                                    shl     eax, 1
  2895 00001BD0 BA90953E40                              mov     edx, 403E9590h  ; icos36h_0
  2896 00001BD5 F7EA                                    imul    edx
  2897 00001BD7 89D6                                    mov     esi, edx
  2898 00001BD9 89C8                                    mov     eax, ecx        ; @@MULH @@s3,ecx,-,-,-,-,shift_for_8minus&j,icos36h_8minus&j,-
  2899                                                                          ; s3 = MULL(s3,icos36[8-j]) ; <-- "MULL" with "icos36"
  2900 00001BDB C1E004                                  shl     eax, 4
  2901 00001BDE BA2C2ACA5B                              mov     edx, 5BCA2A2Ch  ; icos36h_8 (8-0)
  2902 00001BE3 F7EA                                    imul    edx
  2903 00001BE5 8915[E0280500]                          mov     [_@@s3], edx
  2904 00001BEB 8B0D[D8280500]                          mov     ecx, [_@@s0]
  2905 00001BF1 29F1                                    sub     ecx, esi
  2906 00001BF3 8D3471                                  lea     esi, [ecx+esi*2]
  2907 00001BF6 8B4524                                  mov     eax, [ebp+36]   ; @@MULH [edi+(9+j)*SBLIMIT*4],[ebp+(9+j)*4],
  2908                                                                          ; -,-,-,-,0,ecx,[ebx+(9+j)*4]
  2909                                                                          ; out[(9+j)*SBLIMIT] = MULH(t0, win[9+j])+buf[9+j]
  2910 00001BF9 F7E9                                    imul    ecx
  2911 00001BFB 035324                                  add     edx, [ebx+36]   ; [ebx+(9+j)*4]
  2912 00001BFE 899780040000                            mov     [edi+1152], edx ; SBLIMIT=32 ; 9*SBLIMIT*4 = 1152
  2913 00001C04 8B4520                                  mov     eax, [ebp+32]   ; @@MULH [edi+(8-j)*SBLIMIT*4],[ebp+(8-j)*4]
  2914                                                                          ; ,-,-,-,-,0,ecx,[ebx+(8-j)*4]
  2915 00001C07 F7E9                                    imul    ecx
  2916 00001C09 035320                                  add     edx, [ebx+32]
  2917 00001C0C 899700040000                            mov     [edi+1024], edx ; SBLIMIT=32 ; 8*SBLIMIT*4 = 1024
  2918 00001C12 8B456C                                  mov     eax, [ebp+108]
  2919 00001C15 F7EE                                    imul    esi
  2920 00001C17 895324                                  mov     [ebx+36], edx
  2921 00001C1A 8B4568                                  mov     eax, [ebp+104]  ; @@MULH [ebx+(8-j)*4],[ebp+(8-j+18)*4],-,-,-,-,0,esi,-
  2922 00001C1D F7EE                                    imul    esi
  2923 00001C1F 895320                                  mov     [ebx+32], edx
  2924 00001C22 8B0D[DC280500]                          mov     ecx, [_@@s2]
  2925 00001C28 8B35[E0280500]                          mov     esi, [_@@s3]
  2926 00001C2E 29F1                                    sub     ecx, esi        ; t2 = s2 - s3
  2927 00001C30 8D3471                                  lea     esi, [ecx+esi*2] ; t3 = s2 + s3
  2928 00001C33 8B4500                                  mov     eax, [ebp+0]    ; @@MULH [edi+(0+j)*SBLIMIT*4],[ebp+(0+j)*4],
  2929                                                                          ; -,-,-,-,0,ecx,[ebx+(0+j)*4]
  2930 00001C36 F7E9                                    imul    ecx
  2931 00001C38 0313                                    add     edx, [ebx]
  2932 00001C3A 8917                                    mov     [edi], edx
  2933 00001C3C 8B4544                                  mov     eax, [ebp+68]   ; @@MULH [edi+(17-j)*SBLIMIT*4],[ebp+(17-j)*4]
  2934                                                                          ; ,-,-,-,-,0,ecx,[ebx+(17-j)*4]
  2935 00001C3F F7E9                                    imul    ecx
  2936 00001C41 035344                                  add     edx, [ebx+68]
  2937 00001C44 899780080000                            mov     [edi+2176], edx ; 17*SBLIMIT*4 = 2176
  2938 00001C4A 8B4548                                  mov     eax, [ebp+72]   ; @@MULH [ebx+(0+j)*4],[ebp+(0+j+18)*4],-,-,-,-,0,esi,-
  2939 00001C4D F7EE                                    imul    esi
  2940 00001C4F 8913                                    mov     [ebx], edx
  2941 00001C51 8B858C000000                            mov     eax, [ebp+140]  ; @@MULH [ebx+(17-j)*4],[ebp+(17-j+18)*4],-,-,-,-,0,esi,-
  2942 00001C57 F7EE                                    imul    esi
  2943 00001C59 895344                                  mov     [ebx+68], edx
  2944 00001C5C 8B15[F4280500]                          mov     edx, [_@@@tmp+10h] ; IRP j,0,1,2,3 ; j = 1
  2945 00001C62 8B35[F8280500]                          mov     esi, [_@@@tmp+14h]
  2946 00001C68 A1[FC280500]                            mov     eax, [_@@@tmp+18h]
  2947 00001C6D 8B0D[00290500]                          mov     ecx, [_@@@tmp+1Ch]
  2948 00001C73 29D0                                    sub     eax, edx
  2949 00001C75 8D1450                                  lea     edx, [eax+edx*2]
  2950 00001C78 A3[DC280500]                            mov     [_@@s2], eax
  2951 00001C7D 8915[D8280500]                          mov     [_@@s0], edx
  2952 00001C83 29F1                                    sub     ecx, esi
  2953 00001C85 8D0471                                  lea     eax, [ecx+esi*2]
  2954 00001C88 D1E0                                    shl     eax, 1
  2955 00001C8A BA07F74142                              mov     edx, 4241F707h  ; icos36h_1
  2956 00001C8F F7EA                                    imul    edx
  2957 00001C91 89D6                                    mov     esi, edx
  2958 00001C93 89C8                                    mov     eax, ecx
  2959 00001C95 C1E002                                  shl     eax, 2
  2960 00001C98 BA1E75A37B                              mov     edx, 7BA3751Eh  ; icos36h_7 (8-1)
  2961 00001C9D F7EA                                    imul    edx
  2962 00001C9F 8915[E0280500]                          mov     [_@@s3], edx
  2963 00001CA5 8B0D[D8280500]                          mov     ecx, [_@@s0]
  2964 00001CAB 29F1                                    sub     ecx, esi
  2965 00001CAD 8D3471                                  lea     esi, [ecx+esi*2]
  2966 00001CB0 8B4528                                  mov     eax, [ebp+40]
  2967 00001CB3 F7E9                                    imul    ecx
  2968 00001CB5 035328                                  add     edx, [ebx+40]
  2969 00001CB8 899700050000                            mov     [edi+1280], edx
  2970 00001CBE 8B451C                                  mov     eax, [ebp+28]
  2971 00001CC1 F7E9                                    imul    ecx
  2972 00001CC3 03531C                                  add     edx, [ebx+28]
  2973 00001CC6 899780030000                            mov     [edi+896], edx
  2974 00001CCC 8B4570                                  mov     eax, [ebp+112]
  2975 00001CCF F7EE                                    imul    esi
  2976 00001CD1 895328                                  mov     [ebx+40], edx
  2977 00001CD4 8B4564                                  mov     eax, [ebp+100]
  2978 00001CD7 F7EE                                    imul    esi
  2979 00001CD9 89531C                                  mov     [ebx+28], edx
  2980 00001CDC 8B0D[DC280500]                          mov     ecx, [_@@s2]
  2981 00001CE2 8B35[E0280500]                          mov     esi, [_@@s3]
  2982 00001CE8 29F1                                    sub     ecx, esi
  2983 00001CEA 8D3471                                  lea     esi, [ecx+esi*2]
  2984 00001CED 8B4504                                  mov     eax, [ebp+4]
  2985 00001CF0 F7E9                                    imul    ecx
  2986 00001CF2 035304                                  add     edx, [ebx+4]
  2987 00001CF5 899780000000                            mov     [edi+128], edx
  2988 00001CFB 8B4540                                  mov     eax, [ebp+64]
  2989 00001CFE F7E9                                    imul    ecx
  2990 00001D00 035340                                  add     edx, [ebx+64]
  2991 00001D03 899700080000                            mov     [edi+2048], edx
  2992 00001D09 8B454C                                  mov     eax, [ebp+76]
  2993 00001D0C F7EE                                    imul    esi
  2994 00001D0E 895304                                  mov     [ebx+4], edx
  2995 00001D11 8B8588000000                            mov     eax, [ebp+136]
  2996 00001D17 F7EE                                    imul    esi
  2997 00001D19 895340                                  mov     [ebx+64], edx
  2998 00001D1C 8B15[04290500]                          mov     edx, [_@@@tmp+20h] ; IRP j,0,1,2,3 ; j = 2
  2999 00001D22 8B35[08290500]                          mov     esi, [_@@@tmp+24h]
  3000 00001D28 A1[0C290500]                            mov     eax, [_@@@tmp+28h]
  3001 00001D2D 8B0D[10290500]                          mov     ecx, [_@@@tmp+2Ch]
  3002 00001D33 29D0                                    sub     eax, edx
  3003 00001D35 8D1450                                  lea     edx, [eax+edx*2]
  3004 00001D38 A3[DC280500]                            mov     [_@@s2], eax
  3005 00001D3D 8915[D8280500]                          mov     [_@@s0], edx
  3006 00001D43 29F1                                    sub     ecx, esi
  3007 00001D45 8D0471                                  lea     eax, [ecx+esi*2]
  3008 00001D48 D1E0                                    shl     eax, 1
  3009 00001D4A BA6CBE9D46                              mov     edx, 469DBE6Ch  ; icos36h_2
  3010 00001D4F F7EA                                    imul    edx
  3011 00001D51 89D6                                    mov     esi, edx
  3012 00001D53 89C8                                    mov     eax, ecx
  3013 00001D55 C1E002                                  shl     eax, 2
  3014 00001D58 BA62ECB74B                              mov     edx, 4BB7EC62h  ; icos36h_6 (8-2)
  3015 00001D5D F7EA                                    imul    edx
  3016 00001D5F 8915[E0280500]                          mov     [_@@s3], edx
  3017 00001D65 8B0D[D8280500]                          mov     ecx, [_@@s0]
  3018 00001D6B 29F1                                    sub     ecx, esi
  3019 00001D6D 8D3471                                  lea     esi, [ecx+esi*2]
  3020 00001D70 8B452C                                  mov     eax, [ebp+44]
  3021 00001D73 F7E9                                    imul    ecx
  3022 00001D75 03532C                                  add     edx, [ebx+44]
  3023 00001D78 899780050000                            mov     [edi+1408], edx
  3024 00001D7E 8B4518                                  mov     eax, [ebp+24]
  3025 00001D81 F7E9                                    imul    ecx
  3026 00001D83 035318                                  add     edx, [ebx+24]
  3027 00001D86 899700030000                            mov     [edi+768], edx
  3028 00001D8C 8B4574                                  mov     eax, [ebp+116]
  3029 00001D8F F7EE                                    imul    esi
  3030 00001D91 89532C                                  mov     [ebx+44], edx
  3031 00001D94 8B4560                                  mov     eax, [ebp+96]
  3032 00001D97 F7EE                                    imul    esi
  3033 00001D99 895318                                  mov     [ebx+24], edx
  3034 00001D9C 8B0D[DC280500]                          mov     ecx, [_@@s2]
  3035 00001DA2 8B35[E0280500]                          mov     esi, [_@@s3]
  3036 00001DA8 29F1                                    sub     ecx, esi
  3037 00001DAA 8D3471                                  lea     esi, [ecx+esi*2]
  3038 00001DAD 8B4508                                  mov     eax, [ebp+8]
  3039 00001DB0 F7E9                                    imul    ecx
  3040 00001DB2 035308                                  add     edx, [ebx+8]
  3041 00001DB5 899700010000                            mov     [edi+256], edx
  3042 00001DBB 8B453C                                  mov     eax, [ebp+60]
  3043 00001DBE F7E9                                    imul    ecx
  3044 00001DC0 03533C                                  add     edx, [ebx+60]
  3045 00001DC3 899780070000                            mov     [edi+1920], edx
  3046 00001DC9 8B4550                                  mov     eax, [ebp+80]
  3047 00001DCC F7EE                                    imul    esi
  3048 00001DCE 895308                                  mov     [ebx+8], edx
  3049 00001DD1 8B8584000000                            mov     eax, [ebp+132]
  3050 00001DD7 F7EE                                    imul    esi
  3051 00001DD9 89533C                                  mov     [ebx+60], edx
  3052 00001DDC 8B15[14290500]                          mov     edx, [_@@@tmp+30h] ; IRP j,0,1,2,3 ; j = 3
  3053 00001DE2 8B35[18290500]                          mov     esi, [_@@@tmp+34h]
  3054 00001DE8 A1[1C290500]                            mov     eax, [_@@@tmp+38h]
  3055 00001DED 8B0D[20290500]                          mov     ecx, [_@@@tmp+3Ch]
  3056 00001DF3 29D0                                    sub     eax, edx
  3057 00001DF5 8D1450                                  lea     edx, [eax+edx*2]
  3058 00001DF8 A3[DC280500]                            mov     [_@@s2], eax
  3059 00001DFD 8915[D8280500]                          mov     [_@@s0], edx
  3060 00001E03 29F1                                    sub     ecx, esi
  3061 00001E05 8D0471                                  lea     eax, [ecx+esi*2]
  3062 00001E08 D1E0                                    shl     eax, 1
  3063 00001E0A BABE2B214E                              mov     edx, 4E212BBEh  ; icos36h_3
  3064 00001E0F F7EA                                    imul    edx
  3065 00001E11 89D6                                    mov     esi, edx
  3066 00001E13 89C8                                    mov     eax, ecx
  3067 00001E15 D1E0                                    shl     eax, 1
  3068 00001E17 BADFA1946F                              mov     edx, 6F94A1DFh  ; icos36h_5 (8-3)
  3069 00001E1C F7EA                                    imul    edx
  3070 00001E1E 8915[E0280500]                          mov     [_@@s3], edx
  3071 00001E24 8B0D[D8280500]                          mov     ecx, [_@@s0]
  3072 00001E2A 29F1                                    sub     ecx, esi
  3073 00001E2C 8D3471                                  lea     esi, [ecx+esi*2]
  3074 00001E2F 8B4530                                  mov     eax, [ebp+48]
  3075 00001E32 F7E9                                    imul    ecx
  3076 00001E34 035330                                  add     edx, [ebx+48]
  3077 00001E37 899700060000                            mov     [edi+1536], edx
  3078 00001E3D 8B4514                                  mov     eax, [ebp+20]
  3079 00001E40 F7E9                                    imul    ecx
  3080 00001E42 035314                                  add     edx, [ebx+20]
  3081 00001E45 899780020000                            mov     [edi+640], edx
  3082 00001E4B 8B4578                                  mov     eax, [ebp+120]
  3083 00001E4E F7EE                                    imul    esi
  3084 00001E50 895330                                  mov     [ebx+30h], edx
  3085 00001E53 8B455C                                  mov     eax, [ebp+92]
  3086 00001E56 F7EE                                    imul    esi
  3087 00001E58 895314                                  mov     [ebx+20], edx
  3088 00001E5B 8B0D[DC280500]                          mov     ecx, [_@@s2]
  3089 00001E61 8B35[E0280500]                          mov     esi, [_@@s3]
  3090 00001E67 29F1                                    sub     ecx, esi
  3091 00001E69 8D3471                                  lea     esi, [ecx+esi*2]
  3092 00001E6C 8B450C                                  mov     eax, [ebp+12]
  3093 00001E6F F7E9                                    imul    ecx
  3094 00001E71 03530C                                  add     edx, [ebx+12]
  3095 00001E74 899780010000                            mov     [edi+384], edx
  3096 00001E7A 8B4538                                  mov     eax, [ebp+56]
  3097 00001E7D F7E9                                    imul    ecx
  3098 00001E7F 035338                                  add     edx, [ebx+56]
  3099 00001E82 899700070000                            mov     [edi+1792], edx
  3100 00001E88 8B4554                                  mov     eax, [ebp+84]
  3101 00001E8B F7EE                                    imul    esi
  3102 00001E8D 89530C                                  mov     [ebx+12], edx
  3103 00001E90 8B8580000000                            mov     eax, [ebp+128]
  3104 00001E96 F7EE                                    imul    esi
  3105 00001E98 895338                                  mov     [ebx+56], edx
  3106 00001E9B 8B0D[24290500]                          mov     ecx, [_@@@tmp+40h] ; IRP j,4
  3107                                                                          ; [@@tmp+(j*4+0)*4]
  3108 00001EA1 A1[28290500]                            mov     eax, [_@@@tmp+44h] ; [@@tmp+(j*4+1)*4]
  3109 00001EA6 D1E0                                    shl     eax, 1
  3110 00001EA8 BA9A79825A                              mov     edx, 5A82799Ah  ; icos36h_4 (8-4)
  3111 00001EAD F7EA                                    imul    edx
  3112 00001EAF 29D1                                    sub     ecx, edx
  3113 00001EB1 8D3451                                  lea     esi, [ecx+edx*2]
  3114 00001EB4 8B4534                                  mov     eax, [ebp+52]   ; @@MULH [edi+(9+j)*SBLIMIT*4],[ebp+(9+j)*4],
  3115                                                                          ; -,-,-,-,0,ecx,[ebx+(9+j)*4]
  3116                                                                          ; out[(9+4)*SBLIMIT] = MULH(t0,win[9+4])+buf[9+4]
  3117 00001EB7 F7E9                                    imul    ecx
  3118 00001EB9 035334                                  add     edx, [ebx+52]
  3119 00001EBC 899780060000                            mov     [edi+1664], edx ; 13*SBLIMIT*4 = 1664
  3120 00001EC2 8B4510                                  mov     eax, [ebp+16]   ; @MULH [edi+(8-j)*SBLIMIT*4],[ebp+(8-j)*4],
  3121                                                                          ; -,-,-,-,0,ecx,[ebx+(8-j)*4]
  3122 00001EC5 F7E9                                    imul    ecx
  3123 00001EC7 035310                                  add     edx, [ebx+16]
  3124 00001ECA 899700020000                            mov     [edi+512], edx
  3125 00001ED0 8B457C                                  mov     eax, [ebp+124]  ; @@MULH [ebx+(9+j)*4],[ebp+(9+j+18)*4] ,-,-,-,-,0,esi,-
  3126 00001ED3 F7EE                                    imul    esi
  3127 00001ED5 895334                                  mov     [ebx+52], edx
  3128 00001ED8 8B4558                                  mov     eax, [ebp+88]   ; @@MULH [ebx+(8-j)*4],[ebp+(8-j+18)*4],-,-,-,-,0,esi,-
  3129 00001EDB F7EE                                    imul    esi
  3130 00001EDD 895310                                  mov     [ebx+16], edx
  3131 00001EE0 5E                                      pop     esi
  3132 00001EE1 C3                                      retn
  3133                                  
  3134                                  
  3135                                  ; =============== S U B R O U T I N E =======================================
  3136                                  
  3137                                  
  3138                                  mp3_imdct12:
  3139 00001EE2 8B06                                    mov     eax, [esi]      ; in: esi=src - out: [out2_...]
  3140 00001EE4 A3[2C290500]                            mov     [_@@tmp0], eax  ; IRP nn,0,1,2,3,4,5
  3141                                                                          ;  @@tmp&nn rd 1
  3142                                                                          ; ENDM
  3143                                                                          ; mov  eax,[esi+0*3*4] ; = src[0*3]
  3144 00001EE9 8B560C                                  mov     edx, [esi+12]   ; [esi+1*3*4] ; = src[1*3]
  3145 00001EEC 01D0                                    add     eax, edx        ; = src[0*3]+src[1*3]
  3146 00001EEE A3[30290500]                            mov     [_@@tmp1], eax
  3147 00001EF3 8B4618                                  mov     eax, [esi+24]
  3148 00001EF6 01C2                                    add     edx, eax
  3149 00001EF8 8915[34290500]                          mov     [_@@tmp2], edx
  3150 00001EFE 8B5624                                  mov     edx, [esi+36]   ; [esi+3*3*4]
  3151 00001F01 01D0                                    add     eax, edx
  3152 00001F03 A3[38290500]                            mov     [_@@tmp3], eax
  3153 00001F08 8B4630                                  mov     eax, [esi+48]
  3154 00001F0B 01C2                                    add     edx, eax
  3155 00001F0D 8915[3C290500]                          mov     [_@@tmp4], edx
  3156 00001F13 8B563C                                  mov     edx, [esi+60]   ; [esi+5*3*4]
  3157 00001F16 01D0                                    add     eax, edx        ; = src[4*3]+src[5*3]
  3158 00001F18 0305[38290500]                          add     eax, [_@@tmp3]
  3159 00001F1E A3[40290500]                            mov     [_@@tmp5], eax  ; tmp5 = src[4*3]+src[5*3]+tmp3
  3160 00001F23 8B15[30290500]                          mov     edx, [_@@tmp1]
  3161 00001F29 0115[38290500]                          add     [_@@tmp3], edx
  3162 00001F2F A1[34290500]                            mov     eax, [_@@tmp2]  ; @@MULH @@tmp2,@@tmp2,-,-,-,-,1,C3,-
  3163                                                                          ; tmp2 = MULH(2*tmp2,C3)
  3164 00001F34 D1E0                                    shl     eax, 1
  3165 00001F36 BAA2EBD96E                              mov     edx, 6ED9EBA2h  ; C3
  3166 00001F3B F7EA                                    imul    edx
  3167 00001F3D 8915[34290500]                          mov     [_@@tmp2], edx
  3168 00001F43 A1[38290500]                            mov     eax, [_@@tmp3]  ; @@MULH @@tmp3,@@tmp3,-,-,-,-,2,C3,-
  3169                                                                          ; tmp3 = MULH(4*tmp3,C3)
  3170 00001F48 C1E002                                  shl     eax, 2
  3171 00001F4B BAA2EBD96E                              mov     edx, 6ED9EBA2h  ; C3
  3172 00001F50 F7EA                                    imul    edx
  3173 00001F52 8915[38290500]                          mov     [_@@tmp3], edx
  3174 00001F58 A1[30290500]                            mov     eax, [_@@tmp1]  ; @@MULH edx,@@tmp1,sub,@@tmp5,-,-,1,icos36h_4,-
  3175 00001F5D 2B05[40290500]                          sub     eax, [_@@tmp5]  ; t2 = MULH(2*(tmp1-tmp5),icos36h_4)
  3176 00001F63 D1E0                                    shl     eax, 1
  3177 00001F65 BA9A79825A                              mov     edx, 5A82799Ah  ; icos36h_4
  3178 00001F6A F7EA                                    imul    edx
  3179 00001F6C A1[2C290500]                            mov     eax, [_@@tmp0]  ; @@SUM eax,@@tmp0,sub,@@tmp4,-,-
  3180 00001F71 2B05[3C290500]                          sub     eax, [_@@tmp4]  ; t1 = tmp0 - tmp4
  3181 00001F77 29D0                                    sub     eax, edx        ; @@CAST macro t1,t2,dst0,dst1,dst2,dst3
  3182                                                                          ;   sub  t1,t2                           ;t1-t2
  3183                                                                          ;   lea  t2,[t1+t2*2]                    ;t1+t2
  3184                                                                          ;   mov  dword ptr [mp3_out2_a&dst0],t1  ;t1-t2
  3185                                                                          ;   mov  dword ptr [mp3_out2_b&dst0],t2  ;t1+t2
  3186                                                                          ; endm
  3187 00001F79 8D1450                                  lea     edx, [eax+edx*2] ; @@CAST eax,edx,1,4,7,10
  3188                                                                          ; out2[1,4,7,10]=t1-t2,t1-t2,t1+t2,t1+t2
  3189 00001F7C A3[48290500]                            mov     [mp3_out2_a1], eax
  3190 00001F81 8915[54290500]                          mov     [mp3_out2_b1], edx
  3191 00001F87 A1[3C290500]                            mov     eax, [_@@tmp4]
  3192 00001F8C 8B15[30290500]                          mov     edx, [_@@tmp1]
  3193 00001F92 D1F8                                    sar     eax, 1
  3194 00001F94 D1E2                                    shl     edx, 1
  3195 00001F96 0105[2C290500]                          add     [_@@tmp0], eax  ; tmp0 = tmp0 + tmp4/2
  3196 00001F9C 0115[40290500]                          add     [_@@tmp5], edx  ; tmp5 = tmp5 + tmp1*2
  3197 00001FA2 A1[40290500]                            mov     eax, [_@@tmp5]  ; @@MULH edx,@@tmp5,add,@@tmp3,-,-,0,icos36h_1,-
  3198 00001FA7 0305[38290500]                          add     eax, [_@@tmp3]
  3199 00001FAD BA07F74142                              mov     edx, 4241F707h  ; icos36h_1
  3200 00001FB2 F7EA                                    imul    edx
  3201 00001FB4 A1[2C290500]                            mov     eax, [_@@tmp0]  ; @@SUM eax,@@tmp0,add,@@tmp2,-,-
  3202 00001FB9 0305[34290500]                          add     eax, [_@@tmp2]
  3203 00001FBF 29D0                                    sub     eax, edx        ; @@CAST eax,edx,2,3,8,9
  3204 00001FC1 8D1450                                  lea     edx, [eax+edx*2]
  3205 00001FC4 A3[4C290500]                            mov     [mp3_out2_a2], eax
  3206 00001FC9 8915[58290500]                          mov     [mp3_out2_b2], edx
  3207 00001FCF A1[40290500]                            mov     eax, [_@@tmp5]  ; @@MULH edx,@@tmp5,sub,@@tmp3,-,-,1,icos36h_7,-
  3208 00001FD4 2B05[38290500]                          sub     eax, [_@@tmp3]
  3209 00001FDA D1E0                                    shl     eax, 1
  3210 00001FDC BA1E75A37B                              mov     edx, 7BA3751Eh  ; icos36h_7
  3211 00001FE1 F7EA                                    imul    edx
  3212 00001FE3 A1[2C290500]                            mov     eax, [_@@tmp0]  ; @@SUM eax,@@tmp0,sub,@@tmp2,-,-
  3213 00001FE8 2B05[34290500]                          sub     eax, [_@@tmp2]
  3214 00001FEE 29D0                                    sub     eax, edx        ; @@CAST eax,edx,0,5,6,11
  3215 00001FF0 8D1450                                  lea     edx, [eax+edx*2]
  3216 00001FF3 A3[44290500]                            mov     [mp3_out2_a0], eax
  3217 00001FF8 8915[50290500]                          mov     [mp3_out2_b0], edx
  3218 00001FFE C3                                      retn
  3219                                  
  3220                                  
  3221                                  ; =============== S U B R O U T I N E =======================================
  3222                                  
  3223                                  
  3224                                  mp3_compute_imdct:
  3225 00001FFF F605[F0750000]10                        test    byte [cpuid_flags], 10h ; in: ebx=granule
  3226 00002006 740E                                    jz      short .no_rdtsc_supported ; timelog_start rdtsc_imdct
  3227 00002008 0F31                                    rdtsc
  3228 0000200A 2905[08770000]                          sub     [rdtsc_imdct], eax
  3229 00002010 1915[0C770000]                          sbb     [rdtsc_imdct+4], edx
  3230                                  
  3231                                  .no_rdtsc_supported:
  3232 00002016 53                                      push    ebx
  3233 00002017 8B4B60                                  mov     ecx, [ebx+96]   ; [ebx+$mp3gr_num_nonzero_hybrids_div9]
  3234 0000201A 6BC109                                  imul    eax, ecx, 9
  3235 0000201D 8DBC83A0000000                          lea     edi, [ebx+eax*4+160] ; [ebx+$mp3gr_sb_hybrid+eax*4]
  3236 00002024 E322                                    jecxz   .breakout
  3237                                  
  3238                                  .scan_zero_lop:
  3239 00002026 83EF24                                  sub     edi, 36         ; index-9
  3240 00002029 8B07                                    mov     eax, [edi]      ; [edi+0*4]
  3241 0000202B 0B4704                                  or      eax, [edi+4]
  3242 0000202E 0B4708                                  or      eax, [edi+8]
  3243 00002031 0B470C                                  or      eax, [edi+12]
  3244 00002034 0B4710                                  or      eax, [edi+16]
  3245 00002037 0B4714                                  or      eax, [edi+20]
  3246 0000203A 0B4718                                  or      eax, [edi+24]
  3247 0000203D 0B471C                                  or      eax, [edi+28]
  3248 00002040 0B4720                                  or      eax, [edi+32]   ; [edi+8*4]
  3249 00002043 7503                                    jnz     short .breakout
  3250 00002045 49                                      dec     ecx
  3251 00002046 75DE                                    jnz     short .scan_zero_lop
  3252                                  
  3253                                  .breakout:
  3254 00002048 41                                      inc     ecx             ; div9+1
  3255 00002049 D1E9                                    shr     ecx, 1          ; div18
  3256 0000204B 890D[70290500]                          mov     [_@@sblimit], ecx
  3257 00002051 837B2C02                                cmp     dword [ebx+44], 2 ; [ebx+$mp3gr_block_type]
  3258 00002055 7505                                    jnz     short .this_long_end
  3259 00002057 8B4B30                                  mov     ecx, [ebx+48]   ; [ebx+$mp3gr_switch_point]
  3260 0000205A D1E1                                    shl     ecx, 1          ; 0,1 --> 0,2
  3261                                  
  3262                                  .this_long_end:
  3263 0000205C 890D[6C290500]                          mov     [_@@mdct_long_end], ecx
  3264 00002062 8B4330                                  mov     eax, [ebx+48]   ; [ebx+$mp3gr_switch_point]
  3265 00002065 A3[74290500]                            mov     [_@@switch_point], eax
  3266 0000206A 8B432C                                  mov     eax, [ebx+44]   ; [ebx+$mp3gr_block_type]
  3267 0000206D 69C090000000                            imul    eax, 144        ; 1*36*4
  3268 00002073 A3[68290500]                            mov     [_@@www], eax
  3269 00002078 8B0D[3CF40000]                          mov     ecx, [mp3_curr_channel]
  3270 0000207E A1[40F40000]                            mov     eax, [mp3_curr_granule]
  3271 00002083 69C900120000                            imul    ecx, 4608       ; 36*SBLIMIT*4 ; channel ; sb_samples[ch][gr*18]
  3272 00002089 69C000090000                            imul    eax, 2304       ; 18*SBLIMIT*4 ; frame=granule*18
  3273 0000208F 8DBC01[9CBD0000]                        lea     edi, [mp3_sb_samples+ecx+eax]
  3274 00002096 8DB3A0000000                            lea     esi, [ebx+160]  ; [ebx+$mp3gr_sb_hybrid]
  3275 0000209C A1[3CF40000]                            mov     eax, [mp3_curr_channel]
  3276 000020A1 69C000090000                            imul    eax, 2304       ; SBLIMIT*18*4
  3277 000020A7 8D98[9CE10000]                          lea     ebx, [mp3_mdct_buf+eax]
  3278 000020AD F605[F0750000]10                        test    byte [cpuid_flags], 10h
  3279 000020B4 740E                                    jz      short .no_rdtsc_supported@ ; timelog_start rdtsc_imdct36
  3280 000020B6 0F31                                    rdtsc
  3281 000020B8 2905[20770000]                          sub     [rdtsc_imdct36], eax
  3282 000020BE 1915[24770000]                          sbb     [rdtsc_imdct36+4], edx
  3283                                  
  3284                                  .no_rdtsc_supported@:
  3285 000020C4 C705[64290500]0000-                     mov	dword [_@@@JJJ], 0
  3285 000020CC 0000               
  3286 000020CE 833D[6C290500]00                        cmp	dword [_@@mdct_long_end], 0
  3287 000020D5 744D                                    jz      short .imdct36_done
  3288                                  
  3289                                  .imdct36_lop:
  3290 000020D7 BD[CCE20400]                            mov	ebp, mp3_mdct_win ; for j=0 to mdct_long_end-1
  3291 000020DC 833D[64290500]02                        cmp	dword [_@@@JJJ], 2
  3292 000020E3 19C0                                    sbb	eax, eax
  3293 000020E5 2305[74290500]                          and	eax, [_@@switch_point]
  3294 000020EB 7506                                    jnz	short .this_window ; force window 0
  3295 000020ED 032D[68290500]                          add	ebp, [_@@www] ; mdct_win
  3296                                  
  3297                                  .this_window:
  3298 000020F3 A1[64290500]                            mov	eax, [_@@@JJJ]
  3299 000020F8 D1E8                                    shr	eax, 1          ; cy=0,1
  3300 000020FA 19C0                                    sbb	eax, eax        ; eax=0,FFFFFFFFh
  3301 000020FC 2540020000                              and	eax, 576        ; 4*36*4
  3302 00002101 01C5                                    add	ebp, eax
  3303 00002103 E808F8FFFF                              call	mp3_imdct36
  3304 00002108 83C704                                  add	edi, 4          ; 1*4 ; dst
  3305 0000210B 83C648                                  add	esi, 72         ; 18*4 ; sb_hybrid
  3306 0000210E 83C348                                  add	ebx, 72         ; mdct_buf ; next
  3307 00002111 FF05[64290500]                          inc	dword [_@@@JJJ]
  3308 00002117 A1[64290500]                            mov	eax, [_@@@JJJ]
  3309 0000211C 3B05[6C290500]                          cmp	eax, [_@@mdct_long_end]
  3310 00002122 72B3                                    jb	short .imdct36_lop
  3311                                  
  3312                                  .imdct36_done:
  3313 00002124 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  3314 0000212B 740E                                    jz      short .no_rdtsc_supported@@ ; timelog_end rdtsc_imdct36
  3315 0000212D 0F31                                    rdtsc
  3316 0000212F 0105[20770000]                          add     [rdtsc_imdct36], eax
  3317 00002135 1115[24770000]                          adc     [rdtsc_imdct36+4], edx
  3318                                  
  3319                                  .no_rdtsc_supported@@:
  3320 0000213B F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_imdct12
  3321 00002142 740E                                    jz      short .no_rdtsc_supported@@@
  3322 00002144 0F31                                    rdtsc
  3323 00002146 2905[38770000]                          sub     [rdtsc_imdct12], eax
  3324 0000214C 1915[3C770000]                          sbb     [rdtsc_imdct12+4], edx
  3325                                  
  3326                                  .no_rdtsc_supported@@@:
  3327 00002152 A1[64290500]                            mov     eax, [_@@@JJJ]
  3328 00002157 3B05[70290500]                          cmp     eax, [_@@sblimit]
  3329 0000215D 0F83D7020000                            jnb     .imdct12_done
  3330                                  
  3331                                  .imdct12_lop:
  3332 00002163 BD[ECE30400]                            mov     ebp, (mp3_mdct_win+120h) ; for j=mdct_long_end to sblimit-1
  3333 00002168 A1[64290500]                            mov     eax, [_@@@JJJ]
  3334 0000216D D1E8                                    shr     eax, 1          ; cy=0,1
  3335 0000216F 19C0                                    sbb     eax, eax        ; eax=0,FFFFFFFFh
  3336 00002171 2540020000                              and     eax, 576        ; 4*36*4
  3337 00002176 01C5                                    add     ebp, eax        ; mdct_win
  3338 00002178 8B03                                    mov     eax, [ebx]      ; IRP i,0,1,2,3,4,5
  3339 0000217A 8907                                    mov     [edi], eax      ; @@SUM [edi+i*SBLIMIT*4],[ebx+(i+0)*4],-,-,-,-
  3340 0000217C 8B4304                                  mov     eax, [ebx+4]
  3341 0000217F 898780000000                            mov     [edi+128], eax
  3342 00002185 8B4308                                  mov     eax, [ebx+8]
  3343 00002188 898700010000                            mov     [edi+256], eax
  3344 0000218E 8B430C                                  mov     eax, [ebx+12]
  3345 00002191 898780010000                            mov     [edi+384], eax
  3346 00002197 8B4310                                  mov     eax, [ebx+16]
  3347 0000219A 898700020000                            mov     [edi+512], eax
  3348 000021A0 8B4314                                  mov     eax, [ebx+20]
  3349 000021A3 898780020000                            mov     [edi+640], eax  ; ENDM
  3350 000021A9 81C700030000                            add     edi, 768        ; 6*SBLIMIT*4
  3351 000021AF E82EFDFFFF                              call    mp3_imdct12
  3352 000021B4 A1[44290500]                            mov     eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5
  3353 000021B9 8B5500                                  mov     edx, [ebp+0]    ; @@MULH [edi+i*SBLIMIT*4],[mp3_out2_a&i],
  3354                                                                          ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(1*6+i)*4]
  3355 000021BC F7EA                                    imul    edx
  3356 000021BE 035318                                  add     edx, [ebx+24]
  3357 000021C1 8917                                    mov     [edi], edx
  3358 000021C3 A1[50290500]                            mov     eax, [mp3_out2_b0] ; @@MULH [ebx+(2*6+i)*4],[mp3_out2_b&i],
  3359                                                                          ; -,-,-,-,0,[ebp+(i+6)*4],-
  3360 000021C8 8B5518                                  mov     edx, [ebp+24]
  3361 000021CB F7EA                                    imul    edx
  3362 000021CD 895330                                  mov     [ebx+48], edx
  3363 000021D0 A1[48290500]                            mov     eax, [mp3_out2_a1] ; i = 1
  3364 000021D5 8B5504                                  mov     edx, [ebp+4]
  3365 000021D8 F7EA                                    imul    edx
  3366 000021DA 03531C                                  add     edx, [ebx+28]
  3367 000021DD 899780000000                            mov     [edi+128], edx
  3368 000021E3 A1[54290500]                            mov     eax, [mp3_out2_b1]
  3369 000021E8 8B551C                                  mov     edx, [ebp+28]
  3370 000021EB F7EA                                    imul    edx
  3371 000021ED 895334                                  mov     [ebx+52], edx
  3372 000021F0 A1[4C290500]                            mov     eax, [mp3_out2_a2] ; i = 2
  3373 000021F5 8B5508                                  mov     edx, [ebp+8]
  3374 000021F8 F7EA                                    imul    edx
  3375 000021FA 035320                                  add     edx, [ebx+32]
  3376 000021FD 899700010000                            mov     [edi+256], edx
  3377 00002203 A1[58290500]                            mov     eax, [mp3_out2_b2]
  3378 00002208 8B5520                                  mov     edx, [ebp+32]
  3379 0000220B F7EA                                    imul    edx
  3380 0000220D 895338                                  mov     [ebx+56], edx
  3381 00002210 A1[4C290500]                            mov     eax, [mp3_out2_a2] ; i = 3 ; mp3_out2_a3 equ mp3_out2_a2
  3382 00002215 8B550C                                  mov     edx, [ebp+12]
  3383 00002218 F7EA                                    imul    edx
  3384 0000221A 035324                                  add     edx, [ebx+36]
  3385 0000221D 899780010000                            mov     [edi+384], edx
  3386 00002223 A1[58290500]                            mov     eax, [mp3_out2_b2] ; mp3_out2_b3 equ mp3_out2_b2
  3387 00002228 8B5524                                  mov     edx, [ebp+36]
  3388 0000222B F7EA                                    imul    edx
  3389 0000222D 89533C                                  mov     [ebx+60], edx
  3390 00002230 A1[48290500]                            mov     eax, [mp3_out2_a1] ; i = 4 ; mp3_out2_a4 equ mp3_out2_a1
  3391 00002235 8B5510                                  mov     edx, [ebp+16]
  3392 00002238 F7EA                                    imul    edx
  3393 0000223A 035328                                  add     edx, [ebx+40]
  3394 0000223D 899700020000                            mov     [edi+512], edx
  3395 00002243 A1[54290500]                            mov     eax, [mp3_out2_b1] ; mp3_out2_b4 equ mp3_out2_b1
  3396 00002248 8B5528                                  mov     edx, [ebp+40]
  3397 0000224B F7EA                                    imul    edx
  3398 0000224D 895340                                  mov     [ebx+64], edx
  3399 00002250 A1[44290500]                            mov     eax, [mp3_out2_a0] ; i = 5 ; mp3_out2_a5 equ mp3_out2_a0
  3400 00002255 8B5514                                  mov     edx, [ebp+20]
  3401 00002258 F7EA                                    imul    edx
  3402 0000225A 03532C                                  add     edx, [ebx+44]
  3403 0000225D 899780020000                            mov     [edi+640], edx
  3404 00002263 A1[50290500]                            mov     eax, [mp3_out2_b0] ; mp3_out2_b5 equ mp3_out2_b0
  3405 00002268 8B552C                                  mov     edx, [ebp+44]
  3406 0000226B F7EA                                    imul    edx
  3407 0000226D 895344                                  mov     [ebx+68], edx   ; ENDM
  3408 00002270 81C700030000                            add     edi, 768        ; 6*SBLIMIT*4
  3409 00002276 83C604                                  add     esi, 4          ; sb_hybrid
  3410 00002279 E864FCFFFF                              call    mp3_imdct12
  3411 0000227E A1[44290500]                            mov     eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5
  3412 00002283 8B5500                                  mov     edx, [ebp+0]    ; @@MULH [edi+i*SBLIMIT*4],[mp3_out2_a&i],
  3413                                                                          ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(2*6+i)*4]
  3414 00002286 F7EA                                    imul    edx             ; @@MULH [ebx+(0*6+i)*4],[mp3_out2_b&i],
  3415                                                                          ; -,-,-,-,0,[ebp+(i+6)*4],-
  3416 00002288 035330                                  add     edx, [ebx+48]
  3417 0000228B 8917                                    mov     [edi], edx
  3418 0000228D A1[50290500]                            mov     eax, [mp3_out2_b0]
  3419 00002292 8B5518                                  mov     edx, [ebp+18h]
  3420 00002295 F7EA                                    imul    edx
  3421 00002297 8913                                    mov     [ebx], edx
  3422 00002299 A1[48290500]                            mov     eax, [mp3_out2_a1] ; i = 1
  3423 0000229E 8B5504                                  mov     edx, [ebp+4]
  3424 000022A1 F7EA                                    imul    edx
  3425 000022A3 035334                                  add     edx, [ebx+52]
  3426 000022A6 899780000000                            mov     [edi+128], edx
  3427 000022AC A1[54290500]                            mov     eax, [mp3_out2_b1]
  3428 000022B1 8B551C                                  mov     edx, [ebp+28]
  3429 000022B4 F7EA                                    imul    edx
  3430 000022B6 895304                                  mov     [ebx+4], edx
  3431 000022B9 A1[4C290500]                            mov     eax, [mp3_out2_a2] ; i = 2
  3432 000022BE 8B5508                                  mov     edx, [ebp+8]
  3433 000022C1 F7EA                                    imul    edx
  3434 000022C3 035338                                  add     edx, [ebx+56]
  3435 000022C6 899700010000                            mov     [edi+256], edx
  3436 000022CC A1[58290500]                            mov     eax, [mp3_out2_b2]
  3437 000022D1 8B5520                                  mov     edx, [ebp+32]
  3438 000022D4 F7EA                                    imul    edx
  3439 000022D6 895308                                  mov     [ebx+8], edx
  3440 000022D9 A1[4C290500]                            mov     eax, [mp3_out2_a2] ; i = 3
  3441 000022DE 8B550C                                  mov     edx, [ebp+12]
  3442 000022E1 F7EA                                    imul    edx
  3443 000022E3 03533C                                  add     edx, [ebx+60]
  3444 000022E6 899780010000                            mov     [edi+384], edx
  3445 000022EC A1[58290500]                            mov     eax, [mp3_out2_b2]
  3446 000022F1 8B5524                                  mov     edx, [ebp+36]
  3447 000022F4 F7EA                                    imul    edx
  3448 000022F6 89530C                                  mov     [ebx+12], edx
  3449 000022F9 A1[48290500]                            mov     eax, [mp3_out2_a1] ; i = 4
  3450 000022FE 8B5510                                  mov     edx, [ebp+16]
  3451 00002301 F7EA                                    imul    edx
  3452 00002303 035340                                  add     edx, [ebx+64]
  3453 00002306 899700020000                            mov     [edi+512], edx
  3454 0000230C A1[54290500]                            mov     eax, [mp3_out2_b1]
  3455 00002311 8B5528                                  mov     edx, [ebp+40]
  3456 00002314 F7EA                                    imul    edx
  3457 00002316 895310                                  mov     [ebx+16], edx
  3458 00002319 A1[44290500]                            mov     eax, [mp3_out2_a0] ; i = 5
  3459 0000231E 8B5514                                  mov     edx, [ebp+20]
  3460 00002321 F7EA                                    imul    edx
  3461 00002323 035344                                  add     edx, [ebx+68]
  3462 00002326 899780020000                            mov     [edi+640], edx
  3463 0000232C A1[50290500]                            mov     eax, [mp3_out2_b0]
  3464 00002331 8B552C                                  mov     edx, [ebp+44]
  3465 00002334 F7EA                                    imul    edx
  3466 00002336 895314                                  mov     [ebx+20], edx   ; ENDM
  3467 00002339 83C604                                  add     esi, 4
  3468 0000233C E8A1FBFFFF                              call    mp3_imdct12
  3469 00002341 A1[44290500]                            mov     eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5
  3470 00002346 8B5500                                  mov     edx, [ebp+0]    ; @@MULH [ebx+(0*6+i)*4],[mp3_out2_a&i],
  3471                                                                          ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(0*6+i)*4]
  3472 00002349 F7EA                                    imul    edx
  3473 0000234B 0313                                    add     edx, [ebx]
  3474 0000234D 8913                                    mov     [ebx], edx
  3475 0000234F A1[50290500]                            mov     eax, [mp3_out2_b0] ; @@MULH [ebx+(1*6+i)*4],[mp3_out2_b&i],
  3476                                                                          ; -,-,-,-,0,[ebp+(i+6)*4],-
  3477 00002354 8B5518                                  mov     edx, [ebp+24]
  3478 00002357 F7EA                                    imul    edx
  3479 00002359 895318                                  mov     [ebx+24], edx
  3480 0000235C C7433000000000                          mov     dword [ebx+48], 0 ; [ebx+(2*6+i)*4]
  3481 00002363 A1[48290500]                            mov     eax, [mp3_out2_a1] ; i = 1
  3482 00002368 8B5504                                  mov     edx, [ebp+4]
  3483 0000236B F7EA                                    imul    edx
  3484 0000236D 035304                                  add     edx, [ebx+4]
  3485 00002370 895304                                  mov     [ebx+4], edx
  3486 00002373 A1[54290500]                            mov     eax, [mp3_out2_b1]
  3487 00002378 8B551C                                  mov     edx, [ebp+28]
  3488 0000237B F7EA                                    imul    edx
  3489 0000237D 89531C                                  mov     [ebx+28], edx
  3490 00002380 C7433400000000                          mov     dword [ebx+52], 0 ; [ebx+(2*6+i)*4]
  3491 00002387 A1[4C290500]                            mov     eax, [mp3_out2_a2] ; i = 2
  3492 0000238C 8B5508                                  mov     edx, [ebp+8]
  3493 0000238F F7EA                                    imul    edx
  3494 00002391 035308                                  add     edx, [ebx+8]
  3495 00002394 895308                                  mov     [ebx+8], edx
  3496 00002397 A1[58290500]                            mov     eax, [mp3_out2_b2]
  3497 0000239C 8B5520                                  mov     edx, [ebp+32]
  3498 0000239F F7EA                                    imul    edx
  3499 000023A1 895320                                  mov     [ebx+32], edx
  3500 000023A4 C7433800000000                          mov     dword [ebx+56], 0
  3501 000023AB A1[4C290500]                            mov     eax, [mp3_out2_a2] ; i = 3
  3502 000023B0 8B550C                                  mov     edx, [ebp+12]
  3503 000023B3 F7EA                                    imul    edx
  3504 000023B5 03530C                                  add     edx, [ebx+0Ch]
  3505 000023B8 89530C                                  mov     [ebx+12], edx
  3506 000023BB A1[58290500]                            mov     eax, [mp3_out2_b2]
  3507 000023C0 8B5524                                  mov     edx, [ebp+36]
  3508 000023C3 F7EA                                    imul    edx
  3509 000023C5 895324                                  mov     [ebx+36], edx
  3510 000023C8 C7433C00000000                          mov     dword [ebx+60], 0 ; [ebx+(2*6+i)*4]
  3511 000023CF A1[48290500]                            mov     eax, [mp3_out2_a1] ; i = 4
  3512 000023D4 8B5510                                  mov     edx, [ebp+16]
  3513 000023D7 F7EA                                    imul    edx
  3514 000023D9 035310                                  add     edx, [ebx+16]
  3515 000023DC 895310                                  mov     [ebx+16], edx
  3516 000023DF A1[54290500]                            mov     eax, [mp3_out2_b1]
  3517 000023E4 8B5528                                  mov     edx, [ebp+40]
  3518 000023E7 F7EA                                    imul    edx
  3519 000023E9 895328                                  mov     [ebx+40], edx
  3520 000023EC C7434000000000                          mov     dword [ebx+64], 0
  3521 000023F3 A1[44290500]                            mov     eax, [mp3_out2_a0] ; i = 5
  3522 000023F8 8B5514                                  mov     edx, [ebp+20]
  3523 000023FB F7EA                                    imul    edx
  3524 000023FD 035314                                  add     edx, [ebx+20]
  3525 00002400 895314                                  mov     [ebx+20], edx
  3526 00002403 A1[50290500]                            mov     eax, [mp3_out2_b0]
  3527 00002408 8B552C                                  mov     edx, [ebp+44]
  3528 0000240B F7EA                                    imul    edx
  3529 0000240D 89532C                                  mov     [ebx+44], edx
  3530 00002410 C7434400000000                          mov     dword [ebx+68], 0 ; [ebx+(2*6+i)*4]
  3531 00002417 81C704FAFFFF                            add     edi, -1532      ; (1*4) - (2*6*SBLIMIT*4) ; dst
  3532 0000241D 83C640                                  add     esi, 64         ; 18*4 - (2*4) ; sb_hybrid
  3533 00002420 83C348                                  add     ebx, 72         ; 18*4 ; mdct_buf
  3534 00002423 FF05[64290500]                          inc     dword [_@@@JJJ]	; next
  3535 00002429 A1[64290500]                            mov     eax, [_@@@JJJ]
  3536 0000242E 3B05[70290500]                          cmp     eax, [_@@sblimit]
  3537 00002434 0F8229FDFFFF                            jb      .imdct12_lop
  3538                                  
  3539                                  .imdct12_done:
  3540 0000243A F605[F0750000]10                        test    byte [cpuid_flags], 10h
  3541 00002441 740E                                    jz      short .no_rdtsc_supported@@@@ ; timelog_end rdtsc_imdct12
  3542 00002443 0F31                                    rdtsc
  3543 00002445 0105[38770000]                          add     [rdtsc_imdct12], eax
  3544 0000244B 1115[3C770000]                          adc     [rdtsc_imdct12+4], edx
  3545                                  
  3546                                  .no_rdtsc_supported@@@@:
  3547 00002451 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_imdct0
  3548 00002458 740E                                    jz      short .no_rdtsc_supported@@@@@
  3549 0000245A 0F31                                    rdtsc
  3550 0000245C 2905[50770000]                          sub     [rdtsc_imdct0], eax
  3551 00002462 1915[54770000]                          sbb     [rdtsc_imdct0+4], edx
  3552                                  
  3553                                  .no_rdtsc_supported@@@@@:
  3554 00002468 833D[64290500]20                        cmp     dword [_@@@JJJ], 32 ; SBLIMIT
  3555 0000246F 0F8333010000                            jnb     .zero_outer_done
  3556                                  
  3557                                  .zero_outer_lop:
  3558 00002475 8B03                                    mov     eax, [ebx]      ; zero bands
  3559                                                                          ; IRP nn,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
  3560                                                                          ;  mov  eax,dword ptr [ebx+nn*4]
  3561                                                                          ;  mov  dword ptr [ebx+nn*4],0
  3562                                                                          ;  mov  dword ptr [edi+nn*SBLIMIT*4],eax ; [dst]
  3563                                                                          ; ENDM
  3564 00002477 C70300000000                            mov     dword [ebx], 0 ; nn = 0
  3565 0000247D 8907                                    mov     [edi], eax
  3566 0000247F 8B4304                                  mov     eax, [ebx+4]    ; nn = 1
  3567 00002482 C7430400000000                          mov     dword [ebx+4], 0
  3568 00002489 898780000000                            mov     [edi+128], eax
  3569 0000248F 8B4308                                  mov     eax, [ebx+8]
  3570 00002492 C7430800000000                          mov     dword [ebx+8], 0
  3571 00002499 898700010000                            mov     [edi+256], eax
  3572 0000249F 8B430C                                  mov     eax, [ebx+12]
  3573 000024A2 C7430C00000000                          mov     dword [ebx+12], 0
  3574 000024A9 898780010000                            mov     [edi+384], eax
  3575 000024AF 8B4310                                  mov     eax, [ebx+16]   ; nn = 4
  3576 000024B2 C7431000000000                          mov     dword [ebx+16], 0
  3577 000024B9 898700020000                            mov     [edi+512], eax
  3578 000024BF 8B4314                                  mov     eax, [ebx+20]
  3579 000024C2 C7431400000000                          mov     dword [ebx+20], 0
  3580 000024C9 898780020000                            mov     [edi+640], eax  ; [edi+5*SBLIMIT*4]
  3581 000024CF 8B4318                                  mov     eax, [ebx+24]
  3582 000024D2 C7431800000000                          mov     dword [ebx+24], 0
  3583 000024D9 898700030000                            mov     [edi+768], eax
  3584 000024DF 8B431C                                  mov     eax, [ebx+28]   ; nn = 7
  3585 000024E2 C7431C00000000                          mov     dword [ebx+28], 0
  3586 000024E9 898780030000                            mov     [edi+896], eax
  3587 000024EF 8B4320                                  mov     eax, [ebx+32]
  3588 000024F2 C7432000000000                          mov     dword [ebx+32], 0
  3589 000024F9 898700040000                            mov     [edi+1024], eax ; [edi+8*SBLIMIT*4]
  3590 000024FF 8B4324                                  mov     eax, [ebx+36]
  3591 00002502 C7432400000000                          mov     dword [ebx+36], 0
  3592 00002509 898780040000                            mov     [edi+1152], eax
  3593 0000250F 8B4328                                  mov     eax, [ebx+40]
  3594 00002512 C7432800000000                          mov     dword [ebx+40], 0
  3595 00002519 898700050000                            mov     [edi+1280], eax
  3596 0000251F 8B432C                                  mov     eax, [ebx+44]
  3597 00002522 C7432C00000000                          mov     dword [ebx+44], 0
  3598 00002529 898780050000                            mov     [edi+1408], eax
  3599 0000252F 8B4330                                  mov     eax, [ebx+48]
  3600 00002532 C7433000000000                          mov     dword [ebx+48], 0
  3601 00002539 898700060000                            mov     [edi+1536], eax
  3602 0000253F 8B4334                                  mov     eax, [ebx+52]
  3603 00002542 C7433400000000                          mov     dword [ebx+52], 0
  3604 00002549 898780060000                            mov     [edi+1664], eax
  3605 0000254F 8B4338                                  mov     eax, [ebx+56]
  3606 00002552 C7433800000000                          mov     dword [ebx+56], 0
  3607 00002559 898700070000                            mov     [edi+1792], eax
  3608 0000255F 8B433C                                  mov     eax, [ebx+60]
  3609 00002562 C7433C00000000                          mov     dword [ebx+60], 0
  3610 00002569 898780070000                            mov     [edi+1920], eax
  3611 0000256F 8B4340                                  mov     eax, [ebx+64]
  3612 00002572 C7434000000000                          mov     dword [ebx+64], 0 ; [edi+16*SBLIMIT*4]
  3613 00002579 898700080000                            mov     [edi+2048], eax
  3614 0000257F 8B4344                                  mov     eax, [ebx+68]   ; nn = 17
  3615 00002582 C7434400000000                          mov     dword [ebx+68], 0
  3616 00002589 898780080000                            mov     [edi+2176], eax ; ENDM
  3617 0000258F 83C348                                  add     ebx, 72         ; 18*4
  3618 00002592 83C704                                  add     edi, 4
  3619 00002595 FF05[64290500]                          inc     dword [_@@@JJJ]
  3620 0000259B 833D[64290500]20                        cmp     dword [_@@@JJJ], 32
  3621 000025A2 0F82CDFEFFFF                            jb      .zero_outer_lop
  3622                                  
  3623                                  .zero_outer_done:
  3624 000025A8 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_imdct0
  3625 000025AF 740E                                    jz      short .no_rdtsc_supported@@@@@@
  3626 000025B1 0F31                                    rdtsc
  3627 000025B3 0105[50770000]                          add     [rdtsc_imdct0], eax
  3628 000025B9 1115[54770000]                          adc     [rdtsc_imdct0+4], edx
  3629                                  
  3630                                  .no_rdtsc_supported@@@@@@:
  3631 000025BF 5B                                      pop     ebx
  3632 000025C0 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_imdct
  3633 000025C7 740E                                    jz      short .no_rdtsc_supported@@@@@@@
  3634 000025C9 0F31                                    rdtsc
  3635 000025CB 0105[08770000]                          add     [rdtsc_imdct], eax
  3636 000025D1 1115[0C770000]                          adc     [rdtsc_imdct+4], edx
  3637                                  
  3638                                  .no_rdtsc_supported@@@@@@@:
  3639 000025D7 C3                                      retn
  3640                                  
  3641                                  
  3642                                  ; =============== S U B R O U T I N E =======================================
  3643                                  
  3644                                  
  3645                                  mp3_dct32_shift_0:
  3646 000025D8 8B06                                    mov     eax, [esi]      ; mp3_dct32_macro macro rate_shift ; rate_shift = 0
  3647 000025DA 8B567C                                  mov     edx, [esi+124]  ; @@BF macro a,b,sign,cos,shift
  3648                                                                          ; @@BF 0,31,+,COS0_0,1
  3649                                                                          ; @@need_a equ (rate_shift EQ 0) or (a LT 16) ; a = 0
  3650                                                                          ; @@need_b equ (rate_shift EQ 0) or (b LT 16) ; b = 31
  3651                                                                          ; IF @@need_a AND @@need_b ; rate_shift = 0
  3652                                                                          ;    mov eax,dword ptr [esi+a*4]
  3653                                                                          ;    mov edx,dword ptr [esi+b*4]
  3654                                                                          ;    add dword ptr [esi+a*4],edx
  3655 000025DD 0116                                    add     [esi], edx
  3656 000025DF 29D0                                    sub     eax, edx
  3657 000025E1 D1E0                                    shl     eax, 1          ; shl  eax,shift
  3658                                                                          ; (needed when COS.fraction is less than 32bit)
  3659 000025E3 BA51C21340                              mov     edx, 4013C251h  ; sign&&cos ; +COS0_0 = 4013C251h
  3660 000025E8 F7EA                                    imul    edx
  3661 000025EA 89567C                                  mov     [esi+124], edx  ; [esi+b*4] ; upper 32bit of multiply result
  3662 000025ED 8B463C                                  mov     eax, [esi+60]   ; @@BF 15,16,+,COS0_15,5
  3663                                                                          ; [esi+a*4]
  3664 000025F0 8B5640                                  mov     edx, [esi+64]   ; [esi+b*4]
  3665 000025F3 01563C                                  add     [esi+60], edx   ; [esi+a*4]
  3666 000025F6 29D0                                    sub     eax, edx
  3667 000025F8 C1E005                                  shl     eax, 5          ; shl eax,shift
  3668 000025FB BAFB228551                              mov     edx, 518522FBh  ; sign&&cos ; +COS0_15 = 518522FBh
  3669 00002600 F7EA                                    imul    edx
  3670 00002602 895640                                  mov     [esi+64], edx   ; [esi+b*4]
  3671 00002605 8B06                                    mov     eax, [esi]      ; @@BF 0,15,+,COS1_0,1
  3672 00002607 8B563C                                  mov     edx, [esi+60]
  3673 0000260A 0116                                    add     [esi], edx
  3674 0000260C 29D0                                    sub     eax, edx
  3675 0000260E D1E0                                    shl     eax, 1
  3676 00002610 BA72464F40                              mov     edx, 404F4672h  ; +COS1_0
  3677 00002615 F7EA                                    imul    edx
  3678 00002617 89563C                                  mov     [esi+60], edx
  3679 0000261A 8B4640                                  mov     eax, [esi+64]   ; @@BF 16,31,-,COS1_0,1
  3680 0000261D 8B567C                                  mov     edx, [esi+124]
  3681 00002620 015640                                  add     [esi+64], edx
  3682 00002623 29D0                                    sub     eax, edx
  3683 00002625 D1E0                                    shl     eax, 1
  3684 00002627 BA8EB9B0BF                              mov     edx, 0BFB0B98Eh ; -COS1_0
  3685 0000262C F7EA                                    imul    edx
  3686 0000262E 89567C                                  mov     [esi+124], edx
  3687 00002631 8B461C                                  mov     eax, [esi+28]   ; @@BF 7,24,+,COS0_7,1
  3688 00002634 8B5660                                  mov     edx, [esi+96]
  3689 00002637 01561C                                  add     [esi+28], edx
  3690 0000263A 29D0                                    sub     eax, edx
  3691 0000263C D1E0                                    shl     eax, 1
  3692 0000263E BAA71E6056                              mov     edx, 56601EA7h
  3693 00002643 F7EA                                    imul    edx
  3694 00002645 895660                                  mov     [esi+96], edx
  3695 00002648 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,23,+,COS0_8,1
  3696 0000264B 8B565C                                  mov     edx, [esi+92]
  3697 0000264E 015620                                  add     [esi+32], edx
  3698 00002651 29D0                                    sub     eax, edx
  3699 00002653 D1E0                                    shl     eax, 1
  3700 00002655 BAECF64C5F                              mov     edx, 5F4CF6ECh
  3701 0000265A F7EA                                    imul    edx
  3702 0000265C 89565C                                  mov     [esi+92], edx
  3703 0000265F 8B461C                                  mov     eax, [esi+28]   ; @@BF 7,8,+,COS1_7,4
  3704 00002662 8B5620                                  mov     edx, [esi+32]
  3705 00002665 01561C                                  add     [esi+28], edx
  3706 00002668 29D0                                    sub     eax, edx
  3707 0000266A C1E004                                  shl     eax, 4
  3708 0000266D BA044E9E51                              mov     edx, 519E4E04h
  3709 00002672 F7EA                                    imul    edx
  3710 00002674 895620                                  mov     [esi+32], edx
  3711 00002677 8B465C                                  mov     eax, [esi+92]   ; @@BF 23,24,-,COS1_7,4
  3712 0000267A 8B5660                                  mov     edx, [esi+96]
  3713 0000267D 01565C                                  add     [esi+92], edx
  3714 00002680 29D0                                    sub     eax, edx
  3715 00002682 C1E004                                  shl     eax, 4
  3716 00002685 BAFCB161AE                              mov     edx, 0AE61B1FCh
  3717 0000268A F7EA                                    imul    edx
  3718 0000268C 895660                                  mov     [esi+96], edx
  3719 0000268F 8B06                                    mov     eax, [esi]      ; @@BF 0,7,+,COS2_0,1
  3720 00002691 8B561C                                  mov     edx, [esi+28]
  3721 00002694 0116                                    add     [esi], edx
  3722 00002696 29D0                                    sub     eax, edx
  3723 00002698 D1E0                                    shl     eax, 1
  3724 0000269A BA46FB4041                              mov     edx, 4140FB46h
  3725 0000269F F7EA                                    imul    edx
  3726 000026A1 89561C                                  mov     [esi+28], edx
  3727 000026A4 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,15,-,COS2_0,1
  3728 000026A7 8B563C                                  mov     edx, [esi+60]
  3729 000026AA 015620                                  add     [esi+32], edx
  3730 000026AD 29D0                                    sub     eax, edx
  3731 000026AF D1E0                                    shl     eax, 1
  3732 000026B1 BABA04BFBE                              mov     edx, 0BEBF04BAh
  3733 000026B6 F7EA                                    imul    edx
  3734 000026B8 89563C                                  mov     [esi+60], edx
  3735 000026BB 8B4640                                  mov     eax, [esi+64]   ; @@BF 16,23,+,COS2_0,1
  3736 000026BE 8B565C                                  mov     edx, [esi+92]
  3737 000026C1 015640                                  add     [esi+40h], edx
  3738 000026C4 29D0                                    sub     eax, edx
  3739 000026C6 D1E0                                    shl     eax, 1
  3740 000026C8 BA46FB4041                              mov     edx, 4140FB46h
  3741 000026CD F7EA                                    imul    edx
  3742 000026CF 89565C                                  mov     [esi+92], edx
  3743 000026D2 8B4660                                  mov     eax, [esi+96]   ; @@BF 24,31,-,COS2_0,1
  3744 000026D5 8B567C                                  mov     edx, [esi+124]
  3745 000026D8 015660                                  add     [esi+96], edx
  3746 000026DB 29D0                                    sub     eax, edx
  3747 000026DD D1E0                                    shl     eax, 1
  3748 000026DF BABA04BFBE                              mov     edx, 0BEBF04BAh
  3749 000026E4 F7EA                                    imul    edx
  3750 000026E6 89567C                                  mov     [esi+124], edx
  3751 000026E9 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,28,+,COS0_3,1
  3752 000026EC 8B5670                                  mov     edx, [esi+112]
  3753 000026EF 01560C                                  add     [esi+12], edx
  3754 000026F2 29D0                                    sub     eax, edx
  3755 000026F4 D1E0                                    shl     eax, 1
  3756 000026F6 BA2134F943                              mov     edx, 43F93421h
  3757 000026FB F7EA                                    imul    edx
  3758 000026FD 895670                                  mov     [esi+112], edx
  3759 00002700 8B4630                                  mov     eax, [esi+48]   ; @@BF 12,19,+,COS0_12,2
  3760 00002703 8B564C                                  mov     edx, [esi+76]
  3761 00002706 015630                                  add     [esi+48], edx
  3762 00002709 29D0                                    sub     eax, edx
  3763 0000270B C1E002                                  shl     eax, 2
  3764 0000270E BA978DFC5E                              mov     edx, 5EFC8D97h
  3765 00002713 F7EA                                    imul    edx
  3766 00002715 89564C                                  mov     [esi+76], edx
  3767 00002718 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,12,+,COS1_3,1
  3768 0000271B 8B5630                                  mov     edx, [esi+48]
  3769 0000271E 01560C                                  add     [esi+12], edx
  3770 00002721 29D0                                    sub     eax, edx
  3771 00002723 D1E0                                    shl     eax, 1
  3772 00002725 BA630ECB52                              mov     edx, 52CB0E63h
  3773 0000272A F7EA                                    imul    edx
  3774 0000272C 895630                                  mov     [esi+48], edx
  3775 0000272F 8B464C                                  mov     eax, [esi+76]   ; @@BF 19,28,-,COS1_3,1
  3776 00002732 8B5670                                  mov     edx, [esi+112]
  3777 00002735 01564C                                  add     [esi+76], edx
  3778 00002738 29D0                                    sub     eax, edx
  3779 0000273A D1E0                                    shl     eax, 1
  3780 0000273C BA9DF134AD                              mov     edx, 0AD34F19Dh
  3781 00002741 F7EA                                    imul    edx
  3782 00002743 895670                                  mov     [esi+112], edx
  3783 00002746 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,27,+,COS0_4,1
  3784 00002749 8B566C                                  mov     edx, [esi+108]
  3785 0000274C 015610                                  add     [esi+16], edx
  3786 0000274F 29D0                                    sub     eax, edx
  3787 00002751 D1E0                                    shl     eax, 1
  3788 00002753 BAC51BCC46                              mov     edx, 46CC1BC5h
  3789 00002758 F7EA                                    imul    edx
  3790 0000275A 89566C                                  mov     [esi+108], edx
  3791 0000275D 8B462C                                  mov     eax, [esi+44]   ; @@BF 11,20,+,COS0_11,2
  3792 00002760 8B5650                                  mov     edx, [esi+80]
  3793 00002763 01562C                                  add     [esi+44], edx
  3794 00002766 29D0                                    sub     eax, edx
  3795 00002768 C1E002                                  shl     eax, 2
  3796 0000276B BA981AD84A                              mov     edx, 4AD81A98h
  3797 00002770 F7EA                                    imul    edx
  3798 00002772 895650                                  mov     [esi+80], edx
  3799 00002775 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,11,+,COS1_4,1
  3800 00002778 8B562C                                  mov     edx, [esi+44]
  3801 0000277B 015610                                  add     [esi+16], edx
  3802 0000277E 29D0                                    sub     eax, edx
  3803 00002780 D1E0                                    shl     eax, 1
  3804 00002782 BA2E40E264                              mov     edx, 64E2402Eh
  3805 00002787 F7EA                                    imul    edx
  3806 00002789 89562C                                  mov     [esi+44], edx
  3807 0000278C 8B4650                                  mov     eax, [esi+80]   ; @@BF 20,27,-,COS1_4,1
  3808 0000278F 8B566C                                  mov     edx, [esi+108]
  3809 00002792 015650                                  add     [esi+80], edx
  3810 00002795 29D0                                    sub     eax, edx
  3811 00002797 D1E0                                    shl     eax, 1
  3812 00002799 BAD2BF1D9B                              mov     edx, 9B1DBFD2h
  3813 0000279E F7EA                                    imul    edx
  3814 000027A0 89566C                                  mov     [esi+108], edx
  3815 000027A3 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,4,+,COS2_3,3
  3816 000027A6 8B5610                                  mov     edx, [esi+16]
  3817 000027A9 01560C                                  add     [esi+12], edx
  3818 000027AC 29D0                                    sub     eax, edx
  3819 000027AE C1E003                                  shl     eax, 3
  3820 000027B1 BA42670352                              mov     edx, 52036742h
  3821 000027B6 F7EA                                    imul    edx
  3822 000027B8 895610                                  mov     [esi+16], edx
  3823 000027BB 8B462C                                  mov     eax, [esi+44]   ; @@BF 11,12,-,COS2_3,3
  3824 000027BE 8B5630                                  mov     edx, [esi+48]
  3825 000027C1 01562C                                  add     [esi+44], edx
  3826 000027C4 29D0                                    sub     eax, edx
  3827 000027C6 C1E003                                  shl     eax, 3
  3828 000027C9 BABE98FCAD                              mov     edx, 0ADFC98BEh ; -COS2_3
  3829 000027CE F7EA                                    imul    edx
  3830 000027D0 895630                                  mov     [esi+48], edx
  3831 000027D3 8B464C                                  mov     eax, [esi+76]   ; @@BF 19,20,+,COS2_3,3
  3832 000027D6 8B5650                                  mov     edx, [esi+80]
  3833 000027D9 01564C                                  add     [esi+4Ch], edx
  3834 000027DC 29D0                                    sub     eax, edx
  3835 000027DE C1E003                                  shl     eax, 3
  3836 000027E1 BA42670352                              mov     edx, 52036742h  ; +COS2_3
  3837 000027E6 F7EA                                    imul    edx
  3838 000027E8 895650                                  mov     [esi+80], edx
  3839 000027EB 8B466C                                  mov     eax, [esi+108]  ; @@BF 27,28,-,COS2_3,3
  3840 000027EE 8B5670                                  mov     edx, [esi+112]
  3841 000027F1 01566C                                  add     [esi+108], edx
  3842 000027F4 29D0                                    sub     eax, edx
  3843 000027F6 C1E003                                  shl     eax, 3
  3844 000027F9 BABE98FCAD                              mov     edx, 0ADFC98BEh
  3845 000027FE F7EA                                    imul    edx
  3846 00002800 895670                                  mov     [esi+112], edx
  3847 00002803 8B06                                    mov     eax, [esi]      ; @@BF 0,3,+,COS3_0,1
  3848 00002805 8B560C                                  mov     edx, [esi+12]
  3849 00002808 0116                                    add     [esi], edx
  3850 0000280A 29D0                                    sub     eax, edx
  3851 0000280C D1E0                                    shl     eax, 1
  3852 0000280E BAF0E94545                              mov     edx, 4545E9F0h
  3853 00002813 F7EA                                    imul    edx
  3854 00002815 89560C                                  mov     [esi+12], edx
  3855 00002818 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,7,-,COS3_0,1
  3856 0000281B 8B561C                                  mov     edx, [esi+28]
  3857 0000281E 015610                                  add     [esi+16], edx
  3858 00002821 29D0                                    sub     eax, edx
  3859 00002823 D1E0                                    shl     eax, 1
  3860 00002825 BA1016BABA                              mov     edx, 0BABA1610h
  3861 0000282A F7EA                                    imul    edx
  3862 0000282C 89561C                                  mov     [esi+28], edx
  3863 0000282F 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,11,+,COS3_0,1
  3864 00002832 8B562C                                  mov     edx, [esi+44]
  3865 00002835 015620                                  add     [esi+32], edx
  3866 00002838 29D0                                    sub     eax, edx
  3867 0000283A D1E0                                    shl     eax, 1
  3868 0000283C BAF0E94545                              mov     edx, 4545E9F0h
  3869 00002841 F7EA                                    imul    edx
  3870 00002843 89562C                                  mov     [esi+44], edx
  3871 00002846 8B4630                                  mov     eax, [esi+48]   ; @@BF 12,15,-,COS3_0,1
  3872 00002849 8B563C                                  mov     edx, [esi+60]
  3873 0000284C 015630                                  add     [esi+48], edx
  3874 0000284F 29D0                                    sub     eax, edx
  3875 00002851 D1E0                                    shl     eax, 1
  3876 00002853 BA1016BABA                              mov     edx, 0BABA1610h
  3877 00002858 F7EA                                    imul    edx
  3878 0000285A 89563C                                  mov     [esi+60], edx
  3879 0000285D 8B4640                                  mov     eax, [esi+64]   ; @@BF 16,19,+,COS3_0,1
  3880 00002860 8B564C                                  mov     edx, [esi+76]
  3881 00002863 015640                                  add     [esi+64], edx
  3882 00002866 29D0                                    sub     eax, edx
  3883 00002868 D1E0                                    shl     eax, 1
  3884 0000286A BAF0E94545                              mov     edx, 4545E9F0h
  3885 0000286F F7EA                                    imul    edx
  3886 00002871 89564C                                  mov     [esi+76], edx
  3887 00002874 8B4650                                  mov     eax, [esi+80]   ; @@BF 20,23,-,COS3_0,1
  3888 00002877 8B565C                                  mov     edx, [esi+92]
  3889 0000287A 015650                                  add     [esi+80], edx
  3890 0000287D 29D0                                    sub     eax, edx
  3891 0000287F D1E0                                    shl     eax, 1
  3892 00002881 BA1016BABA                              mov     edx, 0BABA1610h ; -COS3_0
  3893 00002886 F7EA                                    imul    edx
  3894 00002888 89565C                                  mov     [esi+92], edx
  3895 0000288B 8B4660                                  mov     eax, [esi+96]   ; @@BF 24,27,+,COS3_0,1
  3896 0000288E 8B566C                                  mov     edx, [esi+108]
  3897 00002891 015660                                  add     [esi+96], edx
  3898 00002894 29D0                                    sub     eax, edx
  3899 00002896 D1E0                                    shl     eax, 1
  3900 00002898 BAF0E94545                              mov     edx, 4545E9F0h  ; +COS3_0
  3901 0000289D F7EA                                    imul    edx
  3902 0000289F 89566C                                  mov     [esi+108], edx
  3903 000028A2 8B4670                                  mov     eax, [esi+112]  ; @@BF 28,31,-,COS3_0,1
  3904 000028A5 8B567C                                  mov     edx, [esi+124]
  3905 000028A8 015670                                  add     [esi+112], edx
  3906 000028AB 29D0                                    sub     eax, edx
  3907 000028AD D1E0                                    shl     eax, 1
  3908 000028AF BA1016BABA                              mov     edx, 0BABA1610h
  3909 000028B4 F7EA                                    imul    edx
  3910 000028B6 89567C                                  mov     [esi+124], edx
  3911 000028B9 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,30,+,COS0_1,1
  3912 000028BC 8B5678                                  mov     edx, [esi+120]
  3913 000028BF 015604                                  add     [esi+4], edx
  3914 000028C2 29D0                                    sub     eax, edx
  3915 000028C4 D1E0                                    shl     eax, 1
  3916 000028C6 BABD45B340                              mov     edx, 40B345BDh
  3917 000028CB F7EA                                    imul    edx
  3918 000028CD 895678                                  mov     [esi+120], edx
  3919 000028D0 8B4638                                  mov     eax, [esi+56]   ; @@BF 14,17,+,COS0_14,3
  3920 000028D3 8B5644                                  mov     edx, [esi+68]
  3921 000028D6 015638                                  add     [esi+56], edx
  3922 000028D9 29D0                                    sub     eax, edx
  3923 000028DB C1E003                                  shl     eax, 3
  3924 000028DE BAD0200B6D                              mov     edx, 6D0B20D0h
  3925 000028E3 F7EA                                    imul    edx
  3926 000028E5 895644                                  mov     [esi+68], edx
  3927 000028E8 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,14,+,COS1_1,1
  3928 000028EB 8B5638                                  mov     edx, [esi+56]
  3929 000028EE 015604                                  add     [esi+4], edx
  3930 000028F1 29D0                                    sub     eax, edx
  3931 000028F3 D1E0                                    shl     eax, 1
  3932 000028F5 BA103CE142                              mov     edx, 42E13C10h
  3933 000028FA F7EA                                    imul    edx
  3934 000028FC 895638                                  mov     [esi+56], edx
  3935 000028FF 8B4644                                  mov     eax, [esi+68]   ; @@BF 17,30,-,COS1_1,1
  3936 00002902 8B5678                                  mov     edx, [esi+120]
  3937 00002905 015644                                  add     [esi+68], edx
  3938 00002908 29D0                                    sub     eax, edx
  3939 0000290A D1E0                                    shl     eax, 1
  3940 0000290C BAF0C31EBD                              mov     edx, 0BD1EC3F0h
  3941 00002911 F7EA                                    imul    edx
  3942 00002913 895678                                  mov     [esi+120], edx
  3943 00002916 8B4618                                  mov     eax, [esi+24]   ; @@BF 6,25,+,COS0_6,1
  3944 00002919 8B5664                                  mov     edx, [esi+100]
  3945 0000291C 015618                                  add     [esi+24], edx
  3946 0000291F 29D0                                    sub     eax, edx
  3947 00002921 D1E0                                    shl     eax, 1
  3948 00002923 BA1237AE4F                              mov     edx, 4FAE3712h
  3949 00002928 F7EA                                    imul    edx
  3950 0000292A 895664                                  mov     [esi+100], edx
  3951 0000292D 8B4624                                  mov     eax, [esi+36]   ; @@BF 9,22,+,COS0_9,1
  3952 00002930 8B5658                                  mov     edx, [esi+88]
  3953 00002933 015624                                  add     [esi+36], edx
  3954 00002936 29D0                                    sub     eax, edx
  3955 00002938 D1E0                                    shl     eax, 1
  3956 0000293A BA27CF6F6B                              mov     edx, 6B6FCF27h
  3957 0000293F F7EA                                    imul    edx
  3958 00002941 895658                                  mov     [esi+88], edx
  3959 00002944 8B4618                                  mov     eax, [esi+24]   ; @@BF 6, 9,+,COS1_6,2
  3960 00002947 8B5624                                  mov     edx, [esi+36]
  3961 0000294A 015618                                  add     [esi+24], edx
  3962 0000294D 29D0                                    sub     eax, edx
  3963 0000294F C1E002                                  shl     eax, 2
  3964 00002952 BAC2923C6E                              mov     edx, 6E3C92C2h
  3965 00002957 F7EA                                    imul    edx
  3966 00002959 895624                                  mov     [esi+36], edx
  3967 0000295C 8B4658                                  mov     eax, [esi+88]   ; @@BF 22,25,-,COS1_6,2
  3968 0000295F 8B5664                                  mov     edx, [esi+100]
  3969 00002962 015658                                  add     [esi+88], edx
  3970 00002965 29D0                                    sub     eax, edx
  3971 00002967 C1E002                                  shl     eax, 2
  3972 0000296A BA3E6DC391                              mov     edx, 91C36D3Eh
  3973 0000296F F7EA                                    imul    edx
  3974 00002971 895664                                  mov     [esi+100], edx
  3975 00002974 8B4604                                  mov     eax, [esi+4]    ; @@BF 1, 6,+,COS2_1,1
  3976 00002977 8B5618                                  mov     edx, [esi+24]
  3977 0000297A 015604                                  add     [esi+4], edx
  3978 0000297D 29D0                                    sub     eax, edx
  3979 0000297F D1E0                                    shl     eax, 1
  3980 00002981 BA88DEF84C                              mov     edx, 4CF8DE88h
  3981 00002986 F7EA                                    imul    edx
  3982 00002988 895618                                  mov     [esi+24], edx
  3983 0000298B 8B4624                                  mov     eax, [esi+36]   ; @@BF 9,14,-,COS2_1,1
  3984 0000298E 8B5638                                  mov     edx, [esi+56]
  3985 00002991 015624                                  add     [esi+36], edx
  3986 00002994 29D0                                    sub     eax, edx
  3987 00002996 D1E0                                    shl     eax, 1
  3988 00002998 BA782107B3                              mov     edx, 0B3072178h
  3989 0000299D F7EA                                    imul    edx
  3990 0000299F 895638                                  mov     [esi+56], edx
  3991 000029A2 8B4644                                  mov     eax, [esi+68]   ; @@BF 17,22,+,COS2_1,1
  3992 000029A5 8B5658                                  mov     edx, [esi+88]
  3993 000029A8 015644                                  add     [esi+68], edx
  3994 000029AB 29D0                                    sub     eax, edx
  3995 000029AD D1E0                                    shl     eax, 1
  3996 000029AF BA88DEF84C                              mov     edx, 4CF8DE88h
  3997 000029B4 F7EA                                    imul    edx
  3998 000029B6 895658                                  mov     [esi+88], edx
  3999 000029B9 8B4664                                  mov     eax, [esi+100]  ; @@BF 25,30,-,COS2_1,1
  4000 000029BC 8B5678                                  mov     edx, [esi+120]
  4001 000029BF 015664                                  add     [esi+100], edx
  4002 000029C2 29D0                                    sub     eax, edx
  4003 000029C4 D1E0                                    shl     eax, 1
  4004 000029C6 BA782107B3                              mov     edx, 0B3072178h
  4005 000029CB F7EA                                    imul    edx
  4006 000029CD 895678                                  mov     [esi+120], edx
  4007 000029D0 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,29,+,COS0_2,1
  4008 000029D3 8B5674                                  mov     edx, [esi+116]
  4009 000029D6 015608                                  add     [esi+8], edx
  4010 000029D9 29D0                                    sub     eax, edx
  4011 000029DB D1E0                                    shl     eax, 1
  4012 000029DD BA6E2DFA41                              mov     edx, 41FA2D6Eh
  4013 000029E2 F7EA                                    imul    edx
  4014 000029E4 895674                                  mov     [esi+116], edx
  4015 000029E7 8B4634                                  mov     eax, [esi+52]   ; @@BF 13,18,+,COS0_13,3
  4016 000029EA 8B5648                                  mov     edx, [esi+72]
  4017 000029ED 015634                                  add     [esi+52], edx
  4018 000029F0 29D0                                    sub     eax, edx
  4019 000029F2 C1E003                                  shl     eax, 3
  4020 000029F5 BA9057D941                              mov     edx, 41D95790h
  4021 000029FA F7EA                                    imul    edx
  4022 000029FC 895648                                  mov     [esi+72], edx
  4023 000029FF 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,13,+,COS1_2,1
  4024 00002A02 8B5634                                  mov     edx, [esi+52]
  4025 00002A05 015608                                  add     [esi+8], edx
  4026 00002A08 29D0                                    sub     eax, edx
  4027 00002A0A D1E0                                    shl     eax, 1
  4028 00002A0C BA459F9148                              mov     edx, 48919F45h
  4029 00002A11 F7EA                                    imul    edx
  4030 00002A13 895634                                  mov     [esi+52], edx
  4031 00002A16 8B4648                                  mov     eax, [esi+72]   ; @@BF 18,29,-,COS1_2,1
  4032 00002A19 8B5674                                  mov     edx, [esi+116]
  4033 00002A1C 015648                                  add     [esi+72], edx
  4034 00002A1F 29D0                                    sub     eax, edx
  4035 00002A21 D1E0                                    shl     eax, 1
  4036 00002A23 BABB606EB7                              mov     edx, 0B76E60BBh
  4037 00002A28 F7EA                                    imul    edx
  4038 00002A2A 895674                                  mov     [esi+116], edx
  4039 00002A2D 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,26,+,COS0_5,1
  4040 00002A30 8B5668                                  mov     edx, [esi+104]
  4041 00002A33 015614                                  add     [esi+20], edx
  4042 00002A36 29D0                                    sub     eax, edx
  4043 00002A38 D1E0                                    shl     eax, 1
  4044 00002A3A BAF19C9D4A                              mov     edx, 4A9D9CF1h
  4045 00002A3F F7EA                                    imul    edx
  4046 00002A41 895668                                  mov     [esi+104], edx
  4047 00002A44 8B4628                                  mov     eax, [esi+40]   ; @@BF 10,21,+,COS0_10,1
  4048 00002A47 8B5654                                  mov     edx, [esi+84]
  4049 00002A4A 015628                                  add     [esi+40], edx
  4050 00002A4D 29D0                                    sub     eax, edx
  4051 00002A4F D1E0                                    shl     eax, 1
  4052 00002A51 BAB41D7D7C                              mov     edx, 7C7D1DB4h
  4053 00002A56 F7EA                                    imul    edx
  4054 00002A58 895654                                  mov     [esi+84], edx
  4055 00002A5B 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,10,+,COS1_5,2
  4056 00002A5E 8B5628                                  mov     edx, [esi+40]
  4057 00002A61 015614                                  add     [esi+20], edx
  4058 00002A64 29D0                                    sub     eax, edx
  4059 00002A66 C1E002                                  shl     eax, 2
  4060 00002A69 BAAA24E243                              mov     edx, 43E224AAh
  4061 00002A6E F7EA                                    imul    edx
  4062 00002A70 895628                                  mov     [esi+40], edx
  4063 00002A73 8B4654                                  mov     eax, [esi+84]   ; @@BF 21,26,-,COS1_5,2
  4064 00002A76 8B5668                                  mov     edx, [esi+104]
  4065 00002A79 015654                                  add     [esi+84], edx
  4066 00002A7C 29D0                                    sub     eax, edx
  4067 00002A7E C1E002                                  shl     eax, 2
  4068 00002A81 BA56DB1DBC                              mov     edx, 0BC1DDB56h
  4069 00002A86 F7EA                                    imul    edx
  4070 00002A88 895668                                  mov     [esi+104], edx
  4071 00002A8B 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,5,+,COS2_2,1
  4072 00002A8E 8B5614                                  mov     edx, [esi+20]
  4073 00002A91 015608                                  add     [esi+8], edx
  4074 00002A94 29D0                                    sub     eax, edx
  4075 00002A96 D1E0                                    shl     eax, 1
  4076 00002A98 BABF6B3273                              mov     edx, 73326BBFh  ; +COS2_2
  4077 00002A9D F7EA                                    imul    edx
  4078 00002A9F 895614                                  mov     [esi+20], edx
  4079 00002AA2 8B4628                                  mov     eax, [esi+40]   ; @@BF 10,13,-,COS2_2,1
  4080 00002AA5 8B5634                                  mov     edx, [esi+52]
  4081 00002AA8 015628                                  add     [esi+40], edx
  4082 00002AAB 29D0                                    sub     eax, edx
  4083 00002AAD D1E0                                    shl     eax, 1
  4084 00002AAF BA4194CD8C                              mov     edx, 8CCD9441h  ; -COS2_2
  4085 00002AB4 F7EA                                    imul    edx
  4086 00002AB6 895634                                  mov     [esi+52], edx
  4087 00002AB9 8B4648                                  mov     eax, [esi+72]   ; @@BF 18,21,+,COS2_2,1
  4088 00002ABC 8B5654                                  mov     edx, [esi+84]
  4089 00002ABF 015648                                  add     [esi+72], edx
  4090 00002AC2 29D0                                    sub     eax, edx
  4091 00002AC4 D1E0                                    shl     eax, 1
  4092 00002AC6 BABF6B3273                              mov     edx, 73326BBFh
  4093 00002ACB F7EA                                    imul    edx
  4094 00002ACD 895654                                  mov     [esi+84], edx
  4095 00002AD0 8B4668                                  mov     eax, [esi+104]  ; @@BF 26,29,-,COS2_2,1
  4096 00002AD3 8B5674                                  mov     edx, [esi+116]
  4097 00002AD6 015668                                  add     [esi+104], edx
  4098 00002AD9 29D0                                    sub     eax, edx
  4099 00002ADB D1E0                                    shl     eax, 1
  4100 00002ADD BA4194CD8C                              mov     edx, 8CCD9441h
  4101 00002AE2 F7EA                                    imul    edx
  4102 00002AE4 895674                                  mov     [esi+116], edx
  4103 00002AE7 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,2,+,COS3_1,2
  4104 00002AEA 8B5608                                  mov     edx, [esi+8]
  4105 00002AED 015604                                  add     [esi+4], edx
  4106 00002AF0 29D0                                    sub     eax, edx
  4107 00002AF2 C1E002                                  shl     eax, 2
  4108 00002AF5 BA46BA9E53                              mov     edx, 539EBA46h
  4109 00002AFA F7EA                                    imul    edx
  4110 00002AFC 895608                                  mov     [esi+8], edx
  4111 00002AFF 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,6,-,COS3_1,2
  4112 00002B02 8B5618                                  mov     edx, [esi+24]
  4113 00002B05 015614                                  add     [esi+20], edx
  4114 00002B08 29D0                                    sub     eax, edx
  4115 00002B0A C1E002                                  shl     eax, 2
  4116 00002B0D BABA4561AC                              mov     edx, 0AC6145BAh
  4117 00002B12 F7EA                                    imul    edx
  4118 00002B14 895618                                  mov     [esi+24], edx
  4119 00002B17 8B4624                                  mov     eax, [esi+36]   ; IF rate_shift LT 2
  4120                                                                          ; @@BF 9,10,+,COS3_1,2
  4121 00002B1A 8B5628                                  mov     edx, [esi+40]
  4122 00002B1D 015624                                  add     [esi+36], edx
  4123 00002B20 29D0                                    sub     eax, edx
  4124 00002B22 C1E002                                  shl     eax, 2
  4125 00002B25 BA46BA9E53                              mov     edx, 539EBA46h
  4126 00002B2A F7EA                                    imul    edx
  4127 00002B2C 895628                                  mov     [esi+40], edx
  4128 00002B2F 8B4634                                  mov     eax, [esi+52]   ; @@BF 13,14,-,COS3_1,2
  4129 00002B32 8B5638                                  mov     edx, [esi+56]
  4130 00002B35 015634                                  add     [esi+52], edx
  4131 00002B38 29D0                                    sub     eax, edx
  4132 00002B3A C1E002                                  shl     eax, 2
  4133 00002B3D BABA4561AC                              mov     edx, 0AC6145BAh
  4134 00002B42 F7EA                                    imul    edx
  4135 00002B44 895638                                  mov     [esi+56], edx   ; ENDIF
  4136 00002B47 8B4644                                  mov     eax, [esi+68]   ; @@BF 17,18,+,COS3_1,2
  4137 00002B4A 8B5648                                  mov     edx, [esi+72]
  4138 00002B4D 015644                                  add     [esi+68], edx
  4139 00002B50 29D0                                    sub     eax, edx
  4140 00002B52 C1E002                                  shl     eax, 2
  4141 00002B55 BA46BA9E53                              mov     edx, 539EBA46h
  4142 00002B5A F7EA                                    imul    edx
  4143 00002B5C 895648                                  mov     [esi+72], edx
  4144 00002B5F 8B4654                                  mov     eax, [esi+84]   ; @@BF 21,22,-,COS3_1,2
  4145 00002B62 8B5658                                  mov     edx, [esi+88]
  4146 00002B65 015654                                  add     [esi+84], edx
  4147 00002B68 29D0                                    sub     eax, edx
  4148 00002B6A C1E002                                  shl     eax, 2
  4149 00002B6D BABA4561AC                              mov     edx, 0AC6145BAh
  4150 00002B72 F7EA                                    imul    edx
  4151 00002B74 895658                                  mov     [esi+88], edx
  4152 00002B77 8B4664                                  mov     eax, [esi+100]  ; @@BF 25,26,+,COS3_1,2
  4153 00002B7A 8B5668                                  mov     edx, [esi+104]
  4154 00002B7D 015664                                  add     [esi+100], edx
  4155 00002B80 29D0                                    sub     eax, edx
  4156 00002B82 C1E002                                  shl     eax, 2
  4157 00002B85 BA46BA9E53                              mov     edx, 539EBA46h
  4158 00002B8A F7EA                                    imul    edx
  4159 00002B8C 895668                                  mov     [esi+104], edx
  4160 00002B8F 8B4674                                  mov     eax, [esi+116]  ; @@BF 29,30,-,COS3_1,2
  4161 00002B92 8B5678                                  mov     edx, [esi+120]
  4162 00002B95 015674                                  add     [esi+116], edx
  4163 00002B98 29D0                                    sub     eax, edx
  4164 00002B9A C1E002                                  shl     eax, 2
  4165 00002B9D BABA4561AC                              mov     edx, 0AC6145BAh
  4166 00002BA2 F7EA                                    imul    edx
  4167 00002BA4 895678                                  mov     [esi+120], edx
  4168 00002BA7 8B06                                    mov     eax, [esi]      ; @@BF1 macro a, b, c, d
  4169                                                                          ;   @@BF  a, b,+,COS4_0, 1
  4170                                                                          ;   @@BF  c, d,-,COS4_0, 1
  4171                                                                          ;   @@ADD c, d
  4172                                                                          ;  endm
  4173                                                                          ; @@BF1 0,1,2,3
  4174 00002BA9 8B5604                                  mov     edx, [esi+4]    ; @@BF 0,1,+,COS4_0,1
  4175 00002BAC 0116                                    add     [esi], edx
  4176 00002BAE 29D0                                    sub     eax, edx
  4177 00002BB0 D1E0                                    shl     eax, 1
  4178 00002BB2 BA9A79825A                              mov     edx, 5A82799Ah  ; +COS4_0
  4179 00002BB7 F7EA                                    imul    edx
  4180 00002BB9 895604                                  mov     [esi+4], edx
  4181 00002BBC 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,3,-,COS4_0,1
  4182 00002BBF 8B560C                                  mov     edx, [esi+12]
  4183 00002BC2 015608                                  add     [esi+8], edx
  4184 00002BC5 29D0                                    sub     eax, edx
  4185 00002BC7 D1E0                                    shl     eax, 1
  4186 00002BC9 BA66867DA5                              mov     edx, 0A57D8666h ; -COS4_0
  4187 00002BCE F7EA                                    imul    edx
  4188 00002BD0 89560C                                  mov     [esi+12], edx
  4189 00002BD3 8B460C                                  mov     eax, [esi+12]   ; @@ADD 2,3
  4190 00002BD6 014608                                  add     [esi+8], eax
  4191 00002BD9 8B4610                                  mov     eax, [esi+16]   ; @@BF2 macro a, b, c, d
  4192                                                                          ;   @@BF  a, b,+,COS4_0, 1
  4193                                                                          ;   @@BF  c, d,-,COS4_0, 1
  4194                                                                          ;   @@ADD c, d
  4195                                                                          ;   @@ADD a, c
  4196                                                                          ;   @@ADD c, b
  4197                                                                          ;   @@ADD b, d
  4198                                                                          ;  endm
  4199                                                                          ; @@BF2 4,5,6,7
  4200 00002BDC 8B5614                                  mov     edx, [esi+20]   ; @@BF 4,5,+,COS4_0,1
  4201 00002BDF 015610                                  add     [esi+16], edx
  4202 00002BE2 29D0                                    sub     eax, edx
  4203 00002BE4 D1E0                                    shl     eax, 1
  4204 00002BE6 BA9A79825A                              mov     edx, 5A82799Ah
  4205 00002BEB F7EA                                    imul    edx
  4206 00002BED 895614                                  mov     [esi+20], edx
  4207 00002BF0 8B4618                                  mov     eax, [esi+24]   ; @@BF 6,7,-,COS4_0,1
  4208 00002BF3 8B561C                                  mov     edx, [esi+28]
  4209 00002BF6 015618                                  add     [esi+24], edx
  4210 00002BF9 29D0                                    sub     eax, edx
  4211 00002BFB D1E0                                    shl     eax, 1
  4212 00002BFD BA66867DA5                              mov     edx, 0A57D8666h
  4213 00002C02 F7EA                                    imul    edx
  4214 00002C04 89561C                                  mov     [esi+28], edx
  4215 00002C07 8B461C                                  mov     eax, [esi+28]   ; @@ADD macro dst,src
  4216                                                                          ;   IF (rate_shift EQ 0) or (dst LT 16)
  4217                                                                          ;    ;tab[a] += tab[b]
  4218                                                                          ;    mov  eax,dword ptr [esi+src*4]
  4219                                                                          ;    add  dword ptr [esi+dst*4],eax
  4220                                                                          ;   ENDIF
  4221                                                                          ;  endm
  4222                                                                          ; @@ADD 6,7
  4223 00002C0A 014618                                  add     [esi+24], eax
  4224 00002C0D 8B4618                                  mov     eax, [esi+24]   ; @@ADD 4,6
  4225 00002C10 014610                                  add     [esi+16], eax
  4226 00002C13 8B4614                                  mov     eax, [esi+20]   ; @@ADD 6,5
  4227 00002C16 014618                                  add     [esi+24], eax
  4228 00002C19 8B461C                                  mov     eax, [esi+28]   ; @@ADD 5,7
  4229 00002C1C 014614                                  add     [esi+20], eax
  4230 00002C1F 8B4620                                  mov     eax, [esi+32]   ; IF rate_shift LT 2
  4231                                                                          ; @@BF1 8,9,10,11
  4232 00002C22 8B5624                                  mov     edx, [esi+36]   ; @@BF 8,9,+,COS4_0,1
  4233 00002C25 015620                                  add     [esi+32], edx
  4234 00002C28 29D0                                    sub     eax, edx
  4235 00002C2A D1E0                                    shl     eax, 1
  4236 00002C2C BA9A79825A                              mov     edx, 5A82799Ah
  4237 00002C31 F7EA                                    imul    edx
  4238 00002C33 895624                                  mov     [esi+36], edx
  4239 00002C36 8B4628                                  mov     eax, [esi+40]   ; @@BF 10,11,-,COS4_0,1
  4240 00002C39 8B562C                                  mov     edx, [esi+44]
  4241 00002C3C 015628                                  add     [esi+40], edx
  4242 00002C3F 29D0                                    sub     eax, edx
  4243 00002C41 D1E0                                    shl     eax, 1
  4244 00002C43 BA66867DA5                              mov     edx, 0A57D8666h
  4245 00002C48 F7EA                                    imul    edx
  4246 00002C4A 89562C                                  mov     [esi+44], edx
  4247 00002C4D 8B462C                                  mov     eax, [esi+44]   ; @@ADD 10,11
  4248 00002C50 014628                                  add     [esi+40], eax
  4249 00002C53 8B4630                                  mov     eax, [esi+48]   ; @@BF2 12,13,14,15
  4250 00002C56 8B5634                                  mov     edx, [esi+52]   ; @@BF 12,13,+,COS4_0,1
  4251 00002C59 015630                                  add     [esi+48], edx
  4252 00002C5C 29D0                                    sub     eax, edx
  4253 00002C5E D1E0                                    shl     eax, 1
  4254 00002C60 BA9A79825A                              mov     edx, 5A82799Ah
  4255 00002C65 F7EA                                    imul    edx
  4256 00002C67 895634                                  mov     [esi+52], edx
  4257 00002C6A 8B4638                                  mov     eax, [esi+56]   ; @@BF 14,15,-,COS4_0,1
  4258 00002C6D 8B563C                                  mov     edx, [esi+60]
  4259 00002C70 015638                                  add     [esi+56], edx
  4260 00002C73 29D0                                    sub     eax, edx
  4261 00002C75 D1E0                                    shl     eax, 1
  4262 00002C77 BA66867DA5                              mov     edx, 0A57D8666h
  4263 00002C7C F7EA                                    imul    edx
  4264 00002C7E 89563C                                  mov     [esi+60], edx
  4265 00002C81 8B463C                                  mov     eax, [esi+60]   ; @@ADD 14,15
  4266 00002C84 014638                                  add     [esi+56], eax
  4267 00002C87 8B4638                                  mov     eax, [esi+56]   ; @@ADD 12,14
  4268 00002C8A 014630                                  add     [esi+48], eax
  4269 00002C8D 8B4634                                  mov     eax, [esi+52]   ; @@ADD 14,13
  4270 00002C90 014638                                  add     [esi+56], eax
  4271 00002C93 8B463C                                  mov     eax, [esi+60]   ; @@ADD 13,15
  4272 00002C96 014634                                  add     [esi+52], eax   ; ENDIF
  4273 00002C99 8B4640                                  mov     eax, [esi+64]   ; @@BF1 16,17,18,19
  4274 00002C9C 8B5644                                  mov     edx, [esi+68]
  4275 00002C9F 015640                                  add     [esi+64], edx
  4276 00002CA2 29D0                                    sub     eax, edx
  4277 00002CA4 D1E0                                    shl     eax, 1
  4278 00002CA6 BA9A79825A                              mov     edx, 5A82799Ah  ; +COS4_0
  4279 00002CAB F7EA                                    imul    edx
  4280 00002CAD 895644                                  mov     [esi+68], edx
  4281 00002CB0 8B4648                                  mov     eax, [esi+72]
  4282 00002CB3 8B564C                                  mov     edx, [esi+76]
  4283 00002CB6 015648                                  add     [esi+72], edx
  4284 00002CB9 29D0                                    sub     eax, edx
  4285 00002CBB D1E0                                    shl     eax, 1
  4286 00002CBD BA66867DA5                              mov     edx, 0A57D8666h ; -COS4_0
  4287 00002CC2 F7EA                                    imul    edx
  4288 00002CC4 89564C                                  mov     [esi+76], edx
  4289 00002CC7 8B464C                                  mov     eax, [esi+76]   ; @@ADD 18,19
  4290 00002CCA 014648                                  add     [esi+72], eax
  4291 00002CCD 8B4650                                  mov     eax, [esi+80]   ; @@BF2 20,21,22,23
  4292 00002CD0 8B5654                                  mov     edx, [esi+84]
  4293 00002CD3 015650                                  add     [esi+80], edx
  4294 00002CD6 29D0                                    sub     eax, edx
  4295 00002CD8 D1E0                                    shl     eax, 1
  4296 00002CDA BA9A79825A                              mov     edx, 5A82799Ah
  4297 00002CDF F7EA                                    imul    edx
  4298 00002CE1 895654                                  mov     [esi+84], edx
  4299 00002CE4 8B4658                                  mov     eax, [esi+88]
  4300 00002CE7 8B565C                                  mov     edx, [esi+92]
  4301 00002CEA 015658                                  add     [esi+88], edx
  4302 00002CED 29D0                                    sub     eax, edx
  4303 00002CEF D1E0                                    shl     eax, 1
  4304 00002CF1 BA66867DA5                              mov     edx, 0A57D8666h
  4305 00002CF6 F7EA                                    imul    edx
  4306 00002CF8 89565C                                  mov     [esi+92], edx
  4307 00002CFB 8B465C                                  mov     eax, [esi+92]   ; @@ADD 22,23
  4308 00002CFE 014658                                  add     [esi+88], eax
  4309 00002D01 8B4658                                  mov     eax, [esi+88]   ; @@ADD 20,22
  4310 00002D04 014650                                  add     [esi+80], eax
  4311 00002D07 8B4654                                  mov     eax, [esi+84]
  4312 00002D0A 014658                                  add     [esi+88], eax
  4313 00002D0D 8B465C                                  mov     eax, [esi+92]
  4314 00002D10 014654                                  add     [esi+84], eax
  4315 00002D13 8B4660                                  mov     eax, [esi+96]   ; @@BF1 24,25,26,27
  4316 00002D16 8B5664                                  mov     edx, [esi+100]
  4317 00002D19 015660                                  add     [esi+96], edx
  4318 00002D1C 29D0                                    sub     eax, edx
  4319 00002D1E D1E0                                    shl     eax, 1
  4320 00002D20 BA9A79825A                              mov     edx, 5A82799Ah
  4321 00002D25 F7EA                                    imul    edx
  4322 00002D27 895664                                  mov     [esi+100], edx
  4323 00002D2A 8B4668                                  mov     eax, [esi+104]
  4324 00002D2D 8B566C                                  mov     edx, [esi+108]
  4325 00002D30 015668                                  add     [esi+104], edx
  4326 00002D33 29D0                                    sub     eax, edx
  4327 00002D35 D1E0                                    shl     eax, 1
  4328 00002D37 BA66867DA5                              mov     edx, 0A57D8666h
  4329 00002D3C F7EA                                    imul    edx
  4330 00002D3E 89566C                                  mov     [esi+108], edx
  4331 00002D41 8B466C                                  mov     eax, [esi+108]
  4332 00002D44 014668                                  add     [esi+104], eax
  4333 00002D47 8B4670                                  mov     eax, [esi+112]  ; @@BF2 28,29,30,31
  4334 00002D4A 8B5674                                  mov     edx, [esi+116]
  4335 00002D4D 015670                                  add     [esi+112], edx
  4336 00002D50 29D0                                    sub     eax, edx
  4337 00002D52 D1E0                                    shl     eax, 1
  4338 00002D54 BA9A79825A                              mov     edx, 5A82799Ah
  4339 00002D59 F7EA                                    imul    edx
  4340 00002D5B 895674                                  mov     [esi+116], edx
  4341 00002D5E 8B4678                                  mov     eax, [esi+120]
  4342 00002D61 8B567C                                  mov     edx, [esi+124]
  4343 00002D64 015678                                  add     [esi+120], edx
  4344 00002D67 29D0                                    sub     eax, edx
  4345 00002D69 D1E0                                    shl     eax, 1
  4346 00002D6B BA66867DA5                              mov     edx, 0A57D8666h
  4347 00002D70 F7EA                                    imul    edx
  4348 00002D72 89567C                                  mov     [esi+124], edx
  4349 00002D75 8B467C                                  mov     eax, [esi+124]
  4350 00002D78 014678                                  add     [esi+120], eax
  4351 00002D7B 8B4678                                  mov     eax, [esi+120]
  4352 00002D7E 014670                                  add     [esi+112], eax
  4353 00002D81 8B4674                                  mov     eax, [esi+116]
  4354 00002D84 014678                                  add     [esi+120], eax
  4355 00002D87 8B467C                                  mov     eax, [esi+124]
  4356 00002D8A 014674                                  add     [esi+116], eax
  4357 00002D8D 8B06                                    mov     eax, [esi]      ; @@OUT macro dst,src1,src2
  4358                                                                          ; IF ((dst AND ((1 SHL rate_shift)-1)) EQ 0)
  4359                                                                          ;    mov eax,dword ptr [esi+src1*4]
  4360                                                                          ;    IFDIFI <src2>,<->
  4361                                                                          ;      add eax,dword ptr [esi+src2*4]
  4362                                                                          ;    ENDIF
  4363                                                                          ;    IF SYNTH32
  4364                                                                          ;       mov dword ptr [edi+dst*4],eax
  4365                                                                          ;       IF (LONG_WINDOW EQ 0)
  4366                                                                          ;          mov dword ptr [edi+dst*4+512*4],eax
  4367                                                                          ;       ENDIF
  4368                                                                          ;    ELSE
  4369                                                                          ;        ......
  4370                                                                          ;    ENDIF
  4371                                                                          ; @@OUT 0,0,-
  4372 00002D8F 8907                                    mov     [edi], eax      ; mov dword ptr [edi+dst*4],eax
  4373 00002D91 8B4604                                  mov     eax, [esi+4]    ; @@OUT 16,1, -
  4374                                                                          ; mov eax,dword ptr [esi+src1*4]
  4375 00002D94 894740                                  mov     [edi+64], eax   ; mov dword ptr [edi+dst*4],eax
  4376 00002D97 8B4608                                  mov     eax, [esi+8]    ; @@OUT 8,2,-
  4377 00002D9A 894720                                  mov     [edi+32], eax
  4378 00002D9D 8B460C                                  mov     eax, [esi+12]   ; @@OUT 24,3,-
  4379 00002DA0 894760                                  mov     [edi+96], eax
  4380 00002DA3 8B4610                                  mov     eax, [esi+16]   ; @@OUT 4,4,-
  4381 00002DA6 894710                                  mov     [edi+16], eax
  4382 00002DA9 8B4614                                  mov     eax, [esi+20]   ; @@OUT 20,5,-
  4383 00002DAC 894750                                  mov     [edi+80], eax
  4384 00002DAF 8B4618                                  mov     eax, [esi+24]   ; @@OUT 12,6,-
  4385 00002DB2 894730                                  mov     [edi+48], eax
  4386 00002DB5 8B461C                                  mov     eax, [esi+28]   ; @@OUT 28,7,-
  4387 00002DB8 894770                                  mov     [edi+112], eax
  4388 00002DBB 8B4620                                  mov     eax, [esi+32]   ; @@OUT 2,8,12
  4389 00002DBE 034630                                  add     eax, [esi+48]   ; add eax,dword ptr [esi+src2*4]
  4390 00002DC1 894708                                  mov     [edi+8], eax
  4391 00002DC4 8B4624                                  mov     eax, [esi+36]   ; @@OUT 18,9,13
  4392 00002DC7 034634                                  add     eax, [esi+52]   ; add eax,dword ptr [esi+src2*4]
  4393 00002DCA 894748                                  mov     [edi+72], eax
  4394 00002DCD 8B4628                                  mov     eax, [esi+40]   ; @@OUT 10,10,14
  4395 00002DD0 034638                                  add     eax, [esi+56]
  4396 00002DD3 894728                                  mov     [edi+40], eax
  4397 00002DD6 8B462C                                  mov     eax, [esi+44]   ; @@OUT 26,11,15
  4398 00002DD9 03463C                                  add     eax, [esi+60]
  4399 00002DDC 894768                                  mov     [edi+104], eax
  4400 00002DDF 8B4630                                  mov     eax, [esi+48]   ; @@OUT 6,12,10
  4401 00002DE2 034628                                  add     eax, [esi+40]
  4402 00002DE5 894718                                  mov     [edi+24], eax
  4403 00002DE8 8B4634                                  mov     eax, [esi+52]   ; @@OUT 22,13,11
  4404 00002DEB 03462C                                  add     eax, [esi+44]
  4405 00002DEE 894758                                  mov     [edi+88], eax
  4406 00002DF1 8B4638                                  mov     eax, [esi+56]   ; @@OUT 14,14,9
  4407 00002DF4 034624                                  add     eax, [esi+36]
  4408 00002DF7 894738                                  mov     [edi+56], eax
  4409 00002DFA 8B463C                                  mov     eax, [esi+60]   ; @@OUT 30,15,-
  4410 00002DFD 894778                                  mov     [edi+120], eax
  4411 00002E00 8B4670                                  mov     eax, [esi+112]  ; @@ADD 24,28
  4412 00002E03 014660                                  add     [esi+96], eax
  4413 00002E06 8B4668                                  mov     eax, [esi+104]  ; @@ADD 28,26
  4414 00002E09 014670                                  add     [esi+112], eax
  4415 00002E0C 8B4678                                  mov     eax, [esi+120]  ; @@ADD 26,30
  4416 00002E0F 014668                                  add     [esi+104], eax
  4417 00002E12 8B4664                                  mov     eax, [esi+100]  ; @@ADD 30,25
  4418 00002E15 014678                                  add     [esi+120], eax
  4419 00002E18 8B4674                                  mov     eax, [esi+116]  ; @@ADD 25,29
  4420 00002E1B 014664                                  add     [esi+100], eax
  4421 00002E1E 8B466C                                  mov     eax, [esi+108]  ; @@ADD 29,27
  4422 00002E21 014674                                  add     [esi+116], eax
  4423 00002E24 8B467C                                  mov     eax, [esi+124]  ; @@ADD 27,31
  4424 00002E27 01466C                                  add     [esi+108], eax
  4425 00002E2A 8B4640                                  mov     eax, [esi+64]   ; @@OUT 1,16,24
  4426 00002E2D 034660                                  add     eax, [esi+96]
  4427 00002E30 894704                                  mov     [edi+4], eax
  4428 00002E33 8B4644                                  mov     eax, [esi+68]   ; @@OUT 17,17,25
  4429 00002E36 034664                                  add     eax, [esi+100]
  4430 00002E39 894744                                  mov     [edi+68], eax
  4431 00002E3C 8B4648                                  mov     eax, [esi+72]   ; @@OUT 9,18,26
  4432 00002E3F 034668                                  add     eax, [esi+104]
  4433 00002E42 894724                                  mov     [edi+36], eax
  4434 00002E45 8B464C                                  mov     eax, [esi+76]   ; @@OUT 25,19,27
  4435 00002E48 03466C                                  add     eax, [esi+108]
  4436 00002E4B 894764                                  mov     [edi+100], eax
  4437 00002E4E 8B4650                                  mov     eax, [esi+80]   ; @@OUT 5,20,28
  4438 00002E51 034670                                  add     eax, [esi+112]
  4439 00002E54 894714                                  mov     [edi+20], eax
  4440 00002E57 8B4654                                  mov     eax, [esi+84]   ; @@OUT 21,21,29
  4441 00002E5A 034674                                  add     eax, [esi+116]
  4442 00002E5D 894754                                  mov     [edi+84], eax
  4443 00002E60 8B4658                                  mov     eax, [esi+88]   ; @@OUT 13,22,30
  4444 00002E63 034678                                  add     eax, [esi+120]
  4445 00002E66 894734                                  mov     [edi+52], eax
  4446 00002E69 8B465C                                  mov     eax, [esi+92]   ; @@OUT 29,23,31
  4447 00002E6C 03467C                                  add     eax, [esi+124]
  4448 00002E6F 894774                                  mov     [edi+116], eax
  4449 00002E72 8B4660                                  mov     eax, [esi+96]   ; @@OUT 3,24,20
  4450 00002E75 034650                                  add     eax, [esi+80]
  4451 00002E78 89470C                                  mov     [edi+12], eax
  4452 00002E7B 8B4664                                  mov     eax, [esi+100]  ; @@OUT 19,25,21
  4453 00002E7E 034654                                  add     eax, [esi+84]
  4454 00002E81 89474C                                  mov     [edi+76], eax
  4455 00002E84 8B4668                                  mov     eax, [esi+104]  ; @@OUT 11,26,22
  4456 00002E87 034658                                  add     eax, [esi+88]
  4457 00002E8A 89472C                                  mov     [edi+44], eax
  4458 00002E8D 8B466C                                  mov     eax, [esi+108]  ; @@OUT 27,27,23
  4459 00002E90 03465C                                  add     eax, [esi+92]
  4460 00002E93 89476C                                  mov     [edi+108], eax
  4461 00002E96 8B4670                                  mov     eax, [esi+112]  ; @@OUT 7,28,18
  4462 00002E99 034648                                  add     eax, [esi+72]
  4463 00002E9C 89471C                                  mov     [edi+28], eax
  4464 00002E9F 8B4674                                  mov     eax, [esi+116]  ; @@OUT 23,29,19
  4465 00002EA2 03464C                                  add     eax, [esi+76]
  4466 00002EA5 89475C                                  mov     [edi+92], eax
  4467 00002EA8 8B4678                                  mov     eax, [esi+120]  ; @@OUT 15,30,17
  4468 00002EAB 034644                                  add     eax, [esi+68]
  4469 00002EAE 89473C                                  mov     [edi+60], eax
  4470 00002EB1 8B467C                                  mov     eax, [esi+124]  ; @@OUT 31,31,-
  4471 00002EB4 89477C                                  mov     [edi+124], eax
  4472 00002EB7 C3                                      retn
  4473                                  
  4474                                  
  4475                                  ; =============== S U B R O U T I N E =======================================
  4476                                  
  4477                                  
  4478                                  mp3_dct32_shift_1:
  4479 00002EB8 8B467C                                  mov     eax, [esi+124]  ; mp3_dct32_macro macro rate_shift ; rate_shift = 1
  4480 00002EBB 0106                                    add     [esi], eax      ; @@BF macro a,b,sign,cos,shift
  4481                                                                          ; @@need_a equ (rate_shift EQ 0) or (a LT 16) ; a = 0
  4482                                                                          ; @@need_b equ (rate_shift EQ 0) or (b LT 16) ; b = 31
  4483                                                                          ; IF @@need_a AND @@need_b ; rate_shift = 0
  4484                                                                          ;    mov eax,dword ptr [esi+a*4]
  4485                                                                          ;    mov edx,dword ptr [esi+b*4]
  4486                                                                          ;    add dword ptr [esi+a*4],edx
  4487                                                                          ; ELSEIF @@need_a
  4488                                                                          ;    mov eax,dword ptr [esi+b*4]
  4489                                                                          ;    add dword ptr [esi+a*4],eax
  4490                                                                          ;
  4491                                                                          ; @@BF 0,31,+,COS0_0,1
  4492 00002EBD 8B4640                                  mov     eax, [esi+64]   ; @@BF 15,16,+,COS0_15,5
  4493 00002EC0 01463C                                  add     [esi+60], eax
  4494 00002EC3 8B06                                    mov     eax, [esi]      ; @@BF 0,15,+,COS1_0,1
  4495 00002EC5 8B563C                                  mov     edx, [esi+60]
  4496 00002EC8 0116                                    add     [esi], edx
  4497 00002ECA 29D0                                    sub     eax, edx
  4498 00002ECC D1E0                                    shl     eax, 1
  4499 00002ECE BA72464F40                              mov     edx, 404F4672h  ; COS1_0
  4500 00002ED3 F7EA                                    imul    edx
  4501 00002ED5 89563C                                  mov     [esi+60], edx
  4502 00002ED8 8B4660                                  mov     eax, [esi+96]   ; skip @@BF 16,31,-,COS1_0,1
  4503                                                                          ; @@BF 7,24,+,COS0_7,1
  4504 00002EDB 01461C                                  add     [esi+28], eax
  4505 00002EDE 8B465C                                  mov     eax, [esi+92]   ; @@BF 8,23,+,COS0_8,1
  4506 00002EE1 014620                                  add     [esi+32], eax
  4507 00002EE4 8B461C                                  mov     eax, [esi+28]   ; @@BF 7,8,+,COS1_7,4
  4508 00002EE7 8B5620                                  mov     edx, [esi+32]
  4509 00002EEA 01561C                                  add     [esi+28], edx
  4510 00002EED 29D0                                    sub     eax, edx
  4511 00002EEF C1E004                                  shl     eax, 4
  4512 00002EF2 BA044E9E51                              mov     edx, 519E4E04h  ; COS1_7
  4513 00002EF7 F7EA                                    imul    edx
  4514 00002EF9 895620                                  mov     [esi+32], edx
  4515 00002EFC 8B06                                    mov     eax, [esi]      ; skip @@BF 23,24,-,COS1_7,4
  4516                                                                          ; @@BF 0,7,+,COS2_0,1
  4517 00002EFE 8B561C                                  mov     edx, [esi+28]
  4518 00002F01 0116                                    add     [esi], edx
  4519 00002F03 29D0                                    sub     eax, edx
  4520 00002F05 D1E0                                    shl     eax, 1
  4521 00002F07 BA46FB4041                              mov     edx, 4140FB46h  ; COS2_0
  4522 00002F0C F7EA                                    imul    edx
  4523 00002F0E 89561C                                  mov     [esi+28], edx
  4524 00002F11 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,15,-,COS2_0,1
  4525 00002F14 8B563C                                  mov     edx, [esi+60]
  4526 00002F17 015620                                  add     [esi+32], edx
  4527 00002F1A 29D0                                    sub     eax, edx
  4528 00002F1C D1E0                                    shl     eax, 1
  4529 00002F1E BABA04BFBE                              mov     edx, 0BEBF04BAh ; -COS2_0
  4530 00002F23 F7EA                                    imul    edx
  4531 00002F25 89563C                                  mov     [esi+60], edx
  4532 00002F28 8B4670                                  mov     eax, [esi+112]  ; skip @@BF 16,23,+,COS2_0,1
  4533                                                                          ;      @@BF 24,31,-,COS2_0,1
  4534                                                                          ; @@BF 3,28,+,COS0_3,1
  4535 00002F2B 01460C                                  add     [esi+12], eax
  4536 00002F2E 8B464C                                  mov     eax, [esi+76]   ; @@BF 12,19,+,COS0_12,2
  4537 00002F31 014630                                  add     [esi+48], eax
  4538 00002F34 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,12,+,COS1_3,1
  4539 00002F37 8B5630                                  mov     edx, [esi+48]
  4540 00002F3A 01560C                                  add     [esi+12], edx
  4541 00002F3D 29D0                                    sub     eax, edx
  4542 00002F3F D1E0                                    shl     eax, 1
  4543 00002F41 BA630ECB52                              mov     edx, 52CB0E63h
  4544 00002F46 F7EA                                    imul    edx
  4545 00002F48 895630                                  mov     [esi+48], edx
  4546 00002F4B 8B466C                                  mov     eax, [esi+108]  ; @@BF 4,27,+,COS0_4,1
  4547 00002F4E 014610                                  add     [esi+16], eax
  4548 00002F51 8B4650                                  mov     eax, [esi+80]   ; @@BF 11,20,+,COS0_11,2
  4549 00002F54 01462C                                  add     [esi+44], eax
  4550 00002F57 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,11,+,COS1_4,1
  4551 00002F5A 8B562C                                  mov     edx, [esi+44]
  4552 00002F5D 015610                                  add     [esi+16], edx
  4553 00002F60 29D0                                    sub     eax, edx
  4554 00002F62 D1E0                                    shl     eax, 1
  4555 00002F64 BA2E40E264                              mov     edx, 64E2402Eh  ; COS1_4
  4556 00002F69 F7EA                                    imul    edx
  4557 00002F6B 89562C                                  mov     [esi+44], edx
  4558 00002F6E 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,4,+,COS2_3,3
  4559 00002F71 8B5610                                  mov     edx, [esi+16]
  4560 00002F74 01560C                                  add     [esi+12], edx
  4561 00002F77 29D0                                    sub     eax, edx
  4562 00002F79 C1E003                                  shl     eax, 3
  4563 00002F7C BA42670352                              mov     edx, 52036742h
  4564 00002F81 F7EA                                    imul    edx
  4565 00002F83 895610                                  mov     [esi+16], edx
  4566 00002F86 8B462C                                  mov     eax, [esi+44]   ; @@BF 11,12,-,COS2_3,3
  4567 00002F89 8B5630                                  mov     edx, [esi+48]
  4568 00002F8C 01562C                                  add     [esi+44], edx
  4569 00002F8F 29D0                                    sub     eax, edx
  4570 00002F91 C1E003                                  shl     eax, 3
  4571 00002F94 BABE98FCAD                              mov     edx, 0ADFC98BEh ; -COS2_3
  4572 00002F99 F7EA                                    imul    edx
  4573 00002F9B 895630                                  mov     [esi+48], edx
  4574 00002F9E 8B06                                    mov     eax, [esi]      ; @@BF 0,3,+,COS3_0,1
  4575 00002FA0 8B560C                                  mov     edx, [esi+12]
  4576 00002FA3 0116                                    add     [esi], edx
  4577 00002FA5 29D0                                    sub     eax, edx
  4578 00002FA7 D1E0                                    shl     eax, 1
  4579 00002FA9 BAF0E94545                              mov     edx, 4545E9F0h
  4580 00002FAE F7EA                                    imul    edx
  4581 00002FB0 89560C                                  mov     [esi+12], edx
  4582 00002FB3 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,7,-,COS3_0,1
  4583 00002FB6 8B561C                                  mov     edx, [esi+28]
  4584 00002FB9 015610                                  add     [esi+16], edx
  4585 00002FBC 29D0                                    sub     eax, edx
  4586 00002FBE D1E0                                    shl     eax, 1
  4587 00002FC0 BA1016BABA                              mov     edx, 0BABA1610h
  4588 00002FC5 F7EA                                    imul    edx
  4589 00002FC7 89561C                                  mov     [esi+28], edx
  4590 00002FCA 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,11,+,COS3_0,1
  4591 00002FCD 8B562C                                  mov     edx, [esi+44]
  4592 00002FD0 015620                                  add     [esi+32], edx
  4593 00002FD3 29D0                                    sub     eax, edx
  4594 00002FD5 D1E0                                    shl     eax, 1
  4595 00002FD7 BAF0E94545                              mov     edx, 4545E9F0h
  4596 00002FDC F7EA                                    imul    edx
  4597 00002FDE 89562C                                  mov     [esi+44], edx
  4598 00002FE1 8B4630                                  mov     eax, [esi+48]   ; @@BF 12,15,-,COS3_0,1
  4599 00002FE4 8B563C                                  mov     edx, [esi+60]
  4600 00002FE7 015630                                  add     [esi+48], edx
  4601 00002FEA 29D0                                    sub     eax, edx
  4602 00002FEC D1E0                                    shl     eax, 1
  4603 00002FEE BA1016BABA                              mov     edx, 0BABA1610h ; -COS3_0
  4604 00002FF3 F7EA                                    imul    edx
  4605 00002FF5 89563C                                  mov     [esi+60], edx
  4606 00002FF8 8B4678                                  mov     eax, [esi+120]  ; @@BF 1,30,+,COS0_1,1
  4607 00002FFB 014604                                  add     [esi+4], eax
  4608 00002FFE 8B4644                                  mov     eax, [esi+68]   ; @@BF 14,17,+,COS0_14,3
  4609 00003001 014638                                  add     [esi+56], eax
  4610 00003004 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,14,+,COS1_1,1
  4611 00003007 8B5638                                  mov     edx, [esi+56]
  4612 0000300A 015604                                  add     [esi+4], edx
  4613 0000300D 29D0                                    sub     eax, edx
  4614 0000300F D1E0                                    shl     eax, 1
  4615 00003011 BA103CE142                              mov     edx, 42E13C10h
  4616 00003016 F7EA                                    imul    edx
  4617 00003018 895638                                  mov     [esi+56], edx
  4618 0000301B 8B4664                                  mov     eax, [esi+100]  ; @@BF 6,25,+,COS0_6,1
  4619 0000301E 014618                                  add     [esi+24], eax
  4620 00003021 8B4658                                  mov     eax, [esi+88]   ; @@BF 9,22,+,COS0_9,1
  4621 00003024 014624                                  add     [esi+36], eax
  4622 00003027 8B4618                                  mov     eax, [esi+24]   ; @@BF 6,9,+,COS1_6,2
  4623 0000302A 8B5624                                  mov     edx, [esi+36]
  4624 0000302D 015618                                  add     [esi+24], edx
  4625 00003030 29D0                                    sub     eax, edx
  4626 00003032 C1E002                                  shl     eax, 2
  4627 00003035 BAC2923C6E                              mov     edx, 6E3C92C2h  ; +COS1_6
  4628 0000303A F7EA                                    imul    edx
  4629 0000303C 895624                                  mov     [esi+36], edx
  4630 0000303F 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,6,+,COS2_1,1
  4631 00003042 8B5618                                  mov     edx, [esi+24]
  4632 00003045 015604                                  add     [esi+4], edx
  4633 00003048 29D0                                    sub     eax, edx
  4634 0000304A D1E0                                    shl     eax, 1
  4635 0000304C BA88DEF84C                              mov     edx, 4CF8DE88h
  4636 00003051 F7EA                                    imul    edx
  4637 00003053 895618                                  mov     [esi+24], edx
  4638 00003056 8B4624                                  mov     eax, [esi+36]   ; @@BF 9,14,-,COS2_1,1
  4639 00003059 8B5638                                  mov     edx, [esi+56]
  4640 0000305C 015624                                  add     [esi+36], edx
  4641 0000305F 29D0                                    sub     eax, edx
  4642 00003061 D1E0                                    shl     eax, 1
  4643 00003063 BA782107B3                              mov     edx, 0B3072178h ; -COS2_1
  4644 00003068 F7EA                                    imul    edx
  4645 0000306A 895638                                  mov     [esi+56], edx
  4646 0000306D 8B4674                                  mov     eax, [esi+116]  ; @@BF 2,29,+,COS0_2,1
  4647 00003070 014608                                  add     [esi+8], eax
  4648 00003073 8B4648                                  mov     eax, [esi+72]   ; @@BF 13,18,+,COS0_13,3
  4649 00003076 014634                                  add     [esi+52], eax
  4650 00003079 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,13,+,COS1_2,1
  4651 0000307C 8B5634                                  mov     edx, [esi+52]
  4652 0000307F 015608                                  add     [esi+8], edx
  4653 00003082 29D0                                    sub     eax, edx
  4654 00003084 D1E0                                    shl     eax, 1
  4655 00003086 BA459F9148                              mov     edx, 48919F45h
  4656 0000308B F7EA                                    imul    edx
  4657 0000308D 895634                                  mov     [esi+52], edx
  4658 00003090 8B4668                                  mov     eax, [esi+104]  ; @@BF 5,26,+,COS0_5,1
  4659 00003093 014614                                  add     [esi+20], eax
  4660 00003096 8B4654                                  mov     eax, [esi+84]   ; @@BF 10,21,+,COS0_10,1
  4661 00003099 014628                                  add     [esi+40], eax
  4662 0000309C 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,10,+,COS1_5,2
  4663 0000309F 8B5628                                  mov     edx, [esi+40]
  4664 000030A2 015614                                  add     [esi+20], edx
  4665 000030A5 29D0                                    sub     eax, edx
  4666 000030A7 C1E002                                  shl     eax, 2
  4667 000030AA BAAA24E243                              mov     edx, 43E224AAh
  4668 000030AF F7EA                                    imul    edx
  4669 000030B1 895628                                  mov     [esi+40], edx
  4670 000030B4 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,5,+,COS2_2,1
  4671 000030B7 8B5614                                  mov     edx, [esi+20]
  4672 000030BA 015608                                  add     [esi+8], edx
  4673 000030BD 29D0                                    sub     eax, edx
  4674 000030BF D1E0                                    shl     eax, 1
  4675 000030C1 BABF6B3273                              mov     edx, 73326BBFh  ; COS2_2
  4676 000030C6 F7EA                                    imul    edx
  4677 000030C8 895614                                  mov     [esi+20], edx
  4678 000030CB 8B4628                                  mov     eax, [esi+40]   ; @@BF 10,13,-,COS2_2,1
  4679 000030CE 8B5634                                  mov     edx, [esi+52]
  4680 000030D1 015628                                  add     [esi+40], edx
  4681 000030D4 29D0                                    sub     eax, edx
  4682 000030D6 D1E0                                    shl     eax, 1
  4683 000030D8 BA4194CD8C                              mov     edx, 8CCD9441h  ; -COS2_2
  4684 000030DD F7EA                                    imul    edx
  4685 000030DF 895634                                  mov     [esi+52], edx
  4686 000030E2 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,2,+,COS3_1,2
  4687 000030E5 8B5608                                  mov     edx, [esi+8]
  4688 000030E8 015604                                  add     [esi+4], edx
  4689 000030EB 29D0                                    sub     eax, edx
  4690 000030ED C1E002                                  shl     eax, 2
  4691 000030F0 BA46BA9E53                              mov     edx, 539EBA46h
  4692 000030F5 F7EA                                    imul    edx
  4693 000030F7 895608                                  mov     [esi+8], edx
  4694 000030FA 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,6,-,COS3_1,2
  4695 000030FD 8B5618                                  mov     edx, [esi+24]
  4696 00003100 015614                                  add     [esi+20], edx
  4697 00003103 29D0                                    sub     eax, edx
  4698 00003105 C1E002                                  shl     eax, 2
  4699 00003108 BABA4561AC                              mov     edx, 0AC6145BAh
  4700 0000310D F7EA                                    imul    edx
  4701 0000310F 895618                                  mov     [esi+24], edx
  4702 00003112 8B4624                                  mov     eax, [esi+36]   ; IF rate_shift LT 2
  4703                                                                          ; @@BF 9,10,+,COS3_1,2
  4704 00003115 8B5628                                  mov     edx, [esi+40]
  4705 00003118 015624                                  add     [esi+36], edx
  4706 0000311B 29D0                                    sub     eax, edx
  4707 0000311D C1E002                                  shl     eax, 2
  4708 00003120 BA46BA9E53                              mov     edx, 539EBA46h  ; +COS3_1
  4709 00003125 F7EA                                    imul    edx
  4710 00003127 895628                                  mov     [esi+40], edx
  4711 0000312A 8B4634                                  mov     eax, [esi+52]   ; @@BF 13,14,-,COS3_1,2
  4712 0000312D 8B5638                                  mov     edx, [esi+56]
  4713 00003130 015634                                  add     [esi+52], edx
  4714 00003133 29D0                                    sub     eax, edx
  4715 00003135 C1E002                                  shl     eax, 2
  4716 00003138 BABA4561AC                              mov     edx, 0AC6145BAh ; -COS3_1
  4717 0000313D F7EA                                    imul    edx
  4718 0000313F 895638                                  mov     [esi+56], edx   ; ENDIF
  4719 00003142 8B06                                    mov     eax, [esi]      ; @@BF1 macro a, b, c, d
  4720                                                                          ;   @@BF  a, b,+,COS4_0, 1
  4721                                                                          ;   @@BF  c, d,-,COS4_0, 1
  4722                                                                          ;   @@ADD c, d
  4723                                                                          ;  endm
  4724                                                                          ; @@BF1 0,1,2,3
  4725 00003144 8B5604                                  mov     edx, [esi+4]    ; @@BF 0,1,+,COS4_0,1
  4726 00003147 0116                                    add     [esi], edx
  4727 00003149 29D0                                    sub     eax, edx
  4728 0000314B D1E0                                    shl     eax, 1
  4729 0000314D BA9A79825A                              mov     edx, 5A82799Ah
  4730 00003152 F7EA                                    imul    edx
  4731 00003154 895604                                  mov     [esi+4], edx
  4732 00003157 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,3,+,COS4_0,1
  4733 0000315A 8B560C                                  mov     edx, [esi+12]
  4734 0000315D 015608                                  add     [esi+8], edx
  4735 00003160 29D0                                    sub     eax, edx
  4736 00003162 D1E0                                    shl     eax, 1
  4737 00003164 BA66867DA5                              mov     edx, 0A57D8666h
  4738 00003169 F7EA                                    imul    edx
  4739 0000316B 89560C                                  mov     [esi+12], edx
  4740 0000316E 8B460C                                  mov     eax, [esi+12]   ; @@ADD 2,3
  4741 00003171 014608                                  add     [esi+8], eax
  4742 00003174 8B4610                                  mov     eax, [esi+16]   ; @@BF2 macro a, b, c, d
  4743                                                                          ;   @@BF  a, b,+,COS4_0, 1
  4744                                                                          ;   @@BF  c, d,-,COS4_0, 1
  4745                                                                          ;   @@ADD c, d
  4746                                                                          ;   @@ADD a, c
  4747                                                                          ;   @@ADD c, b
  4748                                                                          ;   @@ADD b, d
  4749                                                                          ;  endm
  4750                                                                          ; @@BF2 4,5,6,7
  4751 00003177 8B5614                                  mov     edx, [esi+20]   ; @@BF 4,5,+,COS4_0,1
  4752 0000317A 015610                                  add     [esi+16], edx
  4753 0000317D 29D0                                    sub     eax, edx
  4754 0000317F D1E0                                    shl     eax, 1
  4755 00003181 BA9A79825A                              mov     edx, 5A82799Ah  ; +COS4_0
  4756 00003186 F7EA                                    imul    edx
  4757 00003188 895614                                  mov     [esi+20], edx
  4758 0000318B 8B4618                                  mov     eax, [esi+24]   ; @@BF 6,7,-,COS4_0,1
  4759 0000318E 8B561C                                  mov     edx, [esi+28]
  4760 00003191 015618                                  add     [esi+24], edx
  4761 00003194 29D0                                    sub     eax, edx
  4762 00003196 D1E0                                    shl     eax, 1
  4763 00003198 BA66867DA5                              mov     edx, 0A57D8666h ; -COS4_0
  4764 0000319D F7EA                                    imul    edx
  4765 0000319F 89561C                                  mov     [esi+28], edx
  4766 000031A2 8B461C                                  mov     eax, [esi+28]   ; @@ADD macro dst,src
  4767                                                                          ;   IF (rate_shift EQ 0) or (dst LT 16)
  4768                                                                          ;    ;tab[a] += tab[b]
  4769                                                                          ;    mov  eax,dword ptr [esi+src*4]
  4770                                                                          ;    add  dword ptr [esi+dst*4],eax
  4771                                                                          ;   ENDIF
  4772                                                                          ;  endm
  4773                                                                          ; @@ADD 6,7
  4774 000031A5 014618                                  add     [esi+24], eax
  4775 000031A8 8B4618                                  mov     eax, [esi+24]   ; @@ADD 4,6
  4776 000031AB 014610                                  add     [esi+16], eax
  4777 000031AE 8B4614                                  mov     eax, [esi+20]   ; @@ADD 6,5
  4778 000031B1 014618                                  add     [esi+24], eax
  4779 000031B4 8B461C                                  mov     eax, [esi+28]   ; @@ADD 5,7
  4780 000031B7 014614                                  add     [esi+20], eax
  4781 000031BA 8B4620                                  mov     eax, [esi+32]   ; IF rate_shift LT 2
  4782                                                                          ; @@BF1 8,9,10,11
  4783 000031BD 8B5624                                  mov     edx, [esi+36]
  4784 000031C0 015620                                  add     [esi+32], edx
  4785 000031C3 29D0                                    sub     eax, edx
  4786 000031C5 D1E0                                    shl     eax, 1
  4787 000031C7 BA9A79825A                              mov     edx, 5A82799Ah
  4788 000031CC F7EA                                    imul    edx
  4789 000031CE 895624                                  mov     [esi+36], edx
  4790 000031D1 8B4628                                  mov     eax, [esi+40]
  4791 000031D4 8B562C                                  mov     edx, [esi+44]
  4792 000031D7 015628                                  add     [esi+40], edx
  4793 000031DA 29D0                                    sub     eax, edx
  4794 000031DC D1E0                                    shl     eax, 1
  4795 000031DE BA66867DA5                              mov     edx, 0A57D8666h
  4796 000031E3 F7EA                                    imul    edx
  4797 000031E5 89562C                                  mov     [esi+44], edx
  4798 000031E8 8B462C                                  mov     eax, [esi+44]
  4799 000031EB 014628                                  add     [esi+40], eax
  4800 000031EE 8B4630                                  mov     eax, [esi+48]   ; @@BF2 12,13,14,15
  4801 000031F1 8B5634                                  mov     edx, [esi+52]
  4802 000031F4 015630                                  add     [esi+48], edx
  4803 000031F7 29D0                                    sub     eax, edx
  4804 000031F9 D1E0                                    shl     eax, 1
  4805 000031FB BA9A79825A                              mov     edx, 5A82799Ah
  4806 00003200 F7EA                                    imul    edx
  4807 00003202 895634                                  mov     [esi+52], edx
  4808 00003205 8B4638                                  mov     eax, [esi+56]
  4809 00003208 8B563C                                  mov     edx, [esi+60]
  4810 0000320B 015638                                  add     [esi+56], edx
  4811 0000320E 29D0                                    sub     eax, edx
  4812 00003210 D1E0                                    shl     eax, 1
  4813 00003212 BA66867DA5                              mov     edx, 0A57D8666h
  4814 00003217 F7EA                                    imul    edx
  4815 00003219 89563C                                  mov     [esi+60], edx
  4816 0000321C 8B463C                                  mov     eax, [esi+60]
  4817 0000321F 014638                                  add     [esi+56], eax
  4818 00003222 8B4638                                  mov     eax, [esi+56]
  4819 00003225 014630                                  add     [esi+48], eax
  4820 00003228 8B4634                                  mov     eax, [esi+52]
  4821 0000322B 014638                                  add     [esi+56], eax
  4822 0000322E 8B463C                                  mov     eax, [esi+60]
  4823 00003231 014634                                  add     [esi+52], eax
  4824 00003234 8B06                                    mov     eax, [esi]      ; @@OUT macro dst,src1,src2
  4825                                                                          ; IF ((dst AND ((1 SHL rate_shift)-1)) EQ 0)
  4826                                                                          ;    mov eax,dword ptr [esi+src1*4]
  4827                                                                          ;    IFDIFI <src2>,<->
  4828                                                                          ;      add eax,dword ptr [esi+src2*4]
  4829                                                                          ;    ENDIF
  4830                                                                          ;    IF SYNTH32
  4831                                                                          ;       mov dword ptr [edi+dst*4],eax
  4832                                                                          ;       IF (LONG_WINDOW EQ 0)
  4833                                                                          ;          mov dword ptr [edi+dst*4+512*4],eax
  4834                                                                          ;       ENDIF
  4835                                                                          ;    ELSE
  4836                                                                          ;        ......
  4837                                                                          ;    ENDIF
  4838                                                                          ; @@OUT 0,0,-
  4839 00003236 8907                                    mov     [edi], eax
  4840 00003238 8B4604                                  mov     eax, [esi+4]    ; @@OUT 16,1,-
  4841 0000323B 894740                                  mov     [edi+64], eax
  4842 0000323E 8B4608                                  mov     eax, [esi+8]    ; @@OUT 8,2,-
  4843 00003241 894720                                  mov     [edi+32], eax
  4844 00003244 8B460C                                  mov     eax, [esi+12]   ; @@OUT 24,3,-
  4845 00003247 894760                                  mov     [edi+96], eax
  4846 0000324A 8B4610                                  mov     eax, [esi+16]   ; @@OUT 4,4,-
  4847 0000324D 894710                                  mov     [edi+16], eax
  4848 00003250 8B4614                                  mov     eax, [esi+20]   ; @@OUT 20,5,-
  4849 00003253 894750                                  mov     [edi+80], eax
  4850 00003256 8B4618                                  mov     eax, [esi+24]   ; @@OUT 12,6,-
  4851 00003259 894730                                  mov     [edi+48], eax
  4852 0000325C 8B461C                                  mov     eax, [esi+28]   ; @@OUT 28,7,-
  4853 0000325F 894770                                  mov     [edi+112], eax
  4854 00003262 8B4620                                  mov     eax, [esi+32]   ; @@OUT 2,8,12
  4855 00003265 034630                                  add     eax, [esi+48]
  4856 00003268 894708                                  mov     [edi+8], eax
  4857 0000326B 8B4624                                  mov     eax, [esi+36]   ; @@OUT 18,9,13
  4858 0000326E 034634                                  add     eax, [esi+52]
  4859 00003271 894748                                  mov     [edi+72], eax
  4860 00003274 8B4628                                  mov     eax, [esi+40]   ; @@OUT 10,10,14
  4861 00003277 034638                                  add     eax, [esi+56]
  4862 0000327A 894728                                  mov     [edi+40], eax
  4863 0000327D 8B462C                                  mov     eax, [esi+44]   ; @@OUT 26,11,15
  4864 00003280 03463C                                  add     eax, [esi+60]
  4865 00003283 894768                                  mov     [edi+104], eax
  4866 00003286 8B4630                                  mov     eax, [esi+48]   ; @@OUT 6,12,10
  4867 00003289 034628                                  add     eax, [esi+40]
  4868 0000328C 894718                                  mov     [edi+24], eax
  4869 0000328F 8B4634                                  mov     eax, [esi+52]   ; @@OUT 22,13,11
  4870 00003292 03462C                                  add     eax, [esi+44]
  4871 00003295 894758                                  mov     [edi+88], eax
  4872 00003298 8B4638                                  mov     eax, [esi+56]   ; @@OUT 14,14,9
  4873 0000329B 034624                                  add     eax, [esi+36]
  4874 0000329E 894738                                  mov     [edi+56], eax
  4875 000032A1 8B463C                                  mov     eax, [esi+60]   ; @@OUT 30,15,-
  4876 000032A4 894778                                  mov     [edi+120], eax
  4877 000032A7 C3                                      retn
  4878                                  
  4879                                  
  4880                                  ; =============== S U B R O U T I N E =======================================
  4881                                  
  4882                                  
  4883                                  mp3_dct32_shift_2:
  4884 000032A8 8B467C                                  mov     eax, [esi+124]  ; mp3_dct32_macro macro rate_shift ; rate_shift = 2
  4885 000032AB 0106                                    add     [esi], eax      ; @@BF macro a,b,sign,cos,shift
  4886                                                                          ; @@need_a equ (rate_shift EQ 0) or (a LT 16) ; a = 0
  4887                                                                          ; @@need_b equ (rate_shift EQ 0) or (b LT 16) ; b = 31
  4888                                                                          ; IF @@need_a AND @@need_b ; rate_shift = 0
  4889                                                                          ;    mov eax,dword ptr [esi+a*4]
  4890                                                                          ;    mov edx,dword ptr [esi+b*4]
  4891                                                                          ;    add dword ptr [esi+a*4],edx
  4892                                                                          ; ELSEIF @@need_a
  4893                                                                          ;    mov eax,dword ptr [esi+b*4]
  4894                                                                          ;    add dword ptr [esi+a*4],eax
  4895                                                                          ;
  4896                                                                          ; @@BF 0,31,+,COS0_0,1
  4897 000032AD 8B4640                                  mov     eax, [esi+64]   ; @@BF 15,16,+,COS0_15,5
  4898 000032B0 01463C                                  add     [esi+60], eax
  4899 000032B3 8B06                                    mov     eax, [esi]      ; @@BF 0,15,+,COS1_0,1
  4900 000032B5 8B563C                                  mov     edx, [esi+60]
  4901 000032B8 0116                                    add     [esi], edx
  4902 000032BA 29D0                                    sub     eax, edx
  4903 000032BC D1E0                                    shl     eax, 1
  4904 000032BE BA72464F40                              mov     edx, 404F4672h  ; COS1_0
  4905 000032C3 F7EA                                    imul    edx
  4906 000032C5 89563C                                  mov     [esi+60], edx
  4907 000032C8 8B4660                                  mov     eax, [esi+96]   ; @@BF 7,24,+,COS0_7,1
  4908 000032CB 01461C                                  add     [esi+28], eax
  4909 000032CE 8B465C                                  mov     eax, [esi+92]   ; @@BF 8,23,+,COS0_8,1
  4910 000032D1 014620                                  add     [esi+32], eax
  4911 000032D4 8B461C                                  mov     eax, [esi+28]   ; @@BF 7,8,+,COS1_7,4
  4912 000032D7 8B5620                                  mov     edx, [esi+32]
  4913 000032DA 01561C                                  add     [esi+28], edx
  4914 000032DD 29D0                                    sub     eax, edx
  4915 000032DF C1E004                                  shl     eax, 4
  4916 000032E2 BA044E9E51                              mov     edx, 519E4E04h  ; COS1_7
  4917 000032E7 F7EA                                    imul    edx
  4918 000032E9 895620                                  mov     [esi+32], edx
  4919 000032EC 8B06                                    mov     eax, [esi]      ; @@BF 0,7,+,COS2_0,1
  4920 000032EE 8B561C                                  mov     edx, [esi+28]
  4921 000032F1 0116                                    add     [esi], edx
  4922 000032F3 29D0                                    sub     eax, edx
  4923 000032F5 D1E0                                    shl     eax, 1
  4924 000032F7 BA46FB4041                              mov     edx, 4140FB46h  ; COS2_0
  4925 000032FC F7EA                                    imul    edx
  4926 000032FE 89561C                                  mov     [esi+28], edx
  4927 00003301 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,15,-,COS2_0,1
  4928 00003304 8B563C                                  mov     edx, [esi+60]
  4929 00003307 015620                                  add     [esi+32], edx
  4930 0000330A 29D0                                    sub     eax, edx
  4931 0000330C D1E0                                    shl     eax, 1
  4932 0000330E BABA04BFBE                              mov     edx, 0BEBF04BAh
  4933 00003313 F7EA                                    imul    edx
  4934 00003315 89563C                                  mov     [esi+60], edx
  4935 00003318 8B4670                                  mov     eax, [esi+112]  ; @@BF 3,28,+,COS0_3,1
  4936 0000331B 01460C                                  add     [esi+12], eax
  4937 0000331E 8B464C                                  mov     eax, [esi+76]   ; @@BF 12,19,+,COS0_12,2
  4938 00003321 014630                                  add     [esi+48], eax
  4939 00003324 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,12,+,COS1_3,1
  4940 00003327 8B5630                                  mov     edx, [esi+48]
  4941 0000332A 01560C                                  add     [esi+12], edx
  4942 0000332D 29D0                                    sub     eax, edx
  4943 0000332F D1E0                                    shl     eax, 1
  4944 00003331 BA630ECB52                              mov     edx, 52CB0E63h  ; COS1_3
  4945 00003336 F7EA                                    imul    edx
  4946 00003338 895630                                  mov     [esi+48], edx
  4947 0000333B 8B466C                                  mov     eax, [esi+108]  ; @@BF 4,27,+,COS0_4,1
  4948 0000333E 014610                                  add     [esi+16], eax
  4949 00003341 8B4650                                  mov     eax, [esi+80]   ; @@BF 11,20,+,COS0_11,2
  4950 00003344 01462C                                  add     [esi+44], eax
  4951 00003347 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,11,+,COS1_4,1
  4952 0000334A 8B562C                                  mov     edx, [esi+44]
  4953 0000334D 015610                                  add     [esi+16], edx
  4954 00003350 29D0                                    sub     eax, edx
  4955 00003352 D1E0                                    shl     eax, 1
  4956 00003354 BA2E40E264                              mov     edx, 64E2402Eh
  4957 00003359 F7EA                                    imul    edx
  4958 0000335B 89562C                                  mov     [esi+44], edx
  4959 0000335E 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,4,+,COS2_3,3
  4960 00003361 8B5610                                  mov     edx, [esi+16]
  4961 00003364 01560C                                  add     [esi+12], edx
  4962 00003367 29D0                                    sub     eax, edx
  4963 00003369 C1E003                                  shl     eax, 3
  4964 0000336C BA42670352                              mov     edx, 52036742h
  4965 00003371 F7EA                                    imul    edx
  4966 00003373 895610                                  mov     [esi+16], edx
  4967 00003376 8B462C                                  mov     eax, [esi+44]   ; @@BF 11,12,-,COS2_3,3
  4968 00003379 8B5630                                  mov     edx, [esi+48]
  4969 0000337C 01562C                                  add     [esi+44], edx
  4970 0000337F 29D0                                    sub     eax, edx
  4971 00003381 C1E003                                  shl     eax, 3
  4972 00003384 BABE98FCAD                              mov     edx, 0ADFC98BEh ; -COS2_3
  4973 00003389 F7EA                                    imul    edx
  4974 0000338B 895630                                  mov     [esi+48], edx
  4975 0000338E 8B06                                    mov     eax, [esi]      ; @@BF 0,3,+,COS3_0,1
  4976 00003390 8B560C                                  mov     edx, [esi+12]
  4977 00003393 0116                                    add     [esi], edx
  4978 00003395 29D0                                    sub     eax, edx
  4979 00003397 D1E0                                    shl     eax, 1
  4980 00003399 BAF0E94545                              mov     edx, 4545E9F0h
  4981 0000339E F7EA                                    imul    edx
  4982 000033A0 89560C                                  mov     [esi+12], edx
  4983 000033A3 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,7,-,COS3_0,1
  4984 000033A6 8B561C                                  mov     edx, [esi+28]
  4985 000033A9 015610                                  add     [esi+16], edx
  4986 000033AC 29D0                                    sub     eax, edx
  4987 000033AE D1E0                                    shl     eax, 1
  4988 000033B0 BA1016BABA                              mov     edx, 0BABA1610h
  4989 000033B5 F7EA                                    imul    edx
  4990 000033B7 89561C                                  mov     [esi+28], edx
  4991 000033BA 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,11,+,COS3_0,1
  4992 000033BD 8B562C                                  mov     edx, [esi+44]
  4993 000033C0 015620                                  add     [esi+32], edx
  4994 000033C3 29D0                                    sub     eax, edx
  4995 000033C5 D1E0                                    shl     eax, 1
  4996 000033C7 BAF0E94545                              mov     edx, 4545E9F0h
  4997 000033CC F7EA                                    imul    edx
  4998 000033CE 89562C                                  mov     [esi+44], edx
  4999 000033D1 8B4630                                  mov     eax, [esi+48]   ; @@BF 12,15,-,COS3_0,1
  5000 000033D4 8B563C                                  mov     edx, [esi+60]
  5001 000033D7 015630                                  add     [esi+48], edx
  5002 000033DA 29D0                                    sub     eax, edx
  5003 000033DC D1E0                                    shl     eax, 1
  5004 000033DE BA1016BABA                              mov     edx, 0BABA1610h
  5005 000033E3 F7EA                                    imul    edx
  5006 000033E5 89563C                                  mov     [esi+60], edx
  5007 000033E8 8B4678                                  mov     eax, [esi+120]  ; @@BF 1,30,+,COS0_1,1
  5008 000033EB 014604                                  add     [esi+4], eax
  5009 000033EE 8B4644                                  mov     eax, [esi+68]   ; @@BF 14,17,+,COS0_14,3
  5010 000033F1 014638                                  add     [esi+56], eax
  5011 000033F4 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,14,+,COS1_1,1
  5012 000033F7 8B5638                                  mov     edx, [esi+56]
  5013 000033FA 015604                                  add     [esi+4], edx
  5014 000033FD 29D0                                    sub     eax, edx
  5015 000033FF D1E0                                    shl     eax, 1
  5016 00003401 BA103CE142                              mov     edx, 42E13C10h  ; COS1_1
  5017 00003406 F7EA                                    imul    edx
  5018 00003408 895638                                  mov     [esi+56], edx
  5019 0000340B 8B4664                                  mov     eax, [esi+100]  ; @@BF 6,25,+,COS0_6,1
  5020 0000340E 014618                                  add     [esi+24], eax
  5021 00003411 8B4658                                  mov     eax, [esi+88]   ; @@BF 9,22,+,COS0_9,1
  5022 00003414 014624                                  add     [esi+36], eax
  5023 00003417 8B4618                                  mov     eax, [esi+24]   ; @@BF 6,9,+,COS1_6,2
  5024 0000341A 8B5624                                  mov     edx, [esi+36]
  5025 0000341D 015618                                  add     [esi+24], edx
  5026 00003420 29D0                                    sub     eax, edx
  5027 00003422 C1E002                                  shl     eax, 2
  5028 00003425 BAC2923C6E                              mov     edx, 6E3C92C2h
  5029 0000342A F7EA                                    imul    edx
  5030 0000342C 895624                                  mov     [esi+36], edx
  5031 0000342F 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,6,+,COS2_1,1
  5032 00003432 8B5618                                  mov     edx, [esi+24]
  5033 00003435 015604                                  add     [esi+4], edx
  5034 00003438 29D0                                    sub     eax, edx
  5035 0000343A D1E0                                    shl     eax, 1
  5036 0000343C BA88DEF84C                              mov     edx, 4CF8DE88h  ; COS2_1
  5037 00003441 F7EA                                    imul    edx
  5038 00003443 895618                                  mov     [esi+24], edx
  5039 00003446 8B4624                                  mov     eax, [esi+36]   ; @@BF 9,14,-,COS2_1,1
  5040 00003449 8B5638                                  mov     edx, [esi+56]
  5041 0000344C 015624                                  add     [esi+36], edx
  5042 0000344F 29D0                                    sub     eax, edx
  5043 00003451 D1E0                                    shl     eax, 1
  5044 00003453 BA782107B3                              mov     edx, 0B3072178h ; -COS2_1
  5045 00003458 F7EA                                    imul    edx
  5046 0000345A 895638                                  mov     [esi+56], edx
  5047 0000345D 8B4674                                  mov     eax, [esi+116]  ; @@BF 2,29,+,COS0_2,1
  5048 00003460 014608                                  add     [esi+8], eax
  5049 00003463 8B4648                                  mov     eax, [esi+72]   ; @@BF 13,18,+,COS0_13,3
  5050 00003466 014634                                  add     [esi+52], eax
  5051 00003469 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,13,+,COS1_2,1
  5052 0000346C 8B5634                                  mov     edx, [esi+52]
  5053 0000346F 015608                                  add     [esi+8], edx
  5054 00003472 29D0                                    sub     eax, edx
  5055 00003474 D1E0                                    shl     eax, 1
  5056 00003476 BA459F9148                              mov     edx, 48919F45h
  5057 0000347B F7EA                                    imul    edx
  5058 0000347D 895634                                  mov     [esi+52], edx
  5059 00003480 8B4668                                  mov     eax, [esi+104]  ; @@BF 5,26,+,COS0_5,1
  5060 00003483 014614                                  add     [esi+20], eax
  5061 00003486 8B4654                                  mov     eax, [esi+84]   ; @@BF 10,21,+,COS0_10,1
  5062 00003489 014628                                  add     [esi+40], eax
  5063 0000348C 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,10,+,COS1_5,2
  5064 0000348F 8B5628                                  mov     edx, [esi+40]
  5065 00003492 015614                                  add     [esi+20], edx
  5066 00003495 29D0                                    sub     eax, edx
  5067 00003497 C1E002                                  shl     eax, 2
  5068 0000349A BAAA24E243                              mov     edx, 43E224AAh
  5069 0000349F F7EA                                    imul    edx
  5070 000034A1 895628                                  mov     [esi+40], edx
  5071 000034A4 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,5,+,COS2_2,1
  5072 000034A7 8B5614                                  mov     edx, [esi+20]
  5073 000034AA 015608                                  add     [esi+8], edx
  5074 000034AD 29D0                                    sub     eax, edx
  5075 000034AF D1E0                                    shl     eax, 1
  5076 000034B1 BABF6B3273                              mov     edx, 73326BBFh  ; COS2_2
  5077 000034B6 F7EA                                    imul    edx
  5078 000034B8 895614                                  mov     [esi+20], edx
  5079 000034BB 8B4628                                  mov     eax, [esi+40]   ; @@BF 10,13,-,COS2_2,1
  5080 000034BE 8B5634                                  mov     edx, [esi+52]
  5081 000034C1 015628                                  add     [esi+40], edx
  5082 000034C4 29D0                                    sub     eax, edx
  5083 000034C6 D1E0                                    shl     eax, 1
  5084 000034C8 BA4194CD8C                              mov     edx, 8CCD9441h  ; -COS2_2
  5085 000034CD F7EA                                    imul    edx
  5086 000034CF 895634                                  mov     [esi+52], edx
  5087 000034D2 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,2,+,COS3_1,2
  5088 000034D5 8B5608                                  mov     edx, [esi+8]
  5089 000034D8 015604                                  add     [esi+4], edx
  5090 000034DB 29D0                                    sub     eax, edx
  5091 000034DD C1E002                                  shl     eax, 2
  5092 000034E0 BA46BA9E53                              mov     edx, 539EBA46h  ; COS3_1
  5093 000034E5 F7EA                                    imul    edx
  5094 000034E7 895608                                  mov     [esi+8], edx
  5095 000034EA 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,6,-,COS3_1,2
  5096 000034ED 8B5618                                  mov     edx, [esi+24]
  5097 000034F0 015614                                  add     [esi+14h], edx
  5098 000034F3 29D0                                    sub     eax, edx
  5099 000034F5 C1E002                                  shl     eax, 2
  5100 000034F8 BABA4561AC                              mov     edx, 0AC6145BAh ; -COS3_1
  5101 000034FD F7EA                                    imul    edx
  5102 000034FF 895618                                  mov     [esi+24], edx
  5103 00003502 8B06                                    mov     eax, [esi]      ; @@BF1 macro a, b, c, d
  5104                                                                          ;   @@BF  a, b,+,COS4_0, 1
  5105                                                                          ;   @@BF  c, d,-,COS4_0, 1
  5106                                                                          ;   @@ADD c, d
  5107                                                                          ;  endm
  5108                                                                          ; @@BF1 0,1,2,3
  5109 00003504 8B5604                                  mov     edx, [esi+4]    ; @@BF 0,1,+,COS4_0,1
  5110 00003507 0116                                    add     [esi], edx
  5111 00003509 29D0                                    sub     eax, edx
  5112 0000350B D1E0                                    shl     eax, 1
  5113 0000350D BA9A79825A                              mov     edx, 5A82799Ah
  5114 00003512 F7EA                                    imul    edx
  5115 00003514 895604                                  mov     [esi+4], edx
  5116 00003517 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,3,-,COS4_0,1
  5117 0000351A 8B560C                                  mov     edx, [esi+12]
  5118 0000351D 015608                                  add     [esi+8], edx
  5119 00003520 29D0                                    sub     eax, edx
  5120 00003522 D1E0                                    shl     eax, 1
  5121 00003524 BA66867DA5                              mov     edx, 0A57D8666h
  5122 00003529 F7EA                                    imul    edx
  5123 0000352B 89560C                                  mov     [esi+12], edx
  5124 0000352E 8B460C                                  mov     eax, [esi+12]   ; @@ADD 2,3
  5125 00003531 014608                                  add     [esi+8], eax
  5126 00003534 8B4610                                  mov     eax, [esi+16]   ; @@BF2 macro a, b, c, d
  5127                                                                          ;   @@BF  a, b,+,COS4_0, 1
  5128                                                                          ;   @@BF  c, d,-,COS4_0, 1
  5129                                                                          ;   @@ADD c, d
  5130                                                                          ;   @@ADD a, c
  5131                                                                          ;   @@ADD c, b
  5132                                                                          ;   @@ADD b, d
  5133                                                                          ;  endm
  5134                                                                          ; @@BF2 4,5,6,7
  5135 00003537 8B5614                                  mov     edx, [esi+20]   ; @@BF 4,5,+,COS4_0,1
  5136 0000353A 015610                                  add     [esi+16], edx
  5137 0000353D 29D0                                    sub     eax, edx
  5138 0000353F D1E0                                    shl     eax, 1
  5139 00003541 BA9A79825A                              mov     edx, 5A82799Ah  ; COS4_0
  5140 00003546 F7EA                                    imul    edx
  5141 00003548 895614                                  mov     [esi+20], edx
  5142 0000354B 8B4618                                  mov     eax, [esi+24]   ; @@BF 6,7,-,COS4_0,1
  5143 0000354E 8B561C                                  mov     edx, [esi+28]
  5144 00003551 015618                                  add     [esi+18h], edx
  5145 00003554 29D0                                    sub     eax, edx
  5146 00003556 D1E0                                    shl     eax, 1
  5147 00003558 BA66867DA5                              mov     edx, 0A57D8666h ; -COS4_0
  5148 0000355D F7EA                                    imul    edx
  5149 0000355F 89561C                                  mov     [esi+28], edx
  5150 00003562 8B461C                                  mov     eax, [esi+28]   ; @@ADD 6,7
  5151 00003565 014618                                  add     [esi+24], eax
  5152 00003568 8B4618                                  mov     eax, [esi+24]   ; @@ADD 4,6
  5153 0000356B 014610                                  add     [esi+16], eax
  5154 0000356E 8B4614                                  mov     eax, [esi+20]   ; @@ADD 6,5
  5155 00003571 014618                                  add     [esi+24], eax
  5156 00003574 8B461C                                  mov     eax, [esi+28]   ; @@ADD 5,7
  5157 00003577 014614                                  add     [esi+20], eax
  5158 0000357A 8B06                                    mov     eax, [esi]      ; @@OUT macro dst,src1,src2
  5159                                                                          ; IF ((dst AND ((1 SHL rate_shift)-1)) EQ 0)
  5160                                                                          ;    mov eax,dword ptr [esi+src1*4]
  5161                                                                          ;    IFDIFI <src2>,<->
  5162                                                                          ;      add eax,dword ptr [esi+src2*4]
  5163                                                                          ;    ENDIF
  5164                                                                          ;    IF SYNTH32
  5165                                                                          ;       mov dword ptr [edi+dst*4],eax
  5166                                                                          ;       IF (LONG_WINDOW EQ 0)
  5167                                                                          ;          mov dword ptr [edi+dst*4+512*4],eax
  5168                                                                          ;       ENDIF
  5169                                                                          ;    ELSE
  5170                                                                          ;        ......
  5171                                                                          ;    ENDIF
  5172                                                                          ; @@OUT 0,0,-
  5173 0000357C 8907                                    mov     [edi], eax
  5174 0000357E 8B4604                                  mov     eax, [esi+4]    ; @@OUT 16,1,-
  5175 00003581 894740                                  mov     [edi+64], eax
  5176 00003584 8B4608                                  mov     eax, [esi+8]    ; @@OUT 8,2,-
  5177 00003587 894720                                  mov     [edi+32], eax
  5178 0000358A 8B460C                                  mov     eax, [esi+12]   ; @@OUT 24,3,-
  5179 0000358D 894760                                  mov     [edi+96], eax
  5180 00003590 8B4610                                  mov     eax, [esi+16]   ; @@OUT 4,4,-
  5181 00003593 894710                                  mov     [edi+16], eax
  5182 00003596 8B4614                                  mov     eax, [esi+20]   ; @@OUT 20,5,-
  5183 00003599 894750                                  mov     [edi+80], eax
  5184 0000359C 8B4618                                  mov     eax, [esi+24]   ; @@OUT 12,6,-
  5185 0000359F 894730                                  mov     [edi+48], eax
  5186 000035A2 8B461C                                  mov     eax, [esi+28]   ; @@OUT 28,7,-
  5187 000035A5 894770                                  mov     [edi+112], eax
  5188 000035A8 C3                                      retn
  5189                                  
  5190                                  
  5191                                  ; =============== S U B R O U T I N E =======================================
  5192                                  
  5193                                  
  5194                                  synth_16bit_shift_0_fast:
  5195 000035A9 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 0,0,1
  5196 000035B0 740E                                    jz      short .no_rdtsc_supported
  5197 000035B2 0F31                                    rdtsc
  5198 000035B4 2905[68770000]                          sub     [rdtsc_synth_dct], eax
  5199 000035BA 1915[6C770000]                          sbb     [rdtsc_synth_dct+4], edx
  5200                                  
  5201                                  .no_rdtsc_supported:
  5202 000035C0 BE[9CBD0000]                            mov	esi, mp3_sb_samples
  5203 000035C5 8B3D[30F40000]                          mov	edi, [mp3_samples_dst]
  5204 000035CB C705[3CF40000]0000-                     mov	dword [mp3_curr_channel], 0
  5204 000035D3 0000               
  5205                                  
  5206                                  .synth_channel_lop:
  5207 000035D5 56                                      push	esi
  5208 000035D6 57                                      push	edi
  5209 000035D7 893D[7C9D0000]                          mov	[mp3_curr_syn_dst], edi
  5210 000035DD C705[44F40000]0000-                     mov	dword [mp3_curr_frame], 0
  5210 000035E5 0000               
  5211                                  
  5212                                  .synth_frame_lop:
  5213 000035E7 56                                      push    esi
  5214 000035E8 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  5215 000035EF 740E                                    jz      short .no_rdtsc_supported@
  5216 000035F1 0F31                                    rdtsc
  5217 000035F3 2905[80770000]                          sub     [rdtsc_dct32], eax
  5218 000035F9 1915[84770000]                          sbb     [rdtsc_dct32+4], edx
  5219                                  
  5220                                  .no_rdtsc_supported@:
  5221 000035FF 8B15[3CF40000]                          mov     edx, [mp3_curr_channel]
  5222 00003605 8B0495[94BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  5223 0000360C 832C95[94BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  5224 00003614 C1E20A                                  shl     edx, 10
  5225 00003617 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  5226 0000361C 09D0                                    or      eax, edx
  5227 0000361E A3[789D0000]                            mov     [mp3_curr_syn_index], eax
  5228 00003623 8B3D[789D0000]                          mov     edi, [mp3_curr_syn_index]
  5229 00003629 8D3CBD[949D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  5230 00003630 E8A3EFFFFF                              call    mp3_dct32_shift_0
  5231 00003635 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  5232 0000363C 740E                                    jz      short .no_rdtsc_supported@@
  5233 0000363E 0F31                                    rdtsc
  5234 00003640 0105[80770000]                          add     [rdtsc_dct32], eax
  5235 00003646 1115[84770000]                          adc     [rdtsc_dct32+4], edx
  5236                                  
  5237                                  .no_rdtsc_supported@@:
  5238 0000364C F605[F0750000]10                        test    byte [cpuid_flags], 10h
  5239 00003653 740E                                    jz      short .no_rdtsc_supported@@@
  5240 00003655 0F31                                    rdtsc
  5241 00003657 2905[98770000]                          sub     [rdtsc_synth], eax
  5242 0000365D 1915[9C770000]                          sbb     [rdtsc_synth+4], edx
  5243                                  
  5244                                  .no_rdtsc_supported@@@:
  5245 00003663 E888000000                              call    mp3_synth_filter_this_16bit_shift_0_fast ;
  5246                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  5247 00003668 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  5248 0000366F 740E                                    jz      short .no_rdtsc_supported@@@@
  5249 00003671 0F31                                    rdtsc
  5250 00003673 0105[98770000]                          add     [rdtsc_synth], eax
  5251 00003679 1115[9C770000]                          adc     [rdtsc_synth+4], edx
  5252                                  
  5253                                  .no_rdtsc_supported@@@@:
  5254 0000367F 5E                                      pop     esi
  5255 00003680 A1[38F40000]                            mov     eax, [mp3_samples_dst_step]
  5256 00003685 C1E005                                  shl     eax, 5
  5257 00003688 8A0D[EE750000]                          mov     cl, [option_rate_shift]
  5258 0000368E D3E8                                    shr     eax, cl
  5259 00003690 0105[7C9D0000]                          add     [mp3_curr_syn_dst], eax
  5260 00003696 81C680000000                            add     esi, 128        ; SBLIMIT*4
  5261 0000369C FF05[44F40000]                          inc     dword [mp3_curr_frame]
  5262 000036A2 A1[44F40000]                            mov     eax, [mp3_curr_frame]
  5263 000036A7 3B05[809D0000]                          cmp     eax, [mp3_nb_frames]
  5264 000036AD 0F8234FFFFFF                            jb      .synth_frame_lop
  5265 000036B3 5F                                      pop     edi
  5266 000036B4 5E                                      pop     esi
  5267 000036B5 033D[749D0000]                          add     edi, [mp3_bytes_per_sample]
  5268 000036BB 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  5269 000036C1 FF05[3CF40000]                          inc     dword [mp3_curr_channel]
  5270 000036C7 A1[3CF40000]                            mov     eax, [mp3_curr_channel]
  5271 000036CC 3B05[6C9D0000]                          cmp     eax, [mp3_output_num_channels]
  5272 000036D2 0F82FDFEFFFF                            jb      .synth_channel_lop
  5273 000036D8 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  5274 000036DF 740E                                    jz      short .no_rdtsc_supported@@@@@
  5275 000036E1 0F31                                    rdtsc
  5276 000036E3 0105[68770000]                          add     [rdtsc_synth_dct], eax
  5277 000036E9 1115[6C770000]                          adc     [rdtsc_synth_dct+4], edx
  5278                                  
  5279                                  .no_rdtsc_supported@@@@@:
  5280 000036EF C3                                      retn
  5281                                  
  5282                                  
  5283                                  ; =============== S U B R O U T I N E =======================================
  5284                                  
  5285                                  
  5286                                  mp3_synth_filter_this_16bit_shift_0_fast:
  5287 000036F0 A1[789D0000]                            mov     eax, [mp3_curr_syn_index]
  5288 000036F5 A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh
  5289 000036FA 0F849C010000                            jz      .append_copy_to_window
  5290 00003700 90                                      nop
  5291                                  
  5292                                  .append_copy_to_window_back:
  5293 00003701 89C5                                    mov     ebp, eax
  5294 00003703 81E5C0010000                            and     ebp, 1C0h       ; @win1,1FFh-1Fh-20h
  5295 00003709 2520040000                              and     eax, 420h       ; and eax,20h+(1 shl 10) ; bit5 and channel
  5296 0000370E 8D7010                                  lea     esi, [eax+10h]  ; @@syn1,[eax+10h]
  5297 00003711 8D7830                                  lea     edi, [eax+30h]  ; @@syn2,[eax+30h]
  5298 00003714 F7DD                                    neg     ebp
  5299 00003716 81E5C0010000                            and     ebp, 1C0h       ; @win1,1FFh-1Fh-20h
  5300 0000371C 8B0D[7C9D0000]                          mov     ecx, [mp3_curr_syn_dst] ; @@dst,dword ptr [mp3_curr_syn_dst]
  5301                                  
  5302                                  .samples_lop:
  5303 00003722 BB00200020                              mov     ebx, 20002000h  ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  5304                                                                          ; @@out_shift equ (OUT_SHIFT_fast+(8*force_8bit))
  5305                                                                          ; out_shift = 14
  5306 00003727 8B14B5[949D0000]                        mov     edx, [mp3_synth_buf+esi*4] ; @@SUM8 macro sum,win,ww,syn
  5307                                                                          ; @@SUM8 @@sum,@@win1,0,@@syn1
  5308                                                                          ; IRP nn,0,1,2,3,4,5,6,7
  5309                                                                          ; mov edx,dword ptr [mp3_synth_buf+syn*4+(nn*64*4)]
  5310                                                                          ; movsx eax,word ptr [mp3_synth_win+win*2+(nn*64*2)+ww*2]
  5311                                                                          ; imul eax,edx
  5312                                                                          ; add sum,eax
  5313 0000372E 0FBF842D[4CEF0400]                      movsx   eax, word [mp3_synth_win+ebp*2] ; nn=0, ww=0
  5314 00003736 0FAFC2                                  imul    eax, edx
  5315 00003739 01C3                                    add     ebx, eax
  5316 0000373B 8B14B5[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  5317 00003742 0FBF842D[CCEF0400]                      movsx   eax, word [(mp3_synth_win+80h)+ebp*2] ; nn=1, ww=0
  5318 0000374A 0FAFC2                                  imul    eax, edx
  5319 0000374D 01C3                                    add     ebx, eax
  5320 0000374F 8B14B5[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  5321 00003756 0FBF842D[4CF00400]                      movsx   eax, word [(mp3_synth_win+100h)+ebp*2] ; nn=2
  5322 0000375E 0FAFC2                                  imul    eax, edx
  5323 00003761 01C3                                    add     ebx, eax
  5324 00003763 8B14B5[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  5325 0000376A 0FBF842D[CCF00400]                      movsx   eax, word [(mp3_synth_win+180h)+ebp*2] ; nn=3
  5326 00003772 0FAFC2                                  imul    eax, edx
  5327 00003775 01C3                                    add     ebx, eax
  5328 00003777 8B14B5[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  5329 0000377E 0FBF842D[4CF10400]                      movsx   eax, word [(mp3_synth_win+200h)+ebp*2] ; nn=4
  5330 00003786 0FAFC2                                  imul    eax, edx
  5331 00003789 01C3                                    add     ebx, eax
  5332 0000378B 8B14B5[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  5333 00003792 0FBF842D[CCF10400]                      movsx   eax, word [(mp3_synth_win+280h)+ebp*2] ; nn=5
  5334 0000379A 0FAFC2                                  imul    eax, edx
  5335 0000379D 01C3                                    add     ebx, eax
  5336 0000379F 8B14B5[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  5337 000037A6 0FBF842D[4CF20400]                      movsx   eax, word [(mp3_synth_win+300h)+ebp*2] ; nn=6
  5338 000037AE 0FAFC2                                  imul    eax, edx
  5339 000037B1 01C3                                    add     ebx, eax
  5340 000037B3 8B14B5[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  5341 000037BA 0FBF842D[CCF20400]                      movsx   eax, word [(mp3_synth_win+380h)+ebp*2] ; nn=7
  5342 000037C2 0FAFC2                                  imul    eax, edx
  5343 000037C5 01C3                                    add     ebx, eax
  5344 000037C7 8B14BD[949D0000]                        mov     edx, [mp3_synth_buf+edi*4] ; @@SUM8 @@sum,@@win1,32, @@syn2
  5345 000037CE 0FBF842D[8CEF0400]                      movsx   eax, word [(mp3_synth_win+40h)+ebp*2] ; nn=0, ww=32
  5346 000037D6 0FAFC2                                  imul    eax, edx
  5347 000037D9 01C3                                    add     ebx, eax
  5348 000037DB 8B14BD[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  5349 000037E2 0FBF842D[0CF00400]                      movsx   eax, word [(mp3_synth_win+0C0h)+ebp*2] ; nn=1, ww=32
  5350 000037EA 0FAFC2                                  imul    eax, edx
  5351 000037ED 01C3                                    add     ebx, eax
  5352 000037EF 8B14BD[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  5353 000037F6 0FBF842D[8CF00400]                      movsx   eax, word [(mp3_synth_win+140h)+ebp*2] ; nn=2
  5354 000037FE 0FAFC2                                  imul    eax, edx
  5355 00003801 01C3                                    add     ebx, eax
  5356 00003803 8B14BD[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  5357 0000380A 0FBF842D[0CF10400]                      movsx   eax, word [(mp3_synth_win+1C0h)+ebp*2] ; nn=3
  5358 00003812 0FAFC2                                  imul    eax, edx
  5359 00003815 01C3                                    add     ebx, eax
  5360 00003817 8B14BD[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  5361 0000381E 0FBF842D[8CF10400]                      movsx   eax, word [(mp3_synth_win+240h)+ebp*2] ; nn=4
  5362 00003826 0FAFC2                                  imul    eax, edx
  5363 00003829 01C3                                    add     ebx, eax
  5364 0000382B 8B14BD[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  5365 00003832 0FBF842D[0CF20400]                      movsx   eax, word [(mp3_synth_win+2C0h)+ebp*2] ; nn=5
  5366 0000383A 0FAFC2                                  imul    eax, edx
  5367 0000383D 01C3                                    add     ebx, eax
  5368 0000383F 8B14BD[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  5369 00003846 0FBF842D[8CF20400]                      movsx   eax, word [(mp3_synth_win+340h)+ebp*2] ; nn=6
  5370 0000384E 0FAFC2                                  imul    eax, edx
  5371 00003851 01C3                                    add     ebx, eax
  5372 00003853 8B14BD[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  5373 0000385A 0FBF842D[0CF30400]                      movsx   eax, word [(mp3_synth_win+3C0h)+ebp*2] ; nn=7
  5374 00003862 0FAFC2                                  imul    eax, edx
  5375 00003865 01C3                                    add     ebx, eax
  5376 00003867 81FB00000040                            cmp     ebx, 40000000h  ; cmp @@sum,10000h SHL (@@out_shift) ; out_shift = 14
  5377 0000386D 7322                                    jnb     short .sat
  5378 0000386F C1FB0E                                  sar     ebx, 14         ; sar @@sum,(@@out_shift)
  5379 00003872 81EB00800000                            sub     ebx, 8000h      ; sub @@sum,8000h ; make 16bit signed
  5380                                  
  5381                                  .sat_back:
  5382 00003878 668919                                  mov     [ecx], bx       ; mov word ptr [@@dst],@@sum_16bit
  5383 0000387B 030D[38F40000]                          add     ecx, [mp3_samples_dst_step]
  5384 00003881 46                                      inc     esi             ; inc @@syn1
  5385 00003882 4F                                      dec     edi             ; dec @@syn2
  5386 00003883 45                                      inc     ebp             ; inc @@win1
  5387 00003884 F7C51F000000                            test    ebp, 1Fh        ; IF LONG_WINDOW
  5388 0000388A 0F8592FEFFFF                            jnz     .samples_lop   ; test @@win1,1Fh
  5389 00003890 C3                                      retn
  5390                                  
  5391                                  .sat:
  5392 00003891 C1FB1F                                  sar     ebx, 31         ; sar @@sum,31 ; FFFFFFFFh,00000000h
  5393 00003894 81F3FF7F0000                            xor     ebx, 7FFFh      ; xor @@sum,7fffh ; FFFF8000h,00007FFFh (signed 16bit)
  5394 0000389A EBDC                                    jmp     short .sat_back
  5395                                  
  5396                                  .append_copy_to_window:
  5397 0000389C 8D3485[949D0000]                        lea     esi, [mp3_synth_buf+eax*4] ; IF SYNTH32
  5398 000038A3 8DBE00080000                            lea     edi, [esi+2048] ; [esi+512*4]
  5399 000038A9 B912000000                              mov     ecx, 18         ; (12h*4)/4
  5400 000038AE F3A5                                    rep movsd
  5401 000038B0 E94CFEFFFF                              jmp     .append_copy_to_window_back
  5402                                  
  5403                                  
  5404                                  ; =============== S U B R O U T I N E =======================================
  5405                                  
  5406                                  
  5407                                  synth_16bit_shift_1_fast:
  5408 000038B5 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 0,1,1
  5409 000038BC 740E                                    jz      short .no_rdtsc_supported
  5410 000038BE 0F31                                    rdtsc
  5411 000038C0 2905[68770000]                          sub     [rdtsc_synth_dct], eax
  5412 000038C6 1915[6C770000]                          sbb     [rdtsc_synth_dct+4], edx
  5413                                  
  5414                                  .no_rdtsc_supported:
  5415 000038CC BE[9CBD0000]                            mov	esi, mp3_sb_samples
  5416 000038D1 8B3D[30F40000]                          mov	edi, [mp3_samples_dst]
  5417 000038D7 C705[3CF40000]0000-                     mov	dword [mp3_curr_channel], 0
  5417 000038DF 0000               
  5418                                  
  5419                                  .synth_channel_lop:
  5420 000038E1 56                                      push	esi
  5421 000038E2 57                                      push	edi
  5422 000038E3 893D[7C9D0000]                          mov	[mp3_curr_syn_dst], edi
  5423 000038E9 C705[44F40000]0000-                     mov	dword [mp3_curr_frame], 0
  5423 000038F1 0000               
  5424                                  
  5425                                  .synth_frame_lop:
  5426 000038F3 56                                      push    esi
  5427 000038F4 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  5428 000038FB 740E                                    jz      short .no_rdtsc_supported@
  5429 000038FD 0F31                                    rdtsc
  5430 000038FF 2905[80770000]                          sub     [rdtsc_dct32], eax
  5431 00003905 1915[84770000]                          sbb     [rdtsc_dct32+4], edx
  5432                                  
  5433                                  .no_rdtsc_supported@:
  5434 0000390B 8B15[3CF40000]                          mov     edx, [mp3_curr_channel]
  5435 00003911 8B0495[94BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  5436 00003918 832C95[94BD0000]20                      sub	dword [mp3_synth_index+edx*4], 32
  5437 00003920 C1E20A                                  shl     edx, 10
  5438 00003923 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  5439 00003928 09D0                                    or      eax, edx
  5440 0000392A A3[789D0000]                            mov     [mp3_curr_syn_index], eax
  5441 0000392F 8B3D[789D0000]                          mov     edi, [mp3_curr_syn_index]
  5442 00003935 8D3CBD[949D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  5443 0000393C E877F5FFFF                              call    mp3_dct32_shift_1 ; mp3_dct32_shift_&rate_shift
  5444 00003941 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  5445 00003948 740E                                    jz      short .no_rdtsc_supported@@
  5446 0000394A 0F31                                    rdtsc
  5447 0000394C 0105[80770000]                          add     [rdtsc_dct32], eax
  5448 00003952 1115[84770000]                          adc     [rdtsc_dct32+4], edx
  5449                                  
  5450                                  .no_rdtsc_supported@@:
  5451 00003958 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  5452 0000395F 740E                                    jz      short .no_rdtsc_supported@@@
  5453 00003961 0F31                                    rdtsc
  5454 00003963 2905[98770000]                          sub     [rdtsc_synth], eax
  5455 00003969 1915[9C770000]                          sbb     [rdtsc_synth+4], edx
  5456                                  
  5457                                  .no_rdtsc_supported@@@:
  5458 0000396F E888000000                              call    mp3_synth_filter_this_16bit_shift_1_fast ;
  5459                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  5460 00003974 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  5461 0000397B 740E                                    jz      short .no_rdtsc_supported@@@@
  5462 0000397D 0F31                                    rdtsc
  5463 0000397F 0105[98770000]                          add     [rdtsc_synth], eax
  5464 00003985 1115[9C770000]                          adc     [rdtsc_synth+4], edx
  5465                                  
  5466                                  .no_rdtsc_supported@@@@:
  5467 0000398B 5E                                      pop     esi
  5468 0000398C A1[38F40000]                            mov     eax, [mp3_samples_dst_step]
  5469 00003991 C1E005                                  shl     eax, 5
  5470 00003994 8A0D[EE750000]                          mov     cl, [option_rate_shift]
  5471 0000399A D3E8                                    shr     eax, cl
  5472 0000399C 0105[7C9D0000]                          add     [mp3_curr_syn_dst], eax
  5473 000039A2 81C680000000                            add     esi, 128        ; SBLIMIT*4
  5474 000039A8 FF05[44F40000]                          inc     dword [mp3_curr_frame]
  5475 000039AE A1[44F40000]                            mov     eax, [mp3_curr_frame]
  5476 000039B3 3B05[809D0000]                          cmp     eax, [mp3_nb_frames]
  5477 000039B9 0F8234FFFFFF                            jb      .synth_frame_lop
  5478 000039BF 5F                                      pop     edi
  5479 000039C0 5E                                      pop     esi
  5480 000039C1 033D[749D0000]                          add     edi, [mp3_bytes_per_sample]
  5481 000039C7 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  5482 000039CD FF05[3CF40000]                          inc     dword [mp3_curr_channel]
  5483 000039D3 A1[3CF40000]                            mov     eax, [mp3_curr_channel]
  5484 000039D8 3B05[6C9D0000]                          cmp     eax, [mp3_output_num_channels]
  5485 000039DE 0F82FDFEFFFF                            jb      .synth_channel_lop
  5486 000039E4 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  5487 000039EB 740E                                    jz      short .no_rdtsc_supported@@@@@
  5488 000039ED 0F31                                    rdtsc
  5489 000039EF 0105[68770000]                          add     [rdtsc_synth_dct], eax
  5490 000039F5 1115[6C770000]                          adc     [rdtsc_synth_dct+4], edx
  5491                                  
  5492                                  .no_rdtsc_supported@@@@@:
  5493 000039FB C3                                      retn
  5494                                  
  5495                                  
  5496                                  ; =============== S U B R O U T I N E =======================================
  5497                                  
  5498                                  
  5499                                  mp3_synth_filter_this_16bit_shift_1_fast:
  5500 000039FC A1[789D0000]                            mov     eax, [mp3_curr_syn_index]
  5501 00003A01 A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh
  5502 00003A06 0F84A2010000                            jz      .append_copy_to_window
  5503 00003A0C 90                                      nop
  5504                                  
  5505                                  .append_copy_to_window_back:
  5506 00003A0D 89C5                                    mov     ebp, eax
  5507 00003A0F 81E5C0010000                            and     ebp, 1C0h
  5508 00003A15 2520040000                              and     eax, 420h
  5509 00003A1A 8D7010                                  lea     esi, [eax+10h]
  5510 00003A1D 8D7830                                  lea     edi, [eax+30h]
  5511 00003A20 F7DD                                    neg     ebp
  5512 00003A22 81E5C0010000                            and     ebp, 1C0h
  5513 00003A28 8B0D[7C9D0000]                          mov     ecx, [mp3_curr_syn_dst]
  5514                                  
  5515                                  .samples_lop:
  5516 00003A2E BB00200020                              mov     ebx, 20002000h  ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  5517                                                                          ; @@out_shift equ (OUT_SHIFT_fast+(8*force_8bit))
  5518                                                                          ; out_shift = 14
  5519 00003A33 8B14B5[949D0000]                        mov     edx, [mp3_synth_buf+esi*4] ; @@SUM8 macro sum,win,ww,syn
  5520                                                                          ; @@SUM8 @@sum,@@win1,0,@@syn1
  5521                                                                          ; IRP nn,0,1,2,3,4,5,6,7
  5522                                                                          ; mov edx,dword ptr [mp3_synth_buf+syn*4+(nn*64*4)]
  5523                                                                          ; movsx eax,word ptr [mp3_synth_win+win*2+(nn*64*2)+ww*2]
  5524                                                                          ; imul eax,edx
  5525                                                                          ; add sum,eax
  5526 00003A3A 0FBF842D[4CEF0400]                      movsx   eax, word [mp3_synth_win+ebp*2]
  5527 00003A42 0FAFC2                                  imul    eax, edx
  5528 00003A45 01C3                                    add     ebx, eax
  5529 00003A47 8B14B5[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4] ; nn=1
  5530 00003A4E 0FBF842D[CCEF0400]                      movsx   eax, word [(mp3_synth_win+80h)+ebp*2] ; ww=0
  5531 00003A56 0FAFC2                                  imul    eax, edx
  5532 00003A59 01C3                                    add     ebx, eax
  5533 00003A5B 8B14B5[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  5534 00003A62 0FBF842D[4CF00400]                      movsx   eax, word [(mp3_synth_win+100h)+ebp*2]
  5535 00003A6A 0FAFC2                                  imul    eax, edx
  5536 00003A6D 01C3                                    add     ebx, eax
  5537 00003A6F 8B14B5[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  5538 00003A76 0FBF842D[CCF00400]                      movsx   eax, word [(mp3_synth_win+180h)+ebp*2]
  5539 00003A7E 0FAFC2                                  imul    eax, edx
  5540 00003A81 01C3                                    add     ebx, eax
  5541 00003A83 8B14B5[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4] ; nn=4
  5542 00003A8A 0FBF842D[4CF10400]                      movsx   eax, word [(mp3_synth_win+200h)+ebp*2]
  5543 00003A92 0FAFC2                                  imul    eax, edx
  5544 00003A95 01C3                                    add     ebx, eax
  5545 00003A97 8B14B5[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  5546 00003A9E 0FBF842D[CCF10400]                      movsx   eax, word [(mp3_synth_win+280h)+ebp*2]
  5547 00003AA6 0FAFC2                                  imul    eax, edx
  5548 00003AA9 01C3                                    add     ebx, eax
  5549 00003AAB 8B14B5[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  5550 00003AB2 0FBF842D[4CF20400]                      movsx   eax, word [(mp3_synth_win+300h)+ebp*2]
  5551 00003ABA 0FAFC2                                  imul    eax, edx
  5552 00003ABD 01C3                                    add     ebx, eax
  5553 00003ABF 8B14B5[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4] ; nn=7
  5554 00003AC6 0FBF842D[CCF20400]                      movsx   eax, word [(mp3_synth_win+380h)+ebp*2] ; ww=0
  5555 00003ACE 0FAFC2                                  imul    eax, edx
  5556 00003AD1 01C3                                    add     ebx, eax
  5557 00003AD3 8B14BD[949D0000]                        mov     edx, [mp3_synth_buf+edi*4]
  5558 00003ADA 0FBF842D[8CEF0400]                      movsx   eax, word [(mp3_synth_win+40h)+ebp*2]
  5559 00003AE2 0FAFC2                                  imul    eax, edx
  5560 00003AE5 01C3                                    add     ebx, eax
  5561 00003AE7 8B14BD[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  5562 00003AEE 0FBF842D[0CF00400]                      movsx   eax, word [(mp3_synth_win+0C0h)+ebp*2]
  5563 00003AF6 0FAFC2                                  imul    eax, edx
  5564 00003AF9 01C3                                    add     ebx, eax
  5565 00003AFB 8B14BD[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4] ; nn=2, ww=32
  5566 00003B02 0FBF842D[8CF00400]                      movsx   eax, word [(mp3_synth_win+140h)+ebp*2]
  5567 00003B0A 0FAFC2                                  imul    eax, edx
  5568 00003B0D 01C3                                    add     ebx, eax
  5569 00003B0F 8B14BD[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  5570 00003B16 0FBF842D[0CF10400]                      movsx   eax, word [(mp3_synth_win+1C0h)+ebp*2]
  5571 00003B1E 0FAFC2                                  imul    eax, edx
  5572 00003B21 01C3                                    add     ebx, eax
  5573 00003B23 8B14BD[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  5574 00003B2A 0FBF842D[8CF10400]                      movsx   eax, word [(mp3_synth_win+240h)+ebp*2]
  5575 00003B32 0FAFC2                                  imul    eax, edx
  5576 00003B35 01C3                                    add     ebx, eax
  5577 00003B37 8B14BD[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  5578 00003B3E 0FBF842D[0CF20400]                      movsx   eax, word [(mp3_synth_win+2C0h)+ebp*2]
  5579 00003B46 0FAFC2                                  imul    eax, edx
  5580 00003B49 01C3                                    add     ebx, eax
  5581 00003B4B 8B14BD[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4] ; nn=6, ww=32
  5582 00003B52 0FBF842D[8CF20400]                      movsx   eax, word [(mp3_synth_win+340h)+ebp*2]
  5583 00003B5A 0FAFC2                                  imul    eax, edx
  5584 00003B5D 01C3                                    add     ebx, eax
  5585 00003B5F 8B14BD[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  5586 00003B66 0FBF842D[0CF30400]                      movsx   eax, word [(mp3_synth_win+3C0h)+ebp*2]
  5587 00003B6E 0FAFC2                                  imul    eax, edx
  5588 00003B71 01C3                                    add     ebx, eax
  5589 00003B73 81FB00000040                            cmp     ebx, 40000000h  ; cmp  @@sum,10000h SHL (@@out_shift)
  5590 00003B79 7328                                    jnb     short .sat
  5591 00003B7B C1FB0E                                  sar     ebx, 14         ; sar @@sum,(@@out_shift)
  5592 00003B7E 81EB00800000                            sub     ebx, 8000h      ; make 16bit signed
  5593                                  
  5594                                  .sat_back:
  5595 00003B84 668919                                  mov     [ecx], bx
  5596 00003B87 030D[38F40000]                          add     ecx, [mp3_samples_dst_step]
  5597 00003B8D 83C602                                  add     esi, 2          ; IF rate_shift
  5598                                                                          ; add  @@syn1,1 shl rate_shift
  5599 00003B90 83EF02                                  sub     edi, 2          ; sub @@syn2,1 shl rate_shift
  5600 00003B93 83C502                                  add     ebp, 2          ; add @@win1,1 shl rate_shift
  5601 00003B96 F7C51F000000                            test    ebp, 1Fh        ; IF LONG_WINDOW
  5602 00003B9C 0F858CFEFFFF                            jnz     .samples_lop   ; test @@win1,1fh
  5603 00003BA2 C3                                      retn
  5604                                  
  5605                                  .sat:
  5606 00003BA3 C1FB1F                                  sar     ebx, 31         ; sar @@sum,31 ; FFFFFFFFh,00000000h
  5607 00003BA6 81F3FF7F0000                            xor     ebx, 7FFFh      ; xor @@sum,7fffh ; FFFF8000h,00007FFFh (signed 16bit)
  5608 00003BAC EBD6                                    jmp     short .sat_back
  5609                                  
  5610                                  .append_copy_to_window:
  5611 00003BAE 8D3485[949D0000]                        lea     esi, [mp3_synth_buf+eax*4]
  5612 00003BB5 8DBE00080000                            lea     edi, [esi+2048] ; [esi+512*4]
  5613 00003BBB B912000000                              mov     ecx, 18         ; (12h*4)/4
  5614 00003BC0 F3A5                                    rep movsd
  5615 00003BC2 E946FEFFFF                              jmp     .append_copy_to_window_back
  5616                                  
  5617                                  
  5618                                  ; =============== S U B R O U T I N E =======================================
  5619                                  
  5620                                  
  5621                                  synth_16bit_shift_2_fast:
  5622 00003BC7 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 0,2,1
  5623 00003BCE 740E                                    jz      short .no_rdtsc_supported
  5624 00003BD0 0F31                                    rdtsc
  5625 00003BD2 2905[68770000]                          sub     [rdtsc_synth_dct], eax
  5626 00003BD8 1915[6C770000]                          sbb     [rdtsc_synth_dct+4], edx
  5627                                  
  5628                                  .no_rdtsc_supported:
  5629 00003BDE BE[9CBD0000]                            mov	esi, mp3_sb_samples
  5630 00003BE3 8B3D[30F40000]                          mov	edi, [mp3_samples_dst]
  5631 00003BE9 C705[3CF40000]0000-                     mov	dword [mp3_curr_channel], 0
  5631 00003BF1 0000               
  5632                                  
  5633                                  .synth_channel_lop:
  5634 00003BF3 56                                      push	esi
  5635 00003BF4 57                                      push	edi
  5636 00003BF5 893D[7C9D0000]                          mov	[mp3_curr_syn_dst], edi
  5637 00003BFB C705[44F40000]0000-                     mov	dword [mp3_curr_frame], 0
  5637 00003C03 0000               
  5638                                  
  5639                                  .synth_frame_lop:
  5640 00003C05 56                                      push    esi
  5641 00003C06 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  5642 00003C0D 740E                                    jz      short .no_rdtsc_supported@
  5643 00003C0F 0F31                                    rdtsc
  5644 00003C11 2905[80770000]                          sub     [rdtsc_dct32], eax
  5645 00003C17 1915[84770000]                          sbb     [rdtsc_dct32+4], edx
  5646                                  
  5647                                  .no_rdtsc_supported@:
  5648 00003C1D 8B15[3CF40000]                          mov     edx, [mp3_curr_channel]
  5649 00003C23 8B0495[94BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  5650 00003C2A 832C95[94BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  5651 00003C32 C1E20A                                  shl     edx, 10
  5652 00003C35 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  5653 00003C3A 09D0                                    or      eax, edx
  5654 00003C3C A3[789D0000]                            mov     [mp3_curr_syn_index], eax
  5655 00003C41 8B3D[789D0000]                          mov     edi, [mp3_curr_syn_index]
  5656 00003C47 8D3CBD[949D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  5657 00003C4E E855F6FFFF                              call    mp3_dct32_shift_2 ; mp3_dct32_shift_&rate_shift
  5658 00003C53 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  5659 00003C5A 740E                                    jz      short .no_rdtsc_supported@@
  5660 00003C5C 0F31                                    rdtsc
  5661 00003C5E 0105[80770000]                          add     [rdtsc_dct32], eax
  5662 00003C64 1115[84770000]                          adc     [rdtsc_dct32+4], edx
  5663                                  
  5664                                  .no_rdtsc_supported@@:
  5665 00003C6A F605[F0750000]10                        test    byte [cpuid_flags], 10h
  5666 00003C71 740E                                    jz      short .no_rdtsc_supported@@@
  5667 00003C73 0F31                                    rdtsc
  5668 00003C75 2905[98770000]                          sub     [rdtsc_synth], eax
  5669 00003C7B 1915[9C770000]                          sbb     [rdtsc_synth+4], edx
  5670                                  
  5671                                  .no_rdtsc_supported@@@:
  5672 00003C81 E888000000                              call    mp3_synth_filter_this_16bit_shift_2_fast ;
  5673                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fas
  5674 00003C86 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  5675 00003C8D 740E                                    jz      short .no_rdtsc_supported@@@@
  5676 00003C8F 0F31                                    rdtsc
  5677 00003C91 0105[98770000]                          add     [rdtsc_synth], eax
  5678 00003C97 1115[9C770000]                          adc     [rdtsc_synth+4], edx
  5679                                  
  5680                                  .no_rdtsc_supported@@@@:
  5681 00003C9D 5E                                      pop     esi
  5682 00003C9E A1[38F40000]                            mov     eax, [mp3_samples_dst_step]
  5683 00003CA3 C1E005                                  shl     eax, 5
  5684 00003CA6 8A0D[EE750000]                          mov     cl, [option_rate_shift]
  5685 00003CAC D3E8                                    shr     eax, cl
  5686 00003CAE 0105[7C9D0000]                          add     [mp3_curr_syn_dst], eax
  5687 00003CB4 81C680000000                            add     esi, 128        ; SBLIMIT*4
  5688 00003CBA FF05[44F40000]                          inc     dword [mp3_curr_frame]
  5689 00003CC0 A1[44F40000]                            mov     eax, [mp3_curr_frame]
  5690 00003CC5 3B05[809D0000]                          cmp     eax, [mp3_nb_frames]
  5691 00003CCB 0F8234FFFFFF                            jb      .synth_frame_lop
  5692 00003CD1 5F                                      pop     edi
  5693 00003CD2 5E                                      pop     esi
  5694 00003CD3 033D[749D0000]                          add     edi, [mp3_bytes_per_sample]
  5695 00003CD9 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  5696 00003CDF FF05[3CF40000]                          inc     dword [mp3_curr_channel]
  5697 00003CE5 A1[3CF40000]                            mov     eax, [mp3_curr_channel]
  5698 00003CEA 3B05[6C9D0000]                          cmp     eax, [mp3_output_num_channels]
  5699 00003CF0 0F82FDFEFFFF                            jb      .synth_channel_lop
  5700 00003CF6 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  5701 00003CFD 740E                                    jz      short .no_rdtsc_supported@@@@@
  5702 00003CFF 0F31                                    rdtsc
  5703 00003D01 0105[68770000]                          add     [rdtsc_synth_dct], eax
  5704 00003D07 1115[6C770000]                          adc     [rdtsc_synth_dct+4], edx
  5705                                  
  5706                                  .no_rdtsc_supported@@@@@:
  5707 00003D0D C3                                      retn
  5708                                  
  5709                                  
  5710                                  ; =============== S U B R O U T I N E =======================================
  5711                                  
  5712                                  
  5713                                  mp3_synth_filter_this_16bit_shift_2_fast:
  5714 00003D0E A1[789D0000]                            mov     eax, [mp3_curr_syn_index]
  5715 00003D13 A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh
  5716 00003D18 0F84A2010000                            jz      .append_copy_to_window
  5717 00003D1E 90                                      nop
  5718                                  
  5719                                  .append_copy_to_window_back:
  5720 00003D1F 89C5                                    mov     ebp, eax
  5721 00003D21 81E5C0010000                            and     ebp, 1C0h       ; 1FFh-1Fh-20h
  5722 00003D27 2520040000                              and     eax, 420h       ; 20h+(1 shl 10)
  5723 00003D2C 8D7010                                  lea     esi, [eax+10h]
  5724 00003D2F 8D7830                                  lea     edi, [eax+30h]
  5725 00003D32 F7DD                                    neg     ebp
  5726 00003D34 81E5C0010000                            and     ebp, 1C0h
  5727 00003D3A 8B0D[7C9D0000]                          mov     ecx, [mp3_curr_syn_dst]
  5728                                  
  5729                                  .samples_lop:
  5730 00003D40 BB00200020                              mov     ebx, 20002000h  ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  5731                                                                          ; @@out_shift equ (OUT_SHIFT_fast+(8*force_8bit))
  5732                                                                          ; out_shift = 14
  5733 00003D45 8B14B5[949D0000]                        mov     edx, [mp3_synth_buf+esi*4]
  5734 00003D4C 0FBF842D[4CEF0400]                      movsx   eax, word [mp3_synth_win+ebp*2]
  5735 00003D54 0FAFC2                                  imul    eax, edx
  5736 00003D57 01C3                                    add     ebx, eax
  5737 00003D59 8B14B5[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  5738 00003D60 0FBF842D[CCEF0400]                      movsx   eax, word [(mp3_synth_win+80h)+ebp*2]
  5739 00003D68 0FAFC2                                  imul    eax, edx
  5740 00003D6B 01C3                                    add     ebx, eax
  5741 00003D6D 8B14B5[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  5742 00003D74 0FBF842D[4CF00400]                      movsx   eax, word [(mp3_synth_win+100h)+ebp*2]
  5743 00003D7C 0FAFC2                                  imul    eax, edx
  5744 00003D7F 01C3                                    add     ebx, eax
  5745 00003D81 8B14B5[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  5746 00003D88 0FBF842D[CCF00400]                      movsx   eax, word [(mp3_synth_win+180h)+ebp*2]
  5747 00003D90 0FAFC2                                  imul    eax, edx
  5748 00003D93 01C3                                    add     ebx, eax
  5749 00003D95 8B14B5[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  5750 00003D9C 0FBF842D[4CF10400]                      movsx   eax, word [(mp3_synth_win+200h)+ebp*2]
  5751 00003DA4 0FAFC2                                  imul    eax, edx
  5752 00003DA7 01C3                                    add     ebx, eax
  5753 00003DA9 8B14B5[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  5754 00003DB0 0FBF842D[CCF10400]                      movsx   eax, word [(mp3_synth_win+280h)+ebp*2]
  5755 00003DB8 0FAFC2                                  imul    eax, edx
  5756 00003DBB 01C3                                    add     ebx, eax
  5757 00003DBD 8B14B5[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  5758 00003DC4 0FBF842D[4CF20400]                      movsx   eax, word [(mp3_synth_win+300h)+ebp*2]
  5759 00003DCC 0FAFC2                                  imul    eax, edx
  5760 00003DCF 01C3                                    add     ebx, eax
  5761 00003DD1 8B14B5[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  5762 00003DD8 0FBF842D[CCF20400]                      movsx   eax, word [(mp3_synth_win+380h)+ebp*2]
  5763 00003DE0 0FAFC2                                  imul    eax, edx
  5764 00003DE3 01C3                                    add     ebx, eax
  5765 00003DE5 8B14BD[949D0000]                        mov     edx, [mp3_synth_buf+edi*4]
  5766 00003DEC 0FBF842D[8CEF0400]                      movsx   eax, word [(mp3_synth_win+40h)+ebp*2]
  5767 00003DF4 0FAFC2                                  imul    eax, edx
  5768 00003DF7 01C3                                    add     ebx, eax
  5769 00003DF9 8B14BD[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  5770 00003E00 0FBF842D[0CF00400]                      movsx   eax, word [(mp3_synth_win+0C0h)+ebp*2]
  5771 00003E08 0FAFC2                                  imul    eax, edx
  5772 00003E0B 01C3                                    add     ebx, eax
  5773 00003E0D 8B14BD[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  5774 00003E14 0FBF842D[8CF00400]                      movsx   eax, word [(mp3_synth_win+140h)+ebp*2]
  5775 00003E1C 0FAFC2                                  imul    eax, edx
  5776 00003E1F 01C3                                    add     ebx, eax
  5777 00003E21 8B14BD[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  5778 00003E28 0FBF842D[0CF10400]                      movsx   eax, word [(mp3_synth_win+1C0h)+ebp*2]
  5779 00003E30 0FAFC2                                  imul    eax, edx
  5780 00003E33 01C3                                    add     ebx, eax
  5781 00003E35 8B14BD[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  5782 00003E3C 0FBF842D[8CF10400]                      movsx   eax, word [(mp3_synth_win+240h)+ebp*2]
  5783 00003E44 0FAFC2                                  imul    eax, edx
  5784 00003E47 01C3                                    add     ebx, eax
  5785 00003E49 8B14BD[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  5786 00003E50 0FBF842D[0CF20400]                      movsx   eax, word [(mp3_synth_win+2C0h)+ebp*2]
  5787 00003E58 0FAFC2                                  imul    eax, edx
  5788 00003E5B 01C3                                    add     ebx, eax
  5789 00003E5D 8B14BD[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  5790 00003E64 0FBF842D[8CF20400]                      movsx   eax, word [(mp3_synth_win+340h)+ebp*2]
  5791 00003E6C 0FAFC2                                  imul    eax, edx
  5792 00003E6F 01C3                                    add     ebx, eax
  5793 00003E71 8B14BD[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  5794 00003E78 0FBF842D[0CF30400]                      movsx   eax, word [(mp3_synth_win+3C0h)+ebp*2]
  5795 00003E80 0FAFC2                                  imul    eax, edx
  5796 00003E83 01C3                                    add     ebx, eax
  5797 00003E85 81FB00000040                            cmp     ebx, 40000000h
  5798 00003E8B 7328                                    jnb     short .sat
  5799 00003E8D C1FB0E                                  sar     ebx, 14
  5800 00003E90 81EB00800000                            sub     ebx, 8000h      ; make 16bit signed
  5801                                  
  5802                                  .sat_back:
  5803 00003E96 668919                                  mov     [ecx], bx
  5804 00003E99 030D[38F40000]                          add     ecx, [mp3_samples_dst_step]
  5805 00003E9F 83C604                                  add     esi, 4
  5806 00003EA2 83EF04                                  sub     edi, 4
  5807 00003EA5 83C504                                  add     ebp, 4
  5808 00003EA8 F7C51F000000                            test    ebp, 1Fh
  5809 00003EAE 0F858CFEFFFF                            jnz     .samples_lop
  5810 00003EB4 C3                                      retn
  5811                                  
  5812                                  .sat:
  5813 00003EB5 C1FB1F                                  sar     ebx, 31
  5814 00003EB8 81F3FF7F0000                            xor     ebx, 7FFFh
  5815 00003EBE EBD6                                    jmp     short .sat_back
  5816                                  
  5817                                  .append_copy_to_window:
  5818 00003EC0 8D3485[949D0000]                        lea     esi, [mp3_synth_buf+eax*4]
  5819 00003EC7 8DBE00080000                            lea     edi, [esi+2048]
  5820 00003ECD B912000000                              mov     ecx, 18
  5821 00003ED2 F3A5                                    rep movsd
  5822 00003ED4 E946FEFFFF                              jmp     .append_copy_to_window_back
  5823                                  
  5824                                  
  5825                                  ; =============== S U B R O U T I N E =======================================
  5826                                  
  5827                                  
  5828                                  synth_8bit_shift_0_fast:
  5829 00003ED9 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 1,0,1
  5830 00003EE0 740E                                    jz      short .no_rdtsc_supported
  5831 00003EE2 0F31                                    rdtsc
  5832 00003EE4 2905[68770000]                          sub     [rdtsc_synth_dct], eax
  5833 00003EEA 1915[6C770000]                          sbb     [rdtsc_synth_dct+4], edx
  5834                                  
  5835                                  .no_rdtsc_supported:
  5836 00003EF0 BE[9CBD0000]                            mov	esi, mp3_sb_samples
  5837 00003EF5 8B3D[30F40000]                          mov	edi, [mp3_samples_dst]
  5838 00003EFB C705[3CF40000]0000-                     mov	dword [mp3_curr_channel], 0
  5838 00003F03 0000               
  5839                                  
  5840                                  .synth_channel_lop:
  5841 00003F05 56                                      push	esi
  5842 00003F06 57                                      push	edi
  5843 00003F07 893D[7C9D0000]                          mov	[mp3_curr_syn_dst], edi
  5844 00003F0D C705[44F40000]0000-                     mov	dword [mp3_curr_frame], 0
  5844 00003F15 0000               
  5845                                  
  5846                                  .synth_frame_lop:
  5847 00003F17 56                                      push    esi
  5848 00003F18 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  5849 00003F1F 740E                                    jz      short .no_rdtsc_supported@
  5850 00003F21 0F31                                    rdtsc
  5851 00003F23 2905[80770000]                          sub     [rdtsc_dct32], eax
  5852 00003F29 1915[84770000]                          sbb     [rdtsc_dct32+4], edx
  5853                                  
  5854                                  .no_rdtsc_supported@:
  5855 00003F2F 8B15[3CF40000]                          mov     edx, [mp3_curr_channel]
  5856 00003F35 8B0495[94BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  5857 00003F3C 832C95[94BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  5858 00003F44 C1E20A                                  shl     edx, 10
  5859 00003F47 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  5860 00003F4C 09D0                                    or      eax, edx
  5861 00003F4E A3[789D0000]                            mov     [mp3_curr_syn_index], eax
  5862 00003F53 8B3D[789D0000]                          mov     edi, [mp3_curr_syn_index]
  5863 00003F59 8D3CBD[949D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  5864 00003F60 E873E6FFFF                              call    mp3_dct32_shift_0 ; mp3_dct32_shift_&rate_shift
  5865 00003F65 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  5866 00003F6C 740E                                    jz      short .no_rdtsc_supported@@
  5867 00003F6E 0F31                                    rdtsc
  5868 00003F70 0105[80770000]                          add     [rdtsc_dct32], eax
  5869 00003F76 1115[84770000]                          adc     [rdtsc_dct32+4], edx
  5870                                  
  5871                                  .no_rdtsc_supported@@:
  5872 00003F7C F605[F0750000]10                        test    byte [cpuid_flags], 10h
  5873 00003F83 740E                                    jz      short .no_rdtsc_supported@@@
  5874 00003F85 0F31                                    rdtsc
  5875 00003F87 2905[98770000]                          sub     [rdtsc_synth], eax
  5876 00003F8D 1915[9C770000]                          sbb     [rdtsc_synth+4], edx
  5877                                  
  5878                                  .no_rdtsc_supported@@@:
  5879 00003F93 E888000000                              call    mp3_synth_filter_this_8bit_shift_0_fast ;
  5880                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  5881 00003F98 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  5882 00003F9F 740E                                    jz      short .no_rdtsc_supported@@@@
  5883 00003FA1 0F31                                    rdtsc
  5884 00003FA3 0105[98770000]                          add     [rdtsc_synth], eax
  5885 00003FA9 1115[9C770000]                          adc     [rdtsc_synth+4], edx
  5886                                  
  5887                                  .no_rdtsc_supported@@@@:
  5888 00003FAF 5E                                      pop     esi
  5889 00003FB0 A1[38F40000]                            mov     eax, [mp3_samples_dst_step]
  5890 00003FB5 C1E005                                  shl     eax, 5
  5891 00003FB8 8A0D[EE750000]                          mov     cl, [option_rate_shift]
  5892 00003FBE D3E8                                    shr     eax, cl
  5893 00003FC0 0105[7C9D0000]                          add     [mp3_curr_syn_dst], eax
  5894 00003FC6 81C680000000                            add     esi, 128        ; SBLIMIT*4
  5895 00003FCC FF05[44F40000]                          inc     dword [mp3_curr_frame]
  5896 00003FD2 A1[44F40000]                            mov     eax, [mp3_curr_frame]
  5897 00003FD7 3B05[809D0000]                          cmp     eax, [mp3_nb_frames]
  5898 00003FDD 0F8234FFFFFF                            jb      .synth_frame_lop
  5899 00003FE3 5F                                      pop     edi
  5900 00003FE4 5E                                      pop     esi
  5901 00003FE5 033D[749D0000]                          add     edi, [mp3_bytes_per_sample]
  5902 00003FEB 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  5903 00003FF1 FF05[3CF40000]                          inc     dword [mp3_curr_channel]
  5904 00003FF7 A1[3CF40000]                            mov     eax, [mp3_curr_channel]
  5905 00003FFC 3B05[6C9D0000]                          cmp     eax, [mp3_output_num_channels]
  5906 00004002 0F82FDFEFFFF                            jb      .synth_channel_lop
  5907 00004008 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  5908 0000400F 740E                                    jz      short .no_rdtsc_supported@@@@@
  5909 00004011 0F31                                    rdtsc
  5910 00004013 0105[68770000]                          add     [rdtsc_synth_dct], eax
  5911 00004019 1115[6C770000]                          adc     [rdtsc_synth_dct+4], edx
  5912                                  
  5913                                  .no_rdtsc_supported@@@@@:
  5914 0000401F C3                                      retn
  5915                                  
  5916                                  
  5917                                  ; =============== S U B R O U T I N E =======================================
  5918                                  
  5919                                  
  5920                                  mp3_synth_filter_this_8bit_shift_0_fast:
  5921 00004020 A1[789D0000]                            mov     eax, [mp3_curr_syn_index]
  5922 00004025 A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh
  5923 0000402A 0F8491010000                            jz      .append_copy_to_window
  5924 00004030 90                                      nop
  5925                                  
  5926                                  .append_copy_to_window_back:
  5927 00004031 89C5                                    mov     ebp, eax
  5928 00004033 81E5C0010000                            and     ebp, 1C0h       ; 1FFh-1Fh-20h
  5929 00004039 2520040000                              and     eax, 420h       ; 20h+(1 shl 10)
  5930 0000403E 8D7010                                  lea     esi, [eax+10h]
  5931 00004041 8D7830                                  lea     edi, [eax+30h]
  5932 00004044 F7DD                                    neg     ebp
  5933 00004046 81E5C0010000                            and     ebp, 1C0h
  5934 0000404C 8B0D[7C9D0000]                          mov     ecx, [mp3_curr_syn_dst]
  5935                                  
  5936                                  .samples_lop:
  5937 00004052 BB00002020                              mov     ebx, 20200000h  ; mov @@sum,(80h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  5938                                                                          ; @@out_shift equ (OUT_SHIFT_fast(8*force_8bit))
  5939                                                                          ; @@out_shift = 22
  5940 00004057 8B14B5[949D0000]                        mov     edx, [mp3_synth_buf+esi*4] ; @@SUM8 macro sum,win,ww,syn
  5941                                                                          ; @@SUM8 @@sum,@@win1,0,@@syn1
  5942                                                                          ; IRP nn,0,1,2,3,4,5,6,7
  5943                                                                          ; mov edx,dword ptr [mp3_synth_buf+syn*4+(nn*64*4)]
  5944                                                                          ; movsx eax,word ptr [mp3_synth_win+win*2+(nn*64*2)+ww*2]
  5945                                                                          ; imul eax,edx
  5946                                                                          ; add sum,eax
  5947 0000405E 0FBF842D[4CEF0400]                      movsx   eax, word [mp3_synth_win+ebp*2]
  5948 00004066 0FAFC2                                  imul    eax, edx
  5949 00004069 01C3                                    add     ebx, eax
  5950 0000406B 8B14B5[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4] ; nn=1
  5951 00004072 0FBF842D[CCEF0400]                      movsx   eax, word [(mp3_synth_win+80h)+ebp*2] ; ww=0
  5952 0000407A 0FAFC2                                  imul    eax, edx
  5953 0000407D 01C3                                    add     ebx, eax
  5954 0000407F 8B14B5[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  5955 00004086 0FBF842D[4CF00400]                      movsx   eax, word [(mp3_synth_win+100h)+ebp*2]
  5956 0000408E 0FAFC2                                  imul    eax, edx
  5957 00004091 01C3                                    add     ebx, eax
  5958 00004093 8B14B5[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  5959 0000409A 0FBF842D[CCF00400]                      movsx   eax, word [(mp3_synth_win+180h)+ebp*2]
  5960 000040A2 0FAFC2                                  imul    eax, edx
  5961 000040A5 01C3                                    add     ebx, eax
  5962 000040A7 8B14B5[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  5963 000040AE 0FBF842D[4CF10400]                      movsx   eax, word [(mp3_synth_win+200h)+ebp*2]
  5964 000040B6 0FAFC2                                  imul    eax, edx
  5965 000040B9 01C3                                    add     ebx, eax
  5966 000040BB 8B14B5[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  5967 000040C2 0FBF842D[CCF10400]                      movsx   eax, word [(mp3_synth_win+280h)+ebp*2]
  5968 000040CA 0FAFC2                                  imul    eax, edx
  5969 000040CD 01C3                                    add     ebx, eax
  5970 000040CF 8B14B5[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  5971 000040D6 0FBF842D[4CF20400]                      movsx   eax, word [(mp3_synth_win+300h)+ebp*2]
  5972 000040DE 0FAFC2                                  imul    eax, edx
  5973 000040E1 01C3                                    add     ebx, eax
  5974 000040E3 8B14B5[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  5975 000040EA 0FBF842D[CCF20400]                      movsx   eax, word [(mp3_synth_win+380h)+ebp*2]
  5976 000040F2 0FAFC2                                  imul    eax, edx
  5977 000040F5 01C3                                    add     ebx, eax
  5978 000040F7 8B14BD[949D0000]                        mov     edx, [mp3_synth_buf+edi*4]
  5979 000040FE 0FBF842D[8CEF0400]                      movsx   eax, word [(mp3_synth_win+40h)+ebp*2]
  5980 00004106 0FAFC2                                  imul    eax, edx
  5981 00004109 01C3                                    add     ebx, eax
  5982 0000410B 8B14BD[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  5983 00004112 0FBF842D[0CF00400]                      movsx   eax, word [(mp3_synth_win+0C0h)+ebp*2]
  5984 0000411A 0FAFC2                                  imul    eax, edx
  5985 0000411D 01C3                                    add     ebx, eax
  5986 0000411F 8B14BD[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4] ; nn=2
  5987 00004126 0FBF842D[8CF00400]                      movsx   eax, word [(mp3_synth_win+140h)+ebp*2] ; ww=32
  5988 0000412E 0FAFC2                                  imul    eax, edx
  5989 00004131 01C3                                    add     ebx, eax
  5990 00004133 8B14BD[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  5991 0000413A 0FBF842D[0CF10400]                      movsx   eax, word [(mp3_synth_win+1C0h)+ebp*2]
  5992 00004142 0FAFC2                                  imul    eax, edx
  5993 00004145 01C3                                    add     ebx, eax
  5994 00004147 8B14BD[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  5995 0000414E 0FBF842D[8CF10400]                      movsx   eax, word [(mp3_synth_win+240h)+ebp*2]
  5996 00004156 0FAFC2                                  imul    eax, edx
  5997 00004159 01C3                                    add     ebx, eax
  5998 0000415B 8B14BD[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  5999 00004162 0FBF842D[0CF20400]                      movsx   eax, word [(mp3_synth_win+2C0h)+ebp*2]
  6000 0000416A 0FAFC2                                  imul    eax, edx
  6001 0000416D 01C3                                    add     ebx, eax
  6002 0000416F 8B14BD[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  6003 00004176 0FBF842D[8CF20400]                      movsx   eax, word [(mp3_synth_win+340h)+ebp*2]
  6004 0000417E 0FAFC2                                  imul    eax, edx
  6005 00004181 01C3                                    add     ebx, eax
  6006 00004183 8B14BD[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  6007 0000418A 0FBF842D[0CF30400]                      movsx   eax, word [(mp3_synth_win+3C0h)+ebp*2]
  6008 00004192 0FAFC2                                  imul    eax, edx
  6009 00004195 01C3                                    add     ebx, eax
  6010 00004197 81FB00000040                            cmp     ebx, 40000000h  ; cmp  @@sum,100h SHL (@@out_shift)
  6011 0000419D 731B                                    jnb     short .sat
  6012 0000419F C1FB16                                  sar     ebx, 22         ; sar @@sum,(@@out_shift)
  6013                                  
  6014                                  .sat_back:
  6015 000041A2 8819                                    mov     [ecx], bl       ; mov byte ptr [@@dst],@@sum_8bit
  6016 000041A4 030D[38F40000]                          add     ecx, [mp3_samples_dst_step]
  6017 000041AA 46                                      inc     esi             ; inc @@syn1
  6018 000041AB 4F                                      dec     edi             ; dec @@syn2
  6019 000041AC 45                                      inc     ebp             ; inc @@win1
  6020 000041AD F7C51F000000                            test    ebp, 1Fh        ; IF LONG_WINDOW
  6021                                                                          ; test @@win1,1fh
  6022 000041B3 0F8599FEFFFF                            jnz     .samples_lop
  6023 000041B9 C3                                      retn
  6024                                  
  6025                                  .sat:                                 
  6026 000041BA C1FB1F                                  sar     ebx, 31         ; sar @@sum,31 ; FFFFFFFFh,00000000h
  6027 000041BD F7D3                                    not     ebx             ; IF force_8bit
  6028                                                                          ; not @@sum ; 00000000h,FFFFFFFFh (unsigned 8bit)
  6029 000041BF EBE1                                    jmp     short .sat_back
  6030                                  
  6031                                  .append_copy_to_window:
  6032 000041C1 8D3485[949D0000]                        lea     esi, [mp3_synth_buf+eax*4]
  6033 000041C8 8DBE00080000                            lea     edi, [esi+2048] ; [esi+512*4]
  6034 000041CE B912000000                              mov     ecx, 18         ; (12h*4)/4
  6035 000041D3 F3A5                                    rep movsd
  6036 000041D5 E957FEFFFF                              jmp     .append_copy_to_window_back
  6037                                  
  6038                                  
  6039                                  ; =============== S U B R O U T I N E =======================================
  6040                                  
  6041                                  
  6042                                  synth_8bit_shift_1_fast:
  6043 000041DA F605[F0750000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 1,1,1
  6044 000041E1 740E                                    jz      short .no_rdtsc_supported
  6045 000041E3 0F31                                    rdtsc
  6046 000041E5 2905[68770000]                          sub     [rdtsc_synth_dct], eax
  6047 000041EB 1915[6C770000]                          sbb     [rdtsc_synth_dct+4], edx
  6048                                  
  6049                                  .no_rdtsc_supported:
  6050 000041F1 BE[9CBD0000]                            mov	esi, mp3_sb_samples
  6051 000041F6 8B3D[30F40000]                          mov	edi, [mp3_samples_dst]
  6052 000041FC C705[3CF40000]0000-                     mov	dword [mp3_curr_channel], 0
  6052 00004204 0000               
  6053                                  
  6054                                  .synth_channel_lop:
  6055 00004206 56                                      push	esi
  6056 00004207 57                                      push	edi
  6057 00004208 893D[7C9D0000]                          mov	[mp3_curr_syn_dst], edi
  6058 0000420E C705[44F40000]0000-                     mov	dword [mp3_curr_frame], 0
  6058 00004216 0000               
  6059                                  
  6060                                  .synth_frame_lop:
  6061 00004218 56                                      push    esi
  6062 00004219 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6063 00004220 740E                                    jz      short .no_rdtsc_supported@
  6064 00004222 0F31                                    rdtsc
  6065 00004224 2905[80770000]                          sub     [rdtsc_dct32], eax
  6066 0000422A 1915[84770000]                          sbb     [rdtsc_dct32+4], edx
  6067                                  
  6068                                  .no_rdtsc_supported@:
  6069 00004230 8B15[3CF40000]                          mov     edx, [mp3_curr_channel]
  6070 00004236 8B0495[94BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  6071 0000423D 832C95[94BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  6072 00004245 C1E20A                                  shl     edx, 10
  6073 00004248 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  6074 0000424D 09D0                                    or      eax, edx
  6075 0000424F A3[789D0000]                            mov     [mp3_curr_syn_index], eax
  6076 00004254 8B3D[789D0000]                          mov     edi, [mp3_curr_syn_index]
  6077 0000425A 8D3CBD[949D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  6078 00004261 E852ECFFFF                              call    mp3_dct32_shift_1 ; mp3_dct32_shift_&rate_shift
  6079 00004266 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6080 0000426D 740E                                    jz      short .no_rdtsc_supported@@
  6081 0000426F 0F31                                    rdtsc
  6082 00004271 0105[80770000]                          add     [rdtsc_dct32], eax
  6083 00004277 1115[84770000]                          adc     [rdtsc_dct32+4], edx
  6084                                  
  6085                                  .no_rdtsc_supported@@:
  6086 0000427D F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6087 00004284 740E                                    jz      short .no_rdtsc_supported@@@
  6088 00004286 0F31                                    rdtsc
  6089 00004288 2905[98770000]                          sub     [rdtsc_synth], eax
  6090 0000428E 1915[9C770000]                          sbb     [rdtsc_synth+4], edx
  6091                                  
  6092                                  .no_rdtsc_supported@@@:
  6093 00004294 E888000000                              call    mp3_synth_filter_this_8bit_shift_1_fast ;
  6094                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  6095 00004299 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6096 000042A0 740E                                    jz      short .no_rdtsc_supported@@@@
  6097 000042A2 0F31                                    rdtsc
  6098 000042A4 0105[98770000]                          add     [rdtsc_synth], eax
  6099 000042AA 1115[9C770000]                          adc     [rdtsc_synth+4], edx
  6100                                  
  6101                                  .no_rdtsc_supported@@@@:
  6102 000042B0 5E                                      pop     esi
  6103 000042B1 A1[38F40000]                            mov     eax, [mp3_samples_dst_step]
  6104 000042B6 C1E005                                  shl     eax, 5
  6105 000042B9 8A0D[EE750000]                          mov     cl, [option_rate_shift]
  6106 000042BF D3E8                                    shr     eax, cl
  6107 000042C1 0105[7C9D0000]                          add     [mp3_curr_syn_dst], eax
  6108 000042C7 81C680000000                            add     esi, 128        ; SBLIMIT*4
  6109 000042CD FF05[44F40000]                          inc     dword [mp3_curr_frame]
  6110 000042D3 A1[44F40000]                            mov     eax, [mp3_curr_frame]
  6111 000042D8 3B05[809D0000]                          cmp     eax, [mp3_nb_frames]
  6112 000042DE 0F8234FFFFFF                            jb      .synth_frame_lop
  6113 000042E4 5F                                      pop     edi
  6114 000042E5 5E                                      pop     esi
  6115 000042E6 033D[749D0000]                          add     edi, [mp3_bytes_per_sample]
  6116 000042EC 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  6117 000042F2 FF05[3CF40000]                          inc     dword [mp3_curr_channel]
  6118 000042F8 A1[3CF40000]                            mov     eax, [mp3_curr_channel]
  6119 000042FD 3B05[6C9D0000]                          cmp     eax, [mp3_output_num_channels]
  6120 00004303 0F82FDFEFFFF                            jb      .synth_channel_lop
  6121 00004309 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6122 00004310 740E                                    jz      short .no_rdtsc_supported@@@@@
  6123 00004312 0F31                                    rdtsc
  6124 00004314 0105[68770000]                          add     [rdtsc_synth_dct], eax
  6125 0000431A 1115[6C770000]                          adc     [rdtsc_synth_dct+4], edx
  6126                                  
  6127                                  .no_rdtsc_supported@@@@@:
  6128 00004320 C3                                      retn
  6129                                  
  6130                                  
  6131                                  ; =============== S U B R O U T I N E =======================================
  6132                                  
  6133                                  
  6134                                  mp3_synth_filter_this_8bit_shift_1_fast:
  6135 00004321 A1[789D0000]                            mov     eax, [mp3_curr_syn_index]
  6136 00004326 A9E0010000                              test    eax, 1E0h
  6137 0000432B 0F8497010000                            jz      .append_copy_to_window
  6138 00004331 90                                      nop
  6139                                  
  6140                                  .append_copy_to_window_back:
  6141 00004332 89C5                                    mov     ebp, eax
  6142 00004334 81E5C0010000                            and     ebp, 1C0h
  6143 0000433A 2520040000                              and     eax, 420h
  6144 0000433F 8D7010                                  lea     esi, [eax+10h]
  6145 00004342 8D7830                                  lea     edi, [eax+30h]
  6146 00004345 F7DD                                    neg     ebp
  6147 00004347 81E5C0010000                            and     ebp, 1C0h
  6148 0000434D 8B0D[7C9D0000]                          mov     ecx, [mp3_curr_syn_dst]
  6149                                  
  6150                                  .samples_lop:
  6151 00004353 BB00002020                              mov     ebx, 20200000h
  6152 00004358 8B14B5[949D0000]                        mov     edx, [mp3_synth_buf+esi*4]
  6153 0000435F 0FBF842D[4CEF0400]                      movsx   eax, word [mp3_synth_win+ebp*2]
  6154 00004367 0FAFC2                                  imul    eax, edx
  6155 0000436A 01C3                                    add     ebx, eax
  6156 0000436C 8B14B5[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  6157 00004373 0FBF842D[CCEF0400]                      movsx   eax, word [(mp3_synth_win+80h)+ebp*2]
  6158 0000437B 0FAFC2                                  imul    eax, edx
  6159 0000437E 01C3                                    add     ebx, eax
  6160 00004380 8B14B5[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  6161 00004387 0FBF842D[4CF00400]                      movsx   eax, word [(mp3_synth_win+100h)+ebp*2]
  6162 0000438F 0FAFC2                                  imul    eax, edx
  6163 00004392 01C3                                    add     ebx, eax
  6164 00004394 8B14B5[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  6165 0000439B 0FBF842D[CCF00400]                      movsx   eax, word [(mp3_synth_win+180h)+ebp*2]
  6166 000043A3 0FAFC2                                  imul    eax, edx
  6167 000043A6 01C3                                    add     ebx, eax
  6168 000043A8 8B14B5[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  6169 000043AF 0FBF842D[4CF10400]                      movsx   eax, word [(mp3_synth_win+200h)+ebp*2]
  6170 000043B7 0FAFC2                                  imul    eax, edx
  6171 000043BA 01C3                                    add     ebx, eax
  6172 000043BC 8B14B5[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  6173 000043C3 0FBF842D[CCF10400]                      movsx   eax, word [(mp3_synth_win+280h)+ebp*2]
  6174 000043CB 0FAFC2                                  imul    eax, edx
  6175 000043CE 01C3                                    add     ebx, eax
  6176 000043D0 8B14B5[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  6177 000043D7 0FBF842D[4CF20400]                      movsx   eax, word [(mp3_synth_win+300h)+ebp*2]
  6178 000043DF 0FAFC2                                  imul    eax, edx
  6179 000043E2 01C3                                    add     ebx, eax
  6180 000043E4 8B14B5[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  6181 000043EB 0FBF842D[CCF20400]                      movsx   eax, word [(mp3_synth_win+380h)+ebp*2]
  6182 000043F3 0FAFC2                                  imul    eax, edx
  6183 000043F6 01C3                                    add     ebx, eax
  6184 000043F8 8B14BD[949D0000]                        mov     edx, [mp3_synth_buf+edi*4]
  6185 000043FF 0FBF842D[8CEF0400]                      movsx   eax, word [(mp3_synth_win+40h)+ebp*2]
  6186 00004407 0FAFC2                                  imul    eax, edx
  6187 0000440A 01C3                                    add     ebx, eax
  6188 0000440C 8B14BD[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  6189 00004413 0FBF842D[0CF00400]                      movsx   eax, word [(mp3_synth_win+0C0h)+ebp*2]
  6190 0000441B 0FAFC2                                  imul    eax, edx
  6191 0000441E 01C3                                    add     ebx, eax
  6192 00004420 8B14BD[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  6193 00004427 0FBF842D[8CF00400]                      movsx   eax, word [(mp3_synth_win+140h)+ebp*2]
  6194 0000442F 0FAFC2                                  imul    eax, edx
  6195 00004432 01C3                                    add     ebx, eax
  6196 00004434 8B14BD[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  6197 0000443B 0FBF842D[0CF10400]                      movsx   eax, word [(mp3_synth_win+1C0h)+ebp*2]
  6198 00004443 0FAFC2                                  imul    eax, edx
  6199 00004446 01C3                                    add     ebx, eax
  6200 00004448 8B14BD[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  6201 0000444F 0FBF842D[8CF10400]                      movsx   eax, word [(mp3_synth_win+240h)+ebp*2]
  6202 00004457 0FAFC2                                  imul    eax, edx
  6203 0000445A 01C3                                    add     ebx, eax
  6204 0000445C 8B14BD[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  6205 00004463 0FBF842D[0CF20400]                      movsx   eax, word [(mp3_synth_win+2C0h)+ebp*2]
  6206 0000446B 0FAFC2                                  imul    eax, edx
  6207 0000446E 01C3                                    add     ebx, eax
  6208 00004470 8B14BD[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  6209 00004477 0FBF842D[8CF20400]                      movsx   eax, word [(mp3_synth_win+340h)+ebp*2]
  6210 0000447F 0FAFC2                                  imul    eax, edx
  6211 00004482 01C3                                    add     ebx, eax
  6212 00004484 8B14BD[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  6213 0000448B 0FBF842D[0CF30400]                      movsx   eax, word [(mp3_synth_win+3C0h)+ebp*2]
  6214 00004493 0FAFC2                                  imul    eax, edx
  6215 00004496 01C3                                    add     ebx, eax
  6216 00004498 81FB00000040                            cmp     ebx, 40000000h
  6217 0000449E 7321                                    jnb     short .sat
  6218 000044A0 C1FB16                                  sar     ebx, 22
  6219                                  
  6220                                  .sat_back:
  6221 000044A3 8819                                    mov     [ecx], bl
  6222 000044A5 030D[38F40000]                          add     ecx, [mp3_samples_dst_step]
  6223 000044AB 83C602                                  add     esi, 2
  6224 000044AE 83EF02                                  sub     edi, 2
  6225 000044B1 83C502                                  add     ebp, 2
  6226 000044B4 F7C51F000000                            test    ebp, 1Fh
  6227 000044BA 0F8593FEFFFF                            jnz     .samples_lop
  6228 000044C0 C3                                      retn
  6229                                  
  6230                                  .sat:
  6231 000044C1 C1FB1F                                  sar     ebx, 31
  6232 000044C4 F7D3                                    not     ebx
  6233 000044C6 EBDB                                    jmp     short .sat_back
  6234                                  
  6235                                  .append_copy_to_window:
  6236 000044C8 8D3485[949D0000]                        lea     esi, [mp3_synth_buf+eax*4]
  6237 000044CF 8DBE00080000                            lea     edi, [esi+2048]
  6238 000044D5 B912000000                              mov     ecx, 18
  6239 000044DA F3A5                                    rep movsd
  6240 000044DC E951FEFFFF                              jmp     .append_copy_to_window_back
  6241                                  
  6242                                  
  6243                                  ; =============== S U B R O U T I N E =======================================
  6244                                  
  6245                                  
  6246                                  synth_8bit_shift_2_fast:
  6247 000044E1 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 1,2,1
  6248 000044E8 740E                                    jz      short .no_rdtsc_supported
  6249 000044EA 0F31                                    rdtsc
  6250 000044EC 2905[68770000]                          sub     [rdtsc_synth_dct], eax
  6251 000044F2 1915[6C770000]                          sbb     [rdtsc_synth_dct+4], edx
  6252                                  
  6253                                  .no_rdtsc_supported:
  6254 000044F8 BE[9CBD0000]                            mov	esi, mp3_sb_samples
  6255 000044FD 8B3D[30F40000]                          mov	edi, [mp3_samples_dst]
  6256 00004503 C705[3CF40000]0000-                     mov	dword [mp3_curr_channel], 0
  6256 0000450B 0000               
  6257                                  
  6258                                  .synth_channel_lop:
  6259 0000450D 56                                      push	esi
  6260 0000450E 57                                      push	edi
  6261 0000450F 893D[7C9D0000]                          mov	[mp3_curr_syn_dst], edi
  6262 00004515 C705[44F40000]0000-                     mov	dword [mp3_curr_frame], 0
  6262 0000451D 0000               
  6263                                  
  6264                                  .synth_frame_lop:
  6265 0000451F 56                                      push    esi
  6266 00004520 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6267 00004527 740E                                    jz      short .no_rdtsc_supported@
  6268 00004529 0F31                                    rdtsc
  6269 0000452B 2905[80770000]                          sub     [rdtsc_dct32], eax
  6270 00004531 1915[84770000]                          sbb     [rdtsc_dct32+4], edx
  6271                                  
  6272                                  .no_rdtsc_supported@:
  6273 00004537 8B15[3CF40000]                          mov     edx, [mp3_curr_channel]
  6274 0000453D 8B0495[94BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  6275 00004544 832C95[94BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  6276 0000454C C1E20A                                  shl     edx, 10
  6277 0000454F 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  6278 00004554 09D0                                    or      eax, edx
  6279 00004556 A3[789D0000]                            mov     [mp3_curr_syn_index], eax
  6280 0000455B 8B3D[789D0000]                          mov     edi, [mp3_curr_syn_index]
  6281 00004561 8D3CBD[949D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  6282 00004568 E83BEDFFFF                              call    mp3_dct32_shift_2 ; mp3_dct32_shift_&rate_shift
  6283 0000456D F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6284 00004574 740E                                    jz      short .no_rdtsc_supported@@
  6285 00004576 0F31                                    rdtsc
  6286 00004578 0105[80770000]                          add     [rdtsc_dct32], eax
  6287 0000457E 1115[84770000]                          adc     [rdtsc_dct32+4], edx
  6288                                  
  6289                                  .no_rdtsc_supported@@:
  6290 00004584 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6291 0000458B 740E                                    jz      short .no_rdtsc_supported@@@
  6292 0000458D 0F31                                    rdtsc
  6293 0000458F 2905[98770000]                          sub     [rdtsc_synth], eax
  6294 00004595 1915[9C770000]                          sbb     [rdtsc_synth+4], edx
  6295                                  
  6296                                  .no_rdtsc_supported@@@:
  6297 0000459B E888000000                              call    mp3_synth_filter_this_8bit_shift_2_fast ;
  6298                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  6299 000045A0 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6300 000045A7 740E                                    jz      short .no_rdtsc_supported@@@@
  6301 000045A9 0F31                                    rdtsc
  6302 000045AB 0105[98770000]                          add     [rdtsc_synth], eax
  6303 000045B1 1115[9C770000]                          adc     [rdtsc_synth+4], edx
  6304                                  
  6305                                  .no_rdtsc_supported@@@@:
  6306 000045B7 5E                                      pop     esi
  6307 000045B8 A1[38F40000]                            mov     eax, [mp3_samples_dst_step]
  6308 000045BD C1E005                                  shl     eax, 5
  6309 000045C0 8A0D[EE750000]                          mov     cl, [option_rate_shift]
  6310 000045C6 D3E8                                    shr     eax, cl
  6311 000045C8 0105[7C9D0000]                          add     [mp3_curr_syn_dst], eax
  6312 000045CE 81C680000000                            add     esi, 128        ; SBLIMIT*4
  6313 000045D4 FF05[44F40000]                          inc     dword [mp3_curr_frame]
  6314 000045DA A1[44F40000]                            mov     eax, [mp3_curr_frame]
  6315 000045DF 3B05[809D0000]                          cmp     eax, [mp3_nb_frames]
  6316 000045E5 0F8234FFFFFF                            jb      .synth_frame_lop
  6317 000045EB 5F                                      pop     edi
  6318 000045EC 5E                                      pop     esi
  6319 000045ED 033D[749D0000]                          add     edi, [mp3_bytes_per_sample]
  6320 000045F3 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  6321 000045F9 FF05[3CF40000]                          inc     dword [mp3_curr_channel]
  6322 000045FF A1[3CF40000]                            mov     eax, [mp3_curr_channel]
  6323 00004604 3B05[6C9D0000]                          cmp     eax, [mp3_output_num_channels]
  6324 0000460A 0F82FDFEFFFF                            jb      .synth_channel_lop
  6325 00004610 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6326 00004617 740E                                    jz      short .no_rdtsc_supported@@@@@
  6327 00004619 0F31                                    rdtsc
  6328 0000461B 0105[68770000]                          add     [rdtsc_synth_dct], eax
  6329 00004621 1115[6C770000]                          adc     [rdtsc_synth_dct+4], edx
  6330                                  
  6331                                  .no_rdtsc_supported@@@@@:
  6332 00004627 C3                                      retn
  6333                                  
  6334                                  
  6335                                  ; =============== S U B R O U T I N E =======================================
  6336                                  
  6337                                  
  6338                                  mp3_synth_filter_this_8bit_shift_2_fast:
  6339 00004628 A1[789D0000]                            mov     eax, [mp3_curr_syn_index]
  6340 0000462D A9E0010000                              test    eax, 1E0h
  6341 00004632 0F8497010000                            jz      .append_copy_to_window
  6342 00004638 90                                      nop
  6343                                  
  6344                                  .append_copy_to_window_back:
  6345 00004639 89C5                                    mov     ebp, eax
  6346 0000463B 81E5C0010000                            and     ebp, 1C0h
  6347 00004641 2520040000                              and     eax, 420h
  6348 00004646 8D7010                                  lea     esi, [eax+10h]
  6349 00004649 8D7830                                  lea     edi, [eax+30h]
  6350 0000464C F7DD                                    neg     ebp
  6351 0000464E 81E5C0010000                            and     ebp, 1C0h
  6352 00004654 8B0D[7C9D0000]                          mov     ecx, [mp3_curr_syn_dst]
  6353                                  
  6354                                  .samples_lop:
  6355 0000465A BB00002020                              mov     ebx, 20200000h
  6356 0000465F 8B14B5[949D0000]                        mov     edx, [mp3_synth_buf+esi*4]
  6357 00004666 0FBF842D[4CEF0400]                      movsx   eax, word [mp3_synth_win+ebp*2]
  6358 0000466E 0FAFC2                                  imul    eax, edx
  6359 00004671 01C3                                    add     ebx, eax
  6360 00004673 8B14B5[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  6361 0000467A 0FBF842D[CCEF0400]                      movsx   eax, word [(mp3_synth_win+80h)+ebp*2]
  6362 00004682 0FAFC2                                  imul    eax, edx
  6363 00004685 01C3                                    add     ebx, eax
  6364 00004687 8B14B5[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  6365 0000468E 0FBF842D[4CF00400]                      movsx   eax, word [(mp3_synth_win+100h)+ebp*2]
  6366 00004696 0FAFC2                                  imul    eax, edx
  6367 00004699 01C3                                    add     ebx, eax
  6368 0000469B 8B14B5[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  6369 000046A2 0FBF842D[CCF00400]                      movsx   eax, word [(mp3_synth_win+180h)+ebp*2]
  6370 000046AA 0FAFC2                                  imul    eax, edx
  6371 000046AD 01C3                                    add     ebx, eax
  6372 000046AF 8B14B5[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  6373 000046B6 0FBF842D[4CF10400]                      movsx   eax, word [(mp3_synth_win+200h)+ebp*2]
  6374 000046BE 0FAFC2                                  imul    eax, edx
  6375 000046C1 01C3                                    add     ebx, eax
  6376 000046C3 8B14B5[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  6377 000046CA 0FBF842D[CCF10400]                      movsx   eax, word [(mp3_synth_win+280h)+ebp*2]
  6378 000046D2 0FAFC2                                  imul    eax, edx
  6379 000046D5 01C3                                    add     ebx, eax
  6380 000046D7 8B14B5[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  6381 000046DE 0FBF842D[4CF20400]                      movsx   eax, word [(mp3_synth_win+300h)+ebp*2]
  6382 000046E6 0FAFC2                                  imul    eax, edx
  6383 000046E9 01C3                                    add     ebx, eax
  6384 000046EB 8B14B5[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  6385 000046F2 0FBF842D[CCF20400]                      movsx   eax, word [(mp3_synth_win+380h)+ebp*2]
  6386 000046FA 0FAFC2                                  imul    eax, edx
  6387 000046FD 01C3                                    add     ebx, eax
  6388 000046FF 8B14BD[949D0000]                        mov     edx, [mp3_synth_buf+edi*4]
  6389 00004706 0FBF842D[8CEF0400]                      movsx   eax, word [(mp3_synth_win+40h)+ebp*2]
  6390 0000470E 0FAFC2                                  imul    eax, edx
  6391 00004711 01C3                                    add     ebx, eax
  6392 00004713 8B14BD[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  6393 0000471A 0FBF842D[0CF00400]                      movsx   eax, word [(mp3_synth_win+0C0h)+ebp*2]
  6394 00004722 0FAFC2                                  imul    eax, edx
  6395 00004725 01C3                                    add     ebx, eax
  6396 00004727 8B14BD[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  6397 0000472E 0FBF842D[8CF00400]                      movsx   eax, word [(mp3_synth_win+140h)+ebp*2]
  6398 00004736 0FAFC2                                  imul    eax, edx
  6399 00004739 01C3                                    add     ebx, eax
  6400 0000473B 8B14BD[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  6401 00004742 0FBF842D[0CF10400]                      movsx   eax, word [(mp3_synth_win+1C0h)+ebp*2]
  6402 0000474A 0FAFC2                                  imul    eax, edx
  6403 0000474D 01C3                                    add     ebx, eax
  6404 0000474F 8B14BD[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  6405 00004756 0FBF842D[8CF10400]                      movsx   eax, word [(mp3_synth_win+240h)+ebp*2]
  6406 0000475E 0FAFC2                                  imul    eax, edx
  6407 00004761 01C3                                    add     ebx, eax
  6408 00004763 8B14BD[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  6409 0000476A 0FBF842D[0CF20400]                      movsx   eax, word [(mp3_synth_win+2C0h)+ebp*2]
  6410 00004772 0FAFC2                                  imul    eax, edx
  6411 00004775 01C3                                    add     ebx, eax
  6412 00004777 8B14BD[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  6413 0000477E 0FBF842D[8CF20400]                      movsx   eax, word [(mp3_synth_win+340h)+ebp*2]
  6414 00004786 0FAFC2                                  imul    eax, edx
  6415 00004789 01C3                                    add     ebx, eax
  6416 0000478B 8B14BD[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  6417 00004792 0FBF842D[0CF30400]                      movsx   eax, word [(mp3_synth_win+3C0h)+ebp*2]
  6418 0000479A 0FAFC2                                  imul    eax, edx
  6419 0000479D 01C3                                    add     ebx, eax
  6420 0000479F 81FB00000040                            cmp     ebx, 40000000h
  6421 000047A5 7321                                    jnb     short .sat
  6422 000047A7 C1FB16                                  sar     ebx, 22
  6423                                  
  6424                                  .sat_back:
  6425 000047AA 8819                                    mov     [ecx], bl
  6426 000047AC 030D[38F40000]                          add     ecx, [mp3_samples_dst_step]
  6427 000047B2 83C604                                  add     esi, 4
  6428 000047B5 83EF04                                  sub     edi, 4
  6429 000047B8 83C504                                  add     ebp, 4
  6430 000047BB F7C51F000000                            test    ebp, 1Fh
  6431 000047C1 0F8593FEFFFF                            jnz     .samples_lop
  6432 000047C7 C3                                      retn
  6433                                  
  6434                                  .sat:
  6435 000047C8 C1FB1F                                  sar     ebx, 31
  6436 000047CB F7D3                                    not     ebx
  6437 000047CD EBDB                                    jmp     short .sat_back
  6438                                  
  6439                                  .append_copy_to_window:
  6440 000047CF 8D3485[949D0000]                        lea     esi, [mp3_synth_buf+eax*4]
  6441 000047D6 8DBE00080000                            lea     edi, [esi+2048]
  6442 000047DC B912000000                              mov     ecx, 18
  6443 000047E1 F3A5                                    rep movsd
  6444 000047E3 E951FEFFFF                              jmp     .append_copy_to_window_back
  6445                                  
  6446                                  
  6447                                  ; =============== S U B R O U T I N E =======================================
  6448                                  
  6449                                  
  6450                                  synth_16bit_shift_0_slow:
  6451 000047E8 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6452 000047EF 740E                                    jz      short .no_rdtsc_supported
  6453 000047F1 0F31                                    rdtsc
  6454 000047F3 2905[68770000]                          sub     [rdtsc_synth_dct], eax
  6455 000047F9 1915[6C770000]                          sbb     [rdtsc_synth_dct+4], edx
  6456                                  
  6457                                  .no_rdtsc_supported:
  6458 000047FF BE[9CBD0000]                            mov	esi, mp3_sb_samples
  6459 00004804 8B3D[30F40000]                          mov	edi, [mp3_samples_dst]
  6460 0000480A C705[3CF40000]0000-                     mov	dword [mp3_curr_channel], 0
  6460 00004812 0000               
  6461                                  
  6462                                  .synth_channel_lop:
  6463 00004814 56                                      push	esi
  6464 00004815 57                                      push	edi
  6465 00004816 893D[7C9D0000]                          mov	[mp3_curr_syn_dst], edi
  6466 0000481C C705[44F40000]0000-                     mov	dword [mp3_curr_frame], 0
  6466 00004824 0000               
  6467                                  
  6468                                  .synth_frame_lop:
  6469 00004826 56                                      push    esi
  6470 00004827 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6471 0000482E 740E                                    jz      short .no_rdtsc_supported@
  6472 00004830 0F31                                    rdtsc
  6473 00004832 2905[80770000]                          sub     [rdtsc_dct32], eax
  6474 00004838 1915[84770000]                          sbb     [rdtsc_dct32+4], edx
  6475                                  
  6476                                  .no_rdtsc_supported@:
  6477 0000483E 8B15[3CF40000]                          mov     edx, [mp3_curr_channel]
  6478 00004844 8B0495[94BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  6479 0000484B 832C95[94BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  6480 00004853 C1E20A                                  shl     edx, 10         ; channel*1024
  6481 00004856 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  6482 0000485B 09D0                                    or      eax, edx
  6483 0000485D A3[789D0000]                            mov     [mp3_curr_syn_index], eax
  6484 00004862 8B3D[789D0000]                          mov     edi, [mp3_curr_syn_index]
  6485 00004868 8D3CBD[949D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  6486 0000486F E864DDFFFF                              call    mp3_dct32_shift_0 ; mp3_dct32_shift_&rate_shift
  6487 00004874 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_dct32
  6488 0000487B 740E                                    jz      short .no_rdtsc_supported@@
  6489 0000487D 0F31                                    rdtsc
  6490 0000487F 0105[80770000]                          add     [rdtsc_dct32], eax
  6491 00004885 1115[84770000]                          adc     [rdtsc_dct32+4], edx
  6492                                  
  6493                                  .no_rdtsc_supported@@:
  6494 0000488B F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_synth
  6495 00004892 740E                                    jz      short .no_rdtsc_supported@@@
  6496 00004894 0F31                                    rdtsc
  6497 00004896 2905[98770000]                          sub     [rdtsc_synth], eax
  6498 0000489C 1915[9C770000]                          sbb     [rdtsc_synth+4], edx
  6499                                  
  6500                                  .no_rdtsc_supported@@@:
  6501 000048A2 E888000000                              call    mp3_synth_filter_this_16bit_shift_0_slow
  6502 000048A7 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_synth
  6503 000048AE 740E                                    jz      short .no_rdtsc_supported@@@@
  6504 000048B0 0F31                                    rdtsc
  6505 000048B2 0105[98770000]                          add     [rdtsc_synth], eax
  6506 000048B8 1115[9C770000]                          adc     [rdtsc_synth+4], edx
  6507                                  
  6508                                  .no_rdtsc_supported@@@@:
  6509 000048BE 5E                                      pop     esi
  6510 000048BF A1[38F40000]                            mov     eax, [mp3_samples_dst_step]
  6511 000048C4 C1E005                                  shl     eax, 5
  6512 000048C7 8A0D[EE750000]                          mov     cl, [option_rate_shift]
  6513 000048CD D3E8                                    shr     eax, cl
  6514 000048CF 0105[7C9D0000]                          add     [mp3_curr_syn_dst], eax
  6515 000048D5 81C680000000                            add     esi, 128        ; SBLIMIT*4
  6516 000048DB FF05[44F40000]                          inc     dword [mp3_curr_frame]
  6517 000048E1 A1[44F40000]                            mov     eax, [mp3_curr_frame]
  6518 000048E6 3B05[809D0000]                          cmp     eax, [mp3_nb_frames]
  6519 000048EC 0F8234FFFFFF                            jb      .synth_frame_lop
  6520 000048F2 5F                                      pop     edi
  6521 000048F3 5E                                      pop     esi
  6522 000048F4 033D[749D0000]                          add     edi, [mp3_bytes_per_sample]
  6523 000048FA 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  6524 00004900 FF05[3CF40000]                          inc     dword [mp3_curr_channel]
  6525 00004906 A1[3CF40000]                            mov     eax, [mp3_curr_channel]
  6526 0000490B 3B05[6C9D0000]                          cmp     eax, [mp3_output_num_channels]
  6527 00004911 0F82FDFEFFFF                            jb      .synth_channel_lop
  6528 00004917 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_synth_dct
  6529 0000491E 740E                                    jz      short .no_rdtsc_supported@@@@@
  6530 00004920 0F31                                    rdtsc
  6531 00004922 0105[68770000]                          add     [rdtsc_synth_dct], eax
  6532 00004928 1115[6C770000]                          adc     [rdtsc_synth_dct+4], edx
  6533                                  
  6534                                  .no_rdtsc_supported@@@@@:
  6535 0000492E C3                                      retn
  6536                                  
  6537                                  
  6538                                  ; =============== S U B R O U T I N E =======================================
  6539                                  
  6540                                  
  6541                                  mp3_synth_filter_this_16bit_shift_0_slow:
  6542 0000492F A1[789D0000]                            mov     eax, [mp3_curr_syn_index]
  6543 00004934 A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh
  6544 00004939 0F847C010000                            jz      .append_copy_to_window
  6545 0000493F 90                                      nop
  6546                                  
  6547                                  .append_copy_to_window_back:
  6548 00004940 89C5                                    mov     ebp, eax        ; mov @@win1,eax
  6549 00004942 81E5C0010000                            and     ebp, 1C0h       ; and @@win1,1FFh-1Fh-20h
  6550 00004948 2520040000                              and     eax, 420h       ; and eax,20h+(1 shl 10) ; bit5, and channel
  6551 0000494D 8D7010                                  lea     esi, [eax+10h]  ; lea @@syn1,[eax+10h]
  6552 00004950 8D7830                                  lea     edi, [eax+30h]  ; lea @@syn2,[eax+30h]
  6553 00004953 F7DD                                    neg     ebp
  6554 00004955 81E5C0010000                            and     ebp, 1C0h       ; and @@win1,1FFh-1Fh-20h
  6555 0000495B 8B0D[7C9D0000]                          mov     ecx, [mp3_curr_syn_dst]
  6556                                  
  6557                                  .samples_lop:
  6558 00004961 BB10001000                              mov     ebx, 100010h    ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  6559                                                                          ; @@out_shift = 5
  6560                                  
  6561                                  .SUM8_@:                                ; @@SUM8 macro sum,win,ww,syn
  6562 00004966 8B14B5[949D0000]                        mov     edx, [mp3_synth_buf+esi*4] ; IRP nn,0,1,2,3,4,5,6,7
  6563                                                                          ; @@SUM8 @@sum,@@win1,0, @@syn1
  6564 0000496D 8B04AD[4CEF0400]                        mov     eax, [mp3_synth_win+ebp*4] ; [mp3_synth_buf+syn*4+(nn*64*4)]
  6565 00004974 F7EA                                    imul    edx             ; [mp3_synth_win+win*4+(nn*64*4)+ww*4]
  6566 00004976 01D3                                    add     ebx, edx
  6567 00004978 8B14B5[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  6568 0000497F 8B04AD[4CF00400]                        mov     eax, [(mp3_synth_win+100h)+ebp*4]
  6569 00004986 F7EA                                    imul    edx
  6570 00004988 01D3                                    add     ebx, edx        ; add sum,edx
  6571 0000498A 8B14B5[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  6572 00004991 8B04AD[4CF10400]                        mov     eax, [(mp3_synth_win+200h)+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4]
  6573 00004998 F7EA                                    imul    edx             ; 64bit = 32bit * 32bit
  6574 0000499A 01D3                                    add     ebx, edx
  6575 0000499C 8B14B5[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  6576 000049A3 8B04AD[4CF20400]                        mov     eax, [(mp3_synth_win+300h)+ebp*4]
  6577 000049AA F7EA                                    imul    edx
  6578 000049AC 01D3                                    add     ebx, edx
  6579 000049AE 8B14B5[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  6580 000049B5 8B04AD[4CF30400]                        mov     eax, [(mp3_synth_win+400h)+ebp*4]
  6581 000049BC F7EA                                    imul    edx
  6582 000049BE 01D3                                    add     ebx, edx
  6583 000049C0 8B14B5[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  6584 000049C7 8B04AD[4CF40400]                        mov     eax, [(mp3_synth_win+500h)+ebp*4]
  6585 000049CE F7EA                                    imul    edx
  6586 000049D0 01D3                                    add     ebx, edx
  6587 000049D2 8B14B5[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  6588 000049D9 8B04AD[4CF50400]                        mov     eax, [(mp3_synth_win+600h)+ebp*4]
  6589 000049E0 F7EA                                    imul    edx
  6590 000049E2 01D3                                    add     ebx, edx
  6591 000049E4 8B14B5[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  6592 000049EB 8B04AD[4CF60400]                        mov     eax, [(mp3_synth_win+700h)+ebp*4]
  6593 000049F2 F7EA                                    imul    edx
  6594 000049F4 01D3                                    add     ebx, edx
  6595                                  
  6596                                  .skippp:                               ; @@SUM8 macro sum,win,ww,syn
  6597 000049F6 8B14BD[949D0000]                        mov     edx, [mp3_synth_buf+edi*4] ; @@SUM8 @@sum,@@win1,32,@@syn2
  6598                                                                          ; [mp3_synth_buf+syn*4+(nn*64*4)]
  6599 000049FD 8B04AD[CCEF0400]                        mov     eax, [(mp3_synth_win+80h)+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4]
  6600 00004A04 F7EA                                    imul    edx
  6601 00004A06 01D3                                    add     ebx, edx
  6602 00004A08 8B14BD[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  6603 00004A0F 8B04AD[CCF00400]                        mov     eax, [(mp3_synth_win+180h)+ebp*4]
  6604 00004A16 F7EA                                    imul    edx
  6605 00004A18 01D3                                    add     ebx, edx
  6606 00004A1A 8B14BD[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  6607 00004A21 8B04AD[CCF10400]                        mov     eax, [(mp3_synth_win+280h)+ebp*4]
  6608 00004A28 F7EA                                    imul    edx
  6609 00004A2A 01D3                                    add     ebx, edx
  6610 00004A2C 8B14BD[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  6611 00004A33 8B04AD[CCF20400]                        mov     eax, [(mp3_synth_win+380h)+ebp*4]
  6612 00004A3A F7EA                                    imul    edx
  6613 00004A3C 01D3                                    add     ebx, edx
  6614 00004A3E 8B14BD[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  6615 00004A45 8B04AD[CCF30400]                        mov     eax, [(mp3_synth_win+480h)+ebp*4]
  6616 00004A4C F7EA                                    imul    edx
  6617 00004A4E 01D3                                    add     ebx, edx
  6618 00004A50 8B14BD[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  6619 00004A57 8B04AD[CCF40400]                        mov     eax, [(mp3_synth_win+580h)+ebp*4]
  6620 00004A5E F7EA                                    imul    edx
  6621 00004A60 01D3                                    add     ebx, edx
  6622 00004A62 8B14BD[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  6623 00004A69 8B04AD[CCF50400]                        mov     eax, [(mp3_synth_win+680h)+ebp*4]
  6624 00004A70 F7EA                                    imul    edx
  6625 00004A72 01D3                                    add     ebx, edx
  6626 00004A74 8B14BD[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  6627 00004A7B 8B04AD[CCF60400]                        mov     eax, [(mp3_synth_win+780h)+ebp*4]
  6628 00004A82 F7EA                                    imul    edx
  6629 00004A84 01D3                                    add     ebx, edx
  6630 00004A86 81FB00002000                            cmp     ebx, 200000h    ; cmp @@sum,10000h SHL (@@out_shift)
  6631 00004A8C 7322                                    jnb     short .sat
  6632 00004A8E C1FB05                                  sar     ebx, 5          ; sar @@sum,(@@out_shift)
  6633 00004A91 81EB00800000                            sub     ebx, 8000h      ; make 16bit signed
  6634                                  
  6635                                  .sat_back:
  6636 00004A97 668919                                  mov     [ecx], bx
  6637 00004A9A 030D[38F40000]                          add     ecx, [mp3_samples_dst_step]
  6638 00004AA0 46                                      inc     esi             ; inc @@syn1
  6639 00004AA1 4F                                      dec     edi             ; dec @@syn2
  6640 00004AA2 45                                      inc     ebp             ; inc @@win1
  6641 00004AA3 F7C51F000000                            test    ebp, 1Fh        ; test @@win1,1Fh
  6642 00004AA9 0F85B2FEFFFF                            jnz     .samples_lop
  6643 00004AAF C3                                      retn
  6644                                  
  6645                                  .sat:
  6646 00004AB0 C1FB1F                                  sar     ebx, 31         ; FFFFFFFFh,00000000h
  6647 00004AB3 81F3FF7F0000                            xor     ebx, 7FFFh      ; FFFF8000h,00007FFFh (signed 16bit)
  6648 00004AB9 EBDC                                    jmp     short .sat_back
  6649                                  
  6650                                  .append_copy_to_window:
  6651 00004ABB 8D3485[949D0000]                        lea     esi, [mp3_synth_buf+eax*4]
  6652 00004AC2 8DBE00080000                            lea     edi, [esi+2048] ; [esi+512*4]
  6653 00004AC8 B912000000                              mov     ecx, 18         ; (12h*4)/4
  6654 00004ACD F3A5                                    rep movsd
  6655 00004ACF E96CFEFFFF                              jmp     .append_copy_to_window_back
  6656                                  
  6657                                  
  6658                                  ; =============== S U B R O U T I N E =======================================
  6659                                  
  6660                                  
  6661                                  synth_16bit_shift_1_slow:
  6662 00004AD4 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 0,1,0
  6663 00004ADB 740E                                    jz      short .no_rdtsc_supported
  6664 00004ADD 0F31                                    rdtsc
  6665 00004ADF 2905[68770000]                          sub     [rdtsc_synth_dct], eax
  6666 00004AE5 1915[6C770000]                          sbb     [rdtsc_synth_dct+4], edx
  6667                                  
  6668                                  .no_rdtsc_supported:
  6669 00004AEB BE[9CBD0000]                            mov	esi, mp3_sb_samples
  6670 00004AF0 8B3D[30F40000]                          mov	edi, [mp3_samples_dst]
  6671 00004AF6 C705[3CF40000]0000-                     mov	dword [mp3_curr_channel], 0
  6671 00004AFE 0000               
  6672                                  
  6673                                  .synth_channel_lop:
  6674 00004B00 56                                      push	esi
  6675 00004B01 57                                      push	edi
  6676 00004B02 893D[7C9D0000]                          mov	[mp3_curr_syn_dst], edi
  6677 00004B08 C705[44F40000]0000-                     mov	dword [mp3_curr_frame], 0
  6677 00004B10 0000               
  6678                                  
  6679                                  .synth_frame_lop:
  6680 00004B12 56                                      push    esi
  6681 00004B13 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6682 00004B1A 740E                                    jz      short .no_rdtsc_supported@
  6683 00004B1C 0F31                                    rdtsc
  6684 00004B1E 2905[80770000]                          sub     [rdtsc_dct32], eax
  6685 00004B24 1915[84770000]                          sbb     [rdtsc_dct32+4], edx
  6686                                  
  6687                                  .no_rdtsc_supported@:
  6688 00004B2A 8B15[3CF40000]                          mov     edx, [mp3_curr_channel]
  6689 00004B30 8B0495[94BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  6690 00004B37 832C95[94BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  6691 00004B3F C1E20A                                  shl     edx, 10         ; channel*1024
  6692 00004B42 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh ; index(0..511), align 32
  6693 00004B47 09D0                                    or      eax, edx
  6694 00004B49 A3[789D0000]                            mov     [mp3_curr_syn_index], eax
  6695 00004B4E 8B3D[789D0000]                          mov     edi, [mp3_curr_syn_index]
  6696 00004B54 8D3CBD[949D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  6697 00004B5B E858E3FFFF                              call    mp3_dct32_shift_1 ; call mp3_dct32_shift_&rate_shift
  6698 00004B60 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6699 00004B67 740E                                    jz      short .no_rdtsc_supported@@
  6700 00004B69 0F31                                    rdtsc
  6701 00004B6B 0105[80770000]                          add     [rdtsc_dct32], eax
  6702 00004B71 1115[84770000]                          adc     [rdtsc_dct32+4], edx
  6703                                  
  6704                                  .no_rdtsc_supported@@:
  6705 00004B77 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6706 00004B7E 740E                                    jz      short .no_rdtsc_supported@@@
  6707 00004B80 0F31                                    rdtsc
  6708 00004B82 2905[98770000]                          sub     [rdtsc_synth], eax
  6709 00004B88 1915[9C770000]                          sbb     [rdtsc_synth+4], edx
  6710                                  
  6711                                  .no_rdtsc_supported@@@:
  6712 00004B8E E888000000                              call    mp3_synth_filter_this_16bit_shift_1_slow ;
  6713                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  6714 00004B93 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6715 00004B9A 740E                                    jz      short .no_rdtsc_supported@@@@
  6716 00004B9C 0F31                                    rdtsc
  6717 00004B9E 0105[98770000]                          add     [rdtsc_synth], eax
  6718 00004BA4 1115[9C770000]                          adc     [rdtsc_synth+4], edx
  6719                                  
  6720                                  .no_rdtsc_supported@@@@:
  6721 00004BAA 5E                                      pop     esi
  6722 00004BAB A1[38F40000]                            mov     eax, [mp3_samples_dst_step]
  6723 00004BB0 C1E005                                  shl     eax, 5
  6724 00004BB3 8A0D[EE750000]                          mov     cl, [option_rate_shift] ; IF with_rate_shift
  6725 00004BB9 D3E8                                    shr     eax, cl
  6726 00004BBB 0105[7C9D0000]                          add     [mp3_curr_syn_dst], eax
  6727 00004BC1 81C680000000                            add     esi, 128        ; SBLIMIT*4  ; src+32*4
  6728 00004BC7 FF05[44F40000]                          inc	dword [mp3_curr_frame]
  6729 00004BCD A1[44F40000]                            mov     eax, [mp3_curr_frame]
  6730 00004BD2 3B05[809D0000]                          cmp     eax, [mp3_nb_frames]
  6731 00004BD8 0F8234FFFFFF                            jb      .synth_frame_lop
  6732 00004BDE 5F                                      pop     edi
  6733 00004BDF 5E                                      pop     esi
  6734 00004BE0 033D[749D0000]                          add     edi, [mp3_bytes_per_sample]
  6735 00004BE6 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4 ; src
  6736 00004BEC FF05[3CF40000]                          inc	dword [mp3_curr_channel]
  6737 00004BF2 A1[3CF40000]                            mov     eax, [mp3_curr_channel]
  6738 00004BF7 3B05[6C9D0000]                          cmp     eax, [mp3_output_num_channels]
  6739 00004BFD 0F82FDFEFFFF                            jb      .synth_channel_lop
  6740 00004C03 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6741 00004C0A 740E                                    jz      short .no_rdtsc_supported@@@@@
  6742 00004C0C 0F31                                    rdtsc
  6743 00004C0E 0105[68770000]                          add     [rdtsc_synth_dct], eax
  6744 00004C14 1115[6C770000]                          adc     [rdtsc_synth_dct+4], edx
  6745                                  
  6746                                  .no_rdtsc_supported@@@@@:
  6747 00004C1A C3                                      retn
  6748                                  
  6749                                  
  6750                                  ; =============== S U B R O U T I N E =======================================
  6751                                  
  6752                                  
  6753                                  mp3_synth_filter_this_16bit_shift_1_slow:
  6754 00004C1B A1[789D0000]                            mov     eax, [mp3_curr_syn_index]
  6755 00004C20 A9E0010000                              test    eax, 1E0h
  6756 00004C25 0F8482010000                            jz      .append_copy_to_window
  6757 00004C2B 90                                      nop
  6758                                  
  6759                                  .append_copy_to_window_back:
  6760 00004C2C 89C5                                    mov     ebp, eax
  6761 00004C2E 81E5C0010000                            and     ebp, 1C0h
  6762 00004C34 2520040000                              and     eax, 420h
  6763 00004C39 8D7010                                  lea     esi, [eax+10h]
  6764 00004C3C 8D7830                                  lea     edi, [eax+30h]
  6765 00004C3F F7DD                                    neg     ebp
  6766 00004C41 81E5C0010000                            and     ebp, 1C0h
  6767 00004C47 8B0D[7C9D0000]                          mov     ecx, [mp3_curr_syn_dst]
  6768                                  
  6769                                  .samples_lop:
  6770 00004C4D BB10001000                              mov     ebx, 100010h
  6771 00004C52 8B14B5[949D0000]                        mov     edx, [mp3_synth_buf+esi*4]
  6772 00004C59 8B04AD[4CEF0400]                        mov     eax, [mp3_synth_win+ebp*4]
  6773 00004C60 F7EA                                    imul    edx
  6774 00004C62 01D3                                    add     ebx, edx
  6775 00004C64 8B14B5[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  6776 00004C6B 8B04AD[4CF00400]                        mov     eax, [(mp3_synth_win+100h)+ebp*4]
  6777 00004C72 F7EA                                    imul    edx
  6778 00004C74 01D3                                    add     ebx, edx
  6779 00004C76 8B14B5[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  6780 00004C7D 8B04AD[4CF10400]                        mov     eax, [(mp3_synth_win+200h)+ebp*4]
  6781 00004C84 F7EA                                    imul    edx
  6782 00004C86 01D3                                    add     ebx, edx
  6783 00004C88 8B14B5[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  6784 00004C8F 8B04AD[4CF20400]                        mov     eax, [(mp3_synth_win+300h)+ebp*4]
  6785 00004C96 F7EA                                    imul    edx
  6786 00004C98 01D3                                    add     ebx, edx
  6787 00004C9A 8B14B5[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  6788 00004CA1 8B04AD[4CF30400]                        mov     eax, [(mp3_synth_win+400h)+ebp*4]
  6789 00004CA8 F7EA                                    imul    edx
  6790 00004CAA 01D3                                    add     ebx, edx
  6791 00004CAC 8B14B5[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  6792 00004CB3 8B04AD[4CF40400]                        mov     eax, [(mp3_synth_win+500h)+ebp*4]
  6793 00004CBA F7EA                                    imul    edx
  6794 00004CBC 01D3                                    add     ebx, edx
  6795 00004CBE 8B14B5[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  6796 00004CC5 8B04AD[4CF50400]                        mov     eax, [(mp3_synth_win+600h)+ebp*4]
  6797 00004CCC F7EA                                    imul    edx
  6798 00004CCE 01D3                                    add     ebx, edx
  6799 00004CD0 8B14B5[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  6800 00004CD7 8B04AD[4CF60400]                        mov     eax, [(mp3_synth_win+700h)+ebp*4]
  6801 00004CDE F7EA                                    imul    edx
  6802 00004CE0 01D3                                    add     ebx, edx
  6803 00004CE2 8B14BD[949D0000]                        mov     edx, [mp3_synth_buf+edi*4]
  6804 00004CE9 8B04AD[CCEF0400]                        mov     eax, [(mp3_synth_win+80h)+ebp*4]
  6805 00004CF0 F7EA                                    imul    edx
  6806 00004CF2 01D3                                    add     ebx, edx
  6807 00004CF4 8B14BD[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  6808 00004CFB 8B04AD[CCF00400]                        mov     eax, [(mp3_synth_win+180h)+ebp*4]
  6809 00004D02 F7EA                                    imul    edx
  6810 00004D04 01D3                                    add     ebx, edx
  6811 00004D06 8B14BD[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  6812 00004D0D 8B04AD[CCF10400]                        mov     eax, [(mp3_synth_win+280h)+ebp*4]
  6813 00004D14 F7EA                                    imul    edx
  6814 00004D16 01D3                                    add     ebx, edx
  6815 00004D18 8B14BD[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  6816 00004D1F 8B04AD[CCF20400]                        mov     eax, [(mp3_synth_win+380h)+ebp*4]
  6817 00004D26 F7EA                                    imul    edx
  6818 00004D28 01D3                                    add     ebx, edx
  6819 00004D2A 8B14BD[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  6820 00004D31 8B04AD[CCF30400]                        mov     eax, [(mp3_synth_win+480h)+ebp*4]
  6821 00004D38 F7EA                                    imul    edx
  6822 00004D3A 01D3                                    add     ebx, edx
  6823 00004D3C 8B14BD[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  6824 00004D43 8B04AD[CCF40400]                        mov     eax, [(mp3_synth_win+580h)+ebp*4]
  6825 00004D4A F7EA                                    imul    edx
  6826 00004D4C 01D3                                    add     ebx, edx
  6827 00004D4E 8B14BD[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  6828 00004D55 8B04AD[CCF50400]                        mov     eax, [(mp3_synth_win+680h)+ebp*4]
  6829 00004D5C F7EA                                    imul    edx
  6830 00004D5E 01D3                                    add     ebx, edx
  6831 00004D60 8B14BD[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  6832 00004D67 8B04AD[CCF60400]                        mov     eax, [(mp3_synth_win+780h)+ebp*4]
  6833 00004D6E F7EA                                    imul    edx
  6834 00004D70 01D3                                    add     ebx, edx
  6835 00004D72 81FB00002000                            cmp     ebx, 200000h
  6836 00004D78 7328                                    jnb     short .sat
  6837 00004D7A C1FB05                                  sar     ebx, 5
  6838 00004D7D 81EB00800000                            sub     ebx, 8000h
  6839                                  
  6840                                  .sat_back:
  6841 00004D83 668919                                  mov     [ecx], bx
  6842 00004D86 030D[38F40000]                          add     ecx, [mp3_samples_dst_step]
  6843 00004D8C 83C602                                  add     esi, 2
  6844 00004D8F 83EF02                                  sub     edi, 2
  6845 00004D92 83C502                                  add     ebp, 2
  6846 00004D95 F7C51F000000                            test    ebp, 1Fh
  6847 00004D9B 0F85ACFEFFFF                            jnz     .samples_lop
  6848 00004DA1 C3                                      retn
  6849                                  
  6850                                  .sat:
  6851 00004DA2 C1FB1F                                  sar     ebx, 31
  6852 00004DA5 81F3FF7F0000                            xor     ebx, 7FFFh
  6853 00004DAB EBD6                                    jmp     short .sat_back
  6854                                  
  6855                                  .append_copy_to_window:
  6856 00004DAD 8D3485[949D0000]                        lea     esi, [mp3_synth_buf+eax*4]
  6857 00004DB4 8DBE00080000                            lea     edi, [esi+2048]
  6858 00004DBA B912000000                              mov     ecx, 18
  6859 00004DBF F3A5                                    rep movsd
  6860 00004DC1 E966FEFFFF                              jmp     .append_copy_to_window_back
  6861                                  
  6862                                  
  6863                                  ; =============== S U B R O U T I N E =======================================
  6864                                  
  6865                                  
  6866                                  synth_16bit_shift_2_slow:
  6867 00004DC6 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 0,2,0
  6868 00004DCD 740E                                    jz      short .no_rdtsc_supported
  6869 00004DCF 0F31                                    rdtsc
  6870 00004DD1 2905[68770000]                          sub     [rdtsc_synth_dct], eax
  6871 00004DD7 1915[6C770000]                          sbb     [rdtsc_synth_dct+4], edx
  6872                                  
  6873                                  .no_rdtsc_supported:
  6874 00004DDD BE[9CBD0000]                            mov	esi, mp3_sb_samples
  6875 00004DE2 8B3D[30F40000]                          mov	edi, [mp3_samples_dst]
  6876 00004DE8 C705[3CF40000]0000-                     mov	dword [mp3_curr_channel], 0
  6876 00004DF0 0000               
  6877                                  
  6878                                  .synth_channel_lop:
  6879 00004DF2 56                                      push	esi
  6880 00004DF3 57                                      push	edi
  6881 00004DF4 893D[7C9D0000]                          mov	[mp3_curr_syn_dst], edi
  6882 00004DFA C705[44F40000]0000-                     mov	dword [mp3_curr_frame], 0
  6882 00004E02 0000               
  6883                                  
  6884                                  .synth_frame_lop:
  6885 00004E04 56                                      push    esi
  6886 00004E05 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6887 00004E0C 740E                                    jz      short .no_rdtsc_supported@
  6888 00004E0E 0F31                                    rdtsc
  6889 00004E10 2905[80770000]                          sub     [rdtsc_dct32], eax
  6890 00004E16 1915[84770000]                          sbb     [rdtsc_dct32+4], edx
  6891                                  
  6892                                  .no_rdtsc_supported@:
  6893 00004E1C 8B15[3CF40000]                          mov     edx, [mp3_curr_channel]
  6894 00004E22 8B0495[94BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  6895 00004E29 832C95[94BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  6896 00004E31 C1E20A                                  shl     edx, 10
  6897 00004E34 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  6898 00004E39 09D0                                    or      eax, edx
  6899 00004E3B A3[789D0000]                            mov     [mp3_curr_syn_index], eax
  6900 00004E40 8B3D[789D0000]                          mov     edi, [mp3_curr_syn_index]
  6901 00004E46 8D3CBD[949D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  6902 00004E4D E856E4FFFF                              call    mp3_dct32_shift_2 ; call mp3_dct32_shift_&rate_shift
  6903 00004E52 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6904 00004E59 740E                                    jz      short .no_rdtsc_supported@@
  6905 00004E5B 0F31                                    rdtsc
  6906 00004E5D 0105[80770000]                          add     [rdtsc_dct32], eax
  6907 00004E63 1115[84770000]                          adc     [rdtsc_dct32+4], edx
  6908                                  
  6909                                  .no_rdtsc_supported@@:
  6910 00004E69 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6911 00004E70 740E                                    jz      short .no_rdtsc_supported@@@
  6912 00004E72 0F31                                    rdtsc
  6913 00004E74 2905[98770000]                          sub     [rdtsc_synth], eax
  6914 00004E7A 1915[9C770000]                          sbb     [rdtsc_synth+4], edx
  6915                                  
  6916                                  .no_rdtsc_supported@@@:
  6917 00004E80 E888000000                              call    mp3_synth_filter_this_16bit_shift_2_slow ;
  6918                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  6919 00004E85 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6920 00004E8C 740E                                    jz      short .no_rdtsc_supported@@@@
  6921 00004E8E 0F31                                    rdtsc
  6922 00004E90 0105[98770000]                          add     [rdtsc_synth], eax
  6923 00004E96 1115[9C770000]                          adc     [rdtsc_synth+4], edx
  6924                                  
  6925                                  .no_rdtsc_supported@@@@:
  6926 00004E9C 5E                                      pop     esi
  6927 00004E9D A1[38F40000]                            mov     eax, [mp3_samples_dst_step]
  6928 00004EA2 C1E005                                  shl     eax, 5
  6929 00004EA5 8A0D[EE750000]                          mov     cl, [option_rate_shift]
  6930 00004EAB D3E8                                    shr     eax, cl
  6931 00004EAD 0105[7C9D0000]                          add     [mp3_curr_syn_dst], eax
  6932 00004EB3 81C680000000                            add     esi, 128        ; SBLIMIT*4
  6933 00004EB9 FF05[44F40000]                          inc     dword [mp3_curr_frame]
  6934 00004EBF A1[44F40000]                            mov     eax, [mp3_curr_frame]
  6935 00004EC4 3B05[809D0000]                          cmp     eax, [mp3_nb_frames]
  6936 00004ECA 0F8234FFFFFF                            jb      .synth_frame_lop
  6937 00004ED0 5F                                      pop     edi
  6938 00004ED1 5E                                      pop     esi
  6939 00004ED2 033D[749D0000]                          add     edi, [mp3_bytes_per_sample]
  6940 00004ED8 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  6941 00004EDE FF05[3CF40000]                          inc     dword [mp3_curr_channel]
  6942 00004EE4 A1[3CF40000]                            mov     eax, [mp3_curr_channel]
  6943 00004EE9 3B05[6C9D0000]                          cmp     eax, [mp3_output_num_channels]
  6944 00004EEF 0F82FDFEFFFF                            jb      .synth_channel_lop
  6945 00004EF5 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  6946 00004EFC 740E                                    jz      short .no_rdtsc_supported@@@@@
  6947 00004EFE 0F31                                    rdtsc
  6948 00004F00 0105[68770000]                          add     [rdtsc_synth_dct], eax
  6949 00004F06 1115[6C770000]                          adc     [rdtsc_synth_dct+4], edx
  6950                                  
  6951                                  .no_rdtsc_supported@@@@@:
  6952 00004F0C C3                                      retn
  6953                                  
  6954                                  
  6955                                  ; =============== S U B R O U T I N E =======================================
  6956                                  
  6957                                  
  6958                                  mp3_synth_filter_this_16bit_shift_2_slow:
  6959 00004F0D A1[789D0000]                            mov     eax, [mp3_curr_syn_index]
  6960 00004F12 A9E0010000                              test    eax, 1E0h
  6961 00004F17 0F8482010000                            jz      .append_copy_to_window
  6962 00004F1D 90                                      nop
  6963                                  
  6964                                  .append_copy_to_window_back:
  6965 00004F1E 89C5                                    mov     ebp, eax
  6966 00004F20 81E5C0010000                            and     ebp, 1C0h
  6967 00004F26 2520040000                              and     eax, 420h
  6968 00004F2B 8D7010                                  lea     esi, [eax+10h]
  6969 00004F2E 8D7830                                  lea     edi, [eax+30h]
  6970 00004F31 F7DD                                    neg     ebp
  6971 00004F33 81E5C0010000                            and     ebp, 1C0h
  6972 00004F39 8B0D[7C9D0000]                          mov     ecx, [mp3_curr_syn_dst]
  6973                                  
  6974                                  .samples_lop:
  6975 00004F3F BB10001000                              mov     ebx, 100010h
  6976 00004F44 8B14B5[949D0000]                        mov     edx, [mp3_synth_buf+esi*4]
  6977 00004F4B 8B04AD[4CEF0400]                        mov     eax, [mp3_synth_win+ebp*4]
  6978 00004F52 F7EA                                    imul    edx
  6979 00004F54 01D3                                    add     ebx, edx
  6980 00004F56 8B14B5[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  6981 00004F5D 8B04AD[4CF00400]                        mov     eax, [(mp3_synth_win+100h)+ebp*4]
  6982 00004F64 F7EA                                    imul    edx
  6983 00004F66 01D3                                    add     ebx, edx
  6984 00004F68 8B14B5[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  6985 00004F6F 8B04AD[4CF10400]                        mov     eax, [(mp3_synth_win+200h)+ebp*4]
  6986 00004F76 F7EA                                    imul    edx
  6987 00004F78 01D3                                    add     ebx, edx
  6988 00004F7A 8B14B5[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  6989 00004F81 8B04AD[4CF20400]                        mov     eax, [(mp3_synth_win+300h)+ebp*4]
  6990 00004F88 F7EA                                    imul    edx
  6991 00004F8A 01D3                                    add     ebx, edx
  6992 00004F8C 8B14B5[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  6993 00004F93 8B04AD[4CF30400]                        mov     eax, [(mp3_synth_win+400h)+ebp*4]
  6994 00004F9A F7EA                                    imul    edx
  6995 00004F9C 01D3                                    add     ebx, edx
  6996 00004F9E 8B14B5[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  6997 00004FA5 8B04AD[4CF40400]                        mov     eax, [(mp3_synth_win+500h)+ebp*4]
  6998 00004FAC F7EA                                    imul    edx
  6999 00004FAE 01D3                                    add     ebx, edx
  7000 00004FB0 8B14B5[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  7001 00004FB7 8B04AD[4CF50400]                        mov     eax, [(mp3_synth_win+600h)+ebp*4]
  7002 00004FBE F7EA                                    imul    edx
  7003 00004FC0 01D3                                    add     ebx, edx
  7004 00004FC2 8B14B5[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  7005 00004FC9 8B04AD[4CF60400]                        mov     eax, [(mp3_synth_win+700h)+ebp*4]
  7006 00004FD0 F7EA                                    imul    edx
  7007 00004FD2 01D3                                    add     ebx, edx
  7008 00004FD4 8B14BD[949D0000]                        mov     edx, [mp3_synth_buf+edi*4]
  7009 00004FDB 8B04AD[CCEF0400]                        mov     eax, [(mp3_synth_win+80h)+ebp*4]
  7010 00004FE2 F7EA                                    imul    edx
  7011 00004FE4 01D3                                    add     ebx, edx
  7012 00004FE6 8B14BD[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  7013 00004FED 8B04AD[CCF00400]                        mov     eax, [(mp3_synth_win+180h)+ebp*4]
  7014 00004FF4 F7EA                                    imul    edx
  7015 00004FF6 01D3                                    add     ebx, edx
  7016 00004FF8 8B14BD[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  7017 00004FFF 8B04AD[CCF10400]                        mov     eax, [(mp3_synth_win+280h)+ebp*4]
  7018 00005006 F7EA                                    imul    edx
  7019 00005008 01D3                                    add     ebx, edx
  7020 0000500A 8B14BD[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  7021 00005011 8B04AD[CCF20400]                        mov     eax, [(mp3_synth_win+380h)+ebp*4]
  7022 00005018 F7EA                                    imul    edx
  7023 0000501A 01D3                                    add     ebx, edx
  7024 0000501C 8B14BD[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  7025 00005023 8B04AD[CCF30400]                        mov     eax, [(mp3_synth_win+480h)+ebp*4]
  7026 0000502A F7EA                                    imul    edx
  7027 0000502C 01D3                                    add     ebx, edx
  7028 0000502E 8B14BD[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  7029 00005035 8B04AD[CCF40400]                        mov     eax, [(mp3_synth_win+580h)+ebp*4]
  7030 0000503C F7EA                                    imul    edx
  7031 0000503E 01D3                                    add     ebx, edx
  7032 00005040 8B14BD[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  7033 00005047 8B04AD[CCF50400]                        mov     eax, [(mp3_synth_win+680h)+ebp*4]
  7034 0000504E F7EA                                    imul    edx
  7035 00005050 01D3                                    add     ebx, edx
  7036 00005052 8B14BD[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  7037 00005059 8B04AD[CCF60400]                        mov     eax, [(mp3_synth_win+780h)+ebp*4]
  7038 00005060 F7EA                                    imul    edx
  7039 00005062 01D3                                    add     ebx, edx
  7040 00005064 81FB00002000                            cmp     ebx, 200000h
  7041 0000506A 7328                                    jnb     short .sat
  7042 0000506C C1FB05                                  sar     ebx, 5
  7043 0000506F 81EB00800000                            sub     ebx, 8000h
  7044                                  
  7045                                  .sat_back:
  7046 00005075 668919                                  mov     [ecx], bx
  7047 00005078 030D[38F40000]                          add     ecx, [mp3_samples_dst_step]
  7048 0000507E 83C604                                  add     esi, 4
  7049 00005081 83EF04                                  sub     edi, 4
  7050 00005084 83C504                                  add     ebp, 4
  7051 00005087 F7C51F000000                            test    ebp, 1Fh
  7052 0000508D 0F85ACFEFFFF                            jnz     .samples_lop
  7053 00005093 C3                                      retn
  7054                                  
  7055                                  .sat:
  7056 00005094 C1FB1F                                  sar     ebx, 31
  7057 00005097 81F3FF7F0000                            xor     ebx, 7FFFh
  7058 0000509D EBD6                                    jmp     short .sat_back
  7059                                  
  7060                                  .append_copy_to_window:
  7061 0000509F 8D3485[949D0000]                        lea     esi, [mp3_synth_buf+eax*4]
  7062 000050A6 8DBE00080000                            lea     edi, [esi+2048]
  7063 000050AC B912000000                              mov     ecx, 18
  7064 000050B1 F3A5                                    rep movsd
  7065 000050B3 E966FEFFFF                              jmp     .append_copy_to_window_back
  7066                                  
  7067                                  
  7068                                  ; =============== S U B R O U T I N E =======================================
  7069                                  
  7070                                  
  7071                                  synth_8bit_shift_0_slow:
  7072 000050B8 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 1,0,0
  7073 000050BF 740E                                    jz      short .no_rdtsc_supported
  7074 000050C1 0F31                                    rdtsc
  7075 000050C3 2905[68770000]                          sub     [rdtsc_synth_dct], eax
  7076 000050C9 1915[6C770000]                          sbb     [rdtsc_synth_dct+4], edx
  7077                                  
  7078                                  .no_rdtsc_supported:
  7079 000050CF BE[9CBD0000]                            mov	esi, mp3_sb_samples
  7080 000050D4 8B3D[30F40000]                          mov	edi, [mp3_samples_dst]
  7081 000050DA C705[3CF40000]0000-                     mov	dword [mp3_curr_channel], 0
  7081 000050E2 0000               
  7082                                  
  7083                                  .synth_channel_lop:
  7084 000050E4 56                                      push	esi
  7085 000050E5 57                                      push	edi
  7086 000050E6 893D[7C9D0000]                          mov	[mp3_curr_syn_dst], edi
  7087 000050EC C705[44F40000]0000-                     mov	dword [mp3_curr_frame], 0
  7087 000050F4 0000               
  7088                                  
  7089                                  .synth_frame_lop:
  7090 000050F6 56                                      push    esi
  7091 000050F7 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  7092 000050FE 740E                                    jz      short .no_rdtsc_supported@
  7093 00005100 0F31                                    rdtsc
  7094 00005102 2905[80770000]                          sub     [rdtsc_dct32], eax
  7095 00005108 1915[84770000]                          sbb     [rdtsc_dct32+4], edx
  7096                                  
  7097                                  .no_rdtsc_supported@:
  7098 0000510E 8B15[3CF40000]                          mov     edx, [mp3_curr_channel]
  7099 00005114 8B0495[94BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  7100 0000511B 832C95[94BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  7101 00005123 C1E20A                                  shl     edx, 10
  7102 00005126 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  7103 0000512B 09D0                                    or      eax, edx
  7104 0000512D A3[789D0000]                            mov     [mp3_curr_syn_index], eax
  7105 00005132 8B3D[789D0000]                          mov     edi, [mp3_curr_syn_index]
  7106 00005138 8D3CBD[949D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  7107 0000513F E894D4FFFF                              call    mp3_dct32_shift_0
  7108 00005144 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  7109 0000514B 740E                                    jz      short .no_rdtsc_supported@@
  7110 0000514D 0F31                                    rdtsc
  7111 0000514F 0105[80770000]                          add     [rdtsc_dct32], eax
  7112 00005155 1115[84770000]                          adc     [rdtsc_dct32+4], edx
  7113                                  
  7114                                  .no_rdtsc_supported@@:
  7115 0000515B F605[F0750000]10                        test    byte [cpuid_flags], 10h
  7116 00005162 740E                                    jz      short .no_rdtsc_supported@@@
  7117 00005164 0F31                                    rdtsc
  7118 00005166 2905[98770000]                          sub     [rdtsc_synth], eax
  7119 0000516C 1915[9C770000]                          sbb     [rdtsc_synth+4], edx
  7120                                  
  7121                                  .no_rdtsc_supported@@@:
  7122 00005172 E888000000                              call    mp3_synth_filter_this_8bit_shift_0_slow ;
  7123                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  7124 00005177 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  7125 0000517E 740E                                    jz      short .no_rdtsc_supported@@@@
  7126 00005180 0F31                                    rdtsc
  7127 00005182 0105[98770000]                          add     [rdtsc_synth], eax
  7128 00005188 1115[9C770000]                          adc     [rdtsc_synth+4], edx
  7129                                  
  7130                                  .no_rdtsc_supported@@@@:
  7131 0000518E 5E                                      pop     esi
  7132 0000518F A1[38F40000]                            mov     eax, [mp3_samples_dst_step]
  7133 00005194 C1E005                                  shl     eax, 5
  7134 00005197 8A0D[EE750000]                          mov     cl, [option_rate_shift]
  7135 0000519D D3E8                                    shr     eax, cl
  7136 0000519F 0105[7C9D0000]                          add     [mp3_curr_syn_dst], eax
  7137 000051A5 81C680000000                            add     esi, 128        ; SBLIMIT*4
  7138 000051AB FF05[44F40000]                          inc     dword [mp3_curr_frame]
  7139 000051B1 A1[44F40000]                            mov     eax, [mp3_curr_frame]
  7140 000051B6 3B05[809D0000]                          cmp     eax, [mp3_nb_frames]
  7141 000051BC 0F8234FFFFFF                            jb      .synth_frame_lop
  7142 000051C2 5F                                      pop     edi
  7143 000051C3 5E                                      pop     esi
  7144 000051C4 033D[749D0000]                          add     edi, [mp3_bytes_per_sample]
  7145 000051CA 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  7146 000051D0 FF05[3CF40000]                          inc     dword [mp3_curr_channel]
  7147 000051D6 A1[3CF40000]                            mov     eax, [mp3_curr_channel]
  7148 000051DB 3B05[6C9D0000]                          cmp     eax, [mp3_output_num_channels]
  7149 000051E1 0F82FDFEFFFF                            jb      .synth_channel_lop
  7150 000051E7 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  7151 000051EE 740E                                    jz      short .no_rdtsc_supported@@@@@
  7152 000051F0 0F31                                    rdtsc
  7153 000051F2 0105[68770000]                          add     [rdtsc_synth_dct], eax
  7154 000051F8 1115[6C770000]                          adc     [rdtsc_synth_dct+4], edx
  7155                                  
  7156                                  .no_rdtsc_supported@@@@@:
  7157 000051FE C3                                      retn
  7158                                  
  7159                                  
  7160                                  ; =============== S U B R O U T I N E =======================================
  7161                                  
  7162                                  
  7163                                  mp3_synth_filter_this_8bit_shift_0_slow:
  7164 000051FF A1[789D0000]                            mov     eax, [mp3_curr_syn_index]
  7165 00005204 A9E0010000                              test    eax, 1E0h
  7166 00005209 0F8471010000                            jz      .append_copy_to_window
  7167 0000520F 90                                      nop
  7168                                  
  7169                                  .append_copy_to_window_back:
  7170 00005210 89C5                                    mov     ebp, eax
  7171 00005212 81E5C0010000                            and     ebp, 1C0h
  7172 00005218 2520040000                              and     eax, 420h
  7173 0000521D 8D7010                                  lea     esi, [eax+10h]
  7174 00005220 8D7830                                  lea     edi, [eax+30h]
  7175 00005223 F7DD                                    neg     ebp
  7176 00005225 81E5C0010000                            and     ebp, 1C0h
  7177 0000522B 8B0D[7C9D0000]                          mov     ecx, [mp3_curr_syn_dst]
  7178                                  
  7179                                  .samples_lop:
  7180 00005231 BB00101000                              mov     ebx, 101000h
  7181 00005236 8B14B5[949D0000]                        mov     edx, [mp3_synth_buf+esi*4]
  7182 0000523D 8B04AD[4CEF0400]                        mov     eax, [mp3_synth_win+ebp*4]
  7183 00005244 F7EA                                    imul    edx
  7184 00005246 01D3                                    add     ebx, edx
  7185 00005248 8B14B5[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  7186 0000524F 8B04AD[4CF00400]                        mov     eax, [(mp3_synth_win+100h)+ebp*4]
  7187 00005256 F7EA                                    imul    edx
  7188 00005258 01D3                                    add     ebx, edx
  7189 0000525A 8B14B5[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  7190 00005261 8B04AD[4CF10400]                        mov     eax, [(mp3_synth_win+200h)+ebp*4]
  7191 00005268 F7EA                                    imul    edx
  7192 0000526A 01D3                                    add     ebx, edx
  7193 0000526C 8B14B5[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  7194 00005273 8B04AD[4CF20400]                        mov     eax, [(mp3_synth_win+300h)+ebp*4]
  7195 0000527A F7EA                                    imul    edx
  7196 0000527C 01D3                                    add     ebx, edx
  7197 0000527E 8B14B5[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  7198 00005285 8B04AD[4CF30400]                        mov     eax, [(mp3_synth_win+400h)+ebp*4]
  7199 0000528C F7EA                                    imul    edx
  7200 0000528E 01D3                                    add     ebx, edx
  7201 00005290 8B14B5[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  7202 00005297 8B04AD[4CF40400]                        mov     eax, [(mp3_synth_win+500h)+ebp*4]
  7203 0000529E F7EA                                    imul    edx
  7204 000052A0 01D3                                    add     ebx, edx
  7205 000052A2 8B14B5[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  7206 000052A9 8B04AD[4CF50400]                        mov     eax, [(mp3_synth_win+600h)+ebp*4]
  7207 000052B0 F7EA                                    imul    edx
  7208 000052B2 01D3                                    add     ebx, edx
  7209 000052B4 8B14B5[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  7210 000052BB 8B04AD[4CF60400]                        mov     eax, [(mp3_synth_win+700h)+ebp*4]
  7211 000052C2 F7EA                                    imul    edx
  7212 000052C4 01D3                                    add     ebx, edx
  7213 000052C6 8B14BD[949D0000]                        mov     edx, [mp3_synth_buf+edi*4]
  7214 000052CD 8B04AD[CCEF0400]                        mov     eax, [(mp3_synth_win+80h)+ebp*4]
  7215 000052D4 F7EA                                    imul    edx
  7216 000052D6 01D3                                    add     ebx, edx
  7217 000052D8 8B14BD[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  7218 000052DF 8B04AD[CCF00400]                        mov     eax, [(mp3_synth_win+180h)+ebp*4]
  7219 000052E6 F7EA                                    imul    edx
  7220 000052E8 01D3                                    add     ebx, edx
  7221 000052EA 8B14BD[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  7222 000052F1 8B04AD[CCF10400]                        mov     eax, [(mp3_synth_win+280h)+ebp*4]
  7223 000052F8 F7EA                                    imul    edx
  7224 000052FA 01D3                                    add     ebx, edx
  7225 000052FC 8B14BD[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  7226 00005303 8B04AD[CCF20400]                        mov     eax, [(mp3_synth_win+380h)+ebp*4]
  7227 0000530A F7EA                                    imul    edx
  7228 0000530C 01D3                                    add     ebx, edx
  7229 0000530E 8B14BD[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  7230 00005315 8B04AD[CCF30400]                        mov     eax, [(mp3_synth_win+480h)+ebp*4]
  7231 0000531C F7EA                                    imul    edx
  7232 0000531E 01D3                                    add     ebx, edx
  7233 00005320 8B14BD[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  7234 00005327 8B04AD[CCF40400]                        mov     eax, [(mp3_synth_win+580h)+ebp*4]
  7235 0000532E F7EA                                    imul    edx
  7236 00005330 01D3                                    add     ebx, edx
  7237 00005332 8B14BD[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  7238 00005339 8B04AD[CCF50400]                        mov     eax, [(mp3_synth_win+680h)+ebp*4]
  7239 00005340 F7EA                                    imul    edx
  7240 00005342 01D3                                    add     ebx, edx
  7241 00005344 8B14BD[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  7242 0000534B 8B04AD[CCF60400]                        mov     eax, [(mp3_synth_win+780h)+ebp*4]
  7243 00005352 F7EA                                    imul    edx
  7244 00005354 01D3                                    add     ebx, edx
  7245 00005356 81FB00002000                            cmp     ebx, 200000h
  7246 0000535C 731B                                    jnb     short .sat
  7247 0000535E C1FB0D                                  sar     ebx, 13
  7248                                  
  7249                                  .sat_back:
  7250 00005361 8819                                    mov     [ecx], bl
  7251 00005363 030D[38F40000]                          add     ecx, [mp3_samples_dst_step]
  7252 00005369 46                                      inc     esi
  7253 0000536A 4F                                      dec     edi
  7254 0000536B 45                                      inc     ebp
  7255 0000536C F7C51F000000                            test    ebp, 1Fh
  7256 00005372 0F85B9FEFFFF                            jnz     .samples_lop
  7257 00005378 C3                                      retn
  7258                                  
  7259                                  .sat:
  7260 00005379 C1FB1F                                  sar     ebx, 31
  7261 0000537C F7D3                                    not     ebx
  7262 0000537E EBE1                                    jmp     short .sat_back
  7263                                  
  7264                                  .append_copy_to_window:
  7265 00005380 8D3485[949D0000]                        lea     esi, [mp3_synth_buf+eax*4]
  7266 00005387 8DBE00080000                            lea     edi, [esi+2048]
  7267 0000538D B912000000                              mov     ecx, 18
  7268 00005392 F3A5                                    rep movsd
  7269 00005394 E977FEFFFF                              jmp     .append_copy_to_window_back
  7270                                  
  7271                                  
  7272                                  ; =============== S U B R O U T I N E =======================================
  7273                                  
  7274                                  
  7275                                  synth_8bit_shift_1_slow:
  7276 00005399 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 1,1,0
  7277                                                                          ; force_8bit, rate_shift=1, force_fast=0
  7278 000053A0 740E                                    jz      short .no_rdtsc_supported
  7279 000053A2 0F31                                    rdtsc
  7280 000053A4 2905[68770000]                          sub     [rdtsc_synth_dct], eax
  7281 000053AA 1915[6C770000]                          sbb     [rdtsc_synth_dct+4], edx
  7282                                  
  7283                                  .no_rdtsc_supported:
  7284 000053B0 BE[9CBD0000]                            mov	esi, mp3_sb_samples
  7285 000053B5 8B3D[30F40000]                          mov	edi, [mp3_samples_dst]
  7286 000053BB C705[3CF40000]0000-                     mov	dword [mp3_curr_channel], 0
  7286 000053C3 0000               
  7287                                  
  7288                                  .synth_channel_lop:
  7289 000053C5 56                                      push	esi
  7290 000053C6 57                                      push	edi
  7291 000053C7 893D[7C9D0000]                          mov	[mp3_curr_syn_dst], edi
  7292 000053CD C705[44F40000]0000-                     mov	dword [mp3_curr_frame], 0
  7292 000053D5 0000               
  7293                                  
  7294                                  .synth_frame_lop:
  7295 000053D7 56                                      push    esi
  7296 000053D8 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  7297 000053DF 740E                                    jz      short .no_rdtsc_supported@
  7298 000053E1 0F31                                    rdtsc
  7299 000053E3 2905[80770000]                          sub     [rdtsc_dct32], eax
  7300 000053E9 1915[84770000]                          sbb     [rdtsc_dct32+4], edx
  7301                                  
  7302                                  .no_rdtsc_supported@:
  7303 000053EF 8B15[3CF40000]                          mov     edx, [mp3_curr_channel]
  7304 000053F5 8B0495[94BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  7305 000053FC 832C95[94BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  7306 00005404 C1E20A                                  shl     edx, 10
  7307 00005407 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  7308 0000540C 09D0                                    or      eax, edx
  7309 0000540E A3[789D0000]                            mov     [mp3_curr_syn_index], eax
  7310 00005413 8B3D[789D0000]                          mov     edi, [mp3_curr_syn_index]
  7311 00005419 8D3CBD[949D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  7312 00005420 E893DAFFFF                              call    mp3_dct32_shift_1 ; mp3_dct32_shift_&rate_shift ; rate_shift = 1
  7313 00005425 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  7314 0000542C 740E                                    jz      short .no_rdtsc_supported@@
  7315 0000542E 0F31                                    rdtsc
  7316 00005430 0105[80770000]                          add     [rdtsc_dct32], eax
  7317 00005436 1115[84770000]                          adc     [rdtsc_dct32+4], edx
  7318                                  
  7319                                  .no_rdtsc_supported@@:
  7320 0000543C F605[F0750000]10                        test    byte [cpuid_flags], 10h
  7321 00005443 740E                                    jz      short .no_rdtsc_supported@@@
  7322 00005445 0F31                                    rdtsc
  7323 00005447 2905[98770000]                          sub     [rdtsc_synth], eax
  7324 0000544D 1915[9C770000]                          sbb     [rdtsc_synth+4], edx
  7325                                  
  7326                                  .no_rdtsc_supported@@@:
  7327 00005453 E888000000                              call    mp3_synth_filter_this_8bit_shift_1_slow ;
  7328                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  7329 00005458 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  7330 0000545F 740E                                    jz      short .no_rdtsc_supported@@@@
  7331 00005461 0F31                                    rdtsc
  7332 00005463 0105[98770000]                          add     [rdtsc_synth], eax
  7333 00005469 1115[9C770000]                          adc     [rdtsc_synth+4], edx
  7334                                  
  7335                                  .no_rdtsc_supported@@@@:
  7336 0000546F 5E                                      pop     esi
  7337 00005470 A1[38F40000]                            mov     eax, [mp3_samples_dst_step]
  7338 00005475 C1E005                                  shl     eax, 5          ; mul32
  7339 00005478 8A0D[EE750000]                          mov     cl, [option_rate_shift]
  7340 0000547E D3E8                                    shr     eax, cl
  7341 00005480 0105[7C9D0000]                          add     [mp3_curr_syn_dst], eax
  7342 00005486 81C680000000                            add     esi, 128        ; SBLIMIT*4
  7343 0000548C FF05[44F40000]                          inc	dword [mp3_curr_frame]
  7344 00005492 A1[44F40000]                            mov     eax, [mp3_curr_frame]
  7345 00005497 3B05[809D0000]                          cmp     eax, [mp3_nb_frames]
  7346 0000549D 0F8234FFFFFF                            jb      .synth_frame_lop
  7347 000054A3 5F                                      pop     edi
  7348 000054A4 5E                                      pop     esi
  7349 000054A5 033D[749D0000]                          add     edi, [mp3_bytes_per_sample]
  7350 000054AB 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  7351 000054B1 FF05[3CF40000]                          inc	dword [mp3_curr_channel]
  7352 000054B7 A1[3CF40000]                            mov     eax, [mp3_curr_channel]
  7353 000054BC 3B05[6C9D0000]                          cmp     eax, [mp3_output_num_channels]
  7354 000054C2 0F82FDFEFFFF                            jb      .synth_channel_lop
  7355 000054C8 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  7356 000054CF 740E                                    jz      short .no_rdtsc_supported@@@@@
  7357 000054D1 0F31                                    rdtsc
  7358 000054D3 0105[68770000]                          add     [rdtsc_synth_dct], eax
  7359 000054D9 1115[6C770000]                          adc     [rdtsc_synth_dct+4], edx
  7360                                  
  7361                                  .no_rdtsc_supported@@@@@:
  7362 000054DF C3                                      retn
  7363                                  
  7364                                  
  7365                                  ; =============== S U B R O U T I N E =======================================
  7366                                  
  7367                                  
  7368                                  mp3_synth_filter_this_8bit_shift_1_slow:
  7369 000054E0 A1[789D0000]                            mov     eax, [mp3_curr_syn_index] ; IF LONG_WINDOW
  7370 000054E5 A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh
  7371 000054EA 0F8477010000                            jz      .append_copy_to_window
  7372 000054F0 90                                      nop
  7373                                  
  7374                                  .append_copy_to_window_back:
  7375 000054F1 89C5                                    mov     ebp, eax
  7376 000054F3 81E5C0010000                            and     ebp, 1C0h       ; 1FFh-1Fh-20h
  7377 000054F9 2520040000                              and     eax, 420h       ; 20h+(1 shl 10)
  7378 000054FE 8D7010                                  lea     esi, [eax+10h]
  7379 00005501 8D7830                                  lea     edi, [eax+30h]
  7380 00005504 F7DD                                    neg     ebp
  7381 00005506 81E5C0010000                            and     ebp, 1C0h
  7382 0000550C 8B0D[7C9D0000]                          mov     ecx, [mp3_curr_syn_dst]
  7383                                  
  7384                                  .samples_lop:
  7385 00005512 BB00101000                              mov     ebx, 101000h    ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  7386                                                                          ; @@out_shift equ (OUT_SHIFT_slow+(8*force_8bit))
  7387                                                                          ; OUT_SHIFT_slow = 5 ; @@out_shift = 13
  7388 00005517 8B14B5[949D0000]                        mov     edx, [mp3_synth_buf+esi*4] ; @@SUM8 @@sum,@@win1,0,@@syn1
  7389                                                                          ; @@SUM8 macro sum,win,ww,syn
  7390                                                                          ;   IRP nn,0,1,2,3,4,5,6,7
  7391 0000551E 8B04AD[4CEF0400]                        mov     eax, [mp3_synth_win+ebp*4]
  7392 00005525 F7EA                                    imul    edx
  7393 00005527 01D3                                    add     ebx, edx
  7394 00005529 8B14B5[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4] ; @@syn1 equ esi
  7395 00005530 8B04AD[4CF00400]                        mov     eax, [(mp3_synth_win+100h)+ebp*4] ; @@win1 equ ebp
  7396 00005537 F7EA                                    imul    edx
  7397 00005539 01D3                                    add     ebx, edx
  7398 0000553B 8B14B5[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  7399 00005542 8B04AD[4CF10400]                        mov     eax, [(mp3_synth_win+200h)+ebp*4]
  7400 00005549 F7EA                                    imul    edx
  7401 0000554B 01D3                                    add     ebx, edx
  7402 0000554D 8B14B5[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  7403 00005554 8B04AD[4CF20400]                        mov     eax, [(mp3_synth_win+300h)+ebp*4]
  7404 0000555B F7EA                                    imul    edx
  7405 0000555D 01D3                                    add     ebx, edx
  7406 0000555F 8B14B5[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  7407 00005566 8B04AD[4CF30400]                        mov     eax, [(mp3_synth_win+400h)+ebp*4]
  7408 0000556D F7EA                                    imul    edx
  7409 0000556F 01D3                                    add     ebx, edx
  7410 00005571 8B14B5[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  7411 00005578 8B04AD[4CF40400]                        mov     eax, [(mp3_synth_win+500h)+ebp*4]
  7412 0000557F F7EA                                    imul    edx
  7413 00005581 01D3                                    add     ebx, edx
  7414 00005583 8B14B5[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  7415 0000558A 8B04AD[4CF50400]                        mov     eax, [(mp3_synth_win+600h)+ebp*4]
  7416 00005591 F7EA                                    imul    edx
  7417 00005593 01D3                                    add     ebx, edx
  7418 00005595 8B14B5[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  7419 0000559C 8B04AD[4CF60400]                        mov     eax, [(mp3_synth_win+700h)+ebp*4]
  7420 000055A3 F7EA                                    imul    edx
  7421 000055A5 01D3                                    add     ebx, edx
  7422 000055A7 8B14BD[949D0000]                        mov     edx, [mp3_synth_buf+edi*4]
  7423 000055AE 8B04AD[CCEF0400]                        mov     eax, [(mp3_synth_win+80h)+ebp*4]
  7424 000055B5 F7EA                                    imul    edx
  7425 000055B7 01D3                                    add     ebx, edx
  7426 000055B9 8B14BD[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4] ; @@SUM8 @@sum,@@win1,32,@@syn2
  7427                                                                          ; @@syn2 equ edi
  7428                                                                          ; @@win1 equ ebp
  7429 000055C0 8B04AD[CCF00400]                        mov     eax, [(mp3_synth_win+180h)+ebp*4]
  7430 000055C7 F7EA                                    imul    edx
  7431 000055C9 01D3                                    add     ebx, edx
  7432 000055CB 8B14BD[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  7433 000055D2 8B04AD[CCF10400]                        mov     eax, [(mp3_synth_win+280h)+ebp*4]
  7434 000055D9 F7EA                                    imul    edx
  7435 000055DB 01D3                                    add     ebx, edx
  7436 000055DD 8B14BD[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  7437 000055E4 8B04AD[CCF20400]                        mov     eax, [(mp3_synth_win+380h)+ebp*4]
  7438 000055EB F7EA                                    imul    edx
  7439 000055ED 01D3                                    add     ebx, edx
  7440 000055EF 8B14BD[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  7441 000055F6 8B04AD[CCF30400]                        mov     eax, [(mp3_synth_win+480h)+ebp*4]
  7442 000055FD F7EA                                    imul    edx
  7443 000055FF 01D3                                    add     ebx, edx
  7444 00005601 8B14BD[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  7445 00005608 8B04AD[CCF40400]                        mov     eax, [(mp3_synth_win+580h)+ebp*4]
  7446 0000560F F7EA                                    imul    edx
  7447 00005611 01D3                                    add     ebx, edx
  7448 00005613 8B14BD[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  7449 0000561A 8B04AD[CCF50400]                        mov     eax, [(mp3_synth_win+680h)+ebp*4]
  7450 00005621 F7EA                                    imul    edx
  7451 00005623 01D3                                    add     ebx, edx
  7452 00005625 8B14BD[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  7453 0000562C 8B04AD[CCF60400]                        mov     eax, [(mp3_synth_win+780h)+ebp*4]
  7454 00005633 F7EA                                    imul    edx
  7455 00005635 01D3                                    add     ebx, edx
  7456 00005637 81FB00002000                            cmp     ebx, 200000h    ; cmp @@sum,100h SHL (@@out_shift)
  7457 0000563D 7321                                    jnb     short .sat
  7458 0000563F C1FB0D                                  sar     ebx, 13         ; sar @@sum,(@@out_shift)
  7459                                  
  7460                                  .sat_back:
  7461 00005642 8819                                    mov     [ecx], bl
  7462 00005644 030D[38F40000]                          add     ecx, [mp3_samples_dst_step]
  7463 0000564A 83C602                                  add     esi, 2
  7464 0000564D 83EF02                                  sub     edi, 2
  7465 00005650 83C502                                  add     ebp, 2
  7466 00005653 F7C51F000000                            test    ebp, 1Fh
  7467 00005659 0F85B3FEFFFF                            jnz     .samples_lop
  7468 0000565F C3                                      retn
  7469                                  
  7470                                  .sat:
  7471 00005660 C1FB1F                                  sar     ebx, 31         ; sar @@sum,31 ; FFFFFFFFh,00000000h
  7472 00005663 F7D3                                    not     ebx
  7473 00005665 EBDB                                    jmp     short .sat_back
  7474                                  
  7475                                  .append_copy_to_window:
  7476 00005667 8D3485[949D0000]                        lea     esi, [mp3_synth_buf+eax*4]
  7477 0000566E 8DBE00080000                            lea     edi, [esi+2048]
  7478 00005674 B912000000                              mov     ecx, 18
  7479 00005679 F3A5                                    rep movsd
  7480 0000567B E971FEFFFF                              jmp     .append_copy_to_window_back
  7481                                  
  7482                                  
  7483                                  ; =============== S U B R O U T I N E =======================================
  7484                                  
  7485                                  
  7486                                  synth_8bit_shift_2_slow:
  7487 00005680 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 1,2,0 ; 8bit, quarter rate
  7488                                                                          ; force_8bit, rate_shift=2, force_fast=0
  7489 00005687 740E                                    jz      short .no_rdtsc_supported ; timelog_start rdtsc_synth_dct
  7490 00005689 0F31                                    rdtsc
  7491 0000568B 2905[68770000]                          sub     [rdtsc_synth_dct], eax
  7492 00005691 1915[6C770000]                          sbb     [rdtsc_synth_dct+4], edx
  7493                                  
  7494                                  .no_rdtsc_supported:
  7495 00005697 BE[9CBD0000]                            mov	esi, mp3_sb_samples
  7496 0000569C 8B3D[30F40000]                          mov	edi, [mp3_samples_dst]
  7497 000056A2 C705[3CF40000]0000-                     mov	dword [mp3_curr_channel], 0
  7497 000056AA 0000               
  7498                                  
  7499                                  .synth_channel_lop:
  7500 000056AC 56                                      push	esi
  7501 000056AD 57                                      push	edi
  7502 000056AE 893D[7C9D0000]                          mov	[mp3_curr_syn_dst], edi
  7503 000056B4 C705[44F40000]0000-                     mov	dword [mp3_curr_frame], 0
  7503 000056BC 0000               
  7504                                  
  7505                                  .synth_frame_lop:
  7506 000056BE 56                                      push    esi             ; sb_samples[ch][i]
  7507 000056BF F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_dct32
  7508 000056C6 740E                                    jz      short .no_rdtsc_supported@
  7509 000056C8 0F31                                    rdtsc
  7510 000056CA 2905[80770000]                          sub     [rdtsc_dct32], eax
  7511 000056D0 1915[84770000]                          sbb     [rdtsc_dct32+4], edx
  7512                                  
  7513                                  .no_rdtsc_supported@:
  7514 000056D6 8B15[3CF40000]                          mov     edx, [mp3_curr_channel]
  7515 000056DC 8B0495[94BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  7516 000056E3 832C95[94BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  7517 000056EB C1E20A                                  shl     edx, 10         ; channel*1024
  7518 000056EE 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh ; index(0..511), align 32
  7519 000056F3 09D0                                    or      eax, edx
  7520 000056F5 A3[789D0000]                            mov     [mp3_curr_syn_index], eax
  7521 000056FA 8B3D[789D0000]                          mov     edi, [mp3_curr_syn_index]
  7522 00005700 8D3CBD[949D0000]                        lea     edi, [mp3_synth_buf+edi*4] ; IF SYNTH32
  7523 00005707 E89CDBFFFF                              call    mp3_dct32_shift_2 ; mp3_dct32_shift_&rate_shift ; rate_shift=2
  7524 0000570C F605[F0750000]10                        test    byte [cpuid_flags], 10h
  7525 00005713 740E                                    jz      short .no_rdtsc_supported@@ ; timelog_end rdtsc_dct32
  7526 00005715 0F31                                    rdtsc
  7527 00005717 0105[80770000]                          add     [rdtsc_dct32], eax
  7528 0000571D 1115[84770000]                          adc     [rdtsc_dct32+4], edx
  7529                                  
  7530                                  .no_rdtsc_supported@@:
  7531 00005723 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  7532 0000572A 740E                                    jz      short .no_rdtsc_supported@@@ ; timelog_start rdtsc_synth
  7533 0000572C 0F31                                    rdtsc
  7534 0000572E 2905[98770000]                          sub     [rdtsc_synth], eax
  7535 00005734 1915[9C770000]                          sbb     [rdtsc_synth+4], edx
  7536                                  
  7537                                  .no_rdtsc_supported@@@:
  7538 0000573A E888000000                              call    mp3_synth_filter_this_8bit_shift_2_slow ;
  7539                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  7540 0000573F F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_synth
  7541 00005746 740E                                    jz      short .no_rdtsc_supported@@@@
  7542 00005748 0F31                                    rdtsc
  7543 0000574A 0105[98770000]                          add     [rdtsc_synth], eax
  7544 00005750 1115[9C770000]                          adc     [rdtsc_synth+4], edx
  7545                                  
  7546                                  .no_rdtsc_supported@@@@:
  7547 00005756 5E                                      pop     esi             ; src
  7548 00005757 A1[38F40000]                            mov     eax, [mp3_samples_dst_step]
  7549 0000575C C1E005                                  shl     eax, 5          ; mul32
  7550 0000575F 8A0D[EE750000]                          mov     cl, [option_rate_shift] ; IF with_rate_shift
  7551 00005765 D3E8                                    shr     eax, cl
  7552 00005767 0105[7C9D0000]                          add     [mp3_curr_syn_dst], eax
  7553 0000576D 81C680000000                            add     esi, 128        ; SBLIMIT*4 ; src+32*4
  7554 00005773 FF05[44F40000]                          inc     dword [mp3_curr_frame]
  7555 00005779 A1[44F40000]                            mov     eax, [mp3_curr_frame]
  7556 0000577E 3B05[809D0000]                          cmp     eax, [mp3_nb_frames]
  7557 00005784 0F8234FFFFFF                            jb      .synth_frame_lop
  7558 0000578A 5F                                      pop     edi
  7559 0000578B 5E                                      pop     esi
  7560 0000578C 033D[749D0000]                          add     edi, [mp3_bytes_per_sample]
  7561 00005792 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4 ; src
  7562 00005798 FF05[3CF40000]                          inc     dword [mp3_curr_channel]
  7563 0000579E A1[3CF40000]                            mov     eax, [mp3_curr_channel]
  7564 000057A3 3B05[6C9D0000]                          cmp     eax, [mp3_output_num_channels]
  7565 000057A9 0F82FDFEFFFF                            jb      .synth_channel_lop
  7566 000057AF F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_synth_dct
  7567 000057B6 740E                                    jz      short .no_rdtsc_supported@@@@@
  7568 000057B8 0F31                                    rdtsc
  7569 000057BA 0105[68770000]                          add     [rdtsc_synth_dct], eax
  7570 000057C0 1115[6C770000]                          adc     [rdtsc_synth_dct+4], edx
  7571                                  
  7572                                  .no_rdtsc_supported@@@@@:
  7573 000057C6 C3                                      retn
  7574                                  
  7575                                  ; =============== S U B R O U T I N E =======================================
  7576                                  
  7577                                  
  7578                                  mp3_synth_filter_this_8bit_shift_2_slow:
  7579 000057C7 A1[789D0000]                            mov     eax, [mp3_curr_syn_index]
  7580 000057CC A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh ; offset
  7581 000057D1 0F8477010000                            jz      .append_copy_to_window
  7582 000057D7 90                                      nop
  7583                                  
  7584                                  .append_copy_to_window_back:
  7585 000057D8 89C5                                    mov     ebp, eax        ; @@win1
  7586 000057DA 81E5C0010000                            and     ebp, 1C0h       ; 1FFh-1Fh-20h
  7587 000057E0 2520040000                              and     eax, 420h       ; 20h+(1 shl 10) ; bit5 and channel
  7588 000057E5 8D7010                                  lea     esi, [eax+10h]  ; @@syn1
  7589 000057E8 8D7830                                  lea     edi, [eax+30h]  ; @@syn2
  7590 000057EB F7DD                                    neg     ebp
  7591 000057ED 81E5C0010000                            and     ebp, 1C0h       ; 1FFh-1Fh-20h
  7592 000057F3 8B0D[7C9D0000]                          mov     ecx, [mp3_curr_syn_dst] ; @@dst
  7593                                  
  7594                                  .samples_lop:
  7595 000057F9 BB00101000                              mov     ebx, 101000h    ; mov @@sum,(80h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  7596                                                                          ; @@out_shift equ (OUT_SHIFT_slow+(8*force_8bit))
  7597                                                                          ; @@out_shift = 13 ; OUT_SHIFT_slow = 5
  7598 000057FE 8B14B5[949D0000]                        mov     edx, [mp3_synth_buf+esi*4] ; @@SUM8 @@sum,@@win1,0,@@syn1
  7599                                                                          ; @@SUM8 macro sum,win,ww, syn
  7600                                                                          ; IRP nn,0,1,2,3,4,5,6,7
  7601                                                                          ; [mp3_synth_buf+syn*4+(nn*64*4)]
  7602 00005805 8B04AD[4CEF0400]                        mov     eax, [mp3_synth_win+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4]
  7603 0000580C F7EA                                    imul    edx             ; 64bit = 32bit * 32bit
  7604 0000580E 01D3                                    add     ebx, edx        ; add sum,edx ; sum from MSW of result
  7605 00005810 8B14B5[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4] ;
  7606                                                                          ; [mp3_synth_buf+syn*4+(nn*64*4)] ; nn=1
  7607 00005817 8B04AD[4CF00400]                        mov     eax, [(mp3_synth_win+100h)+ebp*4] ;
  7608                                                                          ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] ; nn=1
  7609 0000581E F7EA                                    imul    edx
  7610 00005820 01D3                                    add     ebx, edx
  7611 00005822 8B14B5[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  7612 00005829 8B04AD[4CF10400]                        mov     eax, [(mp3_synth_win+200h)+ebp*4]
  7613 00005830 F7EA                                    imul    edx
  7614 00005832 01D3                                    add     ebx, edx
  7615 00005834 8B14B5[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  7616 0000583B 8B04AD[4CF20400]                        mov     eax, [(mp3_synth_win+300h)+ebp*4]
  7617 00005842 F7EA                                    imul    edx
  7618 00005844 01D3                                    add     ebx, edx
  7619 00005846 8B14B5[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4] ;
  7620                                                                          ; [mp3_synth_buf+syn*4+(nn*64*4)] ; nn=4
  7621 0000584D 8B04AD[4CF30400]                        mov     eax, [(mp3_synth_win+400h)+ebp*4] ;
  7622                                                                          ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] ; nn=4
  7623 00005854 F7EA                                    imul    edx
  7624 00005856 01D3                                    add     ebx, edx
  7625 00005858 8B14B5[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  7626 0000585F 8B04AD[4CF40400]                        mov     eax, [(mp3_synth_win+500h)+ebp*4]
  7627 00005866 F7EA                                    imul    edx
  7628 00005868 01D3                                    add     ebx, edx
  7629 0000586A 8B14B5[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  7630 00005871 8B04AD[4CF50400]                        mov     eax, [(mp3_synth_win+600h)+ebp*4]
  7631 00005878 F7EA                                    imul    edx
  7632 0000587A 01D3                                    add     ebx, edx
  7633 0000587C 8B14B5[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  7634 00005883 8B04AD[4CF60400]                        mov     eax, [(mp3_synth_win+700h)+ebp*4]
  7635 0000588A F7EA                                    imul    edx
  7636 0000588C 01D3                                    add     ebx, edx
  7637 0000588E 8B14BD[949D0000]                        mov     edx, [mp3_synth_buf+edi*4] ; @@SUM8 @@sum,@@win1,32,@@syn2
  7638 00005895 8B04AD[CCEF0400]                        mov     eax, [(mp3_synth_win+80h)+ebp*4]
  7639 0000589C F7EA                                    imul    edx
  7640 0000589E 01D3                                    add     ebx, edx
  7641 000058A0 8B14BD[949E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  7642 000058A7 8B04AD[CCF00400]                        mov     eax, [(mp3_synth_win+180h)+ebp*4]
  7643 000058AE F7EA                                    imul    edx
  7644 000058B0 01D3                                    add     ebx, edx
  7645 000058B2 8B14BD[949F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  7646 000058B9 8B04AD[CCF10400]                        mov     eax, [(mp3_synth_win+280h)+ebp*4]
  7647 000058C0 F7EA                                    imul    edx
  7648 000058C2 01D3                                    add     ebx, edx
  7649 000058C4 8B14BD[94A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  7650 000058CB 8B04AD[CCF20400]                        mov     eax, [(mp3_synth_win+380h)+ebp*4]
  7651 000058D2 F7EA                                    imul    edx
  7652 000058D4 01D3                                    add     ebx, edx
  7653 000058D6 8B14BD[94A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  7654 000058DD 8B04AD[CCF30400]                        mov     eax, [(mp3_synth_win+480h)+ebp*4]
  7655 000058E4 F7EA                                    imul    edx
  7656 000058E6 01D3                                    add     ebx, edx
  7657 000058E8 8B14BD[94A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  7658 000058EF 8B04AD[CCF40400]                        mov     eax, [(mp3_synth_win+580h)+ebp*4]
  7659 000058F6 F7EA                                    imul    edx
  7660 000058F8 01D3                                    add     ebx, edx
  7661 000058FA 8B14BD[94A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  7662 00005901 8B04AD[CCF50400]                        mov     eax, [(mp3_synth_win+680h)+ebp*4]
  7663 00005908 F7EA                                    imul    edx
  7664 0000590A 01D3                                    add     ebx, edx
  7665 0000590C 8B14BD[94A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  7666                                                                          ; [mp3_synth_buf+syn*4+(nn*64*4)] ; nn=7
  7667 00005913 8B04AD[CCF60400]                        mov     eax, [(mp3_synth_win+780h)+ebp*4]
  7668                                                                          ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] ; nn=7
  7669 0000591A F7EA                                    imul    edx
  7670 0000591C 01D3                                    add     ebx, edx
  7671 0000591E 81FB00002000                            cmp     ebx, 200000h    ; cmp @@sum,100h SHL (@@out_shift) ; out_shift=13
  7672 00005924 7321                                    jnb     short .sat
  7673 00005926 C1FB0D                                  sar     ebx, 13         ; sar @@sum,(@@out_shift)
  7674                                  
  7675                                  .sat_back:
  7676 00005929 8819                                    mov     [ecx], bl       ; mov byte ptr [@@dst],@@sum_8bit
  7677 0000592B 030D[38F40000]                          add     ecx, [mp3_samples_dst_step]
  7678 00005931 83C604                                  add     esi, 4          ; add @@syn1,1 shl rate_shift ; rate_shift=2
  7679 00005934 83EF04                                  sub     edi, 4          ; add @@syn2,1 shl rate_shift
  7680 00005937 83C504                                  add     ebp, 4          ; add @@win1,1 shl rate_shift
  7681 0000593A F7C51F000000                            test    ebp, 1Fh        ; test @@win1,1Fh
  7682 00005940 0F85B3FEFFFF                            jnz     .samples_lop
  7683 00005946 C3                                      retn
  7684                                  
  7685                                  .sat:
  7686 00005947 C1FB1F                                  sar     ebx, 31         ; sar  @@sum,31 ; FFFFFFFFh,00000000h
  7687 0000594A F7D3                                    not     ebx
  7688 0000594C EBDB                                    jmp     short .sat_back
  7689                                  
  7690                                  .append_copy_to_window:
  7691 0000594E 8D3485[949D0000]                        lea     esi, [mp3_synth_buf+eax*4] ; IF SYNTH32
  7692 00005955 8DBE00080000                            lea     edi, [esi+2048] ; [esi+512*4]
  7693 0000595B B912000000                              mov     ecx, 18         ; (12h*4)/4
  7694 00005960 F3A5                                    rep movsd
  7695 00005962 E971FEFFFF                              jmp     .append_copy_to_window_back
  7696                                  
  7697                                  
  7698                                  ; =============== S U B R O U T I N E =======================================
  7699                                  
  7700                                  
  7701                                  mp3_any_init_synth_window:
  7702 00005967 31D2                                    xor     edx, edx        ; index (0..100h)
  7703 00005969 31C9                                    xor     ecx, ecx        ; delta.val
  7704 0000596B 898C12[4CEF0400]                        mov     [mp3_synth_win+edx*2], ecx
  7705                                  
  7706                                  .synth_lop:
  7707 00005972 0FBF9C12[3E780000]                      movsx   ebx, word [mp3_synth_win_src+edx*2]
  7708 0000597A 01D9                                    add     ecx, ebx
  7709 0000597C 89C8                                    mov     eax, ecx
  7710 0000597E 803D[EF750000]00                        cmp     byte [option_fast], 0
  7711 00005985 7403                                    jz      short .not_fast
  7712 00005987 C1F805                                  sar     eax, 5
  7713                                  
  7714                                  .not_fast:
  7715 0000598A 803D[EF750000]00                        cmp	byte [option_fast], 0
  7716 00005991 7503                                    jnz	short .not_slow
  7717 00005993 C1E00E                                  shl	eax, 14         ; (WFRAC_BITS_slow-WFRAC_BITS_default)
  7718                                  
  7719                                  .not_slow:
  7720 00005996 42                                      inc     edx             ; index (1..100h)
  7721 00005997 BB00020000                              mov     ebx, 200h
  7722 0000599C 29D3                                    sub     ebx, edx        ; 1FFh..100h
  7723 0000599E 89049D[4CEF0400]                        mov     [mp3_synth_win+ebx*4], eax
  7724 000059A5 F7C23F000000                            test    edx, 3Fh
  7725 000059AB 7402                                    jz      short .synth_keep_sign
  7726 000059AD F7D8                                    neg     eax
  7727                                  
  7728                                  .synth_keep_sign:
  7729 000059AF 890495[4CEF0400]                        mov     [mp3_synth_win+edx*4], eax
  7730 000059B6 81FA00010000                            cmp     edx, 100h
  7731 000059BC 72B4                                    jb      short .synth_lop
  7732 000059BE 31D2                                    xor     edx, edx
  7733                                  
  7734                                  .synth_neg_lop:
  7735 000059C0 F7C230000000                            test    edx, 30h        ; skip 0..0Fh (only negate 10h..3Fh)
  7736 000059C6 7407                                    jz      short .synth_neg_next
  7737 000059C8 F71C95[4CEF0400]                        neg     dword [mp3_synth_win+edx*4]
  7738                                  
  7739                                  .synth_neg_next:
  7740 000059CF 42                                      inc     edx
  7741 000059D0 81FA00020000                            cmp     edx, 200h
  7742 000059D6 72E8                                    jb      short .synth_neg_lop
  7743 000059D8 31D2                                    xor     edx, edx
  7744                                  
  7745                                  .synth_swap_lop:
  7746 000059DA 89D0                                    mov     eax, edx
  7747 000059DC 83E03F                                  and     eax, 3Fh
  7748 000059DF 83E811                                  sub     eax, 17         ; swap win [(17..31)] with win[(17..31)+32)
  7749 000059E2 83F80E                                  cmp     eax, 14         ; 31-17
  7750 000059E5 7715                                    ja      short .synth_swap_next
  7751 000059E7 8B0495[4CEF0400]                        mov     eax, [mp3_synth_win+edx*4]
  7752 000059EE 870495[CCEF0400]                        xchg    eax, [(mp3_synth_win+80h)+edx*4]
  7753 000059F5 890495[4CEF0400]                        mov     [mp3_synth_win+edx*4], eax
  7754                                  
  7755                                  .synth_swap_next:
  7756 000059FC 42                                      inc     edx
  7757 000059FD 81FA00020000                            cmp     edx, 200h
  7758 00005A03 72D5                                    jb      short .synth_swap_lop
  7759 00005A05 31D2                                    xor     edx, edx
  7760                                  
  7761                                  .synth_zero_lop:
  7762 00005A07 C70495[8CEF0400]00-                     mov	dword [(mp3_synth_win+40h)+edx*4], 0
  7762 00005A0F 000000             
  7763 00005A12 83C240                                  add	edx, 40h
  7764 00005A15 81FA00020000                            cmp	edx, 200h
  7765 00005A1B 72EA                                    jb	short .synth_zero_lop
  7766 00005A1D BE[4CEF0400]                            mov	esi, mp3_synth_win
  7767 00005A22 8DBE00080000                            lea	edi, [esi+2048] ; [esi+512*4]
  7768 00005A28 B900020000                              mov	ecx, 512        ; append another copy
  7769 00005A2D F3A5                                    rep movsd
  7770 00005A2F C3                                      retn
  7771                                  
  7772                                  
  7773                                  ; =============== S U B R O U T I N E =======================================
  7774                                  
  7775                                  
  7776                                  mp3_init_post_collapse:
  7777 00005A30 803D[EF750000]00                        cmp	byte [option_fast], 0
  7778 00005A37 7411                                    jz	short .not_fast
  7779 00005A39 BE[4CEF0400]                            mov	esi, mp3_synth_win
  7780 00005A3E 89F7                                    mov	edi, esi
  7781 00005A40 B900040000                              mov	ecx, 1024       ; 512*(1+LONG_WINDOW)
  7782                                  
  7783                                  .collapse_lop:
  7784 00005A45 AD                                      lodsd                   ; collapse 32bit to 16bit
  7785                                                                          ; (that's slightly faster due to better caching)
  7786 00005A46 66AB                                    stosw
  7787 00005A48 E2FB                                    loop    .collapse_lop
  7788                                  
  7789                                  .not_fast:
  7790 00005A4A C3                                      retn
  7791                                  
  7792                                  
  7793                                  ; =============== S U B R O U T I N E =======================================
  7794                                  
  7795                                  
  7796                                  mp3_any_init_band_indices:
  7797 00005A4B BE[70800000]                            mov     esi, mp3_band_size_long
  7798 00005A50 BF[60D70100]                            mov     edi, mp3_band_index_long
  7799 00005A55 BB09000000                              mov     ebx, 9
  7800                                  
  7801                                  .band_index_lop_i:
  7802 00005A5A 31C0                                    xor     eax, eax
  7803 00005A5C B916000000                              mov     ecx, 22
  7804                                  
  7805                                  .band_index_lop_j:
  7806 00005A61 66AB                                    stosw
  7807 00005A63 0FB616                                  movzx   edx, byte [esi]
  7808 00005A66 01D0                                    add     eax, edx
  7809 00005A68 46                                      inc     esi
  7810 00005A69 E2F6                                    loop    .band_index_lop_j
  7811 00005A6B 83C10A                                  add     ecx, 10
  7812 00005A6E F366AB                                  rep stosw
  7813 00005A71 4B                                      dec     ebx
  7814 00005A72 75E6                                    jnz     short .band_index_lop_i
  7815 00005A74 C3                                      retn
  7816                                  
  7817                                  
  7818                                  ; =============== S U B R O U T I N E =======================================
  7819                                  
  7820                                  
  7821                                  mp3_any_init_lsf_sf_expand:
  7822 00005A75 BE[0E780000]                            mov     esi, mp3_lsf_sf_expand_init_table
  7823 00005A7A BF[4CFF0400]                            mov     edi, mp3_lsf_sf_expand_exploded_table
  7824 00005A7F 31D2                                    xor     edx, edx        ; curr.index
  7825 00005A81 31DB                                    xor     ebx, ebx        ; curr.base
  7826                                  
  7827                                  .lop:
  7828 00005A83 663B5606                                cmp     dx, [esi+6]     ; nextbase
  7829 00005A87 7207                                    jb      short .inrange
  7830 00005A89 668B5E06                                mov     bx, [esi+6]
  7831 00005A8D 83C608                                  add     esi, 8          ; next entry
  7832                                  
  7833                                  .inrange:
  7834 00005A90 89D0                                    mov     eax, edx
  7835 00005A92 29D8                                    sub     eax, ebx
  7836 00005A94 8A0E                                    mov     cl, [esi]
  7837 00005A96 D3E8                                    shr     eax, cl         ; div2
  7838 00005A98 F67603                                  div     byte [esi+3] ; mod3 ; [2]=slen[3]
  7839 00005A9B 886703                                  mov     [edi+3], ah
  7840 00005A9E B400                                    mov     ah, 0           ; eax=div.result
  7841 00005AA0 F67602                                  div     byte [esi+2] ; mod2 ; [2]=slen[2]
  7842 00005AA3 886702                                  mov     [edi+2], ah     ; remainder
  7843 00005AA6 B400                                    mov     ah, 0
  7844 00005AA8 F67601                                  div     byte [esi+1] ; mod1 ; [1]=slen[1]
  7845 00005AAB 668907                                  mov     [edi], ax       ; [0]=slen[0]
  7846 00005AAE 668B4604                                mov     ax, [esi+4]     ; [4]=tindex2
  7847 00005AB2 66894704                                mov     [edi+4], ax     ; [5]=force_preflag
  7848 00005AB6 83C708                                  add     edi, 8
  7849 00005AB9 42                                      inc     edx             ; curr.index ; next
  7850 00005ABA 81FA00040000                            cmp     edx, 1024       ; 512+512
  7851 00005AC0 72C1                                    jb      short .lop
  7852 00005AC2 C3                                      retn
  7853                                  
  7854                                  
  7855                                  ; =============== S U B R O U T I N E =======================================
  7856                                  
  7857                                  
  7858                                  mp3_any_init_huff_tables:
  7859 00005AC3 BD[A87A0000]                            mov     ebp, huff_tree_list_data
  7860 00005AC8 BE[28850000]                            mov     esi, huff_tree_list_numbits
  7861 00005ACD BA01000000                              mov     edx, 1          ; idx (table 01h..11h)
  7862                                  
  7863                                  .huffman_table_lop:
  7864 00005AD2 31C0                                    xor     eax, eax
  7865 00005AD4 BF[78290500]                            mov     edi, mp3_huff_tmp_bits
  7866 00005AD9 B940000000                              mov     ecx, 40h        ; 100h/4 ; 100h x 8bit
  7867 00005ADE F3AB                                    rep stosd
  7868 00005AE0 BF[782A0500]                            mov     edi, mp3_huff_tmp_codes
  7869 00005AE5 B980000000                              mov     ecx, 80h        ; 100h/2 ; 100h x 16bit
  7870 00005AEA F3AB                                    rep stosd
  7871 00005AEC 31DB                                    xor     ebx, ebx
  7872                                  
  7873                                  .huff_entry_lop:
  7874 00005AEE 0FB67D00                                movzx   edi, byte [ebp+0]
  7875 00005AF2 45                                      inc     ebp             ; dst=data
  7876 00005AF3 AC                                      lodsb                   ; numbits
  7877 00005AF4 8887[78290500]                          mov     [mp3_huff_tmp_bits+edi], al
  7878 00005AFA B120                                    mov     cl, 32
  7879 00005AFC 28C1                                    sub     cl, al          ; 32-numbits
  7880 00005AFE D3EB                                    shr     ebx, cl
  7881 00005B00 66899C3F[782A0500]                      mov     word [mp3_huff_tmp_codes+edi*2], bx
  7882 00005B08 43                                      inc     ebx             ; next.code
  7883 00005B09 D3E3                                    shl     ebx, cl         ; shift back to MSBs
  7884 00005B0B 75E1                                    jnz     short .huff_entry_lop
  7885 00005B0D 60                                      pusha
  7886 00005B0E B800010000                              mov     eax, 100h       ; nb_codes
  7887 00005B13 BB[78290500]                            mov     ebx, mp3_huff_tmp_bits ; bits
  7888 00005B18 BE[782A0500]                            mov     esi, mp3_huff_tmp_codes ; codes
  7889 00005B1D E837020000                              call    mp3_build_huff_table_root ; make table
  7890 00005B22 61                                      popa
  7891 00005B23 42                                      inc     edx             ; idx
  7892 00005B24 83FA12                                  cmp     edx, 12h
  7893 00005B27 75A9                                    jnz     short .huffman_table_lop ; next table
  7894 00005B29 C3                                      retn
  7895                                  
  7896                                  
  7897                                  ; =============== S U B R O U T I N E =======================================
  7898                                  
  7899                                  
  7900                                  mp3_integer_init_is_stereo_lsf:
  7901 00005B2A 31FF                                    xor     edi, edi
  7902                                  
  7903                                  .lsf_lop:
  7904 00005B2C 89FE                                    mov     esi, edi
  7905 00005B2E 83E63F                                  and     esi, 3Fh
  7906 00005B31 46                                      inc     esi
  7907 00005B32 D1EE                                    shr     esi, 1
  7908 00005B34 F7C740000000                            test    edi, 40h
  7909 00005B3A 7402                                    jz      short .lsf_no_shift
  7910 00005B3C D1E6                                    shl     esi, 1
  7911                                  
  7912                                  .lsf_no_shift:
  7913 00005B3E BA00000040                              mov     edx, 40000000h  ; aka mul 1.000
  7914 00005B43 83C604                                  add     esi, 4
  7915 00005B46 F7C780000000                            test    edi, 80h        ; 2*40h
  7916 00005B4C 7408                                    jz      short .no_ms_stereo
  7917 00005B4E BA9A79825A                              mov     edx, 5A82799Ah  ; 2D413CCDh*2 ; aka mul 1.414
  7918 00005B53 83EE02                                  sub     esi, 2
  7919                                  
  7920                                  .no_ms_stereo:
  7921 00005B56 89F1                                    mov     ecx, esi
  7922 00005B58 C1E902                                  shr     ecx, 2          ; msbs
  7923 00005B5B 83E603                                  and     esi, 3          ; lsbs
  7924 00005B5E 8B04B5[68840000]                        mov     eax, [mp3_is_table_lsf_src+esi*4]
  7925 00005B65 D3E8                                    shr     eax, cl
  7926 00005B67 F7C701000000                            test    edi, 1
  7927 00005B6D 7501                                    jnz     short .lsf_no_swap
  7928 00005B6F 92                                      xchg    eax, edx
  7929                                  
  7930                                  .lsf_no_swap:
  7931 00005B70 8904FD[4CE70400]                        mov     [mp3_is_table_lsf+edi*8], eax
  7932 00005B77 8914FD[50E70400]                        mov     [(mp3_is_table_lsf+4)+edi*8], edx
  7933 00005B7E 47                                      inc     edi
  7934 00005B7F 81FF00010000                            cmp     edi, 100h
  7935 00005B85 72A5                                    jb      short .lsf_lop
  7936 00005B87 C3                                      retn
  7937                                  
  7938                                  
  7939                                  ; =============== S U B R O U T I N E =======================================
  7940                                  
  7941                                  
  7942                                  mp3_integer_init_mdct_windows:
  7943 00005B88 BF[CCE20400]                            mov     edi, mp3_mdct_win
  7944 00005B8D BE[F0810000]                            mov     esi, mp3_mdct_win_src
  7945 00005B92 B990000000                              mov     ecx, 144        ; 36*4
  7946 00005B97 F3A5                                    rep movsd
  7947 00005B99 BE[CCE20400]                            mov     esi, mp3_mdct_win
  7948 00005B9E BF[0CE50400]                            mov     edi, (mp3_mdct_win+240h)
  7949 00005BA3 B948000000                              mov     ecx, 72         ; 4*36/2 ; that is, 4*36 entry pairs
  7950                                  
  7951                                  .mdct_lop_dupe:                       
  7952 00005BA8 A5                                      movsd                   ; copy normal, [4..7][even] = +[0..3][even
  7953 00005BA9 AD                                      lodsd
  7954 00005BAA F7D8                                    neg     eax             ; copy negated, [4..7][odd] = -[0..3][odd]
  7955 00005BAC AB                                      stosd
  7956 00005BAD E2F9                                    loop    .mdct_lop_dupe
  7957 00005BAF C3                                      retn
  7958                                  
  7959                                  
  7960                                  ; =============== S U B R O U T I N E =======================================
  7961                                  
  7962                                  
  7963                                  mp3_integer_init_table_4_3:
  7964 00005BB0 803D[EF750000]00                        cmp	byte [option_fast], 0
  7965 00005BB7 B048                                    mov	al, 72          ; 100-6-VFRAC_BITS_slow
  7966 00005BB9 7402                                    jz	short .this_vfrac
  7967 00005BBB B04C                                    mov	al, 76          ; 100-6-VFRAC_BITS_fast
  7968                                  
  7969                                  .this_vfrac:
  7970 00005BBD A2[A0F30000]                            mov     [mp3_curr_vfrac_bits], al
  7971 00005BC2 31FF                                    xor     edi, edi
  7972                                  
  7973                                  .table_4_3_lop:
  7974 00005BC4 57                                      push    edi             ; for i=1 to TABLE_4_3_SIZE-1
  7975 00005BC5 89F8                                    mov     eax, edi
  7976 00005BC7 C1E802                                  shr     eax, 2
  7977 00005BCA F7E0                                    mul     eax
  7978 00005BCC F7E0                                    mul     eax
  7979 00005BCE 31DB                                    xor     ebx, ebx
  7980 00005BD0 E8A2000000                              call    cbrt96
  7981 00005BD5 020D[A0F30000]                          add     cl, [mp3_curr_vfrac_bits]
  7982 00005BDB 5F                                      pop     edi
  7983                                  
  7984                                  .inner_lop:
  7985 00005BDC 89F8                                    mov     eax, edi
  7986 00005BDE 83E003                                  and     eax, 3
  7987 00005BE1 8B0485[78840000]                        mov     eax, [mp3_pow2_quarters+eax*4]
  7988 00005BE8 F7E3                                    mul     ebx
  7989 00005BEA 88CD                                    mov     ch, cl
  7990 00005BEC 09D2                                    or      edx, edx
  7991 00005BEE 7904                                    jns     short .this
  7992 00005BF0 D1EA                                    shr     edx, 1
  7993 00005BF2 FECD                                    dec     ch
  7994                                  
  7995                                  .this:
  7996 00005BF4 8914BD[DC590200]                        mov     [mp3_table_4_3_value+edi*4], edx
  7997 00005BFB 88AF[A0D90100]                          mov     [mp3_table_4_3_exp+edi], ch
  7998 00005C01 47                                      inc     edi
  7999 00005C02 F7C703000000                            test    edi, 3
  8000 00005C08 75D2                                    jnz     short .inner_lop
  8001 00005C0A 81FF3C800000                            cmp     edi, 803Ch
  8002 00005C10 72B2                                    jb      short .table_4_3_lop
  8003 00005C12 C3                                      retn
  8004                                  
  8005                                  
  8006                                  ; =============== S U B R O U T I N E =======================================
  8007                                  
  8008                                  
  8009                                  mp3_integer_init_exponent:
  8010 00005C13 BF[CC620400]                            mov     edi, mp3_expval_table
  8011 00005C18 31D2                                    xor     edx, edx
  8012                                  
  8013                                  .exponent_lop:
  8014 00005C1A 89D0                                    mov     eax, edx        ; val=i
  8015 00005C1C 89D3                                    mov     ebx, edx
  8016 00005C1E 89D1                                    mov     ecx, edx
  8017 00005C20 C1EB04                                  shr     ebx, 4
  8018 00005C23 C1E906                                  shr     ecx, 6          ; 4+2
  8019 00005C26 83E00F                                  and     eax, 0Fh        ; val=i AND 0Fh
  8020 00005C29 83E303                                  and     ebx, 3
  8021 00005C2C 8D1C83                                  lea     ebx, [ebx+eax*4] ; (0..0Fh)*4+(0..3)
  8022 00005C2F 8B049D[DC590200]                        mov     eax, [mp3_table_4_3_value+ebx*4]
  8023 00005C36 09C0                                    or      eax, eax
  8024 00005C38 741A                                    jz      short .this
  8025 00005C3A 2A8B[A0D90100]                          sub     cl, [mp3_table_4_3_exp+ebx]
  8026 00005C40 770D                                    ja      short .left_shift
  8027 00005C42 F6D9                                    neg     cl
  8028 00005C44 D3E8                                    shr     eax, cl
  8029 00005C46 80F91F                                  cmp     cl, 1Fh
  8030 00005C49 7609                                    jbe     short .this
  8031 00005C4B 31C0                                    xor     eax, eax
  8032 00005C4D EB05                                    jmp     short .this
  8033                                  
  8034                                  .left_shift:
  8035 00005C4F B8FFFFFF7F                              mov     eax, 7FFFFFFFh
  8036                                  
  8037                                  .this:
  8038 00005C54 AB                                      stosd
  8039 00005C55 42                                      inc     edx
  8040 00005C56 81FA00200000                            cmp     edx, 2000h
  8041 00005C5C 72BC                                    jb      short .exponent_lop
  8042 00005C5E BE[CC620400]                            mov     esi, mp3_expval_table
  8043 00005C63 BF[CC5A0400]                            mov     edi, mp3_exp_table
  8044 00005C68 B900020000                              mov     ecx, 200h
  8045                                  
  8046                                  .exponent_dupe_lop:
  8047 00005C6D 8B4604                                  mov     eax, [esi+4]
  8048 00005C70 AB                                      stosd
  8049 00005C71 83C640                                  add     esi, 40h
  8050 00005C74 E2F7                                    loop    .exponent_dupe_lop
  8051 00005C76 C3                                      retn
  8052                                  
  8053                                  
  8054                                  ; =============== S U B R O U T I N E =======================================
  8055                                  
  8056                                  
  8057                                  cbrt96:
  8058 00005C77 83EC18                                  sub     esp, 18h        ; cube root, val^(1/3), from https://gist.github.com/anonymous/729557
  8059                                                                          ; in:  ebx:edx:eax = unsigned 96bit input (integer)
  8060                                                                          ; out: ebx         = unsigned 32bit result (with fractional bits)
  8061                                                                          ; out: cl          = number of fractional bits
  8062 00005C7A 890424                                  mov     [esp], eax
  8063 00005C7D 89542404                                mov     [esp+4], edx
  8064 00005C81 895C2408                                mov     [esp+8], ebx
  8065 00005C85 C744240C00000000                        mov     dword [esp+0Ch], 0
  8066 00005C8D C744241000000000                        mov     dword [esp+10h], 0
  8067 00005C95 C744241400000000                        mov     dword [esp+14h], 0
  8068 00005C9D 31DB                                    xor     ebx, ebx        ; result.value
  8069 00005C9F B100                                    mov     cl, 0           ; result.fraction
  8070 00005CA1 09D0                                    or      eax, edx        ; skip if zero
  8071 00005CA3 742F                                    jz      short .pre_shift_done
  8072                                  
  8073                                  .pre_shift_lop:
  8074 00005CA5 F7442408000000E0                        test    dword [esp+8], 0E0000000h
  8075 00005CAD 7525                                    jnz     short .pre_shift_done
  8076 00005CAF D12424                                  shl     dword [esp], 1
  8077 00005CB2 D1542404                                rcl     dword [esp+4], 1
  8078 00005CB6 D1542408                                rcl     dword [esp+8], 1
  8079 00005CBA D12424                                  shl     dword [esp], 1
  8080 00005CBD D1542404                                rcl     dword [esp+4], 1
  8081 00005CC1 D1542408                                rcl     dword [esp+8], 1
  8082 00005CC5 D12424                                  shl     dword [esp], 1
  8083 00005CC8 D1542404                                rcl     dword [esp+4], 1
  8084 00005CCC D1542408                                rcl     dword [esp+8], 1
  8085 00005CD0 FEC1                                    inc     cl
  8086 00005CD2 EBD1                                    jmp     short .pre_shift_lop
  8087                                  
  8088                                  .pre_shift_done:
  8089 00005CD4 B520                                    mov     ch, 20h         ; loopcount
  8090                                  
  8091                                  .lop:
  8092 00005CD6 01DB                                    add     ebx, ebx        ; result*2
  8093 00005CD8 89D8                                    mov     eax, ebx        ; y
  8094 00005CDA 43                                      inc     ebx             ; result+1
  8095 00005CDB F7E3                                    mul     ebx             ; y*(y+1)
  8096 00005CDD 89C6                                    mov     esi, eax
  8097 00005CDF 89D7                                    mov     edi, edx
  8098 00005CE1 31ED                                    xor     ebp, ebp
  8099 00005CE3 F9                                      stc
  8100 00005CE4 11F6                                    adc     esi, esi        ; y*(y+1)*2+1
  8101 00005CE6 11FF                                    adc     edi, edi
  8102 00005CE8 11ED                                    adc     ebp, ebp
  8103 00005CEA 01C6                                    add     esi, eax
  8104 00005CEC 11D7                                    adc     edi, edx        ; y*(y+1)*3+1
  8105 00005CEE 83D500                                  adc     ebp, 0
  8106 00005CF1 D12424                                  shl     dword [esp], 1
  8107 00005CF4 D1542404                                rcl     dword [esp+4], 1
  8108 00005CF8 D1542408                                rcl     dword [esp+8], 1 ; shl 3
  8109 00005CFC D154240C                                rcl     dword [esp+0Ch], 1
  8110 00005D00 D1542410                                rcl     dword [esp+10h], 1
  8111 00005D04 D1542414                                rcl     dword [esp+14h], 1
  8112 00005D08 D12424                                  shl     dword [esp], 1
  8113 00005D0B D1542404                                rcl     dword [esp+4], 1
  8114 00005D0F D1542408                                rcl     dword [esp+8], 1
  8115 00005D13 D154240C                                rcl     dword [esp+0Ch], 1
  8116 00005D17 D1542410                                rcl     dword [esp+10h], 1
  8117 00005D1B D1542414                                rcl     dword [esp+14h], 1
  8118 00005D1F D12424                                  shl     dword [esp], 1
  8119 00005D22 D1542404                                rcl     dword [esp+4], 1
  8120 00005D26 D1542408                                rcl     dword [esp+8], 1
  8121 00005D2A D154240C                                rcl     dword [esp+0Ch], 1
  8122 00005D2E D1542410                                rcl     dword [esp+10h], 1
  8123 00005D32 D1542414                                rcl     dword [esp+14h], 1
  8124 00005D36 2974240C                                sub     [esp+0Ch], esi
  8125 00005D3A 197C2410                                sbb     [esp+10h], edi  ; sub/compare
  8126 00005D3E 196C2414                                sbb     [esp+14h], ebp
  8127 00005D42 730D                                    jnb     short .next
  8128 00005D44 4B                                      dec     ebx
  8129 00005D45 0174240C                                add     [esp+0Ch], esi
  8130 00005D49 117C2410                                adc     [esp+10h], edi  ; undo
  8131 00005D4D 116C2414                                adc     [esp+14h], ebp
  8132                                  
  8133                                  .next:
  8134 00005D51 FECD                                    dec     ch
  8135 00005D53 7581                                    jnz     short .lop
  8136 00005D55 83C418                                  add     esp, 18h
  8137                                  mp3_init_log_constants:
  8138 00005D58 C3                                      retn
  8139                                  
  8140                                  ;mp3_init_log_constants:
  8141                                  ;                retn
  8142                                  
  8143                                  ; =============== S U B R O U T I N E =======================================
  8144                                  
  8145                                  
  8146                                  mp3_build_huff_table_root:
  8147 00005D59 A3[7C2C0500]                            mov     [_@@nb_codes], eax ; "init_vlc"
  8148 00005D5E C705[802C0500]0000-                     mov     dword [_@@prefix_numbits], 0
  8148 00005D66 0000               
  8149 00005D68 C705[842C0500]0000-                     mov     dword [_@@prefix_pattern], 0
  8149 00005D70 0000               
  8150 00005D72 60                                      pusha
  8151 00005D73 89C1                                    mov     ecx, eax
  8152 00005D75 31C0                                    xor     eax, eax
  8153                                  
  8154                                  .prescan_lop:
  8155 00005D77 3A03                                    cmp     al, [ebx]
  8156 00005D79 7702                                    ja      short .prescan_next
  8157 00005D7B 8A03                                    mov     al, [ebx]
  8158                                  
  8159                                  .prescan_next:
  8160 00005D7D 43                                      inc     ebx
  8161 00005D7E E2F7                                    loop    .prescan_lop
  8162 00005D80 3C09                                    cmp     al, 9           ; CHILD_BITS
  8163 00005D82 7202                                    jb      short .prescan_this_limit
  8164 00005D84 B009                                    mov     al, 9
  8165                                  
  8166                                  .prescan_this_limit:
  8167 00005D86 A3[782C0500]                            mov     [_@@table_nb_bits], eax
  8168 00005D8B 61                                      popa
  8169                                  
  8170                                  mp3_build_huff_table_recursive_child:
  8171 00005D8C 8B0D[782C0500]                          mov     ecx, [_@@table_nb_bits]
  8172 00005D92 B801000000                              mov     eax, 1
  8173 00005D97 D3E0                                    shl     eax, cl
  8174 00005D99 A3[882C0500]                            mov     [_@@curr_table_size], eax
  8175 00005D9E 48                                      dec     eax
  8176 00005D9F A3[8C2C0500]                            mov     [_@@curr_table_mask], eax
  8177 00005DA4 60                                      pusha
  8178 00005DA5 8B1D[8C840000]                          mov     ebx, [mp3_huff_num_entries]
  8179 00005DAB 891D[902C0500]                          mov     [_@@curr_table_index], ebx
  8180 00005DB1 031D[882C0500]                          add     ebx, [_@@curr_table_size]
  8181 00005DB7 891D[8C840000]                          mov     [mp3_huff_num_entries], ebx
  8182 00005DBD 813D[8C840000]002E-                     cmp     dword [mp3_huff_num_entries], 11776 ; HUFF_TREE_SIZE/4
  8182 00005DC5 0000               
  8183 00005DC7 0F8781AFFFFF                            ja      fatalunexpected
  8184 00005DCD 61                                      popa
  8185 00005DCE BF[601F0100]                            mov     edi, huff_tree_buf
  8186 00005DD3 A1[902C0500]                            mov     eax, [_@@curr_table_index]
  8187 00005DD8 66890497                                mov     [edi+edx*4], ax
  8188 00005DDC A1[782C0500]                            mov     eax, [_@@table_nb_bits]
  8189 00005DE1 F7D8                                    neg     eax
  8190 00005DE3 6689449702                              mov     [edi+edx*4+2], ax
  8191 00005DE8 BF[601F0100]                            mov     edi, huff_tree_buf
  8192 00005DED 8B15[902C0500]                          mov     edx, [_@@curr_table_index]
  8193 00005DF3 8B0D[882C0500]                          mov     ecx, [_@@curr_table_size]
  8194                                  
  8195                                  .clear_table_lop:
  8196 00005DF9 66C70497FFFF                            mov     word [edi+edx*4], 0FFFFh
  8197 00005DFF 66C74497020000                          mov     word [edi+edx*4+2], 0
  8198 00005E06 42                                      inc     edx
  8199 00005E07 E2F0                                    loop    .clear_table_lop
  8200 00005E09 53                                      push    ebx
  8201 00005E0A 56                                      push    esi
  8202 00005E0B 31D2                                    xor     edx, edx
  8203                                  
  8204                                  .make_table_lop:
  8205 00005E0D 0FB60B                                  movzx   ecx, byte [ebx]
  8206 00005E10 0FB706                                  movzx   eax, word [esi]
  8207 00005E13 2B0D[802C0500]                          sub     ecx, [_@@prefix_numbits]
  8208 00005E19 7E74                                    jle     short .make_table_lop_next
  8209 00005E1B D3E8                                    shr     eax, cl
  8210 00005E1D 3B05[842C0500]                          cmp     eax, [_@@prefix_pattern]
  8211 00005E23 756A                                    jnz     short .make_table_lop_next
  8212 00005E25 BF[601F0100]                            mov     edi, huff_tree_buf
  8213 00005E2A 0FB706                                  movzx   eax, word [esi]
  8214 00005E2D 2B0D[782C0500]                          sub     ecx, [_@@table_nb_bits]
  8215 00005E33 773E                                    ja      short .create_child_table
  8216 00005E35 F7D9                                    neg     ecx
  8217 00005E37 D3E0                                    shl     eax, cl
  8218 00005E39 2305[8C2C0500]                          and     eax, [_@@curr_table_mask]
  8219 00005E3F 0305[902C0500]                          add     eax, [_@@curr_table_index]
  8220 00005E45 8D3C87                                  lea     edi, [edi+eax*4]
  8221 00005E48 B801000000                              mov     eax, 1
  8222 00005E4D D3E0                                    shl     eax, cl
  8223 00005E4F 89C1                                    mov     ecx, eax
  8224 00005E51 0FB603                                  movzx   eax, byte [ebx]
  8225 00005E54 2B05[802C0500]                          sub     eax, [_@@prefix_numbits]
  8226                                  
  8227                                  .make_rept_lop:
  8228 00005E5A 66837F0200                              cmp     word [edi+2], 0
  8229 00005E5F 0F85E9AEFFFF                            jnz     fatalunexpected
  8230 00005E65 668917                                  mov     [edi], dx
  8231 00005E68 66894702                                mov     [edi+2], ax
  8232 00005E6C 83C704                                  add     edi, 4
  8233 00005E6F E2E9                                    loop    .make_rept_lop
  8234 00005E71 EB1C                                    jmp     short .make_table_lop_next
  8235                                  
  8236                                  .create_child_table:
  8237 00005E73 D3E8                                    shr     eax, cl
  8238 00005E75 2305[8C2C0500]                          and     eax, [_@@curr_table_mask]
  8239 00005E7B 0305[902C0500]                          add     eax, [_@@curr_table_index]
  8240 00005E81 F7D9                                    neg     ecx
  8241 00005E83 66394C8702                              cmp     [edi+eax*4+2], cx
  8242 00005E88 7C05                                    jl      short .make_table_lop_next
  8243 00005E8A 66894C8702                              mov     [edi+eax*4+2], cx
  8244                                  
  8245                                  .make_table_lop_next:
  8246 00005E8F 83C602                                  add     esi, 2
  8247 00005E92 43                                      inc     ebx
  8248 00005E93 42                                      inc     edx
  8249 00005E94 3B15[7C2C0500]                          cmp     edx, [_@@nb_codes]
  8250 00005E9A 0F826DFFFFFF                            jb      .make_table_lop
  8251 00005EA0 5E                                      pop     esi
  8252 00005EA1 5B                                      pop     ebx
  8253 00005EA2 8B0D[882C0500]                          mov     ecx, [_@@curr_table_size]
  8254 00005EA8 8B15[902C0500]                          mov     edx, [_@@curr_table_index]
  8255                                  
  8256                                  .make_child_tables_lop:
  8257 00005EAE BF[601F0100]                            mov     edi, huff_tree_buf
  8258 00005EB3 0FBF449702                              movsx   eax, word [edi+edx*4+2]
  8259 00005EB8 83F800                                  cmp     eax, 0
  8260 00005EBB 796D                                    jns     short .make_child_tables_lop_next
  8261 00005EBD F7D8                                    neg     eax
  8262 00005EBF 3B05[782C0500]                          cmp     eax, [_@@table_nb_bits]
  8263 00005EC5 7605                                    jbe     short .make_child_tables_this
  8264 00005EC7 A1[782C0500]                            mov     eax, [_@@table_nb_bits]
  8265                                  
  8266                                  .make_child_tables_this:
  8267 00005ECC 51                                      push	ecx
  8268 00005ECD 52                                      push	edx
  8269 00005ECE FF35[902C0500]                          push	dword [_@@curr_table_index]
  8270 00005ED4 FF35[782C0500]                          push	dword [_@@table_nb_bits]
  8271 00005EDA FF35[802C0500]                          push	dword [_@@prefix_numbits]
  8272 00005EE0 FF35[842C0500]                          push	dword [_@@prefix_pattern]
  8273 00005EE6 8B0D[782C0500]                          mov	ecx, [_@@table_nb_bits]
  8274 00005EEC A3[782C0500]                            mov	[_@@table_nb_bits], eax
  8275 00005EF1 010D[802C0500]                          add	[_@@prefix_numbits], ecx
  8276 00005EF7 D325[842C0500]                          shl	dword [_@@prefix_pattern], cl
  8277 00005EFD 89D0                                    mov	eax, edx
  8278 00005EFF 2B05[902C0500]                          sub	eax, [_@@curr_table_index]
  8279 00005F05 0905[842C0500]                          or	[_@@prefix_pattern], eax
  8280 00005F0B E87CFEFFFF                              call	mp3_build_huff_table_recursive_child
  8281 00005F10 8F05[842C0500]                          pop	dword [_@@prefix_pattern]
  8282 00005F16 8F05[802C0500]                          pop	dword [_@@prefix_numbits]
  8283 00005F1C 8F05[782C0500]                          pop	dword [_@@table_nb_bits]
  8284 00005F22 8F05[902C0500]                          pop	dword [_@@curr_table_index]
  8285 00005F28 5A                                      pop	edx
  8286 00005F29 59                                      pop	ecx
  8287                                  
  8288                                  .make_child_tables_lop_next:
  8289 00005F2A 42                                      inc	edx
  8290 00005F2B E281                                    loop	.make_child_tables_lop
  8291 00005F2D C3                                      retn
  8292                                  
  8293                                  
  8294                                  ; =============== S U B R O U T I N E =======================================
  8295                                  
  8296                                  
  8297                                  mp3_exclude_id3_and_tag:
  8298 00005F2E 8B35[A02C0500]                          mov     esi, [stream_pos]
  8299 00005F34 8B0D[A42C0500]                          mov     ecx, [bytes_left]
  8300 00005F3A 83F90A                                  cmp     ecx, 10
  8301 00005F3D 7240                                    jb      short .no_id3
  8302 00005F3F 8B06                                    mov     eax, [esi]
  8303 00005F41 25FFFFFF00                              and     eax, 0FFFFFFh
  8304                                                  ;cmp    eax, '3DI'     ; "ID3"
  8305                                                  ; 20/10/2024 
  8306 00005F46 3D49443300                              cmp     eax, 'ID3'     ; FASM & NASM syntax
  8307 00005F4B 7532                                    jnz     short .no_id3
  8308 00005F4D 8B4606                                  mov     eax, [esi+6]
  8309 00005F50 A980808080                              test    eax, 80808080h
  8310 00005F55 7528                                    jnz     short .no_id3
  8311                                  
  8312                                  .xlat_4x7bit_to_28bit:
  8313 00005F57 86E0                                    xchg    al, ah
  8314 00005F59 D0E0                                    shl     al, 1
  8315 00005F5B 66D1E0                                  shl     ax, 1
  8316 00005F5E 66C1E802                                shr     ax, 2
  8317 00005F62 C1C810                                  ror     eax, 16
  8318 00005F65 86E0                                    xchg    al, ah
  8319 00005F67 D0E0                                    shl     al, 1
  8320 00005F69 66D1E0                                  shl     ax, 1
  8321 00005F6C C1E802                                  shr     eax, 2
  8322 00005F6F 83C00A                                  add     eax, 10
  8323 00005F72 39C1                                    cmp     ecx, eax
  8324 00005F74 7209                                    jb      short .no_id3
  8325 00005F76 01C6                                    add     esi, eax
  8326 00005F78 29C1                                    sub     ecx, eax
  8327 00005F7A A3[20F40000]                            mov     [mp3_id3_size], eax
  8328                                  
  8329                                  .no_id3:
  8330 00005F7F BA80000000                              mov     edx, 80h
  8331 00005F84 39D1                                    cmp     ecx, edx
  8332 00005F86 721F                                    jb      short .no_tag_or_ext
  8333 00005F88 8B440E80                                mov     eax, [esi+ecx-80h]
  8334 00005F8C 25FFFFFF00                              and     eax, 0FFFFFFh
  8335                                                  ;cmp    eax, 'GAT'     ; "TAG"
  8336                                                  ; 20/10/2024
  8337 00005F91 3D54414700                              cmp     eax, 'TAG'     ; FASM & NASM syntax
  8338 00005F96 0F8421010000                            jz      .got_tag_size_edx
  8339                                                  ;cmp    eax, 'TXE'
  8340 00005F9C 3D45585400                              cmp     eax, 'EXT'
  8341 00005FA1 0F8416010000                            jz      .got_tag_size_edx
  8342                                  
  8343                                  .no_tag_or_ext:
  8344 00005FA7 BAE3000000                              mov     edx, 0E3h
  8345 00005FAC 39D1                                    cmp     ecx, edx
  8346 00005FAE 7211                                    jb      short .no_tagplus
  8347                                                  ;cmp    dword [esi+ecx-0E3h], '+GAT' ; "TAG+"
  8348                                                  ; 20/10/2024
  8349 00005FB0 81BC0E1DFFFFFF5441-                     cmp     dword [esi+ecx-0E3h], 'TAG+'
  8349 00005FB9 472B               
  8350 00005FBB 0F84FC000000                            jz      .got_tag_size_edx
  8351                                  
  8352                                  .no_tagplus:
  8353 00005FC1 BA14000000                              mov     edx, 20        ; 10+10
  8354 00005FC6 39D1                                    cmp     ecx, edx
  8355 00005FC8 723C                                    jb      short .no_3di  ; "3DI",04h
  8356 00005FCA 817C0EF633444904                        cmp     dword [esi+ecx-10], 4494433h ; 'ID3'+04000000h
  8357 00005FD2 7532                                    jnz     short .no_3di
  8358 00005FD4 F6440EFB10                              test    byte [esi+ecx-5], 10h ; bit 4
  8359 00005FD9 742B                                    jz      short .no_3di
  8360 00005FDB 8B440EFC                                mov     eax, [esi+ecx-4]
  8361 00005FDF A980808080                              test    eax, 80808080h
  8362 00005FE4 7520                                    jnz     short .no_3di
  8363                                  
  8364                                  .@xlat_4x7bit_to_28bit:
  8365 00005FE6 86E0                                    xchg    al, ah
  8366 00005FE8 D0E0                                    shl     al, 1
  8367 00005FEA 66D1E0                                  shl     ax, 1
  8368 00005FED 66C1E802                                shr     ax, 2
  8369 00005FF1 C1C810                                  ror     eax, 10h
  8370 00005FF4 86E0                                    xchg    al, ah
  8371 00005FF6 D0E0                                    shl     al, 1
  8372 00005FF8 66D1E0                                  shl     ax, 1
  8373 00005FFB C1E802                                  shr     eax, 2
  8374 00005FFE 8D5014                                  lea     edx, [eax+20]  ; [eax+10+10] ; hdr+footer siz
  8375 00006001 E9B7000000                              jmp     .got_tag_size_edx
  8376                                  
  8377                                  .no_3di:
  8378                                                  ;cmp    dword [esi+ecx-32], 'TEPA' ; [esi+ecx-32+0]
  8379                                                  ; 20/10/2024
  8380 00006006 817C0EE041504554                        cmp     dword [esi+ecx-32], 'APET'
  8381                                                                         ; check "APETAGEX"
  8382 0000600E 7520                                    jnz     short .no_ape
  8383                                                  ;cmp    dword [esi+ecx-28], 'XEGA' ; [esi+ecx-32+4]
  8384 00006010 817C0EE441474558                        cmp     dword [esi+ecx-28], 'AGEX'
  8385 00006018 7516                                    jnz     short .no_ape
  8386 0000601A 8B540EEC                                mov     edx, [esi+ecx-20] ; [esi+ecx-32+12] ; get size
  8387 0000601E F7440EF400000080                        test    dword [esi+ecx-12], 80000000h ; [esi+ecx-32+20],1 shl 31
  8388 00006026 7403                                    jz      short .no_ape_header
  8389 00006028 83C220                                  add     edx, 32        ; hdr.size
  8390                                  
  8391                                  .no_ape_header: 
  8392 0000602B E98D000000                              jmp     .got_tag_size_edx
  8393                                  
  8394                                  .no_ape:
  8395 00006030 BA14000000                              mov     edx, 20        ; 11+9
  8396 00006035 39D1                                    cmp     ecx, edx       ; "LYRICSEND" or "LYRICS200"
  8397                                                                         ; (11+N+9 bytes each)
  8398 00006037 7258                                    jb      short .no_lyrics
  8399                                                  ;cmp    dword [esi+ecx-9], 'IRYL'
  8400                                                  ; 20/10/2024
  8401 00006039 817C0EF74C595249                        cmp     dword [esi+ecx-9], 'LYRI' ; FASM & NASM syntax
  8402 00006041 754E                                    jnz     short .no_lyrics
  8403 00006043 807C0EFB43                              cmp     byte [esi+ecx-5], 'C'
  8404 00006048 7547                                    jnz     short .no_lyrics
  8405                                                  ;cmp    dword [esi+ecx-4], 'DNES'
  8406 0000604A 817C0EFC53454E44                        cmp     dword [esi+ecx-4], 'SEND'
  8407 00006052 740C                                    jz      short .lyrics3_v1
  8408                                                  ;cmp    dword [esi+ecx-4], '002S'
  8409 00006054 817C0EFC53323030                        cmp     dword [esi+ecx-4], 'S200'
  8410 0000605C 7440                                    jz      short .lyrics3_v2
  8411 0000605E 7531                                    jnz     short .no_lyrics
  8412                                  
  8413                                  .lyrics3_v1:
  8414 00006060 BA14000000                              mov     edx, 20        ; 11+9
  8415                                  
  8416                                  .lyrics3_v1_size_lop:
  8417 00006065 8D040E                                  lea     eax, [esi+ecx]
  8418 00006068 29D0                                    sub     eax, edx
  8419                                                  ;cmp    dword [eax], 'IRYL' ; "LYRICSBEGIN"
  8420                                                  ; 20/10/2024
  8421 0000606A 81384C595249                            cmp     dword [eax], 'LYRI'
  8422 00006070 7512                                    jnz     short .lyrics3_v1_size_next
  8423                                                  ;cmp    dword [eax+4], 'EBSC'
  8424 00006072 81780443534245                          cmp     dword [eax+4], 'CSBE'
  8425 00006079 7509                                    jnz     short .lyrics3_v1_size_next
  8426                                                  ;cmp    dword [eax+7], 'NIGE'
  8427 0000607B 8178074547494E                          cmp     dword [eax+7], 'EGIN'
  8428 00006082 7439                                    jz      short .got_tag_size_edx
  8429                                  
  8430                                  .lyrics3_v1_size_next:
  8431 00006084 42                                      inc     edx
  8432 00006085 81FA00140000                            cmp     edx, 5120
  8433 0000608B 7704                                    ja      short .no_lyrics
  8434 0000608D 39CA                                    cmp     edx, ecx
  8435 0000608F 76D4                                    jbe     short .lyrics3_v1_size_lop
  8436                                                  ;jmp     short .no_lyrics
  8437                                  
  8438                                  .no_lyrics:
  8439                                                  ;jmp    short .footer_tag_all_done
  8440                                  		; 22/10/2024
  8441                                  .footer_tag_all_done:
  8442 00006091 8935[A02C0500]                          mov     [stream_pos], esi
  8443 00006097 890D[A42C0500]                          mov     [bytes_left], ecx
  8444 0000609D C3                                      retn
  8445                                  
  8446                                  .lyrics3_v2:
  8447 0000609E 51                                      push    ecx
  8448 0000609F 56                                      push    esi
  8449 000060A0 8D740EF1                                lea     esi, [esi+ecx-15] ; [esi+ecx-6-9]
  8450 000060A4 B906000000                              mov     ecx, 6
  8451 000060A9 31D2                                    xor     edx, edx
  8452                                  
  8453                                  .lyrics3_v2_size_lop:
  8454 000060AB 6BD20A                                  imul    edx, 10
  8455 000060AE 0FB606                                  movzx   eax, byte [esi]
  8456 000060B1 46                                      inc     esi
  8457 000060B2 2C30                                    sub     al, 30h
  8458 000060B4 01C2                                    add     edx, eax
  8459 000060B6 E2F3                                    loop    .lyrics3_v2_size_lop
  8460 000060B8 5E                                      pop     esi
  8461 000060B9 59                                      pop     ecx
  8462 000060BA 83C20F                                  add     edx, 0Fh       ; 6+9
  8463                                                  ;jmp    short .got_tag_size_edx
  8464                                  
  8465                                  .got_tag_size_edx:
  8466                                  		;;;
  8467                                  		; 22/10/2024
  8468 000060BD 29D1                                    sub    ecx, edx
  8469 000060BF 7311                                    jnb    short .cont
  8470                                  		;;;
  8471 000060C1 89D0                                    mov     eax, edx
  8472 000060C3 E853050000                              call    wr_decimal_eax
  8473 000060C8 E822050000                              call    wrcrlf
  8474                                                  ;;;
  8475                                  		;sub    ecx, edx
  8476                                                  ;jb     fatalunexpected
  8477 000060CD E97CACFFFF              		jmp	fatalunexpected
  8478                                  .cont:
  8479                                  		;;;
  8480 000060D2 0115[24F40000]                          add     [mp3_tag_size], edx
  8481 000060D8 E9A2FEFFFF                              jmp     .no_id3
  8482                                  
  8483                                  
  8484                                  ; =============== S U B R O U T I N E =======================================
  8485                                  
  8486                                  
  8487                                  mp3_detect_free_format_block_size:
  8488 000060DD 833D[9CF30000]00                        cmp     dword [mp3_free_format_frame_size], 0
  8489 000060E4 0F85A5000000                            jnz     .already_detected
  8490 000060EA 31D2                                    xor     edx, edx
  8491                                  
  8492                                  .find_distance_lop:
  8493 000060EC 3B15[4CF40000]                          cmp     edx, [mp3_src_remain]
  8494 000060F2 742B                                    jz      short .match_eof
  8495 000060F4 8D4204                                  lea     eax, [edx+4]
  8496 000060F7 3B05[4CF40000]                          cmp     eax, [mp3_src_remain]
  8497 000060FD 771E                                    ja      short .find_distance_failed
  8498 000060FF 8B0416                                  mov     eax, [esi+edx]
  8499 00006102 E8EDA0FFFF                              call    bswap_eax
  8500 00006107 3305[4C9D0000]                          xor     eax, [mp3_hdr_32bit_header]
  8501 0000610D 25000CFEFF                              and     eax, 0FFFE0C00h
  8502 00006112 740B                                    jz      short .match_eof
  8503                                  
  8504                                  .find_distance_next:
  8505 00006114 42                                      inc     edx
  8506 00006115 81FA00100000                            cmp     edx, 1000h
  8507 0000611B 76CF                                    jbe     short .find_distance_lop
  8508                                  
  8509                                  .find_distance_failed:
  8510 0000611D F9                                      stc
  8511 0000611E C3                                      retn
  8512                                  
  8513                                  .match_eof:
  8514 0000611F 89D0                                    mov     eax, edx
  8515 00006121 2B05[589D0000]                          sub     eax, [mp3_hdr_flag_padding]
  8516 00006127 83F804                                  cmp     eax, 4
  8517 0000612A 72E8                                    jb      short .find_distance_next
  8518 0000612C A3[9CF30000]                            mov     [mp3_free_format_frame_size], eax
  8519 00006131 31DB                                    xor     ebx, ebx
  8520                                  
  8521                                  .confirm_distance_lop:
  8522 00006133 8B041E                                  mov     eax, [esi+ebx]
  8523 00006136 E8B9A0FFFF                              call    bswap_eax
  8524 0000613B C1E80A                                  shr     eax, 10         ; 9+1
  8525 0000613E 131D[9CF30000]                          adc     ebx, [mp3_free_format_frame_size]
  8526 00006144 3B1D[4CF40000]                          cmp     ebx, [mp3_src_remain]
  8527 0000614A 7422                                    jz      short .confirm_distance_match_eof
  8528 0000614C 8D4304                                  lea     eax, [ebx+4]
  8529 0000614F 3B05[4CF40000]                          cmp     eax, [mp3_src_remain]
  8530 00006155 77BD                                    ja      short .find_distance_next
  8531 00006157 8B041E                                  mov     eax, [esi+ebx]
  8532 0000615A E895A0FFFF                              call    bswap_eax
  8533 0000615F 3305[4C9D0000]                          xor     eax, [mp3_hdr_32bit_header]
  8534 00006165 25000CFEFF                              and     eax, 0FFFE0C00h
  8535 0000616A 75A8                                    jnz     short .find_distance_next
  8536 0000616C EBC5                                    jmp     short .confirm_distance_lop
  8537                                  
  8538                                  .confirm_distance_match_eof:
  8539 0000616E A1[9CF30000]                            mov     eax, [mp3_free_format_frame_size]
  8540 00006173 C1E003                                  shl     eax, 3
  8541 00006176 F725[5C9D0000]                          mul     dword [mp3_sample_rate]
  8542 0000617C 8B0D[5CF40000]                          mov     ecx, [mp3_nb_granules]
  8543 00006182 69C940020000                            imul    ecx, 240h
  8544 00006188 F7F1                                    div     ecx
  8545 0000618A A3[649D0000]                            mov     [mp3_bit_rate], eax
  8546                                  
  8547                                  .already_detected:
  8548 0000618F F8                                      clc
  8549 00006190 C3                                      retn
  8550                                  
  8551                                  
  8552                                  ; =============== S U B R O U T I N E =======================================
  8553                                  
  8554                                  
  8555                                  mp3_check_xing_info:
  8556 00006191 C705[A4F30000]0000-                     mov     dword [mp3_xing_id], 0
  8556 00006199 0000               
  8557 0000619B C705[ACF30000]0000-                     mov     dword [mp3_xing_frames], 0
  8557 000061A3 0000               
  8558 000061A5 C705[B0F30000]0000-                     mov     dword [mp3_xing_filesize], 0
  8558 000061AD 0000               
  8559 000061AF 8B35[409D0000]                          mov     esi, [mp3_src_data_location]
  8560 000061B5 AD                                      lodsd
  8561                                                  ;cmp    eax, 'gniX'
  8562                                  		; 20/10/2024
  8563 000061B6 3D58696E67              		cmp	eax, 'Xing'     ; FASM & NASM syntax
  8564 000061BB 7401                                    jz      short .xing
  8565 000061BD C3                                      retn
  8566                                  
  8567                                  .xing:
  8568 000061BE A3[A4F30000]                            mov     [mp3_xing_id], eax
  8569 000061C3 AD                                      lodsd
  8570 000061C4 E82BA0FFFF                              call    bswap_eax
  8571 000061C9 A3[A8F30000]                            mov     [mp3_xing_flags], eax
  8572 000061CE 89C2                                    mov     edx, eax
  8573 000061D0 F7C201000000                            test    edx, 1
  8574 000061D6 740B                                    jz      short .no_xing_frames
  8575 000061D8 AD                                      lodsd
  8576 000061D9 E816A0FFFF                              call    bswap_eax
  8577 000061DE A3[ACF30000]                            mov     [mp3_xing_frames], eax
  8578                                  
  8579                                  .no_xing_frames:
  8580 000061E3 F7C202000000                            test    edx, 2          ; 1 shl 1
  8581 000061E9 740B                                    jz      short .no_xing_filesize
  8582 000061EB AD                                      lodsd
  8583 000061EC E803A0FFFF                              call    bswap_eax
  8584 000061F1 A3[B0F30000]                            mov     [mp3_xing_filesize], eax
  8585                                  
  8586                                  .no_xing_filesize:
  8587 000061F6 F7C204000000                            test    edx, 4          ; 1 shl 2
  8588 000061FC 740C                                    jz      short .no_xing_toc
  8589 000061FE B964000000                              mov     ecx, 100
  8590 00006203 BF[B4F30000]                            mov     edi, mp3_xing_toc
  8591 00006208 F3A4                                    rep movsb
  8592                                  
  8593                                  .no_xing_toc:
  8594 0000620A F7C208000000                            test    edx, 8          ; 1 shl 3
  8595 00006210 740B                                    jz      short .no_xing_vbr_scale
  8596 00006212 AD                                      lodsd
  8597 00006213 E8DC9FFFFF                              call    bswap_eax
  8598 00006218 A3[18F40000]                            mov     [mp3_xing_vbr_scale], eax
  8599                                  
  8600                                  .no_xing_vbr_scale:
  8601 0000621D C705[649D0000]0000-                     mov	dword [mp3_bit_rate], 0
  8601 00006225 0000               
  8602 00006227 A1[5C9D0000]                            mov	eax, [mp3_sample_rate]
  8603 0000622C C1E003                                  shl	eax, 3
  8604 0000622F F725[B0F30000]                          mul	dword [mp3_xing_filesize]
  8605 00006235 8B0D[ACF30000]                          mov	ecx, [mp3_xing_frames]
  8606 0000623B 0FAF0D[5CF40000]                        imul	ecx, [mp3_nb_granules]
  8607 00006242 69C940020000                            imul	ecx, 576        ; 18*32
  8608 00006248 39CA                                    cmp	edx, ecx
  8609 0000624A 7307                                    jnb	short .overflow
  8610 0000624C F7F1                                    div	ecx
  8611 0000624E A3[649D0000]                            mov	[mp3_bit_rate], eax
  8612                                  
  8613                                  .overflow:
  8614 00006253 C3                                      retn
  8615                                  
  8616                                  
  8617                                  ; =============== S U B R O U T I N E =======================================
  8618                                  
  8619                                  		; 20/10/2024
  8620                                  mp3_decode_frame:
  8621 00006254 890D[4CF40000]                          mov     [mp3_src_remain], ecx
  8622 0000625A 893D[30F40000]                          mov     [mp3_samples_dst], edi
  8623 00006260 F605[F0750000]10                        test    byte [cpuid_flags], 10h
  8624 00006267 740E                                    jz      short .no_rdtsc_supported@@@@
  8625 00006269 0F31                                    rdtsc
  8626 0000626B 2905[B0770000]                          sub     [rdtsc_total], eax
  8627 00006271 1915[B4770000]                          sbb     [rdtsc_total+4], edx
  8628                                  
  8629                                  .no_rdtsc_supported@@@@:
  8630 00006277 E8DC9FFFFF                              call    mp3_search_get_header
  8631 0000627C 0F8294010000                            jc      .error
  8632 00006282 A1[449D0000]                            mov     eax, [mp3_src_frame_size]
  8633 00006287 83F800                                  cmp     eax, 0
  8634 0000628A 0F8E86010000                            jle     .error
  8635 00006290 3B05[4CF40000]                          cmp     eax, [mp3_src_remain]
  8636 00006296 0F877A010000                            ja      .error
  8637 0000629C 8935[48F40000]                          mov     [mp3_bitstream_start], esi
  8638                                  		; 11/01/2025
  8639                                  		;mov	eax, 32
  8640                                  
  8641                                  .mp3mac_bitstream_set_position:
  8642                                  		; 22/10/2024
  8643                                                  ;mov    esi, [mp3_bitstream_start]
  8644                                                  ;mov    cl, al
  8645                                                  ;shr    eax, 3
  8646                                                  ;and    cl, 7
  8647                                                  ;mov	eax, 4
  8648                                                  ;add    esi, eax
  8649 000062A2 83C604                                  add     esi, 4
  8650 000062A5 E8529FFFFF                              call    mp3_recollect_bits
  8651                                  
  8652                                  .mp3mac_get_n_bits:
  8653                                                  ;mov    eax, ebp        ; mp3_col32
  8654                                                  ;shl    ebp, cl
  8655                                                  ;rol    eax, cl
  8656                                                  ;xor    eax, ebp        ; mp3_col32
  8657                                                  ;sub    ch, cl          ; sub mp3_colNN,num
  8658                                                  ;jns    short .cont
  8659                                                  ;mov    cl, ch          ; mov cl,mp3_colNN
  8660                                                  ;add    ch, 16
  8661                                                  ;rol    ebp, cl         ; rol mp3_col32,cl
  8662                                                  ;mov    bp, [esi]       ; mov mp3_col16,word ptr [esi]
  8663                                                  ;add    esi, 2
  8664                                                  ;ror    bp, 8           ; endianess
  8665                                                  ;ror    ebp, cl         ; ror mp3_col32,cl
  8666                                  
  8667                                  .cont:
  8668 000062AA E8AFA1FFFF                              call	mp3_bitstream_read_header_extra
  8669 000062AF E839A3FFFF                              call	mp3_bitstream_read_granules
  8670 000062B4 0F825C010000                            jc	.error
  8671 000062BA E88D9FFFFF                              call	mp3_uncollect_bits
  8672 000062BF 8935[409D0000]                          mov	[mp3_src_data_location], esi
  8673 000062C5 833D[30F40000]00                        cmp	dword [mp3_samples_dst], 0
  8674 000062CC 0F840F010000                            jz	.skip_decoding
  8675 000062D2 E8ECA7FFFF                              call	mp3_bitstream_append_to_main_data_pool
  8676 000062D7 833D[34F40000]00                        cmp	dword [mp3_samples_output_size], 0
  8677 000062DE 0F84FD000000                            jz	.skip_decoding
  8678 000062E4 C705[40F40000]0000-                     mov	dword [mp3_curr_granule], 0
  8678 000062EC 0000               
  8679 000062EE BB[60F40000]                            mov	ebx, mp3_granules
  8680                                  
  8681                                  .body_granule_lop:
  8682 000062F3 891D[942C0500]                          mov	[_@@granule_addr], ebx
  8683 000062F9 C705[3CF40000]0000-                     mov	dword [mp3_curr_channel], 0
  8683 00006301 0000               
  8684                                  
  8685                                  .body_channel_lop:
  8686 00006303 8B4304                                  mov     eax, [ebx+4]    ; [ebx+$mp3gr_part2_3_start]
  8687 00006306 8B35[48F40000]                          mov     esi, [mp3_bitstream_start]
  8688 0000630C 88C1                                    mov     cl, al          ; mp3mac_bitstream_set_position
  8689 0000630E C1E803                                  shr     eax, 3
  8690 00006311 80E107                                  and     cl, 7
  8691 00006314 01C6                                    add     esi, eax
  8692 00006316 E8E19EFFFF                              call    mp3_recollect_bits
  8693 0000631B 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
  8694 0000631D D3E5                                    shl     ebp, cl
  8695 0000631F D3C0                                    rol     eax, cl
  8696 00006321 31E8                                    xor     eax, ebp
  8697 00006323 28CD                                    sub     ch, cl
  8698 00006325 7913                                    jns     short .cont@
  8699 00006327 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  8700 00006329 80C510                                  add     ch, 16
  8701 0000632C D3C5                                    rol     ebp, cl
  8702 0000632E 668B2E                                  mov     bp, [esi]
  8703 00006331 83C602                                  add     esi, 2
  8704 00006334 66C1CD08                                ror     bp, 8
  8705 00006338 D3CD                                    ror     ebp, cl
  8706                                  
  8707                                  .cont@:
  8708 0000633A E81AA8FFFF                              call    mp3_bitstream_read_scalefacs
  8709 0000633F E812AAFFFF                              call    mp3_get_exponents_from_scale_factors
  8710 00006344 E856ABFFFF                              call    mp3_huffman_decode ; reads up to $mp3gr_part2_3_end
  8711 00006349 0F82C7000000                            jc      .error
  8712                                  
  8713                                  .body_channel_next:
  8714 0000634F 81C340130000                            add	ebx, 4928       ; $mp3gr_entrysiz*2
  8715 00006355 FF05[3CF40000]                          inc	dword [mp3_curr_channel]
  8716 0000635B A1[3CF40000]                            mov	eax, [mp3_curr_channel]
  8717 00006360 3B05[6C9D0000]                          cmp	eax, [mp3_output_num_channels]
  8718 00006366 729B                                    jb	short .body_channel_lop
  8719 00006368 8B1D[942C0500]                          mov	ebx, [_@@granule_addr]
  8720                                  
  8721                                  .mp3mac_push_bitstream:
  8722 0000636E 51                                      push	ecx
  8723 0000636F 55                                      push	ebp
  8724 00006370 56                                      push	esi
  8725 00006371 E827B0FFFF                              call	mp3_compute_stereo
  8726 00006376 C705[3CF40000]0000-                     mov	dword [mp3_curr_channel], 0
  8726 0000637E 0000               
  8727                                  
  8728                                  .cast_channel_lop:
  8729 00006380 E8F0B2FFFF                              call    mp3_reorder_block
  8730 00006385 E885B3FFFF                              call    mp3_compute_antialias
  8731 0000638A E870BCFFFF                              call    mp3_compute_imdct
  8732 0000638F 81C340130000                            add     ebx, 4928       ; $mp3gr_entrysiz*2
  8733 00006395 FF05[3CF40000]                          inc	dword [mp3_curr_channel]
  8734 0000639B A1[3CF40000]                            mov     eax, [mp3_curr_channel]
  8735 000063A0 3B05[6C9D0000]                          cmp     eax, [mp3_output_num_channels]
  8736 000063A6 72D8                                    jc      short .cast_channel_lop
  8737                                  
  8738                                  .mp3mac_pop_bitstream:
  8739 000063A8 5E                                      pop	esi
  8740 000063A9 5D                                      pop	ebp
  8741 000063AA 59                                      pop	ecx
  8742 000063AB 8B1D[942C0500]                          mov	ebx, [_@@granule_addr]
  8743 000063B1 81C3A0090000                            add	ebx, 2464       ; $mp3gr_entrysiz
  8744 000063B7 FF05[40F40000]                          inc	dword [mp3_curr_granule]
  8745 000063BD A1[40F40000]                            mov	eax, [mp3_curr_granule]
  8746 000063C2 3B05[5CF40000]                          cmp	eax, [mp3_nb_granules]
  8747 000063C8 0F8225FFFFFF                            jc	.body_granule_lop
  8748 000063CE E8799EFFFF                              call	mp3_uncollect_bits
  8749 000063D3 3B35[3C9D0000]                          cmp	esi, [main_data_pool_wr_ptr]
  8750 000063D9 773B                                    ja	short .error
  8751 000063DB FF15[909D0000]                          call	dword [mp3_synth_filter_proc] ; synth maths
  8752                                  
  8753                                  .skip_decoding:
  8754 000063E1 A1[50F40000]                            mov     eax, [mp3_extra_bytes]
  8755 000063E6 0105[449D0000]                          add     [mp3_src_frame_size], eax
  8756 000063EC A1[34F40000]                            mov     eax, [mp3_samples_output_size]
  8757 000063F1 0105[2CF40000]                          add     [mp3_total_output_size], eax
  8758 000063F7 FF05[28F40000]                          inc     dword [mp3_num_frames_decoded]
  8759                                  
  8760                                  .timelog_end:                            ; timelog_end macro ttt
  8761 000063FD F605[F0750000]10                        test    byte [cpuid_flags], 10h
  8762 00006404 740F                                    jz      short .no_rdtsc_supported
  8763 00006406 0F31                                    rdtsc                   ; read timestamp counter
  8764 00006408 0105[B0770000]                          add     [rdtsc_total], eax
  8765 0000640E 1115[B4770000]                          adc     [rdtsc_total+4], edx
  8766                                  		; 22/10/2024
  8767 00006414 F8                      		clc	
  8768                                  		; 20/10/2024
  8769                                  .no_rdtsc_supported:
  8770                                                  ;clc
  8771 00006415 C3                                      retn
  8772                                  
  8773                                  .error:
  8774 00006416 F605[F0750000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_total
  8775 0000641D 740E                                    jz      short .no_rdtsc_supported@
  8776 0000641F 0F31                                    rdtsc
  8777 00006421 0105[B0770000]                          add     [rdtsc_total], eax
  8778 00006427 1115[B4770000]                          adc     [rdtsc_total+4], edx
  8779                                  
  8780                                  		; 20/10/2024
  8781                                  .no_rdtsc_supported@:
  8782 0000642D A1[50F40000]                            mov     eax, [mp3_extra_bytes]
  8783 00006432 0105[449D0000]                          add     [mp3_src_frame_size], eax
  8784 00006438 F9                                      stc
  8785 00006439 C3                                      retn
  8786                                  
  8787                                  
  8788                                  ; =============== S U B R O U T I N E =======================================
  8789                                  
  8790                                  
  8791                                  mp3_init:
  8792 0000643A BF[3C8D0000]                            mov     edi, main_data_pool_start ; = mp3_context_start
  8793                                                  ;mov    ecx, 74916      ; (mp3_context_end-mp3_context_start)/4
  8794 0000643F B984240100                              mov     ecx, (mp3_context_end-mp3_context_start)/4
  8795 00006444 31C0                                    xor     eax, eax        ; ERRIF @@len AND 03h
  8796 00006446 F3AB                                    rep stosd               ; clear context
  8797 00006448 C705[3C9D0000]-                         mov	dword [main_data_pool_wr_ptr], main_data_pool_start
  8797 0000644E [3C8D0000]         
  8798 00006452 833D[88840000]00                        cmp     dword [mp3_initialized], 0
  8799 00006459 753C                                    jnz     short .already_initialized
  8800 0000645B E8CAF6FFFF                              call    mp3_integer_init_is_stereo_lsf
  8801 00006460 E823F7FFFF                              call    mp3_integer_init_mdct_windows
  8802 00006465 E846F7FFFF                              call    mp3_integer_init_table_4_3
  8803 0000646A E8A4F7FFFF                              call    mp3_integer_init_exponent
  8804 0000646F E8F3F4FFFF                              call    mp3_any_init_synth_window
  8805 00006474 E8D2F5FFFF                              call    mp3_any_init_band_indices
  8806 00006479 E8F7F5FFFF                              call    mp3_any_init_lsf_sf_expand
  8807 0000647E E840F6FFFF                              call    mp3_any_init_huff_tables
  8808 00006483 E8D0F8FFFF                              call    mp3_init_log_constants
  8809 00006488 E8A3F5FFFF                              call    mp3_init_post_collapse
  8810 0000648D C705[88840000]0100-                     mov     dword [mp3_initialized], 1
  8810 00006495 0000               
  8811                                  
  8812                                  .already_initialized:
  8813 00006497 0FB605[EF750000]                        movzx   eax, byte [option_fast]
  8814 0000649E C705[749D0000]0200-                     mov     dword [mp3_bytes_per_sample], 2
  8814 000064A6 0000               
  8815 000064A8 D1E0                                    shl     eax, 1
  8816 000064AA 0205[ED750000]                          add     al, [option_8bit]
  8817 000064B0 A801                                    test    al, 1
  8818 000064B2 740A                                    jz      short .not_8bit
  8819 000064B4 C705[749D0000]0100-                     mov     dword [mp3_bytes_per_sample], 1
  8819 000064BC 0000               
  8820                                  
  8821                                  .not_8bit:
  8822 000064BE 6BC003                                  imul    eax, 3
  8823 000064C1 0205[EE750000]                          add     al, [option_rate_shift]
  8824 000064C7 8B0485[AE8A0000]                        mov     eax, [mp3_synth_filter_procs+eax*4]
  8825 000064CE A3[909D0000]                            mov     [mp3_synth_filter_proc], eax
  8826 000064D3 C3                                      retn
  8827                                  
  8828                                  
  8829                                  ; =============== S U B R O U T I N E =======================================
  8830                                  
  8831                                  
  8832                                  mp3_check_1st_frame:
  8833 000064D4 E855FAFFFF                              call    mp3_exclude_id3_and_tag
  8834 000064D9 8B35[A02C0500]                          mov     esi, [stream_pos]
  8835 000064DF 8B0D[A42C0500]                          mov     ecx, [bytes_left]
  8836 000064E5 31FF                                    xor     edi, edi
  8837 000064E7 31ED                                    xor     ebp, ebp
  8838 000064E9 E866FDFFFF                              call    mp3_decode_frame
  8839 000064EE 0F82E9000000                            jc     .error
  8840 000064F4 E898FCFFFF                              call    mp3_check_xing_info
  8841 000064F9 BA[0C8B0000]                            mov     edx, txt_file_size ; "file size: "
  8842 000064FE E8DB000000                              call    wrstr_edx
  8843 00006503 A1[1CF40000]                            mov     eax, [mp3_file_size]
  8844 00006508 E807010000                              call    wr_decimal_eax_with_thousands_seperator
  8845 0000650D BA[188B0000]                            mov     edx, txt_id3_size ; ", id3 size: "
  8846 00006512 E8C7000000                              call    wrstr_edx
  8847 00006517 A1[20F40000]                            mov     eax, [mp3_id3_size]
  8848 0000651C E8F3000000                              call    wr_decimal_eax_with_thousands_seperator
  8849 00006521 BA[258B0000]                            mov     edx, txt_tag_size ; ", tag size: "
  8850 00006526 E8B3000000                              call    wrstr_edx
  8851 0000652B A1[24F40000]                            mov     eax, [mp3_tag_size]
  8852 00006530 E8DF000000                              call    wr_decimal_eax_with_thousands_seperator
  8853 00006535 E8B5000000                              call    wrcrlf
  8854 0000653A BA[328B0000]                            mov     edx, txt_input ; "input: "
  8855 0000653F E89A000000                              call    wrstr_edx
  8856 00006544 A1[5C9D0000]                            mov     eax, [mp3_sample_rate]
  8857 00006549 E8CD000000                              call    wr_decimal_eax
  8858 0000654E BA[438B0000]                            mov     edx, txt_hz ; " hz, "
  8859 00006553 E886000000                              call    wrstr_edx
  8860 00006558 A1[689D0000]                            mov     eax, [mp3_src_num_channels]
  8861 0000655D E8B9000000                              call    wr_decimal_eax
  8862 00006562 BA[498B0000]                            mov     edx, txt_channels ; " channels, "
  8863 00006567 E872000000                              call    wrstr_edx
  8864 0000656C A1[649D0000]                            mov     eax, [mp3_bit_rate]
  8865 00006571 31D2                                    xor     edx, edx
  8866 00006573 B9E8030000                              mov     ecx, 1000
  8867 00006578 F7F1                                    div     ecx
  8868 0000657A E89C000000                              call    wr_decimal_eax
  8869 0000657F BA[5A8B0000]                            mov     edx, txt_kbit_s ; " kbit/s"
  8870 00006584 E855000000                              call    wrstr_edx
  8871 00006589 E861000000                              call    wrcrlf
  8872 0000658E BA[3A8B0000]                            mov     edx, txt_output ; "output: "
  8873 00006593 E846000000                              call    wrstr_edx
  8874 00006598 A1[709D0000]                            mov     eax, [mp3_output_sample_rate]
  8875 0000659D E879000000                              call    wr_decimal_eax
  8876 000065A2 BA[438B0000]                            mov     edx, txt_hz ; " hz, "
  8877 000065A7 E832000000                              call    wrstr_edx
  8878 000065AC A1[6C9D0000]                            mov     eax, [mp3_output_num_channels]
  8879 000065B1 E865000000                              call    wr_decimal_eax
  8880 000065B6 BA[498B0000]                            mov     edx, txt_channels ; " channels, "
  8881 000065BB E81E000000                              call    wrstr_edx
  8882 000065C0 A1[749D0000]                            mov     eax, [mp3_bytes_per_sample]
  8883 000065C5 C1E003                                  shl     eax, 3
  8884 000065C8 E84E000000                              call    wr_decimal_eax
  8885 000065CD BA[558B0000]                            mov     edx, txt_bit ; " bit"
  8886 000065D2 E807000000                              call    wrstr_edx
  8887 000065D7 E813000000                              call    wrcrlf
  8888 000065DC F8                                      clc
  8889                                  .error:
  8890 000065DD C3                                      retn
  8891                                  
  8892                                  ;.error:
  8893                                                  ;stc
  8894                                                  ;retn
  8895                                  
  8896                                  
  8897                                  ; =============== S U B R O U T I N E =======================================
  8898                                  
  8899                                  ;wrchr:
  8900                                                  ;pusha
  8901                                                  ;mov     [wrchr_buf], al
  8902                                                  ;push    0            ; lpOverlapped
  8903                                                  ;push    diskresult   ; lpNumberOfBytesWritten
  8904                                                  ;push    1            ; nNumberOfBytesToWrite
  8905                                                  ;push    wrchr_buf    ; lpBuffer
  8906                                                  ;push    [std_out]    ; hFile
  8907                                                  ;call    [WriteFile]
  8908                                                  ;popa
  8909                                                  ;retn
  8910                                  
  8911                                  
  8912                                  ; =============== S U B R O U T I N E =======================================
  8913                                  
  8914                                  
  8915                                  wrstr_edx:
  8916 000065DE 50                                      push    eax
  8917                                  .lop:
  8918 000065DF 8A02                                    mov     al, [edx]
  8919 000065E1 42                                      inc     edx
  8920 000065E2 3C00                                    cmp     al, 0
  8921 000065E4 7407                                    jz      short .done
  8922 000065E6 E801040000                              call    wrchr
  8923 000065EB EBF2                                    jmp     short .lop
  8924                                  .done:
  8925 000065ED 58                                      pop     eax
  8926 000065EE C3                                      retn
  8927                                  
  8928                                  ; =============== S U B R O U T I N E =======================================
  8929                                  
  8930                                  
  8931                                  wrcrlf:
  8932 000065EF 50                                      push    eax
  8933 000065F0 B00D                                    mov     al, 0Dh
  8934 000065F2 E8F5030000                              call    wrchr
  8935 000065F7 B00A                                    mov     al, 0Ah
  8936 000065F9 E8EE030000                              call    wrchr
  8937 000065FE 58                                      pop     eax
  8938 000065FF C3                                      retn
  8939                                  
  8940                                  ; =============== S U B R O U T I N E =======================================
  8941                                  
  8942                                  
  8943                                  wrspc:
  8944 00006600 50                                      push    eax
  8945 00006601 B020                                    mov     al, 20h
  8946 00006603 E8E4030000                              call    wrchr
  8947 00006608 58                                      pop     eax
  8948 00006609 C3                                      retn
  8949                                  
  8950                                  ; =============== S U B R O U T I N E =======================================
  8951                                  
  8952                                  
  8953                                  wrcomma:
  8954 0000660A 50                                      push    eax
  8955 0000660B B02C                                    mov     al, ','
  8956 0000660D E8DA030000                              call    wrchr
  8957 00006612 58                                      pop     eax
  8958 00006613 C3                                      retn
  8959                                  
  8960                                  ; =============== S U B R O U T I N E =======================================
  8961                                  
  8962                                  
  8963                                  wr_decimal_eax_with_thousands_seperator:
  8964 00006614 51                                      push    ecx
  8965 00006615 66B90200                                mov     cx, 2
  8966 00006619 EB03                                    jmp     short wr_decimal_eax_inj
  8967                                  
  8968                                  ; =============== S U B R O U T I N E =======================================
  8969                                  
  8970                                  
  8971                                  wr_decimal_eax:
  8972 0000661B 51                                      push    ecx
  8973 0000661C 31C9                                    xor     ecx, ecx
  8974                                  
  8975                                  wr_decimal_eax_inj:
  8976 0000661E 50                                      push    eax
  8977 0000661F 53                                      push    ebx
  8978 00006620 52                                      push    edx
  8979 00006621 BB00CA9A3B                              mov     ebx, 1000000000 ; nine zeroes (32bit max 4.294.967.296)
  8980                                  
  8981                                  .dezlop:
  8982 00006626 FEC9                                    dec     cl
  8983 00006628 750C                                    jnz     short .no_thousands
  8984 0000662A B103                                    mov     cl, 3
  8985 0000662C 80FD00                                  cmp     ch, 0
  8986 0000662F 7405                                    jz      short .no_thousands
  8987 00006631 E8D4FFFFFF                              call    wrcomma
  8988                                  
  8989                                  .no_thousands:
  8990 00006636 31D2                                    xor     edx, edx
  8991 00006638 F7F3                                    div     ebx
  8992 0000663A 83FB01                                  cmp     ebx, 1
  8993 0000663D 7404                                    jz      short .force_last_zero
  8994 0000663F 08C5                                    or      ch, al
  8995 00006641 7407                                    jz      short .skip_lead_zero
  8996                                  
  8997                                  .force_last_zero:
  8998 00006643 0430                                    add     al, 30h
  8999 00006645 E8A2030000                              call    wrchr
  9000                                  
  9001                                  .skip_lead_zero:
  9002 0000664A 52                                      push    edx
  9003 0000664B 89D8                                    mov     eax, ebx
  9004 0000664D BB0A000000                              mov     ebx, 10
  9005 00006652 31D2                                    xor     edx, edx
  9006 00006654 F7F3                                    div     ebx
  9007 00006656 83F800                                  cmp     eax, 0
  9008 00006659 89C3                                    mov     ebx, eax
  9009 0000665B 58                                      pop     eax
  9010 0000665C 75C8                                    jnz     short .dezlop
  9011 0000665E 5A                                      pop     edx
  9012 0000665F 5B                                      pop     ebx
  9013 00006660 58                                      pop     eax
  9014 00006661 59                                      pop     ecx
  9015 00006662 C3                                      retn
  9016                                  
  9017                                  ; =============== S U B R O U T I N E =======================================
  9018                                  
  9019                                  
  9020                                  wrdigital:
  9021 00006663 50                                      push    eax
  9022 00006664 240F                                    and     al, 0Fh
  9023 00006666 3C09                                    cmp     al, 9
  9024 00006668 7602                                    jbe     short .this
  9025 0000666A 0407                                    add     al, 7
  9026                                  
  9027                                  .this:
  9028 0000666C 0430                                    add     al, 30h
  9029 0000666E E879030000                              call    wrchr
  9030 00006673 58                                      pop     eax
  9031 00006674 C3                                      retn
  9032                                  
  9033                                  ; =============== S U B R O U T I N E =======================================
  9034                                  
  9035                                  
  9036                                  wrhexal:
  9037 00006675 C0C804                                  ror     al, 4
  9038 00006678 E8E6FFFFFF                              call    wrdigital
  9039 0000667D C0C804                                  ror     al, 4
  9040 00006680 EBE1                                    jmp     short wrdigital
  9041                                  
  9042                                  ; =============== S U B R O U T I N E =======================================
  9043                                  
  9044                                  
  9045                                  wrhexax:
  9046 00006682 66C1C808                                ror     ax, 8
  9047 00006686 E8EAFFFFFF                              call    wrhexal
  9048 0000668B 66C1C808                                ror     ax, 8
  9049 0000668F EBE4                                    jmp     short wrhexal
  9050                                  
  9051                                  ; =============== S U B R O U T I N E =======================================
  9052                                  
  9053                                  
  9054                                  wrhexeax:
  9055 00006691 C1C810                                  ror     eax, 10h
  9056 00006694 E8E9FFFFFF                              call    wrhexax
  9057 00006699 C1C810                                  ror     eax, 10h
  9058 0000669C EBE4                                    jmp     short wrhexax
  9059                                  
  9060                                  ; =============== S U B R O U T I N E =======================================
  9061                                  
  9062                                  %if 0
  9063                                  
  9064                                  get_commandline:
  9065                                                  call    [GetCommandLineA]
  9066                                                  mov     esi, eax
  9067                                                  mov     edi, cmdline_buf
  9068                                                  mov     ecx, 1024       ; cmdline_max
  9069                                  
  9070                                  .get_cmdline_lop:
  9071                                                  lodsb
  9072                                                  cmp     al, 0
  9073                                                  stosb
  9074                                                  loopne  .get_cmdline_lop
  9075                                                  mov     byte [edi-1], 0
  9076                                                  mov     esi, cmdline_buf
  9077                                                  mov     edi, cmdline_buf
  9078                                                  call    _@@get_item     ; get/skip name of the executable itself
  9079                                  
  9080                                  .get_items_lop:
  9081                                                  call    _@@get_item
  9082                                                  mov     al, [ebx]
  9083                                                  cmp     al, 0
  9084                                                  jz      .done
  9085                                                  cmp     al, '/'
  9086                                                  jz      short .switch
  9087                                                  cmp     al, '-'
  9088                                                  jz      short .switch
  9089                                                  mov     eax, [edi-5]
  9090                                                  or      eax, 20202000h
  9091                                                  ;cmp    eax, 'vaw.'     ; ".wav"
  9092                                                  cmp     eax, '.wav'     ; FASM & NASM syntax
  9093                                                  jnz     short .not_wav_name
  9094                                                  mov     [mp3_dst_fname], ebx
  9095                                                  jmp     short .get_items_lop
  9096                                  
  9097                                  .not_wav_name:
  9098                                                  mov     eax, [edi-5]
  9099                                                  or      eax, 20202000h
  9100                                                  ;cmp    eax, 'mcp.'     ; ".pcm"
  9101                                                  cmp     eax, '.pcm'     ; FASM & NASM syntax
  9102                                                  jnz     short .not_pcm_name
  9103                                                  mov     [mp3_pcm_fname], ebx
  9104                                                  jmp     short .get_items_lop
  9105                                  
  9106                                  .not_pcm_name:
  9107                                                  mov     [mp3_src_fname], ebx
  9108                                                  jmp     short .get_items_lop
  9109                                  
  9110                                  .switch:
  9111                                                  ;cmp	dword [ebx+1], 'onom' ; "mono"
  9112                                                  cmp	dword [ebx+1], 'mono'
  9113                                                  jnz     short .not_switch_mono
  9114                                                  mov	byte [option_mono], 1
  9115                                                  jmp	short .get_items_lop
  9116                                  
  9117                                  .not_switch_mono:
  9118                                                  ;cmp	dword [ebx+1], 'tsaf' ; "fast"
  9119                                                  cmp	dword [ebx+1], 'fast' ; FASM & NASM syntax
  9120                                                  jnz	short .not_fast_option
  9121                                                  mov	byte [option_fast], 1
  9122                                                  jmp	short .get_items_lop
  9123                                  
  9124                                  .not_fast_option:
  9125                                                  ;cmp    dword [ebx+1], 'tib8' ; "8bit"
  9126                                                  cmp     dword [ebx+1], '8bit'
  9127                                                  jnz     short .not_switch_8bit
  9128                                                  mov     [option_8bit], 1
  9129                                                  jmp     .get_items_lop
  9130                                  
  9131                                  .not_switch_8bit:
  9132                                                  ;cmp    dword [ebx+1], 'flah' ; "half"
  9133                                                  cmp     dword [ebx+1], 'half'
  9134                                                  jnz     short .not_switch_half
  9135                                                  mov     [option_rate_shift], 1
  9136                                                  jmp     .get_items_lop
  9137                                  
  9138                                  .not_switch_half:
  9139                                                  ;cmp    dword [ebx+1], 'rauq' ; "quar"
  9140                                                  cmp     dword [ebx+1], 'quar'
  9141                                                  jnz     short .not_switch_quarter
  9142                                                  mov     [option_rate_shift], 2
  9143                                                  jmp     .get_items_lop
  9144                                  
  9145                                  .not_switch_quarter:
  9146                                                  ;cmp    dword [ebx+1], 'tset' ; "test"
  9147                                                  cmp     dword [ebx+1], 'test'
  9148                                                  jnz     short .not_switch_test
  9149                                                  mov     byte [option_test], 1
  9150                                                  jmp     .get_items_lop
  9151                                  
  9152                                  .not_switch_test:
  9153                                                  jmp     short .help
  9154                                  
  9155                                  .done:
  9156                                                  cmp	dword [mp3_src_fname], 0
  9157                                                  jz      short .help
  9158                                                  ;;; Erdogan Tan - 17/10/2024
  9159                                                  mov     edx, txt_ctrlc
  9160                                                  call    wrstr_edx
  9161                                                  ;;;
  9162                                                  mov     edx, txt_file ; "file: "
  9163                                                  call    wrstr_edx
  9164                                                  mov     edx, [mp3_src_fname]
  9165                                                  call    wrstr_edx
  9166                                                  call    wrcrlf
  9167                                                  clc
  9168                                                  retn
  9169                                  
  9170                                  .help:
  9171                                                  ;;; Erdogan Tan - 17/10/2024
  9172                                                  mov     edx, txt_about
  9173                                                  call    wrstr_edx
  9174                                                  ;;;
  9175                                                  mov     edx, txt_help ; "usage: mp3play input.mp3 [output.wav] ["...
  9176                                                  call    wrstr_edx
  9177                                                  stc
  9178                                                  retn
  9179                                  
  9180                                  %endif
  9181                                  
  9182                                  ; =============== S U B R O U T I N E =======================================
  9183                                  
  9184                                  %if 0
  9185                                  
  9186                                  _@@get_item:
  9187                                                  lodsb
  9188                                                  dec     al
  9189                                                  cmp     al, 1Fh         ; 20-1
  9190                                                  jbe     short _@@get_item ; _@@skip_spc_lop
  9191                                                  dec     esi
  9192                                                  mov     ebx, edi
  9193                                                  mov     ah, 0           ; flag initially not quoted
  9194                                  
  9195                                  .char_lop:
  9196                                                  lodsb
  9197                                                  cmp     al, '"'
  9198                                                  jnz     short .no_quote
  9199                                                  xor     ah, 1
  9200                                                  jmp     short .char_lop
  9201                                  
  9202                                  .no_quote:
  9203                                                  stosb
  9204                                                  cmp     al, 0
  9205                                                  jz      short .src_end
  9206                                                  cmp     al, 20h
  9207                                                  ja      short .char_lop
  9208                                                  cmp     ah, 0           ; ignore spaces if inside "quoted area"
  9209                                                  jnz     short .char_lop
  9210                                                  mov     byte [edi-1], 0 ; eol (replace space by 00h)
  9211                                                  retn
  9212                                  
  9213                                  .src_end:
  9214                                                  dec     esi
  9215                                                  retn
  9216                                  
  9217                                  %endif
  9218                                  
  9219                                  ; =============== S U B R O U T I N E =======================================
  9220                                  
  9221                                  
  9222                                  %if 0
  9223                                  
  9224                                  open_and_mmap_the_file:
  9225                                                  push    0               ; hTemplateFile
  9226                                                  push    0               ; dwFlagsAndAttributes
  9227                                                  push    3               ; dwCreationDisposition
  9228                                                  push    0               ; lpSecurityAttributes
  9229                                                  push    1               ; dwShareMode
  9230                                                  push    80000000h       ; dwDesiredAccess
  9231                                                  push    [mp3_src_fname] ; lpFileName
  9232                                                  call    [CreateFileA]
  9233                                                  mov     [hFile], eax
  9234                                                  cmp     eax, 0FFFFFFFFh ; INVALID_HANDLE_VALUE
  9235                                                  jz      short .not_found
  9236                                                  push    0               ; lpFileSizeHigh
  9237                                                  push    [hFile]      ; hFile
  9238                                                  call    [GetFileSize]
  9239                                                  mov     [mp3_file_size], eax
  9240                                                  mov     [bytes_left], eax
  9241                                                  push    0               ; lpName
  9242                                                  push    0               ; dwMaximumSizeLow
  9243                                                  push    0               ; dwMaximumSizeHigh
  9244                                                  push    2               ; flProtect
  9245                                                  push    0               ; lpFileMappingAttributes
  9246                                                  push    [hFile]      ; hFile
  9247                                                  call    [CreateFileMappingA]
  9248                                                  mov     [hMap], eax
  9249                                                  push    0               ; dwNumberOfBytesToMap
  9250                                                  push    0               ; dwFileOffsetLow
  9251                                                  push    0               ; dwFileOffsetHigh
  9252                                                  push    4               ; dwDesiredAccess
  9253                                                  push    [hMap]       ; hFileMappingObject
  9254                                                  call    [MapViewOfFile]
  9255                                                  mov     [stream_start], eax
  9256                                                  mov     [stream_pos], eax
  9257                                                  mov     esi, [stream_start]
  9258                                                  mov     ecx, [bytes_left]
  9259                                  
  9260                                  .lll:
  9261                                                  lodsb
  9262                                                  loop    .lll
  9263                                                  clc
  9264                                                  retn
  9265                                  
  9266                                  .not_found:
  9267                                                  mov     edx, txt_not_found ; "cannot open source file\r\n"
  9268                                                  call    wrstr_edx
  9269                                                  stc
  9270                                                  retn
  9271                                  
  9272                                  %endif
  9273                                  
  9274                                  
  9275                                  ; =============== S U B R O U T I N E =======================================
  9276                                  
  9277                                  
  9278                                  mp3_plain_test_without_output:
  9279 0000669E 60                                      pusha
  9280 0000669F 8B35[A02C0500]                          mov     esi, [stream_pos]
  9281 000066A5 8B0D[A42C0500]                          mov     ecx, [bytes_left]
  9282 000066AB BF[00500500]                            mov     edi, sample_buffer
  9283 000066B0 31ED                                    xor     ebp, ebp
  9284 000066B2 E89DFBFFFF                              call    mp3_decode_frame
  9285 000066B7 61                                      popa
  9286 000066B8 7218                                    jc      short .exit
  9287 000066BA A1[449D0000]                            mov     eax, [mp3_src_frame_size]
  9288 000066BF 83F800                                  cmp     eax, 0
  9289 000066C2 740E                                    jz      short .exit
  9290 000066C4 0105[A02C0500]                          add     [stream_pos], eax
  9291 000066CA 2905[A42C0500]                          sub     [bytes_left], eax
  9292 000066D0 EBCC                                    jmp     short mp3_plain_test_without_output
  9293                                  
  9294                                  .exit:
  9295 000066D2 C3                                      retn
  9296                                  
  9297                                  
  9298                                  ; =============== S U B R O U T I N E =======================================
  9299                                  
  9300                                  		; 20/10/2024
  9301                                  mp3_cast_to_wav_file:
  9302 000066D3 E86F000000                              call	mp3_create_wav_file
  9303                                  		; 20/10/2024
  9304 000066D8 730A                    		jnc	short .lop
  9305 000066DA BBFFFFFFFF              		mov	ebx, -1
  9306 000066DF E91B050000              		jmp	ExitProcess
  9307                                  .lop:
  9308 000066E4 60                                      pusha
  9309 000066E5 8B35[A02C0500]                          mov	esi, [stream_pos]
  9310 000066EB 8B0D[A42C0500]                          mov	ecx, [bytes_left]
  9311 000066F1 BF[00500500]                            mov	edi, sample_buffer
  9312 000066F6 31ED                                    xor	ebp, ebp
  9313 000066F8 E857FBFFFF                              call	mp3_decode_frame
  9314 000066FD 61                                      popa
  9315 000066FE 7241                                    jc	short .exit
  9316 00006700 A1[449D0000]                            mov	eax, [mp3_src_frame_size]
  9317 00006705 83F800                                  cmp	eax, 0
  9318 00006708 7437                                    jz	short .exit
  9319 0000670A 0105[A02C0500]                          add	[stream_pos], eax
  9320 00006710 2905[A42C0500]                          sub	[bytes_left], eax
  9321                                                  ;push	0          ; lpOverlapped
  9322                                                  ;push	diskresult ; lpNumberOfBytesWritten
  9323 00006716 FF35[34F40000]                          push	dword [mp3_samples_output_size] ; nNumberOfBytesToWrite
  9324 0000671C 68[00500500]                            push	sample_buffer ; lpBuffer
  9325 00006721 FF35[282D0500]                          push	dword [mp3_wav_handle] ; hFile
  9326                                                  ;call	[WriteFile]
  9327                                  		;;;
  9328                                  		; 20/10/2024
  9329 00006727 E8DC040000              		call	WriteFile
  9330 0000672C 7213                    		jc	short .exit
  9331                                  		;;;
  9332 0000672E A1[34F40000]                            mov	eax, [mp3_samples_output_size]
  9333 00006733 0105[A4840000]                          add	dword [mp3_wav_header+4], eax
  9334 00006739 0105[C8840000]                          add	dword [mp3_wav_header+28h], eax
  9335 0000673F EBA3                                    jmp	short .lop
  9336                                  
  9337                                  .exit:
  9338 00006741 E860000000                              call	mp3_close_wav_file
  9339 00006746 C3                                      retn
  9340                                  
  9341                                  
  9342                                  ; =============== S U B R O U T I N E =======================================
  9343                                  
  9344                                  		; 20/10/2024
  9345                                  
  9346                                  mp3_create_wav_file:
  9347 00006747 A1[709D0000]                            mov     eax, [mp3_output_sample_rate]
  9348 0000674C 8B0D[6C9D0000]                          mov     ecx, [mp3_output_num_channels]
  9349 00006752 8B15[749D0000]                          mov     edx, [mp3_bytes_per_sample]
  9350 00006758 66890D[B6840000]                        mov     word [mp3_wav_header+16h], cx
  9351 0000675F A3[B8840000]                            mov     dword [mp3_wav_header+18h], eax
  9352 00006764 0FAFCA                                  imul    ecx, edx
  9353 00006767 0FAFC1                                  imul    eax, ecx
  9354 0000676A C1E203                                  shl     edx, 3
  9355 0000676D A3[BC840000]                            mov     dword [mp3_wav_header+1Ch], eax
  9356 00006772 66890D[C0840000]                        mov     word [mp3_wav_header+20h], cx
  9357 00006779 668915[C2840000]                        mov     word [mp3_wav_header+22h], dx
  9358                                                  ;push   0               ; hTemplateFile
  9359                                                  ;push   80h             ; dwFlagsAndAttributes
  9360                                                  ;push   2               ; dwCreationDisposition
  9361                                                  ;push   0               ; lpSecurityAttributes
  9362                                                  ;push   0               ; dwShareMode
  9363                                                  ;push   0C0000000h      ; dwDesiredAccess
  9364 00006780 FF35[98840000]                          push    dword [mp3_dst_fname] ; lpFileName
  9365                                                  ;call   [CreateFileA]
  9366                                  		;;;
  9367                                  		; 20/10/2024
  9368 00006786 E8AF040000              		call	CreateFile
  9369 0000678B 7301                    		jnc	short .ok
  9370 0000678D C3                      		retn
  9371                                  .ok:
  9372                                  		;;;
  9373 0000678E A3[282D0500]                            mov     [mp3_wav_handle], eax
  9374                                                  ; 20/10/2024
  9375                                  		;call   mp3_write_wav_header
  9376                                                  ;retn
  9377                                  
  9378                                  
  9379                                  ; =============== S U B R O U T I N E =======================================
  9380                                  
  9381                                  		; 20/10/2024
  9382                                  mp3_write_wav_header:
  9383                                                  ;push	0               ; lpOverlapped
  9384                                                  ;push	diskresult      ; lpNumberOfBytesWritten
  9385 00006793 6A2C                                    push	44 ; 2Ch        ; nNumberOfBytesToWrite
  9386 00006795 68[A0840000]                            push	mp3_wav_header  ; lpBuffer
  9387 0000679A FF35[282D0500]                          push	dword [mp3_wav_handle] ; hFile
  9388                                                  ;call	[WriteFile]
  9389                                                  ;;;
  9390                                  		; 20/10/2024
  9391 000067A0 E863040000                              call	WriteFile
  9392                                                  ;;;
  9393 000067A5 C3                      		retn
  9394                                  
  9395                                  
  9396                                  ; =============== S U B R O U T I N E =======================================
  9397                                  
  9398                                  		; 20/10/2024
  9399                                  mp3_close_wav_file:
  9400 000067A6 6A00                                    push	0               ; dwMoveMethod
  9401                                                  ;push	0               ; lpDistanceToMoveHigh
  9402 000067A8 6A00                                    push	0               ; lDistanceToMove
  9403 000067AA FF35[282D0500]                          push	dword [mp3_wav_handle] ; hFile
  9404                                                  ;call	[SetFilePointer]
  9405                                  		;;;
  9406                                  		; 20/10/2024
  9407 000067B0 E8C1040000              		call	SetFilePointer
  9408                                  		;;;
  9409 000067B5 E8D9FFFFFF                              call	mp3_write_wav_header
  9410 000067BA FF35[282D0500]                          push	dword [mp3_wav_handle] ; hObject
  9411                                                  ;call	[CloseHandle]
  9412                                  		;;;
  9413                                  		; 20/10/2024
  9414 000067C0 E8EF040000              		call	CloseFile
  9415                                  		;;;
  9416 000067C5 C3                                      retn
  9417                                  
  9418                                  
  9419                                  ; =============== S U B R O U T I N E =======================================
  9420                                  
  9421                                  		; 20/10/2024
  9422                                  mp3_verify_pcm_file:
  9423 000067C6 E804020000                              call    mp3_open_pcm_file
  9424                                  		;;;
  9425                                  		; 20/10/2024
  9426 000067CB 7301                    		jnc	short .verify
  9427 000067CD C3                      		retn	; nothing to do (return without error msg)
  9428                                  .verify:
  9429                                  		;;;
  9430 000067CE C705[302D0500]0000-                     mov	dword [_@@max_diff], 0
  9430 000067D6 0000               
  9431 000067D8 C705[342D0500]0000-                     mov	dword [_@@avg_diff], 0
  9431 000067E0 0000               
  9432 000067E2 C705[382D0500]0000-                     mov	dword [_@@avg_diff+4], 0
  9432 000067EA 0000               
  9433 000067EC C705[3C2D0500]0000-                     mov	dword [pcm_filepos], 0
  9433 000067F4 0000               
  9434                                  
  9435                                  .lop:
  9436 000067F6 60                                      pusha
  9437 000067F7 8B35[A02C0500]                          mov     esi, [stream_pos]
  9438 000067FD 8B0D[A42C0500]                          mov     ecx, [bytes_left]
  9439 00006803 BF[00500500]                            mov     edi, sample_buffer
  9440 00006808 31ED                                    xor     ebp, ebp
  9441 0000680A E845FAFFFF                              call    mp3_decode_frame
  9442 0000680F 61                                      popa
  9443 00006810 0F824D010000                            jb      .exit
  9444 00006816 A1[449D0000]                            mov     eax, [mp3_src_frame_size]
  9445 0000681B 83F800                                  cmp     eax, 0
  9446 0000681E 0F843F010000                            jz      .exit
  9447 00006824 31C0                                    xor     eax, eax
  9448 00006826 833D[6C9D0000]02                        cmp     dword [mp3_output_num_channels], 2
  9449 0000682D 7207                                    jb      short .this_mono_convert
  9450 0000682F 0FB605[EC750000]                        movzx   eax, byte [option_mono]
  9451                                  
  9452                                  .this_mono_convert:
  9453 00006836 A3[402D0500]                            mov	[_@@mono_convert], eax
  9454 0000683B 8A0D[EE750000]                          mov	cl, [option_rate_shift]
  9455 00006841 B802000000                              mov	eax, 2
  9456 00006846 D3E0                                    shl	eax, cl
  9457 00006848 66A3[442D0500]                          mov	[_@@pcm_steps], ax
  9458 0000684E 66A3[462D0500]                          mov	[_@@pcm_steps+2], ax
  9459 00006854 833D[6C9D0000]02                        cmp	dword [mp3_output_num_channels], 2
  9460 0000685B 7213                                    jb	short .these_steps
  9461 0000685D 66C705[442D0500]02-                     mov	word [_@@pcm_steps], 2
  9461 00006865 00                 
  9462 00006866 8D4400FE                                lea     eax, [eax*2-2] ; [0FFFFFFFEh+eax*2]
  9463 0000686A 66A3[462D0500]                          mov     [_@@pcm_steps+2], ax
  9464                                  
  9465                                  .these_steps:
  9466 00006870 A1[34F40000]                            mov     eax, [mp3_samples_output_size]
  9467 00006875 8A0D[EE750000]                          mov     cl, [option_rate_shift]
  9468 0000687B 020D[ED750000]                          add     cl, [option_8bit]
  9469 00006881 020D[402D0500]                          add     cl, byte [_@@mono_convert]
  9470 00006887 D3E0                                    shl     eax, cl
  9471                                                  ;push   0               ; lpOverlapped
  9472                                                  ;push   diskresult      ; lpNumberOfBytesRead
  9473 00006889 50                                      push    eax             ; nNumberOfBytesToRead
  9474 0000688A 68[00620500]                            push    (sample_buffer+1200h) ; sample_buffer+MP3_MAX_OUTPUT_SIZE
  9475 0000688F FF35[2C2D0500]                          push    dword [mp3_pcm_handle] ; hFile
  9476                                                  ;call   [ReadFile]
  9477                                                  ;;;
  9478                                  		; 20/10/2024
  9479 00006895 E8E9030000              		call	ReadFile
  9480 0000689A 7306                    		jnc	short .pcm_read_ok
  9481                                  		; Note: File read error msg has been displayed
  9482 0000689C E83F010000              		call	mp3_close_pcm_file
  9483 000068A1 C3                      		retn
  9484                                  .pcm_read_ok:
  9485                                  		;;;
  9486 000068A2 8B0D[34F40000]          		mov     ecx, [mp3_samples_output_size]
  9487 000068A8 D1E9                                    shr     ecx, 1
  9488 000068AA 0F849D000000                            jz      .compare_done
  9489 000068B0 BE[00500500]                            mov     esi, sample_buffer ; decoded .mp3
  9490 000068B5 BF[00620500]                            mov     edi, (sample_buffer+1200h) ; loaded .pcm
  9491                                  
  9492                                  .compare_lop:
  9493 000068BA 0FBF17                                  movsx   edx, word [edi]
  9494 000068BD 833D[402D0500]00                        cmp     dword [_@@mono_convert], 0
  9495 000068C4 7408                                    jz      short .no_mono_convert
  9496 000068C6 0FBF4702                                movsx   eax, word [edi+2]
  9497 000068CA 01C2                                    add     edx, eax
  9498 000068CC D1FA                                    sar     edx, 1
  9499                                  
  9500                                  .no_mono_convert:
  9501 000068CE 803D[ED750000]00                        cmp	byte [option_8bit], 0
  9502 000068D5 7508                                    jnz	short .compare_8bit
  9503 000068D7 0FBF06                                  movsx	eax, word [esi] ; get 16bit from decoded .mp3
  9504 000068DA 83C602                                  add	esi, 2
  9505 000068DD EB13                                    jmp	short .compare_this
  9506                                  
  9507                                  .compare_8bit:
  9508 000068DF 0FB606                                  movzx   eax, byte [esi]
  9509 000068E2 46                                      inc     esi             ; convert .pcm
  9510 000068E3 81C200800000                            add     edx, 8000h      ; make unsigned
  9511 000068E9 C1FA08                                  sar     edx, 8          ; div 100h
  9512 000068EC 80D200                                  adc     dl, 0           ; round up
  9513 000068EF 80DA00                                  sbb     dl, 0           ; undo on unsigned overflow
  9514                                  
  9515                                  .compare_this:
  9516 000068F2 29D0                                    sub     eax, edx
  9517 000068F4 7902                                    jns     short .compare_abs ; calc difference
  9518 000068F6 F7D8                                    neg     eax
  9519                                  
  9520                                  .compare_abs:
  9521 000068F8 0105[342D0500]                          add     [_@@avg_diff], eax
  9522 000068FE 8315[382D0500]00                        adc     dword [_@@avg_diff+4], 0
  9523 00006905 3B05[302D0500]                          cmp     eax, [_@@max_diff]
  9524 0000690B 7223                                    jb      short .not_max
  9525 0000690D A3[302D0500]                            mov     [_@@max_diff], eax
  9526 00006912 8B15[3C2D0500]                          mov     edx, [pcm_filepos]
  9527 00006918 8915[482D0500]                          mov     [_@@worst_pcm_filepos], edx
  9528 0000691E 8B15[A02C0500]                          mov     edx, [stream_pos]
  9529 00006924 2B15[9C2C0500]                          sub     edx, [stream_start]
  9530 0000692A 8915[4C2D0500]                          mov     [_@@worst_mp3_filepos], edx
  9531                                  
  9532                                  .not_max:
  9533 00006930 0FB705[442D0500]                        movzx   eax, word [_@@pcm_steps]
  9534 00006937 C10D[442D0500]10                        ror     dword [_@@pcm_steps], 16 ; next .pcm addr
  9535 0000693E 01C7                                    add     edi, eax
  9536 00006940 0105[3C2D0500]                          add     [pcm_filepos], eax
  9537 00006946 49                                      dec     ecx
  9538 00006947 0F856DFFFFFF                            jnz    .compare_lop
  9539                                  
  9540                                  .compare_done:
  9541 0000694D A1[449D0000]                            mov     eax, [mp3_src_frame_size]
  9542 00006952 0105[A02C0500]                          add     [stream_pos], eax
  9543 00006958 2905[A42C0500]                          sub     [bytes_left], eax
  9544 0000695E E993FEFFFF                              jmp     .lop
  9545                                  
  9546                                  .exit:
  9547 00006963 E878000000                              call    mp3_close_pcm_file
  9548 00006968 BA[FC8B0000]                            mov     edx, _@@txt_verify1 ; "verify max difference = "
  9549 0000696D E86CFCFFFF                              call    wrstr_edx
  9550 00006972 A1[302D0500]                            mov     eax, [_@@max_diff]
  9551 00006977 E89FFCFFFF                              call    wr_decimal_eax
  9552 0000697C BA[158C0000]                            mov     edx, _@@txt_verify1_at_mp3 ; " at mp3:"
  9553 00006981 E858FCFFFF                              call    wrstr_edx
  9554 00006986 A1[4C2D0500]                            mov     eax, [_@@worst_mp3_filepos]
  9555 0000698B E801FDFFFF                              call    wrhexeax
  9556 00006990 BA[1E8C0000]                            mov     edx, _@@txt_verify2 ; ", average difference = "
  9557 00006995 E844FCFFFF                              call    wrstr_edx
  9558 0000699A A1[342D0500]                            mov     eax, [_@@avg_diff]
  9559 0000699F 8B15[382D0500]                          mov     edx, [_@@avg_diff+4]
  9560 000069A5 8B0D[2CF40000]                          mov     ecx, [mp3_total_output_size]
  9561 000069AB D1E9                                    shr     ecx, 1
  9562 000069AD F7F1                                    div     ecx
  9563 000069AF E867FCFFFF                              call    wr_decimal_eax
  9564 000069B4 B02E                                    mov     al, '.'
  9565 000069B6 E831000000                              call    wrchr
  9566 000069BB B80A000000                              mov     eax, 10
  9567 000069C0 F7E2                                    mul     edx             ; fraction*10
  9568 000069C2 F7F1                                    div     ecx
  9569 000069C4 E89AFCFFFF                              call    wrdigital       ; show fraction of average difference
  9570 000069C9 E821FCFFFF                              call    wrcrlf
  9571 000069CE C3                                      retn
  9572                                  
  9573                                  
  9574                                  ; =============== S U B R O U T I N E =======================================
  9575                                  
  9576                                  		; 20/10/2024
  9577                                  mp3_open_pcm_file:
  9578                                                  ;push	0               ; hTemplateFile
  9579                                                  ;push	80h             ; dwFlagsAndAttributes
  9580                                                  ;push	3               ; dwCreationDisposition
  9581                                                  ;push	0               ; lpSecurityAttributes
  9582                                                  ;push	0               ; dwShareMode
  9583                                                  ;push	80000000h       ; dwDesiredAccess
  9584 000069CF FF35[9C840000]                          push	dword [mp3_pcm_fname] ; lpFileName
  9585                                                  ;call	[CreateFileA]
  9586                                  		;;;
  9587                                  		; 20/10/2024
  9588 000069D5 E88F020000              		call	OpenFile
  9589                                  		;jc	short .return
  9590                                  		;;;
  9591 000069DA A3[2C2D0500]                            mov	[mp3_pcm_handle], eax
  9592                                  ;.return:
  9593 000069DF C3                                      retn
  9594                                  
  9595                                  
  9596                                  ; =============== S U B R O U T I N E =======================================
  9597                                  
  9598                                  		; 20/10/2024
  9599                                  mp3_close_pcm_file:
  9600 000069E0 FF35[2C2D0500]                          push	dword [mp3_pcm_handle] ; hObject
  9601                                                  ;call	[CloseHandle]
  9602                                                  ;retn
  9603                                  		;;;
  9604                                  		; 20/10/2024
  9605 000069E6 E8C9020000              		call	CloseFile
  9606                                  		;;;
  9607 000069EB C3                      		retn
  9608                                  
  9609                                  
  9610                                  ; ---------------------------------------------------------------------------
  9611                                  
  9612                                  ; =============== S U B R O U T I N E =======================================
  9613                                  
  9614                                  		; 20/10/2024
  9615                                  wrchr:
  9616                                  		; TRDOS 386 System Call
  9617                                  		; ebx = 2 -> write character onto STDOUT
  9618                                  		;push	ebx
  9619                                  		;push	ecx
  9620                                  		;push	eax
  9621 000069EC 60                      		pusha
  9622                                  		;;mov	dword [diskresult], 0
  9623                                  		sys	_stdio, 2, eax
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 000069ED BB02000000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 000069F2 89C1                <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 000069F4 B82E000000          <1>  mov eax, %1
   130                              <1> 
   131 000069F9 CD40                <1>  int 40h
  9624                                  		;jnc	short .ok ; if EOF, eax = 0
  9625                                  		;xor	eax, eax ; 0
  9626                                  ;.ok:
  9627                                  		;mov	[diskresult], eax ; written byte count
  9628 000069FB 61                      		popa
  9629                                  		;pop	eax
  9630                                  		;pop	ecx
  9631                                  		;pop	ebx
  9632 000069FC C3                      		retn
  9633                                  
  9634                                  
  9635                                  ; =============== S U B R O U T I N E =======================================
  9636                                  
  9637                                  		; 20/10/2024
  9638                                  get_commandline:
  9639                                  		; 21/10/2024
  9640 000069FD 5D                      		pop	ebp ; near call return address
  9641                                                 	; esp = command line start address
  9642                                  		;mov	[command_line],esp
  9643 000069FE 59                      		pop	ecx	; argc  ; number of arguments
  9644                                  		; esp = pointer to argument 1 ; argv[0]
  9645 000069FF 49                      		dec	ecx
  9646 00006A00 0F8405010000            		jz	.help
  9647 00006A06 58                      		pop	eax ; argument 1 (PRG file name)
  9648 00006A07 5E                      		pop	esi ; argument 2 (must be input file name)
  9649 00006A08 BF[A82C0500]            		mov     edi, cmdline_buf
  9650                                  .get_item:
  9651 00006A0D 89FB                    		mov	ebx, edi
  9652                                  .char_lop:
  9653 00006A0F AC                                      lodsb
  9654 00006A10 AA                      		stosb
  9655 00006A11 3C00                                    cmp     al, 0
  9656 00006A13 75FA                                    jnz 	short .char_lop
  9657                                  		
  9658 00006A15 8A03                                    mov     al, [ebx]
  9659 00006A17 3C2F                                    cmp     al, '/'
  9660 00006A19 7442                                    jz      short .switch
  9661 00006A1B 3C2D                                    cmp     al, '-'
  9662 00006A1D 743E                                    jz      short .switch
  9663 00006A1F 8B47FB                                  mov     eax, [edi-5]
  9664 00006A22 0D00202020                              or      eax, 20202000h
  9665 00006A27 3D2E776176                              cmp     eax, '.wav'     ; FASM & NASM syntax
  9666 00006A2C 7510                                    jnz     short .not_wav_name
  9667 00006A2E 891D[98840000]                          mov     [mp3_dst_fname], ebx
  9668                                  .get_items_lop:
  9669 00006A34 49                      		dec	ecx
  9670 00006A35 0F8494000000            		jz	.done
  9671 00006A3B 5E                      		pop	esi   ; next argument
  9672 00006A3C EBCF                    		jmp     short .get_item
  9673                                  
  9674                                  .not_wav_name:
  9675 00006A3E 8B47FB                                  mov     eax, [edi-5]
  9676 00006A41 0D00202020                              or      eax, 20202000h
  9677 00006A46 3D2E70636D                              cmp     eax, '.pcm'     ; FASM & NASM syntax
  9678 00006A4B 7508                                    jnz     short .not_pcm_name
  9679 00006A4D 891D[9C840000]                          mov     [mp3_pcm_fname], ebx
  9680 00006A53 EBDF                                    jmp     short .get_items_lop
  9681                                  
  9682                                  .not_pcm_name:
  9683 00006A55 891D[94840000]                          mov     [mp3_src_fname], ebx
  9684 00006A5B EBD7                                    jmp     short .get_items_lop
  9685                                  
  9686                                  .switch:
  9687 00006A5D 817B016D6F6E6F                          cmp	dword [ebx+1], 'mono'
  9688 00006A64 7509                                    jnz	short .not_switch_mono
  9689 00006A66 C605[EC750000]01                        mov	byte [option_mono], 1
  9690 00006A6D EBC5                                    jmp	short .get_items_lop
  9691                                  
  9692                                  .not_switch_mono:
  9693 00006A6F 817B0166617374                          cmp	dword [ebx+1], 'fast' ; FASM & NASM syntax
  9694 00006A76 7509                                    jnz	short .not_fast_option
  9695 00006A78 C605[EF750000]01                        mov	byte [option_fast], 1
  9696 00006A7F EBB3                                    jmp	short .get_items_lop
  9697                                  
  9698                                  .not_fast_option:
  9699 00006A81 817B0138626974                          cmp	dword [ebx+1], '8bit'
  9700 00006A88 7509                                    jnz	short .not_switch_8bit
  9701 00006A8A C605[ED750000]01                        mov	byte [option_8bit], 1
  9702 00006A91 EBA1                                    jmp	short .get_items_lop
  9703                                  
  9704                                  .not_switch_8bit:
  9705 00006A93 817B0168616C66                          cmp	dword [ebx+1], 'half'
  9706 00006A9A 7509                                    jnz	short .not_switch_half
  9707 00006A9C C605[EE750000]01                        mov	byte [option_rate_shift], 1
  9708 00006AA3 EB8F                                    jmp	short .get_items_lop
  9709                                  
  9710                                  .not_switch_half:
  9711 00006AA5 817B0171756172                          cmp	dword [ebx+1], 'quar'
  9712 00006AAC 750C                                    jnz	short .not_switch_quarter
  9713 00006AAE C605[EE750000]02                        mov	byte [option_rate_shift], 2
  9714 00006AB5 E97AFFFFFF                              jmp	.get_items_lop
  9715                                  
  9716                                  .not_switch_quarter:
  9717 00006ABA 817B0174657374                          cmp	dword [ebx+1], 'test'
  9718 00006AC1 7548                                    jnz	short .not_switch_test
  9719 00006AC3 C605[EB750000]01                        mov	byte [option_test], 1
  9720 00006ACA E965FFFFFF                              jmp	.get_items_lop
  9721                                  
  9722                                  .done:
  9723 00006ACF 833D[94840000]00                        cmp	dword [mp3_src_fname], 0
  9724 00006AD6 7433                                    jz	short .help
  9725                                                  ;;; Erdogan Tan - 17/10/2024
  9726                                                  ;mov	edx, txt_ctrlc
  9727                                                  ;call	wrstr_edx
  9728                                  		; 20/10/2024
  9729                                  		sys	_msg, txt_ctrlc, txt_ctrlc_size, 0Fh ; white
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006AD8 BB[368C0000]        <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 00006ADD B919000000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 00006AE2 BA0F000000          <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006AE7 B823000000          <1>  mov eax, %1
   130                              <1> 
   131 00006AEC CD40                <1>  int 40h
  9730                                                  ;;;
  9731 00006AEE BA[058B0000]                            mov	edx, txt_file ; "file: "
  9732 00006AF3 E8E6FAFFFF                              call	wrstr_edx
  9733 00006AF8 8B15[94840000]                          mov	edx, [mp3_src_fname]
  9734 00006AFE E8DBFAFFFF                              call	wrstr_edx
  9735 00006B03 E8E7FAFFFF                              call	wrcrlf
  9736 00006B08 F8                                      clc
  9737 00006B09 55                      		push	ebp	; return address
  9738 00006B0A C3                                      retn
  9739                                  
  9740                                  .not_switch_test:
  9741                                  .help:
  9742                                                  ;;; Erdogan Tan - 17/10/2024
  9743 00006B0B BA[4F8C0000]                            mov	edx, txt_about
  9744 00006B10 E8C9FAFFFF                              call	wrstr_edx
  9745                                                  ;;;
  9746 00006B15 BA[7C8B0000]                            mov	edx, txt_help ; "usage: mp3play input.mp3 [output.wav] ["...
  9747 00006B1A E8BFFAFFFF                              call	wrstr_edx
  9748 00006B1F F9                                      stc
  9749 00006B20 55                      		push	ebp	; return address
  9750 00006B21 C3                                      retn
  9751                                  
  9752                                  ; =============== S U B R O U T I N E =======================================
  9753                                  
  9754                                  		; 21/10/2024
  9755                                  set_break:
  9756                                  		; set [u.break] -end of bss- address to
  9757                                  		; end_of_bss at first (mp3 file will be loaded
  9758                                  		; at the end of bss)
  9759                                  		; ([u.break] initially points to the end of PRG file
  9760                                  		; -code and data- except BSS section)
  9761                                  		;
  9762                                  		; TRDOS 386 system call
  9763                                  		; Set break address
  9764                                  		; ebx = new [u.break]
  9765                                  		
  9766                                  		sys	_break, end_of_bss
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006B22 BB[00E00500]        <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006B27 B811000000          <1>  mov eax, %1
   130                              <1> 
   131 00006B2C CD40                <1>  int 40h
  9767                                  		
  9768                                  		; eax = new break address (dword aligned)
  9769                                  
  9770 00006B2E A3[9C2C0500]                            mov	[stream_start], eax
  9771 00006B33 A3[A02C0500]                            mov	[stream_pos], eax
  9772                                  
  9773 00006B38 C3                      		retn
  9774                                  
  9775                                  
  9776                                  ; =============== S U B R O U T I N E =======================================
  9777                                  
  9778                                  		; 20/10/2024
  9779                                  
  9780                                  open_and_mmap_the_file:
  9781                                  		; 21/10/2024
  9782                                  		; TRDOS 386 system call
  9783                                  		; Open File
  9784                                  		; ebx = pointer to filename
  9785                                  		; ecx = open mode, 0 = read
  9786                                               	sys	_open, [mp3_src_fname], 0
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006B39 8B1D[94840000]      <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 00006B3F B900000000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006B44 B805000000          <1>  mov eax, %1
   130                              <1> 
   131 00006B49 CD40                <1>  int 40h
  9787 00006B4B 7270                    		jc	short .not_found
  9788                                  
  9789 00006B4D A3[982C0500]                            mov     [hFile], eax
  9790                                  
  9791                                                 	; get file size by using systell system call
  9792                                   		; (not applicable for TRDOS 386 Kernel v2.0.9 and earlier)
  9793                                  		; TRDOS 386 system call
  9794                                  		; Get current file (offset) pointer
  9795                                  		; ebx = file handle (file descriptor)
  9796                                  		; ecx = 0, offset
  9797                                  		; edx = 2, from the end of file
  9798                                  		;sys	_tell, eax, 0, 2
  9799                                                  ;mov     [mp3_file_size], eax
  9800                                  
  9801                                  		; *** get file size ***
  9802                                  		; TRDOS 386 system call
  9803                                  		; Set file (offset) pointer to file size 
  9804                                  		; (needed for TRDOS kernel v2.0.9 and earlier)
  9805                                  		; ebx = file handle (file descriptor)
  9806                                  		; ecx = 0, offset
  9807                                  		; edx = 2, from the end of file
  9808                                  		sys	_seek, eax, 0, 2
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006B52 89C3                <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 00006B54 B900000000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 00006B59 BA02000000          <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006B5E B813000000          <1>  mov eax, %1
   130                              <1> 
   131 00006B63 CD40                <1>  int 40h
  9809                                  		; TRDOS 386 system call
  9810                                  		; Get current file (offset) pointer
  9811                                  		; (needed for TRDOS 386 kernel version 2.0.9 and earlier)
  9812 00006B65 31D2                    		xor	edx, edx ; 0
  9813                                  		; ecx = 0
  9814                                  		; ebx = file handle
  9815                                  		sys	_tell
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006B67 B814000000          <1>  mov eax, %1
   130                              <1> 
   131 00006B6C CD40                <1>  int 40h
  9816 00006B6E A3[1CF40000]            		mov     [mp3_file_size], eax
  9817                                  
  9818                                  		; *** set file offset pointer to 0 again ***
  9819                                  		; TRDOS 386 system call
  9820                                  		; Set file (offset) pointer
  9821                                  		; ebx = file handle (file descriptor)
  9822                                  		; ecx = 0, offset
  9823                                  		; edx = 0, from the beginning/start of file
  9824 00006B73 50                      		push	eax
  9825                                  		sys	_seek
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006B74 B813000000          <1>  mov eax, %1
   130                              <1> 
   131 00006B79 CD40                <1>  int 40h
  9826 00006B7B 58                      		pop	eax
  9827                                  
  9828                                  		; now, set [u.break] address to the end of mp3 file
  9829                                  		; at memory -in BSS section-
  9830                                  		; (not necessary for TRDOS 386 PRG files)
  9831                                  		; (this system call will allocate user memory pages
  9832                                  		;  before sysread system call.. early)
  9833 00006B7C 05[00E00500]            		add	eax, end_of_bss
  9834                                  
  9835                                  		; TRDOS 386 system call
  9836                                  		; Set break address
  9837                                  		; ebx = new [u.break]
  9838                                  		sys	_break, eax
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006B81 89C3                <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006B83 B811000000          <1>  mov eax, %1
   130                              <1> 
   131 00006B88 CD40                <1>  int 40h
  9839                                  
  9840                                  		; TRDOS 386 system call
  9841                                  		; Read file
  9842                                  		; ebx = file handle (file descriptor)
  9843                                  		; ecx = buffer address
  9844                                  		; edx = byte count
  9845                                  		sys	_read, [hFile], [stream_start], [mp3_file_size]
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006B8A 8B1D[982C0500]      <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 00006B90 8B0D[9C2C0500]      <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 00006B96 8B15[1CF40000]      <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006B9C B803000000          <1>  mov eax, %1
   130                              <1> 
   131 00006BA1 CD40                <1>  int 40h
  9846 00006BA3 7204                    		jc	short .read_error
  9847 00006BA5 39D0                    		cmp	eax, edx
  9848 00006BA7 730E                    		jnb	short .ok
  9849                                  		;or	eax, eax
  9850                                  		;jnz	short .ok
  9851                                  .read_error:		
  9852                                  		; TRDOS 386 system call
  9853                                  		; Close file
  9854                                  		; ebx = file handle (file descriptor)
  9855                                  		;sys	_close, [hFile]
  9856                                   		sys	_close
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006BA9 B806000000          <1>  mov eax, %1
   130                              <1> 
   131 00006BAE CD40                <1>  int 40h
  9857                                  
  9858 00006BB0 BA[A16C0000]            		mov	edx, txt_read_err
  9859 00006BB5 EB0B                    		jmp	short .r_err_msg
  9860                                  .ok:
  9861 00006BB7 A3[A42C0500]                            mov     [bytes_left], eax ; read count
  9862 00006BBC C3                      		retn
  9863                                  .not_found:
  9864 00006BBD BA[628B0000]                            mov     edx, txt_not_found ; "cannot open source file\r\n"
  9865                                  .r_err_msg:
  9866 00006BC2 E817FAFFFF                              call    wrstr_edx
  9867 00006BC7 F9                                      stc
  9868 00006BC8 C3                                      retn
  9869                                  
  9870                                  ;txt_read_err	db 'File read error!',0Dh,0Ah,0
  9871                                  
  9872                                  
  9873                                  ; =============== S U B R O U T I N E =======================================
  9874                                  
  9875                                  		; 20/10/2024
  9876                                  print_msg:
  9877                                  		; TRDOS 386 system call
  9878                                  		; write/display message on screen
  9879                                  		; ebx = ASCIIZ message (text) address
  9880                                  		; ecx = max. message length (stop count before char zero)
  9881                                  		; edx = character color (CGA)
  9882 00006BC9 B9FF000000              		mov	ecx, 255
  9883 00006BCE BA0B000000              		mov	edx, 0Bh ; DL ; cyan
  9884                                  		sys	_msg
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006BD3 B823000000          <1>  mov eax, %1
   130                              <1> 
   131 00006BD8 CD40                <1>  int 40h
  9885 00006BDA C3                      		retn
  9886                                  
  9887                                  
  9888                                  ; =============== S U B R O U T I N E =======================================
  9889                                  
  9890                                  		; 20/10/2024
  9891                                  GetTickCount:
  9892                                  		; TRDOS 386 system call
  9893                                  		; get current time, get tick count
  9894                                  		; ebx = 4 -> get count of system timer ticks
  9895                                  		sys	_time, 4
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006BDB BB04000000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006BE0 B80D000000          <1>  mov eax, %1
   130                              <1> 
   131 00006BE5 CD40                <1>  int 40h
  9896                                  		; eax = system timer ticks (18.2 ticks per second)
  9897 00006BE7 BA15F4BC20              		mov	edx, 549254165	; 10^10/18.2
  9898 00006BEC F7E2                    		mul	edx
  9899                                  		; edx:eax = milliseconds * 10^7
  9900 00006BEE BB80969800              		mov	ebx, 10000000
  9901 00006BF3 F7F3                    		div	ebx		; 10^7
  9902                                  		; eax = milliseconds
  9903 00006BF5 81FA404B4C00            		cmp	edx, 5000000	; 10^7/2
  9904 00006BFB 7201                    		jb	short .ok
  9905 00006BFD 40                      		inc	eax		; round up
  9906                                  .ok:
  9907 00006BFE C3                      		retn
  9908                                  
  9909                                  
  9910                                  ; =============== E X I T ===================================================
  9911                                  
  9912                                  		; 20/10/2024
  9913                                  ExitProcess:
  9914 00006BFF 31DB                    		xor	ebx, ebx  ; mov ebx, 0  ; exit code
  9915                                  		sys	_exit
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006C01 B801000000          <1>  mov eax, %1
   130                              <1> 
   131 00006C06 CD40                <1>  int 40h
  9916                                  ;hang:
  9917                                  		;jmp	short hang
  9918                                  
  9919                                  
  9920                                  ; =============== S U B R O U T I N E =======================================
  9921                                  
  9922                                  		; 20/10/2024
  9923                                  WriteFile:
  9924 00006C08 58                      		pop	eax ; near call return address
  9925 00006C09 5B                      		pop	ebx
  9926 00006C0A 59                      		pop	ecx
  9927 00006C0B 5A                      		pop	edx
  9928 00006C0C 50                      		push	eax
  9929                                  		; TRDOS 386 system call
  9930                                  		; Write file
  9931                                  		; ebx = file handle (file descriptor)
  9932                                  		; ecx = buffer address
  9933                                  		; edx = byte count
  9934                                  		sys	_write
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006C0D B804000000          <1>  mov eax, %1
   130                              <1> 
   131 00006C12 CD40                <1>  int 40h
  9935 00006C14 730F                    		jnc	short .ok
  9936 00006C16 39D0                    		cmp	eax, edx
  9937 00006C18 730B                    		jnb	short .ok
  9938                                  		;or	eax, eax
  9939                                  		;jnz	short .ok
  9940                                  
  9941 00006C1A BA[266C0000]            		mov	edx, txt_write_err
  9942 00006C1F E8BAF9FFFF                              call    wrstr_edx
  9943 00006C24 F9                                      stc
  9944                                  .ok:
  9945 00006C25 C3                                      retn
  9946                                  
  9947 00006C26 46696C652077726974-     txt_write_err	db 'File write error!',0Dh,0Ah,0
  9947 00006C2F 65206572726F72210D-
  9947 00006C38 0A00               
  9948                                  
  9949                                  
  9950                                  ; =============== S U B R O U T I N E =======================================
  9951                                  
  9952                                  		; 20/10/2024
  9953                                  CreateFile:
  9954 00006C3A 58                      		pop	eax ; near call return address
  9955 00006C3B 5B                      		pop	ebx
  9956 00006C3C 50                      		push	eax
  9957                                  		; TRDOS 386 system call
  9958                                  		; Create file
  9959                                  		; ebx = (ASCIIZ) file name address
  9960                                  		; ecx = mode
  9961 00006C3D 31C9                    		xor	ecx, ecx ; CL ; mov ecx, 0 ; ordinary file
  9962                                  		sys	_creat
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006C3F B808000000          <1>  mov eax, %1
   130                              <1> 
   131 00006C44 CD40                <1>  int 40h
  9963 00006C46 730B                    		jnc	short .ok ; eax = file handle
  9964                                  
  9965 00006C48 BA[546C0000]            		mov	edx, txt_create_err
  9966 00006C4D E88CF9FFFF                              call    wrstr_edx
  9967 00006C52 F9                                      stc
  9968                                  .ok:
  9969 00006C53 C3                      		retn
  9970                                  
  9971 00006C54 46696C652063726561-     txt_create_err	db 'File create error!',0Dh,0Ah,0
  9971 00006C5D 7465206572726F7221-
  9971 00006C66 0D0A00             
  9972                                  
  9973                                  
  9974                                  ; =============== S U B R O U T I N E =======================================
  9975                                  
  9976                                  		; 20/10/2024
  9977                                  OpenFile:
  9978 00006C69 58                      		pop	eax ; near call return address
  9979 00006C6A 5B                      		pop	ebx
  9980 00006C6B 50                      		push	eax
  9981                                  		; TRDOS 386 system call
  9982                                  		; Open file
  9983                                  		; ebx = (ASCIIZ) file name address
  9984                                  		; ecx = mode
  9985 00006C6C 31C9                    		xor	ecx, ecx ; CL ; mov ecx, 0 ; ordinary file
  9986                                  		sys	_open
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006C6E B805000000          <1>  mov eax, %1
   130                              <1> 
   131 00006C73 CD40                <1>  int 40h
  9987                                  		;jnc	short .ok ; eax = file handle
  9988                                  		;
  9989                                  		;mov	edx, txt_open_err
  9990                                                  ;call   wrstr_edx
  9991                                                  ;stc
  9992                                  ;.ok:
  9993 00006C75 C3                      		retn
  9994                                  
  9995                                  ;txt_open_err	db 'File not found!',0Dh,0Ah,0
  9996                                  		;db 'File open error!',ODh,0Ah,0
  9997                                  	 
  9998                                  
  9999                                  ; =============== S U B R O U T I N E =======================================
 10000                                  
 10001                                  		; 20/10/2024
 10002                                  SetFilePointer:
 10003 00006C76 58                      		pop	eax ; near call return address
 10004 00006C77 5B                      		pop	ebx
 10005 00006C78 59                      		pop	ecx
 10006 00006C79 5A                      		pop	edx
 10007 00006C7A 50                      		push	eax
 10008                                  		; TRDOS 386 system call
 10009                                  		; Set file offset pointer  ; sysseek
 10010                                  		; ebx = file handle (file descriptor)
 10011                                  		; ecx = offset
 10012                                  		; edx = switch, DL = 0 = from the start of file
 10013                                  		;		     1 = from the current offset
 10014                                  		;		     2 = from the end of file
 10015                                  		sys	_seek
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006C7B B813000000          <1>  mov eax, %1
   130                              <1> 
   131 00006C80 CD40                <1>  int 40h
 10016                                  		; eax = (value of) new offset pointer
 10017                                  
 10018 00006C82 C3                      		retn
 10019                                  
 10020                                  
 10021                                  ; =============== S U B R O U T I N E =======================================
 10022                                  
 10023                                  		; 20/10/2024
 10024                                  ReadFile:
 10025 00006C83 58                      		pop	eax ; near call return address
 10026 00006C84 5B                      		pop	ebx
 10027 00006C85 59                      		pop	ecx
 10028 00006C86 5A                      		pop	edx
 10029 00006C87 50                      		push	eax
 10030                                  		; TRDOS 386 system call
 10031                                  		; Read file
 10032                                  		; ebx = file handle (file descriptor)
 10033                                  		; ecx = buffer address
 10034                                  		; edx = byte count
 10035                                  		sys	_read
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006C88 B803000000          <1>  mov eax, %1
   130                              <1> 
   131 00006C8D CD40                <1>  int 40h
 10036 00006C8F 730F                    		jnc	short .ok
 10037 00006C91 39D0                    		cmp	eax, edx
 10038 00006C93 730B                    		jnb	short .ok
 10039                                  		;or	eax, eax
 10040                                  		;jnz	short .ok
 10041                                  
 10042 00006C95 BA[A16C0000]            		mov	edx, txt_read_err
 10043 00006C9A E83FF9FFFF                              call    wrstr_edx
 10044 00006C9F F9                                      stc
 10045                                  .ok:
 10046 00006CA0 C3                                      retn
 10047                                  
 10048 00006CA1 46696C652072656164-     txt_read_err	db 'File read error!',0Dh,0Ah,0
 10048 00006CAA 206572726F72210D0A-
 10048 00006CB3 00                 
 10049                                  
 10050                                  
 10051                                  ; =============== S U B R O U T I N E =======================================
 10052                                  
 10053                                  		; 20/10/2024
 10054                                  CloseFile:
 10055 00006CB4 58                      		pop	eax ; near call return address
 10056 00006CB5 5B                      		pop	ebx
 10057 00006CB6 50                      		push	eax
 10058                                  		; TRDOS 386 system call
 10059                                  		; Close file
 10060                                  		; ebx = file handle (file descriptor)
 10061                                  		sys	_close
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006CB7 B806000000          <1>  mov eax, %1
   130                              <1> 
   131 00006CBC CD40                <1>  int 40h
 10062                                  
 10063 00006CBE C3                      		retn
 10064                                  
 10065                                  
 10066                                  ; ---------------------------------------------------------------------------
 10067                                  ; TRDOS 386 Audio System Functions
 10068                                  ; ---------------------------------------------------------------------------
 10069                                  
 10070                                  ; =============== S U B R O U T I N E =======================================
 10071                                  
 10072                                  		; 10/01/2025
 10073                                  		; 20/10/2024
 10074                                  detect_enable_audio_device:
 10075 00006CBF 66C705[268D0000]80-     		mov	word [max_frequency], 48000
 10075 00006CC7 BB                 
 10076                                  		; 10/01/2025
 10077                                  		;mov	byte [blocks], 8
 10078                                  
 10079                                  		; check AC'97 hardware at first
 10080                                  		; (48kHz support)
 10081                                  		; TRDOS 386 system call
 10082                                  		; sysaudio
 10083                                  		; Detect (BH=1) AC'97 (BL=2) Audio Device
 10084                                  .ac97:
 10085                                          	sys	_audio, 0102h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006CC8 BB02010000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006CCD B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006CD2 CD40                <1>  int 40h
 10086 00006CD4 7245                    		jc	short .sb16
 10087 00006CD6 C605[248D0000]02        		mov	byte [audio_hardware], 2 ; AC97
 10088                                  
 10089                                  		;;;;
 10090                                  		; 12/01/2025 (ref: playwav9.s, 18/12/2024)
 10091                                  		sys	_audio, 0E00h ; get audio controller info
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006CDD BB000E0000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006CE2 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006CE7 CD40                <1>  int 40h
 10092                                  		; EAX = IRQ Number in AL
 10093                                  		;	Audio Device Number in AH 
 10094                                  		; EBX = DEV/VENDOR ID
 10095                                  		;       (DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV)
 10096                                  		; ECX = BUS/DEV/FN 
 10097                                  		;       (00000000BBBBBBBBDDDDDFFF00000000)
 10098                                  		; EDX = NABMBAR/NAMBAR (for AC97)
 10099                                  		;      (Low word, DX = NAMBAR address)
 10100                                  		; EDX = Base IO Addr (DX) for SB16 & VT8233
 10101                                  
 10102 00006CE9 891D[148D0000]          		mov	[dev_vendor], ebx
 10103 00006CEF 890D[108D0000]          		mov	[bus_dev_fn], ecx
 10104                                  
 10105 00006CF5 668915[188D0000]                	mov     [NAMBAR], dx	; save audio mixer base addr
 10106                                  		;shr	edx, 16
 10107                                          	;mov    [NABMBAR], dx	; save bus master base addr
 10108 00006CFC 8915[188D0000]          		mov	[NAMBAR], edx
 10109                                  
 10110 00006D02 A2[208D0000]            		mov	[ac97_int_ln_reg], al
 10111                                  		;;;;
 10112                                  		
 10113                                  		; TRDOS 386 system call
 10114                                  		; sysaudio
 10115                                  		; Get AC'97 Codec info
 10116                                  		; (Function 14, sub function 1)
 10117                                  		sys	_audio, 0E01h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006D07 BB010E0000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006D0C B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006D11 CD40                <1>  int 40h
 10118                                  		; Save Variable Rate Audio support bit
 10119 00006D13 2401                    		and	al, 1
 10120 00006D15 A2[258D0000]            		mov	[vra], al
 10121 00006D1A C3                      		retn
 10122                                  .sb16:
 10123                                  		; check Sound Blaster 16 card at second
 10124                                  		; (44100Hz support, but 24kHz will be used)
 10125                                  		; TRDOS 386 system call
 10126                                  		; sysaudio
 10127                                  		; Detect (BH=1) SB16 (BL=1) Audio Card
 10128                                          	sys	_audio, 0101h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006D1B BB01010000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006D20 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006D25 CD40                <1>  int 40h
 10129 00006D27 7228                    		jc	short .vt8233
 10130 00006D29 C605[248D0000]01        		mov	byte [audio_hardware], 1 ; SB16
 10131 00006D30 66C705[268D0000]44-     		mov	word [max_frequency], 44100
 10131 00006D38 AC                 
 10132                                  		; 10/01/2025
 10133                                  		;;mov	byte [blocks], 7
 10134                                  		;dec	byte [blocks]
 10135                                  
 10136                                  		;;;;
 10137                                  		; 12/01/2025 (ref: sb16play.s, 20/12/2024)
 10138                                  		sys	_audio, 0E00h ; get audio controller info
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006D39 BB000E0000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006D3E B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006D43 CD40                <1>  int 40h
 10139                                  	
 10140 00006D45 8915[1C8D0000]          		mov	[audio_io_base], edx
 10141 00006D4B A2[208D0000]            		mov	[audio_intr], al
 10142                                  		;;;;
 10143                                  
 10144 00006D50 C3                      		retn
 10145                                  .vt8233:
 10146                                  		; check VIA VT3237R (VT8233) hardware at third
 10147                                  		; (48kHz support)
 10148                                  		; TRDOS 386 system call
 10149                                  		; sysaudio
 10150                                  		; Detect (BH=1) VT8237R (BL=3) Audio Device
 10151                                  		sys	_audio, 0103h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006D51 BB03010000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006D56 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006D5B CD40                <1>  int 40h
 10152 00006D5D 7208                    		jc	short .hda
 10153 00006D5F C605[248D0000]03        		mov	byte [audio_hardware], 3 ; VT8237R
 10154 00006D66 C3                      		retn
 10155                                  .hda:	
 10156                                  		; check Intel HDA hardware at last
 10157                                  		; (48kHz support)
 10158                                  		; TRDOS 386 system call
 10159                                  		; sysaudio
 10160                                  		; Detect (BH=1) Intel HDA (BL=4) Audio Device
 10161                                  		sys	_audio, 0104h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006D67 BB04010000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006D6C B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006D71 CD40                <1>  int 40h
 10162 00006D73 7208                    		jc	short .err
 10163 00006D75 C605[248D0000]04        		mov	byte [audio_hardware], 4 ; HDA
 10164 00006D7C C3                      		retn
 10165                                  .err:
 10166 00006D7D BA[896D0000]            		mov	edx, txt_audio_nf_err
 10167 00006D82 E857F8FFFF                              call    wrstr_edx
 10168 00006D87 F9                                      stc
 10169 00006D88 C3                      		retn
 10170                                  
 10171 00006D89 50726F706572206175-     txt_audio_nf_err: db 'Proper audio hardware not found!',0Dh,0Ah,0
 10171 00006D92 64696F206861726477-
 10171 00006D9B 617265206E6F742066-
 10171 00006DA4 6F756E64210D0A00   
 10172                                  
 10173                                  
 10174                                  ; =============== CONSTANT ==================================================
 10175                                  
 10176                                  		; 21/10/2024
 10177                                  MP3_MAX_OUTPUT_SIZE equ 2*2*18*32*2
 10178                                      ; = 1200h = 4608 decimal = 2 channels, 2 granules, 18*32, 2 byte(16bit)
 10179                                  
 10180                                  
 10181                                  ; =============== S U B R O U T I N E =======================================
 10182                                  
 10183                                  		; 12/01/2025
 10184                                  audio_system_init:
 10185                                  		;mov	eax, sample_buffer_size
 10186                                  		; 10/01/2025
 10187                                  		;mov	byte [blocks], 16
 10188                                  		; 12/01/2025
 10189 00006DAC C605[2A8D0000]08        		mov	byte [blocks], 8
 10190 00006DB3 A1[34F40000]            		mov	eax, [mp3_samples_output_size]
 10191 00006DB8 C1E003                  		shl	eax, 3 ; * 8
 10192                                  		;shl	eax, 4 ; * 16
 10193                                  .asi@:		
 10194                                  		; 12/01/2025
 10195                                  		;cmp	eax, 65536
 10196                                  		;jna	short .asi@@
 10197                                  		;sub	eax, [mp3_samples_output_size]
 10198                                  		;dec	byte [blocks]
 10199                                  		;;;
 10200                                  		; 11/01/2025
 10201                                  		;test	byte [blocks], 1
 10202                                  		;jz	short .asi@
 10203                                  		;dec	byte [blocks] ; even number
 10204                                  		;sub	eax, [mp3_samples_output_size]
 10205                                  		;;;
 10206                                  		;jmp	short .asi@
 10207                                  .asi@@:
 10208 00006DBB 803D[248D0000]01        		cmp	byte [audio_hardware], 1 ; SB16
 10209 00006DC2 7515                    		jne	short .bufaloc
 10210                                  .asi@@@:
 10211                                  		; 10/01/2025
 10212 00006DC4 3D00800000              		cmp	eax, 32768
 10213 00006DC9 760E                    		jna	short .bufaloc
 10214                                  		; sample_buffer_size = 36864 bytes ; 8 blocks
 10215                                  		;sub	eax, MP3_MAX_OUTPUT_SIZE
 10216                                  		; eax = 32256 ; 7 blocks
 10217                                  		; 10/01/2025
 10218 00006DCB 2B05[34F40000]          		sub	eax, [mp3_samples_output_size]
 10219 00006DD1 FE0D[2A8D0000]          		dec	byte [blocks]
 10220                                  		;;;
 10221                                  		; 11/01/2025
 10222                                  		;test	byte [blocks], 1
 10223                                  		;jz	short .asi@@@
 10224                                  		;dec	byte [blocks] ; even number
 10225                                  		;sub	eax, [mp3_samples_output_size]
 10226                                  		;;;
 10227 00006DD7 EBEB                    		jmp	short .asi@@@
 10228                                  .bufaloc:
 10229                                  		; TRDOS 386 system call
 10230                                  		; sysaudio
 10231                                  		; Allocate audio buffer (for user)
 10232                                  		; ebx = 0200h (BH=2)
 10233                                  		; ecx = buffer size (in bytes)
 10234                                  		; edx = buffer address (virtual)
 10235 00006DD9 A3[2C8D0000]            		mov	[buffer_size], eax
 10236                                  		sys	_audio, 0200h, eax, sample_buffer
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006DDE BB00020000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 00006DE3 89C1                <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 00006DE5 BA[00500500]        <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006DEA B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006DEF CD40                <1>  int 40h
 10237 00006DF1 7225                    		jc	short .init_err
 10238                                  
 10239                                  		; 12/01/2025
 10240                                  		; clear audio buffer (before playback)
 10241 00006DF3 BF[00500500]            		mov	edi, sample_buffer
 10242                                  		; ecx = buffer size in bytes
 10243 00006DF8 C1E902                  		shr	ecx, 2 ; double word
 10244 00006DFB 31C0                    		xor	eax, eax
 10245 00006DFD F3AB                    		rep	stosd
 10246                                  
 10247                                  		; TRDOS 386 system call
 10248                                  		; sysaudio
 10249                                  		; Initialize audio device (bh = 3)
 10250                                  		; bl = 01h -> CallBack method
 10251                                  		; edx = Callback service address (virtual)
 10252                                  		; ecx = 0 ; CL = srb value ; not used
 10253                                  		sys	_audio, 0301h, 0, audio_callback
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006DFF BB01030000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 00006E04 B900000000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 00006E09 BA[4B6E0000]        <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006E0E B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006E13 CD40                <1>  int 40h
 10254                                  		; 12/01/2025
 10255                                  		; SRB method (faster than callback method)
 10256                                  		; bl = 0 -> Signal Response Byte method
 10257                                  		; cl = 1 -> SRB set value 
 10258                                  		;     (will be set by audio IRQ service of the kernel)
 10259                                  		; edx = SRB address -one byte data-
 10260                                  		;sys	_audio, 0300h, 1, srb	
 10261 00006E15 7201                    		jc	short .init_err
 10262 00006E17 C3                      		retn
 10263                                  .init_err:
 10264                                  init_error:	; 13/01/2025
 10265 00006E18 BA[246E0000]            		mov	edx, txt_audio_init_err
 10266 00006E1D E8BCF7FFFF                              call    wrstr_edx
 10267 00006E22 F9                                      stc
 10268 00006E23 C3                      		retn
 10269                                  
 10270 00006E24 417564696F20686172-     txt_audio_init_err: db 'Audio hardware initialization error!',0Dh,0Ah,0
 10270 00006E2D 647761726520696E69-
 10270 00006E36 7469616C697A617469-
 10270 00006E3F 6F6E206572726F7221-
 10270 00006E48 0D0A00             
 10271                                  
 10272                                  
 10273                                  ; =============== S U B R O U T I N E =======================================
 10274                                  
 10275                                  		; 21/10/2024
 10276                                  audio_callback:
 10277                                  		; Operating system has directed CPU here because of
 10278                                  		; user (2nd) stage of the audio hardware interrupt service.
 10279                                  		; This procedure must be short and return to operating
 10280                                  		; system again via sysrelease system call
 10281                                  		; (or any system call here will be handled as sysrelease).
 10282                                  
 10283 00006E4B C605[288D0000]01        		mov	byte [srb], 1
 10284                                  
 10285                                  		; 12/01/2025
 10286 00006E52 E83D010000                              call	try_enqueue_all_blocks
 10287                                  
 10288                                  		sys	_rele ; return from callback service 
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006E57 B827000000          <1>  mov eax, %1
   130                              <1> 
   131 00006E5C CD40                <1>  int 40h
 10289                                  		
 10290                                  		; we must not come here !
 10291 00006E5E BBFFFFFFFF              		mov	ebx, -1
 10292                                  		sys	_exit
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006E63 B801000000          <1>  mov eax, %1
   130                              <1> 
   131 00006E68 CD40                <1>  int 40h
 10293                                  		;jmp	short audio_callback
 10294                                  
 10295                                  
 10296                                  ; =============== S U B R O U T I N E =======================================
 10297                                  
 10298                                  		; 15/01/2025 (mp3play3.s & mp3play2.s)
 10299                                  		; 13/01/2025
 10300                                  		; 12/01/2025
 10301                                  		; 10/01/2025
 10302                                  		; 21/10/2024
 10303                                  mp3_cast_to_speaker:
 10304                                  ; 13/01/2025
 10305                                  %if 1
 10306                                  		; Start	to play
 10307 00006E6A A1[749D0000]            		mov	eax, [mp3_bytes_per_sample]
 10308                                  		;shr	al, 1 ; 8 -> 0, 16 -> 1
 10309                                  		;shl	al, 1 ; 16 -> 2, 8 -> 0
 10310 00006E6F 2402                    		and	al, 2 ; 22/10/2024
 10311 00006E71 8B1D[6C9D0000]          		mov	ebx, [mp3_output_num_channels]
 10312 00006E77 4B                      		dec	ebx
 10313 00006E78 08C3                    		or	bl, al
 10314 00006E7A 8B0D[709D0000]          		mov	ecx, [mp3_output_sample_rate]
 10315 00006E80 B704                    		mov	bh, 4 ; start to play
 10316                                  
 10317                                  		; 13/01/2025
 10318                                  mp3_cast_to_speaker_@:		
 10319 00006E82 53                      		push	ebx
 10320 00006E83 51                      		push	ecx
 10321                                  %endif
 10322                                                  ; 12/01/2025
 10323                                  		;call	try_enqueue_all_blocks
 10324                                  	
 10325                                  		; 12/01/2025
 10326                                  		;cmp	dword [bytes_left],0
 10327                                  		;jz	short .playback
 10328                                  		
 10329                                  		; 12/01/2025
 10330                                  		; (here audio buffer -sample_buffer- is empty)
 10331                                  		; (clear dma half buffer 1)
 10332                                  		sys	_audio, 1001h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006E84 BB01100000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006E89 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006E8E CD40                <1>  int 40h
 10333                                  		; (clear dma half buffer 2)
 10334                                  		;sys	_audio, 1002h
 10335                                  
 10336                                  		; TRDOS 386 system call
 10337                                  		; sysaudio
 10338                                  		; bh = 16 : update (current, first) dma half buffer
 10339                                  		; bl = 0  : then switch to the next (second) half buffer
 10340                                  		sys	_audio, 1000h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006E90 BB00100000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006E95 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006E9A CD40                <1>  int 40h
 10341                                  
 10342                                  		; 12/01/2025
 10343                                  		; 22/10/2024
 10344                                  		;call	try_enqueue_all_blocks
 10345                                  .playback:
 10346                                  		; TRDOS 386 system call
 10347                                  		; sysaudio
 10348                                  		; Set Master Volume Level (BL=0 or 80h)
 10349                                  		; 	for next playing (BL>=80h)
 10350                                  		;sys	_audio, 0B80h, 1D1Dh
 10351                                  		sys	_audio, 0B00h, 1D1Dh
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006E9C BB000B0000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 00006EA1 B91D1D0000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006EA6 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006EAB CD40                <1>  int 40h
 10352                                  
 10353                                  		;mov	byte [volume_level], 1Dh
 10354 00006EAD 880D[298D0000]          		mov	[volume_level], cl
 10355                                  ; 13/01/2025
 10356                                  %if 0
 10357                                  		; Start	to play
 10358                                  		mov	eax, [mp3_bytes_per_sample]
 10359                                  		;shr	al, 1 ; 8 -> 0, 16 -> 1
 10360                                  		;shl	al, 1 ; 16 -> 2, 8 -> 0
 10361                                  		and	al, 2 ; 22/10/2024
 10362                                  		mov	ebx, [mp3_output_num_channels]
 10363                                  		dec	ebx
 10364                                  		or	bl, al
 10365                                  		mov	ecx, [mp3_output_sample_rate]
 10366                                  		mov	bh, 4 ; start to play
 10367                                  %else
 10368 00006EB3 59                      		pop	ecx ; sample rate (frequency)
 10369 00006EB4 5B                      		pop	ebx ; play mode (bl)
 10370                                  %endif
 10371                                  		; TRDOS 386 system call
 10372                                  		; sysaudio
 10373                                  		; bh = 4 -> start to play
 10374                                  		; bl = mode -> bit 0, 1 = stereo, 0 = mono
 10375                                  		;	       bit 1, 1 = 16 bit, 0 = 8 bit
 10376                                  		; cx = sample rate (hertz)
 10377                                  		sys	_audio
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006EB5 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006EBA CD40                <1>  int 40h
 10378                                  
 10379                                  		; 12/01/2025
 10380 00006EBC C605[288D0000]00        		mov	byte [srb], 0
 10381                                  		;;;
 10382                                  
 10383                                  .playback_lop:
 10384 00006EC3 31C0                    		xor	eax, eax
 10385 00006EC5 3905[A42C0500]          		cmp	[bytes_left], eax ; 0
 10386 00006ECB 7508                    		jnz	short .playback_next
 10387                                  		; 22/10/2024
 10388 00006ECD 3805[D0840000]          		cmp	byte [num_enqueued_frames], al ; 0
 10389 00006ED3 7415                                    jz	short .playback_end
 10390                                  .playback_next:
 10391 00006ED5 A2[D0840000]            		mov	[num_enqueued_frames], al ; 0
 10392 00006EDA 803D[288D0000]01        		cmp	byte [srb], 1	; audio interrupt status
 10393 00006EE1 7238                    		jb	short .getchar
 10394                                  		;mov	byte [srb], 0	; reset
 10395 00006EE3 A2[288D0000]            		mov	[srb], al ; 0
 10396                                  		; 12/01/2025
 10397                                  		;call	try_enqueue_all_blocks
 10398                                  		; 15/01/2025
 10399 00006EE8 EBD9                    		jmp	short .playback_lop
 10400                                  
 10401                                  .playback_end:
 10402                                  		; TRDOS 386 system call
 10403                                  		; sysaudio
 10404                                  		; Stop playing
 10405                                  		sys	_audio, 0700h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006EEA BB00070000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006EEF B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006EF4 CD40                <1>  int 40h
 10406                                  		; Cancel callback service (for user)
 10407                                  		sys	_audio, 0900h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006EF6 BB00090000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006EFB B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006F00 CD40                <1>  int 40h
 10408                                  		; Deallocate audio buffer (for user)
 10409                                  		sys	_audio, 0A00h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006F02 BB000A0000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006F07 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006F0C CD40                <1>  int 40h
 10410                                  		; Disable audio device
 10411                                  		sys	_audio, 0C00h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006F0E BB000C0000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006F13 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006F18 CD40                <1>  int 40h
 10412 00006F1A C3                      		retn
 10413                                  
 10414                                  .getchar:
 10415                                  		; TRDOS 386 system call
 10416                                  		; sysstdio
 10417                                  		; BL = 1 -> read a character on stdin (no wait)
 10418                                  		sys	_stdio, 1
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006F1B BB01000000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006F20 B82E000000          <1>  mov eax, %1
   130                              <1> 
   131 00006F25 CD40                <1>  int 40h
 10419 00006F27 21C0                    		and	eax, eax
 10420 00006F29 74AA                    		jz	.playback_next ; 15/01/2024
 10421                                  
 10422 00006F2B 3C2B                    		cmp	al, '+' ; increase sound volume
 10423 00006F2D 7418                    		je	short .inc_volume
 10424 00006F2F 3C2D                    		cmp	al, '-'
 10425 00006F31 743A                    		je	short .dec_volume
 10426                                  
 10427                                  		;;;
 10428                                  		; 10/01/2025
 10429                                  		;cmp	ah, 01h
 10430 00006F33 3C1B                    		cmp	al, 1Bh	; ESC
 10431 00006F35 74B3                    		je	short .playback_end
 10432                                  		;cmp	ax, 2E03h
 10433 00006F37 3C03                    		cmp	al, 03h	; CTRL+C
 10434 00006F39 74AF                    		je	short .playback_end
 10435                                  		;;;
 10436                                  		; 12/01/2025
 10437 00006F3B 24DF                    		and	al, 0DFh
 10438 00006F3D 3C48                    		cmp	al, 'H'
 10439 00006F3F 743F                    		je	short .hw_info
 10440 00006F41 3C42                    		cmp	al, 'B'
 10441 00006F43 7445                    		je	short .b_info
 10442 00006F45 EB8E                    		jmp	.playback_next
 10443                                  
 10444                                  .inc_volume:
 10445 00006F47 8A0D[298D0000]          		mov	cl, [volume_level]
 10446 00006F4D 80F91F                  		cmp	cl, 1Fh ; 31
 10447 00006F50 7383                    		jnb	.playback_next
 10448 00006F52 FEC1                    		inc	cl
 10449                                  .chg_volume:
 10450 00006F54 880D[298D0000]          		mov	[volume_level], cl
 10451 00006F5A 88CD                    		mov	ch, cl
 10452                                  		; TRDOS 386 system call
 10453                                  		; sysstdio
 10454                                  		; Set master volume level
 10455                                  		; bh = 11
 10456                                  		; cl = left channel volume (0 to 31 max)
 10457                                  		; ch = right channel volume (0 to 31 max)
 10458                                  		sys	_audio, 0B00h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006F5C BB000B0000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006F61 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006F66 CD40                <1>  int 40h
 10459 00006F68 E968FFFFFF              		jmp	.playback_next
 10460                                  .dec_volume:
 10461 00006F6D 8A0D[298D0000]          		mov	cl, [volume_level]
 10462 00006F73 80F901                  		cmp	cl, 1 ; 1
 10463 00006F76 0F8659FFFFFF            		jna	.playback_next
 10464 00006F7C FEC9                    		dec	cl
 10465 00006F7E EBD4                    		jmp	short .chg_volume
 10466                                  
 10467                                  		; 12/01/2025
 10468                                  .hw_info:
 10469 00006F80 E80A020000              		call	write_audio_dev_info
 10470 00006F85 E94BFFFFFF              		jmp	.playback_next
 10471                                  		; 12/01/2025
 10472                                  .b_info:
 10473 00006F8A E875040000              		call	write_buffer_size
 10474 00006F8F E941FFFFFF              		jmp	.playback_next
 10475                                  
 10476                                  
 10477                                  ; =============== S U B R O U T I N E =======================================
 10478                                  		
 10479                                  		; 15/01/2025 (mp3play2.s) -interpolation excluded-
 10480                                  		; 13/01/2025 (mp3play3.s) -interpolation included-
 10481                                  		; 12/01/2025
 10482                                  		; 09/01/2025
 10483                                  		; 21/10/2024
 10484                                  try_enqueue_all_blocks:
 10485                                  		; 12/01/2025
 10486 00006F94 60                      		pusha
 10487 00006F95 BF[00500500]             		mov	edi, sample_buffer
 10488                                  		; 10/01/2025
 10489                                  		;jmp	short .first_block
 10490                                  		; 13/01/2025
 10491 00006F9A EB15                    		jmp	short try_enqueue_all_blocks_@
 10492                                  ;.next_block:
 10493                                  teab_next_block:
 10494 00006F9C 833D[A42C0500]00                        cmp	dword [bytes_left], 0
 10495                                                  ;jle	short .enqueue_done
 10496                                  		; 13/01/2025
 10497 00006FA3 7E56                    		jle	short teab_enqueue_done
 10498                                  		;
 10499 00006FA5 8B3D[30F40000]          		mov	edi, [mp3_samples_dst]
 10500 00006FAB 033D[34F40000]          		add	edi, [mp3_samples_output_size]
 10501                                  
 10502                                  try_enqueue_all_blocks_@:
 10503                                  ;.first_block:
 10504                                  		;pusha
 10505 00006FB1 8B35[A02C0500]          		mov	esi, [stream_pos]
 10506 00006FB7 8B0D[A42C0500]          		mov	ecx, [bytes_left]
 10507 00006FBD 31ED                    		xor	ebp, ebp
 10508 00006FBF E890F2FFFF              		call	mp3_decode_frame
 10509                                  		;popa
 10510                                  		;jc	short .enqueue_done
 10511                                  		; 13/01/2025
 10512 00006FC4 7235                    		jc	short teab_enqueue_done
 10513 00006FC6 A1[449D0000]            		mov	eax, [mp3_src_frame_size]
 10514 00006FCB 83F800                  		cmp	eax, 0
 10515                                  		;jz	short .enqueue_done
 10516                                  		; 13/01/2025
 10517 00006FCE 742B                    		jz	short teab_enqueue_done
 10518 00006FD0 0105[A02C0500]          		add	[stream_pos], eax
 10519 00006FD6 2905[A42C0500]          		sub	[bytes_left], eax
 10520 00006FDC A1[34F40000]            		mov	eax, [mp3_samples_output_size]
 10521 00006FE1 83F800                  		cmp	eax, 0
 10522                                  		;jz	short .next_block
 10523                                  		; 13/01/2025
 10524 00006FE4 74B6                    		jz	short teab_next_block
 10525                                  ;.no_error:
 10526 00006FE6 FE05[D0840000]          		inc	byte [num_enqueued_frames]
 10527 00006FEC A0[D0840000]            		mov	al, [num_enqueued_frames]
 10528 00006FF1 3A05[2A8D0000]          		cmp	al, [blocks]
 10529                                  		;jb	short .next_block
 10530                                  		; 13/01/2025
 10531 00006FF7 72A3                    		jb	short teab_next_block
 10532                                  teab_rtn:
 10533                                  ;.rtn:
 10534                                  		; 12/01/2025
 10535 00006FF9 61                      		popa
 10536 00006FFA C3                      		retn
 10537                                  ;.enqueue_done:
 10538                                  teab_enqueue_done:
 10539 00006FFB C705[A42C0500]0000-                     mov	dword [bytes_left], 0
 10539 00007003 0000               
 10540                                  		; 12/01/2025
 10541                                  		;jmp	short .rtn
 10542                                  		; 13/01/2025
 10543 00007005 EBF2                    		jmp	short teab_rtn
 10544                                  
 10545                                  
 10546                                  ; ---------------------------------------------------------------------------
 10547                                  ; 15/01/2025 - mono to stereo - 8bit to 16bit - conversion procedures (AC97)
 10548                                  ; ---------------------------------------------------------------------------
 10549                                  
 10550                                  ; =============== S U B R O U T I N E =======================================
 10551                                  		
 10552                                  		; 15/01/2025
 10553                                  audio_system_init_x:
 10554 00007007 8B0D[34F40000]          		mov	ecx, [mp3_samples_output_size]
 10555 0000700D 89C8                    		mov	eax, ecx
 10556                                  
 10557                                  		; 48 kHZ with 16 bit stereo conversion
 10558                                  		;
 10559                                  		; selected output is
 10560                                  		;	 8bit stereo or 16bit mono or 8bit mono
 10561                                  		; (but AC97 hardware needs 16bit stereo samples)
 10562                                  	
 10563 0000700F D1E0                    		shl	eax, 1 ; * 2 (mono to stereo)
 10564                                  
 10565 00007011 BB[26710000]            		mov	ebx, convert_to_stereo
 10566 00007016 803D[749D0000]02        		cmp	byte [mp3_bytes_per_sample], 2
 10567 0000701D 7415                    		je	short .set_sizes ; 16bit mono
 10568                                  
 10569                                  		; 8bit output (16bit conversion is neeed)
 10570 0000701F BB[55710000]            		mov	ebx, convert_to_16bit
 10571 00007024 803D[6C9D0000]02        		cmp	byte [mp3_output_num_channels], 2
 10572 0000702B 7407                    		je	short .set_sizes ; 8bit stereo
 10573                                  		; 8bit mono output
 10574 0000702D D1E0                    		shl	eax, 1
 10575 0000702F BB[71710000]            		mov	ebx, convert_to_stereo_16bit
 10576                                  .set_sizes:
 10577 00007034 891D[308D0000]          		mov	[conversion], ebx
 10578 0000703A 890D[348D0000]          		mov	[loadsize], ecx
 10579                                  		;;;
 10580                                  		; align to 16bit stereo (if there is a defect)
 10581                                  		;and	al, ~3
 10582 00007040 A3[2C8D0000]            		mov	[buffer_size], eax
 10583                                  		;;;
 10584                                  .asix_@:
 10585                                  		; TRDOS 386 system call
 10586                                  		; sysaudio
 10587                                  		; Allocate audio buffer (for user)
 10588                                  		; ebx = 0200h (BH=2)
 10589                                  		; ecx = buffer size (in bytes)
 10590                                  		; edx = buffer address (virtual)
 10591                                  
 10592                                  		sys	_audio, 0200h, [buffer_size], sample_buffer
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00007045 BB00020000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 0000704A 8B0D[2C8D0000]      <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 00007050 BA[00500500]        <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00007055 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 0000705A CD40                <1>  int 40h
 10593 0000705C 7228                    		jc	short .init_err
 10594                                  
 10595                                  		; clear audio buffer (before playback)
 10596 0000705E BF[00500500]            		mov	edi, sample_buffer
 10597                                  		; ecx = buffer size in bytes
 10598 00007063 83C103                  		add	ecx, 3	; 13/01/2025
 10599 00007066 C1E902                  		shr	ecx, 2
 10600 00007069 31C0                    		xor	eax, eax
 10601 0000706B F3AB                    		rep	stosd
 10602                                  
 10603                                  		; TRDOS 386 system call
 10604                                  		; sysaudio
 10605                                  		; Initialize audio device (bh = 3)
 10606                                  		; bl = 01h -> CallBack method
 10607                                  		; edx = Callback service address (virtual)
 10608                                  		; ecx = 0 ; CL = srb value ; not used
 10609                                  		sys	_audio, 0301h, 0, audio_callback_x
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 0000706D BB01030000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 00007072 B900000000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 00007077 BA[07710000]        <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 0000707C B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00007081 CD40                <1>  int 40h
 10610 00007083 7201                    		jc	short .init_err
 10611 00007085 C3                      		retn
 10612                                  .init_err:
 10613 00007086 E98DFDFFFF              		jmp	init_error
 10614                                  
 10615                                  
 10616                                  ; =============== S U B R O U T I N E =======================================
 10617                                  
 10618                                  		; 15/01/2025 (mp3play2.s)
 10619                                  		; 14/01/2025 (mp3play3.s)
 10620                                  		; 13/01/2025
 10621                                  mp3_cast_to_speaker_x:
 10622                                  ; 13/01/2025
 10623                                  %if 0
 10624                                  		; Start	to play
 10625                                  		mov	eax, [mp3_bytes_per_sample]
 10626                                  		;shr	al, 1 ; 8 -> 0, 16 -> 1
 10627                                  		;shl	al, 1 ; 16 -> 2, 8 -> 0
 10628                                  		and	al, 2
 10629                                  		mov	ebx, [mp3_output_num_channels]
 10630                                  		dec	ebx
 10631                                  		or	bl, al
 10632                                  		mov	ecx, [mp3_output_sample_rate]
 10633                                  		mov	bh, 4 ; start to play
 10634                                  %else
 10635                                  		;; 48 kHZ, 16bit, stereo
 10636 0000708B BB03040000              		mov	ebx, 0403h
 10637                                  		; 15/01/2025
 10638                                  		;mov	ecx, 48000
 10639                                  		;; 14/01/2025
 10640                                  		;cmp	byte [vra], 1
 10641                                  		;jb	short .jmpto@
 10642 00007090 8B0D[709D0000]          		mov	ecx, [mp3_output_sample_rate]
 10643                                  ;.jmpto@:
 10644                                  %endif
 10645 00007096 E9E7FDFFFF              		jmp	mp3_cast_to_speaker_@
 10646                                  
 10647                                  
 10648                                  ; =============== S U B R O U T I N E =======================================
 10649                                  
 10650                                  		; 15/01/2025 (mp3play3.s & mp3play2.s)
 10651                                  		; 13/01/2025
 10652                                  try_enqueue_all_blocks_x:
 10653                                  		; 12/01/2025
 10654 0000709B 60                      		pusha
 10655 0000709C BF[00300500]             		mov	edi, decoding_buffer
 10656                                  		; 15/01/2025
 10657                                  		;jmp	try_enqueue_all_blocks_@
 10658 000070A1 EB15                    		jmp	short .first_block
 10659                                  
 10660                                  		; 15/01/2025
 10661                                  .next_block:
 10662 000070A3 833D[A42C0500]00                        cmp	dword [bytes_left], 0
 10663 000070AA 7E4F                                    jle	short .enqueue_done
 10664                                  		;
 10665 000070AC 8B3D[30F40000]          		mov	edi, [mp3_samples_dst]
 10666 000070B2 033D[34F40000]          		add	edi, [mp3_samples_output_size]
 10667                                  
 10668                                  ;try_enqueue_all_blocks_@:
 10669                                  .first_block:
 10670                                  		;pusha
 10671 000070B8 8B35[A02C0500]          		mov	esi, [stream_pos]
 10672 000070BE 8B0D[A42C0500]          		mov	ecx, [bytes_left]
 10673 000070C4 31ED                    		xor	ebp, ebp
 10674 000070C6 E889F1FFFF              		call	mp3_decode_frame
 10675                                  		;popa
 10676 000070CB 722E                    		jc	short .enqueue_done
 10677                                  
 10678 000070CD A1[449D0000]            		mov	eax, [mp3_src_frame_size]
 10679 000070D2 83F800                  		cmp	eax, 0
 10680 000070D5 7424                    		jz	short .enqueue_done
 10681 000070D7 0105[A02C0500]          		add	[stream_pos], eax
 10682 000070DD 2905[A42C0500]          		sub	[bytes_left], eax
 10683                                  
 10684 000070E3 A1[34F40000]            		mov	eax, [mp3_samples_output_size]
 10685 000070E8 83F800                  		cmp	eax, 0
 10686 000070EB 74B6                    		jz	short .next_block
 10687                                  
 10688                                  		; 15/01/2025
 10689 000070ED FF15[308D0000]          		call	dword [conversion]
 10690                                  .no_error:
 10691                                  		; 15/01/2025
 10692 000070F3 FE05[D0840000]          		inc	byte [num_enqueued_frames]
 10693                                  .rtn:
 10694                                  		; 12/01/2025
 10695 000070F9 61                      		popa
 10696 000070FA C3                      		retn
 10697                                  .enqueue_done:
 10698 000070FB C705[A42C0500]0000-                     mov	dword [bytes_left], 0
 10698 00007103 0000               
 10699                                  		; 12/01/2025
 10700 00007105 EBF2                    		jmp	short .rtn
 10701                                  
 10702                                  
 10703                                  ; =============== S U B R O U T I N E =======================================
 10704                                  
 10705                                  		; 15/01/2025 (mp3play3.s & mp3play1.s)
 10706                                  		; 13/01/2025 
 10707                                  audio_callback_x:
 10708                                  		; Operating system has directed CPU here because of
 10709                                  		; user (2nd) stage of the audio hardware interrupt service.
 10710                                  		; This procedure must be short and return to operating
 10711                                  		; system again via sysrelease system call
 10712                                  		; (or any system call here will be handled as sysrelease).
 10713                                  
 10714 00007107 C605[288D0000]01        		mov	byte [srb], 1
 10715                                  
 10716 0000710E E888FFFFFF              		call	try_enqueue_all_blocks_x
 10717                                  
 10718                                  		; 15/01/2025
 10719                                  		;call	dword [conversion]
 10720                                  
 10721                                  		sys	_rele ; return from callback service 
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00007113 B827000000          <1>  mov eax, %1
   130                              <1> 
   131 00007118 CD40                <1>  int 40h
 10722                                  		
 10723                                  		; we must not come here !
 10724 0000711A BBFFFFFFFF              		mov	ebx, -1
 10725                                  		sys	_exit
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 0000711F B801000000          <1>  mov eax, %1
   130                              <1> 
   131 00007124 CD40                <1>  int 40h
 10726                                  		;jmp	short audio_callback
 10727                                  
 10728                                  
 10729                                  ; ---------------------------------------------------------------------------
 10730                                  ; conversion procedures
 10731                                  ; ---------------------------------------------------------------------------
 10732                                  
 10733                                  ; 15/01/2025 (mp3play1.s)
 10734                                  ; 13/01/2025 (mp3play3.s)
 10735                                  
 10736                                  ; convert_to_stereo: convert 16bit mono samples to 16bit stereo
 10737                                  ; convert_to_16bit: convert 8bit stereo samples to 16bit stereo	
 10738                                  ; convert_to_stereo_16bit: convert 8bit mono samples to 16bit & stereo
 10739                                  ; [loadsize] = decoding buffer size
 10740                                  ; [buffer_size] = wav output buffer size (<= 64KB)
 10741                                  
 10742                                  ; =============== S U B R O U T I N E =======================================
 10743                                  
 10744                                  ; /////
 10745                                  
 10746                                  	; 13/01/2025
 10747                                  convert_to_stereo:
 10748 00007126 BE[00300500]            	mov	esi, decoding_buffer ; (contains 16bit mono samples)
 10749 0000712B BF[00500500]            	mov	edi, sample_buffer ; wav output buffer
 10750 00007130 8B0D[348D0000]          	mov	ecx, [loadsize]
 10751 00007136 D1E9                    	shr	ecx, 1 ; word count
 10752                                  cts_1:
 10753 00007138 66AD                    	lodsw
 10754 0000713A 66AB                    	stosw	; left channel
 10755 0000713C 66AB                    	stosw	; right channel
 10756 0000713E E2F8                    	loop	cts_1
 10757                                  cts_2:
 10758                                  	; padfill
 10759 00007140 8B0D[2C8D0000]          	mov	ecx, [buffer_size] 
 10760 00007146 81C1[00500500]          	add	ecx, sample_buffer
 10761 0000714C 29F9                    	sub	ecx, edi
 10762 0000714E 7604                    	jna	short cts_3
 10763 00007150 31C0                    	xor	eax, eax
 10764 00007152 F3AA                    	rep	stosb
 10765                                  cts_3:
 10766 00007154 C3                      	retn
 10767                                  
 10768                                  ; =============== S U B R O U T I N E =======================================
 10769                                  
 10770                                  ; /////
 10771                                  
 10772                                  	; 13/01/2025
 10773                                  convert_to_16bit:
 10774 00007155 BE[00300500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 10775 0000715A BF[00500500]            	mov	edi, sample_buffer ; wav output buffer
 10776 0000715F 8B0D[348D0000]          	mov	ecx, [loadsize]
 10777                                  ct16b_1:
 10778                                  	; stereo & 8 bit
 10779 00007165 AC                      	lodsb
 10780 00007166 2C80                    	sub	al, 80h ; 08/11/2023
 10781 00007168 C1E008                  	shl	eax, 8 ; convert 8 bit sample to 16 bit sample
 10782 0000716B 66AB                    	stosw
 10783 0000716D E2F6                    	loop	ct16b_1
 10784 0000716F EBCF                    	jmp	short cts_2
 10785                                  
 10786                                  ; =============== S U B R O U T I N E =======================================
 10787                                  
 10788                                  ; /////
 10789                                  
 10790                                  	; 13/01/2025
 10791                                  convert_to_stereo_16bit:
 10792 00007171 BE[00300500]            	mov	esi, decoding_buffer ; (contains 8bit mono samples)
 10793 00007176 BF[00500500]            	mov	edi, sample_buffer ; wav output buffer
 10794 0000717B 8B0D[348D0000]          	mov	ecx, [loadsize]
 10795                                  cts16b_1:
 10796                                  	; mono & 8 bit
 10797 00007181 AC                      	lodsb
 10798 00007182 2C80                    	sub	al, 80h ; 08/11/2023
 10799 00007184 C1E008                  	shl	eax, 8 ; convert 8 bit sample to 16 bit sample
 10800 00007187 66AB                    	stosw	; left channel
 10801 00007189 66AB                    	stosw	; right channel
 10802 0000718B E2F4                    	loop	cts16b_1
 10803 0000718D EBB1                    	jmp	short cts_2
 10804                                  
 10805                                  ; /////
 10806                                  
 10807                                  
 10808                                  ; ---------------------------------------------------------------------------
 10809                                  ; 12/01/2025- Hardware Info display/write procedures.
 10810                                  ; ---------------------------------------------------------------------------
 10811                                  ; ref: playwav9.s (18/12/2024) - sb16play.s (20/12/2024)
 10812                                  
 10813                                  	; 15/01/2025 (mp3play3.s & mp3play2.s)
 10814                                  	; 12/01/2025
 10815                                  write_audio_dev_info:
 10816 0000718F 803D[248D0000]02        	cmp	byte [audio_hardware], 2
 10817 00007196 7203                    	jb	short write_sb16_dev_info  ; SB16
 10818 00007198 745A                    	je	short write_ac97_pci_dev_info ; AC97
 10819 0000719A C3                      	retn
 10820                                  
 10821                                  	; 20/12/2024 (playwavx.s, sb16play.s)
 10822                                  write_sb16_dev_info:
 10823                                  	; 27/11/2024
 10824                                  	; 24/11/2024 (sb16play.asm)
 10825                                  
 10826 0000719B A1[1C8D0000]            	mov	eax, [audio_io_base]
 10827 000071A0 31DB                    	xor	ebx, ebx
 10828 000071A2 88C3                    	mov	bl, al
 10829 000071A4 88DA                    	mov	dl, bl
 10830 000071A6 80E30F                  	and	bl, 0Fh
 10831 000071A9 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10832 000071AF A2[D2750000]            	mov	[msgBasePort+2], al
 10833 000071B4 88D3                    	mov	bl, dl
 10834 000071B6 C0EB04                  	shr	bl, 4
 10835 000071B9 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10836 000071BF A2[D1750000]            	mov	[msgBasePort+1], al
 10837 000071C4 88E3                    	mov	bl, ah
 10838                                  	;and	bl, 0Fh
 10839 000071C6 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10840 000071CC A2[D0750000]            	mov	[msgBasePort], al
 10841                                  
 10842                                  	;xor	eax, eax
 10843                                  	; 27/11/2024
 10844 000071D1 A0[208D0000]            	mov	al, [audio_intr]
 10845                                  	;mov	cl, 10
 10846                                  	;div	cl
 10847                                  	;add	ah, 30h
 10848                                  	;mov	[msgIRQnum], ah
 10849                                  	; 25/11/2024
 10850 000071D6 0430                    	add	al, 30h
 10851 000071D8 A2[E7750000]            	mov	[msgIRQnum], al	; 12/01/2025
 10852                                  
 10853                                  	; 12/01/2025	
 10854                                  	; 20/12/2024
 10855                                  	sys	_msg, msgSB16Info, 255, 07h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 000071DD BB[9A750000]        <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 000071E2 B9FF000000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 000071E7 BA07000000          <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 000071EC B823000000          <1>  mov eax, %1
   130                              <1> 
   131 000071F1 CD40                <1>  int 40h
 10856                                  
 10857 000071F3 C3                      	retn
 10858                                  	
 10859                                  write_ac97_pci_dev_info:
 10860                                  	; 19/11/2024
 10861                                  	; 30/05/2024
 10862                                  	; 06/06/2017
 10863                                  	; 03/06/2017
 10864                                  	; BUS/DEV/FN
 10865                                  	;	00000000BBBBBBBBDDDDDFFF00000000
 10866                                  	; DEV/VENDOR
 10867                                  	;	DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV
 10868                                  
 10869 000071F4 A1[148D0000]            	mov	eax, [dev_vendor]
 10870 000071F9 31DB                    	xor	ebx, ebx
 10871 000071FB 88C3                    	mov	bl, al
 10872 000071FD 88DA                    	mov	dl, bl
 10873 000071FF 80E30F                  	and	bl, 0Fh
 10874 00007202 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10875 00007208 A2[1B750000]            	mov	[msgVendorId+3], al
 10876 0000720D 88D3                    	mov	bl, dl
 10877 0000720F C0EB04                  	shr	bl, 4
 10878 00007212 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10879 00007218 A2[1A750000]            	mov	[msgVendorId+2], al
 10880 0000721D 88E3                    	mov	bl, ah
 10881 0000721F 88DA                    	mov	dl, bl
 10882 00007221 80E30F                  	and	bl, 0Fh
 10883 00007224 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10884 0000722A A2[19750000]            	mov	[msgVendorId+1], al
 10885 0000722F 88D3                    	mov	bl, dl
 10886 00007231 C0EB04                  	shr	bl, 4
 10887 00007234 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10888 0000723A A2[18750000]            	mov	[msgVendorId], al
 10889 0000723F C1E810                  	shr	eax, 16
 10890 00007242 88C3                    	mov	bl, al
 10891 00007244 88DA                    	mov	dl, bl
 10892 00007246 80E30F                  	and	bl, 0Fh
 10893 00007249 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10894 0000724F A2[2C750000]            	mov	[msgDevId+3], al
 10895 00007254 88D3                    	mov	bl, dl
 10896 00007256 C0EB04                  	shr	bl, 4
 10897 00007259 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10898 0000725F A2[2B750000]            	mov	[msgDevId+2], al
 10899 00007264 88E3                    	mov	bl, ah
 10900 00007266 88DA                    	mov	dl, bl
 10901 00007268 80E30F                  	and	bl, 0Fh
 10902 0000726B 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10903 00007271 A2[2A750000]            	mov	[msgDevId+1], al
 10904 00007276 88D3                    	mov	bl, dl
 10905 00007278 C0EB04                  	shr	bl, 4
 10906 0000727B 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10907 00007281 A2[29750000]            	mov	[msgDevId], al
 10908                                  
 10909 00007286 A1[108D0000]            	mov	eax, [bus_dev_fn]
 10910 0000728B C1E808                  	shr	eax, 8
 10911 0000728E 88C3                    	mov	bl, al
 10912 00007290 88DA                    	mov	dl, bl
 10913 00007292 80E307                  	and	bl, 7 ; bit 0,1,2
 10914 00007295 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10915 0000729B A2[51750000]            	mov	[msgFncNo+1], al
 10916 000072A0 88D3                    	mov	bl, dl
 10917 000072A2 C0EB03                  	shr	bl, 3
 10918 000072A5 88DA                    	mov	dl, bl
 10919 000072A7 80E30F                  	and	bl, 0Fh
 10920 000072AA 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10921 000072B0 A2[43750000]            	mov	[msgDevNo+1], al
 10922 000072B5 88D3                    	mov	bl, dl
 10923 000072B7 C0EB04                  	shr	bl, 4
 10924 000072BA 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10925 000072C0 A2[42750000]            	mov	[msgDevNo], al
 10926 000072C5 88E3                    	mov	bl, ah
 10927 000072C7 88DA                    	mov	dl, bl
 10928 000072C9 80E30F                  	and	bl, 0Fh
 10929 000072CC 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10930 000072D2 A2[37750000]            	mov	[msgBusNo+1], al
 10931 000072D7 88D3                    	mov	bl, dl
 10932 000072D9 C0EB04                  	shr	bl, 4
 10933 000072DC 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10934 000072E2 A2[36750000]            	mov	[msgBusNo], al
 10935                                  
 10936                                  	;mov	ax, [ac97_NamBar]
 10937 000072E7 66A1[188D0000]          	mov	ax, [NAMBAR]
 10938 000072ED 88C3                    	mov	bl, al
 10939 000072EF 88DA                    	mov	dl, bl
 10940 000072F1 80E30F                  	and	bl, 0Fh
 10941 000072F4 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10942 000072FA A2[61750000]            	mov	[msgNamBar+3], al
 10943 000072FF 88D3                    	mov	bl, dl
 10944 00007301 C0EB04                  	shr	bl, 4
 10945 00007304 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10946 0000730A A2[60750000]            	mov	[msgNamBar+2], al
 10947 0000730F 88E3                    	mov	bl, ah
 10948 00007311 88DA                    	mov	dl, bl
 10949 00007313 80E30F                  	and	bl, 0Fh
 10950 00007316 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10951 0000731C A2[5F750000]            	mov	[msgNamBar+1], al
 10952 00007321 88D3                    	mov	bl, dl
 10953 00007323 C0EB04                  	shr	bl, 4
 10954 00007326 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10955 0000732C A2[5E750000]            	mov	[msgNamBar], al
 10956                                  
 10957                                  	;mov	ax, [ac97_NabmBar]
 10958 00007331 66A1[1A8D0000]          	mov	ax, [NABMBAR]
 10959 00007337 88C3                    	mov	bl, al
 10960 00007339 88DA                    	mov	dl, bl
 10961 0000733B 80E30F                  	and	bl, 0Fh
 10962 0000733E 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10963 00007344 A2[71750000]            	mov	[msgNabmBar+3], al
 10964 00007349 88D3                    	mov	bl, dl
 10965 0000734B C0EB04                  	shr	bl, 4
 10966 0000734E 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10967 00007354 A2[70750000]            	mov	[msgNabmBar+2], al
 10968 00007359 88E3                    	mov	bl, ah
 10969 0000735B 88DA                    	mov	dl, bl
 10970 0000735D 80E30F                  	and	bl, 0Fh
 10971 00007360 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10972 00007366 A2[6F750000]            	mov	[msgNabmBar+1], al
 10973 0000736B 88D3                    	mov	bl, dl
 10974 0000736D C0EB04                  	shr	bl, 4
 10975 00007370 8A83[D4740000]          	mov	al, [ebx+hex_chars]
 10976 00007376 A2[6E750000]            	mov	[msgNabmBar], al
 10977                                  
 10978 0000737B 31C0                    	xor	eax, eax
 10979 0000737D A0[208D0000]            	mov	al, [ac97_int_ln_reg]
 10980 00007382 B10A                    	mov	cl, 10
 10981 00007384 F6F1                    	div	cl
 10982                                  	; 23/11/2024
 10983                                  	;add	[msgIRQ], ax
 10984 00007386 66053030                	add	ax, 3030h
 10985 0000738A 66A3[7A750000]          	mov	[msgIRQ], ax
 10986                                  	;and	al, al
 10987 00007390 3C30                    	cmp	al, 30h
 10988 00007392 750D                    	jnz	short _w_ac97imsg_
 10989 00007394 A0[7B750000]            	mov	al, byte [msgIRQ+1]
 10990 00007399 B420                    	mov	ah, ' '
 10991 0000739B 66A3[7A750000]          	mov	[msgIRQ], ax
 10992                                  _w_ac97imsg_:
 10993                                  	; 12/01/2025
 10994                                  	; 01/12/2024
 10995                                  	sys	_msg, msgAC97Info, 255, 07h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 000073A1 BB[E5740000]        <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 000073A6 B9FF000000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 000073AB BA07000000          <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 000073B0 B823000000          <1>  mov eax, %1
   130                              <1> 
   131 000073B5 CD40                <1>  int 40h
 10996                                  
 10997                                  	; 19/11/2024
 10998                                          ;retn
 10999                                  
 11000                                  	; 30/05/2024
 11001                                  write_VRA_info:
 11002                                  	; 12/01/2025
 11003                                  	; 01/12/2024
 11004                                  	sys	_msg, msgVRAheader, 255, 07h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 000073B7 BB[7F750000]        <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 000073BC B9FF000000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 000073C1 BA07000000          <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 000073C6 B823000000          <1>  mov eax, %1
   130                              <1> 
   131 000073CB CD40                <1>  int 40h
 11005 000073CD 803D[258D0000]00        	cmp	byte [vra], 0
 11006 000073D4 7617                    	jna	short _w_VRAi_no
 11007                                  _w_VRAi_yes:
 11008                                  	sys	_msg, msgVRAyes, 255, 07h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 000073D6 BB[8E750000]        <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 000073DB B9FF000000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 000073E0 BA07000000          <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 000073E5 B823000000          <1>  mov eax, %1
   130                              <1> 
   131 000073EA CD40                <1>  int 40h
 11009 000073EC C3                      	retn
 11010                                  _w_VRAi_no:
 11011                                  	sys	_msg, msgVRAno, 255, 07h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 000073ED BB[94750000]        <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 000073F2 B9FF000000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 000073F7 BA07000000          <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 000073FC B823000000          <1>  mov eax, %1
   130                              <1> 
   131 00007401 CD40                <1>  int 40h
 11012                                  
 11013 00007403 C3                      	retn
 11014                                  
 11015                                  ; ---------------------------------------------------------------------------
 11016                                  
 11017                                  	; 15/01/2025
 11018                                  	; 13/01/2025
 11019                                  	; 12/01/2025
 11020                                  write_buffer_size:
 11021                                  	;;;	
 11022 00007404 A0[2A8D0000]            	mov	al, [blocks]	; (must be less than 10) 
 11023 00007409 0430                    	add	al, '0'
 11024 0000740B A2[88740000]            	mov	byte [blocks_txt], al
 11025                                  	;;;
 11026                                  	;cmp	byte [interpolation], 1
 11027                                  	; 15/01/2025 (mp3play2.s)
 11028 00007410 803D[388D0000]01        	cmp	byte [convert], 1
 11029 00007417 731F                    	jnb	short write_buffer_size_x
 11030                                  	;;;
 11031 00007419 BA[70740000]            	mov	edx, buffersize_txt
 11032 0000741E E8BBF1FFFF              	call	wrstr_edx
 11033 00007423 A1[2C8D0000]            	mov	eax, [buffer_size]
 11034 00007428 E8E7F1FFFF              	call	wr_decimal_eax_with_thousands_seperator
 11035 0000742D BA[80740000]            	mov	edx, bytes_txt
 11036 00007432 E8A7F1FFFF              	call	wrstr_edx
 11037 00007437 C3                      	retn
 11038                                  
 11039                                  	; 13/01/2025 (Indirect interpolation info)
 11040                                  write_buffer_size_x:
 11041 00007438 BA[95740000]            	mov	edx, buffers1_txt
 11042 0000743D E89CF1FFFF              	call	wrstr_edx
 11043 00007442 A1[348D0000]            	mov	eax, [loadsize] ; decoding buffer size
 11044                                  	; 15/01/2025
 11045 00007447 E8C8F1FFFF              	call	wr_decimal_eax_with_thousands_seperator
 11046 0000744C E814000000              	call	w_dbuff_bytes
 11047 00007451 BA[B9740000]            	mov	edx, buffers2_txt
 11048 00007456 E883F1FFFF              	call	wrstr_edx
 11049 0000745B A1[2C8D0000]            	mov	eax, [buffer_size] ; wav buffer size
 11050 00007460 E8AFF1FFFF              	call	wr_decimal_eax_with_thousands_seperator
 11051                                  w_dbuff_bytes:
 11052 00007465 BA[CA740000]            	mov	edx, bytes2_txt
 11053 0000746A E86FF1FFFF              	call	wrstr_edx
 11054 0000746F C3                      	retn
 11055                                  
 11056                                  ; 11/01/2025
 11057 00007470 0D0A                    buffersize_txt	db 0Dh, 0Ah
 11058 00007472 427566666572205369-     		db 'Buffer Size: ', 0
 11058 0000747B 7A653A2000         
 11059                                  ; 12/01/2025
 11060                                  ;bytes_txt:	db ' bytes ', 0Dh, 0Ah, 0
 11061 00007480 2062797465732028        bytes_txt:	db ' bytes ('
 11062 00007488 3020626C6F636B7329-     blocks_txt	db '0 blocks) ', 0Dh, 0Ah, 0
 11062 00007491 200D0A00           
 11063                                  
 11064                                  ; 13/01/2025
 11065 00007495 0D0A                    buffers1_txt	db 0Dh, 0Ah
 11066 00007497 427566666572207369-     		db 'Buffer size for', 0Dh, 0Ah
 11066 000074A0 7A6520666F720D0A   
 11067 000074A8 202020206465636F64-     		db '    decoding is ', 0
 11067 000074B1 696E672069732000   
 11068 000074B9 2020776176206F7574-     buffers2_txt	db '  wav output is ', 0
 11068 000074C2 7075742069732000   
 11069 000074CA 206279746573200D0A-     bytes2_txt:	db ' bytes ', 0Dh, 0Ah, 0
 11069 000074D3 00                 
 11070                                  
 11071                                  ; ---------------------------------------------------------------------------
 11072                                  
 11073                                  ; 19/11/2024
 11074                                  ; 03/06/2017
 11075 000074D4 303132333435363738-     hex_chars	db "0123456789ABCDEF", 0
 11075 000074DD 3941424344454600   
 11076 000074E5 0D0A                    msgAC97Info	db 0Dh, 0Ah
 11077 000074E7 204143393720417564-     		db " AC97 Audio Controller & Codec Info", 0Dh, 0Ah
 11077 000074F0 696F20436F6E74726F-
 11077 000074F9 6C6C6572202620436F-
 11077 00007502 64656320496E666F0D-
 11077 0000750B 0A                 
 11078 0000750C 2056656E646F722049-     		db " Vendor ID: "
 11078 00007515 443A20             
 11079 00007518 303030306820446576-     msgVendorId	db "0000h Device ID: "
 11079 00007521 6963652049443A20   
 11080 00007529 30303030680D0A          msgDevId	db "0000h", 0Dh, 0Ah
 11081 00007530 204275733A20            		db " Bus: "
 11082 00007536 303068204465766963-     msgBusNo	db "00h Device: "
 11082 0000753F 653A20             
 11083 00007542 3030682046756E6374-     msgDevNo	db "00h Function: "
 11083 0000754B 696F6E3A20         
 11084 00007550 303068                  msgFncNo	db "00h"
 11085 00007553 0D0A                    		db 0Dh, 0Ah
 11086 00007555 204E414D4241523A20      		db " NAMBAR: "
 11087 0000755E 30303030682020          msgNamBar	db "0000h  "
 11088 00007565 4E41424D4241523A20      		db "NABMBAR: "
 11089 0000756E 303030306820204952-     msgNabmBar	db "0000h  IRQ: "
 11089 00007577 513A20             
 11090 0000757A 3030                    msgIRQ		dw 3030h
 11091 0000757C 0D0A00                  		db 0Dh, 0Ah, 0
 11092                                  ; 25/11/2023
 11093 0000757F 205652412073757070-     msgVRAheader	db " VRA support: "
 11093 00007588 6F72743A20         
 11094 0000758D 00                      		db 0	
 11095 0000758E 5945530D0A00            msgVRAyes	db "YES", 0Dh, 0Ah, 0
 11096 00007594 4E4F200D0A              msgVRAno	db "NO ", 0Dh, 0Ah
 11097                                  		; 12/01/2025
 11098                                  		;db " (Interpolated sample rate playing method)"
 11099 00007599 00                      		db 0
 11100                                  		;db 0Dh, 0Ah, 0
 11101                                  
 11102                                  ; ----------------------------------
 11103                                  
 11104                                  ; 24/11/2024
 11105 0000759A 0D0A                    msgSB16Info	db 0Dh, 0Ah
 11106 0000759C 20417564696F204861-     		db " Audio Hardware: Sound Blaster 16", 0Dh, 0Ah 
 11106 000075A5 7264776172653A2053-
 11106 000075AE 6F756E6420426C6173-
 11106 000075B7 7465722031360D0A   
 11107 000075BF 202020202020426173-     		db "      Base Port: "
 11107 000075C8 6520506F72743A20   
 11108 000075D0 303030680D0A            msgBasePort	db "000h", 0Dh, 0Ah 
 11109 000075D6 202020202020202020-     		db "            IRQ: "
 11109 000075DF 2020204952513A20   
 11110 000075E7 30                      msgIRQnum	db 30h		; 12/01/2025
 11111                                  crlf:		; 13/01/2025
 11112 000075E8 0D0A00                  		db 0Dh, 0Ah, 0
 11113                                  
 11114                                  
 11115                                  ; ===========================================================================
 11116                                  ; end of TRDOS 386 specific procedures.
 11117                                  ; ---------------------------------------------------------------------------
 11118                                  
 11119                                  ; ===========================================================================
 11120                                  ; Initialized DATA
 11121                                  ; ===========================================================================
 11122                                  
 11123 000075EB 00                      option_test     db 0                   
 11124 000075EC 00                      option_mono     db 0                   
 11125 000075ED 00                      option_8bit     db 0                   
 11126 000075EE 00                      option_rate_shift db 0                 
 11127 000075EF 00                      option_fast     db 0                   
 11128                                                  align 4
 11129 000075F0 00000000                cpuid_flags     dd 0                   
 11130 000075F4 00                      cpuid_exists    db 0                   
 11131 000075F5 00                      detected_cpu    db 0                   
 11132 000075F6 90<rep 2h>                              align 4
 11133 000075F8 00000000                mp3_output_milliseconds dd 0           
 11134 000075FC 00000000                millisecond_count dd 0
 11135                                  
 11136                                  ; 20/10/2024                 
 11137                                  ; HANDLE hProcess
 11138                                  ;hProcess       dd 0                   
 11139                                  ; HANDLE hThread
 11140                                  ;hThread        dd 0                   
 11141                                  ; DWORD dwPriorityClass
 11142                                  ;dwPriorityClass dd 0                   
 11143                                  ; int nPriority
 11144                                  ;nPriority      dd 0
 11145                                                     
 11146 00007600 0000000000000000        ttt             dd 2 dup(0)            
 11147 00007608 726561642068656164-     rdtsc_read_header db 'read header    ',0
 11147 00007611 65722020202000     
 11148 00007618 0000000000000000        rdtsc_read_header_extra dd  0, 0       
 11149 00007620 726561642065787472-                     db 'read extra     ',0
 11149 00007629 61202020202000     
 11150 00007630 0000000000000000        rdtsc_read_granule dd 0, 0             
 11151 00007638 72656164206772616E-                     db 'read granule   ',0
 11151 00007641 756C6520202000     
 11152 00007648 0000000000000000        rdtsc_append_main dd 2 dup(0)          
 11153 00007650 617070656E64206D61-                     db 'append main    ',0
 11153 00007659 696E2020202000     
 11154 00007660 0000000000000000        rdtsc_read_scalefac dd 2 dup(0)        
 11155 00007668 72656164207363616C-                     db 'read scalefac  ',0
 11155 00007671 65666163202000     
 11156 00007678 0000000000000000        rdtsc_xlat_scalefac dd 2 dup(0)        
 11157 00007680 786C6174207363616C-                     db 'xlat scalefac  ',0
 11157 00007689 65666163202000     
 11158 00007690 0000000000000000        rdtsc_read_huffman dd 2 dup(0)         
 11159 00007698 726561642068756666-                     db 'read huffman   ',0
 11159 000076A1 6D616E20202000     
 11160 000076A8 0000000000000000        rdtsc_ms_stereo dd 2 dup(0)            
 11161 000076B0 6D732073746572656F-                     db 'ms stereo      ',0
 11161 000076B9 20202020202000     
 11162 000076C0 0000000000000000        rdtsc_i_stereo  dd 2 dup(0)            
 11163 000076C8 692073746572656F20-                     db 'i stereo       ',0
 11163 000076D1 20202020202000     
 11164 000076D8 0000000000000000        rdtsc_reorder   dd 2 dup(0)            
 11165 000076E0 72656F726465722020-                     db 'reorder        ',0
 11165 000076E9 20202020202000     
 11166 000076F0 0000000000000000        rdtsc_antialias dd 2 dup(0)            
 11167 000076F8 616E7469616C696173-                     db 'antialias      ',0
 11167 00007701 20202020202000     
 11168 00007708 0000000000000000        rdtsc_imdct     dd 2 dup(0)            
 11169 00007710 696D64637420202020-                     db 'imdct          ',0
 11169 00007719 20202020202000     
 11170 00007720 0000000000000000        rdtsc_imdct36   dd 2 dup(0)            
 11171 00007728 20696D646374333620-                     db ' imdct36       ',0
 11171 00007731 20202020202000     
 11172 00007738 0000000000000000        rdtsc_imdct12   dd 2 dup(0)            
 11173 00007740 20696D646374313220-                     db ' imdct12       ',0
 11173 00007749 20202020202000     
 11174 00007750 0000000000000000        rdtsc_imdct0    dd 2 dup(0)            
 11175 00007758 20696D646374302020-                     db ' imdct0        ',0
 11175 00007761 20202020202000     
 11176 00007768 0000000000000000        rdtsc_synth_dct dd 2 dup(0)            
 11177 00007770 73796E74682F646374-                     db 'synth/dct      ',0
 11177 00007779 20202020202000     
 11178 00007780 0000000000000000        rdtsc_dct32     dd 2 dup(0)            
 11179 00007788 2073796E74682E6463-                     db ' synth.dct32   ',0
 11179 00007791 74333220202000     
 11180 00007798 0000000000000000        rdtsc_synth     dd 2 dup(0)            
 11181 000077A0 2073796E74682E6F75-                     db ' synth.output  ',0
 11181 000077A9 74707574202000     
 11182 000077B0 0000000000000000        rdtsc_total     dd 2 dup(0)            
 11183 000077B8 746F74616C20202020-                     db 'total          ',0
 11183 000077C1 20202020202000     
 11184 000077C8 000020002800300038-     mp3_bitrate_tab dw  0,32,40,48,56,64,80,96,112,128,160,192,224,256,320, 0
 11184 000077D1 004000500060007000-
 11184 000077DA 8000A000C000E00000-
 11184 000077E3 0140010000         
 11185 000077E8 000008001000180020-                     dw  0, 8,16,24,32,40,48,56,64,80,96,112,128,144,160, 0
 11185 000077F1 002800300038004000-
 11185 000077FA 500060007000800090-
 11185 00007803 00A0000000         
 11186 00007808 44AC80BB007D            mp3_freq_tab    dw 44100,48000,32000   
 11187 0000780E 000504040000            mp3_lsf_sf_expand_init_table db 0, 5, 4, 4, 0, 0
 11188 00007814 9001                                    dw 400                  ; 0..399 ; normal case
 11189 00007816 000504010C00                            db 0, 5, 4, 1, 0Ch, 0
 11190 0000781C F401                                    dw 500                  ; 400..499
 11191 0000781E 000301011801                            db 0, 3, 1, 1, 18h, 1
 11192 00007824 0002                                    dw 512                  ; 500..511
 11193 00007826 010606012400                            db 1, 6, 6, 1, 24h, 0
 11194 0000782C 6803                                    dw 872                  ; 512+360 ; 0..359 for 2nd channel of intensity stereo
 11195 0000782E 010404013000                            db 1, 4, 4, 1, 30h, 0
 11196 00007834 E803                                    dw 1000                 ; 512+488 ; 360..487
 11197 00007836 010301013C00                            db 1, 3, 1, 1, 3Ch, 0
 11198 0000783C 0004                                    dw 1024                 ; 512+512 ; 488..511
 11199 0000783E 010000000000000000-     mp3_synth_win_src dw      1,     0,     0,     0,     0,     0,     1,     0
 11199 00007847 00000001000000     
 11200 0000784E 000000000100000001-                     dw      0,     0,     1,     0,     1,     0,     1,     0
 11200 00007857 00000001000000     
 11201 0000785E 010001000000010001-                     dw      1,     1,     0,     1,     1,     1,     1,     2
 11201 00007867 00010001000200     
 11202 0000786E 010002000100020002-                     dw      1,     2,     1,     2,     2,     3,     2,     3
 11202 00007877 00030002000300     
 11203 0000787E 020004000300030004-                     dw      2,     4,     3,     3,     4,     4,     4,     5
 11203 00007887 00040004000500     
 11204 0000788E 050005000500060006-                     dw      5,     5,     5,     6,     6,     6,     6,     7
 11204 00007897 00060006000700     
 11205 0000789E 070006000800070007-                     dw      7,     6,     8,     7,     7,     8,     7,     7
 11205 000078A7 00080007000700     
 11206 000078AE 080007000700070006-                     dw      8,     7,     7,     7,     6,     6,     6,     5
 11206 000078B7 00060006000500     
 11207 000078BE 51FEFCFFFDFFFEFFFF-                     dw 0FE51h,0FFFCh,0FFFDh,0FFFEh,0FFFFh,     0,     1,     3
 11207 000078C7 FF000001000300     
 11208 000078CE 03000600070008000B-                     dw      3,     6,     7,     8,   0Bh,   0Ch,   0Eh,   11h
 11208 000078D7 000C000E001100     
 11209 000078DE 1300150017001A001C-                     dw    13h,   15h,   17h,   1Ah,   1Ch,   1Fh,   22h,   24h
 11209 000078E7 001F0022002400     
 11210 000078EE 27002A002C002F0032-                     dw    27h,   2Ah,   2Ch,   2Fh,   32h,   35h,   36h,   3Ah
 11210 000078F7 00350036003A00     
 11211 000078FE 3C003E004000420044-                     dw    3Ch,   3Eh,   40h,   42h,   44h,   45h,   47h,   48h
 11211 00007907 00450047004800     
 11212 0000790E 490049004900490049-                     dw    49h,   49h,   49h,   49h,   49h,   48h,   46h,   45h
 11212 00007917 00480046004500     
 11213 0000791E 430040003D003A0035-                     dw    43h,   40h,   3Dh,   3Ah,   35h,   31h,   2Bh,   27h
 11213 00007927 0031002B002700     
 11214 0000792E 1F00190012000A0002-                     dw    1Fh,   19h,   12h,   0Ah,     2,0FFF9h,0FFEFh,0FFE6h
 11214 00007937 00F9FFEFFFE6FF     
 11215 0000793E 3BF030003B00470053-                     dw 0F03Bh,   30h,   3Bh,   47h,   53h,   5Fh,   6Dh,   79h
 11215 00007947 005F006D007900     
 11216 0000794E 86009500A100B000BD-                     dw    86h,   95h,  0A1h,  0B0h,  0BDh,  0CBh,  0D9h,  0E6h
 11216 00007957 00CB00D900E600     
 11217 0000795E F30001010D01190125-                     dw   0F3h,  101h,  10Dh,  119h,  125h,  130h,  13Ah,  144h
 11217 00007967 0130013A014401     
 11218 0000796E 4D0155015B01620166-                     dw   14Dh,  155h,  15Bh,  162h,  166h,  16Ah,  16Bh,  16Dh
 11218 00007977 016A016B016D01     
 11219 0000797E 6C016A01660160015A-                     dw   16Ch,  16Ah,  166h,  160h,  15Ah,  150h,  146h,  139h
 11219 00007987 01500146013901     
 11220 0000798E 2B011A010801F300DD-                     dw   12Bh,  11Ah,  108h,  0F3h,  0DDh,  0C5h,  0A9h,   8Eh
 11220 00007997 00C500A9008E00     
 11221 0000799E 6F004E002B000700E1-                     dw    6Fh,   4Eh,   2Bh,     7,0FFE1h,0FFB8h,0FF8Fh,0FF62h
 11221 000079A7 FFB8FF8FFF62FF     
 11222 000079AE 35FF06FFD5FEA4FE70-                     dw 0FF35h,0FF06h,0FED5h,0FEA4h,0FE70h,0FE3Ch,0FE06h,0FDD0h
 11222 000079B7 FE3CFE06FED0FD     
 11223 000079BE 0BCF9F02D702110349-                     dw 0CF0Bh,  29Fh,  2D7h,  311h,  349h,  382h,  3BBh,  3F4h
 11223 000079C7 038203BB03F403     
 11224 000079CE 2C0464049A04D10405-                     dw   42Ch,  464h,  49Ah,  4D1h,  505h,  538h,  56Ah,  59Bh
 11224 000079D7 0538056A059B05     
 11225 000079DE C805F505200647066C-                     dw   5C8h,  5F5h,  620h,  647h,  66Ch,  68Fh,  6AFh,  6CCh
 11225 000079E7 068F06AF06CC06     
 11226 000079EE E506FC060F071F072B-                     dw   6E5h,  6FCh,  70Fh,  71Fh,  72Bh,  734h,  739h,  739h
 11226 000079F7 07340739073907     
 11227 000079FE 370730072607170704-                     dw   737h,  730h,  726h,  717h,  704h,  6EDh,  6D3h,  6B4h
 11227 00007A07 07ED06D306B406     
 11228 00007A0E 91066C0640061306E1-                     dw   691h,  66Ch,  640h,  613h,  5E1h,  5ABh,  573h,  537h
 11228 00007A17 05AB0573053705     
 11229 00007A1E F704B4046F042704DB-                     dw   4F7h,  4B4h,  46Fh,  427h,  3DBh,  38Fh,  33Eh,  2EDh
 11229 00007A27 038F033E03ED02     
 11230 00007A2E 9A024402ED0195013D-                     dw   29Ah,  244h,  1EDh,  195h,  13Dh,  0E2h,   88h,   2Eh
 11230 00007A37 01E20088002E00     
 11231 00007A3E 00                                      db    0
 11232 00007A3F 00                                      db    0
 11233 00007A40 000000010002000303-     mp3_slen_table  dw  0000h, 0100h, 0200h, 0300h, 0003h, 0101h, 0201h, 0301h
 11233 00007A49 00010101020103     
 11234 00007A50 020102020203030103-                     dw  0102h, 0202h, 0302h, 0103h, 0203h, 0303h, 0204h, 0304h
 11234 00007A59 02030304020403     
 11235 00007A60 060505050909090906-     mp3_lsf_nsf_table dd  05050506h, 09090909h, 09090906h
 11235 00007A69 090909             
 11236 00007A6C 0605070309090C0606-                     dd  03070506h, 060C0909h, 060C0906h
 11236 00007A75 090C06             
 11237 00007A78 0B0A0000121200000F-                     dd  00000A0Bh, 00001212h, 0000120Fh
 11237 00007A81 120000             
 11238 00007A84 070707000C0C0C0006-                     dd  00070707h, 000C0C0Ch, 000C0F06h
 11238 00007A8D 0F0C00             
 11239 00007A90 060606030C09090606-                     dd  03060606h, 0609090Ch, 06090C06h
 11239 00007A99 0C0906             
 11240 00007A9C 080805000F0C090006-                     dd  00050808h, 00090C0Fh, 00091206h
 11240 00007AA5 120900             
 11241 00007AA8 1101100022021221        huff_tree_list_data db  11h,   1, 10h,   0, 22h,   2, 12h, 21h
 11242 00007AB0 2011011000220212                        db  20h, 11h,   1, 10h,   0, 22h,   2, 12h
 11243 00007AB8 2120101101003323                        db  21h, 20h, 10h, 11h,   1,   0, 33h, 23h
 11244 00007AC0 3231130330221221                        db  32h, 31h, 13h,   3, 30h, 22h, 12h, 21h
 11245 00007AC8 0220110110003303                        db    2, 20h, 11h,   1, 10h,   0, 33h,   3
 11246 00007AD0 2332301331220212                        db  23h, 32h, 30h, 13h, 31h, 22h,   2, 12h
 11247 00007AD8 2120011110005545                        db  21h, 20h,   1, 11h, 10h,   0, 55h, 45h
 11248 00007AE0 5453354425521551                        db  54h, 53h, 35h, 44h, 25h, 52h, 15h, 51h
 11249 00007AE8 0534504333244214                        db    5, 34h, 50h, 43h, 33h, 24h, 42h, 14h
 11250 00007AF0 4140042332031331                        db  41h, 40h,   4, 23h, 32h,   3, 13h, 31h
 11251 00007AF8 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
 11252 00007B00 1000555445533544                        db  10h,   0, 55h, 54h, 45h, 53h, 35h, 44h
 11253 00007B08 2552051551344350                        db  25h, 52h,   5, 15h, 51h, 34h, 43h, 50h
 11254 00007B10 3324421441044023                        db  33h, 24h, 42h, 14h, 41h,   4, 40h, 23h
 11255 00007B18 3213310330220220                        db  32h, 13h, 31h,   3, 30h, 22h,   2, 20h
 11256 00007B20 1221110110005545                        db  12h, 21h, 11h,   1, 10h,   0, 55h, 45h
 11257 00007B28 3553540544255215                        db  35h, 53h, 54h,   5, 44h, 25h, 52h, 15h
 11258 00007B30 5134435004244233                        db  51h, 34h, 43h, 50h,   4, 24h, 42h, 33h
 11259 00007B38 4014412332133103                        db  40h, 14h, 41h, 23h, 32h, 13h, 31h,   3
 11260 00007B40 3022021221201101                        db  30h, 22h,   2, 12h, 21h, 20h, 11h,   1
 11261 00007B48 1000776776577566                        db  10h,   0, 77h, 67h, 76h, 57h, 75h, 66h
 11262 00007B50 4774566537734655                        db  47h, 74h, 56h, 65h, 37h, 73h, 46h, 55h
 11263 00007B58 5463277264077062                        db  54h, 63h, 27h, 72h, 64h,   7, 70h, 62h
 11264 00007B60 4535065344177136                        db  45h, 35h,   6, 53h, 44h, 17h, 71h, 36h
 11265 00007B68 2625521551344316                        db  26h, 25h, 52h, 15h, 51h, 34h, 43h, 16h
 11266 00007B70 6160055024423304                        db  61h, 60h,   5, 50h, 24h, 42h, 33h,   4
 11267 00007B78 1441402332031331                        db  14h, 41h, 40h, 23h, 32h,   3, 13h, 31h
 11268 00007B80 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
 11269 00007B88 1000776776756647                        db  10h,   0, 77h, 67h, 76h, 75h, 66h, 47h
 11270 00007B90 7457555665377346                        db  74h, 57h, 55h, 56h, 65h, 37h, 73h, 46h
 11271 00007B98 4554355327726407                        db  45h, 54h, 35h, 53h, 27h, 72h, 64h,   7
 11272 00007BA0 7117703663604425                        db  71h, 17h, 70h, 36h, 63h, 60h, 44h, 25h
 11273 00007BA8 5205156226061661                        db  52h,   5, 15h, 62h, 26h,   6, 16h, 61h
 11274 00007BB0 5134504333244214                        db  51h, 34h, 50h, 43h, 33h, 24h, 42h, 14h
 11275 00007BB8 4104402332133103                        db  41h,   4, 40h, 23h, 32h, 13h, 31h,   3
 11276 00007BC0 3022211202201101                        db  30h, 22h, 21h, 12h,   2, 20h, 11h,   1
 11277 00007BC8 1000776776577566                        db  10h,   0, 77h, 67h, 76h, 57h, 75h, 66h
 11278 00007BD0 4774655637735527                        db  47h, 74h, 65h, 56h, 37h, 73h, 55h, 27h
 11279 00007BD8 7246641771077036                        db  72h, 46h, 64h, 17h, 71h,   7, 70h, 36h
 11280 00007BE0 6345544406052662                        db  63h, 45h, 54h, 44h,   6,   5, 26h, 62h
 11281 00007BE8 6116603553255215                        db  61h, 16h, 60h, 35h, 53h, 25h, 52h, 15h
 11282 00007BF0 5134435004244214                        db  51h, 34h, 43h, 50h,   4, 24h, 42h, 14h
 11283 00007BF8 3341233240033013                        db  33h, 41h, 23h, 32h, 40h,   3, 30h, 13h
 11284 00007C00 3122122102200011                        db  31h, 22h, 12h, 21h,   2, 20h,   0, 11h
 11285 00007C08 0110FEFCFDEDFFEF                        db    1, 10h,0FEh,0FCh,0FDh,0EDh,0FFh,0EFh
 11286 00007C10 DFEECFDEBFFBCEDC                        db 0DFh,0EEh,0CFh,0DEh,0BFh,0FBh,0CEh,0DCh
 11287 00007C18 AFE9ECDDFACDBEEB                        db 0AFh,0E9h,0ECh,0DDh,0FAh,0CDh,0BEh,0EBh
 11288 00007C20 9FF9EABDDB8FF8CC                        db  9Fh,0F9h,0EAh,0BDh,0DBh, 8Fh,0F8h,0CCh
 11289 00007C28 AE9E8E7F7EF7DAAD                        db 0AEh, 9Eh, 8Eh, 7Fh, 7Eh,0F7h,0DAh,0ADh
 11290 00007C30 BCCBF66FE85F9DD9                        db 0BCh,0CBh,0F6h, 6Fh,0E8h, 5Fh, 9Dh,0D9h
 11291 00007C38 F5E7ACBB4FF4CAE6                        db 0F5h,0E7h,0ACh,0BBh, 4Fh,0F4h,0CAh,0E6h
 11292 00007C40 F33F8DD82FF26E9C                        db 0F3h, 3Fh, 8Dh,0D8h, 2Fh,0F2h, 6Eh, 9Ch
 11293 00007C48 0FC95EAB7DD74EC8                        db  0Fh,0C9h, 5Eh,0ABh, 7Dh,0D7h, 4Eh,0C8h
 11294 00007C50 D63EB99BAA1FF1F0                        db 0D6h, 3Eh,0B9h, 9Bh,0AAh, 1Fh,0F1h,0F0h
 11295 00007C58 BAE5E48C6DE3E22E                        db 0BAh,0E5h,0E4h, 8Ch, 6Dh,0E3h,0E2h, 2Eh
 11296 00007C60 0E1EE1E05DD57CC7                        db  0Eh, 1Eh,0E1h,0E0h, 5Dh,0D5h, 7Ch,0C7h
 11297 00007C68 4D8BB8D49AA96CC6                        db  4Dh, 8Bh,0B8h,0D4h, 9Ah,0A9h, 6Ch,0C6h
 11298 00007C70 3DD37B2DD21DB75C                        db  3Dh,0D3h, 7Bh, 2Dh,0D2h, 1Dh,0B7h, 5Ch
 11299 00007C78 C5997AC3A7974BD1                        db 0C5h, 99h, 7Ah,0C3h,0A7h, 97h, 4Bh,0D1h
 11300 00007C80 0DD08AA84CC46BB6                        db  0Dh,0D0h, 8Ah,0A8h, 4Ch,0C4h, 6Bh,0B6h
 11301 00007C88 3C2CC25BB5891CC1                        db  3Ch, 2Ch,0C2h, 5Bh,0B5h, 89h, 1Ch,0C1h
 11302 00007C90 980CC0B46AA6793B                        db  98h, 0Ch,0C0h,0B4h, 6Ah,0A6h, 79h, 3Bh
 11303 00007C98 B3885A2BA569A478                        db 0B3h, 88h, 5Ah, 2Bh,0A5h, 69h,0A4h, 78h
 11304 00007CA0 87947776B21BB10B                        db  87h, 94h, 77h, 76h,0B2h, 1Bh,0B1h, 0Bh
 11305 00007CA8 B0964A3AA359952A                        db 0B0h, 96h, 4Ah, 3Ah,0A3h, 59h, 95h, 2Ah
 11306 00007CB0 A21AA10A68A08649                        db 0A2h, 1Ah,0A1h, 0Ah, 68h,0A0h, 86h, 49h
 11307 00007CB8 9339588567299257                        db  93h, 39h, 58h, 85h, 67h, 29h, 92h, 57h
 11308 00007CC0 7538836647745665                        db  75h, 38h, 83h, 66h, 47h, 74h, 56h, 65h
 11309 00007CC8 7319910990488472                        db  73h, 19h, 91h,   9, 90h, 48h, 84h, 72h
 11310 00007CD0 4664288218372717                        db  46h, 64h, 28h, 82h, 18h, 37h, 27h, 17h
 11311 00007CD8 7155077036634554                        db  71h, 55h,   7, 70h, 36h, 63h, 45h, 54h
 11312 00007CE0 2662358108801661                        db  26h, 62h, 35h, 81h,   8, 80h, 16h, 61h
 11313 00007CE8 0660534425520515                        db    6, 60h, 53h, 44h, 25h, 52h,   5, 15h
 11314 00007CF0 5134435024423314                        db  51h, 34h, 43h, 50h, 24h, 42h, 33h, 14h
 11315 00007CF8 4104402332133103                        db  41h,   4, 40h, 23h, 32h, 13h, 31h,   3
 11316 00007D00 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
 11317 00007D08 1000FFEFFEDFEEFD                        db  10h,   0,0FFh,0EFh,0FEh,0DFh,0EEh,0FDh
 11318 00007D10 CFFCDEEDBFFBCEEC                        db 0CFh,0FCh,0DEh,0EDh,0BFh,0FBh,0CEh,0ECh
 11319 00007D18 DDAFFABEEBCDDC9F                        db 0DDh,0AFh,0FAh,0BEh,0EBh,0CDh,0DCh, 9Fh
 11320 00007D20 F9EABDDB8FF8CC9E                        db 0F9h,0EAh,0BDh,0DBh, 8Fh,0F8h,0CCh, 9Eh
 11321 00007D28 E97FF7ADDABC6FAE                        db 0E9h, 7Fh,0F7h,0ADh,0DAh,0BCh, 6Fh,0AEh
 11322 00007D30 0FCBF68EE85F9DF5                        db  0Fh,0CBh,0F6h, 8Eh,0E8h, 5Fh, 9Dh,0F5h
 11323 00007D38 7EE7ACCABBD98D4F                        db  7Eh,0E7h,0ACh,0CAh,0BBh,0D9h, 8Dh, 4Fh
 11324 00007D40 F43FF3D8E62FF26E                        db 0F4h, 3Fh,0F3h,0D8h,0E6h, 2Fh,0F2h, 6Eh
 11325 00007D48 F01FF19CC95EABBA                        db 0F0h, 1Fh,0F1h, 9Ch,0C9h, 5Eh,0ABh,0BAh
 11326 00007D50 E57DD74EE48CC83E                        db 0E5h, 7Dh,0D7h, 4Eh,0E4h, 8Ch,0C8h, 3Eh
 11327 00007D58 6DD6E39BB92EAAE2                        db  6Dh,0D6h,0E3h, 9Bh,0B9h, 2Eh,0AAh,0E2h
 11328 00007D60 1EE10EE05DD57CC7                        db  1Eh,0E1h, 0Eh,0E0h, 5Dh,0D5h, 7Ch,0C7h
 11329 00007D68 4D8BD4B89AA96CC6                        db  4Dh, 8Bh,0D4h,0B8h, 9Ah,0A9h, 6Ch,0C6h
 11330 00007D70 3DD3D22D0D1D7BB7                        db  3Dh,0D3h,0D2h, 2Dh, 0Dh, 1Dh, 7Bh,0B7h
 11331 00007D78 D15CD0C58AA84CC4                        db 0D1h, 5Ch,0D0h,0C5h, 8Ah,0A8h, 4Ch,0C4h
 11332 00007D80 6BB6990C3CC37AA7                        db  6Bh,0B6h, 99h, 0Ch, 3Ch,0C3h, 7Ah,0A7h
 11333 00007D88 A6C00BC22C5BB51C                        db 0A6h,0C0h, 0Bh,0C2h, 2Ch, 5Bh,0B5h, 1Ch
 11334 00007D90 8998C14BB46A3B79                        db  89h, 98h,0C1h, 4Bh,0B4h, 6Ah, 3Bh, 79h
 11335 00007D98 B397882B5AB2A51B                        db 0B3h, 97h, 88h, 2Bh, 5Ah,0B2h,0A5h, 1Bh
 11336 00007DA0 B1B069964AA47887                        db 0B1h,0B0h, 69h, 96h, 4Ah,0A4h, 78h, 87h
 11337 00007DA8 3AA359952AA21AA1                        db  3Ah,0A3h, 59h, 95h, 2Ah,0A2h, 1Ah,0A1h
 11338 00007DB0 0AA0688649943993                        db  0Ah,0A0h, 68h, 86h, 49h, 94h, 39h, 93h
 11339 00007DB8 7709588529677692                        db  77h,   9, 58h, 85h, 29h, 67h, 76h, 92h
 11340 00007DC0 9119904884577538                        db  91h, 19h, 90h, 48h, 84h, 57h, 75h, 38h
 11341 00007DC8 8366472882188174                        db  83h, 66h, 47h, 28h, 82h, 18h, 81h, 74h
 11342 00007DD0 0880566537734627                        db    8, 80h, 56h, 65h, 37h, 73h, 46h, 27h
 11343 00007DD8 7264175571077036                        db  72h, 64h, 17h, 55h, 71h,   7, 70h, 36h
 11344 00007DE0 6345542662160660                        db  63h, 45h, 54h, 26h, 62h, 16h,   6, 60h
 11345 00007DE8 3561534425521551                        db  35h, 61h, 53h, 44h, 25h, 52h, 15h, 51h
 11346 00007DF0 0550344324423341                        db    5, 50h, 34h, 43h, 24h, 42h, 33h, 41h
 11347 00007DF8 1404233240031331                        db  14h,   4, 23h, 32h, 40h,   3, 13h, 31h
 11348 00007E00 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
 11349 00007E08 1000EFFEDFFDCFFC                        db  10h,   0,0EFh,0FEh,0DFh,0FDh,0CFh,0FCh
 11350 00007E10 BFFBAFFA9FF9F88F                        db 0BFh,0FBh,0AFh,0FAh, 9Fh,0F9h,0F8h, 8Fh
 11351 00007E18 7FF76FF6FF5FF54F                        db  7Fh,0F7h, 6Fh,0F6h,0FFh, 5Fh,0F5h, 4Fh
 11352 00007E20 F4F3F03FCEECDDDE                        db 0F4h,0F3h,0F0h, 3Fh,0CEh,0ECh,0DDh,0DEh
 11353 00007E28 E9EAD9EEEDEBBECD                        db 0E9h,0EAh,0D9h,0EEh,0EDh,0EBh,0BEh,0CDh
 11354 00007E30 DCDBAECCADDA7EAC                        db 0DCh,0DBh,0AEh,0CCh,0ADh,0DAh, 7Eh,0ACh
 11355 00007E38 CAC97D5EBDF22F0F                        db 0CAh,0C9h, 7Dh, 5Eh,0BDh,0F2h, 2Fh, 0Fh
 11356 00007E40 1FF19EBCCB8EE89D                        db  1Fh,0F1h, 9Eh,0BCh,0CBh, 8Eh,0E8h, 9Dh
 11357 00007E48 E7BB8DD86EE69CAB                        db 0E7h,0BBh, 8Dh,0D8h, 6Eh,0E6h, 9Ch,0ABh
 11358 00007E50 BAE5D74EE48CC83E                        db 0BAh,0E5h,0D7h, 4Eh,0E4h, 8Ch,0C8h, 3Eh
 11359 00007E58 6DD69BB9AAE1D4B8                        db  6Dh,0D6h, 9Bh,0B9h,0AAh,0E1h,0D4h,0B8h
 11360 00007E60 A97BB7D0E30EE05D                        db 0A9h, 7Bh,0B7h,0D0h,0E3h, 0Eh,0E0h, 5Dh
 11361 00007E68 D57CC74D8B9A6CC6                        db 0D5h, 7Ch,0C7h, 4Dh, 8Bh, 9Ah, 6Ch,0C6h
 11362 00007E70 3D5CC50D8AA8994C                        db  3Dh, 5Ch,0C5h, 0Dh, 8Ah,0A8h, 99h, 4Ch
 11363 00007E78 B67A3C5B891CC098                        db 0B6h, 7Ah, 3Ch, 5Bh, 89h, 1Ch,0C0h, 98h
 11364 00007E80 79E22E1ED32DD2D1                        db  79h,0E2h, 2Eh, 1Eh,0D3h, 2Dh,0D2h,0D1h
 11365 00007E88 3B97881DC46BC3A7                        db  3Bh, 97h, 88h, 1Dh,0C4h, 6Bh,0C3h,0A7h
 11366 00007E90 2CC2B5C10C4BB46A                        db  2Ch,0C2h,0B5h,0C1h, 0Ch, 4Bh,0B4h, 6Ah
 11367 00007E98 A6B35AA52BB21BB1                        db 0A6h,0B3h, 5Ah,0A5h, 2Bh,0B2h, 1Bh,0B1h
 11368 00007EA0 0BB069964AA47887                        db  0Bh,0B0h, 69h, 96h, 4Ah,0A4h, 78h, 87h
 11369 00007EA8 A33A592A9568A186                        db 0A3h, 3Ah, 59h, 2Ah, 95h, 68h,0A1h, 86h
 11370 00007EB0 7794495767A21A0A                        db  77h, 94h, 49h, 57h, 67h,0A2h, 1Ah, 0Ah
 11371 00007EB8 A039935885299276                        db 0A0h, 39h, 93h, 58h, 85h, 29h, 92h, 76h
 11372 00007EC0 0919919048847538                        db    9, 19h, 91h, 90h, 48h, 84h, 75h, 38h
 11373 00007EC8 8366288247741881                        db  83h, 66h, 28h, 82h, 47h, 74h, 18h, 81h
 11374 00007ED0 8008563773654627                        db  80h,   8, 56h, 37h, 73h, 65h, 46h, 27h
 11375 00007ED8 7264550717717036                        db  72h, 64h, 55h,   7, 17h, 71h, 70h, 36h
 11376 00007EE0 6345542662166106                        db  63h, 45h, 54h, 26h, 62h, 16h, 61h,   6
 11377 00007EE8 6053354425525115                        db  60h, 53h, 35h, 44h, 25h, 52h, 51h, 15h
 11378 00007EF0 0534435024423314                        db    5, 34h, 43h, 50h, 24h, 42h, 33h, 14h
 11379 00007EF8 4104402332133103                        db  41h,   4, 40h, 23h, 32h, 13h, 31h,   3
 11380 00007F00 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
 11381 00007F08 1000EFFEDFFDCFFC                        db  10h,   0,0EFh,0FEh,0DFh,0FDh,0CFh,0FCh
 11382 00007F10 BFFBFAAF9FF9F88F                        db 0BFh,0FBh,0FAh,0AFh, 9Fh,0F9h,0F8h, 8Fh
 11383 00007F18 7FF76FF65FF54FF4                        db  7Fh,0F7h, 6Fh,0F6h, 5Fh,0F5h, 4Fh,0F4h
 11384 00007F20 3FF32FF2F11FF00F                        db  3Fh,0F3h, 2Fh,0F2h,0F1h, 1Fh,0F0h, 0Fh
 11385 00007F28 EEDEEDCEECDDBEEB                        db 0EEh,0DEh,0EDh,0CEh,0ECh,0DDh,0BEh,0EBh
 11386 00007F30 CDDCAEEABDDBCC9E                        db 0CDh,0DCh,0AEh,0EAh,0BDh,0DBh,0CCh, 9Eh
 11387 00007F38 E9ADDABCCB8EE89D                        db 0E9h,0ADh,0DAh,0BCh,0CBh, 8Eh,0E8h, 9Dh
 11388 00007F40 D97EE7ACFFCABB8D                        db 0D9h, 7Eh,0E7h,0ACh,0FFh,0CAh,0BBh, 8Dh
 11389 00007F48 D80EE00DE66E9CC9                        db 0D8h, 0Eh,0E0h, 0Dh,0E6h, 6Eh, 9Ch,0C9h
 11390 00007F50 5EBAE5AB7DD7E48C                        db  5Eh,0BAh,0E5h,0ABh, 7Dh,0D7h,0E4h, 8Ch
 11391 00007F58 C84E2E3E6DD6E39B                        db 0C8h, 4Eh, 2Eh, 3Eh, 6Dh,0D6h,0E3h, 9Bh
 11392 00007F60 B9AAE21EE15DD57C                        db 0B9h,0AAh,0E2h, 1Eh,0E1h, 5Dh,0D5h, 7Ch
 11393 00007F68 C74D8BB8D49AA96C                        db 0C7h, 4Dh, 8Bh,0B8h,0D4h, 9Ah,0A9h, 6Ch
 11394 00007F70 C63DD32DD21D7BB7                        db 0C6h, 3Dh,0D3h, 2Dh,0D2h, 1Dh, 7Bh,0B7h
 11395 00007F78 D15CC58AA8994CC4                        db 0D1h, 5Ch,0C5h, 8Ah,0A8h, 99h, 4Ch,0C4h
 11396 00007F80 6BB6D00C3CC37AA7                        db  6Bh,0B6h,0D0h, 0Ch, 3Ch,0C3h, 7Ah,0A7h
 11397 00007F88 2CC25BB51C8998C1                        db  2Ch,0C2h, 5Bh,0B5h, 1Ch, 89h, 98h,0C1h
 11398 00007F90 4BC00B3BB00A1AB4                        db  4Bh,0C0h, 0Bh, 3Bh,0B0h, 0Ah, 1Ah,0B4h
 11399 00007F98 6AA67997A00990B3                        db  6Ah,0A6h, 79h, 97h,0A0h,   9, 90h,0B3h
 11400 00007FA0 882B5AB2A51BB169                        db  88h, 2Bh, 5Ah,0B2h,0A5h, 1Bh,0B1h, 69h
 11401 00007FA8 96A44A78873AA359                        db  96h,0A4h, 4Ah, 78h, 87h, 3Ah,0A3h, 59h
 11402 00007FB0 952AA2A168867749                        db  95h, 2Ah,0A2h,0A1h, 68h, 86h, 77h, 49h
 11403 00007FB8 9439935885296776                        db  94h, 39h, 93h, 58h, 85h, 29h, 67h, 76h
 11404 00007FC0 9219914884577538                        db  92h, 19h, 91h, 48h, 84h, 57h, 75h, 38h
 11405 00007FC8 8366288218477481                        db  83h, 66h, 28h, 82h, 18h, 47h, 74h, 81h
 11406 00007FD0 0880566517077073                        db    8, 80h, 56h, 65h, 17h,   7, 70h, 73h
 11407 00007FD8 3727724664557136                        db  37h, 27h, 72h, 46h, 64h, 55h, 71h, 36h
 11408 00007FE0 6345542662166106                        db  63h, 45h, 54h, 26h, 62h, 16h, 61h,   6
 11409 00007FE8 6035534425521505                        db  60h, 35h, 53h, 44h, 25h, 52h, 15h,   5
 11410 00007FF0 5051344324423314                        db  50h, 51h, 34h, 43h, 24h, 42h, 33h, 14h
 11411 00007FF8 4104402332133103                        db  41h,   4, 40h, 23h, 32h, 13h, 31h,   3
 11412 00008000 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
 11413 00008008 10000B0F0D0E0705                        db  10h,   0, 0Bh, 0Fh, 0Dh, 0Eh,   7,   5
 11414 00008010 0906030A0C020104                        db    9,   6,   3, 0Ah, 0Ch,   2,   1,   4
 11415 00008018 08000F0E0D0C0B0A                        db    8,   0, 0Fh, 0Eh, 0Dh, 0Ch, 0Bh, 0Ah
 11416 00008020 0908070605040302                        db    9,   8,   7,   6,   5,   4,   3,   2
 11417 00008028 0100                                    db    1,   0
 11418 0000802A 000000000000                            db 6 dup(0)
 11419 00008030 0000                    mp3_huff_data   db   0,  0             
 11420 00008032 0100                                    db   1,  0              ; byte[32][2] ; table,linbits
 11421 00008034 0200                                    db   2,  0
 11422 00008036 0300                                    db   3,  0
 11423 00008038 0000                                    db   0,  0
 11424 0000803A 0400                                    db   4,  0
 11425 0000803C 0500                                    db   5,  0
 11426 0000803E 0600                                    db   6,  0
 11427 00008040 0700                                    db   7,  0
 11428 00008042 0800                                    db   8,  0
 11429 00008044 0900                                    db   9,  0
 11430 00008046 0A00                                    db  10,  0
 11431 00008048 0B00                                    db  11,  0
 11432 0000804A 0C00                                    db  12,  0
 11433 0000804C 0000                                    db   0,  0
 11434 0000804E 0D00                                    db  13,  0
 11435 00008050 0E01                                    db  14,  1
 11436 00008052 0E02                                    db  14,  2
 11437 00008054 0E03                                    db  14,  3
 11438 00008056 0E04                                    db  14,  4
 11439 00008058 0E06                                    db  14,  6
 11440 0000805A 0E08                                    db  14,  8
 11441 0000805C 0E0A                                    db  14, 10
 11442 0000805E 0E0D                                    db  14, 13
 11443 00008060 0F04                                    db  15,  4
 11444 00008062 0F05                                    db  15,  5
 11445 00008064 0F06                                    db  15,  6
 11446 00008066 0F07                                    db  15,  7
 11447 00008068 0F08                                    db  15,  8
 11448 0000806A 0F09                                    db  15,  9
 11449 0000806C 0F0B                                    db  15, 11
 11450 0000806E 0F0D                                    db  15, 13
 11451 00008070 040404040404060608-     mp3_band_size_long db    4,   4,   4,   4,   4,   4,   6,   6,   8,   8, 0Ah
 11451 00008079 080A               
 11452 0000807B 0C1014181C222A3236-                     db  0Ch, 10h, 14h, 18h, 1Ch, 22h, 2Ah, 32h, 36h, 4Ch, 9Eh ; byte[9][22]
 11452 00008084 4C9E               
 11453 00008086 040404040404060606-                     db    4,   4,   4,   4,   4,   4,   6,   6,   6,   8, 0Ah
 11453 0000808F 080A               
 11454 00008091 0C1012161C22282E36-                     db  0Ch, 10h, 12h, 16h, 1Ch, 22h, 28h, 2Eh, 36h, 36h,0C0h
 11454 0000809A 36C0               
 11455 0000809C 040404040404060608-                     db    4,   4,   4,   4,   4,   4,   6,   6,   8, 0Ah, 0Ch
 11455 000080A5 0A0C               
 11456 000080A7 1014181E262E384454-                     db  10h, 14h, 18h, 1Eh, 26h, 2Eh, 38h, 44h, 54h, 66h, 1Ah
 11456 000080B0 661A               
 11457 000080B2 060606060606080A0C-                     db    6,   6,   6,   6,   6,   6,   8, 0Ah, 0Ch, 0Eh, 10h
 11457 000080BB 0E10               
 11458 000080BD 14181C20262E343C44-                     db  14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h
 11458 000080C6 3A36               
 11459 000080C8 060606060606080A0C-                     db    6,   6,   6,   6,   6,   6,   8, 0Ah, 0Ch, 0Eh, 10h
 11459 000080D1 0E10               
 11460 000080D3 12161A20262E344046-                     db  12h, 16h, 1Ah, 20h, 26h, 2Eh, 34h, 40h, 46h, 4Ch, 24h
 11460 000080DC 4C24               
 11461 000080DE 060606060606080A0C-                     db    6,   6,   6,   6,   6,   6,   8, 0Ah, 0Ch, 0Eh, 10h
 11461 000080E7 0E10               
 11462 000080E9 14181C20262E343C44-                     db  14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h
 11462 000080F2 3A36               
 11463 000080F4 060606060606080A0C-                     db    6,   6,   6,   6,   6,   6,   8, 0Ah, 0Ch, 0Eh, 10h
 11463 000080FD 0E10               
 11464 000080FF 14181C20262E343C44-                     db  14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h
 11464 00008108 3A36               
 11465 0000810A 060606060606080A0C-                     db    6,   6,   6,   6,   6,   6,   8, 0Ah, 0Ch, 0Eh, 10h
 11465 00008113 0E10               
 11466 00008115 14181C20262E343C44-                     db  14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h
 11466 0000811E 3A36               
 11467 00008120 0C0C0C0C0C0C101418-                     db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 10h, 14h, 18h, 1Ch, 20h
 11467 00008129 1C20               
 11468 0000812B 283038404C5A020202-                     db  28h, 30h, 38h, 40h, 4Ch, 5Ah,   2,   2,   2,   2,   2
 11468 00008134 0202               
 11469 00008136 000000000000000000-                     db 10 dup(0)            ; data align
 11469 0000813F 00                 
 11470 00008140 0404040406080A0C0E-     mp3_band_size_short db    4,   4,   4,   4,   6,   8, 0Ah, 0Ch, 0Eh, 12h, 16h, 1Eh, 38h
 11470 00008149 12161E38           
 11471 0000814D 0404040406060A0C0E-                     db    4,   4,   4,   4,   6,   6, 0Ah, 0Ch, 0Eh, 10h, 14h, 1Ah, 42h ; byte[9][16] ? ; byte [9][13]
 11471 00008156 10141A42           
 11472 0000815A 0404040406080C1014-                     db    4,   4,   4,   4,   6,   8, 0Ch, 10h, 14h, 1Ah, 22h, 2Ah, 0Ch
 11472 00008163 1A222A0C           
 11473 00008167 0404040606080A0E12-                     db    4,   4,   4,   6,   6,   8, 0Ah, 0Eh, 12h, 1Ah, 20h, 2Ah, 12h
 11473 00008170 1A202A12           
 11474 00008174 04040406080A0C0E12-                     db    4,   4,   4,   6,   8, 0Ah, 0Ch, 0Eh, 12h, 18h, 20h, 2Ch, 0Ch
 11474 0000817D 18202C0C           
 11475 00008181 04040406080A0C0E12-                     db    4,   4,   4,   6,   8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h
 11475 0000818A 181E2812           
 11476 0000818E 04040406080A0C0E12-                     db    4,   4,   4,   6,   8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h
 11476 00008197 181E2812           
 11477 0000819B 04040406080A0C0E12-                     db    4,   4,   4,   6,   8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h
 11477 000081A4 181E2812           
 11478 000081A8 0808080C1014181C24-                     db    8,   8,   8, 0Ch, 10h, 14h, 18h, 1Ch, 24h,   2,   2,   2, 1Ah
 11478 000081B1 0202021A           
 11479 000081B5 000000000000000000-                     db 11 dup(0)            ; data align
 11479 000081BE 0000               
 11480 000081C0 000000000000000000-     mp3_pretab      db    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
 11480 000081C9 0000               
 11481 000081CB 000000000000000000-                     db    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
 11481 000081D4 0000               
 11482 000081D6 000000000000000000-                     db    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
 11482 000081DF 0000               
 11483 000081E1 010101010202030303-                     db    1,   1,   1,   1,   2,   2,   3,   3,   3,   2,   0
 11483 000081EA 0200               
 11484 000081EC 00000000                                db 4 dup(0)             ; data align
 11485 000081F0 4B1D4200028FDB0016-     mp3_mdct_win_src dd  00421D4Bh, 00DB8F02h, 019C7F16h, 029ADCC0h, 04000001h, 06246711h
 11485 000081F9 7F9C01C0DC9A020100-
 11485 00008202 000411672406       
 11486 00008208 4506EE090CD6A71238-                     dd  09EE0645h, 12A7D60Ch, 3DF40538h,0BC63D32Fh,0E7B0025Bh,0F069D222h ; these are sine values divided by cosine values...
 11486 00008211 05F43D2FD363BC5B02-
 11486 0000821A B0E722D269F0       
 11487 00008220 567133F467D857F6A8-                     dd 0F4337156h,0F657D867h,0F7BCFBA8h,0F8BB5952h,0F97C4965h,0FA15BB1Ch
 11487 00008229 FBBCF75259BBF86549-
 11487 00008232 7CF91CBB15FA       
 11488 00008238 936D94FA8E5100FB70-                     dd 0FA946D93h,0FB00518Eh,0FB5EA270h,0FBB2FDEAh,0FC000000h,0FC479F38h
 11488 00008241 A25EFBEAFDB2FB0000-
 11488 0000824A 00FC389F47FC       
 11489 00008250 09668BFC9898CCFC0B-                     dd 0FC8B6609h,0FCCC9898h,0FD0C4F0Bh,0FD4B895Ch,0FD8B3FCFh,0FDCC725Eh
 11489 00008259 4F0CFD5C894BFDCF3F-
 11489 00008262 8BFD5E72CCFD       
 11490 00008268 2F3910FE67D857FE7D-                     dd 0FE10392Fh,0FE57D867h,0FEA4DA7Dh,0FEF935F7h,0FF5786D9h,0FFC36AD5h
 11490 00008271 DAA4FEF735F9FED986-
 11490 0000827A 57FFD56AC3FF       
 11491 00008280 4B1D4200028FDB0016-                     dd  00421D4Bh, 00DB8F02h, 019C7F16h, 029ADCC0h, 04000001h, 06246711h
 11491 00008289 7F9C01C0DC9A020100-
 11491 00008292 000411672406       
 11492 00008298 4506EE090CD6A71238-                     dd  09EE0645h, 12A7D60Ch, 3DF40538h,0BC63D32Fh,0E7B0025Bh,0F069D222h
 11492 000082A1 05F43D2FD363BC5B02-
 11492 000082AA B0E722D269F0       
 11493 000082B0 567133F467D857F6A8-                     dd 0F4337156h,0F657D867h,0F7BCFBA8h,0F8BB5952h,0F97C4965h,0FA15BB1Ch
 11493 000082B9 FBBCF75259BBF86549-
 11493 000082C2 7CF91CBB15FA       
 11494 000082C8 291B93FAB946F5FABB-                     dd 0FA931B29h,0FAF546B9h,0FB41DABBh,0FB7D8F97h,0FBABA162h,0FBCE4E62h
 11494 000082D1 DA41FB978F7DFB62A1-
 11494 000082DA ABFB624ECEFB       
 11495 000082E0 671CF0FBAFC845FC0D-                     dd 0FBF01C67h,0FC45C8AFh,0FCD2D50Dh,0FD9008D0h,0FE74C032h,0FF771894h
 11495 000082E9 D5D2FCD00890FD32C0-
 11495 000082F2 74FE941877FF       
 11496 000082F8 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
 11496 00008301 000000000000000000-
 11496 0000830A 000000000000       
 11497 00008310 028FDB00010000040C-                     dd  00DB8F02h, 04000001h, 12A7D60Ch,0E7B0025Bh,0F657D867h,0F97C4965h
 11497 00008319 D6A7125B02B0E767D8-
 11497 00008322 57F665497CF9       
 11498 00008328 8E5100FB000000FC98-                     dd 0FB00518Eh,0FC000000h,0FCCC9898h,0FD8B3FCFh,0FE57D867h,0FF5786D9h
 11498 00008331 98CCFCCF3F8BFD67D8-
 11498 0000833A 57FED98657FF       
 11499 00008340 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
 11499 00008349 000000000000000000-
 11499 00008352 000000000000       
 11500 00008358 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
 11500 00008361 000000000000000000-
 11500 0000836A 000000000000       
 11501 00008370 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
 11501 00008379 000000000000000000-
 11501 00008382 000000000000       
 11502 00008388 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
 11502 00008391 000000000000000000-
 11502 0000839A 000000000000       
 11503 000083A0 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
 11503 000083A9 000000000000000000-
 11503 000083B2 000000000000       
 11504 000083B8 B58869025237BA0B4F-                     dd  026988B5h, 0BBA3752h, 37D3294Fh,0B73F655Bh,0E3B0025Bh,0EDAD5D13h
 11504 000083C1 29D3375B653FB75B02-
 11504 000083CA B0E3135DADED       
 11505 000083D0 A2ADB2F2B8288CF5D6-                     dd 0F2B2ADA2h,0F58C28B8h,0F75657D6h,0F88E2C57h,0F96DE565h,0FA1449CDh
 11505 000083D9 5756F7572C8EF865E5-
 11505 000083E2 6DF9CD4914FA       
 11506 000083E8 936D94FA8E5100FB70-                     dd 0FA946D93h,0FB00518Eh,0FB5EA270h,0FBB2FDEAh,0FC000000h,0FC479F38h
 11506 000083F1 A25EFBEAFDB2FB0000-
 11506 000083FA 00FC389F47FC       
 11507 00008400 09668BFC9898CCFC0B-                     dd 0FC8B6609h,0FCCC9898h,0FD0C4F0Bh,0FD4B895Ch,0FD8B3FCFh,0FDCC725Eh
 11507 00008409 4F0CFD5C894BFDCF3F-
 11507 00008412 8BFD5E72CCFD       
 11508 00008418 2F3910FE67D857FE7D-                     dd 0FE10392Fh,0FE57D867h,0FEA4DA7Dh,0FEF935F7h,0FF5786D9h,0FFC36AD5h
 11508 00008421 DAA4FEF735F9FED986-
 11508 0000842A 57FFD56AC3FF       
 11509 00008430 0000000000000040        mp3_is_table_normal dd  00000000h, 40000000h
 11510 00008438 BB58860D46A77932                        dd  0D8658BBh, 3279A746h
 11511 00008440 D1F56C17300A9328                        dd  176CF5D1h, 28930A30h
 11512 00008448 0000002000000020                        dd  20000000h, 20000000h
 11513 00008450 300A9328D1F56C17                        dd  28930A30h, 176CF5D1h
 11514 00008458 46A77932BB58860D                        dd  3279A746h, 0D8658BBh
 11515 00008460 0000004000000000                        dd  40000000h, 00000000h
 11516 00008468 00000080                mp3_is_table_lsf_src dd 80000000h      
 11517                                                                          ; sqrt based constants...
 11518                                                                          ; 40000000h*2 ; 2.0  (2^1.00) aka 2
 11519 0000846C 667EA26B                                dd 6BA27E66h            ; 35D13F33h*2 ; 1.681 (2^0.75)
 11520 00008470 9A79825A                                dd 5A82799Ah            ; 2D413CCDh*2 ; 1.414 (2^0.50) aka sqrt(2)
 11521 00008474 2AF81B4C                                dd 4C1BF82Ah            ; 260DFC15h*2 ; 1.189 (2^0.25) aka sqrt(sqrt(2))
 11522 00008478 00000080                mp3_pow2_quarters dd 80000000h         
 11523                                                                          ; 40000000h*2 ; 2^(0/4)
 11524 0000847C 52F03798                                dd 9837F052h            ; 4C1BF829h*2 ; 2^(1/4)
 11525 00008480 34F304B5                                dd 0B504F334h           ; 5A82799Ah*2 ; 2^(2/4)
 11526 00008484 CCFC44D7                                dd 0D744FCCCh           ; 6BA27E66h*2 ; 2^(3/4)
 11527 00008488 00000000                mp3_initialized dd 0                   
 11528 0000848C 12000000                mp3_huff_num_entries dd 12h            
 11529 00008490 00                      wrchr_buf       db 0                   
 11530 00008491 90<rep 3h>                              align 4
 11531                                  ; LPCSTR mp3_src_fname
 11532 00008494 00000000                mp3_src_fname   dd 0                   
 11533                                  ; LPCSTR mp3_dst_fname
 11534 00008498 00000000                mp3_dst_fname   dd 0                   
 11535                                  ; LPCSTR mp3_pcm_fname
 11536 0000849C 00000000                mp3_pcm_fname   dd 0                   
 11537 000084A0 524946462400000057-     mp3_wav_header  db 'RIFF$',0,0,0,'WAVEfmt ',10h,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,4,0,10h,0,'data',0,0,0,0
 11537 000084A9 415645666D74201000-
 11537 000084B2 000001000200000000-
 11537 000084BB 000000000004001000-
 11537 000084C4 6461746100000000   
 11538                                  ; 21/10/2024                   
 11539 000084CC 00000000                zero		dd 0  
 11540 000084D0 00                      num_enqueued_frames db 0
 11541 000084D1 617564696F20647572-     txt_decode_timing1 db 'audio duration ',0
 11541 000084DA 6174696F6E2000     
 11542 000084E1 206D696C6C69736563-     txt_decode_timing2 db ' milliseconds, decoded in ',0
 11542 000084EA 6F6E64732C20646563-
 11542 000084F3 6F64656420696E2000 
 11543 000084FC 206D696C6C69736563-     txt_decode_timing3 db ' milliseconds',0Dh,0Ah,0
 11543 00008505 6F6E64730D0A00     
 11544 0000850C 20636C6F636B206379-     txt_clks_per_second db ' clock cycles per second:',0Dh,0Ah,0
 11544 00008515 636C65732070657220-
 11544 0000851E 7365636F6E643A0D0A-
 11544 00008527 00                 
 11545 00008528 0303020106060505        huff_tree_list_numbits db    3,   3,   2,   1,   6,   6,   5,   5
 11546 00008530 0503030301060605                        db    5,   3,   3,   3,   1,   6,   6,   5
 11547 00008538 0505030202020808                        db    5,   5,   3,   2,   2,   2,   8,   8
 11548 00008540 0706070707070606                        db    7,   6,   7,   7,   7,   7,   6,   6
 11549 00008548 0606030303010707                        db    6,   6,   3,   3,   3,   1,   7,   7
 11550 00008550 0606060505050504                        db    6,   6,   6,   5,   5,   5,   5,   4
 11551 00008558 0404030203030A0A                        db    4,   4,   3,   2,   3,   3, 0Ah, 0Ah
 11552 00008560 0A0A090909090808                        db  0Ah, 0Ah,   9,   9,   9,   9,   8,   8
 11553 00008568 0909080909080807                        db    9,   9,   8,   9,   9,   8,   8,   7
 11554 00008570 0707080808080707                        db    7,   7,   8,   8,   8,   8,   7,   7
 11555 00008578 0707060506060403                        db    7,   7,   6,   5,   6,   6,   4,   3
 11556 00008580 03010B0B0A090A0A                        db    3,   1, 0Bh, 0Bh, 0Ah,   9, 0Ah, 0Ah
 11557 00008588 0909090808090909                        db    9,   9,   9,   8,   8,   9,   9,   9
 11558 00008590 0908080807080808                        db    9,   8,   8,   8,   7,   8,   8,   8
 11559 00008598 0808080808060606                        db    8,   8,   8,   8,   8,   6,   6,   6
 11560 000085A0 0404020303020909                        db    4,   4,   2,   3,   3,   2,   9,   9
 11561 000085A8 0808090908080808                        db    8,   8,   9,   9,   8,   8,   8,   8
 11562 000085B0 0707070808070707                        db    7,   7,   7,   8,   8,   7,   7,   7
 11563 000085B8 0706060606050506                        db    7,   6,   6,   6,   6,   5,   5,   6
 11564 000085C0 0605050404040303                        db    6,   5,   5,   4,   4,   4,   3,   3
 11565 000085C8 03030B0B0B0B0B0B                        db    3,   3, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11566 000085D0 0A0A0A0A0A0A0A0B                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Bh
 11567 000085D8 0B0A09090A0A0909                        db  0Bh, 0Ah,   9,   9, 0Ah, 0Ah,   9,   9
 11568 000085E0 0A0A090A0A080809                        db  0Ah, 0Ah,   9, 0Ah, 0Ah,   8,   8,   9
 11569 000085E8 090A0A09090A0A08                        db    9, 0Ah, 0Ah,   9,   9, 0Ah, 0Ah,   8
 11570 000085F0 0808090909090909                        db    8,   8,   9,   9,   9,   9,   9,   9
 11571 000085F8 0808080808080707                        db    8,   8,   8,   8,   8,   8,   7,   7
 11572 00008600 0707060606060403                        db    7,   7,   6,   6,   6,   6,   4,   3
 11573 00008608 03010A0A0A0A0A0A                        db    3,   1, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11574 00008610 0A0B0B0A0A090909                        db  0Ah, 0Bh, 0Bh, 0Ah, 0Ah,   9,   9,   9
 11575 00008618 0A0A0A0A08080909                        db  0Ah, 0Ah, 0Ah, 0Ah,   8,   8,   9,   9
 11576 00008620 0708080808080909                        db    7,   8,   8,   8,   8,   8,   9,   9
 11577 00008628 0909080708080707                        db    9,   9,   8,   7,   8,   8,   7,   7
 11578 00008630 0808080909080808                        db    8,   8,   8,   9,   9,   8,   8,   8
 11579 00008638 0808080707060607                        db    8,   8,   8,   7,   7,   6,   6,   7
 11580 00008640 0706050405050303                        db    7,   6,   5,   4,   5,   5,   3,   3
 11581 00008648 03020A0A09090909                        db    3,   2, 0Ah, 0Ah,   9,   9,   9,   9
 11582 00008650 0909090808090908                        db    9,   9,   9,   8,   8,   9,   9,   8
 11583 00008658 0808080808090908                        db    8,   8,   8,   8,   8,   9,   9,   8
 11584 00008660 0808080809090707                        db    8,   8,   8,   8,   9,   9,   7,   7
 11585 00008668 0708080808080807                        db    7,   8,   8,   8,   8,   8,   8,   7
 11586 00008670 0707070808070707                        db    7,   7,   7,   8,   8,   7,   7,   7
 11587 00008678 0606060607070605                        db    6,   6,   6,   6,   7,   7,   6,   5
 11588 00008680 0505040405050403                        db    5,   5,   4,   4,   5,   5,   4,   3
 11589 00008688 0303131312111010                        db    3,   3, 13h, 13h, 12h, 11h, 10h, 10h
 11590 00008690 1010101010101010                        db  10h, 10h, 10h, 10h, 10h, 10h, 10h, 10h
 11591 00008698 11110F0F10100F0F                        db  11h, 11h, 0Fh, 0Fh, 10h, 10h, 0Fh, 0Fh
 11592 000086A0 0F0F0F0F0F0F0F0F                        db  0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh
 11593 000086A8 10100F10100E0E0F                        db  10h, 10h, 0Fh, 10h, 10h, 0Eh, 0Eh, 0Fh
 11594 000086B0 0F0F0F0E0E0E0E0E                        db  0Fh, 0Fh, 0Fh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh
 11595 000086B8 0E0E0E0E0E0E0F0F                        db  0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Fh, 0Fh
 11596 000086C0 0E0D0E0E0D0D0E0E                        db  0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh, 0Eh
 11597 000086C8 0D0E0E0D0E0E0D0E                        db  0Dh, 0Eh, 0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Eh
 11598 000086D0 0E0D0D0E0E0C0C0C                        db  0Eh, 0Dh, 0Dh, 0Eh, 0Eh, 0Ch, 0Ch, 0Ch
 11599 000086D8 0D0D0D0D0D0D0C0D                        db  0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh
 11600 000086E0 0D0C0C0D0D0D0D0D                        db  0Dh, 0Ch, 0Ch, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh
 11601 000086E8 0D0D0D0D0D0D0D0C                        db  0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch
 11602 000086F0 0C0D0D0C0C0C0C0D                        db  0Ch, 0Dh, 0Dh, 0Ch, 0Ch, 0Ch, 0Ch, 0Dh
 11603 000086F8 0D0D0D0C0D0D0C0B                        db  0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Ch, 0Bh
 11604 00008700 0C0C0C0C0C0C0C0C                        db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 11605 00008708 0B0B0B0B0C0C0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh
 11606 00008710 0C0C0B0C0C0C0C0B                        db  0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Bh
 11607 00008718 0B0C0C0B0C0C0B0C                        db  0Bh, 0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ch
 11608 00008720 0C0B0C0C0A0A0A0B                        db  0Ch, 0Bh, 0Ch, 0Ch, 0Ah, 0Ah, 0Ah, 0Bh
 11609 00008728 0B0B0B0B0B0B0B0A                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah
 11610 00008730 0A0A0A0B0B0A0B0B                        db  0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh
 11611 00008738 0A0B0B0B0B0A0A0B                        db  0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh
 11612 00008740 0B0A0A0B0B0B0B0B                        db  0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11613 00008748 0B09090A0A0A0A0A                        db  0Bh,   9,   9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11614 00008750 0B0B0909090A0A09                        db  0Bh, 0Bh,   9,   9,   9, 0Ah, 0Ah,   9
 11615 00008758 090A0A0A0A0A0A0A                        db    9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11616 00008760 0A0A0A0809090909                        db  0Ah, 0Ah, 0Ah,   8,   9,   9,   9,   9
 11617 00008768 09090A0A09090908                        db    9,   9, 0Ah, 0Ah,   9,   9,   9,   8
 11618 00008770 0809090909090908                        db    8,   9,   9,   9,   9,   9,   9,   8
 11619 00008778 0708080808070707                        db    7,   8,   8,   8,   8,   7,   7,   7
 11620 00008780 0707060606060404                        db    7,   7,   6,   6,   6,   6,   4,   4
 11621 00008788 03010D0D0D0D0C0D                        db    3,   1, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh
 11622 00008790 0D0D0D0D0D0C0D0D                        db  0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh
 11623 00008798 0C0C0C0C0C0C0C0C                        db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 11624 000087A0 0C0C0C0C0C0C0C0C                        db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 11625 000087A8 0C0C0C0C0C0C0C0D                        db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Dh
 11626 000087B0 0D0B0B0C0C0C0C0B                        db  0Dh, 0Bh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Bh
 11627 000087B8 0B0B0B0B0B0C0C0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ch, 0Ch, 0Bh
 11628 000087C0 0B0B0B0B0B0B0B0C                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ch
 11629 000087C8 0C0B0B0B0B0B0B0B                        db  0Ch, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11630 000087D0 0B0B0B0B0B0B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11631 000087D8 0B0B0B0B0B0B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11632 000087E0 0B0B0C0C0B0B0B0B                        db  0Bh, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh, 0Bh, 0Bh
 11633 000087E8 0B0B0A0B0B0B0B0B                        db  0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11634 000087F0 0B0A0A0B0B0A0A0A                        db  0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah
 11635 000087F8 0A0B0B0A0A0A0A0A                        db  0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11636 00008800 0A0A0B0B0A0A0A0A                        db  0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah
 11637 00008808 0A0B0B090A0A0A0A                        db  0Ah, 0Bh, 0Bh,   9, 0Ah, 0Ah, 0Ah, 0Ah
 11638 00008810 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11639 00008818 090A0A0A0A090A0A                        db    9, 0Ah, 0Ah, 0Ah, 0Ah,   9, 0Ah, 0Ah
 11640 00008820 090A0A0A0A0A0A0A                        db    9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11641 00008828 0A09090909090909                        db  0Ah,   9,   9,   9,   9,   9,   9,   9
 11642 00008830 0A0A090909090909                        db  0Ah, 0Ah,   9,   9,   9,   9,   9,   9
 11643 00008838 0A0A090909090909                        db  0Ah, 0Ah,   9,   9,   9,   9,   9,   9
 11644 00008840 0809090909090909                        db    8,   9,   9,   9,   9,   9,   9,   9
 11645 00008848 0909090808080809                        db    9,   9,   9,   8,   8,   8,   8,   9
 11646 00008850 0909090909090908                        db    9,   9,   9,   9,   9,   9,   9,   8
 11647 00008858 0808080808090908                        db    8,   8,   8,   8,   8,   9,   9,   8
 11648 00008860 0808080808080909                        db    8,   8,   8,   8,   8,   8,   9,   9
 11649 00008868 0807080807070707                        db    8,   7,   8,   8,   7,   7,   7,   7
 11650 00008870 0808070707070706                        db    8,   8,   7,   7,   7,   7,   7,   6
 11651 00008878 0707060607070606                        db    7,   7,   6,   6,   7,   7,   6,   6
 11652 00008880 0605050505050304                        db    6,   5,   5,   5,   5,   5,   3,   4
 11653 00008888 04030B0B0B0B0B0B                        db    4,   3, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11654 00008890 0B0B0A0B0B0B0B0A                        db  0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah
 11655 00008898 0A0A0A0A080A0A09                        db  0Ah, 0Ah, 0Ah, 0Ah,   8, 0Ah, 0Ah,   9
 11656 000088A0 0909090A1011110F                        db    9,   9,   9, 0Ah, 10h, 11h, 11h, 0Fh
 11657 000088A8 0F10100E0F0F0E0E                        db  0Fh, 10h, 10h, 0Eh, 0Fh, 0Fh, 0Eh, 0Eh
 11658 000088B0 0F0F0E0E0F0F0F0F                        db  0Fh, 0Fh, 0Eh, 0Eh, 0Fh, 0Fh, 0Fh, 0Fh
 11659 000088B8 0E0F0F0E0D080909                        db  0Eh, 0Fh, 0Fh, 0Eh, 0Dh,   8,   9,   9
 11660 000088C0 08080D0E0E0E0E0E                        db    8,   8, 0Dh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh
 11661 000088C8 0E0E0E0E0E0D0D0E                        db  0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh
 11662 000088D0 0E0E0E0D0E0E0D0D                        db  0Eh, 0Eh, 0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Dh
 11663 000088D8 0D0E0E0E0E0D0D0E                        db  0Dh, 0Eh, 0Eh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh
 11664 000088E0 0E0D0E0E0C0D0D0D                        db  0Eh, 0Dh, 0Eh, 0Eh, 0Ch, 0Dh, 0Dh, 0Dh
 11665 000088E8 0D0D0D0D0D0D0D0D                        db  0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh
 11666 000088F0 0D0D0D0C0D0D0D0D                        db  0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Dh, 0Dh
 11667 000088F8 0D0D0C0D0D0C0C0D                        db  0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Ch, 0Ch, 0Dh
 11668 00008900 0D0B0C0C0C0C0C0C                        db  0Dh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 11669 00008908 0C0D0D0B0C0C0C0C                        db  0Ch, 0Dh, 0Dh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch
 11670 00008910 0B0C0C0C0C0C0C0C                        db  0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 11671 00008918 0C0B0C0C0B0B0B0B                        db  0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh, 0Bh, 0Bh
 11672 00008920 0C0C0C0C0C0C0C0C                        db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 11673 00008928 0B0C0C0B0C0C0B0C                        db  0Bh, 0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ch
 11674 00008930 0C0B0C0C0B0A0A0B                        db  0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ah, 0Ah, 0Bh
 11675 00008938 0B0B0B0B0B0A0A0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh
 11676 00008940 0B0A0A0B0B0B0B0B                        db  0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11677 00008948 0B0B0B0A0B0B0A0A                        db  0Bh, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah
 11678 00008950 0A0B0B0A0A0B0B0A                        db  0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah
 11679 00008958 0A0B0B0A09090A0A                        db  0Ah, 0Bh, 0Bh, 0Ah,   9,   9, 0Ah, 0Ah
 11680 00008960 0A0A0A0A0909090A                        db  0Ah, 0Ah, 0Ah, 0Ah,   9,   9,   9, 0Ah
 11681 00008968 0A090A0A09090809                        db  0Ah,   9, 0Ah, 0Ah,   9,   9,   8,   9
 11682 00008970 0909090909090908                        db    9,   9,   9,   9,   9,   9,   9,   8
 11683 00008978 0809090808070708                        db    8,   9,   9,   8,   8,   7,   7,   8
 11684 00008980 0807060606060404                        db    8,   7,   6,   6,   6,   6,   4,   4
 11685 00008988 0301080808080808                        db    3,   1,   8,   8,   8,   8,   8,   8
 11686 00008990 0808070808070708                        db    8,   8,   7,   8,   8,   7,   7,   8
 11687 00008998 0807070707070707                        db    8,   7,   7,   7,   7,   7,   7,   7
 11688 000089A0 0707070707080809                        db    7,   7,   7,   7,   7,   8,   8,   9
 11689 000089A8 0B0B0B0B0B0B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11690 000089B0 0B0B0B0B0B0B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11691 000089B8 0B0B0B0B0B0B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11692 000089C0 0B0B0B0B040B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh,   4, 0Bh, 0Bh, 0Bh
 11693 000089C8 0B0C0C0B0A0B0B0A                        db  0Bh, 0Ch, 0Ch, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah
 11694 000089D0 0A0A0A0B0B0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah
 11695 000089D8 0A0B0B0A0A0A0A0A                        db  0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11696 000089E0 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11697 000089E8 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11698 000089F0 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11699 000089F8 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11700 00008A00 0A0A0B0B0A0A0A0A                        db  0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah
 11701 00008A08 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11702 00008A10 0A0B0B0A0B0B0A09                        db  0Ah, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah,   9
 11703 00008A18 0A0A0A0A0B0B0A09                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah,   9
 11704 00008A20 090A0A090A0A0A0A                        db    9, 0Ah, 0Ah,   9, 0Ah, 0Ah, 0Ah, 0Ah
 11705 00008A28 09090A0A09090909                        db    9,   9, 0Ah, 0Ah,   9,   9,   9,   9
 11706 00008A30 0909090909090909                        db    9,   9,   9,   9,   9,   9,   9,   9
 11707 00008A38 0909090909090909                        db    9,   9,   9,   9,   9,   9,   9,   9
 11708 00008A40 0909090909090909                        db    9,   9,   9,   9,   9,   9,   9,   9
 11709 00008A48 0909090909090909                        db    9,   9,   9,   9,   9,   9,   9,   9
 11710 00008A50 0A0A0909090A0A08                        db  0Ah, 0Ah,   9,   9,   9, 0Ah, 0Ah,   8
 11711 00008A58 0909080808080808                        db    9,   9,   8,   8,   8,   8,   8,   8
 11712 00008A60 0808080808080809                        db    8,   8,   8,   8,   8,   8,   8,   9
 11713 00008A68 0908080808080809                        db    9,   8,   8,   8,   8,   8,   8,   9
 11714 00008A70 0907080807070707                        db    9,   7,   8,   8,   7,   7,   7,   7
 11715 00008A78 0708080707060607                        db    7,   8,   8,   7,   7,   6,   6,   7
 11716 00008A80 0706050506060404                        db    7,   6,   5,   5,   6,   6,   4,   4
 11717 00008A88 0404060606060606                        db    4,   4,   6,   6,   6,   6,   6,   6
 11718 00008A90 0505050505040404                        db    5,   5,   5,   5,   5,   4,   4,   4
 11719 00008A98 0401040404040404                        db    4,   1,   4,   4,   4,   4,   4,   4
 11720 00008AA0 0404040404040404                        db    4,   4,   4,   4,   4,   4,   4,   4
 11721 00008AA8 0404                                    db    4,   4
 11722 00008AAA 03                      _@@const_3      db 3                   
 11723 00008AAB 000000                                  db 3 dup(0)
 11724 00008AAE [E8470000]              mp3_synth_filter_procs dd synth_16bit_shift_0_slow ; SYNTH_MACRO 0,0,0
 11725 00008AB2 [D44A0000]                              dd synth_16bit_shift_1_slow ; SYNTH_MACRO 0,1,0
 11726 00008AB6 [C64D0000]                              dd synth_16bit_shift_2_slow ; SYNTH_MACRO 0,2,0
 11727 00008ABA [B8500000]                              dd synth_8bit_shift_0_slow ; SYNTH_MACRO 1,0,0
 11728 00008ABE [99530000]                              dd synth_8bit_shift_1_slow ; SYNTH_MACRO 1,1,0
 11729 00008AC2 [80560000]                              dd synth_8bit_shift_2_slow ; SYNTH_MACRO 1,2,0
 11730 00008AC6 [A9350000]                              dd synth_16bit_shift_0_fast ; SYNTH_MACRO 0,0,1
 11731 00008ACA [B5380000]                              dd synth_16bit_shift_1_fast ; SYNTH_MACRO 0,1,1
 11732 00008ACE [C73B0000]                              dd synth_16bit_shift_2_fast ; SYNTH_MACRO 0,2,1
 11733 00008AD2 [D93E0000]                              dd synth_8bit_shift_0_fast ; SYNTH_MACRO 1,0,1
 11734 00008AD6 [DA410000]                              dd synth_8bit_shift_1_fast ; SYNTH_MACRO 1,1,1
 11735 00008ADA [E1440000]                              dd synth_8bit_shift_2_fast ; SYNTH_MACRO 1,2,1
 11736                                  ;txt_hello      db 'nocash mp3 decoder v1.4, 2024 martin korth, press ctrl+c to quit,'
 11737                                  ;               db ' BDS now',0Dh,0Ah,0
 11738                                  ; Erdogan Tan - 17/10/2024
 11739 00008ADE 0D0A                    txt_hello       db 13,10
 11740                                  		;db 'NOCASH MP3 PLAYER v1.4 for Windows ',0
 11741                                  		; 09/01/2025
 11742 00008AE0 4E4F43415348204D50-     		db 'NOCASH MP3 PLAYER v1.0 for TRDOS386 ',0
 11742 00008AE9 3320504C4159455220-
 11742 00008AF2 76312E3020666F7220-
 11742 00008AFB 5452444F5333383620-
 11742 00008B04 00                 
 11743                                  		 
 11744 00008B05 66696C653A2000          txt_file        db 'file: ',0          
 11745 00008B0C 66696C652073697A65-     txt_file_size   db 'file size: ',0     
 11745 00008B15 3A2000             
 11746 00008B18 2C206964332073697A-     txt_id3_size    db ', id3 size: ',0    
 11746 00008B21 653A2000           
 11747 00008B25 2C207461672073697A-     txt_tag_size    db ', tag size: ',0    
 11747 00008B2E 653A2000           
 11748 00008B32 696E7075743A2000        txt_input       db 'input: ',0         
 11749 00008B3A 6F75747075743A2000      txt_output      db 'output: ',0        
 11750 00008B43 20687A2C2000            txt_hz          db ' hz, ',0           
 11751 00008B49 206368616E6E656C73-     txt_channels    db ' channels, ',0     
 11751 00008B52 2C2000             
 11752 00008B55 2062697400              txt_bit         db ' bit',0            
 11753 00008B5A 206B6269742F7300        txt_kbit_s      db ' kbit/s',0         
 11754 00008B62 63616E6E6F74206F70-     txt_not_found   db 'cannot open source file',0Dh,0Ah,0
 11754 00008B6B 656E20736F75726365-
 11754 00008B74 2066696C650D0A00   
 11755 00008B7C 75736167653A206D70-     txt_help        db 'usage: mp3play input.mp3 [output.wav] [verify.pcm] [/test]', 0Dh,0Ah
 11755 00008B85 33706C617920696E70-
 11755 00008B8E 75742E6D7033205B6F-
 11755 00008B97 75747075742E776176-
 11755 00008BA0 5D205B766572696679-
 11755 00008BA9 2E70636D5D205B2F74-
 11755 00008BB2 6573745D0D0A       
 11756 00008BB8 202020202020202020-                     db '                         [/mono] [/8bit] [/fast] [/half|/quarter]',0Dh,0Ah,0
 11756 00008BC1 202020202020202020-
 11756 00008BCA 202020202020205B2F-
 11756 00008BD3 6D6F6E6F5D205B2F38-
 11756 00008BDC 6269745D205B2F6661-
 11756 00008BE5 73745D205B2F68616C-
 11756 00008BEE 667C2F717561727465-
 11756 00008BF7 725D0D0A00         
 11757 00008BFC 766572696679206D61-     _@@txt_verify1  db 'verify max difference = ',0
 11757 00008C05 782064696666657265-
 11757 00008C0E 6E6365203D2000     
 11758 00008C15 206174206D70333A00      _@@txt_verify1_at_mp3 db ' at mp3:',0  
 11759 00008C1E 2C2061766572616765-     _@@txt_verify2  db ', average difference = ',0
 11759 00008C27 20646966666572656E-
 11759 00008C30 6365203D2000       
 11760                                  
 11761                                  ; Erdogan Tan - 17/10/2024
 11762                                                 ;db 'NOCASH MP3 PLAYER v1.4 for Windows ',0
 11763 00008C36 287072657373204354-     txt_ctrlc       db '(press CTRL+C to quit)', 13,10,0
 11763 00008C3F 524C2B4320746F2071-
 11763 00008C48 756974290D0A00     
 11764                                  txt_ctrlc_size equ $ - txt_ctrlc
 11765 00008C4F 0D0A                    txt_about       db 13,10
 11766                                                  ;db '----------------------------------',13,10
 11767 00008C51 2D2D2D2D2D2D2D2D2D-                     db '-----------------------------------',13,10
 11767 00008C5A 2D2D2D2D2D2D2D2D2D-
 11767 00008C63 2D2D2D2D2D2D2D2D2D-
 11767 00008C6C 2D2D2D2D2D2D2D2D0D-
 11767 00008C75 0A                 
 11768 00008C76 4572646F67616E2054-                     db 'Erdogan Tan - 15/01/2025 (Assembler: NASM)', 13,10
 11768 00008C7F 616E202D2031352F30-
 11768 00008C88 312F32303235202841-
 11768 00008C91 7373656D626C65723A-
 11768 00008C9A 204E41534D290D0A   
 11769 00008CA2 4F726967696E616C20-                     db 'Original code: MP3PLAYER.EXE v1.4 (20/09/2024)', 13,10
 11769 00008CAB 636F64653A204D5033-
 11769 00008CB4 504C415945522E4558-
 11769 00008CBD 452076312E34202832-
 11769 00008CC6 302F30392F32303234-
 11769 00008CCF 290D0A             
 11770 00008CD2 202020202020202020-                     db '               by Martin Korth (TASM source code)'
 11770 00008CDB 202020202020627920-
 11770 00008CE4 4D617274696E204B6F-
 11770 00008CED 72746820285441534D-
 11770 00008CF6 20736F757263652063-
 11770 00008CFF 6F646529           
 11771 00008D03 0D0A0D0A00                              db 13,10,13,10,0
 11772 00008D08 76312E342E30                            db 'v1.4.0'
 11773                                  ; 10/01/2025
 11774 00008D0E 00                      half_buffer	db 0
 11775                                  
 11776                                  ; ===========================================================================
 11777                                  ; Uninitialized DATA (BSS)
 11778                                  ; ===========================================================================
 11779                                  
 11780 00008D0F 90                      align 4
 11781                                  
 11782                                  bss_start:
 11783                                  
 11784                                  ; 10/01/2025
 11785                                  ABSOLUTE bss_start
 11786                                  
 11787                                  ; 12/01/2025
 11788                                  ;;;;
 11789                                  ; AC97 specific
 11790 00008D10 ????????                bus_dev_fn	resd 1
 11791 00008D14 ????????                dev_vendor	resd 1
 11792 00008D18 ????                    NAMBAR		resw 1
 11793 00008D1A ????                    NABMBAR		resw 1
 11794                                  ; SB16 specific
 11795 00008D1C ????????                audio_io_base	resd 1
 11796                                  ac97_int_ln_reg:
 11797 00008D20 ??                      audio_intr	resb 1
 11798                                  ;;;;
 11799                                  
 11800 00008D21 ??????                  alignb 4
 11801                                  
 11802                                  ;;;
 11803                                  ; 20/10/2024 (TRDOS 386 specific parameters)
 11804 00008D24 ??                      audio_hardware	resb 1
 11805 00008D25 ??                      vra		resb 1
 11806 00008D26 ????                    max_frequency	resw 1
 11807 00008D28 ??                      srb		resb 1
 11808 00008D29 ??                      volume_level	resb 1
 11809 00008D2A ??                      blocks		resb 1
 11810 00008D2B ??                      		resb 1
 11811 00008D2C ????????                buffer_size	resd 1
 11812                                  ;;;
 11813                                  
 11814                                  ; 15/01/2025 (mp3play2.s)
 11815                                  ;;;;
 11816                                  ; 13/01/2025 (Interpolation parameters)
 11817 00008D30 ????????                conversion	resd 1	; pointer to convers(t)ion
 11818                                  			; or interpolation proc address
 11819 00008D34 ????????                loadsize	resd 1	; decoding buffer size
 11820                                  ;interpolation	resb 1	; interpolation status
 11821 00008D38 ??                      convert		resb 1	; mono to stereo or 8bit to 16bit
 11822                                  			; conversion flag ; 15/01/2025
 11823 00008D39 ??                      counter		resb 1  ; 15/01/2025
 11824 00008D3A ????                    		resw 1
 11825                                  ;;;;
 11826                                  	
 11827                                  
 11828                                  mp3_context_start:
 11829 00008D3C <res 1000h>             main_data_pool_start	resb 4096
 11830 00009D3C ????????                main_data_pool_wr_ptr	resd 1
 11831 00009D40 ????????                mp3_src_data_location	resd 1
 11832 00009D44 ????????                mp3_src_frame_size	resd 1
 11833 00009D48 ????????                mp3_src_frame_end	resd 1
 11834 00009D4C ????????                mp3_hdr_32bit_header	resd 1
 11835 00009D50 ????????                mp3_hdr_flag_crc	resd 1
 11836 00009D54 ????????                mp3_hdr_flag_mpeg25	resd 1
 11837 00009D58 ????????                mp3_hdr_flag_padding	resd 1
 11838 00009D5C ????????                mp3_sample_rate		resd 1
 11839 00009D60 ????????                mp3_hdr_sample_rate_index resd 1
 11840 00009D64 ????????                mp3_bit_rate		resd 1
 11841 00009D68 ????????                mp3_src_num_channels	resd 1
 11842 00009D6C ????????                mp3_output_num_channels resd 1
 11843 00009D70 ????????                mp3_output_sample_rate	resd 1
 11844 00009D74 ????????                mp3_bytes_per_sample	resd 1
 11845 00009D78 ????????                mp3_curr_syn_index	resd 1
 11846 00009D7C ????????                mp3_curr_syn_dst	resd 1
 11847 00009D80 ????????                mp3_nb_frames		resd 1
 11848 00009D84 ????????                mp3_hdr_mode_val	resd 1
 11849 00009D88 ????????                mp3_hdr_mode_ext	resd 1
 11850 00009D8C ????????                mp3_hdr_flag_lsf	resd 1
 11851 00009D90 ????????                mp3_synth_filter_proc	resd 1
 11852                                  
 11853 00009D94 <res 2000h>             mp3_synth_buf   resd 2048
 11854 0000BD94 ????????????????        mp3_synth_index resd 2
 11855 0000BD9C <res 2400h>             mp3_sb_samples  resd 2304
 11856                                  	                           ; MP3_MAX_CHANNELS*36*SBLIMIT
 11857 0000E19C <res 1200h>             mp3_mdct_buf    resd 1152
 11858                                                                     ; MP3_MAX_CHANNELS*SBLIMIT*18
 11859 0000F39C ????????                mp3_free_format_frame_size resd 1
 11860                                  
 11861 0000F3A0 ??                      mp3_curr_vfrac_bits resb 1
 11862                                  
 11863 0000F3A1 ??????                  alignb 4
 11864                                  
 11865 0000F3A4 ????????                mp3_xing_id     resd 1
 11866 0000F3A8 ????????                mp3_xing_flags  resd 1
 11867 0000F3AC ????????                mp3_xing_frames resd 1
 11868 0000F3B0 ????????                mp3_xing_filesize resd 1
 11869 0000F3B4 <res 64h>               mp3_xing_toc    resb 100
 11870 0000F418 ????????                mp3_xing_vbr_scale resd 1
 11871 0000F41C ????????                mp3_file_size   resd 1
 11872 0000F420 ????????                mp3_id3_size    resd 1
 11873 0000F424 ????????                mp3_tag_size    resd 1
 11874                                  
 11875 0000F428 ????????                mp3_num_frames_decoded	resd 1
 11876 0000F42C ????????                mp3_total_output_size	resd 1
 11877 0000F430 ????????                mp3_samples_dst		resd 1
 11878                                  ; DWORD mp3_samples_output_size
 11879 0000F434 ????????                mp3_samples_output_size	resd 1
 11880 0000F438 ????????                mp3_samples_dst_step	resd 1
 11881                                  
 11882 0000F43C ????????                mp3_curr_channel	resd 1
 11883 0000F440 ????????                mp3_curr_granule	resd 1
 11884 0000F444 ????????                mp3_curr_frame		resd 1
 11885                                  
 11886 0000F448 ????????                mp3_bitstream_start	resd 1
 11887 0000F44C ????????                mp3_src_remain		resd 1
 11888 0000F450 ????????                mp3_extra_bytes		resd 1
 11889 0000F454 ????????                mp3_main_data_begin	resd 1
 11890 0000F458 ????????                mp3_num_compress_bits	resd 1
 11891                                  
 11892 0000F45C ????????                mp3_nb_granules resd 1
 11893                                  
 11894 0000F460 <res 2680h>             mp3_granules		resb 9856
 11895 00011AE0 <res 480h>              mp3_exponents		resw 576
 11896 00011F60 <res B800h>             huff_tree_buf		resb 0B800h
 11897 0001D760 <res 240h>              mp3_band_index_long	resw 288
 11898 0001D9A0 <res 803Ch>             mp3_table_4_3_exp	resb 32828
 11899                                  
 11900 000259DC <res 200F0h>            mp3_table_4_3_value	resd 32828
 11901 00045ACC <res 800h>              mp3_exp_table		resd 512
 11902 000462CC <res 8000h>             mp3_expval_table	resd 8192
 11903 0004E2CC <res 480h>              mp3_mdct_win		resd 288
 11904 0004E74C <res 800h>              mp3_is_table_lsf	resd 512
 11905 0004EF4C <res 1000h>             mp3_synth_win		resd 1024
 11906 0004FF4C <res 2000h>             mp3_lsf_sf_expand_exploded_table resb 8192
 11907                                  mp3_context_end:
 11908 00051F4C ????????                _@@region_address0	resd 1
 11909 00051F50 ????????                _@@region_address1	resd 1
 11910 00051F54 ????????                _@@saved_sp		resd 1
 11911 00051F58 ????????                mp3_main_data_siz	resd 1
 11912 00051F5C ????????                _@@scfsi        resd 1
 11913 00051F60 <res Ch>                _@@gains        resd 3
 11914 00051F6C ????????                _@@rle_point    resd 1
 11915 00051F70 ????????                _@@III          resd 1
 11916 00051F74 ????????                _@@JJJ          resd 1
 11917 00051F78 ????????                _@@linbits      resd 1
 11918 00051F7C ????????                _@@vlc_table    resd 1
 11919 00051F80 ????????                _@@coarse_end   resd 1
 11920                                  
 11921 00051F84 ????????                _@rle_point     resd 1
 11922 00051F88 ????????                _@@rle_ptr      resd 1
 11923 00051F8C ????????                _@@rle_val      resd 1
 11924 00051F90 ????????                _@@rle_val_x_40h resd 1
 11925 00051F94 ????????                _@@max_bands    resb 4
 11926 00051F98 ????????                _@@max_blocks   resd 1
 11927 00051F9C ????????                _@@max_pos      resd 1
 11928 00051FA0 <res 28h>               _@@sfb_array    resb 40
 11929 00051FC8 ????????                _@@is_tab       resd 1
 11930 00051FCC ????????                _@@n_long_sfb   resd 1
 11931 00051FD0 ????????                _@@n_short_sfb  resd 1
 11932 00051FD4 ????????                _@@n_sfb        resd 1
 11933 00051FD8 <res 900h>              _@@tmp          resb 2304
 11934 000528D8 ????????                _@@s0           resd 1
 11935 000528DC ????????                _@@s2           resd 1
 11936 000528E0 ????????                _@@s3           resd 1
 11937                                  
 11938 000528E4 <res 48h>               _@@@tmp         resd 18 ; resb 72
 11939 0005292C ????????                _@@tmp0         resd 1
 11940 00052930 ????????                _@@tmp1         resd 1
 11941 00052934 ????????                _@@tmp2         resd 1
 11942 00052938 ????????                _@@tmp3         resd 1
 11943 0005293C ????????                _@@tmp4         resd 1
 11944 00052940 ????????                _@@tmp5         resd 1
 11945 00052944 ????????                mp3_out2_a0     resd 1
 11946 00052948 ????????                mp3_out2_a1     resd 1
 11947 0005294C ????????                mp3_out2_a2     resd 1
 11948 00052950 ????????                mp3_out2_b0     resd 1
 11949 00052954 ????????                mp3_out2_b1     resd 1
 11950 00052958 ????????                mp3_out2_b2     resd 1
 11951 0005295C ????????                                resd 1
 11952 00052960 ????????                                resd 1
 11953 00052964 ????????                _@@@JJJ         resd 1
 11954 00052968 ????????                _@@www          resd 1
 11955 0005296C ????????                _@@mdct_long_end resd 1
 11956 00052970 ????????                _@@sblimit      resd 1
 11957 00052974 ????????                _@@switch_point resd 1
 11958 00052978 <res 100h>              mp3_huff_tmp_bits	resb 256
 11959 00052A78 <res 200h>              mp3_huff_tmp_codes	resb 512
 11960 00052C78 ????????                _@@table_nb_bits	resd 1
 11961 00052C7C ????????                _@@nb_codes		resd 1
 11962 00052C80 ????????                _@@prefix_numbits	resd 1
 11963 00052C84 ????????                _@@prefix_pattern	resd 1
 11964 00052C88 ????????                _@@curr_table_size	resd 1
 11965 00052C8C ????????                _@@curr_table_mask	resd 1
 11966 00052C90 ????????                _@@curr_table_index	resd 1
 11967 00052C94 ????????                _@@granule_addr		resd 1
 11968                                  ; HANDLE hFile
 11969 00052C98 ????????                hFile           resd 1
 11970                                  ; HANDLE hMap
 11971                                  ;hMap           resd 1
 11972 00052C9C ????????                stream_start    resd 1
 11973 00052CA0 ????????                stream_pos      resd 1
 11974 00052CA4 ????????                bytes_left      resd 1
 11975                                  
 11976                                  ; 20/10/2024
 11977                                  ; DWORD diskresult
 11978                                  ;diskresult     resd 1
 11979                                  ; HANDLE std_out
 11980                                  ;std_out        resd 1
 11981                                  ;cmdline_buf    resb 1024
 11982 00052CA8 <res 80h>               cmdline_buf	resb 128
 11983                                  ; HANDLE mp3_wav_handle
 11984 00052D28 ????????                mp3_wav_handle  resd 1
 11985                                  ; HANDLE mp3_pcm_handle
 11986 00052D2C ????????                mp3_pcm_handle  resd 1
 11987 00052D30 ????????                _@@max_diff     resd 1
 11988 00052D34 ????????????????        _@@avg_diff     resd 2
 11989 00052D3C ????????                pcm_filepos     resd 1
 11990 00052D40 ????????                _@@mono_convert resd 1
 11991 00052D44 ????????                _@@pcm_steps    resw 2
 11992 00052D48 ????????                _@@worst_pcm_filepos resd 1
 11993 00052D4C ????????                _@@worst_mp3_filepos resd 1
 11994 00052D50 ????????                		resd 1
 11995                                  ;alignb 4
 11996                                  
 11997                                  ; 10/01/2025
 11998 00052D54 <res 2ACh>              alignb 4096
 11999                                  
 12000                                  ; 12/01/2025
 12001                                  ; 09/01/2025
 12002                                  ;sample_buffer	resb 36864
 12003                                  ;;sample_buffer	resb 8*MP3_MAX_OUTPUT_SIZE
 12004                                  ;;sample_buffer_size equ $-sample_buffer
 12005                                  
 12006                                  ; 15/01/2025
 12007 00053000 <res 2000h>             decoding_buffer	resb 8192  ; 2*4096 (max. 4608)
 12008 00055000 <res 9000h>             sample_buffer	resb 36864 ; 8*4608
 12009                                  
 12010                                  ;alignb 4096
 12011                                  
 12012                                  end_of_bss:
 12013                                  
 12014                                  ; ===========================================================================
 12015                                  ; end
