     1                                  ; ****************************************************************************
     2                                  ; MP3PLAY.PRG - MP3 DECODER/PLAYER 1.0 for TRDOS 386 Operating System
     3                                  ; ----------------------------------------------------------------------------
     4                                  ; Based on 
     5                                  ; NOCASH MP3PLAY.EXE 1.4 (Windows) ASM source code (Martin Korth, 20/09/2024)
     6                                  ;
     7                                  ; FASM Source Code: Erdogan Tan - 19/10/2024 - 22/10/2024
     8                                  ; NASM Source Code: Erdogan Tan - 09/01/2025
     9                                  ;
    10                                  ; [ Last Modification: 15/01/2025 ]
    11                                  ;
    12                                  ; ----------------------------------------------------------------------------
    13                                  ; Modified from on MP3PLAY.ASM (for Windows console) source code - 17/10/2024
    14                                  ; ****************************************************************************
    15                                  ; Modified from Martin Korth's 'mp3play.asm' (TASM32) source code... (v1.4)
    16                                  ; Applied development method:
    17                                  ;         Disassembling 'mp3play.exe' v1.4 by using HEX-RAYS disassembler;
    18                                  ;         then... converting disassembled code to FASM syntax,
    19                                  ;                 adding '.idata' code (by help of FASM examples) to the raw
    20                                  ;                        asm file. Converting 'proc' procedures to labels.
    21                                  ;               and Finally: assembling mp3play.asm (single) file by using
    22                                  ;                           'fasm mp3play.asm' command.
    23                                  ;
    24                                  ; NOTE:
    25                                  ; Martin Korth's MP3PLAY.EXE (v1.4, 20/09/2024) file size is 45056 bytes.
    26                                  ; (This) modified MP3PLAY.EXE (v1.4.0, 17/10/2024) is 37888 bytes.
    27                                  ;
    28                                  ; ---------------------------------------------------------------------------
    29                                  ; nasm mp3play.s -l mp3play.txt -o MP3PLAY.PRG -Z error.txt
    30                                  
    31                                  ; ===========================================================================
    32                                  ;  TRDOS 386 Operating System Specific Procedures - Erdogan Tan - 20/10/2024
    33                                  ; ===========================================================================
    34                                  
    35                                  ; 20/10/2024
    36                                  ; 20/08/2024 ; TRDOS 386 v2.0.9
    37                                  ; TRDOS 386 system calls
    38                                  _ver 	equ 0
    39                                  _exit 	equ 1
    40                                  _fork 	equ 2
    41                                  _read 	equ 3
    42                                  _write	equ 4
    43                                  _open	equ 5
    44                                  _close 	equ 6
    45                                  _wait 	equ 7
    46                                  _creat 	equ 8
    47                                  _rename equ 9
    48                                  _delete equ 10
    49                                  _exec	equ 11
    50                                  _chdir	equ 12
    51                                  _time 	equ 13
    52                                  _mkdir 	equ 14
    53                                  _chmod	equ 15
    54                                  _rmdir	equ 16
    55                                  _break	equ 17
    56                                  _drive	equ 18
    57                                  _seek	equ 19
    58                                  _tell 	equ 20
    59                                  _mem	equ 21
    60                                  _prompt	equ 22
    61                                  _path	equ 23
    62                                  _env	equ 24
    63                                  _stime	equ 25
    64                                  _quit	equ 26
    65                                  _intr	equ 27
    66                                  _dir	equ 28
    67                                  _emt 	equ 29
    68                                  _ldvrt 	equ 30
    69                                  _video 	equ 31
    70                                  _audio	equ 32
    71                                  _timer	equ 33
    72                                  _sleep	equ 34
    73                                  _msg    equ 35
    74                                  _geterr	equ 36
    75                                  _fpsave	equ 37
    76                                  _pri	equ 38
    77                                  _rele	equ 39
    78                                  _fff	equ 40
    79                                  _fnf	equ 41
    80                                  _alloc	equ 42
    81                                  _dalloc equ 43
    82                                  _calbac equ 44
    83                                  _dma	equ 45
    84                                  _stdio  equ 46	;  TRDOS 386 v2.0.9
    85                                  
    86                                  ; ---------------------------------------------------------------------------
    87                                  ; 'sys' macro in FASM format
    88                                  ; ---------------------------------------------------------------------------
    89                                  
    90                                  %if 0
    91                                  macro sys op1,op2,op3,op4
    92                                  {
    93                                      if op4 eq 
    94                                      else
    95                                          mov edx, op4
    96                                      end if
    97                                      if op3 eq
    98                                      else
    99                                          mov ecx, op3
   100                                      end if
   101                                      if op2 eq
   102                                      else
   103                                          mov ebx, op2
   104                                      end if
   105                                      mov eax, op1
   106                                      int 40h
   107                                  }
   108                                  %endif
   109                                  
   110                                  ; ---------------------------------------------------------------------------
   111                                  ; 'sys' macro in NASM format
   112                                  ; ---------------------------------------------------------------------------
   113                                  ; 09/01/2025
   114                                  
   115                                  %macro sys 1-4
   116                                      ; 29/04/2016 - TRDOS 386 (TRDOS v2.0)
   117                                      ; 03/09/2015
   118                                      ; 13/04/2015
   119                                      ; Retro UNIX 386 v1 system call.
   120                                      %if %0 >= 2
   121                                          mov ebx, %2
   122                                          %if %0 >= 3
   123                                              mov ecx, %3
   124                                              %if %0 = 4
   125                                                 mov edx, %4
   126                                              %endif
   127                                          %endif
   128                                      %endif
   129                                      mov eax, %1
   130                                      ;int 30h
   131                                      int 40h ; TRDOS 386 (TRDOS v2.0)
   132                                  %endmacro
   133                                  
   134                                  ; ===========================================================================
   135                                  ; CODE
   136                                  ; ===========================================================================
   137                                  
   138                                  		[BITS 32] ; 32-bit intructions
   139                                  
   140                                  		[ORG 0]
   141                                  
   142                                  ; ===========================================================================
   143                                  
   144                                  		; 20/10/2024
   145                                  start:
   146                                  		; 21/10/2024
   147 00000000 E8376B0000              		call	set_break	; set and clear bss section
   148                                  					; also set stream_start position
   149                                  
   150                                                  ;mov    edx, txt_hello  ; "nocash mp3 decoder v1.4, 2024" ...
   151                                                  ;call   wrstr_edx
   152 00000005 BB[428B0000]            		mov	ebx, txt_hello
   153 0000000A E8D46B0000              		call	print_msg
   154                                  
   155 0000000F E8036A0000                              call    get_commandline
   156 00000014 0F8286010000                            jc      .exit
   157                                  
   158                                  		;;;
   159                                  		; 11/01/2025
   160 0000001A E8BA6C0000              		call	detect_enable_audio_device
   161 0000001F 0F827B010000            		jc	.exit
   162                                  		;;;
   163                                  
   164 00000025 31ED                                    xor     ebp, ebp
   165 00000027 E828640000                              call    mp3_init
   166 0000002C E8226B0000                              call    open_and_mmap_the_file
   167 00000031 0F8269010000                            jc      .exit
   168 00000037 E869010000                              call    detect_cpu_386_and_up
   169 0000003C E8B46B0000                              call    GetTickCount
   170 00000041 F7D8                                    neg     eax
   171 00000043 A3[60760000]                            mov     [millisecond_count], eax
   172 00000048 E8A1640000                              call    mp3_check_1st_frame
   173 0000004D 0F824D010000                            jc      .exit
   174 00000053 803D[4C760000]00                        cmp     byte [option_test], 0
   175 0000005A 740A                                    jz      short .no_benchmark_test
   176 0000005C E857660000                              call    mp3_plain_test_without_output
   177                                  
   178 00000061 E986000000                              jmp    .decode_done
   179                                   
   180                                  .no_benchmark_test:
   181 00000066 833D[00850000]00                        cmp     dword [mp3_pcm_fname], 0
   182 0000006D 740A                                    jz      short .no_pcm_verify
   183 0000006F E86C670000                              call    mp3_verify_pcm_file
   184 00000074 E927010000                              jmp     .exit
   185                                  
   186                                  .no_pcm_verify:
   187 00000079 833D[FC840000]00                        cmp     dword [mp3_dst_fname], 0
   188 00000080 7407                                    jz      short .no_wav_output
   189 00000082 E866660000                              call    mp3_cast_to_wav_file
   190 00000087 EB63                                    jmp     short .decode_done
   191                                  
   192                                  .no_wav_output:
   193                                  		; 15/01/2025
   194                                  		; 10/01/2025 (Video memory access for buffer change indicator)
   195                                  		; DIRECT CGA (TEXT MODE) MEMORY ACCESS
   196                                  		; bl = 0, bh = 4
   197                                  		; Direct access/map to CGA (Text) memory (0B8000h)
   198                                  		sys	_video, 0400h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00000089 BB00040000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 0000008E B81F000000          <1>  mov eax, %1
   130                              <1> 
   131 00000093 CD40                <1>  int 40h
   199 00000095 3D00800B00              		cmp	eax, 0B8000h
   200 0000009A 0F8500010000            		jne	.exit	; 15/01/2025
   201                                  		;;;
   202                                  
   203                                  		; 15/01/2025
   204                                  		;;;; --------------------------
   205                                  		;mov	byte [convert], 0
   206 000000A0 B002                    		mov	al, 2 
   207 000000A2 3805[888D0000]          		cmp	[audio_hardware], al ; 2
   208 000000A8 7511                    		jne	short .direct
   209                                  
   210 000000AA 803D[D09D0000]02        		cmp	byte [mp3_output_num_channels], 2
   211 000000B1 7227                    		jb	short .indirect	; mono (8bit or 16bit)
   212 000000B3 3805[D89D0000]          		cmp	[mp3_bytes_per_sample], al ; 2
   213 000000B9 721F                    		jb	short .indirect
   214                                  .direct:
   215                                  		;;;; --------------------------
   216                                  
   217                                  		;;; 
   218                                  		; 20/10/2024
   219                                  		;call	detect_enable_audio_device
   220                                  		;jc	.exit
   221 000000BB E8066D0000              		call	audio_system_init
   222                                  		;jc	.exit
   223 000000C0 7207                    		jc	short .exit@ ; 15/01/2025
   224                                  		;;;
   225                                  
   226 000000C2 E8BD6D0000                              call    mp3_cast_to_speaker
   227                                  
   228                                  		; 13/01/2025
   229                                  		;;;; --------------------------
   230 000000C7 EB23                    		jmp	short .decode_done
   231                                  
   232                                  		; 15/01/2025
   233                                  .exit@:
   234                                  		; Disable audio device
   235                                  		sys	_audio, 0C00h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 000000C9 BB000C0000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 000000CE B820000000          <1>  mov eax, %1
   130                              <1> 
   131 000000D3 CD40                <1>  int 40h
   236 000000D5 E93F6B0000              		jmp	ExitProcess
   237                                  
   238                                  .indirect:
   239 000000DA FE05[9C8D0000]          		inc	byte [convert] ; 1
   240 000000E0 E8836F0000              		call	audio_system_init_x
   241 000000E5 72E2                    		jc	short .exit@
   242 000000E7 E800700000              		call    mp3_cast_to_speaker_x
   243                                  		;;;; --------------------------
   244                                  
   245                                  .decode_done:
   246 000000EC E8046B0000                              call    GetTickCount
   247 000000F1 0105[60760000]                          add     [millisecond_count], eax
   248 000000F7 BA[35850000]                            mov     edx, txt_decode_timing1 ; "audio duration "
   249 000000FC E8F7640000                              call    wrstr_edx
   250 00000101 A1[90F40000]                            mov     eax, [mp3_total_output_size]
   251 00000106 BAE8030000                              mov     edx, 1000
   252 0000010B F7E2                                    mul     edx
   253 0000010D F735[D49D0000]                          div     dword [mp3_output_sample_rate]
   254 00000113 31D2                                    xor     edx, edx
   255 00000115 F735[D09D0000]                          div     dword [mp3_output_num_channels]
   256 0000011B 31D2                                    xor     edx, edx
   257 0000011D F735[D89D0000]                          div     dword [mp3_bytes_per_sample]
   258 00000123 A3[5C760000]                            mov     [mp3_output_milliseconds], eax
   259 00000128 E801650000                              call    wr_decimal_eax_with_thousands_seperator
   260 0000012D BA[45850000]                            mov     edx, txt_decode_timing2 ; " milliseconds, decoded in "
   261 00000132 E8C1640000                              call    wrstr_edx
   262 00000137 A1[60760000]                            mov     eax, [millisecond_count]
   263 0000013C E8ED640000                              call    wr_decimal_eax_with_thousands_seperator
   264 00000141 BA[60850000]                            mov     edx, txt_decode_timing3 ; " milliseconds\r\n"
   265 00000146 E8AD640000                              call    wrstr_edx
   266 0000014B BA[70850000]                            mov     edx, txt_clks_per_second ; " clock cycles per second:\r\n"
   267 00000150 E8A3640000                              call    wrstr_edx
   268 00000155 BE[64760000]                            mov     esi, ttt ; rdtsc_list_start
   269                                  
   270                                  .timelog_lop:
   271 0000015A E8BB640000                              call    wrspc
   272 0000015F 8D5608                                  lea     edx, [esi+8]
   273 00000162 E891640000                              call    wrstr_edx
   274 00000167 E8AE640000                              call    wrspc
   275 0000016C 8B06                                    mov     eax, [esi]
   276 0000016E 8B5E04                                  mov     ebx, [esi+4]
   277 00000171 BAE8030000                              mov     edx, 1000
   278 00000176 0FAFDA                                  imul    ebx, edx
   279 00000179 F7E2                                    mul     edx
   280 0000017B 01DA                                    add     edx, ebx
   281 0000017D 3B15[5C760000]                          cmp     edx, [mp3_output_milliseconds]
   282 00000183 730B                                    jnb     short .timelog_oops
   283 00000185 F735[5C760000]                          div     dword [mp3_output_milliseconds]
   284 0000018B E89E640000                              call    wr_decimal_eax_with_thousands_seperator
   285                                  
   286                                  .timelog_oops:
   287 00000190 E874640000                              call    wrcrlf
   288 00000195 83C618                                  add     esi, 24
   289 00000198 81FE[2C780000]                          cmp     esi, mp3_bitrate_tab
   290 0000019E 75BA                                    jnz     short .timelog_lop
   291                                  
   292                                  .exit:
   293                                  		;push   0               ; uExitCode
   294                                                  ;call   ExitProcess
   295 000001A0 E9746A0000              		jmp	ExitProcess
   296                                  
   297                                  
   298                                  ; =============== S U B R O U T I N E =======================================
   299                                  
   300                                  
   301                                  detect_cpu_386_and_up:
   302 000001A5 C605[59760000]03                        mov     byte [detected_cpu], 3
   303 000001AC 89E3                                    mov     ebx, esp
   304 000001AE 83E4FC                                  and     esp, ~ 3 ; not 3
   305 000001B1 9C                                      pushf
   306 000001B2 58                                      pop     eax
   307 000001B3 89C1                                    mov     ecx, eax
   308 000001B5 3500000400                              xor     eax, 40000h
   309 000001BA 50                                      push    eax
   310 000001BB 9D                                      popf
   311 000001BC 9C                                      pushf
   312 000001BD 58                                      pop     eax
   313 000001BE 31C8                                    xor     eax, ecx
   314 000001C0 51                                      push    ecx
   315 000001C1 9D                                      popf
   316 000001C2 89DC                                    mov     esp, ebx
   317 000001C4 A900000400                              test    eax, 40000h
   318 000001C9 7431                                    jz      short .no_id
   319 000001CB FE05[59760000]                          inc	byte [detected_cpu]
   320 000001D1 E827000000                              call    @@get_id_flag
   321 000001D6 7507                                    jnz     short .yep_id
   322 000001D8 E820000000                              call    @@get_id_flag
   323 000001DD 741D                                    jz      short .no_id
   324                                  
   325                                  .yep_id:
   326 000001DF B801000000                              mov     eax, 1
   327 000001E4 0FA2                                    cpuid
   328 000001E6 80E40F                                  and     ah, 0Fh
   329 000001E9 8825[59760000]                          mov     [detected_cpu], ah
   330 000001EF C605[58760000]01                        mov	byte [cpuid_exists], 1
   331 000001F6 8915[54760000]                          mov     [cpuid_flags], edx
   332                                  
   333                                  .no_id:
   334 000001FC C3                                      retn
   335                                  
   336                                  ; =============== S U B R O U T I N E =======================================
   337                                  
   338                                  
   339                                  @@get_id_flag:
   340 000001FD 9C                                      pushf
   341 000001FE 58                                      pop     eax
   342 000001FF 0D00002000                              or      eax, 200000h
   343 00000204 50                                      push    eax
   344 00000205 9D                                      popf
   345 00000206 9C                                      pushf
   346 00000207 58                                      pop     eax
   347 00000208 A900002000                              test    eax, 200000h
   348 0000020D C3                                      retn
   349                                  
   350                                  ; =============== S U B R O U T I N E =======================================
   351                                  
   352                                  bswap_eax:
   353 0000020E 86E0                                    xchg    al, ah
   354 00000210 C1C810                                  ror     eax, 10h
   355 00000213 86E0                                    xchg    al, ah
   356 00000215 C3                                      retn
   357                                  
   358                                  ; =============== S U B R O U T I N E =======================================
   359                                  
   360                                  mp3_recollect_bits:
   361 00000216 F7C601000000                            test    esi, 1
   362 0000021C 7510                                    jnz     short .odd
   363 0000021E 668B2E                                  mov     bp, [esi]
   364 00000221 83C602                                  add     esi, 2
   365 00000224 66C1CD08                                ror     bp, 8
   366 00000228 C1E510                                  shl     ebp, 16
   367 0000022B B500                                    mov     ch, 0
   368 0000022D C3                                      retn
   369                                  
   370                                  .odd:
   371 0000022E 0FB62E                                  movzx   ebp, byte [esi]
   372 00000231 46                                      inc     esi
   373 00000232 C1E510                                  shl     ebp, 16
   374 00000235 668B2E                                  mov     bp, [esi]
   375 00000238 83C602                                  add     esi, 2
   376 0000023B 66C1CD08                                ror     bp, 8
   377 0000023F C1E508                                  shl     ebp, 8
   378 00000242 B508                                    mov     ch, 8
   379 00000244 C3                                      retn
   380                                  
   381                                  ; =============== S U B R O U T I N E =======================================
   382                                  
   383                                  
   384                                  mp3_get_bits:
   385 00000245 89E8                                    mov     eax, ebp
   386 00000247 D3E5                                    shl     ebp, cl
   387 00000249 D3C0                                    rol     eax, cl
   388 0000024B 31E8                                    xor     eax, ebp
   389 0000024D 28CD                                    sub     ch, cl
   390 0000024F 7801                                    js      short mp3_collect_more
   391 00000251 C3                                      retn
   392                                  
   393                                  mp3_collect_more:
   394 00000252 88E9                                    mov     cl, ch
   395 00000254 80C510                                  add     ch, 10h
   396 00000257 D3C5                                    rol     ebp, cl
   397 00000259 668B2E                                  mov     bp, [esi]
   398 0000025C 83C602                                  add     esi, 2
   399 0000025F 66C1CD08                                ror     bp, 8
   400 00000263 D3CD                                    ror     ebp, cl
   401 00000265 C3                                      retn
   402                                  
   403                                  ; =============== S U B R O U T I N E =======================================
   404                                  
   405                                  
   406                                  mp3_uncollect_bits:
   407 00000266 83EE02                                  sub     esi, 2
   408 00000269 C0ED03                                  shr     ch, 3
   409 0000026C 0FB6CD                                  movzx   ecx, ch
   410 0000026F 29CE                                    sub     esi, ecx
   411 00000271 C3                                      retn
   412                                  
   413                                  ; =============== S U B R O U T I N E =======================================
   414                                  
   415                                  
   416                                  mp3_search_get_header:
   417 00000272 F605[54760000]10                        test    byte [cpuid_flags], 10h
   418 00000279 740E                                    jz      short .no_rdtsc_supported
   419 0000027B 0F31                                    rdtsc
   420 0000027D 2905[64760000]                          sub     [ttt], eax
   421 00000283 1915[68760000]                          sbb     [ttt+4], edx
   422                                  
   423                                  .no_rdtsc_supported:
   424 00000289 C705[B4F40000]0000-                     mov	dword [mp3_extra_bytes], 0
   424 00000291 0000               
   425                                  
   426                                  .retry_header:
   427 00000293 833D[B0F40000]04                        cmp	dword [mp3_src_remain], 4
   428 0000029A 0F82B5010000                            jb      .fail_no_header
   429 000002A0 803EFF                                  cmp     byte [esi], 0FFh
   430 000002A3 7516                                    jnz     short .bad_header
   431 000002A5 8A4601                                  mov     al, [esi+1]
   432 000002A8 24E6                                    and     al, 0E6h
   433 000002AA 3CE2                                    cmp     al, 0E2h
   434 000002AC 750D                                    jnz     short .bad_header
   435 000002AE 8A4602                                  mov     al, [esi+2]
   436 000002B1 3CF0                                    cmp     al, 0F0h
   437 000002B3 7306                                    jnb     short .bad_header
   438 000002B5 240C                                    and     al, 0Ch
   439 000002B7 3C0C                                    cmp     al, 0Ch
   440 000002B9 7519                                    jnz     short .good_header
   441                                  
   442                                  .bad_header:
   443 000002BB 46                                      inc	esi
   444 000002BC FF0D[B0F40000]                          dec	dword [mp3_src_remain]
   445 000002C2 FF05[B4F40000]                          inc	dword [mp3_extra_bytes]
   446 000002C8 C705[A09D0000]-                         mov	dword [main_data_pool_wr_ptr], main_data_pool_start
   446 000002CE [A08D0000]         
   447 000002D2 EBBF                                    jmp	short .retry_header
   448                                  
   449                                  .good_header:
   450 000002D4 8B06                                    mov	eax, [esi]
   451 000002D6 E833FFFFFF                              call	bswap_eax
   452 000002DB A3[B09D0000]                            mov	[mp3_hdr_32bit_header], eax
   453 000002E0 C705[F09D0000]0000-                     mov	dword [mp3_hdr_flag_lsf], 0
   453 000002E8 0000               
   454 000002EA C705[B89D0000]0000-                     mov	dword [mp3_hdr_flag_mpeg25], 0
   454 000002F2 0000               
   455 000002F4 C705[C0F40000]0200-                     mov	dword [mp3_nb_granules], 2
   455 000002FC 0000               
   456 000002FE A900000800                              test	eax, 80000h
   457 00000303 7525                                    jnz	short .lsf_this
   458 00000305 C705[F09D0000]0100-                     mov	dword [mp3_hdr_flag_lsf], 1
   458 0000030D 0000               
   459 0000030F C705[C0F40000]0100-                     mov	dword [mp3_nb_granules], 1
   459 00000317 0000               
   460 00000319 A900001000                              test	eax, 100000h
   461 0000031E 750A                                    jnz	short .lsf_this
   462 00000320 C705[B89D0000]0100-                     mov	dword [mp3_hdr_flag_mpeg25], 1
   462 00000328 0000               
   463                                  
   464                                  .lsf_this:
   465 0000032A C1E80A                                  shr     eax, 10
   466 0000032D 83E003                                  and     eax, 3
   467 00000330 8B0D[F09D0000]                          mov     ecx, [mp3_hdr_flag_lsf]
   468 00000336 030D[B89D0000]                          add     ecx, [mp3_hdr_flag_mpeg25]
   469 0000033C 0FB79400[6C780000]                      movzx   edx, word [mp3_freq_tab+eax*2]
   470 00000344 D3EA                                    shr     edx, cl
   471 00000346 8D0C49                                  lea     ecx, [ecx+ecx*2]
   472 00000349 01C8                                    add     eax, ecx
   473 0000034B A3[C49D0000]                            mov     [mp3_hdr_sample_rate_index], eax
   474 00000350 8915[C09D0000]                          mov     [mp3_sample_rate], edx
   475                                  
   476 00000356 8A0D[4F760000]                          mov     cl, [option_rate_shift]
   477 0000035C D3EA                                    shr     edx, cl
   478                                  
   479 0000035E 8915[D49D0000]                          mov     [mp3_output_sample_rate], edx
   480 00000364 A1[B09D0000]                            mov     eax, [mp3_hdr_32bit_header]
   481 00000369 C1E810                                  shr     eax, 10h
   482 0000036C F7D0                                    not     eax
   483 0000036E 83E001                                  and     eax, 1
   484 00000371 A3[B49D0000]                            mov     [mp3_hdr_flag_crc], eax
   485 00000376 A1[B09D0000]                            mov     eax, [mp3_hdr_32bit_header]
   486 0000037B C1E809                                  shr     eax, 9
   487 0000037E 83E001                                  and     eax, 1
   488 00000381 A3[BC9D0000]                            mov     [mp3_hdr_flag_padding], eax
   489 00000386 A1[B09D0000]                            mov     eax, [mp3_hdr_32bit_header]
   490 0000038B C1E80C                                  shr     eax, 12
   491 0000038E 83E00F                                  and     eax, 0Fh
   492 00000391 7512                                    jnz     short .not_free_format
   493 00000393 E85F5D0000                              call    mp3_detect_free_format_block_size
   494 00000398 0F821DFFFFFF                            jb      .bad_header
   495 0000039E A1[00F40000]                            mov     eax, [mp3_free_format_frame_size]
   496 000003A3 EB34                                    jmp     short .this_frame_size_plus_padding
   497                                  
   498                                  .not_free_format:
   499 000003A5 8B15[F09D0000]                          mov     edx, [mp3_hdr_flag_lsf]
   500 000003AB C1E204                                  shl     edx, 4
   501 000003AE 01D0                                    add     eax, edx
   502 000003B0 0FB78400[2C780000]                      movzx   eax, word [mp3_bitrate_tab+eax*2] ; kbit/s
   503 000003B8 69C0E8030000                            imul    eax, 1000       ; bit/s
   504 000003BE A3[C89D0000]                            mov     [mp3_bit_rate], eax
   505 000003C3 69C090000000                            imul    eax, 144        ; 144=90h=8*18
   506 000003C9 31D2                                    xor     edx, edx
   507 000003CB F735[C09D0000]                          div     dword [mp3_sample_rate]
   508 000003D1 8B0D[F09D0000]                          mov     ecx, [mp3_hdr_flag_lsf]
   509 000003D7 D3E8                                    shr     eax, cl
   510                                  
   511                                  .this_frame_size_plus_padding:
   512 000003D9 0305[BC9D0000]                          add     eax, [mp3_hdr_flag_padding]
   513 000003DF A3[A89D0000]                            mov     [mp3_src_frame_size], eax
   514 000003E4 01F0                                    add     eax, esi
   515 000003E6 A3[AC9D0000]                            mov     [mp3_src_frame_end], eax
   516 000003EB A1[B09D0000]                            mov     eax, [mp3_hdr_32bit_header]
   517 000003F0 C1E806                                  shr     eax, 6
   518 000003F3 83E003                                  and     eax, 3
   519 000003F6 A3[E89D0000]                            mov     [mp3_hdr_mode_val], eax
   520 000003FB BA01000000                              mov     edx, 1
   521                                  
   522 00000400 3C03                    		cmp     al, 3
   523 00000402 7401                                    jz      short .this_channels
   524                                  
   525                                                  ;mov    edx, 2
   526                                  		; 10/01/2025
   527 00000404 42                      		inc	edx
   528                                  .this_channels:
   529 00000405 8915[CC9D0000]                          mov	[mp3_src_num_channels], edx
   530 0000040B 803D[4D760000]00                        cmp	byte [option_mono], 0
   531 00000412 7405                                    jz	short .allow_stereo
   532 00000414 BA01000000                              mov	edx, 1
   533                                  .allow_stereo:
   534 00000419 8915[D09D0000]                          mov     [mp3_output_num_channels], edx
   535 0000041F 0FAF15[D89D0000]                        imul    edx, [mp3_bytes_per_sample]
   536 00000426 8915[9CF40000]                          mov     [mp3_samples_dst_step], edx
   537 0000042C A1[B09D0000]                            mov     eax, [mp3_hdr_32bit_header]
   538 00000431 C1E804                                  shr     eax, 4
   539 00000434 83E003                                  and     eax, 3
   540 00000437 A3[EC9D0000]                            mov     [mp3_hdr_mode_ext], eax
   541 0000043C F605[54760000]10                        test    byte [cpuid_flags], 10h
   542 00000443 740E                                    jz      short .no_rdtsc_supported@
   543 00000445 0F31                                    rdtsc
   544 00000447 0105[64760000]                          add     [ttt], eax
   545 0000044D 1115[68760000]                          adc     [ttt+4], edx
   546                                  
   547                                  .no_rdtsc_supported@:
   548 00000453 F8                                      clc
   549 00000454 C3                                      retn
   550                                  
   551                                  .fail_no_header:
   552 00000455 F605[54760000]10                        test    byte [cpuid_flags], 10h
   553 0000045C 740E                                    jz      short .no_rdtsc_supported@@
   554 0000045E 0F31                                    rdtsc
   555 00000460 0105[64760000]                          add     [ttt], eax
   556 00000466 1115[68760000]                          adc     [ttt+4], edx
   557                                  
   558                                  .no_rdtsc_supported@@:
   559 0000046C C705[A89D0000]0000-                     mov     dword [mp3_src_frame_size], 0
   559 00000474 0000               
   560 00000476 F9                                      stc
   561 00000477 C3                                      retn
   562                                  
   563                                  
   564                                  ; =============== S U B R O U T I N E =======================================
   565                                  
   566                                  
   567                                  mp3_bitstream_read_header_extra:
   568 00000478 F605[54760000]10                        test    byte [cpuid_flags], 10h
   569 0000047F 740E                                    jz      short .no_rdtsc_supported
   570 00000481 0F31                                    rdtsc
   571 00000483 2905[7C760000]                          sub     [rdtsc_read_header_extra], eax
   572 00000489 1915[80760000]                          sbb     [rdtsc_read_header_extra+4], edx
   573                                  
   574                                  .no_rdtsc_supported:
   575 0000048F 833D[B49D0000]00                        cmp     dword [mp3_hdr_flag_crc], 0
   576 00000496 7422                                    jz      short .without_crc
   577 00000498 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 16
   578 0000049A C1E510                                  shl     ebp, 10h
   579 0000049D C1C010                                  rol     eax, 10h
   580 000004A0 31E8                                    xor     eax, ebp
   581 000004A2 80ED10                                  sub     ch, 10h
   582 000004A5 7913                                    jns     short .without_crc
   583 000004A7 88E9                                    mov     cl, ch          ; mp3mac_collect_more
   584 000004A9 80C510                                  add     ch, 10h
   585 000004AC D3C5                                    rol     ebp, cl
   586 000004AE 668B2E                                  mov     bp, [esi]
   587 000004B1 83C602                                  add     esi, 2
   588 000004B4 66C1CD08                                ror     bp, 8
   589 000004B8 D3CD                                    ror     ebp, cl
   590                                  
   591                                  .without_crc:
   592 000004BA 833D[F09D0000]00                        cmp     dword [mp3_hdr_flag_lsf], 0
   593 000004C1 745B                                    jz      short .pre_lsf_zero
   594 000004C3 C705[BCF40000]0900-                     mov     dword [mp3_num_compress_bits], 9
   594 000004CB 0000               
   595 000004CD 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 8
   596 000004CF C1E508                                  shl     ebp, 8
   597 000004D2 C1C008                                  rol     eax, 8
   598 000004D5 31E8                                    xor     eax, ebp
   599 000004D7 80ED08                                  sub     ch, 8
   600 000004DA 7913                                    jns     short .without_crc@
   601 000004DC 88E9                                    mov     cl, ch
   602 000004DE 80C510                                  add     ch, 10h
   603 000004E1 D3C5                                    rol     ebp, cl
   604 000004E3 668B2E                                  mov     bp, [esi]
   605 000004E6 83C602                                  add     esi, 2
   606 000004E9 66C1CD08                                ror     bp, 8
   607 000004ED D3CD                                    ror     ebp, cl
   608                                  
   609                                  .without_crc@:
   610 000004EF A3[B8F40000]                            mov     [mp3_main_data_begin], eax
   611 000004F4 8A0D[CC9D0000]                          mov     cl, byte [mp3_src_num_channels]
   612 000004FA 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
   613 000004FC D3E5                                    shl     ebp, cl
   614 000004FE D3C0                                    rol     eax, cl
   615 00000500 31E8                                    xor     eax, ebp
   616 00000502 28CD                                    sub     ch, cl
   617 00000504 7913                                    jns     short .without_crc@@
   618 00000506 88E9                                    mov     cl, ch
   619 00000508 80C510                                  add     ch, 10h
   620 0000050B D3C5                                    rol     ebp, cl
   621 0000050D 668B2E                                  mov     bp, [esi]
   622 00000510 83C602                                  add     esi, 2
   623 00000513 66C1CD08                                ror     bp, 8
   624 00000517 D3CD                                    ror     ebp, cl
   625                                  
   626                                  .without_crc@@:
   627 00000519 E9A1000000                              jmp     .pre_lsf_done
   628                                  
   629                                  .pre_lsf_zero:
   630 0000051E C705[BCF40000]0400-                     mov     dword [mp3_num_compress_bits], 4
   630 00000526 0000               
   631 00000528 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 9
   632 0000052A C1E509                                  shl     ebp, 9
   633 0000052D C1C009                                  rol     eax, 9
   634 00000530 31E8                                    xor     eax, ebp
   635 00000532 80ED09                                  sub     ch, 9
   636 00000535 7913                                    jns     short .without_crc@@@
   637 00000537 88E9                                    mov     cl, ch
   638 00000539 80C510                                  add     ch, 10h
   639 0000053C D3C5                                    rol     ebp, cl
   640 0000053E 668B2E                                  mov     bp, [esi]
   641 00000541 83C602                                  add     esi, 2
   642 00000544 66C1CD08                                ror     bp, 8
   643 00000548 D3CD                                    ror     ebp, cl
   644                                  
   645                                  .without_crc@@@:
   646 0000054A A3[B8F40000]                            mov     [mp3_main_data_begin], eax
   647 0000054F 8A0D[CC9D0000]                          mov     cl, byte [mp3_src_num_channels]
   648 00000555 D0E1                                    shl     cl, 1           ; 1,2 --> 2,4
   649 00000557 80F107                                  xor     cl, 7           ;     --> 5,3
   650 0000055A 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
   651 0000055C D3E5                                    shl     ebp, cl
   652 0000055E D3C0                                    rol     eax, cl
   653 00000560 31E8                                    xor     eax, ebp
   654 00000562 28CD                                    sub     ch, cl
   655 00000564 7913                                    jns     short .without_crc@@@@
   656 00000566 88E9                                    mov     cl, ch
   657 00000568 80C510                                  add     ch, 10h
   658 0000056B D3C5                                    rol     ebp, cl
   659 0000056D 668B2E                                  mov     bp, [esi]
   660 00000570 83C602                                  add     esi, 2
   661 00000573 66C1CD08                                ror     bp, 8
   662 00000577 D3CD                                    ror     ebp, cl
   663                                  
   664                                  .without_crc@@@@:
   665 00000579 8B15[CC9D0000]                          mov     edx, [mp3_src_num_channels]
   666 0000057F BB[C4F40000]                            mov     ebx, mp3_granules
   667                                  
   668                                  .pre_channel_lop:
   669 00000584 C7432800000000                          mov     dword [ebx+40], 0 ; [ebx+$mp3gr_scfsi]
   670 0000058B 81C3A0090000                            add     ebx, 2464       ; $mp3gr_entrysiz
   671 00000591 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 4
   672 00000593 C1E504                                  shl     ebp, 4
   673 00000596 C1C004                                  rol     eax, 4
   674 00000599 31E8                                    xor     eax, ebp
   675 0000059B 80ED04                                  sub     ch, 4
   676 0000059E 7913                                    jns     short .without_crc@@@@@
   677 000005A0 88E9                                    mov     cl, ch
   678 000005A2 80C510                                  add     ch, 10h
   679 000005A5 D3C5                                    rol     ebp, cl
   680 000005A7 668B2E                                  mov     bp, [esi]
   681 000005AA 83C602                                  add     esi, 2
   682 000005AD 66C1CD08                                ror     bp, 8
   683 000005B1 D3CD                                    ror     ebp, cl
   684                                  
   685                                  .without_crc@@@@@:
   686 000005B3 894328                                  mov     [ebx+28h], eax  ; [ebx+$mp3gr_scfsi]
   687 000005B6 81C3A0090000                            add     ebx, 2464       ; $mp3gr_entrysiz
   688 000005BC 4A                                      dec     edx
   689 000005BD 75C5                                    jnz     short .pre_channel_lop
   690                                  
   691                                  .pre_lsf_done:
   692 000005BF A1[C0F40000]                            mov     eax, [mp3_nb_granules]
   693 000005C4 6BC012                                  imul    eax, 12h
   694 000005C7 A3[E49D0000]                            mov     [mp3_nb_frames], eax
   695 000005CC A1[E49D0000]                            mov     eax, [mp3_nb_frames]
   696 000005D1 0FAF05[D09D0000]                        imul    eax, [mp3_output_num_channels]
   697 000005D8 0FAF05[D89D0000]                        imul    eax, [mp3_bytes_per_sample]
   698 000005DF C1E005                                  shl     eax, 5
   699 000005E2 8A0D[4F760000]                          mov     cl, [option_rate_shift]
   700 000005E8 D3E8                                    shr     eax, cl
   701 000005EA A3[98F40000]                            mov     [mp3_samples_output_size], eax
   702 000005EF F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_read_header_extra
   703 000005F6 740E                                    jz      short .no_rdtsc_supported@
   704 000005F8 0F31                                    rdtsc
   705 000005FA 0105[7C760000]                          add     [rdtsc_read_header_extra], eax
   706 00000600 1115[80760000]                          adc     [rdtsc_read_header_extra+4], edx
   707                                  
   708                                  .no_rdtsc_supported@:
   709 00000606 C3                                      retn
   710                                  
   711                                  
   712                                  ; =============== S U B R O U T I N E =======================================
   713                                  
   714                                  
   715                                  mp3_bitstream_read_granules:
   716 00000607 F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_read_granule
   717 0000060E 740E                                    jz      short .no_rdtsc_supported
   718 00000610 0F31                                    rdtsc
   719 00000612 2905[94760000]                          sub     [rdtsc_read_granule], eax
   720 00000618 1915[98760000]                          sbb     [rdtsc_read_granule+4], edx
   721                                  
   722                                  .no_rdtsc_supported:
   723 0000061E 8925[B81F0500]                          mov	[_@@saved_sp], esp
   724 00000624 C705[BC1F0500]0000-                     mov	dword [mp3_main_data_siz], 0
   724 0000062C 0000               
   725 0000062E C705[A4F40000]0000-                     mov	dword [mp3_curr_granule], 0
   725 00000636 0000               
   726 00000638 BB[C4F40000]                            mov	ebx, mp3_granules
   727                                  
   728                                  .hdr_granule_lop:
   729 0000063D 53                                      push    ebx
   730 0000063E C705[A0F40000]0000-                     mov     dword [mp3_curr_channel], 0
   730 00000646 0000               
   731                                  
   732                                  .hdr_channel_lop:
   733 00000648 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 12
   734 0000064A C1E50C                                  shl     ebp, 12
   735 0000064D C1C00C                                  rol     eax, 12
   736 00000650 31E8                                    xor     eax, ebp
   737 00000652 80ED0C                                  sub     ch, 12
   738 00000655 7913                                    jns     short .without_crc
   739 00000657 88E9                                    mov     cl, ch
   740 00000659 80C510                                  add     ch, 16
   741 0000065C D3C5                                    rol     ebp, cl
   742 0000065E 668B2E                                  mov     bp, [esi]
   743 00000661 83C602                                  add     esi, 2
   744 00000664 66C1CD08                                ror     bp, 8
   745 00000668 D3CD                                    ror     ebp, cl
   746                                  
   747                                  .without_crc:
   748 0000066A 8B15[BC1F0500]                          mov     edx, [mp3_main_data_siz]
   749 00000670 8903                                    mov     [ebx], eax
   750 00000672 895304                                  mov     [ebx+4], edx
   751 00000675 01D0                                    add     eax, edx
   752 00000677 894308                                  mov     [ebx+8], eax
   753 0000067A A3[BC1F0500]                            mov     [mp3_main_data_siz], eax
   754 0000067F 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 9
   755 00000681 C1E509                                  shl     ebp, 9
   756 00000684 C1C009                                  rol     eax, 9
   757 00000687 31E8                                    xor     eax, ebp
   758 00000689 80ED09                                  sub     ch, 9
   759 0000068C 7913                                    jns     short .without_crc@
   760 0000068E 88E9                                    mov     cl, ch
   761 00000690 80C510                                  add     ch, 10h
   762 00000693 D3C5                                    rol     ebp, cl
   763 00000695 668B2E                                  mov     bp, [esi]
   764 00000698 83C602                                  add     esi, 2
   765 0000069B 66C1CD08                                ror     bp, 8
   766 0000069F D3CD                                    ror     ebp, cl
   767                                  
   768                                  .without_crc@:
   769 000006A1 89430C                                  mov     [ebx+12], eax   ; [ebx+$mp3gr_big_values]
   770 000006A4 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 8
   771 000006A6 C1E508                                  shl     ebp, 8
   772 000006A9 C1C008                                  rol     eax, 8
   773 000006AC 31E8                                    xor     eax, ebp
   774 000006AE 80ED08                                  sub     ch, 8
   775 000006B1 7913                                    jns     short .without_crc@@
   776 000006B3 88E9                                    mov     cl, ch
   777 000006B5 80C510                                  add     ch, 10h
   778 000006B8 D3C5                                    rol     ebp, cl
   779 000006BA 668B2E                                  mov     bp, [esi]
   780 000006BD 83C602                                  add     esi, 2
   781 000006C0 66C1CD08                                ror     bp, 8
   782 000006C4 D3CD                                    ror     ebp, cl
   783                                  
   784                                  .without_crc@@:
   785 000006C6 05BE000000                              add	eax, 190        ; 400-210
   786 000006CB 833D[E89D0000]01                        cmp	dword [mp3_hdr_mode_val], 1
   787 000006D2 750F                                    jnz	short .not_ms_stereo
   788 000006D4 F705[EC9D0000]0200-                     test	dword [mp3_hdr_mode_ext], 2
   788 000006DC 0000               
   789 000006DE 7403                                    jz	short .not_ms_stereo
   790 000006E0 83E802                                  sub	eax, 2
   791                                  
   792                                  .not_ms_stereo:
   793 000006E3 894310                                  mov     [ebx+16], eax   ; [ebx+$mp3gr_global_gain]
   794 000006E6 8A0D[BCF40000]                          mov     cl, byte [mp3_num_compress_bits]
   795 000006EC 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
   796 000006EE D3E5                                    shl     ebp, cl
   797 000006F0 D3C0                                    rol     eax, cl
   798 000006F2 31E8                                    xor     eax, ebp
   799 000006F4 28CD                                    sub     ch, cl
   800 000006F6 7913                                    jns     short .without_crc@@@
   801 000006F8 88E9                                    mov     cl, ch
   802 000006FA 80C510                                  add     ch, 10h
   803 000006FD D3C5                                    rol     ebp, cl
   804 000006FF 668B2E                                  mov     bp, [esi]
   805 00000702 83C602                                  add     esi, 2
   806 00000705 66C1CD08                                ror     bp, 8
   807 00000709 D3CD                                    ror     ebp, cl
   808                                  
   809                                  .without_crc@@@:
   810 0000070B 894314                                  mov     [ebx+20], eax   ; [ebx+$mp3gr_scalefac_compress]
   811 0000070E FECD                                    dec     ch              ; mp3mac_get_bit_to_cy
   812                                                                          ; dec mp3_colNN
   813 00000710 D1E5                                    shl     ebp, 1          ; shl mp3_col32,1 ; cy=data
   814 00000712 0F834F010000                            jnb     .no_blocksplit
   815 00000718 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 2
   816 0000071A C1E502                                  shl     ebp, 2
   817 0000071D C1C002                                  rol     eax, 2
   818 00000720 31E8                                    xor     eax, ebp
   819 00000722 80ED02                                  sub     ch, 2
   820 00000725 7913                                    jns     short .without_crc@@@@
   821 00000727 88E9                                    mov     cl, ch
   822 00000729 80C510                                  add     ch, 10h
   823 0000072C D3C5                                    rol     ebp, cl
   824 0000072E 668B2E                                  mov     bp, [esi]
   825 00000731 83C602                                  add     esi, 2
   826 00000734 66C1CD08                                ror     bp, 8
   827 00000738 D3CD                                    ror     ebp, cl
   828                                  
   829                                  .without_crc@@@@:
   830 0000073A 83F800                                  cmp     eax, 0
   831 0000073D 0F847B030000                            jz      .error
   832 00000743 89432C                                  mov     [ebx+44], eax   ; [ebx+$mp3gr_block_type]
   833 00000746 83F802                                  cmp     eax, 2
   834 00000749 B812000000                              mov     eax, 18         ; 36/2 ; region_size (default)
   835 0000074E 741C                                    jz      short .this_region_size
   836 00000750 833D[C49D0000]02                        cmp     dword [mp3_hdr_sample_rate_index], 2
   837 00000757 7613                                    jbe     short .this_region_size
   838 00000759 B81B000000                              mov     eax, 27         ; 54/2 ; region_size
   839 0000075E 833D[C49D0000]08                        cmp     dword [mp3_hdr_sample_rate_index], 8
   840 00000765 7505                                    jnz     short .this_region_size
   841 00000767 B836000000                              mov     eax, 54         ; 108/2 ; region_size (for rate=8)
   842                                  
   843                                  .this_region_size:
   844 0000076C 894350                                  mov     [ebx+80], eax   ; [ebx+$mp3gr_region_size+0*4]
   845 0000076F C7435420010000                          mov     dword [ebx+84], 288 ; [ebx+$mp3gr_region_size+1*4],576/2
   846 00000776 C7435820010000                          mov     dword [ebx+88], 288 ; [ebx+$mp3gr_region_size+2*4],576/2
   847 0000077D 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 1
   848 0000077F D1E5                                    shl     ebp, 1
   849 00000781 D1C0                                    rol     eax, 1
   850 00000783 31E8                                    xor     eax, ebp
   851 00000785 80ED01                                  sub     ch, 1
   852 00000788 7913                                    jns     short .without_crc@@@@@
   853 0000078A 88E9                                    mov     cl, ch
   854 0000078C 80C510                                  add     ch, 10h
   855 0000078F D3C5                                    rol     ebp, cl
   856 00000791 668B2E                                  mov     bp, [esi]
   857 00000794 83C602                                  add     esi, 2
   858 00000797 66C1CD08                                ror     bp, 8
   859 0000079B D3CD                                    ror     ebp, cl
   860                                  
   861                                  .without_crc@@@@@:
   862 0000079D 894330                                  mov     [ebx+48], eax   ; [ebx+$mp3gr_switch_point]
   863 000007A0 89E8                                    mov     eax, ebp        ; IRP nn,0,1 ; only 0..1 for blocksplit
   864 000007A2 C1E505                                  shl     ebp, 5          ; mp3mac_get_n_bits 5
   865 000007A5 C1C005                                  rol     eax, 5
   866 000007A8 31E8                                    xor     eax, ebp
   867 000007AA 80ED05                                  sub     ch, 5
   868 000007AD 7913                                    jns     short .without_crc@@@@@@
   869 000007AF 88E9                                    mov     cl, ch
   870 000007B1 80C510                                  add     ch, 10h
   871 000007B4 D3C5                                    rol     ebp, cl
   872 000007B6 668B2E                                  mov     bp, [esi]
   873 000007B9 83C602                                  add     esi, 2
   874 000007BC 66C1CD08                                ror     bp, 8
   875 000007C0 D3CD                                    ror     ebp, cl
   876                                  
   877                                  .without_crc@@@@@@:
   878 000007C2 894338                                  mov     [ebx+56], eax   ; [ebx+$mp3gr_table_select+nn*4] ; nn=0
   879 000007C5 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 5
   880 000007C7 C1E505                                  shl     ebp, 5
   881 000007CA C1C005                                  rol     eax, 5
   882 000007CD 31E8                                    xor     eax, ebp
   883 000007CF 80ED05                                  sub     ch, 5
   884 000007D2 7913                                    jns     short .without_crc_@@@@
   885 000007D4 88E9                                    mov     cl, ch
   886 000007D6 80C510                                  add     ch, 10h
   887 000007D9 D3C5                                    rol     ebp, cl
   888 000007DB 668B2E                                  mov     bp, [esi]
   889 000007DE 83C602                                  add     esi, 2
   890 000007E1 66C1CD08                                ror     bp, 8
   891 000007E5 D3CD                                    ror     ebp, cl
   892                                  
   893                                  .without_crc_@@@@:
   894 000007E7 89433C                                  mov     [ebx+60], eax   ; [ebx+$mp3gr_table_select+nn*4] ; nn=1
   895 000007EA 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 5
   896 000007EC C1E503                                  shl     ebp, 3          ; IRP nn,0,1,2
   897 000007EF C1C003                                  rol     eax, 3          ; mp3mac_get_n_bits 3
   898 000007F2 31E8                                    xor     eax, ebp
   899 000007F4 80ED03                                  sub     ch, 3
   900 000007F7 7913                                    jns     short .without_crc_@@@@@
   901 000007F9 88E9                                    mov     cl, ch
   902 000007FB 80C510                                  add     ch, 10h
   903 000007FE D3C5                                    rol     ebp, cl
   904 00000800 668B2E                                  mov     bp, [esi]
   905 00000803 83C602                                  add     esi, 2
   906 00000806 66C1CD08                                ror     bp, 8
   907 0000080A D3CD                                    ror     ebp, cl
   908                                  
   909                                  .without_crc_@@@@@:
   910 0000080C C1E003                                  shl     eax, 3
   911 0000080F 894344                                  mov     [ebx+68], eax   ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=0
   912 00000812 89E8                                    mov     eax, ebp
   913 00000814 C1E503                                  shl     ebp, 3
   914 00000817 C1C003                                  rol     eax, 3
   915 0000081A 31E8                                    xor     eax, ebp
   916 0000081C 80ED03                                  sub     ch, 3
   917 0000081F 7913                                    jns     short .without_crc_@@@@@@
   918 00000821 88E9                                    mov     cl, ch
   919 00000823 80C510                                  add     ch, 10h
   920 00000826 D3C5                                    rol     ebp, cl
   921 00000828 668B2E                                  mov     bp, [esi]
   922 0000082B 83C602                                  add     esi, 2
   923 0000082E 66C1CD08                                ror     bp, 8
   924 00000832 D3CD                                    ror     ebp, cl
   925                                  
   926                                  .without_crc_@@@@@@:
   927 00000834 C1E003                                  shl     eax, 3
   928 00000837 894348                                  mov     [ebx+72], eax   ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=1
   929 0000083A 89E8                                    mov     eax, ebp
   930 0000083C C1E503                                  shl     ebp, 3
   931 0000083F C1C003                                  rol     eax, 3
   932 00000842 31E8                                    xor     eax, ebp
   933 00000844 80ED03                                  sub     ch, 3
   934 00000847 7913                                    jns     short .without_crc_@@@@@@@
   935 00000849 88E9                                    mov     cl, ch
   936 0000084B 80C510                                  add     ch, 10h
   937 0000084E D3C5                                    rol     ebp, cl
   938 00000850 668B2E                                  mov     bp, [esi]
   939 00000853 83C602                                  add     esi, 2
   940 00000856 66C1CD08                                ror     bp, 8
   941 0000085A D3CD                                    ror     ebp, cl
   942                                  
   943                                  .without_crc_@@@@@@@:
   944 0000085C C1E003                                  shl     eax, 3
   945 0000085F 89434C                                  mov     [ebx+76], eax   ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=2
   946 00000862 E910010000                              jmp     .blocksplit_done
   947                                  
   948                                  .no_blocksplit:                       
   949 00000867 C7432C00000000                          mov     dword [ebx+44], 0 ; [ebx+$mp3gr_block_type]
   950 0000086E C7433000000000                          mov     dword [ebx+48], 0 ; [ebx+$mp3gr_switch_point]
   951 00000875 89E8                                    mov     eax, ebp        ; IRP nn,0,1,2 ; range 0..2 when non-blocksplit
   952 00000877 C1E505                                  shl     ebp, 5          ; mp3mac_get_n_bits 5
   953 0000087A C1C005                                  rol     eax, 5
   954 0000087D 31E8                                    xor     eax, ebp
   955 0000087F 80ED05                                  sub     ch, 5
   956 00000882 7913                                    jns     short .@_without_crc
   957 00000884 88E9                                    mov     cl, ch
   958 00000886 80C510                                  add     ch, 10h
   959 00000889 D3C5                                    rol     ebp, cl
   960 0000088B 668B2E                                  mov     bp, [esi]
   961 0000088E 83C602                                  add     esi, 2
   962 00000891 66C1CD08                                ror     bp, 8
   963 00000895 D3CD                                    ror     ebp, cl
   964                                  
   965                                  .@_without_crc:
   966 00000897 894338                                  mov     [ebx+56], eax   ; [ebx+$mp3gr_table_select+nn*4] ; nn=0
   967 0000089A 89E8                                    mov     eax, ebp
   968 0000089C C1E505                                  shl     ebp, 5
   969 0000089F C1C005                                  rol     eax, 5
   970 000008A2 31E8                                    xor     eax, ebp
   971 000008A4 80ED05                                  sub     ch, 5
   972 000008A7 7913                                    jns     short .@_without_crc_@
   973 000008A9 88E9                                    mov     cl, ch
   974 000008AB 80C510                                  add     ch, 10h
   975 000008AE D3C5                                    rol     ebp, cl
   976 000008B0 668B2E                                  mov     bp, [esi]
   977 000008B3 83C602                                  add     esi, 2
   978 000008B6 66C1CD08                                ror     bp, 8
   979 000008BA D3CD                                    ror     ebp, cl
   980                                  
   981                                  .@_without_crc_@:
   982 000008BC 89433C                                  mov     [ebx+60], eax   ; [ebx+$mp3gr_table_select+nn*4] ; nn=1
   983 000008BF 89E8                                    mov     eax, ebp
   984 000008C1 C1E505                                  shl     ebp, 5
   985 000008C4 C1C005                                  rol     eax, 5
   986 000008C7 31E8                                    xor     eax, ebp
   987 000008C9 80ED05                                  sub     ch, 5
   988 000008CC 7913                                    jns     short .@_without_crc_@@
   989 000008CE 88E9                                    mov     cl, ch
   990 000008D0 80C510                                  add     ch, 10h
   991 000008D3 D3C5                                    rol     ebp, cl
   992 000008D5 668B2E                                  mov     bp, [esi]
   993 000008D8 83C602                                  add     esi, 2
   994 000008DB 66C1CD08                                ror     bp, 8
   995 000008DF D3CD                                    ror     ebp, cl
   996                                  
   997                                  .@_without_crc_@@:
   998 000008E1 894340                                  mov     [ebx+64], eax   ; [ebx+$mp3gr_table_select+nn*4] ; nn=2
   999 000008E4 89E8                                    mov     eax, ebp
  1000 000008E6 C1E504                                  shl     ebp, 4
  1001 000008E9 C1C004                                  rol     eax, 4
  1002 000008EC 31E8                                    xor     eax, ebp
  1003 000008EE 80ED04                                  sub     ch, 4
  1004 000008F1 7913                                    jns     short .@_without_crc@@@
  1005 000008F3 88E9                                    mov     cl, ch
  1006 000008F5 80C510                                  add     ch, 10h
  1007 000008F8 D3C5                                    rol     ebp, cl
  1008 000008FA 668B2E                                  mov     bp, [esi]
  1009 000008FD 83C602                                  add     esi, 2
  1010 00000900 66C1CD08                                ror     bp, 8
  1011 00000904 D3CD                                    ror     ebp, cl
  1012                                  
  1013                                  .@_without_crc@@@:
  1014 00000906 40                                      inc     eax
  1015 00000907 A3[B01F0500]                            mov     [_@@region_address0], eax
  1016 0000090C 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 3
  1017 0000090E C1E503                                  shl     ebp, 3
  1018 00000911 C1C003                                  rol     eax, 3
  1019 00000914 31E8                                    xor     eax, ebp
  1020 00000916 80ED03                                  sub     ch, 3
  1021 00000919 7913                                    jns     short .@_without_crc@@@@
  1022 0000091B 88E9                                    mov     cl, ch
  1023 0000091D 80C510                                  add     ch, 10h
  1024 00000920 D3C5                                    rol     ebp, cl
  1025 00000922 668B2E                                  mov     bp, [esi]
  1026 00000925 83C602                                  add     esi, 2
  1027 00000928 66C1CD08                                ror     bp, 8
  1028 0000092C D3CD                                    ror     ebp, cl
  1029                                  
  1030                                  .@_without_crc@@@@:
  1031 0000092E 40                                      inc     eax
  1032 0000092F 0305[B01F0500]                          add     eax, [_@@region_address0]
  1033 00000935 A3[B41F0500]                            mov     [_@@region_address1], eax
  1034 0000093A A1[C49D0000]                            mov     eax, [mp3_hdr_sample_rate_index]
  1035 0000093F C1E005                                  shl     eax, 5
  1036 00000942 0305[B01F0500]                          add     eax, [_@@region_address0]
  1037 00000948 0FB78400[C4D70100]                      movzx   eax, word [mp3_band_index_long+eax*2]
  1038 00000950 D1E8                                    shr     eax, 1
  1039 00000952 894350                                  mov     [ebx+80], eax   ; [ebx+$mp3gr_region_size+0*4]
  1040 00000955 A1[C49D0000]                            mov     eax, [mp3_hdr_sample_rate_index]
  1041 0000095A C1E005                                  shl     eax, 5
  1042 0000095D 0305[B41F0500]                          add     eax, [_@@region_address1]
  1043 00000963 0FB78400[C4D70100]                      movzx   eax, word [mp3_band_index_long+eax*2]
  1044 0000096B D1E8                                    shr     eax, 1
  1045 0000096D 894354                                  mov     [ebx+84], eax   ; [ebx+$mp3gr_region_size+1*4]
  1046 00000970 C7435820010000                          mov     dword [ebx+88], 288 ; [ebx+$mp3gr_region_size+2*4],576/2
  1047                                  
  1048                                  .blocksplit_done:
  1049 00000977 8D7B50                                  lea     edi, [ebx+80]   ; [ebx+$mp3gr_region_size+0]
  1050 0000097A 31D2                                    xor     edx, edx
  1051 0000097C B103                                    mov     cl, 3
  1052                                  
  1053                                  .trunc_region_size_lop:
  1054 0000097E 8B07                                    mov     eax, [edi]
  1055 00000980 3B430C                                  cmp     eax, [ebx+12]   ; [ebx+$mp3gr_big_values]
  1056 00000983 7603                                    jbe     short .trunc_region_size_this
  1057 00000985 8B430C                                  mov     eax, [ebx+12]
  1058                                  
  1059                                  .trunc_region_size_this:
  1060 00000988 29D0                                    sub     eax, edx
  1061 0000098A 8907                                    mov     [edi], eax
  1062 0000098C 01C2                                    add     edx, eax
  1063 0000098E 83C704                                  add     edi, 4
  1064 00000991 FEC9                                    dec     cl
  1065 00000993 75E9                                    jnz     short .trunc_region_size_lop
  1066 00000995 C7431C0D000000                          mov     dword [ebx+28], 13 ; [ebx+$mp3gr_short_start]
  1067 0000099C C7432016000000                          mov     dword [ebx+32], 22 ; [ebx+$mp3gr_long_end]
  1068 000009A3 837B2C02                                cmp     dword [ebx+44], 2 ; [ebx+$mp3gr_block_type]
  1069 000009A7 7549                                    jnz     short .these_band_indices
  1070 000009A9 C7431C00000000                          mov     dword [ebx+28], 0 ; [ebx+$mp3gr_short_start]
  1071 000009B0 C7432000000000                          mov     dword [ebx+32], 0 ; [ebx+$mp3gr_long_end]
  1072 000009B7 837B3000                                cmp     dword [ebx+48], 0 ; [ebx+$mp3gr_switch_point]
  1073 000009BB 7435                                    jz      short .these_band_indices
  1074 000009BD C7431C02000000                          mov     dword [ebx+28], 2 ; [ebx+$mp3gr_short_start]
  1075 000009C4 C7432004000000                          mov     dword [ebx+32], 4 ; [ebx+$mp3gr_long_end]
  1076 000009CB 833D[C49D0000]08                        cmp     dword [mp3_hdr_sample_rate_index], 8
  1077 000009D2 741E                                    jz      short .these_band_indices
  1078 000009D4 833D[C49D0000]02                        cmp     dword [mp3_hdr_sample_rate_index], 2
  1079 000009DB C7431C03000000                          mov     dword [ebx+28], 3 ; [ebx+$mp3gr_short_start]
  1080 000009E2 C7432008000000                          mov     dword [ebx+32], 8 ; [ebx+$mp3gr_long_end]
  1081 000009E9 7607                                    jbe     short .these_band_indices
  1082 000009EB C7432006000000                          mov     dword [ebx+32], 6 ; [ebx+$mp3gr_long_end]
  1083                                  
  1084                                  .these_band_indices:
  1085 000009F2 31C0                                    xor     eax, eax
  1086 000009F4 833D[F09D0000]00                        cmp     dword [mp3_hdr_flag_lsf], 0
  1087 000009FB 7520                                    jnz     short .no_preflag
  1088 000009FD 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 1
  1089 000009FF D1E5                                    shl     ebp, 1
  1090 00000A01 D1C0                                    rol     eax, 1
  1091 00000A03 31E8                                    xor     eax, ebp
  1092 00000A05 80ED01                                  sub     ch, 1
  1093 00000A08 7913                                    jns     short .no_preflag
  1094 00000A0A 88E9                                    mov     cl, ch
  1095 00000A0C 80C510                                  add     ch, 10h
  1096 00000A0F D3C5                                    rol     ebp, cl
  1097 00000A11 668B2E                                  mov     bp, [esi]
  1098 00000A14 83C602                                  add     esi, 2
  1099 00000A17 66C1CD08                                ror     bp, 8
  1100 00000A1B D3CD                                    ror     ebp, cl
  1101                                  
  1102                                  .no_preflag:
  1103 00000A1D 894318                                  mov     [ebx+24], eax   ; [ebx+$mp3gr_preflag]
  1104 00000A20 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 1
  1105 00000A22 D1E5                                    shl     ebp, 1
  1106 00000A24 D1C0                                    rol     eax, 1
  1107 00000A26 31E8                                    xor     eax, ebp
  1108 00000A28 80ED01                                  sub     ch, 1
  1109 00000A2B 7913                                    jns     short .@_without_crc@@@@@
  1110 00000A2D 88E9                                    mov     cl, ch
  1111 00000A2F 80C510                                  add     ch, 10h
  1112 00000A32 D3C5                                    rol     ebp, cl
  1113 00000A34 668B2E                                  mov     bp, [esi]
  1114 00000A37 83C602                                  add     esi, 2
  1115 00000A3A 66C1CD08                                ror     bp, 8
  1116 00000A3E D3CD                                    ror     ebp, cl
  1117                                  
  1118                                  .@_without_crc@@@@@:
  1119 00000A40 40                                      inc     eax
  1120 00000A41 894334                                  mov     [ebx+52], eax   ; [ebx+$mp3gr_scalefac_scale]
  1121 00000A44 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 1
  1122 00000A46 D1E5                                    shl     ebp, 1
  1123 00000A48 D1C0                                    rol     eax, 1
  1124 00000A4A 31E8                                    xor     eax, ebp
  1125 00000A4C 80ED01                                  sub     ch, 1
  1126 00000A4F 7913                                    jns     short .@_without_crc@@@@@@
  1127 00000A51 88E9                                    mov     cl, ch
  1128 00000A53 80C510                                  add     ch, 10h
  1129 00000A56 D3C5                                    rol     ebp, cl
  1130 00000A58 668B2E                                  mov     bp, [esi]
  1131 00000A5B 83C602                                  add     esi, 2
  1132 00000A5E 66C1CD08                                ror     bp, 8
  1133 00000A62 D3CD                                    ror     ebp, cl
  1134                                  
  1135                                  .@_without_crc@@@@@@: 
  1136 00000A64 83C010                                  add     eax, 10h        ; table 10h..11h (quad_vlc)
  1137 00000A67 894324                                  mov     [ebx+36], eax   ; [ebx+$mp3gr_count1table_select]
  1138 00000A6A 81C340130000                            add     ebx, 4928       ; $mp3gr_entrysiz*2
  1139 00000A70 FF05[A0F40000]                          inc     dword [mp3_curr_channel]
  1140 00000A76 A1[A0F40000]                            mov     eax, [mp3_curr_channel]
  1141 00000A7B 3B05[CC9D0000]                          cmp     eax, [mp3_src_num_channels]
  1142 00000A81 0F82C1FBFFFF                            jb      .hdr_channel_lop
  1143 00000A87 5B                                      pop     ebx
  1144 00000A88 81C3A0090000                            add     ebx, 2464       ; $mp3gr_entrysiz
  1145 00000A8E FF05[A4F40000]                          inc     dword [mp3_curr_granule]
  1146 00000A94 A1[A4F40000]                            mov     eax, [mp3_curr_granule]
  1147 00000A99 3B05[C0F40000]                          cmp     eax, [mp3_nb_granules]
  1148 00000A9F 0F8298FBFFFF                            jb      .hdr_granule_lop
  1149 00000AA5 F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_read_granule
  1150 00000AAC 740E                                    jz      short .no_rdtsc_supported@
  1151 00000AAE 0F31                                    rdtsc
  1152 00000AB0 0105[94760000]                          add     [rdtsc_read_granule], eax
  1153 00000AB6 1115[98760000]                          adc     [rdtsc_read_granule+4], edx
  1154                                  
  1155                                  .no_rdtsc_supported@:
  1156 00000ABC F8                                      clc
  1157 00000ABD C3                                      retn
  1158                                  
  1159                                  .error:
  1160 00000ABE F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_read_granule
  1161 00000AC5 740E                                    jz      short .no_rdtsc_supported@@
  1162 00000AC7 0F31                                    rdtsc
  1163 00000AC9 0105[94760000]                          add     [rdtsc_read_granule], eax
  1164 00000ACF 1115[98760000]                          adc     [rdtsc_read_granule+4], edx
  1165                                  
  1166                                  .no_rdtsc_supported@@:
  1167 00000AD5 8B25[B81F0500]                          mov     esp, [_@@saved_sp]
  1168 00000ADB F9                                      stc
  1169 00000ADC C3                                      retn
  1170                                  
  1171                                  
  1172                                  ; =============== S U B R O U T I N E =======================================
  1173                                  
  1174                                  
  1175                                  mp3_bitstream_append_to_main_data_pool:
  1176 00000ADD F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_append_main
  1177 00000AE4 740E                                    jz      short .no_rdtsc_supported
  1178 00000AE6 0F31                                    rdtsc
  1179 00000AE8 2905[AC760000]                          sub     [rdtsc_append_main], eax
  1180 00000AEE 1915[B0760000]                          sbb     [rdtsc_append_main+4], edx
  1181                                  
  1182                                  .no_rdtsc_supported:
  1183 00000AF4 8B0D[AC9D0000]                          mov     ecx, [mp3_src_frame_end]
  1184 00000AFA 29F1                                    sub     ecx, esi
  1185 00000AFC 0F8266020000                            jb      fatalunexpected
  1186 00000B02 8B3D[A09D0000]                          mov     edi, [main_data_pool_wr_ptr]
  1187 00000B08 8D040F                                  lea     eax, [edi+ecx]
  1188 00000B0B 3D[A09D0000]                            cmp     eax, main_data_pool_wr_ptr
  1189 00000B10 7616                                    jbe     short .pool_inrange
  1190 00000B12 51                                      push    ecx
  1191 00000B13 56                                      push    esi
  1192 00000B14 8DB700FEFFFF                            lea     esi, [edi-200h]
  1193 00000B1A BF[A08D0000]                            mov     edi, main_data_pool_start
  1194 00000B1F B980000000                              mov     ecx, 128
  1195 00000B24 F3A5                                    rep movsd
  1196 00000B26 5E                                      pop     esi
  1197 00000B27 59                                      pop     ecx
  1198                                  
  1199                                  .pool_inrange:
  1200 00000B28 89F8                                    mov     eax, edi
  1201 00000B2A 2B05[B8F40000]                          sub     eax, [mp3_main_data_begin]
  1202 00000B30 F3A4                                    rep movsb
  1203 00000B32 893D[A09D0000]                          mov     [main_data_pool_wr_ptr], edi
  1204 00000B38 3D[A08D0000]                            cmp     eax, main_data_pool_start
  1205 00000B3D 7828                                    js      short .below_pool_start
  1206 00000B3F A3[ACF40000]                            mov     [mp3_bitstream_start], eax
  1207                                                  ; 22/10/2024
  1208                                  		;mov    eax, 0
  1209 00000B44 8B35[ACF40000]                          mov     esi, [mp3_bitstream_start] ; mp3mac_bitstream_set_position
  1210                                                  ;mov    cl, al
  1211                                                  ;shr    eax, 3
  1212                                                  ;and    cl, 7
  1213                                                  ;add    esi, eax
  1214 00000B4A E8C7F6FFFF                              call    mp3_recollect_bits
  1215                                                  ;mov    eax, ebp        ; mp3mac_get_n_bits cl
  1216                                                  ;shl    ebp, cl
  1217                                                  ;rol    eax, cl
  1218                                                  ;xor    eax, ebp
  1219                                                  ;sub    ch, cl
  1220                                                  ;jns    short .cont
  1221                                                  ;mov    cl, ch          ; mp3mac_collect_more
  1222                                                  ;add    ch, 10h
  1223                                                  ;rol    ebp, cl
  1224                                                  ;mov    bp, [esi]
  1225                                                  ;add    esi, 2
  1226                                                  ;ror    bp, 8
  1227                                                  ;ror    ebp, cl
  1228                                  
  1229                                  .cont:
  1230 00000B4F F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_append_main
  1231 00000B56 740E                                    jz      short .no_rdtsc_supported@
  1232 00000B58 0F31                                    rdtsc
  1233 00000B5A 0105[AC760000]                          add     [rdtsc_append_main], eax
  1234 00000B60 1115[B0760000]                          adc     [rdtsc_append_main+4], edx
  1235                                  
  1236                                  .no_rdtsc_supported@:
  1237 00000B66 C3                                      retn
  1238                                  
  1239                                  .below_pool_start:
  1240 00000B67 C705[98F40000]0000-                     mov     dword [mp3_samples_output_size], 0
  1240 00000B6F 0000               
  1241 00000B71 EBDC                                    jmp     short .cont
  1242                                  
  1243                                  
  1244                                  ; =============== S U B R O U T I N E =======================================
  1245                                  
  1246                                  
  1247                                  mp3_bitstream_read_scalefacs:
  1248 00000B73 F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_read_scalefac
  1249 00000B7A 740E                                    jz      short .no_rdtsc_supported
  1250 00000B7C 0F31                                    rdtsc
  1251 00000B7E 2905[C4760000]                          sub     [rdtsc_read_scalefac], eax
  1252 00000B84 1915[C8760000]                          sbb     [rdtsc_read_scalefac+4], edx
  1253                                  
  1254                                  .no_rdtsc_supported:
  1255 00000B8A 8D7B70                                  lea     edi, [ebx+112]  ; [ebx+$mp3gr_scale_factors]
  1256 00000B8D 833D[F09D0000]00                        cmp     dword [mp3_hdr_flag_lsf], 0
  1257 00000B94 0F850D010000                            jnz     .body_lsf_nonzero
  1258 00000B9A 8B4314                                  mov     eax, [ebx+20]   ; [ebx+$mp3gr_scalefac_compress]
  1259 00000B9D 668B9400[A47A0000]                      mov     dx, [mp3_slen_table+eax*2] ; slen[0,1]
  1260 00000BA5 837B2C02                                cmp     dword [ebx+44], 2 ; [ebx+$mp3gr_block_type]
  1261 00000BA9 757F                                    jnz     short .body_lsf_zero_non_type2
  1262 00000BAB 53                                      push    ebx
  1263 00000BAC B012                                    mov     al, 18
  1264 00000BAE 2A4330                                  sub     al, [ebx+48]    ; [ebx+$mp3gr_switch_point]
  1265 00000BB1 88C3                                    mov     bl, al          ; @@get_bl_scalefacs_with_dl_bits 0
  1266 00000BB3 80FA00                                  cmp     dl, 0
  1267 00000BB6 7428                                    jz      short .quickfill
  1268                                  
  1269                                  .scalefac_get_lop:
  1270 00000BB8 88D1                                    mov     cl, dl          ; LSB of edx, slen[i]
  1271 00000BBA 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
  1272 00000BBC D3E5                                    shl     ebp, cl
  1273 00000BBE D3C0                                    rol     eax, cl
  1274 00000BC0 31E8                                    xor     eax, ebp
  1275 00000BC2 28CD                                    sub     ch, cl
  1276 00000BC4 7913                                    jns     short .cont@
  1277 00000BC6 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1278 00000BC8 80C510                                  add     ch, 10h
  1279 00000BCB D3C5                                    rol     ebp, cl
  1280 00000BCD 668B2E                                  mov     bp, [esi]
  1281 00000BD0 83C602                                  add     esi, 2
  1282 00000BD3 66C1CD08                                ror     bp, 8
  1283 00000BD7 D3CD                                    ror     ebp, cl
  1284                                  
  1285                                  .cont@:
  1286 00000BD9 AA                                      stosb
  1287 00000BDA FECB                                    dec     bl
  1288 00000BDC 75DA                                    jnz     short .scalefac_get_lop
  1289 00000BDE EB09                                    jmp     short .skip_quickfill
  1290                                  
  1291                                  .quickfill:
  1292 00000BE0 51                                      push    ecx
  1293 00000BE1 0FB6CB                                  movzx   ecx, bl
  1294 00000BE4 B000                                    mov     al, 0           ; NO_INTENSITY_FLAG
  1295 00000BE6 F3AA                                    rep stosb
  1296 00000BE8 59                                      pop     ecx
  1297                                  
  1298                                  .skip_quickfill:
  1299 00000BE9 C1EA08                                  shr     edx, 8
  1300 00000BEC B312                                    mov     bl, 18
  1301 00000BEE 80FA00                                  cmp     dl, 0           ; @@get_bl_scalefacs_with_dl_bits 0
  1302 00000BF1 7428                                    jz      short .quickfill@
  1303                                  
  1304                                  .scalefac_get_lop@:
  1305 00000BF3 88D1                                    mov     cl, dl
  1306 00000BF5 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
  1307 00000BF7 D3E5                                    shl     ebp, cl
  1308 00000BF9 D3C0                                    rol     eax, cl
  1309 00000BFB 31E8                                    xor     eax, ebp
  1310 00000BFD 28CD                                    sub     ch, cl
  1311 00000BFF 7913                                    jns     short .cont@@
  1312 00000C01 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1313 00000C03 80C510                                  add     ch, 10h
  1314 00000C06 D3C5                                    rol     ebp, cl
  1315 00000C08 668B2E                                  mov     bp, [esi]
  1316 00000C0B 83C602                                  add     esi, 2
  1317 00000C0E 66C1CD08                                ror     bp, 8
  1318 00000C12 D3CD                                    ror     ebp, cl
  1319                                  
  1320                                  .cont@@:
  1321 00000C14 AA                                      stosb
  1322 00000C15 FECB                                    dec     bl
  1323 00000C17 75DA                                    jnz     short .scalefac_get_lop@
  1324 00000C19 EB09                                    jmp     short .skip_quickfill@
  1325                                  
  1326                                  .quickfill@:
  1327 00000C1B 51                                      push    ecx
  1328 00000C1C 0FB6CB                                  movzx   ecx, bl
  1329 00000C1F B000                                    mov     al, 0
  1330 00000C21 F3AA                                    rep stosb
  1331 00000C23 59                                      pop     ecx
  1332                                  
  1333                                  .skip_quickfill@:
  1334 00000C24 5B                                      pop     ebx
  1335 00000C25 E914010000                              jmp     .body_lsf_zeropad
  1336                                  
  1337                                  .body_lsf_zero_non_type2:
  1338 00000C2A 53                                      push    ebx
  1339 00000C2B C1CA08                                  ror     edx, 8
  1340 00000C2E 88D6                                    mov     dh, dl          ; slen[0,1,2,3] = slen[0,0,1,1]
  1341 00000C30 C1C210                                  rol     edx, 16
  1342 00000C33 88F2                                    mov     dl, dh
  1343 00000C35 8A4328                                  mov     al, [ebx+40]    ; [ebx+$mp3gr_scfsi]
  1344 00000C38 C0E004                                  shl     al, 4           ; move to upper 4bit
  1345 00000C3B A2[C01F0500]                            mov     byte [_@@scfsi], al
  1346 00000C40 BB06050505                              mov     ebx, 5050506h   ; num[0..3]
  1347                                  
  1348                                  .body_lsf_zero_non_type2_lop:
  1349 00000C45 D025[C01F0500]                          shl     byte [_@@scfsi], 1
  1350 00000C4B 7238                                    jb      short .body_lsf_zero_non_type2_copy
  1351 00000C4D 80FA00                                  cmp     dl, 0           ; @@get_bl_scalefacs_with_dl_bits 0
  1352 00000C50 7428                                    jz      short .quickfill@@
  1353                                  
  1354                                  .scalefac_get_lop@@:
  1355 00000C52 88D1                                    mov     cl, dl
  1356 00000C54 89E8                                    mov     eax, ebp
  1357 00000C56 D3E5                                    shl     ebp, cl
  1358 00000C58 D3C0                                    rol     eax, cl
  1359 00000C5A 31E8                                    xor     eax, ebp
  1360 00000C5C 28CD                                    sub     ch, cl
  1361 00000C5E 7913                                    jns     short .cont@@@
  1362 00000C60 88E9                                    mov     cl, ch
  1363 00000C62 80C510                                  add     ch, 10h
  1364 00000C65 D3C5                                    rol     ebp, cl
  1365 00000C67 668B2E                                  mov     bp, [esi]
  1366 00000C6A 83C602                                  add     esi, 2
  1367 00000C6D 66C1CD08                                ror     bp, 8
  1368 00000C71 D3CD                                    ror     ebp, cl
  1369                                  
  1370                                  .cont@@@:
  1371 00000C73 AA                                      stosb
  1372 00000C74 FECB                                    dec     bl
  1373 00000C76 75DA                                    jnz     short .scalefac_get_lop@@
  1374 00000C78 EB09                                    jmp     short .skip_quickfill@@
  1375                                  
  1376                                  .quickfill@@:
  1377 00000C7A 51                                      push    ecx
  1378 00000C7B 0FB6CB                                  movzx   ecx, bl
  1379 00000C7E B000                                    mov     al, 0
  1380 00000C80 F3AA                                    rep stosb
  1381 00000C82 59                                      pop     ecx
  1382                                  
  1383                                  .skip_quickfill@@:
  1384 00000C83 EB11                                    jmp     short .body_lsf_zero_non_type2_next
  1385                                  
  1386                                  .body_lsf_zero_non_type2_copy:
  1387 00000C85 51                                      push    ecx
  1388 00000C86 89F0                                    mov     eax, esi
  1389 00000C88 0FB6CB                                  movzx   ecx, bl         ; copy
  1390 00000C8B 8DB760F6FFFF                            lea     esi, [edi-2464] ; [edi-$mp3gr_entrysiz] ; src=granule[0] ; from
  1391 00000C91 F3A4                                    rep movsb               ; prev
  1392 00000C93 89C6                                    mov     esi, eax
  1393 00000C95 59                                      pop     ecx
  1394                                  
  1395                                  .body_lsf_zero_non_type2_next:
  1396 00000C96 C1EA08                                  shr     edx, 8          ; dl=next slen
  1397 00000C99 C1EB08                                  shr     ebx, 8          ; bl=next numfacs
  1398 00000C9C 75A7                                    jnz     short .body_lsf_zero_non_type2_lop
  1399 00000C9E 5B                                      pop     ebx
  1400 00000C9F B000                                    mov     al, 0
  1401 00000CA1 AA                                      stosb
  1402 00000CA2 E9A9000000                              jmp     .body_lsf_done
  1403                                  
  1404                                  .body_lsf_nonzero:
  1405 00000CA7 8B5314                                  mov     edx, [ebx+14h]  ; [ebx+$mp3gr_scalefac_compress]
  1406 00000CAA F705[EC9D0000]0100-                     test    dword [mp3_hdr_mode_ext], 1 ; MODE_EXT_I_STEREO
  1406 00000CB2 0000               
  1407 00000CB4 740F                                    jz      short .normal_scalefac
  1408 00000CB6 833D[A0F40000]00                        cmp     dword [mp3_curr_channel], 0
  1409 00000CBD 7406                                    jz      short .normal_scalefac
  1410 00000CBF 81C200020000                            add     edx, 512        ; for 2nd channel of intensity_stereo
  1411                                  
  1412                                  .normal_scalefac:
  1413 00000CC5 8A04D5[B5FF0400]                        mov     al, [(mp3_lsf_sf_expand_exploded_table+5)+edx*8]
  1414 00000CCC 084318                                  or      [ebx+24], al    ; [ebx+$mp3gr_preflag]
  1415 00000CCF 53                                      push    ebx
  1416 00000CD0 0FB604D5[B4FF0400]                      movzx   eax, byte [(mp3_lsf_sf_expand_exploded_table+4)+edx*8]
  1417 00000CD8 837B2C02                                cmp     dword [ebx+44], 2 ;  [ebx+$mp3gr_block_type]
  1418 00000CDC 7507                                    jnz     short .this_tindex1
  1419 00000CDE 8B5B30                                  mov     ebx, [ebx+48]   ; [ebx+$mp3gr_switch_point]
  1420 00000CE1 8D449804                                lea     eax, [eax+ebx*4+4]
  1421                                  
  1422                                  .this_tindex1:
  1423 00000CE5 8B98[C47A0000]                          mov     ebx, [mp3_lsf_nsf_table+eax]
  1424 00000CEB 8B14D5[B0FF0400]                        mov     edx, dword [mp3_lsf_sf_expand_exploded_table+edx*8]
  1425                                  
  1426                                  .scalefax_outer_lop:
  1427 00000CF2 80FA00                                  cmp     dl, 0           ; @@get_bl_scalefacs_with_dl_bits 1
  1428 00000CF5 7435                                    jz      short .@quickfil
  1429                                  
  1430                                  .@scalefac_get_lop:
  1431 00000CF7 88D1                                    mov     cl, dl
  1432 00000CF9 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
  1433 00000CFB D3E5                                    shl     ebp, cl
  1434 00000CFD D3C0                                    rol     eax, cl
  1435 00000CFF 31E8                                    xor     eax, ebp
  1436 00000D01 28CD                                    sub     ch, cl
  1437 00000D03 7913                                    jns     short .cont
  1438 00000D05 88E9                                    mov     cl, ch
  1439 00000D07 80C510                                  add     ch, 10h
  1440 00000D0A D3C5                                    rol     ebp, cl
  1441 00000D0C 668B2E                                  mov     bp, [esi]
  1442 00000D0F 83C602                                  add     esi, 2
  1443 00000D12 66C1CD08                                ror     bp, 8
  1444 00000D16 D3CD                                    ror     ebp, cl
  1445                                  
  1446                                  .cont:
  1447 00000D18 88D1                                    mov     cl, dl          ; numbits
  1448 00000D1A 88C4                                    mov     ah, al
  1449 00000D1C FEC4                                    inc     ah              ; val+1
  1450 00000D1E D2EC                                    shr     ah, cl          ; bit0=is.max.value
  1451 00000D20 C0E407                                  shl     ah, 7           ; bit7=is.max.value
  1452 00000D23 08E0                                    or      al, ah          ; apply NO_INTENSITY_FLAG
  1453 00000D25 AA                                      stosb
  1454 00000D26 FECB                                    dec     bl
  1455 00000D28 75CD                                    jnz     short .@scalefac_get_lop
  1456 00000D2A EB09                                    jmp     short .@skip_quickfill
  1457                                  
  1458                                  .@quickfil:
  1459 00000D2C 51                                      push    ecx
  1460 00000D2D 0FB6CB                                  movzx   ecx, bl
  1461 00000D30 B080                                    mov     al, 80h
  1462 00000D32 F3AA                                    rep stosb
  1463 00000D34 59                                      pop     ecx
  1464                                  
  1465                                  .@skip_quickfill:
  1466 00000D35 C1EA08                                  shr     edx, 8
  1467 00000D38 C1EB08                                  shr     ebx, 8
  1468 00000D3B 75B5                                    jnz     short .scalefax_outer_lop
  1469 00000D3D 5B                                      pop     ebx
  1470                                  
  1471                                  .body_lsf_zeropad:
  1472 00000D3E 89CA                                    mov     edx, ecx
  1473 00000D40 8D8B98000000                            lea     ecx, [ebx+152]  ; [ebx+$mp3gr_scale_factors+40]
  1474 00000D46 29F9                                    sub     ecx, edi
  1475                                                  ;jb     short fatal_scalefactors
  1476                                  		; 21/10/2024
  1477 00000D48 721E                    		jb	short fatalunexpected
  1478 00000D4A B000                                    mov     al, 0
  1479 00000D4C F3AA                                    rep stosb
  1480 00000D4E 89D1                                    mov     ecx, edx
  1481                                  
  1482                                  .body_lsf_done:
  1483 00000D50 F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_read_scalefac
  1484 00000D57 740E                                    jz      short .no_rdtsc_supported@@@
  1485 00000D59 0F31                                    rdtsc
  1486 00000D5B 0105[C4760000]                          add     [rdtsc_read_scalefac], eax
  1487 00000D61 1115[C8760000]                          adc     [rdtsc_read_scalefac+4], edx
  1488                                  
  1489                                  .no_rdtsc_supported@@@:
  1490 00000D67 C3                                      retn
  1491                                  
  1492                                  		; 21/10/2024
  1493                                  ;fatal_scalefactors:
  1494                                                  ;jmp    fatalunexpected
  1495                                  
  1496                                  ; ---------------------------------------------------------------------------
  1497                                  
  1498                                  		; 21/10/2024
  1499                                  fatalunexpected:                       
  1500 00000D68 F735[30850000]                          div	dword [zero]
  1501                                  hang:
  1502 00000D6E EBFE                                    jmp     short hang
  1503                                  
  1504                                  
  1505                                  ; =============== S U B R O U T I N E =======================================
  1506                                  
  1507                                  
  1508                                  mp3_get_exponents_from_scale_factors:
  1509 00000D70 F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_xlat_scalefac
  1510 00000D77 740E                                    jz      short .no_rdtsc_supported
  1511 00000D79 0F31                                    rdtsc
  1512 00000D7B 2905[DC760000]                          sub     [rdtsc_xlat_scalefac], eax
  1513 00000D81 1915[E0760000]                          sbb     [rdtsc_xlat_scalefac+4], edx
  1514                                  
  1515                                  .no_rdtsc_supported:
  1516 00000D87 51                                      push    ecx             ; mp3mac_push_bitstream
  1517 00000D88 55                                      push    ebp
  1518 00000D89 56                                      push    esi
  1519 00000D8A C705[D01F0500]0000-                     mov     dword [_@@rle_point], 0
  1519 00000D92 0000               
  1520 00000D94 8A4B34                                  mov     cl, [ebx+52]    ; [ebx+$mp3gr_scalefac_scale]
  1521 00000D97 BF[441B0100]                            mov     edi, mp3_exponents
  1522 00000D9C 31D2                                    xor     edx, edx
  1523 00000D9E 3B5320                                  cmp     edx, [ebx+32]   ; [ebx+$mp3gr_long_end]
  1524 00000DA1 7345                                    jnb     short .long_done
  1525 00000DA3 A1[C49D0000]                            mov     eax, [mp3_hdr_sample_rate_index]
  1526 00000DA8 6BC016                                  imul    eax, 22
  1527 00000DAB 8DA8[D4800000]                          lea     ebp, [mp3_band_size_long+eax]
  1528 00000DB1 8B4318                                  mov     eax, [ebx+24]   ; [ebx+$mp3gr_preflag]
  1529 00000DB4 6BC016                                  imul    eax, 22
  1530 00000DB7 8DB0[24820000]                          lea     esi, [mp3_pretab+eax]
  1531                                  
  1532                                  .long_lop:
  1533 00000DBD 0FB6441370                              movzx   eax, byte [ebx+edx+112] ; [ebx+$mp3gr_scale_factors+edx]
  1534 00000DC2 247F                                    and     al, 7Fh         ; strip NO_INTENSITY_FLAG
  1535 00000DC4 020416                                  add     al, [esi+edx]
  1536 00000DC7 D3E0                                    shl     eax, cl
  1537 00000DC9 F7D8                                    neg     eax
  1538 00000DCB 034310                                  add     eax, [ebx+16]   ; [ebx+$mp3gr_global_gain]
  1539 00000DCE C1E010                                  shl     eax, 16
  1540 00000DD1 8A441500                                mov     al, [ebp+edx+0]
  1541 00000DD5 0305[D01F0500]                          add     eax, [_@@rle_point]
  1542 00000DDB 66A3[D01F0500]                          mov     word [_@@rle_point], ax
  1543 00000DE1 AB                                      stosd
  1544 00000DE2 42                                      inc     edx
  1545 00000DE3 3B5320                                  cmp     edx, [ebx+32]   ; [ebx+$mp3gr_long_end]
  1546 00000DE6 72D5                                    jb      short .long_lop
  1547                                  
  1548                                  .long_done:
  1549 00000DE8 8B531C                                  mov     edx, [ebx+28]   ; [ebx+$mp3gr_short_start]
  1550 00000DEB 83FA0D                                  cmp     edx, 13
  1551 00000DEE 0F83AA000000                            jnb     .skip_shorts
  1552 00000DF4 A1[C49D0000]                            mov     eax, [mp3_hdr_sample_rate_index]
  1553 00000DF9 6BC00D                                  imul    eax, 13
  1554 00000DFC 8DA8[A4810000]                          lea     ebp, [mp3_band_size_short+eax]
  1555 00000E02 8B7320                                  mov     esi, [ebx+32]   ; [ebx+$mp3gr_long_end]
  1556 00000E05 8B4310                                  mov     eax, [ebx+16]   ; [ebx+$mp3gr_global_gain]
  1557                                                                          ; IRP nn,0,1,2
  1558 00000E08 2B4344                                  sub     eax, [ebx+68]   ; [ebx+$mp3gr_subblock_gain+nn*4]
  1559 00000E0B A3[C41F0500]                            mov     [_@@gains], eax ; [@@gains+nn*4]
  1560 00000E10 8B4310                                  mov     eax, [ebx+16]
  1561 00000E13 2B4348                                  sub     eax, [ebx+72]
  1562 00000E16 A3[C81F0500]                            mov     [_@@gains+4], eax ; [@@gains+nn*4]
  1563 00000E1B 8B4310                                  mov     eax, [ebx+16]
  1564 00000E1E 2B434C                                  sub     eax, [ebx+76]   ; [ebx+$mp3gr_subblock_gain+nn*4]
  1565 00000E21 A3[CC1F0500]                            mov     [_@@gains+8], eax ; [@@gains+nn*4]
  1566                                  
  1567                                  .short_lop:
  1568 00000E26 0FB6443370                              movzx   eax, byte [ebx+esi+112] ; [ebx+$mp3gr_scale_factors+esi]
  1569                                                                          ; IRP nn,0,1,2
  1570 00000E2B 247F                                    and     al, 7Fh         ; strip NO_INTENSITY_FLAG
  1571 00000E2D 46                                      inc     esi
  1572 00000E2E D3E0                                    shl     eax, cl
  1573 00000E30 F7D8                                    neg     eax
  1574 00000E32 0305[C41F0500]                          add     eax, [_@@gains] ; [@@gains+nn*4] ; nn=0
  1575 00000E38 C1E010                                  shl     eax, 16
  1576 00000E3B 8A441500                                mov     al, [ebp+edx+0] ; bstab[edx]
  1577 00000E3F 0305[D01F0500]                          add     eax, [_@@rle_point]
  1578 00000E45 66A3[D01F0500]                          mov     word [_@@rle_point], ax
  1579 00000E4B AB                                      stosd                   ; msw=val, lsw=point
  1580 00000E4C 0FB6443370                              movzx   eax, byte [ebx+esi+112] ; [ebx+$mp3gr_scalefac_scale]
  1581 00000E51 247F                                    and     al, 7Fh
  1582 00000E53 46                                      inc     esi
  1583 00000E54 D3E0                                    shl     eax, cl
  1584 00000E56 F7D8                                    neg     eax
  1585 00000E58 0305[C81F0500]                          add     eax, [_@@gains+4] ; [@@gains+nn*4] ; nn = 1
  1586 00000E5E C1E010                                  shl     eax, 16
  1587 00000E61 8A441500                                mov     al, [ebp+edx+0]
  1588 00000E65 0305[D01F0500]                          add     eax, [_@@rle_point]
  1589 00000E6B 66A3[D01F0500]                          mov     word [_@@rle_point], ax
  1590 00000E71 AB                                      stosd
  1591 00000E72 0FB6443370                              movzx   eax, byte [ebx+esi+70h]
  1592 00000E77 247F                                    and     al, 7Fh
  1593 00000E79 46                                      inc     esi
  1594 00000E7A D3E0                                    shl     eax, cl
  1595 00000E7C F7D8                                    neg     eax
  1596 00000E7E 0305[CC1F0500]                          add     eax, [_@@gains+8] ; [@@gains+nn*4] ; nn=2
  1597 00000E84 C1E010                                  shl     eax, 10h
  1598 00000E87 8A441500                                mov     al, [ebp+edx+0]
  1599 00000E8B 0305[D01F0500]                          add     eax, [_@@rle_point]
  1600 00000E91 66A3[D01F0500]                          mov     word [_@@rle_point], ax
  1601 00000E97 AB                                      stosd
  1602 00000E98 42                                      inc     edx
  1603 00000E99 83FA0D                                  cmp     edx, 13
  1604 00000E9C 7288                                    jb      short .short_lop
  1605                                  
  1606                                  .skip_shorts:
  1607 00000E9E 5E                                      pop     esi             ; mp3mac_pop_bitstream
  1608 00000E9F 5D                                      pop     ebp
  1609 00000EA0 59                                      pop     ecx
  1610 00000EA1 F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_xlat_scalefac
  1611 00000EA8 740E                                    jz      short .no_rdtsc_supported@
  1612 00000EAA 0F31                                    rdtsc
  1613 00000EAC 0105[DC760000]                          add     [rdtsc_xlat_scalefac], eax
  1614 00000EB2 1115[E0760000]                          adc     [rdtsc_xlat_scalefac+4], edx
  1615                                  
  1616                                  .no_rdtsc_supported@:
  1617 00000EB8 C3                                      retn
  1618                                  
  1619                                  
  1620                                  ; =============== S U B R O U T I N E =======================================
  1621                                  
  1622                                  
  1623                                  mp3_huffman_decode:
  1624 00000EB9 F605[54760000]10                        test    byte [cpuid_flags], 10h ; in: ebx=granule, out: [sb_hybrid..]
  1625                                                                          ; timelog_start rdtsc_read_huffman
  1626 00000EC0 740E                                    jz      short .no_rdtsc_supported
  1627 00000EC2 0F31                                    rdtsc
  1628 00000EC4 2905[F4760000]                          sub     [rdtsc_read_huffman], eax
  1629 00000ECA 1915[F8760000]                          sbb     [rdtsc_read_huffman+4], edx
  1630                                  
  1631                                  .no_rdtsc_supported:
  1632 00000ED0 8B4308                                  mov	eax, [ebx+8]    ; [ebx+$mp3gr_part2_3_end]
  1633 00000ED3 C1E803                                  shr	eax, 3
  1634 00000ED6 0305[ACF40000]                          add	eax, [mp3_bitstream_start]
  1635 00000EDC A3[E41F0500]                            mov	[_@@coarse_end], eax
  1636 00000EE1 31FF                                    xor	edi, edi
  1637 00000EE3 C705[EC1F0500]-                         mov	dword [_@@rle_ptr], mp3_exponents
  1637 00000EE9 [441B0100]         
  1638 00000EED C705[E81F0500]0000-                     mov	dword [_@rle_point], 0
  1638 00000EF5 0000               
  1639 00000EF7 C705[D41F0500]0000-                     mov	dword [_@@III], 0  ; i=0
  1639 00000EFF 0000               
  1640                                  
  1641                                  .low_freq_lop_i:
  1642 00000F01 8B15[D41F0500]                          mov     edx, [_@@III] ; for i=0 to 2
  1643                                                                          ; low frequencies (called big_values)...
  1644 00000F07 8B449350                                mov     eax, [ebx+edx*4+80] ; [ebx+$mp3gr_region_size+edx*4]
  1645 00000F0B 83F800                                  cmp     eax, 0
  1646 00000F0E 0F84D9020000                            jz      .low_freq_next_i
  1647 00000F14 A3[D81F0500]                            mov     [_@@JJJ], eax
  1648 00000F19 8B549338                                mov     edx, [ebx+edx*4+56] ; [ebx+$mp3gr_table_select+edx*4]
  1649                                                                          ; select vlc table
  1650 00000F1D 0FB68412[94800000]                      movzx   eax, byte [mp3_huff_data+edx*2] ; get huff.table number
  1651 00000F25 83F800                                  cmp     eax, 0          ; huff.table
  1652 00000F28 7528                                    jnz     short .low_freq_nonzero
  1653 00000F2A 51                                      push    ecx
  1654 00000F2B 57                                      push    edi
  1655 00000F2C 8DBCBBA0000000                          lea     edi, [ebx+edi*4+160] ; [ebx+$mp3gr_sb_hybrid+edi*4]
  1656 00000F33 8B0D[D81F0500]                          mov     ecx, [_@@JJJ]
  1657 00000F39 D1E1                                    shl     ecx, 1
  1658 00000F3B 31C0                                    xor     eax, eax        ; when huff.table=0,
  1659                                                                          ; simply set NUM*2 entries to zero
  1660 00000F3D F3AB                                    rep stosd
  1661 00000F3F 5F                                      pop     edi
  1662 00000F40 59                                      pop     ecx
  1663 00000F41 033D[D81F0500]                          add     edi, [_@@JJJ] ; raise index accordingly (by num*2)
  1664 00000F47 033D[D81F0500]                          add     edi, [_@@JJJ]
  1665 00000F4D E99B020000                              jmp     .low_freq_next_i
  1666                                  
  1667                                  .low_freq_nonzero:
  1668 00000F52 A3[E01F0500]                            mov     [_@@vlc_table], eax ; =1..15
  1669 00000F57 83F80E                                  cmp     eax, 14         ; only table 14..15 have linbits
  1670 00000F5A 0F83FA000000                            jnb     .with_linbits  ; so table 0..13 can use faster code...
  1671                                  
  1672                                  .low_freq_lop_j_small:
  1673 00000F60 3B35[E41F0500]                          cmp     esi, [_@@coarse_end] ; loop @@JJJ times..
  1674 00000F66 0F87CF000000                            ja      .small_near_end
  1675                                  
  1676                                  .small_not_end:
  1677 00000F6C 3B3D[E81F0500]                          cmp     edi, [_@rle_point] ; @@get_runlength small
  1678 00000F72 0F839E030000                            jnb     .rle_fetch_next_small
  1679                                  
  1680                                  .rle_back_small:
  1681 00000F78 8B15[E01F0500]                          mov     edx, [_@@vlc_table] ; get huffcode
  1682                                  
  1683                                  .get_child_lop:
  1684 00000F7E 8A0C95[C61F0100]                        mov     cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode
  1685                                                                          ; in: edx=table, out: eax=data
  1686                                                                          ; bits (table size) (-7..-1)
  1687 00000F85 668B1495[C41F0100]                      mov     dx, word [huff_tree_buf+edx*4] ; code (child table)
  1688 00000F8D 89E8                                    mov     eax, ebp        ; mov eax,mp3_col32 ; peek bitstream
  1689 00000F8F D3E8                                    shr     eax, cl
  1690 00000F91 01C2                                    add     edx, eax
  1691 00000F93 8A0C95[C61F0100]                        mov     cl, [(huff_tree_buf+2)+edx*4] ; bits (of entry)
  1692 00000F9A 80F900                                  cmp     cl, 0
  1693 00000F9D 7823                                    js      short .got_child
  1694 00000F9F 0FB70495[C41F0100]                      movzx   eax, word [huff_tree_buf+edx*4] ; return data value
  1695 00000FA7 D3E5                                    shl     ebp, cl         ; shl mp3_col32,cl ; discard cl bits
  1696 00000FA9 28CD                                    sub     ch, cl          ; sub mp3_colNN,cl
  1697 00000FAB 7932                                    jns     short .got_done
  1698 00000FAD 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1699                                                                          ; mov cl,mp3_colNN ; byte ptr [mp3_numbits_collected]
  1700 00000FAF 80C510                                  add     ch, 16          ; byte ptr [mp3_numbits_collected]
  1701 00000FB2 D3C5                                    rol     ebp, cl         ; dword ptr [mp3_collected_data]
  1702 00000FB4 668B2E                                  mov     bp, [esi]
  1703 00000FB7 83C602                                  add     esi, 2
  1704 00000FBA 66C1CD08                                ror     bp, 8           ; ror mp3_col16,8 ; endianess
  1705 00000FBE D3CD                                    ror     ebp, cl         ; ror mp3_col32,cl ; dword ptr [mp3_collected_data]
  1706 00000FC0 EB1D                                    jmp     short .got_done
  1707                                  
  1708                                  .got_child:
  1709 00000FC2 C1E509                                  shl     ebp, 9          ; shl mp3_col32,CHILD_BITS
  1710                                                                          ; discard 7 bits
  1711                                                                          ; (assuming that parents are always 7bit wide)
  1712 00000FC5 80ED09                                  sub     ch, 9
  1713 00000FC8 79B4                                    jns     short .get_child_lop
  1714 00000FCA 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1715 00000FCC 80C510                                  add     ch, 10h
  1716 00000FCF D3C5                                    rol     ebp, cl
  1717 00000FD1 668B2E                                  mov     bp, [esi]
  1718 00000FD4 83C602                                  add     esi, 2
  1719 00000FD7 66C1CD08                                ror     bp, 8
  1720 00000FDB D3CD                                    ror     ebp, cl
  1721 00000FDD EB9F                                    jmp     short .get_child_lop
  1722                                  
  1723                                  .got_done:
  1724 00000FDF 50                                      push    eax
  1725 00000FE0 C1E804                                  shr     eax, 4          ; x
  1726 00000FE3 7417                                    jz      short .this_sign ; @@getexpval 0 ; @@getexpval macro has_linbits
  1727                                                                          ; eax=0 (without sign) ; when x=0
  1728 00000FE5 8B15[F41F0500]                          mov     edx, [_@@rle_val_x_40h]
  1729 00000FEB 8B8482[30630400]                        mov     eax, [mp3_expval_table+edx+eax*4]
  1730 00000FF2 FECD                                    dec     ch              ; mp3mac_get_bit_to_cy
  1731                                                                          ; ;jnc short @@this_sign
  1732                                                                          ; ;neg  eax
  1733 00000FF4 D1E5                                    shl     ebp, 1          ; dec mp3_colNN ; shl mp3_col32,1 ; cy=data
  1734 00000FF6 19D2                                    sbb     edx, edx        ; cy=0,1 --> 0,FFFFFFFF
  1735 00000FF8 31D0                                    xor     eax, edx        ; invert if cy was 1 ; get sign (negate if sign=1)
  1736 00000FFA 29D0                                    sub     eax, edx        ; add 1 if cy was 1
  1737                                  
  1738                                  .this_sign:
  1739 00000FFC 8984BBA0000000                          mov     [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0]
  1740 00001003 58                                      pop     eax
  1741 00001004 83E00F                                  and     eax, 0Fh        ; y
  1742 00001007 7417                                    jz      short .this_sign@ ; @@getexpval 0
  1743 00001009 8B15[F41F0500]                          mov     edx, [_@@rle_val_x_40h]
  1744 0000100F 8B8482[30630400]                        mov     eax, [mp3_expval_table+edx+eax*4]
  1745 00001016 FECD                                    dec     ch
  1746 00001018 D1E5                                    shl     ebp, 1
  1747 0000101A 19D2                                    sbb     edx, edx
  1748 0000101C 31D0                                    xor     eax, edx
  1749 0000101E 29D0                                    sub     eax, edx
  1750                                  
  1751                                  .this_sign@:
  1752 00001020 8984BBA4000000                          mov     [ebx+edi*4+164], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+4]
  1753 00001027 83C702                                  add     edi, 2
  1754 0000102A FF0D[D81F0500]                          dec     dword [_@@JJJ]
  1755 00001030 0F852AFFFFFF                            jnz     .low_freq_lop_j_small
  1756 00001036 E9B2010000                              jmp     .low_freq_next_i
  1757                                  
  1758                                  .small_near_end:
  1759 0000103B 89F0                                    mov     eax, esi        ; mp3mac_bitstream_get_position
  1760 0000103D 2B05[ACF40000]                          sub     eax, [mp3_bitstream_start]
  1761 00001043 0FBED5                                  movsx   edx, ch         ; mp3_colNN
  1762 00001046 F7DA                                    neg     edx
  1763 00001048 8D44C2F0                                lea     eax, [edx+eax*8-16]
  1764 0000104C 3B4308                                  cmp     eax, [ebx+8]    ; [ebx+$mp3gr_part2_3_end]
  1765 0000104F 0F8217FFFFFF                            jb      .small_not_end
  1766 00001055 E993010000                              jmp     .low_freq_next_i
  1767                                  
  1768                                  .with_linbits:
  1769 0000105A 0FB68412[95800000]                      movzx   eax, byte [(mp3_huff_data+1)+edx*2]
  1770 00001062 A3[DC1F0500]                            mov     [_@@linbits], eax
  1771                                  
  1772                                  .low_freq_lop_j:
  1773 00001067 3B35[E41F0500]                          cmp     esi, [_@@coarse_end] ; mp3mac_bitstream_get_position
  1774                                                                          ; loop @@JJJ times...
  1775 0000106D 0F8725030000                            ja      .lop_j_near_end
  1776                                  
  1777                                  .small_not_end@:
  1778 00001073 3B3D[E81F0500]                          cmp     edi, [_@rle_point] ; @@get_runlength small
  1779 00001079 0F83C5020000                            jnb     .rle_fetch_next_full
  1780                                  
  1781                                  .rle_back_full:
  1782 0000107F 8B15[E01F0500]                          mov     edx, [_@@vlc_table] ; get huffcode
  1783                                  
  1784                                  .get_child_lop@:
  1785 00001085 8A0C95[C61F0100]                        mov     cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode
  1786                                                                          ; in: edx=table, out: eax=data
  1787                                                                          ; bits (table size) (-7..-1)
  1788 0000108C 668B1495[C41F0100]                      mov     dx, word [huff_tree_buf+edx*4] ; code (child table)
  1789 00001094 89E8                                    mov     eax, ebp
  1790 00001096 D3E8                                    shr     eax, cl
  1791 00001098 01C2                                    add     edx, eax
  1792 0000109A 8A0C95[C61F0100]                        mov     cl, [(huff_tree_buf+2)+edx*4] ; bits (of entry)
  1793 000010A1 80F900                                  cmp     cl, 0
  1794 000010A4 7823                                    js      short .got_child@
  1795 000010A6 0FB70495[C41F0100]                      movzx   eax, word [huff_tree_buf+edx*4] ; return data value
  1796 000010AE D3E5                                    shl     ebp, cl         ; discard cl bits
  1797 000010B0 28CD                                    sub     ch, cl
  1798 000010B2 7932                                    jns     short .got_done@
  1799 000010B4 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1800 000010B6 80C510                                  add     ch, 10h
  1801 000010B9 D3C5                                    rol     ebp, cl
  1802 000010BB 668B2E                                  mov     bp, [esi]
  1803 000010BE 83C602                                  add     esi, 2
  1804 000010C1 66C1CD08                                ror     bp, 8
  1805 000010C5 D3CD                                    ror     ebp, cl
  1806 000010C7 EB1D                                    jmp     short .got_done@
  1807                                  
  1808                                  .got_child@:
  1809 000010C9 C1E509                                  shl     ebp, 9
  1810 000010CC 80ED09                                  sub     ch, 9
  1811 000010CF 79B4                                    jns     short .get_child_lop@
  1812 000010D1 88E9                                    mov     cl, ch
  1813 000010D3 80C510                                  add     ch, 10h
  1814 000010D6 D3C5                                    rol     ebp, cl
  1815 000010D8 668B2E                                  mov     bp, [esi]
  1816 000010DB 83C602                                  add     esi, 2
  1817 000010DE 66C1CD08                                ror     bp, 8
  1818 000010E2 D3CD                                    ror     ebp, cl
  1819 000010E4 EB9F                                    jmp     short .get_child_lop@
  1820                                  
  1821                                  .got_done@:
  1822 000010E6 50                                      push    eax
  1823 000010E7 C1E804                                  shr     eax, 4          ; x
  1824 000010EA 746F                                    jz      short .@this_sign ; @@getexpval 1
  1825 000010EC 8B15[F01F0500]                          mov     edx, [_@@rle_val]
  1826 000010F2 83F80F                                  cmp     eax, 15
  1827 000010F5 7250                                    jb      short .small    ; when x=1..14
  1828 000010F7 8A0D[DC1F0500]                          mov     cl, byte [_@@linbits] ; =0..13 ; when x=15, with linbits
  1829 000010FD 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl ; value = 0..1FFFh
  1830 000010FF D3E5                                    shl     ebp, cl         ; mp3mac_collect_more
  1831 00001101 D3C0                                    rol     eax, cl
  1832 00001103 31E8                                    xor     eax, ebp
  1833 00001105 28CD                                    sub     ch, cl
  1834 00001107 7913                                    jns     short .cont
  1835 00001109 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1836 0000110B 80C510                                  add     ch, 16
  1837 0000110E D3C5                                    rol     ebp, cl
  1838 00001110 668B2E                                  mov     bp, [esi]
  1839 00001113 83C602                                  add     esi, 2
  1840 00001116 66C1CD08                                ror     bp, 8
  1841 0000111A D3CD                                    ror     ebp, cl
  1842                                  
  1843                                  .cont:
  1844 0000111C 88D1                                    mov     cl, dl          ; exponent.lsb
  1845 0000111E 80E103                                  and     cl, 3           ; exponent.lsb
  1846 00001121 C1EA02                                  shr     edx, 2          ; exponent.msb
  1847 00001124 8D04853C000000                          lea     eax, [eax*4+60] ; (value+15)*4
  1848 0000112B 08C8                                    or      al, cl          ; exponent.lsb+(value+15)*4
  1849 0000112D 8A88[04DA0100]                          mov     cl, [mp3_table_4_3_exp+eax]
  1850 00001133 8B0485[405A0200]                        mov     eax, [mp3_table_4_3_value+eax*4]
  1851 0000113A 28D1                                    sub     cl, dl          ; sub exponent.msb
  1852 0000113C D3E8                                    shr     eax, cl
  1853 0000113E 80F91F                                  cmp     cl, 31
  1854 00001141 760E                                    jbe     short .get_sign
  1855 00001143 31C0                                    xor     eax, eax
  1856 00001145 EB0A                                    jmp     short .get_sign
  1857                                  
  1858                                  .small:
  1859 00001147 C1E206                                  shl     edx, 6          ; shl edx,4+2 ; mul16*4 ; when x<15 aka x=1..14
  1860 0000114A 8B8482[30630400]                        mov     eax, [mp3_expval_table+edx+eax*4]
  1861                                  
  1862                                  .get_sign:
  1863 00001151 FECD                                    dec     ch              ; mp3mac_get_bit_to_cy
  1864 00001153 D1E5                                    shl     ebp, 1
  1865 00001155 19D2                                    sbb     edx, edx        ; get sign (negate if sign=1)
  1866 00001157 31D0                                    xor     eax, edx
  1867 00001159 29D0                                    sub     eax, edx
  1868                                  
  1869                                  .@this_sign:
  1870 0000115B 8984BBA0000000                          mov     [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0]
  1871 00001162 58                                      pop     eax
  1872 00001163 83E00F                                  and     eax, 0Fh        ; y
  1873 00001166 746F                                    jz      short .@this_sign@ ; @@getexpval 1
  1874 00001168 8B15[F01F0500]                          mov     edx, [_@@rle_val]
  1875 0000116E 83F80F                                  cmp     eax, 0Fh
  1876 00001171 7250                                    jb      short .small@
  1877 00001173 8A0D[DC1F0500]                          mov     cl, byte [_@@linbits]
  1878 00001179 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
  1879 0000117B D3E5                                    shl     ebp, cl
  1880 0000117D D3C0                                    rol     eax, cl
  1881 0000117F 31E8                                    xor     eax, ebp
  1882 00001181 28CD                                    sub     ch, cl
  1883 00001183 7913                                    jns     short .cont@
  1884 00001185 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1885 00001187 80C510                                  add     ch, 10h
  1886 0000118A D3C5                                    rol     ebp, cl
  1887 0000118C 668B2E                                  mov     bp, [esi]
  1888 0000118F 83C602                                  add     esi, 2
  1889 00001192 66C1CD08                                ror     bp, 8
  1890 00001196 D3CD                                    ror     ebp, cl
  1891                                  
  1892                                  .cont@:
  1893 00001198 88D1                                    mov     cl, dl
  1894 0000119A 80E103                                  and     cl, 3
  1895 0000119D C1EA02                                  shr     edx, 2
  1896 000011A0 8D04853C000000                          lea     eax, [eax*4+60]
  1897 000011A7 08C8                                    or      al, cl
  1898 000011A9 8A88[04DA0100]                          mov     cl, [mp3_table_4_3_exp+eax]
  1899 000011AF 8B0485[405A0200]                        mov     eax, [mp3_table_4_3_value+eax*4]
  1900 000011B6 28D1                                    sub     cl, dl
  1901 000011B8 D3E8                                    shr     eax, cl
  1902 000011BA 80F91F                                  cmp     cl, 31
  1903 000011BD 760E                                    jbe     short .get_sign@
  1904 000011BF 31C0                                    xor     eax, eax
  1905 000011C1 EB0A                                    jmp     short .get_sign@
  1906                                  
  1907                                  .small@:
  1908 000011C3 C1E206                                  shl     edx, 6
  1909 000011C6 8B8482[30630400]                        mov     eax, [mp3_expval_table+edx+eax*4]
  1910                                  
  1911                                  .get_sign@:                           
  1912 000011CD FECD                                    dec     ch              ; dec mp3_colNN
  1913 000011CF D1E5                                    shl     ebp, 1          ; shl mp3_col32,1 ; cy=data
  1914 000011D1 19D2                                    sbb     edx, edx        ; cy=0,1 --> 0,FFFFFFFF
  1915 000011D3 31D0                                    xor     eax, edx        ; invert if cy was 1
  1916 000011D5 29D0                                    sub     eax, edx        ; add 1 if cy was 1
  1917                                  
  1918                                  .@this_sign@:
  1919 000011D7 8984BBA4000000                          mov	[ebx+edi*4+164], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+4]
  1920 000011DE 83C702                                  add	edi, 2          ; next j
  1921 000011E1 FF0D[D81F0500]                          dec	dword [_@@JJJ]
  1922 000011E7 0F857AFEFFFF                            jnz	.low_freq_lop_j
  1923                                  
  1924                                  .low_freq_next_i:
  1925 000011ED FF05[D41F0500]                          inc	dword [_@@III]	; next i
  1926 000011F3 833D[D41F0500]03                        cmp	dword [_@@III], 3
  1927 000011FA 0F8201FDFFFF                            jb	.low_freq_lop_i
  1928 00001200 81FF3C020000                            cmp	edi, 572	; aka 576-4 ; skip if less than 4 entries left
  1929 00001206 0F87DA000000                            ja	.high_freq_done
  1930                                  
  1931                                  .high_freq_lop:
  1932 0000120C 3B35[E41F0500]                          cmp     esi, [_@@coarse_end]
  1933 00001212 7629                                    jbe     short .high_freq_inrange
  1934 00001214 89F0                                    mov     eax, esi        ; mp3mac_bitstream_get_position
  1935 00001216 2B05[ACF40000]                          sub     eax, [mp3_bitstream_start]
  1936 0000121C 0FBED5                                  movsx   edx, ch         ; mp3_colNN
  1937 0000121F F7DA                                    neg     edx
  1938 00001221 8D44C2F0                                lea     eax, [edx+eax*8-16]
  1939 00001225 3B4308                                  cmp     eax, [ebx+8]    ; [ebx+$mp3gr_part2_3_end] ; check end
  1940 00001228 7213                                    jb      short .high_freq_inrange ; not yet end
  1941 0000122A 0F84B6000000                            jz      .high_freq_done ; okay, exact end
  1942 00001230 83FF04                                  cmp     edi, 4
  1943 00001233 7203                                    jb      short .high_freq_cannot_stepback
  1944 00001235 83EF04                                  sub     edi, 4          ; stepback, s_index-4 ; dst stepback
  1945                                  
  1946                                  .high_freq_cannot_stepback:
  1947 00001238 E9A9000000                              jmp     .high_freq_done
  1948                                  
  1949                                  .high_freq_inrange:
  1950 0000123D 8B5324                                  mov     edx, [ebx+24h]  ; [ebx+$mp3gr_count1table_select]
  1951                                                                          ; get huffcode (quad_vlc)
  1952                                  
  1953                                  .get_child_lop@@:
  1954 00001240 8A0C95[C61F0100]                        mov     cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode
  1955 00001247 668B1495[C41F0100]                      mov     dx, word [huff_tree_buf+edx*4]
  1956 0000124F 89E8                                    mov     eax, ebp
  1957 00001251 D3E8                                    shr     eax, cl
  1958 00001253 01C2                                    add     edx, eax
  1959 00001255 8A0C95[C61F0100]                        mov     cl, [(huff_tree_buf+2)+edx*4]
  1960 0000125C 80F900                                  cmp     cl, 0
  1961 0000125F 7823                                    js      short .got_child@@
  1962 00001261 0FB70495[C41F0100]                      movzx   eax, word [huff_tree_buf+edx*4]
  1963 00001269 D3E5                                    shl     ebp, cl
  1964 0000126B 28CD                                    sub     ch, cl
  1965 0000126D 7932                                    jns     short .got_done@@
  1966 0000126F 88E9                                    mov     cl, ch
  1967 00001271 80C510                                  add     ch, 10h
  1968 00001274 D3C5                                    rol     ebp, cl
  1969 00001276 668B2E                                  mov     bp, [esi]
  1970 00001279 83C602                                  add     esi, 2
  1971 0000127C 66C1CD08                                ror     bp, 8
  1972 00001280 D3CD                                    ror     ebp, cl
  1973 00001282 EB1D                                    jmp     short .got_done@@
  1974                                  
  1975                                  .got_child@@:
  1976 00001284 C1E509                                  shl     ebp, 9
  1977 00001287 80ED09                                  sub     ch, 9
  1978 0000128A 79B4                                    jns     short .get_child_lop@@
  1979 0000128C 88E9                                    mov     cl, ch
  1980 0000128E 80C510                                  add     ch, 10h
  1981 00001291 D3C5                                    rol     ebp, cl
  1982 00001293 668B2E                                  mov     bp, [esi]
  1983 00001296 83C602                                  add     esi, 2
  1984 00001299 66C1CD08                                ror     bp, 8
  1985 0000129D D3CD                                    ror     ebp, cl
  1986 0000129F EB9F                                    jmp     short .get_child_lop@@
  1987                                  
  1988                                  .got_done@@:
  1989 000012A1 88C2                                    mov     dl, al          ; flags
  1990 000012A3 C0E204                                  shl     dl, 4           ; flags, to upper 4bit
  1991 000012A6 B604                                    mov     dh, 4           ; lopcount
  1992                                  
  1993                                  .high_freq_flag_lop:
  1994 000012A8 31C0                                    xor     eax, eax
  1995 000012AA D0E2                                    shl     dl, 1           ; flag
  1996 000012AC 7320                                    jnb     short .high_freq_flag_this
  1997 000012AE 3B3D[E81F0500]                          cmp     edi, [_@rle_point] ; @@get_runlength quads
  1998 000012B4 0F83B8000000                            jnb     .rle_fetch_next_quads
  1999                                  
  2000                                  .rle_back_quads:
  2001 000012BA A1[F01F0500]                            mov     eax, [_@@rle_val]
  2002 000012BF 8B0485[305B0400]                        mov     eax, [mp3_exp_table+eax*4] ; xlat and get sign
  2003 000012C6 FECD                                    dec     ch              ; mp3mac_get_bit_to_cy
  2004 000012C8 D1E5                                    shl     ebp, 1
  2005 000012CA 7302                                    jnb     short .high_freq_flag_this ;
  2006                                                                          ; sbb edx, edx ; cy=0,1 --> 0,FFFFFFFF
  2007                                                                          ; xor eax, edx ; invert if cy was 1
  2008                                                                          ; sub eax, edx ; add 1 if cy was 1
  2009 000012CC F7D8                                    neg     eax
  2010                                  
  2011                                  .high_freq_flag_this:
  2012 000012CE 8984BBA0000000                          mov     [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0]
  2013 000012D5 47                                      inc     edi
  2014 000012D6 FECE                                    dec     dh
  2015 000012D8 75CE                                    jnz     short .high_freq_flag_lop
  2016 000012DA 81FF3C020000                            cmp     edi, 572        ; aka 576-4 ; loop while space for another 4 values
  2017 000012E0 0F8626FFFFFF                            jbe     .high_freq_lop
  2018                                  
  2019                                  .high_freq_done:
  2020 000012E6 897B5C                                  mov     [ebx+92], edi   ; [ebx+$mp3gr_num_nonzero_hybrids]
  2021 000012E9 51                                      push    ecx
  2022 000012EA B940020000                              mov     ecx, 576        ; end
  2023 000012EF 29F9                                    sub     ecx, edi        ; remain = end-curr
  2024                                                                          ; zeropad remaining entries (can be 0 or 2 dwords,
  2025                                                                          ; or more. If above loop was aborted)
  2026 000012F1 8DBCBBA0000000                          lea     edi, [ebx+edi*4+160] ; [ebx+$mp3gr_sb_hybrid+edi*4]
  2027 000012F8 31C0                                    xor     eax, eax
  2028 000012FA F3AB                                    rep stosd
  2029 000012FC 59                                      pop     ecx
  2030 000012FD F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_read_huffman
  2031 00001304 740E                                    jz      short .no_rdtsc_supported@
  2032 00001306 0F31                                    rdtsc
  2033 00001308 0105[F4760000]                          add     [rdtsc_read_huffman], eax
  2034 0000130E 1115[F8760000]                          adc     [rdtsc_read_huffman+4], edx
  2035                                  
  2036                                  .no_rdtsc_supported@:
  2037 00001314 F8                                      clc                     ; out: cy=0=okay
  2038 00001315 C3                                      retn
  2039                                  
  2040                                  .rle_fetch_next_small:
  2041 00001316 A1[EC1F0500]                            mov     eax, [_@@rle_ptr] ; @@next_runlength small
  2042 0000131B 8305[EC1F0500]04                        add     dword [_@@rle_ptr], 4
  2043 00001322 8B00                                    mov     eax, [eax]
  2044 00001324 6639C7                                  cmp     di, ax
  2045 00001327 73ED                                    jnb     short .rle_fetch_next_small
  2046 00001329 66A3[E81F0500]                          mov     word [_@rle_point], ax
  2047 0000132F C1E810                                  shr     eax, 16
  2048 00001332 A3[F01F0500]                            mov     [_@@rle_val], eax
  2049 00001337 C1E006                                  shl     eax, 6
  2050 0000133A A3[F41F0500]                            mov     [_@@rle_val_x_40h], eax
  2051 0000133F E934FCFFFF                              jmp     .rle_back_small
  2052                                  
  2053                                  .rle_fetch_next_full:
  2054 00001344 A1[EC1F0500]                            mov     eax, [_@@rle_ptr] ; @@next_runlength full
  2055 00001349 8305[EC1F0500]04                        add	dword [_@@rle_ptr], 4
  2056 00001350 8B00                                    mov     eax, [eax]
  2057 00001352 6639C7                                  cmp     di, ax
  2058 00001355 73ED                                    jnb     short .rle_fetch_next_full
  2059 00001357 66A3[E81F0500]                          mov     word [_@rle_point], ax
  2060 0000135D C1E810                                  shr     eax, 16
  2061 00001360 A3[F01F0500]                            mov     [_@@rle_val], eax
  2062 00001365 C1E006                                  shl     eax, 6
  2063 00001368 A3[F41F0500]                            mov     [_@@rle_val_x_40h], eax
  2064 0000136D E90DFDFFFF                              jmp     .rle_back_full
  2065                                  
  2066                                  .rle_fetch_next_quads:
  2067 00001372 A1[EC1F0500]                            mov	eax, [_@@rle_ptr] ; msw=val, lsw=point
  2068 00001377 8305[EC1F0500]04                        add	dword [_@@rle_ptr], 4 ; 2+2
  2069 0000137E 8B00                                    mov	eax, [eax]
  2070 00001380 6639C7                                  cmp	di, ax          ; needed if rle fetching was skipped
  2071 00001383 73ED                                    jnb	short .rle_fetch_next_quads
  2072 00001385 66A3[E81F0500]                          mov	word [_@rle_point], ax
  2073 0000138B C1E810                                  shr	eax, 16
  2074 0000138E A3[F01F0500]                            mov	[_@@rle_val], eax
  2075 00001393 E922FFFFFF                              jmp	.rle_back_quads
  2076                                  
  2077                                  .lop_j_near_end:
  2078 00001398 89F0                                    mov     eax, esi
  2079 0000139A 2B05[ACF40000]                          sub     eax, [mp3_bitstream_start]
  2080 000013A0 0FBED5                                  movsx   edx, ch
  2081 000013A3 F7DA                                    neg     edx
  2082 000013A5 8D44C2F0                                lea     eax, [edx+eax*8-16]
  2083 000013A9 3B4308                                  cmp     eax, [ebx+8]
  2084 000013AC 0F82C1FCFFFF                            jb      .small_not_end@
  2085 000013B2 E936FEFFFF                              jmp     .low_freq_next_i
  2086                                  
  2087                                  
  2088                                  ; =============== S U B R O U T I N E =======================================
  2089                                  
  2090                                  
  2091                                  mp3_compute_stereo:
  2092 000013B7 833D[D09D0000]02                        cmp	dword [mp3_output_num_channels], 2 ; in: ebx=granule(s)
  2093 000013BE 7515                                    jnz	short .no_stereo
  2094 000013C0 833D[EC9D0000]02                        cmp	dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO
  2095                                                                          ; only MS stereo
  2096 000013C7 740D                                    jz	short mp3_compute_ms_stereo
  2097 000013C9 F705[EC9D0000]0100-                     test	dword [mp3_hdr_mode_ext], 1 ; MODE_EXT_I_STEREO
  2097 000013D1 0000               
  2098                                                                          ; intensity stereo (optionally with MS stereo)
  2099 000013D3 7567                                    jnz	short mp3_compute_i_stereo
  2100                                  
  2101                                  .no_stereo:
  2102 000013D5 C3                                      retn
  2103                                  
  2104                                  mp3_compute_ms_stereo:
  2105 000013D6 F605[54760000]10                        test    byte [cpuid_flags], 10h ; ms_stereo is most commonly used
  2106                                                                          ; the 1/sqrt(2) normalization factor is included
  2107                                                                          ; in the global gain
  2108 000013DD 740E                                    jz      short .no_rdtsc_supported ; timelog_start rdtsc_ms_stereo
  2109 000013DF 0F31                                    rdtsc
  2110 000013E1 2905[0C770000]                          sub     [rdtsc_ms_stereo], eax
  2111 000013E7 1915[10770000]                          sbb     [rdtsc_ms_stereo+4], edx
  2112                                  
  2113                                  .no_rdtsc_supported:
  2114 000013ED 8DBBE0130000                            lea     edi, [ebx+5088] ; [ebx+$mp3gr_sb_hybrid+$mp3gr_entrysiz*2]
  2115                                                                          ; for ch1 (2nd channel)
  2116 000013F3 8B4B5C                                  mov     ecx, [ebx+92]   ; [ebx+$mp3gr_num_nonzero_hybrids] ; ch0
  2117 000013F6 8B839C130000                            mov     eax, [ebx+5020] ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)] ; ch1
  2118 000013FC 39C1                                    cmp     ecx, eax
  2119 000013FE 7702                                    ja      short .this_len
  2120 00001400 89C1                                    mov     ecx, eax
  2121                                  
  2122                                  .this_len:
  2123 00001402 E320                                    jecxz   .ms_stereo_done
  2124 00001404 894B5C                                  mov     [ebx+92], ecx   ; [ebx+$mp3gr_num_nonzero_hybrids] ; ch0
  2125 00001407 898B9C130000                            mov     [ebx+5020], ecx ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)] ; ch1
  2126                                  
  2127                                  .ms_stereo_lop:
  2128 0000140D 8B87C0ECFFFF                            mov     eax, [edi-4928] ; for i=0 to 576-1
  2129                                                                          ; [edi+@@ch0]
  2130                                                                          ; @@ch0 equ (-$mp3gr_entrysiz*2) ; granule for channel=0
  2131                                                                          ; tmp0 = granule.ch0.sb_hybrid[i]
  2132 00001413 8B17                                    mov     edx, [edi]      ; @@ch1 equ 0 ; granule for channel=1
  2133                                                                          ; [edi+@@ch1]
  2134                                                                          ; tmp1 = granule.ch1.sb_hybrid[i]
  2135 00001415 29D0                                    sub     eax, edx        ; tmp0 - tmp1
  2136 00001417 8D1450                                  lea     edx, [eax+edx*2] ; tmp0 + tmp1
  2137 0000141A 8997C0ECFFFF                            mov     [edi-4928], edx ; [edi+@@ch0]
  2138                                                                          ; granule.ch0.sb_hybrid[i] = tmp0 + tmp1
  2139 00001420 AB                                      stosd                   ; [edi+@@ch1]
  2140                                                                          ; granule.ch1.sb_hybrid[i] = tmp0 - tmp1
  2141 00001421 49                                      dec     ecx
  2142 00001422 75E9                                    jnz     short .ms_stereo_lop
  2143                                  
  2144                                  .ms_stereo_done:
  2145 00001424 F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_ms_stereo
  2146 0000142B 740E                                    jz      short .no_rdtsc_supported@
  2147 0000142D 0F31                                    rdtsc
  2148 0000142F 0105[0C770000]                          add     [rdtsc_ms_stereo], eax
  2149 00001435 1115[10770000]                          adc     [rdtsc_ms_stereo+4], edx
  2150                                  
  2151                                  .no_rdtsc_supported@:
  2152 0000143B C3                                      retn
  2153                                  
  2154                                  mp3_compute_i_stereo:
  2155 0000143C F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_i_stereo
  2156 00001443 740E                                    jz      short .no_rdtsc_supported@@@
  2157 00001445 0F31                                    rdtsc
  2158 00001447 2905[24770000]                          sub     [rdtsc_i_stereo], eax
  2159 0000144D 1915[28770000]                          sbb     [rdtsc_i_stereo+4], edx
  2160                                  
  2161                                  .no_rdtsc_supported@@@:
  2162 00001453 C7435C40020000                          mov     dword [ebx+92], 576 ; ch0
  2163                                                                          ; [ebx+$mp3gr_num_nonzero_hybrids]
  2164 0000145A C7839C130000400200-                     mov     dword [ebx+5020], 576 ; ch1
  2164 00001463 00                 
  2165                                                                          ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)]
  2166 00001464 8B4320                                  mov     eax, [ebx+32]   ; [ebx+$mp3gr_long_end]
  2167 00001467 A3[30200500]                            mov     [_@@n_long_sfb], eax
  2168 0000146C B80D000000                              mov     eax, 13         ; 39/3
  2169 00001471 2B431C                                  sub     eax, [ebx+28]   ; [ebx+$mp3gr_short_start]
  2170 00001474 8D0440                                  lea     eax, [eax+eax*2] ; mul3
  2171 00001477 A3[34200500]                            mov     [_@@n_short_sfb], eax
  2172 0000147C 0305[30200500]                          add     eax, [_@@n_long_sfb]
  2173 00001482 A3[38200500]                            mov     [_@@n_sfb], eax ;
  2174                                                                          ; n_sfb = gr->n_long_sfb + gr->n_short_sfb;
  2175 00001487 803D[34200500]00                        cmp     byte [_@@n_short_sfb], 0
  2176 0000148E B801000000                              mov     eax, 1
  2177 00001493 7405                                    jz      short .without_short
  2178 00001495 B803000000                              mov     eax, 3          ; max_blocks = gr->n_short_sfb ? 3 : 1;
  2179                                  
  2180                                  .without_short:
  2181 0000149A A3[FC1F0500]                            mov     [_@@max_blocks], eax
  2182 0000149F BF[04200500]                            mov     edi, _@@sfb_array
  2183 000014A4 A1[C49D0000]                            mov     eax, [mp3_hdr_sample_rate_index] ; bstab
  2184 000014A9 6BC016                                  imul    eax, 22
  2185 000014AC 8DB0[D4800000]                          lea     esi, [mp3_band_size_long+eax]
  2186 000014B2 8B0D[30200500]                          mov     ecx, [_@@n_long_sfb]
  2187 000014B8 F3A4                                    rep movsb
  2188 000014BA A1[C49D0000]                            mov     eax, [mp3_hdr_sample_rate_index]
  2189 000014BF 6BC00D                                  imul    eax, 13
  2190 000014C2 8DB0[A4810000]                          lea     esi, [mp3_band_size_short+eax] ; merge lieff-style
  2191 000014C8 8B0D[34200500]                          mov     ecx, [_@@n_short_sfb]
  2192 000014CE E30C                                    jecxz   .make_sfb_done ; doing that here is a bit slow,
  2193                                                                          ; it would be better to pre-compute
  2194                                                                          ; all merged-combinations
  2195 000014D0 03731C                                  add     esi, [ebx+28]   ; [ebx+$mp3gr_short_start]
  2196                                  
  2197                                  .make_sfb_lop:
  2198 000014D3 AC                                      lodsb
  2199 000014D4 AA                                      stosb
  2200 000014D5 AA                                      stosb
  2201 000014D6 AA                                      stosb
  2202 000014D7 83E903                                  sub     ecx, 3
  2203 000014DA 75F7                                    jnz     short .make_sfb_lop
  2204                                  
  2205                                  .make_sfb_done:
  2206 000014DC E888000000                              call    _@@find_top_bands ;
  2207                                                                          ; L3_stereo_top_band(left+576,gr->sfbtab,n_sfb,max_band);
  2208 000014E1 803D[30200500]00                        cmp     byte [_@@n_long_sfb], 0
  2209 000014E8 7420                                    jz      short .without_long
  2210 000014EA A1[F81F0500]                            mov     eax, dword [_@@max_bands]
  2211 000014EF 38C4                                    cmp     ah, al          ; if (gr->n_long_sfb)
  2212 000014F1 7F02                                    jg      short .not_max1 ; max_band[0] = max_band[1] = max_band[2] = MINIMP3_MAX
  2213                                                                          ; (MINIMP3_MAX(max_band[0], max_band[1]), max_band[2]);
  2214 000014F3 88C4                                    mov     ah, al
  2215                                  
  2216                                  .not_max1:
  2217 000014F5 C1E808                                  shr     eax, 8
  2218 000014F8 38C4                                    cmp     ah, al
  2219 000014FA 7F02                                    jg      short .not_max2
  2220 000014FC 88C4                                    mov     ah, al
  2221                                  
  2222                                  .not_max2:
  2223 000014FE 88E0                                    mov     al, ah
  2224 00001500 C1E008                                  shl     eax, 8
  2225 00001503 88E0                                    mov     al, ah
  2226 00001505 A3[F81F0500]                            mov     dword [_@@max_bands], eax
  2227                                  
  2228                                  .without_long:
  2229 0000150A 31ED                                    xor     ebp, ebp        ; blk
  2230                                  
  2231                                  .adjust_last_prev_lop:
  2232 0000150C 8B15[38200500]                          mov     edx, [_@@n_sfb]
  2233 00001512 2B15[FC1F0500]                          sub     edx, [_@@max_blocks] ; itop = n_sfb - max_blocks + blk
  2234 00001518 01EA                                    add     edx, ebp
  2235 0000151A 89D1                                    mov     ecx, edx
  2236 0000151C 2B0D[FC1F0500]                          sub     ecx, [_@@max_blocks] ; prev = itop - max_blocks;
  2237 00001522 A1[F09D0000]                            mov     eax, [mp3_hdr_flag_lsf]
  2238 00001527 8D0440                                  lea     eax, [eax+eax*2] ; 0,1 --> 0,3
  2239                                                                          ; default_pos = HDR_TEST_MPEG1(hdr) ? 3
  2240 0000152A 3403                                    xor     al, 3           ; 0,3 --> 3,0
  2241 0000152C 363A8D[F81F0500]                        cmp     cl, [ss:_@@max_bands+ebp]
  2242 00001533 7E07                                    jle     short .use_default_pos ; ist_pos[itop] = max_band[blk] >=
  2243                                                                          ; prev ? default_pos : ist_pos[prev]
  2244 00001535 8A840BB0130000                          mov     al, [ebx+ecx+5040] ; [ebx+@@right+$mp3gr_scale_factors+ecx]
  2245                                  
  2246                                  .use_default_pos:
  2247 0000153C 888413B0130000                          mov     [ebx+edx+5040], al ; [ebx+@@right+$mp3gr_scale_factors+edx]
  2248 00001543 45                                      inc     ebp             ; blk
  2249 00001544 3B2D[FC1F0500]                          cmp     ebp, [_@@max_blocks]
  2250 0000154A 72C0                                    jb      short .adjust_last_prev_lop
  2251 0000154C E867000000                              call    _@@apply_i_stereo
  2252 00001551 F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_i_stereo
  2253 00001558 740E                                    jz      short .no_rdtsc_supported@@@@
  2254 0000155A 0F31                                    rdtsc
  2255 0000155C 0105[24770000]                          add     [rdtsc_i_stereo], eax
  2256 00001562 1115[28770000]                          adc     [rdtsc_i_stereo+4], edx
  2257                                  
  2258                                  .no_rdtsc_supported@@@@:
  2259 00001568 C3                                      retn
  2260                                  
  2261                                  
  2262                                  ; =============== S U B R O U T I N E =======================================
  2263                                  
  2264                                  
  2265                                  _@@find_top_bands:
  2266 00001569 C705[F81F0500]FFFF-                     mov     dword [_@@max_bands], 0FFFFFFh ; set maxband[0..2]=(-1)
  2266 00001571 FF00               
  2267 00001573 8DB3E0130000                            lea     esi, [ebx+5088] ; [ebx+@@right+$mp3gr_sb_hybrid]
  2268 00001579 31D2                                    xor     edx, edx
  2269                                  
  2270                                  .find_top_lop_iii:                    
  2271 0000157B 31C9                                    xor     ecx, ecx        ; for (i = 0; i < nbands; i++)
  2272                                  
  2273                                  .find_top_lop_kkk:                    
  2274 0000157D 8B048E                                  mov     eax, [esi+ecx*4] ; for (k = 0; k < sfb[i]; k += 2)
  2275 00001580 0B448E04                                or      eax, [esi+ecx*4+4]
  2276 00001584 750D                                    jnz     short .found_nonzero
  2277 00001586 83C102                                  add     ecx, 2
  2278 00001589 3A8A[04200500]                          cmp     cl, [_@@sfb_array+edx]
  2279 0000158F 72EC                                    jb      short .find_top_lop_kkk
  2280 00001591 EB11                                    jmp     short .find_top_next
  2281                                  
  2282                                  .found_nonzero:
  2283 00001593 89D0                                    mov     eax, edx
  2284 00001595 F635[0E8B0000]                          div     byte [_@@const_3]
  2285 0000159B 0FB6C4                                  movzx   eax, ah         ; remainder (mod 3)
  2286 0000159E 8890[F81F0500]                          mov     [_@@max_bands+eax], dl ; max_bands[0..2]=i
  2287                                  
  2288                                  .find_top_next:
  2289 000015A4 0FB682[04200500]                        movzx   eax, byte [_@@sfb_array+edx]
  2290 000015AB 8D3486                                  lea     esi, [esi+eax*4]
  2291 000015AE 42                                      inc     edx             ; next
  2292 000015AF 3B15[38200500]                          cmp     edx, [_@@n_sfb]
  2293 000015B5 72C4                                    jb      short .find_top_lop_iii
  2294 000015B7 C3                                      retn
  2295                                  
  2296                                  ; =============== S U B R O U T I N E =======================================
  2297                                  
  2298                                  
  2299                                  _@@apply_i_stereo:
  2300 000015B8 B8[94840000]                            mov     eax, mp3_is_table_normal
  2301 000015BD B907000000                              mov     ecx, 7
  2302 000015C2 833D[F09D0000]00                        cmp     dword [mp3_hdr_flag_lsf], 0
  2303 000015C9 7425                                    jz      short .this_lsf
  2304 000015CB 8B8354130000                            mov     eax, [ebx+4948] ; [ebx+@@right+$mp3gr_scalefac_compress]
  2305 000015D1 83E001                                  and     eax, 1          ; bit0
  2306 000015D4 F705[EC9D0000]0200-                     test    dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO
  2306 000015DC 0000               
  2307 000015DE 7403                                    jz      short .no_ms
  2308 000015E0 83C802                                  or      eax, 2          ; bit1=mul_1.414
  2309                                  
  2310                                  .no_ms:
  2311 000015E3 C1E009                                  shl     eax, 9          ; N*40h*2*4
  2312 000015E6 05[B0E70400]                            add     eax, mp3_is_table_lsf
  2313 000015EB B940000000                              mov     ecx, 64         ; max (must be below NO_INTENSITY_FLAG)
  2314                                  
  2315                                  .this_lsf:
  2316 000015F0 890D[00200500]                          mov     [_@@max_pos], ecx ; 7 or 64
  2317 000015F6 A3[2C200500]                            mov     [_@@is_tab], eax ; table
  2318 000015FB 8DB3A0000000                            lea     esi, [ebx+160]  ; [ebx+$mp3gr_sb_hybrid]
  2319 00001601 31C9                                    xor     ecx, ecx        ; iii ; for (i = 0; sfb[i]; i++)
  2320                                  
  2321                                  .apply_lop_i:
  2322 00001603 0FB6A9[04200500]                        movzx   ebp, byte [_@@sfb_array+ecx] ; if ((int)i > max_band[i % 3]
  2323                                                                          ; && ipos < max_pos)
  2324 0000160A 89C8                                    mov     eax, ecx
  2325 0000160C F635[0E8B0000]                          div     byte [_@@const_3] ; max_band[i % 3]
  2326 00001612 0FB6C4                                  movzx   eax, ah         ; remainder (mod 3)
  2327 00001615 3A88[F81F0500]                          cmp     cl, [_@@max_bands+eax] ; iii,max_bands[0..2];
  2328 0000161B 7E38                                    jle     short .apply_ms_stereo
  2329 0000161D 0FB6BC0BB0130000                        movzx   edi, byte [ebx+ecx+5040] ; [ebx+@@right+$mp3gr_scale_factors+ecx]
  2330                                                                          ; @@right = $mp3gr_entrysiz*2 = 4928
  2331                                                                          ; $mp3gr_scale_factors = 112
  2332 00001625 3B3D[00200500]                          cmp     edi, [_@@max_pos] ; check ipos
  2333 0000162B 7328                                    jnb     short .apply_ms_stereo
  2334 0000162D C1E703                                  shl     edi, 3          ; mul 2*4
  2335 00001630 033D[2C200500]                          add     edi, [_@@is_tab]
  2336                                  
  2337                                  .apply_pan_lop:
  2338 00001636 8B06                                    mov     eax, [esi]      ; tmp = granule.ch0.sb_hybrid
  2339 00001638 C1E002                                  shl     eax, 2
  2340 0000163B F76F04                                  imul    dword [edi+4] ; v1
  2341 0000163E 899640130000                            mov     [esi+4928], edx ; [esi+@@right]
  2342                                                                          ; granule.ch1.sb_hybrid = tmp*v1
  2343 00001644 8B06                                    mov     eax, [esi]      ; tmp = granule.ch0.sb_hybrid
  2344 00001646 C1E002                                  shl     eax, 2
  2345 00001649 F72F                                    imul    dword [edi] ; v0
  2346 0000164B 8916                                    mov     [esi], edx      ; granule.ch0.sb_hybrid = tmp*v0
  2347 0000164D 83C604                                  add     esi, 4
  2348 00001650 4D                                      dec     ebp
  2349 00001651 75E3                                    jnz     short .apply_pan_lop
  2350 00001653 EB2C                                    jmp     short .apply_next
  2351                                  
  2352                                  .apply_ms_stereo:
  2353 00001655 F705[EC9D0000]0200-                     test	dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO
  2353 0000165D 0000               
  2354 0000165F 741D                                    jz	short .apply_none
  2355                                  
  2356                                  .ms_stereo_lop:
  2357 00001661 8B06                                    mov     eax, [esi]      ; tmp0 = granule.ch0.sb_hybrid[i]
  2358 00001663 8B9640130000                            mov     edx, [esi+4928] ; [esi+@@right]
  2359                                                                          ; tmp1 = granule.ch1.sb_hybrid[i]
  2360 00001669 29D0                                    sub     eax, edx        ; tmp0 - tmp1
  2361 0000166B 8D1450                                  lea     edx, [eax+edx*2] ; tmp0 + tmp1
  2362 0000166E 8916                                    mov     [esi], edx      ; granule.ch0.sb_hybrid[i] = tmp0 + tmp1
  2363 00001670 898640130000                            mov     [esi+4928], eax ; [esi+@@right]
  2364                                                                          ; granule.ch1.sb_hybrid[i] = tmp0 - tmp1
  2365 00001676 83C604                                  add     esi, 4
  2366 00001679 4D                                      dec     ebp
  2367 0000167A 75E5                                    jnz     short .ms_stereo_lop
  2368 0000167C EB03                                    jmp     short .apply_next
  2369                                  
  2370                                  .apply_none:
  2371 0000167E 8D34AE                                  lea     esi, [esi+ebp*4] ; skip, keep unchanged
  2372                                  
  2373                                  .apply_next:
  2374 00001681 41                                      inc     ecx             ; iii
  2375 00001682 3B0D[38200500]                          cmp     ecx, [_@@n_sfb]
  2376 00001688 0F8275FFFFFF                            jb      .apply_lop_i   ; next
  2377 0000168E C3                                      retn
  2378                                  
  2379                                  ; =============== S U B R O U T I N E =======================================
  2380                                  
  2381                                  
  2382                                  mp3_reorder_block:
  2383 0000168F F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_reorder
  2384 00001696 740E                                    jz      short .no_rdtsc_supported
  2385 00001698 0F31                                    rdtsc
  2386 0000169A 2905[3C770000]                          sub     [rdtsc_reorder], eax
  2387 000016A0 1915[40770000]                          sbb     [rdtsc_reorder+4], edx
  2388                                  
  2389                                  .no_rdtsc_supported:
  2390 000016A6 807B2C02                                cmp	byte [ebx+44], 2 ; ebx+$mp3gr_block_type] ; only for type 2
  2391 000016AA 7565                                    jnz	short .no_reorder
  2392 000016AC 8DB3A0000000                            lea	esi, [ebx+160]  ; [ebx+$mp3gr_sb_hybrid] ; ptr+0
  2393 000016B2 807B3000                                cmp	byte [ebx+48], 0 ; [ebx+$mp3gr_switch_point]
  2394 000016B6 7412                                    jz	short .this_src
  2395 000016B8 81C690000000                            add	esi, 144        ; 36*4 ; ptr+36*4
  2396 000016BE 833D[C49D0000]08                        cmp	dword [mp3_hdr_sample_rate_index], 8
  2397 000016C5 7503                                    jnz	short .this_src
  2398 000016C7 83C630                                  add	esi, 48         ; 12*4 ; additionally to above 36*4 ; ptr+48*4
  2399                                  
  2400                                  .this_src:
  2401 000016CA 8B531C                                  mov     edx, [ebx+28]   ; [ebx+$mp3gr_short_start] ; can be 13
  2402 000016CD 83FA0D                                  cmp     edx, 13
  2403 000016D0 733F                                    jnb     short .no_reorder
  2404 000016D2 C7435C40020000                          mov     dword [ebx+92], 576 ; [ebx+$mp3gr_num_nonzero_hybrids]
  2405                                  
  2406                                  .outer_lop:
  2407 000016D9 A1[C49D0000]                            mov     eax, [mp3_hdr_sample_rate_index]
  2408 000016DE 6BC00D                                  imul    eax, 13         ; X*13
  2409 000016E1 0FB68C10[A4810000]                      movzx   ecx, byte [mp3_band_size_short+eax+edx] ; [X*13+Y]
  2410 000016E9 BF[3C200500]                            mov     edi, _@@tmp
  2411 000016EE 60                                      pusha
  2412 000016EF 89CA                                    mov     edx, ecx        ; step=len (4..44) ; copy LEN*3 dwords to tmp
  2413                                  
  2414                                  .inner_lop:
  2415 000016F1 8B06                                    mov     eax, [esi]
  2416 000016F3 AB                                      stosd
  2417 000016F4 8B0496                                  mov     eax, [esi+edx*4] ; copy 3 dwords
  2418 000016F7 AB                                      stosd
  2419 000016F8 8B04D6                                  mov     eax, [esi+edx*8]
  2420 000016FB AB                                      stosd
  2421 000016FC 83C604                                  add     esi, 4
  2422 000016FF E2F0                                    loop    .inner_lop
  2423 00001701 61                                      popa
  2424 00001702 8D0C49                                  lea     ecx, [ecx+ecx*2] ; len*3
  2425 00001705 87FE                                    xchg    esi, edi        ; copy LEN*3 dwords back from tmp
  2426 00001707 F3A5                                    rep movsd
  2427 00001709 87FE                                    xchg    esi, edi
  2428 0000170B 42                                      inc     edx
  2429 0000170C 83FA0D                                  cmp     edx, 13
  2430 0000170F 72C8                                    jb      short .outer_lop ; next
  2431                                  
  2432                                  .no_reorder:
  2433 00001711 F605[54760000]10                        test    byte [cpuid_flags], 10h
  2434 00001718 740E                                    jz      short .no_rdtsc_supported@ ; timelog_end rdtsc_reorder
  2435 0000171A 0F31                                    rdtsc
  2436 0000171C 0105[3C770000]                          add     [rdtsc_reorder], eax
  2437 00001722 1115[40770000]                          adc     [rdtsc_reorder+4], edx
  2438                                  
  2439                                  .no_rdtsc_supported@:
  2440 00001728 C3                                      retn
  2441                                  
  2442                                  
  2443                                  ; =============== S U B R O U T I N E =======================================
  2444                                  
  2445                                  
  2446                                  mp3_compute_antialias:
  2447 00001729 F605[54760000]10                        test    byte [cpuid_flags], 10h ; in: ebx=granule
  2448 00001730 740E                                    jz      short .no_rdtsc_supported ; timelog_start rdtsc_antialias
  2449 00001732 0F31                                    rdtsc
  2450 00001734 2905[54770000]                          sub     [rdtsc_antialias], eax
  2451 0000173A 1915[58770000]                          sbb     [rdtsc_antialias+4], edx
  2452                                  
  2453                                  .no_rdtsc_supported:
  2454 00001740 8B435C                                  mov     eax, [ebx+92]   ; [ebx+$mp3gr_num_nonzero_hybrids]
  2455 00001743 83C008                                  add     eax, 8          ; 9-1 ; 0..576+8
  2456 00001746 31D2                                    xor     edx, edx
  2457 00001748 B909000000                              mov     ecx, 9
  2458 0000174D F7F1                                    div     ecx             ; (num/9) ; 0..64
  2459 0000174F 894360                                  mov     [ebx+60h], eax
  2460 00001752 D1E8                                    shr     eax, 1          ; (num/18) ; 0..32
  2461 00001754 0F84B8010000                            jz      .no_antialias  ; 0 (when num/9 = 0..1)
  2462 0000175A 89C1                                    mov     ecx, eax        ; 1..32
  2463 0000175C C1E805                                  shr     eax, 5          ; 0..1
  2464 0000175F 29C1                                    sub     ecx, eax        ; 1..31 ; len excluding zeropadding
  2465 00001761 807B2C02                                cmp     byte [ebx+44], 2 ; [ebx+$mp3gr_block_type]
  2466 00001765 750F                                    jnz     short .this_len ; antialias only "long" bands
  2467 00001767 807B3000                                cmp     byte [ebx+48], 0 ; [ebx+$mp3gr_switch_point]
  2468 0000176B 0F84A1010000                            jz      .no_antialias
  2469 00001771 B901000000                              mov     ecx, 1          ; check this for 8000Hz case
  2470                                  
  2471                                  .this_len:
  2472 00001776 8D440901                                lea     eax, [1+ecx*2]
  2473 0000177A 394360                                  cmp     [ebx+96], eax   ; [ebx+$mp3gr_num_nonzero_hybrids_div9]
  2474 0000177D 7703                                    ja      short .is_bigger
  2475 0000177F 894360                                  mov     [ebx+96], eax   ; opdate highest
  2476                                                                          ; (nonzero required for l3-si_huff.bit)
  2477                                  
  2478                                  .is_bigger:
  2479 00001782 53                                      push    ebx
  2480 00001783 8D9BA0000000                            lea     ebx, [ebx+160]  ; [ebx+$mp3gr_sb_hybrid]
  2481                                  
  2482                                  .lop:
  2483 00001789 83C348                                  add     ebx, 72         ; 18*4
  2484 0000178C 8B73FC                                  mov     esi, [ebx-4]    ; IRP nn,0,1,2,3,4,5,6,7 ; INT_AA(nn=0..7)
  2485 0000178F 8B3B                                    mov     edi, [ebx]      ; @@def_csa macro nn,cs,ca
  2486                                                                          ;   mp3_csa_&nn&_cs equ cs
  2487                                                                          ;   mp3_csa_&nn&_ca equ ca
  2488                                                                          ;  endm
  2489                                                                          ; constants for mp3_csa_table
  2490 00001791 C1E602                                  shl     esi, 2          ; tmp0 = ptr[-nn-1]*4
  2491 00001794 C1E702                                  shl     edi, 2          ; tmp1 = ptr[+nn]*4
  2492 00001797 8D043E                                  lea     eax, [esi+edi]  ; tmp2 = tmp0+tmp1
  2493 0000179A BD032AE136                              mov     ebp, 36E12A03h  ; @@def_csa 0,36E12A03h,-20ED7F9Ah  ;-0.6
  2494                                                                          ; mp3_csa_&nn&_cs
  2495 0000179F F7ED                                    imul    ebp             ; tmp2 = (tmp2*csa[0])
  2496 000017A1 89D5                                    mov     ebp, edx
  2497 000017A3 B8635631A8                              mov     eax, -57CEA99Dh ; mp3_csa_&nn&_ca-mp3_csa_&nn&_cs
  2498 000017A8 F7EE                                    imul    esi             ; tmp0 = (tmp2+(tmp0*csa[3]))
  2499 000017AA 01EA                                    add     edx, ebp
  2500 000017AC 8913                                    mov     [ebx], edx      ; [ebx+(nn)*4]
  2501 000017AE B869AAF315                              mov     eax, 15F3AA69h  ; mp3_csa_&nn&_ca+mp3_csa_&nn&_cs
  2502 000017B3 F7EF                                    imul    edi             ; tmp1 = (tmp2-(tmp1*csa[2]))
  2503 000017B5 29D5                                    sub     ebp, edx
  2504 000017B7 896BFC                                  mov     [ebx-4], ebp    ; [ebx-(nn+1)*4]
  2505 000017BA 8B73F8                                  mov     esi, [ebx-8]
  2506 000017BD 8B7B04                                  mov     edi, [ebx+4]
  2507 000017C0 C1E602                                  shl     esi, 2
  2508 000017C3 C1E702                                  shl     edi, 2
  2509 000017C6 8D043E                                  lea     eax, [esi+edi]
  2510 000017C9 BDFD756E38                              mov     ebp, 386E75FDh  ; @@def_csa 1,386E75FDh,-1E30DB48h  ;-0.535
  2511 000017CE F7ED                                    imul    ebp
  2512 000017D0 89D5                                    mov     ebp, edx
  2513 000017D2 B8BBAE60A9                              mov     eax, -569F5145h
  2514 000017D7 F7EE                                    imul    esi
  2515 000017D9 01EA                                    add     edx, ebp
  2516 000017DB 895304                                  mov     [ebx+4], edx    ; [ebx+(nn)*4]
  2517 000017DE B8B59A3D1A                              mov     eax, 1A3D9AB5h
  2518 000017E3 F7EF                                    imul    edi
  2519 000017E5 29D5                                    sub     ebp, edx
  2520 000017E7 896BF8                                  mov     [ebx-8], ebp    ; [ebx-(nn+1)*4]
  2521 000017EA 8B73F4                                  mov     esi, [ebx-12]
  2522 000017ED 8B7B08                                  mov     edi, [ebx+8]
  2523 000017F0 C1E602                                  shl     esi, 2
  2524 000017F3 C1E702                                  shl     edi, 2
  2525 000017F6 8D043E                                  lea     eax, [esi+edi]
  2526 000017F9 BD3EB7C63C                              mov     ebp, 3CC6B73Eh  ;  @@def_csa 2,3CC6B73Eh,-140E604Fh  ;-0.33
  2527 000017FE F7ED                                    imul    ebp
  2528 00001800 89D5                                    mov     ebp, edx
  2529 00001802 B873E82AAF                              mov     eax, -50D5178Dh
  2530 00001807 F7EE                                    imul    esi
  2531 00001809 01EA                                    add     edx, ebp
  2532 0000180B 895308                                  mov     [ebx+8], edx    ; [ebx+(nn)*4]
  2533 0000180E B8EF56B828                              mov     eax, 28B856EFh
  2534 00001813 F7EF                                    imul    edi
  2535 00001815 29D5                                    sub     ebp, edx
  2536 00001817 896BF4                                  mov     [ebx-12], ebp   ; [ebx-(nn+1)*4]
  2537 0000181A 8B73F0                                  mov     esi, [ebx-16]
  2538 0000181D 8B7B0C                                  mov     edi, [ebx+12]
  2539 00001820 C1E602                                  shl     esi, 2
  2540 00001823 C1E702                                  shl     edi, 2
  2541 00001826 8D043E                                  lea     eax, [esi+edi]
  2542 00001829 BD55A0EE3E                              mov     ebp, 3EEEA055h  ; @@def_csa 3,3EEEA055h,-0BA47742h  ;-0.185
  2543 0000182E F7ED                                    imul    ebp
  2544 00001830 89D5                                    mov     ebp, edx
  2545 00001832 B869E86CB5                              mov     eax, -4A931797h
  2546 00001837 F7EE                                    imul    esi
  2547 00001839 01EA                                    add     edx, ebp
  2548 0000183B 89530C                                  mov     [ebx+12], edx   ; [ebx+(nn)*4]
  2549 0000183E B813294A33                              mov     eax, 334A2913h
  2550 00001843 F7EF                                    imul    edi
  2551 00001845 29D5                                    sub     ebp, edx
  2552 00001847 896BF0                                  mov     [ebx-16], ebp   ; [ebx-(nn+1)*4]
  2553 0000184A 8B73EC                                  mov     esi, [ebx-20]   ; ebx-(nn+1)*4] ; tmp0 = ptr[-nn-1]
  2554 0000184D 8B7B10                                  mov     edi, [ebx+16]   ; [ebx+(nn)*4] ; tmp1 = ptr[+nn]
  2555 00001850 C1E602                                  shl     esi, 2
  2556 00001853 C1E702                                  shl     edi, 2
  2557 00001856 8D043E                                  lea     eax, [esi+edi]  ; tmp2 = tmp0+tmp1
  2558 00001859 BD5C90B63F                              mov     ebp, 3FB6905Ch  ; @@def_csa 4,3FB6905Ch,-060D80E9h  ;-0.095
  2559 0000185E F7ED                                    imul    ebp             ; tmp2 = (tmp2*csa[0])
  2560 00001860 89D5                                    mov     ebp, edx
  2561 00001862 B8BBEE3BBA                              mov     eax, -45C41145h
  2562 00001867 F7EE                                    imul    esi             ; tmp0 = (tmp2+(tmp0*csa[3]))
  2563 00001869 01EA                                    add     edx, ebp
  2564 0000186B 895310                                  mov     [ebx+16], edx   ; [ebx+(nn)*4]
  2565 0000186E B8730FA939                              mov     eax, 39A90F73h
  2566 00001873 F7EF                                    imul    edi             ; tmp1 = (tmp2-(tmp1*csa[2]))
  2567 00001875 29D5                                    sub     ebp, edx
  2568 00001877 896BEC                                  mov     [ebx-20], ebp   ; [ebx-(nn+1)*4]
  2569 0000187A 8B73E8                                  mov     esi, [ebx-24]
  2570 0000187D 8B7B14                                  mov     edi, [ebx+20]
  2571 00001880 C1E602                                  shl     esi, 2
  2572 00001883 C1E702                                  shl     edi, 2
  2573 00001886 8D043E                                  lea     eax, [esi+edi]
  2574 00001889 BD213FF23F                              mov     ebp, 3FF23F21h  ; @@def_csa 5,3FF23F21h,-029F2E1Bh  ;-0.041
  2575 0000188E F7ED                                    imul    ebp
  2576 00001890 89D5                                    mov     ebp, edx
  2577 00001892 B8C4926EBD                              mov     eax, -42916D3Ch
  2578 00001897 F7EE                                    imul    esi
  2579 00001899 01EA                                    add     edx, ebp
  2580 0000189B 895314                                  mov     [ebx+20], edx   ; [ebx+(nn)*4]
  2581 0000189E B80611533D                              mov     eax, 3D531106h
  2582 000018A3 F7EF                                    imul    edi
  2583 000018A5 29D5                                    sub     ebp, edx
  2584 000018A7 896BE8                                  mov     [ebx-24], ebp   ; [ebx-(nn+1)*4]
  2585 000018AA 8B73E4                                  mov     esi, [ebx-28]
  2586 000018AD 8B7B18                                  mov     edi, [ebx+24]
  2587 000018B0 C1E602                                  shl     esi, 2
  2588 000018B3 C1E702                                  shl     edi, 2
  2589 000018B6 8D043E                                  lea     eax, [esi+edi]
  2590 000018B9 BD3259FE3F                              mov     ebp, 3FFE5932h  ; @@def_csa 6,3FFE5932h,-00E8A11Ch  ;-0.0142
  2591 000018BE F7ED                                    imul    ebp
  2592 000018C0 89D5                                    mov     ebp, edx
  2593 000018C2 B8B20519BF                              mov     eax, -40E6FA4Eh
  2594 000018C7 F7EE                                    imul    esi
  2595 000018C9 01EA                                    add     edx, ebp
  2596 000018CB 895318                                  mov     [ebx+24], edx   ; [ebx+(nn)*4]
  2597 000018CE B816B8153F                              mov     eax, 3F15B816h
  2598 000018D3 F7EF                                    imul    edi
  2599 000018D5 29D5                                    sub     ebp, edx
  2600 000018D7 896BE4                                  mov     [ebx-28], ebp   ; [ebx-(nn+1)*4]
  2601 000018DA 8B73E0                                  mov     esi, [ebx-32]
  2602 000018DD 8B7B1C                                  mov     edi, [ebx+28]
  2603 000018E0 C1E602                                  shl     esi, 2
  2604 000018E3 C1E702                                  shl     edi, 2
  2605 000018E6 8D043E                                  lea     eax, [esi+edi]
  2606 000018E9 BD4BE3FF3F                              mov     ebp, 3FFFE34Bh  ; @@def_csa 7,3FFFE34Bh,-003C9ED1h  ;-0.0037
  2607 000018EE F7ED                                    imul    ebp
  2608 000018F0 89D5                                    mov     ebp, edx
  2609 000018F2 B8E47DC3BF                              mov     eax, -403C821Ch
  2610 000018F7 F7EE                                    imul    esi
  2611 000018F9 01EA                                    add     edx, ebp
  2612 000018FB 89531C                                  mov     [ebx+28], edx   ; [ebx+(nn)*4]
  2613 000018FE B87A44C33F                              mov     eax, 3FC3447Ah
  2614 00001903 F7EF                                    imul    edi
  2615 00001905 29D5                                    sub     ebp, edx
  2616 00001907 896BE0                                  mov     [ebx-32], ebp   ; [ebx-(nn+1)*4]
  2617 0000190A 49                                      dec     ecx
  2618 0000190B 0F8578FEFFFF                            jnz     .lop
  2619 00001911 5B                                      pop     ebx
  2620                                  
  2621                                  .no_antialias:
  2622 00001912 F605[54760000]10                        test    byte [cpuid_flags], 10h
  2623 00001919 740E                                    jz      short .no_rdtsc_supported@
  2624 0000191B 0F31                                    rdtsc
  2625 0000191D 0105[54770000]                          add     [rdtsc_antialias], eax
  2626 00001923 1115[58770000]                          adc     [rdtsc_antialias+4], edx
  2627                                  
  2628                                  .no_rdtsc_supported@:
  2629 00001929 C3                                      retn
  2630                                  
  2631                                  
  2632                                  ; =============== S U B R O U T I N E =======================================
  2633                                  
  2634                                  
  2635                                  mp3_imdct36:
  2636 0000192A 8B06                                    mov     eax, [esi]      ; in: esi=src (sb_hybrid)
  2637                                                                          ; in: edi=dst (sb_samples)
  2638                                                                          ; in: ebx=buf (mdct_buf)
  2639                                                                          ; in: ebp=win (mdct_win)
  2640                                                                          ;
  2641                                                                          ; [esi+0*4]
  2642 0000192C 8B5604                                  mov     edx, [esi+4]    ; IRP i,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
  2643 0000192F 01D0                                    add     eax, edx        ; IF i AND 1 (*) ; mov edx,[esi+i*4] ; val[i]
  2644                                                                          ;  add val[i-1]
  2645 00001931 894604                                  mov     [esi+4], eax    ;  IF i GT 1
  2646                                                                          ;   add  ecx,eax ; add val[i-2]
  2647                                                                          ;   mov  [esi+(i)*4],ecx
  2648                                                                          ;  ELSE
  2649                                                                          ;   mov  [esi+(i)*4],eax
  2650 00001934 89C1                                    mov     ecx, eax        ;  memorize as val[i-2]
  2651 00001936 8B4608                                  mov     eax, [esi+8]    ; ELSE (*) ; [esi+i*4] ; val[i]
  2652 00001939 01C2                                    add     edx, eax        ;  add val[i-1]
  2653 0000193B 895608                                  mov     [esi+8], edx    ; [esi+(i)*4
  2654 0000193E 8B560C                                  mov     edx, [esi+12]
  2655 00001941 01D0                                    add     eax, edx
  2656 00001943 01C1                                    add     ecx, eax
  2657 00001945 894E0C                                  mov     [esi+12], ecx
  2658 00001948 89C1                                    mov     ecx, eax
  2659 0000194A 8B4610                                  mov     eax, [esi+16]
  2660 0000194D 01C2                                    add     edx, eax
  2661 0000194F 895610                                  mov     [esi+16], edx
  2662 00001952 8B5614                                  mov     edx, [esi+20]
  2663 00001955 01D0                                    add     eax, edx
  2664 00001957 01C1                                    add     ecx, eax
  2665 00001959 894E14                                  mov     [esi+20], ecx
  2666 0000195C 89C1                                    mov     ecx, eax
  2667 0000195E 8B4618                                  mov     eax, [esi+24]
  2668 00001961 01C2                                    add     edx, eax
  2669 00001963 895618                                  mov     [esi+24], edx
  2670 00001966 8B561C                                  mov     edx, [esi+28]
  2671 00001969 01D0                                    add     eax, edx
  2672 0000196B 01C1                                    add     ecx, eax
  2673 0000196D 894E1C                                  mov     [esi+28], ecx
  2674 00001970 89C1                                    mov     ecx, eax
  2675 00001972 8B4620                                  mov     eax, [esi+32]
  2676 00001975 01C2                                    add     edx, eax
  2677 00001977 895620                                  mov     [esi+32], edx
  2678 0000197A 8B5624                                  mov     edx, [esi+36]
  2679 0000197D 01D0                                    add     eax, edx
  2680 0000197F 01C1                                    add     ecx, eax
  2681 00001981 894E24                                  mov     [esi+36], ecx
  2682 00001984 89C1                                    mov     ecx, eax
  2683 00001986 8B4628                                  mov     eax, [esi+40]
  2684 00001989 01C2                                    add     edx, eax
  2685 0000198B 895628                                  mov     [esi+40], edx
  2686 0000198E 8B562C                                  mov     edx, [esi+44]
  2687 00001991 01D0                                    add     eax, edx
  2688 00001993 01C1                                    add     ecx, eax
  2689 00001995 894E2C                                  mov     [esi+44], ecx
  2690 00001998 89C1                                    mov     ecx, eax
  2691 0000199A 8B4630                                  mov     eax, [esi+48]
  2692 0000199D 01C2                                    add     edx, eax
  2693 0000199F 895630                                  mov     [esi+48], edx
  2694 000019A2 8B5634                                  mov     edx, [esi+52]
  2695 000019A5 01D0                                    add     eax, edx
  2696 000019A7 01C1                                    add     ecx, eax
  2697 000019A9 894E34                                  mov     [esi+52], ecx
  2698 000019AC 89C1                                    mov     ecx, eax
  2699 000019AE 8B4638                                  mov     eax, [esi+56]
  2700 000019B1 01C2                                    add     edx, eax
  2701 000019B3 895638                                  mov     [esi+56], edx
  2702 000019B6 8B563C                                  mov     edx, [esi+60]
  2703 000019B9 01D0                                    add     eax, edx
  2704 000019BB 01C1                                    add     ecx, eax
  2705 000019BD 894E3C                                  mov     [esi+60], ecx
  2706 000019C0 89C1                                    mov     ecx, eax
  2707 000019C2 8B4640                                  mov     eax, [esi+64]
  2708 000019C5 01C2                                    add     edx, eax
  2709 000019C7 895640                                  mov     [esi+64], edx
  2710 000019CA 8B5644                                  mov     edx, [esi+68]
  2711 000019CD 01D0                                    add     eax, edx
  2712 000019CF 01C1                                    add     ecx, eax
  2713 000019D1 894E44                                  mov     [esi+68], ecx
  2714 000019D4 89C1                                    mov     ecx, eax
  2715 000019D6 53                                      push    ebx
  2716 000019D7 55                                      push    ebp
  2717 000019D8 57                                      push    edi
  2718 000019D9 8B0E                                    mov     ecx, [esi]      ; IRP j,0,1
  2719 000019DB 8B5E30                                  mov     ebx, [esi+48]   ; t1 = [esi+(0*2+j)*4], t0 = [esi+(6*2+j)*4]
  2720 000019DE 8B7E20                                  mov     edi, [esi+32]   ; t2 = [esi+(4*2+j)*4]
  2721 000019E1 037E40                                  add     edi, [esi+64]   ; + [esi+(8*2+j)*4]
  2722 000019E4 2B7E10                                  sub     edi, [esi+16]   ; - [esi+(2*2+j)*4]
  2723 000019E7 8D2C4B                                  lea     ebp, [ebx+ecx*2] ; t2 = src[4*2+j] + src[8*2+j] - src[2*2+j]
  2724                                                                          ; t3 = [t1*2+t0]
  2725 000019EA D1FD                                    sar     ebp, 1          ; sar @@t3,1
  2726 000019EC 29D9                                    sub     ecx, ebx        ; sub @@t1,@@t0
  2727 000019EE 89C8                                    mov     eax, ecx        ; @@SUM [@@tmp+(16+j)*4],@@t1,add,@@t2
  2728 000019F0 01F8                                    add     eax, edi
  2729 000019F2 A3[88290500]                            mov     [_@@@tmp+40h], eax ; [@@tmp+(16+j)*4]
  2730 000019F7 D1FF                                    sar     edi, 1          ; sar @@t2,1
  2731 000019F9 89C8                                    mov     eax, ecx        ; @@SUM [@@tmp+(6+j)*4],@@t1,sub,@@t2
  2732 000019FB 29F8                                    sub     eax, edi
  2733 000019FD A3[60290500]                            mov     [_@@@tmp+18h], eax ; [@@tmp+(6+j)*4]
  2734 00001A02 8B4610                                  mov     eax, [esi+16]   ; [esi+(4*2+j)*4]
  2735 00001A05 034620                                  add     eax, [esi+32]   ; [esi+(2*2+j)*4]
  2736 00001A08 D1E0                                    shl     eax, 1
  2737 00001A0A BA0AD94778                              mov     edx, 7847D90Ah  ; C2
  2738 00001A0F F7EA                                    imul    edx
  2739 00001A11 89D3                                    mov     ebx, edx
  2740 00001A13 8B4620                                  mov     eax, [esi+32]
  2741 00001A16 2B4640                                  sub     eax, [esi+64]
  2742 00001A19 BA04CB8BD3                              mov     edx, 0D38BCB04h ; negC8
  2743 00001A1E F7EA                                    imul    edx
  2744 00001A20 89D1                                    mov     ecx, edx
  2745 00001A22 8B4610                                  mov     eax, [esi+16]
  2746 00001A25 034640                                  add     eax, [esi+64]
  2747 00001A28 D1E0                                    shl     eax, 1
  2748 00001A2A BA7541F29D                              mov     edx, 9DF24175h  ; negC4
  2749 00001A2F F7EA                                    imul    edx
  2750 00001A31 89E8                                    mov     eax, ebp
  2751 00001A33 01D8                                    add     eax, ebx
  2752 00001A35 01C8                                    add     eax, ecx
  2753 00001A37 A3[50290500]                            mov     [_@@@tmp+8], eax
  2754 00001A3C 89E8                                    mov     eax, ebp
  2755 00001A3E 29D8                                    sub     eax, ebx
  2756 00001A40 29D0                                    sub     eax, edx
  2757 00001A42 A3[70290500]                            mov     [_@@@tmp+28h], eax
  2758 00001A47 89E8                                    mov     eax, ebp
  2759 00001A49 01D0                                    add     eax, edx
  2760 00001A4B 29C8                                    sub     eax, ecx
  2761 00001A4D A3[80290500]                            mov     [_@@@tmp+38h], eax
  2762 00001A52 8B4628                                  mov     eax, [esi+40]
  2763 00001A55 034638                                  add     eax, [esi+56]
  2764 00001A58 2B4608                                  sub     eax, [esi+8]
  2765 00001A5B D1E0                                    shl     eax, 1
  2766 00001A5D BA5F142691                              mov     edx, 9126145Fh  ; negC3
  2767 00001A62 F7EA                                    imul    edx
  2768 00001A64 8915[58290500]                          mov     [_@@@tmp+10h], edx
  2769 00001A6A 8B4608                                  mov     eax, [esi+8]
  2770 00001A6D 034628                                  add     eax, [esi+40]
  2771 00001A70 D1E0                                    shl     eax, 1
  2772 00001A72 BA332E0E7E                              mov     edx, 7E0E2E33h  ; C1
  2773 00001A77 F7EA                                    imul    edx
  2774 00001A79 89D7                                    mov     edi, edx
  2775 00001A7B 8B4628                                  mov     eax, [esi+40]
  2776 00001A7E 2B4638                                  sub     eax, [esi+56]
  2777 00001A81 BA2E5E71A8                              mov     edx, 0A8715E2Eh ; negC7
  2778 00001A86 F7EA                                    imul    edx
  2779 00001A88 89D5                                    mov     ebp, edx
  2780 00001A8A 8B4608                                  mov     eax, [esi+8]
  2781 00001A8D 034638                                  add     eax, [esi+56]
  2782 00001A90 D1E0                                    shl     eax, 1
  2783 00001A92 BAB822B9AD                              mov     edx, 0ADB922B8h ; negC5
  2784 00001A97 F7EA                                    imul    edx
  2785 00001A99 89D1                                    mov     ecx, edx
  2786 00001A9B 8B4618                                  mov     eax, [esi+24]
  2787 00001A9E D1E0                                    shl     eax, 1
  2788 00001AA0 BAA2EBD96E                              mov     edx, 6ED9EBA2h  ; C3
  2789 00001AA5 F7EA                                    imul    edx
  2790 00001AA7 89E8                                    mov     eax, ebp
  2791 00001AA9 01F8                                    add     eax, edi
  2792 00001AAB 01D0                                    add     eax, edx
  2793 00001AAD A3[48290500]                            mov     [_@@@tmp], eax
  2794 00001AB2 89E8                                    mov     eax, ebp
  2795 00001AB4 29C8                                    sub     eax, ecx
  2796 00001AB6 29D0                                    sub     eax, edx
  2797 00001AB8 A3[68290500]                            mov     [_@@@tmp+20h], eax
  2798 00001ABD 89F8                                    mov     eax, edi
  2799 00001ABF 01C8                                    add     eax, ecx
  2800 00001AC1 29D0                                    sub     eax, edx
  2801 00001AC3 A3[78290500]                            mov     [_@@@tmp+30h], eax
  2802 00001AC8 8B4E04                                  mov     ecx, [esi+4]
  2803 00001ACB 8B5E34                                  mov     ebx, [esi+52]
  2804 00001ACE 8B7E24                                  mov     edi, [esi+36]
  2805 00001AD1 037E44                                  add     edi, [esi+68]
  2806 00001AD4 2B7E14                                  sub     edi, [esi+20]
  2807 00001AD7 8D2C4B                                  lea     ebp, [ebx+ecx*2]
  2808 00001ADA D1FD                                    sar     ebp, 1
  2809 00001ADC 29D9                                    sub     ecx, ebx
  2810 00001ADE 89C8                                    mov     eax, ecx
  2811 00001AE0 01F8                                    add     eax, edi
  2812 00001AE2 A3[8C290500]                            mov     [_@@@tmp+44h], eax
  2813 00001AE7 D1FF                                    sar     edi, 1
  2814 00001AE9 89C8                                    mov     eax, ecx
  2815 00001AEB 29F8                                    sub     eax, edi
  2816 00001AED A3[64290500]                            mov     [_@@@tmp+1Ch], eax
  2817 00001AF2 8B4614                                  mov     eax, [esi+20]   ; t0 = MULH(2*(src[2*2+j]+src[4*2+j]),C2)
  2818 00001AF5 034624                                  add     eax, [esi+36]
  2819 00001AF8 D1E0                                    shl     eax, 1
  2820 00001AFA BA0AD94778                              mov     edx, 7847D90Ah  ; C2
  2821 00001AFF F7EA                                    imul    edx
  2822 00001B01 89D3                                    mov     ebx, edx
  2823 00001B03 8B4624                                  mov     eax, [esi+36]   ; t1 = MULH(src[4*2+j]-src[8*2+j],negC8)
  2824 00001B06 2B4644                                  sub     eax, [esi+68]
  2825 00001B09 BA04CB8BD3                              mov     edx, 0D38BCB04h ; negC8
  2826 00001B0E F7EA                                    imul    edx
  2827 00001B10 89D1                                    mov     ecx, edx
  2828 00001B12 8B4614                                  mov     eax, [esi+20]   ; t2 = MULH(2*(src[2*2+j]+src[8*2+j]),negC4)
  2829 00001B15 034644                                  add     eax, [esi+68]
  2830 00001B18 D1E0                                    shl     eax, 1
  2831 00001B1A BA7541F29D                              mov     edx, 9DF24175h  ; negC4
  2832 00001B1F F7EA                                    imul    edx
  2833 00001B21 89E8                                    mov     eax, ebp        ; tmp[2+j] = t3+t0+t1
  2834 00001B23 01D8                                    add     eax, ebx
  2835 00001B25 01C8                                    add     eax, ecx
  2836 00001B27 A3[54290500]                            mov     [_@@@tmp+0Ch], eax
  2837 00001B2C 89E8                                    mov     eax, ebp        ; tmp[10+j] = t3-t0-t2
  2838 00001B2E 29D8                                    sub     eax, ebx
  2839 00001B30 29D0                                    sub     eax, edx
  2840 00001B32 A3[74290500]                            mov     [_@@@tmp+2Ch], eax
  2841 00001B37 89E8                                    mov     eax, ebp        ; tmp[14+j] = t3+t2-t1
  2842 00001B39 01D0                                    add     eax, edx
  2843 00001B3B 29C8                                    sub     eax, ecx
  2844 00001B3D A3[84290500]                            mov     [_@@@tmp+3Ch], eax
  2845 00001B42 8B462C                                  mov     eax, [esi+44]   ; tmp[4+j] = MULH(2*(src[5*2+j]+src[7*2+j]-src[1*2+j]),negC3)
  2846 00001B45 03463C                                  add     eax, [esi+60]
  2847 00001B48 2B460C                                  sub     eax, [esi+12]
  2848 00001B4B D1E0                                    shl     eax, 1
  2849 00001B4D BA5F142691                              mov     edx, 9126145Fh  ; negC3
  2850 00001B52 F7EA                                    imul    edx
  2851 00001B54 8915[5C290500]                          mov     [_@@@tmp+14h], edx
  2852 00001B5A 8B460C                                  mov     eax, [esi+12]   ; @@MULH @@t2,[esi+(1*2+j)*4],add,[esi+(5*2+j)*4],-,-              ,1,C1,-
  2853                                                                          ; t2 = MULH(2*(src[1*2+j],add,src[5*2+j]),-,-,1,C1)
  2854 00001B5D 03462C                                  add     eax, [esi+44]
  2855 00001B60 D1E0                                    shl     eax, 1
  2856 00001B62 BA332E0E7E                              mov     edx, 7E0E2E33h  ; C1
  2857 00001B67 F7EA                                    imul    edx
  2858 00001B69 89D7                                    mov     edi, edx
  2859 00001B6B 8B462C                                  mov     eax, [esi+44]   ; @@MULH @@t3,[esi+(5*2+j)*4],sub,[esi+(7*2+j)*4],-,-,
  2860                                                                          ; ,0,negC7,-
  2861                                                                          ;
  2862                                                                          ; t3 = MULH( src[5*2+j],sub,src[7*2+j],-,-,0,negC7)
  2863 00001B6E 2B463C                                  sub     eax, [esi+60]
  2864 00001B71 BA2E5E71A8                              mov     edx, 0A8715E2Eh ; negC7
  2865 00001B76 F7EA                                    imul    edx
  2866 00001B78 89D5                                    mov     ebp, edx
  2867 00001B7A 8B460C                                  mov     eax, [esi+12]   ; t1 = MULH(2*(src[1*2+j],add,src[7*2+j]),-,-,1,negC5)
  2868 00001B7D 03463C                                  add     eax, [esi+60]
  2869 00001B80 D1E0                                    shl     eax, 1          ; shift = 1
  2870 00001B82 BAB822B9AD                              mov     edx, 0ADB922B8h ; negC5
  2871 00001B87 F7EA                                    imul    edx
  2872 00001B89 89D1                                    mov     ecx, edx
  2873 00001B8B 8B461C                                  mov     eax, [esi+28]   ; t0 = MULH(2*src[3*2+j],-,-,-,-,1,C3)
  2874 00001B8E D1E0                                    shl     eax, 1
  2875 00001B90 BAA2EBD96E                              mov     edx, 6ED9EBA2h  ; C3
  2876 00001B95 F7EA                                    imul    edx
  2877 00001B97 89E8                                    mov     eax, ebp
  2878 00001B99 01F8                                    add     eax, edi
  2879 00001B9B 01D0                                    add     eax, edx
  2880 00001B9D A3[4C290500]                            mov     [_@@@tmp+4], eax
  2881 00001BA2 89E8                                    mov     eax, ebp
  2882 00001BA4 29C8                                    sub     eax, ecx
  2883 00001BA6 29D0                                    sub     eax, edx
  2884 00001BA8 A3[6C290500]                            mov     [_@@@tmp+24h], eax
  2885 00001BAD 89F8                                    mov     eax, edi        ; @@SUM [@@tmp+(12+j)*4],@@t2,add,@@t1,sub,edx
  2886 00001BAF 01C8                                    add     eax, ecx
  2887 00001BB1 29D0                                    sub     eax, edx
  2888 00001BB3 A3[7C290500]                            mov     [_@@@tmp+34h], eax
  2889 00001BB8 5F                                      pop     edi
  2890 00001BB9 5D                                      pop     ebp
  2891 00001BBA 5B                                      pop     ebx
  2892 00001BBB 56                                      push    esi             ; IRP j,0,1,2,3 ; j = 0
  2893 00001BBC 8B15[48290500]                          mov     edx, [_@@@tmp] ; t0 = [@@tmp+(j*4+0)*4]
  2894 00001BC2 8B35[4C290500]                          mov     esi, [_@@@tmp+4] ; t1 = [@@tmp+(j*4+1)*4]
  2895 00001BC8 A1[50290500]                            mov     eax, [_@@@tmp+8] ; t2 = [@@tmp+(j*4+2)*4]
  2896 00001BCD 8B0D[54290500]                          mov     ecx, [_@@@tmp+0Ch] ; t2 = [@@tmp+(j*4+3)*4]
  2897 00001BD3 29D0                                    sub     eax, edx        ; s2 = t2 - t0
  2898 00001BD5 8D1450                                  lea     edx, [eax+edx*2] ; s0 = t2 + t0
  2899 00001BD8 A3[40290500]                            mov     [_@@s2], eax ; @@MULH esi,eax ,-,-,-,-,1,icos36h_&j,-
  2900                                                                          ; s2 = MULH(s2*2, icos36h[j])
  2901 00001BDD 8915[3C290500]                          mov     [_@@s0], edx
  2902 00001BE3 29F1                                    sub     ecx, esi
  2903 00001BE5 8D0471                                  lea     eax, [ecx+esi*2]
  2904 00001BE8 D1E0                                    shl     eax, 1
  2905 00001BEA BA90953E40                              mov     edx, 403E9590h  ; icos36h_0
  2906 00001BEF F7EA                                    imul    edx
  2907 00001BF1 89D6                                    mov     esi, edx
  2908 00001BF3 89C8                                    mov     eax, ecx        ; @@MULH @@s3,ecx,-,-,-,-,shift_for_8minus&j,icos36h_8minus&j,-
  2909                                                                          ; s3 = MULL(s3,icos36[8-j]) ; <-- "MULL" with "icos36"
  2910 00001BF5 C1E004                                  shl     eax, 4
  2911 00001BF8 BA2C2ACA5B                              mov     edx, 5BCA2A2Ch  ; icos36h_8 (8-0)
  2912 00001BFD F7EA                                    imul    edx
  2913 00001BFF 8915[44290500]                          mov     [_@@s3], edx
  2914 00001C05 8B0D[3C290500]                          mov     ecx, [_@@s0]
  2915 00001C0B 29F1                                    sub     ecx, esi
  2916 00001C0D 8D3471                                  lea     esi, [ecx+esi*2]
  2917 00001C10 8B4524                                  mov     eax, [ebp+36]   ; @@MULH [edi+(9+j)*SBLIMIT*4],[ebp+(9+j)*4],
  2918                                                                          ; -,-,-,-,0,ecx,[ebx+(9+j)*4]
  2919                                                                          ; out[(9+j)*SBLIMIT] = MULH(t0, win[9+j])+buf[9+j]
  2920 00001C13 F7E9                                    imul    ecx
  2921 00001C15 035324                                  add     edx, [ebx+36]   ; [ebx+(9+j)*4]
  2922 00001C18 899780040000                            mov     [edi+1152], edx ; SBLIMIT=32 ; 9*SBLIMIT*4 = 1152
  2923 00001C1E 8B4520                                  mov     eax, [ebp+32]   ; @@MULH [edi+(8-j)*SBLIMIT*4],[ebp+(8-j)*4]
  2924                                                                          ; ,-,-,-,-,0,ecx,[ebx+(8-j)*4]
  2925 00001C21 F7E9                                    imul    ecx
  2926 00001C23 035320                                  add     edx, [ebx+32]
  2927 00001C26 899700040000                            mov     [edi+1024], edx ; SBLIMIT=32 ; 8*SBLIMIT*4 = 1024
  2928 00001C2C 8B456C                                  mov     eax, [ebp+108]
  2929 00001C2F F7EE                                    imul    esi
  2930 00001C31 895324                                  mov     [ebx+36], edx
  2931 00001C34 8B4568                                  mov     eax, [ebp+104]  ; @@MULH [ebx+(8-j)*4],[ebp+(8-j+18)*4],-,-,-,-,0,esi,-
  2932 00001C37 F7EE                                    imul    esi
  2933 00001C39 895320                                  mov     [ebx+32], edx
  2934 00001C3C 8B0D[40290500]                          mov     ecx, [_@@s2]
  2935 00001C42 8B35[44290500]                          mov     esi, [_@@s3]
  2936 00001C48 29F1                                    sub     ecx, esi        ; t2 = s2 - s3
  2937 00001C4A 8D3471                                  lea     esi, [ecx+esi*2] ; t3 = s2 + s3
  2938 00001C4D 8B4500                                  mov     eax, [ebp+0]    ; @@MULH [edi+(0+j)*SBLIMIT*4],[ebp+(0+j)*4],
  2939                                                                          ; -,-,-,-,0,ecx,[ebx+(0+j)*4]
  2940 00001C50 F7E9                                    imul    ecx
  2941 00001C52 0313                                    add     edx, [ebx]
  2942 00001C54 8917                                    mov     [edi], edx
  2943 00001C56 8B4544                                  mov     eax, [ebp+68]   ; @@MULH [edi+(17-j)*SBLIMIT*4],[ebp+(17-j)*4]
  2944                                                                          ; ,-,-,-,-,0,ecx,[ebx+(17-j)*4]
  2945 00001C59 F7E9                                    imul    ecx
  2946 00001C5B 035344                                  add     edx, [ebx+68]
  2947 00001C5E 899780080000                            mov     [edi+2176], edx ; 17*SBLIMIT*4 = 2176
  2948 00001C64 8B4548                                  mov     eax, [ebp+72]   ; @@MULH [ebx+(0+j)*4],[ebp+(0+j+18)*4],-,-,-,-,0,esi,-
  2949 00001C67 F7EE                                    imul    esi
  2950 00001C69 8913                                    mov     [ebx], edx
  2951 00001C6B 8B858C000000                            mov     eax, [ebp+140]  ; @@MULH [ebx+(17-j)*4],[ebp+(17-j+18)*4],-,-,-,-,0,esi,-
  2952 00001C71 F7EE                                    imul    esi
  2953 00001C73 895344                                  mov     [ebx+68], edx
  2954 00001C76 8B15[58290500]                          mov     edx, [_@@@tmp+10h] ; IRP j,0,1,2,3 ; j = 1
  2955 00001C7C 8B35[5C290500]                          mov     esi, [_@@@tmp+14h]
  2956 00001C82 A1[60290500]                            mov     eax, [_@@@tmp+18h]
  2957 00001C87 8B0D[64290500]                          mov     ecx, [_@@@tmp+1Ch]
  2958 00001C8D 29D0                                    sub     eax, edx
  2959 00001C8F 8D1450                                  lea     edx, [eax+edx*2]
  2960 00001C92 A3[40290500]                            mov     [_@@s2], eax
  2961 00001C97 8915[3C290500]                          mov     [_@@s0], edx
  2962 00001C9D 29F1                                    sub     ecx, esi
  2963 00001C9F 8D0471                                  lea     eax, [ecx+esi*2]
  2964 00001CA2 D1E0                                    shl     eax, 1
  2965 00001CA4 BA07F74142                              mov     edx, 4241F707h  ; icos36h_1
  2966 00001CA9 F7EA                                    imul    edx
  2967 00001CAB 89D6                                    mov     esi, edx
  2968 00001CAD 89C8                                    mov     eax, ecx
  2969 00001CAF C1E002                                  shl     eax, 2
  2970 00001CB2 BA1E75A37B                              mov     edx, 7BA3751Eh  ; icos36h_7 (8-1)
  2971 00001CB7 F7EA                                    imul    edx
  2972 00001CB9 8915[44290500]                          mov     [_@@s3], edx
  2973 00001CBF 8B0D[3C290500]                          mov     ecx, [_@@s0]
  2974 00001CC5 29F1                                    sub     ecx, esi
  2975 00001CC7 8D3471                                  lea     esi, [ecx+esi*2]
  2976 00001CCA 8B4528                                  mov     eax, [ebp+40]
  2977 00001CCD F7E9                                    imul    ecx
  2978 00001CCF 035328                                  add     edx, [ebx+40]
  2979 00001CD2 899700050000                            mov     [edi+1280], edx
  2980 00001CD8 8B451C                                  mov     eax, [ebp+28]
  2981 00001CDB F7E9                                    imul    ecx
  2982 00001CDD 03531C                                  add     edx, [ebx+28]
  2983 00001CE0 899780030000                            mov     [edi+896], edx
  2984 00001CE6 8B4570                                  mov     eax, [ebp+112]
  2985 00001CE9 F7EE                                    imul    esi
  2986 00001CEB 895328                                  mov     [ebx+40], edx
  2987 00001CEE 8B4564                                  mov     eax, [ebp+100]
  2988 00001CF1 F7EE                                    imul    esi
  2989 00001CF3 89531C                                  mov     [ebx+28], edx
  2990 00001CF6 8B0D[40290500]                          mov     ecx, [_@@s2]
  2991 00001CFC 8B35[44290500]                          mov     esi, [_@@s3]
  2992 00001D02 29F1                                    sub     ecx, esi
  2993 00001D04 8D3471                                  lea     esi, [ecx+esi*2]
  2994 00001D07 8B4504                                  mov     eax, [ebp+4]
  2995 00001D0A F7E9                                    imul    ecx
  2996 00001D0C 035304                                  add     edx, [ebx+4]
  2997 00001D0F 899780000000                            mov     [edi+128], edx
  2998 00001D15 8B4540                                  mov     eax, [ebp+64]
  2999 00001D18 F7E9                                    imul    ecx
  3000 00001D1A 035340                                  add     edx, [ebx+64]
  3001 00001D1D 899700080000                            mov     [edi+2048], edx
  3002 00001D23 8B454C                                  mov     eax, [ebp+76]
  3003 00001D26 F7EE                                    imul    esi
  3004 00001D28 895304                                  mov     [ebx+4], edx
  3005 00001D2B 8B8588000000                            mov     eax, [ebp+136]
  3006 00001D31 F7EE                                    imul    esi
  3007 00001D33 895340                                  mov     [ebx+64], edx
  3008 00001D36 8B15[68290500]                          mov     edx, [_@@@tmp+20h] ; IRP j,0,1,2,3 ; j = 2
  3009 00001D3C 8B35[6C290500]                          mov     esi, [_@@@tmp+24h]
  3010 00001D42 A1[70290500]                            mov     eax, [_@@@tmp+28h]
  3011 00001D47 8B0D[74290500]                          mov     ecx, [_@@@tmp+2Ch]
  3012 00001D4D 29D0                                    sub     eax, edx
  3013 00001D4F 8D1450                                  lea     edx, [eax+edx*2]
  3014 00001D52 A3[40290500]                            mov     [_@@s2], eax
  3015 00001D57 8915[3C290500]                          mov     [_@@s0], edx
  3016 00001D5D 29F1                                    sub     ecx, esi
  3017 00001D5F 8D0471                                  lea     eax, [ecx+esi*2]
  3018 00001D62 D1E0                                    shl     eax, 1
  3019 00001D64 BA6CBE9D46                              mov     edx, 469DBE6Ch  ; icos36h_2
  3020 00001D69 F7EA                                    imul    edx
  3021 00001D6B 89D6                                    mov     esi, edx
  3022 00001D6D 89C8                                    mov     eax, ecx
  3023 00001D6F C1E002                                  shl     eax, 2
  3024 00001D72 BA62ECB74B                              mov     edx, 4BB7EC62h  ; icos36h_6 (8-2)
  3025 00001D77 F7EA                                    imul    edx
  3026 00001D79 8915[44290500]                          mov     [_@@s3], edx
  3027 00001D7F 8B0D[3C290500]                          mov     ecx, [_@@s0]
  3028 00001D85 29F1                                    sub     ecx, esi
  3029 00001D87 8D3471                                  lea     esi, [ecx+esi*2]
  3030 00001D8A 8B452C                                  mov     eax, [ebp+44]
  3031 00001D8D F7E9                                    imul    ecx
  3032 00001D8F 03532C                                  add     edx, [ebx+44]
  3033 00001D92 899780050000                            mov     [edi+1408], edx
  3034 00001D98 8B4518                                  mov     eax, [ebp+24]
  3035 00001D9B F7E9                                    imul    ecx
  3036 00001D9D 035318                                  add     edx, [ebx+24]
  3037 00001DA0 899700030000                            mov     [edi+768], edx
  3038 00001DA6 8B4574                                  mov     eax, [ebp+116]
  3039 00001DA9 F7EE                                    imul    esi
  3040 00001DAB 89532C                                  mov     [ebx+44], edx
  3041 00001DAE 8B4560                                  mov     eax, [ebp+96]
  3042 00001DB1 F7EE                                    imul    esi
  3043 00001DB3 895318                                  mov     [ebx+24], edx
  3044 00001DB6 8B0D[40290500]                          mov     ecx, [_@@s2]
  3045 00001DBC 8B35[44290500]                          mov     esi, [_@@s3]
  3046 00001DC2 29F1                                    sub     ecx, esi
  3047 00001DC4 8D3471                                  lea     esi, [ecx+esi*2]
  3048 00001DC7 8B4508                                  mov     eax, [ebp+8]
  3049 00001DCA F7E9                                    imul    ecx
  3050 00001DCC 035308                                  add     edx, [ebx+8]
  3051 00001DCF 899700010000                            mov     [edi+256], edx
  3052 00001DD5 8B453C                                  mov     eax, [ebp+60]
  3053 00001DD8 F7E9                                    imul    ecx
  3054 00001DDA 03533C                                  add     edx, [ebx+60]
  3055 00001DDD 899780070000                            mov     [edi+1920], edx
  3056 00001DE3 8B4550                                  mov     eax, [ebp+80]
  3057 00001DE6 F7EE                                    imul    esi
  3058 00001DE8 895308                                  mov     [ebx+8], edx
  3059 00001DEB 8B8584000000                            mov     eax, [ebp+132]
  3060 00001DF1 F7EE                                    imul    esi
  3061 00001DF3 89533C                                  mov     [ebx+60], edx
  3062 00001DF6 8B15[78290500]                          mov     edx, [_@@@tmp+30h] ; IRP j,0,1,2,3 ; j = 3
  3063 00001DFC 8B35[7C290500]                          mov     esi, [_@@@tmp+34h]
  3064 00001E02 A1[80290500]                            mov     eax, [_@@@tmp+38h]
  3065 00001E07 8B0D[84290500]                          mov     ecx, [_@@@tmp+3Ch]
  3066 00001E0D 29D0                                    sub     eax, edx
  3067 00001E0F 8D1450                                  lea     edx, [eax+edx*2]
  3068 00001E12 A3[40290500]                            mov     [_@@s2], eax
  3069 00001E17 8915[3C290500]                          mov     [_@@s0], edx
  3070 00001E1D 29F1                                    sub     ecx, esi
  3071 00001E1F 8D0471                                  lea     eax, [ecx+esi*2]
  3072 00001E22 D1E0                                    shl     eax, 1
  3073 00001E24 BABE2B214E                              mov     edx, 4E212BBEh  ; icos36h_3
  3074 00001E29 F7EA                                    imul    edx
  3075 00001E2B 89D6                                    mov     esi, edx
  3076 00001E2D 89C8                                    mov     eax, ecx
  3077 00001E2F D1E0                                    shl     eax, 1
  3078 00001E31 BADFA1946F                              mov     edx, 6F94A1DFh  ; icos36h_5 (8-3)
  3079 00001E36 F7EA                                    imul    edx
  3080 00001E38 8915[44290500]                          mov     [_@@s3], edx
  3081 00001E3E 8B0D[3C290500]                          mov     ecx, [_@@s0]
  3082 00001E44 29F1                                    sub     ecx, esi
  3083 00001E46 8D3471                                  lea     esi, [ecx+esi*2]
  3084 00001E49 8B4530                                  mov     eax, [ebp+48]
  3085 00001E4C F7E9                                    imul    ecx
  3086 00001E4E 035330                                  add     edx, [ebx+48]
  3087 00001E51 899700060000                            mov     [edi+1536], edx
  3088 00001E57 8B4514                                  mov     eax, [ebp+20]
  3089 00001E5A F7E9                                    imul    ecx
  3090 00001E5C 035314                                  add     edx, [ebx+20]
  3091 00001E5F 899780020000                            mov     [edi+640], edx
  3092 00001E65 8B4578                                  mov     eax, [ebp+120]
  3093 00001E68 F7EE                                    imul    esi
  3094 00001E6A 895330                                  mov     [ebx+30h], edx
  3095 00001E6D 8B455C                                  mov     eax, [ebp+92]
  3096 00001E70 F7EE                                    imul    esi
  3097 00001E72 895314                                  mov     [ebx+20], edx
  3098 00001E75 8B0D[40290500]                          mov     ecx, [_@@s2]
  3099 00001E7B 8B35[44290500]                          mov     esi, [_@@s3]
  3100 00001E81 29F1                                    sub     ecx, esi
  3101 00001E83 8D3471                                  lea     esi, [ecx+esi*2]
  3102 00001E86 8B450C                                  mov     eax, [ebp+12]
  3103 00001E89 F7E9                                    imul    ecx
  3104 00001E8B 03530C                                  add     edx, [ebx+12]
  3105 00001E8E 899780010000                            mov     [edi+384], edx
  3106 00001E94 8B4538                                  mov     eax, [ebp+56]
  3107 00001E97 F7E9                                    imul    ecx
  3108 00001E99 035338                                  add     edx, [ebx+56]
  3109 00001E9C 899700070000                            mov     [edi+1792], edx
  3110 00001EA2 8B4554                                  mov     eax, [ebp+84]
  3111 00001EA5 F7EE                                    imul    esi
  3112 00001EA7 89530C                                  mov     [ebx+12], edx
  3113 00001EAA 8B8580000000                            mov     eax, [ebp+128]
  3114 00001EB0 F7EE                                    imul    esi
  3115 00001EB2 895338                                  mov     [ebx+56], edx
  3116 00001EB5 8B0D[88290500]                          mov     ecx, [_@@@tmp+40h] ; IRP j,4
  3117                                                                          ; [@@tmp+(j*4+0)*4]
  3118 00001EBB A1[8C290500]                            mov     eax, [_@@@tmp+44h] ; [@@tmp+(j*4+1)*4]
  3119 00001EC0 D1E0                                    shl     eax, 1
  3120 00001EC2 BA9A79825A                              mov     edx, 5A82799Ah  ; icos36h_4 (8-4)
  3121 00001EC7 F7EA                                    imul    edx
  3122 00001EC9 29D1                                    sub     ecx, edx
  3123 00001ECB 8D3451                                  lea     esi, [ecx+edx*2]
  3124 00001ECE 8B4534                                  mov     eax, [ebp+52]   ; @@MULH [edi+(9+j)*SBLIMIT*4],[ebp+(9+j)*4],
  3125                                                                          ; -,-,-,-,0,ecx,[ebx+(9+j)*4]
  3126                                                                          ; out[(9+4)*SBLIMIT] = MULH(t0,win[9+4])+buf[9+4]
  3127 00001ED1 F7E9                                    imul    ecx
  3128 00001ED3 035334                                  add     edx, [ebx+52]
  3129 00001ED6 899780060000                            mov     [edi+1664], edx ; 13*SBLIMIT*4 = 1664
  3130 00001EDC 8B4510                                  mov     eax, [ebp+16]   ; @MULH [edi+(8-j)*SBLIMIT*4],[ebp+(8-j)*4],
  3131                                                                          ; -,-,-,-,0,ecx,[ebx+(8-j)*4]
  3132 00001EDF F7E9                                    imul    ecx
  3133 00001EE1 035310                                  add     edx, [ebx+16]
  3134 00001EE4 899700020000                            mov     [edi+512], edx
  3135 00001EEA 8B457C                                  mov     eax, [ebp+124]  ; @@MULH [ebx+(9+j)*4],[ebp+(9+j+18)*4] ,-,-,-,-,0,esi,-
  3136 00001EED F7EE                                    imul    esi
  3137 00001EEF 895334                                  mov     [ebx+52], edx
  3138 00001EF2 8B4558                                  mov     eax, [ebp+88]   ; @@MULH [ebx+(8-j)*4],[ebp+(8-j+18)*4],-,-,-,-,0,esi,-
  3139 00001EF5 F7EE                                    imul    esi
  3140 00001EF7 895310                                  mov     [ebx+16], edx
  3141 00001EFA 5E                                      pop     esi
  3142 00001EFB C3                                      retn
  3143                                  
  3144                                  
  3145                                  ; =============== S U B R O U T I N E =======================================
  3146                                  
  3147                                  
  3148                                  mp3_imdct12:
  3149 00001EFC 8B06                                    mov     eax, [esi]      ; in: esi=src - out: [out2_...]
  3150 00001EFE A3[90290500]                            mov     [_@@tmp0], eax  ; IRP nn,0,1,2,3,4,5
  3151                                                                          ;  @@tmp&nn rd 1
  3152                                                                          ; ENDM
  3153                                                                          ; mov  eax,[esi+0*3*4] ; = src[0*3]
  3154 00001F03 8B560C                                  mov     edx, [esi+12]   ; [esi+1*3*4] ; = src[1*3]
  3155 00001F06 01D0                                    add     eax, edx        ; = src[0*3]+src[1*3]
  3156 00001F08 A3[94290500]                            mov     [_@@tmp1], eax
  3157 00001F0D 8B4618                                  mov     eax, [esi+24]
  3158 00001F10 01C2                                    add     edx, eax
  3159 00001F12 8915[98290500]                          mov     [_@@tmp2], edx
  3160 00001F18 8B5624                                  mov     edx, [esi+36]   ; [esi+3*3*4]
  3161 00001F1B 01D0                                    add     eax, edx
  3162 00001F1D A3[9C290500]                            mov     [_@@tmp3], eax
  3163 00001F22 8B4630                                  mov     eax, [esi+48]
  3164 00001F25 01C2                                    add     edx, eax
  3165 00001F27 8915[A0290500]                          mov     [_@@tmp4], edx
  3166 00001F2D 8B563C                                  mov     edx, [esi+60]   ; [esi+5*3*4]
  3167 00001F30 01D0                                    add     eax, edx        ; = src[4*3]+src[5*3]
  3168 00001F32 0305[9C290500]                          add     eax, [_@@tmp3]
  3169 00001F38 A3[A4290500]                            mov     [_@@tmp5], eax  ; tmp5 = src[4*3]+src[5*3]+tmp3
  3170 00001F3D 8B15[94290500]                          mov     edx, [_@@tmp1]
  3171 00001F43 0115[9C290500]                          add     [_@@tmp3], edx
  3172 00001F49 A1[98290500]                            mov     eax, [_@@tmp2]  ; @@MULH @@tmp2,@@tmp2,-,-,-,-,1,C3,-
  3173                                                                          ; tmp2 = MULH(2*tmp2,C3)
  3174 00001F4E D1E0                                    shl     eax, 1
  3175 00001F50 BAA2EBD96E                              mov     edx, 6ED9EBA2h  ; C3
  3176 00001F55 F7EA                                    imul    edx
  3177 00001F57 8915[98290500]                          mov     [_@@tmp2], edx
  3178 00001F5D A1[9C290500]                            mov     eax, [_@@tmp3]  ; @@MULH @@tmp3,@@tmp3,-,-,-,-,2,C3,-
  3179                                                                          ; tmp3 = MULH(4*tmp3,C3)
  3180 00001F62 C1E002                                  shl     eax, 2
  3181 00001F65 BAA2EBD96E                              mov     edx, 6ED9EBA2h  ; C3
  3182 00001F6A F7EA                                    imul    edx
  3183 00001F6C 8915[9C290500]                          mov     [_@@tmp3], edx
  3184 00001F72 A1[94290500]                            mov     eax, [_@@tmp1]  ; @@MULH edx,@@tmp1,sub,@@tmp5,-,-,1,icos36h_4,-
  3185 00001F77 2B05[A4290500]                          sub     eax, [_@@tmp5]  ; t2 = MULH(2*(tmp1-tmp5),icos36h_4)
  3186 00001F7D D1E0                                    shl     eax, 1
  3187 00001F7F BA9A79825A                              mov     edx, 5A82799Ah  ; icos36h_4
  3188 00001F84 F7EA                                    imul    edx
  3189 00001F86 A1[90290500]                            mov     eax, [_@@tmp0]  ; @@SUM eax,@@tmp0,sub,@@tmp4,-,-
  3190 00001F8B 2B05[A0290500]                          sub     eax, [_@@tmp4]  ; t1 = tmp0 - tmp4
  3191 00001F91 29D0                                    sub     eax, edx        ; @@CAST macro t1,t2,dst0,dst1,dst2,dst3
  3192                                                                          ;   sub  t1,t2                           ;t1-t2
  3193                                                                          ;   lea  t2,[t1+t2*2]                    ;t1+t2
  3194                                                                          ;   mov  dword ptr [mp3_out2_a&dst0],t1  ;t1-t2
  3195                                                                          ;   mov  dword ptr [mp3_out2_b&dst0],t2  ;t1+t2
  3196                                                                          ; endm
  3197 00001F93 8D1450                                  lea     edx, [eax+edx*2] ; @@CAST eax,edx,1,4,7,10
  3198                                                                          ; out2[1,4,7,10]=t1-t2,t1-t2,t1+t2,t1+t2
  3199 00001F96 A3[AC290500]                            mov     [mp3_out2_a1], eax
  3200 00001F9B 8915[B8290500]                          mov     [mp3_out2_b1], edx
  3201 00001FA1 A1[A0290500]                            mov     eax, [_@@tmp4]
  3202 00001FA6 8B15[94290500]                          mov     edx, [_@@tmp1]
  3203 00001FAC D1F8                                    sar     eax, 1
  3204 00001FAE D1E2                                    shl     edx, 1
  3205 00001FB0 0105[90290500]                          add     [_@@tmp0], eax  ; tmp0 = tmp0 + tmp4/2
  3206 00001FB6 0115[A4290500]                          add     [_@@tmp5], edx  ; tmp5 = tmp5 + tmp1*2
  3207 00001FBC A1[A4290500]                            mov     eax, [_@@tmp5]  ; @@MULH edx,@@tmp5,add,@@tmp3,-,-,0,icos36h_1,-
  3208 00001FC1 0305[9C290500]                          add     eax, [_@@tmp3]
  3209 00001FC7 BA07F74142                              mov     edx, 4241F707h  ; icos36h_1
  3210 00001FCC F7EA                                    imul    edx
  3211 00001FCE A1[90290500]                            mov     eax, [_@@tmp0]  ; @@SUM eax,@@tmp0,add,@@tmp2,-,-
  3212 00001FD3 0305[98290500]                          add     eax, [_@@tmp2]
  3213 00001FD9 29D0                                    sub     eax, edx        ; @@CAST eax,edx,2,3,8,9
  3214 00001FDB 8D1450                                  lea     edx, [eax+edx*2]
  3215 00001FDE A3[B0290500]                            mov     [mp3_out2_a2], eax
  3216 00001FE3 8915[BC290500]                          mov     [mp3_out2_b2], edx
  3217 00001FE9 A1[A4290500]                            mov     eax, [_@@tmp5]  ; @@MULH edx,@@tmp5,sub,@@tmp3,-,-,1,icos36h_7,-
  3218 00001FEE 2B05[9C290500]                          sub     eax, [_@@tmp3]
  3219 00001FF4 D1E0                                    shl     eax, 1
  3220 00001FF6 BA1E75A37B                              mov     edx, 7BA3751Eh  ; icos36h_7
  3221 00001FFB F7EA                                    imul    edx
  3222 00001FFD A1[90290500]                            mov     eax, [_@@tmp0]  ; @@SUM eax,@@tmp0,sub,@@tmp2,-,-
  3223 00002002 2B05[98290500]                          sub     eax, [_@@tmp2]
  3224 00002008 29D0                                    sub     eax, edx        ; @@CAST eax,edx,0,5,6,11
  3225 0000200A 8D1450                                  lea     edx, [eax+edx*2]
  3226 0000200D A3[A8290500]                            mov     [mp3_out2_a0], eax
  3227 00002012 8915[B4290500]                          mov     [mp3_out2_b0], edx
  3228 00002018 C3                                      retn
  3229                                  
  3230                                  
  3231                                  ; =============== S U B R O U T I N E =======================================
  3232                                  
  3233                                  
  3234                                  mp3_compute_imdct:
  3235 00002019 F605[54760000]10                        test    byte [cpuid_flags], 10h ; in: ebx=granule
  3236 00002020 740E                                    jz      short .no_rdtsc_supported ; timelog_start rdtsc_imdct
  3237 00002022 0F31                                    rdtsc
  3238 00002024 2905[6C770000]                          sub     [rdtsc_imdct], eax
  3239 0000202A 1915[70770000]                          sbb     [rdtsc_imdct+4], edx
  3240                                  
  3241                                  .no_rdtsc_supported:
  3242 00002030 53                                      push    ebx
  3243 00002031 8B4B60                                  mov     ecx, [ebx+96]   ; [ebx+$mp3gr_num_nonzero_hybrids_div9]
  3244 00002034 6BC109                                  imul    eax, ecx, 9
  3245 00002037 8DBC83A0000000                          lea     edi, [ebx+eax*4+160] ; [ebx+$mp3gr_sb_hybrid+eax*4]
  3246 0000203E E322                                    jecxz   .breakout
  3247                                  
  3248                                  .scan_zero_lop:
  3249 00002040 83EF24                                  sub     edi, 36         ; index-9
  3250 00002043 8B07                                    mov     eax, [edi]      ; [edi+0*4]
  3251 00002045 0B4704                                  or      eax, [edi+4]
  3252 00002048 0B4708                                  or      eax, [edi+8]
  3253 0000204B 0B470C                                  or      eax, [edi+12]
  3254 0000204E 0B4710                                  or      eax, [edi+16]
  3255 00002051 0B4714                                  or      eax, [edi+20]
  3256 00002054 0B4718                                  or      eax, [edi+24]
  3257 00002057 0B471C                                  or      eax, [edi+28]
  3258 0000205A 0B4720                                  or      eax, [edi+32]   ; [edi+8*4]
  3259 0000205D 7503                                    jnz     short .breakout
  3260 0000205F 49                                      dec     ecx
  3261 00002060 75DE                                    jnz     short .scan_zero_lop
  3262                                  
  3263                                  .breakout:
  3264 00002062 41                                      inc     ecx             ; div9+1
  3265 00002063 D1E9                                    shr     ecx, 1          ; div18
  3266 00002065 890D[D4290500]                          mov     [_@@sblimit], ecx
  3267 0000206B 837B2C02                                cmp     dword [ebx+44], 2 ; [ebx+$mp3gr_block_type]
  3268 0000206F 7505                                    jnz     short .this_long_end
  3269 00002071 8B4B30                                  mov     ecx, [ebx+48]   ; [ebx+$mp3gr_switch_point]
  3270 00002074 D1E1                                    shl     ecx, 1          ; 0,1 --> 0,2
  3271                                  
  3272                                  .this_long_end:
  3273 00002076 890D[D0290500]                          mov     [_@@mdct_long_end], ecx
  3274 0000207C 8B4330                                  mov     eax, [ebx+48]   ; [ebx+$mp3gr_switch_point]
  3275 0000207F A3[D8290500]                            mov     [_@@switch_point], eax
  3276 00002084 8B432C                                  mov     eax, [ebx+44]   ; [ebx+$mp3gr_block_type]
  3277 00002087 69C090000000                            imul    eax, 144        ; 1*36*4
  3278 0000208D A3[CC290500]                            mov     [_@@www], eax
  3279 00002092 8B0D[A0F40000]                          mov     ecx, [mp3_curr_channel]
  3280 00002098 A1[A4F40000]                            mov     eax, [mp3_curr_granule]
  3281 0000209D 69C900120000                            imul    ecx, 4608       ; 36*SBLIMIT*4 ; channel ; sb_samples[ch][gr*18]
  3282 000020A3 69C000090000                            imul    eax, 2304       ; 18*SBLIMIT*4 ; frame=granule*18
  3283 000020A9 8DBC01[00BE0000]                        lea     edi, [mp3_sb_samples+ecx+eax]
  3284 000020B0 8DB3A0000000                            lea     esi, [ebx+160]  ; [ebx+$mp3gr_sb_hybrid]
  3285 000020B6 A1[A0F40000]                            mov     eax, [mp3_curr_channel]
  3286 000020BB 69C000090000                            imul    eax, 2304       ; SBLIMIT*18*4
  3287 000020C1 8D98[00E20000]                          lea     ebx, [mp3_mdct_buf+eax]
  3288 000020C7 F605[54760000]10                        test    byte [cpuid_flags], 10h
  3289 000020CE 740E                                    jz      short .no_rdtsc_supported@ ; timelog_start rdtsc_imdct36
  3290 000020D0 0F31                                    rdtsc
  3291 000020D2 2905[84770000]                          sub     [rdtsc_imdct36], eax
  3292 000020D8 1915[88770000]                          sbb     [rdtsc_imdct36+4], edx
  3293                                  
  3294                                  .no_rdtsc_supported@:
  3295 000020DE C705[C8290500]0000-                     mov	dword [_@@@JJJ], 0
  3295 000020E6 0000               
  3296 000020E8 833D[D0290500]00                        cmp	dword [_@@mdct_long_end], 0
  3297 000020EF 744D                                    jz      short .imdct36_done
  3298                                  
  3299                                  .imdct36_lop:
  3300 000020F1 BD[30E30400]                            mov	ebp, mp3_mdct_win ; for j=0 to mdct_long_end-1
  3301 000020F6 833D[C8290500]02                        cmp	dword [_@@@JJJ], 2
  3302 000020FD 19C0                                    sbb	eax, eax
  3303 000020FF 2305[D8290500]                          and	eax, [_@@switch_point]
  3304 00002105 7506                                    jnz	short .this_window ; force window 0
  3305 00002107 032D[CC290500]                          add	ebp, [_@@www] ; mdct_win
  3306                                  
  3307                                  .this_window:
  3308 0000210D A1[C8290500]                            mov	eax, [_@@@JJJ]
  3309 00002112 D1E8                                    shr	eax, 1          ; cy=0,1
  3310 00002114 19C0                                    sbb	eax, eax        ; eax=0,FFFFFFFFh
  3311 00002116 2540020000                              and	eax, 576        ; 4*36*4
  3312 0000211B 01C5                                    add	ebp, eax
  3313 0000211D E808F8FFFF                              call	mp3_imdct36
  3314 00002122 83C704                                  add	edi, 4          ; 1*4 ; dst
  3315 00002125 83C648                                  add	esi, 72         ; 18*4 ; sb_hybrid
  3316 00002128 83C348                                  add	ebx, 72         ; mdct_buf ; next
  3317 0000212B FF05[C8290500]                          inc	dword [_@@@JJJ]
  3318 00002131 A1[C8290500]                            mov	eax, [_@@@JJJ]
  3319 00002136 3B05[D0290500]                          cmp	eax, [_@@mdct_long_end]
  3320 0000213C 72B3                                    jb	short .imdct36_lop
  3321                                  
  3322                                  .imdct36_done:
  3323 0000213E F605[54760000]10                        test    byte [cpuid_flags], 10h
  3324 00002145 740E                                    jz      short .no_rdtsc_supported@@ ; timelog_end rdtsc_imdct36
  3325 00002147 0F31                                    rdtsc
  3326 00002149 0105[84770000]                          add     [rdtsc_imdct36], eax
  3327 0000214F 1115[88770000]                          adc     [rdtsc_imdct36+4], edx
  3328                                  
  3329                                  .no_rdtsc_supported@@:
  3330 00002155 F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_imdct12
  3331 0000215C 740E                                    jz      short .no_rdtsc_supported@@@
  3332 0000215E 0F31                                    rdtsc
  3333 00002160 2905[9C770000]                          sub     [rdtsc_imdct12], eax
  3334 00002166 1915[A0770000]                          sbb     [rdtsc_imdct12+4], edx
  3335                                  
  3336                                  .no_rdtsc_supported@@@:
  3337 0000216C A1[C8290500]                            mov     eax, [_@@@JJJ]
  3338 00002171 3B05[D4290500]                          cmp     eax, [_@@sblimit]
  3339 00002177 0F83D7020000                            jnb     .imdct12_done
  3340                                  
  3341                                  .imdct12_lop:
  3342 0000217D BD[50E40400]                            mov     ebp, (mp3_mdct_win+120h) ; for j=mdct_long_end to sblimit-1
  3343 00002182 A1[C8290500]                            mov     eax, [_@@@JJJ]
  3344 00002187 D1E8                                    shr     eax, 1          ; cy=0,1
  3345 00002189 19C0                                    sbb     eax, eax        ; eax=0,FFFFFFFFh
  3346 0000218B 2540020000                              and     eax, 576        ; 4*36*4
  3347 00002190 01C5                                    add     ebp, eax        ; mdct_win
  3348 00002192 8B03                                    mov     eax, [ebx]      ; IRP i,0,1,2,3,4,5
  3349 00002194 8907                                    mov     [edi], eax      ; @@SUM [edi+i*SBLIMIT*4],[ebx+(i+0)*4],-,-,-,-
  3350 00002196 8B4304                                  mov     eax, [ebx+4]
  3351 00002199 898780000000                            mov     [edi+128], eax
  3352 0000219F 8B4308                                  mov     eax, [ebx+8]
  3353 000021A2 898700010000                            mov     [edi+256], eax
  3354 000021A8 8B430C                                  mov     eax, [ebx+12]
  3355 000021AB 898780010000                            mov     [edi+384], eax
  3356 000021B1 8B4310                                  mov     eax, [ebx+16]
  3357 000021B4 898700020000                            mov     [edi+512], eax
  3358 000021BA 8B4314                                  mov     eax, [ebx+20]
  3359 000021BD 898780020000                            mov     [edi+640], eax  ; ENDM
  3360 000021C3 81C700030000                            add     edi, 768        ; 6*SBLIMIT*4
  3361 000021C9 E82EFDFFFF                              call    mp3_imdct12
  3362 000021CE A1[A8290500]                            mov     eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5
  3363 000021D3 8B5500                                  mov     edx, [ebp+0]    ; @@MULH [edi+i*SBLIMIT*4],[mp3_out2_a&i],
  3364                                                                          ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(1*6+i)*4]
  3365 000021D6 F7EA                                    imul    edx
  3366 000021D8 035318                                  add     edx, [ebx+24]
  3367 000021DB 8917                                    mov     [edi], edx
  3368 000021DD A1[B4290500]                            mov     eax, [mp3_out2_b0] ; @@MULH [ebx+(2*6+i)*4],[mp3_out2_b&i],
  3369                                                                          ; -,-,-,-,0,[ebp+(i+6)*4],-
  3370 000021E2 8B5518                                  mov     edx, [ebp+24]
  3371 000021E5 F7EA                                    imul    edx
  3372 000021E7 895330                                  mov     [ebx+48], edx
  3373 000021EA A1[AC290500]                            mov     eax, [mp3_out2_a1] ; i = 1
  3374 000021EF 8B5504                                  mov     edx, [ebp+4]
  3375 000021F2 F7EA                                    imul    edx
  3376 000021F4 03531C                                  add     edx, [ebx+28]
  3377 000021F7 899780000000                            mov     [edi+128], edx
  3378 000021FD A1[B8290500]                            mov     eax, [mp3_out2_b1]
  3379 00002202 8B551C                                  mov     edx, [ebp+28]
  3380 00002205 F7EA                                    imul    edx
  3381 00002207 895334                                  mov     [ebx+52], edx
  3382 0000220A A1[B0290500]                            mov     eax, [mp3_out2_a2] ; i = 2
  3383 0000220F 8B5508                                  mov     edx, [ebp+8]
  3384 00002212 F7EA                                    imul    edx
  3385 00002214 035320                                  add     edx, [ebx+32]
  3386 00002217 899700010000                            mov     [edi+256], edx
  3387 0000221D A1[BC290500]                            mov     eax, [mp3_out2_b2]
  3388 00002222 8B5520                                  mov     edx, [ebp+32]
  3389 00002225 F7EA                                    imul    edx
  3390 00002227 895338                                  mov     [ebx+56], edx
  3391 0000222A A1[B0290500]                            mov     eax, [mp3_out2_a2] ; i = 3 ; mp3_out2_a3 equ mp3_out2_a2
  3392 0000222F 8B550C                                  mov     edx, [ebp+12]
  3393 00002232 F7EA                                    imul    edx
  3394 00002234 035324                                  add     edx, [ebx+36]
  3395 00002237 899780010000                            mov     [edi+384], edx
  3396 0000223D A1[BC290500]                            mov     eax, [mp3_out2_b2] ; mp3_out2_b3 equ mp3_out2_b2
  3397 00002242 8B5524                                  mov     edx, [ebp+36]
  3398 00002245 F7EA                                    imul    edx
  3399 00002247 89533C                                  mov     [ebx+60], edx
  3400 0000224A A1[AC290500]                            mov     eax, [mp3_out2_a1] ; i = 4 ; mp3_out2_a4 equ mp3_out2_a1
  3401 0000224F 8B5510                                  mov     edx, [ebp+16]
  3402 00002252 F7EA                                    imul    edx
  3403 00002254 035328                                  add     edx, [ebx+40]
  3404 00002257 899700020000                            mov     [edi+512], edx
  3405 0000225D A1[B8290500]                            mov     eax, [mp3_out2_b1] ; mp3_out2_b4 equ mp3_out2_b1
  3406 00002262 8B5528                                  mov     edx, [ebp+40]
  3407 00002265 F7EA                                    imul    edx
  3408 00002267 895340                                  mov     [ebx+64], edx
  3409 0000226A A1[A8290500]                            mov     eax, [mp3_out2_a0] ; i = 5 ; mp3_out2_a5 equ mp3_out2_a0
  3410 0000226F 8B5514                                  mov     edx, [ebp+20]
  3411 00002272 F7EA                                    imul    edx
  3412 00002274 03532C                                  add     edx, [ebx+44]
  3413 00002277 899780020000                            mov     [edi+640], edx
  3414 0000227D A1[B4290500]                            mov     eax, [mp3_out2_b0] ; mp3_out2_b5 equ mp3_out2_b0
  3415 00002282 8B552C                                  mov     edx, [ebp+44]
  3416 00002285 F7EA                                    imul    edx
  3417 00002287 895344                                  mov     [ebx+68], edx   ; ENDM
  3418 0000228A 81C700030000                            add     edi, 768        ; 6*SBLIMIT*4
  3419 00002290 83C604                                  add     esi, 4          ; sb_hybrid
  3420 00002293 E864FCFFFF                              call    mp3_imdct12
  3421 00002298 A1[A8290500]                            mov     eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5
  3422 0000229D 8B5500                                  mov     edx, [ebp+0]    ; @@MULH [edi+i*SBLIMIT*4],[mp3_out2_a&i],
  3423                                                                          ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(2*6+i)*4]
  3424 000022A0 F7EA                                    imul    edx             ; @@MULH [ebx+(0*6+i)*4],[mp3_out2_b&i],
  3425                                                                          ; -,-,-,-,0,[ebp+(i+6)*4],-
  3426 000022A2 035330                                  add     edx, [ebx+48]
  3427 000022A5 8917                                    mov     [edi], edx
  3428 000022A7 A1[B4290500]                            mov     eax, [mp3_out2_b0]
  3429 000022AC 8B5518                                  mov     edx, [ebp+18h]
  3430 000022AF F7EA                                    imul    edx
  3431 000022B1 8913                                    mov     [ebx], edx
  3432 000022B3 A1[AC290500]                            mov     eax, [mp3_out2_a1] ; i = 1
  3433 000022B8 8B5504                                  mov     edx, [ebp+4]
  3434 000022BB F7EA                                    imul    edx
  3435 000022BD 035334                                  add     edx, [ebx+52]
  3436 000022C0 899780000000                            mov     [edi+128], edx
  3437 000022C6 A1[B8290500]                            mov     eax, [mp3_out2_b1]
  3438 000022CB 8B551C                                  mov     edx, [ebp+28]
  3439 000022CE F7EA                                    imul    edx
  3440 000022D0 895304                                  mov     [ebx+4], edx
  3441 000022D3 A1[B0290500]                            mov     eax, [mp3_out2_a2] ; i = 2
  3442 000022D8 8B5508                                  mov     edx, [ebp+8]
  3443 000022DB F7EA                                    imul    edx
  3444 000022DD 035338                                  add     edx, [ebx+56]
  3445 000022E0 899700010000                            mov     [edi+256], edx
  3446 000022E6 A1[BC290500]                            mov     eax, [mp3_out2_b2]
  3447 000022EB 8B5520                                  mov     edx, [ebp+32]
  3448 000022EE F7EA                                    imul    edx
  3449 000022F0 895308                                  mov     [ebx+8], edx
  3450 000022F3 A1[B0290500]                            mov     eax, [mp3_out2_a2] ; i = 3
  3451 000022F8 8B550C                                  mov     edx, [ebp+12]
  3452 000022FB F7EA                                    imul    edx
  3453 000022FD 03533C                                  add     edx, [ebx+60]
  3454 00002300 899780010000                            mov     [edi+384], edx
  3455 00002306 A1[BC290500]                            mov     eax, [mp3_out2_b2]
  3456 0000230B 8B5524                                  mov     edx, [ebp+36]
  3457 0000230E F7EA                                    imul    edx
  3458 00002310 89530C                                  mov     [ebx+12], edx
  3459 00002313 A1[AC290500]                            mov     eax, [mp3_out2_a1] ; i = 4
  3460 00002318 8B5510                                  mov     edx, [ebp+16]
  3461 0000231B F7EA                                    imul    edx
  3462 0000231D 035340                                  add     edx, [ebx+64]
  3463 00002320 899700020000                            mov     [edi+512], edx
  3464 00002326 A1[B8290500]                            mov     eax, [mp3_out2_b1]
  3465 0000232B 8B5528                                  mov     edx, [ebp+40]
  3466 0000232E F7EA                                    imul    edx
  3467 00002330 895310                                  mov     [ebx+16], edx
  3468 00002333 A1[A8290500]                            mov     eax, [mp3_out2_a0] ; i = 5
  3469 00002338 8B5514                                  mov     edx, [ebp+20]
  3470 0000233B F7EA                                    imul    edx
  3471 0000233D 035344                                  add     edx, [ebx+68]
  3472 00002340 899780020000                            mov     [edi+640], edx
  3473 00002346 A1[B4290500]                            mov     eax, [mp3_out2_b0]
  3474 0000234B 8B552C                                  mov     edx, [ebp+44]
  3475 0000234E F7EA                                    imul    edx
  3476 00002350 895314                                  mov     [ebx+20], edx   ; ENDM
  3477 00002353 83C604                                  add     esi, 4
  3478 00002356 E8A1FBFFFF                              call    mp3_imdct12
  3479 0000235B A1[A8290500]                            mov     eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5
  3480 00002360 8B5500                                  mov     edx, [ebp+0]    ; @@MULH [ebx+(0*6+i)*4],[mp3_out2_a&i],
  3481                                                                          ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(0*6+i)*4]
  3482 00002363 F7EA                                    imul    edx
  3483 00002365 0313                                    add     edx, [ebx]
  3484 00002367 8913                                    mov     [ebx], edx
  3485 00002369 A1[B4290500]                            mov     eax, [mp3_out2_b0] ; @@MULH [ebx+(1*6+i)*4],[mp3_out2_b&i],
  3486                                                                          ; -,-,-,-,0,[ebp+(i+6)*4],-
  3487 0000236E 8B5518                                  mov     edx, [ebp+24]
  3488 00002371 F7EA                                    imul    edx
  3489 00002373 895318                                  mov     [ebx+24], edx
  3490 00002376 C7433000000000                          mov     dword [ebx+48], 0 ; [ebx+(2*6+i)*4]
  3491 0000237D A1[AC290500]                            mov     eax, [mp3_out2_a1] ; i = 1
  3492 00002382 8B5504                                  mov     edx, [ebp+4]
  3493 00002385 F7EA                                    imul    edx
  3494 00002387 035304                                  add     edx, [ebx+4]
  3495 0000238A 895304                                  mov     [ebx+4], edx
  3496 0000238D A1[B8290500]                            mov     eax, [mp3_out2_b1]
  3497 00002392 8B551C                                  mov     edx, [ebp+28]
  3498 00002395 F7EA                                    imul    edx
  3499 00002397 89531C                                  mov     [ebx+28], edx
  3500 0000239A C7433400000000                          mov     dword [ebx+52], 0 ; [ebx+(2*6+i)*4]
  3501 000023A1 A1[B0290500]                            mov     eax, [mp3_out2_a2] ; i = 2
  3502 000023A6 8B5508                                  mov     edx, [ebp+8]
  3503 000023A9 F7EA                                    imul    edx
  3504 000023AB 035308                                  add     edx, [ebx+8]
  3505 000023AE 895308                                  mov     [ebx+8], edx
  3506 000023B1 A1[BC290500]                            mov     eax, [mp3_out2_b2]
  3507 000023B6 8B5520                                  mov     edx, [ebp+32]
  3508 000023B9 F7EA                                    imul    edx
  3509 000023BB 895320                                  mov     [ebx+32], edx
  3510 000023BE C7433800000000                          mov     dword [ebx+56], 0
  3511 000023C5 A1[B0290500]                            mov     eax, [mp3_out2_a2] ; i = 3
  3512 000023CA 8B550C                                  mov     edx, [ebp+12]
  3513 000023CD F7EA                                    imul    edx
  3514 000023CF 03530C                                  add     edx, [ebx+0Ch]
  3515 000023D2 89530C                                  mov     [ebx+12], edx
  3516 000023D5 A1[BC290500]                            mov     eax, [mp3_out2_b2]
  3517 000023DA 8B5524                                  mov     edx, [ebp+36]
  3518 000023DD F7EA                                    imul    edx
  3519 000023DF 895324                                  mov     [ebx+36], edx
  3520 000023E2 C7433C00000000                          mov     dword [ebx+60], 0 ; [ebx+(2*6+i)*4]
  3521 000023E9 A1[AC290500]                            mov     eax, [mp3_out2_a1] ; i = 4
  3522 000023EE 8B5510                                  mov     edx, [ebp+16]
  3523 000023F1 F7EA                                    imul    edx
  3524 000023F3 035310                                  add     edx, [ebx+16]
  3525 000023F6 895310                                  mov     [ebx+16], edx
  3526 000023F9 A1[B8290500]                            mov     eax, [mp3_out2_b1]
  3527 000023FE 8B5528                                  mov     edx, [ebp+40]
  3528 00002401 F7EA                                    imul    edx
  3529 00002403 895328                                  mov     [ebx+40], edx
  3530 00002406 C7434000000000                          mov     dword [ebx+64], 0
  3531 0000240D A1[A8290500]                            mov     eax, [mp3_out2_a0] ; i = 5
  3532 00002412 8B5514                                  mov     edx, [ebp+20]
  3533 00002415 F7EA                                    imul    edx
  3534 00002417 035314                                  add     edx, [ebx+20]
  3535 0000241A 895314                                  mov     [ebx+20], edx
  3536 0000241D A1[B4290500]                            mov     eax, [mp3_out2_b0]
  3537 00002422 8B552C                                  mov     edx, [ebp+44]
  3538 00002425 F7EA                                    imul    edx
  3539 00002427 89532C                                  mov     [ebx+44], edx
  3540 0000242A C7434400000000                          mov     dword [ebx+68], 0 ; [ebx+(2*6+i)*4]
  3541 00002431 81C704FAFFFF                            add     edi, -1532      ; (1*4) - (2*6*SBLIMIT*4) ; dst
  3542 00002437 83C640                                  add     esi, 64         ; 18*4 - (2*4) ; sb_hybrid
  3543 0000243A 83C348                                  add     ebx, 72         ; 18*4 ; mdct_buf
  3544 0000243D FF05[C8290500]                          inc     dword [_@@@JJJ]	; next
  3545 00002443 A1[C8290500]                            mov     eax, [_@@@JJJ]
  3546 00002448 3B05[D4290500]                          cmp     eax, [_@@sblimit]
  3547 0000244E 0F8229FDFFFF                            jb      .imdct12_lop
  3548                                  
  3549                                  .imdct12_done:
  3550 00002454 F605[54760000]10                        test    byte [cpuid_flags], 10h
  3551 0000245B 740E                                    jz      short .no_rdtsc_supported@@@@ ; timelog_end rdtsc_imdct12
  3552 0000245D 0F31                                    rdtsc
  3553 0000245F 0105[9C770000]                          add     [rdtsc_imdct12], eax
  3554 00002465 1115[A0770000]                          adc     [rdtsc_imdct12+4], edx
  3555                                  
  3556                                  .no_rdtsc_supported@@@@:
  3557 0000246B F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_imdct0
  3558 00002472 740E                                    jz      short .no_rdtsc_supported@@@@@
  3559 00002474 0F31                                    rdtsc
  3560 00002476 2905[B4770000]                          sub     [rdtsc_imdct0], eax
  3561 0000247C 1915[B8770000]                          sbb     [rdtsc_imdct0+4], edx
  3562                                  
  3563                                  .no_rdtsc_supported@@@@@:
  3564 00002482 833D[C8290500]20                        cmp     dword [_@@@JJJ], 32 ; SBLIMIT
  3565 00002489 0F8333010000                            jnb     .zero_outer_done
  3566                                  
  3567                                  .zero_outer_lop:
  3568 0000248F 8B03                                    mov     eax, [ebx]      ; zero bands
  3569                                                                          ; IRP nn,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
  3570                                                                          ;  mov  eax,dword ptr [ebx+nn*4]
  3571                                                                          ;  mov  dword ptr [ebx+nn*4],0
  3572                                                                          ;  mov  dword ptr [edi+nn*SBLIMIT*4],eax ; [dst]
  3573                                                                          ; ENDM
  3574 00002491 C70300000000                            mov     dword [ebx], 0 ; nn = 0
  3575 00002497 8907                                    mov     [edi], eax
  3576 00002499 8B4304                                  mov     eax, [ebx+4]    ; nn = 1
  3577 0000249C C7430400000000                          mov     dword [ebx+4], 0
  3578 000024A3 898780000000                            mov     [edi+128], eax
  3579 000024A9 8B4308                                  mov     eax, [ebx+8]
  3580 000024AC C7430800000000                          mov     dword [ebx+8], 0
  3581 000024B3 898700010000                            mov     [edi+256], eax
  3582 000024B9 8B430C                                  mov     eax, [ebx+12]
  3583 000024BC C7430C00000000                          mov     dword [ebx+12], 0
  3584 000024C3 898780010000                            mov     [edi+384], eax
  3585 000024C9 8B4310                                  mov     eax, [ebx+16]   ; nn = 4
  3586 000024CC C7431000000000                          mov     dword [ebx+16], 0
  3587 000024D3 898700020000                            mov     [edi+512], eax
  3588 000024D9 8B4314                                  mov     eax, [ebx+20]
  3589 000024DC C7431400000000                          mov     dword [ebx+20], 0
  3590 000024E3 898780020000                            mov     [edi+640], eax  ; [edi+5*SBLIMIT*4]
  3591 000024E9 8B4318                                  mov     eax, [ebx+24]
  3592 000024EC C7431800000000                          mov     dword [ebx+24], 0
  3593 000024F3 898700030000                            mov     [edi+768], eax
  3594 000024F9 8B431C                                  mov     eax, [ebx+28]   ; nn = 7
  3595 000024FC C7431C00000000                          mov     dword [ebx+28], 0
  3596 00002503 898780030000                            mov     [edi+896], eax
  3597 00002509 8B4320                                  mov     eax, [ebx+32]
  3598 0000250C C7432000000000                          mov     dword [ebx+32], 0
  3599 00002513 898700040000                            mov     [edi+1024], eax ; [edi+8*SBLIMIT*4]
  3600 00002519 8B4324                                  mov     eax, [ebx+36]
  3601 0000251C C7432400000000                          mov     dword [ebx+36], 0
  3602 00002523 898780040000                            mov     [edi+1152], eax
  3603 00002529 8B4328                                  mov     eax, [ebx+40]
  3604 0000252C C7432800000000                          mov     dword [ebx+40], 0
  3605 00002533 898700050000                            mov     [edi+1280], eax
  3606 00002539 8B432C                                  mov     eax, [ebx+44]
  3607 0000253C C7432C00000000                          mov     dword [ebx+44], 0
  3608 00002543 898780050000                            mov     [edi+1408], eax
  3609 00002549 8B4330                                  mov     eax, [ebx+48]
  3610 0000254C C7433000000000                          mov     dword [ebx+48], 0
  3611 00002553 898700060000                            mov     [edi+1536], eax
  3612 00002559 8B4334                                  mov     eax, [ebx+52]
  3613 0000255C C7433400000000                          mov     dword [ebx+52], 0
  3614 00002563 898780060000                            mov     [edi+1664], eax
  3615 00002569 8B4338                                  mov     eax, [ebx+56]
  3616 0000256C C7433800000000                          mov     dword [ebx+56], 0
  3617 00002573 898700070000                            mov     [edi+1792], eax
  3618 00002579 8B433C                                  mov     eax, [ebx+60]
  3619 0000257C C7433C00000000                          mov     dword [ebx+60], 0
  3620 00002583 898780070000                            mov     [edi+1920], eax
  3621 00002589 8B4340                                  mov     eax, [ebx+64]
  3622 0000258C C7434000000000                          mov     dword [ebx+64], 0 ; [edi+16*SBLIMIT*4]
  3623 00002593 898700080000                            mov     [edi+2048], eax
  3624 00002599 8B4344                                  mov     eax, [ebx+68]   ; nn = 17
  3625 0000259C C7434400000000                          mov     dword [ebx+68], 0
  3626 000025A3 898780080000                            mov     [edi+2176], eax ; ENDM
  3627 000025A9 83C348                                  add     ebx, 72         ; 18*4
  3628 000025AC 83C704                                  add     edi, 4
  3629 000025AF FF05[C8290500]                          inc     dword [_@@@JJJ]
  3630 000025B5 833D[C8290500]20                        cmp     dword [_@@@JJJ], 32
  3631 000025BC 0F82CDFEFFFF                            jb      .zero_outer_lop
  3632                                  
  3633                                  .zero_outer_done:
  3634 000025C2 F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_imdct0
  3635 000025C9 740E                                    jz      short .no_rdtsc_supported@@@@@@
  3636 000025CB 0F31                                    rdtsc
  3637 000025CD 0105[B4770000]                          add     [rdtsc_imdct0], eax
  3638 000025D3 1115[B8770000]                          adc     [rdtsc_imdct0+4], edx
  3639                                  
  3640                                  .no_rdtsc_supported@@@@@@:
  3641 000025D9 5B                                      pop     ebx
  3642 000025DA F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_imdct
  3643 000025E1 740E                                    jz      short .no_rdtsc_supported@@@@@@@
  3644 000025E3 0F31                                    rdtsc
  3645 000025E5 0105[6C770000]                          add     [rdtsc_imdct], eax
  3646 000025EB 1115[70770000]                          adc     [rdtsc_imdct+4], edx
  3647                                  
  3648                                  .no_rdtsc_supported@@@@@@@:
  3649 000025F1 C3                                      retn
  3650                                  
  3651                                  
  3652                                  ; =============== S U B R O U T I N E =======================================
  3653                                  
  3654                                  
  3655                                  mp3_dct32_shift_0:
  3656 000025F2 8B06                                    mov     eax, [esi]      ; mp3_dct32_macro macro rate_shift ; rate_shift = 0
  3657 000025F4 8B567C                                  mov     edx, [esi+124]  ; @@BF macro a,b,sign,cos,shift
  3658                                                                          ; @@BF 0,31,+,COS0_0,1
  3659                                                                          ; @@need_a equ (rate_shift EQ 0) or (a LT 16) ; a = 0
  3660                                                                          ; @@need_b equ (rate_shift EQ 0) or (b LT 16) ; b = 31
  3661                                                                          ; IF @@need_a AND @@need_b ; rate_shift = 0
  3662                                                                          ;    mov eax,dword ptr [esi+a*4]
  3663                                                                          ;    mov edx,dword ptr [esi+b*4]
  3664                                                                          ;    add dword ptr [esi+a*4],edx
  3665 000025F7 0116                                    add     [esi], edx
  3666 000025F9 29D0                                    sub     eax, edx
  3667 000025FB D1E0                                    shl     eax, 1          ; shl  eax,shift
  3668                                                                          ; (needed when COS.fraction is less than 32bit)
  3669 000025FD BA51C21340                              mov     edx, 4013C251h  ; sign&&cos ; +COS0_0 = 4013C251h
  3670 00002602 F7EA                                    imul    edx
  3671 00002604 89567C                                  mov     [esi+124], edx  ; [esi+b*4] ; upper 32bit of multiply result
  3672 00002607 8B463C                                  mov     eax, [esi+60]   ; @@BF 15,16,+,COS0_15,5
  3673                                                                          ; [esi+a*4]
  3674 0000260A 8B5640                                  mov     edx, [esi+64]   ; [esi+b*4]
  3675 0000260D 01563C                                  add     [esi+60], edx   ; [esi+a*4]
  3676 00002610 29D0                                    sub     eax, edx
  3677 00002612 C1E005                                  shl     eax, 5          ; shl eax,shift
  3678 00002615 BAFB228551                              mov     edx, 518522FBh  ; sign&&cos ; +COS0_15 = 518522FBh
  3679 0000261A F7EA                                    imul    edx
  3680 0000261C 895640                                  mov     [esi+64], edx   ; [esi+b*4]
  3681 0000261F 8B06                                    mov     eax, [esi]      ; @@BF 0,15,+,COS1_0,1
  3682 00002621 8B563C                                  mov     edx, [esi+60]
  3683 00002624 0116                                    add     [esi], edx
  3684 00002626 29D0                                    sub     eax, edx
  3685 00002628 D1E0                                    shl     eax, 1
  3686 0000262A BA72464F40                              mov     edx, 404F4672h  ; +COS1_0
  3687 0000262F F7EA                                    imul    edx
  3688 00002631 89563C                                  mov     [esi+60], edx
  3689 00002634 8B4640                                  mov     eax, [esi+64]   ; @@BF 16,31,-,COS1_0,1
  3690 00002637 8B567C                                  mov     edx, [esi+124]
  3691 0000263A 015640                                  add     [esi+64], edx
  3692 0000263D 29D0                                    sub     eax, edx
  3693 0000263F D1E0                                    shl     eax, 1
  3694 00002641 BA8EB9B0BF                              mov     edx, 0BFB0B98Eh ; -COS1_0
  3695 00002646 F7EA                                    imul    edx
  3696 00002648 89567C                                  mov     [esi+124], edx
  3697 0000264B 8B461C                                  mov     eax, [esi+28]   ; @@BF 7,24,+,COS0_7,1
  3698 0000264E 8B5660                                  mov     edx, [esi+96]
  3699 00002651 01561C                                  add     [esi+28], edx
  3700 00002654 29D0                                    sub     eax, edx
  3701 00002656 D1E0                                    shl     eax, 1
  3702 00002658 BAA71E6056                              mov     edx, 56601EA7h
  3703 0000265D F7EA                                    imul    edx
  3704 0000265F 895660                                  mov     [esi+96], edx
  3705 00002662 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,23,+,COS0_8,1
  3706 00002665 8B565C                                  mov     edx, [esi+92]
  3707 00002668 015620                                  add     [esi+32], edx
  3708 0000266B 29D0                                    sub     eax, edx
  3709 0000266D D1E0                                    shl     eax, 1
  3710 0000266F BAECF64C5F                              mov     edx, 5F4CF6ECh
  3711 00002674 F7EA                                    imul    edx
  3712 00002676 89565C                                  mov     [esi+92], edx
  3713 00002679 8B461C                                  mov     eax, [esi+28]   ; @@BF 7,8,+,COS1_7,4
  3714 0000267C 8B5620                                  mov     edx, [esi+32]
  3715 0000267F 01561C                                  add     [esi+28], edx
  3716 00002682 29D0                                    sub     eax, edx
  3717 00002684 C1E004                                  shl     eax, 4
  3718 00002687 BA044E9E51                              mov     edx, 519E4E04h
  3719 0000268C F7EA                                    imul    edx
  3720 0000268E 895620                                  mov     [esi+32], edx
  3721 00002691 8B465C                                  mov     eax, [esi+92]   ; @@BF 23,24,-,COS1_7,4
  3722 00002694 8B5660                                  mov     edx, [esi+96]
  3723 00002697 01565C                                  add     [esi+92], edx
  3724 0000269A 29D0                                    sub     eax, edx
  3725 0000269C C1E004                                  shl     eax, 4
  3726 0000269F BAFCB161AE                              mov     edx, 0AE61B1FCh
  3727 000026A4 F7EA                                    imul    edx
  3728 000026A6 895660                                  mov     [esi+96], edx
  3729 000026A9 8B06                                    mov     eax, [esi]      ; @@BF 0,7,+,COS2_0,1
  3730 000026AB 8B561C                                  mov     edx, [esi+28]
  3731 000026AE 0116                                    add     [esi], edx
  3732 000026B0 29D0                                    sub     eax, edx
  3733 000026B2 D1E0                                    shl     eax, 1
  3734 000026B4 BA46FB4041                              mov     edx, 4140FB46h
  3735 000026B9 F7EA                                    imul    edx
  3736 000026BB 89561C                                  mov     [esi+28], edx
  3737 000026BE 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,15,-,COS2_0,1
  3738 000026C1 8B563C                                  mov     edx, [esi+60]
  3739 000026C4 015620                                  add     [esi+32], edx
  3740 000026C7 29D0                                    sub     eax, edx
  3741 000026C9 D1E0                                    shl     eax, 1
  3742 000026CB BABA04BFBE                              mov     edx, 0BEBF04BAh
  3743 000026D0 F7EA                                    imul    edx
  3744 000026D2 89563C                                  mov     [esi+60], edx
  3745 000026D5 8B4640                                  mov     eax, [esi+64]   ; @@BF 16,23,+,COS2_0,1
  3746 000026D8 8B565C                                  mov     edx, [esi+92]
  3747 000026DB 015640                                  add     [esi+40h], edx
  3748 000026DE 29D0                                    sub     eax, edx
  3749 000026E0 D1E0                                    shl     eax, 1
  3750 000026E2 BA46FB4041                              mov     edx, 4140FB46h
  3751 000026E7 F7EA                                    imul    edx
  3752 000026E9 89565C                                  mov     [esi+92], edx
  3753 000026EC 8B4660                                  mov     eax, [esi+96]   ; @@BF 24,31,-,COS2_0,1
  3754 000026EF 8B567C                                  mov     edx, [esi+124]
  3755 000026F2 015660                                  add     [esi+96], edx
  3756 000026F5 29D0                                    sub     eax, edx
  3757 000026F7 D1E0                                    shl     eax, 1
  3758 000026F9 BABA04BFBE                              mov     edx, 0BEBF04BAh
  3759 000026FE F7EA                                    imul    edx
  3760 00002700 89567C                                  mov     [esi+124], edx
  3761 00002703 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,28,+,COS0_3,1
  3762 00002706 8B5670                                  mov     edx, [esi+112]
  3763 00002709 01560C                                  add     [esi+12], edx
  3764 0000270C 29D0                                    sub     eax, edx
  3765 0000270E D1E0                                    shl     eax, 1
  3766 00002710 BA2134F943                              mov     edx, 43F93421h
  3767 00002715 F7EA                                    imul    edx
  3768 00002717 895670                                  mov     [esi+112], edx
  3769 0000271A 8B4630                                  mov     eax, [esi+48]   ; @@BF 12,19,+,COS0_12,2
  3770 0000271D 8B564C                                  mov     edx, [esi+76]
  3771 00002720 015630                                  add     [esi+48], edx
  3772 00002723 29D0                                    sub     eax, edx
  3773 00002725 C1E002                                  shl     eax, 2
  3774 00002728 BA978DFC5E                              mov     edx, 5EFC8D97h
  3775 0000272D F7EA                                    imul    edx
  3776 0000272F 89564C                                  mov     [esi+76], edx
  3777 00002732 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,12,+,COS1_3,1
  3778 00002735 8B5630                                  mov     edx, [esi+48]
  3779 00002738 01560C                                  add     [esi+12], edx
  3780 0000273B 29D0                                    sub     eax, edx
  3781 0000273D D1E0                                    shl     eax, 1
  3782 0000273F BA630ECB52                              mov     edx, 52CB0E63h
  3783 00002744 F7EA                                    imul    edx
  3784 00002746 895630                                  mov     [esi+48], edx
  3785 00002749 8B464C                                  mov     eax, [esi+76]   ; @@BF 19,28,-,COS1_3,1
  3786 0000274C 8B5670                                  mov     edx, [esi+112]
  3787 0000274F 01564C                                  add     [esi+76], edx
  3788 00002752 29D0                                    sub     eax, edx
  3789 00002754 D1E0                                    shl     eax, 1
  3790 00002756 BA9DF134AD                              mov     edx, 0AD34F19Dh
  3791 0000275B F7EA                                    imul    edx
  3792 0000275D 895670                                  mov     [esi+112], edx
  3793 00002760 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,27,+,COS0_4,1
  3794 00002763 8B566C                                  mov     edx, [esi+108]
  3795 00002766 015610                                  add     [esi+16], edx
  3796 00002769 29D0                                    sub     eax, edx
  3797 0000276B D1E0                                    shl     eax, 1
  3798 0000276D BAC51BCC46                              mov     edx, 46CC1BC5h
  3799 00002772 F7EA                                    imul    edx
  3800 00002774 89566C                                  mov     [esi+108], edx
  3801 00002777 8B462C                                  mov     eax, [esi+44]   ; @@BF 11,20,+,COS0_11,2
  3802 0000277A 8B5650                                  mov     edx, [esi+80]
  3803 0000277D 01562C                                  add     [esi+44], edx
  3804 00002780 29D0                                    sub     eax, edx
  3805 00002782 C1E002                                  shl     eax, 2
  3806 00002785 BA981AD84A                              mov     edx, 4AD81A98h
  3807 0000278A F7EA                                    imul    edx
  3808 0000278C 895650                                  mov     [esi+80], edx
  3809 0000278F 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,11,+,COS1_4,1
  3810 00002792 8B562C                                  mov     edx, [esi+44]
  3811 00002795 015610                                  add     [esi+16], edx
  3812 00002798 29D0                                    sub     eax, edx
  3813 0000279A D1E0                                    shl     eax, 1
  3814 0000279C BA2E40E264                              mov     edx, 64E2402Eh
  3815 000027A1 F7EA                                    imul    edx
  3816 000027A3 89562C                                  mov     [esi+44], edx
  3817 000027A6 8B4650                                  mov     eax, [esi+80]   ; @@BF 20,27,-,COS1_4,1
  3818 000027A9 8B566C                                  mov     edx, [esi+108]
  3819 000027AC 015650                                  add     [esi+80], edx
  3820 000027AF 29D0                                    sub     eax, edx
  3821 000027B1 D1E0                                    shl     eax, 1
  3822 000027B3 BAD2BF1D9B                              mov     edx, 9B1DBFD2h
  3823 000027B8 F7EA                                    imul    edx
  3824 000027BA 89566C                                  mov     [esi+108], edx
  3825 000027BD 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,4,+,COS2_3,3
  3826 000027C0 8B5610                                  mov     edx, [esi+16]
  3827 000027C3 01560C                                  add     [esi+12], edx
  3828 000027C6 29D0                                    sub     eax, edx
  3829 000027C8 C1E003                                  shl     eax, 3
  3830 000027CB BA42670352                              mov     edx, 52036742h
  3831 000027D0 F7EA                                    imul    edx
  3832 000027D2 895610                                  mov     [esi+16], edx
  3833 000027D5 8B462C                                  mov     eax, [esi+44]   ; @@BF 11,12,-,COS2_3,3
  3834 000027D8 8B5630                                  mov     edx, [esi+48]
  3835 000027DB 01562C                                  add     [esi+44], edx
  3836 000027DE 29D0                                    sub     eax, edx
  3837 000027E0 C1E003                                  shl     eax, 3
  3838 000027E3 BABE98FCAD                              mov     edx, 0ADFC98BEh ; -COS2_3
  3839 000027E8 F7EA                                    imul    edx
  3840 000027EA 895630                                  mov     [esi+48], edx
  3841 000027ED 8B464C                                  mov     eax, [esi+76]   ; @@BF 19,20,+,COS2_3,3
  3842 000027F0 8B5650                                  mov     edx, [esi+80]
  3843 000027F3 01564C                                  add     [esi+4Ch], edx
  3844 000027F6 29D0                                    sub     eax, edx
  3845 000027F8 C1E003                                  shl     eax, 3
  3846 000027FB BA42670352                              mov     edx, 52036742h  ; +COS2_3
  3847 00002800 F7EA                                    imul    edx
  3848 00002802 895650                                  mov     [esi+80], edx
  3849 00002805 8B466C                                  mov     eax, [esi+108]  ; @@BF 27,28,-,COS2_3,3
  3850 00002808 8B5670                                  mov     edx, [esi+112]
  3851 0000280B 01566C                                  add     [esi+108], edx
  3852 0000280E 29D0                                    sub     eax, edx
  3853 00002810 C1E003                                  shl     eax, 3
  3854 00002813 BABE98FCAD                              mov     edx, 0ADFC98BEh
  3855 00002818 F7EA                                    imul    edx
  3856 0000281A 895670                                  mov     [esi+112], edx
  3857 0000281D 8B06                                    mov     eax, [esi]      ; @@BF 0,3,+,COS3_0,1
  3858 0000281F 8B560C                                  mov     edx, [esi+12]
  3859 00002822 0116                                    add     [esi], edx
  3860 00002824 29D0                                    sub     eax, edx
  3861 00002826 D1E0                                    shl     eax, 1
  3862 00002828 BAF0E94545                              mov     edx, 4545E9F0h
  3863 0000282D F7EA                                    imul    edx
  3864 0000282F 89560C                                  mov     [esi+12], edx
  3865 00002832 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,7,-,COS3_0,1
  3866 00002835 8B561C                                  mov     edx, [esi+28]
  3867 00002838 015610                                  add     [esi+16], edx
  3868 0000283B 29D0                                    sub     eax, edx
  3869 0000283D D1E0                                    shl     eax, 1
  3870 0000283F BA1016BABA                              mov     edx, 0BABA1610h
  3871 00002844 F7EA                                    imul    edx
  3872 00002846 89561C                                  mov     [esi+28], edx
  3873 00002849 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,11,+,COS3_0,1
  3874 0000284C 8B562C                                  mov     edx, [esi+44]
  3875 0000284F 015620                                  add     [esi+32], edx
  3876 00002852 29D0                                    sub     eax, edx
  3877 00002854 D1E0                                    shl     eax, 1
  3878 00002856 BAF0E94545                              mov     edx, 4545E9F0h
  3879 0000285B F7EA                                    imul    edx
  3880 0000285D 89562C                                  mov     [esi+44], edx
  3881 00002860 8B4630                                  mov     eax, [esi+48]   ; @@BF 12,15,-,COS3_0,1
  3882 00002863 8B563C                                  mov     edx, [esi+60]
  3883 00002866 015630                                  add     [esi+48], edx
  3884 00002869 29D0                                    sub     eax, edx
  3885 0000286B D1E0                                    shl     eax, 1
  3886 0000286D BA1016BABA                              mov     edx, 0BABA1610h
  3887 00002872 F7EA                                    imul    edx
  3888 00002874 89563C                                  mov     [esi+60], edx
  3889 00002877 8B4640                                  mov     eax, [esi+64]   ; @@BF 16,19,+,COS3_0,1
  3890 0000287A 8B564C                                  mov     edx, [esi+76]
  3891 0000287D 015640                                  add     [esi+64], edx
  3892 00002880 29D0                                    sub     eax, edx
  3893 00002882 D1E0                                    shl     eax, 1
  3894 00002884 BAF0E94545                              mov     edx, 4545E9F0h
  3895 00002889 F7EA                                    imul    edx
  3896 0000288B 89564C                                  mov     [esi+76], edx
  3897 0000288E 8B4650                                  mov     eax, [esi+80]   ; @@BF 20,23,-,COS3_0,1
  3898 00002891 8B565C                                  mov     edx, [esi+92]
  3899 00002894 015650                                  add     [esi+80], edx
  3900 00002897 29D0                                    sub     eax, edx
  3901 00002899 D1E0                                    shl     eax, 1
  3902 0000289B BA1016BABA                              mov     edx, 0BABA1610h ; -COS3_0
  3903 000028A0 F7EA                                    imul    edx
  3904 000028A2 89565C                                  mov     [esi+92], edx
  3905 000028A5 8B4660                                  mov     eax, [esi+96]   ; @@BF 24,27,+,COS3_0,1
  3906 000028A8 8B566C                                  mov     edx, [esi+108]
  3907 000028AB 015660                                  add     [esi+96], edx
  3908 000028AE 29D0                                    sub     eax, edx
  3909 000028B0 D1E0                                    shl     eax, 1
  3910 000028B2 BAF0E94545                              mov     edx, 4545E9F0h  ; +COS3_0
  3911 000028B7 F7EA                                    imul    edx
  3912 000028B9 89566C                                  mov     [esi+108], edx
  3913 000028BC 8B4670                                  mov     eax, [esi+112]  ; @@BF 28,31,-,COS3_0,1
  3914 000028BF 8B567C                                  mov     edx, [esi+124]
  3915 000028C2 015670                                  add     [esi+112], edx
  3916 000028C5 29D0                                    sub     eax, edx
  3917 000028C7 D1E0                                    shl     eax, 1
  3918 000028C9 BA1016BABA                              mov     edx, 0BABA1610h
  3919 000028CE F7EA                                    imul    edx
  3920 000028D0 89567C                                  mov     [esi+124], edx
  3921 000028D3 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,30,+,COS0_1,1
  3922 000028D6 8B5678                                  mov     edx, [esi+120]
  3923 000028D9 015604                                  add     [esi+4], edx
  3924 000028DC 29D0                                    sub     eax, edx
  3925 000028DE D1E0                                    shl     eax, 1
  3926 000028E0 BABD45B340                              mov     edx, 40B345BDh
  3927 000028E5 F7EA                                    imul    edx
  3928 000028E7 895678                                  mov     [esi+120], edx
  3929 000028EA 8B4638                                  mov     eax, [esi+56]   ; @@BF 14,17,+,COS0_14,3
  3930 000028ED 8B5644                                  mov     edx, [esi+68]
  3931 000028F0 015638                                  add     [esi+56], edx
  3932 000028F3 29D0                                    sub     eax, edx
  3933 000028F5 C1E003                                  shl     eax, 3
  3934 000028F8 BAD0200B6D                              mov     edx, 6D0B20D0h
  3935 000028FD F7EA                                    imul    edx
  3936 000028FF 895644                                  mov     [esi+68], edx
  3937 00002902 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,14,+,COS1_1,1
  3938 00002905 8B5638                                  mov     edx, [esi+56]
  3939 00002908 015604                                  add     [esi+4], edx
  3940 0000290B 29D0                                    sub     eax, edx
  3941 0000290D D1E0                                    shl     eax, 1
  3942 0000290F BA103CE142                              mov     edx, 42E13C10h
  3943 00002914 F7EA                                    imul    edx
  3944 00002916 895638                                  mov     [esi+56], edx
  3945 00002919 8B4644                                  mov     eax, [esi+68]   ; @@BF 17,30,-,COS1_1,1
  3946 0000291C 8B5678                                  mov     edx, [esi+120]
  3947 0000291F 015644                                  add     [esi+68], edx
  3948 00002922 29D0                                    sub     eax, edx
  3949 00002924 D1E0                                    shl     eax, 1
  3950 00002926 BAF0C31EBD                              mov     edx, 0BD1EC3F0h
  3951 0000292B F7EA                                    imul    edx
  3952 0000292D 895678                                  mov     [esi+120], edx
  3953 00002930 8B4618                                  mov     eax, [esi+24]   ; @@BF 6,25,+,COS0_6,1
  3954 00002933 8B5664                                  mov     edx, [esi+100]
  3955 00002936 015618                                  add     [esi+24], edx
  3956 00002939 29D0                                    sub     eax, edx
  3957 0000293B D1E0                                    shl     eax, 1
  3958 0000293D BA1237AE4F                              mov     edx, 4FAE3712h
  3959 00002942 F7EA                                    imul    edx
  3960 00002944 895664                                  mov     [esi+100], edx
  3961 00002947 8B4624                                  mov     eax, [esi+36]   ; @@BF 9,22,+,COS0_9,1
  3962 0000294A 8B5658                                  mov     edx, [esi+88]
  3963 0000294D 015624                                  add     [esi+36], edx
  3964 00002950 29D0                                    sub     eax, edx
  3965 00002952 D1E0                                    shl     eax, 1
  3966 00002954 BA27CF6F6B                              mov     edx, 6B6FCF27h
  3967 00002959 F7EA                                    imul    edx
  3968 0000295B 895658                                  mov     [esi+88], edx
  3969 0000295E 8B4618                                  mov     eax, [esi+24]   ; @@BF 6, 9,+,COS1_6,2
  3970 00002961 8B5624                                  mov     edx, [esi+36]
  3971 00002964 015618                                  add     [esi+24], edx
  3972 00002967 29D0                                    sub     eax, edx
  3973 00002969 C1E002                                  shl     eax, 2
  3974 0000296C BAC2923C6E                              mov     edx, 6E3C92C2h
  3975 00002971 F7EA                                    imul    edx
  3976 00002973 895624                                  mov     [esi+36], edx
  3977 00002976 8B4658                                  mov     eax, [esi+88]   ; @@BF 22,25,-,COS1_6,2
  3978 00002979 8B5664                                  mov     edx, [esi+100]
  3979 0000297C 015658                                  add     [esi+88], edx
  3980 0000297F 29D0                                    sub     eax, edx
  3981 00002981 C1E002                                  shl     eax, 2
  3982 00002984 BA3E6DC391                              mov     edx, 91C36D3Eh
  3983 00002989 F7EA                                    imul    edx
  3984 0000298B 895664                                  mov     [esi+100], edx
  3985 0000298E 8B4604                                  mov     eax, [esi+4]    ; @@BF 1, 6,+,COS2_1,1
  3986 00002991 8B5618                                  mov     edx, [esi+24]
  3987 00002994 015604                                  add     [esi+4], edx
  3988 00002997 29D0                                    sub     eax, edx
  3989 00002999 D1E0                                    shl     eax, 1
  3990 0000299B BA88DEF84C                              mov     edx, 4CF8DE88h
  3991 000029A0 F7EA                                    imul    edx
  3992 000029A2 895618                                  mov     [esi+24], edx
  3993 000029A5 8B4624                                  mov     eax, [esi+36]   ; @@BF 9,14,-,COS2_1,1
  3994 000029A8 8B5638                                  mov     edx, [esi+56]
  3995 000029AB 015624                                  add     [esi+36], edx
  3996 000029AE 29D0                                    sub     eax, edx
  3997 000029B0 D1E0                                    shl     eax, 1
  3998 000029B2 BA782107B3                              mov     edx, 0B3072178h
  3999 000029B7 F7EA                                    imul    edx
  4000 000029B9 895638                                  mov     [esi+56], edx
  4001 000029BC 8B4644                                  mov     eax, [esi+68]   ; @@BF 17,22,+,COS2_1,1
  4002 000029BF 8B5658                                  mov     edx, [esi+88]
  4003 000029C2 015644                                  add     [esi+68], edx
  4004 000029C5 29D0                                    sub     eax, edx
  4005 000029C7 D1E0                                    shl     eax, 1
  4006 000029C9 BA88DEF84C                              mov     edx, 4CF8DE88h
  4007 000029CE F7EA                                    imul    edx
  4008 000029D0 895658                                  mov     [esi+88], edx
  4009 000029D3 8B4664                                  mov     eax, [esi+100]  ; @@BF 25,30,-,COS2_1,1
  4010 000029D6 8B5678                                  mov     edx, [esi+120]
  4011 000029D9 015664                                  add     [esi+100], edx
  4012 000029DC 29D0                                    sub     eax, edx
  4013 000029DE D1E0                                    shl     eax, 1
  4014 000029E0 BA782107B3                              mov     edx, 0B3072178h
  4015 000029E5 F7EA                                    imul    edx
  4016 000029E7 895678                                  mov     [esi+120], edx
  4017 000029EA 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,29,+,COS0_2,1
  4018 000029ED 8B5674                                  mov     edx, [esi+116]
  4019 000029F0 015608                                  add     [esi+8], edx
  4020 000029F3 29D0                                    sub     eax, edx
  4021 000029F5 D1E0                                    shl     eax, 1
  4022 000029F7 BA6E2DFA41                              mov     edx, 41FA2D6Eh
  4023 000029FC F7EA                                    imul    edx
  4024 000029FE 895674                                  mov     [esi+116], edx
  4025 00002A01 8B4634                                  mov     eax, [esi+52]   ; @@BF 13,18,+,COS0_13,3
  4026 00002A04 8B5648                                  mov     edx, [esi+72]
  4027 00002A07 015634                                  add     [esi+52], edx
  4028 00002A0A 29D0                                    sub     eax, edx
  4029 00002A0C C1E003                                  shl     eax, 3
  4030 00002A0F BA9057D941                              mov     edx, 41D95790h
  4031 00002A14 F7EA                                    imul    edx
  4032 00002A16 895648                                  mov     [esi+72], edx
  4033 00002A19 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,13,+,COS1_2,1
  4034 00002A1C 8B5634                                  mov     edx, [esi+52]
  4035 00002A1F 015608                                  add     [esi+8], edx
  4036 00002A22 29D0                                    sub     eax, edx
  4037 00002A24 D1E0                                    shl     eax, 1
  4038 00002A26 BA459F9148                              mov     edx, 48919F45h
  4039 00002A2B F7EA                                    imul    edx
  4040 00002A2D 895634                                  mov     [esi+52], edx
  4041 00002A30 8B4648                                  mov     eax, [esi+72]   ; @@BF 18,29,-,COS1_2,1
  4042 00002A33 8B5674                                  mov     edx, [esi+116]
  4043 00002A36 015648                                  add     [esi+72], edx
  4044 00002A39 29D0                                    sub     eax, edx
  4045 00002A3B D1E0                                    shl     eax, 1
  4046 00002A3D BABB606EB7                              mov     edx, 0B76E60BBh
  4047 00002A42 F7EA                                    imul    edx
  4048 00002A44 895674                                  mov     [esi+116], edx
  4049 00002A47 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,26,+,COS0_5,1
  4050 00002A4A 8B5668                                  mov     edx, [esi+104]
  4051 00002A4D 015614                                  add     [esi+20], edx
  4052 00002A50 29D0                                    sub     eax, edx
  4053 00002A52 D1E0                                    shl     eax, 1
  4054 00002A54 BAF19C9D4A                              mov     edx, 4A9D9CF1h
  4055 00002A59 F7EA                                    imul    edx
  4056 00002A5B 895668                                  mov     [esi+104], edx
  4057 00002A5E 8B4628                                  mov     eax, [esi+40]   ; @@BF 10,21,+,COS0_10,1
  4058 00002A61 8B5654                                  mov     edx, [esi+84]
  4059 00002A64 015628                                  add     [esi+40], edx
  4060 00002A67 29D0                                    sub     eax, edx
  4061 00002A69 D1E0                                    shl     eax, 1
  4062 00002A6B BAB41D7D7C                              mov     edx, 7C7D1DB4h
  4063 00002A70 F7EA                                    imul    edx
  4064 00002A72 895654                                  mov     [esi+84], edx
  4065 00002A75 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,10,+,COS1_5,2
  4066 00002A78 8B5628                                  mov     edx, [esi+40]
  4067 00002A7B 015614                                  add     [esi+20], edx
  4068 00002A7E 29D0                                    sub     eax, edx
  4069 00002A80 C1E002                                  shl     eax, 2
  4070 00002A83 BAAA24E243                              mov     edx, 43E224AAh
  4071 00002A88 F7EA                                    imul    edx
  4072 00002A8A 895628                                  mov     [esi+40], edx
  4073 00002A8D 8B4654                                  mov     eax, [esi+84]   ; @@BF 21,26,-,COS1_5,2
  4074 00002A90 8B5668                                  mov     edx, [esi+104]
  4075 00002A93 015654                                  add     [esi+84], edx
  4076 00002A96 29D0                                    sub     eax, edx
  4077 00002A98 C1E002                                  shl     eax, 2
  4078 00002A9B BA56DB1DBC                              mov     edx, 0BC1DDB56h
  4079 00002AA0 F7EA                                    imul    edx
  4080 00002AA2 895668                                  mov     [esi+104], edx
  4081 00002AA5 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,5,+,COS2_2,1
  4082 00002AA8 8B5614                                  mov     edx, [esi+20]
  4083 00002AAB 015608                                  add     [esi+8], edx
  4084 00002AAE 29D0                                    sub     eax, edx
  4085 00002AB0 D1E0                                    shl     eax, 1
  4086 00002AB2 BABF6B3273                              mov     edx, 73326BBFh  ; +COS2_2
  4087 00002AB7 F7EA                                    imul    edx
  4088 00002AB9 895614                                  mov     [esi+20], edx
  4089 00002ABC 8B4628                                  mov     eax, [esi+40]   ; @@BF 10,13,-,COS2_2,1
  4090 00002ABF 8B5634                                  mov     edx, [esi+52]
  4091 00002AC2 015628                                  add     [esi+40], edx
  4092 00002AC5 29D0                                    sub     eax, edx
  4093 00002AC7 D1E0                                    shl     eax, 1
  4094 00002AC9 BA4194CD8C                              mov     edx, 8CCD9441h  ; -COS2_2
  4095 00002ACE F7EA                                    imul    edx
  4096 00002AD0 895634                                  mov     [esi+52], edx
  4097 00002AD3 8B4648                                  mov     eax, [esi+72]   ; @@BF 18,21,+,COS2_2,1
  4098 00002AD6 8B5654                                  mov     edx, [esi+84]
  4099 00002AD9 015648                                  add     [esi+72], edx
  4100 00002ADC 29D0                                    sub     eax, edx
  4101 00002ADE D1E0                                    shl     eax, 1
  4102 00002AE0 BABF6B3273                              mov     edx, 73326BBFh
  4103 00002AE5 F7EA                                    imul    edx
  4104 00002AE7 895654                                  mov     [esi+84], edx
  4105 00002AEA 8B4668                                  mov     eax, [esi+104]  ; @@BF 26,29,-,COS2_2,1
  4106 00002AED 8B5674                                  mov     edx, [esi+116]
  4107 00002AF0 015668                                  add     [esi+104], edx
  4108 00002AF3 29D0                                    sub     eax, edx
  4109 00002AF5 D1E0                                    shl     eax, 1
  4110 00002AF7 BA4194CD8C                              mov     edx, 8CCD9441h
  4111 00002AFC F7EA                                    imul    edx
  4112 00002AFE 895674                                  mov     [esi+116], edx
  4113 00002B01 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,2,+,COS3_1,2
  4114 00002B04 8B5608                                  mov     edx, [esi+8]
  4115 00002B07 015604                                  add     [esi+4], edx
  4116 00002B0A 29D0                                    sub     eax, edx
  4117 00002B0C C1E002                                  shl     eax, 2
  4118 00002B0F BA46BA9E53                              mov     edx, 539EBA46h
  4119 00002B14 F7EA                                    imul    edx
  4120 00002B16 895608                                  mov     [esi+8], edx
  4121 00002B19 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,6,-,COS3_1,2
  4122 00002B1C 8B5618                                  mov     edx, [esi+24]
  4123 00002B1F 015614                                  add     [esi+20], edx
  4124 00002B22 29D0                                    sub     eax, edx
  4125 00002B24 C1E002                                  shl     eax, 2
  4126 00002B27 BABA4561AC                              mov     edx, 0AC6145BAh
  4127 00002B2C F7EA                                    imul    edx
  4128 00002B2E 895618                                  mov     [esi+24], edx
  4129 00002B31 8B4624                                  mov     eax, [esi+36]   ; IF rate_shift LT 2
  4130                                                                          ; @@BF 9,10,+,COS3_1,2
  4131 00002B34 8B5628                                  mov     edx, [esi+40]
  4132 00002B37 015624                                  add     [esi+36], edx
  4133 00002B3A 29D0                                    sub     eax, edx
  4134 00002B3C C1E002                                  shl     eax, 2
  4135 00002B3F BA46BA9E53                              mov     edx, 539EBA46h
  4136 00002B44 F7EA                                    imul    edx
  4137 00002B46 895628                                  mov     [esi+40], edx
  4138 00002B49 8B4634                                  mov     eax, [esi+52]   ; @@BF 13,14,-,COS3_1,2
  4139 00002B4C 8B5638                                  mov     edx, [esi+56]
  4140 00002B4F 015634                                  add     [esi+52], edx
  4141 00002B52 29D0                                    sub     eax, edx
  4142 00002B54 C1E002                                  shl     eax, 2
  4143 00002B57 BABA4561AC                              mov     edx, 0AC6145BAh
  4144 00002B5C F7EA                                    imul    edx
  4145 00002B5E 895638                                  mov     [esi+56], edx   ; ENDIF
  4146 00002B61 8B4644                                  mov     eax, [esi+68]   ; @@BF 17,18,+,COS3_1,2
  4147 00002B64 8B5648                                  mov     edx, [esi+72]
  4148 00002B67 015644                                  add     [esi+68], edx
  4149 00002B6A 29D0                                    sub     eax, edx
  4150 00002B6C C1E002                                  shl     eax, 2
  4151 00002B6F BA46BA9E53                              mov     edx, 539EBA46h
  4152 00002B74 F7EA                                    imul    edx
  4153 00002B76 895648                                  mov     [esi+72], edx
  4154 00002B79 8B4654                                  mov     eax, [esi+84]   ; @@BF 21,22,-,COS3_1,2
  4155 00002B7C 8B5658                                  mov     edx, [esi+88]
  4156 00002B7F 015654                                  add     [esi+84], edx
  4157 00002B82 29D0                                    sub     eax, edx
  4158 00002B84 C1E002                                  shl     eax, 2
  4159 00002B87 BABA4561AC                              mov     edx, 0AC6145BAh
  4160 00002B8C F7EA                                    imul    edx
  4161 00002B8E 895658                                  mov     [esi+88], edx
  4162 00002B91 8B4664                                  mov     eax, [esi+100]  ; @@BF 25,26,+,COS3_1,2
  4163 00002B94 8B5668                                  mov     edx, [esi+104]
  4164 00002B97 015664                                  add     [esi+100], edx
  4165 00002B9A 29D0                                    sub     eax, edx
  4166 00002B9C C1E002                                  shl     eax, 2
  4167 00002B9F BA46BA9E53                              mov     edx, 539EBA46h
  4168 00002BA4 F7EA                                    imul    edx
  4169 00002BA6 895668                                  mov     [esi+104], edx
  4170 00002BA9 8B4674                                  mov     eax, [esi+116]  ; @@BF 29,30,-,COS3_1,2
  4171 00002BAC 8B5678                                  mov     edx, [esi+120]
  4172 00002BAF 015674                                  add     [esi+116], edx
  4173 00002BB2 29D0                                    sub     eax, edx
  4174 00002BB4 C1E002                                  shl     eax, 2
  4175 00002BB7 BABA4561AC                              mov     edx, 0AC6145BAh
  4176 00002BBC F7EA                                    imul    edx
  4177 00002BBE 895678                                  mov     [esi+120], edx
  4178 00002BC1 8B06                                    mov     eax, [esi]      ; @@BF1 macro a, b, c, d
  4179                                                                          ;   @@BF  a, b,+,COS4_0, 1
  4180                                                                          ;   @@BF  c, d,-,COS4_0, 1
  4181                                                                          ;   @@ADD c, d
  4182                                                                          ;  endm
  4183                                                                          ; @@BF1 0,1,2,3
  4184 00002BC3 8B5604                                  mov     edx, [esi+4]    ; @@BF 0,1,+,COS4_0,1
  4185 00002BC6 0116                                    add     [esi], edx
  4186 00002BC8 29D0                                    sub     eax, edx
  4187 00002BCA D1E0                                    shl     eax, 1
  4188 00002BCC BA9A79825A                              mov     edx, 5A82799Ah  ; +COS4_0
  4189 00002BD1 F7EA                                    imul    edx
  4190 00002BD3 895604                                  mov     [esi+4], edx
  4191 00002BD6 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,3,-,COS4_0,1
  4192 00002BD9 8B560C                                  mov     edx, [esi+12]
  4193 00002BDC 015608                                  add     [esi+8], edx
  4194 00002BDF 29D0                                    sub     eax, edx
  4195 00002BE1 D1E0                                    shl     eax, 1
  4196 00002BE3 BA66867DA5                              mov     edx, 0A57D8666h ; -COS4_0
  4197 00002BE8 F7EA                                    imul    edx
  4198 00002BEA 89560C                                  mov     [esi+12], edx
  4199 00002BED 8B460C                                  mov     eax, [esi+12]   ; @@ADD 2,3
  4200 00002BF0 014608                                  add     [esi+8], eax
  4201 00002BF3 8B4610                                  mov     eax, [esi+16]   ; @@BF2 macro a, b, c, d
  4202                                                                          ;   @@BF  a, b,+,COS4_0, 1
  4203                                                                          ;   @@BF  c, d,-,COS4_0, 1
  4204                                                                          ;   @@ADD c, d
  4205                                                                          ;   @@ADD a, c
  4206                                                                          ;   @@ADD c, b
  4207                                                                          ;   @@ADD b, d
  4208                                                                          ;  endm
  4209                                                                          ; @@BF2 4,5,6,7
  4210 00002BF6 8B5614                                  mov     edx, [esi+20]   ; @@BF 4,5,+,COS4_0,1
  4211 00002BF9 015610                                  add     [esi+16], edx
  4212 00002BFC 29D0                                    sub     eax, edx
  4213 00002BFE D1E0                                    shl     eax, 1
  4214 00002C00 BA9A79825A                              mov     edx, 5A82799Ah
  4215 00002C05 F7EA                                    imul    edx
  4216 00002C07 895614                                  mov     [esi+20], edx
  4217 00002C0A 8B4618                                  mov     eax, [esi+24]   ; @@BF 6,7,-,COS4_0,1
  4218 00002C0D 8B561C                                  mov     edx, [esi+28]
  4219 00002C10 015618                                  add     [esi+24], edx
  4220 00002C13 29D0                                    sub     eax, edx
  4221 00002C15 D1E0                                    shl     eax, 1
  4222 00002C17 BA66867DA5                              mov     edx, 0A57D8666h
  4223 00002C1C F7EA                                    imul    edx
  4224 00002C1E 89561C                                  mov     [esi+28], edx
  4225 00002C21 8B461C                                  mov     eax, [esi+28]   ; @@ADD macro dst,src
  4226                                                                          ;   IF (rate_shift EQ 0) or (dst LT 16)
  4227                                                                          ;    ;tab[a] += tab[b]
  4228                                                                          ;    mov  eax,dword ptr [esi+src*4]
  4229                                                                          ;    add  dword ptr [esi+dst*4],eax
  4230                                                                          ;   ENDIF
  4231                                                                          ;  endm
  4232                                                                          ; @@ADD 6,7
  4233 00002C24 014618                                  add     [esi+24], eax
  4234 00002C27 8B4618                                  mov     eax, [esi+24]   ; @@ADD 4,6
  4235 00002C2A 014610                                  add     [esi+16], eax
  4236 00002C2D 8B4614                                  mov     eax, [esi+20]   ; @@ADD 6,5
  4237 00002C30 014618                                  add     [esi+24], eax
  4238 00002C33 8B461C                                  mov     eax, [esi+28]   ; @@ADD 5,7
  4239 00002C36 014614                                  add     [esi+20], eax
  4240 00002C39 8B4620                                  mov     eax, [esi+32]   ; IF rate_shift LT 2
  4241                                                                          ; @@BF1 8,9,10,11
  4242 00002C3C 8B5624                                  mov     edx, [esi+36]   ; @@BF 8,9,+,COS4_0,1
  4243 00002C3F 015620                                  add     [esi+32], edx
  4244 00002C42 29D0                                    sub     eax, edx
  4245 00002C44 D1E0                                    shl     eax, 1
  4246 00002C46 BA9A79825A                              mov     edx, 5A82799Ah
  4247 00002C4B F7EA                                    imul    edx
  4248 00002C4D 895624                                  mov     [esi+36], edx
  4249 00002C50 8B4628                                  mov     eax, [esi+40]   ; @@BF 10,11,-,COS4_0,1
  4250 00002C53 8B562C                                  mov     edx, [esi+44]
  4251 00002C56 015628                                  add     [esi+40], edx
  4252 00002C59 29D0                                    sub     eax, edx
  4253 00002C5B D1E0                                    shl     eax, 1
  4254 00002C5D BA66867DA5                              mov     edx, 0A57D8666h
  4255 00002C62 F7EA                                    imul    edx
  4256 00002C64 89562C                                  mov     [esi+44], edx
  4257 00002C67 8B462C                                  mov     eax, [esi+44]   ; @@ADD 10,11
  4258 00002C6A 014628                                  add     [esi+40], eax
  4259 00002C6D 8B4630                                  mov     eax, [esi+48]   ; @@BF2 12,13,14,15
  4260 00002C70 8B5634                                  mov     edx, [esi+52]   ; @@BF 12,13,+,COS4_0,1
  4261 00002C73 015630                                  add     [esi+48], edx
  4262 00002C76 29D0                                    sub     eax, edx
  4263 00002C78 D1E0                                    shl     eax, 1
  4264 00002C7A BA9A79825A                              mov     edx, 5A82799Ah
  4265 00002C7F F7EA                                    imul    edx
  4266 00002C81 895634                                  mov     [esi+52], edx
  4267 00002C84 8B4638                                  mov     eax, [esi+56]   ; @@BF 14,15,-,COS4_0,1
  4268 00002C87 8B563C                                  mov     edx, [esi+60]
  4269 00002C8A 015638                                  add     [esi+56], edx
  4270 00002C8D 29D0                                    sub     eax, edx
  4271 00002C8F D1E0                                    shl     eax, 1
  4272 00002C91 BA66867DA5                              mov     edx, 0A57D8666h
  4273 00002C96 F7EA                                    imul    edx
  4274 00002C98 89563C                                  mov     [esi+60], edx
  4275 00002C9B 8B463C                                  mov     eax, [esi+60]   ; @@ADD 14,15
  4276 00002C9E 014638                                  add     [esi+56], eax
  4277 00002CA1 8B4638                                  mov     eax, [esi+56]   ; @@ADD 12,14
  4278 00002CA4 014630                                  add     [esi+48], eax
  4279 00002CA7 8B4634                                  mov     eax, [esi+52]   ; @@ADD 14,13
  4280 00002CAA 014638                                  add     [esi+56], eax
  4281 00002CAD 8B463C                                  mov     eax, [esi+60]   ; @@ADD 13,15
  4282 00002CB0 014634                                  add     [esi+52], eax   ; ENDIF
  4283 00002CB3 8B4640                                  mov     eax, [esi+64]   ; @@BF1 16,17,18,19
  4284 00002CB6 8B5644                                  mov     edx, [esi+68]
  4285 00002CB9 015640                                  add     [esi+64], edx
  4286 00002CBC 29D0                                    sub     eax, edx
  4287 00002CBE D1E0                                    shl     eax, 1
  4288 00002CC0 BA9A79825A                              mov     edx, 5A82799Ah  ; +COS4_0
  4289 00002CC5 F7EA                                    imul    edx
  4290 00002CC7 895644                                  mov     [esi+68], edx
  4291 00002CCA 8B4648                                  mov     eax, [esi+72]
  4292 00002CCD 8B564C                                  mov     edx, [esi+76]
  4293 00002CD0 015648                                  add     [esi+72], edx
  4294 00002CD3 29D0                                    sub     eax, edx
  4295 00002CD5 D1E0                                    shl     eax, 1
  4296 00002CD7 BA66867DA5                              mov     edx, 0A57D8666h ; -COS4_0
  4297 00002CDC F7EA                                    imul    edx
  4298 00002CDE 89564C                                  mov     [esi+76], edx
  4299 00002CE1 8B464C                                  mov     eax, [esi+76]   ; @@ADD 18,19
  4300 00002CE4 014648                                  add     [esi+72], eax
  4301 00002CE7 8B4650                                  mov     eax, [esi+80]   ; @@BF2 20,21,22,23
  4302 00002CEA 8B5654                                  mov     edx, [esi+84]
  4303 00002CED 015650                                  add     [esi+80], edx
  4304 00002CF0 29D0                                    sub     eax, edx
  4305 00002CF2 D1E0                                    shl     eax, 1
  4306 00002CF4 BA9A79825A                              mov     edx, 5A82799Ah
  4307 00002CF9 F7EA                                    imul    edx
  4308 00002CFB 895654                                  mov     [esi+84], edx
  4309 00002CFE 8B4658                                  mov     eax, [esi+88]
  4310 00002D01 8B565C                                  mov     edx, [esi+92]
  4311 00002D04 015658                                  add     [esi+88], edx
  4312 00002D07 29D0                                    sub     eax, edx
  4313 00002D09 D1E0                                    shl     eax, 1
  4314 00002D0B BA66867DA5                              mov     edx, 0A57D8666h
  4315 00002D10 F7EA                                    imul    edx
  4316 00002D12 89565C                                  mov     [esi+92], edx
  4317 00002D15 8B465C                                  mov     eax, [esi+92]   ; @@ADD 22,23
  4318 00002D18 014658                                  add     [esi+88], eax
  4319 00002D1B 8B4658                                  mov     eax, [esi+88]   ; @@ADD 20,22
  4320 00002D1E 014650                                  add     [esi+80], eax
  4321 00002D21 8B4654                                  mov     eax, [esi+84]
  4322 00002D24 014658                                  add     [esi+88], eax
  4323 00002D27 8B465C                                  mov     eax, [esi+92]
  4324 00002D2A 014654                                  add     [esi+84], eax
  4325 00002D2D 8B4660                                  mov     eax, [esi+96]   ; @@BF1 24,25,26,27
  4326 00002D30 8B5664                                  mov     edx, [esi+100]
  4327 00002D33 015660                                  add     [esi+96], edx
  4328 00002D36 29D0                                    sub     eax, edx
  4329 00002D38 D1E0                                    shl     eax, 1
  4330 00002D3A BA9A79825A                              mov     edx, 5A82799Ah
  4331 00002D3F F7EA                                    imul    edx
  4332 00002D41 895664                                  mov     [esi+100], edx
  4333 00002D44 8B4668                                  mov     eax, [esi+104]
  4334 00002D47 8B566C                                  mov     edx, [esi+108]
  4335 00002D4A 015668                                  add     [esi+104], edx
  4336 00002D4D 29D0                                    sub     eax, edx
  4337 00002D4F D1E0                                    shl     eax, 1
  4338 00002D51 BA66867DA5                              mov     edx, 0A57D8666h
  4339 00002D56 F7EA                                    imul    edx
  4340 00002D58 89566C                                  mov     [esi+108], edx
  4341 00002D5B 8B466C                                  mov     eax, [esi+108]
  4342 00002D5E 014668                                  add     [esi+104], eax
  4343 00002D61 8B4670                                  mov     eax, [esi+112]  ; @@BF2 28,29,30,31
  4344 00002D64 8B5674                                  mov     edx, [esi+116]
  4345 00002D67 015670                                  add     [esi+112], edx
  4346 00002D6A 29D0                                    sub     eax, edx
  4347 00002D6C D1E0                                    shl     eax, 1
  4348 00002D6E BA9A79825A                              mov     edx, 5A82799Ah
  4349 00002D73 F7EA                                    imul    edx
  4350 00002D75 895674                                  mov     [esi+116], edx
  4351 00002D78 8B4678                                  mov     eax, [esi+120]
  4352 00002D7B 8B567C                                  mov     edx, [esi+124]
  4353 00002D7E 015678                                  add     [esi+120], edx
  4354 00002D81 29D0                                    sub     eax, edx
  4355 00002D83 D1E0                                    shl     eax, 1
  4356 00002D85 BA66867DA5                              mov     edx, 0A57D8666h
  4357 00002D8A F7EA                                    imul    edx
  4358 00002D8C 89567C                                  mov     [esi+124], edx
  4359 00002D8F 8B467C                                  mov     eax, [esi+124]
  4360 00002D92 014678                                  add     [esi+120], eax
  4361 00002D95 8B4678                                  mov     eax, [esi+120]
  4362 00002D98 014670                                  add     [esi+112], eax
  4363 00002D9B 8B4674                                  mov     eax, [esi+116]
  4364 00002D9E 014678                                  add     [esi+120], eax
  4365 00002DA1 8B467C                                  mov     eax, [esi+124]
  4366 00002DA4 014674                                  add     [esi+116], eax
  4367 00002DA7 8B06                                    mov     eax, [esi]      ; @@OUT macro dst,src1,src2
  4368                                                                          ; IF ((dst AND ((1 SHL rate_shift)-1)) EQ 0)
  4369                                                                          ;    mov eax,dword ptr [esi+src1*4]
  4370                                                                          ;    IFDIFI <src2>,<->
  4371                                                                          ;      add eax,dword ptr [esi+src2*4]
  4372                                                                          ;    ENDIF
  4373                                                                          ;    IF SYNTH32
  4374                                                                          ;       mov dword ptr [edi+dst*4],eax
  4375                                                                          ;       IF (LONG_WINDOW EQ 0)
  4376                                                                          ;          mov dword ptr [edi+dst*4+512*4],eax
  4377                                                                          ;       ENDIF
  4378                                                                          ;    ELSE
  4379                                                                          ;        ......
  4380                                                                          ;    ENDIF
  4381                                                                          ; @@OUT 0,0,-
  4382 00002DA9 8907                                    mov     [edi], eax      ; mov dword ptr [edi+dst*4],eax
  4383 00002DAB 8B4604                                  mov     eax, [esi+4]    ; @@OUT 16,1, -
  4384                                                                          ; mov eax,dword ptr [esi+src1*4]
  4385 00002DAE 894740                                  mov     [edi+64], eax   ; mov dword ptr [edi+dst*4],eax
  4386 00002DB1 8B4608                                  mov     eax, [esi+8]    ; @@OUT 8,2,-
  4387 00002DB4 894720                                  mov     [edi+32], eax
  4388 00002DB7 8B460C                                  mov     eax, [esi+12]   ; @@OUT 24,3,-
  4389 00002DBA 894760                                  mov     [edi+96], eax
  4390 00002DBD 8B4610                                  mov     eax, [esi+16]   ; @@OUT 4,4,-
  4391 00002DC0 894710                                  mov     [edi+16], eax
  4392 00002DC3 8B4614                                  mov     eax, [esi+20]   ; @@OUT 20,5,-
  4393 00002DC6 894750                                  mov     [edi+80], eax
  4394 00002DC9 8B4618                                  mov     eax, [esi+24]   ; @@OUT 12,6,-
  4395 00002DCC 894730                                  mov     [edi+48], eax
  4396 00002DCF 8B461C                                  mov     eax, [esi+28]   ; @@OUT 28,7,-
  4397 00002DD2 894770                                  mov     [edi+112], eax
  4398 00002DD5 8B4620                                  mov     eax, [esi+32]   ; @@OUT 2,8,12
  4399 00002DD8 034630                                  add     eax, [esi+48]   ; add eax,dword ptr [esi+src2*4]
  4400 00002DDB 894708                                  mov     [edi+8], eax
  4401 00002DDE 8B4624                                  mov     eax, [esi+36]   ; @@OUT 18,9,13
  4402 00002DE1 034634                                  add     eax, [esi+52]   ; add eax,dword ptr [esi+src2*4]
  4403 00002DE4 894748                                  mov     [edi+72], eax
  4404 00002DE7 8B4628                                  mov     eax, [esi+40]   ; @@OUT 10,10,14
  4405 00002DEA 034638                                  add     eax, [esi+56]
  4406 00002DED 894728                                  mov     [edi+40], eax
  4407 00002DF0 8B462C                                  mov     eax, [esi+44]   ; @@OUT 26,11,15
  4408 00002DF3 03463C                                  add     eax, [esi+60]
  4409 00002DF6 894768                                  mov     [edi+104], eax
  4410 00002DF9 8B4630                                  mov     eax, [esi+48]   ; @@OUT 6,12,10
  4411 00002DFC 034628                                  add     eax, [esi+40]
  4412 00002DFF 894718                                  mov     [edi+24], eax
  4413 00002E02 8B4634                                  mov     eax, [esi+52]   ; @@OUT 22,13,11
  4414 00002E05 03462C                                  add     eax, [esi+44]
  4415 00002E08 894758                                  mov     [edi+88], eax
  4416 00002E0B 8B4638                                  mov     eax, [esi+56]   ; @@OUT 14,14,9
  4417 00002E0E 034624                                  add     eax, [esi+36]
  4418 00002E11 894738                                  mov     [edi+56], eax
  4419 00002E14 8B463C                                  mov     eax, [esi+60]   ; @@OUT 30,15,-
  4420 00002E17 894778                                  mov     [edi+120], eax
  4421 00002E1A 8B4670                                  mov     eax, [esi+112]  ; @@ADD 24,28
  4422 00002E1D 014660                                  add     [esi+96], eax
  4423 00002E20 8B4668                                  mov     eax, [esi+104]  ; @@ADD 28,26
  4424 00002E23 014670                                  add     [esi+112], eax
  4425 00002E26 8B4678                                  mov     eax, [esi+120]  ; @@ADD 26,30
  4426 00002E29 014668                                  add     [esi+104], eax
  4427 00002E2C 8B4664                                  mov     eax, [esi+100]  ; @@ADD 30,25
  4428 00002E2F 014678                                  add     [esi+120], eax
  4429 00002E32 8B4674                                  mov     eax, [esi+116]  ; @@ADD 25,29
  4430 00002E35 014664                                  add     [esi+100], eax
  4431 00002E38 8B466C                                  mov     eax, [esi+108]  ; @@ADD 29,27
  4432 00002E3B 014674                                  add     [esi+116], eax
  4433 00002E3E 8B467C                                  mov     eax, [esi+124]  ; @@ADD 27,31
  4434 00002E41 01466C                                  add     [esi+108], eax
  4435 00002E44 8B4640                                  mov     eax, [esi+64]   ; @@OUT 1,16,24
  4436 00002E47 034660                                  add     eax, [esi+96]
  4437 00002E4A 894704                                  mov     [edi+4], eax
  4438 00002E4D 8B4644                                  mov     eax, [esi+68]   ; @@OUT 17,17,25
  4439 00002E50 034664                                  add     eax, [esi+100]
  4440 00002E53 894744                                  mov     [edi+68], eax
  4441 00002E56 8B4648                                  mov     eax, [esi+72]   ; @@OUT 9,18,26
  4442 00002E59 034668                                  add     eax, [esi+104]
  4443 00002E5C 894724                                  mov     [edi+36], eax
  4444 00002E5F 8B464C                                  mov     eax, [esi+76]   ; @@OUT 25,19,27
  4445 00002E62 03466C                                  add     eax, [esi+108]
  4446 00002E65 894764                                  mov     [edi+100], eax
  4447 00002E68 8B4650                                  mov     eax, [esi+80]   ; @@OUT 5,20,28
  4448 00002E6B 034670                                  add     eax, [esi+112]
  4449 00002E6E 894714                                  mov     [edi+20], eax
  4450 00002E71 8B4654                                  mov     eax, [esi+84]   ; @@OUT 21,21,29
  4451 00002E74 034674                                  add     eax, [esi+116]
  4452 00002E77 894754                                  mov     [edi+84], eax
  4453 00002E7A 8B4658                                  mov     eax, [esi+88]   ; @@OUT 13,22,30
  4454 00002E7D 034678                                  add     eax, [esi+120]
  4455 00002E80 894734                                  mov     [edi+52], eax
  4456 00002E83 8B465C                                  mov     eax, [esi+92]   ; @@OUT 29,23,31
  4457 00002E86 03467C                                  add     eax, [esi+124]
  4458 00002E89 894774                                  mov     [edi+116], eax
  4459 00002E8C 8B4660                                  mov     eax, [esi+96]   ; @@OUT 3,24,20
  4460 00002E8F 034650                                  add     eax, [esi+80]
  4461 00002E92 89470C                                  mov     [edi+12], eax
  4462 00002E95 8B4664                                  mov     eax, [esi+100]  ; @@OUT 19,25,21
  4463 00002E98 034654                                  add     eax, [esi+84]
  4464 00002E9B 89474C                                  mov     [edi+76], eax
  4465 00002E9E 8B4668                                  mov     eax, [esi+104]  ; @@OUT 11,26,22
  4466 00002EA1 034658                                  add     eax, [esi+88]
  4467 00002EA4 89472C                                  mov     [edi+44], eax
  4468 00002EA7 8B466C                                  mov     eax, [esi+108]  ; @@OUT 27,27,23
  4469 00002EAA 03465C                                  add     eax, [esi+92]
  4470 00002EAD 89476C                                  mov     [edi+108], eax
  4471 00002EB0 8B4670                                  mov     eax, [esi+112]  ; @@OUT 7,28,18
  4472 00002EB3 034648                                  add     eax, [esi+72]
  4473 00002EB6 89471C                                  mov     [edi+28], eax
  4474 00002EB9 8B4674                                  mov     eax, [esi+116]  ; @@OUT 23,29,19
  4475 00002EBC 03464C                                  add     eax, [esi+76]
  4476 00002EBF 89475C                                  mov     [edi+92], eax
  4477 00002EC2 8B4678                                  mov     eax, [esi+120]  ; @@OUT 15,30,17
  4478 00002EC5 034644                                  add     eax, [esi+68]
  4479 00002EC8 89473C                                  mov     [edi+60], eax
  4480 00002ECB 8B467C                                  mov     eax, [esi+124]  ; @@OUT 31,31,-
  4481 00002ECE 89477C                                  mov     [edi+124], eax
  4482 00002ED1 C3                                      retn
  4483                                  
  4484                                  
  4485                                  ; =============== S U B R O U T I N E =======================================
  4486                                  
  4487                                  
  4488                                  mp3_dct32_shift_1:
  4489 00002ED2 8B467C                                  mov     eax, [esi+124]  ; mp3_dct32_macro macro rate_shift ; rate_shift = 1
  4490 00002ED5 0106                                    add     [esi], eax      ; @@BF macro a,b,sign,cos,shift
  4491                                                                          ; @@need_a equ (rate_shift EQ 0) or (a LT 16) ; a = 0
  4492                                                                          ; @@need_b equ (rate_shift EQ 0) or (b LT 16) ; b = 31
  4493                                                                          ; IF @@need_a AND @@need_b ; rate_shift = 0
  4494                                                                          ;    mov eax,dword ptr [esi+a*4]
  4495                                                                          ;    mov edx,dword ptr [esi+b*4]
  4496                                                                          ;    add dword ptr [esi+a*4],edx
  4497                                                                          ; ELSEIF @@need_a
  4498                                                                          ;    mov eax,dword ptr [esi+b*4]
  4499                                                                          ;    add dword ptr [esi+a*4],eax
  4500                                                                          ;
  4501                                                                          ; @@BF 0,31,+,COS0_0,1
  4502 00002ED7 8B4640                                  mov     eax, [esi+64]   ; @@BF 15,16,+,COS0_15,5
  4503 00002EDA 01463C                                  add     [esi+60], eax
  4504 00002EDD 8B06                                    mov     eax, [esi]      ; @@BF 0,15,+,COS1_0,1
  4505 00002EDF 8B563C                                  mov     edx, [esi+60]
  4506 00002EE2 0116                                    add     [esi], edx
  4507 00002EE4 29D0                                    sub     eax, edx
  4508 00002EE6 D1E0                                    shl     eax, 1
  4509 00002EE8 BA72464F40                              mov     edx, 404F4672h  ; COS1_0
  4510 00002EED F7EA                                    imul    edx
  4511 00002EEF 89563C                                  mov     [esi+60], edx
  4512 00002EF2 8B4660                                  mov     eax, [esi+96]   ; skip @@BF 16,31,-,COS1_0,1
  4513                                                                          ; @@BF 7,24,+,COS0_7,1
  4514 00002EF5 01461C                                  add     [esi+28], eax
  4515 00002EF8 8B465C                                  mov     eax, [esi+92]   ; @@BF 8,23,+,COS0_8,1
  4516 00002EFB 014620                                  add     [esi+32], eax
  4517 00002EFE 8B461C                                  mov     eax, [esi+28]   ; @@BF 7,8,+,COS1_7,4
  4518 00002F01 8B5620                                  mov     edx, [esi+32]
  4519 00002F04 01561C                                  add     [esi+28], edx
  4520 00002F07 29D0                                    sub     eax, edx
  4521 00002F09 C1E004                                  shl     eax, 4
  4522 00002F0C BA044E9E51                              mov     edx, 519E4E04h  ; COS1_7
  4523 00002F11 F7EA                                    imul    edx
  4524 00002F13 895620                                  mov     [esi+32], edx
  4525 00002F16 8B06                                    mov     eax, [esi]      ; skip @@BF 23,24,-,COS1_7,4
  4526                                                                          ; @@BF 0,7,+,COS2_0,1
  4527 00002F18 8B561C                                  mov     edx, [esi+28]
  4528 00002F1B 0116                                    add     [esi], edx
  4529 00002F1D 29D0                                    sub     eax, edx
  4530 00002F1F D1E0                                    shl     eax, 1
  4531 00002F21 BA46FB4041                              mov     edx, 4140FB46h  ; COS2_0
  4532 00002F26 F7EA                                    imul    edx
  4533 00002F28 89561C                                  mov     [esi+28], edx
  4534 00002F2B 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,15,-,COS2_0,1
  4535 00002F2E 8B563C                                  mov     edx, [esi+60]
  4536 00002F31 015620                                  add     [esi+32], edx
  4537 00002F34 29D0                                    sub     eax, edx
  4538 00002F36 D1E0                                    shl     eax, 1
  4539 00002F38 BABA04BFBE                              mov     edx, 0BEBF04BAh ; -COS2_0
  4540 00002F3D F7EA                                    imul    edx
  4541 00002F3F 89563C                                  mov     [esi+60], edx
  4542 00002F42 8B4670                                  mov     eax, [esi+112]  ; skip @@BF 16,23,+,COS2_0,1
  4543                                                                          ;      @@BF 24,31,-,COS2_0,1
  4544                                                                          ; @@BF 3,28,+,COS0_3,1
  4545 00002F45 01460C                                  add     [esi+12], eax
  4546 00002F48 8B464C                                  mov     eax, [esi+76]   ; @@BF 12,19,+,COS0_12,2
  4547 00002F4B 014630                                  add     [esi+48], eax
  4548 00002F4E 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,12,+,COS1_3,1
  4549 00002F51 8B5630                                  mov     edx, [esi+48]
  4550 00002F54 01560C                                  add     [esi+12], edx
  4551 00002F57 29D0                                    sub     eax, edx
  4552 00002F59 D1E0                                    shl     eax, 1
  4553 00002F5B BA630ECB52                              mov     edx, 52CB0E63h
  4554 00002F60 F7EA                                    imul    edx
  4555 00002F62 895630                                  mov     [esi+48], edx
  4556 00002F65 8B466C                                  mov     eax, [esi+108]  ; @@BF 4,27,+,COS0_4,1
  4557 00002F68 014610                                  add     [esi+16], eax
  4558 00002F6B 8B4650                                  mov     eax, [esi+80]   ; @@BF 11,20,+,COS0_11,2
  4559 00002F6E 01462C                                  add     [esi+44], eax
  4560 00002F71 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,11,+,COS1_4,1
  4561 00002F74 8B562C                                  mov     edx, [esi+44]
  4562 00002F77 015610                                  add     [esi+16], edx
  4563 00002F7A 29D0                                    sub     eax, edx
  4564 00002F7C D1E0                                    shl     eax, 1
  4565 00002F7E BA2E40E264                              mov     edx, 64E2402Eh  ; COS1_4
  4566 00002F83 F7EA                                    imul    edx
  4567 00002F85 89562C                                  mov     [esi+44], edx
  4568 00002F88 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,4,+,COS2_3,3
  4569 00002F8B 8B5610                                  mov     edx, [esi+16]
  4570 00002F8E 01560C                                  add     [esi+12], edx
  4571 00002F91 29D0                                    sub     eax, edx
  4572 00002F93 C1E003                                  shl     eax, 3
  4573 00002F96 BA42670352                              mov     edx, 52036742h
  4574 00002F9B F7EA                                    imul    edx
  4575 00002F9D 895610                                  mov     [esi+16], edx
  4576 00002FA0 8B462C                                  mov     eax, [esi+44]   ; @@BF 11,12,-,COS2_3,3
  4577 00002FA3 8B5630                                  mov     edx, [esi+48]
  4578 00002FA6 01562C                                  add     [esi+44], edx
  4579 00002FA9 29D0                                    sub     eax, edx
  4580 00002FAB C1E003                                  shl     eax, 3
  4581 00002FAE BABE98FCAD                              mov     edx, 0ADFC98BEh ; -COS2_3
  4582 00002FB3 F7EA                                    imul    edx
  4583 00002FB5 895630                                  mov     [esi+48], edx
  4584 00002FB8 8B06                                    mov     eax, [esi]      ; @@BF 0,3,+,COS3_0,1
  4585 00002FBA 8B560C                                  mov     edx, [esi+12]
  4586 00002FBD 0116                                    add     [esi], edx
  4587 00002FBF 29D0                                    sub     eax, edx
  4588 00002FC1 D1E0                                    shl     eax, 1
  4589 00002FC3 BAF0E94545                              mov     edx, 4545E9F0h
  4590 00002FC8 F7EA                                    imul    edx
  4591 00002FCA 89560C                                  mov     [esi+12], edx
  4592 00002FCD 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,7,-,COS3_0,1
  4593 00002FD0 8B561C                                  mov     edx, [esi+28]
  4594 00002FD3 015610                                  add     [esi+16], edx
  4595 00002FD6 29D0                                    sub     eax, edx
  4596 00002FD8 D1E0                                    shl     eax, 1
  4597 00002FDA BA1016BABA                              mov     edx, 0BABA1610h
  4598 00002FDF F7EA                                    imul    edx
  4599 00002FE1 89561C                                  mov     [esi+28], edx
  4600 00002FE4 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,11,+,COS3_0,1
  4601 00002FE7 8B562C                                  mov     edx, [esi+44]
  4602 00002FEA 015620                                  add     [esi+32], edx
  4603 00002FED 29D0                                    sub     eax, edx
  4604 00002FEF D1E0                                    shl     eax, 1
  4605 00002FF1 BAF0E94545                              mov     edx, 4545E9F0h
  4606 00002FF6 F7EA                                    imul    edx
  4607 00002FF8 89562C                                  mov     [esi+44], edx
  4608 00002FFB 8B4630                                  mov     eax, [esi+48]   ; @@BF 12,15,-,COS3_0,1
  4609 00002FFE 8B563C                                  mov     edx, [esi+60]
  4610 00003001 015630                                  add     [esi+48], edx
  4611 00003004 29D0                                    sub     eax, edx
  4612 00003006 D1E0                                    shl     eax, 1
  4613 00003008 BA1016BABA                              mov     edx, 0BABA1610h ; -COS3_0
  4614 0000300D F7EA                                    imul    edx
  4615 0000300F 89563C                                  mov     [esi+60], edx
  4616 00003012 8B4678                                  mov     eax, [esi+120]  ; @@BF 1,30,+,COS0_1,1
  4617 00003015 014604                                  add     [esi+4], eax
  4618 00003018 8B4644                                  mov     eax, [esi+68]   ; @@BF 14,17,+,COS0_14,3
  4619 0000301B 014638                                  add     [esi+56], eax
  4620 0000301E 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,14,+,COS1_1,1
  4621 00003021 8B5638                                  mov     edx, [esi+56]
  4622 00003024 015604                                  add     [esi+4], edx
  4623 00003027 29D0                                    sub     eax, edx
  4624 00003029 D1E0                                    shl     eax, 1
  4625 0000302B BA103CE142                              mov     edx, 42E13C10h
  4626 00003030 F7EA                                    imul    edx
  4627 00003032 895638                                  mov     [esi+56], edx
  4628 00003035 8B4664                                  mov     eax, [esi+100]  ; @@BF 6,25,+,COS0_6,1
  4629 00003038 014618                                  add     [esi+24], eax
  4630 0000303B 8B4658                                  mov     eax, [esi+88]   ; @@BF 9,22,+,COS0_9,1
  4631 0000303E 014624                                  add     [esi+36], eax
  4632 00003041 8B4618                                  mov     eax, [esi+24]   ; @@BF 6,9,+,COS1_6,2
  4633 00003044 8B5624                                  mov     edx, [esi+36]
  4634 00003047 015618                                  add     [esi+24], edx
  4635 0000304A 29D0                                    sub     eax, edx
  4636 0000304C C1E002                                  shl     eax, 2
  4637 0000304F BAC2923C6E                              mov     edx, 6E3C92C2h  ; +COS1_6
  4638 00003054 F7EA                                    imul    edx
  4639 00003056 895624                                  mov     [esi+36], edx
  4640 00003059 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,6,+,COS2_1,1
  4641 0000305C 8B5618                                  mov     edx, [esi+24]
  4642 0000305F 015604                                  add     [esi+4], edx
  4643 00003062 29D0                                    sub     eax, edx
  4644 00003064 D1E0                                    shl     eax, 1
  4645 00003066 BA88DEF84C                              mov     edx, 4CF8DE88h
  4646 0000306B F7EA                                    imul    edx
  4647 0000306D 895618                                  mov     [esi+24], edx
  4648 00003070 8B4624                                  mov     eax, [esi+36]   ; @@BF 9,14,-,COS2_1,1
  4649 00003073 8B5638                                  mov     edx, [esi+56]
  4650 00003076 015624                                  add     [esi+36], edx
  4651 00003079 29D0                                    sub     eax, edx
  4652 0000307B D1E0                                    shl     eax, 1
  4653 0000307D BA782107B3                              mov     edx, 0B3072178h ; -COS2_1
  4654 00003082 F7EA                                    imul    edx
  4655 00003084 895638                                  mov     [esi+56], edx
  4656 00003087 8B4674                                  mov     eax, [esi+116]  ; @@BF 2,29,+,COS0_2,1
  4657 0000308A 014608                                  add     [esi+8], eax
  4658 0000308D 8B4648                                  mov     eax, [esi+72]   ; @@BF 13,18,+,COS0_13,3
  4659 00003090 014634                                  add     [esi+52], eax
  4660 00003093 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,13,+,COS1_2,1
  4661 00003096 8B5634                                  mov     edx, [esi+52]
  4662 00003099 015608                                  add     [esi+8], edx
  4663 0000309C 29D0                                    sub     eax, edx
  4664 0000309E D1E0                                    shl     eax, 1
  4665 000030A0 BA459F9148                              mov     edx, 48919F45h
  4666 000030A5 F7EA                                    imul    edx
  4667 000030A7 895634                                  mov     [esi+52], edx
  4668 000030AA 8B4668                                  mov     eax, [esi+104]  ; @@BF 5,26,+,COS0_5,1
  4669 000030AD 014614                                  add     [esi+20], eax
  4670 000030B0 8B4654                                  mov     eax, [esi+84]   ; @@BF 10,21,+,COS0_10,1
  4671 000030B3 014628                                  add     [esi+40], eax
  4672 000030B6 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,10,+,COS1_5,2
  4673 000030B9 8B5628                                  mov     edx, [esi+40]
  4674 000030BC 015614                                  add     [esi+20], edx
  4675 000030BF 29D0                                    sub     eax, edx
  4676 000030C1 C1E002                                  shl     eax, 2
  4677 000030C4 BAAA24E243                              mov     edx, 43E224AAh
  4678 000030C9 F7EA                                    imul    edx
  4679 000030CB 895628                                  mov     [esi+40], edx
  4680 000030CE 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,5,+,COS2_2,1
  4681 000030D1 8B5614                                  mov     edx, [esi+20]
  4682 000030D4 015608                                  add     [esi+8], edx
  4683 000030D7 29D0                                    sub     eax, edx
  4684 000030D9 D1E0                                    shl     eax, 1
  4685 000030DB BABF6B3273                              mov     edx, 73326BBFh  ; COS2_2
  4686 000030E0 F7EA                                    imul    edx
  4687 000030E2 895614                                  mov     [esi+20], edx
  4688 000030E5 8B4628                                  mov     eax, [esi+40]   ; @@BF 10,13,-,COS2_2,1
  4689 000030E8 8B5634                                  mov     edx, [esi+52]
  4690 000030EB 015628                                  add     [esi+40], edx
  4691 000030EE 29D0                                    sub     eax, edx
  4692 000030F0 D1E0                                    shl     eax, 1
  4693 000030F2 BA4194CD8C                              mov     edx, 8CCD9441h  ; -COS2_2
  4694 000030F7 F7EA                                    imul    edx
  4695 000030F9 895634                                  mov     [esi+52], edx
  4696 000030FC 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,2,+,COS3_1,2
  4697 000030FF 8B5608                                  mov     edx, [esi+8]
  4698 00003102 015604                                  add     [esi+4], edx
  4699 00003105 29D0                                    sub     eax, edx
  4700 00003107 C1E002                                  shl     eax, 2
  4701 0000310A BA46BA9E53                              mov     edx, 539EBA46h
  4702 0000310F F7EA                                    imul    edx
  4703 00003111 895608                                  mov     [esi+8], edx
  4704 00003114 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,6,-,COS3_1,2
  4705 00003117 8B5618                                  mov     edx, [esi+24]
  4706 0000311A 015614                                  add     [esi+20], edx
  4707 0000311D 29D0                                    sub     eax, edx
  4708 0000311F C1E002                                  shl     eax, 2
  4709 00003122 BABA4561AC                              mov     edx, 0AC6145BAh
  4710 00003127 F7EA                                    imul    edx
  4711 00003129 895618                                  mov     [esi+24], edx
  4712 0000312C 8B4624                                  mov     eax, [esi+36]   ; IF rate_shift LT 2
  4713                                                                          ; @@BF 9,10,+,COS3_1,2
  4714 0000312F 8B5628                                  mov     edx, [esi+40]
  4715 00003132 015624                                  add     [esi+36], edx
  4716 00003135 29D0                                    sub     eax, edx
  4717 00003137 C1E002                                  shl     eax, 2
  4718 0000313A BA46BA9E53                              mov     edx, 539EBA46h  ; +COS3_1
  4719 0000313F F7EA                                    imul    edx
  4720 00003141 895628                                  mov     [esi+40], edx
  4721 00003144 8B4634                                  mov     eax, [esi+52]   ; @@BF 13,14,-,COS3_1,2
  4722 00003147 8B5638                                  mov     edx, [esi+56]
  4723 0000314A 015634                                  add     [esi+52], edx
  4724 0000314D 29D0                                    sub     eax, edx
  4725 0000314F C1E002                                  shl     eax, 2
  4726 00003152 BABA4561AC                              mov     edx, 0AC6145BAh ; -COS3_1
  4727 00003157 F7EA                                    imul    edx
  4728 00003159 895638                                  mov     [esi+56], edx   ; ENDIF
  4729 0000315C 8B06                                    mov     eax, [esi]      ; @@BF1 macro a, b, c, d
  4730                                                                          ;   @@BF  a, b,+,COS4_0, 1
  4731                                                                          ;   @@BF  c, d,-,COS4_0, 1
  4732                                                                          ;   @@ADD c, d
  4733                                                                          ;  endm
  4734                                                                          ; @@BF1 0,1,2,3
  4735 0000315E 8B5604                                  mov     edx, [esi+4]    ; @@BF 0,1,+,COS4_0,1
  4736 00003161 0116                                    add     [esi], edx
  4737 00003163 29D0                                    sub     eax, edx
  4738 00003165 D1E0                                    shl     eax, 1
  4739 00003167 BA9A79825A                              mov     edx, 5A82799Ah
  4740 0000316C F7EA                                    imul    edx
  4741 0000316E 895604                                  mov     [esi+4], edx
  4742 00003171 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,3,+,COS4_0,1
  4743 00003174 8B560C                                  mov     edx, [esi+12]
  4744 00003177 015608                                  add     [esi+8], edx
  4745 0000317A 29D0                                    sub     eax, edx
  4746 0000317C D1E0                                    shl     eax, 1
  4747 0000317E BA66867DA5                              mov     edx, 0A57D8666h
  4748 00003183 F7EA                                    imul    edx
  4749 00003185 89560C                                  mov     [esi+12], edx
  4750 00003188 8B460C                                  mov     eax, [esi+12]   ; @@ADD 2,3
  4751 0000318B 014608                                  add     [esi+8], eax
  4752 0000318E 8B4610                                  mov     eax, [esi+16]   ; @@BF2 macro a, b, c, d
  4753                                                                          ;   @@BF  a, b,+,COS4_0, 1
  4754                                                                          ;   @@BF  c, d,-,COS4_0, 1
  4755                                                                          ;   @@ADD c, d
  4756                                                                          ;   @@ADD a, c
  4757                                                                          ;   @@ADD c, b
  4758                                                                          ;   @@ADD b, d
  4759                                                                          ;  endm
  4760                                                                          ; @@BF2 4,5,6,7
  4761 00003191 8B5614                                  mov     edx, [esi+20]   ; @@BF 4,5,+,COS4_0,1
  4762 00003194 015610                                  add     [esi+16], edx
  4763 00003197 29D0                                    sub     eax, edx
  4764 00003199 D1E0                                    shl     eax, 1
  4765 0000319B BA9A79825A                              mov     edx, 5A82799Ah  ; +COS4_0
  4766 000031A0 F7EA                                    imul    edx
  4767 000031A2 895614                                  mov     [esi+20], edx
  4768 000031A5 8B4618                                  mov     eax, [esi+24]   ; @@BF 6,7,-,COS4_0,1
  4769 000031A8 8B561C                                  mov     edx, [esi+28]
  4770 000031AB 015618                                  add     [esi+24], edx
  4771 000031AE 29D0                                    sub     eax, edx
  4772 000031B0 D1E0                                    shl     eax, 1
  4773 000031B2 BA66867DA5                              mov     edx, 0A57D8666h ; -COS4_0
  4774 000031B7 F7EA                                    imul    edx
  4775 000031B9 89561C                                  mov     [esi+28], edx
  4776 000031BC 8B461C                                  mov     eax, [esi+28]   ; @@ADD macro dst,src
  4777                                                                          ;   IF (rate_shift EQ 0) or (dst LT 16)
  4778                                                                          ;    ;tab[a] += tab[b]
  4779                                                                          ;    mov  eax,dword ptr [esi+src*4]
  4780                                                                          ;    add  dword ptr [esi+dst*4],eax
  4781                                                                          ;   ENDIF
  4782                                                                          ;  endm
  4783                                                                          ; @@ADD 6,7
  4784 000031BF 014618                                  add     [esi+24], eax
  4785 000031C2 8B4618                                  mov     eax, [esi+24]   ; @@ADD 4,6
  4786 000031C5 014610                                  add     [esi+16], eax
  4787 000031C8 8B4614                                  mov     eax, [esi+20]   ; @@ADD 6,5
  4788 000031CB 014618                                  add     [esi+24], eax
  4789 000031CE 8B461C                                  mov     eax, [esi+28]   ; @@ADD 5,7
  4790 000031D1 014614                                  add     [esi+20], eax
  4791 000031D4 8B4620                                  mov     eax, [esi+32]   ; IF rate_shift LT 2
  4792                                                                          ; @@BF1 8,9,10,11
  4793 000031D7 8B5624                                  mov     edx, [esi+36]
  4794 000031DA 015620                                  add     [esi+32], edx
  4795 000031DD 29D0                                    sub     eax, edx
  4796 000031DF D1E0                                    shl     eax, 1
  4797 000031E1 BA9A79825A                              mov     edx, 5A82799Ah
  4798 000031E6 F7EA                                    imul    edx
  4799 000031E8 895624                                  mov     [esi+36], edx
  4800 000031EB 8B4628                                  mov     eax, [esi+40]
  4801 000031EE 8B562C                                  mov     edx, [esi+44]
  4802 000031F1 015628                                  add     [esi+40], edx
  4803 000031F4 29D0                                    sub     eax, edx
  4804 000031F6 D1E0                                    shl     eax, 1
  4805 000031F8 BA66867DA5                              mov     edx, 0A57D8666h
  4806 000031FD F7EA                                    imul    edx
  4807 000031FF 89562C                                  mov     [esi+44], edx
  4808 00003202 8B462C                                  mov     eax, [esi+44]
  4809 00003205 014628                                  add     [esi+40], eax
  4810 00003208 8B4630                                  mov     eax, [esi+48]   ; @@BF2 12,13,14,15
  4811 0000320B 8B5634                                  mov     edx, [esi+52]
  4812 0000320E 015630                                  add     [esi+48], edx
  4813 00003211 29D0                                    sub     eax, edx
  4814 00003213 D1E0                                    shl     eax, 1
  4815 00003215 BA9A79825A                              mov     edx, 5A82799Ah
  4816 0000321A F7EA                                    imul    edx
  4817 0000321C 895634                                  mov     [esi+52], edx
  4818 0000321F 8B4638                                  mov     eax, [esi+56]
  4819 00003222 8B563C                                  mov     edx, [esi+60]
  4820 00003225 015638                                  add     [esi+56], edx
  4821 00003228 29D0                                    sub     eax, edx
  4822 0000322A D1E0                                    shl     eax, 1
  4823 0000322C BA66867DA5                              mov     edx, 0A57D8666h
  4824 00003231 F7EA                                    imul    edx
  4825 00003233 89563C                                  mov     [esi+60], edx
  4826 00003236 8B463C                                  mov     eax, [esi+60]
  4827 00003239 014638                                  add     [esi+56], eax
  4828 0000323C 8B4638                                  mov     eax, [esi+56]
  4829 0000323F 014630                                  add     [esi+48], eax
  4830 00003242 8B4634                                  mov     eax, [esi+52]
  4831 00003245 014638                                  add     [esi+56], eax
  4832 00003248 8B463C                                  mov     eax, [esi+60]
  4833 0000324B 014634                                  add     [esi+52], eax
  4834 0000324E 8B06                                    mov     eax, [esi]      ; @@OUT macro dst,src1,src2
  4835                                                                          ; IF ((dst AND ((1 SHL rate_shift)-1)) EQ 0)
  4836                                                                          ;    mov eax,dword ptr [esi+src1*4]
  4837                                                                          ;    IFDIFI <src2>,<->
  4838                                                                          ;      add eax,dword ptr [esi+src2*4]
  4839                                                                          ;    ENDIF
  4840                                                                          ;    IF SYNTH32
  4841                                                                          ;       mov dword ptr [edi+dst*4],eax
  4842                                                                          ;       IF (LONG_WINDOW EQ 0)
  4843                                                                          ;          mov dword ptr [edi+dst*4+512*4],eax
  4844                                                                          ;       ENDIF
  4845                                                                          ;    ELSE
  4846                                                                          ;        ......
  4847                                                                          ;    ENDIF
  4848                                                                          ; @@OUT 0,0,-
  4849 00003250 8907                                    mov     [edi], eax
  4850 00003252 8B4604                                  mov     eax, [esi+4]    ; @@OUT 16,1,-
  4851 00003255 894740                                  mov     [edi+64], eax
  4852 00003258 8B4608                                  mov     eax, [esi+8]    ; @@OUT 8,2,-
  4853 0000325B 894720                                  mov     [edi+32], eax
  4854 0000325E 8B460C                                  mov     eax, [esi+12]   ; @@OUT 24,3,-
  4855 00003261 894760                                  mov     [edi+96], eax
  4856 00003264 8B4610                                  mov     eax, [esi+16]   ; @@OUT 4,4,-
  4857 00003267 894710                                  mov     [edi+16], eax
  4858 0000326A 8B4614                                  mov     eax, [esi+20]   ; @@OUT 20,5,-
  4859 0000326D 894750                                  mov     [edi+80], eax
  4860 00003270 8B4618                                  mov     eax, [esi+24]   ; @@OUT 12,6,-
  4861 00003273 894730                                  mov     [edi+48], eax
  4862 00003276 8B461C                                  mov     eax, [esi+28]   ; @@OUT 28,7,-
  4863 00003279 894770                                  mov     [edi+112], eax
  4864 0000327C 8B4620                                  mov     eax, [esi+32]   ; @@OUT 2,8,12
  4865 0000327F 034630                                  add     eax, [esi+48]
  4866 00003282 894708                                  mov     [edi+8], eax
  4867 00003285 8B4624                                  mov     eax, [esi+36]   ; @@OUT 18,9,13
  4868 00003288 034634                                  add     eax, [esi+52]
  4869 0000328B 894748                                  mov     [edi+72], eax
  4870 0000328E 8B4628                                  mov     eax, [esi+40]   ; @@OUT 10,10,14
  4871 00003291 034638                                  add     eax, [esi+56]
  4872 00003294 894728                                  mov     [edi+40], eax
  4873 00003297 8B462C                                  mov     eax, [esi+44]   ; @@OUT 26,11,15
  4874 0000329A 03463C                                  add     eax, [esi+60]
  4875 0000329D 894768                                  mov     [edi+104], eax
  4876 000032A0 8B4630                                  mov     eax, [esi+48]   ; @@OUT 6,12,10
  4877 000032A3 034628                                  add     eax, [esi+40]
  4878 000032A6 894718                                  mov     [edi+24], eax
  4879 000032A9 8B4634                                  mov     eax, [esi+52]   ; @@OUT 22,13,11
  4880 000032AC 03462C                                  add     eax, [esi+44]
  4881 000032AF 894758                                  mov     [edi+88], eax
  4882 000032B2 8B4638                                  mov     eax, [esi+56]   ; @@OUT 14,14,9
  4883 000032B5 034624                                  add     eax, [esi+36]
  4884 000032B8 894738                                  mov     [edi+56], eax
  4885 000032BB 8B463C                                  mov     eax, [esi+60]   ; @@OUT 30,15,-
  4886 000032BE 894778                                  mov     [edi+120], eax
  4887 000032C1 C3                                      retn
  4888                                  
  4889                                  
  4890                                  ; =============== S U B R O U T I N E =======================================
  4891                                  
  4892                                  
  4893                                  mp3_dct32_shift_2:
  4894 000032C2 8B467C                                  mov     eax, [esi+124]  ; mp3_dct32_macro macro rate_shift ; rate_shift = 2
  4895 000032C5 0106                                    add     [esi], eax      ; @@BF macro a,b,sign,cos,shift
  4896                                                                          ; @@need_a equ (rate_shift EQ 0) or (a LT 16) ; a = 0
  4897                                                                          ; @@need_b equ (rate_shift EQ 0) or (b LT 16) ; b = 31
  4898                                                                          ; IF @@need_a AND @@need_b ; rate_shift = 0
  4899                                                                          ;    mov eax,dword ptr [esi+a*4]
  4900                                                                          ;    mov edx,dword ptr [esi+b*4]
  4901                                                                          ;    add dword ptr [esi+a*4],edx
  4902                                                                          ; ELSEIF @@need_a
  4903                                                                          ;    mov eax,dword ptr [esi+b*4]
  4904                                                                          ;    add dword ptr [esi+a*4],eax
  4905                                                                          ;
  4906                                                                          ; @@BF 0,31,+,COS0_0,1
  4907 000032C7 8B4640                                  mov     eax, [esi+64]   ; @@BF 15,16,+,COS0_15,5
  4908 000032CA 01463C                                  add     [esi+60], eax
  4909 000032CD 8B06                                    mov     eax, [esi]      ; @@BF 0,15,+,COS1_0,1
  4910 000032CF 8B563C                                  mov     edx, [esi+60]
  4911 000032D2 0116                                    add     [esi], edx
  4912 000032D4 29D0                                    sub     eax, edx
  4913 000032D6 D1E0                                    shl     eax, 1
  4914 000032D8 BA72464F40                              mov     edx, 404F4672h  ; COS1_0
  4915 000032DD F7EA                                    imul    edx
  4916 000032DF 89563C                                  mov     [esi+60], edx
  4917 000032E2 8B4660                                  mov     eax, [esi+96]   ; @@BF 7,24,+,COS0_7,1
  4918 000032E5 01461C                                  add     [esi+28], eax
  4919 000032E8 8B465C                                  mov     eax, [esi+92]   ; @@BF 8,23,+,COS0_8,1
  4920 000032EB 014620                                  add     [esi+32], eax
  4921 000032EE 8B461C                                  mov     eax, [esi+28]   ; @@BF 7,8,+,COS1_7,4
  4922 000032F1 8B5620                                  mov     edx, [esi+32]
  4923 000032F4 01561C                                  add     [esi+28], edx
  4924 000032F7 29D0                                    sub     eax, edx
  4925 000032F9 C1E004                                  shl     eax, 4
  4926 000032FC BA044E9E51                              mov     edx, 519E4E04h  ; COS1_7
  4927 00003301 F7EA                                    imul    edx
  4928 00003303 895620                                  mov     [esi+32], edx
  4929 00003306 8B06                                    mov     eax, [esi]      ; @@BF 0,7,+,COS2_0,1
  4930 00003308 8B561C                                  mov     edx, [esi+28]
  4931 0000330B 0116                                    add     [esi], edx
  4932 0000330D 29D0                                    sub     eax, edx
  4933 0000330F D1E0                                    shl     eax, 1
  4934 00003311 BA46FB4041                              mov     edx, 4140FB46h  ; COS2_0
  4935 00003316 F7EA                                    imul    edx
  4936 00003318 89561C                                  mov     [esi+28], edx
  4937 0000331B 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,15,-,COS2_0,1
  4938 0000331E 8B563C                                  mov     edx, [esi+60]
  4939 00003321 015620                                  add     [esi+32], edx
  4940 00003324 29D0                                    sub     eax, edx
  4941 00003326 D1E0                                    shl     eax, 1
  4942 00003328 BABA04BFBE                              mov     edx, 0BEBF04BAh
  4943 0000332D F7EA                                    imul    edx
  4944 0000332F 89563C                                  mov     [esi+60], edx
  4945 00003332 8B4670                                  mov     eax, [esi+112]  ; @@BF 3,28,+,COS0_3,1
  4946 00003335 01460C                                  add     [esi+12], eax
  4947 00003338 8B464C                                  mov     eax, [esi+76]   ; @@BF 12,19,+,COS0_12,2
  4948 0000333B 014630                                  add     [esi+48], eax
  4949 0000333E 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,12,+,COS1_3,1
  4950 00003341 8B5630                                  mov     edx, [esi+48]
  4951 00003344 01560C                                  add     [esi+12], edx
  4952 00003347 29D0                                    sub     eax, edx
  4953 00003349 D1E0                                    shl     eax, 1
  4954 0000334B BA630ECB52                              mov     edx, 52CB0E63h  ; COS1_3
  4955 00003350 F7EA                                    imul    edx
  4956 00003352 895630                                  mov     [esi+48], edx
  4957 00003355 8B466C                                  mov     eax, [esi+108]  ; @@BF 4,27,+,COS0_4,1
  4958 00003358 014610                                  add     [esi+16], eax
  4959 0000335B 8B4650                                  mov     eax, [esi+80]   ; @@BF 11,20,+,COS0_11,2
  4960 0000335E 01462C                                  add     [esi+44], eax
  4961 00003361 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,11,+,COS1_4,1
  4962 00003364 8B562C                                  mov     edx, [esi+44]
  4963 00003367 015610                                  add     [esi+16], edx
  4964 0000336A 29D0                                    sub     eax, edx
  4965 0000336C D1E0                                    shl     eax, 1
  4966 0000336E BA2E40E264                              mov     edx, 64E2402Eh
  4967 00003373 F7EA                                    imul    edx
  4968 00003375 89562C                                  mov     [esi+44], edx
  4969 00003378 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,4,+,COS2_3,3
  4970 0000337B 8B5610                                  mov     edx, [esi+16]
  4971 0000337E 01560C                                  add     [esi+12], edx
  4972 00003381 29D0                                    sub     eax, edx
  4973 00003383 C1E003                                  shl     eax, 3
  4974 00003386 BA42670352                              mov     edx, 52036742h
  4975 0000338B F7EA                                    imul    edx
  4976 0000338D 895610                                  mov     [esi+16], edx
  4977 00003390 8B462C                                  mov     eax, [esi+44]   ; @@BF 11,12,-,COS2_3,3
  4978 00003393 8B5630                                  mov     edx, [esi+48]
  4979 00003396 01562C                                  add     [esi+44], edx
  4980 00003399 29D0                                    sub     eax, edx
  4981 0000339B C1E003                                  shl     eax, 3
  4982 0000339E BABE98FCAD                              mov     edx, 0ADFC98BEh ; -COS2_3
  4983 000033A3 F7EA                                    imul    edx
  4984 000033A5 895630                                  mov     [esi+48], edx
  4985 000033A8 8B06                                    mov     eax, [esi]      ; @@BF 0,3,+,COS3_0,1
  4986 000033AA 8B560C                                  mov     edx, [esi+12]
  4987 000033AD 0116                                    add     [esi], edx
  4988 000033AF 29D0                                    sub     eax, edx
  4989 000033B1 D1E0                                    shl     eax, 1
  4990 000033B3 BAF0E94545                              mov     edx, 4545E9F0h
  4991 000033B8 F7EA                                    imul    edx
  4992 000033BA 89560C                                  mov     [esi+12], edx
  4993 000033BD 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,7,-,COS3_0,1
  4994 000033C0 8B561C                                  mov     edx, [esi+28]
  4995 000033C3 015610                                  add     [esi+16], edx
  4996 000033C6 29D0                                    sub     eax, edx
  4997 000033C8 D1E0                                    shl     eax, 1
  4998 000033CA BA1016BABA                              mov     edx, 0BABA1610h
  4999 000033CF F7EA                                    imul    edx
  5000 000033D1 89561C                                  mov     [esi+28], edx
  5001 000033D4 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,11,+,COS3_0,1
  5002 000033D7 8B562C                                  mov     edx, [esi+44]
  5003 000033DA 015620                                  add     [esi+32], edx
  5004 000033DD 29D0                                    sub     eax, edx
  5005 000033DF D1E0                                    shl     eax, 1
  5006 000033E1 BAF0E94545                              mov     edx, 4545E9F0h
  5007 000033E6 F7EA                                    imul    edx
  5008 000033E8 89562C                                  mov     [esi+44], edx
  5009 000033EB 8B4630                                  mov     eax, [esi+48]   ; @@BF 12,15,-,COS3_0,1
  5010 000033EE 8B563C                                  mov     edx, [esi+60]
  5011 000033F1 015630                                  add     [esi+48], edx
  5012 000033F4 29D0                                    sub     eax, edx
  5013 000033F6 D1E0                                    shl     eax, 1
  5014 000033F8 BA1016BABA                              mov     edx, 0BABA1610h
  5015 000033FD F7EA                                    imul    edx
  5016 000033FF 89563C                                  mov     [esi+60], edx
  5017 00003402 8B4678                                  mov     eax, [esi+120]  ; @@BF 1,30,+,COS0_1,1
  5018 00003405 014604                                  add     [esi+4], eax
  5019 00003408 8B4644                                  mov     eax, [esi+68]   ; @@BF 14,17,+,COS0_14,3
  5020 0000340B 014638                                  add     [esi+56], eax
  5021 0000340E 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,14,+,COS1_1,1
  5022 00003411 8B5638                                  mov     edx, [esi+56]
  5023 00003414 015604                                  add     [esi+4], edx
  5024 00003417 29D0                                    sub     eax, edx
  5025 00003419 D1E0                                    shl     eax, 1
  5026 0000341B BA103CE142                              mov     edx, 42E13C10h  ; COS1_1
  5027 00003420 F7EA                                    imul    edx
  5028 00003422 895638                                  mov     [esi+56], edx
  5029 00003425 8B4664                                  mov     eax, [esi+100]  ; @@BF 6,25,+,COS0_6,1
  5030 00003428 014618                                  add     [esi+24], eax
  5031 0000342B 8B4658                                  mov     eax, [esi+88]   ; @@BF 9,22,+,COS0_9,1
  5032 0000342E 014624                                  add     [esi+36], eax
  5033 00003431 8B4618                                  mov     eax, [esi+24]   ; @@BF 6,9,+,COS1_6,2
  5034 00003434 8B5624                                  mov     edx, [esi+36]
  5035 00003437 015618                                  add     [esi+24], edx
  5036 0000343A 29D0                                    sub     eax, edx
  5037 0000343C C1E002                                  shl     eax, 2
  5038 0000343F BAC2923C6E                              mov     edx, 6E3C92C2h
  5039 00003444 F7EA                                    imul    edx
  5040 00003446 895624                                  mov     [esi+36], edx
  5041 00003449 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,6,+,COS2_1,1
  5042 0000344C 8B5618                                  mov     edx, [esi+24]
  5043 0000344F 015604                                  add     [esi+4], edx
  5044 00003452 29D0                                    sub     eax, edx
  5045 00003454 D1E0                                    shl     eax, 1
  5046 00003456 BA88DEF84C                              mov     edx, 4CF8DE88h  ; COS2_1
  5047 0000345B F7EA                                    imul    edx
  5048 0000345D 895618                                  mov     [esi+24], edx
  5049 00003460 8B4624                                  mov     eax, [esi+36]   ; @@BF 9,14,-,COS2_1,1
  5050 00003463 8B5638                                  mov     edx, [esi+56]
  5051 00003466 015624                                  add     [esi+36], edx
  5052 00003469 29D0                                    sub     eax, edx
  5053 0000346B D1E0                                    shl     eax, 1
  5054 0000346D BA782107B3                              mov     edx, 0B3072178h ; -COS2_1
  5055 00003472 F7EA                                    imul    edx
  5056 00003474 895638                                  mov     [esi+56], edx
  5057 00003477 8B4674                                  mov     eax, [esi+116]  ; @@BF 2,29,+,COS0_2,1
  5058 0000347A 014608                                  add     [esi+8], eax
  5059 0000347D 8B4648                                  mov     eax, [esi+72]   ; @@BF 13,18,+,COS0_13,3
  5060 00003480 014634                                  add     [esi+52], eax
  5061 00003483 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,13,+,COS1_2,1
  5062 00003486 8B5634                                  mov     edx, [esi+52]
  5063 00003489 015608                                  add     [esi+8], edx
  5064 0000348C 29D0                                    sub     eax, edx
  5065 0000348E D1E0                                    shl     eax, 1
  5066 00003490 BA459F9148                              mov     edx, 48919F45h
  5067 00003495 F7EA                                    imul    edx
  5068 00003497 895634                                  mov     [esi+52], edx
  5069 0000349A 8B4668                                  mov     eax, [esi+104]  ; @@BF 5,26,+,COS0_5,1
  5070 0000349D 014614                                  add     [esi+20], eax
  5071 000034A0 8B4654                                  mov     eax, [esi+84]   ; @@BF 10,21,+,COS0_10,1
  5072 000034A3 014628                                  add     [esi+40], eax
  5073 000034A6 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,10,+,COS1_5,2
  5074 000034A9 8B5628                                  mov     edx, [esi+40]
  5075 000034AC 015614                                  add     [esi+20], edx
  5076 000034AF 29D0                                    sub     eax, edx
  5077 000034B1 C1E002                                  shl     eax, 2
  5078 000034B4 BAAA24E243                              mov     edx, 43E224AAh
  5079 000034B9 F7EA                                    imul    edx
  5080 000034BB 895628                                  mov     [esi+40], edx
  5081 000034BE 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,5,+,COS2_2,1
  5082 000034C1 8B5614                                  mov     edx, [esi+20]
  5083 000034C4 015608                                  add     [esi+8], edx
  5084 000034C7 29D0                                    sub     eax, edx
  5085 000034C9 D1E0                                    shl     eax, 1
  5086 000034CB BABF6B3273                              mov     edx, 73326BBFh  ; COS2_2
  5087 000034D0 F7EA                                    imul    edx
  5088 000034D2 895614                                  mov     [esi+20], edx
  5089 000034D5 8B4628                                  mov     eax, [esi+40]   ; @@BF 10,13,-,COS2_2,1
  5090 000034D8 8B5634                                  mov     edx, [esi+52]
  5091 000034DB 015628                                  add     [esi+40], edx
  5092 000034DE 29D0                                    sub     eax, edx
  5093 000034E0 D1E0                                    shl     eax, 1
  5094 000034E2 BA4194CD8C                              mov     edx, 8CCD9441h  ; -COS2_2
  5095 000034E7 F7EA                                    imul    edx
  5096 000034E9 895634                                  mov     [esi+52], edx
  5097 000034EC 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,2,+,COS3_1,2
  5098 000034EF 8B5608                                  mov     edx, [esi+8]
  5099 000034F2 015604                                  add     [esi+4], edx
  5100 000034F5 29D0                                    sub     eax, edx
  5101 000034F7 C1E002                                  shl     eax, 2
  5102 000034FA BA46BA9E53                              mov     edx, 539EBA46h  ; COS3_1
  5103 000034FF F7EA                                    imul    edx
  5104 00003501 895608                                  mov     [esi+8], edx
  5105 00003504 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,6,-,COS3_1,2
  5106 00003507 8B5618                                  mov     edx, [esi+24]
  5107 0000350A 015614                                  add     [esi+14h], edx
  5108 0000350D 29D0                                    sub     eax, edx
  5109 0000350F C1E002                                  shl     eax, 2
  5110 00003512 BABA4561AC                              mov     edx, 0AC6145BAh ; -COS3_1
  5111 00003517 F7EA                                    imul    edx
  5112 00003519 895618                                  mov     [esi+24], edx
  5113 0000351C 8B06                                    mov     eax, [esi]      ; @@BF1 macro a, b, c, d
  5114                                                                          ;   @@BF  a, b,+,COS4_0, 1
  5115                                                                          ;   @@BF  c, d,-,COS4_0, 1
  5116                                                                          ;   @@ADD c, d
  5117                                                                          ;  endm
  5118                                                                          ; @@BF1 0,1,2,3
  5119 0000351E 8B5604                                  mov     edx, [esi+4]    ; @@BF 0,1,+,COS4_0,1
  5120 00003521 0116                                    add     [esi], edx
  5121 00003523 29D0                                    sub     eax, edx
  5122 00003525 D1E0                                    shl     eax, 1
  5123 00003527 BA9A79825A                              mov     edx, 5A82799Ah
  5124 0000352C F7EA                                    imul    edx
  5125 0000352E 895604                                  mov     [esi+4], edx
  5126 00003531 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,3,-,COS4_0,1
  5127 00003534 8B560C                                  mov     edx, [esi+12]
  5128 00003537 015608                                  add     [esi+8], edx
  5129 0000353A 29D0                                    sub     eax, edx
  5130 0000353C D1E0                                    shl     eax, 1
  5131 0000353E BA66867DA5                              mov     edx, 0A57D8666h
  5132 00003543 F7EA                                    imul    edx
  5133 00003545 89560C                                  mov     [esi+12], edx
  5134 00003548 8B460C                                  mov     eax, [esi+12]   ; @@ADD 2,3
  5135 0000354B 014608                                  add     [esi+8], eax
  5136 0000354E 8B4610                                  mov     eax, [esi+16]   ; @@BF2 macro a, b, c, d
  5137                                                                          ;   @@BF  a, b,+,COS4_0, 1
  5138                                                                          ;   @@BF  c, d,-,COS4_0, 1
  5139                                                                          ;   @@ADD c, d
  5140                                                                          ;   @@ADD a, c
  5141                                                                          ;   @@ADD c, b
  5142                                                                          ;   @@ADD b, d
  5143                                                                          ;  endm
  5144                                                                          ; @@BF2 4,5,6,7
  5145 00003551 8B5614                                  mov     edx, [esi+20]   ; @@BF 4,5,+,COS4_0,1
  5146 00003554 015610                                  add     [esi+16], edx
  5147 00003557 29D0                                    sub     eax, edx
  5148 00003559 D1E0                                    shl     eax, 1
  5149 0000355B BA9A79825A                              mov     edx, 5A82799Ah  ; COS4_0
  5150 00003560 F7EA                                    imul    edx
  5151 00003562 895614                                  mov     [esi+20], edx
  5152 00003565 8B4618                                  mov     eax, [esi+24]   ; @@BF 6,7,-,COS4_0,1
  5153 00003568 8B561C                                  mov     edx, [esi+28]
  5154 0000356B 015618                                  add     [esi+18h], edx
  5155 0000356E 29D0                                    sub     eax, edx
  5156 00003570 D1E0                                    shl     eax, 1
  5157 00003572 BA66867DA5                              mov     edx, 0A57D8666h ; -COS4_0
  5158 00003577 F7EA                                    imul    edx
  5159 00003579 89561C                                  mov     [esi+28], edx
  5160 0000357C 8B461C                                  mov     eax, [esi+28]   ; @@ADD 6,7
  5161 0000357F 014618                                  add     [esi+24], eax
  5162 00003582 8B4618                                  mov     eax, [esi+24]   ; @@ADD 4,6
  5163 00003585 014610                                  add     [esi+16], eax
  5164 00003588 8B4614                                  mov     eax, [esi+20]   ; @@ADD 6,5
  5165 0000358B 014618                                  add     [esi+24], eax
  5166 0000358E 8B461C                                  mov     eax, [esi+28]   ; @@ADD 5,7
  5167 00003591 014614                                  add     [esi+20], eax
  5168 00003594 8B06                                    mov     eax, [esi]      ; @@OUT macro dst,src1,src2
  5169                                                                          ; IF ((dst AND ((1 SHL rate_shift)-1)) EQ 0)
  5170                                                                          ;    mov eax,dword ptr [esi+src1*4]
  5171                                                                          ;    IFDIFI <src2>,<->
  5172                                                                          ;      add eax,dword ptr [esi+src2*4]
  5173                                                                          ;    ENDIF
  5174                                                                          ;    IF SYNTH32
  5175                                                                          ;       mov dword ptr [edi+dst*4],eax
  5176                                                                          ;       IF (LONG_WINDOW EQ 0)
  5177                                                                          ;          mov dword ptr [edi+dst*4+512*4],eax
  5178                                                                          ;       ENDIF
  5179                                                                          ;    ELSE
  5180                                                                          ;        ......
  5181                                                                          ;    ENDIF
  5182                                                                          ; @@OUT 0,0,-
  5183 00003596 8907                                    mov     [edi], eax
  5184 00003598 8B4604                                  mov     eax, [esi+4]    ; @@OUT 16,1,-
  5185 0000359B 894740                                  mov     [edi+64], eax
  5186 0000359E 8B4608                                  mov     eax, [esi+8]    ; @@OUT 8,2,-
  5187 000035A1 894720                                  mov     [edi+32], eax
  5188 000035A4 8B460C                                  mov     eax, [esi+12]   ; @@OUT 24,3,-
  5189 000035A7 894760                                  mov     [edi+96], eax
  5190 000035AA 8B4610                                  mov     eax, [esi+16]   ; @@OUT 4,4,-
  5191 000035AD 894710                                  mov     [edi+16], eax
  5192 000035B0 8B4614                                  mov     eax, [esi+20]   ; @@OUT 20,5,-
  5193 000035B3 894750                                  mov     [edi+80], eax
  5194 000035B6 8B4618                                  mov     eax, [esi+24]   ; @@OUT 12,6,-
  5195 000035B9 894730                                  mov     [edi+48], eax
  5196 000035BC 8B461C                                  mov     eax, [esi+28]   ; @@OUT 28,7,-
  5197 000035BF 894770                                  mov     [edi+112], eax
  5198 000035C2 C3                                      retn
  5199                                  
  5200                                  
  5201                                  ; =============== S U B R O U T I N E =======================================
  5202                                  
  5203                                  
  5204                                  synth_16bit_shift_0_fast:
  5205 000035C3 F605[54760000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 0,0,1
  5206 000035CA 740E                                    jz      short .no_rdtsc_supported
  5207 000035CC 0F31                                    rdtsc
  5208 000035CE 2905[CC770000]                          sub     [rdtsc_synth_dct], eax
  5209 000035D4 1915[D0770000]                          sbb     [rdtsc_synth_dct+4], edx
  5210                                  
  5211                                  .no_rdtsc_supported:
  5212 000035DA BE[00BE0000]                            mov	esi, mp3_sb_samples
  5213 000035DF 8B3D[94F40000]                          mov	edi, [mp3_samples_dst]
  5214 000035E5 C705[A0F40000]0000-                     mov	dword [mp3_curr_channel], 0
  5214 000035ED 0000               
  5215                                  
  5216                                  .synth_channel_lop:
  5217 000035EF 56                                      push	esi
  5218 000035F0 57                                      push	edi
  5219 000035F1 893D[E09D0000]                          mov	[mp3_curr_syn_dst], edi
  5220 000035F7 C705[A8F40000]0000-                     mov	dword [mp3_curr_frame], 0
  5220 000035FF 0000               
  5221                                  
  5222                                  .synth_frame_lop:
  5223 00003601 56                                      push    esi
  5224 00003602 F605[54760000]10                        test    byte [cpuid_flags], 10h
  5225 00003609 740E                                    jz      short .no_rdtsc_supported@
  5226 0000360B 0F31                                    rdtsc
  5227 0000360D 2905[E4770000]                          sub     [rdtsc_dct32], eax
  5228 00003613 1915[E8770000]                          sbb     [rdtsc_dct32+4], edx
  5229                                  
  5230                                  .no_rdtsc_supported@:
  5231 00003619 8B15[A0F40000]                          mov     edx, [mp3_curr_channel]
  5232 0000361F 8B0495[F8BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  5233 00003626 832C95[F8BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  5234 0000362E C1E20A                                  shl     edx, 10
  5235 00003631 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  5236 00003636 09D0                                    or      eax, edx
  5237 00003638 A3[DC9D0000]                            mov     [mp3_curr_syn_index], eax
  5238 0000363D 8B3D[DC9D0000]                          mov     edi, [mp3_curr_syn_index]
  5239 00003643 8D3CBD[F89D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  5240 0000364A E8A3EFFFFF                              call    mp3_dct32_shift_0
  5241 0000364F F605[54760000]10                        test    byte [cpuid_flags], 10h
  5242 00003656 740E                                    jz      short .no_rdtsc_supported@@
  5243 00003658 0F31                                    rdtsc
  5244 0000365A 0105[E4770000]                          add     [rdtsc_dct32], eax
  5245 00003660 1115[E8770000]                          adc     [rdtsc_dct32+4], edx
  5246                                  
  5247                                  .no_rdtsc_supported@@:
  5248 00003666 F605[54760000]10                        test    byte [cpuid_flags], 10h
  5249 0000366D 740E                                    jz      short .no_rdtsc_supported@@@
  5250 0000366F 0F31                                    rdtsc
  5251 00003671 2905[FC770000]                          sub     [rdtsc_synth], eax
  5252 00003677 1915[00780000]                          sbb     [rdtsc_synth+4], edx
  5253                                  
  5254                                  .no_rdtsc_supported@@@:
  5255 0000367D E888000000                              call    mp3_synth_filter_this_16bit_shift_0_fast ;
  5256                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  5257 00003682 F605[54760000]10                        test    byte [cpuid_flags], 10h
  5258 00003689 740E                                    jz      short .no_rdtsc_supported@@@@
  5259 0000368B 0F31                                    rdtsc
  5260 0000368D 0105[FC770000]                          add     [rdtsc_synth], eax
  5261 00003693 1115[00780000]                          adc     [rdtsc_synth+4], edx
  5262                                  
  5263                                  .no_rdtsc_supported@@@@:
  5264 00003699 5E                                      pop     esi
  5265 0000369A A1[9CF40000]                            mov     eax, [mp3_samples_dst_step]
  5266 0000369F C1E005                                  shl     eax, 5
  5267 000036A2 8A0D[4F760000]                          mov     cl, [option_rate_shift]
  5268 000036A8 D3E8                                    shr     eax, cl
  5269 000036AA 0105[E09D0000]                          add     [mp3_curr_syn_dst], eax
  5270 000036B0 81C680000000                            add     esi, 128        ; SBLIMIT*4
  5271 000036B6 FF05[A8F40000]                          inc     dword [mp3_curr_frame]
  5272 000036BC A1[A8F40000]                            mov     eax, [mp3_curr_frame]
  5273 000036C1 3B05[E49D0000]                          cmp     eax, [mp3_nb_frames]
  5274 000036C7 0F8234FFFFFF                            jb      .synth_frame_lop
  5275 000036CD 5F                                      pop     edi
  5276 000036CE 5E                                      pop     esi
  5277 000036CF 033D[D89D0000]                          add     edi, [mp3_bytes_per_sample]
  5278 000036D5 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  5279 000036DB FF05[A0F40000]                          inc     dword [mp3_curr_channel]
  5280 000036E1 A1[A0F40000]                            mov     eax, [mp3_curr_channel]
  5281 000036E6 3B05[D09D0000]                          cmp     eax, [mp3_output_num_channels]
  5282 000036EC 0F82FDFEFFFF                            jb      .synth_channel_lop
  5283 000036F2 F605[54760000]10                        test    byte [cpuid_flags], 10h
  5284 000036F9 740E                                    jz      short .no_rdtsc_supported@@@@@
  5285 000036FB 0F31                                    rdtsc
  5286 000036FD 0105[CC770000]                          add     [rdtsc_synth_dct], eax
  5287 00003703 1115[D0770000]                          adc     [rdtsc_synth_dct+4], edx
  5288                                  
  5289                                  .no_rdtsc_supported@@@@@:
  5290 00003709 C3                                      retn
  5291                                  
  5292                                  
  5293                                  ; =============== S U B R O U T I N E =======================================
  5294                                  
  5295                                  
  5296                                  mp3_synth_filter_this_16bit_shift_0_fast:
  5297 0000370A A1[DC9D0000]                            mov     eax, [mp3_curr_syn_index]
  5298 0000370F A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh
  5299 00003714 0F849C010000                            jz      .append_copy_to_window
  5300 0000371A 90                                      nop
  5301                                  
  5302                                  .append_copy_to_window_back:
  5303 0000371B 89C5                                    mov     ebp, eax
  5304 0000371D 81E5C0010000                            and     ebp, 1C0h       ; @win1,1FFh-1Fh-20h
  5305 00003723 2520040000                              and     eax, 420h       ; and eax,20h+(1 shl 10) ; bit5 and channel
  5306 00003728 8D7010                                  lea     esi, [eax+10h]  ; @@syn1,[eax+10h]
  5307 0000372B 8D7830                                  lea     edi, [eax+30h]  ; @@syn2,[eax+30h]
  5308 0000372E F7DD                                    neg     ebp
  5309 00003730 81E5C0010000                            and     ebp, 1C0h       ; @win1,1FFh-1Fh-20h
  5310 00003736 8B0D[E09D0000]                          mov     ecx, [mp3_curr_syn_dst] ; @@dst,dword ptr [mp3_curr_syn_dst]
  5311                                  
  5312                                  .samples_lop:
  5313 0000373C BB00200020                              mov     ebx, 20002000h  ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  5314                                                                          ; @@out_shift equ (OUT_SHIFT_fast+(8*force_8bit))
  5315                                                                          ; out_shift = 14
  5316 00003741 8B14B5[F89D0000]                        mov     edx, [mp3_synth_buf+esi*4] ; @@SUM8 macro sum,win,ww,syn
  5317                                                                          ; @@SUM8 @@sum,@@win1,0,@@syn1
  5318                                                                          ; IRP nn,0,1,2,3,4,5,6,7
  5319                                                                          ; mov edx,dword ptr [mp3_synth_buf+syn*4+(nn*64*4)]
  5320                                                                          ; movsx eax,word ptr [mp3_synth_win+win*2+(nn*64*2)+ww*2]
  5321                                                                          ; imul eax,edx
  5322                                                                          ; add sum,eax
  5323 00003748 0FBF842D[B0EF0400]                      movsx   eax, word [mp3_synth_win+ebp*2] ; nn=0, ww=0
  5324 00003750 0FAFC2                                  imul    eax, edx
  5325 00003753 01C3                                    add     ebx, eax
  5326 00003755 8B14B5[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  5327 0000375C 0FBF842D[30F00400]                      movsx   eax, word [(mp3_synth_win+80h)+ebp*2] ; nn=1, ww=0
  5328 00003764 0FAFC2                                  imul    eax, edx
  5329 00003767 01C3                                    add     ebx, eax
  5330 00003769 8B14B5[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  5331 00003770 0FBF842D[B0F00400]                      movsx   eax, word [(mp3_synth_win+100h)+ebp*2] ; nn=2
  5332 00003778 0FAFC2                                  imul    eax, edx
  5333 0000377B 01C3                                    add     ebx, eax
  5334 0000377D 8B14B5[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  5335 00003784 0FBF842D[30F10400]                      movsx   eax, word [(mp3_synth_win+180h)+ebp*2] ; nn=3
  5336 0000378C 0FAFC2                                  imul    eax, edx
  5337 0000378F 01C3                                    add     ebx, eax
  5338 00003791 8B14B5[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  5339 00003798 0FBF842D[B0F10400]                      movsx   eax, word [(mp3_synth_win+200h)+ebp*2] ; nn=4
  5340 000037A0 0FAFC2                                  imul    eax, edx
  5341 000037A3 01C3                                    add     ebx, eax
  5342 000037A5 8B14B5[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  5343 000037AC 0FBF842D[30F20400]                      movsx   eax, word [(mp3_synth_win+280h)+ebp*2] ; nn=5
  5344 000037B4 0FAFC2                                  imul    eax, edx
  5345 000037B7 01C3                                    add     ebx, eax
  5346 000037B9 8B14B5[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  5347 000037C0 0FBF842D[B0F20400]                      movsx   eax, word [(mp3_synth_win+300h)+ebp*2] ; nn=6
  5348 000037C8 0FAFC2                                  imul    eax, edx
  5349 000037CB 01C3                                    add     ebx, eax
  5350 000037CD 8B14B5[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  5351 000037D4 0FBF842D[30F30400]                      movsx   eax, word [(mp3_synth_win+380h)+ebp*2] ; nn=7
  5352 000037DC 0FAFC2                                  imul    eax, edx
  5353 000037DF 01C3                                    add     ebx, eax
  5354 000037E1 8B14BD[F89D0000]                        mov     edx, [mp3_synth_buf+edi*4] ; @@SUM8 @@sum,@@win1,32, @@syn2
  5355 000037E8 0FBF842D[F0EF0400]                      movsx   eax, word [(mp3_synth_win+40h)+ebp*2] ; nn=0, ww=32
  5356 000037F0 0FAFC2                                  imul    eax, edx
  5357 000037F3 01C3                                    add     ebx, eax
  5358 000037F5 8B14BD[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  5359 000037FC 0FBF842D[70F00400]                      movsx   eax, word [(mp3_synth_win+0C0h)+ebp*2] ; nn=1, ww=32
  5360 00003804 0FAFC2                                  imul    eax, edx
  5361 00003807 01C3                                    add     ebx, eax
  5362 00003809 8B14BD[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  5363 00003810 0FBF842D[F0F00400]                      movsx   eax, word [(mp3_synth_win+140h)+ebp*2] ; nn=2
  5364 00003818 0FAFC2                                  imul    eax, edx
  5365 0000381B 01C3                                    add     ebx, eax
  5366 0000381D 8B14BD[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  5367 00003824 0FBF842D[70F10400]                      movsx   eax, word [(mp3_synth_win+1C0h)+ebp*2] ; nn=3
  5368 0000382C 0FAFC2                                  imul    eax, edx
  5369 0000382F 01C3                                    add     ebx, eax
  5370 00003831 8B14BD[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  5371 00003838 0FBF842D[F0F10400]                      movsx   eax, word [(mp3_synth_win+240h)+ebp*2] ; nn=4
  5372 00003840 0FAFC2                                  imul    eax, edx
  5373 00003843 01C3                                    add     ebx, eax
  5374 00003845 8B14BD[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  5375 0000384C 0FBF842D[70F20400]                      movsx   eax, word [(mp3_synth_win+2C0h)+ebp*2] ; nn=5
  5376 00003854 0FAFC2                                  imul    eax, edx
  5377 00003857 01C3                                    add     ebx, eax
  5378 00003859 8B14BD[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  5379 00003860 0FBF842D[F0F20400]                      movsx   eax, word [(mp3_synth_win+340h)+ebp*2] ; nn=6
  5380 00003868 0FAFC2                                  imul    eax, edx
  5381 0000386B 01C3                                    add     ebx, eax
  5382 0000386D 8B14BD[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  5383 00003874 0FBF842D[70F30400]                      movsx   eax, word [(mp3_synth_win+3C0h)+ebp*2] ; nn=7
  5384 0000387C 0FAFC2                                  imul    eax, edx
  5385 0000387F 01C3                                    add     ebx, eax
  5386 00003881 81FB00000040                            cmp     ebx, 40000000h  ; cmp @@sum,10000h SHL (@@out_shift) ; out_shift = 14
  5387 00003887 7322                                    jnb     short .sat
  5388 00003889 C1FB0E                                  sar     ebx, 14         ; sar @@sum,(@@out_shift)
  5389 0000388C 81EB00800000                            sub     ebx, 8000h      ; sub @@sum,8000h ; make 16bit signed
  5390                                  
  5391                                  .sat_back:
  5392 00003892 668919                                  mov     [ecx], bx       ; mov word ptr [@@dst],@@sum_16bit
  5393 00003895 030D[9CF40000]                          add     ecx, [mp3_samples_dst_step]
  5394 0000389B 46                                      inc     esi             ; inc @@syn1
  5395 0000389C 4F                                      dec     edi             ; dec @@syn2
  5396 0000389D 45                                      inc     ebp             ; inc @@win1
  5397 0000389E F7C51F000000                            test    ebp, 1Fh        ; IF LONG_WINDOW
  5398 000038A4 0F8592FEFFFF                            jnz     .samples_lop   ; test @@win1,1Fh
  5399 000038AA C3                                      retn
  5400                                  
  5401                                  .sat:
  5402 000038AB C1FB1F                                  sar     ebx, 31         ; sar @@sum,31 ; FFFFFFFFh,00000000h
  5403 000038AE 81F3FF7F0000                            xor     ebx, 7FFFh      ; xor @@sum,7fffh ; FFFF8000h,00007FFFh (signed 16bit)
  5404 000038B4 EBDC                                    jmp     short .sat_back
  5405                                  
  5406                                  .append_copy_to_window:
  5407 000038B6 8D3485[F89D0000]                        lea     esi, [mp3_synth_buf+eax*4] ; IF SYNTH32
  5408 000038BD 8DBE00080000                            lea     edi, [esi+2048] ; [esi+512*4]
  5409 000038C3 B912000000                              mov     ecx, 18         ; (12h*4)/4
  5410 000038C8 F3A5                                    rep movsd
  5411 000038CA E94CFEFFFF                              jmp     .append_copy_to_window_back
  5412                                  
  5413                                  
  5414                                  ; =============== S U B R O U T I N E =======================================
  5415                                  
  5416                                  
  5417                                  synth_16bit_shift_1_fast:
  5418 000038CF F605[54760000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 0,1,1
  5419 000038D6 740E                                    jz      short .no_rdtsc_supported
  5420 000038D8 0F31                                    rdtsc
  5421 000038DA 2905[CC770000]                          sub     [rdtsc_synth_dct], eax
  5422 000038E0 1915[D0770000]                          sbb     [rdtsc_synth_dct+4], edx
  5423                                  
  5424                                  .no_rdtsc_supported:
  5425 000038E6 BE[00BE0000]                            mov	esi, mp3_sb_samples
  5426 000038EB 8B3D[94F40000]                          mov	edi, [mp3_samples_dst]
  5427 000038F1 C705[A0F40000]0000-                     mov	dword [mp3_curr_channel], 0
  5427 000038F9 0000               
  5428                                  
  5429                                  .synth_channel_lop:
  5430 000038FB 56                                      push	esi
  5431 000038FC 57                                      push	edi
  5432 000038FD 893D[E09D0000]                          mov	[mp3_curr_syn_dst], edi
  5433 00003903 C705[A8F40000]0000-                     mov	dword [mp3_curr_frame], 0
  5433 0000390B 0000               
  5434                                  
  5435                                  .synth_frame_lop:
  5436 0000390D 56                                      push    esi
  5437 0000390E F605[54760000]10                        test    byte [cpuid_flags], 10h
  5438 00003915 740E                                    jz      short .no_rdtsc_supported@
  5439 00003917 0F31                                    rdtsc
  5440 00003919 2905[E4770000]                          sub     [rdtsc_dct32], eax
  5441 0000391F 1915[E8770000]                          sbb     [rdtsc_dct32+4], edx
  5442                                  
  5443                                  .no_rdtsc_supported@:
  5444 00003925 8B15[A0F40000]                          mov     edx, [mp3_curr_channel]
  5445 0000392B 8B0495[F8BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  5446 00003932 832C95[F8BD0000]20                      sub	dword [mp3_synth_index+edx*4], 32
  5447 0000393A C1E20A                                  shl     edx, 10
  5448 0000393D 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  5449 00003942 09D0                                    or      eax, edx
  5450 00003944 A3[DC9D0000]                            mov     [mp3_curr_syn_index], eax
  5451 00003949 8B3D[DC9D0000]                          mov     edi, [mp3_curr_syn_index]
  5452 0000394F 8D3CBD[F89D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  5453 00003956 E877F5FFFF                              call    mp3_dct32_shift_1 ; mp3_dct32_shift_&rate_shift
  5454 0000395B F605[54760000]10                        test    byte [cpuid_flags], 10h
  5455 00003962 740E                                    jz      short .no_rdtsc_supported@@
  5456 00003964 0F31                                    rdtsc
  5457 00003966 0105[E4770000]                          add     [rdtsc_dct32], eax
  5458 0000396C 1115[E8770000]                          adc     [rdtsc_dct32+4], edx
  5459                                  
  5460                                  .no_rdtsc_supported@@:
  5461 00003972 F605[54760000]10                        test    byte [cpuid_flags], 10h
  5462 00003979 740E                                    jz      short .no_rdtsc_supported@@@
  5463 0000397B 0F31                                    rdtsc
  5464 0000397D 2905[FC770000]                          sub     [rdtsc_synth], eax
  5465 00003983 1915[00780000]                          sbb     [rdtsc_synth+4], edx
  5466                                  
  5467                                  .no_rdtsc_supported@@@:
  5468 00003989 E888000000                              call    mp3_synth_filter_this_16bit_shift_1_fast ;
  5469                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  5470 0000398E F605[54760000]10                        test    byte [cpuid_flags], 10h
  5471 00003995 740E                                    jz      short .no_rdtsc_supported@@@@
  5472 00003997 0F31                                    rdtsc
  5473 00003999 0105[FC770000]                          add     [rdtsc_synth], eax
  5474 0000399F 1115[00780000]                          adc     [rdtsc_synth+4], edx
  5475                                  
  5476                                  .no_rdtsc_supported@@@@:
  5477 000039A5 5E                                      pop     esi
  5478 000039A6 A1[9CF40000]                            mov     eax, [mp3_samples_dst_step]
  5479 000039AB C1E005                                  shl     eax, 5
  5480 000039AE 8A0D[4F760000]                          mov     cl, [option_rate_shift]
  5481 000039B4 D3E8                                    shr     eax, cl
  5482 000039B6 0105[E09D0000]                          add     [mp3_curr_syn_dst], eax
  5483 000039BC 81C680000000                            add     esi, 128        ; SBLIMIT*4
  5484 000039C2 FF05[A8F40000]                          inc     dword [mp3_curr_frame]
  5485 000039C8 A1[A8F40000]                            mov     eax, [mp3_curr_frame]
  5486 000039CD 3B05[E49D0000]                          cmp     eax, [mp3_nb_frames]
  5487 000039D3 0F8234FFFFFF                            jb      .synth_frame_lop
  5488 000039D9 5F                                      pop     edi
  5489 000039DA 5E                                      pop     esi
  5490 000039DB 033D[D89D0000]                          add     edi, [mp3_bytes_per_sample]
  5491 000039E1 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  5492 000039E7 FF05[A0F40000]                          inc     dword [mp3_curr_channel]
  5493 000039ED A1[A0F40000]                            mov     eax, [mp3_curr_channel]
  5494 000039F2 3B05[D09D0000]                          cmp     eax, [mp3_output_num_channels]
  5495 000039F8 0F82FDFEFFFF                            jb      .synth_channel_lop
  5496 000039FE F605[54760000]10                        test    byte [cpuid_flags], 10h
  5497 00003A05 740E                                    jz      short .no_rdtsc_supported@@@@@
  5498 00003A07 0F31                                    rdtsc
  5499 00003A09 0105[CC770000]                          add     [rdtsc_synth_dct], eax
  5500 00003A0F 1115[D0770000]                          adc     [rdtsc_synth_dct+4], edx
  5501                                  
  5502                                  .no_rdtsc_supported@@@@@:
  5503 00003A15 C3                                      retn
  5504                                  
  5505                                  
  5506                                  ; =============== S U B R O U T I N E =======================================
  5507                                  
  5508                                  
  5509                                  mp3_synth_filter_this_16bit_shift_1_fast:
  5510 00003A16 A1[DC9D0000]                            mov     eax, [mp3_curr_syn_index]
  5511 00003A1B A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh
  5512 00003A20 0F84A2010000                            jz      .append_copy_to_window
  5513 00003A26 90                                      nop
  5514                                  
  5515                                  .append_copy_to_window_back:
  5516 00003A27 89C5                                    mov     ebp, eax
  5517 00003A29 81E5C0010000                            and     ebp, 1C0h
  5518 00003A2F 2520040000                              and     eax, 420h
  5519 00003A34 8D7010                                  lea     esi, [eax+10h]
  5520 00003A37 8D7830                                  lea     edi, [eax+30h]
  5521 00003A3A F7DD                                    neg     ebp
  5522 00003A3C 81E5C0010000                            and     ebp, 1C0h
  5523 00003A42 8B0D[E09D0000]                          mov     ecx, [mp3_curr_syn_dst]
  5524                                  
  5525                                  .samples_lop:
  5526 00003A48 BB00200020                              mov     ebx, 20002000h  ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  5527                                                                          ; @@out_shift equ (OUT_SHIFT_fast+(8*force_8bit))
  5528                                                                          ; out_shift = 14
  5529 00003A4D 8B14B5[F89D0000]                        mov     edx, [mp3_synth_buf+esi*4] ; @@SUM8 macro sum,win,ww,syn
  5530                                                                          ; @@SUM8 @@sum,@@win1,0,@@syn1
  5531                                                                          ; IRP nn,0,1,2,3,4,5,6,7
  5532                                                                          ; mov edx,dword ptr [mp3_synth_buf+syn*4+(nn*64*4)]
  5533                                                                          ; movsx eax,word ptr [mp3_synth_win+win*2+(nn*64*2)+ww*2]
  5534                                                                          ; imul eax,edx
  5535                                                                          ; add sum,eax
  5536 00003A54 0FBF842D[B0EF0400]                      movsx   eax, word [mp3_synth_win+ebp*2]
  5537 00003A5C 0FAFC2                                  imul    eax, edx
  5538 00003A5F 01C3                                    add     ebx, eax
  5539 00003A61 8B14B5[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4] ; nn=1
  5540 00003A68 0FBF842D[30F00400]                      movsx   eax, word [(mp3_synth_win+80h)+ebp*2] ; ww=0
  5541 00003A70 0FAFC2                                  imul    eax, edx
  5542 00003A73 01C3                                    add     ebx, eax
  5543 00003A75 8B14B5[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  5544 00003A7C 0FBF842D[B0F00400]                      movsx   eax, word [(mp3_synth_win+100h)+ebp*2]
  5545 00003A84 0FAFC2                                  imul    eax, edx
  5546 00003A87 01C3                                    add     ebx, eax
  5547 00003A89 8B14B5[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  5548 00003A90 0FBF842D[30F10400]                      movsx   eax, word [(mp3_synth_win+180h)+ebp*2]
  5549 00003A98 0FAFC2                                  imul    eax, edx
  5550 00003A9B 01C3                                    add     ebx, eax
  5551 00003A9D 8B14B5[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4] ; nn=4
  5552 00003AA4 0FBF842D[B0F10400]                      movsx   eax, word [(mp3_synth_win+200h)+ebp*2]
  5553 00003AAC 0FAFC2                                  imul    eax, edx
  5554 00003AAF 01C3                                    add     ebx, eax
  5555 00003AB1 8B14B5[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  5556 00003AB8 0FBF842D[30F20400]                      movsx   eax, word [(mp3_synth_win+280h)+ebp*2]
  5557 00003AC0 0FAFC2                                  imul    eax, edx
  5558 00003AC3 01C3                                    add     ebx, eax
  5559 00003AC5 8B14B5[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  5560 00003ACC 0FBF842D[B0F20400]                      movsx   eax, word [(mp3_synth_win+300h)+ebp*2]
  5561 00003AD4 0FAFC2                                  imul    eax, edx
  5562 00003AD7 01C3                                    add     ebx, eax
  5563 00003AD9 8B14B5[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4] ; nn=7
  5564 00003AE0 0FBF842D[30F30400]                      movsx   eax, word [(mp3_synth_win+380h)+ebp*2] ; ww=0
  5565 00003AE8 0FAFC2                                  imul    eax, edx
  5566 00003AEB 01C3                                    add     ebx, eax
  5567 00003AED 8B14BD[F89D0000]                        mov     edx, [mp3_synth_buf+edi*4]
  5568 00003AF4 0FBF842D[F0EF0400]                      movsx   eax, word [(mp3_synth_win+40h)+ebp*2]
  5569 00003AFC 0FAFC2                                  imul    eax, edx
  5570 00003AFF 01C3                                    add     ebx, eax
  5571 00003B01 8B14BD[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  5572 00003B08 0FBF842D[70F00400]                      movsx   eax, word [(mp3_synth_win+0C0h)+ebp*2]
  5573 00003B10 0FAFC2                                  imul    eax, edx
  5574 00003B13 01C3                                    add     ebx, eax
  5575 00003B15 8B14BD[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4] ; nn=2, ww=32
  5576 00003B1C 0FBF842D[F0F00400]                      movsx   eax, word [(mp3_synth_win+140h)+ebp*2]
  5577 00003B24 0FAFC2                                  imul    eax, edx
  5578 00003B27 01C3                                    add     ebx, eax
  5579 00003B29 8B14BD[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  5580 00003B30 0FBF842D[70F10400]                      movsx   eax, word [(mp3_synth_win+1C0h)+ebp*2]
  5581 00003B38 0FAFC2                                  imul    eax, edx
  5582 00003B3B 01C3                                    add     ebx, eax
  5583 00003B3D 8B14BD[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  5584 00003B44 0FBF842D[F0F10400]                      movsx   eax, word [(mp3_synth_win+240h)+ebp*2]
  5585 00003B4C 0FAFC2                                  imul    eax, edx
  5586 00003B4F 01C3                                    add     ebx, eax
  5587 00003B51 8B14BD[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  5588 00003B58 0FBF842D[70F20400]                      movsx   eax, word [(mp3_synth_win+2C0h)+ebp*2]
  5589 00003B60 0FAFC2                                  imul    eax, edx
  5590 00003B63 01C3                                    add     ebx, eax
  5591 00003B65 8B14BD[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4] ; nn=6, ww=32
  5592 00003B6C 0FBF842D[F0F20400]                      movsx   eax, word [(mp3_synth_win+340h)+ebp*2]
  5593 00003B74 0FAFC2                                  imul    eax, edx
  5594 00003B77 01C3                                    add     ebx, eax
  5595 00003B79 8B14BD[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  5596 00003B80 0FBF842D[70F30400]                      movsx   eax, word [(mp3_synth_win+3C0h)+ebp*2]
  5597 00003B88 0FAFC2                                  imul    eax, edx
  5598 00003B8B 01C3                                    add     ebx, eax
  5599 00003B8D 81FB00000040                            cmp     ebx, 40000000h  ; cmp  @@sum,10000h SHL (@@out_shift)
  5600 00003B93 7328                                    jnb     short .sat
  5601 00003B95 C1FB0E                                  sar     ebx, 14         ; sar @@sum,(@@out_shift)
  5602 00003B98 81EB00800000                            sub     ebx, 8000h      ; make 16bit signed
  5603                                  
  5604                                  .sat_back:
  5605 00003B9E 668919                                  mov     [ecx], bx
  5606 00003BA1 030D[9CF40000]                          add     ecx, [mp3_samples_dst_step]
  5607 00003BA7 83C602                                  add     esi, 2          ; IF rate_shift
  5608                                                                          ; add  @@syn1,1 shl rate_shift
  5609 00003BAA 83EF02                                  sub     edi, 2          ; sub @@syn2,1 shl rate_shift
  5610 00003BAD 83C502                                  add     ebp, 2          ; add @@win1,1 shl rate_shift
  5611 00003BB0 F7C51F000000                            test    ebp, 1Fh        ; IF LONG_WINDOW
  5612 00003BB6 0F858CFEFFFF                            jnz     .samples_lop   ; test @@win1,1fh
  5613 00003BBC C3                                      retn
  5614                                  
  5615                                  .sat:
  5616 00003BBD C1FB1F                                  sar     ebx, 31         ; sar @@sum,31 ; FFFFFFFFh,00000000h
  5617 00003BC0 81F3FF7F0000                            xor     ebx, 7FFFh      ; xor @@sum,7fffh ; FFFF8000h,00007FFFh (signed 16bit)
  5618 00003BC6 EBD6                                    jmp     short .sat_back
  5619                                  
  5620                                  .append_copy_to_window:
  5621 00003BC8 8D3485[F89D0000]                        lea     esi, [mp3_synth_buf+eax*4]
  5622 00003BCF 8DBE00080000                            lea     edi, [esi+2048] ; [esi+512*4]
  5623 00003BD5 B912000000                              mov     ecx, 18         ; (12h*4)/4
  5624 00003BDA F3A5                                    rep movsd
  5625 00003BDC E946FEFFFF                              jmp     .append_copy_to_window_back
  5626                                  
  5627                                  
  5628                                  ; =============== S U B R O U T I N E =======================================
  5629                                  
  5630                                  
  5631                                  synth_16bit_shift_2_fast:
  5632 00003BE1 F605[54760000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 0,2,1
  5633 00003BE8 740E                                    jz      short .no_rdtsc_supported
  5634 00003BEA 0F31                                    rdtsc
  5635 00003BEC 2905[CC770000]                          sub     [rdtsc_synth_dct], eax
  5636 00003BF2 1915[D0770000]                          sbb     [rdtsc_synth_dct+4], edx
  5637                                  
  5638                                  .no_rdtsc_supported:
  5639 00003BF8 BE[00BE0000]                            mov	esi, mp3_sb_samples
  5640 00003BFD 8B3D[94F40000]                          mov	edi, [mp3_samples_dst]
  5641 00003C03 C705[A0F40000]0000-                     mov	dword [mp3_curr_channel], 0
  5641 00003C0B 0000               
  5642                                  
  5643                                  .synth_channel_lop:
  5644 00003C0D 56                                      push	esi
  5645 00003C0E 57                                      push	edi
  5646 00003C0F 893D[E09D0000]                          mov	[mp3_curr_syn_dst], edi
  5647 00003C15 C705[A8F40000]0000-                     mov	dword [mp3_curr_frame], 0
  5647 00003C1D 0000               
  5648                                  
  5649                                  .synth_frame_lop:
  5650 00003C1F 56                                      push    esi
  5651 00003C20 F605[54760000]10                        test    byte [cpuid_flags], 10h
  5652 00003C27 740E                                    jz      short .no_rdtsc_supported@
  5653 00003C29 0F31                                    rdtsc
  5654 00003C2B 2905[E4770000]                          sub     [rdtsc_dct32], eax
  5655 00003C31 1915[E8770000]                          sbb     [rdtsc_dct32+4], edx
  5656                                  
  5657                                  .no_rdtsc_supported@:
  5658 00003C37 8B15[A0F40000]                          mov     edx, [mp3_curr_channel]
  5659 00003C3D 8B0495[F8BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  5660 00003C44 832C95[F8BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  5661 00003C4C C1E20A                                  shl     edx, 10
  5662 00003C4F 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  5663 00003C54 09D0                                    or      eax, edx
  5664 00003C56 A3[DC9D0000]                            mov     [mp3_curr_syn_index], eax
  5665 00003C5B 8B3D[DC9D0000]                          mov     edi, [mp3_curr_syn_index]
  5666 00003C61 8D3CBD[F89D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  5667 00003C68 E855F6FFFF                              call    mp3_dct32_shift_2 ; mp3_dct32_shift_&rate_shift
  5668 00003C6D F605[54760000]10                        test    byte [cpuid_flags], 10h
  5669 00003C74 740E                                    jz      short .no_rdtsc_supported@@
  5670 00003C76 0F31                                    rdtsc
  5671 00003C78 0105[E4770000]                          add     [rdtsc_dct32], eax
  5672 00003C7E 1115[E8770000]                          adc     [rdtsc_dct32+4], edx
  5673                                  
  5674                                  .no_rdtsc_supported@@:
  5675 00003C84 F605[54760000]10                        test    byte [cpuid_flags], 10h
  5676 00003C8B 740E                                    jz      short .no_rdtsc_supported@@@
  5677 00003C8D 0F31                                    rdtsc
  5678 00003C8F 2905[FC770000]                          sub     [rdtsc_synth], eax
  5679 00003C95 1915[00780000]                          sbb     [rdtsc_synth+4], edx
  5680                                  
  5681                                  .no_rdtsc_supported@@@:
  5682 00003C9B E888000000                              call    mp3_synth_filter_this_16bit_shift_2_fast ;
  5683                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fas
  5684 00003CA0 F605[54760000]10                        test    byte [cpuid_flags], 10h
  5685 00003CA7 740E                                    jz      short .no_rdtsc_supported@@@@
  5686 00003CA9 0F31                                    rdtsc
  5687 00003CAB 0105[FC770000]                          add     [rdtsc_synth], eax
  5688 00003CB1 1115[00780000]                          adc     [rdtsc_synth+4], edx
  5689                                  
  5690                                  .no_rdtsc_supported@@@@:
  5691 00003CB7 5E                                      pop     esi
  5692 00003CB8 A1[9CF40000]                            mov     eax, [mp3_samples_dst_step]
  5693 00003CBD C1E005                                  shl     eax, 5
  5694 00003CC0 8A0D[4F760000]                          mov     cl, [option_rate_shift]
  5695 00003CC6 D3E8                                    shr     eax, cl
  5696 00003CC8 0105[E09D0000]                          add     [mp3_curr_syn_dst], eax
  5697 00003CCE 81C680000000                            add     esi, 128        ; SBLIMIT*4
  5698 00003CD4 FF05[A8F40000]                          inc     dword [mp3_curr_frame]
  5699 00003CDA A1[A8F40000]                            mov     eax, [mp3_curr_frame]
  5700 00003CDF 3B05[E49D0000]                          cmp     eax, [mp3_nb_frames]
  5701 00003CE5 0F8234FFFFFF                            jb      .synth_frame_lop
  5702 00003CEB 5F                                      pop     edi
  5703 00003CEC 5E                                      pop     esi
  5704 00003CED 033D[D89D0000]                          add     edi, [mp3_bytes_per_sample]
  5705 00003CF3 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  5706 00003CF9 FF05[A0F40000]                          inc     dword [mp3_curr_channel]
  5707 00003CFF A1[A0F40000]                            mov     eax, [mp3_curr_channel]
  5708 00003D04 3B05[D09D0000]                          cmp     eax, [mp3_output_num_channels]
  5709 00003D0A 0F82FDFEFFFF                            jb      .synth_channel_lop
  5710 00003D10 F605[54760000]10                        test    byte [cpuid_flags], 10h
  5711 00003D17 740E                                    jz      short .no_rdtsc_supported@@@@@
  5712 00003D19 0F31                                    rdtsc
  5713 00003D1B 0105[CC770000]                          add     [rdtsc_synth_dct], eax
  5714 00003D21 1115[D0770000]                          adc     [rdtsc_synth_dct+4], edx
  5715                                  
  5716                                  .no_rdtsc_supported@@@@@:
  5717 00003D27 C3                                      retn
  5718                                  
  5719                                  
  5720                                  ; =============== S U B R O U T I N E =======================================
  5721                                  
  5722                                  
  5723                                  mp3_synth_filter_this_16bit_shift_2_fast:
  5724 00003D28 A1[DC9D0000]                            mov     eax, [mp3_curr_syn_index]
  5725 00003D2D A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh
  5726 00003D32 0F84A2010000                            jz      .append_copy_to_window
  5727 00003D38 90                                      nop
  5728                                  
  5729                                  .append_copy_to_window_back:
  5730 00003D39 89C5                                    mov     ebp, eax
  5731 00003D3B 81E5C0010000                            and     ebp, 1C0h       ; 1FFh-1Fh-20h
  5732 00003D41 2520040000                              and     eax, 420h       ; 20h+(1 shl 10)
  5733 00003D46 8D7010                                  lea     esi, [eax+10h]
  5734 00003D49 8D7830                                  lea     edi, [eax+30h]
  5735 00003D4C F7DD                                    neg     ebp
  5736 00003D4E 81E5C0010000                            and     ebp, 1C0h
  5737 00003D54 8B0D[E09D0000]                          mov     ecx, [mp3_curr_syn_dst]
  5738                                  
  5739                                  .samples_lop:
  5740 00003D5A BB00200020                              mov     ebx, 20002000h  ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  5741                                                                          ; @@out_shift equ (OUT_SHIFT_fast+(8*force_8bit))
  5742                                                                          ; out_shift = 14
  5743 00003D5F 8B14B5[F89D0000]                        mov     edx, [mp3_synth_buf+esi*4]
  5744 00003D66 0FBF842D[B0EF0400]                      movsx   eax, word [mp3_synth_win+ebp*2]
  5745 00003D6E 0FAFC2                                  imul    eax, edx
  5746 00003D71 01C3                                    add     ebx, eax
  5747 00003D73 8B14B5[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  5748 00003D7A 0FBF842D[30F00400]                      movsx   eax, word [(mp3_synth_win+80h)+ebp*2]
  5749 00003D82 0FAFC2                                  imul    eax, edx
  5750 00003D85 01C3                                    add     ebx, eax
  5751 00003D87 8B14B5[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  5752 00003D8E 0FBF842D[B0F00400]                      movsx   eax, word [(mp3_synth_win+100h)+ebp*2]
  5753 00003D96 0FAFC2                                  imul    eax, edx
  5754 00003D99 01C3                                    add     ebx, eax
  5755 00003D9B 8B14B5[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  5756 00003DA2 0FBF842D[30F10400]                      movsx   eax, word [(mp3_synth_win+180h)+ebp*2]
  5757 00003DAA 0FAFC2                                  imul    eax, edx
  5758 00003DAD 01C3                                    add     ebx, eax
  5759 00003DAF 8B14B5[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  5760 00003DB6 0FBF842D[B0F10400]                      movsx   eax, word [(mp3_synth_win+200h)+ebp*2]
  5761 00003DBE 0FAFC2                                  imul    eax, edx
  5762 00003DC1 01C3                                    add     ebx, eax
  5763 00003DC3 8B14B5[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  5764 00003DCA 0FBF842D[30F20400]                      movsx   eax, word [(mp3_synth_win+280h)+ebp*2]
  5765 00003DD2 0FAFC2                                  imul    eax, edx
  5766 00003DD5 01C3                                    add     ebx, eax
  5767 00003DD7 8B14B5[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  5768 00003DDE 0FBF842D[B0F20400]                      movsx   eax, word [(mp3_synth_win+300h)+ebp*2]
  5769 00003DE6 0FAFC2                                  imul    eax, edx
  5770 00003DE9 01C3                                    add     ebx, eax
  5771 00003DEB 8B14B5[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  5772 00003DF2 0FBF842D[30F30400]                      movsx   eax, word [(mp3_synth_win+380h)+ebp*2]
  5773 00003DFA 0FAFC2                                  imul    eax, edx
  5774 00003DFD 01C3                                    add     ebx, eax
  5775 00003DFF 8B14BD[F89D0000]                        mov     edx, [mp3_synth_buf+edi*4]
  5776 00003E06 0FBF842D[F0EF0400]                      movsx   eax, word [(mp3_synth_win+40h)+ebp*2]
  5777 00003E0E 0FAFC2                                  imul    eax, edx
  5778 00003E11 01C3                                    add     ebx, eax
  5779 00003E13 8B14BD[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  5780 00003E1A 0FBF842D[70F00400]                      movsx   eax, word [(mp3_synth_win+0C0h)+ebp*2]
  5781 00003E22 0FAFC2                                  imul    eax, edx
  5782 00003E25 01C3                                    add     ebx, eax
  5783 00003E27 8B14BD[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  5784 00003E2E 0FBF842D[F0F00400]                      movsx   eax, word [(mp3_synth_win+140h)+ebp*2]
  5785 00003E36 0FAFC2                                  imul    eax, edx
  5786 00003E39 01C3                                    add     ebx, eax
  5787 00003E3B 8B14BD[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  5788 00003E42 0FBF842D[70F10400]                      movsx   eax, word [(mp3_synth_win+1C0h)+ebp*2]
  5789 00003E4A 0FAFC2                                  imul    eax, edx
  5790 00003E4D 01C3                                    add     ebx, eax
  5791 00003E4F 8B14BD[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  5792 00003E56 0FBF842D[F0F10400]                      movsx   eax, word [(mp3_synth_win+240h)+ebp*2]
  5793 00003E5E 0FAFC2                                  imul    eax, edx
  5794 00003E61 01C3                                    add     ebx, eax
  5795 00003E63 8B14BD[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  5796 00003E6A 0FBF842D[70F20400]                      movsx   eax, word [(mp3_synth_win+2C0h)+ebp*2]
  5797 00003E72 0FAFC2                                  imul    eax, edx
  5798 00003E75 01C3                                    add     ebx, eax
  5799 00003E77 8B14BD[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  5800 00003E7E 0FBF842D[F0F20400]                      movsx   eax, word [(mp3_synth_win+340h)+ebp*2]
  5801 00003E86 0FAFC2                                  imul    eax, edx
  5802 00003E89 01C3                                    add     ebx, eax
  5803 00003E8B 8B14BD[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  5804 00003E92 0FBF842D[70F30400]                      movsx   eax, word [(mp3_synth_win+3C0h)+ebp*2]
  5805 00003E9A 0FAFC2                                  imul    eax, edx
  5806 00003E9D 01C3                                    add     ebx, eax
  5807 00003E9F 81FB00000040                            cmp     ebx, 40000000h
  5808 00003EA5 7328                                    jnb     short .sat
  5809 00003EA7 C1FB0E                                  sar     ebx, 14
  5810 00003EAA 81EB00800000                            sub     ebx, 8000h      ; make 16bit signed
  5811                                  
  5812                                  .sat_back:
  5813 00003EB0 668919                                  mov     [ecx], bx
  5814 00003EB3 030D[9CF40000]                          add     ecx, [mp3_samples_dst_step]
  5815 00003EB9 83C604                                  add     esi, 4
  5816 00003EBC 83EF04                                  sub     edi, 4
  5817 00003EBF 83C504                                  add     ebp, 4
  5818 00003EC2 F7C51F000000                            test    ebp, 1Fh
  5819 00003EC8 0F858CFEFFFF                            jnz     .samples_lop
  5820 00003ECE C3                                      retn
  5821                                  
  5822                                  .sat:
  5823 00003ECF C1FB1F                                  sar     ebx, 31
  5824 00003ED2 81F3FF7F0000                            xor     ebx, 7FFFh
  5825 00003ED8 EBD6                                    jmp     short .sat_back
  5826                                  
  5827                                  .append_copy_to_window:
  5828 00003EDA 8D3485[F89D0000]                        lea     esi, [mp3_synth_buf+eax*4]
  5829 00003EE1 8DBE00080000                            lea     edi, [esi+2048]
  5830 00003EE7 B912000000                              mov     ecx, 18
  5831 00003EEC F3A5                                    rep movsd
  5832 00003EEE E946FEFFFF                              jmp     .append_copy_to_window_back
  5833                                  
  5834                                  
  5835                                  ; =============== S U B R O U T I N E =======================================
  5836                                  
  5837                                  
  5838                                  synth_8bit_shift_0_fast:
  5839 00003EF3 F605[54760000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 1,0,1
  5840 00003EFA 740E                                    jz      short .no_rdtsc_supported
  5841 00003EFC 0F31                                    rdtsc
  5842 00003EFE 2905[CC770000]                          sub     [rdtsc_synth_dct], eax
  5843 00003F04 1915[D0770000]                          sbb     [rdtsc_synth_dct+4], edx
  5844                                  
  5845                                  .no_rdtsc_supported:
  5846 00003F0A BE[00BE0000]                            mov	esi, mp3_sb_samples
  5847 00003F0F 8B3D[94F40000]                          mov	edi, [mp3_samples_dst]
  5848 00003F15 C705[A0F40000]0000-                     mov	dword [mp3_curr_channel], 0
  5848 00003F1D 0000               
  5849                                  
  5850                                  .synth_channel_lop:
  5851 00003F1F 56                                      push	esi
  5852 00003F20 57                                      push	edi
  5853 00003F21 893D[E09D0000]                          mov	[mp3_curr_syn_dst], edi
  5854 00003F27 C705[A8F40000]0000-                     mov	dword [mp3_curr_frame], 0
  5854 00003F2F 0000               
  5855                                  
  5856                                  .synth_frame_lop:
  5857 00003F31 56                                      push    esi
  5858 00003F32 F605[54760000]10                        test    byte [cpuid_flags], 10h
  5859 00003F39 740E                                    jz      short .no_rdtsc_supported@
  5860 00003F3B 0F31                                    rdtsc
  5861 00003F3D 2905[E4770000]                          sub     [rdtsc_dct32], eax
  5862 00003F43 1915[E8770000]                          sbb     [rdtsc_dct32+4], edx
  5863                                  
  5864                                  .no_rdtsc_supported@:
  5865 00003F49 8B15[A0F40000]                          mov     edx, [mp3_curr_channel]
  5866 00003F4F 8B0495[F8BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  5867 00003F56 832C95[F8BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  5868 00003F5E C1E20A                                  shl     edx, 10
  5869 00003F61 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  5870 00003F66 09D0                                    or      eax, edx
  5871 00003F68 A3[DC9D0000]                            mov     [mp3_curr_syn_index], eax
  5872 00003F6D 8B3D[DC9D0000]                          mov     edi, [mp3_curr_syn_index]
  5873 00003F73 8D3CBD[F89D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  5874 00003F7A E873E6FFFF                              call    mp3_dct32_shift_0 ; mp3_dct32_shift_&rate_shift
  5875 00003F7F F605[54760000]10                        test    byte [cpuid_flags], 10h
  5876 00003F86 740E                                    jz      short .no_rdtsc_supported@@
  5877 00003F88 0F31                                    rdtsc
  5878 00003F8A 0105[E4770000]                          add     [rdtsc_dct32], eax
  5879 00003F90 1115[E8770000]                          adc     [rdtsc_dct32+4], edx
  5880                                  
  5881                                  .no_rdtsc_supported@@:
  5882 00003F96 F605[54760000]10                        test    byte [cpuid_flags], 10h
  5883 00003F9D 740E                                    jz      short .no_rdtsc_supported@@@
  5884 00003F9F 0F31                                    rdtsc
  5885 00003FA1 2905[FC770000]                          sub     [rdtsc_synth], eax
  5886 00003FA7 1915[00780000]                          sbb     [rdtsc_synth+4], edx
  5887                                  
  5888                                  .no_rdtsc_supported@@@:
  5889 00003FAD E888000000                              call    mp3_synth_filter_this_8bit_shift_0_fast ;
  5890                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  5891 00003FB2 F605[54760000]10                        test    byte [cpuid_flags], 10h
  5892 00003FB9 740E                                    jz      short .no_rdtsc_supported@@@@
  5893 00003FBB 0F31                                    rdtsc
  5894 00003FBD 0105[FC770000]                          add     [rdtsc_synth], eax
  5895 00003FC3 1115[00780000]                          adc     [rdtsc_synth+4], edx
  5896                                  
  5897                                  .no_rdtsc_supported@@@@:
  5898 00003FC9 5E                                      pop     esi
  5899 00003FCA A1[9CF40000]                            mov     eax, [mp3_samples_dst_step]
  5900 00003FCF C1E005                                  shl     eax, 5
  5901 00003FD2 8A0D[4F760000]                          mov     cl, [option_rate_shift]
  5902 00003FD8 D3E8                                    shr     eax, cl
  5903 00003FDA 0105[E09D0000]                          add     [mp3_curr_syn_dst], eax
  5904 00003FE0 81C680000000                            add     esi, 128        ; SBLIMIT*4
  5905 00003FE6 FF05[A8F40000]                          inc     dword [mp3_curr_frame]
  5906 00003FEC A1[A8F40000]                            mov     eax, [mp3_curr_frame]
  5907 00003FF1 3B05[E49D0000]                          cmp     eax, [mp3_nb_frames]
  5908 00003FF7 0F8234FFFFFF                            jb      .synth_frame_lop
  5909 00003FFD 5F                                      pop     edi
  5910 00003FFE 5E                                      pop     esi
  5911 00003FFF 033D[D89D0000]                          add     edi, [mp3_bytes_per_sample]
  5912 00004005 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  5913 0000400B FF05[A0F40000]                          inc     dword [mp3_curr_channel]
  5914 00004011 A1[A0F40000]                            mov     eax, [mp3_curr_channel]
  5915 00004016 3B05[D09D0000]                          cmp     eax, [mp3_output_num_channels]
  5916 0000401C 0F82FDFEFFFF                            jb      .synth_channel_lop
  5917 00004022 F605[54760000]10                        test    byte [cpuid_flags], 10h
  5918 00004029 740E                                    jz      short .no_rdtsc_supported@@@@@
  5919 0000402B 0F31                                    rdtsc
  5920 0000402D 0105[CC770000]                          add     [rdtsc_synth_dct], eax
  5921 00004033 1115[D0770000]                          adc     [rdtsc_synth_dct+4], edx
  5922                                  
  5923                                  .no_rdtsc_supported@@@@@:
  5924 00004039 C3                                      retn
  5925                                  
  5926                                  
  5927                                  ; =============== S U B R O U T I N E =======================================
  5928                                  
  5929                                  
  5930                                  mp3_synth_filter_this_8bit_shift_0_fast:
  5931 0000403A A1[DC9D0000]                            mov     eax, [mp3_curr_syn_index]
  5932 0000403F A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh
  5933 00004044 0F8491010000                            jz      .append_copy_to_window
  5934 0000404A 90                                      nop
  5935                                  
  5936                                  .append_copy_to_window_back:
  5937 0000404B 89C5                                    mov     ebp, eax
  5938 0000404D 81E5C0010000                            and     ebp, 1C0h       ; 1FFh-1Fh-20h
  5939 00004053 2520040000                              and     eax, 420h       ; 20h+(1 shl 10)
  5940 00004058 8D7010                                  lea     esi, [eax+10h]
  5941 0000405B 8D7830                                  lea     edi, [eax+30h]
  5942 0000405E F7DD                                    neg     ebp
  5943 00004060 81E5C0010000                            and     ebp, 1C0h
  5944 00004066 8B0D[E09D0000]                          mov     ecx, [mp3_curr_syn_dst]
  5945                                  
  5946                                  .samples_lop:
  5947 0000406C BB00002020                              mov     ebx, 20200000h  ; mov @@sum,(80h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  5948                                                                          ; @@out_shift equ (OUT_SHIFT_fast(8*force_8bit))
  5949                                                                          ; @@out_shift = 22
  5950 00004071 8B14B5[F89D0000]                        mov     edx, [mp3_synth_buf+esi*4] ; @@SUM8 macro sum,win,ww,syn
  5951                                                                          ; @@SUM8 @@sum,@@win1,0,@@syn1
  5952                                                                          ; IRP nn,0,1,2,3,4,5,6,7
  5953                                                                          ; mov edx,dword ptr [mp3_synth_buf+syn*4+(nn*64*4)]
  5954                                                                          ; movsx eax,word ptr [mp3_synth_win+win*2+(nn*64*2)+ww*2]
  5955                                                                          ; imul eax,edx
  5956                                                                          ; add sum,eax
  5957 00004078 0FBF842D[B0EF0400]                      movsx   eax, word [mp3_synth_win+ebp*2]
  5958 00004080 0FAFC2                                  imul    eax, edx
  5959 00004083 01C3                                    add     ebx, eax
  5960 00004085 8B14B5[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4] ; nn=1
  5961 0000408C 0FBF842D[30F00400]                      movsx   eax, word [(mp3_synth_win+80h)+ebp*2] ; ww=0
  5962 00004094 0FAFC2                                  imul    eax, edx
  5963 00004097 01C3                                    add     ebx, eax
  5964 00004099 8B14B5[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  5965 000040A0 0FBF842D[B0F00400]                      movsx   eax, word [(mp3_synth_win+100h)+ebp*2]
  5966 000040A8 0FAFC2                                  imul    eax, edx
  5967 000040AB 01C3                                    add     ebx, eax
  5968 000040AD 8B14B5[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  5969 000040B4 0FBF842D[30F10400]                      movsx   eax, word [(mp3_synth_win+180h)+ebp*2]
  5970 000040BC 0FAFC2                                  imul    eax, edx
  5971 000040BF 01C3                                    add     ebx, eax
  5972 000040C1 8B14B5[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  5973 000040C8 0FBF842D[B0F10400]                      movsx   eax, word [(mp3_synth_win+200h)+ebp*2]
  5974 000040D0 0FAFC2                                  imul    eax, edx
  5975 000040D3 01C3                                    add     ebx, eax
  5976 000040D5 8B14B5[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  5977 000040DC 0FBF842D[30F20400]                      movsx   eax, word [(mp3_synth_win+280h)+ebp*2]
  5978 000040E4 0FAFC2                                  imul    eax, edx
  5979 000040E7 01C3                                    add     ebx, eax
  5980 000040E9 8B14B5[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  5981 000040F0 0FBF842D[B0F20400]                      movsx   eax, word [(mp3_synth_win+300h)+ebp*2]
  5982 000040F8 0FAFC2                                  imul    eax, edx
  5983 000040FB 01C3                                    add     ebx, eax
  5984 000040FD 8B14B5[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  5985 00004104 0FBF842D[30F30400]                      movsx   eax, word [(mp3_synth_win+380h)+ebp*2]
  5986 0000410C 0FAFC2                                  imul    eax, edx
  5987 0000410F 01C3                                    add     ebx, eax
  5988 00004111 8B14BD[F89D0000]                        mov     edx, [mp3_synth_buf+edi*4]
  5989 00004118 0FBF842D[F0EF0400]                      movsx   eax, word [(mp3_synth_win+40h)+ebp*2]
  5990 00004120 0FAFC2                                  imul    eax, edx
  5991 00004123 01C3                                    add     ebx, eax
  5992 00004125 8B14BD[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  5993 0000412C 0FBF842D[70F00400]                      movsx   eax, word [(mp3_synth_win+0C0h)+ebp*2]
  5994 00004134 0FAFC2                                  imul    eax, edx
  5995 00004137 01C3                                    add     ebx, eax
  5996 00004139 8B14BD[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4] ; nn=2
  5997 00004140 0FBF842D[F0F00400]                      movsx   eax, word [(mp3_synth_win+140h)+ebp*2] ; ww=32
  5998 00004148 0FAFC2                                  imul    eax, edx
  5999 0000414B 01C3                                    add     ebx, eax
  6000 0000414D 8B14BD[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  6001 00004154 0FBF842D[70F10400]                      movsx   eax, word [(mp3_synth_win+1C0h)+ebp*2]
  6002 0000415C 0FAFC2                                  imul    eax, edx
  6003 0000415F 01C3                                    add     ebx, eax
  6004 00004161 8B14BD[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  6005 00004168 0FBF842D[F0F10400]                      movsx   eax, word [(mp3_synth_win+240h)+ebp*2]
  6006 00004170 0FAFC2                                  imul    eax, edx
  6007 00004173 01C3                                    add     ebx, eax
  6008 00004175 8B14BD[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  6009 0000417C 0FBF842D[70F20400]                      movsx   eax, word [(mp3_synth_win+2C0h)+ebp*2]
  6010 00004184 0FAFC2                                  imul    eax, edx
  6011 00004187 01C3                                    add     ebx, eax
  6012 00004189 8B14BD[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  6013 00004190 0FBF842D[F0F20400]                      movsx   eax, word [(mp3_synth_win+340h)+ebp*2]
  6014 00004198 0FAFC2                                  imul    eax, edx
  6015 0000419B 01C3                                    add     ebx, eax
  6016 0000419D 8B14BD[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  6017 000041A4 0FBF842D[70F30400]                      movsx   eax, word [(mp3_synth_win+3C0h)+ebp*2]
  6018 000041AC 0FAFC2                                  imul    eax, edx
  6019 000041AF 01C3                                    add     ebx, eax
  6020 000041B1 81FB00000040                            cmp     ebx, 40000000h  ; cmp  @@sum,100h SHL (@@out_shift)
  6021 000041B7 731B                                    jnb     short .sat
  6022 000041B9 C1FB16                                  sar     ebx, 22         ; sar @@sum,(@@out_shift)
  6023                                  
  6024                                  .sat_back:
  6025 000041BC 8819                                    mov     [ecx], bl       ; mov byte ptr [@@dst],@@sum_8bit
  6026 000041BE 030D[9CF40000]                          add     ecx, [mp3_samples_dst_step]
  6027 000041C4 46                                      inc     esi             ; inc @@syn1
  6028 000041C5 4F                                      dec     edi             ; dec @@syn2
  6029 000041C6 45                                      inc     ebp             ; inc @@win1
  6030 000041C7 F7C51F000000                            test    ebp, 1Fh        ; IF LONG_WINDOW
  6031                                                                          ; test @@win1,1fh
  6032 000041CD 0F8599FEFFFF                            jnz     .samples_lop
  6033 000041D3 C3                                      retn
  6034                                  
  6035                                  .sat:                                 
  6036 000041D4 C1FB1F                                  sar     ebx, 31         ; sar @@sum,31 ; FFFFFFFFh,00000000h
  6037 000041D7 F7D3                                    not     ebx             ; IF force_8bit
  6038                                                                          ; not @@sum ; 00000000h,FFFFFFFFh (unsigned 8bit)
  6039 000041D9 EBE1                                    jmp     short .sat_back
  6040                                  
  6041                                  .append_copy_to_window:
  6042 000041DB 8D3485[F89D0000]                        lea     esi, [mp3_synth_buf+eax*4]
  6043 000041E2 8DBE00080000                            lea     edi, [esi+2048] ; [esi+512*4]
  6044 000041E8 B912000000                              mov     ecx, 18         ; (12h*4)/4
  6045 000041ED F3A5                                    rep movsd
  6046 000041EF E957FEFFFF                              jmp     .append_copy_to_window_back
  6047                                  
  6048                                  
  6049                                  ; =============== S U B R O U T I N E =======================================
  6050                                  
  6051                                  
  6052                                  synth_8bit_shift_1_fast:
  6053 000041F4 F605[54760000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 1,1,1
  6054 000041FB 740E                                    jz      short .no_rdtsc_supported
  6055 000041FD 0F31                                    rdtsc
  6056 000041FF 2905[CC770000]                          sub     [rdtsc_synth_dct], eax
  6057 00004205 1915[D0770000]                          sbb     [rdtsc_synth_dct+4], edx
  6058                                  
  6059                                  .no_rdtsc_supported:
  6060 0000420B BE[00BE0000]                            mov	esi, mp3_sb_samples
  6061 00004210 8B3D[94F40000]                          mov	edi, [mp3_samples_dst]
  6062 00004216 C705[A0F40000]0000-                     mov	dword [mp3_curr_channel], 0
  6062 0000421E 0000               
  6063                                  
  6064                                  .synth_channel_lop:
  6065 00004220 56                                      push	esi
  6066 00004221 57                                      push	edi
  6067 00004222 893D[E09D0000]                          mov	[mp3_curr_syn_dst], edi
  6068 00004228 C705[A8F40000]0000-                     mov	dword [mp3_curr_frame], 0
  6068 00004230 0000               
  6069                                  
  6070                                  .synth_frame_lop:
  6071 00004232 56                                      push    esi
  6072 00004233 F605[54760000]10                        test    byte [cpuid_flags], 10h
  6073 0000423A 740E                                    jz      short .no_rdtsc_supported@
  6074 0000423C 0F31                                    rdtsc
  6075 0000423E 2905[E4770000]                          sub     [rdtsc_dct32], eax
  6076 00004244 1915[E8770000]                          sbb     [rdtsc_dct32+4], edx
  6077                                  
  6078                                  .no_rdtsc_supported@:
  6079 0000424A 8B15[A0F40000]                          mov     edx, [mp3_curr_channel]
  6080 00004250 8B0495[F8BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  6081 00004257 832C95[F8BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  6082 0000425F C1E20A                                  shl     edx, 10
  6083 00004262 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  6084 00004267 09D0                                    or      eax, edx
  6085 00004269 A3[DC9D0000]                            mov     [mp3_curr_syn_index], eax
  6086 0000426E 8B3D[DC9D0000]                          mov     edi, [mp3_curr_syn_index]
  6087 00004274 8D3CBD[F89D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  6088 0000427B E852ECFFFF                              call    mp3_dct32_shift_1 ; mp3_dct32_shift_&rate_shift
  6089 00004280 F605[54760000]10                        test    byte [cpuid_flags], 10h
  6090 00004287 740E                                    jz      short .no_rdtsc_supported@@
  6091 00004289 0F31                                    rdtsc
  6092 0000428B 0105[E4770000]                          add     [rdtsc_dct32], eax
  6093 00004291 1115[E8770000]                          adc     [rdtsc_dct32+4], edx
  6094                                  
  6095                                  .no_rdtsc_supported@@:
  6096 00004297 F605[54760000]10                        test    byte [cpuid_flags], 10h
  6097 0000429E 740E                                    jz      short .no_rdtsc_supported@@@
  6098 000042A0 0F31                                    rdtsc
  6099 000042A2 2905[FC770000]                          sub     [rdtsc_synth], eax
  6100 000042A8 1915[00780000]                          sbb     [rdtsc_synth+4], edx
  6101                                  
  6102                                  .no_rdtsc_supported@@@:
  6103 000042AE E888000000                              call    mp3_synth_filter_this_8bit_shift_1_fast ;
  6104                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  6105 000042B3 F605[54760000]10                        test    byte [cpuid_flags], 10h
  6106 000042BA 740E                                    jz      short .no_rdtsc_supported@@@@
  6107 000042BC 0F31                                    rdtsc
  6108 000042BE 0105[FC770000]                          add     [rdtsc_synth], eax
  6109 000042C4 1115[00780000]                          adc     [rdtsc_synth+4], edx
  6110                                  
  6111                                  .no_rdtsc_supported@@@@:
  6112 000042CA 5E                                      pop     esi
  6113 000042CB A1[9CF40000]                            mov     eax, [mp3_samples_dst_step]
  6114 000042D0 C1E005                                  shl     eax, 5
  6115 000042D3 8A0D[4F760000]                          mov     cl, [option_rate_shift]
  6116 000042D9 D3E8                                    shr     eax, cl
  6117 000042DB 0105[E09D0000]                          add     [mp3_curr_syn_dst], eax
  6118 000042E1 81C680000000                            add     esi, 128        ; SBLIMIT*4
  6119 000042E7 FF05[A8F40000]                          inc     dword [mp3_curr_frame]
  6120 000042ED A1[A8F40000]                            mov     eax, [mp3_curr_frame]
  6121 000042F2 3B05[E49D0000]                          cmp     eax, [mp3_nb_frames]
  6122 000042F8 0F8234FFFFFF                            jb      .synth_frame_lop
  6123 000042FE 5F                                      pop     edi
  6124 000042FF 5E                                      pop     esi
  6125 00004300 033D[D89D0000]                          add     edi, [mp3_bytes_per_sample]
  6126 00004306 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  6127 0000430C FF05[A0F40000]                          inc     dword [mp3_curr_channel]
  6128 00004312 A1[A0F40000]                            mov     eax, [mp3_curr_channel]
  6129 00004317 3B05[D09D0000]                          cmp     eax, [mp3_output_num_channels]
  6130 0000431D 0F82FDFEFFFF                            jb      .synth_channel_lop
  6131 00004323 F605[54760000]10                        test    byte [cpuid_flags], 10h
  6132 0000432A 740E                                    jz      short .no_rdtsc_supported@@@@@
  6133 0000432C 0F31                                    rdtsc
  6134 0000432E 0105[CC770000]                          add     [rdtsc_synth_dct], eax
  6135 00004334 1115[D0770000]                          adc     [rdtsc_synth_dct+4], edx
  6136                                  
  6137                                  .no_rdtsc_supported@@@@@:
  6138 0000433A C3                                      retn
  6139                                  
  6140                                  
  6141                                  ; =============== S U B R O U T I N E =======================================
  6142                                  
  6143                                  
  6144                                  mp3_synth_filter_this_8bit_shift_1_fast:
  6145 0000433B A1[DC9D0000]                            mov     eax, [mp3_curr_syn_index]
  6146 00004340 A9E0010000                              test    eax, 1E0h
  6147 00004345 0F8497010000                            jz      .append_copy_to_window
  6148 0000434B 90                                      nop
  6149                                  
  6150                                  .append_copy_to_window_back:
  6151 0000434C 89C5                                    mov     ebp, eax
  6152 0000434E 81E5C0010000                            and     ebp, 1C0h
  6153 00004354 2520040000                              and     eax, 420h
  6154 00004359 8D7010                                  lea     esi, [eax+10h]
  6155 0000435C 8D7830                                  lea     edi, [eax+30h]
  6156 0000435F F7DD                                    neg     ebp
  6157 00004361 81E5C0010000                            and     ebp, 1C0h
  6158 00004367 8B0D[E09D0000]                          mov     ecx, [mp3_curr_syn_dst]
  6159                                  
  6160                                  .samples_lop:
  6161 0000436D BB00002020                              mov     ebx, 20200000h
  6162 00004372 8B14B5[F89D0000]                        mov     edx, [mp3_synth_buf+esi*4]
  6163 00004379 0FBF842D[B0EF0400]                      movsx   eax, word [mp3_synth_win+ebp*2]
  6164 00004381 0FAFC2                                  imul    eax, edx
  6165 00004384 01C3                                    add     ebx, eax
  6166 00004386 8B14B5[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  6167 0000438D 0FBF842D[30F00400]                      movsx   eax, word [(mp3_synth_win+80h)+ebp*2]
  6168 00004395 0FAFC2                                  imul    eax, edx
  6169 00004398 01C3                                    add     ebx, eax
  6170 0000439A 8B14B5[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  6171 000043A1 0FBF842D[B0F00400]                      movsx   eax, word [(mp3_synth_win+100h)+ebp*2]
  6172 000043A9 0FAFC2                                  imul    eax, edx
  6173 000043AC 01C3                                    add     ebx, eax
  6174 000043AE 8B14B5[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  6175 000043B5 0FBF842D[30F10400]                      movsx   eax, word [(mp3_synth_win+180h)+ebp*2]
  6176 000043BD 0FAFC2                                  imul    eax, edx
  6177 000043C0 01C3                                    add     ebx, eax
  6178 000043C2 8B14B5[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  6179 000043C9 0FBF842D[B0F10400]                      movsx   eax, word [(mp3_synth_win+200h)+ebp*2]
  6180 000043D1 0FAFC2                                  imul    eax, edx
  6181 000043D4 01C3                                    add     ebx, eax
  6182 000043D6 8B14B5[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  6183 000043DD 0FBF842D[30F20400]                      movsx   eax, word [(mp3_synth_win+280h)+ebp*2]
  6184 000043E5 0FAFC2                                  imul    eax, edx
  6185 000043E8 01C3                                    add     ebx, eax
  6186 000043EA 8B14B5[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  6187 000043F1 0FBF842D[B0F20400]                      movsx   eax, word [(mp3_synth_win+300h)+ebp*2]
  6188 000043F9 0FAFC2                                  imul    eax, edx
  6189 000043FC 01C3                                    add     ebx, eax
  6190 000043FE 8B14B5[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  6191 00004405 0FBF842D[30F30400]                      movsx   eax, word [(mp3_synth_win+380h)+ebp*2]
  6192 0000440D 0FAFC2                                  imul    eax, edx
  6193 00004410 01C3                                    add     ebx, eax
  6194 00004412 8B14BD[F89D0000]                        mov     edx, [mp3_synth_buf+edi*4]
  6195 00004419 0FBF842D[F0EF0400]                      movsx   eax, word [(mp3_synth_win+40h)+ebp*2]
  6196 00004421 0FAFC2                                  imul    eax, edx
  6197 00004424 01C3                                    add     ebx, eax
  6198 00004426 8B14BD[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  6199 0000442D 0FBF842D[70F00400]                      movsx   eax, word [(mp3_synth_win+0C0h)+ebp*2]
  6200 00004435 0FAFC2                                  imul    eax, edx
  6201 00004438 01C3                                    add     ebx, eax
  6202 0000443A 8B14BD[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  6203 00004441 0FBF842D[F0F00400]                      movsx   eax, word [(mp3_synth_win+140h)+ebp*2]
  6204 00004449 0FAFC2                                  imul    eax, edx
  6205 0000444C 01C3                                    add     ebx, eax
  6206 0000444E 8B14BD[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  6207 00004455 0FBF842D[70F10400]                      movsx   eax, word [(mp3_synth_win+1C0h)+ebp*2]
  6208 0000445D 0FAFC2                                  imul    eax, edx
  6209 00004460 01C3                                    add     ebx, eax
  6210 00004462 8B14BD[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  6211 00004469 0FBF842D[F0F10400]                      movsx   eax, word [(mp3_synth_win+240h)+ebp*2]
  6212 00004471 0FAFC2                                  imul    eax, edx
  6213 00004474 01C3                                    add     ebx, eax
  6214 00004476 8B14BD[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  6215 0000447D 0FBF842D[70F20400]                      movsx   eax, word [(mp3_synth_win+2C0h)+ebp*2]
  6216 00004485 0FAFC2                                  imul    eax, edx
  6217 00004488 01C3                                    add     ebx, eax
  6218 0000448A 8B14BD[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  6219 00004491 0FBF842D[F0F20400]                      movsx   eax, word [(mp3_synth_win+340h)+ebp*2]
  6220 00004499 0FAFC2                                  imul    eax, edx
  6221 0000449C 01C3                                    add     ebx, eax
  6222 0000449E 8B14BD[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  6223 000044A5 0FBF842D[70F30400]                      movsx   eax, word [(mp3_synth_win+3C0h)+ebp*2]
  6224 000044AD 0FAFC2                                  imul    eax, edx
  6225 000044B0 01C3                                    add     ebx, eax
  6226 000044B2 81FB00000040                            cmp     ebx, 40000000h
  6227 000044B8 7321                                    jnb     short .sat
  6228 000044BA C1FB16                                  sar     ebx, 22
  6229                                  
  6230                                  .sat_back:
  6231 000044BD 8819                                    mov     [ecx], bl
  6232 000044BF 030D[9CF40000]                          add     ecx, [mp3_samples_dst_step]
  6233 000044C5 83C602                                  add     esi, 2
  6234 000044C8 83EF02                                  sub     edi, 2
  6235 000044CB 83C502                                  add     ebp, 2
  6236 000044CE F7C51F000000                            test    ebp, 1Fh
  6237 000044D4 0F8593FEFFFF                            jnz     .samples_lop
  6238 000044DA C3                                      retn
  6239                                  
  6240                                  .sat:
  6241 000044DB C1FB1F                                  sar     ebx, 31
  6242 000044DE F7D3                                    not     ebx
  6243 000044E0 EBDB                                    jmp     short .sat_back
  6244                                  
  6245                                  .append_copy_to_window:
  6246 000044E2 8D3485[F89D0000]                        lea     esi, [mp3_synth_buf+eax*4]
  6247 000044E9 8DBE00080000                            lea     edi, [esi+2048]
  6248 000044EF B912000000                              mov     ecx, 18
  6249 000044F4 F3A5                                    rep movsd
  6250 000044F6 E951FEFFFF                              jmp     .append_copy_to_window_back
  6251                                  
  6252                                  
  6253                                  ; =============== S U B R O U T I N E =======================================
  6254                                  
  6255                                  
  6256                                  synth_8bit_shift_2_fast:
  6257 000044FB F605[54760000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 1,2,1
  6258 00004502 740E                                    jz      short .no_rdtsc_supported
  6259 00004504 0F31                                    rdtsc
  6260 00004506 2905[CC770000]                          sub     [rdtsc_synth_dct], eax
  6261 0000450C 1915[D0770000]                          sbb     [rdtsc_synth_dct+4], edx
  6262                                  
  6263                                  .no_rdtsc_supported:
  6264 00004512 BE[00BE0000]                            mov	esi, mp3_sb_samples
  6265 00004517 8B3D[94F40000]                          mov	edi, [mp3_samples_dst]
  6266 0000451D C705[A0F40000]0000-                     mov	dword [mp3_curr_channel], 0
  6266 00004525 0000               
  6267                                  
  6268                                  .synth_channel_lop:
  6269 00004527 56                                      push	esi
  6270 00004528 57                                      push	edi
  6271 00004529 893D[E09D0000]                          mov	[mp3_curr_syn_dst], edi
  6272 0000452F C705[A8F40000]0000-                     mov	dword [mp3_curr_frame], 0
  6272 00004537 0000               
  6273                                  
  6274                                  .synth_frame_lop:
  6275 00004539 56                                      push    esi
  6276 0000453A F605[54760000]10                        test    byte [cpuid_flags], 10h
  6277 00004541 740E                                    jz      short .no_rdtsc_supported@
  6278 00004543 0F31                                    rdtsc
  6279 00004545 2905[E4770000]                          sub     [rdtsc_dct32], eax
  6280 0000454B 1915[E8770000]                          sbb     [rdtsc_dct32+4], edx
  6281                                  
  6282                                  .no_rdtsc_supported@:
  6283 00004551 8B15[A0F40000]                          mov     edx, [mp3_curr_channel]
  6284 00004557 8B0495[F8BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  6285 0000455E 832C95[F8BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  6286 00004566 C1E20A                                  shl     edx, 10
  6287 00004569 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  6288 0000456E 09D0                                    or      eax, edx
  6289 00004570 A3[DC9D0000]                            mov     [mp3_curr_syn_index], eax
  6290 00004575 8B3D[DC9D0000]                          mov     edi, [mp3_curr_syn_index]
  6291 0000457B 8D3CBD[F89D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  6292 00004582 E83BEDFFFF                              call    mp3_dct32_shift_2 ; mp3_dct32_shift_&rate_shift
  6293 00004587 F605[54760000]10                        test    byte [cpuid_flags], 10h
  6294 0000458E 740E                                    jz      short .no_rdtsc_supported@@
  6295 00004590 0F31                                    rdtsc
  6296 00004592 0105[E4770000]                          add     [rdtsc_dct32], eax
  6297 00004598 1115[E8770000]                          adc     [rdtsc_dct32+4], edx
  6298                                  
  6299                                  .no_rdtsc_supported@@:
  6300 0000459E F605[54760000]10                        test    byte [cpuid_flags], 10h
  6301 000045A5 740E                                    jz      short .no_rdtsc_supported@@@
  6302 000045A7 0F31                                    rdtsc
  6303 000045A9 2905[FC770000]                          sub     [rdtsc_synth], eax
  6304 000045AF 1915[00780000]                          sbb     [rdtsc_synth+4], edx
  6305                                  
  6306                                  .no_rdtsc_supported@@@:
  6307 000045B5 E888000000                              call    mp3_synth_filter_this_8bit_shift_2_fast ;
  6308                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  6309 000045BA F605[54760000]10                        test    byte [cpuid_flags], 10h
  6310 000045C1 740E                                    jz      short .no_rdtsc_supported@@@@
  6311 000045C3 0F31                                    rdtsc
  6312 000045C5 0105[FC770000]                          add     [rdtsc_synth], eax
  6313 000045CB 1115[00780000]                          adc     [rdtsc_synth+4], edx
  6314                                  
  6315                                  .no_rdtsc_supported@@@@:
  6316 000045D1 5E                                      pop     esi
  6317 000045D2 A1[9CF40000]                            mov     eax, [mp3_samples_dst_step]
  6318 000045D7 C1E005                                  shl     eax, 5
  6319 000045DA 8A0D[4F760000]                          mov     cl, [option_rate_shift]
  6320 000045E0 D3E8                                    shr     eax, cl
  6321 000045E2 0105[E09D0000]                          add     [mp3_curr_syn_dst], eax
  6322 000045E8 81C680000000                            add     esi, 128        ; SBLIMIT*4
  6323 000045EE FF05[A8F40000]                          inc     dword [mp3_curr_frame]
  6324 000045F4 A1[A8F40000]                            mov     eax, [mp3_curr_frame]
  6325 000045F9 3B05[E49D0000]                          cmp     eax, [mp3_nb_frames]
  6326 000045FF 0F8234FFFFFF                            jb      .synth_frame_lop
  6327 00004605 5F                                      pop     edi
  6328 00004606 5E                                      pop     esi
  6329 00004607 033D[D89D0000]                          add     edi, [mp3_bytes_per_sample]
  6330 0000460D 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  6331 00004613 FF05[A0F40000]                          inc     dword [mp3_curr_channel]
  6332 00004619 A1[A0F40000]                            mov     eax, [mp3_curr_channel]
  6333 0000461E 3B05[D09D0000]                          cmp     eax, [mp3_output_num_channels]
  6334 00004624 0F82FDFEFFFF                            jb      .synth_channel_lop
  6335 0000462A F605[54760000]10                        test    byte [cpuid_flags], 10h
  6336 00004631 740E                                    jz      short .no_rdtsc_supported@@@@@
  6337 00004633 0F31                                    rdtsc
  6338 00004635 0105[CC770000]                          add     [rdtsc_synth_dct], eax
  6339 0000463B 1115[D0770000]                          adc     [rdtsc_synth_dct+4], edx
  6340                                  
  6341                                  .no_rdtsc_supported@@@@@:
  6342 00004641 C3                                      retn
  6343                                  
  6344                                  
  6345                                  ; =============== S U B R O U T I N E =======================================
  6346                                  
  6347                                  
  6348                                  mp3_synth_filter_this_8bit_shift_2_fast:
  6349 00004642 A1[DC9D0000]                            mov     eax, [mp3_curr_syn_index]
  6350 00004647 A9E0010000                              test    eax, 1E0h
  6351 0000464C 0F8497010000                            jz      .append_copy_to_window
  6352 00004652 90                                      nop
  6353                                  
  6354                                  .append_copy_to_window_back:
  6355 00004653 89C5                                    mov     ebp, eax
  6356 00004655 81E5C0010000                            and     ebp, 1C0h
  6357 0000465B 2520040000                              and     eax, 420h
  6358 00004660 8D7010                                  lea     esi, [eax+10h]
  6359 00004663 8D7830                                  lea     edi, [eax+30h]
  6360 00004666 F7DD                                    neg     ebp
  6361 00004668 81E5C0010000                            and     ebp, 1C0h
  6362 0000466E 8B0D[E09D0000]                          mov     ecx, [mp3_curr_syn_dst]
  6363                                  
  6364                                  .samples_lop:
  6365 00004674 BB00002020                              mov     ebx, 20200000h
  6366 00004679 8B14B5[F89D0000]                        mov     edx, [mp3_synth_buf+esi*4]
  6367 00004680 0FBF842D[B0EF0400]                      movsx   eax, word [mp3_synth_win+ebp*2]
  6368 00004688 0FAFC2                                  imul    eax, edx
  6369 0000468B 01C3                                    add     ebx, eax
  6370 0000468D 8B14B5[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  6371 00004694 0FBF842D[30F00400]                      movsx   eax, word [(mp3_synth_win+80h)+ebp*2]
  6372 0000469C 0FAFC2                                  imul    eax, edx
  6373 0000469F 01C3                                    add     ebx, eax
  6374 000046A1 8B14B5[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  6375 000046A8 0FBF842D[B0F00400]                      movsx   eax, word [(mp3_synth_win+100h)+ebp*2]
  6376 000046B0 0FAFC2                                  imul    eax, edx
  6377 000046B3 01C3                                    add     ebx, eax
  6378 000046B5 8B14B5[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  6379 000046BC 0FBF842D[30F10400]                      movsx   eax, word [(mp3_synth_win+180h)+ebp*2]
  6380 000046C4 0FAFC2                                  imul    eax, edx
  6381 000046C7 01C3                                    add     ebx, eax
  6382 000046C9 8B14B5[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  6383 000046D0 0FBF842D[B0F10400]                      movsx   eax, word [(mp3_synth_win+200h)+ebp*2]
  6384 000046D8 0FAFC2                                  imul    eax, edx
  6385 000046DB 01C3                                    add     ebx, eax
  6386 000046DD 8B14B5[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  6387 000046E4 0FBF842D[30F20400]                      movsx   eax, word [(mp3_synth_win+280h)+ebp*2]
  6388 000046EC 0FAFC2                                  imul    eax, edx
  6389 000046EF 01C3                                    add     ebx, eax
  6390 000046F1 8B14B5[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  6391 000046F8 0FBF842D[B0F20400]                      movsx   eax, word [(mp3_synth_win+300h)+ebp*2]
  6392 00004700 0FAFC2                                  imul    eax, edx
  6393 00004703 01C3                                    add     ebx, eax
  6394 00004705 8B14B5[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  6395 0000470C 0FBF842D[30F30400]                      movsx   eax, word [(mp3_synth_win+380h)+ebp*2]
  6396 00004714 0FAFC2                                  imul    eax, edx
  6397 00004717 01C3                                    add     ebx, eax
  6398 00004719 8B14BD[F89D0000]                        mov     edx, [mp3_synth_buf+edi*4]
  6399 00004720 0FBF842D[F0EF0400]                      movsx   eax, word [(mp3_synth_win+40h)+ebp*2]
  6400 00004728 0FAFC2                                  imul    eax, edx
  6401 0000472B 01C3                                    add     ebx, eax
  6402 0000472D 8B14BD[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  6403 00004734 0FBF842D[70F00400]                      movsx   eax, word [(mp3_synth_win+0C0h)+ebp*2]
  6404 0000473C 0FAFC2                                  imul    eax, edx
  6405 0000473F 01C3                                    add     ebx, eax
  6406 00004741 8B14BD[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  6407 00004748 0FBF842D[F0F00400]                      movsx   eax, word [(mp3_synth_win+140h)+ebp*2]
  6408 00004750 0FAFC2                                  imul    eax, edx
  6409 00004753 01C3                                    add     ebx, eax
  6410 00004755 8B14BD[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  6411 0000475C 0FBF842D[70F10400]                      movsx   eax, word [(mp3_synth_win+1C0h)+ebp*2]
  6412 00004764 0FAFC2                                  imul    eax, edx
  6413 00004767 01C3                                    add     ebx, eax
  6414 00004769 8B14BD[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  6415 00004770 0FBF842D[F0F10400]                      movsx   eax, word [(mp3_synth_win+240h)+ebp*2]
  6416 00004778 0FAFC2                                  imul    eax, edx
  6417 0000477B 01C3                                    add     ebx, eax
  6418 0000477D 8B14BD[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  6419 00004784 0FBF842D[70F20400]                      movsx   eax, word [(mp3_synth_win+2C0h)+ebp*2]
  6420 0000478C 0FAFC2                                  imul    eax, edx
  6421 0000478F 01C3                                    add     ebx, eax
  6422 00004791 8B14BD[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  6423 00004798 0FBF842D[F0F20400]                      movsx   eax, word [(mp3_synth_win+340h)+ebp*2]
  6424 000047A0 0FAFC2                                  imul    eax, edx
  6425 000047A3 01C3                                    add     ebx, eax
  6426 000047A5 8B14BD[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  6427 000047AC 0FBF842D[70F30400]                      movsx   eax, word [(mp3_synth_win+3C0h)+ebp*2]
  6428 000047B4 0FAFC2                                  imul    eax, edx
  6429 000047B7 01C3                                    add     ebx, eax
  6430 000047B9 81FB00000040                            cmp     ebx, 40000000h
  6431 000047BF 7321                                    jnb     short .sat
  6432 000047C1 C1FB16                                  sar     ebx, 22
  6433                                  
  6434                                  .sat_back:
  6435 000047C4 8819                                    mov     [ecx], bl
  6436 000047C6 030D[9CF40000]                          add     ecx, [mp3_samples_dst_step]
  6437 000047CC 83C604                                  add     esi, 4
  6438 000047CF 83EF04                                  sub     edi, 4
  6439 000047D2 83C504                                  add     ebp, 4
  6440 000047D5 F7C51F000000                            test    ebp, 1Fh
  6441 000047DB 0F8593FEFFFF                            jnz     .samples_lop
  6442 000047E1 C3                                      retn
  6443                                  
  6444                                  .sat:
  6445 000047E2 C1FB1F                                  sar     ebx, 31
  6446 000047E5 F7D3                                    not     ebx
  6447 000047E7 EBDB                                    jmp     short .sat_back
  6448                                  
  6449                                  .append_copy_to_window:
  6450 000047E9 8D3485[F89D0000]                        lea     esi, [mp3_synth_buf+eax*4]
  6451 000047F0 8DBE00080000                            lea     edi, [esi+2048]
  6452 000047F6 B912000000                              mov     ecx, 18
  6453 000047FB F3A5                                    rep movsd
  6454 000047FD E951FEFFFF                              jmp     .append_copy_to_window_back
  6455                                  
  6456                                  
  6457                                  ; =============== S U B R O U T I N E =======================================
  6458                                  
  6459                                  
  6460                                  synth_16bit_shift_0_slow:
  6461 00004802 F605[54760000]10                        test    byte [cpuid_flags], 10h
  6462 00004809 740E                                    jz      short .no_rdtsc_supported
  6463 0000480B 0F31                                    rdtsc
  6464 0000480D 2905[CC770000]                          sub     [rdtsc_synth_dct], eax
  6465 00004813 1915[D0770000]                          sbb     [rdtsc_synth_dct+4], edx
  6466                                  
  6467                                  .no_rdtsc_supported:
  6468 00004819 BE[00BE0000]                            mov	esi, mp3_sb_samples
  6469 0000481E 8B3D[94F40000]                          mov	edi, [mp3_samples_dst]
  6470 00004824 C705[A0F40000]0000-                     mov	dword [mp3_curr_channel], 0
  6470 0000482C 0000               
  6471                                  
  6472                                  .synth_channel_lop:
  6473 0000482E 56                                      push	esi
  6474 0000482F 57                                      push	edi
  6475 00004830 893D[E09D0000]                          mov	[mp3_curr_syn_dst], edi
  6476 00004836 C705[A8F40000]0000-                     mov	dword [mp3_curr_frame], 0
  6476 0000483E 0000               
  6477                                  
  6478                                  .synth_frame_lop:
  6479 00004840 56                                      push    esi
  6480 00004841 F605[54760000]10                        test    byte [cpuid_flags], 10h
  6481 00004848 740E                                    jz      short .no_rdtsc_supported@
  6482 0000484A 0F31                                    rdtsc
  6483 0000484C 2905[E4770000]                          sub     [rdtsc_dct32], eax
  6484 00004852 1915[E8770000]                          sbb     [rdtsc_dct32+4], edx
  6485                                  
  6486                                  .no_rdtsc_supported@:
  6487 00004858 8B15[A0F40000]                          mov     edx, [mp3_curr_channel]
  6488 0000485E 8B0495[F8BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  6489 00004865 832C95[F8BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  6490 0000486D C1E20A                                  shl     edx, 10         ; channel*1024
  6491 00004870 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  6492 00004875 09D0                                    or      eax, edx
  6493 00004877 A3[DC9D0000]                            mov     [mp3_curr_syn_index], eax
  6494 0000487C 8B3D[DC9D0000]                          mov     edi, [mp3_curr_syn_index]
  6495 00004882 8D3CBD[F89D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  6496 00004889 E864DDFFFF                              call    mp3_dct32_shift_0 ; mp3_dct32_shift_&rate_shift
  6497 0000488E F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_dct32
  6498 00004895 740E                                    jz      short .no_rdtsc_supported@@
  6499 00004897 0F31                                    rdtsc
  6500 00004899 0105[E4770000]                          add     [rdtsc_dct32], eax
  6501 0000489F 1115[E8770000]                          adc     [rdtsc_dct32+4], edx
  6502                                  
  6503                                  .no_rdtsc_supported@@:
  6504 000048A5 F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_synth
  6505 000048AC 740E                                    jz      short .no_rdtsc_supported@@@
  6506 000048AE 0F31                                    rdtsc
  6507 000048B0 2905[FC770000]                          sub     [rdtsc_synth], eax
  6508 000048B6 1915[00780000]                          sbb     [rdtsc_synth+4], edx
  6509                                  
  6510                                  .no_rdtsc_supported@@@:
  6511 000048BC E888000000                              call    mp3_synth_filter_this_16bit_shift_0_slow
  6512 000048C1 F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_synth
  6513 000048C8 740E                                    jz      short .no_rdtsc_supported@@@@
  6514 000048CA 0F31                                    rdtsc
  6515 000048CC 0105[FC770000]                          add     [rdtsc_synth], eax
  6516 000048D2 1115[00780000]                          adc     [rdtsc_synth+4], edx
  6517                                  
  6518                                  .no_rdtsc_supported@@@@:
  6519 000048D8 5E                                      pop     esi
  6520 000048D9 A1[9CF40000]                            mov     eax, [mp3_samples_dst_step]
  6521 000048DE C1E005                                  shl     eax, 5
  6522 000048E1 8A0D[4F760000]                          mov     cl, [option_rate_shift]
  6523 000048E7 D3E8                                    shr     eax, cl
  6524 000048E9 0105[E09D0000]                          add     [mp3_curr_syn_dst], eax
  6525 000048EF 81C680000000                            add     esi, 128        ; SBLIMIT*4
  6526 000048F5 FF05[A8F40000]                          inc     dword [mp3_curr_frame]
  6527 000048FB A1[A8F40000]                            mov     eax, [mp3_curr_frame]
  6528 00004900 3B05[E49D0000]                          cmp     eax, [mp3_nb_frames]
  6529 00004906 0F8234FFFFFF                            jb      .synth_frame_lop
  6530 0000490C 5F                                      pop     edi
  6531 0000490D 5E                                      pop     esi
  6532 0000490E 033D[D89D0000]                          add     edi, [mp3_bytes_per_sample]
  6533 00004914 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  6534 0000491A FF05[A0F40000]                          inc     dword [mp3_curr_channel]
  6535 00004920 A1[A0F40000]                            mov     eax, [mp3_curr_channel]
  6536 00004925 3B05[D09D0000]                          cmp     eax, [mp3_output_num_channels]
  6537 0000492B 0F82FDFEFFFF                            jb      .synth_channel_lop
  6538 00004931 F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_synth_dct
  6539 00004938 740E                                    jz      short .no_rdtsc_supported@@@@@
  6540 0000493A 0F31                                    rdtsc
  6541 0000493C 0105[CC770000]                          add     [rdtsc_synth_dct], eax
  6542 00004942 1115[D0770000]                          adc     [rdtsc_synth_dct+4], edx
  6543                                  
  6544                                  .no_rdtsc_supported@@@@@:
  6545 00004948 C3                                      retn
  6546                                  
  6547                                  
  6548                                  ; =============== S U B R O U T I N E =======================================
  6549                                  
  6550                                  
  6551                                  mp3_synth_filter_this_16bit_shift_0_slow:
  6552 00004949 A1[DC9D0000]                            mov     eax, [mp3_curr_syn_index]
  6553 0000494E A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh
  6554 00004953 0F847C010000                            jz      .append_copy_to_window
  6555 00004959 90                                      nop
  6556                                  
  6557                                  .append_copy_to_window_back:
  6558 0000495A 89C5                                    mov     ebp, eax        ; mov @@win1,eax
  6559 0000495C 81E5C0010000                            and     ebp, 1C0h       ; and @@win1,1FFh-1Fh-20h
  6560 00004962 2520040000                              and     eax, 420h       ; and eax,20h+(1 shl 10) ; bit5, and channel
  6561 00004967 8D7010                                  lea     esi, [eax+10h]  ; lea @@syn1,[eax+10h]
  6562 0000496A 8D7830                                  lea     edi, [eax+30h]  ; lea @@syn2,[eax+30h]
  6563 0000496D F7DD                                    neg     ebp
  6564 0000496F 81E5C0010000                            and     ebp, 1C0h       ; and @@win1,1FFh-1Fh-20h
  6565 00004975 8B0D[E09D0000]                          mov     ecx, [mp3_curr_syn_dst]
  6566                                  
  6567                                  .samples_lop:
  6568 0000497B BB10001000                              mov     ebx, 100010h    ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  6569                                                                          ; @@out_shift = 5
  6570                                  
  6571                                  .SUM8_@:                                ; @@SUM8 macro sum,win,ww,syn
  6572 00004980 8B14B5[F89D0000]                        mov     edx, [mp3_synth_buf+esi*4] ; IRP nn,0,1,2,3,4,5,6,7
  6573                                                                          ; @@SUM8 @@sum,@@win1,0, @@syn1
  6574 00004987 8B04AD[B0EF0400]                        mov     eax, [mp3_synth_win+ebp*4] ; [mp3_synth_buf+syn*4+(nn*64*4)]
  6575 0000498E F7EA                                    imul    edx             ; [mp3_synth_win+win*4+(nn*64*4)+ww*4]
  6576 00004990 01D3                                    add     ebx, edx
  6577 00004992 8B14B5[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  6578 00004999 8B04AD[B0F00400]                        mov     eax, [(mp3_synth_win+100h)+ebp*4]
  6579 000049A0 F7EA                                    imul    edx
  6580 000049A2 01D3                                    add     ebx, edx        ; add sum,edx
  6581 000049A4 8B14B5[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  6582 000049AB 8B04AD[B0F10400]                        mov     eax, [(mp3_synth_win+200h)+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4]
  6583 000049B2 F7EA                                    imul    edx             ; 64bit = 32bit * 32bit
  6584 000049B4 01D3                                    add     ebx, edx
  6585 000049B6 8B14B5[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  6586 000049BD 8B04AD[B0F20400]                        mov     eax, [(mp3_synth_win+300h)+ebp*4]
  6587 000049C4 F7EA                                    imul    edx
  6588 000049C6 01D3                                    add     ebx, edx
  6589 000049C8 8B14B5[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  6590 000049CF 8B04AD[B0F30400]                        mov     eax, [(mp3_synth_win+400h)+ebp*4]
  6591 000049D6 F7EA                                    imul    edx
  6592 000049D8 01D3                                    add     ebx, edx
  6593 000049DA 8B14B5[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  6594 000049E1 8B04AD[B0F40400]                        mov     eax, [(mp3_synth_win+500h)+ebp*4]
  6595 000049E8 F7EA                                    imul    edx
  6596 000049EA 01D3                                    add     ebx, edx
  6597 000049EC 8B14B5[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  6598 000049F3 8B04AD[B0F50400]                        mov     eax, [(mp3_synth_win+600h)+ebp*4]
  6599 000049FA F7EA                                    imul    edx
  6600 000049FC 01D3                                    add     ebx, edx
  6601 000049FE 8B14B5[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  6602 00004A05 8B04AD[B0F60400]                        mov     eax, [(mp3_synth_win+700h)+ebp*4]
  6603 00004A0C F7EA                                    imul    edx
  6604 00004A0E 01D3                                    add     ebx, edx
  6605                                  
  6606                                  .skippp:                               ; @@SUM8 macro sum,win,ww,syn
  6607 00004A10 8B14BD[F89D0000]                        mov     edx, [mp3_synth_buf+edi*4] ; @@SUM8 @@sum,@@win1,32,@@syn2
  6608                                                                          ; [mp3_synth_buf+syn*4+(nn*64*4)]
  6609 00004A17 8B04AD[30F00400]                        mov     eax, [(mp3_synth_win+80h)+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4]
  6610 00004A1E F7EA                                    imul    edx
  6611 00004A20 01D3                                    add     ebx, edx
  6612 00004A22 8B14BD[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  6613 00004A29 8B04AD[30F10400]                        mov     eax, [(mp3_synth_win+180h)+ebp*4]
  6614 00004A30 F7EA                                    imul    edx
  6615 00004A32 01D3                                    add     ebx, edx
  6616 00004A34 8B14BD[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  6617 00004A3B 8B04AD[30F20400]                        mov     eax, [(mp3_synth_win+280h)+ebp*4]
  6618 00004A42 F7EA                                    imul    edx
  6619 00004A44 01D3                                    add     ebx, edx
  6620 00004A46 8B14BD[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  6621 00004A4D 8B04AD[30F30400]                        mov     eax, [(mp3_synth_win+380h)+ebp*4]
  6622 00004A54 F7EA                                    imul    edx
  6623 00004A56 01D3                                    add     ebx, edx
  6624 00004A58 8B14BD[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  6625 00004A5F 8B04AD[30F40400]                        mov     eax, [(mp3_synth_win+480h)+ebp*4]
  6626 00004A66 F7EA                                    imul    edx
  6627 00004A68 01D3                                    add     ebx, edx
  6628 00004A6A 8B14BD[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  6629 00004A71 8B04AD[30F50400]                        mov     eax, [(mp3_synth_win+580h)+ebp*4]
  6630 00004A78 F7EA                                    imul    edx
  6631 00004A7A 01D3                                    add     ebx, edx
  6632 00004A7C 8B14BD[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  6633 00004A83 8B04AD[30F60400]                        mov     eax, [(mp3_synth_win+680h)+ebp*4]
  6634 00004A8A F7EA                                    imul    edx
  6635 00004A8C 01D3                                    add     ebx, edx
  6636 00004A8E 8B14BD[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  6637 00004A95 8B04AD[30F70400]                        mov     eax, [(mp3_synth_win+780h)+ebp*4]
  6638 00004A9C F7EA                                    imul    edx
  6639 00004A9E 01D3                                    add     ebx, edx
  6640 00004AA0 81FB00002000                            cmp     ebx, 200000h    ; cmp @@sum,10000h SHL (@@out_shift)
  6641 00004AA6 7322                                    jnb     short .sat
  6642 00004AA8 C1FB05                                  sar     ebx, 5          ; sar @@sum,(@@out_shift)
  6643 00004AAB 81EB00800000                            sub     ebx, 8000h      ; make 16bit signed
  6644                                  
  6645                                  .sat_back:
  6646 00004AB1 668919                                  mov     [ecx], bx
  6647 00004AB4 030D[9CF40000]                          add     ecx, [mp3_samples_dst_step]
  6648 00004ABA 46                                      inc     esi             ; inc @@syn1
  6649 00004ABB 4F                                      dec     edi             ; dec @@syn2
  6650 00004ABC 45                                      inc     ebp             ; inc @@win1
  6651 00004ABD F7C51F000000                            test    ebp, 1Fh        ; test @@win1,1Fh
  6652 00004AC3 0F85B2FEFFFF                            jnz     .samples_lop
  6653 00004AC9 C3                                      retn
  6654                                  
  6655                                  .sat:
  6656 00004ACA C1FB1F                                  sar     ebx, 31         ; FFFFFFFFh,00000000h
  6657 00004ACD 81F3FF7F0000                            xor     ebx, 7FFFh      ; FFFF8000h,00007FFFh (signed 16bit)
  6658 00004AD3 EBDC                                    jmp     short .sat_back
  6659                                  
  6660                                  .append_copy_to_window:
  6661 00004AD5 8D3485[F89D0000]                        lea     esi, [mp3_synth_buf+eax*4]
  6662 00004ADC 8DBE00080000                            lea     edi, [esi+2048] ; [esi+512*4]
  6663 00004AE2 B912000000                              mov     ecx, 18         ; (12h*4)/4
  6664 00004AE7 F3A5                                    rep movsd
  6665 00004AE9 E96CFEFFFF                              jmp     .append_copy_to_window_back
  6666                                  
  6667                                  
  6668                                  ; =============== S U B R O U T I N E =======================================
  6669                                  
  6670                                  
  6671                                  synth_16bit_shift_1_slow:
  6672 00004AEE F605[54760000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 0,1,0
  6673 00004AF5 740E                                    jz      short .no_rdtsc_supported
  6674 00004AF7 0F31                                    rdtsc
  6675 00004AF9 2905[CC770000]                          sub     [rdtsc_synth_dct], eax
  6676 00004AFF 1915[D0770000]                          sbb     [rdtsc_synth_dct+4], edx
  6677                                  
  6678                                  .no_rdtsc_supported:
  6679 00004B05 BE[00BE0000]                            mov	esi, mp3_sb_samples
  6680 00004B0A 8B3D[94F40000]                          mov	edi, [mp3_samples_dst]
  6681 00004B10 C705[A0F40000]0000-                     mov	dword [mp3_curr_channel], 0
  6681 00004B18 0000               
  6682                                  
  6683                                  .synth_channel_lop:
  6684 00004B1A 56                                      push	esi
  6685 00004B1B 57                                      push	edi
  6686 00004B1C 893D[E09D0000]                          mov	[mp3_curr_syn_dst], edi
  6687 00004B22 C705[A8F40000]0000-                     mov	dword [mp3_curr_frame], 0
  6687 00004B2A 0000               
  6688                                  
  6689                                  .synth_frame_lop:
  6690 00004B2C 56                                      push    esi
  6691 00004B2D F605[54760000]10                        test    byte [cpuid_flags], 10h
  6692 00004B34 740E                                    jz      short .no_rdtsc_supported@
  6693 00004B36 0F31                                    rdtsc
  6694 00004B38 2905[E4770000]                          sub     [rdtsc_dct32], eax
  6695 00004B3E 1915[E8770000]                          sbb     [rdtsc_dct32+4], edx
  6696                                  
  6697                                  .no_rdtsc_supported@:
  6698 00004B44 8B15[A0F40000]                          mov     edx, [mp3_curr_channel]
  6699 00004B4A 8B0495[F8BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  6700 00004B51 832C95[F8BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  6701 00004B59 C1E20A                                  shl     edx, 10         ; channel*1024
  6702 00004B5C 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh ; index(0..511), align 32
  6703 00004B61 09D0                                    or      eax, edx
  6704 00004B63 A3[DC9D0000]                            mov     [mp3_curr_syn_index], eax
  6705 00004B68 8B3D[DC9D0000]                          mov     edi, [mp3_curr_syn_index]
  6706 00004B6E 8D3CBD[F89D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  6707 00004B75 E858E3FFFF                              call    mp3_dct32_shift_1 ; call mp3_dct32_shift_&rate_shift
  6708 00004B7A F605[54760000]10                        test    byte [cpuid_flags], 10h
  6709 00004B81 740E                                    jz      short .no_rdtsc_supported@@
  6710 00004B83 0F31                                    rdtsc
  6711 00004B85 0105[E4770000]                          add     [rdtsc_dct32], eax
  6712 00004B8B 1115[E8770000]                          adc     [rdtsc_dct32+4], edx
  6713                                  
  6714                                  .no_rdtsc_supported@@:
  6715 00004B91 F605[54760000]10                        test    byte [cpuid_flags], 10h
  6716 00004B98 740E                                    jz      short .no_rdtsc_supported@@@
  6717 00004B9A 0F31                                    rdtsc
  6718 00004B9C 2905[FC770000]                          sub     [rdtsc_synth], eax
  6719 00004BA2 1915[00780000]                          sbb     [rdtsc_synth+4], edx
  6720                                  
  6721                                  .no_rdtsc_supported@@@:
  6722 00004BA8 E888000000                              call    mp3_synth_filter_this_16bit_shift_1_slow ;
  6723                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  6724 00004BAD F605[54760000]10                        test    byte [cpuid_flags], 10h
  6725 00004BB4 740E                                    jz      short .no_rdtsc_supported@@@@
  6726 00004BB6 0F31                                    rdtsc
  6727 00004BB8 0105[FC770000]                          add     [rdtsc_synth], eax
  6728 00004BBE 1115[00780000]                          adc     [rdtsc_synth+4], edx
  6729                                  
  6730                                  .no_rdtsc_supported@@@@:
  6731 00004BC4 5E                                      pop     esi
  6732 00004BC5 A1[9CF40000]                            mov     eax, [mp3_samples_dst_step]
  6733 00004BCA C1E005                                  shl     eax, 5
  6734 00004BCD 8A0D[4F760000]                          mov     cl, [option_rate_shift] ; IF with_rate_shift
  6735 00004BD3 D3E8                                    shr     eax, cl
  6736 00004BD5 0105[E09D0000]                          add     [mp3_curr_syn_dst], eax
  6737 00004BDB 81C680000000                            add     esi, 128        ; SBLIMIT*4  ; src+32*4
  6738 00004BE1 FF05[A8F40000]                          inc	dword [mp3_curr_frame]
  6739 00004BE7 A1[A8F40000]                            mov     eax, [mp3_curr_frame]
  6740 00004BEC 3B05[E49D0000]                          cmp     eax, [mp3_nb_frames]
  6741 00004BF2 0F8234FFFFFF                            jb      .synth_frame_lop
  6742 00004BF8 5F                                      pop     edi
  6743 00004BF9 5E                                      pop     esi
  6744 00004BFA 033D[D89D0000]                          add     edi, [mp3_bytes_per_sample]
  6745 00004C00 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4 ; src
  6746 00004C06 FF05[A0F40000]                          inc	dword [mp3_curr_channel]
  6747 00004C0C A1[A0F40000]                            mov     eax, [mp3_curr_channel]
  6748 00004C11 3B05[D09D0000]                          cmp     eax, [mp3_output_num_channels]
  6749 00004C17 0F82FDFEFFFF                            jb      .synth_channel_lop
  6750 00004C1D F605[54760000]10                        test    byte [cpuid_flags], 10h
  6751 00004C24 740E                                    jz      short .no_rdtsc_supported@@@@@
  6752 00004C26 0F31                                    rdtsc
  6753 00004C28 0105[CC770000]                          add     [rdtsc_synth_dct], eax
  6754 00004C2E 1115[D0770000]                          adc     [rdtsc_synth_dct+4], edx
  6755                                  
  6756                                  .no_rdtsc_supported@@@@@:
  6757 00004C34 C3                                      retn
  6758                                  
  6759                                  
  6760                                  ; =============== S U B R O U T I N E =======================================
  6761                                  
  6762                                  
  6763                                  mp3_synth_filter_this_16bit_shift_1_slow:
  6764 00004C35 A1[DC9D0000]                            mov     eax, [mp3_curr_syn_index]
  6765 00004C3A A9E0010000                              test    eax, 1E0h
  6766 00004C3F 0F8482010000                            jz      .append_copy_to_window
  6767 00004C45 90                                      nop
  6768                                  
  6769                                  .append_copy_to_window_back:
  6770 00004C46 89C5                                    mov     ebp, eax
  6771 00004C48 81E5C0010000                            and     ebp, 1C0h
  6772 00004C4E 2520040000                              and     eax, 420h
  6773 00004C53 8D7010                                  lea     esi, [eax+10h]
  6774 00004C56 8D7830                                  lea     edi, [eax+30h]
  6775 00004C59 F7DD                                    neg     ebp
  6776 00004C5B 81E5C0010000                            and     ebp, 1C0h
  6777 00004C61 8B0D[E09D0000]                          mov     ecx, [mp3_curr_syn_dst]
  6778                                  
  6779                                  .samples_lop:
  6780 00004C67 BB10001000                              mov     ebx, 100010h
  6781 00004C6C 8B14B5[F89D0000]                        mov     edx, [mp3_synth_buf+esi*4]
  6782 00004C73 8B04AD[B0EF0400]                        mov     eax, [mp3_synth_win+ebp*4]
  6783 00004C7A F7EA                                    imul    edx
  6784 00004C7C 01D3                                    add     ebx, edx
  6785 00004C7E 8B14B5[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  6786 00004C85 8B04AD[B0F00400]                        mov     eax, [(mp3_synth_win+100h)+ebp*4]
  6787 00004C8C F7EA                                    imul    edx
  6788 00004C8E 01D3                                    add     ebx, edx
  6789 00004C90 8B14B5[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  6790 00004C97 8B04AD[B0F10400]                        mov     eax, [(mp3_synth_win+200h)+ebp*4]
  6791 00004C9E F7EA                                    imul    edx
  6792 00004CA0 01D3                                    add     ebx, edx
  6793 00004CA2 8B14B5[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  6794 00004CA9 8B04AD[B0F20400]                        mov     eax, [(mp3_synth_win+300h)+ebp*4]
  6795 00004CB0 F7EA                                    imul    edx
  6796 00004CB2 01D3                                    add     ebx, edx
  6797 00004CB4 8B14B5[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  6798 00004CBB 8B04AD[B0F30400]                        mov     eax, [(mp3_synth_win+400h)+ebp*4]
  6799 00004CC2 F7EA                                    imul    edx
  6800 00004CC4 01D3                                    add     ebx, edx
  6801 00004CC6 8B14B5[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  6802 00004CCD 8B04AD[B0F40400]                        mov     eax, [(mp3_synth_win+500h)+ebp*4]
  6803 00004CD4 F7EA                                    imul    edx
  6804 00004CD6 01D3                                    add     ebx, edx
  6805 00004CD8 8B14B5[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  6806 00004CDF 8B04AD[B0F50400]                        mov     eax, [(mp3_synth_win+600h)+ebp*4]
  6807 00004CE6 F7EA                                    imul    edx
  6808 00004CE8 01D3                                    add     ebx, edx
  6809 00004CEA 8B14B5[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  6810 00004CF1 8B04AD[B0F60400]                        mov     eax, [(mp3_synth_win+700h)+ebp*4]
  6811 00004CF8 F7EA                                    imul    edx
  6812 00004CFA 01D3                                    add     ebx, edx
  6813 00004CFC 8B14BD[F89D0000]                        mov     edx, [mp3_synth_buf+edi*4]
  6814 00004D03 8B04AD[30F00400]                        mov     eax, [(mp3_synth_win+80h)+ebp*4]
  6815 00004D0A F7EA                                    imul    edx
  6816 00004D0C 01D3                                    add     ebx, edx
  6817 00004D0E 8B14BD[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  6818 00004D15 8B04AD[30F10400]                        mov     eax, [(mp3_synth_win+180h)+ebp*4]
  6819 00004D1C F7EA                                    imul    edx
  6820 00004D1E 01D3                                    add     ebx, edx
  6821 00004D20 8B14BD[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  6822 00004D27 8B04AD[30F20400]                        mov     eax, [(mp3_synth_win+280h)+ebp*4]
  6823 00004D2E F7EA                                    imul    edx
  6824 00004D30 01D3                                    add     ebx, edx
  6825 00004D32 8B14BD[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  6826 00004D39 8B04AD[30F30400]                        mov     eax, [(mp3_synth_win+380h)+ebp*4]
  6827 00004D40 F7EA                                    imul    edx
  6828 00004D42 01D3                                    add     ebx, edx
  6829 00004D44 8B14BD[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  6830 00004D4B 8B04AD[30F40400]                        mov     eax, [(mp3_synth_win+480h)+ebp*4]
  6831 00004D52 F7EA                                    imul    edx
  6832 00004D54 01D3                                    add     ebx, edx
  6833 00004D56 8B14BD[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  6834 00004D5D 8B04AD[30F50400]                        mov     eax, [(mp3_synth_win+580h)+ebp*4]
  6835 00004D64 F7EA                                    imul    edx
  6836 00004D66 01D3                                    add     ebx, edx
  6837 00004D68 8B14BD[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  6838 00004D6F 8B04AD[30F60400]                        mov     eax, [(mp3_synth_win+680h)+ebp*4]
  6839 00004D76 F7EA                                    imul    edx
  6840 00004D78 01D3                                    add     ebx, edx
  6841 00004D7A 8B14BD[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  6842 00004D81 8B04AD[30F70400]                        mov     eax, [(mp3_synth_win+780h)+ebp*4]
  6843 00004D88 F7EA                                    imul    edx
  6844 00004D8A 01D3                                    add     ebx, edx
  6845 00004D8C 81FB00002000                            cmp     ebx, 200000h
  6846 00004D92 7328                                    jnb     short .sat
  6847 00004D94 C1FB05                                  sar     ebx, 5
  6848 00004D97 81EB00800000                            sub     ebx, 8000h
  6849                                  
  6850                                  .sat_back:
  6851 00004D9D 668919                                  mov     [ecx], bx
  6852 00004DA0 030D[9CF40000]                          add     ecx, [mp3_samples_dst_step]
  6853 00004DA6 83C602                                  add     esi, 2
  6854 00004DA9 83EF02                                  sub     edi, 2
  6855 00004DAC 83C502                                  add     ebp, 2
  6856 00004DAF F7C51F000000                            test    ebp, 1Fh
  6857 00004DB5 0F85ACFEFFFF                            jnz     .samples_lop
  6858 00004DBB C3                                      retn
  6859                                  
  6860                                  .sat:
  6861 00004DBC C1FB1F                                  sar     ebx, 31
  6862 00004DBF 81F3FF7F0000                            xor     ebx, 7FFFh
  6863 00004DC5 EBD6                                    jmp     short .sat_back
  6864                                  
  6865                                  .append_copy_to_window:
  6866 00004DC7 8D3485[F89D0000]                        lea     esi, [mp3_synth_buf+eax*4]
  6867 00004DCE 8DBE00080000                            lea     edi, [esi+2048]
  6868 00004DD4 B912000000                              mov     ecx, 18
  6869 00004DD9 F3A5                                    rep movsd
  6870 00004DDB E966FEFFFF                              jmp     .append_copy_to_window_back
  6871                                  
  6872                                  
  6873                                  ; =============== S U B R O U T I N E =======================================
  6874                                  
  6875                                  
  6876                                  synth_16bit_shift_2_slow:
  6877 00004DE0 F605[54760000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 0,2,0
  6878 00004DE7 740E                                    jz      short .no_rdtsc_supported
  6879 00004DE9 0F31                                    rdtsc
  6880 00004DEB 2905[CC770000]                          sub     [rdtsc_synth_dct], eax
  6881 00004DF1 1915[D0770000]                          sbb     [rdtsc_synth_dct+4], edx
  6882                                  
  6883                                  .no_rdtsc_supported:
  6884 00004DF7 BE[00BE0000]                            mov	esi, mp3_sb_samples
  6885 00004DFC 8B3D[94F40000]                          mov	edi, [mp3_samples_dst]
  6886 00004E02 C705[A0F40000]0000-                     mov	dword [mp3_curr_channel], 0
  6886 00004E0A 0000               
  6887                                  
  6888                                  .synth_channel_lop:
  6889 00004E0C 56                                      push	esi
  6890 00004E0D 57                                      push	edi
  6891 00004E0E 893D[E09D0000]                          mov	[mp3_curr_syn_dst], edi
  6892 00004E14 C705[A8F40000]0000-                     mov	dword [mp3_curr_frame], 0
  6892 00004E1C 0000               
  6893                                  
  6894                                  .synth_frame_lop:
  6895 00004E1E 56                                      push    esi
  6896 00004E1F F605[54760000]10                        test    byte [cpuid_flags], 10h
  6897 00004E26 740E                                    jz      short .no_rdtsc_supported@
  6898 00004E28 0F31                                    rdtsc
  6899 00004E2A 2905[E4770000]                          sub     [rdtsc_dct32], eax
  6900 00004E30 1915[E8770000]                          sbb     [rdtsc_dct32+4], edx
  6901                                  
  6902                                  .no_rdtsc_supported@:
  6903 00004E36 8B15[A0F40000]                          mov     edx, [mp3_curr_channel]
  6904 00004E3C 8B0495[F8BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  6905 00004E43 832C95[F8BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  6906 00004E4B C1E20A                                  shl     edx, 10
  6907 00004E4E 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  6908 00004E53 09D0                                    or      eax, edx
  6909 00004E55 A3[DC9D0000]                            mov     [mp3_curr_syn_index], eax
  6910 00004E5A 8B3D[DC9D0000]                          mov     edi, [mp3_curr_syn_index]
  6911 00004E60 8D3CBD[F89D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  6912 00004E67 E856E4FFFF                              call    mp3_dct32_shift_2 ; call mp3_dct32_shift_&rate_shift
  6913 00004E6C F605[54760000]10                        test    byte [cpuid_flags], 10h
  6914 00004E73 740E                                    jz      short .no_rdtsc_supported@@
  6915 00004E75 0F31                                    rdtsc
  6916 00004E77 0105[E4770000]                          add     [rdtsc_dct32], eax
  6917 00004E7D 1115[E8770000]                          adc     [rdtsc_dct32+4], edx
  6918                                  
  6919                                  .no_rdtsc_supported@@:
  6920 00004E83 F605[54760000]10                        test    byte [cpuid_flags], 10h
  6921 00004E8A 740E                                    jz      short .no_rdtsc_supported@@@
  6922 00004E8C 0F31                                    rdtsc
  6923 00004E8E 2905[FC770000]                          sub     [rdtsc_synth], eax
  6924 00004E94 1915[00780000]                          sbb     [rdtsc_synth+4], edx
  6925                                  
  6926                                  .no_rdtsc_supported@@@:
  6927 00004E9A E888000000                              call    mp3_synth_filter_this_16bit_shift_2_slow ;
  6928                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  6929 00004E9F F605[54760000]10                        test    byte [cpuid_flags], 10h
  6930 00004EA6 740E                                    jz      short .no_rdtsc_supported@@@@
  6931 00004EA8 0F31                                    rdtsc
  6932 00004EAA 0105[FC770000]                          add     [rdtsc_synth], eax
  6933 00004EB0 1115[00780000]                          adc     [rdtsc_synth+4], edx
  6934                                  
  6935                                  .no_rdtsc_supported@@@@:
  6936 00004EB6 5E                                      pop     esi
  6937 00004EB7 A1[9CF40000]                            mov     eax, [mp3_samples_dst_step]
  6938 00004EBC C1E005                                  shl     eax, 5
  6939 00004EBF 8A0D[4F760000]                          mov     cl, [option_rate_shift]
  6940 00004EC5 D3E8                                    shr     eax, cl
  6941 00004EC7 0105[E09D0000]                          add     [mp3_curr_syn_dst], eax
  6942 00004ECD 81C680000000                            add     esi, 128        ; SBLIMIT*4
  6943 00004ED3 FF05[A8F40000]                          inc     dword [mp3_curr_frame]
  6944 00004ED9 A1[A8F40000]                            mov     eax, [mp3_curr_frame]
  6945 00004EDE 3B05[E49D0000]                          cmp     eax, [mp3_nb_frames]
  6946 00004EE4 0F8234FFFFFF                            jb      .synth_frame_lop
  6947 00004EEA 5F                                      pop     edi
  6948 00004EEB 5E                                      pop     esi
  6949 00004EEC 033D[D89D0000]                          add     edi, [mp3_bytes_per_sample]
  6950 00004EF2 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  6951 00004EF8 FF05[A0F40000]                          inc     dword [mp3_curr_channel]
  6952 00004EFE A1[A0F40000]                            mov     eax, [mp3_curr_channel]
  6953 00004F03 3B05[D09D0000]                          cmp     eax, [mp3_output_num_channels]
  6954 00004F09 0F82FDFEFFFF                            jb      .synth_channel_lop
  6955 00004F0F F605[54760000]10                        test    byte [cpuid_flags], 10h
  6956 00004F16 740E                                    jz      short .no_rdtsc_supported@@@@@
  6957 00004F18 0F31                                    rdtsc
  6958 00004F1A 0105[CC770000]                          add     [rdtsc_synth_dct], eax
  6959 00004F20 1115[D0770000]                          adc     [rdtsc_synth_dct+4], edx
  6960                                  
  6961                                  .no_rdtsc_supported@@@@@:
  6962 00004F26 C3                                      retn
  6963                                  
  6964                                  
  6965                                  ; =============== S U B R O U T I N E =======================================
  6966                                  
  6967                                  
  6968                                  mp3_synth_filter_this_16bit_shift_2_slow:
  6969 00004F27 A1[DC9D0000]                            mov     eax, [mp3_curr_syn_index]
  6970 00004F2C A9E0010000                              test    eax, 1E0h
  6971 00004F31 0F8482010000                            jz      .append_copy_to_window
  6972 00004F37 90                                      nop
  6973                                  
  6974                                  .append_copy_to_window_back:
  6975 00004F38 89C5                                    mov     ebp, eax
  6976 00004F3A 81E5C0010000                            and     ebp, 1C0h
  6977 00004F40 2520040000                              and     eax, 420h
  6978 00004F45 8D7010                                  lea     esi, [eax+10h]
  6979 00004F48 8D7830                                  lea     edi, [eax+30h]
  6980 00004F4B F7DD                                    neg     ebp
  6981 00004F4D 81E5C0010000                            and     ebp, 1C0h
  6982 00004F53 8B0D[E09D0000]                          mov     ecx, [mp3_curr_syn_dst]
  6983                                  
  6984                                  .samples_lop:
  6985 00004F59 BB10001000                              mov     ebx, 100010h
  6986 00004F5E 8B14B5[F89D0000]                        mov     edx, [mp3_synth_buf+esi*4]
  6987 00004F65 8B04AD[B0EF0400]                        mov     eax, [mp3_synth_win+ebp*4]
  6988 00004F6C F7EA                                    imul    edx
  6989 00004F6E 01D3                                    add     ebx, edx
  6990 00004F70 8B14B5[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  6991 00004F77 8B04AD[B0F00400]                        mov     eax, [(mp3_synth_win+100h)+ebp*4]
  6992 00004F7E F7EA                                    imul    edx
  6993 00004F80 01D3                                    add     ebx, edx
  6994 00004F82 8B14B5[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  6995 00004F89 8B04AD[B0F10400]                        mov     eax, [(mp3_synth_win+200h)+ebp*4]
  6996 00004F90 F7EA                                    imul    edx
  6997 00004F92 01D3                                    add     ebx, edx
  6998 00004F94 8B14B5[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  6999 00004F9B 8B04AD[B0F20400]                        mov     eax, [(mp3_synth_win+300h)+ebp*4]
  7000 00004FA2 F7EA                                    imul    edx
  7001 00004FA4 01D3                                    add     ebx, edx
  7002 00004FA6 8B14B5[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  7003 00004FAD 8B04AD[B0F30400]                        mov     eax, [(mp3_synth_win+400h)+ebp*4]
  7004 00004FB4 F7EA                                    imul    edx
  7005 00004FB6 01D3                                    add     ebx, edx
  7006 00004FB8 8B14B5[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  7007 00004FBF 8B04AD[B0F40400]                        mov     eax, [(mp3_synth_win+500h)+ebp*4]
  7008 00004FC6 F7EA                                    imul    edx
  7009 00004FC8 01D3                                    add     ebx, edx
  7010 00004FCA 8B14B5[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  7011 00004FD1 8B04AD[B0F50400]                        mov     eax, [(mp3_synth_win+600h)+ebp*4]
  7012 00004FD8 F7EA                                    imul    edx
  7013 00004FDA 01D3                                    add     ebx, edx
  7014 00004FDC 8B14B5[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  7015 00004FE3 8B04AD[B0F60400]                        mov     eax, [(mp3_synth_win+700h)+ebp*4]
  7016 00004FEA F7EA                                    imul    edx
  7017 00004FEC 01D3                                    add     ebx, edx
  7018 00004FEE 8B14BD[F89D0000]                        mov     edx, [mp3_synth_buf+edi*4]
  7019 00004FF5 8B04AD[30F00400]                        mov     eax, [(mp3_synth_win+80h)+ebp*4]
  7020 00004FFC F7EA                                    imul    edx
  7021 00004FFE 01D3                                    add     ebx, edx
  7022 00005000 8B14BD[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  7023 00005007 8B04AD[30F10400]                        mov     eax, [(mp3_synth_win+180h)+ebp*4]
  7024 0000500E F7EA                                    imul    edx
  7025 00005010 01D3                                    add     ebx, edx
  7026 00005012 8B14BD[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  7027 00005019 8B04AD[30F20400]                        mov     eax, [(mp3_synth_win+280h)+ebp*4]
  7028 00005020 F7EA                                    imul    edx
  7029 00005022 01D3                                    add     ebx, edx
  7030 00005024 8B14BD[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  7031 0000502B 8B04AD[30F30400]                        mov     eax, [(mp3_synth_win+380h)+ebp*4]
  7032 00005032 F7EA                                    imul    edx
  7033 00005034 01D3                                    add     ebx, edx
  7034 00005036 8B14BD[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  7035 0000503D 8B04AD[30F40400]                        mov     eax, [(mp3_synth_win+480h)+ebp*4]
  7036 00005044 F7EA                                    imul    edx
  7037 00005046 01D3                                    add     ebx, edx
  7038 00005048 8B14BD[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  7039 0000504F 8B04AD[30F50400]                        mov     eax, [(mp3_synth_win+580h)+ebp*4]
  7040 00005056 F7EA                                    imul    edx
  7041 00005058 01D3                                    add     ebx, edx
  7042 0000505A 8B14BD[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  7043 00005061 8B04AD[30F60400]                        mov     eax, [(mp3_synth_win+680h)+ebp*4]
  7044 00005068 F7EA                                    imul    edx
  7045 0000506A 01D3                                    add     ebx, edx
  7046 0000506C 8B14BD[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  7047 00005073 8B04AD[30F70400]                        mov     eax, [(mp3_synth_win+780h)+ebp*4]
  7048 0000507A F7EA                                    imul    edx
  7049 0000507C 01D3                                    add     ebx, edx
  7050 0000507E 81FB00002000                            cmp     ebx, 200000h
  7051 00005084 7328                                    jnb     short .sat
  7052 00005086 C1FB05                                  sar     ebx, 5
  7053 00005089 81EB00800000                            sub     ebx, 8000h
  7054                                  
  7055                                  .sat_back:
  7056 0000508F 668919                                  mov     [ecx], bx
  7057 00005092 030D[9CF40000]                          add     ecx, [mp3_samples_dst_step]
  7058 00005098 83C604                                  add     esi, 4
  7059 0000509B 83EF04                                  sub     edi, 4
  7060 0000509E 83C504                                  add     ebp, 4
  7061 000050A1 F7C51F000000                            test    ebp, 1Fh
  7062 000050A7 0F85ACFEFFFF                            jnz     .samples_lop
  7063 000050AD C3                                      retn
  7064                                  
  7065                                  .sat:
  7066 000050AE C1FB1F                                  sar     ebx, 31
  7067 000050B1 81F3FF7F0000                            xor     ebx, 7FFFh
  7068 000050B7 EBD6                                    jmp     short .sat_back
  7069                                  
  7070                                  .append_copy_to_window:
  7071 000050B9 8D3485[F89D0000]                        lea     esi, [mp3_synth_buf+eax*4]
  7072 000050C0 8DBE00080000                            lea     edi, [esi+2048]
  7073 000050C6 B912000000                              mov     ecx, 18
  7074 000050CB F3A5                                    rep movsd
  7075 000050CD E966FEFFFF                              jmp     .append_copy_to_window_back
  7076                                  
  7077                                  
  7078                                  ; =============== S U B R O U T I N E =======================================
  7079                                  
  7080                                  
  7081                                  synth_8bit_shift_0_slow:
  7082 000050D2 F605[54760000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 1,0,0
  7083 000050D9 740E                                    jz      short .no_rdtsc_supported
  7084 000050DB 0F31                                    rdtsc
  7085 000050DD 2905[CC770000]                          sub     [rdtsc_synth_dct], eax
  7086 000050E3 1915[D0770000]                          sbb     [rdtsc_synth_dct+4], edx
  7087                                  
  7088                                  .no_rdtsc_supported:
  7089 000050E9 BE[00BE0000]                            mov	esi, mp3_sb_samples
  7090 000050EE 8B3D[94F40000]                          mov	edi, [mp3_samples_dst]
  7091 000050F4 C705[A0F40000]0000-                     mov	dword [mp3_curr_channel], 0
  7091 000050FC 0000               
  7092                                  
  7093                                  .synth_channel_lop:
  7094 000050FE 56                                      push	esi
  7095 000050FF 57                                      push	edi
  7096 00005100 893D[E09D0000]                          mov	[mp3_curr_syn_dst], edi
  7097 00005106 C705[A8F40000]0000-                     mov	dword [mp3_curr_frame], 0
  7097 0000510E 0000               
  7098                                  
  7099                                  .synth_frame_lop:
  7100 00005110 56                                      push    esi
  7101 00005111 F605[54760000]10                        test    byte [cpuid_flags], 10h
  7102 00005118 740E                                    jz      short .no_rdtsc_supported@
  7103 0000511A 0F31                                    rdtsc
  7104 0000511C 2905[E4770000]                          sub     [rdtsc_dct32], eax
  7105 00005122 1915[E8770000]                          sbb     [rdtsc_dct32+4], edx
  7106                                  
  7107                                  .no_rdtsc_supported@:
  7108 00005128 8B15[A0F40000]                          mov     edx, [mp3_curr_channel]
  7109 0000512E 8B0495[F8BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  7110 00005135 832C95[F8BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  7111 0000513D C1E20A                                  shl     edx, 10
  7112 00005140 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  7113 00005145 09D0                                    or      eax, edx
  7114 00005147 A3[DC9D0000]                            mov     [mp3_curr_syn_index], eax
  7115 0000514C 8B3D[DC9D0000]                          mov     edi, [mp3_curr_syn_index]
  7116 00005152 8D3CBD[F89D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  7117 00005159 E894D4FFFF                              call    mp3_dct32_shift_0
  7118 0000515E F605[54760000]10                        test    byte [cpuid_flags], 10h
  7119 00005165 740E                                    jz      short .no_rdtsc_supported@@
  7120 00005167 0F31                                    rdtsc
  7121 00005169 0105[E4770000]                          add     [rdtsc_dct32], eax
  7122 0000516F 1115[E8770000]                          adc     [rdtsc_dct32+4], edx
  7123                                  
  7124                                  .no_rdtsc_supported@@:
  7125 00005175 F605[54760000]10                        test    byte [cpuid_flags], 10h
  7126 0000517C 740E                                    jz      short .no_rdtsc_supported@@@
  7127 0000517E 0F31                                    rdtsc
  7128 00005180 2905[FC770000]                          sub     [rdtsc_synth], eax
  7129 00005186 1915[00780000]                          sbb     [rdtsc_synth+4], edx
  7130                                  
  7131                                  .no_rdtsc_supported@@@:
  7132 0000518C E888000000                              call    mp3_synth_filter_this_8bit_shift_0_slow ;
  7133                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  7134 00005191 F605[54760000]10                        test    byte [cpuid_flags], 10h
  7135 00005198 740E                                    jz      short .no_rdtsc_supported@@@@
  7136 0000519A 0F31                                    rdtsc
  7137 0000519C 0105[FC770000]                          add     [rdtsc_synth], eax
  7138 000051A2 1115[00780000]                          adc     [rdtsc_synth+4], edx
  7139                                  
  7140                                  .no_rdtsc_supported@@@@:
  7141 000051A8 5E                                      pop     esi
  7142 000051A9 A1[9CF40000]                            mov     eax, [mp3_samples_dst_step]
  7143 000051AE C1E005                                  shl     eax, 5
  7144 000051B1 8A0D[4F760000]                          mov     cl, [option_rate_shift]
  7145 000051B7 D3E8                                    shr     eax, cl
  7146 000051B9 0105[E09D0000]                          add     [mp3_curr_syn_dst], eax
  7147 000051BF 81C680000000                            add     esi, 128        ; SBLIMIT*4
  7148 000051C5 FF05[A8F40000]                          inc     dword [mp3_curr_frame]
  7149 000051CB A1[A8F40000]                            mov     eax, [mp3_curr_frame]
  7150 000051D0 3B05[E49D0000]                          cmp     eax, [mp3_nb_frames]
  7151 000051D6 0F8234FFFFFF                            jb      .synth_frame_lop
  7152 000051DC 5F                                      pop     edi
  7153 000051DD 5E                                      pop     esi
  7154 000051DE 033D[D89D0000]                          add     edi, [mp3_bytes_per_sample]
  7155 000051E4 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  7156 000051EA FF05[A0F40000]                          inc     dword [mp3_curr_channel]
  7157 000051F0 A1[A0F40000]                            mov     eax, [mp3_curr_channel]
  7158 000051F5 3B05[D09D0000]                          cmp     eax, [mp3_output_num_channels]
  7159 000051FB 0F82FDFEFFFF                            jb      .synth_channel_lop
  7160 00005201 F605[54760000]10                        test    byte [cpuid_flags], 10h
  7161 00005208 740E                                    jz      short .no_rdtsc_supported@@@@@
  7162 0000520A 0F31                                    rdtsc
  7163 0000520C 0105[CC770000]                          add     [rdtsc_synth_dct], eax
  7164 00005212 1115[D0770000]                          adc     [rdtsc_synth_dct+4], edx
  7165                                  
  7166                                  .no_rdtsc_supported@@@@@:
  7167 00005218 C3                                      retn
  7168                                  
  7169                                  
  7170                                  ; =============== S U B R O U T I N E =======================================
  7171                                  
  7172                                  
  7173                                  mp3_synth_filter_this_8bit_shift_0_slow:
  7174 00005219 A1[DC9D0000]                            mov     eax, [mp3_curr_syn_index]
  7175 0000521E A9E0010000                              test    eax, 1E0h
  7176 00005223 0F8471010000                            jz      .append_copy_to_window
  7177 00005229 90                                      nop
  7178                                  
  7179                                  .append_copy_to_window_back:
  7180 0000522A 89C5                                    mov     ebp, eax
  7181 0000522C 81E5C0010000                            and     ebp, 1C0h
  7182 00005232 2520040000                              and     eax, 420h
  7183 00005237 8D7010                                  lea     esi, [eax+10h]
  7184 0000523A 8D7830                                  lea     edi, [eax+30h]
  7185 0000523D F7DD                                    neg     ebp
  7186 0000523F 81E5C0010000                            and     ebp, 1C0h
  7187 00005245 8B0D[E09D0000]                          mov     ecx, [mp3_curr_syn_dst]
  7188                                  
  7189                                  .samples_lop:
  7190 0000524B BB00101000                              mov     ebx, 101000h
  7191 00005250 8B14B5[F89D0000]                        mov     edx, [mp3_synth_buf+esi*4]
  7192 00005257 8B04AD[B0EF0400]                        mov     eax, [mp3_synth_win+ebp*4]
  7193 0000525E F7EA                                    imul    edx
  7194 00005260 01D3                                    add     ebx, edx
  7195 00005262 8B14B5[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  7196 00005269 8B04AD[B0F00400]                        mov     eax, [(mp3_synth_win+100h)+ebp*4]
  7197 00005270 F7EA                                    imul    edx
  7198 00005272 01D3                                    add     ebx, edx
  7199 00005274 8B14B5[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  7200 0000527B 8B04AD[B0F10400]                        mov     eax, [(mp3_synth_win+200h)+ebp*4]
  7201 00005282 F7EA                                    imul    edx
  7202 00005284 01D3                                    add     ebx, edx
  7203 00005286 8B14B5[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  7204 0000528D 8B04AD[B0F20400]                        mov     eax, [(mp3_synth_win+300h)+ebp*4]
  7205 00005294 F7EA                                    imul    edx
  7206 00005296 01D3                                    add     ebx, edx
  7207 00005298 8B14B5[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  7208 0000529F 8B04AD[B0F30400]                        mov     eax, [(mp3_synth_win+400h)+ebp*4]
  7209 000052A6 F7EA                                    imul    edx
  7210 000052A8 01D3                                    add     ebx, edx
  7211 000052AA 8B14B5[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  7212 000052B1 8B04AD[B0F40400]                        mov     eax, [(mp3_synth_win+500h)+ebp*4]
  7213 000052B8 F7EA                                    imul    edx
  7214 000052BA 01D3                                    add     ebx, edx
  7215 000052BC 8B14B5[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  7216 000052C3 8B04AD[B0F50400]                        mov     eax, [(mp3_synth_win+600h)+ebp*4]
  7217 000052CA F7EA                                    imul    edx
  7218 000052CC 01D3                                    add     ebx, edx
  7219 000052CE 8B14B5[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  7220 000052D5 8B04AD[B0F60400]                        mov     eax, [(mp3_synth_win+700h)+ebp*4]
  7221 000052DC F7EA                                    imul    edx
  7222 000052DE 01D3                                    add     ebx, edx
  7223 000052E0 8B14BD[F89D0000]                        mov     edx, [mp3_synth_buf+edi*4]
  7224 000052E7 8B04AD[30F00400]                        mov     eax, [(mp3_synth_win+80h)+ebp*4]
  7225 000052EE F7EA                                    imul    edx
  7226 000052F0 01D3                                    add     ebx, edx
  7227 000052F2 8B14BD[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  7228 000052F9 8B04AD[30F10400]                        mov     eax, [(mp3_synth_win+180h)+ebp*4]
  7229 00005300 F7EA                                    imul    edx
  7230 00005302 01D3                                    add     ebx, edx
  7231 00005304 8B14BD[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  7232 0000530B 8B04AD[30F20400]                        mov     eax, [(mp3_synth_win+280h)+ebp*4]
  7233 00005312 F7EA                                    imul    edx
  7234 00005314 01D3                                    add     ebx, edx
  7235 00005316 8B14BD[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  7236 0000531D 8B04AD[30F30400]                        mov     eax, [(mp3_synth_win+380h)+ebp*4]
  7237 00005324 F7EA                                    imul    edx
  7238 00005326 01D3                                    add     ebx, edx
  7239 00005328 8B14BD[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  7240 0000532F 8B04AD[30F40400]                        mov     eax, [(mp3_synth_win+480h)+ebp*4]
  7241 00005336 F7EA                                    imul    edx
  7242 00005338 01D3                                    add     ebx, edx
  7243 0000533A 8B14BD[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  7244 00005341 8B04AD[30F50400]                        mov     eax, [(mp3_synth_win+580h)+ebp*4]
  7245 00005348 F7EA                                    imul    edx
  7246 0000534A 01D3                                    add     ebx, edx
  7247 0000534C 8B14BD[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  7248 00005353 8B04AD[30F60400]                        mov     eax, [(mp3_synth_win+680h)+ebp*4]
  7249 0000535A F7EA                                    imul    edx
  7250 0000535C 01D3                                    add     ebx, edx
  7251 0000535E 8B14BD[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  7252 00005365 8B04AD[30F70400]                        mov     eax, [(mp3_synth_win+780h)+ebp*4]
  7253 0000536C F7EA                                    imul    edx
  7254 0000536E 01D3                                    add     ebx, edx
  7255 00005370 81FB00002000                            cmp     ebx, 200000h
  7256 00005376 731B                                    jnb     short .sat
  7257 00005378 C1FB0D                                  sar     ebx, 13
  7258                                  
  7259                                  .sat_back:
  7260 0000537B 8819                                    mov     [ecx], bl
  7261 0000537D 030D[9CF40000]                          add     ecx, [mp3_samples_dst_step]
  7262 00005383 46                                      inc     esi
  7263 00005384 4F                                      dec     edi
  7264 00005385 45                                      inc     ebp
  7265 00005386 F7C51F000000                            test    ebp, 1Fh
  7266 0000538C 0F85B9FEFFFF                            jnz     .samples_lop
  7267 00005392 C3                                      retn
  7268                                  
  7269                                  .sat:
  7270 00005393 C1FB1F                                  sar     ebx, 31
  7271 00005396 F7D3                                    not     ebx
  7272 00005398 EBE1                                    jmp     short .sat_back
  7273                                  
  7274                                  .append_copy_to_window:
  7275 0000539A 8D3485[F89D0000]                        lea     esi, [mp3_synth_buf+eax*4]
  7276 000053A1 8DBE00080000                            lea     edi, [esi+2048]
  7277 000053A7 B912000000                              mov     ecx, 18
  7278 000053AC F3A5                                    rep movsd
  7279 000053AE E977FEFFFF                              jmp     .append_copy_to_window_back
  7280                                  
  7281                                  
  7282                                  ; =============== S U B R O U T I N E =======================================
  7283                                  
  7284                                  
  7285                                  synth_8bit_shift_1_slow:
  7286 000053B3 F605[54760000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 1,1,0
  7287                                                                          ; force_8bit, rate_shift=1, force_fast=0
  7288 000053BA 740E                                    jz      short .no_rdtsc_supported
  7289 000053BC 0F31                                    rdtsc
  7290 000053BE 2905[CC770000]                          sub     [rdtsc_synth_dct], eax
  7291 000053C4 1915[D0770000]                          sbb     [rdtsc_synth_dct+4], edx
  7292                                  
  7293                                  .no_rdtsc_supported:
  7294 000053CA BE[00BE0000]                            mov	esi, mp3_sb_samples
  7295 000053CF 8B3D[94F40000]                          mov	edi, [mp3_samples_dst]
  7296 000053D5 C705[A0F40000]0000-                     mov	dword [mp3_curr_channel], 0
  7296 000053DD 0000               
  7297                                  
  7298                                  .synth_channel_lop:
  7299 000053DF 56                                      push	esi
  7300 000053E0 57                                      push	edi
  7301 000053E1 893D[E09D0000]                          mov	[mp3_curr_syn_dst], edi
  7302 000053E7 C705[A8F40000]0000-                     mov	dword [mp3_curr_frame], 0
  7302 000053EF 0000               
  7303                                  
  7304                                  .synth_frame_lop:
  7305 000053F1 56                                      push    esi
  7306 000053F2 F605[54760000]10                        test    byte [cpuid_flags], 10h
  7307 000053F9 740E                                    jz      short .no_rdtsc_supported@
  7308 000053FB 0F31                                    rdtsc
  7309 000053FD 2905[E4770000]                          sub     [rdtsc_dct32], eax
  7310 00005403 1915[E8770000]                          sbb     [rdtsc_dct32+4], edx
  7311                                  
  7312                                  .no_rdtsc_supported@:
  7313 00005409 8B15[A0F40000]                          mov     edx, [mp3_curr_channel]
  7314 0000540F 8B0495[F8BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  7315 00005416 832C95[F8BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  7316 0000541E C1E20A                                  shl     edx, 10
  7317 00005421 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  7318 00005426 09D0                                    or      eax, edx
  7319 00005428 A3[DC9D0000]                            mov     [mp3_curr_syn_index], eax
  7320 0000542D 8B3D[DC9D0000]                          mov     edi, [mp3_curr_syn_index]
  7321 00005433 8D3CBD[F89D0000]                        lea     edi, [mp3_synth_buf+edi*4]
  7322 0000543A E893DAFFFF                              call    mp3_dct32_shift_1 ; mp3_dct32_shift_&rate_shift ; rate_shift = 1
  7323 0000543F F605[54760000]10                        test    byte [cpuid_flags], 10h
  7324 00005446 740E                                    jz      short .no_rdtsc_supported@@
  7325 00005448 0F31                                    rdtsc
  7326 0000544A 0105[E4770000]                          add     [rdtsc_dct32], eax
  7327 00005450 1115[E8770000]                          adc     [rdtsc_dct32+4], edx
  7328                                  
  7329                                  .no_rdtsc_supported@@:
  7330 00005456 F605[54760000]10                        test    byte [cpuid_flags], 10h
  7331 0000545D 740E                                    jz      short .no_rdtsc_supported@@@
  7332 0000545F 0F31                                    rdtsc
  7333 00005461 2905[FC770000]                          sub     [rdtsc_synth], eax
  7334 00005467 1915[00780000]                          sbb     [rdtsc_synth+4], edx
  7335                                  
  7336                                  .no_rdtsc_supported@@@:
  7337 0000546D E888000000                              call    mp3_synth_filter_this_8bit_shift_1_slow ;
  7338                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  7339 00005472 F605[54760000]10                        test    byte [cpuid_flags], 10h
  7340 00005479 740E                                    jz      short .no_rdtsc_supported@@@@
  7341 0000547B 0F31                                    rdtsc
  7342 0000547D 0105[FC770000]                          add     [rdtsc_synth], eax
  7343 00005483 1115[00780000]                          adc     [rdtsc_synth+4], edx
  7344                                  
  7345                                  .no_rdtsc_supported@@@@:
  7346 00005489 5E                                      pop     esi
  7347 0000548A A1[9CF40000]                            mov     eax, [mp3_samples_dst_step]
  7348 0000548F C1E005                                  shl     eax, 5          ; mul32
  7349 00005492 8A0D[4F760000]                          mov     cl, [option_rate_shift]
  7350 00005498 D3E8                                    shr     eax, cl
  7351 0000549A 0105[E09D0000]                          add     [mp3_curr_syn_dst], eax
  7352 000054A0 81C680000000                            add     esi, 128        ; SBLIMIT*4
  7353 000054A6 FF05[A8F40000]                          inc	dword [mp3_curr_frame]
  7354 000054AC A1[A8F40000]                            mov     eax, [mp3_curr_frame]
  7355 000054B1 3B05[E49D0000]                          cmp     eax, [mp3_nb_frames]
  7356 000054B7 0F8234FFFFFF                            jb      .synth_frame_lop
  7357 000054BD 5F                                      pop     edi
  7358 000054BE 5E                                      pop     esi
  7359 000054BF 033D[D89D0000]                          add     edi, [mp3_bytes_per_sample]
  7360 000054C5 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  7361 000054CB FF05[A0F40000]                          inc	dword [mp3_curr_channel]
  7362 000054D1 A1[A0F40000]                            mov     eax, [mp3_curr_channel]
  7363 000054D6 3B05[D09D0000]                          cmp     eax, [mp3_output_num_channels]
  7364 000054DC 0F82FDFEFFFF                            jb      .synth_channel_lop
  7365 000054E2 F605[54760000]10                        test    byte [cpuid_flags], 10h
  7366 000054E9 740E                                    jz      short .no_rdtsc_supported@@@@@
  7367 000054EB 0F31                                    rdtsc
  7368 000054ED 0105[CC770000]                          add     [rdtsc_synth_dct], eax
  7369 000054F3 1115[D0770000]                          adc     [rdtsc_synth_dct+4], edx
  7370                                  
  7371                                  .no_rdtsc_supported@@@@@:
  7372 000054F9 C3                                      retn
  7373                                  
  7374                                  
  7375                                  ; =============== S U B R O U T I N E =======================================
  7376                                  
  7377                                  
  7378                                  mp3_synth_filter_this_8bit_shift_1_slow:
  7379 000054FA A1[DC9D0000]                            mov     eax, [mp3_curr_syn_index] ; IF LONG_WINDOW
  7380 000054FF A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh
  7381 00005504 0F8477010000                            jz      .append_copy_to_window
  7382 0000550A 90                                      nop
  7383                                  
  7384                                  .append_copy_to_window_back:
  7385 0000550B 89C5                                    mov     ebp, eax
  7386 0000550D 81E5C0010000                            and     ebp, 1C0h       ; 1FFh-1Fh-20h
  7387 00005513 2520040000                              and     eax, 420h       ; 20h+(1 shl 10)
  7388 00005518 8D7010                                  lea     esi, [eax+10h]
  7389 0000551B 8D7830                                  lea     edi, [eax+30h]
  7390 0000551E F7DD                                    neg     ebp
  7391 00005520 81E5C0010000                            and     ebp, 1C0h
  7392 00005526 8B0D[E09D0000]                          mov     ecx, [mp3_curr_syn_dst]
  7393                                  
  7394                                  .samples_lop:
  7395 0000552C BB00101000                              mov     ebx, 101000h    ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  7396                                                                          ; @@out_shift equ (OUT_SHIFT_slow+(8*force_8bit))
  7397                                                                          ; OUT_SHIFT_slow = 5 ; @@out_shift = 13
  7398 00005531 8B14B5[F89D0000]                        mov     edx, [mp3_synth_buf+esi*4] ; @@SUM8 @@sum,@@win1,0,@@syn1
  7399                                                                          ; @@SUM8 macro sum,win,ww,syn
  7400                                                                          ;   IRP nn,0,1,2,3,4,5,6,7
  7401 00005538 8B04AD[B0EF0400]                        mov     eax, [mp3_synth_win+ebp*4]
  7402 0000553F F7EA                                    imul    edx
  7403 00005541 01D3                                    add     ebx, edx
  7404 00005543 8B14B5[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4] ; @@syn1 equ esi
  7405 0000554A 8B04AD[B0F00400]                        mov     eax, [(mp3_synth_win+100h)+ebp*4] ; @@win1 equ ebp
  7406 00005551 F7EA                                    imul    edx
  7407 00005553 01D3                                    add     ebx, edx
  7408 00005555 8B14B5[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  7409 0000555C 8B04AD[B0F10400]                        mov     eax, [(mp3_synth_win+200h)+ebp*4]
  7410 00005563 F7EA                                    imul    edx
  7411 00005565 01D3                                    add     ebx, edx
  7412 00005567 8B14B5[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  7413 0000556E 8B04AD[B0F20400]                        mov     eax, [(mp3_synth_win+300h)+ebp*4]
  7414 00005575 F7EA                                    imul    edx
  7415 00005577 01D3                                    add     ebx, edx
  7416 00005579 8B14B5[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  7417 00005580 8B04AD[B0F30400]                        mov     eax, [(mp3_synth_win+400h)+ebp*4]
  7418 00005587 F7EA                                    imul    edx
  7419 00005589 01D3                                    add     ebx, edx
  7420 0000558B 8B14B5[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  7421 00005592 8B04AD[B0F40400]                        mov     eax, [(mp3_synth_win+500h)+ebp*4]
  7422 00005599 F7EA                                    imul    edx
  7423 0000559B 01D3                                    add     ebx, edx
  7424 0000559D 8B14B5[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  7425 000055A4 8B04AD[B0F50400]                        mov     eax, [(mp3_synth_win+600h)+ebp*4]
  7426 000055AB F7EA                                    imul    edx
  7427 000055AD 01D3                                    add     ebx, edx
  7428 000055AF 8B14B5[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  7429 000055B6 8B04AD[B0F60400]                        mov     eax, [(mp3_synth_win+700h)+ebp*4]
  7430 000055BD F7EA                                    imul    edx
  7431 000055BF 01D3                                    add     ebx, edx
  7432 000055C1 8B14BD[F89D0000]                        mov     edx, [mp3_synth_buf+edi*4]
  7433 000055C8 8B04AD[30F00400]                        mov     eax, [(mp3_synth_win+80h)+ebp*4]
  7434 000055CF F7EA                                    imul    edx
  7435 000055D1 01D3                                    add     ebx, edx
  7436 000055D3 8B14BD[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4] ; @@SUM8 @@sum,@@win1,32,@@syn2
  7437                                                                          ; @@syn2 equ edi
  7438                                                                          ; @@win1 equ ebp
  7439 000055DA 8B04AD[30F10400]                        mov     eax, [(mp3_synth_win+180h)+ebp*4]
  7440 000055E1 F7EA                                    imul    edx
  7441 000055E3 01D3                                    add     ebx, edx
  7442 000055E5 8B14BD[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  7443 000055EC 8B04AD[30F20400]                        mov     eax, [(mp3_synth_win+280h)+ebp*4]
  7444 000055F3 F7EA                                    imul    edx
  7445 000055F5 01D3                                    add     ebx, edx
  7446 000055F7 8B14BD[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  7447 000055FE 8B04AD[30F30400]                        mov     eax, [(mp3_synth_win+380h)+ebp*4]
  7448 00005605 F7EA                                    imul    edx
  7449 00005607 01D3                                    add     ebx, edx
  7450 00005609 8B14BD[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  7451 00005610 8B04AD[30F40400]                        mov     eax, [(mp3_synth_win+480h)+ebp*4]
  7452 00005617 F7EA                                    imul    edx
  7453 00005619 01D3                                    add     ebx, edx
  7454 0000561B 8B14BD[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  7455 00005622 8B04AD[30F50400]                        mov     eax, [(mp3_synth_win+580h)+ebp*4]
  7456 00005629 F7EA                                    imul    edx
  7457 0000562B 01D3                                    add     ebx, edx
  7458 0000562D 8B14BD[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  7459 00005634 8B04AD[30F60400]                        mov     eax, [(mp3_synth_win+680h)+ebp*4]
  7460 0000563B F7EA                                    imul    edx
  7461 0000563D 01D3                                    add     ebx, edx
  7462 0000563F 8B14BD[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  7463 00005646 8B04AD[30F70400]                        mov     eax, [(mp3_synth_win+780h)+ebp*4]
  7464 0000564D F7EA                                    imul    edx
  7465 0000564F 01D3                                    add     ebx, edx
  7466 00005651 81FB00002000                            cmp     ebx, 200000h    ; cmp @@sum,100h SHL (@@out_shift)
  7467 00005657 7321                                    jnb     short .sat
  7468 00005659 C1FB0D                                  sar     ebx, 13         ; sar @@sum,(@@out_shift)
  7469                                  
  7470                                  .sat_back:
  7471 0000565C 8819                                    mov     [ecx], bl
  7472 0000565E 030D[9CF40000]                          add     ecx, [mp3_samples_dst_step]
  7473 00005664 83C602                                  add     esi, 2
  7474 00005667 83EF02                                  sub     edi, 2
  7475 0000566A 83C502                                  add     ebp, 2
  7476 0000566D F7C51F000000                            test    ebp, 1Fh
  7477 00005673 0F85B3FEFFFF                            jnz     .samples_lop
  7478 00005679 C3                                      retn
  7479                                  
  7480                                  .sat:
  7481 0000567A C1FB1F                                  sar     ebx, 31         ; sar @@sum,31 ; FFFFFFFFh,00000000h
  7482 0000567D F7D3                                    not     ebx
  7483 0000567F EBDB                                    jmp     short .sat_back
  7484                                  
  7485                                  .append_copy_to_window:
  7486 00005681 8D3485[F89D0000]                        lea     esi, [mp3_synth_buf+eax*4]
  7487 00005688 8DBE00080000                            lea     edi, [esi+2048]
  7488 0000568E B912000000                              mov     ecx, 18
  7489 00005693 F3A5                                    rep movsd
  7490 00005695 E971FEFFFF                              jmp     .append_copy_to_window_back
  7491                                  
  7492                                  
  7493                                  ; =============== S U B R O U T I N E =======================================
  7494                                  
  7495                                  
  7496                                  synth_8bit_shift_2_slow:
  7497 0000569A F605[54760000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 1,2,0 ; 8bit, quarter rate
  7498                                                                          ; force_8bit, rate_shift=2, force_fast=0
  7499 000056A1 740E                                    jz      short .no_rdtsc_supported ; timelog_start rdtsc_synth_dct
  7500 000056A3 0F31                                    rdtsc
  7501 000056A5 2905[CC770000]                          sub     [rdtsc_synth_dct], eax
  7502 000056AB 1915[D0770000]                          sbb     [rdtsc_synth_dct+4], edx
  7503                                  
  7504                                  .no_rdtsc_supported:
  7505 000056B1 BE[00BE0000]                            mov	esi, mp3_sb_samples
  7506 000056B6 8B3D[94F40000]                          mov	edi, [mp3_samples_dst]
  7507 000056BC C705[A0F40000]0000-                     mov	dword [mp3_curr_channel], 0
  7507 000056C4 0000               
  7508                                  
  7509                                  .synth_channel_lop:
  7510 000056C6 56                                      push	esi
  7511 000056C7 57                                      push	edi
  7512 000056C8 893D[E09D0000]                          mov	[mp3_curr_syn_dst], edi
  7513 000056CE C705[A8F40000]0000-                     mov	dword [mp3_curr_frame], 0
  7513 000056D6 0000               
  7514                                  
  7515                                  .synth_frame_lop:
  7516 000056D8 56                                      push    esi             ; sb_samples[ch][i]
  7517 000056D9 F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_dct32
  7518 000056E0 740E                                    jz      short .no_rdtsc_supported@
  7519 000056E2 0F31                                    rdtsc
  7520 000056E4 2905[E4770000]                          sub     [rdtsc_dct32], eax
  7521 000056EA 1915[E8770000]                          sbb     [rdtsc_dct32+4], edx
  7522                                  
  7523                                  .no_rdtsc_supported@:
  7524 000056F0 8B15[A0F40000]                          mov     edx, [mp3_curr_channel]
  7525 000056F6 8B0495[F8BD0000]                        mov     eax, [mp3_synth_index+edx*4]
  7526 000056FD 832C95[F8BD0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  7527 00005705 C1E20A                                  shl     edx, 10         ; channel*1024
  7528 00005708 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh ; index(0..511), align 32
  7529 0000570D 09D0                                    or      eax, edx
  7530 0000570F A3[DC9D0000]                            mov     [mp3_curr_syn_index], eax
  7531 00005714 8B3D[DC9D0000]                          mov     edi, [mp3_curr_syn_index]
  7532 0000571A 8D3CBD[F89D0000]                        lea     edi, [mp3_synth_buf+edi*4] ; IF SYNTH32
  7533 00005721 E89CDBFFFF                              call    mp3_dct32_shift_2 ; mp3_dct32_shift_&rate_shift ; rate_shift=2
  7534 00005726 F605[54760000]10                        test    byte [cpuid_flags], 10h
  7535 0000572D 740E                                    jz      short .no_rdtsc_supported@@ ; timelog_end rdtsc_dct32
  7536 0000572F 0F31                                    rdtsc
  7537 00005731 0105[E4770000]                          add     [rdtsc_dct32], eax
  7538 00005737 1115[E8770000]                          adc     [rdtsc_dct32+4], edx
  7539                                  
  7540                                  .no_rdtsc_supported@@:
  7541 0000573D F605[54760000]10                        test    byte [cpuid_flags], 10h
  7542 00005744 740E                                    jz      short .no_rdtsc_supported@@@ ; timelog_start rdtsc_synth
  7543 00005746 0F31                                    rdtsc
  7544 00005748 2905[FC770000]                          sub     [rdtsc_synth], eax
  7545 0000574E 1915[00780000]                          sbb     [rdtsc_synth+4], edx
  7546                                  
  7547                                  .no_rdtsc_supported@@@:
  7548 00005754 E888000000                              call    mp3_synth_filter_this_8bit_shift_2_slow ;
  7549                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  7550 00005759 F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_synth
  7551 00005760 740E                                    jz      short .no_rdtsc_supported@@@@
  7552 00005762 0F31                                    rdtsc
  7553 00005764 0105[FC770000]                          add     [rdtsc_synth], eax
  7554 0000576A 1115[00780000]                          adc     [rdtsc_synth+4], edx
  7555                                  
  7556                                  .no_rdtsc_supported@@@@:
  7557 00005770 5E                                      pop     esi             ; src
  7558 00005771 A1[9CF40000]                            mov     eax, [mp3_samples_dst_step]
  7559 00005776 C1E005                                  shl     eax, 5          ; mul32
  7560 00005779 8A0D[4F760000]                          mov     cl, [option_rate_shift] ; IF with_rate_shift
  7561 0000577F D3E8                                    shr     eax, cl
  7562 00005781 0105[E09D0000]                          add     [mp3_curr_syn_dst], eax
  7563 00005787 81C680000000                            add     esi, 128        ; SBLIMIT*4 ; src+32*4
  7564 0000578D FF05[A8F40000]                          inc     dword [mp3_curr_frame]
  7565 00005793 A1[A8F40000]                            mov     eax, [mp3_curr_frame]
  7566 00005798 3B05[E49D0000]                          cmp     eax, [mp3_nb_frames]
  7567 0000579E 0F8234FFFFFF                            jb      .synth_frame_lop
  7568 000057A4 5F                                      pop     edi
  7569 000057A5 5E                                      pop     esi
  7570 000057A6 033D[D89D0000]                          add     edi, [mp3_bytes_per_sample]
  7571 000057AC 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4 ; src
  7572 000057B2 FF05[A0F40000]                          inc     dword [mp3_curr_channel]
  7573 000057B8 A1[A0F40000]                            mov     eax, [mp3_curr_channel]
  7574 000057BD 3B05[D09D0000]                          cmp     eax, [mp3_output_num_channels]
  7575 000057C3 0F82FDFEFFFF                            jb      .synth_channel_lop
  7576 000057C9 F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_synth_dct
  7577 000057D0 740E                                    jz      short .no_rdtsc_supported@@@@@
  7578 000057D2 0F31                                    rdtsc
  7579 000057D4 0105[CC770000]                          add     [rdtsc_synth_dct], eax
  7580 000057DA 1115[D0770000]                          adc     [rdtsc_synth_dct+4], edx
  7581                                  
  7582                                  .no_rdtsc_supported@@@@@:
  7583 000057E0 C3                                      retn
  7584                                  
  7585                                  ; =============== S U B R O U T I N E =======================================
  7586                                  
  7587                                  
  7588                                  mp3_synth_filter_this_8bit_shift_2_slow:
  7589 000057E1 A1[DC9D0000]                            mov     eax, [mp3_curr_syn_index]
  7590 000057E6 A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh ; offset
  7591 000057EB 0F8477010000                            jz      .append_copy_to_window
  7592 000057F1 90                                      nop
  7593                                  
  7594                                  .append_copy_to_window_back:
  7595 000057F2 89C5                                    mov     ebp, eax        ; @@win1
  7596 000057F4 81E5C0010000                            and     ebp, 1C0h       ; 1FFh-1Fh-20h
  7597 000057FA 2520040000                              and     eax, 420h       ; 20h+(1 shl 10) ; bit5 and channel
  7598 000057FF 8D7010                                  lea     esi, [eax+10h]  ; @@syn1
  7599 00005802 8D7830                                  lea     edi, [eax+30h]  ; @@syn2
  7600 00005805 F7DD                                    neg     ebp
  7601 00005807 81E5C0010000                            and     ebp, 1C0h       ; 1FFh-1Fh-20h
  7602 0000580D 8B0D[E09D0000]                          mov     ecx, [mp3_curr_syn_dst] ; @@dst
  7603                                  
  7604                                  .samples_lop:
  7605 00005813 BB00101000                              mov     ebx, 101000h    ; mov @@sum,(80h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  7606                                                                          ; @@out_shift equ (OUT_SHIFT_slow+(8*force_8bit))
  7607                                                                          ; @@out_shift = 13 ; OUT_SHIFT_slow = 5
  7608 00005818 8B14B5[F89D0000]                        mov     edx, [mp3_synth_buf+esi*4] ; @@SUM8 @@sum,@@win1,0,@@syn1
  7609                                                                          ; @@SUM8 macro sum,win,ww, syn
  7610                                                                          ; IRP nn,0,1,2,3,4,5,6,7
  7611                                                                          ; [mp3_synth_buf+syn*4+(nn*64*4)]
  7612 0000581F 8B04AD[B0EF0400]                        mov     eax, [mp3_synth_win+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4]
  7613 00005826 F7EA                                    imul    edx             ; 64bit = 32bit * 32bit
  7614 00005828 01D3                                    add     ebx, edx        ; add sum,edx ; sum from MSW of result
  7615 0000582A 8B14B5[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4] ;
  7616                                                                          ; [mp3_synth_buf+syn*4+(nn*64*4)] ; nn=1
  7617 00005831 8B04AD[B0F00400]                        mov     eax, [(mp3_synth_win+100h)+ebp*4] ;
  7618                                                                          ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] ; nn=1
  7619 00005838 F7EA                                    imul    edx
  7620 0000583A 01D3                                    add     ebx, edx
  7621 0000583C 8B14B5[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  7622 00005843 8B04AD[B0F10400]                        mov     eax, [(mp3_synth_win+200h)+ebp*4]
  7623 0000584A F7EA                                    imul    edx
  7624 0000584C 01D3                                    add     ebx, edx
  7625 0000584E 8B14B5[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  7626 00005855 8B04AD[B0F20400]                        mov     eax, [(mp3_synth_win+300h)+ebp*4]
  7627 0000585C F7EA                                    imul    edx
  7628 0000585E 01D3                                    add     ebx, edx
  7629 00005860 8B14B5[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4] ;
  7630                                                                          ; [mp3_synth_buf+syn*4+(nn*64*4)] ; nn=4
  7631 00005867 8B04AD[B0F30400]                        mov     eax, [(mp3_synth_win+400h)+ebp*4] ;
  7632                                                                          ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] ; nn=4
  7633 0000586E F7EA                                    imul    edx
  7634 00005870 01D3                                    add     ebx, edx
  7635 00005872 8B14B5[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  7636 00005879 8B04AD[B0F40400]                        mov     eax, [(mp3_synth_win+500h)+ebp*4]
  7637 00005880 F7EA                                    imul    edx
  7638 00005882 01D3                                    add     ebx, edx
  7639 00005884 8B14B5[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  7640 0000588B 8B04AD[B0F50400]                        mov     eax, [(mp3_synth_win+600h)+ebp*4]
  7641 00005892 F7EA                                    imul    edx
  7642 00005894 01D3                                    add     ebx, edx
  7643 00005896 8B14B5[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  7644 0000589D 8B04AD[B0F60400]                        mov     eax, [(mp3_synth_win+700h)+ebp*4]
  7645 000058A4 F7EA                                    imul    edx
  7646 000058A6 01D3                                    add     ebx, edx
  7647 000058A8 8B14BD[F89D0000]                        mov     edx, [mp3_synth_buf+edi*4] ; @@SUM8 @@sum,@@win1,32,@@syn2
  7648 000058AF 8B04AD[30F00400]                        mov     eax, [(mp3_synth_win+80h)+ebp*4]
  7649 000058B6 F7EA                                    imul    edx
  7650 000058B8 01D3                                    add     ebx, edx
  7651 000058BA 8B14BD[F89E0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  7652 000058C1 8B04AD[30F10400]                        mov     eax, [(mp3_synth_win+180h)+ebp*4]
  7653 000058C8 F7EA                                    imul    edx
  7654 000058CA 01D3                                    add     ebx, edx
  7655 000058CC 8B14BD[F89F0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  7656 000058D3 8B04AD[30F20400]                        mov     eax, [(mp3_synth_win+280h)+ebp*4]
  7657 000058DA F7EA                                    imul    edx
  7658 000058DC 01D3                                    add     ebx, edx
  7659 000058DE 8B14BD[F8A00000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  7660 000058E5 8B04AD[30F30400]                        mov     eax, [(mp3_synth_win+380h)+ebp*4]
  7661 000058EC F7EA                                    imul    edx
  7662 000058EE 01D3                                    add     ebx, edx
  7663 000058F0 8B14BD[F8A10000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  7664 000058F7 8B04AD[30F40400]                        mov     eax, [(mp3_synth_win+480h)+ebp*4]
  7665 000058FE F7EA                                    imul    edx
  7666 00005900 01D3                                    add     ebx, edx
  7667 00005902 8B14BD[F8A20000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  7668 00005909 8B04AD[30F50400]                        mov     eax, [(mp3_synth_win+580h)+ebp*4]
  7669 00005910 F7EA                                    imul    edx
  7670 00005912 01D3                                    add     ebx, edx
  7671 00005914 8B14BD[F8A30000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  7672 0000591B 8B04AD[30F60400]                        mov     eax, [(mp3_synth_win+680h)+ebp*4]
  7673 00005922 F7EA                                    imul    edx
  7674 00005924 01D3                                    add     ebx, edx
  7675 00005926 8B14BD[F8A40000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  7676                                                                          ; [mp3_synth_buf+syn*4+(nn*64*4)] ; nn=7
  7677 0000592D 8B04AD[30F70400]                        mov     eax, [(mp3_synth_win+780h)+ebp*4]
  7678                                                                          ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] ; nn=7
  7679 00005934 F7EA                                    imul    edx
  7680 00005936 01D3                                    add     ebx, edx
  7681 00005938 81FB00002000                            cmp     ebx, 200000h    ; cmp @@sum,100h SHL (@@out_shift) ; out_shift=13
  7682 0000593E 7321                                    jnb     short .sat
  7683 00005940 C1FB0D                                  sar     ebx, 13         ; sar @@sum,(@@out_shift)
  7684                                  
  7685                                  .sat_back:
  7686 00005943 8819                                    mov     [ecx], bl       ; mov byte ptr [@@dst],@@sum_8bit
  7687 00005945 030D[9CF40000]                          add     ecx, [mp3_samples_dst_step]
  7688 0000594B 83C604                                  add     esi, 4          ; add @@syn1,1 shl rate_shift ; rate_shift=2
  7689 0000594E 83EF04                                  sub     edi, 4          ; add @@syn2,1 shl rate_shift
  7690 00005951 83C504                                  add     ebp, 4          ; add @@win1,1 shl rate_shift
  7691 00005954 F7C51F000000                            test    ebp, 1Fh        ; test @@win1,1Fh
  7692 0000595A 0F85B3FEFFFF                            jnz     .samples_lop
  7693 00005960 C3                                      retn
  7694                                  
  7695                                  .sat:
  7696 00005961 C1FB1F                                  sar     ebx, 31         ; sar  @@sum,31 ; FFFFFFFFh,00000000h
  7697 00005964 F7D3                                    not     ebx
  7698 00005966 EBDB                                    jmp     short .sat_back
  7699                                  
  7700                                  .append_copy_to_window:
  7701 00005968 8D3485[F89D0000]                        lea     esi, [mp3_synth_buf+eax*4] ; IF SYNTH32
  7702 0000596F 8DBE00080000                            lea     edi, [esi+2048] ; [esi+512*4]
  7703 00005975 B912000000                              mov     ecx, 18         ; (12h*4)/4
  7704 0000597A F3A5                                    rep movsd
  7705 0000597C E971FEFFFF                              jmp     .append_copy_to_window_back
  7706                                  
  7707                                  
  7708                                  ; =============== S U B R O U T I N E =======================================
  7709                                  
  7710                                  
  7711                                  mp3_any_init_synth_window:
  7712 00005981 31D2                                    xor     edx, edx        ; index (0..100h)
  7713 00005983 31C9                                    xor     ecx, ecx        ; delta.val
  7714 00005985 898C12[B0EF0400]                        mov     [mp3_synth_win+edx*2], ecx
  7715                                  
  7716                                  .synth_lop:
  7717 0000598C 0FBF9C12[A2780000]                      movsx   ebx, word [mp3_synth_win_src+edx*2]
  7718 00005994 01D9                                    add     ecx, ebx
  7719 00005996 89C8                                    mov     eax, ecx
  7720 00005998 803D[50760000]00                        cmp     byte [option_fast], 0
  7721 0000599F 7403                                    jz      short .not_fast
  7722 000059A1 C1F805                                  sar     eax, 5
  7723                                  
  7724                                  .not_fast:
  7725 000059A4 803D[50760000]00                        cmp	byte [option_fast], 0
  7726 000059AB 7503                                    jnz	short .not_slow
  7727 000059AD C1E00E                                  shl	eax, 14         ; (WFRAC_BITS_slow-WFRAC_BITS_default)
  7728                                  
  7729                                  .not_slow:
  7730 000059B0 42                                      inc     edx             ; index (1..100h)
  7731 000059B1 BB00020000                              mov     ebx, 200h
  7732 000059B6 29D3                                    sub     ebx, edx        ; 1FFh..100h
  7733 000059B8 89049D[B0EF0400]                        mov     [mp3_synth_win+ebx*4], eax
  7734 000059BF F7C23F000000                            test    edx, 3Fh
  7735 000059C5 7402                                    jz      short .synth_keep_sign
  7736 000059C7 F7D8                                    neg     eax
  7737                                  
  7738                                  .synth_keep_sign:
  7739 000059C9 890495[B0EF0400]                        mov     [mp3_synth_win+edx*4], eax
  7740 000059D0 81FA00010000                            cmp     edx, 100h
  7741 000059D6 72B4                                    jb      short .synth_lop
  7742 000059D8 31D2                                    xor     edx, edx
  7743                                  
  7744                                  .synth_neg_lop:
  7745 000059DA F7C230000000                            test    edx, 30h        ; skip 0..0Fh (only negate 10h..3Fh)
  7746 000059E0 7407                                    jz      short .synth_neg_next
  7747 000059E2 F71C95[B0EF0400]                        neg     dword [mp3_synth_win+edx*4]
  7748                                  
  7749                                  .synth_neg_next:
  7750 000059E9 42                                      inc     edx
  7751 000059EA 81FA00020000                            cmp     edx, 200h
  7752 000059F0 72E8                                    jb      short .synth_neg_lop
  7753 000059F2 31D2                                    xor     edx, edx
  7754                                  
  7755                                  .synth_swap_lop:
  7756 000059F4 89D0                                    mov     eax, edx
  7757 000059F6 83E03F                                  and     eax, 3Fh
  7758 000059F9 83E811                                  sub     eax, 17         ; swap win [(17..31)] with win[(17..31)+32)
  7759 000059FC 83F80E                                  cmp     eax, 14         ; 31-17
  7760 000059FF 7715                                    ja      short .synth_swap_next
  7761 00005A01 8B0495[B0EF0400]                        mov     eax, [mp3_synth_win+edx*4]
  7762 00005A08 870495[30F00400]                        xchg    eax, [(mp3_synth_win+80h)+edx*4]
  7763 00005A0F 890495[B0EF0400]                        mov     [mp3_synth_win+edx*4], eax
  7764                                  
  7765                                  .synth_swap_next:
  7766 00005A16 42                                      inc     edx
  7767 00005A17 81FA00020000                            cmp     edx, 200h
  7768 00005A1D 72D5                                    jb      short .synth_swap_lop
  7769 00005A1F 31D2                                    xor     edx, edx
  7770                                  
  7771                                  .synth_zero_lop:
  7772 00005A21 C70495[F0EF0400]00-                     mov	dword [(mp3_synth_win+40h)+edx*4], 0
  7772 00005A29 000000             
  7773 00005A2C 83C240                                  add	edx, 40h
  7774 00005A2F 81FA00020000                            cmp	edx, 200h
  7775 00005A35 72EA                                    jb	short .synth_zero_lop
  7776 00005A37 BE[B0EF0400]                            mov	esi, mp3_synth_win
  7777 00005A3C 8DBE00080000                            lea	edi, [esi+2048] ; [esi+512*4]
  7778 00005A42 B900020000                              mov	ecx, 512        ; append another copy
  7779 00005A47 F3A5                                    rep movsd
  7780 00005A49 C3                                      retn
  7781                                  
  7782                                  
  7783                                  ; =============== S U B R O U T I N E =======================================
  7784                                  
  7785                                  
  7786                                  mp3_init_post_collapse:
  7787 00005A4A 803D[50760000]00                        cmp	byte [option_fast], 0
  7788 00005A51 7411                                    jz	short .not_fast
  7789 00005A53 BE[B0EF0400]                            mov	esi, mp3_synth_win
  7790 00005A58 89F7                                    mov	edi, esi
  7791 00005A5A B900040000                              mov	ecx, 1024       ; 512*(1+LONG_WINDOW)
  7792                                  
  7793                                  .collapse_lop:
  7794 00005A5F AD                                      lodsd                   ; collapse 32bit to 16bit
  7795                                                                          ; (that's slightly faster due to better caching)
  7796 00005A60 66AB                                    stosw
  7797 00005A62 E2FB                                    loop    .collapse_lop
  7798                                  
  7799                                  .not_fast:
  7800 00005A64 C3                                      retn
  7801                                  
  7802                                  
  7803                                  ; =============== S U B R O U T I N E =======================================
  7804                                  
  7805                                  
  7806                                  mp3_any_init_band_indices:
  7807 00005A65 BE[D4800000]                            mov     esi, mp3_band_size_long
  7808 00005A6A BF[C4D70100]                            mov     edi, mp3_band_index_long
  7809 00005A6F BB09000000                              mov     ebx, 9
  7810                                  
  7811                                  .band_index_lop_i:
  7812 00005A74 31C0                                    xor     eax, eax
  7813 00005A76 B916000000                              mov     ecx, 22
  7814                                  
  7815                                  .band_index_lop_j:
  7816 00005A7B 66AB                                    stosw
  7817 00005A7D 0FB616                                  movzx   edx, byte [esi]
  7818 00005A80 01D0                                    add     eax, edx
  7819 00005A82 46                                      inc     esi
  7820 00005A83 E2F6                                    loop    .band_index_lop_j
  7821 00005A85 83C10A                                  add     ecx, 10
  7822 00005A88 F366AB                                  rep stosw
  7823 00005A8B 4B                                      dec     ebx
  7824 00005A8C 75E6                                    jnz     short .band_index_lop_i
  7825 00005A8E C3                                      retn
  7826                                  
  7827                                  
  7828                                  ; =============== S U B R O U T I N E =======================================
  7829                                  
  7830                                  
  7831                                  mp3_any_init_lsf_sf_expand:
  7832 00005A8F BE[72780000]                            mov     esi, mp3_lsf_sf_expand_init_table
  7833 00005A94 BF[B0FF0400]                            mov     edi, mp3_lsf_sf_expand_exploded_table
  7834 00005A99 31D2                                    xor     edx, edx        ; curr.index
  7835 00005A9B 31DB                                    xor     ebx, ebx        ; curr.base
  7836                                  
  7837                                  .lop:
  7838 00005A9D 663B5606                                cmp     dx, [esi+6]     ; nextbase
  7839 00005AA1 7207                                    jb      short .inrange
  7840 00005AA3 668B5E06                                mov     bx, [esi+6]
  7841 00005AA7 83C608                                  add     esi, 8          ; next entry
  7842                                  
  7843                                  .inrange:
  7844 00005AAA 89D0                                    mov     eax, edx
  7845 00005AAC 29D8                                    sub     eax, ebx
  7846 00005AAE 8A0E                                    mov     cl, [esi]
  7847 00005AB0 D3E8                                    shr     eax, cl         ; div2
  7848 00005AB2 F67603                                  div     byte [esi+3] ; mod3 ; [2]=slen[3]
  7849 00005AB5 886703                                  mov     [edi+3], ah
  7850 00005AB8 B400                                    mov     ah, 0           ; eax=div.result
  7851 00005ABA F67602                                  div     byte [esi+2] ; mod2 ; [2]=slen[2]
  7852 00005ABD 886702                                  mov     [edi+2], ah     ; remainder
  7853 00005AC0 B400                                    mov     ah, 0
  7854 00005AC2 F67601                                  div     byte [esi+1] ; mod1 ; [1]=slen[1]
  7855 00005AC5 668907                                  mov     [edi], ax       ; [0]=slen[0]
  7856 00005AC8 668B4604                                mov     ax, [esi+4]     ; [4]=tindex2
  7857 00005ACC 66894704                                mov     [edi+4], ax     ; [5]=force_preflag
  7858 00005AD0 83C708                                  add     edi, 8
  7859 00005AD3 42                                      inc     edx             ; curr.index ; next
  7860 00005AD4 81FA00040000                            cmp     edx, 1024       ; 512+512
  7861 00005ADA 72C1                                    jb      short .lop
  7862 00005ADC C3                                      retn
  7863                                  
  7864                                  
  7865                                  ; =============== S U B R O U T I N E =======================================
  7866                                  
  7867                                  
  7868                                  mp3_any_init_huff_tables:
  7869 00005ADD BD[0C7B0000]                            mov     ebp, huff_tree_list_data
  7870 00005AE2 BE[8C850000]                            mov     esi, huff_tree_list_numbits
  7871 00005AE7 BA01000000                              mov     edx, 1          ; idx (table 01h..11h)
  7872                                  
  7873                                  .huffman_table_lop:
  7874 00005AEC 31C0                                    xor     eax, eax
  7875 00005AEE BF[DC290500]                            mov     edi, mp3_huff_tmp_bits
  7876 00005AF3 B940000000                              mov     ecx, 40h        ; 100h/4 ; 100h x 8bit
  7877 00005AF8 F3AB                                    rep stosd
  7878 00005AFA BF[DC2A0500]                            mov     edi, mp3_huff_tmp_codes
  7879 00005AFF B980000000                              mov     ecx, 80h        ; 100h/2 ; 100h x 16bit
  7880 00005B04 F3AB                                    rep stosd
  7881 00005B06 31DB                                    xor     ebx, ebx
  7882                                  
  7883                                  .huff_entry_lop:
  7884 00005B08 0FB67D00                                movzx   edi, byte [ebp+0]
  7885 00005B0C 45                                      inc     ebp             ; dst=data
  7886 00005B0D AC                                      lodsb                   ; numbits
  7887 00005B0E 8887[DC290500]                          mov     [mp3_huff_tmp_bits+edi], al
  7888 00005B14 B120                                    mov     cl, 32
  7889 00005B16 28C1                                    sub     cl, al          ; 32-numbits
  7890 00005B18 D3EB                                    shr     ebx, cl
  7891 00005B1A 66899C3F[DC2A0500]                      mov     word [mp3_huff_tmp_codes+edi*2], bx
  7892 00005B22 43                                      inc     ebx             ; next.code
  7893 00005B23 D3E3                                    shl     ebx, cl         ; shift back to MSBs
  7894 00005B25 75E1                                    jnz     short .huff_entry_lop
  7895 00005B27 60                                      pusha
  7896 00005B28 B800010000                              mov     eax, 100h       ; nb_codes
  7897 00005B2D BB[DC290500]                            mov     ebx, mp3_huff_tmp_bits ; bits
  7898 00005B32 BE[DC2A0500]                            mov     esi, mp3_huff_tmp_codes ; codes
  7899 00005B37 E837020000                              call    mp3_build_huff_table_root ; make table
  7900 00005B3C 61                                      popa
  7901 00005B3D 42                                      inc     edx             ; idx
  7902 00005B3E 83FA12                                  cmp     edx, 12h
  7903 00005B41 75A9                                    jnz     short .huffman_table_lop ; next table
  7904 00005B43 C3                                      retn
  7905                                  
  7906                                  
  7907                                  ; =============== S U B R O U T I N E =======================================
  7908                                  
  7909                                  
  7910                                  mp3_integer_init_is_stereo_lsf:
  7911 00005B44 31FF                                    xor     edi, edi
  7912                                  
  7913                                  .lsf_lop:
  7914 00005B46 89FE                                    mov     esi, edi
  7915 00005B48 83E63F                                  and     esi, 3Fh
  7916 00005B4B 46                                      inc     esi
  7917 00005B4C D1EE                                    shr     esi, 1
  7918 00005B4E F7C740000000                            test    edi, 40h
  7919 00005B54 7402                                    jz      short .lsf_no_shift
  7920 00005B56 D1E6                                    shl     esi, 1
  7921                                  
  7922                                  .lsf_no_shift:
  7923 00005B58 BA00000040                              mov     edx, 40000000h  ; aka mul 1.000
  7924 00005B5D 83C604                                  add     esi, 4
  7925 00005B60 F7C780000000                            test    edi, 80h        ; 2*40h
  7926 00005B66 7408                                    jz      short .no_ms_stereo
  7927 00005B68 BA9A79825A                              mov     edx, 5A82799Ah  ; 2D413CCDh*2 ; aka mul 1.414
  7928 00005B6D 83EE02                                  sub     esi, 2
  7929                                  
  7930                                  .no_ms_stereo:
  7931 00005B70 89F1                                    mov     ecx, esi
  7932 00005B72 C1E902                                  shr     ecx, 2          ; msbs
  7933 00005B75 83E603                                  and     esi, 3          ; lsbs
  7934 00005B78 8B04B5[CC840000]                        mov     eax, [mp3_is_table_lsf_src+esi*4]
  7935 00005B7F D3E8                                    shr     eax, cl
  7936 00005B81 F7C701000000                            test    edi, 1
  7937 00005B87 7501                                    jnz     short .lsf_no_swap
  7938 00005B89 92                                      xchg    eax, edx
  7939                                  
  7940                                  .lsf_no_swap:
  7941 00005B8A 8904FD[B0E70400]                        mov     [mp3_is_table_lsf+edi*8], eax
  7942 00005B91 8914FD[B4E70400]                        mov     [(mp3_is_table_lsf+4)+edi*8], edx
  7943 00005B98 47                                      inc     edi
  7944 00005B99 81FF00010000                            cmp     edi, 100h
  7945 00005B9F 72A5                                    jb      short .lsf_lop
  7946 00005BA1 C3                                      retn
  7947                                  
  7948                                  
  7949                                  ; =============== S U B R O U T I N E =======================================
  7950                                  
  7951                                  
  7952                                  mp3_integer_init_mdct_windows:
  7953 00005BA2 BF[30E30400]                            mov     edi, mp3_mdct_win
  7954 00005BA7 BE[54820000]                            mov     esi, mp3_mdct_win_src
  7955 00005BAC B990000000                              mov     ecx, 144        ; 36*4
  7956 00005BB1 F3A5                                    rep movsd
  7957 00005BB3 BE[30E30400]                            mov     esi, mp3_mdct_win
  7958 00005BB8 BF[70E50400]                            mov     edi, (mp3_mdct_win+240h)
  7959 00005BBD B948000000                              mov     ecx, 72         ; 4*36/2 ; that is, 4*36 entry pairs
  7960                                  
  7961                                  .mdct_lop_dupe:                       
  7962 00005BC2 A5                                      movsd                   ; copy normal, [4..7][even] = +[0..3][even
  7963 00005BC3 AD                                      lodsd
  7964 00005BC4 F7D8                                    neg     eax             ; copy negated, [4..7][odd] = -[0..3][odd]
  7965 00005BC6 AB                                      stosd
  7966 00005BC7 E2F9                                    loop    .mdct_lop_dupe
  7967 00005BC9 C3                                      retn
  7968                                  
  7969                                  
  7970                                  ; =============== S U B R O U T I N E =======================================
  7971                                  
  7972                                  
  7973                                  mp3_integer_init_table_4_3:
  7974 00005BCA 803D[50760000]00                        cmp	byte [option_fast], 0
  7975 00005BD1 B048                                    mov	al, 72          ; 100-6-VFRAC_BITS_slow
  7976 00005BD3 7402                                    jz	short .this_vfrac
  7977 00005BD5 B04C                                    mov	al, 76          ; 100-6-VFRAC_BITS_fast
  7978                                  
  7979                                  .this_vfrac:
  7980 00005BD7 A2[04F40000]                            mov     [mp3_curr_vfrac_bits], al
  7981 00005BDC 31FF                                    xor     edi, edi
  7982                                  
  7983                                  .table_4_3_lop:
  7984 00005BDE 57                                      push    edi             ; for i=1 to TABLE_4_3_SIZE-1
  7985 00005BDF 89F8                                    mov     eax, edi
  7986 00005BE1 C1E802                                  shr     eax, 2
  7987 00005BE4 F7E0                                    mul     eax
  7988 00005BE6 F7E0                                    mul     eax
  7989 00005BE8 31DB                                    xor     ebx, ebx
  7990 00005BEA E8A2000000                              call    cbrt96
  7991 00005BEF 020D[04F40000]                          add     cl, [mp3_curr_vfrac_bits]
  7992 00005BF5 5F                                      pop     edi
  7993                                  
  7994                                  .inner_lop:
  7995 00005BF6 89F8                                    mov     eax, edi
  7996 00005BF8 83E003                                  and     eax, 3
  7997 00005BFB 8B0485[DC840000]                        mov     eax, [mp3_pow2_quarters+eax*4]
  7998 00005C02 F7E3                                    mul     ebx
  7999 00005C04 88CD                                    mov     ch, cl
  8000 00005C06 09D2                                    or      edx, edx
  8001 00005C08 7904                                    jns     short .this
  8002 00005C0A D1EA                                    shr     edx, 1
  8003 00005C0C FECD                                    dec     ch
  8004                                  
  8005                                  .this:
  8006 00005C0E 8914BD[405A0200]                        mov     [mp3_table_4_3_value+edi*4], edx
  8007 00005C15 88AF[04DA0100]                          mov     [mp3_table_4_3_exp+edi], ch
  8008 00005C1B 47                                      inc     edi
  8009 00005C1C F7C703000000                            test    edi, 3
  8010 00005C22 75D2                                    jnz     short .inner_lop
  8011 00005C24 81FF3C800000                            cmp     edi, 803Ch
  8012 00005C2A 72B2                                    jb      short .table_4_3_lop
  8013 00005C2C C3                                      retn
  8014                                  
  8015                                  
  8016                                  ; =============== S U B R O U T I N E =======================================
  8017                                  
  8018                                  
  8019                                  mp3_integer_init_exponent:
  8020 00005C2D BF[30630400]                            mov     edi, mp3_expval_table
  8021 00005C32 31D2                                    xor     edx, edx
  8022                                  
  8023                                  .exponent_lop:
  8024 00005C34 89D0                                    mov     eax, edx        ; val=i
  8025 00005C36 89D3                                    mov     ebx, edx
  8026 00005C38 89D1                                    mov     ecx, edx
  8027 00005C3A C1EB04                                  shr     ebx, 4
  8028 00005C3D C1E906                                  shr     ecx, 6          ; 4+2
  8029 00005C40 83E00F                                  and     eax, 0Fh        ; val=i AND 0Fh
  8030 00005C43 83E303                                  and     ebx, 3
  8031 00005C46 8D1C83                                  lea     ebx, [ebx+eax*4] ; (0..0Fh)*4+(0..3)
  8032 00005C49 8B049D[405A0200]                        mov     eax, [mp3_table_4_3_value+ebx*4]
  8033 00005C50 09C0                                    or      eax, eax
  8034 00005C52 741A                                    jz      short .this
  8035 00005C54 2A8B[04DA0100]                          sub     cl, [mp3_table_4_3_exp+ebx]
  8036 00005C5A 770D                                    ja      short .left_shift
  8037 00005C5C F6D9                                    neg     cl
  8038 00005C5E D3E8                                    shr     eax, cl
  8039 00005C60 80F91F                                  cmp     cl, 1Fh
  8040 00005C63 7609                                    jbe     short .this
  8041 00005C65 31C0                                    xor     eax, eax
  8042 00005C67 EB05                                    jmp     short .this
  8043                                  
  8044                                  .left_shift:
  8045 00005C69 B8FFFFFF7F                              mov     eax, 7FFFFFFFh
  8046                                  
  8047                                  .this:
  8048 00005C6E AB                                      stosd
  8049 00005C6F 42                                      inc     edx
  8050 00005C70 81FA00200000                            cmp     edx, 2000h
  8051 00005C76 72BC                                    jb      short .exponent_lop
  8052 00005C78 BE[30630400]                            mov     esi, mp3_expval_table
  8053 00005C7D BF[305B0400]                            mov     edi, mp3_exp_table
  8054 00005C82 B900020000                              mov     ecx, 200h
  8055                                  
  8056                                  .exponent_dupe_lop:
  8057 00005C87 8B4604                                  mov     eax, [esi+4]
  8058 00005C8A AB                                      stosd
  8059 00005C8B 83C640                                  add     esi, 40h
  8060 00005C8E E2F7                                    loop    .exponent_dupe_lop
  8061 00005C90 C3                                      retn
  8062                                  
  8063                                  
  8064                                  ; =============== S U B R O U T I N E =======================================
  8065                                  
  8066                                  
  8067                                  cbrt96:
  8068 00005C91 83EC18                                  sub     esp, 18h        ; cube root, val^(1/3), from https://gist.github.com/anonymous/729557
  8069                                                                          ; in:  ebx:edx:eax = unsigned 96bit input (integer)
  8070                                                                          ; out: ebx         = unsigned 32bit result (with fractional bits)
  8071                                                                          ; out: cl          = number of fractional bits
  8072 00005C94 890424                                  mov     [esp], eax
  8073 00005C97 89542404                                mov     [esp+4], edx
  8074 00005C9B 895C2408                                mov     [esp+8], ebx
  8075 00005C9F C744240C00000000                        mov     dword [esp+0Ch], 0
  8076 00005CA7 C744241000000000                        mov     dword [esp+10h], 0
  8077 00005CAF C744241400000000                        mov     dword [esp+14h], 0
  8078 00005CB7 31DB                                    xor     ebx, ebx        ; result.value
  8079 00005CB9 B100                                    mov     cl, 0           ; result.fraction
  8080 00005CBB 09D0                                    or      eax, edx        ; skip if zero
  8081 00005CBD 742F                                    jz      short .pre_shift_done
  8082                                  
  8083                                  .pre_shift_lop:
  8084 00005CBF F7442408000000E0                        test    dword [esp+8], 0E0000000h
  8085 00005CC7 7525                                    jnz     short .pre_shift_done
  8086 00005CC9 D12424                                  shl     dword [esp], 1
  8087 00005CCC D1542404                                rcl     dword [esp+4], 1
  8088 00005CD0 D1542408                                rcl     dword [esp+8], 1
  8089 00005CD4 D12424                                  shl     dword [esp], 1
  8090 00005CD7 D1542404                                rcl     dword [esp+4], 1
  8091 00005CDB D1542408                                rcl     dword [esp+8], 1
  8092 00005CDF D12424                                  shl     dword [esp], 1
  8093 00005CE2 D1542404                                rcl     dword [esp+4], 1
  8094 00005CE6 D1542408                                rcl     dword [esp+8], 1
  8095 00005CEA FEC1                                    inc     cl
  8096 00005CEC EBD1                                    jmp     short .pre_shift_lop
  8097                                  
  8098                                  .pre_shift_done:
  8099 00005CEE B520                                    mov     ch, 20h         ; loopcount
  8100                                  
  8101                                  .lop:
  8102 00005CF0 01DB                                    add     ebx, ebx        ; result*2
  8103 00005CF2 89D8                                    mov     eax, ebx        ; y
  8104 00005CF4 43                                      inc     ebx             ; result+1
  8105 00005CF5 F7E3                                    mul     ebx             ; y*(y+1)
  8106 00005CF7 89C6                                    mov     esi, eax
  8107 00005CF9 89D7                                    mov     edi, edx
  8108 00005CFB 31ED                                    xor     ebp, ebp
  8109 00005CFD F9                                      stc
  8110 00005CFE 11F6                                    adc     esi, esi        ; y*(y+1)*2+1
  8111 00005D00 11FF                                    adc     edi, edi
  8112 00005D02 11ED                                    adc     ebp, ebp
  8113 00005D04 01C6                                    add     esi, eax
  8114 00005D06 11D7                                    adc     edi, edx        ; y*(y+1)*3+1
  8115 00005D08 83D500                                  adc     ebp, 0
  8116 00005D0B D12424                                  shl     dword [esp], 1
  8117 00005D0E D1542404                                rcl     dword [esp+4], 1
  8118 00005D12 D1542408                                rcl     dword [esp+8], 1 ; shl 3
  8119 00005D16 D154240C                                rcl     dword [esp+0Ch], 1
  8120 00005D1A D1542410                                rcl     dword [esp+10h], 1
  8121 00005D1E D1542414                                rcl     dword [esp+14h], 1
  8122 00005D22 D12424                                  shl     dword [esp], 1
  8123 00005D25 D1542404                                rcl     dword [esp+4], 1
  8124 00005D29 D1542408                                rcl     dword [esp+8], 1
  8125 00005D2D D154240C                                rcl     dword [esp+0Ch], 1
  8126 00005D31 D1542410                                rcl     dword [esp+10h], 1
  8127 00005D35 D1542414                                rcl     dword [esp+14h], 1
  8128 00005D39 D12424                                  shl     dword [esp], 1
  8129 00005D3C D1542404                                rcl     dword [esp+4], 1
  8130 00005D40 D1542408                                rcl     dword [esp+8], 1
  8131 00005D44 D154240C                                rcl     dword [esp+0Ch], 1
  8132 00005D48 D1542410                                rcl     dword [esp+10h], 1
  8133 00005D4C D1542414                                rcl     dword [esp+14h], 1
  8134 00005D50 2974240C                                sub     [esp+0Ch], esi
  8135 00005D54 197C2410                                sbb     [esp+10h], edi  ; sub/compare
  8136 00005D58 196C2414                                sbb     [esp+14h], ebp
  8137 00005D5C 730D                                    jnb     short .next
  8138 00005D5E 4B                                      dec     ebx
  8139 00005D5F 0174240C                                add     [esp+0Ch], esi
  8140 00005D63 117C2410                                adc     [esp+10h], edi  ; undo
  8141 00005D67 116C2414                                adc     [esp+14h], ebp
  8142                                  
  8143                                  .next:
  8144 00005D6B FECD                                    dec     ch
  8145 00005D6D 7581                                    jnz     short .lop
  8146 00005D6F 83C418                                  add     esp, 18h
  8147                                  mp3_init_log_constants:
  8148 00005D72 C3                                      retn
  8149                                  
  8150                                  ;mp3_init_log_constants:
  8151                                  ;                retn
  8152                                  
  8153                                  ; =============== S U B R O U T I N E =======================================
  8154                                  
  8155                                  
  8156                                  mp3_build_huff_table_root:
  8157 00005D73 A3[E02C0500]                            mov     [_@@nb_codes], eax ; "init_vlc"
  8158 00005D78 C705[E42C0500]0000-                     mov     dword [_@@prefix_numbits], 0
  8158 00005D80 0000               
  8159 00005D82 C705[E82C0500]0000-                     mov     dword [_@@prefix_pattern], 0
  8159 00005D8A 0000               
  8160 00005D8C 60                                      pusha
  8161 00005D8D 89C1                                    mov     ecx, eax
  8162 00005D8F 31C0                                    xor     eax, eax
  8163                                  
  8164                                  .prescan_lop:
  8165 00005D91 3A03                                    cmp     al, [ebx]
  8166 00005D93 7702                                    ja      short .prescan_next
  8167 00005D95 8A03                                    mov     al, [ebx]
  8168                                  
  8169                                  .prescan_next:
  8170 00005D97 43                                      inc     ebx
  8171 00005D98 E2F7                                    loop    .prescan_lop
  8172 00005D9A 3C09                                    cmp     al, 9           ; CHILD_BITS
  8173 00005D9C 7202                                    jb      short .prescan_this_limit
  8174 00005D9E B009                                    mov     al, 9
  8175                                  
  8176                                  .prescan_this_limit:
  8177 00005DA0 A3[DC2C0500]                            mov     [_@@table_nb_bits], eax
  8178 00005DA5 61                                      popa
  8179                                  
  8180                                  mp3_build_huff_table_recursive_child:
  8181 00005DA6 8B0D[DC2C0500]                          mov     ecx, [_@@table_nb_bits]
  8182 00005DAC B801000000                              mov     eax, 1
  8183 00005DB1 D3E0                                    shl     eax, cl
  8184 00005DB3 A3[EC2C0500]                            mov     [_@@curr_table_size], eax
  8185 00005DB8 48                                      dec     eax
  8186 00005DB9 A3[F02C0500]                            mov     [_@@curr_table_mask], eax
  8187 00005DBE 60                                      pusha
  8188 00005DBF 8B1D[F0840000]                          mov     ebx, [mp3_huff_num_entries]
  8189 00005DC5 891D[F42C0500]                          mov     [_@@curr_table_index], ebx
  8190 00005DCB 031D[EC2C0500]                          add     ebx, [_@@curr_table_size]
  8191 00005DD1 891D[F0840000]                          mov     [mp3_huff_num_entries], ebx
  8192 00005DD7 813D[F0840000]002E-                     cmp     dword [mp3_huff_num_entries], 11776 ; HUFF_TREE_SIZE/4
  8192 00005DDF 0000               
  8193 00005DE1 0F8781AFFFFF                            ja      fatalunexpected
  8194 00005DE7 61                                      popa
  8195 00005DE8 BF[C41F0100]                            mov     edi, huff_tree_buf
  8196 00005DED A1[F42C0500]                            mov     eax, [_@@curr_table_index]
  8197 00005DF2 66890497                                mov     [edi+edx*4], ax
  8198 00005DF6 A1[DC2C0500]                            mov     eax, [_@@table_nb_bits]
  8199 00005DFB F7D8                                    neg     eax
  8200 00005DFD 6689449702                              mov     [edi+edx*4+2], ax
  8201 00005E02 BF[C41F0100]                            mov     edi, huff_tree_buf
  8202 00005E07 8B15[F42C0500]                          mov     edx, [_@@curr_table_index]
  8203 00005E0D 8B0D[EC2C0500]                          mov     ecx, [_@@curr_table_size]
  8204                                  
  8205                                  .clear_table_lop:
  8206 00005E13 66C70497FFFF                            mov     word [edi+edx*4], 0FFFFh
  8207 00005E19 66C74497020000                          mov     word [edi+edx*4+2], 0
  8208 00005E20 42                                      inc     edx
  8209 00005E21 E2F0                                    loop    .clear_table_lop
  8210 00005E23 53                                      push    ebx
  8211 00005E24 56                                      push    esi
  8212 00005E25 31D2                                    xor     edx, edx
  8213                                  
  8214                                  .make_table_lop:
  8215 00005E27 0FB60B                                  movzx   ecx, byte [ebx]
  8216 00005E2A 0FB706                                  movzx   eax, word [esi]
  8217 00005E2D 2B0D[E42C0500]                          sub     ecx, [_@@prefix_numbits]
  8218 00005E33 7E74                                    jle     short .make_table_lop_next
  8219 00005E35 D3E8                                    shr     eax, cl
  8220 00005E37 3B05[E82C0500]                          cmp     eax, [_@@prefix_pattern]
  8221 00005E3D 756A                                    jnz     short .make_table_lop_next
  8222 00005E3F BF[C41F0100]                            mov     edi, huff_tree_buf
  8223 00005E44 0FB706                                  movzx   eax, word [esi]
  8224 00005E47 2B0D[DC2C0500]                          sub     ecx, [_@@table_nb_bits]
  8225 00005E4D 773E                                    ja      short .create_child_table
  8226 00005E4F F7D9                                    neg     ecx
  8227 00005E51 D3E0                                    shl     eax, cl
  8228 00005E53 2305[F02C0500]                          and     eax, [_@@curr_table_mask]
  8229 00005E59 0305[F42C0500]                          add     eax, [_@@curr_table_index]
  8230 00005E5F 8D3C87                                  lea     edi, [edi+eax*4]
  8231 00005E62 B801000000                              mov     eax, 1
  8232 00005E67 D3E0                                    shl     eax, cl
  8233 00005E69 89C1                                    mov     ecx, eax
  8234 00005E6B 0FB603                                  movzx   eax, byte [ebx]
  8235 00005E6E 2B05[E42C0500]                          sub     eax, [_@@prefix_numbits]
  8236                                  
  8237                                  .make_rept_lop:
  8238 00005E74 66837F0200                              cmp     word [edi+2], 0
  8239 00005E79 0F85E9AEFFFF                            jnz     fatalunexpected
  8240 00005E7F 668917                                  mov     [edi], dx
  8241 00005E82 66894702                                mov     [edi+2], ax
  8242 00005E86 83C704                                  add     edi, 4
  8243 00005E89 E2E9                                    loop    .make_rept_lop
  8244 00005E8B EB1C                                    jmp     short .make_table_lop_next
  8245                                  
  8246                                  .create_child_table:
  8247 00005E8D D3E8                                    shr     eax, cl
  8248 00005E8F 2305[F02C0500]                          and     eax, [_@@curr_table_mask]
  8249 00005E95 0305[F42C0500]                          add     eax, [_@@curr_table_index]
  8250 00005E9B F7D9                                    neg     ecx
  8251 00005E9D 66394C8702                              cmp     [edi+eax*4+2], cx
  8252 00005EA2 7C05                                    jl      short .make_table_lop_next
  8253 00005EA4 66894C8702                              mov     [edi+eax*4+2], cx
  8254                                  
  8255                                  .make_table_lop_next:
  8256 00005EA9 83C602                                  add     esi, 2
  8257 00005EAC 43                                      inc     ebx
  8258 00005EAD 42                                      inc     edx
  8259 00005EAE 3B15[E02C0500]                          cmp     edx, [_@@nb_codes]
  8260 00005EB4 0F826DFFFFFF                            jb      .make_table_lop
  8261 00005EBA 5E                                      pop     esi
  8262 00005EBB 5B                                      pop     ebx
  8263 00005EBC 8B0D[EC2C0500]                          mov     ecx, [_@@curr_table_size]
  8264 00005EC2 8B15[F42C0500]                          mov     edx, [_@@curr_table_index]
  8265                                  
  8266                                  .make_child_tables_lop:
  8267 00005EC8 BF[C41F0100]                            mov     edi, huff_tree_buf
  8268 00005ECD 0FBF449702                              movsx   eax, word [edi+edx*4+2]
  8269 00005ED2 83F800                                  cmp     eax, 0
  8270 00005ED5 796D                                    jns     short .make_child_tables_lop_next
  8271 00005ED7 F7D8                                    neg     eax
  8272 00005ED9 3B05[DC2C0500]                          cmp     eax, [_@@table_nb_bits]
  8273 00005EDF 7605                                    jbe     short .make_child_tables_this
  8274 00005EE1 A1[DC2C0500]                            mov     eax, [_@@table_nb_bits]
  8275                                  
  8276                                  .make_child_tables_this:
  8277 00005EE6 51                                      push	ecx
  8278 00005EE7 52                                      push	edx
  8279 00005EE8 FF35[F42C0500]                          push	dword [_@@curr_table_index]
  8280 00005EEE FF35[DC2C0500]                          push	dword [_@@table_nb_bits]
  8281 00005EF4 FF35[E42C0500]                          push	dword [_@@prefix_numbits]
  8282 00005EFA FF35[E82C0500]                          push	dword [_@@prefix_pattern]
  8283 00005F00 8B0D[DC2C0500]                          mov	ecx, [_@@table_nb_bits]
  8284 00005F06 A3[DC2C0500]                            mov	[_@@table_nb_bits], eax
  8285 00005F0B 010D[E42C0500]                          add	[_@@prefix_numbits], ecx
  8286 00005F11 D325[E82C0500]                          shl	dword [_@@prefix_pattern], cl
  8287 00005F17 89D0                                    mov	eax, edx
  8288 00005F19 2B05[F42C0500]                          sub	eax, [_@@curr_table_index]
  8289 00005F1F 0905[E82C0500]                          or	[_@@prefix_pattern], eax
  8290 00005F25 E87CFEFFFF                              call	mp3_build_huff_table_recursive_child
  8291 00005F2A 8F05[E82C0500]                          pop	dword [_@@prefix_pattern]
  8292 00005F30 8F05[E42C0500]                          pop	dword [_@@prefix_numbits]
  8293 00005F36 8F05[DC2C0500]                          pop	dword [_@@table_nb_bits]
  8294 00005F3C 8F05[F42C0500]                          pop	dword [_@@curr_table_index]
  8295 00005F42 5A                                      pop	edx
  8296 00005F43 59                                      pop	ecx
  8297                                  
  8298                                  .make_child_tables_lop_next:
  8299 00005F44 42                                      inc	edx
  8300 00005F45 E281                                    loop	.make_child_tables_lop
  8301 00005F47 C3                                      retn
  8302                                  
  8303                                  
  8304                                  ; =============== S U B R O U T I N E =======================================
  8305                                  
  8306                                  
  8307                                  mp3_exclude_id3_and_tag:
  8308 00005F48 8B35[042D0500]                          mov     esi, [stream_pos]
  8309 00005F4E 8B0D[082D0500]                          mov     ecx, [bytes_left]
  8310 00005F54 83F90A                                  cmp     ecx, 10
  8311 00005F57 7240                                    jb      short .no_id3
  8312 00005F59 8B06                                    mov     eax, [esi]
  8313 00005F5B 25FFFFFF00                              and     eax, 0FFFFFFh
  8314                                                  ;cmp    eax, '3DI'     ; "ID3"
  8315                                                  ; 20/10/2024 
  8316 00005F60 3D49443300                              cmp     eax, 'ID3'     ; FASM & NASM syntax
  8317 00005F65 7532                                    jnz     short .no_id3
  8318 00005F67 8B4606                                  mov     eax, [esi+6]
  8319 00005F6A A980808080                              test    eax, 80808080h
  8320 00005F6F 7528                                    jnz     short .no_id3
  8321                                  
  8322                                  .xlat_4x7bit_to_28bit:
  8323 00005F71 86E0                                    xchg    al, ah
  8324 00005F73 D0E0                                    shl     al, 1
  8325 00005F75 66D1E0                                  shl     ax, 1
  8326 00005F78 66C1E802                                shr     ax, 2
  8327 00005F7C C1C810                                  ror     eax, 16
  8328 00005F7F 86E0                                    xchg    al, ah
  8329 00005F81 D0E0                                    shl     al, 1
  8330 00005F83 66D1E0                                  shl     ax, 1
  8331 00005F86 C1E802                                  shr     eax, 2
  8332 00005F89 83C00A                                  add     eax, 10
  8333 00005F8C 39C1                                    cmp     ecx, eax
  8334 00005F8E 7209                                    jb      short .no_id3
  8335 00005F90 01C6                                    add     esi, eax
  8336 00005F92 29C1                                    sub     ecx, eax
  8337 00005F94 A3[84F40000]                            mov     [mp3_id3_size], eax
  8338                                  
  8339                                  .no_id3:
  8340 00005F99 BA80000000                              mov     edx, 80h
  8341 00005F9E 39D1                                    cmp     ecx, edx
  8342 00005FA0 721F                                    jb      short .no_tag_or_ext
  8343 00005FA2 8B440E80                                mov     eax, [esi+ecx-80h]
  8344 00005FA6 25FFFFFF00                              and     eax, 0FFFFFFh
  8345                                                  ;cmp    eax, 'GAT'     ; "TAG"
  8346                                                  ; 20/10/2024
  8347 00005FAB 3D54414700                              cmp     eax, 'TAG'     ; FASM & NASM syntax
  8348 00005FB0 0F8421010000                            jz      .got_tag_size_edx
  8349                                                  ;cmp    eax, 'TXE'
  8350 00005FB6 3D45585400                              cmp     eax, 'EXT'
  8351 00005FBB 0F8416010000                            jz      .got_tag_size_edx
  8352                                  
  8353                                  .no_tag_or_ext:
  8354 00005FC1 BAE3000000                              mov     edx, 0E3h
  8355 00005FC6 39D1                                    cmp     ecx, edx
  8356 00005FC8 7211                                    jb      short .no_tagplus
  8357                                                  ;cmp    dword [esi+ecx-0E3h], '+GAT' ; "TAG+"
  8358                                                  ; 20/10/2024
  8359 00005FCA 81BC0E1DFFFFFF5441-                     cmp     dword [esi+ecx-0E3h], 'TAG+'
  8359 00005FD3 472B               
  8360 00005FD5 0F84FC000000                            jz      .got_tag_size_edx
  8361                                  
  8362                                  .no_tagplus:
  8363 00005FDB BA14000000                              mov     edx, 20        ; 10+10
  8364 00005FE0 39D1                                    cmp     ecx, edx
  8365 00005FE2 723C                                    jb      short .no_3di  ; "3DI",04h
  8366 00005FE4 817C0EF633444904                        cmp     dword [esi+ecx-10], 4494433h ; 'ID3'+04000000h
  8367 00005FEC 7532                                    jnz     short .no_3di
  8368 00005FEE F6440EFB10                              test    byte [esi+ecx-5], 10h ; bit 4
  8369 00005FF3 742B                                    jz      short .no_3di
  8370 00005FF5 8B440EFC                                mov     eax, [esi+ecx-4]
  8371 00005FF9 A980808080                              test    eax, 80808080h
  8372 00005FFE 7520                                    jnz     short .no_3di
  8373                                  
  8374                                  .@xlat_4x7bit_to_28bit:
  8375 00006000 86E0                                    xchg    al, ah
  8376 00006002 D0E0                                    shl     al, 1
  8377 00006004 66D1E0                                  shl     ax, 1
  8378 00006007 66C1E802                                shr     ax, 2
  8379 0000600B C1C810                                  ror     eax, 10h
  8380 0000600E 86E0                                    xchg    al, ah
  8381 00006010 D0E0                                    shl     al, 1
  8382 00006012 66D1E0                                  shl     ax, 1
  8383 00006015 C1E802                                  shr     eax, 2
  8384 00006018 8D5014                                  lea     edx, [eax+20]  ; [eax+10+10] ; hdr+footer siz
  8385 0000601B E9B7000000                              jmp     .got_tag_size_edx
  8386                                  
  8387                                  .no_3di:
  8388                                                  ;cmp    dword [esi+ecx-32], 'TEPA' ; [esi+ecx-32+0]
  8389                                                  ; 20/10/2024
  8390 00006020 817C0EE041504554                        cmp     dword [esi+ecx-32], 'APET'
  8391                                                                         ; check "APETAGEX"
  8392 00006028 7520                                    jnz     short .no_ape
  8393                                                  ;cmp    dword [esi+ecx-28], 'XEGA' ; [esi+ecx-32+4]
  8394 0000602A 817C0EE441474558                        cmp     dword [esi+ecx-28], 'AGEX'
  8395 00006032 7516                                    jnz     short .no_ape
  8396 00006034 8B540EEC                                mov     edx, [esi+ecx-20] ; [esi+ecx-32+12] ; get size
  8397 00006038 F7440EF400000080                        test    dword [esi+ecx-12], 80000000h ; [esi+ecx-32+20],1 shl 31
  8398 00006040 7403                                    jz      short .no_ape_header
  8399 00006042 83C220                                  add     edx, 32        ; hdr.size
  8400                                  
  8401                                  .no_ape_header: 
  8402 00006045 E98D000000                              jmp     .got_tag_size_edx
  8403                                  
  8404                                  .no_ape:
  8405 0000604A BA14000000                              mov     edx, 20        ; 11+9
  8406 0000604F 39D1                                    cmp     ecx, edx       ; "LYRICSEND" or "LYRICS200"
  8407                                                                         ; (11+N+9 bytes each)
  8408 00006051 7258                                    jb      short .no_lyrics
  8409                                                  ;cmp    dword [esi+ecx-9], 'IRYL'
  8410                                                  ; 20/10/2024
  8411 00006053 817C0EF74C595249                        cmp     dword [esi+ecx-9], 'LYRI' ; FASM & NASM syntax
  8412 0000605B 754E                                    jnz     short .no_lyrics
  8413 0000605D 807C0EFB43                              cmp     byte [esi+ecx-5], 'C'
  8414 00006062 7547                                    jnz     short .no_lyrics
  8415                                                  ;cmp    dword [esi+ecx-4], 'DNES'
  8416 00006064 817C0EFC53454E44                        cmp     dword [esi+ecx-4], 'SEND'
  8417 0000606C 740C                                    jz      short .lyrics3_v1
  8418                                                  ;cmp    dword [esi+ecx-4], '002S'
  8419 0000606E 817C0EFC53323030                        cmp     dword [esi+ecx-4], 'S200'
  8420 00006076 7440                                    jz      short .lyrics3_v2
  8421 00006078 7531                                    jnz     short .no_lyrics
  8422                                  
  8423                                  .lyrics3_v1:
  8424 0000607A BA14000000                              mov     edx, 20        ; 11+9
  8425                                  
  8426                                  .lyrics3_v1_size_lop:
  8427 0000607F 8D040E                                  lea     eax, [esi+ecx]
  8428 00006082 29D0                                    sub     eax, edx
  8429                                                  ;cmp    dword [eax], 'IRYL' ; "LYRICSBEGIN"
  8430                                                  ; 20/10/2024
  8431 00006084 81384C595249                            cmp     dword [eax], 'LYRI'
  8432 0000608A 7512                                    jnz     short .lyrics3_v1_size_next
  8433                                                  ;cmp    dword [eax+4], 'EBSC'
  8434 0000608C 81780443534245                          cmp     dword [eax+4], 'CSBE'
  8435 00006093 7509                                    jnz     short .lyrics3_v1_size_next
  8436                                                  ;cmp    dword [eax+7], 'NIGE'
  8437 00006095 8178074547494E                          cmp     dword [eax+7], 'EGIN'
  8438 0000609C 7439                                    jz      short .got_tag_size_edx
  8439                                  
  8440                                  .lyrics3_v1_size_next:
  8441 0000609E 42                                      inc     edx
  8442 0000609F 81FA00140000                            cmp     edx, 5120
  8443 000060A5 7704                                    ja      short .no_lyrics
  8444 000060A7 39CA                                    cmp     edx, ecx
  8445 000060A9 76D4                                    jbe     short .lyrics3_v1_size_lop
  8446                                                  ;jmp     short .no_lyrics
  8447                                  
  8448                                  .no_lyrics:
  8449                                                  ;jmp    short .footer_tag_all_done
  8450                                  		; 22/10/2024
  8451                                  .footer_tag_all_done:
  8452 000060AB 8935[042D0500]                          mov     [stream_pos], esi
  8453 000060B1 890D[082D0500]                          mov     [bytes_left], ecx
  8454 000060B7 C3                                      retn
  8455                                  
  8456                                  .lyrics3_v2:
  8457 000060B8 51                                      push    ecx
  8458 000060B9 56                                      push    esi
  8459 000060BA 8D740EF1                                lea     esi, [esi+ecx-15] ; [esi+ecx-6-9]
  8460 000060BE B906000000                              mov     ecx, 6
  8461 000060C3 31D2                                    xor     edx, edx
  8462                                  
  8463                                  .lyrics3_v2_size_lop:
  8464 000060C5 6BD20A                                  imul    edx, 10
  8465 000060C8 0FB606                                  movzx   eax, byte [esi]
  8466 000060CB 46                                      inc     esi
  8467 000060CC 2C30                                    sub     al, 30h
  8468 000060CE 01C2                                    add     edx, eax
  8469 000060D0 E2F3                                    loop    .lyrics3_v2_size_lop
  8470 000060D2 5E                                      pop     esi
  8471 000060D3 59                                      pop     ecx
  8472 000060D4 83C20F                                  add     edx, 0Fh       ; 6+9
  8473                                                  ;jmp    short .got_tag_size_edx
  8474                                  
  8475                                  .got_tag_size_edx:
  8476                                  		;;;
  8477                                  		; 22/10/2024
  8478 000060D7 29D1                                    sub    ecx, edx
  8479 000060D9 7311                                    jnb    short .cont
  8480                                  		;;;
  8481 000060DB 89D0                                    mov     eax, edx
  8482 000060DD E853050000                              call    wr_decimal_eax
  8483 000060E2 E822050000                              call    wrcrlf
  8484                                                  ;;;
  8485                                  		;sub    ecx, edx
  8486                                                  ;jb     fatalunexpected
  8487 000060E7 E97CACFFFF              		jmp	fatalunexpected
  8488                                  .cont:
  8489                                  		;;;
  8490 000060EC 0115[88F40000]                          add     [mp3_tag_size], edx
  8491 000060F2 E9A2FEFFFF                              jmp     .no_id3
  8492                                  
  8493                                  
  8494                                  ; =============== S U B R O U T I N E =======================================
  8495                                  
  8496                                  
  8497                                  mp3_detect_free_format_block_size:
  8498 000060F7 833D[00F40000]00                        cmp     dword [mp3_free_format_frame_size], 0
  8499 000060FE 0F85A5000000                            jnz     .already_detected
  8500 00006104 31D2                                    xor     edx, edx
  8501                                  
  8502                                  .find_distance_lop:
  8503 00006106 3B15[B0F40000]                          cmp     edx, [mp3_src_remain]
  8504 0000610C 742B                                    jz      short .match_eof
  8505 0000610E 8D4204                                  lea     eax, [edx+4]
  8506 00006111 3B05[B0F40000]                          cmp     eax, [mp3_src_remain]
  8507 00006117 771E                                    ja      short .find_distance_failed
  8508 00006119 8B0416                                  mov     eax, [esi+edx]
  8509 0000611C E8EDA0FFFF                              call    bswap_eax
  8510 00006121 3305[B09D0000]                          xor     eax, [mp3_hdr_32bit_header]
  8511 00006127 25000CFEFF                              and     eax, 0FFFE0C00h
  8512 0000612C 740B                                    jz      short .match_eof
  8513                                  
  8514                                  .find_distance_next:
  8515 0000612E 42                                      inc     edx
  8516 0000612F 81FA00100000                            cmp     edx, 1000h
  8517 00006135 76CF                                    jbe     short .find_distance_lop
  8518                                  
  8519                                  .find_distance_failed:
  8520 00006137 F9                                      stc
  8521 00006138 C3                                      retn
  8522                                  
  8523                                  .match_eof:
  8524 00006139 89D0                                    mov     eax, edx
  8525 0000613B 2B05[BC9D0000]                          sub     eax, [mp3_hdr_flag_padding]
  8526 00006141 83F804                                  cmp     eax, 4
  8527 00006144 72E8                                    jb      short .find_distance_next
  8528 00006146 A3[00F40000]                            mov     [mp3_free_format_frame_size], eax
  8529 0000614B 31DB                                    xor     ebx, ebx
  8530                                  
  8531                                  .confirm_distance_lop:
  8532 0000614D 8B041E                                  mov     eax, [esi+ebx]
  8533 00006150 E8B9A0FFFF                              call    bswap_eax
  8534 00006155 C1E80A                                  shr     eax, 10         ; 9+1
  8535 00006158 131D[00F40000]                          adc     ebx, [mp3_free_format_frame_size]
  8536 0000615E 3B1D[B0F40000]                          cmp     ebx, [mp3_src_remain]
  8537 00006164 7422                                    jz      short .confirm_distance_match_eof
  8538 00006166 8D4304                                  lea     eax, [ebx+4]
  8539 00006169 3B05[B0F40000]                          cmp     eax, [mp3_src_remain]
  8540 0000616F 77BD                                    ja      short .find_distance_next
  8541 00006171 8B041E                                  mov     eax, [esi+ebx]
  8542 00006174 E895A0FFFF                              call    bswap_eax
  8543 00006179 3305[B09D0000]                          xor     eax, [mp3_hdr_32bit_header]
  8544 0000617F 25000CFEFF                              and     eax, 0FFFE0C00h
  8545 00006184 75A8                                    jnz     short .find_distance_next
  8546 00006186 EBC5                                    jmp     short .confirm_distance_lop
  8547                                  
  8548                                  .confirm_distance_match_eof:
  8549 00006188 A1[00F40000]                            mov     eax, [mp3_free_format_frame_size]
  8550 0000618D C1E003                                  shl     eax, 3
  8551 00006190 F725[C09D0000]                          mul     dword [mp3_sample_rate]
  8552 00006196 8B0D[C0F40000]                          mov     ecx, [mp3_nb_granules]
  8553 0000619C 69C940020000                            imul    ecx, 240h
  8554 000061A2 F7F1                                    div     ecx
  8555 000061A4 A3[C89D0000]                            mov     [mp3_bit_rate], eax
  8556                                  
  8557                                  .already_detected:
  8558 000061A9 F8                                      clc
  8559 000061AA C3                                      retn
  8560                                  
  8561                                  
  8562                                  ; =============== S U B R O U T I N E =======================================
  8563                                  
  8564                                  
  8565                                  mp3_check_xing_info:
  8566 000061AB C705[08F40000]0000-                     mov     dword [mp3_xing_id], 0
  8566 000061B3 0000               
  8567 000061B5 C705[10F40000]0000-                     mov     dword [mp3_xing_frames], 0
  8567 000061BD 0000               
  8568 000061BF C705[14F40000]0000-                     mov     dword [mp3_xing_filesize], 0
  8568 000061C7 0000               
  8569 000061C9 8B35[A49D0000]                          mov     esi, [mp3_src_data_location]
  8570 000061CF AD                                      lodsd
  8571                                                  ;cmp    eax, 'gniX'
  8572                                  		; 20/10/2024
  8573 000061D0 3D58696E67              		cmp	eax, 'Xing'     ; FASM & NASM syntax
  8574 000061D5 7401                                    jz      short .xing
  8575 000061D7 C3                                      retn
  8576                                  
  8577                                  .xing:
  8578 000061D8 A3[08F40000]                            mov     [mp3_xing_id], eax
  8579 000061DD AD                                      lodsd
  8580 000061DE E82BA0FFFF                              call    bswap_eax
  8581 000061E3 A3[0CF40000]                            mov     [mp3_xing_flags], eax
  8582 000061E8 89C2                                    mov     edx, eax
  8583 000061EA F7C201000000                            test    edx, 1
  8584 000061F0 740B                                    jz      short .no_xing_frames
  8585 000061F2 AD                                      lodsd
  8586 000061F3 E816A0FFFF                              call    bswap_eax
  8587 000061F8 A3[10F40000]                            mov     [mp3_xing_frames], eax
  8588                                  
  8589                                  .no_xing_frames:
  8590 000061FD F7C202000000                            test    edx, 2          ; 1 shl 1
  8591 00006203 740B                                    jz      short .no_xing_filesize
  8592 00006205 AD                                      lodsd
  8593 00006206 E803A0FFFF                              call    bswap_eax
  8594 0000620B A3[14F40000]                            mov     [mp3_xing_filesize], eax
  8595                                  
  8596                                  .no_xing_filesize:
  8597 00006210 F7C204000000                            test    edx, 4          ; 1 shl 2
  8598 00006216 740C                                    jz      short .no_xing_toc
  8599 00006218 B964000000                              mov     ecx, 100
  8600 0000621D BF[18F40000]                            mov     edi, mp3_xing_toc
  8601 00006222 F3A4                                    rep movsb
  8602                                  
  8603                                  .no_xing_toc:
  8604 00006224 F7C208000000                            test    edx, 8          ; 1 shl 3
  8605 0000622A 740B                                    jz      short .no_xing_vbr_scale
  8606 0000622C AD                                      lodsd
  8607 0000622D E8DC9FFFFF                              call    bswap_eax
  8608 00006232 A3[7CF40000]                            mov     [mp3_xing_vbr_scale], eax
  8609                                  
  8610                                  .no_xing_vbr_scale:
  8611 00006237 C705[C89D0000]0000-                     mov	dword [mp3_bit_rate], 0
  8611 0000623F 0000               
  8612 00006241 A1[C09D0000]                            mov	eax, [mp3_sample_rate]
  8613 00006246 C1E003                                  shl	eax, 3
  8614 00006249 F725[14F40000]                          mul	dword [mp3_xing_filesize]
  8615 0000624F 8B0D[10F40000]                          mov	ecx, [mp3_xing_frames]
  8616 00006255 0FAF0D[C0F40000]                        imul	ecx, [mp3_nb_granules]
  8617 0000625C 69C940020000                            imul	ecx, 576        ; 18*32
  8618 00006262 39CA                                    cmp	edx, ecx
  8619 00006264 7307                                    jnb	short .overflow
  8620 00006266 F7F1                                    div	ecx
  8621 00006268 A3[C89D0000]                            mov	[mp3_bit_rate], eax
  8622                                  
  8623                                  .overflow:
  8624 0000626D C3                                      retn
  8625                                  
  8626                                  
  8627                                  ; =============== S U B R O U T I N E =======================================
  8628                                  
  8629                                  		; 20/10/2024
  8630                                  mp3_decode_frame:
  8631 0000626E 890D[B0F40000]                          mov     [mp3_src_remain], ecx
  8632 00006274 893D[94F40000]                          mov     [mp3_samples_dst], edi
  8633 0000627A F605[54760000]10                        test    byte [cpuid_flags], 10h
  8634 00006281 740E                                    jz      short .no_rdtsc_supported@@@@
  8635 00006283 0F31                                    rdtsc
  8636 00006285 2905[14780000]                          sub     [rdtsc_total], eax
  8637 0000628B 1915[18780000]                          sbb     [rdtsc_total+4], edx
  8638                                  
  8639                                  .no_rdtsc_supported@@@@:
  8640 00006291 E8DC9FFFFF                              call    mp3_search_get_header
  8641 00006296 0F8294010000                            jc      .error
  8642 0000629C A1[A89D0000]                            mov     eax, [mp3_src_frame_size]
  8643 000062A1 83F800                                  cmp     eax, 0
  8644 000062A4 0F8E86010000                            jle     .error
  8645 000062AA 3B05[B0F40000]                          cmp     eax, [mp3_src_remain]
  8646 000062B0 0F877A010000                            ja      .error
  8647 000062B6 8935[ACF40000]                          mov     [mp3_bitstream_start], esi
  8648                                  		; 11/01/2025
  8649                                  		;mov	eax, 32
  8650                                  
  8651                                  .mp3mac_bitstream_set_position:
  8652                                  		; 22/10/2024
  8653                                                  ;mov    esi, [mp3_bitstream_start]
  8654                                                  ;mov    cl, al
  8655                                                  ;shr    eax, 3
  8656                                                  ;and    cl, 7
  8657                                                  ;mov	eax, 4
  8658                                                  ;add    esi, eax
  8659 000062BC 83C604                                  add     esi, 4
  8660 000062BF E8529FFFFF                              call    mp3_recollect_bits
  8661                                  
  8662                                  .mp3mac_get_n_bits:
  8663                                                  ;mov    eax, ebp        ; mp3_col32
  8664                                                  ;shl    ebp, cl
  8665                                                  ;rol    eax, cl
  8666                                                  ;xor    eax, ebp        ; mp3_col32
  8667                                                  ;sub    ch, cl          ; sub mp3_colNN,num
  8668                                                  ;jns    short .cont
  8669                                                  ;mov    cl, ch          ; mov cl,mp3_colNN
  8670                                                  ;add    ch, 16
  8671                                                  ;rol    ebp, cl         ; rol mp3_col32,cl
  8672                                                  ;mov    bp, [esi]       ; mov mp3_col16,word ptr [esi]
  8673                                                  ;add    esi, 2
  8674                                                  ;ror    bp, 8           ; endianess
  8675                                                  ;ror    ebp, cl         ; ror mp3_col32,cl
  8676                                  
  8677                                  .cont:
  8678 000062C4 E8AFA1FFFF                              call	mp3_bitstream_read_header_extra
  8679 000062C9 E839A3FFFF                              call	mp3_bitstream_read_granules
  8680 000062CE 0F825C010000                            jc	.error
  8681 000062D4 E88D9FFFFF                              call	mp3_uncollect_bits
  8682 000062D9 8935[A49D0000]                          mov	[mp3_src_data_location], esi
  8683 000062DF 833D[94F40000]00                        cmp	dword [mp3_samples_dst], 0
  8684 000062E6 0F840F010000                            jz	.skip_decoding
  8685 000062EC E8ECA7FFFF                              call	mp3_bitstream_append_to_main_data_pool
  8686 000062F1 833D[98F40000]00                        cmp	dword [mp3_samples_output_size], 0
  8687 000062F8 0F84FD000000                            jz	.skip_decoding
  8688 000062FE C705[A4F40000]0000-                     mov	dword [mp3_curr_granule], 0
  8688 00006306 0000               
  8689 00006308 BB[C4F40000]                            mov	ebx, mp3_granules
  8690                                  
  8691                                  .body_granule_lop:
  8692 0000630D 891D[F82C0500]                          mov	[_@@granule_addr], ebx
  8693 00006313 C705[A0F40000]0000-                     mov	dword [mp3_curr_channel], 0
  8693 0000631B 0000               
  8694                                  
  8695                                  .body_channel_lop:
  8696 0000631D 8B4304                                  mov     eax, [ebx+4]    ; [ebx+$mp3gr_part2_3_start]
  8697 00006320 8B35[ACF40000]                          mov     esi, [mp3_bitstream_start]
  8698 00006326 88C1                                    mov     cl, al          ; mp3mac_bitstream_set_position
  8699 00006328 C1E803                                  shr     eax, 3
  8700 0000632B 80E107                                  and     cl, 7
  8701 0000632E 01C6                                    add     esi, eax
  8702 00006330 E8E19EFFFF                              call    mp3_recollect_bits
  8703 00006335 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
  8704 00006337 D3E5                                    shl     ebp, cl
  8705 00006339 D3C0                                    rol     eax, cl
  8706 0000633B 31E8                                    xor     eax, ebp
  8707 0000633D 28CD                                    sub     ch, cl
  8708 0000633F 7913                                    jns     short .cont@
  8709 00006341 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  8710 00006343 80C510                                  add     ch, 16
  8711 00006346 D3C5                                    rol     ebp, cl
  8712 00006348 668B2E                                  mov     bp, [esi]
  8713 0000634B 83C602                                  add     esi, 2
  8714 0000634E 66C1CD08                                ror     bp, 8
  8715 00006352 D3CD                                    ror     ebp, cl
  8716                                  
  8717                                  .cont@:
  8718 00006354 E81AA8FFFF                              call    mp3_bitstream_read_scalefacs
  8719 00006359 E812AAFFFF                              call    mp3_get_exponents_from_scale_factors
  8720 0000635E E856ABFFFF                              call    mp3_huffman_decode ; reads up to $mp3gr_part2_3_end
  8721 00006363 0F82C7000000                            jc      .error
  8722                                  
  8723                                  .body_channel_next:
  8724 00006369 81C340130000                            add	ebx, 4928       ; $mp3gr_entrysiz*2
  8725 0000636F FF05[A0F40000]                          inc	dword [mp3_curr_channel]
  8726 00006375 A1[A0F40000]                            mov	eax, [mp3_curr_channel]
  8727 0000637A 3B05[D09D0000]                          cmp	eax, [mp3_output_num_channels]
  8728 00006380 729B                                    jb	short .body_channel_lop
  8729 00006382 8B1D[F82C0500]                          mov	ebx, [_@@granule_addr]
  8730                                  
  8731                                  .mp3mac_push_bitstream:
  8732 00006388 51                                      push	ecx
  8733 00006389 55                                      push	ebp
  8734 0000638A 56                                      push	esi
  8735 0000638B E827B0FFFF                              call	mp3_compute_stereo
  8736 00006390 C705[A0F40000]0000-                     mov	dword [mp3_curr_channel], 0
  8736 00006398 0000               
  8737                                  
  8738                                  .cast_channel_lop:
  8739 0000639A E8F0B2FFFF                              call    mp3_reorder_block
  8740 0000639F E885B3FFFF                              call    mp3_compute_antialias
  8741 000063A4 E870BCFFFF                              call    mp3_compute_imdct
  8742 000063A9 81C340130000                            add     ebx, 4928       ; $mp3gr_entrysiz*2
  8743 000063AF FF05[A0F40000]                          inc	dword [mp3_curr_channel]
  8744 000063B5 A1[A0F40000]                            mov     eax, [mp3_curr_channel]
  8745 000063BA 3B05[D09D0000]                          cmp     eax, [mp3_output_num_channels]
  8746 000063C0 72D8                                    jc      short .cast_channel_lop
  8747                                  
  8748                                  .mp3mac_pop_bitstream:
  8749 000063C2 5E                                      pop	esi
  8750 000063C3 5D                                      pop	ebp
  8751 000063C4 59                                      pop	ecx
  8752 000063C5 8B1D[F82C0500]                          mov	ebx, [_@@granule_addr]
  8753 000063CB 81C3A0090000                            add	ebx, 2464       ; $mp3gr_entrysiz
  8754 000063D1 FF05[A4F40000]                          inc	dword [mp3_curr_granule]
  8755 000063D7 A1[A4F40000]                            mov	eax, [mp3_curr_granule]
  8756 000063DC 3B05[C0F40000]                          cmp	eax, [mp3_nb_granules]
  8757 000063E2 0F8225FFFFFF                            jc	.body_granule_lop
  8758 000063E8 E8799EFFFF                              call	mp3_uncollect_bits
  8759 000063ED 3B35[A09D0000]                          cmp	esi, [main_data_pool_wr_ptr]
  8760 000063F3 773B                                    ja	short .error
  8761 000063F5 FF15[F49D0000]                          call	dword [mp3_synth_filter_proc] ; synth maths
  8762                                  
  8763                                  .skip_decoding:
  8764 000063FB A1[B4F40000]                            mov     eax, [mp3_extra_bytes]
  8765 00006400 0105[A89D0000]                          add     [mp3_src_frame_size], eax
  8766 00006406 A1[98F40000]                            mov     eax, [mp3_samples_output_size]
  8767 0000640B 0105[90F40000]                          add     [mp3_total_output_size], eax
  8768 00006411 FF05[8CF40000]                          inc     dword [mp3_num_frames_decoded]
  8769                                  
  8770                                  .timelog_end:                            ; timelog_end macro ttt
  8771 00006417 F605[54760000]10                        test    byte [cpuid_flags], 10h
  8772 0000641E 740F                                    jz      short .no_rdtsc_supported
  8773 00006420 0F31                                    rdtsc                   ; read timestamp counter
  8774 00006422 0105[14780000]                          add     [rdtsc_total], eax
  8775 00006428 1115[18780000]                          adc     [rdtsc_total+4], edx
  8776                                  		; 22/10/2024
  8777 0000642E F8                      		clc	
  8778                                  		; 20/10/2024
  8779                                  .no_rdtsc_supported:
  8780                                                  ;clc
  8781 0000642F C3                                      retn
  8782                                  
  8783                                  .error:
  8784 00006430 F605[54760000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_total
  8785 00006437 740E                                    jz      short .no_rdtsc_supported@
  8786 00006439 0F31                                    rdtsc
  8787 0000643B 0105[14780000]                          add     [rdtsc_total], eax
  8788 00006441 1115[18780000]                          adc     [rdtsc_total+4], edx
  8789                                  
  8790                                  		; 20/10/2024
  8791                                  .no_rdtsc_supported@:
  8792 00006447 A1[B4F40000]                            mov     eax, [mp3_extra_bytes]
  8793 0000644C 0105[A89D0000]                          add     [mp3_src_frame_size], eax
  8794 00006452 F9                                      stc
  8795 00006453 C3                                      retn
  8796                                  
  8797                                  
  8798                                  ; =============== S U B R O U T I N E =======================================
  8799                                  
  8800                                  
  8801                                  mp3_init:
  8802 00006454 BF[A08D0000]                            mov     edi, main_data_pool_start ; = mp3_context_start
  8803                                                  ;mov    ecx, 74916      ; (mp3_context_end-mp3_context_start)/4
  8804 00006459 B984240100                              mov     ecx, (mp3_context_end-mp3_context_start)/4
  8805 0000645E 31C0                                    xor     eax, eax        ; ERRIF @@len AND 03h
  8806 00006460 F3AB                                    rep stosd               ; clear context
  8807 00006462 C705[A09D0000]-                         mov	dword [main_data_pool_wr_ptr], main_data_pool_start
  8807 00006468 [A08D0000]         
  8808 0000646C 833D[EC840000]00                        cmp     dword [mp3_initialized], 0
  8809 00006473 753C                                    jnz     short .already_initialized
  8810 00006475 E8CAF6FFFF                              call    mp3_integer_init_is_stereo_lsf
  8811 0000647A E823F7FFFF                              call    mp3_integer_init_mdct_windows
  8812 0000647F E846F7FFFF                              call    mp3_integer_init_table_4_3
  8813 00006484 E8A4F7FFFF                              call    mp3_integer_init_exponent
  8814 00006489 E8F3F4FFFF                              call    mp3_any_init_synth_window
  8815 0000648E E8D2F5FFFF                              call    mp3_any_init_band_indices
  8816 00006493 E8F7F5FFFF                              call    mp3_any_init_lsf_sf_expand
  8817 00006498 E840F6FFFF                              call    mp3_any_init_huff_tables
  8818 0000649D E8D0F8FFFF                              call    mp3_init_log_constants
  8819 000064A2 E8A3F5FFFF                              call    mp3_init_post_collapse
  8820 000064A7 C705[EC840000]0100-                     mov     dword [mp3_initialized], 1
  8820 000064AF 0000               
  8821                                  
  8822                                  .already_initialized:
  8823 000064B1 0FB605[50760000]                        movzx   eax, byte [option_fast]
  8824 000064B8 C705[D89D0000]0200-                     mov     dword [mp3_bytes_per_sample], 2
  8824 000064C0 0000               
  8825 000064C2 D1E0                                    shl     eax, 1
  8826 000064C4 0205[4E760000]                          add     al, [option_8bit]
  8827 000064CA A801                                    test    al, 1
  8828 000064CC 740A                                    jz      short .not_8bit
  8829 000064CE C705[D89D0000]0100-                     mov     dword [mp3_bytes_per_sample], 1
  8829 000064D6 0000               
  8830                                  
  8831                                  .not_8bit:
  8832 000064D8 6BC003                                  imul    eax, 3
  8833 000064DB 0205[4F760000]                          add     al, [option_rate_shift]
  8834 000064E1 8B0485[128B0000]                        mov     eax, [mp3_synth_filter_procs+eax*4]
  8835 000064E8 A3[F49D0000]                            mov     [mp3_synth_filter_proc], eax
  8836 000064ED C3                                      retn
  8837                                  
  8838                                  
  8839                                  ; =============== S U B R O U T I N E =======================================
  8840                                  
  8841                                  
  8842                                  mp3_check_1st_frame:
  8843 000064EE E855FAFFFF                              call    mp3_exclude_id3_and_tag
  8844 000064F3 8B35[042D0500]                          mov     esi, [stream_pos]
  8845 000064F9 8B0D[082D0500]                          mov     ecx, [bytes_left]
  8846 000064FF 31FF                                    xor     edi, edi
  8847 00006501 31ED                                    xor     ebp, ebp
  8848 00006503 E866FDFFFF                              call    mp3_decode_frame
  8849 00006508 0F82E9000000                            jc     .error
  8850 0000650E E898FCFFFF                              call    mp3_check_xing_info
  8851 00006513 BA[708B0000]                            mov     edx, txt_file_size ; "file size: "
  8852 00006518 E8DB000000                              call    wrstr_edx
  8853 0000651D A1[80F40000]                            mov     eax, [mp3_file_size]
  8854 00006522 E807010000                              call    wr_decimal_eax_with_thousands_seperator
  8855 00006527 BA[7C8B0000]                            mov     edx, txt_id3_size ; ", id3 size: "
  8856 0000652C E8C7000000                              call    wrstr_edx
  8857 00006531 A1[84F40000]                            mov     eax, [mp3_id3_size]
  8858 00006536 E8F3000000                              call    wr_decimal_eax_with_thousands_seperator
  8859 0000653B BA[898B0000]                            mov     edx, txt_tag_size ; ", tag size: "
  8860 00006540 E8B3000000                              call    wrstr_edx
  8861 00006545 A1[88F40000]                            mov     eax, [mp3_tag_size]
  8862 0000654A E8DF000000                              call    wr_decimal_eax_with_thousands_seperator
  8863 0000654F E8B5000000                              call    wrcrlf
  8864 00006554 BA[968B0000]                            mov     edx, txt_input ; "input: "
  8865 00006559 E89A000000                              call    wrstr_edx
  8866 0000655E A1[C09D0000]                            mov     eax, [mp3_sample_rate]
  8867 00006563 E8CD000000                              call    wr_decimal_eax
  8868 00006568 BA[A78B0000]                            mov     edx, txt_hz ; " hz, "
  8869 0000656D E886000000                              call    wrstr_edx
  8870 00006572 A1[CC9D0000]                            mov     eax, [mp3_src_num_channels]
  8871 00006577 E8B9000000                              call    wr_decimal_eax
  8872 0000657C BA[AD8B0000]                            mov     edx, txt_channels ; " channels, "
  8873 00006581 E872000000                              call    wrstr_edx
  8874 00006586 A1[C89D0000]                            mov     eax, [mp3_bit_rate]
  8875 0000658B 31D2                                    xor     edx, edx
  8876 0000658D B9E8030000                              mov     ecx, 1000
  8877 00006592 F7F1                                    div     ecx
  8878 00006594 E89C000000                              call    wr_decimal_eax
  8879 00006599 BA[BE8B0000]                            mov     edx, txt_kbit_s ; " kbit/s"
  8880 0000659E E855000000                              call    wrstr_edx
  8881 000065A3 E861000000                              call    wrcrlf
  8882 000065A8 BA[9E8B0000]                            mov     edx, txt_output ; "output: "
  8883 000065AD E846000000                              call    wrstr_edx
  8884 000065B2 A1[D49D0000]                            mov     eax, [mp3_output_sample_rate]
  8885 000065B7 E879000000                              call    wr_decimal_eax
  8886 000065BC BA[A78B0000]                            mov     edx, txt_hz ; " hz, "
  8887 000065C1 E832000000                              call    wrstr_edx
  8888 000065C6 A1[D09D0000]                            mov     eax, [mp3_output_num_channels]
  8889 000065CB E865000000                              call    wr_decimal_eax
  8890 000065D0 BA[AD8B0000]                            mov     edx, txt_channels ; " channels, "
  8891 000065D5 E81E000000                              call    wrstr_edx
  8892 000065DA A1[D89D0000]                            mov     eax, [mp3_bytes_per_sample]
  8893 000065DF C1E003                                  shl     eax, 3
  8894 000065E2 E84E000000                              call    wr_decimal_eax
  8895 000065E7 BA[B98B0000]                            mov     edx, txt_bit ; " bit"
  8896 000065EC E807000000                              call    wrstr_edx
  8897 000065F1 E813000000                              call    wrcrlf
  8898 000065F6 F8                                      clc
  8899                                  .error:
  8900 000065F7 C3                                      retn
  8901                                  
  8902                                  ;.error:
  8903                                                  ;stc
  8904                                                  ;retn
  8905                                  
  8906                                  
  8907                                  ; =============== S U B R O U T I N E =======================================
  8908                                  
  8909                                  ;wrchr:
  8910                                                  ;pusha
  8911                                                  ;mov     [wrchr_buf], al
  8912                                                  ;push    0            ; lpOverlapped
  8913                                                  ;push    diskresult   ; lpNumberOfBytesWritten
  8914                                                  ;push    1            ; nNumberOfBytesToWrite
  8915                                                  ;push    wrchr_buf    ; lpBuffer
  8916                                                  ;push    [std_out]    ; hFile
  8917                                                  ;call    [WriteFile]
  8918                                                  ;popa
  8919                                                  ;retn
  8920                                  
  8921                                  
  8922                                  ; =============== S U B R O U T I N E =======================================
  8923                                  
  8924                                  
  8925                                  wrstr_edx:
  8926 000065F8 50                                      push    eax
  8927                                  .lop:
  8928 000065F9 8A02                                    mov     al, [edx]
  8929 000065FB 42                                      inc     edx
  8930 000065FC 3C00                                    cmp     al, 0
  8931 000065FE 7407                                    jz      short .done
  8932 00006600 E801040000                              call    wrchr
  8933 00006605 EBF2                                    jmp     short .lop
  8934                                  .done:
  8935 00006607 58                                      pop     eax
  8936 00006608 C3                                      retn
  8937                                  
  8938                                  ; =============== S U B R O U T I N E =======================================
  8939                                  
  8940                                  
  8941                                  wrcrlf:
  8942 00006609 50                                      push    eax
  8943 0000660A B00D                                    mov     al, 0Dh
  8944 0000660C E8F5030000                              call    wrchr
  8945 00006611 B00A                                    mov     al, 0Ah
  8946 00006613 E8EE030000                              call    wrchr
  8947 00006618 58                                      pop     eax
  8948 00006619 C3                                      retn
  8949                                  
  8950                                  ; =============== S U B R O U T I N E =======================================
  8951                                  
  8952                                  
  8953                                  wrspc:
  8954 0000661A 50                                      push    eax
  8955 0000661B B020                                    mov     al, 20h
  8956 0000661D E8E4030000                              call    wrchr
  8957 00006622 58                                      pop     eax
  8958 00006623 C3                                      retn
  8959                                  
  8960                                  ; =============== S U B R O U T I N E =======================================
  8961                                  
  8962                                  
  8963                                  wrcomma:
  8964 00006624 50                                      push    eax
  8965 00006625 B02C                                    mov     al, ','
  8966 00006627 E8DA030000                              call    wrchr
  8967 0000662C 58                                      pop     eax
  8968 0000662D C3                                      retn
  8969                                  
  8970                                  ; =============== S U B R O U T I N E =======================================
  8971                                  
  8972                                  
  8973                                  wr_decimal_eax_with_thousands_seperator:
  8974 0000662E 51                                      push    ecx
  8975 0000662F 66B90200                                mov     cx, 2
  8976 00006633 EB03                                    jmp     short wr_decimal_eax_inj
  8977                                  
  8978                                  ; =============== S U B R O U T I N E =======================================
  8979                                  
  8980                                  
  8981                                  wr_decimal_eax:
  8982 00006635 51                                      push    ecx
  8983 00006636 31C9                                    xor     ecx, ecx
  8984                                  
  8985                                  wr_decimal_eax_inj:
  8986 00006638 50                                      push    eax
  8987 00006639 53                                      push    ebx
  8988 0000663A 52                                      push    edx
  8989 0000663B BB00CA9A3B                              mov     ebx, 1000000000 ; nine zeroes (32bit max 4.294.967.296)
  8990                                  
  8991                                  .dezlop:
  8992 00006640 FEC9                                    dec     cl
  8993 00006642 750C                                    jnz     short .no_thousands
  8994 00006644 B103                                    mov     cl, 3
  8995 00006646 80FD00                                  cmp     ch, 0
  8996 00006649 7405                                    jz      short .no_thousands
  8997 0000664B E8D4FFFFFF                              call    wrcomma
  8998                                  
  8999                                  .no_thousands:
  9000 00006650 31D2                                    xor     edx, edx
  9001 00006652 F7F3                                    div     ebx
  9002 00006654 83FB01                                  cmp     ebx, 1
  9003 00006657 7404                                    jz      short .force_last_zero
  9004 00006659 08C5                                    or      ch, al
  9005 0000665B 7407                                    jz      short .skip_lead_zero
  9006                                  
  9007                                  .force_last_zero:
  9008 0000665D 0430                                    add     al, 30h
  9009 0000665F E8A2030000                              call    wrchr
  9010                                  
  9011                                  .skip_lead_zero:
  9012 00006664 52                                      push    edx
  9013 00006665 89D8                                    mov     eax, ebx
  9014 00006667 BB0A000000                              mov     ebx, 10
  9015 0000666C 31D2                                    xor     edx, edx
  9016 0000666E F7F3                                    div     ebx
  9017 00006670 83F800                                  cmp     eax, 0
  9018 00006673 89C3                                    mov     ebx, eax
  9019 00006675 58                                      pop     eax
  9020 00006676 75C8                                    jnz     short .dezlop
  9021 00006678 5A                                      pop     edx
  9022 00006679 5B                                      pop     ebx
  9023 0000667A 58                                      pop     eax
  9024 0000667B 59                                      pop     ecx
  9025 0000667C C3                                      retn
  9026                                  
  9027                                  ; =============== S U B R O U T I N E =======================================
  9028                                  
  9029                                  
  9030                                  wrdigital:
  9031 0000667D 50                                      push    eax
  9032 0000667E 240F                                    and     al, 0Fh
  9033 00006680 3C09                                    cmp     al, 9
  9034 00006682 7602                                    jbe     short .this
  9035 00006684 0407                                    add     al, 7
  9036                                  
  9037                                  .this:
  9038 00006686 0430                                    add     al, 30h
  9039 00006688 E879030000                              call    wrchr
  9040 0000668D 58                                      pop     eax
  9041 0000668E C3                                      retn
  9042                                  
  9043                                  ; =============== S U B R O U T I N E =======================================
  9044                                  
  9045                                  
  9046                                  wrhexal:
  9047 0000668F C0C804                                  ror     al, 4
  9048 00006692 E8E6FFFFFF                              call    wrdigital
  9049 00006697 C0C804                                  ror     al, 4
  9050 0000669A EBE1                                    jmp     short wrdigital
  9051                                  
  9052                                  ; =============== S U B R O U T I N E =======================================
  9053                                  
  9054                                  
  9055                                  wrhexax:
  9056 0000669C 66C1C808                                ror     ax, 8
  9057 000066A0 E8EAFFFFFF                              call    wrhexal
  9058 000066A5 66C1C808                                ror     ax, 8
  9059 000066A9 EBE4                                    jmp     short wrhexal
  9060                                  
  9061                                  ; =============== S U B R O U T I N E =======================================
  9062                                  
  9063                                  
  9064                                  wrhexeax:
  9065 000066AB C1C810                                  ror     eax, 10h
  9066 000066AE E8E9FFFFFF                              call    wrhexax
  9067 000066B3 C1C810                                  ror     eax, 10h
  9068 000066B6 EBE4                                    jmp     short wrhexax
  9069                                  
  9070                                  ; =============== S U B R O U T I N E =======================================
  9071                                  
  9072                                  %if 0
  9073                                  
  9074                                  get_commandline:
  9075                                                  call    [GetCommandLineA]
  9076                                                  mov     esi, eax
  9077                                                  mov     edi, cmdline_buf
  9078                                                  mov     ecx, 1024       ; cmdline_max
  9079                                  
  9080                                  .get_cmdline_lop:
  9081                                                  lodsb
  9082                                                  cmp     al, 0
  9083                                                  stosb
  9084                                                  loopne  .get_cmdline_lop
  9085                                                  mov     byte [edi-1], 0
  9086                                                  mov     esi, cmdline_buf
  9087                                                  mov     edi, cmdline_buf
  9088                                                  call    _@@get_item     ; get/skip name of the executable itself
  9089                                  
  9090                                  .get_items_lop:
  9091                                                  call    _@@get_item
  9092                                                  mov     al, [ebx]
  9093                                                  cmp     al, 0
  9094                                                  jz      .done
  9095                                                  cmp     al, '/'
  9096                                                  jz      short .switch
  9097                                                  cmp     al, '-'
  9098                                                  jz      short .switch
  9099                                                  mov     eax, [edi-5]
  9100                                                  or      eax, 20202000h
  9101                                                  ;cmp    eax, 'vaw.'     ; ".wav"
  9102                                                  cmp     eax, '.wav'     ; FASM & NASM syntax
  9103                                                  jnz     short .not_wav_name
  9104                                                  mov     [mp3_dst_fname], ebx
  9105                                                  jmp     short .get_items_lop
  9106                                  
  9107                                  .not_wav_name:
  9108                                                  mov     eax, [edi-5]
  9109                                                  or      eax, 20202000h
  9110                                                  ;cmp    eax, 'mcp.'     ; ".pcm"
  9111                                                  cmp     eax, '.pcm'     ; FASM & NASM syntax
  9112                                                  jnz     short .not_pcm_name
  9113                                                  mov     [mp3_pcm_fname], ebx
  9114                                                  jmp     short .get_items_lop
  9115                                  
  9116                                  .not_pcm_name:
  9117                                                  mov     [mp3_src_fname], ebx
  9118                                                  jmp     short .get_items_lop
  9119                                  
  9120                                  .switch:
  9121                                                  ;cmp	dword [ebx+1], 'onom' ; "mono"
  9122                                                  cmp	dword [ebx+1], 'mono'
  9123                                                  jnz     short .not_switch_mono
  9124                                                  mov	byte [option_mono], 1
  9125                                                  jmp	short .get_items_lop
  9126                                  
  9127                                  .not_switch_mono:
  9128                                                  ;cmp	dword [ebx+1], 'tsaf' ; "fast"
  9129                                                  cmp	dword [ebx+1], 'fast' ; FASM & NASM syntax
  9130                                                  jnz	short .not_fast_option
  9131                                                  mov	byte [option_fast], 1
  9132                                                  jmp	short .get_items_lop
  9133                                  
  9134                                  .not_fast_option:
  9135                                                  ;cmp    dword [ebx+1], 'tib8' ; "8bit"
  9136                                                  cmp     dword [ebx+1], '8bit'
  9137                                                  jnz     short .not_switch_8bit
  9138                                                  mov     [option_8bit], 1
  9139                                                  jmp     .get_items_lop
  9140                                  
  9141                                  .not_switch_8bit:
  9142                                                  ;cmp    dword [ebx+1], 'flah' ; "half"
  9143                                                  cmp     dword [ebx+1], 'half'
  9144                                                  jnz     short .not_switch_half
  9145                                                  mov     [option_rate_shift], 1
  9146                                                  jmp     .get_items_lop
  9147                                  
  9148                                  .not_switch_half:
  9149                                                  ;cmp    dword [ebx+1], 'rauq' ; "quar"
  9150                                                  cmp     dword [ebx+1], 'quar'
  9151                                                  jnz     short .not_switch_quarter
  9152                                                  mov     [option_rate_shift], 2
  9153                                                  jmp     .get_items_lop
  9154                                  
  9155                                  .not_switch_quarter:
  9156                                                  ;cmp    dword [ebx+1], 'tset' ; "test"
  9157                                                  cmp     dword [ebx+1], 'test'
  9158                                                  jnz     short .not_switch_test
  9159                                                  mov     byte [option_test], 1
  9160                                                  jmp     .get_items_lop
  9161                                  
  9162                                  .not_switch_test:
  9163                                                  jmp     short .help
  9164                                  
  9165                                  .done:
  9166                                                  cmp	dword [mp3_src_fname], 0
  9167                                                  jz      short .help
  9168                                                  ;;; Erdogan Tan - 17/10/2024
  9169                                                  mov     edx, txt_ctrlc
  9170                                                  call    wrstr_edx
  9171                                                  ;;;
  9172                                                  mov     edx, txt_file ; "file: "
  9173                                                  call    wrstr_edx
  9174                                                  mov     edx, [mp3_src_fname]
  9175                                                  call    wrstr_edx
  9176                                                  call    wrcrlf
  9177                                                  clc
  9178                                                  retn
  9179                                  
  9180                                  .help:
  9181                                                  ;;; Erdogan Tan - 17/10/2024
  9182                                                  mov     edx, txt_about
  9183                                                  call    wrstr_edx
  9184                                                  ;;;
  9185                                                  mov     edx, txt_help ; "usage: mp3play input.mp3 [output.wav] ["...
  9186                                                  call    wrstr_edx
  9187                                                  stc
  9188                                                  retn
  9189                                  
  9190                                  %endif
  9191                                  
  9192                                  ; =============== S U B R O U T I N E =======================================
  9193                                  
  9194                                  %if 0
  9195                                  
  9196                                  _@@get_item:
  9197                                                  lodsb
  9198                                                  dec     al
  9199                                                  cmp     al, 1Fh         ; 20-1
  9200                                                  jbe     short _@@get_item ; _@@skip_spc_lop
  9201                                                  dec     esi
  9202                                                  mov     ebx, edi
  9203                                                  mov     ah, 0           ; flag initially not quoted
  9204                                  
  9205                                  .char_lop:
  9206                                                  lodsb
  9207                                                  cmp     al, '"'
  9208                                                  jnz     short .no_quote
  9209                                                  xor     ah, 1
  9210                                                  jmp     short .char_lop
  9211                                  
  9212                                  .no_quote:
  9213                                                  stosb
  9214                                                  cmp     al, 0
  9215                                                  jz      short .src_end
  9216                                                  cmp     al, 20h
  9217                                                  ja      short .char_lop
  9218                                                  cmp     ah, 0           ; ignore spaces if inside "quoted area"
  9219                                                  jnz     short .char_lop
  9220                                                  mov     byte [edi-1], 0 ; eol (replace space by 00h)
  9221                                                  retn
  9222                                  
  9223                                  .src_end:
  9224                                                  dec     esi
  9225                                                  retn
  9226                                  
  9227                                  %endif
  9228                                  
  9229                                  ; =============== S U B R O U T I N E =======================================
  9230                                  
  9231                                  
  9232                                  %if 0
  9233                                  
  9234                                  open_and_mmap_the_file:
  9235                                                  push    0               ; hTemplateFile
  9236                                                  push    0               ; dwFlagsAndAttributes
  9237                                                  push    3               ; dwCreationDisposition
  9238                                                  push    0               ; lpSecurityAttributes
  9239                                                  push    1               ; dwShareMode
  9240                                                  push    80000000h       ; dwDesiredAccess
  9241                                                  push    [mp3_src_fname] ; lpFileName
  9242                                                  call    [CreateFileA]
  9243                                                  mov     [hFile], eax
  9244                                                  cmp     eax, 0FFFFFFFFh ; INVALID_HANDLE_VALUE
  9245                                                  jz      short .not_found
  9246                                                  push    0               ; lpFileSizeHigh
  9247                                                  push    [hFile]      ; hFile
  9248                                                  call    [GetFileSize]
  9249                                                  mov     [mp3_file_size], eax
  9250                                                  mov     [bytes_left], eax
  9251                                                  push    0               ; lpName
  9252                                                  push    0               ; dwMaximumSizeLow
  9253                                                  push    0               ; dwMaximumSizeHigh
  9254                                                  push    2               ; flProtect
  9255                                                  push    0               ; lpFileMappingAttributes
  9256                                                  push    [hFile]      ; hFile
  9257                                                  call    [CreateFileMappingA]
  9258                                                  mov     [hMap], eax
  9259                                                  push    0               ; dwNumberOfBytesToMap
  9260                                                  push    0               ; dwFileOffsetLow
  9261                                                  push    0               ; dwFileOffsetHigh
  9262                                                  push    4               ; dwDesiredAccess
  9263                                                  push    [hMap]       ; hFileMappingObject
  9264                                                  call    [MapViewOfFile]
  9265                                                  mov     [stream_start], eax
  9266                                                  mov     [stream_pos], eax
  9267                                                  mov     esi, [stream_start]
  9268                                                  mov     ecx, [bytes_left]
  9269                                  
  9270                                  .lll:
  9271                                                  lodsb
  9272                                                  loop    .lll
  9273                                                  clc
  9274                                                  retn
  9275                                  
  9276                                  .not_found:
  9277                                                  mov     edx, txt_not_found ; "cannot open source file\r\n"
  9278                                                  call    wrstr_edx
  9279                                                  stc
  9280                                                  retn
  9281                                  
  9282                                  %endif
  9283                                  
  9284                                  
  9285                                  ; =============== S U B R O U T I N E =======================================
  9286                                  
  9287                                  
  9288                                  mp3_plain_test_without_output:
  9289 000066B8 60                                      pusha
  9290 000066B9 8B35[042D0500]                          mov     esi, [stream_pos]
  9291 000066BF 8B0D[082D0500]                          mov     ecx, [bytes_left]
  9292 000066C5 BF[00500500]                            mov     edi, sample_buffer
  9293 000066CA 31ED                                    xor     ebp, ebp
  9294 000066CC E89DFBFFFF                              call    mp3_decode_frame
  9295 000066D1 61                                      popa
  9296 000066D2 7218                                    jc      short .exit
  9297 000066D4 A1[A89D0000]                            mov     eax, [mp3_src_frame_size]
  9298 000066D9 83F800                                  cmp     eax, 0
  9299 000066DC 740E                                    jz      short .exit
  9300 000066DE 0105[042D0500]                          add     [stream_pos], eax
  9301 000066E4 2905[082D0500]                          sub     [bytes_left], eax
  9302 000066EA EBCC                                    jmp     short mp3_plain_test_without_output
  9303                                  
  9304                                  .exit:
  9305 000066EC C3                                      retn
  9306                                  
  9307                                  
  9308                                  ; =============== S U B R O U T I N E =======================================
  9309                                  
  9310                                  		; 20/10/2024
  9311                                  mp3_cast_to_wav_file:
  9312 000066ED E86F000000                              call	mp3_create_wav_file
  9313                                  		; 20/10/2024
  9314 000066F2 730A                    		jnc	short .lop
  9315 000066F4 BBFFFFFFFF              		mov	ebx, -1
  9316 000066F9 E91B050000              		jmp	ExitProcess
  9317                                  .lop:
  9318 000066FE 60                                      pusha
  9319 000066FF 8B35[042D0500]                          mov	esi, [stream_pos]
  9320 00006705 8B0D[082D0500]                          mov	ecx, [bytes_left]
  9321 0000670B BF[00500500]                            mov	edi, sample_buffer
  9322 00006710 31ED                                    xor	ebp, ebp
  9323 00006712 E857FBFFFF                              call	mp3_decode_frame
  9324 00006717 61                                      popa
  9325 00006718 7241                                    jc	short .exit
  9326 0000671A A1[A89D0000]                            mov	eax, [mp3_src_frame_size]
  9327 0000671F 83F800                                  cmp	eax, 0
  9328 00006722 7437                                    jz	short .exit
  9329 00006724 0105[042D0500]                          add	[stream_pos], eax
  9330 0000672A 2905[082D0500]                          sub	[bytes_left], eax
  9331                                                  ;push	0          ; lpOverlapped
  9332                                                  ;push	diskresult ; lpNumberOfBytesWritten
  9333 00006730 FF35[98F40000]                          push	dword [mp3_samples_output_size] ; nNumberOfBytesToWrite
  9334 00006736 68[00500500]                            push	sample_buffer ; lpBuffer
  9335 0000673B FF35[8C2D0500]                          push	dword [mp3_wav_handle] ; hFile
  9336                                                  ;call	[WriteFile]
  9337                                  		;;;
  9338                                  		; 20/10/2024
  9339 00006741 E8DC040000              		call	WriteFile
  9340 00006746 7213                    		jc	short .exit
  9341                                  		;;;
  9342 00006748 A1[98F40000]                            mov	eax, [mp3_samples_output_size]
  9343 0000674D 0105[08850000]                          add	dword [mp3_wav_header+4], eax
  9344 00006753 0105[2C850000]                          add	dword [mp3_wav_header+28h], eax
  9345 00006759 EBA3                                    jmp	short .lop
  9346                                  
  9347                                  .exit:
  9348 0000675B E860000000                              call	mp3_close_wav_file
  9349 00006760 C3                                      retn
  9350                                  
  9351                                  
  9352                                  ; =============== S U B R O U T I N E =======================================
  9353                                  
  9354                                  		; 20/10/2024
  9355                                  
  9356                                  mp3_create_wav_file:
  9357 00006761 A1[D49D0000]                            mov     eax, [mp3_output_sample_rate]
  9358 00006766 8B0D[D09D0000]                          mov     ecx, [mp3_output_num_channels]
  9359 0000676C 8B15[D89D0000]                          mov     edx, [mp3_bytes_per_sample]
  9360 00006772 66890D[1A850000]                        mov     word [mp3_wav_header+16h], cx
  9361 00006779 A3[1C850000]                            mov     dword [mp3_wav_header+18h], eax
  9362 0000677E 0FAFCA                                  imul    ecx, edx
  9363 00006781 0FAFC1                                  imul    eax, ecx
  9364 00006784 C1E203                                  shl     edx, 3
  9365 00006787 A3[20850000]                            mov     dword [mp3_wav_header+1Ch], eax
  9366 0000678C 66890D[24850000]                        mov     word [mp3_wav_header+20h], cx
  9367 00006793 668915[26850000]                        mov     word [mp3_wav_header+22h], dx
  9368                                                  ;push   0               ; hTemplateFile
  9369                                                  ;push   80h             ; dwFlagsAndAttributes
  9370                                                  ;push   2               ; dwCreationDisposition
  9371                                                  ;push   0               ; lpSecurityAttributes
  9372                                                  ;push   0               ; dwShareMode
  9373                                                  ;push   0C0000000h      ; dwDesiredAccess
  9374 0000679A FF35[FC840000]                          push    dword [mp3_dst_fname] ; lpFileName
  9375                                                  ;call   [CreateFileA]
  9376                                  		;;;
  9377                                  		; 20/10/2024
  9378 000067A0 E8AF040000              		call	CreateFile
  9379 000067A5 7301                    		jnc	short .ok
  9380 000067A7 C3                      		retn
  9381                                  .ok:
  9382                                  		;;;
  9383 000067A8 A3[8C2D0500]                            mov     [mp3_wav_handle], eax
  9384                                                  ; 20/10/2024
  9385                                  		;call   mp3_write_wav_header
  9386                                                  ;retn
  9387                                  
  9388                                  
  9389                                  ; =============== S U B R O U T I N E =======================================
  9390                                  
  9391                                  		; 20/10/2024
  9392                                  mp3_write_wav_header:
  9393                                                  ;push	0               ; lpOverlapped
  9394                                                  ;push	diskresult      ; lpNumberOfBytesWritten
  9395 000067AD 6A2C                                    push	44 ; 2Ch        ; nNumberOfBytesToWrite
  9396 000067AF 68[04850000]                            push	mp3_wav_header  ; lpBuffer
  9397 000067B4 FF35[8C2D0500]                          push	dword [mp3_wav_handle] ; hFile
  9398                                                  ;call	[WriteFile]
  9399                                                  ;;;
  9400                                  		; 20/10/2024
  9401 000067BA E863040000                              call	WriteFile
  9402                                                  ;;;
  9403 000067BF C3                      		retn
  9404                                  
  9405                                  
  9406                                  ; =============== S U B R O U T I N E =======================================
  9407                                  
  9408                                  		; 20/10/2024
  9409                                  mp3_close_wav_file:
  9410 000067C0 6A00                                    push	0               ; dwMoveMethod
  9411                                                  ;push	0               ; lpDistanceToMoveHigh
  9412 000067C2 6A00                                    push	0               ; lDistanceToMove
  9413 000067C4 FF35[8C2D0500]                          push	dword [mp3_wav_handle] ; hFile
  9414                                                  ;call	[SetFilePointer]
  9415                                  		;;;
  9416                                  		; 20/10/2024
  9417 000067CA E8C1040000              		call	SetFilePointer
  9418                                  		;;;
  9419 000067CF E8D9FFFFFF                              call	mp3_write_wav_header
  9420 000067D4 FF35[8C2D0500]                          push	dword [mp3_wav_handle] ; hObject
  9421                                                  ;call	[CloseHandle]
  9422                                  		;;;
  9423                                  		; 20/10/2024
  9424 000067DA E8EF040000              		call	CloseFile
  9425                                  		;;;
  9426 000067DF C3                                      retn
  9427                                  
  9428                                  
  9429                                  ; =============== S U B R O U T I N E =======================================
  9430                                  
  9431                                  		; 20/10/2024
  9432                                  mp3_verify_pcm_file:
  9433 000067E0 E804020000                              call    mp3_open_pcm_file
  9434                                  		;;;
  9435                                  		; 20/10/2024
  9436 000067E5 7301                    		jnc	short .verify
  9437 000067E7 C3                      		retn	; nothing to do (return without error msg)
  9438                                  .verify:
  9439                                  		;;;
  9440 000067E8 C705[942D0500]0000-                     mov	dword [_@@max_diff], 0
  9440 000067F0 0000               
  9441 000067F2 C705[982D0500]0000-                     mov	dword [_@@avg_diff], 0
  9441 000067FA 0000               
  9442 000067FC C705[9C2D0500]0000-                     mov	dword [_@@avg_diff+4], 0
  9442 00006804 0000               
  9443 00006806 C705[A02D0500]0000-                     mov	dword [pcm_filepos], 0
  9443 0000680E 0000               
  9444                                  
  9445                                  .lop:
  9446 00006810 60                                      pusha
  9447 00006811 8B35[042D0500]                          mov     esi, [stream_pos]
  9448 00006817 8B0D[082D0500]                          mov     ecx, [bytes_left]
  9449 0000681D BF[00500500]                            mov     edi, sample_buffer
  9450 00006822 31ED                                    xor     ebp, ebp
  9451 00006824 E845FAFFFF                              call    mp3_decode_frame
  9452 00006829 61                                      popa
  9453 0000682A 0F824D010000                            jb      .exit
  9454 00006830 A1[A89D0000]                            mov     eax, [mp3_src_frame_size]
  9455 00006835 83F800                                  cmp     eax, 0
  9456 00006838 0F843F010000                            jz      .exit
  9457 0000683E 31C0                                    xor     eax, eax
  9458 00006840 833D[D09D0000]02                        cmp     dword [mp3_output_num_channels], 2
  9459 00006847 7207                                    jb      short .this_mono_convert
  9460 00006849 0FB605[4D760000]                        movzx   eax, byte [option_mono]
  9461                                  
  9462                                  .this_mono_convert:
  9463 00006850 A3[A42D0500]                            mov	[_@@mono_convert], eax
  9464 00006855 8A0D[4F760000]                          mov	cl, [option_rate_shift]
  9465 0000685B B802000000                              mov	eax, 2
  9466 00006860 D3E0                                    shl	eax, cl
  9467 00006862 66A3[A82D0500]                          mov	[_@@pcm_steps], ax
  9468 00006868 66A3[AA2D0500]                          mov	[_@@pcm_steps+2], ax
  9469 0000686E 833D[D09D0000]02                        cmp	dword [mp3_output_num_channels], 2
  9470 00006875 7213                                    jb	short .these_steps
  9471 00006877 66C705[A82D0500]02-                     mov	word [_@@pcm_steps], 2
  9471 0000687F 00                 
  9472 00006880 8D4400FE                                lea     eax, [eax*2-2] ; [0FFFFFFFEh+eax*2]
  9473 00006884 66A3[AA2D0500]                          mov     [_@@pcm_steps+2], ax
  9474                                  
  9475                                  .these_steps:
  9476 0000688A A1[98F40000]                            mov     eax, [mp3_samples_output_size]
  9477 0000688F 8A0D[4F760000]                          mov     cl, [option_rate_shift]
  9478 00006895 020D[4E760000]                          add     cl, [option_8bit]
  9479 0000689B 020D[A42D0500]                          add     cl, byte [_@@mono_convert]
  9480 000068A1 D3E0                                    shl     eax, cl
  9481                                                  ;push   0               ; lpOverlapped
  9482                                                  ;push   diskresult      ; lpNumberOfBytesRead
  9483 000068A3 50                                      push    eax             ; nNumberOfBytesToRead
  9484 000068A4 68[00620500]                            push    (sample_buffer+1200h) ; sample_buffer+MP3_MAX_OUTPUT_SIZE
  9485 000068A9 FF35[902D0500]                          push    dword [mp3_pcm_handle] ; hFile
  9486                                                  ;call   [ReadFile]
  9487                                                  ;;;
  9488                                  		; 20/10/2024
  9489 000068AF E8E9030000              		call	ReadFile
  9490 000068B4 7306                    		jnc	short .pcm_read_ok
  9491                                  		; Note: File read error msg has been displayed
  9492 000068B6 E83F010000              		call	mp3_close_pcm_file
  9493 000068BB C3                      		retn
  9494                                  .pcm_read_ok:
  9495                                  		;;;
  9496 000068BC 8B0D[98F40000]          		mov     ecx, [mp3_samples_output_size]
  9497 000068C2 D1E9                                    shr     ecx, 1
  9498 000068C4 0F849D000000                            jz      .compare_done
  9499 000068CA BE[00500500]                            mov     esi, sample_buffer ; decoded .mp3
  9500 000068CF BF[00620500]                            mov     edi, (sample_buffer+1200h) ; loaded .pcm
  9501                                  
  9502                                  .compare_lop:
  9503 000068D4 0FBF17                                  movsx   edx, word [edi]
  9504 000068D7 833D[A42D0500]00                        cmp     dword [_@@mono_convert], 0
  9505 000068DE 7408                                    jz      short .no_mono_convert
  9506 000068E0 0FBF4702                                movsx   eax, word [edi+2]
  9507 000068E4 01C2                                    add     edx, eax
  9508 000068E6 D1FA                                    sar     edx, 1
  9509                                  
  9510                                  .no_mono_convert:
  9511 000068E8 803D[4E760000]00                        cmp	byte [option_8bit], 0
  9512 000068EF 7508                                    jnz	short .compare_8bit
  9513 000068F1 0FBF06                                  movsx	eax, word [esi] ; get 16bit from decoded .mp3
  9514 000068F4 83C602                                  add	esi, 2
  9515 000068F7 EB13                                    jmp	short .compare_this
  9516                                  
  9517                                  .compare_8bit:
  9518 000068F9 0FB606                                  movzx   eax, byte [esi]
  9519 000068FC 46                                      inc     esi             ; convert .pcm
  9520 000068FD 81C200800000                            add     edx, 8000h      ; make unsigned
  9521 00006903 C1FA08                                  sar     edx, 8          ; div 100h
  9522 00006906 80D200                                  adc     dl, 0           ; round up
  9523 00006909 80DA00                                  sbb     dl, 0           ; undo on unsigned overflow
  9524                                  
  9525                                  .compare_this:
  9526 0000690C 29D0                                    sub     eax, edx
  9527 0000690E 7902                                    jns     short .compare_abs ; calc difference
  9528 00006910 F7D8                                    neg     eax
  9529                                  
  9530                                  .compare_abs:
  9531 00006912 0105[982D0500]                          add     [_@@avg_diff], eax
  9532 00006918 8315[9C2D0500]00                        adc     dword [_@@avg_diff+4], 0
  9533 0000691F 3B05[942D0500]                          cmp     eax, [_@@max_diff]
  9534 00006925 7223                                    jb      short .not_max
  9535 00006927 A3[942D0500]                            mov     [_@@max_diff], eax
  9536 0000692C 8B15[A02D0500]                          mov     edx, [pcm_filepos]
  9537 00006932 8915[AC2D0500]                          mov     [_@@worst_pcm_filepos], edx
  9538 00006938 8B15[042D0500]                          mov     edx, [stream_pos]
  9539 0000693E 2B15[002D0500]                          sub     edx, [stream_start]
  9540 00006944 8915[B02D0500]                          mov     [_@@worst_mp3_filepos], edx
  9541                                  
  9542                                  .not_max:
  9543 0000694A 0FB705[A82D0500]                        movzx   eax, word [_@@pcm_steps]
  9544 00006951 C10D[A82D0500]10                        ror     dword [_@@pcm_steps], 16 ; next .pcm addr
  9545 00006958 01C7                                    add     edi, eax
  9546 0000695A 0105[A02D0500]                          add     [pcm_filepos], eax
  9547 00006960 49                                      dec     ecx
  9548 00006961 0F856DFFFFFF                            jnz    .compare_lop
  9549                                  
  9550                                  .compare_done:
  9551 00006967 A1[A89D0000]                            mov     eax, [mp3_src_frame_size]
  9552 0000696C 0105[042D0500]                          add     [stream_pos], eax
  9553 00006972 2905[082D0500]                          sub     [bytes_left], eax
  9554 00006978 E993FEFFFF                              jmp     .lop
  9555                                  
  9556                                  .exit:
  9557 0000697D E878000000                              call    mp3_close_pcm_file
  9558 00006982 BA[608C0000]                            mov     edx, _@@txt_verify1 ; "verify max difference = "
  9559 00006987 E86CFCFFFF                              call    wrstr_edx
  9560 0000698C A1[942D0500]                            mov     eax, [_@@max_diff]
  9561 00006991 E89FFCFFFF                              call    wr_decimal_eax
  9562 00006996 BA[798C0000]                            mov     edx, _@@txt_verify1_at_mp3 ; " at mp3:"
  9563 0000699B E858FCFFFF                              call    wrstr_edx
  9564 000069A0 A1[B02D0500]                            mov     eax, [_@@worst_mp3_filepos]
  9565 000069A5 E801FDFFFF                              call    wrhexeax
  9566 000069AA BA[828C0000]                            mov     edx, _@@txt_verify2 ; ", average difference = "
  9567 000069AF E844FCFFFF                              call    wrstr_edx
  9568 000069B4 A1[982D0500]                            mov     eax, [_@@avg_diff]
  9569 000069B9 8B15[9C2D0500]                          mov     edx, [_@@avg_diff+4]
  9570 000069BF 8B0D[90F40000]                          mov     ecx, [mp3_total_output_size]
  9571 000069C5 D1E9                                    shr     ecx, 1
  9572 000069C7 F7F1                                    div     ecx
  9573 000069C9 E867FCFFFF                              call    wr_decimal_eax
  9574 000069CE B02E                                    mov     al, '.'
  9575 000069D0 E831000000                              call    wrchr
  9576 000069D5 B80A000000                              mov     eax, 10
  9577 000069DA F7E2                                    mul     edx             ; fraction*10
  9578 000069DC F7F1                                    div     ecx
  9579 000069DE E89AFCFFFF                              call    wrdigital       ; show fraction of average difference
  9580 000069E3 E821FCFFFF                              call    wrcrlf
  9581 000069E8 C3                                      retn
  9582                                  
  9583                                  
  9584                                  ; =============== S U B R O U T I N E =======================================
  9585                                  
  9586                                  		; 20/10/2024
  9587                                  mp3_open_pcm_file:
  9588                                                  ;push	0               ; hTemplateFile
  9589                                                  ;push	80h             ; dwFlagsAndAttributes
  9590                                                  ;push	3               ; dwCreationDisposition
  9591                                                  ;push	0               ; lpSecurityAttributes
  9592                                                  ;push	0               ; dwShareMode
  9593                                                  ;push	80000000h       ; dwDesiredAccess
  9594 000069E9 FF35[00850000]                          push	dword [mp3_pcm_fname] ; lpFileName
  9595                                                  ;call	[CreateFileA]
  9596                                  		;;;
  9597                                  		; 20/10/2024
  9598 000069EF E88F020000              		call	OpenFile
  9599                                  		;jc	short .return
  9600                                  		;;;
  9601 000069F4 A3[902D0500]                            mov	[mp3_pcm_handle], eax
  9602                                  ;.return:
  9603 000069F9 C3                                      retn
  9604                                  
  9605                                  
  9606                                  ; =============== S U B R O U T I N E =======================================
  9607                                  
  9608                                  		; 20/10/2024
  9609                                  mp3_close_pcm_file:
  9610 000069FA FF35[902D0500]                          push	dword [mp3_pcm_handle] ; hObject
  9611                                                  ;call	[CloseHandle]
  9612                                                  ;retn
  9613                                  		;;;
  9614                                  		; 20/10/2024
  9615 00006A00 E8C9020000              		call	CloseFile
  9616                                  		;;;
  9617 00006A05 C3                      		retn
  9618                                  
  9619                                  
  9620                                  ; ---------------------------------------------------------------------------
  9621                                  
  9622                                  ; =============== S U B R O U T I N E =======================================
  9623                                  
  9624                                  		; 20/10/2024
  9625                                  wrchr:
  9626                                  		; TRDOS 386 System Call
  9627                                  		; ebx = 2 -> write character onto STDOUT
  9628                                  		;push	ebx
  9629                                  		;push	ecx
  9630                                  		;push	eax
  9631 00006A06 60                      		pusha
  9632                                  		;;mov	dword [diskresult], 0
  9633                                  		sys	_stdio, 2, eax
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006A07 BB02000000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 00006A0C 89C1                <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006A0E B82E000000          <1>  mov eax, %1
   130                              <1> 
   131 00006A13 CD40                <1>  int 40h
  9634                                  		;jnc	short .ok ; if EOF, eax = 0
  9635                                  		;xor	eax, eax ; 0
  9636                                  ;.ok:
  9637                                  		;mov	[diskresult], eax ; written byte count
  9638 00006A15 61                      		popa
  9639                                  		;pop	eax
  9640                                  		;pop	ecx
  9641                                  		;pop	ebx
  9642 00006A16 C3                      		retn
  9643                                  
  9644                                  
  9645                                  ; =============== S U B R O U T I N E =======================================
  9646                                  
  9647                                  		; 20/10/2024
  9648                                  get_commandline:
  9649                                  		; 21/10/2024
  9650 00006A17 5D                      		pop	ebp ; near call return address
  9651                                                 	; esp = command line start address
  9652                                  		;mov	[command_line],esp
  9653 00006A18 59                      		pop	ecx	; argc  ; number of arguments
  9654                                  		; esp = pointer to argument 1 ; argv[0]
  9655 00006A19 49                      		dec	ecx
  9656 00006A1A 0F8405010000            		jz	.help
  9657 00006A20 58                      		pop	eax ; argument 1 (PRG file name)
  9658 00006A21 5E                      		pop	esi ; argument 2 (must be input file name)
  9659 00006A22 BF[0C2D0500]            		mov     edi, cmdline_buf
  9660                                  .get_item:
  9661 00006A27 89FB                    		mov	ebx, edi
  9662                                  .char_lop:
  9663 00006A29 AC                                      lodsb
  9664 00006A2A AA                      		stosb
  9665 00006A2B 3C00                                    cmp     al, 0
  9666 00006A2D 75FA                                    jnz 	short .char_lop
  9667                                  		
  9668 00006A2F 8A03                                    mov     al, [ebx]
  9669 00006A31 3C2F                                    cmp     al, '/'
  9670 00006A33 7442                                    jz      short .switch
  9671 00006A35 3C2D                                    cmp     al, '-'
  9672 00006A37 743E                                    jz      short .switch
  9673 00006A39 8B47FB                                  mov     eax, [edi-5]
  9674 00006A3C 0D00202020                              or      eax, 20202000h
  9675 00006A41 3D2E776176                              cmp     eax, '.wav'     ; FASM & NASM syntax
  9676 00006A46 7510                                    jnz     short .not_wav_name
  9677 00006A48 891D[FC840000]                          mov     [mp3_dst_fname], ebx
  9678                                  .get_items_lop:
  9679 00006A4E 49                      		dec	ecx
  9680 00006A4F 0F8494000000            		jz	.done
  9681 00006A55 5E                      		pop	esi   ; next argument
  9682 00006A56 EBCF                    		jmp     short .get_item
  9683                                  
  9684                                  .not_wav_name:
  9685 00006A58 8B47FB                                  mov     eax, [edi-5]
  9686 00006A5B 0D00202020                              or      eax, 20202000h
  9687 00006A60 3D2E70636D                              cmp     eax, '.pcm'     ; FASM & NASM syntax
  9688 00006A65 7508                                    jnz     short .not_pcm_name
  9689 00006A67 891D[00850000]                          mov     [mp3_pcm_fname], ebx
  9690 00006A6D EBDF                                    jmp     short .get_items_lop
  9691                                  
  9692                                  .not_pcm_name:
  9693 00006A6F 891D[F8840000]                          mov     [mp3_src_fname], ebx
  9694 00006A75 EBD7                                    jmp     short .get_items_lop
  9695                                  
  9696                                  .switch:
  9697 00006A77 817B016D6F6E6F                          cmp	dword [ebx+1], 'mono'
  9698 00006A7E 7509                                    jnz	short .not_switch_mono
  9699 00006A80 C605[4D760000]01                        mov	byte [option_mono], 1
  9700 00006A87 EBC5                                    jmp	short .get_items_lop
  9701                                  
  9702                                  .not_switch_mono:
  9703 00006A89 817B0166617374                          cmp	dword [ebx+1], 'fast' ; FASM & NASM syntax
  9704 00006A90 7509                                    jnz	short .not_fast_option
  9705 00006A92 C605[50760000]01                        mov	byte [option_fast], 1
  9706 00006A99 EBB3                                    jmp	short .get_items_lop
  9707                                  
  9708                                  .not_fast_option:
  9709 00006A9B 817B0138626974                          cmp	dword [ebx+1], '8bit'
  9710 00006AA2 7509                                    jnz	short .not_switch_8bit
  9711 00006AA4 C605[4E760000]01                        mov	byte [option_8bit], 1
  9712 00006AAB EBA1                                    jmp	short .get_items_lop
  9713                                  
  9714                                  .not_switch_8bit:
  9715 00006AAD 817B0168616C66                          cmp	dword [ebx+1], 'half'
  9716 00006AB4 7509                                    jnz	short .not_switch_half
  9717 00006AB6 C605[4F760000]01                        mov	byte [option_rate_shift], 1
  9718 00006ABD EB8F                                    jmp	short .get_items_lop
  9719                                  
  9720                                  .not_switch_half:
  9721 00006ABF 817B0171756172                          cmp	dword [ebx+1], 'quar'
  9722 00006AC6 750C                                    jnz	short .not_switch_quarter
  9723 00006AC8 C605[4F760000]02                        mov	byte [option_rate_shift], 2
  9724 00006ACF E97AFFFFFF                              jmp	.get_items_lop
  9725                                  
  9726                                  .not_switch_quarter:
  9727 00006AD4 817B0174657374                          cmp	dword [ebx+1], 'test'
  9728 00006ADB 7548                                    jnz	short .not_switch_test
  9729 00006ADD C605[4C760000]01                        mov	byte [option_test], 1
  9730 00006AE4 E965FFFFFF                              jmp	.get_items_lop
  9731                                  
  9732                                  .done:
  9733 00006AE9 833D[F8840000]00                        cmp	dword [mp3_src_fname], 0
  9734 00006AF0 7433                                    jz	short .help
  9735                                                  ;;; Erdogan Tan - 17/10/2024
  9736                                                  ;mov	edx, txt_ctrlc
  9737                                                  ;call	wrstr_edx
  9738                                  		; 20/10/2024
  9739                                  		sys	_msg, txt_ctrlc, txt_ctrlc_size, 0Fh ; white
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006AF2 BB[9A8C0000]        <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 00006AF7 B919000000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 00006AFC BA0F000000          <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006B01 B823000000          <1>  mov eax, %1
   130                              <1> 
   131 00006B06 CD40                <1>  int 40h
  9740                                                  ;;;
  9741 00006B08 BA[698B0000]                            mov	edx, txt_file ; "file: "
  9742 00006B0D E8E6FAFFFF                              call	wrstr_edx
  9743 00006B12 8B15[F8840000]                          mov	edx, [mp3_src_fname]
  9744 00006B18 E8DBFAFFFF                              call	wrstr_edx
  9745 00006B1D E8E7FAFFFF                              call	wrcrlf
  9746 00006B22 F8                                      clc
  9747 00006B23 55                      		push	ebp	; return address
  9748 00006B24 C3                                      retn
  9749                                  
  9750                                  .not_switch_test:
  9751                                  .help:
  9752                                                  ;;; Erdogan Tan - 17/10/2024
  9753 00006B25 BA[B38C0000]                            mov	edx, txt_about
  9754 00006B2A E8C9FAFFFF                              call	wrstr_edx
  9755                                                  ;;;
  9756 00006B2F BA[E08B0000]                            mov	edx, txt_help ; "usage: mp3play input.mp3 [output.wav] ["...
  9757 00006B34 E8BFFAFFFF                              call	wrstr_edx
  9758 00006B39 F9                                      stc
  9759 00006B3A 55                      		push	ebp	; return address
  9760 00006B3B C3                                      retn
  9761                                  
  9762                                  ; =============== S U B R O U T I N E =======================================
  9763                                  
  9764                                  		; 21/10/2024
  9765                                  set_break:
  9766                                  		; set [u.break] -end of bss- address to
  9767                                  		; end_of_bss at first (mp3 file will be loaded
  9768                                  		; at the end of bss)
  9769                                  		; ([u.break] initially points to the end of PRG file
  9770                                  		; -code and data- except BSS section)
  9771                                  		;
  9772                                  		; TRDOS 386 system call
  9773                                  		; Set break address
  9774                                  		; ebx = new [u.break]
  9775                                  		;sys	_break, end_of_bss
  9776                                  		; eax = new break address (dword aligned)
  9777                                  
  9778                                  		; 10/01/2025
  9779                                  		sys	_break, 100000h ; end of 1st 1MB
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006B3C BB00001000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006B41 B811000000          <1>  mov eax, %1
   130                              <1> 
   131 00006B46 CD40                <1>  int 40h
  9780                                  
  9781 00006B48 A3[002D0500]                            mov	[stream_start], eax
  9782 00006B4D A3[042D0500]                            mov	[stream_pos], eax
  9783                                  
  9784 00006B52 C3                      		retn
  9785                                  
  9786                                  
  9787                                  ; =============== S U B R O U T I N E =======================================
  9788                                  
  9789                                  		; 20/10/2024
  9790                                  
  9791                                  open_and_mmap_the_file:
  9792                                  		; 21/10/2024
  9793                                  		; TRDOS 386 system call
  9794                                  		; Open File
  9795                                  		; ebx = pointer to filename
  9796                                  		; ecx = open mode, 0 = read
  9797                                               	sys	_open, [mp3_src_fname], 0
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006B53 8B1D[F8840000]      <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 00006B59 B900000000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006B5E B805000000          <1>  mov eax, %1
   130                              <1> 
   131 00006B63 CD40                <1>  int 40h
  9798 00006B65 7270                    		jc	short .not_found
  9799                                  
  9800 00006B67 A3[FC2C0500]                            mov     [hFile], eax
  9801                                  
  9802                                                 	; get file size by using systell system call
  9803                                   		; (not applicable for TRDOS 386 Kernel v2.0.9 and earlier)
  9804                                  		; TRDOS 386 system call
  9805                                  		; Get current file (offset) pointer
  9806                                  		; ebx = file handle (file descriptor)
  9807                                  		; ecx = 0, offset
  9808                                  		; edx = 2, from the end of file
  9809                                  		;sys	_tell, eax, 0, 2
  9810                                                  ;mov     [mp3_file_size], eax
  9811                                  
  9812                                  		; *** get file size ***
  9813                                  		; TRDOS 386 system call
  9814                                  		; Set file (offset) pointer to file size 
  9815                                  		; (needed for TRDOS kernel v2.0.9 and earlier)
  9816                                  		; ebx = file handle (file descriptor)
  9817                                  		; ecx = 0, offset
  9818                                  		; edx = 2, from the end of file
  9819                                  		sys	_seek, eax, 0, 2
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006B6C 89C3                <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 00006B6E B900000000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 00006B73 BA02000000          <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006B78 B813000000          <1>  mov eax, %1
   130                              <1> 
   131 00006B7D CD40                <1>  int 40h
  9820                                  		; TRDOS 386 system call
  9821                                  		; Get current file (offset) pointer
  9822                                  		; (needed for TRDOS 386 kernel version 2.0.9 and earlier)
  9823 00006B7F 31D2                    		xor	edx, edx ; 0
  9824                                  		; ecx = 0
  9825                                  		; ebx = file handle
  9826                                  		sys	_tell
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006B81 B814000000          <1>  mov eax, %1
   130                              <1> 
   131 00006B86 CD40                <1>  int 40h
  9827 00006B88 A3[80F40000]            		mov     [mp3_file_size], eax
  9828                                  
  9829                                  		; *** set file offset pointer to 0 again ***
  9830                                  		; TRDOS 386 system call
  9831                                  		; Set file (offset) pointer
  9832                                  		; ebx = file handle (file descriptor)
  9833                                  		; ecx = 0, offset
  9834                                  		; edx = 0, from the beginning/start of file
  9835 00006B8D 50                      		push	eax
  9836                                  		sys	_seek
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006B8E B813000000          <1>  mov eax, %1
   130                              <1> 
   131 00006B93 CD40                <1>  int 40h
  9837 00006B95 58                      		pop	eax
  9838                                  
  9839                                  		; now, set [u.break] address to the end of mp3 file
  9840                                  		; at memory -in BSS section-
  9841                                  		; (not necessary for TRDOS 386 PRG files)
  9842                                  		; (this system call will allocate user memory pages
  9843                                  		;  before sysread system call.. early)
  9844                                  		;add	eax, end_of_bss
  9845                                  		; 13/01/2025
  9846 00006B96 0500001000              		add	eax, 100000h ; + end of 1st 1MB
  9847                                  		; TRDOS 386 system call
  9848                                  		; Set break address
  9849                                  		; ebx = new [u.break]
  9850                                  		sys	_break, eax
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006B9B 89C3                <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006B9D B811000000          <1>  mov eax, %1
   130                              <1> 
   131 00006BA2 CD40                <1>  int 40h
  9851                                  
  9852                                  		; TRDOS 386 system call
  9853                                  		; Read file
  9854                                  		; ebx = file handle (file descriptor)
  9855                                  		; ecx = buffer address
  9856                                  		; edx = byte count
  9857                                  		sys	_read, [hFile], [stream_start], [mp3_file_size]
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006BA4 8B1D[FC2C0500]      <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 00006BAA 8B0D[002D0500]      <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 00006BB0 8B15[80F40000]      <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006BB6 B803000000          <1>  mov eax, %1
   130                              <1> 
   131 00006BBB CD40                <1>  int 40h
  9858 00006BBD 7204                    		jc	short .read_error
  9859 00006BBF 39D0                    		cmp	eax, edx
  9860 00006BC1 730E                    		jnb	short .ok
  9861                                  		;or	eax, eax
  9862                                  		;jnz	short .ok
  9863                                  .read_error:		
  9864                                  		; TRDOS 386 system call
  9865                                  		; Close file
  9866                                  		; ebx = file handle (file descriptor)
  9867                                  		;sys	_close, [hFile]
  9868                                   		sys	_close
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006BC3 B806000000          <1>  mov eax, %1
   130                              <1> 
   131 00006BC8 CD40                <1>  int 40h
  9869                                  
  9870 00006BCA BA[BB6C0000]            		mov	edx, txt_read_err
  9871 00006BCF EB0B                    		jmp	short .r_err_msg
  9872                                  .ok:
  9873 00006BD1 A3[082D0500]                            mov     [bytes_left], eax ; read count
  9874 00006BD6 C3                      		retn
  9875                                  .not_found:
  9876 00006BD7 BA[C68B0000]                            mov     edx, txt_not_found ; "cannot open source file\r\n"
  9877                                  .r_err_msg:
  9878 00006BDC E817FAFFFF                              call    wrstr_edx
  9879 00006BE1 F9                                      stc
  9880 00006BE2 C3                                      retn
  9881                                  
  9882                                  ;txt_read_err	db 'File read error!',0Dh,0Ah,0
  9883                                  
  9884                                  
  9885                                  ; =============== S U B R O U T I N E =======================================
  9886                                  
  9887                                  		; 20/10/2024
  9888                                  print_msg:
  9889                                  		; TRDOS 386 system call
  9890                                  		; write/display message on screen
  9891                                  		; ebx = ASCIIZ message (text) address
  9892                                  		; ecx = max. message length (stop count before char zero)
  9893                                  		; edx = character color (CGA)
  9894 00006BE3 B9FF000000              		mov	ecx, 255
  9895 00006BE8 BA0B000000              		mov	edx, 0Bh ; DL ; cyan
  9896                                  		sys	_msg
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006BED B823000000          <1>  mov eax, %1
   130                              <1> 
   131 00006BF2 CD40                <1>  int 40h
  9897 00006BF4 C3                      		retn
  9898                                  
  9899                                  
  9900                                  ; =============== S U B R O U T I N E =======================================
  9901                                  
  9902                                  		; 20/10/2024
  9903                                  GetTickCount:
  9904                                  		; TRDOS 386 system call
  9905                                  		; get current time, get tick count
  9906                                  		; ebx = 4 -> get count of system timer ticks
  9907                                  		sys	_time, 4
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006BF5 BB04000000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006BFA B80D000000          <1>  mov eax, %1
   130                              <1> 
   131 00006BFF CD40                <1>  int 40h
  9908                                  		; eax = system timer ticks (18.2 ticks per second)
  9909 00006C01 BA15F4BC20              		mov	edx, 549254165	; 10^10/18.2
  9910 00006C06 F7E2                    		mul	edx
  9911                                  		; edx:eax = milliseconds * 10^7
  9912 00006C08 BB80969800              		mov	ebx, 10000000
  9913 00006C0D F7F3                    		div	ebx		; 10^7
  9914                                  		; eax = milliseconds
  9915 00006C0F 81FA404B4C00            		cmp	edx, 5000000	; 10^7/2
  9916 00006C15 7201                    		jb	short .ok
  9917 00006C17 40                      		inc	eax		; round up
  9918                                  .ok:
  9919 00006C18 C3                      		retn
  9920                                  
  9921                                  
  9922                                  ; =============== E X I T ===================================================
  9923                                  
  9924                                  		; 20/10/2024
  9925                                  ExitProcess:
  9926 00006C19 31DB                    		xor	ebx, ebx  ; mov ebx, 0  ; exit code
  9927                                  		sys	_exit
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006C1B B801000000          <1>  mov eax, %1
   130                              <1> 
   131 00006C20 CD40                <1>  int 40h
  9928                                  ;hang:
  9929                                  		;jmp	short hang
  9930                                  
  9931                                  
  9932                                  ; =============== S U B R O U T I N E =======================================
  9933                                  
  9934                                  		; 20/10/2024
  9935                                  WriteFile:
  9936 00006C22 58                      		pop	eax ; near call return address
  9937 00006C23 5B                      		pop	ebx
  9938 00006C24 59                      		pop	ecx
  9939 00006C25 5A                      		pop	edx
  9940 00006C26 50                      		push	eax
  9941                                  		; TRDOS 386 system call
  9942                                  		; Write file
  9943                                  		; ebx = file handle (file descriptor)
  9944                                  		; ecx = buffer address
  9945                                  		; edx = byte count
  9946                                  		sys	_write
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006C27 B804000000          <1>  mov eax, %1
   130                              <1> 
   131 00006C2C CD40                <1>  int 40h
  9947 00006C2E 730F                    		jnc	short .ok
  9948 00006C30 39D0                    		cmp	eax, edx
  9949 00006C32 730B                    		jnb	short .ok
  9950                                  		;or	eax, eax
  9951                                  		;jnz	short .ok
  9952                                  
  9953 00006C34 BA[406C0000]            		mov	edx, txt_write_err
  9954 00006C39 E8BAF9FFFF                              call    wrstr_edx
  9955 00006C3E F9                                      stc
  9956                                  .ok:
  9957 00006C3F C3                                      retn
  9958                                  
  9959 00006C40 46696C652077726974-     txt_write_err	db 'File write error!',0Dh,0Ah,0
  9959 00006C49 65206572726F72210D-
  9959 00006C52 0A00               
  9960                                  
  9961                                  
  9962                                  ; =============== S U B R O U T I N E =======================================
  9963                                  
  9964                                  		; 20/10/2024
  9965                                  CreateFile:
  9966 00006C54 58                      		pop	eax ; near call return address
  9967 00006C55 5B                      		pop	ebx
  9968 00006C56 50                      		push	eax
  9969                                  		; TRDOS 386 system call
  9970                                  		; Create file
  9971                                  		; ebx = (ASCIIZ) file name address
  9972                                  		; ecx = mode
  9973 00006C57 31C9                    		xor	ecx, ecx ; CL ; mov ecx, 0 ; ordinary file
  9974                                  		sys	_creat
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006C59 B808000000          <1>  mov eax, %1
   130                              <1> 
   131 00006C5E CD40                <1>  int 40h
  9975 00006C60 730B                    		jnc	short .ok ; eax = file handle
  9976                                  
  9977 00006C62 BA[6E6C0000]            		mov	edx, txt_create_err
  9978 00006C67 E88CF9FFFF                              call    wrstr_edx
  9979 00006C6C F9                                      stc
  9980                                  .ok:
  9981 00006C6D C3                      		retn
  9982                                  
  9983 00006C6E 46696C652063726561-     txt_create_err	db 'File create error!',0Dh,0Ah,0
  9983 00006C77 7465206572726F7221-
  9983 00006C80 0D0A00             
  9984                                  
  9985                                  
  9986                                  ; =============== S U B R O U T I N E =======================================
  9987                                  
  9988                                  		; 20/10/2024
  9989                                  OpenFile:
  9990 00006C83 58                      		pop	eax ; near call return address
  9991 00006C84 5B                      		pop	ebx
  9992 00006C85 50                      		push	eax
  9993                                  		; TRDOS 386 system call
  9994                                  		; Open file
  9995                                  		; ebx = (ASCIIZ) file name address
  9996                                  		; ecx = mode
  9997 00006C86 31C9                    		xor	ecx, ecx ; CL ; mov ecx, 0 ; ordinary file
  9998                                  		sys	_open
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006C88 B805000000          <1>  mov eax, %1
   130                              <1> 
   131 00006C8D CD40                <1>  int 40h
  9999                                  		;jnc	short .ok ; eax = file handle
 10000                                  		;
 10001                                  		;mov	edx, txt_open_err
 10002                                                  ;call   wrstr_edx
 10003                                                  ;stc
 10004                                  ;.ok:
 10005 00006C8F C3                      		retn
 10006                                  
 10007                                  ;txt_open_err	db 'File not found!',0Dh,0Ah,0
 10008                                  		;db 'File open error!',ODh,0Ah,0
 10009                                  	 
 10010                                  
 10011                                  ; =============== S U B R O U T I N E =======================================
 10012                                  
 10013                                  		; 20/10/2024
 10014                                  SetFilePointer:
 10015 00006C90 58                      		pop	eax ; near call return address
 10016 00006C91 5B                      		pop	ebx
 10017 00006C92 59                      		pop	ecx
 10018 00006C93 5A                      		pop	edx
 10019 00006C94 50                      		push	eax
 10020                                  		; TRDOS 386 system call
 10021                                  		; Set file offset pointer  ; sysseek
 10022                                  		; ebx = file handle (file descriptor)
 10023                                  		; ecx = offset
 10024                                  		; edx = switch, DL = 0 = from the start of file
 10025                                  		;		     1 = from the current offset
 10026                                  		;		     2 = from the end of file
 10027                                  		sys	_seek
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006C95 B813000000          <1>  mov eax, %1
   130                              <1> 
   131 00006C9A CD40                <1>  int 40h
 10028                                  		; eax = (value of) new offset pointer
 10029                                  
 10030 00006C9C C3                      		retn
 10031                                  
 10032                                  
 10033                                  ; =============== S U B R O U T I N E =======================================
 10034                                  
 10035                                  		; 20/10/2024
 10036                                  ReadFile:
 10037 00006C9D 58                      		pop	eax ; near call return address
 10038 00006C9E 5B                      		pop	ebx
 10039 00006C9F 59                      		pop	ecx
 10040 00006CA0 5A                      		pop	edx
 10041 00006CA1 50                      		push	eax
 10042                                  		; TRDOS 386 system call
 10043                                  		; Read file
 10044                                  		; ebx = file handle (file descriptor)
 10045                                  		; ecx = buffer address
 10046                                  		; edx = byte count
 10047                                  		sys	_read
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006CA2 B803000000          <1>  mov eax, %1
   130                              <1> 
   131 00006CA7 CD40                <1>  int 40h
 10048 00006CA9 730F                    		jnc	short .ok
 10049 00006CAB 39D0                    		cmp	eax, edx
 10050 00006CAD 730B                    		jnb	short .ok
 10051                                  		;or	eax, eax
 10052                                  		;jnz	short .ok
 10053                                  
 10054 00006CAF BA[BB6C0000]            		mov	edx, txt_read_err
 10055 00006CB4 E83FF9FFFF                              call    wrstr_edx
 10056 00006CB9 F9                                      stc
 10057                                  .ok:
 10058 00006CBA C3                                      retn
 10059                                  
 10060 00006CBB 46696C652072656164-     txt_read_err	db 'File read error!',0Dh,0Ah,0
 10060 00006CC4 206572726F72210D0A-
 10060 00006CCD 00                 
 10061                                  
 10062                                  
 10063                                  ; =============== S U B R O U T I N E =======================================
 10064                                  
 10065                                  		; 20/10/2024
 10066                                  CloseFile:
 10067 00006CCE 58                      		pop	eax ; near call return address
 10068 00006CCF 5B                      		pop	ebx
 10069 00006CD0 50                      		push	eax
 10070                                  		; TRDOS 386 system call
 10071                                  		; Close file
 10072                                  		; ebx = file handle (file descriptor)
 10073                                  		sys	_close
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006CD1 B806000000          <1>  mov eax, %1
   130                              <1> 
   131 00006CD6 CD40                <1>  int 40h
 10074                                  
 10075 00006CD8 C3                      		retn
 10076                                  
 10077                                  
 10078                                  ; ---------------------------------------------------------------------------
 10079                                  ; TRDOS 386 Audio System Functions
 10080                                  ; ---------------------------------------------------------------------------
 10081                                  
 10082                                  ; =============== S U B R O U T I N E =======================================
 10083                                  
 10084                                  		; 10/01/2025
 10085                                  		; 20/10/2024
 10086                                  detect_enable_audio_device:
 10087 00006CD9 66C705[8A8D0000]80-     		mov	word [max_frequency], 48000
 10087 00006CE1 BB                 
 10088                                  		; 10/01/2025
 10089                                  		;mov	byte [blocks], 8
 10090                                  
 10091                                  		; check AC'97 hardware at first
 10092                                  		; (48kHz support)
 10093                                  		; TRDOS 386 system call
 10094                                  		; sysaudio
 10095                                  		; Detect (BH=1) AC'97 (BL=2) Audio Device
 10096                                  .ac97:
 10097                                          	sys	_audio, 0102h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006CE2 BB02010000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006CE7 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006CEC CD40                <1>  int 40h
 10098 00006CEE 7245                    		jc	short .sb16
 10099 00006CF0 C605[888D0000]02        		mov	byte [audio_hardware], 2 ; AC97
 10100                                  
 10101                                  		;;;;
 10102                                  		; 12/01/2025 (ref: playwav9.s, 18/12/2024)
 10103                                  		sys	_audio, 0E00h ; get audio controller info
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006CF7 BB000E0000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006CFC B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006D01 CD40                <1>  int 40h
 10104                                  		; EAX = IRQ Number in AL
 10105                                  		;	Audio Device Number in AH 
 10106                                  		; EBX = DEV/VENDOR ID
 10107                                  		;       (DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV)
 10108                                  		; ECX = BUS/DEV/FN 
 10109                                  		;       (00000000BBBBBBBBDDDDDFFF00000000)
 10110                                  		; EDX = NABMBAR/NAMBAR (for AC97)
 10111                                  		;      (Low word, DX = NAMBAR address)
 10112                                  		; EDX = Base IO Addr (DX) for SB16 & VT8233
 10113                                  
 10114 00006D03 891D[788D0000]          		mov	[dev_vendor], ebx
 10115 00006D09 890D[748D0000]          		mov	[bus_dev_fn], ecx
 10116                                  
 10117 00006D0F 668915[7C8D0000]                	mov     [NAMBAR], dx	; save audio mixer base addr
 10118                                  		;shr	edx, 16
 10119                                          	;mov    [NABMBAR], dx	; save bus master base addr
 10120 00006D16 8915[7C8D0000]          		mov	[NAMBAR], edx
 10121                                  
 10122 00006D1C A2[848D0000]            		mov	[ac97_int_ln_reg], al
 10123                                  		;;;;
 10124                                  		
 10125                                  		; TRDOS 386 system call
 10126                                  		; sysaudio
 10127                                  		; Get AC'97 Codec info
 10128                                  		; (Function 14, sub function 1)
 10129                                  		sys	_audio, 0E01h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006D21 BB010E0000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006D26 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006D2B CD40                <1>  int 40h
 10130                                  		; Save Variable Rate Audio support bit
 10131 00006D2D 2401                    		and	al, 1
 10132 00006D2F A2[898D0000]            		mov	[vra], al
 10133 00006D34 C3                      		retn
 10134                                  .sb16:
 10135                                  		; check Sound Blaster 16 card at second
 10136                                  		; (44100Hz support, but 24kHz will be used)
 10137                                  		; TRDOS 386 system call
 10138                                  		; sysaudio
 10139                                  		; Detect (BH=1) SB16 (BL=1) Audio Card
 10140                                          	sys	_audio, 0101h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006D35 BB01010000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006D3A B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006D3F CD40                <1>  int 40h
 10141 00006D41 7228                    		jc	short .vt8233
 10142 00006D43 C605[888D0000]01        		mov	byte [audio_hardware], 1 ; SB16
 10143 00006D4A 66C705[8A8D0000]44-     		mov	word [max_frequency], 44100
 10143 00006D52 AC                 
 10144                                  		; 10/01/2025
 10145                                  		;;mov	byte [blocks], 7
 10146                                  		;dec	byte [blocks]
 10147                                  
 10148                                  		;;;;
 10149                                  		; 12/01/2025 (ref: sb16play.s, 20/12/2024)
 10150                                  		sys	_audio, 0E00h ; get audio controller info
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006D53 BB000E0000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006D58 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006D5D CD40                <1>  int 40h
 10151                                  	
 10152 00006D5F 8915[808D0000]          		mov	[audio_io_base], edx
 10153 00006D65 A2[848D0000]            		mov	[audio_intr], al
 10154                                  		;;;;
 10155                                  
 10156 00006D6A C3                      		retn
 10157                                  .vt8233:
 10158                                  		; check VIA VT3237R (VT8233) hardware at third
 10159                                  		; (48kHz support)
 10160                                  		; TRDOS 386 system call
 10161                                  		; sysaudio
 10162                                  		; Detect (BH=1) VT8237R (BL=3) Audio Device
 10163                                  		sys	_audio, 0103h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006D6B BB03010000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006D70 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006D75 CD40                <1>  int 40h
 10164 00006D77 7208                    		jc	short .hda
 10165 00006D79 C605[888D0000]03        		mov	byte [audio_hardware], 3 ; VT8237R
 10166 00006D80 C3                      		retn
 10167                                  .hda:	
 10168                                  		; check Intel HDA hardware at last
 10169                                  		; (48kHz support)
 10170                                  		; TRDOS 386 system call
 10171                                  		; sysaudio
 10172                                  		; Detect (BH=1) Intel HDA (BL=4) Audio Device
 10173                                  		sys	_audio, 0104h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006D81 BB04010000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006D86 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006D8B CD40                <1>  int 40h
 10174 00006D8D 7208                    		jc	short .err
 10175 00006D8F C605[888D0000]04        		mov	byte [audio_hardware], 4 ; HDA
 10176 00006D96 C3                      		retn
 10177                                  .err:
 10178 00006D97 BA[A36D0000]            		mov	edx, txt_audio_nf_err
 10179 00006D9C E857F8FFFF                              call    wrstr_edx
 10180 00006DA1 F9                                      stc
 10181 00006DA2 C3                      		retn
 10182                                  
 10183 00006DA3 50726F706572206175-     txt_audio_nf_err: db 'Proper audio hardware not found!',0Dh,0Ah,0
 10183 00006DAC 64696F206861726477-
 10183 00006DB5 617265206E6F742066-
 10183 00006DBE 6F756E64210D0A00   
 10184                                  
 10185                                  
 10186                                  ; =============== CONSTANT ==================================================
 10187                                  
 10188                                  		; 21/10/2024
 10189                                  MP3_MAX_OUTPUT_SIZE equ 2*2*18*32*2
 10190                                      ; = 1200h = 4608 decimal = 2 channels, 2 granules, 18*32, 2 byte(16bit)
 10191                                  
 10192                                  
 10193                                  ; =============== S U B R O U T I N E =======================================
 10194                                  
 10195                                  		; 12/01/2025
 10196                                  audio_system_init:
 10197                                  		;mov	eax, sample_buffer_size
 10198                                  		; 10/01/2025
 10199                                  		;mov	byte [blocks], 16
 10200                                  		; 12/01/2025
 10201 00006DC6 C605[8E8D0000]08        		mov	byte [blocks], 8
 10202 00006DCD A1[98F40000]            		mov	eax, [mp3_samples_output_size]
 10203 00006DD2 C1E003                  		shl	eax, 3 ; * 8
 10204                                  		;shl	eax, 4 ; * 16
 10205                                  .asi@:		
 10206                                  		; 12/01/2025
 10207                                  		;cmp	eax, 65536
 10208                                  		;jna	short .asi@@
 10209                                  		;sub	eax, [mp3_samples_output_size]
 10210                                  		;dec	byte [blocks]
 10211                                  		;;;
 10212                                  		; 11/01/2025
 10213                                  		;test	byte [blocks], 1
 10214                                  		;jz	short .asi@
 10215                                  		;dec	byte [blocks] ; even number
 10216                                  		;sub	eax, [mp3_samples_output_size]
 10217                                  		;;;
 10218                                  		;jmp	short .asi@
 10219                                  .asi@@:
 10220 00006DD5 803D[888D0000]01        		cmp	byte [audio_hardware], 1 ; SB16
 10221 00006DDC 7515                    		jne	short .bufaloc
 10222                                  .asi@@@:
 10223                                  		; 10/01/2025
 10224 00006DDE 3D00800000              		cmp	eax, 32768
 10225 00006DE3 760E                    		jna	short .bufaloc
 10226                                  		; sample_buffer_size = 36864 bytes ; 8 blocks
 10227                                  		;sub	eax, MP3_MAX_OUTPUT_SIZE
 10228                                  		; eax = 32256 ; 7 blocks
 10229                                  		; 10/01/2025
 10230 00006DE5 2B05[98F40000]          		sub	eax, [mp3_samples_output_size]
 10231 00006DEB FE0D[8E8D0000]          		dec	byte [blocks]
 10232                                  		;;;
 10233                                  		; 11/01/2025
 10234                                  		;test	byte [blocks], 1
 10235                                  		;jz	short .asi@@@
 10236                                  		;dec	byte [blocks] ; even number
 10237                                  		;sub	eax, [mp3_samples_output_size]
 10238                                  		;;;
 10239 00006DF1 EBEB                    		jmp	short .asi@@@
 10240                                  .bufaloc:
 10241                                  		; TRDOS 386 system call
 10242                                  		; sysaudio
 10243                                  		; Allocate audio buffer (for user)
 10244                                  		; ebx = 0200h (BH=2)
 10245                                  		; ecx = buffer size (in bytes)
 10246                                  		; edx = buffer address (virtual)
 10247 00006DF3 A3[908D0000]            		mov	[buffer_size], eax
 10248                                  		sys	_audio, 0200h, eax, sample_buffer
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006DF8 BB00020000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 00006DFD 89C1                <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 00006DFF BA[00500500]        <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006E04 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006E09 CD40                <1>  int 40h
 10249 00006E0B 7225                    		jc	short .init_err
 10250                                  
 10251                                  		; 12/01/2025
 10252                                  		; clear audio buffer (before playback)
 10253 00006E0D BF[00500500]            		mov	edi, sample_buffer
 10254                                  		; ecx = buffer size in bytes
 10255 00006E12 C1E902                  		shr	ecx, 2 ; double word
 10256 00006E15 31C0                    		xor	eax, eax
 10257 00006E17 F3AB                    		rep	stosd
 10258                                  
 10259                                  		; TRDOS 386 system call
 10260                                  		; sysaudio
 10261                                  		; Initialize audio device (bh = 3)
 10262                                  		; bl = 01h -> CallBack method
 10263                                  		; edx = Callback service address (virtual)
 10264                                  		; ecx = 0 ; CL = srb value ; not used
 10265                                  		sys	_audio, 0301h, 0, audio_callback
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006E19 BB01030000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 00006E1E B900000000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 00006E23 BA[656E0000]        <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006E28 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006E2D CD40                <1>  int 40h
 10266                                  		; 12/01/2025
 10267                                  		; SRB method (faster than callback method)
 10268                                  		; bl = 0 -> Signal Response Byte method
 10269                                  		; cl = 1 -> SRB set value 
 10270                                  		;     (will be set by audio IRQ service of the kernel)
 10271                                  		; edx = SRB address -one byte data-
 10272                                  		;sys	_audio, 0300h, 1, srb	
 10273 00006E2F 7201                    		jc	short .init_err
 10274 00006E31 C3                      		retn
 10275                                  .init_err:
 10276                                  init_error:	; 13/01/2025
 10277 00006E32 BA[3E6E0000]            		mov	edx, txt_audio_init_err
 10278 00006E37 E8BCF7FFFF                              call    wrstr_edx
 10279 00006E3C F9                                      stc
 10280 00006E3D C3                      		retn
 10281                                  
 10282 00006E3E 417564696F20686172-     txt_audio_init_err: db 'Audio hardware initialization error!',0Dh,0Ah,0
 10282 00006E47 647761726520696E69-
 10282 00006E50 7469616C697A617469-
 10282 00006E59 6F6E206572726F7221-
 10282 00006E62 0D0A00             
 10283                                  
 10284                                  
 10285                                  ; =============== S U B R O U T I N E =======================================
 10286                                  
 10287                                  		; 21/10/2024
 10288                                  audio_callback:
 10289                                  		; Operating system has directed CPU here because of
 10290                                  		; user (2nd) stage of the audio hardware interrupt service.
 10291                                  		; This procedure must be short and return to operating
 10292                                  		; system again via sysrelease system call
 10293                                  		; (or any system call here will be handled as sysrelease).
 10294                                  
 10295 00006E65 C605[8C8D0000]01        		mov	byte [srb], 1
 10296                                  
 10297                                  		; 12/01/2025
 10298 00006E6C E884010000                              call	try_enqueue_all_blocks
 10299                                  
 10300                                  		sys	_rele ; return from callback service 
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006E71 B827000000          <1>  mov eax, %1
   130                              <1> 
   131 00006E76 CD40                <1>  int 40h
 10301                                  		
 10302                                  		; we must not come here !
 10303 00006E78 BBFFFFFFFF              		mov	ebx, -1
 10304                                  		sys	_exit
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006E7D B801000000          <1>  mov eax, %1
   130                              <1> 
   131 00006E82 CD40                <1>  int 40h
 10305                                  		;jmp	short audio_callback
 10306                                  
 10307                                  
 10308                                  ; =============== S U B R O U T I N E =======================================
 10309                                  
 10310                                  		; 15/01/2025 (mp3play3.s & mp3play2.s)
 10311                                  		; 13/01/2025
 10312                                  		; 12/01/2025
 10313                                  		; 10/01/2025
 10314                                  		; 21/10/2024
 10315                                  mp3_cast_to_speaker:
 10316                                  ; 13/01/2025
 10317                                  %if 1
 10318                                  		; Start	to play
 10319 00006E84 A1[D89D0000]            		mov	eax, [mp3_bytes_per_sample]
 10320                                  		;shr	al, 1 ; 8 -> 0, 16 -> 1
 10321                                  		;shl	al, 1 ; 16 -> 2, 8 -> 0
 10322 00006E89 2402                    		and	al, 2 ; 22/10/2024
 10323 00006E8B 8B1D[D09D0000]          		mov	ebx, [mp3_output_num_channels]
 10324 00006E91 4B                      		dec	ebx
 10325 00006E92 08C3                    		or	bl, al
 10326 00006E94 8B0D[D49D0000]          		mov	ecx, [mp3_output_sample_rate]
 10327 00006E9A B704                    		mov	bh, 4 ; start to play
 10328                                  
 10329                                  		; 13/01/2025
 10330                                  mp3_cast_to_speaker_@:		
 10331 00006E9C 53                      		push	ebx
 10332 00006E9D 51                      		push	ecx
 10333                                  %endif
 10334                                                  ; 12/01/2025
 10335                                  		;call	try_enqueue_all_blocks
 10336                                  	
 10337                                  		; 12/01/2025
 10338                                  		;cmp	dword [bytes_left],0
 10339                                  		;jz	short .playback
 10340                                  		
 10341                                  		; 12/01/2025
 10342                                  		; (here audio buffer -sample_buffer- is empty)
 10343                                  		; (clear dma half buffer 1)
 10344                                  		sys	_audio, 1001h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006E9E BB01100000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006EA3 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006EA8 CD40                <1>  int 40h
 10345                                  		; (clear dma half buffer 2)
 10346                                  		;sys	_audio, 1002h
 10347                                  
 10348                                  		; TRDOS 386 system call
 10349                                  		; sysaudio
 10350                                  		; bh = 16 : update (current, first) dma half buffer
 10351                                  		; bl = 0  : then switch to the next (second) half buffer
 10352                                  		sys	_audio, 1000h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006EAA BB00100000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006EAF B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006EB4 CD40                <1>  int 40h
 10353                                  
 10354                                  		; 12/01/2025
 10355                                  		; 22/10/2024
 10356                                  		;call	try_enqueue_all_blocks
 10357                                  .playback:
 10358                                  		; TRDOS 386 system call
 10359                                  		; sysaudio
 10360                                  		; Set Master Volume Level (BL=0 or 80h)
 10361                                  		; 	for next playing (BL>=80h)
 10362                                  		;sys	_audio, 0B80h, 1D1Dh
 10363                                  		sys	_audio, 0B00h, 1D1Dh
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006EB6 BB000B0000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 00006EBB B91D1D0000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006EC0 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006EC5 CD40                <1>  int 40h
 10364                                  
 10365                                  		;mov	byte [volume_level], 1Dh
 10366 00006EC7 880D[8D8D0000]          		mov	[volume_level], cl
 10367                                  ; 13/01/2025
 10368                                  %if 0
 10369                                  		; Start	to play
 10370                                  		mov	eax, [mp3_bytes_per_sample]
 10371                                  		;shr	al, 1 ; 8 -> 0, 16 -> 1
 10372                                  		;shl	al, 1 ; 16 -> 2, 8 -> 0
 10373                                  		and	al, 2 ; 22/10/2024
 10374                                  		mov	ebx, [mp3_output_num_channels]
 10375                                  		dec	ebx
 10376                                  		or	bl, al
 10377                                  		mov	ecx, [mp3_output_sample_rate]
 10378                                  		mov	bh, 4 ; start to play
 10379                                  %else
 10380 00006ECD 59                      		pop	ecx ; sample rate (frequency)
 10381 00006ECE 5B                      		pop	ebx ; play mode (bl)
 10382                                  %endif
 10383                                  		; TRDOS 386 system call
 10384                                  		; sysaudio
 10385                                  		; bh = 4 -> start to play
 10386                                  		; bl = mode -> bit 0, 1 = stereo, 0 = mono
 10387                                  		;	       bit 1, 1 = 16 bit, 0 = 8 bit
 10388                                  		; cx = sample rate (hertz)
 10389                                  		sys	_audio
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006ECF B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006ED4 CD40                <1>  int 40h
 10390                                  
 10391                                  		; 12/01/2025
 10392 00006ED6 C605[8C8D0000]00        		mov	byte [srb], 0
 10393                                  		;;;
 10394                                  
 10395                                  .playback_lop:
 10396 00006EDD 31C0                    		xor	eax, eax
 10397 00006EDF 3905[082D0500]          		cmp	[bytes_left], eax ; 0
 10398 00006EE5 7508                    		jnz	short .playback_next
 10399                                  		; 22/10/2024
 10400 00006EE7 3805[34850000]          		cmp	byte [num_enqueued_frames], al ; 0
 10401 00006EED 7447                                    jz	short .playback_end
 10402                                  .playback_next:
 10403 00006EEF A2[34850000]            		mov	[num_enqueued_frames], al ; 0
 10404 00006EF4 803D[8C8D0000]01        		cmp	byte [srb], 1	; audio interrupt status
 10405 00006EFB 7274                    		jb	short .getchar
 10406                                  		;mov	byte [srb], 0	; reset
 10407 00006EFD A2[8C8D0000]            		mov	[srb], al ; 0
 10408                                  		; 12/01/2025
 10409                                  		;call	try_enqueue_all_blocks
 10410                                  		; 15/01/2025
 10411                                  		;cmp	byte [blocks], 0 ; interpolation ?
 10412                                  		;jna	short .interpolated ; yes
 10413                                  		; 15/01/2025 (mp3play2.s)
 10414 00006F02 803D[9C8D0000]00        		cmp	byte [convert], 0
 10415 00006F09 7718                    		ja	short .converted
 10416                                  
 10417                                  		; 15/01/2025
 10418 00006F0B B44E                    		mov	ah, 4Eh ; red background, yellow font 
 10419                                  .indicator:
 10420                                  		;;; 10/01/2025
 10421 00006F0D A0[728D0000]            		mov	al, [half_buffer]
 10422 00006F12 8035[728D0000]01        		xor	byte [half_buffer], 1
 10423                                  		;mov	ah, 4Eh
 10424 00006F19 0431                    		add	al, '1'
 10425 00006F1B 66A300800B00            		mov	[0B8000h], ax
 10426                                  		;;;	
 10427 00006F21 EBBA                    		jmp	short .playback_lop
 10428                                  
 10429                                  .converted:
 10430                                  ;.interpolated:
 10431                                  		; 15/01/2025
 10432                                  		; (a solution for very fast indicator digit change)
 10433                                  		; (8 to 1)
 10434 00006F23 FE05[9D8D0000]          		inc	byte [counter]
 10435 00006F29 A0[9D8D0000]            		mov	al, [counter]
 10436 00006F2E 2407                    		and	al, 7
 10437 00006F30 75AB                    		jnz	short .playback_lop
 10438 00006F32 B41E                    		mov	ah, 1Eh ; blue background, yellow font
 10439 00006F34 EBD7                    		jmp	short .indicator
 10440                                  
 10441                                  .playback_end:
 10442                                  		;;; 10/01/2025
 10443 00006F36 66B8304E                		mov	ax, 4E30h
 10444 00006F3A 66A300800B00            		mov	[0B8000h], ax 
 10445                                  		;;;
 10446                                  
 10447                                  		; TRDOS 386 system call
 10448                                  		; sysaudio
 10449                                  		; Stop playing
 10450                                  		sys	_audio, 0700h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006F40 BB00070000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006F45 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006F4A CD40                <1>  int 40h
 10451                                  		; Cancel callback service (for user)
 10452                                  		sys	_audio, 0900h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006F4C BB00090000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006F51 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006F56 CD40                <1>  int 40h
 10453                                  		; Deallocate audio buffer (for user)
 10454                                  		sys	_audio, 0A00h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006F58 BB000A0000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006F5D B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006F62 CD40                <1>  int 40h
 10455                                  		; Disable audio device
 10456                                  		sys	_audio, 0C00h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006F64 BB000C0000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006F69 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006F6E CD40                <1>  int 40h
 10457 00006F70 C3                      		retn
 10458                                  
 10459                                  .getchar:
 10460                                  		; TRDOS 386 system call
 10461                                  		; sysstdio
 10462                                  		; BL = 1 -> read a character on stdin (no wait)
 10463                                  		sys	_stdio, 1
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006F71 BB01000000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006F76 B82E000000          <1>  mov eax, %1
   130                              <1> 
   131 00006F7B CD40                <1>  int 40h
 10464 00006F7D 21C0                    		and	eax, eax
 10465 00006F7F 0F846AFFFFFF            		jz	.playback_next ; 15/01/2024
 10466                                  
 10467 00006F85 3C2B                    		cmp	al, '+' ; increase sound volume
 10468 00006F87 741B                    		je	short .inc_volume
 10469 00006F89 3C2D                    		cmp	al, '-'
 10470 00006F8B 7441                    		je	short .dec_volume
 10471                                  
 10472                                  		;;;
 10473                                  		; 10/01/2025
 10474                                  		;cmp	ah, 01h
 10475 00006F8D 3C1B                    		cmp	al, 1Bh	; ESC
 10476 00006F8F 74A5                    		je	short .playback_end
 10477                                  		;cmp	ax, 2E03h
 10478 00006F91 3C03                    		cmp	al, 03h	; CTRL+C
 10479 00006F93 74A1                    		je	short .playback_end
 10480                                  		;;;
 10481                                  		; 12/01/2025
 10482 00006F95 24DF                    		and	al, 0DFh
 10483 00006F97 3C48                    		cmp	al, 'H'
 10484 00006F99 7446                    		je	short .hw_info
 10485 00006F9B 3C42                    		cmp	al, 'B'
 10486 00006F9D 744C                    		je	short .b_info
 10487 00006F9F E94BFFFFFF              		jmp	.playback_next
 10488                                  
 10489                                  .inc_volume:
 10490 00006FA4 8A0D[8D8D0000]          		mov	cl, [volume_level]
 10491 00006FAA 80F91F                  		cmp	cl, 1Fh ; 31
 10492 00006FAD 0F833CFFFFFF            		jnb	.playback_next
 10493 00006FB3 FEC1                    		inc	cl
 10494                                  .chg_volume:
 10495 00006FB5 880D[8D8D0000]          		mov	[volume_level], cl
 10496 00006FBB 88CD                    		mov	ch, cl
 10497                                  		; TRDOS 386 system call
 10498                                  		; sysstdio
 10499                                  		; Set master volume level
 10500                                  		; bh = 11
 10501                                  		; cl = left channel volume (0 to 31 max)
 10502                                  		; ch = right channel volume (0 to 31 max)
 10503                                  		sys	_audio, 0B00h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00006FBD BB000B0000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00006FC2 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 00006FC7 CD40                <1>  int 40h
 10504 00006FC9 E921FFFFFF              		jmp	.playback_next
 10505                                  .dec_volume:
 10506 00006FCE 8A0D[8D8D0000]          		mov	cl, [volume_level]
 10507 00006FD4 80F901                  		cmp	cl, 1 ; 1
 10508 00006FD7 0F8612FFFFFF            		jna	.playback_next
 10509 00006FDD FEC9                    		dec	cl
 10510 00006FDF EBD4                    		jmp	short .chg_volume
 10511                                  
 10512                                  		; 12/01/2025
 10513                                  .hw_info:
 10514 00006FE1 E80A020000              		call	write_audio_dev_info
 10515 00006FE6 E904FFFFFF              		jmp	.playback_next
 10516                                  		; 12/01/2025
 10517                                  .b_info:
 10518 00006FEB E875040000              		call	write_buffer_size
 10519 00006FF0 E9FAFEFFFF              		jmp	.playback_next
 10520                                  
 10521                                  
 10522                                  ; =============== S U B R O U T I N E =======================================
 10523                                  		
 10524                                  		; 15/01/2025 (mp3play2.s) -interpolation excluded-
 10525                                  		; 13/01/2025 (mp3play3.s) -interpolation included-
 10526                                  		; 12/01/2025
 10527                                  		; 09/01/2025
 10528                                  		; 21/10/2024
 10529                                  try_enqueue_all_blocks:
 10530                                  		; 12/01/2025
 10531 00006FF5 60                      		pusha
 10532 00006FF6 BF[00500500]             		mov	edi, sample_buffer
 10533                                  		; 10/01/2025
 10534                                  		;jmp	short .first_block
 10535                                  		; 13/01/2025
 10536 00006FFB EB15                    		jmp	short try_enqueue_all_blocks_@
 10537                                  ;.next_block:
 10538                                  teab_next_block:
 10539 00006FFD 833D[082D0500]00                        cmp	dword [bytes_left], 0
 10540                                                  ;jle	short .enqueue_done
 10541                                  		; 13/01/2025
 10542 00007004 7E56                    		jle	short teab_enqueue_done
 10543                                  		;
 10544 00007006 8B3D[94F40000]          		mov	edi, [mp3_samples_dst]
 10545 0000700C 033D[98F40000]          		add	edi, [mp3_samples_output_size]
 10546                                  
 10547                                  try_enqueue_all_blocks_@:
 10548                                  ;.first_block:
 10549                                  		;pusha
 10550 00007012 8B35[042D0500]          		mov	esi, [stream_pos]
 10551 00007018 8B0D[082D0500]          		mov	ecx, [bytes_left]
 10552 0000701E 31ED                    		xor	ebp, ebp
 10553 00007020 E849F2FFFF              		call	mp3_decode_frame
 10554                                  		;popa
 10555                                  		;jc	short .enqueue_done
 10556                                  		; 13/01/2025
 10557 00007025 7235                    		jc	short teab_enqueue_done
 10558 00007027 A1[A89D0000]            		mov	eax, [mp3_src_frame_size]
 10559 0000702C 83F800                  		cmp	eax, 0
 10560                                  		;jz	short .enqueue_done
 10561                                  		; 13/01/2025
 10562 0000702F 742B                    		jz	short teab_enqueue_done
 10563 00007031 0105[042D0500]          		add	[stream_pos], eax
 10564 00007037 2905[082D0500]          		sub	[bytes_left], eax
 10565 0000703D A1[98F40000]            		mov	eax, [mp3_samples_output_size]
 10566 00007042 83F800                  		cmp	eax, 0
 10567                                  		;jz	short .next_block
 10568                                  		; 13/01/2025
 10569 00007045 74B6                    		jz	short teab_next_block
 10570                                  ;.no_error:
 10571 00007047 FE05[34850000]          		inc	byte [num_enqueued_frames]
 10572 0000704D A0[34850000]            		mov	al, [num_enqueued_frames]
 10573 00007052 3A05[8E8D0000]          		cmp	al, [blocks]
 10574                                  		;jb	short .next_block
 10575                                  		; 13/01/2025
 10576 00007058 72A3                    		jb	short teab_next_block
 10577                                  teab_rtn:
 10578                                  ;.rtn:
 10579                                  		; 12/01/2025
 10580 0000705A 61                      		popa
 10581 0000705B C3                      		retn
 10582                                  ;.enqueue_done:
 10583                                  teab_enqueue_done:
 10584 0000705C C705[082D0500]0000-                     mov	dword [bytes_left], 0
 10584 00007064 0000               
 10585                                  		; 12/01/2025
 10586                                  		;jmp	short .rtn
 10587                                  		; 13/01/2025
 10588 00007066 EBF2                    		jmp	short teab_rtn
 10589                                  
 10590                                  
 10591                                  ; ---------------------------------------------------------------------------
 10592                                  ; 15/01/2025 - mono to stereo - 8bit to 16bit - conversion procedures (AC97)
 10593                                  ; ---------------------------------------------------------------------------
 10594                                  
 10595                                  ; =============== S U B R O U T I N E =======================================
 10596                                  		
 10597                                  		; 15/01/2025
 10598                                  audio_system_init_x:
 10599 00007068 8B0D[98F40000]          		mov	ecx, [mp3_samples_output_size]
 10600 0000706E 89C8                    		mov	eax, ecx
 10601                                  
 10602                                  		; 48 kHZ with 16 bit stereo conversion
 10603                                  		;
 10604                                  		; selected output is
 10605                                  		;	 8bit stereo or 16bit mono or 8bit mono
 10606                                  		; (but AC97 hardware needs 16bit stereo samples)
 10607                                  	
 10608 00007070 D1E0                    		shl	eax, 1 ; * 2 (mono to stereo)
 10609                                  
 10610 00007072 BB[87710000]            		mov	ebx, convert_to_stereo
 10611 00007077 803D[D89D0000]02        		cmp	byte [mp3_bytes_per_sample], 2
 10612 0000707E 7415                    		je	short .set_sizes ; 16bit mono
 10613                                  
 10614                                  		; 8bit output (16bit conversion is neeed)
 10615 00007080 BB[B6710000]            		mov	ebx, convert_to_16bit
 10616 00007085 803D[D09D0000]02        		cmp	byte [mp3_output_num_channels], 2
 10617 0000708C 7407                    		je	short .set_sizes ; 8bit stereo
 10618                                  		; 8bit mono output
 10619 0000708E D1E0                    		shl	eax, 1
 10620 00007090 BB[D2710000]            		mov	ebx, convert_to_stereo_16bit
 10621                                  .set_sizes:
 10622 00007095 891D[948D0000]          		mov	[conversion], ebx
 10623 0000709B 890D[988D0000]          		mov	[loadsize], ecx
 10624                                  		;;;
 10625                                  		; align to 16bit stereo (if there is a defect)
 10626                                  		;and	al, ~3
 10627 000070A1 A3[908D0000]            		mov	[buffer_size], eax
 10628                                  		;;;
 10629                                  .asix_@:
 10630                                  		; TRDOS 386 system call
 10631                                  		; sysaudio
 10632                                  		; Allocate audio buffer (for user)
 10633                                  		; ebx = 0200h (BH=2)
 10634                                  		; ecx = buffer size (in bytes)
 10635                                  		; edx = buffer address (virtual)
 10636                                  
 10637                                  		sys	_audio, 0200h, [buffer_size], sample_buffer
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 000070A6 BB00020000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 000070AB 8B0D[908D0000]      <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 000070B1 BA[00500500]        <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 000070B6 B820000000          <1>  mov eax, %1
   130                              <1> 
   131 000070BB CD40                <1>  int 40h
 10638 000070BD 7228                    		jc	short .init_err
 10639                                  
 10640                                  		; clear audio buffer (before playback)
 10641 000070BF BF[00500500]            		mov	edi, sample_buffer
 10642                                  		; ecx = buffer size in bytes
 10643 000070C4 83C103                  		add	ecx, 3	; 13/01/2025
 10644 000070C7 C1E902                  		shr	ecx, 2
 10645 000070CA 31C0                    		xor	eax, eax
 10646 000070CC F3AB                    		rep	stosd
 10647                                  
 10648                                  		; TRDOS 386 system call
 10649                                  		; sysaudio
 10650                                  		; Initialize audio device (bh = 3)
 10651                                  		; bl = 01h -> CallBack method
 10652                                  		; edx = Callback service address (virtual)
 10653                                  		; ecx = 0 ; CL = srb value ; not used
 10654                                  		sys	_audio, 0301h, 0, audio_callback_x
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 000070CE BB01030000          <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 000070D3 B900000000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 000070D8 BA[68710000]        <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 000070DD B820000000          <1>  mov eax, %1
   130                              <1> 
   131 000070E2 CD40                <1>  int 40h
 10655 000070E4 7201                    		jc	short .init_err
 10656 000070E6 C3                      		retn
 10657                                  .init_err:
 10658 000070E7 E946FDFFFF              		jmp	init_error
 10659                                  
 10660                                  
 10661                                  ; =============== S U B R O U T I N E =======================================
 10662                                  
 10663                                  		; 15/01/2025 (mp3play2.s)
 10664                                  		; 14/01/2025 (mp3play3.s)
 10665                                  		; 13/01/2025
 10666                                  mp3_cast_to_speaker_x:
 10667                                  ; 13/01/2025
 10668                                  %if 0
 10669                                  		; Start	to play
 10670                                  		mov	eax, [mp3_bytes_per_sample]
 10671                                  		;shr	al, 1 ; 8 -> 0, 16 -> 1
 10672                                  		;shl	al, 1 ; 16 -> 2, 8 -> 0
 10673                                  		and	al, 2
 10674                                  		mov	ebx, [mp3_output_num_channels]
 10675                                  		dec	ebx
 10676                                  		or	bl, al
 10677                                  		mov	ecx, [mp3_output_sample_rate]
 10678                                  		mov	bh, 4 ; start to play
 10679                                  %else
 10680                                  		;; 48 kHZ, 16bit, stereo
 10681 000070EC BB03040000              		mov	ebx, 0403h
 10682                                  		; 15/01/2025
 10683                                  		;mov	ecx, 48000
 10684                                  		;; 14/01/2025
 10685                                  		;cmp	byte [vra], 1
 10686                                  		;jb	short .jmpto@
 10687 000070F1 8B0D[D49D0000]          		mov	ecx, [mp3_output_sample_rate]
 10688                                  ;.jmpto@:
 10689                                  %endif
 10690 000070F7 E9A0FDFFFF              		jmp	mp3_cast_to_speaker_@
 10691                                  
 10692                                  
 10693                                  ; =============== S U B R O U T I N E =======================================
 10694                                  
 10695                                  		; 15/01/2025 (mp3play3.s & mp3play2.s)
 10696                                  		; 13/01/2025
 10697                                  try_enqueue_all_blocks_x:
 10698                                  		; 12/01/2025
 10699 000070FC 60                      		pusha
 10700 000070FD BF[00300500]             		mov	edi, decoding_buffer
 10701                                  		; 15/01/2025
 10702                                  		;jmp	try_enqueue_all_blocks_@
 10703 00007102 EB15                    		jmp	short .first_block
 10704                                  
 10705                                  		; 15/01/2025
 10706                                  .next_block:
 10707 00007104 833D[082D0500]00                        cmp	dword [bytes_left], 0
 10708 0000710B 7E4F                                    jle	short .enqueue_done
 10709                                  		;
 10710 0000710D 8B3D[94F40000]          		mov	edi, [mp3_samples_dst]
 10711 00007113 033D[98F40000]          		add	edi, [mp3_samples_output_size]
 10712                                  
 10713                                  ;try_enqueue_all_blocks_@:
 10714                                  .first_block:
 10715                                  		;pusha
 10716 00007119 8B35[042D0500]          		mov	esi, [stream_pos]
 10717 0000711F 8B0D[082D0500]          		mov	ecx, [bytes_left]
 10718 00007125 31ED                    		xor	ebp, ebp
 10719 00007127 E842F1FFFF              		call	mp3_decode_frame
 10720                                  		;popa
 10721 0000712C 722E                    		jc	short .enqueue_done
 10722                                  
 10723 0000712E A1[A89D0000]            		mov	eax, [mp3_src_frame_size]
 10724 00007133 83F800                  		cmp	eax, 0
 10725 00007136 7424                    		jz	short .enqueue_done
 10726 00007138 0105[042D0500]          		add	[stream_pos], eax
 10727 0000713E 2905[082D0500]          		sub	[bytes_left], eax
 10728                                  
 10729 00007144 A1[98F40000]            		mov	eax, [mp3_samples_output_size]
 10730 00007149 83F800                  		cmp	eax, 0
 10731 0000714C 74B6                    		jz	short .next_block
 10732                                  
 10733                                  		; 15/01/2025
 10734 0000714E FF15[948D0000]          		call	dword [conversion]
 10735                                  .no_error:
 10736                                  		; 15/01/2025
 10737 00007154 FE05[34850000]          		inc	byte [num_enqueued_frames]
 10738                                  .rtn:
 10739                                  		; 12/01/2025
 10740 0000715A 61                      		popa
 10741 0000715B C3                      		retn
 10742                                  .enqueue_done:
 10743 0000715C C705[082D0500]0000-                     mov	dword [bytes_left], 0
 10743 00007164 0000               
 10744                                  		; 12/01/2025
 10745 00007166 EBF2                    		jmp	short .rtn
 10746                                  
 10747                                  
 10748                                  ; =============== S U B R O U T I N E =======================================
 10749                                  
 10750                                  		; 15/01/2025 (mp3play3.s & mp3play1.s)
 10751                                  		; 13/01/2025 
 10752                                  audio_callback_x:
 10753                                  		; Operating system has directed CPU here because of
 10754                                  		; user (2nd) stage of the audio hardware interrupt service.
 10755                                  		; This procedure must be short and return to operating
 10756                                  		; system again via sysrelease system call
 10757                                  		; (or any system call here will be handled as sysrelease).
 10758                                  
 10759 00007168 C605[8C8D0000]01        		mov	byte [srb], 1
 10760                                  
 10761 0000716F E888FFFFFF              		call	try_enqueue_all_blocks_x
 10762                                  
 10763                                  		; 15/01/2025
 10764                                  		;call	dword [conversion]
 10765                                  
 10766                                  		sys	_rele ; return from callback service 
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00007174 B827000000          <1>  mov eax, %1
   130                              <1> 
   131 00007179 CD40                <1>  int 40h
 10767                                  		
 10768                                  		; we must not come here !
 10769 0000717B BBFFFFFFFF              		mov	ebx, -1
 10770                                  		sys	_exit
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121                              <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123                              <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125                              <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00007180 B801000000          <1>  mov eax, %1
   130                              <1> 
   131 00007185 CD40                <1>  int 40h
 10771                                  		;jmp	short audio_callback
 10772                                  
 10773                                  
 10774                                  ; ---------------------------------------------------------------------------
 10775                                  ; conversion procedures
 10776                                  ; ---------------------------------------------------------------------------
 10777                                  
 10778                                  ; 15/01/2025 (mp3play1.s)
 10779                                  ; 13/01/2025 (mp3play3.s)
 10780                                  
 10781                                  ; convert_to_stereo: convert 16bit mono samples to 16bit stereo
 10782                                  ; convert_to_16bit: convert 8bit stereo samples to 16bit stereo	
 10783                                  ; convert_to_stereo_16bit: convert 8bit mono samples to 16bit & stereo
 10784                                  ; [loadsize] = decoding buffer size
 10785                                  ; [buffer_size] = wav output buffer size (<= 64KB)
 10786                                  
 10787                                  ; =============== S U B R O U T I N E =======================================
 10788                                  
 10789                                  ; /////
 10790                                  
 10791                                  	; 13/01/2025
 10792                                  convert_to_stereo:
 10793 00007187 BE[00300500]            	mov	esi, decoding_buffer ; (contains 16bit mono samples)
 10794 0000718C BF[00500500]            	mov	edi, sample_buffer ; wav output buffer
 10795 00007191 8B0D[988D0000]          	mov	ecx, [loadsize]
 10796 00007197 D1E9                    	shr	ecx, 1 ; word count
 10797                                  cts_1:
 10798 00007199 66AD                    	lodsw
 10799 0000719B 66AB                    	stosw	; left channel
 10800 0000719D 66AB                    	stosw	; right channel
 10801 0000719F E2F8                    	loop	cts_1
 10802                                  cts_2:
 10803                                  	; padfill
 10804 000071A1 8B0D[908D0000]          	mov	ecx, [buffer_size] 
 10805 000071A7 81C1[00500500]          	add	ecx, sample_buffer
 10806 000071AD 29F9                    	sub	ecx, edi
 10807 000071AF 7604                    	jna	short cts_3
 10808 000071B1 31C0                    	xor	eax, eax
 10809 000071B3 F3AA                    	rep	stosb
 10810                                  cts_3:
 10811 000071B5 C3                      	retn
 10812                                  
 10813                                  ; =============== S U B R O U T I N E =======================================
 10814                                  
 10815                                  ; /////
 10816                                  
 10817                                  	; 13/01/2025
 10818                                  convert_to_16bit:
 10819 000071B6 BE[00300500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 10820 000071BB BF[00500500]            	mov	edi, sample_buffer ; wav output buffer
 10821 000071C0 8B0D[988D0000]          	mov	ecx, [loadsize]
 10822                                  ct16b_1:
 10823                                  	; stereo & 8 bit
 10824 000071C6 AC                      	lodsb
 10825 000071C7 2C80                    	sub	al, 80h ; 08/11/2023
 10826 000071C9 C1E008                  	shl	eax, 8 ; convert 8 bit sample to 16 bit sample
 10827 000071CC 66AB                    	stosw
 10828 000071CE E2F6                    	loop	ct16b_1
 10829 000071D0 EBCF                    	jmp	short cts_2
 10830                                  
 10831                                  ; =============== S U B R O U T I N E =======================================
 10832                                  
 10833                                  ; /////
 10834                                  
 10835                                  	; 13/01/2025
 10836                                  convert_to_stereo_16bit:
 10837 000071D2 BE[00300500]            	mov	esi, decoding_buffer ; (contains 8bit mono samples)
 10838 000071D7 BF[00500500]            	mov	edi, sample_buffer ; wav output buffer
 10839 000071DC 8B0D[988D0000]          	mov	ecx, [loadsize]
 10840                                  cts16b_1:
 10841                                  	; mono & 8 bit
 10842 000071E2 AC                      	lodsb
 10843 000071E3 2C80                    	sub	al, 80h ; 08/11/2023
 10844 000071E5 C1E008                  	shl	eax, 8 ; convert 8 bit sample to 16 bit sample
 10845 000071E8 66AB                    	stosw	; left channel
 10846 000071EA 66AB                    	stosw	; right channel
 10847 000071EC E2F4                    	loop	cts16b_1
 10848 000071EE EBB1                    	jmp	short cts_2
 10849                                  
 10850                                  ; /////
 10851                                  
 10852                                  
 10853                                  ; ---------------------------------------------------------------------------
 10854                                  ; 12/01/2025- Hardware Info display/write procedures.
 10855                                  ; ---------------------------------------------------------------------------
 10856                                  ; ref: playwav9.s (18/12/2024) - sb16play.s (20/12/2024)
 10857                                  
 10858                                  	; 15/01/2025 (mp3play3.s & mp3play2.s)
 10859                                  	; 12/01/2025
 10860                                  write_audio_dev_info:
 10861 000071F0 803D[888D0000]02        	cmp	byte [audio_hardware], 2
 10862 000071F7 7203                    	jb	short write_sb16_dev_info  ; SB16
 10863 000071F9 745A                    	je	short write_ac97_pci_dev_info ; AC97
 10864 000071FB C3                      	retn
 10865                                  
 10866                                  	; 20/12/2024 (playwavx.s, sb16play.s)
 10867                                  write_sb16_dev_info:
 10868                                  	; 27/11/2024
 10869                                  	; 24/11/2024 (sb16play.asm)
 10870                                  
 10871 000071FC A1[808D0000]            	mov	eax, [audio_io_base]
 10872 00007201 31DB                    	xor	ebx, ebx
 10873 00007203 88C3                    	mov	bl, al
 10874 00007205 88DA                    	mov	dl, bl
 10875 00007207 80E30F                  	and	bl, 0Fh
 10876 0000720A 8A83[35750000]          	mov	al, [ebx+hex_chars]
 10877 00007210 A2[33760000]            	mov	[msgBasePort+2], al
 10878 00007215 88D3                    	mov	bl, dl
 10879 00007217 C0EB04                  	shr	bl, 4
 10880 0000721A 8A83[35750000]          	mov	al, [ebx+hex_chars]
 10881 00007220 A2[32760000]            	mov	[msgBasePort+1], al
 10882 00007225 88E3                    	mov	bl, ah
 10883                                  	;and	bl, 0Fh
 10884 00007227 8A83[35750000]          	mov	al, [ebx+hex_chars]
 10885 0000722D A2[31760000]            	mov	[msgBasePort], al
 10886                                  
 10887                                  	;xor	eax, eax
 10888                                  	; 27/11/2024
 10889 00007232 A0[848D0000]            	mov	al, [audio_intr]
 10890                                  	;mov	cl, 10
 10891                                  	;div	cl
 10892                                  	;add	ah, 30h
 10893                                  	;mov	[msgIRQnum], ah
 10894                                  	; 25/11/2024
 10895 00007237 0430                    	add	al, 30h
 10896 00007239 A2[48760000]            	mov	[msgIRQnum], al	; 12/01/2025
 10897                                  
 10898                                  	; 12/01/2025	
 10899                                  	; 20/12/2024
 10900                                  	sys	_msg, msgSB16Info, 255, 07h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 0000723E BB[FB750000]        <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 00007243 B9FF000000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 00007248 BA07000000          <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 0000724D B823000000          <1>  mov eax, %1
   130                              <1> 
   131 00007252 CD40                <1>  int 40h
 10901                                  
 10902 00007254 C3                      	retn
 10903                                  	
 10904                                  write_ac97_pci_dev_info:
 10905                                  	; 19/11/2024
 10906                                  	; 30/05/2024
 10907                                  	; 06/06/2017
 10908                                  	; 03/06/2017
 10909                                  	; BUS/DEV/FN
 10910                                  	;	00000000BBBBBBBBDDDDDFFF00000000
 10911                                  	; DEV/VENDOR
 10912                                  	;	DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV
 10913                                  
 10914 00007255 A1[788D0000]            	mov	eax, [dev_vendor]
 10915 0000725A 31DB                    	xor	ebx, ebx
 10916 0000725C 88C3                    	mov	bl, al
 10917 0000725E 88DA                    	mov	dl, bl
 10918 00007260 80E30F                  	and	bl, 0Fh
 10919 00007263 8A83[35750000]          	mov	al, [ebx+hex_chars]
 10920 00007269 A2[7C750000]            	mov	[msgVendorId+3], al
 10921 0000726E 88D3                    	mov	bl, dl
 10922 00007270 C0EB04                  	shr	bl, 4
 10923 00007273 8A83[35750000]          	mov	al, [ebx+hex_chars]
 10924 00007279 A2[7B750000]            	mov	[msgVendorId+2], al
 10925 0000727E 88E3                    	mov	bl, ah
 10926 00007280 88DA                    	mov	dl, bl
 10927 00007282 80E30F                  	and	bl, 0Fh
 10928 00007285 8A83[35750000]          	mov	al, [ebx+hex_chars]
 10929 0000728B A2[7A750000]            	mov	[msgVendorId+1], al
 10930 00007290 88D3                    	mov	bl, dl
 10931 00007292 C0EB04                  	shr	bl, 4
 10932 00007295 8A83[35750000]          	mov	al, [ebx+hex_chars]
 10933 0000729B A2[79750000]            	mov	[msgVendorId], al
 10934 000072A0 C1E810                  	shr	eax, 16
 10935 000072A3 88C3                    	mov	bl, al
 10936 000072A5 88DA                    	mov	dl, bl
 10937 000072A7 80E30F                  	and	bl, 0Fh
 10938 000072AA 8A83[35750000]          	mov	al, [ebx+hex_chars]
 10939 000072B0 A2[8D750000]            	mov	[msgDevId+3], al
 10940 000072B5 88D3                    	mov	bl, dl
 10941 000072B7 C0EB04                  	shr	bl, 4
 10942 000072BA 8A83[35750000]          	mov	al, [ebx+hex_chars]
 10943 000072C0 A2[8C750000]            	mov	[msgDevId+2], al
 10944 000072C5 88E3                    	mov	bl, ah
 10945 000072C7 88DA                    	mov	dl, bl
 10946 000072C9 80E30F                  	and	bl, 0Fh
 10947 000072CC 8A83[35750000]          	mov	al, [ebx+hex_chars]
 10948 000072D2 A2[8B750000]            	mov	[msgDevId+1], al
 10949 000072D7 88D3                    	mov	bl, dl
 10950 000072D9 C0EB04                  	shr	bl, 4
 10951 000072DC 8A83[35750000]          	mov	al, [ebx+hex_chars]
 10952 000072E2 A2[8A750000]            	mov	[msgDevId], al
 10953                                  
 10954 000072E7 A1[748D0000]            	mov	eax, [bus_dev_fn]
 10955 000072EC C1E808                  	shr	eax, 8
 10956 000072EF 88C3                    	mov	bl, al
 10957 000072F1 88DA                    	mov	dl, bl
 10958 000072F3 80E307                  	and	bl, 7 ; bit 0,1,2
 10959 000072F6 8A83[35750000]          	mov	al, [ebx+hex_chars]
 10960 000072FC A2[B2750000]            	mov	[msgFncNo+1], al
 10961 00007301 88D3                    	mov	bl, dl
 10962 00007303 C0EB03                  	shr	bl, 3
 10963 00007306 88DA                    	mov	dl, bl
 10964 00007308 80E30F                  	and	bl, 0Fh
 10965 0000730B 8A83[35750000]          	mov	al, [ebx+hex_chars]
 10966 00007311 A2[A4750000]            	mov	[msgDevNo+1], al
 10967 00007316 88D3                    	mov	bl, dl
 10968 00007318 C0EB04                  	shr	bl, 4
 10969 0000731B 8A83[35750000]          	mov	al, [ebx+hex_chars]
 10970 00007321 A2[A3750000]            	mov	[msgDevNo], al
 10971 00007326 88E3                    	mov	bl, ah
 10972 00007328 88DA                    	mov	dl, bl
 10973 0000732A 80E30F                  	and	bl, 0Fh
 10974 0000732D 8A83[35750000]          	mov	al, [ebx+hex_chars]
 10975 00007333 A2[98750000]            	mov	[msgBusNo+1], al
 10976 00007338 88D3                    	mov	bl, dl
 10977 0000733A C0EB04                  	shr	bl, 4
 10978 0000733D 8A83[35750000]          	mov	al, [ebx+hex_chars]
 10979 00007343 A2[97750000]            	mov	[msgBusNo], al
 10980                                  
 10981                                  	;mov	ax, [ac97_NamBar]
 10982 00007348 66A1[7C8D0000]          	mov	ax, [NAMBAR]
 10983 0000734E 88C3                    	mov	bl, al
 10984 00007350 88DA                    	mov	dl, bl
 10985 00007352 80E30F                  	and	bl, 0Fh
 10986 00007355 8A83[35750000]          	mov	al, [ebx+hex_chars]
 10987 0000735B A2[C2750000]            	mov	[msgNamBar+3], al
 10988 00007360 88D3                    	mov	bl, dl
 10989 00007362 C0EB04                  	shr	bl, 4
 10990 00007365 8A83[35750000]          	mov	al, [ebx+hex_chars]
 10991 0000736B A2[C1750000]            	mov	[msgNamBar+2], al
 10992 00007370 88E3                    	mov	bl, ah
 10993 00007372 88DA                    	mov	dl, bl
 10994 00007374 80E30F                  	and	bl, 0Fh
 10995 00007377 8A83[35750000]          	mov	al, [ebx+hex_chars]
 10996 0000737D A2[C0750000]            	mov	[msgNamBar+1], al
 10997 00007382 88D3                    	mov	bl, dl
 10998 00007384 C0EB04                  	shr	bl, 4
 10999 00007387 8A83[35750000]          	mov	al, [ebx+hex_chars]
 11000 0000738D A2[BF750000]            	mov	[msgNamBar], al
 11001                                  
 11002                                  	;mov	ax, [ac97_NabmBar]
 11003 00007392 66A1[7E8D0000]          	mov	ax, [NABMBAR]
 11004 00007398 88C3                    	mov	bl, al
 11005 0000739A 88DA                    	mov	dl, bl
 11006 0000739C 80E30F                  	and	bl, 0Fh
 11007 0000739F 8A83[35750000]          	mov	al, [ebx+hex_chars]
 11008 000073A5 A2[D2750000]            	mov	[msgNabmBar+3], al
 11009 000073AA 88D3                    	mov	bl, dl
 11010 000073AC C0EB04                  	shr	bl, 4
 11011 000073AF 8A83[35750000]          	mov	al, [ebx+hex_chars]
 11012 000073B5 A2[D1750000]            	mov	[msgNabmBar+2], al
 11013 000073BA 88E3                    	mov	bl, ah
 11014 000073BC 88DA                    	mov	dl, bl
 11015 000073BE 80E30F                  	and	bl, 0Fh
 11016 000073C1 8A83[35750000]          	mov	al, [ebx+hex_chars]
 11017 000073C7 A2[D0750000]            	mov	[msgNabmBar+1], al
 11018 000073CC 88D3                    	mov	bl, dl
 11019 000073CE C0EB04                  	shr	bl, 4
 11020 000073D1 8A83[35750000]          	mov	al, [ebx+hex_chars]
 11021 000073D7 A2[CF750000]            	mov	[msgNabmBar], al
 11022                                  
 11023 000073DC 31C0                    	xor	eax, eax
 11024 000073DE A0[848D0000]            	mov	al, [ac97_int_ln_reg]
 11025 000073E3 B10A                    	mov	cl, 10
 11026 000073E5 F6F1                    	div	cl
 11027                                  	; 23/11/2024
 11028                                  	;add	[msgIRQ], ax
 11029 000073E7 66053030                	add	ax, 3030h
 11030 000073EB 66A3[DB750000]          	mov	[msgIRQ], ax
 11031                                  	;and	al, al
 11032 000073F1 3C30                    	cmp	al, 30h
 11033 000073F3 750D                    	jnz	short _w_ac97imsg_
 11034 000073F5 A0[DC750000]            	mov	al, byte [msgIRQ+1]
 11035 000073FA B420                    	mov	ah, ' '
 11036 000073FC 66A3[DB750000]          	mov	[msgIRQ], ax
 11037                                  _w_ac97imsg_:
 11038                                  	; 12/01/2025
 11039                                  	; 01/12/2024
 11040                                  	sys	_msg, msgAC97Info, 255, 07h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00007402 BB[46750000]        <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 00007407 B9FF000000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 0000740C BA07000000          <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00007411 B823000000          <1>  mov eax, %1
   130                              <1> 
   131 00007416 CD40                <1>  int 40h
 11041                                  
 11042                                  	; 19/11/2024
 11043                                          ;retn
 11044                                  
 11045                                  	; 30/05/2024
 11046                                  write_VRA_info:
 11047                                  	; 12/01/2025
 11048                                  	; 01/12/2024
 11049                                  	sys	_msg, msgVRAheader, 255, 07h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00007418 BB[E0750000]        <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 0000741D B9FF000000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 00007422 BA07000000          <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00007427 B823000000          <1>  mov eax, %1
   130                              <1> 
   131 0000742C CD40                <1>  int 40h
 11050 0000742E 803D[898D0000]00        	cmp	byte [vra], 0
 11051 00007435 7617                    	jna	short _w_VRAi_no
 11052                                  _w_VRAi_yes:
 11053                                  	sys	_msg, msgVRAyes, 255, 07h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 00007437 BB[EF750000]        <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 0000743C B9FF000000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 00007441 BA07000000          <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 00007446 B823000000          <1>  mov eax, %1
   130                              <1> 
   131 0000744B CD40                <1>  int 40h
 11054 0000744D C3                      	retn
 11055                                  _w_VRAi_no:
 11056                                  	sys	_msg, msgVRAno, 255, 07h
   116                              <1> 
   117                              <1> 
   118                              <1> 
   119                              <1> 
   120                              <1>  %if %0 >= 2
   121 0000744E BB[F5750000]        <1>  mov ebx, %2
   122                              <1>  %if %0 >= 3
   123 00007453 B9FF000000          <1>  mov ecx, %3
   124                              <1>  %if %0 = 4
   125 00007458 BA07000000          <1>  mov edx, %4
   126                              <1>  %endif
   127                              <1>  %endif
   128                              <1>  %endif
   129 0000745D B823000000          <1>  mov eax, %1
   130                              <1> 
   131 00007462 CD40                <1>  int 40h
 11057                                  
 11058 00007464 C3                      	retn
 11059                                  
 11060                                  ; ---------------------------------------------------------------------------
 11061                                  
 11062                                  	; 15/01/2025
 11063                                  	; 13/01/2025
 11064                                  	; 12/01/2025
 11065                                  write_buffer_size:
 11066                                  	;;;	
 11067 00007465 A0[8E8D0000]            	mov	al, [blocks]	; (must be less than 10) 
 11068 0000746A 0430                    	add	al, '0'
 11069 0000746C A2[E9740000]            	mov	byte [blocks_txt], al
 11070                                  	;;;
 11071                                  	;cmp	byte [interpolation], 1
 11072                                  	; 15/01/2025 (mp3play2.s)
 11073 00007471 803D[9C8D0000]01        	cmp	byte [convert], 1
 11074 00007478 731F                    	jnb	short write_buffer_size_x
 11075                                  	;;;
 11076 0000747A BA[D1740000]            	mov	edx, buffersize_txt
 11077 0000747F E874F1FFFF              	call	wrstr_edx
 11078 00007484 A1[908D0000]            	mov	eax, [buffer_size]
 11079 00007489 E8A0F1FFFF              	call	wr_decimal_eax_with_thousands_seperator
 11080 0000748E BA[E1740000]            	mov	edx, bytes_txt
 11081 00007493 E860F1FFFF              	call	wrstr_edx
 11082 00007498 C3                      	retn
 11083                                  
 11084                                  	; 13/01/2025 (Indirect interpolation info)
 11085                                  write_buffer_size_x:
 11086 00007499 BA[F6740000]            	mov	edx, buffers1_txt
 11087 0000749E E855F1FFFF              	call	wrstr_edx
 11088 000074A3 A1[988D0000]            	mov	eax, [loadsize] ; decoding buffer size
 11089                                  	; 15/01/2025
 11090 000074A8 E881F1FFFF              	call	wr_decimal_eax_with_thousands_seperator
 11091 000074AD E814000000              	call	w_dbuff_bytes
 11092 000074B2 BA[1A750000]            	mov	edx, buffers2_txt
 11093 000074B7 E83CF1FFFF              	call	wrstr_edx
 11094 000074BC A1[908D0000]            	mov	eax, [buffer_size] ; wav buffer size
 11095 000074C1 E868F1FFFF              	call	wr_decimal_eax_with_thousands_seperator
 11096                                  w_dbuff_bytes:
 11097 000074C6 BA[2B750000]            	mov	edx, bytes2_txt
 11098 000074CB E828F1FFFF              	call	wrstr_edx
 11099 000074D0 C3                      	retn
 11100                                  
 11101                                  ; 11/01/2025
 11102 000074D1 0D0A                    buffersize_txt	db 0Dh, 0Ah
 11103 000074D3 427566666572205369-     		db 'Buffer Size: ', 0
 11103 000074DC 7A653A2000         
 11104                                  ; 12/01/2025
 11105                                  ;bytes_txt:	db ' bytes ', 0Dh, 0Ah, 0
 11106 000074E1 2062797465732028        bytes_txt:	db ' bytes ('
 11107 000074E9 3020626C6F636B7329-     blocks_txt	db '0 blocks) ', 0Dh, 0Ah, 0
 11107 000074F2 200D0A00           
 11108                                  
 11109                                  ; 13/01/2025
 11110 000074F6 0D0A                    buffers1_txt	db 0Dh, 0Ah
 11111 000074F8 427566666572207369-     		db 'Buffer size for', 0Dh, 0Ah
 11111 00007501 7A6520666F720D0A   
 11112 00007509 202020206465636F64-     		db '    decoding is ', 0
 11112 00007512 696E672069732000   
 11113 0000751A 2020776176206F7574-     buffers2_txt	db '  wav output is ', 0
 11113 00007523 7075742069732000   
 11114 0000752B 206279746573200D0A-     bytes2_txt:	db ' bytes ', 0Dh, 0Ah, 0
 11114 00007534 00                 
 11115                                  
 11116                                  ; ---------------------------------------------------------------------------
 11117                                  
 11118                                  ; 19/11/2024
 11119                                  ; 03/06/2017
 11120 00007535 303132333435363738-     hex_chars	db "0123456789ABCDEF", 0
 11120 0000753E 3941424344454600   
 11121 00007546 0D0A                    msgAC97Info	db 0Dh, 0Ah
 11122 00007548 204143393720417564-     		db " AC97 Audio Controller & Codec Info", 0Dh, 0Ah
 11122 00007551 696F20436F6E74726F-
 11122 0000755A 6C6C6572202620436F-
 11122 00007563 64656320496E666F0D-
 11122 0000756C 0A                 
 11123 0000756D 2056656E646F722049-     		db " Vendor ID: "
 11123 00007576 443A20             
 11124 00007579 303030306820446576-     msgVendorId	db "0000h Device ID: "
 11124 00007582 6963652049443A20   
 11125 0000758A 30303030680D0A          msgDevId	db "0000h", 0Dh, 0Ah
 11126 00007591 204275733A20            		db " Bus: "
 11127 00007597 303068204465766963-     msgBusNo	db "00h Device: "
 11127 000075A0 653A20             
 11128 000075A3 3030682046756E6374-     msgDevNo	db "00h Function: "
 11128 000075AC 696F6E3A20         
 11129 000075B1 303068                  msgFncNo	db "00h"
 11130 000075B4 0D0A                    		db 0Dh, 0Ah
 11131 000075B6 204E414D4241523A20      		db " NAMBAR: "
 11132 000075BF 30303030682020          msgNamBar	db "0000h  "
 11133 000075C6 4E41424D4241523A20      		db "NABMBAR: "
 11134 000075CF 303030306820204952-     msgNabmBar	db "0000h  IRQ: "
 11134 000075D8 513A20             
 11135 000075DB 3030                    msgIRQ		dw 3030h
 11136 000075DD 0D0A00                  		db 0Dh, 0Ah, 0
 11137                                  ; 25/11/2023
 11138 000075E0 205652412073757070-     msgVRAheader	db " VRA support: "
 11138 000075E9 6F72743A20         
 11139 000075EE 00                      		db 0	
 11140 000075EF 5945530D0A00            msgVRAyes	db "YES", 0Dh, 0Ah, 0
 11141 000075F5 4E4F200D0A              msgVRAno	db "NO ", 0Dh, 0Ah
 11142                                  		; 12/01/2025
 11143                                  		;db " (Interpolated sample rate playing method)"
 11144 000075FA 00                      		db 0
 11145                                  		;db 0Dh, 0Ah, 0
 11146                                  
 11147                                  ; ----------------------------------
 11148                                  
 11149                                  ; 24/11/2024
 11150 000075FB 0D0A                    msgSB16Info	db 0Dh, 0Ah
 11151 000075FD 20417564696F204861-     		db " Audio Hardware: Sound Blaster 16", 0Dh, 0Ah 
 11151 00007606 7264776172653A2053-
 11151 0000760F 6F756E6420426C6173-
 11151 00007618 7465722031360D0A   
 11152 00007620 202020202020426173-     		db "      Base Port: "
 11152 00007629 6520506F72743A20   
 11153 00007631 303030680D0A            msgBasePort	db "000h", 0Dh, 0Ah 
 11154 00007637 202020202020202020-     		db "            IRQ: "
 11154 00007640 2020204952513A20   
 11155 00007648 30                      msgIRQnum	db 30h		; 12/01/2025
 11156                                  crlf:		; 13/01/2025
 11157 00007649 0D0A00                  		db 0Dh, 0Ah, 0
 11158                                  
 11159                                  
 11160                                  ; ===========================================================================
 11161                                  ; end of TRDOS 386 specific procedures.
 11162                                  ; ---------------------------------------------------------------------------
 11163                                  
 11164                                  ; ===========================================================================
 11165                                  ; Initialized DATA
 11166                                  ; ===========================================================================
 11167                                  
 11168 0000764C 00                      option_test     db 0                   
 11169 0000764D 00                      option_mono     db 0                   
 11170 0000764E 00                      option_8bit     db 0                   
 11171 0000764F 00                      option_rate_shift db 0                 
 11172 00007650 00                      option_fast     db 0                   
 11173 00007651 90<rep 3h>                              align 4
 11174 00007654 00000000                cpuid_flags     dd 0                   
 11175 00007658 00                      cpuid_exists    db 0                   
 11176 00007659 00                      detected_cpu    db 0                   
 11177 0000765A 90<rep 2h>                              align 4
 11178 0000765C 00000000                mp3_output_milliseconds dd 0           
 11179 00007660 00000000                millisecond_count dd 0
 11180                                  
 11181                                  ; 20/10/2024                 
 11182                                  ; HANDLE hProcess
 11183                                  ;hProcess       dd 0                   
 11184                                  ; HANDLE hThread
 11185                                  ;hThread        dd 0                   
 11186                                  ; DWORD dwPriorityClass
 11187                                  ;dwPriorityClass dd 0                   
 11188                                  ; int nPriority
 11189                                  ;nPriority      dd 0
 11190                                                     
 11191 00007664 0000000000000000        ttt             dd 2 dup(0)            
 11192 0000766C 726561642068656164-     rdtsc_read_header db 'read header    ',0
 11192 00007675 65722020202000     
 11193 0000767C 0000000000000000        rdtsc_read_header_extra dd  0, 0       
 11194 00007684 726561642065787472-                     db 'read extra     ',0
 11194 0000768D 61202020202000     
 11195 00007694 0000000000000000        rdtsc_read_granule dd 0, 0             
 11196 0000769C 72656164206772616E-                     db 'read granule   ',0
 11196 000076A5 756C6520202000     
 11197 000076AC 0000000000000000        rdtsc_append_main dd 2 dup(0)          
 11198 000076B4 617070656E64206D61-                     db 'append main    ',0
 11198 000076BD 696E2020202000     
 11199 000076C4 0000000000000000        rdtsc_read_scalefac dd 2 dup(0)        
 11200 000076CC 72656164207363616C-                     db 'read scalefac  ',0
 11200 000076D5 65666163202000     
 11201 000076DC 0000000000000000        rdtsc_xlat_scalefac dd 2 dup(0)        
 11202 000076E4 786C6174207363616C-                     db 'xlat scalefac  ',0
 11202 000076ED 65666163202000     
 11203 000076F4 0000000000000000        rdtsc_read_huffman dd 2 dup(0)         
 11204 000076FC 726561642068756666-                     db 'read huffman   ',0
 11204 00007705 6D616E20202000     
 11205 0000770C 0000000000000000        rdtsc_ms_stereo dd 2 dup(0)            
 11206 00007714 6D732073746572656F-                     db 'ms stereo      ',0
 11206 0000771D 20202020202000     
 11207 00007724 0000000000000000        rdtsc_i_stereo  dd 2 dup(0)            
 11208 0000772C 692073746572656F20-                     db 'i stereo       ',0
 11208 00007735 20202020202000     
 11209 0000773C 0000000000000000        rdtsc_reorder   dd 2 dup(0)            
 11210 00007744 72656F726465722020-                     db 'reorder        ',0
 11210 0000774D 20202020202000     
 11211 00007754 0000000000000000        rdtsc_antialias dd 2 dup(0)            
 11212 0000775C 616E7469616C696173-                     db 'antialias      ',0
 11212 00007765 20202020202000     
 11213 0000776C 0000000000000000        rdtsc_imdct     dd 2 dup(0)            
 11214 00007774 696D64637420202020-                     db 'imdct          ',0
 11214 0000777D 20202020202000     
 11215 00007784 0000000000000000        rdtsc_imdct36   dd 2 dup(0)            
 11216 0000778C 20696D646374333620-                     db ' imdct36       ',0
 11216 00007795 20202020202000     
 11217 0000779C 0000000000000000        rdtsc_imdct12   dd 2 dup(0)            
 11218 000077A4 20696D646374313220-                     db ' imdct12       ',0
 11218 000077AD 20202020202000     
 11219 000077B4 0000000000000000        rdtsc_imdct0    dd 2 dup(0)            
 11220 000077BC 20696D646374302020-                     db ' imdct0        ',0
 11220 000077C5 20202020202000     
 11221 000077CC 0000000000000000        rdtsc_synth_dct dd 2 dup(0)            
 11222 000077D4 73796E74682F646374-                     db 'synth/dct      ',0
 11222 000077DD 20202020202000     
 11223 000077E4 0000000000000000        rdtsc_dct32     dd 2 dup(0)            
 11224 000077EC 2073796E74682E6463-                     db ' synth.dct32   ',0
 11224 000077F5 74333220202000     
 11225 000077FC 0000000000000000        rdtsc_synth     dd 2 dup(0)            
 11226 00007804 2073796E74682E6F75-                     db ' synth.output  ',0
 11226 0000780D 74707574202000     
 11227 00007814 0000000000000000        rdtsc_total     dd 2 dup(0)            
 11228 0000781C 746F74616C20202020-                     db 'total          ',0
 11228 00007825 20202020202000     
 11229 0000782C 000020002800300038-     mp3_bitrate_tab dw  0,32,40,48,56,64,80,96,112,128,160,192,224,256,320, 0
 11229 00007835 004000500060007000-
 11229 0000783E 8000A000C000E00000-
 11229 00007847 0140010000         
 11230 0000784C 000008001000180020-                     dw  0, 8,16,24,32,40,48,56,64,80,96,112,128,144,160, 0
 11230 00007855 002800300038004000-
 11230 0000785E 500060007000800090-
 11230 00007867 00A0000000         
 11231 0000786C 44AC80BB007D            mp3_freq_tab    dw 44100,48000,32000   
 11232 00007872 000504040000            mp3_lsf_sf_expand_init_table db 0, 5, 4, 4, 0, 0
 11233 00007878 9001                                    dw 400                  ; 0..399 ; normal case
 11234 0000787A 000504010C00                            db 0, 5, 4, 1, 0Ch, 0
 11235 00007880 F401                                    dw 500                  ; 400..499
 11236 00007882 000301011801                            db 0, 3, 1, 1, 18h, 1
 11237 00007888 0002                                    dw 512                  ; 500..511
 11238 0000788A 010606012400                            db 1, 6, 6, 1, 24h, 0
 11239 00007890 6803                                    dw 872                  ; 512+360 ; 0..359 for 2nd channel of intensity stereo
 11240 00007892 010404013000                            db 1, 4, 4, 1, 30h, 0
 11241 00007898 E803                                    dw 1000                 ; 512+488 ; 360..487
 11242 0000789A 010301013C00                            db 1, 3, 1, 1, 3Ch, 0
 11243 000078A0 0004                                    dw 1024                 ; 512+512 ; 488..511
 11244 000078A2 010000000000000000-     mp3_synth_win_src dw      1,     0,     0,     0,     0,     0,     1,     0
 11244 000078AB 00000001000000     
 11245 000078B2 000000000100000001-                     dw      0,     0,     1,     0,     1,     0,     1,     0
 11245 000078BB 00000001000000     
 11246 000078C2 010001000000010001-                     dw      1,     1,     0,     1,     1,     1,     1,     2
 11246 000078CB 00010001000200     
 11247 000078D2 010002000100020002-                     dw      1,     2,     1,     2,     2,     3,     2,     3
 11247 000078DB 00030002000300     
 11248 000078E2 020004000300030004-                     dw      2,     4,     3,     3,     4,     4,     4,     5
 11248 000078EB 00040004000500     
 11249 000078F2 050005000500060006-                     dw      5,     5,     5,     6,     6,     6,     6,     7
 11249 000078FB 00060006000700     
 11250 00007902 070006000800070007-                     dw      7,     6,     8,     7,     7,     8,     7,     7
 11250 0000790B 00080007000700     
 11251 00007912 080007000700070006-                     dw      8,     7,     7,     7,     6,     6,     6,     5
 11251 0000791B 00060006000500     
 11252 00007922 51FEFCFFFDFFFEFFFF-                     dw 0FE51h,0FFFCh,0FFFDh,0FFFEh,0FFFFh,     0,     1,     3
 11252 0000792B FF000001000300     
 11253 00007932 03000600070008000B-                     dw      3,     6,     7,     8,   0Bh,   0Ch,   0Eh,   11h
 11253 0000793B 000C000E001100     
 11254 00007942 1300150017001A001C-                     dw    13h,   15h,   17h,   1Ah,   1Ch,   1Fh,   22h,   24h
 11254 0000794B 001F0022002400     
 11255 00007952 27002A002C002F0032-                     dw    27h,   2Ah,   2Ch,   2Fh,   32h,   35h,   36h,   3Ah
 11255 0000795B 00350036003A00     
 11256 00007962 3C003E004000420044-                     dw    3Ch,   3Eh,   40h,   42h,   44h,   45h,   47h,   48h
 11256 0000796B 00450047004800     
 11257 00007972 490049004900490049-                     dw    49h,   49h,   49h,   49h,   49h,   48h,   46h,   45h
 11257 0000797B 00480046004500     
 11258 00007982 430040003D003A0035-                     dw    43h,   40h,   3Dh,   3Ah,   35h,   31h,   2Bh,   27h
 11258 0000798B 0031002B002700     
 11259 00007992 1F00190012000A0002-                     dw    1Fh,   19h,   12h,   0Ah,     2,0FFF9h,0FFEFh,0FFE6h
 11259 0000799B 00F9FFEFFFE6FF     
 11260 000079A2 3BF030003B00470053-                     dw 0F03Bh,   30h,   3Bh,   47h,   53h,   5Fh,   6Dh,   79h
 11260 000079AB 005F006D007900     
 11261 000079B2 86009500A100B000BD-                     dw    86h,   95h,  0A1h,  0B0h,  0BDh,  0CBh,  0D9h,  0E6h
 11261 000079BB 00CB00D900E600     
 11262 000079C2 F30001010D01190125-                     dw   0F3h,  101h,  10Dh,  119h,  125h,  130h,  13Ah,  144h
 11262 000079CB 0130013A014401     
 11263 000079D2 4D0155015B01620166-                     dw   14Dh,  155h,  15Bh,  162h,  166h,  16Ah,  16Bh,  16Dh
 11263 000079DB 016A016B016D01     
 11264 000079E2 6C016A01660160015A-                     dw   16Ch,  16Ah,  166h,  160h,  15Ah,  150h,  146h,  139h
 11264 000079EB 01500146013901     
 11265 000079F2 2B011A010801F300DD-                     dw   12Bh,  11Ah,  108h,  0F3h,  0DDh,  0C5h,  0A9h,   8Eh
 11265 000079FB 00C500A9008E00     
 11266 00007A02 6F004E002B000700E1-                     dw    6Fh,   4Eh,   2Bh,     7,0FFE1h,0FFB8h,0FF8Fh,0FF62h
 11266 00007A0B FFB8FF8FFF62FF     
 11267 00007A12 35FF06FFD5FEA4FE70-                     dw 0FF35h,0FF06h,0FED5h,0FEA4h,0FE70h,0FE3Ch,0FE06h,0FDD0h
 11267 00007A1B FE3CFE06FED0FD     
 11268 00007A22 0BCF9F02D702110349-                     dw 0CF0Bh,  29Fh,  2D7h,  311h,  349h,  382h,  3BBh,  3F4h
 11268 00007A2B 038203BB03F403     
 11269 00007A32 2C0464049A04D10405-                     dw   42Ch,  464h,  49Ah,  4D1h,  505h,  538h,  56Ah,  59Bh
 11269 00007A3B 0538056A059B05     
 11270 00007A42 C805F505200647066C-                     dw   5C8h,  5F5h,  620h,  647h,  66Ch,  68Fh,  6AFh,  6CCh
 11270 00007A4B 068F06AF06CC06     
 11271 00007A52 E506FC060F071F072B-                     dw   6E5h,  6FCh,  70Fh,  71Fh,  72Bh,  734h,  739h,  739h
 11271 00007A5B 07340739073907     
 11272 00007A62 370730072607170704-                     dw   737h,  730h,  726h,  717h,  704h,  6EDh,  6D3h,  6B4h
 11272 00007A6B 07ED06D306B406     
 11273 00007A72 91066C0640061306E1-                     dw   691h,  66Ch,  640h,  613h,  5E1h,  5ABh,  573h,  537h
 11273 00007A7B 05AB0573053705     
 11274 00007A82 F704B4046F042704DB-                     dw   4F7h,  4B4h,  46Fh,  427h,  3DBh,  38Fh,  33Eh,  2EDh
 11274 00007A8B 038F033E03ED02     
 11275 00007A92 9A024402ED0195013D-                     dw   29Ah,  244h,  1EDh,  195h,  13Dh,  0E2h,   88h,   2Eh
 11275 00007A9B 01E20088002E00     
 11276 00007AA2 00                                      db    0
 11277 00007AA3 00                                      db    0
 11278 00007AA4 000000010002000303-     mp3_slen_table  dw  0000h, 0100h, 0200h, 0300h, 0003h, 0101h, 0201h, 0301h
 11278 00007AAD 00010101020103     
 11279 00007AB4 020102020203030103-                     dw  0102h, 0202h, 0302h, 0103h, 0203h, 0303h, 0204h, 0304h
 11279 00007ABD 02030304020403     
 11280 00007AC4 060505050909090906-     mp3_lsf_nsf_table dd  05050506h, 09090909h, 09090906h
 11280 00007ACD 090909             
 11281 00007AD0 0605070309090C0606-                     dd  03070506h, 060C0909h, 060C0906h
 11281 00007AD9 090C06             
 11282 00007ADC 0B0A0000121200000F-                     dd  00000A0Bh, 00001212h, 0000120Fh
 11282 00007AE5 120000             
 11283 00007AE8 070707000C0C0C0006-                     dd  00070707h, 000C0C0Ch, 000C0F06h
 11283 00007AF1 0F0C00             
 11284 00007AF4 060606030C09090606-                     dd  03060606h, 0609090Ch, 06090C06h
 11284 00007AFD 0C0906             
 11285 00007B00 080805000F0C090006-                     dd  00050808h, 00090C0Fh, 00091206h
 11285 00007B09 120900             
 11286 00007B0C 1101100022021221        huff_tree_list_data db  11h,   1, 10h,   0, 22h,   2, 12h, 21h
 11287 00007B14 2011011000220212                        db  20h, 11h,   1, 10h,   0, 22h,   2, 12h
 11288 00007B1C 2120101101003323                        db  21h, 20h, 10h, 11h,   1,   0, 33h, 23h
 11289 00007B24 3231130330221221                        db  32h, 31h, 13h,   3, 30h, 22h, 12h, 21h
 11290 00007B2C 0220110110003303                        db    2, 20h, 11h,   1, 10h,   0, 33h,   3
 11291 00007B34 2332301331220212                        db  23h, 32h, 30h, 13h, 31h, 22h,   2, 12h
 11292 00007B3C 2120011110005545                        db  21h, 20h,   1, 11h, 10h,   0, 55h, 45h
 11293 00007B44 5453354425521551                        db  54h, 53h, 35h, 44h, 25h, 52h, 15h, 51h
 11294 00007B4C 0534504333244214                        db    5, 34h, 50h, 43h, 33h, 24h, 42h, 14h
 11295 00007B54 4140042332031331                        db  41h, 40h,   4, 23h, 32h,   3, 13h, 31h
 11296 00007B5C 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
 11297 00007B64 1000555445533544                        db  10h,   0, 55h, 54h, 45h, 53h, 35h, 44h
 11298 00007B6C 2552051551344350                        db  25h, 52h,   5, 15h, 51h, 34h, 43h, 50h
 11299 00007B74 3324421441044023                        db  33h, 24h, 42h, 14h, 41h,   4, 40h, 23h
 11300 00007B7C 3213310330220220                        db  32h, 13h, 31h,   3, 30h, 22h,   2, 20h
 11301 00007B84 1221110110005545                        db  12h, 21h, 11h,   1, 10h,   0, 55h, 45h
 11302 00007B8C 3553540544255215                        db  35h, 53h, 54h,   5, 44h, 25h, 52h, 15h
 11303 00007B94 5134435004244233                        db  51h, 34h, 43h, 50h,   4, 24h, 42h, 33h
 11304 00007B9C 4014412332133103                        db  40h, 14h, 41h, 23h, 32h, 13h, 31h,   3
 11305 00007BA4 3022021221201101                        db  30h, 22h,   2, 12h, 21h, 20h, 11h,   1
 11306 00007BAC 1000776776577566                        db  10h,   0, 77h, 67h, 76h, 57h, 75h, 66h
 11307 00007BB4 4774566537734655                        db  47h, 74h, 56h, 65h, 37h, 73h, 46h, 55h
 11308 00007BBC 5463277264077062                        db  54h, 63h, 27h, 72h, 64h,   7, 70h, 62h
 11309 00007BC4 4535065344177136                        db  45h, 35h,   6, 53h, 44h, 17h, 71h, 36h
 11310 00007BCC 2625521551344316                        db  26h, 25h, 52h, 15h, 51h, 34h, 43h, 16h
 11311 00007BD4 6160055024423304                        db  61h, 60h,   5, 50h, 24h, 42h, 33h,   4
 11312 00007BDC 1441402332031331                        db  14h, 41h, 40h, 23h, 32h,   3, 13h, 31h
 11313 00007BE4 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
 11314 00007BEC 1000776776756647                        db  10h,   0, 77h, 67h, 76h, 75h, 66h, 47h
 11315 00007BF4 7457555665377346                        db  74h, 57h, 55h, 56h, 65h, 37h, 73h, 46h
 11316 00007BFC 4554355327726407                        db  45h, 54h, 35h, 53h, 27h, 72h, 64h,   7
 11317 00007C04 7117703663604425                        db  71h, 17h, 70h, 36h, 63h, 60h, 44h, 25h
 11318 00007C0C 5205156226061661                        db  52h,   5, 15h, 62h, 26h,   6, 16h, 61h
 11319 00007C14 5134504333244214                        db  51h, 34h, 50h, 43h, 33h, 24h, 42h, 14h
 11320 00007C1C 4104402332133103                        db  41h,   4, 40h, 23h, 32h, 13h, 31h,   3
 11321 00007C24 3022211202201101                        db  30h, 22h, 21h, 12h,   2, 20h, 11h,   1
 11322 00007C2C 1000776776577566                        db  10h,   0, 77h, 67h, 76h, 57h, 75h, 66h
 11323 00007C34 4774655637735527                        db  47h, 74h, 65h, 56h, 37h, 73h, 55h, 27h
 11324 00007C3C 7246641771077036                        db  72h, 46h, 64h, 17h, 71h,   7, 70h, 36h
 11325 00007C44 6345544406052662                        db  63h, 45h, 54h, 44h,   6,   5, 26h, 62h
 11326 00007C4C 6116603553255215                        db  61h, 16h, 60h, 35h, 53h, 25h, 52h, 15h
 11327 00007C54 5134435004244214                        db  51h, 34h, 43h, 50h,   4, 24h, 42h, 14h
 11328 00007C5C 3341233240033013                        db  33h, 41h, 23h, 32h, 40h,   3, 30h, 13h
 11329 00007C64 3122122102200011                        db  31h, 22h, 12h, 21h,   2, 20h,   0, 11h
 11330 00007C6C 0110FEFCFDEDFFEF                        db    1, 10h,0FEh,0FCh,0FDh,0EDh,0FFh,0EFh
 11331 00007C74 DFEECFDEBFFBCEDC                        db 0DFh,0EEh,0CFh,0DEh,0BFh,0FBh,0CEh,0DCh
 11332 00007C7C AFE9ECDDFACDBEEB                        db 0AFh,0E9h,0ECh,0DDh,0FAh,0CDh,0BEh,0EBh
 11333 00007C84 9FF9EABDDB8FF8CC                        db  9Fh,0F9h,0EAh,0BDh,0DBh, 8Fh,0F8h,0CCh
 11334 00007C8C AE9E8E7F7EF7DAAD                        db 0AEh, 9Eh, 8Eh, 7Fh, 7Eh,0F7h,0DAh,0ADh
 11335 00007C94 BCCBF66FE85F9DD9                        db 0BCh,0CBh,0F6h, 6Fh,0E8h, 5Fh, 9Dh,0D9h
 11336 00007C9C F5E7ACBB4FF4CAE6                        db 0F5h,0E7h,0ACh,0BBh, 4Fh,0F4h,0CAh,0E6h
 11337 00007CA4 F33F8DD82FF26E9C                        db 0F3h, 3Fh, 8Dh,0D8h, 2Fh,0F2h, 6Eh, 9Ch
 11338 00007CAC 0FC95EAB7DD74EC8                        db  0Fh,0C9h, 5Eh,0ABh, 7Dh,0D7h, 4Eh,0C8h
 11339 00007CB4 D63EB99BAA1FF1F0                        db 0D6h, 3Eh,0B9h, 9Bh,0AAh, 1Fh,0F1h,0F0h
 11340 00007CBC BAE5E48C6DE3E22E                        db 0BAh,0E5h,0E4h, 8Ch, 6Dh,0E3h,0E2h, 2Eh
 11341 00007CC4 0E1EE1E05DD57CC7                        db  0Eh, 1Eh,0E1h,0E0h, 5Dh,0D5h, 7Ch,0C7h
 11342 00007CCC 4D8BB8D49AA96CC6                        db  4Dh, 8Bh,0B8h,0D4h, 9Ah,0A9h, 6Ch,0C6h
 11343 00007CD4 3DD37B2DD21DB75C                        db  3Dh,0D3h, 7Bh, 2Dh,0D2h, 1Dh,0B7h, 5Ch
 11344 00007CDC C5997AC3A7974BD1                        db 0C5h, 99h, 7Ah,0C3h,0A7h, 97h, 4Bh,0D1h
 11345 00007CE4 0DD08AA84CC46BB6                        db  0Dh,0D0h, 8Ah,0A8h, 4Ch,0C4h, 6Bh,0B6h
 11346 00007CEC 3C2CC25BB5891CC1                        db  3Ch, 2Ch,0C2h, 5Bh,0B5h, 89h, 1Ch,0C1h
 11347 00007CF4 980CC0B46AA6793B                        db  98h, 0Ch,0C0h,0B4h, 6Ah,0A6h, 79h, 3Bh
 11348 00007CFC B3885A2BA569A478                        db 0B3h, 88h, 5Ah, 2Bh,0A5h, 69h,0A4h, 78h
 11349 00007D04 87947776B21BB10B                        db  87h, 94h, 77h, 76h,0B2h, 1Bh,0B1h, 0Bh
 11350 00007D0C B0964A3AA359952A                        db 0B0h, 96h, 4Ah, 3Ah,0A3h, 59h, 95h, 2Ah
 11351 00007D14 A21AA10A68A08649                        db 0A2h, 1Ah,0A1h, 0Ah, 68h,0A0h, 86h, 49h
 11352 00007D1C 9339588567299257                        db  93h, 39h, 58h, 85h, 67h, 29h, 92h, 57h
 11353 00007D24 7538836647745665                        db  75h, 38h, 83h, 66h, 47h, 74h, 56h, 65h
 11354 00007D2C 7319910990488472                        db  73h, 19h, 91h,   9, 90h, 48h, 84h, 72h
 11355 00007D34 4664288218372717                        db  46h, 64h, 28h, 82h, 18h, 37h, 27h, 17h
 11356 00007D3C 7155077036634554                        db  71h, 55h,   7, 70h, 36h, 63h, 45h, 54h
 11357 00007D44 2662358108801661                        db  26h, 62h, 35h, 81h,   8, 80h, 16h, 61h
 11358 00007D4C 0660534425520515                        db    6, 60h, 53h, 44h, 25h, 52h,   5, 15h
 11359 00007D54 5134435024423314                        db  51h, 34h, 43h, 50h, 24h, 42h, 33h, 14h
 11360 00007D5C 4104402332133103                        db  41h,   4, 40h, 23h, 32h, 13h, 31h,   3
 11361 00007D64 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
 11362 00007D6C 1000FFEFFEDFEEFD                        db  10h,   0,0FFh,0EFh,0FEh,0DFh,0EEh,0FDh
 11363 00007D74 CFFCDEEDBFFBCEEC                        db 0CFh,0FCh,0DEh,0EDh,0BFh,0FBh,0CEh,0ECh
 11364 00007D7C DDAFFABEEBCDDC9F                        db 0DDh,0AFh,0FAh,0BEh,0EBh,0CDh,0DCh, 9Fh
 11365 00007D84 F9EABDDB8FF8CC9E                        db 0F9h,0EAh,0BDh,0DBh, 8Fh,0F8h,0CCh, 9Eh
 11366 00007D8C E97FF7ADDABC6FAE                        db 0E9h, 7Fh,0F7h,0ADh,0DAh,0BCh, 6Fh,0AEh
 11367 00007D94 0FCBF68EE85F9DF5                        db  0Fh,0CBh,0F6h, 8Eh,0E8h, 5Fh, 9Dh,0F5h
 11368 00007D9C 7EE7ACCABBD98D4F                        db  7Eh,0E7h,0ACh,0CAh,0BBh,0D9h, 8Dh, 4Fh
 11369 00007DA4 F43FF3D8E62FF26E                        db 0F4h, 3Fh,0F3h,0D8h,0E6h, 2Fh,0F2h, 6Eh
 11370 00007DAC F01FF19CC95EABBA                        db 0F0h, 1Fh,0F1h, 9Ch,0C9h, 5Eh,0ABh,0BAh
 11371 00007DB4 E57DD74EE48CC83E                        db 0E5h, 7Dh,0D7h, 4Eh,0E4h, 8Ch,0C8h, 3Eh
 11372 00007DBC 6DD6E39BB92EAAE2                        db  6Dh,0D6h,0E3h, 9Bh,0B9h, 2Eh,0AAh,0E2h
 11373 00007DC4 1EE10EE05DD57CC7                        db  1Eh,0E1h, 0Eh,0E0h, 5Dh,0D5h, 7Ch,0C7h
 11374 00007DCC 4D8BD4B89AA96CC6                        db  4Dh, 8Bh,0D4h,0B8h, 9Ah,0A9h, 6Ch,0C6h
 11375 00007DD4 3DD3D22D0D1D7BB7                        db  3Dh,0D3h,0D2h, 2Dh, 0Dh, 1Dh, 7Bh,0B7h
 11376 00007DDC D15CD0C58AA84CC4                        db 0D1h, 5Ch,0D0h,0C5h, 8Ah,0A8h, 4Ch,0C4h
 11377 00007DE4 6BB6990C3CC37AA7                        db  6Bh,0B6h, 99h, 0Ch, 3Ch,0C3h, 7Ah,0A7h
 11378 00007DEC A6C00BC22C5BB51C                        db 0A6h,0C0h, 0Bh,0C2h, 2Ch, 5Bh,0B5h, 1Ch
 11379 00007DF4 8998C14BB46A3B79                        db  89h, 98h,0C1h, 4Bh,0B4h, 6Ah, 3Bh, 79h
 11380 00007DFC B397882B5AB2A51B                        db 0B3h, 97h, 88h, 2Bh, 5Ah,0B2h,0A5h, 1Bh
 11381 00007E04 B1B069964AA47887                        db 0B1h,0B0h, 69h, 96h, 4Ah,0A4h, 78h, 87h
 11382 00007E0C 3AA359952AA21AA1                        db  3Ah,0A3h, 59h, 95h, 2Ah,0A2h, 1Ah,0A1h
 11383 00007E14 0AA0688649943993                        db  0Ah,0A0h, 68h, 86h, 49h, 94h, 39h, 93h
 11384 00007E1C 7709588529677692                        db  77h,   9, 58h, 85h, 29h, 67h, 76h, 92h
 11385 00007E24 9119904884577538                        db  91h, 19h, 90h, 48h, 84h, 57h, 75h, 38h
 11386 00007E2C 8366472882188174                        db  83h, 66h, 47h, 28h, 82h, 18h, 81h, 74h
 11387 00007E34 0880566537734627                        db    8, 80h, 56h, 65h, 37h, 73h, 46h, 27h
 11388 00007E3C 7264175571077036                        db  72h, 64h, 17h, 55h, 71h,   7, 70h, 36h
 11389 00007E44 6345542662160660                        db  63h, 45h, 54h, 26h, 62h, 16h,   6, 60h
 11390 00007E4C 3561534425521551                        db  35h, 61h, 53h, 44h, 25h, 52h, 15h, 51h
 11391 00007E54 0550344324423341                        db    5, 50h, 34h, 43h, 24h, 42h, 33h, 41h
 11392 00007E5C 1404233240031331                        db  14h,   4, 23h, 32h, 40h,   3, 13h, 31h
 11393 00007E64 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
 11394 00007E6C 1000EFFEDFFDCFFC                        db  10h,   0,0EFh,0FEh,0DFh,0FDh,0CFh,0FCh
 11395 00007E74 BFFBAFFA9FF9F88F                        db 0BFh,0FBh,0AFh,0FAh, 9Fh,0F9h,0F8h, 8Fh
 11396 00007E7C 7FF76FF6FF5FF54F                        db  7Fh,0F7h, 6Fh,0F6h,0FFh, 5Fh,0F5h, 4Fh
 11397 00007E84 F4F3F03FCEECDDDE                        db 0F4h,0F3h,0F0h, 3Fh,0CEh,0ECh,0DDh,0DEh
 11398 00007E8C E9EAD9EEEDEBBECD                        db 0E9h,0EAh,0D9h,0EEh,0EDh,0EBh,0BEh,0CDh
 11399 00007E94 DCDBAECCADDA7EAC                        db 0DCh,0DBh,0AEh,0CCh,0ADh,0DAh, 7Eh,0ACh
 11400 00007E9C CAC97D5EBDF22F0F                        db 0CAh,0C9h, 7Dh, 5Eh,0BDh,0F2h, 2Fh, 0Fh
 11401 00007EA4 1FF19EBCCB8EE89D                        db  1Fh,0F1h, 9Eh,0BCh,0CBh, 8Eh,0E8h, 9Dh
 11402 00007EAC E7BB8DD86EE69CAB                        db 0E7h,0BBh, 8Dh,0D8h, 6Eh,0E6h, 9Ch,0ABh
 11403 00007EB4 BAE5D74EE48CC83E                        db 0BAh,0E5h,0D7h, 4Eh,0E4h, 8Ch,0C8h, 3Eh
 11404 00007EBC 6DD69BB9AAE1D4B8                        db  6Dh,0D6h, 9Bh,0B9h,0AAh,0E1h,0D4h,0B8h
 11405 00007EC4 A97BB7D0E30EE05D                        db 0A9h, 7Bh,0B7h,0D0h,0E3h, 0Eh,0E0h, 5Dh
 11406 00007ECC D57CC74D8B9A6CC6                        db 0D5h, 7Ch,0C7h, 4Dh, 8Bh, 9Ah, 6Ch,0C6h
 11407 00007ED4 3D5CC50D8AA8994C                        db  3Dh, 5Ch,0C5h, 0Dh, 8Ah,0A8h, 99h, 4Ch
 11408 00007EDC B67A3C5B891CC098                        db 0B6h, 7Ah, 3Ch, 5Bh, 89h, 1Ch,0C0h, 98h
 11409 00007EE4 79E22E1ED32DD2D1                        db  79h,0E2h, 2Eh, 1Eh,0D3h, 2Dh,0D2h,0D1h
 11410 00007EEC 3B97881DC46BC3A7                        db  3Bh, 97h, 88h, 1Dh,0C4h, 6Bh,0C3h,0A7h
 11411 00007EF4 2CC2B5C10C4BB46A                        db  2Ch,0C2h,0B5h,0C1h, 0Ch, 4Bh,0B4h, 6Ah
 11412 00007EFC A6B35AA52BB21BB1                        db 0A6h,0B3h, 5Ah,0A5h, 2Bh,0B2h, 1Bh,0B1h
 11413 00007F04 0BB069964AA47887                        db  0Bh,0B0h, 69h, 96h, 4Ah,0A4h, 78h, 87h
 11414 00007F0C A33A592A9568A186                        db 0A3h, 3Ah, 59h, 2Ah, 95h, 68h,0A1h, 86h
 11415 00007F14 7794495767A21A0A                        db  77h, 94h, 49h, 57h, 67h,0A2h, 1Ah, 0Ah
 11416 00007F1C A039935885299276                        db 0A0h, 39h, 93h, 58h, 85h, 29h, 92h, 76h
 11417 00007F24 0919919048847538                        db    9, 19h, 91h, 90h, 48h, 84h, 75h, 38h
 11418 00007F2C 8366288247741881                        db  83h, 66h, 28h, 82h, 47h, 74h, 18h, 81h
 11419 00007F34 8008563773654627                        db  80h,   8, 56h, 37h, 73h, 65h, 46h, 27h
 11420 00007F3C 7264550717717036                        db  72h, 64h, 55h,   7, 17h, 71h, 70h, 36h
 11421 00007F44 6345542662166106                        db  63h, 45h, 54h, 26h, 62h, 16h, 61h,   6
 11422 00007F4C 6053354425525115                        db  60h, 53h, 35h, 44h, 25h, 52h, 51h, 15h
 11423 00007F54 0534435024423314                        db    5, 34h, 43h, 50h, 24h, 42h, 33h, 14h
 11424 00007F5C 4104402332133103                        db  41h,   4, 40h, 23h, 32h, 13h, 31h,   3
 11425 00007F64 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
 11426 00007F6C 1000EFFEDFFDCFFC                        db  10h,   0,0EFh,0FEh,0DFh,0FDh,0CFh,0FCh
 11427 00007F74 BFFBFAAF9FF9F88F                        db 0BFh,0FBh,0FAh,0AFh, 9Fh,0F9h,0F8h, 8Fh
 11428 00007F7C 7FF76FF65FF54FF4                        db  7Fh,0F7h, 6Fh,0F6h, 5Fh,0F5h, 4Fh,0F4h
 11429 00007F84 3FF32FF2F11FF00F                        db  3Fh,0F3h, 2Fh,0F2h,0F1h, 1Fh,0F0h, 0Fh
 11430 00007F8C EEDEEDCEECDDBEEB                        db 0EEh,0DEh,0EDh,0CEh,0ECh,0DDh,0BEh,0EBh
 11431 00007F94 CDDCAEEABDDBCC9E                        db 0CDh,0DCh,0AEh,0EAh,0BDh,0DBh,0CCh, 9Eh
 11432 00007F9C E9ADDABCCB8EE89D                        db 0E9h,0ADh,0DAh,0BCh,0CBh, 8Eh,0E8h, 9Dh
 11433 00007FA4 D97EE7ACFFCABB8D                        db 0D9h, 7Eh,0E7h,0ACh,0FFh,0CAh,0BBh, 8Dh
 11434 00007FAC D80EE00DE66E9CC9                        db 0D8h, 0Eh,0E0h, 0Dh,0E6h, 6Eh, 9Ch,0C9h
 11435 00007FB4 5EBAE5AB7DD7E48C                        db  5Eh,0BAh,0E5h,0ABh, 7Dh,0D7h,0E4h, 8Ch
 11436 00007FBC C84E2E3E6DD6E39B                        db 0C8h, 4Eh, 2Eh, 3Eh, 6Dh,0D6h,0E3h, 9Bh
 11437 00007FC4 B9AAE21EE15DD57C                        db 0B9h,0AAh,0E2h, 1Eh,0E1h, 5Dh,0D5h, 7Ch
 11438 00007FCC C74D8BB8D49AA96C                        db 0C7h, 4Dh, 8Bh,0B8h,0D4h, 9Ah,0A9h, 6Ch
 11439 00007FD4 C63DD32DD21D7BB7                        db 0C6h, 3Dh,0D3h, 2Dh,0D2h, 1Dh, 7Bh,0B7h
 11440 00007FDC D15CC58AA8994CC4                        db 0D1h, 5Ch,0C5h, 8Ah,0A8h, 99h, 4Ch,0C4h
 11441 00007FE4 6BB6D00C3CC37AA7                        db  6Bh,0B6h,0D0h, 0Ch, 3Ch,0C3h, 7Ah,0A7h
 11442 00007FEC 2CC25BB51C8998C1                        db  2Ch,0C2h, 5Bh,0B5h, 1Ch, 89h, 98h,0C1h
 11443 00007FF4 4BC00B3BB00A1AB4                        db  4Bh,0C0h, 0Bh, 3Bh,0B0h, 0Ah, 1Ah,0B4h
 11444 00007FFC 6AA67997A00990B3                        db  6Ah,0A6h, 79h, 97h,0A0h,   9, 90h,0B3h
 11445 00008004 882B5AB2A51BB169                        db  88h, 2Bh, 5Ah,0B2h,0A5h, 1Bh,0B1h, 69h
 11446 0000800C 96A44A78873AA359                        db  96h,0A4h, 4Ah, 78h, 87h, 3Ah,0A3h, 59h
 11447 00008014 952AA2A168867749                        db  95h, 2Ah,0A2h,0A1h, 68h, 86h, 77h, 49h
 11448 0000801C 9439935885296776                        db  94h, 39h, 93h, 58h, 85h, 29h, 67h, 76h
 11449 00008024 9219914884577538                        db  92h, 19h, 91h, 48h, 84h, 57h, 75h, 38h
 11450 0000802C 8366288218477481                        db  83h, 66h, 28h, 82h, 18h, 47h, 74h, 81h
 11451 00008034 0880566517077073                        db    8, 80h, 56h, 65h, 17h,   7, 70h, 73h
 11452 0000803C 3727724664557136                        db  37h, 27h, 72h, 46h, 64h, 55h, 71h, 36h
 11453 00008044 6345542662166106                        db  63h, 45h, 54h, 26h, 62h, 16h, 61h,   6
 11454 0000804C 6035534425521505                        db  60h, 35h, 53h, 44h, 25h, 52h, 15h,   5
 11455 00008054 5051344324423314                        db  50h, 51h, 34h, 43h, 24h, 42h, 33h, 14h
 11456 0000805C 4104402332133103                        db  41h,   4, 40h, 23h, 32h, 13h, 31h,   3
 11457 00008064 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
 11458 0000806C 10000B0F0D0E0705                        db  10h,   0, 0Bh, 0Fh, 0Dh, 0Eh,   7,   5
 11459 00008074 0906030A0C020104                        db    9,   6,   3, 0Ah, 0Ch,   2,   1,   4
 11460 0000807C 08000F0E0D0C0B0A                        db    8,   0, 0Fh, 0Eh, 0Dh, 0Ch, 0Bh, 0Ah
 11461 00008084 0908070605040302                        db    9,   8,   7,   6,   5,   4,   3,   2
 11462 0000808C 0100                                    db    1,   0
 11463 0000808E 000000000000                            db 6 dup(0)
 11464 00008094 0000                    mp3_huff_data   db   0,  0             
 11465 00008096 0100                                    db   1,  0              ; byte[32][2] ; table,linbits
 11466 00008098 0200                                    db   2,  0
 11467 0000809A 0300                                    db   3,  0
 11468 0000809C 0000                                    db   0,  0
 11469 0000809E 0400                                    db   4,  0
 11470 000080A0 0500                                    db   5,  0
 11471 000080A2 0600                                    db   6,  0
 11472 000080A4 0700                                    db   7,  0
 11473 000080A6 0800                                    db   8,  0
 11474 000080A8 0900                                    db   9,  0
 11475 000080AA 0A00                                    db  10,  0
 11476 000080AC 0B00                                    db  11,  0
 11477 000080AE 0C00                                    db  12,  0
 11478 000080B0 0000                                    db   0,  0
 11479 000080B2 0D00                                    db  13,  0
 11480 000080B4 0E01                                    db  14,  1
 11481 000080B6 0E02                                    db  14,  2
 11482 000080B8 0E03                                    db  14,  3
 11483 000080BA 0E04                                    db  14,  4
 11484 000080BC 0E06                                    db  14,  6
 11485 000080BE 0E08                                    db  14,  8
 11486 000080C0 0E0A                                    db  14, 10
 11487 000080C2 0E0D                                    db  14, 13
 11488 000080C4 0F04                                    db  15,  4
 11489 000080C6 0F05                                    db  15,  5
 11490 000080C8 0F06                                    db  15,  6
 11491 000080CA 0F07                                    db  15,  7
 11492 000080CC 0F08                                    db  15,  8
 11493 000080CE 0F09                                    db  15,  9
 11494 000080D0 0F0B                                    db  15, 11
 11495 000080D2 0F0D                                    db  15, 13
 11496 000080D4 040404040404060608-     mp3_band_size_long db    4,   4,   4,   4,   4,   4,   6,   6,   8,   8, 0Ah
 11496 000080DD 080A               
 11497 000080DF 0C1014181C222A3236-                     db  0Ch, 10h, 14h, 18h, 1Ch, 22h, 2Ah, 32h, 36h, 4Ch, 9Eh ; byte[9][22]
 11497 000080E8 4C9E               
 11498 000080EA 040404040404060606-                     db    4,   4,   4,   4,   4,   4,   6,   6,   6,   8, 0Ah
 11498 000080F3 080A               
 11499 000080F5 0C1012161C22282E36-                     db  0Ch, 10h, 12h, 16h, 1Ch, 22h, 28h, 2Eh, 36h, 36h,0C0h
 11499 000080FE 36C0               
 11500 00008100 040404040404060608-                     db    4,   4,   4,   4,   4,   4,   6,   6,   8, 0Ah, 0Ch
 11500 00008109 0A0C               
 11501 0000810B 1014181E262E384454-                     db  10h, 14h, 18h, 1Eh, 26h, 2Eh, 38h, 44h, 54h, 66h, 1Ah
 11501 00008114 661A               
 11502 00008116 060606060606080A0C-                     db    6,   6,   6,   6,   6,   6,   8, 0Ah, 0Ch, 0Eh, 10h
 11502 0000811F 0E10               
 11503 00008121 14181C20262E343C44-                     db  14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h
 11503 0000812A 3A36               
 11504 0000812C 060606060606080A0C-                     db    6,   6,   6,   6,   6,   6,   8, 0Ah, 0Ch, 0Eh, 10h
 11504 00008135 0E10               
 11505 00008137 12161A20262E344046-                     db  12h, 16h, 1Ah, 20h, 26h, 2Eh, 34h, 40h, 46h, 4Ch, 24h
 11505 00008140 4C24               
 11506 00008142 060606060606080A0C-                     db    6,   6,   6,   6,   6,   6,   8, 0Ah, 0Ch, 0Eh, 10h
 11506 0000814B 0E10               
 11507 0000814D 14181C20262E343C44-                     db  14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h
 11507 00008156 3A36               
 11508 00008158 060606060606080A0C-                     db    6,   6,   6,   6,   6,   6,   8, 0Ah, 0Ch, 0Eh, 10h
 11508 00008161 0E10               
 11509 00008163 14181C20262E343C44-                     db  14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h
 11509 0000816C 3A36               
 11510 0000816E 060606060606080A0C-                     db    6,   6,   6,   6,   6,   6,   8, 0Ah, 0Ch, 0Eh, 10h
 11510 00008177 0E10               
 11511 00008179 14181C20262E343C44-                     db  14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h
 11511 00008182 3A36               
 11512 00008184 0C0C0C0C0C0C101418-                     db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 10h, 14h, 18h, 1Ch, 20h
 11512 0000818D 1C20               
 11513 0000818F 283038404C5A020202-                     db  28h, 30h, 38h, 40h, 4Ch, 5Ah,   2,   2,   2,   2,   2
 11513 00008198 0202               
 11514 0000819A 000000000000000000-                     db 10 dup(0)            ; data align
 11514 000081A3 00                 
 11515 000081A4 0404040406080A0C0E-     mp3_band_size_short db    4,   4,   4,   4,   6,   8, 0Ah, 0Ch, 0Eh, 12h, 16h, 1Eh, 38h
 11515 000081AD 12161E38           
 11516 000081B1 0404040406060A0C0E-                     db    4,   4,   4,   4,   6,   6, 0Ah, 0Ch, 0Eh, 10h, 14h, 1Ah, 42h ; byte[9][16] ? ; byte [9][13]
 11516 000081BA 10141A42           
 11517 000081BE 0404040406080C1014-                     db    4,   4,   4,   4,   6,   8, 0Ch, 10h, 14h, 1Ah, 22h, 2Ah, 0Ch
 11517 000081C7 1A222A0C           
 11518 000081CB 0404040606080A0E12-                     db    4,   4,   4,   6,   6,   8, 0Ah, 0Eh, 12h, 1Ah, 20h, 2Ah, 12h
 11518 000081D4 1A202A12           
 11519 000081D8 04040406080A0C0E12-                     db    4,   4,   4,   6,   8, 0Ah, 0Ch, 0Eh, 12h, 18h, 20h, 2Ch, 0Ch
 11519 000081E1 18202C0C           
 11520 000081E5 04040406080A0C0E12-                     db    4,   4,   4,   6,   8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h
 11520 000081EE 181E2812           
 11521 000081F2 04040406080A0C0E12-                     db    4,   4,   4,   6,   8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h
 11521 000081FB 181E2812           
 11522 000081FF 04040406080A0C0E12-                     db    4,   4,   4,   6,   8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h
 11522 00008208 181E2812           
 11523 0000820C 0808080C1014181C24-                     db    8,   8,   8, 0Ch, 10h, 14h, 18h, 1Ch, 24h,   2,   2,   2, 1Ah
 11523 00008215 0202021A           
 11524 00008219 000000000000000000-                     db 11 dup(0)            ; data align
 11524 00008222 0000               
 11525 00008224 000000000000000000-     mp3_pretab      db    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
 11525 0000822D 0000               
 11526 0000822F 000000000000000000-                     db    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
 11526 00008238 0000               
 11527 0000823A 000000000000000000-                     db    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
 11527 00008243 0000               
 11528 00008245 010101010202030303-                     db    1,   1,   1,   1,   2,   2,   3,   3,   3,   2,   0
 11528 0000824E 0200               
 11529 00008250 00000000                                db 4 dup(0)             ; data align
 11530 00008254 4B1D4200028FDB0016-     mp3_mdct_win_src dd  00421D4Bh, 00DB8F02h, 019C7F16h, 029ADCC0h, 04000001h, 06246711h
 11530 0000825D 7F9C01C0DC9A020100-
 11530 00008266 000411672406       
 11531 0000826C 4506EE090CD6A71238-                     dd  09EE0645h, 12A7D60Ch, 3DF40538h,0BC63D32Fh,0E7B0025Bh,0F069D222h ; these are sine values divided by cosine values...
 11531 00008275 05F43D2FD363BC5B02-
 11531 0000827E B0E722D269F0       
 11532 00008284 567133F467D857F6A8-                     dd 0F4337156h,0F657D867h,0F7BCFBA8h,0F8BB5952h,0F97C4965h,0FA15BB1Ch
 11532 0000828D FBBCF75259BBF86549-
 11532 00008296 7CF91CBB15FA       
 11533 0000829C 936D94FA8E5100FB70-                     dd 0FA946D93h,0FB00518Eh,0FB5EA270h,0FBB2FDEAh,0FC000000h,0FC479F38h
 11533 000082A5 A25EFBEAFDB2FB0000-
 11533 000082AE 00FC389F47FC       
 11534 000082B4 09668BFC9898CCFC0B-                     dd 0FC8B6609h,0FCCC9898h,0FD0C4F0Bh,0FD4B895Ch,0FD8B3FCFh,0FDCC725Eh
 11534 000082BD 4F0CFD5C894BFDCF3F-
 11534 000082C6 8BFD5E72CCFD       
 11535 000082CC 2F3910FE67D857FE7D-                     dd 0FE10392Fh,0FE57D867h,0FEA4DA7Dh,0FEF935F7h,0FF5786D9h,0FFC36AD5h
 11535 000082D5 DAA4FEF735F9FED986-
 11535 000082DE 57FFD56AC3FF       
 11536 000082E4 4B1D4200028FDB0016-                     dd  00421D4Bh, 00DB8F02h, 019C7F16h, 029ADCC0h, 04000001h, 06246711h
 11536 000082ED 7F9C01C0DC9A020100-
 11536 000082F6 000411672406       
 11537 000082FC 4506EE090CD6A71238-                     dd  09EE0645h, 12A7D60Ch, 3DF40538h,0BC63D32Fh,0E7B0025Bh,0F069D222h
 11537 00008305 05F43D2FD363BC5B02-
 11537 0000830E B0E722D269F0       
 11538 00008314 567133F467D857F6A8-                     dd 0F4337156h,0F657D867h,0F7BCFBA8h,0F8BB5952h,0F97C4965h,0FA15BB1Ch
 11538 0000831D FBBCF75259BBF86549-
 11538 00008326 7CF91CBB15FA       
 11539 0000832C 291B93FAB946F5FABB-                     dd 0FA931B29h,0FAF546B9h,0FB41DABBh,0FB7D8F97h,0FBABA162h,0FBCE4E62h
 11539 00008335 DA41FB978F7DFB62A1-
 11539 0000833E ABFB624ECEFB       
 11540 00008344 671CF0FBAFC845FC0D-                     dd 0FBF01C67h,0FC45C8AFh,0FCD2D50Dh,0FD9008D0h,0FE74C032h,0FF771894h
 11540 0000834D D5D2FCD00890FD32C0-
 11540 00008356 74FE941877FF       
 11541 0000835C 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
 11541 00008365 000000000000000000-
 11541 0000836E 000000000000       
 11542 00008374 028FDB00010000040C-                     dd  00DB8F02h, 04000001h, 12A7D60Ch,0E7B0025Bh,0F657D867h,0F97C4965h
 11542 0000837D D6A7125B02B0E767D8-
 11542 00008386 57F665497CF9       
 11543 0000838C 8E5100FB000000FC98-                     dd 0FB00518Eh,0FC000000h,0FCCC9898h,0FD8B3FCFh,0FE57D867h,0FF5786D9h
 11543 00008395 98CCFCCF3F8BFD67D8-
 11543 0000839E 57FED98657FF       
 11544 000083A4 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
 11544 000083AD 000000000000000000-
 11544 000083B6 000000000000       
 11545 000083BC 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
 11545 000083C5 000000000000000000-
 11545 000083CE 000000000000       
 11546 000083D4 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
 11546 000083DD 000000000000000000-
 11546 000083E6 000000000000       
 11547 000083EC 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
 11547 000083F5 000000000000000000-
 11547 000083FE 000000000000       
 11548 00008404 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
 11548 0000840D 000000000000000000-
 11548 00008416 000000000000       
 11549 0000841C B58869025237BA0B4F-                     dd  026988B5h, 0BBA3752h, 37D3294Fh,0B73F655Bh,0E3B0025Bh,0EDAD5D13h
 11549 00008425 29D3375B653FB75B02-
 11549 0000842E B0E3135DADED       
 11550 00008434 A2ADB2F2B8288CF5D6-                     dd 0F2B2ADA2h,0F58C28B8h,0F75657D6h,0F88E2C57h,0F96DE565h,0FA1449CDh
 11550 0000843D 5756F7572C8EF865E5-
 11550 00008446 6DF9CD4914FA       
 11551 0000844C 936D94FA8E5100FB70-                     dd 0FA946D93h,0FB00518Eh,0FB5EA270h,0FBB2FDEAh,0FC000000h,0FC479F38h
 11551 00008455 A25EFBEAFDB2FB0000-
 11551 0000845E 00FC389F47FC       
 11552 00008464 09668BFC9898CCFC0B-                     dd 0FC8B6609h,0FCCC9898h,0FD0C4F0Bh,0FD4B895Ch,0FD8B3FCFh,0FDCC725Eh
 11552 0000846D 4F0CFD5C894BFDCF3F-
 11552 00008476 8BFD5E72CCFD       
 11553 0000847C 2F3910FE67D857FE7D-                     dd 0FE10392Fh,0FE57D867h,0FEA4DA7Dh,0FEF935F7h,0FF5786D9h,0FFC36AD5h
 11553 00008485 DAA4FEF735F9FED986-
 11553 0000848E 57FFD56AC3FF       
 11554 00008494 0000000000000040        mp3_is_table_normal dd  00000000h, 40000000h
 11555 0000849C BB58860D46A77932                        dd  0D8658BBh, 3279A746h
 11556 000084A4 D1F56C17300A9328                        dd  176CF5D1h, 28930A30h
 11557 000084AC 0000002000000020                        dd  20000000h, 20000000h
 11558 000084B4 300A9328D1F56C17                        dd  28930A30h, 176CF5D1h
 11559 000084BC 46A77932BB58860D                        dd  3279A746h, 0D8658BBh
 11560 000084C4 0000004000000000                        dd  40000000h, 00000000h
 11561 000084CC 00000080                mp3_is_table_lsf_src dd 80000000h      
 11562                                                                          ; sqrt based constants...
 11563                                                                          ; 40000000h*2 ; 2.0  (2^1.00) aka 2
 11564 000084D0 667EA26B                                dd 6BA27E66h            ; 35D13F33h*2 ; 1.681 (2^0.75)
 11565 000084D4 9A79825A                                dd 5A82799Ah            ; 2D413CCDh*2 ; 1.414 (2^0.50) aka sqrt(2)
 11566 000084D8 2AF81B4C                                dd 4C1BF82Ah            ; 260DFC15h*2 ; 1.189 (2^0.25) aka sqrt(sqrt(2))
 11567 000084DC 00000080                mp3_pow2_quarters dd 80000000h         
 11568                                                                          ; 40000000h*2 ; 2^(0/4)
 11569 000084E0 52F03798                                dd 9837F052h            ; 4C1BF829h*2 ; 2^(1/4)
 11570 000084E4 34F304B5                                dd 0B504F334h           ; 5A82799Ah*2 ; 2^(2/4)
 11571 000084E8 CCFC44D7                                dd 0D744FCCCh           ; 6BA27E66h*2 ; 2^(3/4)
 11572 000084EC 00000000                mp3_initialized dd 0                   
 11573 000084F0 12000000                mp3_huff_num_entries dd 12h            
 11574 000084F4 00                      wrchr_buf       db 0                   
 11575 000084F5 90<rep 3h>                              align 4
 11576                                  ; LPCSTR mp3_src_fname
 11577 000084F8 00000000                mp3_src_fname   dd 0                   
 11578                                  ; LPCSTR mp3_dst_fname
 11579 000084FC 00000000                mp3_dst_fname   dd 0                   
 11580                                  ; LPCSTR mp3_pcm_fname
 11581 00008500 00000000                mp3_pcm_fname   dd 0                   
 11582 00008504 524946462400000057-     mp3_wav_header  db 'RIFF$',0,0,0,'WAVEfmt ',10h,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,4,0,10h,0,'data',0,0,0,0
 11582 0000850D 415645666D74201000-
 11582 00008516 000001000200000000-
 11582 0000851F 000000000004001000-
 11582 00008528 6461746100000000   
 11583                                  ; 21/10/2024                   
 11584 00008530 00000000                zero		dd 0  
 11585 00008534 00                      num_enqueued_frames db 0
 11586 00008535 617564696F20647572-     txt_decode_timing1 db 'audio duration ',0
 11586 0000853E 6174696F6E2000     
 11587 00008545 206D696C6C69736563-     txt_decode_timing2 db ' milliseconds, decoded in ',0
 11587 0000854E 6F6E64732C20646563-
 11587 00008557 6F64656420696E2000 
 11588 00008560 206D696C6C69736563-     txt_decode_timing3 db ' milliseconds',0Dh,0Ah,0
 11588 00008569 6F6E64730D0A00     
 11589 00008570 20636C6F636B206379-     txt_clks_per_second db ' clock cycles per second:',0Dh,0Ah,0
 11589 00008579 636C65732070657220-
 11589 00008582 7365636F6E643A0D0A-
 11589 0000858B 00                 
 11590 0000858C 0303020106060505        huff_tree_list_numbits db    3,   3,   2,   1,   6,   6,   5,   5
 11591 00008594 0503030301060605                        db    5,   3,   3,   3,   1,   6,   6,   5
 11592 0000859C 0505030202020808                        db    5,   5,   3,   2,   2,   2,   8,   8
 11593 000085A4 0706070707070606                        db    7,   6,   7,   7,   7,   7,   6,   6
 11594 000085AC 0606030303010707                        db    6,   6,   3,   3,   3,   1,   7,   7
 11595 000085B4 0606060505050504                        db    6,   6,   6,   5,   5,   5,   5,   4
 11596 000085BC 0404030203030A0A                        db    4,   4,   3,   2,   3,   3, 0Ah, 0Ah
 11597 000085C4 0A0A090909090808                        db  0Ah, 0Ah,   9,   9,   9,   9,   8,   8
 11598 000085CC 0909080909080807                        db    9,   9,   8,   9,   9,   8,   8,   7
 11599 000085D4 0707080808080707                        db    7,   7,   8,   8,   8,   8,   7,   7
 11600 000085DC 0707060506060403                        db    7,   7,   6,   5,   6,   6,   4,   3
 11601 000085E4 03010B0B0A090A0A                        db    3,   1, 0Bh, 0Bh, 0Ah,   9, 0Ah, 0Ah
 11602 000085EC 0909090808090909                        db    9,   9,   9,   8,   8,   9,   9,   9
 11603 000085F4 0908080807080808                        db    9,   8,   8,   8,   7,   8,   8,   8
 11604 000085FC 0808080808060606                        db    8,   8,   8,   8,   8,   6,   6,   6
 11605 00008604 0404020303020909                        db    4,   4,   2,   3,   3,   2,   9,   9
 11606 0000860C 0808090908080808                        db    8,   8,   9,   9,   8,   8,   8,   8
 11607 00008614 0707070808070707                        db    7,   7,   7,   8,   8,   7,   7,   7
 11608 0000861C 0706060606050506                        db    7,   6,   6,   6,   6,   5,   5,   6
 11609 00008624 0605050404040303                        db    6,   5,   5,   4,   4,   4,   3,   3
 11610 0000862C 03030B0B0B0B0B0B                        db    3,   3, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11611 00008634 0A0A0A0A0A0A0A0B                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Bh
 11612 0000863C 0B0A09090A0A0909                        db  0Bh, 0Ah,   9,   9, 0Ah, 0Ah,   9,   9
 11613 00008644 0A0A090A0A080809                        db  0Ah, 0Ah,   9, 0Ah, 0Ah,   8,   8,   9
 11614 0000864C 090A0A09090A0A08                        db    9, 0Ah, 0Ah,   9,   9, 0Ah, 0Ah,   8
 11615 00008654 0808090909090909                        db    8,   8,   9,   9,   9,   9,   9,   9
 11616 0000865C 0808080808080707                        db    8,   8,   8,   8,   8,   8,   7,   7
 11617 00008664 0707060606060403                        db    7,   7,   6,   6,   6,   6,   4,   3
 11618 0000866C 03010A0A0A0A0A0A                        db    3,   1, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11619 00008674 0A0B0B0A0A090909                        db  0Ah, 0Bh, 0Bh, 0Ah, 0Ah,   9,   9,   9
 11620 0000867C 0A0A0A0A08080909                        db  0Ah, 0Ah, 0Ah, 0Ah,   8,   8,   9,   9
 11621 00008684 0708080808080909                        db    7,   8,   8,   8,   8,   8,   9,   9
 11622 0000868C 0909080708080707                        db    9,   9,   8,   7,   8,   8,   7,   7
 11623 00008694 0808080909080808                        db    8,   8,   8,   9,   9,   8,   8,   8
 11624 0000869C 0808080707060607                        db    8,   8,   8,   7,   7,   6,   6,   7
 11625 000086A4 0706050405050303                        db    7,   6,   5,   4,   5,   5,   3,   3
 11626 000086AC 03020A0A09090909                        db    3,   2, 0Ah, 0Ah,   9,   9,   9,   9
 11627 000086B4 0909090808090908                        db    9,   9,   9,   8,   8,   9,   9,   8
 11628 000086BC 0808080808090908                        db    8,   8,   8,   8,   8,   9,   9,   8
 11629 000086C4 0808080809090707                        db    8,   8,   8,   8,   9,   9,   7,   7
 11630 000086CC 0708080808080807                        db    7,   8,   8,   8,   8,   8,   8,   7
 11631 000086D4 0707070808070707                        db    7,   7,   7,   8,   8,   7,   7,   7
 11632 000086DC 0606060607070605                        db    6,   6,   6,   6,   7,   7,   6,   5
 11633 000086E4 0505040405050403                        db    5,   5,   4,   4,   5,   5,   4,   3
 11634 000086EC 0303131312111010                        db    3,   3, 13h, 13h, 12h, 11h, 10h, 10h
 11635 000086F4 1010101010101010                        db  10h, 10h, 10h, 10h, 10h, 10h, 10h, 10h
 11636 000086FC 11110F0F10100F0F                        db  11h, 11h, 0Fh, 0Fh, 10h, 10h, 0Fh, 0Fh
 11637 00008704 0F0F0F0F0F0F0F0F                        db  0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh
 11638 0000870C 10100F10100E0E0F                        db  10h, 10h, 0Fh, 10h, 10h, 0Eh, 0Eh, 0Fh
 11639 00008714 0F0F0F0E0E0E0E0E                        db  0Fh, 0Fh, 0Fh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh
 11640 0000871C 0E0E0E0E0E0E0F0F                        db  0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Fh, 0Fh
 11641 00008724 0E0D0E0E0D0D0E0E                        db  0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh, 0Eh
 11642 0000872C 0D0E0E0D0E0E0D0E                        db  0Dh, 0Eh, 0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Eh
 11643 00008734 0E0D0D0E0E0C0C0C                        db  0Eh, 0Dh, 0Dh, 0Eh, 0Eh, 0Ch, 0Ch, 0Ch
 11644 0000873C 0D0D0D0D0D0D0C0D                        db  0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh
 11645 00008744 0D0C0C0D0D0D0D0D                        db  0Dh, 0Ch, 0Ch, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh
 11646 0000874C 0D0D0D0D0D0D0D0C                        db  0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch
 11647 00008754 0C0D0D0C0C0C0C0D                        db  0Ch, 0Dh, 0Dh, 0Ch, 0Ch, 0Ch, 0Ch, 0Dh
 11648 0000875C 0D0D0D0C0D0D0C0B                        db  0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Ch, 0Bh
 11649 00008764 0C0C0C0C0C0C0C0C                        db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 11650 0000876C 0B0B0B0B0C0C0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh
 11651 00008774 0C0C0B0C0C0C0C0B                        db  0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Bh
 11652 0000877C 0B0C0C0B0C0C0B0C                        db  0Bh, 0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ch
 11653 00008784 0C0B0C0C0A0A0A0B                        db  0Ch, 0Bh, 0Ch, 0Ch, 0Ah, 0Ah, 0Ah, 0Bh
 11654 0000878C 0B0B0B0B0B0B0B0A                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah
 11655 00008794 0A0A0A0B0B0A0B0B                        db  0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh
 11656 0000879C 0A0B0B0B0B0A0A0B                        db  0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh
 11657 000087A4 0B0A0A0B0B0B0B0B                        db  0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11658 000087AC 0B09090A0A0A0A0A                        db  0Bh,   9,   9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11659 000087B4 0B0B0909090A0A09                        db  0Bh, 0Bh,   9,   9,   9, 0Ah, 0Ah,   9
 11660 000087BC 090A0A0A0A0A0A0A                        db    9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11661 000087C4 0A0A0A0809090909                        db  0Ah, 0Ah, 0Ah,   8,   9,   9,   9,   9
 11662 000087CC 09090A0A09090908                        db    9,   9, 0Ah, 0Ah,   9,   9,   9,   8
 11663 000087D4 0809090909090908                        db    8,   9,   9,   9,   9,   9,   9,   8
 11664 000087DC 0708080808070707                        db    7,   8,   8,   8,   8,   7,   7,   7
 11665 000087E4 0707060606060404                        db    7,   7,   6,   6,   6,   6,   4,   4
 11666 000087EC 03010D0D0D0D0C0D                        db    3,   1, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh
 11667 000087F4 0D0D0D0D0D0C0D0D                        db  0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh
 11668 000087FC 0C0C0C0C0C0C0C0C                        db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 11669 00008804 0C0C0C0C0C0C0C0C                        db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 11670 0000880C 0C0C0C0C0C0C0C0D                        db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Dh
 11671 00008814 0D0B0B0C0C0C0C0B                        db  0Dh, 0Bh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Bh
 11672 0000881C 0B0B0B0B0B0C0C0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ch, 0Ch, 0Bh
 11673 00008824 0B0B0B0B0B0B0B0C                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ch
 11674 0000882C 0C0B0B0B0B0B0B0B                        db  0Ch, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11675 00008834 0B0B0B0B0B0B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11676 0000883C 0B0B0B0B0B0B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11677 00008844 0B0B0C0C0B0B0B0B                        db  0Bh, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh, 0Bh, 0Bh
 11678 0000884C 0B0B0A0B0B0B0B0B                        db  0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11679 00008854 0B0A0A0B0B0A0A0A                        db  0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah
 11680 0000885C 0A0B0B0A0A0A0A0A                        db  0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11681 00008864 0A0A0B0B0A0A0A0A                        db  0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah
 11682 0000886C 0A0B0B090A0A0A0A                        db  0Ah, 0Bh, 0Bh,   9, 0Ah, 0Ah, 0Ah, 0Ah
 11683 00008874 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11684 0000887C 090A0A0A0A090A0A                        db    9, 0Ah, 0Ah, 0Ah, 0Ah,   9, 0Ah, 0Ah
 11685 00008884 090A0A0A0A0A0A0A                        db    9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11686 0000888C 0A09090909090909                        db  0Ah,   9,   9,   9,   9,   9,   9,   9
 11687 00008894 0A0A090909090909                        db  0Ah, 0Ah,   9,   9,   9,   9,   9,   9
 11688 0000889C 0A0A090909090909                        db  0Ah, 0Ah,   9,   9,   9,   9,   9,   9
 11689 000088A4 0809090909090909                        db    8,   9,   9,   9,   9,   9,   9,   9
 11690 000088AC 0909090808080809                        db    9,   9,   9,   8,   8,   8,   8,   9
 11691 000088B4 0909090909090908                        db    9,   9,   9,   9,   9,   9,   9,   8
 11692 000088BC 0808080808090908                        db    8,   8,   8,   8,   8,   9,   9,   8
 11693 000088C4 0808080808080909                        db    8,   8,   8,   8,   8,   8,   9,   9
 11694 000088CC 0807080807070707                        db    8,   7,   8,   8,   7,   7,   7,   7
 11695 000088D4 0808070707070706                        db    8,   8,   7,   7,   7,   7,   7,   6
 11696 000088DC 0707060607070606                        db    7,   7,   6,   6,   7,   7,   6,   6
 11697 000088E4 0605050505050304                        db    6,   5,   5,   5,   5,   5,   3,   4
 11698 000088EC 04030B0B0B0B0B0B                        db    4,   3, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11699 000088F4 0B0B0A0B0B0B0B0A                        db  0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah
 11700 000088FC 0A0A0A0A080A0A09                        db  0Ah, 0Ah, 0Ah, 0Ah,   8, 0Ah, 0Ah,   9
 11701 00008904 0909090A1011110F                        db    9,   9,   9, 0Ah, 10h, 11h, 11h, 0Fh
 11702 0000890C 0F10100E0F0F0E0E                        db  0Fh, 10h, 10h, 0Eh, 0Fh, 0Fh, 0Eh, 0Eh
 11703 00008914 0F0F0E0E0F0F0F0F                        db  0Fh, 0Fh, 0Eh, 0Eh, 0Fh, 0Fh, 0Fh, 0Fh
 11704 0000891C 0E0F0F0E0D080909                        db  0Eh, 0Fh, 0Fh, 0Eh, 0Dh,   8,   9,   9
 11705 00008924 08080D0E0E0E0E0E                        db    8,   8, 0Dh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh
 11706 0000892C 0E0E0E0E0E0D0D0E                        db  0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh
 11707 00008934 0E0E0E0D0E0E0D0D                        db  0Eh, 0Eh, 0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Dh
 11708 0000893C 0D0E0E0E0E0D0D0E                        db  0Dh, 0Eh, 0Eh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh
 11709 00008944 0E0D0E0E0C0D0D0D                        db  0Eh, 0Dh, 0Eh, 0Eh, 0Ch, 0Dh, 0Dh, 0Dh
 11710 0000894C 0D0D0D0D0D0D0D0D                        db  0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh
 11711 00008954 0D0D0D0C0D0D0D0D                        db  0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Dh, 0Dh
 11712 0000895C 0D0D0C0D0D0C0C0D                        db  0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Ch, 0Ch, 0Dh
 11713 00008964 0D0B0C0C0C0C0C0C                        db  0Dh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 11714 0000896C 0C0D0D0B0C0C0C0C                        db  0Ch, 0Dh, 0Dh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch
 11715 00008974 0B0C0C0C0C0C0C0C                        db  0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 11716 0000897C 0C0B0C0C0B0B0B0B                        db  0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh, 0Bh, 0Bh
 11717 00008984 0C0C0C0C0C0C0C0C                        db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 11718 0000898C 0B0C0C0B0C0C0B0C                        db  0Bh, 0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ch
 11719 00008994 0C0B0C0C0B0A0A0B                        db  0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ah, 0Ah, 0Bh
 11720 0000899C 0B0B0B0B0B0A0A0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh
 11721 000089A4 0B0A0A0B0B0B0B0B                        db  0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11722 000089AC 0B0B0B0A0B0B0A0A                        db  0Bh, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah
 11723 000089B4 0A0B0B0A0A0B0B0A                        db  0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah
 11724 000089BC 0A0B0B0A09090A0A                        db  0Ah, 0Bh, 0Bh, 0Ah,   9,   9, 0Ah, 0Ah
 11725 000089C4 0A0A0A0A0909090A                        db  0Ah, 0Ah, 0Ah, 0Ah,   9,   9,   9, 0Ah
 11726 000089CC 0A090A0A09090809                        db  0Ah,   9, 0Ah, 0Ah,   9,   9,   8,   9
 11727 000089D4 0909090909090908                        db    9,   9,   9,   9,   9,   9,   9,   8
 11728 000089DC 0809090808070708                        db    8,   9,   9,   8,   8,   7,   7,   8
 11729 000089E4 0807060606060404                        db    8,   7,   6,   6,   6,   6,   4,   4
 11730 000089EC 0301080808080808                        db    3,   1,   8,   8,   8,   8,   8,   8
 11731 000089F4 0808070808070708                        db    8,   8,   7,   8,   8,   7,   7,   8
 11732 000089FC 0807070707070707                        db    8,   7,   7,   7,   7,   7,   7,   7
 11733 00008A04 0707070707080809                        db    7,   7,   7,   7,   7,   8,   8,   9
 11734 00008A0C 0B0B0B0B0B0B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11735 00008A14 0B0B0B0B0B0B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11736 00008A1C 0B0B0B0B0B0B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 11737 00008A24 0B0B0B0B040B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh,   4, 0Bh, 0Bh, 0Bh
 11738 00008A2C 0B0C0C0B0A0B0B0A                        db  0Bh, 0Ch, 0Ch, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah
 11739 00008A34 0A0A0A0B0B0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah
 11740 00008A3C 0A0B0B0A0A0A0A0A                        db  0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11741 00008A44 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11742 00008A4C 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11743 00008A54 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11744 00008A5C 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11745 00008A64 0A0A0B0B0A0A0A0A                        db  0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah
 11746 00008A6C 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 11747 00008A74 0A0B0B0A0B0B0A09                        db  0Ah, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah,   9
 11748 00008A7C 0A0A0A0A0B0B0A09                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah,   9
 11749 00008A84 090A0A090A0A0A0A                        db    9, 0Ah, 0Ah,   9, 0Ah, 0Ah, 0Ah, 0Ah
 11750 00008A8C 09090A0A09090909                        db    9,   9, 0Ah, 0Ah,   9,   9,   9,   9
 11751 00008A94 0909090909090909                        db    9,   9,   9,   9,   9,   9,   9,   9
 11752 00008A9C 0909090909090909                        db    9,   9,   9,   9,   9,   9,   9,   9
 11753 00008AA4 0909090909090909                        db    9,   9,   9,   9,   9,   9,   9,   9
 11754 00008AAC 0909090909090909                        db    9,   9,   9,   9,   9,   9,   9,   9
 11755 00008AB4 0A0A0909090A0A08                        db  0Ah, 0Ah,   9,   9,   9, 0Ah, 0Ah,   8
 11756 00008ABC 0909080808080808                        db    9,   9,   8,   8,   8,   8,   8,   8
 11757 00008AC4 0808080808080809                        db    8,   8,   8,   8,   8,   8,   8,   9
 11758 00008ACC 0908080808080809                        db    9,   8,   8,   8,   8,   8,   8,   9
 11759 00008AD4 0907080807070707                        db    9,   7,   8,   8,   7,   7,   7,   7
 11760 00008ADC 0708080707060607                        db    7,   8,   8,   7,   7,   6,   6,   7
 11761 00008AE4 0706050506060404                        db    7,   6,   5,   5,   6,   6,   4,   4
 11762 00008AEC 0404060606060606                        db    4,   4,   6,   6,   6,   6,   6,   6
 11763 00008AF4 0505050505040404                        db    5,   5,   5,   5,   5,   4,   4,   4
 11764 00008AFC 0401040404040404                        db    4,   1,   4,   4,   4,   4,   4,   4
 11765 00008B04 0404040404040404                        db    4,   4,   4,   4,   4,   4,   4,   4
 11766 00008B0C 0404                                    db    4,   4
 11767 00008B0E 03                      _@@const_3      db 3                   
 11768 00008B0F 000000                                  db 3 dup(0)
 11769 00008B12 [02480000]              mp3_synth_filter_procs dd synth_16bit_shift_0_slow ; SYNTH_MACRO 0,0,0
 11770 00008B16 [EE4A0000]                              dd synth_16bit_shift_1_slow ; SYNTH_MACRO 0,1,0
 11771 00008B1A [E04D0000]                              dd synth_16bit_shift_2_slow ; SYNTH_MACRO 0,2,0
 11772 00008B1E [D2500000]                              dd synth_8bit_shift_0_slow ; SYNTH_MACRO 1,0,0
 11773 00008B22 [B3530000]                              dd synth_8bit_shift_1_slow ; SYNTH_MACRO 1,1,0
 11774 00008B26 [9A560000]                              dd synth_8bit_shift_2_slow ; SYNTH_MACRO 1,2,0
 11775 00008B2A [C3350000]                              dd synth_16bit_shift_0_fast ; SYNTH_MACRO 0,0,1
 11776 00008B2E [CF380000]                              dd synth_16bit_shift_1_fast ; SYNTH_MACRO 0,1,1
 11777 00008B32 [E13B0000]                              dd synth_16bit_shift_2_fast ; SYNTH_MACRO 0,2,1
 11778 00008B36 [F33E0000]                              dd synth_8bit_shift_0_fast ; SYNTH_MACRO 1,0,1
 11779 00008B3A [F4410000]                              dd synth_8bit_shift_1_fast ; SYNTH_MACRO 1,1,1
 11780 00008B3E [FB440000]                              dd synth_8bit_shift_2_fast ; SYNTH_MACRO 1,2,1
 11781                                  ;txt_hello      db 'nocash mp3 decoder v1.4, 2024 martin korth, press ctrl+c to quit,'
 11782                                  ;               db ' BDS now',0Dh,0Ah,0
 11783                                  ; Erdogan Tan - 17/10/2024
 11784 00008B42 0D0A                    txt_hello       db 13,10
 11785                                  		;db 'NOCASH MP3 PLAYER v1.4 for Windows ',0
 11786                                  		; 09/01/2025
 11787 00008B44 4E4F43415348204D50-     		db 'NOCASH MP3 PLAYER v1.0 for TRDOS386 ',0
 11787 00008B4D 3320504C4159455220-
 11787 00008B56 76312E3020666F7220-
 11787 00008B5F 5452444F5333383620-
 11787 00008B68 00                 
 11788                                  		 
 11789 00008B69 66696C653A2000          txt_file        db 'file: ',0          
 11790 00008B70 66696C652073697A65-     txt_file_size   db 'file size: ',0     
 11790 00008B79 3A2000             
 11791 00008B7C 2C206964332073697A-     txt_id3_size    db ', id3 size: ',0    
 11791 00008B85 653A2000           
 11792 00008B89 2C207461672073697A-     txt_tag_size    db ', tag size: ',0    
 11792 00008B92 653A2000           
 11793 00008B96 696E7075743A2000        txt_input       db 'input: ',0         
 11794 00008B9E 6F75747075743A2000      txt_output      db 'output: ',0        
 11795 00008BA7 20687A2C2000            txt_hz          db ' hz, ',0           
 11796 00008BAD 206368616E6E656C73-     txt_channels    db ' channels, ',0     
 11796 00008BB6 2C2000             
 11797 00008BB9 2062697400              txt_bit         db ' bit',0            
 11798 00008BBE 206B6269742F7300        txt_kbit_s      db ' kbit/s',0         
 11799 00008BC6 63616E6E6F74206F70-     txt_not_found   db 'cannot open source file',0Dh,0Ah,0
 11799 00008BCF 656E20736F75726365-
 11799 00008BD8 2066696C650D0A00   
 11800 00008BE0 75736167653A206D70-     txt_help        db 'usage: mp3play input.mp3 [output.wav] [verify.pcm] [/test]', 0Dh,0Ah
 11800 00008BE9 33706C617920696E70-
 11800 00008BF2 75742E6D7033205B6F-
 11800 00008BFB 75747075742E776176-
 11800 00008C04 5D205B766572696679-
 11800 00008C0D 2E70636D5D205B2F74-
 11800 00008C16 6573745D0D0A       
 11801 00008C1C 202020202020202020-                     db '                         [/mono] [/8bit] [/fast] [/half|/quarter]',0Dh,0Ah,0
 11801 00008C25 202020202020202020-
 11801 00008C2E 202020202020205B2F-
 11801 00008C37 6D6F6E6F5D205B2F38-
 11801 00008C40 6269745D205B2F6661-
 11801 00008C49 73745D205B2F68616C-
 11801 00008C52 667C2F717561727465-
 11801 00008C5B 725D0D0A00         
 11802 00008C60 766572696679206D61-     _@@txt_verify1  db 'verify max difference = ',0
 11802 00008C69 782064696666657265-
 11802 00008C72 6E6365203D2000     
 11803 00008C79 206174206D70333A00      _@@txt_verify1_at_mp3 db ' at mp3:',0  
 11804 00008C82 2C2061766572616765-     _@@txt_verify2  db ', average difference = ',0
 11804 00008C8B 20646966666572656E-
 11804 00008C94 6365203D2000       
 11805                                  
 11806                                  ; Erdogan Tan - 17/10/2024
 11807                                                 ;db 'NOCASH MP3 PLAYER v1.4 for Windows ',0
 11808 00008C9A 287072657373204354-     txt_ctrlc       db '(press CTRL+C to quit)', 13,10,0
 11808 00008CA3 524C2B4320746F2071-
 11808 00008CAC 756974290D0A00     
 11809                                  txt_ctrlc_size equ $ - txt_ctrlc
 11810 00008CB3 0D0A                    txt_about       db 13,10
 11811                                                  ;db '----------------------------------',13,10
 11812 00008CB5 2D2D2D2D2D2D2D2D2D-                     db '-----------------------------------',13,10
 11812 00008CBE 2D2D2D2D2D2D2D2D2D-
 11812 00008CC7 2D2D2D2D2D2D2D2D2D-
 11812 00008CD0 2D2D2D2D2D2D2D2D0D-
 11812 00008CD9 0A                 
 11813 00008CDA 4572646F67616E2054-                     db 'Erdogan Tan - 15/01/2025 (Assembler: NASM)', 13,10
 11813 00008CE3 616E202D2031352F30-
 11813 00008CEC 312F32303235202841-
 11813 00008CF5 7373656D626C65723A-
 11813 00008CFE 204E41534D290D0A   
 11814 00008D06 4F726967696E616C20-                     db 'Original code: MP3PLAYER.EXE v1.4 (20/09/2024)', 13,10
 11814 00008D0F 636F64653A204D5033-
 11814 00008D18 504C415945522E4558-
 11814 00008D21 452076312E34202832-
 11814 00008D2A 302F30392F32303234-
 11814 00008D33 290D0A             
 11815 00008D36 202020202020202020-                     db '               by Martin Korth (TASM source code)'
 11815 00008D3F 202020202020627920-
 11815 00008D48 4D617274696E204B6F-
 11815 00008D51 72746820285441534D-
 11815 00008D5A 20736F757263652063-
 11815 00008D63 6F646529           
 11816 00008D67 0D0A0D0A00                              db 13,10,13,10,0
 11817 00008D6C 76312E342E30                            db 'v1.4.0'
 11818                                  ; 10/01/2025
 11819 00008D72 00                      half_buffer	db 0
 11820                                  
 11821                                  ; ===========================================================================
 11822                                  ; Uninitialized DATA (BSS)
 11823                                  ; ===========================================================================
 11824                                  
 11825 00008D73 90                      align 4
 11826                                  
 11827                                  bss_start:
 11828                                  
 11829                                  ; 10/01/2025
 11830                                  ABSOLUTE bss_start
 11831                                  
 11832                                  ; 12/01/2025
 11833                                  ;;;;
 11834                                  ; AC97 specific
 11835 00008D74 ????????                bus_dev_fn	resd 1
 11836 00008D78 ????????                dev_vendor	resd 1
 11837 00008D7C ????                    NAMBAR		resw 1
 11838 00008D7E ????                    NABMBAR		resw 1
 11839                                  ; SB16 specific
 11840 00008D80 ????????                audio_io_base	resd 1
 11841                                  ac97_int_ln_reg:
 11842 00008D84 ??                      audio_intr	resb 1
 11843                                  ;;;;
 11844                                  
 11845 00008D85 ??????                  alignb 4
 11846                                  
 11847                                  ;;;
 11848                                  ; 20/10/2024 (TRDOS 386 specific parameters)
 11849 00008D88 ??                      audio_hardware	resb 1
 11850 00008D89 ??                      vra		resb 1
 11851 00008D8A ????                    max_frequency	resw 1
 11852 00008D8C ??                      srb		resb 1
 11853 00008D8D ??                      volume_level	resb 1
 11854 00008D8E ??                      blocks		resb 1
 11855 00008D8F ??                      		resb 1
 11856 00008D90 ????????                buffer_size	resd 1
 11857                                  ;;;
 11858                                  
 11859                                  ; 15/01/2025 (mp3play2.s)
 11860                                  ;;;;
 11861                                  ; 13/01/2025 (Interpolation parameters)
 11862 00008D94 ????????                conversion	resd 1	; pointer to convers(t)ion
 11863                                  			; or interpolation proc address
 11864 00008D98 ????????                loadsize	resd 1	; decoding buffer size
 11865                                  ;interpolation	resb 1	; interpolation status
 11866 00008D9C ??                      convert		resb 1	; mono to stereo or 8bit to 16bit
 11867                                  			; conversion flag ; 15/01/2025
 11868 00008D9D ??                      counter		resb 1  ; 15/01/2025
 11869 00008D9E ????                    		resw 1
 11870                                  ;;;;
 11871                                  	
 11872                                  
 11873                                  mp3_context_start:
 11874 00008DA0 <res 1000h>             main_data_pool_start	resb 4096
 11875 00009DA0 ????????                main_data_pool_wr_ptr	resd 1
 11876 00009DA4 ????????                mp3_src_data_location	resd 1
 11877 00009DA8 ????????                mp3_src_frame_size	resd 1
 11878 00009DAC ????????                mp3_src_frame_end	resd 1
 11879 00009DB0 ????????                mp3_hdr_32bit_header	resd 1
 11880 00009DB4 ????????                mp3_hdr_flag_crc	resd 1
 11881 00009DB8 ????????                mp3_hdr_flag_mpeg25	resd 1
 11882 00009DBC ????????                mp3_hdr_flag_padding	resd 1
 11883 00009DC0 ????????                mp3_sample_rate		resd 1
 11884 00009DC4 ????????                mp3_hdr_sample_rate_index resd 1
 11885 00009DC8 ????????                mp3_bit_rate		resd 1
 11886 00009DCC ????????                mp3_src_num_channels	resd 1
 11887 00009DD0 ????????                mp3_output_num_channels resd 1
 11888 00009DD4 ????????                mp3_output_sample_rate	resd 1
 11889 00009DD8 ????????                mp3_bytes_per_sample	resd 1
 11890 00009DDC ????????                mp3_curr_syn_index	resd 1
 11891 00009DE0 ????????                mp3_curr_syn_dst	resd 1
 11892 00009DE4 ????????                mp3_nb_frames		resd 1
 11893 00009DE8 ????????                mp3_hdr_mode_val	resd 1
 11894 00009DEC ????????                mp3_hdr_mode_ext	resd 1
 11895 00009DF0 ????????                mp3_hdr_flag_lsf	resd 1
 11896 00009DF4 ????????                mp3_synth_filter_proc	resd 1
 11897                                  
 11898 00009DF8 <res 2000h>             mp3_synth_buf   resd 2048
 11899 0000BDF8 ????????????????        mp3_synth_index resd 2
 11900 0000BE00 <res 2400h>             mp3_sb_samples  resd 2304
 11901                                  	                           ; MP3_MAX_CHANNELS*36*SBLIMIT
 11902 0000E200 <res 1200h>             mp3_mdct_buf    resd 1152
 11903                                                                     ; MP3_MAX_CHANNELS*SBLIMIT*18
 11904 0000F400 ????????                mp3_free_format_frame_size resd 1
 11905                                  
 11906 0000F404 ??                      mp3_curr_vfrac_bits resb 1
 11907                                  
 11908 0000F405 ??????                  alignb 4
 11909                                  
 11910 0000F408 ????????                mp3_xing_id     resd 1
 11911 0000F40C ????????                mp3_xing_flags  resd 1
 11912 0000F410 ????????                mp3_xing_frames resd 1
 11913 0000F414 ????????                mp3_xing_filesize resd 1
 11914 0000F418 <res 64h>               mp3_xing_toc    resb 100
 11915 0000F47C ????????                mp3_xing_vbr_scale resd 1
 11916 0000F480 ????????                mp3_file_size   resd 1
 11917 0000F484 ????????                mp3_id3_size    resd 1
 11918 0000F488 ????????                mp3_tag_size    resd 1
 11919                                  
 11920 0000F48C ????????                mp3_num_frames_decoded	resd 1
 11921 0000F490 ????????                mp3_total_output_size	resd 1
 11922 0000F494 ????????                mp3_samples_dst		resd 1
 11923                                  ; DWORD mp3_samples_output_size
 11924 0000F498 ????????                mp3_samples_output_size	resd 1
 11925 0000F49C ????????                mp3_samples_dst_step	resd 1
 11926                                  
 11927 0000F4A0 ????????                mp3_curr_channel	resd 1
 11928 0000F4A4 ????????                mp3_curr_granule	resd 1
 11929 0000F4A8 ????????                mp3_curr_frame		resd 1
 11930                                  
 11931 0000F4AC ????????                mp3_bitstream_start	resd 1
 11932 0000F4B0 ????????                mp3_src_remain		resd 1
 11933 0000F4B4 ????????                mp3_extra_bytes		resd 1
 11934 0000F4B8 ????????                mp3_main_data_begin	resd 1
 11935 0000F4BC ????????                mp3_num_compress_bits	resd 1
 11936                                  
 11937 0000F4C0 ????????                mp3_nb_granules resd 1
 11938                                  
 11939 0000F4C4 <res 2680h>             mp3_granules		resb 9856
 11940 00011B44 <res 480h>              mp3_exponents		resw 576
 11941 00011FC4 <res B800h>             huff_tree_buf		resb 0B800h
 11942 0001D7C4 <res 240h>              mp3_band_index_long	resw 288
 11943 0001DA04 <res 803Ch>             mp3_table_4_3_exp	resb 32828
 11944                                  
 11945 00025A40 <res 200F0h>            mp3_table_4_3_value	resd 32828
 11946 00045B30 <res 800h>              mp3_exp_table		resd 512
 11947 00046330 <res 8000h>             mp3_expval_table	resd 8192
 11948 0004E330 <res 480h>              mp3_mdct_win		resd 288
 11949 0004E7B0 <res 800h>              mp3_is_table_lsf	resd 512
 11950 0004EFB0 <res 1000h>             mp3_synth_win		resd 1024
 11951 0004FFB0 <res 2000h>             mp3_lsf_sf_expand_exploded_table resb 8192
 11952                                  mp3_context_end:
 11953 00051FB0 ????????                _@@region_address0	resd 1
 11954 00051FB4 ????????                _@@region_address1	resd 1
 11955 00051FB8 ????????                _@@saved_sp		resd 1
 11956 00051FBC ????????                mp3_main_data_siz	resd 1
 11957 00051FC0 ????????                _@@scfsi        resd 1
 11958 00051FC4 <res Ch>                _@@gains        resd 3
 11959 00051FD0 ????????                _@@rle_point    resd 1
 11960 00051FD4 ????????                _@@III          resd 1
 11961 00051FD8 ????????                _@@JJJ          resd 1
 11962 00051FDC ????????                _@@linbits      resd 1
 11963 00051FE0 ????????                _@@vlc_table    resd 1
 11964 00051FE4 ????????                _@@coarse_end   resd 1
 11965                                  
 11966 00051FE8 ????????                _@rle_point     resd 1
 11967 00051FEC ????????                _@@rle_ptr      resd 1
 11968 00051FF0 ????????                _@@rle_val      resd 1
 11969 00051FF4 ????????                _@@rle_val_x_40h resd 1
 11970 00051FF8 ????????                _@@max_bands    resb 4
 11971 00051FFC ????????                _@@max_blocks   resd 1
 11972 00052000 ????????                _@@max_pos      resd 1
 11973 00052004 <res 28h>               _@@sfb_array    resb 40
 11974 0005202C ????????                _@@is_tab       resd 1
 11975 00052030 ????????                _@@n_long_sfb   resd 1
 11976 00052034 ????????                _@@n_short_sfb  resd 1
 11977 00052038 ????????                _@@n_sfb        resd 1
 11978 0005203C <res 900h>              _@@tmp          resb 2304
 11979 0005293C ????????                _@@s0           resd 1
 11980 00052940 ????????                _@@s2           resd 1
 11981 00052944 ????????                _@@s3           resd 1
 11982                                  
 11983 00052948 <res 48h>               _@@@tmp         resd 18 ; resb 72
 11984 00052990 ????????                _@@tmp0         resd 1
 11985 00052994 ????????                _@@tmp1         resd 1
 11986 00052998 ????????                _@@tmp2         resd 1
 11987 0005299C ????????                _@@tmp3         resd 1
 11988 000529A0 ????????                _@@tmp4         resd 1
 11989 000529A4 ????????                _@@tmp5         resd 1
 11990 000529A8 ????????                mp3_out2_a0     resd 1
 11991 000529AC ????????                mp3_out2_a1     resd 1
 11992 000529B0 ????????                mp3_out2_a2     resd 1
 11993 000529B4 ????????                mp3_out2_b0     resd 1
 11994 000529B8 ????????                mp3_out2_b1     resd 1
 11995 000529BC ????????                mp3_out2_b2     resd 1
 11996 000529C0 ????????                                resd 1
 11997 000529C4 ????????                                resd 1
 11998 000529C8 ????????                _@@@JJJ         resd 1
 11999 000529CC ????????                _@@www          resd 1
 12000 000529D0 ????????                _@@mdct_long_end resd 1
 12001 000529D4 ????????                _@@sblimit      resd 1
 12002 000529D8 ????????                _@@switch_point resd 1
 12003 000529DC <res 100h>              mp3_huff_tmp_bits	resb 256
 12004 00052ADC <res 200h>              mp3_huff_tmp_codes	resb 512
 12005 00052CDC ????????                _@@table_nb_bits	resd 1
 12006 00052CE0 ????????                _@@nb_codes		resd 1
 12007 00052CE4 ????????                _@@prefix_numbits	resd 1
 12008 00052CE8 ????????                _@@prefix_pattern	resd 1
 12009 00052CEC ????????                _@@curr_table_size	resd 1
 12010 00052CF0 ????????                _@@curr_table_mask	resd 1
 12011 00052CF4 ????????                _@@curr_table_index	resd 1
 12012 00052CF8 ????????                _@@granule_addr		resd 1
 12013                                  ; HANDLE hFile
 12014 00052CFC ????????                hFile           resd 1
 12015                                  ; HANDLE hMap
 12016                                  ;hMap           resd 1
 12017 00052D00 ????????                stream_start    resd 1
 12018 00052D04 ????????                stream_pos      resd 1
 12019 00052D08 ????????                bytes_left      resd 1
 12020                                  
 12021                                  ; 20/10/2024
 12022                                  ; DWORD diskresult
 12023                                  ;diskresult     resd 1
 12024                                  ; HANDLE std_out
 12025                                  ;std_out        resd 1
 12026                                  ;cmdline_buf    resb 1024
 12027 00052D0C <res 80h>               cmdline_buf	resb 128
 12028                                  ; HANDLE mp3_wav_handle
 12029 00052D8C ????????                mp3_wav_handle  resd 1
 12030                                  ; HANDLE mp3_pcm_handle
 12031 00052D90 ????????                mp3_pcm_handle  resd 1
 12032 00052D94 ????????                _@@max_diff     resd 1
 12033 00052D98 ????????????????        _@@avg_diff     resd 2
 12034 00052DA0 ????????                pcm_filepos     resd 1
 12035 00052DA4 ????????                _@@mono_convert resd 1
 12036 00052DA8 ????????                _@@pcm_steps    resw 2
 12037 00052DAC ????????                _@@worst_pcm_filepos resd 1
 12038 00052DB0 ????????                _@@worst_mp3_filepos resd 1
 12039 00052DB4 ????????                		resd 1
 12040                                  ;alignb 4
 12041                                  
 12042                                  ; 10/01/2025
 12043 00052DB8 <res 248h>              alignb 4096
 12044                                  
 12045                                  ; 12/01/2025
 12046                                  ; 09/01/2025
 12047                                  ;sample_buffer	resb 36864
 12048                                  ;;sample_buffer	resb 8*MP3_MAX_OUTPUT_SIZE
 12049                                  ;;sample_buffer_size equ $-sample_buffer
 12050                                  
 12051                                  ; 15/01/2025
 12052 00053000 <res 2000h>             decoding_buffer	resb 8192  ; 2*4096 (max. 4608)
 12053 00055000 <res 9000h>             sample_buffer	resb 36864 ; 8*4608
 12054                                  
 12055                                  ;alignb 4096
 12056                                  
 12057                                  end_of_bss:
 12058                                  
 12059                                  ; ===========================================================================
 12060                                  ; end
