     1                                  ; ****************************************************************************
     2                                  ; MP3PLAY.PRG - MP3 DECODER/PLAYER 1.0 for TRDOS 386 Operating System
     3                                  ; ----------------------------------------------------------------------------
     4                                  ; Based on 
     5                                  ; NOCASH MP3PLAY.EXE 1.4 (Windows) ASM source code (Martin Korth, 20/09/2024)
     6                                  ;
     7                                  ; FASM Source Code: Erdogan Tan - 19/10/2024 - 22/10/2024
     8                                  ; NASM Source Code: Erdogan Tan - 09/01/2025
     9                                  ;
    10                                  ; [ Last Modification: 01/02/2025 ]
    11                                  ;
    12                                  ; ----------------------------------------------------------------------------
    13                                  ; Modified from on MP3PLAY.ASM (for Windows console) source code - 17/10/2024
    14                                  ; ****************************************************************************
    15                                  ; Modified from Martin Korth's 'mp3play.asm' (TASM32) source code... (v1.4)
    16                                  ; Applied development method:
    17                                  ;         Disassembling 'mp3play.exe' v1.4 by using HEX-RAYS disassembler;
    18                                  ;         then... converting disassembled code to FASM syntax,
    19                                  ;                 adding '.idata' code (by help of FASM examples) to the raw
    20                                  ;                        asm file. Converting 'proc' procedures to labels.
    21                                  ;               and Finally: assembling mp3play.asm (single) file by using
    22                                  ;                           'fasm mp3play.asm' command.
    23                                  ;
    24                                  ; NOTE:
    25                                  ; Martin Korth's MP3PLAY.EXE (v1.4, 20/09/2024) file size is 45056 bytes.
    26                                  ; (This) modified MP3PLAY.EXE (v1.4.0, 17/10/2024) is 37888 bytes.
    27                                  ;
    28                                  ; ---------------------------------------------------------------------------
    29                                  ; nasm mp3play.s -l mp3play.txt -o MP3PLAY.PRG -Z error.txt
    30                                  
    31                                  ; 13/01/2025
    32                                  ; Interpolated sample rate playing method for non-VRA AC97 codecs.
    33                                  
    34                                  ; ===========================================================================
    35                                  ;  TRDOS 386 Operating System Specific Procedures - Erdogan Tan - 20/10/2024
    36                                  ; ===========================================================================
    37                                  
    38                                  ; 20/10/2024
    39                                  ; 20/08/2024 ; TRDOS 386 v2.0.9
    40                                  ; TRDOS 386 system calls
    41                                  _ver 	equ 0
    42                                  _exit 	equ 1
    43                                  _fork 	equ 2
    44                                  _read 	equ 3
    45                                  _write	equ 4
    46                                  _open	equ 5
    47                                  _close 	equ 6
    48                                  _wait 	equ 7
    49                                  _creat 	equ 8
    50                                  _rename equ 9
    51                                  _delete equ 10
    52                                  _exec	equ 11
    53                                  _chdir	equ 12
    54                                  _time 	equ 13
    55                                  _mkdir 	equ 14
    56                                  _chmod	equ 15
    57                                  _rmdir	equ 16
    58                                  _break	equ 17
    59                                  _drive	equ 18
    60                                  _seek	equ 19
    61                                  _tell 	equ 20
    62                                  _mem	equ 21
    63                                  _prompt	equ 22
    64                                  _path	equ 23
    65                                  _env	equ 24
    66                                  _stime	equ 25
    67                                  _quit	equ 26
    68                                  _intr	equ 27
    69                                  _dir	equ 28
    70                                  _emt 	equ 29
    71                                  _ldvrt 	equ 30
    72                                  _video 	equ 31
    73                                  _audio	equ 32
    74                                  _timer	equ 33
    75                                  _sleep	equ 34
    76                                  _msg    equ 35
    77                                  _geterr	equ 36
    78                                  _fpsave	equ 37
    79                                  _pri	equ 38
    80                                  _rele	equ 39
    81                                  _fff	equ 40
    82                                  _fnf	equ 41
    83                                  _alloc	equ 42
    84                                  _dalloc equ 43
    85                                  _calbac equ 44
    86                                  _dma	equ 45
    87                                  _stdio  equ 46	;  TRDOS 386 v2.0.9
    88                                  
    89                                  ; ---------------------------------------------------------------------------
    90                                  ; 'sys' macro in FASM format
    91                                  ; ---------------------------------------------------------------------------
    92                                  
    93                                  %if 0
    94                                  macro sys op1,op2,op3,op4
    95                                  {
    96                                      if op4 eq 
    97                                      else
    98                                          mov edx, op4
    99                                      end if
   100                                      if op3 eq
   101                                      else
   102                                          mov ecx, op3
   103                                      end if
   104                                      if op2 eq
   105                                      else
   106                                          mov ebx, op2
   107                                      end if
   108                                      mov eax, op1
   109                                      int 40h
   110                                  }
   111                                  %endif
   112                                  
   113                                  ; ---------------------------------------------------------------------------
   114                                  ; 'sys' macro in NASM format
   115                                  ; ---------------------------------------------------------------------------
   116                                  ; 09/01/2025
   117                                  
   118                                  %macro sys 1-4
   119                                      ; 29/04/2016 - TRDOS 386 (TRDOS v2.0)
   120                                      ; 03/09/2015
   121                                      ; 13/04/2015
   122                                      ; Retro UNIX 386 v1 system call.
   123                                      %if %0 >= 2
   124                                          mov ebx, %2
   125                                          %if %0 >= 3
   126                                              mov ecx, %3
   127                                              %if %0 = 4
   128                                                 mov edx, %4
   129                                              %endif
   130                                          %endif
   131                                      %endif
   132                                      mov eax, %1
   133                                      ;int 30h
   134                                      int 40h ; TRDOS 386 (TRDOS v2.0)
   135                                  %endmacro
   136                                  
   137                                  ; ===========================================================================
   138                                  ; CODE
   139                                  ; ===========================================================================
   140                                  
   141                                  		[BITS 32] ; 32-bit intructions
   142                                  
   143                                  		[ORG 0]
   144                                  
   145                                  ; ===========================================================================
   146                                  
   147                                  		; 20/10/2024
   148                                  start:
   149                                  		; 21/10/2024
   150 00000000 E86F6B0000              		call	set_break	; set and clear bss section
   151                                  					; also set stream_start position
   152                                  
   153                                                  ;mov    edx, txt_hello  ; "nocash mp3 decoder v1.4, 2024" ...
   154                                                  ;call   wrstr_edx
   155 00000005 BB[0AA10000]            		mov	ebx, txt_hello
   156 0000000A E80C6C0000              		call	print_msg
   157                                  
   158 0000000F E83B6A0000                              call    get_commandline
   159 00000014 0F82C3010000                            jc      .exit
   160                                  
   161                                  		;;;
   162                                  		; 11/01/2025
   163 0000001A E8F26C0000              		call	detect_enable_audio_device
   164 0000001F 0F82B8010000            		jc	.exit
   165                                  		;;;
   166                                  
   167 00000025 31ED                                    xor     ebp, ebp
   168 00000027 E860640000                              call    mp3_init
   169 0000002C E85A6B0000                              call    open_and_mmap_the_file
   170 00000031 0F82A6010000                            jc      .exit
   171 00000037 E8A6010000                              call    detect_cpu_386_and_up
   172 0000003C E8EC6B0000                              call    GetTickCount
   173 00000041 F7D8                                    neg     eax
   174 00000043 A3[288C0000]                            mov     [millisecond_count], eax
   175 00000048 E8D9640000                              call    mp3_check_1st_frame
   176 0000004D 0F828A010000                            jc      .exit
   177 00000053 803D[148C0000]00                        cmp     byte [option_test], 0
   178 0000005A 740A                                    jz      short .no_benchmark_test
   179 0000005C E88F660000                              call    mp3_plain_test_without_output
   180 00000061 E9C3000000                              jmp     .decode_done
   181                                  
   182                                  .no_benchmark_test:
   183 00000066 833D[C89A0000]00                        cmp     dword [mp3_pcm_fname], 0
   184 0000006D 740A                                    jz      short .no_pcm_verify
   185 0000006F E8A4670000                              call    mp3_verify_pcm_file
   186 00000074 E964010000                              jmp     .exit
   187                                  
   188                                  .no_pcm_verify:
   189 00000079 833D[C49A0000]00                        cmp     dword [mp3_dst_fname], 0
   190 00000080 740A                                    jz      short .no_wav_output
   191 00000082 E89E660000                              call    mp3_cast_to_wav_file
   192 00000087 E99D000000              		jmp     .decode_done
   193                                  
   194                                  .no_wav_output:
   195                                  		; 15/01/2025
   196                                  		; 10/01/2025 (Video memory access for buffer change indicator)
   197                                  		; DIRECT CGA (TEXT MODE) MEMORY ACCESS
   198                                  		; bl = 0, bh = 4
   199                                  		; Direct access/map to CGA (Text) memory (0B8000h)
   200                                  		sys	_video, 0400h
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 0000008C BB00040000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00000091 B81F000000          <1>  mov eax, %1
   133                              <1> 
   134 00000096 CD40                <1>  int 40h
   201 00000098 3D00800B00              		cmp	eax, 0B8000h
   202 0000009D 0F853A010000            		jne	.exit	; 15/01/2025
   203                                  		;;;
   204                                  
   205                                  		; 13/01/2025 (interpolation procs for non-VRA AC97 codecs)
   206                                  		;;;; --------------------------
   207                                  		;mov	byte [interpolation], 0
   208 000000A3 B002                    		mov	al, 2 
   209 000000A5 3805[50A30000]          		cmp	[audio_hardware], al ; 2
   210 000000AB 7551                    		jne	short .direct
   211                                  .chk_frq:
   212 000000AD 813D[9CB30000]80BB-     		cmp	dword [mp3_output_sample_rate], 48000 ; 48 kHZ
   212 000000B5 0000               
   213 000000B7 721A                    		jb	short .chk_vra
   214 000000B9 803D[98B30000]02        		cmp	byte [mp3_output_num_channels], 2
   215 000000C0 7208                    		jb	short .convert	; mono (8bit or 16bit)
   216 000000C2 3805[A0B30000]          		cmp	[mp3_bytes_per_sample], al ; 2
   217 000000C8 7334                    		jnb	short .direct ; 16bit, stereo
   218                                  .convert:
   219                                  		; 8bit m/s or 16bit mono
   220 000000CA C605[64A30000]01        		mov	byte [interpolation], 1 ; convert (to 16 bit stereo)
   221 000000D1 EB4A                    		jmp	short .indirect
   222                                  .chk_vra:
   223 000000D3 A2[64A30000]            		mov	[interpolation], al ; 2 = interpolation
   224 000000D8 803D[51A30000]01        		cmp	byte [vra], 1
   225 000000DF 723C                    		jb	short .indirect
   226 000000E1 FE0D[64A30000]          		dec	byte [interpolation] ; 1 = convert (to 16 bit stereo)
   227 000000E7 803D[98B30000]02        		cmp	byte [mp3_output_num_channels], 2
   228 000000EE 722D                    		jb	short .indirect ; 8 bit
   229 000000F0 3805[A0B30000]          		cmp	[mp3_bytes_per_sample], al ; 2
   230 000000F6 7225                    		jb	short .indirect ; mono
   231                                  
   232                                  		; 14/01/2025
   233 000000F8 FE0D[64A30000]          		dec	byte [interpolation] ; 0
   234                                  .direct:
   235                                  		;;;; --------------------------
   236                                  
   237                                  		;;; 
   238                                  		; 20/10/2024
   239                                  		;call	detect_enable_audio_device
   240                                  		;jc	.exit
   241 000000FE E8FB6C0000              		call	audio_system_init
   242                                  		;jc	.exit
   243 00000103 7207                    		jc	short .exit@ ; 15/01/2025
   244                                  		;;;
   245                                  
   246 00000105 E8B26D0000                              call    mp3_cast_to_speaker
   247                                  
   248                                  		; 13/01/2025
   249                                  		;;;; --------------------------
   250 0000010A EB1D                    		jmp	short .decode_done
   251                                  
   252                                  		; 15/01/2025
   253                                  .exit@:
   254                                  		; Disable audio device
   255                                  		sys	_audio, 0C00h
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 0000010C BB000C0000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00000111 B820000000          <1>  mov eax, %1
   133                              <1> 
   134 00000116 CD40                <1>  int 40h
   256 00000118 E9346B0000              		jmp	ExitProcess
   257                                  
   258                                  .indirect:
   259 0000011D E87E6F0000              		call	audio_system_init_x
   260 00000122 72E8                    		jc	short .exit@ ; 15/01/2025
   261 00000124 E878720000              		call    mp3_cast_to_speaker_x
   262                                  		;;;; --------------------------
   263                                  .decode_done:
   264 00000129 E8FF6A0000                              call    GetTickCount
   265 0000012E 0105[288C0000]                          add     [millisecond_count], eax
   266 00000134 BA[FD9A0000]                            mov     edx, txt_decode_timing1 ; "audio duration "
   267 00000139 E8F2640000                              call    wrstr_edx
   268 0000013E A1[580A0100]                            mov     eax, [mp3_total_output_size]
   269 00000143 BAE8030000                              mov     edx, 1000
   270 00000148 F7E2                                    mul     edx
   271 0000014A F735[9CB30000]                          div     dword [mp3_output_sample_rate]
   272 00000150 31D2                                    xor     edx, edx
   273 00000152 F735[98B30000]                          div     dword [mp3_output_num_channels]
   274 00000158 31D2                                    xor     edx, edx
   275 0000015A F735[A0B30000]                          div     dword [mp3_bytes_per_sample]
   276 00000160 A3[248C0000]                            mov     [mp3_output_milliseconds], eax
   277 00000165 E8FC640000                              call    wr_decimal_eax_with_thousands_seperator
   278 0000016A BA[0D9B0000]                            mov     edx, txt_decode_timing2 ; " milliseconds, decoded in "
   279 0000016F E8BC640000                              call    wrstr_edx
   280 00000174 A1[288C0000]                            mov     eax, [millisecond_count]
   281 00000179 E8E8640000                              call    wr_decimal_eax_with_thousands_seperator
   282 0000017E BA[289B0000]                            mov     edx, txt_decode_timing3 ; " milliseconds\r\n"
   283 00000183 E8A8640000                              call    wrstr_edx
   284 00000188 BA[389B0000]                            mov     edx, txt_clks_per_second ; " clock cycles per second:\r\n"
   285 0000018D E89E640000                              call    wrstr_edx
   286 00000192 BE[2C8C0000]                            mov     esi, ttt ; rdtsc_list_start
   287                                  
   288                                  .timelog_lop:
   289 00000197 E8B6640000                              call    wrspc
   290 0000019C 8D5608                                  lea     edx, [esi+8]
   291 0000019F E88C640000                              call    wrstr_edx
   292 000001A4 E8A9640000                              call    wrspc
   293 000001A9 8B06                                    mov     eax, [esi]
   294 000001AB 8B5E04                                  mov     ebx, [esi+4]
   295 000001AE BAE8030000                              mov     edx, 1000
   296 000001B3 0FAFDA                                  imul    ebx, edx
   297 000001B6 F7E2                                    mul     edx
   298 000001B8 01DA                                    add     edx, ebx
   299 000001BA 3B15[248C0000]                          cmp     edx, [mp3_output_milliseconds]
   300 000001C0 730B                                    jnb     short .timelog_oops
   301 000001C2 F735[248C0000]                          div     dword [mp3_output_milliseconds]
   302 000001C8 E899640000                              call    wr_decimal_eax_with_thousands_seperator
   303                                  
   304                                  .timelog_oops:
   305 000001CD E86F640000                              call    wrcrlf
   306 000001D2 83C618                                  add     esi, 24
   307 000001D5 81FE[F48D0000]                          cmp     esi, mp3_bitrate_tab
   308 000001DB 75BA                                    jnz     short .timelog_lop
   309                                  
   310                                  .exit:
   311                                  		;push   0               ; uExitCode
   312                                                  ;call   ExitProcess
   313 000001DD E96F6A0000              		jmp	ExitProcess
   314                                  
   315                                  
   316                                  ; =============== S U B R O U T I N E =======================================
   317                                  
   318                                  
   319                                  detect_cpu_386_and_up:
   320 000001E2 C605[218C0000]03                        mov     byte [detected_cpu], 3
   321 000001E9 89E3                                    mov     ebx, esp
   322 000001EB 83E4FC                                  and     esp, ~3	; not 3
   323 000001EE 9C                                      pushf
   324 000001EF 58                                      pop     eax
   325 000001F0 89C1                                    mov     ecx, eax
   326 000001F2 3500000400                              xor     eax, 40000h
   327 000001F7 50                                      push    eax
   328 000001F8 9D                                      popf
   329 000001F9 9C                                      pushf
   330 000001FA 58                                      pop     eax
   331 000001FB 31C8                                    xor     eax, ecx
   332 000001FD 51                                      push    ecx
   333 000001FE 9D                                      popf
   334 000001FF 89DC                                    mov     esp, ebx
   335 00000201 A900000400                              test    eax, 40000h
   336 00000206 7431                                    jz      short .no_id
   337 00000208 FE05[218C0000]                          inc	byte [detected_cpu]
   338 0000020E E827000000                              call    @@get_id_flag
   339 00000213 7507                                    jnz     short .yep_id
   340 00000215 E820000000                              call    @@get_id_flag
   341 0000021A 741D                                    jz      short .no_id
   342                                  
   343                                  .yep_id:
   344 0000021C B801000000                              mov     eax, 1
   345 00000221 0FA2                                    cpuid
   346 00000223 80E40F                                  and     ah, 0Fh
   347 00000226 8825[218C0000]                          mov     [detected_cpu], ah
   348 0000022C C605[208C0000]01                        mov	byte [cpuid_exists], 1
   349 00000233 8915[1C8C0000]                          mov     [cpuid_flags], edx
   350                                  
   351                                  .no_id:
   352 00000239 C3                                      retn
   353                                  
   354                                  ; =============== S U B R O U T I N E =======================================
   355                                  
   356                                  
   357                                  @@get_id_flag:
   358 0000023A 9C                                      pushf
   359 0000023B 58                                      pop     eax
   360 0000023C 0D00002000                              or      eax, 200000h
   361 00000241 50                                      push    eax
   362 00000242 9D                                      popf
   363 00000243 9C                                      pushf
   364 00000244 58                                      pop     eax
   365 00000245 A900002000                              test    eax, 200000h
   366 0000024A C3                                      retn
   367                                  
   368                                  ; =============== S U B R O U T I N E =======================================
   369                                  
   370                                  bswap_eax:
   371 0000024B 86E0                                    xchg    al, ah
   372 0000024D C1C810                                  ror     eax, 10h
   373 00000250 86E0                                    xchg    al, ah
   374 00000252 C3                                      retn
   375                                  
   376                                  ; =============== S U B R O U T I N E =======================================
   377                                  
   378                                  mp3_recollect_bits:
   379 00000253 F7C601000000                            test    esi, 1
   380 00000259 7510                                    jnz     short .odd
   381 0000025B 668B2E                                  mov     bp, [esi]
   382 0000025E 83C602                                  add     esi, 2
   383 00000261 66C1CD08                                ror     bp, 8
   384 00000265 C1E510                                  shl     ebp, 16
   385 00000268 B500                                    mov     ch, 0
   386 0000026A C3                                      retn
   387                                  
   388                                  .odd:
   389 0000026B 0FB62E                                  movzx   ebp, byte [esi]
   390 0000026E 46                                      inc     esi
   391 0000026F C1E510                                  shl     ebp, 16
   392 00000272 668B2E                                  mov     bp, [esi]
   393 00000275 83C602                                  add     esi, 2
   394 00000278 66C1CD08                                ror     bp, 8
   395 0000027C C1E508                                  shl     ebp, 8
   396 0000027F B508                                    mov     ch, 8
   397 00000281 C3                                      retn
   398                                  
   399                                  ; =============== S U B R O U T I N E =======================================
   400                                  
   401                                  
   402                                  mp3_get_bits:
   403 00000282 89E8                                    mov     eax, ebp
   404 00000284 D3E5                                    shl     ebp, cl
   405 00000286 D3C0                                    rol     eax, cl
   406 00000288 31E8                                    xor     eax, ebp
   407 0000028A 28CD                                    sub     ch, cl
   408 0000028C 7801                                    js      short mp3_collect_more
   409 0000028E C3                                      retn
   410                                  
   411                                  mp3_collect_more:
   412 0000028F 88E9                                    mov     cl, ch
   413 00000291 80C510                                  add     ch, 10h
   414 00000294 D3C5                                    rol     ebp, cl
   415 00000296 668B2E                                  mov     bp, [esi]
   416 00000299 83C602                                  add     esi, 2
   417 0000029C 66C1CD08                                ror     bp, 8
   418 000002A0 D3CD                                    ror     ebp, cl
   419 000002A2 C3                                      retn
   420                                  
   421                                  ; =============== S U B R O U T I N E =======================================
   422                                  
   423                                  
   424                                  mp3_uncollect_bits:
   425 000002A3 83EE02                                  sub     esi, 2
   426 000002A6 C0ED03                                  shr     ch, 3
   427 000002A9 0FB6CD                                  movzx   ecx, ch
   428 000002AC 29CE                                    sub     esi, ecx
   429 000002AE C3                                      retn
   430                                  
   431                                  ; =============== S U B R O U T I N E =======================================
   432                                  
   433                                  
   434                                  mp3_search_get_header:
   435 000002AF F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
   436 000002B6 740E                                    jz      short .no_rdtsc_supported
   437 000002B8 0F31                                    rdtsc
   438 000002BA 2905[2C8C0000]                          sub     [ttt], eax
   439 000002C0 1915[308C0000]                          sbb     [ttt+4], edx
   440                                  
   441                                  .no_rdtsc_supported:
   442 000002C6 C705[7C0A0100]0000-                     mov	dword [mp3_extra_bytes], 0
   442 000002CE 0000               
   443                                  
   444                                  .retry_header:
   445 000002D0 833D[780A0100]04                        cmp	dword [mp3_src_remain], 4
   446 000002D7 0F82B5010000                            jb      .fail_no_header
   447 000002DD 803EFF                                  cmp     byte [esi], 0FFh
   448 000002E0 7516                                    jnz     short .bad_header
   449 000002E2 8A4601                                  mov     al, [esi+1]
   450 000002E5 24E6                                    and     al, 0E6h
   451 000002E7 3CE2                                    cmp     al, 0E2h
   452 000002E9 750D                                    jnz     short .bad_header
   453 000002EB 8A4602                                  mov     al, [esi+2]
   454 000002EE 3CF0                                    cmp     al, 0F0h
   455 000002F0 7306                                    jnb     short .bad_header
   456 000002F2 240C                                    and     al, 0Ch
   457 000002F4 3C0C                                    cmp     al, 0Ch
   458 000002F6 7519                                    jnz     short .good_header
   459                                  
   460                                  .bad_header:
   461 000002F8 46                                      inc	esi
   462 000002F9 FF0D[780A0100]                          dec	dword [mp3_src_remain]
   463 000002FF FF05[7C0A0100]                          inc	dword [mp3_extra_bytes]
   464 00000305 C705[68B30000]-                         mov	dword [main_data_pool_wr_ptr], main_data_pool_start
   464 0000030B [68A30000]         
   465 0000030F EBBF                                    jmp	short .retry_header
   466                                  
   467                                  .good_header:
   468 00000311 8B06                                    mov	eax, [esi]
   469 00000313 E833FFFFFF                              call	bswap_eax
   470 00000318 A3[78B30000]                            mov	[mp3_hdr_32bit_header], eax
   471 0000031D C705[B8B30000]0000-                     mov	dword [mp3_hdr_flag_lsf], 0
   471 00000325 0000               
   472 00000327 C705[80B30000]0000-                     mov	dword [mp3_hdr_flag_mpeg25], 0
   472 0000032F 0000               
   473 00000331 C705[880A0100]0200-                     mov	dword [mp3_nb_granules], 2
   473 00000339 0000               
   474 0000033B A900000800                              test	eax, 80000h
   475 00000340 7525                                    jnz	short .lsf_this
   476 00000342 C705[B8B30000]0100-                     mov	dword [mp3_hdr_flag_lsf], 1
   476 0000034A 0000               
   477 0000034C C705[880A0100]0100-                     mov	dword [mp3_nb_granules], 1
   477 00000354 0000               
   478 00000356 A900001000                              test	eax, 100000h
   479 0000035B 750A                                    jnz	short .lsf_this
   480 0000035D C705[80B30000]0100-                     mov	dword [mp3_hdr_flag_mpeg25], 1
   480 00000365 0000               
   481                                  
   482                                  .lsf_this:
   483 00000367 C1E80A                                  shr     eax, 10
   484 0000036A 83E003                                  and     eax, 3
   485 0000036D 8B0D[B8B30000]                          mov     ecx, [mp3_hdr_flag_lsf]
   486 00000373 030D[80B30000]                          add     ecx, [mp3_hdr_flag_mpeg25]
   487 00000379 0FB79400[348E0000]                      movzx   edx, word [mp3_freq_tab+eax*2]
   488 00000381 D3EA                                    shr     edx, cl
   489 00000383 8D0C49                                  lea     ecx, [ecx+ecx*2]
   490 00000386 01C8                                    add     eax, ecx
   491 00000388 A3[8CB30000]                            mov     [mp3_hdr_sample_rate_index], eax
   492 0000038D 8915[88B30000]                          mov     [mp3_sample_rate], edx
   493                                  
   494 00000393 8A0D[178C0000]                          mov     cl, [option_rate_shift]
   495 00000399 D3EA                                    shr     edx, cl
   496                                  
   497 0000039B 8915[9CB30000]                          mov     [mp3_output_sample_rate], edx
   498 000003A1 A1[78B30000]                            mov     eax, [mp3_hdr_32bit_header]
   499 000003A6 C1E810                                  shr     eax, 10h
   500 000003A9 F7D0                                    not     eax
   501 000003AB 83E001                                  and     eax, 1
   502 000003AE A3[7CB30000]                            mov     [mp3_hdr_flag_crc], eax
   503 000003B3 A1[78B30000]                            mov     eax, [mp3_hdr_32bit_header]
   504 000003B8 C1E809                                  shr     eax, 9
   505 000003BB 83E001                                  and     eax, 1
   506 000003BE A3[84B30000]                            mov     [mp3_hdr_flag_padding], eax
   507 000003C3 A1[78B30000]                            mov     eax, [mp3_hdr_32bit_header]
   508 000003C8 C1E80C                                  shr     eax, 12
   509 000003CB 83E00F                                  and     eax, 0Fh
   510 000003CE 7512                                    jnz     short .not_free_format
   511 000003D0 E85A5D0000                              call    mp3_detect_free_format_block_size
   512 000003D5 0F821DFFFFFF                            jb      .bad_header
   513 000003DB A1[C8090100]                            mov     eax, [mp3_free_format_frame_size]
   514 000003E0 EB34                                    jmp     short .this_frame_size_plus_padding
   515                                  
   516                                  .not_free_format:
   517 000003E2 8B15[B8B30000]                          mov     edx, [mp3_hdr_flag_lsf]
   518 000003E8 C1E204                                  shl     edx, 4
   519 000003EB 01D0                                    add     eax, edx
   520 000003ED 0FB78400[F48D0000]                      movzx   eax, word [mp3_bitrate_tab+eax*2] ; kbit/s
   521 000003F5 69C0E8030000                            imul    eax, 1000       ; bit/s
   522 000003FB A3[90B30000]                            mov     [mp3_bit_rate], eax
   523 00000400 69C090000000                            imul    eax, 144        ; 144=90h=8*18
   524 00000406 31D2                                    xor     edx, edx
   525 00000408 F735[88B30000]                          div     dword [mp3_sample_rate]
   526 0000040E 8B0D[B8B30000]                          mov     ecx, [mp3_hdr_flag_lsf]
   527 00000414 D3E8                                    shr     eax, cl
   528                                  
   529                                  .this_frame_size_plus_padding:
   530 00000416 0305[84B30000]                          add     eax, [mp3_hdr_flag_padding]
   531 0000041C A3[70B30000]                            mov     [mp3_src_frame_size], eax
   532 00000421 01F0                                    add     eax, esi
   533 00000423 A3[74B30000]                            mov     [mp3_src_frame_end], eax
   534 00000428 A1[78B30000]                            mov     eax, [mp3_hdr_32bit_header]
   535 0000042D C1E806                                  shr     eax, 6
   536 00000430 83E003                                  and     eax, 3
   537 00000433 A3[B0B30000]                            mov     [mp3_hdr_mode_val], eax
   538 00000438 BA01000000                              mov     edx, 1
   539                                  
   540 0000043D 3C03                    		cmp     al, 3
   541 0000043F 7401                                    jz      short .this_channels
   542                                  
   543                                                  ;mov    edx, 2
   544                                  		; 10/01/2025
   545 00000441 42                      		inc	edx
   546                                  .this_channels:
   547 00000442 8915[94B30000]                          mov	[mp3_src_num_channels], edx
   548 00000448 803D[158C0000]00                        cmp	byte [option_mono], 0
   549 0000044F 7405                                    jz	short .allow_stereo
   550 00000451 BA01000000                              mov	edx, 1
   551                                  .allow_stereo:
   552 00000456 8915[98B30000]                          mov     [mp3_output_num_channels], edx
   553 0000045C 0FAF15[A0B30000]                        imul    edx, [mp3_bytes_per_sample]
   554 00000463 8915[640A0100]                          mov     [mp3_samples_dst_step], edx
   555 00000469 A1[78B30000]                            mov     eax, [mp3_hdr_32bit_header]
   556 0000046E C1E804                                  shr     eax, 4
   557 00000471 83E003                                  and     eax, 3
   558 00000474 A3[B4B30000]                            mov     [mp3_hdr_mode_ext], eax
   559 00000479 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
   560 00000480 740E                                    jz      short .no_rdtsc_supported@
   561 00000482 0F31                                    rdtsc
   562 00000484 0105[2C8C0000]                          add     [ttt], eax
   563 0000048A 1115[308C0000]                          adc     [ttt+4], edx
   564                                  
   565                                  .no_rdtsc_supported@:
   566 00000490 F8                                      clc
   567 00000491 C3                                      retn
   568                                  
   569                                  .fail_no_header:
   570 00000492 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
   571 00000499 740E                                    jz      short .no_rdtsc_supported@@
   572 0000049B 0F31                                    rdtsc
   573 0000049D 0105[2C8C0000]                          add     [ttt], eax
   574 000004A3 1115[308C0000]                          adc     [ttt+4], edx
   575                                  
   576                                  .no_rdtsc_supported@@:
   577 000004A9 C705[70B30000]0000-                     mov     dword [mp3_src_frame_size], 0
   577 000004B1 0000               
   578 000004B3 F9                                      stc
   579 000004B4 C3                                      retn
   580                                  
   581                                  
   582                                  ; =============== S U B R O U T I N E =======================================
   583                                  
   584                                  
   585                                  mp3_bitstream_read_header_extra:
   586 000004B5 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
   587 000004BC 740E                                    jz      short .no_rdtsc_supported
   588 000004BE 0F31                                    rdtsc
   589 000004C0 2905[448C0000]                          sub     [rdtsc_read_header_extra], eax
   590 000004C6 1915[488C0000]                          sbb     [rdtsc_read_header_extra+4], edx
   591                                  
   592                                  .no_rdtsc_supported:
   593 000004CC 833D[7CB30000]00                        cmp     dword [mp3_hdr_flag_crc], 0
   594 000004D3 7422                                    jz      short .without_crc
   595 000004D5 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 16
   596 000004D7 C1E510                                  shl     ebp, 10h
   597 000004DA C1C010                                  rol     eax, 10h
   598 000004DD 31E8                                    xor     eax, ebp
   599 000004DF 80ED10                                  sub     ch, 10h
   600 000004E2 7913                                    jns     short .without_crc
   601 000004E4 88E9                                    mov     cl, ch          ; mp3mac_collect_more
   602 000004E6 80C510                                  add     ch, 10h
   603 000004E9 D3C5                                    rol     ebp, cl
   604 000004EB 668B2E                                  mov     bp, [esi]
   605 000004EE 83C602                                  add     esi, 2
   606 000004F1 66C1CD08                                ror     bp, 8
   607 000004F5 D3CD                                    ror     ebp, cl
   608                                  
   609                                  .without_crc:
   610 000004F7 833D[B8B30000]00                        cmp     dword [mp3_hdr_flag_lsf], 0
   611 000004FE 745B                                    jz      short .pre_lsf_zero
   612 00000500 C705[840A0100]0900-                     mov     dword [mp3_num_compress_bits], 9
   612 00000508 0000               
   613 0000050A 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 8
   614 0000050C C1E508                                  shl     ebp, 8
   615 0000050F C1C008                                  rol     eax, 8
   616 00000512 31E8                                    xor     eax, ebp
   617 00000514 80ED08                                  sub     ch, 8
   618 00000517 7913                                    jns     short .without_crc@
   619 00000519 88E9                                    mov     cl, ch
   620 0000051B 80C510                                  add     ch, 10h
   621 0000051E D3C5                                    rol     ebp, cl
   622 00000520 668B2E                                  mov     bp, [esi]
   623 00000523 83C602                                  add     esi, 2
   624 00000526 66C1CD08                                ror     bp, 8
   625 0000052A D3CD                                    ror     ebp, cl
   626                                  
   627                                  .without_crc@:
   628 0000052C A3[800A0100]                            mov     [mp3_main_data_begin], eax
   629 00000531 8A0D[94B30000]                          mov     cl, byte [mp3_src_num_channels]
   630 00000537 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
   631 00000539 D3E5                                    shl     ebp, cl
   632 0000053B D3C0                                    rol     eax, cl
   633 0000053D 31E8                                    xor     eax, ebp
   634 0000053F 28CD                                    sub     ch, cl
   635 00000541 7913                                    jns     short .without_crc@@
   636 00000543 88E9                                    mov     cl, ch
   637 00000545 80C510                                  add     ch, 10h
   638 00000548 D3C5                                    rol     ebp, cl
   639 0000054A 668B2E                                  mov     bp, [esi]
   640 0000054D 83C602                                  add     esi, 2
   641 00000550 66C1CD08                                ror     bp, 8
   642 00000554 D3CD                                    ror     ebp, cl
   643                                  
   644                                  .without_crc@@:
   645 00000556 E9A1000000                              jmp     .pre_lsf_done
   646                                  
   647                                  .pre_lsf_zero:
   648 0000055B C705[840A0100]0400-                     mov     dword [mp3_num_compress_bits], 4
   648 00000563 0000               
   649 00000565 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 9
   650 00000567 C1E509                                  shl     ebp, 9
   651 0000056A C1C009                                  rol     eax, 9
   652 0000056D 31E8                                    xor     eax, ebp
   653 0000056F 80ED09                                  sub     ch, 9
   654 00000572 7913                                    jns     short .without_crc@@@
   655 00000574 88E9                                    mov     cl, ch
   656 00000576 80C510                                  add     ch, 10h
   657 00000579 D3C5                                    rol     ebp, cl
   658 0000057B 668B2E                                  mov     bp, [esi]
   659 0000057E 83C602                                  add     esi, 2
   660 00000581 66C1CD08                                ror     bp, 8
   661 00000585 D3CD                                    ror     ebp, cl
   662                                  
   663                                  .without_crc@@@:
   664 00000587 A3[800A0100]                            mov     [mp3_main_data_begin], eax
   665 0000058C 8A0D[94B30000]                          mov     cl, byte [mp3_src_num_channels]
   666 00000592 D0E1                                    shl     cl, 1           ; 1,2 --> 2,4
   667 00000594 80F107                                  xor     cl, 7           ;     --> 5,3
   668 00000597 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
   669 00000599 D3E5                                    shl     ebp, cl
   670 0000059B D3C0                                    rol     eax, cl
   671 0000059D 31E8                                    xor     eax, ebp
   672 0000059F 28CD                                    sub     ch, cl
   673 000005A1 7913                                    jns     short .without_crc@@@@
   674 000005A3 88E9                                    mov     cl, ch
   675 000005A5 80C510                                  add     ch, 10h
   676 000005A8 D3C5                                    rol     ebp, cl
   677 000005AA 668B2E                                  mov     bp, [esi]
   678 000005AD 83C602                                  add     esi, 2
   679 000005B0 66C1CD08                                ror     bp, 8
   680 000005B4 D3CD                                    ror     ebp, cl
   681                                  
   682                                  .without_crc@@@@:
   683 000005B6 8B15[94B30000]                          mov     edx, [mp3_src_num_channels]
   684 000005BC BB[8C0A0100]                            mov     ebx, mp3_granules
   685                                  
   686                                  .pre_channel_lop:
   687 000005C1 C7432800000000                          mov     dword [ebx+40], 0 ; [ebx+$mp3gr_scfsi]
   688 000005C8 81C3A0090000                            add     ebx, 2464       ; $mp3gr_entrysiz
   689 000005CE 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 4
   690 000005D0 C1E504                                  shl     ebp, 4
   691 000005D3 C1C004                                  rol     eax, 4
   692 000005D6 31E8                                    xor     eax, ebp
   693 000005D8 80ED04                                  sub     ch, 4
   694 000005DB 7913                                    jns     short .without_crc@@@@@
   695 000005DD 88E9                                    mov     cl, ch
   696 000005DF 80C510                                  add     ch, 10h
   697 000005E2 D3C5                                    rol     ebp, cl
   698 000005E4 668B2E                                  mov     bp, [esi]
   699 000005E7 83C602                                  add     esi, 2
   700 000005EA 66C1CD08                                ror     bp, 8
   701 000005EE D3CD                                    ror     ebp, cl
   702                                  
   703                                  .without_crc@@@@@:
   704 000005F0 894328                                  mov     [ebx+28h], eax  ; [ebx+$mp3gr_scfsi]
   705 000005F3 81C3A0090000                            add     ebx, 2464       ; $mp3gr_entrysiz
   706 000005F9 4A                                      dec     edx
   707 000005FA 75C5                                    jnz     short .pre_channel_lop
   708                                  
   709                                  .pre_lsf_done:
   710 000005FC A1[880A0100]                            mov     eax, [mp3_nb_granules]
   711 00000601 6BC012                                  imul    eax, 12h
   712 00000604 A3[ACB30000]                            mov     [mp3_nb_frames], eax
   713                                  		; 14/01/2025
   714                                  		;mov	eax, [mp3_nb_frames]
   715 00000609 0FAF05[98B30000]                        imul    eax, [mp3_output_num_channels]
   716 00000610 0FAF05[A0B30000]                        imul    eax, [mp3_bytes_per_sample]
   717 00000617 C1E005                                  shl     eax, 5
   718 0000061A 8A0D[178C0000]                          mov     cl, [option_rate_shift]
   719 00000620 D3E8                                    shr     eax, cl
   720 00000622 A3[600A0100]                            mov     [mp3_samples_output_size], eax
   721 00000627 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_read_header_extra
   722 0000062E 740E                                    jz      short .no_rdtsc_supported@
   723 00000630 0F31                                    rdtsc
   724 00000632 0105[448C0000]                          add     [rdtsc_read_header_extra], eax
   725 00000638 1115[488C0000]                          adc     [rdtsc_read_header_extra+4], edx
   726                                  
   727                                  .no_rdtsc_supported@:
   728 0000063E C3                                      retn
   729                                  
   730                                  
   731                                  ; =============== S U B R O U T I N E =======================================
   732                                  
   733                                  
   734                                  mp3_bitstream_read_granules:
   735 0000063F F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_read_granule
   736 00000646 740E                                    jz      short .no_rdtsc_supported
   737 00000648 0F31                                    rdtsc
   738 0000064A 2905[5C8C0000]                          sub     [rdtsc_read_granule], eax
   739 00000650 1915[608C0000]                          sbb     [rdtsc_read_granule+4], edx
   740                                  
   741                                  .no_rdtsc_supported:
   742 00000656 8925[80350500]                          mov	[_@@saved_sp], esp
   743 0000065C C705[84350500]0000-                     mov	dword [mp3_main_data_siz], 0
   743 00000664 0000               
   744 00000666 C705[6C0A0100]0000-                     mov	dword [mp3_curr_granule], 0
   744 0000066E 0000               
   745 00000670 BB[8C0A0100]                            mov	ebx, mp3_granules
   746                                  
   747                                  .hdr_granule_lop:
   748 00000675 53                                      push    ebx
   749 00000676 C705[680A0100]0000-                     mov     dword [mp3_curr_channel], 0
   749 0000067E 0000               
   750                                  
   751                                  .hdr_channel_lop:
   752 00000680 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 12
   753 00000682 C1E50C                                  shl     ebp, 12
   754 00000685 C1C00C                                  rol     eax, 12
   755 00000688 31E8                                    xor     eax, ebp
   756 0000068A 80ED0C                                  sub     ch, 12
   757 0000068D 7913                                    jns     short .without_crc
   758 0000068F 88E9                                    mov     cl, ch
   759 00000691 80C510                                  add     ch, 16
   760 00000694 D3C5                                    rol     ebp, cl
   761 00000696 668B2E                                  mov     bp, [esi]
   762 00000699 83C602                                  add     esi, 2
   763 0000069C 66C1CD08                                ror     bp, 8
   764 000006A0 D3CD                                    ror     ebp, cl
   765                                  
   766                                  .without_crc:
   767 000006A2 8B15[84350500]                          mov     edx, [mp3_main_data_siz]
   768 000006A8 8903                                    mov     [ebx], eax
   769 000006AA 895304                                  mov     [ebx+4], edx
   770 000006AD 01D0                                    add     eax, edx
   771 000006AF 894308                                  mov     [ebx+8], eax
   772 000006B2 A3[84350500]                            mov     [mp3_main_data_siz], eax
   773 000006B7 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 9
   774 000006B9 C1E509                                  shl     ebp, 9
   775 000006BC C1C009                                  rol     eax, 9
   776 000006BF 31E8                                    xor     eax, ebp
   777 000006C1 80ED09                                  sub     ch, 9
   778 000006C4 7913                                    jns     short .without_crc@
   779 000006C6 88E9                                    mov     cl, ch
   780 000006C8 80C510                                  add     ch, 10h
   781 000006CB D3C5                                    rol     ebp, cl
   782 000006CD 668B2E                                  mov     bp, [esi]
   783 000006D0 83C602                                  add     esi, 2
   784 000006D3 66C1CD08                                ror     bp, 8
   785 000006D7 D3CD                                    ror     ebp, cl
   786                                  
   787                                  .without_crc@:
   788 000006D9 89430C                                  mov     [ebx+12], eax   ; [ebx+$mp3gr_big_values]
   789 000006DC 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 8
   790 000006DE C1E508                                  shl     ebp, 8
   791 000006E1 C1C008                                  rol     eax, 8
   792 000006E4 31E8                                    xor     eax, ebp
   793 000006E6 80ED08                                  sub     ch, 8
   794 000006E9 7913                                    jns     short .without_crc@@
   795 000006EB 88E9                                    mov     cl, ch
   796 000006ED 80C510                                  add     ch, 10h
   797 000006F0 D3C5                                    rol     ebp, cl
   798 000006F2 668B2E                                  mov     bp, [esi]
   799 000006F5 83C602                                  add     esi, 2
   800 000006F8 66C1CD08                                ror     bp, 8
   801 000006FC D3CD                                    ror     ebp, cl
   802                                  
   803                                  .without_crc@@:
   804 000006FE 05BE000000                              add	eax, 190        ; 400-210
   805 00000703 833D[B0B30000]01                        cmp	dword [mp3_hdr_mode_val], 1
   806 0000070A 750F                                    jnz	short .not_ms_stereo
   807 0000070C F705[B4B30000]0200-                     test	dword [mp3_hdr_mode_ext], 2
   807 00000714 0000               
   808 00000716 7403                                    jz	short .not_ms_stereo
   809 00000718 83E802                                  sub	eax, 2
   810                                  
   811                                  .not_ms_stereo:
   812 0000071B 894310                                  mov     [ebx+16], eax   ; [ebx+$mp3gr_global_gain]
   813 0000071E 8A0D[840A0100]                          mov     cl, byte [mp3_num_compress_bits]
   814 00000724 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
   815 00000726 D3E5                                    shl     ebp, cl
   816 00000728 D3C0                                    rol     eax, cl
   817 0000072A 31E8                                    xor     eax, ebp
   818 0000072C 28CD                                    sub     ch, cl
   819 0000072E 7913                                    jns     short .without_crc@@@
   820 00000730 88E9                                    mov     cl, ch
   821 00000732 80C510                                  add     ch, 10h
   822 00000735 D3C5                                    rol     ebp, cl
   823 00000737 668B2E                                  mov     bp, [esi]
   824 0000073A 83C602                                  add     esi, 2
   825 0000073D 66C1CD08                                ror     bp, 8
   826 00000741 D3CD                                    ror     ebp, cl
   827                                  
   828                                  .without_crc@@@:
   829 00000743 894314                                  mov     [ebx+20], eax   ; [ebx+$mp3gr_scalefac_compress]
   830 00000746 FECD                                    dec     ch              ; mp3mac_get_bit_to_cy
   831                                                                          ; dec mp3_colNN
   832 00000748 D1E5                                    shl     ebp, 1          ; shl mp3_col32,1 ; cy=data
   833 0000074A 0F834F010000                            jnb     .no_blocksplit
   834 00000750 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 2
   835 00000752 C1E502                                  shl     ebp, 2
   836 00000755 C1C002                                  rol     eax, 2
   837 00000758 31E8                                    xor     eax, ebp
   838 0000075A 80ED02                                  sub     ch, 2
   839 0000075D 7913                                    jns     short .without_crc@@@@
   840 0000075F 88E9                                    mov     cl, ch
   841 00000761 80C510                                  add     ch, 10h
   842 00000764 D3C5                                    rol     ebp, cl
   843 00000766 668B2E                                  mov     bp, [esi]
   844 00000769 83C602                                  add     esi, 2
   845 0000076C 66C1CD08                                ror     bp, 8
   846 00000770 D3CD                                    ror     ebp, cl
   847                                  
   848                                  .without_crc@@@@:
   849 00000772 83F800                                  cmp     eax, 0
   850 00000775 0F847B030000                            jz      .error
   851 0000077B 89432C                                  mov     [ebx+44], eax   ; [ebx+$mp3gr_block_type]
   852 0000077E 83F802                                  cmp     eax, 2
   853 00000781 B812000000                              mov     eax, 18         ; 36/2 ; region_size (default)
   854 00000786 741C                                    jz      short .this_region_size
   855 00000788 833D[8CB30000]02                        cmp     dword [mp3_hdr_sample_rate_index], 2
   856 0000078F 7613                                    jbe     short .this_region_size
   857 00000791 B81B000000                              mov     eax, 27         ; 54/2 ; region_size
   858 00000796 833D[8CB30000]08                        cmp     dword [mp3_hdr_sample_rate_index], 8
   859 0000079D 7505                                    jnz     short .this_region_size
   860 0000079F B836000000                              mov     eax, 54         ; 108/2 ; region_size (for rate=8)
   861                                  
   862                                  .this_region_size:
   863 000007A4 894350                                  mov     [ebx+80], eax   ; [ebx+$mp3gr_region_size+0*4]
   864 000007A7 C7435420010000                          mov     dword [ebx+84], 288 ; [ebx+$mp3gr_region_size+1*4],576/2
   865 000007AE C7435820010000                          mov     dword [ebx+88], 288 ; [ebx+$mp3gr_region_size+2*4],576/2
   866 000007B5 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 1
   867 000007B7 D1E5                                    shl     ebp, 1
   868 000007B9 D1C0                                    rol     eax, 1
   869 000007BB 31E8                                    xor     eax, ebp
   870 000007BD 80ED01                                  sub     ch, 1
   871 000007C0 7913                                    jns     short .without_crc@@@@@
   872 000007C2 88E9                                    mov     cl, ch
   873 000007C4 80C510                                  add     ch, 10h
   874 000007C7 D3C5                                    rol     ebp, cl
   875 000007C9 668B2E                                  mov     bp, [esi]
   876 000007CC 83C602                                  add     esi, 2
   877 000007CF 66C1CD08                                ror     bp, 8
   878 000007D3 D3CD                                    ror     ebp, cl
   879                                  
   880                                  .without_crc@@@@@:
   881 000007D5 894330                                  mov     [ebx+48], eax   ; [ebx+$mp3gr_switch_point]
   882 000007D8 89E8                                    mov     eax, ebp        ; IRP nn,0,1 ; only 0..1 for blocksplit
   883 000007DA C1E505                                  shl     ebp, 5          ; mp3mac_get_n_bits 5
   884 000007DD C1C005                                  rol     eax, 5
   885 000007E0 31E8                                    xor     eax, ebp
   886 000007E2 80ED05                                  sub     ch, 5
   887 000007E5 7913                                    jns     short .without_crc@@@@@@
   888 000007E7 88E9                                    mov     cl, ch
   889 000007E9 80C510                                  add     ch, 10h
   890 000007EC D3C5                                    rol     ebp, cl
   891 000007EE 668B2E                                  mov     bp, [esi]
   892 000007F1 83C602                                  add     esi, 2
   893 000007F4 66C1CD08                                ror     bp, 8
   894 000007F8 D3CD                                    ror     ebp, cl
   895                                  
   896                                  .without_crc@@@@@@:
   897 000007FA 894338                                  mov     [ebx+56], eax   ; [ebx+$mp3gr_table_select+nn*4] ; nn=0
   898 000007FD 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 5
   899 000007FF C1E505                                  shl     ebp, 5
   900 00000802 C1C005                                  rol     eax, 5
   901 00000805 31E8                                    xor     eax, ebp
   902 00000807 80ED05                                  sub     ch, 5
   903 0000080A 7913                                    jns     short .without_crc_@@@@
   904 0000080C 88E9                                    mov     cl, ch
   905 0000080E 80C510                                  add     ch, 10h
   906 00000811 D3C5                                    rol     ebp, cl
   907 00000813 668B2E                                  mov     bp, [esi]
   908 00000816 83C602                                  add     esi, 2
   909 00000819 66C1CD08                                ror     bp, 8
   910 0000081D D3CD                                    ror     ebp, cl
   911                                  
   912                                  .without_crc_@@@@:
   913 0000081F 89433C                                  mov     [ebx+60], eax   ; [ebx+$mp3gr_table_select+nn*4] ; nn=1
   914 00000822 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 5
   915 00000824 C1E503                                  shl     ebp, 3          ; IRP nn,0,1,2
   916 00000827 C1C003                                  rol     eax, 3          ; mp3mac_get_n_bits 3
   917 0000082A 31E8                                    xor     eax, ebp
   918 0000082C 80ED03                                  sub     ch, 3
   919 0000082F 7913                                    jns     short .without_crc_@@@@@
   920 00000831 88E9                                    mov     cl, ch
   921 00000833 80C510                                  add     ch, 10h
   922 00000836 D3C5                                    rol     ebp, cl
   923 00000838 668B2E                                  mov     bp, [esi]
   924 0000083B 83C602                                  add     esi, 2
   925 0000083E 66C1CD08                                ror     bp, 8
   926 00000842 D3CD                                    ror     ebp, cl
   927                                  
   928                                  .without_crc_@@@@@:
   929 00000844 C1E003                                  shl     eax, 3
   930 00000847 894344                                  mov     [ebx+68], eax   ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=0
   931 0000084A 89E8                                    mov     eax, ebp
   932 0000084C C1E503                                  shl     ebp, 3
   933 0000084F C1C003                                  rol     eax, 3
   934 00000852 31E8                                    xor     eax, ebp
   935 00000854 80ED03                                  sub     ch, 3
   936 00000857 7913                                    jns     short .without_crc_@@@@@@
   937 00000859 88E9                                    mov     cl, ch
   938 0000085B 80C510                                  add     ch, 10h
   939 0000085E D3C5                                    rol     ebp, cl
   940 00000860 668B2E                                  mov     bp, [esi]
   941 00000863 83C602                                  add     esi, 2
   942 00000866 66C1CD08                                ror     bp, 8
   943 0000086A D3CD                                    ror     ebp, cl
   944                                  
   945                                  .without_crc_@@@@@@:
   946 0000086C C1E003                                  shl     eax, 3
   947 0000086F 894348                                  mov     [ebx+72], eax   ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=1
   948 00000872 89E8                                    mov     eax, ebp
   949 00000874 C1E503                                  shl     ebp, 3
   950 00000877 C1C003                                  rol     eax, 3
   951 0000087A 31E8                                    xor     eax, ebp
   952 0000087C 80ED03                                  sub     ch, 3
   953 0000087F 7913                                    jns     short .without_crc_@@@@@@@
   954 00000881 88E9                                    mov     cl, ch
   955 00000883 80C510                                  add     ch, 10h
   956 00000886 D3C5                                    rol     ebp, cl
   957 00000888 668B2E                                  mov     bp, [esi]
   958 0000088B 83C602                                  add     esi, 2
   959 0000088E 66C1CD08                                ror     bp, 8
   960 00000892 D3CD                                    ror     ebp, cl
   961                                  
   962                                  .without_crc_@@@@@@@:
   963 00000894 C1E003                                  shl     eax, 3
   964 00000897 89434C                                  mov     [ebx+76], eax   ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=2
   965 0000089A E910010000                              jmp     .blocksplit_done
   966                                  
   967                                  .no_blocksplit:                       
   968 0000089F C7432C00000000                          mov     dword [ebx+44], 0 ; [ebx+$mp3gr_block_type]
   969 000008A6 C7433000000000                          mov     dword [ebx+48], 0 ; [ebx+$mp3gr_switch_point]
   970 000008AD 89E8                                    mov     eax, ebp        ; IRP nn,0,1,2 ; range 0..2 when non-blocksplit
   971 000008AF C1E505                                  shl     ebp, 5          ; mp3mac_get_n_bits 5
   972 000008B2 C1C005                                  rol     eax, 5
   973 000008B5 31E8                                    xor     eax, ebp
   974 000008B7 80ED05                                  sub     ch, 5
   975 000008BA 7913                                    jns     short .@_without_crc
   976 000008BC 88E9                                    mov     cl, ch
   977 000008BE 80C510                                  add     ch, 10h
   978 000008C1 D3C5                                    rol     ebp, cl
   979 000008C3 668B2E                                  mov     bp, [esi]
   980 000008C6 83C602                                  add     esi, 2
   981 000008C9 66C1CD08                                ror     bp, 8
   982 000008CD D3CD                                    ror     ebp, cl
   983                                  
   984                                  .@_without_crc:
   985 000008CF 894338                                  mov     [ebx+56], eax   ; [ebx+$mp3gr_table_select+nn*4] ; nn=0
   986 000008D2 89E8                                    mov     eax, ebp
   987 000008D4 C1E505                                  shl     ebp, 5
   988 000008D7 C1C005                                  rol     eax, 5
   989 000008DA 31E8                                    xor     eax, ebp
   990 000008DC 80ED05                                  sub     ch, 5
   991 000008DF 7913                                    jns     short .@_without_crc_@
   992 000008E1 88E9                                    mov     cl, ch
   993 000008E3 80C510                                  add     ch, 10h
   994 000008E6 D3C5                                    rol     ebp, cl
   995 000008E8 668B2E                                  mov     bp, [esi]
   996 000008EB 83C602                                  add     esi, 2
   997 000008EE 66C1CD08                                ror     bp, 8
   998 000008F2 D3CD                                    ror     ebp, cl
   999                                  
  1000                                  .@_without_crc_@:
  1001 000008F4 89433C                                  mov     [ebx+60], eax   ; [ebx+$mp3gr_table_select+nn*4] ; nn=1
  1002 000008F7 89E8                                    mov     eax, ebp
  1003 000008F9 C1E505                                  shl     ebp, 5
  1004 000008FC C1C005                                  rol     eax, 5
  1005 000008FF 31E8                                    xor     eax, ebp
  1006 00000901 80ED05                                  sub     ch, 5
  1007 00000904 7913                                    jns     short .@_without_crc_@@
  1008 00000906 88E9                                    mov     cl, ch
  1009 00000908 80C510                                  add     ch, 10h
  1010 0000090B D3C5                                    rol     ebp, cl
  1011 0000090D 668B2E                                  mov     bp, [esi]
  1012 00000910 83C602                                  add     esi, 2
  1013 00000913 66C1CD08                                ror     bp, 8
  1014 00000917 D3CD                                    ror     ebp, cl
  1015                                  
  1016                                  .@_without_crc_@@:
  1017 00000919 894340                                  mov     [ebx+64], eax   ; [ebx+$mp3gr_table_select+nn*4] ; nn=2
  1018 0000091C 89E8                                    mov     eax, ebp
  1019 0000091E C1E504                                  shl     ebp, 4
  1020 00000921 C1C004                                  rol     eax, 4
  1021 00000924 31E8                                    xor     eax, ebp
  1022 00000926 80ED04                                  sub     ch, 4
  1023 00000929 7913                                    jns     short .@_without_crc@@@
  1024 0000092B 88E9                                    mov     cl, ch
  1025 0000092D 80C510                                  add     ch, 10h
  1026 00000930 D3C5                                    rol     ebp, cl
  1027 00000932 668B2E                                  mov     bp, [esi]
  1028 00000935 83C602                                  add     esi, 2
  1029 00000938 66C1CD08                                ror     bp, 8
  1030 0000093C D3CD                                    ror     ebp, cl
  1031                                  
  1032                                  .@_without_crc@@@:
  1033 0000093E 40                                      inc     eax
  1034 0000093F A3[78350500]                            mov     [_@@region_address0], eax
  1035 00000944 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 3
  1036 00000946 C1E503                                  shl     ebp, 3
  1037 00000949 C1C003                                  rol     eax, 3
  1038 0000094C 31E8                                    xor     eax, ebp
  1039 0000094E 80ED03                                  sub     ch, 3
  1040 00000951 7913                                    jns     short .@_without_crc@@@@
  1041 00000953 88E9                                    mov     cl, ch
  1042 00000955 80C510                                  add     ch, 10h
  1043 00000958 D3C5                                    rol     ebp, cl
  1044 0000095A 668B2E                                  mov     bp, [esi]
  1045 0000095D 83C602                                  add     esi, 2
  1046 00000960 66C1CD08                                ror     bp, 8
  1047 00000964 D3CD                                    ror     ebp, cl
  1048                                  
  1049                                  .@_without_crc@@@@:
  1050 00000966 40                                      inc     eax
  1051 00000967 0305[78350500]                          add     eax, [_@@region_address0]
  1052 0000096D A3[7C350500]                            mov     [_@@region_address1], eax
  1053 00000972 A1[8CB30000]                            mov     eax, [mp3_hdr_sample_rate_index]
  1054 00000977 C1E005                                  shl     eax, 5
  1055 0000097A 0305[78350500]                          add     eax, [_@@region_address0]
  1056 00000980 0FB78400[8CED0100]                      movzx   eax, word [mp3_band_index_long+eax*2]
  1057 00000988 D1E8                                    shr     eax, 1
  1058 0000098A 894350                                  mov     [ebx+80], eax   ; [ebx+$mp3gr_region_size+0*4]
  1059 0000098D A1[8CB30000]                            mov     eax, [mp3_hdr_sample_rate_index]
  1060 00000992 C1E005                                  shl     eax, 5
  1061 00000995 0305[7C350500]                          add     eax, [_@@region_address1]
  1062 0000099B 0FB78400[8CED0100]                      movzx   eax, word [mp3_band_index_long+eax*2]
  1063 000009A3 D1E8                                    shr     eax, 1
  1064 000009A5 894354                                  mov     [ebx+84], eax   ; [ebx+$mp3gr_region_size+1*4]
  1065 000009A8 C7435820010000                          mov     dword [ebx+88], 288 ; [ebx+$mp3gr_region_size+2*4],576/2
  1066                                  
  1067                                  .blocksplit_done:
  1068 000009AF 8D7B50                                  lea     edi, [ebx+80]   ; [ebx+$mp3gr_region_size+0]
  1069 000009B2 31D2                                    xor     edx, edx
  1070 000009B4 B103                                    mov     cl, 3
  1071                                  
  1072                                  .trunc_region_size_lop:
  1073 000009B6 8B07                                    mov     eax, [edi]
  1074 000009B8 3B430C                                  cmp     eax, [ebx+12]   ; [ebx+$mp3gr_big_values]
  1075 000009BB 7603                                    jbe     short .trunc_region_size_this
  1076 000009BD 8B430C                                  mov     eax, [ebx+12]
  1077                                  
  1078                                  .trunc_region_size_this:
  1079 000009C0 29D0                                    sub     eax, edx
  1080 000009C2 8907                                    mov     [edi], eax
  1081 000009C4 01C2                                    add     edx, eax
  1082 000009C6 83C704                                  add     edi, 4
  1083 000009C9 FEC9                                    dec     cl
  1084 000009CB 75E9                                    jnz     short .trunc_region_size_lop
  1085 000009CD C7431C0D000000                          mov     dword [ebx+28], 13 ; [ebx+$mp3gr_short_start]
  1086 000009D4 C7432016000000                          mov     dword [ebx+32], 22 ; [ebx+$mp3gr_long_end]
  1087 000009DB 837B2C02                                cmp     dword [ebx+44], 2 ; [ebx+$mp3gr_block_type]
  1088 000009DF 7549                                    jnz     short .these_band_indices
  1089 000009E1 C7431C00000000                          mov     dword [ebx+28], 0 ; [ebx+$mp3gr_short_start]
  1090 000009E8 C7432000000000                          mov     dword [ebx+32], 0 ; [ebx+$mp3gr_long_end]
  1091 000009EF 837B3000                                cmp     dword [ebx+48], 0 ; [ebx+$mp3gr_switch_point]
  1092 000009F3 7435                                    jz      short .these_band_indices
  1093 000009F5 C7431C02000000                          mov     dword [ebx+28], 2 ; [ebx+$mp3gr_short_start]
  1094 000009FC C7432004000000                          mov     dword [ebx+32], 4 ; [ebx+$mp3gr_long_end]
  1095 00000A03 833D[8CB30000]08                        cmp     dword [mp3_hdr_sample_rate_index], 8
  1096 00000A0A 741E                                    jz      short .these_band_indices
  1097 00000A0C 833D[8CB30000]02                        cmp     dword [mp3_hdr_sample_rate_index], 2
  1098 00000A13 C7431C03000000                          mov     dword [ebx+28], 3 ; [ebx+$mp3gr_short_start]
  1099 00000A1A C7432008000000                          mov     dword [ebx+32], 8 ; [ebx+$mp3gr_long_end]
  1100 00000A21 7607                                    jbe     short .these_band_indices
  1101 00000A23 C7432006000000                          mov     dword [ebx+32], 6 ; [ebx+$mp3gr_long_end]
  1102                                  
  1103                                  .these_band_indices:
  1104 00000A2A 31C0                                    xor     eax, eax
  1105 00000A2C 833D[B8B30000]00                        cmp     dword [mp3_hdr_flag_lsf], 0
  1106 00000A33 7520                                    jnz     short .no_preflag
  1107 00000A35 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 1
  1108 00000A37 D1E5                                    shl     ebp, 1
  1109 00000A39 D1C0                                    rol     eax, 1
  1110 00000A3B 31E8                                    xor     eax, ebp
  1111 00000A3D 80ED01                                  sub     ch, 1
  1112 00000A40 7913                                    jns     short .no_preflag
  1113 00000A42 88E9                                    mov     cl, ch
  1114 00000A44 80C510                                  add     ch, 10h
  1115 00000A47 D3C5                                    rol     ebp, cl
  1116 00000A49 668B2E                                  mov     bp, [esi]
  1117 00000A4C 83C602                                  add     esi, 2
  1118 00000A4F 66C1CD08                                ror     bp, 8
  1119 00000A53 D3CD                                    ror     ebp, cl
  1120                                  
  1121                                  .no_preflag:
  1122 00000A55 894318                                  mov     [ebx+24], eax   ; [ebx+$mp3gr_preflag]
  1123 00000A58 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 1
  1124 00000A5A D1E5                                    shl     ebp, 1
  1125 00000A5C D1C0                                    rol     eax, 1
  1126 00000A5E 31E8                                    xor     eax, ebp
  1127 00000A60 80ED01                                  sub     ch, 1
  1128 00000A63 7913                                    jns     short .@_without_crc@@@@@
  1129 00000A65 88E9                                    mov     cl, ch
  1130 00000A67 80C510                                  add     ch, 10h
  1131 00000A6A D3C5                                    rol     ebp, cl
  1132 00000A6C 668B2E                                  mov     bp, [esi]
  1133 00000A6F 83C602                                  add     esi, 2
  1134 00000A72 66C1CD08                                ror     bp, 8
  1135 00000A76 D3CD                                    ror     ebp, cl
  1136                                  
  1137                                  .@_without_crc@@@@@:
  1138 00000A78 40                                      inc     eax
  1139 00000A79 894334                                  mov     [ebx+52], eax   ; [ebx+$mp3gr_scalefac_scale]
  1140 00000A7C 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 1
  1141 00000A7E D1E5                                    shl     ebp, 1
  1142 00000A80 D1C0                                    rol     eax, 1
  1143 00000A82 31E8                                    xor     eax, ebp
  1144 00000A84 80ED01                                  sub     ch, 1
  1145 00000A87 7913                                    jns     short .@_without_crc@@@@@@
  1146 00000A89 88E9                                    mov     cl, ch
  1147 00000A8B 80C510                                  add     ch, 10h
  1148 00000A8E D3C5                                    rol     ebp, cl
  1149 00000A90 668B2E                                  mov     bp, [esi]
  1150 00000A93 83C602                                  add     esi, 2
  1151 00000A96 66C1CD08                                ror     bp, 8
  1152 00000A9A D3CD                                    ror     ebp, cl
  1153                                  
  1154                                  .@_without_crc@@@@@@: 
  1155 00000A9C 83C010                                  add     eax, 10h        ; table 10h..11h (quad_vlc)
  1156 00000A9F 894324                                  mov     [ebx+36], eax   ; [ebx+$mp3gr_count1table_select]
  1157 00000AA2 81C340130000                            add     ebx, 4928       ; $mp3gr_entrysiz*2
  1158 00000AA8 FF05[680A0100]                          inc     dword [mp3_curr_channel]
  1159 00000AAE A1[680A0100]                            mov     eax, [mp3_curr_channel]
  1160 00000AB3 3B05[94B30000]                          cmp     eax, [mp3_src_num_channels]
  1161 00000AB9 0F82C1FBFFFF                            jb      .hdr_channel_lop
  1162 00000ABF 5B                                      pop     ebx
  1163 00000AC0 81C3A0090000                            add     ebx, 2464       ; $mp3gr_entrysiz
  1164 00000AC6 FF05[6C0A0100]                          inc     dword [mp3_curr_granule]
  1165 00000ACC A1[6C0A0100]                            mov     eax, [mp3_curr_granule]
  1166 00000AD1 3B05[880A0100]                          cmp     eax, [mp3_nb_granules]
  1167 00000AD7 0F8298FBFFFF                            jb      .hdr_granule_lop
  1168 00000ADD F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_read_granule
  1169 00000AE4 740E                                    jz      short .no_rdtsc_supported@
  1170 00000AE6 0F31                                    rdtsc
  1171 00000AE8 0105[5C8C0000]                          add     [rdtsc_read_granule], eax
  1172 00000AEE 1115[608C0000]                          adc     [rdtsc_read_granule+4], edx
  1173                                  
  1174                                  .no_rdtsc_supported@:
  1175 00000AF4 F8                                      clc
  1176 00000AF5 C3                                      retn
  1177                                  
  1178                                  .error:
  1179 00000AF6 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_read_granule
  1180 00000AFD 740E                                    jz      short .no_rdtsc_supported@@
  1181 00000AFF 0F31                                    rdtsc
  1182 00000B01 0105[5C8C0000]                          add     [rdtsc_read_granule], eax
  1183 00000B07 1115[608C0000]                          adc     [rdtsc_read_granule+4], edx
  1184                                  
  1185                                  .no_rdtsc_supported@@:
  1186 00000B0D 8B25[80350500]                          mov     esp, [_@@saved_sp]
  1187 00000B13 F9                                      stc
  1188 00000B14 C3                                      retn
  1189                                  
  1190                                  
  1191                                  ; =============== S U B R O U T I N E =======================================
  1192                                  
  1193                                  
  1194                                  mp3_bitstream_append_to_main_data_pool:
  1195 00000B15 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_append_main
  1196 00000B1C 740E                                    jz      short .no_rdtsc_supported
  1197 00000B1E 0F31                                    rdtsc
  1198 00000B20 2905[748C0000]                          sub     [rdtsc_append_main], eax
  1199 00000B26 1915[788C0000]                          sbb     [rdtsc_append_main+4], edx
  1200                                  
  1201                                  .no_rdtsc_supported:
  1202 00000B2C 8B0D[74B30000]                          mov     ecx, [mp3_src_frame_end]
  1203 00000B32 29F1                                    sub     ecx, esi
  1204 00000B34 0F8266020000                            jb      fatalunexpected
  1205 00000B3A 8B3D[68B30000]                          mov     edi, [main_data_pool_wr_ptr]
  1206 00000B40 8D040F                                  lea     eax, [edi+ecx]
  1207 00000B43 3D[68B30000]                            cmp     eax, main_data_pool_wr_ptr
  1208 00000B48 7616                                    jbe     short .pool_inrange
  1209 00000B4A 51                                      push    ecx
  1210 00000B4B 56                                      push    esi
  1211 00000B4C 8DB700FEFFFF                            lea     esi, [edi-200h]
  1212 00000B52 BF[68A30000]                            mov     edi, main_data_pool_start
  1213 00000B57 B980000000                              mov     ecx, 128
  1214 00000B5C F3A5                                    rep movsd
  1215 00000B5E 5E                                      pop     esi
  1216 00000B5F 59                                      pop     ecx
  1217                                  
  1218                                  .pool_inrange:
  1219 00000B60 89F8                                    mov     eax, edi
  1220 00000B62 2B05[800A0100]                          sub     eax, [mp3_main_data_begin]
  1221 00000B68 F3A4                                    rep movsb
  1222 00000B6A 893D[68B30000]                          mov     [main_data_pool_wr_ptr], edi
  1223 00000B70 3D[68A30000]                            cmp     eax, main_data_pool_start
  1224 00000B75 7828                                    js      short .below_pool_start
  1225 00000B77 A3[740A0100]                            mov     [mp3_bitstream_start], eax
  1226                                                  ; 22/10/2024
  1227                                  		;mov    eax, 0
  1228 00000B7C 8B35[740A0100]                          mov     esi, [mp3_bitstream_start] ; mp3mac_bitstream_set_position
  1229                                                  ;mov    cl, al
  1230                                                  ;shr    eax, 3
  1231                                                  ;and    cl, 7
  1232                                                  ;add    esi, eax
  1233 00000B82 E8CCF6FFFF                              call    mp3_recollect_bits
  1234                                                  ;mov    eax, ebp        ; mp3mac_get_n_bits cl
  1235                                                  ;shl    ebp, cl
  1236                                                  ;rol    eax, cl
  1237                                                  ;xor    eax, ebp
  1238                                                  ;sub    ch, cl
  1239                                                  ;jns    short .cont
  1240                                                  ;mov    cl, ch          ; mp3mac_collect_more
  1241                                                  ;add    ch, 10h
  1242                                                  ;rol    ebp, cl
  1243                                                  ;mov    bp, [esi]
  1244                                                  ;add    esi, 2
  1245                                                  ;ror    bp, 8
  1246                                                  ;ror    ebp, cl
  1247                                  
  1248                                  .cont:
  1249 00000B87 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_append_main
  1250 00000B8E 740E                                    jz      short .no_rdtsc_supported@
  1251 00000B90 0F31                                    rdtsc
  1252 00000B92 0105[748C0000]                          add     [rdtsc_append_main], eax
  1253 00000B98 1115[788C0000]                          adc     [rdtsc_append_main+4], edx
  1254                                  
  1255                                  .no_rdtsc_supported@:
  1256 00000B9E C3                                      retn
  1257                                  
  1258                                  .below_pool_start:
  1259 00000B9F C705[600A0100]0000-                     mov     dword [mp3_samples_output_size], 0
  1259 00000BA7 0000               
  1260 00000BA9 EBDC                                    jmp     short .cont
  1261                                  
  1262                                  
  1263                                  ; =============== S U B R O U T I N E =======================================
  1264                                  
  1265                                  
  1266                                  mp3_bitstream_read_scalefacs:
  1267 00000BAB F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_read_scalefac
  1268 00000BB2 740E                                    jz      short .no_rdtsc_supported
  1269 00000BB4 0F31                                    rdtsc
  1270 00000BB6 2905[8C8C0000]                          sub     [rdtsc_read_scalefac], eax
  1271 00000BBC 1915[908C0000]                          sbb     [rdtsc_read_scalefac+4], edx
  1272                                  
  1273                                  .no_rdtsc_supported:
  1274 00000BC2 8D7B70                                  lea     edi, [ebx+112]  ; [ebx+$mp3gr_scale_factors]
  1275 00000BC5 833D[B8B30000]00                        cmp     dword [mp3_hdr_flag_lsf], 0
  1276 00000BCC 0F850D010000                            jnz     .body_lsf_nonzero
  1277 00000BD2 8B4314                                  mov     eax, [ebx+20]   ; [ebx+$mp3gr_scalefac_compress]
  1278 00000BD5 668B9400[6C900000]                      mov     dx, [mp3_slen_table+eax*2] ; slen[0,1]
  1279 00000BDD 837B2C02                                cmp     dword [ebx+44], 2 ; [ebx+$mp3gr_block_type]
  1280 00000BE1 757F                                    jnz     short .body_lsf_zero_non_type2
  1281 00000BE3 53                                      push    ebx
  1282 00000BE4 B012                                    mov     al, 18
  1283 00000BE6 2A4330                                  sub     al, [ebx+48]    ; [ebx+$mp3gr_switch_point]
  1284 00000BE9 88C3                                    mov     bl, al          ; @@get_bl_scalefacs_with_dl_bits 0
  1285 00000BEB 80FA00                                  cmp     dl, 0
  1286 00000BEE 7428                                    jz      short .quickfill
  1287                                  
  1288                                  .scalefac_get_lop:
  1289 00000BF0 88D1                                    mov     cl, dl          ; LSB of edx, slen[i]
  1290 00000BF2 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
  1291 00000BF4 D3E5                                    shl     ebp, cl
  1292 00000BF6 D3C0                                    rol     eax, cl
  1293 00000BF8 31E8                                    xor     eax, ebp
  1294 00000BFA 28CD                                    sub     ch, cl
  1295 00000BFC 7913                                    jns     short .cont@
  1296 00000BFE 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1297 00000C00 80C510                                  add     ch, 10h
  1298 00000C03 D3C5                                    rol     ebp, cl
  1299 00000C05 668B2E                                  mov     bp, [esi]
  1300 00000C08 83C602                                  add     esi, 2
  1301 00000C0B 66C1CD08                                ror     bp, 8
  1302 00000C0F D3CD                                    ror     ebp, cl
  1303                                  
  1304                                  .cont@:
  1305 00000C11 AA                                      stosb
  1306 00000C12 FECB                                    dec     bl
  1307 00000C14 75DA                                    jnz     short .scalefac_get_lop
  1308 00000C16 EB09                                    jmp     short .skip_quickfill
  1309                                  
  1310                                  .quickfill:
  1311 00000C18 51                                      push    ecx
  1312 00000C19 0FB6CB                                  movzx   ecx, bl
  1313 00000C1C B000                                    mov     al, 0           ; NO_INTENSITY_FLAG
  1314 00000C1E F3AA                                    rep stosb
  1315 00000C20 59                                      pop     ecx
  1316                                  
  1317                                  .skip_quickfill:
  1318 00000C21 C1EA08                                  shr     edx, 8
  1319 00000C24 B312                                    mov     bl, 18
  1320 00000C26 80FA00                                  cmp     dl, 0           ; @@get_bl_scalefacs_with_dl_bits 0
  1321 00000C29 7428                                    jz      short .quickfill@
  1322                                  
  1323                                  .scalefac_get_lop@:
  1324 00000C2B 88D1                                    mov     cl, dl
  1325 00000C2D 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
  1326 00000C2F D3E5                                    shl     ebp, cl
  1327 00000C31 D3C0                                    rol     eax, cl
  1328 00000C33 31E8                                    xor     eax, ebp
  1329 00000C35 28CD                                    sub     ch, cl
  1330 00000C37 7913                                    jns     short .cont@@
  1331 00000C39 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1332 00000C3B 80C510                                  add     ch, 10h
  1333 00000C3E D3C5                                    rol     ebp, cl
  1334 00000C40 668B2E                                  mov     bp, [esi]
  1335 00000C43 83C602                                  add     esi, 2
  1336 00000C46 66C1CD08                                ror     bp, 8
  1337 00000C4A D3CD                                    ror     ebp, cl
  1338                                  
  1339                                  .cont@@:
  1340 00000C4C AA                                      stosb
  1341 00000C4D FECB                                    dec     bl
  1342 00000C4F 75DA                                    jnz     short .scalefac_get_lop@
  1343 00000C51 EB09                                    jmp     short .skip_quickfill@
  1344                                  
  1345                                  .quickfill@:
  1346 00000C53 51                                      push    ecx
  1347 00000C54 0FB6CB                                  movzx   ecx, bl
  1348 00000C57 B000                                    mov     al, 0
  1349 00000C59 F3AA                                    rep stosb
  1350 00000C5B 59                                      pop     ecx
  1351                                  
  1352                                  .skip_quickfill@:
  1353 00000C5C 5B                                      pop     ebx
  1354 00000C5D E914010000                              jmp     .body_lsf_zeropad
  1355                                  
  1356                                  .body_lsf_zero_non_type2:
  1357 00000C62 53                                      push    ebx
  1358 00000C63 C1CA08                                  ror     edx, 8
  1359 00000C66 88D6                                    mov     dh, dl          ; slen[0,1,2,3] = slen[0,0,1,1]
  1360 00000C68 C1C210                                  rol     edx, 16
  1361 00000C6B 88F2                                    mov     dl, dh
  1362 00000C6D 8A4328                                  mov     al, [ebx+40]    ; [ebx+$mp3gr_scfsi]
  1363 00000C70 C0E004                                  shl     al, 4           ; move to upper 4bit
  1364 00000C73 A2[88350500]                            mov     byte [_@@scfsi], al
  1365 00000C78 BB06050505                              mov     ebx, 5050506h   ; num[0..3]
  1366                                  
  1367                                  .body_lsf_zero_non_type2_lop:
  1368 00000C7D D025[88350500]                          shl     byte [_@@scfsi], 1
  1369 00000C83 7238                                    jb      short .body_lsf_zero_non_type2_copy
  1370 00000C85 80FA00                                  cmp     dl, 0           ; @@get_bl_scalefacs_with_dl_bits 0
  1371 00000C88 7428                                    jz      short .quickfill@@
  1372                                  
  1373                                  .scalefac_get_lop@@:
  1374 00000C8A 88D1                                    mov     cl, dl
  1375 00000C8C 89E8                                    mov     eax, ebp
  1376 00000C8E D3E5                                    shl     ebp, cl
  1377 00000C90 D3C0                                    rol     eax, cl
  1378 00000C92 31E8                                    xor     eax, ebp
  1379 00000C94 28CD                                    sub     ch, cl
  1380 00000C96 7913                                    jns     short .cont@@@
  1381 00000C98 88E9                                    mov     cl, ch
  1382 00000C9A 80C510                                  add     ch, 10h
  1383 00000C9D D3C5                                    rol     ebp, cl
  1384 00000C9F 668B2E                                  mov     bp, [esi]
  1385 00000CA2 83C602                                  add     esi, 2
  1386 00000CA5 66C1CD08                                ror     bp, 8
  1387 00000CA9 D3CD                                    ror     ebp, cl
  1388                                  
  1389                                  .cont@@@:
  1390 00000CAB AA                                      stosb
  1391 00000CAC FECB                                    dec     bl
  1392 00000CAE 75DA                                    jnz     short .scalefac_get_lop@@
  1393 00000CB0 EB09                                    jmp     short .skip_quickfill@@
  1394                                  
  1395                                  .quickfill@@:
  1396 00000CB2 51                                      push    ecx
  1397 00000CB3 0FB6CB                                  movzx   ecx, bl
  1398 00000CB6 B000                                    mov     al, 0
  1399 00000CB8 F3AA                                    rep stosb
  1400 00000CBA 59                                      pop     ecx
  1401                                  
  1402                                  .skip_quickfill@@:
  1403 00000CBB EB11                                    jmp     short .body_lsf_zero_non_type2_next
  1404                                  
  1405                                  .body_lsf_zero_non_type2_copy:
  1406 00000CBD 51                                      push    ecx
  1407 00000CBE 89F0                                    mov     eax, esi
  1408 00000CC0 0FB6CB                                  movzx   ecx, bl         ; copy
  1409 00000CC3 8DB760F6FFFF                            lea     esi, [edi-2464] ; [edi-$mp3gr_entrysiz] ; src=granule[0] ; from
  1410 00000CC9 F3A4                                    rep movsb               ; prev
  1411 00000CCB 89C6                                    mov     esi, eax
  1412 00000CCD 59                                      pop     ecx
  1413                                  
  1414                                  .body_lsf_zero_non_type2_next:
  1415 00000CCE C1EA08                                  shr     edx, 8          ; dl=next slen
  1416 00000CD1 C1EB08                                  shr     ebx, 8          ; bl=next numfacs
  1417 00000CD4 75A7                                    jnz     short .body_lsf_zero_non_type2_lop
  1418 00000CD6 5B                                      pop     ebx
  1419 00000CD7 B000                                    mov     al, 0
  1420 00000CD9 AA                                      stosb
  1421 00000CDA E9A9000000                              jmp     .body_lsf_done
  1422                                  
  1423                                  .body_lsf_nonzero:
  1424 00000CDF 8B5314                                  mov     edx, [ebx+14h]  ; [ebx+$mp3gr_scalefac_compress]
  1425 00000CE2 F705[B4B30000]0100-                     test    dword [mp3_hdr_mode_ext], 1 ; MODE_EXT_I_STEREO
  1425 00000CEA 0000               
  1426 00000CEC 740F                                    jz      short .normal_scalefac
  1427 00000CEE 833D[680A0100]00                        cmp     dword [mp3_curr_channel], 0
  1428 00000CF5 7406                                    jz      short .normal_scalefac
  1429 00000CF7 81C200020000                            add     edx, 512        ; for 2nd channel of intensity_stereo
  1430                                  
  1431                                  .normal_scalefac:
  1432 00000CFD 8A04D5[7D150500]                        mov     al, [(mp3_lsf_sf_expand_exploded_table+5)+edx*8]
  1433 00000D04 084318                                  or      [ebx+24], al    ; [ebx+$mp3gr_preflag]
  1434 00000D07 53                                      push    ebx
  1435 00000D08 0FB604D5[7C150500]                      movzx   eax, byte [(mp3_lsf_sf_expand_exploded_table+4)+edx*8]
  1436 00000D10 837B2C02                                cmp     dword [ebx+44], 2 ;  [ebx+$mp3gr_block_type]
  1437 00000D14 7507                                    jnz     short .this_tindex1
  1438 00000D16 8B5B30                                  mov     ebx, [ebx+48]   ; [ebx+$mp3gr_switch_point]
  1439 00000D19 8D449804                                lea     eax, [eax+ebx*4+4]
  1440                                  
  1441                                  .this_tindex1:
  1442 00000D1D 8B98[8C900000]                          mov     ebx, [mp3_lsf_nsf_table+eax]
  1443 00000D23 8B14D5[78150500]                        mov     edx, dword [mp3_lsf_sf_expand_exploded_table+edx*8]
  1444                                  
  1445                                  .scalefax_outer_lop:
  1446 00000D2A 80FA00                                  cmp     dl, 0           ; @@get_bl_scalefacs_with_dl_bits 1
  1447 00000D2D 7435                                    jz      short .@quickfil
  1448                                  
  1449                                  .@scalefac_get_lop:
  1450 00000D2F 88D1                                    mov     cl, dl
  1451 00000D31 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
  1452 00000D33 D3E5                                    shl     ebp, cl
  1453 00000D35 D3C0                                    rol     eax, cl
  1454 00000D37 31E8                                    xor     eax, ebp
  1455 00000D39 28CD                                    sub     ch, cl
  1456 00000D3B 7913                                    jns     short .cont
  1457 00000D3D 88E9                                    mov     cl, ch
  1458 00000D3F 80C510                                  add     ch, 10h
  1459 00000D42 D3C5                                    rol     ebp, cl
  1460 00000D44 668B2E                                  mov     bp, [esi]
  1461 00000D47 83C602                                  add     esi, 2
  1462 00000D4A 66C1CD08                                ror     bp, 8
  1463 00000D4E D3CD                                    ror     ebp, cl
  1464                                  
  1465                                  .cont:
  1466 00000D50 88D1                                    mov     cl, dl          ; numbits
  1467 00000D52 88C4                                    mov     ah, al
  1468 00000D54 FEC4                                    inc     ah              ; val+1
  1469 00000D56 D2EC                                    shr     ah, cl          ; bit0=is.max.value
  1470 00000D58 C0E407                                  shl     ah, 7           ; bit7=is.max.value
  1471 00000D5B 08E0                                    or      al, ah          ; apply NO_INTENSITY_FLAG
  1472 00000D5D AA                                      stosb
  1473 00000D5E FECB                                    dec     bl
  1474 00000D60 75CD                                    jnz     short .@scalefac_get_lop
  1475 00000D62 EB09                                    jmp     short .@skip_quickfill
  1476                                  
  1477                                  .@quickfil:
  1478 00000D64 51                                      push    ecx
  1479 00000D65 0FB6CB                                  movzx   ecx, bl
  1480 00000D68 B080                                    mov     al, 80h
  1481 00000D6A F3AA                                    rep stosb
  1482 00000D6C 59                                      pop     ecx
  1483                                  
  1484                                  .@skip_quickfill:
  1485 00000D6D C1EA08                                  shr     edx, 8
  1486 00000D70 C1EB08                                  shr     ebx, 8
  1487 00000D73 75B5                                    jnz     short .scalefax_outer_lop
  1488 00000D75 5B                                      pop     ebx
  1489                                  
  1490                                  .body_lsf_zeropad:
  1491 00000D76 89CA                                    mov     edx, ecx
  1492 00000D78 8D8B98000000                            lea     ecx, [ebx+152]  ; [ebx+$mp3gr_scale_factors+40]
  1493 00000D7E 29F9                                    sub     ecx, edi
  1494                                                  ;jb     short fatal_scalefactors
  1495                                  		; 21/10/2024
  1496 00000D80 721E                    		jb	short fatalunexpected
  1497 00000D82 B000                                    mov     al, 0
  1498 00000D84 F3AA                                    rep stosb
  1499 00000D86 89D1                                    mov     ecx, edx
  1500                                  
  1501                                  .body_lsf_done:
  1502 00000D88 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_read_scalefac
  1503 00000D8F 740E                                    jz      short .no_rdtsc_supported@@@
  1504 00000D91 0F31                                    rdtsc
  1505 00000D93 0105[8C8C0000]                          add     [rdtsc_read_scalefac], eax
  1506 00000D99 1115[908C0000]                          adc     [rdtsc_read_scalefac+4], edx
  1507                                  
  1508                                  .no_rdtsc_supported@@@:
  1509 00000D9F C3                                      retn
  1510                                  
  1511                                  		; 21/10/2024
  1512                                  ;fatal_scalefactors:
  1513                                                  ;jmp    fatalunexpected
  1514                                  
  1515                                  ; ---------------------------------------------------------------------------
  1516                                  
  1517                                  		; 21/10/2024
  1518                                  fatalunexpected:                       
  1519 00000DA0 F735[F89A0000]                          div	dword [zero]
  1520                                  hang:
  1521 00000DA6 EBFE                                    jmp     short hang
  1522                                  
  1523                                  
  1524                                  ; =============== S U B R O U T I N E =======================================
  1525                                  
  1526                                  
  1527                                  mp3_get_exponents_from_scale_factors:
  1528 00000DA8 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_xlat_scalefac
  1529 00000DAF 740E                                    jz      short .no_rdtsc_supported
  1530 00000DB1 0F31                                    rdtsc
  1531 00000DB3 2905[A48C0000]                          sub     [rdtsc_xlat_scalefac], eax
  1532 00000DB9 1915[A88C0000]                          sbb     [rdtsc_xlat_scalefac+4], edx
  1533                                  
  1534                                  .no_rdtsc_supported:
  1535 00000DBF 51                                      push    ecx             ; mp3mac_push_bitstream
  1536 00000DC0 55                                      push    ebp
  1537 00000DC1 56                                      push    esi
  1538 00000DC2 C705[98350500]0000-                     mov     dword [_@@rle_point], 0
  1538 00000DCA 0000               
  1539 00000DCC 8A4B34                                  mov     cl, [ebx+52]    ; [ebx+$mp3gr_scalefac_scale]
  1540 00000DCF BF[0C310100]                            mov     edi, mp3_exponents
  1541 00000DD4 31D2                                    xor     edx, edx
  1542 00000DD6 3B5320                                  cmp     edx, [ebx+32]   ; [ebx+$mp3gr_long_end]
  1543 00000DD9 7345                                    jnb     short .long_done
  1544 00000DDB A1[8CB30000]                            mov     eax, [mp3_hdr_sample_rate_index]
  1545 00000DE0 6BC016                                  imul    eax, 22
  1546 00000DE3 8DA8[9C960000]                          lea     ebp, [mp3_band_size_long+eax]
  1547 00000DE9 8B4318                                  mov     eax, [ebx+24]   ; [ebx+$mp3gr_preflag]
  1548 00000DEC 6BC016                                  imul    eax, 22
  1549 00000DEF 8DB0[EC970000]                          lea     esi, [mp3_pretab+eax]
  1550                                  
  1551                                  .long_lop:
  1552 00000DF5 0FB6441370                              movzx   eax, byte [ebx+edx+112] ; [ebx+$mp3gr_scale_factors+edx]
  1553 00000DFA 247F                                    and     al, 7Fh         ; strip NO_INTENSITY_FLAG
  1554 00000DFC 020416                                  add     al, [esi+edx]
  1555 00000DFF D3E0                                    shl     eax, cl
  1556 00000E01 F7D8                                    neg     eax
  1557 00000E03 034310                                  add     eax, [ebx+16]   ; [ebx+$mp3gr_global_gain]
  1558 00000E06 C1E010                                  shl     eax, 16
  1559 00000E09 8A441500                                mov     al, [ebp+edx+0]
  1560 00000E0D 0305[98350500]                          add     eax, [_@@rle_point]
  1561 00000E13 66A3[98350500]                          mov     word [_@@rle_point], ax
  1562 00000E19 AB                                      stosd
  1563 00000E1A 42                                      inc     edx
  1564 00000E1B 3B5320                                  cmp     edx, [ebx+32]   ; [ebx+$mp3gr_long_end]
  1565 00000E1E 72D5                                    jb      short .long_lop
  1566                                  
  1567                                  .long_done:
  1568 00000E20 8B531C                                  mov     edx, [ebx+28]   ; [ebx+$mp3gr_short_start]
  1569 00000E23 83FA0D                                  cmp     edx, 13
  1570 00000E26 0F83AA000000                            jnb     .skip_shorts
  1571 00000E2C A1[8CB30000]                            mov     eax, [mp3_hdr_sample_rate_index]
  1572 00000E31 6BC00D                                  imul    eax, 13
  1573 00000E34 8DA8[6C970000]                          lea     ebp, [mp3_band_size_short+eax]
  1574 00000E3A 8B7320                                  mov     esi, [ebx+32]   ; [ebx+$mp3gr_long_end]
  1575 00000E3D 8B4310                                  mov     eax, [ebx+16]   ; [ebx+$mp3gr_global_gain]
  1576                                                                          ; IRP nn,0,1,2
  1577 00000E40 2B4344                                  sub     eax, [ebx+68]   ; [ebx+$mp3gr_subblock_gain+nn*4]
  1578 00000E43 A3[8C350500]                            mov     [_@@gains], eax ; [@@gains+nn*4]
  1579 00000E48 8B4310                                  mov     eax, [ebx+16]
  1580 00000E4B 2B4348                                  sub     eax, [ebx+72]
  1581 00000E4E A3[90350500]                            mov     [_@@gains+4], eax ; [@@gains+nn*4]
  1582 00000E53 8B4310                                  mov     eax, [ebx+16]
  1583 00000E56 2B434C                                  sub     eax, [ebx+76]   ; [ebx+$mp3gr_subblock_gain+nn*4]
  1584 00000E59 A3[94350500]                            mov     [_@@gains+8], eax ; [@@gains+nn*4]
  1585                                  
  1586                                  .short_lop:
  1587 00000E5E 0FB6443370                              movzx   eax, byte [ebx+esi+112] ; [ebx+$mp3gr_scale_factors+esi]
  1588                                                                          ; IRP nn,0,1,2
  1589 00000E63 247F                                    and     al, 7Fh         ; strip NO_INTENSITY_FLAG
  1590 00000E65 46                                      inc     esi
  1591 00000E66 D3E0                                    shl     eax, cl
  1592 00000E68 F7D8                                    neg     eax
  1593 00000E6A 0305[8C350500]                          add     eax, [_@@gains] ; [@@gains+nn*4] ; nn=0
  1594 00000E70 C1E010                                  shl     eax, 16
  1595 00000E73 8A441500                                mov     al, [ebp+edx+0] ; bstab[edx]
  1596 00000E77 0305[98350500]                          add     eax, [_@@rle_point]
  1597 00000E7D 66A3[98350500]                          mov     word [_@@rle_point], ax
  1598 00000E83 AB                                      stosd                   ; msw=val, lsw=point
  1599 00000E84 0FB6443370                              movzx   eax, byte [ebx+esi+112] ; [ebx+$mp3gr_scalefac_scale]
  1600 00000E89 247F                                    and     al, 7Fh
  1601 00000E8B 46                                      inc     esi
  1602 00000E8C D3E0                                    shl     eax, cl
  1603 00000E8E F7D8                                    neg     eax
  1604 00000E90 0305[90350500]                          add     eax, [_@@gains+4] ; [@@gains+nn*4] ; nn = 1
  1605 00000E96 C1E010                                  shl     eax, 16
  1606 00000E99 8A441500                                mov     al, [ebp+edx+0]
  1607 00000E9D 0305[98350500]                          add     eax, [_@@rle_point]
  1608 00000EA3 66A3[98350500]                          mov     word [_@@rle_point], ax
  1609 00000EA9 AB                                      stosd
  1610 00000EAA 0FB6443370                              movzx   eax, byte [ebx+esi+70h]
  1611 00000EAF 247F                                    and     al, 7Fh
  1612 00000EB1 46                                      inc     esi
  1613 00000EB2 D3E0                                    shl     eax, cl
  1614 00000EB4 F7D8                                    neg     eax
  1615 00000EB6 0305[94350500]                          add     eax, [_@@gains+8] ; [@@gains+nn*4] ; nn=2
  1616 00000EBC C1E010                                  shl     eax, 10h
  1617 00000EBF 8A441500                                mov     al, [ebp+edx+0]
  1618 00000EC3 0305[98350500]                          add     eax, [_@@rle_point]
  1619 00000EC9 66A3[98350500]                          mov     word [_@@rle_point], ax
  1620 00000ECF AB                                      stosd
  1621 00000ED0 42                                      inc     edx
  1622 00000ED1 83FA0D                                  cmp     edx, 13
  1623 00000ED4 7288                                    jb      short .short_lop
  1624                                  
  1625                                  .skip_shorts:
  1626 00000ED6 5E                                      pop     esi             ; mp3mac_pop_bitstream
  1627 00000ED7 5D                                      pop     ebp
  1628 00000ED8 59                                      pop     ecx
  1629 00000ED9 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_xlat_scalefac
  1630 00000EE0 740E                                    jz      short .no_rdtsc_supported@
  1631 00000EE2 0F31                                    rdtsc
  1632 00000EE4 0105[A48C0000]                          add     [rdtsc_xlat_scalefac], eax
  1633 00000EEA 1115[A88C0000]                          adc     [rdtsc_xlat_scalefac+4], edx
  1634                                  
  1635                                  .no_rdtsc_supported@:
  1636 00000EF0 C3                                      retn
  1637                                  
  1638                                  
  1639                                  ; =============== S U B R O U T I N E =======================================
  1640                                  
  1641                                  
  1642                                  mp3_huffman_decode:
  1643 00000EF1 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; in: ebx=granule, out: [sb_hybrid..]
  1644                                                                          ; timelog_start rdtsc_read_huffman
  1645 00000EF8 740E                                    jz      short .no_rdtsc_supported
  1646 00000EFA 0F31                                    rdtsc
  1647 00000EFC 2905[BC8C0000]                          sub     [rdtsc_read_huffman], eax
  1648 00000F02 1915[C08C0000]                          sbb     [rdtsc_read_huffman+4], edx
  1649                                  
  1650                                  .no_rdtsc_supported:
  1651 00000F08 8B4308                                  mov	eax, [ebx+8]    ; [ebx+$mp3gr_part2_3_end]
  1652 00000F0B C1E803                                  shr	eax, 3
  1653 00000F0E 0305[740A0100]                          add	eax, [mp3_bitstream_start]
  1654 00000F14 A3[AC350500]                            mov	[_@@coarse_end], eax
  1655 00000F19 31FF                                    xor	edi, edi
  1656 00000F1B C705[B4350500]-                         mov	dword [_@@rle_ptr], mp3_exponents
  1656 00000F21 [0C310100]         
  1657 00000F25 C705[B0350500]0000-                     mov	dword [_@rle_point], 0
  1657 00000F2D 0000               
  1658 00000F2F C705[9C350500]0000-                     mov	dword [_@@III], 0  ; i=0
  1658 00000F37 0000               
  1659                                  
  1660                                  .low_freq_lop_i:
  1661 00000F39 8B15[9C350500]                          mov     edx, [_@@III] ; for i=0 to 2
  1662                                                                          ; low frequencies (called big_values)...
  1663 00000F3F 8B449350                                mov     eax, [ebx+edx*4+80] ; [ebx+$mp3gr_region_size+edx*4]
  1664 00000F43 83F800                                  cmp     eax, 0
  1665 00000F46 0F84D9020000                            jz      .low_freq_next_i
  1666 00000F4C A3[A0350500]                            mov     [_@@JJJ], eax
  1667 00000F51 8B549338                                mov     edx, [ebx+edx*4+56] ; [ebx+$mp3gr_table_select+edx*4]
  1668                                                                          ; select vlc table
  1669 00000F55 0FB68412[5C960000]                      movzx   eax, byte [mp3_huff_data+edx*2] ; get huff.table number
  1670 00000F5D 83F800                                  cmp     eax, 0          ; huff.table
  1671 00000F60 7528                                    jnz     short .low_freq_nonzero
  1672 00000F62 51                                      push    ecx
  1673 00000F63 57                                      push    edi
  1674 00000F64 8DBCBBA0000000                          lea     edi, [ebx+edi*4+160] ; [ebx+$mp3gr_sb_hybrid+edi*4]
  1675 00000F6B 8B0D[A0350500]                          mov     ecx, [_@@JJJ]
  1676 00000F71 D1E1                                    shl     ecx, 1
  1677 00000F73 31C0                                    xor     eax, eax        ; when huff.table=0,
  1678                                                                          ; simply set NUM*2 entries to zero
  1679 00000F75 F3AB                                    rep stosd
  1680 00000F77 5F                                      pop     edi
  1681 00000F78 59                                      pop     ecx
  1682 00000F79 033D[A0350500]                          add     edi, [_@@JJJ] ; raise index accordingly (by num*2)
  1683 00000F7F 033D[A0350500]                          add     edi, [_@@JJJ]
  1684 00000F85 E99B020000                              jmp     .low_freq_next_i
  1685                                  
  1686                                  .low_freq_nonzero:
  1687 00000F8A A3[A8350500]                            mov     [_@@vlc_table], eax ; =1..15
  1688 00000F8F 83F80E                                  cmp     eax, 14         ; only table 14..15 have linbits
  1689 00000F92 0F83FA000000                            jnb     .with_linbits  ; so table 0..13 can use faster code...
  1690                                  
  1691                                  .low_freq_lop_j_small:
  1692 00000F98 3B35[AC350500]                          cmp     esi, [_@@coarse_end] ; loop @@JJJ times..
  1693 00000F9E 0F87CF000000                            ja      .small_near_end
  1694                                  
  1695                                  .small_not_end:
  1696 00000FA4 3B3D[B0350500]                          cmp     edi, [_@rle_point] ; @@get_runlength small
  1697 00000FAA 0F839E030000                            jnb     .rle_fetch_next_small
  1698                                  
  1699                                  .rle_back_small:
  1700 00000FB0 8B15[A8350500]                          mov     edx, [_@@vlc_table] ; get huffcode
  1701                                  
  1702                                  .get_child_lop:
  1703 00000FB6 8A0C95[8E350100]                        mov     cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode
  1704                                                                          ; in: edx=table, out: eax=data
  1705                                                                          ; bits (table size) (-7..-1)
  1706 00000FBD 668B1495[8C350100]                      mov     dx, word [huff_tree_buf+edx*4] ; code (child table)
  1707 00000FC5 89E8                                    mov     eax, ebp        ; mov eax,mp3_col32 ; peek bitstream
  1708 00000FC7 D3E8                                    shr     eax, cl
  1709 00000FC9 01C2                                    add     edx, eax
  1710 00000FCB 8A0C95[8E350100]                        mov     cl, [(huff_tree_buf+2)+edx*4] ; bits (of entry)
  1711 00000FD2 80F900                                  cmp     cl, 0
  1712 00000FD5 7823                                    js      short .got_child
  1713 00000FD7 0FB70495[8C350100]                      movzx   eax, word [huff_tree_buf+edx*4] ; return data value
  1714 00000FDF D3E5                                    shl     ebp, cl         ; shl mp3_col32,cl ; discard cl bits
  1715 00000FE1 28CD                                    sub     ch, cl          ; sub mp3_colNN,cl
  1716 00000FE3 7932                                    jns     short .got_done
  1717 00000FE5 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1718                                                                          ; mov cl,mp3_colNN ; byte ptr [mp3_numbits_collected]
  1719 00000FE7 80C510                                  add     ch, 16          ; byte ptr [mp3_numbits_collected]
  1720 00000FEA D3C5                                    rol     ebp, cl         ; dword ptr [mp3_collected_data]
  1721 00000FEC 668B2E                                  mov     bp, [esi]
  1722 00000FEF 83C602                                  add     esi, 2
  1723 00000FF2 66C1CD08                                ror     bp, 8           ; ror mp3_col16,8 ; endianess
  1724 00000FF6 D3CD                                    ror     ebp, cl         ; ror mp3_col32,cl ; dword ptr [mp3_collected_data]
  1725 00000FF8 EB1D                                    jmp     short .got_done
  1726                                  
  1727                                  .got_child:
  1728 00000FFA C1E509                                  shl     ebp, 9          ; shl mp3_col32,CHILD_BITS
  1729                                                                          ; discard 7 bits
  1730                                                                          ; (assuming that parents are always 7bit wide)
  1731 00000FFD 80ED09                                  sub     ch, 9
  1732 00001000 79B4                                    jns     short .get_child_lop
  1733 00001002 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1734 00001004 80C510                                  add     ch, 10h
  1735 00001007 D3C5                                    rol     ebp, cl
  1736 00001009 668B2E                                  mov     bp, [esi]
  1737 0000100C 83C602                                  add     esi, 2
  1738 0000100F 66C1CD08                                ror     bp, 8
  1739 00001013 D3CD                                    ror     ebp, cl
  1740 00001015 EB9F                                    jmp     short .get_child_lop
  1741                                  
  1742                                  .got_done:
  1743 00001017 50                                      push    eax
  1744 00001018 C1E804                                  shr     eax, 4          ; x
  1745 0000101B 7417                                    jz      short .this_sign ; @@getexpval 0 ; @@getexpval macro has_linbits
  1746                                                                          ; eax=0 (without sign) ; when x=0
  1747 0000101D 8B15[BC350500]                          mov     edx, [_@@rle_val_x_40h]
  1748 00001023 8B8482[F8780400]                        mov     eax, [mp3_expval_table+edx+eax*4]
  1749 0000102A FECD                                    dec     ch              ; mp3mac_get_bit_to_cy
  1750                                                                          ; ;jnc short @@this_sign
  1751                                                                          ; ;neg  eax
  1752 0000102C D1E5                                    shl     ebp, 1          ; dec mp3_colNN ; shl mp3_col32,1 ; cy=data
  1753 0000102E 19D2                                    sbb     edx, edx        ; cy=0,1 --> 0,FFFFFFFF
  1754 00001030 31D0                                    xor     eax, edx        ; invert if cy was 1 ; get sign (negate if sign=1)
  1755 00001032 29D0                                    sub     eax, edx        ; add 1 if cy was 1
  1756                                  
  1757                                  .this_sign:
  1758 00001034 8984BBA0000000                          mov     [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0]
  1759 0000103B 58                                      pop     eax
  1760 0000103C 83E00F                                  and     eax, 0Fh        ; y
  1761 0000103F 7417                                    jz      short .this_sign@ ; @@getexpval 0
  1762 00001041 8B15[BC350500]                          mov     edx, [_@@rle_val_x_40h]
  1763 00001047 8B8482[F8780400]                        mov     eax, [mp3_expval_table+edx+eax*4]
  1764 0000104E FECD                                    dec     ch
  1765 00001050 D1E5                                    shl     ebp, 1
  1766 00001052 19D2                                    sbb     edx, edx
  1767 00001054 31D0                                    xor     eax, edx
  1768 00001056 29D0                                    sub     eax, edx
  1769                                  
  1770                                  .this_sign@:
  1771 00001058 8984BBA4000000                          mov     [ebx+edi*4+164], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+4]
  1772 0000105F 83C702                                  add     edi, 2
  1773 00001062 FF0D[A0350500]                          dec     dword [_@@JJJ]
  1774 00001068 0F852AFFFFFF                            jnz     .low_freq_lop_j_small
  1775 0000106E E9B2010000                              jmp     .low_freq_next_i
  1776                                  
  1777                                  .small_near_end:
  1778 00001073 89F0                                    mov     eax, esi        ; mp3mac_bitstream_get_position
  1779 00001075 2B05[740A0100]                          sub     eax, [mp3_bitstream_start]
  1780 0000107B 0FBED5                                  movsx   edx, ch         ; mp3_colNN
  1781 0000107E F7DA                                    neg     edx
  1782 00001080 8D44C2F0                                lea     eax, [edx+eax*8-16]
  1783 00001084 3B4308                                  cmp     eax, [ebx+8]    ; [ebx+$mp3gr_part2_3_end]
  1784 00001087 0F8217FFFFFF                            jb      .small_not_end
  1785 0000108D E993010000                              jmp     .low_freq_next_i
  1786                                  
  1787                                  .with_linbits:
  1788 00001092 0FB68412[5D960000]                      movzx   eax, byte [(mp3_huff_data+1)+edx*2]
  1789 0000109A A3[A4350500]                            mov     [_@@linbits], eax
  1790                                  
  1791                                  .low_freq_lop_j:
  1792 0000109F 3B35[AC350500]                          cmp     esi, [_@@coarse_end] ; mp3mac_bitstream_get_position
  1793                                                                          ; loop @@JJJ times...
  1794 000010A5 0F8725030000                            ja      .lop_j_near_end
  1795                                  
  1796                                  .small_not_end@:
  1797 000010AB 3B3D[B0350500]                          cmp     edi, [_@rle_point] ; @@get_runlength small
  1798 000010B1 0F83C5020000                            jnb     .rle_fetch_next_full
  1799                                  
  1800                                  .rle_back_full:
  1801 000010B7 8B15[A8350500]                          mov     edx, [_@@vlc_table] ; get huffcode
  1802                                  
  1803                                  .get_child_lop@:
  1804 000010BD 8A0C95[8E350100]                        mov     cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode
  1805                                                                          ; in: edx=table, out: eax=data
  1806                                                                          ; bits (table size) (-7..-1)
  1807 000010C4 668B1495[8C350100]                      mov     dx, word [huff_tree_buf+edx*4] ; code (child table)
  1808 000010CC 89E8                                    mov     eax, ebp
  1809 000010CE D3E8                                    shr     eax, cl
  1810 000010D0 01C2                                    add     edx, eax
  1811 000010D2 8A0C95[8E350100]                        mov     cl, [(huff_tree_buf+2)+edx*4] ; bits (of entry)
  1812 000010D9 80F900                                  cmp     cl, 0
  1813 000010DC 7823                                    js      short .got_child@
  1814 000010DE 0FB70495[8C350100]                      movzx   eax, word [huff_tree_buf+edx*4] ; return data value
  1815 000010E6 D3E5                                    shl     ebp, cl         ; discard cl bits
  1816 000010E8 28CD                                    sub     ch, cl
  1817 000010EA 7932                                    jns     short .got_done@
  1818 000010EC 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1819 000010EE 80C510                                  add     ch, 10h
  1820 000010F1 D3C5                                    rol     ebp, cl
  1821 000010F3 668B2E                                  mov     bp, [esi]
  1822 000010F6 83C602                                  add     esi, 2
  1823 000010F9 66C1CD08                                ror     bp, 8
  1824 000010FD D3CD                                    ror     ebp, cl
  1825 000010FF EB1D                                    jmp     short .got_done@
  1826                                  
  1827                                  .got_child@:
  1828 00001101 C1E509                                  shl     ebp, 9
  1829 00001104 80ED09                                  sub     ch, 9
  1830 00001107 79B4                                    jns     short .get_child_lop@
  1831 00001109 88E9                                    mov     cl, ch
  1832 0000110B 80C510                                  add     ch, 10h
  1833 0000110E D3C5                                    rol     ebp, cl
  1834 00001110 668B2E                                  mov     bp, [esi]
  1835 00001113 83C602                                  add     esi, 2
  1836 00001116 66C1CD08                                ror     bp, 8
  1837 0000111A D3CD                                    ror     ebp, cl
  1838 0000111C EB9F                                    jmp     short .get_child_lop@
  1839                                  
  1840                                  .got_done@:
  1841 0000111E 50                                      push    eax
  1842 0000111F C1E804                                  shr     eax, 4          ; x
  1843 00001122 746F                                    jz      short .@this_sign ; @@getexpval 1
  1844 00001124 8B15[B8350500]                          mov     edx, [_@@rle_val]
  1845 0000112A 83F80F                                  cmp     eax, 15
  1846 0000112D 7250                                    jb      short .small    ; when x=1..14
  1847 0000112F 8A0D[A4350500]                          mov     cl, byte [_@@linbits] ; =0..13 ; when x=15, with linbits
  1848 00001135 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl ; value = 0..1FFFh
  1849 00001137 D3E5                                    shl     ebp, cl         ; mp3mac_collect_more
  1850 00001139 D3C0                                    rol     eax, cl
  1851 0000113B 31E8                                    xor     eax, ebp
  1852 0000113D 28CD                                    sub     ch, cl
  1853 0000113F 7913                                    jns     short .cont
  1854 00001141 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1855 00001143 80C510                                  add     ch, 16
  1856 00001146 D3C5                                    rol     ebp, cl
  1857 00001148 668B2E                                  mov     bp, [esi]
  1858 0000114B 83C602                                  add     esi, 2
  1859 0000114E 66C1CD08                                ror     bp, 8
  1860 00001152 D3CD                                    ror     ebp, cl
  1861                                  
  1862                                  .cont:
  1863 00001154 88D1                                    mov     cl, dl          ; exponent.lsb
  1864 00001156 80E103                                  and     cl, 3           ; exponent.lsb
  1865 00001159 C1EA02                                  shr     edx, 2          ; exponent.msb
  1866 0000115C 8D04853C000000                          lea     eax, [eax*4+60] ; (value+15)*4
  1867 00001163 08C8                                    or      al, cl          ; exponent.lsb+(value+15)*4
  1868 00001165 8A88[CCEF0100]                          mov     cl, [mp3_table_4_3_exp+eax]
  1869 0000116B 8B0485[08700200]                        mov     eax, [mp3_table_4_3_value+eax*4]
  1870 00001172 28D1                                    sub     cl, dl          ; sub exponent.msb
  1871 00001174 D3E8                                    shr     eax, cl
  1872 00001176 80F91F                                  cmp     cl, 31
  1873 00001179 760E                                    jbe     short .get_sign
  1874 0000117B 31C0                                    xor     eax, eax
  1875 0000117D EB0A                                    jmp     short .get_sign
  1876                                  
  1877                                  .small:
  1878 0000117F C1E206                                  shl     edx, 6          ; shl edx,4+2 ; mul16*4 ; when x<15 aka x=1..14
  1879 00001182 8B8482[F8780400]                        mov     eax, [mp3_expval_table+edx+eax*4]
  1880                                  
  1881                                  .get_sign:
  1882 00001189 FECD                                    dec     ch              ; mp3mac_get_bit_to_cy
  1883 0000118B D1E5                                    shl     ebp, 1
  1884 0000118D 19D2                                    sbb     edx, edx        ; get sign (negate if sign=1)
  1885 0000118F 31D0                                    xor     eax, edx
  1886 00001191 29D0                                    sub     eax, edx
  1887                                  
  1888                                  .@this_sign:
  1889 00001193 8984BBA0000000                          mov     [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0]
  1890 0000119A 58                                      pop     eax
  1891 0000119B 83E00F                                  and     eax, 0Fh        ; y
  1892 0000119E 746F                                    jz      short .@this_sign@ ; @@getexpval 1
  1893 000011A0 8B15[B8350500]                          mov     edx, [_@@rle_val]
  1894 000011A6 83F80F                                  cmp     eax, 0Fh
  1895 000011A9 7250                                    jb      short .small@
  1896 000011AB 8A0D[A4350500]                          mov     cl, byte [_@@linbits]
  1897 000011B1 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
  1898 000011B3 D3E5                                    shl     ebp, cl
  1899 000011B5 D3C0                                    rol     eax, cl
  1900 000011B7 31E8                                    xor     eax, ebp
  1901 000011B9 28CD                                    sub     ch, cl
  1902 000011BB 7913                                    jns     short .cont@
  1903 000011BD 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1904 000011BF 80C510                                  add     ch, 10h
  1905 000011C2 D3C5                                    rol     ebp, cl
  1906 000011C4 668B2E                                  mov     bp, [esi]
  1907 000011C7 83C602                                  add     esi, 2
  1908 000011CA 66C1CD08                                ror     bp, 8
  1909 000011CE D3CD                                    ror     ebp, cl
  1910                                  
  1911                                  .cont@:
  1912 000011D0 88D1                                    mov     cl, dl
  1913 000011D2 80E103                                  and     cl, 3
  1914 000011D5 C1EA02                                  shr     edx, 2
  1915 000011D8 8D04853C000000                          lea     eax, [eax*4+60]
  1916 000011DF 08C8                                    or      al, cl
  1917 000011E1 8A88[CCEF0100]                          mov     cl, [mp3_table_4_3_exp+eax]
  1918 000011E7 8B0485[08700200]                        mov     eax, [mp3_table_4_3_value+eax*4]
  1919 000011EE 28D1                                    sub     cl, dl
  1920 000011F0 D3E8                                    shr     eax, cl
  1921 000011F2 80F91F                                  cmp     cl, 31
  1922 000011F5 760E                                    jbe     short .get_sign@
  1923 000011F7 31C0                                    xor     eax, eax
  1924 000011F9 EB0A                                    jmp     short .get_sign@
  1925                                  
  1926                                  .small@:
  1927 000011FB C1E206                                  shl     edx, 6
  1928 000011FE 8B8482[F8780400]                        mov     eax, [mp3_expval_table+edx+eax*4]
  1929                                  
  1930                                  .get_sign@:                           
  1931 00001205 FECD                                    dec     ch              ; dec mp3_colNN
  1932 00001207 D1E5                                    shl     ebp, 1          ; shl mp3_col32,1 ; cy=data
  1933 00001209 19D2                                    sbb     edx, edx        ; cy=0,1 --> 0,FFFFFFFF
  1934 0000120B 31D0                                    xor     eax, edx        ; invert if cy was 1
  1935 0000120D 29D0                                    sub     eax, edx        ; add 1 if cy was 1
  1936                                  
  1937                                  .@this_sign@:
  1938 0000120F 8984BBA4000000                          mov	[ebx+edi*4+164], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+4]
  1939 00001216 83C702                                  add	edi, 2          ; next j
  1940 00001219 FF0D[A0350500]                          dec	dword [_@@JJJ]
  1941 0000121F 0F857AFEFFFF                            jnz	.low_freq_lop_j
  1942                                  
  1943                                  .low_freq_next_i:
  1944 00001225 FF05[9C350500]                          inc	dword [_@@III]	; next i
  1945 0000122B 833D[9C350500]03                        cmp	dword [_@@III], 3
  1946 00001232 0F8201FDFFFF                            jb	.low_freq_lop_i
  1947 00001238 81FF3C020000                            cmp	edi, 572	; aka 576-4 ; skip if less than 4 entries left
  1948 0000123E 0F87DA000000                            ja	.high_freq_done
  1949                                  
  1950                                  .high_freq_lop:
  1951 00001244 3B35[AC350500]                          cmp     esi, [_@@coarse_end]
  1952 0000124A 7629                                    jbe     short .high_freq_inrange
  1953 0000124C 89F0                                    mov     eax, esi        ; mp3mac_bitstream_get_position
  1954 0000124E 2B05[740A0100]                          sub     eax, [mp3_bitstream_start]
  1955 00001254 0FBED5                                  movsx   edx, ch         ; mp3_colNN
  1956 00001257 F7DA                                    neg     edx
  1957 00001259 8D44C2F0                                lea     eax, [edx+eax*8-16]
  1958 0000125D 3B4308                                  cmp     eax, [ebx+8]    ; [ebx+$mp3gr_part2_3_end] ; check end
  1959 00001260 7213                                    jb      short .high_freq_inrange ; not yet end
  1960 00001262 0F84B6000000                            jz      .high_freq_done ; okay, exact end
  1961 00001268 83FF04                                  cmp     edi, 4
  1962 0000126B 7203                                    jb      short .high_freq_cannot_stepback
  1963 0000126D 83EF04                                  sub     edi, 4          ; stepback, s_index-4 ; dst stepback
  1964                                  
  1965                                  .high_freq_cannot_stepback:
  1966 00001270 E9A9000000                              jmp     .high_freq_done
  1967                                  
  1968                                  .high_freq_inrange:
  1969 00001275 8B5324                                  mov     edx, [ebx+24h]  ; [ebx+$mp3gr_count1table_select]
  1970                                                                          ; get huffcode (quad_vlc)
  1971                                  
  1972                                  .get_child_lop@@:
  1973 00001278 8A0C95[8E350100]                        mov     cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode
  1974 0000127F 668B1495[8C350100]                      mov     dx, word [huff_tree_buf+edx*4]
  1975 00001287 89E8                                    mov     eax, ebp
  1976 00001289 D3E8                                    shr     eax, cl
  1977 0000128B 01C2                                    add     edx, eax
  1978 0000128D 8A0C95[8E350100]                        mov     cl, [(huff_tree_buf+2)+edx*4]
  1979 00001294 80F900                                  cmp     cl, 0
  1980 00001297 7823                                    js      short .got_child@@
  1981 00001299 0FB70495[8C350100]                      movzx   eax, word [huff_tree_buf+edx*4]
  1982 000012A1 D3E5                                    shl     ebp, cl
  1983 000012A3 28CD                                    sub     ch, cl
  1984 000012A5 7932                                    jns     short .got_done@@
  1985 000012A7 88E9                                    mov     cl, ch
  1986 000012A9 80C510                                  add     ch, 10h
  1987 000012AC D3C5                                    rol     ebp, cl
  1988 000012AE 668B2E                                  mov     bp, [esi]
  1989 000012B1 83C602                                  add     esi, 2
  1990 000012B4 66C1CD08                                ror     bp, 8
  1991 000012B8 D3CD                                    ror     ebp, cl
  1992 000012BA EB1D                                    jmp     short .got_done@@
  1993                                  
  1994                                  .got_child@@:
  1995 000012BC C1E509                                  shl     ebp, 9
  1996 000012BF 80ED09                                  sub     ch, 9
  1997 000012C2 79B4                                    jns     short .get_child_lop@@
  1998 000012C4 88E9                                    mov     cl, ch
  1999 000012C6 80C510                                  add     ch, 10h
  2000 000012C9 D3C5                                    rol     ebp, cl
  2001 000012CB 668B2E                                  mov     bp, [esi]
  2002 000012CE 83C602                                  add     esi, 2
  2003 000012D1 66C1CD08                                ror     bp, 8
  2004 000012D5 D3CD                                    ror     ebp, cl
  2005 000012D7 EB9F                                    jmp     short .get_child_lop@@
  2006                                  
  2007                                  .got_done@@:
  2008 000012D9 88C2                                    mov     dl, al          ; flags
  2009 000012DB C0E204                                  shl     dl, 4           ; flags, to upper 4bit
  2010 000012DE B604                                    mov     dh, 4           ; lopcount
  2011                                  
  2012                                  .high_freq_flag_lop:
  2013 000012E0 31C0                                    xor     eax, eax
  2014 000012E2 D0E2                                    shl     dl, 1           ; flag
  2015 000012E4 7320                                    jnb     short .high_freq_flag_this
  2016 000012E6 3B3D[B0350500]                          cmp     edi, [_@rle_point] ; @@get_runlength quads
  2017 000012EC 0F83B8000000                            jnb     .rle_fetch_next_quads
  2018                                  
  2019                                  .rle_back_quads:
  2020 000012F2 A1[B8350500]                            mov     eax, [_@@rle_val]
  2021 000012F7 8B0485[F8700400]                        mov     eax, [mp3_exp_table+eax*4] ; xlat and get sign
  2022 000012FE FECD                                    dec     ch              ; mp3mac_get_bit_to_cy
  2023 00001300 D1E5                                    shl     ebp, 1
  2024 00001302 7302                                    jnb     short .high_freq_flag_this ;
  2025                                                                          ; sbb edx, edx ; cy=0,1 --> 0,FFFFFFFF
  2026                                                                          ; xor eax, edx ; invert if cy was 1
  2027                                                                          ; sub eax, edx ; add 1 if cy was 1
  2028 00001304 F7D8                                    neg     eax
  2029                                  
  2030                                  .high_freq_flag_this:
  2031 00001306 8984BBA0000000                          mov     [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0]
  2032 0000130D 47                                      inc     edi
  2033 0000130E FECE                                    dec     dh
  2034 00001310 75CE                                    jnz     short .high_freq_flag_lop
  2035 00001312 81FF3C020000                            cmp     edi, 572        ; aka 576-4 ; loop while space for another 4 values
  2036 00001318 0F8626FFFFFF                            jbe     .high_freq_lop
  2037                                  
  2038                                  .high_freq_done:
  2039 0000131E 897B5C                                  mov     [ebx+92], edi   ; [ebx+$mp3gr_num_nonzero_hybrids]
  2040 00001321 51                                      push    ecx
  2041 00001322 B940020000                              mov     ecx, 576        ; end
  2042 00001327 29F9                                    sub     ecx, edi        ; remain = end-curr
  2043                                                                          ; zeropad remaining entries (can be 0 or 2 dwords,
  2044                                                                          ; or more. If above loop was aborted)
  2045 00001329 8DBCBBA0000000                          lea     edi, [ebx+edi*4+160] ; [ebx+$mp3gr_sb_hybrid+edi*4]
  2046 00001330 31C0                                    xor     eax, eax
  2047 00001332 F3AB                                    rep stosd
  2048 00001334 59                                      pop     ecx
  2049 00001335 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_read_huffman
  2050 0000133C 740E                                    jz      short .no_rdtsc_supported@
  2051 0000133E 0F31                                    rdtsc
  2052 00001340 0105[BC8C0000]                          add     [rdtsc_read_huffman], eax
  2053 00001346 1115[C08C0000]                          adc     [rdtsc_read_huffman+4], edx
  2054                                  
  2055                                  .no_rdtsc_supported@:
  2056 0000134C F8                                      clc                     ; out: cy=0=okay
  2057 0000134D C3                                      retn
  2058                                  
  2059                                  .rle_fetch_next_small:
  2060 0000134E A1[B4350500]                            mov     eax, [_@@rle_ptr] ; @@next_runlength small
  2061 00001353 8305[B4350500]04                        add     dword [_@@rle_ptr], 4
  2062 0000135A 8B00                                    mov     eax, [eax]
  2063 0000135C 6639C7                                  cmp     di, ax
  2064 0000135F 73ED                                    jnb     short .rle_fetch_next_small
  2065 00001361 66A3[B0350500]                          mov     word [_@rle_point], ax
  2066 00001367 C1E810                                  shr     eax, 16
  2067 0000136A A3[B8350500]                            mov     [_@@rle_val], eax
  2068 0000136F C1E006                                  shl     eax, 6
  2069 00001372 A3[BC350500]                            mov     [_@@rle_val_x_40h], eax
  2070 00001377 E934FCFFFF                              jmp     .rle_back_small
  2071                                  
  2072                                  .rle_fetch_next_full:
  2073 0000137C A1[B4350500]                            mov     eax, [_@@rle_ptr] ; @@next_runlength full
  2074 00001381 8305[B4350500]04                        add	dword [_@@rle_ptr], 4
  2075 00001388 8B00                                    mov     eax, [eax]
  2076 0000138A 6639C7                                  cmp     di, ax
  2077 0000138D 73ED                                    jnb     short .rle_fetch_next_full
  2078 0000138F 66A3[B0350500]                          mov     word [_@rle_point], ax
  2079 00001395 C1E810                                  shr     eax, 16
  2080 00001398 A3[B8350500]                            mov     [_@@rle_val], eax
  2081 0000139D C1E006                                  shl     eax, 6
  2082 000013A0 A3[BC350500]                            mov     [_@@rle_val_x_40h], eax
  2083 000013A5 E90DFDFFFF                              jmp     .rle_back_full
  2084                                  
  2085                                  .rle_fetch_next_quads:
  2086 000013AA A1[B4350500]                            mov	eax, [_@@rle_ptr] ; msw=val, lsw=point
  2087 000013AF 8305[B4350500]04                        add	dword [_@@rle_ptr], 4 ; 2+2
  2088 000013B6 8B00                                    mov	eax, [eax]
  2089 000013B8 6639C7                                  cmp	di, ax          ; needed if rle fetching was skipped
  2090 000013BB 73ED                                    jnb	short .rle_fetch_next_quads
  2091 000013BD 66A3[B0350500]                          mov	word [_@rle_point], ax
  2092 000013C3 C1E810                                  shr	eax, 16
  2093 000013C6 A3[B8350500]                            mov	[_@@rle_val], eax
  2094 000013CB E922FFFFFF                              jmp	.rle_back_quads
  2095                                  
  2096                                  .lop_j_near_end:
  2097 000013D0 89F0                                    mov     eax, esi
  2098 000013D2 2B05[740A0100]                          sub     eax, [mp3_bitstream_start]
  2099 000013D8 0FBED5                                  movsx   edx, ch
  2100 000013DB F7DA                                    neg     edx
  2101 000013DD 8D44C2F0                                lea     eax, [edx+eax*8-16]
  2102 000013E1 3B4308                                  cmp     eax, [ebx+8]
  2103 000013E4 0F82C1FCFFFF                            jb      .small_not_end@
  2104 000013EA E936FEFFFF                              jmp     .low_freq_next_i
  2105                                  
  2106                                  
  2107                                  ; =============== S U B R O U T I N E =======================================
  2108                                  
  2109                                  
  2110                                  mp3_compute_stereo:
  2111 000013EF 833D[98B30000]02                        cmp	dword [mp3_output_num_channels], 2 ; in: ebx=granule(s)
  2112 000013F6 7515                                    jnz	short .no_stereo
  2113 000013F8 833D[B4B30000]02                        cmp	dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO
  2114                                                                          ; only MS stereo
  2115 000013FF 740D                                    jz	short mp3_compute_ms_stereo
  2116 00001401 F705[B4B30000]0100-                     test	dword [mp3_hdr_mode_ext], 1 ; MODE_EXT_I_STEREO
  2116 00001409 0000               
  2117                                                                          ; intensity stereo (optionally with MS stereo)
  2118 0000140B 7567                                    jnz	short mp3_compute_i_stereo
  2119                                  
  2120                                  .no_stereo:
  2121 0000140D C3                                      retn
  2122                                  
  2123                                  mp3_compute_ms_stereo:
  2124 0000140E F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; ms_stereo is most commonly used
  2125                                                                          ; the 1/sqrt(2) normalization factor is included
  2126                                                                          ; in the global gain
  2127 00001415 740E                                    jz      short .no_rdtsc_supported ; timelog_start rdtsc_ms_stereo
  2128 00001417 0F31                                    rdtsc
  2129 00001419 2905[D48C0000]                          sub     [rdtsc_ms_stereo], eax
  2130 0000141F 1915[D88C0000]                          sbb     [rdtsc_ms_stereo+4], edx
  2131                                  
  2132                                  .no_rdtsc_supported:
  2133 00001425 8DBBE0130000                            lea     edi, [ebx+5088] ; [ebx+$mp3gr_sb_hybrid+$mp3gr_entrysiz*2]
  2134                                                                          ; for ch1 (2nd channel)
  2135 0000142B 8B4B5C                                  mov     ecx, [ebx+92]   ; [ebx+$mp3gr_num_nonzero_hybrids] ; ch0
  2136 0000142E 8B839C130000                            mov     eax, [ebx+5020] ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)] ; ch1
  2137 00001434 39C1                                    cmp     ecx, eax
  2138 00001436 7702                                    ja      short .this_len
  2139 00001438 89C1                                    mov     ecx, eax
  2140                                  
  2141                                  .this_len:
  2142 0000143A E320                                    jecxz   .ms_stereo_done
  2143 0000143C 894B5C                                  mov     [ebx+92], ecx   ; [ebx+$mp3gr_num_nonzero_hybrids] ; ch0
  2144 0000143F 898B9C130000                            mov     [ebx+5020], ecx ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)] ; ch1
  2145                                  
  2146                                  .ms_stereo_lop:
  2147 00001445 8B87C0ECFFFF                            mov     eax, [edi-4928] ; for i=0 to 576-1
  2148                                                                          ; [edi+@@ch0]
  2149                                                                          ; @@ch0 equ (-$mp3gr_entrysiz*2) ; granule for channel=0
  2150                                                                          ; tmp0 = granule.ch0.sb_hybrid[i]
  2151 0000144B 8B17                                    mov     edx, [edi]      ; @@ch1 equ 0 ; granule for channel=1
  2152                                                                          ; [edi+@@ch1]
  2153                                                                          ; tmp1 = granule.ch1.sb_hybrid[i]
  2154 0000144D 29D0                                    sub     eax, edx        ; tmp0 - tmp1
  2155 0000144F 8D1450                                  lea     edx, [eax+edx*2] ; tmp0 + tmp1
  2156 00001452 8997C0ECFFFF                            mov     [edi-4928], edx ; [edi+@@ch0]
  2157                                                                          ; granule.ch0.sb_hybrid[i] = tmp0 + tmp1
  2158 00001458 AB                                      stosd                   ; [edi+@@ch1]
  2159                                                                          ; granule.ch1.sb_hybrid[i] = tmp0 - tmp1
  2160 00001459 49                                      dec     ecx
  2161 0000145A 75E9                                    jnz     short .ms_stereo_lop
  2162                                  
  2163                                  .ms_stereo_done:
  2164 0000145C F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_ms_stereo
  2165 00001463 740E                                    jz      short .no_rdtsc_supported@
  2166 00001465 0F31                                    rdtsc
  2167 00001467 0105[D48C0000]                          add     [rdtsc_ms_stereo], eax
  2168 0000146D 1115[D88C0000]                          adc     [rdtsc_ms_stereo+4], edx
  2169                                  
  2170                                  .no_rdtsc_supported@:
  2171 00001473 C3                                      retn
  2172                                  
  2173                                  mp3_compute_i_stereo:
  2174 00001474 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_i_stereo
  2175 0000147B 740E                                    jz      short .no_rdtsc_supported@@@
  2176 0000147D 0F31                                    rdtsc
  2177 0000147F 2905[EC8C0000]                          sub     [rdtsc_i_stereo], eax
  2178 00001485 1915[F08C0000]                          sbb     [rdtsc_i_stereo+4], edx
  2179                                  
  2180                                  .no_rdtsc_supported@@@:
  2181 0000148B C7435C40020000                          mov     dword [ebx+92], 576 ; ch0
  2182                                                                          ; [ebx+$mp3gr_num_nonzero_hybrids]
  2183 00001492 C7839C130000400200-                     mov     dword [ebx+5020], 576 ; ch1
  2183 0000149B 00                 
  2184                                                                          ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)]
  2185 0000149C 8B4320                                  mov     eax, [ebx+32]   ; [ebx+$mp3gr_long_end]
  2186 0000149F A3[F8350500]                            mov     [_@@n_long_sfb], eax
  2187 000014A4 B80D000000                              mov     eax, 13         ; 39/3
  2188 000014A9 2B431C                                  sub     eax, [ebx+28]   ; [ebx+$mp3gr_short_start]
  2189 000014AC 8D0440                                  lea     eax, [eax+eax*2] ; mul3
  2190 000014AF A3[FC350500]                            mov     [_@@n_short_sfb], eax
  2191 000014B4 0305[F8350500]                          add     eax, [_@@n_long_sfb]
  2192 000014BA A3[00360500]                            mov     [_@@n_sfb], eax ;
  2193                                                                          ; n_sfb = gr->n_long_sfb + gr->n_short_sfb;
  2194 000014BF 803D[FC350500]00                        cmp     byte [_@@n_short_sfb], 0
  2195 000014C6 B801000000                              mov     eax, 1
  2196 000014CB 7405                                    jz      short .without_short
  2197 000014CD B803000000                              mov     eax, 3          ; max_blocks = gr->n_short_sfb ? 3 : 1;
  2198                                  
  2199                                  .without_short:
  2200 000014D2 A3[C4350500]                            mov     [_@@max_blocks], eax
  2201 000014D7 BF[CC350500]                            mov     edi, _@@sfb_array
  2202 000014DC A1[8CB30000]                            mov     eax, [mp3_hdr_sample_rate_index] ; bstab
  2203 000014E1 6BC016                                  imul    eax, 22
  2204 000014E4 8DB0[9C960000]                          lea     esi, [mp3_band_size_long+eax]
  2205 000014EA 8B0D[F8350500]                          mov     ecx, [_@@n_long_sfb]
  2206 000014F0 F3A4                                    rep movsb
  2207 000014F2 A1[8CB30000]                            mov     eax, [mp3_hdr_sample_rate_index]
  2208 000014F7 6BC00D                                  imul    eax, 13
  2209 000014FA 8DB0[6C970000]                          lea     esi, [mp3_band_size_short+eax] ; merge lieff-style
  2210 00001500 8B0D[FC350500]                          mov     ecx, [_@@n_short_sfb]
  2211 00001506 E30C                                    jecxz   .make_sfb_done ; doing that here is a bit slow,
  2212                                                                          ; it would be better to pre-compute
  2213                                                                          ; all merged-combinations
  2214 00001508 03731C                                  add     esi, [ebx+28]   ; [ebx+$mp3gr_short_start]
  2215                                  
  2216                                  .make_sfb_lop:
  2217 0000150B AC                                      lodsb
  2218 0000150C AA                                      stosb
  2219 0000150D AA                                      stosb
  2220 0000150E AA                                      stosb
  2221 0000150F 83E903                                  sub     ecx, 3
  2222 00001512 75F7                                    jnz     short .make_sfb_lop
  2223                                  
  2224                                  .make_sfb_done:
  2225 00001514 E888000000                              call    _@@find_top_bands ;
  2226                                                                          ; L3_stereo_top_band(left+576,gr->sfbtab,n_sfb,max_band);
  2227 00001519 803D[F8350500]00                        cmp     byte [_@@n_long_sfb], 0
  2228 00001520 7420                                    jz      short .without_long
  2229 00001522 A1[C0350500]                            mov     eax, dword [_@@max_bands]
  2230 00001527 38C4                                    cmp     ah, al          ; if (gr->n_long_sfb)
  2231 00001529 7F02                                    jg      short .not_max1 ; max_band[0] = max_band[1] = max_band[2] = MINIMP3_MAX
  2232                                                                          ; (MINIMP3_MAX(max_band[0], max_band[1]), max_band[2]);
  2233 0000152B 88C4                                    mov     ah, al
  2234                                  
  2235                                  .not_max1:
  2236 0000152D C1E808                                  shr     eax, 8
  2237 00001530 38C4                                    cmp     ah, al
  2238 00001532 7F02                                    jg      short .not_max2
  2239 00001534 88C4                                    mov     ah, al
  2240                                  
  2241                                  .not_max2:
  2242 00001536 88E0                                    mov     al, ah
  2243 00001538 C1E008                                  shl     eax, 8
  2244 0000153B 88E0                                    mov     al, ah
  2245 0000153D A3[C0350500]                            mov     dword [_@@max_bands], eax
  2246                                  
  2247                                  .without_long:
  2248 00001542 31ED                                    xor     ebp, ebp        ; blk
  2249                                  
  2250                                  .adjust_last_prev_lop:
  2251 00001544 8B15[00360500]                          mov     edx, [_@@n_sfb]
  2252 0000154A 2B15[C4350500]                          sub     edx, [_@@max_blocks] ; itop = n_sfb - max_blocks + blk
  2253 00001550 01EA                                    add     edx, ebp
  2254 00001552 89D1                                    mov     ecx, edx
  2255 00001554 2B0D[C4350500]                          sub     ecx, [_@@max_blocks] ; prev = itop - max_blocks;
  2256 0000155A A1[B8B30000]                            mov     eax, [mp3_hdr_flag_lsf]
  2257 0000155F 8D0440                                  lea     eax, [eax+eax*2] ; 0,1 --> 0,3
  2258                                                                          ; default_pos = HDR_TEST_MPEG1(hdr) ? 3
  2259 00001562 3403                                    xor     al, 3           ; 0,3 --> 3,0
  2260 00001564 363A8D[C0350500]                        cmp     cl, [ss:_@@max_bands+ebp]
  2261 0000156B 7E07                                    jle     short .use_default_pos ; ist_pos[itop] = max_band[blk] >=
  2262                                                                          ; prev ? default_pos : ist_pos[prev]
  2263 0000156D 8A840BB0130000                          mov     al, [ebx+ecx+5040] ; [ebx+@@right+$mp3gr_scale_factors+ecx]
  2264                                  
  2265                                  .use_default_pos:
  2266 00001574 888413B0130000                          mov     [ebx+edx+5040], al ; [ebx+@@right+$mp3gr_scale_factors+edx]
  2267 0000157B 45                                      inc     ebp             ; blk
  2268 0000157C 3B2D[C4350500]                          cmp     ebp, [_@@max_blocks]
  2269 00001582 72C0                                    jb      short .adjust_last_prev_lop
  2270 00001584 E867000000                              call    _@@apply_i_stereo
  2271 00001589 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_i_stereo
  2272 00001590 740E                                    jz      short .no_rdtsc_supported@@@@
  2273 00001592 0F31                                    rdtsc
  2274 00001594 0105[EC8C0000]                          add     [rdtsc_i_stereo], eax
  2275 0000159A 1115[F08C0000]                          adc     [rdtsc_i_stereo+4], edx
  2276                                  
  2277                                  .no_rdtsc_supported@@@@:
  2278 000015A0 C3                                      retn
  2279                                  
  2280                                  
  2281                                  ; =============== S U B R O U T I N E =======================================
  2282                                  
  2283                                  
  2284                                  _@@find_top_bands:
  2285 000015A1 C705[C0350500]FFFF-                     mov     dword [_@@max_bands], 0FFFFFFh ; set maxband[0..2]=(-1)
  2285 000015A9 FF00               
  2286 000015AB 8DB3E0130000                            lea     esi, [ebx+5088] ; [ebx+@@right+$mp3gr_sb_hybrid]
  2287 000015B1 31D2                                    xor     edx, edx
  2288                                  
  2289                                  .find_top_lop_iii:                    
  2290 000015B3 31C9                                    xor     ecx, ecx        ; for (i = 0; i < nbands; i++)
  2291                                  
  2292                                  .find_top_lop_kkk:                    
  2293 000015B5 8B048E                                  mov     eax, [esi+ecx*4] ; for (k = 0; k < sfb[i]; k += 2)
  2294 000015B8 0B448E04                                or      eax, [esi+ecx*4+4]
  2295 000015BC 750D                                    jnz     short .found_nonzero
  2296 000015BE 83C102                                  add     ecx, 2
  2297 000015C1 3A8A[CC350500]                          cmp     cl, [_@@sfb_array+edx]
  2298 000015C7 72EC                                    jb      short .find_top_lop_kkk
  2299 000015C9 EB11                                    jmp     short .find_top_next
  2300                                  
  2301                                  .found_nonzero:
  2302 000015CB 89D0                                    mov     eax, edx
  2303 000015CD F635[D6A00000]                          div     byte [_@@const_3]
  2304 000015D3 0FB6C4                                  movzx   eax, ah         ; remainder (mod 3)
  2305 000015D6 8890[C0350500]                          mov     [_@@max_bands+eax], dl ; max_bands[0..2]=i
  2306                                  
  2307                                  .find_top_next:
  2308 000015DC 0FB682[CC350500]                        movzx   eax, byte [_@@sfb_array+edx]
  2309 000015E3 8D3486                                  lea     esi, [esi+eax*4]
  2310 000015E6 42                                      inc     edx             ; next
  2311 000015E7 3B15[00360500]                          cmp     edx, [_@@n_sfb]
  2312 000015ED 72C4                                    jb      short .find_top_lop_iii
  2313 000015EF C3                                      retn
  2314                                  
  2315                                  ; =============== S U B R O U T I N E =======================================
  2316                                  
  2317                                  
  2318                                  _@@apply_i_stereo:
  2319 000015F0 B8[5C9A0000]                            mov     eax, mp3_is_table_normal
  2320 000015F5 B907000000                              mov     ecx, 7
  2321 000015FA 833D[B8B30000]00                        cmp     dword [mp3_hdr_flag_lsf], 0
  2322 00001601 7425                                    jz      short .this_lsf
  2323 00001603 8B8354130000                            mov     eax, [ebx+4948] ; [ebx+@@right+$mp3gr_scalefac_compress]
  2324 00001609 83E001                                  and     eax, 1          ; bit0
  2325 0000160C F705[B4B30000]0200-                     test    dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO
  2325 00001614 0000               
  2326 00001616 7403                                    jz      short .no_ms
  2327 00001618 83C802                                  or      eax, 2          ; bit1=mul_1.414
  2328                                  
  2329                                  .no_ms:
  2330 0000161B C1E009                                  shl     eax, 9          ; N*40h*2*4
  2331 0000161E 05[78FD0400]                            add     eax, mp3_is_table_lsf
  2332 00001623 B940000000                              mov     ecx, 64         ; max (must be below NO_INTENSITY_FLAG)
  2333                                  
  2334                                  .this_lsf:
  2335 00001628 890D[C8350500]                          mov     [_@@max_pos], ecx ; 7 or 64
  2336 0000162E A3[F4350500]                            mov     [_@@is_tab], eax ; table
  2337 00001633 8DB3A0000000                            lea     esi, [ebx+160]  ; [ebx+$mp3gr_sb_hybrid]
  2338 00001639 31C9                                    xor     ecx, ecx        ; iii ; for (i = 0; sfb[i]; i++)
  2339                                  
  2340                                  .apply_lop_i:
  2341 0000163B 0FB6A9[CC350500]                        movzx   ebp, byte [_@@sfb_array+ecx] ; if ((int)i > max_band[i % 3]
  2342                                                                          ; && ipos < max_pos)
  2343 00001642 89C8                                    mov     eax, ecx
  2344 00001644 F635[D6A00000]                          div     byte [_@@const_3] ; max_band[i % 3]
  2345 0000164A 0FB6C4                                  movzx   eax, ah         ; remainder (mod 3)
  2346 0000164D 3A88[C0350500]                          cmp     cl, [_@@max_bands+eax] ; iii,max_bands[0..2];
  2347 00001653 7E38                                    jle     short .apply_ms_stereo
  2348 00001655 0FB6BC0BB0130000                        movzx   edi, byte [ebx+ecx+5040] ; [ebx+@@right+$mp3gr_scale_factors+ecx]
  2349                                                                          ; @@right = $mp3gr_entrysiz*2 = 4928
  2350                                                                          ; $mp3gr_scale_factors = 112
  2351 0000165D 3B3D[C8350500]                          cmp     edi, [_@@max_pos] ; check ipos
  2352 00001663 7328                                    jnb     short .apply_ms_stereo
  2353 00001665 C1E703                                  shl     edi, 3          ; mul 2*4
  2354 00001668 033D[F4350500]                          add     edi, [_@@is_tab]
  2355                                  
  2356                                  .apply_pan_lop:
  2357 0000166E 8B06                                    mov     eax, [esi]      ; tmp = granule.ch0.sb_hybrid
  2358 00001670 C1E002                                  shl     eax, 2
  2359 00001673 F76F04                                  imul    dword [edi+4] ; v1
  2360 00001676 899640130000                            mov     [esi+4928], edx ; [esi+@@right]
  2361                                                                          ; granule.ch1.sb_hybrid = tmp*v1
  2362 0000167C 8B06                                    mov     eax, [esi]      ; tmp = granule.ch0.sb_hybrid
  2363 0000167E C1E002                                  shl     eax, 2
  2364 00001681 F72F                                    imul    dword [edi] ; v0
  2365 00001683 8916                                    mov     [esi], edx      ; granule.ch0.sb_hybrid = tmp*v0
  2366 00001685 83C604                                  add     esi, 4
  2367 00001688 4D                                      dec     ebp
  2368 00001689 75E3                                    jnz     short .apply_pan_lop
  2369 0000168B EB2C                                    jmp     short .apply_next
  2370                                  
  2371                                  .apply_ms_stereo:
  2372 0000168D F705[B4B30000]0200-                     test	dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO
  2372 00001695 0000               
  2373 00001697 741D                                    jz	short .apply_none
  2374                                  
  2375                                  .ms_stereo_lop:
  2376 00001699 8B06                                    mov     eax, [esi]      ; tmp0 = granule.ch0.sb_hybrid[i]
  2377 0000169B 8B9640130000                            mov     edx, [esi+4928] ; [esi+@@right]
  2378                                                                          ; tmp1 = granule.ch1.sb_hybrid[i]
  2379 000016A1 29D0                                    sub     eax, edx        ; tmp0 - tmp1
  2380 000016A3 8D1450                                  lea     edx, [eax+edx*2] ; tmp0 + tmp1
  2381 000016A6 8916                                    mov     [esi], edx      ; granule.ch0.sb_hybrid[i] = tmp0 + tmp1
  2382 000016A8 898640130000                            mov     [esi+4928], eax ; [esi+@@right]
  2383                                                                          ; granule.ch1.sb_hybrid[i] = tmp0 - tmp1
  2384 000016AE 83C604                                  add     esi, 4
  2385 000016B1 4D                                      dec     ebp
  2386 000016B2 75E5                                    jnz     short .ms_stereo_lop
  2387 000016B4 EB03                                    jmp     short .apply_next
  2388                                  
  2389                                  .apply_none:
  2390 000016B6 8D34AE                                  lea     esi, [esi+ebp*4] ; skip, keep unchanged
  2391                                  
  2392                                  .apply_next:
  2393 000016B9 41                                      inc     ecx             ; iii
  2394 000016BA 3B0D[00360500]                          cmp     ecx, [_@@n_sfb]
  2395 000016C0 0F8275FFFFFF                            jb      .apply_lop_i   ; next
  2396 000016C6 C3                                      retn
  2397                                  
  2398                                  ; =============== S U B R O U T I N E =======================================
  2399                                  
  2400                                  
  2401                                  mp3_reorder_block:
  2402 000016C7 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_reorder
  2403 000016CE 740E                                    jz      short .no_rdtsc_supported
  2404 000016D0 0F31                                    rdtsc
  2405 000016D2 2905[048D0000]                          sub     [rdtsc_reorder], eax
  2406 000016D8 1915[088D0000]                          sbb     [rdtsc_reorder+4], edx
  2407                                  
  2408                                  .no_rdtsc_supported:
  2409 000016DE 807B2C02                                cmp	byte [ebx+44], 2 ; ebx+$mp3gr_block_type] ; only for type 2
  2410 000016E2 7565                                    jnz	short .no_reorder
  2411 000016E4 8DB3A0000000                            lea	esi, [ebx+160]  ; [ebx+$mp3gr_sb_hybrid] ; ptr+0
  2412 000016EA 807B3000                                cmp	byte [ebx+48], 0 ; [ebx+$mp3gr_switch_point]
  2413 000016EE 7412                                    jz	short .this_src
  2414 000016F0 81C690000000                            add	esi, 144        ; 36*4 ; ptr+36*4
  2415 000016F6 833D[8CB30000]08                        cmp	dword [mp3_hdr_sample_rate_index], 8
  2416 000016FD 7503                                    jnz	short .this_src
  2417 000016FF 83C630                                  add	esi, 48         ; 12*4 ; additionally to above 36*4 ; ptr+48*4
  2418                                  
  2419                                  .this_src:
  2420 00001702 8B531C                                  mov     edx, [ebx+28]   ; [ebx+$mp3gr_short_start] ; can be 13
  2421 00001705 83FA0D                                  cmp     edx, 13
  2422 00001708 733F                                    jnb     short .no_reorder
  2423 0000170A C7435C40020000                          mov     dword [ebx+92], 576 ; [ebx+$mp3gr_num_nonzero_hybrids]
  2424                                  
  2425                                  .outer_lop:
  2426 00001711 A1[8CB30000]                            mov     eax, [mp3_hdr_sample_rate_index]
  2427 00001716 6BC00D                                  imul    eax, 13         ; X*13
  2428 00001719 0FB68C10[6C970000]                      movzx   ecx, byte [mp3_band_size_short+eax+edx] ; [X*13+Y]
  2429 00001721 BF[04360500]                            mov     edi, _@@tmp
  2430 00001726 60                                      pusha
  2431 00001727 89CA                                    mov     edx, ecx        ; step=len (4..44) ; copy LEN*3 dwords to tmp
  2432                                  
  2433                                  .inner_lop:
  2434 00001729 8B06                                    mov     eax, [esi]
  2435 0000172B AB                                      stosd
  2436 0000172C 8B0496                                  mov     eax, [esi+edx*4] ; copy 3 dwords
  2437 0000172F AB                                      stosd
  2438 00001730 8B04D6                                  mov     eax, [esi+edx*8]
  2439 00001733 AB                                      stosd
  2440 00001734 83C604                                  add     esi, 4
  2441 00001737 E2F0                                    loop    .inner_lop
  2442 00001739 61                                      popa
  2443 0000173A 8D0C49                                  lea     ecx, [ecx+ecx*2] ; len*3
  2444 0000173D 87FE                                    xchg    esi, edi        ; copy LEN*3 dwords back from tmp
  2445 0000173F F3A5                                    rep movsd
  2446 00001741 87FE                                    xchg    esi, edi
  2447 00001743 42                                      inc     edx
  2448 00001744 83FA0D                                  cmp     edx, 13
  2449 00001747 72C8                                    jb      short .outer_lop ; next
  2450                                  
  2451                                  .no_reorder:
  2452 00001749 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  2453 00001750 740E                                    jz      short .no_rdtsc_supported@ ; timelog_end rdtsc_reorder
  2454 00001752 0F31                                    rdtsc
  2455 00001754 0105[048D0000]                          add     [rdtsc_reorder], eax
  2456 0000175A 1115[088D0000]                          adc     [rdtsc_reorder+4], edx
  2457                                  
  2458                                  .no_rdtsc_supported@:
  2459 00001760 C3                                      retn
  2460                                  
  2461                                  
  2462                                  ; =============== S U B R O U T I N E =======================================
  2463                                  
  2464                                  
  2465                                  mp3_compute_antialias:
  2466 00001761 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; in: ebx=granule
  2467 00001768 740E                                    jz      short .no_rdtsc_supported ; timelog_start rdtsc_antialias
  2468 0000176A 0F31                                    rdtsc
  2469 0000176C 2905[1C8D0000]                          sub     [rdtsc_antialias], eax
  2470 00001772 1915[208D0000]                          sbb     [rdtsc_antialias+4], edx
  2471                                  
  2472                                  .no_rdtsc_supported:
  2473 00001778 8B435C                                  mov     eax, [ebx+92]   ; [ebx+$mp3gr_num_nonzero_hybrids]
  2474 0000177B 83C008                                  add     eax, 8          ; 9-1 ; 0..576+8
  2475 0000177E 31D2                                    xor     edx, edx
  2476 00001780 B909000000                              mov     ecx, 9
  2477 00001785 F7F1                                    div     ecx             ; (num/9) ; 0..64
  2478 00001787 894360                                  mov     [ebx+60h], eax
  2479 0000178A D1E8                                    shr     eax, 1          ; (num/18) ; 0..32
  2480 0000178C 0F84B8010000                            jz      .no_antialias  ; 0 (when num/9 = 0..1)
  2481 00001792 89C1                                    mov     ecx, eax        ; 1..32
  2482 00001794 C1E805                                  shr     eax, 5          ; 0..1
  2483 00001797 29C1                                    sub     ecx, eax        ; 1..31 ; len excluding zeropadding
  2484 00001799 807B2C02                                cmp     byte [ebx+44], 2 ; [ebx+$mp3gr_block_type]
  2485 0000179D 750F                                    jnz     short .this_len ; antialias only "long" bands
  2486 0000179F 807B3000                                cmp     byte [ebx+48], 0 ; [ebx+$mp3gr_switch_point]
  2487 000017A3 0F84A1010000                            jz      .no_antialias
  2488 000017A9 B901000000                              mov     ecx, 1          ; check this for 8000Hz case
  2489                                  
  2490                                  .this_len:
  2491 000017AE 8D440901                                lea     eax, [1+ecx*2]
  2492 000017B2 394360                                  cmp     [ebx+96], eax   ; [ebx+$mp3gr_num_nonzero_hybrids_div9]
  2493 000017B5 7703                                    ja      short .is_bigger
  2494 000017B7 894360                                  mov     [ebx+96], eax   ; opdate highest
  2495                                                                          ; (nonzero required for l3-si_huff.bit)
  2496                                  
  2497                                  .is_bigger:
  2498 000017BA 53                                      push    ebx
  2499 000017BB 8D9BA0000000                            lea     ebx, [ebx+160]  ; [ebx+$mp3gr_sb_hybrid]
  2500                                  
  2501                                  .lop:
  2502 000017C1 83C348                                  add     ebx, 72         ; 18*4
  2503 000017C4 8B73FC                                  mov     esi, [ebx-4]    ; IRP nn,0,1,2,3,4,5,6,7 ; INT_AA(nn=0..7)
  2504 000017C7 8B3B                                    mov     edi, [ebx]      ; @@def_csa macro nn,cs,ca
  2505                                                                          ;   mp3_csa_&nn&_cs equ cs
  2506                                                                          ;   mp3_csa_&nn&_ca equ ca
  2507                                                                          ;  endm
  2508                                                                          ; constants for mp3_csa_table
  2509 000017C9 C1E602                                  shl     esi, 2          ; tmp0 = ptr[-nn-1]*4
  2510 000017CC C1E702                                  shl     edi, 2          ; tmp1 = ptr[+nn]*4
  2511 000017CF 8D043E                                  lea     eax, [esi+edi]  ; tmp2 = tmp0+tmp1
  2512 000017D2 BD032AE136                              mov     ebp, 36E12A03h  ; @@def_csa 0,36E12A03h,-20ED7F9Ah  ;-0.6
  2513                                                                          ; mp3_csa_&nn&_cs
  2514 000017D7 F7ED                                    imul    ebp             ; tmp2 = (tmp2*csa[0])
  2515 000017D9 89D5                                    mov     ebp, edx
  2516 000017DB B8635631A8                              mov     eax, -57CEA99Dh ; mp3_csa_&nn&_ca-mp3_csa_&nn&_cs
  2517 000017E0 F7EE                                    imul    esi             ; tmp0 = (tmp2+(tmp0*csa[3]))
  2518 000017E2 01EA                                    add     edx, ebp
  2519 000017E4 8913                                    mov     [ebx], edx      ; [ebx+(nn)*4]
  2520 000017E6 B869AAF315                              mov     eax, 15F3AA69h  ; mp3_csa_&nn&_ca+mp3_csa_&nn&_cs
  2521 000017EB F7EF                                    imul    edi             ; tmp1 = (tmp2-(tmp1*csa[2]))
  2522 000017ED 29D5                                    sub     ebp, edx
  2523 000017EF 896BFC                                  mov     [ebx-4], ebp    ; [ebx-(nn+1)*4]
  2524 000017F2 8B73F8                                  mov     esi, [ebx-8]
  2525 000017F5 8B7B04                                  mov     edi, [ebx+4]
  2526 000017F8 C1E602                                  shl     esi, 2
  2527 000017FB C1E702                                  shl     edi, 2
  2528 000017FE 8D043E                                  lea     eax, [esi+edi]
  2529 00001801 BDFD756E38                              mov     ebp, 386E75FDh  ; @@def_csa 1,386E75FDh,-1E30DB48h  ;-0.535
  2530 00001806 F7ED                                    imul    ebp
  2531 00001808 89D5                                    mov     ebp, edx
  2532 0000180A B8BBAE60A9                              mov     eax, -569F5145h
  2533 0000180F F7EE                                    imul    esi
  2534 00001811 01EA                                    add     edx, ebp
  2535 00001813 895304                                  mov     [ebx+4], edx    ; [ebx+(nn)*4]
  2536 00001816 B8B59A3D1A                              mov     eax, 1A3D9AB5h
  2537 0000181B F7EF                                    imul    edi
  2538 0000181D 29D5                                    sub     ebp, edx
  2539 0000181F 896BF8                                  mov     [ebx-8], ebp    ; [ebx-(nn+1)*4]
  2540 00001822 8B73F4                                  mov     esi, [ebx-12]
  2541 00001825 8B7B08                                  mov     edi, [ebx+8]
  2542 00001828 C1E602                                  shl     esi, 2
  2543 0000182B C1E702                                  shl     edi, 2
  2544 0000182E 8D043E                                  lea     eax, [esi+edi]
  2545 00001831 BD3EB7C63C                              mov     ebp, 3CC6B73Eh  ;  @@def_csa 2,3CC6B73Eh,-140E604Fh  ;-0.33
  2546 00001836 F7ED                                    imul    ebp
  2547 00001838 89D5                                    mov     ebp, edx
  2548 0000183A B873E82AAF                              mov     eax, -50D5178Dh
  2549 0000183F F7EE                                    imul    esi
  2550 00001841 01EA                                    add     edx, ebp
  2551 00001843 895308                                  mov     [ebx+8], edx    ; [ebx+(nn)*4]
  2552 00001846 B8EF56B828                              mov     eax, 28B856EFh
  2553 0000184B F7EF                                    imul    edi
  2554 0000184D 29D5                                    sub     ebp, edx
  2555 0000184F 896BF4                                  mov     [ebx-12], ebp   ; [ebx-(nn+1)*4]
  2556 00001852 8B73F0                                  mov     esi, [ebx-16]
  2557 00001855 8B7B0C                                  mov     edi, [ebx+12]
  2558 00001858 C1E602                                  shl     esi, 2
  2559 0000185B C1E702                                  shl     edi, 2
  2560 0000185E 8D043E                                  lea     eax, [esi+edi]
  2561 00001861 BD55A0EE3E                              mov     ebp, 3EEEA055h  ; @@def_csa 3,3EEEA055h,-0BA47742h  ;-0.185
  2562 00001866 F7ED                                    imul    ebp
  2563 00001868 89D5                                    mov     ebp, edx
  2564 0000186A B869E86CB5                              mov     eax, -4A931797h
  2565 0000186F F7EE                                    imul    esi
  2566 00001871 01EA                                    add     edx, ebp
  2567 00001873 89530C                                  mov     [ebx+12], edx   ; [ebx+(nn)*4]
  2568 00001876 B813294A33                              mov     eax, 334A2913h
  2569 0000187B F7EF                                    imul    edi
  2570 0000187D 29D5                                    sub     ebp, edx
  2571 0000187F 896BF0                                  mov     [ebx-16], ebp   ; [ebx-(nn+1)*4]
  2572 00001882 8B73EC                                  mov     esi, [ebx-20]   ; ebx-(nn+1)*4] ; tmp0 = ptr[-nn-1]
  2573 00001885 8B7B10                                  mov     edi, [ebx+16]   ; [ebx+(nn)*4] ; tmp1 = ptr[+nn]
  2574 00001888 C1E602                                  shl     esi, 2
  2575 0000188B C1E702                                  shl     edi, 2
  2576 0000188E 8D043E                                  lea     eax, [esi+edi]  ; tmp2 = tmp0+tmp1
  2577 00001891 BD5C90B63F                              mov     ebp, 3FB6905Ch  ; @@def_csa 4,3FB6905Ch,-060D80E9h  ;-0.095
  2578 00001896 F7ED                                    imul    ebp             ; tmp2 = (tmp2*csa[0])
  2579 00001898 89D5                                    mov     ebp, edx
  2580 0000189A B8BBEE3BBA                              mov     eax, -45C41145h
  2581 0000189F F7EE                                    imul    esi             ; tmp0 = (tmp2+(tmp0*csa[3]))
  2582 000018A1 01EA                                    add     edx, ebp
  2583 000018A3 895310                                  mov     [ebx+16], edx   ; [ebx+(nn)*4]
  2584 000018A6 B8730FA939                              mov     eax, 39A90F73h
  2585 000018AB F7EF                                    imul    edi             ; tmp1 = (tmp2-(tmp1*csa[2]))
  2586 000018AD 29D5                                    sub     ebp, edx
  2587 000018AF 896BEC                                  mov     [ebx-20], ebp   ; [ebx-(nn+1)*4]
  2588 000018B2 8B73E8                                  mov     esi, [ebx-24]
  2589 000018B5 8B7B14                                  mov     edi, [ebx+20]
  2590 000018B8 C1E602                                  shl     esi, 2
  2591 000018BB C1E702                                  shl     edi, 2
  2592 000018BE 8D043E                                  lea     eax, [esi+edi]
  2593 000018C1 BD213FF23F                              mov     ebp, 3FF23F21h  ; @@def_csa 5,3FF23F21h,-029F2E1Bh  ;-0.041
  2594 000018C6 F7ED                                    imul    ebp
  2595 000018C8 89D5                                    mov     ebp, edx
  2596 000018CA B8C4926EBD                              mov     eax, -42916D3Ch
  2597 000018CF F7EE                                    imul    esi
  2598 000018D1 01EA                                    add     edx, ebp
  2599 000018D3 895314                                  mov     [ebx+20], edx   ; [ebx+(nn)*4]
  2600 000018D6 B80611533D                              mov     eax, 3D531106h
  2601 000018DB F7EF                                    imul    edi
  2602 000018DD 29D5                                    sub     ebp, edx
  2603 000018DF 896BE8                                  mov     [ebx-24], ebp   ; [ebx-(nn+1)*4]
  2604 000018E2 8B73E4                                  mov     esi, [ebx-28]
  2605 000018E5 8B7B18                                  mov     edi, [ebx+24]
  2606 000018E8 C1E602                                  shl     esi, 2
  2607 000018EB C1E702                                  shl     edi, 2
  2608 000018EE 8D043E                                  lea     eax, [esi+edi]
  2609 000018F1 BD3259FE3F                              mov     ebp, 3FFE5932h  ; @@def_csa 6,3FFE5932h,-00E8A11Ch  ;-0.0142
  2610 000018F6 F7ED                                    imul    ebp
  2611 000018F8 89D5                                    mov     ebp, edx
  2612 000018FA B8B20519BF                              mov     eax, -40E6FA4Eh
  2613 000018FF F7EE                                    imul    esi
  2614 00001901 01EA                                    add     edx, ebp
  2615 00001903 895318                                  mov     [ebx+24], edx   ; [ebx+(nn)*4]
  2616 00001906 B816B8153F                              mov     eax, 3F15B816h
  2617 0000190B F7EF                                    imul    edi
  2618 0000190D 29D5                                    sub     ebp, edx
  2619 0000190F 896BE4                                  mov     [ebx-28], ebp   ; [ebx-(nn+1)*4]
  2620 00001912 8B73E0                                  mov     esi, [ebx-32]
  2621 00001915 8B7B1C                                  mov     edi, [ebx+28]
  2622 00001918 C1E602                                  shl     esi, 2
  2623 0000191B C1E702                                  shl     edi, 2
  2624 0000191E 8D043E                                  lea     eax, [esi+edi]
  2625 00001921 BD4BE3FF3F                              mov     ebp, 3FFFE34Bh  ; @@def_csa 7,3FFFE34Bh,-003C9ED1h  ;-0.0037
  2626 00001926 F7ED                                    imul    ebp
  2627 00001928 89D5                                    mov     ebp, edx
  2628 0000192A B8E47DC3BF                              mov     eax, -403C821Ch
  2629 0000192F F7EE                                    imul    esi
  2630 00001931 01EA                                    add     edx, ebp
  2631 00001933 89531C                                  mov     [ebx+28], edx   ; [ebx+(nn)*4]
  2632 00001936 B87A44C33F                              mov     eax, 3FC3447Ah
  2633 0000193B F7EF                                    imul    edi
  2634 0000193D 29D5                                    sub     ebp, edx
  2635 0000193F 896BE0                                  mov     [ebx-32], ebp   ; [ebx-(nn+1)*4]
  2636 00001942 49                                      dec     ecx
  2637 00001943 0F8578FEFFFF                            jnz     .lop
  2638 00001949 5B                                      pop     ebx
  2639                                  
  2640                                  .no_antialias:
  2641 0000194A F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  2642 00001951 740E                                    jz      short .no_rdtsc_supported@
  2643 00001953 0F31                                    rdtsc
  2644 00001955 0105[1C8D0000]                          add     [rdtsc_antialias], eax
  2645 0000195B 1115[208D0000]                          adc     [rdtsc_antialias+4], edx
  2646                                  
  2647                                  .no_rdtsc_supported@:
  2648 00001961 C3                                      retn
  2649                                  
  2650                                  
  2651                                  ; =============== S U B R O U T I N E =======================================
  2652                                  
  2653                                  
  2654                                  mp3_imdct36:
  2655 00001962 8B06                                    mov     eax, [esi]      ; in: esi=src (sb_hybrid)
  2656                                                                          ; in: edi=dst (sb_samples)
  2657                                                                          ; in: ebx=buf (mdct_buf)
  2658                                                                          ; in: ebp=win (mdct_win)
  2659                                                                          ;
  2660                                                                          ; [esi+0*4]
  2661 00001964 8B5604                                  mov     edx, [esi+4]    ; IRP i,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
  2662 00001967 01D0                                    add     eax, edx        ; IF i AND 1 (*) ; mov edx,[esi+i*4] ; val[i]
  2663                                                                          ;  add val[i-1]
  2664 00001969 894604                                  mov     [esi+4], eax    ;  IF i GT 1
  2665                                                                          ;   add  ecx,eax ; add val[i-2]
  2666                                                                          ;   mov  [esi+(i)*4],ecx
  2667                                                                          ;  ELSE
  2668                                                                          ;   mov  [esi+(i)*4],eax
  2669 0000196C 89C1                                    mov     ecx, eax        ;  memorize as val[i-2]
  2670 0000196E 8B4608                                  mov     eax, [esi+8]    ; ELSE (*) ; [esi+i*4] ; val[i]
  2671 00001971 01C2                                    add     edx, eax        ;  add val[i-1]
  2672 00001973 895608                                  mov     [esi+8], edx    ; [esi+(i)*4
  2673 00001976 8B560C                                  mov     edx, [esi+12]
  2674 00001979 01D0                                    add     eax, edx
  2675 0000197B 01C1                                    add     ecx, eax
  2676 0000197D 894E0C                                  mov     [esi+12], ecx
  2677 00001980 89C1                                    mov     ecx, eax
  2678 00001982 8B4610                                  mov     eax, [esi+16]
  2679 00001985 01C2                                    add     edx, eax
  2680 00001987 895610                                  mov     [esi+16], edx
  2681 0000198A 8B5614                                  mov     edx, [esi+20]
  2682 0000198D 01D0                                    add     eax, edx
  2683 0000198F 01C1                                    add     ecx, eax
  2684 00001991 894E14                                  mov     [esi+20], ecx
  2685 00001994 89C1                                    mov     ecx, eax
  2686 00001996 8B4618                                  mov     eax, [esi+24]
  2687 00001999 01C2                                    add     edx, eax
  2688 0000199B 895618                                  mov     [esi+24], edx
  2689 0000199E 8B561C                                  mov     edx, [esi+28]
  2690 000019A1 01D0                                    add     eax, edx
  2691 000019A3 01C1                                    add     ecx, eax
  2692 000019A5 894E1C                                  mov     [esi+28], ecx
  2693 000019A8 89C1                                    mov     ecx, eax
  2694 000019AA 8B4620                                  mov     eax, [esi+32]
  2695 000019AD 01C2                                    add     edx, eax
  2696 000019AF 895620                                  mov     [esi+32], edx
  2697 000019B2 8B5624                                  mov     edx, [esi+36]
  2698 000019B5 01D0                                    add     eax, edx
  2699 000019B7 01C1                                    add     ecx, eax
  2700 000019B9 894E24                                  mov     [esi+36], ecx
  2701 000019BC 89C1                                    mov     ecx, eax
  2702 000019BE 8B4628                                  mov     eax, [esi+40]
  2703 000019C1 01C2                                    add     edx, eax
  2704 000019C3 895628                                  mov     [esi+40], edx
  2705 000019C6 8B562C                                  mov     edx, [esi+44]
  2706 000019C9 01D0                                    add     eax, edx
  2707 000019CB 01C1                                    add     ecx, eax
  2708 000019CD 894E2C                                  mov     [esi+44], ecx
  2709 000019D0 89C1                                    mov     ecx, eax
  2710 000019D2 8B4630                                  mov     eax, [esi+48]
  2711 000019D5 01C2                                    add     edx, eax
  2712 000019D7 895630                                  mov     [esi+48], edx
  2713 000019DA 8B5634                                  mov     edx, [esi+52]
  2714 000019DD 01D0                                    add     eax, edx
  2715 000019DF 01C1                                    add     ecx, eax
  2716 000019E1 894E34                                  mov     [esi+52], ecx
  2717 000019E4 89C1                                    mov     ecx, eax
  2718 000019E6 8B4638                                  mov     eax, [esi+56]
  2719 000019E9 01C2                                    add     edx, eax
  2720 000019EB 895638                                  mov     [esi+56], edx
  2721 000019EE 8B563C                                  mov     edx, [esi+60]
  2722 000019F1 01D0                                    add     eax, edx
  2723 000019F3 01C1                                    add     ecx, eax
  2724 000019F5 894E3C                                  mov     [esi+60], ecx
  2725 000019F8 89C1                                    mov     ecx, eax
  2726 000019FA 8B4640                                  mov     eax, [esi+64]
  2727 000019FD 01C2                                    add     edx, eax
  2728 000019FF 895640                                  mov     [esi+64], edx
  2729 00001A02 8B5644                                  mov     edx, [esi+68]
  2730 00001A05 01D0                                    add     eax, edx
  2731 00001A07 01C1                                    add     ecx, eax
  2732 00001A09 894E44                                  mov     [esi+68], ecx
  2733 00001A0C 89C1                                    mov     ecx, eax
  2734 00001A0E 53                                      push    ebx
  2735 00001A0F 55                                      push    ebp
  2736 00001A10 57                                      push    edi
  2737 00001A11 8B0E                                    mov     ecx, [esi]      ; IRP j,0,1
  2738 00001A13 8B5E30                                  mov     ebx, [esi+48]   ; t1 = [esi+(0*2+j)*4], t0 = [esi+(6*2+j)*4]
  2739 00001A16 8B7E20                                  mov     edi, [esi+32]   ; t2 = [esi+(4*2+j)*4]
  2740 00001A19 037E40                                  add     edi, [esi+64]   ; + [esi+(8*2+j)*4]
  2741 00001A1C 2B7E10                                  sub     edi, [esi+16]   ; - [esi+(2*2+j)*4]
  2742 00001A1F 8D2C4B                                  lea     ebp, [ebx+ecx*2] ; t2 = src[4*2+j] + src[8*2+j] - src[2*2+j]
  2743                                                                          ; t3 = [t1*2+t0]
  2744 00001A22 D1FD                                    sar     ebp, 1          ; sar @@t3,1
  2745 00001A24 29D9                                    sub     ecx, ebx        ; sub @@t1,@@t0
  2746 00001A26 89C8                                    mov     eax, ecx        ; @@SUM [@@tmp+(16+j)*4],@@t1,add,@@t2
  2747 00001A28 01F8                                    add     eax, edi
  2748 00001A2A A3[503F0500]                            mov     [_@@@tmp+40h], eax ; [@@tmp+(16+j)*4]
  2749 00001A2F D1FF                                    sar     edi, 1          ; sar @@t2,1
  2750 00001A31 89C8                                    mov     eax, ecx        ; @@SUM [@@tmp+(6+j)*4],@@t1,sub,@@t2
  2751 00001A33 29F8                                    sub     eax, edi
  2752 00001A35 A3[283F0500]                            mov     [_@@@tmp+18h], eax ; [@@tmp+(6+j)*4]
  2753 00001A3A 8B4610                                  mov     eax, [esi+16]   ; [esi+(4*2+j)*4]
  2754 00001A3D 034620                                  add     eax, [esi+32]   ; [esi+(2*2+j)*4]
  2755 00001A40 D1E0                                    shl     eax, 1
  2756 00001A42 BA0AD94778                              mov     edx, 7847D90Ah  ; C2
  2757 00001A47 F7EA                                    imul    edx
  2758 00001A49 89D3                                    mov     ebx, edx
  2759 00001A4B 8B4620                                  mov     eax, [esi+32]
  2760 00001A4E 2B4640                                  sub     eax, [esi+64]
  2761 00001A51 BA04CB8BD3                              mov     edx, 0D38BCB04h ; negC8
  2762 00001A56 F7EA                                    imul    edx
  2763 00001A58 89D1                                    mov     ecx, edx
  2764 00001A5A 8B4610                                  mov     eax, [esi+16]
  2765 00001A5D 034640                                  add     eax, [esi+64]
  2766 00001A60 D1E0                                    shl     eax, 1
  2767 00001A62 BA7541F29D                              mov     edx, 9DF24175h  ; negC4
  2768 00001A67 F7EA                                    imul    edx
  2769 00001A69 89E8                                    mov     eax, ebp
  2770 00001A6B 01D8                                    add     eax, ebx
  2771 00001A6D 01C8                                    add     eax, ecx
  2772 00001A6F A3[183F0500]                            mov     [_@@@tmp+8], eax
  2773 00001A74 89E8                                    mov     eax, ebp
  2774 00001A76 29D8                                    sub     eax, ebx
  2775 00001A78 29D0                                    sub     eax, edx
  2776 00001A7A A3[383F0500]                            mov     [_@@@tmp+28h], eax
  2777 00001A7F 89E8                                    mov     eax, ebp
  2778 00001A81 01D0                                    add     eax, edx
  2779 00001A83 29C8                                    sub     eax, ecx
  2780 00001A85 A3[483F0500]                            mov     [_@@@tmp+38h], eax
  2781 00001A8A 8B4628                                  mov     eax, [esi+40]
  2782 00001A8D 034638                                  add     eax, [esi+56]
  2783 00001A90 2B4608                                  sub     eax, [esi+8]
  2784 00001A93 D1E0                                    shl     eax, 1
  2785 00001A95 BA5F142691                              mov     edx, 9126145Fh  ; negC3
  2786 00001A9A F7EA                                    imul    edx
  2787 00001A9C 8915[203F0500]                          mov     [_@@@tmp+10h], edx
  2788 00001AA2 8B4608                                  mov     eax, [esi+8]
  2789 00001AA5 034628                                  add     eax, [esi+40]
  2790 00001AA8 D1E0                                    shl     eax, 1
  2791 00001AAA BA332E0E7E                              mov     edx, 7E0E2E33h  ; C1
  2792 00001AAF F7EA                                    imul    edx
  2793 00001AB1 89D7                                    mov     edi, edx
  2794 00001AB3 8B4628                                  mov     eax, [esi+40]
  2795 00001AB6 2B4638                                  sub     eax, [esi+56]
  2796 00001AB9 BA2E5E71A8                              mov     edx, 0A8715E2Eh ; negC7
  2797 00001ABE F7EA                                    imul    edx
  2798 00001AC0 89D5                                    mov     ebp, edx
  2799 00001AC2 8B4608                                  mov     eax, [esi+8]
  2800 00001AC5 034638                                  add     eax, [esi+56]
  2801 00001AC8 D1E0                                    shl     eax, 1
  2802 00001ACA BAB822B9AD                              mov     edx, 0ADB922B8h ; negC5
  2803 00001ACF F7EA                                    imul    edx
  2804 00001AD1 89D1                                    mov     ecx, edx
  2805 00001AD3 8B4618                                  mov     eax, [esi+24]
  2806 00001AD6 D1E0                                    shl     eax, 1
  2807 00001AD8 BAA2EBD96E                              mov     edx, 6ED9EBA2h  ; C3
  2808 00001ADD F7EA                                    imul    edx
  2809 00001ADF 89E8                                    mov     eax, ebp
  2810 00001AE1 01F8                                    add     eax, edi
  2811 00001AE3 01D0                                    add     eax, edx
  2812 00001AE5 A3[103F0500]                            mov     [_@@@tmp], eax
  2813 00001AEA 89E8                                    mov     eax, ebp
  2814 00001AEC 29C8                                    sub     eax, ecx
  2815 00001AEE 29D0                                    sub     eax, edx
  2816 00001AF0 A3[303F0500]                            mov     [_@@@tmp+20h], eax
  2817 00001AF5 89F8                                    mov     eax, edi
  2818 00001AF7 01C8                                    add     eax, ecx
  2819 00001AF9 29D0                                    sub     eax, edx
  2820 00001AFB A3[403F0500]                            mov     [_@@@tmp+30h], eax
  2821 00001B00 8B4E04                                  mov     ecx, [esi+4]
  2822 00001B03 8B5E34                                  mov     ebx, [esi+52]
  2823 00001B06 8B7E24                                  mov     edi, [esi+36]
  2824 00001B09 037E44                                  add     edi, [esi+68]
  2825 00001B0C 2B7E14                                  sub     edi, [esi+20]
  2826 00001B0F 8D2C4B                                  lea     ebp, [ebx+ecx*2]
  2827 00001B12 D1FD                                    sar     ebp, 1
  2828 00001B14 29D9                                    sub     ecx, ebx
  2829 00001B16 89C8                                    mov     eax, ecx
  2830 00001B18 01F8                                    add     eax, edi
  2831 00001B1A A3[543F0500]                            mov     [_@@@tmp+44h], eax
  2832 00001B1F D1FF                                    sar     edi, 1
  2833 00001B21 89C8                                    mov     eax, ecx
  2834 00001B23 29F8                                    sub     eax, edi
  2835 00001B25 A3[2C3F0500]                            mov     [_@@@tmp+1Ch], eax
  2836 00001B2A 8B4614                                  mov     eax, [esi+20]   ; t0 = MULH(2*(src[2*2+j]+src[4*2+j]),C2)
  2837 00001B2D 034624                                  add     eax, [esi+36]
  2838 00001B30 D1E0                                    shl     eax, 1
  2839 00001B32 BA0AD94778                              mov     edx, 7847D90Ah  ; C2
  2840 00001B37 F7EA                                    imul    edx
  2841 00001B39 89D3                                    mov     ebx, edx
  2842 00001B3B 8B4624                                  mov     eax, [esi+36]   ; t1 = MULH(src[4*2+j]-src[8*2+j],negC8)
  2843 00001B3E 2B4644                                  sub     eax, [esi+68]
  2844 00001B41 BA04CB8BD3                              mov     edx, 0D38BCB04h ; negC8
  2845 00001B46 F7EA                                    imul    edx
  2846 00001B48 89D1                                    mov     ecx, edx
  2847 00001B4A 8B4614                                  mov     eax, [esi+20]   ; t2 = MULH(2*(src[2*2+j]+src[8*2+j]),negC4)
  2848 00001B4D 034644                                  add     eax, [esi+68]
  2849 00001B50 D1E0                                    shl     eax, 1
  2850 00001B52 BA7541F29D                              mov     edx, 9DF24175h  ; negC4
  2851 00001B57 F7EA                                    imul    edx
  2852 00001B59 89E8                                    mov     eax, ebp        ; tmp[2+j] = t3+t0+t1
  2853 00001B5B 01D8                                    add     eax, ebx
  2854 00001B5D 01C8                                    add     eax, ecx
  2855 00001B5F A3[1C3F0500]                            mov     [_@@@tmp+0Ch], eax
  2856 00001B64 89E8                                    mov     eax, ebp        ; tmp[10+j] = t3-t0-t2
  2857 00001B66 29D8                                    sub     eax, ebx
  2858 00001B68 29D0                                    sub     eax, edx
  2859 00001B6A A3[3C3F0500]                            mov     [_@@@tmp+2Ch], eax
  2860 00001B6F 89E8                                    mov     eax, ebp        ; tmp[14+j] = t3+t2-t1
  2861 00001B71 01D0                                    add     eax, edx
  2862 00001B73 29C8                                    sub     eax, ecx
  2863 00001B75 A3[4C3F0500]                            mov     [_@@@tmp+3Ch], eax
  2864 00001B7A 8B462C                                  mov     eax, [esi+44]   ; tmp[4+j] = MULH(2*(src[5*2+j]+src[7*2+j]-src[1*2+j]),negC3)
  2865 00001B7D 03463C                                  add     eax, [esi+60]
  2866 00001B80 2B460C                                  sub     eax, [esi+12]
  2867 00001B83 D1E0                                    shl     eax, 1
  2868 00001B85 BA5F142691                              mov     edx, 9126145Fh  ; negC3
  2869 00001B8A F7EA                                    imul    edx
  2870 00001B8C 8915[243F0500]                          mov     [_@@@tmp+14h], edx
  2871 00001B92 8B460C                                  mov     eax, [esi+12]   ; @@MULH @@t2,[esi+(1*2+j)*4],add,[esi+(5*2+j)*4],-,-              ,1,C1,-
  2872                                                                          ; t2 = MULH(2*(src[1*2+j],add,src[5*2+j]),-,-,1,C1)
  2873 00001B95 03462C                                  add     eax, [esi+44]
  2874 00001B98 D1E0                                    shl     eax, 1
  2875 00001B9A BA332E0E7E                              mov     edx, 7E0E2E33h  ; C1
  2876 00001B9F F7EA                                    imul    edx
  2877 00001BA1 89D7                                    mov     edi, edx
  2878 00001BA3 8B462C                                  mov     eax, [esi+44]   ; @@MULH @@t3,[esi+(5*2+j)*4],sub,[esi+(7*2+j)*4],-,-,
  2879                                                                          ; ,0,negC7,-
  2880                                                                          ;
  2881                                                                          ; t3 = MULH( src[5*2+j],sub,src[7*2+j],-,-,0,negC7)
  2882 00001BA6 2B463C                                  sub     eax, [esi+60]
  2883 00001BA9 BA2E5E71A8                              mov     edx, 0A8715E2Eh ; negC7
  2884 00001BAE F7EA                                    imul    edx
  2885 00001BB0 89D5                                    mov     ebp, edx
  2886 00001BB2 8B460C                                  mov     eax, [esi+12]   ; t1 = MULH(2*(src[1*2+j],add,src[7*2+j]),-,-,1,negC5)
  2887 00001BB5 03463C                                  add     eax, [esi+60]
  2888 00001BB8 D1E0                                    shl     eax, 1          ; shift = 1
  2889 00001BBA BAB822B9AD                              mov     edx, 0ADB922B8h ; negC5
  2890 00001BBF F7EA                                    imul    edx
  2891 00001BC1 89D1                                    mov     ecx, edx
  2892 00001BC3 8B461C                                  mov     eax, [esi+28]   ; t0 = MULH(2*src[3*2+j],-,-,-,-,1,C3)
  2893 00001BC6 D1E0                                    shl     eax, 1
  2894 00001BC8 BAA2EBD96E                              mov     edx, 6ED9EBA2h  ; C3
  2895 00001BCD F7EA                                    imul    edx
  2896 00001BCF 89E8                                    mov     eax, ebp
  2897 00001BD1 01F8                                    add     eax, edi
  2898 00001BD3 01D0                                    add     eax, edx
  2899 00001BD5 A3[143F0500]                            mov     [_@@@tmp+4], eax
  2900 00001BDA 89E8                                    mov     eax, ebp
  2901 00001BDC 29C8                                    sub     eax, ecx
  2902 00001BDE 29D0                                    sub     eax, edx
  2903 00001BE0 A3[343F0500]                            mov     [_@@@tmp+24h], eax
  2904 00001BE5 89F8                                    mov     eax, edi        ; @@SUM [@@tmp+(12+j)*4],@@t2,add,@@t1,sub,edx
  2905 00001BE7 01C8                                    add     eax, ecx
  2906 00001BE9 29D0                                    sub     eax, edx
  2907 00001BEB A3[443F0500]                            mov     [_@@@tmp+34h], eax
  2908 00001BF0 5F                                      pop     edi
  2909 00001BF1 5D                                      pop     ebp
  2910 00001BF2 5B                                      pop     ebx
  2911 00001BF3 56                                      push    esi             ; IRP j,0,1,2,3 ; j = 0
  2912 00001BF4 8B15[103F0500]                          mov     edx, [_@@@tmp] ; t0 = [@@tmp+(j*4+0)*4]
  2913 00001BFA 8B35[143F0500]                          mov     esi, [_@@@tmp+4] ; t1 = [@@tmp+(j*4+1)*4]
  2914 00001C00 A1[183F0500]                            mov     eax, [_@@@tmp+8] ; t2 = [@@tmp+(j*4+2)*4]
  2915 00001C05 8B0D[1C3F0500]                          mov     ecx, [_@@@tmp+0Ch] ; t2 = [@@tmp+(j*4+3)*4]
  2916 00001C0B 29D0                                    sub     eax, edx        ; s2 = t2 - t0
  2917 00001C0D 8D1450                                  lea     edx, [eax+edx*2] ; s0 = t2 + t0
  2918 00001C10 A3[083F0500]                            mov     [_@@s2], eax ; @@MULH esi,eax ,-,-,-,-,1,icos36h_&j,-
  2919                                                                          ; s2 = MULH(s2*2, icos36h[j])
  2920 00001C15 8915[043F0500]                          mov     [_@@s0], edx
  2921 00001C1B 29F1                                    sub     ecx, esi
  2922 00001C1D 8D0471                                  lea     eax, [ecx+esi*2]
  2923 00001C20 D1E0                                    shl     eax, 1
  2924 00001C22 BA90953E40                              mov     edx, 403E9590h  ; icos36h_0
  2925 00001C27 F7EA                                    imul    edx
  2926 00001C29 89D6                                    mov     esi, edx
  2927 00001C2B 89C8                                    mov     eax, ecx        ; @@MULH @@s3,ecx,-,-,-,-,shift_for_8minus&j,icos36h_8minus&j,-
  2928                                                                          ; s3 = MULL(s3,icos36[8-j]) ; <-- "MULL" with "icos36"
  2929 00001C2D C1E004                                  shl     eax, 4
  2930 00001C30 BA2C2ACA5B                              mov     edx, 5BCA2A2Ch  ; icos36h_8 (8-0)
  2931 00001C35 F7EA                                    imul    edx
  2932 00001C37 8915[0C3F0500]                          mov     [_@@s3], edx
  2933 00001C3D 8B0D[043F0500]                          mov     ecx, [_@@s0]
  2934 00001C43 29F1                                    sub     ecx, esi
  2935 00001C45 8D3471                                  lea     esi, [ecx+esi*2]
  2936 00001C48 8B4524                                  mov     eax, [ebp+36]   ; @@MULH [edi+(9+j)*SBLIMIT*4],[ebp+(9+j)*4],
  2937                                                                          ; -,-,-,-,0,ecx,[ebx+(9+j)*4]
  2938                                                                          ; out[(9+j)*SBLIMIT] = MULH(t0, win[9+j])+buf[9+j]
  2939 00001C4B F7E9                                    imul    ecx
  2940 00001C4D 035324                                  add     edx, [ebx+36]   ; [ebx+(9+j)*4]
  2941 00001C50 899780040000                            mov     [edi+1152], edx ; SBLIMIT=32 ; 9*SBLIMIT*4 = 1152
  2942 00001C56 8B4520                                  mov     eax, [ebp+32]   ; @@MULH [edi+(8-j)*SBLIMIT*4],[ebp+(8-j)*4]
  2943                                                                          ; ,-,-,-,-,0,ecx,[ebx+(8-j)*4]
  2944 00001C59 F7E9                                    imul    ecx
  2945 00001C5B 035320                                  add     edx, [ebx+32]
  2946 00001C5E 899700040000                            mov     [edi+1024], edx ; SBLIMIT=32 ; 8*SBLIMIT*4 = 1024
  2947 00001C64 8B456C                                  mov     eax, [ebp+108]
  2948 00001C67 F7EE                                    imul    esi
  2949 00001C69 895324                                  mov     [ebx+36], edx
  2950 00001C6C 8B4568                                  mov     eax, [ebp+104]  ; @@MULH [ebx+(8-j)*4],[ebp+(8-j+18)*4],-,-,-,-,0,esi,-
  2951 00001C6F F7EE                                    imul    esi
  2952 00001C71 895320                                  mov     [ebx+32], edx
  2953 00001C74 8B0D[083F0500]                          mov     ecx, [_@@s2]
  2954 00001C7A 8B35[0C3F0500]                          mov     esi, [_@@s3]
  2955 00001C80 29F1                                    sub     ecx, esi        ; t2 = s2 - s3
  2956 00001C82 8D3471                                  lea     esi, [ecx+esi*2] ; t3 = s2 + s3
  2957 00001C85 8B4500                                  mov     eax, [ebp+0]    ; @@MULH [edi+(0+j)*SBLIMIT*4],[ebp+(0+j)*4],
  2958                                                                          ; -,-,-,-,0,ecx,[ebx+(0+j)*4]
  2959 00001C88 F7E9                                    imul    ecx
  2960 00001C8A 0313                                    add     edx, [ebx]
  2961 00001C8C 8917                                    mov     [edi], edx
  2962 00001C8E 8B4544                                  mov     eax, [ebp+68]   ; @@MULH [edi+(17-j)*SBLIMIT*4],[ebp+(17-j)*4]
  2963                                                                          ; ,-,-,-,-,0,ecx,[ebx+(17-j)*4]
  2964 00001C91 F7E9                                    imul    ecx
  2965 00001C93 035344                                  add     edx, [ebx+68]
  2966 00001C96 899780080000                            mov     [edi+2176], edx ; 17*SBLIMIT*4 = 2176
  2967 00001C9C 8B4548                                  mov     eax, [ebp+72]   ; @@MULH [ebx+(0+j)*4],[ebp+(0+j+18)*4],-,-,-,-,0,esi,-
  2968 00001C9F F7EE                                    imul    esi
  2969 00001CA1 8913                                    mov     [ebx], edx
  2970 00001CA3 8B858C000000                            mov     eax, [ebp+140]  ; @@MULH [ebx+(17-j)*4],[ebp+(17-j+18)*4],-,-,-,-,0,esi,-
  2971 00001CA9 F7EE                                    imul    esi
  2972 00001CAB 895344                                  mov     [ebx+68], edx
  2973 00001CAE 8B15[203F0500]                          mov     edx, [_@@@tmp+10h] ; IRP j,0,1,2,3 ; j = 1
  2974 00001CB4 8B35[243F0500]                          mov     esi, [_@@@tmp+14h]
  2975 00001CBA A1[283F0500]                            mov     eax, [_@@@tmp+18h]
  2976 00001CBF 8B0D[2C3F0500]                          mov     ecx, [_@@@tmp+1Ch]
  2977 00001CC5 29D0                                    sub     eax, edx
  2978 00001CC7 8D1450                                  lea     edx, [eax+edx*2]
  2979 00001CCA A3[083F0500]                            mov     [_@@s2], eax
  2980 00001CCF 8915[043F0500]                          mov     [_@@s0], edx
  2981 00001CD5 29F1                                    sub     ecx, esi
  2982 00001CD7 8D0471                                  lea     eax, [ecx+esi*2]
  2983 00001CDA D1E0                                    shl     eax, 1
  2984 00001CDC BA07F74142                              mov     edx, 4241F707h  ; icos36h_1
  2985 00001CE1 F7EA                                    imul    edx
  2986 00001CE3 89D6                                    mov     esi, edx
  2987 00001CE5 89C8                                    mov     eax, ecx
  2988 00001CE7 C1E002                                  shl     eax, 2
  2989 00001CEA BA1E75A37B                              mov     edx, 7BA3751Eh  ; icos36h_7 (8-1)
  2990 00001CEF F7EA                                    imul    edx
  2991 00001CF1 8915[0C3F0500]                          mov     [_@@s3], edx
  2992 00001CF7 8B0D[043F0500]                          mov     ecx, [_@@s0]
  2993 00001CFD 29F1                                    sub     ecx, esi
  2994 00001CFF 8D3471                                  lea     esi, [ecx+esi*2]
  2995 00001D02 8B4528                                  mov     eax, [ebp+40]
  2996 00001D05 F7E9                                    imul    ecx
  2997 00001D07 035328                                  add     edx, [ebx+40]
  2998 00001D0A 899700050000                            mov     [edi+1280], edx
  2999 00001D10 8B451C                                  mov     eax, [ebp+28]
  3000 00001D13 F7E9                                    imul    ecx
  3001 00001D15 03531C                                  add     edx, [ebx+28]
  3002 00001D18 899780030000                            mov     [edi+896], edx
  3003 00001D1E 8B4570                                  mov     eax, [ebp+112]
  3004 00001D21 F7EE                                    imul    esi
  3005 00001D23 895328                                  mov     [ebx+40], edx
  3006 00001D26 8B4564                                  mov     eax, [ebp+100]
  3007 00001D29 F7EE                                    imul    esi
  3008 00001D2B 89531C                                  mov     [ebx+28], edx
  3009 00001D2E 8B0D[083F0500]                          mov     ecx, [_@@s2]
  3010 00001D34 8B35[0C3F0500]                          mov     esi, [_@@s3]
  3011 00001D3A 29F1                                    sub     ecx, esi
  3012 00001D3C 8D3471                                  lea     esi, [ecx+esi*2]
  3013 00001D3F 8B4504                                  mov     eax, [ebp+4]
  3014 00001D42 F7E9                                    imul    ecx
  3015 00001D44 035304                                  add     edx, [ebx+4]
  3016 00001D47 899780000000                            mov     [edi+128], edx
  3017 00001D4D 8B4540                                  mov     eax, [ebp+64]
  3018 00001D50 F7E9                                    imul    ecx
  3019 00001D52 035340                                  add     edx, [ebx+64]
  3020 00001D55 899700080000                            mov     [edi+2048], edx
  3021 00001D5B 8B454C                                  mov     eax, [ebp+76]
  3022 00001D5E F7EE                                    imul    esi
  3023 00001D60 895304                                  mov     [ebx+4], edx
  3024 00001D63 8B8588000000                            mov     eax, [ebp+136]
  3025 00001D69 F7EE                                    imul    esi
  3026 00001D6B 895340                                  mov     [ebx+64], edx
  3027 00001D6E 8B15[303F0500]                          mov     edx, [_@@@tmp+20h] ; IRP j,0,1,2,3 ; j = 2
  3028 00001D74 8B35[343F0500]                          mov     esi, [_@@@tmp+24h]
  3029 00001D7A A1[383F0500]                            mov     eax, [_@@@tmp+28h]
  3030 00001D7F 8B0D[3C3F0500]                          mov     ecx, [_@@@tmp+2Ch]
  3031 00001D85 29D0                                    sub     eax, edx
  3032 00001D87 8D1450                                  lea     edx, [eax+edx*2]
  3033 00001D8A A3[083F0500]                            mov     [_@@s2], eax
  3034 00001D8F 8915[043F0500]                          mov     [_@@s0], edx
  3035 00001D95 29F1                                    sub     ecx, esi
  3036 00001D97 8D0471                                  lea     eax, [ecx+esi*2]
  3037 00001D9A D1E0                                    shl     eax, 1
  3038 00001D9C BA6CBE9D46                              mov     edx, 469DBE6Ch  ; icos36h_2
  3039 00001DA1 F7EA                                    imul    edx
  3040 00001DA3 89D6                                    mov     esi, edx
  3041 00001DA5 89C8                                    mov     eax, ecx
  3042 00001DA7 C1E002                                  shl     eax, 2
  3043 00001DAA BA62ECB74B                              mov     edx, 4BB7EC62h  ; icos36h_6 (8-2)
  3044 00001DAF F7EA                                    imul    edx
  3045 00001DB1 8915[0C3F0500]                          mov     [_@@s3], edx
  3046 00001DB7 8B0D[043F0500]                          mov     ecx, [_@@s0]
  3047 00001DBD 29F1                                    sub     ecx, esi
  3048 00001DBF 8D3471                                  lea     esi, [ecx+esi*2]
  3049 00001DC2 8B452C                                  mov     eax, [ebp+44]
  3050 00001DC5 F7E9                                    imul    ecx
  3051 00001DC7 03532C                                  add     edx, [ebx+44]
  3052 00001DCA 899780050000                            mov     [edi+1408], edx
  3053 00001DD0 8B4518                                  mov     eax, [ebp+24]
  3054 00001DD3 F7E9                                    imul    ecx
  3055 00001DD5 035318                                  add     edx, [ebx+24]
  3056 00001DD8 899700030000                            mov     [edi+768], edx
  3057 00001DDE 8B4574                                  mov     eax, [ebp+116]
  3058 00001DE1 F7EE                                    imul    esi
  3059 00001DE3 89532C                                  mov     [ebx+44], edx
  3060 00001DE6 8B4560                                  mov     eax, [ebp+96]
  3061 00001DE9 F7EE                                    imul    esi
  3062 00001DEB 895318                                  mov     [ebx+24], edx
  3063 00001DEE 8B0D[083F0500]                          mov     ecx, [_@@s2]
  3064 00001DF4 8B35[0C3F0500]                          mov     esi, [_@@s3]
  3065 00001DFA 29F1                                    sub     ecx, esi
  3066 00001DFC 8D3471                                  lea     esi, [ecx+esi*2]
  3067 00001DFF 8B4508                                  mov     eax, [ebp+8]
  3068 00001E02 F7E9                                    imul    ecx
  3069 00001E04 035308                                  add     edx, [ebx+8]
  3070 00001E07 899700010000                            mov     [edi+256], edx
  3071 00001E0D 8B453C                                  mov     eax, [ebp+60]
  3072 00001E10 F7E9                                    imul    ecx
  3073 00001E12 03533C                                  add     edx, [ebx+60]
  3074 00001E15 899780070000                            mov     [edi+1920], edx
  3075 00001E1B 8B4550                                  mov     eax, [ebp+80]
  3076 00001E1E F7EE                                    imul    esi
  3077 00001E20 895308                                  mov     [ebx+8], edx
  3078 00001E23 8B8584000000                            mov     eax, [ebp+132]
  3079 00001E29 F7EE                                    imul    esi
  3080 00001E2B 89533C                                  mov     [ebx+60], edx
  3081 00001E2E 8B15[403F0500]                          mov     edx, [_@@@tmp+30h] ; IRP j,0,1,2,3 ; j = 3
  3082 00001E34 8B35[443F0500]                          mov     esi, [_@@@tmp+34h]
  3083 00001E3A A1[483F0500]                            mov     eax, [_@@@tmp+38h]
  3084 00001E3F 8B0D[4C3F0500]                          mov     ecx, [_@@@tmp+3Ch]
  3085 00001E45 29D0                                    sub     eax, edx
  3086 00001E47 8D1450                                  lea     edx, [eax+edx*2]
  3087 00001E4A A3[083F0500]                            mov     [_@@s2], eax
  3088 00001E4F 8915[043F0500]                          mov     [_@@s0], edx
  3089 00001E55 29F1                                    sub     ecx, esi
  3090 00001E57 8D0471                                  lea     eax, [ecx+esi*2]
  3091 00001E5A D1E0                                    shl     eax, 1
  3092 00001E5C BABE2B214E                              mov     edx, 4E212BBEh  ; icos36h_3
  3093 00001E61 F7EA                                    imul    edx
  3094 00001E63 89D6                                    mov     esi, edx
  3095 00001E65 89C8                                    mov     eax, ecx
  3096 00001E67 D1E0                                    shl     eax, 1
  3097 00001E69 BADFA1946F                              mov     edx, 6F94A1DFh  ; icos36h_5 (8-3)
  3098 00001E6E F7EA                                    imul    edx
  3099 00001E70 8915[0C3F0500]                          mov     [_@@s3], edx
  3100 00001E76 8B0D[043F0500]                          mov     ecx, [_@@s0]
  3101 00001E7C 29F1                                    sub     ecx, esi
  3102 00001E7E 8D3471                                  lea     esi, [ecx+esi*2]
  3103 00001E81 8B4530                                  mov     eax, [ebp+48]
  3104 00001E84 F7E9                                    imul    ecx
  3105 00001E86 035330                                  add     edx, [ebx+48]
  3106 00001E89 899700060000                            mov     [edi+1536], edx
  3107 00001E8F 8B4514                                  mov     eax, [ebp+20]
  3108 00001E92 F7E9                                    imul    ecx
  3109 00001E94 035314                                  add     edx, [ebx+20]
  3110 00001E97 899780020000                            mov     [edi+640], edx
  3111 00001E9D 8B4578                                  mov     eax, [ebp+120]
  3112 00001EA0 F7EE                                    imul    esi
  3113 00001EA2 895330                                  mov     [ebx+30h], edx
  3114 00001EA5 8B455C                                  mov     eax, [ebp+92]
  3115 00001EA8 F7EE                                    imul    esi
  3116 00001EAA 895314                                  mov     [ebx+20], edx
  3117 00001EAD 8B0D[083F0500]                          mov     ecx, [_@@s2]
  3118 00001EB3 8B35[0C3F0500]                          mov     esi, [_@@s3]
  3119 00001EB9 29F1                                    sub     ecx, esi
  3120 00001EBB 8D3471                                  lea     esi, [ecx+esi*2]
  3121 00001EBE 8B450C                                  mov     eax, [ebp+12]
  3122 00001EC1 F7E9                                    imul    ecx
  3123 00001EC3 03530C                                  add     edx, [ebx+12]
  3124 00001EC6 899780010000                            mov     [edi+384], edx
  3125 00001ECC 8B4538                                  mov     eax, [ebp+56]
  3126 00001ECF F7E9                                    imul    ecx
  3127 00001ED1 035338                                  add     edx, [ebx+56]
  3128 00001ED4 899700070000                            mov     [edi+1792], edx
  3129 00001EDA 8B4554                                  mov     eax, [ebp+84]
  3130 00001EDD F7EE                                    imul    esi
  3131 00001EDF 89530C                                  mov     [ebx+12], edx
  3132 00001EE2 8B8580000000                            mov     eax, [ebp+128]
  3133 00001EE8 F7EE                                    imul    esi
  3134 00001EEA 895338                                  mov     [ebx+56], edx
  3135 00001EED 8B0D[503F0500]                          mov     ecx, [_@@@tmp+40h] ; IRP j,4
  3136                                                                          ; [@@tmp+(j*4+0)*4]
  3137 00001EF3 A1[543F0500]                            mov     eax, [_@@@tmp+44h] ; [@@tmp+(j*4+1)*4]
  3138 00001EF8 D1E0                                    shl     eax, 1
  3139 00001EFA BA9A79825A                              mov     edx, 5A82799Ah  ; icos36h_4 (8-4)
  3140 00001EFF F7EA                                    imul    edx
  3141 00001F01 29D1                                    sub     ecx, edx
  3142 00001F03 8D3451                                  lea     esi, [ecx+edx*2]
  3143 00001F06 8B4534                                  mov     eax, [ebp+52]   ; @@MULH [edi+(9+j)*SBLIMIT*4],[ebp+(9+j)*4],
  3144                                                                          ; -,-,-,-,0,ecx,[ebx+(9+j)*4]
  3145                                                                          ; out[(9+4)*SBLIMIT] = MULH(t0,win[9+4])+buf[9+4]
  3146 00001F09 F7E9                                    imul    ecx
  3147 00001F0B 035334                                  add     edx, [ebx+52]
  3148 00001F0E 899780060000                            mov     [edi+1664], edx ; 13*SBLIMIT*4 = 1664
  3149 00001F14 8B4510                                  mov     eax, [ebp+16]   ; @MULH [edi+(8-j)*SBLIMIT*4],[ebp+(8-j)*4],
  3150                                                                          ; -,-,-,-,0,ecx,[ebx+(8-j)*4]
  3151 00001F17 F7E9                                    imul    ecx
  3152 00001F19 035310                                  add     edx, [ebx+16]
  3153 00001F1C 899700020000                            mov     [edi+512], edx
  3154 00001F22 8B457C                                  mov     eax, [ebp+124]  ; @@MULH [ebx+(9+j)*4],[ebp+(9+j+18)*4] ,-,-,-,-,0,esi,-
  3155 00001F25 F7EE                                    imul    esi
  3156 00001F27 895334                                  mov     [ebx+52], edx
  3157 00001F2A 8B4558                                  mov     eax, [ebp+88]   ; @@MULH [ebx+(8-j)*4],[ebp+(8-j+18)*4],-,-,-,-,0,esi,-
  3158 00001F2D F7EE                                    imul    esi
  3159 00001F2F 895310                                  mov     [ebx+16], edx
  3160 00001F32 5E                                      pop     esi
  3161 00001F33 C3                                      retn
  3162                                  
  3163                                  
  3164                                  ; =============== S U B R O U T I N E =======================================
  3165                                  
  3166                                  
  3167                                  mp3_imdct12:
  3168 00001F34 8B06                                    mov     eax, [esi]      ; in: esi=src - out: [out2_...]
  3169 00001F36 A3[583F0500]                            mov     [_@@tmp0], eax  ; IRP nn,0,1,2,3,4,5
  3170                                                                          ;  @@tmp&nn rd 1
  3171                                                                          ; ENDM
  3172                                                                          ; mov  eax,[esi+0*3*4] ; = src[0*3]
  3173 00001F3B 8B560C                                  mov     edx, [esi+12]   ; [esi+1*3*4] ; = src[1*3]
  3174 00001F3E 01D0                                    add     eax, edx        ; = src[0*3]+src[1*3]
  3175 00001F40 A3[5C3F0500]                            mov     [_@@tmp1], eax
  3176 00001F45 8B4618                                  mov     eax, [esi+24]
  3177 00001F48 01C2                                    add     edx, eax
  3178 00001F4A 8915[603F0500]                          mov     [_@@tmp2], edx
  3179 00001F50 8B5624                                  mov     edx, [esi+36]   ; [esi+3*3*4]
  3180 00001F53 01D0                                    add     eax, edx
  3181 00001F55 A3[643F0500]                            mov     [_@@tmp3], eax
  3182 00001F5A 8B4630                                  mov     eax, [esi+48]
  3183 00001F5D 01C2                                    add     edx, eax
  3184 00001F5F 8915[683F0500]                          mov     [_@@tmp4], edx
  3185 00001F65 8B563C                                  mov     edx, [esi+60]   ; [esi+5*3*4]
  3186 00001F68 01D0                                    add     eax, edx        ; = src[4*3]+src[5*3]
  3187 00001F6A 0305[643F0500]                          add     eax, [_@@tmp3]
  3188 00001F70 A3[6C3F0500]                            mov     [_@@tmp5], eax  ; tmp5 = src[4*3]+src[5*3]+tmp3
  3189 00001F75 8B15[5C3F0500]                          mov     edx, [_@@tmp1]
  3190 00001F7B 0115[643F0500]                          add     [_@@tmp3], edx
  3191 00001F81 A1[603F0500]                            mov     eax, [_@@tmp2]  ; @@MULH @@tmp2,@@tmp2,-,-,-,-,1,C3,-
  3192                                                                          ; tmp2 = MULH(2*tmp2,C3)
  3193 00001F86 D1E0                                    shl     eax, 1
  3194 00001F88 BAA2EBD96E                              mov     edx, 6ED9EBA2h  ; C3
  3195 00001F8D F7EA                                    imul    edx
  3196 00001F8F 8915[603F0500]                          mov     [_@@tmp2], edx
  3197 00001F95 A1[643F0500]                            mov     eax, [_@@tmp3]  ; @@MULH @@tmp3,@@tmp3,-,-,-,-,2,C3,-
  3198                                                                          ; tmp3 = MULH(4*tmp3,C3)
  3199 00001F9A C1E002                                  shl     eax, 2
  3200 00001F9D BAA2EBD96E                              mov     edx, 6ED9EBA2h  ; C3
  3201 00001FA2 F7EA                                    imul    edx
  3202 00001FA4 8915[643F0500]                          mov     [_@@tmp3], edx
  3203 00001FAA A1[5C3F0500]                            mov     eax, [_@@tmp1]  ; @@MULH edx,@@tmp1,sub,@@tmp5,-,-,1,icos36h_4,-
  3204 00001FAF 2B05[6C3F0500]                          sub     eax, [_@@tmp5]  ; t2 = MULH(2*(tmp1-tmp5),icos36h_4)
  3205 00001FB5 D1E0                                    shl     eax, 1
  3206 00001FB7 BA9A79825A                              mov     edx, 5A82799Ah  ; icos36h_4
  3207 00001FBC F7EA                                    imul    edx
  3208 00001FBE A1[583F0500]                            mov     eax, [_@@tmp0]  ; @@SUM eax,@@tmp0,sub,@@tmp4,-,-
  3209 00001FC3 2B05[683F0500]                          sub     eax, [_@@tmp4]  ; t1 = tmp0 - tmp4
  3210 00001FC9 29D0                                    sub     eax, edx        ; @@CAST macro t1,t2,dst0,dst1,dst2,dst3
  3211                                                                          ;   sub  t1,t2                           ;t1-t2
  3212                                                                          ;   lea  t2,[t1+t2*2]                    ;t1+t2
  3213                                                                          ;   mov  dword ptr [mp3_out2_a&dst0],t1  ;t1-t2
  3214                                                                          ;   mov  dword ptr [mp3_out2_b&dst0],t2  ;t1+t2
  3215                                                                          ; endm
  3216 00001FCB 8D1450                                  lea     edx, [eax+edx*2] ; @@CAST eax,edx,1,4,7,10
  3217                                                                          ; out2[1,4,7,10]=t1-t2,t1-t2,t1+t2,t1+t2
  3218 00001FCE A3[743F0500]                            mov     [mp3_out2_a1], eax
  3219 00001FD3 8915[803F0500]                          mov     [mp3_out2_b1], edx
  3220 00001FD9 A1[683F0500]                            mov     eax, [_@@tmp4]
  3221 00001FDE 8B15[5C3F0500]                          mov     edx, [_@@tmp1]
  3222 00001FE4 D1F8                                    sar     eax, 1
  3223 00001FE6 D1E2                                    shl     edx, 1
  3224 00001FE8 0105[583F0500]                          add     [_@@tmp0], eax  ; tmp0 = tmp0 + tmp4/2
  3225 00001FEE 0115[6C3F0500]                          add     [_@@tmp5], edx  ; tmp5 = tmp5 + tmp1*2
  3226 00001FF4 A1[6C3F0500]                            mov     eax, [_@@tmp5]  ; @@MULH edx,@@tmp5,add,@@tmp3,-,-,0,icos36h_1,-
  3227 00001FF9 0305[643F0500]                          add     eax, [_@@tmp3]
  3228 00001FFF BA07F74142                              mov     edx, 4241F707h  ; icos36h_1
  3229 00002004 F7EA                                    imul    edx
  3230 00002006 A1[583F0500]                            mov     eax, [_@@tmp0]  ; @@SUM eax,@@tmp0,add,@@tmp2,-,-
  3231 0000200B 0305[603F0500]                          add     eax, [_@@tmp2]
  3232 00002011 29D0                                    sub     eax, edx        ; @@CAST eax,edx,2,3,8,9
  3233 00002013 8D1450                                  lea     edx, [eax+edx*2]
  3234 00002016 A3[783F0500]                            mov     [mp3_out2_a2], eax
  3235 0000201B 8915[843F0500]                          mov     [mp3_out2_b2], edx
  3236 00002021 A1[6C3F0500]                            mov     eax, [_@@tmp5]  ; @@MULH edx,@@tmp5,sub,@@tmp3,-,-,1,icos36h_7,-
  3237 00002026 2B05[643F0500]                          sub     eax, [_@@tmp3]
  3238 0000202C D1E0                                    shl     eax, 1
  3239 0000202E BA1E75A37B                              mov     edx, 7BA3751Eh  ; icos36h_7
  3240 00002033 F7EA                                    imul    edx
  3241 00002035 A1[583F0500]                            mov     eax, [_@@tmp0]  ; @@SUM eax,@@tmp0,sub,@@tmp2,-,-
  3242 0000203A 2B05[603F0500]                          sub     eax, [_@@tmp2]
  3243 00002040 29D0                                    sub     eax, edx        ; @@CAST eax,edx,0,5,6,11
  3244 00002042 8D1450                                  lea     edx, [eax+edx*2]
  3245 00002045 A3[703F0500]                            mov     [mp3_out2_a0], eax
  3246 0000204A 8915[7C3F0500]                          mov     [mp3_out2_b0], edx
  3247 00002050 C3                                      retn
  3248                                  
  3249                                  
  3250                                  ; =============== S U B R O U T I N E =======================================
  3251                                  
  3252                                  
  3253                                  mp3_compute_imdct:
  3254 00002051 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; in: ebx=granule
  3255 00002058 740E                                    jz      short .no_rdtsc_supported ; timelog_start rdtsc_imdct
  3256 0000205A 0F31                                    rdtsc
  3257 0000205C 2905[348D0000]                          sub     [rdtsc_imdct], eax
  3258 00002062 1915[388D0000]                          sbb     [rdtsc_imdct+4], edx
  3259                                  
  3260                                  .no_rdtsc_supported:
  3261 00002068 53                                      push    ebx
  3262 00002069 8B4B60                                  mov     ecx, [ebx+96]   ; [ebx+$mp3gr_num_nonzero_hybrids_div9]
  3263 0000206C 6BC109                                  imul    eax, ecx, 9
  3264 0000206F 8DBC83A0000000                          lea     edi, [ebx+eax*4+160] ; [ebx+$mp3gr_sb_hybrid+eax*4]
  3265 00002076 E322                                    jecxz   .breakout
  3266                                  
  3267                                  .scan_zero_lop:
  3268 00002078 83EF24                                  sub     edi, 36         ; index-9
  3269 0000207B 8B07                                    mov     eax, [edi]      ; [edi+0*4]
  3270 0000207D 0B4704                                  or      eax, [edi+4]
  3271 00002080 0B4708                                  or      eax, [edi+8]
  3272 00002083 0B470C                                  or      eax, [edi+12]
  3273 00002086 0B4710                                  or      eax, [edi+16]
  3274 00002089 0B4714                                  or      eax, [edi+20]
  3275 0000208C 0B4718                                  or      eax, [edi+24]
  3276 0000208F 0B471C                                  or      eax, [edi+28]
  3277 00002092 0B4720                                  or      eax, [edi+32]   ; [edi+8*4]
  3278 00002095 7503                                    jnz     short .breakout
  3279 00002097 49                                      dec     ecx
  3280 00002098 75DE                                    jnz     short .scan_zero_lop
  3281                                  
  3282                                  .breakout:
  3283 0000209A 41                                      inc     ecx             ; div9+1
  3284 0000209B D1E9                                    shr     ecx, 1          ; div18
  3285 0000209D 890D[9C3F0500]                          mov     [_@@sblimit], ecx
  3286 000020A3 837B2C02                                cmp     dword [ebx+44], 2 ; [ebx+$mp3gr_block_type]
  3287 000020A7 7505                                    jnz     short .this_long_end
  3288 000020A9 8B4B30                                  mov     ecx, [ebx+48]   ; [ebx+$mp3gr_switch_point]
  3289 000020AC D1E1                                    shl     ecx, 1          ; 0,1 --> 0,2
  3290                                  
  3291                                  .this_long_end:
  3292 000020AE 890D[983F0500]                          mov     [_@@mdct_long_end], ecx
  3293 000020B4 8B4330                                  mov     eax, [ebx+48]   ; [ebx+$mp3gr_switch_point]
  3294 000020B7 A3[A03F0500]                            mov     [_@@switch_point], eax
  3295 000020BC 8B432C                                  mov     eax, [ebx+44]   ; [ebx+$mp3gr_block_type]
  3296 000020BF 69C090000000                            imul    eax, 144        ; 1*36*4
  3297 000020C5 A3[943F0500]                            mov     [_@@www], eax
  3298 000020CA 8B0D[680A0100]                          mov     ecx, [mp3_curr_channel]
  3299 000020D0 A1[6C0A0100]                            mov     eax, [mp3_curr_granule]
  3300 000020D5 69C900120000                            imul    ecx, 4608       ; 36*SBLIMIT*4 ; channel ; sb_samples[ch][gr*18]
  3301 000020DB 69C000090000                            imul    eax, 2304       ; 18*SBLIMIT*4 ; frame=granule*18
  3302 000020E1 8DBC01[C8D30000]                        lea     edi, [mp3_sb_samples+ecx+eax]
  3303 000020E8 8DB3A0000000                            lea     esi, [ebx+160]  ; [ebx+$mp3gr_sb_hybrid]
  3304 000020EE A1[680A0100]                            mov     eax, [mp3_curr_channel]
  3305 000020F3 69C000090000                            imul    eax, 2304       ; SBLIMIT*18*4
  3306 000020F9 8D98[C8F70000]                          lea     ebx, [mp3_mdct_buf+eax]
  3307 000020FF F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  3308 00002106 740E                                    jz      short .no_rdtsc_supported@ ; timelog_start rdtsc_imdct36
  3309 00002108 0F31                                    rdtsc
  3310 0000210A 2905[4C8D0000]                          sub     [rdtsc_imdct36], eax
  3311 00002110 1915[508D0000]                          sbb     [rdtsc_imdct36+4], edx
  3312                                  
  3313                                  .no_rdtsc_supported@:
  3314 00002116 C705[903F0500]0000-                     mov	dword [_@@@JJJ], 0
  3314 0000211E 0000               
  3315 00002120 833D[983F0500]00                        cmp	dword [_@@mdct_long_end], 0
  3316 00002127 744D                                    jz      short .imdct36_done
  3317                                  
  3318                                  .imdct36_lop:
  3319 00002129 BD[F8F80400]                            mov	ebp, mp3_mdct_win ; for j=0 to mdct_long_end-1
  3320 0000212E 833D[903F0500]02                        cmp	dword [_@@@JJJ], 2
  3321 00002135 19C0                                    sbb	eax, eax
  3322 00002137 2305[A03F0500]                          and	eax, [_@@switch_point]
  3323 0000213D 7506                                    jnz	short .this_window ; force window 0
  3324 0000213F 032D[943F0500]                          add	ebp, [_@@www] ; mdct_win
  3325                                  
  3326                                  .this_window:
  3327 00002145 A1[903F0500]                            mov	eax, [_@@@JJJ]
  3328 0000214A D1E8                                    shr	eax, 1          ; cy=0,1
  3329 0000214C 19C0                                    sbb	eax, eax        ; eax=0,FFFFFFFFh
  3330 0000214E 2540020000                              and	eax, 576        ; 4*36*4
  3331 00002153 01C5                                    add	ebp, eax
  3332 00002155 E808F8FFFF                              call	mp3_imdct36
  3333 0000215A 83C704                                  add	edi, 4          ; 1*4 ; dst
  3334 0000215D 83C648                                  add	esi, 72         ; 18*4 ; sb_hybrid
  3335 00002160 83C348                                  add	ebx, 72         ; mdct_buf ; next
  3336 00002163 FF05[903F0500]                          inc	dword [_@@@JJJ]
  3337 00002169 A1[903F0500]                            mov	eax, [_@@@JJJ]
  3338 0000216E 3B05[983F0500]                          cmp	eax, [_@@mdct_long_end]
  3339 00002174 72B3                                    jb	short .imdct36_lop
  3340                                  
  3341                                  .imdct36_done:
  3342 00002176 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  3343 0000217D 740E                                    jz      short .no_rdtsc_supported@@ ; timelog_end rdtsc_imdct36
  3344 0000217F 0F31                                    rdtsc
  3345 00002181 0105[4C8D0000]                          add     [rdtsc_imdct36], eax
  3346 00002187 1115[508D0000]                          adc     [rdtsc_imdct36+4], edx
  3347                                  
  3348                                  .no_rdtsc_supported@@:
  3349 0000218D F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_imdct12
  3350 00002194 740E                                    jz      short .no_rdtsc_supported@@@
  3351 00002196 0F31                                    rdtsc
  3352 00002198 2905[648D0000]                          sub     [rdtsc_imdct12], eax
  3353 0000219E 1915[688D0000]                          sbb     [rdtsc_imdct12+4], edx
  3354                                  
  3355                                  .no_rdtsc_supported@@@:
  3356 000021A4 A1[903F0500]                            mov     eax, [_@@@JJJ]
  3357 000021A9 3B05[9C3F0500]                          cmp     eax, [_@@sblimit]
  3358 000021AF 0F83D7020000                            jnb     .imdct12_done
  3359                                  
  3360                                  .imdct12_lop:
  3361 000021B5 BD[18FA0400]                            mov     ebp, (mp3_mdct_win+120h) ; for j=mdct_long_end to sblimit-1
  3362 000021BA A1[903F0500]                            mov     eax, [_@@@JJJ]
  3363 000021BF D1E8                                    shr     eax, 1          ; cy=0,1
  3364 000021C1 19C0                                    sbb     eax, eax        ; eax=0,FFFFFFFFh
  3365 000021C3 2540020000                              and     eax, 576        ; 4*36*4
  3366 000021C8 01C5                                    add     ebp, eax        ; mdct_win
  3367 000021CA 8B03                                    mov     eax, [ebx]      ; IRP i,0,1,2,3,4,5
  3368 000021CC 8907                                    mov     [edi], eax      ; @@SUM [edi+i*SBLIMIT*4],[ebx+(i+0)*4],-,-,-,-
  3369 000021CE 8B4304                                  mov     eax, [ebx+4]
  3370 000021D1 898780000000                            mov     [edi+128], eax
  3371 000021D7 8B4308                                  mov     eax, [ebx+8]
  3372 000021DA 898700010000                            mov     [edi+256], eax
  3373 000021E0 8B430C                                  mov     eax, [ebx+12]
  3374 000021E3 898780010000                            mov     [edi+384], eax
  3375 000021E9 8B4310                                  mov     eax, [ebx+16]
  3376 000021EC 898700020000                            mov     [edi+512], eax
  3377 000021F2 8B4314                                  mov     eax, [ebx+20]
  3378 000021F5 898780020000                            mov     [edi+640], eax  ; ENDM
  3379 000021FB 81C700030000                            add     edi, 768        ; 6*SBLIMIT*4
  3380 00002201 E82EFDFFFF                              call    mp3_imdct12
  3381 00002206 A1[703F0500]                            mov     eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5
  3382 0000220B 8B5500                                  mov     edx, [ebp+0]    ; @@MULH [edi+i*SBLIMIT*4],[mp3_out2_a&i],
  3383                                                                          ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(1*6+i)*4]
  3384 0000220E F7EA                                    imul    edx
  3385 00002210 035318                                  add     edx, [ebx+24]
  3386 00002213 8917                                    mov     [edi], edx
  3387 00002215 A1[7C3F0500]                            mov     eax, [mp3_out2_b0] ; @@MULH [ebx+(2*6+i)*4],[mp3_out2_b&i],
  3388                                                                          ; -,-,-,-,0,[ebp+(i+6)*4],-
  3389 0000221A 8B5518                                  mov     edx, [ebp+24]
  3390 0000221D F7EA                                    imul    edx
  3391 0000221F 895330                                  mov     [ebx+48], edx
  3392 00002222 A1[743F0500]                            mov     eax, [mp3_out2_a1] ; i = 1
  3393 00002227 8B5504                                  mov     edx, [ebp+4]
  3394 0000222A F7EA                                    imul    edx
  3395 0000222C 03531C                                  add     edx, [ebx+28]
  3396 0000222F 899780000000                            mov     [edi+128], edx
  3397 00002235 A1[803F0500]                            mov     eax, [mp3_out2_b1]
  3398 0000223A 8B551C                                  mov     edx, [ebp+28]
  3399 0000223D F7EA                                    imul    edx
  3400 0000223F 895334                                  mov     [ebx+52], edx
  3401 00002242 A1[783F0500]                            mov     eax, [mp3_out2_a2] ; i = 2
  3402 00002247 8B5508                                  mov     edx, [ebp+8]
  3403 0000224A F7EA                                    imul    edx
  3404 0000224C 035320                                  add     edx, [ebx+32]
  3405 0000224F 899700010000                            mov     [edi+256], edx
  3406 00002255 A1[843F0500]                            mov     eax, [mp3_out2_b2]
  3407 0000225A 8B5520                                  mov     edx, [ebp+32]
  3408 0000225D F7EA                                    imul    edx
  3409 0000225F 895338                                  mov     [ebx+56], edx
  3410 00002262 A1[783F0500]                            mov     eax, [mp3_out2_a2] ; i = 3 ; mp3_out2_a3 equ mp3_out2_a2
  3411 00002267 8B550C                                  mov     edx, [ebp+12]
  3412 0000226A F7EA                                    imul    edx
  3413 0000226C 035324                                  add     edx, [ebx+36]
  3414 0000226F 899780010000                            mov     [edi+384], edx
  3415 00002275 A1[843F0500]                            mov     eax, [mp3_out2_b2] ; mp3_out2_b3 equ mp3_out2_b2
  3416 0000227A 8B5524                                  mov     edx, [ebp+36]
  3417 0000227D F7EA                                    imul    edx
  3418 0000227F 89533C                                  mov     [ebx+60], edx
  3419 00002282 A1[743F0500]                            mov     eax, [mp3_out2_a1] ; i = 4 ; mp3_out2_a4 equ mp3_out2_a1
  3420 00002287 8B5510                                  mov     edx, [ebp+16]
  3421 0000228A F7EA                                    imul    edx
  3422 0000228C 035328                                  add     edx, [ebx+40]
  3423 0000228F 899700020000                            mov     [edi+512], edx
  3424 00002295 A1[803F0500]                            mov     eax, [mp3_out2_b1] ; mp3_out2_b4 equ mp3_out2_b1
  3425 0000229A 8B5528                                  mov     edx, [ebp+40]
  3426 0000229D F7EA                                    imul    edx
  3427 0000229F 895340                                  mov     [ebx+64], edx
  3428 000022A2 A1[703F0500]                            mov     eax, [mp3_out2_a0] ; i = 5 ; mp3_out2_a5 equ mp3_out2_a0
  3429 000022A7 8B5514                                  mov     edx, [ebp+20]
  3430 000022AA F7EA                                    imul    edx
  3431 000022AC 03532C                                  add     edx, [ebx+44]
  3432 000022AF 899780020000                            mov     [edi+640], edx
  3433 000022B5 A1[7C3F0500]                            mov     eax, [mp3_out2_b0] ; mp3_out2_b5 equ mp3_out2_b0
  3434 000022BA 8B552C                                  mov     edx, [ebp+44]
  3435 000022BD F7EA                                    imul    edx
  3436 000022BF 895344                                  mov     [ebx+68], edx   ; ENDM
  3437 000022C2 81C700030000                            add     edi, 768        ; 6*SBLIMIT*4
  3438 000022C8 83C604                                  add     esi, 4          ; sb_hybrid
  3439 000022CB E864FCFFFF                              call    mp3_imdct12
  3440 000022D0 A1[703F0500]                            mov     eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5
  3441 000022D5 8B5500                                  mov     edx, [ebp+0]    ; @@MULH [edi+i*SBLIMIT*4],[mp3_out2_a&i],
  3442                                                                          ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(2*6+i)*4]
  3443 000022D8 F7EA                                    imul    edx             ; @@MULH [ebx+(0*6+i)*4],[mp3_out2_b&i],
  3444                                                                          ; -,-,-,-,0,[ebp+(i+6)*4],-
  3445 000022DA 035330                                  add     edx, [ebx+48]
  3446 000022DD 8917                                    mov     [edi], edx
  3447 000022DF A1[7C3F0500]                            mov     eax, [mp3_out2_b0]
  3448 000022E4 8B5518                                  mov     edx, [ebp+18h]
  3449 000022E7 F7EA                                    imul    edx
  3450 000022E9 8913                                    mov     [ebx], edx
  3451 000022EB A1[743F0500]                            mov     eax, [mp3_out2_a1] ; i = 1
  3452 000022F0 8B5504                                  mov     edx, [ebp+4]
  3453 000022F3 F7EA                                    imul    edx
  3454 000022F5 035334                                  add     edx, [ebx+52]
  3455 000022F8 899780000000                            mov     [edi+128], edx
  3456 000022FE A1[803F0500]                            mov     eax, [mp3_out2_b1]
  3457 00002303 8B551C                                  mov     edx, [ebp+28]
  3458 00002306 F7EA                                    imul    edx
  3459 00002308 895304                                  mov     [ebx+4], edx
  3460 0000230B A1[783F0500]                            mov     eax, [mp3_out2_a2] ; i = 2
  3461 00002310 8B5508                                  mov     edx, [ebp+8]
  3462 00002313 F7EA                                    imul    edx
  3463 00002315 035338                                  add     edx, [ebx+56]
  3464 00002318 899700010000                            mov     [edi+256], edx
  3465 0000231E A1[843F0500]                            mov     eax, [mp3_out2_b2]
  3466 00002323 8B5520                                  mov     edx, [ebp+32]
  3467 00002326 F7EA                                    imul    edx
  3468 00002328 895308                                  mov     [ebx+8], edx
  3469 0000232B A1[783F0500]                            mov     eax, [mp3_out2_a2] ; i = 3
  3470 00002330 8B550C                                  mov     edx, [ebp+12]
  3471 00002333 F7EA                                    imul    edx
  3472 00002335 03533C                                  add     edx, [ebx+60]
  3473 00002338 899780010000                            mov     [edi+384], edx
  3474 0000233E A1[843F0500]                            mov     eax, [mp3_out2_b2]
  3475 00002343 8B5524                                  mov     edx, [ebp+36]
  3476 00002346 F7EA                                    imul    edx
  3477 00002348 89530C                                  mov     [ebx+12], edx
  3478 0000234B A1[743F0500]                            mov     eax, [mp3_out2_a1] ; i = 4
  3479 00002350 8B5510                                  mov     edx, [ebp+16]
  3480 00002353 F7EA                                    imul    edx
  3481 00002355 035340                                  add     edx, [ebx+64]
  3482 00002358 899700020000                            mov     [edi+512], edx
  3483 0000235E A1[803F0500]                            mov     eax, [mp3_out2_b1]
  3484 00002363 8B5528                                  mov     edx, [ebp+40]
  3485 00002366 F7EA                                    imul    edx
  3486 00002368 895310                                  mov     [ebx+16], edx
  3487 0000236B A1[703F0500]                            mov     eax, [mp3_out2_a0] ; i = 5
  3488 00002370 8B5514                                  mov     edx, [ebp+20]
  3489 00002373 F7EA                                    imul    edx
  3490 00002375 035344                                  add     edx, [ebx+68]
  3491 00002378 899780020000                            mov     [edi+640], edx
  3492 0000237E A1[7C3F0500]                            mov     eax, [mp3_out2_b0]
  3493 00002383 8B552C                                  mov     edx, [ebp+44]
  3494 00002386 F7EA                                    imul    edx
  3495 00002388 895314                                  mov     [ebx+20], edx   ; ENDM
  3496 0000238B 83C604                                  add     esi, 4
  3497 0000238E E8A1FBFFFF                              call    mp3_imdct12
  3498 00002393 A1[703F0500]                            mov     eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5
  3499 00002398 8B5500                                  mov     edx, [ebp+0]    ; @@MULH [ebx+(0*6+i)*4],[mp3_out2_a&i],
  3500                                                                          ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(0*6+i)*4]
  3501 0000239B F7EA                                    imul    edx
  3502 0000239D 0313                                    add     edx, [ebx]
  3503 0000239F 8913                                    mov     [ebx], edx
  3504 000023A1 A1[7C3F0500]                            mov     eax, [mp3_out2_b0] ; @@MULH [ebx+(1*6+i)*4],[mp3_out2_b&i],
  3505                                                                          ; -,-,-,-,0,[ebp+(i+6)*4],-
  3506 000023A6 8B5518                                  mov     edx, [ebp+24]
  3507 000023A9 F7EA                                    imul    edx
  3508 000023AB 895318                                  mov     [ebx+24], edx
  3509 000023AE C7433000000000                          mov     dword [ebx+48], 0 ; [ebx+(2*6+i)*4]
  3510 000023B5 A1[743F0500]                            mov     eax, [mp3_out2_a1] ; i = 1
  3511 000023BA 8B5504                                  mov     edx, [ebp+4]
  3512 000023BD F7EA                                    imul    edx
  3513 000023BF 035304                                  add     edx, [ebx+4]
  3514 000023C2 895304                                  mov     [ebx+4], edx
  3515 000023C5 A1[803F0500]                            mov     eax, [mp3_out2_b1]
  3516 000023CA 8B551C                                  mov     edx, [ebp+28]
  3517 000023CD F7EA                                    imul    edx
  3518 000023CF 89531C                                  mov     [ebx+28], edx
  3519 000023D2 C7433400000000                          mov     dword [ebx+52], 0 ; [ebx+(2*6+i)*4]
  3520 000023D9 A1[783F0500]                            mov     eax, [mp3_out2_a2] ; i = 2
  3521 000023DE 8B5508                                  mov     edx, [ebp+8]
  3522 000023E1 F7EA                                    imul    edx
  3523 000023E3 035308                                  add     edx, [ebx+8]
  3524 000023E6 895308                                  mov     [ebx+8], edx
  3525 000023E9 A1[843F0500]                            mov     eax, [mp3_out2_b2]
  3526 000023EE 8B5520                                  mov     edx, [ebp+32]
  3527 000023F1 F7EA                                    imul    edx
  3528 000023F3 895320                                  mov     [ebx+32], edx
  3529 000023F6 C7433800000000                          mov     dword [ebx+56], 0
  3530 000023FD A1[783F0500]                            mov     eax, [mp3_out2_a2] ; i = 3
  3531 00002402 8B550C                                  mov     edx, [ebp+12]
  3532 00002405 F7EA                                    imul    edx
  3533 00002407 03530C                                  add     edx, [ebx+0Ch]
  3534 0000240A 89530C                                  mov     [ebx+12], edx
  3535 0000240D A1[843F0500]                            mov     eax, [mp3_out2_b2]
  3536 00002412 8B5524                                  mov     edx, [ebp+36]
  3537 00002415 F7EA                                    imul    edx
  3538 00002417 895324                                  mov     [ebx+36], edx
  3539 0000241A C7433C00000000                          mov     dword [ebx+60], 0 ; [ebx+(2*6+i)*4]
  3540 00002421 A1[743F0500]                            mov     eax, [mp3_out2_a1] ; i = 4
  3541 00002426 8B5510                                  mov     edx, [ebp+16]
  3542 00002429 F7EA                                    imul    edx
  3543 0000242B 035310                                  add     edx, [ebx+16]
  3544 0000242E 895310                                  mov     [ebx+16], edx
  3545 00002431 A1[803F0500]                            mov     eax, [mp3_out2_b1]
  3546 00002436 8B5528                                  mov     edx, [ebp+40]
  3547 00002439 F7EA                                    imul    edx
  3548 0000243B 895328                                  mov     [ebx+40], edx
  3549 0000243E C7434000000000                          mov     dword [ebx+64], 0
  3550 00002445 A1[703F0500]                            mov     eax, [mp3_out2_a0] ; i = 5
  3551 0000244A 8B5514                                  mov     edx, [ebp+20]
  3552 0000244D F7EA                                    imul    edx
  3553 0000244F 035314                                  add     edx, [ebx+20]
  3554 00002452 895314                                  mov     [ebx+20], edx
  3555 00002455 A1[7C3F0500]                            mov     eax, [mp3_out2_b0]
  3556 0000245A 8B552C                                  mov     edx, [ebp+44]
  3557 0000245D F7EA                                    imul    edx
  3558 0000245F 89532C                                  mov     [ebx+44], edx
  3559 00002462 C7434400000000                          mov     dword [ebx+68], 0 ; [ebx+(2*6+i)*4]
  3560 00002469 81C704FAFFFF                            add     edi, -1532      ; (1*4) - (2*6*SBLIMIT*4) ; dst
  3561 0000246F 83C640                                  add     esi, 64         ; 18*4 - (2*4) ; sb_hybrid
  3562 00002472 83C348                                  add     ebx, 72         ; 18*4 ; mdct_buf
  3563 00002475 FF05[903F0500]                          inc     dword [_@@@JJJ]	; next
  3564 0000247B A1[903F0500]                            mov     eax, [_@@@JJJ]
  3565 00002480 3B05[9C3F0500]                          cmp     eax, [_@@sblimit]
  3566 00002486 0F8229FDFFFF                            jb      .imdct12_lop
  3567                                  
  3568                                  .imdct12_done:
  3569 0000248C F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  3570 00002493 740E                                    jz      short .no_rdtsc_supported@@@@ ; timelog_end rdtsc_imdct12
  3571 00002495 0F31                                    rdtsc
  3572 00002497 0105[648D0000]                          add     [rdtsc_imdct12], eax
  3573 0000249D 1115[688D0000]                          adc     [rdtsc_imdct12+4], edx
  3574                                  
  3575                                  .no_rdtsc_supported@@@@:
  3576 000024A3 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_imdct0
  3577 000024AA 740E                                    jz      short .no_rdtsc_supported@@@@@
  3578 000024AC 0F31                                    rdtsc
  3579 000024AE 2905[7C8D0000]                          sub     [rdtsc_imdct0], eax
  3580 000024B4 1915[808D0000]                          sbb     [rdtsc_imdct0+4], edx
  3581                                  
  3582                                  .no_rdtsc_supported@@@@@:
  3583 000024BA 833D[903F0500]20                        cmp     dword [_@@@JJJ], 32 ; SBLIMIT
  3584 000024C1 0F8333010000                            jnb     .zero_outer_done
  3585                                  
  3586                                  .zero_outer_lop:
  3587 000024C7 8B03                                    mov     eax, [ebx]      ; zero bands
  3588                                                                          ; IRP nn,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
  3589                                                                          ;  mov  eax,dword ptr [ebx+nn*4]
  3590                                                                          ;  mov  dword ptr [ebx+nn*4],0
  3591                                                                          ;  mov  dword ptr [edi+nn*SBLIMIT*4],eax ; [dst]
  3592                                                                          ; ENDM
  3593 000024C9 C70300000000                            mov     dword [ebx], 0 ; nn = 0
  3594 000024CF 8907                                    mov     [edi], eax
  3595 000024D1 8B4304                                  mov     eax, [ebx+4]    ; nn = 1
  3596 000024D4 C7430400000000                          mov     dword [ebx+4], 0
  3597 000024DB 898780000000                            mov     [edi+128], eax
  3598 000024E1 8B4308                                  mov     eax, [ebx+8]
  3599 000024E4 C7430800000000                          mov     dword [ebx+8], 0
  3600 000024EB 898700010000                            mov     [edi+256], eax
  3601 000024F1 8B430C                                  mov     eax, [ebx+12]
  3602 000024F4 C7430C00000000                          mov     dword [ebx+12], 0
  3603 000024FB 898780010000                            mov     [edi+384], eax
  3604 00002501 8B4310                                  mov     eax, [ebx+16]   ; nn = 4
  3605 00002504 C7431000000000                          mov     dword [ebx+16], 0
  3606 0000250B 898700020000                            mov     [edi+512], eax
  3607 00002511 8B4314                                  mov     eax, [ebx+20]
  3608 00002514 C7431400000000                          mov     dword [ebx+20], 0
  3609 0000251B 898780020000                            mov     [edi+640], eax  ; [edi+5*SBLIMIT*4]
  3610 00002521 8B4318                                  mov     eax, [ebx+24]
  3611 00002524 C7431800000000                          mov     dword [ebx+24], 0
  3612 0000252B 898700030000                            mov     [edi+768], eax
  3613 00002531 8B431C                                  mov     eax, [ebx+28]   ; nn = 7
  3614 00002534 C7431C00000000                          mov     dword [ebx+28], 0
  3615 0000253B 898780030000                            mov     [edi+896], eax
  3616 00002541 8B4320                                  mov     eax, [ebx+32]
  3617 00002544 C7432000000000                          mov     dword [ebx+32], 0
  3618 0000254B 898700040000                            mov     [edi+1024], eax ; [edi+8*SBLIMIT*4]
  3619 00002551 8B4324                                  mov     eax, [ebx+36]
  3620 00002554 C7432400000000                          mov     dword [ebx+36], 0
  3621 0000255B 898780040000                            mov     [edi+1152], eax
  3622 00002561 8B4328                                  mov     eax, [ebx+40]
  3623 00002564 C7432800000000                          mov     dword [ebx+40], 0
  3624 0000256B 898700050000                            mov     [edi+1280], eax
  3625 00002571 8B432C                                  mov     eax, [ebx+44]
  3626 00002574 C7432C00000000                          mov     dword [ebx+44], 0
  3627 0000257B 898780050000                            mov     [edi+1408], eax
  3628 00002581 8B4330                                  mov     eax, [ebx+48]
  3629 00002584 C7433000000000                          mov     dword [ebx+48], 0
  3630 0000258B 898700060000                            mov     [edi+1536], eax
  3631 00002591 8B4334                                  mov     eax, [ebx+52]
  3632 00002594 C7433400000000                          mov     dword [ebx+52], 0
  3633 0000259B 898780060000                            mov     [edi+1664], eax
  3634 000025A1 8B4338                                  mov     eax, [ebx+56]
  3635 000025A4 C7433800000000                          mov     dword [ebx+56], 0
  3636 000025AB 898700070000                            mov     [edi+1792], eax
  3637 000025B1 8B433C                                  mov     eax, [ebx+60]
  3638 000025B4 C7433C00000000                          mov     dword [ebx+60], 0
  3639 000025BB 898780070000                            mov     [edi+1920], eax
  3640 000025C1 8B4340                                  mov     eax, [ebx+64]
  3641 000025C4 C7434000000000                          mov     dword [ebx+64], 0 ; [edi+16*SBLIMIT*4]
  3642 000025CB 898700080000                            mov     [edi+2048], eax
  3643 000025D1 8B4344                                  mov     eax, [ebx+68]   ; nn = 17
  3644 000025D4 C7434400000000                          mov     dword [ebx+68], 0
  3645 000025DB 898780080000                            mov     [edi+2176], eax ; ENDM
  3646 000025E1 83C348                                  add     ebx, 72         ; 18*4
  3647 000025E4 83C704                                  add     edi, 4
  3648 000025E7 FF05[903F0500]                          inc     dword [_@@@JJJ]
  3649 000025ED 833D[903F0500]20                        cmp     dword [_@@@JJJ], 32
  3650 000025F4 0F82CDFEFFFF                            jb      .zero_outer_lop
  3651                                  
  3652                                  .zero_outer_done:
  3653 000025FA F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_imdct0
  3654 00002601 740E                                    jz      short .no_rdtsc_supported@@@@@@
  3655 00002603 0F31                                    rdtsc
  3656 00002605 0105[7C8D0000]                          add     [rdtsc_imdct0], eax
  3657 0000260B 1115[808D0000]                          adc     [rdtsc_imdct0+4], edx
  3658                                  
  3659                                  .no_rdtsc_supported@@@@@@:
  3660 00002611 5B                                      pop     ebx
  3661 00002612 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_imdct
  3662 00002619 740E                                    jz      short .no_rdtsc_supported@@@@@@@
  3663 0000261B 0F31                                    rdtsc
  3664 0000261D 0105[348D0000]                          add     [rdtsc_imdct], eax
  3665 00002623 1115[388D0000]                          adc     [rdtsc_imdct+4], edx
  3666                                  
  3667                                  .no_rdtsc_supported@@@@@@@:
  3668 00002629 C3                                      retn
  3669                                  
  3670                                  
  3671                                  ; =============== S U B R O U T I N E =======================================
  3672                                  
  3673                                  
  3674                                  mp3_dct32_shift_0:
  3675 0000262A 8B06                                    mov     eax, [esi]      ; mp3_dct32_macro macro rate_shift ; rate_shift = 0
  3676 0000262C 8B567C                                  mov     edx, [esi+124]  ; @@BF macro a,b,sign,cos,shift
  3677                                                                          ; @@BF 0,31,+,COS0_0,1
  3678                                                                          ; @@need_a equ (rate_shift EQ 0) or (a LT 16) ; a = 0
  3679                                                                          ; @@need_b equ (rate_shift EQ 0) or (b LT 16) ; b = 31
  3680                                                                          ; IF @@need_a AND @@need_b ; rate_shift = 0
  3681                                                                          ;    mov eax,dword ptr [esi+a*4]
  3682                                                                          ;    mov edx,dword ptr [esi+b*4]
  3683                                                                          ;    add dword ptr [esi+a*4],edx
  3684 0000262F 0116                                    add     [esi], edx
  3685 00002631 29D0                                    sub     eax, edx
  3686 00002633 D1E0                                    shl     eax, 1          ; shl  eax,shift
  3687                                                                          ; (needed when COS.fraction is less than 32bit)
  3688 00002635 BA51C21340                              mov     edx, 4013C251h  ; sign&&cos ; +COS0_0 = 4013C251h
  3689 0000263A F7EA                                    imul    edx
  3690 0000263C 89567C                                  mov     [esi+124], edx  ; [esi+b*4] ; upper 32bit of multiply result
  3691 0000263F 8B463C                                  mov     eax, [esi+60]   ; @@BF 15,16,+,COS0_15,5
  3692                                                                          ; [esi+a*4]
  3693 00002642 8B5640                                  mov     edx, [esi+64]   ; [esi+b*4]
  3694 00002645 01563C                                  add     [esi+60], edx   ; [esi+a*4]
  3695 00002648 29D0                                    sub     eax, edx
  3696 0000264A C1E005                                  shl     eax, 5          ; shl eax,shift
  3697 0000264D BAFB228551                              mov     edx, 518522FBh  ; sign&&cos ; +COS0_15 = 518522FBh
  3698 00002652 F7EA                                    imul    edx
  3699 00002654 895640                                  mov     [esi+64], edx   ; [esi+b*4]
  3700 00002657 8B06                                    mov     eax, [esi]      ; @@BF 0,15,+,COS1_0,1
  3701 00002659 8B563C                                  mov     edx, [esi+60]
  3702 0000265C 0116                                    add     [esi], edx
  3703 0000265E 29D0                                    sub     eax, edx
  3704 00002660 D1E0                                    shl     eax, 1
  3705 00002662 BA72464F40                              mov     edx, 404F4672h  ; +COS1_0
  3706 00002667 F7EA                                    imul    edx
  3707 00002669 89563C                                  mov     [esi+60], edx
  3708 0000266C 8B4640                                  mov     eax, [esi+64]   ; @@BF 16,31,-,COS1_0,1
  3709 0000266F 8B567C                                  mov     edx, [esi+124]
  3710 00002672 015640                                  add     [esi+64], edx
  3711 00002675 29D0                                    sub     eax, edx
  3712 00002677 D1E0                                    shl     eax, 1
  3713 00002679 BA8EB9B0BF                              mov     edx, 0BFB0B98Eh ; -COS1_0
  3714 0000267E F7EA                                    imul    edx
  3715 00002680 89567C                                  mov     [esi+124], edx
  3716 00002683 8B461C                                  mov     eax, [esi+28]   ; @@BF 7,24,+,COS0_7,1
  3717 00002686 8B5660                                  mov     edx, [esi+96]
  3718 00002689 01561C                                  add     [esi+28], edx
  3719 0000268C 29D0                                    sub     eax, edx
  3720 0000268E D1E0                                    shl     eax, 1
  3721 00002690 BAA71E6056                              mov     edx, 56601EA7h
  3722 00002695 F7EA                                    imul    edx
  3723 00002697 895660                                  mov     [esi+96], edx
  3724 0000269A 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,23,+,COS0_8,1
  3725 0000269D 8B565C                                  mov     edx, [esi+92]
  3726 000026A0 015620                                  add     [esi+32], edx
  3727 000026A3 29D0                                    sub     eax, edx
  3728 000026A5 D1E0                                    shl     eax, 1
  3729 000026A7 BAECF64C5F                              mov     edx, 5F4CF6ECh
  3730 000026AC F7EA                                    imul    edx
  3731 000026AE 89565C                                  mov     [esi+92], edx
  3732 000026B1 8B461C                                  mov     eax, [esi+28]   ; @@BF 7,8,+,COS1_7,4
  3733 000026B4 8B5620                                  mov     edx, [esi+32]
  3734 000026B7 01561C                                  add     [esi+28], edx
  3735 000026BA 29D0                                    sub     eax, edx
  3736 000026BC C1E004                                  shl     eax, 4
  3737 000026BF BA044E9E51                              mov     edx, 519E4E04h
  3738 000026C4 F7EA                                    imul    edx
  3739 000026C6 895620                                  mov     [esi+32], edx
  3740 000026C9 8B465C                                  mov     eax, [esi+92]   ; @@BF 23,24,-,COS1_7,4
  3741 000026CC 8B5660                                  mov     edx, [esi+96]
  3742 000026CF 01565C                                  add     [esi+92], edx
  3743 000026D2 29D0                                    sub     eax, edx
  3744 000026D4 C1E004                                  shl     eax, 4
  3745 000026D7 BAFCB161AE                              mov     edx, 0AE61B1FCh
  3746 000026DC F7EA                                    imul    edx
  3747 000026DE 895660                                  mov     [esi+96], edx
  3748 000026E1 8B06                                    mov     eax, [esi]      ; @@BF 0,7,+,COS2_0,1
  3749 000026E3 8B561C                                  mov     edx, [esi+28]
  3750 000026E6 0116                                    add     [esi], edx
  3751 000026E8 29D0                                    sub     eax, edx
  3752 000026EA D1E0                                    shl     eax, 1
  3753 000026EC BA46FB4041                              mov     edx, 4140FB46h
  3754 000026F1 F7EA                                    imul    edx
  3755 000026F3 89561C                                  mov     [esi+28], edx
  3756 000026F6 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,15,-,COS2_0,1
  3757 000026F9 8B563C                                  mov     edx, [esi+60]
  3758 000026FC 015620                                  add     [esi+32], edx
  3759 000026FF 29D0                                    sub     eax, edx
  3760 00002701 D1E0                                    shl     eax, 1
  3761 00002703 BABA04BFBE                              mov     edx, 0BEBF04BAh
  3762 00002708 F7EA                                    imul    edx
  3763 0000270A 89563C                                  mov     [esi+60], edx
  3764 0000270D 8B4640                                  mov     eax, [esi+64]   ; @@BF 16,23,+,COS2_0,1
  3765 00002710 8B565C                                  mov     edx, [esi+92]
  3766 00002713 015640                                  add     [esi+40h], edx
  3767 00002716 29D0                                    sub     eax, edx
  3768 00002718 D1E0                                    shl     eax, 1
  3769 0000271A BA46FB4041                              mov     edx, 4140FB46h
  3770 0000271F F7EA                                    imul    edx
  3771 00002721 89565C                                  mov     [esi+92], edx
  3772 00002724 8B4660                                  mov     eax, [esi+96]   ; @@BF 24,31,-,COS2_0,1
  3773 00002727 8B567C                                  mov     edx, [esi+124]
  3774 0000272A 015660                                  add     [esi+96], edx
  3775 0000272D 29D0                                    sub     eax, edx
  3776 0000272F D1E0                                    shl     eax, 1
  3777 00002731 BABA04BFBE                              mov     edx, 0BEBF04BAh
  3778 00002736 F7EA                                    imul    edx
  3779 00002738 89567C                                  mov     [esi+124], edx
  3780 0000273B 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,28,+,COS0_3,1
  3781 0000273E 8B5670                                  mov     edx, [esi+112]
  3782 00002741 01560C                                  add     [esi+12], edx
  3783 00002744 29D0                                    sub     eax, edx
  3784 00002746 D1E0                                    shl     eax, 1
  3785 00002748 BA2134F943                              mov     edx, 43F93421h
  3786 0000274D F7EA                                    imul    edx
  3787 0000274F 895670                                  mov     [esi+112], edx
  3788 00002752 8B4630                                  mov     eax, [esi+48]   ; @@BF 12,19,+,COS0_12,2
  3789 00002755 8B564C                                  mov     edx, [esi+76]
  3790 00002758 015630                                  add     [esi+48], edx
  3791 0000275B 29D0                                    sub     eax, edx
  3792 0000275D C1E002                                  shl     eax, 2
  3793 00002760 BA978DFC5E                              mov     edx, 5EFC8D97h
  3794 00002765 F7EA                                    imul    edx
  3795 00002767 89564C                                  mov     [esi+76], edx
  3796 0000276A 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,12,+,COS1_3,1
  3797 0000276D 8B5630                                  mov     edx, [esi+48]
  3798 00002770 01560C                                  add     [esi+12], edx
  3799 00002773 29D0                                    sub     eax, edx
  3800 00002775 D1E0                                    shl     eax, 1
  3801 00002777 BA630ECB52                              mov     edx, 52CB0E63h
  3802 0000277C F7EA                                    imul    edx
  3803 0000277E 895630                                  mov     [esi+48], edx
  3804 00002781 8B464C                                  mov     eax, [esi+76]   ; @@BF 19,28,-,COS1_3,1
  3805 00002784 8B5670                                  mov     edx, [esi+112]
  3806 00002787 01564C                                  add     [esi+76], edx
  3807 0000278A 29D0                                    sub     eax, edx
  3808 0000278C D1E0                                    shl     eax, 1
  3809 0000278E BA9DF134AD                              mov     edx, 0AD34F19Dh
  3810 00002793 F7EA                                    imul    edx
  3811 00002795 895670                                  mov     [esi+112], edx
  3812 00002798 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,27,+,COS0_4,1
  3813 0000279B 8B566C                                  mov     edx, [esi+108]
  3814 0000279E 015610                                  add     [esi+16], edx
  3815 000027A1 29D0                                    sub     eax, edx
  3816 000027A3 D1E0                                    shl     eax, 1
  3817 000027A5 BAC51BCC46                              mov     edx, 46CC1BC5h
  3818 000027AA F7EA                                    imul    edx
  3819 000027AC 89566C                                  mov     [esi+108], edx
  3820 000027AF 8B462C                                  mov     eax, [esi+44]   ; @@BF 11,20,+,COS0_11,2
  3821 000027B2 8B5650                                  mov     edx, [esi+80]
  3822 000027B5 01562C                                  add     [esi+44], edx
  3823 000027B8 29D0                                    sub     eax, edx
  3824 000027BA C1E002                                  shl     eax, 2
  3825 000027BD BA981AD84A                              mov     edx, 4AD81A98h
  3826 000027C2 F7EA                                    imul    edx
  3827 000027C4 895650                                  mov     [esi+80], edx
  3828 000027C7 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,11,+,COS1_4,1
  3829 000027CA 8B562C                                  mov     edx, [esi+44]
  3830 000027CD 015610                                  add     [esi+16], edx
  3831 000027D0 29D0                                    sub     eax, edx
  3832 000027D2 D1E0                                    shl     eax, 1
  3833 000027D4 BA2E40E264                              mov     edx, 64E2402Eh
  3834 000027D9 F7EA                                    imul    edx
  3835 000027DB 89562C                                  mov     [esi+44], edx
  3836 000027DE 8B4650                                  mov     eax, [esi+80]   ; @@BF 20,27,-,COS1_4,1
  3837 000027E1 8B566C                                  mov     edx, [esi+108]
  3838 000027E4 015650                                  add     [esi+80], edx
  3839 000027E7 29D0                                    sub     eax, edx
  3840 000027E9 D1E0                                    shl     eax, 1
  3841 000027EB BAD2BF1D9B                              mov     edx, 9B1DBFD2h
  3842 000027F0 F7EA                                    imul    edx
  3843 000027F2 89566C                                  mov     [esi+108], edx
  3844 000027F5 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,4,+,COS2_3,3
  3845 000027F8 8B5610                                  mov     edx, [esi+16]
  3846 000027FB 01560C                                  add     [esi+12], edx
  3847 000027FE 29D0                                    sub     eax, edx
  3848 00002800 C1E003                                  shl     eax, 3
  3849 00002803 BA42670352                              mov     edx, 52036742h
  3850 00002808 F7EA                                    imul    edx
  3851 0000280A 895610                                  mov     [esi+16], edx
  3852 0000280D 8B462C                                  mov     eax, [esi+44]   ; @@BF 11,12,-,COS2_3,3
  3853 00002810 8B5630                                  mov     edx, [esi+48]
  3854 00002813 01562C                                  add     [esi+44], edx
  3855 00002816 29D0                                    sub     eax, edx
  3856 00002818 C1E003                                  shl     eax, 3
  3857 0000281B BABE98FCAD                              mov     edx, 0ADFC98BEh ; -COS2_3
  3858 00002820 F7EA                                    imul    edx
  3859 00002822 895630                                  mov     [esi+48], edx
  3860 00002825 8B464C                                  mov     eax, [esi+76]   ; @@BF 19,20,+,COS2_3,3
  3861 00002828 8B5650                                  mov     edx, [esi+80]
  3862 0000282B 01564C                                  add     [esi+4Ch], edx
  3863 0000282E 29D0                                    sub     eax, edx
  3864 00002830 C1E003                                  shl     eax, 3
  3865 00002833 BA42670352                              mov     edx, 52036742h  ; +COS2_3
  3866 00002838 F7EA                                    imul    edx
  3867 0000283A 895650                                  mov     [esi+80], edx
  3868 0000283D 8B466C                                  mov     eax, [esi+108]  ; @@BF 27,28,-,COS2_3,3
  3869 00002840 8B5670                                  mov     edx, [esi+112]
  3870 00002843 01566C                                  add     [esi+108], edx
  3871 00002846 29D0                                    sub     eax, edx
  3872 00002848 C1E003                                  shl     eax, 3
  3873 0000284B BABE98FCAD                              mov     edx, 0ADFC98BEh
  3874 00002850 F7EA                                    imul    edx
  3875 00002852 895670                                  mov     [esi+112], edx
  3876 00002855 8B06                                    mov     eax, [esi]      ; @@BF 0,3,+,COS3_0,1
  3877 00002857 8B560C                                  mov     edx, [esi+12]
  3878 0000285A 0116                                    add     [esi], edx
  3879 0000285C 29D0                                    sub     eax, edx
  3880 0000285E D1E0                                    shl     eax, 1
  3881 00002860 BAF0E94545                              mov     edx, 4545E9F0h
  3882 00002865 F7EA                                    imul    edx
  3883 00002867 89560C                                  mov     [esi+12], edx
  3884 0000286A 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,7,-,COS3_0,1
  3885 0000286D 8B561C                                  mov     edx, [esi+28]
  3886 00002870 015610                                  add     [esi+16], edx
  3887 00002873 29D0                                    sub     eax, edx
  3888 00002875 D1E0                                    shl     eax, 1
  3889 00002877 BA1016BABA                              mov     edx, 0BABA1610h
  3890 0000287C F7EA                                    imul    edx
  3891 0000287E 89561C                                  mov     [esi+28], edx
  3892 00002881 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,11,+,COS3_0,1
  3893 00002884 8B562C                                  mov     edx, [esi+44]
  3894 00002887 015620                                  add     [esi+32], edx
  3895 0000288A 29D0                                    sub     eax, edx
  3896 0000288C D1E0                                    shl     eax, 1
  3897 0000288E BAF0E94545                              mov     edx, 4545E9F0h
  3898 00002893 F7EA                                    imul    edx
  3899 00002895 89562C                                  mov     [esi+44], edx
  3900 00002898 8B4630                                  mov     eax, [esi+48]   ; @@BF 12,15,-,COS3_0,1
  3901 0000289B 8B563C                                  mov     edx, [esi+60]
  3902 0000289E 015630                                  add     [esi+48], edx
  3903 000028A1 29D0                                    sub     eax, edx
  3904 000028A3 D1E0                                    shl     eax, 1
  3905 000028A5 BA1016BABA                              mov     edx, 0BABA1610h
  3906 000028AA F7EA                                    imul    edx
  3907 000028AC 89563C                                  mov     [esi+60], edx
  3908 000028AF 8B4640                                  mov     eax, [esi+64]   ; @@BF 16,19,+,COS3_0,1
  3909 000028B2 8B564C                                  mov     edx, [esi+76]
  3910 000028B5 015640                                  add     [esi+64], edx
  3911 000028B8 29D0                                    sub     eax, edx
  3912 000028BA D1E0                                    shl     eax, 1
  3913 000028BC BAF0E94545                              mov     edx, 4545E9F0h
  3914 000028C1 F7EA                                    imul    edx
  3915 000028C3 89564C                                  mov     [esi+76], edx
  3916 000028C6 8B4650                                  mov     eax, [esi+80]   ; @@BF 20,23,-,COS3_0,1
  3917 000028C9 8B565C                                  mov     edx, [esi+92]
  3918 000028CC 015650                                  add     [esi+80], edx
  3919 000028CF 29D0                                    sub     eax, edx
  3920 000028D1 D1E0                                    shl     eax, 1
  3921 000028D3 BA1016BABA                              mov     edx, 0BABA1610h ; -COS3_0
  3922 000028D8 F7EA                                    imul    edx
  3923 000028DA 89565C                                  mov     [esi+92], edx
  3924 000028DD 8B4660                                  mov     eax, [esi+96]   ; @@BF 24,27,+,COS3_0,1
  3925 000028E0 8B566C                                  mov     edx, [esi+108]
  3926 000028E3 015660                                  add     [esi+96], edx
  3927 000028E6 29D0                                    sub     eax, edx
  3928 000028E8 D1E0                                    shl     eax, 1
  3929 000028EA BAF0E94545                              mov     edx, 4545E9F0h  ; +COS3_0
  3930 000028EF F7EA                                    imul    edx
  3931 000028F1 89566C                                  mov     [esi+108], edx
  3932 000028F4 8B4670                                  mov     eax, [esi+112]  ; @@BF 28,31,-,COS3_0,1
  3933 000028F7 8B567C                                  mov     edx, [esi+124]
  3934 000028FA 015670                                  add     [esi+112], edx
  3935 000028FD 29D0                                    sub     eax, edx
  3936 000028FF D1E0                                    shl     eax, 1
  3937 00002901 BA1016BABA                              mov     edx, 0BABA1610h
  3938 00002906 F7EA                                    imul    edx
  3939 00002908 89567C                                  mov     [esi+124], edx
  3940 0000290B 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,30,+,COS0_1,1
  3941 0000290E 8B5678                                  mov     edx, [esi+120]
  3942 00002911 015604                                  add     [esi+4], edx
  3943 00002914 29D0                                    sub     eax, edx
  3944 00002916 D1E0                                    shl     eax, 1
  3945 00002918 BABD45B340                              mov     edx, 40B345BDh
  3946 0000291D F7EA                                    imul    edx
  3947 0000291F 895678                                  mov     [esi+120], edx
  3948 00002922 8B4638                                  mov     eax, [esi+56]   ; @@BF 14,17,+,COS0_14,3
  3949 00002925 8B5644                                  mov     edx, [esi+68]
  3950 00002928 015638                                  add     [esi+56], edx
  3951 0000292B 29D0                                    sub     eax, edx
  3952 0000292D C1E003                                  shl     eax, 3
  3953 00002930 BAD0200B6D                              mov     edx, 6D0B20D0h
  3954 00002935 F7EA                                    imul    edx
  3955 00002937 895644                                  mov     [esi+68], edx
  3956 0000293A 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,14,+,COS1_1,1
  3957 0000293D 8B5638                                  mov     edx, [esi+56]
  3958 00002940 015604                                  add     [esi+4], edx
  3959 00002943 29D0                                    sub     eax, edx
  3960 00002945 D1E0                                    shl     eax, 1
  3961 00002947 BA103CE142                              mov     edx, 42E13C10h
  3962 0000294C F7EA                                    imul    edx
  3963 0000294E 895638                                  mov     [esi+56], edx
  3964 00002951 8B4644                                  mov     eax, [esi+68]   ; @@BF 17,30,-,COS1_1,1
  3965 00002954 8B5678                                  mov     edx, [esi+120]
  3966 00002957 015644                                  add     [esi+68], edx
  3967 0000295A 29D0                                    sub     eax, edx
  3968 0000295C D1E0                                    shl     eax, 1
  3969 0000295E BAF0C31EBD                              mov     edx, 0BD1EC3F0h
  3970 00002963 F7EA                                    imul    edx
  3971 00002965 895678                                  mov     [esi+120], edx
  3972 00002968 8B4618                                  mov     eax, [esi+24]   ; @@BF 6,25,+,COS0_6,1
  3973 0000296B 8B5664                                  mov     edx, [esi+100]
  3974 0000296E 015618                                  add     [esi+24], edx
  3975 00002971 29D0                                    sub     eax, edx
  3976 00002973 D1E0                                    shl     eax, 1
  3977 00002975 BA1237AE4F                              mov     edx, 4FAE3712h
  3978 0000297A F7EA                                    imul    edx
  3979 0000297C 895664                                  mov     [esi+100], edx
  3980 0000297F 8B4624                                  mov     eax, [esi+36]   ; @@BF 9,22,+,COS0_9,1
  3981 00002982 8B5658                                  mov     edx, [esi+88]
  3982 00002985 015624                                  add     [esi+36], edx
  3983 00002988 29D0                                    sub     eax, edx
  3984 0000298A D1E0                                    shl     eax, 1
  3985 0000298C BA27CF6F6B                              mov     edx, 6B6FCF27h
  3986 00002991 F7EA                                    imul    edx
  3987 00002993 895658                                  mov     [esi+88], edx
  3988 00002996 8B4618                                  mov     eax, [esi+24]   ; @@BF 6, 9,+,COS1_6,2
  3989 00002999 8B5624                                  mov     edx, [esi+36]
  3990 0000299C 015618                                  add     [esi+24], edx
  3991 0000299F 29D0                                    sub     eax, edx
  3992 000029A1 C1E002                                  shl     eax, 2
  3993 000029A4 BAC2923C6E                              mov     edx, 6E3C92C2h
  3994 000029A9 F7EA                                    imul    edx
  3995 000029AB 895624                                  mov     [esi+36], edx
  3996 000029AE 8B4658                                  mov     eax, [esi+88]   ; @@BF 22,25,-,COS1_6,2
  3997 000029B1 8B5664                                  mov     edx, [esi+100]
  3998 000029B4 015658                                  add     [esi+88], edx
  3999 000029B7 29D0                                    sub     eax, edx
  4000 000029B9 C1E002                                  shl     eax, 2
  4001 000029BC BA3E6DC391                              mov     edx, 91C36D3Eh
  4002 000029C1 F7EA                                    imul    edx
  4003 000029C3 895664                                  mov     [esi+100], edx
  4004 000029C6 8B4604                                  mov     eax, [esi+4]    ; @@BF 1, 6,+,COS2_1,1
  4005 000029C9 8B5618                                  mov     edx, [esi+24]
  4006 000029CC 015604                                  add     [esi+4], edx
  4007 000029CF 29D0                                    sub     eax, edx
  4008 000029D1 D1E0                                    shl     eax, 1
  4009 000029D3 BA88DEF84C                              mov     edx, 4CF8DE88h
  4010 000029D8 F7EA                                    imul    edx
  4011 000029DA 895618                                  mov     [esi+24], edx
  4012 000029DD 8B4624                                  mov     eax, [esi+36]   ; @@BF 9,14,-,COS2_1,1
  4013 000029E0 8B5638                                  mov     edx, [esi+56]
  4014 000029E3 015624                                  add     [esi+36], edx
  4015 000029E6 29D0                                    sub     eax, edx
  4016 000029E8 D1E0                                    shl     eax, 1
  4017 000029EA BA782107B3                              mov     edx, 0B3072178h
  4018 000029EF F7EA                                    imul    edx
  4019 000029F1 895638                                  mov     [esi+56], edx
  4020 000029F4 8B4644                                  mov     eax, [esi+68]   ; @@BF 17,22,+,COS2_1,1
  4021 000029F7 8B5658                                  mov     edx, [esi+88]
  4022 000029FA 015644                                  add     [esi+68], edx
  4023 000029FD 29D0                                    sub     eax, edx
  4024 000029FF D1E0                                    shl     eax, 1
  4025 00002A01 BA88DEF84C                              mov     edx, 4CF8DE88h
  4026 00002A06 F7EA                                    imul    edx
  4027 00002A08 895658                                  mov     [esi+88], edx
  4028 00002A0B 8B4664                                  mov     eax, [esi+100]  ; @@BF 25,30,-,COS2_1,1
  4029 00002A0E 8B5678                                  mov     edx, [esi+120]
  4030 00002A11 015664                                  add     [esi+100], edx
  4031 00002A14 29D0                                    sub     eax, edx
  4032 00002A16 D1E0                                    shl     eax, 1
  4033 00002A18 BA782107B3                              mov     edx, 0B3072178h
  4034 00002A1D F7EA                                    imul    edx
  4035 00002A1F 895678                                  mov     [esi+120], edx
  4036 00002A22 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,29,+,COS0_2,1
  4037 00002A25 8B5674                                  mov     edx, [esi+116]
  4038 00002A28 015608                                  add     [esi+8], edx
  4039 00002A2B 29D0                                    sub     eax, edx
  4040 00002A2D D1E0                                    shl     eax, 1
  4041 00002A2F BA6E2DFA41                              mov     edx, 41FA2D6Eh
  4042 00002A34 F7EA                                    imul    edx
  4043 00002A36 895674                                  mov     [esi+116], edx
  4044 00002A39 8B4634                                  mov     eax, [esi+52]   ; @@BF 13,18,+,COS0_13,3
  4045 00002A3C 8B5648                                  mov     edx, [esi+72]
  4046 00002A3F 015634                                  add     [esi+52], edx
  4047 00002A42 29D0                                    sub     eax, edx
  4048 00002A44 C1E003                                  shl     eax, 3
  4049 00002A47 BA9057D941                              mov     edx, 41D95790h
  4050 00002A4C F7EA                                    imul    edx
  4051 00002A4E 895648                                  mov     [esi+72], edx
  4052 00002A51 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,13,+,COS1_2,1
  4053 00002A54 8B5634                                  mov     edx, [esi+52]
  4054 00002A57 015608                                  add     [esi+8], edx
  4055 00002A5A 29D0                                    sub     eax, edx
  4056 00002A5C D1E0                                    shl     eax, 1
  4057 00002A5E BA459F9148                              mov     edx, 48919F45h
  4058 00002A63 F7EA                                    imul    edx
  4059 00002A65 895634                                  mov     [esi+52], edx
  4060 00002A68 8B4648                                  mov     eax, [esi+72]   ; @@BF 18,29,-,COS1_2,1
  4061 00002A6B 8B5674                                  mov     edx, [esi+116]
  4062 00002A6E 015648                                  add     [esi+72], edx
  4063 00002A71 29D0                                    sub     eax, edx
  4064 00002A73 D1E0                                    shl     eax, 1
  4065 00002A75 BABB606EB7                              mov     edx, 0B76E60BBh
  4066 00002A7A F7EA                                    imul    edx
  4067 00002A7C 895674                                  mov     [esi+116], edx
  4068 00002A7F 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,26,+,COS0_5,1
  4069 00002A82 8B5668                                  mov     edx, [esi+104]
  4070 00002A85 015614                                  add     [esi+20], edx
  4071 00002A88 29D0                                    sub     eax, edx
  4072 00002A8A D1E0                                    shl     eax, 1
  4073 00002A8C BAF19C9D4A                              mov     edx, 4A9D9CF1h
  4074 00002A91 F7EA                                    imul    edx
  4075 00002A93 895668                                  mov     [esi+104], edx
  4076 00002A96 8B4628                                  mov     eax, [esi+40]   ; @@BF 10,21,+,COS0_10,1
  4077 00002A99 8B5654                                  mov     edx, [esi+84]
  4078 00002A9C 015628                                  add     [esi+40], edx
  4079 00002A9F 29D0                                    sub     eax, edx
  4080 00002AA1 D1E0                                    shl     eax, 1
  4081 00002AA3 BAB41D7D7C                              mov     edx, 7C7D1DB4h
  4082 00002AA8 F7EA                                    imul    edx
  4083 00002AAA 895654                                  mov     [esi+84], edx
  4084 00002AAD 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,10,+,COS1_5,2
  4085 00002AB0 8B5628                                  mov     edx, [esi+40]
  4086 00002AB3 015614                                  add     [esi+20], edx
  4087 00002AB6 29D0                                    sub     eax, edx
  4088 00002AB8 C1E002                                  shl     eax, 2
  4089 00002ABB BAAA24E243                              mov     edx, 43E224AAh
  4090 00002AC0 F7EA                                    imul    edx
  4091 00002AC2 895628                                  mov     [esi+40], edx
  4092 00002AC5 8B4654                                  mov     eax, [esi+84]   ; @@BF 21,26,-,COS1_5,2
  4093 00002AC8 8B5668                                  mov     edx, [esi+104]
  4094 00002ACB 015654                                  add     [esi+84], edx
  4095 00002ACE 29D0                                    sub     eax, edx
  4096 00002AD0 C1E002                                  shl     eax, 2
  4097 00002AD3 BA56DB1DBC                              mov     edx, 0BC1DDB56h
  4098 00002AD8 F7EA                                    imul    edx
  4099 00002ADA 895668                                  mov     [esi+104], edx
  4100 00002ADD 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,5,+,COS2_2,1
  4101 00002AE0 8B5614                                  mov     edx, [esi+20]
  4102 00002AE3 015608                                  add     [esi+8], edx
  4103 00002AE6 29D0                                    sub     eax, edx
  4104 00002AE8 D1E0                                    shl     eax, 1
  4105 00002AEA BABF6B3273                              mov     edx, 73326BBFh  ; +COS2_2
  4106 00002AEF F7EA                                    imul    edx
  4107 00002AF1 895614                                  mov     [esi+20], edx
  4108 00002AF4 8B4628                                  mov     eax, [esi+40]   ; @@BF 10,13,-,COS2_2,1
  4109 00002AF7 8B5634                                  mov     edx, [esi+52]
  4110 00002AFA 015628                                  add     [esi+40], edx
  4111 00002AFD 29D0                                    sub     eax, edx
  4112 00002AFF D1E0                                    shl     eax, 1
  4113 00002B01 BA4194CD8C                              mov     edx, 8CCD9441h  ; -COS2_2
  4114 00002B06 F7EA                                    imul    edx
  4115 00002B08 895634                                  mov     [esi+52], edx
  4116 00002B0B 8B4648                                  mov     eax, [esi+72]   ; @@BF 18,21,+,COS2_2,1
  4117 00002B0E 8B5654                                  mov     edx, [esi+84]
  4118 00002B11 015648                                  add     [esi+72], edx
  4119 00002B14 29D0                                    sub     eax, edx
  4120 00002B16 D1E0                                    shl     eax, 1
  4121 00002B18 BABF6B3273                              mov     edx, 73326BBFh
  4122 00002B1D F7EA                                    imul    edx
  4123 00002B1F 895654                                  mov     [esi+84], edx
  4124 00002B22 8B4668                                  mov     eax, [esi+104]  ; @@BF 26,29,-,COS2_2,1
  4125 00002B25 8B5674                                  mov     edx, [esi+116]
  4126 00002B28 015668                                  add     [esi+104], edx
  4127 00002B2B 29D0                                    sub     eax, edx
  4128 00002B2D D1E0                                    shl     eax, 1
  4129 00002B2F BA4194CD8C                              mov     edx, 8CCD9441h
  4130 00002B34 F7EA                                    imul    edx
  4131 00002B36 895674                                  mov     [esi+116], edx
  4132 00002B39 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,2,+,COS3_1,2
  4133 00002B3C 8B5608                                  mov     edx, [esi+8]
  4134 00002B3F 015604                                  add     [esi+4], edx
  4135 00002B42 29D0                                    sub     eax, edx
  4136 00002B44 C1E002                                  shl     eax, 2
  4137 00002B47 BA46BA9E53                              mov     edx, 539EBA46h
  4138 00002B4C F7EA                                    imul    edx
  4139 00002B4E 895608                                  mov     [esi+8], edx
  4140 00002B51 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,6,-,COS3_1,2
  4141 00002B54 8B5618                                  mov     edx, [esi+24]
  4142 00002B57 015614                                  add     [esi+20], edx
  4143 00002B5A 29D0                                    sub     eax, edx
  4144 00002B5C C1E002                                  shl     eax, 2
  4145 00002B5F BABA4561AC                              mov     edx, 0AC6145BAh
  4146 00002B64 F7EA                                    imul    edx
  4147 00002B66 895618                                  mov     [esi+24], edx
  4148 00002B69 8B4624                                  mov     eax, [esi+36]   ; IF rate_shift LT 2
  4149                                                                          ; @@BF 9,10,+,COS3_1,2
  4150 00002B6C 8B5628                                  mov     edx, [esi+40]
  4151 00002B6F 015624                                  add     [esi+36], edx
  4152 00002B72 29D0                                    sub     eax, edx
  4153 00002B74 C1E002                                  shl     eax, 2
  4154 00002B77 BA46BA9E53                              mov     edx, 539EBA46h
  4155 00002B7C F7EA                                    imul    edx
  4156 00002B7E 895628                                  mov     [esi+40], edx
  4157 00002B81 8B4634                                  mov     eax, [esi+52]   ; @@BF 13,14,-,COS3_1,2
  4158 00002B84 8B5638                                  mov     edx, [esi+56]
  4159 00002B87 015634                                  add     [esi+52], edx
  4160 00002B8A 29D0                                    sub     eax, edx
  4161 00002B8C C1E002                                  shl     eax, 2
  4162 00002B8F BABA4561AC                              mov     edx, 0AC6145BAh
  4163 00002B94 F7EA                                    imul    edx
  4164 00002B96 895638                                  mov     [esi+56], edx   ; ENDIF
  4165 00002B99 8B4644                                  mov     eax, [esi+68]   ; @@BF 17,18,+,COS3_1,2
  4166 00002B9C 8B5648                                  mov     edx, [esi+72]
  4167 00002B9F 015644                                  add     [esi+68], edx
  4168 00002BA2 29D0                                    sub     eax, edx
  4169 00002BA4 C1E002                                  shl     eax, 2
  4170 00002BA7 BA46BA9E53                              mov     edx, 539EBA46h
  4171 00002BAC F7EA                                    imul    edx
  4172 00002BAE 895648                                  mov     [esi+72], edx
  4173 00002BB1 8B4654                                  mov     eax, [esi+84]   ; @@BF 21,22,-,COS3_1,2
  4174 00002BB4 8B5658                                  mov     edx, [esi+88]
  4175 00002BB7 015654                                  add     [esi+84], edx
  4176 00002BBA 29D0                                    sub     eax, edx
  4177 00002BBC C1E002                                  shl     eax, 2
  4178 00002BBF BABA4561AC                              mov     edx, 0AC6145BAh
  4179 00002BC4 F7EA                                    imul    edx
  4180 00002BC6 895658                                  mov     [esi+88], edx
  4181 00002BC9 8B4664                                  mov     eax, [esi+100]  ; @@BF 25,26,+,COS3_1,2
  4182 00002BCC 8B5668                                  mov     edx, [esi+104]
  4183 00002BCF 015664                                  add     [esi+100], edx
  4184 00002BD2 29D0                                    sub     eax, edx
  4185 00002BD4 C1E002                                  shl     eax, 2
  4186 00002BD7 BA46BA9E53                              mov     edx, 539EBA46h
  4187 00002BDC F7EA                                    imul    edx
  4188 00002BDE 895668                                  mov     [esi+104], edx
  4189 00002BE1 8B4674                                  mov     eax, [esi+116]  ; @@BF 29,30,-,COS3_1,2
  4190 00002BE4 8B5678                                  mov     edx, [esi+120]
  4191 00002BE7 015674                                  add     [esi+116], edx
  4192 00002BEA 29D0                                    sub     eax, edx
  4193 00002BEC C1E002                                  shl     eax, 2
  4194 00002BEF BABA4561AC                              mov     edx, 0AC6145BAh
  4195 00002BF4 F7EA                                    imul    edx
  4196 00002BF6 895678                                  mov     [esi+120], edx
  4197 00002BF9 8B06                                    mov     eax, [esi]      ; @@BF1 macro a, b, c, d
  4198                                                                          ;   @@BF  a, b,+,COS4_0, 1
  4199                                                                          ;   @@BF  c, d,-,COS4_0, 1
  4200                                                                          ;   @@ADD c, d
  4201                                                                          ;  endm
  4202                                                                          ; @@BF1 0,1,2,3
  4203 00002BFB 8B5604                                  mov     edx, [esi+4]    ; @@BF 0,1,+,COS4_0,1
  4204 00002BFE 0116                                    add     [esi], edx
  4205 00002C00 29D0                                    sub     eax, edx
  4206 00002C02 D1E0                                    shl     eax, 1
  4207 00002C04 BA9A79825A                              mov     edx, 5A82799Ah  ; +COS4_0
  4208 00002C09 F7EA                                    imul    edx
  4209 00002C0B 895604                                  mov     [esi+4], edx
  4210 00002C0E 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,3,-,COS4_0,1
  4211 00002C11 8B560C                                  mov     edx, [esi+12]
  4212 00002C14 015608                                  add     [esi+8], edx
  4213 00002C17 29D0                                    sub     eax, edx
  4214 00002C19 D1E0                                    shl     eax, 1
  4215 00002C1B BA66867DA5                              mov     edx, 0A57D8666h ; -COS4_0
  4216 00002C20 F7EA                                    imul    edx
  4217 00002C22 89560C                                  mov     [esi+12], edx
  4218 00002C25 8B460C                                  mov     eax, [esi+12]   ; @@ADD 2,3
  4219 00002C28 014608                                  add     [esi+8], eax
  4220 00002C2B 8B4610                                  mov     eax, [esi+16]   ; @@BF2 macro a, b, c, d
  4221                                                                          ;   @@BF  a, b,+,COS4_0, 1
  4222                                                                          ;   @@BF  c, d,-,COS4_0, 1
  4223                                                                          ;   @@ADD c, d
  4224                                                                          ;   @@ADD a, c
  4225                                                                          ;   @@ADD c, b
  4226                                                                          ;   @@ADD b, d
  4227                                                                          ;  endm
  4228                                                                          ; @@BF2 4,5,6,7
  4229 00002C2E 8B5614                                  mov     edx, [esi+20]   ; @@BF 4,5,+,COS4_0,1
  4230 00002C31 015610                                  add     [esi+16], edx
  4231 00002C34 29D0                                    sub     eax, edx
  4232 00002C36 D1E0                                    shl     eax, 1
  4233 00002C38 BA9A79825A                              mov     edx, 5A82799Ah
  4234 00002C3D F7EA                                    imul    edx
  4235 00002C3F 895614                                  mov     [esi+20], edx
  4236 00002C42 8B4618                                  mov     eax, [esi+24]   ; @@BF 6,7,-,COS4_0,1
  4237 00002C45 8B561C                                  mov     edx, [esi+28]
  4238 00002C48 015618                                  add     [esi+24], edx
  4239 00002C4B 29D0                                    sub     eax, edx
  4240 00002C4D D1E0                                    shl     eax, 1
  4241 00002C4F BA66867DA5                              mov     edx, 0A57D8666h
  4242 00002C54 F7EA                                    imul    edx
  4243 00002C56 89561C                                  mov     [esi+28], edx
  4244 00002C59 8B461C                                  mov     eax, [esi+28]   ; @@ADD macro dst,src
  4245                                                                          ;   IF (rate_shift EQ 0) or (dst LT 16)
  4246                                                                          ;    ;tab[a] += tab[b]
  4247                                                                          ;    mov  eax,dword ptr [esi+src*4]
  4248                                                                          ;    add  dword ptr [esi+dst*4],eax
  4249                                                                          ;   ENDIF
  4250                                                                          ;  endm
  4251                                                                          ; @@ADD 6,7
  4252 00002C5C 014618                                  add     [esi+24], eax
  4253 00002C5F 8B4618                                  mov     eax, [esi+24]   ; @@ADD 4,6
  4254 00002C62 014610                                  add     [esi+16], eax
  4255 00002C65 8B4614                                  mov     eax, [esi+20]   ; @@ADD 6,5
  4256 00002C68 014618                                  add     [esi+24], eax
  4257 00002C6B 8B461C                                  mov     eax, [esi+28]   ; @@ADD 5,7
  4258 00002C6E 014614                                  add     [esi+20], eax
  4259 00002C71 8B4620                                  mov     eax, [esi+32]   ; IF rate_shift LT 2
  4260                                                                          ; @@BF1 8,9,10,11
  4261 00002C74 8B5624                                  mov     edx, [esi+36]   ; @@BF 8,9,+,COS4_0,1
  4262 00002C77 015620                                  add     [esi+32], edx
  4263 00002C7A 29D0                                    sub     eax, edx
  4264 00002C7C D1E0                                    shl     eax, 1
  4265 00002C7E BA9A79825A                              mov     edx, 5A82799Ah
  4266 00002C83 F7EA                                    imul    edx
  4267 00002C85 895624                                  mov     [esi+36], edx
  4268 00002C88 8B4628                                  mov     eax, [esi+40]   ; @@BF 10,11,-,COS4_0,1
  4269 00002C8B 8B562C                                  mov     edx, [esi+44]
  4270 00002C8E 015628                                  add     [esi+40], edx
  4271 00002C91 29D0                                    sub     eax, edx
  4272 00002C93 D1E0                                    shl     eax, 1
  4273 00002C95 BA66867DA5                              mov     edx, 0A57D8666h
  4274 00002C9A F7EA                                    imul    edx
  4275 00002C9C 89562C                                  mov     [esi+44], edx
  4276 00002C9F 8B462C                                  mov     eax, [esi+44]   ; @@ADD 10,11
  4277 00002CA2 014628                                  add     [esi+40], eax
  4278 00002CA5 8B4630                                  mov     eax, [esi+48]   ; @@BF2 12,13,14,15
  4279 00002CA8 8B5634                                  mov     edx, [esi+52]   ; @@BF 12,13,+,COS4_0,1
  4280 00002CAB 015630                                  add     [esi+48], edx
  4281 00002CAE 29D0                                    sub     eax, edx
  4282 00002CB0 D1E0                                    shl     eax, 1
  4283 00002CB2 BA9A79825A                              mov     edx, 5A82799Ah
  4284 00002CB7 F7EA                                    imul    edx
  4285 00002CB9 895634                                  mov     [esi+52], edx
  4286 00002CBC 8B4638                                  mov     eax, [esi+56]   ; @@BF 14,15,-,COS4_0,1
  4287 00002CBF 8B563C                                  mov     edx, [esi+60]
  4288 00002CC2 015638                                  add     [esi+56], edx
  4289 00002CC5 29D0                                    sub     eax, edx
  4290 00002CC7 D1E0                                    shl     eax, 1
  4291 00002CC9 BA66867DA5                              mov     edx, 0A57D8666h
  4292 00002CCE F7EA                                    imul    edx
  4293 00002CD0 89563C                                  mov     [esi+60], edx
  4294 00002CD3 8B463C                                  mov     eax, [esi+60]   ; @@ADD 14,15
  4295 00002CD6 014638                                  add     [esi+56], eax
  4296 00002CD9 8B4638                                  mov     eax, [esi+56]   ; @@ADD 12,14
  4297 00002CDC 014630                                  add     [esi+48], eax
  4298 00002CDF 8B4634                                  mov     eax, [esi+52]   ; @@ADD 14,13
  4299 00002CE2 014638                                  add     [esi+56], eax
  4300 00002CE5 8B463C                                  mov     eax, [esi+60]   ; @@ADD 13,15
  4301 00002CE8 014634                                  add     [esi+52], eax   ; ENDIF
  4302 00002CEB 8B4640                                  mov     eax, [esi+64]   ; @@BF1 16,17,18,19
  4303 00002CEE 8B5644                                  mov     edx, [esi+68]
  4304 00002CF1 015640                                  add     [esi+64], edx
  4305 00002CF4 29D0                                    sub     eax, edx
  4306 00002CF6 D1E0                                    shl     eax, 1
  4307 00002CF8 BA9A79825A                              mov     edx, 5A82799Ah  ; +COS4_0
  4308 00002CFD F7EA                                    imul    edx
  4309 00002CFF 895644                                  mov     [esi+68], edx
  4310 00002D02 8B4648                                  mov     eax, [esi+72]
  4311 00002D05 8B564C                                  mov     edx, [esi+76]
  4312 00002D08 015648                                  add     [esi+72], edx
  4313 00002D0B 29D0                                    sub     eax, edx
  4314 00002D0D D1E0                                    shl     eax, 1
  4315 00002D0F BA66867DA5                              mov     edx, 0A57D8666h ; -COS4_0
  4316 00002D14 F7EA                                    imul    edx
  4317 00002D16 89564C                                  mov     [esi+76], edx
  4318 00002D19 8B464C                                  mov     eax, [esi+76]   ; @@ADD 18,19
  4319 00002D1C 014648                                  add     [esi+72], eax
  4320 00002D1F 8B4650                                  mov     eax, [esi+80]   ; @@BF2 20,21,22,23
  4321 00002D22 8B5654                                  mov     edx, [esi+84]
  4322 00002D25 015650                                  add     [esi+80], edx
  4323 00002D28 29D0                                    sub     eax, edx
  4324 00002D2A D1E0                                    shl     eax, 1
  4325 00002D2C BA9A79825A                              mov     edx, 5A82799Ah
  4326 00002D31 F7EA                                    imul    edx
  4327 00002D33 895654                                  mov     [esi+84], edx
  4328 00002D36 8B4658                                  mov     eax, [esi+88]
  4329 00002D39 8B565C                                  mov     edx, [esi+92]
  4330 00002D3C 015658                                  add     [esi+88], edx
  4331 00002D3F 29D0                                    sub     eax, edx
  4332 00002D41 D1E0                                    shl     eax, 1
  4333 00002D43 BA66867DA5                              mov     edx, 0A57D8666h
  4334 00002D48 F7EA                                    imul    edx
  4335 00002D4A 89565C                                  mov     [esi+92], edx
  4336 00002D4D 8B465C                                  mov     eax, [esi+92]   ; @@ADD 22,23
  4337 00002D50 014658                                  add     [esi+88], eax
  4338 00002D53 8B4658                                  mov     eax, [esi+88]   ; @@ADD 20,22
  4339 00002D56 014650                                  add     [esi+80], eax
  4340 00002D59 8B4654                                  mov     eax, [esi+84]
  4341 00002D5C 014658                                  add     [esi+88], eax
  4342 00002D5F 8B465C                                  mov     eax, [esi+92]
  4343 00002D62 014654                                  add     [esi+84], eax
  4344 00002D65 8B4660                                  mov     eax, [esi+96]   ; @@BF1 24,25,26,27
  4345 00002D68 8B5664                                  mov     edx, [esi+100]
  4346 00002D6B 015660                                  add     [esi+96], edx
  4347 00002D6E 29D0                                    sub     eax, edx
  4348 00002D70 D1E0                                    shl     eax, 1
  4349 00002D72 BA9A79825A                              mov     edx, 5A82799Ah
  4350 00002D77 F7EA                                    imul    edx
  4351 00002D79 895664                                  mov     [esi+100], edx
  4352 00002D7C 8B4668                                  mov     eax, [esi+104]
  4353 00002D7F 8B566C                                  mov     edx, [esi+108]
  4354 00002D82 015668                                  add     [esi+104], edx
  4355 00002D85 29D0                                    sub     eax, edx
  4356 00002D87 D1E0                                    shl     eax, 1
  4357 00002D89 BA66867DA5                              mov     edx, 0A57D8666h
  4358 00002D8E F7EA                                    imul    edx
  4359 00002D90 89566C                                  mov     [esi+108], edx
  4360 00002D93 8B466C                                  mov     eax, [esi+108]
  4361 00002D96 014668                                  add     [esi+104], eax
  4362 00002D99 8B4670                                  mov     eax, [esi+112]  ; @@BF2 28,29,30,31
  4363 00002D9C 8B5674                                  mov     edx, [esi+116]
  4364 00002D9F 015670                                  add     [esi+112], edx
  4365 00002DA2 29D0                                    sub     eax, edx
  4366 00002DA4 D1E0                                    shl     eax, 1
  4367 00002DA6 BA9A79825A                              mov     edx, 5A82799Ah
  4368 00002DAB F7EA                                    imul    edx
  4369 00002DAD 895674                                  mov     [esi+116], edx
  4370 00002DB0 8B4678                                  mov     eax, [esi+120]
  4371 00002DB3 8B567C                                  mov     edx, [esi+124]
  4372 00002DB6 015678                                  add     [esi+120], edx
  4373 00002DB9 29D0                                    sub     eax, edx
  4374 00002DBB D1E0                                    shl     eax, 1
  4375 00002DBD BA66867DA5                              mov     edx, 0A57D8666h
  4376 00002DC2 F7EA                                    imul    edx
  4377 00002DC4 89567C                                  mov     [esi+124], edx
  4378 00002DC7 8B467C                                  mov     eax, [esi+124]
  4379 00002DCA 014678                                  add     [esi+120], eax
  4380 00002DCD 8B4678                                  mov     eax, [esi+120]
  4381 00002DD0 014670                                  add     [esi+112], eax
  4382 00002DD3 8B4674                                  mov     eax, [esi+116]
  4383 00002DD6 014678                                  add     [esi+120], eax
  4384 00002DD9 8B467C                                  mov     eax, [esi+124]
  4385 00002DDC 014674                                  add     [esi+116], eax
  4386 00002DDF 8B06                                    mov     eax, [esi]      ; @@OUT macro dst,src1,src2
  4387                                                                          ; IF ((dst AND ((1 SHL rate_shift)-1)) EQ 0)
  4388                                                                          ;    mov eax,dword ptr [esi+src1*4]
  4389                                                                          ;    IFDIFI <src2>,<->
  4390                                                                          ;      add eax,dword ptr [esi+src2*4]
  4391                                                                          ;    ENDIF
  4392                                                                          ;    IF SYNTH32
  4393                                                                          ;       mov dword ptr [edi+dst*4],eax
  4394                                                                          ;       IF (LONG_WINDOW EQ 0)
  4395                                                                          ;          mov dword ptr [edi+dst*4+512*4],eax
  4396                                                                          ;       ENDIF
  4397                                                                          ;    ELSE
  4398                                                                          ;        ......
  4399                                                                          ;    ENDIF
  4400                                                                          ; @@OUT 0,0,-
  4401 00002DE1 8907                                    mov     [edi], eax      ; mov dword ptr [edi+dst*4],eax
  4402 00002DE3 8B4604                                  mov     eax, [esi+4]    ; @@OUT 16,1, -
  4403                                                                          ; mov eax,dword ptr [esi+src1*4]
  4404 00002DE6 894740                                  mov     [edi+64], eax   ; mov dword ptr [edi+dst*4],eax
  4405 00002DE9 8B4608                                  mov     eax, [esi+8]    ; @@OUT 8,2,-
  4406 00002DEC 894720                                  mov     [edi+32], eax
  4407 00002DEF 8B460C                                  mov     eax, [esi+12]   ; @@OUT 24,3,-
  4408 00002DF2 894760                                  mov     [edi+96], eax
  4409 00002DF5 8B4610                                  mov     eax, [esi+16]   ; @@OUT 4,4,-
  4410 00002DF8 894710                                  mov     [edi+16], eax
  4411 00002DFB 8B4614                                  mov     eax, [esi+20]   ; @@OUT 20,5,-
  4412 00002DFE 894750                                  mov     [edi+80], eax
  4413 00002E01 8B4618                                  mov     eax, [esi+24]   ; @@OUT 12,6,-
  4414 00002E04 894730                                  mov     [edi+48], eax
  4415 00002E07 8B461C                                  mov     eax, [esi+28]   ; @@OUT 28,7,-
  4416 00002E0A 894770                                  mov     [edi+112], eax
  4417 00002E0D 8B4620                                  mov     eax, [esi+32]   ; @@OUT 2,8,12
  4418 00002E10 034630                                  add     eax, [esi+48]   ; add eax,dword ptr [esi+src2*4]
  4419 00002E13 894708                                  mov     [edi+8], eax
  4420 00002E16 8B4624                                  mov     eax, [esi+36]   ; @@OUT 18,9,13
  4421 00002E19 034634                                  add     eax, [esi+52]   ; add eax,dword ptr [esi+src2*4]
  4422 00002E1C 894748                                  mov     [edi+72], eax
  4423 00002E1F 8B4628                                  mov     eax, [esi+40]   ; @@OUT 10,10,14
  4424 00002E22 034638                                  add     eax, [esi+56]
  4425 00002E25 894728                                  mov     [edi+40], eax
  4426 00002E28 8B462C                                  mov     eax, [esi+44]   ; @@OUT 26,11,15
  4427 00002E2B 03463C                                  add     eax, [esi+60]
  4428 00002E2E 894768                                  mov     [edi+104], eax
  4429 00002E31 8B4630                                  mov     eax, [esi+48]   ; @@OUT 6,12,10
  4430 00002E34 034628                                  add     eax, [esi+40]
  4431 00002E37 894718                                  mov     [edi+24], eax
  4432 00002E3A 8B4634                                  mov     eax, [esi+52]   ; @@OUT 22,13,11
  4433 00002E3D 03462C                                  add     eax, [esi+44]
  4434 00002E40 894758                                  mov     [edi+88], eax
  4435 00002E43 8B4638                                  mov     eax, [esi+56]   ; @@OUT 14,14,9
  4436 00002E46 034624                                  add     eax, [esi+36]
  4437 00002E49 894738                                  mov     [edi+56], eax
  4438 00002E4C 8B463C                                  mov     eax, [esi+60]   ; @@OUT 30,15,-
  4439 00002E4F 894778                                  mov     [edi+120], eax
  4440 00002E52 8B4670                                  mov     eax, [esi+112]  ; @@ADD 24,28
  4441 00002E55 014660                                  add     [esi+96], eax
  4442 00002E58 8B4668                                  mov     eax, [esi+104]  ; @@ADD 28,26
  4443 00002E5B 014670                                  add     [esi+112], eax
  4444 00002E5E 8B4678                                  mov     eax, [esi+120]  ; @@ADD 26,30
  4445 00002E61 014668                                  add     [esi+104], eax
  4446 00002E64 8B4664                                  mov     eax, [esi+100]  ; @@ADD 30,25
  4447 00002E67 014678                                  add     [esi+120], eax
  4448 00002E6A 8B4674                                  mov     eax, [esi+116]  ; @@ADD 25,29
  4449 00002E6D 014664                                  add     [esi+100], eax
  4450 00002E70 8B466C                                  mov     eax, [esi+108]  ; @@ADD 29,27
  4451 00002E73 014674                                  add     [esi+116], eax
  4452 00002E76 8B467C                                  mov     eax, [esi+124]  ; @@ADD 27,31
  4453 00002E79 01466C                                  add     [esi+108], eax
  4454 00002E7C 8B4640                                  mov     eax, [esi+64]   ; @@OUT 1,16,24
  4455 00002E7F 034660                                  add     eax, [esi+96]
  4456 00002E82 894704                                  mov     [edi+4], eax
  4457 00002E85 8B4644                                  mov     eax, [esi+68]   ; @@OUT 17,17,25
  4458 00002E88 034664                                  add     eax, [esi+100]
  4459 00002E8B 894744                                  mov     [edi+68], eax
  4460 00002E8E 8B4648                                  mov     eax, [esi+72]   ; @@OUT 9,18,26
  4461 00002E91 034668                                  add     eax, [esi+104]
  4462 00002E94 894724                                  mov     [edi+36], eax
  4463 00002E97 8B464C                                  mov     eax, [esi+76]   ; @@OUT 25,19,27
  4464 00002E9A 03466C                                  add     eax, [esi+108]
  4465 00002E9D 894764                                  mov     [edi+100], eax
  4466 00002EA0 8B4650                                  mov     eax, [esi+80]   ; @@OUT 5,20,28
  4467 00002EA3 034670                                  add     eax, [esi+112]
  4468 00002EA6 894714                                  mov     [edi+20], eax
  4469 00002EA9 8B4654                                  mov     eax, [esi+84]   ; @@OUT 21,21,29
  4470 00002EAC 034674                                  add     eax, [esi+116]
  4471 00002EAF 894754                                  mov     [edi+84], eax
  4472 00002EB2 8B4658                                  mov     eax, [esi+88]   ; @@OUT 13,22,30
  4473 00002EB5 034678                                  add     eax, [esi+120]
  4474 00002EB8 894734                                  mov     [edi+52], eax
  4475 00002EBB 8B465C                                  mov     eax, [esi+92]   ; @@OUT 29,23,31
  4476 00002EBE 03467C                                  add     eax, [esi+124]
  4477 00002EC1 894774                                  mov     [edi+116], eax
  4478 00002EC4 8B4660                                  mov     eax, [esi+96]   ; @@OUT 3,24,20
  4479 00002EC7 034650                                  add     eax, [esi+80]
  4480 00002ECA 89470C                                  mov     [edi+12], eax
  4481 00002ECD 8B4664                                  mov     eax, [esi+100]  ; @@OUT 19,25,21
  4482 00002ED0 034654                                  add     eax, [esi+84]
  4483 00002ED3 89474C                                  mov     [edi+76], eax
  4484 00002ED6 8B4668                                  mov     eax, [esi+104]  ; @@OUT 11,26,22
  4485 00002ED9 034658                                  add     eax, [esi+88]
  4486 00002EDC 89472C                                  mov     [edi+44], eax
  4487 00002EDF 8B466C                                  mov     eax, [esi+108]  ; @@OUT 27,27,23
  4488 00002EE2 03465C                                  add     eax, [esi+92]
  4489 00002EE5 89476C                                  mov     [edi+108], eax
  4490 00002EE8 8B4670                                  mov     eax, [esi+112]  ; @@OUT 7,28,18
  4491 00002EEB 034648                                  add     eax, [esi+72]
  4492 00002EEE 89471C                                  mov     [edi+28], eax
  4493 00002EF1 8B4674                                  mov     eax, [esi+116]  ; @@OUT 23,29,19
  4494 00002EF4 03464C                                  add     eax, [esi+76]
  4495 00002EF7 89475C                                  mov     [edi+92], eax
  4496 00002EFA 8B4678                                  mov     eax, [esi+120]  ; @@OUT 15,30,17
  4497 00002EFD 034644                                  add     eax, [esi+68]
  4498 00002F00 89473C                                  mov     [edi+60], eax
  4499 00002F03 8B467C                                  mov     eax, [esi+124]  ; @@OUT 31,31,-
  4500 00002F06 89477C                                  mov     [edi+124], eax
  4501 00002F09 C3                                      retn
  4502                                  
  4503                                  
  4504                                  ; =============== S U B R O U T I N E =======================================
  4505                                  
  4506                                  
  4507                                  mp3_dct32_shift_1:
  4508 00002F0A 8B467C                                  mov     eax, [esi+124]  ; mp3_dct32_macro macro rate_shift ; rate_shift = 1
  4509 00002F0D 0106                                    add     [esi], eax      ; @@BF macro a,b,sign,cos,shift
  4510                                                                          ; @@need_a equ (rate_shift EQ 0) or (a LT 16) ; a = 0
  4511                                                                          ; @@need_b equ (rate_shift EQ 0) or (b LT 16) ; b = 31
  4512                                                                          ; IF @@need_a AND @@need_b ; rate_shift = 0
  4513                                                                          ;    mov eax,dword ptr [esi+a*4]
  4514                                                                          ;    mov edx,dword ptr [esi+b*4]
  4515                                                                          ;    add dword ptr [esi+a*4],edx
  4516                                                                          ; ELSEIF @@need_a
  4517                                                                          ;    mov eax,dword ptr [esi+b*4]
  4518                                                                          ;    add dword ptr [esi+a*4],eax
  4519                                                                          ;
  4520                                                                          ; @@BF 0,31,+,COS0_0,1
  4521 00002F0F 8B4640                                  mov     eax, [esi+64]   ; @@BF 15,16,+,COS0_15,5
  4522 00002F12 01463C                                  add     [esi+60], eax
  4523 00002F15 8B06                                    mov     eax, [esi]      ; @@BF 0,15,+,COS1_0,1
  4524 00002F17 8B563C                                  mov     edx, [esi+60]
  4525 00002F1A 0116                                    add     [esi], edx
  4526 00002F1C 29D0                                    sub     eax, edx
  4527 00002F1E D1E0                                    shl     eax, 1
  4528 00002F20 BA72464F40                              mov     edx, 404F4672h  ; COS1_0
  4529 00002F25 F7EA                                    imul    edx
  4530 00002F27 89563C                                  mov     [esi+60], edx
  4531 00002F2A 8B4660                                  mov     eax, [esi+96]   ; skip @@BF 16,31,-,COS1_0,1
  4532                                                                          ; @@BF 7,24,+,COS0_7,1
  4533 00002F2D 01461C                                  add     [esi+28], eax
  4534 00002F30 8B465C                                  mov     eax, [esi+92]   ; @@BF 8,23,+,COS0_8,1
  4535 00002F33 014620                                  add     [esi+32], eax
  4536 00002F36 8B461C                                  mov     eax, [esi+28]   ; @@BF 7,8,+,COS1_7,4
  4537 00002F39 8B5620                                  mov     edx, [esi+32]
  4538 00002F3C 01561C                                  add     [esi+28], edx
  4539 00002F3F 29D0                                    sub     eax, edx
  4540 00002F41 C1E004                                  shl     eax, 4
  4541 00002F44 BA044E9E51                              mov     edx, 519E4E04h  ; COS1_7
  4542 00002F49 F7EA                                    imul    edx
  4543 00002F4B 895620                                  mov     [esi+32], edx
  4544 00002F4E 8B06                                    mov     eax, [esi]      ; skip @@BF 23,24,-,COS1_7,4
  4545                                                                          ; @@BF 0,7,+,COS2_0,1
  4546 00002F50 8B561C                                  mov     edx, [esi+28]
  4547 00002F53 0116                                    add     [esi], edx
  4548 00002F55 29D0                                    sub     eax, edx
  4549 00002F57 D1E0                                    shl     eax, 1
  4550 00002F59 BA46FB4041                              mov     edx, 4140FB46h  ; COS2_0
  4551 00002F5E F7EA                                    imul    edx
  4552 00002F60 89561C                                  mov     [esi+28], edx
  4553 00002F63 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,15,-,COS2_0,1
  4554 00002F66 8B563C                                  mov     edx, [esi+60]
  4555 00002F69 015620                                  add     [esi+32], edx
  4556 00002F6C 29D0                                    sub     eax, edx
  4557 00002F6E D1E0                                    shl     eax, 1
  4558 00002F70 BABA04BFBE                              mov     edx, 0BEBF04BAh ; -COS2_0
  4559 00002F75 F7EA                                    imul    edx
  4560 00002F77 89563C                                  mov     [esi+60], edx
  4561 00002F7A 8B4670                                  mov     eax, [esi+112]  ; skip @@BF 16,23,+,COS2_0,1
  4562                                                                          ;      @@BF 24,31,-,COS2_0,1
  4563                                                                          ; @@BF 3,28,+,COS0_3,1
  4564 00002F7D 01460C                                  add     [esi+12], eax
  4565 00002F80 8B464C                                  mov     eax, [esi+76]   ; @@BF 12,19,+,COS0_12,2
  4566 00002F83 014630                                  add     [esi+48], eax
  4567 00002F86 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,12,+,COS1_3,1
  4568 00002F89 8B5630                                  mov     edx, [esi+48]
  4569 00002F8C 01560C                                  add     [esi+12], edx
  4570 00002F8F 29D0                                    sub     eax, edx
  4571 00002F91 D1E0                                    shl     eax, 1
  4572 00002F93 BA630ECB52                              mov     edx, 52CB0E63h
  4573 00002F98 F7EA                                    imul    edx
  4574 00002F9A 895630                                  mov     [esi+48], edx
  4575 00002F9D 8B466C                                  mov     eax, [esi+108]  ; @@BF 4,27,+,COS0_4,1
  4576 00002FA0 014610                                  add     [esi+16], eax
  4577 00002FA3 8B4650                                  mov     eax, [esi+80]   ; @@BF 11,20,+,COS0_11,2
  4578 00002FA6 01462C                                  add     [esi+44], eax
  4579 00002FA9 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,11,+,COS1_4,1
  4580 00002FAC 8B562C                                  mov     edx, [esi+44]
  4581 00002FAF 015610                                  add     [esi+16], edx
  4582 00002FB2 29D0                                    sub     eax, edx
  4583 00002FB4 D1E0                                    shl     eax, 1
  4584 00002FB6 BA2E40E264                              mov     edx, 64E2402Eh  ; COS1_4
  4585 00002FBB F7EA                                    imul    edx
  4586 00002FBD 89562C                                  mov     [esi+44], edx
  4587 00002FC0 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,4,+,COS2_3,3
  4588 00002FC3 8B5610                                  mov     edx, [esi+16]
  4589 00002FC6 01560C                                  add     [esi+12], edx
  4590 00002FC9 29D0                                    sub     eax, edx
  4591 00002FCB C1E003                                  shl     eax, 3
  4592 00002FCE BA42670352                              mov     edx, 52036742h
  4593 00002FD3 F7EA                                    imul    edx
  4594 00002FD5 895610                                  mov     [esi+16], edx
  4595 00002FD8 8B462C                                  mov     eax, [esi+44]   ; @@BF 11,12,-,COS2_3,3
  4596 00002FDB 8B5630                                  mov     edx, [esi+48]
  4597 00002FDE 01562C                                  add     [esi+44], edx
  4598 00002FE1 29D0                                    sub     eax, edx
  4599 00002FE3 C1E003                                  shl     eax, 3
  4600 00002FE6 BABE98FCAD                              mov     edx, 0ADFC98BEh ; -COS2_3
  4601 00002FEB F7EA                                    imul    edx
  4602 00002FED 895630                                  mov     [esi+48], edx
  4603 00002FF0 8B06                                    mov     eax, [esi]      ; @@BF 0,3,+,COS3_0,1
  4604 00002FF2 8B560C                                  mov     edx, [esi+12]
  4605 00002FF5 0116                                    add     [esi], edx
  4606 00002FF7 29D0                                    sub     eax, edx
  4607 00002FF9 D1E0                                    shl     eax, 1
  4608 00002FFB BAF0E94545                              mov     edx, 4545E9F0h
  4609 00003000 F7EA                                    imul    edx
  4610 00003002 89560C                                  mov     [esi+12], edx
  4611 00003005 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,7,-,COS3_0,1
  4612 00003008 8B561C                                  mov     edx, [esi+28]
  4613 0000300B 015610                                  add     [esi+16], edx
  4614 0000300E 29D0                                    sub     eax, edx
  4615 00003010 D1E0                                    shl     eax, 1
  4616 00003012 BA1016BABA                              mov     edx, 0BABA1610h
  4617 00003017 F7EA                                    imul    edx
  4618 00003019 89561C                                  mov     [esi+28], edx
  4619 0000301C 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,11,+,COS3_0,1
  4620 0000301F 8B562C                                  mov     edx, [esi+44]
  4621 00003022 015620                                  add     [esi+32], edx
  4622 00003025 29D0                                    sub     eax, edx
  4623 00003027 D1E0                                    shl     eax, 1
  4624 00003029 BAF0E94545                              mov     edx, 4545E9F0h
  4625 0000302E F7EA                                    imul    edx
  4626 00003030 89562C                                  mov     [esi+44], edx
  4627 00003033 8B4630                                  mov     eax, [esi+48]   ; @@BF 12,15,-,COS3_0,1
  4628 00003036 8B563C                                  mov     edx, [esi+60]
  4629 00003039 015630                                  add     [esi+48], edx
  4630 0000303C 29D0                                    sub     eax, edx
  4631 0000303E D1E0                                    shl     eax, 1
  4632 00003040 BA1016BABA                              mov     edx, 0BABA1610h ; -COS3_0
  4633 00003045 F7EA                                    imul    edx
  4634 00003047 89563C                                  mov     [esi+60], edx
  4635 0000304A 8B4678                                  mov     eax, [esi+120]  ; @@BF 1,30,+,COS0_1,1
  4636 0000304D 014604                                  add     [esi+4], eax
  4637 00003050 8B4644                                  mov     eax, [esi+68]   ; @@BF 14,17,+,COS0_14,3
  4638 00003053 014638                                  add     [esi+56], eax
  4639 00003056 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,14,+,COS1_1,1
  4640 00003059 8B5638                                  mov     edx, [esi+56]
  4641 0000305C 015604                                  add     [esi+4], edx
  4642 0000305F 29D0                                    sub     eax, edx
  4643 00003061 D1E0                                    shl     eax, 1
  4644 00003063 BA103CE142                              mov     edx, 42E13C10h
  4645 00003068 F7EA                                    imul    edx
  4646 0000306A 895638                                  mov     [esi+56], edx
  4647 0000306D 8B4664                                  mov     eax, [esi+100]  ; @@BF 6,25,+,COS0_6,1
  4648 00003070 014618                                  add     [esi+24], eax
  4649 00003073 8B4658                                  mov     eax, [esi+88]   ; @@BF 9,22,+,COS0_9,1
  4650 00003076 014624                                  add     [esi+36], eax
  4651 00003079 8B4618                                  mov     eax, [esi+24]   ; @@BF 6,9,+,COS1_6,2
  4652 0000307C 8B5624                                  mov     edx, [esi+36]
  4653 0000307F 015618                                  add     [esi+24], edx
  4654 00003082 29D0                                    sub     eax, edx
  4655 00003084 C1E002                                  shl     eax, 2
  4656 00003087 BAC2923C6E                              mov     edx, 6E3C92C2h  ; +COS1_6
  4657 0000308C F7EA                                    imul    edx
  4658 0000308E 895624                                  mov     [esi+36], edx
  4659 00003091 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,6,+,COS2_1,1
  4660 00003094 8B5618                                  mov     edx, [esi+24]
  4661 00003097 015604                                  add     [esi+4], edx
  4662 0000309A 29D0                                    sub     eax, edx
  4663 0000309C D1E0                                    shl     eax, 1
  4664 0000309E BA88DEF84C                              mov     edx, 4CF8DE88h
  4665 000030A3 F7EA                                    imul    edx
  4666 000030A5 895618                                  mov     [esi+24], edx
  4667 000030A8 8B4624                                  mov     eax, [esi+36]   ; @@BF 9,14,-,COS2_1,1
  4668 000030AB 8B5638                                  mov     edx, [esi+56]
  4669 000030AE 015624                                  add     [esi+36], edx
  4670 000030B1 29D0                                    sub     eax, edx
  4671 000030B3 D1E0                                    shl     eax, 1
  4672 000030B5 BA782107B3                              mov     edx, 0B3072178h ; -COS2_1
  4673 000030BA F7EA                                    imul    edx
  4674 000030BC 895638                                  mov     [esi+56], edx
  4675 000030BF 8B4674                                  mov     eax, [esi+116]  ; @@BF 2,29,+,COS0_2,1
  4676 000030C2 014608                                  add     [esi+8], eax
  4677 000030C5 8B4648                                  mov     eax, [esi+72]   ; @@BF 13,18,+,COS0_13,3
  4678 000030C8 014634                                  add     [esi+52], eax
  4679 000030CB 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,13,+,COS1_2,1
  4680 000030CE 8B5634                                  mov     edx, [esi+52]
  4681 000030D1 015608                                  add     [esi+8], edx
  4682 000030D4 29D0                                    sub     eax, edx
  4683 000030D6 D1E0                                    shl     eax, 1
  4684 000030D8 BA459F9148                              mov     edx, 48919F45h
  4685 000030DD F7EA                                    imul    edx
  4686 000030DF 895634                                  mov     [esi+52], edx
  4687 000030E2 8B4668                                  mov     eax, [esi+104]  ; @@BF 5,26,+,COS0_5,1
  4688 000030E5 014614                                  add     [esi+20], eax
  4689 000030E8 8B4654                                  mov     eax, [esi+84]   ; @@BF 10,21,+,COS0_10,1
  4690 000030EB 014628                                  add     [esi+40], eax
  4691 000030EE 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,10,+,COS1_5,2
  4692 000030F1 8B5628                                  mov     edx, [esi+40]
  4693 000030F4 015614                                  add     [esi+20], edx
  4694 000030F7 29D0                                    sub     eax, edx
  4695 000030F9 C1E002                                  shl     eax, 2
  4696 000030FC BAAA24E243                              mov     edx, 43E224AAh
  4697 00003101 F7EA                                    imul    edx
  4698 00003103 895628                                  mov     [esi+40], edx
  4699 00003106 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,5,+,COS2_2,1
  4700 00003109 8B5614                                  mov     edx, [esi+20]
  4701 0000310C 015608                                  add     [esi+8], edx
  4702 0000310F 29D0                                    sub     eax, edx
  4703 00003111 D1E0                                    shl     eax, 1
  4704 00003113 BABF6B3273                              mov     edx, 73326BBFh  ; COS2_2
  4705 00003118 F7EA                                    imul    edx
  4706 0000311A 895614                                  mov     [esi+20], edx
  4707 0000311D 8B4628                                  mov     eax, [esi+40]   ; @@BF 10,13,-,COS2_2,1
  4708 00003120 8B5634                                  mov     edx, [esi+52]
  4709 00003123 015628                                  add     [esi+40], edx
  4710 00003126 29D0                                    sub     eax, edx
  4711 00003128 D1E0                                    shl     eax, 1
  4712 0000312A BA4194CD8C                              mov     edx, 8CCD9441h  ; -COS2_2
  4713 0000312F F7EA                                    imul    edx
  4714 00003131 895634                                  mov     [esi+52], edx
  4715 00003134 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,2,+,COS3_1,2
  4716 00003137 8B5608                                  mov     edx, [esi+8]
  4717 0000313A 015604                                  add     [esi+4], edx
  4718 0000313D 29D0                                    sub     eax, edx
  4719 0000313F C1E002                                  shl     eax, 2
  4720 00003142 BA46BA9E53                              mov     edx, 539EBA46h
  4721 00003147 F7EA                                    imul    edx
  4722 00003149 895608                                  mov     [esi+8], edx
  4723 0000314C 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,6,-,COS3_1,2
  4724 0000314F 8B5618                                  mov     edx, [esi+24]
  4725 00003152 015614                                  add     [esi+20], edx
  4726 00003155 29D0                                    sub     eax, edx
  4727 00003157 C1E002                                  shl     eax, 2
  4728 0000315A BABA4561AC                              mov     edx, 0AC6145BAh
  4729 0000315F F7EA                                    imul    edx
  4730 00003161 895618                                  mov     [esi+24], edx
  4731 00003164 8B4624                                  mov     eax, [esi+36]   ; IF rate_shift LT 2
  4732                                                                          ; @@BF 9,10,+,COS3_1,2
  4733 00003167 8B5628                                  mov     edx, [esi+40]
  4734 0000316A 015624                                  add     [esi+36], edx
  4735 0000316D 29D0                                    sub     eax, edx
  4736 0000316F C1E002                                  shl     eax, 2
  4737 00003172 BA46BA9E53                              mov     edx, 539EBA46h  ; +COS3_1
  4738 00003177 F7EA                                    imul    edx
  4739 00003179 895628                                  mov     [esi+40], edx
  4740 0000317C 8B4634                                  mov     eax, [esi+52]   ; @@BF 13,14,-,COS3_1,2
  4741 0000317F 8B5638                                  mov     edx, [esi+56]
  4742 00003182 015634                                  add     [esi+52], edx
  4743 00003185 29D0                                    sub     eax, edx
  4744 00003187 C1E002                                  shl     eax, 2
  4745 0000318A BABA4561AC                              mov     edx, 0AC6145BAh ; -COS3_1
  4746 0000318F F7EA                                    imul    edx
  4747 00003191 895638                                  mov     [esi+56], edx   ; ENDIF
  4748 00003194 8B06                                    mov     eax, [esi]      ; @@BF1 macro a, b, c, d
  4749                                                                          ;   @@BF  a, b,+,COS4_0, 1
  4750                                                                          ;   @@BF  c, d,-,COS4_0, 1
  4751                                                                          ;   @@ADD c, d
  4752                                                                          ;  endm
  4753                                                                          ; @@BF1 0,1,2,3
  4754 00003196 8B5604                                  mov     edx, [esi+4]    ; @@BF 0,1,+,COS4_0,1
  4755 00003199 0116                                    add     [esi], edx
  4756 0000319B 29D0                                    sub     eax, edx
  4757 0000319D D1E0                                    shl     eax, 1
  4758 0000319F BA9A79825A                              mov     edx, 5A82799Ah
  4759 000031A4 F7EA                                    imul    edx
  4760 000031A6 895604                                  mov     [esi+4], edx
  4761 000031A9 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,3,+,COS4_0,1
  4762 000031AC 8B560C                                  mov     edx, [esi+12]
  4763 000031AF 015608                                  add     [esi+8], edx
  4764 000031B2 29D0                                    sub     eax, edx
  4765 000031B4 D1E0                                    shl     eax, 1
  4766 000031B6 BA66867DA5                              mov     edx, 0A57D8666h
  4767 000031BB F7EA                                    imul    edx
  4768 000031BD 89560C                                  mov     [esi+12], edx
  4769 000031C0 8B460C                                  mov     eax, [esi+12]   ; @@ADD 2,3
  4770 000031C3 014608                                  add     [esi+8], eax
  4771 000031C6 8B4610                                  mov     eax, [esi+16]   ; @@BF2 macro a, b, c, d
  4772                                                                          ;   @@BF  a, b,+,COS4_0, 1
  4773                                                                          ;   @@BF  c, d,-,COS4_0, 1
  4774                                                                          ;   @@ADD c, d
  4775                                                                          ;   @@ADD a, c
  4776                                                                          ;   @@ADD c, b
  4777                                                                          ;   @@ADD b, d
  4778                                                                          ;  endm
  4779                                                                          ; @@BF2 4,5,6,7
  4780 000031C9 8B5614                                  mov     edx, [esi+20]   ; @@BF 4,5,+,COS4_0,1
  4781 000031CC 015610                                  add     [esi+16], edx
  4782 000031CF 29D0                                    sub     eax, edx
  4783 000031D1 D1E0                                    shl     eax, 1
  4784 000031D3 BA9A79825A                              mov     edx, 5A82799Ah  ; +COS4_0
  4785 000031D8 F7EA                                    imul    edx
  4786 000031DA 895614                                  mov     [esi+20], edx
  4787 000031DD 8B4618                                  mov     eax, [esi+24]   ; @@BF 6,7,-,COS4_0,1
  4788 000031E0 8B561C                                  mov     edx, [esi+28]
  4789 000031E3 015618                                  add     [esi+24], edx
  4790 000031E6 29D0                                    sub     eax, edx
  4791 000031E8 D1E0                                    shl     eax, 1
  4792 000031EA BA66867DA5                              mov     edx, 0A57D8666h ; -COS4_0
  4793 000031EF F7EA                                    imul    edx
  4794 000031F1 89561C                                  mov     [esi+28], edx
  4795 000031F4 8B461C                                  mov     eax, [esi+28]   ; @@ADD macro dst,src
  4796                                                                          ;   IF (rate_shift EQ 0) or (dst LT 16)
  4797                                                                          ;    ;tab[a] += tab[b]
  4798                                                                          ;    mov  eax,dword ptr [esi+src*4]
  4799                                                                          ;    add  dword ptr [esi+dst*4],eax
  4800                                                                          ;   ENDIF
  4801                                                                          ;  endm
  4802                                                                          ; @@ADD 6,7
  4803 000031F7 014618                                  add     [esi+24], eax
  4804 000031FA 8B4618                                  mov     eax, [esi+24]   ; @@ADD 4,6
  4805 000031FD 014610                                  add     [esi+16], eax
  4806 00003200 8B4614                                  mov     eax, [esi+20]   ; @@ADD 6,5
  4807 00003203 014618                                  add     [esi+24], eax
  4808 00003206 8B461C                                  mov     eax, [esi+28]   ; @@ADD 5,7
  4809 00003209 014614                                  add     [esi+20], eax
  4810 0000320C 8B4620                                  mov     eax, [esi+32]   ; IF rate_shift LT 2
  4811                                                                          ; @@BF1 8,9,10,11
  4812 0000320F 8B5624                                  mov     edx, [esi+36]
  4813 00003212 015620                                  add     [esi+32], edx
  4814 00003215 29D0                                    sub     eax, edx
  4815 00003217 D1E0                                    shl     eax, 1
  4816 00003219 BA9A79825A                              mov     edx, 5A82799Ah
  4817 0000321E F7EA                                    imul    edx
  4818 00003220 895624                                  mov     [esi+36], edx
  4819 00003223 8B4628                                  mov     eax, [esi+40]
  4820 00003226 8B562C                                  mov     edx, [esi+44]
  4821 00003229 015628                                  add     [esi+40], edx
  4822 0000322C 29D0                                    sub     eax, edx
  4823 0000322E D1E0                                    shl     eax, 1
  4824 00003230 BA66867DA5                              mov     edx, 0A57D8666h
  4825 00003235 F7EA                                    imul    edx
  4826 00003237 89562C                                  mov     [esi+44], edx
  4827 0000323A 8B462C                                  mov     eax, [esi+44]
  4828 0000323D 014628                                  add     [esi+40], eax
  4829 00003240 8B4630                                  mov     eax, [esi+48]   ; @@BF2 12,13,14,15
  4830 00003243 8B5634                                  mov     edx, [esi+52]
  4831 00003246 015630                                  add     [esi+48], edx
  4832 00003249 29D0                                    sub     eax, edx
  4833 0000324B D1E0                                    shl     eax, 1
  4834 0000324D BA9A79825A                              mov     edx, 5A82799Ah
  4835 00003252 F7EA                                    imul    edx
  4836 00003254 895634                                  mov     [esi+52], edx
  4837 00003257 8B4638                                  mov     eax, [esi+56]
  4838 0000325A 8B563C                                  mov     edx, [esi+60]
  4839 0000325D 015638                                  add     [esi+56], edx
  4840 00003260 29D0                                    sub     eax, edx
  4841 00003262 D1E0                                    shl     eax, 1
  4842 00003264 BA66867DA5                              mov     edx, 0A57D8666h
  4843 00003269 F7EA                                    imul    edx
  4844 0000326B 89563C                                  mov     [esi+60], edx
  4845 0000326E 8B463C                                  mov     eax, [esi+60]
  4846 00003271 014638                                  add     [esi+56], eax
  4847 00003274 8B4638                                  mov     eax, [esi+56]
  4848 00003277 014630                                  add     [esi+48], eax
  4849 0000327A 8B4634                                  mov     eax, [esi+52]
  4850 0000327D 014638                                  add     [esi+56], eax
  4851 00003280 8B463C                                  mov     eax, [esi+60]
  4852 00003283 014634                                  add     [esi+52], eax
  4853 00003286 8B06                                    mov     eax, [esi]      ; @@OUT macro dst,src1,src2
  4854                                                                          ; IF ((dst AND ((1 SHL rate_shift)-1)) EQ 0)
  4855                                                                          ;    mov eax,dword ptr [esi+src1*4]
  4856                                                                          ;    IFDIFI <src2>,<->
  4857                                                                          ;      add eax,dword ptr [esi+src2*4]
  4858                                                                          ;    ENDIF
  4859                                                                          ;    IF SYNTH32
  4860                                                                          ;       mov dword ptr [edi+dst*4],eax
  4861                                                                          ;       IF (LONG_WINDOW EQ 0)
  4862                                                                          ;          mov dword ptr [edi+dst*4+512*4],eax
  4863                                                                          ;       ENDIF
  4864                                                                          ;    ELSE
  4865                                                                          ;        ......
  4866                                                                          ;    ENDIF
  4867                                                                          ; @@OUT 0,0,-
  4868 00003288 8907                                    mov     [edi], eax
  4869 0000328A 8B4604                                  mov     eax, [esi+4]    ; @@OUT 16,1,-
  4870 0000328D 894740                                  mov     [edi+64], eax
  4871 00003290 8B4608                                  mov     eax, [esi+8]    ; @@OUT 8,2,-
  4872 00003293 894720                                  mov     [edi+32], eax
  4873 00003296 8B460C                                  mov     eax, [esi+12]   ; @@OUT 24,3,-
  4874 00003299 894760                                  mov     [edi+96], eax
  4875 0000329C 8B4610                                  mov     eax, [esi+16]   ; @@OUT 4,4,-
  4876 0000329F 894710                                  mov     [edi+16], eax
  4877 000032A2 8B4614                                  mov     eax, [esi+20]   ; @@OUT 20,5,-
  4878 000032A5 894750                                  mov     [edi+80], eax
  4879 000032A8 8B4618                                  mov     eax, [esi+24]   ; @@OUT 12,6,-
  4880 000032AB 894730                                  mov     [edi+48], eax
  4881 000032AE 8B461C                                  mov     eax, [esi+28]   ; @@OUT 28,7,-
  4882 000032B1 894770                                  mov     [edi+112], eax
  4883 000032B4 8B4620                                  mov     eax, [esi+32]   ; @@OUT 2,8,12
  4884 000032B7 034630                                  add     eax, [esi+48]
  4885 000032BA 894708                                  mov     [edi+8], eax
  4886 000032BD 8B4624                                  mov     eax, [esi+36]   ; @@OUT 18,9,13
  4887 000032C0 034634                                  add     eax, [esi+52]
  4888 000032C3 894748                                  mov     [edi+72], eax
  4889 000032C6 8B4628                                  mov     eax, [esi+40]   ; @@OUT 10,10,14
  4890 000032C9 034638                                  add     eax, [esi+56]
  4891 000032CC 894728                                  mov     [edi+40], eax
  4892 000032CF 8B462C                                  mov     eax, [esi+44]   ; @@OUT 26,11,15
  4893 000032D2 03463C                                  add     eax, [esi+60]
  4894 000032D5 894768                                  mov     [edi+104], eax
  4895 000032D8 8B4630                                  mov     eax, [esi+48]   ; @@OUT 6,12,10
  4896 000032DB 034628                                  add     eax, [esi+40]
  4897 000032DE 894718                                  mov     [edi+24], eax
  4898 000032E1 8B4634                                  mov     eax, [esi+52]   ; @@OUT 22,13,11
  4899 000032E4 03462C                                  add     eax, [esi+44]
  4900 000032E7 894758                                  mov     [edi+88], eax
  4901 000032EA 8B4638                                  mov     eax, [esi+56]   ; @@OUT 14,14,9
  4902 000032ED 034624                                  add     eax, [esi+36]
  4903 000032F0 894738                                  mov     [edi+56], eax
  4904 000032F3 8B463C                                  mov     eax, [esi+60]   ; @@OUT 30,15,-
  4905 000032F6 894778                                  mov     [edi+120], eax
  4906 000032F9 C3                                      retn
  4907                                  
  4908                                  
  4909                                  ; =============== S U B R O U T I N E =======================================
  4910                                  
  4911                                  
  4912                                  mp3_dct32_shift_2:
  4913 000032FA 8B467C                                  mov     eax, [esi+124]  ; mp3_dct32_macro macro rate_shift ; rate_shift = 2
  4914 000032FD 0106                                    add     [esi], eax      ; @@BF macro a,b,sign,cos,shift
  4915                                                                          ; @@need_a equ (rate_shift EQ 0) or (a LT 16) ; a = 0
  4916                                                                          ; @@need_b equ (rate_shift EQ 0) or (b LT 16) ; b = 31
  4917                                                                          ; IF @@need_a AND @@need_b ; rate_shift = 0
  4918                                                                          ;    mov eax,dword ptr [esi+a*4]
  4919                                                                          ;    mov edx,dword ptr [esi+b*4]
  4920                                                                          ;    add dword ptr [esi+a*4],edx
  4921                                                                          ; ELSEIF @@need_a
  4922                                                                          ;    mov eax,dword ptr [esi+b*4]
  4923                                                                          ;    add dword ptr [esi+a*4],eax
  4924                                                                          ;
  4925                                                                          ; @@BF 0,31,+,COS0_0,1
  4926 000032FF 8B4640                                  mov     eax, [esi+64]   ; @@BF 15,16,+,COS0_15,5
  4927 00003302 01463C                                  add     [esi+60], eax
  4928 00003305 8B06                                    mov     eax, [esi]      ; @@BF 0,15,+,COS1_0,1
  4929 00003307 8B563C                                  mov     edx, [esi+60]
  4930 0000330A 0116                                    add     [esi], edx
  4931 0000330C 29D0                                    sub     eax, edx
  4932 0000330E D1E0                                    shl     eax, 1
  4933 00003310 BA72464F40                              mov     edx, 404F4672h  ; COS1_0
  4934 00003315 F7EA                                    imul    edx
  4935 00003317 89563C                                  mov     [esi+60], edx
  4936 0000331A 8B4660                                  mov     eax, [esi+96]   ; @@BF 7,24,+,COS0_7,1
  4937 0000331D 01461C                                  add     [esi+28], eax
  4938 00003320 8B465C                                  mov     eax, [esi+92]   ; @@BF 8,23,+,COS0_8,1
  4939 00003323 014620                                  add     [esi+32], eax
  4940 00003326 8B461C                                  mov     eax, [esi+28]   ; @@BF 7,8,+,COS1_7,4
  4941 00003329 8B5620                                  mov     edx, [esi+32]
  4942 0000332C 01561C                                  add     [esi+28], edx
  4943 0000332F 29D0                                    sub     eax, edx
  4944 00003331 C1E004                                  shl     eax, 4
  4945 00003334 BA044E9E51                              mov     edx, 519E4E04h  ; COS1_7
  4946 00003339 F7EA                                    imul    edx
  4947 0000333B 895620                                  mov     [esi+32], edx
  4948 0000333E 8B06                                    mov     eax, [esi]      ; @@BF 0,7,+,COS2_0,1
  4949 00003340 8B561C                                  mov     edx, [esi+28]
  4950 00003343 0116                                    add     [esi], edx
  4951 00003345 29D0                                    sub     eax, edx
  4952 00003347 D1E0                                    shl     eax, 1
  4953 00003349 BA46FB4041                              mov     edx, 4140FB46h  ; COS2_0
  4954 0000334E F7EA                                    imul    edx
  4955 00003350 89561C                                  mov     [esi+28], edx
  4956 00003353 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,15,-,COS2_0,1
  4957 00003356 8B563C                                  mov     edx, [esi+60]
  4958 00003359 015620                                  add     [esi+32], edx
  4959 0000335C 29D0                                    sub     eax, edx
  4960 0000335E D1E0                                    shl     eax, 1
  4961 00003360 BABA04BFBE                              mov     edx, 0BEBF04BAh
  4962 00003365 F7EA                                    imul    edx
  4963 00003367 89563C                                  mov     [esi+60], edx
  4964 0000336A 8B4670                                  mov     eax, [esi+112]  ; @@BF 3,28,+,COS0_3,1
  4965 0000336D 01460C                                  add     [esi+12], eax
  4966 00003370 8B464C                                  mov     eax, [esi+76]   ; @@BF 12,19,+,COS0_12,2
  4967 00003373 014630                                  add     [esi+48], eax
  4968 00003376 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,12,+,COS1_3,1
  4969 00003379 8B5630                                  mov     edx, [esi+48]
  4970 0000337C 01560C                                  add     [esi+12], edx
  4971 0000337F 29D0                                    sub     eax, edx
  4972 00003381 D1E0                                    shl     eax, 1
  4973 00003383 BA630ECB52                              mov     edx, 52CB0E63h  ; COS1_3
  4974 00003388 F7EA                                    imul    edx
  4975 0000338A 895630                                  mov     [esi+48], edx
  4976 0000338D 8B466C                                  mov     eax, [esi+108]  ; @@BF 4,27,+,COS0_4,1
  4977 00003390 014610                                  add     [esi+16], eax
  4978 00003393 8B4650                                  mov     eax, [esi+80]   ; @@BF 11,20,+,COS0_11,2
  4979 00003396 01462C                                  add     [esi+44], eax
  4980 00003399 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,11,+,COS1_4,1
  4981 0000339C 8B562C                                  mov     edx, [esi+44]
  4982 0000339F 015610                                  add     [esi+16], edx
  4983 000033A2 29D0                                    sub     eax, edx
  4984 000033A4 D1E0                                    shl     eax, 1
  4985 000033A6 BA2E40E264                              mov     edx, 64E2402Eh
  4986 000033AB F7EA                                    imul    edx
  4987 000033AD 89562C                                  mov     [esi+44], edx
  4988 000033B0 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,4,+,COS2_3,3
  4989 000033B3 8B5610                                  mov     edx, [esi+16]
  4990 000033B6 01560C                                  add     [esi+12], edx
  4991 000033B9 29D0                                    sub     eax, edx
  4992 000033BB C1E003                                  shl     eax, 3
  4993 000033BE BA42670352                              mov     edx, 52036742h
  4994 000033C3 F7EA                                    imul    edx
  4995 000033C5 895610                                  mov     [esi+16], edx
  4996 000033C8 8B462C                                  mov     eax, [esi+44]   ; @@BF 11,12,-,COS2_3,3
  4997 000033CB 8B5630                                  mov     edx, [esi+48]
  4998 000033CE 01562C                                  add     [esi+44], edx
  4999 000033D1 29D0                                    sub     eax, edx
  5000 000033D3 C1E003                                  shl     eax, 3
  5001 000033D6 BABE98FCAD                              mov     edx, 0ADFC98BEh ; -COS2_3
  5002 000033DB F7EA                                    imul    edx
  5003 000033DD 895630                                  mov     [esi+48], edx
  5004 000033E0 8B06                                    mov     eax, [esi]      ; @@BF 0,3,+,COS3_0,1
  5005 000033E2 8B560C                                  mov     edx, [esi+12]
  5006 000033E5 0116                                    add     [esi], edx
  5007 000033E7 29D0                                    sub     eax, edx
  5008 000033E9 D1E0                                    shl     eax, 1
  5009 000033EB BAF0E94545                              mov     edx, 4545E9F0h
  5010 000033F0 F7EA                                    imul    edx
  5011 000033F2 89560C                                  mov     [esi+12], edx
  5012 000033F5 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,7,-,COS3_0,1
  5013 000033F8 8B561C                                  mov     edx, [esi+28]
  5014 000033FB 015610                                  add     [esi+16], edx
  5015 000033FE 29D0                                    sub     eax, edx
  5016 00003400 D1E0                                    shl     eax, 1
  5017 00003402 BA1016BABA                              mov     edx, 0BABA1610h
  5018 00003407 F7EA                                    imul    edx
  5019 00003409 89561C                                  mov     [esi+28], edx
  5020 0000340C 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,11,+,COS3_0,1
  5021 0000340F 8B562C                                  mov     edx, [esi+44]
  5022 00003412 015620                                  add     [esi+32], edx
  5023 00003415 29D0                                    sub     eax, edx
  5024 00003417 D1E0                                    shl     eax, 1
  5025 00003419 BAF0E94545                              mov     edx, 4545E9F0h
  5026 0000341E F7EA                                    imul    edx
  5027 00003420 89562C                                  mov     [esi+44], edx
  5028 00003423 8B4630                                  mov     eax, [esi+48]   ; @@BF 12,15,-,COS3_0,1
  5029 00003426 8B563C                                  mov     edx, [esi+60]
  5030 00003429 015630                                  add     [esi+48], edx
  5031 0000342C 29D0                                    sub     eax, edx
  5032 0000342E D1E0                                    shl     eax, 1
  5033 00003430 BA1016BABA                              mov     edx, 0BABA1610h
  5034 00003435 F7EA                                    imul    edx
  5035 00003437 89563C                                  mov     [esi+60], edx
  5036 0000343A 8B4678                                  mov     eax, [esi+120]  ; @@BF 1,30,+,COS0_1,1
  5037 0000343D 014604                                  add     [esi+4], eax
  5038 00003440 8B4644                                  mov     eax, [esi+68]   ; @@BF 14,17,+,COS0_14,3
  5039 00003443 014638                                  add     [esi+56], eax
  5040 00003446 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,14,+,COS1_1,1
  5041 00003449 8B5638                                  mov     edx, [esi+56]
  5042 0000344C 015604                                  add     [esi+4], edx
  5043 0000344F 29D0                                    sub     eax, edx
  5044 00003451 D1E0                                    shl     eax, 1
  5045 00003453 BA103CE142                              mov     edx, 42E13C10h  ; COS1_1
  5046 00003458 F7EA                                    imul    edx
  5047 0000345A 895638                                  mov     [esi+56], edx
  5048 0000345D 8B4664                                  mov     eax, [esi+100]  ; @@BF 6,25,+,COS0_6,1
  5049 00003460 014618                                  add     [esi+24], eax
  5050 00003463 8B4658                                  mov     eax, [esi+88]   ; @@BF 9,22,+,COS0_9,1
  5051 00003466 014624                                  add     [esi+36], eax
  5052 00003469 8B4618                                  mov     eax, [esi+24]   ; @@BF 6,9,+,COS1_6,2
  5053 0000346C 8B5624                                  mov     edx, [esi+36]
  5054 0000346F 015618                                  add     [esi+24], edx
  5055 00003472 29D0                                    sub     eax, edx
  5056 00003474 C1E002                                  shl     eax, 2
  5057 00003477 BAC2923C6E                              mov     edx, 6E3C92C2h
  5058 0000347C F7EA                                    imul    edx
  5059 0000347E 895624                                  mov     [esi+36], edx
  5060 00003481 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,6,+,COS2_1,1
  5061 00003484 8B5618                                  mov     edx, [esi+24]
  5062 00003487 015604                                  add     [esi+4], edx
  5063 0000348A 29D0                                    sub     eax, edx
  5064 0000348C D1E0                                    shl     eax, 1
  5065 0000348E BA88DEF84C                              mov     edx, 4CF8DE88h  ; COS2_1
  5066 00003493 F7EA                                    imul    edx
  5067 00003495 895618                                  mov     [esi+24], edx
  5068 00003498 8B4624                                  mov     eax, [esi+36]   ; @@BF 9,14,-,COS2_1,1
  5069 0000349B 8B5638                                  mov     edx, [esi+56]
  5070 0000349E 015624                                  add     [esi+36], edx
  5071 000034A1 29D0                                    sub     eax, edx
  5072 000034A3 D1E0                                    shl     eax, 1
  5073 000034A5 BA782107B3                              mov     edx, 0B3072178h ; -COS2_1
  5074 000034AA F7EA                                    imul    edx
  5075 000034AC 895638                                  mov     [esi+56], edx
  5076 000034AF 8B4674                                  mov     eax, [esi+116]  ; @@BF 2,29,+,COS0_2,1
  5077 000034B2 014608                                  add     [esi+8], eax
  5078 000034B5 8B4648                                  mov     eax, [esi+72]   ; @@BF 13,18,+,COS0_13,3
  5079 000034B8 014634                                  add     [esi+52], eax
  5080 000034BB 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,13,+,COS1_2,1
  5081 000034BE 8B5634                                  mov     edx, [esi+52]
  5082 000034C1 015608                                  add     [esi+8], edx
  5083 000034C4 29D0                                    sub     eax, edx
  5084 000034C6 D1E0                                    shl     eax, 1
  5085 000034C8 BA459F9148                              mov     edx, 48919F45h
  5086 000034CD F7EA                                    imul    edx
  5087 000034CF 895634                                  mov     [esi+52], edx
  5088 000034D2 8B4668                                  mov     eax, [esi+104]  ; @@BF 5,26,+,COS0_5,1
  5089 000034D5 014614                                  add     [esi+20], eax
  5090 000034D8 8B4654                                  mov     eax, [esi+84]   ; @@BF 10,21,+,COS0_10,1
  5091 000034DB 014628                                  add     [esi+40], eax
  5092 000034DE 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,10,+,COS1_5,2
  5093 000034E1 8B5628                                  mov     edx, [esi+40]
  5094 000034E4 015614                                  add     [esi+20], edx
  5095 000034E7 29D0                                    sub     eax, edx
  5096 000034E9 C1E002                                  shl     eax, 2
  5097 000034EC BAAA24E243                              mov     edx, 43E224AAh
  5098 000034F1 F7EA                                    imul    edx
  5099 000034F3 895628                                  mov     [esi+40], edx
  5100 000034F6 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,5,+,COS2_2,1
  5101 000034F9 8B5614                                  mov     edx, [esi+20]
  5102 000034FC 015608                                  add     [esi+8], edx
  5103 000034FF 29D0                                    sub     eax, edx
  5104 00003501 D1E0                                    shl     eax, 1
  5105 00003503 BABF6B3273                              mov     edx, 73326BBFh  ; COS2_2
  5106 00003508 F7EA                                    imul    edx
  5107 0000350A 895614                                  mov     [esi+20], edx
  5108 0000350D 8B4628                                  mov     eax, [esi+40]   ; @@BF 10,13,-,COS2_2,1
  5109 00003510 8B5634                                  mov     edx, [esi+52]
  5110 00003513 015628                                  add     [esi+40], edx
  5111 00003516 29D0                                    sub     eax, edx
  5112 00003518 D1E0                                    shl     eax, 1
  5113 0000351A BA4194CD8C                              mov     edx, 8CCD9441h  ; -COS2_2
  5114 0000351F F7EA                                    imul    edx
  5115 00003521 895634                                  mov     [esi+52], edx
  5116 00003524 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,2,+,COS3_1,2
  5117 00003527 8B5608                                  mov     edx, [esi+8]
  5118 0000352A 015604                                  add     [esi+4], edx
  5119 0000352D 29D0                                    sub     eax, edx
  5120 0000352F C1E002                                  shl     eax, 2
  5121 00003532 BA46BA9E53                              mov     edx, 539EBA46h  ; COS3_1
  5122 00003537 F7EA                                    imul    edx
  5123 00003539 895608                                  mov     [esi+8], edx
  5124 0000353C 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,6,-,COS3_1,2
  5125 0000353F 8B5618                                  mov     edx, [esi+24]
  5126 00003542 015614                                  add     [esi+14h], edx
  5127 00003545 29D0                                    sub     eax, edx
  5128 00003547 C1E002                                  shl     eax, 2
  5129 0000354A BABA4561AC                              mov     edx, 0AC6145BAh ; -COS3_1
  5130 0000354F F7EA                                    imul    edx
  5131 00003551 895618                                  mov     [esi+24], edx
  5132 00003554 8B06                                    mov     eax, [esi]      ; @@BF1 macro a, b, c, d
  5133                                                                          ;   @@BF  a, b,+,COS4_0, 1
  5134                                                                          ;   @@BF  c, d,-,COS4_0, 1
  5135                                                                          ;   @@ADD c, d
  5136                                                                          ;  endm
  5137                                                                          ; @@BF1 0,1,2,3
  5138 00003556 8B5604                                  mov     edx, [esi+4]    ; @@BF 0,1,+,COS4_0,1
  5139 00003559 0116                                    add     [esi], edx
  5140 0000355B 29D0                                    sub     eax, edx
  5141 0000355D D1E0                                    shl     eax, 1
  5142 0000355F BA9A79825A                              mov     edx, 5A82799Ah
  5143 00003564 F7EA                                    imul    edx
  5144 00003566 895604                                  mov     [esi+4], edx
  5145 00003569 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,3,-,COS4_0,1
  5146 0000356C 8B560C                                  mov     edx, [esi+12]
  5147 0000356F 015608                                  add     [esi+8], edx
  5148 00003572 29D0                                    sub     eax, edx
  5149 00003574 D1E0                                    shl     eax, 1
  5150 00003576 BA66867DA5                              mov     edx, 0A57D8666h
  5151 0000357B F7EA                                    imul    edx
  5152 0000357D 89560C                                  mov     [esi+12], edx
  5153 00003580 8B460C                                  mov     eax, [esi+12]   ; @@ADD 2,3
  5154 00003583 014608                                  add     [esi+8], eax
  5155 00003586 8B4610                                  mov     eax, [esi+16]   ; @@BF2 macro a, b, c, d
  5156                                                                          ;   @@BF  a, b,+,COS4_0, 1
  5157                                                                          ;   @@BF  c, d,-,COS4_0, 1
  5158                                                                          ;   @@ADD c, d
  5159                                                                          ;   @@ADD a, c
  5160                                                                          ;   @@ADD c, b
  5161                                                                          ;   @@ADD b, d
  5162                                                                          ;  endm
  5163                                                                          ; @@BF2 4,5,6,7
  5164 00003589 8B5614                                  mov     edx, [esi+20]   ; @@BF 4,5,+,COS4_0,1
  5165 0000358C 015610                                  add     [esi+16], edx
  5166 0000358F 29D0                                    sub     eax, edx
  5167 00003591 D1E0                                    shl     eax, 1
  5168 00003593 BA9A79825A                              mov     edx, 5A82799Ah  ; COS4_0
  5169 00003598 F7EA                                    imul    edx
  5170 0000359A 895614                                  mov     [esi+20], edx
  5171 0000359D 8B4618                                  mov     eax, [esi+24]   ; @@BF 6,7,-,COS4_0,1
  5172 000035A0 8B561C                                  mov     edx, [esi+28]
  5173 000035A3 015618                                  add     [esi+18h], edx
  5174 000035A6 29D0                                    sub     eax, edx
  5175 000035A8 D1E0                                    shl     eax, 1
  5176 000035AA BA66867DA5                              mov     edx, 0A57D8666h ; -COS4_0
  5177 000035AF F7EA                                    imul    edx
  5178 000035B1 89561C                                  mov     [esi+28], edx
  5179 000035B4 8B461C                                  mov     eax, [esi+28]   ; @@ADD 6,7
  5180 000035B7 014618                                  add     [esi+24], eax
  5181 000035BA 8B4618                                  mov     eax, [esi+24]   ; @@ADD 4,6
  5182 000035BD 014610                                  add     [esi+16], eax
  5183 000035C0 8B4614                                  mov     eax, [esi+20]   ; @@ADD 6,5
  5184 000035C3 014618                                  add     [esi+24], eax
  5185 000035C6 8B461C                                  mov     eax, [esi+28]   ; @@ADD 5,7
  5186 000035C9 014614                                  add     [esi+20], eax
  5187 000035CC 8B06                                    mov     eax, [esi]      ; @@OUT macro dst,src1,src2
  5188                                                                          ; IF ((dst AND ((1 SHL rate_shift)-1)) EQ 0)
  5189                                                                          ;    mov eax,dword ptr [esi+src1*4]
  5190                                                                          ;    IFDIFI <src2>,<->
  5191                                                                          ;      add eax,dword ptr [esi+src2*4]
  5192                                                                          ;    ENDIF
  5193                                                                          ;    IF SYNTH32
  5194                                                                          ;       mov dword ptr [edi+dst*4],eax
  5195                                                                          ;       IF (LONG_WINDOW EQ 0)
  5196                                                                          ;          mov dword ptr [edi+dst*4+512*4],eax
  5197                                                                          ;       ENDIF
  5198                                                                          ;    ELSE
  5199                                                                          ;        ......
  5200                                                                          ;    ENDIF
  5201                                                                          ; @@OUT 0,0,-
  5202 000035CE 8907                                    mov     [edi], eax
  5203 000035D0 8B4604                                  mov     eax, [esi+4]    ; @@OUT 16,1,-
  5204 000035D3 894740                                  mov     [edi+64], eax
  5205 000035D6 8B4608                                  mov     eax, [esi+8]    ; @@OUT 8,2,-
  5206 000035D9 894720                                  mov     [edi+32], eax
  5207 000035DC 8B460C                                  mov     eax, [esi+12]   ; @@OUT 24,3,-
  5208 000035DF 894760                                  mov     [edi+96], eax
  5209 000035E2 8B4610                                  mov     eax, [esi+16]   ; @@OUT 4,4,-
  5210 000035E5 894710                                  mov     [edi+16], eax
  5211 000035E8 8B4614                                  mov     eax, [esi+20]   ; @@OUT 20,5,-
  5212 000035EB 894750                                  mov     [edi+80], eax
  5213 000035EE 8B4618                                  mov     eax, [esi+24]   ; @@OUT 12,6,-
  5214 000035F1 894730                                  mov     [edi+48], eax
  5215 000035F4 8B461C                                  mov     eax, [esi+28]   ; @@OUT 28,7,-
  5216 000035F7 894770                                  mov     [edi+112], eax
  5217 000035FA C3                                      retn
  5218                                  
  5219                                  
  5220                                  ; =============== S U B R O U T I N E =======================================
  5221                                  
  5222                                  
  5223                                  synth_16bit_shift_0_fast:
  5224 000035FB F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 0,0,1
  5225 00003602 740E                                    jz      short .no_rdtsc_supported
  5226 00003604 0F31                                    rdtsc
  5227 00003606 2905[948D0000]                          sub     [rdtsc_synth_dct], eax
  5228 0000360C 1915[988D0000]                          sbb     [rdtsc_synth_dct+4], edx
  5229                                  
  5230                                  .no_rdtsc_supported:
  5231 00003612 BE[C8D30000]                            mov	esi, mp3_sb_samples
  5232 00003617 8B3D[5C0A0100]                          mov	edi, [mp3_samples_dst]
  5233 0000361D C705[680A0100]0000-                     mov	dword [mp3_curr_channel], 0
  5233 00003625 0000               
  5234                                  
  5235                                  .synth_channel_lop:
  5236 00003627 56                                      push	esi
  5237 00003628 57                                      push	edi
  5238 00003629 893D[A8B30000]                          mov	[mp3_curr_syn_dst], edi
  5239 0000362F C705[700A0100]0000-                     mov	dword [mp3_curr_frame], 0
  5239 00003637 0000               
  5240                                  
  5241                                  .synth_frame_lop:
  5242 00003639 56                                      push    esi
  5243 0000363A F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  5244 00003641 740E                                    jz      short .no_rdtsc_supported@
  5245 00003643 0F31                                    rdtsc
  5246 00003645 2905[AC8D0000]                          sub     [rdtsc_dct32], eax
  5247 0000364B 1915[B08D0000]                          sbb     [rdtsc_dct32+4], edx
  5248                                  
  5249                                  .no_rdtsc_supported@:
  5250 00003651 8B15[680A0100]                          mov     edx, [mp3_curr_channel]
  5251 00003657 8B0495[C0D30000]                        mov     eax, [mp3_synth_index+edx*4]
  5252 0000365E 832C95[C0D30000]20                      sub     dword [mp3_synth_index+edx*4], 32
  5253 00003666 C1E20A                                  shl     edx, 10
  5254 00003669 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  5255 0000366E 09D0                                    or      eax, edx
  5256 00003670 A3[A4B30000]                            mov     [mp3_curr_syn_index], eax
  5257 00003675 8B3D[A4B30000]                          mov     edi, [mp3_curr_syn_index]
  5258 0000367B 8D3CBD[C0B30000]                        lea     edi, [mp3_synth_buf+edi*4]
  5259 00003682 E8A3EFFFFF                              call    mp3_dct32_shift_0
  5260 00003687 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  5261 0000368E 740E                                    jz      short .no_rdtsc_supported@@
  5262 00003690 0F31                                    rdtsc
  5263 00003692 0105[AC8D0000]                          add     [rdtsc_dct32], eax
  5264 00003698 1115[B08D0000]                          adc     [rdtsc_dct32+4], edx
  5265                                  
  5266                                  .no_rdtsc_supported@@:
  5267 0000369E F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  5268 000036A5 740E                                    jz      short .no_rdtsc_supported@@@
  5269 000036A7 0F31                                    rdtsc
  5270 000036A9 2905[C48D0000]                          sub     [rdtsc_synth], eax
  5271 000036AF 1915[C88D0000]                          sbb     [rdtsc_synth+4], edx
  5272                                  
  5273                                  .no_rdtsc_supported@@@:
  5274 000036B5 E888000000                              call    mp3_synth_filter_this_16bit_shift_0_fast ;
  5275                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  5276 000036BA F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  5277 000036C1 740E                                    jz      short .no_rdtsc_supported@@@@
  5278 000036C3 0F31                                    rdtsc
  5279 000036C5 0105[C48D0000]                          add     [rdtsc_synth], eax
  5280 000036CB 1115[C88D0000]                          adc     [rdtsc_synth+4], edx
  5281                                  
  5282                                  .no_rdtsc_supported@@@@:
  5283 000036D1 5E                                      pop     esi
  5284 000036D2 A1[640A0100]                            mov     eax, [mp3_samples_dst_step]
  5285 000036D7 C1E005                                  shl     eax, 5
  5286 000036DA 8A0D[178C0000]                          mov     cl, [option_rate_shift]
  5287 000036E0 D3E8                                    shr     eax, cl
  5288 000036E2 0105[A8B30000]                          add     [mp3_curr_syn_dst], eax
  5289 000036E8 81C680000000                            add     esi, 128        ; SBLIMIT*4
  5290 000036EE FF05[700A0100]                          inc     dword [mp3_curr_frame]
  5291 000036F4 A1[700A0100]                            mov     eax, [mp3_curr_frame]
  5292 000036F9 3B05[ACB30000]                          cmp     eax, [mp3_nb_frames]
  5293 000036FF 0F8234FFFFFF                            jb      .synth_frame_lop
  5294 00003705 5F                                      pop     edi
  5295 00003706 5E                                      pop     esi
  5296 00003707 033D[A0B30000]                          add     edi, [mp3_bytes_per_sample]
  5297 0000370D 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  5298 00003713 FF05[680A0100]                          inc     dword [mp3_curr_channel]
  5299 00003719 A1[680A0100]                            mov     eax, [mp3_curr_channel]
  5300 0000371E 3B05[98B30000]                          cmp     eax, [mp3_output_num_channels]
  5301 00003724 0F82FDFEFFFF                            jb      .synth_channel_lop
  5302 0000372A F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  5303 00003731 740E                                    jz      short .no_rdtsc_supported@@@@@
  5304 00003733 0F31                                    rdtsc
  5305 00003735 0105[948D0000]                          add     [rdtsc_synth_dct], eax
  5306 0000373B 1115[988D0000]                          adc     [rdtsc_synth_dct+4], edx
  5307                                  
  5308                                  .no_rdtsc_supported@@@@@:
  5309 00003741 C3                                      retn
  5310                                  
  5311                                  
  5312                                  ; =============== S U B R O U T I N E =======================================
  5313                                  
  5314                                  
  5315                                  mp3_synth_filter_this_16bit_shift_0_fast:
  5316 00003742 A1[A4B30000]                            mov     eax, [mp3_curr_syn_index]
  5317 00003747 A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh
  5318 0000374C 0F849C010000                            jz      .append_copy_to_window
  5319 00003752 90                                      nop
  5320                                  
  5321                                  .append_copy_to_window_back:
  5322 00003753 89C5                                    mov     ebp, eax
  5323 00003755 81E5C0010000                            and     ebp, 1C0h       ; @win1,1FFh-1Fh-20h
  5324 0000375B 2520040000                              and     eax, 420h       ; and eax,20h+(1 shl 10) ; bit5 and channel
  5325 00003760 8D7010                                  lea     esi, [eax+10h]  ; @@syn1,[eax+10h]
  5326 00003763 8D7830                                  lea     edi, [eax+30h]  ; @@syn2,[eax+30h]
  5327 00003766 F7DD                                    neg     ebp
  5328 00003768 81E5C0010000                            and     ebp, 1C0h       ; @win1,1FFh-1Fh-20h
  5329 0000376E 8B0D[A8B30000]                          mov     ecx, [mp3_curr_syn_dst] ; @@dst,dword ptr [mp3_curr_syn_dst]
  5330                                  
  5331                                  .samples_lop:
  5332 00003774 BB00200020                              mov     ebx, 20002000h  ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  5333                                                                          ; @@out_shift equ (OUT_SHIFT_fast+(8*force_8bit))
  5334                                                                          ; out_shift = 14
  5335 00003779 8B14B5[C0B30000]                        mov     edx, [mp3_synth_buf+esi*4] ; @@SUM8 macro sum,win,ww,syn
  5336                                                                          ; @@SUM8 @@sum,@@win1,0,@@syn1
  5337                                                                          ; IRP nn,0,1,2,3,4,5,6,7
  5338                                                                          ; mov edx,dword ptr [mp3_synth_buf+syn*4+(nn*64*4)]
  5339                                                                          ; movsx eax,word ptr [mp3_synth_win+win*2+(nn*64*2)+ww*2]
  5340                                                                          ; imul eax,edx
  5341                                                                          ; add sum,eax
  5342 00003780 0FBF842D[78050500]                      movsx   eax, word [mp3_synth_win+ebp*2] ; nn=0, ww=0
  5343 00003788 0FAFC2                                  imul    eax, edx
  5344 0000378B 01C3                                    add     ebx, eax
  5345 0000378D 8B14B5[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  5346 00003794 0FBF842D[F8050500]                      movsx   eax, word [(mp3_synth_win+80h)+ebp*2] ; nn=1, ww=0
  5347 0000379C 0FAFC2                                  imul    eax, edx
  5348 0000379F 01C3                                    add     ebx, eax
  5349 000037A1 8B14B5[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  5350 000037A8 0FBF842D[78060500]                      movsx   eax, word [(mp3_synth_win+100h)+ebp*2] ; nn=2
  5351 000037B0 0FAFC2                                  imul    eax, edx
  5352 000037B3 01C3                                    add     ebx, eax
  5353 000037B5 8B14B5[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  5354 000037BC 0FBF842D[F8060500]                      movsx   eax, word [(mp3_synth_win+180h)+ebp*2] ; nn=3
  5355 000037C4 0FAFC2                                  imul    eax, edx
  5356 000037C7 01C3                                    add     ebx, eax
  5357 000037C9 8B14B5[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  5358 000037D0 0FBF842D[78070500]                      movsx   eax, word [(mp3_synth_win+200h)+ebp*2] ; nn=4
  5359 000037D8 0FAFC2                                  imul    eax, edx
  5360 000037DB 01C3                                    add     ebx, eax
  5361 000037DD 8B14B5[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  5362 000037E4 0FBF842D[F8070500]                      movsx   eax, word [(mp3_synth_win+280h)+ebp*2] ; nn=5
  5363 000037EC 0FAFC2                                  imul    eax, edx
  5364 000037EF 01C3                                    add     ebx, eax
  5365 000037F1 8B14B5[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  5366 000037F8 0FBF842D[78080500]                      movsx   eax, word [(mp3_synth_win+300h)+ebp*2] ; nn=6
  5367 00003800 0FAFC2                                  imul    eax, edx
  5368 00003803 01C3                                    add     ebx, eax
  5369 00003805 8B14B5[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  5370 0000380C 0FBF842D[F8080500]                      movsx   eax, word [(mp3_synth_win+380h)+ebp*2] ; nn=7
  5371 00003814 0FAFC2                                  imul    eax, edx
  5372 00003817 01C3                                    add     ebx, eax
  5373 00003819 8B14BD[C0B30000]                        mov     edx, [mp3_synth_buf+edi*4] ; @@SUM8 @@sum,@@win1,32, @@syn2
  5374 00003820 0FBF842D[B8050500]                      movsx   eax, word [(mp3_synth_win+40h)+ebp*2] ; nn=0, ww=32
  5375 00003828 0FAFC2                                  imul    eax, edx
  5376 0000382B 01C3                                    add     ebx, eax
  5377 0000382D 8B14BD[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  5378 00003834 0FBF842D[38060500]                      movsx   eax, word [(mp3_synth_win+0C0h)+ebp*2] ; nn=1, ww=32
  5379 0000383C 0FAFC2                                  imul    eax, edx
  5380 0000383F 01C3                                    add     ebx, eax
  5381 00003841 8B14BD[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  5382 00003848 0FBF842D[B8060500]                      movsx   eax, word [(mp3_synth_win+140h)+ebp*2] ; nn=2
  5383 00003850 0FAFC2                                  imul    eax, edx
  5384 00003853 01C3                                    add     ebx, eax
  5385 00003855 8B14BD[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  5386 0000385C 0FBF842D[38070500]                      movsx   eax, word [(mp3_synth_win+1C0h)+ebp*2] ; nn=3
  5387 00003864 0FAFC2                                  imul    eax, edx
  5388 00003867 01C3                                    add     ebx, eax
  5389 00003869 8B14BD[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  5390 00003870 0FBF842D[B8070500]                      movsx   eax, word [(mp3_synth_win+240h)+ebp*2] ; nn=4
  5391 00003878 0FAFC2                                  imul    eax, edx
  5392 0000387B 01C3                                    add     ebx, eax
  5393 0000387D 8B14BD[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  5394 00003884 0FBF842D[38080500]                      movsx   eax, word [(mp3_synth_win+2C0h)+ebp*2] ; nn=5
  5395 0000388C 0FAFC2                                  imul    eax, edx
  5396 0000388F 01C3                                    add     ebx, eax
  5397 00003891 8B14BD[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  5398 00003898 0FBF842D[B8080500]                      movsx   eax, word [(mp3_synth_win+340h)+ebp*2] ; nn=6
  5399 000038A0 0FAFC2                                  imul    eax, edx
  5400 000038A3 01C3                                    add     ebx, eax
  5401 000038A5 8B14BD[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  5402 000038AC 0FBF842D[38090500]                      movsx   eax, word [(mp3_synth_win+3C0h)+ebp*2] ; nn=7
  5403 000038B4 0FAFC2                                  imul    eax, edx
  5404 000038B7 01C3                                    add     ebx, eax
  5405 000038B9 81FB00000040                            cmp     ebx, 40000000h  ; cmp @@sum,10000h SHL (@@out_shift) ; out_shift = 14
  5406 000038BF 7322                                    jnb     short .sat
  5407 000038C1 C1FB0E                                  sar     ebx, 14         ; sar @@sum,(@@out_shift)
  5408 000038C4 81EB00800000                            sub     ebx, 8000h      ; sub @@sum,8000h ; make 16bit signed
  5409                                  
  5410                                  .sat_back:
  5411 000038CA 668919                                  mov     [ecx], bx       ; mov word ptr [@@dst],@@sum_16bit
  5412 000038CD 030D[640A0100]                          add     ecx, [mp3_samples_dst_step]
  5413 000038D3 46                                      inc     esi             ; inc @@syn1
  5414 000038D4 4F                                      dec     edi             ; dec @@syn2
  5415 000038D5 45                                      inc     ebp             ; inc @@win1
  5416 000038D6 F7C51F000000                            test    ebp, 1Fh        ; IF LONG_WINDOW
  5417 000038DC 0F8592FEFFFF                            jnz     .samples_lop   ; test @@win1,1Fh
  5418 000038E2 C3                                      retn
  5419                                  
  5420                                  .sat:
  5421 000038E3 C1FB1F                                  sar     ebx, 31         ; sar @@sum,31 ; FFFFFFFFh,00000000h
  5422 000038E6 81F3FF7F0000                            xor     ebx, 7FFFh      ; xor @@sum,7fffh ; FFFF8000h,00007FFFh (signed 16bit)
  5423 000038EC EBDC                                    jmp     short .sat_back
  5424                                  
  5425                                  .append_copy_to_window:
  5426 000038EE 8D3485[C0B30000]                        lea     esi, [mp3_synth_buf+eax*4] ; IF SYNTH32
  5427 000038F5 8DBE00080000                            lea     edi, [esi+2048] ; [esi+512*4]
  5428 000038FB B912000000                              mov     ecx, 18         ; (12h*4)/4
  5429 00003900 F3A5                                    rep movsd
  5430 00003902 E94CFEFFFF                              jmp     .append_copy_to_window_back
  5431                                  
  5432                                  
  5433                                  ; =============== S U B R O U T I N E =======================================
  5434                                  
  5435                                  
  5436                                  synth_16bit_shift_1_fast:
  5437 00003907 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 0,1,1
  5438 0000390E 740E                                    jz      short .no_rdtsc_supported
  5439 00003910 0F31                                    rdtsc
  5440 00003912 2905[948D0000]                          sub     [rdtsc_synth_dct], eax
  5441 00003918 1915[988D0000]                          sbb     [rdtsc_synth_dct+4], edx
  5442                                  
  5443                                  .no_rdtsc_supported:
  5444 0000391E BE[C8D30000]                            mov	esi, mp3_sb_samples
  5445 00003923 8B3D[5C0A0100]                          mov	edi, [mp3_samples_dst]
  5446 00003929 C705[680A0100]0000-                     mov	dword [mp3_curr_channel], 0
  5446 00003931 0000               
  5447                                  
  5448                                  .synth_channel_lop:
  5449 00003933 56                                      push	esi
  5450 00003934 57                                      push	edi
  5451 00003935 893D[A8B30000]                          mov	[mp3_curr_syn_dst], edi
  5452 0000393B C705[700A0100]0000-                     mov	dword [mp3_curr_frame], 0
  5452 00003943 0000               
  5453                                  
  5454                                  .synth_frame_lop:
  5455 00003945 56                                      push    esi
  5456 00003946 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  5457 0000394D 740E                                    jz      short .no_rdtsc_supported@
  5458 0000394F 0F31                                    rdtsc
  5459 00003951 2905[AC8D0000]                          sub     [rdtsc_dct32], eax
  5460 00003957 1915[B08D0000]                          sbb     [rdtsc_dct32+4], edx
  5461                                  
  5462                                  .no_rdtsc_supported@:
  5463 0000395D 8B15[680A0100]                          mov     edx, [mp3_curr_channel]
  5464 00003963 8B0495[C0D30000]                        mov     eax, [mp3_synth_index+edx*4]
  5465 0000396A 832C95[C0D30000]20                      sub	dword [mp3_synth_index+edx*4], 32
  5466 00003972 C1E20A                                  shl     edx, 10
  5467 00003975 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  5468 0000397A 09D0                                    or      eax, edx
  5469 0000397C A3[A4B30000]                            mov     [mp3_curr_syn_index], eax
  5470 00003981 8B3D[A4B30000]                          mov     edi, [mp3_curr_syn_index]
  5471 00003987 8D3CBD[C0B30000]                        lea     edi, [mp3_synth_buf+edi*4]
  5472 0000398E E877F5FFFF                              call    mp3_dct32_shift_1 ; mp3_dct32_shift_&rate_shift
  5473 00003993 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  5474 0000399A 740E                                    jz      short .no_rdtsc_supported@@
  5475 0000399C 0F31                                    rdtsc
  5476 0000399E 0105[AC8D0000]                          add     [rdtsc_dct32], eax
  5477 000039A4 1115[B08D0000]                          adc     [rdtsc_dct32+4], edx
  5478                                  
  5479                                  .no_rdtsc_supported@@:
  5480 000039AA F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  5481 000039B1 740E                                    jz      short .no_rdtsc_supported@@@
  5482 000039B3 0F31                                    rdtsc
  5483 000039B5 2905[C48D0000]                          sub     [rdtsc_synth], eax
  5484 000039BB 1915[C88D0000]                          sbb     [rdtsc_synth+4], edx
  5485                                  
  5486                                  .no_rdtsc_supported@@@:
  5487 000039C1 E888000000                              call    mp3_synth_filter_this_16bit_shift_1_fast ;
  5488                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  5489 000039C6 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  5490 000039CD 740E                                    jz      short .no_rdtsc_supported@@@@
  5491 000039CF 0F31                                    rdtsc
  5492 000039D1 0105[C48D0000]                          add     [rdtsc_synth], eax
  5493 000039D7 1115[C88D0000]                          adc     [rdtsc_synth+4], edx
  5494                                  
  5495                                  .no_rdtsc_supported@@@@:
  5496 000039DD 5E                                      pop     esi
  5497 000039DE A1[640A0100]                            mov     eax, [mp3_samples_dst_step]
  5498 000039E3 C1E005                                  shl     eax, 5
  5499 000039E6 8A0D[178C0000]                          mov     cl, [option_rate_shift]
  5500 000039EC D3E8                                    shr     eax, cl
  5501 000039EE 0105[A8B30000]                          add     [mp3_curr_syn_dst], eax
  5502 000039F4 81C680000000                            add     esi, 128        ; SBLIMIT*4
  5503 000039FA FF05[700A0100]                          inc     dword [mp3_curr_frame]
  5504 00003A00 A1[700A0100]                            mov     eax, [mp3_curr_frame]
  5505 00003A05 3B05[ACB30000]                          cmp     eax, [mp3_nb_frames]
  5506 00003A0B 0F8234FFFFFF                            jb      .synth_frame_lop
  5507 00003A11 5F                                      pop     edi
  5508 00003A12 5E                                      pop     esi
  5509 00003A13 033D[A0B30000]                          add     edi, [mp3_bytes_per_sample]
  5510 00003A19 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  5511 00003A1F FF05[680A0100]                          inc     dword [mp3_curr_channel]
  5512 00003A25 A1[680A0100]                            mov     eax, [mp3_curr_channel]
  5513 00003A2A 3B05[98B30000]                          cmp     eax, [mp3_output_num_channels]
  5514 00003A30 0F82FDFEFFFF                            jb      .synth_channel_lop
  5515 00003A36 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  5516 00003A3D 740E                                    jz      short .no_rdtsc_supported@@@@@
  5517 00003A3F 0F31                                    rdtsc
  5518 00003A41 0105[948D0000]                          add     [rdtsc_synth_dct], eax
  5519 00003A47 1115[988D0000]                          adc     [rdtsc_synth_dct+4], edx
  5520                                  
  5521                                  .no_rdtsc_supported@@@@@:
  5522 00003A4D C3                                      retn
  5523                                  
  5524                                  
  5525                                  ; =============== S U B R O U T I N E =======================================
  5526                                  
  5527                                  
  5528                                  mp3_synth_filter_this_16bit_shift_1_fast:
  5529 00003A4E A1[A4B30000]                            mov     eax, [mp3_curr_syn_index]
  5530 00003A53 A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh
  5531 00003A58 0F84A2010000                            jz      .append_copy_to_window
  5532 00003A5E 90                                      nop
  5533                                  
  5534                                  .append_copy_to_window_back:
  5535 00003A5F 89C5                                    mov     ebp, eax
  5536 00003A61 81E5C0010000                            and     ebp, 1C0h
  5537 00003A67 2520040000                              and     eax, 420h
  5538 00003A6C 8D7010                                  lea     esi, [eax+10h]
  5539 00003A6F 8D7830                                  lea     edi, [eax+30h]
  5540 00003A72 F7DD                                    neg     ebp
  5541 00003A74 81E5C0010000                            and     ebp, 1C0h
  5542 00003A7A 8B0D[A8B30000]                          mov     ecx, [mp3_curr_syn_dst]
  5543                                  
  5544                                  .samples_lop:
  5545 00003A80 BB00200020                              mov     ebx, 20002000h  ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  5546                                                                          ; @@out_shift equ (OUT_SHIFT_fast+(8*force_8bit))
  5547                                                                          ; out_shift = 14
  5548 00003A85 8B14B5[C0B30000]                        mov     edx, [mp3_synth_buf+esi*4] ; @@SUM8 macro sum,win,ww,syn
  5549                                                                          ; @@SUM8 @@sum,@@win1,0,@@syn1
  5550                                                                          ; IRP nn,0,1,2,3,4,5,6,7
  5551                                                                          ; mov edx,dword ptr [mp3_synth_buf+syn*4+(nn*64*4)]
  5552                                                                          ; movsx eax,word ptr [mp3_synth_win+win*2+(nn*64*2)+ww*2]
  5553                                                                          ; imul eax,edx
  5554                                                                          ; add sum,eax
  5555 00003A8C 0FBF842D[78050500]                      movsx   eax, word [mp3_synth_win+ebp*2]
  5556 00003A94 0FAFC2                                  imul    eax, edx
  5557 00003A97 01C3                                    add     ebx, eax
  5558 00003A99 8B14B5[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4] ; nn=1
  5559 00003AA0 0FBF842D[F8050500]                      movsx   eax, word [(mp3_synth_win+80h)+ebp*2] ; ww=0
  5560 00003AA8 0FAFC2                                  imul    eax, edx
  5561 00003AAB 01C3                                    add     ebx, eax
  5562 00003AAD 8B14B5[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  5563 00003AB4 0FBF842D[78060500]                      movsx   eax, word [(mp3_synth_win+100h)+ebp*2]
  5564 00003ABC 0FAFC2                                  imul    eax, edx
  5565 00003ABF 01C3                                    add     ebx, eax
  5566 00003AC1 8B14B5[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  5567 00003AC8 0FBF842D[F8060500]                      movsx   eax, word [(mp3_synth_win+180h)+ebp*2]
  5568 00003AD0 0FAFC2                                  imul    eax, edx
  5569 00003AD3 01C3                                    add     ebx, eax
  5570 00003AD5 8B14B5[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4] ; nn=4
  5571 00003ADC 0FBF842D[78070500]                      movsx   eax, word [(mp3_synth_win+200h)+ebp*2]
  5572 00003AE4 0FAFC2                                  imul    eax, edx
  5573 00003AE7 01C3                                    add     ebx, eax
  5574 00003AE9 8B14B5[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  5575 00003AF0 0FBF842D[F8070500]                      movsx   eax, word [(mp3_synth_win+280h)+ebp*2]
  5576 00003AF8 0FAFC2                                  imul    eax, edx
  5577 00003AFB 01C3                                    add     ebx, eax
  5578 00003AFD 8B14B5[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  5579 00003B04 0FBF842D[78080500]                      movsx   eax, word [(mp3_synth_win+300h)+ebp*2]
  5580 00003B0C 0FAFC2                                  imul    eax, edx
  5581 00003B0F 01C3                                    add     ebx, eax
  5582 00003B11 8B14B5[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4] ; nn=7
  5583 00003B18 0FBF842D[F8080500]                      movsx   eax, word [(mp3_synth_win+380h)+ebp*2] ; ww=0
  5584 00003B20 0FAFC2                                  imul    eax, edx
  5585 00003B23 01C3                                    add     ebx, eax
  5586 00003B25 8B14BD[C0B30000]                        mov     edx, [mp3_synth_buf+edi*4]
  5587 00003B2C 0FBF842D[B8050500]                      movsx   eax, word [(mp3_synth_win+40h)+ebp*2]
  5588 00003B34 0FAFC2                                  imul    eax, edx
  5589 00003B37 01C3                                    add     ebx, eax
  5590 00003B39 8B14BD[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  5591 00003B40 0FBF842D[38060500]                      movsx   eax, word [(mp3_synth_win+0C0h)+ebp*2]
  5592 00003B48 0FAFC2                                  imul    eax, edx
  5593 00003B4B 01C3                                    add     ebx, eax
  5594 00003B4D 8B14BD[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4] ; nn=2, ww=32
  5595 00003B54 0FBF842D[B8060500]                      movsx   eax, word [(mp3_synth_win+140h)+ebp*2]
  5596 00003B5C 0FAFC2                                  imul    eax, edx
  5597 00003B5F 01C3                                    add     ebx, eax
  5598 00003B61 8B14BD[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  5599 00003B68 0FBF842D[38070500]                      movsx   eax, word [(mp3_synth_win+1C0h)+ebp*2]
  5600 00003B70 0FAFC2                                  imul    eax, edx
  5601 00003B73 01C3                                    add     ebx, eax
  5602 00003B75 8B14BD[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  5603 00003B7C 0FBF842D[B8070500]                      movsx   eax, word [(mp3_synth_win+240h)+ebp*2]
  5604 00003B84 0FAFC2                                  imul    eax, edx
  5605 00003B87 01C3                                    add     ebx, eax
  5606 00003B89 8B14BD[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  5607 00003B90 0FBF842D[38080500]                      movsx   eax, word [(mp3_synth_win+2C0h)+ebp*2]
  5608 00003B98 0FAFC2                                  imul    eax, edx
  5609 00003B9B 01C3                                    add     ebx, eax
  5610 00003B9D 8B14BD[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4] ; nn=6, ww=32
  5611 00003BA4 0FBF842D[B8080500]                      movsx   eax, word [(mp3_synth_win+340h)+ebp*2]
  5612 00003BAC 0FAFC2                                  imul    eax, edx
  5613 00003BAF 01C3                                    add     ebx, eax
  5614 00003BB1 8B14BD[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  5615 00003BB8 0FBF842D[38090500]                      movsx   eax, word [(mp3_synth_win+3C0h)+ebp*2]
  5616 00003BC0 0FAFC2                                  imul    eax, edx
  5617 00003BC3 01C3                                    add     ebx, eax
  5618 00003BC5 81FB00000040                            cmp     ebx, 40000000h  ; cmp  @@sum,10000h SHL (@@out_shift)
  5619 00003BCB 7328                                    jnb     short .sat
  5620 00003BCD C1FB0E                                  sar     ebx, 14         ; sar @@sum,(@@out_shift)
  5621 00003BD0 81EB00800000                            sub     ebx, 8000h      ; make 16bit signed
  5622                                  
  5623                                  .sat_back:
  5624 00003BD6 668919                                  mov     [ecx], bx
  5625 00003BD9 030D[640A0100]                          add     ecx, [mp3_samples_dst_step]
  5626 00003BDF 83C602                                  add     esi, 2          ; IF rate_shift
  5627                                                                          ; add  @@syn1,1 shl rate_shift
  5628 00003BE2 83EF02                                  sub     edi, 2          ; sub @@syn2,1 shl rate_shift
  5629 00003BE5 83C502                                  add     ebp, 2          ; add @@win1,1 shl rate_shift
  5630 00003BE8 F7C51F000000                            test    ebp, 1Fh        ; IF LONG_WINDOW
  5631 00003BEE 0F858CFEFFFF                            jnz     .samples_lop   ; test @@win1,1fh
  5632 00003BF4 C3                                      retn
  5633                                  
  5634                                  .sat:
  5635 00003BF5 C1FB1F                                  sar     ebx, 31         ; sar @@sum,31 ; FFFFFFFFh,00000000h
  5636 00003BF8 81F3FF7F0000                            xor     ebx, 7FFFh      ; xor @@sum,7fffh ; FFFF8000h,00007FFFh (signed 16bit)
  5637 00003BFE EBD6                                    jmp     short .sat_back
  5638                                  
  5639                                  .append_copy_to_window:
  5640 00003C00 8D3485[C0B30000]                        lea     esi, [mp3_synth_buf+eax*4]
  5641 00003C07 8DBE00080000                            lea     edi, [esi+2048] ; [esi+512*4]
  5642 00003C0D B912000000                              mov     ecx, 18         ; (12h*4)/4
  5643 00003C12 F3A5                                    rep movsd
  5644 00003C14 E946FEFFFF                              jmp     .append_copy_to_window_back
  5645                                  
  5646                                  
  5647                                  ; =============== S U B R O U T I N E =======================================
  5648                                  
  5649                                  
  5650                                  synth_16bit_shift_2_fast:
  5651 00003C19 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 0,2,1
  5652 00003C20 740E                                    jz      short .no_rdtsc_supported
  5653 00003C22 0F31                                    rdtsc
  5654 00003C24 2905[948D0000]                          sub     [rdtsc_synth_dct], eax
  5655 00003C2A 1915[988D0000]                          sbb     [rdtsc_synth_dct+4], edx
  5656                                  
  5657                                  .no_rdtsc_supported:
  5658 00003C30 BE[C8D30000]                            mov	esi, mp3_sb_samples
  5659 00003C35 8B3D[5C0A0100]                          mov	edi, [mp3_samples_dst]
  5660 00003C3B C705[680A0100]0000-                     mov	dword [mp3_curr_channel], 0
  5660 00003C43 0000               
  5661                                  
  5662                                  .synth_channel_lop:
  5663 00003C45 56                                      push	esi
  5664 00003C46 57                                      push	edi
  5665 00003C47 893D[A8B30000]                          mov	[mp3_curr_syn_dst], edi
  5666 00003C4D C705[700A0100]0000-                     mov	dword [mp3_curr_frame], 0
  5666 00003C55 0000               
  5667                                  
  5668                                  .synth_frame_lop:
  5669 00003C57 56                                      push    esi
  5670 00003C58 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  5671 00003C5F 740E                                    jz      short .no_rdtsc_supported@
  5672 00003C61 0F31                                    rdtsc
  5673 00003C63 2905[AC8D0000]                          sub     [rdtsc_dct32], eax
  5674 00003C69 1915[B08D0000]                          sbb     [rdtsc_dct32+4], edx
  5675                                  
  5676                                  .no_rdtsc_supported@:
  5677 00003C6F 8B15[680A0100]                          mov     edx, [mp3_curr_channel]
  5678 00003C75 8B0495[C0D30000]                        mov     eax, [mp3_synth_index+edx*4]
  5679 00003C7C 832C95[C0D30000]20                      sub     dword [mp3_synth_index+edx*4], 32
  5680 00003C84 C1E20A                                  shl     edx, 10
  5681 00003C87 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  5682 00003C8C 09D0                                    or      eax, edx
  5683 00003C8E A3[A4B30000]                            mov     [mp3_curr_syn_index], eax
  5684 00003C93 8B3D[A4B30000]                          mov     edi, [mp3_curr_syn_index]
  5685 00003C99 8D3CBD[C0B30000]                        lea     edi, [mp3_synth_buf+edi*4]
  5686 00003CA0 E855F6FFFF                              call    mp3_dct32_shift_2 ; mp3_dct32_shift_&rate_shift
  5687 00003CA5 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  5688 00003CAC 740E                                    jz      short .no_rdtsc_supported@@
  5689 00003CAE 0F31                                    rdtsc
  5690 00003CB0 0105[AC8D0000]                          add     [rdtsc_dct32], eax
  5691 00003CB6 1115[B08D0000]                          adc     [rdtsc_dct32+4], edx
  5692                                  
  5693                                  .no_rdtsc_supported@@:
  5694 00003CBC F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  5695 00003CC3 740E                                    jz      short .no_rdtsc_supported@@@
  5696 00003CC5 0F31                                    rdtsc
  5697 00003CC7 2905[C48D0000]                          sub     [rdtsc_synth], eax
  5698 00003CCD 1915[C88D0000]                          sbb     [rdtsc_synth+4], edx
  5699                                  
  5700                                  .no_rdtsc_supported@@@:
  5701 00003CD3 E888000000                              call    mp3_synth_filter_this_16bit_shift_2_fast ;
  5702                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fas
  5703 00003CD8 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  5704 00003CDF 740E                                    jz      short .no_rdtsc_supported@@@@
  5705 00003CE1 0F31                                    rdtsc
  5706 00003CE3 0105[C48D0000]                          add     [rdtsc_synth], eax
  5707 00003CE9 1115[C88D0000]                          adc     [rdtsc_synth+4], edx
  5708                                  
  5709                                  .no_rdtsc_supported@@@@:
  5710 00003CEF 5E                                      pop     esi
  5711 00003CF0 A1[640A0100]                            mov     eax, [mp3_samples_dst_step]
  5712 00003CF5 C1E005                                  shl     eax, 5
  5713 00003CF8 8A0D[178C0000]                          mov     cl, [option_rate_shift]
  5714 00003CFE D3E8                                    shr     eax, cl
  5715 00003D00 0105[A8B30000]                          add     [mp3_curr_syn_dst], eax
  5716 00003D06 81C680000000                            add     esi, 128        ; SBLIMIT*4
  5717 00003D0C FF05[700A0100]                          inc     dword [mp3_curr_frame]
  5718 00003D12 A1[700A0100]                            mov     eax, [mp3_curr_frame]
  5719 00003D17 3B05[ACB30000]                          cmp     eax, [mp3_nb_frames]
  5720 00003D1D 0F8234FFFFFF                            jb      .synth_frame_lop
  5721 00003D23 5F                                      pop     edi
  5722 00003D24 5E                                      pop     esi
  5723 00003D25 033D[A0B30000]                          add     edi, [mp3_bytes_per_sample]
  5724 00003D2B 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  5725 00003D31 FF05[680A0100]                          inc     dword [mp3_curr_channel]
  5726 00003D37 A1[680A0100]                            mov     eax, [mp3_curr_channel]
  5727 00003D3C 3B05[98B30000]                          cmp     eax, [mp3_output_num_channels]
  5728 00003D42 0F82FDFEFFFF                            jb      .synth_channel_lop
  5729 00003D48 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  5730 00003D4F 740E                                    jz      short .no_rdtsc_supported@@@@@
  5731 00003D51 0F31                                    rdtsc
  5732 00003D53 0105[948D0000]                          add     [rdtsc_synth_dct], eax
  5733 00003D59 1115[988D0000]                          adc     [rdtsc_synth_dct+4], edx
  5734                                  
  5735                                  .no_rdtsc_supported@@@@@:
  5736 00003D5F C3                                      retn
  5737                                  
  5738                                  
  5739                                  ; =============== S U B R O U T I N E =======================================
  5740                                  
  5741                                  
  5742                                  mp3_synth_filter_this_16bit_shift_2_fast:
  5743 00003D60 A1[A4B30000]                            mov     eax, [mp3_curr_syn_index]
  5744 00003D65 A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh
  5745 00003D6A 0F84A2010000                            jz      .append_copy_to_window
  5746 00003D70 90                                      nop
  5747                                  
  5748                                  .append_copy_to_window_back:
  5749 00003D71 89C5                                    mov     ebp, eax
  5750 00003D73 81E5C0010000                            and     ebp, 1C0h       ; 1FFh-1Fh-20h
  5751 00003D79 2520040000                              and     eax, 420h       ; 20h+(1 shl 10)
  5752 00003D7E 8D7010                                  lea     esi, [eax+10h]
  5753 00003D81 8D7830                                  lea     edi, [eax+30h]
  5754 00003D84 F7DD                                    neg     ebp
  5755 00003D86 81E5C0010000                            and     ebp, 1C0h
  5756 00003D8C 8B0D[A8B30000]                          mov     ecx, [mp3_curr_syn_dst]
  5757                                  
  5758                                  .samples_lop:
  5759 00003D92 BB00200020                              mov     ebx, 20002000h  ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  5760                                                                          ; @@out_shift equ (OUT_SHIFT_fast+(8*force_8bit))
  5761                                                                          ; out_shift = 14
  5762 00003D97 8B14B5[C0B30000]                        mov     edx, [mp3_synth_buf+esi*4]
  5763 00003D9E 0FBF842D[78050500]                      movsx   eax, word [mp3_synth_win+ebp*2]
  5764 00003DA6 0FAFC2                                  imul    eax, edx
  5765 00003DA9 01C3                                    add     ebx, eax
  5766 00003DAB 8B14B5[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  5767 00003DB2 0FBF842D[F8050500]                      movsx   eax, word [(mp3_synth_win+80h)+ebp*2]
  5768 00003DBA 0FAFC2                                  imul    eax, edx
  5769 00003DBD 01C3                                    add     ebx, eax
  5770 00003DBF 8B14B5[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  5771 00003DC6 0FBF842D[78060500]                      movsx   eax, word [(mp3_synth_win+100h)+ebp*2]
  5772 00003DCE 0FAFC2                                  imul    eax, edx
  5773 00003DD1 01C3                                    add     ebx, eax
  5774 00003DD3 8B14B5[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  5775 00003DDA 0FBF842D[F8060500]                      movsx   eax, word [(mp3_synth_win+180h)+ebp*2]
  5776 00003DE2 0FAFC2                                  imul    eax, edx
  5777 00003DE5 01C3                                    add     ebx, eax
  5778 00003DE7 8B14B5[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  5779 00003DEE 0FBF842D[78070500]                      movsx   eax, word [(mp3_synth_win+200h)+ebp*2]
  5780 00003DF6 0FAFC2                                  imul    eax, edx
  5781 00003DF9 01C3                                    add     ebx, eax
  5782 00003DFB 8B14B5[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  5783 00003E02 0FBF842D[F8070500]                      movsx   eax, word [(mp3_synth_win+280h)+ebp*2]
  5784 00003E0A 0FAFC2                                  imul    eax, edx
  5785 00003E0D 01C3                                    add     ebx, eax
  5786 00003E0F 8B14B5[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  5787 00003E16 0FBF842D[78080500]                      movsx   eax, word [(mp3_synth_win+300h)+ebp*2]
  5788 00003E1E 0FAFC2                                  imul    eax, edx
  5789 00003E21 01C3                                    add     ebx, eax
  5790 00003E23 8B14B5[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  5791 00003E2A 0FBF842D[F8080500]                      movsx   eax, word [(mp3_synth_win+380h)+ebp*2]
  5792 00003E32 0FAFC2                                  imul    eax, edx
  5793 00003E35 01C3                                    add     ebx, eax
  5794 00003E37 8B14BD[C0B30000]                        mov     edx, [mp3_synth_buf+edi*4]
  5795 00003E3E 0FBF842D[B8050500]                      movsx   eax, word [(mp3_synth_win+40h)+ebp*2]
  5796 00003E46 0FAFC2                                  imul    eax, edx
  5797 00003E49 01C3                                    add     ebx, eax
  5798 00003E4B 8B14BD[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  5799 00003E52 0FBF842D[38060500]                      movsx   eax, word [(mp3_synth_win+0C0h)+ebp*2]
  5800 00003E5A 0FAFC2                                  imul    eax, edx
  5801 00003E5D 01C3                                    add     ebx, eax
  5802 00003E5F 8B14BD[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  5803 00003E66 0FBF842D[B8060500]                      movsx   eax, word [(mp3_synth_win+140h)+ebp*2]
  5804 00003E6E 0FAFC2                                  imul    eax, edx
  5805 00003E71 01C3                                    add     ebx, eax
  5806 00003E73 8B14BD[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  5807 00003E7A 0FBF842D[38070500]                      movsx   eax, word [(mp3_synth_win+1C0h)+ebp*2]
  5808 00003E82 0FAFC2                                  imul    eax, edx
  5809 00003E85 01C3                                    add     ebx, eax
  5810 00003E87 8B14BD[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  5811 00003E8E 0FBF842D[B8070500]                      movsx   eax, word [(mp3_synth_win+240h)+ebp*2]
  5812 00003E96 0FAFC2                                  imul    eax, edx
  5813 00003E99 01C3                                    add     ebx, eax
  5814 00003E9B 8B14BD[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  5815 00003EA2 0FBF842D[38080500]                      movsx   eax, word [(mp3_synth_win+2C0h)+ebp*2]
  5816 00003EAA 0FAFC2                                  imul    eax, edx
  5817 00003EAD 01C3                                    add     ebx, eax
  5818 00003EAF 8B14BD[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  5819 00003EB6 0FBF842D[B8080500]                      movsx   eax, word [(mp3_synth_win+340h)+ebp*2]
  5820 00003EBE 0FAFC2                                  imul    eax, edx
  5821 00003EC1 01C3                                    add     ebx, eax
  5822 00003EC3 8B14BD[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  5823 00003ECA 0FBF842D[38090500]                      movsx   eax, word [(mp3_synth_win+3C0h)+ebp*2]
  5824 00003ED2 0FAFC2                                  imul    eax, edx
  5825 00003ED5 01C3                                    add     ebx, eax
  5826 00003ED7 81FB00000040                            cmp     ebx, 40000000h
  5827 00003EDD 7328                                    jnb     short .sat
  5828 00003EDF C1FB0E                                  sar     ebx, 14
  5829 00003EE2 81EB00800000                            sub     ebx, 8000h      ; make 16bit signed
  5830                                  
  5831                                  .sat_back:
  5832 00003EE8 668919                                  mov     [ecx], bx
  5833 00003EEB 030D[640A0100]                          add     ecx, [mp3_samples_dst_step]
  5834 00003EF1 83C604                                  add     esi, 4
  5835 00003EF4 83EF04                                  sub     edi, 4
  5836 00003EF7 83C504                                  add     ebp, 4
  5837 00003EFA F7C51F000000                            test    ebp, 1Fh
  5838 00003F00 0F858CFEFFFF                            jnz     .samples_lop
  5839 00003F06 C3                                      retn
  5840                                  
  5841                                  .sat:
  5842 00003F07 C1FB1F                                  sar     ebx, 31
  5843 00003F0A 81F3FF7F0000                            xor     ebx, 7FFFh
  5844 00003F10 EBD6                                    jmp     short .sat_back
  5845                                  
  5846                                  .append_copy_to_window:
  5847 00003F12 8D3485[C0B30000]                        lea     esi, [mp3_synth_buf+eax*4]
  5848 00003F19 8DBE00080000                            lea     edi, [esi+2048]
  5849 00003F1F B912000000                              mov     ecx, 18
  5850 00003F24 F3A5                                    rep movsd
  5851 00003F26 E946FEFFFF                              jmp     .append_copy_to_window_back
  5852                                  
  5853                                  
  5854                                  ; =============== S U B R O U T I N E =======================================
  5855                                  
  5856                                  
  5857                                  synth_8bit_shift_0_fast:
  5858 00003F2B F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 1,0,1
  5859 00003F32 740E                                    jz      short .no_rdtsc_supported
  5860 00003F34 0F31                                    rdtsc
  5861 00003F36 2905[948D0000]                          sub     [rdtsc_synth_dct], eax
  5862 00003F3C 1915[988D0000]                          sbb     [rdtsc_synth_dct+4], edx
  5863                                  
  5864                                  .no_rdtsc_supported:
  5865 00003F42 BE[C8D30000]                            mov	esi, mp3_sb_samples
  5866 00003F47 8B3D[5C0A0100]                          mov	edi, [mp3_samples_dst]
  5867 00003F4D C705[680A0100]0000-                     mov	dword [mp3_curr_channel], 0
  5867 00003F55 0000               
  5868                                  
  5869                                  .synth_channel_lop:
  5870 00003F57 56                                      push	esi
  5871 00003F58 57                                      push	edi
  5872 00003F59 893D[A8B30000]                          mov	[mp3_curr_syn_dst], edi
  5873 00003F5F C705[700A0100]0000-                     mov	dword [mp3_curr_frame], 0
  5873 00003F67 0000               
  5874                                  
  5875                                  .synth_frame_lop:
  5876 00003F69 56                                      push    esi
  5877 00003F6A F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  5878 00003F71 740E                                    jz      short .no_rdtsc_supported@
  5879 00003F73 0F31                                    rdtsc
  5880 00003F75 2905[AC8D0000]                          sub     [rdtsc_dct32], eax
  5881 00003F7B 1915[B08D0000]                          sbb     [rdtsc_dct32+4], edx
  5882                                  
  5883                                  .no_rdtsc_supported@:
  5884 00003F81 8B15[680A0100]                          mov     edx, [mp3_curr_channel]
  5885 00003F87 8B0495[C0D30000]                        mov     eax, [mp3_synth_index+edx*4]
  5886 00003F8E 832C95[C0D30000]20                      sub     dword [mp3_synth_index+edx*4], 32
  5887 00003F96 C1E20A                                  shl     edx, 10
  5888 00003F99 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  5889 00003F9E 09D0                                    or      eax, edx
  5890 00003FA0 A3[A4B30000]                            mov     [mp3_curr_syn_index], eax
  5891 00003FA5 8B3D[A4B30000]                          mov     edi, [mp3_curr_syn_index]
  5892 00003FAB 8D3CBD[C0B30000]                        lea     edi, [mp3_synth_buf+edi*4]
  5893 00003FB2 E873E6FFFF                              call    mp3_dct32_shift_0 ; mp3_dct32_shift_&rate_shift
  5894 00003FB7 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  5895 00003FBE 740E                                    jz      short .no_rdtsc_supported@@
  5896 00003FC0 0F31                                    rdtsc
  5897 00003FC2 0105[AC8D0000]                          add     [rdtsc_dct32], eax
  5898 00003FC8 1115[B08D0000]                          adc     [rdtsc_dct32+4], edx
  5899                                  
  5900                                  .no_rdtsc_supported@@:
  5901 00003FCE F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  5902 00003FD5 740E                                    jz      short .no_rdtsc_supported@@@
  5903 00003FD7 0F31                                    rdtsc
  5904 00003FD9 2905[C48D0000]                          sub     [rdtsc_synth], eax
  5905 00003FDF 1915[C88D0000]                          sbb     [rdtsc_synth+4], edx
  5906                                  
  5907                                  .no_rdtsc_supported@@@:
  5908 00003FE5 E888000000                              call    mp3_synth_filter_this_8bit_shift_0_fast ;
  5909                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  5910 00003FEA F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  5911 00003FF1 740E                                    jz      short .no_rdtsc_supported@@@@
  5912 00003FF3 0F31                                    rdtsc
  5913 00003FF5 0105[C48D0000]                          add     [rdtsc_synth], eax
  5914 00003FFB 1115[C88D0000]                          adc     [rdtsc_synth+4], edx
  5915                                  
  5916                                  .no_rdtsc_supported@@@@:
  5917 00004001 5E                                      pop     esi
  5918 00004002 A1[640A0100]                            mov     eax, [mp3_samples_dst_step]
  5919 00004007 C1E005                                  shl     eax, 5
  5920 0000400A 8A0D[178C0000]                          mov     cl, [option_rate_shift]
  5921 00004010 D3E8                                    shr     eax, cl
  5922 00004012 0105[A8B30000]                          add     [mp3_curr_syn_dst], eax
  5923 00004018 81C680000000                            add     esi, 128        ; SBLIMIT*4
  5924 0000401E FF05[700A0100]                          inc     dword [mp3_curr_frame]
  5925 00004024 A1[700A0100]                            mov     eax, [mp3_curr_frame]
  5926 00004029 3B05[ACB30000]                          cmp     eax, [mp3_nb_frames]
  5927 0000402F 0F8234FFFFFF                            jb      .synth_frame_lop
  5928 00004035 5F                                      pop     edi
  5929 00004036 5E                                      pop     esi
  5930 00004037 033D[A0B30000]                          add     edi, [mp3_bytes_per_sample]
  5931 0000403D 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  5932 00004043 FF05[680A0100]                          inc     dword [mp3_curr_channel]
  5933 00004049 A1[680A0100]                            mov     eax, [mp3_curr_channel]
  5934 0000404E 3B05[98B30000]                          cmp     eax, [mp3_output_num_channels]
  5935 00004054 0F82FDFEFFFF                            jb      .synth_channel_lop
  5936 0000405A F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  5937 00004061 740E                                    jz      short .no_rdtsc_supported@@@@@
  5938 00004063 0F31                                    rdtsc
  5939 00004065 0105[948D0000]                          add     [rdtsc_synth_dct], eax
  5940 0000406B 1115[988D0000]                          adc     [rdtsc_synth_dct+4], edx
  5941                                  
  5942                                  .no_rdtsc_supported@@@@@:
  5943 00004071 C3                                      retn
  5944                                  
  5945                                  
  5946                                  ; =============== S U B R O U T I N E =======================================
  5947                                  
  5948                                  
  5949                                  mp3_synth_filter_this_8bit_shift_0_fast:
  5950 00004072 A1[A4B30000]                            mov     eax, [mp3_curr_syn_index]
  5951 00004077 A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh
  5952 0000407C 0F8491010000                            jz      .append_copy_to_window
  5953 00004082 90                                      nop
  5954                                  
  5955                                  .append_copy_to_window_back:
  5956 00004083 89C5                                    mov     ebp, eax
  5957 00004085 81E5C0010000                            and     ebp, 1C0h       ; 1FFh-1Fh-20h
  5958 0000408B 2520040000                              and     eax, 420h       ; 20h+(1 shl 10)
  5959 00004090 8D7010                                  lea     esi, [eax+10h]
  5960 00004093 8D7830                                  lea     edi, [eax+30h]
  5961 00004096 F7DD                                    neg     ebp
  5962 00004098 81E5C0010000                            and     ebp, 1C0h
  5963 0000409E 8B0D[A8B30000]                          mov     ecx, [mp3_curr_syn_dst]
  5964                                  
  5965                                  .samples_lop:
  5966 000040A4 BB00002020                              mov     ebx, 20200000h  ; mov @@sum,(80h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  5967                                                                          ; @@out_shift equ (OUT_SHIFT_fast(8*force_8bit))
  5968                                                                          ; @@out_shift = 22
  5969 000040A9 8B14B5[C0B30000]                        mov     edx, [mp3_synth_buf+esi*4] ; @@SUM8 macro sum,win,ww,syn
  5970                                                                          ; @@SUM8 @@sum,@@win1,0,@@syn1
  5971                                                                          ; IRP nn,0,1,2,3,4,5,6,7
  5972                                                                          ; mov edx,dword ptr [mp3_synth_buf+syn*4+(nn*64*4)]
  5973                                                                          ; movsx eax,word ptr [mp3_synth_win+win*2+(nn*64*2)+ww*2]
  5974                                                                          ; imul eax,edx
  5975                                                                          ; add sum,eax
  5976 000040B0 0FBF842D[78050500]                      movsx   eax, word [mp3_synth_win+ebp*2]
  5977 000040B8 0FAFC2                                  imul    eax, edx
  5978 000040BB 01C3                                    add     ebx, eax
  5979 000040BD 8B14B5[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4] ; nn=1
  5980 000040C4 0FBF842D[F8050500]                      movsx   eax, word [(mp3_synth_win+80h)+ebp*2] ; ww=0
  5981 000040CC 0FAFC2                                  imul    eax, edx
  5982 000040CF 01C3                                    add     ebx, eax
  5983 000040D1 8B14B5[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  5984 000040D8 0FBF842D[78060500]                      movsx   eax, word [(mp3_synth_win+100h)+ebp*2]
  5985 000040E0 0FAFC2                                  imul    eax, edx
  5986 000040E3 01C3                                    add     ebx, eax
  5987 000040E5 8B14B5[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  5988 000040EC 0FBF842D[F8060500]                      movsx   eax, word [(mp3_synth_win+180h)+ebp*2]
  5989 000040F4 0FAFC2                                  imul    eax, edx
  5990 000040F7 01C3                                    add     ebx, eax
  5991 000040F9 8B14B5[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  5992 00004100 0FBF842D[78070500]                      movsx   eax, word [(mp3_synth_win+200h)+ebp*2]
  5993 00004108 0FAFC2                                  imul    eax, edx
  5994 0000410B 01C3                                    add     ebx, eax
  5995 0000410D 8B14B5[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  5996 00004114 0FBF842D[F8070500]                      movsx   eax, word [(mp3_synth_win+280h)+ebp*2]
  5997 0000411C 0FAFC2                                  imul    eax, edx
  5998 0000411F 01C3                                    add     ebx, eax
  5999 00004121 8B14B5[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  6000 00004128 0FBF842D[78080500]                      movsx   eax, word [(mp3_synth_win+300h)+ebp*2]
  6001 00004130 0FAFC2                                  imul    eax, edx
  6002 00004133 01C3                                    add     ebx, eax
  6003 00004135 8B14B5[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  6004 0000413C 0FBF842D[F8080500]                      movsx   eax, word [(mp3_synth_win+380h)+ebp*2]
  6005 00004144 0FAFC2                                  imul    eax, edx
  6006 00004147 01C3                                    add     ebx, eax
  6007 00004149 8B14BD[C0B30000]                        mov     edx, [mp3_synth_buf+edi*4]
  6008 00004150 0FBF842D[B8050500]                      movsx   eax, word [(mp3_synth_win+40h)+ebp*2]
  6009 00004158 0FAFC2                                  imul    eax, edx
  6010 0000415B 01C3                                    add     ebx, eax
  6011 0000415D 8B14BD[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  6012 00004164 0FBF842D[38060500]                      movsx   eax, word [(mp3_synth_win+0C0h)+ebp*2]
  6013 0000416C 0FAFC2                                  imul    eax, edx
  6014 0000416F 01C3                                    add     ebx, eax
  6015 00004171 8B14BD[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4] ; nn=2
  6016 00004178 0FBF842D[B8060500]                      movsx   eax, word [(mp3_synth_win+140h)+ebp*2] ; ww=32
  6017 00004180 0FAFC2                                  imul    eax, edx
  6018 00004183 01C3                                    add     ebx, eax
  6019 00004185 8B14BD[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  6020 0000418C 0FBF842D[38070500]                      movsx   eax, word [(mp3_synth_win+1C0h)+ebp*2]
  6021 00004194 0FAFC2                                  imul    eax, edx
  6022 00004197 01C3                                    add     ebx, eax
  6023 00004199 8B14BD[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  6024 000041A0 0FBF842D[B8070500]                      movsx   eax, word [(mp3_synth_win+240h)+ebp*2]
  6025 000041A8 0FAFC2                                  imul    eax, edx
  6026 000041AB 01C3                                    add     ebx, eax
  6027 000041AD 8B14BD[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  6028 000041B4 0FBF842D[38080500]                      movsx   eax, word [(mp3_synth_win+2C0h)+ebp*2]
  6029 000041BC 0FAFC2                                  imul    eax, edx
  6030 000041BF 01C3                                    add     ebx, eax
  6031 000041C1 8B14BD[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  6032 000041C8 0FBF842D[B8080500]                      movsx   eax, word [(mp3_synth_win+340h)+ebp*2]
  6033 000041D0 0FAFC2                                  imul    eax, edx
  6034 000041D3 01C3                                    add     ebx, eax
  6035 000041D5 8B14BD[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  6036 000041DC 0FBF842D[38090500]                      movsx   eax, word [(mp3_synth_win+3C0h)+ebp*2]
  6037 000041E4 0FAFC2                                  imul    eax, edx
  6038 000041E7 01C3                                    add     ebx, eax
  6039 000041E9 81FB00000040                            cmp     ebx, 40000000h  ; cmp  @@sum,100h SHL (@@out_shift)
  6040 000041EF 731B                                    jnb     short .sat
  6041 000041F1 C1FB16                                  sar     ebx, 22         ; sar @@sum,(@@out_shift)
  6042                                  
  6043                                  .sat_back:
  6044 000041F4 8819                                    mov     [ecx], bl       ; mov byte ptr [@@dst],@@sum_8bit
  6045 000041F6 030D[640A0100]                          add     ecx, [mp3_samples_dst_step]
  6046 000041FC 46                                      inc     esi             ; inc @@syn1
  6047 000041FD 4F                                      dec     edi             ; dec @@syn2
  6048 000041FE 45                                      inc     ebp             ; inc @@win1
  6049 000041FF F7C51F000000                            test    ebp, 1Fh        ; IF LONG_WINDOW
  6050                                                                          ; test @@win1,1fh
  6051 00004205 0F8599FEFFFF                            jnz     .samples_lop
  6052 0000420B C3                                      retn
  6053                                  
  6054                                  .sat:                                 
  6055 0000420C C1FB1F                                  sar     ebx, 31         ; sar @@sum,31 ; FFFFFFFFh,00000000h
  6056 0000420F F7D3                                    not     ebx             ; IF force_8bit
  6057                                                                          ; not @@sum ; 00000000h,FFFFFFFFh (unsigned 8bit)
  6058 00004211 EBE1                                    jmp     short .sat_back
  6059                                  
  6060                                  .append_copy_to_window:
  6061 00004213 8D3485[C0B30000]                        lea     esi, [mp3_synth_buf+eax*4]
  6062 0000421A 8DBE00080000                            lea     edi, [esi+2048] ; [esi+512*4]
  6063 00004220 B912000000                              mov     ecx, 18         ; (12h*4)/4
  6064 00004225 F3A5                                    rep movsd
  6065 00004227 E957FEFFFF                              jmp     .append_copy_to_window_back
  6066                                  
  6067                                  
  6068                                  ; =============== S U B R O U T I N E =======================================
  6069                                  
  6070                                  
  6071                                  synth_8bit_shift_1_fast:
  6072 0000422C F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 1,1,1
  6073 00004233 740E                                    jz      short .no_rdtsc_supported
  6074 00004235 0F31                                    rdtsc
  6075 00004237 2905[948D0000]                          sub     [rdtsc_synth_dct], eax
  6076 0000423D 1915[988D0000]                          sbb     [rdtsc_synth_dct+4], edx
  6077                                  
  6078                                  .no_rdtsc_supported:
  6079 00004243 BE[C8D30000]                            mov	esi, mp3_sb_samples
  6080 00004248 8B3D[5C0A0100]                          mov	edi, [mp3_samples_dst]
  6081 0000424E C705[680A0100]0000-                     mov	dword [mp3_curr_channel], 0
  6081 00004256 0000               
  6082                                  
  6083                                  .synth_channel_lop:
  6084 00004258 56                                      push	esi
  6085 00004259 57                                      push	edi
  6086 0000425A 893D[A8B30000]                          mov	[mp3_curr_syn_dst], edi
  6087 00004260 C705[700A0100]0000-                     mov	dword [mp3_curr_frame], 0
  6087 00004268 0000               
  6088                                  
  6089                                  .synth_frame_lop:
  6090 0000426A 56                                      push    esi
  6091 0000426B F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6092 00004272 740E                                    jz      short .no_rdtsc_supported@
  6093 00004274 0F31                                    rdtsc
  6094 00004276 2905[AC8D0000]                          sub     [rdtsc_dct32], eax
  6095 0000427C 1915[B08D0000]                          sbb     [rdtsc_dct32+4], edx
  6096                                  
  6097                                  .no_rdtsc_supported@:
  6098 00004282 8B15[680A0100]                          mov     edx, [mp3_curr_channel]
  6099 00004288 8B0495[C0D30000]                        mov     eax, [mp3_synth_index+edx*4]
  6100 0000428F 832C95[C0D30000]20                      sub     dword [mp3_synth_index+edx*4], 32
  6101 00004297 C1E20A                                  shl     edx, 10
  6102 0000429A 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  6103 0000429F 09D0                                    or      eax, edx
  6104 000042A1 A3[A4B30000]                            mov     [mp3_curr_syn_index], eax
  6105 000042A6 8B3D[A4B30000]                          mov     edi, [mp3_curr_syn_index]
  6106 000042AC 8D3CBD[C0B30000]                        lea     edi, [mp3_synth_buf+edi*4]
  6107 000042B3 E852ECFFFF                              call    mp3_dct32_shift_1 ; mp3_dct32_shift_&rate_shift
  6108 000042B8 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6109 000042BF 740E                                    jz      short .no_rdtsc_supported@@
  6110 000042C1 0F31                                    rdtsc
  6111 000042C3 0105[AC8D0000]                          add     [rdtsc_dct32], eax
  6112 000042C9 1115[B08D0000]                          adc     [rdtsc_dct32+4], edx
  6113                                  
  6114                                  .no_rdtsc_supported@@:
  6115 000042CF F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6116 000042D6 740E                                    jz      short .no_rdtsc_supported@@@
  6117 000042D8 0F31                                    rdtsc
  6118 000042DA 2905[C48D0000]                          sub     [rdtsc_synth], eax
  6119 000042E0 1915[C88D0000]                          sbb     [rdtsc_synth+4], edx
  6120                                  
  6121                                  .no_rdtsc_supported@@@:
  6122 000042E6 E888000000                              call    mp3_synth_filter_this_8bit_shift_1_fast ;
  6123                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  6124 000042EB F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6125 000042F2 740E                                    jz      short .no_rdtsc_supported@@@@
  6126 000042F4 0F31                                    rdtsc
  6127 000042F6 0105[C48D0000]                          add     [rdtsc_synth], eax
  6128 000042FC 1115[C88D0000]                          adc     [rdtsc_synth+4], edx
  6129                                  
  6130                                  .no_rdtsc_supported@@@@:
  6131 00004302 5E                                      pop     esi
  6132 00004303 A1[640A0100]                            mov     eax, [mp3_samples_dst_step]
  6133 00004308 C1E005                                  shl     eax, 5
  6134 0000430B 8A0D[178C0000]                          mov     cl, [option_rate_shift]
  6135 00004311 D3E8                                    shr     eax, cl
  6136 00004313 0105[A8B30000]                          add     [mp3_curr_syn_dst], eax
  6137 00004319 81C680000000                            add     esi, 128        ; SBLIMIT*4
  6138 0000431F FF05[700A0100]                          inc     dword [mp3_curr_frame]
  6139 00004325 A1[700A0100]                            mov     eax, [mp3_curr_frame]
  6140 0000432A 3B05[ACB30000]                          cmp     eax, [mp3_nb_frames]
  6141 00004330 0F8234FFFFFF                            jb      .synth_frame_lop
  6142 00004336 5F                                      pop     edi
  6143 00004337 5E                                      pop     esi
  6144 00004338 033D[A0B30000]                          add     edi, [mp3_bytes_per_sample]
  6145 0000433E 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  6146 00004344 FF05[680A0100]                          inc     dword [mp3_curr_channel]
  6147 0000434A A1[680A0100]                            mov     eax, [mp3_curr_channel]
  6148 0000434F 3B05[98B30000]                          cmp     eax, [mp3_output_num_channels]
  6149 00004355 0F82FDFEFFFF                            jb      .synth_channel_lop
  6150 0000435B F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6151 00004362 740E                                    jz      short .no_rdtsc_supported@@@@@
  6152 00004364 0F31                                    rdtsc
  6153 00004366 0105[948D0000]                          add     [rdtsc_synth_dct], eax
  6154 0000436C 1115[988D0000]                          adc     [rdtsc_synth_dct+4], edx
  6155                                  
  6156                                  .no_rdtsc_supported@@@@@:
  6157 00004372 C3                                      retn
  6158                                  
  6159                                  
  6160                                  ; =============== S U B R O U T I N E =======================================
  6161                                  
  6162                                  
  6163                                  mp3_synth_filter_this_8bit_shift_1_fast:
  6164 00004373 A1[A4B30000]                            mov     eax, [mp3_curr_syn_index]
  6165 00004378 A9E0010000                              test    eax, 1E0h
  6166 0000437D 0F8497010000                            jz      .append_copy_to_window
  6167 00004383 90                                      nop
  6168                                  
  6169                                  .append_copy_to_window_back:
  6170 00004384 89C5                                    mov     ebp, eax
  6171 00004386 81E5C0010000                            and     ebp, 1C0h
  6172 0000438C 2520040000                              and     eax, 420h
  6173 00004391 8D7010                                  lea     esi, [eax+10h]
  6174 00004394 8D7830                                  lea     edi, [eax+30h]
  6175 00004397 F7DD                                    neg     ebp
  6176 00004399 81E5C0010000                            and     ebp, 1C0h
  6177 0000439F 8B0D[A8B30000]                          mov     ecx, [mp3_curr_syn_dst]
  6178                                  
  6179                                  .samples_lop:
  6180 000043A5 BB00002020                              mov     ebx, 20200000h
  6181 000043AA 8B14B5[C0B30000]                        mov     edx, [mp3_synth_buf+esi*4]
  6182 000043B1 0FBF842D[78050500]                      movsx   eax, word [mp3_synth_win+ebp*2]
  6183 000043B9 0FAFC2                                  imul    eax, edx
  6184 000043BC 01C3                                    add     ebx, eax
  6185 000043BE 8B14B5[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  6186 000043C5 0FBF842D[F8050500]                      movsx   eax, word [(mp3_synth_win+80h)+ebp*2]
  6187 000043CD 0FAFC2                                  imul    eax, edx
  6188 000043D0 01C3                                    add     ebx, eax
  6189 000043D2 8B14B5[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  6190 000043D9 0FBF842D[78060500]                      movsx   eax, word [(mp3_synth_win+100h)+ebp*2]
  6191 000043E1 0FAFC2                                  imul    eax, edx
  6192 000043E4 01C3                                    add     ebx, eax
  6193 000043E6 8B14B5[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  6194 000043ED 0FBF842D[F8060500]                      movsx   eax, word [(mp3_synth_win+180h)+ebp*2]
  6195 000043F5 0FAFC2                                  imul    eax, edx
  6196 000043F8 01C3                                    add     ebx, eax
  6197 000043FA 8B14B5[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  6198 00004401 0FBF842D[78070500]                      movsx   eax, word [(mp3_synth_win+200h)+ebp*2]
  6199 00004409 0FAFC2                                  imul    eax, edx
  6200 0000440C 01C3                                    add     ebx, eax
  6201 0000440E 8B14B5[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  6202 00004415 0FBF842D[F8070500]                      movsx   eax, word [(mp3_synth_win+280h)+ebp*2]
  6203 0000441D 0FAFC2                                  imul    eax, edx
  6204 00004420 01C3                                    add     ebx, eax
  6205 00004422 8B14B5[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  6206 00004429 0FBF842D[78080500]                      movsx   eax, word [(mp3_synth_win+300h)+ebp*2]
  6207 00004431 0FAFC2                                  imul    eax, edx
  6208 00004434 01C3                                    add     ebx, eax
  6209 00004436 8B14B5[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  6210 0000443D 0FBF842D[F8080500]                      movsx   eax, word [(mp3_synth_win+380h)+ebp*2]
  6211 00004445 0FAFC2                                  imul    eax, edx
  6212 00004448 01C3                                    add     ebx, eax
  6213 0000444A 8B14BD[C0B30000]                        mov     edx, [mp3_synth_buf+edi*4]
  6214 00004451 0FBF842D[B8050500]                      movsx   eax, word [(mp3_synth_win+40h)+ebp*2]
  6215 00004459 0FAFC2                                  imul    eax, edx
  6216 0000445C 01C3                                    add     ebx, eax
  6217 0000445E 8B14BD[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  6218 00004465 0FBF842D[38060500]                      movsx   eax, word [(mp3_synth_win+0C0h)+ebp*2]
  6219 0000446D 0FAFC2                                  imul    eax, edx
  6220 00004470 01C3                                    add     ebx, eax
  6221 00004472 8B14BD[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  6222 00004479 0FBF842D[B8060500]                      movsx   eax, word [(mp3_synth_win+140h)+ebp*2]
  6223 00004481 0FAFC2                                  imul    eax, edx
  6224 00004484 01C3                                    add     ebx, eax
  6225 00004486 8B14BD[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  6226 0000448D 0FBF842D[38070500]                      movsx   eax, word [(mp3_synth_win+1C0h)+ebp*2]
  6227 00004495 0FAFC2                                  imul    eax, edx
  6228 00004498 01C3                                    add     ebx, eax
  6229 0000449A 8B14BD[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  6230 000044A1 0FBF842D[B8070500]                      movsx   eax, word [(mp3_synth_win+240h)+ebp*2]
  6231 000044A9 0FAFC2                                  imul    eax, edx
  6232 000044AC 01C3                                    add     ebx, eax
  6233 000044AE 8B14BD[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  6234 000044B5 0FBF842D[38080500]                      movsx   eax, word [(mp3_synth_win+2C0h)+ebp*2]
  6235 000044BD 0FAFC2                                  imul    eax, edx
  6236 000044C0 01C3                                    add     ebx, eax
  6237 000044C2 8B14BD[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  6238 000044C9 0FBF842D[B8080500]                      movsx   eax, word [(mp3_synth_win+340h)+ebp*2]
  6239 000044D1 0FAFC2                                  imul    eax, edx
  6240 000044D4 01C3                                    add     ebx, eax
  6241 000044D6 8B14BD[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  6242 000044DD 0FBF842D[38090500]                      movsx   eax, word [(mp3_synth_win+3C0h)+ebp*2]
  6243 000044E5 0FAFC2                                  imul    eax, edx
  6244 000044E8 01C3                                    add     ebx, eax
  6245 000044EA 81FB00000040                            cmp     ebx, 40000000h
  6246 000044F0 7321                                    jnb     short .sat
  6247 000044F2 C1FB16                                  sar     ebx, 22
  6248                                  
  6249                                  .sat_back:
  6250 000044F5 8819                                    mov     [ecx], bl
  6251 000044F7 030D[640A0100]                          add     ecx, [mp3_samples_dst_step]
  6252 000044FD 83C602                                  add     esi, 2
  6253 00004500 83EF02                                  sub     edi, 2
  6254 00004503 83C502                                  add     ebp, 2
  6255 00004506 F7C51F000000                            test    ebp, 1Fh
  6256 0000450C 0F8593FEFFFF                            jnz     .samples_lop
  6257 00004512 C3                                      retn
  6258                                  
  6259                                  .sat:
  6260 00004513 C1FB1F                                  sar     ebx, 31
  6261 00004516 F7D3                                    not     ebx
  6262 00004518 EBDB                                    jmp     short .sat_back
  6263                                  
  6264                                  .append_copy_to_window:
  6265 0000451A 8D3485[C0B30000]                        lea     esi, [mp3_synth_buf+eax*4]
  6266 00004521 8DBE00080000                            lea     edi, [esi+2048]
  6267 00004527 B912000000                              mov     ecx, 18
  6268 0000452C F3A5                                    rep movsd
  6269 0000452E E951FEFFFF                              jmp     .append_copy_to_window_back
  6270                                  
  6271                                  
  6272                                  ; =============== S U B R O U T I N E =======================================
  6273                                  
  6274                                  
  6275                                  synth_8bit_shift_2_fast:
  6276 00004533 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 1,2,1
  6277 0000453A 740E                                    jz      short .no_rdtsc_supported
  6278 0000453C 0F31                                    rdtsc
  6279 0000453E 2905[948D0000]                          sub     [rdtsc_synth_dct], eax
  6280 00004544 1915[988D0000]                          sbb     [rdtsc_synth_dct+4], edx
  6281                                  
  6282                                  .no_rdtsc_supported:
  6283 0000454A BE[C8D30000]                            mov	esi, mp3_sb_samples
  6284 0000454F 8B3D[5C0A0100]                          mov	edi, [mp3_samples_dst]
  6285 00004555 C705[680A0100]0000-                     mov	dword [mp3_curr_channel], 0
  6285 0000455D 0000               
  6286                                  
  6287                                  .synth_channel_lop:
  6288 0000455F 56                                      push	esi
  6289 00004560 57                                      push	edi
  6290 00004561 893D[A8B30000]                          mov	[mp3_curr_syn_dst], edi
  6291 00004567 C705[700A0100]0000-                     mov	dword [mp3_curr_frame], 0
  6291 0000456F 0000               
  6292                                  
  6293                                  .synth_frame_lop:
  6294 00004571 56                                      push    esi
  6295 00004572 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6296 00004579 740E                                    jz      short .no_rdtsc_supported@
  6297 0000457B 0F31                                    rdtsc
  6298 0000457D 2905[AC8D0000]                          sub     [rdtsc_dct32], eax
  6299 00004583 1915[B08D0000]                          sbb     [rdtsc_dct32+4], edx
  6300                                  
  6301                                  .no_rdtsc_supported@:
  6302 00004589 8B15[680A0100]                          mov     edx, [mp3_curr_channel]
  6303 0000458F 8B0495[C0D30000]                        mov     eax, [mp3_synth_index+edx*4]
  6304 00004596 832C95[C0D30000]20                      sub     dword [mp3_synth_index+edx*4], 32
  6305 0000459E C1E20A                                  shl     edx, 10
  6306 000045A1 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  6307 000045A6 09D0                                    or      eax, edx
  6308 000045A8 A3[A4B30000]                            mov     [mp3_curr_syn_index], eax
  6309 000045AD 8B3D[A4B30000]                          mov     edi, [mp3_curr_syn_index]
  6310 000045B3 8D3CBD[C0B30000]                        lea     edi, [mp3_synth_buf+edi*4]
  6311 000045BA E83BEDFFFF                              call    mp3_dct32_shift_2 ; mp3_dct32_shift_&rate_shift
  6312 000045BF F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6313 000045C6 740E                                    jz      short .no_rdtsc_supported@@
  6314 000045C8 0F31                                    rdtsc
  6315 000045CA 0105[AC8D0000]                          add     [rdtsc_dct32], eax
  6316 000045D0 1115[B08D0000]                          adc     [rdtsc_dct32+4], edx
  6317                                  
  6318                                  .no_rdtsc_supported@@:
  6319 000045D6 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6320 000045DD 740E                                    jz      short .no_rdtsc_supported@@@
  6321 000045DF 0F31                                    rdtsc
  6322 000045E1 2905[C48D0000]                          sub     [rdtsc_synth], eax
  6323 000045E7 1915[C88D0000]                          sbb     [rdtsc_synth+4], edx
  6324                                  
  6325                                  .no_rdtsc_supported@@@:
  6326 000045ED E888000000                              call    mp3_synth_filter_this_8bit_shift_2_fast ;
  6327                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  6328 000045F2 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6329 000045F9 740E                                    jz      short .no_rdtsc_supported@@@@
  6330 000045FB 0F31                                    rdtsc
  6331 000045FD 0105[C48D0000]                          add     [rdtsc_synth], eax
  6332 00004603 1115[C88D0000]                          adc     [rdtsc_synth+4], edx
  6333                                  
  6334                                  .no_rdtsc_supported@@@@:
  6335 00004609 5E                                      pop     esi
  6336 0000460A A1[640A0100]                            mov     eax, [mp3_samples_dst_step]
  6337 0000460F C1E005                                  shl     eax, 5
  6338 00004612 8A0D[178C0000]                          mov     cl, [option_rate_shift]
  6339 00004618 D3E8                                    shr     eax, cl
  6340 0000461A 0105[A8B30000]                          add     [mp3_curr_syn_dst], eax
  6341 00004620 81C680000000                            add     esi, 128        ; SBLIMIT*4
  6342 00004626 FF05[700A0100]                          inc     dword [mp3_curr_frame]
  6343 0000462C A1[700A0100]                            mov     eax, [mp3_curr_frame]
  6344 00004631 3B05[ACB30000]                          cmp     eax, [mp3_nb_frames]
  6345 00004637 0F8234FFFFFF                            jb      .synth_frame_lop
  6346 0000463D 5F                                      pop     edi
  6347 0000463E 5E                                      pop     esi
  6348 0000463F 033D[A0B30000]                          add     edi, [mp3_bytes_per_sample]
  6349 00004645 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  6350 0000464B FF05[680A0100]                          inc     dword [mp3_curr_channel]
  6351 00004651 A1[680A0100]                            mov     eax, [mp3_curr_channel]
  6352 00004656 3B05[98B30000]                          cmp     eax, [mp3_output_num_channels]
  6353 0000465C 0F82FDFEFFFF                            jb      .synth_channel_lop
  6354 00004662 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6355 00004669 740E                                    jz      short .no_rdtsc_supported@@@@@
  6356 0000466B 0F31                                    rdtsc
  6357 0000466D 0105[948D0000]                          add     [rdtsc_synth_dct], eax
  6358 00004673 1115[988D0000]                          adc     [rdtsc_synth_dct+4], edx
  6359                                  
  6360                                  .no_rdtsc_supported@@@@@:
  6361 00004679 C3                                      retn
  6362                                  
  6363                                  
  6364                                  ; =============== S U B R O U T I N E =======================================
  6365                                  
  6366                                  
  6367                                  mp3_synth_filter_this_8bit_shift_2_fast:
  6368 0000467A A1[A4B30000]                            mov     eax, [mp3_curr_syn_index]
  6369 0000467F A9E0010000                              test    eax, 1E0h
  6370 00004684 0F8497010000                            jz      .append_copy_to_window
  6371 0000468A 90                                      nop
  6372                                  
  6373                                  .append_copy_to_window_back:
  6374 0000468B 89C5                                    mov     ebp, eax
  6375 0000468D 81E5C0010000                            and     ebp, 1C0h
  6376 00004693 2520040000                              and     eax, 420h
  6377 00004698 8D7010                                  lea     esi, [eax+10h]
  6378 0000469B 8D7830                                  lea     edi, [eax+30h]
  6379 0000469E F7DD                                    neg     ebp
  6380 000046A0 81E5C0010000                            and     ebp, 1C0h
  6381 000046A6 8B0D[A8B30000]                          mov     ecx, [mp3_curr_syn_dst]
  6382                                  
  6383                                  .samples_lop:
  6384 000046AC BB00002020                              mov     ebx, 20200000h
  6385 000046B1 8B14B5[C0B30000]                        mov     edx, [mp3_synth_buf+esi*4]
  6386 000046B8 0FBF842D[78050500]                      movsx   eax, word [mp3_synth_win+ebp*2]
  6387 000046C0 0FAFC2                                  imul    eax, edx
  6388 000046C3 01C3                                    add     ebx, eax
  6389 000046C5 8B14B5[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  6390 000046CC 0FBF842D[F8050500]                      movsx   eax, word [(mp3_synth_win+80h)+ebp*2]
  6391 000046D4 0FAFC2                                  imul    eax, edx
  6392 000046D7 01C3                                    add     ebx, eax
  6393 000046D9 8B14B5[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  6394 000046E0 0FBF842D[78060500]                      movsx   eax, word [(mp3_synth_win+100h)+ebp*2]
  6395 000046E8 0FAFC2                                  imul    eax, edx
  6396 000046EB 01C3                                    add     ebx, eax
  6397 000046ED 8B14B5[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  6398 000046F4 0FBF842D[F8060500]                      movsx   eax, word [(mp3_synth_win+180h)+ebp*2]
  6399 000046FC 0FAFC2                                  imul    eax, edx
  6400 000046FF 01C3                                    add     ebx, eax
  6401 00004701 8B14B5[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  6402 00004708 0FBF842D[78070500]                      movsx   eax, word [(mp3_synth_win+200h)+ebp*2]
  6403 00004710 0FAFC2                                  imul    eax, edx
  6404 00004713 01C3                                    add     ebx, eax
  6405 00004715 8B14B5[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  6406 0000471C 0FBF842D[F8070500]                      movsx   eax, word [(mp3_synth_win+280h)+ebp*2]
  6407 00004724 0FAFC2                                  imul    eax, edx
  6408 00004727 01C3                                    add     ebx, eax
  6409 00004729 8B14B5[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  6410 00004730 0FBF842D[78080500]                      movsx   eax, word [(mp3_synth_win+300h)+ebp*2]
  6411 00004738 0FAFC2                                  imul    eax, edx
  6412 0000473B 01C3                                    add     ebx, eax
  6413 0000473D 8B14B5[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  6414 00004744 0FBF842D[F8080500]                      movsx   eax, word [(mp3_synth_win+380h)+ebp*2]
  6415 0000474C 0FAFC2                                  imul    eax, edx
  6416 0000474F 01C3                                    add     ebx, eax
  6417 00004751 8B14BD[C0B30000]                        mov     edx, [mp3_synth_buf+edi*4]
  6418 00004758 0FBF842D[B8050500]                      movsx   eax, word [(mp3_synth_win+40h)+ebp*2]
  6419 00004760 0FAFC2                                  imul    eax, edx
  6420 00004763 01C3                                    add     ebx, eax
  6421 00004765 8B14BD[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  6422 0000476C 0FBF842D[38060500]                      movsx   eax, word [(mp3_synth_win+0C0h)+ebp*2]
  6423 00004774 0FAFC2                                  imul    eax, edx
  6424 00004777 01C3                                    add     ebx, eax
  6425 00004779 8B14BD[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  6426 00004780 0FBF842D[B8060500]                      movsx   eax, word [(mp3_synth_win+140h)+ebp*2]
  6427 00004788 0FAFC2                                  imul    eax, edx
  6428 0000478B 01C3                                    add     ebx, eax
  6429 0000478D 8B14BD[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  6430 00004794 0FBF842D[38070500]                      movsx   eax, word [(mp3_synth_win+1C0h)+ebp*2]
  6431 0000479C 0FAFC2                                  imul    eax, edx
  6432 0000479F 01C3                                    add     ebx, eax
  6433 000047A1 8B14BD[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  6434 000047A8 0FBF842D[B8070500]                      movsx   eax, word [(mp3_synth_win+240h)+ebp*2]
  6435 000047B0 0FAFC2                                  imul    eax, edx
  6436 000047B3 01C3                                    add     ebx, eax
  6437 000047B5 8B14BD[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  6438 000047BC 0FBF842D[38080500]                      movsx   eax, word [(mp3_synth_win+2C0h)+ebp*2]
  6439 000047C4 0FAFC2                                  imul    eax, edx
  6440 000047C7 01C3                                    add     ebx, eax
  6441 000047C9 8B14BD[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  6442 000047D0 0FBF842D[B8080500]                      movsx   eax, word [(mp3_synth_win+340h)+ebp*2]
  6443 000047D8 0FAFC2                                  imul    eax, edx
  6444 000047DB 01C3                                    add     ebx, eax
  6445 000047DD 8B14BD[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  6446 000047E4 0FBF842D[38090500]                      movsx   eax, word [(mp3_synth_win+3C0h)+ebp*2]
  6447 000047EC 0FAFC2                                  imul    eax, edx
  6448 000047EF 01C3                                    add     ebx, eax
  6449 000047F1 81FB00000040                            cmp     ebx, 40000000h
  6450 000047F7 7321                                    jnb     short .sat
  6451 000047F9 C1FB16                                  sar     ebx, 22
  6452                                  
  6453                                  .sat_back:
  6454 000047FC 8819                                    mov     [ecx], bl
  6455 000047FE 030D[640A0100]                          add     ecx, [mp3_samples_dst_step]
  6456 00004804 83C604                                  add     esi, 4
  6457 00004807 83EF04                                  sub     edi, 4
  6458 0000480A 83C504                                  add     ebp, 4
  6459 0000480D F7C51F000000                            test    ebp, 1Fh
  6460 00004813 0F8593FEFFFF                            jnz     .samples_lop
  6461 00004819 C3                                      retn
  6462                                  
  6463                                  .sat:
  6464 0000481A C1FB1F                                  sar     ebx, 31
  6465 0000481D F7D3                                    not     ebx
  6466 0000481F EBDB                                    jmp     short .sat_back
  6467                                  
  6468                                  .append_copy_to_window:
  6469 00004821 8D3485[C0B30000]                        lea     esi, [mp3_synth_buf+eax*4]
  6470 00004828 8DBE00080000                            lea     edi, [esi+2048]
  6471 0000482E B912000000                              mov     ecx, 18
  6472 00004833 F3A5                                    rep movsd
  6473 00004835 E951FEFFFF                              jmp     .append_copy_to_window_back
  6474                                  
  6475                                  
  6476                                  ; =============== S U B R O U T I N E =======================================
  6477                                  
  6478                                  
  6479                                  synth_16bit_shift_0_slow:
  6480 0000483A F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6481 00004841 740E                                    jz      short .no_rdtsc_supported
  6482 00004843 0F31                                    rdtsc
  6483 00004845 2905[948D0000]                          sub     [rdtsc_synth_dct], eax
  6484 0000484B 1915[988D0000]                          sbb     [rdtsc_synth_dct+4], edx
  6485                                  
  6486                                  .no_rdtsc_supported:
  6487 00004851 BE[C8D30000]                            mov	esi, mp3_sb_samples
  6488 00004856 8B3D[5C0A0100]                          mov	edi, [mp3_samples_dst]
  6489 0000485C C705[680A0100]0000-                     mov	dword [mp3_curr_channel], 0
  6489 00004864 0000               
  6490                                  
  6491                                  .synth_channel_lop:
  6492 00004866 56                                      push	esi
  6493 00004867 57                                      push	edi
  6494 00004868 893D[A8B30000]                          mov	[mp3_curr_syn_dst], edi
  6495 0000486E C705[700A0100]0000-                     mov	dword [mp3_curr_frame], 0
  6495 00004876 0000               
  6496                                  
  6497                                  .synth_frame_lop:
  6498 00004878 56                                      push    esi
  6499 00004879 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6500 00004880 740E                                    jz      short .no_rdtsc_supported@
  6501 00004882 0F31                                    rdtsc
  6502 00004884 2905[AC8D0000]                          sub     [rdtsc_dct32], eax
  6503 0000488A 1915[B08D0000]                          sbb     [rdtsc_dct32+4], edx
  6504                                  
  6505                                  .no_rdtsc_supported@:
  6506 00004890 8B15[680A0100]                          mov     edx, [mp3_curr_channel]
  6507 00004896 8B0495[C0D30000]                        mov     eax, [mp3_synth_index+edx*4]
  6508 0000489D 832C95[C0D30000]20                      sub     dword [mp3_synth_index+edx*4], 32
  6509 000048A5 C1E20A                                  shl     edx, 10         ; channel*1024
  6510 000048A8 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  6511 000048AD 09D0                                    or      eax, edx
  6512 000048AF A3[A4B30000]                            mov     [mp3_curr_syn_index], eax
  6513 000048B4 8B3D[A4B30000]                          mov     edi, [mp3_curr_syn_index]
  6514 000048BA 8D3CBD[C0B30000]                        lea     edi, [mp3_synth_buf+edi*4]
  6515 000048C1 E864DDFFFF                              call    mp3_dct32_shift_0 ; mp3_dct32_shift_&rate_shift
  6516 000048C6 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_dct32
  6517 000048CD 740E                                    jz      short .no_rdtsc_supported@@
  6518 000048CF 0F31                                    rdtsc
  6519 000048D1 0105[AC8D0000]                          add     [rdtsc_dct32], eax
  6520 000048D7 1115[B08D0000]                          adc     [rdtsc_dct32+4], edx
  6521                                  
  6522                                  .no_rdtsc_supported@@:
  6523 000048DD F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_synth
  6524 000048E4 740E                                    jz      short .no_rdtsc_supported@@@
  6525 000048E6 0F31                                    rdtsc
  6526 000048E8 2905[C48D0000]                          sub     [rdtsc_synth], eax
  6527 000048EE 1915[C88D0000]                          sbb     [rdtsc_synth+4], edx
  6528                                  
  6529                                  .no_rdtsc_supported@@@:
  6530 000048F4 E888000000                              call    mp3_synth_filter_this_16bit_shift_0_slow
  6531 000048F9 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_synth
  6532 00004900 740E                                    jz      short .no_rdtsc_supported@@@@
  6533 00004902 0F31                                    rdtsc
  6534 00004904 0105[C48D0000]                          add     [rdtsc_synth], eax
  6535 0000490A 1115[C88D0000]                          adc     [rdtsc_synth+4], edx
  6536                                  
  6537                                  .no_rdtsc_supported@@@@:
  6538 00004910 5E                                      pop     esi
  6539 00004911 A1[640A0100]                            mov     eax, [mp3_samples_dst_step]
  6540 00004916 C1E005                                  shl     eax, 5
  6541 00004919 8A0D[178C0000]                          mov     cl, [option_rate_shift]
  6542 0000491F D3E8                                    shr     eax, cl
  6543 00004921 0105[A8B30000]                          add     [mp3_curr_syn_dst], eax
  6544 00004927 81C680000000                            add     esi, 128        ; SBLIMIT*4
  6545 0000492D FF05[700A0100]                          inc     dword [mp3_curr_frame]
  6546 00004933 A1[700A0100]                            mov     eax, [mp3_curr_frame]
  6547 00004938 3B05[ACB30000]                          cmp     eax, [mp3_nb_frames]
  6548 0000493E 0F8234FFFFFF                            jb      .synth_frame_lop
  6549 00004944 5F                                      pop     edi
  6550 00004945 5E                                      pop     esi
  6551 00004946 033D[A0B30000]                          add     edi, [mp3_bytes_per_sample]
  6552 0000494C 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  6553 00004952 FF05[680A0100]                          inc     dword [mp3_curr_channel]
  6554 00004958 A1[680A0100]                            mov     eax, [mp3_curr_channel]
  6555 0000495D 3B05[98B30000]                          cmp     eax, [mp3_output_num_channels]
  6556 00004963 0F82FDFEFFFF                            jb      .synth_channel_lop
  6557 00004969 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_synth_dct
  6558 00004970 740E                                    jz      short .no_rdtsc_supported@@@@@
  6559 00004972 0F31                                    rdtsc
  6560 00004974 0105[948D0000]                          add     [rdtsc_synth_dct], eax
  6561 0000497A 1115[988D0000]                          adc     [rdtsc_synth_dct+4], edx
  6562                                  
  6563                                  .no_rdtsc_supported@@@@@:
  6564 00004980 C3                                      retn
  6565                                  
  6566                                  
  6567                                  ; =============== S U B R O U T I N E =======================================
  6568                                  
  6569                                  
  6570                                  mp3_synth_filter_this_16bit_shift_0_slow:
  6571 00004981 A1[A4B30000]                            mov     eax, [mp3_curr_syn_index]
  6572 00004986 A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh
  6573 0000498B 0F847C010000                            jz      .append_copy_to_window
  6574 00004991 90                                      nop
  6575                                  
  6576                                  .append_copy_to_window_back:
  6577 00004992 89C5                                    mov     ebp, eax        ; mov @@win1,eax
  6578 00004994 81E5C0010000                            and     ebp, 1C0h       ; and @@win1,1FFh-1Fh-20h
  6579 0000499A 2520040000                              and     eax, 420h       ; and eax,20h+(1 shl 10) ; bit5, and channel
  6580 0000499F 8D7010                                  lea     esi, [eax+10h]  ; lea @@syn1,[eax+10h]
  6581 000049A2 8D7830                                  lea     edi, [eax+30h]  ; lea @@syn2,[eax+30h]
  6582 000049A5 F7DD                                    neg     ebp
  6583 000049A7 81E5C0010000                            and     ebp, 1C0h       ; and @@win1,1FFh-1Fh-20h
  6584 000049AD 8B0D[A8B30000]                          mov     ecx, [mp3_curr_syn_dst]
  6585                                  
  6586                                  .samples_lop:
  6587 000049B3 BB10001000                              mov     ebx, 100010h    ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  6588                                                                          ; @@out_shift = 5
  6589                                  
  6590                                  .SUM8_@:                                ; @@SUM8 macro sum,win,ww,syn
  6591 000049B8 8B14B5[C0B30000]                        mov     edx, [mp3_synth_buf+esi*4] ; IRP nn,0,1,2,3,4,5,6,7
  6592                                                                          ; @@SUM8 @@sum,@@win1,0, @@syn1
  6593 000049BF 8B04AD[78050500]                        mov     eax, [mp3_synth_win+ebp*4] ; [mp3_synth_buf+syn*4+(nn*64*4)]
  6594 000049C6 F7EA                                    imul    edx             ; [mp3_synth_win+win*4+(nn*64*4)+ww*4]
  6595 000049C8 01D3                                    add     ebx, edx
  6596 000049CA 8B14B5[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  6597 000049D1 8B04AD[78060500]                        mov     eax, [(mp3_synth_win+100h)+ebp*4]
  6598 000049D8 F7EA                                    imul    edx
  6599 000049DA 01D3                                    add     ebx, edx        ; add sum,edx
  6600 000049DC 8B14B5[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  6601 000049E3 8B04AD[78070500]                        mov     eax, [(mp3_synth_win+200h)+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4]
  6602 000049EA F7EA                                    imul    edx             ; 64bit = 32bit * 32bit
  6603 000049EC 01D3                                    add     ebx, edx
  6604 000049EE 8B14B5[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  6605 000049F5 8B04AD[78080500]                        mov     eax, [(mp3_synth_win+300h)+ebp*4]
  6606 000049FC F7EA                                    imul    edx
  6607 000049FE 01D3                                    add     ebx, edx
  6608 00004A00 8B14B5[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  6609 00004A07 8B04AD[78090500]                        mov     eax, [(mp3_synth_win+400h)+ebp*4]
  6610 00004A0E F7EA                                    imul    edx
  6611 00004A10 01D3                                    add     ebx, edx
  6612 00004A12 8B14B5[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  6613 00004A19 8B04AD[780A0500]                        mov     eax, [(mp3_synth_win+500h)+ebp*4]
  6614 00004A20 F7EA                                    imul    edx
  6615 00004A22 01D3                                    add     ebx, edx
  6616 00004A24 8B14B5[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  6617 00004A2B 8B04AD[780B0500]                        mov     eax, [(mp3_synth_win+600h)+ebp*4]
  6618 00004A32 F7EA                                    imul    edx
  6619 00004A34 01D3                                    add     ebx, edx
  6620 00004A36 8B14B5[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  6621 00004A3D 8B04AD[780C0500]                        mov     eax, [(mp3_synth_win+700h)+ebp*4]
  6622 00004A44 F7EA                                    imul    edx
  6623 00004A46 01D3                                    add     ebx, edx
  6624                                  
  6625                                  .skippp:                               ; @@SUM8 macro sum,win,ww,syn
  6626 00004A48 8B14BD[C0B30000]                        mov     edx, [mp3_synth_buf+edi*4] ; @@SUM8 @@sum,@@win1,32,@@syn2
  6627                                                                          ; [mp3_synth_buf+syn*4+(nn*64*4)]
  6628 00004A4F 8B04AD[F8050500]                        mov     eax, [(mp3_synth_win+80h)+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4]
  6629 00004A56 F7EA                                    imul    edx
  6630 00004A58 01D3                                    add     ebx, edx
  6631 00004A5A 8B14BD[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  6632 00004A61 8B04AD[F8060500]                        mov     eax, [(mp3_synth_win+180h)+ebp*4]
  6633 00004A68 F7EA                                    imul    edx
  6634 00004A6A 01D3                                    add     ebx, edx
  6635 00004A6C 8B14BD[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  6636 00004A73 8B04AD[F8070500]                        mov     eax, [(mp3_synth_win+280h)+ebp*4]
  6637 00004A7A F7EA                                    imul    edx
  6638 00004A7C 01D3                                    add     ebx, edx
  6639 00004A7E 8B14BD[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  6640 00004A85 8B04AD[F8080500]                        mov     eax, [(mp3_synth_win+380h)+ebp*4]
  6641 00004A8C F7EA                                    imul    edx
  6642 00004A8E 01D3                                    add     ebx, edx
  6643 00004A90 8B14BD[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  6644 00004A97 8B04AD[F8090500]                        mov     eax, [(mp3_synth_win+480h)+ebp*4]
  6645 00004A9E F7EA                                    imul    edx
  6646 00004AA0 01D3                                    add     ebx, edx
  6647 00004AA2 8B14BD[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  6648 00004AA9 8B04AD[F80A0500]                        mov     eax, [(mp3_synth_win+580h)+ebp*4]
  6649 00004AB0 F7EA                                    imul    edx
  6650 00004AB2 01D3                                    add     ebx, edx
  6651 00004AB4 8B14BD[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  6652 00004ABB 8B04AD[F80B0500]                        mov     eax, [(mp3_synth_win+680h)+ebp*4]
  6653 00004AC2 F7EA                                    imul    edx
  6654 00004AC4 01D3                                    add     ebx, edx
  6655 00004AC6 8B14BD[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  6656 00004ACD 8B04AD[F80C0500]                        mov     eax, [(mp3_synth_win+780h)+ebp*4]
  6657 00004AD4 F7EA                                    imul    edx
  6658 00004AD6 01D3                                    add     ebx, edx
  6659 00004AD8 81FB00002000                            cmp     ebx, 200000h    ; cmp @@sum,10000h SHL (@@out_shift)
  6660 00004ADE 7322                                    jnb     short .sat
  6661 00004AE0 C1FB05                                  sar     ebx, 5          ; sar @@sum,(@@out_shift)
  6662 00004AE3 81EB00800000                            sub     ebx, 8000h      ; make 16bit signed
  6663                                  
  6664                                  .sat_back:
  6665 00004AE9 668919                                  mov     [ecx], bx
  6666 00004AEC 030D[640A0100]                          add     ecx, [mp3_samples_dst_step]
  6667 00004AF2 46                                      inc     esi             ; inc @@syn1
  6668 00004AF3 4F                                      dec     edi             ; dec @@syn2
  6669 00004AF4 45                                      inc     ebp             ; inc @@win1
  6670 00004AF5 F7C51F000000                            test    ebp, 1Fh        ; test @@win1,1Fh
  6671 00004AFB 0F85B2FEFFFF                            jnz     .samples_lop
  6672 00004B01 C3                                      retn
  6673                                  
  6674                                  .sat:
  6675 00004B02 C1FB1F                                  sar     ebx, 31         ; FFFFFFFFh,00000000h
  6676 00004B05 81F3FF7F0000                            xor     ebx, 7FFFh      ; FFFF8000h,00007FFFh (signed 16bit)
  6677 00004B0B EBDC                                    jmp     short .sat_back
  6678                                  
  6679                                  .append_copy_to_window:
  6680 00004B0D 8D3485[C0B30000]                        lea     esi, [mp3_synth_buf+eax*4]
  6681 00004B14 8DBE00080000                            lea     edi, [esi+2048] ; [esi+512*4]
  6682 00004B1A B912000000                              mov     ecx, 18         ; (12h*4)/4
  6683 00004B1F F3A5                                    rep movsd
  6684 00004B21 E96CFEFFFF                              jmp     .append_copy_to_window_back
  6685                                  
  6686                                  
  6687                                  ; =============== S U B R O U T I N E =======================================
  6688                                  
  6689                                  
  6690                                  synth_16bit_shift_1_slow:
  6691 00004B26 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 0,1,0
  6692 00004B2D 740E                                    jz      short .no_rdtsc_supported
  6693 00004B2F 0F31                                    rdtsc
  6694 00004B31 2905[948D0000]                          sub     [rdtsc_synth_dct], eax
  6695 00004B37 1915[988D0000]                          sbb     [rdtsc_synth_dct+4], edx
  6696                                  
  6697                                  .no_rdtsc_supported:
  6698 00004B3D BE[C8D30000]                            mov	esi, mp3_sb_samples
  6699 00004B42 8B3D[5C0A0100]                          mov	edi, [mp3_samples_dst]
  6700 00004B48 C705[680A0100]0000-                     mov	dword [mp3_curr_channel], 0
  6700 00004B50 0000               
  6701                                  
  6702                                  .synth_channel_lop:
  6703 00004B52 56                                      push	esi
  6704 00004B53 57                                      push	edi
  6705 00004B54 893D[A8B30000]                          mov	[mp3_curr_syn_dst], edi
  6706 00004B5A C705[700A0100]0000-                     mov	dword [mp3_curr_frame], 0
  6706 00004B62 0000               
  6707                                  
  6708                                  .synth_frame_lop:
  6709 00004B64 56                                      push    esi
  6710 00004B65 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6711 00004B6C 740E                                    jz      short .no_rdtsc_supported@
  6712 00004B6E 0F31                                    rdtsc
  6713 00004B70 2905[AC8D0000]                          sub     [rdtsc_dct32], eax
  6714 00004B76 1915[B08D0000]                          sbb     [rdtsc_dct32+4], edx
  6715                                  
  6716                                  .no_rdtsc_supported@:
  6717 00004B7C 8B15[680A0100]                          mov     edx, [mp3_curr_channel]
  6718 00004B82 8B0495[C0D30000]                        mov     eax, [mp3_synth_index+edx*4]
  6719 00004B89 832C95[C0D30000]20                      sub     dword [mp3_synth_index+edx*4], 32
  6720 00004B91 C1E20A                                  shl     edx, 10         ; channel*1024
  6721 00004B94 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh ; index(0..511), align 32
  6722 00004B99 09D0                                    or      eax, edx
  6723 00004B9B A3[A4B30000]                            mov     [mp3_curr_syn_index], eax
  6724 00004BA0 8B3D[A4B30000]                          mov     edi, [mp3_curr_syn_index]
  6725 00004BA6 8D3CBD[C0B30000]                        lea     edi, [mp3_synth_buf+edi*4]
  6726 00004BAD E858E3FFFF                              call    mp3_dct32_shift_1 ; call mp3_dct32_shift_&rate_shift
  6727 00004BB2 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6728 00004BB9 740E                                    jz      short .no_rdtsc_supported@@
  6729 00004BBB 0F31                                    rdtsc
  6730 00004BBD 0105[AC8D0000]                          add     [rdtsc_dct32], eax
  6731 00004BC3 1115[B08D0000]                          adc     [rdtsc_dct32+4], edx
  6732                                  
  6733                                  .no_rdtsc_supported@@:
  6734 00004BC9 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6735 00004BD0 740E                                    jz      short .no_rdtsc_supported@@@
  6736 00004BD2 0F31                                    rdtsc
  6737 00004BD4 2905[C48D0000]                          sub     [rdtsc_synth], eax
  6738 00004BDA 1915[C88D0000]                          sbb     [rdtsc_synth+4], edx
  6739                                  
  6740                                  .no_rdtsc_supported@@@:
  6741 00004BE0 E888000000                              call    mp3_synth_filter_this_16bit_shift_1_slow ;
  6742                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  6743 00004BE5 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6744 00004BEC 740E                                    jz      short .no_rdtsc_supported@@@@
  6745 00004BEE 0F31                                    rdtsc
  6746 00004BF0 0105[C48D0000]                          add     [rdtsc_synth], eax
  6747 00004BF6 1115[C88D0000]                          adc     [rdtsc_synth+4], edx
  6748                                  
  6749                                  .no_rdtsc_supported@@@@:
  6750 00004BFC 5E                                      pop     esi
  6751 00004BFD A1[640A0100]                            mov     eax, [mp3_samples_dst_step]
  6752 00004C02 C1E005                                  shl     eax, 5
  6753 00004C05 8A0D[178C0000]                          mov     cl, [option_rate_shift] ; IF with_rate_shift
  6754 00004C0B D3E8                                    shr     eax, cl
  6755 00004C0D 0105[A8B30000]                          add     [mp3_curr_syn_dst], eax
  6756 00004C13 81C680000000                            add     esi, 128        ; SBLIMIT*4  ; src+32*4
  6757 00004C19 FF05[700A0100]                          inc	dword [mp3_curr_frame]
  6758 00004C1F A1[700A0100]                            mov     eax, [mp3_curr_frame]
  6759 00004C24 3B05[ACB30000]                          cmp     eax, [mp3_nb_frames]
  6760 00004C2A 0F8234FFFFFF                            jb      .synth_frame_lop
  6761 00004C30 5F                                      pop     edi
  6762 00004C31 5E                                      pop     esi
  6763 00004C32 033D[A0B30000]                          add     edi, [mp3_bytes_per_sample]
  6764 00004C38 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4 ; src
  6765 00004C3E FF05[680A0100]                          inc	dword [mp3_curr_channel]
  6766 00004C44 A1[680A0100]                            mov     eax, [mp3_curr_channel]
  6767 00004C49 3B05[98B30000]                          cmp     eax, [mp3_output_num_channels]
  6768 00004C4F 0F82FDFEFFFF                            jb      .synth_channel_lop
  6769 00004C55 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6770 00004C5C 740E                                    jz      short .no_rdtsc_supported@@@@@
  6771 00004C5E 0F31                                    rdtsc
  6772 00004C60 0105[948D0000]                          add     [rdtsc_synth_dct], eax
  6773 00004C66 1115[988D0000]                          adc     [rdtsc_synth_dct+4], edx
  6774                                  
  6775                                  .no_rdtsc_supported@@@@@:
  6776 00004C6C C3                                      retn
  6777                                  
  6778                                  
  6779                                  ; =============== S U B R O U T I N E =======================================
  6780                                  
  6781                                  
  6782                                  mp3_synth_filter_this_16bit_shift_1_slow:
  6783 00004C6D A1[A4B30000]                            mov     eax, [mp3_curr_syn_index]
  6784 00004C72 A9E0010000                              test    eax, 1E0h
  6785 00004C77 0F8482010000                            jz      .append_copy_to_window
  6786 00004C7D 90                                      nop
  6787                                  
  6788                                  .append_copy_to_window_back:
  6789 00004C7E 89C5                                    mov     ebp, eax
  6790 00004C80 81E5C0010000                            and     ebp, 1C0h
  6791 00004C86 2520040000                              and     eax, 420h
  6792 00004C8B 8D7010                                  lea     esi, [eax+10h]
  6793 00004C8E 8D7830                                  lea     edi, [eax+30h]
  6794 00004C91 F7DD                                    neg     ebp
  6795 00004C93 81E5C0010000                            and     ebp, 1C0h
  6796 00004C99 8B0D[A8B30000]                          mov     ecx, [mp3_curr_syn_dst]
  6797                                  
  6798                                  .samples_lop:
  6799 00004C9F BB10001000                              mov     ebx, 100010h
  6800 00004CA4 8B14B5[C0B30000]                        mov     edx, [mp3_synth_buf+esi*4]
  6801 00004CAB 8B04AD[78050500]                        mov     eax, [mp3_synth_win+ebp*4]
  6802 00004CB2 F7EA                                    imul    edx
  6803 00004CB4 01D3                                    add     ebx, edx
  6804 00004CB6 8B14B5[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  6805 00004CBD 8B04AD[78060500]                        mov     eax, [(mp3_synth_win+100h)+ebp*4]
  6806 00004CC4 F7EA                                    imul    edx
  6807 00004CC6 01D3                                    add     ebx, edx
  6808 00004CC8 8B14B5[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  6809 00004CCF 8B04AD[78070500]                        mov     eax, [(mp3_synth_win+200h)+ebp*4]
  6810 00004CD6 F7EA                                    imul    edx
  6811 00004CD8 01D3                                    add     ebx, edx
  6812 00004CDA 8B14B5[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  6813 00004CE1 8B04AD[78080500]                        mov     eax, [(mp3_synth_win+300h)+ebp*4]
  6814 00004CE8 F7EA                                    imul    edx
  6815 00004CEA 01D3                                    add     ebx, edx
  6816 00004CEC 8B14B5[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  6817 00004CF3 8B04AD[78090500]                        mov     eax, [(mp3_synth_win+400h)+ebp*4]
  6818 00004CFA F7EA                                    imul    edx
  6819 00004CFC 01D3                                    add     ebx, edx
  6820 00004CFE 8B14B5[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  6821 00004D05 8B04AD[780A0500]                        mov     eax, [(mp3_synth_win+500h)+ebp*4]
  6822 00004D0C F7EA                                    imul    edx
  6823 00004D0E 01D3                                    add     ebx, edx
  6824 00004D10 8B14B5[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  6825 00004D17 8B04AD[780B0500]                        mov     eax, [(mp3_synth_win+600h)+ebp*4]
  6826 00004D1E F7EA                                    imul    edx
  6827 00004D20 01D3                                    add     ebx, edx
  6828 00004D22 8B14B5[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  6829 00004D29 8B04AD[780C0500]                        mov     eax, [(mp3_synth_win+700h)+ebp*4]
  6830 00004D30 F7EA                                    imul    edx
  6831 00004D32 01D3                                    add     ebx, edx
  6832 00004D34 8B14BD[C0B30000]                        mov     edx, [mp3_synth_buf+edi*4]
  6833 00004D3B 8B04AD[F8050500]                        mov     eax, [(mp3_synth_win+80h)+ebp*4]
  6834 00004D42 F7EA                                    imul    edx
  6835 00004D44 01D3                                    add     ebx, edx
  6836 00004D46 8B14BD[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  6837 00004D4D 8B04AD[F8060500]                        mov     eax, [(mp3_synth_win+180h)+ebp*4]
  6838 00004D54 F7EA                                    imul    edx
  6839 00004D56 01D3                                    add     ebx, edx
  6840 00004D58 8B14BD[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  6841 00004D5F 8B04AD[F8070500]                        mov     eax, [(mp3_synth_win+280h)+ebp*4]
  6842 00004D66 F7EA                                    imul    edx
  6843 00004D68 01D3                                    add     ebx, edx
  6844 00004D6A 8B14BD[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  6845 00004D71 8B04AD[F8080500]                        mov     eax, [(mp3_synth_win+380h)+ebp*4]
  6846 00004D78 F7EA                                    imul    edx
  6847 00004D7A 01D3                                    add     ebx, edx
  6848 00004D7C 8B14BD[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  6849 00004D83 8B04AD[F8090500]                        mov     eax, [(mp3_synth_win+480h)+ebp*4]
  6850 00004D8A F7EA                                    imul    edx
  6851 00004D8C 01D3                                    add     ebx, edx
  6852 00004D8E 8B14BD[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  6853 00004D95 8B04AD[F80A0500]                        mov     eax, [(mp3_synth_win+580h)+ebp*4]
  6854 00004D9C F7EA                                    imul    edx
  6855 00004D9E 01D3                                    add     ebx, edx
  6856 00004DA0 8B14BD[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  6857 00004DA7 8B04AD[F80B0500]                        mov     eax, [(mp3_synth_win+680h)+ebp*4]
  6858 00004DAE F7EA                                    imul    edx
  6859 00004DB0 01D3                                    add     ebx, edx
  6860 00004DB2 8B14BD[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  6861 00004DB9 8B04AD[F80C0500]                        mov     eax, [(mp3_synth_win+780h)+ebp*4]
  6862 00004DC0 F7EA                                    imul    edx
  6863 00004DC2 01D3                                    add     ebx, edx
  6864 00004DC4 81FB00002000                            cmp     ebx, 200000h
  6865 00004DCA 7328                                    jnb     short .sat
  6866 00004DCC C1FB05                                  sar     ebx, 5
  6867 00004DCF 81EB00800000                            sub     ebx, 8000h
  6868                                  
  6869                                  .sat_back:
  6870 00004DD5 668919                                  mov     [ecx], bx
  6871 00004DD8 030D[640A0100]                          add     ecx, [mp3_samples_dst_step]
  6872 00004DDE 83C602                                  add     esi, 2
  6873 00004DE1 83EF02                                  sub     edi, 2
  6874 00004DE4 83C502                                  add     ebp, 2
  6875 00004DE7 F7C51F000000                            test    ebp, 1Fh
  6876 00004DED 0F85ACFEFFFF                            jnz     .samples_lop
  6877 00004DF3 C3                                      retn
  6878                                  
  6879                                  .sat:
  6880 00004DF4 C1FB1F                                  sar     ebx, 31
  6881 00004DF7 81F3FF7F0000                            xor     ebx, 7FFFh
  6882 00004DFD EBD6                                    jmp     short .sat_back
  6883                                  
  6884                                  .append_copy_to_window:
  6885 00004DFF 8D3485[C0B30000]                        lea     esi, [mp3_synth_buf+eax*4]
  6886 00004E06 8DBE00080000                            lea     edi, [esi+2048]
  6887 00004E0C B912000000                              mov     ecx, 18
  6888 00004E11 F3A5                                    rep movsd
  6889 00004E13 E966FEFFFF                              jmp     .append_copy_to_window_back
  6890                                  
  6891                                  
  6892                                  ; =============== S U B R O U T I N E =======================================
  6893                                  
  6894                                  
  6895                                  synth_16bit_shift_2_slow:
  6896 00004E18 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 0,2,0
  6897 00004E1F 740E                                    jz      short .no_rdtsc_supported
  6898 00004E21 0F31                                    rdtsc
  6899 00004E23 2905[948D0000]                          sub     [rdtsc_synth_dct], eax
  6900 00004E29 1915[988D0000]                          sbb     [rdtsc_synth_dct+4], edx
  6901                                  
  6902                                  .no_rdtsc_supported:
  6903 00004E2F BE[C8D30000]                            mov	esi, mp3_sb_samples
  6904 00004E34 8B3D[5C0A0100]                          mov	edi, [mp3_samples_dst]
  6905 00004E3A C705[680A0100]0000-                     mov	dword [mp3_curr_channel], 0
  6905 00004E42 0000               
  6906                                  
  6907                                  .synth_channel_lop:
  6908 00004E44 56                                      push	esi
  6909 00004E45 57                                      push	edi
  6910 00004E46 893D[A8B30000]                          mov	[mp3_curr_syn_dst], edi
  6911 00004E4C C705[700A0100]0000-                     mov	dword [mp3_curr_frame], 0
  6911 00004E54 0000               
  6912                                  
  6913                                  .synth_frame_lop:
  6914 00004E56 56                                      push    esi
  6915 00004E57 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6916 00004E5E 740E                                    jz      short .no_rdtsc_supported@
  6917 00004E60 0F31                                    rdtsc
  6918 00004E62 2905[AC8D0000]                          sub     [rdtsc_dct32], eax
  6919 00004E68 1915[B08D0000]                          sbb     [rdtsc_dct32+4], edx
  6920                                  
  6921                                  .no_rdtsc_supported@:
  6922 00004E6E 8B15[680A0100]                          mov     edx, [mp3_curr_channel]
  6923 00004E74 8B0495[C0D30000]                        mov     eax, [mp3_synth_index+edx*4]
  6924 00004E7B 832C95[C0D30000]20                      sub     dword [mp3_synth_index+edx*4], 32
  6925 00004E83 C1E20A                                  shl     edx, 10
  6926 00004E86 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  6927 00004E8B 09D0                                    or      eax, edx
  6928 00004E8D A3[A4B30000]                            mov     [mp3_curr_syn_index], eax
  6929 00004E92 8B3D[A4B30000]                          mov     edi, [mp3_curr_syn_index]
  6930 00004E98 8D3CBD[C0B30000]                        lea     edi, [mp3_synth_buf+edi*4]
  6931 00004E9F E856E4FFFF                              call    mp3_dct32_shift_2 ; call mp3_dct32_shift_&rate_shift
  6932 00004EA4 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6933 00004EAB 740E                                    jz      short .no_rdtsc_supported@@
  6934 00004EAD 0F31                                    rdtsc
  6935 00004EAF 0105[AC8D0000]                          add     [rdtsc_dct32], eax
  6936 00004EB5 1115[B08D0000]                          adc     [rdtsc_dct32+4], edx
  6937                                  
  6938                                  .no_rdtsc_supported@@:
  6939 00004EBB F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6940 00004EC2 740E                                    jz      short .no_rdtsc_supported@@@
  6941 00004EC4 0F31                                    rdtsc
  6942 00004EC6 2905[C48D0000]                          sub     [rdtsc_synth], eax
  6943 00004ECC 1915[C88D0000]                          sbb     [rdtsc_synth+4], edx
  6944                                  
  6945                                  .no_rdtsc_supported@@@:
  6946 00004ED2 E888000000                              call    mp3_synth_filter_this_16bit_shift_2_slow ;
  6947                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  6948 00004ED7 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6949 00004EDE 740E                                    jz      short .no_rdtsc_supported@@@@
  6950 00004EE0 0F31                                    rdtsc
  6951 00004EE2 0105[C48D0000]                          add     [rdtsc_synth], eax
  6952 00004EE8 1115[C88D0000]                          adc     [rdtsc_synth+4], edx
  6953                                  
  6954                                  .no_rdtsc_supported@@@@:
  6955 00004EEE 5E                                      pop     esi
  6956 00004EEF A1[640A0100]                            mov     eax, [mp3_samples_dst_step]
  6957 00004EF4 C1E005                                  shl     eax, 5
  6958 00004EF7 8A0D[178C0000]                          mov     cl, [option_rate_shift]
  6959 00004EFD D3E8                                    shr     eax, cl
  6960 00004EFF 0105[A8B30000]                          add     [mp3_curr_syn_dst], eax
  6961 00004F05 81C680000000                            add     esi, 128        ; SBLIMIT*4
  6962 00004F0B FF05[700A0100]                          inc     dword [mp3_curr_frame]
  6963 00004F11 A1[700A0100]                            mov     eax, [mp3_curr_frame]
  6964 00004F16 3B05[ACB30000]                          cmp     eax, [mp3_nb_frames]
  6965 00004F1C 0F8234FFFFFF                            jb      .synth_frame_lop
  6966 00004F22 5F                                      pop     edi
  6967 00004F23 5E                                      pop     esi
  6968 00004F24 033D[A0B30000]                          add     edi, [mp3_bytes_per_sample]
  6969 00004F2A 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  6970 00004F30 FF05[680A0100]                          inc     dword [mp3_curr_channel]
  6971 00004F36 A1[680A0100]                            mov     eax, [mp3_curr_channel]
  6972 00004F3B 3B05[98B30000]                          cmp     eax, [mp3_output_num_channels]
  6973 00004F41 0F82FDFEFFFF                            jb      .synth_channel_lop
  6974 00004F47 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  6975 00004F4E 740E                                    jz      short .no_rdtsc_supported@@@@@
  6976 00004F50 0F31                                    rdtsc
  6977 00004F52 0105[948D0000]                          add     [rdtsc_synth_dct], eax
  6978 00004F58 1115[988D0000]                          adc     [rdtsc_synth_dct+4], edx
  6979                                  
  6980                                  .no_rdtsc_supported@@@@@:
  6981 00004F5E C3                                      retn
  6982                                  
  6983                                  
  6984                                  ; =============== S U B R O U T I N E =======================================
  6985                                  
  6986                                  
  6987                                  mp3_synth_filter_this_16bit_shift_2_slow:
  6988 00004F5F A1[A4B30000]                            mov     eax, [mp3_curr_syn_index]
  6989 00004F64 A9E0010000                              test    eax, 1E0h
  6990 00004F69 0F8482010000                            jz      .append_copy_to_window
  6991 00004F6F 90                                      nop
  6992                                  
  6993                                  .append_copy_to_window_back:
  6994 00004F70 89C5                                    mov     ebp, eax
  6995 00004F72 81E5C0010000                            and     ebp, 1C0h
  6996 00004F78 2520040000                              and     eax, 420h
  6997 00004F7D 8D7010                                  lea     esi, [eax+10h]
  6998 00004F80 8D7830                                  lea     edi, [eax+30h]
  6999 00004F83 F7DD                                    neg     ebp
  7000 00004F85 81E5C0010000                            and     ebp, 1C0h
  7001 00004F8B 8B0D[A8B30000]                          mov     ecx, [mp3_curr_syn_dst]
  7002                                  
  7003                                  .samples_lop:
  7004 00004F91 BB10001000                              mov     ebx, 100010h
  7005 00004F96 8B14B5[C0B30000]                        mov     edx, [mp3_synth_buf+esi*4]
  7006 00004F9D 8B04AD[78050500]                        mov     eax, [mp3_synth_win+ebp*4]
  7007 00004FA4 F7EA                                    imul    edx
  7008 00004FA6 01D3                                    add     ebx, edx
  7009 00004FA8 8B14B5[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  7010 00004FAF 8B04AD[78060500]                        mov     eax, [(mp3_synth_win+100h)+ebp*4]
  7011 00004FB6 F7EA                                    imul    edx
  7012 00004FB8 01D3                                    add     ebx, edx
  7013 00004FBA 8B14B5[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  7014 00004FC1 8B04AD[78070500]                        mov     eax, [(mp3_synth_win+200h)+ebp*4]
  7015 00004FC8 F7EA                                    imul    edx
  7016 00004FCA 01D3                                    add     ebx, edx
  7017 00004FCC 8B14B5[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  7018 00004FD3 8B04AD[78080500]                        mov     eax, [(mp3_synth_win+300h)+ebp*4]
  7019 00004FDA F7EA                                    imul    edx
  7020 00004FDC 01D3                                    add     ebx, edx
  7021 00004FDE 8B14B5[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  7022 00004FE5 8B04AD[78090500]                        mov     eax, [(mp3_synth_win+400h)+ebp*4]
  7023 00004FEC F7EA                                    imul    edx
  7024 00004FEE 01D3                                    add     ebx, edx
  7025 00004FF0 8B14B5[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  7026 00004FF7 8B04AD[780A0500]                        mov     eax, [(mp3_synth_win+500h)+ebp*4]
  7027 00004FFE F7EA                                    imul    edx
  7028 00005000 01D3                                    add     ebx, edx
  7029 00005002 8B14B5[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  7030 00005009 8B04AD[780B0500]                        mov     eax, [(mp3_synth_win+600h)+ebp*4]
  7031 00005010 F7EA                                    imul    edx
  7032 00005012 01D3                                    add     ebx, edx
  7033 00005014 8B14B5[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  7034 0000501B 8B04AD[780C0500]                        mov     eax, [(mp3_synth_win+700h)+ebp*4]
  7035 00005022 F7EA                                    imul    edx
  7036 00005024 01D3                                    add     ebx, edx
  7037 00005026 8B14BD[C0B30000]                        mov     edx, [mp3_synth_buf+edi*4]
  7038 0000502D 8B04AD[F8050500]                        mov     eax, [(mp3_synth_win+80h)+ebp*4]
  7039 00005034 F7EA                                    imul    edx
  7040 00005036 01D3                                    add     ebx, edx
  7041 00005038 8B14BD[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  7042 0000503F 8B04AD[F8060500]                        mov     eax, [(mp3_synth_win+180h)+ebp*4]
  7043 00005046 F7EA                                    imul    edx
  7044 00005048 01D3                                    add     ebx, edx
  7045 0000504A 8B14BD[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  7046 00005051 8B04AD[F8070500]                        mov     eax, [(mp3_synth_win+280h)+ebp*4]
  7047 00005058 F7EA                                    imul    edx
  7048 0000505A 01D3                                    add     ebx, edx
  7049 0000505C 8B14BD[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  7050 00005063 8B04AD[F8080500]                        mov     eax, [(mp3_synth_win+380h)+ebp*4]
  7051 0000506A F7EA                                    imul    edx
  7052 0000506C 01D3                                    add     ebx, edx
  7053 0000506E 8B14BD[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  7054 00005075 8B04AD[F8090500]                        mov     eax, [(mp3_synth_win+480h)+ebp*4]
  7055 0000507C F7EA                                    imul    edx
  7056 0000507E 01D3                                    add     ebx, edx
  7057 00005080 8B14BD[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  7058 00005087 8B04AD[F80A0500]                        mov     eax, [(mp3_synth_win+580h)+ebp*4]
  7059 0000508E F7EA                                    imul    edx
  7060 00005090 01D3                                    add     ebx, edx
  7061 00005092 8B14BD[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  7062 00005099 8B04AD[F80B0500]                        mov     eax, [(mp3_synth_win+680h)+ebp*4]
  7063 000050A0 F7EA                                    imul    edx
  7064 000050A2 01D3                                    add     ebx, edx
  7065 000050A4 8B14BD[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  7066 000050AB 8B04AD[F80C0500]                        mov     eax, [(mp3_synth_win+780h)+ebp*4]
  7067 000050B2 F7EA                                    imul    edx
  7068 000050B4 01D3                                    add     ebx, edx
  7069 000050B6 81FB00002000                            cmp     ebx, 200000h
  7070 000050BC 7328                                    jnb     short .sat
  7071 000050BE C1FB05                                  sar     ebx, 5
  7072 000050C1 81EB00800000                            sub     ebx, 8000h
  7073                                  
  7074                                  .sat_back:
  7075 000050C7 668919                                  mov     [ecx], bx
  7076 000050CA 030D[640A0100]                          add     ecx, [mp3_samples_dst_step]
  7077 000050D0 83C604                                  add     esi, 4
  7078 000050D3 83EF04                                  sub     edi, 4
  7079 000050D6 83C504                                  add     ebp, 4
  7080 000050D9 F7C51F000000                            test    ebp, 1Fh
  7081 000050DF 0F85ACFEFFFF                            jnz     .samples_lop
  7082 000050E5 C3                                      retn
  7083                                  
  7084                                  .sat:
  7085 000050E6 C1FB1F                                  sar     ebx, 31
  7086 000050E9 81F3FF7F0000                            xor     ebx, 7FFFh
  7087 000050EF EBD6                                    jmp     short .sat_back
  7088                                  
  7089                                  .append_copy_to_window:
  7090 000050F1 8D3485[C0B30000]                        lea     esi, [mp3_synth_buf+eax*4]
  7091 000050F8 8DBE00080000                            lea     edi, [esi+2048]
  7092 000050FE B912000000                              mov     ecx, 18
  7093 00005103 F3A5                                    rep movsd
  7094 00005105 E966FEFFFF                              jmp     .append_copy_to_window_back
  7095                                  
  7096                                  
  7097                                  ; =============== S U B R O U T I N E =======================================
  7098                                  
  7099                                  
  7100                                  synth_8bit_shift_0_slow:
  7101 0000510A F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 1,0,0
  7102 00005111 740E                                    jz      short .no_rdtsc_supported
  7103 00005113 0F31                                    rdtsc
  7104 00005115 2905[948D0000]                          sub     [rdtsc_synth_dct], eax
  7105 0000511B 1915[988D0000]                          sbb     [rdtsc_synth_dct+4], edx
  7106                                  
  7107                                  .no_rdtsc_supported:
  7108 00005121 BE[C8D30000]                            mov	esi, mp3_sb_samples
  7109 00005126 8B3D[5C0A0100]                          mov	edi, [mp3_samples_dst]
  7110 0000512C C705[680A0100]0000-                     mov	dword [mp3_curr_channel], 0
  7110 00005134 0000               
  7111                                  
  7112                                  .synth_channel_lop:
  7113 00005136 56                                      push	esi
  7114 00005137 57                                      push	edi
  7115 00005138 893D[A8B30000]                          mov	[mp3_curr_syn_dst], edi
  7116 0000513E C705[700A0100]0000-                     mov	dword [mp3_curr_frame], 0
  7116 00005146 0000               
  7117                                  
  7118                                  .synth_frame_lop:
  7119 00005148 56                                      push    esi
  7120 00005149 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  7121 00005150 740E                                    jz      short .no_rdtsc_supported@
  7122 00005152 0F31                                    rdtsc
  7123 00005154 2905[AC8D0000]                          sub     [rdtsc_dct32], eax
  7124 0000515A 1915[B08D0000]                          sbb     [rdtsc_dct32+4], edx
  7125                                  
  7126                                  .no_rdtsc_supported@:
  7127 00005160 8B15[680A0100]                          mov     edx, [mp3_curr_channel]
  7128 00005166 8B0495[C0D30000]                        mov     eax, [mp3_synth_index+edx*4]
  7129 0000516D 832C95[C0D30000]20                      sub     dword [mp3_synth_index+edx*4], 32
  7130 00005175 C1E20A                                  shl     edx, 10
  7131 00005178 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  7132 0000517D 09D0                                    or      eax, edx
  7133 0000517F A3[A4B30000]                            mov     [mp3_curr_syn_index], eax
  7134 00005184 8B3D[A4B30000]                          mov     edi, [mp3_curr_syn_index]
  7135 0000518A 8D3CBD[C0B30000]                        lea     edi, [mp3_synth_buf+edi*4]
  7136 00005191 E894D4FFFF                              call    mp3_dct32_shift_0
  7137 00005196 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  7138 0000519D 740E                                    jz      short .no_rdtsc_supported@@
  7139 0000519F 0F31                                    rdtsc
  7140 000051A1 0105[AC8D0000]                          add     [rdtsc_dct32], eax
  7141 000051A7 1115[B08D0000]                          adc     [rdtsc_dct32+4], edx
  7142                                  
  7143                                  .no_rdtsc_supported@@:
  7144 000051AD F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  7145 000051B4 740E                                    jz      short .no_rdtsc_supported@@@
  7146 000051B6 0F31                                    rdtsc
  7147 000051B8 2905[C48D0000]                          sub     [rdtsc_synth], eax
  7148 000051BE 1915[C88D0000]                          sbb     [rdtsc_synth+4], edx
  7149                                  
  7150                                  .no_rdtsc_supported@@@:
  7151 000051C4 E888000000                              call    mp3_synth_filter_this_8bit_shift_0_slow ;
  7152                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  7153 000051C9 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  7154 000051D0 740E                                    jz      short .no_rdtsc_supported@@@@
  7155 000051D2 0F31                                    rdtsc
  7156 000051D4 0105[C48D0000]                          add     [rdtsc_synth], eax
  7157 000051DA 1115[C88D0000]                          adc     [rdtsc_synth+4], edx
  7158                                  
  7159                                  .no_rdtsc_supported@@@@:
  7160 000051E0 5E                                      pop     esi
  7161 000051E1 A1[640A0100]                            mov     eax, [mp3_samples_dst_step]
  7162 000051E6 C1E005                                  shl     eax, 5
  7163 000051E9 8A0D[178C0000]                          mov     cl, [option_rate_shift]
  7164 000051EF D3E8                                    shr     eax, cl
  7165 000051F1 0105[A8B30000]                          add     [mp3_curr_syn_dst], eax
  7166 000051F7 81C680000000                            add     esi, 128        ; SBLIMIT*4
  7167 000051FD FF05[700A0100]                          inc     dword [mp3_curr_frame]
  7168 00005203 A1[700A0100]                            mov     eax, [mp3_curr_frame]
  7169 00005208 3B05[ACB30000]                          cmp     eax, [mp3_nb_frames]
  7170 0000520E 0F8234FFFFFF                            jb      .synth_frame_lop
  7171 00005214 5F                                      pop     edi
  7172 00005215 5E                                      pop     esi
  7173 00005216 033D[A0B30000]                          add     edi, [mp3_bytes_per_sample]
  7174 0000521C 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  7175 00005222 FF05[680A0100]                          inc     dword [mp3_curr_channel]
  7176 00005228 A1[680A0100]                            mov     eax, [mp3_curr_channel]
  7177 0000522D 3B05[98B30000]                          cmp     eax, [mp3_output_num_channels]
  7178 00005233 0F82FDFEFFFF                            jb      .synth_channel_lop
  7179 00005239 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  7180 00005240 740E                                    jz      short .no_rdtsc_supported@@@@@
  7181 00005242 0F31                                    rdtsc
  7182 00005244 0105[948D0000]                          add     [rdtsc_synth_dct], eax
  7183 0000524A 1115[988D0000]                          adc     [rdtsc_synth_dct+4], edx
  7184                                  
  7185                                  .no_rdtsc_supported@@@@@:
  7186 00005250 C3                                      retn
  7187                                  
  7188                                  
  7189                                  ; =============== S U B R O U T I N E =======================================
  7190                                  
  7191                                  
  7192                                  mp3_synth_filter_this_8bit_shift_0_slow:
  7193 00005251 A1[A4B30000]                            mov     eax, [mp3_curr_syn_index]
  7194 00005256 A9E0010000                              test    eax, 1E0h
  7195 0000525B 0F8471010000                            jz      .append_copy_to_window
  7196 00005261 90                                      nop
  7197                                  
  7198                                  .append_copy_to_window_back:
  7199 00005262 89C5                                    mov     ebp, eax
  7200 00005264 81E5C0010000                            and     ebp, 1C0h
  7201 0000526A 2520040000                              and     eax, 420h
  7202 0000526F 8D7010                                  lea     esi, [eax+10h]
  7203 00005272 8D7830                                  lea     edi, [eax+30h]
  7204 00005275 F7DD                                    neg     ebp
  7205 00005277 81E5C0010000                            and     ebp, 1C0h
  7206 0000527D 8B0D[A8B30000]                          mov     ecx, [mp3_curr_syn_dst]
  7207                                  
  7208                                  .samples_lop:
  7209 00005283 BB00101000                              mov     ebx, 101000h
  7210 00005288 8B14B5[C0B30000]                        mov     edx, [mp3_synth_buf+esi*4]
  7211 0000528F 8B04AD[78050500]                        mov     eax, [mp3_synth_win+ebp*4]
  7212 00005296 F7EA                                    imul    edx
  7213 00005298 01D3                                    add     ebx, edx
  7214 0000529A 8B14B5[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  7215 000052A1 8B04AD[78060500]                        mov     eax, [(mp3_synth_win+100h)+ebp*4]
  7216 000052A8 F7EA                                    imul    edx
  7217 000052AA 01D3                                    add     ebx, edx
  7218 000052AC 8B14B5[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  7219 000052B3 8B04AD[78070500]                        mov     eax, [(mp3_synth_win+200h)+ebp*4]
  7220 000052BA F7EA                                    imul    edx
  7221 000052BC 01D3                                    add     ebx, edx
  7222 000052BE 8B14B5[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  7223 000052C5 8B04AD[78080500]                        mov     eax, [(mp3_synth_win+300h)+ebp*4]
  7224 000052CC F7EA                                    imul    edx
  7225 000052CE 01D3                                    add     ebx, edx
  7226 000052D0 8B14B5[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  7227 000052D7 8B04AD[78090500]                        mov     eax, [(mp3_synth_win+400h)+ebp*4]
  7228 000052DE F7EA                                    imul    edx
  7229 000052E0 01D3                                    add     ebx, edx
  7230 000052E2 8B14B5[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  7231 000052E9 8B04AD[780A0500]                        mov     eax, [(mp3_synth_win+500h)+ebp*4]
  7232 000052F0 F7EA                                    imul    edx
  7233 000052F2 01D3                                    add     ebx, edx
  7234 000052F4 8B14B5[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  7235 000052FB 8B04AD[780B0500]                        mov     eax, [(mp3_synth_win+600h)+ebp*4]
  7236 00005302 F7EA                                    imul    edx
  7237 00005304 01D3                                    add     ebx, edx
  7238 00005306 8B14B5[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  7239 0000530D 8B04AD[780C0500]                        mov     eax, [(mp3_synth_win+700h)+ebp*4]
  7240 00005314 F7EA                                    imul    edx
  7241 00005316 01D3                                    add     ebx, edx
  7242 00005318 8B14BD[C0B30000]                        mov     edx, [mp3_synth_buf+edi*4]
  7243 0000531F 8B04AD[F8050500]                        mov     eax, [(mp3_synth_win+80h)+ebp*4]
  7244 00005326 F7EA                                    imul    edx
  7245 00005328 01D3                                    add     ebx, edx
  7246 0000532A 8B14BD[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  7247 00005331 8B04AD[F8060500]                        mov     eax, [(mp3_synth_win+180h)+ebp*4]
  7248 00005338 F7EA                                    imul    edx
  7249 0000533A 01D3                                    add     ebx, edx
  7250 0000533C 8B14BD[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  7251 00005343 8B04AD[F8070500]                        mov     eax, [(mp3_synth_win+280h)+ebp*4]
  7252 0000534A F7EA                                    imul    edx
  7253 0000534C 01D3                                    add     ebx, edx
  7254 0000534E 8B14BD[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  7255 00005355 8B04AD[F8080500]                        mov     eax, [(mp3_synth_win+380h)+ebp*4]
  7256 0000535C F7EA                                    imul    edx
  7257 0000535E 01D3                                    add     ebx, edx
  7258 00005360 8B14BD[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  7259 00005367 8B04AD[F8090500]                        mov     eax, [(mp3_synth_win+480h)+ebp*4]
  7260 0000536E F7EA                                    imul    edx
  7261 00005370 01D3                                    add     ebx, edx
  7262 00005372 8B14BD[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  7263 00005379 8B04AD[F80A0500]                        mov     eax, [(mp3_synth_win+580h)+ebp*4]
  7264 00005380 F7EA                                    imul    edx
  7265 00005382 01D3                                    add     ebx, edx
  7266 00005384 8B14BD[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  7267 0000538B 8B04AD[F80B0500]                        mov     eax, [(mp3_synth_win+680h)+ebp*4]
  7268 00005392 F7EA                                    imul    edx
  7269 00005394 01D3                                    add     ebx, edx
  7270 00005396 8B14BD[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  7271 0000539D 8B04AD[F80C0500]                        mov     eax, [(mp3_synth_win+780h)+ebp*4]
  7272 000053A4 F7EA                                    imul    edx
  7273 000053A6 01D3                                    add     ebx, edx
  7274 000053A8 81FB00002000                            cmp     ebx, 200000h
  7275 000053AE 731B                                    jnb     short .sat
  7276 000053B0 C1FB0D                                  sar     ebx, 13
  7277                                  
  7278                                  .sat_back:
  7279 000053B3 8819                                    mov     [ecx], bl
  7280 000053B5 030D[640A0100]                          add     ecx, [mp3_samples_dst_step]
  7281 000053BB 46                                      inc     esi
  7282 000053BC 4F                                      dec     edi
  7283 000053BD 45                                      inc     ebp
  7284 000053BE F7C51F000000                            test    ebp, 1Fh
  7285 000053C4 0F85B9FEFFFF                            jnz     .samples_lop
  7286 000053CA C3                                      retn
  7287                                  
  7288                                  .sat:
  7289 000053CB C1FB1F                                  sar     ebx, 31
  7290 000053CE F7D3                                    not     ebx
  7291 000053D0 EBE1                                    jmp     short .sat_back
  7292                                  
  7293                                  .append_copy_to_window:
  7294 000053D2 8D3485[C0B30000]                        lea     esi, [mp3_synth_buf+eax*4]
  7295 000053D9 8DBE00080000                            lea     edi, [esi+2048]
  7296 000053DF B912000000                              mov     ecx, 18
  7297 000053E4 F3A5                                    rep movsd
  7298 000053E6 E977FEFFFF                              jmp     .append_copy_to_window_back
  7299                                  
  7300                                  
  7301                                  ; =============== S U B R O U T I N E =======================================
  7302                                  
  7303                                  
  7304                                  synth_8bit_shift_1_slow:
  7305 000053EB F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 1,1,0
  7306                                                                          ; force_8bit, rate_shift=1, force_fast=0
  7307 000053F2 740E                                    jz      short .no_rdtsc_supported
  7308 000053F4 0F31                                    rdtsc
  7309 000053F6 2905[948D0000]                          sub     [rdtsc_synth_dct], eax
  7310 000053FC 1915[988D0000]                          sbb     [rdtsc_synth_dct+4], edx
  7311                                  
  7312                                  .no_rdtsc_supported:
  7313 00005402 BE[C8D30000]                            mov	esi, mp3_sb_samples
  7314 00005407 8B3D[5C0A0100]                          mov	edi, [mp3_samples_dst]
  7315 0000540D C705[680A0100]0000-                     mov	dword [mp3_curr_channel], 0
  7315 00005415 0000               
  7316                                  
  7317                                  .synth_channel_lop:
  7318 00005417 56                                      push	esi
  7319 00005418 57                                      push	edi
  7320 00005419 893D[A8B30000]                          mov	[mp3_curr_syn_dst], edi
  7321 0000541F C705[700A0100]0000-                     mov	dword [mp3_curr_frame], 0
  7321 00005427 0000               
  7322                                  
  7323                                  .synth_frame_lop:
  7324 00005429 56                                      push    esi
  7325 0000542A F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  7326 00005431 740E                                    jz      short .no_rdtsc_supported@
  7327 00005433 0F31                                    rdtsc
  7328 00005435 2905[AC8D0000]                          sub     [rdtsc_dct32], eax
  7329 0000543B 1915[B08D0000]                          sbb     [rdtsc_dct32+4], edx
  7330                                  
  7331                                  .no_rdtsc_supported@:
  7332 00005441 8B15[680A0100]                          mov     edx, [mp3_curr_channel]
  7333 00005447 8B0495[C0D30000]                        mov     eax, [mp3_synth_index+edx*4]
  7334 0000544E 832C95[C0D30000]20                      sub     dword [mp3_synth_index+edx*4], 32
  7335 00005456 C1E20A                                  shl     edx, 10
  7336 00005459 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  7337 0000545E 09D0                                    or      eax, edx
  7338 00005460 A3[A4B30000]                            mov     [mp3_curr_syn_index], eax
  7339 00005465 8B3D[A4B30000]                          mov     edi, [mp3_curr_syn_index]
  7340 0000546B 8D3CBD[C0B30000]                        lea     edi, [mp3_synth_buf+edi*4]
  7341 00005472 E893DAFFFF                              call    mp3_dct32_shift_1 ; mp3_dct32_shift_&rate_shift ; rate_shift = 1
  7342 00005477 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  7343 0000547E 740E                                    jz      short .no_rdtsc_supported@@
  7344 00005480 0F31                                    rdtsc
  7345 00005482 0105[AC8D0000]                          add     [rdtsc_dct32], eax
  7346 00005488 1115[B08D0000]                          adc     [rdtsc_dct32+4], edx
  7347                                  
  7348                                  .no_rdtsc_supported@@:
  7349 0000548E F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  7350 00005495 740E                                    jz      short .no_rdtsc_supported@@@
  7351 00005497 0F31                                    rdtsc
  7352 00005499 2905[C48D0000]                          sub     [rdtsc_synth], eax
  7353 0000549F 1915[C88D0000]                          sbb     [rdtsc_synth+4], edx
  7354                                  
  7355                                  .no_rdtsc_supported@@@:
  7356 000054A5 E888000000                              call    mp3_synth_filter_this_8bit_shift_1_slow ;
  7357                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  7358 000054AA F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  7359 000054B1 740E                                    jz      short .no_rdtsc_supported@@@@
  7360 000054B3 0F31                                    rdtsc
  7361 000054B5 0105[C48D0000]                          add     [rdtsc_synth], eax
  7362 000054BB 1115[C88D0000]                          adc     [rdtsc_synth+4], edx
  7363                                  
  7364                                  .no_rdtsc_supported@@@@:
  7365 000054C1 5E                                      pop     esi
  7366 000054C2 A1[640A0100]                            mov     eax, [mp3_samples_dst_step]
  7367 000054C7 C1E005                                  shl     eax, 5          ; mul32
  7368 000054CA 8A0D[178C0000]                          mov     cl, [option_rate_shift]
  7369 000054D0 D3E8                                    shr     eax, cl
  7370 000054D2 0105[A8B30000]                          add     [mp3_curr_syn_dst], eax
  7371 000054D8 81C680000000                            add     esi, 128        ; SBLIMIT*4
  7372 000054DE FF05[700A0100]                          inc	dword [mp3_curr_frame]
  7373 000054E4 A1[700A0100]                            mov     eax, [mp3_curr_frame]
  7374 000054E9 3B05[ACB30000]                          cmp     eax, [mp3_nb_frames]
  7375 000054EF 0F8234FFFFFF                            jb      .synth_frame_lop
  7376 000054F5 5F                                      pop     edi
  7377 000054F6 5E                                      pop     esi
  7378 000054F7 033D[A0B30000]                          add     edi, [mp3_bytes_per_sample]
  7379 000054FD 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4
  7380 00005503 FF05[680A0100]                          inc	dword [mp3_curr_channel]
  7381 00005509 A1[680A0100]                            mov     eax, [mp3_curr_channel]
  7382 0000550E 3B05[98B30000]                          cmp     eax, [mp3_output_num_channels]
  7383 00005514 0F82FDFEFFFF                            jb      .synth_channel_lop
  7384 0000551A F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  7385 00005521 740E                                    jz      short .no_rdtsc_supported@@@@@
  7386 00005523 0F31                                    rdtsc
  7387 00005525 0105[948D0000]                          add     [rdtsc_synth_dct], eax
  7388 0000552B 1115[988D0000]                          adc     [rdtsc_synth_dct+4], edx
  7389                                  
  7390                                  .no_rdtsc_supported@@@@@:
  7391 00005531 C3                                      retn
  7392                                  
  7393                                  
  7394                                  ; =============== S U B R O U T I N E =======================================
  7395                                  
  7396                                  
  7397                                  mp3_synth_filter_this_8bit_shift_1_slow:
  7398 00005532 A1[A4B30000]                            mov     eax, [mp3_curr_syn_index] ; IF LONG_WINDOW
  7399 00005537 A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh
  7400 0000553C 0F8477010000                            jz      .append_copy_to_window
  7401 00005542 90                                      nop
  7402                                  
  7403                                  .append_copy_to_window_back:
  7404 00005543 89C5                                    mov     ebp, eax
  7405 00005545 81E5C0010000                            and     ebp, 1C0h       ; 1FFh-1Fh-20h
  7406 0000554B 2520040000                              and     eax, 420h       ; 20h+(1 shl 10)
  7407 00005550 8D7010                                  lea     esi, [eax+10h]
  7408 00005553 8D7830                                  lea     edi, [eax+30h]
  7409 00005556 F7DD                                    neg     ebp
  7410 00005558 81E5C0010000                            and     ebp, 1C0h
  7411 0000555E 8B0D[A8B30000]                          mov     ecx, [mp3_curr_syn_dst]
  7412                                  
  7413                                  .samples_lop:
  7414 00005564 BB00101000                              mov     ebx, 101000h    ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  7415                                                                          ; @@out_shift equ (OUT_SHIFT_slow+(8*force_8bit))
  7416                                                                          ; OUT_SHIFT_slow = 5 ; @@out_shift = 13
  7417 00005569 8B14B5[C0B30000]                        mov     edx, [mp3_synth_buf+esi*4] ; @@SUM8 @@sum,@@win1,0,@@syn1
  7418                                                                          ; @@SUM8 macro sum,win,ww,syn
  7419                                                                          ;   IRP nn,0,1,2,3,4,5,6,7
  7420 00005570 8B04AD[78050500]                        mov     eax, [mp3_synth_win+ebp*4]
  7421 00005577 F7EA                                    imul    edx
  7422 00005579 01D3                                    add     ebx, edx
  7423 0000557B 8B14B5[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4] ; @@syn1 equ esi
  7424 00005582 8B04AD[78060500]                        mov     eax, [(mp3_synth_win+100h)+ebp*4] ; @@win1 equ ebp
  7425 00005589 F7EA                                    imul    edx
  7426 0000558B 01D3                                    add     ebx, edx
  7427 0000558D 8B14B5[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  7428 00005594 8B04AD[78070500]                        mov     eax, [(mp3_synth_win+200h)+ebp*4]
  7429 0000559B F7EA                                    imul    edx
  7430 0000559D 01D3                                    add     ebx, edx
  7431 0000559F 8B14B5[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  7432 000055A6 8B04AD[78080500]                        mov     eax, [(mp3_synth_win+300h)+ebp*4]
  7433 000055AD F7EA                                    imul    edx
  7434 000055AF 01D3                                    add     ebx, edx
  7435 000055B1 8B14B5[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  7436 000055B8 8B04AD[78090500]                        mov     eax, [(mp3_synth_win+400h)+ebp*4]
  7437 000055BF F7EA                                    imul    edx
  7438 000055C1 01D3                                    add     ebx, edx
  7439 000055C3 8B14B5[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  7440 000055CA 8B04AD[780A0500]                        mov     eax, [(mp3_synth_win+500h)+ebp*4]
  7441 000055D1 F7EA                                    imul    edx
  7442 000055D3 01D3                                    add     ebx, edx
  7443 000055D5 8B14B5[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  7444 000055DC 8B04AD[780B0500]                        mov     eax, [(mp3_synth_win+600h)+ebp*4]
  7445 000055E3 F7EA                                    imul    edx
  7446 000055E5 01D3                                    add     ebx, edx
  7447 000055E7 8B14B5[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  7448 000055EE 8B04AD[780C0500]                        mov     eax, [(mp3_synth_win+700h)+ebp*4]
  7449 000055F5 F7EA                                    imul    edx
  7450 000055F7 01D3                                    add     ebx, edx
  7451 000055F9 8B14BD[C0B30000]                        mov     edx, [mp3_synth_buf+edi*4]
  7452 00005600 8B04AD[F8050500]                        mov     eax, [(mp3_synth_win+80h)+ebp*4]
  7453 00005607 F7EA                                    imul    edx
  7454 00005609 01D3                                    add     ebx, edx
  7455 0000560B 8B14BD[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4] ; @@SUM8 @@sum,@@win1,32,@@syn2
  7456                                                                          ; @@syn2 equ edi
  7457                                                                          ; @@win1 equ ebp
  7458 00005612 8B04AD[F8060500]                        mov     eax, [(mp3_synth_win+180h)+ebp*4]
  7459 00005619 F7EA                                    imul    edx
  7460 0000561B 01D3                                    add     ebx, edx
  7461 0000561D 8B14BD[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  7462 00005624 8B04AD[F8070500]                        mov     eax, [(mp3_synth_win+280h)+ebp*4]
  7463 0000562B F7EA                                    imul    edx
  7464 0000562D 01D3                                    add     ebx, edx
  7465 0000562F 8B14BD[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  7466 00005636 8B04AD[F8080500]                        mov     eax, [(mp3_synth_win+380h)+ebp*4]
  7467 0000563D F7EA                                    imul    edx
  7468 0000563F 01D3                                    add     ebx, edx
  7469 00005641 8B14BD[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  7470 00005648 8B04AD[F8090500]                        mov     eax, [(mp3_synth_win+480h)+ebp*4]
  7471 0000564F F7EA                                    imul    edx
  7472 00005651 01D3                                    add     ebx, edx
  7473 00005653 8B14BD[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  7474 0000565A 8B04AD[F80A0500]                        mov     eax, [(mp3_synth_win+580h)+ebp*4]
  7475 00005661 F7EA                                    imul    edx
  7476 00005663 01D3                                    add     ebx, edx
  7477 00005665 8B14BD[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  7478 0000566C 8B04AD[F80B0500]                        mov     eax, [(mp3_synth_win+680h)+ebp*4]
  7479 00005673 F7EA                                    imul    edx
  7480 00005675 01D3                                    add     ebx, edx
  7481 00005677 8B14BD[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  7482 0000567E 8B04AD[F80C0500]                        mov     eax, [(mp3_synth_win+780h)+ebp*4]
  7483 00005685 F7EA                                    imul    edx
  7484 00005687 01D3                                    add     ebx, edx
  7485 00005689 81FB00002000                            cmp     ebx, 200000h    ; cmp @@sum,100h SHL (@@out_shift)
  7486 0000568F 7321                                    jnb     short .sat
  7487 00005691 C1FB0D                                  sar     ebx, 13         ; sar @@sum,(@@out_shift)
  7488                                  
  7489                                  .sat_back:
  7490 00005694 8819                                    mov     [ecx], bl
  7491 00005696 030D[640A0100]                          add     ecx, [mp3_samples_dst_step]
  7492 0000569C 83C602                                  add     esi, 2
  7493 0000569F 83EF02                                  sub     edi, 2
  7494 000056A2 83C502                                  add     ebp, 2
  7495 000056A5 F7C51F000000                            test    ebp, 1Fh
  7496 000056AB 0F85B3FEFFFF                            jnz     .samples_lop
  7497 000056B1 C3                                      retn
  7498                                  
  7499                                  .sat:
  7500 000056B2 C1FB1F                                  sar     ebx, 31         ; sar @@sum,31 ; FFFFFFFFh,00000000h
  7501 000056B5 F7D3                                    not     ebx
  7502 000056B7 EBDB                                    jmp     short .sat_back
  7503                                  
  7504                                  .append_copy_to_window:
  7505 000056B9 8D3485[C0B30000]                        lea     esi, [mp3_synth_buf+eax*4]
  7506 000056C0 8DBE00080000                            lea     edi, [esi+2048]
  7507 000056C6 B912000000                              mov     ecx, 18
  7508 000056CB F3A5                                    rep movsd
  7509 000056CD E971FEFFFF                              jmp     .append_copy_to_window_back
  7510                                  
  7511                                  
  7512                                  ; =============== S U B R O U T I N E =======================================
  7513                                  
  7514                                  
  7515                                  synth_8bit_shift_2_slow:
  7516 000056D2 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; SYNTH_MACRO 1,2,0 ; 8bit, quarter rate
  7517                                                                          ; force_8bit, rate_shift=2, force_fast=0
  7518 000056D9 740E                                    jz      short .no_rdtsc_supported ; timelog_start rdtsc_synth_dct
  7519 000056DB 0F31                                    rdtsc
  7520 000056DD 2905[948D0000]                          sub     [rdtsc_synth_dct], eax
  7521 000056E3 1915[988D0000]                          sbb     [rdtsc_synth_dct+4], edx
  7522                                  
  7523                                  .no_rdtsc_supported:
  7524 000056E9 BE[C8D30000]                            mov	esi, mp3_sb_samples
  7525 000056EE 8B3D[5C0A0100]                          mov	edi, [mp3_samples_dst]
  7526 000056F4 C705[680A0100]0000-                     mov	dword [mp3_curr_channel], 0
  7526 000056FC 0000               
  7527                                  
  7528                                  .synth_channel_lop:
  7529 000056FE 56                                      push	esi
  7530 000056FF 57                                      push	edi
  7531 00005700 893D[A8B30000]                          mov	[mp3_curr_syn_dst], edi
  7532 00005706 C705[700A0100]0000-                     mov	dword [mp3_curr_frame], 0
  7532 0000570E 0000               
  7533                                  
  7534                                  .synth_frame_lop:
  7535 00005710 56                                      push    esi             ; sb_samples[ch][i]
  7536 00005711 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_start rdtsc_dct32
  7537 00005718 740E                                    jz      short .no_rdtsc_supported@
  7538 0000571A 0F31                                    rdtsc
  7539 0000571C 2905[AC8D0000]                          sub     [rdtsc_dct32], eax
  7540 00005722 1915[B08D0000]                          sbb     [rdtsc_dct32+4], edx
  7541                                  
  7542                                  .no_rdtsc_supported@:
  7543 00005728 8B15[680A0100]                          mov     edx, [mp3_curr_channel]
  7544 0000572E 8B0495[C0D30000]                        mov     eax, [mp3_synth_index+edx*4]
  7545 00005735 832C95[C0D30000]20                      sub     dword [mp3_synth_index+edx*4], 32
  7546 0000573D C1E20A                                  shl     edx, 10         ; channel*1024
  7547 00005740 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh ; index(0..511), align 32
  7548 00005745 09D0                                    or      eax, edx
  7549 00005747 A3[A4B30000]                            mov     [mp3_curr_syn_index], eax
  7550 0000574C 8B3D[A4B30000]                          mov     edi, [mp3_curr_syn_index]
  7551 00005752 8D3CBD[C0B30000]                        lea     edi, [mp3_synth_buf+edi*4] ; IF SYNTH32
  7552 00005759 E89CDBFFFF                              call    mp3_dct32_shift_2 ; mp3_dct32_shift_&rate_shift ; rate_shift=2
  7553 0000575E F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  7554 00005765 740E                                    jz      short .no_rdtsc_supported@@ ; timelog_end rdtsc_dct32
  7555 00005767 0F31                                    rdtsc
  7556 00005769 0105[AC8D0000]                          add     [rdtsc_dct32], eax
  7557 0000576F 1115[B08D0000]                          adc     [rdtsc_dct32+4], edx
  7558                                  
  7559                                  .no_rdtsc_supported@@:
  7560 00005775 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  7561 0000577C 740E                                    jz      short .no_rdtsc_supported@@@ ; timelog_start rdtsc_synth
  7562 0000577E 0F31                                    rdtsc
  7563 00005780 2905[C48D0000]                          sub     [rdtsc_synth], eax
  7564 00005786 1915[C88D0000]                          sbb     [rdtsc_synth+4], edx
  7565                                  
  7566                                  .no_rdtsc_supported@@@:
  7567 0000578C E888000000                              call    mp3_synth_filter_this_8bit_shift_2_slow ;
  7568                                                                          ; mp3_synth_filter_this_&force_8bit&_&rate_shift&_&force_fast
  7569 00005791 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_synth
  7570 00005798 740E                                    jz      short .no_rdtsc_supported@@@@
  7571 0000579A 0F31                                    rdtsc
  7572 0000579C 0105[C48D0000]                          add     [rdtsc_synth], eax
  7573 000057A2 1115[C88D0000]                          adc     [rdtsc_synth+4], edx
  7574                                  
  7575                                  .no_rdtsc_supported@@@@:
  7576 000057A8 5E                                      pop     esi             ; src
  7577 000057A9 A1[640A0100]                            mov     eax, [mp3_samples_dst_step]
  7578 000057AE C1E005                                  shl     eax, 5          ; mul32
  7579 000057B1 8A0D[178C0000]                          mov     cl, [option_rate_shift] ; IF with_rate_shift
  7580 000057B7 D3E8                                    shr     eax, cl
  7581 000057B9 0105[A8B30000]                          add     [mp3_curr_syn_dst], eax
  7582 000057BF 81C680000000                            add     esi, 128        ; SBLIMIT*4 ; src+32*4
  7583 000057C5 FF05[700A0100]                          inc     dword [mp3_curr_frame]
  7584 000057CB A1[700A0100]                            mov     eax, [mp3_curr_frame]
  7585 000057D0 3B05[ACB30000]                          cmp     eax, [mp3_nb_frames]
  7586 000057D6 0F8234FFFFFF                            jb      .synth_frame_lop
  7587 000057DC 5F                                      pop     edi
  7588 000057DD 5E                                      pop     esi
  7589 000057DE 033D[A0B30000]                          add     edi, [mp3_bytes_per_sample]
  7590 000057E4 81C600120000                            add     esi, 4608       ; 36*SBLIMIT*4 ; src
  7591 000057EA FF05[680A0100]                          inc     dword [mp3_curr_channel]
  7592 000057F0 A1[680A0100]                            mov     eax, [mp3_curr_channel]
  7593 000057F5 3B05[98B30000]                          cmp     eax, [mp3_output_num_channels]
  7594 000057FB 0F82FDFEFFFF                            jb      .synth_channel_lop
  7595 00005801 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_synth_dct
  7596 00005808 740E                                    jz      short .no_rdtsc_supported@@@@@
  7597 0000580A 0F31                                    rdtsc
  7598 0000580C 0105[948D0000]                          add     [rdtsc_synth_dct], eax
  7599 00005812 1115[988D0000]                          adc     [rdtsc_synth_dct+4], edx
  7600                                  
  7601                                  .no_rdtsc_supported@@@@@:
  7602 00005818 C3                                      retn
  7603                                  
  7604                                  ; =============== S U B R O U T I N E =======================================
  7605                                  
  7606                                  
  7607                                  mp3_synth_filter_this_8bit_shift_2_slow:
  7608 00005819 A1[A4B30000]                            mov     eax, [mp3_curr_syn_index]
  7609 0000581E A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh ; offset
  7610 00005823 0F8477010000                            jz      .append_copy_to_window
  7611 00005829 90                                      nop
  7612                                  
  7613                                  .append_copy_to_window_back:
  7614 0000582A 89C5                                    mov     ebp, eax        ; @@win1
  7615 0000582C 81E5C0010000                            and     ebp, 1C0h       ; 1FFh-1Fh-20h
  7616 00005832 2520040000                              and     eax, 420h       ; 20h+(1 shl 10) ; bit5 and channel
  7617 00005837 8D7010                                  lea     esi, [eax+10h]  ; @@syn1
  7618 0000583A 8D7830                                  lea     edi, [eax+30h]  ; @@syn2
  7619 0000583D F7DD                                    neg     ebp
  7620 0000583F 81E5C0010000                            and     ebp, 1C0h       ; 1FFh-1Fh-20h
  7621 00005845 8B0D[A8B30000]                          mov     ecx, [mp3_curr_syn_dst] ; @@dst
  7622                                  
  7623                                  .samples_lop:
  7624 0000584B BB00101000                              mov     ebx, 101000h    ; mov @@sum,(80h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  7625                                                                          ; @@out_shift equ (OUT_SHIFT_slow+(8*force_8bit))
  7626                                                                          ; @@out_shift = 13 ; OUT_SHIFT_slow = 5
  7627 00005850 8B14B5[C0B30000]                        mov     edx, [mp3_synth_buf+esi*4] ; @@SUM8 @@sum,@@win1,0,@@syn1
  7628                                                                          ; @@SUM8 macro sum,win,ww, syn
  7629                                                                          ; IRP nn,0,1,2,3,4,5,6,7
  7630                                                                          ; [mp3_synth_buf+syn*4+(nn*64*4)]
  7631 00005857 8B04AD[78050500]                        mov     eax, [mp3_synth_win+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4]
  7632 0000585E F7EA                                    imul    edx             ; 64bit = 32bit * 32bit
  7633 00005860 01D3                                    add     ebx, edx        ; add sum,edx ; sum from MSW of result
  7634 00005862 8B14B5[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4] ;
  7635                                                                          ; [mp3_synth_buf+syn*4+(nn*64*4)] ; nn=1
  7636 00005869 8B04AD[78060500]                        mov     eax, [(mp3_synth_win+100h)+ebp*4] ;
  7637                                                                          ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] ; nn=1
  7638 00005870 F7EA                                    imul    edx
  7639 00005872 01D3                                    add     ebx, edx
  7640 00005874 8B14B5[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  7641 0000587B 8B04AD[78070500]                        mov     eax, [(mp3_synth_win+200h)+ebp*4]
  7642 00005882 F7EA                                    imul    edx
  7643 00005884 01D3                                    add     ebx, edx
  7644 00005886 8B14B5[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  7645 0000588D 8B04AD[78080500]                        mov     eax, [(mp3_synth_win+300h)+ebp*4]
  7646 00005894 F7EA                                    imul    edx
  7647 00005896 01D3                                    add     ebx, edx
  7648 00005898 8B14B5[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4] ;
  7649                                                                          ; [mp3_synth_buf+syn*4+(nn*64*4)] ; nn=4
  7650 0000589F 8B04AD[78090500]                        mov     eax, [(mp3_synth_win+400h)+ebp*4] ;
  7651                                                                          ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] ; nn=4
  7652 000058A6 F7EA                                    imul    edx
  7653 000058A8 01D3                                    add     ebx, edx
  7654 000058AA 8B14B5[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  7655 000058B1 8B04AD[780A0500]                        mov     eax, [(mp3_synth_win+500h)+ebp*4]
  7656 000058B8 F7EA                                    imul    edx
  7657 000058BA 01D3                                    add     ebx, edx
  7658 000058BC 8B14B5[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  7659 000058C3 8B04AD[780B0500]                        mov     eax, [(mp3_synth_win+600h)+ebp*4]
  7660 000058CA F7EA                                    imul    edx
  7661 000058CC 01D3                                    add     ebx, edx
  7662 000058CE 8B14B5[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  7663 000058D5 8B04AD[780C0500]                        mov     eax, [(mp3_synth_win+700h)+ebp*4]
  7664 000058DC F7EA                                    imul    edx
  7665 000058DE 01D3                                    add     ebx, edx
  7666 000058E0 8B14BD[C0B30000]                        mov     edx, [mp3_synth_buf+edi*4] ; @@SUM8 @@sum,@@win1,32,@@syn2
  7667 000058E7 8B04AD[F8050500]                        mov     eax, [(mp3_synth_win+80h)+ebp*4]
  7668 000058EE F7EA                                    imul    edx
  7669 000058F0 01D3                                    add     ebx, edx
  7670 000058F2 8B14BD[C0B40000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  7671 000058F9 8B04AD[F8060500]                        mov     eax, [(mp3_synth_win+180h)+ebp*4]
  7672 00005900 F7EA                                    imul    edx
  7673 00005902 01D3                                    add     ebx, edx
  7674 00005904 8B14BD[C0B50000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  7675 0000590B 8B04AD[F8070500]                        mov     eax, [(mp3_synth_win+280h)+ebp*4]
  7676 00005912 F7EA                                    imul    edx
  7677 00005914 01D3                                    add     ebx, edx
  7678 00005916 8B14BD[C0B60000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  7679 0000591D 8B04AD[F8080500]                        mov     eax, [(mp3_synth_win+380h)+ebp*4]
  7680 00005924 F7EA                                    imul    edx
  7681 00005926 01D3                                    add     ebx, edx
  7682 00005928 8B14BD[C0B70000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  7683 0000592F 8B04AD[F8090500]                        mov     eax, [(mp3_synth_win+480h)+ebp*4]
  7684 00005936 F7EA                                    imul    edx
  7685 00005938 01D3                                    add     ebx, edx
  7686 0000593A 8B14BD[C0B80000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  7687 00005941 8B04AD[F80A0500]                        mov     eax, [(mp3_synth_win+580h)+ebp*4]
  7688 00005948 F7EA                                    imul    edx
  7689 0000594A 01D3                                    add     ebx, edx
  7690 0000594C 8B14BD[C0B90000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  7691 00005953 8B04AD[F80B0500]                        mov     eax, [(mp3_synth_win+680h)+ebp*4]
  7692 0000595A F7EA                                    imul    edx
  7693 0000595C 01D3                                    add     ebx, edx
  7694 0000595E 8B14BD[C0BA0000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  7695                                                                          ; [mp3_synth_buf+syn*4+(nn*64*4)] ; nn=7
  7696 00005965 8B04AD[F80C0500]                        mov     eax, [(mp3_synth_win+780h)+ebp*4]
  7697                                                                          ; [mp3_synth_win+win*4+(nn*64*4)+ww*4] ; nn=7
  7698 0000596C F7EA                                    imul    edx
  7699 0000596E 01D3                                    add     ebx, edx
  7700 00005970 81FB00002000                            cmp     ebx, 200000h    ; cmp @@sum,100h SHL (@@out_shift) ; out_shift=13
  7701 00005976 7321                                    jnb     short .sat
  7702 00005978 C1FB0D                                  sar     ebx, 13         ; sar @@sum,(@@out_shift)
  7703                                  
  7704                                  .sat_back:
  7705 0000597B 8819                                    mov     [ecx], bl       ; mov byte ptr [@@dst],@@sum_8bit
  7706 0000597D 030D[640A0100]                          add     ecx, [mp3_samples_dst_step]
  7707 00005983 83C604                                  add     esi, 4          ; add @@syn1,1 shl rate_shift ; rate_shift=2
  7708 00005986 83EF04                                  sub     edi, 4          ; add @@syn2,1 shl rate_shift
  7709 00005989 83C504                                  add     ebp, 4          ; add @@win1,1 shl rate_shift
  7710 0000598C F7C51F000000                            test    ebp, 1Fh        ; test @@win1,1Fh
  7711 00005992 0F85B3FEFFFF                            jnz     .samples_lop
  7712 00005998 C3                                      retn
  7713                                  
  7714                                  .sat:
  7715 00005999 C1FB1F                                  sar     ebx, 31         ; sar  @@sum,31 ; FFFFFFFFh,00000000h
  7716 0000599C F7D3                                    not     ebx
  7717 0000599E EBDB                                    jmp     short .sat_back
  7718                                  
  7719                                  .append_copy_to_window:
  7720 000059A0 8D3485[C0B30000]                        lea     esi, [mp3_synth_buf+eax*4] ; IF SYNTH32
  7721 000059A7 8DBE00080000                            lea     edi, [esi+2048] ; [esi+512*4]
  7722 000059AD B912000000                              mov     ecx, 18         ; (12h*4)/4
  7723 000059B2 F3A5                                    rep movsd
  7724 000059B4 E971FEFFFF                              jmp     .append_copy_to_window_back
  7725                                  
  7726                                  
  7727                                  ; =============== S U B R O U T I N E =======================================
  7728                                  
  7729                                  
  7730                                  mp3_any_init_synth_window:
  7731 000059B9 31D2                                    xor     edx, edx        ; index (0..100h)
  7732 000059BB 31C9                                    xor     ecx, ecx        ; delta.val
  7733 000059BD 898C12[78050500]                        mov     [mp3_synth_win+edx*2], ecx
  7734                                  
  7735                                  .synth_lop:
  7736 000059C4 0FBF9C12[6A8E0000]                      movsx   ebx, word [mp3_synth_win_src+edx*2]
  7737 000059CC 01D9                                    add     ecx, ebx
  7738 000059CE 89C8                                    mov     eax, ecx
  7739 000059D0 803D[188C0000]00                        cmp     byte [option_fast], 0
  7740 000059D7 7403                                    jz      short .not_fast
  7741 000059D9 C1F805                                  sar     eax, 5
  7742                                  
  7743                                  .not_fast:
  7744 000059DC 803D[188C0000]00                        cmp	byte [option_fast], 0
  7745 000059E3 7503                                    jnz	short .not_slow
  7746 000059E5 C1E00E                                  shl	eax, 14         ; (WFRAC_BITS_slow-WFRAC_BITS_default)
  7747                                  
  7748                                  .not_slow:
  7749 000059E8 42                                      inc     edx             ; index (1..100h)
  7750 000059E9 BB00020000                              mov     ebx, 200h
  7751 000059EE 29D3                                    sub     ebx, edx        ; 1FFh..100h
  7752 000059F0 89049D[78050500]                        mov     [mp3_synth_win+ebx*4], eax
  7753 000059F7 F7C23F000000                            test    edx, 3Fh
  7754 000059FD 7402                                    jz      short .synth_keep_sign
  7755 000059FF F7D8                                    neg     eax
  7756                                  
  7757                                  .synth_keep_sign:
  7758 00005A01 890495[78050500]                        mov     [mp3_synth_win+edx*4], eax
  7759 00005A08 81FA00010000                            cmp     edx, 100h
  7760 00005A0E 72B4                                    jb      short .synth_lop
  7761 00005A10 31D2                                    xor     edx, edx
  7762                                  
  7763                                  .synth_neg_lop:
  7764 00005A12 F7C230000000                            test    edx, 30h        ; skip 0..0Fh (only negate 10h..3Fh)
  7765 00005A18 7407                                    jz      short .synth_neg_next
  7766 00005A1A F71C95[78050500]                        neg     dword [mp3_synth_win+edx*4]
  7767                                  
  7768                                  .synth_neg_next:
  7769 00005A21 42                                      inc     edx
  7770 00005A22 81FA00020000                            cmp     edx, 200h
  7771 00005A28 72E8                                    jb      short .synth_neg_lop
  7772 00005A2A 31D2                                    xor     edx, edx
  7773                                  
  7774                                  .synth_swap_lop:
  7775 00005A2C 89D0                                    mov     eax, edx
  7776 00005A2E 83E03F                                  and     eax, 3Fh
  7777 00005A31 83E811                                  sub     eax, 17         ; swap win [(17..31)] with win[(17..31)+32)
  7778 00005A34 83F80E                                  cmp     eax, 14         ; 31-17
  7779 00005A37 7715                                    ja      short .synth_swap_next
  7780 00005A39 8B0495[78050500]                        mov     eax, [mp3_synth_win+edx*4]
  7781 00005A40 870495[F8050500]                        xchg    eax, [(mp3_synth_win+80h)+edx*4]
  7782 00005A47 890495[78050500]                        mov     [mp3_synth_win+edx*4], eax
  7783                                  
  7784                                  .synth_swap_next:
  7785 00005A4E 42                                      inc     edx
  7786 00005A4F 81FA00020000                            cmp     edx, 200h
  7787 00005A55 72D5                                    jb      short .synth_swap_lop
  7788 00005A57 31D2                                    xor     edx, edx
  7789                                  
  7790                                  .synth_zero_lop:
  7791 00005A59 C70495[B8050500]00-                     mov	dword [(mp3_synth_win+40h)+edx*4], 0
  7791 00005A61 000000             
  7792 00005A64 83C240                                  add	edx, 40h
  7793 00005A67 81FA00020000                            cmp	edx, 200h
  7794 00005A6D 72EA                                    jb	short .synth_zero_lop
  7795 00005A6F BE[78050500]                            mov	esi, mp3_synth_win
  7796 00005A74 8DBE00080000                            lea	edi, [esi+2048] ; [esi+512*4]
  7797 00005A7A B900020000                              mov	ecx, 512        ; append another copy
  7798 00005A7F F3A5                                    rep movsd
  7799 00005A81 C3                                      retn
  7800                                  
  7801                                  
  7802                                  ; =============== S U B R O U T I N E =======================================
  7803                                  
  7804                                  
  7805                                  mp3_init_post_collapse:
  7806 00005A82 803D[188C0000]00                        cmp	byte [option_fast], 0
  7807 00005A89 7411                                    jz	short .not_fast
  7808 00005A8B BE[78050500]                            mov	esi, mp3_synth_win
  7809 00005A90 89F7                                    mov	edi, esi
  7810 00005A92 B900040000                              mov	ecx, 1024       ; 512*(1+LONG_WINDOW)
  7811                                  
  7812                                  .collapse_lop:
  7813 00005A97 AD                                      lodsd                   ; collapse 32bit to 16bit
  7814                                                                          ; (that's slightly faster due to better caching)
  7815 00005A98 66AB                                    stosw
  7816 00005A9A E2FB                                    loop    .collapse_lop
  7817                                  
  7818                                  .not_fast:
  7819 00005A9C C3                                      retn
  7820                                  
  7821                                  
  7822                                  ; =============== S U B R O U T I N E =======================================
  7823                                  
  7824                                  
  7825                                  mp3_any_init_band_indices:
  7826 00005A9D BE[9C960000]                            mov     esi, mp3_band_size_long
  7827 00005AA2 BF[8CED0100]                            mov     edi, mp3_band_index_long
  7828 00005AA7 BB09000000                              mov     ebx, 9
  7829                                  
  7830                                  .band_index_lop_i:
  7831 00005AAC 31C0                                    xor     eax, eax
  7832 00005AAE B916000000                              mov     ecx, 22
  7833                                  
  7834                                  .band_index_lop_j:
  7835 00005AB3 66AB                                    stosw
  7836 00005AB5 0FB616                                  movzx   edx, byte [esi]
  7837 00005AB8 01D0                                    add     eax, edx
  7838 00005ABA 46                                      inc     esi
  7839 00005ABB E2F6                                    loop    .band_index_lop_j
  7840 00005ABD 83C10A                                  add     ecx, 10
  7841 00005AC0 F366AB                                  rep stosw
  7842 00005AC3 4B                                      dec     ebx
  7843 00005AC4 75E6                                    jnz     short .band_index_lop_i
  7844 00005AC6 C3                                      retn
  7845                                  
  7846                                  
  7847                                  ; =============== S U B R O U T I N E =======================================
  7848                                  
  7849                                  
  7850                                  mp3_any_init_lsf_sf_expand:
  7851 00005AC7 BE[3A8E0000]                            mov     esi, mp3_lsf_sf_expand_init_table
  7852 00005ACC BF[78150500]                            mov     edi, mp3_lsf_sf_expand_exploded_table
  7853 00005AD1 31D2                                    xor     edx, edx        ; curr.index
  7854 00005AD3 31DB                                    xor     ebx, ebx        ; curr.base
  7855                                  
  7856                                  .lop:
  7857 00005AD5 663B5606                                cmp     dx, [esi+6]     ; nextbase
  7858 00005AD9 7207                                    jb      short .inrange
  7859 00005ADB 668B5E06                                mov     bx, [esi+6]
  7860 00005ADF 83C608                                  add     esi, 8          ; next entry
  7861                                  
  7862                                  .inrange:
  7863 00005AE2 89D0                                    mov     eax, edx
  7864 00005AE4 29D8                                    sub     eax, ebx
  7865 00005AE6 8A0E                                    mov     cl, [esi]
  7866 00005AE8 D3E8                                    shr     eax, cl         ; div2
  7867 00005AEA F67603                                  div     byte [esi+3] ; mod3 ; [2]=slen[3]
  7868 00005AED 886703                                  mov     [edi+3], ah
  7869 00005AF0 B400                                    mov     ah, 0           ; eax=div.result
  7870 00005AF2 F67602                                  div     byte [esi+2] ; mod2 ; [2]=slen[2]
  7871 00005AF5 886702                                  mov     [edi+2], ah     ; remainder
  7872 00005AF8 B400                                    mov     ah, 0
  7873 00005AFA F67601                                  div     byte [esi+1] ; mod1 ; [1]=slen[1]
  7874 00005AFD 668907                                  mov     [edi], ax       ; [0]=slen[0]
  7875 00005B00 668B4604                                mov     ax, [esi+4]     ; [4]=tindex2
  7876 00005B04 66894704                                mov     [edi+4], ax     ; [5]=force_preflag
  7877 00005B08 83C708                                  add     edi, 8
  7878 00005B0B 42                                      inc     edx             ; curr.index ; next
  7879 00005B0C 81FA00040000                            cmp     edx, 1024       ; 512+512
  7880 00005B12 72C1                                    jb      short .lop
  7881 00005B14 C3                                      retn
  7882                                  
  7883                                  
  7884                                  ; =============== S U B R O U T I N E =======================================
  7885                                  
  7886                                  
  7887                                  mp3_any_init_huff_tables:
  7888 00005B15 BD[D4900000]                            mov     ebp, huff_tree_list_data
  7889 00005B1A BE[549B0000]                            mov     esi, huff_tree_list_numbits
  7890 00005B1F BA01000000                              mov     edx, 1          ; idx (table 01h..11h)
  7891                                  
  7892                                  .huffman_table_lop:
  7893 00005B24 31C0                                    xor     eax, eax
  7894 00005B26 BF[A43F0500]                            mov     edi, mp3_huff_tmp_bits
  7895 00005B2B B940000000                              mov     ecx, 40h        ; 100h/4 ; 100h x 8bit
  7896 00005B30 F3AB                                    rep stosd
  7897 00005B32 BF[A4400500]                            mov     edi, mp3_huff_tmp_codes
  7898 00005B37 B980000000                              mov     ecx, 80h        ; 100h/2 ; 100h x 16bit
  7899 00005B3C F3AB                                    rep stosd
  7900 00005B3E 31DB                                    xor     ebx, ebx
  7901                                  
  7902                                  .huff_entry_lop:
  7903 00005B40 0FB67D00                                movzx   edi, byte [ebp+0]
  7904 00005B44 45                                      inc     ebp             ; dst=data
  7905 00005B45 AC                                      lodsb                   ; numbits
  7906 00005B46 8887[A43F0500]                          mov     [mp3_huff_tmp_bits+edi], al
  7907 00005B4C B120                                    mov     cl, 32
  7908 00005B4E 28C1                                    sub     cl, al          ; 32-numbits
  7909 00005B50 D3EB                                    shr     ebx, cl
  7910 00005B52 66899C3F[A4400500]                      mov     word [mp3_huff_tmp_codes+edi*2], bx
  7911 00005B5A 43                                      inc     ebx             ; next.code
  7912 00005B5B D3E3                                    shl     ebx, cl         ; shift back to MSBs
  7913 00005B5D 75E1                                    jnz     short .huff_entry_lop
  7914 00005B5F 60                                      pusha
  7915 00005B60 B800010000                              mov     eax, 100h       ; nb_codes
  7916 00005B65 BB[A43F0500]                            mov     ebx, mp3_huff_tmp_bits ; bits
  7917 00005B6A BE[A4400500]                            mov     esi, mp3_huff_tmp_codes ; codes
  7918 00005B6F E837020000                              call    mp3_build_huff_table_root ; make table
  7919 00005B74 61                                      popa
  7920 00005B75 42                                      inc     edx             ; idx
  7921 00005B76 83FA12                                  cmp     edx, 12h
  7922 00005B79 75A9                                    jnz     short .huffman_table_lop ; next table
  7923 00005B7B C3                                      retn
  7924                                  
  7925                                  
  7926                                  ; =============== S U B R O U T I N E =======================================
  7927                                  
  7928                                  
  7929                                  mp3_integer_init_is_stereo_lsf:
  7930 00005B7C 31FF                                    xor     edi, edi
  7931                                  
  7932                                  .lsf_lop:
  7933 00005B7E 89FE                                    mov     esi, edi
  7934 00005B80 83E63F                                  and     esi, 3Fh
  7935 00005B83 46                                      inc     esi
  7936 00005B84 D1EE                                    shr     esi, 1
  7937 00005B86 F7C740000000                            test    edi, 40h
  7938 00005B8C 7402                                    jz      short .lsf_no_shift
  7939 00005B8E D1E6                                    shl     esi, 1
  7940                                  
  7941                                  .lsf_no_shift:
  7942 00005B90 BA00000040                              mov     edx, 40000000h  ; aka mul 1.000
  7943 00005B95 83C604                                  add     esi, 4
  7944 00005B98 F7C780000000                            test    edi, 80h        ; 2*40h
  7945 00005B9E 7408                                    jz      short .no_ms_stereo
  7946 00005BA0 BA9A79825A                              mov     edx, 5A82799Ah  ; 2D413CCDh*2 ; aka mul 1.414
  7947 00005BA5 83EE02                                  sub     esi, 2
  7948                                  
  7949                                  .no_ms_stereo:
  7950 00005BA8 89F1                                    mov     ecx, esi
  7951 00005BAA C1E902                                  shr     ecx, 2          ; msbs
  7952 00005BAD 83E603                                  and     esi, 3          ; lsbs
  7953 00005BB0 8B04B5[949A0000]                        mov     eax, [mp3_is_table_lsf_src+esi*4]
  7954 00005BB7 D3E8                                    shr     eax, cl
  7955 00005BB9 F7C701000000                            test    edi, 1
  7956 00005BBF 7501                                    jnz     short .lsf_no_swap
  7957 00005BC1 92                                      xchg    eax, edx
  7958                                  
  7959                                  .lsf_no_swap:
  7960 00005BC2 8904FD[78FD0400]                        mov     [mp3_is_table_lsf+edi*8], eax
  7961 00005BC9 8914FD[7CFD0400]                        mov     [(mp3_is_table_lsf+4)+edi*8], edx
  7962 00005BD0 47                                      inc     edi
  7963 00005BD1 81FF00010000                            cmp     edi, 100h
  7964 00005BD7 72A5                                    jb      short .lsf_lop
  7965 00005BD9 C3                                      retn
  7966                                  
  7967                                  
  7968                                  ; =============== S U B R O U T I N E =======================================
  7969                                  
  7970                                  
  7971                                  mp3_integer_init_mdct_windows:
  7972 00005BDA BF[F8F80400]                            mov     edi, mp3_mdct_win
  7973 00005BDF BE[1C980000]                            mov     esi, mp3_mdct_win_src
  7974 00005BE4 B990000000                              mov     ecx, 144        ; 36*4
  7975 00005BE9 F3A5                                    rep movsd
  7976 00005BEB BE[F8F80400]                            mov     esi, mp3_mdct_win
  7977 00005BF0 BF[38FB0400]                            mov     edi, (mp3_mdct_win+240h)
  7978 00005BF5 B948000000                              mov     ecx, 72         ; 4*36/2 ; that is, 4*36 entry pairs
  7979                                  
  7980                                  .mdct_lop_dupe:                       
  7981 00005BFA A5                                      movsd                   ; copy normal, [4..7][even] = +[0..3][even
  7982 00005BFB AD                                      lodsd
  7983 00005BFC F7D8                                    neg     eax             ; copy negated, [4..7][odd] = -[0..3][odd]
  7984 00005BFE AB                                      stosd
  7985 00005BFF E2F9                                    loop    .mdct_lop_dupe
  7986 00005C01 C3                                      retn
  7987                                  
  7988                                  
  7989                                  ; =============== S U B R O U T I N E =======================================
  7990                                  
  7991                                  
  7992                                  mp3_integer_init_table_4_3:
  7993 00005C02 803D[188C0000]00                        cmp	byte [option_fast], 0
  7994 00005C09 B048                                    mov	al, 72          ; 100-6-VFRAC_BITS_slow
  7995 00005C0B 7402                                    jz	short .this_vfrac
  7996 00005C0D B04C                                    mov	al, 76          ; 100-6-VFRAC_BITS_fast
  7997                                  
  7998                                  .this_vfrac:
  7999 00005C0F A2[CC090100]                            mov     [mp3_curr_vfrac_bits], al
  8000 00005C14 31FF                                    xor     edi, edi
  8001                                  
  8002                                  .table_4_3_lop:
  8003 00005C16 57                                      push    edi             ; for i=1 to TABLE_4_3_SIZE-1
  8004 00005C17 89F8                                    mov     eax, edi
  8005 00005C19 C1E802                                  shr     eax, 2
  8006 00005C1C F7E0                                    mul     eax
  8007 00005C1E F7E0                                    mul     eax
  8008 00005C20 31DB                                    xor     ebx, ebx
  8009 00005C22 E8A2000000                              call    cbrt96
  8010 00005C27 020D[CC090100]                          add     cl, [mp3_curr_vfrac_bits]
  8011 00005C2D 5F                                      pop     edi
  8012                                  
  8013                                  .inner_lop:
  8014 00005C2E 89F8                                    mov     eax, edi
  8015 00005C30 83E003                                  and     eax, 3
  8016 00005C33 8B0485[A49A0000]                        mov     eax, [mp3_pow2_quarters+eax*4]
  8017 00005C3A F7E3                                    mul     ebx
  8018 00005C3C 88CD                                    mov     ch, cl
  8019 00005C3E 09D2                                    or      edx, edx
  8020 00005C40 7904                                    jns     short .this
  8021 00005C42 D1EA                                    shr     edx, 1
  8022 00005C44 FECD                                    dec     ch
  8023                                  
  8024                                  .this:
  8025 00005C46 8914BD[08700200]                        mov     [mp3_table_4_3_value+edi*4], edx
  8026 00005C4D 88AF[CCEF0100]                          mov     [mp3_table_4_3_exp+edi], ch
  8027 00005C53 47                                      inc     edi
  8028 00005C54 F7C703000000                            test    edi, 3
  8029 00005C5A 75D2                                    jnz     short .inner_lop
  8030 00005C5C 81FF3C800000                            cmp     edi, 803Ch
  8031 00005C62 72B2                                    jb      short .table_4_3_lop
  8032 00005C64 C3                                      retn
  8033                                  
  8034                                  
  8035                                  ; =============== S U B R O U T I N E =======================================
  8036                                  
  8037                                  
  8038                                  mp3_integer_init_exponent:
  8039 00005C65 BF[F8780400]                            mov     edi, mp3_expval_table
  8040 00005C6A 31D2                                    xor     edx, edx
  8041                                  
  8042                                  .exponent_lop:
  8043 00005C6C 89D0                                    mov     eax, edx        ; val=i
  8044 00005C6E 89D3                                    mov     ebx, edx
  8045 00005C70 89D1                                    mov     ecx, edx
  8046 00005C72 C1EB04                                  shr     ebx, 4
  8047 00005C75 C1E906                                  shr     ecx, 6          ; 4+2
  8048 00005C78 83E00F                                  and     eax, 0Fh        ; val=i AND 0Fh
  8049 00005C7B 83E303                                  and     ebx, 3
  8050 00005C7E 8D1C83                                  lea     ebx, [ebx+eax*4] ; (0..0Fh)*4+(0..3)
  8051 00005C81 8B049D[08700200]                        mov     eax, [mp3_table_4_3_value+ebx*4]
  8052 00005C88 09C0                                    or      eax, eax
  8053 00005C8A 741A                                    jz      short .this
  8054 00005C8C 2A8B[CCEF0100]                          sub     cl, [mp3_table_4_3_exp+ebx]
  8055 00005C92 770D                                    ja      short .left_shift
  8056 00005C94 F6D9                                    neg     cl
  8057 00005C96 D3E8                                    shr     eax, cl
  8058 00005C98 80F91F                                  cmp     cl, 1Fh
  8059 00005C9B 7609                                    jbe     short .this
  8060 00005C9D 31C0                                    xor     eax, eax
  8061 00005C9F EB05                                    jmp     short .this
  8062                                  
  8063                                  .left_shift:
  8064 00005CA1 B8FFFFFF7F                              mov     eax, 7FFFFFFFh
  8065                                  
  8066                                  .this:
  8067 00005CA6 AB                                      stosd
  8068 00005CA7 42                                      inc     edx
  8069 00005CA8 81FA00200000                            cmp     edx, 2000h
  8070 00005CAE 72BC                                    jb      short .exponent_lop
  8071 00005CB0 BE[F8780400]                            mov     esi, mp3_expval_table
  8072 00005CB5 BF[F8700400]                            mov     edi, mp3_exp_table
  8073 00005CBA B900020000                              mov     ecx, 200h
  8074                                  
  8075                                  .exponent_dupe_lop:
  8076 00005CBF 8B4604                                  mov     eax, [esi+4]
  8077 00005CC2 AB                                      stosd
  8078 00005CC3 83C640                                  add     esi, 40h
  8079 00005CC6 E2F7                                    loop    .exponent_dupe_lop
  8080 00005CC8 C3                                      retn
  8081                                  
  8082                                  
  8083                                  ; =============== S U B R O U T I N E =======================================
  8084                                  
  8085                                  
  8086                                  cbrt96:
  8087 00005CC9 83EC18                                  sub     esp, 18h        ; cube root, val^(1/3), from https://gist.github.com/anonymous/729557
  8088                                                                          ; in:  ebx:edx:eax = unsigned 96bit input (integer)
  8089                                                                          ; out: ebx         = unsigned 32bit result (with fractional bits)
  8090                                                                          ; out: cl          = number of fractional bits
  8091 00005CCC 890424                                  mov     [esp], eax
  8092 00005CCF 89542404                                mov     [esp+4], edx
  8093 00005CD3 895C2408                                mov     [esp+8], ebx
  8094 00005CD7 C744240C00000000                        mov     dword [esp+0Ch], 0
  8095 00005CDF C744241000000000                        mov     dword [esp+10h], 0
  8096 00005CE7 C744241400000000                        mov     dword [esp+14h], 0
  8097 00005CEF 31DB                                    xor     ebx, ebx        ; result.value
  8098 00005CF1 B100                                    mov     cl, 0           ; result.fraction
  8099 00005CF3 09D0                                    or      eax, edx        ; skip if zero
  8100 00005CF5 742F                                    jz      short .pre_shift_done
  8101                                  
  8102                                  .pre_shift_lop:
  8103 00005CF7 F7442408000000E0                        test    dword [esp+8], 0E0000000h
  8104 00005CFF 7525                                    jnz     short .pre_shift_done
  8105 00005D01 D12424                                  shl     dword [esp], 1
  8106 00005D04 D1542404                                rcl     dword [esp+4], 1
  8107 00005D08 D1542408                                rcl     dword [esp+8], 1
  8108 00005D0C D12424                                  shl     dword [esp], 1
  8109 00005D0F D1542404                                rcl     dword [esp+4], 1
  8110 00005D13 D1542408                                rcl     dword [esp+8], 1
  8111 00005D17 D12424                                  shl     dword [esp], 1
  8112 00005D1A D1542404                                rcl     dword [esp+4], 1
  8113 00005D1E D1542408                                rcl     dword [esp+8], 1
  8114 00005D22 FEC1                                    inc     cl
  8115 00005D24 EBD1                                    jmp     short .pre_shift_lop
  8116                                  
  8117                                  .pre_shift_done:
  8118 00005D26 B520                                    mov     ch, 20h         ; loopcount
  8119                                  
  8120                                  .lop:
  8121 00005D28 01DB                                    add     ebx, ebx        ; result*2
  8122 00005D2A 89D8                                    mov     eax, ebx        ; y
  8123 00005D2C 43                                      inc     ebx             ; result+1
  8124 00005D2D F7E3                                    mul     ebx             ; y*(y+1)
  8125 00005D2F 89C6                                    mov     esi, eax
  8126 00005D31 89D7                                    mov     edi, edx
  8127 00005D33 31ED                                    xor     ebp, ebp
  8128 00005D35 F9                                      stc
  8129 00005D36 11F6                                    adc     esi, esi        ; y*(y+1)*2+1
  8130 00005D38 11FF                                    adc     edi, edi
  8131 00005D3A 11ED                                    adc     ebp, ebp
  8132 00005D3C 01C6                                    add     esi, eax
  8133 00005D3E 11D7                                    adc     edi, edx        ; y*(y+1)*3+1
  8134 00005D40 83D500                                  adc     ebp, 0
  8135 00005D43 D12424                                  shl     dword [esp], 1
  8136 00005D46 D1542404                                rcl     dword [esp+4], 1
  8137 00005D4A D1542408                                rcl     dword [esp+8], 1 ; shl 3
  8138 00005D4E D154240C                                rcl     dword [esp+0Ch], 1
  8139 00005D52 D1542410                                rcl     dword [esp+10h], 1
  8140 00005D56 D1542414                                rcl     dword [esp+14h], 1
  8141 00005D5A D12424                                  shl     dword [esp], 1
  8142 00005D5D D1542404                                rcl     dword [esp+4], 1
  8143 00005D61 D1542408                                rcl     dword [esp+8], 1
  8144 00005D65 D154240C                                rcl     dword [esp+0Ch], 1
  8145 00005D69 D1542410                                rcl     dword [esp+10h], 1
  8146 00005D6D D1542414                                rcl     dword [esp+14h], 1
  8147 00005D71 D12424                                  shl     dword [esp], 1
  8148 00005D74 D1542404                                rcl     dword [esp+4], 1
  8149 00005D78 D1542408                                rcl     dword [esp+8], 1
  8150 00005D7C D154240C                                rcl     dword [esp+0Ch], 1
  8151 00005D80 D1542410                                rcl     dword [esp+10h], 1
  8152 00005D84 D1542414                                rcl     dword [esp+14h], 1
  8153 00005D88 2974240C                                sub     [esp+0Ch], esi
  8154 00005D8C 197C2410                                sbb     [esp+10h], edi  ; sub/compare
  8155 00005D90 196C2414                                sbb     [esp+14h], ebp
  8156 00005D94 730D                                    jnb     short .next
  8157 00005D96 4B                                      dec     ebx
  8158 00005D97 0174240C                                add     [esp+0Ch], esi
  8159 00005D9B 117C2410                                adc     [esp+10h], edi  ; undo
  8160 00005D9F 116C2414                                adc     [esp+14h], ebp
  8161                                  
  8162                                  .next:
  8163 00005DA3 FECD                                    dec     ch
  8164 00005DA5 7581                                    jnz     short .lop
  8165 00005DA7 83C418                                  add     esp, 18h
  8166                                  mp3_init_log_constants:
  8167 00005DAA C3                                      retn
  8168                                  
  8169                                  ;mp3_init_log_constants:
  8170                                  ;                retn
  8171                                  
  8172                                  ; =============== S U B R O U T I N E =======================================
  8173                                  
  8174                                  
  8175                                  mp3_build_huff_table_root:
  8176 00005DAB A3[A8420500]                            mov     [_@@nb_codes], eax ; "init_vlc"
  8177 00005DB0 C705[AC420500]0000-                     mov     dword [_@@prefix_numbits], 0
  8177 00005DB8 0000               
  8178 00005DBA C705[B0420500]0000-                     mov     dword [_@@prefix_pattern], 0
  8178 00005DC2 0000               
  8179 00005DC4 60                                      pusha
  8180 00005DC5 89C1                                    mov     ecx, eax
  8181 00005DC7 31C0                                    xor     eax, eax
  8182                                  
  8183                                  .prescan_lop:
  8184 00005DC9 3A03                                    cmp     al, [ebx]
  8185 00005DCB 7702                                    ja      short .prescan_next
  8186 00005DCD 8A03                                    mov     al, [ebx]
  8187                                  
  8188                                  .prescan_next:
  8189 00005DCF 43                                      inc     ebx
  8190 00005DD0 E2F7                                    loop    .prescan_lop
  8191 00005DD2 3C09                                    cmp     al, 9           ; CHILD_BITS
  8192 00005DD4 7202                                    jb      short .prescan_this_limit
  8193 00005DD6 B009                                    mov     al, 9
  8194                                  
  8195                                  .prescan_this_limit:
  8196 00005DD8 A3[A4420500]                            mov     [_@@table_nb_bits], eax
  8197 00005DDD 61                                      popa
  8198                                  
  8199                                  mp3_build_huff_table_recursive_child:
  8200 00005DDE 8B0D[A4420500]                          mov     ecx, [_@@table_nb_bits]
  8201 00005DE4 B801000000                              mov     eax, 1
  8202 00005DE9 D3E0                                    shl     eax, cl
  8203 00005DEB A3[B4420500]                            mov     [_@@curr_table_size], eax
  8204 00005DF0 48                                      dec     eax
  8205 00005DF1 A3[B8420500]                            mov     [_@@curr_table_mask], eax
  8206 00005DF6 60                                      pusha
  8207 00005DF7 8B1D[B89A0000]                          mov     ebx, [mp3_huff_num_entries]
  8208 00005DFD 891D[BC420500]                          mov     [_@@curr_table_index], ebx
  8209 00005E03 031D[B4420500]                          add     ebx, [_@@curr_table_size]
  8210 00005E09 891D[B89A0000]                          mov     [mp3_huff_num_entries], ebx
  8211 00005E0F 813D[B89A0000]002E-                     cmp     dword [mp3_huff_num_entries], 11776 ; HUFF_TREE_SIZE/4
  8211 00005E17 0000               
  8212 00005E19 0F8781AFFFFF                            ja      fatalunexpected
  8213 00005E1F 61                                      popa
  8214 00005E20 BF[8C350100]                            mov     edi, huff_tree_buf
  8215 00005E25 A1[BC420500]                            mov     eax, [_@@curr_table_index]
  8216 00005E2A 66890497                                mov     [edi+edx*4], ax
  8217 00005E2E A1[A4420500]                            mov     eax, [_@@table_nb_bits]
  8218 00005E33 F7D8                                    neg     eax
  8219 00005E35 6689449702                              mov     [edi+edx*4+2], ax
  8220 00005E3A BF[8C350100]                            mov     edi, huff_tree_buf
  8221 00005E3F 8B15[BC420500]                          mov     edx, [_@@curr_table_index]
  8222 00005E45 8B0D[B4420500]                          mov     ecx, [_@@curr_table_size]
  8223                                  
  8224                                  .clear_table_lop:
  8225 00005E4B 66C70497FFFF                            mov     word [edi+edx*4], 0FFFFh
  8226 00005E51 66C74497020000                          mov     word [edi+edx*4+2], 0
  8227 00005E58 42                                      inc     edx
  8228 00005E59 E2F0                                    loop    .clear_table_lop
  8229 00005E5B 53                                      push    ebx
  8230 00005E5C 56                                      push    esi
  8231 00005E5D 31D2                                    xor     edx, edx
  8232                                  
  8233                                  .make_table_lop:
  8234 00005E5F 0FB60B                                  movzx   ecx, byte [ebx]
  8235 00005E62 0FB706                                  movzx   eax, word [esi]
  8236 00005E65 2B0D[AC420500]                          sub     ecx, [_@@prefix_numbits]
  8237 00005E6B 7E74                                    jle     short .make_table_lop_next
  8238 00005E6D D3E8                                    shr     eax, cl
  8239 00005E6F 3B05[B0420500]                          cmp     eax, [_@@prefix_pattern]
  8240 00005E75 756A                                    jnz     short .make_table_lop_next
  8241 00005E77 BF[8C350100]                            mov     edi, huff_tree_buf
  8242 00005E7C 0FB706                                  movzx   eax, word [esi]
  8243 00005E7F 2B0D[A4420500]                          sub     ecx, [_@@table_nb_bits]
  8244 00005E85 773E                                    ja      short .create_child_table
  8245 00005E87 F7D9                                    neg     ecx
  8246 00005E89 D3E0                                    shl     eax, cl
  8247 00005E8B 2305[B8420500]                          and     eax, [_@@curr_table_mask]
  8248 00005E91 0305[BC420500]                          add     eax, [_@@curr_table_index]
  8249 00005E97 8D3C87                                  lea     edi, [edi+eax*4]
  8250 00005E9A B801000000                              mov     eax, 1
  8251 00005E9F D3E0                                    shl     eax, cl
  8252 00005EA1 89C1                                    mov     ecx, eax
  8253 00005EA3 0FB603                                  movzx   eax, byte [ebx]
  8254 00005EA6 2B05[AC420500]                          sub     eax, [_@@prefix_numbits]
  8255                                  
  8256                                  .make_rept_lop:
  8257 00005EAC 66837F0200                              cmp     word [edi+2], 0
  8258 00005EB1 0F85E9AEFFFF                            jnz     fatalunexpected
  8259 00005EB7 668917                                  mov     [edi], dx
  8260 00005EBA 66894702                                mov     [edi+2], ax
  8261 00005EBE 83C704                                  add     edi, 4
  8262 00005EC1 E2E9                                    loop    .make_rept_lop
  8263 00005EC3 EB1C                                    jmp     short .make_table_lop_next
  8264                                  
  8265                                  .create_child_table:
  8266 00005EC5 D3E8                                    shr     eax, cl
  8267 00005EC7 2305[B8420500]                          and     eax, [_@@curr_table_mask]
  8268 00005ECD 0305[BC420500]                          add     eax, [_@@curr_table_index]
  8269 00005ED3 F7D9                                    neg     ecx
  8270 00005ED5 66394C8702                              cmp     [edi+eax*4+2], cx
  8271 00005EDA 7C05                                    jl      short .make_table_lop_next
  8272 00005EDC 66894C8702                              mov     [edi+eax*4+2], cx
  8273                                  
  8274                                  .make_table_lop_next:
  8275 00005EE1 83C602                                  add     esi, 2
  8276 00005EE4 43                                      inc     ebx
  8277 00005EE5 42                                      inc     edx
  8278 00005EE6 3B15[A8420500]                          cmp     edx, [_@@nb_codes]
  8279 00005EEC 0F826DFFFFFF                            jb      .make_table_lop
  8280 00005EF2 5E                                      pop     esi
  8281 00005EF3 5B                                      pop     ebx
  8282 00005EF4 8B0D[B4420500]                          mov     ecx, [_@@curr_table_size]
  8283 00005EFA 8B15[BC420500]                          mov     edx, [_@@curr_table_index]
  8284                                  
  8285                                  .make_child_tables_lop:
  8286 00005F00 BF[8C350100]                            mov     edi, huff_tree_buf
  8287 00005F05 0FBF449702                              movsx   eax, word [edi+edx*4+2]
  8288 00005F0A 83F800                                  cmp     eax, 0
  8289 00005F0D 796D                                    jns     short .make_child_tables_lop_next
  8290 00005F0F F7D8                                    neg     eax
  8291 00005F11 3B05[A4420500]                          cmp     eax, [_@@table_nb_bits]
  8292 00005F17 7605                                    jbe     short .make_child_tables_this
  8293 00005F19 A1[A4420500]                            mov     eax, [_@@table_nb_bits]
  8294                                  
  8295                                  .make_child_tables_this:
  8296 00005F1E 51                                      push	ecx
  8297 00005F1F 52                                      push	edx
  8298 00005F20 FF35[BC420500]                          push	dword [_@@curr_table_index]
  8299 00005F26 FF35[A4420500]                          push	dword [_@@table_nb_bits]
  8300 00005F2C FF35[AC420500]                          push	dword [_@@prefix_numbits]
  8301 00005F32 FF35[B0420500]                          push	dword [_@@prefix_pattern]
  8302 00005F38 8B0D[A4420500]                          mov	ecx, [_@@table_nb_bits]
  8303 00005F3E A3[A4420500]                            mov	[_@@table_nb_bits], eax
  8304 00005F43 010D[AC420500]                          add	[_@@prefix_numbits], ecx
  8305 00005F49 D325[B0420500]                          shl	dword [_@@prefix_pattern], cl
  8306 00005F4F 89D0                                    mov	eax, edx
  8307 00005F51 2B05[BC420500]                          sub	eax, [_@@curr_table_index]
  8308 00005F57 0905[B0420500]                          or	[_@@prefix_pattern], eax
  8309 00005F5D E87CFEFFFF                              call	mp3_build_huff_table_recursive_child
  8310 00005F62 8F05[B0420500]                          pop	dword [_@@prefix_pattern]
  8311 00005F68 8F05[AC420500]                          pop	dword [_@@prefix_numbits]
  8312 00005F6E 8F05[A4420500]                          pop	dword [_@@table_nb_bits]
  8313 00005F74 8F05[BC420500]                          pop	dword [_@@curr_table_index]
  8314 00005F7A 5A                                      pop	edx
  8315 00005F7B 59                                      pop	ecx
  8316                                  
  8317                                  .make_child_tables_lop_next:
  8318 00005F7C 42                                      inc	edx
  8319 00005F7D E281                                    loop	.make_child_tables_lop
  8320 00005F7F C3                                      retn
  8321                                  
  8322                                  
  8323                                  ; =============== S U B R O U T I N E =======================================
  8324                                  
  8325                                  
  8326                                  mp3_exclude_id3_and_tag:
  8327 00005F80 8B35[CC420500]                          mov     esi, [stream_pos]
  8328 00005F86 8B0D[D0420500]                          mov     ecx, [bytes_left]
  8329 00005F8C 83F90A                                  cmp     ecx, 10
  8330 00005F8F 7240                                    jb      short .no_id3
  8331 00005F91 8B06                                    mov     eax, [esi]
  8332 00005F93 25FFFFFF00                              and     eax, 0FFFFFFh
  8333                                                  ;cmp    eax, '3DI'     ; "ID3"
  8334                                                  ; 20/10/2024 
  8335 00005F98 3D49443300                              cmp     eax, 'ID3'     ; FASM & NASM syntax
  8336 00005F9D 7532                                    jnz     short .no_id3
  8337 00005F9F 8B4606                                  mov     eax, [esi+6]
  8338 00005FA2 A980808080                              test    eax, 80808080h
  8339 00005FA7 7528                                    jnz     short .no_id3
  8340                                  
  8341                                  .xlat_4x7bit_to_28bit:
  8342 00005FA9 86E0                                    xchg    al, ah
  8343 00005FAB D0E0                                    shl     al, 1
  8344 00005FAD 66D1E0                                  shl     ax, 1
  8345 00005FB0 66C1E802                                shr     ax, 2
  8346 00005FB4 C1C810                                  ror     eax, 16
  8347 00005FB7 86E0                                    xchg    al, ah
  8348 00005FB9 D0E0                                    shl     al, 1
  8349 00005FBB 66D1E0                                  shl     ax, 1
  8350 00005FBE C1E802                                  shr     eax, 2
  8351 00005FC1 83C00A                                  add     eax, 10
  8352 00005FC4 39C1                                    cmp     ecx, eax
  8353 00005FC6 7209                                    jb      short .no_id3
  8354 00005FC8 01C6                                    add     esi, eax
  8355 00005FCA 29C1                                    sub     ecx, eax
  8356 00005FCC A3[4C0A0100]                            mov     [mp3_id3_size], eax
  8357                                  
  8358                                  .no_id3:
  8359 00005FD1 BA80000000                              mov     edx, 80h
  8360 00005FD6 39D1                                    cmp     ecx, edx
  8361 00005FD8 721F                                    jb      short .no_tag_or_ext
  8362 00005FDA 8B440E80                                mov     eax, [esi+ecx-80h]
  8363 00005FDE 25FFFFFF00                              and     eax, 0FFFFFFh
  8364                                                  ;cmp    eax, 'GAT'     ; "TAG"
  8365                                                  ; 20/10/2024
  8366 00005FE3 3D54414700                              cmp     eax, 'TAG'     ; FASM & NASM syntax
  8367 00005FE8 0F8421010000                            jz      .got_tag_size_edx
  8368                                                  ;cmp    eax, 'TXE'
  8369 00005FEE 3D45585400                              cmp     eax, 'EXT'
  8370 00005FF3 0F8416010000                            jz      .got_tag_size_edx
  8371                                  
  8372                                  .no_tag_or_ext:
  8373 00005FF9 BAE3000000                              mov     edx, 0E3h
  8374 00005FFE 39D1                                    cmp     ecx, edx
  8375 00006000 7211                                    jb      short .no_tagplus
  8376                                                  ;cmp    dword [esi+ecx-0E3h], '+GAT' ; "TAG+"
  8377                                                  ; 20/10/2024
  8378 00006002 81BC0E1DFFFFFF5441-                     cmp     dword [esi+ecx-0E3h], 'TAG+'
  8378 0000600B 472B               
  8379 0000600D 0F84FC000000                            jz      .got_tag_size_edx
  8380                                  
  8381                                  .no_tagplus:
  8382 00006013 BA14000000                              mov     edx, 20        ; 10+10
  8383 00006018 39D1                                    cmp     ecx, edx
  8384 0000601A 723C                                    jb      short .no_3di  ; "3DI",04h
  8385 0000601C 817C0EF633444904                        cmp     dword [esi+ecx-10], 4494433h ; 'ID3'+04000000h
  8386 00006024 7532                                    jnz     short .no_3di
  8387 00006026 F6440EFB10                              test    byte [esi+ecx-5], 10h ; bit 4
  8388 0000602B 742B                                    jz      short .no_3di
  8389 0000602D 8B440EFC                                mov     eax, [esi+ecx-4]
  8390 00006031 A980808080                              test    eax, 80808080h
  8391 00006036 7520                                    jnz     short .no_3di
  8392                                  
  8393                                  .@xlat_4x7bit_to_28bit:
  8394 00006038 86E0                                    xchg    al, ah
  8395 0000603A D0E0                                    shl     al, 1
  8396 0000603C 66D1E0                                  shl     ax, 1
  8397 0000603F 66C1E802                                shr     ax, 2
  8398 00006043 C1C810                                  ror     eax, 10h
  8399 00006046 86E0                                    xchg    al, ah
  8400 00006048 D0E0                                    shl     al, 1
  8401 0000604A 66D1E0                                  shl     ax, 1
  8402 0000604D C1E802                                  shr     eax, 2
  8403 00006050 8D5014                                  lea     edx, [eax+20]  ; [eax+10+10] ; hdr+footer siz
  8404 00006053 E9B7000000                              jmp     .got_tag_size_edx
  8405                                  
  8406                                  .no_3di:
  8407                                                  ;cmp    dword [esi+ecx-32], 'TEPA' ; [esi+ecx-32+0]
  8408                                                  ; 20/10/2024
  8409 00006058 817C0EE041504554                        cmp     dword [esi+ecx-32], 'APET'
  8410                                                                         ; check "APETAGEX"
  8411 00006060 7520                                    jnz     short .no_ape
  8412                                                  ;cmp    dword [esi+ecx-28], 'XEGA' ; [esi+ecx-32+4]
  8413 00006062 817C0EE441474558                        cmp     dword [esi+ecx-28], 'AGEX'
  8414 0000606A 7516                                    jnz     short .no_ape
  8415 0000606C 8B540EEC                                mov     edx, [esi+ecx-20] ; [esi+ecx-32+12] ; get size
  8416 00006070 F7440EF400000080                        test    dword [esi+ecx-12], 80000000h ; [esi+ecx-32+20],1 shl 31
  8417 00006078 7403                                    jz      short .no_ape_header
  8418 0000607A 83C220                                  add     edx, 32        ; hdr.size
  8419                                  
  8420                                  .no_ape_header: 
  8421 0000607D E98D000000                              jmp     .got_tag_size_edx
  8422                                  
  8423                                  .no_ape:
  8424 00006082 BA14000000                              mov     edx, 20        ; 11+9
  8425 00006087 39D1                                    cmp     ecx, edx       ; "LYRICSEND" or "LYRICS200"
  8426                                                                         ; (11+N+9 bytes each)
  8427 00006089 7258                                    jb      short .no_lyrics
  8428                                                  ;cmp    dword [esi+ecx-9], 'IRYL'
  8429                                                  ; 20/10/2024
  8430 0000608B 817C0EF74C595249                        cmp     dword [esi+ecx-9], 'LYRI' ; FASM & NASM syntax
  8431 00006093 754E                                    jnz     short .no_lyrics
  8432 00006095 807C0EFB43                              cmp     byte [esi+ecx-5], 'C'
  8433 0000609A 7547                                    jnz     short .no_lyrics
  8434                                                  ;cmp    dword [esi+ecx-4], 'DNES'
  8435 0000609C 817C0EFC53454E44                        cmp     dword [esi+ecx-4], 'SEND'
  8436 000060A4 740C                                    jz      short .lyrics3_v1
  8437                                                  ;cmp    dword [esi+ecx-4], '002S'
  8438 000060A6 817C0EFC53323030                        cmp     dword [esi+ecx-4], 'S200'
  8439 000060AE 7440                                    jz      short .lyrics3_v2
  8440 000060B0 7531                                    jnz     short .no_lyrics
  8441                                  
  8442                                  .lyrics3_v1:
  8443 000060B2 BA14000000                              mov     edx, 20        ; 11+9
  8444                                  
  8445                                  .lyrics3_v1_size_lop:
  8446 000060B7 8D040E                                  lea     eax, [esi+ecx]
  8447 000060BA 29D0                                    sub     eax, edx
  8448                                                  ;cmp    dword [eax], 'IRYL' ; "LYRICSBEGIN"
  8449                                                  ; 20/10/2024
  8450 000060BC 81384C595249                            cmp     dword [eax], 'LYRI'
  8451 000060C2 7512                                    jnz     short .lyrics3_v1_size_next
  8452                                                  ;cmp    dword [eax+4], 'EBSC'
  8453 000060C4 81780443534245                          cmp     dword [eax+4], 'CSBE'
  8454 000060CB 7509                                    jnz     short .lyrics3_v1_size_next
  8455                                                  ;cmp    dword [eax+7], 'NIGE'
  8456 000060CD 8178074547494E                          cmp     dword [eax+7], 'EGIN'
  8457 000060D4 7439                                    jz      short .got_tag_size_edx
  8458                                  
  8459                                  .lyrics3_v1_size_next:
  8460 000060D6 42                                      inc     edx
  8461 000060D7 81FA00140000                            cmp     edx, 5120
  8462 000060DD 7704                                    ja      short .no_lyrics
  8463 000060DF 39CA                                    cmp     edx, ecx
  8464 000060E1 76D4                                    jbe     short .lyrics3_v1_size_lop
  8465                                                  ;jmp     short .no_lyrics
  8466                                  
  8467                                  .no_lyrics:
  8468                                                  ;jmp    short .footer_tag_all_done
  8469                                  		; 22/10/2024
  8470                                  .footer_tag_all_done:
  8471 000060E3 8935[CC420500]                          mov     [stream_pos], esi
  8472 000060E9 890D[D0420500]                          mov     [bytes_left], ecx
  8473 000060EF C3                                      retn
  8474                                  
  8475                                  .lyrics3_v2:
  8476 000060F0 51                                      push    ecx
  8477 000060F1 56                                      push    esi
  8478 000060F2 8D740EF1                                lea     esi, [esi+ecx-15] ; [esi+ecx-6-9]
  8479 000060F6 B906000000                              mov     ecx, 6
  8480 000060FB 31D2                                    xor     edx, edx
  8481                                  
  8482                                  .lyrics3_v2_size_lop:
  8483 000060FD 6BD20A                                  imul    edx, 10
  8484 00006100 0FB606                                  movzx   eax, byte [esi]
  8485 00006103 46                                      inc     esi
  8486 00006104 2C30                                    sub     al, 30h
  8487 00006106 01C2                                    add     edx, eax
  8488 00006108 E2F3                                    loop    .lyrics3_v2_size_lop
  8489 0000610A 5E                                      pop     esi
  8490 0000610B 59                                      pop     ecx
  8491 0000610C 83C20F                                  add     edx, 0Fh       ; 6+9
  8492                                                  ;jmp    short .got_tag_size_edx
  8493                                  
  8494                                  .got_tag_size_edx:
  8495                                  		;;;
  8496                                  		; 22/10/2024
  8497 0000610F 29D1                                    sub    ecx, edx
  8498 00006111 7311                                    jnb    short .cont
  8499                                  		;;;
  8500 00006113 89D0                                    mov     eax, edx
  8501 00006115 E853050000                              call    wr_decimal_eax
  8502 0000611A E822050000                              call    wrcrlf
  8503                                                  ;;;
  8504                                  		;sub    ecx, edx
  8505                                                  ;jb     fatalunexpected
  8506 0000611F E97CACFFFF              		jmp	fatalunexpected
  8507                                  .cont:
  8508                                  		;;;
  8509 00006124 0115[500A0100]                          add     [mp3_tag_size], edx
  8510 0000612A E9A2FEFFFF                              jmp     .no_id3
  8511                                  
  8512                                  
  8513                                  ; =============== S U B R O U T I N E =======================================
  8514                                  
  8515                                  
  8516                                  mp3_detect_free_format_block_size:
  8517 0000612F 833D[C8090100]00                        cmp     dword [mp3_free_format_frame_size], 0
  8518 00006136 0F85A5000000                            jnz     .already_detected
  8519 0000613C 31D2                                    xor     edx, edx
  8520                                  
  8521                                  .find_distance_lop:
  8522 0000613E 3B15[780A0100]                          cmp     edx, [mp3_src_remain]
  8523 00006144 742B                                    jz      short .match_eof
  8524 00006146 8D4204                                  lea     eax, [edx+4]
  8525 00006149 3B05[780A0100]                          cmp     eax, [mp3_src_remain]
  8526 0000614F 771E                                    ja      short .find_distance_failed
  8527 00006151 8B0416                                  mov     eax, [esi+edx]
  8528 00006154 E8F2A0FFFF                              call    bswap_eax
  8529 00006159 3305[78B30000]                          xor     eax, [mp3_hdr_32bit_header]
  8530 0000615F 25000CFEFF                              and     eax, 0FFFE0C00h
  8531 00006164 740B                                    jz      short .match_eof
  8532                                  
  8533                                  .find_distance_next:
  8534 00006166 42                                      inc     edx
  8535 00006167 81FA00100000                            cmp     edx, 1000h
  8536 0000616D 76CF                                    jbe     short .find_distance_lop
  8537                                  
  8538                                  .find_distance_failed:
  8539 0000616F F9                                      stc
  8540 00006170 C3                                      retn
  8541                                  
  8542                                  .match_eof:
  8543 00006171 89D0                                    mov     eax, edx
  8544 00006173 2B05[84B30000]                          sub     eax, [mp3_hdr_flag_padding]
  8545 00006179 83F804                                  cmp     eax, 4
  8546 0000617C 72E8                                    jb      short .find_distance_next
  8547 0000617E A3[C8090100]                            mov     [mp3_free_format_frame_size], eax
  8548 00006183 31DB                                    xor     ebx, ebx
  8549                                  
  8550                                  .confirm_distance_lop:
  8551 00006185 8B041E                                  mov     eax, [esi+ebx]
  8552 00006188 E8BEA0FFFF                              call    bswap_eax
  8553 0000618D C1E80A                                  shr     eax, 10         ; 9+1
  8554 00006190 131D[C8090100]                          adc     ebx, [mp3_free_format_frame_size]
  8555 00006196 3B1D[780A0100]                          cmp     ebx, [mp3_src_remain]
  8556 0000619C 7422                                    jz      short .confirm_distance_match_eof
  8557 0000619E 8D4304                                  lea     eax, [ebx+4]
  8558 000061A1 3B05[780A0100]                          cmp     eax, [mp3_src_remain]
  8559 000061A7 77BD                                    ja      short .find_distance_next
  8560 000061A9 8B041E                                  mov     eax, [esi+ebx]
  8561 000061AC E89AA0FFFF                              call    bswap_eax
  8562 000061B1 3305[78B30000]                          xor     eax, [mp3_hdr_32bit_header]
  8563 000061B7 25000CFEFF                              and     eax, 0FFFE0C00h
  8564 000061BC 75A8                                    jnz     short .find_distance_next
  8565 000061BE EBC5                                    jmp     short .confirm_distance_lop
  8566                                  
  8567                                  .confirm_distance_match_eof:
  8568 000061C0 A1[C8090100]                            mov     eax, [mp3_free_format_frame_size]
  8569 000061C5 C1E003                                  shl     eax, 3
  8570 000061C8 F725[88B30000]                          mul     dword [mp3_sample_rate]
  8571 000061CE 8B0D[880A0100]                          mov     ecx, [mp3_nb_granules]
  8572 000061D4 69C940020000                            imul    ecx, 240h
  8573 000061DA F7F1                                    div     ecx
  8574 000061DC A3[90B30000]                            mov     [mp3_bit_rate], eax
  8575                                  
  8576                                  .already_detected:
  8577 000061E1 F8                                      clc
  8578 000061E2 C3                                      retn
  8579                                  
  8580                                  
  8581                                  ; =============== S U B R O U T I N E =======================================
  8582                                  
  8583                                  
  8584                                  mp3_check_xing_info:
  8585 000061E3 C705[D0090100]0000-                     mov     dword [mp3_xing_id], 0
  8585 000061EB 0000               
  8586 000061ED C705[D8090100]0000-                     mov     dword [mp3_xing_frames], 0
  8586 000061F5 0000               
  8587 000061F7 C705[DC090100]0000-                     mov     dword [mp3_xing_filesize], 0
  8587 000061FF 0000               
  8588 00006201 8B35[6CB30000]                          mov     esi, [mp3_src_data_location]
  8589 00006207 AD                                      lodsd
  8590                                                  ;cmp    eax, 'gniX'
  8591                                  		; 20/10/2024
  8592 00006208 3D58696E67              		cmp	eax, 'Xing'     ; FASM & NASM syntax
  8593 0000620D 7401                                    jz      short .xing
  8594 0000620F C3                                      retn
  8595                                  
  8596                                  .xing:
  8597 00006210 A3[D0090100]                            mov     [mp3_xing_id], eax
  8598 00006215 AD                                      lodsd
  8599 00006216 E830A0FFFF                              call    bswap_eax
  8600 0000621B A3[D4090100]                            mov     [mp3_xing_flags], eax
  8601 00006220 89C2                                    mov     edx, eax
  8602 00006222 F7C201000000                            test    edx, 1
  8603 00006228 740B                                    jz      short .no_xing_frames
  8604 0000622A AD                                      lodsd
  8605 0000622B E81BA0FFFF                              call    bswap_eax
  8606 00006230 A3[D8090100]                            mov     [mp3_xing_frames], eax
  8607                                  
  8608                                  .no_xing_frames:
  8609 00006235 F7C202000000                            test    edx, 2          ; 1 shl 1
  8610 0000623B 740B                                    jz      short .no_xing_filesize
  8611 0000623D AD                                      lodsd
  8612 0000623E E808A0FFFF                              call    bswap_eax
  8613 00006243 A3[DC090100]                            mov     [mp3_xing_filesize], eax
  8614                                  
  8615                                  .no_xing_filesize:
  8616 00006248 F7C204000000                            test    edx, 4          ; 1 shl 2
  8617 0000624E 740C                                    jz      short .no_xing_toc
  8618 00006250 B964000000                              mov     ecx, 100
  8619 00006255 BF[E0090100]                            mov     edi, mp3_xing_toc
  8620 0000625A F3A4                                    rep movsb
  8621                                  
  8622                                  .no_xing_toc:
  8623 0000625C F7C208000000                            test    edx, 8          ; 1 shl 3
  8624 00006262 740B                                    jz      short .no_xing_vbr_scale
  8625 00006264 AD                                      lodsd
  8626 00006265 E8E19FFFFF                              call    bswap_eax
  8627 0000626A A3[440A0100]                            mov     [mp3_xing_vbr_scale], eax
  8628                                  
  8629                                  .no_xing_vbr_scale:
  8630 0000626F C705[90B30000]0000-                     mov	dword [mp3_bit_rate], 0
  8630 00006277 0000               
  8631 00006279 A1[88B30000]                            mov	eax, [mp3_sample_rate]
  8632 0000627E C1E003                                  shl	eax, 3
  8633 00006281 F725[DC090100]                          mul	dword [mp3_xing_filesize]
  8634 00006287 8B0D[D8090100]                          mov	ecx, [mp3_xing_frames]
  8635 0000628D 0FAF0D[880A0100]                        imul	ecx, [mp3_nb_granules]
  8636 00006294 69C940020000                            imul	ecx, 576        ; 18*32
  8637 0000629A 39CA                                    cmp	edx, ecx
  8638 0000629C 7307                                    jnb	short .overflow
  8639 0000629E F7F1                                    div	ecx
  8640 000062A0 A3[90B30000]                            mov	[mp3_bit_rate], eax
  8641                                  
  8642                                  .overflow:
  8643 000062A5 C3                                      retn
  8644                                  
  8645                                  
  8646                                  ; =============== S U B R O U T I N E =======================================
  8647                                  
  8648                                  		; 20/10/2024
  8649                                  mp3_decode_frame:
  8650 000062A6 890D[780A0100]                          mov     [mp3_src_remain], ecx
  8651 000062AC 893D[5C0A0100]                          mov     [mp3_samples_dst], edi
  8652 000062B2 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  8653 000062B9 740E                                    jz      short .no_rdtsc_supported@@@@
  8654 000062BB 0F31                                    rdtsc
  8655 000062BD 2905[DC8D0000]                          sub     [rdtsc_total], eax
  8656 000062C3 1915[E08D0000]                          sbb     [rdtsc_total+4], edx
  8657                                  
  8658                                  .no_rdtsc_supported@@@@:
  8659 000062C9 E8E19FFFFF                              call    mp3_search_get_header
  8660 000062CE 0F8294010000                            jc      .error
  8661 000062D4 A1[70B30000]                            mov     eax, [mp3_src_frame_size]
  8662 000062D9 83F800                                  cmp     eax, 0
  8663 000062DC 0F8E86010000                            jle     .error
  8664 000062E2 3B05[780A0100]                          cmp     eax, [mp3_src_remain]
  8665 000062E8 0F877A010000                            ja      .error
  8666 000062EE 8935[740A0100]                          mov     [mp3_bitstream_start], esi
  8667                                  		; 11/01/2025
  8668                                  		;mov	eax, 32
  8669                                  
  8670                                  .mp3mac_bitstream_set_position:
  8671                                  		; 22/10/2024
  8672                                                  ;mov    esi, [mp3_bitstream_start]
  8673                                                  ;mov    cl, al
  8674                                                  ;shr    eax, 3
  8675                                                  ;and    cl, 7
  8676                                                  ;mov	eax, 4
  8677                                                  ;add    esi, eax
  8678 000062F4 83C604                                  add     esi, 4
  8679 000062F7 E8579FFFFF                              call    mp3_recollect_bits
  8680                                  
  8681                                  .mp3mac_get_n_bits:
  8682                                                  ;mov    eax, ebp        ; mp3_col32
  8683                                                  ;shl    ebp, cl
  8684                                                  ;rol    eax, cl
  8685                                                  ;xor    eax, ebp        ; mp3_col32
  8686                                                  ;sub    ch, cl          ; sub mp3_colNN,num
  8687                                                  ;jns    short .cont
  8688                                                  ;mov    cl, ch          ; mov cl,mp3_colNN
  8689                                                  ;add    ch, 16
  8690                                                  ;rol    ebp, cl         ; rol mp3_col32,cl
  8691                                                  ;mov    bp, [esi]       ; mov mp3_col16,word ptr [esi]
  8692                                                  ;add    esi, 2
  8693                                                  ;ror    bp, 8           ; endianess
  8694                                                  ;ror    ebp, cl         ; ror mp3_col32,cl
  8695                                  
  8696                                  .cont:
  8697 000062FC E8B4A1FFFF                              call	mp3_bitstream_read_header_extra
  8698 00006301 E839A3FFFF                              call	mp3_bitstream_read_granules
  8699 00006306 0F825C010000                            jc	.error
  8700 0000630C E8929FFFFF                              call	mp3_uncollect_bits
  8701 00006311 8935[6CB30000]                          mov	[mp3_src_data_location], esi
  8702 00006317 833D[5C0A0100]00                        cmp	dword [mp3_samples_dst], 0
  8703 0000631E 0F840F010000                            jz	.skip_decoding
  8704 00006324 E8ECA7FFFF                              call	mp3_bitstream_append_to_main_data_pool
  8705 00006329 833D[600A0100]00                        cmp	dword [mp3_samples_output_size], 0
  8706 00006330 0F84FD000000                            jz	.skip_decoding
  8707 00006336 C705[6C0A0100]0000-                     mov	dword [mp3_curr_granule], 0
  8707 0000633E 0000               
  8708 00006340 BB[8C0A0100]                            mov	ebx, mp3_granules
  8709                                  
  8710                                  .body_granule_lop:
  8711 00006345 891D[C0420500]                          mov	[_@@granule_addr], ebx
  8712 0000634B C705[680A0100]0000-                     mov	dword [mp3_curr_channel], 0
  8712 00006353 0000               
  8713                                  
  8714                                  .body_channel_lop:
  8715 00006355 8B4304                                  mov     eax, [ebx+4]    ; [ebx+$mp3gr_part2_3_start]
  8716 00006358 8B35[740A0100]                          mov     esi, [mp3_bitstream_start]
  8717 0000635E 88C1                                    mov     cl, al          ; mp3mac_bitstream_set_position
  8718 00006360 C1E803                                  shr     eax, 3
  8719 00006363 80E107                                  and     cl, 7
  8720 00006366 01C6                                    add     esi, eax
  8721 00006368 E8E69EFFFF                              call    mp3_recollect_bits
  8722 0000636D 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
  8723 0000636F D3E5                                    shl     ebp, cl
  8724 00006371 D3C0                                    rol     eax, cl
  8725 00006373 31E8                                    xor     eax, ebp
  8726 00006375 28CD                                    sub     ch, cl
  8727 00006377 7913                                    jns     short .cont@
  8728 00006379 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  8729 0000637B 80C510                                  add     ch, 16
  8730 0000637E D3C5                                    rol     ebp, cl
  8731 00006380 668B2E                                  mov     bp, [esi]
  8732 00006383 83C602                                  add     esi, 2
  8733 00006386 66C1CD08                                ror     bp, 8
  8734 0000638A D3CD                                    ror     ebp, cl
  8735                                  
  8736                                  .cont@:
  8737 0000638C E81AA8FFFF                              call    mp3_bitstream_read_scalefacs
  8738 00006391 E812AAFFFF                              call    mp3_get_exponents_from_scale_factors
  8739 00006396 E856ABFFFF                              call    mp3_huffman_decode ; reads up to $mp3gr_part2_3_end
  8740 0000639B 0F82C7000000                            jc      .error
  8741                                  
  8742                                  .body_channel_next:
  8743 000063A1 81C340130000                            add	ebx, 4928       ; $mp3gr_entrysiz*2
  8744 000063A7 FF05[680A0100]                          inc	dword [mp3_curr_channel]
  8745 000063AD A1[680A0100]                            mov	eax, [mp3_curr_channel]
  8746 000063B2 3B05[98B30000]                          cmp	eax, [mp3_output_num_channels]
  8747 000063B8 729B                                    jb	short .body_channel_lop
  8748 000063BA 8B1D[C0420500]                          mov	ebx, [_@@granule_addr]
  8749                                  
  8750                                  .mp3mac_push_bitstream:
  8751 000063C0 51                                      push	ecx
  8752 000063C1 55                                      push	ebp
  8753 000063C2 56                                      push	esi
  8754 000063C3 E827B0FFFF                              call	mp3_compute_stereo
  8755 000063C8 C705[680A0100]0000-                     mov	dword [mp3_curr_channel], 0
  8755 000063D0 0000               
  8756                                  
  8757                                  .cast_channel_lop:
  8758 000063D2 E8F0B2FFFF                              call    mp3_reorder_block
  8759 000063D7 E885B3FFFF                              call    mp3_compute_antialias
  8760 000063DC E870BCFFFF                              call    mp3_compute_imdct
  8761 000063E1 81C340130000                            add     ebx, 4928       ; $mp3gr_entrysiz*2
  8762 000063E7 FF05[680A0100]                          inc	dword [mp3_curr_channel]
  8763 000063ED A1[680A0100]                            mov     eax, [mp3_curr_channel]
  8764 000063F2 3B05[98B30000]                          cmp     eax, [mp3_output_num_channels]
  8765 000063F8 72D8                                    jc      short .cast_channel_lop
  8766                                  
  8767                                  .mp3mac_pop_bitstream:
  8768 000063FA 5E                                      pop	esi
  8769 000063FB 5D                                      pop	ebp
  8770 000063FC 59                                      pop	ecx
  8771 000063FD 8B1D[C0420500]                          mov	ebx, [_@@granule_addr]
  8772 00006403 81C3A0090000                            add	ebx, 2464       ; $mp3gr_entrysiz
  8773 00006409 FF05[6C0A0100]                          inc	dword [mp3_curr_granule]
  8774 0000640F A1[6C0A0100]                            mov	eax, [mp3_curr_granule]
  8775 00006414 3B05[880A0100]                          cmp	eax, [mp3_nb_granules]
  8776 0000641A 0F8225FFFFFF                            jc	.body_granule_lop
  8777 00006420 E87E9EFFFF                              call	mp3_uncollect_bits
  8778 00006425 3B35[68B30000]                          cmp	esi, [main_data_pool_wr_ptr]
  8779 0000642B 773B                                    ja	short .error
  8780 0000642D FF15[BCB30000]                          call	dword [mp3_synth_filter_proc] ; synth maths
  8781                                  
  8782                                  .skip_decoding:
  8783 00006433 A1[7C0A0100]                            mov     eax, [mp3_extra_bytes]
  8784 00006438 0105[70B30000]                          add     [mp3_src_frame_size], eax
  8785 0000643E A1[600A0100]                            mov     eax, [mp3_samples_output_size]
  8786 00006443 0105[580A0100]                          add     [mp3_total_output_size], eax
  8787 00006449 FF05[540A0100]                          inc     dword [mp3_num_frames_decoded]
  8788                                  
  8789                                  .timelog_end:                            ; timelog_end macro ttt
  8790 0000644F F605[1C8C0000]10                        test    byte [cpuid_flags], 10h
  8791 00006456 740F                                    jz      short .no_rdtsc_supported
  8792 00006458 0F31                                    rdtsc                   ; read timestamp counter
  8793 0000645A 0105[DC8D0000]                          add     [rdtsc_total], eax
  8794 00006460 1115[E08D0000]                          adc     [rdtsc_total+4], edx
  8795                                  		; 22/10/2024
  8796 00006466 F8                      		clc	
  8797                                  		; 20/10/2024
  8798                                  .no_rdtsc_supported:
  8799                                                  ;clc
  8800 00006467 C3                                      retn
  8801                                  
  8802                                  .error:
  8803 00006468 F605[1C8C0000]10                        test    byte [cpuid_flags], 10h ; timelog_end rdtsc_total
  8804 0000646F 740E                                    jz      short .no_rdtsc_supported@
  8805 00006471 0F31                                    rdtsc
  8806 00006473 0105[DC8D0000]                          add     [rdtsc_total], eax
  8807 00006479 1115[E08D0000]                          adc     [rdtsc_total+4], edx
  8808                                  
  8809                                  		; 20/10/2024
  8810                                  .no_rdtsc_supported@:
  8811 0000647F A1[7C0A0100]                            mov     eax, [mp3_extra_bytes]
  8812 00006484 0105[70B30000]                          add     [mp3_src_frame_size], eax
  8813 0000648A F9                                      stc
  8814 0000648B C3                                      retn
  8815                                  
  8816                                  
  8817                                  ; =============== S U B R O U T I N E =======================================
  8818                                  
  8819                                  
  8820                                  mp3_init:
  8821 0000648C BF[68A30000]                            mov     edi, main_data_pool_start ; = mp3_context_start
  8822                                                  ;mov    ecx, 74916      ; (mp3_context_end-mp3_context_start)/4
  8823 00006491 B984240100                              mov     ecx, (mp3_context_end-mp3_context_start)/4
  8824 00006496 31C0                                    xor     eax, eax        ; ERRIF @@len AND 03h
  8825 00006498 F3AB                                    rep stosd               ; clear context
  8826 0000649A C705[68B30000]-                         mov	dword [main_data_pool_wr_ptr], main_data_pool_start
  8826 000064A0 [68A30000]         
  8827 000064A4 833D[B49A0000]00                        cmp     dword [mp3_initialized], 0
  8828 000064AB 753C                                    jnz     short .already_initialized
  8829 000064AD E8CAF6FFFF                              call    mp3_integer_init_is_stereo_lsf
  8830 000064B2 E823F7FFFF                              call    mp3_integer_init_mdct_windows
  8831 000064B7 E846F7FFFF                              call    mp3_integer_init_table_4_3
  8832 000064BC E8A4F7FFFF                              call    mp3_integer_init_exponent
  8833 000064C1 E8F3F4FFFF                              call    mp3_any_init_synth_window
  8834 000064C6 E8D2F5FFFF                              call    mp3_any_init_band_indices
  8835 000064CB E8F7F5FFFF                              call    mp3_any_init_lsf_sf_expand
  8836 000064D0 E840F6FFFF                              call    mp3_any_init_huff_tables
  8837 000064D5 E8D0F8FFFF                              call    mp3_init_log_constants
  8838 000064DA E8A3F5FFFF                              call    mp3_init_post_collapse
  8839 000064DF C705[B49A0000]0100-                     mov     dword [mp3_initialized], 1
  8839 000064E7 0000               
  8840                                  
  8841                                  .already_initialized:
  8842 000064E9 0FB605[188C0000]                        movzx   eax, byte [option_fast]
  8843 000064F0 C705[A0B30000]0200-                     mov     dword [mp3_bytes_per_sample], 2
  8843 000064F8 0000               
  8844 000064FA D1E0                                    shl     eax, 1
  8845 000064FC 0205[168C0000]                          add     al, [option_8bit]
  8846 00006502 A801                                    test    al, 1
  8847 00006504 740A                                    jz      short .not_8bit
  8848 00006506 C705[A0B30000]0100-                     mov     dword [mp3_bytes_per_sample], 1
  8848 0000650E 0000               
  8849                                  
  8850                                  .not_8bit:
  8851 00006510 6BC003                                  imul    eax, 3
  8852 00006513 0205[178C0000]                          add     al, [option_rate_shift]
  8853 00006519 8B0485[DAA00000]                        mov     eax, [mp3_synth_filter_procs+eax*4]
  8854 00006520 A3[BCB30000]                            mov     [mp3_synth_filter_proc], eax
  8855 00006525 C3                                      retn
  8856                                  
  8857                                  
  8858                                  ; =============== S U B R O U T I N E =======================================
  8859                                  
  8860                                  
  8861                                  mp3_check_1st_frame:
  8862 00006526 E855FAFFFF                              call    mp3_exclude_id3_and_tag
  8863 0000652B 8B35[CC420500]                          mov     esi, [stream_pos]
  8864 00006531 8B0D[D0420500]                          mov     ecx, [bytes_left]
  8865 00006537 31FF                                    xor     edi, edi
  8866 00006539 31ED                                    xor     ebp, ebp
  8867 0000653B E866FDFFFF                              call    mp3_decode_frame
  8868 00006540 0F82E9000000                            jc     .error
  8869 00006546 E898FCFFFF                              call    mp3_check_xing_info
  8870 0000654B BA[38A10000]                            mov     edx, txt_file_size ; "file size: "
  8871 00006550 E8DB000000                              call    wrstr_edx
  8872 00006555 A1[480A0100]                            mov     eax, [mp3_file_size]
  8873 0000655A E807010000                              call    wr_decimal_eax_with_thousands_seperator
  8874 0000655F BA[44A10000]                            mov     edx, txt_id3_size ; ", id3 size: "
  8875 00006564 E8C7000000                              call    wrstr_edx
  8876 00006569 A1[4C0A0100]                            mov     eax, [mp3_id3_size]
  8877 0000656E E8F3000000                              call    wr_decimal_eax_with_thousands_seperator
  8878 00006573 BA[51A10000]                            mov     edx, txt_tag_size ; ", tag size: "
  8879 00006578 E8B3000000                              call    wrstr_edx
  8880 0000657D A1[500A0100]                            mov     eax, [mp3_tag_size]
  8881 00006582 E8DF000000                              call    wr_decimal_eax_with_thousands_seperator
  8882 00006587 E8B5000000                              call    wrcrlf
  8883 0000658C BA[5EA10000]                            mov     edx, txt_input ; "input: "
  8884 00006591 E89A000000                              call    wrstr_edx
  8885 00006596 A1[88B30000]                            mov     eax, [mp3_sample_rate]
  8886 0000659B E8CD000000                              call    wr_decimal_eax
  8887 000065A0 BA[6FA10000]                            mov     edx, txt_hz ; " hz, "
  8888 000065A5 E886000000                              call    wrstr_edx
  8889 000065AA A1[94B30000]                            mov     eax, [mp3_src_num_channels]
  8890 000065AF E8B9000000                              call    wr_decimal_eax
  8891 000065B4 BA[75A10000]                            mov     edx, txt_channels ; " channels, "
  8892 000065B9 E872000000                              call    wrstr_edx
  8893 000065BE A1[90B30000]                            mov     eax, [mp3_bit_rate]
  8894 000065C3 31D2                                    xor     edx, edx
  8895 000065C5 B9E8030000                              mov     ecx, 1000
  8896 000065CA F7F1                                    div     ecx
  8897 000065CC E89C000000                              call    wr_decimal_eax
  8898 000065D1 BA[86A10000]                            mov     edx, txt_kbit_s ; " kbit/s"
  8899 000065D6 E855000000                              call    wrstr_edx
  8900 000065DB E861000000                              call    wrcrlf
  8901 000065E0 BA[66A10000]                            mov     edx, txt_output ; "output: "
  8902 000065E5 E846000000                              call    wrstr_edx
  8903 000065EA A1[9CB30000]                            mov     eax, [mp3_output_sample_rate]
  8904 000065EF E879000000                              call    wr_decimal_eax
  8905 000065F4 BA[6FA10000]                            mov     edx, txt_hz ; " hz, "
  8906 000065F9 E832000000                              call    wrstr_edx
  8907 000065FE A1[98B30000]                            mov     eax, [mp3_output_num_channels]
  8908 00006603 E865000000                              call    wr_decimal_eax
  8909 00006608 BA[75A10000]                            mov     edx, txt_channels ; " channels, "
  8910 0000660D E81E000000                              call    wrstr_edx
  8911 00006612 A1[A0B30000]                            mov     eax, [mp3_bytes_per_sample]
  8912 00006617 C1E003                                  shl     eax, 3
  8913 0000661A E84E000000                              call    wr_decimal_eax
  8914 0000661F BA[81A10000]                            mov     edx, txt_bit ; " bit"
  8915 00006624 E807000000                              call    wrstr_edx
  8916 00006629 E813000000                              call    wrcrlf
  8917 0000662E F8                                      clc
  8918                                  .error:
  8919 0000662F C3                                      retn
  8920                                  
  8921                                  ;.error:
  8922                                                  ;stc
  8923                                                  ;retn
  8924                                  
  8925                                  
  8926                                  ; =============== S U B R O U T I N E =======================================
  8927                                  
  8928                                  ;wrchr:
  8929                                                  ;pusha
  8930                                                  ;mov     [wrchr_buf], al
  8931                                                  ;push    0            ; lpOverlapped
  8932                                                  ;push    diskresult   ; lpNumberOfBytesWritten
  8933                                                  ;push    1            ; nNumberOfBytesToWrite
  8934                                                  ;push    wrchr_buf    ; lpBuffer
  8935                                                  ;push    [std_out]    ; hFile
  8936                                                  ;call    [WriteFile]
  8937                                                  ;popa
  8938                                                  ;retn
  8939                                  
  8940                                  
  8941                                  ; =============== S U B R O U T I N E =======================================
  8942                                  
  8943                                  
  8944                                  wrstr_edx:
  8945 00006630 50                                      push    eax
  8946                                  .lop:
  8947 00006631 8A02                                    mov     al, [edx]
  8948 00006633 42                                      inc     edx
  8949 00006634 3C00                                    cmp     al, 0
  8950 00006636 7407                                    jz      short .done
  8951 00006638 E801040000                              call    wrchr
  8952 0000663D EBF2                                    jmp     short .lop
  8953                                  .done:
  8954 0000663F 58                                      pop     eax
  8955 00006640 C3                                      retn
  8956                                  
  8957                                  ; =============== S U B R O U T I N E =======================================
  8958                                  
  8959                                  
  8960                                  wrcrlf:
  8961 00006641 50                                      push    eax
  8962 00006642 B00D                                    mov     al, 0Dh
  8963 00006644 E8F5030000                              call    wrchr
  8964 00006649 B00A                                    mov     al, 0Ah
  8965 0000664B E8EE030000                              call    wrchr
  8966 00006650 58                                      pop     eax
  8967 00006651 C3                                      retn
  8968                                  
  8969                                  ; =============== S U B R O U T I N E =======================================
  8970                                  
  8971                                  
  8972                                  wrspc:
  8973 00006652 50                                      push    eax
  8974 00006653 B020                                    mov     al, 20h
  8975 00006655 E8E4030000                              call    wrchr
  8976 0000665A 58                                      pop     eax
  8977 0000665B C3                                      retn
  8978                                  
  8979                                  ; =============== S U B R O U T I N E =======================================
  8980                                  
  8981                                  
  8982                                  wrcomma:
  8983 0000665C 50                                      push    eax
  8984 0000665D B02C                                    mov     al, ','
  8985 0000665F E8DA030000                              call    wrchr
  8986 00006664 58                                      pop     eax
  8987 00006665 C3                                      retn
  8988                                  
  8989                                  ; =============== S U B R O U T I N E =======================================
  8990                                  
  8991                                  
  8992                                  wr_decimal_eax_with_thousands_seperator:
  8993 00006666 51                                      push    ecx
  8994 00006667 66B90200                                mov     cx, 2
  8995 0000666B EB03                                    jmp     short wr_decimal_eax_inj
  8996                                  
  8997                                  ; =============== S U B R O U T I N E =======================================
  8998                                  
  8999                                  
  9000                                  wr_decimal_eax:
  9001 0000666D 51                                      push    ecx
  9002 0000666E 31C9                                    xor     ecx, ecx
  9003                                  
  9004                                  wr_decimal_eax_inj:
  9005 00006670 50                                      push    eax
  9006 00006671 53                                      push    ebx
  9007 00006672 52                                      push    edx
  9008 00006673 BB00CA9A3B                              mov     ebx, 1000000000 ; nine zeroes (32bit max 4.294.967.296)
  9009                                  
  9010                                  .dezlop:
  9011 00006678 FEC9                                    dec     cl
  9012 0000667A 750C                                    jnz     short .no_thousands
  9013 0000667C B103                                    mov     cl, 3
  9014 0000667E 80FD00                                  cmp     ch, 0
  9015 00006681 7405                                    jz      short .no_thousands
  9016 00006683 E8D4FFFFFF                              call    wrcomma
  9017                                  
  9018                                  .no_thousands:
  9019 00006688 31D2                                    xor     edx, edx
  9020 0000668A F7F3                                    div     ebx
  9021 0000668C 83FB01                                  cmp     ebx, 1
  9022 0000668F 7404                                    jz      short .force_last_zero
  9023 00006691 08C5                                    or      ch, al
  9024 00006693 7407                                    jz      short .skip_lead_zero
  9025                                  
  9026                                  .force_last_zero:
  9027 00006695 0430                                    add     al, 30h
  9028 00006697 E8A2030000                              call    wrchr
  9029                                  
  9030                                  .skip_lead_zero:
  9031 0000669C 52                                      push    edx
  9032 0000669D 89D8                                    mov     eax, ebx
  9033 0000669F BB0A000000                              mov     ebx, 10
  9034 000066A4 31D2                                    xor     edx, edx
  9035 000066A6 F7F3                                    div     ebx
  9036 000066A8 83F800                                  cmp     eax, 0
  9037 000066AB 89C3                                    mov     ebx, eax
  9038 000066AD 58                                      pop     eax
  9039 000066AE 75C8                                    jnz     short .dezlop
  9040 000066B0 5A                                      pop     edx
  9041 000066B1 5B                                      pop     ebx
  9042 000066B2 58                                      pop     eax
  9043 000066B3 59                                      pop     ecx
  9044 000066B4 C3                                      retn
  9045                                  
  9046                                  ; =============== S U B R O U T I N E =======================================
  9047                                  
  9048                                  
  9049                                  wrdigital:
  9050 000066B5 50                                      push    eax
  9051 000066B6 240F                                    and     al, 0Fh
  9052 000066B8 3C09                                    cmp     al, 9
  9053 000066BA 7602                                    jbe     short .this
  9054 000066BC 0407                                    add     al, 7
  9055                                  
  9056                                  .this:
  9057 000066BE 0430                                    add     al, 30h
  9058 000066C0 E879030000                              call    wrchr
  9059 000066C5 58                                      pop     eax
  9060 000066C6 C3                                      retn
  9061                                  
  9062                                  ; =============== S U B R O U T I N E =======================================
  9063                                  
  9064                                  
  9065                                  wrhexal:
  9066 000066C7 C0C804                                  ror     al, 4
  9067 000066CA E8E6FFFFFF                              call    wrdigital
  9068 000066CF C0C804                                  ror     al, 4
  9069 000066D2 EBE1                                    jmp     short wrdigital
  9070                                  
  9071                                  ; =============== S U B R O U T I N E =======================================
  9072                                  
  9073                                  
  9074                                  wrhexax:
  9075 000066D4 66C1C808                                ror     ax, 8
  9076 000066D8 E8EAFFFFFF                              call    wrhexal
  9077 000066DD 66C1C808                                ror     ax, 8
  9078 000066E1 EBE4                                    jmp     short wrhexal
  9079                                  
  9080                                  ; =============== S U B R O U T I N E =======================================
  9081                                  
  9082                                  
  9083                                  wrhexeax:
  9084 000066E3 C1C810                                  ror     eax, 10h
  9085 000066E6 E8E9FFFFFF                              call    wrhexax
  9086 000066EB C1C810                                  ror     eax, 10h
  9087 000066EE EBE4                                    jmp     short wrhexax
  9088                                  
  9089                                  ; =============== S U B R O U T I N E =======================================
  9090                                  
  9091                                  %if 0
  9092                                  
  9093                                  get_commandline:
  9094                                                  call    [GetCommandLineA]
  9095                                                  mov     esi, eax
  9096                                                  mov     edi, cmdline_buf
  9097                                                  mov     ecx, 1024       ; cmdline_max
  9098                                  
  9099                                  .get_cmdline_lop:
  9100                                                  lodsb
  9101                                                  cmp     al, 0
  9102                                                  stosb
  9103                                                  loopne  .get_cmdline_lop
  9104                                                  mov     byte [edi-1], 0
  9105                                                  mov     esi, cmdline_buf
  9106                                                  mov     edi, cmdline_buf
  9107                                                  call    _@@get_item     ; get/skip name of the executable itself
  9108                                  
  9109                                  .get_items_lop:
  9110                                                  call    _@@get_item
  9111                                                  mov     al, [ebx]
  9112                                                  cmp     al, 0
  9113                                                  jz      .done
  9114                                                  cmp     al, '/'
  9115                                                  jz      short .switch
  9116                                                  cmp     al, '-'
  9117                                                  jz      short .switch
  9118                                                  mov     eax, [edi-5]
  9119                                                  or      eax, 20202000h
  9120                                                  ;cmp    eax, 'vaw.'     ; ".wav"
  9121                                                  cmp     eax, '.wav'     ; FASM & NASM syntax
  9122                                                  jnz     short .not_wav_name
  9123                                                  mov     [mp3_dst_fname], ebx
  9124                                                  jmp     short .get_items_lop
  9125                                  
  9126                                  .not_wav_name:
  9127                                                  mov     eax, [edi-5]
  9128                                                  or      eax, 20202000h
  9129                                                  ;cmp    eax, 'mcp.'     ; ".pcm"
  9130                                                  cmp     eax, '.pcm'     ; FASM & NASM syntax
  9131                                                  jnz     short .not_pcm_name
  9132                                                  mov     [mp3_pcm_fname], ebx
  9133                                                  jmp     short .get_items_lop
  9134                                  
  9135                                  .not_pcm_name:
  9136                                                  mov     [mp3_src_fname], ebx
  9137                                                  jmp     short .get_items_lop
  9138                                  
  9139                                  .switch:
  9140                                                  ;cmp	dword [ebx+1], 'onom' ; "mono"
  9141                                                  cmp	dword [ebx+1], 'mono'
  9142                                                  jnz     short .not_switch_mono
  9143                                                  mov	byte [option_mono], 1
  9144                                                  jmp	short .get_items_lop
  9145                                  
  9146                                  .not_switch_mono:
  9147                                                  ;cmp	dword [ebx+1], 'tsaf' ; "fast"
  9148                                                  cmp	dword [ebx+1], 'fast' ; FASM & NASM syntax
  9149                                                  jnz	short .not_fast_option
  9150                                                  mov	byte [option_fast], 1
  9151                                                  jmp	short .get_items_lop
  9152                                  
  9153                                  .not_fast_option:
  9154                                                  ;cmp    dword [ebx+1], 'tib8' ; "8bit"
  9155                                                  cmp     dword [ebx+1], '8bit'
  9156                                                  jnz     short .not_switch_8bit
  9157                                                  mov     [option_8bit], 1
  9158                                                  jmp     .get_items_lop
  9159                                  
  9160                                  .not_switch_8bit:
  9161                                                  ;cmp    dword [ebx+1], 'flah' ; "half"
  9162                                                  cmp     dword [ebx+1], 'half'
  9163                                                  jnz     short .not_switch_half
  9164                                                  mov     [option_rate_shift], 1
  9165                                                  jmp     .get_items_lop
  9166                                  
  9167                                  .not_switch_half:
  9168                                                  ;cmp    dword [ebx+1], 'rauq' ; "quar"
  9169                                                  cmp     dword [ebx+1], 'quar'
  9170                                                  jnz     short .not_switch_quarter
  9171                                                  mov     [option_rate_shift], 2
  9172                                                  jmp     .get_items_lop
  9173                                  
  9174                                  .not_switch_quarter:
  9175                                                  ;cmp    dword [ebx+1], 'tset' ; "test"
  9176                                                  cmp     dword [ebx+1], 'test'
  9177                                                  jnz     short .not_switch_test
  9178                                                  mov     byte [option_test], 1
  9179                                                  jmp     .get_items_lop
  9180                                  
  9181                                  .not_switch_test:
  9182                                                  jmp     short .help
  9183                                  
  9184                                  .done:
  9185                                                  cmp	dword [mp3_src_fname], 0
  9186                                                  jz      short .help
  9187                                                  ;;; Erdogan Tan - 17/10/2024
  9188                                                  mov     edx, txt_ctrlc
  9189                                                  call    wrstr_edx
  9190                                                  ;;;
  9191                                                  mov     edx, txt_file ; "file: "
  9192                                                  call    wrstr_edx
  9193                                                  mov     edx, [mp3_src_fname]
  9194                                                  call    wrstr_edx
  9195                                                  call    wrcrlf
  9196                                                  clc
  9197                                                  retn
  9198                                  
  9199                                  .help:
  9200                                                  ;;; Erdogan Tan - 17/10/2024
  9201                                                  mov     edx, txt_about
  9202                                                  call    wrstr_edx
  9203                                                  ;;;
  9204                                                  mov     edx, txt_help ; "usage: mp3play input.mp3 [output.wav] ["...
  9205                                                  call    wrstr_edx
  9206                                                  stc
  9207                                                  retn
  9208                                  
  9209                                  %endif
  9210                                  
  9211                                  ; =============== S U B R O U T I N E =======================================
  9212                                  
  9213                                  %if 0
  9214                                  
  9215                                  _@@get_item:
  9216                                                  lodsb
  9217                                                  dec     al
  9218                                                  cmp     al, 1Fh         ; 20-1
  9219                                                  jbe     short _@@get_item ; _@@skip_spc_lop
  9220                                                  dec     esi
  9221                                                  mov     ebx, edi
  9222                                                  mov     ah, 0           ; flag initially not quoted
  9223                                  
  9224                                  .char_lop:
  9225                                                  lodsb
  9226                                                  cmp     al, '"'
  9227                                                  jnz     short .no_quote
  9228                                                  xor     ah, 1
  9229                                                  jmp     short .char_lop
  9230                                  
  9231                                  .no_quote:
  9232                                                  stosb
  9233                                                  cmp     al, 0
  9234                                                  jz      short .src_end
  9235                                                  cmp     al, 20h
  9236                                                  ja      short .char_lop
  9237                                                  cmp     ah, 0           ; ignore spaces if inside "quoted area"
  9238                                                  jnz     short .char_lop
  9239                                                  mov     byte [edi-1], 0 ; eol (replace space by 00h)
  9240                                                  retn
  9241                                  
  9242                                  .src_end:
  9243                                                  dec     esi
  9244                                                  retn
  9245                                  
  9246                                  %endif
  9247                                  
  9248                                  ; =============== S U B R O U T I N E =======================================
  9249                                  
  9250                                  
  9251                                  %if 0
  9252                                  
  9253                                  open_and_mmap_the_file:
  9254                                                  push    0               ; hTemplateFile
  9255                                                  push    0               ; dwFlagsAndAttributes
  9256                                                  push    3               ; dwCreationDisposition
  9257                                                  push    0               ; lpSecurityAttributes
  9258                                                  push    1               ; dwShareMode
  9259                                                  push    80000000h       ; dwDesiredAccess
  9260                                                  push    [mp3_src_fname] ; lpFileName
  9261                                                  call    [CreateFileA]
  9262                                                  mov     [hFile], eax
  9263                                                  cmp     eax, 0FFFFFFFFh ; INVALID_HANDLE_VALUE
  9264                                                  jz      short .not_found
  9265                                                  push    0               ; lpFileSizeHigh
  9266                                                  push    [hFile]      ; hFile
  9267                                                  call    [GetFileSize]
  9268                                                  mov     [mp3_file_size], eax
  9269                                                  mov     [bytes_left], eax
  9270                                                  push    0               ; lpName
  9271                                                  push    0               ; dwMaximumSizeLow
  9272                                                  push    0               ; dwMaximumSizeHigh
  9273                                                  push    2               ; flProtect
  9274                                                  push    0               ; lpFileMappingAttributes
  9275                                                  push    [hFile]      ; hFile
  9276                                                  call    [CreateFileMappingA]
  9277                                                  mov     [hMap], eax
  9278                                                  push    0               ; dwNumberOfBytesToMap
  9279                                                  push    0               ; dwFileOffsetLow
  9280                                                  push    0               ; dwFileOffsetHigh
  9281                                                  push    4               ; dwDesiredAccess
  9282                                                  push    [hMap]       ; hFileMappingObject
  9283                                                  call    [MapViewOfFile]
  9284                                                  mov     [stream_start], eax
  9285                                                  mov     [stream_pos], eax
  9286                                                  mov     esi, [stream_start]
  9287                                                  mov     ecx, [bytes_left]
  9288                                  
  9289                                  .lll:
  9290                                                  lodsb
  9291                                                  loop    .lll
  9292                                                  clc
  9293                                                  retn
  9294                                  
  9295                                  .not_found:
  9296                                                  mov     edx, txt_not_found ; "cannot open source file\r\n"
  9297                                                  call    wrstr_edx
  9298                                                  stc
  9299                                                  retn
  9300                                  
  9301                                  %endif
  9302                                  
  9303                                  
  9304                                  ; =============== S U B R O U T I N E =======================================
  9305                                  
  9306                                  
  9307                                  mp3_plain_test_without_output:
  9308 000066F0 60                                      pusha
  9309 000066F1 8B35[CC420500]                          mov     esi, [stream_pos]
  9310 000066F7 8B0D[D0420500]                          mov     ecx, [bytes_left]
  9311 000066FD BF[00700500]                            mov     edi, sample_buffer
  9312 00006702 31ED                                    xor     ebp, ebp
  9313 00006704 E89DFBFFFF                              call    mp3_decode_frame
  9314 00006709 61                                      popa
  9315 0000670A 7218                                    jc      short .exit
  9316 0000670C A1[70B30000]                            mov     eax, [mp3_src_frame_size]
  9317 00006711 83F800                                  cmp     eax, 0
  9318 00006714 740E                                    jz      short .exit
  9319 00006716 0105[CC420500]                          add     [stream_pos], eax
  9320 0000671C 2905[D0420500]                          sub     [bytes_left], eax
  9321 00006722 EBCC                                    jmp     short mp3_plain_test_without_output
  9322                                  
  9323                                  .exit:
  9324 00006724 C3                                      retn
  9325                                  
  9326                                  
  9327                                  ; =============== S U B R O U T I N E =======================================
  9328                                  
  9329                                  		; 20/10/2024
  9330                                  mp3_cast_to_wav_file:
  9331 00006725 E86F000000                              call	mp3_create_wav_file
  9332                                  		; 20/10/2024
  9333 0000672A 730A                    		jnc	short .lop
  9334 0000672C BBFFFFFFFF              		mov	ebx, -1
  9335 00006731 E91D050000              		jmp	ExitProcess@ ; 13/01/2025
  9336                                  .lop:
  9337 00006736 60                                      pusha
  9338 00006737 8B35[CC420500]                          mov	esi, [stream_pos]
  9339 0000673D 8B0D[D0420500]                          mov	ecx, [bytes_left]
  9340 00006743 BF[00700500]                            mov	edi, sample_buffer
  9341 00006748 31ED                                    xor	ebp, ebp
  9342 0000674A E857FBFFFF                              call	mp3_decode_frame
  9343 0000674F 61                                      popa
  9344 00006750 7241                                    jc	short .exit
  9345 00006752 A1[70B30000]                            mov	eax, [mp3_src_frame_size]
  9346 00006757 83F800                                  cmp	eax, 0
  9347 0000675A 7437                                    jz	short .exit
  9348 0000675C 0105[CC420500]                          add	[stream_pos], eax
  9349 00006762 2905[D0420500]                          sub	[bytes_left], eax
  9350                                                  ;push	0          ; lpOverlapped
  9351                                                  ;push	diskresult ; lpNumberOfBytesWritten
  9352 00006768 FF35[600A0100]                          push	dword [mp3_samples_output_size] ; nNumberOfBytesToWrite
  9353 0000676E 68[00700500]                            push	sample_buffer ; lpBuffer
  9354 00006773 FF35[54430500]                          push	dword [mp3_wav_handle] ; hFile
  9355                                                  ;call	[WriteFile]
  9356                                  		;;;
  9357                                  		; 20/10/2024
  9358 00006779 E8DC040000              		call	WriteFile
  9359 0000677E 7213                    		jc	short .exit
  9360                                  		;;;
  9361 00006780 A1[600A0100]                            mov	eax, [mp3_samples_output_size]
  9362 00006785 0105[D09A0000]                          add	dword [mp3_wav_header+4], eax
  9363 0000678B 0105[F49A0000]                          add	dword [mp3_wav_header+28h], eax
  9364 00006791 EBA3                                    jmp	short .lop
  9365                                  
  9366                                  .exit:
  9367 00006793 E860000000                              call	mp3_close_wav_file
  9368 00006798 C3                                      retn
  9369                                  
  9370                                  
  9371                                  ; =============== S U B R O U T I N E =======================================
  9372                                  
  9373                                  		; 20/10/2024
  9374                                  
  9375                                  mp3_create_wav_file:
  9376 00006799 A1[9CB30000]                            mov     eax, [mp3_output_sample_rate]
  9377 0000679E 8B0D[98B30000]                          mov     ecx, [mp3_output_num_channels]
  9378 000067A4 8B15[A0B30000]                          mov     edx, [mp3_bytes_per_sample]
  9379 000067AA 66890D[E29A0000]                        mov     word [mp3_wav_header+16h], cx
  9380 000067B1 A3[E49A0000]                            mov     dword [mp3_wav_header+18h], eax
  9381 000067B6 0FAFCA                                  imul    ecx, edx
  9382 000067B9 0FAFC1                                  imul    eax, ecx
  9383 000067BC C1E203                                  shl     edx, 3
  9384 000067BF A3[E89A0000]                            mov     dword [mp3_wav_header+1Ch], eax
  9385 000067C4 66890D[EC9A0000]                        mov     word [mp3_wav_header+20h], cx
  9386 000067CB 668915[EE9A0000]                        mov     word [mp3_wav_header+22h], dx
  9387                                                  ;push   0               ; hTemplateFile
  9388                                                  ;push   80h             ; dwFlagsAndAttributes
  9389                                                  ;push   2               ; dwCreationDisposition
  9390                                                  ;push   0               ; lpSecurityAttributes
  9391                                                  ;push   0               ; dwShareMode
  9392                                                  ;push   0C0000000h      ; dwDesiredAccess
  9393 000067D2 FF35[C49A0000]                          push    dword [mp3_dst_fname] ; lpFileName
  9394                                                  ;call   [CreateFileA]
  9395                                  		;;;
  9396                                  		; 20/10/2024
  9397 000067D8 E8AF040000              		call	CreateFile
  9398 000067DD 7301                    		jnc	short .ok
  9399 000067DF C3                      		retn
  9400                                  .ok:
  9401                                  		;;;
  9402 000067E0 A3[54430500]                            mov     [mp3_wav_handle], eax
  9403                                                  ; 20/10/2024
  9404                                  		;call   mp3_write_wav_header
  9405                                                  ;retn
  9406                                  
  9407                                  
  9408                                  ; =============== S U B R O U T I N E =======================================
  9409                                  
  9410                                  		; 20/10/2024
  9411                                  mp3_write_wav_header:
  9412                                                  ;push	0               ; lpOverlapped
  9413                                                  ;push	diskresult      ; lpNumberOfBytesWritten
  9414 000067E5 6A2C                                    push	44 ; 2Ch        ; nNumberOfBytesToWrite
  9415 000067E7 68[CC9A0000]                            push	mp3_wav_header  ; lpBuffer
  9416 000067EC FF35[54430500]                          push	dword [mp3_wav_handle] ; hFile
  9417                                                  ;call	[WriteFile]
  9418                                                  ;;;
  9419                                  		; 20/10/2024
  9420 000067F2 E863040000                              call	WriteFile
  9421                                                  ;;;
  9422 000067F7 C3                      		retn
  9423                                  
  9424                                  
  9425                                  ; =============== S U B R O U T I N E =======================================
  9426                                  
  9427                                  		; 20/10/2024
  9428                                  mp3_close_wav_file:
  9429 000067F8 6A00                                    push	0               ; dwMoveMethod
  9430                                                  ;push	0               ; lpDistanceToMoveHigh
  9431 000067FA 6A00                                    push	0               ; lDistanceToMove
  9432 000067FC FF35[54430500]                          push	dword [mp3_wav_handle] ; hFile
  9433                                                  ;call	[SetFilePointer]
  9434                                  		;;;
  9435                                  		; 20/10/2024
  9436 00006802 E8C1040000              		call	SetFilePointer
  9437                                  		;;;
  9438 00006807 E8D9FFFFFF                              call	mp3_write_wav_header
  9439 0000680C FF35[54430500]                          push	dword [mp3_wav_handle] ; hObject
  9440                                                  ;call	[CloseHandle]
  9441                                  		;;;
  9442                                  		; 20/10/2024
  9443 00006812 E8EF040000              		call	CloseFile
  9444                                  		;;;
  9445 00006817 C3                                      retn
  9446                                  
  9447                                  
  9448                                  ; =============== S U B R O U T I N E =======================================
  9449                                  
  9450                                  		; 20/10/2024
  9451                                  mp3_verify_pcm_file:
  9452 00006818 E804020000                              call    mp3_open_pcm_file
  9453                                  		;;;
  9454                                  		; 20/10/2024
  9455 0000681D 7301                    		jnc	short .verify
  9456 0000681F C3                      		retn	; nothing to do (return without error msg)
  9457                                  .verify:
  9458                                  		;;;
  9459 00006820 C705[5C430500]0000-                     mov	dword [_@@max_diff], 0
  9459 00006828 0000               
  9460 0000682A C705[60430500]0000-                     mov	dword [_@@avg_diff], 0
  9460 00006832 0000               
  9461 00006834 C705[64430500]0000-                     mov	dword [_@@avg_diff+4], 0
  9461 0000683C 0000               
  9462 0000683E C705[68430500]0000-                     mov	dword [pcm_filepos], 0
  9462 00006846 0000               
  9463                                  
  9464                                  .lop:
  9465 00006848 60                                      pusha
  9466 00006849 8B35[CC420500]                          mov     esi, [stream_pos]
  9467 0000684F 8B0D[D0420500]                          mov     ecx, [bytes_left]
  9468 00006855 BF[00700500]                            mov     edi, sample_buffer
  9469 0000685A 31ED                                    xor     ebp, ebp
  9470 0000685C E845FAFFFF                              call    mp3_decode_frame
  9471 00006861 61                                      popa
  9472 00006862 0F824D010000                            jb      .exit
  9473 00006868 A1[70B30000]                            mov     eax, [mp3_src_frame_size]
  9474 0000686D 83F800                                  cmp     eax, 0
  9475 00006870 0F843F010000                            jz      .exit
  9476 00006876 31C0                                    xor     eax, eax
  9477 00006878 833D[98B30000]02                        cmp     dword [mp3_output_num_channels], 2
  9478 0000687F 7207                                    jb      short .this_mono_convert
  9479 00006881 0FB605[158C0000]                        movzx   eax, byte [option_mono]
  9480                                  
  9481                                  .this_mono_convert:
  9482 00006888 A3[6C430500]                            mov	[_@@mono_convert], eax
  9483 0000688D 8A0D[178C0000]                          mov	cl, [option_rate_shift]
  9484 00006893 B802000000                              mov	eax, 2
  9485 00006898 D3E0                                    shl	eax, cl
  9486 0000689A 66A3[70430500]                          mov	[_@@pcm_steps], ax
  9487 000068A0 66A3[72430500]                          mov	[_@@pcm_steps+2], ax
  9488 000068A6 833D[98B30000]02                        cmp	dword [mp3_output_num_channels], 2
  9489 000068AD 7213                                    jb	short .these_steps
  9490 000068AF 66C705[70430500]02-                     mov	word [_@@pcm_steps], 2
  9490 000068B7 00                 
  9491 000068B8 8D4400FE                                lea     eax, [eax*2-2] ; [0FFFFFFFEh+eax*2]
  9492 000068BC 66A3[72430500]                          mov     [_@@pcm_steps+2], ax
  9493                                  
  9494                                  .these_steps:
  9495 000068C2 A1[600A0100]                            mov     eax, [mp3_samples_output_size]
  9496 000068C7 8A0D[178C0000]                          mov     cl, [option_rate_shift]
  9497 000068CD 020D[168C0000]                          add     cl, [option_8bit]
  9498 000068D3 020D[6C430500]                          add     cl, byte [_@@mono_convert]
  9499 000068D9 D3E0                                    shl     eax, cl
  9500                                                  ;push   0               ; lpOverlapped
  9501                                                  ;push   diskresult      ; lpNumberOfBytesRead
  9502 000068DB 50                                      push    eax             ; nNumberOfBytesToRead
  9503 000068DC 68[00820500]                            push    (sample_buffer+1200h) ; sample_buffer+MP3_MAX_OUTPUT_SIZE
  9504 000068E1 FF35[58430500]                          push    dword [mp3_pcm_handle] ; hFile
  9505                                                  ;call   [ReadFile]
  9506                                                  ;;;
  9507                                  		; 20/10/2024
  9508 000068E7 E8E9030000              		call	ReadFile
  9509 000068EC 7306                    		jnc	short .pcm_read_ok
  9510                                  		; Note: File read error msg has been displayed
  9511 000068EE E83F010000              		call	mp3_close_pcm_file
  9512 000068F3 C3                      		retn
  9513                                  .pcm_read_ok:
  9514                                  		;;;
  9515 000068F4 8B0D[600A0100]          		mov     ecx, [mp3_samples_output_size]
  9516 000068FA D1E9                                    shr     ecx, 1
  9517 000068FC 0F849D000000                            jz      .compare_done
  9518 00006902 BE[00700500]                            mov     esi, sample_buffer ; decoded .mp3
  9519 00006907 BF[00820500]                            mov     edi, (sample_buffer+1200h) ; loaded .pcm
  9520                                  
  9521                                  .compare_lop:
  9522 0000690C 0FBF17                                  movsx   edx, word [edi]
  9523 0000690F 833D[6C430500]00                        cmp     dword [_@@mono_convert], 0
  9524 00006916 7408                                    jz      short .no_mono_convert
  9525 00006918 0FBF4702                                movsx   eax, word [edi+2]
  9526 0000691C 01C2                                    add     edx, eax
  9527 0000691E D1FA                                    sar     edx, 1
  9528                                  
  9529                                  .no_mono_convert:
  9530 00006920 803D[168C0000]00                        cmp	byte [option_8bit], 0
  9531 00006927 7508                                    jnz	short .compare_8bit
  9532 00006929 0FBF06                                  movsx	eax, word [esi] ; get 16bit from decoded .mp3
  9533 0000692C 83C602                                  add	esi, 2
  9534 0000692F EB13                                    jmp	short .compare_this
  9535                                  
  9536                                  .compare_8bit:
  9537 00006931 0FB606                                  movzx   eax, byte [esi]
  9538 00006934 46                                      inc     esi             ; convert .pcm
  9539 00006935 81C200800000                            add     edx, 8000h      ; make unsigned
  9540 0000693B C1FA08                                  sar     edx, 8          ; div 100h
  9541 0000693E 80D200                                  adc     dl, 0           ; round up
  9542 00006941 80DA00                                  sbb     dl, 0           ; undo on unsigned overflow
  9543                                  
  9544                                  .compare_this:
  9545 00006944 29D0                                    sub     eax, edx
  9546 00006946 7902                                    jns     short .compare_abs ; calc difference
  9547 00006948 F7D8                                    neg     eax
  9548                                  
  9549                                  .compare_abs:
  9550 0000694A 0105[60430500]                          add     [_@@avg_diff], eax
  9551 00006950 8315[64430500]00                        adc     dword [_@@avg_diff+4], 0
  9552 00006957 3B05[5C430500]                          cmp     eax, [_@@max_diff]
  9553 0000695D 7223                                    jb      short .not_max
  9554 0000695F A3[5C430500]                            mov     [_@@max_diff], eax
  9555 00006964 8B15[68430500]                          mov     edx, [pcm_filepos]
  9556 0000696A 8915[74430500]                          mov     [_@@worst_pcm_filepos], edx
  9557 00006970 8B15[CC420500]                          mov     edx, [stream_pos]
  9558 00006976 2B15[C8420500]                          sub     edx, [stream_start]
  9559 0000697C 8915[78430500]                          mov     [_@@worst_mp3_filepos], edx
  9560                                  
  9561                                  .not_max:
  9562 00006982 0FB705[70430500]                        movzx   eax, word [_@@pcm_steps]
  9563 00006989 C10D[70430500]10                        ror     dword [_@@pcm_steps], 16 ; next .pcm addr
  9564 00006990 01C7                                    add     edi, eax
  9565 00006992 0105[68430500]                          add     [pcm_filepos], eax
  9566 00006998 49                                      dec     ecx
  9567 00006999 0F856DFFFFFF                            jnz    .compare_lop
  9568                                  
  9569                                  .compare_done:
  9570 0000699F A1[70B30000]                            mov     eax, [mp3_src_frame_size]
  9571 000069A4 0105[CC420500]                          add     [stream_pos], eax
  9572 000069AA 2905[D0420500]                          sub     [bytes_left], eax
  9573 000069B0 E993FEFFFF                              jmp     .lop
  9574                                  
  9575                                  .exit:
  9576 000069B5 E878000000                              call    mp3_close_pcm_file
  9577 000069BA BA[28A20000]                            mov     edx, _@@txt_verify1 ; "verify max difference = "
  9578 000069BF E86CFCFFFF                              call    wrstr_edx
  9579 000069C4 A1[5C430500]                            mov     eax, [_@@max_diff]
  9580 000069C9 E89FFCFFFF                              call    wr_decimal_eax
  9581 000069CE BA[41A20000]                            mov     edx, _@@txt_verify1_at_mp3 ; " at mp3:"
  9582 000069D3 E858FCFFFF                              call    wrstr_edx
  9583 000069D8 A1[78430500]                            mov     eax, [_@@worst_mp3_filepos]
  9584 000069DD E801FDFFFF                              call    wrhexeax
  9585 000069E2 BA[4AA20000]                            mov     edx, _@@txt_verify2 ; ", average difference = "
  9586 000069E7 E844FCFFFF                              call    wrstr_edx
  9587 000069EC A1[60430500]                            mov     eax, [_@@avg_diff]
  9588 000069F1 8B15[64430500]                          mov     edx, [_@@avg_diff+4]
  9589 000069F7 8B0D[580A0100]                          mov     ecx, [mp3_total_output_size]
  9590 000069FD D1E9                                    shr     ecx, 1
  9591 000069FF F7F1                                    div     ecx
  9592 00006A01 E867FCFFFF                              call    wr_decimal_eax
  9593 00006A06 B02E                                    mov     al, '.'
  9594 00006A08 E831000000                              call    wrchr
  9595 00006A0D B80A000000                              mov     eax, 10
  9596 00006A12 F7E2                                    mul     edx             ; fraction*10
  9597 00006A14 F7F1                                    div     ecx
  9598 00006A16 E89AFCFFFF                              call    wrdigital       ; show fraction of average difference
  9599 00006A1B E821FCFFFF                              call    wrcrlf
  9600 00006A20 C3                                      retn
  9601                                  
  9602                                  
  9603                                  ; =============== S U B R O U T I N E =======================================
  9604                                  
  9605                                  		; 20/10/2024
  9606                                  mp3_open_pcm_file:
  9607                                                  ;push	0               ; hTemplateFile
  9608                                                  ;push	80h             ; dwFlagsAndAttributes
  9609                                                  ;push	3               ; dwCreationDisposition
  9610                                                  ;push	0               ; lpSecurityAttributes
  9611                                                  ;push	0               ; dwShareMode
  9612                                                  ;push	80000000h       ; dwDesiredAccess
  9613 00006A21 FF35[C89A0000]                          push	dword [mp3_pcm_fname] ; lpFileName
  9614                                                  ;call	[CreateFileA]
  9615                                  		;;;
  9616                                  		; 20/10/2024
  9617 00006A27 E88F020000              		call	OpenFile
  9618                                  		;jc	short .return
  9619                                  		;;;
  9620 00006A2C A3[58430500]                            mov	[mp3_pcm_handle], eax
  9621                                  ;.return:
  9622 00006A31 C3                                      retn
  9623                                  
  9624                                  
  9625                                  ; =============== S U B R O U T I N E =======================================
  9626                                  
  9627                                  		; 20/10/2024
  9628                                  mp3_close_pcm_file:
  9629 00006A32 FF35[58430500]                          push	dword [mp3_pcm_handle] ; hObject
  9630                                                  ;call	[CloseHandle]
  9631                                                  ;retn
  9632                                  		;;;
  9633                                  		; 20/10/2024
  9634 00006A38 E8C9020000              		call	CloseFile
  9635                                  		;;;
  9636 00006A3D C3                      		retn
  9637                                  
  9638                                  
  9639                                  ; ---------------------------------------------------------------------------
  9640                                  
  9641                                  ; =============== S U B R O U T I N E =======================================
  9642                                  
  9643                                  		; 20/10/2024
  9644                                  wrchr:
  9645                                  		; TRDOS 386 System Call
  9646                                  		; ebx = 2 -> write character onto STDOUT
  9647                                  		;push	ebx
  9648                                  		;push	ecx
  9649                                  		;push	eax
  9650 00006A3E 60                      		pusha
  9651                                  		;;mov	dword [diskresult], 0
  9652                                  		sys	_stdio, 2, eax
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006A3F BB02000000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126 00006A44 89C1                <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006A46 B82E000000          <1>  mov eax, %1
   133                              <1> 
   134 00006A4B CD40                <1>  int 40h
  9653                                  		;jnc	short .ok ; if EOF, eax = 0
  9654                                  		;xor	eax, eax ; 0
  9655                                  ;.ok:
  9656                                  		;mov	[diskresult], eax ; written byte count
  9657 00006A4D 61                      		popa
  9658                                  		;pop	eax
  9659                                  		;pop	ecx
  9660                                  		;pop	ebx
  9661 00006A4E C3                      		retn
  9662                                  
  9663                                  
  9664                                  ; =============== S U B R O U T I N E =======================================
  9665                                  
  9666                                  		; 20/10/2024
  9667                                  get_commandline:
  9668                                  		; 21/10/2024
  9669 00006A4F 5D                      		pop	ebp ; near call return address
  9670                                                 	; esp = command line start address
  9671                                  		;mov	[command_line],esp
  9672 00006A50 59                      		pop	ecx	; argc  ; number of arguments
  9673                                  		; esp = pointer to argument 1 ; argv[0]
  9674 00006A51 49                      		dec	ecx
  9675 00006A52 0F8405010000            		jz	.help
  9676 00006A58 58                      		pop	eax ; argument 1 (PRG file name)
  9677 00006A59 5E                      		pop	esi ; argument 2 (must be input file name)
  9678 00006A5A BF[D4420500]            		mov     edi, cmdline_buf
  9679                                  .get_item:
  9680 00006A5F 89FB                    		mov	ebx, edi
  9681                                  .char_lop:
  9682 00006A61 AC                                      lodsb
  9683 00006A62 AA                      		stosb
  9684 00006A63 3C00                                    cmp     al, 0
  9685 00006A65 75FA                                    jnz 	short .char_lop
  9686                                  		
  9687 00006A67 8A03                                    mov     al, [ebx]
  9688 00006A69 3C2F                                    cmp     al, '/'
  9689 00006A6B 7442                                    jz      short .switch
  9690 00006A6D 3C2D                                    cmp     al, '-'
  9691 00006A6F 743E                                    jz      short .switch
  9692 00006A71 8B47FB                                  mov     eax, [edi-5]
  9693 00006A74 0D00202020                              or      eax, 20202000h
  9694 00006A79 3D2E776176                              cmp     eax, '.wav'     ; FASM & NASM syntax
  9695 00006A7E 7510                                    jnz     short .not_wav_name
  9696 00006A80 891D[C49A0000]                          mov     [mp3_dst_fname], ebx
  9697                                  .get_items_lop:
  9698 00006A86 49                      		dec	ecx
  9699 00006A87 0F8494000000            		jz	.done
  9700 00006A8D 5E                      		pop	esi   ; next argument
  9701 00006A8E EBCF                    		jmp     short .get_item
  9702                                  
  9703                                  .not_wav_name:
  9704 00006A90 8B47FB                                  mov     eax, [edi-5]
  9705 00006A93 0D00202020                              or      eax, 20202000h
  9706 00006A98 3D2E70636D                              cmp     eax, '.pcm'     ; FASM & NASM syntax
  9707 00006A9D 7508                                    jnz     short .not_pcm_name
  9708 00006A9F 891D[C89A0000]                          mov     [mp3_pcm_fname], ebx
  9709 00006AA5 EBDF                                    jmp     short .get_items_lop
  9710                                  
  9711                                  .not_pcm_name:
  9712 00006AA7 891D[C09A0000]                          mov     [mp3_src_fname], ebx
  9713 00006AAD EBD7                                    jmp     short .get_items_lop
  9714                                  
  9715                                  .switch:
  9716 00006AAF 817B016D6F6E6F                          cmp	dword [ebx+1], 'mono'
  9717 00006AB6 7509                                    jnz	short .not_switch_mono
  9718 00006AB8 C605[158C0000]01                        mov	byte [option_mono], 1
  9719 00006ABF EBC5                                    jmp	short .get_items_lop
  9720                                  
  9721                                  .not_switch_mono:
  9722 00006AC1 817B0166617374                          cmp	dword [ebx+1], 'fast' ; FASM & NASM syntax
  9723 00006AC8 7509                                    jnz	short .not_fast_option
  9724 00006ACA C605[188C0000]01                        mov	byte [option_fast], 1
  9725 00006AD1 EBB3                                    jmp	short .get_items_lop
  9726                                  
  9727                                  .not_fast_option:
  9728 00006AD3 817B0138626974                          cmp	dword [ebx+1], '8bit'
  9729 00006ADA 7509                                    jnz	short .not_switch_8bit
  9730 00006ADC C605[168C0000]01                        mov	byte [option_8bit], 1
  9731 00006AE3 EBA1                                    jmp	short .get_items_lop
  9732                                  
  9733                                  .not_switch_8bit:
  9734 00006AE5 817B0168616C66                          cmp	dword [ebx+1], 'half'
  9735 00006AEC 7509                                    jnz	short .not_switch_half
  9736 00006AEE C605[178C0000]01                        mov	byte [option_rate_shift], 1
  9737 00006AF5 EB8F                                    jmp	short .get_items_lop
  9738                                  
  9739                                  .not_switch_half:
  9740 00006AF7 817B0171756172                          cmp	dword [ebx+1], 'quar'
  9741 00006AFE 750C                                    jnz	short .not_switch_quarter
  9742 00006B00 C605[178C0000]02                        mov	byte [option_rate_shift], 2
  9743 00006B07 E97AFFFFFF                              jmp	.get_items_lop
  9744                                  
  9745                                  .not_switch_quarter:
  9746 00006B0C 817B0174657374                          cmp	dword [ebx+1], 'test'
  9747 00006B13 7548                                    jnz	short .not_switch_test
  9748 00006B15 C605[148C0000]01                        mov	byte [option_test], 1
  9749 00006B1C E965FFFFFF                              jmp	.get_items_lop
  9750                                  
  9751                                  .done:
  9752 00006B21 833D[C09A0000]00                        cmp	dword [mp3_src_fname], 0
  9753 00006B28 7433                                    jz	short .help
  9754                                                  ;;; Erdogan Tan - 17/10/2024
  9755                                                  ;mov	edx, txt_ctrlc
  9756                                                  ;call	wrstr_edx
  9757                                  		; 20/10/2024
  9758                                  		sys	_msg, txt_ctrlc, txt_ctrlc_size, 0Fh ; white
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006B2A BB[62A20000]        <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126 00006B2F B919000000          <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128 00006B34 BA0F000000          <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006B39 B823000000          <1>  mov eax, %1
   133                              <1> 
   134 00006B3E CD40                <1>  int 40h
  9759                                                  ;;;
  9760 00006B40 BA[31A10000]                            mov	edx, txt_file ; "file: "
  9761 00006B45 E8E6FAFFFF                              call	wrstr_edx
  9762 00006B4A 8B15[C09A0000]                          mov	edx, [mp3_src_fname]
  9763 00006B50 E8DBFAFFFF                              call	wrstr_edx
  9764 00006B55 E8E7FAFFFF                              call	wrcrlf
  9765 00006B5A F8                                      clc
  9766 00006B5B 55                      		push	ebp	; return address
  9767 00006B5C C3                                      retn
  9768                                  
  9769                                  .not_switch_test:
  9770                                  .help:
  9771                                                  ;;; Erdogan Tan - 17/10/2024
  9772 00006B5D BA[7BA20000]                            mov	edx, txt_about
  9773 00006B62 E8C9FAFFFF                              call	wrstr_edx
  9774                                                  ;;;
  9775 00006B67 BA[A8A10000]                            mov	edx, txt_help ; "usage: mp3play input.mp3 [output.wav] ["...
  9776 00006B6C E8BFFAFFFF                              call	wrstr_edx
  9777 00006B71 F9                                      stc
  9778 00006B72 55                      		push	ebp	; return address
  9779 00006B73 C3                                      retn
  9780                                  
  9781                                  ; =============== S U B R O U T I N E =======================================
  9782                                  
  9783                                  		; 21/10/2024
  9784                                  set_break:
  9785                                  		; set [u.break] -end of bss- address to
  9786                                  		; end_of_bss at first (mp3 file will be loaded
  9787                                  		; at the end of bss)
  9788                                  		; ([u.break] initially points to the end of PRG file
  9789                                  		; -code and data- except BSS section)
  9790                                  		;
  9791                                  		; TRDOS 386 system call
  9792                                  		; Set break address
  9793                                  		; ebx = new [u.break]
  9794                                  		;sys	_break, end_of_bss
  9795                                  		; eax = new break address (dword aligned)
  9796                                  
  9797                                  		; 10/01/2025
  9798                                  		sys	_break, 100000h ; end of 1st 1MB
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006B74 BB00001000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006B79 B811000000          <1>  mov eax, %1
   133                              <1> 
   134 00006B7E CD40                <1>  int 40h
  9799                                  
  9800 00006B80 A3[C8420500]                            mov	[stream_start], eax
  9801 00006B85 A3[CC420500]                            mov	[stream_pos], eax
  9802                                  
  9803 00006B8A C3                      		retn
  9804                                  
  9805                                  
  9806                                  ; =============== S U B R O U T I N E =======================================
  9807                                  
  9808                                  		; 20/10/2024
  9809                                  
  9810                                  open_and_mmap_the_file:
  9811                                  		; 21/10/2024
  9812                                  		; TRDOS 386 system call
  9813                                  		; Open File
  9814                                  		; ebx = pointer to filename
  9815                                  		; ecx = open mode, 0 = read
  9816                                               	sys	_open, [mp3_src_fname], 0
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006B8B 8B1D[C09A0000]      <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126 00006B91 B900000000          <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006B96 B805000000          <1>  mov eax, %1
   133                              <1> 
   134 00006B9B CD40                <1>  int 40h
  9817 00006B9D 7270                    		jc	short .not_found
  9818                                  
  9819 00006B9F A3[C4420500]                            mov     [hFile], eax
  9820                                  
  9821                                                 	; get file size by using systell system call
  9822                                   		; (not applicable for TRDOS 386 Kernel v2.0.9 and earlier)
  9823                                  		; TRDOS 386 system call
  9824                                  		; Get current file (offset) pointer
  9825                                  		; ebx = file handle (file descriptor)
  9826                                  		; ecx = 0, offset
  9827                                  		; edx = 2, from the end of file
  9828                                  		;sys	_tell, eax, 0, 2
  9829                                                  ;mov     [mp3_file_size], eax
  9830                                  
  9831                                  		; *** get file size ***
  9832                                  		; TRDOS 386 system call
  9833                                  		; Set file (offset) pointer to file size 
  9834                                  		; (needed for TRDOS kernel v2.0.9 and earlier)
  9835                                  		; ebx = file handle (file descriptor)
  9836                                  		; ecx = 0, offset
  9837                                  		; edx = 2, from the end of file
  9838                                  		sys	_seek, eax, 0, 2
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006BA4 89C3                <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126 00006BA6 B900000000          <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128 00006BAB BA02000000          <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006BB0 B813000000          <1>  mov eax, %1
   133                              <1> 
   134 00006BB5 CD40                <1>  int 40h
  9839                                  		; TRDOS 386 system call
  9840                                  		; Get current file (offset) pointer
  9841                                  		; (needed for TRDOS 386 kernel version 2.0.9 and earlier)
  9842 00006BB7 31D2                    		xor	edx, edx ; 0
  9843                                  		; ecx = 0
  9844                                  		; ebx = file handle
  9845                                  		sys	_tell
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124                              <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006BB9 B814000000          <1>  mov eax, %1
   133                              <1> 
   134 00006BBE CD40                <1>  int 40h
  9846 00006BC0 A3[480A0100]            		mov     [mp3_file_size], eax
  9847                                  
  9848                                  		; *** set file offset pointer to 0 again ***
  9849                                  		; TRDOS 386 system call
  9850                                  		; Set file (offset) pointer
  9851                                  		; ebx = file handle (file descriptor)
  9852                                  		; ecx = 0, offset
  9853                                  		; edx = 0, from the beginning/start of file
  9854 00006BC5 50                      		push	eax
  9855                                  		sys	_seek
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124                              <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006BC6 B813000000          <1>  mov eax, %1
   133                              <1> 
   134 00006BCB CD40                <1>  int 40h
  9856 00006BCD 58                      		pop	eax
  9857                                  
  9858                                  		; now, set [u.break] address to the end of mp3 file
  9859                                  		; at memory -in BSS section-
  9860                                  		; (not necessary for TRDOS 386 PRG files)
  9861                                  		; (this system call will allocate user memory pages
  9862                                  		;  before sysread system call.. early)
  9863                                  		;add	eax, end_of_bss
  9864                                  		; 13/01/2025
  9865 00006BCE 0500001000              		add	eax, 100000h ; + end of 1st 1MB
  9866                                  		; TRDOS 386 system call
  9867                                  		; Set break address
  9868                                  		; ebx = new [u.break]
  9869                                  		sys	_break, eax
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006BD3 89C3                <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006BD5 B811000000          <1>  mov eax, %1
   133                              <1> 
   134 00006BDA CD40                <1>  int 40h
  9870                                  
  9871                                  		; TRDOS 386 system call
  9872                                  		; Read file
  9873                                  		; ebx = file handle (file descriptor)
  9874                                  		; ecx = buffer address
  9875                                  		; edx = byte count
  9876                                  		sys	_read, [hFile], [stream_start], [mp3_file_size]
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006BDC 8B1D[C4420500]      <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126 00006BE2 8B0D[C8420500]      <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128 00006BE8 8B15[480A0100]      <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006BEE B803000000          <1>  mov eax, %1
   133                              <1> 
   134 00006BF3 CD40                <1>  int 40h
  9877 00006BF5 7204                    		jc	short .read_error
  9878 00006BF7 39D0                    		cmp	eax, edx
  9879 00006BF9 730E                    		jnb	short .ok
  9880                                  		;or	eax, eax
  9881                                  		;jnz	short .ok
  9882                                  .read_error:		
  9883                                  		; TRDOS 386 system call
  9884                                  		; Close file
  9885                                  		; ebx = file handle (file descriptor)
  9886                                  		;sys	_close, [hFile]
  9887                                   		sys	_close
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124                              <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006BFB B806000000          <1>  mov eax, %1
   133                              <1> 
   134 00006C00 CD40                <1>  int 40h
  9888                                  
  9889 00006C02 BA[F36C0000]            		mov	edx, txt_read_err
  9890 00006C07 EB0B                    		jmp	short .r_err_msg
  9891                                  .ok:
  9892 00006C09 A3[D0420500]                            mov     [bytes_left], eax ; read count
  9893 00006C0E C3                      		retn
  9894                                  .not_found:
  9895 00006C0F BA[8EA10000]                            mov     edx, txt_not_found ; "cannot open source file\r\n"
  9896                                  .r_err_msg:
  9897 00006C14 E817FAFFFF                              call    wrstr_edx
  9898 00006C19 F9                                      stc
  9899 00006C1A C3                                      retn
  9900                                  
  9901                                  ;txt_read_err	db 'File read error!',0Dh,0Ah,0
  9902                                  
  9903                                  
  9904                                  ; =============== S U B R O U T I N E =======================================
  9905                                  
  9906                                  		; 20/10/2024
  9907                                  print_msg:
  9908                                  		; TRDOS 386 system call
  9909                                  		; write/display message on screen
  9910                                  		; ebx = ASCIIZ message (text) address
  9911                                  		; ecx = max. message length (stop count before char zero)
  9912                                  		; edx = character color (CGA)
  9913 00006C1B B9FF000000              		mov	ecx, 255
  9914 00006C20 BA0B000000              		mov	edx, 0Bh ; DL ; cyan
  9915                                  		sys	_msg
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124                              <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006C25 B823000000          <1>  mov eax, %1
   133                              <1> 
   134 00006C2A CD40                <1>  int 40h
  9916 00006C2C C3                      		retn
  9917                                  
  9918                                  
  9919                                  ; =============== S U B R O U T I N E =======================================
  9920                                  
  9921                                  		; 20/10/2024
  9922                                  GetTickCount:
  9923                                  		; TRDOS 386 system call
  9924                                  		; get current time, get tick count
  9925                                  		; ebx = 4 -> get count of system timer ticks
  9926                                  		sys	_time, 4
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006C2D BB04000000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006C32 B80D000000          <1>  mov eax, %1
   133                              <1> 
   134 00006C37 CD40                <1>  int 40h
  9927                                  		; eax = system timer ticks (18.2 ticks per second)
  9928 00006C39 BA15F4BC20              		mov	edx, 549254165	; 10^10/18.2
  9929 00006C3E F7E2                    		mul	edx
  9930                                  		; edx:eax = milliseconds * 10^7
  9931 00006C40 BB80969800              		mov	ebx, 10000000
  9932 00006C45 F7F3                    		div	ebx		; 10^7
  9933                                  		; eax = milliseconds
  9934 00006C47 81FA404B4C00            		cmp	edx, 5000000	; 10^7/2
  9935 00006C4D 7201                    		jb	short .ok
  9936 00006C4F 40                      		inc	eax		; round up
  9937                                  .ok:
  9938 00006C50 C3                      		retn
  9939                                  
  9940                                  
  9941                                  ; =============== E X I T ===================================================
  9942                                  
  9943                                  		; 20/10/2024
  9944                                  ExitProcess:
  9945 00006C51 31DB                    		xor	ebx, ebx  ; mov ebx, 0  ; exit code
  9946                                  ExitProcess@:	; 13/01/2025
  9947                                  		sys	_exit
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124                              <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006C53 B801000000          <1>  mov eax, %1
   133                              <1> 
   134 00006C58 CD40                <1>  int 40h
  9948                                  ;hang:
  9949                                  		;jmp	short hang
  9950                                  
  9951                                  
  9952                                  ; =============== S U B R O U T I N E =======================================
  9953                                  
  9954                                  		; 20/10/2024
  9955                                  WriteFile:
  9956 00006C5A 58                      		pop	eax ; near call return address
  9957 00006C5B 5B                      		pop	ebx
  9958 00006C5C 59                      		pop	ecx
  9959 00006C5D 5A                      		pop	edx
  9960 00006C5E 50                      		push	eax
  9961                                  		; TRDOS 386 system call
  9962                                  		; Write file
  9963                                  		; ebx = file handle (file descriptor)
  9964                                  		; ecx = buffer address
  9965                                  		; edx = byte count
  9966                                  		sys	_write
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124                              <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006C5F B804000000          <1>  mov eax, %1
   133                              <1> 
   134 00006C64 CD40                <1>  int 40h
  9967 00006C66 730F                    		jnc	short .ok
  9968 00006C68 39D0                    		cmp	eax, edx
  9969 00006C6A 730B                    		jnb	short .ok
  9970                                  		;or	eax, eax
  9971                                  		;jnz	short .ok
  9972                                  
  9973 00006C6C BA[786C0000]            		mov	edx, txt_write_err
  9974 00006C71 E8BAF9FFFF                              call    wrstr_edx
  9975 00006C76 F9                                      stc
  9976                                  .ok:
  9977 00006C77 C3                                      retn
  9978                                  
  9979 00006C78 46696C652077726974-     txt_write_err	db 'File write error!',0Dh,0Ah,0
  9979 00006C81 65206572726F72210D-
  9979 00006C8A 0A00               
  9980                                  
  9981                                  
  9982                                  ; =============== S U B R O U T I N E =======================================
  9983                                  
  9984                                  		; 20/10/2024
  9985                                  CreateFile:
  9986 00006C8C 58                      		pop	eax ; near call return address
  9987 00006C8D 5B                      		pop	ebx
  9988 00006C8E 50                      		push	eax
  9989                                  		; TRDOS 386 system call
  9990                                  		; Create file
  9991                                  		; ebx = (ASCIIZ) file name address
  9992                                  		; ecx = mode
  9993 00006C8F 31C9                    		xor	ecx, ecx ; CL ; mov ecx, 0 ; ordinary file
  9994                                  		sys	_creat
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124                              <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006C91 B808000000          <1>  mov eax, %1
   133                              <1> 
   134 00006C96 CD40                <1>  int 40h
  9995 00006C98 730B                    		jnc	short .ok ; eax = file handle
  9996                                  
  9997 00006C9A BA[A66C0000]            		mov	edx, txt_create_err
  9998 00006C9F E88CF9FFFF                              call    wrstr_edx
  9999 00006CA4 F9                                      stc
 10000                                  .ok:
 10001 00006CA5 C3                      		retn
 10002                                  
 10003 00006CA6 46696C652063726561-     txt_create_err	db 'File create error!',0Dh,0Ah,0
 10003 00006CAF 7465206572726F7221-
 10003 00006CB8 0D0A00             
 10004                                  
 10005                                  
 10006                                  ; =============== S U B R O U T I N E =======================================
 10007                                  
 10008                                  		; 20/10/2024
 10009                                  OpenFile:
 10010 00006CBB 58                      		pop	eax ; near call return address
 10011 00006CBC 5B                      		pop	ebx
 10012 00006CBD 50                      		push	eax
 10013                                  		; TRDOS 386 system call
 10014                                  		; Open file
 10015                                  		; ebx = (ASCIIZ) file name address
 10016                                  		; ecx = mode
 10017 00006CBE 31C9                    		xor	ecx, ecx ; CL ; mov ecx, 0 ; ordinary file
 10018                                  		sys	_open
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124                              <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006CC0 B805000000          <1>  mov eax, %1
   133                              <1> 
   134 00006CC5 CD40                <1>  int 40h
 10019                                  		;jnc	short .ok ; eax = file handle
 10020                                  		;
 10021                                  		;mov	edx, txt_open_err
 10022                                                  ;call   wrstr_edx
 10023                                                  ;stc
 10024                                  ;.ok:
 10025 00006CC7 C3                      		retn
 10026                                  
 10027                                  ;txt_open_err	db 'File not found!',0Dh,0Ah,0
 10028                                  		;db 'File open error!',ODh,0Ah,0
 10029                                  	 
 10030                                  
 10031                                  ; =============== S U B R O U T I N E =======================================
 10032                                  
 10033                                  		; 20/10/2024
 10034                                  SetFilePointer:
 10035 00006CC8 58                      		pop	eax ; near call return address
 10036 00006CC9 5B                      		pop	ebx
 10037 00006CCA 59                      		pop	ecx
 10038 00006CCB 5A                      		pop	edx
 10039 00006CCC 50                      		push	eax
 10040                                  		; TRDOS 386 system call
 10041                                  		; Set file offset pointer  ; sysseek
 10042                                  		; ebx = file handle (file descriptor)
 10043                                  		; ecx = offset
 10044                                  		; edx = switch, DL = 0 = from the start of file
 10045                                  		;		     1 = from the current offset
 10046                                  		;		     2 = from the end of file
 10047                                  		sys	_seek
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124                              <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006CCD B813000000          <1>  mov eax, %1
   133                              <1> 
   134 00006CD2 CD40                <1>  int 40h
 10048                                  		; eax = (value of) new offset pointer
 10049                                  
 10050 00006CD4 C3                      		retn
 10051                                  
 10052                                  
 10053                                  ; =============== S U B R O U T I N E =======================================
 10054                                  
 10055                                  		; 20/10/2024
 10056                                  ReadFile:
 10057 00006CD5 58                      		pop	eax ; near call return address
 10058 00006CD6 5B                      		pop	ebx
 10059 00006CD7 59                      		pop	ecx
 10060 00006CD8 5A                      		pop	edx
 10061 00006CD9 50                      		push	eax
 10062                                  		; TRDOS 386 system call
 10063                                  		; Read file
 10064                                  		; ebx = file handle (file descriptor)
 10065                                  		; ecx = buffer address
 10066                                  		; edx = byte count
 10067                                  		sys	_read
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124                              <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006CDA B803000000          <1>  mov eax, %1
   133                              <1> 
   134 00006CDF CD40                <1>  int 40h
 10068 00006CE1 730F                    		jnc	short .ok
 10069 00006CE3 39D0                    		cmp	eax, edx
 10070 00006CE5 730B                    		jnb	short .ok
 10071                                  		;or	eax, eax
 10072                                  		;jnz	short .ok
 10073                                  
 10074 00006CE7 BA[F36C0000]            		mov	edx, txt_read_err
 10075 00006CEC E83FF9FFFF                              call    wrstr_edx
 10076 00006CF1 F9                                      stc
 10077                                  .ok:
 10078 00006CF2 C3                                      retn
 10079                                  
 10080 00006CF3 46696C652072656164-     txt_read_err	db 'File read error!',0Dh,0Ah,0
 10080 00006CFC 206572726F72210D0A-
 10080 00006D05 00                 
 10081                                  
 10082                                  
 10083                                  ; =============== S U B R O U T I N E =======================================
 10084                                  
 10085                                  		; 20/10/2024
 10086                                  CloseFile:
 10087 00006D06 58                      		pop	eax ; near call return address
 10088 00006D07 5B                      		pop	ebx
 10089 00006D08 50                      		push	eax
 10090                                  		; TRDOS 386 system call
 10091                                  		; Close file
 10092                                  		; ebx = file handle (file descriptor)
 10093                                  		sys	_close
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124                              <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006D09 B806000000          <1>  mov eax, %1
   133                              <1> 
   134 00006D0E CD40                <1>  int 40h
 10094                                  
 10095 00006D10 C3                      		retn
 10096                                  
 10097                                  
 10098                                  ; ---------------------------------------------------------------------------
 10099                                  ; TRDOS 386 Audio System Functions
 10100                                  ; ---------------------------------------------------------------------------
 10101                                  
 10102                                  ; =============== S U B R O U T I N E =======================================
 10103                                  
 10104                                  		; 10/01/2025
 10105                                  		; 20/10/2024
 10106                                  detect_enable_audio_device:
 10107 00006D11 66C705[52A30000]80-     		mov	word [max_frequency], 48000
 10107 00006D19 BB                 
 10108                                  		; 10/01/2025
 10109                                  		;mov	byte [blocks], 8
 10110                                  
 10111                                  		; check AC'97 hardware at first
 10112                                  		; (48kHz support)
 10113                                  		; TRDOS 386 system call
 10114                                  		; sysaudio
 10115                                  		; Detect (BH=1) AC'97 (BL=2) Audio Device
 10116                                  .ac97:
 10117                                          	sys	_audio, 0102h
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006D1A BB02010000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006D1F B820000000          <1>  mov eax, %1
   133                              <1> 
   134 00006D24 CD40                <1>  int 40h
 10118 00006D26 7245                    		jc	short .sb16
 10119 00006D28 C605[50A30000]02        		mov	byte [audio_hardware], 2 ; AC97
 10120                                  
 10121                                  		;;;;
 10122                                  		; 12/01/2025 (ref: playwav9.s, 18/12/2024)
 10123                                  		sys	_audio, 0E00h ; get audio controller info
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006D2F BB000E0000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006D34 B820000000          <1>  mov eax, %1
   133                              <1> 
   134 00006D39 CD40                <1>  int 40h
 10124                                  		; EAX = IRQ Number in AL
 10125                                  		;	Audio Device Number in AH 
 10126                                  		; EBX = DEV/VENDOR ID
 10127                                  		;       (DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV)
 10128                                  		; ECX = BUS/DEV/FN 
 10129                                  		;       (00000000BBBBBBBBDDDDDFFF00000000)
 10130                                  		; EDX = NABMBAR/NAMBAR (for AC97)
 10131                                  		;      (Low word, DX = NAMBAR address)
 10132                                  		; EDX = Base IO Addr (DX) for SB16 & VT8233
 10133                                  
 10134 00006D3B 891D[40A30000]          		mov	[dev_vendor], ebx
 10135 00006D41 890D[3CA30000]          		mov	[bus_dev_fn], ecx
 10136                                  
 10137 00006D47 668915[44A30000]                	mov     [NAMBAR], dx	; save audio mixer base addr
 10138                                  		;shr	edx, 16
 10139                                          	;mov    [NABMBAR], dx	; save bus master base addr
 10140 00006D4E 8915[44A30000]          		mov	[NAMBAR], edx
 10141                                  
 10142 00006D54 A2[4CA30000]            		mov	[ac97_int_ln_reg], al
 10143                                  		;;;;
 10144                                  		
 10145                                  		; TRDOS 386 system call
 10146                                  		; sysaudio
 10147                                  		; Get AC'97 Codec info
 10148                                  		; (Function 14, sub function 1)
 10149                                  		sys	_audio, 0E01h
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006D59 BB010E0000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006D5E B820000000          <1>  mov eax, %1
   133                              <1> 
   134 00006D63 CD40                <1>  int 40h
 10150                                  		; Save Variable Rate Audio support bit
 10151 00006D65 2401                    		and	al, 1
 10152 00006D67 A2[51A30000]            		mov	[vra], al
 10153 00006D6C C3                      		retn
 10154                                  .sb16:
 10155                                  		; check Sound Blaster 16 card at second
 10156                                  		; (44100Hz support, but 24kHz will be used)
 10157                                  		; TRDOS 386 system call
 10158                                  		; sysaudio
 10159                                  		; Detect (BH=1) SB16 (BL=1) Audio Card
 10160                                          	sys	_audio, 0101h
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006D6D BB01010000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006D72 B820000000          <1>  mov eax, %1
   133                              <1> 
   134 00006D77 CD40                <1>  int 40h
 10161 00006D79 7228                    		jc	short .vt8233
 10162 00006D7B C605[50A30000]01        		mov	byte [audio_hardware], 1 ; SB16
 10163 00006D82 66C705[52A30000]44-     		mov	word [max_frequency], 44100
 10163 00006D8A AC                 
 10164                                  		; 10/01/2025
 10165                                  		;;mov	byte [blocks], 7
 10166                                  		;dec	byte [blocks]
 10167                                  
 10168                                  		;;;;
 10169                                  		; 12/01/2025 (ref: sb16play.s, 20/12/2024)
 10170                                  		sys	_audio, 0E00h ; get audio controller info
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006D8B BB000E0000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006D90 B820000000          <1>  mov eax, %1
   133                              <1> 
   134 00006D95 CD40                <1>  int 40h
 10171                                  	
 10172 00006D97 8915[48A30000]          		mov	[audio_io_base], edx
 10173 00006D9D A2[4CA30000]            		mov	[audio_intr], al
 10174                                  		;;;;
 10175                                  
 10176 00006DA2 C3                      		retn
 10177                                  .vt8233:
 10178                                  		; check VIA VT3237R (VT8233) hardware at third
 10179                                  		; (48kHz support)
 10180                                  		; TRDOS 386 system call
 10181                                  		; sysaudio
 10182                                  		; Detect (BH=1) VT8237R (BL=3) Audio Device
 10183                                  		sys	_audio, 0103h
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006DA3 BB03010000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006DA8 B820000000          <1>  mov eax, %1
   133                              <1> 
   134 00006DAD CD40                <1>  int 40h
 10184 00006DAF 7208                    		jc	short .hda
 10185 00006DB1 C605[50A30000]03        		mov	byte [audio_hardware], 3 ; VT8237R
 10186 00006DB8 C3                      		retn
 10187                                  .hda:	
 10188                                  		; check Intel HDA hardware at last
 10189                                  		; (48kHz support)
 10190                                  		; TRDOS 386 system call
 10191                                  		; sysaudio
 10192                                  		; Detect (BH=1) Intel HDA (BL=4) Audio Device
 10193                                  		sys	_audio, 0104h
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006DB9 BB04010000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006DBE B820000000          <1>  mov eax, %1
   133                              <1> 
   134 00006DC3 CD40                <1>  int 40h
 10194 00006DC5 7208                    		jc	short .err
 10195 00006DC7 C605[50A30000]04        		mov	byte [audio_hardware], 4 ; HDA
 10196 00006DCE C3                      		retn
 10197                                  .err:
 10198 00006DCF BA[DB6D0000]            		mov	edx, txt_audio_nf_err
 10199 00006DD4 E857F8FFFF                              call    wrstr_edx
 10200 00006DD9 F9                                      stc
 10201 00006DDA C3                      		retn
 10202                                  
 10203 00006DDB 50726F706572206175-     txt_audio_nf_err: db 'Proper audio hardware not found!',0Dh,0Ah,0
 10203 00006DE4 64696F206861726477-
 10203 00006DED 617265206E6F742066-
 10203 00006DF6 6F756E64210D0A00   
 10204                                  
 10205                                  
 10206                                  ; =============== CONSTANT ==================================================
 10207                                  
 10208                                  		; 21/10/2024
 10209                                  MP3_MAX_OUTPUT_SIZE equ 2*2*18*32*2
 10210                                      ; = 1200h = 4608 decimal = 2 channels, 2 granules, 18*32, 2 byte(16bit)
 10211                                  
 10212                                  
 10213                                  ; =============== S U B R O U T I N E =======================================
 10214                                  
 10215                                  		; 12/01/2025
 10216                                  audio_system_init:
 10217                                  		;mov	eax, sample_buffer_size
 10218                                  		; 10/01/2025
 10219                                  		;mov	byte [blocks], 16
 10220                                  		; 12/01/2025
 10221 00006DFE C605[56A30000]08        		mov	byte [blocks], 8
 10222 00006E05 A1[600A0100]            		mov	eax, [mp3_samples_output_size]
 10223 00006E0A C1E003                  		shl	eax, 3 ; * 8
 10224                                  		;shl	eax, 4 ; * 16
 10225                                  .asi@:		
 10226                                  		; 12/01/2025
 10227                                  		;cmp	eax, 65536
 10228                                  		;jna	short .asi@@
 10229                                  		;sub	eax, [mp3_samples_output_size]
 10230                                  		;dec	byte [blocks]
 10231                                  		;;;
 10232                                  		; 11/01/2025
 10233                                  		;test	byte [blocks], 1
 10234                                  		;jz	short .asi@
 10235                                  		;dec	byte [blocks] ; even number
 10236                                  		;sub	eax, [mp3_samples_output_size]
 10237                                  		;;;
 10238                                  		;jmp	short .asi@
 10239                                  .asi@@:
 10240 00006E0D 803D[50A30000]01        		cmp	byte [audio_hardware], 1 ; SB16
 10241 00006E14 7515                    		jne	short .bufaloc
 10242                                  .asi@@@:
 10243                                  		; 10/01/2025
 10244 00006E16 3D00800000              		cmp	eax, 32768
 10245 00006E1B 760E                    		jna	short .bufaloc
 10246                                  		; sample_buffer_size = 36864 bytes ; 8 blocks
 10247                                  		;sub	eax, MP3_MAX_OUTPUT_SIZE
 10248                                  		; eax = 32256 ; 7 blocks
 10249                                  		; 10/01/2025
 10250 00006E1D 2B05[600A0100]          		sub	eax, [mp3_samples_output_size]
 10251 00006E23 FE0D[56A30000]          		dec	byte [blocks]
 10252                                  		;;;
 10253                                  		; 11/01/2025
 10254                                  		;test	byte [blocks], 1
 10255                                  		;jz	short .asi@@@
 10256                                  		;dec	byte [blocks] ; even number
 10257                                  		;sub	eax, [mp3_samples_output_size]
 10258                                  		;;;
 10259 00006E29 EBEB                    		jmp	short .asi@@@
 10260                                  .bufaloc:
 10261                                  		; TRDOS 386 system call
 10262                                  		; sysaudio
 10263                                  		; Allocate audio buffer (for user)
 10264                                  		; ebx = 0200h (BH=2)
 10265                                  		; ecx = buffer size (in bytes)
 10266                                  		; edx = buffer address (virtual)
 10267 00006E2B A3[58A30000]            		mov	[buffer_size], eax
 10268                                  		sys	_audio, 0200h, eax, sample_buffer
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006E30 BB00020000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126 00006E35 89C1                <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128 00006E37 BA[00700500]        <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006E3C B820000000          <1>  mov eax, %1
   133                              <1> 
   134 00006E41 CD40                <1>  int 40h
 10269 00006E43 7225                    		jc	short .init_err
 10270                                  
 10271                                  		; 12/01/2025
 10272                                  		; clear audio buffer (before playback)
 10273 00006E45 BF[00700500]            		mov	edi, sample_buffer
 10274                                  		; ecx = buffer size in bytes
 10275 00006E4A C1E902                  		shr	ecx, 2 ; double word
 10276 00006E4D 31C0                    		xor	eax, eax
 10277 00006E4F F3AB                    		rep	stosd
 10278                                  
 10279                                  		; TRDOS 386 system call
 10280                                  		; sysaudio
 10281                                  		; Initialize audio device (bh = 3)
 10282                                  		; bl = 01h -> CallBack method
 10283                                  		; edx = Callback service address (virtual)
 10284                                  		; ecx = 0 ; CL = srb value ; not used
 10285                                  		sys	_audio, 0301h, 0, audio_callback
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006E51 BB01030000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126 00006E56 B900000000          <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128 00006E5B BA[9D6E0000]        <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006E60 B820000000          <1>  mov eax, %1
   133                              <1> 
   134 00006E65 CD40                <1>  int 40h
 10286                                  		; 12/01/2025
 10287                                  		; SRB method (faster than callback method)
 10288                                  		; bl = 0 -> Signal Response Byte method
 10289                                  		; cl = 1 -> SRB set value 
 10290                                  		;     (will be set by audio IRQ service of the kernel)
 10291                                  		; edx = SRB address -one byte data-
 10292                                  		;sys	_audio, 0300h, 1, srb	
 10293 00006E67 7201                    		jc	short .init_err
 10294 00006E69 C3                      		retn
 10295                                  .init_err:
 10296                                  init_error:	; 13/01/2025
 10297 00006E6A BA[766E0000]            		mov	edx, txt_audio_init_err
 10298 00006E6F E8BCF7FFFF                              call    wrstr_edx
 10299 00006E74 F9                                      stc
 10300 00006E75 C3                      		retn
 10301                                  
 10302 00006E76 417564696F20686172-     txt_audio_init_err: db 'Audio hardware initialization error!',0Dh,0Ah,0
 10302 00006E7F 647761726520696E69-
 10302 00006E88 7469616C697A617469-
 10302 00006E91 6F6E206572726F7221-
 10302 00006E9A 0D0A00             
 10303                                  
 10304                                  
 10305                                  ; =============== S U B R O U T I N E =======================================
 10306                                  
 10307                                  		; 21/10/2024
 10308                                  audio_callback:
 10309                                  		; Operating system has directed CPU here because of
 10310                                  		; user (2nd) stage of the audio hardware interrupt service.
 10311                                  		; This procedure must be short and return to operating
 10312                                  		; system again via sysrelease system call
 10313                                  		; (or any system call here will be handled as sysrelease).
 10314                                  
 10315 00006E9D C605[54A30000]01        		mov	byte [srb], 1
 10316                                  
 10317                                  		; 12/01/2025
 10318 00006EA4 E884010000                              call	try_enqueue_all_blocks
 10319                                  
 10320                                  		sys	_rele ; return from callback service 
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124                              <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006EA9 B827000000          <1>  mov eax, %1
   133                              <1> 
   134 00006EAE CD40                <1>  int 40h
 10321                                  		
 10322                                  		; we must not come here !
 10323 00006EB0 BBFFFFFFFF              		mov	ebx, -1
 10324                                  		sys	_exit
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124                              <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006EB5 B801000000          <1>  mov eax, %1
   133                              <1> 
   134 00006EBA CD40                <1>  int 40h
 10325                                  		;jmp	short audio_callback
 10326                                  
 10327                                  
 10328                                  ; =============== S U B R O U T I N E =======================================
 10329                                  
 10330                                  		; 13/01/2025
 10331                                  		; 12/01/2025
 10332                                  		; 10/01/2025
 10333                                  		; 21/10/2024
 10334                                  mp3_cast_to_speaker:
 10335                                  ; 13/01/2025
 10336                                  %if 1
 10337                                  		; Start	to play
 10338 00006EBC A1[A0B30000]            		mov	eax, [mp3_bytes_per_sample]
 10339                                  		;shr	al, 1 ; 8 -> 0, 16 -> 1
 10340                                  		;shl	al, 1 ; 16 -> 2, 8 -> 0
 10341 00006EC1 2402                    		and	al, 2 ; 22/10/2024
 10342 00006EC3 8B1D[98B30000]          		mov	ebx, [mp3_output_num_channels]
 10343 00006EC9 4B                      		dec	ebx
 10344 00006ECA 08C3                    		or	bl, al
 10345 00006ECC 8B0D[9CB30000]          		mov	ecx, [mp3_output_sample_rate]
 10346 00006ED2 B704                    		mov	bh, 4 ; start to play
 10347                                  
 10348                                  		; 13/01/2025
 10349                                  mp3_cast_to_speaker_@:		
 10350 00006ED4 53                      		push	ebx
 10351 00006ED5 51                      		push	ecx
 10352                                  %endif
 10353                                                  ; 12/01/2025
 10354                                  		;call	try_enqueue_all_blocks
 10355                                  	
 10356                                  		; 12/01/2025
 10357                                  		;cmp	dword [bytes_left],0
 10358                                  		;jz	short .playback
 10359                                  		
 10360                                  		; 12/01/2025
 10361                                  		; (here audio buffer -sample_buffer- is empty)
 10362                                  		; (clear dma half buffer 1)
 10363                                  		sys	_audio, 1001h
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006ED6 BB01100000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006EDB B820000000          <1>  mov eax, %1
   133                              <1> 
   134 00006EE0 CD40                <1>  int 40h
 10364                                  		; (clear dma half buffer 2)
 10365                                  		;sys	_audio, 1002h
 10366                                  
 10367                                  		; TRDOS 386 system call
 10368                                  		; sysaudio
 10369                                  		; bh = 16 : update (current, first) dma half buffer
 10370                                  		; bl = 0  : then switch to the next (second) half buffer
 10371                                  		sys	_audio, 1000h
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006EE2 BB00100000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006EE7 B820000000          <1>  mov eax, %1
   133                              <1> 
   134 00006EEC CD40                <1>  int 40h
 10372                                  
 10373                                  		; 12/01/2025
 10374                                  		; 22/10/2024
 10375                                  		;call	try_enqueue_all_blocks
 10376                                  .playback:
 10377                                  		; TRDOS 386 system call
 10378                                  		; sysaudio
 10379                                  		; Set Master Volume Level (BL=0 or 80h)
 10380                                  		; 	for next playing (BL>=80h)
 10381                                  		;sys	_audio, 0B80h, 1D1Dh
 10382                                  		sys	_audio, 0B00h, 1D1Dh
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006EEE BB000B0000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126 00006EF3 B91D1D0000          <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006EF8 B820000000          <1>  mov eax, %1
   133                              <1> 
   134 00006EFD CD40                <1>  int 40h
 10383                                  
 10384                                  		;mov	byte [volume_level], 1Dh
 10385 00006EFF 880D[55A30000]          		mov	[volume_level], cl
 10386                                  ; 13/01/2025
 10387                                  %if 0
 10388                                  		; Start	to play
 10389                                  		mov	eax, [mp3_bytes_per_sample]
 10390                                  		;shr	al, 1 ; 8 -> 0, 16 -> 1
 10391                                  		;shl	al, 1 ; 16 -> 2, 8 -> 0
 10392                                  		and	al, 2 ; 22/10/2024
 10393                                  		mov	ebx, [mp3_output_num_channels]
 10394                                  		dec	ebx
 10395                                  		or	bl, al
 10396                                  		mov	ecx, [mp3_output_sample_rate]
 10397                                  		mov	bh, 4 ; start to play
 10398                                  %else
 10399 00006F05 59                      		pop	ecx ; sample rate (frequency)
 10400 00006F06 5B                      		pop	ebx ; play mode (bl)
 10401                                  %endif
 10402                                  		; TRDOS 386 system call
 10403                                  		; sysaudio
 10404                                  		; bh = 4 -> start to play
 10405                                  		; bl = mode -> bit 0, 1 = stereo, 0 = mono
 10406                                  		;	       bit 1, 1 = 16 bit, 0 = 8 bit
 10407                                  		; cx = sample rate (hertz)
 10408                                  		sys	_audio
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124                              <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006F07 B820000000          <1>  mov eax, %1
   133                              <1> 
   134 00006F0C CD40                <1>  int 40h
 10409                                  
 10410                                  		; 12/01/2025
 10411 00006F0E C605[54A30000]00        		mov	byte [srb], 0
 10412                                  		;;;
 10413                                  
 10414                                  .playback_lop:
 10415 00006F15 31C0                    		xor	eax, eax
 10416 00006F17 3905[D0420500]          		cmp	[bytes_left], eax ; 0
 10417 00006F1D 7508                    		jnz	short .playback_next
 10418                                  		; 22/10/2024
 10419 00006F1F 3805[FC9A0000]          		cmp	byte [num_enqueued_frames], al ; 0
 10420 00006F25 7447                                    jz	short .playback_end
 10421                                  .playback_next:
 10422 00006F27 A2[FC9A0000]            		mov	[num_enqueued_frames], al ; 0
 10423 00006F2C 803D[54A30000]01        		cmp	byte [srb], 1	; audio interrupt status
 10424 00006F33 7274                    		jb	short .getchar
 10425                                  		;mov	byte [srb], 0	; reset
 10426 00006F35 A2[54A30000]            		mov	[srb], al ; 0
 10427                                  		; 12/01/2025
 10428                                  		;call	try_enqueue_all_blocks
 10429                                  		; 15/01/2025
 10430 00006F3A 803D[56A30000]00        		cmp	byte [blocks], 0 ; interpolation ?
 10431 00006F41 7618                    		jna	short .interpolated ; yes
 10432                                  
 10433                                  		; 15/01/2025
 10434 00006F43 B44E                    		mov	ah, 4Eh ; red backgroud, yellow font 
 10435                                  .indicator:
 10436                                  		;;; 10/01/2025
 10437 00006F45 A0[3AA30000]            		mov	al, [half_buffer]
 10438 00006F4A 8035[3AA30000]01        		xor	byte [half_buffer], 1
 10439                                  		;mov	ah, 4Eh
 10440 00006F51 0431                    		add	al, '1'
 10441 00006F53 66A300800B00            		mov	[0B8000h], ax
 10442                                  		;;;	
 10443 00006F59 EBBA                    		jmp	short .playback_lop
 10444                                  
 10445                                  .interpolated:
 10446                                  		; 15/01/2025
 10447                                  		; (a solution for very fast indicator digit change)
 10448                                  		; (8 to 1)
 10449 00006F5B FE05[65A30000]          		inc	byte [counter]
 10450 00006F61 A0[65A30000]            		mov	al, [counter]
 10451 00006F66 2407                    		and	al, 7
 10452 00006F68 75AB                    		jnz	short .playback_lop
 10453 00006F6A B41E                    		mov	ah, 1Eh ; blue backgroud, yellow font
 10454 00006F6C EBD7                    		jmp	short .indicator
 10455                                  
 10456                                  .playback_end:
 10457                                  		;;; 10/01/2025
 10458 00006F6E 66B8304E                		mov	ax, 4E30h
 10459 00006F72 66A300800B00            		mov	[0B8000h], ax 
 10460                                  		;;;
 10461                                  
 10462                                  		; TRDOS 386 system call
 10463                                  		; sysaudio
 10464                                  		; Stop playing
 10465                                  		sys	_audio, 0700h
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006F78 BB00070000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006F7D B820000000          <1>  mov eax, %1
   133                              <1> 
   134 00006F82 CD40                <1>  int 40h
 10466                                  		; Cancel callback service (for user)
 10467                                  		sys	_audio, 0900h
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006F84 BB00090000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006F89 B820000000          <1>  mov eax, %1
   133                              <1> 
   134 00006F8E CD40                <1>  int 40h
 10468                                  		; Deallocate audio buffer (for user)
 10469                                  		sys	_audio, 0A00h
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006F90 BB000A0000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006F95 B820000000          <1>  mov eax, %1
   133                              <1> 
   134 00006F9A CD40                <1>  int 40h
 10470                                  		; Disable audio device
 10471                                  		sys	_audio, 0C00h
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006F9C BB000C0000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006FA1 B820000000          <1>  mov eax, %1
   133                              <1> 
   134 00006FA6 CD40                <1>  int 40h
 10472 00006FA8 C3                      		retn
 10473                                  
 10474                                  .getchar:
 10475                                  		; TRDOS 386 system call
 10476                                  		; sysstdio
 10477                                  		; BL = 1 -> read a character on stdin (no wait)
 10478                                  		sys	_stdio, 1
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006FA9 BB01000000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006FAE B82E000000          <1>  mov eax, %1
   133                              <1> 
   134 00006FB3 CD40                <1>  int 40h
 10479 00006FB5 21C0                    		and	eax, eax
 10480 00006FB7 0F846AFFFFFF            		jz	.playback_next ; 15/01/2024
 10481                                  
 10482 00006FBD 3C2B                    		cmp	al, '+' ; increase sound volume
 10483 00006FBF 741B                    		je	short .inc_volume
 10484 00006FC1 3C2D                    		cmp	al, '-'
 10485 00006FC3 7441                    		je	short .dec_volume
 10486                                  
 10487                                  		;;;
 10488                                  		; 10/01/2025
 10489                                  		;cmp	ah, 01h
 10490 00006FC5 3C1B                    		cmp	al, 1Bh	; ESC
 10491 00006FC7 74A5                    		je	short .playback_end
 10492                                  		;cmp	ax, 2E03h
 10493 00006FC9 3C03                    		cmp	al, 03h	; CTRL+C
 10494 00006FCB 74A1                    		je	short .playback_end
 10495                                  		;;;
 10496                                  		; 12/01/2025
 10497 00006FCD 24DF                    		and	al, 0DFh
 10498 00006FCF 3C48                    		cmp	al, 'H'
 10499 00006FD1 7446                    		je	short .hw_info
 10500 00006FD3 3C42                    		cmp	al, 'B'
 10501 00006FD5 744C                    		je	short .b_info
 10502 00006FD7 E94BFFFFFF              		jmp	.playback_next
 10503                                  
 10504                                  .inc_volume:
 10505 00006FDC 8A0D[55A30000]          		mov	cl, [volume_level]
 10506 00006FE2 80F91F                  		cmp	cl, 1Fh ; 31
 10507 00006FE5 0F833CFFFFFF            		jnb	.playback_next
 10508 00006FEB FEC1                    		inc	cl
 10509                                  .chg_volume:
 10510 00006FED 880D[55A30000]          		mov	[volume_level], cl
 10511 00006FF3 88CD                    		mov	ch, cl
 10512                                  		; TRDOS 386 system call
 10513                                  		; sysstdio
 10514                                  		; Set master volume level
 10515                                  		; bh = 11
 10516                                  		; cl = left channel volume (0 to 31 max)
 10517                                  		; ch = right channel volume (0 to 31 max)
 10518                                  		sys	_audio, 0B00h
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00006FF5 BB000B0000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00006FFA B820000000          <1>  mov eax, %1
   133                              <1> 
   134 00006FFF CD40                <1>  int 40h
 10519 00007001 E921FFFFFF              		jmp	.playback_next
 10520                                  .dec_volume:
 10521 00007006 8A0D[55A30000]          		mov	cl, [volume_level]
 10522 0000700C 80F901                  		cmp	cl, 1 ; 1
 10523 0000700F 0F8612FFFFFF            		jna	.playback_next
 10524 00007015 FEC9                    		dec	cl
 10525 00007017 EBD4                    		jmp	short .chg_volume
 10526                                  
 10527                                  		; 12/01/2025
 10528                                  .hw_info:
 10529 00007019 E816170000              		call	write_audio_dev_info
 10530 0000701E E904FFFFFF              		jmp	.playback_next
 10531                                  		; 12/01/2025
 10532                                  .b_info:
 10533 00007023 E8B7190000              		call	write_buffer_size
 10534 00007028 E9FAFEFFFF              		jmp	.playback_next
 10535                                  
 10536                                  
 10537                                  ; =============== S U B R O U T I N E =======================================
 10538                                  
 10539                                  		; 13/01/2025
 10540                                  		; 12/01/2025
 10541                                  		; 09/01/2025
 10542                                  		; 21/10/2024
 10543                                  try_enqueue_all_blocks:
 10544                                  		; 12/01/2025
 10545 0000702D 60                      		pusha
 10546 0000702E BF[00700500]             		mov	edi, sample_buffer
 10547                                  		; 10/01/2025
 10548                                  		;jmp	short .first_block
 10549                                  		; 13/01/2025
 10550 00007033 EB15                    		jmp	short try_enqueue_all_blocks_@
 10551                                  ;.next_block:
 10552                                  teab_next_block:
 10553 00007035 833D[D0420500]00                        cmp	dword [bytes_left], 0
 10554                                                  ;jle	short .enqueue_done
 10555                                  		; 13/01/2025
 10556 0000703C 7E56                    		jle	short teab_enqueue_done
 10557                                  		;
 10558 0000703E 8B3D[5C0A0100]          		mov	edi, [mp3_samples_dst]
 10559 00007044 033D[600A0100]          		add	edi, [mp3_samples_output_size]
 10560                                  
 10561                                  try_enqueue_all_blocks_@:
 10562                                  ;.first_block:
 10563                                  		;pusha
 10564 0000704A 8B35[CC420500]          		mov	esi, [stream_pos]
 10565 00007050 8B0D[D0420500]          		mov	ecx, [bytes_left]
 10566 00007056 31ED                    		xor	ebp, ebp
 10567 00007058 E849F2FFFF              		call	mp3_decode_frame
 10568                                  		;popa
 10569                                  		;jc	short .enqueue_done
 10570                                  		; 13/01/2025
 10571 0000705D 7235                    		jc	short teab_enqueue_done
 10572 0000705F A1[70B30000]            		mov	eax, [mp3_src_frame_size]
 10573 00007064 83F800                  		cmp	eax, 0
 10574                                  		;jz	short .enqueue_done
 10575                                  		; 13/01/2025
 10576 00007067 742B                    		jz	short teab_enqueue_done
 10577 00007069 0105[CC420500]          		add	[stream_pos], eax
 10578 0000706F 2905[D0420500]          		sub	[bytes_left], eax
 10579 00007075 A1[600A0100]            		mov	eax, [mp3_samples_output_size]
 10580 0000707A 83F800                  		cmp	eax, 0
 10581                                  		;jz	short .next_block
 10582                                  		; 13/01/2025
 10583 0000707D 74B6                    		jz	short teab_next_block
 10584                                  ;.no_error:
 10585 0000707F FE05[FC9A0000]          		inc	byte [num_enqueued_frames]
 10586 00007085 A0[FC9A0000]            		mov	al, [num_enqueued_frames]
 10587 0000708A 3A05[56A30000]          		cmp	al, [blocks]
 10588                                  		;jb	short .next_block
 10589                                  		; 13/01/2025
 10590 00007090 72A3                    		jb	short teab_next_block
 10591                                  teab_rtn:
 10592                                  ;.rtn:
 10593                                  		; 12/01/2025
 10594 00007092 61                      		popa
 10595 00007093 C3                      		retn
 10596                                  ;.enqueue_done:
 10597                                  teab_enqueue_done:
 10598 00007094 C705[D0420500]0000-                     mov	dword [bytes_left], 0
 10598 0000709C 0000               
 10599                                  		; 12/01/2025
 10600                                  		;jmp	short .rtn
 10601                                  		; 13/01/2025
 10602 0000709E EBF2                    		jmp	short teab_rtn
 10603                                  
 10604                                  
 10605                                  ; ---------------------------------------------------------------------------
 10606                                  ; 13/01/2025 - Interpolation procedures for non-VRA AC97 codecs
 10607                                  ; ---------------------------------------------------------------------------
 10608                                  
 10609                                  ; =============== S U B R O U T I N E =======================================
 10610                                  		
 10611                                  		; 30/01/2025
 10612                                  		; 15/01/2025
 10613                                  		; 14/01/2025
 10614                                  		; 13/01/2025
 10615                                  audio_system_init_x:
 10616 000070A0 8B0D[600A0100]          		mov	ecx, [mp3_samples_output_size]
 10617                                  		;;;
 10618                                  		; 15/01/2025
 10619 000070A6 89C8                    		mov	eax, ecx
 10620                                  		;mov	[loadsize], ecx
 10621                                  		;;;
 10622                                  		; 15/01/2025
 10623                                  		;shl	ecx, 3 ; * 8 ; 8 blocks
 10624                                  		; 14/01/2025
 10625                                  		;mov	byte [blocks], 8
 10626                                  
 10627 000070A8 803D[64A30000]02        		cmp	byte [interpolation], 2
 10628 000070AF 733B                    		jnb	short .chk_sample_rate	; interpolation needed
 10629                                  
 10630                                  		; 48 kHZ with 16 bit stereo conversion
 10631                                  		;
 10632                                  		; selected output is
 10633                                  		;	 8bit stereo or 16bit mono or 8bit mono
 10634                                  		; (but AC97 hardware needs 16bit stereo samples)
 10635                                  	
 10636                                  		; 15/01/2025
 10637                                  		;mov	eax, ecx
 10638 000070B1 D1E0                    		shl	eax, 1 ; * 2 (mono to stereo)
 10639                                  
 10640 000070B3 BB[4A740000]            		mov	ebx, convert_to_stereo
 10641 000070B8 803D[A0B30000]02        		cmp	byte [mp3_bytes_per_sample], 2
 10642 000070BF 7415                    		je	short .set_sizes ; 16bit mono
 10643                                  
 10644                                  		; 8bit output (16bit conversion is neeed)
 10645 000070C1 BB[79740000]            		mov	ebx, convert_to_16bit
 10646 000070C6 803D[98B30000]02        		cmp	byte [mp3_output_num_channels], 2
 10647 000070CD 7407                    		je	short .set_sizes ; 8bit stereo
 10648                                  		; 8bit mono output
 10649                                  		;shr	ecx, 1 ; / 2 ; 4 blocks
 10650                                  		; 14/01/2025
 10651 000070CF D1E0                    		shl	eax, 1
 10652                                  		; 14/01/2025
 10653                                  		;shr	byte [blocks], 1
 10654 000070D1 BB[95740000]            		mov	ebx, convert_to_stereo_16bit
 10655                                  .set_sizes:
 10656                                  .set_sizes_@:
 10657 000070D6 891D[5CA30000]          		mov	[conversion], ebx
 10658 000070DC 890D[60A30000]          		mov	[loadsize], ecx
 10659                                  		;;;
 10660                                  		; 14/01/2025
 10661                                  		; align to 16bit stereo (if there is a defect)
 10662                                  		; 15/01/2025
 10663                                  		;and	al, ~3
 10664 000070E2 A3[58A30000]            		mov	[buffer_size], eax
 10665 000070E7 E96F020000              		jmp	.asix_@
 10666                                  
 10667                                  		; 13/01/2025
 10668                                  		; ----------------------------
 10669                                  		; ref: playwav9.s - 18/12/2024
 10670                                  .chk_sample_rate:
 10671                                  		; set interpolation parameters
 10672                                  		; (for 8, 11.025, 16, 22.050, 24, 32, 44.1 kHZ)
 10673 000070EC A1[9CB30000]            		mov	eax, [mp3_output_sample_rate]
 10674                                  		; ecx = 8 * [mp3_samples_output_size] ; 8 blocks
 10675                                  .chk_44khz:
 10676 000070F1 3D44AC0000              		cmp	eax, 44100
 10677 000070F6 7545                    		jne	short .chk_32khz
 10678                                  		; 30/01/2025
 10679 000070F8 B819000000              		mov	eax, 25 ; *
 10680 000070FD 803D[A0B30000]01        		cmp	byte [mp3_bytes_per_sample], 1
 10681 00007104 7615                    		jna	short .chk_44khz_1
 10682 00007106 BB[D6800000]            		mov	ebx, load_44khz_stereo_16_bit
 10683 0000710B 803D[98B30000]01        		cmp	byte [mp3_output_num_channels], 1
 10684 00007112 751E                    		jne	short .chk_44khz_2
 10685 00007114 BB[87800000]            		mov	ebx, load_44khz_mono_16_bit
 10686                                  		;jmp	short .chk_44khz_2
 10687                                  		; 30/01/2025
 10688 00007119 EB15                    		jmp	short .chk_44khz_3
 10689                                  .chk_44khz_1:
 10690                                  		; 30/01/2025
 10691 0000711B D1E0                    		shl	eax, 1
 10692 0000711D BB[2F800000]            		mov	ebx, load_44khz_stereo_8_bit
 10693 00007122 803D[98B30000]01        		cmp	byte [mp3_output_num_channels], 1
 10694 00007129 7507                    		jne	short .chk_44khz_2
 10695 0000712B BB[DF7F0000]            		mov	ebx, load_44khz_mono_8_bit
 10696                                  .chk_44khz_3:
 10697                                  		; 30/01/2025
 10698 00007130 D1E0                    		shl	eax, 1
 10699                                  .chk_44khz_2:
 10700                                  		; 48000/44100 == 25/23
 10701 00007132 BD17000000              		mov	ebp, 23
 10702                                  		;mov	eax, 25 ; *
 10703 00007137 F7E1                    		mul	ecx  ; load (decoding buffer) size
 10704 00007139 F7F5                    		div	ebp
 10705                                  		;; eax = wav output buffer size
 10706                                  		; 15/01/2025
 10707                                  		; eax = 1 block output (converted) size
 10708 0000713B EB99                    		jmp	short .set_sizes
 10709                                  
 10710                                  		; 15/01/2025
 10711                                  ;		;;;
 10712                                  ;		; 14/01/2025
 10713                                  ;.set_sizes_@:
 10714                                  ;		cmp	ecx, 4608
 10715                                  ;		;ja	short .set_sizes
 10716                                  ;		; 15/01/2025
 10717                                  ;		jnb	short .set_sizes
 10718                                  ;		;shl	ecx, 1
 10719                                  ;		; ecx = [mp3_samples_output_size]
 10720                                  ;		shl	byte [blocks], 1
 10721                                  ;		; 15/01/2025
 10722                                  ;		;shl	eax, 1
 10723                                  ;		;jmp	short .set_sizes_@
 10724                                  ;		jmp	.set_sizes
 10725                                  		;;;
 10726                                  .chk_32khz:
 10727 0000713D 3D007D0000              		cmp	eax, 32000
 10728 00007142 7543                    		jne	short .chk_24khz
 10729                                  		; 30/01/2025
 10730 00007144 B803000000              		mov	eax, 3 ; *
 10731 00007149 803D[A0B30000]01        		cmp	byte [mp3_bytes_per_sample], 1
 10732 00007150 7615                    		jna	short .chk_32khz_1
 10733 00007152 BB[617C0000]            		mov	ebx, load_32khz_stereo_16_bit
 10734 00007157 803D[98B30000]01        		cmp	byte [mp3_output_num_channels], 1
 10735 0000715E 751E                    		jne	short .chk_32khz_2
 10736 00007160 BB[217C0000]            		mov	ebx, load_32khz_mono_16_bit
 10737                                  		;jmp	short .chk_32khz_2
 10738                                  		; 30/01/2025
 10739 00007165 EB15                    		jmp	short .chk_32khz_3
 10740                                  .chk_32khz_1:
 10741                                  		; 30/01/2025
 10742 00007167 D1E0                    		shl	eax, 1
 10743 00007169 BB[A97B0000]            		mov	ebx, load_32khz_stereo_8_bit
 10744 0000716E 803D[98B30000]01        		cmp	byte [mp3_output_num_channels], 1
 10745 00007175 7507                    		jne	short .chk_32khz_2
 10746 00007177 BB[627B0000]            		mov	ebx, load_32khz_mono_8_bit
 10747                                  .chk_32khz_3:
 10748                                  		; 30/01/2025
 10749 0000717C D1E0                    		shl	eax, 1
 10750                                  .chk_32khz_2:
 10751                                  		; 48000/32000 = 3/2
 10752                                  		;mov	eax, 3 ; *
 10753 0000717E F7E1                    		mul	ecx 	; *3
 10754                                  		;mov	eax, ecx
 10755                                  		;add	eax, eax
 10756                                  		;add	eax, ecx
 10757 00007180 D1E8                    		shr	eax, 1  ; /2
 10758 00007182 E94FFFFFFF              		jmp	.set_sizes
 10759                                  .chk_24khz:
 10760 00007187 3DC05D0000              		cmp	eax, 24000
 10761 0000718C 753E                    		jne	short .chk_22khz
 10762                                  		; 30/01/2025
 10763 0000718E 89C8                    		mov	eax, ecx ; *
 10764 00007190 803D[A0B30000]01        		cmp	byte [mp3_bytes_per_sample], 1
 10765 00007197 7615                    		jna	short .chk_24khz_1
 10766                                  		; 14/01/2025 
 10767                                  		; bx -> ebx
 10768                                  		; (BugFix, 'playwav9.s' has a bug here) 
 10769 00007199 BB[007B0000]            		mov	ebx, load_24khz_stereo_16_bit
 10770 0000719E 803D[98B30000]01        		cmp	byte [mp3_output_num_channels], 1
 10771 000071A5 751E                    		jne	short .chk_24khz_2
 10772 000071A7 BB[C47A0000]            		mov	ebx, load_24khz_mono_16_bit
 10773                                  		;jmp	short .chk_24khz_2
 10774                                  		; 30/01/2025
 10775 000071AC EB15                    		jmp	short .chk_24khz_3
 10776                                  .chk_24khz_1:
 10777                                  		; 30/01/2025
 10778 000071AE D1E0                    		shl	eax, 1
 10779 000071B0 BB[5F7A0000]            		mov	ebx, load_24khz_stereo_8_bit
 10780 000071B5 803D[98B30000]01        		cmp	byte [mp3_output_num_channels], 1
 10781 000071BC 7507                    		jne	short .chk_24khz_2
 10782 000071BE BB[247A0000]            		mov	ebx, load_24khz_mono_8_bit
 10783                                  .chk_24khz_3:
 10784                                  		; 30/01/2025
 10785 000071C3 D1E0                    		shl	eax, 1
 10786                                  .chk_24khz_2:
 10787                                  		; 48000/24000 = 2/1
 10788                                  		;mov	eax, ecx ; *
 10789 000071C5 D1E0                    		shl	eax, 1
 10790 000071C7 E90AFFFFFF              		jmp	.set_sizes_@
 10791                                  .chk_22khz:
 10792 000071CC 3D22560000              		cmp	eax, 22050
 10793 000071D1 7548                    		jne	short .chk_16khz
 10794                                  		; 30/01/2025
 10795 000071D3 B825000000              		mov	eax, 37 ; *
 10796 000071D8 803D[A0B30000]01        		cmp	byte [mp3_bytes_per_sample], 1
 10797 000071DF 7615                    		jna	short .chk_22khz_1
 10798 000071E1 BB[EE7D0000]            		mov	ebx, load_22khz_stereo_16_bit
 10799 000071E6 803D[98B30000]01        		cmp	byte [mp3_output_num_channels], 1
 10800 000071ED 751E                    		jne	short .chk_22khz_2
 10801 000071EF BB[8B7D0000]            		mov	ebx, load_22khz_mono_16_bit
 10802                                  		;jmp	short .chk_22khz_2
 10803                                  		; 30/01/2025
 10804 000071F4 EB15                    		jmp	short .chk_22khz_3
 10805                                  .chk_22khz_1:
 10806                                  		; 30/01/2025
 10807 000071F6 D1E0                    		shl	eax, 1
 10808 000071F8 BB[297D0000]            		mov	ebx, load_22khz_stereo_8_bit
 10809 000071FD 803D[98B30000]01        		cmp	byte [mp3_output_num_channels], 1
 10810 00007204 7507                    		jne	short .chk_22khz_2
 10811 00007206 BB[CC7C0000]            		mov	ebx, load_22khz_mono_8_bit
 10812                                  .chk_22khz_3:
 10813                                  		; 30/01/2025
 10814 0000720B D1E0                    		shl	eax, 1
 10815                                  .chk_22khz_2:
 10816                                  		; 48000/22050 == 37/17
 10817 0000720D BD11000000              		mov	ebp, 17
 10818                                  		;mov	eax, 37 ; *
 10819 00007212 F7E1                    		mul	ecx  ; load (decoding buffer) size
 10820 00007214 F7F5                    		div	ebp
 10821                                  		;; eax = wav output buffer size
 10822                                  		; 15/01/2025
 10823                                  		; eax = 1 block output (converted) size
 10824 00007216 E9BBFEFFFF              		jmp	.set_sizes_@
 10825                                  .chk_16khz:
 10826 0000721B 3D803E0000              		cmp	eax, 16000
 10827 00007220 7540                    		jne	short .chk_11khz
 10828                                  		; 30/01/2025
 10829 00007222 89C8                    		mov	eax, ecx ; *
 10830 00007224 D1E0                    		shl	eax, 1
 10831 00007226 01C8                    		add	eax, ecx
 10832 00007228 803D[A0B30000]01        		cmp	byte [mp3_bytes_per_sample], 1
 10833 0000722F 7615                    		jna	short .chk_16khz_1
 10834 00007231 BB[73790000]            		mov	ebx, load_16khz_stereo_16_bit
 10835 00007236 803D[98B30000]01        		cmp	byte [mp3_output_num_channels], 1
 10836 0000723D 751E                    		jne	short .chk_16khz_2
 10837 0000723F BB[1C790000]            		mov	ebx, load_16khz_mono_16_bit
 10838                                  		;jmp	short .chk_16khz_2
 10839                                  		; 30/01/2025
 10840 00007244 EB15                    		jmp	short .chk_16khz_3
 10841                                  .chk_16khz_1:
 10842                                  		; 30/01/2025
 10843 00007246 D1E0                    		shl	eax, 1
 10844 00007248 BB[87780000]            		mov	ebx, load_16khz_stereo_8_bit
 10845 0000724D 803D[98B30000]01        		cmp	byte [mp3_output_num_channels], 1
 10846 00007254 7507                    		jne	short .chk_16khz_2
 10847 00007256 BB[34780000]            		mov	ebx, load_16khz_mono_8_bit
 10848                                  .chk_16khz_3:
 10849                                  		; 30/01/2025
 10850 0000725B D1E0                    		shl	eax, 1
 10851                                  .chk_16khz_2:
 10852                                  		; 48000/16000 = 3/1
 10853                                  		;mov	eax, ecx ; *
 10854                                  		;shl	eax, 1
 10855                                  		;;add	eax, eax
 10856                                  		;add	eax, ecx
 10857 0000725D E974FEFFFF              		jmp	.set_sizes_@
 10858                                  .chk_11khz:
 10859 00007262 3D112B0000              		cmp	eax, 11025
 10860 00007267 7548                    		jne	short .chk_8khz
 10861                                  		; 30/01/2025
 10862 00007269 B84A000000              		mov	eax, 74
 10863 0000726E 803D[A0B30000]01        		cmp	byte [mp3_bytes_per_sample], 1
 10864 00007275 7615                    		jna	short .chk_11khz_1
 10865 00007277 BB[6F7F0000]            		mov	ebx, load_11khz_stereo_16_bit
 10866 0000727C 803D[98B30000]01        		cmp	byte [mp3_output_num_channels], 1
 10867 00007283 751E                    		jne	short .chk_11khz_2
 10868 00007285 BB[1B7F0000]            		mov	ebx, load_11khz_mono_16_bit
 10869                                  		;jmp	short .chk_11khz_2
 10870                                  		; 30/01/2025
 10871 0000728A EB15                    		jmp	short .chk_11khz_3
 10872                                  .chk_11khz_1:
 10873                                  		; 30/01/2025
 10874 0000728C D1E0                    		shl	eax, 1
 10875 0000728E BB[C17E0000]            		mov	ebx, load_11khz_stereo_8_bit
 10876 00007293 803D[98B30000]01        		cmp	byte [mp3_output_num_channels], 1
 10877 0000729A 7507                    		jne	short .chk_11khz_2
 10878 0000729C BB[7A7E0000]            		mov	ebx, load_11khz_mono_8_bit
 10879                                  .chk_11khz_3:
 10880                                  		; 30/01/2025
 10881 000072A1 D1E0                    		shl	eax, 1
 10882                                  .chk_11khz_2:
 10883                                  		; 48000/11025 == 74/17
 10884                                  		; 14/01/2025
 10885                                  		;shr	ecx, 1	; 4 blocks
 10886                                  		;shr	byte [blocks], 1
 10887 000072A3 BD11000000              		mov	ebp, 17
 10888                                  		;mov	eax, 74 ; *
 10889 000072A8 F7E1                    		mul	ecx  ; load (decoding buffer) size
 10890 000072AA F7F5                    		div	ebp
 10891                                  		;; eax = wav output buffer size
 10892                                  		; 15/01/2025
 10893                                  		; eax = 1 block output (converted) size
 10894 000072AC E925FEFFFF              		jmp	.set_sizes_@
 10895                                  .chk_8khz:
 10896 000072B1 3D401F0000              		cmp	eax, 8000
 10897                                  		;jne	short .vra_needed
 10898                                  		; 01/02/2025
 10899 000072B6 7541                    		jne	short .chk_12khz
 10900                                  		; 30/01/2025
 10901 000072B8 B806000000              		mov	eax, 6 ; *
 10902 000072BD 803D[A0B30000]01        		cmp	byte [mp3_bytes_per_sample], 1
 10903 000072C4 7615                    		jna	short .chk_8khz_1
 10904 000072C6 BB[0E770000]            		mov	ebx, load_8khz_stereo_16_bit
 10905 000072CB 803D[98B30000]01        		cmp	byte [mp3_output_num_channels], 1
 10906 000072D2 751E                    		jne	short .chk_8khz_2
 10907 000072D4 BB[6C760000]            		mov	ebx, load_8khz_mono_16_bit
 10908                                  		;jmp	short .chk_8khz_2
 10909                                  		; 30/01/2025
 10910 000072D9 EB15                    		jmp	short .chk_8khz_3
 10911                                  .chk_8khz_1:
 10912                                  		; 30/01/2025
 10913 000072DB D1E0                    		shl	eax, 1
 10914 000072DD BB[5C750000]            		mov	ebx, load_8khz_stereo_8_bit
 10915 000072E2 803D[98B30000]01        		cmp	byte [mp3_output_num_channels], 1
 10916 000072E9 7507                    		jne	short .chk_8khz_2
 10917 000072EB BB[B3740000]            		mov	ebx, load_8khz_mono_8_bit
 10918                                  .chk_8khz_3:
 10919                                  		; 30/01/2025
 10920 000072F0 D1E0                    		shl	eax, 1
 10921                                  .chk_8khz_2:
 10922                                  		;mov	eax, 6 ; *
 10923 000072F2 F7E1                    		mul	ecx
 10924 000072F4 E9DDFDFFFF              		jmp	.set_sizes_@
 10925                                  
 10926                                  		;;;;
 10927                                  		; 01/02/2025
 10928                                  .chk_12khz:
 10929 000072F9 3DE02E0000              		cmp	eax, 12000
 10930 000072FE 753F                    		jne	short .vra_needed
 10931 00007300 89C8                    		mov	eax, ecx ; *
 10932 00007302 803D[A0B30000]01        		cmp	byte [mp3_bytes_per_sample], 1
 10933 00007309 7615                    		jna	short .chk_12khz_1
 10934 0000730B BB[A7810000]            		mov	ebx, load_12khz_stereo_16_bit
 10935 00007310 803D[98B30000]01        		cmp	byte [mp3_output_num_channels], 1
 10936 00007317 751E                    		jne	short .chk_12khz_2
 10937 00007319 BB[7D810000]            		mov	ebx, load_12khz_mono_16_bit
 10938 0000731E EB15                    		jmp	short .chk_12khz_3
 10939                                  .chk_12khz_1:
 10940 00007320 D1E0                    		shl	eax, 1
 10941 00007322 BB[51810000]            		mov	ebx, load_12khz_stereo_8_bit
 10942 00007327 803D[98B30000]01        		cmp	byte [mp3_output_num_channels], 1
 10943 0000732E 7507                    		jne	short .chk_12khz_2
 10944 00007330 BB[30810000]            		mov	ebx, load_12khz_mono_8_bit
 10945                                  .chk_12khz_3:
 10946 00007335 D1E0                    		shl	eax, 1
 10947                                  .chk_12khz_2:
 10948                                  		; 48000/12000 = 4/1
 10949                                  		;mov	eax, ecx ; *
 10950 00007337 C1E002                  		shl	eax, 2
 10951 0000733A E997FDFFFF              		jmp	.set_sizes_@
 10952                                  		;;;;
 10953                                  
 10954                                  .vra_needed:
 10955 0000733F 58                      		pop	eax ; discard return address to the caller
 10956                                  .vra_err:
 10957                                  		sys	_msg, msg_no_vra, 255, 0Fh
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00007340 BB[DB8B0000]        <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126 00007345 B9FF000000          <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128 0000734A BA0F000000          <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 0000734F B823000000          <1>  mov eax, %1
   133                              <1> 
   134 00007354 CD40                <1>  int 40h
 10958 00007356 E9F6F8FFFF              		jmp	ExitProcess
 10959                                  
 10960                                  .asix_@:
 10961                                  		; TRDOS 386 system call
 10962                                  		; sysaudio
 10963                                  		; Allocate audio buffer (for user)
 10964                                  		; ebx = 0200h (BH=2)
 10965                                  		; ecx = buffer size (in bytes)
 10966                                  		; edx = buffer address (virtual)
 10967                                  
 10968                                  		sys	_audio, 0200h, [buffer_size], sample_buffer
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 0000735B BB00020000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126 00007360 8B0D[58A30000]      <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128 00007366 BA[00700500]        <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 0000736B B820000000          <1>  mov eax, %1
   133                              <1> 
   134 00007370 CD40                <1>  int 40h
 10969 00007372 7228                    		jc	short .init_err
 10970                                  
 10971                                  		; 12/01/2025
 10972                                  		; clear audio buffer (before playback)
 10973 00007374 BF[00700500]            		mov	edi, sample_buffer
 10974                                  		; ecx = buffer size in bytes
 10975 00007379 83C103                  		add	ecx, 3	; 13/01/2025
 10976 0000737C C1E902                  		shr	ecx, 2
 10977 0000737F 31C0                    		xor	eax, eax
 10978 00007381 F3AB                    		rep	stosd
 10979                                  
 10980                                  		; TRDOS 386 system call
 10981                                  		; sysaudio
 10982                                  		; Initialize audio device (bh = 3)
 10983                                  		; bl = 01h -> CallBack method
 10984                                  		; edx = Callback service address (virtual)
 10985                                  		; ecx = 0 ; CL = srb value ; not used
 10986                                  		sys	_audio, 0301h, 0, audio_callback_x ; 13/01/2025
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00007383 BB01030000          <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126 00007388 B900000000          <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128 0000738D BA[2B740000]        <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00007392 B820000000          <1>  mov eax, %1
   133                              <1> 
   134 00007397 CD40                <1>  int 40h
 10987                                  		; 12/01/2025
 10988                                  		; SRB method (faster than callback method)
 10989                                  		; bl = 0 -> Signal Response Byte method
 10990                                  		; cl = 1 -> SRB set value 
 10991                                  		;     (will be set by audio IRQ service of the kernel)
 10992                                  		; edx = SRB address -one byte data-
 10993                                  		;sys	_audio, 0300h, 1, srb	
 10994 00007399 7201                    		jc	short .init_err
 10995 0000739B C3                      		retn
 10996                                  .init_err:
 10997 0000739C E9C9FAFFFF              		jmp	init_error
 10998                                  
 10999                                  
 11000                                  ; =============== S U B R O U T I N E =======================================
 11001                                  
 11002                                  		; 14/01/2025
 11003                                  		; 13/01/2025
 11004                                  mp3_cast_to_speaker_x:
 11005                                  ; 13/01/2025
 11006                                  %if 0
 11007                                  		; Start	to play
 11008                                  		mov	eax, [mp3_bytes_per_sample]
 11009                                  		;shr	al, 1 ; 8 -> 0, 16 -> 1
 11010                                  		;shl	al, 1 ; 16 -> 2, 8 -> 0
 11011                                  		and	al, 2
 11012                                  		mov	ebx, [mp3_output_num_channels]
 11013                                  		dec	ebx
 11014                                  		or	bl, al
 11015                                  		mov	ecx, [mp3_output_sample_rate]
 11016                                  		mov	bh, 4 ; start to play
 11017                                  %else
 11018                                  		; 48 kHZ, 16bit, stereo
 11019 000073A1 BB03040000              		mov	ebx, 0403h
 11020 000073A6 B980BB0000              		mov	ecx, 48000
 11021                                  		; 14/01/2025
 11022 000073AB 803D[51A30000]01        		cmp	byte [vra], 1
 11023 000073B2 7206                    		jb	short .jmpto@
 11024 000073B4 8B0D[9CB30000]          		mov	ecx, [mp3_output_sample_rate] 
 11025                                  .jmpto@:
 11026                                  %endif
 11027 000073BA E915FBFFFF              		jmp	mp3_cast_to_speaker_@
 11028                                  
 11029                                  
 11030                                  ; =============== S U B R O U T I N E =======================================
 11031                                  
 11032                                  		; 15/01/2025
 11033                                  		; 13/01/2025
 11034                                  try_enqueue_all_blocks_x:
 11035                                  		; 12/01/2025
 11036 000073BF 60                      		pusha
 11037 000073C0 BF[00500500]             		mov	edi, decoding_buffer
 11038                                  		; 15/01/2025
 11039                                  		;jmp	try_enqueue_all_blocks_@
 11040 000073C5 EB15                    		jmp	short .first_block
 11041                                  
 11042                                  		; 15/01/2025
 11043                                  .next_block:
 11044 000073C7 833D[D0420500]00                        cmp	dword [bytes_left], 0
 11045 000073CE 7E4F                                    jle	short .enqueue_done
 11046                                  		;
 11047 000073D0 8B3D[5C0A0100]          		mov	edi, [mp3_samples_dst]
 11048 000073D6 033D[600A0100]          		add	edi, [mp3_samples_output_size]
 11049                                  
 11050                                  ;try_enqueue_all_blocks_@:
 11051                                  .first_block:
 11052                                  		;pusha
 11053 000073DC 8B35[CC420500]          		mov	esi, [stream_pos]
 11054 000073E2 8B0D[D0420500]          		mov	ecx, [bytes_left]
 11055 000073E8 31ED                    		xor	ebp, ebp
 11056 000073EA E8B7EEFFFF              		call	mp3_decode_frame
 11057                                  		;popa
 11058 000073EF 722E                    		jc	short .enqueue_done
 11059                                  
 11060 000073F1 A1[70B30000]            		mov	eax, [mp3_src_frame_size]
 11061 000073F6 83F800                  		cmp	eax, 0
 11062 000073F9 7424                    		jz	short .enqueue_done
 11063 000073FB 0105[CC420500]          		add	[stream_pos], eax
 11064 00007401 2905[D0420500]          		sub	[bytes_left], eax
 11065                                  
 11066 00007407 A1[600A0100]            		mov	eax, [mp3_samples_output_size]
 11067 0000740C 83F800                  		cmp	eax, 0
 11068 0000740F 74B6                    		jz	short .next_block
 11069                                  
 11070                                  		; 15/01/2025
 11071 00007411 FF15[5CA30000]          		call	dword [conversion]
 11072                                  .no_error:
 11073                                  		; 15/01/2025
 11074 00007417 FE05[FC9A0000]          		inc	byte [num_enqueued_frames]
 11075                                  .rtn:
 11076                                  		; 12/01/2025
 11077 0000741D 61                      		popa
 11078 0000741E C3                      		retn
 11079                                  .enqueue_done:
 11080 0000741F C705[D0420500]0000-                     mov	dword [bytes_left], 0
 11080 00007427 0000               
 11081                                  		; 12/01/2025
 11082 00007429 EBF2                    		jmp	short .rtn
 11083                                  
 11084                                  
 11085                                  ; =============== S U B R O U T I N E =======================================
 11086                                  
 11087                                  		; 13/01/2025
 11088                                  audio_callback_x:
 11089                                  		; Operating system has directed CPU here because of
 11090                                  		; user (2nd) stage of the audio hardware interrupt service.
 11091                                  		; This procedure must be short and return to operating
 11092                                  		; system again via sysrelease system call
 11093                                  		; (or any system call here will be handled as sysrelease).
 11094                                  
 11095 0000742B C605[54A30000]01        		mov	byte [srb], 1
 11096                                  
 11097 00007432 E888FFFFFF              		call	try_enqueue_all_blocks_x
 11098                                  
 11099                                  		; 15/01/2025
 11100                                  		;call	dword [conversion]
 11101                                  
 11102                                  		sys	_rele ; return from callback service 
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124                              <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00007437 B827000000          <1>  mov eax, %1
   133                              <1> 
   134 0000743C CD40                <1>  int 40h
 11103                                  		
 11104                                  		; we must not come here !
 11105 0000743E BBFFFFFFFF              		mov	ebx, -1
 11106                                  		sys	_exit
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124                              <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126                              <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128                              <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00007443 B801000000          <1>  mov eax, %1
   133                              <1> 
   134 00007448 CD40                <1>  int 40h
 11107                                  		;jmp	short audio_callback
 11108                                  
 11109                                  
 11110                                  ; ---------------------------------------------------------------------------
 11111                                  ; 13/01/2025 - Interpolation procedures for non-VRA AC97 codecs
 11112                                  ; ---------------------------------------------------------------------------
 11113                                  ; ref: playwav9.s - 18/12/2025
 11114                                  
 11115                                  
 11116                                  ; 13/01/2025
 11117                                  ; --------------------------------------------------------
 11118                                  ; 48 kHZ conversion procedures
 11119                                  ; --------------------------------------------------------
 11120                                  ; convert_to_stereo: convert 16bit mono samples to 16bit stereo
 11121                                  ; convert_to_16bit: convert 8bit stereo samples to 16bit stereo	
 11122                                  ; convert_to_stereo_16bit: convert 8bit mono samples to 16bit & stereo
 11123                                  ; [loadsize] = decoding buffer size
 11124                                  ; [buffer_size] = wav output buffer size (<= 64KB)
 11125                                  
 11126                                  ; /////
 11127                                  
 11128                                  	; 13/01/2025
 11129                                  convert_to_stereo:
 11130 0000744A BE[00500500]            	mov	esi, decoding_buffer ; (contains 16bit mono samples)
 11131 0000744F BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 11132 00007454 8B0D[60A30000]          	mov	ecx, [loadsize]
 11133 0000745A D1E9                    	shr	ecx, 1 ; word count
 11134                                  cts_1:
 11135 0000745C 66AD                    	lodsw
 11136 0000745E 66AB                    	stosw	; left channel
 11137 00007460 66AB                    	stosw	; right channel
 11138 00007462 E2F8                    	loop	cts_1
 11139                                  cts_2:
 11140                                  	; padfill
 11141 00007464 8B0D[58A30000]          	mov	ecx, [buffer_size] 
 11142 0000746A 81C1[00700500]          	add	ecx, sample_buffer
 11143 00007470 29F9                    	sub	ecx, edi
 11144 00007472 7604                    	jna	short cts_3
 11145 00007474 31C0                    	xor	eax, eax
 11146 00007476 F3AA                    	rep	stosb
 11147                                  cts_3:
 11148 00007478 C3                      	retn
 11149                                  
 11150                                  ; /////
 11151                                  
 11152                                  	; 13/01/2025
 11153                                  convert_to_16bit:
 11154 00007479 BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 11155 0000747E BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 11156 00007483 8B0D[60A30000]          	mov	ecx, [loadsize]
 11157                                  ct16b_1:
 11158                                  	; stereo & 8 bit
 11159 00007489 AC                      	lodsb
 11160 0000748A 2C80                    	sub	al, 80h ; 08/11/2023
 11161 0000748C C1E008                  	shl	eax, 8 ; convert 8 bit sample to 16 bit sample
 11162 0000748F 66AB                    	stosw
 11163 00007491 E2F6                    	loop	ct16b_1
 11164 00007493 EBCF                    	jmp	short cts_2
 11165                                  
 11166                                  ; /////
 11167                                  
 11168                                  	; 13/01/2025
 11169                                  convert_to_stereo_16bit:
 11170 00007495 BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit mono samples)
 11171 0000749A BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 11172 0000749F 8B0D[60A30000]          	mov	ecx, [loadsize]
 11173                                  cts16b_1:
 11174                                  	; mono & 8 bit
 11175 000074A5 AC                      	lodsb
 11176 000074A6 2C80                    	sub	al, 80h ; 08/11/2023
 11177 000074A8 C1E008                  	shl	eax, 8 ; convert 8 bit sample to 16 bit sample
 11178 000074AB 66AB                    	stosw	; left channel
 11179 000074AD 66AB                    	stosw	; right channel
 11180 000074AF E2F4                    	loop	cts16b_1
 11181 000074B1 EBB1                    	jmp	short cts_2
 11182                                  
 11183                                  ; /////
 11184                                  
 11185                                  ; --------------------------------------------------------
 11186                                  ; 13/01/2025
 11187                                  ; --------------------------------------------------------
 11188                                  
 11189                                  ; 13/01/2025 - mp3player modifications (mp3play3.s)
 11190                                  ; 07/12/2024 - playwav9.s
 11191                                  ; 01/12/2024 - ac97play.s
 11192                                  ; 29/05/2024
 11193                                  ; 26/11/2023
 11194                                  ; 25/11/2023 - playwav6.s (32 bit registers, TRDOS 386 adaption)
 11195                                  ; 15/11/2023 - PLAYWAV5.COM, ich_wav5.asm
 11196                                  ; 14/11/2023
 11197                                  ; 13/11/2023 - Erdogan Tan - (VRA, sample rate conversion)
 11198                                  ; --------------------------------------------------------
 11199                                  
 11200                                  ;;Note:	At the end of every buffer load,
 11201                                  ;;	during buffer switch/swap, there will be discontinuity
 11202                                  ;;	between the last converted sample and the 1st sample
 11203                                  ;;	of the next buffer.
 11204                                  ;;	(like as a dot noises vaguely between normal sound samples)
 11205                                  ;;	-To avoid this defect, the 1st sample of
 11206                                  ;;	the next buffer may be read from the wav file but
 11207                                  ;;	the file pointer would need to be set to 1 sample back
 11208                                  ;;	again via seek system call. Time comsumption problem! -
 11209                                  ;;
 11210                                  ;;	Erdogan Tan - 15/11/2023
 11211                                  ;;
 11212                                  ;;	((If entire wav data would be loaded at once.. conversion
 11213                                  ;;	defect/noise would disappear.. but for DOS, to keep
 11214                                  ;;	64KB buffer limit is important also it is important
 11215                                  ;;	for running under 1MB barrier without HIMEM.SYS or DPMI.
 11216                                  ;;	I have tested this program by using 2-30MB wav files.))
 11217                                  ;;
 11218                                  ;;	Test Computer:	ASUS desktop/mainboard, M2N4-SLI, 2010.
 11219                                  ;;			AMD Athlon 64 X2 2200 MHZ CPU.
 11220                                  ;;		       	NFORCE4 (CK804) AC97 audio hardware.
 11221                                  ;;			Realtek ALC850 codec.
 11222                                  ;;		       	Retro DOS v4.2 (MSDOS 6.22) operating system.
 11223                                  
 11224                                  load_8khz_mono_8_bit:
 11225                                  	; 13/01/2025 (mp3play3.s)
 11226 000074B3 BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 11227 000074B8 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 11228 000074BD 8B0D[60A30000]          	mov	ecx, [loadsize]
 11229                                  	; 13/01/2025
 11230                                  lff8m_1:
 11231 000074C3 AC                      	lodsb
 11232 000074C4 A2[2B870000]            	mov	[previous_val], al
 11233 000074C9 2C80                    	sub	al, 80h
 11234 000074CB 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 11235 000074CF 66AB                    	stosw		; original sample (left channel)
 11236 000074D1 66AB                    	stosw		; original sample (right channel)
 11237                                  	;xor	eax, eax
 11238 000074D3 B080                    	mov	al, 80h
 11239 000074D5 49                      	dec	ecx
 11240 000074D6 7402                    	jz	short lff8m_2
 11241 000074D8 8A06                    	mov	al, [esi]
 11242                                  lff8m_2:
 11243                                  	;mov	[next_val], ax
 11244 000074DA 88C7                    	mov	bh, al	; [next_val]
 11245 000074DC 8A25[2B870000]          	mov	ah, [previous_val]
 11246 000074E2 00E0                    	add	al, ah	; [previous_val]
 11247 000074E4 D0D8                    	rcr	al, 1
 11248 000074E6 88C2                    	mov	dl, al	; this is interpolated middle (3th) sample
 11249 000074E8 00E0                    	add	al, ah	; [previous_val]
 11250 000074EA D0D8                    	rcr	al, 1	
 11251 000074EC 88C3                    	mov	bl, al 	; this is temporary interpolation value
 11252 000074EE 00E0                    	add	al, ah	; [previous_val]
 11253 000074F0 D0D8                    	rcr	al, 1
 11254 000074F2 2C80                    	sub	al, 80h
 11255 000074F4 66C1E008                	shl	ax, 8	
 11256 000074F8 66AB                    	stosw		; this is 1st interpolated sample (L)
 11257 000074FA 66AB                    	stosw		; this is 1st interpolated sample (R)
 11258 000074FC 88D8                    	mov	al, bl
 11259 000074FE 00D0                    	add	al, dl
 11260 00007500 D0D8                    	rcr	al, 1
 11261 00007502 2C80                    	sub	al, 80h
 11262 00007504 66C1E008                	shl	ax, 8
 11263 00007508 66AB                    	stosw		; this is 2nd interpolated sample (L)
 11264 0000750A 66AB                    	stosw		; this is 2nd interpolated sample (R)
 11265 0000750C 88D0                    	mov	al, dl
 11266 0000750E 2C80                    	sub	al, 80h
 11267 00007510 66C1E008                	shl	ax, 8
 11268 00007514 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
 11269 00007516 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
 11270                                  	;mov	al, [next_val]
 11271 00007518 88F8                    	mov	al, bh
 11272 0000751A 00D0                    	add	al, dl
 11273 0000751C D0D8                    	rcr	al, 1
 11274 0000751E 88C3                    	mov	bl, al	; this is temporary interpolation value
 11275 00007520 00D0                    	add	al, dl
 11276 00007522 D0D8                    	rcr	al, 1
 11277 00007524 2C80                    	sub	al, 80h
 11278 00007526 66C1E008                	shl	ax, 8
 11279 0000752A 66AB                    	stosw		; this is 4th interpolated sample (L)
 11280 0000752C 66AB                    	stosw		; this is 4th interpolated sample (R)
 11281                                  	;mov	al, [next_val]
 11282 0000752E 88F8                    	mov	al, bh
 11283 00007530 00D8                    	add	al, bl
 11284 00007532 D0D8                    	rcr	al, 1
 11285 00007534 2C80                    	sub	al, 80h
 11286 00007536 66C1E008                	shl	ax, 8
 11287 0000753A 66AB                    	stosw		; this is 5th interpolated sample (L)
 11288 0000753C 66AB                    	stosw		; this is 5th interpolated sample (R)
 11289                                  	; 8 kHZ mono to 48 kHZ stereo conversion of the sample is OK
 11290 0000753E 09C9                    	or	ecx, ecx
 11291 00007540 7581                    	jnz	short lff8m_1
 11292                                  
 11293                                  	; --------------
 11294                                  
 11295                                  lff8s_3:
 11296                                  lff8m_3:
 11297                                  lff8s2_3:
 11298                                  lff8m2_3:
 11299                                  lff16s_3:
 11300                                  lff16m_3:
 11301                                  lff16s2_3:
 11302                                  lff16m2_3:
 11303                                  lff24_3:
 11304                                  lff32_3:
 11305                                  lff44_3:
 11306                                  lff22_3:
 11307                                  lff11_3:
 11308                                  lff12_3: 	; 01/02/2025
 11309                                  	; 08/12/2024 (BugFix)
 11310                                  	; 31/05/2024 (BugFix)
 11311 00007542 8B0D[58A30000]          	mov	ecx, [buffer_size] ; 16 bit (48 kHZ, stereo) samples
 11312                                  	;shl	ecx, 1	; byte count ; Bug !
 11313                                  	; 08/12/2024
 11314                                  	;add	ecx, audio_buffer
 11315                                  	; 13/01/2025 (mp3play3.s)
 11316 00007548 81C1[00700500]          	add	ecx, sample_buffer
 11317 0000754E 29F9                    	sub	ecx, edi
 11318 00007550 7609                    	jna	short lff8m_4 ; jbe
 11319 00007552 29F9                    	sub	ecx, edi
 11320                                  	;inc	ecx
 11321 00007554 C1E902                  	shr	ecx, 2
 11322 00007557 31C0                    	xor	eax, eax ; fill (remain part of) buffer with zeros
 11323 00007559 F3AB                    	rep	stosd
 11324                                  lff8m_4:
 11325                                  	; 31/05/2024 (BugFix)
 11326                                  	; cf=1 ; Bug !
 11327                                  	; 08/12/2024
 11328                                  	;clc
 11329 0000755B C3                      	retn
 11330                                  
 11331                                  ; --------------------------------------------------------
 11332                                  
 11333                                  load_8khz_stereo_8_bit:
 11334                                  	; 13/01/2025 (mp3play3.s)
 11335 0000755C BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 11336 00007561 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 11337 00007566 8B0D[60A30000]          	mov	ecx, [loadsize]
 11338                                  	; 13/01/2025
 11339 0000756C D1E9                    	shr	ecx, 1	; word count
 11340                                  lff8s_1:
 11341 0000756E AC                      	lodsb
 11342 0000756F A2[2B870000]            	mov	[previous_val_l], al
 11343 00007574 2C80                    	sub	al, 80h
 11344 00007576 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 11345 0000757A 66AB                    	stosw		; original sample (L)
 11346 0000757C AC                      	lodsb
 11347 0000757D A2[2D870000]            	mov	[previous_val_r], al
 11348 00007582 2C80                    	sub	al, 80h
 11349 00007584 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 11350 00007588 66AB                    	stosw		; original sample (R)
 11351                                  
 11352                                  	;xor	eax, eax
 11353 0000758A 66B88080                	mov	ax, 8080h
 11354 0000758E 49                      	dec	ecx
 11355 0000758F 7403                    	jz	short lff8s_2
 11356                                  		; convert 8 bit sample to 16 bit sample
 11357 00007591 668B06                  	mov	ax, [esi]
 11358                                  lff8s_2:
 11359 00007594 A2[2F870000]            	mov	[next_val_l], al
 11360 00007599 8825[31870000]          	mov	[next_val_r], ah
 11361 0000759F 8A25[2B870000]          	mov	ah, [previous_val_l]
 11362 000075A5 00E0                    	add	al, ah
 11363 000075A7 D0D8                    	rcr	al, 1
 11364 000075A9 88C2                    	mov	dl, al	; this is interpolated middle (3th) sample (L)
 11365 000075AB 00E0                    	add	al, ah
 11366 000075AD D0D8                    	rcr	al, 1
 11367 000075AF 88C3                    	mov	bl, al	; this is temporary interpolation value (L)
 11368 000075B1 00E0                    	add	al, ah
 11369 000075B3 D0D8                    	rcr	al, 1
 11370 000075B5 2C80                    	sub	al, 80h
 11371 000075B7 66C1E008                	shl	ax, 8
 11372 000075BB 66AB                    	stosw		; this is 1st interpolated sample (L)
 11373 000075BD A0[31870000]            	mov	al, [next_val_r]
 11374 000075C2 8A25[2D870000]          	mov	ah, [previous_val_r]
 11375 000075C8 00E0                    	add	al, ah
 11376 000075CA D0D8                    	rcr	al, 1
 11377 000075CC 88C6                    	mov	dh, al	; this is interpolated middle (3th) sample (R)
 11378 000075CE 00E0                    	add	al, ah
 11379 000075D0 D0D8                    	rcr	al, 1
 11380 000075D2 88C7                    	mov	bh, al	; this is temporary interpolation value (R)
 11381 000075D4 00E0                    	add	al, ah
 11382 000075D6 D0D8                    	rcr	al, 1
 11383 000075D8 2C80                    	sub	al, 80h
 11384 000075DA 66C1E008                	shl	ax, 8
 11385 000075DE 66AB                    	stosw		; this is 1st interpolated sample (R)
 11386 000075E0 88D8                    	mov	al, bl
 11387 000075E2 00D0                    	add	al, dl
 11388 000075E4 D0D8                    	rcr	al, 1
 11389 000075E6 2C80                    	sub	al, 80h
 11390 000075E8 66C1E008                	shl	ax, 8
 11391 000075EC 66AB                    	stosw		; this is 2nd interpolated sample (L)
 11392 000075EE 88F8                    	mov	al, bh
 11393 000075F0 00F0                    	add	al, dh
 11394 000075F2 D0D8                    	rcr	al, 1
 11395 000075F4 2C80                    	sub	al, 80h
 11396 000075F6 66C1E008                	shl	ax, 8
 11397 000075FA 66AB                    	stosw 		; this is 2nd interpolated sample (R)
 11398 000075FC 88D0                    	mov	al, dl
 11399 000075FE 2C80                    	sub	al, 80h
 11400 00007600 66C1E008                	shl	ax, 8
 11401 00007604 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
 11402 00007606 88F0                    	mov	al, dh
 11403 00007608 2C80                    	sub	al, 80h
 11404 0000760A 66C1E008                	shl	ax, 8
 11405 0000760E 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
 11406 00007610 A0[2F870000]            	mov	al, [next_val_l]
 11407 00007615 00D0                    	add	al, dl
 11408 00007617 D0D8                    	rcr	al, 1
 11409 00007619 88C3                    	mov	bl, al	; this is temporary interpolation value (L)
 11410 0000761B 00D0                    	add	al, dl
 11411 0000761D D0D8                    	rcr	al, 1
 11412 0000761F 2C80                    	sub	al, 80h
 11413 00007621 66C1E008                	shl	ax, 8
 11414 00007625 66AB                    	stosw		; this is 4th interpolated sample (L)
 11415 00007627 A0[31870000]            	mov	al, [next_val_r]
 11416 0000762C 00F0                    	add	al, dh
 11417 0000762E D0D8                    	rcr	al, 1
 11418 00007630 88C7                    	mov	bh, al	; this is temporary interpolation value (R)
 11419 00007632 00F0                    	add	al, dh
 11420 00007634 D0D8                    	rcr	al, 1
 11421 00007636 2C80                    	sub	al, 80h
 11422 00007638 66C1E008                	shl	ax, 8
 11423 0000763C 66AB                    	stosw		; this is 4th interpolated sample (R)
 11424 0000763E A0[2F870000]            	mov	al, [next_val_l]
 11425 00007643 00D8                    	add	al, bl
 11426 00007645 D0D8                    	rcr	al, 1
 11427 00007647 2C80                    	sub	al, 80h
 11428 00007649 66C1E008                	shl	ax, 8
 11429 0000764D 66AB                    	stosw		; this is 5th interpolated sample (L)
 11430 0000764F A0[31870000]            	mov	al, [next_val_r]
 11431 00007654 00F8                    	add	al, bh
 11432 00007656 D0D8                    	rcr	al, 1
 11433 00007658 2C80                    	sub	al, 80h
 11434 0000765A 66C1E008                	shl	ax, 8
 11435 0000765E 66AB                    	stosw		; this is 5th interpolated sample (R)
 11436                                  	; 8 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
 11437 00007660 E305                    	jecxz	lff8s_6
 11438 00007662 E907FFFFFF              	jmp	lff8s_1
 11439                                  lff8s_6:
 11440 00007667 E9D6FEFFFF              	jmp	lff8s_3
 11441                                  
 11442                                  ; --------------------------------------------------------
 11443                                  
 11444                                  load_8khz_mono_16_bit:
 11445                                  	; 13/01/2025 (mp3play3.s)
 11446 0000766C BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 11447 00007671 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 11448 00007676 8B0D[60A30000]          	mov	ecx, [loadsize]
 11449                                  	; 13/01/2025
 11450 0000767C D1E9                    	shr	ecx, 1	; word count
 11451                                  lff8m2_1:
 11452 0000767E 66AD                    	lodsw
 11453 00007680 66AB                    	stosw		; original sample (left channel)
 11454 00007682 66AB                    	stosw		; original sample (right channel)
 11455 00007684 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
 11456 00007687 66A3[2B870000]          	mov	[previous_val], ax
 11457 0000768D 31C0                    	xor	eax, eax
 11458 0000768F 49                      	dec	ecx
 11459 00007690 7403                    	jz	short lff8m2_2
 11460 00007692 668B06                  	mov	ax, [esi]
 11461                                  lff8m2_2:
 11462 00007695 80C480                  	add	ah, 80h ; convert sound level to 0-65535 format
 11463 00007698 89C5                    	mov	ebp, eax	; [next_val]
 11464 0000769A 660305[2B870000]        	add	ax, [previous_val]
 11465 000076A1 66D1D8                  	rcr	ax, 1
 11466 000076A4 89C2                    	mov	edx, eax ; this is interpolated middle (3th) sample
 11467 000076A6 660305[2B870000]        	add	ax, [previous_val]
 11468 000076AD 66D1D8                  	rcr	ax, 1	; this is temporary interpolation value
 11469 000076B0 89C3                    	mov	ebx, eax 		
 11470 000076B2 660305[2B870000]        	add	ax, [previous_val]
 11471 000076B9 66D1D8                  	rcr	ax, 1
 11472 000076BC 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 11473 000076BF 66AB                    	stosw		; this is 1st interpolated sample (L)
 11474 000076C1 66AB                    	stosw		; this is 1st interpolated sample (R)
 11475 000076C3 89D8                    	mov	eax, ebx
 11476 000076C5 6601D0                  	add	ax, dx
 11477 000076C8 66D1D8                  	rcr	ax, 1
 11478 000076CB 80EC80                  	sub	ah, 80h
 11479 000076CE 66AB                    	stosw		; this is 2nd interpolated sample (L)
 11480 000076D0 66AB                    	stosw		; this is 2nd interpolated sample (R)
 11481 000076D2 89D0                    	mov	eax, edx
 11482 000076D4 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 11483 000076D7 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
 11484 000076D9 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
 11485 000076DB 89E8                    	mov	eax, ebp
 11486 000076DD 6601D0                  	add	ax, dx
 11487 000076E0 66D1D8                  	rcr	ax, 1
 11488 000076E3 89C3                    	mov	ebx, eax ; this is temporary interpolation value
 11489 000076E5 6601D0                  	add	ax, dx
 11490 000076E8 66D1D8                  	rcr	ax, 1
 11491 000076EB 80EC80                  	sub	ah, 80h
 11492 000076EE 66AB                    	stosw		; this is 4th interpolated sample (L)
 11493 000076F0 66AB                    	stosw		; this is 4th interpolated sample (R)
 11494 000076F2 89E8                    	mov	eax, ebp
 11495 000076F4 6601D8                  	add	ax, bx
 11496 000076F7 66D1D8                  	rcr	ax, 1
 11497 000076FA 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 11498 000076FD 66AB                    	stosw		; this is 5th interpolated sample (L)
 11499 000076FF 66AB                    	stosw		; this is 5th interpolated sample (R)
 11500                                  	; 8 kHZ mono to 48 kHZ stereo conversion of the sample is OK
 11501 00007701 09C9                    	or	ecx, ecx
 11502 00007703 0F8575FFFFFF            	jnz	lff8m2_1
 11503 00007709 E934FEFFFF              	jmp	lff8m2_3
 11504                                  
 11505                                  ; --------------------------------------------------------
 11506                                  
 11507                                  load_8khz_stereo_16_bit:
 11508                                  	; 13/01/2025 (mp3play3.s)
 11509 0000770E BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 11510 00007713 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 11511 00007718 8B0D[60A30000]          	mov	ecx, [loadsize]
 11512                                  	; 13/01/2025
 11513 0000771E C1E902                  	shr	ecx, 2	; dword count
 11514                                  lff8s2_1:
 11515 00007721 66AD                    	lodsw
 11516 00007723 66AB                    	stosw		; original sample (L)
 11517                                  	; 15/11/2023
 11518 00007725 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
 11519 00007728 66A3[2B870000]          	mov	[previous_val_l], ax
 11520 0000772E 66AD                    	lodsw
 11521 00007730 66AB                    	stosw		; original sample (R)
 11522 00007732 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
 11523 00007735 66A3[2D870000]          	mov	[previous_val_r], ax
 11524 0000773B 31D2                    	xor	edx, edx
 11525 0000773D 31C0                    	xor	eax, eax
 11526                                  	; 16/11/2023
 11527 0000773F 49                      	dec	ecx
 11528 00007740 7407                    	jz	short lff8s2_2
 11529 00007742 668B06                  	mov	ax, [esi]
 11530 00007745 668B5602                	mov	dx, [esi+2]
 11531                                  lff8s2_2:
 11532 00007749 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
 11533 0000774C 66A3[2F870000]          	mov	[next_val_l], ax
 11534 00007752 80C680                  	add	dh, 80h	; convert sound level to 0-65535 format
 11535 00007755 668915[31870000]        	mov	[next_val_r], dx
 11536 0000775C 660305[2B870000]        	add	ax, [previous_val_l]
 11537 00007763 66D1D8                  	rcr	ax, 1
 11538 00007766 89C2                    	mov	edx, eax ; this is interpolated middle (3th) sample (L)
 11539 00007768 660305[2B870000]        	add	ax, [previous_val_l]
 11540 0000776F 66D1D8                  	rcr	ax, 1	
 11541 00007772 89C3                    	mov	ebx, eax ; this is temporary interpolation value (L)
 11542 00007774 660305[2B870000]        	add	ax, [previous_val_l]
 11543 0000777B 66D1D8                  	rcr	ax, 1
 11544 0000777E 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 11545 00007781 66AB                    	stosw		; this is 1st interpolated sample (L)
 11546 00007783 66A1[31870000]          	mov	ax, [next_val_r]
 11547 00007789 660305[2D870000]        	add	ax, [previous_val_r]
 11548 00007790 66D1D8                  	rcr	ax, 1
 11549 00007793 89C5                    	mov	ebp, eax ; this is interpolated middle (3th) sample (R)
 11550 00007795 660305[2D870000]        	add	ax, [previous_val_r]
 11551 0000779C 66D1D8                  	rcr	ax, 1
 11552 0000779F 50                      	push	eax ; *	; this is temporary interpolation value (R)
 11553 000077A0 660305[2D870000]        	add	ax, [previous_val_r]
 11554 000077A7 66D1D8                  	rcr	ax, 1
 11555 000077AA 80EC80                  	sub	ah, 80h
 11556 000077AD 66AB                    	stosw		; this is 1st interpolated sample (R)
 11557 000077AF 89D8                    	mov	eax, ebx
 11558 000077B1 6601D0                  	add	ax, dx
 11559 000077B4 66D1D8                  	rcr	ax, 1
 11560 000077B7 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 11561 000077BA 66AB                    	stosw		; this is 2nd interpolated sample (L)
 11562 000077BC 58                      	pop	eax ; *
 11563 000077BD 6601E8                  	add	ax, bp
 11564 000077C0 66D1D8                  	rcr	ax, 1
 11565 000077C3 80EC80                  	sub	ah, 80h
 11566 000077C6 66AB                    	stosw 		; this is 2nd interpolated sample (R)
 11567 000077C8 89D0                    	mov	eax, edx
 11568 000077CA 80EC80                  	sub	ah, 80h
 11569 000077CD 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
 11570 000077CF 89E8                    	mov	eax, ebp
 11571 000077D1 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 11572 000077D4 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
 11573 000077D6 66A1[2F870000]          	mov	ax, [next_val_l]
 11574 000077DC 6601D0                  	add	ax, dx
 11575 000077DF 66D1D8                  	rcr	ax, 1
 11576 000077E2 89C3                    	mov	ebx, eax ; this is temporary interpolation value (L)
 11577 000077E4 6601D0                  	add	ax, dx
 11578 000077E7 66D1D8                  	rcr	ax, 1
 11579 000077EA 80EC80                  	sub	ah, 80h
 11580 000077ED 66AB                    	stosw		; this is 4th interpolated sample (L)
 11581 000077EF 66A1[31870000]          	mov	ax, [next_val_r]
 11582 000077F5 6601E8                  	add	ax, bp
 11583 000077F8 66D1D8                  	rcr	ax, 1
 11584 000077FB 50                      	push	eax ; ** ; this is temporary interpolation value (R)
 11585 000077FC 6601E8                  	add	ax, bp
 11586 000077FF 66D1D8                  	rcr	ax, 1
 11587 00007802 80EC80                  	sub	ah, 80h
 11588 00007805 66AB                    	stosw		; this is 4th interpolated sample (R)
 11589 00007807 66A1[2F870000]          	mov	ax, [next_val_l]
 11590 0000780D 6601D8                  	add	ax, bx
 11591 00007810 66D1D8                  	rcr	ax, 1
 11592 00007813 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 11593 00007816 66AB                    	stosw		; this is 5th interpolated sample (L)
 11594 00007818 58                      	pop	eax ; **
 11595 00007819 660305[31870000]        	add	ax, [next_val_r]
 11596 00007820 66D1D8                  	rcr	ax, 1
 11597 00007823 80EC80                  	sub	ah, 80h
 11598 00007826 66AB                    	stosw		; this is 5th interpolated sample (R)
 11599                                  	; 8 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
 11600 00007828 E305                    	jecxz	lff8_s2_9
 11601 0000782A E9F2FEFFFF              	jmp	lff8s2_1
 11602                                  lff8_s2_9:
 11603 0000782F E90EFDFFFF              	jmp	lff8s2_3
 11604                                  
 11605                                  ; --------------------------------------------------------
 11606                                  
 11607                                  load_16khz_mono_8_bit:
 11608                                  	; 13/01/2025 (mp3play3.s)
 11609 00007834 BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 11610 00007839 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 11611 0000783E 8B0D[60A30000]          	mov	ecx, [loadsize]
 11612                                  	; 13/01/2025
 11613                                  lff16m_1:
 11614 00007844 AC                      	lodsb
 11615                                  	;mov	[previous_val], al
 11616 00007845 88C3                    	mov	bl, al
 11617 00007847 2C80                    	sub	al, 80h
 11618 00007849 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 11619 0000784D 66AB                    	stosw		; original sample (left channel)
 11620 0000784F 66AB                    	stosw		; original sample (right channel)
 11621                                  	;xor	ax, ax
 11622                                  	; 14/11/22023
 11623 00007851 B080                    	mov	al, 80h
 11624 00007853 49                      	dec	ecx
 11625 00007854 7402                    	jz	short lff16m_2
 11626 00007856 8A06                    	mov	al, [esi]
 11627                                  lff16m_2:
 11628                                  	;mov	[next_val], al
 11629 00007858 88C7                    	mov	bh, al
 11630                                  	;add	al, [previous_val]
 11631 0000785A 00D8                    	add	al, bl
 11632 0000785C D0D8                    	rcr	al, 1
 11633 0000785E 88C2                    	mov	dl, al	; this is interpolated middle (temp) sample
 11634                                  	;add	al, [previous_val]
 11635 00007860 00D8                    	add	al, bl
 11636 00007862 D0D8                    	rcr	al, 1
 11637 00007864 2C80                    	sub	al, 80h
 11638 00007866 66C1E008                	shl	ax, 8
 11639 0000786A 66AB                    	stosw		; this is 1st interpolated sample (L)
 11640 0000786C 66AB                    	stosw		; this is 1st interpolated sample (R)
 11641                                  	;mov	al, [next_val]
 11642 0000786E 88F8                    	mov	al, bh
 11643 00007870 00D0                    	add	al, dl
 11644 00007872 D0D8                    	rcr	al, 1
 11645 00007874 2C80                    	sub	al, 80h
 11646 00007876 66C1E008                	shl	ax, 8
 11647 0000787A 66AB                    	stosw		; this is 2nd interpolated sample (L)
 11648 0000787C 66AB                    	stosw		; this is 2nd interpolated sample (R)
 11649                                  	
 11650                                  	; 16 kHZ mono to 48 kHZ stereo conversion of the sample is OK
 11651 0000787E 09C9                    	or	ecx, ecx
 11652 00007880 75C2                    	jnz	short lff16m_1
 11653 00007882 E9BBFCFFFF              	jmp	lff16m_3
 11654                                  
 11655                                  ; --------------------------------------------------------
 11656                                  
 11657                                  load_16khz_stereo_8_bit:
 11658                                  	; 13/01/2025 (mp3play3.s)
 11659 00007887 BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 11660 0000788C BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 11661 00007891 8B0D[60A30000]          	mov	ecx, [loadsize]
 11662                                  	; 13/01/2025
 11663 00007897 D1E9                    	shr	ecx, 1	; word count
 11664                                  lff16s_1:
 11665 00007899 AC                      	lodsb
 11666 0000789A A2[2B870000]            	mov	[previous_val_l], al
 11667 0000789F 2C80                    	sub	al, 80h
 11668 000078A1 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 11669 000078A5 66AB                    	stosw		; original sample (L)
 11670 000078A7 AC                      	lodsb
 11671 000078A8 A2[2D870000]            	mov	[previous_val_r], al
 11672 000078AD 2C80                    	sub	al, 80h
 11673 000078AF 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 11674 000078B3 66AB                    	stosw		; original sample (R)
 11675                                  
 11676                                  	;xor	eax, eax
 11677 000078B5 66B88080                	mov	ax, 8080h
 11678 000078B9 49                      	dec	ecx
 11679 000078BA 7403                    	jz	short lff16s_2
 11680                                  		; convert 8 bit sample to 16 bit sample
 11681 000078BC 668B06                  	mov	ax, [esi]
 11682                                  lff16s_2:
 11683                                  	;mov	[next_val_l], al
 11684                                  	;mov	[next_val_r], ah
 11685 000078BF 89C3                    	mov	ebx, eax
 11686 000078C1 0205[2B870000]          	add	al, [previous_val_l]
 11687 000078C7 D0D8                    	rcr	al, 1
 11688 000078C9 88C2                    	mov	dl, al	; this is temporary interpolation value (L)
 11689 000078CB 0205[2B870000]          	add	al, [previous_val_l]
 11690 000078D1 D0D8                    	rcr	al, 1
 11691 000078D3 2C80                    	sub	al, 80h
 11692 000078D5 66C1E008                	shl	ax, 8
 11693 000078D9 66AB                    	stosw		; this is 1st interpolated sample (L)
 11694 000078DB 88F8                    	mov	al, bh	; [next_val_r]
 11695 000078DD 0205[2D870000]          	add	al, [previous_val_r]
 11696 000078E3 D0D8                    	rcr	al, 1
 11697 000078E5 88C6                    	mov	dh, al	; this is temporary interpolation value (R)
 11698 000078E7 0205[2D870000]          	add	al, [previous_val_r]
 11699 000078ED D0D8                    	rcr	al, 1
 11700 000078EF 2C80                    	sub	al, 80h
 11701 000078F1 66C1E008                	shl	ax, 8
 11702 000078F5 66AB                    	stosw		; this is 1st interpolated sample (R)
 11703 000078F7 88D0                    	mov	al, dl
 11704 000078F9 00D8                    	add	al, bl	; [next_val_l]
 11705 000078FB D0D8                    	rcr	al, 1
 11706 000078FD 2C80                    	sub	al, 80h
 11707 000078FF 66C1E008                	shl	ax, 8
 11708 00007903 66AB                    	stosw		; this is 2nd interpolated sample (L)
 11709 00007905 88F0                    	mov	al, dh
 11710 00007907 00F8                    	add	al, bh	; [next_val_r]
 11711 00007909 D0D8                    	rcr	al, 1
 11712 0000790B 2C80                    	sub	al, 80h
 11713 0000790D 66C1E008                	shl	ax, 8
 11714 00007911 66AB                    	stosw 		; this is 2nd interpolated sample (R)
 11715                                  	
 11716                                  	; 16 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
 11717 00007913 09C9                    	or	ecx, ecx
 11718 00007915 7582                    	jnz	short lff16s_1
 11719 00007917 E926FCFFFF              	jmp	lff16s_3
 11720                                  
 11721                                  ; --------------------------------------------------------
 11722                                  
 11723                                  load_16khz_mono_16_bit:
 11724                                  	; 13/01/2025 (mp3play3.s)
 11725 0000791C BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 11726 00007921 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 11727 00007926 8B0D[60A30000]          	mov	ecx, [loadsize]
 11728                                  	; 13/01/2025
 11729 0000792C D1E9                    	shr	ecx, 1	; word count
 11730                                  lff16m2_1:
 11731 0000792E 66AD                    	lodsw
 11732 00007930 66AB                    	stosw		; original sample (left channel)
 11733 00007932 66AB                    	stosw		; original sample (right channel)
 11734 00007934 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
 11735                                  	;mov	[previous_val], ax
 11736 00007937 89C3                    	mov	ebx, eax
 11737 00007939 31C0                    	xor	eax, eax
 11738 0000793B 49                      	dec	ecx
 11739 0000793C 7403                    	jz	short lff16m2_2
 11740 0000793E 668B06                  	mov	ax, [esi]
 11741                                  lff16m2_2:
 11742 00007941 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
 11743 00007944 89C5                    	mov	ebp, eax	; [next_val]
 11744                                  	;add	ax, [previous_val]
 11745 00007946 6601D8                  	add	ax, bx
 11746 00007949 66D1D8                  	rcr	ax, 1
 11747 0000794C 89C2                    	mov	edx, eax ; this is temporary interpolation value
 11748                                  	;add	ax, [previous_val]
 11749 0000794E 6601D8                  	add	ax, bx
 11750 00007951 66D1D8                  	rcr	ax, 1
 11751 00007954 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 11752 00007957 66AB                    	stosw		; this is 1st interpolated sample (L)
 11753 00007959 66AB                    	stosw		; this is 1st interpolated sample (R)
 11754 0000795B 89E8                    	mov	eax, ebp
 11755 0000795D 6601D0                  	add	ax, dx
 11756 00007960 66D1D8                  	rcr	ax, 1
 11757 00007963 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 11758 00007966 66AB                    	stosw		; this is 2nd interpolated sample (L)
 11759 00007968 66AB                    	stosw		; this is 2nd interpolated sample (R)
 11760                                  	; 16 kHZ mono to 48 kHZ stereo conversion of the sample is OK
 11761 0000796A 09C9                    	or	ecx, ecx
 11762 0000796C 75C0                    	jnz	short lff16m2_1
 11763 0000796E E9CFFBFFFF              	jmp	lff16m2_3
 11764                                  
 11765                                  ; --------------------------------------------------------
 11766                                  
 11767                                  load_16khz_stereo_16_bit:
 11768                                  	; 13/01/2025 (mp3play3.s)
 11769 00007973 BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 11770 00007978 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 11771 0000797D 8B0D[60A30000]          	mov	ecx, [loadsize]
 11772                                  	; 13/01/2025
 11773 00007983 C1E902                  	shr	ecx, 2	; dword count
 11774                                  lff16s2_1:
 11775 00007986 66AD                    	lodsw
 11776 00007988 66AB                    	stosw		; original sample (L)
 11777 0000798A 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
 11778 0000798D 66A3[2B870000]          	mov	[previous_val_l], ax
 11779 00007993 66AD                    	lodsw
 11780 00007995 66AB                    	stosw		; original sample (R)
 11781 00007997 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
 11782 0000799A 66A3[2D870000]          	mov	[previous_val_r], ax
 11783 000079A0 31D2                    	xor	edx, edx
 11784 000079A2 31C0                    	xor	eax, eax
 11785                                  	; 16/11/2023
 11786 000079A4 49                      	dec	ecx
 11787 000079A5 7407                    	jz	short lff16s2_2
 11788 000079A7 668B06                  	mov	ax, [esi]
 11789 000079AA 668B5602                	mov	dx, [esi+2]
 11790                                  lff16s2_2:
 11791 000079AE 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
 11792                                  	;mov	[next_val_l], ax
 11793 000079B1 89C5                    	mov	ebp, eax
 11794 000079B3 80C680                  	add	dh, 80h	; convert sound level 0 to 65535 format
 11795 000079B6 668915[31870000]        	mov	[next_val_r], dx
 11796 000079BD 660305[2B870000]        	add	ax, [previous_val_l]
 11797 000079C4 66D1D8                  	rcr	ax, 1
 11798 000079C7 89C2                    	mov	edx, eax ; this is temporary interpolation value (L)
 11799 000079C9 660305[2B870000]        	add	ax, [previous_val_l]
 11800 000079D0 66D1D8                  	rcr	ax, 1
 11801 000079D3 80EC80                  	sub	ah, 80h ; -32768 to +32767 format again
 11802 000079D6 66AB                    	stosw		; this is 1st interpolated sample (L)
 11803 000079D8 66A1[31870000]          	mov	ax, [next_val_r]
 11804 000079DE 660305[2D870000]        	add	ax, [previous_val_r]
 11805 000079E5 66D1D8                  	rcr	ax, 1
 11806 000079E8 89C3                    	mov	ebx, eax ; this is temporary interpolation value (R)
 11807 000079EA 660305[2D870000]        	add	ax, [previous_val_r]
 11808 000079F1 66D1D8                  	rcr	ax, 1
 11809 000079F4 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 11810 000079F7 66AB                    	stosw		; this is 1st interpolated sample (R)
 11811                                  	;mov	ax, [next_val_l]
 11812 000079F9 89E8                    	mov	eax, ebp
 11813 000079FB 6601D0                  	add	ax, dx
 11814 000079FE 66D1D8                  	rcr	ax, 1
 11815 00007A01 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 11816 00007A04 66AB                    	stosw		; this is 2nd interpolated sample (L)
 11817 00007A06 66A1[31870000]          	mov	ax, [next_val_r]
 11818 00007A0C 6601D8                  	add	ax, bx
 11819 00007A0F 66D1D8                  	rcr	ax, 1
 11820 00007A12 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 11821 00007A15 66AB                    	stosw 		; this is 2nd interpolated sample (R)
 11822                                  	
 11823                                  	; 16 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
 11824 00007A17 09C9                    	or	ecx, ecx
 11825 00007A19 0F8567FFFFFF            	jnz	lff16s2_1
 11826 00007A1F E91EFBFFFF              	jmp	lff16s2_3
 11827                                  
 11828                                  ; --------------------------------------------------------
 11829                                  
 11830                                  load_24khz_mono_8_bit:
 11831                                  	; 13/01/2025 (mp3play3.s)
 11832 00007A24 BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 11833 00007A29 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 11834 00007A2E 8B0D[60A30000]          	mov	ecx, [loadsize]
 11835                                  	; 13/01/2025
 11836                                  lff24m_1:
 11837 00007A34 AC                      	lodsb
 11838                                  	;mov	[previous_val], al
 11839 00007A35 88C3                    	mov	bl, al
 11840 00007A37 2C80                    	sub	al, 80h
 11841 00007A39 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 11842 00007A3D 66AB                    	stosw		; original sample (left channel)
 11843 00007A3F 66AB                    	stosw		; original sample (right channel)
 11844                                  	;xor	eax, eax
 11845 00007A41 B080                    	mov	al, 80h
 11846 00007A43 49                      	dec	ecx
 11847 00007A44 7402                    	jz	short lff24m_2
 11848 00007A46 8A06                    	mov	al, [esi]
 11849                                  lff24m_2:
 11850                                  	;;mov	[next_val], al
 11851                                  	;mov	bh, al
 11852                                  	;add	al, [previous_val]
 11853 00007A48 00D8                    	add	al, bl
 11854 00007A4A D0D8                    	rcr	al, 1
 11855 00007A4C 2C80                    	sub	al, 80h
 11856 00007A4E 66C1E008                	shl	ax, 8
 11857 00007A52 66AB                    	stosw		; this is interpolated sample (L)
 11858 00007A54 66AB                    	stosw		; this is interpolated sample (R)
 11859                                  	
 11860                                  	; 24 kHZ mono to 48 kHZ stereo conversion of the sample is OK
 11861 00007A56 09C9                    	or	ecx, ecx
 11862 00007A58 75DA                    	jnz	short lff24m_1
 11863 00007A5A E9E3FAFFFF              	jmp	lff24_3
 11864                                  
 11865                                  ; --------------------------------------------------------
 11866                                  
 11867                                  load_24khz_stereo_8_bit:
 11868                                  	; 13/01/2025 (mp3play3.s)
 11869 00007A5F BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 11870 00007A64 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 11871 00007A69 8B0D[60A30000]          	mov	ecx, [loadsize]
 11872                                  	; 13/01/2025
 11873 00007A6F D1E9                    	shr	ecx, 1	; word count
 11874                                  lff24s_1:
 11875 00007A71 AC                      	lodsb
 11876 00007A72 A2[2B870000]            	mov	[previous_val_l], al
 11877 00007A77 2C80                    	sub	al, 80h
 11878 00007A79 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 11879 00007A7D 66AB                    	stosw		; original sample (L)
 11880 00007A7F AC                      	lodsb
 11881 00007A80 A2[2D870000]            	mov	[previous_val_r], al
 11882 00007A85 2C80                    	sub	al, 80h
 11883 00007A87 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 11884 00007A8B 66AB                    	stosw		; original sample (R)
 11885                                  
 11886                                  	;xor	eax, eax
 11887 00007A8D 66B88080                	mov	ax, 8080h
 11888 00007A91 49                      	dec	ecx
 11889 00007A92 7403                    	jz	short lff24s_2
 11890                                  		; convert 8 bit sample to 16 bit sample
 11891 00007A94 668B06                  	mov	ax, [esi]
 11892                                  lff24s_2:
 11893                                  	;;mov	[next_val_l], al
 11894                                  	;;mov	[next_val_r], ah
 11895                                  	;mov	bx, ax
 11896 00007A97 88E7                    	mov	bh, ah
 11897 00007A99 0205[2B870000]          	add	al, [previous_val_l]
 11898 00007A9F D0D8                    	rcr	al, 1
 11899                                  	;mov	dl, al
 11900 00007AA1 2C80                    	sub	al, 80h
 11901 00007AA3 66C1E008                	shl	ax, 8
 11902 00007AA7 66AB                    	stosw		; this is interpolated sample (L)
 11903 00007AA9 88F8                    	mov	al, bh	; [next_val_r]
 11904 00007AAB 0205[2D870000]          	add	al, [previous_val_r]
 11905 00007AB1 D0D8                    	rcr	al, 1
 11906                                  	;mov	dh, al
 11907 00007AB3 2C80                    	sub	al, 80h
 11908 00007AB5 66C1E008                	shl	ax, 8
 11909 00007AB9 66AB                    	stosw		; this is interpolated sample (R)
 11910                                  		
 11911                                  	; 24 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
 11912 00007ABB 09C9                    	or	ecx, ecx
 11913 00007ABD 75B2                    	jnz	short lff24s_1
 11914 00007ABF E97EFAFFFF              	jmp	lff24_3
 11915                                  
 11916                                  ; --------------------------------------------------------
 11917                                  
 11918                                  load_24khz_mono_16_bit:
 11919                                  	; 30/01/2025
 11920                                  	; 13/01/2025 (mp3play3.s)
 11921 00007AC4 BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 11922 00007AC9 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 11923 00007ACE 8B0D[60A30000]          	mov	ecx, [loadsize]
 11924                                  	; 13/01/2025
 11925 00007AD4 D1E9                    	shr	ecx, 1	; word count
 11926                                  lff24m2_1:
 11927 00007AD6 66AD                    	lodsw
 11928 00007AD8 66AB                    	stosw		; original sample (left channel)
 11929 00007ADA 66AB                    	stosw		; original sample (right channel)
 11930 00007ADC 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
 11931                                  	;mov	[previous_val], ax
 11932                                  	;mov	ebx, eax
 11933                                  	;xor	eax, eax
 11934 00007ADF 31DB                    	xor	ebx, ebx
 11935 00007AE1 49                      	dec	ecx
 11936 00007AE2 7403                    	jz	short lff24m2_2
 11937                                  	;mov	ax, [esi]
 11938 00007AE4 668B1E                  	mov	bx, [esi]
 11939                                  lff24m2_2:
 11940                                  	; 30/01/2025
 11941 00007AE7 80C780                  	add	bh, 80h ; convert sound level 0 to 65535 format
 11942                                  	;add	ah, 80h
 11943                                  	;mov	ebp, eax	; [next_val]
 11944                                  	;add	ax, [previous_val]
 11945                                  	; ax = [previous_val]
 11946                                  	; bx = [next_val]
 11947 00007AEA 6601D8                  	add	ax, bx
 11948 00007AED 66D1D8                  	rcr	ax, 1
 11949 00007AF0 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 11950 00007AF3 66AB                    	stosw		; this is interpolated sample (L)
 11951 00007AF5 66AB                    	stosw		; this is interpolated sample (R)
 11952                                  	; 24 kHZ mono to 48 kHZ stereo conversion of the sample is OK
 11953 00007AF7 09C9                    	or	ecx, ecx
 11954 00007AF9 75DB                    	jnz	short lff24m2_1
 11955 00007AFB E942FAFFFF              	jmp	lff24_3
 11956                                  
 11957                                  ; --------------------------------------------------------
 11958                                  
 11959                                  load_24khz_stereo_16_bit:
 11960                                  	; 13/01/2025 (mp3play3.s)
 11961 00007B00 BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 11962 00007B05 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 11963 00007B0A 8B0D[60A30000]          	mov	ecx, [loadsize]
 11964                                  	; 13/01/2025
 11965 00007B10 C1E902                  	shr	ecx, 2	; dword count
 11966                                  lff24s2_1:
 11967 00007B13 66AD                    	lodsw
 11968 00007B15 66AB                    	stosw		; original sample (L)
 11969 00007B17 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
 11970 00007B1A 66A3[2B870000]          	mov	[previous_val_l], ax
 11971 00007B20 66AD                    	lodsw
 11972 00007B22 66AB                    	stosw		; original sample (R)
 11973 00007B24 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
 11974                                  	;mov	[previous_val_r], ax
 11975 00007B27 89C3                    	mov	ebx, eax
 11976 00007B29 31D2                    	xor	edx, edx
 11977 00007B2B 31C0                    	xor	eax, eax
 11978                                  	; 16/11/2023
 11979 00007B2D 49                      	dec	ecx
 11980 00007B2E 7407                    	jz	short lff24s2_2
 11981 00007B30 668B06                  	mov	ax, [esi]
 11982 00007B33 668B5602                	mov	dx, [esi+2]
 11983                                  lff24s2_2:
 11984 00007B37 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
 11985                                  	;;mov	[next_val_l], ax
 11986                                  	;mov	ebp, eax
 11987 00007B3A 80C680                  	add	dh, 80h	; convert sound level 0 to 65535 format
 11988                                  	;mov	[next_val_r], dx
 11989 00007B3D 660305[2B870000]        	add	ax, [previous_val_l]
 11990 00007B44 66D1D8                  	rcr	ax, 1
 11991 00007B47 80EC80                  	sub	ah, 80h ; -32768 to +32767 format again
 11992 00007B4A 66AB                    	stosw		; this is interpolated sample (L)
 11993                                  	;mov	ax, [next_val_r]
 11994 00007B4C 89D0                    	mov	eax, edx
 11995                                  	;add	ax, [previous_val_r]
 11996 00007B4E 6601D8                  	add	ax, bx
 11997 00007B51 66D1D8                  	rcr	ax, 1
 11998 00007B54 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 11999 00007B57 66AB                    	stosw		; this is interpolated sample (R)
 12000                                  	
 12001                                  	; 24 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
 12002 00007B59 09C9                    	or	ecx, ecx
 12003 00007B5B 75B6                    	jnz	short lff24s2_1
 12004 00007B5D E9E0F9FFFF              	jmp	lff24_3
 12005                                  
 12006                                  ; --------------------------------------------------------
 12007                                  
 12008                                  load_32khz_mono_8_bit:
 12009                                  	; 13/01/2025 (mp3play3.s)
 12010 00007B62 BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 12011 00007B67 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 12012 00007B6C 8B0D[60A30000]          	mov	ecx, [loadsize]
 12013                                  	; 13/01/2025
 12014                                  lff32m_1:
 12015 00007B72 AC                      	lodsb
 12016                                  	;mov	[previous_val], al
 12017 00007B73 88C3                    	mov	bl, al
 12018 00007B75 2C80                    	sub	al, 80h
 12019 00007B77 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 12020 00007B7B 66AB                    	stosw		; original sample (left channel)
 12021 00007B7D 66AB                    	stosw		; original sample (right channel)
 12022                                  	;xor	eax, eax
 12023 00007B7F B080                    	mov	al, 80h
 12024 00007B81 49                      	dec	ecx
 12025 00007B82 7402                    	jz	short lff32m_2
 12026 00007B84 8A06                    	mov	al, [esi]
 12027                                  lff32m_2:
 12028                                  	;;mov	[next_val], al
 12029                                  	;mov	bh, al
 12030                                  	;add	al, [previous_val]
 12031 00007B86 00D8                    	add	al, bl
 12032 00007B88 D0D8                    	rcr	al, 1
 12033 00007B8A 2C80                    	sub	al, 80h
 12034 00007B8C 66C1E008                	shl	ax, 8
 12035 00007B90 66AB                    	stosw		; this is interpolated sample (L)
 12036 00007B92 66AB                    	stosw		; this is interpolated sample (R)
 12037                                  	
 12038                                  	; different than 8-16-24 kHZ !
 12039                                  	; 'original-interpolated-original' trio samples
 12040 00007B94 E30E                    	jecxz	lff32m_3
 12041                                  
 12042 00007B96 AC                      	lodsb
 12043 00007B97 2C80                    	sub	al, 80h
 12044 00007B99 66C1E008                	shl	ax, 8
 12045 00007B9D 66AB                    	stosw		; original sample (left channel)
 12046 00007B9F 66AB                    	stosw		; original sample (right channel)
 12047                                  
 12048                                  	; 32 kHZ mono to 48 kHZ stereo conversion of the sample is OK
 12049 00007BA1 49                      	dec	ecx
 12050 00007BA2 75CE                    	jnz	short lff32m_1
 12051                                  lff32m_3:
 12052 00007BA4 E999F9FFFF              	jmp	lff32_3
 12053                                  
 12054                                  ; --------------------------------------------------------
 12055                                  
 12056                                  load_32khz_stereo_8_bit:
 12057                                  	; 13/01/2025 (mp3play3.s)
 12058 00007BA9 BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 12059 00007BAE BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 12060 00007BB3 8B0D[60A30000]          	mov	ecx, [loadsize]
 12061                                  	; 13/01/2025
 12062 00007BB9 D1E9                    	shr	ecx, 1	; word count
 12063                                  lff32s_1:
 12064 00007BBB AC                      	lodsb
 12065 00007BBC A2[2B870000]            	mov	[previous_val_l], al
 12066 00007BC1 2C80                    	sub	al, 80h
 12067 00007BC3 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 12068 00007BC7 66AB                    	stosw		; original sample (L)
 12069 00007BC9 AC                      	lodsb
 12070 00007BCA A2[2D870000]            	mov	[previous_val_r], al
 12071 00007BCF 2C80                    	sub	al, 80h
 12072 00007BD1 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 12073 00007BD5 66AB                    	stosw		; original sample (R)
 12074                                  
 12075                                  	;xor	eax, eax
 12076 00007BD7 66B88080                	mov	ax, 8080h
 12077 00007BDB 49                      	dec	ecx
 12078 00007BDC 7403                    	jz	short lff32s_2
 12079                                  		; convert 8 bit sample to 16 bit sample
 12080 00007BDE 668B06                  	mov	ax, [esi]
 12081                                  lff32s_2:
 12082                                  	;;mov	[next_val_l], al
 12083                                  	;;mov	[next_val_r], ah
 12084                                  	;mov	bx, ax
 12085 00007BE1 88E7                    	mov	bh, ah
 12086 00007BE3 0205[2B870000]          	add	al, [previous_val_l]
 12087 00007BE9 D0D8                    	rcr	al, 1
 12088                                  	;mov	dl, al
 12089 00007BEB 2C80                    	sub	al, 80h
 12090 00007BED 66C1E008                	shl	ax, 8
 12091 00007BF1 66AB                    	stosw		; this is interpolated sample (L)
 12092 00007BF3 88F8                    	mov	al, bh	; [next_val_r]
 12093 00007BF5 0205[2D870000]          	add	al, [previous_val_r]
 12094 00007BFB D0D8                    	rcr	al, 1
 12095                                  	;mov	dh, al
 12096 00007BFD 2C80                    	sub	al, 80h
 12097 00007BFF 66C1E008                	shl	ax, 8
 12098 00007C03 66AB                    	stosw		; this is interpolated sample (R)
 12099                                  
 12100                                  	; different than 8-16-24 kHZ !
 12101                                  	; 'original-interpolated-original' trio samples
 12102 00007C05 E315                    	jecxz	lff32s_3
 12103                                  
 12104 00007C07 AC                      	lodsb
 12105 00007C08 2C80                    	sub	al, 80h
 12106 00007C0A 66C1E008                	shl	ax, 8
 12107 00007C0E 66AB                    	stosw		; original sample (left channel)
 12108                                  
 12109 00007C10 AC                      	lodsb
 12110 00007C11 2C80                    	sub	al, 80h
 12111 00007C13 66C1E008                	shl	ax, 8
 12112 00007C17 66AB                    	stosw		; original sample (right channel)
 12113                                  		
 12114                                  	; 32 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
 12115 00007C19 49                      	dec	ecx
 12116 00007C1A 759F                    	jnz	short lff32s_1
 12117                                  lff32s_3:
 12118 00007C1C E921F9FFFF              	jmp	lff32_3
 12119                                  
 12120                                  ; --------------------------------------------------------
 12121                                  
 12122                                  load_32khz_mono_16_bit:
 12123                                  	; 13/01/2025 (mp3play3.s)
 12124 00007C21 BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 12125 00007C26 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 12126 00007C2B 8B0D[60A30000]          	mov	ecx, [loadsize]
 12127                                  	; 13/01/2025
 12128 00007C31 D1E9                    	shr	ecx, 1	; word count
 12129                                  lff32m2_1:
 12130 00007C33 66AD                    	lodsw
 12131 00007C35 66AB                    	stosw		; original sample (left channel)
 12132 00007C37 66AB                    	stosw		; original sample (right channel)
 12133 00007C39 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
 12134                                  	;mov	[previous_val], ax
 12135                                  	;mov	ebx, eax
 12136                                  	;xor	eax, eax
 12137 00007C3C 31DB                    	xor	ebx, ebx
 12138 00007C3E 49                      	dec	ecx
 12139 00007C3F 7403                    	jz	short lff32m2_2
 12140                                  	;mov	ax, [esi]
 12141 00007C41 668B1E                  	mov	bx, [esi]
 12142                                  lff32m2_2:
 12143                                  	;add	ah, 80h ; convert sound level 0 to 65535 format
 12144                                  	;mov	ebp, eax	; [next_val]
 12145                                  	;add	ax, [previous_val]
 12146                                  	; ax = [previous_val]
 12147                                  	; bx = [next_val]
 12148 00007C44 6601D8                  	add	ax, bx
 12149 00007C47 66D1D8                  	rcr	ax, 1
 12150 00007C4A 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 12151 00007C4D 66AB                    	stosw		; this is interpolated sample (L)
 12152 00007C4F 66AB                    	stosw		; this is interpolated sample (R)
 12153                                  
 12154                                  	; different than 8-16-24 kHZ !
 12155                                  	; 'original-interpolated-original' trio samples 
 12156 00007C51 E309                    	jecxz	lff32m2_3
 12157                                  
 12158 00007C53 66AD                    	lodsw
 12159 00007C55 66AB                    	stosw		; original sample (left channel)
 12160 00007C57 66AB                    	stosw		; original sample (right channel)
 12161                                  
 12162                                  	; 32 kHZ mono to 48 kHZ stereo conversion of the sample is OK
 12163 00007C59 49                      	dec	ecx
 12164 00007C5A 75D7                    	jnz	short lff32m2_1
 12165                                  lff32m2_3:
 12166 00007C5C E9E1F8FFFF              	jmp	lff32_3
 12167                                  
 12168                                  ; --------------------------------------------------------
 12169                                  
 12170                                  load_32khz_stereo_16_bit:
 12171                                  	; 13/01/2025 (mp3play3.s)
 12172 00007C61 BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 12173 00007C66 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 12174 00007C6B 8B0D[60A30000]          	mov	ecx, [loadsize]
 12175                                  	; 13/01/2025
 12176 00007C71 C1E902                  	shr	ecx, 2	; dword count
 12177                                  lff32s2_1:
 12178 00007C74 66AD                    	lodsw
 12179 00007C76 66AB                    	stosw		; original sample (L)
 12180 00007C78 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format 
 12181 00007C7B 66A3[2B870000]          	mov	[previous_val_l], ax
 12182 00007C81 66AD                    	lodsw
 12183 00007C83 66AB                    	stosw		; original sample (R)
 12184 00007C85 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format 
 12185                                  	;mov	[previous_val_r], ax
 12186 00007C88 89C3                    	mov	ebx, eax
 12187 00007C8A 31D2                    	xor	edx, edx
 12188 00007C8C 31C0                    	xor	eax, eax
 12189                                  	; 16/11/2023
 12190 00007C8E 49                      	dec	ecx
 12191 00007C8F 7407                    	jz	short lff32s2_2
 12192 00007C91 668B06                  	mov	ax, [esi]
 12193 00007C94 668B5602                	mov	dx, [esi+2]
 12194                                  lff32s2_2:
 12195 00007C98 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
 12196                                  	;;mov	[next_val_l], ax
 12197                                  	;mov	ebp, eax
 12198 00007C9B 80C680                  	add	dh, 80h	; convert sound level 0 to 65535 format
 12199                                  	;mov	[next_val_r], dx
 12200 00007C9E 660305[2B870000]        	add	ax, [previous_val_l]
 12201 00007CA5 66D1D8                  	rcr	ax, 1
 12202 00007CA8 80EC80                  	sub	ah, 80h ; -32768 to +32767 format again
 12203 00007CAB 66AB                    	stosw		; this is interpolated sample (L)
 12204                                  	;mov	ax, [next_val_r]
 12205 00007CAD 89D0                    	mov	eax, edx
 12206                                  	;add	ax, [previous_val_r]
 12207 00007CAF 6601D8                  	add	ax, bx
 12208 00007CB2 66D1D8                  	rcr	ax, 1
 12209 00007CB5 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 12210 00007CB8 66AB                    	stosw		; this is interpolated sample (R)
 12211                                  
 12212                                  	; different than 8-16-24 kHZ !
 12213                                  	; 'original-interpolated-original' trio samples
 12214 00007CBA E30B                    	jecxz	lff32s2_3
 12215                                  
 12216 00007CBC 66AD                    	lodsw
 12217 00007CBE 66AB                    	stosw	; original sample (L)
 12218 00007CC0 66AD                    	lodsw
 12219 00007CC2 66AB                    	stosw	; original sample (R)
 12220                                  	
 12221                                  	; 32 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
 12222 00007CC4 49                      	dec	ecx
 12223 00007CC5 75AD                    	jnz	short lff32s2_1
 12224                                  lff32s2_3:
 12225 00007CC7 E976F8FFFF              	jmp	lff32_3
 12226                                  
 12227                                  ; --------------------------------------------------------
 12228                                  
 12229                                  load_22khz_mono_8_bit:
 12230                                  	; 13/01/2025 (mp3play3.s)
 12231 00007CCC BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 12232 00007CD1 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 12233 00007CD6 8B0D[60A30000]          	mov	ecx, [loadsize]
 12234                                  	; 13/01/2025
 12235                                  lff22m_9:
 12236 00007CDC BD05000000              	mov	ebp, 5	; interpolation (one step) loop count
 12237 00007CE1 C605[33870000]03        	mov	byte [faz], 3  ; 3 steps/phases
 12238                                  lff22m_1:
 12239                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
 12240 00007CE8 AC                      	lodsb
 12241 00007CE9 B280                    	mov	dl, 80h
 12242 00007CEB 49                      	dec	ecx
 12243 00007CEC 7402                    	jz	short lff22m_2_1
 12244 00007CEE 8A16                    	mov	dl, [esi]
 12245                                  lff22m_2_1:	
 12246                                  	; al = [previous_val]
 12247                                  	; dl = [next_val]
 12248 00007CF0 E8EC040000              	call	interpolating_3_8bit_mono ; 1 of 17
 12249 00007CF5 E32D                    	jecxz	lff22m_3
 12250                                  lff22m_2_2:
 12251 00007CF7 AC                      	lodsb
 12252 00007CF8 B280                    	mov	dl, 80h
 12253 00007CFA 49                      	dec	ecx
 12254 00007CFB 7402                    	jz	short lff22m_2_3
 12255 00007CFD 8A16                    	mov	dl, [esi]
 12256                                  lff22m_2_3:
 12257 00007CFF E867050000               	call	interpolating_2_8bit_mono ; 2 of 17 .. 6 of 17
 12258 00007D04 E31E                    	jecxz	lff22m_3
 12259 00007D06 4D                      	dec	ebp
 12260 00007D07 75EE                    	jnz	short lff22m_2_2
 12261                                  
 12262 00007D09 A0[33870000]            	mov	al, [faz]
 12263 00007D0E FEC8                    	dec	al
 12264 00007D10 74CA                    	jz	short lff22m_9
 12265 00007D12 FE0D[33870000]          	dec	byte [faz]
 12266 00007D18 BD04000000              	mov	ebp, 4
 12267 00007D1D FEC8                    	dec	al
 12268 00007D1F 75C7                    	jnz	short lff22m_1 ; 3:2:2:2:2 ; 7-11 of 17
 12269 00007D21 45                      	inc	ebp ; 5
 12270 00007D22 EBC4                    	jmp	short lff22m_1 ; 3:2:2:2:2:2 ; 12-17 of 17
 12271                                  
 12272                                  lff22m_3:
 12273                                  lff22s_3:
 12274 00007D24 E919F8FFFF              	jmp	lff22_3	; padfill
 12275                                  		; (put zeros in the remain words of the buffer)
 12276                                  
 12277                                  ; --------------------------------------------------------
 12278                                  
 12279                                  load_22khz_stereo_8_bit:
 12280                                  	; 13/01/2025 (mp3play3.s)
 12281 00007D29 BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 12282 00007D2E BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 12283 00007D33 8B0D[60A30000]          	mov	ecx, [loadsize]
 12284                                  	; 13/01/2025
 12285 00007D39 D1E9                    	shr	ecx, 1	; word count
 12286                                  lff22s_9:
 12287 00007D3B BD05000000              	mov	ebp, 5	; interpolation (one step) loop count
 12288 00007D40 C605[33870000]03        	mov	byte [faz], 3  ; 3 steps/phase
 12289                                  lff22s_1:
 12290                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
 12291 00007D47 66AD                    	lodsw
 12292 00007D49 66BA8080                	mov	dx, 8080h
 12293 00007D4D 49                      	dec	ecx
 12294 00007D4E 7403                    	jz	short lff22s_2_1
 12295 00007D50 668B16                  	mov	dx, [esi]
 12296                                  lff22s_2_1:	
 12297                                  	; al = [previous_val_l]
 12298                                  	; ah = [previous_val_r]
 12299                                  	; dl = [next_val_l]
 12300                                  	; dh = [next_val_r]
 12301 00007D53 E8BC040000              	call	interpolating_3_8bit_stereo ; 1 of 17
 12302 00007D58 E3CA                    	jecxz	lff22s_3
 12303                                  lff22s_2_2:
 12304 00007D5A 66AD                    	lodsw
 12305 00007D5C 66BA8080                	mov	dx, 8080h
 12306 00007D60 49                      	dec	ecx
 12307 00007D61 7403                    	jz	short lff22s_2_3
 12308 00007D63 668B16                  	mov	dx, [esi]
 12309                                  lff22s_2_3:
 12310 00007D66 E81D050000               	call	interpolating_2_8bit_stereo ; 2 of 17 .. 6 of 17
 12311 00007D6B E3B7                    	jecxz	lff22s_3
 12312 00007D6D 4D                      	dec	ebp
 12313 00007D6E 75EA                    	jnz	short lff22s_2_2
 12314                                  
 12315 00007D70 A0[33870000]            	mov	al, [faz]
 12316 00007D75 FEC8                    	dec	al
 12317 00007D77 74C2                    	jz	short lff22s_9
 12318 00007D79 FE0D[33870000]          	dec	byte [faz]
 12319 00007D7F BD04000000              	mov	ebp, 4
 12320 00007D84 FEC8                    	dec	al
 12321 00007D86 75BF                    	jnz	short lff22s_1 ; 3:2:2:2:2 ; 7-11 of 17
 12322 00007D88 45                      	inc	ebp ; 5
 12323 00007D89 EBBC                    	jmp	short lff22s_1 ; 3:2:2:2:2:2 ; 12-17 of 17
 12324                                  
 12325                                  ; --------------------------------------------------------
 12326                                  
 12327                                  load_22khz_mono_16_bit:
 12328                                  	; 13/01/2025 (mp3play3.s)
 12329 00007D8B BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 12330 00007D90 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 12331 00007D95 8B0D[60A30000]          	mov	ecx, [loadsize]
 12332                                  	; 13/01/2025
 12333 00007D9B D1E9                    	shr	ecx, 1	; word count
 12334                                  lff22m2_9:
 12335 00007D9D BD05000000              	mov	ebp, 5	; interpolation (one step) loop count
 12336 00007DA2 C605[33870000]03        	mov	byte [faz], 3  ; 3 steps/phases
 12337                                  lff22m2_1:
 12338                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
 12339 00007DA9 66AD                    	lodsw
 12340 00007DAB 31D2                    	xor	edx, edx
 12341 00007DAD 49                      	dec	ecx
 12342 00007DAE 7403                    	jz	short lff22m2_2_1
 12343 00007DB0 668B16                  	mov	dx, [esi]
 12344                                  lff22m2_2_1:	
 12345                                  	; ax = [previous_val]
 12346                                  	; dx = [next_val]
 12347 00007DB3 E801050000              	call	interpolating_3_16bit_mono ; 1 of 17
 12348 00007DB8 E32F                    	jecxz	lff22m2_3
 12349                                  lff22m2_2_2:
 12350 00007DBA 66AD                    	lodsw
 12351 00007DBC 31D2                    	xor	edx, edx
 12352 00007DBE 49                      	dec	ecx
 12353 00007DBF 7403                    	jz	short lff22m2_2_3
 12354 00007DC1 668B16                  	mov	dx, [esi]
 12355                                  lff22m2_2_3:
 12356 00007DC4 E883050000               	call	interpolating_2_16bit_mono ; 2 of 17 .. 6 of 17
 12357 00007DC9 E31E                    	jecxz	lff22m2_3
 12358 00007DCB 4D                      	dec	ebp
 12359 00007DCC 75EC                    	jnz	short lff22m2_2_2
 12360                                  
 12361 00007DCE A0[33870000]            	mov	al, [faz]
 12362 00007DD3 FEC8                    	dec	al
 12363 00007DD5 74C6                    	jz	short lff22m2_9
 12364 00007DD7 FE0D[33870000]          	dec	byte [faz]
 12365 00007DDD BD04000000              	mov	ebp, 4
 12366 00007DE2 FEC8                    	dec	al
 12367 00007DE4 75C3                    	jnz	short lff22m2_1 ; 3:2:2:2:2 ; 7-11 of 17
 12368 00007DE6 45                      	inc	ebp ; 5
 12369 00007DE7 EBC0                    	jmp	short lff22m2_1 ; 3:2:2:2:2:2 ; 12-17 of 17
 12370                                  
 12371                                  lff22m2_3:
 12372                                  lff22s2_3:
 12373 00007DE9 E954F7FFFF              	jmp	lff22_3	; padfill
 12374                                  		; (put zeros in the remain words of the buffer)
 12375                                  
 12376                                  ; --------------------------------------------------------
 12377                                  
 12378                                  load_22khz_stereo_16_bit:
 12379                                  	; 13/01/2025 (mp3play3.s)
 12380 00007DEE BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 12381 00007DF3 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 12382 00007DF8 8B0D[60A30000]          	mov	ecx, [loadsize]
 12383                                  	; 13/01/2025
 12384 00007DFE C1E902                  	shr	ecx, 2	; dword count
 12385                                  lff22s2_9:
 12386 00007E01 BD05000000              	mov	ebp, 5	; interpolation (one step) loop count
 12387 00007E06 C605[33870000]03        	mov	byte [faz], 3  ; 3 steps/phase
 12388                                  lff22s2_1:
 12389                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
 12390 00007E0D 66AD                    	lodsw
 12391 00007E0F 89C3                    	mov	ebx, eax
 12392 00007E11 66AD                    	lodsw
 12393 00007E13 8B16                    	mov	edx, [esi]
 12394 00007E15 668915[2F870000]        	mov	[next_val_l], dx
 12395                                  	; 26/11/2023
 12396 00007E1C C1EA10                  	shr	edx, 16
 12397 00007E1F 49                      	dec	ecx
 12398 00007E20 7509                    	jnz	short lff22s2_2_1
 12399 00007E22 31D2                    	xor	edx, edx ; 0
 12400 00007E24 668915[2F870000]        	mov	[next_val_l], dx
 12401                                  lff22s2_2_1:
 12402                                  	; bx = [previous_val_l]
 12403                                  	; ax = [previous_val_r]
 12404                                  	; [next_val_l]
 12405                                  	; dx = [next_val_r]
 12406 00007E2B E8B9040000              	call	interpolating_3_16bit_stereo ; 1 of 17 
 12407 00007E30 E3B7                    	jecxz	lff22s2_3
 12408                                  lff22s2_2_2:
 12409 00007E32 66AD                    	lodsw
 12410 00007E34 89C3                    	mov	ebx, eax
 12411 00007E36 66AD                    	lodsw
 12412 00007E38 8B16                    	mov	edx, [esi]
 12413 00007E3A 668915[2F870000]        	mov	[next_val_l], dx
 12414                                  	; 26/11/2023
 12415 00007E41 C1EA10                  	shr	edx, 16
 12416 00007E44 49                      	dec	ecx
 12417 00007E45 7509                    	jnz	short lff22s2_2_3
 12418 00007E47 31D2                    	xor	edx, edx ; 0
 12419 00007E49 668915[2F870000]        	mov	[next_val_l], dx
 12420                                  lff22s2_2_3:
 12421 00007E50 E80F050000               	call	interpolating_2_16bit_stereo ; 2 of 17 .. 6 of 17
 12422 00007E55 E31E                    	jecxz	lff22s2_2_4
 12423                                  
 12424 00007E57 4D                      	dec	ebp
 12425 00007E58 75D8                    	jnz	short lff22s2_2_2
 12426                                  
 12427 00007E5A A0[33870000]            	mov	al, [faz]
 12428 00007E5F FEC8                    	dec	al
 12429 00007E61 749E                    	jz	short lff22s2_9
 12430 00007E63 FE0D[33870000]          	dec	byte [faz]
 12431 00007E69 BD04000000              	mov	ebp, 4
 12432 00007E6E FEC8                    	dec	al
 12433 00007E70 759B                    	jnz	short lff22s2_1 ; 3:2:2:2:2 ; 7-11 of 17
 12434 00007E72 45                      	inc	ebp ; 5
 12435 00007E73 EB98                    	jmp	short lff22s2_1 ; 3:2:2:2:2:2 ; 12-17 of 17
 12436                                  
 12437                                  lff22s2_2_4:
 12438                                  	; 26/11/2023
 12439 00007E75 E9C8F6FFFF              	jmp	lff22_3	; padfill
 12440                                  
 12441                                  ; --------------------------------------------------------
 12442                                  
 12443                                  load_11khz_mono_8_bit:
 12444                                  	; 13/01/2025 (mp3play3.s)
 12445 00007E7A BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 12446 00007E7F BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 12447 00007E84 8B0D[60A30000]          	mov	ecx, [loadsize]
 12448                                  	; 13/01/2025
 12449                                  lff11m_9:
 12450 00007E8A BD06000000              	mov	ebp, 6	; interpolation (one step) loop count
 12451                                  lff11m_1:
 12452                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
 12453 00007E8F AC                      	lodsb
 12454 00007E90 B280                    	mov	dl, 80h
 12455 00007E92 49                      	dec	ecx
 12456 00007E93 7402                    	jz	short lff11m_2_1
 12457 00007E95 8A16                    	mov	dl, [esi]
 12458                                  lff11m_2_1:	
 12459                                  	; al = [previous_val]
 12460                                  	; dl = [next_val]
 12461 00007E97 E8F7040000              	call	interpolating_5_8bit_mono
 12462 00007E9C E378                    	jecxz	lff11m_3
 12463                                  lff11m_2_2:
 12464 00007E9E AC                      	lodsb
 12465 00007E9F B280                    	mov	dl, 80h
 12466 00007EA1 49                      	dec	ecx
 12467 00007EA2 7402                    	jz	short lff11m_2_3
 12468 00007EA4 8A16                    	mov	dl, [esi]
 12469                                  lff11m_2_3:
 12470 00007EA6 E8F4050000               	call	interpolating_4_8bit_mono
 12471 00007EAB E369                    	jecxz	lff11m_3
 12472                                  
 12473 00007EAD 4D                      	dec	ebp
 12474 00007EAE 74DA                    	jz	short lff11m_9
 12475                                  
 12476 00007EB0 AC                      	lodsb
 12477 00007EB1 B280                    	mov	dl, 80h
 12478 00007EB3 49                      	dec	ecx
 12479 00007EB4 7402                    	jz	short lff11m_2_4
 12480 00007EB6 8A16                    	mov	dl, [esi]
 12481                                  lff11m_2_4:
 12482 00007EB8 E8E2050000              	call	interpolating_4_8bit_mono
 12483 00007EBD E357                    	jecxz	lff11m_3
 12484 00007EBF EBCE                    	jmp	short lff11m_1
 12485                                  
 12486                                  ; --------------------------------------------------------
 12487                                  
 12488                                  load_11khz_stereo_8_bit:
 12489                                  	; 13/01/2025 (mp3play3.s)
 12490 00007EC1 BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 12491 00007EC6 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 12492 00007ECB 8B0D[60A30000]          	mov	ecx, [loadsize]
 12493                                  	; 13/01/2025
 12494 00007ED1 D1E9                    	shr	ecx, 1	; word count
 12495                                  lff11s_9:
 12496 00007ED3 BD06000000              	mov	ebp, 6	; interpolation (one step) loop count
 12497                                  lff11s_1:
 12498                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
 12499 00007ED8 66AD                    	lodsw
 12500 00007EDA 66BA8080                	mov	dx, 8080h
 12501 00007EDE 49                      	dec	ecx
 12502 00007EDF 7403                    	jz	short lff11s_2_1
 12503 00007EE1 668B16                  	mov	dx, [esi]
 12504                                  lff11s_2_1:	
 12505                                  	; al = [previous_val_l]
 12506                                  	; ah = [previous_val_r]
 12507                                  	; dl = [next_val_l]
 12508                                  	; dh = [next_val_r]
 12509 00007EE4 E809050000              	call	interpolating_5_8bit_stereo
 12510 00007EE9 E32B                    	jecxz	lff11s_3
 12511                                  lff11s_2_2:
 12512 00007EEB 66AD                    	lodsw
 12513 00007EED 66BA8080                	mov	dx, 8080h
 12514 00007EF1 49                      	dec	ecx
 12515 00007EF2 7403                    	jz	short lff11s_2_3
 12516 00007EF4 668B16                  	mov	dx, [esi]
 12517                                  lff11s_2_3:
 12518 00007EF7 E8E2050000               	call	interpolating_4_8bit_stereo
 12519 00007EFC E318                    	jecxz	lff11s_3
 12520                                  	
 12521 00007EFE 4D                      	dec	ebp
 12522 00007EFF 74D2                    	jz	short lff11s_9
 12523                                  
 12524 00007F01 66AD                    	lodsw
 12525 00007F03 66BA8080                	mov	dx, 8080h
 12526 00007F07 49                      	dec	ecx
 12527 00007F08 7403                    	jz	short lff11s_2_4
 12528 00007F0A 668B16                  	mov	dx, [esi]
 12529                                  lff11s_2_4:
 12530 00007F0D E8CC050000              	call	interpolating_4_8bit_stereo
 12531 00007F12 E302                    	jecxz	lff11s_3
 12532 00007F14 EBC2                    	jmp	short lff11s_1
 12533                                  
 12534                                  lff11m_3:
 12535                                  lff11s_3:
 12536 00007F16 E927F6FFFF              	jmp	lff11_3	; padfill
 12537                                  		; (put zeros in the remain words of the buffer)
 12538                                  
 12539                                  ; --------------------------------------------------------
 12540                                  
 12541                                  load_11khz_mono_16_bit:
 12542                                  	; 13/01/2025 (mp3play3.s)
 12543 00007F1B BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 12544 00007F20 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 12545 00007F25 8B0D[60A30000]          	mov	ecx, [loadsize]
 12546                                  	; 13/01/2025
 12547 00007F2B D1E9                    	shr	ecx, 1	; word count
 12548                                  lff11m2_9:
 12549 00007F2D BD06000000              	mov	ebp, 6	; interpolation (one step) loop count
 12550                                  lff11m2_1:
 12551                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
 12552 00007F32 66AD                    	lodsw
 12553 00007F34 31D2                    	xor	edx, edx
 12554 00007F36 49                      	dec	ecx
 12555 00007F37 7403                    	jz	short lff11m2_2_1
 12556 00007F39 668B16                  	mov	dx, [esi]
 12557                                  lff11m2_2_1:	
 12558                                  	; ax = [previous_val]
 12559                                  	; dx = [next_val]
 12560 00007F3C E80A060000              	call	interpolating_5_16bit_mono
 12561 00007F41 E327                    	jecxz	lff11m2_3
 12562                                  lff11m2_2_2:
 12563 00007F43 66AD                    	lodsw
 12564 00007F45 31D2                    	xor	edx, edx
 12565 00007F47 49                      	dec	ecx
 12566 00007F48 7403                    	jz	short lff11m2_2_3
 12567 00007F4A 668B16                  	mov	dx, [esi]
 12568                                  lff11m2_2_3:
 12569 00007F4D E823070000               	call	interpolating_4_16bit_mono
 12570 00007F52 E316                    	jecxz	lff11m2_3
 12571                                  
 12572 00007F54 4D                      	dec	ebp
 12573 00007F55 74D6                    	jz	short lff11m2_9
 12574                                  
 12575 00007F57 66AD                    	lodsw
 12576 00007F59 31D2                    	xor	edx, edx
 12577 00007F5B 49                      	dec	ecx
 12578 00007F5C 7403                    	jz	short lff11m2_2_4
 12579 00007F5E 668B16                  	mov	dx, [esi]
 12580                                  lff11m2_2_4:
 12581 00007F61 E80F070000               	call	interpolating_4_16bit_mono
 12582 00007F66 E302                    	jecxz	lff11m2_3
 12583 00007F68 EBC8                    	jmp	short lff11m2_1
 12584                                  
 12585                                  lff11m2_3:
 12586 00007F6A E9D3F5FFFF              	jmp	lff11_3	; padfill
 12587                                  		; (put zeros in the remain words of the buffer)
 12588                                  
 12589                                  ; --------------------------------------------------------
 12590                                  
 12591                                  load_11khz_stereo_16_bit:
 12592                                  	; 13/01/2025 (mp3play3.s)
 12593 00007F6F BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 12594 00007F74 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 12595 00007F79 8B0D[60A30000]          	mov	ecx, [loadsize]
 12596                                  	; 13/01/2025
 12597 00007F7F C1E902                  	shr	ecx, 2	; dword count
 12598                                  lff11s2_9:
 12599 00007F82 BD06000000              	mov	ebp, 6	; interpolation (one step) loop count
 12600                                  lff11s2_1:
 12601                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
 12602 00007F87 66AD                    	lodsw
 12603 00007F89 89C3                    	mov	ebx, eax
 12604 00007F8B 66AD                    	lodsw
 12605 00007F8D 8B16                    	mov	edx, [esi]
 12606                                  	; 15/01/2025
 12607                                  	;mov	[next_val_l], edx
 12608                                  	; 26/11/2023
 12609                                  	;shr	edx, 16
 12610                                  	;mov	[next_val_r], dx
 12611 00007F8F 49                      	dec	ecx
 12612 00007F90 7502                    	jnz	short lff11s2_2_1
 12613 00007F92 31D2                    	xor	edx, edx ; 0
 12614                                  	;mov	[next_val_l], dx
 12615                                  	;mov	[next_val_r], dx
 12616                                  lff11s2_2_1:
 12617                                  	; bx = [previous_val_l]
 12618                                  	; ax = [previous_val_r]
 12619                                  	; [next_val_l]
 12620                                  	; dx = [next_val_r]
 12621                                  	;;;
 12622                                  	; 15/01/2025 (BugFix)
 12623 00007F94 8915[2F870000]          	mov	[next_val_l], edx
 12624                                  	;;;
 12625 00007F9A E807060000              	call	interpolating_5_16bit_stereo
 12626 00007F9F E339                    	jecxz	lff11s2_3
 12627                                  lff11s2_2_2:
 12628 00007FA1 66AD                    	lodsw
 12629 00007FA3 89C3                    	mov	ebx, eax
 12630 00007FA5 66AD                    	lodsw
 12631 00007FA7 8B16                    	mov	edx, [esi]
 12632                                  	; 15/01/2025
 12633                                  	;mov	[next_val_l], dx
 12634                                  	; 26/11/2023
 12635                                  	;shr	edx, 16
 12636                                  	;mov	[next_val_r], dx
 12637 00007FA9 49                      	dec	ecx
 12638 00007FAA 7502                    	jnz	short lff11s2_2_3
 12639 00007FAC 31D2                    	xor	edx, edx ; 0
 12640                                  	;mov	[next_val_l], dx
 12641                                  	;mov	[next_val_r], dx
 12642                                  lff11s2_2_3:
 12643                                  	;;;
 12644                                  	; 15/01/2025 (BugFix)
 12645 00007FAE 8915[2F870000]          	mov	[next_val_l], edx
 12646                                  	;;;
 12647 00007FB4 E8F5060000              	call	interpolating_4_16bit_stereo
 12648 00007FB9 E31F                    	jecxz	lff11s2_3
 12649                                  	
 12650 00007FBB 4D                      	dec	ebp
 12651 00007FBC 74C4                    	jz	short lff11s2_9
 12652                                  
 12653 00007FBE 66AD                    	lodsw
 12654 00007FC0 89C3                    	mov	ebx, eax
 12655 00007FC2 66AD                    	lodsw
 12656 00007FC4 8B16                    	mov	edx, [esi]
 12657                                  	; 15/01/2025
 12658                                  	;mov	[next_val_l], dx
 12659                                  	; 26/11/2023
 12660                                  	;shr	edx, 16
 12661                                  	;mov	[next_val_r], dx
 12662 00007FC6 49                      	dec	ecx
 12663 00007FC7 7502                    	jnz	short lff11s2_2_4
 12664 00007FC9 31D2                    	xor	edx, edx ; 0
 12665                                  	;mov	[next_val_l], dx
 12666                                  	;mov	[next_val_r], dx
 12667                                  lff11s2_2_4:
 12668                                  	;;;
 12669                                  	; 15/01/2025 (BugFix)
 12670 00007FCB 8915[2F870000]          	mov	[next_val_l], edx
 12671                                  	;;;
 12672 00007FD1 E8D8060000               	call	interpolating_4_16bit_stereo
 12673 00007FD6 E302                    	jecxz	lff11s2_3
 12674 00007FD8 EBAD                    	jmp	short lff11s2_1
 12675                                  
 12676                                  lff11s2_3:
 12677 00007FDA E963F5FFFF              	jmp	lff11_3	; padfill
 12678                                  		; (put zeros in the remain words of the buffer)
 12679                                  
 12680                                  ; --------------------------------------------------------
 12681                                  
 12682                                  load_44khz_mono_8_bit:
 12683                                  	; 13/01/2025 (mp3play3.s)
 12684 00007FDF BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 12685 00007FE4 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 12686 00007FE9 8B0D[60A30000]          	mov	ecx, [loadsize]
 12687                                  	; 13/01/2025
 12688                                  lff44m_9:
 12689 00007FEF BD0A000000              	mov	ebp, 10	; interpolation (one step) loop count
 12690 00007FF4 C605[33870000]02        	mov	byte [faz], 2  ; 2 steps/phases
 12691                                  lff44m_1:
 12692                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
 12693                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
 12694 00007FFB AC                      	lodsb
 12695 00007FFC B280                    	mov	dl, 80h
 12696 00007FFE 49                      	dec	ecx
 12697 00007FFF 7402                    	jz	short lff44m_2_1
 12698 00008001 8A16                    	mov	dl, [esi]
 12699                                  lff44m_2_1:	
 12700                                  	; al = [previous_val]
 12701                                  	; dl = [next_val]
 12702 00008003 E863020000              	call	interpolating_2_8bit_mono
 12703 00008008 E320                    	jecxz	lff44m_3
 12704                                  lff44m_2_2:
 12705 0000800A AC                      	lodsb
 12706 0000800B 2C80                    	sub	al, 80h
 12707 0000800D 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 12708 00008011 66AB                    	stosw		; (L)
 12709 00008013 66AB                    	stosw		; (R)
 12710                                  
 12711 00008015 49                      	dec	ecx
 12712 00008016 7412                    	jz	short lff44m_3
 12713 00008018 4D                      	dec	ebp
 12714 00008019 75EF                    	jnz	short lff44m_2_2
 12715                                  	
 12716 0000801B FE0D[33870000]          	dec	byte [faz]
 12717 00008021 74CC                    	jz	short lff44m_9 
 12718 00008023 BD0B000000              	mov	ebp, 11
 12719 00008028 EBD1                    	jmp	short lff44m_1
 12720                                  
 12721                                  lff44m_3:
 12722                                  lff44s_3:
 12723 0000802A E913F5FFFF              	jmp	lff44_3	; padfill
 12724                                  		; (put zeros in the remain words of the buffer)
 12725                                  
 12726                                  ; --------------------------------------------------------
 12727                                  
 12728                                  load_44khz_stereo_8_bit:
 12729                                  	; 13/01/2025 (mp3play3.s)
 12730 0000802F BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 12731 00008034 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 12732 00008039 8B0D[60A30000]          	mov	ecx, [loadsize]
 12733                                  	; 13/01/2025
 12734 0000803F D1E9                    	shr	ecx, 1	; word count
 12735                                  lff44s_9:
 12736 00008041 BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
 12737 00008046 C605[33870000]02        	mov	byte [faz], 2  ; 2 steps/phase
 12738                                  lff44s_1:
 12739                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
 12740                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
 12741 0000804D 66AD                    	lodsw
 12742 0000804F 66BA8080                	mov	dx, 8080h
 12743 00008053 49                      	dec	ecx
 12744 00008054 7403                    	jz	short lff44s_2_1
 12745 00008056 668B16                  	mov	dx, [esi]
 12746                                  lff44s_2_1:	
 12747                                  	; al = [previous_val_l]
 12748                                  	; ah = [previous_val_r]
 12749                                  	; dl = [next_val_l]
 12750                                  	; dh = [next_val_r]
 12751 00008059 E82A020000              	call	interpolating_2_8bit_stereo
 12752 0000805E E3CA                    	jecxz	lff44s_3
 12753                                  lff44s_2_2:
 12754 00008060 AC                      	lodsb
 12755 00008061 2C80                    	sub	al, 80h
 12756 00008063 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 12757 00008067 66AB                    	stosw		; (L)
 12758 00008069 AC                      	lodsb
 12759 0000806A 2C80                    	sub	al, 80h
 12760 0000806C 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 12761 00008070 66AB                    	stosw		; (R)
 12762                                  
 12763 00008072 49                      	dec	ecx
 12764 00008073 74B5                    	jz	short lff44s_3	
 12765 00008075 4D                      	dec	ebp
 12766 00008076 75E8                    	jnz	short lff44s_2_2
 12767                                  	
 12768 00008078 FE0D[33870000]          	dec	byte [faz]
 12769 0000807E 74C1                    	jz	short lff44s_9 
 12770 00008080 BD0B000000              	mov	ebp, 11
 12771 00008085 EBC6                    	jmp	short lff44s_1
 12772                                  
 12773                                  ; --------------------------------------------------------
 12774                                  
 12775                                  load_44khz_mono_16_bit:
 12776                                  	; 13/01/2025 (mp3play3.s)
 12777 00008087 BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 12778 0000808C BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 12779 00008091 8B0D[60A30000]          	mov	ecx, [loadsize]
 12780                                  	; 13/01/2025
 12781 00008097 D1E9                    	shr	ecx, 1	; word count
 12782                                  lff44m2_9:
 12783 00008099 BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
 12784 0000809E C605[33870000]02        	mov	byte [faz], 2  ; 2 steps/phases
 12785                                  lff44m2_1:
 12786                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
 12787                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
 12788 000080A5 66AD                    	lodsw
 12789 000080A7 31D2                    	xor	edx, edx
 12790 000080A9 49                      	dec	ecx
 12791 000080AA 7403                    	jz	short lff44m2_2_1
 12792 000080AC 668B16                  	mov	dx, [esi]
 12793                                  lff44m2_2_1:	
 12794                                  	; ax = [previous_val]
 12795                                  	; dx = [next_val]
 12796 000080AF E898020000              	call	interpolating_2_16bit_mono
 12797 000080B4 E31B                    	jecxz	lff44m2_3
 12798                                  lff44m2_2_2:
 12799 000080B6 66AD                    	lodsw
 12800 000080B8 66AB                    	stosw		; (L)eft Channel
 12801 000080BA 66AB                    	stosw		; (R)ight Channel
 12802                                  
 12803 000080BC 49                      	dec	ecx
 12804 000080BD 7412                    	jz	short lff44m2_3	
 12805 000080BF 4D                      	dec	ebp
 12806 000080C0 75F4                    	jnz	short lff44m2_2_2
 12807                                  	
 12808 000080C2 FE0D[33870000]          	dec	byte [faz]
 12809 000080C8 74CF                    	jz	short lff44m2_9 
 12810 000080CA BD0B000000              	mov	ebp, 11
 12811 000080CF EBD4                    	jmp	short lff44m2_1
 12812                                  
 12813                                  lff44m2_3:
 12814                                  lff44s2_3:
 12815 000080D1 E96CF4FFFF              	jmp	lff44_3	; padfill
 12816                                  		; (put zeros in the remain words of the buffer)
 12817                                  
 12818                                  ; --------------------------------------------------------
 12819                                  
 12820                                  load_44khz_stereo_16_bit:
 12821                                  	; 13/01/2025 (mp3play3.s)
 12822 000080D6 BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 12823 000080DB BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 12824 000080E0 8B0D[60A30000]          	mov	ecx, [loadsize]
 12825                                  	; 13/01/2025
 12826 000080E6 C1E902                  	shr	ecx, 2	; dword count
 12827                                  lff44s2_9:
 12828 000080E9 BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
 12829 000080EE C605[33870000]02        	mov	byte [faz], 2  ; 2 steps/phase
 12830                                  lff44s2_1:
 12831                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
 12832                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
 12833 000080F5 66AD                    	lodsw
 12834 000080F7 89C3                    	mov	ebx, eax
 12835 000080F9 66AD                    	lodsw
 12836                                  	;mov	dx, [esi]
 12837                                  	;mov	[next_val_l], dx
 12838                                  	;mov	dx, [esi+2]
 12839                                  	; 26/11/2023
 12840 000080FB 8B16                    	mov	edx, [esi]
 12841 000080FD 668915[2F870000]        	mov	[next_val_l], dx
 12842 00008104 C1EA10                  	shr	edx, 16
 12843 00008107 49                      	dec	ecx
 12844 00008108 7509                    	jnz	short lff44s2_2_1
 12845 0000810A 31D2                    	xor	edx, edx ; 0
 12846 0000810C 668915[2F870000]        	mov	[next_val_l], dx
 12847                                  lff44s2_2_1:
 12848                                  	; bx = [previous_val_l]
 12849                                  	; ax = [previous_val_r]
 12850                                  	; [next_val_l]
 12851                                  	; dx = [next_val_r]
 12852 00008113 E84C020000              	call	interpolating_2_16bit_stereo
 12853 00008118 E3B7                    	jecxz	lff44s2_3
 12854                                  lff44s2_2_2:
 12855                                  	;movsw		; (L)eft Channel
 12856                                  	;movsw		; (R)ight Channel
 12857 0000811A A5                      	movsd
 12858                                  
 12859 0000811B 49                      	dec	ecx
 12860 0000811C 74B3                    	jz	short lff44s2_3	
 12861 0000811E 4D                      	dec	ebp
 12862 0000811F 75F9                    	jnz	short lff44s2_2_2
 12863                                  	
 12864 00008121 FE0D[33870000]          	dec	byte [faz]
 12865 00008127 74C0                    	jz	short lff44s2_9 
 12866 00008129 BD0B000000              	mov	ebp, 11
 12867 0000812E EBC5                    	jmp	short lff44s2_1
 12868                                  
 12869                                  ; --------------------------------------------------------
 12870                                  
 12871                                  	; 02/01/2025
 12872                                  load_12khz_mono_8_bit:
 12873 00008130 BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 12874 00008135 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 12875 0000813A 8B0D[60A30000]          	mov	ecx, [loadsize]
 12876                                  lff12m_1:
 12877                                  	; original-interpolated-interpolated-interpolated
 12878 00008140 AC                      	lodsb
 12879 00008141 B280                    	mov	dl, 80h
 12880 00008143 49                      	dec	ecx
 12881 00008144 7402                    	jz	short lff12m_2
 12882 00008146 8A16                    	mov	dl, [esi]
 12883                                  lff12m_2:	
 12884                                  	; al = [previous_val]
 12885                                  	; dl = [next_val]
 12886 00008148 E852030000               	call	interpolating_4_8bit_mono
 12887 0000814D E329                    	jecxz	lff12m_3
 12888 0000814F EBEF                    	jmp	short lff12m_1
 12889                                  
 12890                                  ; --------------------------------------------------------
 12891                                  
 12892                                  	; 01/02/2025
 12893                                  load_12khz_stereo_8_bit:
 12894                                  	; 13/01/2025 (mp3play3.s)
 12895 00008151 BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 12896 00008156 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 12897 0000815B 8B0D[60A30000]          	mov	ecx, [loadsize]
 12898 00008161 D1E9                    	shr	ecx, 1	; word count
 12899                                  lff12s_1:
 12900                                  	; original-interpolated-interpolated-interpolated
 12901 00008163 66AD                    	lodsw
 12902 00008165 66BA8080                	mov	dx, 8080h
 12903 00008169 49                      	dec	ecx
 12904 0000816A 7403                    	jz	short lff12s_2
 12905 0000816C 668B16                  	mov	dx, [esi]
 12906                                  lff12s_2:	
 12907                                  	; al = [previous_val_l]
 12908                                  	; ah = [previous_val_r]
 12909                                  	; dl = [next_val_l]
 12910                                  	; dh = [next_val_r]
 12911 0000816F E86A030000              	call	interpolating_4_8bit_stereo
 12912 00008174 E302                    	jecxz	lff12s_3
 12913 00008176 EBEB                    	jmp	short lff12s_1
 12914                                  
 12915                                  lff12m_3:
 12916                                  lff12s_3:
 12917 00008178 E9C5F3FFFF              	jmp	lff12_3	; padfill
 12918                                  		; (put zeros in the remain words of the buffer)
 12919                                  
 12920                                  ; --------------------------------------------------------
 12921                                  
 12922                                  	; 01/02/2025
 12923                                  load_12khz_mono_16_bit:
 12924 0000817D BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 12925 00008182 BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 12926 00008187 8B0D[60A30000]          	mov	ecx, [loadsize]
 12927 0000818D D1E9                    	shr	ecx, 1	; word count
 12928                                  lff12m2_9:
 12929 0000818F BD06000000              	mov	ebp, 6	; interpolation (one step) loop count
 12930                                  lff12m2_1:
 12931                                  	; original-interpolated-interpolated-interpolated
 12932 00008194 66AD                    	lodsw
 12933 00008196 31D2                    	xor	edx, edx
 12934 00008198 49                      	dec	ecx
 12935 00008199 7403                    	jz	short lff12m2_2
 12936 0000819B 668B16                  	mov	dx, [esi]
 12937                                  lff12m2_2:	
 12938                                  	; ax = [previous_val]
 12939                                  	; dx = [next_val]
 12940 0000819E E8D2040000               	call	interpolating_4_16bit_mono
 12941 000081A3 E3D3                    	jecxz	lff12m_3
 12942 000081A5 EBED                    	jmp	short lff12m2_1
 12943                                  
 12944                                  ; --------------------------------------------------------
 12945                                  
 12946                                  	; 01/02/2025
 12947                                  load_12khz_stereo_16_bit:
 12948 000081A7 BE[00500500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
 12949 000081AC BF[00700500]            	mov	edi, sample_buffer ; wav output buffer
 12950 000081B1 8B0D[60A30000]          	mov	ecx, [loadsize]
 12951 000081B7 C1E902                  	shr	ecx, 2	; dword count
 12952                                  lff12s2_1:
 12953                                  	; original-interpolated-interpolated-interpolated
 12954 000081BA 66AD                    	lodsw
 12955 000081BC 89C3                    	mov	ebx, eax
 12956 000081BE 66AD                    	lodsw
 12957 000081C0 8B16                    	mov	edx, [esi]
 12958 000081C2 49                      	dec	ecx
 12959 000081C3 7502                    	jnz	short lff12s2_2
 12960 000081C5 31D2                    	xor	edx, edx ; 0
 12961                                  lff12s2_2:
 12962 000081C7 668915[2F870000]        	mov	[next_val_l], dx
 12963 000081CE C1EA10                  	shr	edx, 16
 12964 000081D1 668915[31870000]        	mov	[next_val_r], dx
 12965                                  	; bx = [previous_val_l]
 12966                                  	; ax = [previous_val_r]
 12967                                  	; [next_val_l]
 12968                                  	; [next_val_r]
 12969 000081D8 E8D1040000              	call	interpolating_4_16bit_stereo
 12970 000081DD E399                    	jecxz	lff12s_3
 12971 000081DF EBD9                    	jmp	short lff12s2_1
 12972                                  
 12973                                  ; --------------------------------------------------------
 12974                                  
 12975                                  interpolating_3_8bit_mono:
 12976                                  	; 01/02/2025
 12977                                  	; 16/11/2023
 12978                                  	; al = [previous_val]
 12979                                  	; dl = [next_val]
 12980                                  	; original-interpolated-interpolated
 12981 000081E1 88C3                    	mov	bl, al
 12982 000081E3 2C80                    	sub	al, 80h
 12983 000081E5 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 12984 000081E9 66AB                    	stosw		; original sample (L)
 12985 000081EB 66AB                    	stosw		; original sample (R)
 12986 000081ED 88D8                    	mov	al, bl
 12987 000081EF 00D0                    	add	al, dl
 12988 000081F1 D0D8                    	rcr	al, 1
 12989 000081F3 88C7                    	mov	bh, al	; interpolated middle (temporary)
 12990 000081F5 00D8                    	add	al, bl
 12991 000081F7 D0D8                    	rcr	al, 1
 12992 000081F9 2C80                    	sub	al, 80h
 12993 000081FB 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 12994 000081FF 66AB                    	stosw		; interpolated sample 1 (L)
 12995 00008201 66AB                    	stosw		; interpolated sample 1 (R)
 12996 00008203 88F8                    	mov	al, bh
 12997 00008205 00D0                    	add	al, dl	; [next_val]
 12998 00008207 D0D8                    	rcr	al, 1
 12999                                  	; 01/02/2025
 13000 00008209 2C80                    	sub	al, 80h
 13001 0000820B 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13002 0000820F 66AB                    	stosw		; interpolated sample 2 (L)
 13003 00008211 66AB                    	stosw		; interpolated sample 2 (R)
 13004 00008213 C3                      	retn
 13005                                  
 13006                                  interpolating_3_8bit_stereo:
 13007                                  	; 01/02/2025
 13008                                  	; 16/11/2023
 13009                                  	; al = [previous_val_l]
 13010                                  	; ah = [previous_val_r]
 13011                                  	; dl = [next_val_l]
 13012                                  	; dh = [next_val_r]
 13013                                  	; original-interpolated-interpolated
 13014 00008214 89C3                    	mov	ebx, eax
 13015 00008216 2C80                    	sub	al, 80h
 13016 00008218 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13017 0000821C 66AB                    	stosw		; original sample (L)
 13018 0000821E 88F8                    	mov	al, bh
 13019 00008220 2C80                    	sub	al, 80h
 13020 00008222 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13021 00008226 66AB                    	stosw		; original sample (R)
 13022 00008228 88D8                    	mov	al, bl
 13023 0000822A 00D0                    	add	al, dl	; [next_val_l]
 13024 0000822C D0D8                    	rcr	al, 1
 13025 0000822E 50                      	push	eax ; *	; al = interpolated middle (L) (temporary)
 13026 0000822F 00D8                    	add	al, bl	; [previous_val_l]
 13027 00008231 D0D8                    	rcr	al, 1
 13028 00008233 2C80                    	sub	al, 80h
 13029 00008235 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13030 00008239 66AB                    	stosw		; interpolated sample 1 (L)
 13031 0000823B 88F8                    	mov	al, bh
 13032 0000823D 00F0                    	add	al, dh	; [next_val_r]
 13033 0000823F D0D8                    	rcr	al, 1
 13034 00008241 50                      	push	eax ; ** ; al = interpolated middle (R) (temporary)
 13035 00008242 00F8                    	add	al, bh	; [previous_val_r]
 13036 00008244 D0D8                    	rcr	al, 1
 13037 00008246 2C80                    	sub	al, 80h
 13038 00008248 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13039 0000824C 66AB                    	stosw		; interpolated sample 1 (R)
 13040 0000824E 5B                      	pop	ebx ; **
 13041 0000824F 58                      	pop	eax ; *
 13042 00008250 00D0                    	add	al, dl	; [next_val_l]
 13043 00008252 D0D8                    	rcr	al, 1
 13044                                  	; 01/02/2025
 13045 00008254 2C80                    	sub	al, 80h
 13046 00008256 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13047 0000825A 66AB                    	stosw		; interpolated sample 2 (L)
 13048 0000825C 88D8                    	mov	al, bl
 13049 0000825E 00F0                    	add	al, dh	; [next_val_r]
 13050 00008260 D0D8                    	rcr	al, 1
 13051                                  	; 01/02/2025
 13052 00008262 2C80                    	sub	al, 80h
 13053 00008264 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13054 00008268 66AB                    	stosw		; interpolated sample 2 (R)
 13055 0000826A C3                      	retn
 13056                                  
 13057                                  interpolating_2_8bit_mono:
 13058                                  	; 16/11/2023
 13059                                  	; al = [previous_val]
 13060                                  	; dl = [next_val]
 13061                                  	; original-interpolated
 13062 0000826B 88C3                    	mov	bl, al
 13063 0000826D 2C80                    	sub	al, 80h
 13064 0000826F 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13065 00008273 66AB                    	stosw		; original sample (L)
 13066 00008275 66AB                    	stosw		; original sample (R)
 13067 00008277 88D8                    	mov	al, bl
 13068 00008279 00D0                    	add	al, dl
 13069 0000827B D0D8                    	rcr	al, 1
 13070 0000827D 2C80                    	sub	al, 80h
 13071 0000827F 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13072 00008283 66AB                    	stosw		; interpolated sample (L)
 13073 00008285 66AB                    	stosw		; interpolated sample (R)
 13074 00008287 C3                      	retn
 13075                                  
 13076                                  interpolating_2_8bit_stereo:
 13077                                  	; 16/11/2023
 13078                                  	; al = [previous_val_l]
 13079                                  	; ah = [previous_val_r]
 13080                                  	; dl = [next_val_l]
 13081                                  	; dh = [next_val_r]
 13082                                  	; original-interpolated
 13083 00008288 89C3                    	mov	ebx, eax
 13084 0000828A 2C80                    	sub	al, 80h
 13085 0000828C 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13086 00008290 66AB                    	stosw		; original sample (L)
 13087 00008292 88F8                    	mov	al, bh
 13088 00008294 2C80                    	sub	al, 80h
 13089 00008296 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13090 0000829A 66AB                    	stosw		; original sample (R)
 13091 0000829C 88D8                    	mov	al, bl	; [previous_val_l]
 13092 0000829E 00D0                    	add	al, dl	; [next_val_l]
 13093 000082A0 D0D8                    	rcr	al, 1
 13094 000082A2 2C80                    	sub	al, 80h
 13095 000082A4 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13096 000082A8 66AB                    	stosw		; interpolated sample (L)
 13097 000082AA 88F8                    	mov	al, bh
 13098 000082AC 00F0                    	add	al, dh	; [next_val_r]
 13099 000082AE D0D8                    	rcr	al, 1
 13100 000082B0 2C80                    	sub	al, 80h
 13101 000082B2 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13102 000082B6 66AB                    	stosw		; interpolated sample (R)
 13103 000082B8 C3                      	retn
 13104                                  
 13105                                  interpolating_3_16bit_mono:
 13106                                  	; 16/11/2023
 13107                                  	; ax = [previous_val]
 13108                                  	; dx = [next_val]
 13109                                  	; original-interpolated-interpolated
 13110                                  
 13111 000082B9 66AB                    	stosw		; original sample (L)
 13112 000082BB 66AB                    	stosw		; original sample (R)
 13113 000082BD 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
 13114 000082C0 50                      	push	eax ; *	; [previous_val]
 13115 000082C1 80C680                  	add	dh, 80h
 13116 000082C4 6601D0                  	add	ax, dx
 13117 000082C7 66D1D8                  	rcr	ax, 1
 13118 000082CA 5B                      	pop	ebx ; *
 13119 000082CB 93                      	xchg	ebx, eax ; bx  = interpolated middle (temporary)
 13120 000082CC 6601D8                  	add	ax, bx	; [previous_val] + interpolated middle
 13121 000082CF 66D1D8                  	rcr	ax, 1
 13122 000082D2 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13123 000082D5 66AB                    	stosw 		; interpolated sample 1 (L)
 13124 000082D7 66AB                    	stosw		; interpolated sample 1 (R)
 13125 000082D9 89D8                    	mov	eax, ebx
 13126 000082DB 6601D0                  	add	ax, dx	; interpolated middle + [next_val]
 13127 000082DE 66D1D8                  	rcr	ax, 1
 13128 000082E1 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13129 000082E4 66AB                    	stosw		; interpolated sample 2 (L)
 13130 000082E6 66AB                    	stosw		; interpolated sample 2 (R)
 13131 000082E8 C3                      	retn
 13132                                  
 13133                                  interpolating_3_16bit_stereo:
 13134                                  	; 16/11/2023
 13135                                  	; bx = [previous_val_l]
 13136                                  	; ax = [previous_val_r]
 13137                                  	; [next_val_l]
 13138                                  	; dx = [next_val_r]
 13139                                  	; original-interpolated-interpolated
 13140                                  
 13141 000082E9 93                      	xchg	eax, ebx
 13142 000082EA 66AB                    	stosw		; original sample (L)
 13143 000082EC 93                      	xchg	eax, ebx
 13144 000082ED 66AB                    	stosw		; original sample (R)
 13145 000082EF 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
 13146 000082F2 50                      	push	eax ; *	; [previous_val_r]
 13147 000082F3 80C780                  	add	bh, 80h
 13148 000082F6 8005[30870000]80        	add	byte [next_val_l+1], 80h
 13149 000082FD 66A1[2F870000]          	mov	ax, [next_val_l]
 13150 00008303 6601D8                  	add	ax, bx	; [previous_val_l]
 13151 00008306 66D1D8                  	rcr	ax, 1
 13152 00008309 93                      	xchg	eax, ebx ; ax = [previous_val_l]
 13153 0000830A 6601D8                  	add	ax, bx	; bx = interpolated middle (L)
 13154 0000830D 66D1D8                  	rcr	ax, 1
 13155 00008310 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13156 00008313 66AB                    	stosw 		; interpolated sample 1 (L)
 13157 00008315 58                      	pop	eax  ; *
 13158 00008316 80C680                  	add	dh, 80h ; convert sound level 0 to 65535 format
 13159 00008319 52                      	push	edx  ; * ; [next_val_r]
 13160 0000831A 92                      	xchg	eax, edx
 13161 0000831B 6601D0                  	add	ax, dx	; [next_val_r] + [previous_val_r]
 13162 0000831E 66D1D8                  	rcr	ax, 1	; / 2
 13163 00008321 50                      	push	eax ; ** ; interpolated middle (R)
 13164 00008322 6601D0                  	add	ax, dx	; + [previous_val_r]
 13165 00008325 66D1D8                  	rcr	ax, 1
 13166 00008328 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13167 0000832B 66AB                    	stosw 		; interpolated sample 1 (R)
 13168 0000832D 66A1[2F870000]          	mov	ax, [next_val_l]
 13169 00008333 6601D8                  	add	ax, bx	; + interpolated middle (L)
 13170 00008336 66D1D8                  	rcr	ax, 1
 13171 00008339 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13172 0000833C 66AB                    	stosw 		; interpolated sample 2 (L)
 13173 0000833E 58                      	pop	eax ; **
 13174 0000833F 5A                      	pop	edx ; *
 13175 00008340 6601D0                  	add	ax, dx	; interpolated middle + [next_val_r]
 13176 00008343 66D1D8                  	rcr	ax, 1	; / 2
 13177 00008346 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13178 00008349 66AB                    	stosw 		; interpolated sample 2 (L)
 13179 0000834B C3                      	retn
 13180                                  
 13181                                  interpolating_2_16bit_mono:
 13182                                  	; 16/11/2023
 13183                                  	; ax = [previous_val]
 13184                                  	; dx = [next_val]
 13185                                  	; original-interpolated
 13186                                  
 13187 0000834C 66AB                    	stosw		; original sample (L)
 13188 0000834E 66AB                    	stosw		; original sample (R)
 13189 00008350 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
 13190 00008353 80C680                  	add	dh, 80h
 13191 00008356 6601D0                  	add	ax, dx
 13192 00008359 66D1D8                  	rcr	ax, 1
 13193 0000835C 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13194 0000835F 66AB                    	stosw		; interpolated sample (L)
 13195 00008361 66AB                    	stosw		; interpolated sample (R)
 13196 00008363 C3                      	retn
 13197                                  
 13198                                  interpolating_2_16bit_stereo:
 13199                                  	; 16/11/2023
 13200                                  	; bx = [previous_val_l]
 13201                                  	; ax = [previous_val_r]
 13202                                  	; [next_val_l]
 13203                                  	; dx = [next_val_r]
 13204                                  	; original-interpolated
 13205                                  
 13206 00008364 93                      	xchg	eax, ebx
 13207 00008365 66AB                    	stosw		; original sample (L)
 13208 00008367 93                      	xchg	eax, ebx
 13209 00008368 66AB                    	stosw		; original sample (R)
 13210 0000836A 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
 13211 0000836D 80C680                  	add	dh, 80h
 13212 00008370 6601D0                  	add	ax, dx	; [previous_val_r] + [next_val_r]
 13213 00008373 66D1D8                  	rcr	ax, 1	; / 2
 13214                                  	; 14/01/2025
 13215 00008376 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13216                                  	;push	eax ; *	; interpolated sample (R)
 13217                                  	; 14/01/2025
 13218 00008379 C1E010                  	shl	eax, 16
 13219 0000837C 66A1[2F870000]          	mov	ax, [next_val_l]
 13220 00008382 80C480                  	add	ah, 80h
 13221 00008385 80C780                  	add	bh, 80h
 13222 00008388 6601D8                  	add	ax, bx	; [next_val_l] + [previous_val_l]
 13223 0000838B 66D1D8                  	rcr	ax, 1	; / 2
 13224 0000838E 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13225                                  	; 14/01/2025
 13226                                  	;stosw 		; interpolated sample (L)
 13227                                  	;pop	eax ; *	
 13228                                  	;sub	ah, 80h	; -32768 to +32767 format again
 13229                                  	;stosw 		; interpolated sample (R)
 13230                                  	; 14/01/2025
 13231 00008391 AB                      	stosd
 13232 00008392 C3                      	retn
 13233                                  
 13234                                  interpolating_5_8bit_mono:
 13235                                  	; 17/11/2023
 13236                                  	; al = [previous_val]
 13237                                  	; dl = [next_val]
 13238                                  	; original-interpltd-interpltd-interpltd-interpltd
 13239 00008393 88C3                    	mov	bl, al
 13240 00008395 2C80                    	sub	al, 80h
 13241 00008397 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13242 0000839B 66AB                    	stosw		; original sample (L)
 13243 0000839D 66AB                    	stosw		; original sample (R)
 13244 0000839F 88D8                    	mov	al, bl
 13245 000083A1 00D0                    	add	al, dl
 13246 000083A3 D0D8                    	rcr	al, 1
 13247 000083A5 88C7                    	mov	bh, al	; interpolated middle (temporary)
 13248 000083A7 00D8                    	add	al, bl  ; [previous_val]
 13249 000083A9 D0D8                    	rcr	al, 1 	
 13250 000083AB 88C6                    	mov	dh, al	; interpolated 1st quarter (temporary)
 13251 000083AD 00D8                    	add	al, bl
 13252 000083AF D0D8                    	rcr	al, 1
 13253 000083B1 2C80                    	sub	al, 80h
 13254 000083B3 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13255 000083B7 66AB                    	stosw		; interpolated sample 1 (L)
 13256 000083B9 66AB                    	stosw		; interpolated sample 1 (R)
 13257 000083BB 88F8                    	mov	al, bh
 13258 000083BD 00F0                    	add	al, dh
 13259 000083BF D0D8                    	rcr	al, 1
 13260 000083C1 2C80                    	sub	al, 80h
 13261 000083C3 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13262 000083C7 66AB                    	stosw		; interpolated sample 2 (L)
 13263 000083C9 66AB                    	stosw		; interpolated sample 2 (R)
 13264 000083CB 88F8                    	mov	al, bh
 13265 000083CD 00D0                    	add	al, dl	; [next_val]
 13266 000083CF D0D8                    	rcr	al, 1
 13267 000083D1 88C6                    	mov	dh, al	; interpolated 3rd quarter (temporary)
 13268 000083D3 00F8                    	add	al, bh
 13269 000083D5 D0D8                    	rcr	al, 1
 13270 000083D7 2C80                    	sub	al, 80h
 13271 000083D9 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13272 000083DD 66AB                    	stosw		; interpolated sample 3 (L)
 13273 000083DF 66AB                    	stosw		; interpolated sample 3 (R)
 13274 000083E1 88F0                    	mov	al, dh
 13275 000083E3 00D0                    	add	al, dl
 13276 000083E5 D0D8                    	rcr	al, 1
 13277 000083E7 2C80                    	sub	al, 80h
 13278 000083E9 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13279 000083ED 66AB                    	stosw		; interpolated sample 4 (L)
 13280 000083EF 66AB                    	stosw		; interpolated sample 4 (R)
 13281 000083F1 C3                      	retn
 13282                                  
 13283                                  interpolating_5_8bit_stereo:
 13284                                  	; 17/11/2023
 13285                                  	; al = [previous_val_l]
 13286                                  	; ah = [previous_val_r]
 13287                                  	; dl = [next_val_l]
 13288                                  	; dh = [next_val_r]
 13289                                  	; original-interpltd-interpltd-interpltd-interpltd
 13290 000083F2 89C3                    	mov	ebx, eax
 13291 000083F4 2C80                    	sub	al, 80h
 13292 000083F6 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13293 000083FA 66AB                    	stosw		; original sample (L)
 13294 000083FC 88F8                    	mov	al, bh
 13295 000083FE 2C80                    	sub	al, 80h
 13296 00008400 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13297 00008404 66AB                    	stosw		; original sample (R)
 13298 00008406 52                      	push	edx ; *
 13299 00008407 88D8                    	mov	al, bl
 13300 00008409 00D0                    	add	al, dl	; [next_val_l]
 13301 0000840B D0D8                    	rcr	al, 1
 13302 0000840D 50                      	push	eax ; **	; al = interpolated middle (L) (temporary)
 13303 0000840E 00D8                    	add	al, bl	; [previous_val_l]
 13304 00008410 D0D8                    	rcr	al, 1
 13305 00008412 86D8                    	xchg	al, bl
 13306 00008414 00D8                    	add	al, bl	; bl = interpolated 1st quarter (L) (temp)
 13307 00008416 D0D8                    	rcr	al, 1
 13308 00008418 2C80                    	sub	al, 80h
 13309 0000841A 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13310 0000841E 66AB                    	stosw		; interpolated sample 1 (L)
 13311 00008420 88F8                    	mov	al, bh
 13312 00008422 00F0                    	add	al, dh	; [next_val_r]
 13313 00008424 D0D8                    	rcr	al, 1
 13314 00008426 50                      	push	eax ; *** ; al = interpolated middle (R) (temporary)
 13315 00008427 00F8                    	add	al, bh	; [previous_val_r]
 13316 00008429 D0D8                    	rcr	al, 1
 13317 0000842B 86F8                    	xchg	al, bh
 13318 0000842D 00F8                    	add	al, bh	; bh = interpolated 1st quarter (R) (temp)
 13319 0000842F D0D8                    	rcr	al, 1
 13320 00008431 2C80                    	sub	al, 80h
 13321 00008433 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13322 00008437 66AB                    	stosw		; interpolated sample 1 (R)
 13323 00008439 5A                      	pop	edx ; ***
 13324 0000843A 58                      	pop	eax ; **	; al = interpolated middle (L) (temporary)
 13325 0000843B 86D8                    	xchg	al, bl	; al = interpolated 1st quarter (L) (temp)
 13326 0000843D 00D8                    	add	al, bl	; bl = interpolated middle (L) (temporary)
 13327 0000843F D0D8                    	rcr	al, 1
 13328 00008441 2C80                    	sub	al, 80h
 13329 00008443 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13330 00008447 66AB                    	stosw		; interpolated sample 2 (L)
 13331 00008449 88D0                    	mov	al, dl 	; interpolated middle (R) (temporary)
 13332 0000844B 86F8                    	xchg	al, bh	; al = interpolated 1st quarter (R) (temp)
 13333 0000844D 00F8                    	add	al, bh	; bh = interpolated middle (R) (temporary)
 13334 0000844F D0D8                    	rcr	al, 1
 13335 00008451 2C80                    	sub	al, 80h
 13336 00008453 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13337 00008457 66AB                    	stosw		; interpolated sample 2 (R)
 13338 00008459 5A                      	pop	edx ; *
 13339 0000845A 88D8                    	mov	al, bl	; interpolated middle (L) (temporary)
 13340 0000845C 00D0                    	add	al, dl	; [next_val_l]
 13341 0000845E D0D8                    	rcr	al, 1
 13342 00008460 86D8                    	xchg	al, bl	; al = interpolated middle (R) (temporary)
 13343 00008462 00D8                    	add	al, bl	; bl = interpolated 3rd quarter (L) (temp)
 13344 00008464 D0D8                    	rcr	al, 1
 13345 00008466 2C80                    	sub	al, 80h
 13346 00008468 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13347 0000846C 66AB                    	stosw		; interpolated sample 3 (L)
 13348 0000846E 88F8                    	mov	al, bh	
 13349 00008470 00F0                    	add	al, dh	; interpolated middle (R) + [next_val_r]
 13350 00008472 D0D8                    	rcr	al, 1
 13351 00008474 86F8                    	xchg	al, bh	; al = interpolated middle (R)
 13352 00008476 00F8                    	add	al, bh	; bh = interpolated 3rd quarter (R) (temp)
 13353 00008478 D0D8                    	rcr	al, 1
 13354 0000847A 2C80                    	sub	al, 80h
 13355 0000847C 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13356 00008480 66AB                    	stosw		; interpolated sample 3 (R)
 13357 00008482 88D8                    	mov	al, bl
 13358 00008484 00D0                    	add	al, dl	; [next_val_l]
 13359 00008486 D0D8                    	rcr	al, 1
 13360 00008488 2C80                    	sub	al, 80h
 13361 0000848A 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13362 0000848E 66AB                    	stosw		; interpolated sample 4 (L)
 13363 00008490 88F8                    	mov	al, bh
 13364 00008492 00F0                    	add	al, dh	; [next_val_r]
 13365 00008494 D0D8                    	rcr	al, 1
 13366 00008496 2C80                    	sub	al, 80h
 13367 00008498 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13368 0000849C 66AB                    	stosw		; interpolated sample 4 (R)
 13369 0000849E C3                      	retn
 13370                                  
 13371                                  interpolating_4_8bit_mono:
 13372                                  	; 17/11/2023
 13373                                  	; al = [previous_val]
 13374                                  	; dl = [next_val]
 13375                                  	; original-interpolated-interpolated-interpolated
 13376 0000849F 88C3                    	mov	bl, al
 13377 000084A1 2C80                    	sub	al, 80h
 13378 000084A3 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13379 000084A7 66AB                    	stosw		; original sample (L)
 13380 000084A9 66AB                    	stosw		; original sample (R)
 13381 000084AB 88D8                    	mov	al, bl
 13382 000084AD 00D0                    	add	al, dl	
 13383 000084AF D0D8                    	rcr	al, 1
 13384 000084B1 86D8                    	xchg	al, bl  ; al = [previous_val]
 13385 000084B3 00D8                    	add	al, bl	; bl = interpolated middle (sample 2)
 13386 000084B5 D0D8                    	rcr	al, 1 	
 13387 000084B7 2C80                    	sub	al, 80h
 13388 000084B9 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13389 000084BD 66AB                    	stosw		; interpolated sample 1 (L)
 13390 000084BF 66AB                    	stosw		; interpolated sample 1 (R)
 13391 000084C1 88D8                    	mov	al, bl	; interpolated middle (sample 2)
 13392 000084C3 2C80                    	sub	al, 80h
 13393 000084C5 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13394 000084C9 66AB                    	stosw		; interpolated sample 2 (L)
 13395 000084CB 66AB                    	stosw		; interpolated sample 2 (R)
 13396 000084CD 88D8                    	mov	al, bl
 13397 000084CF 00D0                    	add	al, dl	; [next_val]
 13398 000084D1 D0D8                    	rcr	al, 1
 13399 000084D3 2C80                    	sub	al, 80h
 13400 000084D5 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13401 000084D9 66AB                    	stosw		; interpolated sample 3 (L)
 13402 000084DB 66AB                    	stosw		; interpolated sample 3 (R)
 13403 000084DD C3                      	retn
 13404                                  
 13405                                  interpolating_4_8bit_stereo:
 13406                                  	; 17/11/2023
 13407                                  	; al = [previous_val_l]
 13408                                  	; ah = [previous_val_r]
 13409                                  	; dl = [next_val_l]
 13410                                  	; dh = [next_val_r]	
 13411                                  	; original-interpolated-interpolated-interpolated
 13412 000084DE 89C3                    	mov	ebx, eax
 13413 000084E0 2C80                    	sub	al, 80h
 13414 000084E2 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13415 000084E6 66AB                    	stosw		; original sample (L)
 13416 000084E8 88F8                    	mov	al, bh
 13417 000084EA 2C80                    	sub	al, 80h
 13418 000084EC 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13419 000084F0 66AB                    	stosw		; original sample (R)
 13420 000084F2 88D8                    	mov	al, bl
 13421 000084F4 00D0                    	add	al, dl	; [next_val_l]
 13422 000084F6 D0D8                    	rcr	al, 1
 13423 000084F8 86D8                    	xchg	al, bl	; al = [previous_val_l]
 13424 000084FA 00D8                    	add	al, bl	; bl = interpolated middle (L) (sample 2)
 13425 000084FC D0D8                    	rcr	al, 1
 13426 000084FE 2C80                    	sub	al, 80h
 13427 00008500 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13428 00008504 66AB                    	stosw		; interpolated sample 1 (L)
 13429 00008506 88F8                    	mov	al, bh
 13430 00008508 00F0                    	add	al, dh	; [next_val_r]
 13431 0000850A D0D8                    	rcr	al, 1
 13432 0000850C 86F8                    	xchg	al, bh	; al = [previous_val_h]
 13433 0000850E 00F8                    	add	al, bh	; bh = interpolated middle (R) (sample 2)
 13434 00008510 D0D8                    	rcr	al, 1
 13435 00008512 2C80                    	sub	al, 80h
 13436 00008514 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13437 00008518 66AB                    	stosw		; interpolated sample 1 (R)
 13438 0000851A 88D8                    	mov	al, bl	; interpolated middle (L) (sample 2)
 13439 0000851C 2C80                    	sub	al, 80h
 13440 0000851E 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13441 00008522 66AB                    	stosw		; interpolated sample 2 (L)
 13442 00008524 88F8                    	mov	al, bh	; interpolated middle (L) (sample 2)
 13443 00008526 2C80                    	sub	al, 80h
 13444 00008528 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13445 0000852C 66AB                    	stosw		; interpolated sample 2 (L)
 13446 0000852E 88D8                    	mov	al, bl
 13447 00008530 00D0                    	add	al, dl	; [next_val_l]
 13448 00008532 D0D8                    	rcr	al, 1
 13449 00008534 2C80                    	sub	al, 80h
 13450 00008536 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13451 0000853A 66AB                    	stosw		; interpolated sample 3 (L)
 13452 0000853C 88F8                    	mov	al, bh
 13453 0000853E 00F0                    	add	al, dh	; [next_val_r]
 13454 00008540 D0D8                    	rcr	al, 1
 13455 00008542 2C80                    	sub	al, 80h
 13456 00008544 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
 13457 00008548 66AB                    	stosw		; interpolated sample 3 (R)
 13458 0000854A C3                      	retn
 13459                                  
 13460                                  interpolating_5_16bit_mono:
 13461                                  	; 18/11/2023
 13462                                  	; ax = [previous_val]
 13463                                  	; dx = [next_val]
 13464                                  	; original-interpltd-interpltd-interpltd-interpltd
 13465 0000854B 66AB                    	stosw		; original sample (L)
 13466 0000854D 66AB                    	stosw		; original sample (R)
 13467 0000854F 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
 13468 00008552 89C3                    	mov	ebx, eax ; [previous_val]
 13469 00008554 80C680                  	add	dh, 80h
 13470 00008557 6601D0                  	add	ax, dx
 13471 0000855A 66D1D8                  	rcr	ax, 1
 13472 0000855D 50                      	push	eax ; *	; interpolated middle (temporary)
 13473 0000855E 6601D8                  	add	ax, bx	; interpolated middle + [previous_val] 
 13474 00008561 66D1D8                  	rcr	ax, 1
 13475 00008564 50                      	push	eax ; **	; interpolated 1st quarter (temporary)
 13476 00008565 6601D8                  	add	ax, bx	; 1st quarter + [previous_val]
 13477 00008568 66D1D8                  	rcr	ax, 1	
 13478 0000856B 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13479 0000856E 66AB                    	stosw 		; interpolated sample 1 (L)
 13480 00008570 66AB                    	stosw		; interpolated sample 1 (R)
 13481 00008572 58                      	pop	eax ; **
 13482 00008573 5B                      	pop	ebx ; *
 13483 00008574 6601D8                  	add	ax, bx	; 1st quarter + middle
 13484 00008577 66D1D8                  	rcr	ax, 1	; / 2
 13485 0000857A 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again	
 13486 0000857D 66AB                    	stosw		; interpolated sample 2 (L)
 13487 0000857F 66AB                    	stosw		; interpolated sample 2 (R)
 13488 00008581 89D8                    	mov	eax, ebx
 13489 00008583 6601D0                  	add	ax, dx	; interpolated middle + [next_val]
 13490 00008586 66D1D8                  	rcr	ax, 1
 13491 00008589 50                      	push	eax ; *	; interpolated 3rd quarter (temporary)
 13492 0000858A 6601D8                  	add	ax, bx	; + interpolated middle
 13493 0000858D 66D1D8                  	rcr	ax, 1
 13494 00008590 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13495 00008593 66AB                    	stosw		; interpolated sample 3 (L)
 13496 00008595 66AB                    	stosw		; interpolated sample 3 (R)
 13497 00008597 58                      	pop	eax ; *	
 13498 00008598 6601D0                  	add	ax, dx	; 3rd quarter + [next_val]
 13499 0000859B 66D1D8                  	rcr	ax, 1	; / 2
 13500 0000859E 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13501 000085A1 66AB                    	stosw		; interpolated sample 4 (L)
 13502 000085A3 66AB                    	stosw		; interpolated sample 4 (R)
 13503 000085A5 C3                      	retn
 13504                                  
 13505                                  interpolating_5_16bit_stereo:
 13506                                  	; 18/11/2023
 13507                                  	; bx = [previous_val_l]
 13508                                  	; ax = [previous_val_r]
 13509                                  	; [next_val_l]
 13510                                  	; [next_val_r]
 13511                                  	; original-interpltd-interpltd-interpltd-interpltd
 13512 000085A6 51                      	push	ecx ; !
 13513 000085A7 93                      	xchg	eax, ebx
 13514 000085A8 66AB                    	stosw		; original sample (L)
 13515 000085AA 93                      	xchg	eax, ebx
 13516 000085AB 66AB                    	stosw		; original sample (R)
 13517 000085AD 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
 13518 000085B0 50                      	push	eax ; *	; [previous_val_r]
 13519 000085B1 80C780                  	add	bh, 80h
 13520 000085B4 8005[30870000]80        	add	byte [next_val_l+1], 80h
 13521 000085BB 66A1[2F870000]          	mov	ax, [next_val_l]
 13522 000085C1 6601D8                  	add	ax, bx	; [previous_val_l]
 13523 000085C4 66D1D8                  	rcr	ax, 1
 13524 000085C7 89C1                    	mov	ecx, eax ; interpolated middle (L)
 13525 000085C9 6601D8                  	add	ax, bx	
 13526 000085CC 66D1D8                  	rcr	ax, 1
 13527 000085CF 89C2                    	mov	edx, eax ; interpolated 1st quarter (L)
 13528 000085D1 6601D8                  	add	ax, bx	; [previous_val_l]
 13529 000085D4 66D1D8                  	rcr	ax, 1
 13530 000085D7 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13531 000085DA 66AB                    	stosw 		; interpolated sample 1 (L)
 13532 000085DC 89C8                    	mov	eax, ecx
 13533 000085DE 6601D0                  	add	ax, dx	; middle (L) + 1st quarter (L)
 13534 000085E1 66D1D8                  	rcr	ax, 1	; / 2
 13535 000085E4 89C3                    	mov	ebx, eax  ; interpolated sample 2 (L)
 13536 000085E6 5A                      	pop	edx ; *	; [previous_val_r]
 13537 000085E7 89D0                    	mov	eax, edx
 13538 000085E9 8005[32870000]80        	add	byte [next_val_r+1], 80h
 13539 000085F0 660305[31870000]        	add	ax, [next_val_r]
 13540 000085F7 66D1D8                  	rcr	ax, 1
 13541 000085FA 50                      	push	eax ; *	; interpolated middle (R)
 13542 000085FB 6601D0                  	add	ax, dx
 13543 000085FE 66D1D8                  	rcr	ax, 1
 13544 00008601 50                      	push	eax ; ** ; interpolated 1st quarter (R)
 13545 00008602 6601D0                  	add	ax, dx	; [previous_val_r]
 13546 00008605 66D1D8                  	rcr	ax, 1
 13547 00008608 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13548 0000860B 66AB                    	stosw 		; interpolated sample 1 (R)
 13549 0000860D 89D8                    	mov	eax, ebx
 13550 0000860F 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13551 00008612 66AB                    	stosw 		; interpolated sample 2 (L)
 13552 00008614 58                      	pop	eax ; **
 13553 00008615 5A                      	pop	edx ; *
 13554 00008616 6601D0                  	add	ax, dx	; 1st quarter (R) + middle (R)
 13555 00008619 66D1D8                  	rcr	ax, 1	; / 2
 13556 0000861C 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13557 0000861F 66AB                    	stosw 		; interpolated sample 2 (R)
 13558 00008621 89C8                    	mov	eax, ecx
 13559 00008623 660305[2F870000]        	add	ax, [next_val_l]
 13560 0000862A 66D1D8                  	rcr	ax, 1
 13561 0000862D 50                      	push	eax ; * ; interpolated 3rd quarter (L)
 13562 0000862E 6601C8                  	add	ax, cx	; interpolated middle (L)
 13563 00008631 66D1D8                  	rcr	ax, 1
 13564 00008634 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13565 00008637 66AB                    	stosw 		; interpolated sample 3 (L)
 13566 00008639 89D0                    	mov	eax, edx
 13567 0000863B 660305[31870000]        	add	ax, [next_val_r]
 13568 00008642 66D1D8                  	rcr	ax, 1
 13569 00008645 50                      	push	eax ; ** ; interpolated 3rd quarter (R)
 13570 00008646 6601D0                  	add	ax, dx	; interpolated middle (R)
 13571 00008649 66D1D8                  	rcr	ax, 1
 13572 0000864C 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13573 0000864F 66AB                    	stosw 		; interpolated sample 3 (R)
 13574 00008651 5B                      	pop	ebx ; **
 13575 00008652 58                      	pop	eax ; *
 13576 00008653 660305[2F870000]        	add	ax, [next_val_l]
 13577 0000865A 66D1D8                  	rcr	ax, 1
 13578 0000865D 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13579 00008660 66AB                    	stosw 		; interpolated sample 4 (L)
 13580 00008662 89D8                    	mov	eax, ebx
 13581 00008664 660305[31870000]        	add	ax, [next_val_r]
 13582 0000866B 66D1D8                  	rcr	ax, 1
 13583 0000866E 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13584 00008671 66AB                    	stosw 		; interpolated sample 4 (R)
 13585 00008673 59                      	pop	ecx ; !
 13586 00008674 C3                      	retn
 13587                                  
 13588                                  interpolating_4_16bit_mono:
 13589                                  	; 18/11/2023
 13590                                  	; ax = [previous_val]
 13591                                  	; dx = [next_val]
 13592                                  	; 01/02/2025
 13593                                  	; original-interpolated-interpolated-interpolated
 13594                                  
 13595 00008675 66AB                    	stosw		; original sample (L)
 13596 00008677 66AB                    	stosw		; original sample (R)
 13597 00008679 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
 13598 0000867C 89C3                    	mov	ebx, eax ; [previous_val]
 13599 0000867E 80C680                  	add	dh, 80h
 13600 00008681 6601D0                  	add	ax, dx	; [previous_val] + [next_val]
 13601 00008684 66D1D8                  	rcr	ax, 1
 13602 00008687 93                      	xchg	eax, ebx
 13603 00008688 6601D8                  	add	ax, bx	; [previous_val] + interpolated middle
 13604 0000868B 66D1D8                  	rcr	ax, 1
 13605 0000868E 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13606 00008691 66AB                    	stosw 		; interpolated sample 1 (L)
 13607 00008693 66AB                    	stosw		; interpolated sample 1 (R)
 13608 00008695 89D8                    	mov	eax, ebx ; interpolated middle
 13609 00008697 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13610 0000869A 66AB                    	stosw 		; interpolated sample 2 (L)
 13611 0000869C 66AB                    	stosw		; interpolated sample 2 (R)
 13612 0000869E 89D8                    	mov	eax, ebx
 13613 000086A0 6601D0                  	add	ax, dx	; interpolated middle + [next_val]
 13614 000086A3 66D1D8                  	rcr	ax, 1
 13615 000086A6 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13616 000086A9 66AB                    	stosw		; interpolated sample 3 (L)
 13617 000086AB 66AB                    	stosw		; interpolated sample 3 (R)
 13618 000086AD C3                      	retn
 13619                                  
 13620                                  interpolating_4_16bit_stereo:
 13621                                  	; 18/11/2023
 13622                                  	; bx = [previous_val_l]
 13623                                  	; ax = [previous_val_r]
 13624                                  	; [next_val_l]
 13625                                  	; [next_val_r]
 13626                                  	; original-interpolated-interpolated-interpolated
 13627 000086AE 93                      	xchg	eax, ebx
 13628 000086AF 66AB                    	stosw		; original sample (L)
 13629 000086B1 93                      	xchg	eax, ebx
 13630 000086B2 66AB                    	stosw		; original sample (R)
 13631 000086B4 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
 13632 000086B7 89C2                    	mov	edx, eax ; [previous_val_r]
 13633 000086B9 80C780                  	add	bh, 80h
 13634 000086BC 8005[30870000]80        	add	byte [next_val_l+1], 80h
 13635 000086C3 66A1[2F870000]          	mov	ax, [next_val_l]
 13636 000086C9 6601D8                  	add	ax, bx	; [previous_val_l]
 13637 000086CC 66D1D8                  	rcr	ax, 1
 13638 000086CF 93                      	xchg	eax, ebx
 13639 000086D0 6601D8                  	add	ax, bx	; bx = interpolated middle (L)
 13640 000086D3 66D1D8                  	rcr	ax, 1
 13641 000086D6 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13642 000086D9 66AB                    	stosw 		; interpolated sample 1 (L)
 13643 000086DB 8005[32870000]80        	add	byte [next_val_r+1], 80h
 13644 000086E2 89D0                    	mov	eax, edx ; [previous_val_r]
 13645 000086E4 660305[31870000]        	add	ax, [next_val_r]
 13646 000086EB 66D1D8                  	rcr	ax, 1
 13647 000086EE 92                      	xchg	eax, edx
 13648 000086EF 6601D0                  	add	ax, dx	; dx = interpolated middle (R)
 13649 000086F2 66D1D8                  	rcr	ax, 1
 13650 000086F5 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13651 000086F8 66AB                    	stosw 		; interpolated sample 1 (R)
 13652 000086FA 89D8                    	mov	eax, ebx
 13653 000086FC 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13654 000086FF 66AB                    	stosw 		; interpolated sample 2 (L)
 13655 00008701 89D0                    	mov	eax, edx
 13656 00008703 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13657 00008706 66AB                    	stosw 		; interpolated sample 2 (R)
 13658 00008708 89D8                    	mov	eax, ebx
 13659 0000870A 660305[2F870000]        	add	ax, [next_val_l]
 13660 00008711 66D1D8                  	rcr	ax, 1
 13661 00008714 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13662 00008717 66AB                    	stosw 		; interpolated sample 3 (L)
 13663 00008719 89D0                    	mov	eax, edx
 13664 0000871B 660305[31870000]        	add	ax, [next_val_r]
 13665 00008722 66D1D8                  	rcr	ax, 1
 13666 00008725 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
 13667 00008728 66AB                    	stosw 		; interpolated sample 3 (R)
 13668 0000872A C3                      	retn
 13669                                  
 13670                                  ; 13/11/2023
 13671                                  previous_val:
 13672 0000872B 0000                    previous_val_l: dw 0
 13673 0000872D 0000                    previous_val_r: dw 0
 13674                                  next_val:
 13675 0000872F 0000                    next_val_l: dw 0
 13676 00008731 0000                    next_val_r: dw 0
 13677                                  
 13678                                  ; 16/11/2023
 13679 00008733 00                      faz:	db 0
 13680                                  
 13681                                  ; ---------------------------------------------------------------------------
 13682                                  ; 12/01/2025- Hardware Info display/write procedures.
 13683                                  ; ---------------------------------------------------------------------------
 13684                                  ; ref: playwav9.s (18/12/2024) - sb16play.s (20/12/2024)
 13685                                  
 13686                                  	; 12/01/2025
 13687                                  write_audio_dev_info:
 13688 00008734 803D[50A30000]02        	cmp	byte [audio_hardware], 2
 13689 0000873B 7203                    	jb	short write_sb16_dev_info  ; SB16
 13690 0000873D 745A                    	je	short write_ac97_pci_dev_info ; AC97
 13691 0000873F C3                      	retn
 13692                                  
 13693                                  	; 20/12/2024 (playwavx.s, sb16play.s)
 13694                                  write_sb16_dev_info:
 13695                                  	; 27/11/2024
 13696                                  	; 24/11/2024 (sb16play.asm)
 13697                                  
 13698 00008740 A1[48A30000]            	mov	eax, [audio_io_base]
 13699 00008745 31DB                    	xor	ebx, ebx
 13700 00008747 88C3                    	mov	bl, al
 13701 00008749 88DA                    	mov	dl, bl
 13702 0000874B 80E30F                  	and	bl, 0Fh
 13703 0000874E 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13704 00008754 A2[C28B0000]            	mov	[msgBasePort+2], al
 13705 00008759 88D3                    	mov	bl, dl
 13706 0000875B C0EB04                  	shr	bl, 4
 13707 0000875E 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13708 00008764 A2[C18B0000]            	mov	[msgBasePort+1], al
 13709 00008769 88E3                    	mov	bl, ah
 13710                                  	;and	bl, 0Fh
 13711 0000876B 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13712 00008771 A2[C08B0000]            	mov	[msgBasePort], al
 13713                                  
 13714                                  	;xor	eax, eax
 13715                                  	; 27/11/2024
 13716 00008776 A0[4CA30000]            	mov	al, [audio_intr]
 13717                                  	;mov	cl, 10
 13718                                  	;div	cl
 13719                                  	;add	ah, 30h
 13720                                  	;mov	[msgIRQnum], ah
 13721                                  	; 25/11/2024
 13722 0000877B 0430                    	add	al, 30h
 13723 0000877D A2[D78B0000]            	mov	[msgIRQnum], al	; 12/01/2025
 13724                                  
 13725                                  	; 12/01/2025	
 13726                                  	; 20/12/2024
 13727                                  	sys	_msg, msgSB16Info, 255, 07h
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00008782 BB[8A8B0000]        <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126 00008787 B9FF000000          <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128 0000878C BA07000000          <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00008791 B823000000          <1>  mov eax, %1
   133                              <1> 
   134 00008796 CD40                <1>  int 40h
 13728                                  
 13729 00008798 C3                      	retn
 13730                                  	
 13731                                  write_ac97_pci_dev_info:
 13732                                  	; 19/11/2024
 13733                                  	; 30/05/2024
 13734                                  	; 06/06/2017
 13735                                  	; 03/06/2017
 13736                                  	; BUS/DEV/FN
 13737                                  	;	00000000BBBBBBBBDDDDDFFF00000000
 13738                                  	; DEV/VENDOR
 13739                                  	;	DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV
 13740                                  
 13741 00008799 A1[40A30000]            	mov	eax, [dev_vendor]
 13742 0000879E 31DB                    	xor	ebx, ebx
 13743 000087A0 88C3                    	mov	bl, al
 13744 000087A2 88DA                    	mov	dl, bl
 13745 000087A4 80E30F                  	and	bl, 0Fh
 13746 000087A7 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13747 000087AD A2[F68A0000]            	mov	[msgVendorId+3], al
 13748 000087B2 88D3                    	mov	bl, dl
 13749 000087B4 C0EB04                  	shr	bl, 4
 13750 000087B7 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13751 000087BD A2[F58A0000]            	mov	[msgVendorId+2], al
 13752 000087C2 88E3                    	mov	bl, ah
 13753 000087C4 88DA                    	mov	dl, bl
 13754 000087C6 80E30F                  	and	bl, 0Fh
 13755 000087C9 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13756 000087CF A2[F48A0000]            	mov	[msgVendorId+1], al
 13757 000087D4 88D3                    	mov	bl, dl
 13758 000087D6 C0EB04                  	shr	bl, 4
 13759 000087D9 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13760 000087DF A2[F38A0000]            	mov	[msgVendorId], al
 13761 000087E4 C1E810                  	shr	eax, 16
 13762 000087E7 88C3                    	mov	bl, al
 13763 000087E9 88DA                    	mov	dl, bl
 13764 000087EB 80E30F                  	and	bl, 0Fh
 13765 000087EE 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13766 000087F4 A2[078B0000]            	mov	[msgDevId+3], al
 13767 000087F9 88D3                    	mov	bl, dl
 13768 000087FB C0EB04                  	shr	bl, 4
 13769 000087FE 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13770 00008804 A2[068B0000]            	mov	[msgDevId+2], al
 13771 00008809 88E3                    	mov	bl, ah
 13772 0000880B 88DA                    	mov	dl, bl
 13773 0000880D 80E30F                  	and	bl, 0Fh
 13774 00008810 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13775 00008816 A2[058B0000]            	mov	[msgDevId+1], al
 13776 0000881B 88D3                    	mov	bl, dl
 13777 0000881D C0EB04                  	shr	bl, 4
 13778 00008820 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13779 00008826 A2[048B0000]            	mov	[msgDevId], al
 13780                                  
 13781 0000882B A1[3CA30000]            	mov	eax, [bus_dev_fn]
 13782 00008830 C1E808                  	shr	eax, 8
 13783 00008833 88C3                    	mov	bl, al
 13784 00008835 88DA                    	mov	dl, bl
 13785 00008837 80E307                  	and	bl, 7 ; bit 0,1,2
 13786 0000883A 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13787 00008840 A2[2C8B0000]            	mov	[msgFncNo+1], al
 13788 00008845 88D3                    	mov	bl, dl
 13789 00008847 C0EB03                  	shr	bl, 3
 13790 0000884A 88DA                    	mov	dl, bl
 13791 0000884C 80E30F                  	and	bl, 0Fh
 13792 0000884F 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13793 00008855 A2[1E8B0000]            	mov	[msgDevNo+1], al
 13794 0000885A 88D3                    	mov	bl, dl
 13795 0000885C C0EB04                  	shr	bl, 4
 13796 0000885F 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13797 00008865 A2[1D8B0000]            	mov	[msgDevNo], al
 13798 0000886A 88E3                    	mov	bl, ah
 13799 0000886C 88DA                    	mov	dl, bl
 13800 0000886E 80E30F                  	and	bl, 0Fh
 13801 00008871 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13802 00008877 A2[128B0000]            	mov	[msgBusNo+1], al
 13803 0000887C 88D3                    	mov	bl, dl
 13804 0000887E C0EB04                  	shr	bl, 4
 13805 00008881 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13806 00008887 A2[118B0000]            	mov	[msgBusNo], al
 13807                                  
 13808                                  	;mov	ax, [ac97_NamBar]
 13809 0000888C 66A1[44A30000]          	mov	ax, [NAMBAR]
 13810 00008892 88C3                    	mov	bl, al
 13811 00008894 88DA                    	mov	dl, bl
 13812 00008896 80E30F                  	and	bl, 0Fh
 13813 00008899 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13814 0000889F A2[3C8B0000]            	mov	[msgNamBar+3], al
 13815 000088A4 88D3                    	mov	bl, dl
 13816 000088A6 C0EB04                  	shr	bl, 4
 13817 000088A9 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13818 000088AF A2[3B8B0000]            	mov	[msgNamBar+2], al
 13819 000088B4 88E3                    	mov	bl, ah
 13820 000088B6 88DA                    	mov	dl, bl
 13821 000088B8 80E30F                  	and	bl, 0Fh
 13822 000088BB 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13823 000088C1 A2[3A8B0000]            	mov	[msgNamBar+1], al
 13824 000088C6 88D3                    	mov	bl, dl
 13825 000088C8 C0EB04                  	shr	bl, 4
 13826 000088CB 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13827 000088D1 A2[398B0000]            	mov	[msgNamBar], al
 13828                                  
 13829                                  	;mov	ax, [ac97_NabmBar]
 13830 000088D6 66A1[46A30000]          	mov	ax, [NABMBAR]
 13831 000088DC 88C3                    	mov	bl, al
 13832 000088DE 88DA                    	mov	dl, bl
 13833 000088E0 80E30F                  	and	bl, 0Fh
 13834 000088E3 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13835 000088E9 A2[4C8B0000]            	mov	[msgNabmBar+3], al
 13836 000088EE 88D3                    	mov	bl, dl
 13837 000088F0 C0EB04                  	shr	bl, 4
 13838 000088F3 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13839 000088F9 A2[4B8B0000]            	mov	[msgNabmBar+2], al
 13840 000088FE 88E3                    	mov	bl, ah
 13841 00008900 88DA                    	mov	dl, bl
 13842 00008902 80E30F                  	and	bl, 0Fh
 13843 00008905 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13844 0000890B A2[4A8B0000]            	mov	[msgNabmBar+1], al
 13845 00008910 88D3                    	mov	bl, dl
 13846 00008912 C0EB04                  	shr	bl, 4
 13847 00008915 8A83[AF8A0000]          	mov	al, [ebx+hex_chars]
 13848 0000891B A2[498B0000]            	mov	[msgNabmBar], al
 13849                                  
 13850 00008920 31C0                    	xor	eax, eax
 13851 00008922 A0[4CA30000]            	mov	al, [ac97_int_ln_reg]
 13852 00008927 B10A                    	mov	cl, 10
 13853 00008929 F6F1                    	div	cl
 13854                                  	; 23/11/2024
 13855                                  	;add	[msgIRQ], ax
 13856 0000892B 66053030                	add	ax, 3030h
 13857 0000892F 66A3[558B0000]          	mov	[msgIRQ], ax
 13858                                  	;and	al, al
 13859 00008935 3C30                    	cmp	al, 30h
 13860 00008937 750D                    	jnz	short _w_ac97imsg_
 13861 00008939 A0[568B0000]            	mov	al, byte [msgIRQ+1]
 13862 0000893E B420                    	mov	ah, ' '
 13863 00008940 66A3[558B0000]          	mov	[msgIRQ], ax
 13864                                  _w_ac97imsg_:
 13865                                  	; 12/01/2025
 13866                                  	; 01/12/2024
 13867                                  	sys	_msg, msgAC97Info, 255, 07h
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00008946 BB[C08A0000]        <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126 0000894B B9FF000000          <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128 00008950 BA07000000          <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 00008955 B823000000          <1>  mov eax, %1
   133                              <1> 
   134 0000895A CD40                <1>  int 40h
 13868                                  
 13869                                  	; 19/11/2024
 13870                                          ;retn
 13871                                  
 13872                                  	; 30/05/2024
 13873                                  write_VRA_info:
 13874                                  	; 12/01/2025
 13875                                  	; 01/12/2024
 13876                                  	sys	_msg, msgVRAheader, 255, 07h
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 0000895C BB[5A8B0000]        <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126 00008961 B9FF000000          <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128 00008966 BA07000000          <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 0000896B B823000000          <1>  mov eax, %1
   133                              <1> 
   134 00008970 CD40                <1>  int 40h
 13877 00008972 803D[51A30000]00        	cmp	byte [vra], 0
 13878 00008979 7617                    	jna	short _w_VRAi_no
 13879                                  _w_VRAi_yes:
 13880                                  	sys	_msg, msgVRAyes, 255, 07h
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 0000897B BB[698B0000]        <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126 00008980 B9FF000000          <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128 00008985 BA07000000          <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 0000898A B823000000          <1>  mov eax, %1
   133                              <1> 
   134 0000898F CD40                <1>  int 40h
 13881 00008991 C3                      	retn
 13882                                  _w_VRAi_no:
 13883                                  	sys	_msg, msgVRAno, 255, 07h
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 00008992 BB[6F8B0000]        <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126 00008997 B9FF000000          <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128 0000899C BA07000000          <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 000089A1 B823000000          <1>  mov eax, %1
   133                              <1> 
   134 000089A6 CD40                <1>  int 40h
 13884                                  	
 13885                                  	; 13/01/2025
 13886 000089A8 803D[64A30000]00        	cmp	byte [interpolation], 0
 13887 000089AF 7717                    	ja	short _w_VRAi_no_yes
 13888                                  
 13889                                  	sys	_msg, crlf, 2, 07h
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 000089B1 BB[D88B0000]        <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126 000089B6 B902000000          <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128 000089BB BA07000000          <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 000089C0 B823000000          <1>  mov eax, %1
   133                              <1> 
   134 000089C5 CD40                <1>  int 40h
 13890                                  
 13891 000089C7 C3                      	retn
 13892                                  
 13893                                  _w_VRAi_no_yes:
 13894                                  	sys	_msg, msgInterp, 255, 07h
   119                              <1> 
   120                              <1> 
   121                              <1> 
   122                              <1> 
   123                              <1>  %if %0 >= 2
   124 000089C8 BB[738B0000]        <1>  mov ebx, %2
   125                              <1>  %if %0 >= 3
   126 000089CD B9FF000000          <1>  mov ecx, %3
   127                              <1>  %if %0 = 4
   128 000089D2 BA07000000          <1>  mov edx, %4
   129                              <1>  %endif
   130                              <1>  %endif
   131                              <1>  %endif
   132 000089D7 B823000000          <1>  mov eax, %1
   133                              <1> 
   134 000089DC CD40                <1>  int 40h
 13895 000089DE C3                      	retn
 13896                                  
 13897                                  ; ---------------------------------------------------------------------------
 13898                                  
 13899                                  	; 13/01/2025
 13900                                  	; 12/01/2025
 13901                                  write_buffer_size:
 13902                                  	;;;	
 13903 000089DF A0[56A30000]            	mov	al, [blocks]	; (must be less than 10) 
 13904 000089E4 0430                    	add	al, '0'
 13905 000089E6 A2[638A0000]            	mov	byte [blocks_txt], al
 13906                                  	;;;
 13907 000089EB 803D[64A30000]01        	cmp	byte [interpolation], 1
 13908 000089F2 731F                    	jnb	short write_buffer_size_x
 13909                                  	;;;
 13910 000089F4 BA[4B8A0000]            	mov	edx, buffersize_txt
 13911 000089F9 E832DCFFFF              	call	wrstr_edx
 13912 000089FE A1[58A30000]            	mov	eax, [buffer_size]
 13913 00008A03 E85EDCFFFF              	call	wr_decimal_eax_with_thousands_seperator
 13914 00008A08 BA[5B8A0000]            	mov	edx, bytes_txt
 13915 00008A0D E81EDCFFFF              	call	wrstr_edx
 13916 00008A12 C3                      	retn
 13917                                  
 13918                                  	; 13/01/2025 (Indirect interpolation info)
 13919                                  write_buffer_size_x:
 13920 00008A13 BA[708A0000]            	mov	edx, buffers1_txt
 13921 00008A18 E813DCFFFF              	call	wrstr_edx
 13922 00008A1D A1[60A30000]            	mov	eax, [loadsize] ; decoding buffer size
 13923                                  	; 15/01/2025
 13924 00008A22 E83FDCFFFF              	call	wr_decimal_eax_with_thousands_seperator
 13925 00008A27 E814000000              	call	w_dbuff_bytes
 13926 00008A2C BA[948A0000]            	mov	edx, buffers2_txt
 13927 00008A31 E8FADBFFFF              	call	wrstr_edx
 13928 00008A36 A1[58A30000]            	mov	eax, [buffer_size] ; wav buffer size
 13929 00008A3B E826DCFFFF              	call	wr_decimal_eax_with_thousands_seperator
 13930                                  w_dbuff_bytes:
 13931 00008A40 BA[A58A0000]            	mov	edx, bytes2_txt
 13932 00008A45 E8E6DBFFFF              	call	wrstr_edx
 13933 00008A4A C3                      	retn
 13934                                  
 13935                                  ; 11/01/2025
 13936 00008A4B 0D0A                    buffersize_txt	db 0Dh, 0Ah
 13937 00008A4D 427566666572205369-     		db 'Buffer Size: ', 0
 13937 00008A56 7A653A2000         
 13938                                  ; 12/01/2025
 13939                                  ;bytes_txt:	db ' bytes ', 0Dh, 0Ah, 0
 13940 00008A5B 2062797465732028        bytes_txt:	db ' bytes ('
 13941 00008A63 3020626C6F636B7329-     blocks_txt	db '0 blocks) ', 0Dh, 0Ah, 0
 13941 00008A6C 200D0A00           
 13942                                  
 13943                                  ; 13/01/2025
 13944 00008A70 0D0A                    buffers1_txt	db 0Dh, 0Ah
 13945 00008A72 427566666572207369-     		db 'Buffer size for', 0Dh, 0Ah
 13945 00008A7B 7A6520666F720D0A   
 13946 00008A83 202020206465636F64-     		db '    decoding is ', 0
 13946 00008A8C 696E672069732000   
 13947 00008A94 2020776176206F7574-     buffers2_txt	db '  wav output is ', 0
 13947 00008A9D 7075742069732000   
 13948 00008AA5 206279746573200D0A-     bytes2_txt:	db ' bytes ', 0Dh, 0Ah, 0		
 13948 00008AAE 00                 
 13949                                  
 13950                                  ; ---------------------------------------------------------------------------
 13951                                  
 13952                                  ; 19/11/2024
 13953                                  ; 03/06/2017
 13954 00008AAF 303132333435363738-     hex_chars	db "0123456789ABCDEF", 0
 13954 00008AB8 3941424344454600   
 13955 00008AC0 0D0A                    msgAC97Info	db 0Dh, 0Ah
 13956 00008AC2 204143393720417564-     		db " AC97 Audio Controller & Codec Info", 0Dh, 0Ah
 13956 00008ACB 696F20436F6E74726F-
 13956 00008AD4 6C6C6572202620436F-
 13956 00008ADD 64656320496E666F0D-
 13956 00008AE6 0A                 
 13957 00008AE7 2056656E646F722049-     		db " Vendor ID: "
 13957 00008AF0 443A20             
 13958 00008AF3 303030306820446576-     msgVendorId	db "0000h Device ID: "
 13958 00008AFC 6963652049443A20   
 13959 00008B04 30303030680D0A          msgDevId	db "0000h", 0Dh, 0Ah
 13960 00008B0B 204275733A20            		db " Bus: "
 13961 00008B11 303068204465766963-     msgBusNo	db "00h Device: "
 13961 00008B1A 653A20             
 13962 00008B1D 3030682046756E6374-     msgDevNo	db "00h Function: "
 13962 00008B26 696F6E3A20         
 13963 00008B2B 303068                  msgFncNo	db "00h"
 13964 00008B2E 0D0A                    		db 0Dh, 0Ah
 13965 00008B30 204E414D4241523A20      		db " NAMBAR: "
 13966 00008B39 30303030682020          msgNamBar	db "0000h  "
 13967 00008B40 4E41424D4241523A20      		db "NABMBAR: "
 13968 00008B49 303030306820204952-     msgNabmBar	db "0000h  IRQ: "
 13968 00008B52 513A20             
 13969 00008B55 3030                    msgIRQ		dw 3030h
 13970 00008B57 0D0A00                  		db 0Dh, 0Ah, 0
 13971                                  ; 25/11/2023
 13972 00008B5A 205652412073757070-     msgVRAheader	db " VRA support: "
 13972 00008B63 6F72743A20         
 13973 00008B68 00                      		db 0	
 13974 00008B69 5945530D0A00            msgVRAyes	db "YES", 0Dh, 0Ah, 0
 13975 00008B6F 4E4F20                  msgVRAno	db "NO " ; 13/01/2025	
 13976                                  		;db "NO ", 0Dh, 0Ah
 13977                                  		; 12/01/2025
 13978                                  		;db " (Interpolated sample rate playing method)"
 13979 00008B72 00                      		db 0
 13980                                  		;db 0Dh, 0Ah, 0
 13981                                  
 13982                                  		; 13/01/2025
 13983 00008B73 28494E544552504F4C-     msgInterp	db "(INTERPOLATION: YES)"
 13983 00008B7C 4154494F4E3A205945-
 13983 00008B85 5329               
 13984 00008B87 0D0A00                  		db 0Dh, 0Ah, 0	
 13985                                  
 13986                                  ; ----------------------------------
 13987                                  
 13988                                  ; 24/11/2024
 13989 00008B8A 0D0A                    msgSB16Info	db 0Dh, 0Ah
 13990 00008B8C 20417564696F204861-     		db " Audio Hardware: Sound Blaster 16", 0Dh, 0Ah 
 13990 00008B95 7264776172653A2053-
 13990 00008B9E 6F756E6420426C6173-
 13990 00008BA7 7465722031360D0A   
 13991 00008BAF 202020202020426173-     		db "      Base Port: "
 13991 00008BB8 6520506F72743A20   
 13992 00008BC0 303030680D0A            msgBasePort	db "000h", 0Dh, 0Ah 
 13993 00008BC6 202020202020202020-     		db "            IRQ: "
 13993 00008BCF 2020204952513A20   
 13994 00008BD7 30                      msgIRQnum	db 30h		; 12/01/2025
 13995                                  crlf:		; 13/01/2025
 13996 00008BD8 0D0A00                  		db 0Dh, 0Ah, 0
 13997                                  
 13998                                  
 13999                                  ; 13/01/2025
 14000                                  ; ----------------------------------
 14001                                  ; 25/11/2023
 14002                                  msg_no_vra:
 14003 00008BDB 0A0D                    		db 10, 13
 14004 00008BDD 4E6F20565241207375-     		db "No VRA support ! Only 48 kHZ sample rate supported !"
 14004 00008BE6 70706F72742021204F-
 14004 00008BEF 6E6C79203438206B48-
 14004 00008BF8 5A2073616D706C6520-
 14004 00008C01 726174652073757070-
 14004 00008C0A 6F727465642021     
 14005 00008C11 0A0D00                  		db 10, 13, 0
 14006                                  
 14007                                  ; ===========================================================================
 14008                                  ; end of TRDOS 386 specific procedures.
 14009                                  ; ---------------------------------------------------------------------------
 14010                                  
 14011                                  ; ===========================================================================
 14012                                  ; Initialized DATA
 14013                                  ; ===========================================================================
 14014                                  
 14015 00008C14 00                      option_test     db 0                   
 14016 00008C15 00                      option_mono     db 0                   
 14017 00008C16 00                      option_8bit     db 0                   
 14018 00008C17 00                      option_rate_shift db 0                 
 14019 00008C18 00                      option_fast     db 0                   
 14020 00008C19 90<rep 3h>                              align 4
 14021 00008C1C 00000000                cpuid_flags     dd 0                   
 14022 00008C20 00                      cpuid_exists    db 0                   
 14023 00008C21 00                      detected_cpu    db 0                   
 14024 00008C22 90<rep 2h>                              align 4
 14025 00008C24 00000000                mp3_output_milliseconds dd 0           
 14026 00008C28 00000000                millisecond_count dd 0
 14027                                  
 14028                                  ; 20/10/2024                 
 14029                                  ; HANDLE hProcess
 14030                                  ;hProcess       dd 0                   
 14031                                  ; HANDLE hThread
 14032                                  ;hThread        dd 0                   
 14033                                  ; DWORD dwPriorityClass
 14034                                  ;dwPriorityClass dd 0                   
 14035                                  ; int nPriority
 14036                                  ;nPriority      dd 0
 14037                                                     
 14038 00008C2C 0000000000000000        ttt             dd 2 dup(0)            
 14039 00008C34 726561642068656164-     rdtsc_read_header db 'read header    ',0
 14039 00008C3D 65722020202000     
 14040 00008C44 0000000000000000        rdtsc_read_header_extra dd  0, 0       
 14041 00008C4C 726561642065787472-                     db 'read extra     ',0
 14041 00008C55 61202020202000     
 14042 00008C5C 0000000000000000        rdtsc_read_granule dd 0, 0             
 14043 00008C64 72656164206772616E-                     db 'read granule   ',0
 14043 00008C6D 756C6520202000     
 14044 00008C74 0000000000000000        rdtsc_append_main dd 2 dup(0)          
 14045 00008C7C 617070656E64206D61-                     db 'append main    ',0
 14045 00008C85 696E2020202000     
 14046 00008C8C 0000000000000000        rdtsc_read_scalefac dd 2 dup(0)        
 14047 00008C94 72656164207363616C-                     db 'read scalefac  ',0
 14047 00008C9D 65666163202000     
 14048 00008CA4 0000000000000000        rdtsc_xlat_scalefac dd 2 dup(0)        
 14049 00008CAC 786C6174207363616C-                     db 'xlat scalefac  ',0
 14049 00008CB5 65666163202000     
 14050 00008CBC 0000000000000000        rdtsc_read_huffman dd 2 dup(0)         
 14051 00008CC4 726561642068756666-                     db 'read huffman   ',0
 14051 00008CCD 6D616E20202000     
 14052 00008CD4 0000000000000000        rdtsc_ms_stereo dd 2 dup(0)            
 14053 00008CDC 6D732073746572656F-                     db 'ms stereo      ',0
 14053 00008CE5 20202020202000     
 14054 00008CEC 0000000000000000        rdtsc_i_stereo  dd 2 dup(0)            
 14055 00008CF4 692073746572656F20-                     db 'i stereo       ',0
 14055 00008CFD 20202020202000     
 14056 00008D04 0000000000000000        rdtsc_reorder   dd 2 dup(0)            
 14057 00008D0C 72656F726465722020-                     db 'reorder        ',0
 14057 00008D15 20202020202000     
 14058 00008D1C 0000000000000000        rdtsc_antialias dd 2 dup(0)            
 14059 00008D24 616E7469616C696173-                     db 'antialias      ',0
 14059 00008D2D 20202020202000     
 14060 00008D34 0000000000000000        rdtsc_imdct     dd 2 dup(0)            
 14061 00008D3C 696D64637420202020-                     db 'imdct          ',0
 14061 00008D45 20202020202000     
 14062 00008D4C 0000000000000000        rdtsc_imdct36   dd 2 dup(0)            
 14063 00008D54 20696D646374333620-                     db ' imdct36       ',0
 14063 00008D5D 20202020202000     
 14064 00008D64 0000000000000000        rdtsc_imdct12   dd 2 dup(0)            
 14065 00008D6C 20696D646374313220-                     db ' imdct12       ',0
 14065 00008D75 20202020202000     
 14066 00008D7C 0000000000000000        rdtsc_imdct0    dd 2 dup(0)            
 14067 00008D84 20696D646374302020-                     db ' imdct0        ',0
 14067 00008D8D 20202020202000     
 14068 00008D94 0000000000000000        rdtsc_synth_dct dd 2 dup(0)            
 14069 00008D9C 73796E74682F646374-                     db 'synth/dct      ',0
 14069 00008DA5 20202020202000     
 14070 00008DAC 0000000000000000        rdtsc_dct32     dd 2 dup(0)            
 14071 00008DB4 2073796E74682E6463-                     db ' synth.dct32   ',0
 14071 00008DBD 74333220202000     
 14072 00008DC4 0000000000000000        rdtsc_synth     dd 2 dup(0)            
 14073 00008DCC 2073796E74682E6F75-                     db ' synth.output  ',0
 14073 00008DD5 74707574202000     
 14074 00008DDC 0000000000000000        rdtsc_total     dd 2 dup(0)            
 14075 00008DE4 746F74616C20202020-                     db 'total          ',0
 14075 00008DED 20202020202000     
 14076 00008DF4 000020002800300038-     mp3_bitrate_tab dw  0,32,40,48,56,64,80,96,112,128,160,192,224,256,320, 0
 14076 00008DFD 004000500060007000-
 14076 00008E06 8000A000C000E00000-
 14076 00008E0F 0140010000         
 14077 00008E14 000008001000180020-                     dw  0, 8,16,24,32,40,48,56,64,80,96,112,128,144,160, 0
 14077 00008E1D 002800300038004000-
 14077 00008E26 500060007000800090-
 14077 00008E2F 00A0000000         
 14078 00008E34 44AC80BB007D            mp3_freq_tab    dw 44100,48000,32000   
 14079 00008E3A 000504040000            mp3_lsf_sf_expand_init_table db 0, 5, 4, 4, 0, 0
 14080 00008E40 9001                                    dw 400                  ; 0..399 ; normal case
 14081 00008E42 000504010C00                            db 0, 5, 4, 1, 0Ch, 0
 14082 00008E48 F401                                    dw 500                  ; 400..499
 14083 00008E4A 000301011801                            db 0, 3, 1, 1, 18h, 1
 14084 00008E50 0002                                    dw 512                  ; 500..511
 14085 00008E52 010606012400                            db 1, 6, 6, 1, 24h, 0
 14086 00008E58 6803                                    dw 872                  ; 512+360 ; 0..359 for 2nd channel of intensity stereo
 14087 00008E5A 010404013000                            db 1, 4, 4, 1, 30h, 0
 14088 00008E60 E803                                    dw 1000                 ; 512+488 ; 360..487
 14089 00008E62 010301013C00                            db 1, 3, 1, 1, 3Ch, 0
 14090 00008E68 0004                                    dw 1024                 ; 512+512 ; 488..511
 14091 00008E6A 010000000000000000-     mp3_synth_win_src dw      1,     0,     0,     0,     0,     0,     1,     0
 14091 00008E73 00000001000000     
 14092 00008E7A 000000000100000001-                     dw      0,     0,     1,     0,     1,     0,     1,     0
 14092 00008E83 00000001000000     
 14093 00008E8A 010001000000010001-                     dw      1,     1,     0,     1,     1,     1,     1,     2
 14093 00008E93 00010001000200     
 14094 00008E9A 010002000100020002-                     dw      1,     2,     1,     2,     2,     3,     2,     3
 14094 00008EA3 00030002000300     
 14095 00008EAA 020004000300030004-                     dw      2,     4,     3,     3,     4,     4,     4,     5
 14095 00008EB3 00040004000500     
 14096 00008EBA 050005000500060006-                     dw      5,     5,     5,     6,     6,     6,     6,     7
 14096 00008EC3 00060006000700     
 14097 00008ECA 070006000800070007-                     dw      7,     6,     8,     7,     7,     8,     7,     7
 14097 00008ED3 00080007000700     
 14098 00008EDA 080007000700070006-                     dw      8,     7,     7,     7,     6,     6,     6,     5
 14098 00008EE3 00060006000500     
 14099 00008EEA 51FEFCFFFDFFFEFFFF-                     dw 0FE51h,0FFFCh,0FFFDh,0FFFEh,0FFFFh,     0,     1,     3
 14099 00008EF3 FF000001000300     
 14100 00008EFA 03000600070008000B-                     dw      3,     6,     7,     8,   0Bh,   0Ch,   0Eh,   11h
 14100 00008F03 000C000E001100     
 14101 00008F0A 1300150017001A001C-                     dw    13h,   15h,   17h,   1Ah,   1Ch,   1Fh,   22h,   24h
 14101 00008F13 001F0022002400     
 14102 00008F1A 27002A002C002F0032-                     dw    27h,   2Ah,   2Ch,   2Fh,   32h,   35h,   36h,   3Ah
 14102 00008F23 00350036003A00     
 14103 00008F2A 3C003E004000420044-                     dw    3Ch,   3Eh,   40h,   42h,   44h,   45h,   47h,   48h
 14103 00008F33 00450047004800     
 14104 00008F3A 490049004900490049-                     dw    49h,   49h,   49h,   49h,   49h,   48h,   46h,   45h
 14104 00008F43 00480046004500     
 14105 00008F4A 430040003D003A0035-                     dw    43h,   40h,   3Dh,   3Ah,   35h,   31h,   2Bh,   27h
 14105 00008F53 0031002B002700     
 14106 00008F5A 1F00190012000A0002-                     dw    1Fh,   19h,   12h,   0Ah,     2,0FFF9h,0FFEFh,0FFE6h
 14106 00008F63 00F9FFEFFFE6FF     
 14107 00008F6A 3BF030003B00470053-                     dw 0F03Bh,   30h,   3Bh,   47h,   53h,   5Fh,   6Dh,   79h
 14107 00008F73 005F006D007900     
 14108 00008F7A 86009500A100B000BD-                     dw    86h,   95h,  0A1h,  0B0h,  0BDh,  0CBh,  0D9h,  0E6h
 14108 00008F83 00CB00D900E600     
 14109 00008F8A F30001010D01190125-                     dw   0F3h,  101h,  10Dh,  119h,  125h,  130h,  13Ah,  144h
 14109 00008F93 0130013A014401     
 14110 00008F9A 4D0155015B01620166-                     dw   14Dh,  155h,  15Bh,  162h,  166h,  16Ah,  16Bh,  16Dh
 14110 00008FA3 016A016B016D01     
 14111 00008FAA 6C016A01660160015A-                     dw   16Ch,  16Ah,  166h,  160h,  15Ah,  150h,  146h,  139h
 14111 00008FB3 01500146013901     
 14112 00008FBA 2B011A010801F300DD-                     dw   12Bh,  11Ah,  108h,  0F3h,  0DDh,  0C5h,  0A9h,   8Eh
 14112 00008FC3 00C500A9008E00     
 14113 00008FCA 6F004E002B000700E1-                     dw    6Fh,   4Eh,   2Bh,     7,0FFE1h,0FFB8h,0FF8Fh,0FF62h
 14113 00008FD3 FFB8FF8FFF62FF     
 14114 00008FDA 35FF06FFD5FEA4FE70-                     dw 0FF35h,0FF06h,0FED5h,0FEA4h,0FE70h,0FE3Ch,0FE06h,0FDD0h
 14114 00008FE3 FE3CFE06FED0FD     
 14115 00008FEA 0BCF9F02D702110349-                     dw 0CF0Bh,  29Fh,  2D7h,  311h,  349h,  382h,  3BBh,  3F4h
 14115 00008FF3 038203BB03F403     
 14116 00008FFA 2C0464049A04D10405-                     dw   42Ch,  464h,  49Ah,  4D1h,  505h,  538h,  56Ah,  59Bh
 14116 00009003 0538056A059B05     
 14117 0000900A C805F505200647066C-                     dw   5C8h,  5F5h,  620h,  647h,  66Ch,  68Fh,  6AFh,  6CCh
 14117 00009013 068F06AF06CC06     
 14118 0000901A E506FC060F071F072B-                     dw   6E5h,  6FCh,  70Fh,  71Fh,  72Bh,  734h,  739h,  739h
 14118 00009023 07340739073907     
 14119 0000902A 370730072607170704-                     dw   737h,  730h,  726h,  717h,  704h,  6EDh,  6D3h,  6B4h
 14119 00009033 07ED06D306B406     
 14120 0000903A 91066C0640061306E1-                     dw   691h,  66Ch,  640h,  613h,  5E1h,  5ABh,  573h,  537h
 14120 00009043 05AB0573053705     
 14121 0000904A F704B4046F042704DB-                     dw   4F7h,  4B4h,  46Fh,  427h,  3DBh,  38Fh,  33Eh,  2EDh
 14121 00009053 038F033E03ED02     
 14122 0000905A 9A024402ED0195013D-                     dw   29Ah,  244h,  1EDh,  195h,  13Dh,  0E2h,   88h,   2Eh
 14122 00009063 01E20088002E00     
 14123 0000906A 00                                      db    0
 14124 0000906B 00                                      db    0
 14125 0000906C 000000010002000303-     mp3_slen_table  dw  0000h, 0100h, 0200h, 0300h, 0003h, 0101h, 0201h, 0301h
 14125 00009075 00010101020103     
 14126 0000907C 020102020203030103-                     dw  0102h, 0202h, 0302h, 0103h, 0203h, 0303h, 0204h, 0304h
 14126 00009085 02030304020403     
 14127 0000908C 060505050909090906-     mp3_lsf_nsf_table dd  05050506h, 09090909h, 09090906h
 14127 00009095 090909             
 14128 00009098 0605070309090C0606-                     dd  03070506h, 060C0909h, 060C0906h
 14128 000090A1 090C06             
 14129 000090A4 0B0A0000121200000F-                     dd  00000A0Bh, 00001212h, 0000120Fh
 14129 000090AD 120000             
 14130 000090B0 070707000C0C0C0006-                     dd  00070707h, 000C0C0Ch, 000C0F06h
 14130 000090B9 0F0C00             
 14131 000090BC 060606030C09090606-                     dd  03060606h, 0609090Ch, 06090C06h
 14131 000090C5 0C0906             
 14132 000090C8 080805000F0C090006-                     dd  00050808h, 00090C0Fh, 00091206h
 14132 000090D1 120900             
 14133 000090D4 1101100022021221        huff_tree_list_data db  11h,   1, 10h,   0, 22h,   2, 12h, 21h
 14134 000090DC 2011011000220212                        db  20h, 11h,   1, 10h,   0, 22h,   2, 12h
 14135 000090E4 2120101101003323                        db  21h, 20h, 10h, 11h,   1,   0, 33h, 23h
 14136 000090EC 3231130330221221                        db  32h, 31h, 13h,   3, 30h, 22h, 12h, 21h
 14137 000090F4 0220110110003303                        db    2, 20h, 11h,   1, 10h,   0, 33h,   3
 14138 000090FC 2332301331220212                        db  23h, 32h, 30h, 13h, 31h, 22h,   2, 12h
 14139 00009104 2120011110005545                        db  21h, 20h,   1, 11h, 10h,   0, 55h, 45h
 14140 0000910C 5453354425521551                        db  54h, 53h, 35h, 44h, 25h, 52h, 15h, 51h
 14141 00009114 0534504333244214                        db    5, 34h, 50h, 43h, 33h, 24h, 42h, 14h
 14142 0000911C 4140042332031331                        db  41h, 40h,   4, 23h, 32h,   3, 13h, 31h
 14143 00009124 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
 14144 0000912C 1000555445533544                        db  10h,   0, 55h, 54h, 45h, 53h, 35h, 44h
 14145 00009134 2552051551344350                        db  25h, 52h,   5, 15h, 51h, 34h, 43h, 50h
 14146 0000913C 3324421441044023                        db  33h, 24h, 42h, 14h, 41h,   4, 40h, 23h
 14147 00009144 3213310330220220                        db  32h, 13h, 31h,   3, 30h, 22h,   2, 20h
 14148 0000914C 1221110110005545                        db  12h, 21h, 11h,   1, 10h,   0, 55h, 45h
 14149 00009154 3553540544255215                        db  35h, 53h, 54h,   5, 44h, 25h, 52h, 15h
 14150 0000915C 5134435004244233                        db  51h, 34h, 43h, 50h,   4, 24h, 42h, 33h
 14151 00009164 4014412332133103                        db  40h, 14h, 41h, 23h, 32h, 13h, 31h,   3
 14152 0000916C 3022021221201101                        db  30h, 22h,   2, 12h, 21h, 20h, 11h,   1
 14153 00009174 1000776776577566                        db  10h,   0, 77h, 67h, 76h, 57h, 75h, 66h
 14154 0000917C 4774566537734655                        db  47h, 74h, 56h, 65h, 37h, 73h, 46h, 55h
 14155 00009184 5463277264077062                        db  54h, 63h, 27h, 72h, 64h,   7, 70h, 62h
 14156 0000918C 4535065344177136                        db  45h, 35h,   6, 53h, 44h, 17h, 71h, 36h
 14157 00009194 2625521551344316                        db  26h, 25h, 52h, 15h, 51h, 34h, 43h, 16h
 14158 0000919C 6160055024423304                        db  61h, 60h,   5, 50h, 24h, 42h, 33h,   4
 14159 000091A4 1441402332031331                        db  14h, 41h, 40h, 23h, 32h,   3, 13h, 31h
 14160 000091AC 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
 14161 000091B4 1000776776756647                        db  10h,   0, 77h, 67h, 76h, 75h, 66h, 47h
 14162 000091BC 7457555665377346                        db  74h, 57h, 55h, 56h, 65h, 37h, 73h, 46h
 14163 000091C4 4554355327726407                        db  45h, 54h, 35h, 53h, 27h, 72h, 64h,   7
 14164 000091CC 7117703663604425                        db  71h, 17h, 70h, 36h, 63h, 60h, 44h, 25h
 14165 000091D4 5205156226061661                        db  52h,   5, 15h, 62h, 26h,   6, 16h, 61h
 14166 000091DC 5134504333244214                        db  51h, 34h, 50h, 43h, 33h, 24h, 42h, 14h
 14167 000091E4 4104402332133103                        db  41h,   4, 40h, 23h, 32h, 13h, 31h,   3
 14168 000091EC 3022211202201101                        db  30h, 22h, 21h, 12h,   2, 20h, 11h,   1
 14169 000091F4 1000776776577566                        db  10h,   0, 77h, 67h, 76h, 57h, 75h, 66h
 14170 000091FC 4774655637735527                        db  47h, 74h, 65h, 56h, 37h, 73h, 55h, 27h
 14171 00009204 7246641771077036                        db  72h, 46h, 64h, 17h, 71h,   7, 70h, 36h
 14172 0000920C 6345544406052662                        db  63h, 45h, 54h, 44h,   6,   5, 26h, 62h
 14173 00009214 6116603553255215                        db  61h, 16h, 60h, 35h, 53h, 25h, 52h, 15h
 14174 0000921C 5134435004244214                        db  51h, 34h, 43h, 50h,   4, 24h, 42h, 14h
 14175 00009224 3341233240033013                        db  33h, 41h, 23h, 32h, 40h,   3, 30h, 13h
 14176 0000922C 3122122102200011                        db  31h, 22h, 12h, 21h,   2, 20h,   0, 11h
 14177 00009234 0110FEFCFDEDFFEF                        db    1, 10h,0FEh,0FCh,0FDh,0EDh,0FFh,0EFh
 14178 0000923C DFEECFDEBFFBCEDC                        db 0DFh,0EEh,0CFh,0DEh,0BFh,0FBh,0CEh,0DCh
 14179 00009244 AFE9ECDDFACDBEEB                        db 0AFh,0E9h,0ECh,0DDh,0FAh,0CDh,0BEh,0EBh
 14180 0000924C 9FF9EABDDB8FF8CC                        db  9Fh,0F9h,0EAh,0BDh,0DBh, 8Fh,0F8h,0CCh
 14181 00009254 AE9E8E7F7EF7DAAD                        db 0AEh, 9Eh, 8Eh, 7Fh, 7Eh,0F7h,0DAh,0ADh
 14182 0000925C BCCBF66FE85F9DD9                        db 0BCh,0CBh,0F6h, 6Fh,0E8h, 5Fh, 9Dh,0D9h
 14183 00009264 F5E7ACBB4FF4CAE6                        db 0F5h,0E7h,0ACh,0BBh, 4Fh,0F4h,0CAh,0E6h
 14184 0000926C F33F8DD82FF26E9C                        db 0F3h, 3Fh, 8Dh,0D8h, 2Fh,0F2h, 6Eh, 9Ch
 14185 00009274 0FC95EAB7DD74EC8                        db  0Fh,0C9h, 5Eh,0ABh, 7Dh,0D7h, 4Eh,0C8h
 14186 0000927C D63EB99BAA1FF1F0                        db 0D6h, 3Eh,0B9h, 9Bh,0AAh, 1Fh,0F1h,0F0h
 14187 00009284 BAE5E48C6DE3E22E                        db 0BAh,0E5h,0E4h, 8Ch, 6Dh,0E3h,0E2h, 2Eh
 14188 0000928C 0E1EE1E05DD57CC7                        db  0Eh, 1Eh,0E1h,0E0h, 5Dh,0D5h, 7Ch,0C7h
 14189 00009294 4D8BB8D49AA96CC6                        db  4Dh, 8Bh,0B8h,0D4h, 9Ah,0A9h, 6Ch,0C6h
 14190 0000929C 3DD37B2DD21DB75C                        db  3Dh,0D3h, 7Bh, 2Dh,0D2h, 1Dh,0B7h, 5Ch
 14191 000092A4 C5997AC3A7974BD1                        db 0C5h, 99h, 7Ah,0C3h,0A7h, 97h, 4Bh,0D1h
 14192 000092AC 0DD08AA84CC46BB6                        db  0Dh,0D0h, 8Ah,0A8h, 4Ch,0C4h, 6Bh,0B6h
 14193 000092B4 3C2CC25BB5891CC1                        db  3Ch, 2Ch,0C2h, 5Bh,0B5h, 89h, 1Ch,0C1h
 14194 000092BC 980CC0B46AA6793B                        db  98h, 0Ch,0C0h,0B4h, 6Ah,0A6h, 79h, 3Bh
 14195 000092C4 B3885A2BA569A478                        db 0B3h, 88h, 5Ah, 2Bh,0A5h, 69h,0A4h, 78h
 14196 000092CC 87947776B21BB10B                        db  87h, 94h, 77h, 76h,0B2h, 1Bh,0B1h, 0Bh
 14197 000092D4 B0964A3AA359952A                        db 0B0h, 96h, 4Ah, 3Ah,0A3h, 59h, 95h, 2Ah
 14198 000092DC A21AA10A68A08649                        db 0A2h, 1Ah,0A1h, 0Ah, 68h,0A0h, 86h, 49h
 14199 000092E4 9339588567299257                        db  93h, 39h, 58h, 85h, 67h, 29h, 92h, 57h
 14200 000092EC 7538836647745665                        db  75h, 38h, 83h, 66h, 47h, 74h, 56h, 65h
 14201 000092F4 7319910990488472                        db  73h, 19h, 91h,   9, 90h, 48h, 84h, 72h
 14202 000092FC 4664288218372717                        db  46h, 64h, 28h, 82h, 18h, 37h, 27h, 17h
 14203 00009304 7155077036634554                        db  71h, 55h,   7, 70h, 36h, 63h, 45h, 54h
 14204 0000930C 2662358108801661                        db  26h, 62h, 35h, 81h,   8, 80h, 16h, 61h
 14205 00009314 0660534425520515                        db    6, 60h, 53h, 44h, 25h, 52h,   5, 15h
 14206 0000931C 5134435024423314                        db  51h, 34h, 43h, 50h, 24h, 42h, 33h, 14h
 14207 00009324 4104402332133103                        db  41h,   4, 40h, 23h, 32h, 13h, 31h,   3
 14208 0000932C 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
 14209 00009334 1000FFEFFEDFEEFD                        db  10h,   0,0FFh,0EFh,0FEh,0DFh,0EEh,0FDh
 14210 0000933C CFFCDEEDBFFBCEEC                        db 0CFh,0FCh,0DEh,0EDh,0BFh,0FBh,0CEh,0ECh
 14211 00009344 DDAFFABEEBCDDC9F                        db 0DDh,0AFh,0FAh,0BEh,0EBh,0CDh,0DCh, 9Fh
 14212 0000934C F9EABDDB8FF8CC9E                        db 0F9h,0EAh,0BDh,0DBh, 8Fh,0F8h,0CCh, 9Eh
 14213 00009354 E97FF7ADDABC6FAE                        db 0E9h, 7Fh,0F7h,0ADh,0DAh,0BCh, 6Fh,0AEh
 14214 0000935C 0FCBF68EE85F9DF5                        db  0Fh,0CBh,0F6h, 8Eh,0E8h, 5Fh, 9Dh,0F5h
 14215 00009364 7EE7ACCABBD98D4F                        db  7Eh,0E7h,0ACh,0CAh,0BBh,0D9h, 8Dh, 4Fh
 14216 0000936C F43FF3D8E62FF26E                        db 0F4h, 3Fh,0F3h,0D8h,0E6h, 2Fh,0F2h, 6Eh
 14217 00009374 F01FF19CC95EABBA                        db 0F0h, 1Fh,0F1h, 9Ch,0C9h, 5Eh,0ABh,0BAh
 14218 0000937C E57DD74EE48CC83E                        db 0E5h, 7Dh,0D7h, 4Eh,0E4h, 8Ch,0C8h, 3Eh
 14219 00009384 6DD6E39BB92EAAE2                        db  6Dh,0D6h,0E3h, 9Bh,0B9h, 2Eh,0AAh,0E2h
 14220 0000938C 1EE10EE05DD57CC7                        db  1Eh,0E1h, 0Eh,0E0h, 5Dh,0D5h, 7Ch,0C7h
 14221 00009394 4D8BD4B89AA96CC6                        db  4Dh, 8Bh,0D4h,0B8h, 9Ah,0A9h, 6Ch,0C6h
 14222 0000939C 3DD3D22D0D1D7BB7                        db  3Dh,0D3h,0D2h, 2Dh, 0Dh, 1Dh, 7Bh,0B7h
 14223 000093A4 D15CD0C58AA84CC4                        db 0D1h, 5Ch,0D0h,0C5h, 8Ah,0A8h, 4Ch,0C4h
 14224 000093AC 6BB6990C3CC37AA7                        db  6Bh,0B6h, 99h, 0Ch, 3Ch,0C3h, 7Ah,0A7h
 14225 000093B4 A6C00BC22C5BB51C                        db 0A6h,0C0h, 0Bh,0C2h, 2Ch, 5Bh,0B5h, 1Ch
 14226 000093BC 8998C14BB46A3B79                        db  89h, 98h,0C1h, 4Bh,0B4h, 6Ah, 3Bh, 79h
 14227 000093C4 B397882B5AB2A51B                        db 0B3h, 97h, 88h, 2Bh, 5Ah,0B2h,0A5h, 1Bh
 14228 000093CC B1B069964AA47887                        db 0B1h,0B0h, 69h, 96h, 4Ah,0A4h, 78h, 87h
 14229 000093D4 3AA359952AA21AA1                        db  3Ah,0A3h, 59h, 95h, 2Ah,0A2h, 1Ah,0A1h
 14230 000093DC 0AA0688649943993                        db  0Ah,0A0h, 68h, 86h, 49h, 94h, 39h, 93h
 14231 000093E4 7709588529677692                        db  77h,   9, 58h, 85h, 29h, 67h, 76h, 92h
 14232 000093EC 9119904884577538                        db  91h, 19h, 90h, 48h, 84h, 57h, 75h, 38h
 14233 000093F4 8366472882188174                        db  83h, 66h, 47h, 28h, 82h, 18h, 81h, 74h
 14234 000093FC 0880566537734627                        db    8, 80h, 56h, 65h, 37h, 73h, 46h, 27h
 14235 00009404 7264175571077036                        db  72h, 64h, 17h, 55h, 71h,   7, 70h, 36h
 14236 0000940C 6345542662160660                        db  63h, 45h, 54h, 26h, 62h, 16h,   6, 60h
 14237 00009414 3561534425521551                        db  35h, 61h, 53h, 44h, 25h, 52h, 15h, 51h
 14238 0000941C 0550344324423341                        db    5, 50h, 34h, 43h, 24h, 42h, 33h, 41h
 14239 00009424 1404233240031331                        db  14h,   4, 23h, 32h, 40h,   3, 13h, 31h
 14240 0000942C 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
 14241 00009434 1000EFFEDFFDCFFC                        db  10h,   0,0EFh,0FEh,0DFh,0FDh,0CFh,0FCh
 14242 0000943C BFFBAFFA9FF9F88F                        db 0BFh,0FBh,0AFh,0FAh, 9Fh,0F9h,0F8h, 8Fh
 14243 00009444 7FF76FF6FF5FF54F                        db  7Fh,0F7h, 6Fh,0F6h,0FFh, 5Fh,0F5h, 4Fh
 14244 0000944C F4F3F03FCEECDDDE                        db 0F4h,0F3h,0F0h, 3Fh,0CEh,0ECh,0DDh,0DEh
 14245 00009454 E9EAD9EEEDEBBECD                        db 0E9h,0EAh,0D9h,0EEh,0EDh,0EBh,0BEh,0CDh
 14246 0000945C DCDBAECCADDA7EAC                        db 0DCh,0DBh,0AEh,0CCh,0ADh,0DAh, 7Eh,0ACh
 14247 00009464 CAC97D5EBDF22F0F                        db 0CAh,0C9h, 7Dh, 5Eh,0BDh,0F2h, 2Fh, 0Fh
 14248 0000946C 1FF19EBCCB8EE89D                        db  1Fh,0F1h, 9Eh,0BCh,0CBh, 8Eh,0E8h, 9Dh
 14249 00009474 E7BB8DD86EE69CAB                        db 0E7h,0BBh, 8Dh,0D8h, 6Eh,0E6h, 9Ch,0ABh
 14250 0000947C BAE5D74EE48CC83E                        db 0BAh,0E5h,0D7h, 4Eh,0E4h, 8Ch,0C8h, 3Eh
 14251 00009484 6DD69BB9AAE1D4B8                        db  6Dh,0D6h, 9Bh,0B9h,0AAh,0E1h,0D4h,0B8h
 14252 0000948C A97BB7D0E30EE05D                        db 0A9h, 7Bh,0B7h,0D0h,0E3h, 0Eh,0E0h, 5Dh
 14253 00009494 D57CC74D8B9A6CC6                        db 0D5h, 7Ch,0C7h, 4Dh, 8Bh, 9Ah, 6Ch,0C6h
 14254 0000949C 3D5CC50D8AA8994C                        db  3Dh, 5Ch,0C5h, 0Dh, 8Ah,0A8h, 99h, 4Ch
 14255 000094A4 B67A3C5B891CC098                        db 0B6h, 7Ah, 3Ch, 5Bh, 89h, 1Ch,0C0h, 98h
 14256 000094AC 79E22E1ED32DD2D1                        db  79h,0E2h, 2Eh, 1Eh,0D3h, 2Dh,0D2h,0D1h
 14257 000094B4 3B97881DC46BC3A7                        db  3Bh, 97h, 88h, 1Dh,0C4h, 6Bh,0C3h,0A7h
 14258 000094BC 2CC2B5C10C4BB46A                        db  2Ch,0C2h,0B5h,0C1h, 0Ch, 4Bh,0B4h, 6Ah
 14259 000094C4 A6B35AA52BB21BB1                        db 0A6h,0B3h, 5Ah,0A5h, 2Bh,0B2h, 1Bh,0B1h
 14260 000094CC 0BB069964AA47887                        db  0Bh,0B0h, 69h, 96h, 4Ah,0A4h, 78h, 87h
 14261 000094D4 A33A592A9568A186                        db 0A3h, 3Ah, 59h, 2Ah, 95h, 68h,0A1h, 86h
 14262 000094DC 7794495767A21A0A                        db  77h, 94h, 49h, 57h, 67h,0A2h, 1Ah, 0Ah
 14263 000094E4 A039935885299276                        db 0A0h, 39h, 93h, 58h, 85h, 29h, 92h, 76h
 14264 000094EC 0919919048847538                        db    9, 19h, 91h, 90h, 48h, 84h, 75h, 38h
 14265 000094F4 8366288247741881                        db  83h, 66h, 28h, 82h, 47h, 74h, 18h, 81h
 14266 000094FC 8008563773654627                        db  80h,   8, 56h, 37h, 73h, 65h, 46h, 27h
 14267 00009504 7264550717717036                        db  72h, 64h, 55h,   7, 17h, 71h, 70h, 36h
 14268 0000950C 6345542662166106                        db  63h, 45h, 54h, 26h, 62h, 16h, 61h,   6
 14269 00009514 6053354425525115                        db  60h, 53h, 35h, 44h, 25h, 52h, 51h, 15h
 14270 0000951C 0534435024423314                        db    5, 34h, 43h, 50h, 24h, 42h, 33h, 14h
 14271 00009524 4104402332133103                        db  41h,   4, 40h, 23h, 32h, 13h, 31h,   3
 14272 0000952C 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
 14273 00009534 1000EFFEDFFDCFFC                        db  10h,   0,0EFh,0FEh,0DFh,0FDh,0CFh,0FCh
 14274 0000953C BFFBFAAF9FF9F88F                        db 0BFh,0FBh,0FAh,0AFh, 9Fh,0F9h,0F8h, 8Fh
 14275 00009544 7FF76FF65FF54FF4                        db  7Fh,0F7h, 6Fh,0F6h, 5Fh,0F5h, 4Fh,0F4h
 14276 0000954C 3FF32FF2F11FF00F                        db  3Fh,0F3h, 2Fh,0F2h,0F1h, 1Fh,0F0h, 0Fh
 14277 00009554 EEDEEDCEECDDBEEB                        db 0EEh,0DEh,0EDh,0CEh,0ECh,0DDh,0BEh,0EBh
 14278 0000955C CDDCAEEABDDBCC9E                        db 0CDh,0DCh,0AEh,0EAh,0BDh,0DBh,0CCh, 9Eh
 14279 00009564 E9ADDABCCB8EE89D                        db 0E9h,0ADh,0DAh,0BCh,0CBh, 8Eh,0E8h, 9Dh
 14280 0000956C D97EE7ACFFCABB8D                        db 0D9h, 7Eh,0E7h,0ACh,0FFh,0CAh,0BBh, 8Dh
 14281 00009574 D80EE00DE66E9CC9                        db 0D8h, 0Eh,0E0h, 0Dh,0E6h, 6Eh, 9Ch,0C9h
 14282 0000957C 5EBAE5AB7DD7E48C                        db  5Eh,0BAh,0E5h,0ABh, 7Dh,0D7h,0E4h, 8Ch
 14283 00009584 C84E2E3E6DD6E39B                        db 0C8h, 4Eh, 2Eh, 3Eh, 6Dh,0D6h,0E3h, 9Bh
 14284 0000958C B9AAE21EE15DD57C                        db 0B9h,0AAh,0E2h, 1Eh,0E1h, 5Dh,0D5h, 7Ch
 14285 00009594 C74D8BB8D49AA96C                        db 0C7h, 4Dh, 8Bh,0B8h,0D4h, 9Ah,0A9h, 6Ch
 14286 0000959C C63DD32DD21D7BB7                        db 0C6h, 3Dh,0D3h, 2Dh,0D2h, 1Dh, 7Bh,0B7h
 14287 000095A4 D15CC58AA8994CC4                        db 0D1h, 5Ch,0C5h, 8Ah,0A8h, 99h, 4Ch,0C4h
 14288 000095AC 6BB6D00C3CC37AA7                        db  6Bh,0B6h,0D0h, 0Ch, 3Ch,0C3h, 7Ah,0A7h
 14289 000095B4 2CC25BB51C8998C1                        db  2Ch,0C2h, 5Bh,0B5h, 1Ch, 89h, 98h,0C1h
 14290 000095BC 4BC00B3BB00A1AB4                        db  4Bh,0C0h, 0Bh, 3Bh,0B0h, 0Ah, 1Ah,0B4h
 14291 000095C4 6AA67997A00990B3                        db  6Ah,0A6h, 79h, 97h,0A0h,   9, 90h,0B3h
 14292 000095CC 882B5AB2A51BB169                        db  88h, 2Bh, 5Ah,0B2h,0A5h, 1Bh,0B1h, 69h
 14293 000095D4 96A44A78873AA359                        db  96h,0A4h, 4Ah, 78h, 87h, 3Ah,0A3h, 59h
 14294 000095DC 952AA2A168867749                        db  95h, 2Ah,0A2h,0A1h, 68h, 86h, 77h, 49h
 14295 000095E4 9439935885296776                        db  94h, 39h, 93h, 58h, 85h, 29h, 67h, 76h
 14296 000095EC 9219914884577538                        db  92h, 19h, 91h, 48h, 84h, 57h, 75h, 38h
 14297 000095F4 8366288218477481                        db  83h, 66h, 28h, 82h, 18h, 47h, 74h, 81h
 14298 000095FC 0880566517077073                        db    8, 80h, 56h, 65h, 17h,   7, 70h, 73h
 14299 00009604 3727724664557136                        db  37h, 27h, 72h, 46h, 64h, 55h, 71h, 36h
 14300 0000960C 6345542662166106                        db  63h, 45h, 54h, 26h, 62h, 16h, 61h,   6
 14301 00009614 6035534425521505                        db  60h, 35h, 53h, 44h, 25h, 52h, 15h,   5
 14302 0000961C 5051344324423314                        db  50h, 51h, 34h, 43h, 24h, 42h, 33h, 14h
 14303 00009624 4104402332133103                        db  41h,   4, 40h, 23h, 32h, 13h, 31h,   3
 14304 0000962C 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
 14305 00009634 10000B0F0D0E0705                        db  10h,   0, 0Bh, 0Fh, 0Dh, 0Eh,   7,   5
 14306 0000963C 0906030A0C020104                        db    9,   6,   3, 0Ah, 0Ch,   2,   1,   4
 14307 00009644 08000F0E0D0C0B0A                        db    8,   0, 0Fh, 0Eh, 0Dh, 0Ch, 0Bh, 0Ah
 14308 0000964C 0908070605040302                        db    9,   8,   7,   6,   5,   4,   3,   2
 14309 00009654 0100                                    db    1,   0
 14310 00009656 000000000000                            db 6 dup(0)
 14311 0000965C 0000                    mp3_huff_data   db   0,  0             
 14312 0000965E 0100                                    db   1,  0              ; byte[32][2] ; table,linbits
 14313 00009660 0200                                    db   2,  0
 14314 00009662 0300                                    db   3,  0
 14315 00009664 0000                                    db   0,  0
 14316 00009666 0400                                    db   4,  0
 14317 00009668 0500                                    db   5,  0
 14318 0000966A 0600                                    db   6,  0
 14319 0000966C 0700                                    db   7,  0
 14320 0000966E 0800                                    db   8,  0
 14321 00009670 0900                                    db   9,  0
 14322 00009672 0A00                                    db  10,  0
 14323 00009674 0B00                                    db  11,  0
 14324 00009676 0C00                                    db  12,  0
 14325 00009678 0000                                    db   0,  0
 14326 0000967A 0D00                                    db  13,  0
 14327 0000967C 0E01                                    db  14,  1
 14328 0000967E 0E02                                    db  14,  2
 14329 00009680 0E03                                    db  14,  3
 14330 00009682 0E04                                    db  14,  4
 14331 00009684 0E06                                    db  14,  6
 14332 00009686 0E08                                    db  14,  8
 14333 00009688 0E0A                                    db  14, 10
 14334 0000968A 0E0D                                    db  14, 13
 14335 0000968C 0F04                                    db  15,  4
 14336 0000968E 0F05                                    db  15,  5
 14337 00009690 0F06                                    db  15,  6
 14338 00009692 0F07                                    db  15,  7
 14339 00009694 0F08                                    db  15,  8
 14340 00009696 0F09                                    db  15,  9
 14341 00009698 0F0B                                    db  15, 11
 14342 0000969A 0F0D                                    db  15, 13
 14343 0000969C 040404040404060608-     mp3_band_size_long db    4,   4,   4,   4,   4,   4,   6,   6,   8,   8, 0Ah
 14343 000096A5 080A               
 14344 000096A7 0C1014181C222A3236-                     db  0Ch, 10h, 14h, 18h, 1Ch, 22h, 2Ah, 32h, 36h, 4Ch, 9Eh ; byte[9][22]
 14344 000096B0 4C9E               
 14345 000096B2 040404040404060606-                     db    4,   4,   4,   4,   4,   4,   6,   6,   6,   8, 0Ah
 14345 000096BB 080A               
 14346 000096BD 0C1012161C22282E36-                     db  0Ch, 10h, 12h, 16h, 1Ch, 22h, 28h, 2Eh, 36h, 36h,0C0h
 14346 000096C6 36C0               
 14347 000096C8 040404040404060608-                     db    4,   4,   4,   4,   4,   4,   6,   6,   8, 0Ah, 0Ch
 14347 000096D1 0A0C               
 14348 000096D3 1014181E262E384454-                     db  10h, 14h, 18h, 1Eh, 26h, 2Eh, 38h, 44h, 54h, 66h, 1Ah
 14348 000096DC 661A               
 14349 000096DE 060606060606080A0C-                     db    6,   6,   6,   6,   6,   6,   8, 0Ah, 0Ch, 0Eh, 10h
 14349 000096E7 0E10               
 14350 000096E9 14181C20262E343C44-                     db  14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h
 14350 000096F2 3A36               
 14351 000096F4 060606060606080A0C-                     db    6,   6,   6,   6,   6,   6,   8, 0Ah, 0Ch, 0Eh, 10h
 14351 000096FD 0E10               
 14352 000096FF 12161A20262E344046-                     db  12h, 16h, 1Ah, 20h, 26h, 2Eh, 34h, 40h, 46h, 4Ch, 24h
 14352 00009708 4C24               
 14353 0000970A 060606060606080A0C-                     db    6,   6,   6,   6,   6,   6,   8, 0Ah, 0Ch, 0Eh, 10h
 14353 00009713 0E10               
 14354 00009715 14181C20262E343C44-                     db  14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h
 14354 0000971E 3A36               
 14355 00009720 060606060606080A0C-                     db    6,   6,   6,   6,   6,   6,   8, 0Ah, 0Ch, 0Eh, 10h
 14355 00009729 0E10               
 14356 0000972B 14181C20262E343C44-                     db  14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h
 14356 00009734 3A36               
 14357 00009736 060606060606080A0C-                     db    6,   6,   6,   6,   6,   6,   8, 0Ah, 0Ch, 0Eh, 10h
 14357 0000973F 0E10               
 14358 00009741 14181C20262E343C44-                     db  14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h
 14358 0000974A 3A36               
 14359 0000974C 0C0C0C0C0C0C101418-                     db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 10h, 14h, 18h, 1Ch, 20h
 14359 00009755 1C20               
 14360 00009757 283038404C5A020202-                     db  28h, 30h, 38h, 40h, 4Ch, 5Ah,   2,   2,   2,   2,   2
 14360 00009760 0202               
 14361 00009762 000000000000000000-                     db 10 dup(0)            ; data align
 14361 0000976B 00                 
 14362 0000976C 0404040406080A0C0E-     mp3_band_size_short db    4,   4,   4,   4,   6,   8, 0Ah, 0Ch, 0Eh, 12h, 16h, 1Eh, 38h
 14362 00009775 12161E38           
 14363 00009779 0404040406060A0C0E-                     db    4,   4,   4,   4,   6,   6, 0Ah, 0Ch, 0Eh, 10h, 14h, 1Ah, 42h ; byte[9][16] ? ; byte [9][13]
 14363 00009782 10141A42           
 14364 00009786 0404040406080C1014-                     db    4,   4,   4,   4,   6,   8, 0Ch, 10h, 14h, 1Ah, 22h, 2Ah, 0Ch
 14364 0000978F 1A222A0C           
 14365 00009793 0404040606080A0E12-                     db    4,   4,   4,   6,   6,   8, 0Ah, 0Eh, 12h, 1Ah, 20h, 2Ah, 12h
 14365 0000979C 1A202A12           
 14366 000097A0 04040406080A0C0E12-                     db    4,   4,   4,   6,   8, 0Ah, 0Ch, 0Eh, 12h, 18h, 20h, 2Ch, 0Ch
 14366 000097A9 18202C0C           
 14367 000097AD 04040406080A0C0E12-                     db    4,   4,   4,   6,   8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h
 14367 000097B6 181E2812           
 14368 000097BA 04040406080A0C0E12-                     db    4,   4,   4,   6,   8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h
 14368 000097C3 181E2812           
 14369 000097C7 04040406080A0C0E12-                     db    4,   4,   4,   6,   8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h
 14369 000097D0 181E2812           
 14370 000097D4 0808080C1014181C24-                     db    8,   8,   8, 0Ch, 10h, 14h, 18h, 1Ch, 24h,   2,   2,   2, 1Ah
 14370 000097DD 0202021A           
 14371 000097E1 000000000000000000-                     db 11 dup(0)            ; data align
 14371 000097EA 0000               
 14372 000097EC 000000000000000000-     mp3_pretab      db    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
 14372 000097F5 0000               
 14373 000097F7 000000000000000000-                     db    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
 14373 00009800 0000               
 14374 00009802 000000000000000000-                     db    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
 14374 0000980B 0000               
 14375 0000980D 010101010202030303-                     db    1,   1,   1,   1,   2,   2,   3,   3,   3,   2,   0
 14375 00009816 0200               
 14376 00009818 00000000                                db 4 dup(0)             ; data align
 14377 0000981C 4B1D4200028FDB0016-     mp3_mdct_win_src dd  00421D4Bh, 00DB8F02h, 019C7F16h, 029ADCC0h, 04000001h, 06246711h
 14377 00009825 7F9C01C0DC9A020100-
 14377 0000982E 000411672406       
 14378 00009834 4506EE090CD6A71238-                     dd  09EE0645h, 12A7D60Ch, 3DF40538h,0BC63D32Fh,0E7B0025Bh,0F069D222h ; these are sine values divided by cosine values...
 14378 0000983D 05F43D2FD363BC5B02-
 14378 00009846 B0E722D269F0       
 14379 0000984C 567133F467D857F6A8-                     dd 0F4337156h,0F657D867h,0F7BCFBA8h,0F8BB5952h,0F97C4965h,0FA15BB1Ch
 14379 00009855 FBBCF75259BBF86549-
 14379 0000985E 7CF91CBB15FA       
 14380 00009864 936D94FA8E5100FB70-                     dd 0FA946D93h,0FB00518Eh,0FB5EA270h,0FBB2FDEAh,0FC000000h,0FC479F38h
 14380 0000986D A25EFBEAFDB2FB0000-
 14380 00009876 00FC389F47FC       
 14381 0000987C 09668BFC9898CCFC0B-                     dd 0FC8B6609h,0FCCC9898h,0FD0C4F0Bh,0FD4B895Ch,0FD8B3FCFh,0FDCC725Eh
 14381 00009885 4F0CFD5C894BFDCF3F-
 14381 0000988E 8BFD5E72CCFD       
 14382 00009894 2F3910FE67D857FE7D-                     dd 0FE10392Fh,0FE57D867h,0FEA4DA7Dh,0FEF935F7h,0FF5786D9h,0FFC36AD5h
 14382 0000989D DAA4FEF735F9FED986-
 14382 000098A6 57FFD56AC3FF       
 14383 000098AC 4B1D4200028FDB0016-                     dd  00421D4Bh, 00DB8F02h, 019C7F16h, 029ADCC0h, 04000001h, 06246711h
 14383 000098B5 7F9C01C0DC9A020100-
 14383 000098BE 000411672406       
 14384 000098C4 4506EE090CD6A71238-                     dd  09EE0645h, 12A7D60Ch, 3DF40538h,0BC63D32Fh,0E7B0025Bh,0F069D222h
 14384 000098CD 05F43D2FD363BC5B02-
 14384 000098D6 B0E722D269F0       
 14385 000098DC 567133F467D857F6A8-                     dd 0F4337156h,0F657D867h,0F7BCFBA8h,0F8BB5952h,0F97C4965h,0FA15BB1Ch
 14385 000098E5 FBBCF75259BBF86549-
 14385 000098EE 7CF91CBB15FA       
 14386 000098F4 291B93FAB946F5FABB-                     dd 0FA931B29h,0FAF546B9h,0FB41DABBh,0FB7D8F97h,0FBABA162h,0FBCE4E62h
 14386 000098FD DA41FB978F7DFB62A1-
 14386 00009906 ABFB624ECEFB       
 14387 0000990C 671CF0FBAFC845FC0D-                     dd 0FBF01C67h,0FC45C8AFh,0FCD2D50Dh,0FD9008D0h,0FE74C032h,0FF771894h
 14387 00009915 D5D2FCD00890FD32C0-
 14387 0000991E 74FE941877FF       
 14388 00009924 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
 14388 0000992D 000000000000000000-
 14388 00009936 000000000000       
 14389 0000993C 028FDB00010000040C-                     dd  00DB8F02h, 04000001h, 12A7D60Ch,0E7B0025Bh,0F657D867h,0F97C4965h
 14389 00009945 D6A7125B02B0E767D8-
 14389 0000994E 57F665497CF9       
 14390 00009954 8E5100FB000000FC98-                     dd 0FB00518Eh,0FC000000h,0FCCC9898h,0FD8B3FCFh,0FE57D867h,0FF5786D9h
 14390 0000995D 98CCFCCF3F8BFD67D8-
 14390 00009966 57FED98657FF       
 14391 0000996C 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
 14391 00009975 000000000000000000-
 14391 0000997E 000000000000       
 14392 00009984 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
 14392 0000998D 000000000000000000-
 14392 00009996 000000000000       
 14393 0000999C 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
 14393 000099A5 000000000000000000-
 14393 000099AE 000000000000       
 14394 000099B4 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
 14394 000099BD 000000000000000000-
 14394 000099C6 000000000000       
 14395 000099CC 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
 14395 000099D5 000000000000000000-
 14395 000099DE 000000000000       
 14396 000099E4 B58869025237BA0B4F-                     dd  026988B5h, 0BBA3752h, 37D3294Fh,0B73F655Bh,0E3B0025Bh,0EDAD5D13h
 14396 000099ED 29D3375B653FB75B02-
 14396 000099F6 B0E3135DADED       
 14397 000099FC A2ADB2F2B8288CF5D6-                     dd 0F2B2ADA2h,0F58C28B8h,0F75657D6h,0F88E2C57h,0F96DE565h,0FA1449CDh
 14397 00009A05 5756F7572C8EF865E5-
 14397 00009A0E 6DF9CD4914FA       
 14398 00009A14 936D94FA8E5100FB70-                     dd 0FA946D93h,0FB00518Eh,0FB5EA270h,0FBB2FDEAh,0FC000000h,0FC479F38h
 14398 00009A1D A25EFBEAFDB2FB0000-
 14398 00009A26 00FC389F47FC       
 14399 00009A2C 09668BFC9898CCFC0B-                     dd 0FC8B6609h,0FCCC9898h,0FD0C4F0Bh,0FD4B895Ch,0FD8B3FCFh,0FDCC725Eh
 14399 00009A35 4F0CFD5C894BFDCF3F-
 14399 00009A3E 8BFD5E72CCFD       
 14400 00009A44 2F3910FE67D857FE7D-                     dd 0FE10392Fh,0FE57D867h,0FEA4DA7Dh,0FEF935F7h,0FF5786D9h,0FFC36AD5h
 14400 00009A4D DAA4FEF735F9FED986-
 14400 00009A56 57FFD56AC3FF       
 14401 00009A5C 0000000000000040        mp3_is_table_normal dd  00000000h, 40000000h
 14402 00009A64 BB58860D46A77932                        dd  0D8658BBh, 3279A746h
 14403 00009A6C D1F56C17300A9328                        dd  176CF5D1h, 28930A30h
 14404 00009A74 0000002000000020                        dd  20000000h, 20000000h
 14405 00009A7C 300A9328D1F56C17                        dd  28930A30h, 176CF5D1h
 14406 00009A84 46A77932BB58860D                        dd  3279A746h, 0D8658BBh
 14407 00009A8C 0000004000000000                        dd  40000000h, 00000000h
 14408 00009A94 00000080                mp3_is_table_lsf_src dd 80000000h      
 14409                                                                          ; sqrt based constants...
 14410                                                                          ; 40000000h*2 ; 2.0  (2^1.00) aka 2
 14411 00009A98 667EA26B                                dd 6BA27E66h            ; 35D13F33h*2 ; 1.681 (2^0.75)
 14412 00009A9C 9A79825A                                dd 5A82799Ah            ; 2D413CCDh*2 ; 1.414 (2^0.50) aka sqrt(2)
 14413 00009AA0 2AF81B4C                                dd 4C1BF82Ah            ; 260DFC15h*2 ; 1.189 (2^0.25) aka sqrt(sqrt(2))
 14414 00009AA4 00000080                mp3_pow2_quarters dd 80000000h         
 14415                                                                          ; 40000000h*2 ; 2^(0/4)
 14416 00009AA8 52F03798                                dd 9837F052h            ; 4C1BF829h*2 ; 2^(1/4)
 14417 00009AAC 34F304B5                                dd 0B504F334h           ; 5A82799Ah*2 ; 2^(2/4)
 14418 00009AB0 CCFC44D7                                dd 0D744FCCCh           ; 6BA27E66h*2 ; 2^(3/4)
 14419 00009AB4 00000000                mp3_initialized dd 0                   
 14420 00009AB8 12000000                mp3_huff_num_entries dd 12h            
 14421 00009ABC 00                      wrchr_buf       db 0                   
 14422 00009ABD 90<rep 3h>                              align 4
 14423                                  ; LPCSTR mp3_src_fname
 14424 00009AC0 00000000                mp3_src_fname   dd 0                   
 14425                                  ; LPCSTR mp3_dst_fname
 14426 00009AC4 00000000                mp3_dst_fname   dd 0                   
 14427                                  ; LPCSTR mp3_pcm_fname
 14428 00009AC8 00000000                mp3_pcm_fname   dd 0                   
 14429 00009ACC 524946462400000057-     mp3_wav_header  db 'RIFF$',0,0,0,'WAVEfmt ',10h,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,4,0,10h,0,'data',0,0,0,0
 14429 00009AD5 415645666D74201000-
 14429 00009ADE 000001000200000000-
 14429 00009AE7 000000000004001000-
 14429 00009AF0 6461746100000000   
 14430                                  ; 21/10/2024                   
 14431 00009AF8 00000000                zero		dd 0  
 14432 00009AFC 00                      num_enqueued_frames db 0
 14433 00009AFD 617564696F20647572-     txt_decode_timing1 db 'audio duration ',0
 14433 00009B06 6174696F6E2000     
 14434 00009B0D 206D696C6C69736563-     txt_decode_timing2 db ' milliseconds, decoded in ',0
 14434 00009B16 6F6E64732C20646563-
 14434 00009B1F 6F64656420696E2000 
 14435 00009B28 206D696C6C69736563-     txt_decode_timing3 db ' milliseconds',0Dh,0Ah,0
 14435 00009B31 6F6E64730D0A00     
 14436 00009B38 20636C6F636B206379-     txt_clks_per_second db ' clock cycles per second:',0Dh,0Ah,0
 14436 00009B41 636C65732070657220-
 14436 00009B4A 7365636F6E643A0D0A-
 14436 00009B53 00                 
 14437 00009B54 0303020106060505        huff_tree_list_numbits db    3,   3,   2,   1,   6,   6,   5,   5
 14438 00009B5C 0503030301060605                        db    5,   3,   3,   3,   1,   6,   6,   5
 14439 00009B64 0505030202020808                        db    5,   5,   3,   2,   2,   2,   8,   8
 14440 00009B6C 0706070707070606                        db    7,   6,   7,   7,   7,   7,   6,   6
 14441 00009B74 0606030303010707                        db    6,   6,   3,   3,   3,   1,   7,   7
 14442 00009B7C 0606060505050504                        db    6,   6,   6,   5,   5,   5,   5,   4
 14443 00009B84 0404030203030A0A                        db    4,   4,   3,   2,   3,   3, 0Ah, 0Ah
 14444 00009B8C 0A0A090909090808                        db  0Ah, 0Ah,   9,   9,   9,   9,   8,   8
 14445 00009B94 0909080909080807                        db    9,   9,   8,   9,   9,   8,   8,   7
 14446 00009B9C 0707080808080707                        db    7,   7,   8,   8,   8,   8,   7,   7
 14447 00009BA4 0707060506060403                        db    7,   7,   6,   5,   6,   6,   4,   3
 14448 00009BAC 03010B0B0A090A0A                        db    3,   1, 0Bh, 0Bh, 0Ah,   9, 0Ah, 0Ah
 14449 00009BB4 0909090808090909                        db    9,   9,   9,   8,   8,   9,   9,   9
 14450 00009BBC 0908080807080808                        db    9,   8,   8,   8,   7,   8,   8,   8
 14451 00009BC4 0808080808060606                        db    8,   8,   8,   8,   8,   6,   6,   6
 14452 00009BCC 0404020303020909                        db    4,   4,   2,   3,   3,   2,   9,   9
 14453 00009BD4 0808090908080808                        db    8,   8,   9,   9,   8,   8,   8,   8
 14454 00009BDC 0707070808070707                        db    7,   7,   7,   8,   8,   7,   7,   7
 14455 00009BE4 0706060606050506                        db    7,   6,   6,   6,   6,   5,   5,   6
 14456 00009BEC 0605050404040303                        db    6,   5,   5,   4,   4,   4,   3,   3
 14457 00009BF4 03030B0B0B0B0B0B                        db    3,   3, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 14458 00009BFC 0A0A0A0A0A0A0A0B                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Bh
 14459 00009C04 0B0A09090A0A0909                        db  0Bh, 0Ah,   9,   9, 0Ah, 0Ah,   9,   9
 14460 00009C0C 0A0A090A0A080809                        db  0Ah, 0Ah,   9, 0Ah, 0Ah,   8,   8,   9
 14461 00009C14 090A0A09090A0A08                        db    9, 0Ah, 0Ah,   9,   9, 0Ah, 0Ah,   8
 14462 00009C1C 0808090909090909                        db    8,   8,   9,   9,   9,   9,   9,   9
 14463 00009C24 0808080808080707                        db    8,   8,   8,   8,   8,   8,   7,   7
 14464 00009C2C 0707060606060403                        db    7,   7,   6,   6,   6,   6,   4,   3
 14465 00009C34 03010A0A0A0A0A0A                        db    3,   1, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 14466 00009C3C 0A0B0B0A0A090909                        db  0Ah, 0Bh, 0Bh, 0Ah, 0Ah,   9,   9,   9
 14467 00009C44 0A0A0A0A08080909                        db  0Ah, 0Ah, 0Ah, 0Ah,   8,   8,   9,   9
 14468 00009C4C 0708080808080909                        db    7,   8,   8,   8,   8,   8,   9,   9
 14469 00009C54 0909080708080707                        db    9,   9,   8,   7,   8,   8,   7,   7
 14470 00009C5C 0808080909080808                        db    8,   8,   8,   9,   9,   8,   8,   8
 14471 00009C64 0808080707060607                        db    8,   8,   8,   7,   7,   6,   6,   7
 14472 00009C6C 0706050405050303                        db    7,   6,   5,   4,   5,   5,   3,   3
 14473 00009C74 03020A0A09090909                        db    3,   2, 0Ah, 0Ah,   9,   9,   9,   9
 14474 00009C7C 0909090808090908                        db    9,   9,   9,   8,   8,   9,   9,   8
 14475 00009C84 0808080808090908                        db    8,   8,   8,   8,   8,   9,   9,   8
 14476 00009C8C 0808080809090707                        db    8,   8,   8,   8,   9,   9,   7,   7
 14477 00009C94 0708080808080807                        db    7,   8,   8,   8,   8,   8,   8,   7
 14478 00009C9C 0707070808070707                        db    7,   7,   7,   8,   8,   7,   7,   7
 14479 00009CA4 0606060607070605                        db    6,   6,   6,   6,   7,   7,   6,   5
 14480 00009CAC 0505040405050403                        db    5,   5,   4,   4,   5,   5,   4,   3
 14481 00009CB4 0303131312111010                        db    3,   3, 13h, 13h, 12h, 11h, 10h, 10h
 14482 00009CBC 1010101010101010                        db  10h, 10h, 10h, 10h, 10h, 10h, 10h, 10h
 14483 00009CC4 11110F0F10100F0F                        db  11h, 11h, 0Fh, 0Fh, 10h, 10h, 0Fh, 0Fh
 14484 00009CCC 0F0F0F0F0F0F0F0F                        db  0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh
 14485 00009CD4 10100F10100E0E0F                        db  10h, 10h, 0Fh, 10h, 10h, 0Eh, 0Eh, 0Fh
 14486 00009CDC 0F0F0F0E0E0E0E0E                        db  0Fh, 0Fh, 0Fh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh
 14487 00009CE4 0E0E0E0E0E0E0F0F                        db  0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Fh, 0Fh
 14488 00009CEC 0E0D0E0E0D0D0E0E                        db  0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh, 0Eh
 14489 00009CF4 0D0E0E0D0E0E0D0E                        db  0Dh, 0Eh, 0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Eh
 14490 00009CFC 0E0D0D0E0E0C0C0C                        db  0Eh, 0Dh, 0Dh, 0Eh, 0Eh, 0Ch, 0Ch, 0Ch
 14491 00009D04 0D0D0D0D0D0D0C0D                        db  0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh
 14492 00009D0C 0D0C0C0D0D0D0D0D                        db  0Dh, 0Ch, 0Ch, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh
 14493 00009D14 0D0D0D0D0D0D0D0C                        db  0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch
 14494 00009D1C 0C0D0D0C0C0C0C0D                        db  0Ch, 0Dh, 0Dh, 0Ch, 0Ch, 0Ch, 0Ch, 0Dh
 14495 00009D24 0D0D0D0C0D0D0C0B                        db  0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Ch, 0Bh
 14496 00009D2C 0C0C0C0C0C0C0C0C                        db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 14497 00009D34 0B0B0B0B0C0C0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh
 14498 00009D3C 0C0C0B0C0C0C0C0B                        db  0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Bh
 14499 00009D44 0B0C0C0B0C0C0B0C                        db  0Bh, 0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ch
 14500 00009D4C 0C0B0C0C0A0A0A0B                        db  0Ch, 0Bh, 0Ch, 0Ch, 0Ah, 0Ah, 0Ah, 0Bh
 14501 00009D54 0B0B0B0B0B0B0B0A                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah
 14502 00009D5C 0A0A0A0B0B0A0B0B                        db  0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh
 14503 00009D64 0A0B0B0B0B0A0A0B                        db  0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh
 14504 00009D6C 0B0A0A0B0B0B0B0B                        db  0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 14505 00009D74 0B09090A0A0A0A0A                        db  0Bh,   9,   9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 14506 00009D7C 0B0B0909090A0A09                        db  0Bh, 0Bh,   9,   9,   9, 0Ah, 0Ah,   9
 14507 00009D84 090A0A0A0A0A0A0A                        db    9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 14508 00009D8C 0A0A0A0809090909                        db  0Ah, 0Ah, 0Ah,   8,   9,   9,   9,   9
 14509 00009D94 09090A0A09090908                        db    9,   9, 0Ah, 0Ah,   9,   9,   9,   8
 14510 00009D9C 0809090909090908                        db    8,   9,   9,   9,   9,   9,   9,   8
 14511 00009DA4 0708080808070707                        db    7,   8,   8,   8,   8,   7,   7,   7
 14512 00009DAC 0707060606060404                        db    7,   7,   6,   6,   6,   6,   4,   4
 14513 00009DB4 03010D0D0D0D0C0D                        db    3,   1, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh
 14514 00009DBC 0D0D0D0D0D0C0D0D                        db  0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh
 14515 00009DC4 0C0C0C0C0C0C0C0C                        db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 14516 00009DCC 0C0C0C0C0C0C0C0C                        db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 14517 00009DD4 0C0C0C0C0C0C0C0D                        db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Dh
 14518 00009DDC 0D0B0B0C0C0C0C0B                        db  0Dh, 0Bh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Bh
 14519 00009DE4 0B0B0B0B0B0C0C0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ch, 0Ch, 0Bh
 14520 00009DEC 0B0B0B0B0B0B0B0C                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ch
 14521 00009DF4 0C0B0B0B0B0B0B0B                        db  0Ch, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 14522 00009DFC 0B0B0B0B0B0B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 14523 00009E04 0B0B0B0B0B0B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 14524 00009E0C 0B0B0C0C0B0B0B0B                        db  0Bh, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh, 0Bh, 0Bh
 14525 00009E14 0B0B0A0B0B0B0B0B                        db  0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 14526 00009E1C 0B0A0A0B0B0A0A0A                        db  0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah
 14527 00009E24 0A0B0B0A0A0A0A0A                        db  0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 14528 00009E2C 0A0A0B0B0A0A0A0A                        db  0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah
 14529 00009E34 0A0B0B090A0A0A0A                        db  0Ah, 0Bh, 0Bh,   9, 0Ah, 0Ah, 0Ah, 0Ah
 14530 00009E3C 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 14531 00009E44 090A0A0A0A090A0A                        db    9, 0Ah, 0Ah, 0Ah, 0Ah,   9, 0Ah, 0Ah
 14532 00009E4C 090A0A0A0A0A0A0A                        db    9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 14533 00009E54 0A09090909090909                        db  0Ah,   9,   9,   9,   9,   9,   9,   9
 14534 00009E5C 0A0A090909090909                        db  0Ah, 0Ah,   9,   9,   9,   9,   9,   9
 14535 00009E64 0A0A090909090909                        db  0Ah, 0Ah,   9,   9,   9,   9,   9,   9
 14536 00009E6C 0809090909090909                        db    8,   9,   9,   9,   9,   9,   9,   9
 14537 00009E74 0909090808080809                        db    9,   9,   9,   8,   8,   8,   8,   9
 14538 00009E7C 0909090909090908                        db    9,   9,   9,   9,   9,   9,   9,   8
 14539 00009E84 0808080808090908                        db    8,   8,   8,   8,   8,   9,   9,   8
 14540 00009E8C 0808080808080909                        db    8,   8,   8,   8,   8,   8,   9,   9
 14541 00009E94 0807080807070707                        db    8,   7,   8,   8,   7,   7,   7,   7
 14542 00009E9C 0808070707070706                        db    8,   8,   7,   7,   7,   7,   7,   6
 14543 00009EA4 0707060607070606                        db    7,   7,   6,   6,   7,   7,   6,   6
 14544 00009EAC 0605050505050304                        db    6,   5,   5,   5,   5,   5,   3,   4
 14545 00009EB4 04030B0B0B0B0B0B                        db    4,   3, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 14546 00009EBC 0B0B0A0B0B0B0B0A                        db  0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah
 14547 00009EC4 0A0A0A0A080A0A09                        db  0Ah, 0Ah, 0Ah, 0Ah,   8, 0Ah, 0Ah,   9
 14548 00009ECC 0909090A1011110F                        db    9,   9,   9, 0Ah, 10h, 11h, 11h, 0Fh
 14549 00009ED4 0F10100E0F0F0E0E                        db  0Fh, 10h, 10h, 0Eh, 0Fh, 0Fh, 0Eh, 0Eh
 14550 00009EDC 0F0F0E0E0F0F0F0F                        db  0Fh, 0Fh, 0Eh, 0Eh, 0Fh, 0Fh, 0Fh, 0Fh
 14551 00009EE4 0E0F0F0E0D080909                        db  0Eh, 0Fh, 0Fh, 0Eh, 0Dh,   8,   9,   9
 14552 00009EEC 08080D0E0E0E0E0E                        db    8,   8, 0Dh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh
 14553 00009EF4 0E0E0E0E0E0D0D0E                        db  0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh
 14554 00009EFC 0E0E0E0D0E0E0D0D                        db  0Eh, 0Eh, 0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Dh
 14555 00009F04 0D0E0E0E0E0D0D0E                        db  0Dh, 0Eh, 0Eh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh
 14556 00009F0C 0E0D0E0E0C0D0D0D                        db  0Eh, 0Dh, 0Eh, 0Eh, 0Ch, 0Dh, 0Dh, 0Dh
 14557 00009F14 0D0D0D0D0D0D0D0D                        db  0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh
 14558 00009F1C 0D0D0D0C0D0D0D0D                        db  0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Dh, 0Dh
 14559 00009F24 0D0D0C0D0D0C0C0D                        db  0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Ch, 0Ch, 0Dh
 14560 00009F2C 0D0B0C0C0C0C0C0C                        db  0Dh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 14561 00009F34 0C0D0D0B0C0C0C0C                        db  0Ch, 0Dh, 0Dh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch
 14562 00009F3C 0B0C0C0C0C0C0C0C                        db  0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 14563 00009F44 0C0B0C0C0B0B0B0B                        db  0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh, 0Bh, 0Bh
 14564 00009F4C 0C0C0C0C0C0C0C0C                        db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 14565 00009F54 0B0C0C0B0C0C0B0C                        db  0Bh, 0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ch
 14566 00009F5C 0C0B0C0C0B0A0A0B                        db  0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ah, 0Ah, 0Bh
 14567 00009F64 0B0B0B0B0B0A0A0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh
 14568 00009F6C 0B0A0A0B0B0B0B0B                        db  0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 14569 00009F74 0B0B0B0A0B0B0A0A                        db  0Bh, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah
 14570 00009F7C 0A0B0B0A0A0B0B0A                        db  0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah
 14571 00009F84 0A0B0B0A09090A0A                        db  0Ah, 0Bh, 0Bh, 0Ah,   9,   9, 0Ah, 0Ah
 14572 00009F8C 0A0A0A0A0909090A                        db  0Ah, 0Ah, 0Ah, 0Ah,   9,   9,   9, 0Ah
 14573 00009F94 0A090A0A09090809                        db  0Ah,   9, 0Ah, 0Ah,   9,   9,   8,   9
 14574 00009F9C 0909090909090908                        db    9,   9,   9,   9,   9,   9,   9,   8
 14575 00009FA4 0809090808070708                        db    8,   9,   9,   8,   8,   7,   7,   8
 14576 00009FAC 0807060606060404                        db    8,   7,   6,   6,   6,   6,   4,   4
 14577 00009FB4 0301080808080808                        db    3,   1,   8,   8,   8,   8,   8,   8
 14578 00009FBC 0808070808070708                        db    8,   8,   7,   8,   8,   7,   7,   8
 14579 00009FC4 0807070707070707                        db    8,   7,   7,   7,   7,   7,   7,   7
 14580 00009FCC 0707070707080809                        db    7,   7,   7,   7,   7,   8,   8,   9
 14581 00009FD4 0B0B0B0B0B0B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 14582 00009FDC 0B0B0B0B0B0B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 14583 00009FE4 0B0B0B0B0B0B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 14584 00009FEC 0B0B0B0B040B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh,   4, 0Bh, 0Bh, 0Bh
 14585 00009FF4 0B0C0C0B0A0B0B0A                        db  0Bh, 0Ch, 0Ch, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah
 14586 00009FFC 0A0A0A0B0B0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah
 14587 0000A004 0A0B0B0A0A0A0A0A                        db  0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 14588 0000A00C 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 14589 0000A014 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 14590 0000A01C 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 14591 0000A024 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 14592 0000A02C 0A0A0B0B0A0A0A0A                        db  0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah
 14593 0000A034 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 14594 0000A03C 0A0B0B0A0B0B0A09                        db  0Ah, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah,   9
 14595 0000A044 0A0A0A0A0B0B0A09                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah,   9
 14596 0000A04C 090A0A090A0A0A0A                        db    9, 0Ah, 0Ah,   9, 0Ah, 0Ah, 0Ah, 0Ah
 14597 0000A054 09090A0A09090909                        db    9,   9, 0Ah, 0Ah,   9,   9,   9,   9
 14598 0000A05C 0909090909090909                        db    9,   9,   9,   9,   9,   9,   9,   9
 14599 0000A064 0909090909090909                        db    9,   9,   9,   9,   9,   9,   9,   9
 14600 0000A06C 0909090909090909                        db    9,   9,   9,   9,   9,   9,   9,   9
 14601 0000A074 0909090909090909                        db    9,   9,   9,   9,   9,   9,   9,   9
 14602 0000A07C 0A0A0909090A0A08                        db  0Ah, 0Ah,   9,   9,   9, 0Ah, 0Ah,   8
 14603 0000A084 0909080808080808                        db    9,   9,   8,   8,   8,   8,   8,   8
 14604 0000A08C 0808080808080809                        db    8,   8,   8,   8,   8,   8,   8,   9
 14605 0000A094 0908080808080809                        db    9,   8,   8,   8,   8,   8,   8,   9
 14606 0000A09C 0907080807070707                        db    9,   7,   8,   8,   7,   7,   7,   7
 14607 0000A0A4 0708080707060607                        db    7,   8,   8,   7,   7,   6,   6,   7
 14608 0000A0AC 0706050506060404                        db    7,   6,   5,   5,   6,   6,   4,   4
 14609 0000A0B4 0404060606060606                        db    4,   4,   6,   6,   6,   6,   6,   6
 14610 0000A0BC 0505050505040404                        db    5,   5,   5,   5,   5,   4,   4,   4
 14611 0000A0C4 0401040404040404                        db    4,   1,   4,   4,   4,   4,   4,   4
 14612 0000A0CC 0404040404040404                        db    4,   4,   4,   4,   4,   4,   4,   4
 14613 0000A0D4 0404                                    db    4,   4
 14614 0000A0D6 03                      _@@const_3      db 3                   
 14615 0000A0D7 000000                                  db 3 dup(0)
 14616 0000A0DA [3A480000]              mp3_synth_filter_procs dd synth_16bit_shift_0_slow ; SYNTH_MACRO 0,0,0
 14617 0000A0DE [264B0000]                              dd synth_16bit_shift_1_slow ; SYNTH_MACRO 0,1,0
 14618 0000A0E2 [184E0000]                              dd synth_16bit_shift_2_slow ; SYNTH_MACRO 0,2,0
 14619 0000A0E6 [0A510000]                              dd synth_8bit_shift_0_slow ; SYNTH_MACRO 1,0,0
 14620 0000A0EA [EB530000]                              dd synth_8bit_shift_1_slow ; SYNTH_MACRO 1,1,0
 14621 0000A0EE [D2560000]                              dd synth_8bit_shift_2_slow ; SYNTH_MACRO 1,2,0
 14622 0000A0F2 [FB350000]                              dd synth_16bit_shift_0_fast ; SYNTH_MACRO 0,0,1
 14623 0000A0F6 [07390000]                              dd synth_16bit_shift_1_fast ; SYNTH_MACRO 0,1,1
 14624 0000A0FA [193C0000]                              dd synth_16bit_shift_2_fast ; SYNTH_MACRO 0,2,1
 14625 0000A0FE [2B3F0000]                              dd synth_8bit_shift_0_fast ; SYNTH_MACRO 1,0,1
 14626 0000A102 [2C420000]                              dd synth_8bit_shift_1_fast ; SYNTH_MACRO 1,1,1
 14627 0000A106 [33450000]                              dd synth_8bit_shift_2_fast ; SYNTH_MACRO 1,2,1
 14628                                  ;txt_hello      db 'nocash mp3 decoder v1.4, 2024 martin korth, press ctrl+c to quit,'
 14629                                  ;               db ' BDS now',0Dh,0Ah,0
 14630                                  ; Erdogan Tan - 17/10/2024
 14631 0000A10A 0D0A                    txt_hello       db 13,10
 14632                                  		;db 'NOCASH MP3 PLAYER v1.4 for Windows ',0
 14633                                  		; 09/01/2025
 14634 0000A10C 4E4F43415348204D50-     		db 'NOCASH MP3 PLAYER v1.0 for TRDOS386 ',0
 14634 0000A115 3320504C4159455220-
 14634 0000A11E 76312E3020666F7220-
 14634 0000A127 5452444F5333383620-
 14634 0000A130 00                 
 14635                                  		 
 14636 0000A131 66696C653A2000          txt_file        db 'file: ',0          
 14637 0000A138 66696C652073697A65-     txt_file_size   db 'file size: ',0     
 14637 0000A141 3A2000             
 14638 0000A144 2C206964332073697A-     txt_id3_size    db ', id3 size: ',0    
 14638 0000A14D 653A2000           
 14639 0000A151 2C207461672073697A-     txt_tag_size    db ', tag size: ',0    
 14639 0000A15A 653A2000           
 14640 0000A15E 696E7075743A2000        txt_input       db 'input: ',0         
 14641 0000A166 6F75747075743A2000      txt_output      db 'output: ',0        
 14642 0000A16F 20687A2C2000            txt_hz          db ' hz, ',0           
 14643 0000A175 206368616E6E656C73-     txt_channels    db ' channels, ',0     
 14643 0000A17E 2C2000             
 14644 0000A181 2062697400              txt_bit         db ' bit',0            
 14645 0000A186 206B6269742F7300        txt_kbit_s      db ' kbit/s',0         
 14646 0000A18E 63616E6E6F74206F70-     txt_not_found   db 'cannot open source file',0Dh,0Ah,0
 14646 0000A197 656E20736F75726365-
 14646 0000A1A0 2066696C650D0A00   
 14647 0000A1A8 75736167653A206D70-     txt_help        db 'usage: mp3play input.mp3 [output.wav] [verify.pcm] [/test]', 0Dh,0Ah
 14647 0000A1B1 33706C617920696E70-
 14647 0000A1BA 75742E6D7033205B6F-
 14647 0000A1C3 75747075742E776176-
 14647 0000A1CC 5D205B766572696679-
 14647 0000A1D5 2E70636D5D205B2F74-
 14647 0000A1DE 6573745D0D0A       
 14648 0000A1E4 202020202020202020-                     db '                         [/mono] [/8bit] [/fast] [/half|/quarter]',0Dh,0Ah,0
 14648 0000A1ED 202020202020202020-
 14648 0000A1F6 202020202020205B2F-
 14648 0000A1FF 6D6F6E6F5D205B2F38-
 14648 0000A208 6269745D205B2F6661-
 14648 0000A211 73745D205B2F68616C-
 14648 0000A21A 667C2F717561727465-
 14648 0000A223 725D0D0A00         
 14649 0000A228 766572696679206D61-     _@@txt_verify1  db 'verify max difference = ',0
 14649 0000A231 782064696666657265-
 14649 0000A23A 6E6365203D2000     
 14650 0000A241 206174206D70333A00      _@@txt_verify1_at_mp3 db ' at mp3:',0  
 14651 0000A24A 2C2061766572616765-     _@@txt_verify2  db ', average difference = ',0
 14651 0000A253 20646966666572656E-
 14651 0000A25C 6365203D2000       
 14652                                  
 14653                                  ; Erdogan Tan - 17/10/2024
 14654                                                 ;db 'NOCASH MP3 PLAYER v1.4 for Windows ',0
 14655 0000A262 287072657373204354-     txt_ctrlc       db '(press CTRL+C to quit)', 13,10,0
 14655 0000A26B 524C2B4320746F2071-
 14655 0000A274 756974290D0A00     
 14656                                  txt_ctrlc_size equ $ - txt_ctrlc
 14657 0000A27B 0D0A                    txt_about       db 13,10
 14658                                                  ;db '----------------------------------',13,10
 14659 0000A27D 2D2D2D2D2D2D2D2D2D-                     db '-----------------------------------',13,10
 14659 0000A286 2D2D2D2D2D2D2D2D2D-
 14659 0000A28F 2D2D2D2D2D2D2D2D2D-
 14659 0000A298 2D2D2D2D2D2D2D2D0D-
 14659 0000A2A1 0A                 
 14660 0000A2A2 4572646F67616E2054-                     db 'Erdogan Tan - 01/02/2025 (Assembler: NASM)', 13,10
 14660 0000A2AB 616E202D2030312F30-
 14660 0000A2B4 322F32303235202841-
 14660 0000A2BD 7373656D626C65723A-
 14660 0000A2C6 204E41534D290D0A   
 14661 0000A2CE 4F726967696E616C20-                     db 'Original code: MP3PLAYER.EXE v1.4 (20/09/2024)', 13,10
 14661 0000A2D7 636F64653A204D5033-
 14661 0000A2E0 504C415945522E4558-
 14661 0000A2E9 452076312E34202832-
 14661 0000A2F2 302F30392F32303234-
 14661 0000A2FB 290D0A             
 14662 0000A2FE 202020202020202020-                     db '               by Martin Korth (TASM source code)'
 14662 0000A307 202020202020627920-
 14662 0000A310 4D617274696E204B6F-
 14662 0000A319 72746820285441534D-
 14662 0000A322 20736F757263652063-
 14662 0000A32B 6F646529           
 14663 0000A32F 0D0A0D0A00                              db 13,10,13,10,0
 14664 0000A334 76312E342E30                            db 'v1.4.0'
 14665                                  ; 10/01/2025
 14666 0000A33A 00                      half_buffer	db 0
 14667                                  
 14668                                  ; ===========================================================================
 14669                                  ; Uninitialized DATA (BSS)
 14670                                  ; ===========================================================================
 14671                                  
 14672 0000A33B 90                      align 4
 14673                                  
 14674                                  bss_start:
 14675                                  
 14676                                  ; 10/01/2025
 14677                                  ABSOLUTE bss_start
 14678                                  
 14679                                  ; 12/01/2025
 14680                                  ;;;;
 14681                                  ; AC97 specific
 14682 0000A33C ????????                bus_dev_fn	resd 1
 14683 0000A340 ????????                dev_vendor	resd 1
 14684 0000A344 ????                    NAMBAR		resw 1
 14685 0000A346 ????                    NABMBAR		resw 1
 14686                                  ; SB16 specific
 14687 0000A348 ????????                audio_io_base	resd 1
 14688                                  ac97_int_ln_reg:
 14689 0000A34C ??                      audio_intr	resb 1
 14690                                  ;;;;
 14691                                  
 14692 0000A34D ??????                  alignb 4
 14693                                  
 14694                                  ;;;
 14695                                  ; 20/10/2024 (TRDOS 386 specific parameters)
 14696 0000A350 ??                      audio_hardware	resb 1
 14697 0000A351 ??                      vra		resb 1
 14698 0000A352 ????                    max_frequency	resw 1
 14699 0000A354 ??                      srb		resb 1
 14700 0000A355 ??                      volume_level	resb 1
 14701 0000A356 ??                      blocks		resb 1
 14702 0000A357 ??                      		resb 1
 14703 0000A358 ????????                buffer_size	resd 1
 14704                                  ;;;
 14705                                  
 14706                                  ;;;;
 14707                                  ; 13/01/2025 (Interpolation parameters)
 14708 0000A35C ????????                conversion	resd 1	; pointer to convers(t)ion
 14709                                  			; or interpolation proc address
 14710 0000A360 ????????                loadsize	resd 1	; decoding buffer size
 14711 0000A364 ??                      interpolation	resb 1	; interpolation status
 14712 0000A365 ??                      counter		resb 1  ; 15/01/2025
 14713 0000A366 ????                    		resw 1
 14714                                  ;;;;
 14715                                  
 14716                                  mp3_context_start:
 14717 0000A368 <res 1000h>             main_data_pool_start	resb 4096
 14718 0000B368 ????????                main_data_pool_wr_ptr	resd 1
 14719 0000B36C ????????                mp3_src_data_location	resd 1
 14720 0000B370 ????????                mp3_src_frame_size	resd 1
 14721 0000B374 ????????                mp3_src_frame_end	resd 1
 14722 0000B378 ????????                mp3_hdr_32bit_header	resd 1
 14723 0000B37C ????????                mp3_hdr_flag_crc	resd 1
 14724 0000B380 ????????                mp3_hdr_flag_mpeg25	resd 1
 14725 0000B384 ????????                mp3_hdr_flag_padding	resd 1
 14726 0000B388 ????????                mp3_sample_rate		resd 1
 14727 0000B38C ????????                mp3_hdr_sample_rate_index resd 1
 14728 0000B390 ????????                mp3_bit_rate		resd 1
 14729 0000B394 ????????                mp3_src_num_channels	resd 1
 14730 0000B398 ????????                mp3_output_num_channels resd 1
 14731 0000B39C ????????                mp3_output_sample_rate	resd 1
 14732 0000B3A0 ????????                mp3_bytes_per_sample	resd 1
 14733 0000B3A4 ????????                mp3_curr_syn_index	resd 1
 14734 0000B3A8 ????????                mp3_curr_syn_dst	resd 1
 14735 0000B3AC ????????                mp3_nb_frames		resd 1
 14736 0000B3B0 ????????                mp3_hdr_mode_val	resd 1
 14737 0000B3B4 ????????                mp3_hdr_mode_ext	resd 1
 14738 0000B3B8 ????????                mp3_hdr_flag_lsf	resd 1
 14739 0000B3BC ????????                mp3_synth_filter_proc	resd 1
 14740                                  
 14741 0000B3C0 <res 2000h>             mp3_synth_buf   resd 2048
 14742 0000D3C0 ????????????????        mp3_synth_index resd 2
 14743 0000D3C8 <res 2400h>             mp3_sb_samples  resd 2304
 14744                                  	                           ; MP3_MAX_CHANNELS*36*SBLIMIT
 14745 0000F7C8 <res 1200h>             mp3_mdct_buf    resd 1152
 14746                                                                     ; MP3_MAX_CHANNELS*SBLIMIT*18
 14747 000109C8 ????????                mp3_free_format_frame_size resd 1
 14748                                  
 14749 000109CC ??                      mp3_curr_vfrac_bits resb 1
 14750                                  
 14751 000109CD ??????                  alignb 4
 14752                                  
 14753 000109D0 ????????                mp3_xing_id     resd 1
 14754 000109D4 ????????                mp3_xing_flags  resd 1
 14755 000109D8 ????????                mp3_xing_frames resd 1
 14756 000109DC ????????                mp3_xing_filesize resd 1
 14757 000109E0 <res 64h>               mp3_xing_toc    resb 100
 14758 00010A44 ????????                mp3_xing_vbr_scale resd 1
 14759 00010A48 ????????                mp3_file_size   resd 1
 14760 00010A4C ????????                mp3_id3_size    resd 1
 14761 00010A50 ????????                mp3_tag_size    resd 1
 14762                                  
 14763 00010A54 ????????                mp3_num_frames_decoded	resd 1
 14764 00010A58 ????????                mp3_total_output_size	resd 1
 14765 00010A5C ????????                mp3_samples_dst		resd 1
 14766                                  ; DWORD mp3_samples_output_size
 14767 00010A60 ????????                mp3_samples_output_size	resd 1
 14768 00010A64 ????????                mp3_samples_dst_step	resd 1
 14769                                  
 14770 00010A68 ????????                mp3_curr_channel	resd 1
 14771 00010A6C ????????                mp3_curr_granule	resd 1
 14772 00010A70 ????????                mp3_curr_frame		resd 1
 14773                                  
 14774 00010A74 ????????                mp3_bitstream_start	resd 1
 14775 00010A78 ????????                mp3_src_remain		resd 1
 14776 00010A7C ????????                mp3_extra_bytes		resd 1
 14777 00010A80 ????????                mp3_main_data_begin	resd 1
 14778 00010A84 ????????                mp3_num_compress_bits	resd 1
 14779                                  
 14780 00010A88 ????????                mp3_nb_granules resd 1
 14781                                  
 14782 00010A8C <res 2680h>             mp3_granules		resb 9856
 14783 0001310C <res 480h>              mp3_exponents		resw 576
 14784 0001358C <res B800h>             huff_tree_buf		resb 0B800h
 14785 0001ED8C <res 240h>              mp3_band_index_long	resw 288
 14786 0001EFCC <res 803Ch>             mp3_table_4_3_exp	resb 32828
 14787                                  
 14788 00027008 <res 200F0h>            mp3_table_4_3_value	resd 32828
 14789 000470F8 <res 800h>              mp3_exp_table		resd 512
 14790 000478F8 <res 8000h>             mp3_expval_table	resd 8192
 14791 0004F8F8 <res 480h>              mp3_mdct_win		resd 288
 14792 0004FD78 <res 800h>              mp3_is_table_lsf	resd 512
 14793 00050578 <res 1000h>             mp3_synth_win		resd 1024
 14794 00051578 <res 2000h>             mp3_lsf_sf_expand_exploded_table resb 8192
 14795                                  mp3_context_end:
 14796 00053578 ????????                _@@region_address0	resd 1
 14797 0005357C ????????                _@@region_address1	resd 1
 14798 00053580 ????????                _@@saved_sp		resd 1
 14799 00053584 ????????                mp3_main_data_siz	resd 1
 14800 00053588 ????????                _@@scfsi        resd 1
 14801 0005358C <res Ch>                _@@gains        resd 3
 14802 00053598 ????????                _@@rle_point    resd 1
 14803 0005359C ????????                _@@III          resd 1
 14804 000535A0 ????????                _@@JJJ          resd 1
 14805 000535A4 ????????                _@@linbits      resd 1
 14806 000535A8 ????????                _@@vlc_table    resd 1
 14807 000535AC ????????                _@@coarse_end   resd 1
 14808                                  
 14809 000535B0 ????????                _@rle_point     resd 1
 14810 000535B4 ????????                _@@rle_ptr      resd 1
 14811 000535B8 ????????                _@@rle_val      resd 1
 14812 000535BC ????????                _@@rle_val_x_40h resd 1
 14813 000535C0 ????????                _@@max_bands    resb 4
 14814 000535C4 ????????                _@@max_blocks   resd 1
 14815 000535C8 ????????                _@@max_pos      resd 1
 14816 000535CC <res 28h>               _@@sfb_array    resb 40
 14817 000535F4 ????????                _@@is_tab       resd 1
 14818 000535F8 ????????                _@@n_long_sfb   resd 1
 14819 000535FC ????????                _@@n_short_sfb  resd 1
 14820 00053600 ????????                _@@n_sfb        resd 1
 14821 00053604 <res 900h>              _@@tmp          resb 2304
 14822 00053F04 ????????                _@@s0           resd 1
 14823 00053F08 ????????                _@@s2           resd 1
 14824 00053F0C ????????                _@@s3           resd 1
 14825                                  
 14826 00053F10 <res 48h>               _@@@tmp         resd 18 ; resb 72
 14827 00053F58 ????????                _@@tmp0         resd 1
 14828 00053F5C ????????                _@@tmp1         resd 1
 14829 00053F60 ????????                _@@tmp2         resd 1
 14830 00053F64 ????????                _@@tmp3         resd 1
 14831 00053F68 ????????                _@@tmp4         resd 1
 14832 00053F6C ????????                _@@tmp5         resd 1
 14833 00053F70 ????????                mp3_out2_a0     resd 1
 14834 00053F74 ????????                mp3_out2_a1     resd 1
 14835 00053F78 ????????                mp3_out2_a2     resd 1
 14836 00053F7C ????????                mp3_out2_b0     resd 1
 14837 00053F80 ????????                mp3_out2_b1     resd 1
 14838 00053F84 ????????                mp3_out2_b2     resd 1
 14839 00053F88 ????????                                resd 1
 14840 00053F8C ????????                                resd 1
 14841 00053F90 ????????                _@@@JJJ         resd 1
 14842 00053F94 ????????                _@@www          resd 1
 14843 00053F98 ????????                _@@mdct_long_end resd 1
 14844 00053F9C ????????                _@@sblimit      resd 1
 14845 00053FA0 ????????                _@@switch_point resd 1
 14846 00053FA4 <res 100h>              mp3_huff_tmp_bits	resb 256
 14847 000540A4 <res 200h>              mp3_huff_tmp_codes	resb 512
 14848 000542A4 ????????                _@@table_nb_bits	resd 1
 14849 000542A8 ????????                _@@nb_codes		resd 1
 14850 000542AC ????????                _@@prefix_numbits	resd 1
 14851 000542B0 ????????                _@@prefix_pattern	resd 1
 14852 000542B4 ????????                _@@curr_table_size	resd 1
 14853 000542B8 ????????                _@@curr_table_mask	resd 1
 14854 000542BC ????????                _@@curr_table_index	resd 1
 14855 000542C0 ????????                _@@granule_addr		resd 1
 14856                                  ; HANDLE hFile
 14857 000542C4 ????????                hFile           resd 1
 14858                                  ; HANDLE hMap
 14859                                  ;hMap           resd 1
 14860 000542C8 ????????                stream_start    resd 1
 14861 000542CC ????????                stream_pos      resd 1
 14862 000542D0 ????????                bytes_left      resd 1
 14863                                  
 14864                                  ; 20/10/2024
 14865                                  ; DWORD diskresult
 14866                                  ;diskresult     resd 1
 14867                                  ; HANDLE std_out
 14868                                  ;std_out        resd 1
 14869                                  ;cmdline_buf    resb 1024
 14870 000542D4 <res 80h>               cmdline_buf	resb 128
 14871                                  ; HANDLE mp3_wav_handle
 14872 00054354 ????????                mp3_wav_handle  resd 1
 14873                                  ; HANDLE mp3_pcm_handle
 14874 00054358 ????????                mp3_pcm_handle  resd 1
 14875 0005435C ????????                _@@max_diff     resd 1
 14876 00054360 ????????????????        _@@avg_diff     resd 2
 14877 00054368 ????????                pcm_filepos     resd 1
 14878 0005436C ????????                _@@mono_convert resd 1
 14879 00054370 ????????                _@@pcm_steps    resw 2
 14880 00054374 ????????                _@@worst_pcm_filepos resd 1
 14881 00054378 ????????                _@@worst_mp3_filepos resd 1
 14882 0005437C ????????                		resd 1
 14883                                  ;alignb 4
 14884                                  
 14885                                  ; 10/01/2025
 14886 00054380 <res C80h>              alignb 4096
 14887                                  
 14888                                  ; 12/01/2025
 14889                                  ; 09/01/2025
 14890                                  ;sample_buffer	resb 36864
 14891                                  ;sample_buffer	resb 8*MP3_MAX_OUTPUT_SIZE
 14892                                  ;sample_buffer_size equ $-sample_buffer
 14893                                  
 14894                                  ; 15/01/2025
 14895 00055000 <res 2000h>             decoding_buffer	resb 8192  ; 2*4096 (max. 4608)
 14896 00057000 <res 9000h>             sample_buffer	resb 36864 ; 8*4608
 14897                                  
 14898                                  ;alignb 4096
 14899                                  
 14900                                  end_of_bss:
 14901                                  
 14902                                  ; ===========================================================================
 14903                                  ; end
