     1                                  ; ****************************************************************************
     2                                  ; TMP3PLAY.PRG - Tiny MP3 PLAYER v1.0 for TRDOS 386 Operating System
     3                                  ; ----------------------------------------------------------------------------
     4                                  ; Based on 
     5                                  ; NOCASH MP3PLAY.EXE 1.4 (Windows) ASM source code (Martin Korth, 20/09/2024)
     6                                  ;
     7                                  ; 15/02/2025
     8                                  ;
     9                                  ; [ Last Modification: 24/02/2025 ]
    10                                  ;
    11                                  ; Modified from 'mp3play6.s' (14/02/2025) and 'twavply3.s' (10/02/2025)
    12                                  ;
    13                                  ; ----------------------------------------------------------------------------
    14                                  ; Modified from on MP3PLAY.ASM (for Windows console) source code - 17/10/2024
    15                                  ; ****************************************************************************
    16                                  ; Modified from Martin Korth's 'mp3play.asm' (TASM32) source code... (v1.4)
    17                                  ; Applied development method:
    18                                  ;         Disassembling 'mp3play.exe' v1.4 by using HEX-RAYS disassembler;
    19                                  ;         then... converting disassembled code to FASM syntax,
    20                                  ;                 adding '.idata' code (by help of FASM examples) to the raw
    21                                  ;                        asm file. Converting 'proc' procedures to labels.
    22                                  ;               and Finally: assembling mp3play.asm (single) file by using
    23                                  ;                           'fasm mp3play.asm' command.
    24                                  ;
    25                                  ; NOTE:
    26                                  ; Martin Korth's MP3PLAY.EXE (v1.4, 20/09/2024) file size is 45056 bytes.
    27                                  ; (This) modified MP3PLAY.EXE (v1.4.0, 17/10/2024) is 37888 bytes.
    28                                  ;
    29                                  ; ---------------------------------------------------------------------------
    30                                  ; Assembler: NASM (v2.15)
    31                                  ; ------------------------------------------------
    32                                  ; nasm tmp3play.s -l  tmp3play.txt -o TMP3PLAY.PRG
    33                                  
    34                                  ; 13/01/2025 (mp3play3.s)
    35                                  ; Interpolated sample rate playing method for non-VRA AC97 codecs.
    36                                  
    37                                  ; ===========================================================================
    38                                  ;  TRDOS 386 Operating System Specific Procedures - Erdogan Tan - 20/10/2024
    39                                  ; ===========================================================================
    40                                  
    41                                  ; 20/10/2024
    42                                  ; 20/08/2024 ; TRDOS 386 v2.0.9
    43                                  ; TRDOS 386 system calls
    44                                  _ver 	equ 0
    45                                  _exit 	equ 1
    46                                  _fork 	equ 2
    47                                  _read 	equ 3
    48                                  _write	equ 4
    49                                  _open	equ 5
    50                                  _close 	equ 6
    51                                  _wait 	equ 7
    52                                  _creat 	equ 8
    53                                  _rename equ 9
    54                                  _delete equ 10
    55                                  _exec	equ 11
    56                                  _chdir	equ 12
    57                                  _time 	equ 13
    58                                  _mkdir 	equ 14
    59                                  _chmod	equ 15
    60                                  _rmdir	equ 16
    61                                  _break	equ 17
    62                                  _drive	equ 18
    63                                  _seek	equ 19
    64                                  _tell 	equ 20
    65                                  _mem	equ 21
    66                                  _prompt	equ 22
    67                                  _path	equ 23
    68                                  _env	equ 24
    69                                  _stime	equ 25
    70                                  _quit	equ 26
    71                                  _intr	equ 27
    72                                  _dir	equ 28
    73                                  _emt 	equ 29
    74                                  _ldvrt 	equ 30
    75                                  _video 	equ 31
    76                                  _audio	equ 32
    77                                  _timer	equ 33
    78                                  _sleep	equ 34
    79                                  _msg    equ 35
    80                                  _geterr	equ 36
    81                                  _fpsave	equ 37
    82                                  _pri	equ 38
    83                                  _rele	equ 39
    84                                  _fff	equ 40
    85                                  _fnf	equ 41
    86                                  _alloc	equ 42
    87                                  _dalloc equ 43
    88                                  _calbac equ 44
    89                                  _dma	equ 45
    90                                  _stdio  equ 46	;  TRDOS 386 v2.0.9
    91                                  
    92                                  ; ---------------------------------------------------------------------------
    93                                  ; 'sys' macro
    94                                  ; ---------------------------------------------------------------------------
    95                                  ; 09/01/2025
    96                                  
    97                                  %macro sys 1-4
    98                                      ; 29/04/2016 - TRDOS 386 (TRDOS v2.0)
    99                                      ; 03/09/2015
   100                                      ; 13/04/2015
   101                                      ; Retro UNIX 386 v1 system call.
   102                                      %if %0 >= 2
   103                                          mov ebx, %2
   104                                          %if %0 >= 3
   105                                              mov ecx, %3
   106                                              %if %0 = 4
   107                                                 mov edx, %4
   108                                              %endif
   109                                          %endif
   110                                      %endif
   111                                      mov eax, %1
   112                                      ;int 30h
   113                                      int 40h ; TRDOS 386 (TRDOS v2.0)
   114                                  %endmacro
   115                                  
   116                                  ; ===========================================================================
   117                                  ; CODE
   118                                  ; ===========================================================================
   119                                  
   120                                  		[BITS 32] ; 32-bit intructions
   121                                  
   122                                  		[ORG 0]
   123                                  
   124                                  ; ===========================================================================
   125                                  
   126                                  		; 15/02/2025
   127                                  start:
   128                                  		; 15/02/2025
   129                                  		sys	_msg, txt_hello, 255, 0Bh
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00000000 BB[C0A70000]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00000005 B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 0000000A BA0B000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 0000000F B823000000          <1>  mov eax, %1
   112                              <1> 
   113 00000014 CD40                <1>  int 40h
   130                                  
   131                                  		; 21/10/2024
   132 00000016 E8A9390000              		call	set_break	; set and clear bss section
   133                                  					; also set stream_start position
   134                                  
   135                                  		; 15/02/2025
   136                                  		sys	_msg, txt_bdate, 255, 0Fh
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 0000001B BB[F4A70000]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00000020 B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00000025 BA0F000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 0000002A B823000000          <1>  mov eax, %1
   112                              <1> 
   113 0000002F CD40                <1>  int 40h
   137                                  		sys	_msg, txt_original,255,07h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00000031 BB[F4A90000]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00000036 B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 0000003B BA07000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00000040 B823000000          <1>  mov eax, %1
   112                              <1> 
   113 00000045 CD40                <1>  int 40h
   138                                  
   139                                  		;;;
   140                                  		; 11/01/2025
   141 00000047 E8453A0000              		call	detect_enable_audio_device
   142                                  		; 15/02/2025
   143 0000004C 731B                    		jnc     short GetFileName
   144                                  _dev_not_ready:
   145                                  		; couldn't find the audio device!
   146                                  		sys	_msg, noDevMsg, 255, 0Fh
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 0000004E BB[E5AA0000]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00000053 B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00000058 BA0F000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 0000005D B823000000          <1>  mov eax, %1
   112                              <1> 
   113 00000062 CD40                <1>  int 40h
   147 00000064 E91F3A0000              		jmp     ExitP@
   148                                  
   149                                  		; ---------------------------------------------------
   150                                  
   151                                  		; 20/02/2025
   152                                  		; 15/02/2025 - tmp3play.s
   153                                  		; 10/02/2025 - twavply3.s
   154                                  GetFileName:
   155                                  		; (TRDOS 386 -Retro UNIX 386- argument transfer method)
   156                                  		; (stack: argc,argv0addr,argv1addr,argv2addr ..
   157                                  		;			.. argv0text, argv1text ..) 
   158                                  		; ---- argc, argv[] ----
   159 00000069 89E6                    		mov	esi, esp
   160 0000006B AD                      		lodsd
   161 0000006C 83F802                  		cmp	eax, 2 ; two arguments 
   162 0000006F 7302                    		jnb	short _x
   163 00000071 EB4E                    		jmp	pmsg_usage
   164                                  
   165                                  _x:
   166 00000073 AD                      		lodsd	; skip program (PRG) file name
   167 00000074 8B36                    		mov	esi, [esi] ; MP3 file name 
   168                                  
   169                                  		;mov	edi, wav_file_name
   170                                  		; 15/02/2025
   171 00000076 BF[00550500]            		mov	edi, mp3_file_name
   172 0000007B 31C9                    		xor	ecx, ecx ; 0
   173                                  ScanName:       
   174 0000007D AC                      		lodsb
   175                                  
   176 0000007E 3C0D                    		cmp	al, 0Dh	; CR
   177 00000080 7633                    		jna	short a_4
   178                                  _y:
   179 00000082 3C20                    		cmp	al, 20h
   180 00000084 74F7                    		je	short ScanName	; scan start of name.
   181 00000086 AA                      		stosb
   182 00000087 B4FF                    		mov	ah, 0FFh
   183                                  a_0:
   184 00000089 FEC4                    		inc	ah
   185                                  a_1:
   186 0000008B 41                      		inc	ecx
   187 0000008C AC                      		lodsb
   188 0000008D AA                      		stosb
   189 0000008E 3C2E                    		cmp	al, '.'
   190 00000090 74F7                    		je	short a_0
   191 00000092 3C20                    		cmp	al, 20h
   192 00000094 7611                    		jna	short a_3
   193 00000096 20E4                    		and	ah, ah
   194 00000098 7406                    		jz	short a_2
   195                                  
   196                                  		; 20/02/2025
   197 0000009A 3C2F                    		cmp	al, '/'
   198 0000009C 7502                    		jne	short a_2
   199 0000009E B400                    		mov	ah, 0
   200                                  a_2:
   201 000000A0 80F94B                  		cmp	cl, 75	; 64+8+'.'+3 -> offset 75 is the last chr
   202 000000A3 72E6                    		jb	short a_1
   203 000000A5 EB0E                    		jmp	short a_4
   204                                  a_3:
   205 000000A7 4F                      		dec	edi
   206 000000A8 08E4                    		or	ah, ah		; if period NOT found,
   207 000000AA 7509                    		jnz	short a_4 	; then add a .mp3 extension.
   208                                  SetExt:
   209                                  		; 15/02/2025
   210 000000AC C7072E6D7033            		mov	dword [edi], '.mp3'
   211                                  		;mov	dword [edi], '.WAV' ; ! 64+12 is DOS limit
   212                                  					    ;   but writing +4 must not
   213                                  					    ;   destroy the following data
   214                                  					; so, 80 bytes path + 0 is possible here
   215 000000B2 83C704                  		add	edi, 4
   216                                  a_4:
   217 000000B5 C60700                  		mov	byte [edi], 0
   218                                  
   219 000000B8 803D[00550500]20        		cmp	byte [mp3_file_name], 20h
   220 000000BF 771B                    		ja	short mp3_filename_chk
   221                                  
   222                                  pmsg_usage:
   223                                  		sys	_msg, txt_help, 255, 0Fh
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 000000C1 BB[D5A90000]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 000000C6 B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 000000CB BA0F000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 000000D0 B823000000          <1>  mov eax, %1
   112                              <1> 
   113 000000D5 CD40                <1>  int 40h
   224                                  
   225 000000D7 E9AC390000              		jmp	ExitP@
   226                                  
   227                                  		; ---------------------------------------------------
   228                                  
   229                                  mp3_filename_chk:
   230 000000DC 8B47FC                  		mov	eax, [edi-4]
   231 000000DF 25FFDFDFFF              		and	eax, 0FFDFDFFFh
   232 000000E4 3D2E4D5033              		cmp	eax, '.MP3'
   233 000000E9 751E                    		jne	short not_valid_mp3
   234                                  
   235                                  		; ---------------------------------------------------
   236                                  		
   237 000000EB 31ED                     		xor	ebp, ebp
   238 000000ED E810380000              		call	mp3_init
   239 000000F2 E8E4380000              		call	open_and_mmap_the_file
   240                                  		;jc	.exit
   241                                  		; 26/01/2025
   242 000000F7 0F828B390000            		jc	ExitP@
   243                                  
   244                                  		; 13/02/2025
   245 000000FD E839490000              		call	write_audio_dev_info
   246                                  		
   247                                  		; 15/02/2025
   248 00000102 E854380000              		call	mp3_check_1st_frame
   249 00000107 731B                    		jnc	short mp3_file_ready
   250                                  
   251                                  not_valid_mp3:
   252                                  		; not a proper/valid mp3 file !
   253                                  		sys	_msg, not_valid_mp3f, 255, 0Ch
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00000109 BB[33AB0000]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 0000010E B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00000113 BA0C000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00000118 B823000000          <1>  mov eax, %1
   112                              <1> 
   113 0000011D CD40                <1>  int 40h
   254                                  
   255 0000011F E964390000              		jmp	ExitP@
   256                                  
   257                                  		; ---------------------------------------------------
   258                                  
   259                                  mp3_file_ready:
   260                                  		; 13/02/2025
   261                                  		; 22/01/2025
   262                                  		; Forward/Backward position change parameters (*)
   263 00000124 A1[EC4A0500]            		mov	eax, [stream_pos]
   264 00000129 A3[64AB0000]            		mov	[stream_begin], eax ; *
   265 0000012E A1[F04A0500]            		mov	eax, [bytes_left]
   266 00000133 A3[60AB0000]            		mov	[stream_size], eax ; *
   267                                  
   268                                  		; 15/02/2025
   269 00000138 E85B4D0000              		call	SetTotalTime
   270                                  
   271                                  		; 15/02/2025
   272 0000013D E8D34D0000              		call	write_mp3_file_info
   273                                  
   274                                  		sys	_msg, msgPressAKey, 255, 07h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00000142 BB[8AAA0000]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00000147 B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 0000014C BA07000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00000151 B823000000          <1>  mov eax, %1
   112                              <1> 
   113 00000156 CD40                <1>  int 40h
   275                                  
   276 00000158 30E4                    		xor	ah, ah
   277 0000015A CD32                    		int	32h	; TRDOS 386 keyboard interrupt
   278                                  				; getchar (wait for keystroke)
   279                                  
   280                                  		;cmp	al, 1Bh ; ESC
   281                                  		;je	ExitP@
   282                                  		; 13/02/2025
   283 0000015C E87F4C0000              		call	check4keyboardstop.p_4
   284 00000161 0F8221390000            		jc	ExitP@
   285                                  
   286                                  		; ---------------------------------------------------
   287                                  
   288                                  		; 17/02/2025
   289                                  		;	[mp3_bytes_per_sample] = 2
   290                                  		; 15/02/2025 (tmp3play.s)
   291                                  		; 10/02/2025 (twavply3.s)
   292                                  		; 13/02/2025 (mp3play6.s)
   293                                  		; 26/01/2025 (mp3play5.s)
   294                                  		;;;;
   295 00000167 B800010000              		mov	eax, 256
   296 0000016C B201                    		mov	dl, 1
   297 0000016E 3815[84AB0000]          		cmp	byte [audio_hardware], dl ; 1
   298 00000174 7714                    		ja	short .stolp_s16 ; AC97
   299                                  
   300 00000176 BA[53510000]            		mov	edx, get_sb16_sound_data
   301                                  		; SB16		
   302 0000017B 3815[C8BB0000]          		cmp	byte [mp3_num_channels], dl ; 1
   303 00000181 7707                    		ja	short .stolp_s ; stereo
   304                                  .stolp_m:
   305                                  		;mov	ebx, sdc_8bit_mono
   306                                  		;cmp	byte [mp3_bytes_per_sample], dl ; 1
   307                                  		;jna	short .stolp_ok	; 8bit, mono
   308 00000183 BB[77510000]            		mov	ebx, sdc_16bit_mono
   309 00000188 EB09                    		jmp	short .stolp_m16 ; 16bit, mono
   310                                  .stolp_s:
   311                                  		;mov	ebx, sdc_8bit_stereo
   312                                  		;cmp	byte [mp3_bytes_per_sample], dl ; 1
   313                                  		;jna	short .stolp_s8 ; 8bit, stereo
   314                                  		; 16bit, stereo
   315                                  		;mov	ebx, sdc_16bit_stereo
   316                                  .stolp_s16:
   317 0000018A 31DB                    		xor	ebx, ebx ; (not necessary)
   318 0000018C BA[3B510000]            		mov	edx, get_ac97_sound_data ; (**)
   319                                  				; also for sb16, 16bit, stereo
   320 00000191 D1E0                    		shl	eax, 1
   321                                  .stolp_s8:
   322                                  .stolp_m16:
   323 00000193 D1E0                    		shl	eax, 1
   324                                  .stolp_ok:
   325 00000195 A3[6CAB0000]            		mov	[sd_count], eax
   326 0000019A 891D[00100600]          		mov	[sounddata_copy], ebx
   327 000001A0 8915[04100600]          		mov	[get_sound_data], edx
   328                                  		;;;;
   329                                  
   330                                  		; 15/02/2025
   331                                  		; ---------------------------------------------------
   332                                  		
   333                                  		; 13/02/2025
   334                                  		; 30/12/2024 (cgaplay.s)
   335                                  		;;;
   336                                  		; DIRECT VGA MEMORY ACCESS
   337                                  		; bl = 0, bh = 5
   338                                  		; Direct access/map to VGA memory (0A0000h)
   339                                  
   340                                  		sys	_video, 0500h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 000001A6 BB00050000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 000001AB B81F000000          <1>  mov eax, %1
   112                              <1> 
   113 000001B0 CD40                <1>  int 40h
   341 000001B2 3D00000A00              		cmp	eax, 0A0000h
   342 000001B7 7405                    		je	short .vimem_map_ok
   343                                  		; 30/12/2024
   344 000001B9 E9C2000000              		jmp	trdos386_error
   345                                  .vimem_map_ok:
   346                                  		;;;;
   347                                  
   348                                  		; ---------------------------------------------------
   349                                  setgraphmode:
   350                                  		; set VGA 640x480x16 graphics mode
   351 000001BE 66B81200                		mov	ax, 12h
   352 000001C2 CD31                    		int	31h	; TRDOS 386 Video Interrupt
   353                                  				; Set video mode
   354 000001C4 66BAC003                		mov	dx, 3C0h
   355 000001C8 30C0                    		xor	al, al
   356                                  setgraphmodel0:
   357                                  		;out	dx, al
   358 000001CA B401                    		mov	ah, 1	; outb
   359 000001CC CD34                    		int	34h	; TRDOS 386 IOCTL Interrupt
   360                                  		;out	dx, al
   361                                  		;mov	ah, 1	; outb
   362 000001CE CD34                    		int	34h
   363 000001D0 FEC0                    		inc	al
   364 000001D2 3C10                    		cmp	al, 10h
   365 000001D4 72F4                    		jb	short setgraphmodel0
   366 000001D6 B020                    		mov	al, 20h
   367                                  		;out	dx, al
   368                                  		;mov	ah, 1	; outb
   369 000001D8 CD34                    		int	34h
   370                                  		;;;;
   371                                  
   372                                  		; ---------------------------------------------------
   373                                  
   374                                  		; 17/02/2025
   375 000001DA B900010000              		mov	ecx, 256
   376 000001DF 31DB                    		xor	ebx, ebx
   377 000001E1 BF[004B0500]            		mov	edi, RowOfs
   378                                  MakeOfs:
   379 000001E6 89D8                    		mov	eax, ebx
   380 000001E8 C1E007                  		shl	eax, 7 ; * 128
   381 000001EB B050                    		mov	al, 80
   382 000001ED F6E4                    		mul	ah
   383 000001EF 66AB                    		stosw
   384 000001F1 43                      		inc	ebx
   385 000001F2 E2F2                    		loop	MakeOfs
   386                                  
   387                                  		; ---------------------------------------------------
   388                                  
   389                                  		; 25/01/2025
   390                                  		; 21/12/2024
   391                                  		;;; ---------------------------
   392 000001F4 E8B84F0000              		call	drawplayingscreen
   393                                  		;;; ---------------------------
   394                                  
   395                                  		; 15/02/2025
   396 000001F9 B003                    		mov	al, 3	; 0 = max, 31 = min
   397 000001FB E87A3A0000              		call	SetMasterVolume
   398                                  
   399                                  		;;; ---------------------------
   400                                  
   401                                  		; 16/02/2025		
   402                                  replay:
   403                                  		; 17/02/2025
   404                                  		; 15/02/2025
   405                                  		; 13/01/2025 (interpolation procs for non-VRA AC97 codecs)
   406                                  		;;;; --------------------------
   407                                  		;mov	byte [interpolation], 0
   408 00000200 B002                    		mov	al, 2
   409 00000202 3805[84AB0000]          		cmp	[audio_hardware], al ; 2
   410 00000208 7241                    		jb	short .direct ; SB16	; 17/02/2025
   411                                  		; AC97
   412                                  		;mov	dword [get_sound_data], get_ac97_sound_data ; (**)
   413                                  .chk_frq:
   414 0000020A 813D[BCBB0000]80BB-     		cmp	dword [mp3_sample_rate], 48000 ; 48 kHZ
   414 00000212 0000               
   415 00000214 7212                    		jb	short .chk_vra
   416 00000216 803D[C8BB0000]02        		cmp	byte [mp3_num_channels], 2
   417                                  		; 17/02/2025
   418                                  		;jb	short .convert	; mono (8bit or 16bit)
   419                                  		
   420                                  		;cmp	byte [mp3_bytes_per_sample], al ; 2
   421                                  		;jnb	short .direct ; 16bit, stereo
   422                                  		; 17/02/2025
   423 0000021D 732C                    		jnb	short .direct
   424                                  .convert:
   425                                  		; 8bit m/s or 16bit mono
   426 0000021F C605[98AB0000]01        		mov	byte [interpolation], 1 ; convert (to 16 bit stereo)
   427 00000226 EB42                    		jmp	short .indirect ; 21/01/2025
   428                                  .chk_vra:
   429 00000228 A2[98AB0000]            		mov	[interpolation], al ; 2 = interpolation
   430 0000022D 803D[85AB0000]01        		cmp	byte [vra], 1
   431 00000234 7234                    		jb	short .indirect ; 21/01/2025
   432 00000236 FE0D[98AB0000]          		dec	byte [interpolation] ; 1 = convert (to 16 bit stereo)
   433 0000023C 803D[C8BB0000]02        		cmp	byte [mp3_num_channels], 2
   434 00000243 7225                    		jb	short .indirect ; 8 bit ; 21/01/2025
   435                                  		; 17/02/2025
   436                                  		;cmp	byte [mp3_bytes_per_sample], al ; 2
   437                                  		;jb	short .indirect ; mono ; 21/01/2025	
   438                                  
   439                                  		; 14/01/2025
   440 00000245 FE0D[98AB0000]          		dec	byte [interpolation] ; 0
   441                                  .direct:
   442                                  		;;;; --------------------------
   443                                  
   444                                  		;;; 
   445                                  		; 20/10/2024
   446                                  		;call	detect_enable_audio_device
   447                                  		;jc	.exit
   448 0000024B E81A390000              		call	audio_system_init
   449                                  		;jc	.exit
   450 00000250 7207                    		jc	short .exit@ ; 15/01/2025
   451                                  		;;;
   452                                  
   453 00000252 E83D3A0000                              call	mp3_cast_to_speaker
   454                                  
   455                                  		; 15/02/2025
   456                                  		; 13/01/2025
   457 00000257 EB1D                    		jmp	short .decode_done
   458                                  
   459                                  		; 15/01/2025
   460                                  .exit@:
   461                                  		; Disable audio device
   462                                  		sys	_audio, 0C00h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00000259 BB000C0000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 0000025E B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00000263 CD40                <1>  int 40h
   463                                  		;jmp	ExitProcess
   464                                  		; 27/01/2025
   465 00000265 E920380000              		jmp	ExitProcess@
   466                                  
   467                                  .indirect:
   468 0000026A E8433B0000              		call	audio_system_init_x
   469 0000026F 72E8                    		jc	short .exit@ ; 15/01/2025
   470 00000271 E83C3D0000              		call	mp3_cast_to_speaker_x
   471                                  		;;;; --------------------------
   472                                  
   473                                  		; 15/02/2025
   474                                  		; 22/01/2025
   475                                  .decode_done:
   476                                  		; set video mode to 03h again (clear screen)
   477                                  		;mov	ax, 03h
   478                                  		;int	31h ; TRDOS 386 - Video interrupt
   479                                  		; 25/01/2025
   480 00000276 E8164C0000              		call	set_text_mode
   481                                  .exit:
   482                                  		;push   0               ; uExitCode
   483                                                  ;call   ExitProcess
   484                                  		;jmp	ExitProcess
   485                                  		; 27/01/2025
   486 0000027B E90A380000              		jmp	ExitProcess@
   487                                  
   488                                  		; 13/02/2025
   489                                  		; 25/01/2025
   490                                  trdos386_error:
   491                                  		sys	_msg, trdos386_err_msg, 255, 0Eh
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00000280 BB[C5AA0000]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00000285 B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 0000028A BA0E000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 0000028F B823000000          <1>  mov eax, %1
   112                              <1> 
   113 00000294 CD40                <1>  int 40h
   492 00000296 BBFFFFFFFF              		mov	ebx, -1	; (not necessary) -error exit example-
   493 0000029B E9EA370000              		jmp	ExitProcess@
   494                                  
   495                                  
   496                                  ; =============== S U B R O U T I N E =======================================
   497                                  
   498                                  bswap_eax:
   499 000002A0 86E0                                    xchg    al, ah
   500 000002A2 C1C810                                  ror     eax, 10h
   501 000002A5 86E0                                    xchg    al, ah
   502 000002A7 C3                                      retn
   503                                  
   504                                  ; =============== S U B R O U T I N E =======================================
   505                                  
   506                                  mp3_recollect_bits:
   507 000002A8 F7C601000000                            test    esi, 1
   508 000002AE 7510                                    jnz     short .odd
   509 000002B0 668B2E                                  mov     bp, [esi]
   510 000002B3 83C602                                  add     esi, 2
   511 000002B6 66C1CD08                                ror     bp, 8
   512 000002BA C1E510                                  shl     ebp, 16
   513 000002BD B500                                    mov     ch, 0
   514 000002BF C3                                      retn
   515                                  
   516                                  .odd:
   517 000002C0 0FB62E                                  movzx   ebp, byte [esi]
   518 000002C3 46                                      inc     esi
   519 000002C4 C1E510                                  shl     ebp, 16
   520 000002C7 668B2E                                  mov     bp, [esi]
   521 000002CA 83C602                                  add     esi, 2
   522 000002CD 66C1CD08                                ror     bp, 8
   523 000002D1 C1E508                                  shl     ebp, 8
   524 000002D4 B508                                    mov     ch, 8
   525 000002D6 C3                                      retn
   526                                  
   527                                  ; =============== S U B R O U T I N E =======================================
   528                                  
   529                                  
   530                                  mp3_get_bits:
   531 000002D7 89E8                                    mov     eax, ebp
   532 000002D9 D3E5                                    shl     ebp, cl
   533 000002DB D3C0                                    rol     eax, cl
   534 000002DD 31E8                                    xor     eax, ebp
   535 000002DF 28CD                                    sub     ch, cl
   536 000002E1 7801                                    js      short mp3_collect_more
   537 000002E3 C3                                      retn
   538                                  
   539                                  mp3_collect_more:
   540 000002E4 88E9                                    mov     cl, ch
   541 000002E6 80C510                                  add     ch, 10h
   542 000002E9 D3C5                                    rol     ebp, cl
   543 000002EB 668B2E                                  mov     bp, [esi]
   544 000002EE 83C602                                  add     esi, 2
   545 000002F1 66C1CD08                                ror     bp, 8
   546 000002F5 D3CD                                    ror     ebp, cl
   547 000002F7 C3                                      retn
   548                                  
   549                                  ; =============== S U B R O U T I N E =======================================
   550                                  
   551                                  
   552                                  mp3_uncollect_bits:
   553 000002F8 83EE02                                  sub     esi, 2
   554 000002FB C0ED03                                  shr     ch, 3
   555 000002FE 0FB6CD                                  movzx   ecx, ch
   556 00000301 29CE                                    sub     esi, ecx
   557 00000303 C3                                      retn
   558                                  
   559                                  ; =============== S U B R O U T I N E =======================================
   560                                  
   561                                  
   562                                  mp3_search_get_header:
   563                                  		; 16/02/2025
   564 00000304 C705[9C120100]0000-                     mov	dword [mp3_extra_bytes], 0
   564 0000030C 0000               
   565                                  
   566                                  .retry_header:
   567 0000030E 833D[98120100]04                        cmp	dword [mp3_src_remain], 4
   568 00000315 0F8276010000                            jb      .fail_no_header
   569 0000031B 803EFF                                  cmp     byte [esi], 0FFh
   570 0000031E 7516                                    jnz     short .bad_header
   571 00000320 8A4601                                  mov     al, [esi+1]
   572 00000323 24E6                                    and     al, 0E6h
   573 00000325 3CE2                                    cmp     al, 0E2h
   574 00000327 750D                                    jnz     short .bad_header
   575 00000329 8A4602                                  mov     al, [esi+2]
   576 0000032C 3CF0                                    cmp     al, 0F0h
   577 0000032E 7306                                    jnb     short .bad_header
   578 00000330 240C                                    and     al, 0Ch
   579 00000332 3C0C                                    cmp     al, 0Ch
   580 00000334 7519                                    jnz     short .good_header
   581                                  
   582                                  .bad_header:
   583 00000336 46                                      inc	esi
   584 00000337 FF0D[98120100]                          dec	dword [mp3_src_remain]
   585 0000033D FF05[9C120100]                          inc	dword [mp3_extra_bytes]
   586 00000343 C705[9CBB0000]-                         mov	dword [main_data_pool_wr_ptr], main_data_pool_start
   586 00000349 [9CAB0000]         
   587 0000034D EBBF                                    jmp	short .retry_header
   588                                  
   589                                  .good_header:
   590 0000034F 8B06                                    mov	eax, [esi]
   591 00000351 E84AFFFFFF                              call	bswap_eax
   592 00000356 A3[ACBB0000]                            mov	[mp3_hdr_32bit_header], eax
   593 0000035B C705[E0BB0000]0000-                     mov	dword [mp3_hdr_flag_lsf], 0
   593 00000363 0000               
   594 00000365 C705[B4BB0000]0000-                     mov	dword [mp3_hdr_flag_mpeg25], 0
   594 0000036D 0000               
   595 0000036F C705[A8120100]0200-                     mov	dword [mp3_nb_granules], 2
   595 00000377 0000               
   596 00000379 A900000800                              test	eax, 80000h
   597 0000037E 7525                                    jnz	short .lsf_this
   598 00000380 C705[E0BB0000]0100-                     mov	dword [mp3_hdr_flag_lsf], 1
   598 00000388 0000               
   599 0000038A C705[A8120100]0100-                     mov	dword [mp3_nb_granules], 1
   599 00000392 0000               
   600 00000394 A900001000                              test	eax, 100000h
   601 00000399 750A                                    jnz	short .lsf_this
   602 0000039B C705[B4BB0000]0100-                     mov	dword [mp3_hdr_flag_mpeg25], 1
   602 000003A3 0000               
   603                                  
   604                                  .lsf_this:
   605 000003A5 C1E80A                                  shr     eax, 10
   606 000003A8 83E003                                  and     eax, 3
   607 000003AB 8B0D[E0BB0000]                          mov     ecx, [mp3_hdr_flag_lsf]
   608 000003B1 030D[B4BB0000]                          add     ecx, [mp3_hdr_flag_mpeg25]
   609 000003B7 0FB79400[AC950000]                      movzx   edx, word [mp3_freq_tab+eax*2]
   610 000003BF D3EA                                    shr     edx, cl
   611 000003C1 8D0C49                                  lea     ecx, [ecx+ecx*2]
   612 000003C4 01C8                                    add     eax, ecx
   613 000003C6 A3[C0BB0000]                            mov     [mp3_hdr_sample_rate_index], eax
   614 000003CB 8915[BCBB0000]                          mov     [mp3_sample_rate], edx
   615                                  
   616                                  		; 15/02/2025
   617 000003D1 A1[ACBB0000]                            mov     eax, [mp3_hdr_32bit_header]
   618 000003D6 C1E810                                  shr     eax, 10h
   619 000003D9 F7D0                                    not     eax
   620 000003DB 83E001                                  and     eax, 1
   621 000003DE A3[B0BB0000]                            mov     [mp3_hdr_flag_crc], eax
   622 000003E3 A1[ACBB0000]                            mov     eax, [mp3_hdr_32bit_header]
   623 000003E8 C1E809                                  shr     eax, 9
   624 000003EB 83E001                                  and     eax, 1
   625 000003EE A3[B8BB0000]                            mov     [mp3_hdr_flag_padding], eax
   626 000003F3 A1[ACBB0000]                            mov     eax, [mp3_hdr_32bit_header]
   627 000003F8 C1E80C                                  shr     eax, 12
   628 000003FB 83E00F                                  and     eax, 0Fh
   629 000003FE 7512                                    jnz     short .not_free_format
   630 00000400 E8ED310000                              call    mp3_detect_free_format_block_size
   631 00000405 0F822BFFFFFF                            jb      .bad_header
   632 0000040B A1[EC110100]                            mov     eax, [mp3_free_format_frame_size]
   633 00000410 EB34                                    jmp     short .this_frame_size_plus_padding
   634                                  
   635                                  .not_free_format:
   636 00000412 8B15[E0BB0000]                          mov     edx, [mp3_hdr_flag_lsf]
   637 00000418 C1E204                                  shl     edx, 4
   638 0000041B 01D0                                    add     eax, edx
   639 0000041D 0FB78400[6C950000]                      movzx   eax, word [mp3_bitrate_tab+eax*2] ; kbit/s
   640 00000425 69C0E8030000                            imul    eax, 1000       ; bit/s
   641 0000042B A3[C4BB0000]                            mov     [mp3_bit_rate], eax
   642 00000430 69C090000000                            imul    eax, 144        ; 144=90h=8*18
   643 00000436 31D2                                    xor     edx, edx
   644 00000438 F735[BCBB0000]                          div     dword [mp3_sample_rate]
   645 0000043E 8B0D[E0BB0000]                          mov     ecx, [mp3_hdr_flag_lsf]
   646 00000444 D3E8                                    shr     eax, cl
   647                                  
   648                                  .this_frame_size_plus_padding:
   649 00000446 0305[B8BB0000]                          add     eax, [mp3_hdr_flag_padding]
   650 0000044C A3[A4BB0000]                            mov     [mp3_src_frame_size], eax
   651 00000451 01F0                                    add     eax, esi
   652 00000453 A3[A8BB0000]                            mov     [mp3_src_frame_end], eax
   653 00000458 A1[ACBB0000]                            mov     eax, [mp3_hdr_32bit_header]
   654 0000045D C1E806                                  shr     eax, 6
   655 00000460 83E003                                  and     eax, 3
   656 00000463 A3[D8BB0000]                            mov     [mp3_hdr_mode_val], eax
   657 00000468 BA01000000                              mov     edx, 1
   658                                  
   659 0000046D 3C03                    		cmp     al, 3
   660 0000046F 7401                                    jz      short .this_channels
   661                                  
   662                                                  ;mov    edx, 2
   663                                  		; 10/01/2025
   664 00000471 42                      		inc	edx
   665                                  .this_channels:
   666 00000472 8915[C8BB0000]                          mov	[mp3_num_channels], edx
   667                                   		
   668                                  		; 15/02/2025
   669                                  .allow_stereo:
   670                                  		;imul	edx, [mp3_bytes_per_sample]
   671                                                  ; 17/02/2025
   672 00000478 D1E2                    		shl	edx, 1 ; [mp3_bytes_per_sample] = 2 
   673 0000047A 8915[84120100]          		mov     [mp3_samples_dst_step], edx
   674 00000480 A1[ACBB0000]                            mov     eax, [mp3_hdr_32bit_header]
   675 00000485 C1E804                                  shr     eax, 4
   676 00000488 83E003                                  and     eax, 3
   677 0000048B A3[DCBB0000]                            mov     [mp3_hdr_mode_ext], eax
   678                                  		; 16/02/2025
   679                                  .no_rdtsc_supported@:
   680                                  		;clc
   681 00000490 C3                                      retn
   682                                  
   683                                  .fail_no_header:
   684                                  		; 16/02/2025
   685                                  .no_rdtsc_supported@@:
   686 00000491 C705[A4BB0000]0000-                     mov     dword [mp3_src_frame_size], 0
   686 00000499 0000               
   687 0000049B F9                                      stc
   688 0000049C C3                                      retn
   689                                  
   690                                  
   691                                  ; =============== S U B R O U T I N E =======================================
   692                                  
   693                                  
   694                                  mp3_bitstream_read_header_extra:
   695                                                  ; 16/02/2025
   696                                  
   697                                  .no_rdtsc_supported:
   698 0000049D 833D[B0BB0000]00                        cmp     dword [mp3_hdr_flag_crc], 0
   699 000004A4 7422                                    jz      short .without_crc
   700 000004A6 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 16
   701 000004A8 C1E510                                  shl     ebp, 10h
   702 000004AB C1C010                                  rol     eax, 10h
   703 000004AE 31E8                                    xor     eax, ebp
   704 000004B0 80ED10                                  sub     ch, 10h
   705 000004B3 7913                                    jns     short .without_crc
   706 000004B5 88E9                                    mov     cl, ch          ; mp3mac_collect_more
   707 000004B7 80C510                                  add     ch, 10h
   708 000004BA D3C5                                    rol     ebp, cl
   709 000004BC 668B2E                                  mov     bp, [esi]
   710 000004BF 83C602                                  add     esi, 2
   711 000004C2 66C1CD08                                ror     bp, 8
   712 000004C6 D3CD                                    ror     ebp, cl
   713                                  
   714                                  .without_crc:
   715 000004C8 833D[E0BB0000]00                        cmp     dword [mp3_hdr_flag_lsf], 0
   716 000004CF 745B                                    jz      short .pre_lsf_zero
   717 000004D1 C705[A4120100]0900-                     mov     dword [mp3_num_compress_bits], 9
   717 000004D9 0000               
   718 000004DB 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 8
   719 000004DD C1E508                                  shl     ebp, 8
   720 000004E0 C1C008                                  rol     eax, 8
   721 000004E3 31E8                                    xor     eax, ebp
   722 000004E5 80ED08                                  sub     ch, 8
   723 000004E8 7913                                    jns     short .without_crc@
   724 000004EA 88E9                                    mov     cl, ch
   725 000004EC 80C510                                  add     ch, 10h
   726 000004EF D3C5                                    rol     ebp, cl
   727 000004F1 668B2E                                  mov     bp, [esi]
   728 000004F4 83C602                                  add     esi, 2
   729 000004F7 66C1CD08                                ror     bp, 8
   730 000004FB D3CD                                    ror     ebp, cl
   731                                  
   732                                  .without_crc@:
   733 000004FD A3[A0120100]                            mov     [mp3_main_data_begin], eax
   734 00000502 8A0D[C8BB0000]                          mov     cl, byte [mp3_num_channels]
   735 00000508 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
   736 0000050A D3E5                                    shl     ebp, cl
   737 0000050C D3C0                                    rol     eax, cl
   738 0000050E 31E8                                    xor     eax, ebp
   739 00000510 28CD                                    sub     ch, cl
   740 00000512 7913                                    jns     short .without_crc@@
   741 00000514 88E9                                    mov     cl, ch
   742 00000516 80C510                                  add     ch, 10h
   743 00000519 D3C5                                    rol     ebp, cl
   744 0000051B 668B2E                                  mov     bp, [esi]
   745 0000051E 83C602                                  add     esi, 2
   746 00000521 66C1CD08                                ror     bp, 8
   747 00000525 D3CD                                    ror     ebp, cl
   748                                  
   749                                  .without_crc@@:
   750 00000527 E9A1000000                              jmp     .pre_lsf_done
   751                                  
   752                                  .pre_lsf_zero:
   753 0000052C C705[A4120100]0400-                     mov     dword [mp3_num_compress_bits], 4
   753 00000534 0000               
   754 00000536 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 9
   755 00000538 C1E509                                  shl     ebp, 9
   756 0000053B C1C009                                  rol     eax, 9
   757 0000053E 31E8                                    xor     eax, ebp
   758 00000540 80ED09                                  sub     ch, 9
   759 00000543 7913                                    jns     short .without_crc@@@
   760 00000545 88E9                                    mov     cl, ch
   761 00000547 80C510                                  add     ch, 10h
   762 0000054A D3C5                                    rol     ebp, cl
   763 0000054C 668B2E                                  mov     bp, [esi]
   764 0000054F 83C602                                  add     esi, 2
   765 00000552 66C1CD08                                ror     bp, 8
   766 00000556 D3CD                                    ror     ebp, cl
   767                                  
   768                                  .without_crc@@@:
   769 00000558 A3[A0120100]                            mov     [mp3_main_data_begin], eax
   770 0000055D 8A0D[C8BB0000]                          mov     cl, byte [mp3_num_channels]
   771 00000563 D0E1                                    shl     cl, 1           ; 1,2 --> 2,4
   772 00000565 80F107                                  xor     cl, 7           ;     --> 5,3
   773 00000568 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
   774 0000056A D3E5                                    shl     ebp, cl
   775 0000056C D3C0                                    rol     eax, cl
   776 0000056E 31E8                                    xor     eax, ebp
   777 00000570 28CD                                    sub     ch, cl
   778 00000572 7913                                    jns     short .without_crc@@@@
   779 00000574 88E9                                    mov     cl, ch
   780 00000576 80C510                                  add     ch, 10h
   781 00000579 D3C5                                    rol     ebp, cl
   782 0000057B 668B2E                                  mov     bp, [esi]
   783 0000057E 83C602                                  add     esi, 2
   784 00000581 66C1CD08                                ror     bp, 8
   785 00000585 D3CD                                    ror     ebp, cl
   786                                  
   787                                  .without_crc@@@@:
   788 00000587 8B15[C8BB0000]                          mov     edx, [mp3_num_channels]
   789 0000058D BB[AC120100]                            mov     ebx, mp3_granules
   790                                  
   791                                  .pre_channel_lop:
   792 00000592 C7432800000000                          mov     dword [ebx+40], 0 ; [ebx+$mp3gr_scfsi]
   793 00000599 81C3A0090000                            add     ebx, 2464       ; $mp3gr_entrysiz
   794 0000059F 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 4
   795 000005A1 C1E504                                  shl     ebp, 4
   796 000005A4 C1C004                                  rol     eax, 4
   797 000005A7 31E8                                    xor     eax, ebp
   798 000005A9 80ED04                                  sub     ch, 4
   799 000005AC 7913                                    jns     short .without_crc@@@@@
   800 000005AE 88E9                                    mov     cl, ch
   801 000005B0 80C510                                  add     ch, 10h
   802 000005B3 D3C5                                    rol     ebp, cl
   803 000005B5 668B2E                                  mov     bp, [esi]
   804 000005B8 83C602                                  add     esi, 2
   805 000005BB 66C1CD08                                ror     bp, 8
   806 000005BF D3CD                                    ror     ebp, cl
   807                                  
   808                                  .without_crc@@@@@:
   809 000005C1 894328                                  mov     [ebx+28h], eax  ; [ebx+$mp3gr_scfsi]
   810 000005C4 81C3A0090000                            add     ebx, 2464       ; $mp3gr_entrysiz
   811 000005CA 4A                                      dec     edx
   812 000005CB 75C5                                    jnz     short .pre_channel_lop
   813                                  
   814                                  .pre_lsf_done:
   815 000005CD A1[A8120100]            		mov     eax, [mp3_nb_granules]
   816 000005D2 6BC012                  		imul    eax, 12h
   817 000005D5 A3[D4BB0000]            		mov     [mp3_nb_frames], eax
   818                                  		; 14/01/2025
   819                                  		;mov	eax, [mp3_nb_frames]
   820                                  		; 16/02/2025
   821 000005DA 0FAF05[C8BB0000]        		imul    eax, [mp3_num_channels]
   822                                  		;imul   eax, [mp3_bytes_per_sample]
   823                                  		;shl    eax, 5
   824                                  		; 17/02/2025
   825                                  		; [mp3_bytes_per_sample] = 2
   826 000005E1 C1E006                  		shl	eax, 6 ; (eax*2) << 5
   827                                     		; 15/02/2025
   828 000005E4 A3[80120100]            		mov	[mp3_samples_output_size], eax
   829                                  		
   830                                  		; 16/02/2025
   831                                  
   832                                  .no_rdtsc_supported@:
   833 000005E9 C3                                      retn
   834                                  
   835                                  
   836                                  ; =============== S U B R O U T I N E =======================================
   837                                  
   838                                  
   839                                  mp3_bitstream_read_granules:
   840                                  		; 16/02/2025
   841                                  
   842                                  .no_rdtsc_supported:
   843 000005EA 8925[A03D0500]                          mov	[_@@saved_sp], esp
   844 000005F0 C705[A43D0500]0000-                     mov	dword [mp3_main_data_siz], 0
   844 000005F8 0000               
   845 000005FA C705[8C120100]0000-                     mov	dword [mp3_curr_granule], 0
   845 00000602 0000               
   846 00000604 BB[AC120100]                            mov	ebx, mp3_granules
   847                                  
   848                                  .hdr_granule_lop:
   849 00000609 53                                      push    ebx
   850 0000060A C705[88120100]0000-                     mov     dword [mp3_curr_channel], 0
   850 00000612 0000               
   851                                  
   852                                  .hdr_channel_lop:
   853 00000614 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 12
   854 00000616 C1E50C                                  shl     ebp, 12
   855 00000619 C1C00C                                  rol     eax, 12
   856 0000061C 31E8                                    xor     eax, ebp
   857 0000061E 80ED0C                                  sub     ch, 12
   858 00000621 7913                                    jns     short .without_crc
   859 00000623 88E9                                    mov     cl, ch
   860 00000625 80C510                                  add     ch, 16
   861 00000628 D3C5                                    rol     ebp, cl
   862 0000062A 668B2E                                  mov     bp, [esi]
   863 0000062D 83C602                                  add     esi, 2
   864 00000630 66C1CD08                                ror     bp, 8
   865 00000634 D3CD                                    ror     ebp, cl
   866                                  
   867                                  .without_crc:
   868 00000636 8B15[A43D0500]                          mov     edx, [mp3_main_data_siz]
   869 0000063C 8903                                    mov     [ebx], eax
   870 0000063E 895304                                  mov     [ebx+4], edx
   871 00000641 01D0                                    add     eax, edx
   872 00000643 894308                                  mov     [ebx+8], eax
   873 00000646 A3[A43D0500]                            mov     [mp3_main_data_siz], eax
   874 0000064B 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 9
   875 0000064D C1E509                                  shl     ebp, 9
   876 00000650 C1C009                                  rol     eax, 9
   877 00000653 31E8                                    xor     eax, ebp
   878 00000655 80ED09                                  sub     ch, 9
   879 00000658 7913                                    jns     short .without_crc@
   880 0000065A 88E9                                    mov     cl, ch
   881 0000065C 80C510                                  add     ch, 10h
   882 0000065F D3C5                                    rol     ebp, cl
   883 00000661 668B2E                                  mov     bp, [esi]
   884 00000664 83C602                                  add     esi, 2
   885 00000667 66C1CD08                                ror     bp, 8
   886 0000066B D3CD                                    ror     ebp, cl
   887                                  
   888                                  .without_crc@:
   889 0000066D 89430C                                  mov     [ebx+12], eax   ; [ebx+$mp3gr_big_values]
   890 00000670 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 8
   891 00000672 C1E508                                  shl     ebp, 8
   892 00000675 C1C008                                  rol     eax, 8
   893 00000678 31E8                                    xor     eax, ebp
   894 0000067A 80ED08                                  sub     ch, 8
   895 0000067D 7913                                    jns     short .without_crc@@
   896 0000067F 88E9                                    mov     cl, ch
   897 00000681 80C510                                  add     ch, 10h
   898 00000684 D3C5                                    rol     ebp, cl
   899 00000686 668B2E                                  mov     bp, [esi]
   900 00000689 83C602                                  add     esi, 2
   901 0000068C 66C1CD08                                ror     bp, 8
   902 00000690 D3CD                                    ror     ebp, cl
   903                                  
   904                                  .without_crc@@:
   905 00000692 05BE000000                              add	eax, 190        ; 400-210
   906 00000697 833D[D8BB0000]01                        cmp	dword [mp3_hdr_mode_val], 1
   907 0000069E 750F                                    jnz	short .not_ms_stereo
   908 000006A0 F705[DCBB0000]0200-                     test	dword [mp3_hdr_mode_ext], 2
   908 000006A8 0000               
   909 000006AA 7403                                    jz	short .not_ms_stereo
   910 000006AC 83E802                                  sub	eax, 2
   911                                  
   912                                  .not_ms_stereo:
   913 000006AF 894310                                  mov     [ebx+16], eax   ; [ebx+$mp3gr_global_gain]
   914 000006B2 8A0D[A4120100]                          mov     cl, byte [mp3_num_compress_bits]
   915 000006B8 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
   916 000006BA D3E5                                    shl     ebp, cl
   917 000006BC D3C0                                    rol     eax, cl
   918 000006BE 31E8                                    xor     eax, ebp
   919 000006C0 28CD                                    sub     ch, cl
   920 000006C2 7913                                    jns     short .without_crc@@@
   921 000006C4 88E9                                    mov     cl, ch
   922 000006C6 80C510                                  add     ch, 10h
   923 000006C9 D3C5                                    rol     ebp, cl
   924 000006CB 668B2E                                  mov     bp, [esi]
   925 000006CE 83C602                                  add     esi, 2
   926 000006D1 66C1CD08                                ror     bp, 8
   927 000006D5 D3CD                                    ror     ebp, cl
   928                                  
   929                                  .without_crc@@@:
   930 000006D7 894314                                  mov     [ebx+20], eax   ; [ebx+$mp3gr_scalefac_compress]
   931 000006DA FECD                                    dec     ch              ; mp3mac_get_bit_to_cy
   932                                                                          ; dec mp3_colNN
   933 000006DC D1E5                                    shl     ebp, 1          ; shl mp3_col32,1 ; cy=data
   934 000006DE 0F834F010000                            jnb     .no_blocksplit
   935 000006E4 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 2
   936 000006E6 C1E502                                  shl     ebp, 2
   937 000006E9 C1C002                                  rol     eax, 2
   938 000006EC 31E8                                    xor     eax, ebp
   939 000006EE 80ED02                                  sub     ch, 2
   940 000006F1 7913                                    jns     short .without_crc@@@@
   941 000006F3 88E9                                    mov     cl, ch
   942 000006F5 80C510                                  add     ch, 10h
   943 000006F8 D3C5                                    rol     ebp, cl
   944 000006FA 668B2E                                  mov     bp, [esi]
   945 000006FD 83C602                                  add     esi, 2
   946 00000700 66C1CD08                                ror     bp, 8
   947 00000704 D3CD                                    ror     ebp, cl
   948                                  
   949                                  .without_crc@@@@:
   950 00000706 83F800                                  cmp     eax, 0
   951 00000709 0F8463030000                            jz      .error
   952 0000070F 89432C                                  mov     [ebx+44], eax   ; [ebx+$mp3gr_block_type]
   953 00000712 83F802                                  cmp     eax, 2
   954 00000715 B812000000                              mov     eax, 18         ; 36/2 ; region_size (default)
   955 0000071A 741C                                    jz      short .this_region_size
   956 0000071C 833D[C0BB0000]02                        cmp     dword [mp3_hdr_sample_rate_index], 2
   957 00000723 7613                                    jbe     short .this_region_size
   958 00000725 B81B000000                              mov     eax, 27         ; 54/2 ; region_size
   959 0000072A 833D[C0BB0000]08                        cmp     dword [mp3_hdr_sample_rate_index], 8
   960 00000731 7505                                    jnz     short .this_region_size
   961 00000733 B836000000                              mov     eax, 54         ; 108/2 ; region_size (for rate=8)
   962                                  
   963                                  .this_region_size:
   964 00000738 894350                                  mov     [ebx+80], eax   ; [ebx+$mp3gr_region_size+0*4]
   965 0000073B C7435420010000                          mov     dword [ebx+84], 288 ; [ebx+$mp3gr_region_size+1*4],576/2
   966 00000742 C7435820010000                          mov     dword [ebx+88], 288 ; [ebx+$mp3gr_region_size+2*4],576/2
   967 00000749 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 1
   968 0000074B D1E5                                    shl     ebp, 1
   969 0000074D D1C0                                    rol     eax, 1
   970 0000074F 31E8                                    xor     eax, ebp
   971 00000751 80ED01                                  sub     ch, 1
   972 00000754 7913                                    jns     short .without_crc@@@@@
   973 00000756 88E9                                    mov     cl, ch
   974 00000758 80C510                                  add     ch, 10h
   975 0000075B D3C5                                    rol     ebp, cl
   976 0000075D 668B2E                                  mov     bp, [esi]
   977 00000760 83C602                                  add     esi, 2
   978 00000763 66C1CD08                                ror     bp, 8
   979 00000767 D3CD                                    ror     ebp, cl
   980                                  
   981                                  .without_crc@@@@@:
   982 00000769 894330                                  mov     [ebx+48], eax   ; [ebx+$mp3gr_switch_point]
   983 0000076C 89E8                                    mov     eax, ebp        ; IRP nn,0,1 ; only 0..1 for blocksplit
   984 0000076E C1E505                                  shl     ebp, 5          ; mp3mac_get_n_bits 5
   985 00000771 C1C005                                  rol     eax, 5
   986 00000774 31E8                                    xor     eax, ebp
   987 00000776 80ED05                                  sub     ch, 5
   988 00000779 7913                                    jns     short .without_crc@@@@@@
   989 0000077B 88E9                                    mov     cl, ch
   990 0000077D 80C510                                  add     ch, 10h
   991 00000780 D3C5                                    rol     ebp, cl
   992 00000782 668B2E                                  mov     bp, [esi]
   993 00000785 83C602                                  add     esi, 2
   994 00000788 66C1CD08                                ror     bp, 8
   995 0000078C D3CD                                    ror     ebp, cl
   996                                  
   997                                  .without_crc@@@@@@:
   998 0000078E 894338                                  mov     [ebx+56], eax   ; [ebx+$mp3gr_table_select+nn*4] ; nn=0
   999 00000791 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 5
  1000 00000793 C1E505                                  shl     ebp, 5
  1001 00000796 C1C005                                  rol     eax, 5
  1002 00000799 31E8                                    xor     eax, ebp
  1003 0000079B 80ED05                                  sub     ch, 5
  1004 0000079E 7913                                    jns     short .without_crc_@@@@
  1005 000007A0 88E9                                    mov     cl, ch
  1006 000007A2 80C510                                  add     ch, 10h
  1007 000007A5 D3C5                                    rol     ebp, cl
  1008 000007A7 668B2E                                  mov     bp, [esi]
  1009 000007AA 83C602                                  add     esi, 2
  1010 000007AD 66C1CD08                                ror     bp, 8
  1011 000007B1 D3CD                                    ror     ebp, cl
  1012                                  
  1013                                  .without_crc_@@@@:
  1014 000007B3 89433C                                  mov     [ebx+60], eax   ; [ebx+$mp3gr_table_select+nn*4] ; nn=1
  1015 000007B6 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 5
  1016 000007B8 C1E503                                  shl     ebp, 3          ; IRP nn,0,1,2
  1017 000007BB C1C003                                  rol     eax, 3          ; mp3mac_get_n_bits 3
  1018 000007BE 31E8                                    xor     eax, ebp
  1019 000007C0 80ED03                                  sub     ch, 3
  1020 000007C3 7913                                    jns     short .without_crc_@@@@@
  1021 000007C5 88E9                                    mov     cl, ch
  1022 000007C7 80C510                                  add     ch, 10h
  1023 000007CA D3C5                                    rol     ebp, cl
  1024 000007CC 668B2E                                  mov     bp, [esi]
  1025 000007CF 83C602                                  add     esi, 2
  1026 000007D2 66C1CD08                                ror     bp, 8
  1027 000007D6 D3CD                                    ror     ebp, cl
  1028                                  
  1029                                  .without_crc_@@@@@:
  1030 000007D8 C1E003                                  shl     eax, 3
  1031 000007DB 894344                                  mov     [ebx+68], eax   ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=0
  1032 000007DE 89E8                                    mov     eax, ebp
  1033 000007E0 C1E503                                  shl     ebp, 3
  1034 000007E3 C1C003                                  rol     eax, 3
  1035 000007E6 31E8                                    xor     eax, ebp
  1036 000007E8 80ED03                                  sub     ch, 3
  1037 000007EB 7913                                    jns     short .without_crc_@@@@@@
  1038 000007ED 88E9                                    mov     cl, ch
  1039 000007EF 80C510                                  add     ch, 10h
  1040 000007F2 D3C5                                    rol     ebp, cl
  1041 000007F4 668B2E                                  mov     bp, [esi]
  1042 000007F7 83C602                                  add     esi, 2
  1043 000007FA 66C1CD08                                ror     bp, 8
  1044 000007FE D3CD                                    ror     ebp, cl
  1045                                  
  1046                                  .without_crc_@@@@@@:
  1047 00000800 C1E003                                  shl     eax, 3
  1048 00000803 894348                                  mov     [ebx+72], eax   ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=1
  1049 00000806 89E8                                    mov     eax, ebp
  1050 00000808 C1E503                                  shl     ebp, 3
  1051 0000080B C1C003                                  rol     eax, 3
  1052 0000080E 31E8                                    xor     eax, ebp
  1053 00000810 80ED03                                  sub     ch, 3
  1054 00000813 7913                                    jns     short .without_crc_@@@@@@@
  1055 00000815 88E9                                    mov     cl, ch
  1056 00000817 80C510                                  add     ch, 10h
  1057 0000081A D3C5                                    rol     ebp, cl
  1058 0000081C 668B2E                                  mov     bp, [esi]
  1059 0000081F 83C602                                  add     esi, 2
  1060 00000822 66C1CD08                                ror     bp, 8
  1061 00000826 D3CD                                    ror     ebp, cl
  1062                                  
  1063                                  .without_crc_@@@@@@@:
  1064 00000828 C1E003                                  shl     eax, 3
  1065 0000082B 89434C                                  mov     [ebx+76], eax   ; [ebx+$mp3gr_subblock_gain+nn*4] ; nn=2
  1066 0000082E E910010000                              jmp     .blocksplit_done
  1067                                  
  1068                                  .no_blocksplit:                       
  1069 00000833 C7432C00000000                          mov     dword [ebx+44], 0 ; [ebx+$mp3gr_block_type]
  1070 0000083A C7433000000000                          mov     dword [ebx+48], 0 ; [ebx+$mp3gr_switch_point]
  1071 00000841 89E8                                    mov     eax, ebp        ; IRP nn,0,1,2 ; range 0..2 when non-blocksplit
  1072 00000843 C1E505                                  shl     ebp, 5          ; mp3mac_get_n_bits 5
  1073 00000846 C1C005                                  rol     eax, 5
  1074 00000849 31E8                                    xor     eax, ebp
  1075 0000084B 80ED05                                  sub     ch, 5
  1076 0000084E 7913                                    jns     short .@_without_crc
  1077 00000850 88E9                                    mov     cl, ch
  1078 00000852 80C510                                  add     ch, 10h
  1079 00000855 D3C5                                    rol     ebp, cl
  1080 00000857 668B2E                                  mov     bp, [esi]
  1081 0000085A 83C602                                  add     esi, 2
  1082 0000085D 66C1CD08                                ror     bp, 8
  1083 00000861 D3CD                                    ror     ebp, cl
  1084                                  
  1085                                  .@_without_crc:
  1086 00000863 894338                                  mov     [ebx+56], eax   ; [ebx+$mp3gr_table_select+nn*4] ; nn=0
  1087 00000866 89E8                                    mov     eax, ebp
  1088 00000868 C1E505                                  shl     ebp, 5
  1089 0000086B C1C005                                  rol     eax, 5
  1090 0000086E 31E8                                    xor     eax, ebp
  1091 00000870 80ED05                                  sub     ch, 5
  1092 00000873 7913                                    jns     short .@_without_crc_@
  1093 00000875 88E9                                    mov     cl, ch
  1094 00000877 80C510                                  add     ch, 10h
  1095 0000087A D3C5                                    rol     ebp, cl
  1096 0000087C 668B2E                                  mov     bp, [esi]
  1097 0000087F 83C602                                  add     esi, 2
  1098 00000882 66C1CD08                                ror     bp, 8
  1099 00000886 D3CD                                    ror     ebp, cl
  1100                                  
  1101                                  .@_without_crc_@:
  1102 00000888 89433C                                  mov     [ebx+60], eax   ; [ebx+$mp3gr_table_select+nn*4] ; nn=1
  1103 0000088B 89E8                                    mov     eax, ebp
  1104 0000088D C1E505                                  shl     ebp, 5
  1105 00000890 C1C005                                  rol     eax, 5
  1106 00000893 31E8                                    xor     eax, ebp
  1107 00000895 80ED05                                  sub     ch, 5
  1108 00000898 7913                                    jns     short .@_without_crc_@@
  1109 0000089A 88E9                                    mov     cl, ch
  1110 0000089C 80C510                                  add     ch, 10h
  1111 0000089F D3C5                                    rol     ebp, cl
  1112 000008A1 668B2E                                  mov     bp, [esi]
  1113 000008A4 83C602                                  add     esi, 2
  1114 000008A7 66C1CD08                                ror     bp, 8
  1115 000008AB D3CD                                    ror     ebp, cl
  1116                                  
  1117                                  .@_without_crc_@@:
  1118 000008AD 894340                                  mov     [ebx+64], eax   ; [ebx+$mp3gr_table_select+nn*4] ; nn=2
  1119 000008B0 89E8                                    mov     eax, ebp
  1120 000008B2 C1E504                                  shl     ebp, 4
  1121 000008B5 C1C004                                  rol     eax, 4
  1122 000008B8 31E8                                    xor     eax, ebp
  1123 000008BA 80ED04                                  sub     ch, 4
  1124 000008BD 7913                                    jns     short .@_without_crc@@@
  1125 000008BF 88E9                                    mov     cl, ch
  1126 000008C1 80C510                                  add     ch, 10h
  1127 000008C4 D3C5                                    rol     ebp, cl
  1128 000008C6 668B2E                                  mov     bp, [esi]
  1129 000008C9 83C602                                  add     esi, 2
  1130 000008CC 66C1CD08                                ror     bp, 8
  1131 000008D0 D3CD                                    ror     ebp, cl
  1132                                  
  1133                                  .@_without_crc@@@:
  1134 000008D2 40                                      inc     eax
  1135 000008D3 A3[983D0500]                            mov     [_@@region_address0], eax
  1136 000008D8 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 3
  1137 000008DA C1E503                                  shl     ebp, 3
  1138 000008DD C1C003                                  rol     eax, 3
  1139 000008E0 31E8                                    xor     eax, ebp
  1140 000008E2 80ED03                                  sub     ch, 3
  1141 000008E5 7913                                    jns     short .@_without_crc@@@@
  1142 000008E7 88E9                                    mov     cl, ch
  1143 000008E9 80C510                                  add     ch, 10h
  1144 000008EC D3C5                                    rol     ebp, cl
  1145 000008EE 668B2E                                  mov     bp, [esi]
  1146 000008F1 83C602                                  add     esi, 2
  1147 000008F4 66C1CD08                                ror     bp, 8
  1148 000008F8 D3CD                                    ror     ebp, cl
  1149                                  
  1150                                  .@_without_crc@@@@:
  1151 000008FA 40                                      inc     eax
  1152 000008FB 0305[983D0500]                          add     eax, [_@@region_address0]
  1153 00000901 A3[9C3D0500]                            mov     [_@@region_address1], eax
  1154 00000906 A1[C0BB0000]                            mov     eax, [mp3_hdr_sample_rate_index]
  1155 0000090B C1E005                                  shl     eax, 5
  1156 0000090E 0305[983D0500]                          add     eax, [_@@region_address0]
  1157 00000914 0FB78400[ACF50100]                      movzx   eax, word [mp3_band_index_long+eax*2]
  1158 0000091C D1E8                                    shr     eax, 1
  1159 0000091E 894350                                  mov     [ebx+80], eax   ; [ebx+$mp3gr_region_size+0*4]
  1160 00000921 A1[C0BB0000]                            mov     eax, [mp3_hdr_sample_rate_index]
  1161 00000926 C1E005                                  shl     eax, 5
  1162 00000929 0305[9C3D0500]                          add     eax, [_@@region_address1]
  1163 0000092F 0FB78400[ACF50100]                      movzx   eax, word [mp3_band_index_long+eax*2]
  1164 00000937 D1E8                                    shr     eax, 1
  1165 00000939 894354                                  mov     [ebx+84], eax   ; [ebx+$mp3gr_region_size+1*4]
  1166 0000093C C7435820010000                          mov     dword [ebx+88], 288 ; [ebx+$mp3gr_region_size+2*4],576/2
  1167                                  
  1168                                  .blocksplit_done:
  1169 00000943 8D7B50                                  lea     edi, [ebx+80]   ; [ebx+$mp3gr_region_size+0]
  1170 00000946 31D2                                    xor     edx, edx
  1171 00000948 B103                                    mov     cl, 3
  1172                                  
  1173                                  .trunc_region_size_lop:
  1174 0000094A 8B07                                    mov     eax, [edi]
  1175 0000094C 3B430C                                  cmp     eax, [ebx+12]   ; [ebx+$mp3gr_big_values]
  1176 0000094F 7603                                    jbe     short .trunc_region_size_this
  1177 00000951 8B430C                                  mov     eax, [ebx+12]
  1178                                  
  1179                                  .trunc_region_size_this:
  1180 00000954 29D0                                    sub     eax, edx
  1181 00000956 8907                                    mov     [edi], eax
  1182 00000958 01C2                                    add     edx, eax
  1183 0000095A 83C704                                  add     edi, 4
  1184 0000095D FEC9                                    dec     cl
  1185 0000095F 75E9                                    jnz     short .trunc_region_size_lop
  1186 00000961 C7431C0D000000                          mov     dword [ebx+28], 13 ; [ebx+$mp3gr_short_start]
  1187 00000968 C7432016000000                          mov     dword [ebx+32], 22 ; [ebx+$mp3gr_long_end]
  1188 0000096F 837B2C02                                cmp     dword [ebx+44], 2 ; [ebx+$mp3gr_block_type]
  1189 00000973 7549                                    jnz     short .these_band_indices
  1190 00000975 C7431C00000000                          mov     dword [ebx+28], 0 ; [ebx+$mp3gr_short_start]
  1191 0000097C C7432000000000                          mov     dword [ebx+32], 0 ; [ebx+$mp3gr_long_end]
  1192 00000983 837B3000                                cmp     dword [ebx+48], 0 ; [ebx+$mp3gr_switch_point]
  1193 00000987 7435                                    jz      short .these_band_indices
  1194 00000989 C7431C02000000                          mov     dword [ebx+28], 2 ; [ebx+$mp3gr_short_start]
  1195 00000990 C7432004000000                          mov     dword [ebx+32], 4 ; [ebx+$mp3gr_long_end]
  1196 00000997 833D[C0BB0000]08                        cmp     dword [mp3_hdr_sample_rate_index], 8
  1197 0000099E 741E                                    jz      short .these_band_indices
  1198 000009A0 833D[C0BB0000]02                        cmp     dword [mp3_hdr_sample_rate_index], 2
  1199 000009A7 C7431C03000000                          mov     dword [ebx+28], 3 ; [ebx+$mp3gr_short_start]
  1200 000009AE C7432008000000                          mov     dword [ebx+32], 8 ; [ebx+$mp3gr_long_end]
  1201 000009B5 7607                                    jbe     short .these_band_indices
  1202 000009B7 C7432006000000                          mov     dword [ebx+32], 6 ; [ebx+$mp3gr_long_end]
  1203                                  
  1204                                  .these_band_indices:
  1205 000009BE 31C0                                    xor     eax, eax
  1206 000009C0 833D[E0BB0000]00                        cmp     dword [mp3_hdr_flag_lsf], 0
  1207 000009C7 7520                                    jnz     short .no_preflag
  1208 000009C9 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 1
  1209 000009CB D1E5                                    shl     ebp, 1
  1210 000009CD D1C0                                    rol     eax, 1
  1211 000009CF 31E8                                    xor     eax, ebp
  1212 000009D1 80ED01                                  sub     ch, 1
  1213 000009D4 7913                                    jns     short .no_preflag
  1214 000009D6 88E9                                    mov     cl, ch
  1215 000009D8 80C510                                  add     ch, 10h
  1216 000009DB D3C5                                    rol     ebp, cl
  1217 000009DD 668B2E                                  mov     bp, [esi]
  1218 000009E0 83C602                                  add     esi, 2
  1219 000009E3 66C1CD08                                ror     bp, 8
  1220 000009E7 D3CD                                    ror     ebp, cl
  1221                                  
  1222                                  .no_preflag:
  1223 000009E9 894318                                  mov     [ebx+24], eax   ; [ebx+$mp3gr_preflag]
  1224 000009EC 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 1
  1225 000009EE D1E5                                    shl     ebp, 1
  1226 000009F0 D1C0                                    rol     eax, 1
  1227 000009F2 31E8                                    xor     eax, ebp
  1228 000009F4 80ED01                                  sub     ch, 1
  1229 000009F7 7913                                    jns     short .@_without_crc@@@@@
  1230 000009F9 88E9                                    mov     cl, ch
  1231 000009FB 80C510                                  add     ch, 10h
  1232 000009FE D3C5                                    rol     ebp, cl
  1233 00000A00 668B2E                                  mov     bp, [esi]
  1234 00000A03 83C602                                  add     esi, 2
  1235 00000A06 66C1CD08                                ror     bp, 8
  1236 00000A0A D3CD                                    ror     ebp, cl
  1237                                  
  1238                                  .@_without_crc@@@@@:
  1239 00000A0C 40                                      inc     eax
  1240 00000A0D 894334                                  mov     [ebx+52], eax   ; [ebx+$mp3gr_scalefac_scale]
  1241 00000A10 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits 1
  1242 00000A12 D1E5                                    shl     ebp, 1
  1243 00000A14 D1C0                                    rol     eax, 1
  1244 00000A16 31E8                                    xor     eax, ebp
  1245 00000A18 80ED01                                  sub     ch, 1
  1246 00000A1B 7913                                    jns     short .@_without_crc@@@@@@
  1247 00000A1D 88E9                                    mov     cl, ch
  1248 00000A1F 80C510                                  add     ch, 10h
  1249 00000A22 D3C5                                    rol     ebp, cl
  1250 00000A24 668B2E                                  mov     bp, [esi]
  1251 00000A27 83C602                                  add     esi, 2
  1252 00000A2A 66C1CD08                                ror     bp, 8
  1253 00000A2E D3CD                                    ror     ebp, cl
  1254                                  
  1255                                  .@_without_crc@@@@@@: 
  1256 00000A30 83C010                                  add     eax, 10h        ; table 10h..11h (quad_vlc)
  1257 00000A33 894324                                  mov     [ebx+36], eax   ; [ebx+$mp3gr_count1table_select]
  1258 00000A36 81C340130000                            add     ebx, 4928       ; $mp3gr_entrysiz*2
  1259 00000A3C FF05[88120100]                          inc     dword [mp3_curr_channel]
  1260 00000A42 A1[88120100]                            mov     eax, [mp3_curr_channel]
  1261 00000A47 3B05[C8BB0000]          		cmp     eax, [mp3_num_channels]
  1262 00000A4D 0F82C1FBFFFF                            jb      .hdr_channel_lop
  1263 00000A53 5B                                      pop     ebx
  1264 00000A54 81C3A0090000                            add     ebx, 2464       ; $mp3gr_entrysiz
  1265 00000A5A FF05[8C120100]                          inc     dword [mp3_curr_granule]
  1266 00000A60 A1[8C120100]                            mov     eax, [mp3_curr_granule]
  1267 00000A65 3B05[A8120100]                          cmp     eax, [mp3_nb_granules]
  1268 00000A6B 0F8298FBFFFF                            jb      .hdr_granule_lop
  1269                                  	
  1270                                  		; 16/02/2025
  1271                                  .no_rdtsc_supported@:
  1272                                                  ;clc
  1273 00000A71 C3                                      retn
  1274                                  
  1275                                  .error:
  1276                                  		; 16/02/2025
  1277                                  .no_rdtsc_supported@@:
  1278 00000A72 8B25[A03D0500]                          mov     esp, [_@@saved_sp]
  1279 00000A78 F9                                      stc
  1280 00000A79 C3                                      retn
  1281                                  
  1282                                  
  1283                                  ; =============== S U B R O U T I N E =======================================
  1284                                  
  1285                                  
  1286                                  mp3_bitstream_append_to_main_data_pool:
  1287                                                	; 16/02/2025
  1288                                  
  1289                                  .no_rdtsc_supported:
  1290 00000A7A 8B0D[A8BB0000]                          mov     ecx, [mp3_src_frame_end]
  1291 00000A80 29F1                                    sub     ecx, esi
  1292 00000A82 0F8221020000                            jb      fatalunexpected
  1293 00000A88 8B3D[9CBB0000]                          mov     edi, [main_data_pool_wr_ptr]
  1294 00000A8E 8D040F                                  lea     eax, [edi+ecx]
  1295 00000A91 3D[9CBB0000]                            cmp     eax, main_data_pool_wr_ptr
  1296 00000A96 7616                                    jbe     short .pool_inrange
  1297 00000A98 51                                      push    ecx
  1298 00000A99 56                                      push    esi
  1299 00000A9A 8DB700FEFFFF                            lea     esi, [edi-200h]
  1300 00000AA0 BF[9CAB0000]                            mov     edi, main_data_pool_start
  1301 00000AA5 B980000000                              mov     ecx, 128
  1302 00000AAA F3A5                                    rep movsd
  1303 00000AAC 5E                                      pop     esi
  1304 00000AAD 59                                      pop     ecx
  1305                                  
  1306                                  .pool_inrange:
  1307 00000AAE 89F8                                    mov     eax, edi
  1308 00000AB0 2B05[A0120100]                          sub     eax, [mp3_main_data_begin]
  1309 00000AB6 F3A4                                    rep movsb
  1310 00000AB8 893D[9CBB0000]                          mov     [main_data_pool_wr_ptr], edi
  1311 00000ABE 3D[9CAB0000]                            cmp     eax, main_data_pool_start
  1312 00000AC3 7811                                    js      short .below_pool_start
  1313 00000AC5 A3[94120100]                            mov     [mp3_bitstream_start], eax
  1314                                                  ; 22/10/2024
  1315                                  		;mov    eax, 0
  1316 00000ACA 8B35[94120100]                          mov     esi, [mp3_bitstream_start] ; mp3mac_bitstream_set_position
  1317                                                  ;mov    cl, al
  1318                                                  ;shr    eax, 3
  1319                                                  ;and    cl, 7
  1320                                                  ;add    esi, eax
  1321 00000AD0 E8D3F7FFFF                              call    mp3_recollect_bits
  1322                                                  ;mov    eax, ebp        ; mp3mac_get_n_bits cl
  1323                                                  ;shl    ebp, cl
  1324                                                  ;rol    eax, cl
  1325                                                  ;xor    eax, ebp
  1326                                                  ;sub    ch, cl
  1327                                                  ;jns    short .cont
  1328                                                  ;mov    cl, ch          ; mp3mac_collect_more
  1329                                                  ;add    ch, 10h
  1330                                                  ;rol    ebp, cl
  1331                                                  ;mov    bp, [esi]
  1332                                                  ;add    esi, 2
  1333                                                  ;ror    bp, 8
  1334                                                  ;ror    ebp, cl
  1335                                  
  1336                                  .cont:
  1337                                  		; 16/02/2025
  1338                                  		; clc ; not needed
  1339                                  
  1340                                  .no_rdtsc_supported@:
  1341 00000AD5 C3                                      retn
  1342                                  
  1343                                  .below_pool_start:
  1344 00000AD6 C705[80120100]0000-                     mov     dword [mp3_samples_output_size], 0
  1344 00000ADE 0000               
  1345 00000AE0 EBF3                                    jmp     short .cont
  1346                                  
  1347                                  
  1348                                  ; =============== S U B R O U T I N E =======================================
  1349                                  
  1350                                  
  1351                                  mp3_bitstream_read_scalefacs:
  1352                                  		; 16/02/2025
  1353                                  
  1354                                  .no_rdtsc_supported:
  1355 00000AE2 8D7B70                                  lea     edi, [ebx+112]  ; [ebx+$mp3gr_scale_factors]
  1356 00000AE5 833D[E0BB0000]00                        cmp     dword [mp3_hdr_flag_lsf], 0
  1357 00000AEC 0F850D010000                            jnz     .body_lsf_nonzero
  1358 00000AF2 8B4314                                  mov     eax, [ebx+20]   ; [ebx+$mp3gr_scalefac_compress]
  1359 00000AF5 668B9400[E4970000]                      mov     dx, [mp3_slen_table+eax*2] ; slen[0,1]
  1360 00000AFD 837B2C02                                cmp     dword [ebx+44], 2 ; [ebx+$mp3gr_block_type]
  1361 00000B01 757F                                    jnz     short .body_lsf_zero_non_type2
  1362 00000B03 53                                      push    ebx
  1363 00000B04 B012                                    mov     al, 18
  1364 00000B06 2A4330                                  sub     al, [ebx+48]    ; [ebx+$mp3gr_switch_point]
  1365 00000B09 88C3                                    mov     bl, al          ; @@get_bl_scalefacs_with_dl_bits 0
  1366 00000B0B 80FA00                                  cmp     dl, 0
  1367 00000B0E 7428                                    jz      short .quickfill
  1368                                  
  1369                                  .scalefac_get_lop:
  1370 00000B10 88D1                                    mov     cl, dl          ; LSB of edx, slen[i]
  1371 00000B12 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
  1372 00000B14 D3E5                                    shl     ebp, cl
  1373 00000B16 D3C0                                    rol     eax, cl
  1374 00000B18 31E8                                    xor     eax, ebp
  1375 00000B1A 28CD                                    sub     ch, cl
  1376 00000B1C 7913                                    jns     short .cont@
  1377 00000B1E 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1378 00000B20 80C510                                  add     ch, 10h
  1379 00000B23 D3C5                                    rol     ebp, cl
  1380 00000B25 668B2E                                  mov     bp, [esi]
  1381 00000B28 83C602                                  add     esi, 2
  1382 00000B2B 66C1CD08                                ror     bp, 8
  1383 00000B2F D3CD                                    ror     ebp, cl
  1384                                  
  1385                                  .cont@:
  1386 00000B31 AA                                      stosb
  1387 00000B32 FECB                                    dec     bl
  1388 00000B34 75DA                                    jnz     short .scalefac_get_lop
  1389 00000B36 EB09                                    jmp     short .skip_quickfill
  1390                                  
  1391                                  .quickfill:
  1392 00000B38 51                                      push    ecx
  1393 00000B39 0FB6CB                                  movzx   ecx, bl
  1394 00000B3C B000                                    mov     al, 0           ; NO_INTENSITY_FLAG
  1395 00000B3E F3AA                                    rep stosb
  1396 00000B40 59                                      pop     ecx
  1397                                  
  1398                                  .skip_quickfill:
  1399 00000B41 C1EA08                                  shr     edx, 8
  1400 00000B44 B312                                    mov     bl, 18
  1401 00000B46 80FA00                                  cmp     dl, 0           ; @@get_bl_scalefacs_with_dl_bits 0
  1402 00000B49 7428                                    jz      short .quickfill@
  1403                                  
  1404                                  .scalefac_get_lop@:
  1405 00000B4B 88D1                                    mov     cl, dl
  1406 00000B4D 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
  1407 00000B4F D3E5                                    shl     ebp, cl
  1408 00000B51 D3C0                                    rol     eax, cl
  1409 00000B53 31E8                                    xor     eax, ebp
  1410 00000B55 28CD                                    sub     ch, cl
  1411 00000B57 7913                                    jns     short .cont@@
  1412 00000B59 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1413 00000B5B 80C510                                  add     ch, 10h
  1414 00000B5E D3C5                                    rol     ebp, cl
  1415 00000B60 668B2E                                  mov     bp, [esi]
  1416 00000B63 83C602                                  add     esi, 2
  1417 00000B66 66C1CD08                                ror     bp, 8
  1418 00000B6A D3CD                                    ror     ebp, cl
  1419                                  
  1420                                  .cont@@:
  1421 00000B6C AA                                      stosb
  1422 00000B6D FECB                                    dec     bl
  1423 00000B6F 75DA                                    jnz     short .scalefac_get_lop@
  1424 00000B71 EB09                                    jmp     short .skip_quickfill@
  1425                                  
  1426                                  .quickfill@:
  1427 00000B73 51                                      push    ecx
  1428 00000B74 0FB6CB                                  movzx   ecx, bl
  1429 00000B77 B000                                    mov     al, 0
  1430 00000B79 F3AA                                    rep stosb
  1431 00000B7B 59                                      pop     ecx
  1432                                  
  1433                                  .skip_quickfill@:
  1434 00000B7C 5B                                      pop     ebx
  1435 00000B7D E914010000                              jmp     .body_lsf_zeropad
  1436                                  
  1437                                  .body_lsf_zero_non_type2:
  1438 00000B82 53                                      push    ebx
  1439 00000B83 C1CA08                                  ror     edx, 8
  1440 00000B86 88D6                                    mov     dh, dl          ; slen[0,1,2,3] = slen[0,0,1,1]
  1441 00000B88 C1C210                                  rol     edx, 16
  1442 00000B8B 88F2                                    mov     dl, dh
  1443 00000B8D 8A4328                                  mov     al, [ebx+40]    ; [ebx+$mp3gr_scfsi]
  1444 00000B90 C0E004                                  shl     al, 4           ; move to upper 4bit
  1445 00000B93 A2[A83D0500]                            mov     byte [_@@scfsi], al
  1446 00000B98 BB06050505                              mov     ebx, 5050506h   ; num[0..3]
  1447                                  
  1448                                  .body_lsf_zero_non_type2_lop:
  1449 00000B9D D025[A83D0500]                          shl     byte [_@@scfsi], 1
  1450 00000BA3 7238                                    jb      short .body_lsf_zero_non_type2_copy
  1451 00000BA5 80FA00                                  cmp     dl, 0           ; @@get_bl_scalefacs_with_dl_bits 0
  1452 00000BA8 7428                                    jz      short .quickfill@@
  1453                                  
  1454                                  .scalefac_get_lop@@:
  1455 00000BAA 88D1                                    mov     cl, dl
  1456 00000BAC 89E8                                    mov     eax, ebp
  1457 00000BAE D3E5                                    shl     ebp, cl
  1458 00000BB0 D3C0                                    rol     eax, cl
  1459 00000BB2 31E8                                    xor     eax, ebp
  1460 00000BB4 28CD                                    sub     ch, cl
  1461 00000BB6 7913                                    jns     short .cont@@@
  1462 00000BB8 88E9                                    mov     cl, ch
  1463 00000BBA 80C510                                  add     ch, 10h
  1464 00000BBD D3C5                                    rol     ebp, cl
  1465 00000BBF 668B2E                                  mov     bp, [esi]
  1466 00000BC2 83C602                                  add     esi, 2
  1467 00000BC5 66C1CD08                                ror     bp, 8
  1468 00000BC9 D3CD                                    ror     ebp, cl
  1469                                  
  1470                                  .cont@@@:
  1471 00000BCB AA                                      stosb
  1472 00000BCC FECB                                    dec     bl
  1473 00000BCE 75DA                                    jnz     short .scalefac_get_lop@@
  1474 00000BD0 EB09                                    jmp     short .skip_quickfill@@
  1475                                  
  1476                                  .quickfill@@:
  1477 00000BD2 51                                      push    ecx
  1478 00000BD3 0FB6CB                                  movzx   ecx, bl
  1479 00000BD6 B000                                    mov     al, 0
  1480 00000BD8 F3AA                                    rep stosb
  1481 00000BDA 59                                      pop     ecx
  1482                                  
  1483                                  .skip_quickfill@@:
  1484 00000BDB EB11                                    jmp     short .body_lsf_zero_non_type2_next
  1485                                  
  1486                                  .body_lsf_zero_non_type2_copy:
  1487 00000BDD 51                                      push    ecx
  1488 00000BDE 89F0                                    mov     eax, esi
  1489 00000BE0 0FB6CB                                  movzx   ecx, bl         ; copy
  1490 00000BE3 8DB760F6FFFF                            lea     esi, [edi-2464] ; [edi-$mp3gr_entrysiz] ; src=granule[0] ; from
  1491 00000BE9 F3A4                                    rep movsb               ; prev
  1492 00000BEB 89C6                                    mov     esi, eax
  1493 00000BED 59                                      pop     ecx
  1494                                  
  1495                                  .body_lsf_zero_non_type2_next:
  1496 00000BEE C1EA08                                  shr     edx, 8          ; dl=next slen
  1497 00000BF1 C1EB08                                  shr     ebx, 8          ; bl=next numfacs
  1498 00000BF4 75A7                                    jnz     short .body_lsf_zero_non_type2_lop
  1499 00000BF6 5B                                      pop     ebx
  1500 00000BF7 B000                                    mov     al, 0
  1501 00000BF9 AA                                      stosb
  1502 00000BFA E9A9000000                              jmp     .body_lsf_done
  1503                                  
  1504                                  .body_lsf_nonzero:
  1505 00000BFF 8B5314                                  mov     edx, [ebx+14h]  ; [ebx+$mp3gr_scalefac_compress]
  1506 00000C02 F705[DCBB0000]0100-                     test    dword [mp3_hdr_mode_ext], 1 ; MODE_EXT_I_STEREO
  1506 00000C0A 0000               
  1507 00000C0C 740F                                    jz      short .normal_scalefac
  1508 00000C0E 833D[88120100]00                        cmp     dword [mp3_curr_channel], 0
  1509 00000C15 7406                                    jz      short .normal_scalefac
  1510 00000C17 81C200020000                            add     edx, 512        ; for 2nd channel of intensity_stereo
  1511                                  
  1512                                  .normal_scalefac:
  1513 00000C1D 8A04D5[9D1D0500]                        mov     al, [(mp3_lsf_sf_expand_exploded_table+5)+edx*8]
  1514 00000C24 084318                                  or      [ebx+24], al    ; [ebx+$mp3gr_preflag]
  1515 00000C27 53                                      push    ebx
  1516 00000C28 0FB604D5[9C1D0500]                      movzx   eax, byte [(mp3_lsf_sf_expand_exploded_table+4)+edx*8]
  1517 00000C30 837B2C02                                cmp     dword [ebx+44], 2 ;  [ebx+$mp3gr_block_type]
  1518 00000C34 7507                                    jnz     short .this_tindex1
  1519 00000C36 8B5B30                                  mov     ebx, [ebx+48]   ; [ebx+$mp3gr_switch_point]
  1520 00000C39 8D449804                                lea     eax, [eax+ebx*4+4]
  1521                                  
  1522                                  .this_tindex1:
  1523 00000C3D 8B98[04980000]                          mov     ebx, [mp3_lsf_nsf_table+eax]
  1524 00000C43 8B14D5[981D0500]                        mov     edx, dword [mp3_lsf_sf_expand_exploded_table+edx*8]
  1525                                  
  1526                                  .scalefax_outer_lop:
  1527 00000C4A 80FA00                                  cmp     dl, 0           ; @@get_bl_scalefacs_with_dl_bits 1
  1528 00000C4D 7435                                    jz      short .@quickfil
  1529                                  
  1530                                  .@scalefac_get_lop:
  1531 00000C4F 88D1                                    mov     cl, dl
  1532 00000C51 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
  1533 00000C53 D3E5                                    shl     ebp, cl
  1534 00000C55 D3C0                                    rol     eax, cl
  1535 00000C57 31E8                                    xor     eax, ebp
  1536 00000C59 28CD                                    sub     ch, cl
  1537 00000C5B 7913                                    jns     short .cont
  1538 00000C5D 88E9                                    mov     cl, ch
  1539 00000C5F 80C510                                  add     ch, 10h
  1540 00000C62 D3C5                                    rol     ebp, cl
  1541 00000C64 668B2E                                  mov     bp, [esi]
  1542 00000C67 83C602                                  add     esi, 2
  1543 00000C6A 66C1CD08                                ror     bp, 8
  1544 00000C6E D3CD                                    ror     ebp, cl
  1545                                  
  1546                                  .cont:
  1547 00000C70 88D1                                    mov     cl, dl          ; numbits
  1548 00000C72 88C4                                    mov     ah, al
  1549 00000C74 FEC4                                    inc     ah              ; val+1
  1550 00000C76 D2EC                                    shr     ah, cl          ; bit0=is.max.value
  1551 00000C78 C0E407                                  shl     ah, 7           ; bit7=is.max.value
  1552 00000C7B 08E0                                    or      al, ah          ; apply NO_INTENSITY_FLAG
  1553 00000C7D AA                                      stosb
  1554 00000C7E FECB                                    dec     bl
  1555 00000C80 75CD                                    jnz     short .@scalefac_get_lop
  1556 00000C82 EB09                                    jmp     short .@skip_quickfill
  1557                                  
  1558                                  .@quickfil:
  1559 00000C84 51                                      push    ecx
  1560 00000C85 0FB6CB                                  movzx   ecx, bl
  1561 00000C88 B080                                    mov     al, 80h
  1562 00000C8A F3AA                                    rep stosb
  1563 00000C8C 59                                      pop     ecx
  1564                                  
  1565                                  .@skip_quickfill:
  1566 00000C8D C1EA08                                  shr     edx, 8
  1567 00000C90 C1EB08                                  shr     ebx, 8
  1568 00000C93 75B5                                    jnz     short .scalefax_outer_lop
  1569 00000C95 5B                                      pop     ebx
  1570                                  
  1571                                  .body_lsf_zeropad:
  1572 00000C96 89CA                                    mov     edx, ecx
  1573 00000C98 8D8B98000000                            lea     ecx, [ebx+152]  ; [ebx+$mp3gr_scale_factors+40]
  1574 00000C9E 29F9                                    sub     ecx, edi
  1575                                                  ;jb     short fatal_scalefactors
  1576                                  		; 21/10/2024
  1577 00000CA0 7207                    		jb	short fatalunexpected
  1578 00000CA2 B000                                    mov     al, 0
  1579 00000CA4 F3AA                                    rep stosb
  1580 00000CA6 89D1                                    mov     ecx, edx
  1581                                  
  1582                                  .body_lsf_done:
  1583                                  		; 16/02/2025
  1584                                  		; clc ; not needed
  1585                                  
  1586                                  .no_rdtsc_supported@@@:
  1587 00000CA8 C3                                      retn
  1588                                  
  1589                                  		; 21/10/2024
  1590                                  ;fatal_scalefactors:
  1591                                                  ;jmp    fatalunexpected
  1592                                  
  1593                                  ; ---------------------------------------------------------------------------
  1594                                  
  1595                                  		; 21/10/2024
  1596                                  fatalunexpected:                       
  1597 00000CA9 F735[36A20000]                          div	dword [zero]
  1598                                  hang:
  1599 00000CAF EBFE                                    jmp     short hang
  1600                                  
  1601                                  
  1602                                  ; =============== S U B R O U T I N E =======================================
  1603                                  
  1604                                  
  1605                                  mp3_get_exponents_from_scale_factors:
  1606                                  		; 16/02/2025
  1607                                  
  1608                                  .no_rdtsc_supported:
  1609 00000CB1 51                                      push    ecx             ; mp3mac_push_bitstream
  1610 00000CB2 55                                      push    ebp
  1611 00000CB3 56                                      push    esi
  1612 00000CB4 C705[B83D0500]0000-                     mov     dword [_@@rle_point], 0
  1612 00000CBC 0000               
  1613 00000CBE 8A4B34                                  mov     cl, [ebx+52]    ; [ebx+$mp3gr_scalefac_scale]
  1614 00000CC1 BF[2C390100]                            mov     edi, mp3_exponents
  1615 00000CC6 31D2                                    xor     edx, edx
  1616 00000CC8 3B5320                                  cmp     edx, [ebx+32]   ; [ebx+$mp3gr_long_end]
  1617 00000CCB 7345                                    jnb     short .long_done
  1618 00000CCD A1[C0BB0000]                            mov     eax, [mp3_hdr_sample_rate_index]
  1619 00000CD2 6BC016                                  imul    eax, 22
  1620 00000CD5 8DA8[149E0000]                          lea     ebp, [mp3_band_size_long+eax]
  1621 00000CDB 8B4318                                  mov     eax, [ebx+24]   ; [ebx+$mp3gr_preflag]
  1622 00000CDE 6BC016                                  imul    eax, 22
  1623 00000CE1 8DB0[649F0000]                          lea     esi, [mp3_pretab+eax]
  1624                                  
  1625                                  .long_lop:
  1626 00000CE7 0FB6441370                              movzx   eax, byte [ebx+edx+112] ; [ebx+$mp3gr_scale_factors+edx]
  1627 00000CEC 247F                                    and     al, 7Fh         ; strip NO_INTENSITY_FLAG
  1628 00000CEE 020416                                  add     al, [esi+edx]
  1629 00000CF1 D3E0                                    shl     eax, cl
  1630 00000CF3 F7D8                                    neg     eax
  1631 00000CF5 034310                                  add     eax, [ebx+16]   ; [ebx+$mp3gr_global_gain]
  1632 00000CF8 C1E010                                  shl     eax, 16
  1633 00000CFB 8A441500                                mov     al, [ebp+edx+0]
  1634 00000CFF 0305[B83D0500]                          add     eax, [_@@rle_point]
  1635 00000D05 66A3[B83D0500]                          mov     word [_@@rle_point], ax
  1636 00000D0B AB                                      stosd
  1637 00000D0C 42                                      inc     edx
  1638 00000D0D 3B5320                                  cmp     edx, [ebx+32]   ; [ebx+$mp3gr_long_end]
  1639 00000D10 72D5                                    jb      short .long_lop
  1640                                  
  1641                                  .long_done:
  1642 00000D12 8B531C                                  mov     edx, [ebx+28]   ; [ebx+$mp3gr_short_start]
  1643 00000D15 83FA0D                                  cmp     edx, 13
  1644 00000D18 0F83AA000000                            jnb     .skip_shorts
  1645 00000D1E A1[C0BB0000]                            mov     eax, [mp3_hdr_sample_rate_index]
  1646 00000D23 6BC00D                                  imul    eax, 13
  1647 00000D26 8DA8[E49E0000]                          lea     ebp, [mp3_band_size_short+eax]
  1648 00000D2C 8B7320                                  mov     esi, [ebx+32]   ; [ebx+$mp3gr_long_end]
  1649 00000D2F 8B4310                                  mov     eax, [ebx+16]   ; [ebx+$mp3gr_global_gain]
  1650                                                                          ; IRP nn,0,1,2
  1651 00000D32 2B4344                                  sub     eax, [ebx+68]   ; [ebx+$mp3gr_subblock_gain+nn*4]
  1652 00000D35 A3[AC3D0500]                            mov     [_@@gains], eax ; [@@gains+nn*4]
  1653 00000D3A 8B4310                                  mov     eax, [ebx+16]
  1654 00000D3D 2B4348                                  sub     eax, [ebx+72]
  1655 00000D40 A3[B03D0500]                            mov     [_@@gains+4], eax ; [@@gains+nn*4]
  1656 00000D45 8B4310                                  mov     eax, [ebx+16]
  1657 00000D48 2B434C                                  sub     eax, [ebx+76]   ; [ebx+$mp3gr_subblock_gain+nn*4]
  1658 00000D4B A3[B43D0500]                            mov     [_@@gains+8], eax ; [@@gains+nn*4]
  1659                                  
  1660                                  .short_lop:
  1661 00000D50 0FB6443370                              movzx   eax, byte [ebx+esi+112] ; [ebx+$mp3gr_scale_factors+esi]
  1662                                                                          ; IRP nn,0,1,2
  1663 00000D55 247F                                    and     al, 7Fh         ; strip NO_INTENSITY_FLAG
  1664 00000D57 46                                      inc     esi
  1665 00000D58 D3E0                                    shl     eax, cl
  1666 00000D5A F7D8                                    neg     eax
  1667 00000D5C 0305[AC3D0500]                          add     eax, [_@@gains] ; [@@gains+nn*4] ; nn=0
  1668 00000D62 C1E010                                  shl     eax, 16
  1669 00000D65 8A441500                                mov     al, [ebp+edx+0] ; bstab[edx]
  1670 00000D69 0305[B83D0500]                          add     eax, [_@@rle_point]
  1671 00000D6F 66A3[B83D0500]                          mov     word [_@@rle_point], ax
  1672 00000D75 AB                                      stosd                   ; msw=val, lsw=point
  1673 00000D76 0FB6443370                              movzx   eax, byte [ebx+esi+112] ; [ebx+$mp3gr_scalefac_scale]
  1674 00000D7B 247F                                    and     al, 7Fh
  1675 00000D7D 46                                      inc     esi
  1676 00000D7E D3E0                                    shl     eax, cl
  1677 00000D80 F7D8                                    neg     eax
  1678 00000D82 0305[B03D0500]                          add     eax, [_@@gains+4] ; [@@gains+nn*4] ; nn = 1
  1679 00000D88 C1E010                                  shl     eax, 16
  1680 00000D8B 8A441500                                mov     al, [ebp+edx+0]
  1681 00000D8F 0305[B83D0500]                          add     eax, [_@@rle_point]
  1682 00000D95 66A3[B83D0500]                          mov     word [_@@rle_point], ax
  1683 00000D9B AB                                      stosd
  1684 00000D9C 0FB6443370                              movzx   eax, byte [ebx+esi+70h]
  1685 00000DA1 247F                                    and     al, 7Fh
  1686 00000DA3 46                                      inc     esi
  1687 00000DA4 D3E0                                    shl     eax, cl
  1688 00000DA6 F7D8                                    neg     eax
  1689 00000DA8 0305[B43D0500]                          add     eax, [_@@gains+8] ; [@@gains+nn*4] ; nn=2
  1690 00000DAE C1E010                                  shl     eax, 10h
  1691 00000DB1 8A441500                                mov     al, [ebp+edx+0]
  1692 00000DB5 0305[B83D0500]                          add     eax, [_@@rle_point]
  1693 00000DBB 66A3[B83D0500]                          mov     word [_@@rle_point], ax
  1694 00000DC1 AB                                      stosd
  1695 00000DC2 42                                      inc     edx
  1696 00000DC3 83FA0D                                  cmp     edx, 13
  1697 00000DC6 7288                                    jb      short .short_lop
  1698                                  
  1699                                  .skip_shorts:
  1700 00000DC8 5E                                      pop     esi             ; mp3mac_pop_bitstream
  1701 00000DC9 5D                                      pop     ebp
  1702 00000DCA 59                                      pop     ecx
  1703                                  
  1704                                  		; 16/02/2025 
  1705                                  
  1706                                  .no_rdtsc_supported@:
  1707 00000DCB C3                                      retn
  1708                                  
  1709                                  
  1710                                  ; =============== S U B R O U T I N E =======================================
  1711                                  
  1712                                  
  1713                                  mp3_huffman_decode:
  1714                                  		; 16/02/2025
  1715                                  
  1716                                  .no_rdtsc_supported:
  1717 00000DCC 8B4308                                  mov	eax, [ebx+8]    ; [ebx+$mp3gr_part2_3_end]
  1718 00000DCF C1E803                                  shr	eax, 3
  1719 00000DD2 0305[94120100]                          add	eax, [mp3_bitstream_start]
  1720 00000DD8 A3[CC3D0500]                            mov	[_@@coarse_end], eax
  1721 00000DDD 31FF                                    xor	edi, edi
  1722 00000DDF C705[D43D0500]-                         mov	dword [_@@rle_ptr], mp3_exponents
  1722 00000DE5 [2C390100]         
  1723 00000DE9 C705[D03D0500]0000-                     mov	dword [_@rle_point], 0
  1723 00000DF1 0000               
  1724 00000DF3 C705[BC3D0500]0000-                     mov	dword [_@@III], 0  ; i=0
  1724 00000DFB 0000               
  1725                                  
  1726                                  .low_freq_lop_i:
  1727 00000DFD 8B15[BC3D0500]                          mov     edx, [_@@III] ; for i=0 to 2
  1728                                                                          ; low frequencies (called big_values)...
  1729 00000E03 8B449350                                mov     eax, [ebx+edx*4+80] ; [ebx+$mp3gr_region_size+edx*4]
  1730 00000E07 83F800                                  cmp     eax, 0
  1731 00000E0A 0F84D9020000                            jz      .low_freq_next_i
  1732 00000E10 A3[C03D0500]                            mov     [_@@JJJ], eax
  1733 00000E15 8B549338                                mov     edx, [ebx+edx*4+56] ; [ebx+$mp3gr_table_select+edx*4]
  1734                                                                          ; select vlc table
  1735 00000E19 0FB68412[D49D0000]                      movzx   eax, byte [mp3_huff_data+edx*2] ; get huff.table number
  1736 00000E21 83F800                                  cmp     eax, 0          ; huff.table
  1737 00000E24 7528                                    jnz     short .low_freq_nonzero
  1738 00000E26 51                                      push    ecx
  1739 00000E27 57                                      push    edi
  1740 00000E28 8DBCBBA0000000                          lea     edi, [ebx+edi*4+160] ; [ebx+$mp3gr_sb_hybrid+edi*4]
  1741 00000E2F 8B0D[C03D0500]                          mov     ecx, [_@@JJJ]
  1742 00000E35 D1E1                                    shl     ecx, 1
  1743 00000E37 31C0                                    xor     eax, eax        ; when huff.table=0,
  1744                                                                          ; simply set NUM*2 entries to zero
  1745 00000E39 F3AB                                    rep stosd
  1746 00000E3B 5F                                      pop     edi
  1747 00000E3C 59                                      pop     ecx
  1748 00000E3D 033D[C03D0500]                          add     edi, [_@@JJJ] ; raise index accordingly (by num*2)
  1749 00000E43 033D[C03D0500]                          add     edi, [_@@JJJ]
  1750 00000E49 E99B020000                              jmp     .low_freq_next_i
  1751                                  
  1752                                  .low_freq_nonzero:
  1753 00000E4E A3[C83D0500]                            mov     [_@@vlc_table], eax ; =1..15
  1754 00000E53 83F80E                                  cmp     eax, 14         ; only table 14..15 have linbits
  1755 00000E56 0F83FA000000                            jnb     .with_linbits  ; so table 0..13 can use faster code...
  1756                                  
  1757                                  .low_freq_lop_j_small:
  1758 00000E5C 3B35[CC3D0500]                          cmp     esi, [_@@coarse_end] ; loop @@JJJ times..
  1759 00000E62 0F87CF000000                            ja      .small_near_end
  1760                                  
  1761                                  .small_not_end:
  1762 00000E68 3B3D[D03D0500]                          cmp     edi, [_@rle_point] ; @@get_runlength small
  1763 00000E6E 0F8386030000                            jnb     .rle_fetch_next_small
  1764                                  
  1765                                  .rle_back_small:
  1766 00000E74 8B15[C83D0500]                          mov     edx, [_@@vlc_table] ; get huffcode
  1767                                  
  1768                                  .get_child_lop:
  1769 00000E7A 8A0C95[AE3D0100]                        mov     cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode
  1770                                                                          ; in: edx=table, out: eax=data
  1771                                                                          ; bits (table size) (-7..-1)
  1772 00000E81 668B1495[AC3D0100]                      mov     dx, word [huff_tree_buf+edx*4] ; code (child table)
  1773 00000E89 89E8                                    mov     eax, ebp        ; mov eax,mp3_col32 ; peek bitstream
  1774 00000E8B D3E8                                    shr     eax, cl
  1775 00000E8D 01C2                                    add     edx, eax
  1776 00000E8F 8A0C95[AE3D0100]                        mov     cl, [(huff_tree_buf+2)+edx*4] ; bits (of entry)
  1777 00000E96 80F900                                  cmp     cl, 0
  1778 00000E99 7823                                    js      short .got_child
  1779 00000E9B 0FB70495[AC3D0100]                      movzx   eax, word [huff_tree_buf+edx*4] ; return data value
  1780 00000EA3 D3E5                                    shl     ebp, cl         ; shl mp3_col32,cl ; discard cl bits
  1781 00000EA5 28CD                                    sub     ch, cl          ; sub mp3_colNN,cl
  1782 00000EA7 7932                                    jns     short .got_done
  1783 00000EA9 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1784                                                                          ; mov cl,mp3_colNN ; byte ptr [mp3_numbits_collected]
  1785 00000EAB 80C510                                  add     ch, 16          ; byte ptr [mp3_numbits_collected]
  1786 00000EAE D3C5                                    rol     ebp, cl         ; dword ptr [mp3_collected_data]
  1787 00000EB0 668B2E                                  mov     bp, [esi]
  1788 00000EB3 83C602                                  add     esi, 2
  1789 00000EB6 66C1CD08                                ror     bp, 8           ; ror mp3_col16,8 ; endianess
  1790 00000EBA D3CD                                    ror     ebp, cl         ; ror mp3_col32,cl ; dword ptr [mp3_collected_data]
  1791 00000EBC EB1D                                    jmp     short .got_done
  1792                                  
  1793                                  .got_child:
  1794 00000EBE C1E509                                  shl     ebp, 9          ; shl mp3_col32,CHILD_BITS
  1795                                                                          ; discard 7 bits
  1796                                                                          ; (assuming that parents are always 7bit wide)
  1797 00000EC1 80ED09                                  sub     ch, 9
  1798 00000EC4 79B4                                    jns     short .get_child_lop
  1799 00000EC6 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1800 00000EC8 80C510                                  add     ch, 10h
  1801 00000ECB D3C5                                    rol     ebp, cl
  1802 00000ECD 668B2E                                  mov     bp, [esi]
  1803 00000ED0 83C602                                  add     esi, 2
  1804 00000ED3 66C1CD08                                ror     bp, 8
  1805 00000ED7 D3CD                                    ror     ebp, cl
  1806 00000ED9 EB9F                                    jmp     short .get_child_lop
  1807                                  
  1808                                  .got_done:
  1809 00000EDB 50                                      push    eax
  1810 00000EDC C1E804                                  shr     eax, 4          ; x
  1811 00000EDF 7417                                    jz      short .this_sign ; @@getexpval 0 ; @@getexpval macro has_linbits
  1812                                                                          ; eax=0 (without sign) ; when x=0
  1813 00000EE1 8B15[DC3D0500]                          mov     edx, [_@@rle_val_x_40h]
  1814 00000EE7 8B8482[18810400]                        mov     eax, [mp3_expval_table+edx+eax*4]
  1815 00000EEE FECD                                    dec     ch              ; mp3mac_get_bit_to_cy
  1816                                                                          ; ;jnc short @@this_sign
  1817                                                                          ; ;neg  eax
  1818 00000EF0 D1E5                                    shl     ebp, 1          ; dec mp3_colNN ; shl mp3_col32,1 ; cy=data
  1819 00000EF2 19D2                                    sbb     edx, edx        ; cy=0,1 --> 0,FFFFFFFF
  1820 00000EF4 31D0                                    xor     eax, edx        ; invert if cy was 1 ; get sign (negate if sign=1)
  1821 00000EF6 29D0                                    sub     eax, edx        ; add 1 if cy was 1
  1822                                  
  1823                                  .this_sign:
  1824 00000EF8 8984BBA0000000                          mov     [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0]
  1825 00000EFF 58                                      pop     eax
  1826 00000F00 83E00F                                  and     eax, 0Fh        ; y
  1827 00000F03 7417                                    jz      short .this_sign@ ; @@getexpval 0
  1828 00000F05 8B15[DC3D0500]                          mov     edx, [_@@rle_val_x_40h]
  1829 00000F0B 8B8482[18810400]                        mov     eax, [mp3_expval_table+edx+eax*4]
  1830 00000F12 FECD                                    dec     ch
  1831 00000F14 D1E5                                    shl     ebp, 1
  1832 00000F16 19D2                                    sbb     edx, edx
  1833 00000F18 31D0                                    xor     eax, edx
  1834 00000F1A 29D0                                    sub     eax, edx
  1835                                  
  1836                                  .this_sign@:
  1837 00000F1C 8984BBA4000000                          mov     [ebx+edi*4+164], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+4]
  1838 00000F23 83C702                                  add     edi, 2
  1839 00000F26 FF0D[C03D0500]                          dec     dword [_@@JJJ]
  1840 00000F2C 0F852AFFFFFF                            jnz     .low_freq_lop_j_small
  1841 00000F32 E9B2010000                              jmp     .low_freq_next_i
  1842                                  
  1843                                  .small_near_end:
  1844 00000F37 89F0                                    mov     eax, esi        ; mp3mac_bitstream_get_position
  1845 00000F39 2B05[94120100]                          sub     eax, [mp3_bitstream_start]
  1846 00000F3F 0FBED5                                  movsx   edx, ch         ; mp3_colNN
  1847 00000F42 F7DA                                    neg     edx
  1848 00000F44 8D44C2F0                                lea     eax, [edx+eax*8-16]
  1849 00000F48 3B4308                                  cmp     eax, [ebx+8]    ; [ebx+$mp3gr_part2_3_end]
  1850 00000F4B 0F8217FFFFFF                            jb      .small_not_end
  1851 00000F51 E993010000                              jmp     .low_freq_next_i
  1852                                  
  1853                                  .with_linbits:
  1854 00000F56 0FB68412[D59D0000]                      movzx   eax, byte [(mp3_huff_data+1)+edx*2]
  1855 00000F5E A3[C43D0500]                            mov     [_@@linbits], eax
  1856                                  
  1857                                  .low_freq_lop_j:
  1858 00000F63 3B35[CC3D0500]                          cmp     esi, [_@@coarse_end] ; mp3mac_bitstream_get_position
  1859                                                                          ; loop @@JJJ times...
  1860 00000F69 0F870D030000                            ja      .lop_j_near_end
  1861                                  
  1862                                  .small_not_end@:
  1863 00000F6F 3B3D[D03D0500]                          cmp     edi, [_@rle_point] ; @@get_runlength small
  1864 00000F75 0F83AD020000                            jnb     .rle_fetch_next_full
  1865                                  
  1866                                  .rle_back_full:
  1867 00000F7B 8B15[C83D0500]                          mov     edx, [_@@vlc_table] ; get huffcode
  1868                                  
  1869                                  .get_child_lop@:
  1870 00000F81 8A0C95[AE3D0100]                        mov     cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode
  1871                                                                          ; in: edx=table, out: eax=data
  1872                                                                          ; bits (table size) (-7..-1)
  1873 00000F88 668B1495[AC3D0100]                      mov     dx, word [huff_tree_buf+edx*4] ; code (child table)
  1874 00000F90 89E8                                    mov     eax, ebp
  1875 00000F92 D3E8                                    shr     eax, cl
  1876 00000F94 01C2                                    add     edx, eax
  1877 00000F96 8A0C95[AE3D0100]                        mov     cl, [(huff_tree_buf+2)+edx*4] ; bits (of entry)
  1878 00000F9D 80F900                                  cmp     cl, 0
  1879 00000FA0 7823                                    js      short .got_child@
  1880 00000FA2 0FB70495[AC3D0100]                      movzx   eax, word [huff_tree_buf+edx*4] ; return data value
  1881 00000FAA D3E5                                    shl     ebp, cl         ; discard cl bits
  1882 00000FAC 28CD                                    sub     ch, cl
  1883 00000FAE 7932                                    jns     short .got_done@
  1884 00000FB0 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1885 00000FB2 80C510                                  add     ch, 10h
  1886 00000FB5 D3C5                                    rol     ebp, cl
  1887 00000FB7 668B2E                                  mov     bp, [esi]
  1888 00000FBA 83C602                                  add     esi, 2
  1889 00000FBD 66C1CD08                                ror     bp, 8
  1890 00000FC1 D3CD                                    ror     ebp, cl
  1891 00000FC3 EB1D                                    jmp     short .got_done@
  1892                                  
  1893                                  .got_child@:
  1894 00000FC5 C1E509                                  shl     ebp, 9
  1895 00000FC8 80ED09                                  sub     ch, 9
  1896 00000FCB 79B4                                    jns     short .get_child_lop@
  1897 00000FCD 88E9                                    mov     cl, ch
  1898 00000FCF 80C510                                  add     ch, 10h
  1899 00000FD2 D3C5                                    rol     ebp, cl
  1900 00000FD4 668B2E                                  mov     bp, [esi]
  1901 00000FD7 83C602                                  add     esi, 2
  1902 00000FDA 66C1CD08                                ror     bp, 8
  1903 00000FDE D3CD                                    ror     ebp, cl
  1904 00000FE0 EB9F                                    jmp     short .get_child_lop@
  1905                                  
  1906                                  .got_done@:
  1907 00000FE2 50                                      push    eax
  1908 00000FE3 C1E804                                  shr     eax, 4          ; x
  1909 00000FE6 746F                                    jz      short .@this_sign ; @@getexpval 1
  1910 00000FE8 8B15[D83D0500]                          mov     edx, [_@@rle_val]
  1911 00000FEE 83F80F                                  cmp     eax, 15
  1912 00000FF1 7250                                    jb      short .small    ; when x=1..14
  1913 00000FF3 8A0D[C43D0500]                          mov     cl, byte [_@@linbits] ; =0..13 ; when x=15, with linbits
  1914 00000FF9 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl ; value = 0..1FFFh
  1915 00000FFB D3E5                                    shl     ebp, cl         ; mp3mac_collect_more
  1916 00000FFD D3C0                                    rol     eax, cl
  1917 00000FFF 31E8                                    xor     eax, ebp
  1918 00001001 28CD                                    sub     ch, cl
  1919 00001003 7913                                    jns     short .cont
  1920 00001005 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1921 00001007 80C510                                  add     ch, 16
  1922 0000100A D3C5                                    rol     ebp, cl
  1923 0000100C 668B2E                                  mov     bp, [esi]
  1924 0000100F 83C602                                  add     esi, 2
  1925 00001012 66C1CD08                                ror     bp, 8
  1926 00001016 D3CD                                    ror     ebp, cl
  1927                                  
  1928                                  .cont:
  1929 00001018 88D1                                    mov     cl, dl          ; exponent.lsb
  1930 0000101A 80E103                                  and     cl, 3           ; exponent.lsb
  1931 0000101D C1EA02                                  shr     edx, 2          ; exponent.msb
  1932 00001020 8D04853C000000                          lea     eax, [eax*4+60] ; (value+15)*4
  1933 00001027 08C8                                    or      al, cl          ; exponent.lsb+(value+15)*4
  1934 00001029 8A88[ECF70100]                          mov     cl, [mp3_table_4_3_exp+eax]
  1935 0000102F 8B0485[28780200]                        mov     eax, [mp3_table_4_3_value+eax*4]
  1936 00001036 28D1                                    sub     cl, dl          ; sub exponent.msb
  1937 00001038 D3E8                                    shr     eax, cl
  1938 0000103A 80F91F                                  cmp     cl, 31
  1939 0000103D 760E                                    jbe     short .get_sign
  1940 0000103F 31C0                                    xor     eax, eax
  1941 00001041 EB0A                                    jmp     short .get_sign
  1942                                  
  1943                                  .small:
  1944 00001043 C1E206                                  shl     edx, 6          ; shl edx,4+2 ; mul16*4 ; when x<15 aka x=1..14
  1945 00001046 8B8482[18810400]                        mov     eax, [mp3_expval_table+edx+eax*4]
  1946                                  
  1947                                  .get_sign:
  1948 0000104D FECD                                    dec     ch              ; mp3mac_get_bit_to_cy
  1949 0000104F D1E5                                    shl     ebp, 1
  1950 00001051 19D2                                    sbb     edx, edx        ; get sign (negate if sign=1)
  1951 00001053 31D0                                    xor     eax, edx
  1952 00001055 29D0                                    sub     eax, edx
  1953                                  
  1954                                  .@this_sign:
  1955 00001057 8984BBA0000000                          mov     [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0]
  1956 0000105E 58                                      pop     eax
  1957 0000105F 83E00F                                  and     eax, 0Fh        ; y
  1958 00001062 746F                                    jz      short .@this_sign@ ; @@getexpval 1
  1959 00001064 8B15[D83D0500]                          mov     edx, [_@@rle_val]
  1960 0000106A 83F80F                                  cmp     eax, 0Fh
  1961 0000106D 7250                                    jb      short .small@
  1962 0000106F 8A0D[C43D0500]                          mov     cl, byte [_@@linbits]
  1963 00001075 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
  1964 00001077 D3E5                                    shl     ebp, cl
  1965 00001079 D3C0                                    rol     eax, cl
  1966 0000107B 31E8                                    xor     eax, ebp
  1967 0000107D 28CD                                    sub     ch, cl
  1968 0000107F 7913                                    jns     short .cont@
  1969 00001081 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  1970 00001083 80C510                                  add     ch, 10h
  1971 00001086 D3C5                                    rol     ebp, cl
  1972 00001088 668B2E                                  mov     bp, [esi]
  1973 0000108B 83C602                                  add     esi, 2
  1974 0000108E 66C1CD08                                ror     bp, 8
  1975 00001092 D3CD                                    ror     ebp, cl
  1976                                  
  1977                                  .cont@:
  1978 00001094 88D1                                    mov     cl, dl
  1979 00001096 80E103                                  and     cl, 3
  1980 00001099 C1EA02                                  shr     edx, 2
  1981 0000109C 8D04853C000000                          lea     eax, [eax*4+60]
  1982 000010A3 08C8                                    or      al, cl
  1983 000010A5 8A88[ECF70100]                          mov     cl, [mp3_table_4_3_exp+eax]
  1984 000010AB 8B0485[28780200]                        mov     eax, [mp3_table_4_3_value+eax*4]
  1985 000010B2 28D1                                    sub     cl, dl
  1986 000010B4 D3E8                                    shr     eax, cl
  1987 000010B6 80F91F                                  cmp     cl, 31
  1988 000010B9 760E                                    jbe     short .get_sign@
  1989 000010BB 31C0                                    xor     eax, eax
  1990 000010BD EB0A                                    jmp     short .get_sign@
  1991                                  
  1992                                  .small@:
  1993 000010BF C1E206                                  shl     edx, 6
  1994 000010C2 8B8482[18810400]                        mov     eax, [mp3_expval_table+edx+eax*4]
  1995                                  
  1996                                  .get_sign@:                           
  1997 000010C9 FECD                                    dec     ch              ; dec mp3_colNN
  1998 000010CB D1E5                                    shl     ebp, 1          ; shl mp3_col32,1 ; cy=data
  1999 000010CD 19D2                                    sbb     edx, edx        ; cy=0,1 --> 0,FFFFFFFF
  2000 000010CF 31D0                                    xor     eax, edx        ; invert if cy was 1
  2001 000010D1 29D0                                    sub     eax, edx        ; add 1 if cy was 1
  2002                                  
  2003                                  .@this_sign@:
  2004 000010D3 8984BBA4000000                          mov	[ebx+edi*4+164], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+4]
  2005 000010DA 83C702                                  add	edi, 2          ; next j
  2006 000010DD FF0D[C03D0500]                          dec	dword [_@@JJJ]
  2007 000010E3 0F857AFEFFFF                            jnz	.low_freq_lop_j
  2008                                  
  2009                                  .low_freq_next_i:
  2010 000010E9 FF05[BC3D0500]                          inc	dword [_@@III]	; next i
  2011 000010EF 833D[BC3D0500]03                        cmp	dword [_@@III], 3
  2012 000010F6 0F8201FDFFFF                            jb	.low_freq_lop_i
  2013 000010FC 81FF3C020000                            cmp	edi, 572	; aka 576-4 ; skip if less than 4 entries left
  2014 00001102 0F87DA000000                            ja	.high_freq_done
  2015                                  
  2016                                  .high_freq_lop:
  2017 00001108 3B35[CC3D0500]                          cmp     esi, [_@@coarse_end]
  2018 0000110E 7629                                    jbe     short .high_freq_inrange
  2019 00001110 89F0                                    mov     eax, esi        ; mp3mac_bitstream_get_position
  2020 00001112 2B05[94120100]                          sub     eax, [mp3_bitstream_start]
  2021 00001118 0FBED5                                  movsx   edx, ch         ; mp3_colNN
  2022 0000111B F7DA                                    neg     edx
  2023 0000111D 8D44C2F0                                lea     eax, [edx+eax*8-16]
  2024 00001121 3B4308                                  cmp     eax, [ebx+8]    ; [ebx+$mp3gr_part2_3_end] ; check end
  2025 00001124 7213                                    jb      short .high_freq_inrange ; not yet end
  2026 00001126 0F84B6000000                            jz      .high_freq_done ; okay, exact end
  2027 0000112C 83FF04                                  cmp     edi, 4
  2028 0000112F 7203                                    jb      short .high_freq_cannot_stepback
  2029 00001131 83EF04                                  sub     edi, 4          ; stepback, s_index-4 ; dst stepback
  2030                                  
  2031                                  .high_freq_cannot_stepback:
  2032 00001134 E9A9000000                              jmp     .high_freq_done
  2033                                  
  2034                                  .high_freq_inrange:
  2035 00001139 8B5324                                  mov     edx, [ebx+24h]  ; [ebx+$mp3gr_count1table_select]
  2036                                                                          ; get huffcode (quad_vlc)
  2037                                  
  2038                                  .get_child_lop@@:
  2039 0000113C 8A0C95[AE3D0100]                        mov     cl, [(huff_tree_buf+2)+edx*4] ; mp3mac_get_huffcode
  2040 00001143 668B1495[AC3D0100]                      mov     dx, word [huff_tree_buf+edx*4]
  2041 0000114B 89E8                                    mov     eax, ebp
  2042 0000114D D3E8                                    shr     eax, cl
  2043 0000114F 01C2                                    add     edx, eax
  2044 00001151 8A0C95[AE3D0100]                        mov     cl, [(huff_tree_buf+2)+edx*4]
  2045 00001158 80F900                                  cmp     cl, 0
  2046 0000115B 7823                                    js      short .got_child@@
  2047 0000115D 0FB70495[AC3D0100]                      movzx   eax, word [huff_tree_buf+edx*4]
  2048 00001165 D3E5                                    shl     ebp, cl
  2049 00001167 28CD                                    sub     ch, cl
  2050 00001169 7932                                    jns     short .got_done@@
  2051 0000116B 88E9                                    mov     cl, ch
  2052 0000116D 80C510                                  add     ch, 10h
  2053 00001170 D3C5                                    rol     ebp, cl
  2054 00001172 668B2E                                  mov     bp, [esi]
  2055 00001175 83C602                                  add     esi, 2
  2056 00001178 66C1CD08                                ror     bp, 8
  2057 0000117C D3CD                                    ror     ebp, cl
  2058 0000117E EB1D                                    jmp     short .got_done@@
  2059                                  
  2060                                  .got_child@@:
  2061 00001180 C1E509                                  shl     ebp, 9
  2062 00001183 80ED09                                  sub     ch, 9
  2063 00001186 79B4                                    jns     short .get_child_lop@@
  2064 00001188 88E9                                    mov     cl, ch
  2065 0000118A 80C510                                  add     ch, 10h
  2066 0000118D D3C5                                    rol     ebp, cl
  2067 0000118F 668B2E                                  mov     bp, [esi]
  2068 00001192 83C602                                  add     esi, 2
  2069 00001195 66C1CD08                                ror     bp, 8
  2070 00001199 D3CD                                    ror     ebp, cl
  2071 0000119B EB9F                                    jmp     short .get_child_lop@@
  2072                                  
  2073                                  .got_done@@:
  2074 0000119D 88C2                                    mov     dl, al          ; flags
  2075 0000119F C0E204                                  shl     dl, 4           ; flags, to upper 4bit
  2076 000011A2 B604                                    mov     dh, 4           ; lopcount
  2077                                  
  2078                                  .high_freq_flag_lop:
  2079 000011A4 31C0                                    xor     eax, eax
  2080 000011A6 D0E2                                    shl     dl, 1           ; flag
  2081 000011A8 7320                                    jnb     short .high_freq_flag_this
  2082 000011AA 3B3D[D03D0500]                          cmp     edi, [_@rle_point] ; @@get_runlength quads
  2083 000011B0 0F83A0000000                            jnb     .rle_fetch_next_quads
  2084                                  
  2085                                  .rle_back_quads:
  2086 000011B6 A1[D83D0500]                            mov     eax, [_@@rle_val]
  2087 000011BB 8B0485[18790400]                        mov     eax, [mp3_exp_table+eax*4] ; xlat and get sign
  2088 000011C2 FECD                                    dec     ch              ; mp3mac_get_bit_to_cy
  2089 000011C4 D1E5                                    shl     ebp, 1
  2090 000011C6 7302                                    jnb     short .high_freq_flag_this ;
  2091                                                                          ; sbb edx, edx ; cy=0,1 --> 0,FFFFFFFF
  2092                                                                          ; xor eax, edx ; invert if cy was 1
  2093                                                                          ; sub eax, edx ; add 1 if cy was 1
  2094 000011C8 F7D8                                    neg     eax
  2095                                  
  2096                                  .high_freq_flag_this:
  2097 000011CA 8984BBA0000000                          mov     [ebx+edi*4+160], eax ; [ebx+$mp3gr_sb_hybrid+edi*4+0]
  2098 000011D1 47                                      inc     edi
  2099 000011D2 FECE                                    dec     dh
  2100 000011D4 75CE                                    jnz     short .high_freq_flag_lop
  2101 000011D6 81FF3C020000                            cmp     edi, 572        ; aka 576-4 ; loop while space for another 4 values
  2102 000011DC 0F8626FFFFFF                            jbe     .high_freq_lop
  2103                                  
  2104                                  .high_freq_done:
  2105 000011E2 897B5C                                  mov     [ebx+92], edi   ; [ebx+$mp3gr_num_nonzero_hybrids]
  2106 000011E5 51                                      push    ecx
  2107 000011E6 B940020000                              mov     ecx, 576        ; end
  2108 000011EB 29F9                                    sub     ecx, edi        ; remain = end-curr
  2109                                                                          ; zeropad remaining entries (can be 0 or 2 dwords,
  2110                                                                          ; or more. If above loop was aborted)
  2111 000011ED 8DBCBBA0000000                          lea     edi, [ebx+edi*4+160] ; [ebx+$mp3gr_sb_hybrid+edi*4]
  2112 000011F4 31C0                                    xor     eax, eax
  2113 000011F6 F3AB                                    rep stosd
  2114 000011F8 59                                      pop     ecx
  2115                                  
  2116                                  		; 16/02/2025
  2117                                  .no_rdtsc_supported@:
  2118                                                  ;clc			; out: cy=0=okay
  2119 000011F9 C3                                      retn
  2120                                  
  2121                                  .rle_fetch_next_small:
  2122 000011FA A1[D43D0500]                            mov     eax, [_@@rle_ptr] ; @@next_runlength small
  2123 000011FF 8305[D43D0500]04                        add     dword [_@@rle_ptr], 4
  2124 00001206 8B00                                    mov     eax, [eax]
  2125 00001208 6639C7                                  cmp     di, ax
  2126 0000120B 73ED                                    jnb     short .rle_fetch_next_small
  2127 0000120D 66A3[D03D0500]                          mov     word [_@rle_point], ax
  2128 00001213 C1E810                                  shr     eax, 16
  2129 00001216 A3[D83D0500]                            mov     [_@@rle_val], eax
  2130 0000121B C1E006                                  shl     eax, 6
  2131 0000121E A3[DC3D0500]                            mov     [_@@rle_val_x_40h], eax
  2132 00001223 E94CFCFFFF                              jmp     .rle_back_small
  2133                                  
  2134                                  .rle_fetch_next_full:
  2135 00001228 A1[D43D0500]                            mov     eax, [_@@rle_ptr] ; @@next_runlength full
  2136 0000122D 8305[D43D0500]04                        add	dword [_@@rle_ptr], 4
  2137 00001234 8B00                                    mov     eax, [eax]
  2138 00001236 6639C7                                  cmp     di, ax
  2139 00001239 73ED                                    jnb     short .rle_fetch_next_full
  2140 0000123B 66A3[D03D0500]                          mov     word [_@rle_point], ax
  2141 00001241 C1E810                                  shr     eax, 16
  2142 00001244 A3[D83D0500]                            mov     [_@@rle_val], eax
  2143 00001249 C1E006                                  shl     eax, 6
  2144 0000124C A3[DC3D0500]                            mov     [_@@rle_val_x_40h], eax
  2145 00001251 E925FDFFFF                              jmp     .rle_back_full
  2146                                  
  2147                                  .rle_fetch_next_quads:
  2148 00001256 A1[D43D0500]                            mov	eax, [_@@rle_ptr] ; msw=val, lsw=point
  2149 0000125B 8305[D43D0500]04                        add	dword [_@@rle_ptr], 4 ; 2+2
  2150 00001262 8B00                                    mov	eax, [eax]
  2151 00001264 6639C7                                  cmp	di, ax          ; needed if rle fetching was skipped
  2152 00001267 73ED                                    jnb	short .rle_fetch_next_quads
  2153 00001269 66A3[D03D0500]                          mov	word [_@rle_point], ax
  2154 0000126F C1E810                                  shr	eax, 16
  2155 00001272 A3[D83D0500]                            mov	[_@@rle_val], eax
  2156 00001277 E93AFFFFFF                              jmp	.rle_back_quads
  2157                                  
  2158                                  .lop_j_near_end:
  2159 0000127C 89F0                                    mov     eax, esi
  2160 0000127E 2B05[94120100]                          sub     eax, [mp3_bitstream_start]
  2161 00001284 0FBED5                                  movsx   edx, ch
  2162 00001287 F7DA                                    neg     edx
  2163 00001289 8D44C2F0                                lea     eax, [edx+eax*8-16]
  2164 0000128D 3B4308                                  cmp     eax, [ebx+8]
  2165 00001290 0F82D9FCFFFF                            jb      .small_not_end@
  2166 00001296 E94EFEFFFF                              jmp     .low_freq_next_i
  2167                                  
  2168                                  
  2169                                  ; =============== S U B R O U T I N E =======================================
  2170                                  
  2171                                  
  2172                                  mp3_compute_stereo:
  2173                                  		; 16/02/2025
  2174 0000129B 833D[C8BB0000]02                        cmp	dword [mp3_num_channels], 2 ; in: ebx=granule(s)
  2175 000012A2 7515                                    jnz	short .no_stereo
  2176 000012A4 833D[DCBB0000]02                        cmp	dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO
  2177                                                                          ; only MS stereo
  2178 000012AB 740D                                    jz	short mp3_compute_ms_stereo
  2179 000012AD F705[DCBB0000]0100-                     test	dword [mp3_hdr_mode_ext], 1 ; MODE_EXT_I_STEREO
  2179 000012B5 0000               
  2180                                                                          ; intensity stereo (optionally with MS stereo)
  2181 000012B7 7539                                    jnz	short mp3_compute_i_stereo
  2182                                  
  2183                                  .no_stereo:
  2184 000012B9 C3                                      retn
  2185                                  
  2186                                  mp3_compute_ms_stereo:
  2187                                  		; 16/02/2025
  2188                                  
  2189                                  .no_rdtsc_supported:
  2190 000012BA 8DBBE0130000                            lea     edi, [ebx+5088] ; [ebx+$mp3gr_sb_hybrid+$mp3gr_entrysiz*2]
  2191                                                                          ; for ch1 (2nd channel)
  2192 000012C0 8B4B5C                                  mov     ecx, [ebx+92]   ; [ebx+$mp3gr_num_nonzero_hybrids] ; ch0
  2193 000012C3 8B839C130000                            mov     eax, [ebx+5020] ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)] ; ch1
  2194 000012C9 39C1                                    cmp     ecx, eax
  2195 000012CB 7702                                    ja      short .this_len
  2196 000012CD 89C1                                    mov     ecx, eax
  2197                                  
  2198                                  .this_len:
  2199 000012CF E320                                    jecxz   .ms_stereo_done
  2200 000012D1 894B5C                                  mov     [ebx+92], ecx   ; [ebx+$mp3gr_num_nonzero_hybrids] ; ch0
  2201 000012D4 898B9C130000                            mov     [ebx+5020], ecx ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)] ; ch1
  2202                                  
  2203                                  .ms_stereo_lop:
  2204 000012DA 8B87C0ECFFFF                            mov     eax, [edi-4928] ; for i=0 to 576-1
  2205                                                                          ; [edi+@@ch0]
  2206                                                                          ; @@ch0 equ (-$mp3gr_entrysiz*2) ; granule for channel=0
  2207                                                                          ; tmp0 = granule.ch0.sb_hybrid[i]
  2208 000012E0 8B17                                    mov     edx, [edi]      ; @@ch1 equ 0 ; granule for channel=1
  2209                                                                          ; [edi+@@ch1]
  2210                                                                          ; tmp1 = granule.ch1.sb_hybrid[i]
  2211 000012E2 29D0                                    sub     eax, edx        ; tmp0 - tmp1
  2212 000012E4 8D1450                                  lea     edx, [eax+edx*2] ; tmp0 + tmp1
  2213 000012E7 8997C0ECFFFF                            mov     [edi-4928], edx ; [edi+@@ch0]
  2214                                                                          ; granule.ch0.sb_hybrid[i] = tmp0 + tmp1
  2215 000012ED AB                                      stosd                   ; [edi+@@ch1]
  2216                                                                          ; granule.ch1.sb_hybrid[i] = tmp0 - tmp1
  2217 000012EE 49                                      dec     ecx
  2218 000012EF 75E9                                    jnz     short .ms_stereo_lop
  2219                                  
  2220                                  .ms_stereo_done:
  2221                                  		; 16/02/2025
  2222                                  
  2223                                  .no_rdtsc_supported@:
  2224 000012F1 C3                                      retn
  2225                                  
  2226                                  mp3_compute_i_stereo:
  2227                                  		; 16/02/2025
  2228                                  
  2229                                  .no_rdtsc_supported@@@:
  2230 000012F2 C7435C40020000                          mov     dword [ebx+92], 576 ; ch0
  2231                                                                          ; [ebx+$mp3gr_num_nonzero_hybrids]
  2232 000012F9 C7839C130000400200-                     mov     dword [ebx+5020], 576 ; ch1
  2232 00001302 00                 
  2233                                                                          ; [ebx+$mp3gr_num_nonzero_hybrids+($mp3gr_entrysiz*2)]
  2234 00001303 8B4320                                  mov     eax, [ebx+32]   ; [ebx+$mp3gr_long_end]
  2235 00001306 A3[183E0500]                            mov     [_@@n_long_sfb], eax
  2236 0000130B B80D000000                              mov     eax, 13         ; 39/3
  2237 00001310 2B431C                                  sub     eax, [ebx+28]   ; [ebx+$mp3gr_short_start]
  2238 00001313 8D0440                                  lea     eax, [eax+eax*2] ; mul3
  2239 00001316 A3[1C3E0500]                            mov     [_@@n_short_sfb], eax
  2240 0000131B 0305[183E0500]                          add     eax, [_@@n_long_sfb]
  2241 00001321 A3[203E0500]                            mov     [_@@n_sfb], eax ;
  2242                                                                          ; n_sfb = gr->n_long_sfb + gr->n_short_sfb;
  2243 00001326 803D[1C3E0500]00                        cmp     byte [_@@n_short_sfb], 0
  2244 0000132D B801000000                              mov     eax, 1
  2245 00001332 7405                                    jz      short .without_short
  2246 00001334 B803000000                              mov     eax, 3          ; max_blocks = gr->n_short_sfb ? 3 : 1;
  2247                                  
  2248                                  .without_short:
  2249 00001339 A3[E43D0500]                            mov     [_@@max_blocks], eax
  2250 0000133E BF[EC3D0500]                            mov     edi, _@@sfb_array
  2251 00001343 A1[C0BB0000]                            mov     eax, [mp3_hdr_sample_rate_index] ; bstab
  2252 00001348 6BC016                                  imul    eax, 22
  2253 0000134B 8DB0[149E0000]                          lea     esi, [mp3_band_size_long+eax]
  2254 00001351 8B0D[183E0500]                          mov     ecx, [_@@n_long_sfb]
  2255 00001357 F3A4                                    rep movsb
  2256 00001359 A1[C0BB0000]                            mov     eax, [mp3_hdr_sample_rate_index]
  2257 0000135E 6BC00D                                  imul    eax, 13
  2258 00001361 8DB0[E49E0000]                          lea     esi, [mp3_band_size_short+eax] ; merge lieff-style
  2259 00001367 8B0D[1C3E0500]                          mov     ecx, [_@@n_short_sfb]
  2260 0000136D E30C                                    jecxz   .make_sfb_done ; doing that here is a bit slow,
  2261                                                                          ; it would be better to pre-compute
  2262                                                                          ; all merged-combinations
  2263 0000136F 03731C                                  add     esi, [ebx+28]   ; [ebx+$mp3gr_short_start]
  2264                                  
  2265                                  .make_sfb_lop:
  2266 00001372 AC                                      lodsb
  2267 00001373 AA                                      stosb
  2268 00001374 AA                                      stosb
  2269 00001375 AA                                      stosb
  2270 00001376 83E903                                  sub     ecx, 3
  2271 00001379 75F7                                    jnz     short .make_sfb_lop
  2272                                  
  2273                                  .make_sfb_done:
  2274 0000137B E871000000                              call    _@@find_top_bands ;
  2275                                                                          ; L3_stereo_top_band(left+576,gr->sfbtab,n_sfb,max_band);
  2276 00001380 803D[183E0500]00                        cmp     byte [_@@n_long_sfb], 0
  2277 00001387 7420                                    jz      short .without_long
  2278 00001389 A1[E03D0500]                            mov     eax, dword [_@@max_bands]
  2279 0000138E 38C4                                    cmp     ah, al          ; if (gr->n_long_sfb)
  2280 00001390 7F02                                    jg      short .not_max1 ; max_band[0] = max_band[1] = max_band[2] = MINIMP3_MAX
  2281                                                                          ; (MINIMP3_MAX(max_band[0], max_band[1]), max_band[2]);
  2282 00001392 88C4                                    mov     ah, al
  2283                                  
  2284                                  .not_max1:
  2285 00001394 C1E808                                  shr     eax, 8
  2286 00001397 38C4                                    cmp     ah, al
  2287 00001399 7F02                                    jg      short .not_max2
  2288 0000139B 88C4                                    mov     ah, al
  2289                                  
  2290                                  .not_max2:
  2291 0000139D 88E0                                    mov     al, ah
  2292 0000139F C1E008                                  shl     eax, 8
  2293 000013A2 88E0                                    mov     al, ah
  2294 000013A4 A3[E03D0500]                            mov     dword [_@@max_bands], eax
  2295                                  
  2296                                  .without_long:
  2297 000013A9 31ED                                    xor     ebp, ebp        ; blk
  2298                                  
  2299                                  .adjust_last_prev_lop:
  2300 000013AB 8B15[203E0500]                          mov     edx, [_@@n_sfb]
  2301 000013B1 2B15[E43D0500]                          sub     edx, [_@@max_blocks] ; itop = n_sfb - max_blocks + blk
  2302 000013B7 01EA                                    add     edx, ebp
  2303 000013B9 89D1                                    mov     ecx, edx
  2304 000013BB 2B0D[E43D0500]                          sub     ecx, [_@@max_blocks] ; prev = itop - max_blocks;
  2305 000013C1 A1[E0BB0000]                            mov     eax, [mp3_hdr_flag_lsf]
  2306 000013C6 8D0440                                  lea     eax, [eax+eax*2] ; 0,1 --> 0,3
  2307                                                                          ; default_pos = HDR_TEST_MPEG1(hdr) ? 3
  2308 000013C9 3403                                    xor     al, 3           ; 0,3 --> 3,0
  2309 000013CB 363A8D[E03D0500]                        cmp     cl, [ss:_@@max_bands+ebp]
  2310 000013D2 7E07                                    jle     short .use_default_pos ; ist_pos[itop] = max_band[blk] >=
  2311                                                                          ; prev ? default_pos : ist_pos[prev]
  2312 000013D4 8A840BB0130000                          mov     al, [ebx+ecx+5040] ; [ebx+@@right+$mp3gr_scale_factors+ecx]
  2313                                  
  2314                                  .use_default_pos:
  2315 000013DB 888413B0130000                          mov     [ebx+edx+5040], al ; [ebx+@@right+$mp3gr_scale_factors+edx]
  2316 000013E2 45                                      inc     ebp             ; blk
  2317 000013E3 3B2D[E43D0500]                          cmp     ebp, [_@@max_blocks]
  2318 000013E9 72C0                                    jb      short .adjust_last_prev_lop
  2319 000013EB E850000000                              call    _@@apply_i_stereo
  2320                                  
  2321                                  		; 16/02/2025
  2322                                  
  2323                                  .no_rdtsc_supported@@@@:
  2324 000013F0 C3                                      retn
  2325                                  
  2326                                  
  2327                                  ; =============== S U B R O U T I N E =======================================
  2328                                  
  2329                                  
  2330                                  _@@find_top_bands:
  2331 000013F1 C705[E03D0500]FFFF-                     mov     dword [_@@max_bands], 0FFFFFFh ; set maxband[0..2]=(-1)
  2331 000013F9 FF00               
  2332 000013FB 8DB3E0130000                            lea     esi, [ebx+5088] ; [ebx+@@right+$mp3gr_sb_hybrid]
  2333 00001401 31D2                                    xor     edx, edx
  2334                                  
  2335                                  .find_top_lop_iii:                    
  2336 00001403 31C9                                    xor     ecx, ecx        ; for (i = 0; i < nbands; i++)
  2337                                  
  2338                                  .find_top_lop_kkk:                    
  2339 00001405 8B048E                                  mov     eax, [esi+ecx*4] ; for (k = 0; k < sfb[i]; k += 2)
  2340 00001408 0B448E04                                or      eax, [esi+ecx*4+4]
  2341 0000140C 750D                                    jnz     short .found_nonzero
  2342 0000140E 83C102                                  add     ecx, 2
  2343 00001411 3A8A[EC3D0500]                          cmp     cl, [_@@sfb_array+edx]
  2344 00001417 72EC                                    jb      short .find_top_lop_kkk
  2345 00001419 EB11                                    jmp     short .find_top_next
  2346                                  
  2347                                  .found_nonzero:
  2348 0000141B 89D0                                    mov     eax, edx
  2349 0000141D F635[BCA70000]                          div     byte [_@@const_3]
  2350 00001423 0FB6C4                                  movzx   eax, ah         ; remainder (mod 3)
  2351 00001426 8890[E03D0500]                          mov     [_@@max_bands+eax], dl ; max_bands[0..2]=i
  2352                                  
  2353                                  .find_top_next:
  2354 0000142C 0FB682[EC3D0500]                        movzx   eax, byte [_@@sfb_array+edx]
  2355 00001433 8D3486                                  lea     esi, [esi+eax*4]
  2356 00001436 42                                      inc     edx             ; next
  2357 00001437 3B15[203E0500]                          cmp     edx, [_@@n_sfb]
  2358 0000143D 72C4                                    jb      short .find_top_lop_iii
  2359 0000143F C3                                      retn
  2360                                  
  2361                                  ; =============== S U B R O U T I N E =======================================
  2362                                  
  2363                                  
  2364                                  _@@apply_i_stereo:
  2365 00001440 B8[D4A10000]                            mov     eax, mp3_is_table_normal
  2366 00001445 B907000000                              mov     ecx, 7
  2367 0000144A 833D[E0BB0000]00                        cmp     dword [mp3_hdr_flag_lsf], 0
  2368 00001451 7425                                    jz      short .this_lsf
  2369 00001453 8B8354130000                            mov     eax, [ebx+4948] ; [ebx+@@right+$mp3gr_scalefac_compress]
  2370 00001459 83E001                                  and     eax, 1          ; bit0
  2371 0000145C F705[DCBB0000]0200-                     test    dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO
  2371 00001464 0000               
  2372 00001466 7403                                    jz      short .no_ms
  2373 00001468 83C802                                  or      eax, 2          ; bit1=mul_1.414
  2374                                  
  2375                                  .no_ms:
  2376 0000146B C1E009                                  shl     eax, 9          ; N*40h*2*4
  2377 0000146E 05[98050500]                            add     eax, mp3_is_table_lsf
  2378 00001473 B940000000                              mov     ecx, 64         ; max (must be below NO_INTENSITY_FLAG)
  2379                                  
  2380                                  .this_lsf:
  2381 00001478 890D[E83D0500]                          mov     [_@@max_pos], ecx ; 7 or 64
  2382 0000147E A3[143E0500]                            mov     [_@@is_tab], eax ; table
  2383 00001483 8DB3A0000000                            lea     esi, [ebx+160]  ; [ebx+$mp3gr_sb_hybrid]
  2384 00001489 31C9                                    xor     ecx, ecx        ; iii ; for (i = 0; sfb[i]; i++)
  2385                                  
  2386                                  .apply_lop_i:
  2387 0000148B 0FB6A9[EC3D0500]                        movzx   ebp, byte [_@@sfb_array+ecx] ; if ((int)i > max_band[i % 3]
  2388                                                                          ; && ipos < max_pos)
  2389 00001492 89C8                                    mov     eax, ecx
  2390 00001494 F635[BCA70000]                          div     byte [_@@const_3] ; max_band[i % 3]
  2391 0000149A 0FB6C4                                  movzx   eax, ah         ; remainder (mod 3)
  2392 0000149D 3A88[E03D0500]                          cmp     cl, [_@@max_bands+eax] ; iii,max_bands[0..2];
  2393 000014A3 7E38                                    jle     short .apply_ms_stereo
  2394 000014A5 0FB6BC0BB0130000                        movzx   edi, byte [ebx+ecx+5040] ; [ebx+@@right+$mp3gr_scale_factors+ecx]
  2395                                                                          ; @@right = $mp3gr_entrysiz*2 = 4928
  2396                                                                          ; $mp3gr_scale_factors = 112
  2397 000014AD 3B3D[E83D0500]                          cmp     edi, [_@@max_pos] ; check ipos
  2398 000014B3 7328                                    jnb     short .apply_ms_stereo
  2399 000014B5 C1E703                                  shl     edi, 3          ; mul 2*4
  2400 000014B8 033D[143E0500]                          add     edi, [_@@is_tab]
  2401                                  
  2402                                  .apply_pan_lop:
  2403 000014BE 8B06                                    mov     eax, [esi]      ; tmp = granule.ch0.sb_hybrid
  2404 000014C0 C1E002                                  shl     eax, 2
  2405 000014C3 F76F04                                  imul    dword [edi+4] ; v1
  2406 000014C6 899640130000                            mov     [esi+4928], edx ; [esi+@@right]
  2407                                                                          ; granule.ch1.sb_hybrid = tmp*v1
  2408 000014CC 8B06                                    mov     eax, [esi]      ; tmp = granule.ch0.sb_hybrid
  2409 000014CE C1E002                                  shl     eax, 2
  2410 000014D1 F72F                                    imul    dword [edi] ; v0
  2411 000014D3 8916                                    mov     [esi], edx      ; granule.ch0.sb_hybrid = tmp*v0
  2412 000014D5 83C604                                  add     esi, 4
  2413 000014D8 4D                                      dec     ebp
  2414 000014D9 75E3                                    jnz     short .apply_pan_lop
  2415 000014DB EB2C                                    jmp     short .apply_next
  2416                                  
  2417                                  .apply_ms_stereo:
  2418 000014DD F705[DCBB0000]0200-                     test	dword [mp3_hdr_mode_ext], 2 ; MODE_EXT_MS_STEREO
  2418 000014E5 0000               
  2419 000014E7 741D                                    jz	short .apply_none
  2420                                  
  2421                                  .ms_stereo_lop:
  2422 000014E9 8B06                                    mov     eax, [esi]      ; tmp0 = granule.ch0.sb_hybrid[i]
  2423 000014EB 8B9640130000                            mov     edx, [esi+4928] ; [esi+@@right]
  2424                                                                          ; tmp1 = granule.ch1.sb_hybrid[i]
  2425 000014F1 29D0                                    sub     eax, edx        ; tmp0 - tmp1
  2426 000014F3 8D1450                                  lea     edx, [eax+edx*2] ; tmp0 + tmp1
  2427 000014F6 8916                                    mov     [esi], edx      ; granule.ch0.sb_hybrid[i] = tmp0 + tmp1
  2428 000014F8 898640130000                            mov     [esi+4928], eax ; [esi+@@right]
  2429                                                                          ; granule.ch1.sb_hybrid[i] = tmp0 - tmp1
  2430 000014FE 83C604                                  add     esi, 4
  2431 00001501 4D                                      dec     ebp
  2432 00001502 75E5                                    jnz     short .ms_stereo_lop
  2433 00001504 EB03                                    jmp     short .apply_next
  2434                                  
  2435                                  .apply_none:
  2436 00001506 8D34AE                                  lea     esi, [esi+ebp*4] ; skip, keep unchanged
  2437                                  
  2438                                  .apply_next:
  2439 00001509 41                                      inc     ecx             ; iii
  2440 0000150A 3B0D[203E0500]                          cmp     ecx, [_@@n_sfb]
  2441 00001510 0F8275FFFFFF                            jb      .apply_lop_i   ; next
  2442 00001516 C3                                      retn
  2443                                  
  2444                                  ; =============== S U B R O U T I N E =======================================
  2445                                  
  2446                                  
  2447                                  mp3_reorder_block:
  2448                                  		; 16/02/2025
  2449                                  
  2450                                  .no_rdtsc_supported:
  2451 00001517 807B2C02                                cmp	byte [ebx+44], 2 ; ebx+$mp3gr_block_type] ; only for type 2
  2452 0000151B 7565                                    jnz	short .no_reorder
  2453 0000151D 8DB3A0000000                            lea	esi, [ebx+160]  ; [ebx+$mp3gr_sb_hybrid] ; ptr+0
  2454 00001523 807B3000                                cmp	byte [ebx+48], 0 ; [ebx+$mp3gr_switch_point]
  2455 00001527 7412                                    jz	short .this_src
  2456 00001529 81C690000000                            add	esi, 144        ; 36*4 ; ptr+36*4
  2457 0000152F 833D[C0BB0000]08                        cmp	dword [mp3_hdr_sample_rate_index], 8
  2458 00001536 7503                                    jnz	short .this_src
  2459 00001538 83C630                                  add	esi, 48         ; 12*4 ; additionally to above 36*4 ; ptr+48*4
  2460                                  
  2461                                  .this_src:
  2462 0000153B 8B531C                                  mov     edx, [ebx+28]   ; [ebx+$mp3gr_short_start] ; can be 13
  2463 0000153E 83FA0D                                  cmp     edx, 13
  2464 00001541 733F                                    jnb     short .no_reorder
  2465 00001543 C7435C40020000                          mov     dword [ebx+92], 576 ; [ebx+$mp3gr_num_nonzero_hybrids]
  2466                                  
  2467                                  .outer_lop:
  2468 0000154A A1[C0BB0000]                            mov     eax, [mp3_hdr_sample_rate_index]
  2469 0000154F 6BC00D                                  imul    eax, 13         ; X*13
  2470 00001552 0FB68C10[E49E0000]                      movzx   ecx, byte [mp3_band_size_short+eax+edx] ; [X*13+Y]
  2471 0000155A BF[243E0500]                            mov     edi, _@@tmp
  2472 0000155F 60                                      pusha
  2473 00001560 89CA                                    mov     edx, ecx        ; step=len (4..44) ; copy LEN*3 dwords to tmp
  2474                                  
  2475                                  .inner_lop:
  2476 00001562 8B06                                    mov     eax, [esi]
  2477 00001564 AB                                      stosd
  2478 00001565 8B0496                                  mov     eax, [esi+edx*4] ; copy 3 dwords
  2479 00001568 AB                                      stosd
  2480 00001569 8B04D6                                  mov     eax, [esi+edx*8]
  2481 0000156C AB                                      stosd
  2482 0000156D 83C604                                  add     esi, 4
  2483 00001570 E2F0                                    loop    .inner_lop
  2484 00001572 61                                      popa
  2485 00001573 8D0C49                                  lea     ecx, [ecx+ecx*2] ; len*3
  2486 00001576 87FE                                    xchg    esi, edi        ; copy LEN*3 dwords back from tmp
  2487 00001578 F3A5                                    rep movsd
  2488 0000157A 87FE                                    xchg    esi, edi
  2489 0000157C 42                                      inc     edx
  2490 0000157D 83FA0D                                  cmp     edx, 13
  2491 00001580 72C8                                    jb      short .outer_lop ; next
  2492                                  
  2493                                  .no_reorder:
  2494                                  		; 16/02/2025
  2495                                  
  2496                                  .no_rdtsc_supported@:
  2497 00001582 C3                                      retn
  2498                                  
  2499                                  
  2500                                  ; =============== S U B R O U T I N E =======================================
  2501                                  
  2502                                  
  2503                                  mp3_compute_antialias:
  2504                                  		; 16/02/2025
  2505                                  
  2506                                  .no_rdtsc_supported:
  2507 00001583 8B435C                                  mov     eax, [ebx+92]   ; [ebx+$mp3gr_num_nonzero_hybrids]
  2508 00001586 83C008                                  add     eax, 8          ; 9-1 ; 0..576+8
  2509 00001589 31D2                                    xor     edx, edx
  2510 0000158B B909000000                              mov     ecx, 9
  2511 00001590 F7F1                                    div     ecx             ; (num/9) ; 0..64
  2512 00001592 894360                                  mov     [ebx+60h], eax
  2513 00001595 D1E8                                    shr     eax, 1          ; (num/18) ; 0..32
  2514 00001597 0F84B8010000                            jz      .no_antialias  ; 0 (when num/9 = 0..1)
  2515 0000159D 89C1                                    mov     ecx, eax        ; 1..32
  2516 0000159F C1E805                                  shr     eax, 5          ; 0..1
  2517 000015A2 29C1                                    sub     ecx, eax        ; 1..31 ; len excluding zeropadding
  2518 000015A4 807B2C02                                cmp     byte [ebx+44], 2 ; [ebx+$mp3gr_block_type]
  2519 000015A8 750F                                    jnz     short .this_len ; antialias only "long" bands
  2520 000015AA 807B3000                                cmp     byte [ebx+48], 0 ; [ebx+$mp3gr_switch_point]
  2521 000015AE 0F84A1010000                            jz      .no_antialias
  2522 000015B4 B901000000                              mov     ecx, 1          ; check this for 8000Hz case
  2523                                  
  2524                                  .this_len:
  2525 000015B9 8D440901                                lea     eax, [1+ecx*2]
  2526 000015BD 394360                                  cmp     [ebx+96], eax   ; [ebx+$mp3gr_num_nonzero_hybrids_div9]
  2527 000015C0 7703                                    ja      short .is_bigger
  2528 000015C2 894360                                  mov     [ebx+96], eax   ; opdate highest
  2529                                                                          ; (nonzero required for l3-si_huff.bit)
  2530                                  
  2531                                  .is_bigger:
  2532 000015C5 53                                      push    ebx
  2533 000015C6 8D9BA0000000                            lea     ebx, [ebx+160]  ; [ebx+$mp3gr_sb_hybrid]
  2534                                  
  2535                                  .lop:
  2536 000015CC 83C348                                  add     ebx, 72         ; 18*4
  2537 000015CF 8B73FC                                  mov     esi, [ebx-4]    ; IRP nn,0,1,2,3,4,5,6,7 ; INT_AA(nn=0..7)
  2538 000015D2 8B3B                                    mov     edi, [ebx]      ; @@def_csa macro nn,cs,ca
  2539                                                                          ;   mp3_csa_&nn&_cs equ cs
  2540                                                                          ;   mp3_csa_&nn&_ca equ ca
  2541                                                                          ;  endm
  2542                                                                          ; constants for mp3_csa_table
  2543 000015D4 C1E602                                  shl     esi, 2          ; tmp0 = ptr[-nn-1]*4
  2544 000015D7 C1E702                                  shl     edi, 2          ; tmp1 = ptr[+nn]*4
  2545 000015DA 8D043E                                  lea     eax, [esi+edi]  ; tmp2 = tmp0+tmp1
  2546 000015DD BD032AE136                              mov     ebp, 36E12A03h  ; @@def_csa 0,36E12A03h,-20ED7F9Ah  ;-0.6
  2547                                                                          ; mp3_csa_&nn&_cs
  2548 000015E2 F7ED                                    imul    ebp             ; tmp2 = (tmp2*csa[0])
  2549 000015E4 89D5                                    mov     ebp, edx
  2550 000015E6 B8635631A8                              mov     eax, -57CEA99Dh ; mp3_csa_&nn&_ca-mp3_csa_&nn&_cs
  2551 000015EB F7EE                                    imul    esi             ; tmp0 = (tmp2+(tmp0*csa[3]))
  2552 000015ED 01EA                                    add     edx, ebp
  2553 000015EF 8913                                    mov     [ebx], edx      ; [ebx+(nn)*4]
  2554 000015F1 B869AAF315                              mov     eax, 15F3AA69h  ; mp3_csa_&nn&_ca+mp3_csa_&nn&_cs
  2555 000015F6 F7EF                                    imul    edi             ; tmp1 = (tmp2-(tmp1*csa[2]))
  2556 000015F8 29D5                                    sub     ebp, edx
  2557 000015FA 896BFC                                  mov     [ebx-4], ebp    ; [ebx-(nn+1)*4]
  2558 000015FD 8B73F8                                  mov     esi, [ebx-8]
  2559 00001600 8B7B04                                  mov     edi, [ebx+4]
  2560 00001603 C1E602                                  shl     esi, 2
  2561 00001606 C1E702                                  shl     edi, 2
  2562 00001609 8D043E                                  lea     eax, [esi+edi]
  2563 0000160C BDFD756E38                              mov     ebp, 386E75FDh  ; @@def_csa 1,386E75FDh,-1E30DB48h  ;-0.535
  2564 00001611 F7ED                                    imul    ebp
  2565 00001613 89D5                                    mov     ebp, edx
  2566 00001615 B8BBAE60A9                              mov     eax, -569F5145h
  2567 0000161A F7EE                                    imul    esi
  2568 0000161C 01EA                                    add     edx, ebp
  2569 0000161E 895304                                  mov     [ebx+4], edx    ; [ebx+(nn)*4]
  2570 00001621 B8B59A3D1A                              mov     eax, 1A3D9AB5h
  2571 00001626 F7EF                                    imul    edi
  2572 00001628 29D5                                    sub     ebp, edx
  2573 0000162A 896BF8                                  mov     [ebx-8], ebp    ; [ebx-(nn+1)*4]
  2574 0000162D 8B73F4                                  mov     esi, [ebx-12]
  2575 00001630 8B7B08                                  mov     edi, [ebx+8]
  2576 00001633 C1E602                                  shl     esi, 2
  2577 00001636 C1E702                                  shl     edi, 2
  2578 00001639 8D043E                                  lea     eax, [esi+edi]
  2579 0000163C BD3EB7C63C                              mov     ebp, 3CC6B73Eh  ;  @@def_csa 2,3CC6B73Eh,-140E604Fh  ;-0.33
  2580 00001641 F7ED                                    imul    ebp
  2581 00001643 89D5                                    mov     ebp, edx
  2582 00001645 B873E82AAF                              mov     eax, -50D5178Dh
  2583 0000164A F7EE                                    imul    esi
  2584 0000164C 01EA                                    add     edx, ebp
  2585 0000164E 895308                                  mov     [ebx+8], edx    ; [ebx+(nn)*4]
  2586 00001651 B8EF56B828                              mov     eax, 28B856EFh
  2587 00001656 F7EF                                    imul    edi
  2588 00001658 29D5                                    sub     ebp, edx
  2589 0000165A 896BF4                                  mov     [ebx-12], ebp   ; [ebx-(nn+1)*4]
  2590 0000165D 8B73F0                                  mov     esi, [ebx-16]
  2591 00001660 8B7B0C                                  mov     edi, [ebx+12]
  2592 00001663 C1E602                                  shl     esi, 2
  2593 00001666 C1E702                                  shl     edi, 2
  2594 00001669 8D043E                                  lea     eax, [esi+edi]
  2595 0000166C BD55A0EE3E                              mov     ebp, 3EEEA055h  ; @@def_csa 3,3EEEA055h,-0BA47742h  ;-0.185
  2596 00001671 F7ED                                    imul    ebp
  2597 00001673 89D5                                    mov     ebp, edx
  2598 00001675 B869E86CB5                              mov     eax, -4A931797h
  2599 0000167A F7EE                                    imul    esi
  2600 0000167C 01EA                                    add     edx, ebp
  2601 0000167E 89530C                                  mov     [ebx+12], edx   ; [ebx+(nn)*4]
  2602 00001681 B813294A33                              mov     eax, 334A2913h
  2603 00001686 F7EF                                    imul    edi
  2604 00001688 29D5                                    sub     ebp, edx
  2605 0000168A 896BF0                                  mov     [ebx-16], ebp   ; [ebx-(nn+1)*4]
  2606 0000168D 8B73EC                                  mov     esi, [ebx-20]   ; ebx-(nn+1)*4] ; tmp0 = ptr[-nn-1]
  2607 00001690 8B7B10                                  mov     edi, [ebx+16]   ; [ebx+(nn)*4] ; tmp1 = ptr[+nn]
  2608 00001693 C1E602                                  shl     esi, 2
  2609 00001696 C1E702                                  shl     edi, 2
  2610 00001699 8D043E                                  lea     eax, [esi+edi]  ; tmp2 = tmp0+tmp1
  2611 0000169C BD5C90B63F                              mov     ebp, 3FB6905Ch  ; @@def_csa 4,3FB6905Ch,-060D80E9h  ;-0.095
  2612 000016A1 F7ED                                    imul    ebp             ; tmp2 = (tmp2*csa[0])
  2613 000016A3 89D5                                    mov     ebp, edx
  2614 000016A5 B8BBEE3BBA                              mov     eax, -45C41145h
  2615 000016AA F7EE                                    imul    esi             ; tmp0 = (tmp2+(tmp0*csa[3]))
  2616 000016AC 01EA                                    add     edx, ebp
  2617 000016AE 895310                                  mov     [ebx+16], edx   ; [ebx+(nn)*4]
  2618 000016B1 B8730FA939                              mov     eax, 39A90F73h
  2619 000016B6 F7EF                                    imul    edi             ; tmp1 = (tmp2-(tmp1*csa[2]))
  2620 000016B8 29D5                                    sub     ebp, edx
  2621 000016BA 896BEC                                  mov     [ebx-20], ebp   ; [ebx-(nn+1)*4]
  2622 000016BD 8B73E8                                  mov     esi, [ebx-24]
  2623 000016C0 8B7B14                                  mov     edi, [ebx+20]
  2624 000016C3 C1E602                                  shl     esi, 2
  2625 000016C6 C1E702                                  shl     edi, 2
  2626 000016C9 8D043E                                  lea     eax, [esi+edi]
  2627 000016CC BD213FF23F                              mov     ebp, 3FF23F21h  ; @@def_csa 5,3FF23F21h,-029F2E1Bh  ;-0.041
  2628 000016D1 F7ED                                    imul    ebp
  2629 000016D3 89D5                                    mov     ebp, edx
  2630 000016D5 B8C4926EBD                              mov     eax, -42916D3Ch
  2631 000016DA F7EE                                    imul    esi
  2632 000016DC 01EA                                    add     edx, ebp
  2633 000016DE 895314                                  mov     [ebx+20], edx   ; [ebx+(nn)*4]
  2634 000016E1 B80611533D                              mov     eax, 3D531106h
  2635 000016E6 F7EF                                    imul    edi
  2636 000016E8 29D5                                    sub     ebp, edx
  2637 000016EA 896BE8                                  mov     [ebx-24], ebp   ; [ebx-(nn+1)*4]
  2638 000016ED 8B73E4                                  mov     esi, [ebx-28]
  2639 000016F0 8B7B18                                  mov     edi, [ebx+24]
  2640 000016F3 C1E602                                  shl     esi, 2
  2641 000016F6 C1E702                                  shl     edi, 2
  2642 000016F9 8D043E                                  lea     eax, [esi+edi]
  2643 000016FC BD3259FE3F                              mov     ebp, 3FFE5932h  ; @@def_csa 6,3FFE5932h,-00E8A11Ch  ;-0.0142
  2644 00001701 F7ED                                    imul    ebp
  2645 00001703 89D5                                    mov     ebp, edx
  2646 00001705 B8B20519BF                              mov     eax, -40E6FA4Eh
  2647 0000170A F7EE                                    imul    esi
  2648 0000170C 01EA                                    add     edx, ebp
  2649 0000170E 895318                                  mov     [ebx+24], edx   ; [ebx+(nn)*4]
  2650 00001711 B816B8153F                              mov     eax, 3F15B816h
  2651 00001716 F7EF                                    imul    edi
  2652 00001718 29D5                                    sub     ebp, edx
  2653 0000171A 896BE4                                  mov     [ebx-28], ebp   ; [ebx-(nn+1)*4]
  2654 0000171D 8B73E0                                  mov     esi, [ebx-32]
  2655 00001720 8B7B1C                                  mov     edi, [ebx+28]
  2656 00001723 C1E602                                  shl     esi, 2
  2657 00001726 C1E702                                  shl     edi, 2
  2658 00001729 8D043E                                  lea     eax, [esi+edi]
  2659 0000172C BD4BE3FF3F                              mov     ebp, 3FFFE34Bh  ; @@def_csa 7,3FFFE34Bh,-003C9ED1h  ;-0.0037
  2660 00001731 F7ED                                    imul    ebp
  2661 00001733 89D5                                    mov     ebp, edx
  2662 00001735 B8E47DC3BF                              mov     eax, -403C821Ch
  2663 0000173A F7EE                                    imul    esi
  2664 0000173C 01EA                                    add     edx, ebp
  2665 0000173E 89531C                                  mov     [ebx+28], edx   ; [ebx+(nn)*4]
  2666 00001741 B87A44C33F                              mov     eax, 3FC3447Ah
  2667 00001746 F7EF                                    imul    edi
  2668 00001748 29D5                                    sub     ebp, edx
  2669 0000174A 896BE0                                  mov     [ebx-32], ebp   ; [ebx-(nn+1)*4]
  2670 0000174D 49                                      dec     ecx
  2671 0000174E 0F8578FEFFFF                            jnz     .lop
  2672 00001754 5B                                      pop     ebx
  2673                                  
  2674                                  .no_antialias:
  2675                                  		; 16/02/2025
  2676                                  
  2677                                  .no_rdtsc_supported@:
  2678 00001755 C3                                      retn
  2679                                  
  2680                                  
  2681                                  ; =============== S U B R O U T I N E =======================================
  2682                                  
  2683                                  
  2684                                  mp3_imdct36:
  2685 00001756 8B06                                    mov     eax, [esi]      ; in: esi=src (sb_hybrid)
  2686                                                                          ; in: edi=dst (sb_samples)
  2687                                                                          ; in: ebx=buf (mdct_buf)
  2688                                                                          ; in: ebp=win (mdct_win)
  2689                                                                          ;
  2690                                                                          ; [esi+0*4]
  2691 00001758 8B5604                                  mov     edx, [esi+4]    ; IRP i,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
  2692 0000175B 01D0                                    add     eax, edx        ; IF i AND 1 (*) ; mov edx,[esi+i*4] ; val[i]
  2693                                                                          ;  add val[i-1]
  2694 0000175D 894604                                  mov     [esi+4], eax    ;  IF i GT 1
  2695                                                                          ;   add  ecx,eax ; add val[i-2]
  2696                                                                          ;   mov  [esi+(i)*4],ecx
  2697                                                                          ;  ELSE
  2698                                                                          ;   mov  [esi+(i)*4],eax
  2699 00001760 89C1                                    mov     ecx, eax        ;  memorize as val[i-2]
  2700 00001762 8B4608                                  mov     eax, [esi+8]    ; ELSE (*) ; [esi+i*4] ; val[i]
  2701 00001765 01C2                                    add     edx, eax        ;  add val[i-1]
  2702 00001767 895608                                  mov     [esi+8], edx    ; [esi+(i)*4
  2703 0000176A 8B560C                                  mov     edx, [esi+12]
  2704 0000176D 01D0                                    add     eax, edx
  2705 0000176F 01C1                                    add     ecx, eax
  2706 00001771 894E0C                                  mov     [esi+12], ecx
  2707 00001774 89C1                                    mov     ecx, eax
  2708 00001776 8B4610                                  mov     eax, [esi+16]
  2709 00001779 01C2                                    add     edx, eax
  2710 0000177B 895610                                  mov     [esi+16], edx
  2711 0000177E 8B5614                                  mov     edx, [esi+20]
  2712 00001781 01D0                                    add     eax, edx
  2713 00001783 01C1                                    add     ecx, eax
  2714 00001785 894E14                                  mov     [esi+20], ecx
  2715 00001788 89C1                                    mov     ecx, eax
  2716 0000178A 8B4618                                  mov     eax, [esi+24]
  2717 0000178D 01C2                                    add     edx, eax
  2718 0000178F 895618                                  mov     [esi+24], edx
  2719 00001792 8B561C                                  mov     edx, [esi+28]
  2720 00001795 01D0                                    add     eax, edx
  2721 00001797 01C1                                    add     ecx, eax
  2722 00001799 894E1C                                  mov     [esi+28], ecx
  2723 0000179C 89C1                                    mov     ecx, eax
  2724 0000179E 8B4620                                  mov     eax, [esi+32]
  2725 000017A1 01C2                                    add     edx, eax
  2726 000017A3 895620                                  mov     [esi+32], edx
  2727 000017A6 8B5624                                  mov     edx, [esi+36]
  2728 000017A9 01D0                                    add     eax, edx
  2729 000017AB 01C1                                    add     ecx, eax
  2730 000017AD 894E24                                  mov     [esi+36], ecx
  2731 000017B0 89C1                                    mov     ecx, eax
  2732 000017B2 8B4628                                  mov     eax, [esi+40]
  2733 000017B5 01C2                                    add     edx, eax
  2734 000017B7 895628                                  mov     [esi+40], edx
  2735 000017BA 8B562C                                  mov     edx, [esi+44]
  2736 000017BD 01D0                                    add     eax, edx
  2737 000017BF 01C1                                    add     ecx, eax
  2738 000017C1 894E2C                                  mov     [esi+44], ecx
  2739 000017C4 89C1                                    mov     ecx, eax
  2740 000017C6 8B4630                                  mov     eax, [esi+48]
  2741 000017C9 01C2                                    add     edx, eax
  2742 000017CB 895630                                  mov     [esi+48], edx
  2743 000017CE 8B5634                                  mov     edx, [esi+52]
  2744 000017D1 01D0                                    add     eax, edx
  2745 000017D3 01C1                                    add     ecx, eax
  2746 000017D5 894E34                                  mov     [esi+52], ecx
  2747 000017D8 89C1                                    mov     ecx, eax
  2748 000017DA 8B4638                                  mov     eax, [esi+56]
  2749 000017DD 01C2                                    add     edx, eax
  2750 000017DF 895638                                  mov     [esi+56], edx
  2751 000017E2 8B563C                                  mov     edx, [esi+60]
  2752 000017E5 01D0                                    add     eax, edx
  2753 000017E7 01C1                                    add     ecx, eax
  2754 000017E9 894E3C                                  mov     [esi+60], ecx
  2755 000017EC 89C1                                    mov     ecx, eax
  2756 000017EE 8B4640                                  mov     eax, [esi+64]
  2757 000017F1 01C2                                    add     edx, eax
  2758 000017F3 895640                                  mov     [esi+64], edx
  2759 000017F6 8B5644                                  mov     edx, [esi+68]
  2760 000017F9 01D0                                    add     eax, edx
  2761 000017FB 01C1                                    add     ecx, eax
  2762 000017FD 894E44                                  mov     [esi+68], ecx
  2763 00001800 89C1                                    mov     ecx, eax
  2764 00001802 53                                      push    ebx
  2765 00001803 55                                      push    ebp
  2766 00001804 57                                      push    edi
  2767 00001805 8B0E                                    mov     ecx, [esi]      ; IRP j,0,1
  2768 00001807 8B5E30                                  mov     ebx, [esi+48]   ; t1 = [esi+(0*2+j)*4], t0 = [esi+(6*2+j)*4]
  2769 0000180A 8B7E20                                  mov     edi, [esi+32]   ; t2 = [esi+(4*2+j)*4]
  2770 0000180D 037E40                                  add     edi, [esi+64]   ; + [esi+(8*2+j)*4]
  2771 00001810 2B7E10                                  sub     edi, [esi+16]   ; - [esi+(2*2+j)*4]
  2772 00001813 8D2C4B                                  lea     ebp, [ebx+ecx*2] ; t2 = src[4*2+j] + src[8*2+j] - src[2*2+j]
  2773                                                                          ; t3 = [t1*2+t0]
  2774 00001816 D1FD                                    sar     ebp, 1          ; sar @@t3,1
  2775 00001818 29D9                                    sub     ecx, ebx        ; sub @@t1,@@t0
  2776 0000181A 89C8                                    mov     eax, ecx        ; @@SUM [@@tmp+(16+j)*4],@@t1,add,@@t2
  2777 0000181C 01F8                                    add     eax, edi
  2778 0000181E A3[70470500]                            mov     [_@@@tmp+40h], eax ; [@@tmp+(16+j)*4]
  2779 00001823 D1FF                                    sar     edi, 1          ; sar @@t2,1
  2780 00001825 89C8                                    mov     eax, ecx        ; @@SUM [@@tmp+(6+j)*4],@@t1,sub,@@t2
  2781 00001827 29F8                                    sub     eax, edi
  2782 00001829 A3[48470500]                            mov     [_@@@tmp+18h], eax ; [@@tmp+(6+j)*4]
  2783 0000182E 8B4610                                  mov     eax, [esi+16]   ; [esi+(4*2+j)*4]
  2784 00001831 034620                                  add     eax, [esi+32]   ; [esi+(2*2+j)*4]
  2785 00001834 D1E0                                    shl     eax, 1
  2786 00001836 BA0AD94778                              mov     edx, 7847D90Ah  ; C2
  2787 0000183B F7EA                                    imul    edx
  2788 0000183D 89D3                                    mov     ebx, edx
  2789 0000183F 8B4620                                  mov     eax, [esi+32]
  2790 00001842 2B4640                                  sub     eax, [esi+64]
  2791 00001845 BA04CB8BD3                              mov     edx, 0D38BCB04h ; negC8
  2792 0000184A F7EA                                    imul    edx
  2793 0000184C 89D1                                    mov     ecx, edx
  2794 0000184E 8B4610                                  mov     eax, [esi+16]
  2795 00001851 034640                                  add     eax, [esi+64]
  2796 00001854 D1E0                                    shl     eax, 1
  2797 00001856 BA7541F29D                              mov     edx, 9DF24175h  ; negC4
  2798 0000185B F7EA                                    imul    edx
  2799 0000185D 89E8                                    mov     eax, ebp
  2800 0000185F 01D8                                    add     eax, ebx
  2801 00001861 01C8                                    add     eax, ecx
  2802 00001863 A3[38470500]                            mov     [_@@@tmp+8], eax
  2803 00001868 89E8                                    mov     eax, ebp
  2804 0000186A 29D8                                    sub     eax, ebx
  2805 0000186C 29D0                                    sub     eax, edx
  2806 0000186E A3[58470500]                            mov     [_@@@tmp+28h], eax
  2807 00001873 89E8                                    mov     eax, ebp
  2808 00001875 01D0                                    add     eax, edx
  2809 00001877 29C8                                    sub     eax, ecx
  2810 00001879 A3[68470500]                            mov     [_@@@tmp+38h], eax
  2811 0000187E 8B4628                                  mov     eax, [esi+40]
  2812 00001881 034638                                  add     eax, [esi+56]
  2813 00001884 2B4608                                  sub     eax, [esi+8]
  2814 00001887 D1E0                                    shl     eax, 1
  2815 00001889 BA5F142691                              mov     edx, 9126145Fh  ; negC3
  2816 0000188E F7EA                                    imul    edx
  2817 00001890 8915[40470500]                          mov     [_@@@tmp+10h], edx
  2818 00001896 8B4608                                  mov     eax, [esi+8]
  2819 00001899 034628                                  add     eax, [esi+40]
  2820 0000189C D1E0                                    shl     eax, 1
  2821 0000189E BA332E0E7E                              mov     edx, 7E0E2E33h  ; C1
  2822 000018A3 F7EA                                    imul    edx
  2823 000018A5 89D7                                    mov     edi, edx
  2824 000018A7 8B4628                                  mov     eax, [esi+40]
  2825 000018AA 2B4638                                  sub     eax, [esi+56]
  2826 000018AD BA2E5E71A8                              mov     edx, 0A8715E2Eh ; negC7
  2827 000018B2 F7EA                                    imul    edx
  2828 000018B4 89D5                                    mov     ebp, edx
  2829 000018B6 8B4608                                  mov     eax, [esi+8]
  2830 000018B9 034638                                  add     eax, [esi+56]
  2831 000018BC D1E0                                    shl     eax, 1
  2832 000018BE BAB822B9AD                              mov     edx, 0ADB922B8h ; negC5
  2833 000018C3 F7EA                                    imul    edx
  2834 000018C5 89D1                                    mov     ecx, edx
  2835 000018C7 8B4618                                  mov     eax, [esi+24]
  2836 000018CA D1E0                                    shl     eax, 1
  2837 000018CC BAA2EBD96E                              mov     edx, 6ED9EBA2h  ; C3
  2838 000018D1 F7EA                                    imul    edx
  2839 000018D3 89E8                                    mov     eax, ebp
  2840 000018D5 01F8                                    add     eax, edi
  2841 000018D7 01D0                                    add     eax, edx
  2842 000018D9 A3[30470500]                            mov     [_@@@tmp], eax
  2843 000018DE 89E8                                    mov     eax, ebp
  2844 000018E0 29C8                                    sub     eax, ecx
  2845 000018E2 29D0                                    sub     eax, edx
  2846 000018E4 A3[50470500]                            mov     [_@@@tmp+20h], eax
  2847 000018E9 89F8                                    mov     eax, edi
  2848 000018EB 01C8                                    add     eax, ecx
  2849 000018ED 29D0                                    sub     eax, edx
  2850 000018EF A3[60470500]                            mov     [_@@@tmp+30h], eax
  2851 000018F4 8B4E04                                  mov     ecx, [esi+4]
  2852 000018F7 8B5E34                                  mov     ebx, [esi+52]
  2853 000018FA 8B7E24                                  mov     edi, [esi+36]
  2854 000018FD 037E44                                  add     edi, [esi+68]
  2855 00001900 2B7E14                                  sub     edi, [esi+20]
  2856 00001903 8D2C4B                                  lea     ebp, [ebx+ecx*2]
  2857 00001906 D1FD                                    sar     ebp, 1
  2858 00001908 29D9                                    sub     ecx, ebx
  2859 0000190A 89C8                                    mov     eax, ecx
  2860 0000190C 01F8                                    add     eax, edi
  2861 0000190E A3[74470500]                            mov     [_@@@tmp+44h], eax
  2862 00001913 D1FF                                    sar     edi, 1
  2863 00001915 89C8                                    mov     eax, ecx
  2864 00001917 29F8                                    sub     eax, edi
  2865 00001919 A3[4C470500]                            mov     [_@@@tmp+1Ch], eax
  2866 0000191E 8B4614                                  mov     eax, [esi+20]   ; t0 = MULH(2*(src[2*2+j]+src[4*2+j]),C2)
  2867 00001921 034624                                  add     eax, [esi+36]
  2868 00001924 D1E0                                    shl     eax, 1
  2869 00001926 BA0AD94778                              mov     edx, 7847D90Ah  ; C2
  2870 0000192B F7EA                                    imul    edx
  2871 0000192D 89D3                                    mov     ebx, edx
  2872 0000192F 8B4624                                  mov     eax, [esi+36]   ; t1 = MULH(src[4*2+j]-src[8*2+j],negC8)
  2873 00001932 2B4644                                  sub     eax, [esi+68]
  2874 00001935 BA04CB8BD3                              mov     edx, 0D38BCB04h ; negC8
  2875 0000193A F7EA                                    imul    edx
  2876 0000193C 89D1                                    mov     ecx, edx
  2877 0000193E 8B4614                                  mov     eax, [esi+20]   ; t2 = MULH(2*(src[2*2+j]+src[8*2+j]),negC4)
  2878 00001941 034644                                  add     eax, [esi+68]
  2879 00001944 D1E0                                    shl     eax, 1
  2880 00001946 BA7541F29D                              mov     edx, 9DF24175h  ; negC4
  2881 0000194B F7EA                                    imul    edx
  2882 0000194D 89E8                                    mov     eax, ebp        ; tmp[2+j] = t3+t0+t1
  2883 0000194F 01D8                                    add     eax, ebx
  2884 00001951 01C8                                    add     eax, ecx
  2885 00001953 A3[3C470500]                            mov     [_@@@tmp+0Ch], eax
  2886 00001958 89E8                                    mov     eax, ebp        ; tmp[10+j] = t3-t0-t2
  2887 0000195A 29D8                                    sub     eax, ebx
  2888 0000195C 29D0                                    sub     eax, edx
  2889 0000195E A3[5C470500]                            mov     [_@@@tmp+2Ch], eax
  2890 00001963 89E8                                    mov     eax, ebp        ; tmp[14+j] = t3+t2-t1
  2891 00001965 01D0                                    add     eax, edx
  2892 00001967 29C8                                    sub     eax, ecx
  2893 00001969 A3[6C470500]                            mov     [_@@@tmp+3Ch], eax
  2894 0000196E 8B462C                                  mov     eax, [esi+44]   ; tmp[4+j] = MULH(2*(src[5*2+j]+src[7*2+j]-src[1*2+j]),negC3)
  2895 00001971 03463C                                  add     eax, [esi+60]
  2896 00001974 2B460C                                  sub     eax, [esi+12]
  2897 00001977 D1E0                                    shl     eax, 1
  2898 00001979 BA5F142691                              mov     edx, 9126145Fh  ; negC3
  2899 0000197E F7EA                                    imul    edx
  2900 00001980 8915[44470500]                          mov     [_@@@tmp+14h], edx
  2901 00001986 8B460C                                  mov     eax, [esi+12]   ; @@MULH @@t2,[esi+(1*2+j)*4],add,[esi+(5*2+j)*4],-,-              ,1,C1,-
  2902                                                                          ; t2 = MULH(2*(src[1*2+j],add,src[5*2+j]),-,-,1,C1)
  2903 00001989 03462C                                  add     eax, [esi+44]
  2904 0000198C D1E0                                    shl     eax, 1
  2905 0000198E BA332E0E7E                              mov     edx, 7E0E2E33h  ; C1
  2906 00001993 F7EA                                    imul    edx
  2907 00001995 89D7                                    mov     edi, edx
  2908 00001997 8B462C                                  mov     eax, [esi+44]   ; @@MULH @@t3,[esi+(5*2+j)*4],sub,[esi+(7*2+j)*4],-,-,
  2909                                                                          ; ,0,negC7,-
  2910                                                                          ;
  2911                                                                          ; t3 = MULH( src[5*2+j],sub,src[7*2+j],-,-,0,negC7)
  2912 0000199A 2B463C                                  sub     eax, [esi+60]
  2913 0000199D BA2E5E71A8                              mov     edx, 0A8715E2Eh ; negC7
  2914 000019A2 F7EA                                    imul    edx
  2915 000019A4 89D5                                    mov     ebp, edx
  2916 000019A6 8B460C                                  mov     eax, [esi+12]   ; t1 = MULH(2*(src[1*2+j],add,src[7*2+j]),-,-,1,negC5)
  2917 000019A9 03463C                                  add     eax, [esi+60]
  2918 000019AC D1E0                                    shl     eax, 1          ; shift = 1
  2919 000019AE BAB822B9AD                              mov     edx, 0ADB922B8h ; negC5
  2920 000019B3 F7EA                                    imul    edx
  2921 000019B5 89D1                                    mov     ecx, edx
  2922 000019B7 8B461C                                  mov     eax, [esi+28]   ; t0 = MULH(2*src[3*2+j],-,-,-,-,1,C3)
  2923 000019BA D1E0                                    shl     eax, 1
  2924 000019BC BAA2EBD96E                              mov     edx, 6ED9EBA2h  ; C3
  2925 000019C1 F7EA                                    imul    edx
  2926 000019C3 89E8                                    mov     eax, ebp
  2927 000019C5 01F8                                    add     eax, edi
  2928 000019C7 01D0                                    add     eax, edx
  2929 000019C9 A3[34470500]                            mov     [_@@@tmp+4], eax
  2930 000019CE 89E8                                    mov     eax, ebp
  2931 000019D0 29C8                                    sub     eax, ecx
  2932 000019D2 29D0                                    sub     eax, edx
  2933 000019D4 A3[54470500]                            mov     [_@@@tmp+24h], eax
  2934 000019D9 89F8                                    mov     eax, edi        ; @@SUM [@@tmp+(12+j)*4],@@t2,add,@@t1,sub,edx
  2935 000019DB 01C8                                    add     eax, ecx
  2936 000019DD 29D0                                    sub     eax, edx
  2937 000019DF A3[64470500]                            mov     [_@@@tmp+34h], eax
  2938 000019E4 5F                                      pop     edi
  2939 000019E5 5D                                      pop     ebp
  2940 000019E6 5B                                      pop     ebx
  2941 000019E7 56                                      push    esi             ; IRP j,0,1,2,3 ; j = 0
  2942 000019E8 8B15[30470500]                          mov     edx, [_@@@tmp] ; t0 = [@@tmp+(j*4+0)*4]
  2943 000019EE 8B35[34470500]                          mov     esi, [_@@@tmp+4] ; t1 = [@@tmp+(j*4+1)*4]
  2944 000019F4 A1[38470500]                            mov     eax, [_@@@tmp+8] ; t2 = [@@tmp+(j*4+2)*4]
  2945 000019F9 8B0D[3C470500]                          mov     ecx, [_@@@tmp+0Ch] ; t2 = [@@tmp+(j*4+3)*4]
  2946 000019FF 29D0                                    sub     eax, edx        ; s2 = t2 - t0
  2947 00001A01 8D1450                                  lea     edx, [eax+edx*2] ; s0 = t2 + t0
  2948 00001A04 A3[28470500]                            mov     [_@@s2], eax ; @@MULH esi,eax ,-,-,-,-,1,icos36h_&j,-
  2949                                                                          ; s2 = MULH(s2*2, icos36h[j])
  2950 00001A09 8915[24470500]                          mov     [_@@s0], edx
  2951 00001A0F 29F1                                    sub     ecx, esi
  2952 00001A11 8D0471                                  lea     eax, [ecx+esi*2]
  2953 00001A14 D1E0                                    shl     eax, 1
  2954 00001A16 BA90953E40                              mov     edx, 403E9590h  ; icos36h_0
  2955 00001A1B F7EA                                    imul    edx
  2956 00001A1D 89D6                                    mov     esi, edx
  2957 00001A1F 89C8                                    mov     eax, ecx        ; @@MULH @@s3,ecx,-,-,-,-,shift_for_8minus&j,icos36h_8minus&j,-
  2958                                                                          ; s3 = MULL(s3,icos36[8-j]) ; <-- "MULL" with "icos36"
  2959 00001A21 C1E004                                  shl     eax, 4
  2960 00001A24 BA2C2ACA5B                              mov     edx, 5BCA2A2Ch  ; icos36h_8 (8-0)
  2961 00001A29 F7EA                                    imul    edx
  2962 00001A2B 8915[2C470500]                          mov     [_@@s3], edx
  2963 00001A31 8B0D[24470500]                          mov     ecx, [_@@s0]
  2964 00001A37 29F1                                    sub     ecx, esi
  2965 00001A39 8D3471                                  lea     esi, [ecx+esi*2]
  2966 00001A3C 8B4524                                  mov     eax, [ebp+36]   ; @@MULH [edi+(9+j)*SBLIMIT*4],[ebp+(9+j)*4],
  2967                                                                          ; -,-,-,-,0,ecx,[ebx+(9+j)*4]
  2968                                                                          ; out[(9+j)*SBLIMIT] = MULH(t0, win[9+j])+buf[9+j]
  2969 00001A3F F7E9                                    imul    ecx
  2970 00001A41 035324                                  add     edx, [ebx+36]   ; [ebx+(9+j)*4]
  2971 00001A44 899780040000                            mov     [edi+1152], edx ; SBLIMIT=32 ; 9*SBLIMIT*4 = 1152
  2972 00001A4A 8B4520                                  mov     eax, [ebp+32]   ; @@MULH [edi+(8-j)*SBLIMIT*4],[ebp+(8-j)*4]
  2973                                                                          ; ,-,-,-,-,0,ecx,[ebx+(8-j)*4]
  2974 00001A4D F7E9                                    imul    ecx
  2975 00001A4F 035320                                  add     edx, [ebx+32]
  2976 00001A52 899700040000                            mov     [edi+1024], edx ; SBLIMIT=32 ; 8*SBLIMIT*4 = 1024
  2977 00001A58 8B456C                                  mov     eax, [ebp+108]
  2978 00001A5B F7EE                                    imul    esi
  2979 00001A5D 895324                                  mov     [ebx+36], edx
  2980 00001A60 8B4568                                  mov     eax, [ebp+104]  ; @@MULH [ebx+(8-j)*4],[ebp+(8-j+18)*4],-,-,-,-,0,esi,-
  2981 00001A63 F7EE                                    imul    esi
  2982 00001A65 895320                                  mov     [ebx+32], edx
  2983 00001A68 8B0D[28470500]                          mov     ecx, [_@@s2]
  2984 00001A6E 8B35[2C470500]                          mov     esi, [_@@s3]
  2985 00001A74 29F1                                    sub     ecx, esi        ; t2 = s2 - s3
  2986 00001A76 8D3471                                  lea     esi, [ecx+esi*2] ; t3 = s2 + s3
  2987 00001A79 8B4500                                  mov     eax, [ebp+0]    ; @@MULH [edi+(0+j)*SBLIMIT*4],[ebp+(0+j)*4],
  2988                                                                          ; -,-,-,-,0,ecx,[ebx+(0+j)*4]
  2989 00001A7C F7E9                                    imul    ecx
  2990 00001A7E 0313                                    add     edx, [ebx]
  2991 00001A80 8917                                    mov     [edi], edx
  2992 00001A82 8B4544                                  mov     eax, [ebp+68]   ; @@MULH [edi+(17-j)*SBLIMIT*4],[ebp+(17-j)*4]
  2993                                                                          ; ,-,-,-,-,0,ecx,[ebx+(17-j)*4]
  2994 00001A85 F7E9                                    imul    ecx
  2995 00001A87 035344                                  add     edx, [ebx+68]
  2996 00001A8A 899780080000                            mov     [edi+2176], edx ; 17*SBLIMIT*4 = 2176
  2997 00001A90 8B4548                                  mov     eax, [ebp+72]   ; @@MULH [ebx+(0+j)*4],[ebp+(0+j+18)*4],-,-,-,-,0,esi,-
  2998 00001A93 F7EE                                    imul    esi
  2999 00001A95 8913                                    mov     [ebx], edx
  3000 00001A97 8B858C000000                            mov     eax, [ebp+140]  ; @@MULH [ebx+(17-j)*4],[ebp+(17-j+18)*4],-,-,-,-,0,esi,-
  3001 00001A9D F7EE                                    imul    esi
  3002 00001A9F 895344                                  mov     [ebx+68], edx
  3003 00001AA2 8B15[40470500]                          mov     edx, [_@@@tmp+10h] ; IRP j,0,1,2,3 ; j = 1
  3004 00001AA8 8B35[44470500]                          mov     esi, [_@@@tmp+14h]
  3005 00001AAE A1[48470500]                            mov     eax, [_@@@tmp+18h]
  3006 00001AB3 8B0D[4C470500]                          mov     ecx, [_@@@tmp+1Ch]
  3007 00001AB9 29D0                                    sub     eax, edx
  3008 00001ABB 8D1450                                  lea     edx, [eax+edx*2]
  3009 00001ABE A3[28470500]                            mov     [_@@s2], eax
  3010 00001AC3 8915[24470500]                          mov     [_@@s0], edx
  3011 00001AC9 29F1                                    sub     ecx, esi
  3012 00001ACB 8D0471                                  lea     eax, [ecx+esi*2]
  3013 00001ACE D1E0                                    shl     eax, 1
  3014 00001AD0 BA07F74142                              mov     edx, 4241F707h  ; icos36h_1
  3015 00001AD5 F7EA                                    imul    edx
  3016 00001AD7 89D6                                    mov     esi, edx
  3017 00001AD9 89C8                                    mov     eax, ecx
  3018 00001ADB C1E002                                  shl     eax, 2
  3019 00001ADE BA1E75A37B                              mov     edx, 7BA3751Eh  ; icos36h_7 (8-1)
  3020 00001AE3 F7EA                                    imul    edx
  3021 00001AE5 8915[2C470500]                          mov     [_@@s3], edx
  3022 00001AEB 8B0D[24470500]                          mov     ecx, [_@@s0]
  3023 00001AF1 29F1                                    sub     ecx, esi
  3024 00001AF3 8D3471                                  lea     esi, [ecx+esi*2]
  3025 00001AF6 8B4528                                  mov     eax, [ebp+40]
  3026 00001AF9 F7E9                                    imul    ecx
  3027 00001AFB 035328                                  add     edx, [ebx+40]
  3028 00001AFE 899700050000                            mov     [edi+1280], edx
  3029 00001B04 8B451C                                  mov     eax, [ebp+28]
  3030 00001B07 F7E9                                    imul    ecx
  3031 00001B09 03531C                                  add     edx, [ebx+28]
  3032 00001B0C 899780030000                            mov     [edi+896], edx
  3033 00001B12 8B4570                                  mov     eax, [ebp+112]
  3034 00001B15 F7EE                                    imul    esi
  3035 00001B17 895328                                  mov     [ebx+40], edx
  3036 00001B1A 8B4564                                  mov     eax, [ebp+100]
  3037 00001B1D F7EE                                    imul    esi
  3038 00001B1F 89531C                                  mov     [ebx+28], edx
  3039 00001B22 8B0D[28470500]                          mov     ecx, [_@@s2]
  3040 00001B28 8B35[2C470500]                          mov     esi, [_@@s3]
  3041 00001B2E 29F1                                    sub     ecx, esi
  3042 00001B30 8D3471                                  lea     esi, [ecx+esi*2]
  3043 00001B33 8B4504                                  mov     eax, [ebp+4]
  3044 00001B36 F7E9                                    imul    ecx
  3045 00001B38 035304                                  add     edx, [ebx+4]
  3046 00001B3B 899780000000                            mov     [edi+128], edx
  3047 00001B41 8B4540                                  mov     eax, [ebp+64]
  3048 00001B44 F7E9                                    imul    ecx
  3049 00001B46 035340                                  add     edx, [ebx+64]
  3050 00001B49 899700080000                            mov     [edi+2048], edx
  3051 00001B4F 8B454C                                  mov     eax, [ebp+76]
  3052 00001B52 F7EE                                    imul    esi
  3053 00001B54 895304                                  mov     [ebx+4], edx
  3054 00001B57 8B8588000000                            mov     eax, [ebp+136]
  3055 00001B5D F7EE                                    imul    esi
  3056 00001B5F 895340                                  mov     [ebx+64], edx
  3057 00001B62 8B15[50470500]                          mov     edx, [_@@@tmp+20h] ; IRP j,0,1,2,3 ; j = 2
  3058 00001B68 8B35[54470500]                          mov     esi, [_@@@tmp+24h]
  3059 00001B6E A1[58470500]                            mov     eax, [_@@@tmp+28h]
  3060 00001B73 8B0D[5C470500]                          mov     ecx, [_@@@tmp+2Ch]
  3061 00001B79 29D0                                    sub     eax, edx
  3062 00001B7B 8D1450                                  lea     edx, [eax+edx*2]
  3063 00001B7E A3[28470500]                            mov     [_@@s2], eax
  3064 00001B83 8915[24470500]                          mov     [_@@s0], edx
  3065 00001B89 29F1                                    sub     ecx, esi
  3066 00001B8B 8D0471                                  lea     eax, [ecx+esi*2]
  3067 00001B8E D1E0                                    shl     eax, 1
  3068 00001B90 BA6CBE9D46                              mov     edx, 469DBE6Ch  ; icos36h_2
  3069 00001B95 F7EA                                    imul    edx
  3070 00001B97 89D6                                    mov     esi, edx
  3071 00001B99 89C8                                    mov     eax, ecx
  3072 00001B9B C1E002                                  shl     eax, 2
  3073 00001B9E BA62ECB74B                              mov     edx, 4BB7EC62h  ; icos36h_6 (8-2)
  3074 00001BA3 F7EA                                    imul    edx
  3075 00001BA5 8915[2C470500]                          mov     [_@@s3], edx
  3076 00001BAB 8B0D[24470500]                          mov     ecx, [_@@s0]
  3077 00001BB1 29F1                                    sub     ecx, esi
  3078 00001BB3 8D3471                                  lea     esi, [ecx+esi*2]
  3079 00001BB6 8B452C                                  mov     eax, [ebp+44]
  3080 00001BB9 F7E9                                    imul    ecx
  3081 00001BBB 03532C                                  add     edx, [ebx+44]
  3082 00001BBE 899780050000                            mov     [edi+1408], edx
  3083 00001BC4 8B4518                                  mov     eax, [ebp+24]
  3084 00001BC7 F7E9                                    imul    ecx
  3085 00001BC9 035318                                  add     edx, [ebx+24]
  3086 00001BCC 899700030000                            mov     [edi+768], edx
  3087 00001BD2 8B4574                                  mov     eax, [ebp+116]
  3088 00001BD5 F7EE                                    imul    esi
  3089 00001BD7 89532C                                  mov     [ebx+44], edx
  3090 00001BDA 8B4560                                  mov     eax, [ebp+96]
  3091 00001BDD F7EE                                    imul    esi
  3092 00001BDF 895318                                  mov     [ebx+24], edx
  3093 00001BE2 8B0D[28470500]                          mov     ecx, [_@@s2]
  3094 00001BE8 8B35[2C470500]                          mov     esi, [_@@s3]
  3095 00001BEE 29F1                                    sub     ecx, esi
  3096 00001BF0 8D3471                                  lea     esi, [ecx+esi*2]
  3097 00001BF3 8B4508                                  mov     eax, [ebp+8]
  3098 00001BF6 F7E9                                    imul    ecx
  3099 00001BF8 035308                                  add     edx, [ebx+8]
  3100 00001BFB 899700010000                            mov     [edi+256], edx
  3101 00001C01 8B453C                                  mov     eax, [ebp+60]
  3102 00001C04 F7E9                                    imul    ecx
  3103 00001C06 03533C                                  add     edx, [ebx+60]
  3104 00001C09 899780070000                            mov     [edi+1920], edx
  3105 00001C0F 8B4550                                  mov     eax, [ebp+80]
  3106 00001C12 F7EE                                    imul    esi
  3107 00001C14 895308                                  mov     [ebx+8], edx
  3108 00001C17 8B8584000000                            mov     eax, [ebp+132]
  3109 00001C1D F7EE                                    imul    esi
  3110 00001C1F 89533C                                  mov     [ebx+60], edx
  3111 00001C22 8B15[60470500]                          mov     edx, [_@@@tmp+30h] ; IRP j,0,1,2,3 ; j = 3
  3112 00001C28 8B35[64470500]                          mov     esi, [_@@@tmp+34h]
  3113 00001C2E A1[68470500]                            mov     eax, [_@@@tmp+38h]
  3114 00001C33 8B0D[6C470500]                          mov     ecx, [_@@@tmp+3Ch]
  3115 00001C39 29D0                                    sub     eax, edx
  3116 00001C3B 8D1450                                  lea     edx, [eax+edx*2]
  3117 00001C3E A3[28470500]                            mov     [_@@s2], eax
  3118 00001C43 8915[24470500]                          mov     [_@@s0], edx
  3119 00001C49 29F1                                    sub     ecx, esi
  3120 00001C4B 8D0471                                  lea     eax, [ecx+esi*2]
  3121 00001C4E D1E0                                    shl     eax, 1
  3122 00001C50 BABE2B214E                              mov     edx, 4E212BBEh  ; icos36h_3
  3123 00001C55 F7EA                                    imul    edx
  3124 00001C57 89D6                                    mov     esi, edx
  3125 00001C59 89C8                                    mov     eax, ecx
  3126 00001C5B D1E0                                    shl     eax, 1
  3127 00001C5D BADFA1946F                              mov     edx, 6F94A1DFh  ; icos36h_5 (8-3)
  3128 00001C62 F7EA                                    imul    edx
  3129 00001C64 8915[2C470500]                          mov     [_@@s3], edx
  3130 00001C6A 8B0D[24470500]                          mov     ecx, [_@@s0]
  3131 00001C70 29F1                                    sub     ecx, esi
  3132 00001C72 8D3471                                  lea     esi, [ecx+esi*2]
  3133 00001C75 8B4530                                  mov     eax, [ebp+48]
  3134 00001C78 F7E9                                    imul    ecx
  3135 00001C7A 035330                                  add     edx, [ebx+48]
  3136 00001C7D 899700060000                            mov     [edi+1536], edx
  3137 00001C83 8B4514                                  mov     eax, [ebp+20]
  3138 00001C86 F7E9                                    imul    ecx
  3139 00001C88 035314                                  add     edx, [ebx+20]
  3140 00001C8B 899780020000                            mov     [edi+640], edx
  3141 00001C91 8B4578                                  mov     eax, [ebp+120]
  3142 00001C94 F7EE                                    imul    esi
  3143 00001C96 895330                                  mov     [ebx+30h], edx
  3144 00001C99 8B455C                                  mov     eax, [ebp+92]
  3145 00001C9C F7EE                                    imul    esi
  3146 00001C9E 895314                                  mov     [ebx+20], edx
  3147 00001CA1 8B0D[28470500]                          mov     ecx, [_@@s2]
  3148 00001CA7 8B35[2C470500]                          mov     esi, [_@@s3]
  3149 00001CAD 29F1                                    sub     ecx, esi
  3150 00001CAF 8D3471                                  lea     esi, [ecx+esi*2]
  3151 00001CB2 8B450C                                  mov     eax, [ebp+12]
  3152 00001CB5 F7E9                                    imul    ecx
  3153 00001CB7 03530C                                  add     edx, [ebx+12]
  3154 00001CBA 899780010000                            mov     [edi+384], edx
  3155 00001CC0 8B4538                                  mov     eax, [ebp+56]
  3156 00001CC3 F7E9                                    imul    ecx
  3157 00001CC5 035338                                  add     edx, [ebx+56]
  3158 00001CC8 899700070000                            mov     [edi+1792], edx
  3159 00001CCE 8B4554                                  mov     eax, [ebp+84]
  3160 00001CD1 F7EE                                    imul    esi
  3161 00001CD3 89530C                                  mov     [ebx+12], edx
  3162 00001CD6 8B8580000000                            mov     eax, [ebp+128]
  3163 00001CDC F7EE                                    imul    esi
  3164 00001CDE 895338                                  mov     [ebx+56], edx
  3165 00001CE1 8B0D[70470500]                          mov     ecx, [_@@@tmp+40h] ; IRP j,4
  3166                                                                          ; [@@tmp+(j*4+0)*4]
  3167 00001CE7 A1[74470500]                            mov     eax, [_@@@tmp+44h] ; [@@tmp+(j*4+1)*4]
  3168 00001CEC D1E0                                    shl     eax, 1
  3169 00001CEE BA9A79825A                              mov     edx, 5A82799Ah  ; icos36h_4 (8-4)
  3170 00001CF3 F7EA                                    imul    edx
  3171 00001CF5 29D1                                    sub     ecx, edx
  3172 00001CF7 8D3451                                  lea     esi, [ecx+edx*2]
  3173 00001CFA 8B4534                                  mov     eax, [ebp+52]   ; @@MULH [edi+(9+j)*SBLIMIT*4],[ebp+(9+j)*4],
  3174                                                                          ; -,-,-,-,0,ecx,[ebx+(9+j)*4]
  3175                                                                          ; out[(9+4)*SBLIMIT] = MULH(t0,win[9+4])+buf[9+4]
  3176 00001CFD F7E9                                    imul    ecx
  3177 00001CFF 035334                                  add     edx, [ebx+52]
  3178 00001D02 899780060000                            mov     [edi+1664], edx ; 13*SBLIMIT*4 = 1664
  3179 00001D08 8B4510                                  mov     eax, [ebp+16]   ; @MULH [edi+(8-j)*SBLIMIT*4],[ebp+(8-j)*4],
  3180                                                                          ; -,-,-,-,0,ecx,[ebx+(8-j)*4]
  3181 00001D0B F7E9                                    imul    ecx
  3182 00001D0D 035310                                  add     edx, [ebx+16]
  3183 00001D10 899700020000                            mov     [edi+512], edx
  3184 00001D16 8B457C                                  mov     eax, [ebp+124]  ; @@MULH [ebx+(9+j)*4],[ebp+(9+j+18)*4] ,-,-,-,-,0,esi,-
  3185 00001D19 F7EE                                    imul    esi
  3186 00001D1B 895334                                  mov     [ebx+52], edx
  3187 00001D1E 8B4558                                  mov     eax, [ebp+88]   ; @@MULH [ebx+(8-j)*4],[ebp+(8-j+18)*4],-,-,-,-,0,esi,-
  3188 00001D21 F7EE                                    imul    esi
  3189 00001D23 895310                                  mov     [ebx+16], edx
  3190 00001D26 5E                                      pop     esi
  3191 00001D27 C3                                      retn
  3192                                  
  3193                                  
  3194                                  ; =============== S U B R O U T I N E =======================================
  3195                                  
  3196                                  
  3197                                  mp3_imdct12:
  3198 00001D28 8B06                                    mov     eax, [esi]      ; in: esi=src - out: [out2_...]
  3199 00001D2A A3[78470500]                            mov     [_@@tmp0], eax  ; IRP nn,0,1,2,3,4,5
  3200                                                                          ;  @@tmp&nn rd 1
  3201                                                                          ; ENDM
  3202                                                                          ; mov  eax,[esi+0*3*4] ; = src[0*3]
  3203 00001D2F 8B560C                                  mov     edx, [esi+12]   ; [esi+1*3*4] ; = src[1*3]
  3204 00001D32 01D0                                    add     eax, edx        ; = src[0*3]+src[1*3]
  3205 00001D34 A3[7C470500]                            mov     [_@@tmp1], eax
  3206 00001D39 8B4618                                  mov     eax, [esi+24]
  3207 00001D3C 01C2                                    add     edx, eax
  3208 00001D3E 8915[80470500]                          mov     [_@@tmp2], edx
  3209 00001D44 8B5624                                  mov     edx, [esi+36]   ; [esi+3*3*4]
  3210 00001D47 01D0                                    add     eax, edx
  3211 00001D49 A3[84470500]                            mov     [_@@tmp3], eax
  3212 00001D4E 8B4630                                  mov     eax, [esi+48]
  3213 00001D51 01C2                                    add     edx, eax
  3214 00001D53 8915[88470500]                          mov     [_@@tmp4], edx
  3215 00001D59 8B563C                                  mov     edx, [esi+60]   ; [esi+5*3*4]
  3216 00001D5C 01D0                                    add     eax, edx        ; = src[4*3]+src[5*3]
  3217 00001D5E 0305[84470500]                          add     eax, [_@@tmp3]
  3218 00001D64 A3[8C470500]                            mov     [_@@tmp5], eax  ; tmp5 = src[4*3]+src[5*3]+tmp3
  3219 00001D69 8B15[7C470500]                          mov     edx, [_@@tmp1]
  3220 00001D6F 0115[84470500]                          add     [_@@tmp3], edx
  3221 00001D75 A1[80470500]                            mov     eax, [_@@tmp2]  ; @@MULH @@tmp2,@@tmp2,-,-,-,-,1,C3,-
  3222                                                                          ; tmp2 = MULH(2*tmp2,C3)
  3223 00001D7A D1E0                                    shl     eax, 1
  3224 00001D7C BAA2EBD96E                              mov     edx, 6ED9EBA2h  ; C3
  3225 00001D81 F7EA                                    imul    edx
  3226 00001D83 8915[80470500]                          mov     [_@@tmp2], edx
  3227 00001D89 A1[84470500]                            mov     eax, [_@@tmp3]  ; @@MULH @@tmp3,@@tmp3,-,-,-,-,2,C3,-
  3228                                                                          ; tmp3 = MULH(4*tmp3,C3)
  3229 00001D8E C1E002                                  shl     eax, 2
  3230 00001D91 BAA2EBD96E                              mov     edx, 6ED9EBA2h  ; C3
  3231 00001D96 F7EA                                    imul    edx
  3232 00001D98 8915[84470500]                          mov     [_@@tmp3], edx
  3233 00001D9E A1[7C470500]                            mov     eax, [_@@tmp1]  ; @@MULH edx,@@tmp1,sub,@@tmp5,-,-,1,icos36h_4,-
  3234 00001DA3 2B05[8C470500]                          sub     eax, [_@@tmp5]  ; t2 = MULH(2*(tmp1-tmp5),icos36h_4)
  3235 00001DA9 D1E0                                    shl     eax, 1
  3236 00001DAB BA9A79825A                              mov     edx, 5A82799Ah  ; icos36h_4
  3237 00001DB0 F7EA                                    imul    edx
  3238 00001DB2 A1[78470500]                            mov     eax, [_@@tmp0]  ; @@SUM eax,@@tmp0,sub,@@tmp4,-,-
  3239 00001DB7 2B05[88470500]                          sub     eax, [_@@tmp4]  ; t1 = tmp0 - tmp4
  3240 00001DBD 29D0                                    sub     eax, edx        ; @@CAST macro t1,t2,dst0,dst1,dst2,dst3
  3241                                                                          ;   sub  t1,t2                           ;t1-t2
  3242                                                                          ;   lea  t2,[t1+t2*2]                    ;t1+t2
  3243                                                                          ;   mov  dword ptr [mp3_out2_a&dst0],t1  ;t1-t2
  3244                                                                          ;   mov  dword ptr [mp3_out2_b&dst0],t2  ;t1+t2
  3245                                                                          ; endm
  3246 00001DBF 8D1450                                  lea     edx, [eax+edx*2] ; @@CAST eax,edx,1,4,7,10
  3247                                                                          ; out2[1,4,7,10]=t1-t2,t1-t2,t1+t2,t1+t2
  3248 00001DC2 A3[94470500]                            mov     [mp3_out2_a1], eax
  3249 00001DC7 8915[A0470500]                          mov     [mp3_out2_b1], edx
  3250 00001DCD A1[88470500]                            mov     eax, [_@@tmp4]
  3251 00001DD2 8B15[7C470500]                          mov     edx, [_@@tmp1]
  3252 00001DD8 D1F8                                    sar     eax, 1
  3253 00001DDA D1E2                                    shl     edx, 1
  3254 00001DDC 0105[78470500]                          add     [_@@tmp0], eax  ; tmp0 = tmp0 + tmp4/2
  3255 00001DE2 0115[8C470500]                          add     [_@@tmp5], edx  ; tmp5 = tmp5 + tmp1*2
  3256 00001DE8 A1[8C470500]                            mov     eax, [_@@tmp5]  ; @@MULH edx,@@tmp5,add,@@tmp3,-,-,0,icos36h_1,-
  3257 00001DED 0305[84470500]                          add     eax, [_@@tmp3]
  3258 00001DF3 BA07F74142                              mov     edx, 4241F707h  ; icos36h_1
  3259 00001DF8 F7EA                                    imul    edx
  3260 00001DFA A1[78470500]                            mov     eax, [_@@tmp0]  ; @@SUM eax,@@tmp0,add,@@tmp2,-,-
  3261 00001DFF 0305[80470500]                          add     eax, [_@@tmp2]
  3262 00001E05 29D0                                    sub     eax, edx        ; @@CAST eax,edx,2,3,8,9
  3263 00001E07 8D1450                                  lea     edx, [eax+edx*2]
  3264 00001E0A A3[98470500]                            mov     [mp3_out2_a2], eax
  3265 00001E0F 8915[A4470500]                          mov     [mp3_out2_b2], edx
  3266 00001E15 A1[8C470500]                            mov     eax, [_@@tmp5]  ; @@MULH edx,@@tmp5,sub,@@tmp3,-,-,1,icos36h_7,-
  3267 00001E1A 2B05[84470500]                          sub     eax, [_@@tmp3]
  3268 00001E20 D1E0                                    shl     eax, 1
  3269 00001E22 BA1E75A37B                              mov     edx, 7BA3751Eh  ; icos36h_7
  3270 00001E27 F7EA                                    imul    edx
  3271 00001E29 A1[78470500]                            mov     eax, [_@@tmp0]  ; @@SUM eax,@@tmp0,sub,@@tmp2,-,-
  3272 00001E2E 2B05[80470500]                          sub     eax, [_@@tmp2]
  3273 00001E34 29D0                                    sub     eax, edx        ; @@CAST eax,edx,0,5,6,11
  3274 00001E36 8D1450                                  lea     edx, [eax+edx*2]
  3275 00001E39 A3[90470500]                            mov     [mp3_out2_a0], eax
  3276 00001E3E 8915[9C470500]                          mov     [mp3_out2_b0], edx
  3277 00001E44 C3                                      retn
  3278                                  
  3279                                  
  3280                                  ; =============== S U B R O U T I N E =======================================
  3281                                  
  3282                                  
  3283                                  mp3_compute_imdct:
  3284                                  		; 16/02/2025
  3285                                  
  3286                                  .no_rdtsc_supported:
  3287 00001E45 53                                      push    ebx
  3288 00001E46 8B4B60                                  mov     ecx, [ebx+96]   ; [ebx+$mp3gr_num_nonzero_hybrids_div9]
  3289 00001E49 6BC109                                  imul    eax, ecx, 9
  3290 00001E4C 8DBC83A0000000                          lea     edi, [ebx+eax*4+160] ; [ebx+$mp3gr_sb_hybrid+eax*4]
  3291 00001E53 E322                                    jecxz   .breakout
  3292                                  
  3293                                  .scan_zero_lop:
  3294 00001E55 83EF24                                  sub     edi, 36         ; index-9
  3295 00001E58 8B07                                    mov     eax, [edi]      ; [edi+0*4]
  3296 00001E5A 0B4704                                  or      eax, [edi+4]
  3297 00001E5D 0B4708                                  or      eax, [edi+8]
  3298 00001E60 0B470C                                  or      eax, [edi+12]
  3299 00001E63 0B4710                                  or      eax, [edi+16]
  3300 00001E66 0B4714                                  or      eax, [edi+20]
  3301 00001E69 0B4718                                  or      eax, [edi+24]
  3302 00001E6C 0B471C                                  or      eax, [edi+28]
  3303 00001E6F 0B4720                                  or      eax, [edi+32]   ; [edi+8*4]
  3304 00001E72 7503                                    jnz     short .breakout
  3305 00001E74 49                                      dec     ecx
  3306 00001E75 75DE                                    jnz     short .scan_zero_lop
  3307                                  
  3308                                  .breakout:
  3309 00001E77 41                                      inc     ecx             ; div9+1
  3310 00001E78 D1E9                                    shr     ecx, 1          ; div18
  3311 00001E7A 890D[BC470500]                          mov     [_@@sblimit], ecx
  3312 00001E80 837B2C02                                cmp     dword [ebx+44], 2 ; [ebx+$mp3gr_block_type]
  3313 00001E84 7505                                    jnz     short .this_long_end
  3314 00001E86 8B4B30                                  mov     ecx, [ebx+48]   ; [ebx+$mp3gr_switch_point]
  3315 00001E89 D1E1                                    shl     ecx, 1          ; 0,1 --> 0,2
  3316                                  
  3317                                  .this_long_end:
  3318 00001E8B 890D[B8470500]                          mov     [_@@mdct_long_end], ecx
  3319 00001E91 8B4330                                  mov     eax, [ebx+48]   ; [ebx+$mp3gr_switch_point]
  3320 00001E94 A3[C0470500]                            mov     [_@@switch_point], eax
  3321 00001E99 8B432C                                  mov     eax, [ebx+44]   ; [ebx+$mp3gr_block_type]
  3322 00001E9C 69C090000000                            imul    eax, 144        ; 1*36*4
  3323 00001EA2 A3[B4470500]                            mov     [_@@www], eax
  3324 00001EA7 8B0D[88120100]                          mov     ecx, [mp3_curr_channel]
  3325 00001EAD A1[8C120100]                            mov     eax, [mp3_curr_granule]
  3326 00001EB2 69C900120000                            imul    ecx, 4608       ; 36*SBLIMIT*4 ; channel ; sb_samples[ch][gr*18]
  3327 00001EB8 69C000090000                            imul    eax, 2304       ; 18*SBLIMIT*4 ; frame=granule*18
  3328 00001EBE 8DBC01[ECDB0000]                        lea     edi, [mp3_sb_samples+ecx+eax]
  3329 00001EC5 8DB3A0000000                            lea     esi, [ebx+160]  ; [ebx+$mp3gr_sb_hybrid]
  3330 00001ECB A1[88120100]                            mov     eax, [mp3_curr_channel]
  3331 00001ED0 69C000090000                            imul    eax, 2304       ; SBLIMIT*18*4
  3332 00001ED6 8D98[ECFF0000]                          lea     ebx, [mp3_mdct_buf+eax]
  3333                                  		
  3334                                  		; 16/02/2025
  3335                                  .no_rdtsc_supported@:
  3336 00001EDC C705[B0470500]0000-                     mov	dword [_@@@JJJ], 0
  3336 00001EE4 0000               
  3337 00001EE6 833D[B8470500]00                        cmp	dword [_@@mdct_long_end], 0
  3338 00001EED 744D                                    jz      short .imdct36_done
  3339                                  
  3340                                  .imdct36_lop:
  3341 00001EEF BD[18010500]                            mov	ebp, mp3_mdct_win ; for j=0 to mdct_long_end-1
  3342 00001EF4 833D[B0470500]02                        cmp	dword [_@@@JJJ], 2
  3343 00001EFB 19C0                                    sbb	eax, eax
  3344 00001EFD 2305[C0470500]                          and	eax, [_@@switch_point]
  3345 00001F03 7506                                    jnz	short .this_window ; force window 0
  3346 00001F05 032D[B4470500]                          add	ebp, [_@@www] ; mdct_win
  3347                                  
  3348                                  .this_window:
  3349 00001F0B A1[B0470500]                            mov	eax, [_@@@JJJ]
  3350 00001F10 D1E8                                    shr	eax, 1          ; cy=0,1
  3351 00001F12 19C0                                    sbb	eax, eax        ; eax=0,FFFFFFFFh
  3352 00001F14 2540020000                              and	eax, 576        ; 4*36*4
  3353 00001F19 01C5                                    add	ebp, eax
  3354 00001F1B E836F8FFFF                              call	mp3_imdct36
  3355 00001F20 83C704                                  add	edi, 4          ; 1*4 ; dst
  3356 00001F23 83C648                                  add	esi, 72         ; 18*4 ; sb_hybrid
  3357 00001F26 83C348                                  add	ebx, 72         ; mdct_buf ; next
  3358 00001F29 FF05[B0470500]                          inc	dword [_@@@JJJ]
  3359 00001F2F A1[B0470500]                            mov	eax, [_@@@JJJ]
  3360 00001F34 3B05[B8470500]                          cmp	eax, [_@@mdct_long_end]
  3361 00001F3A 72B3                                    jb	short .imdct36_lop
  3362                                  
  3363                                  .imdct36_done:
  3364                                  		; 16/02/2025
  3365                                  .no_rdtsc_supported@@:
  3366                                  
  3367                                  		; 16/02/2025
  3368                                  .no_rdtsc_supported@@@:
  3369 00001F3C A1[B0470500]                            mov     eax, [_@@@JJJ]
  3370 00001F41 3B05[BC470500]                          cmp     eax, [_@@sblimit]
  3371 00001F47 0F83D7020000                            jnb     .imdct12_done
  3372                                  
  3373                                  .imdct12_lop:
  3374 00001F4D BD[38020500]                            mov     ebp, (mp3_mdct_win+120h) ; for j=mdct_long_end to sblimit-1
  3375 00001F52 A1[B0470500]                            mov     eax, [_@@@JJJ]
  3376 00001F57 D1E8                                    shr     eax, 1          ; cy=0,1
  3377 00001F59 19C0                                    sbb     eax, eax        ; eax=0,FFFFFFFFh
  3378 00001F5B 2540020000                              and     eax, 576        ; 4*36*4
  3379 00001F60 01C5                                    add     ebp, eax        ; mdct_win
  3380 00001F62 8B03                                    mov     eax, [ebx]      ; IRP i,0,1,2,3,4,5
  3381 00001F64 8907                                    mov     [edi], eax      ; @@SUM [edi+i*SBLIMIT*4],[ebx+(i+0)*4],-,-,-,-
  3382 00001F66 8B4304                                  mov     eax, [ebx+4]
  3383 00001F69 898780000000                            mov     [edi+128], eax
  3384 00001F6F 8B4308                                  mov     eax, [ebx+8]
  3385 00001F72 898700010000                            mov     [edi+256], eax
  3386 00001F78 8B430C                                  mov     eax, [ebx+12]
  3387 00001F7B 898780010000                            mov     [edi+384], eax
  3388 00001F81 8B4310                                  mov     eax, [ebx+16]
  3389 00001F84 898700020000                            mov     [edi+512], eax
  3390 00001F8A 8B4314                                  mov     eax, [ebx+20]
  3391 00001F8D 898780020000                            mov     [edi+640], eax  ; ENDM
  3392 00001F93 81C700030000                            add     edi, 768        ; 6*SBLIMIT*4
  3393 00001F99 E88AFDFFFF                              call    mp3_imdct12
  3394 00001F9E A1[90470500]                            mov     eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5
  3395 00001FA3 8B5500                                  mov     edx, [ebp+0]    ; @@MULH [edi+i*SBLIMIT*4],[mp3_out2_a&i],
  3396                                                                          ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(1*6+i)*4]
  3397 00001FA6 F7EA                                    imul    edx
  3398 00001FA8 035318                                  add     edx, [ebx+24]
  3399 00001FAB 8917                                    mov     [edi], edx
  3400 00001FAD A1[9C470500]                            mov     eax, [mp3_out2_b0] ; @@MULH [ebx+(2*6+i)*4],[mp3_out2_b&i],
  3401                                                                          ; -,-,-,-,0,[ebp+(i+6)*4],-
  3402 00001FB2 8B5518                                  mov     edx, [ebp+24]
  3403 00001FB5 F7EA                                    imul    edx
  3404 00001FB7 895330                                  mov     [ebx+48], edx
  3405 00001FBA A1[94470500]                            mov     eax, [mp3_out2_a1] ; i = 1
  3406 00001FBF 8B5504                                  mov     edx, [ebp+4]
  3407 00001FC2 F7EA                                    imul    edx
  3408 00001FC4 03531C                                  add     edx, [ebx+28]
  3409 00001FC7 899780000000                            mov     [edi+128], edx
  3410 00001FCD A1[A0470500]                            mov     eax, [mp3_out2_b1]
  3411 00001FD2 8B551C                                  mov     edx, [ebp+28]
  3412 00001FD5 F7EA                                    imul    edx
  3413 00001FD7 895334                                  mov     [ebx+52], edx
  3414 00001FDA A1[98470500]                            mov     eax, [mp3_out2_a2] ; i = 2
  3415 00001FDF 8B5508                                  mov     edx, [ebp+8]
  3416 00001FE2 F7EA                                    imul    edx
  3417 00001FE4 035320                                  add     edx, [ebx+32]
  3418 00001FE7 899700010000                            mov     [edi+256], edx
  3419 00001FED A1[A4470500]                            mov     eax, [mp3_out2_b2]
  3420 00001FF2 8B5520                                  mov     edx, [ebp+32]
  3421 00001FF5 F7EA                                    imul    edx
  3422 00001FF7 895338                                  mov     [ebx+56], edx
  3423 00001FFA A1[98470500]                            mov     eax, [mp3_out2_a2] ; i = 3 ; mp3_out2_a3 equ mp3_out2_a2
  3424 00001FFF 8B550C                                  mov     edx, [ebp+12]
  3425 00002002 F7EA                                    imul    edx
  3426 00002004 035324                                  add     edx, [ebx+36]
  3427 00002007 899780010000                            mov     [edi+384], edx
  3428 0000200D A1[A4470500]                            mov     eax, [mp3_out2_b2] ; mp3_out2_b3 equ mp3_out2_b2
  3429 00002012 8B5524                                  mov     edx, [ebp+36]
  3430 00002015 F7EA                                    imul    edx
  3431 00002017 89533C                                  mov     [ebx+60], edx
  3432 0000201A A1[94470500]                            mov     eax, [mp3_out2_a1] ; i = 4 ; mp3_out2_a4 equ mp3_out2_a1
  3433 0000201F 8B5510                                  mov     edx, [ebp+16]
  3434 00002022 F7EA                                    imul    edx
  3435 00002024 035328                                  add     edx, [ebx+40]
  3436 00002027 899700020000                            mov     [edi+512], edx
  3437 0000202D A1[A0470500]                            mov     eax, [mp3_out2_b1] ; mp3_out2_b4 equ mp3_out2_b1
  3438 00002032 8B5528                                  mov     edx, [ebp+40]
  3439 00002035 F7EA                                    imul    edx
  3440 00002037 895340                                  mov     [ebx+64], edx
  3441 0000203A A1[90470500]                            mov     eax, [mp3_out2_a0] ; i = 5 ; mp3_out2_a5 equ mp3_out2_a0
  3442 0000203F 8B5514                                  mov     edx, [ebp+20]
  3443 00002042 F7EA                                    imul    edx
  3444 00002044 03532C                                  add     edx, [ebx+44]
  3445 00002047 899780020000                            mov     [edi+640], edx
  3446 0000204D A1[9C470500]                            mov     eax, [mp3_out2_b0] ; mp3_out2_b5 equ mp3_out2_b0
  3447 00002052 8B552C                                  mov     edx, [ebp+44]
  3448 00002055 F7EA                                    imul    edx
  3449 00002057 895344                                  mov     [ebx+68], edx   ; ENDM
  3450 0000205A 81C700030000                            add     edi, 768        ; 6*SBLIMIT*4
  3451 00002060 83C604                                  add     esi, 4          ; sb_hybrid
  3452 00002063 E8C0FCFFFF                              call    mp3_imdct12
  3453 00002068 A1[90470500]                            mov     eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5
  3454 0000206D 8B5500                                  mov     edx, [ebp+0]    ; @@MULH [edi+i*SBLIMIT*4],[mp3_out2_a&i],
  3455                                                                          ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(2*6+i)*4]
  3456 00002070 F7EA                                    imul    edx             ; @@MULH [ebx+(0*6+i)*4],[mp3_out2_b&i],
  3457                                                                          ; -,-,-,-,0,[ebp+(i+6)*4],-
  3458 00002072 035330                                  add     edx, [ebx+48]
  3459 00002075 8917                                    mov     [edi], edx
  3460 00002077 A1[9C470500]                            mov     eax, [mp3_out2_b0]
  3461 0000207C 8B5518                                  mov     edx, [ebp+18h]
  3462 0000207F F7EA                                    imul    edx
  3463 00002081 8913                                    mov     [ebx], edx
  3464 00002083 A1[94470500]                            mov     eax, [mp3_out2_a1] ; i = 1
  3465 00002088 8B5504                                  mov     edx, [ebp+4]
  3466 0000208B F7EA                                    imul    edx
  3467 0000208D 035334                                  add     edx, [ebx+52]
  3468 00002090 899780000000                            mov     [edi+128], edx
  3469 00002096 A1[A0470500]                            mov     eax, [mp3_out2_b1]
  3470 0000209B 8B551C                                  mov     edx, [ebp+28]
  3471 0000209E F7EA                                    imul    edx
  3472 000020A0 895304                                  mov     [ebx+4], edx
  3473 000020A3 A1[98470500]                            mov     eax, [mp3_out2_a2] ; i = 2
  3474 000020A8 8B5508                                  mov     edx, [ebp+8]
  3475 000020AB F7EA                                    imul    edx
  3476 000020AD 035338                                  add     edx, [ebx+56]
  3477 000020B0 899700010000                            mov     [edi+256], edx
  3478 000020B6 A1[A4470500]                            mov     eax, [mp3_out2_b2]
  3479 000020BB 8B5520                                  mov     edx, [ebp+32]
  3480 000020BE F7EA                                    imul    edx
  3481 000020C0 895308                                  mov     [ebx+8], edx
  3482 000020C3 A1[98470500]                            mov     eax, [mp3_out2_a2] ; i = 3
  3483 000020C8 8B550C                                  mov     edx, [ebp+12]
  3484 000020CB F7EA                                    imul    edx
  3485 000020CD 03533C                                  add     edx, [ebx+60]
  3486 000020D0 899780010000                            mov     [edi+384], edx
  3487 000020D6 A1[A4470500]                            mov     eax, [mp3_out2_b2]
  3488 000020DB 8B5524                                  mov     edx, [ebp+36]
  3489 000020DE F7EA                                    imul    edx
  3490 000020E0 89530C                                  mov     [ebx+12], edx
  3491 000020E3 A1[94470500]                            mov     eax, [mp3_out2_a1] ; i = 4
  3492 000020E8 8B5510                                  mov     edx, [ebp+16]
  3493 000020EB F7EA                                    imul    edx
  3494 000020ED 035340                                  add     edx, [ebx+64]
  3495 000020F0 899700020000                            mov     [edi+512], edx
  3496 000020F6 A1[A0470500]                            mov     eax, [mp3_out2_b1]
  3497 000020FB 8B5528                                  mov     edx, [ebp+40]
  3498 000020FE F7EA                                    imul    edx
  3499 00002100 895310                                  mov     [ebx+16], edx
  3500 00002103 A1[90470500]                            mov     eax, [mp3_out2_a0] ; i = 5
  3501 00002108 8B5514                                  mov     edx, [ebp+20]
  3502 0000210B F7EA                                    imul    edx
  3503 0000210D 035344                                  add     edx, [ebx+68]
  3504 00002110 899780020000                            mov     [edi+640], edx
  3505 00002116 A1[9C470500]                            mov     eax, [mp3_out2_b0]
  3506 0000211B 8B552C                                  mov     edx, [ebp+44]
  3507 0000211E F7EA                                    imul    edx
  3508 00002120 895314                                  mov     [ebx+20], edx   ; ENDM
  3509 00002123 83C604                                  add     esi, 4
  3510 00002126 E8FDFBFFFF                              call    mp3_imdct12
  3511 0000212B A1[90470500]                            mov     eax, [mp3_out2_a0] ; IRP i,0,1,2,3,4,5
  3512 00002130 8B5500                                  mov     edx, [ebp+0]    ; @@MULH [ebx+(0*6+i)*4],[mp3_out2_a&i],
  3513                                                                          ; -,-,-,-,0,[ebp+(i+0)*4],[ebx+(0*6+i)*4]
  3514 00002133 F7EA                                    imul    edx
  3515 00002135 0313                                    add     edx, [ebx]
  3516 00002137 8913                                    mov     [ebx], edx
  3517 00002139 A1[9C470500]                            mov     eax, [mp3_out2_b0] ; @@MULH [ebx+(1*6+i)*4],[mp3_out2_b&i],
  3518                                                                          ; -,-,-,-,0,[ebp+(i+6)*4],-
  3519 0000213E 8B5518                                  mov     edx, [ebp+24]
  3520 00002141 F7EA                                    imul    edx
  3521 00002143 895318                                  mov     [ebx+24], edx
  3522 00002146 C7433000000000                          mov     dword [ebx+48], 0 ; [ebx+(2*6+i)*4]
  3523 0000214D A1[94470500]                            mov     eax, [mp3_out2_a1] ; i = 1
  3524 00002152 8B5504                                  mov     edx, [ebp+4]
  3525 00002155 F7EA                                    imul    edx
  3526 00002157 035304                                  add     edx, [ebx+4]
  3527 0000215A 895304                                  mov     [ebx+4], edx
  3528 0000215D A1[A0470500]                            mov     eax, [mp3_out2_b1]
  3529 00002162 8B551C                                  mov     edx, [ebp+28]
  3530 00002165 F7EA                                    imul    edx
  3531 00002167 89531C                                  mov     [ebx+28], edx
  3532 0000216A C7433400000000                          mov     dword [ebx+52], 0 ; [ebx+(2*6+i)*4]
  3533 00002171 A1[98470500]                            mov     eax, [mp3_out2_a2] ; i = 2
  3534 00002176 8B5508                                  mov     edx, [ebp+8]
  3535 00002179 F7EA                                    imul    edx
  3536 0000217B 035308                                  add     edx, [ebx+8]
  3537 0000217E 895308                                  mov     [ebx+8], edx
  3538 00002181 A1[A4470500]                            mov     eax, [mp3_out2_b2]
  3539 00002186 8B5520                                  mov     edx, [ebp+32]
  3540 00002189 F7EA                                    imul    edx
  3541 0000218B 895320                                  mov     [ebx+32], edx
  3542 0000218E C7433800000000                          mov     dword [ebx+56], 0
  3543 00002195 A1[98470500]                            mov     eax, [mp3_out2_a2] ; i = 3
  3544 0000219A 8B550C                                  mov     edx, [ebp+12]
  3545 0000219D F7EA                                    imul    edx
  3546 0000219F 03530C                                  add     edx, [ebx+0Ch]
  3547 000021A2 89530C                                  mov     [ebx+12], edx
  3548 000021A5 A1[A4470500]                            mov     eax, [mp3_out2_b2]
  3549 000021AA 8B5524                                  mov     edx, [ebp+36]
  3550 000021AD F7EA                                    imul    edx
  3551 000021AF 895324                                  mov     [ebx+36], edx
  3552 000021B2 C7433C00000000                          mov     dword [ebx+60], 0 ; [ebx+(2*6+i)*4]
  3553 000021B9 A1[94470500]                            mov     eax, [mp3_out2_a1] ; i = 4
  3554 000021BE 8B5510                                  mov     edx, [ebp+16]
  3555 000021C1 F7EA                                    imul    edx
  3556 000021C3 035310                                  add     edx, [ebx+16]
  3557 000021C6 895310                                  mov     [ebx+16], edx
  3558 000021C9 A1[A0470500]                            mov     eax, [mp3_out2_b1]
  3559 000021CE 8B5528                                  mov     edx, [ebp+40]
  3560 000021D1 F7EA                                    imul    edx
  3561 000021D3 895328                                  mov     [ebx+40], edx
  3562 000021D6 C7434000000000                          mov     dword [ebx+64], 0
  3563 000021DD A1[90470500]                            mov     eax, [mp3_out2_a0] ; i = 5
  3564 000021E2 8B5514                                  mov     edx, [ebp+20]
  3565 000021E5 F7EA                                    imul    edx
  3566 000021E7 035314                                  add     edx, [ebx+20]
  3567 000021EA 895314                                  mov     [ebx+20], edx
  3568 000021ED A1[9C470500]                            mov     eax, [mp3_out2_b0]
  3569 000021F2 8B552C                                  mov     edx, [ebp+44]
  3570 000021F5 F7EA                                    imul    edx
  3571 000021F7 89532C                                  mov     [ebx+44], edx
  3572 000021FA C7434400000000                          mov     dword [ebx+68], 0 ; [ebx+(2*6+i)*4]
  3573 00002201 81C704FAFFFF                            add     edi, -1532      ; (1*4) - (2*6*SBLIMIT*4) ; dst
  3574 00002207 83C640                                  add     esi, 64         ; 18*4 - (2*4) ; sb_hybrid
  3575 0000220A 83C348                                  add     ebx, 72         ; 18*4 ; mdct_buf
  3576 0000220D FF05[B0470500]                          inc     dword [_@@@JJJ]	; next
  3577 00002213 A1[B0470500]                            mov     eax, [_@@@JJJ]
  3578 00002218 3B05[BC470500]                          cmp     eax, [_@@sblimit]
  3579 0000221E 0F8229FDFFFF                            jb      .imdct12_lop
  3580                                  
  3581                                  .imdct12_done:
  3582                                  		; 16/02/2025
  3583                                  
  3584                                  .no_rdtsc_supported@@@@:
  3585                                  
  3586                                  		; 16/02/2025
  3587                                  .no_rdtsc_supported@@@@@:
  3588 00002224 833D[B0470500]20                        cmp     dword [_@@@JJJ], 32 ; SBLIMIT
  3589 0000222B 0F8333010000                            jnb     .zero_outer_done
  3590                                  
  3591                                  .zero_outer_lop:
  3592 00002231 8B03                                    mov     eax, [ebx]      ; zero bands
  3593                                                                          ; IRP nn,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
  3594                                                                          ;  mov  eax,dword ptr [ebx+nn*4]
  3595                                                                          ;  mov  dword ptr [ebx+nn*4],0
  3596                                                                          ;  mov  dword ptr [edi+nn*SBLIMIT*4],eax ; [dst]
  3597                                                                          ; ENDM
  3598 00002233 C70300000000                            mov     dword [ebx], 0 ; nn = 0
  3599 00002239 8907                                    mov     [edi], eax
  3600 0000223B 8B4304                                  mov     eax, [ebx+4]    ; nn = 1
  3601 0000223E C7430400000000                          mov     dword [ebx+4], 0
  3602 00002245 898780000000                            mov     [edi+128], eax
  3603 0000224B 8B4308                                  mov     eax, [ebx+8]
  3604 0000224E C7430800000000                          mov     dword [ebx+8], 0
  3605 00002255 898700010000                            mov     [edi+256], eax
  3606 0000225B 8B430C                                  mov     eax, [ebx+12]
  3607 0000225E C7430C00000000                          mov     dword [ebx+12], 0
  3608 00002265 898780010000                            mov     [edi+384], eax
  3609 0000226B 8B4310                                  mov     eax, [ebx+16]   ; nn = 4
  3610 0000226E C7431000000000                          mov     dword [ebx+16], 0
  3611 00002275 898700020000                            mov     [edi+512], eax
  3612 0000227B 8B4314                                  mov     eax, [ebx+20]
  3613 0000227E C7431400000000                          mov     dword [ebx+20], 0
  3614 00002285 898780020000                            mov     [edi+640], eax  ; [edi+5*SBLIMIT*4]
  3615 0000228B 8B4318                                  mov     eax, [ebx+24]
  3616 0000228E C7431800000000                          mov     dword [ebx+24], 0
  3617 00002295 898700030000                            mov     [edi+768], eax
  3618 0000229B 8B431C                                  mov     eax, [ebx+28]   ; nn = 7
  3619 0000229E C7431C00000000                          mov     dword [ebx+28], 0
  3620 000022A5 898780030000                            mov     [edi+896], eax
  3621 000022AB 8B4320                                  mov     eax, [ebx+32]
  3622 000022AE C7432000000000                          mov     dword [ebx+32], 0
  3623 000022B5 898700040000                            mov     [edi+1024], eax ; [edi+8*SBLIMIT*4]
  3624 000022BB 8B4324                                  mov     eax, [ebx+36]
  3625 000022BE C7432400000000                          mov     dword [ebx+36], 0
  3626 000022C5 898780040000                            mov     [edi+1152], eax
  3627 000022CB 8B4328                                  mov     eax, [ebx+40]
  3628 000022CE C7432800000000                          mov     dword [ebx+40], 0
  3629 000022D5 898700050000                            mov     [edi+1280], eax
  3630 000022DB 8B432C                                  mov     eax, [ebx+44]
  3631 000022DE C7432C00000000                          mov     dword [ebx+44], 0
  3632 000022E5 898780050000                            mov     [edi+1408], eax
  3633 000022EB 8B4330                                  mov     eax, [ebx+48]
  3634 000022EE C7433000000000                          mov     dword [ebx+48], 0
  3635 000022F5 898700060000                            mov     [edi+1536], eax
  3636 000022FB 8B4334                                  mov     eax, [ebx+52]
  3637 000022FE C7433400000000                          mov     dword [ebx+52], 0
  3638 00002305 898780060000                            mov     [edi+1664], eax
  3639 0000230B 8B4338                                  mov     eax, [ebx+56]
  3640 0000230E C7433800000000                          mov     dword [ebx+56], 0
  3641 00002315 898700070000                            mov     [edi+1792], eax
  3642 0000231B 8B433C                                  mov     eax, [ebx+60]
  3643 0000231E C7433C00000000                          mov     dword [ebx+60], 0
  3644 00002325 898780070000                            mov     [edi+1920], eax
  3645 0000232B 8B4340                                  mov     eax, [ebx+64]
  3646 0000232E C7434000000000                          mov     dword [ebx+64], 0 ; [edi+16*SBLIMIT*4]
  3647 00002335 898700080000                            mov     [edi+2048], eax
  3648 0000233B 8B4344                                  mov     eax, [ebx+68]   ; nn = 17
  3649 0000233E C7434400000000                          mov     dword [ebx+68], 0
  3650 00002345 898780080000                            mov     [edi+2176], eax ; ENDM
  3651 0000234B 83C348                                  add     ebx, 72         ; 18*4
  3652 0000234E 83C704                                  add     edi, 4
  3653 00002351 FF05[B0470500]                          inc     dword [_@@@JJJ]
  3654 00002357 833D[B0470500]20                        cmp     dword [_@@@JJJ], 32
  3655 0000235E 0F82CDFEFFFF                            jb      .zero_outer_lop
  3656                                  
  3657                                  .zero_outer_done:
  3658                                  		; 16/02/2025
  3659                                  
  3660                                  .no_rdtsc_supported@@@@@@:
  3661 00002364 5B                                      pop     ebx
  3662                                  
  3663                                  		; 16/02/2025
  3664                                  .no_rdtsc_supported@@@@@@@:
  3665 00002365 C3                                      retn
  3666                                  
  3667                                  
  3668                                  ; =============== S U B R O U T I N E =======================================
  3669                                  
  3670                                  
  3671                                  mp3_dct32_shift_0:
  3672 00002366 8B06                                    mov     eax, [esi]      ; mp3_dct32_macro macro rate_shift ; rate_shift = 0
  3673 00002368 8B567C                                  mov     edx, [esi+124]  ; @@BF macro a,b,sign,cos,shift
  3674                                                                          ; @@BF 0,31,+,COS0_0,1
  3675                                                                          ; @@need_a equ (rate_shift EQ 0) or (a LT 16) ; a = 0
  3676                                                                          ; @@need_b equ (rate_shift EQ 0) or (b LT 16) ; b = 31
  3677                                                                          ; IF @@need_a AND @@need_b ; rate_shift = 0
  3678                                                                          ;    mov eax,dword ptr [esi+a*4]
  3679                                                                          ;    mov edx,dword ptr [esi+b*4]
  3680                                                                          ;    add dword ptr [esi+a*4],edx
  3681 0000236B 0116                                    add     [esi], edx
  3682 0000236D 29D0                                    sub     eax, edx
  3683 0000236F D1E0                                    shl     eax, 1          ; shl  eax,shift
  3684                                                                          ; (needed when COS.fraction is less than 32bit)
  3685 00002371 BA51C21340                              mov     edx, 4013C251h  ; sign&&cos ; +COS0_0 = 4013C251h
  3686 00002376 F7EA                                    imul    edx
  3687 00002378 89567C                                  mov     [esi+124], edx  ; [esi+b*4] ; upper 32bit of multiply result
  3688 0000237B 8B463C                                  mov     eax, [esi+60]   ; @@BF 15,16,+,COS0_15,5
  3689                                                                          ; [esi+a*4]
  3690 0000237E 8B5640                                  mov     edx, [esi+64]   ; [esi+b*4]
  3691 00002381 01563C                                  add     [esi+60], edx   ; [esi+a*4]
  3692 00002384 29D0                                    sub     eax, edx
  3693 00002386 C1E005                                  shl     eax, 5          ; shl eax,shift
  3694 00002389 BAFB228551                              mov     edx, 518522FBh  ; sign&&cos ; +COS0_15 = 518522FBh
  3695 0000238E F7EA                                    imul    edx
  3696 00002390 895640                                  mov     [esi+64], edx   ; [esi+b*4]
  3697 00002393 8B06                                    mov     eax, [esi]      ; @@BF 0,15,+,COS1_0,1
  3698 00002395 8B563C                                  mov     edx, [esi+60]
  3699 00002398 0116                                    add     [esi], edx
  3700 0000239A 29D0                                    sub     eax, edx
  3701 0000239C D1E0                                    shl     eax, 1
  3702 0000239E BA72464F40                              mov     edx, 404F4672h  ; +COS1_0
  3703 000023A3 F7EA                                    imul    edx
  3704 000023A5 89563C                                  mov     [esi+60], edx
  3705 000023A8 8B4640                                  mov     eax, [esi+64]   ; @@BF 16,31,-,COS1_0,1
  3706 000023AB 8B567C                                  mov     edx, [esi+124]
  3707 000023AE 015640                                  add     [esi+64], edx
  3708 000023B1 29D0                                    sub     eax, edx
  3709 000023B3 D1E0                                    shl     eax, 1
  3710 000023B5 BA8EB9B0BF                              mov     edx, 0BFB0B98Eh ; -COS1_0
  3711 000023BA F7EA                                    imul    edx
  3712 000023BC 89567C                                  mov     [esi+124], edx
  3713 000023BF 8B461C                                  mov     eax, [esi+28]   ; @@BF 7,24,+,COS0_7,1
  3714 000023C2 8B5660                                  mov     edx, [esi+96]
  3715 000023C5 01561C                                  add     [esi+28], edx
  3716 000023C8 29D0                                    sub     eax, edx
  3717 000023CA D1E0                                    shl     eax, 1
  3718 000023CC BAA71E6056                              mov     edx, 56601EA7h
  3719 000023D1 F7EA                                    imul    edx
  3720 000023D3 895660                                  mov     [esi+96], edx
  3721 000023D6 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,23,+,COS0_8,1
  3722 000023D9 8B565C                                  mov     edx, [esi+92]
  3723 000023DC 015620                                  add     [esi+32], edx
  3724 000023DF 29D0                                    sub     eax, edx
  3725 000023E1 D1E0                                    shl     eax, 1
  3726 000023E3 BAECF64C5F                              mov     edx, 5F4CF6ECh
  3727 000023E8 F7EA                                    imul    edx
  3728 000023EA 89565C                                  mov     [esi+92], edx
  3729 000023ED 8B461C                                  mov     eax, [esi+28]   ; @@BF 7,8,+,COS1_7,4
  3730 000023F0 8B5620                                  mov     edx, [esi+32]
  3731 000023F3 01561C                                  add     [esi+28], edx
  3732 000023F6 29D0                                    sub     eax, edx
  3733 000023F8 C1E004                                  shl     eax, 4
  3734 000023FB BA044E9E51                              mov     edx, 519E4E04h
  3735 00002400 F7EA                                    imul    edx
  3736 00002402 895620                                  mov     [esi+32], edx
  3737 00002405 8B465C                                  mov     eax, [esi+92]   ; @@BF 23,24,-,COS1_7,4
  3738 00002408 8B5660                                  mov     edx, [esi+96]
  3739 0000240B 01565C                                  add     [esi+92], edx
  3740 0000240E 29D0                                    sub     eax, edx
  3741 00002410 C1E004                                  shl     eax, 4
  3742 00002413 BAFCB161AE                              mov     edx, 0AE61B1FCh
  3743 00002418 F7EA                                    imul    edx
  3744 0000241A 895660                                  mov     [esi+96], edx
  3745 0000241D 8B06                                    mov     eax, [esi]      ; @@BF 0,7,+,COS2_0,1
  3746 0000241F 8B561C                                  mov     edx, [esi+28]
  3747 00002422 0116                                    add     [esi], edx
  3748 00002424 29D0                                    sub     eax, edx
  3749 00002426 D1E0                                    shl     eax, 1
  3750 00002428 BA46FB4041                              mov     edx, 4140FB46h
  3751 0000242D F7EA                                    imul    edx
  3752 0000242F 89561C                                  mov     [esi+28], edx
  3753 00002432 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,15,-,COS2_0,1
  3754 00002435 8B563C                                  mov     edx, [esi+60]
  3755 00002438 015620                                  add     [esi+32], edx
  3756 0000243B 29D0                                    sub     eax, edx
  3757 0000243D D1E0                                    shl     eax, 1
  3758 0000243F BABA04BFBE                              mov     edx, 0BEBF04BAh
  3759 00002444 F7EA                                    imul    edx
  3760 00002446 89563C                                  mov     [esi+60], edx
  3761 00002449 8B4640                                  mov     eax, [esi+64]   ; @@BF 16,23,+,COS2_0,1
  3762 0000244C 8B565C                                  mov     edx, [esi+92]
  3763 0000244F 015640                                  add     [esi+40h], edx
  3764 00002452 29D0                                    sub     eax, edx
  3765 00002454 D1E0                                    shl     eax, 1
  3766 00002456 BA46FB4041                              mov     edx, 4140FB46h
  3767 0000245B F7EA                                    imul    edx
  3768 0000245D 89565C                                  mov     [esi+92], edx
  3769 00002460 8B4660                                  mov     eax, [esi+96]   ; @@BF 24,31,-,COS2_0,1
  3770 00002463 8B567C                                  mov     edx, [esi+124]
  3771 00002466 015660                                  add     [esi+96], edx
  3772 00002469 29D0                                    sub     eax, edx
  3773 0000246B D1E0                                    shl     eax, 1
  3774 0000246D BABA04BFBE                              mov     edx, 0BEBF04BAh
  3775 00002472 F7EA                                    imul    edx
  3776 00002474 89567C                                  mov     [esi+124], edx
  3777 00002477 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,28,+,COS0_3,1
  3778 0000247A 8B5670                                  mov     edx, [esi+112]
  3779 0000247D 01560C                                  add     [esi+12], edx
  3780 00002480 29D0                                    sub     eax, edx
  3781 00002482 D1E0                                    shl     eax, 1
  3782 00002484 BA2134F943                              mov     edx, 43F93421h
  3783 00002489 F7EA                                    imul    edx
  3784 0000248B 895670                                  mov     [esi+112], edx
  3785 0000248E 8B4630                                  mov     eax, [esi+48]   ; @@BF 12,19,+,COS0_12,2
  3786 00002491 8B564C                                  mov     edx, [esi+76]
  3787 00002494 015630                                  add     [esi+48], edx
  3788 00002497 29D0                                    sub     eax, edx
  3789 00002499 C1E002                                  shl     eax, 2
  3790 0000249C BA978DFC5E                              mov     edx, 5EFC8D97h
  3791 000024A1 F7EA                                    imul    edx
  3792 000024A3 89564C                                  mov     [esi+76], edx
  3793 000024A6 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,12,+,COS1_3,1
  3794 000024A9 8B5630                                  mov     edx, [esi+48]
  3795 000024AC 01560C                                  add     [esi+12], edx
  3796 000024AF 29D0                                    sub     eax, edx
  3797 000024B1 D1E0                                    shl     eax, 1
  3798 000024B3 BA630ECB52                              mov     edx, 52CB0E63h
  3799 000024B8 F7EA                                    imul    edx
  3800 000024BA 895630                                  mov     [esi+48], edx
  3801 000024BD 8B464C                                  mov     eax, [esi+76]   ; @@BF 19,28,-,COS1_3,1
  3802 000024C0 8B5670                                  mov     edx, [esi+112]
  3803 000024C3 01564C                                  add     [esi+76], edx
  3804 000024C6 29D0                                    sub     eax, edx
  3805 000024C8 D1E0                                    shl     eax, 1
  3806 000024CA BA9DF134AD                              mov     edx, 0AD34F19Dh
  3807 000024CF F7EA                                    imul    edx
  3808 000024D1 895670                                  mov     [esi+112], edx
  3809 000024D4 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,27,+,COS0_4,1
  3810 000024D7 8B566C                                  mov     edx, [esi+108]
  3811 000024DA 015610                                  add     [esi+16], edx
  3812 000024DD 29D0                                    sub     eax, edx
  3813 000024DF D1E0                                    shl     eax, 1
  3814 000024E1 BAC51BCC46                              mov     edx, 46CC1BC5h
  3815 000024E6 F7EA                                    imul    edx
  3816 000024E8 89566C                                  mov     [esi+108], edx
  3817 000024EB 8B462C                                  mov     eax, [esi+44]   ; @@BF 11,20,+,COS0_11,2
  3818 000024EE 8B5650                                  mov     edx, [esi+80]
  3819 000024F1 01562C                                  add     [esi+44], edx
  3820 000024F4 29D0                                    sub     eax, edx
  3821 000024F6 C1E002                                  shl     eax, 2
  3822 000024F9 BA981AD84A                              mov     edx, 4AD81A98h
  3823 000024FE F7EA                                    imul    edx
  3824 00002500 895650                                  mov     [esi+80], edx
  3825 00002503 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,11,+,COS1_4,1
  3826 00002506 8B562C                                  mov     edx, [esi+44]
  3827 00002509 015610                                  add     [esi+16], edx
  3828 0000250C 29D0                                    sub     eax, edx
  3829 0000250E D1E0                                    shl     eax, 1
  3830 00002510 BA2E40E264                              mov     edx, 64E2402Eh
  3831 00002515 F7EA                                    imul    edx
  3832 00002517 89562C                                  mov     [esi+44], edx
  3833 0000251A 8B4650                                  mov     eax, [esi+80]   ; @@BF 20,27,-,COS1_4,1
  3834 0000251D 8B566C                                  mov     edx, [esi+108]
  3835 00002520 015650                                  add     [esi+80], edx
  3836 00002523 29D0                                    sub     eax, edx
  3837 00002525 D1E0                                    shl     eax, 1
  3838 00002527 BAD2BF1D9B                              mov     edx, 9B1DBFD2h
  3839 0000252C F7EA                                    imul    edx
  3840 0000252E 89566C                                  mov     [esi+108], edx
  3841 00002531 8B460C                                  mov     eax, [esi+12]   ; @@BF 3,4,+,COS2_3,3
  3842 00002534 8B5610                                  mov     edx, [esi+16]
  3843 00002537 01560C                                  add     [esi+12], edx
  3844 0000253A 29D0                                    sub     eax, edx
  3845 0000253C C1E003                                  shl     eax, 3
  3846 0000253F BA42670352                              mov     edx, 52036742h
  3847 00002544 F7EA                                    imul    edx
  3848 00002546 895610                                  mov     [esi+16], edx
  3849 00002549 8B462C                                  mov     eax, [esi+44]   ; @@BF 11,12,-,COS2_3,3
  3850 0000254C 8B5630                                  mov     edx, [esi+48]
  3851 0000254F 01562C                                  add     [esi+44], edx
  3852 00002552 29D0                                    sub     eax, edx
  3853 00002554 C1E003                                  shl     eax, 3
  3854 00002557 BABE98FCAD                              mov     edx, 0ADFC98BEh ; -COS2_3
  3855 0000255C F7EA                                    imul    edx
  3856 0000255E 895630                                  mov     [esi+48], edx
  3857 00002561 8B464C                                  mov     eax, [esi+76]   ; @@BF 19,20,+,COS2_3,3
  3858 00002564 8B5650                                  mov     edx, [esi+80]
  3859 00002567 01564C                                  add     [esi+4Ch], edx
  3860 0000256A 29D0                                    sub     eax, edx
  3861 0000256C C1E003                                  shl     eax, 3
  3862 0000256F BA42670352                              mov     edx, 52036742h  ; +COS2_3
  3863 00002574 F7EA                                    imul    edx
  3864 00002576 895650                                  mov     [esi+80], edx
  3865 00002579 8B466C                                  mov     eax, [esi+108]  ; @@BF 27,28,-,COS2_3,3
  3866 0000257C 8B5670                                  mov     edx, [esi+112]
  3867 0000257F 01566C                                  add     [esi+108], edx
  3868 00002582 29D0                                    sub     eax, edx
  3869 00002584 C1E003                                  shl     eax, 3
  3870 00002587 BABE98FCAD                              mov     edx, 0ADFC98BEh
  3871 0000258C F7EA                                    imul    edx
  3872 0000258E 895670                                  mov     [esi+112], edx
  3873 00002591 8B06                                    mov     eax, [esi]      ; @@BF 0,3,+,COS3_0,1
  3874 00002593 8B560C                                  mov     edx, [esi+12]
  3875 00002596 0116                                    add     [esi], edx
  3876 00002598 29D0                                    sub     eax, edx
  3877 0000259A D1E0                                    shl     eax, 1
  3878 0000259C BAF0E94545                              mov     edx, 4545E9F0h
  3879 000025A1 F7EA                                    imul    edx
  3880 000025A3 89560C                                  mov     [esi+12], edx
  3881 000025A6 8B4610                                  mov     eax, [esi+16]   ; @@BF 4,7,-,COS3_0,1
  3882 000025A9 8B561C                                  mov     edx, [esi+28]
  3883 000025AC 015610                                  add     [esi+16], edx
  3884 000025AF 29D0                                    sub     eax, edx
  3885 000025B1 D1E0                                    shl     eax, 1
  3886 000025B3 BA1016BABA                              mov     edx, 0BABA1610h
  3887 000025B8 F7EA                                    imul    edx
  3888 000025BA 89561C                                  mov     [esi+28], edx
  3889 000025BD 8B4620                                  mov     eax, [esi+32]   ; @@BF 8,11,+,COS3_0,1
  3890 000025C0 8B562C                                  mov     edx, [esi+44]
  3891 000025C3 015620                                  add     [esi+32], edx
  3892 000025C6 29D0                                    sub     eax, edx
  3893 000025C8 D1E0                                    shl     eax, 1
  3894 000025CA BAF0E94545                              mov     edx, 4545E9F0h
  3895 000025CF F7EA                                    imul    edx
  3896 000025D1 89562C                                  mov     [esi+44], edx
  3897 000025D4 8B4630                                  mov     eax, [esi+48]   ; @@BF 12,15,-,COS3_0,1
  3898 000025D7 8B563C                                  mov     edx, [esi+60]
  3899 000025DA 015630                                  add     [esi+48], edx
  3900 000025DD 29D0                                    sub     eax, edx
  3901 000025DF D1E0                                    shl     eax, 1
  3902 000025E1 BA1016BABA                              mov     edx, 0BABA1610h
  3903 000025E6 F7EA                                    imul    edx
  3904 000025E8 89563C                                  mov     [esi+60], edx
  3905 000025EB 8B4640                                  mov     eax, [esi+64]   ; @@BF 16,19,+,COS3_0,1
  3906 000025EE 8B564C                                  mov     edx, [esi+76]
  3907 000025F1 015640                                  add     [esi+64], edx
  3908 000025F4 29D0                                    sub     eax, edx
  3909 000025F6 D1E0                                    shl     eax, 1
  3910 000025F8 BAF0E94545                              mov     edx, 4545E9F0h
  3911 000025FD F7EA                                    imul    edx
  3912 000025FF 89564C                                  mov     [esi+76], edx
  3913 00002602 8B4650                                  mov     eax, [esi+80]   ; @@BF 20,23,-,COS3_0,1
  3914 00002605 8B565C                                  mov     edx, [esi+92]
  3915 00002608 015650                                  add     [esi+80], edx
  3916 0000260B 29D0                                    sub     eax, edx
  3917 0000260D D1E0                                    shl     eax, 1
  3918 0000260F BA1016BABA                              mov     edx, 0BABA1610h ; -COS3_0
  3919 00002614 F7EA                                    imul    edx
  3920 00002616 89565C                                  mov     [esi+92], edx
  3921 00002619 8B4660                                  mov     eax, [esi+96]   ; @@BF 24,27,+,COS3_0,1
  3922 0000261C 8B566C                                  mov     edx, [esi+108]
  3923 0000261F 015660                                  add     [esi+96], edx
  3924 00002622 29D0                                    sub     eax, edx
  3925 00002624 D1E0                                    shl     eax, 1
  3926 00002626 BAF0E94545                              mov     edx, 4545E9F0h  ; +COS3_0
  3927 0000262B F7EA                                    imul    edx
  3928 0000262D 89566C                                  mov     [esi+108], edx
  3929 00002630 8B4670                                  mov     eax, [esi+112]  ; @@BF 28,31,-,COS3_0,1
  3930 00002633 8B567C                                  mov     edx, [esi+124]
  3931 00002636 015670                                  add     [esi+112], edx
  3932 00002639 29D0                                    sub     eax, edx
  3933 0000263B D1E0                                    shl     eax, 1
  3934 0000263D BA1016BABA                              mov     edx, 0BABA1610h
  3935 00002642 F7EA                                    imul    edx
  3936 00002644 89567C                                  mov     [esi+124], edx
  3937 00002647 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,30,+,COS0_1,1
  3938 0000264A 8B5678                                  mov     edx, [esi+120]
  3939 0000264D 015604                                  add     [esi+4], edx
  3940 00002650 29D0                                    sub     eax, edx
  3941 00002652 D1E0                                    shl     eax, 1
  3942 00002654 BABD45B340                              mov     edx, 40B345BDh
  3943 00002659 F7EA                                    imul    edx
  3944 0000265B 895678                                  mov     [esi+120], edx
  3945 0000265E 8B4638                                  mov     eax, [esi+56]   ; @@BF 14,17,+,COS0_14,3
  3946 00002661 8B5644                                  mov     edx, [esi+68]
  3947 00002664 015638                                  add     [esi+56], edx
  3948 00002667 29D0                                    sub     eax, edx
  3949 00002669 C1E003                                  shl     eax, 3
  3950 0000266C BAD0200B6D                              mov     edx, 6D0B20D0h
  3951 00002671 F7EA                                    imul    edx
  3952 00002673 895644                                  mov     [esi+68], edx
  3953 00002676 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,14,+,COS1_1,1
  3954 00002679 8B5638                                  mov     edx, [esi+56]
  3955 0000267C 015604                                  add     [esi+4], edx
  3956 0000267F 29D0                                    sub     eax, edx
  3957 00002681 D1E0                                    shl     eax, 1
  3958 00002683 BA103CE142                              mov     edx, 42E13C10h
  3959 00002688 F7EA                                    imul    edx
  3960 0000268A 895638                                  mov     [esi+56], edx
  3961 0000268D 8B4644                                  mov     eax, [esi+68]   ; @@BF 17,30,-,COS1_1,1
  3962 00002690 8B5678                                  mov     edx, [esi+120]
  3963 00002693 015644                                  add     [esi+68], edx
  3964 00002696 29D0                                    sub     eax, edx
  3965 00002698 D1E0                                    shl     eax, 1
  3966 0000269A BAF0C31EBD                              mov     edx, 0BD1EC3F0h
  3967 0000269F F7EA                                    imul    edx
  3968 000026A1 895678                                  mov     [esi+120], edx
  3969 000026A4 8B4618                                  mov     eax, [esi+24]   ; @@BF 6,25,+,COS0_6,1
  3970 000026A7 8B5664                                  mov     edx, [esi+100]
  3971 000026AA 015618                                  add     [esi+24], edx
  3972 000026AD 29D0                                    sub     eax, edx
  3973 000026AF D1E0                                    shl     eax, 1
  3974 000026B1 BA1237AE4F                              mov     edx, 4FAE3712h
  3975 000026B6 F7EA                                    imul    edx
  3976 000026B8 895664                                  mov     [esi+100], edx
  3977 000026BB 8B4624                                  mov     eax, [esi+36]   ; @@BF 9,22,+,COS0_9,1
  3978 000026BE 8B5658                                  mov     edx, [esi+88]
  3979 000026C1 015624                                  add     [esi+36], edx
  3980 000026C4 29D0                                    sub     eax, edx
  3981 000026C6 D1E0                                    shl     eax, 1
  3982 000026C8 BA27CF6F6B                              mov     edx, 6B6FCF27h
  3983 000026CD F7EA                                    imul    edx
  3984 000026CF 895658                                  mov     [esi+88], edx
  3985 000026D2 8B4618                                  mov     eax, [esi+24]   ; @@BF 6, 9,+,COS1_6,2
  3986 000026D5 8B5624                                  mov     edx, [esi+36]
  3987 000026D8 015618                                  add     [esi+24], edx
  3988 000026DB 29D0                                    sub     eax, edx
  3989 000026DD C1E002                                  shl     eax, 2
  3990 000026E0 BAC2923C6E                              mov     edx, 6E3C92C2h
  3991 000026E5 F7EA                                    imul    edx
  3992 000026E7 895624                                  mov     [esi+36], edx
  3993 000026EA 8B4658                                  mov     eax, [esi+88]   ; @@BF 22,25,-,COS1_6,2
  3994 000026ED 8B5664                                  mov     edx, [esi+100]
  3995 000026F0 015658                                  add     [esi+88], edx
  3996 000026F3 29D0                                    sub     eax, edx
  3997 000026F5 C1E002                                  shl     eax, 2
  3998 000026F8 BA3E6DC391                              mov     edx, 91C36D3Eh
  3999 000026FD F7EA                                    imul    edx
  4000 000026FF 895664                                  mov     [esi+100], edx
  4001 00002702 8B4604                                  mov     eax, [esi+4]    ; @@BF 1, 6,+,COS2_1,1
  4002 00002705 8B5618                                  mov     edx, [esi+24]
  4003 00002708 015604                                  add     [esi+4], edx
  4004 0000270B 29D0                                    sub     eax, edx
  4005 0000270D D1E0                                    shl     eax, 1
  4006 0000270F BA88DEF84C                              mov     edx, 4CF8DE88h
  4007 00002714 F7EA                                    imul    edx
  4008 00002716 895618                                  mov     [esi+24], edx
  4009 00002719 8B4624                                  mov     eax, [esi+36]   ; @@BF 9,14,-,COS2_1,1
  4010 0000271C 8B5638                                  mov     edx, [esi+56]
  4011 0000271F 015624                                  add     [esi+36], edx
  4012 00002722 29D0                                    sub     eax, edx
  4013 00002724 D1E0                                    shl     eax, 1
  4014 00002726 BA782107B3                              mov     edx, 0B3072178h
  4015 0000272B F7EA                                    imul    edx
  4016 0000272D 895638                                  mov     [esi+56], edx
  4017 00002730 8B4644                                  mov     eax, [esi+68]   ; @@BF 17,22,+,COS2_1,1
  4018 00002733 8B5658                                  mov     edx, [esi+88]
  4019 00002736 015644                                  add     [esi+68], edx
  4020 00002739 29D0                                    sub     eax, edx
  4021 0000273B D1E0                                    shl     eax, 1
  4022 0000273D BA88DEF84C                              mov     edx, 4CF8DE88h
  4023 00002742 F7EA                                    imul    edx
  4024 00002744 895658                                  mov     [esi+88], edx
  4025 00002747 8B4664                                  mov     eax, [esi+100]  ; @@BF 25,30,-,COS2_1,1
  4026 0000274A 8B5678                                  mov     edx, [esi+120]
  4027 0000274D 015664                                  add     [esi+100], edx
  4028 00002750 29D0                                    sub     eax, edx
  4029 00002752 D1E0                                    shl     eax, 1
  4030 00002754 BA782107B3                              mov     edx, 0B3072178h
  4031 00002759 F7EA                                    imul    edx
  4032 0000275B 895678                                  mov     [esi+120], edx
  4033 0000275E 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,29,+,COS0_2,1
  4034 00002761 8B5674                                  mov     edx, [esi+116]
  4035 00002764 015608                                  add     [esi+8], edx
  4036 00002767 29D0                                    sub     eax, edx
  4037 00002769 D1E0                                    shl     eax, 1
  4038 0000276B BA6E2DFA41                              mov     edx, 41FA2D6Eh
  4039 00002770 F7EA                                    imul    edx
  4040 00002772 895674                                  mov     [esi+116], edx
  4041 00002775 8B4634                                  mov     eax, [esi+52]   ; @@BF 13,18,+,COS0_13,3
  4042 00002778 8B5648                                  mov     edx, [esi+72]
  4043 0000277B 015634                                  add     [esi+52], edx
  4044 0000277E 29D0                                    sub     eax, edx
  4045 00002780 C1E003                                  shl     eax, 3
  4046 00002783 BA9057D941                              mov     edx, 41D95790h
  4047 00002788 F7EA                                    imul    edx
  4048 0000278A 895648                                  mov     [esi+72], edx
  4049 0000278D 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,13,+,COS1_2,1
  4050 00002790 8B5634                                  mov     edx, [esi+52]
  4051 00002793 015608                                  add     [esi+8], edx
  4052 00002796 29D0                                    sub     eax, edx
  4053 00002798 D1E0                                    shl     eax, 1
  4054 0000279A BA459F9148                              mov     edx, 48919F45h
  4055 0000279F F7EA                                    imul    edx
  4056 000027A1 895634                                  mov     [esi+52], edx
  4057 000027A4 8B4648                                  mov     eax, [esi+72]   ; @@BF 18,29,-,COS1_2,1
  4058 000027A7 8B5674                                  mov     edx, [esi+116]
  4059 000027AA 015648                                  add     [esi+72], edx
  4060 000027AD 29D0                                    sub     eax, edx
  4061 000027AF D1E0                                    shl     eax, 1
  4062 000027B1 BABB606EB7                              mov     edx, 0B76E60BBh
  4063 000027B6 F7EA                                    imul    edx
  4064 000027B8 895674                                  mov     [esi+116], edx
  4065 000027BB 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,26,+,COS0_5,1
  4066 000027BE 8B5668                                  mov     edx, [esi+104]
  4067 000027C1 015614                                  add     [esi+20], edx
  4068 000027C4 29D0                                    sub     eax, edx
  4069 000027C6 D1E0                                    shl     eax, 1
  4070 000027C8 BAF19C9D4A                              mov     edx, 4A9D9CF1h
  4071 000027CD F7EA                                    imul    edx
  4072 000027CF 895668                                  mov     [esi+104], edx
  4073 000027D2 8B4628                                  mov     eax, [esi+40]   ; @@BF 10,21,+,COS0_10,1
  4074 000027D5 8B5654                                  mov     edx, [esi+84]
  4075 000027D8 015628                                  add     [esi+40], edx
  4076 000027DB 29D0                                    sub     eax, edx
  4077 000027DD D1E0                                    shl     eax, 1
  4078 000027DF BAB41D7D7C                              mov     edx, 7C7D1DB4h
  4079 000027E4 F7EA                                    imul    edx
  4080 000027E6 895654                                  mov     [esi+84], edx
  4081 000027E9 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,10,+,COS1_5,2
  4082 000027EC 8B5628                                  mov     edx, [esi+40]
  4083 000027EF 015614                                  add     [esi+20], edx
  4084 000027F2 29D0                                    sub     eax, edx
  4085 000027F4 C1E002                                  shl     eax, 2
  4086 000027F7 BAAA24E243                              mov     edx, 43E224AAh
  4087 000027FC F7EA                                    imul    edx
  4088 000027FE 895628                                  mov     [esi+40], edx
  4089 00002801 8B4654                                  mov     eax, [esi+84]   ; @@BF 21,26,-,COS1_5,2
  4090 00002804 8B5668                                  mov     edx, [esi+104]
  4091 00002807 015654                                  add     [esi+84], edx
  4092 0000280A 29D0                                    sub     eax, edx
  4093 0000280C C1E002                                  shl     eax, 2
  4094 0000280F BA56DB1DBC                              mov     edx, 0BC1DDB56h
  4095 00002814 F7EA                                    imul    edx
  4096 00002816 895668                                  mov     [esi+104], edx
  4097 00002819 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,5,+,COS2_2,1
  4098 0000281C 8B5614                                  mov     edx, [esi+20]
  4099 0000281F 015608                                  add     [esi+8], edx
  4100 00002822 29D0                                    sub     eax, edx
  4101 00002824 D1E0                                    shl     eax, 1
  4102 00002826 BABF6B3273                              mov     edx, 73326BBFh  ; +COS2_2
  4103 0000282B F7EA                                    imul    edx
  4104 0000282D 895614                                  mov     [esi+20], edx
  4105 00002830 8B4628                                  mov     eax, [esi+40]   ; @@BF 10,13,-,COS2_2,1
  4106 00002833 8B5634                                  mov     edx, [esi+52]
  4107 00002836 015628                                  add     [esi+40], edx
  4108 00002839 29D0                                    sub     eax, edx
  4109 0000283B D1E0                                    shl     eax, 1
  4110 0000283D BA4194CD8C                              mov     edx, 8CCD9441h  ; -COS2_2
  4111 00002842 F7EA                                    imul    edx
  4112 00002844 895634                                  mov     [esi+52], edx
  4113 00002847 8B4648                                  mov     eax, [esi+72]   ; @@BF 18,21,+,COS2_2,1
  4114 0000284A 8B5654                                  mov     edx, [esi+84]
  4115 0000284D 015648                                  add     [esi+72], edx
  4116 00002850 29D0                                    sub     eax, edx
  4117 00002852 D1E0                                    shl     eax, 1
  4118 00002854 BABF6B3273                              mov     edx, 73326BBFh
  4119 00002859 F7EA                                    imul    edx
  4120 0000285B 895654                                  mov     [esi+84], edx
  4121 0000285E 8B4668                                  mov     eax, [esi+104]  ; @@BF 26,29,-,COS2_2,1
  4122 00002861 8B5674                                  mov     edx, [esi+116]
  4123 00002864 015668                                  add     [esi+104], edx
  4124 00002867 29D0                                    sub     eax, edx
  4125 00002869 D1E0                                    shl     eax, 1
  4126 0000286B BA4194CD8C                              mov     edx, 8CCD9441h
  4127 00002870 F7EA                                    imul    edx
  4128 00002872 895674                                  mov     [esi+116], edx
  4129 00002875 8B4604                                  mov     eax, [esi+4]    ; @@BF 1,2,+,COS3_1,2
  4130 00002878 8B5608                                  mov     edx, [esi+8]
  4131 0000287B 015604                                  add     [esi+4], edx
  4132 0000287E 29D0                                    sub     eax, edx
  4133 00002880 C1E002                                  shl     eax, 2
  4134 00002883 BA46BA9E53                              mov     edx, 539EBA46h
  4135 00002888 F7EA                                    imul    edx
  4136 0000288A 895608                                  mov     [esi+8], edx
  4137 0000288D 8B4614                                  mov     eax, [esi+20]   ; @@BF 5,6,-,COS3_1,2
  4138 00002890 8B5618                                  mov     edx, [esi+24]
  4139 00002893 015614                                  add     [esi+20], edx
  4140 00002896 29D0                                    sub     eax, edx
  4141 00002898 C1E002                                  shl     eax, 2
  4142 0000289B BABA4561AC                              mov     edx, 0AC6145BAh
  4143 000028A0 F7EA                                    imul    edx
  4144 000028A2 895618                                  mov     [esi+24], edx
  4145 000028A5 8B4624                                  mov     eax, [esi+36]   ; IF rate_shift LT 2
  4146                                                                          ; @@BF 9,10,+,COS3_1,2
  4147 000028A8 8B5628                                  mov     edx, [esi+40]
  4148 000028AB 015624                                  add     [esi+36], edx
  4149 000028AE 29D0                                    sub     eax, edx
  4150 000028B0 C1E002                                  shl     eax, 2
  4151 000028B3 BA46BA9E53                              mov     edx, 539EBA46h
  4152 000028B8 F7EA                                    imul    edx
  4153 000028BA 895628                                  mov     [esi+40], edx
  4154 000028BD 8B4634                                  mov     eax, [esi+52]   ; @@BF 13,14,-,COS3_1,2
  4155 000028C0 8B5638                                  mov     edx, [esi+56]
  4156 000028C3 015634                                  add     [esi+52], edx
  4157 000028C6 29D0                                    sub     eax, edx
  4158 000028C8 C1E002                                  shl     eax, 2
  4159 000028CB BABA4561AC                              mov     edx, 0AC6145BAh
  4160 000028D0 F7EA                                    imul    edx
  4161 000028D2 895638                                  mov     [esi+56], edx   ; ENDIF
  4162 000028D5 8B4644                                  mov     eax, [esi+68]   ; @@BF 17,18,+,COS3_1,2
  4163 000028D8 8B5648                                  mov     edx, [esi+72]
  4164 000028DB 015644                                  add     [esi+68], edx
  4165 000028DE 29D0                                    sub     eax, edx
  4166 000028E0 C1E002                                  shl     eax, 2
  4167 000028E3 BA46BA9E53                              mov     edx, 539EBA46h
  4168 000028E8 F7EA                                    imul    edx
  4169 000028EA 895648                                  mov     [esi+72], edx
  4170 000028ED 8B4654                                  mov     eax, [esi+84]   ; @@BF 21,22,-,COS3_1,2
  4171 000028F0 8B5658                                  mov     edx, [esi+88]
  4172 000028F3 015654                                  add     [esi+84], edx
  4173 000028F6 29D0                                    sub     eax, edx
  4174 000028F8 C1E002                                  shl     eax, 2
  4175 000028FB BABA4561AC                              mov     edx, 0AC6145BAh
  4176 00002900 F7EA                                    imul    edx
  4177 00002902 895658                                  mov     [esi+88], edx
  4178 00002905 8B4664                                  mov     eax, [esi+100]  ; @@BF 25,26,+,COS3_1,2
  4179 00002908 8B5668                                  mov     edx, [esi+104]
  4180 0000290B 015664                                  add     [esi+100], edx
  4181 0000290E 29D0                                    sub     eax, edx
  4182 00002910 C1E002                                  shl     eax, 2
  4183 00002913 BA46BA9E53                              mov     edx, 539EBA46h
  4184 00002918 F7EA                                    imul    edx
  4185 0000291A 895668                                  mov     [esi+104], edx
  4186 0000291D 8B4674                                  mov     eax, [esi+116]  ; @@BF 29,30,-,COS3_1,2
  4187 00002920 8B5678                                  mov     edx, [esi+120]
  4188 00002923 015674                                  add     [esi+116], edx
  4189 00002926 29D0                                    sub     eax, edx
  4190 00002928 C1E002                                  shl     eax, 2
  4191 0000292B BABA4561AC                              mov     edx, 0AC6145BAh
  4192 00002930 F7EA                                    imul    edx
  4193 00002932 895678                                  mov     [esi+120], edx
  4194 00002935 8B06                                    mov     eax, [esi]      ; @@BF1 macro a, b, c, d
  4195                                                                          ;   @@BF  a, b,+,COS4_0, 1
  4196                                                                          ;   @@BF  c, d,-,COS4_0, 1
  4197                                                                          ;   @@ADD c, d
  4198                                                                          ;  endm
  4199                                                                          ; @@BF1 0,1,2,3
  4200 00002937 8B5604                                  mov     edx, [esi+4]    ; @@BF 0,1,+,COS4_0,1
  4201 0000293A 0116                                    add     [esi], edx
  4202 0000293C 29D0                                    sub     eax, edx
  4203 0000293E D1E0                                    shl     eax, 1
  4204 00002940 BA9A79825A                              mov     edx, 5A82799Ah  ; +COS4_0
  4205 00002945 F7EA                                    imul    edx
  4206 00002947 895604                                  mov     [esi+4], edx
  4207 0000294A 8B4608                                  mov     eax, [esi+8]    ; @@BF 2,3,-,COS4_0,1
  4208 0000294D 8B560C                                  mov     edx, [esi+12]
  4209 00002950 015608                                  add     [esi+8], edx
  4210 00002953 29D0                                    sub     eax, edx
  4211 00002955 D1E0                                    shl     eax, 1
  4212 00002957 BA66867DA5                              mov     edx, 0A57D8666h ; -COS4_0
  4213 0000295C F7EA                                    imul    edx
  4214 0000295E 89560C                                  mov     [esi+12], edx
  4215 00002961 8B460C                                  mov     eax, [esi+12]   ; @@ADD 2,3
  4216 00002964 014608                                  add     [esi+8], eax
  4217 00002967 8B4610                                  mov     eax, [esi+16]   ; @@BF2 macro a, b, c, d
  4218                                                                          ;   @@BF  a, b,+,COS4_0, 1
  4219                                                                          ;   @@BF  c, d,-,COS4_0, 1
  4220                                                                          ;   @@ADD c, d
  4221                                                                          ;   @@ADD a, c
  4222                                                                          ;   @@ADD c, b
  4223                                                                          ;   @@ADD b, d
  4224                                                                          ;  endm
  4225                                                                          ; @@BF2 4,5,6,7
  4226 0000296A 8B5614                                  mov     edx, [esi+20]   ; @@BF 4,5,+,COS4_0,1
  4227 0000296D 015610                                  add     [esi+16], edx
  4228 00002970 29D0                                    sub     eax, edx
  4229 00002972 D1E0                                    shl     eax, 1
  4230 00002974 BA9A79825A                              mov     edx, 5A82799Ah
  4231 00002979 F7EA                                    imul    edx
  4232 0000297B 895614                                  mov     [esi+20], edx
  4233 0000297E 8B4618                                  mov     eax, [esi+24]   ; @@BF 6,7,-,COS4_0,1
  4234 00002981 8B561C                                  mov     edx, [esi+28]
  4235 00002984 015618                                  add     [esi+24], edx
  4236 00002987 29D0                                    sub     eax, edx
  4237 00002989 D1E0                                    shl     eax, 1
  4238 0000298B BA66867DA5                              mov     edx, 0A57D8666h
  4239 00002990 F7EA                                    imul    edx
  4240 00002992 89561C                                  mov     [esi+28], edx
  4241 00002995 8B461C                                  mov     eax, [esi+28]   ; @@ADD macro dst,src
  4242                                                                          ;   IF (rate_shift EQ 0) or (dst LT 16)
  4243                                                                          ;    ;tab[a] += tab[b]
  4244                                                                          ;    mov  eax,dword ptr [esi+src*4]
  4245                                                                          ;    add  dword ptr [esi+dst*4],eax
  4246                                                                          ;   ENDIF
  4247                                                                          ;  endm
  4248                                                                          ; @@ADD 6,7
  4249 00002998 014618                                  add     [esi+24], eax
  4250 0000299B 8B4618                                  mov     eax, [esi+24]   ; @@ADD 4,6
  4251 0000299E 014610                                  add     [esi+16], eax
  4252 000029A1 8B4614                                  mov     eax, [esi+20]   ; @@ADD 6,5
  4253 000029A4 014618                                  add     [esi+24], eax
  4254 000029A7 8B461C                                  mov     eax, [esi+28]   ; @@ADD 5,7
  4255 000029AA 014614                                  add     [esi+20], eax
  4256 000029AD 8B4620                                  mov     eax, [esi+32]   ; IF rate_shift LT 2
  4257                                                                          ; @@BF1 8,9,10,11
  4258 000029B0 8B5624                                  mov     edx, [esi+36]   ; @@BF 8,9,+,COS4_0,1
  4259 000029B3 015620                                  add     [esi+32], edx
  4260 000029B6 29D0                                    sub     eax, edx
  4261 000029B8 D1E0                                    shl     eax, 1
  4262 000029BA BA9A79825A                              mov     edx, 5A82799Ah
  4263 000029BF F7EA                                    imul    edx
  4264 000029C1 895624                                  mov     [esi+36], edx
  4265 000029C4 8B4628                                  mov     eax, [esi+40]   ; @@BF 10,11,-,COS4_0,1
  4266 000029C7 8B562C                                  mov     edx, [esi+44]
  4267 000029CA 015628                                  add     [esi+40], edx
  4268 000029CD 29D0                                    sub     eax, edx
  4269 000029CF D1E0                                    shl     eax, 1
  4270 000029D1 BA66867DA5                              mov     edx, 0A57D8666h
  4271 000029D6 F7EA                                    imul    edx
  4272 000029D8 89562C                                  mov     [esi+44], edx
  4273 000029DB 8B462C                                  mov     eax, [esi+44]   ; @@ADD 10,11
  4274 000029DE 014628                                  add     [esi+40], eax
  4275 000029E1 8B4630                                  mov     eax, [esi+48]   ; @@BF2 12,13,14,15
  4276 000029E4 8B5634                                  mov     edx, [esi+52]   ; @@BF 12,13,+,COS4_0,1
  4277 000029E7 015630                                  add     [esi+48], edx
  4278 000029EA 29D0                                    sub     eax, edx
  4279 000029EC D1E0                                    shl     eax, 1
  4280 000029EE BA9A79825A                              mov     edx, 5A82799Ah
  4281 000029F3 F7EA                                    imul    edx
  4282 000029F5 895634                                  mov     [esi+52], edx
  4283 000029F8 8B4638                                  mov     eax, [esi+56]   ; @@BF 14,15,-,COS4_0,1
  4284 000029FB 8B563C                                  mov     edx, [esi+60]
  4285 000029FE 015638                                  add     [esi+56], edx
  4286 00002A01 29D0                                    sub     eax, edx
  4287 00002A03 D1E0                                    shl     eax, 1
  4288 00002A05 BA66867DA5                              mov     edx, 0A57D8666h
  4289 00002A0A F7EA                                    imul    edx
  4290 00002A0C 89563C                                  mov     [esi+60], edx
  4291 00002A0F 8B463C                                  mov     eax, [esi+60]   ; @@ADD 14,15
  4292 00002A12 014638                                  add     [esi+56], eax
  4293 00002A15 8B4638                                  mov     eax, [esi+56]   ; @@ADD 12,14
  4294 00002A18 014630                                  add     [esi+48], eax
  4295 00002A1B 8B4634                                  mov     eax, [esi+52]   ; @@ADD 14,13
  4296 00002A1E 014638                                  add     [esi+56], eax
  4297 00002A21 8B463C                                  mov     eax, [esi+60]   ; @@ADD 13,15
  4298 00002A24 014634                                  add     [esi+52], eax   ; ENDIF
  4299 00002A27 8B4640                                  mov     eax, [esi+64]   ; @@BF1 16,17,18,19
  4300 00002A2A 8B5644                                  mov     edx, [esi+68]
  4301 00002A2D 015640                                  add     [esi+64], edx
  4302 00002A30 29D0                                    sub     eax, edx
  4303 00002A32 D1E0                                    shl     eax, 1
  4304 00002A34 BA9A79825A                              mov     edx, 5A82799Ah  ; +COS4_0
  4305 00002A39 F7EA                                    imul    edx
  4306 00002A3B 895644                                  mov     [esi+68], edx
  4307 00002A3E 8B4648                                  mov     eax, [esi+72]
  4308 00002A41 8B564C                                  mov     edx, [esi+76]
  4309 00002A44 015648                                  add     [esi+72], edx
  4310 00002A47 29D0                                    sub     eax, edx
  4311 00002A49 D1E0                                    shl     eax, 1
  4312 00002A4B BA66867DA5                              mov     edx, 0A57D8666h ; -COS4_0
  4313 00002A50 F7EA                                    imul    edx
  4314 00002A52 89564C                                  mov     [esi+76], edx
  4315 00002A55 8B464C                                  mov     eax, [esi+76]   ; @@ADD 18,19
  4316 00002A58 014648                                  add     [esi+72], eax
  4317 00002A5B 8B4650                                  mov     eax, [esi+80]   ; @@BF2 20,21,22,23
  4318 00002A5E 8B5654                                  mov     edx, [esi+84]
  4319 00002A61 015650                                  add     [esi+80], edx
  4320 00002A64 29D0                                    sub     eax, edx
  4321 00002A66 D1E0                                    shl     eax, 1
  4322 00002A68 BA9A79825A                              mov     edx, 5A82799Ah
  4323 00002A6D F7EA                                    imul    edx
  4324 00002A6F 895654                                  mov     [esi+84], edx
  4325 00002A72 8B4658                                  mov     eax, [esi+88]
  4326 00002A75 8B565C                                  mov     edx, [esi+92]
  4327 00002A78 015658                                  add     [esi+88], edx
  4328 00002A7B 29D0                                    sub     eax, edx
  4329 00002A7D D1E0                                    shl     eax, 1
  4330 00002A7F BA66867DA5                              mov     edx, 0A57D8666h
  4331 00002A84 F7EA                                    imul    edx
  4332 00002A86 89565C                                  mov     [esi+92], edx
  4333 00002A89 8B465C                                  mov     eax, [esi+92]   ; @@ADD 22,23
  4334 00002A8C 014658                                  add     [esi+88], eax
  4335 00002A8F 8B4658                                  mov     eax, [esi+88]   ; @@ADD 20,22
  4336 00002A92 014650                                  add     [esi+80], eax
  4337 00002A95 8B4654                                  mov     eax, [esi+84]
  4338 00002A98 014658                                  add     [esi+88], eax
  4339 00002A9B 8B465C                                  mov     eax, [esi+92]
  4340 00002A9E 014654                                  add     [esi+84], eax
  4341 00002AA1 8B4660                                  mov     eax, [esi+96]   ; @@BF1 24,25,26,27
  4342 00002AA4 8B5664                                  mov     edx, [esi+100]
  4343 00002AA7 015660                                  add     [esi+96], edx
  4344 00002AAA 29D0                                    sub     eax, edx
  4345 00002AAC D1E0                                    shl     eax, 1
  4346 00002AAE BA9A79825A                              mov     edx, 5A82799Ah
  4347 00002AB3 F7EA                                    imul    edx
  4348 00002AB5 895664                                  mov     [esi+100], edx
  4349 00002AB8 8B4668                                  mov     eax, [esi+104]
  4350 00002ABB 8B566C                                  mov     edx, [esi+108]
  4351 00002ABE 015668                                  add     [esi+104], edx
  4352 00002AC1 29D0                                    sub     eax, edx
  4353 00002AC3 D1E0                                    shl     eax, 1
  4354 00002AC5 BA66867DA5                              mov     edx, 0A57D8666h
  4355 00002ACA F7EA                                    imul    edx
  4356 00002ACC 89566C                                  mov     [esi+108], edx
  4357 00002ACF 8B466C                                  mov     eax, [esi+108]
  4358 00002AD2 014668                                  add     [esi+104], eax
  4359 00002AD5 8B4670                                  mov     eax, [esi+112]  ; @@BF2 28,29,30,31
  4360 00002AD8 8B5674                                  mov     edx, [esi+116]
  4361 00002ADB 015670                                  add     [esi+112], edx
  4362 00002ADE 29D0                                    sub     eax, edx
  4363 00002AE0 D1E0                                    shl     eax, 1
  4364 00002AE2 BA9A79825A                              mov     edx, 5A82799Ah
  4365 00002AE7 F7EA                                    imul    edx
  4366 00002AE9 895674                                  mov     [esi+116], edx
  4367 00002AEC 8B4678                                  mov     eax, [esi+120]
  4368 00002AEF 8B567C                                  mov     edx, [esi+124]
  4369 00002AF2 015678                                  add     [esi+120], edx
  4370 00002AF5 29D0                                    sub     eax, edx
  4371 00002AF7 D1E0                                    shl     eax, 1
  4372 00002AF9 BA66867DA5                              mov     edx, 0A57D8666h
  4373 00002AFE F7EA                                    imul    edx
  4374 00002B00 89567C                                  mov     [esi+124], edx
  4375 00002B03 8B467C                                  mov     eax, [esi+124]
  4376 00002B06 014678                                  add     [esi+120], eax
  4377 00002B09 8B4678                                  mov     eax, [esi+120]
  4378 00002B0C 014670                                  add     [esi+112], eax
  4379 00002B0F 8B4674                                  mov     eax, [esi+116]
  4380 00002B12 014678                                  add     [esi+120], eax
  4381 00002B15 8B467C                                  mov     eax, [esi+124]
  4382 00002B18 014674                                  add     [esi+116], eax
  4383 00002B1B 8B06                                    mov     eax, [esi]      ; @@OUT macro dst,src1,src2
  4384                                                                          ; IF ((dst AND ((1 SHL rate_shift)-1)) EQ 0)
  4385                                                                          ;    mov eax,dword ptr [esi+src1*4]
  4386                                                                          ;    IFDIFI <src2>,<->
  4387                                                                          ;      add eax,dword ptr [esi+src2*4]
  4388                                                                          ;    ENDIF
  4389                                                                          ;    IF SYNTH32
  4390                                                                          ;       mov dword ptr [edi+dst*4],eax
  4391                                                                          ;       IF (LONG_WINDOW EQ 0)
  4392                                                                          ;          mov dword ptr [edi+dst*4+512*4],eax
  4393                                                                          ;       ENDIF
  4394                                                                          ;    ELSE
  4395                                                                          ;        ......
  4396                                                                          ;    ENDIF
  4397                                                                          ; @@OUT 0,0,-
  4398 00002B1D 8907                                    mov     [edi], eax      ; mov dword ptr [edi+dst*4],eax
  4399 00002B1F 8B4604                                  mov     eax, [esi+4]    ; @@OUT 16,1, -
  4400                                                                          ; mov eax,dword ptr [esi+src1*4]
  4401 00002B22 894740                                  mov     [edi+64], eax   ; mov dword ptr [edi+dst*4],eax
  4402 00002B25 8B4608                                  mov     eax, [esi+8]    ; @@OUT 8,2,-
  4403 00002B28 894720                                  mov     [edi+32], eax
  4404 00002B2B 8B460C                                  mov     eax, [esi+12]   ; @@OUT 24,3,-
  4405 00002B2E 894760                                  mov     [edi+96], eax
  4406 00002B31 8B4610                                  mov     eax, [esi+16]   ; @@OUT 4,4,-
  4407 00002B34 894710                                  mov     [edi+16], eax
  4408 00002B37 8B4614                                  mov     eax, [esi+20]   ; @@OUT 20,5,-
  4409 00002B3A 894750                                  mov     [edi+80], eax
  4410 00002B3D 8B4618                                  mov     eax, [esi+24]   ; @@OUT 12,6,-
  4411 00002B40 894730                                  mov     [edi+48], eax
  4412 00002B43 8B461C                                  mov     eax, [esi+28]   ; @@OUT 28,7,-
  4413 00002B46 894770                                  mov     [edi+112], eax
  4414 00002B49 8B4620                                  mov     eax, [esi+32]   ; @@OUT 2,8,12
  4415 00002B4C 034630                                  add     eax, [esi+48]   ; add eax,dword ptr [esi+src2*4]
  4416 00002B4F 894708                                  mov     [edi+8], eax
  4417 00002B52 8B4624                                  mov     eax, [esi+36]   ; @@OUT 18,9,13
  4418 00002B55 034634                                  add     eax, [esi+52]   ; add eax,dword ptr [esi+src2*4]
  4419 00002B58 894748                                  mov     [edi+72], eax
  4420 00002B5B 8B4628                                  mov     eax, [esi+40]   ; @@OUT 10,10,14
  4421 00002B5E 034638                                  add     eax, [esi+56]
  4422 00002B61 894728                                  mov     [edi+40], eax
  4423 00002B64 8B462C                                  mov     eax, [esi+44]   ; @@OUT 26,11,15
  4424 00002B67 03463C                                  add     eax, [esi+60]
  4425 00002B6A 894768                                  mov     [edi+104], eax
  4426 00002B6D 8B4630                                  mov     eax, [esi+48]   ; @@OUT 6,12,10
  4427 00002B70 034628                                  add     eax, [esi+40]
  4428 00002B73 894718                                  mov     [edi+24], eax
  4429 00002B76 8B4634                                  mov     eax, [esi+52]   ; @@OUT 22,13,11
  4430 00002B79 03462C                                  add     eax, [esi+44]
  4431 00002B7C 894758                                  mov     [edi+88], eax
  4432 00002B7F 8B4638                                  mov     eax, [esi+56]   ; @@OUT 14,14,9
  4433 00002B82 034624                                  add     eax, [esi+36]
  4434 00002B85 894738                                  mov     [edi+56], eax
  4435 00002B88 8B463C                                  mov     eax, [esi+60]   ; @@OUT 30,15,-
  4436 00002B8B 894778                                  mov     [edi+120], eax
  4437 00002B8E 8B4670                                  mov     eax, [esi+112]  ; @@ADD 24,28
  4438 00002B91 014660                                  add     [esi+96], eax
  4439 00002B94 8B4668                                  mov     eax, [esi+104]  ; @@ADD 28,26
  4440 00002B97 014670                                  add     [esi+112], eax
  4441 00002B9A 8B4678                                  mov     eax, [esi+120]  ; @@ADD 26,30
  4442 00002B9D 014668                                  add     [esi+104], eax
  4443 00002BA0 8B4664                                  mov     eax, [esi+100]  ; @@ADD 30,25
  4444 00002BA3 014678                                  add     [esi+120], eax
  4445 00002BA6 8B4674                                  mov     eax, [esi+116]  ; @@ADD 25,29
  4446 00002BA9 014664                                  add     [esi+100], eax
  4447 00002BAC 8B466C                                  mov     eax, [esi+108]  ; @@ADD 29,27
  4448 00002BAF 014674                                  add     [esi+116], eax
  4449 00002BB2 8B467C                                  mov     eax, [esi+124]  ; @@ADD 27,31
  4450 00002BB5 01466C                                  add     [esi+108], eax
  4451 00002BB8 8B4640                                  mov     eax, [esi+64]   ; @@OUT 1,16,24
  4452 00002BBB 034660                                  add     eax, [esi+96]
  4453 00002BBE 894704                                  mov     [edi+4], eax
  4454 00002BC1 8B4644                                  mov     eax, [esi+68]   ; @@OUT 17,17,25
  4455 00002BC4 034664                                  add     eax, [esi+100]
  4456 00002BC7 894744                                  mov     [edi+68], eax
  4457 00002BCA 8B4648                                  mov     eax, [esi+72]   ; @@OUT 9,18,26
  4458 00002BCD 034668                                  add     eax, [esi+104]
  4459 00002BD0 894724                                  mov     [edi+36], eax
  4460 00002BD3 8B464C                                  mov     eax, [esi+76]   ; @@OUT 25,19,27
  4461 00002BD6 03466C                                  add     eax, [esi+108]
  4462 00002BD9 894764                                  mov     [edi+100], eax
  4463 00002BDC 8B4650                                  mov     eax, [esi+80]   ; @@OUT 5,20,28
  4464 00002BDF 034670                                  add     eax, [esi+112]
  4465 00002BE2 894714                                  mov     [edi+20], eax
  4466 00002BE5 8B4654                                  mov     eax, [esi+84]   ; @@OUT 21,21,29
  4467 00002BE8 034674                                  add     eax, [esi+116]
  4468 00002BEB 894754                                  mov     [edi+84], eax
  4469 00002BEE 8B4658                                  mov     eax, [esi+88]   ; @@OUT 13,22,30
  4470 00002BF1 034678                                  add     eax, [esi+120]
  4471 00002BF4 894734                                  mov     [edi+52], eax
  4472 00002BF7 8B465C                                  mov     eax, [esi+92]   ; @@OUT 29,23,31
  4473 00002BFA 03467C                                  add     eax, [esi+124]
  4474 00002BFD 894774                                  mov     [edi+116], eax
  4475 00002C00 8B4660                                  mov     eax, [esi+96]   ; @@OUT 3,24,20
  4476 00002C03 034650                                  add     eax, [esi+80]
  4477 00002C06 89470C                                  mov     [edi+12], eax
  4478 00002C09 8B4664                                  mov     eax, [esi+100]  ; @@OUT 19,25,21
  4479 00002C0C 034654                                  add     eax, [esi+84]
  4480 00002C0F 89474C                                  mov     [edi+76], eax
  4481 00002C12 8B4668                                  mov     eax, [esi+104]  ; @@OUT 11,26,22
  4482 00002C15 034658                                  add     eax, [esi+88]
  4483 00002C18 89472C                                  mov     [edi+44], eax
  4484 00002C1B 8B466C                                  mov     eax, [esi+108]  ; @@OUT 27,27,23
  4485 00002C1E 03465C                                  add     eax, [esi+92]
  4486 00002C21 89476C                                  mov     [edi+108], eax
  4487 00002C24 8B4670                                  mov     eax, [esi+112]  ; @@OUT 7,28,18
  4488 00002C27 034648                                  add     eax, [esi+72]
  4489 00002C2A 89471C                                  mov     [edi+28], eax
  4490 00002C2D 8B4674                                  mov     eax, [esi+116]  ; @@OUT 23,29,19
  4491 00002C30 03464C                                  add     eax, [esi+76]
  4492 00002C33 89475C                                  mov     [edi+92], eax
  4493 00002C36 8B4678                                  mov     eax, [esi+120]  ; @@OUT 15,30,17
  4494 00002C39 034644                                  add     eax, [esi+68]
  4495 00002C3C 89473C                                  mov     [edi+60], eax
  4496 00002C3F 8B467C                                  mov     eax, [esi+124]  ; @@OUT 31,31,-
  4497 00002C42 89477C                                  mov     [edi+124], eax
  4498 00002C45 C3                                      retn
  4499                                  
  4500                                  
  4501                                  ; =============== S U B R O U T I N E =======================================
  4502                                  
  4503                                  		; 15/02/2025
  4504                                  mp3_synth_filter_proc:
  4505                                  		;;;;
  4506                                  synth_16bit_shift_0_slow:
  4507                                  
  4508                                                 	; 16/02/2025
  4509                                  .no_rdtsc_supported:
  4510 00002C46 BE[ECDB0000]                            mov	esi, mp3_sb_samples
  4511 00002C4B 8B3D[7C120100]                          mov	edi, [mp3_samples_dst]
  4512 00002C51 C705[88120100]0000-                     mov	dword [mp3_curr_channel], 0
  4512 00002C59 0000               
  4513                                  
  4514                                  .synth_channel_lop:
  4515 00002C5B 56                                      push	esi
  4516 00002C5C 57                                      push	edi
  4517 00002C5D 893D[D0BB0000]                          mov	[mp3_curr_syn_dst], edi
  4518 00002C63 C705[90120100]0000-                     mov	dword [mp3_curr_frame], 0
  4518 00002C6B 0000               
  4519                                  
  4520                                  .synth_frame_lop:
  4521 00002C6D 56                                      push    esi
  4522                                  	
  4523                                  		; 16/02/2025
  4524                                  .no_rdtsc_supported@:
  4525 00002C6E 8B15[88120100]                          mov     edx, [mp3_curr_channel]
  4526 00002C74 8B0495[E4DB0000]                        mov     eax, [mp3_synth_index+edx*4]
  4527 00002C7B 832C95[E4DB0000]20                      sub     dword [mp3_synth_index+edx*4], 32
  4528 00002C83 C1E20A                                  shl     edx, 10         ; channel*1024
  4529 00002C86 25E0010000                              and     eax, 1E0h       ; 1FFh-1Fh
  4530 00002C8B 09D0                                    or      eax, edx
  4531 00002C8D A3[CCBB0000]                            mov     [mp3_curr_syn_index], eax
  4532 00002C92 8B3D[CCBB0000]                          mov     edi, [mp3_curr_syn_index]
  4533 00002C98 8D3CBD[E4BB0000]                        lea     edi, [mp3_synth_buf+edi*4]
  4534 00002C9F E8C2F6FFFF                              call    mp3_dct32_shift_0 ; mp3_dct32_shift_&rate_shift
  4535                                  		
  4536                                  		; 16/02/2025		
  4537                                  .no_rdtsc_supported@@:
  4538                                  
  4539                                  		; 16/02/2025
  4540                                  .no_rdtsc_supported@@@:
  4541 00002CA4 E84A000000                              call    mp3_synth_filter_this_16bit_shift_0_slow
  4542                                  	
  4543                                  		; 16/02/2025
  4544                                  .no_rdtsc_supported@@@@:
  4545 00002CA9 5E                                      pop     esi
  4546 00002CAA A1[84120100]                            mov     eax, [mp3_samples_dst_step]
  4547 00002CAF C1E005                                  shl     eax, 5
  4548                                  		; 15/02/2025
  4549 00002CB2 0105[D0BB0000]                          add     [mp3_curr_syn_dst], eax
  4550 00002CB8 81C680000000                            add     esi, 128        ; SBLIMIT*4
  4551 00002CBE FF05[90120100]                          inc     dword [mp3_curr_frame]
  4552 00002CC4 A1[90120100]                            mov     eax, [mp3_curr_frame]
  4553 00002CC9 3B05[D4BB0000]                          cmp     eax, [mp3_nb_frames]
  4554 00002CCF 729C                                    jb      .synth_frame_lop
  4555 00002CD1 5F                                      pop     edi
  4556 00002CD2 5E                                      pop     esi
  4557                                  		;add	edi, [mp3_bytes_per_sample]
  4558                                  		; 17/02/2025
  4559                                  		;add	edi, 2 ; [mp3_bytes_per_sample] = 2
  4560 00002CD3 47                                      inc	edi
  4561 00002CD4 47                      		inc	edi
  4562 00002CD5 81C600120000            		add     esi, 4608       ; 36*SBLIMIT*4
  4563 00002CDB FF05[88120100]                          inc     dword [mp3_curr_channel]
  4564 00002CE1 A1[88120100]                            mov     eax, [mp3_curr_channel]
  4565                                  		; 16/02/2025
  4566 00002CE6 3B05[C8BB0000]                          cmp     eax, [mp3_num_channels]
  4567 00002CEC 0F8269FFFFFF                            jb      .synth_channel_lop
  4568                                  	
  4569                                  		; 16/02/2025
  4570                                  .no_rdtsc_supported@@@@@:
  4571 00002CF2 C3                                      retn
  4572                                  
  4573                                  
  4574                                  ; =============== S U B R O U T I N E =======================================
  4575                                  
  4576                                  
  4577                                  mp3_synth_filter_this_16bit_shift_0_slow:
  4578 00002CF3 A1[CCBB0000]                            mov     eax, [mp3_curr_syn_index]
  4579 00002CF8 A9E0010000                              test    eax, 1E0h       ; 1FFh-1Fh
  4580 00002CFD 0F847C010000                            jz      .append_copy_to_window
  4581 00002D03 90                                      nop
  4582                                  
  4583                                  .append_copy_to_window_back:
  4584 00002D04 89C5                                    mov     ebp, eax        ; mov @@win1,eax
  4585 00002D06 81E5C0010000                            and     ebp, 1C0h       ; and @@win1,1FFh-1Fh-20h
  4586 00002D0C 2520040000                              and     eax, 420h       ; and eax,20h+(1 shl 10) ; bit5, and channel
  4587 00002D11 8D7010                                  lea     esi, [eax+10h]  ; lea @@syn1,[eax+10h]
  4588 00002D14 8D7830                                  lea     edi, [eax+30h]  ; lea @@syn2,[eax+30h]
  4589 00002D17 F7DD                                    neg     ebp
  4590 00002D19 81E5C0010000                            and     ebp, 1C0h       ; and @@win1,1FFh-1Fh-20h
  4591 00002D1F 8B0D[D0BB0000]                          mov     ecx, [mp3_curr_syn_dst]
  4592                                  
  4593                                  .samples_lop:
  4594 00002D25 BB10001000                              mov     ebx, 100010h    ; mov @@sum,(8000h SHL (@@out_shift))+(1 SHL (@@out_shift-1))
  4595                                                                          ; @@out_shift = 5
  4596                                  
  4597                                  .SUM8_@:                                ; @@SUM8 macro sum,win,ww,syn
  4598 00002D2A 8B14B5[E4BB0000]                        mov     edx, [mp3_synth_buf+esi*4] ; IRP nn,0,1,2,3,4,5,6,7
  4599                                                                          ; @@SUM8 @@sum,@@win1,0, @@syn1
  4600 00002D31 8B04AD[980D0500]                        mov     eax, [mp3_synth_win+ebp*4] ; [mp3_synth_buf+syn*4+(nn*64*4)]
  4601 00002D38 F7EA                                    imul    edx             ; [mp3_synth_win+win*4+(nn*64*4)+ww*4]
  4602 00002D3A 01D3                                    add     ebx, edx
  4603 00002D3C 8B14B5[E4BC0000]                        mov     edx, [(mp3_synth_buf+100h)+esi*4]
  4604 00002D43 8B04AD[980E0500]                        mov     eax, [(mp3_synth_win+100h)+ebp*4]
  4605 00002D4A F7EA                                    imul    edx
  4606 00002D4C 01D3                                    add     ebx, edx        ; add sum,edx
  4607 00002D4E 8B14B5[E4BD0000]                        mov     edx, [(mp3_synth_buf+200h)+esi*4]
  4608 00002D55 8B04AD[980F0500]                        mov     eax, [(mp3_synth_win+200h)+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4]
  4609 00002D5C F7EA                                    imul    edx             ; 64bit = 32bit * 32bit
  4610 00002D5E 01D3                                    add     ebx, edx
  4611 00002D60 8B14B5[E4BE0000]                        mov     edx, [(mp3_synth_buf+300h)+esi*4]
  4612 00002D67 8B04AD[98100500]                        mov     eax, [(mp3_synth_win+300h)+ebp*4]
  4613 00002D6E F7EA                                    imul    edx
  4614 00002D70 01D3                                    add     ebx, edx
  4615 00002D72 8B14B5[E4BF0000]                        mov     edx, [(mp3_synth_buf+400h)+esi*4]
  4616 00002D79 8B04AD[98110500]                        mov     eax, [(mp3_synth_win+400h)+ebp*4]
  4617 00002D80 F7EA                                    imul    edx
  4618 00002D82 01D3                                    add     ebx, edx
  4619 00002D84 8B14B5[E4C00000]                        mov     edx, [(mp3_synth_buf+500h)+esi*4]
  4620 00002D8B 8B04AD[98120500]                        mov     eax, [(mp3_synth_win+500h)+ebp*4]
  4621 00002D92 F7EA                                    imul    edx
  4622 00002D94 01D3                                    add     ebx, edx
  4623 00002D96 8B14B5[E4C10000]                        mov     edx, [(mp3_synth_buf+600h)+esi*4]
  4624 00002D9D 8B04AD[98130500]                        mov     eax, [(mp3_synth_win+600h)+ebp*4]
  4625 00002DA4 F7EA                                    imul    edx
  4626 00002DA6 01D3                                    add     ebx, edx
  4627 00002DA8 8B14B5[E4C20000]                        mov     edx, [(mp3_synth_buf+700h)+esi*4]
  4628 00002DAF 8B04AD[98140500]                        mov     eax, [(mp3_synth_win+700h)+ebp*4]
  4629 00002DB6 F7EA                                    imul    edx
  4630 00002DB8 01D3                                    add     ebx, edx
  4631                                  
  4632                                  .skippp:                               ; @@SUM8 macro sum,win,ww,syn
  4633 00002DBA 8B14BD[E4BB0000]                        mov     edx, [mp3_synth_buf+edi*4] ; @@SUM8 @@sum,@@win1,32,@@syn2
  4634                                                                          ; [mp3_synth_buf+syn*4+(nn*64*4)]
  4635 00002DC1 8B04AD[180E0500]                        mov     eax, [(mp3_synth_win+80h)+ebp*4] ; [mp3_synth_win+win*4+(nn*64*4)+ww*4]
  4636 00002DC8 F7EA                                    imul    edx
  4637 00002DCA 01D3                                    add     ebx, edx
  4638 00002DCC 8B14BD[E4BC0000]                        mov     edx, [(mp3_synth_buf+100h)+edi*4]
  4639 00002DD3 8B04AD[180F0500]                        mov     eax, [(mp3_synth_win+180h)+ebp*4]
  4640 00002DDA F7EA                                    imul    edx
  4641 00002DDC 01D3                                    add     ebx, edx
  4642 00002DDE 8B14BD[E4BD0000]                        mov     edx, [(mp3_synth_buf+200h)+edi*4]
  4643 00002DE5 8B04AD[18100500]                        mov     eax, [(mp3_synth_win+280h)+ebp*4]
  4644 00002DEC F7EA                                    imul    edx
  4645 00002DEE 01D3                                    add     ebx, edx
  4646 00002DF0 8B14BD[E4BE0000]                        mov     edx, [(mp3_synth_buf+300h)+edi*4]
  4647 00002DF7 8B04AD[18110500]                        mov     eax, [(mp3_synth_win+380h)+ebp*4]
  4648 00002DFE F7EA                                    imul    edx
  4649 00002E00 01D3                                    add     ebx, edx
  4650 00002E02 8B14BD[E4BF0000]                        mov     edx, [(mp3_synth_buf+400h)+edi*4]
  4651 00002E09 8B04AD[18120500]                        mov     eax, [(mp3_synth_win+480h)+ebp*4]
  4652 00002E10 F7EA                                    imul    edx
  4653 00002E12 01D3                                    add     ebx, edx
  4654 00002E14 8B14BD[E4C00000]                        mov     edx, [(mp3_synth_buf+500h)+edi*4]
  4655 00002E1B 8B04AD[18130500]                        mov     eax, [(mp3_synth_win+580h)+ebp*4]
  4656 00002E22 F7EA                                    imul    edx
  4657 00002E24 01D3                                    add     ebx, edx
  4658 00002E26 8B14BD[E4C10000]                        mov     edx, [(mp3_synth_buf+600h)+edi*4]
  4659 00002E2D 8B04AD[18140500]                        mov     eax, [(mp3_synth_win+680h)+ebp*4]
  4660 00002E34 F7EA                                    imul    edx
  4661 00002E36 01D3                                    add     ebx, edx
  4662 00002E38 8B14BD[E4C20000]                        mov     edx, [(mp3_synth_buf+700h)+edi*4]
  4663 00002E3F 8B04AD[18150500]                        mov     eax, [(mp3_synth_win+780h)+ebp*4]
  4664 00002E46 F7EA                                    imul    edx
  4665 00002E48 01D3                                    add     ebx, edx
  4666 00002E4A 81FB00002000                            cmp     ebx, 200000h    ; cmp @@sum,10000h SHL (@@out_shift)
  4667 00002E50 7322                                    jnb     short .sat
  4668 00002E52 C1FB05                                  sar     ebx, 5          ; sar @@sum,(@@out_shift)
  4669 00002E55 81EB00800000                            sub     ebx, 8000h      ; make 16bit signed
  4670                                  
  4671                                  .sat_back:
  4672 00002E5B 668919                                  mov     [ecx], bx
  4673 00002E5E 030D[84120100]                          add     ecx, [mp3_samples_dst_step]
  4674 00002E64 46                                      inc     esi             ; inc @@syn1
  4675 00002E65 4F                                      dec     edi             ; dec @@syn2
  4676 00002E66 45                                      inc     ebp             ; inc @@win1
  4677 00002E67 F7C51F000000                            test    ebp, 1Fh        ; test @@win1,1Fh
  4678 00002E6D 0F85B2FEFFFF                            jnz     .samples_lop
  4679 00002E73 C3                                      retn
  4680                                  
  4681                                  .sat:
  4682 00002E74 C1FB1F                                  sar     ebx, 31         ; FFFFFFFFh,00000000h
  4683 00002E77 81F3FF7F0000                            xor     ebx, 7FFFh      ; FFFF8000h,00007FFFh (signed 16bit)
  4684 00002E7D EBDC                                    jmp     short .sat_back
  4685                                  
  4686                                  .append_copy_to_window:
  4687 00002E7F 8D3485[E4BB0000]                        lea     esi, [mp3_synth_buf+eax*4]
  4688 00002E86 8DBE00080000                            lea     edi, [esi+2048] ; [esi+512*4]
  4689 00002E8C B912000000                              mov     ecx, 18         ; (12h*4)/4
  4690 00002E91 F3A5                                    rep movsd
  4691 00002E93 E96CFEFFFF                              jmp     .append_copy_to_window_back
  4692                                  
  4693                                  
  4694                                  ; =============== S U B R O U T I N E =======================================
  4695                                  
  4696                                  
  4697                                  mp3_any_init_synth_window:
  4698 00002E98 31D2                                    xor     edx, edx        ; index (0..100h)
  4699 00002E9A 31C9                                    xor     ecx, ecx        ; delta.val
  4700 00002E9C 898C12[980D0500]                        mov     [mp3_synth_win+edx*2], ecx
  4701                                  
  4702                                  .synth_lop:
  4703 00002EA3 0FBF9C12[E2950000]                      movsx   ebx, word [mp3_synth_win_src+edx*2]
  4704 00002EAB 01D9                                    add     ecx, ebx
  4705 00002EAD 89C8                                    mov     eax, ecx
  4706                                  
  4707                                  		; 15/02/2025
  4708 00002EAF C1E00E                                  shl	eax, 14         ; (WFRAC_BITS_slow-WFRAC_BITS_default)
  4709                                  
  4710 00002EB2 42                                      inc     edx             ; index (1..100h)
  4711 00002EB3 BB00020000                              mov     ebx, 200h
  4712 00002EB8 29D3                                    sub     ebx, edx        ; 1FFh..100h
  4713 00002EBA 89049D[980D0500]                        mov     [mp3_synth_win+ebx*4], eax
  4714 00002EC1 F7C23F000000                            test    edx, 3Fh
  4715 00002EC7 7402                                    jz      short .synth_keep_sign
  4716 00002EC9 F7D8                                    neg     eax
  4717                                  
  4718                                  .synth_keep_sign:
  4719 00002ECB 890495[980D0500]                        mov     [mp3_synth_win+edx*4], eax
  4720 00002ED2 81FA00010000                            cmp     edx, 100h
  4721 00002ED8 72C9                                    jb      short .synth_lop
  4722 00002EDA 31D2                                    xor     edx, edx
  4723                                  
  4724                                  .synth_neg_lop:
  4725 00002EDC F7C230000000                            test    edx, 30h        ; skip 0..0Fh (only negate 10h..3Fh)
  4726 00002EE2 7407                                    jz      short .synth_neg_next
  4727 00002EE4 F71C95[980D0500]                        neg     dword [mp3_synth_win+edx*4]
  4728                                  
  4729                                  .synth_neg_next:
  4730 00002EEB 42                                      inc     edx
  4731 00002EEC 81FA00020000                            cmp     edx, 200h
  4732 00002EF2 72E8                                    jb      short .synth_neg_lop
  4733 00002EF4 31D2                                    xor     edx, edx
  4734                                  
  4735                                  .synth_swap_lop:
  4736 00002EF6 89D0                                    mov     eax, edx
  4737 00002EF8 83E03F                                  and     eax, 3Fh
  4738 00002EFB 83E811                                  sub     eax, 17         ; swap win [(17..31)] with win[(17..31)+32)
  4739 00002EFE 83F80E                                  cmp     eax, 14         ; 31-17
  4740 00002F01 7715                                    ja      short .synth_swap_next
  4741 00002F03 8B0495[980D0500]                        mov     eax, [mp3_synth_win+edx*4]
  4742 00002F0A 870495[180E0500]                        xchg    eax, [(mp3_synth_win+80h)+edx*4]
  4743 00002F11 890495[980D0500]                        mov     [mp3_synth_win+edx*4], eax
  4744                                  
  4745                                  .synth_swap_next:
  4746 00002F18 42                                      inc     edx
  4747 00002F19 81FA00020000                            cmp     edx, 200h
  4748 00002F1F 72D5                                    jb      short .synth_swap_lop
  4749 00002F21 31D2                                    xor     edx, edx
  4750                                  
  4751                                  .synth_zero_lop:
  4752 00002F23 C70495[D80D0500]00-                     mov	dword [(mp3_synth_win+40h)+edx*4], 0
  4752 00002F2B 000000             
  4753 00002F2E 83C240                                  add	edx, 40h
  4754 00002F31 81FA00020000                            cmp	edx, 200h
  4755 00002F37 72EA                                    jb	short .synth_zero_lop
  4756 00002F39 BE[980D0500]                            mov	esi, mp3_synth_win
  4757 00002F3E 8DBE00080000                            lea	edi, [esi+2048] ; [esi+512*4]
  4758 00002F44 B900020000                              mov	ecx, 512        ; append another copy
  4759 00002F49 F3A5                                    rep movsd
  4760 00002F4B C3                                      retn
  4761                                  
  4762                                  
  4763                                  ; =============== S U B R O U T I N E =======================================
  4764                                  
  4765                                  
  4766                                  mp3_any_init_band_indices:
  4767 00002F4C BE[149E0000]                            mov     esi, mp3_band_size_long
  4768 00002F51 BF[ACF50100]                            mov     edi, mp3_band_index_long
  4769 00002F56 BB09000000                              mov     ebx, 9
  4770                                  
  4771                                  .band_index_lop_i:
  4772 00002F5B 31C0                                    xor     eax, eax
  4773 00002F5D B916000000                              mov     ecx, 22
  4774                                  
  4775                                  .band_index_lop_j:
  4776 00002F62 66AB                                    stosw
  4777 00002F64 0FB616                                  movzx   edx, byte [esi]
  4778 00002F67 01D0                                    add     eax, edx
  4779 00002F69 46                                      inc     esi
  4780 00002F6A E2F6                                    loop    .band_index_lop_j
  4781 00002F6C 83C10A                                  add     ecx, 10
  4782 00002F6F F366AB                                  rep stosw
  4783 00002F72 4B                                      dec     ebx
  4784 00002F73 75E6                                    jnz     short .band_index_lop_i
  4785 00002F75 C3                                      retn
  4786                                  
  4787                                  
  4788                                  ; =============== S U B R O U T I N E =======================================
  4789                                  
  4790                                  
  4791                                  mp3_any_init_lsf_sf_expand:
  4792 00002F76 BE[B2950000]                            mov     esi, mp3_lsf_sf_expand_init_table
  4793 00002F7B BF[981D0500]                            mov     edi, mp3_lsf_sf_expand_exploded_table
  4794 00002F80 31D2                                    xor     edx, edx        ; curr.index
  4795 00002F82 31DB                                    xor     ebx, ebx        ; curr.base
  4796                                  
  4797                                  .lop:
  4798 00002F84 663B5606                                cmp     dx, [esi+6]     ; nextbase
  4799 00002F88 7207                                    jb      short .inrange
  4800 00002F8A 668B5E06                                mov     bx, [esi+6]
  4801 00002F8E 83C608                                  add     esi, 8          ; next entry
  4802                                  
  4803                                  .inrange:
  4804 00002F91 89D0                                    mov     eax, edx
  4805 00002F93 29D8                                    sub     eax, ebx
  4806 00002F95 8A0E                                    mov     cl, [esi]
  4807 00002F97 D3E8                                    shr     eax, cl         ; div2
  4808 00002F99 F67603                                  div     byte [esi+3] ; mod3 ; [2]=slen[3]
  4809 00002F9C 886703                                  mov     [edi+3], ah
  4810 00002F9F B400                                    mov     ah, 0           ; eax=div.result
  4811 00002FA1 F67602                                  div     byte [esi+2] ; mod2 ; [2]=slen[2]
  4812 00002FA4 886702                                  mov     [edi+2], ah     ; remainder
  4813 00002FA7 B400                                    mov     ah, 0
  4814 00002FA9 F67601                                  div     byte [esi+1] ; mod1 ; [1]=slen[1]
  4815 00002FAC 668907                                  mov     [edi], ax       ; [0]=slen[0]
  4816 00002FAF 668B4604                                mov     ax, [esi+4]     ; [4]=tindex2
  4817 00002FB3 66894704                                mov     [edi+4], ax     ; [5]=force_preflag
  4818 00002FB7 83C708                                  add     edi, 8
  4819 00002FBA 42                                      inc     edx             ; curr.index ; next
  4820 00002FBB 81FA00040000                            cmp     edx, 1024       ; 512+512
  4821 00002FC1 72C1                                    jb      short .lop
  4822 00002FC3 C3                                      retn
  4823                                  
  4824                                  
  4825                                  ; =============== S U B R O U T I N E =======================================
  4826                                  
  4827                                  
  4828                                  mp3_any_init_huff_tables:
  4829 00002FC4 BD[4C980000]                            mov     ebp, huff_tree_list_data
  4830 00002FC9 BE[3AA20000]                            mov     esi, huff_tree_list_numbits
  4831 00002FCE BA01000000                              mov     edx, 1          ; idx (table 01h..11h)
  4832                                  
  4833                                  .huffman_table_lop:
  4834 00002FD3 31C0                                    xor     eax, eax
  4835 00002FD5 BF[C4470500]                            mov     edi, mp3_huff_tmp_bits
  4836 00002FDA B940000000                              mov     ecx, 40h        ; 100h/4 ; 100h x 8bit
  4837 00002FDF F3AB                                    rep stosd
  4838 00002FE1 BF[C4480500]                            mov     edi, mp3_huff_tmp_codes
  4839 00002FE6 B980000000                              mov     ecx, 80h        ; 100h/2 ; 100h x 16bit
  4840 00002FEB F3AB                                    rep stosd
  4841 00002FED 31DB                                    xor     ebx, ebx
  4842                                  
  4843                                  .huff_entry_lop:
  4844 00002FEF 0FB67D00                                movzx   edi, byte [ebp+0]
  4845 00002FF3 45                                      inc     ebp             ; dst=data
  4846 00002FF4 AC                                      lodsb                   ; numbits
  4847 00002FF5 8887[C4470500]                          mov     [mp3_huff_tmp_bits+edi], al
  4848 00002FFB B120                                    mov     cl, 32
  4849 00002FFD 28C1                                    sub     cl, al          ; 32-numbits
  4850 00002FFF D3EB                                    shr     ebx, cl
  4851 00003001 66899C3F[C4480500]                      mov     word [mp3_huff_tmp_codes+edi*2], bx
  4852 00003009 43                                      inc     ebx             ; next.code
  4853 0000300A D3E3                                    shl     ebx, cl         ; shift back to MSBs
  4854 0000300C 75E1                                    jnz     short .huff_entry_lop
  4855 0000300E 60                                      pusha
  4856 0000300F B800010000                              mov     eax, 100h       ; nb_codes
  4857 00003014 BB[C4470500]                            mov     ebx, mp3_huff_tmp_bits ; bits
  4858 00003019 BE[C4480500]                            mov     esi, mp3_huff_tmp_codes ; codes
  4859 0000301E E82C020000                              call    mp3_build_huff_table_root ; make table
  4860 00003023 61                                      popa
  4861 00003024 42                                      inc     edx             ; idx
  4862 00003025 83FA12                                  cmp     edx, 12h
  4863 00003028 75A9                                    jnz     short .huffman_table_lop ; next table
  4864 0000302A C3                                      retn
  4865                                  
  4866                                  
  4867                                  ; =============== S U B R O U T I N E =======================================
  4868                                  
  4869                                  
  4870                                  mp3_integer_init_is_stereo_lsf:
  4871 0000302B 31FF                                    xor     edi, edi
  4872                                  
  4873                                  .lsf_lop:
  4874 0000302D 89FE                                    mov     esi, edi
  4875 0000302F 83E63F                                  and     esi, 3Fh
  4876 00003032 46                                      inc     esi
  4877 00003033 D1EE                                    shr     esi, 1
  4878 00003035 F7C740000000                            test    edi, 40h
  4879 0000303B 7402                                    jz      short .lsf_no_shift
  4880 0000303D D1E6                                    shl     esi, 1
  4881                                  
  4882                                  .lsf_no_shift:
  4883 0000303F BA00000040                              mov     edx, 40000000h  ; aka mul 1.000
  4884 00003044 83C604                                  add     esi, 4
  4885 00003047 F7C780000000                            test    edi, 80h        ; 2*40h
  4886 0000304D 7408                                    jz      short .no_ms_stereo
  4887 0000304F BA9A79825A                              mov     edx, 5A82799Ah  ; 2D413CCDh*2 ; aka mul 1.414
  4888 00003054 83EE02                                  sub     esi, 2
  4889                                  
  4890                                  .no_ms_stereo:
  4891 00003057 89F1                                    mov     ecx, esi
  4892 00003059 C1E902                                  shr     ecx, 2          ; msbs
  4893 0000305C 83E603                                  and     esi, 3          ; lsbs
  4894 0000305F 8B04B5[0CA20000]                        mov     eax, [mp3_is_table_lsf_src+esi*4]
  4895 00003066 D3E8                                    shr     eax, cl
  4896 00003068 F7C701000000                            test    edi, 1
  4897 0000306E 7501                                    jnz     short .lsf_no_swap
  4898 00003070 92                                      xchg    eax, edx
  4899                                  
  4900                                  .lsf_no_swap:
  4901 00003071 8904FD[98050500]                        mov     [mp3_is_table_lsf+edi*8], eax
  4902 00003078 8914FD[9C050500]                        mov     [(mp3_is_table_lsf+4)+edi*8], edx
  4903 0000307F 47                                      inc     edi
  4904 00003080 81FF00010000                            cmp     edi, 100h
  4905 00003086 72A5                                    jb      short .lsf_lop
  4906 00003088 C3                                      retn
  4907                                  
  4908                                  
  4909                                  ; =============== S U B R O U T I N E =======================================
  4910                                  
  4911                                  
  4912                                  mp3_integer_init_mdct_windows:
  4913 00003089 BF[18010500]                            mov     edi, mp3_mdct_win
  4914 0000308E BE[949F0000]                            mov     esi, mp3_mdct_win_src
  4915 00003093 B990000000                              mov     ecx, 144        ; 36*4
  4916 00003098 F3A5                                    rep movsd
  4917 0000309A BE[18010500]                            mov     esi, mp3_mdct_win
  4918 0000309F BF[58030500]                            mov     edi, (mp3_mdct_win+240h)
  4919 000030A4 B948000000                              mov     ecx, 72         ; 4*36/2 ; that is, 4*36 entry pairs
  4920                                  
  4921                                  .mdct_lop_dupe:                       
  4922 000030A9 A5                                      movsd                   ; copy normal, [4..7][even] = +[0..3][even
  4923 000030AA AD                                      lodsd
  4924 000030AB F7D8                                    neg     eax             ; copy negated, [4..7][odd] = -[0..3][odd]
  4925 000030AD AB                                      stosd
  4926 000030AE E2F9                                    loop    .mdct_lop_dupe
  4927 000030B0 C3                                      retn
  4928                                  
  4929                                  
  4930                                  ; =============== S U B R O U T I N E =======================================
  4931                                  
  4932                                  
  4933                                  mp3_integer_init_table_4_3:
  4934                                  		; 15/02/2025
  4935 000030B1 B048                                    mov	al, 72          ; 100-6-VFRAC_BITS_slow
  4936                                   .this_vfrac:
  4937 000030B3 A2[F0110100]                            mov     [mp3_curr_vfrac_bits], al
  4938 000030B8 31FF                                    xor     edi, edi
  4939                                  
  4940                                  .table_4_3_lop:
  4941 000030BA 57                                      push    edi             ; for i=1 to TABLE_4_3_SIZE-1
  4942 000030BB 89F8                                    mov     eax, edi
  4943 000030BD C1E802                                  shr     eax, 2
  4944 000030C0 F7E0                                    mul     eax
  4945 000030C2 F7E0                                    mul     eax
  4946 000030C4 31DB                                    xor     ebx, ebx
  4947 000030C6 E8A2000000                              call    cbrt96
  4948 000030CB 020D[F0110100]                          add     cl, [mp3_curr_vfrac_bits]
  4949 000030D1 5F                                      pop     edi
  4950                                  
  4951                                  .inner_lop:
  4952 000030D2 89F8                                    mov     eax, edi
  4953 000030D4 83E003                                  and     eax, 3
  4954 000030D7 8B0485[1CA20000]                        mov     eax, [mp3_pow2_quarters+eax*4]
  4955 000030DE F7E3                                    mul     ebx
  4956 000030E0 88CD                                    mov     ch, cl
  4957 000030E2 09D2                                    or      edx, edx
  4958 000030E4 7904                                    jns     short .this
  4959 000030E6 D1EA                                    shr     edx, 1
  4960 000030E8 FECD                                    dec     ch
  4961                                  
  4962                                  .this:
  4963 000030EA 8914BD[28780200]                        mov     [mp3_table_4_3_value+edi*4], edx
  4964 000030F1 88AF[ECF70100]                          mov     [mp3_table_4_3_exp+edi], ch
  4965 000030F7 47                                      inc     edi
  4966 000030F8 F7C703000000                            test    edi, 3
  4967 000030FE 75D2                                    jnz     short .inner_lop
  4968 00003100 81FF3C800000                            cmp     edi, 803Ch
  4969 00003106 72B2                                    jb      short .table_4_3_lop
  4970 00003108 C3                                      retn
  4971                                  
  4972                                  
  4973                                  ; =============== S U B R O U T I N E =======================================
  4974                                  
  4975                                  
  4976                                  mp3_integer_init_exponent:
  4977 00003109 BF[18810400]                            mov     edi, mp3_expval_table
  4978 0000310E 31D2                                    xor     edx, edx
  4979                                  
  4980                                  .exponent_lop:
  4981 00003110 89D0                                    mov     eax, edx        ; val=i
  4982 00003112 89D3                                    mov     ebx, edx
  4983 00003114 89D1                                    mov     ecx, edx
  4984 00003116 C1EB04                                  shr     ebx, 4
  4985 00003119 C1E906                                  shr     ecx, 6          ; 4+2
  4986 0000311C 83E00F                                  and     eax, 0Fh        ; val=i AND 0Fh
  4987 0000311F 83E303                                  and     ebx, 3
  4988 00003122 8D1C83                                  lea     ebx, [ebx+eax*4] ; (0..0Fh)*4+(0..3)
  4989 00003125 8B049D[28780200]                        mov     eax, [mp3_table_4_3_value+ebx*4]
  4990 0000312C 09C0                                    or      eax, eax
  4991 0000312E 741A                                    jz      short .this
  4992 00003130 2A8B[ECF70100]                          sub     cl, [mp3_table_4_3_exp+ebx]
  4993 00003136 770D                                    ja      short .left_shift
  4994 00003138 F6D9                                    neg     cl
  4995 0000313A D3E8                                    shr     eax, cl
  4996 0000313C 80F91F                                  cmp     cl, 1Fh
  4997 0000313F 7609                                    jbe     short .this
  4998 00003141 31C0                                    xor     eax, eax
  4999 00003143 EB05                                    jmp     short .this
  5000                                  
  5001                                  .left_shift:
  5002 00003145 B8FFFFFF7F                              mov     eax, 7FFFFFFFh
  5003                                  
  5004                                  .this:
  5005 0000314A AB                                      stosd
  5006 0000314B 42                                      inc     edx
  5007 0000314C 81FA00200000                            cmp     edx, 2000h
  5008 00003152 72BC                                    jb      short .exponent_lop
  5009 00003154 BE[18810400]                            mov     esi, mp3_expval_table
  5010 00003159 BF[18790400]                            mov     edi, mp3_exp_table
  5011 0000315E B900020000                              mov     ecx, 200h
  5012                                  
  5013                                  .exponent_dupe_lop:
  5014 00003163 8B4604                                  mov     eax, [esi+4]
  5015 00003166 AB                                      stosd
  5016 00003167 83C640                                  add     esi, 40h
  5017 0000316A E2F7                                    loop    .exponent_dupe_lop
  5018 0000316C C3                                      retn
  5019                                  
  5020                                  
  5021                                  ; =============== S U B R O U T I N E =======================================
  5022                                  
  5023                                  
  5024                                  cbrt96:
  5025 0000316D 83EC18                                  sub     esp, 18h        ; cube root, val^(1/3), from https://gist.github.com/anonymous/729557
  5026                                                                          ; in:  ebx:edx:eax = unsigned 96bit input (integer)
  5027                                                                          ; out: ebx         = unsigned 32bit result (with fractional bits)
  5028                                                                          ; out: cl          = number of fractional bits
  5029 00003170 890424                                  mov     [esp], eax
  5030 00003173 89542404                                mov     [esp+4], edx
  5031 00003177 895C2408                                mov     [esp+8], ebx
  5032 0000317B C744240C00000000                        mov     dword [esp+0Ch], 0
  5033 00003183 C744241000000000                        mov     dword [esp+10h], 0
  5034 0000318B C744241400000000                        mov     dword [esp+14h], 0
  5035 00003193 31DB                                    xor     ebx, ebx        ; result.value
  5036 00003195 B100                                    mov     cl, 0           ; result.fraction
  5037 00003197 09D0                                    or      eax, edx        ; skip if zero
  5038 00003199 742F                                    jz      short .pre_shift_done
  5039                                  
  5040                                  .pre_shift_lop:
  5041 0000319B F7442408000000E0                        test    dword [esp+8], 0E0000000h
  5042 000031A3 7525                                    jnz     short .pre_shift_done
  5043 000031A5 D12424                                  shl     dword [esp], 1
  5044 000031A8 D1542404                                rcl     dword [esp+4], 1
  5045 000031AC D1542408                                rcl     dword [esp+8], 1
  5046 000031B0 D12424                                  shl     dword [esp], 1
  5047 000031B3 D1542404                                rcl     dword [esp+4], 1
  5048 000031B7 D1542408                                rcl     dword [esp+8], 1
  5049 000031BB D12424                                  shl     dword [esp], 1
  5050 000031BE D1542404                                rcl     dword [esp+4], 1
  5051 000031C2 D1542408                                rcl     dword [esp+8], 1
  5052 000031C6 FEC1                                    inc     cl
  5053 000031C8 EBD1                                    jmp     short .pre_shift_lop
  5054                                  
  5055                                  .pre_shift_done:
  5056 000031CA B520                                    mov     ch, 20h         ; loopcount
  5057                                  
  5058                                  .lop:
  5059 000031CC 01DB                                    add     ebx, ebx        ; result*2
  5060 000031CE 89D8                                    mov     eax, ebx        ; y
  5061 000031D0 43                                      inc     ebx             ; result+1
  5062 000031D1 F7E3                                    mul     ebx             ; y*(y+1)
  5063 000031D3 89C6                                    mov     esi, eax
  5064 000031D5 89D7                                    mov     edi, edx
  5065 000031D7 31ED                                    xor     ebp, ebp
  5066 000031D9 F9                                      stc
  5067 000031DA 11F6                                    adc     esi, esi        ; y*(y+1)*2+1
  5068 000031DC 11FF                                    adc     edi, edi
  5069 000031DE 11ED                                    adc     ebp, ebp
  5070 000031E0 01C6                                    add     esi, eax
  5071 000031E2 11D7                                    adc     edi, edx        ; y*(y+1)*3+1
  5072 000031E4 83D500                                  adc     ebp, 0
  5073 000031E7 D12424                                  shl     dword [esp], 1
  5074 000031EA D1542404                                rcl     dword [esp+4], 1
  5075 000031EE D1542408                                rcl     dword [esp+8], 1 ; shl 3
  5076 000031F2 D154240C                                rcl     dword [esp+0Ch], 1
  5077 000031F6 D1542410                                rcl     dword [esp+10h], 1
  5078 000031FA D1542414                                rcl     dword [esp+14h], 1
  5079 000031FE D12424                                  shl     dword [esp], 1
  5080 00003201 D1542404                                rcl     dword [esp+4], 1
  5081 00003205 D1542408                                rcl     dword [esp+8], 1
  5082 00003209 D154240C                                rcl     dword [esp+0Ch], 1
  5083 0000320D D1542410                                rcl     dword [esp+10h], 1
  5084 00003211 D1542414                                rcl     dword [esp+14h], 1
  5085 00003215 D12424                                  shl     dword [esp], 1
  5086 00003218 D1542404                                rcl     dword [esp+4], 1
  5087 0000321C D1542408                                rcl     dword [esp+8], 1
  5088 00003220 D154240C                                rcl     dword [esp+0Ch], 1
  5089 00003224 D1542410                                rcl     dword [esp+10h], 1
  5090 00003228 D1542414                                rcl     dword [esp+14h], 1
  5091 0000322C 2974240C                                sub     [esp+0Ch], esi
  5092 00003230 197C2410                                sbb     [esp+10h], edi  ; sub/compare
  5093 00003234 196C2414                                sbb     [esp+14h], ebp
  5094 00003238 730D                                    jnb     short .next
  5095 0000323A 4B                                      dec     ebx
  5096 0000323B 0174240C                                add     [esp+0Ch], esi
  5097 0000323F 117C2410                                adc     [esp+10h], edi  ; undo
  5098 00003243 116C2414                                adc     [esp+14h], ebp
  5099                                  
  5100                                  .next:
  5101 00003247 FECD                                    dec     ch
  5102 00003249 7581                                    jnz     short .lop
  5103 0000324B 83C418                                  add     esp, 18h
  5104                                  mp3_init_log_constants:
  5105 0000324E C3                                      retn
  5106                                  
  5107                                  ;mp3_init_log_constants:
  5108                                  ;                retn
  5109                                  
  5110                                  ; =============== S U B R O U T I N E =======================================
  5111                                  
  5112                                  
  5113                                  mp3_build_huff_table_root:
  5114 0000324F A3[C84A0500]                            mov     [_@@nb_codes], eax ; "init_vlc"
  5115 00003254 C705[CC4A0500]0000-                     mov     dword [_@@prefix_numbits], 0
  5115 0000325C 0000               
  5116 0000325E C705[D04A0500]0000-                     mov     dword [_@@prefix_pattern], 0
  5116 00003266 0000               
  5117 00003268 60                                      pusha
  5118 00003269 89C1                                    mov     ecx, eax
  5119 0000326B 31C0                                    xor     eax, eax
  5120                                  
  5121                                  .prescan_lop:
  5122 0000326D 3A03                                    cmp     al, [ebx]
  5123 0000326F 7702                                    ja      short .prescan_next
  5124 00003271 8A03                                    mov     al, [ebx]
  5125                                  
  5126                                  .prescan_next:
  5127 00003273 43                                      inc     ebx
  5128 00003274 E2F7                                    loop    .prescan_lop
  5129 00003276 3C09                                    cmp     al, 9           ; CHILD_BITS
  5130 00003278 7202                                    jb      short .prescan_this_limit
  5131 0000327A B009                                    mov     al, 9
  5132                                  
  5133                                  .prescan_this_limit:
  5134 0000327C A3[C44A0500]                            mov     [_@@table_nb_bits], eax
  5135 00003281 61                                      popa
  5136                                  
  5137                                  mp3_build_huff_table_recursive_child:
  5138 00003282 8B0D[C44A0500]                          mov     ecx, [_@@table_nb_bits]
  5139 00003288 B801000000                              mov     eax, 1
  5140 0000328D D3E0                                    shl     eax, cl
  5141 0000328F A3[D44A0500]                            mov     [_@@curr_table_size], eax
  5142 00003294 48                                      dec     eax
  5143 00003295 A3[D84A0500]                            mov     [_@@curr_table_mask], eax
  5144 0000329A 60                                      pusha
  5145 0000329B 8B1D[30A20000]                          mov     ebx, [mp3_huff_num_entries]
  5146 000032A1 891D[DC4A0500]                          mov     [_@@curr_table_index], ebx
  5147 000032A7 031D[D44A0500]                          add     ebx, [_@@curr_table_size]
  5148 000032AD 891D[30A20000]                          mov     [mp3_huff_num_entries], ebx
  5149 000032B3 813D[30A20000]002E-                     cmp     dword [mp3_huff_num_entries], 11776 ; HUFF_TREE_SIZE/4
  5149 000032BB 0000               
  5150 000032BD 0F87E6D9FFFF                            ja      fatalunexpected
  5151 000032C3 61                                      popa
  5152 000032C4 BF[AC3D0100]                            mov     edi, huff_tree_buf
  5153 000032C9 A1[DC4A0500]                            mov     eax, [_@@curr_table_index]
  5154 000032CE 66890497                                mov     [edi+edx*4], ax
  5155 000032D2 A1[C44A0500]                            mov     eax, [_@@table_nb_bits]
  5156 000032D7 F7D8                                    neg     eax
  5157 000032D9 6689449702                              mov     [edi+edx*4+2], ax
  5158 000032DE BF[AC3D0100]                            mov     edi, huff_tree_buf
  5159 000032E3 8B15[DC4A0500]                          mov     edx, [_@@curr_table_index]
  5160 000032E9 8B0D[D44A0500]                          mov     ecx, [_@@curr_table_size]
  5161                                  
  5162                                  .clear_table_lop:
  5163 000032EF 66C70497FFFF                            mov     word [edi+edx*4], 0FFFFh
  5164 000032F5 66C74497020000                          mov     word [edi+edx*4+2], 0
  5165 000032FC 42                                      inc     edx
  5166 000032FD E2F0                                    loop    .clear_table_lop
  5167 000032FF 53                                      push    ebx
  5168 00003300 56                                      push    esi
  5169 00003301 31D2                                    xor     edx, edx
  5170                                  
  5171                                  .make_table_lop:
  5172 00003303 0FB60B                                  movzx   ecx, byte [ebx]
  5173 00003306 0FB706                                  movzx   eax, word [esi]
  5174 00003309 2B0D[CC4A0500]                          sub     ecx, [_@@prefix_numbits]
  5175 0000330F 7E74                                    jle     short .make_table_lop_next
  5176 00003311 D3E8                                    shr     eax, cl
  5177 00003313 3B05[D04A0500]                          cmp     eax, [_@@prefix_pattern]
  5178 00003319 756A                                    jnz     short .make_table_lop_next
  5179 0000331B BF[AC3D0100]                            mov     edi, huff_tree_buf
  5180 00003320 0FB706                                  movzx   eax, word [esi]
  5181 00003323 2B0D[C44A0500]                          sub     ecx, [_@@table_nb_bits]
  5182 00003329 773E                                    ja      short .create_child_table
  5183 0000332B F7D9                                    neg     ecx
  5184 0000332D D3E0                                    shl     eax, cl
  5185 0000332F 2305[D84A0500]                          and     eax, [_@@curr_table_mask]
  5186 00003335 0305[DC4A0500]                          add     eax, [_@@curr_table_index]
  5187 0000333B 8D3C87                                  lea     edi, [edi+eax*4]
  5188 0000333E B801000000                              mov     eax, 1
  5189 00003343 D3E0                                    shl     eax, cl
  5190 00003345 89C1                                    mov     ecx, eax
  5191 00003347 0FB603                                  movzx   eax, byte [ebx]
  5192 0000334A 2B05[CC4A0500]                          sub     eax, [_@@prefix_numbits]
  5193                                  
  5194                                  .make_rept_lop:
  5195 00003350 66837F0200                              cmp     word [edi+2], 0
  5196 00003355 0F854ED9FFFF                            jnz     fatalunexpected
  5197 0000335B 668917                                  mov     [edi], dx
  5198 0000335E 66894702                                mov     [edi+2], ax
  5199 00003362 83C704                                  add     edi, 4
  5200 00003365 E2E9                                    loop    .make_rept_lop
  5201 00003367 EB1C                                    jmp     short .make_table_lop_next
  5202                                  
  5203                                  .create_child_table:
  5204 00003369 D3E8                                    shr     eax, cl
  5205 0000336B 2305[D84A0500]                          and     eax, [_@@curr_table_mask]
  5206 00003371 0305[DC4A0500]                          add     eax, [_@@curr_table_index]
  5207 00003377 F7D9                                    neg     ecx
  5208 00003379 66394C8702                              cmp     [edi+eax*4+2], cx
  5209 0000337E 7C05                                    jl      short .make_table_lop_next
  5210 00003380 66894C8702                              mov     [edi+eax*4+2], cx
  5211                                  
  5212                                  .make_table_lop_next:
  5213 00003385 83C602                                  add     esi, 2
  5214 00003388 43                                      inc     ebx
  5215 00003389 42                                      inc     edx
  5216 0000338A 3B15[C84A0500]                          cmp     edx, [_@@nb_codes]
  5217 00003390 0F826DFFFFFF                            jb      .make_table_lop
  5218 00003396 5E                                      pop     esi
  5219 00003397 5B                                      pop     ebx
  5220 00003398 8B0D[D44A0500]                          mov     ecx, [_@@curr_table_size]
  5221 0000339E 8B15[DC4A0500]                          mov     edx, [_@@curr_table_index]
  5222                                  
  5223                                  .make_child_tables_lop:
  5224 000033A4 BF[AC3D0100]                            mov     edi, huff_tree_buf
  5225 000033A9 0FBF449702                              movsx   eax, word [edi+edx*4+2]
  5226 000033AE 83F800                                  cmp     eax, 0
  5227 000033B1 796D                                    jns     short .make_child_tables_lop_next
  5228 000033B3 F7D8                                    neg     eax
  5229 000033B5 3B05[C44A0500]                          cmp     eax, [_@@table_nb_bits]
  5230 000033BB 7605                                    jbe     short .make_child_tables_this
  5231 000033BD A1[C44A0500]                            mov     eax, [_@@table_nb_bits]
  5232                                  
  5233                                  .make_child_tables_this:
  5234 000033C2 51                                      push	ecx
  5235 000033C3 52                                      push	edx
  5236 000033C4 FF35[DC4A0500]                          push	dword [_@@curr_table_index]
  5237 000033CA FF35[C44A0500]                          push	dword [_@@table_nb_bits]
  5238 000033D0 FF35[CC4A0500]                          push	dword [_@@prefix_numbits]
  5239 000033D6 FF35[D04A0500]                          push	dword [_@@prefix_pattern]
  5240 000033DC 8B0D[C44A0500]                          mov	ecx, [_@@table_nb_bits]
  5241 000033E2 A3[C44A0500]                            mov	[_@@table_nb_bits], eax
  5242 000033E7 010D[CC4A0500]                          add	[_@@prefix_numbits], ecx
  5243 000033ED D325[D04A0500]                          shl	dword [_@@prefix_pattern], cl
  5244 000033F3 89D0                                    mov	eax, edx
  5245 000033F5 2B05[DC4A0500]                          sub	eax, [_@@curr_table_index]
  5246 000033FB 0905[D04A0500]                          or	[_@@prefix_pattern], eax
  5247 00003401 E87CFEFFFF                              call	mp3_build_huff_table_recursive_child
  5248 00003406 8F05[D04A0500]                          pop	dword [_@@prefix_pattern]
  5249 0000340C 8F05[CC4A0500]                          pop	dword [_@@prefix_numbits]
  5250 00003412 8F05[C44A0500]                          pop	dword [_@@table_nb_bits]
  5251 00003418 8F05[DC4A0500]                          pop	dword [_@@curr_table_index]
  5252 0000341E 5A                                      pop	edx
  5253 0000341F 59                                      pop	ecx
  5254                                  
  5255                                  .make_child_tables_lop_next:
  5256 00003420 42                                      inc	edx
  5257 00003421 E281                                    loop	.make_child_tables_lop
  5258 00003423 C3                                      retn
  5259                                  
  5260                                  
  5261                                  ; =============== S U B R O U T I N E =======================================
  5262                                  
  5263                                  
  5264                                  mp3_exclude_id3_and_tag:
  5265 00003424 8B35[EC4A0500]                          mov     esi, [stream_pos]
  5266 0000342A 8B0D[F04A0500]                          mov     ecx, [bytes_left]
  5267 00003430 83F90A                                  cmp     ecx, 10
  5268 00003433 7240                                    jb      short .no_id3
  5269 00003435 8B06                                    mov     eax, [esi]
  5270 00003437 25FFFFFF00                              and     eax, 0FFFFFFh
  5271                                                  ;cmp    eax, '3DI'     ; "ID3"
  5272                                                  ; 20/10/2024 
  5273 0000343C 3D49443300                              cmp     eax, 'ID3'     ; FASM & NASM syntax
  5274 00003441 7532                                    jnz     short .no_id3
  5275 00003443 8B4606                                  mov     eax, [esi+6]
  5276 00003446 A980808080                              test    eax, 80808080h
  5277 0000344B 7528                                    jnz     short .no_id3
  5278                                  
  5279                                  .xlat_4x7bit_to_28bit:
  5280 0000344D 86E0                                    xchg    al, ah
  5281 0000344F D0E0                                    shl     al, 1
  5282 00003451 66D1E0                                  shl     ax, 1
  5283 00003454 66C1E802                                shr     ax, 2
  5284 00003458 C1C810                                  ror     eax, 16
  5285 0000345B 86E0                                    xchg    al, ah
  5286 0000345D D0E0                                    shl     al, 1
  5287 0000345F 66D1E0                                  shl     ax, 1
  5288 00003462 C1E802                                  shr     eax, 2
  5289 00003465 83C00A                                  add     eax, 10
  5290 00003468 39C1                                    cmp     ecx, eax
  5291 0000346A 7209                                    jb      short .no_id3
  5292 0000346C 01C6                                    add     esi, eax
  5293 0000346E 29C1                                    sub     ecx, eax
  5294 00003470 A3[70120100]                            mov     [mp3_id3_size], eax
  5295                                  
  5296                                  .no_id3:
  5297 00003475 BA80000000                              mov     edx, 80h
  5298 0000347A 39D1                                    cmp     ecx, edx
  5299 0000347C 721F                                    jb      short .no_tag_or_ext
  5300 0000347E 8B440E80                                mov     eax, [esi+ecx-80h]
  5301 00003482 25FFFFFF00                              and     eax, 0FFFFFFh
  5302                                                  ;cmp    eax, 'GAT'     ; "TAG"
  5303                                                  ; 20/10/2024
  5304 00003487 3D54414700                              cmp     eax, 'TAG'     ; FASM & NASM syntax
  5305 0000348C 0F8421010000                            jz      .got_tag_size_edx
  5306                                                  ;cmp    eax, 'TXE'
  5307 00003492 3D45585400                              cmp     eax, 'EXT'
  5308 00003497 0F8416010000                            jz      .got_tag_size_edx
  5309                                  
  5310                                  .no_tag_or_ext:
  5311 0000349D BAE3000000                              mov     edx, 0E3h
  5312 000034A2 39D1                                    cmp     ecx, edx
  5313 000034A4 7211                                    jb      short .no_tagplus
  5314                                                  ;cmp    dword [esi+ecx-0E3h], '+GAT' ; "TAG+"
  5315                                                  ; 20/10/2024
  5316 000034A6 81BC0E1DFFFFFF5441-                     cmp     dword [esi+ecx-0E3h], 'TAG+'
  5316 000034AF 472B               
  5317 000034B1 0F84FC000000                            jz      .got_tag_size_edx
  5318                                  
  5319                                  .no_tagplus:
  5320 000034B7 BA14000000                              mov     edx, 20        ; 10+10
  5321 000034BC 39D1                                    cmp     ecx, edx
  5322 000034BE 723C                                    jb      short .no_3di  ; "3DI",04h
  5323 000034C0 817C0EF633444904                        cmp     dword [esi+ecx-10], 4494433h ; 'ID3'+04000000h
  5324 000034C8 7532                                    jnz     short .no_3di
  5325 000034CA F6440EFB10                              test    byte [esi+ecx-5], 10h ; bit 4
  5326 000034CF 742B                                    jz      short .no_3di
  5327 000034D1 8B440EFC                                mov     eax, [esi+ecx-4]
  5328 000034D5 A980808080                              test    eax, 80808080h
  5329 000034DA 7520                                    jnz     short .no_3di
  5330                                  
  5331                                  .@xlat_4x7bit_to_28bit:
  5332 000034DC 86E0                                    xchg    al, ah
  5333 000034DE D0E0                                    shl     al, 1
  5334 000034E0 66D1E0                                  shl     ax, 1
  5335 000034E3 66C1E802                                shr     ax, 2
  5336 000034E7 C1C810                                  ror     eax, 10h
  5337 000034EA 86E0                                    xchg    al, ah
  5338 000034EC D0E0                                    shl     al, 1
  5339 000034EE 66D1E0                                  shl     ax, 1
  5340 000034F1 C1E802                                  shr     eax, 2
  5341 000034F4 8D5014                                  lea     edx, [eax+20]  ; [eax+10+10] ; hdr+footer siz
  5342 000034F7 E9B7000000                              jmp     .got_tag_size_edx
  5343                                  
  5344                                  .no_3di:
  5345                                                  ;cmp    dword [esi+ecx-32], 'TEPA' ; [esi+ecx-32+0]
  5346                                                  ; 20/10/2024
  5347 000034FC 817C0EE041504554                        cmp     dword [esi+ecx-32], 'APET'
  5348                                                                         ; check "APETAGEX"
  5349 00003504 7520                                    jnz     short .no_ape
  5350                                                  ;cmp    dword [esi+ecx-28], 'XEGA' ; [esi+ecx-32+4]
  5351 00003506 817C0EE441474558                        cmp     dword [esi+ecx-28], 'AGEX'
  5352 0000350E 7516                                    jnz     short .no_ape
  5353 00003510 8B540EEC                                mov     edx, [esi+ecx-20] ; [esi+ecx-32+12] ; get size
  5354 00003514 F7440EF400000080                        test    dword [esi+ecx-12], 80000000h ; [esi+ecx-32+20],1 shl 31
  5355 0000351C 7403                                    jz      short .no_ape_header
  5356 0000351E 83C220                                  add     edx, 32        ; hdr.size
  5357                                  
  5358                                  .no_ape_header: 
  5359 00003521 E98D000000                              jmp     .got_tag_size_edx
  5360                                  
  5361                                  .no_ape:
  5362 00003526 BA14000000                              mov     edx, 20        ; 11+9
  5363 0000352B 39D1                                    cmp     ecx, edx       ; "LYRICSEND" or "LYRICS200"
  5364                                                                         ; (11+N+9 bytes each)
  5365 0000352D 7258                                    jb      short .no_lyrics
  5366                                                  ;cmp    dword [esi+ecx-9], 'IRYL'
  5367                                                  ; 20/10/2024
  5368 0000352F 817C0EF74C595249                        cmp     dword [esi+ecx-9], 'LYRI' ; FASM & NASM syntax
  5369 00003537 754E                                    jnz     short .no_lyrics
  5370 00003539 807C0EFB43                              cmp     byte [esi+ecx-5], 'C'
  5371 0000353E 7547                                    jnz     short .no_lyrics
  5372                                                  ;cmp    dword [esi+ecx-4], 'DNES'
  5373 00003540 817C0EFC53454E44                        cmp     dword [esi+ecx-4], 'SEND'
  5374 00003548 740C                                    jz      short .lyrics3_v1
  5375                                                  ;cmp    dword [esi+ecx-4], '002S'
  5376 0000354A 817C0EFC53323030                        cmp     dword [esi+ecx-4], 'S200'
  5377 00003552 7440                                    jz      short .lyrics3_v2
  5378 00003554 7531                                    jnz     short .no_lyrics
  5379                                  
  5380                                  .lyrics3_v1:
  5381 00003556 BA14000000                              mov     edx, 20        ; 11+9
  5382                                  
  5383                                  .lyrics3_v1_size_lop:
  5384 0000355B 8D040E                                  lea     eax, [esi+ecx]
  5385 0000355E 29D0                                    sub     eax, edx
  5386                                                  ;cmp    dword [eax], 'IRYL' ; "LYRICSBEGIN"
  5387                                                  ; 20/10/2024
  5388 00003560 81384C595249                            cmp     dword [eax], 'LYRI'
  5389 00003566 7512                                    jnz     short .lyrics3_v1_size_next
  5390                                                  ;cmp    dword [eax+4], 'EBSC'
  5391 00003568 81780443534245                          cmp     dword [eax+4], 'CSBE'
  5392 0000356F 7509                                    jnz     short .lyrics3_v1_size_next
  5393                                                  ;cmp    dword [eax+7], 'NIGE'
  5394 00003571 8178074547494E                          cmp     dword [eax+7], 'EGIN'
  5395 00003578 7439                                    jz      short .got_tag_size_edx
  5396                                  
  5397                                  .lyrics3_v1_size_next:
  5398 0000357A 42                                      inc     edx
  5399 0000357B 81FA00140000                            cmp     edx, 5120
  5400 00003581 7704                                    ja      short .no_lyrics
  5401 00003583 39CA                                    cmp     edx, ecx
  5402 00003585 76D4                                    jbe     short .lyrics3_v1_size_lop
  5403                                                  ;jmp     short .no_lyrics
  5404                                  
  5405                                  .no_lyrics:
  5406                                                  ;jmp    short .footer_tag_all_done
  5407                                  		; 22/10/2024
  5408                                  .footer_tag_all_done:
  5409 00003587 8935[EC4A0500]                          mov     [stream_pos], esi
  5410 0000358D 890D[F04A0500]                          mov     [bytes_left], ecx
  5411 00003593 C3                                      retn
  5412                                  
  5413                                  .lyrics3_v2:
  5414 00003594 51                                      push    ecx
  5415 00003595 56                                      push    esi
  5416 00003596 8D740EF1                                lea     esi, [esi+ecx-15] ; [esi+ecx-6-9]
  5417 0000359A B906000000                              mov     ecx, 6
  5418 0000359F 31D2                                    xor     edx, edx
  5419                                  
  5420                                  .lyrics3_v2_size_lop:
  5421 000035A1 6BD20A                                  imul    edx, 10
  5422 000035A4 0FB606                                  movzx   eax, byte [esi]
  5423 000035A7 46                                      inc     esi
  5424 000035A8 2C30                                    sub     al, 30h
  5425 000035AA 01C2                                    add     edx, eax
  5426 000035AC E2F3                                    loop    .lyrics3_v2_size_lop
  5427 000035AE 5E                                      pop     esi
  5428 000035AF 59                                      pop     ecx
  5429 000035B0 83C20F                                  add     edx, 0Fh       ; 6+9
  5430                                                  ;jmp    short .got_tag_size_edx
  5431                                  
  5432                                  .got_tag_size_edx:
  5433                                  		;;;
  5434                                  		; 22/10/2024
  5435 000035B3 29D1                                    sub    ecx, edx
  5436 000035B5 731B                                    jnb    short .cont
  5437                                  		;;;
  5438                                  		; 16/02/2025
  5439                                  		sys	_msg, tag_size_err, 255, 0Ch
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 000035B7 BB[DD350000]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 000035BC B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 000035C1 BA0C000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 000035C6 B823000000          <1>  mov eax, %1
   112                              <1> 
   113 000035CB CD40                <1>  int 40h
  5440                                                  ;;;
  5441                                  		;sub    ecx, edx
  5442                                                  ;jb     fatalunexpected
  5443 000035CD E9D7D6FFFF              		jmp	fatalunexpected
  5444                                  .cont:
  5445                                  		;;;
  5446 000035D2 0115[74120100]                          add     [mp3_tag_size], edx
  5447 000035D8 E998FEFFFF                              jmp     .no_id3
  5448                                  
  5449                                  ; ---------------------------------------------------------------------------
  5450                                  
  5451                                  		; 16/02/2025
  5452 000035DD 0D0A                    tag_size_err:	db 0Dh, 0Ah
  5453 000035DF 5461672053697A6520-     		db "Tag Size Error!?"
  5453 000035E8 4572726F72213F     
  5454 000035EF 0D0A00                  		db 0Dh, 0Ah, 0
  5455                                  
  5456                                  ; =============== S U B R O U T I N E =======================================
  5457                                  
  5458                                  
  5459                                  mp3_detect_free_format_block_size:
  5460 000035F2 833D[EC110100]00                        cmp     dword [mp3_free_format_frame_size], 0
  5461 000035F9 0F85A5000000                            jnz     .already_detected
  5462 000035FF 31D2                                    xor     edx, edx
  5463                                  
  5464                                  .find_distance_lop:
  5465 00003601 3B15[98120100]                          cmp     edx, [mp3_src_remain]
  5466 00003607 742B                                    jz      short .match_eof
  5467 00003609 8D4204                                  lea     eax, [edx+4]
  5468 0000360C 3B05[98120100]                          cmp     eax, [mp3_src_remain]
  5469 00003612 771E                                    ja      short .find_distance_failed
  5470 00003614 8B0416                                  mov     eax, [esi+edx]
  5471 00003617 E884CCFFFF                              call    bswap_eax
  5472 0000361C 3305[ACBB0000]                          xor     eax, [mp3_hdr_32bit_header]
  5473 00003622 25000CFEFF                              and     eax, 0FFFE0C00h
  5474 00003627 740B                                    jz      short .match_eof
  5475                                  
  5476                                  .find_distance_next:
  5477 00003629 42                                      inc     edx
  5478 0000362A 81FA00100000                            cmp     edx, 1000h
  5479 00003630 76CF                                    jbe     short .find_distance_lop
  5480                                  
  5481                                  .find_distance_failed:
  5482 00003632 F9                                      stc
  5483 00003633 C3                                      retn
  5484                                  
  5485                                  .match_eof:
  5486 00003634 89D0                                    mov     eax, edx
  5487 00003636 2B05[B8BB0000]                          sub     eax, [mp3_hdr_flag_padding]
  5488 0000363C 83F804                                  cmp     eax, 4
  5489 0000363F 72E8                                    jb      short .find_distance_next
  5490 00003641 A3[EC110100]                            mov     [mp3_free_format_frame_size], eax
  5491 00003646 31DB                                    xor     ebx, ebx
  5492                                  
  5493                                  .confirm_distance_lop:
  5494 00003648 8B041E                                  mov     eax, [esi+ebx]
  5495 0000364B E850CCFFFF                              call    bswap_eax
  5496 00003650 C1E80A                                  shr     eax, 10         ; 9+1
  5497 00003653 131D[EC110100]                          adc     ebx, [mp3_free_format_frame_size]
  5498 00003659 3B1D[98120100]                          cmp     ebx, [mp3_src_remain]
  5499 0000365F 7422                                    jz      short .confirm_distance_match_eof
  5500 00003661 8D4304                                  lea     eax, [ebx+4]
  5501 00003664 3B05[98120100]                          cmp     eax, [mp3_src_remain]
  5502 0000366A 77BD                                    ja      short .find_distance_next
  5503 0000366C 8B041E                                  mov     eax, [esi+ebx]
  5504 0000366F E82CCCFFFF                              call    bswap_eax
  5505 00003674 3305[ACBB0000]                          xor     eax, [mp3_hdr_32bit_header]
  5506 0000367A 25000CFEFF                              and     eax, 0FFFE0C00h
  5507 0000367F 75A8                                    jnz     short .find_distance_next
  5508 00003681 EBC5                                    jmp     short .confirm_distance_lop
  5509                                  
  5510                                  .confirm_distance_match_eof:
  5511 00003683 A1[EC110100]                            mov     eax, [mp3_free_format_frame_size]
  5512 00003688 C1E003                                  shl     eax, 3
  5513 0000368B F725[BCBB0000]                          mul     dword [mp3_sample_rate]
  5514 00003691 8B0D[A8120100]                          mov     ecx, [mp3_nb_granules]
  5515 00003697 69C940020000                            imul    ecx, 240h
  5516 0000369D F7F1                                    div     ecx
  5517 0000369F A3[C4BB0000]                            mov     [mp3_bit_rate], eax
  5518                                  
  5519                                  .already_detected:
  5520 000036A4 F8                                      clc
  5521 000036A5 C3                                      retn
  5522                                  
  5523                                  
  5524                                  ; =============== S U B R O U T I N E =======================================
  5525                                  
  5526                                  
  5527                                  mp3_check_xing_info:
  5528 000036A6 C705[F4110100]0000-                     mov     dword [mp3_xing_id], 0
  5528 000036AE 0000               
  5529 000036B0 C705[FC110100]0000-                     mov     dword [mp3_xing_frames], 0
  5529 000036B8 0000               
  5530 000036BA C705[00120100]0000-                     mov     dword [mp3_xing_filesize], 0
  5530 000036C2 0000               
  5531 000036C4 8B35[A0BB0000]                          mov     esi, [mp3_src_data_location]
  5532 000036CA AD                                      lodsd
  5533                                                  ;cmp    eax, 'gniX'
  5534                                  		; 20/10/2024
  5535 000036CB 3D58696E67              		cmp	eax, 'Xing'     ; FASM & NASM syntax
  5536 000036D0 7401                                    jz      short .xing
  5537 000036D2 C3                                      retn
  5538                                  
  5539                                  .xing:
  5540 000036D3 A3[F4110100]                            mov     [mp3_xing_id], eax
  5541 000036D8 AD                                      lodsd
  5542 000036D9 E8C2CBFFFF                              call    bswap_eax
  5543 000036DE A3[F8110100]                            mov     [mp3_xing_flags], eax
  5544 000036E3 89C2                                    mov     edx, eax
  5545 000036E5 F7C201000000                            test    edx, 1
  5546 000036EB 740B                                    jz      short .no_xing_frames
  5547 000036ED AD                                      lodsd
  5548 000036EE E8ADCBFFFF                              call    bswap_eax
  5549 000036F3 A3[FC110100]                            mov     [mp3_xing_frames], eax
  5550                                  
  5551                                  .no_xing_frames:
  5552 000036F8 F7C202000000                            test    edx, 2          ; 1 shl 1
  5553 000036FE 740B                                    jz      short .no_xing_filesize
  5554 00003700 AD                                      lodsd
  5555 00003701 E89ACBFFFF                              call    bswap_eax
  5556 00003706 A3[00120100]                            mov     [mp3_xing_filesize], eax
  5557                                  
  5558                                  .no_xing_filesize:
  5559 0000370B F7C204000000                            test    edx, 4          ; 1 shl 2
  5560 00003711 740C                                    jz      short .no_xing_toc
  5561 00003713 B964000000                              mov     ecx, 100
  5562 00003718 BF[04120100]                            mov     edi, mp3_xing_toc
  5563 0000371D F3A4                                    rep movsb
  5564                                  
  5565                                  .no_xing_toc:
  5566 0000371F F7C208000000                            test    edx, 8          ; 1 shl 3
  5567 00003725 740B                                    jz      short .no_xing_vbr_scale
  5568 00003727 AD                                      lodsd
  5569 00003728 E873CBFFFF                              call    bswap_eax
  5570 0000372D A3[68120100]                            mov     [mp3_xing_vbr_scale], eax
  5571                                  
  5572                                  .no_xing_vbr_scale:
  5573 00003732 C705[C4BB0000]0000-                     mov	dword [mp3_bit_rate], 0
  5573 0000373A 0000               
  5574 0000373C A1[BCBB0000]                            mov	eax, [mp3_sample_rate]
  5575 00003741 C1E003                                  shl	eax, 3
  5576 00003744 F725[00120100]                          mul	dword [mp3_xing_filesize]
  5577 0000374A 8B0D[FC110100]                          mov	ecx, [mp3_xing_frames]
  5578 00003750 0FAF0D[A8120100]                        imul	ecx, [mp3_nb_granules]
  5579 00003757 69C940020000                            imul	ecx, 576        ; 18*32
  5580 0000375D 39CA                                    cmp	edx, ecx
  5581 0000375F 7307                                    jnb	short .overflow
  5582 00003761 F7F1                                    div	ecx
  5583 00003763 A3[C4BB0000]                            mov	[mp3_bit_rate], eax
  5584                                  .overflow:
  5585 00003768 C3                                      retn
  5586                                  
  5587                                  
  5588                                  ; =============== S U B R O U T I N E =======================================
  5589                                  
  5590                                  		; 16/02/2025
  5591                                  		; 20/10/2024
  5592                                  mp3_decode_frame:
  5593 00003769 890D[98120100]                          mov     [mp3_src_remain], ecx
  5594 0000376F 893D[7C120100]                          mov     [mp3_samples_dst], edi
  5595                                  	
  5596                                  		; 16/02/2025
  5597                                  .no_rdtsc_supported@@@@:
  5598 00003775 E88ACBFFFF                              call    mp3_search_get_header
  5599 0000377A 0F8275010000                            jc      .error
  5600 00003780 A1[A4BB0000]                            mov     eax, [mp3_src_frame_size]
  5601 00003785 83F800                                  cmp     eax, 0
  5602 00003788 0F8E67010000                            jle     .error
  5603 0000378E 3B05[98120100]                          cmp     eax, [mp3_src_remain]
  5604 00003794 0F875B010000                            ja      .error
  5605 0000379A 8935[94120100]                          mov     [mp3_bitstream_start], esi
  5606                                  		; 11/01/2025
  5607                                  		;mov	eax, 32
  5608                                  
  5609                                  .mp3mac_bitstream_set_position:
  5610                                  		; 22/10/2024
  5611                                                  ;mov    esi, [mp3_bitstream_start]
  5612                                                  ;mov    cl, al
  5613                                                  ;shr    eax, 3
  5614                                                  ;and    cl, 7
  5615                                                  ;mov	eax, 4
  5616                                                  ;add    esi, eax
  5617 000037A0 83C604                                  add     esi, 4
  5618 000037A3 E800CBFFFF                              call    mp3_recollect_bits
  5619                                  
  5620                                  .mp3mac_get_n_bits:
  5621                                                  ;mov    eax, ebp        ; mp3_col32
  5622                                                  ;shl    ebp, cl
  5623                                                  ;rol    eax, cl
  5624                                                  ;xor    eax, ebp        ; mp3_col32
  5625                                                  ;sub    ch, cl          ; sub mp3_colNN,num
  5626                                                  ;jns    short .cont
  5627                                                  ;mov    cl, ch          ; mov cl,mp3_colNN
  5628                                                  ;add    ch, 16
  5629                                                  ;rol    ebp, cl         ; rol mp3_col32,cl
  5630                                                  ;mov    bp, [esi]       ; mov mp3_col16,word ptr [esi]
  5631                                                  ;add    esi, 2
  5632                                                  ;ror    bp, 8           ; endianess
  5633                                                  ;ror    ebp, cl         ; ror mp3_col32,cl
  5634                                  
  5635                                  .cont:
  5636 000037A8 E8F0CCFFFF                              call	mp3_bitstream_read_header_extra
  5637 000037AD E838CEFFFF                              call	mp3_bitstream_read_granules
  5638 000037B2 0F823D010000                            jc	.error
  5639 000037B8 E83BCBFFFF                              call	mp3_uncollect_bits
  5640 000037BD 8935[A0BB0000]                          mov	[mp3_src_data_location], esi
  5641 000037C3 833D[7C120100]00                        cmp	dword [mp3_samples_dst], 0
  5642 000037CA 0F840E010000                            jz	.skip_decoding
  5643 000037D0 E8A5D2FFFF                              call	mp3_bitstream_append_to_main_data_pool
  5644 000037D5 833D[80120100]00                        cmp	dword [mp3_samples_output_size], 0
  5645 000037DC 0F84FC000000                            jz	.skip_decoding
  5646                                  
  5647 000037E2 C705[8C120100]0000-                     mov	dword [mp3_curr_granule], 0
  5647 000037EA 0000               
  5648 000037EC BB[AC120100]                            mov	ebx, mp3_granules
  5649                                  
  5650                                  .body_granule_lop:
  5651 000037F1 891D[E04A0500]                          mov	[_@@granule_addr], ebx
  5652 000037F7 C705[88120100]0000-                     mov	dword [mp3_curr_channel], 0
  5652 000037FF 0000               
  5653                                  
  5654                                  .body_channel_lop:
  5655 00003801 8B4304                                  mov     eax, [ebx+4]    ; [ebx+$mp3gr_part2_3_start]
  5656 00003804 8B35[94120100]                          mov     esi, [mp3_bitstream_start]
  5657 0000380A 88C1                                    mov     cl, al          ; mp3mac_bitstream_set_position
  5658 0000380C C1E803                                  shr     eax, 3
  5659 0000380F 80E107                                  and     cl, 7
  5660 00003812 01C6                                    add     esi, eax
  5661 00003814 E88FCAFFFF                              call    mp3_recollect_bits
  5662 00003819 89E8                                    mov     eax, ebp        ; mp3mac_get_n_bits cl
  5663 0000381B D3E5                                    shl     ebp, cl
  5664 0000381D D3C0                                    rol     eax, cl
  5665 0000381F 31E8                                    xor     eax, ebp
  5666 00003821 28CD                                    sub     ch, cl
  5667 00003823 7913                                    jns     short .cont@
  5668 00003825 88E9                                    mov     cl, ch          ; mp3mac_collect_more
  5669 00003827 80C510                                  add     ch, 16
  5670 0000382A D3C5                                    rol     ebp, cl
  5671 0000382C 668B2E                                  mov     bp, [esi]
  5672 0000382F 83C602                                  add     esi, 2
  5673 00003832 66C1CD08                                ror     bp, 8
  5674 00003836 D3CD                                    ror     ebp, cl
  5675                                  
  5676                                  .cont@:
  5677 00003838 E8A5D2FFFF                              call    mp3_bitstream_read_scalefacs
  5678 0000383D E86FD4FFFF                              call    mp3_get_exponents_from_scale_factors
  5679 00003842 E885D5FFFF                              call    mp3_huffman_decode ; reads up to $mp3gr_part2_3_end
  5680 00003847 0F82A8000000                            jc      .error
  5681                                  
  5682                                  .body_channel_next:
  5683 0000384D 81C340130000                            add	ebx, 4928       ; $mp3gr_entrysiz*2
  5684 00003853 FF05[88120100]                          inc	dword [mp3_curr_channel]
  5685 00003859 A1[88120100]                            mov	eax, [mp3_curr_channel]
  5686                                                  ; 16/02/2025
  5687 0000385E 3B05[C8BB0000]          		cmp	eax, [mp3_num_channels]
  5688 00003864 729B                                    jb	short .body_channel_lop
  5689 00003866 8B1D[E04A0500]                          mov	ebx, [_@@granule_addr]
  5690                                  
  5691                                  .mp3mac_push_bitstream:
  5692 0000386C 51                                      push	ecx
  5693 0000386D 55                                      push	ebp
  5694 0000386E 56                                      push	esi
  5695 0000386F E827DAFFFF                              call	mp3_compute_stereo
  5696 00003874 C705[88120100]0000-                     mov	dword [mp3_curr_channel], 0
  5696 0000387C 0000               
  5697                                  
  5698                                  .cast_channel_lop:
  5699 0000387E E894DCFFFF                              call    mp3_reorder_block
  5700 00003883 E8FBDCFFFF                              call    mp3_compute_antialias
  5701 00003888 E8B8E5FFFF                              call    mp3_compute_imdct
  5702 0000388D 81C340130000                            add     ebx, 4928       ; $mp3gr_entrysiz*2
  5703 00003893 FF05[88120100]                          inc	dword [mp3_curr_channel]
  5704 00003899 A1[88120100]                            mov     eax, [mp3_curr_channel]
  5705                                                  ; 06/02/2025
  5706 0000389E 3B05[C8BB0000]          		cmp     eax, [mp3_num_channels]
  5707 000038A4 72D8                                    jc      short .cast_channel_lop
  5708                                  
  5709                                  .mp3mac_pop_bitstream:
  5710 000038A6 5E                                      pop	esi
  5711 000038A7 5D                                      pop	ebp
  5712 000038A8 59                                      pop	ecx
  5713 000038A9 8B1D[E04A0500]                          mov	ebx, [_@@granule_addr]
  5714 000038AF 81C3A0090000                            add	ebx, 2464       ; $mp3gr_entrysiz
  5715 000038B5 FF05[8C120100]                          inc	dword [mp3_curr_granule]
  5716 000038BB A1[8C120100]                            mov	eax, [mp3_curr_granule]
  5717 000038C0 3B05[A8120100]                          cmp	eax, [mp3_nb_granules]
  5718 000038C6 0F8225FFFFFF                            jc	.body_granule_lop
  5719 000038CC E827CAFFFF                              call	mp3_uncollect_bits
  5720 000038D1 3B35[9CBB0000]                          cmp	esi, [main_data_pool_wr_ptr]
  5721 000038D7 771C                                    ja	short .error
  5722                                                  ;call	dword [mp3_synth_filter_proc] ; synth maths
  5723                                  		; 16/02/2025
  5724 000038D9 E868F3FFFF              		call	mp3_synth_filter_proc
  5725                                  
  5726                                  .skip_decoding:
  5727 000038DE A1[9C120100]                            mov     eax, [mp3_extra_bytes]
  5728 000038E3 0105[A4BB0000]                          add     [mp3_src_frame_size], eax
  5729 000038E9 A1[80120100]                            mov     eax, [mp3_samples_output_size]
  5730                                  		; 15/02/2025
  5731 000038EE FF05[78120100]                          inc     dword [mp3_num_frames_decoded]
  5732                                  .timelog_end:
  5733                                  		; 16/02/2025
  5734                                  .no_rdtsc_supported:
  5735                                                  ;clc
  5736 000038F4 C3                                      retn
  5737                                  
  5738                                  .error:
  5739                                  		; 16/02/2025
  5740                                  		; 20/10/2024
  5741                                  .no_rdtsc_supported@:
  5742 000038F5 A1[9C120100]                            mov     eax, [mp3_extra_bytes]
  5743 000038FA 0105[A4BB0000]                          add     [mp3_src_frame_size], eax
  5744 00003900 F9                                      stc
  5745 00003901 C3                                      retn
  5746                                  
  5747                                  
  5748                                  ; =============== S U B R O U T I N E =======================================
  5749                                  
  5750                                  		; 16/02/2025
  5751                                  		; 15/02/2025
  5752                                  mp3_init:
  5753 00003902 BF[9CAB0000]                            mov     edi, main_data_pool_start ; = mp3_context_start
  5754                                                  ;mov    ecx, 74916      ; (mp3_context_end-mp3_context_start)/4
  5755 00003907 B97F240100                              mov     ecx, (mp3_context_end-mp3_context_start)/4
  5756 0000390C 31C0                                    xor     eax, eax        ; ERRIF @@len AND 03h
  5757 0000390E F3AB                                    rep stosd               ; clear context
  5758 00003910 C705[9CBB0000]-                         mov	dword [main_data_pool_wr_ptr], main_data_pool_start
  5758 00003916 [9CAB0000]         
  5759 0000391A 833D[2CA20000]00                        cmp     dword [mp3_initialized], 0
  5760 00003921 7537                                    jnz     short .already_initialized
  5761 00003923 E803F7FFFF                              call    mp3_integer_init_is_stereo_lsf
  5762 00003928 E85CF7FFFF                              call    mp3_integer_init_mdct_windows
  5763 0000392D E87FF7FFFF                              call    mp3_integer_init_table_4_3
  5764 00003932 E8D2F7FFFF                              call    mp3_integer_init_exponent
  5765 00003937 E85CF5FFFF                              call    mp3_any_init_synth_window
  5766 0000393C E80BF6FFFF                              call    mp3_any_init_band_indices
  5767 00003941 E830F6FFFF                              call    mp3_any_init_lsf_sf_expand
  5768 00003946 E879F6FFFF                              call    mp3_any_init_huff_tables
  5769 0000394B E8FEF8FFFF                              call    mp3_init_log_constants
  5770                                  		; 15/02/2025
  5771 00003950 C705[2CA20000]0100-                     mov     dword [mp3_initialized], 1
  5771 00003958 0000               
  5772                                  
  5773                                  .already_initialized:
  5774                                  		; 17/02/2025
  5775                                  		; 16/02/2025
  5776                                  		;mov	dword [mp3_bytes_per_sample], 2
  5777                                  		; 15/02/2025
  5778 0000395A C3                                      retn
  5779                                  
  5780                                  
  5781                                  ; =============== S U B R O U T I N E =======================================
  5782                                  
  5783                                  		; 16/02/2025
  5784                                  mp3_check_1st_frame:
  5785 0000395B E8C4FAFFFF              		call	mp3_exclude_id3_and_tag
  5786 00003960 8B35[EC4A0500]          		mov	esi, [stream_pos]
  5787 00003966 8B0D[F04A0500]          		mov	ecx, [bytes_left]
  5788 0000396C 31FF                    		xor	edi, edi
  5789 0000396E 31ED                    		xor	ebp, ebp
  5790 00003970 E8F4FDFFFF              		call	mp3_decode_frame
  5791 00003975 7206                    		jc	short .error
  5792 00003977 E82AFDFFFF              		call	mp3_check_xing_info
  5793                                  		
  5794                                  		; 16/02/2025
  5795 0000397C F8                      		clc
  5796                                  .error:
  5797 0000397D C3                      		retn
  5798                                  
  5799                                  ;.error:
  5800                                  		;stc
  5801                                  		;retn
  5802                                  
  5803                                  
  5804                                  ; =============== S U B R O U T I N E =======================================
  5805                                  
  5806                                  
  5807                                  mp3_plain_test_without_output:
  5808 0000397E 60                                      pusha
  5809 0000397F 8B35[EC4A0500]                          mov     esi, [stream_pos]
  5810 00003985 8B0D[F04A0500]                          mov     ecx, [bytes_left]
  5811 0000398B BF[00800500]                            mov     edi, sample_buffer
  5812 00003990 31ED                                    xor     ebp, ebp
  5813 00003992 E8D2FDFFFF                              call    mp3_decode_frame
  5814 00003997 61                                      popa
  5815 00003998 7218                                    jc      short .exit
  5816 0000399A A1[A4BB0000]                            mov     eax, [mp3_src_frame_size]
  5817 0000399F 83F800                                  cmp     eax, 0
  5818 000039A2 740E                                    jz      short .exit
  5819 000039A4 0105[EC4A0500]                          add     [stream_pos], eax
  5820 000039AA 2905[F04A0500]                          sub     [bytes_left], eax
  5821 000039B0 EBCC                                    jmp     short mp3_plain_test_without_output
  5822                                  .exit:
  5823 000039B2 C3                                      retn
  5824                                  
  5825                                  
  5826                                  ; =============== S U B R O U T I N E =======================================
  5827                                  
  5828                                  		; 20/10/2024
  5829                                  wrchr:
  5830                                  		; TRDOS 386 System Call
  5831                                  		; ebx = 2 -> write character onto STDOUT
  5832                                  		;push	ebx
  5833                                  		;push	ecx
  5834                                  		;push	eax
  5835 000039B3 60                      		pusha
  5836                                  		;;mov	dword [diskresult], 0
  5837                                  		sys	_stdio, 2, eax
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 000039B4 BB02000000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 000039B9 89C1                <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 000039BB B82E000000          <1>  mov eax, %1
   112                              <1> 
   113 000039C0 CD40                <1>  int 40h
  5838                                  		;jnc	short .ok ; if EOF, eax = 0
  5839                                  		;xor	eax, eax ; 0
  5840                                  ;.ok:
  5841                                  		;mov	[diskresult], eax ; written byte count
  5842 000039C2 61                      		popa
  5843                                  		;pop	eax
  5844                                  		;pop	ecx
  5845                                  		;pop	ebx
  5846 000039C3 C3                      		retn
  5847                                  
  5848                                  
  5849                                  ; =============== S U B R O U T I N E =======================================
  5850                                  
  5851                                  		; 14/02/2025 (mp3play6.s)
  5852                                  		; 01/02/2025 (mp3play4.s)
  5853                                  		; 21/10/2024 (mp3play1.s)
  5854                                  set_break:
  5855                                  		; set [u.break] -end of bss- address to
  5856                                  		; end_of_bss at first (mp3 file will be loaded
  5857                                  		; at the end of bss)
  5858                                  		; ([u.break] initially points to the end of PRG file
  5859                                  		; -code and data- except BSS section)
  5860                                  		;
  5861                                  		; TRDOS 386 system call
  5862                                  		; Set break address
  5863                                  		; ebx = new [u.break]
  5864                                  		;sys	_break, end_of_bss
  5865                                  		; eax = new break address (dword aligned)
  5866                                  
  5867                                  		; 10/01/2025
  5868                                  		sys	_break, 100000h ; end of 1st 1MB
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 000039C4 BB00001000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 000039C9 B811000000          <1>  mov eax, %1
   112                              <1> 
   113 000039CE CD40                <1>  int 40h
  5869                                  
  5870 000039D0 A3[E84A0500]                            mov	[stream_start], eax
  5871 000039D5 A3[EC4A0500]                            mov	[stream_pos], eax
  5872                                  
  5873 000039DA C3                      		retn
  5874                                  
  5875                                  
  5876                                  ; =============== S U B R O U T I N E =======================================
  5877                                  
  5878                                  		; 16/02/2025
  5879                                  		; 15/02/2025 (tmp3play.s)
  5880                                  		; 14/02/2025 (mp3play6.s)
  5881                                  		; 01/02/2025 (mp3play4.s)	
  5882                                  		; 20/10/2024 (mp3play1.s)
  5883                                  
  5884                                  open_and_mmap_the_file:
  5885                                  		; 21/10/2024
  5886                                  		; TRDOS 386 system call
  5887                                  		; Open File
  5888                                  		; ebx = pointer to filename
  5889                                  		; ecx = open mode, 0 = read
  5890                                  		; 15/02/2025
  5891                                               	sys	_open, mp3_file_name, 0
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 000039DB BB[00550500]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 000039E0 B900000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 000039E5 B805000000          <1>  mov eax, %1
   112                              <1> 
   113 000039EA CD40                <1>  int 40h
  5892 000039EC 7277                    		jc	short .not_found
  5893                                  
  5894 000039EE A3[E44A0500]                            mov     [hFile], eax
  5895                                  
  5896                                                 	; get file size by using systell system call
  5897                                   		; (not applicable for TRDOS 386 Kernel v2.0.9 and earlier)
  5898                                  		; TRDOS 386 system call
  5899                                  		; Get current file (offset) pointer
  5900                                  		; ebx = file handle (file descriptor)
  5901                                  		; ecx = 0, offset
  5902                                  		; edx = 2, from the end of file
  5903                                  		;sys	_tell, eax, 0, 2
  5904                                                  ;mov     [mp3_file_size], eax
  5905                                  
  5906                                  		; *** get file size ***
  5907                                  		; TRDOS 386 system call
  5908                                  		; Set file (offset) pointer to file size 
  5909                                  		; (needed for TRDOS kernel v2.0.9 and earlier)
  5910                                  		; ebx = file handle (file descriptor)
  5911                                  		; ecx = 0, offset
  5912                                  		; edx = 2, from the end of file
  5913                                  		sys	_seek, eax, 0, 2
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 000039F3 89C3                <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 000039F5 B900000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 000039FA BA02000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 000039FF B813000000          <1>  mov eax, %1
   112                              <1> 
   113 00003A04 CD40                <1>  int 40h
  5914                                  		; TRDOS 386 system call
  5915                                  		; Get current file (offset) pointer
  5916                                  		; (needed for TRDOS 386 kernel version 2.0.9 and earlier)
  5917 00003A06 31D2                    		xor	edx, edx ; 0
  5918                                  		; ecx = 0
  5919                                  		; ebx = file handle
  5920                                  		sys	_tell
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103                              <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003A08 B814000000          <1>  mov eax, %1
   112                              <1> 
   113 00003A0D CD40                <1>  int 40h
  5921 00003A0F A3[6C120100]            		mov     [mp3_file_size], eax
  5922                                  
  5923                                  		; *** set file offset pointer to 0 again ***
  5924                                  		; TRDOS 386 system call
  5925                                  		; Set file (offset) pointer
  5926                                  		; ebx = file handle (file descriptor)
  5927                                  		; ecx = 0, offset
  5928                                  		; edx = 0, from the beginning/start of file
  5929 00003A14 50                      		push	eax
  5930                                  		sys	_seek
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103                              <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003A15 B813000000          <1>  mov eax, %1
   112                              <1> 
   113 00003A1A CD40                <1>  int 40h
  5931 00003A1C 58                      		pop	eax
  5932                                  
  5933                                  		; now, set [u.break] address to the end of mp3 file
  5934                                  		; at memory -in BSS section-
  5935                                  		; (not necessary for TRDOS 386 PRG files)
  5936                                  		; (this system call will allocate user memory pages
  5937                                  		;  before sysread system call.. early)
  5938                                  		;add	eax, end_of_bss
  5939                                  		; 13/01/2025
  5940 00003A1D 0500001000              		add	eax, 100000h ; + end of 1st 1MB
  5941                                  		; TRDOS 386 system call
  5942                                  		; Set break address
  5943                                  		; ebx = new [u.break]
  5944                                  		sys	_break, eax
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003A22 89C3                <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003A24 B811000000          <1>  mov eax, %1
   112                              <1> 
   113 00003A29 CD40                <1>  int 40h
  5945                                  
  5946                                  		; TRDOS 386 system call
  5947                                  		; Read file
  5948                                  		; ebx = file handle (file descriptor)
  5949                                  		; ecx = buffer address
  5950                                  		; edx = byte count
  5951                                  		sys	_read, [hFile], [stream_start], [mp3_file_size]
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003A2B 8B1D[E44A0500]      <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00003A31 8B0D[E84A0500]      <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00003A37 8B15[6C120100]      <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003A3D B803000000          <1>  mov eax, %1
   112                              <1> 
   113 00003A42 CD40                <1>  int 40h
  5952 00003A44 7204                    		jc	short .read_error
  5953 00003A46 39D0                    		cmp	eax, edx
  5954 00003A48 730E                    		jnb	short .ok
  5955                                  		;or	eax, eax
  5956                                  		;jnz	short .ok
  5957                                  .read_error:		
  5958                                  		; TRDOS 386 system call
  5959                                  		; Close file
  5960                                  		; ebx = file handle (file descriptor)
  5961                                  		;sys	_close, [hFile]
  5962                                  		sys	_close
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103                              <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003A4A B806000000          <1>  mov eax, %1
   112                              <1> 
   113 00003A4F CD40                <1>  int 40h
  5963                                  
  5964                                  		; 16/02/2025
  5965 00003A51 BE[6F3A0000]            		mov	esi, txt_read_err
  5966 00003A56 EB12                    		jmp	short .r_err_msg
  5967                                  .ok:
  5968 00003A58 A3[F04A0500]                            mov     [bytes_left], eax ; read count
  5969                                  		
  5970                                  		; 16/02/2025
  5971                                  		sys	_close
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103                              <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003A5D B806000000          <1>  mov eax, %1
   112                              <1> 
   113 00003A62 CD40                <1>  int 40h
  5972 00003A64 C3                      		retn
  5973                                  .not_found:
  5974                                  		; 16/02/2025
  5975 00003A65 BE[17AB0000]                            mov     esi, txt_not_found ; ("Error: File not found !")
  5976                                  .r_err_msg:
  5977                                  		;call	print_err_msg
  5978                                  		;;stc
  5979                                  		;retn
  5980                                  		; 16/02/2025
  5981 00003A6A E92D170000              		jmp	print_err_msg
  5982                                  
  5983                                  ; ---------------------------------------------------------------------------
  5984                                  
  5985                                  		; 16/02/2025
  5986                                  txt_read_err:
  5987 00003A6F 46696C652072656164-     		db 'File read error !', 0Dh, 0Ah, 0
  5987 00003A78 206572726F7220210D-
  5987 00003A81 0A00               
  5988                                  
  5989                                  
  5990                                  ; =============== E X I T ===================================================
  5991                                  
  5992                                  		; 25/01/2025
  5993                                  		; 20/10/2024
  5994                                  ExitProcess:
  5995 00003A83 E809140000              		call	set_text_mode
  5996                                  ExitP@:
  5997 00003A88 31DB                    		xor	ebx, ebx  ; mov ebx, 0  ; exit code
  5998                                  ExitProcess@:	; 13/01/2025
  5999                                  		sys	_exit
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103                              <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003A8A B801000000          <1>  mov eax, %1
   112                              <1> 
   113 00003A8F CD40                <1>  int 40h
  6000                                  ;hang:
  6001                                  		;jmp	short hang
  6002                                  
  6003                                  
  6004                                  ; ---------------------------------------------------------------------------
  6005                                  ; TRDOS 386 Audio System Functions
  6006                                  ; ---------------------------------------------------------------------------
  6007                                  
  6008                                  ; =============== S U B R O U T I N E =======================================
  6009                                  
  6010                                  		; 10/01/2025
  6011                                  		; 20/10/2024
  6012                                  detect_enable_audio_device:
  6013                                  		; 24/01/2025
  6014                                  		;mov	word [max_frequency], 48000
  6015                                  		; 10/01/2025
  6016                                  		;mov	byte [blocks], 8
  6017                                  
  6018                                  		; check AC'97 hardware at first
  6019                                  		; (48kHz support)
  6020                                  		; TRDOS 386 system call
  6021                                  		; sysaudio
  6022                                  		; Detect (BH=1) AC'97 (BL=2) Audio Device
  6023                                  .ac97:
  6024                                          	sys	_audio, 0102h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003A91 BB02010000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003A96 B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003A9B CD40                <1>  int 40h
  6025 00003A9D 7245                    		jc	short .sb16
  6026 00003A9F C605[84AB0000]02        		mov	byte [audio_hardware], 2 ; AC97
  6027                                  
  6028                                  		;;;;
  6029                                  		; 12/01/2025 (ref: playwav9.s, 18/12/2024)
  6030                                  		sys	_audio, 0E00h ; get audio controller info
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003AA6 BB000E0000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003AAB B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003AB0 CD40                <1>  int 40h
  6031                                  		; EAX = IRQ Number in AL
  6032                                  		;	Audio Device Number in AH 
  6033                                  		; EBX = DEV/VENDOR ID
  6034                                  		;       (DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV)
  6035                                  		; ECX = BUS/DEV/FN 
  6036                                  		;       (00000000BBBBBBBBDDDDDFFF00000000)
  6037                                  		; EDX = NABMBAR/NAMBAR (for AC97)
  6038                                  		;      (Low word, DX = NAMBAR address)
  6039                                  		; EDX = Base IO Addr (DX) for SB16 & VT8233
  6040                                  
  6041 00003AB2 891D[74AB0000]          		mov	[dev_vendor], ebx
  6042 00003AB8 890D[70AB0000]          		mov	[bus_dev_fn], ecx
  6043                                  
  6044 00003ABE 668915[78AB0000]                	mov     [NAMBAR], dx	; save audio mixer base addr
  6045                                  		;shr	edx, 16
  6046                                          	;mov    [NABMBAR], dx	; save bus master base addr
  6047 00003AC5 8915[78AB0000]          		mov	dword [NAMBAR], edx
  6048                                  
  6049 00003ACB A2[80AB0000]            		mov	[ac97_int_ln_reg], al
  6050                                  		;;;;
  6051                                  		
  6052                                  		; TRDOS 386 system call
  6053                                  		; sysaudio
  6054                                  		; Get AC'97 Codec info
  6055                                  		; (Function 14, sub function 1)
  6056                                  		sys	_audio, 0E01h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003AD0 BB010E0000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003AD5 B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003ADA CD40                <1>  int 40h
  6057                                  		; Save Variable Rate Audio support bit
  6058 00003ADC 2401                    		and	al, 1
  6059 00003ADE A2[85AB0000]            		mov	[vra], al
  6060 00003AE3 C3                      		retn
  6061                                  .sb16:
  6062                                  		; check Sound Blaster 16 card at second
  6063                                  		; (44100Hz support, but 24kHz will be used)
  6064                                  		; TRDOS 386 system call
  6065                                  		; sysaudio
  6066                                  		; Detect (BH=1) SB16 (BL=1) Audio Card
  6067                                          	sys	_audio, 0101h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003AE4 BB01010000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003AE9 B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003AEE CD40                <1>  int 40h
  6068 00003AF0 721F                    		jc	short .vt8233
  6069 00003AF2 C605[84AB0000]01        		mov	byte [audio_hardware], 1 ; SB16
  6070                                  		; 24/01/2025
  6071                                  		;mov	word [max_frequency], 44100
  6072                                  		; 10/01/2025
  6073                                  		;;mov	byte [blocks], 7
  6074                                  		;dec	byte [blocks]
  6075                                  
  6076                                  		;;;;
  6077                                  		; 12/01/2025 (ref: sb16play.s, 20/12/2024)
  6078                                  		sys	_audio, 0E00h ; get audio controller info
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003AF9 BB000E0000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003AFE B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003B03 CD40                <1>  int 40h
  6079                                  	
  6080 00003B05 8915[7CAB0000]          		mov	[audio_io_base], edx
  6081 00003B0B A2[80AB0000]            		mov	[audio_intr], al
  6082                                  		;;;;
  6083                                  
  6084 00003B10 C3                      		retn
  6085                                  .vt8233:
  6086                                  		; check VIA VT3237R (VT8233) hardware at third
  6087                                  		; (48kHz support)
  6088                                  		; TRDOS 386 system call
  6089                                  		; sysaudio
  6090                                  		; Detect (BH=1) VT8237R (BL=3) Audio Device
  6091                                  		sys	_audio, 0103h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003B11 BB03010000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003B16 B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003B1B CD40                <1>  int 40h
  6092 00003B1D 7208                    		jc	short .hda
  6093 00003B1F C605[84AB0000]03        		mov	byte [audio_hardware], 3 ; VT8237R
  6094 00003B26 C3                      		retn
  6095                                  .hda:	
  6096                                  		; check Intel HDA hardware at last
  6097                                  		; (48kHz support)
  6098                                  		; TRDOS 386 system call
  6099                                  		; sysaudio
  6100                                  		; Detect (BH=1) Intel HDA (BL=4) Audio Device
  6101                                  		sys	_audio, 0104h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003B27 BB04010000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003B2C B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003B31 CD40                <1>  int 40h
  6102 00003B33 7208                    		jc	short .err
  6103 00003B35 C605[84AB0000]04        		mov	byte [audio_hardware], 4 ; HDA
  6104 00003B3C C3                      		retn
  6105                                  .err:
  6106                                  		; 16/02/2025
  6107 00003B3D BE[473B0000]            		mov	esi, txt_audio_nf_err
  6108                                  		;call	print_err_msg
  6109                                  		;;stc
  6110                                  		;retn
  6111 00003B42 E955160000              		jmp	print_err_msg	
  6112                                  
  6113                                  ; ---------------------------------------------------------------------------
  6114                                  
  6115 00003B47 50726F706572206175-     txt_audio_nf_err: db 'Proper audio hardware not found!',0Dh,0Ah,0
  6115 00003B50 64696F206861726477-
  6115 00003B59 617265206E6F742066-
  6115 00003B62 6F756E64210D0A00   
  6116                                  
  6117                                  
  6118                                  ; =============== CONSTANT ==================================================
  6119                                  
  6120                                  		; 21/10/2024
  6121                                  ;MP3_MAX_OUTPUT_SIZE equ 2*2*18*32*2
  6122                                      ; = 1200h = 4608 decimal = 2 channels, 2 granules, 18*32, 2 byte (16bit)
  6123                                  
  6124                                  
  6125                                  ; =============== S U B R O U T I N E =======================================
  6126                                  
  6127                                  		; 29/01/2025
  6128                                  		; 28/01/2025
  6129                                  		; 27/01/2025
  6130                                  		; 12/01/2025
  6131                                  audio_system_init:
  6132                                  		; 28/01/2025
  6133 00003B6A A1[80120100]            		mov	eax, [mp3_samples_output_size]
  6134                                  
  6135                                  		; 29/01/2025
  6136 00003B6F C605[87AB0000]01        		mov	byte [blocks], 1
  6137                                  		;
  6138 00003B76 803D[84AB0000]01        		cmp	byte [audio_hardware], 1
  6139 00003B7D 750A                    		jne	short .bufaloc
  6140                                  
  6141                                  		;mov	eax, sample_buffer_size
  6142                                  		; 10/01/2025
  6143                                  		;mov	byte [blocks], 16
  6144                                  		; 12/01/2025
  6145                                  		;mov	byte [blocks], 8
  6146                                  		;;mov	eax, [mp3_samples_output_size]
  6147                                  		;shl	eax, 3 ; * 8
  6148                                  		;;shl	eax, 4 ; * 16
  6149                                  		
  6150                                  		; 29/01/2025
  6151 00003B7F C025[87AB0000]02        		shl	byte [blocks], 2 ; 4
  6152 00003B86 C1E002                  		shl	eax, 2 ; * 4
  6153                                  .asi@:		
  6154                                  		; 12/01/2025
  6155                                  		;cmp	eax, 65536
  6156                                  		;jna	short .asi@@
  6157                                  		;sub	eax, [mp3_samples_output_size]
  6158                                  		;dec	byte [blocks]
  6159                                  		;;;
  6160                                  		; 11/01/2025
  6161                                  		;test	byte [blocks], 1
  6162                                  		;jz	short .asi@
  6163                                  		;dec	byte [blocks] ; even number
  6164                                  		;sub	eax, [mp3_samples_output_size]
  6165                                  		;;;
  6166                                  		;jmp	short .asi@
  6167                                  .asi@@:
  6168                                  		; 29/01/2025
  6169                                  		;cmp	byte [audio_hardware], 1 ; SB16
  6170                                  		;jne	short .bufaloc
  6171                                  .bufaloc:
  6172                                  		; TRDOS 386 system call
  6173                                  		; sysaudio
  6174                                  		; Allocate audio buffer (for user)
  6175                                  		; ebx = 0200h (BH=2)
  6176                                  		; ecx = buffer size (in bytes)
  6177                                  		; edx = buffer address (virtual)
  6178 00003B89 A3[88AB0000]            		mov	[buffer_size], eax
  6179                                  		sys	_audio, 0200h, eax, sample_buffer
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003B8E BB00020000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00003B93 89C1                <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00003B95 BA[00800500]        <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003B9A B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003B9F CD40                <1>  int 40h
  6180 00003BA1 722E                    		jc	short .init_err
  6181                                  		
  6182                                  		; 12/01/2025
  6183                                  		; clear audio buffer (before playback)
  6184 00003BA3 BF[00800500]            		mov	edi, sample_buffer
  6185                                  		; ecx = buffer size in bytes
  6186 00003BA8 C1E902                  		shr	ecx, 2 ; double word
  6187 00003BAB 31C0                    		xor	eax, eax
  6188 00003BAD F3AB                    		rep	stosd
  6189                                  
  6190                                  		; TRDOS 386 system call
  6191                                  		; sysaudio
  6192                                  		; Initialize audio device (bh = 3)
  6193                                  		; bl = 01h -> CallBack method
  6194                                  		; edx = Callback service address (virtual)
  6195                                  		; ecx = 0 ; CL = srb value ; not used
  6196                                  		sys	_audio, 0301h, 0, audio_callback
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003BAF BB01030000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00003BB4 B900000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00003BB9 BA[073C0000]        <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003BBE B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003BC3 CD40                <1>  int 40h
  6197                                  		; 12/01/2025
  6198                                  		; SRB method (faster than callback method)
  6199                                  		; bl = 0 -> Signal Response Byte method
  6200                                  		; cl = 1 -> SRB set value 
  6201                                  		;     (will be set by audio IRQ service of the kernel)
  6202                                  		; edx = SRB address -one byte data-
  6203                                  		;sys	_audio, 0300h, 1, srb	
  6204                                  		
  6205 00003BC5 720A                    		jc	short .init_err
  6206                                  
  6207                                  		; 24/01/2025
  6208                                  		;retn
  6209                                  
  6210 00003BC7 A0[C4AA0000]            		mov	al, [volume_level]
  6211                                  		;call	SetMasterVolume@
  6212                                  		;retn
  6213 00003BCC E9AE000000              		jmp	SetMasterVolume@
  6214                                  
  6215                                  .init_err:
  6216                                  init_error:	
  6217                                  		; 27/01/2025
  6218 00003BD1 E8BB120000              		call	set_text_mode
  6219                                  
  6220                                  		; 16/02/2025
  6221 00003BD6 BE[E03B0000]            		mov	esi, txt_audio_init_err
  6222                                  		;call	print_err_msg
  6223                                  		;;stc
  6224                                  		;retn
  6225 00003BDB E9BC150000              		jmp	print_err_msg
  6226                                  
  6227                                  ; ---------------------------------------------------------------------------
  6228                                  
  6229 00003BE0 417564696F20686172-     txt_audio_init_err: db 'Audio hardware initialization error!',0Dh,0Ah,0
  6229 00003BE9 647761726520696E69-
  6229 00003BF2 7469616C697A617469-
  6229 00003BFB 6F6E206572726F7221-
  6229 00003C04 0D0A00             
  6230                                  
  6231                                  
  6232                                  ; =============== S U B R O U T I N E =======================================
  6233                                  
  6234                                  		; 12/01/2025
  6235                                  		; 21/10/2024
  6236                                  audio_callback:
  6237                                  		; Operating system has directed CPU here because of
  6238                                  		; user (2nd) stage of the audio hardware interrupt service.
  6239                                  		; This procedure must be short and return to operating
  6240                                  		; system again via sysrelease system call
  6241                                  		; (or any system call here will be handled as sysrelease).
  6242                                  
  6243 00003C07 C605[86AB0000]01        		mov	byte [srb], 1
  6244                                  
  6245                                  		; 12/01/2025
  6246 00003C0E E82E010000                              call	try_enqueue_all_blocks
  6247                                  .skip:
  6248                                  		sys	_rele ; return from callback service 
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103                              <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003C13 B827000000          <1>  mov eax, %1
   112                              <1> 
   113 00003C18 CD40                <1>  int 40h
  6249                                  		
  6250                                  		; we must not come here !
  6251 00003C1A BBFFFFFFFF              		mov	ebx, -1
  6252                                  		sys	_exit
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103                              <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003C1F B801000000          <1>  mov eax, %1
   112                              <1> 
   113 00003C24 CD40                <1>  int 40h
  6253                                  		;jmp	short audio_callback
  6254                                  
  6255                                  
  6256                                  ; =============== S U B R O U T I N E =======================================
  6257                                  
  6258                                  		; 22/01/2025
  6259                                  audio_f_stop: 
  6260 00003C26 C605[81AB0000]02        		mov	byte [stopped], 2
  6261                                  
  6262                                  		; Stop playing
  6263                                  		sys	_audio, 0700h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003C2D BB00070000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003C32 B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003C37 CD40                <1>  int 40h
  6264                                  		; Cancel callback service (for user)
  6265                                  		sys	_audio, 0900h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003C39 BB00090000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003C3E B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003C43 CD40                <1>  int 40h
  6266                                  		; Deallocate audio buffer (for user)
  6267                                  		sys	_audio, 0A00h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003C45 BB000A0000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003C4A B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003C4F CD40                <1>  int 40h
  6268 00003C51 C3                      		retn
  6269                                  
  6270                                  		; 22/01/2025
  6271                                  audio_f_pause:
  6272 00003C52 C605[81AB0000]01        		mov	byte [stopped], 1 ; paused
  6273                                  
  6274                                  		sys	_audio, 0500h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003C59 BB00050000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003C5E B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003C63 CD40                <1>  int 40h
  6275 00003C65 C3                      		retn
  6276                                  
  6277                                  
  6278                                  		; 22/01/2025
  6279                                  audio_f_play:	; continue to play (after pause)
  6280                                  
  6281 00003C66 C605[81AB0000]00        		mov	byte [stopped], 0
  6282                                  	
  6283                                  		sys	_audio, 0600h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003C6D BB00060000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003C72 B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003C77 CD40                <1>  int 40h
  6284 00003C79 C3                      		retn
  6285                                  
  6286                                  ; =============== S U B R O U T I N E =======================================
  6287                                  
  6288                                  	; 22/01/2025
  6289                                  SetMasterVolume:
  6290                                  	;cmp	al, 31
  6291                                  	;ja	short setvolume_ok
  6292 00003C7A A2[C4AA0000]            	mov	[volume_level], al  ; max = 0, min = 31
  6293                                  
  6294                                  	; 24/01/2025
  6295                                  SetMasterVolume@:
  6296 00003C7F B41F                    	mov	ah, 31
  6297 00003C81 28C4                    	sub	ah, al
  6298 00003C83 88E0                    	mov	al, ah
  6299                                  
  6300                                  	; Set Master Volume Level (BL=0 or 80h)
  6301                                  	; 	for next playing (BL>=80h)
  6302                                  	;sys	_audio, 0B80h, eax
  6303                                  	sys	_audio, 0B00h, eax
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003C85 BB000B0000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00003C8A 89C1                <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003C8C B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003C91 CD40                <1>  int 40h
  6304                                  	
  6305                                  setvolume_ok:
  6306 00003C93 C3                      	retn
  6307                                  
  6308                                  ; =============== S U B R O U T I N E =======================================
  6309                                  
  6310                                  		; 17/02/2025
  6311                                  		; 16/02/2025 (tmp3play.s)	
  6312                                  		; 13/02/2025 (mp3play6.s)
  6313                                  		; 26/01/2025
  6314                                  		; 23/01/2025
  6315                                  		; 22/01/2025
  6316                                  		; 13/01/2025
  6317                                  		; 12/01/2025
  6318                                  		; 10/01/2025
  6319                                  		; 21/10/2024
  6320                                  mp3_cast_to_speaker:
  6321                                  		; Start	to play
  6322                                  		; 17/02/2025
  6323                                  		;mov	eax, [mp3_bytes_per_sample]
  6324                                  		;;shr	al, 1 ; 8 -> 0, 16 -> 1
  6325                                  		;;shl	al, 1 ; 16 -> 2, 8 -> 0
  6326                                  		;and	al, 2 ; 22/10/2024
  6327                                  		; 16/02/2025
  6328 00003C94 8B1D[C8BB0000]          		mov	ebx, [mp3_num_channels]
  6329 00003C9A 4B                      		dec	ebx
  6330                                  		;or	bl, al
  6331                                  		; 17/02/2025 ([mp3_bytes_per_sample] = 2)
  6332 00003C9B 80CB02                  		or	bl, 2 ; 16bit
  6333 00003C9E 8B0D[BCBB0000]          		mov	ecx, [mp3_sample_rate]
  6334 00003CA4 B704                    		mov	bh, 4 ; start to play
  6335                                  
  6336                                  		; 13/01/2025
  6337                                  mp3_cast_to_speaker_@:
  6338 00003CA6 53                      		push	ebx
  6339 00003CA7 51                      		push	ecx
  6340                                  
  6341                                                  ; 12/01/2025
  6342                                  		;call	try_enqueue_all_blocks
  6343                                  	
  6344                                  		; 12/01/2025
  6345                                  		;cmp	dword [bytes_left],0
  6346                                  		;jz	short .playback
  6347                                  		
  6348                                  		; 12/01/2025
  6349                                  		; (here audio buffer -sample_buffer- is empty)
  6350                                  		; (clear dma half buffer 1)
  6351                                  		sys	_audio, 1001h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003CA8 BB01100000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003CAD B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003CB2 CD40                <1>  int 40h
  6352                                  		; (clear dma half buffer 2)
  6353                                  		;sys	_audio, 1002h
  6354                                  
  6355                                  		; TRDOS 386 system call
  6356                                  		; sysaudio
  6357                                  		; bh = 16 : update (current, first) dma half buffer
  6358                                  		; bl = 0  : then switch to the next (second) half buffer
  6359                                  		sys	_audio, 1000h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003CB4 BB00100000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003CB9 B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003CBE CD40                <1>  int 40h
  6360                                  
  6361                                  		; 12/01/2025
  6362                                  		; 22/10/2024
  6363                                  		;call	try_enqueue_all_blocks
  6364                                  .playback:
  6365 00003CC0 59                      		pop	ecx ; sample rate (frequency)
  6366 00003CC1 5B                      		pop	ebx ; play mode (bl)
  6367                                  
  6368                                  		; TRDOS 386 system call
  6369                                  		; sysaudio
  6370                                  		; bh = 4 -> start to play
  6371                                  		; bl = mode -> bit 0, 1 = stereo, 0 = mono
  6372                                  		;	       bit 1, 1 = 16 bit, 0 = 8 bit
  6373                                  		; cx = sample rate (hertz)
  6374                                  		sys	_audio
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103                              <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003CC2 B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003CC7 CD40                <1>  int 40h
  6375                                  
  6376                                  		; 12/01/2025
  6377 00003CC9 C605[86AB0000]00        		mov	byte [srb], 0
  6378                                  		;;;
  6379                                  
  6380                                  .playback_lop:
  6381                                  		; 21/01/2025
  6382                                  		;;;; ---------------------
  6383 00003CD0 803D[81AB0000]00        		cmp	byte [stopped], 0
  6384 00003CD7 7609                    		jna	short .pb_l_@
  6385 00003CD9 E808100000              		call	checkUpdateEvents
  6386 00003CDE 7230                    		jc	short .playback_end
  6387                                  
  6388                                  		; 16/02/2025
  6389 00003CE0 EBEE                    		jmp	short .playback_lop
  6390                                  .pb_l_@:
  6391                                  		;;;; ---------------------
  6392                                  
  6393 00003CE2 31C0                    		xor	eax, eax
  6394 00003CE4 3905[F04A0500]          		cmp	[bytes_left], eax ; 0
  6395 00003CEA 7508                    		jnz	short .playback_next
  6396                                  		; 22/10/2024
  6397 00003CEC 3805[35A20000]          		cmp	byte [num_enqueued_frames], al ; 0
  6398 00003CF2 741C                                    jz	short .playback_end
  6399                                  .playback_next:
  6400 00003CF4 A2[35A20000]            		mov	[num_enqueued_frames], al ; 0
  6401 00003CF9 803D[86AB0000]01        		cmp	byte [srb], 1	; audio interrupt status
  6402                                  		;jb	short .getchar
  6403                                  		; 21/01/2025
  6404 00003D00 7207                    		jb	short .pb_l_@@
  6405                                  
  6406                                  		;mov	byte [srb], 0	; reset
  6407 00003D02 A2[86AB0000]            		mov	[srb], al ; 0
  6408                                  
  6409                                  		; 12/01/2025
  6410                                  		;call	try_enqueue_all_blocks
  6411                                  
  6412                                  		; 16/02/2025
  6413 00003D07 EBC7                    		jmp	short .playback_lop
  6414                                  		
  6415                                  		; 21/01/2025
  6416                                  		;;;; ---------------------
  6417                                  .pb_l_@@:
  6418 00003D09 E8D80F0000              		call	checkUpdateEvents
  6419                                  		;jc	short .playback_end
  6420                                  		;jmp	short .playback_lop
  6421                                  		; 16/02/2025
  6422 00003D0E 73C0                    		jnc	short .playback_lop
  6423                                  
  6424                                  		;;;; ---------------------
  6425                                  
  6426                                  .playback_end:
  6427                                  		; 16/02/2025
  6428                                  
  6429                                  		; TRDOS 386 system call
  6430                                  		; sysaudio
  6431                                  		; Stop playing
  6432                                  		sys	_audio, 0700h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003D10 BB00070000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003D15 B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003D1A CD40                <1>  int 40h
  6433                                  		; Cancel callback service (for user)
  6434                                  		sys	_audio, 0900h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003D1C BB00090000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003D21 B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003D26 CD40                <1>  int 40h
  6435                                  		; Deallocate audio buffer (for user)
  6436                                  		sys	_audio, 0A00h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003D28 BB000A0000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003D2D B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003D32 CD40                <1>  int 40h
  6437                                  		; Disable audio device
  6438                                  		sys	_audio, 0C00h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003D34 BB000C0000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003D39 B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003D3E CD40                <1>  int 40h
  6439 00003D40 C3                      		retn
  6440                                  
  6441                                  
  6442                                  ; =============== S U B R O U T I N E =======================================
  6443                                  
  6444                                  		; 29/01/2025
  6445                                  		; 23/01/2025
  6446                                  		; 13/01/2025
  6447                                  		; 12/01/2025
  6448                                  		; 09/01/2025
  6449                                  		; 21/10/2024
  6450                                  try_enqueue_all_blocks:
  6451                                  		; 12/01/2025
  6452 00003D41 60                      		pusha
  6453 00003D42 BF[00800500]             		mov	edi, sample_buffer
  6454                                  		; 10/01/2025
  6455                                  		;jmp	short .first_block
  6456                                  		; 13/01/2025
  6457 00003D47 EB15                    		jmp	short try_enqueue_all_blocks_@
  6458                                  ;.next_block:
  6459                                  teab_next_block:
  6460 00003D49 833D[F04A0500]00                        cmp	dword [bytes_left], 0
  6461                                                  ;jle	short .enqueue_done
  6462                                  		; 13/01/2025
  6463 00003D50 7E54                    		jle	short teab_enqueue_done
  6464                                  		;
  6465 00003D52 8B3D[7C120100]          		mov	edi, [mp3_samples_dst]
  6466 00003D58 033D[80120100]          		add	edi, [mp3_samples_output_size]
  6467                                  
  6468                                  try_enqueue_all_blocks_@:
  6469                                  ;.first_block:
  6470                                  		;pusha
  6471 00003D5E 8B35[EC4A0500]          		mov	esi, [stream_pos]
  6472 00003D64 8B0D[F04A0500]          		mov	ecx, [bytes_left]
  6473 00003D6A 31ED                    		xor	ebp, ebp
  6474 00003D6C E8F8F9FFFF              		call	mp3_decode_frame
  6475                                  		;popa
  6476                                  		;;jc	short .enqueue_done
  6477                                  		; 23/01/2025 (ignore error) -forward/backward-
  6478                                  		; 13/01/2025
  6479                                  		;jc	short teab_enqueue_done
  6480 00003D71 A1[A4BB0000]            		mov	eax, [mp3_src_frame_size]
  6481 00003D76 83F800                  		cmp	eax, 0
  6482                                  		;jz	short .enqueue_done
  6483                                  		; 13/01/2025
  6484 00003D79 742B                    		jz	short teab_enqueue_done
  6485 00003D7B 0105[EC4A0500]          		add	[stream_pos], eax
  6486 00003D81 2905[F04A0500]          		sub	[bytes_left], eax
  6487 00003D87 A1[80120100]            		mov	eax, [mp3_samples_output_size]
  6488 00003D8C 83F800                  		cmp	eax, 0
  6489                                  		;jz	short .next_block
  6490                                  		; 13/01/2025
  6491 00003D8F 74B8                    		jz	short teab_next_block
  6492                                  ;.no_error:
  6493 00003D91 FE05[35A20000]          		inc	byte [num_enqueued_frames]
  6494                                  		;
  6495 00003D97 A0[35A20000]            		mov	al, [num_enqueued_frames]
  6496 00003D9C 3A05[87AB0000]          		cmp	al, [blocks]
  6497                                  		;jb	short .next_block
  6498                                  		; 13/01/2025
  6499 00003DA2 72A5                    		jb	short teab_next_block
  6500                                  teab_rtn:
  6501                                  ;.rtn:
  6502                                  		; 12/01/2025
  6503 00003DA4 61                      		popa
  6504 00003DA5 C3                      		retn
  6505                                  ;.enqueue_done:
  6506                                  teab_enqueue_done:
  6507 00003DA6 C705[F04A0500]0000-                     mov	dword [bytes_left], 0
  6507 00003DAE 0000               
  6508                                  		; 12/01/2025
  6509                                  		;jmp	short .rtn
  6510                                  		; 13/01/2025
  6511 00003DB0 EBF2                    		jmp	short teab_rtn
  6512                                  
  6513                                  ; ---------------------------------------------------------------------------
  6514                                  ; 13/01/2025 - Interpolation procedures for non-VRA AC97 codecs
  6515                                  ; ---------------------------------------------------------------------------
  6516                                  
  6517                                  ; =============== S U B R O U T I N E =======================================
  6518                                  		
  6519                                  		; 18/02/2025
  6520                                  		; 17/02/2025
  6521                                  		; 16/02/2025
  6522                                  		; 30/01/2025
  6523                                  		; 27/01/2025
  6524                                  		; 26/01/2025
  6525                                  		; 15/01/2025
  6526                                  		; 14/01/2025
  6527                                  		; 13/01/2025
  6528                                  audio_system_init_x:
  6529 00003DB2 8B0D[80120100]          		mov	ecx, [mp3_samples_output_size]
  6530                                  		;;;
  6531                                  		; 15/01/2025
  6532 00003DB8 89C8                    		mov	eax, ecx
  6533                                  		;mov	[loadsize], ecx
  6534                                  		;;;
  6535                                  		; 15/01/2025
  6536                                  		;shl	ecx, 3 ; * 8 ; 8 blocks
  6537                                  		; 14/01/2025
  6538                                  		;mov	byte [blocks], 8
  6539                                  
  6540 00003DBA 803D[98AB0000]02        		cmp	byte [interpolation], 2
  6541 00003DC1 731F                    		jnb	short .chk_sample_rate	; interpolation needed
  6542                                  
  6543                                  		; 48 kHZ with 16 bit stereo conversion
  6544                                  		;
  6545                                  		; selected output is
  6546                                  		;	 8bit stereo or 16bit mono or 8bit mono
  6547                                  		; (but AC97 hardware needs 16bit stereo samples)
  6548                                  	
  6549                                  		; 15/01/2025
  6550                                  		;mov	eax, ecx
  6551 00003DC3 D1E0                    		shl	eax, 1 ; * 2 (mono to stereo)
  6552                                  
  6553                                  		; 18/02/2025
  6554                                  		; 17/02/2025
  6555 00003DC5 BB[59400000]            		mov	ebx, convert_to_stereo
  6556                                  		
  6557                                  		; 17/02/2025
  6558                                  		;cmp	byte [mp3_bytes_per_sample], 2
  6559                                  		;je	short .set_sizes ; 16bit mono
  6560 00003DCA EB00                    		jmp	.set_sizes
  6561                                  
  6562                                  		; 17/02/2025
  6563                                  		; [mp3_bytes_per_sample] = 2
  6564                                  		; 16bit mono or 16bit stereo 
  6565                                  		; (but 16bit stereo does not need conversion here)
  6566                                  
  6567                                  		;; 8bit output (16bit conversion is neeed)
  6568                                  		;mov	ebx, convert_to_16bit
  6569                                  		;; 16/02/2025
  6570                                  		;cmp	byte [mp3_num_channels], 2
  6571                                  		;je	short .set_sizes ; 8bit stereo
  6572                                  		;; 8bit mono output
  6573                                  		;;shr	ecx, 1 ; / 2 ; 4 blocks
  6574                                  		;; 14/01/2025
  6575                                  		;shl	eax, 1
  6576                                  		;; 14/01/2025
  6577                                  		;;shr	byte [blocks], 1
  6578                                  		;mov	ebx, convert_to_stereo_16bit
  6579                                  .set_sizes:
  6580                                  .set_sizes_@:
  6581                                  		; 18/02/2025
  6582 00003DCC 891D[90AB0000]          		mov	[conversion], ebx
  6583 00003DD2 890D[94AB0000]          		mov	[loadsize], ecx
  6584                                  		;;;
  6585                                  		; 14/01/2025
  6586                                  		; align to 16bit stereo (if there is a defect)
  6587                                  		; 15/01/2025
  6588                                  		;and	al, ~3
  6589 00003DD8 A3[88AB0000]            		mov	[buffer_size], eax
  6590 00003DDD E981010000              		jmp	.asix_@
  6591                                  		; 13/01/2025
  6592                                  		; ----------------------------
  6593                                  		; ref: playwav9.s - 18/12/2024
  6594                                  .chk_sample_rate:
  6595                                  		; set interpolation parameters
  6596                                  		; (for 8, 11.025, 16, 22.050, 24, 32, 44.1 kHZ)
  6597                                  		; 16/02/2025
  6598 00003DE2 A1[BCBB0000]            		mov	eax, [mp3_sample_rate]
  6599                                  		; ecx = 8 * [mp3_samples_output_size] ; 8 blocks
  6600                                  .chk_44khz:
  6601 00003DE7 3D44AC0000              		cmp	eax, 44100
  6602 00003DEC 7527                    		jne	short .chk_32khz
  6603                                  		; 30/01/2025
  6604 00003DEE B819000000              		mov	eax, 25 ; *
  6605                                  		; 17/02/2025
  6606                                  		;cmp	byte [mp3_bytes_per_sample], 1
  6607                                  		;jna	short .chk_44khz_1
  6608 00003DF3 BB[A0460000]            		mov	ebx, load_44khz_stereo_16_bit
  6609                                  		; 16/02/2025
  6610 00003DF8 803D[C8BB0000]01        		cmp	byte [mp3_num_channels], 1
  6611 00003DFF 7509                    		jne	short .chk_44khz_2
  6612 00003E01 BB[54460000]            		mov	ebx, load_44khz_mono_16_bit
  6613                                  		;jmp	short .chk_44khz_2
  6614                                  		; 30/01/2025
  6615 00003E06 EB00                    		jmp	short .chk_44khz_3
  6616                                  .chk_44khz_1:
  6617                                  		; 17/02/2025
  6618                                  		; 	[mp3_bytes_per_sample] = 2
  6619                                  		;; 30/01/2025
  6620                                  		;shl	eax, 1
  6621                                  		;mov	ebx, load_44khz_stereo_8_bit
  6622                                  		;; 16/02/2025
  6623                                  		;cmp	byte [mp3_num_channels], 1
  6624                                  		;jne	short .chk_44khz_2
  6625                                  		;mov	ebx, load_44khz_mono_8_bit
  6626                                  .chk_44khz_3:
  6627                                  		; 30/01/2025
  6628 00003E08 D1E0                    		shl	eax, 1
  6629                                  .chk_44khz_2:
  6630                                  		; 48000/44100 == 25/23
  6631 00003E0A BD17000000              		mov	ebp, 23
  6632                                  		;mov	eax, 25 ; *
  6633 00003E0F F7E1                    		mul	ecx  ; load (decoding buffer) size
  6634 00003E11 F7F5                    		div	ebp
  6635                                  		;; eax = wav output buffer size
  6636                                  		; 15/01/2025
  6637                                  		; eax = 1 block output (converted) size
  6638 00003E13 EBB7                    		jmp	short .set_sizes
  6639                                  
  6640                                  		; 15/01/2025
  6641                                  ;		;;;
  6642                                  ;		; 14/01/2025
  6643                                  ;.set_sizes_@:
  6644                                  ;		cmp	ecx, 4608
  6645                                  ;		;ja	short .set_sizes
  6646                                  ;		; 15/01/2025
  6647                                  ;		jnb	short .set_sizes
  6648                                  ;		;shl	ecx, 1
  6649                                  ;		; ecx = [mp3_samples_output_size]
  6650                                  ;		shl	byte [blocks], 1
  6651                                  ;		; 15/01/2025
  6652                                  ;		;shl	eax, 1
  6653                                  ;		;jmp	short .set_sizes_@
  6654                                  ;		jmp	.set_sizes
  6655                                  		;;;
  6656                                  .chk_32khz:
  6657 00003E15 3D007D0000              		cmp	eax, 32000
  6658 00003E1A 7522                    		jne	short .chk_24khz
  6659                                  		; 30/01/2025
  6660 00003E1C B803000000              		mov	eax, 3 ; *
  6661                                  		; 17/02/2025
  6662                                  		;cmp	byte [mp3_bytes_per_sample], 1
  6663                                  		;jna	short .chk_32khz_1
  6664 00003E21 BB[36440000]            		mov	ebx, load_32khz_stereo_16_bit
  6665                                  		; 16/02/2025
  6666 00003E26 803D[C8BB0000]01        		cmp	byte [mp3_num_channels], 1
  6667 00003E2D 7509                    		jne	short .chk_32khz_2
  6668 00003E2F BB[F6430000]            		mov	ebx, load_32khz_mono_16_bit
  6669                                  		;jmp	short .chk_32khz_2
  6670                                  		; 30/01/2025
  6671 00003E34 EB00                    		jmp	short .chk_32khz_3
  6672                                  .chk_32khz_1:
  6673                                  		; 17/02/2025
  6674                                  		;	[mp3_bytes_per_sample] = 2
  6675                                  		;; 30/01/2025
  6676                                  		;shl	eax, 1
  6677                                  		;mov	ebx, load_32khz_stereo_8_bit
  6678                                  		;; 16/02/2025
  6679                                  		;cmp	byte [mp3_num_channels], 1
  6680                                  		;jne	short .chk_32khz_2
  6681                                  		;mov	ebx, load_32khz_mono_8_bit
  6682                                  .chk_32khz_3:
  6683                                  		; 30/01/2025
  6684 00003E36 D1E0                    		shl	eax, 1
  6685                                  .chk_32khz_2:
  6686                                  		; 48000/32000 = 3/2
  6687                                  		;mov	eax, 3 ; *
  6688 00003E38 F7E1                    		mul	ecx 	; *3
  6689                                  		;mov	eax, ecx
  6690                                  		;add	eax, eax
  6691                                  		;add	eax, ecx
  6692 00003E3A D1E8                    		shr	eax, 1  ; /2
  6693 00003E3C EB8E                    		jmp	.set_sizes
  6694                                  .chk_24khz:
  6695 00003E3E 3DC05D0000              		cmp	eax, 24000
  6696 00003E43 7520                    		jne	short .chk_22khz
  6697                                  		; 30/01/2025
  6698 00003E45 89C8                    		mov	eax, ecx ; *
  6699                                  		; 17/02/2025
  6700                                  		;cmp	byte [mp3_bytes_per_sample], 1
  6701                                  		;jna	short .chk_24khz_1
  6702                                  		; 14/01/2025 
  6703                                  		; bx -> ebx
  6704                                  		; (BugFix, 'playwav9.s' has a bug here) 
  6705 00003E47 BB[94430000]            		mov	ebx, load_24khz_stereo_16_bit
  6706                                  		; 16/02/2025
  6707 00003E4C 803D[C8BB0000]01        		cmp	byte [mp3_num_channels], 1
  6708 00003E53 7509                    		jne	short .chk_24khz_2
  6709 00003E55 BB[58430000]            		mov	ebx, load_24khz_mono_16_bit
  6710                                  		;jmp	short .chk_24khz_2
  6711                                  		; 30/01/2025
  6712 00003E5A EB00                    		jmp	short .chk_24khz_3
  6713                                  .chk_24khz_1:
  6714                                  		; 17/02/2025
  6715                                  		;	[mp3_bytes_per_sample] = 2
  6716                                  		;; 30/01/2025
  6717                                  		;shl	eax, 1
  6718                                  		;mov	ebx, load_24khz_stereo_8_bit
  6719                                  		;; 16/02/2025
  6720                                  		;cmp	byte [mp3_num_channels], 1
  6721                                  		;jne	short .chk_24khz_2
  6722                                  		;mov	ebx, load_24khz_mono_8_bit
  6723                                  .chk_24khz_3:
  6724                                  		; 30/01/2025
  6725 00003E5C D1E0                    		shl	eax, 1
  6726                                  .chk_24khz_2:
  6727                                  		; 48000/24000 = 2/1
  6728                                  		;mov	eax, ecx ; *
  6729 00003E5E D1E0                    		shl	eax, 1
  6730 00003E60 E967FFFFFF              		jmp	.set_sizes_@
  6731                                  .chk_22khz:
  6732 00003E65 3D22560000              		cmp	eax, 22050
  6733 00003E6A 752A                    		jne	short .chk_16khz
  6734                                  		; 30/01/2025
  6735 00003E6C B825000000              		mov	eax, 37 ; *
  6736                                  		; 17/02/2025
  6737                                  		;cmp	byte [mp3_bytes_per_sample], 1
  6738                                  		;jna	short .chk_22khz_1
  6739 00003E71 BB[04450000]            		mov	ebx, load_22khz_stereo_16_bit
  6740                                  		; 16/02/2025
  6741 00003E76 803D[C8BB0000]01        		cmp	byte [mp3_num_channels], 1
  6742 00003E7D 7509                    		jne	short .chk_22khz_2
  6743 00003E7F BB[A1440000]            		mov	ebx, load_22khz_mono_16_bit
  6744                                  		;jmp	short .chk_22khz_2
  6745                                  		; 30/01/2025
  6746 00003E84 EB00                    		jmp	short .chk_22khz_3
  6747                                  .chk_22khz_1:
  6748                                  		; 17/02/2025
  6749                                  		;	[mp3_bytes_per_sample] = 2
  6750                                  		;; 30/01/2025
  6751                                  		;shl	eax, 1
  6752                                  		;mov	ebx, load_22khz_stereo_8_bit
  6753                                  		;; 16/02/2025
  6754                                  		;cmp	byte [mp3_num_channels], 1
  6755                                  		;jne	short .chk_22khz_2
  6756                                  		;mov	ebx, load_22khz_mono_8_bit
  6757                                  .chk_22khz_3:
  6758                                  		; 30/01/2025
  6759 00003E86 D1E0                    		shl	eax, 1
  6760                                  .chk_22khz_2:
  6761                                  		; 48000/22050 == 37/17
  6762 00003E88 BD11000000              		mov	ebp, 17
  6763                                  		;mov	eax, 37 ; *
  6764 00003E8D F7E1                    		mul	ecx  ; load (decoding buffer) size
  6765 00003E8F F7F5                    		div	ebp
  6766                                  		;; eax = wav output buffer size
  6767                                  		; 15/01/2025
  6768                                  		; eax = 1 block output (converted) size
  6769 00003E91 E936FFFFFF              		jmp	.set_sizes_@
  6770                                  .chk_16khz:
  6771 00003E96 3D803E0000              		cmp	eax, 16000
  6772 00003E9B 7522                    		jne	short .chk_11khz
  6773                                  		; 30/01/2025
  6774 00003E9D 89C8                    		mov	eax, ecx ; *
  6775 00003E9F D1E0                    		shl	eax, 1
  6776 00003EA1 01C8                    		add	eax, ecx
  6777                                  		; 17/02/2025
  6778                                  		;cmp	byte [mp3_bytes_per_sample], 1
  6779                                  		;jna	short .chk_16khz_1
  6780 00003EA3 BB[A7420000]            		mov	ebx, load_16khz_stereo_16_bit
  6781                                  		; 16/02/2025
  6782 00003EA8 803D[C8BB0000]01        		cmp	byte [mp3_num_channels], 1
  6783 00003EAF 7509                    		jne	short .chk_16khz_2
  6784 00003EB1 BB[50420000]            		mov	ebx, load_16khz_mono_16_bit
  6785                                  		;jmp	short .chk_16khz_2
  6786                                  		; 30/01/2025
  6787 00003EB6 EB00                    		jmp	short .chk_16khz_3
  6788                                  .chk_16khz_1:
  6789                                  		; 17/02/2025
  6790                                  		;	[mp3_bytes_per_sample] = 2
  6791                                  		;; 30/01/2025
  6792                                  		;shl	eax, 1
  6793                                  		;mov	ebx, load_16khz_stereo_8_bit
  6794                                  		;; 16/02/2025
  6795                                  		;cmp	byte [mp3_num_channels], 1
  6796                                  		;jne	short .chk_16khz_2
  6797                                  		;mov	ebx, load_16khz_mono_8_bit
  6798                                  .chk_16khz_3:
  6799                                  		; 30/01/2025
  6800 00003EB8 D1E0                    		shl	eax, 1
  6801                                  .chk_16khz_2:
  6802                                  		; 48000/16000 = 3/1
  6803                                  		;mov	eax, ecx ; *
  6804                                  		;shl	eax, 1
  6805                                  		;;add	eax, eax
  6806                                  		;add	eax, ecx
  6807 00003EBA E90DFFFFFF              		jmp	.set_sizes_@
  6808                                  .chk_11khz:
  6809 00003EBF 3D112B0000              		cmp	eax, 11025
  6810 00003EC4 752A                    		jne	short .chk_8khz
  6811                                  		; 30/01/2025
  6812 00003EC6 B84A000000              		mov	eax, 74
  6813                                  		; 17/02/2025
  6814                                  		;cmp	byte [mp3_bytes_per_sample], 1
  6815                                  		;jna	short .chk_11khz_1
  6816 00003ECB BB[E4450000]            		mov	ebx, load_11khz_stereo_16_bit
  6817                                  		; 16/02/2025
  6818 00003ED0 803D[C8BB0000]01        		cmp	byte [mp3_num_channels], 1
  6819 00003ED7 7509                    		jne	short .chk_11khz_2
  6820 00003ED9 BB[90450000]            		mov	ebx, load_11khz_mono_16_bit
  6821                                  		;jmp	short .chk_11khz_2
  6822                                  		; 30/01/2025
  6823 00003EDE EB00                    		jmp	short .chk_11khz_3
  6824                                  .chk_11khz_1:
  6825                                  		; 17/02/2025
  6826                                  		;	[mp3_bytes_per_sample] = 2
  6827                                  		;; 30/01/2025
  6828                                  		;shl	eax, 1
  6829                                  		;mov	ebx, load_11khz_stereo_8_bit
  6830                                  		;; 16/02/2025
  6831                                  		;cmp	byte [mp3_num_channels], 1
  6832                                  		;jne	short .chk_11khz_2
  6833                                  		;mov	ebx, load_11khz_mono_8_bit
  6834                                  .chk_11khz_3:
  6835                                  		; 30/01/2025
  6836 00003EE0 D1E0                    		shl	eax, 1
  6837                                  .chk_11khz_2:
  6838                                  		; 48000/11025 == 74/17
  6839                                  		; 14/01/2025
  6840                                  		;shr	ecx, 1	; 4 blocks
  6841                                  		;shr	byte [blocks], 1
  6842 00003EE2 BD11000000              		mov	ebp, 17
  6843                                  		;mov	eax, 74 ; *
  6844 00003EE7 F7E1                    		mul	ecx  ; load (decoding buffer) size
  6845 00003EE9 F7F5                    		div	ebp
  6846                                  		;; eax = wav output buffer size
  6847                                  		; 15/01/2025
  6848                                  		; eax = 1 block output (converted) size
  6849 00003EEB E9DCFEFFFF              		jmp	.set_sizes_@
  6850                                  .chk_8khz:
  6851 00003EF0 3D401F0000              		cmp	eax, 8000
  6852                                  		;jne	short .vra_needed
  6853                                  		; 01/02/2025
  6854 00003EF5 7523                    		jne	short .chk_12khz
  6855                                  		; 30/01/2025
  6856 00003EF7 B806000000              		mov	eax, 6 ; *
  6857                                  		; 17/02/2025
  6858                                  		;cmp	byte [mp3_bytes_per_sample], 1
  6859                                  		;jna	short .chk_8khz_1
  6860 00003EFC BB[2A410000]            		mov	ebx, load_8khz_stereo_16_bit
  6861                                  		; 16/02/2025
  6862 00003F01 803D[C8BB0000]01        		cmp	byte [mp3_num_channels], 1
  6863 00003F08 7509                    		jne	short .chk_8khz_2
  6864 00003F0A BB[88400000]            		mov	ebx, load_8khz_mono_16_bit
  6865                                  		;jmp	short .chk_8khz_2
  6866                                  		; 30/01/2025
  6867 00003F0F EB00                    		jmp	short .chk_8khz_3
  6868                                  .chk_8khz_1:
  6869                                  		; 17/02/2025
  6870                                  		;	[mp3_bytes_per_sample] = 2
  6871                                  		;; 30/01/2025
  6872                                  		;shl	eax, 1
  6873                                  		;mov	ebx, load_8khz_stereo_8_bit
  6874                                  		;; 16/02/2025
  6875                                  		;cmp	byte [mp3_num_channels], 1
  6876                                  		;jne	short .chk_8khz_2
  6877                                  		;mov	ebx, load_8khz_mono_8_bit
  6878                                  .chk_8khz_3:
  6879                                  		; 30/01/2025
  6880 00003F11 D1E0                    		shl	eax, 1
  6881                                  .chk_8khz_2:
  6882                                  		;mov	eax, 6 ; *
  6883 00003F13 F7E1                    		mul	ecx
  6884 00003F15 E9B2FEFFFF              		jmp	.set_sizes_@
  6885                                  
  6886                                  		;;;;
  6887                                  		; 01/02/2025
  6888                                  .chk_12khz:
  6889 00003F1A 3DE02E0000              		cmp	eax, 12000
  6890 00003F1F 7521                    		jne	short .vra_needed
  6891 00003F21 89C8                    		mov	eax, ecx ; *
  6892                                  		; 17/02/2025
  6893                                  		;cmp	byte [mp3_bytes_per_sample], 1
  6894                                  		;jna	short .chk_12khz_1
  6895 00003F23 BB[3E470000]            		mov	ebx, load_12khz_stereo_16_bit
  6896                                  		; 16/02/2025
  6897 00003F28 803D[C8BB0000]01        		cmp	byte [mp3_num_channels], 1
  6898 00003F2F 7509                    		jne	short .chk_12khz_2
  6899 00003F31 BB[14470000]            		mov	ebx, load_12khz_mono_16_bit
  6900 00003F36 EB00                    		jmp	short .chk_12khz_3
  6901                                  .chk_12khz_1:
  6902                                  		; 17/02/2025
  6903                                  		;	[mp3_bytes_per_sample] = 2
  6904                                  		;; 01/02/2025
  6905                                  		;shl	eax, 1
  6906                                  		;mov	ebx, load_12khz_stereo_8_bit
  6907                                  		;; 16/02/2025
  6908                                  		;cmp	byte [mp3_num_channels], 1
  6909                                  		;jne	short .chk_12khz_2
  6910                                  		;mov	ebx, load_12khz_mono_8_bit
  6911                                  .chk_12khz_3:
  6912 00003F38 D1E0                    		shl	eax, 1
  6913                                  .chk_12khz_2:
  6914                                  		; 48000/12000 = 4/1
  6915                                  		;mov	eax, ecx ; *
  6916 00003F3A C1E002                  		shl	eax, 2
  6917 00003F3D E98AFEFFFF              		jmp	.set_sizes_@
  6918                                  		;;;;
  6919                                  
  6920                                  .vra_needed:
  6921 00003F42 58                      		pop	eax ; discard return address to the caller
  6922                                  .vra_err:
  6923                                  		; 27/01/2025
  6924 00003F43 E8490F0000              		call	set_text_mode
  6925                                  		;
  6926                                  		sys	_msg, msg_no_vra, 255, 0Fh
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003F48 BB[AD4C0000]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00003F4D B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00003F52 BA0F000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003F57 B823000000          <1>  mov eax, %1
   112                              <1> 
   113 00003F5C CD40                <1>  int 40h
  6927                                  		;jmp	ExitProcess
  6928                                  		; 27/01/2025
  6929 00003F5E E927FBFFFF              		jmp	ExitProcess@
  6930                                  
  6931                                  .asix_@:
  6932                                  		; TRDOS 386 system call
  6933                                  		; sysaudio
  6934                                  		; Allocate audio buffer (for user)
  6935                                  		; ebx = 0200h (BH=2)
  6936                                  		; ecx = buffer size (in bytes)
  6937                                  		; edx = buffer address (virtual)
  6938                                  
  6939                                  		sys	_audio, 0200h, [buffer_size], sample_buffer
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003F63 BB00020000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00003F68 8B0D[88AB0000]      <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00003F6E BA[00800500]        <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003F73 B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003F78 CD40                <1>  int 40h
  6940 00003F7A 7231                    		jc	short .init_err
  6941                                  
  6942                                  		; 12/01/2025
  6943                                  		; clear audio buffer (before playback)
  6944 00003F7C BF[00800500]            		mov	edi, sample_buffer
  6945                                  		; ecx = buffer size in bytes
  6946 00003F81 83C103                  		add	ecx, 3	; 13/01/2025
  6947 00003F84 C1E902                  		shr	ecx, 2
  6948 00003F87 31C0                    		xor	eax, eax
  6949 00003F89 F3AB                    		rep	stosd
  6950                                  
  6951                                  		; TRDOS 386 system call
  6952                                  		; sysaudio
  6953                                  		; Initialize audio device (bh = 3)
  6954                                  		; bl = 01h -> CallBack method
  6955                                  		; edx = Callback service address (virtual)
  6956                                  		; ecx = 0 ; CL = srb value ; not used
  6957                                  		sys	_audio, 0301h, 0, audio_callback_x ; 13/01/2025
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00003F8B BB01030000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00003F90 B900000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00003F95 BA[3A400000]        <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00003F9A B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00003F9F CD40                <1>  int 40h
  6958                                  		; 12/01/2025
  6959                                  		; SRB method (faster than callback method)
  6960                                  		; bl = 0 -> Signal Response Byte method
  6961                                  		; cl = 1 -> SRB set value 
  6962                                  		;     (will be set by audio IRQ service of the kernel)
  6963                                  		; edx = SRB address -one byte data-
  6964                                  		;sys	_audio, 0300h, 1, srb	
  6965 00003FA1 720A                    		jc	short .init_err
  6966                                  
  6967                                  ; 27/01/2025
  6968                                  ;		; 26/01/2025
  6969                                  ;		; Map system DMA buffer to user's memory space
  6970                                  ;		; (for -fast- sound data graphics display)
  6971                                  ;		mov	eax, [buffer_size]
  6972                                  ;		shl	eax, 1 ; dma buff size is 2 * user's buff size
  6973                                  ;		sys	_audio, 0D00h, eax, dmabuffer
  6974                                  
  6975                                  		; 24/01/2025
  6976                                  		;retn
  6977 00003FA3 A0[C4AA0000]            		mov	al, [volume_level]
  6978                                  		;call	SetMasterVolume@
  6979                                  		;retn
  6980 00003FA8 E9D2FCFFFF              		jmp	SetMasterVolume@
  6981                                  
  6982                                  .init_err:
  6983 00003FAD E91FFCFFFF              		jmp	init_error
  6984                                  
  6985                                  
  6986                                  ; =============== S U B R O U T I N E =======================================
  6987                                  
  6988                                  		; 15/02/2025
  6989                                  		; 14/01/2025
  6990                                  		; 13/01/2025
  6991                                  mp3_cast_to_speaker_x:
  6992                                  		; 48 kHZ, 16bit, stereo
  6993 00003FB2 BB03040000              		mov	ebx, 0403h
  6994 00003FB7 B980BB0000              		mov	ecx, 48000
  6995                                  		; 14/01/2025
  6996 00003FBC 803D[85AB0000]01        		cmp	byte [vra], 1
  6997 00003FC3 7206                    		jb	short .jmpto@
  6998                                  		; 15/02/2025
  6999 00003FC5 8B0D[BCBB0000]          		mov	ecx, [mp3_sample_rate] 
  7000                                  .jmpto@:
  7001 00003FCB E9D6FCFFFF              		jmp	mp3_cast_to_speaker_@
  7002                                  
  7003                                  
  7004                                  ; =============== S U B R O U T I N E =======================================
  7005                                  	
  7006                                  		; 18/02/2025
  7007                                  		; 17/02/2025	
  7008                                  		; 23/01/2025
  7009                                  		; 15/01/2025
  7010                                  		; 13/01/2025
  7011                                  try_enqueue_all_blocks_x:
  7012                                  		; 12/01/2025
  7013 00003FD0 60                      		pusha
  7014 00003FD1 BF[00600500]             		mov	edi, decoding_buffer
  7015                                  		; 15/01/2025
  7016                                  		;jmp	try_enqueue_all_blocks_@
  7017 00003FD6 EB15                    		jmp	short .first_block
  7018                                  
  7019                                  		; 15/01/2025
  7020                                  .next_block:
  7021 00003FD8 833D[F04A0500]00                        cmp	dword [bytes_left], 0
  7022 00003FDF 7E4D                                    jle	short .enqueue_done
  7023                                  		;
  7024 00003FE1 8B3D[7C120100]          		mov	edi, [mp3_samples_dst]
  7025 00003FE7 033D[80120100]          		add	edi, [mp3_samples_output_size]
  7026                                  
  7027                                  ;try_enqueue_all_blocks_@:
  7028                                  .first_block:
  7029                                  		;;pusha
  7030 00003FED 8B35[EC4A0500]          		mov	esi, [stream_pos]
  7031 00003FF3 8B0D[F04A0500]          		mov	ecx, [bytes_left]
  7032 00003FF9 31ED                    		xor	ebp, ebp
  7033 00003FFB E869F7FFFF              		call	mp3_decode_frame
  7034                                  		;;popa
  7035                                  		; 23/01/2025 (ignore error) -forward/backward-
  7036                                  		;jc	short .enqueue_done
  7037                                  
  7038 00004000 A1[A4BB0000]            		mov	eax, [mp3_src_frame_size]
  7039 00004005 83F800                  		cmp	eax, 0
  7040 00004008 7424                    		jz	short .enqueue_done
  7041 0000400A 0105[EC4A0500]          		add	[stream_pos], eax
  7042 00004010 2905[F04A0500]          		sub	[bytes_left], eax
  7043                                  
  7044 00004016 A1[80120100]            		mov	eax, [mp3_samples_output_size]
  7045 0000401B 83F800                  		cmp	eax, 0
  7046 0000401E 74B8                    		jz	short .next_block
  7047                                  
  7048                                  		; 18/02/2025
  7049                                  		; 15/01/2025
  7050 00004020 FF15[90AB0000]          		call	dword [conversion]
  7051                                  		; 17/02/2025 (only one option = 16bit mono)
  7052                                  		;call	convert_to_stereo
  7053                                  		
  7054                                  .no_error:
  7055                                  		; 15/01/2025
  7056 00004026 FE05[35A20000]          		inc	byte [num_enqueued_frames]
  7057                                  .rtn:
  7058                                  		; 12/01/2025
  7059 0000402C 61                      		popa
  7060 0000402D C3                      		retn
  7061                                  .enqueue_done:
  7062 0000402E C705[F04A0500]0000-                     mov	dword [bytes_left], 0
  7062 00004036 0000               
  7063                                  		; 12/01/2025
  7064 00004038 EBF2                    		jmp	short .rtn
  7065                                  
  7066                                  
  7067                                  ; =============== S U B R O U T I N E =======================================
  7068                                  
  7069                                  		; 13/01/2025
  7070                                  audio_callback_x:
  7071                                  		; Operating system has directed CPU here because of
  7072                                  		; user (2nd) stage of the audio hardware interrupt service.
  7073                                  		; This procedure must be short and return to operating
  7074                                  		; system again via sysrelease system call
  7075                                  		; (or any system call here will be handled as sysrelease).
  7076                                  
  7077 0000403A C605[86AB0000]01        		mov	byte [srb], 1
  7078                                  
  7079 00004041 E88AFFFFFF              		call	try_enqueue_all_blocks_x
  7080                                  
  7081                                  		; 15/01/2025
  7082                                  		;call	dword [conversion]
  7083                                  
  7084                                  		sys	_rele ; return from callback service 
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103                              <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00004046 B827000000          <1>  mov eax, %1
   112                              <1> 
   113 0000404B CD40                <1>  int 40h
  7085                                  		
  7086                                  		; we must not come here !
  7087 0000404D BBFFFFFFFF              		mov	ebx, -1
  7088                                  		sys	_exit
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103                              <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00004052 B801000000          <1>  mov eax, %1
   112                              <1> 
   113 00004057 CD40                <1>  int 40h
  7089                                  		;jmp	short audio_callback
  7090                                  
  7091                                  
  7092                                  ; ---------------------------------------------------------------------------
  7093                                  ; 13/01/2025 - Interpolation procedures for non-VRA AC97 codecs
  7094                                  ; ---------------------------------------------------------------------------
  7095                                  ; ref: playwav9.s - 18/12/2025
  7096                                  
  7097                                  ; =============== S U B R O U T I N E =======================================
  7098                                  
  7099                                  ; 13/01/2025
  7100                                  ; --------------------------------------------------------
  7101                                  ; 48 kHZ conversion procedures
  7102                                  ; --------------------------------------------------------
  7103                                  ; convert_to_stereo: convert 16bit mono samples to 16bit stereo
  7104                                  ; convert_to_16bit: convert 8bit stereo samples to 16bit stereo	
  7105                                  ; convert_to_stereo_16bit: convert 8bit mono samples to 16bit & stereo
  7106                                  ; [loadsize] = decoding buffer size
  7107                                  ; [buffer_size] = wav output buffer size (<= 64KB)
  7108                                  
  7109                                  ; /////
  7110                                  
  7111                                  	; 13/01/2025
  7112                                  convert_to_stereo:
  7113 00004059 BE[00600500]            	mov	esi, decoding_buffer ; (contains 16bit mono samples)
  7114 0000405E BF[00800500]            	mov	edi, sample_buffer ; wav output buffer
  7115 00004063 8B0D[94AB0000]          	mov	ecx, [loadsize]
  7116 00004069 D1E9                    	shr	ecx, 1 ; word count
  7117                                  cts_1:
  7118 0000406B 66AD                    	lodsw
  7119 0000406D 66AB                    	stosw	; left channel
  7120 0000406F 66AB                    	stosw	; right channel
  7121 00004071 E2F8                    	loop	cts_1
  7122                                  cts_2:
  7123                                  	; padfill
  7124 00004073 8B0D[88AB0000]          	mov	ecx, [buffer_size] 
  7125 00004079 81C1[00800500]          	add	ecx, sample_buffer
  7126 0000407F 29F9                    	sub	ecx, edi
  7127 00004081 7604                    	jna	short cts_3
  7128 00004083 31C0                    	xor	eax, eax
  7129 00004085 F3AA                    	rep	stosb
  7130                                  cts_3:
  7131 00004087 C3                      	retn
  7132                                  
  7133                                  ; /////
  7134                                  
  7135                                  ; 17/02/2025
  7136                                  %if 0
  7137                                  
  7138                                  	; 13/01/2025
  7139                                  convert_to_16bit:
  7140                                  	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
  7141                                  	mov	edi, sample_buffer ; wav output buffer
  7142                                  	mov	ecx, [loadsize]
  7143                                  ct16b_1:
  7144                                  	; stereo & 8 bit
  7145                                  	lodsb
  7146                                  	sub	al, 80h ; 08/11/2023
  7147                                  	shl	eax, 8 ; convert 8 bit sample to 16 bit sample
  7148                                  	stosw
  7149                                  	loop	ct16b_1
  7150                                  	jmp	short cts_2
  7151                                  
  7152                                  ; /////
  7153                                  
  7154                                  	; 13/01/2025
  7155                                  convert_to_stereo_16bit:
  7156                                  	mov	esi, decoding_buffer ; (contains 8bit mono samples)
  7157                                  	mov	edi, sample_buffer ; wav output buffer
  7158                                  	mov	ecx, [loadsize]
  7159                                  cts16b_1:
  7160                                  	; mono & 8 bit
  7161                                  	lodsb
  7162                                  	sub	al, 80h ; 08/11/2023
  7163                                  	shl	eax, 8 ; convert 8 bit sample to 16 bit sample
  7164                                  	stosw	; left channel
  7165                                  	stosw	; right channel
  7166                                  	loop	cts16b_1
  7167                                  	jmp	short cts_2
  7168                                  
  7169                                  ; /////
  7170                                  
  7171                                  %endif
  7172                                  
  7173                                  ; =============== S U B R O U T I N E =======================================
  7174                                  
  7175                                  ; --------------------------------------------------------
  7176                                  ; 13/01/2025
  7177                                  ; --------------------------------------------------------
  7178                                  
  7179                                  ; 17/02/2025 - tmp3play.s
  7180                                  ;	16bit stereo or 16bit mono playback	
  7181                                  ; 13/01/2025 - mp3player modifications (mp3play3.s)
  7182                                  ; 07/12/2024 - playwav9.s
  7183                                  ; 01/12/2024 - ac97play.s
  7184                                  ; 29/05/2024
  7185                                  ; 26/11/2023
  7186                                  ; 25/11/2023 - playwav6.s (32 bit registers, TRDOS 386 adaption)
  7187                                  ; 15/11/2023 - PLAYWAV5.COM, ich_wav5.asm
  7188                                  ; 14/11/2023
  7189                                  ; 13/11/2023 - Erdogan Tan - (VRA, sample rate conversion)
  7190                                  ; --------------------------------------------------------
  7191                                  
  7192                                  ;;Note:	At the end of every buffer load,
  7193                                  ;;	during buffer switch/swap, there will be discontinuity
  7194                                  ;;	between the last converted sample and the 1st sample
  7195                                  ;;	of the next buffer.
  7196                                  ;;	(like as a dot noises vaguely between normal sound samples)
  7197                                  ;;	-To avoid this defect, the 1st sample of
  7198                                  ;;	the next buffer may be read from the wav file but
  7199                                  ;;	the file pointer would need to be set to 1 sample back
  7200                                  ;;	again via seek system call. Time comsumption problem! -
  7201                                  ;;
  7202                                  ;;	Erdogan Tan - 15/11/2023
  7203                                  ;;
  7204                                  ;;	((If entire wav data would be loaded at once.. conversion
  7205                                  ;;	defect/noise would disappear.. but for DOS, to keep
  7206                                  ;;	64KB buffer limit is important also it is important
  7207                                  ;;	for running under 1MB barrier without HIMEM.SYS or DPMI.
  7208                                  ;;	I have tested this program by using 2-30MB wav files.))
  7209                                  ;;
  7210                                  ;;	Test Computer:	ASUS desktop/mainboard, M2N4-SLI, 2010.
  7211                                  ;;			AMD Athlon 64 X2 2200 MHZ CPU.
  7212                                  ;;		       	NFORCE4 (CK804) AC97 audio hardware.
  7213                                  ;;			Realtek ALC850 codec.
  7214                                  ;;		       	Retro DOS v4.2 (MSDOS 6.22) operating system.
  7215                                  
  7216                                  ; =============== S U B R O U T I N E =======================================
  7217                                  
  7218                                  load_8khz_mono_16_bit:
  7219                                  	; 13/01/2025 (mp3play3.s)
  7220 00004088 BE[00600500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
  7221 0000408D BF[00800500]            	mov	edi, sample_buffer ; wav output buffer
  7222 00004092 8B0D[94AB0000]          	mov	ecx, [loadsize]
  7223                                  	; 13/01/2025
  7224 00004098 D1E9                    	shr	ecx, 1	; word count
  7225                                  lff8m2_1:
  7226 0000409A 66AD                    	lodsw
  7227 0000409C 66AB                    	stosw		; original sample (left channel)
  7228 0000409E 66AB                    	stosw		; original sample (right channel)
  7229 000040A0 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  7230 000040A3 66A3[324A0000]          	mov	[previous_val], ax
  7231 000040A9 31C0                    	xor	eax, eax
  7232 000040AB 49                      	dec	ecx
  7233 000040AC 7403                    	jz	short lff8m2_2
  7234 000040AE 668B06                  	mov	ax, [esi]
  7235                                  lff8m2_2:
  7236 000040B1 80C480                  	add	ah, 80h ; convert sound level to 0-65535 format
  7237 000040B4 89C5                    	mov	ebp, eax	; [next_val]
  7238 000040B6 660305[324A0000]        	add	ax, [previous_val]
  7239 000040BD 66D1D8                  	rcr	ax, 1
  7240 000040C0 89C2                    	mov	edx, eax ; this is interpolated middle (3th) sample
  7241 000040C2 660305[324A0000]        	add	ax, [previous_val]
  7242 000040C9 66D1D8                  	rcr	ax, 1	; this is temporary interpolation value
  7243 000040CC 89C3                    	mov	ebx, eax 		
  7244 000040CE 660305[324A0000]        	add	ax, [previous_val]
  7245 000040D5 66D1D8                  	rcr	ax, 1
  7246 000040D8 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  7247 000040DB 66AB                    	stosw		; this is 1st interpolated sample (L)
  7248 000040DD 66AB                    	stosw		; this is 1st interpolated sample (R)
  7249 000040DF 89D8                    	mov	eax, ebx
  7250 000040E1 6601D0                  	add	ax, dx
  7251 000040E4 66D1D8                  	rcr	ax, 1
  7252 000040E7 80EC80                  	sub	ah, 80h
  7253 000040EA 66AB                    	stosw		; this is 2nd interpolated sample (L)
  7254 000040EC 66AB                    	stosw		; this is 2nd interpolated sample (R)
  7255 000040EE 89D0                    	mov	eax, edx
  7256 000040F0 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  7257 000040F3 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  7258 000040F5 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  7259 000040F7 89E8                    	mov	eax, ebp
  7260 000040F9 6601D0                  	add	ax, dx
  7261 000040FC 66D1D8                  	rcr	ax, 1
  7262 000040FF 89C3                    	mov	ebx, eax ; this is temporary interpolation value
  7263 00004101 6601D0                  	add	ax, dx
  7264 00004104 66D1D8                  	rcr	ax, 1
  7265 00004107 80EC80                  	sub	ah, 80h
  7266 0000410A 66AB                    	stosw		; this is 4th interpolated sample (L)
  7267 0000410C 66AB                    	stosw		; this is 4th interpolated sample (R)
  7268 0000410E 89E8                    	mov	eax, ebp
  7269 00004110 6601D8                  	add	ax, bx
  7270 00004113 66D1D8                  	rcr	ax, 1
  7271 00004116 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  7272 00004119 66AB                    	stosw		; this is 5th interpolated sample (L)
  7273 0000411B 66AB                    	stosw		; this is 5th interpolated sample (R)
  7274                                  	; 8 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  7275 0000411D 09C9                    	or	ecx, ecx
  7276 0000411F 0F8575FFFFFF            	jnz	lff8m2_1
  7277                                  	;jmp	lff8m2_3
  7278                                  	; 17/02/2025
  7279 00004125 E9D0050000              	jmp	lff8_3
  7280                                  
  7281                                  ; =============== S U B R O U T I N E =======================================
  7282                                  
  7283                                  load_8khz_stereo_16_bit:
  7284                                  	; 13/01/2025 (mp3play3.s)
  7285 0000412A BE[00600500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
  7286 0000412F BF[00800500]            	mov	edi, sample_buffer ; wav output buffer
  7287 00004134 8B0D[94AB0000]          	mov	ecx, [loadsize]
  7288                                  	; 13/01/2025
  7289 0000413A C1E902                  	shr	ecx, 2	; dword count
  7290                                  lff8s2_1:
  7291 0000413D 66AD                    	lodsw
  7292 0000413F 66AB                    	stosw		; original sample (L)
  7293                                  	; 15/11/2023
  7294 00004141 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  7295 00004144 66A3[324A0000]          	mov	[previous_val_l], ax
  7296 0000414A 66AD                    	lodsw
  7297 0000414C 66AB                    	stosw		; original sample (R)
  7298 0000414E 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  7299 00004151 66A3[344A0000]          	mov	[previous_val_r], ax
  7300 00004157 31D2                    	xor	edx, edx
  7301 00004159 31C0                    	xor	eax, eax
  7302                                  	; 16/11/2023
  7303 0000415B 49                      	dec	ecx
  7304 0000415C 7407                    	jz	short lff8s2_2
  7305 0000415E 668B06                  	mov	ax, [esi]
  7306 00004161 668B5602                	mov	dx, [esi+2]
  7307                                  lff8s2_2:
  7308 00004165 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  7309 00004168 66A3[364A0000]          	mov	[next_val_l], ax
  7310 0000416E 80C680                  	add	dh, 80h	; convert sound level to 0-65535 format
  7311 00004171 668915[384A0000]        	mov	[next_val_r], dx
  7312 00004178 660305[324A0000]        	add	ax, [previous_val_l]
  7313 0000417F 66D1D8                  	rcr	ax, 1
  7314 00004182 89C2                    	mov	edx, eax ; this is interpolated middle (3th) sample (L)
  7315 00004184 660305[324A0000]        	add	ax, [previous_val_l]
  7316 0000418B 66D1D8                  	rcr	ax, 1	
  7317 0000418E 89C3                    	mov	ebx, eax ; this is temporary interpolation value (L)
  7318 00004190 660305[324A0000]        	add	ax, [previous_val_l]
  7319 00004197 66D1D8                  	rcr	ax, 1
  7320 0000419A 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  7321 0000419D 66AB                    	stosw		; this is 1st interpolated sample (L)
  7322 0000419F 66A1[384A0000]          	mov	ax, [next_val_r]
  7323 000041A5 660305[344A0000]        	add	ax, [previous_val_r]
  7324 000041AC 66D1D8                  	rcr	ax, 1
  7325 000041AF 89C5                    	mov	ebp, eax ; this is interpolated middle (3th) sample (R)
  7326 000041B1 660305[344A0000]        	add	ax, [previous_val_r]
  7327 000041B8 66D1D8                  	rcr	ax, 1
  7328 000041BB 50                      	push	eax ; *	; this is temporary interpolation value (R)
  7329 000041BC 660305[344A0000]        	add	ax, [previous_val_r]
  7330 000041C3 66D1D8                  	rcr	ax, 1
  7331 000041C6 80EC80                  	sub	ah, 80h
  7332 000041C9 66AB                    	stosw		; this is 1st interpolated sample (R)
  7333 000041CB 89D8                    	mov	eax, ebx
  7334 000041CD 6601D0                  	add	ax, dx
  7335 000041D0 66D1D8                  	rcr	ax, 1
  7336 000041D3 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  7337 000041D6 66AB                    	stosw		; this is 2nd interpolated sample (L)
  7338 000041D8 58                      	pop	eax ; *
  7339 000041D9 6601E8                  	add	ax, bp
  7340 000041DC 66D1D8                  	rcr	ax, 1
  7341 000041DF 80EC80                  	sub	ah, 80h
  7342 000041E2 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  7343 000041E4 89D0                    	mov	eax, edx
  7344 000041E6 80EC80                  	sub	ah, 80h
  7345 000041E9 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  7346 000041EB 89E8                    	mov	eax, ebp
  7347 000041ED 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  7348 000041F0 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  7349 000041F2 66A1[364A0000]          	mov	ax, [next_val_l]
  7350 000041F8 6601D0                  	add	ax, dx
  7351 000041FB 66D1D8                  	rcr	ax, 1
  7352 000041FE 89C3                    	mov	ebx, eax ; this is temporary interpolation value (L)
  7353 00004200 6601D0                  	add	ax, dx
  7354 00004203 66D1D8                  	rcr	ax, 1
  7355 00004206 80EC80                  	sub	ah, 80h
  7356 00004209 66AB                    	stosw		; this is 4th interpolated sample (L)
  7357 0000420B 66A1[384A0000]          	mov	ax, [next_val_r]
  7358 00004211 6601E8                  	add	ax, bp
  7359 00004214 66D1D8                  	rcr	ax, 1
  7360 00004217 50                      	push	eax ; ** ; this is temporary interpolation value (R)
  7361 00004218 6601E8                  	add	ax, bp
  7362 0000421B 66D1D8                  	rcr	ax, 1
  7363 0000421E 80EC80                  	sub	ah, 80h
  7364 00004221 66AB                    	stosw		; this is 4th interpolated sample (R)
  7365 00004223 66A1[364A0000]          	mov	ax, [next_val_l]
  7366 00004229 6601D8                  	add	ax, bx
  7367 0000422C 66D1D8                  	rcr	ax, 1
  7368 0000422F 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  7369 00004232 66AB                    	stosw		; this is 5th interpolated sample (L)
  7370 00004234 58                      	pop	eax ; **
  7371 00004235 660305[384A0000]        	add	ax, [next_val_r]
  7372 0000423C 66D1D8                  	rcr	ax, 1
  7373 0000423F 80EC80                  	sub	ah, 80h
  7374 00004242 66AB                    	stosw		; this is 5th interpolated sample (R)
  7375                                  	; 8 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  7376 00004244 E305                    	jecxz	lff8_s2_9
  7377 00004246 E9F2FEFFFF              	jmp	lff8s2_1
  7378                                  lff8_s2_9:
  7379                                  	;jmp	lff8s2_3
  7380                                  	; 17/02/2025
  7381 0000424B E9AA040000              	jmp	lff8_3
  7382                                  
  7383                                  ; =============== S U B R O U T I N E =======================================
  7384                                  
  7385                                  load_16khz_mono_16_bit:
  7386                                  	; 13/01/2025 (mp3play3.s)
  7387 00004250 BE[00600500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
  7388 00004255 BF[00800500]            	mov	edi, sample_buffer ; wav output buffer
  7389 0000425A 8B0D[94AB0000]          	mov	ecx, [loadsize]
  7390                                  	; 13/01/2025
  7391 00004260 D1E9                    	shr	ecx, 1	; word count
  7392                                  lff16m2_1:
  7393 00004262 66AD                    	lodsw
  7394 00004264 66AB                    	stosw		; original sample (left channel)
  7395 00004266 66AB                    	stosw		; original sample (right channel)
  7396 00004268 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  7397                                  	;mov	[previous_val], ax
  7398 0000426B 89C3                    	mov	ebx, eax
  7399 0000426D 31C0                    	xor	eax, eax
  7400 0000426F 49                      	dec	ecx
  7401 00004270 7403                    	jz	short lff16m2_2
  7402 00004272 668B06                  	mov	ax, [esi]
  7403                                  lff16m2_2:
  7404 00004275 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  7405 00004278 89C5                    	mov	ebp, eax	; [next_val]
  7406                                  	;add	ax, [previous_val]
  7407 0000427A 6601D8                  	add	ax, bx
  7408 0000427D 66D1D8                  	rcr	ax, 1
  7409 00004280 89C2                    	mov	edx, eax ; this is temporary interpolation value
  7410                                  	;add	ax, [previous_val]
  7411 00004282 6601D8                  	add	ax, bx
  7412 00004285 66D1D8                  	rcr	ax, 1
  7413 00004288 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  7414 0000428B 66AB                    	stosw		; this is 1st interpolated sample (L)
  7415 0000428D 66AB                    	stosw		; this is 1st interpolated sample (R)
  7416 0000428F 89E8                    	mov	eax, ebp
  7417 00004291 6601D0                  	add	ax, dx
  7418 00004294 66D1D8                  	rcr	ax, 1
  7419 00004297 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  7420 0000429A 66AB                    	stosw		; this is 2nd interpolated sample (L)
  7421 0000429C 66AB                    	stosw		; this is 2nd interpolated sample (R)
  7422                                  	; 16 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  7423 0000429E 09C9                    	or	ecx, ecx
  7424 000042A0 75C0                    	jnz	short lff16m2_1
  7425                                  	;jmp	lff16m2_3
  7426                                  	; 17/02/2025
  7427 000042A2 E953040000              	jmp	lff16_3
  7428                                  
  7429                                  ; =============== S U B R O U T I N E =======================================
  7430                                  
  7431                                  load_16khz_stereo_16_bit:
  7432                                  	; 13/01/2025 (mp3play3.s)
  7433 000042A7 BE[00600500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
  7434 000042AC BF[00800500]            	mov	edi, sample_buffer ; wav output buffer
  7435 000042B1 8B0D[94AB0000]          	mov	ecx, [loadsize]
  7436                                  	; 13/01/2025
  7437 000042B7 C1E902                  	shr	ecx, 2	; dword count
  7438                                  lff16s2_1:
  7439 000042BA 66AD                    	lodsw
  7440 000042BC 66AB                    	stosw		; original sample (L)
  7441 000042BE 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  7442 000042C1 66A3[324A0000]          	mov	[previous_val_l], ax
  7443 000042C7 66AD                    	lodsw
  7444 000042C9 66AB                    	stosw		; original sample (R)
  7445 000042CB 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  7446 000042CE 66A3[344A0000]          	mov	[previous_val_r], ax
  7447 000042D4 31D2                    	xor	edx, edx
  7448 000042D6 31C0                    	xor	eax, eax
  7449                                  	; 16/11/2023
  7450 000042D8 49                      	dec	ecx
  7451 000042D9 7407                    	jz	short lff16s2_2
  7452 000042DB 668B06                  	mov	ax, [esi]
  7453 000042DE 668B5602                	mov	dx, [esi+2]
  7454                                  lff16s2_2:
  7455 000042E2 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  7456                                  	;mov	[next_val_l], ax
  7457 000042E5 89C5                    	mov	ebp, eax
  7458 000042E7 80C680                  	add	dh, 80h	; convert sound level 0 to 65535 format
  7459 000042EA 668915[384A0000]        	mov	[next_val_r], dx
  7460 000042F1 660305[324A0000]        	add	ax, [previous_val_l]
  7461 000042F8 66D1D8                  	rcr	ax, 1
  7462 000042FB 89C2                    	mov	edx, eax ; this is temporary interpolation value (L)
  7463 000042FD 660305[324A0000]        	add	ax, [previous_val_l]
  7464 00004304 66D1D8                  	rcr	ax, 1
  7465 00004307 80EC80                  	sub	ah, 80h ; -32768 to +32767 format again
  7466 0000430A 66AB                    	stosw		; this is 1st interpolated sample (L)
  7467 0000430C 66A1[384A0000]          	mov	ax, [next_val_r]
  7468 00004312 660305[344A0000]        	add	ax, [previous_val_r]
  7469 00004319 66D1D8                  	rcr	ax, 1
  7470 0000431C 89C3                    	mov	ebx, eax ; this is temporary interpolation value (R)
  7471 0000431E 660305[344A0000]        	add	ax, [previous_val_r]
  7472 00004325 66D1D8                  	rcr	ax, 1
  7473 00004328 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  7474 0000432B 66AB                    	stosw		; this is 1st interpolated sample (R)
  7475                                  	;mov	ax, [next_val_l]
  7476 0000432D 89E8                    	mov	eax, ebp
  7477 0000432F 6601D0                  	add	ax, dx
  7478 00004332 66D1D8                  	rcr	ax, 1
  7479 00004335 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  7480 00004338 66AB                    	stosw		; this is 2nd interpolated sample (L)
  7481 0000433A 66A1[384A0000]          	mov	ax, [next_val_r]
  7482 00004340 6601D8                  	add	ax, bx
  7483 00004343 66D1D8                  	rcr	ax, 1
  7484 00004346 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  7485 00004349 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  7486                                  	
  7487                                  	; 16 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  7488 0000434B 09C9                    	or	ecx, ecx
  7489 0000434D 0F8567FFFFFF            	jnz	lff16s2_1
  7490                                  	;jmp	lff16s2_3
  7491                                  	; 17/02/2025
  7492 00004353 E9A2030000              	jmp	lff16_3
  7493                                  
  7494                                  ; =============== S U B R O U T I N E =======================================
  7495                                  
  7496                                  load_24khz_mono_16_bit:
  7497                                  	; 30/01/2025
  7498                                  	; 13/01/2025 (mp3play3.s)
  7499 00004358 BE[00600500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
  7500 0000435D BF[00800500]            	mov	edi, sample_buffer ; wav output buffer
  7501 00004362 8B0D[94AB0000]          	mov	ecx, [loadsize]
  7502                                  	; 13/01/2025
  7503 00004368 D1E9                    	shr	ecx, 1	; word count
  7504                                  lff24m2_1:
  7505 0000436A 66AD                    	lodsw
  7506 0000436C 66AB                    	stosw		; original sample (left channel)
  7507 0000436E 66AB                    	stosw		; original sample (right channel)
  7508 00004370 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  7509                                  	;mov	[previous_val], ax
  7510                                  	;mov	ebx, eax
  7511                                  	;xor	eax, eax
  7512 00004373 31DB                    	xor	ebx, ebx
  7513 00004375 49                      	dec	ecx
  7514 00004376 7403                    	jz	short lff24m2_2
  7515                                  	;mov	ax, [esi]
  7516 00004378 668B1E                  	mov	bx, [esi]
  7517                                  lff24m2_2:
  7518                                  	; 30/01/2025
  7519 0000437B 80C780                  	add	bh, 80h ; convert sound level 0 to 65535 format
  7520                                  	;add	ah, 80h
  7521                                  	;mov	ebp, eax	; [next_val]
  7522                                  	;add	ax, [previous_val]
  7523                                  	; ax = [previous_val]
  7524                                  	; bx = [next_val]
  7525 0000437E 6601D8                  	add	ax, bx
  7526 00004381 66D1D8                  	rcr	ax, 1
  7527 00004384 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  7528 00004387 66AB                    	stosw		; this is interpolated sample (L)
  7529 00004389 66AB                    	stosw		; this is interpolated sample (R)
  7530                                  	; 24 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  7531 0000438B 09C9                    	or	ecx, ecx
  7532 0000438D 75DB                    	jnz	short lff24m2_1
  7533 0000438F E966030000              	jmp	lff24_3
  7534                                  
  7535                                  ; =============== S U B R O U T I N E =======================================
  7536                                  
  7537                                  load_24khz_stereo_16_bit:
  7538                                  	; 13/01/2025 (mp3play3.s)
  7539 00004394 BE[00600500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
  7540 00004399 BF[00800500]            	mov	edi, sample_buffer ; wav output buffer
  7541 0000439E 8B0D[94AB0000]          	mov	ecx, [loadsize]
  7542                                  	; 13/01/2025
  7543 000043A4 C1E902                  	shr	ecx, 2	; dword count
  7544                                  lff24s2_1:
  7545 000043A7 66AD                    	lodsw
  7546 000043A9 66AB                    	stosw		; original sample (L)
  7547 000043AB 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  7548 000043AE 66A3[324A0000]          	mov	[previous_val_l], ax
  7549 000043B4 66AD                    	lodsw
  7550 000043B6 66AB                    	stosw		; original sample (R)
  7551 000043B8 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  7552                                  	;mov	[previous_val_r], ax
  7553 000043BB 89C3                    	mov	ebx, eax
  7554 000043BD 31D2                    	xor	edx, edx
  7555 000043BF 31C0                    	xor	eax, eax
  7556                                  	; 16/11/2023
  7557 000043C1 49                      	dec	ecx
  7558 000043C2 7407                    	jz	short lff24s2_2
  7559 000043C4 668B06                  	mov	ax, [esi]
  7560 000043C7 668B5602                	mov	dx, [esi+2]
  7561                                  lff24s2_2:
  7562 000043CB 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  7563                                  	;;mov	[next_val_l], ax
  7564                                  	;mov	ebp, eax
  7565 000043CE 80C680                  	add	dh, 80h	; convert sound level 0 to 65535 format
  7566                                  	;mov	[next_val_r], dx
  7567 000043D1 660305[324A0000]        	add	ax, [previous_val_l]
  7568 000043D8 66D1D8                  	rcr	ax, 1
  7569 000043DB 80EC80                  	sub	ah, 80h ; -32768 to +32767 format again
  7570 000043DE 66AB                    	stosw		; this is interpolated sample (L)
  7571                                  	;mov	ax, [next_val_r]
  7572 000043E0 89D0                    	mov	eax, edx
  7573                                  	;add	ax, [previous_val_r]
  7574 000043E2 6601D8                  	add	ax, bx
  7575 000043E5 66D1D8                  	rcr	ax, 1
  7576 000043E8 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  7577 000043EB 66AB                    	stosw		; this is interpolated sample (R)
  7578                                  	
  7579                                  	; 24 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  7580 000043ED 09C9                    	or	ecx, ecx
  7581 000043EF 75B6                    	jnz	short lff24s2_1
  7582 000043F1 E904030000              	jmp	lff24_3
  7583                                  
  7584                                  ; =============== S U B R O U T I N E =======================================
  7585                                  
  7586                                  load_32khz_mono_16_bit:
  7587                                  	; 13/01/2025 (mp3play3.s)
  7588 000043F6 BE[00600500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
  7589 000043FB BF[00800500]            	mov	edi, sample_buffer ; wav output buffer
  7590 00004400 8B0D[94AB0000]          	mov	ecx, [loadsize]
  7591                                  	; 13/01/2025
  7592 00004406 D1E9                    	shr	ecx, 1	; word count
  7593                                  lff32m2_1:
  7594 00004408 66AD                    	lodsw
  7595 0000440A 66AB                    	stosw		; original sample (left channel)
  7596 0000440C 66AB                    	stosw		; original sample (right channel)
  7597 0000440E 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  7598                                  	;mov	[previous_val], ax
  7599                                  	;mov	ebx, eax
  7600                                  	;xor	eax, eax
  7601 00004411 31DB                    	xor	ebx, ebx
  7602 00004413 49                      	dec	ecx
  7603 00004414 7403                    	jz	short lff32m2_2
  7604                                  	;mov	ax, [esi]
  7605 00004416 668B1E                  	mov	bx, [esi]
  7606                                  lff32m2_2:
  7607                                  	;add	ah, 80h ; convert sound level 0 to 65535 format
  7608                                  	;mov	ebp, eax	; [next_val]
  7609                                  	;add	ax, [previous_val]
  7610                                  	; ax = [previous_val]
  7611                                  	; bx = [next_val]
  7612 00004419 6601D8                  	add	ax, bx
  7613 0000441C 66D1D8                  	rcr	ax, 1
  7614 0000441F 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  7615 00004422 66AB                    	stosw		; this is interpolated sample (L)
  7616 00004424 66AB                    	stosw		; this is interpolated sample (R)
  7617                                  
  7618                                  	; different than 8-16-24 kHZ !
  7619                                  	; 'original-interpolated-original' trio samples 
  7620 00004426 E309                    	jecxz	lff32m2_3
  7621                                  
  7622 00004428 66AD                    	lodsw
  7623 0000442A 66AB                    	stosw		; original sample (left channel)
  7624 0000442C 66AB                    	stosw		; original sample (right channel)
  7625                                  
  7626                                  	; 32 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  7627 0000442E 49                      	dec	ecx
  7628 0000442F 75D7                    	jnz	short lff32m2_1
  7629                                  lff32m2_3:
  7630 00004431 E9C4020000              	jmp	lff32_3
  7631                                  
  7632                                  ; =============== S U B R O U T I N E =======================================
  7633                                  
  7634                                  load_32khz_stereo_16_bit:
  7635                                  	; 13/01/2025 (mp3play3.s)
  7636 00004436 BE[00600500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
  7637 0000443B BF[00800500]            	mov	edi, sample_buffer ; wav output buffer
  7638 00004440 8B0D[94AB0000]          	mov	ecx, [loadsize]
  7639                                  	; 13/01/2025
  7640 00004446 C1E902                  	shr	ecx, 2	; dword count
  7641                                  lff32s2_1:
  7642 00004449 66AD                    	lodsw
  7643 0000444B 66AB                    	stosw		; original sample (L)
  7644 0000444D 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format 
  7645 00004450 66A3[324A0000]          	mov	[previous_val_l], ax
  7646 00004456 66AD                    	lodsw
  7647 00004458 66AB                    	stosw		; original sample (R)
  7648 0000445A 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format 
  7649                                  	;mov	[previous_val_r], ax
  7650 0000445D 89C3                    	mov	ebx, eax
  7651 0000445F 31D2                    	xor	edx, edx
  7652 00004461 31C0                    	xor	eax, eax
  7653                                  	; 16/11/2023
  7654 00004463 49                      	dec	ecx
  7655 00004464 7407                    	jz	short lff32s2_2
  7656 00004466 668B06                  	mov	ax, [esi]
  7657 00004469 668B5602                	mov	dx, [esi+2]
  7658                                  lff32s2_2:
  7659 0000446D 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format
  7660                                  	;;mov	[next_val_l], ax
  7661                                  	;mov	ebp, eax
  7662 00004470 80C680                  	add	dh, 80h	; convert sound level 0 to 65535 format
  7663                                  	;mov	[next_val_r], dx
  7664 00004473 660305[324A0000]        	add	ax, [previous_val_l]
  7665 0000447A 66D1D8                  	rcr	ax, 1
  7666 0000447D 80EC80                  	sub	ah, 80h ; -32768 to +32767 format again
  7667 00004480 66AB                    	stosw		; this is interpolated sample (L)
  7668                                  	;mov	ax, [next_val_r]
  7669 00004482 89D0                    	mov	eax, edx
  7670                                  	;add	ax, [previous_val_r]
  7671 00004484 6601D8                  	add	ax, bx
  7672 00004487 66D1D8                  	rcr	ax, 1
  7673 0000448A 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  7674 0000448D 66AB                    	stosw		; this is interpolated sample (R)
  7675                                  
  7676                                  	; different than 8-16-24 kHZ !
  7677                                  	; 'original-interpolated-original' trio samples
  7678 0000448F E30B                    	jecxz	lff32s2_3
  7679                                  
  7680 00004491 66AD                    	lodsw
  7681 00004493 66AB                    	stosw	; original sample (L)
  7682 00004495 66AD                    	lodsw
  7683 00004497 66AB                    	stosw	; original sample (R)
  7684                                  	
  7685                                  	; 32 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  7686 00004499 49                      	dec	ecx
  7687 0000449A 75AD                    	jnz	short lff32s2_1
  7688                                  lff32s2_3:
  7689 0000449C E959020000              	jmp	lff32_3
  7690                                  
  7691                                  ; =============== S U B R O U T I N E =======================================
  7692                                  
  7693                                  load_22khz_mono_16_bit:
  7694                                  	; 13/01/2025 (mp3play3.s)
  7695 000044A1 BE[00600500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
  7696 000044A6 BF[00800500]            	mov	edi, sample_buffer ; wav output buffer
  7697 000044AB 8B0D[94AB0000]          	mov	ecx, [loadsize]
  7698                                  	; 13/01/2025
  7699 000044B1 D1E9                    	shr	ecx, 1	; word count
  7700                                  lff22m2_9:
  7701 000044B3 BD05000000              	mov	ebp, 5	; interpolation (one step) loop count
  7702 000044B8 C605[3A4A0000]03        	mov	byte [faz], 3  ; 3 steps/phases
  7703                                  lff22m2_1:
  7704                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  7705 000044BF 66AD                    	lodsw
  7706 000044C1 31D2                    	xor	edx, edx
  7707 000044C3 49                      	dec	ecx
  7708 000044C4 7403                    	jz	short lff22m2_2_1
  7709 000044C6 668B16                  	mov	dx, [esi]
  7710                                  lff22m2_2_1:	
  7711                                  	; ax = [previous_val]
  7712                                  	; dx = [next_val]
  7713 000044C9 E8AA020000              	call	interpolating_3_16bit_mono ; 1 of 17
  7714 000044CE E32F                    	jecxz	lff22m2_3
  7715                                  lff22m2_2_2:
  7716 000044D0 66AD                    	lodsw
  7717 000044D2 31D2                    	xor	edx, edx
  7718 000044D4 49                      	dec	ecx
  7719 000044D5 7403                    	jz	short lff22m2_2_3
  7720 000044D7 668B16                  	mov	dx, [esi]
  7721                                  lff22m2_2_3:
  7722 000044DA E82C030000               	call	interpolating_2_16bit_mono ; 2 of 17 .. 6 of 17
  7723 000044DF E31E                    	jecxz	lff22m2_3
  7724 000044E1 4D                      	dec	ebp
  7725 000044E2 75EC                    	jnz	short lff22m2_2_2
  7726                                  
  7727 000044E4 A0[3A4A0000]            	mov	al, [faz]
  7728 000044E9 FEC8                    	dec	al
  7729 000044EB 74C6                    	jz	short lff22m2_9
  7730 000044ED FE0D[3A4A0000]          	dec	byte [faz]
  7731 000044F3 BD04000000              	mov	ebp, 4
  7732 000044F8 FEC8                    	dec	al
  7733 000044FA 75C3                    	jnz	short lff22m2_1 ; 3:2:2:2:2 ; 7-11 of 17
  7734 000044FC 45                      	inc	ebp ; 5
  7735 000044FD EBC0                    	jmp	short lff22m2_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  7736                                  
  7737                                  lff22m2_3:
  7738                                  lff22s2_3:
  7739 000044FF E9F6010000              	jmp	lff22_3	; padfill
  7740                                  		; (put zeros in the remain words of the buffer)
  7741                                  
  7742                                  ; =============== S U B R O U T I N E =======================================
  7743                                  
  7744                                  load_22khz_stereo_16_bit:
  7745                                  	; 13/01/2025 (mp3play3.s)
  7746 00004504 BE[00600500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
  7747 00004509 BF[00800500]            	mov	edi, sample_buffer ; wav output buffer
  7748 0000450E 8B0D[94AB0000]          	mov	ecx, [loadsize]
  7749                                  	; 13/01/2025
  7750 00004514 C1E902                  	shr	ecx, 2	; dword count
  7751                                  lff22s2_9:
  7752 00004517 BD05000000              	mov	ebp, 5	; interpolation (one step) loop count
  7753 0000451C C605[3A4A0000]03        	mov	byte [faz], 3  ; 3 steps/phase
  7754                                  lff22s2_1:
  7755                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  7756 00004523 66AD                    	lodsw
  7757 00004525 89C3                    	mov	ebx, eax
  7758 00004527 66AD                    	lodsw
  7759 00004529 8B16                    	mov	edx, [esi]
  7760 0000452B 668915[364A0000]        	mov	[next_val_l], dx
  7761                                  	; 26/11/2023
  7762 00004532 C1EA10                  	shr	edx, 16
  7763 00004535 49                      	dec	ecx
  7764 00004536 7509                    	jnz	short lff22s2_2_1
  7765 00004538 31D2                    	xor	edx, edx ; 0
  7766 0000453A 668915[364A0000]        	mov	[next_val_l], dx
  7767                                  lff22s2_2_1:
  7768                                  	; bx = [previous_val_l]
  7769                                  	; ax = [previous_val_r]
  7770                                  	; [next_val_l]
  7771                                  	; dx = [next_val_r]
  7772 00004541 E862020000              	call	interpolating_3_16bit_stereo ; 1 of 17 
  7773 00004546 E3B7                    	jecxz	lff22s2_3
  7774                                  lff22s2_2_2:
  7775 00004548 66AD                    	lodsw
  7776 0000454A 89C3                    	mov	ebx, eax
  7777 0000454C 66AD                    	lodsw
  7778 0000454E 8B16                    	mov	edx, [esi]
  7779 00004550 668915[364A0000]        	mov	[next_val_l], dx
  7780                                  	; 26/11/2023
  7781 00004557 C1EA10                  	shr	edx, 16
  7782 0000455A 49                      	dec	ecx
  7783 0000455B 7509                    	jnz	short lff22s2_2_3
  7784 0000455D 31D2                    	xor	edx, edx ; 0
  7785 0000455F 668915[364A0000]        	mov	[next_val_l], dx
  7786                                  lff22s2_2_3:
  7787 00004566 E8B8020000               	call	interpolating_2_16bit_stereo ; 2 of 17 .. 6 of 17
  7788 0000456B E31E                    	jecxz	lff22s2_2_4
  7789                                  
  7790 0000456D 4D                      	dec	ebp
  7791 0000456E 75D8                    	jnz	short lff22s2_2_2
  7792                                  
  7793 00004570 A0[3A4A0000]            	mov	al, [faz]
  7794 00004575 FEC8                    	dec	al
  7795 00004577 749E                    	jz	short lff22s2_9
  7796 00004579 FE0D[3A4A0000]          	dec	byte [faz]
  7797 0000457F BD04000000              	mov	ebp, 4
  7798 00004584 FEC8                    	dec	al
  7799 00004586 759B                    	jnz	short lff22s2_1 ; 3:2:2:2:2 ; 7-11 of 17
  7800 00004588 45                      	inc	ebp ; 5
  7801 00004589 EB98                    	jmp	short lff22s2_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  7802                                  
  7803                                  lff22s2_2_4:
  7804                                  	; 26/11/2023
  7805 0000458B E96A010000              	jmp	lff22_3	; padfill
  7806                                  
  7807                                  ; =============== S U B R O U T I N E =======================================
  7808                                  
  7809                                  load_11khz_mono_16_bit:
  7810                                  	; 13/01/2025 (mp3play3.s)
  7811 00004590 BE[00600500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
  7812 00004595 BF[00800500]            	mov	edi, sample_buffer ; wav output buffer
  7813 0000459A 8B0D[94AB0000]          	mov	ecx, [loadsize]
  7814                                  	; 13/01/2025
  7815 000045A0 D1E9                    	shr	ecx, 1	; word count
  7816                                  lff11m2_9:
  7817 000045A2 BD06000000              	mov	ebp, 6	; interpolation (one step) loop count
  7818                                  lff11m2_1:
  7819                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  7820 000045A7 66AD                    	lodsw
  7821 000045A9 31D2                    	xor	edx, edx
  7822 000045AB 49                      	dec	ecx
  7823 000045AC 7403                    	jz	short lff11m2_2_1
  7824 000045AE 668B16                  	mov	dx, [esi]
  7825                                  lff11m2_2_1:	
  7826                                  	; ax = [previous_val]
  7827                                  	; dx = [next_val]
  7828 000045B1 E89C020000              	call	interpolating_5_16bit_mono
  7829 000045B6 E327                    	jecxz	lff11m2_3
  7830                                  lff11m2_2_2:
  7831 000045B8 66AD                    	lodsw
  7832 000045BA 31D2                    	xor	edx, edx
  7833 000045BC 49                      	dec	ecx
  7834 000045BD 7403                    	jz	short lff11m2_2_3
  7835 000045BF 668B16                  	mov	dx, [esi]
  7836                                  lff11m2_2_3:
  7837 000045C2 E8B5030000               	call	interpolating_4_16bit_mono
  7838 000045C7 E316                    	jecxz	lff11m2_3
  7839                                  
  7840 000045C9 4D                      	dec	ebp
  7841 000045CA 74D6                    	jz	short lff11m2_9
  7842                                  
  7843 000045CC 66AD                    	lodsw
  7844 000045CE 31D2                    	xor	edx, edx
  7845 000045D0 49                      	dec	ecx
  7846 000045D1 7403                    	jz	short lff11m2_2_4
  7847 000045D3 668B16                  	mov	dx, [esi]
  7848                                  lff11m2_2_4:
  7849 000045D6 E8A1030000               	call	interpolating_4_16bit_mono
  7850 000045DB E302                    	jecxz	lff11m2_3
  7851 000045DD EBC8                    	jmp	short lff11m2_1
  7852                                  
  7853                                  lff11m2_3:
  7854 000045DF E916010000              	jmp	lff11_3	; padfill
  7855                                  		; (put zeros in the remain words of the buffer)
  7856                                  
  7857                                  ; =============== S U B R O U T I N E =======================================
  7858                                  
  7859                                  load_11khz_stereo_16_bit:
  7860                                  	; 13/01/2025 (mp3play3.s)
  7861 000045E4 BE[00600500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
  7862 000045E9 BF[00800500]            	mov	edi, sample_buffer ; wav output buffer
  7863 000045EE 8B0D[94AB0000]          	mov	ecx, [loadsize]
  7864                                  	; 13/01/2025
  7865 000045F4 C1E902                  	shr	ecx, 2	; dword count
  7866                                  lff11s2_9:
  7867 000045F7 BD06000000              	mov	ebp, 6	; interpolation (one step) loop count
  7868                                  lff11s2_1:
  7869                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  7870 000045FC 66AD                    	lodsw
  7871 000045FE 89C3                    	mov	ebx, eax
  7872 00004600 66AD                    	lodsw
  7873 00004602 8B16                    	mov	edx, [esi]
  7874                                  	; 15/01/2025
  7875                                  	;mov	[next_val_l], edx
  7876                                  	; 26/11/2023
  7877                                  	;shr	edx, 16
  7878                                  	;mov	[next_val_r], dx
  7879 00004604 49                      	dec	ecx
  7880 00004605 7502                    	jnz	short lff11s2_2_1
  7881 00004607 31D2                    	xor	edx, edx ; 0
  7882                                  	;mov	[next_val_l], dx
  7883                                  	;mov	[next_val_r], dx
  7884                                  lff11s2_2_1:
  7885                                  	; bx = [previous_val_l]
  7886                                  	; ax = [previous_val_r]
  7887                                  	; [next_val_l]
  7888                                  	; dx = [next_val_r]
  7889                                  	;;;
  7890                                  	; 15/01/2025 (BugFix)
  7891 00004609 8915[364A0000]          	mov	[next_val_l], edx
  7892                                  	;;;
  7893 0000460F E899020000              	call	interpolating_5_16bit_stereo
  7894 00004614 E339                    	jecxz	lff11s2_3
  7895                                  lff11s2_2_2:
  7896 00004616 66AD                    	lodsw
  7897 00004618 89C3                    	mov	ebx, eax
  7898 0000461A 66AD                    	lodsw
  7899 0000461C 8B16                    	mov	edx, [esi]
  7900                                  	; 15/01/2025
  7901                                  	;mov	[next_val_l], dx
  7902                                  	; 26/11/2023
  7903                                  	;shr	edx, 16
  7904                                  	;mov	[next_val_r], dx
  7905 0000461E 49                      	dec	ecx
  7906 0000461F 7502                    	jnz	short lff11s2_2_3
  7907 00004621 31D2                    	xor	edx, edx ; 0
  7908                                  	;mov	[next_val_l], dx
  7909                                  	;mov	[next_val_r], dx
  7910                                  lff11s2_2_3:
  7911                                  	;;;
  7912                                  	; 15/01/2025 (BugFix)
  7913 00004623 8915[364A0000]          	mov	[next_val_l], edx
  7914                                  	;;;
  7915 00004629 E887030000              	call	interpolating_4_16bit_stereo
  7916 0000462E E31F                    	jecxz	lff11s2_3
  7917                                  	
  7918 00004630 4D                      	dec	ebp
  7919 00004631 74C4                    	jz	short lff11s2_9
  7920                                  
  7921 00004633 66AD                    	lodsw
  7922 00004635 89C3                    	mov	ebx, eax
  7923 00004637 66AD                    	lodsw
  7924 00004639 8B16                    	mov	edx, [esi]
  7925                                  	; 15/01/2025
  7926                                  	;mov	[next_val_l], dx
  7927                                  	; 26/11/2023
  7928                                  	;shr	edx, 16
  7929                                  	;mov	[next_val_r], dx
  7930 0000463B 49                      	dec	ecx
  7931 0000463C 7502                    	jnz	short lff11s2_2_4
  7932 0000463E 31D2                    	xor	edx, edx ; 0
  7933                                  	;mov	[next_val_l], dx
  7934                                  	;mov	[next_val_r], dx
  7935                                  lff11s2_2_4:
  7936                                  	;;;
  7937                                  	; 15/01/2025 (BugFix)
  7938 00004640 8915[364A0000]          	mov	[next_val_l], edx
  7939                                  	;;;
  7940 00004646 E86A030000               	call	interpolating_4_16bit_stereo
  7941 0000464B E302                    	jecxz	lff11s2_3
  7942 0000464D EBAD                    	jmp	short lff11s2_1
  7943                                  
  7944                                  lff11s2_3:
  7945 0000464F E9A6000000              	jmp	lff11_3	; padfill
  7946                                  		; (put zeros in the remain words of the buffer)
  7947                                  
  7948                                  ; =============== S U B R O U T I N E =======================================
  7949                                  
  7950                                  load_44khz_mono_16_bit:
  7951                                  	; 13/01/2025 (mp3play3.s)
  7952 00004654 BE[00600500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
  7953 00004659 BF[00800500]            	mov	edi, sample_buffer ; wav output buffer
  7954 0000465E 8B0D[94AB0000]          	mov	ecx, [loadsize]
  7955                                  	; 13/01/2025
  7956 00004664 D1E9                    	shr	ecx, 1	; word count
  7957                                  lff44m2_9:
  7958 00004666 BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  7959 0000466B C605[3A4A0000]02        	mov	byte [faz], 2  ; 2 steps/phases
  7960                                  lff44m2_1:
  7961                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  7962                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  7963 00004672 66AD                    	lodsw
  7964 00004674 31D2                    	xor	edx, edx
  7965 00004676 49                      	dec	ecx
  7966 00004677 7403                    	jz	short lff44m2_2_1
  7967 00004679 668B16                  	mov	dx, [esi]
  7968                                  lff44m2_2_1:	
  7969                                  	; ax = [previous_val]
  7970                                  	; dx = [next_val]
  7971 0000467C E88A010000              	call	interpolating_2_16bit_mono
  7972 00004681 E31B                    	jecxz	lff44m2_3
  7973                                  lff44m2_2_2:
  7974 00004683 66AD                    	lodsw
  7975 00004685 66AB                    	stosw		; (L)eft Channel
  7976 00004687 66AB                    	stosw		; (R)ight Channel
  7977                                  
  7978 00004689 49                      	dec	ecx
  7979 0000468A 7412                    	jz	short lff44m2_3	
  7980 0000468C 4D                      	dec	ebp
  7981 0000468D 75F4                    	jnz	short lff44m2_2_2
  7982                                  	
  7983 0000468F FE0D[3A4A0000]          	dec	byte [faz]
  7984 00004695 74CF                    	jz	short lff44m2_9 
  7985 00004697 BD0B000000              	mov	ebp, 11
  7986 0000469C EBD4                    	jmp	short lff44m2_1
  7987                                  
  7988                                  lff44m2_3:
  7989                                  lff44s2_3:
  7990 0000469E EB5A                    	jmp	short lff44_3 ; padfill
  7991                                  		; (put zeros in the remain words of the buffer)
  7992                                  
  7993                                  ; =============== S U B R O U T I N E =======================================
  7994                                  
  7995                                  load_44khz_stereo_16_bit:
  7996                                  	; 13/01/2025 (mp3play3.s)
  7997 000046A0 BE[00600500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
  7998 000046A5 BF[00800500]            	mov	edi, sample_buffer ; wav output buffer
  7999 000046AA 8B0D[94AB0000]          	mov	ecx, [loadsize]
  8000                                  	; 13/01/2025
  8001 000046B0 C1E902                  	shr	ecx, 2	; dword count
  8002                                  lff44s2_9:
  8003 000046B3 BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  8004 000046B8 C605[3A4A0000]02        	mov	byte [faz], 2  ; 2 steps/phase
  8005                                  lff44s2_1:
  8006                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  8007                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  8008 000046BF 66AD                    	lodsw
  8009 000046C1 89C3                    	mov	ebx, eax
  8010 000046C3 66AD                    	lodsw
  8011                                  	;mov	dx, [esi]
  8012                                  	;mov	[next_val_l], dx
  8013                                  	;mov	dx, [esi+2]
  8014                                  	; 26/11/2023
  8015 000046C5 8B16                    	mov	edx, [esi]
  8016 000046C7 668915[364A0000]        	mov	[next_val_l], dx
  8017 000046CE C1EA10                  	shr	edx, 16
  8018 000046D1 49                      	dec	ecx
  8019 000046D2 7509                    	jnz	short lff44s2_2_1
  8020 000046D4 31D2                    	xor	edx, edx ; 0
  8021 000046D6 668915[364A0000]        	mov	[next_val_l], dx
  8022                                  lff44s2_2_1:
  8023                                  	; bx = [previous_val_l]
  8024                                  	; ax = [previous_val_r]
  8025                                  	; [next_val_l]
  8026                                  	; dx = [next_val_r]
  8027 000046DD E841010000              	call	interpolating_2_16bit_stereo
  8028 000046E2 E3BA                    	jecxz	lff44s2_3
  8029                                  lff44s2_2_2:
  8030                                  	;movsw		; (L)eft Channel
  8031                                  	;movsw		; (R)ight Channel
  8032 000046E4 A5                      	movsd
  8033                                  
  8034 000046E5 49                      	dec	ecx
  8035                                  	;jz	short lff44s2_3
  8036                                  	; 17/02/2025
  8037 000046E6 7412                    	jz	short lff44_3
  8038 000046E8 4D                      	dec	ebp
  8039 000046E9 75F9                    	jnz	short lff44s2_2_2
  8040                                  	
  8041 000046EB FE0D[3A4A0000]          	dec	byte [faz]
  8042 000046F1 74C0                    	jz	short lff44s2_9 
  8043 000046F3 BD0B000000              	mov	ebp, 11
  8044 000046F8 EBC5                    	jmp	short lff44s2_1
  8045                                  
  8046                                  
  8047                                  ; ---------------------------------------------------------------------------
  8048                                  
  8049                                  	; 17/02/2025
  8050                                  ; padfill
  8051                                  	; (put zeros in the remain words of the buffer)
  8052                                  lff44_3:
  8053                                  lff32_3:
  8054                                  lff24_3:
  8055                                  lff22_3:
  8056                                  lff16_3:
  8057                                  lff12_3:
  8058                                  lff11_3:
  8059                                  lff8_3: 
  8060                                  	; 17/02/2025
  8061 000046FA 8B0D[88AB0000]          	mov	ecx, [buffer_size] ; 16 bit (48 kHZ, stereo) samples
  8062 00004700 81C1[00800500]          	add	ecx, sample_buffer
  8063 00004706 29F9                    	sub	ecx, edi
  8064 00004708 7609                    	jna	short lff44_4 ; jbe
  8065 0000470A 29F9                    	sub	ecx, edi
  8066                                  	;inc	ecx
  8067 0000470C C1E902                  	shr	ecx, 2
  8068 0000470F 31C0                    	xor	eax, eax ; fill (remain part of) buffer with zeros
  8069 00004711 F3AB                    	rep	stosd
  8070                                  lff44_4:
  8071 00004713 C3                      	retn
  8072                                  
  8073                                  ; =============== S U B R O U T I N E =======================================
  8074                                  
  8075                                  	; 01/02/2025
  8076                                  load_12khz_mono_16_bit:
  8077 00004714 BE[00600500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
  8078 00004719 BF[00800500]            	mov	edi, sample_buffer ; wav output buffer
  8079 0000471E 8B0D[94AB0000]          	mov	ecx, [loadsize]
  8080 00004724 D1E9                    	shr	ecx, 1	; word count
  8081                                  lff12m2_9:
  8082 00004726 BD06000000              	mov	ebp, 6	; interpolation (one step) loop count
  8083                                  lff12m2_1:
  8084                                  	; original-interpolated-interpolated-interpolated
  8085 0000472B 66AD                    	lodsw
  8086 0000472D 31D2                    	xor	edx, edx
  8087 0000472F 49                      	dec	ecx
  8088 00004730 7403                    	jz	short lff12m2_2
  8089 00004732 668B16                  	mov	dx, [esi]
  8090                                  lff12m2_2:	
  8091                                  	; ax = [previous_val]
  8092                                  	; dx = [next_val]
  8093 00004735 E842020000               	call	interpolating_4_16bit_mono
  8094 0000473A E3BE                    	jecxz	lff12_3	; 17/02/2025
  8095 0000473C EBED                    	jmp	short lff12m2_1
  8096                                  
  8097                                  ; =============== S U B R O U T I N E =======================================
  8098                                  
  8099                                  	; 01/02/2025
  8100                                  load_12khz_stereo_16_bit:
  8101 0000473E BE[00600500]            	mov	esi, decoding_buffer ; (contains 8bit stereo samples)
  8102 00004743 BF[00800500]            	mov	edi, sample_buffer ; wav output buffer
  8103 00004748 8B0D[94AB0000]          	mov	ecx, [loadsize]
  8104 0000474E C1E902                  	shr	ecx, 2	; dword count
  8105                                  lff12s2_1:
  8106                                  	; original-interpolated-interpolated-interpolated
  8107 00004751 66AD                    	lodsw
  8108 00004753 89C3                    	mov	ebx, eax
  8109 00004755 66AD                    	lodsw
  8110 00004757 8B16                    	mov	edx, [esi]
  8111 00004759 49                      	dec	ecx
  8112 0000475A 7502                    	jnz	short lff12s2_2
  8113 0000475C 31D2                    	xor	edx, edx ; 0
  8114                                  lff12s2_2:
  8115 0000475E 668915[364A0000]        	mov	[next_val_l], dx
  8116 00004765 C1EA10                  	shr	edx, 16
  8117 00004768 668915[384A0000]        	mov	[next_val_r], dx
  8118                                  	; bx = [previous_val_l]
  8119                                  	; ax = [previous_val_r]
  8120                                  	; [next_val_l]
  8121                                  	; [next_val_r]
  8122 0000476F E841020000              	call	interpolating_4_16bit_stereo
  8123 00004774 E384                    	jecxz	lff12_3	; 17/02/2025
  8124 00004776 EBD9                    	jmp	short lff12s2_1
  8125                                  
  8126                                  ; =============== S U B R O U T I N E =======================================
  8127                                  
  8128                                  interpolating_3_16bit_mono:
  8129                                  	; 16/11/2023
  8130                                  	; ax = [previous_val]
  8131                                  	; dx = [next_val]
  8132                                  	; original-interpolated-interpolated
  8133                                  
  8134 00004778 66AB                    	stosw		; original sample (L)
  8135 0000477A 66AB                    	stosw		; original sample (R)
  8136 0000477C 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  8137 0000477F 50                      	push	eax ; *	; [previous_val]
  8138 00004780 80C680                  	add	dh, 80h
  8139 00004783 6601D0                  	add	ax, dx
  8140 00004786 66D1D8                  	rcr	ax, 1
  8141 00004789 5B                      	pop	ebx ; *
  8142 0000478A 93                      	xchg	ebx, eax ; bx  = interpolated middle (temporary)
  8143 0000478B 6601D8                  	add	ax, bx	; [previous_val] + interpolated middle
  8144 0000478E 66D1D8                  	rcr	ax, 1
  8145 00004791 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8146 00004794 66AB                    	stosw 		; interpolated sample 1 (L)
  8147 00004796 66AB                    	stosw		; interpolated sample 1 (R)
  8148 00004798 89D8                    	mov	eax, ebx
  8149 0000479A 6601D0                  	add	ax, dx	; interpolated middle + [next_val]
  8150 0000479D 66D1D8                  	rcr	ax, 1
  8151 000047A0 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8152 000047A3 66AB                    	stosw		; interpolated sample 2 (L)
  8153 000047A5 66AB                    	stosw		; interpolated sample 2 (R)
  8154 000047A7 C3                      	retn
  8155                                  
  8156                                  ; =============== S U B R O U T I N E =======================================
  8157                                  
  8158                                  interpolating_3_16bit_stereo:
  8159                                  	; 16/11/2023
  8160                                  	; bx = [previous_val_l]
  8161                                  	; ax = [previous_val_r]
  8162                                  	; [next_val_l]
  8163                                  	; dx = [next_val_r]
  8164                                  	; original-interpolated-interpolated
  8165                                  
  8166 000047A8 93                      	xchg	eax, ebx
  8167 000047A9 66AB                    	stosw		; original sample (L)
  8168 000047AB 93                      	xchg	eax, ebx
  8169 000047AC 66AB                    	stosw		; original sample (R)
  8170 000047AE 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  8171 000047B1 50                      	push	eax ; *	; [previous_val_r]
  8172 000047B2 80C780                  	add	bh, 80h
  8173 000047B5 8005[374A0000]80        	add	byte [next_val_l+1], 80h
  8174 000047BC 66A1[364A0000]          	mov	ax, [next_val_l]
  8175 000047C2 6601D8                  	add	ax, bx	; [previous_val_l]
  8176 000047C5 66D1D8                  	rcr	ax, 1
  8177 000047C8 93                      	xchg	eax, ebx ; ax = [previous_val_l]
  8178 000047C9 6601D8                  	add	ax, bx	; bx = interpolated middle (L)
  8179 000047CC 66D1D8                  	rcr	ax, 1
  8180 000047CF 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8181 000047D2 66AB                    	stosw 		; interpolated sample 1 (L)
  8182 000047D4 58                      	pop	eax  ; *
  8183 000047D5 80C680                  	add	dh, 80h ; convert sound level 0 to 65535 format
  8184 000047D8 52                      	push	edx  ; * ; [next_val_r]
  8185 000047D9 92                      	xchg	eax, edx
  8186 000047DA 6601D0                  	add	ax, dx	; [next_val_r] + [previous_val_r]
  8187 000047DD 66D1D8                  	rcr	ax, 1	; / 2
  8188 000047E0 50                      	push	eax ; ** ; interpolated middle (R)
  8189 000047E1 6601D0                  	add	ax, dx	; + [previous_val_r]
  8190 000047E4 66D1D8                  	rcr	ax, 1
  8191 000047E7 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8192 000047EA 66AB                    	stosw 		; interpolated sample 1 (R)
  8193 000047EC 66A1[364A0000]          	mov	ax, [next_val_l]
  8194 000047F2 6601D8                  	add	ax, bx	; + interpolated middle (L)
  8195 000047F5 66D1D8                  	rcr	ax, 1
  8196 000047F8 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8197 000047FB 66AB                    	stosw 		; interpolated sample 2 (L)
  8198 000047FD 58                      	pop	eax ; **
  8199 000047FE 5A                      	pop	edx ; *
  8200 000047FF 6601D0                  	add	ax, dx	; interpolated middle + [next_val_r]
  8201 00004802 66D1D8                  	rcr	ax, 1	; / 2
  8202 00004805 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8203 00004808 66AB                    	stosw 		; interpolated sample 2 (L)
  8204 0000480A C3                      	retn
  8205                                  
  8206                                  ; =============== S U B R O U T I N E =======================================
  8207                                  
  8208                                  interpolating_2_16bit_mono:
  8209                                  	; 16/11/2023
  8210                                  	; ax = [previous_val]
  8211                                  	; dx = [next_val]
  8212                                  	; original-interpolated
  8213                                  
  8214 0000480B 66AB                    	stosw		; original sample (L)
  8215 0000480D 66AB                    	stosw		; original sample (R)
  8216 0000480F 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  8217 00004812 80C680                  	add	dh, 80h
  8218 00004815 6601D0                  	add	ax, dx
  8219 00004818 66D1D8                  	rcr	ax, 1
  8220 0000481B 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8221 0000481E 66AB                    	stosw		; interpolated sample (L)
  8222 00004820 66AB                    	stosw		; interpolated sample (R)
  8223 00004822 C3                      	retn
  8224                                  
  8225                                  ; =============== S U B R O U T I N E =======================================
  8226                                  
  8227                                  interpolating_2_16bit_stereo:
  8228                                  	; 16/11/2023
  8229                                  	; bx = [previous_val_l]
  8230                                  	; ax = [previous_val_r]
  8231                                  	; [next_val_l]
  8232                                  	; dx = [next_val_r]
  8233                                  	; original-interpolated
  8234                                  
  8235 00004823 93                      	xchg	eax, ebx
  8236 00004824 66AB                    	stosw		; original sample (L)
  8237 00004826 93                      	xchg	eax, ebx
  8238 00004827 66AB                    	stosw		; original sample (R)
  8239 00004829 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  8240 0000482C 80C680                  	add	dh, 80h
  8241 0000482F 6601D0                  	add	ax, dx	; [previous_val_r] + [next_val_r]
  8242 00004832 66D1D8                  	rcr	ax, 1	; / 2
  8243                                  	; 14/01/2025
  8244 00004835 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8245                                  	;push	eax ; *	; interpolated sample (R)
  8246                                  	; 14/01/2025
  8247 00004838 C1E010                  	shl	eax, 16
  8248 0000483B 66A1[364A0000]          	mov	ax, [next_val_l]
  8249 00004841 80C480                  	add	ah, 80h
  8250 00004844 80C780                  	add	bh, 80h
  8251 00004847 6601D8                  	add	ax, bx	; [next_val_l] + [previous_val_l]
  8252 0000484A 66D1D8                  	rcr	ax, 1	; / 2
  8253 0000484D 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8254                                  	; 14/01/2025
  8255                                  	;stosw 		; interpolated sample (L)
  8256                                  	;pop	eax ; *	
  8257                                  	;sub	ah, 80h	; -32768 to +32767 format again
  8258                                  	;stosw 		; interpolated sample (R)
  8259                                  	; 14/01/2025
  8260 00004850 AB                      	stosd
  8261 00004851 C3                      	retn
  8262                                  
  8263                                  ; =============== S U B R O U T I N E =======================================
  8264                                  
  8265                                  interpolating_5_16bit_mono:
  8266                                  	; 18/11/2023
  8267                                  	; ax = [previous_val]
  8268                                  	; dx = [next_val]
  8269                                  	; original-interpltd-interpltd-interpltd-interpltd
  8270 00004852 66AB                    	stosw		; original sample (L)
  8271 00004854 66AB                    	stosw		; original sample (R)
  8272 00004856 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  8273 00004859 89C3                    	mov	ebx, eax ; [previous_val]
  8274 0000485B 80C680                  	add	dh, 80h
  8275 0000485E 6601D0                  	add	ax, dx
  8276 00004861 66D1D8                  	rcr	ax, 1
  8277 00004864 50                      	push	eax ; *	; interpolated middle (temporary)
  8278 00004865 6601D8                  	add	ax, bx	; interpolated middle + [previous_val] 
  8279 00004868 66D1D8                  	rcr	ax, 1
  8280 0000486B 50                      	push	eax ; **	; interpolated 1st quarter (temporary)
  8281 0000486C 6601D8                  	add	ax, bx	; 1st quarter + [previous_val]
  8282 0000486F 66D1D8                  	rcr	ax, 1	
  8283 00004872 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8284 00004875 66AB                    	stosw 		; interpolated sample 1 (L)
  8285 00004877 66AB                    	stosw		; interpolated sample 1 (R)
  8286 00004879 58                      	pop	eax ; **
  8287 0000487A 5B                      	pop	ebx ; *
  8288 0000487B 6601D8                  	add	ax, bx	; 1st quarter + middle
  8289 0000487E 66D1D8                  	rcr	ax, 1	; / 2
  8290 00004881 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again	
  8291 00004884 66AB                    	stosw		; interpolated sample 2 (L)
  8292 00004886 66AB                    	stosw		; interpolated sample 2 (R)
  8293 00004888 89D8                    	mov	eax, ebx
  8294 0000488A 6601D0                  	add	ax, dx	; interpolated middle + [next_val]
  8295 0000488D 66D1D8                  	rcr	ax, 1
  8296 00004890 50                      	push	eax ; *	; interpolated 3rd quarter (temporary)
  8297 00004891 6601D8                  	add	ax, bx	; + interpolated middle
  8298 00004894 66D1D8                  	rcr	ax, 1
  8299 00004897 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8300 0000489A 66AB                    	stosw		; interpolated sample 3 (L)
  8301 0000489C 66AB                    	stosw		; interpolated sample 3 (R)
  8302 0000489E 58                      	pop	eax ; *	
  8303 0000489F 6601D0                  	add	ax, dx	; 3rd quarter + [next_val]
  8304 000048A2 66D1D8                  	rcr	ax, 1	; / 2
  8305 000048A5 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8306 000048A8 66AB                    	stosw		; interpolated sample 4 (L)
  8307 000048AA 66AB                    	stosw		; interpolated sample 4 (R)
  8308 000048AC C3                      	retn
  8309                                  
  8310                                  ; =============== S U B R O U T I N E =======================================
  8311                                  
  8312                                  interpolating_5_16bit_stereo:
  8313                                  	; 18/11/2023
  8314                                  	; bx = [previous_val_l]
  8315                                  	; ax = [previous_val_r]
  8316                                  	; [next_val_l]
  8317                                  	; [next_val_r]
  8318                                  	; original-interpltd-interpltd-interpltd-interpltd
  8319 000048AD 51                      	push	ecx ; !
  8320 000048AE 93                      	xchg	eax, ebx
  8321 000048AF 66AB                    	stosw		; original sample (L)
  8322 000048B1 93                      	xchg	eax, ebx
  8323 000048B2 66AB                    	stosw		; original sample (R)
  8324 000048B4 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  8325 000048B7 50                      	push	eax ; *	; [previous_val_r]
  8326 000048B8 80C780                  	add	bh, 80h
  8327 000048BB 8005[374A0000]80        	add	byte [next_val_l+1], 80h
  8328 000048C2 66A1[364A0000]          	mov	ax, [next_val_l]
  8329 000048C8 6601D8                  	add	ax, bx	; [previous_val_l]
  8330 000048CB 66D1D8                  	rcr	ax, 1
  8331 000048CE 89C1                    	mov	ecx, eax ; interpolated middle (L)
  8332 000048D0 6601D8                  	add	ax, bx	
  8333 000048D3 66D1D8                  	rcr	ax, 1
  8334 000048D6 89C2                    	mov	edx, eax ; interpolated 1st quarter (L)
  8335 000048D8 6601D8                  	add	ax, bx	; [previous_val_l]
  8336 000048DB 66D1D8                  	rcr	ax, 1
  8337 000048DE 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8338 000048E1 66AB                    	stosw 		; interpolated sample 1 (L)
  8339 000048E3 89C8                    	mov	eax, ecx
  8340 000048E5 6601D0                  	add	ax, dx	; middle (L) + 1st quarter (L)
  8341 000048E8 66D1D8                  	rcr	ax, 1	; / 2
  8342 000048EB 89C3                    	mov	ebx, eax  ; interpolated sample 2 (L)
  8343 000048ED 5A                      	pop	edx ; *	; [previous_val_r]
  8344 000048EE 89D0                    	mov	eax, edx
  8345 000048F0 8005[394A0000]80        	add	byte [next_val_r+1], 80h
  8346 000048F7 660305[384A0000]        	add	ax, [next_val_r]
  8347 000048FE 66D1D8                  	rcr	ax, 1
  8348 00004901 50                      	push	eax ; *	; interpolated middle (R)
  8349 00004902 6601D0                  	add	ax, dx
  8350 00004905 66D1D8                  	rcr	ax, 1
  8351 00004908 50                      	push	eax ; ** ; interpolated 1st quarter (R)
  8352 00004909 6601D0                  	add	ax, dx	; [previous_val_r]
  8353 0000490C 66D1D8                  	rcr	ax, 1
  8354 0000490F 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8355 00004912 66AB                    	stosw 		; interpolated sample 1 (R)
  8356 00004914 89D8                    	mov	eax, ebx
  8357 00004916 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8358 00004919 66AB                    	stosw 		; interpolated sample 2 (L)
  8359 0000491B 58                      	pop	eax ; **
  8360 0000491C 5A                      	pop	edx ; *
  8361 0000491D 6601D0                  	add	ax, dx	; 1st quarter (R) + middle (R)
  8362 00004920 66D1D8                  	rcr	ax, 1	; / 2
  8363 00004923 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8364 00004926 66AB                    	stosw 		; interpolated sample 2 (R)
  8365 00004928 89C8                    	mov	eax, ecx
  8366 0000492A 660305[364A0000]        	add	ax, [next_val_l]
  8367 00004931 66D1D8                  	rcr	ax, 1
  8368 00004934 50                      	push	eax ; * ; interpolated 3rd quarter (L)
  8369 00004935 6601C8                  	add	ax, cx	; interpolated middle (L)
  8370 00004938 66D1D8                  	rcr	ax, 1
  8371 0000493B 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8372 0000493E 66AB                    	stosw 		; interpolated sample 3 (L)
  8373 00004940 89D0                    	mov	eax, edx
  8374 00004942 660305[384A0000]        	add	ax, [next_val_r]
  8375 00004949 66D1D8                  	rcr	ax, 1
  8376 0000494C 50                      	push	eax ; ** ; interpolated 3rd quarter (R)
  8377 0000494D 6601D0                  	add	ax, dx	; interpolated middle (R)
  8378 00004950 66D1D8                  	rcr	ax, 1
  8379 00004953 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8380 00004956 66AB                    	stosw 		; interpolated sample 3 (R)
  8381 00004958 5B                      	pop	ebx ; **
  8382 00004959 58                      	pop	eax ; *
  8383 0000495A 660305[364A0000]        	add	ax, [next_val_l]
  8384 00004961 66D1D8                  	rcr	ax, 1
  8385 00004964 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8386 00004967 66AB                    	stosw 		; interpolated sample 4 (L)
  8387 00004969 89D8                    	mov	eax, ebx
  8388 0000496B 660305[384A0000]        	add	ax, [next_val_r]
  8389 00004972 66D1D8                  	rcr	ax, 1
  8390 00004975 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8391 00004978 66AB                    	stosw 		; interpolated sample 4 (R)
  8392 0000497A 59                      	pop	ecx ; !
  8393 0000497B C3                      	retn
  8394                                  
  8395                                  ; =============== S U B R O U T I N E =======================================
  8396                                  
  8397                                  interpolating_4_16bit_mono:
  8398                                  	; 18/11/2023
  8399                                  	; ax = [previous_val]
  8400                                  	; dx = [next_val]
  8401                                  	; 01/02/2025
  8402                                  	; original-interpolated-interpolated-interpolated
  8403                                  
  8404 0000497C 66AB                    	stosw		; original sample (L)
  8405 0000497E 66AB                    	stosw		; original sample (R)
  8406 00004980 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  8407 00004983 89C3                    	mov	ebx, eax ; [previous_val]
  8408 00004985 80C680                  	add	dh, 80h
  8409 00004988 6601D0                  	add	ax, dx	; [previous_val] + [next_val]
  8410 0000498B 66D1D8                  	rcr	ax, 1
  8411 0000498E 93                      	xchg	eax, ebx
  8412 0000498F 6601D8                  	add	ax, bx	; [previous_val] + interpolated middle
  8413 00004992 66D1D8                  	rcr	ax, 1
  8414 00004995 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8415 00004998 66AB                    	stosw 		; interpolated sample 1 (L)
  8416 0000499A 66AB                    	stosw		; interpolated sample 1 (R)
  8417 0000499C 89D8                    	mov	eax, ebx ; interpolated middle
  8418 0000499E 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8419 000049A1 66AB                    	stosw 		; interpolated sample 2 (L)
  8420 000049A3 66AB                    	stosw		; interpolated sample 2 (R)
  8421 000049A5 89D8                    	mov	eax, ebx
  8422 000049A7 6601D0                  	add	ax, dx	; interpolated middle + [next_val]
  8423 000049AA 66D1D8                  	rcr	ax, 1
  8424 000049AD 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8425 000049B0 66AB                    	stosw		; interpolated sample 3 (L)
  8426 000049B2 66AB                    	stosw		; interpolated sample 3 (R)
  8427 000049B4 C3                      	retn
  8428                                  
  8429                                  ; =============== S U B R O U T I N E =======================================
  8430                                  
  8431                                  interpolating_4_16bit_stereo:
  8432                                  	; 18/11/2023
  8433                                  	; bx = [previous_val_l]
  8434                                  	; ax = [previous_val_r]
  8435                                  	; [next_val_l]
  8436                                  	; [next_val_r]
  8437                                  	; original-interpolated-interpolated-interpolated
  8438 000049B5 93                      	xchg	eax, ebx
  8439 000049B6 66AB                    	stosw		; original sample (L)
  8440 000049B8 93                      	xchg	eax, ebx
  8441 000049B9 66AB                    	stosw		; original sample (R)
  8442 000049BB 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  8443 000049BE 89C2                    	mov	edx, eax ; [previous_val_r]
  8444 000049C0 80C780                  	add	bh, 80h
  8445 000049C3 8005[374A0000]80        	add	byte [next_val_l+1], 80h
  8446 000049CA 66A1[364A0000]          	mov	ax, [next_val_l]
  8447 000049D0 6601D8                  	add	ax, bx	; [previous_val_l]
  8448 000049D3 66D1D8                  	rcr	ax, 1
  8449 000049D6 93                      	xchg	eax, ebx
  8450 000049D7 6601D8                  	add	ax, bx	; bx = interpolated middle (L)
  8451 000049DA 66D1D8                  	rcr	ax, 1
  8452 000049DD 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8453 000049E0 66AB                    	stosw 		; interpolated sample 1 (L)
  8454 000049E2 8005[394A0000]80        	add	byte [next_val_r+1], 80h
  8455 000049E9 89D0                    	mov	eax, edx ; [previous_val_r]
  8456 000049EB 660305[384A0000]        	add	ax, [next_val_r]
  8457 000049F2 66D1D8                  	rcr	ax, 1
  8458 000049F5 92                      	xchg	eax, edx
  8459 000049F6 6601D0                  	add	ax, dx	; dx = interpolated middle (R)
  8460 000049F9 66D1D8                  	rcr	ax, 1
  8461 000049FC 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8462 000049FF 66AB                    	stosw 		; interpolated sample 1 (R)
  8463 00004A01 89D8                    	mov	eax, ebx
  8464 00004A03 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8465 00004A06 66AB                    	stosw 		; interpolated sample 2 (L)
  8466 00004A08 89D0                    	mov	eax, edx
  8467 00004A0A 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8468 00004A0D 66AB                    	stosw 		; interpolated sample 2 (R)
  8469 00004A0F 89D8                    	mov	eax, ebx
  8470 00004A11 660305[364A0000]        	add	ax, [next_val_l]
  8471 00004A18 66D1D8                  	rcr	ax, 1
  8472 00004A1B 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8473 00004A1E 66AB                    	stosw 		; interpolated sample 3 (L)
  8474 00004A20 89D0                    	mov	eax, edx
  8475 00004A22 660305[384A0000]        	add	ax, [next_val_r]
  8476 00004A29 66D1D8                  	rcr	ax, 1
  8477 00004A2C 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  8478 00004A2F 66AB                    	stosw 		; interpolated sample 3 (R)
  8479 00004A31 C3                      	retn
  8480                                  
  8481                                  ; ---------------------------------------------------------------------------
  8482                                  
  8483                                  ; 13/11/2023
  8484                                  previous_val:
  8485 00004A32 0000                    previous_val_l: dw 0
  8486 00004A34 0000                    previous_val_r: dw 0
  8487                                  next_val:
  8488 00004A36 0000                    next_val_l: dw 0
  8489 00004A38 0000                    next_val_r: dw 0
  8490                                  
  8491                                  ; 16/11/2023
  8492 00004A3A 00                      faz:	db 0
  8493                                  
  8494                                  ; ---------------------------------------------------------------------------
  8495                                  ; 15/02/2025 - Hardware Info display/write procedures.
  8496                                  ; ---------------------------------------------------------------------------
  8497                                  ; ref: twavply3.s (10/02/2025
  8498                                  
  8499                                  ;=============================================================================
  8500                                  ;	Write AC'97 Hardware Information
  8501                                  ;=============================================================================
  8502                                  	
  8503                                  	; 09/02/2025
  8504                                  
  8505                                  write_audio_dev_info:
  8506 00004A3B 31DB                    	xor	ebx, ebx
  8507 00004A3D 803D[84AB0000]01        	cmp	byte [audio_hardware], 1
  8508 00004A44 7557                    	jne	short write_ac97_pci_dev_info
  8509                                  
  8510                                  ;-----------------------------------------------------------------------------
  8511                                  	
  8512                                  	; 09/02/2025
  8513                                  	; 05/02/2025 - sb16play.s
  8514                                  
  8515                                  write_sb16_dev_info:
  8516 00004A46 A1[7CAB0000]            	mov	eax, [audio_io_base]
  8517                                  	;xor	ebx, ebx
  8518 00004A4B 88C3                    	mov	bl, al
  8519 00004A4D 88DA                    	mov	dl, bl
  8520 00004A4F 80E30F                  	and	bl, 0Fh
  8521 00004A52 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8522 00004A58 A2[BCA90000]            	mov	[msgBasePort+2], al
  8523 00004A5D 88D3                    	mov	bl, dl
  8524 00004A5F C0EB04                  	shr	bl, 4
  8525 00004A62 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8526 00004A68 A2[BBA90000]            	mov	[msgBasePort+1], al
  8527 00004A6D 88E3                    	mov	bl, ah
  8528                                  	;and	bl, 0Fh
  8529 00004A6F 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8530 00004A75 A2[BAA90000]            	mov	[msgBasePort], al
  8531                                  
  8532                                  	;xor	eax, eax
  8533 00004A7A A0[80AB0000]            	mov	al, [audio_intr]
  8534 00004A7F 0430                    	add	al, 30h
  8535 00004A81 A2[D1A90000]            	mov	[msgSB16IRQ], al
  8536                                  
  8537                                  	sys	_msg, msgSB16Info, 255, 07h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00004A86 BB[84A90000]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00004A8B B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00004A90 BA07000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00004A95 B823000000          <1>  mov eax, %1
   112                              <1> 
   113 00004A9A CD40                <1>  int 40h
  8538                                  
  8539 00004A9C C3                      	retn
  8540                                  
  8541                                  ;-----------------------------------------------------------------------------
  8542                                  
  8543                                  	; 09/02/2025
  8544                                  	; 05/02/2025 - ac97play.s
  8545                                  	
  8546                                  write_ac97_pci_dev_info:
  8547                                  	; BUS/DEV/FN
  8548                                  	;	00000000BBBBBBBBDDDDDFFF00000000
  8549                                  	; DEV/VENDOR
  8550                                  	;	DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV
  8551                                  
  8552 00004A9D A1[74AB0000]            	mov	eax, [dev_vendor]
  8553                                  	; 07/12/2024
  8554 00004AA2 31DB                    	xor	ebx, ebx
  8555 00004AA4 88C3                    	mov	bl, al
  8556 00004AA6 88DA                    	mov	dl, bl
  8557 00004AA8 80E30F                  	and	bl, 0Fh
  8558 00004AAB 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8559 00004AB1 A2[57A80000]            	mov	[msgVendorId+3], al
  8560 00004AB6 88D3                    	mov	bl, dl
  8561 00004AB8 C0EB04                  	shr	bl, 4
  8562 00004ABB 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8563 00004AC1 A2[56A80000]            	mov	[msgVendorId+2], al
  8564 00004AC6 88E3                    	mov	bl, ah
  8565 00004AC8 88DA                    	mov	dl, bl
  8566 00004ACA 80E30F                  	and	bl, 0Fh
  8567 00004ACD 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8568 00004AD3 A2[55A80000]            	mov	[msgVendorId+1], al
  8569 00004AD8 88D3                    	mov	bl, dl
  8570 00004ADA C0EB04                  	shr	bl, 4
  8571 00004ADD 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8572 00004AE3 A2[54A80000]            	mov	[msgVendorId], al
  8573 00004AE8 C1E810                  	shr	eax, 16
  8574 00004AEB 88C3                    	mov	bl, al
  8575 00004AED 88DA                    	mov	dl, bl
  8576 00004AEF 80E30F                  	and	bl, 0Fh
  8577 00004AF2 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8578 00004AF8 A2[68A80000]            	mov	[msgDevId+3], al
  8579 00004AFD 88D3                    	mov	bl, dl
  8580 00004AFF C0EB04                  	shr	bl, 4
  8581 00004B02 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8582 00004B08 A2[67A80000]            	mov	[msgDevId+2], al
  8583 00004B0D 88E3                    	mov	bl, ah
  8584 00004B0F 88DA                    	mov	dl, bl
  8585 00004B11 80E30F                  	and	bl, 0Fh
  8586 00004B14 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8587 00004B1A A2[66A80000]            	mov	[msgDevId+1], al
  8588 00004B1F 88D3                    	mov	bl, dl
  8589 00004B21 C0EB04                  	shr	bl, 4
  8590 00004B24 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8591 00004B2A A2[65A80000]            	mov	[msgDevId], al
  8592                                  
  8593 00004B2F A1[70AB0000]            	mov	eax, [bus_dev_fn]
  8594 00004B34 C1E808                  	shr	eax, 8
  8595 00004B37 88C3                    	mov	bl, al
  8596 00004B39 88DA                    	mov	dl, bl
  8597 00004B3B 80E307                  	and	bl, 7 ; bit 0,1,2
  8598 00004B3E 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8599 00004B44 A2[8CA80000]            	mov	[msgFncNo+1], al
  8600 00004B49 88D3                    	mov	bl, dl
  8601 00004B4B C0EB03                  	shr	bl, 3
  8602 00004B4E 88DA                    	mov	dl, bl
  8603 00004B50 80E30F                  	and	bl, 0Fh
  8604 00004B53 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8605 00004B59 A2[7EA80000]            	mov	[msgDevNo+1], al
  8606 00004B5E 88D3                    	mov	bl, dl
  8607 00004B60 C0EB04                  	shr	bl, 4
  8608 00004B63 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8609 00004B69 A2[7DA80000]            	mov	[msgDevNo], al
  8610 00004B6E 88E3                    	mov	bl, ah
  8611 00004B70 88DA                    	mov	dl, bl
  8612 00004B72 80E30F                  	and	bl, 0Fh
  8613 00004B75 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8614 00004B7B A2[72A80000]            	mov	[msgBusNo+1], al
  8615 00004B80 88D3                    	mov	bl, dl
  8616 00004B82 C0EB04                  	shr	bl, 4
  8617 00004B85 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8618 00004B8B A2[71A80000]            	mov	[msgBusNo], al
  8619                                  
  8620                                  	;mov	ax, [ac97_NamBar]
  8621 00004B90 66A1[78AB0000]          	mov	ax, [NAMBAR]
  8622 00004B96 88C3                    	mov	bl, al
  8623 00004B98 88DA                    	mov	dl, bl
  8624 00004B9A 80E30F                  	and	bl, 0Fh
  8625 00004B9D 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8626 00004BA3 A2[9BA80000]            	mov	[msgNamBar+3], al
  8627 00004BA8 88D3                    	mov	bl, dl
  8628 00004BAA C0EB04                  	shr	bl, 4
  8629 00004BAD 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8630 00004BB3 A2[9AA80000]            	mov	[msgNamBar+2], al
  8631 00004BB8 88E3                    	mov	bl, ah
  8632 00004BBA 88DA                    	mov	dl, bl
  8633 00004BBC 80E30F                  	and	bl, 0Fh
  8634 00004BBF 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8635 00004BC5 A2[99A80000]            	mov	[msgNamBar+1], al
  8636 00004BCA 88D3                    	mov	bl, dl
  8637 00004BCC C0EB04                  	shr	bl, 4
  8638 00004BCF 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8639 00004BD5 A2[98A80000]            	mov	[msgNamBar], al
  8640                                  
  8641                                  	;mov	ax, [ac97_NabmBar]
  8642 00004BDA 66A1[7AAB0000]          	mov	ax, [NABMBAR]
  8643 00004BE0 88C3                    	mov	bl, al
  8644 00004BE2 88DA                    	mov	dl, bl
  8645 00004BE4 80E30F                  	and	bl, 0Fh
  8646 00004BE7 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8647 00004BED A2[ABA80000]            	mov	[msgNabmBar+3], al
  8648 00004BF2 88D3                    	mov	bl, dl
  8649 00004BF4 C0EB04                  	shr	bl, 4
  8650 00004BF7 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8651 00004BFD A2[AAA80000]            	mov	[msgNabmBar+2], al
  8652 00004C02 88E3                    	mov	bl, ah
  8653 00004C04 88DA                    	mov	dl, bl
  8654 00004C06 80E30F                  	and	bl, 0Fh
  8655 00004C09 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8656 00004C0F A2[A9A80000]            	mov	[msgNabmBar+1], al
  8657 00004C14 88D3                    	mov	bl, dl
  8658 00004C16 C0EB04                  	shr	bl, 4
  8659 00004C19 8A83[12A80000]          	mov	al, [ebx+hex_chars]
  8660 00004C1F A2[A8A80000]            	mov	[msgNabmBar], al
  8661                                  
  8662 00004C24 31C0                    	xor	eax, eax
  8663 00004C26 A0[80AB0000]            	mov	al, [ac97_int_ln_reg]
  8664 00004C2B B10A                    	mov	cl, 10
  8665 00004C2D F6F1                    	div	cl
  8666                                  	;add	[msgIRQ], ax
  8667 00004C2F 66053030                	add	ax, 3030h
  8668 00004C33 66A3[B4A80000]          	mov	[msgIRQ], ax
  8669                                  	;and	al, al
  8670 00004C39 3C30                    	cmp	al, 30h
  8671 00004C3B 750D                    	jne	short _w_ac97imsg_
  8672 00004C3D A0[B5A80000]            	mov	al, [msgIRQ+1]
  8673 00004C42 B420                    	mov	ah, ' '
  8674 00004C44 66A3[B4A80000]          	mov	[msgIRQ], ax
  8675                                  _w_ac97imsg_:
  8676                                  	sys	_msg, msgAC97Info, 255, 07h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00004C4A BB[23A80000]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00004C4F B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00004C54 BA07000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00004C59 B823000000          <1>  mov eax, %1
   112                              <1> 
   113 00004C5E CD40                <1>  int 40h
  8677                                  
  8678                                          ;retn
  8679                                  
  8680                                  ;-----------------------------------------------------------------------------
  8681                                  
  8682                                  write_VRA_info:
  8683                                  	sys	_msg, msgVRAheader, 255, 07h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00004C60 BB[3FA90000]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00004C65 B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00004C6A BA07000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00004C6F B823000000          <1>  mov eax, %1
   112                              <1> 
   113 00004C74 CD40                <1>  int 40h
  8684 00004C76 803D[85AB0000]00        	cmp	byte [vra], 0
  8685 00004C7D 7617                    	jna	short _w_VRAi_no
  8686                                  _w_VRAi_yes:
  8687                                  	sys	_msg, msgVRAyes, 255, 07h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00004C7F BB[4DA90000]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00004C84 B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00004C89 BA07000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00004C8E B823000000          <1>  mov eax, %1
   112                              <1> 
   113 00004C93 CD40                <1>  int 40h
  8688 00004C95 C3                      	retn
  8689                                  _w_VRAi_no:
  8690                                  	sys	_msg, msgVRAno, 255, 07h
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00004C96 BB[53A90000]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00004C9B B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00004CA0 BA07000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00004CA5 B823000000          <1>  mov eax, %1
   112                              <1> 
   113 00004CAA CD40                <1>  int 40h
  8691 00004CAC C3                      	retn
  8692                                  
  8693                                  ; 13/01/2025
  8694                                  ; ---------------------------------------------------------------------------
  8695                                  ; 25/11/2023
  8696                                  msg_no_vra:
  8697 00004CAD 0A0D                    		db 10, 13
  8698 00004CAF 4E6F20565241207375-     		db "No VRA support ! Only 48 kHZ sample rate supported !"
  8698 00004CB8 70706F72742021204F-
  8698 00004CC1 6E6C79203438206B48-
  8698 00004CCA 5A2073616D706C6520-
  8698 00004CD3 726174652073757070-
  8698 00004CDC 6F727465642021     
  8699 00004CE3 0A0D00                  		db 10, 13, 0
  8700                                  
  8701                                  
  8702                                  ; ---------------------------------------------------------------------------
  8703                                  ; 22/01/2025 - Check Update Events
  8704                                  ; ---------------------------------------------------------------------------
  8705                                  ; ref: playwav9.s (17/01/2025)
  8706                                  
  8707                                  ; =============== S U B R O U T I N E =======================================
  8708                                  
  8709                                  		; 16/02/2025 (tmp3play.s)
  8710                                  		; 10/02/2025 (twavply3.s)
  8711                                  		; 13/02/2025 (mp3play6.s)
  8712                                  		; 26/01/2025 (mp3play5.s)
  8713                                  		; 24/12/2024 (vgaplay.s)
  8714                                  		; 23/01/2025 (mp3play4.s)
  8715                                  		; 07/12/2024 (playwav9.s)
  8716                                  
  8717                                  checkUpdateEvents:
  8718 00004CE6 E8B4000000              		call	check4keyboardstop
  8719 00004CEB 7259                    		jc	short .c4ue_ok
  8720                                  
  8721 00004CED 50                      		push	eax ; *
  8722 00004CEE 09C0                    		or	eax, eax
  8723 00004CF0 747F                    		jz	short .c4ue_cpt
  8724                                  
  8725 00004CF2 3C20                    		cmp	al, 20h ; SPACE (spacebar) ; pause/play
  8726 00004CF4 7551                    		jne	short .c4ue_chk_s
  8727 00004CF6 803D[81AB0000]00        		cmp	byte [stopped], 0
  8728 00004CFD 7707                    		ja	short .c4ue_chk_ps
  8729                                  		; pause
  8730 00004CFF E84EEFFFFF              		call	audio_f_pause
  8731                                  
  8732 00004D04 EB6B                    		jmp	short .c4ue_cpt
  8733                                  .c4ue_chk_ps:
  8734 00004D06 803D[81AB0000]01        		cmp	byte [stopped], 1
  8735 00004D0D 7707                    		ja	short .c4ue_replay
  8736                                  		
  8737                                  		; continue to play (after a pause)
  8738 00004D0F E852EFFFFF              		call	audio_f_play
  8739 00004D14 EB5B                    		jmp	.c4ue_cpt
  8740                                  .c4ue_replay:
  8741 00004D16 58                      		pop	eax ; *
  8742 00004D17 58                      		pop	eax ; return address
  8743                                  	
  8744 00004D18 C605[81AB0000]00        		mov	byte [stopped], 0
  8745                                  
  8746                                  		; move to beginning
  8747                                  		;mov	eax, [stream_start]
  8748 00004D1F A1[64AB0000]            		mov	eax, [stream_begin] ; 1st [stream_pos] value
  8749 00004D24 A3[EC4A0500]            		mov	[stream_pos], eax
  8750 00004D29 A1[60AB0000]            		mov	eax, [stream_size]
  8751 00004D2E A3[F04A0500]            		mov	[bytes_left], eax
  8752                                  
  8753 00004D33 803D[98AB0000]00        		cmp	byte [interpolation], 0
  8754 00004D3A 7705                    		ja	short .c4ue_rp_indr
  8755                                  		;jmp	start.direct
  8756                                  		; 16/02/2025
  8757 00004D3C E90AB5FFFF              		jmp	replay.direct
  8758                                  .c4ue_rp_indr:
  8759                                  		;jmp	start.indirect
  8760                                  		; 16/02/2025
  8761 00004D41 E924B5FFFF              		jmp	replay.indirect
  8762                                  .c4ue_ok:
  8763 00004D46 C3                      		retn
  8764                                  .c4ue_chk_s:
  8765 00004D47 3C53                    		cmp	al, 'S'	; stop
  8766 00004D49 7510                    		jne	short .c4ue_chk_fb
  8767 00004D4B 803D[81AB0000]00        		cmp	byte [stopped], 0
  8768 00004D52 771D                    		ja	short .c4ue_cpt ; Already stopped/paused
  8769                                  .c4ue_stop:
  8770 00004D54 E8CDEEFFFF              		call	audio_f_stop
  8771 00004D59 EB16                    		jmp	short .c4ue_cpt
  8772                                  .c4ue_chk_fb:
  8773 00004D5B 3C46                    		cmp	al, 'F'
  8774 00004D5D 7507                    		jne	short .c4ue_chk_b
  8775                                  		;call	Player_ProcessKey_Forwards
  8776                                  		; 16/02/2025
  8777 00004D5F E89A000000              		call	move_forward
  8778 00004D64 EB0B                    		jmp	short .c4ue_cpt
  8779                                  .c4ue_chk_b:
  8780 00004D66 3C42                    		cmp	al, 'B'
  8781                                  		; 16/02/2025
  8782 00004D68 7507                    		jne	short .c4ue_cpt
  8783                                  		;call 	Player_ProcessKey_Backwards
  8784                                  		; 16/02/2025
  8785 00004D6A E8BC000000              		call	move_backward
  8786 00004D6F EB00                    		jmp	short .c4ue_cpt
  8787                                  
  8788                                  		; 16/02/2025
  8789                                  .c4ue_cpt:
  8790                                  		sys	_time, 4 ; get timer ticks (18.2 ticks/second)
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00004D71 BB04000000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105                              <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107                              <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00004D76 B80D000000          <1>  mov eax, %1
   112                              <1> 
   113 00004D7B CD40                <1>  int 40h
  8791                                  		
  8792 00004D7D 59                      		pop	ecx ; *
  8793 00004D7E 3B05[8CAB0000]          		cmp	eax, [timerticks]
  8794 00004D84 7407                    		je	short .c4ue_skip_utt
  8795                                  .c4ue_utt:	
  8796 00004D86 A3[8CAB0000]            		mov	[timerticks], eax
  8797 00004D8B EB04                    		jmp	short .c4ue_cpt_@
  8798                                  
  8799                                  .c4ue_skip_utt:
  8800 00004D8D 21C9                    		and	ecx, ecx
  8801 00004D8F 74B5                    		jz	short .c4ue_ok
  8802                                  .c4ue_cpt_@:
  8803 00004D91 803D[81AB0000]00        		cmp	byte [stopped], 0
  8804 00004D98 77AC                    		ja	short .c4ue_ok
  8805                                  	
  8806                                  		; 16/02/2025
  8807 00004D9A E9D1020000              		jmp	drawscopes
  8808                                  
  8809                                  
  8810                                  ; =============== S U B R O U T I N E =======================================
  8811                                  
  8812                                  ; --------------------------------------------------------
  8813                                  ; 22/01/2025 - Check for Keyboard Stop (Request)
  8814                                  ; --------------------------------------------------------
  8815                                  
  8816                                  		; 16/02/2025
  8817                                  		; 23/01/2025
  8818                                  		; 22/01/2025
  8819                                  check4keyboardstop:
  8820 00004D9F B411                    		mov	ah, 11h
  8821                                  		; (TRDOS 386 keyboard interrupt)
  8822 00004DA1 CD32                    		int	32h
  8823                                  		;clc
  8824 00004DA3 7438                    		jz	short .cksr
  8825                                  
  8826 00004DA5 B410                    		mov	ah, 10h
  8827 00004DA7 CD32                    		int	32h
  8828                                  
  8829                                  		; 13/02/2025
  8830                                  		; 23/01/2025
  8831                                  		;;;;
  8832                                  .clear_keyb_buf:
  8833 00004DA9 50                      		push	eax ; *
  8834                                  		; clear keyboard buffer
  8835 00004DAA B411                    		mov	ah, 11h
  8836 00004DAC CD32                    		int	32h
  8837 00004DAE 7407                    		jz	short .c4ks
  8838 00004DB0 B410                    		mov	ah, 10h
  8839 00004DB2 CD32                    		int	32h
  8840 00004DB4 5A                      		pop	edx ; *
  8841 00004DB5 EBF2                    		jmp	short .clear_keyb_buf
  8842                                  
  8843                                  		; TRDOS 386 system call
  8844                                  		; sysstdio
  8845                                  		; BL = 1 -> read a character on stdin (no wait)
  8846                                  		;sys	_stdio, 1
  8847                                  		;and	eax, eax
  8848                                  		;jz	short .cksr
  8849                                  
  8850                                  		; 23/01/2025
  8851                                  .c4ks:
  8852 00004DB7 58                      		pop	eax ; *
  8853                                  		;;;;
  8854                                  
  8855                                  		;;;
  8856                                  		; (change PCM out volume)
  8857 00004DB8 3C2B                    		cmp	al, '+'
  8858 00004DBA 750D                    		jne	short .p_1
  8859                                  	
  8860 00004DBC A0[C4AA0000]            		mov	al, [volume_level]
  8861 00004DC1 3C00                    		cmp	al, 0
  8862 00004DC3 761A                    		jna	short .p_3
  8863 00004DC5 FEC8                    		dec	al
  8864 00004DC7 EB0F                    		jmp	short .p_2
  8865                                  .p_1:
  8866 00004DC9 3C2D                    		cmp	al, '-'
  8867 00004DCB 7513                    		jne	short .p_4
  8868                                  
  8869 00004DCD A0[C4AA0000]            		mov	al, [volume_level]
  8870 00004DD2 3C1F                    		cmp	al, 31
  8871 00004DD4 7309                    		jnb	short .p_3
  8872 00004DD6 FEC0                    		inc	al
  8873                                  .p_2:
  8874                                  		; 16/02/2025
  8875 00004DD8 E89DEEFFFF              		call	SetMasterVolume
  8876                                  .cksr:
  8877 00004DDD 31C0                    		xor	eax, eax
  8878                                  .p_3:
  8879 00004DDF C3                      		retn
  8880                                  .p_4:
  8881                                  		;cmp	ah, 01 	; ESC
  8882 00004DE0 663D1B01                		cmp	ax, 011Bh ; ESC
  8883 00004DE4 7416                        		je	short .p_q
  8884                                  		;cmp	al, 03h	; CTRL+C
  8885 00004DE6 663D032E                		cmp	ax, 2E03h ; CTRL+C
  8886 00004DEA 7410                    		je	short .p_q
  8887                                  
  8888 00004DEC 3C20                    		cmp	al, 20h
  8889 00004DEE 740D                    		je	short .p_r
  8890                                  
  8891 00004DF0 3C0D                    		cmp	al, 0Dh ; CR/ENTER
  8892 00004DF2 7409                    		je	short .p_r
  8893                                  
  8894 00004DF4 24DF                    		and	al, 0DFh
  8895                                  
  8896                                  		;cmp	al, 'B'
  8897                                  		;je	short .p_r
  8898                                  		;cmp	al, 'F'
  8899                                  		;je	short .p_r
  8900                                  
  8901 00004DF6 3C51                    		cmp	al, 'Q'
  8902 00004DF8 7402                    		je	short .p_q
  8903                                  
  8904 00004DFA F8                      		clc
  8905 00004DFB C3                      		retn
  8906                                  
  8907                                  .p_q:
  8908 00004DFC F9                      		stc
  8909                                  .p_r:
  8910 00004DFD C3                      		retn
  8911                                  
  8912                                  
  8913                                  ; --------------------------------------------------------
  8914                                  ; 22/01/2025 - Goto Forward approx. 5 seconds
  8915                                  ; --------------------------------------------------------
  8916                                  
  8917                                  		; 16/02/2025
  8918                                  move_forward:
  8919                                  		; 23/01/2025
  8920                                  		; 22/01/2025
  8921                                  ;Player_ProcessKey_Forwards:
  8922                                  		;; 5 seconds forward
  8923                                  		;;;;
  8924                                  		;xor	ebp, ebp ; 0
  8925                                  		;;;;
  8926 00004DFE A0[86AB0000]            		mov	al, [srb]
  8927 00004E03 50                      		push	eax ; *
  8928 00004E04 A1[68AB0000]            		mov	eax, [fb_count]
  8929 00004E09 8B0D[60AB0000]          		mov	ecx, [stream_size]
  8930 00004E0F 89CA                    		mov	edx, ecx
  8931 00004E11 2B15[F04A0500]          		sub	edx, [bytes_left]
  8932 00004E17 01D0                    		add	eax, edx
  8933 00004E19 720C                    		jc	short .ppk_f@
  8934                                  		; 23/01/2025
  8935 00004E1B 89CA                    		mov	edx, ecx
  8936 00004E1D 2B15[68AB0000]          		sub	edx, [fb_count]
  8937 00004E23 39D0                    		cmp	eax, edx
  8938                                  		;jna	short Player_ProcessKey_set_pos
  8939                                  		; 16/02/2025
  8940 00004E25 7626                    		jna	short move_fwbw_set_pos
  8941                                  .ppk_f@:
  8942 00004E27 89D0                    		mov	eax, edx ; offset
  8943                                  		;jmp	short Player_ProcessKey_set_pos
  8944                                  		; 16/02/2025
  8945 00004E29 EB22                    		jmp 	short move_fwbw_set_pos
  8946                                  
  8947                                  ; --------------------------------------------------------
  8948                                  ; 22/01/2025 - Goto Backward approx. 5 seconds
  8949                                  ; --------------------------------------------------------
  8950                                  
  8951                                  		; 16/02/2025
  8952                                  move_backward:
  8953                                  		; 22/01/2025
  8954                                  ;Player_ProcessKey_Backwards:
  8955                                  		;; 5 seconds backward
  8956                                  		; 23/01/2025
  8957                                  		;;;;
  8958                                  		;xor	ebp, 1
  8959                                  		;;;;
  8960 00004E2B A0[86AB0000]            		mov	al, [srb]
  8961 00004E30 50                      		push	eax ; *
  8962 00004E31 8B15[68AB0000]          		mov	edx, [fb_count]
  8963 00004E37 8B0D[60AB0000]          		mov	ecx, [stream_size]
  8964                                  			; the 1st/init value of [bytes_left]
  8965 00004E3D 89C8                    		mov	eax, ecx
  8966 00004E3F 2B05[F04A0500]          		sub	eax, [bytes_left]
  8967 00004E45 7604                    		jna	short .ppk_bw@
  8968 00004E47 29D0                    		sub	eax, edx
  8969                                  		;jnc	short Player_ProcessKey_set_pos
  8970                                  		; 16/02/2025
  8971 00004E49 7302                    		jnc	short move_fwbw_set_pos
  8972                                  .ppk_bw@:
  8973 00004E4B 31C0                    		xor	eax, eax ; offset
  8974                                  
  8975                                  ; --------------------------------------------------------
  8976                                  
  8977                                  		; 16/02/2025
  8978                                  move_fwbw_set_pos:
  8979                                  		; 23/01/2025
  8980                                  		; 22/01/2025
  8981                                  ;Player_ProcessKey_set_pos:
  8982 00004E4D 5B                      		pop	ebx ; *
  8983                                  		; skip position change if audio interrupt occurs
  8984                                  		; during this f/b procedure
  8985                                  		; (because [bytes_left] would be changed)
  8986 00004E4E 803D[86AB0000]00        		cmp	byte [srb], 0
  8987 00004E55 7605                    		jna	short .ppk_sp@ ; proper to change
  8988 00004E57 80FB00                  		cmp	bl, 0
  8989 00004E5A 7628                    		jna	short .ppk_sp@@@
  8990                                  		; [srb] was 1 when starting this f/b procedure
  8991                                  		; (so, there is not a conflict)	
  8992                                  .ppk_sp@:
  8993                                  		; pause playback, pause/start audio interrupt
  8994 00004E5C 51                      		push	ecx
  8995 00004E5D 50                      		push	eax
  8996 00004E5E E8EFEDFFFF              		call	audio_f_pause
  8997 00004E63 58                      		pop	eax
  8998 00004E64 59                      		pop	ecx
  8999                                  
  9000 00004E65 8B1D[64AB0000]          		mov	ebx, [stream_begin] 
  9001                                  				; the 1st/init value of [stream_pos]
  9002 00004E6B 01C3                    		add	ebx, eax
  9003 00004E6D 891D[EC4A0500]          		mov	[stream_pos], ebx
  9004                                  		; ecx = [stream_size]
  9005                                  		; eax = offset
  9006 00004E73 29C1                    		sub	ecx, eax
  9007 00004E75 7302                    		jnc	short .ppk_sp@@
  9008 00004E77 31C9                    		xor	ecx, ecx
  9009                                  .ppk_sp@@:
  9010                                  		; 23/01/2025
  9011 00004E79 890D[F04A0500]          		mov	[bytes_left], ecx
  9012                                  
  9013                                  		;;;;
  9014                                  		; continue to playback
  9015 00004E7F E8E2EDFFFF              		call	audio_f_play
  9016                                  .ppk_sp@@@:
  9017                                  		; clear keyboard buffer
  9018                                  		;call	clear_keyb_buf
  9019                                  ; 23/01/2025
  9020                                  .clear_keyb_buf:
  9021                                  		; clear keyboard buffer
  9022 00004E84 B401                    		mov	ah, 1
  9023 00004E86 CD32                    		int	32h
  9024 00004E88 7406                    		jz	short .ppk_sp_ok
  9025 00004E8A B400                    		mov	ah, 0
  9026 00004E8C CD32                    		int	32h
  9027 00004E8E EBF4                    		jmp	short .clear_keyb_buf
  9028                                  
  9029                                  .ppk_sp_ok:
  9030 00004E90 C3                      		retn
  9031                                  
  9032                                  
  9033                                  ; =============== S U B R O U T I N E =======================================
  9034                                  
  9035                                  		; 25/01/2025
  9036                                  		; 21/12/2024
  9037                                  set_text_mode:
  9038 00004E91 30E4                    		xor    ah, ah
  9039 00004E93 B003                    		mov    al, 3
  9040                                   		;int   10h ; al = 03h text mode, int 10 video
  9041 00004E95 CD31                    		int    31h ; TRDOS 386 - Video interrupt
  9042 00004E97 C3                      		retn
  9043                                  
  9044                                  ; =============== S U B R O U T I N E =======================================
  9045                                  
  9046                                  		; 16/02/2025 (tmp3play.s)
  9047                                  		; 13/02/2025 (mp3play6.s)
  9048                                  		; 30/12/2024 (cgaplay.s)
  9049                                  		; 26/01/2025
  9050                                  		; 25/01/2025 (mp3play5.s) -graphics/VGA mode-
  9051                                  		; 21/12/2024 (vgaplay.s)
  9052                                  		; 22/01/2025 (mp3play4.s) -text mode-
  9053                                  		; 21/01/2025
  9054                                  SetTotalTime:
  9055                                  		;;;; 22/01/2025
  9056 00004E98 8B1D[C4BB0000]          		mov	ebx, [mp3_bit_rate] ; bit/s
  9057 00004E9E 89D8                    		mov	eax, ebx
  9058 00004EA0 C1E803                  		shr	eax, 3 ; byte/s
  9059 00004EA3 BA05000000              		mov	edx, 5
  9060 00004EA8 F7E2                    		mul	edx
  9061                                  
  9062 00004EAA F735[A4BB0000]          		div	dword [mp3_src_frame_size]
  9063                                  		; eax = count of frames per 5 seconds
  9064 00004EB0 21D2                    		and	edx, edx
  9065 00004EB2 7401                    		jz	short .skip@
  9066 00004EB4 40                      		inc	eax
  9067                                  .skip@:
  9068 00004EB5 F725[A4BB0000]          		mul	dword [mp3_src_frame_size]
  9069 00004EBB A3[68AB0000]            		mov	[fb_count], eax  ; forward/backward count
  9070                                  		;;;;
  9071                                  
  9072 00004EC0 A1[60AB0000]            		mov	eax, [stream_size] ; bytes
  9073 00004EC5 BA08000000              		mov	edx, 8 ; 1 byte = 8 bits
  9074 00004ECA F7E2                     		mul	edx
  9075                                  		;div	dword [mp3_bit_rate] ; num of bits per sec
  9076 00004ECC F7F3                    		div	ebx ; 22/01/2025
  9077                                  		; eax = total seconds
  9078                                  
  9079 00004ECE B33C                    		mov	bl, 60
  9080 00004ED0 F6F3                    		div	bl
  9081                                  
  9082                                  		; al = minutes, ah = seconds
  9083                                  	
  9084                                  		; 15/02/2025
  9085 00004ED2 50                      		push	eax
  9086 00004ED3 B30A                    		mov	bl, 10
  9087 00004ED5 30E4                    		xor	ah, ah
  9088 00004ED7 F6F3                    		div	bl
  9089 00004ED9 80C430                  		add	ah, '0'
  9090 00004EDC 8825[28A90000]          		mov	[msgMinSec+1], ah
  9091 00004EE2 20C0                    		and	al, al
  9092 00004EE4 740D                    		jz	short .skip@@
  9093 00004EE6 28E4                    		sub	ah, ah
  9094 00004EE8 F6F3                    		div	bl
  9095 00004EEA 80C430                  		add	ah, '0'
  9096 00004EED 8825[27A90000]          		mov	[msgMinSec], ah
  9097                                  .skip@@:
  9098 00004EF3 58                      		pop	eax
  9099 00004EF4 88E0                    		mov	al, ah
  9100 00004EF6 30E4                    		xor	ah, ah
  9101 00004EF8 F6F3                    		div	bl
  9102 00004EFA 80C430                  		add	ah, '0'
  9103 00004EFD 8825[2BA90000]          		mov	[msgMinSec+4], ah
  9104 00004F03 08C0                    		or	al, al
  9105 00004F05 740D                    		jz	short .return
  9106 00004F07 28E4                    		sub	ah, ah
  9107 00004F09 F6F3                    		div	bl
  9108 00004F0B 80C430                  		add	ah, '0'
  9109 00004F0E 8825[2AA90000]          		mov	[msgMinSec+3], ah
  9110                                  .return:
  9111 00004F14 C3                      		retn
  9112                                  	
  9113                                  
  9114                                  ; =============== S U B R O U T I N E =======================================
  9115                                  
  9116                                  		; 15/02/2025
  9117                                  write_mp3_file_info:
  9118                                  		sys	_msg, msgFileName, 255, 0Fh
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00004F15 BB[B9A80000]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00004F1A B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00004F1F BA0F000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00004F24 B823000000          <1>  mov eax, %1
   112                              <1> 
   113 00004F29 CD40                <1>  int 40h
  9119                                  		sys	_msg, mp3_file_name, 255, 0Fh
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00004F2B BB[00550500]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00004F30 B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00004F35 BA0F000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00004F3A B823000000          <1>  mov eax, %1
   112                              <1> 
   113 00004F3F CD40                <1>  int 40h
  9120                                  write_sample_rate:
  9121 00004F41 A1[BCBB0000]            		mov	eax, [mp3_sample_rate]
  9122                                  		; ax = sample rate (hertz)
  9123 00004F46 31D2                    		xor	edx, edx
  9124 00004F48 66B90A00                		mov	cx, 10
  9125 00004F4C 66F7F1                  		div	cx
  9126 00004F4F 0015[DAA80000]          		add	[msgHertz+4], dl
  9127 00004F55 29D2                    		sub	edx, edx
  9128 00004F57 66F7F1                  		div	cx
  9129 00004F5A 0015[D9A80000]          		add	[msgHertz+3], dl
  9130 00004F60 29D2                    		sub	edx, edx
  9131 00004F62 66F7F1                  		div	cx
  9132 00004F65 0015[D8A80000]          		add	[msgHertz+2], dl
  9133 00004F6B 29D2                    		sub	edx, edx
  9134 00004F6D 66F7F1                  		div	cx
  9135 00004F70 0015[D7A80000]          		add	[msgHertz+1], dl
  9136 00004F76 0005[D6A80000]          		add	[msgHertz], al
  9137                                  	
  9138                                  		sys	_msg, msgSampleRate, 255, 0Fh
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00004F7C BB[C7A80000]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00004F81 B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00004F86 BA0F000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00004F8B B823000000          <1>  mov eax, %1
   112                              <1> 
   113 00004F90 CD40                <1>  int 40h
  9139                                  
  9140 00004F92 A1[C4BB0000]            		mov     eax, [mp3_bit_rate]
  9141 00004F97 31D2                                    xor     edx, edx
  9142 00004F99 B9E8030000                              mov     ecx, 1000
  9143 00004F9E F7F1                                    div     ecx
  9144 00004FA0 BF[54550500]            		mov	edi, txtSize
  9145 00004FA5 89E5                    		mov	ebp, esp
  9146 00004FA7 B90A000000              		mov	ecx, 10
  9147                                  kbits_1:
  9148 00004FAC 31D2                      		xor	edx, edx
  9149 00004FAE F7F1                    		div	ecx
  9150 00004FB0 80C230                  		add	dl, 30h ; '0'
  9151 00004FB3 52                      		push	edx
  9152 00004FB4 09C0                    		or	eax, eax
  9153 00004FB6 75F4                    		jnz	short kbits_1
  9154                                  kbits_2:
  9155 00004FB8 5A                      		pop	edx
  9156 00004FB9 88D0                    		mov	al, dl
  9157 00004FBB AA                      		stosb
  9158 00004FBC 39EC                    		cmp	esp, ebp
  9159 00004FBE 75F8                     		jne	short kbits_2
  9160 00004FC0 B000                    		mov	al, 0
  9161 00004FC2 AA                      		stosb
  9162                                  
  9163                                  		sys	_msg, msgKBitRate, 255, 0Fh
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00004FC3 BB[DFA80000]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00004FC8 B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00004FCD BA0F000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00004FD2 B823000000          <1>  mov eax, %1
   112                              <1> 
   113 00004FD7 CD40                <1>  int 40h
  9164                                  
  9165                                  		sys	_msg, txtSize, 255, 0Fh
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00004FD9 BB[54550500]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00004FDE B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00004FE3 BA0F000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00004FE8 B823000000          <1>  mov eax, %1
   112                              <1> 
   113 00004FED CD40                <1>  int 40h
  9166                                  
  9167                                  		sys	_msg, msgKBits, 255, 0Fh
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00004FEF BB[ECA80000]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00004FF4 B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00004FF9 BA0F000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00004FFE B823000000          <1>  mov eax, %1
   112                              <1> 
   113 00005003 CD40                <1>  int 40h
  9168                                  
  9169                                  		sys	_msg, msgPlayback, 255, 0Fh
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00005005 BB[F4A80000]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 0000500A B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 0000500F BA0F000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00005014 B823000000          <1>  mov eax, %1
   112                              <1> 
   113 00005019 CD40                <1>  int 40h
  9170                                  
  9171 0000501B BE[08A90000]            		mov	esi, msg16Bits
  9172                                  		
  9173                                  		; 17/02/2025
  9174                                  		;	[mp3_bytes_per_sample] = 2
  9175                                  		;
  9176                                  		;cmp	byte [mp3_bytes_per_sample], 2
  9177                                  		;je	short wsr_1
  9178                                  		;mov	esi, msg8Bits
  9179                                  wsr_1:
  9180                                  		sys	_msg, esi, 255, 0Fh
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00005020 89F3                <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00005022 B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00005027 BA0F000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 0000502C B823000000          <1>  mov eax, %1
   112                              <1> 
   113 00005031 CD40                <1>  int 40h
  9181                                  
  9182 00005033 BE[01A90000]            		mov	esi, msgMono
  9183 00005038 803D[C8BB0000]01        		cmp	byte [mp3_num_channels], 1
  9184 0000503F 7405                    		je	short wsr_2
  9185 00005041 BE[12A90000]            		mov	esi, msgStereo
  9186                                  wsr_2:
  9187                                  		sys	_msg, esi, 255, 0Fh
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00005046 89F3                <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00005048 B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 0000504D BA0F000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00005052 B823000000          <1>  mov eax, %1
   112                              <1> 
   113 00005057 CD40                <1>  int 40h
  9188                                  
  9189                                  		sys	_msg, msgDuration, 255, 0Fh
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00005059 BB[1BA90000]        <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 0000505E B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00005063 BA0F000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00005068 B823000000          <1>  mov eax, %1
   112                              <1> 
   113 0000506D CD40                <1>  int 40h
  9190 0000506F C3                      		retn
  9191                                  
  9192                                  ;=============================================================================
  9193                                  ; drawscopes - draw wave/voice sample scopes
  9194                                  ;=============================================================================
  9195                                  
  9196                                  	; 15/02/2025	
  9197                                  	; 10/02/2025 - twavply3.s (32 bit)
  9198                                  	; 09/02/2025 - twavplay.asm (16bit)
  9199                                  	; 05/02/2025 - twavplay2.s
  9200                                  drawscopes:
  9201                                  	;call	get_current_sound_data
  9202                                  	; 15/02/2025
  9203 00005070 FF15[04100600]          	call	dword [get_sound_data]
  9204 00005076 BE[00200600]            	mov	esi, sounddata
  9205                                  
  9206 0000507B 31C9                    	xor     ecx, ecx
  9207 0000507D 31D2                    	xor     edx, edx
  9208 0000507F 31FF                    	xor	edi, edi
  9209                                  drawscope0:
  9210 00005081 66AD                    	lodsw
  9211 00005083 80F480                  	xor	ah, 80h
  9212 00005086 0FB6DC                  	movzx	ebx, ah	; Left Channel
  9213 00005089 D1E3                    	shl	ebx, 1
  9214 0000508B 668B83[004B0500]        	mov	ax, [RowOfs+ebx]
  9215 00005092 668987[004D0500]        	mov	[NewScope_L+edi], ax
  9216 00005099 30FF                    	xor	bh, bh
  9217 0000509B 66AD                    	lodsw
  9218 0000509D 80F480                  	xor	ah, 80h
  9219 000050A0 88E3                    	mov	bl, ah	; Right Channel
  9220 000050A2 D1E3                    	shl	ebx, 1
  9221 000050A4 668B83[004B0500]        	mov	ax, [RowOfs+ebx]
  9222 000050AB 668987[004F0500]        	mov	[NewScope_R+edi], ax
  9223 000050B2 6683C702                	add	di, 2
  9224 000050B6 FEC1                    	inc	cl
  9225 000050B8 75C7                    	jnz	short drawscope0
  9226                                  
  9227 000050BA 66BAC403                	mov	dx, 3C4h
  9228                                  	;mov	ax, 0802h
  9229                                          ;out	dx, ax
  9230 000050BE 66BB0208                        mov	bx, 0802h
  9231 000050C2 B403                    	mov	ah, 3 ; outw
  9232 000050C4 CD34                    	int	34h
  9233                                  
  9234                                  	;mov	dx, 3CEh
  9235 000050C6 B2CE                    	mov	dl, 0CEh
  9236 000050C8 B008                    	mov	al, 08h
  9237                                         ;out	dx, al
  9238 000050CA B401                            mov	ah, 1 ; outb
  9239 000050CC CD34                    	int	34h
  9240                                  
  9241 000050CE 42                      	inc	edx
  9242                                  
  9243 000050CF 31F6                    	xor	esi, esi
  9244 000050D1 BB45060A00              	mov	ebx, 0A0645h
  9245                                  drawscopel4:
  9246 000050D6 B080                    	mov     al, 80h
  9247                                  drawscopel2:
  9248 000050D8 50                      	push	eax ; **
  9249 000050D9 52                      	push	edx ; *
  9250                                  	;out	dx, al
  9251 000050DA B401                    	mov	ah, 1 ; outb
  9252 000050DC CD34                    	int	34h
  9253                                  
  9254                                  	;mov	ecx, 32
  9255 000050DE B120                    	mov	cl, 32
  9256 000050E0 66B800FF                	mov	ax, 0FF00h
  9257                                  drawscopel3:
  9258 000050E4 668BBE[00510500]                mov	di, [OldScope_L+esi]
  9259 000050EB 668B96[004D0500]        	mov	dx, [NewScope_L+esi]
  9260 000050F2 39D7                            cmp	edi, edx
  9261 000050F4 740D                            je	short drawscopef3
  9262 000050F6 88043B                  	mov	[ebx+edi], al ; L
  9263 000050F9 882413                  	mov	[ebx+edx], ah ; L
  9264 000050FC 668996[00510500]                mov     [OldScope_L+esi], dx
  9265                                  drawscopef3:
  9266 00005103 668BBE[00530500]        	mov	di, [OldScope_R+esi]
  9267 0000510A 668B96[004F0500]        	mov	dx, [NewScope_R+esi]
  9268 00005111 39D7                    	cmp	edi, edx
  9269 00005113 740F                    	je	short drawscopef4
  9270 00005115 88443B26                	mov	[ebx+edi+38], al ; R
  9271 00005119 88641326                	mov	[ebx+edx+38], ah ; R
  9272 0000511D 668996[00530500]        	mov     [OldScope_R+esi], dx
  9273                                  drawscopef4:
  9274 00005124 83C610                  	add	esi, 2*8
  9275 00005127 43                      	inc	ebx
  9276 00005128 E2BA                    	loop    drawscopel3
  9277                                  
  9278 0000512A 5A                              pop     edx ; *
  9279 0000512B 58                              pop     eax ; **
  9280 0000512C 81EEFE010000            	sub	esi, 2*256-2
  9281 00005132 83EB20                  	sub	ebx, 32
  9282 00005135 D0E8                            shr     al, 1
  9283 00005137 759F                            jnz	short drawscopel2
  9284 00005139 F8                      	clc
  9285 0000513A C3                              retn
  9286                                  
  9287                                  
  9288                                  ; =============== S U B R O U T I N E =======================================
  9289                                  
  9290                                  ; --------------------------------------------------------
  9291                                  ; 15/02/2025 - Get Current Sound Data For Graphics
  9292                                  ; --------------------------------------------------------
  9293                                  
  9294                                  	; 15/02/2025 (tmp3play.s)
  9295                                  get_ac97_sound_data:
  9296                                  	; [sd_count] = 1024
  9297                                  	sys	_audio,	0F00h, [sd_count], sounddata
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 0000513B BB000F0000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 00005140 8B0D[6CAB0000]      <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00005146 BA[00200600]        <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 0000514B B820000000          <1>  mov eax, %1
   112                              <1> 
   113 00005150 CD40                <1>  int 40h
  9298 00005152 C3                      	retn
  9299                                  
  9300                                  ; --------------------------------------------------------
  9301                                  
  9302                                  	; 15/02/2025 (tmp3play.s)
  9303                                  get_sb16_sound_data:
  9304 00005153 BE[00240600]            	mov	esi, sounddata2
  9305                                  	sys	_audio,	0F00h, [sd_count], esi
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 00005158 BB000F0000          <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 0000515D 8B0D[6CAB0000]      <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 00005163 89F2                <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 00005165 B820000000          <1>  mov eax, %1
   112                              <1> 
   113 0000516A CD40                <1>  int 40h
  9306 0000516C BF[00200600]            	mov	edi, sounddata
  9307 00005171 FF25[00100600]          	jmp	dword [sounddata_copy]
  9308                                  
  9309                                  ; --------------------------------------------------------
  9310                                  
  9311                                  ;	; 15/02/2025
  9312                                  ;	; 10/02/2025 - twavply3.s (32bit)
  9313                                  ;	; 09/02/2025 - twavplay.asm (16bit)
  9314                                  ;sdc_16bit_stereo:
  9315                                  ;	; esi = source/dma sound data buffer address
  9316                                  ;	; ecx =	load (source) count = 1024
  9317                                  ;	; edi = target sound data buffer
  9318                                  ;	;shr	ecx, 1
  9319                                  ;	;rep	movsw
  9320                                  ;	shr	ecx, 2
  9321                                  ;	rep	movsd
  9322                                  ;	retn
  9323                                  
  9324                                  ; --------------------------------------------------------
  9325                                  
  9326                                  	; 15/02/2025
  9327                                  	; 10/02/2025 - twavply3.s (32bit)
  9328                                  	; 09/02/2025 - twavplay.asm (16bit)
  9329                                  sdc_16bit_mono:
  9330                                  	; esi = source/dma sound data buffer address
  9331                                  	; ecx = load (source) count = 512
  9332                                  	; edi = target sound data buffer
  9333 00005177 D1E9                    	shr	ecx, 1
  9334                                  sdc_16bm_loop:
  9335 00005179 66AD                    	lodsw
  9336 0000517B 66AB                    	stosw
  9337 0000517D 66AB                    	stosw
  9338 0000517F E2F8                    	loop	sdc_16bm_loop
  9339 00005181 C3                      	retn
  9340                                  
  9341                                  ; --------------------------------------------------------
  9342                                  
  9343                                  	; 15/02/2025
  9344                                  	; 10/02/2025 - twavply3.s (32bit)
  9345                                  	; 09/02/2025 - twavplay.asm (16bit)
  9346                                  sdc_8bit_stereo:
  9347                                  	; esi = source/dma sound data buffer address
  9348                                  	; ecx = load (source) count = 512
  9349                                  	; edi = target sound data buffer
  9350                                  
  9351                                  	; convert to 16 bit sample
  9352                                  sdc_8bs_loop:
  9353 00005182 AC                      	lodsb
  9354 00005183 2C80                    	sub	al, 80h ; middle = 0, min = -128, max = 127
  9355 00005185 66C1E008                	shl	ax, 8
  9356 00005189 66AB                    	stosw
  9357 0000518B E2F5                    	loop	sdc_8bs_loop
  9358 0000518D C3                      	retn
  9359                                  
  9360                                  ; --------------------------------------------------------
  9361                                  
  9362                                  	; 15/02/2025
  9363                                  	; 10/02/2025 - twavply3.s (32bit)
  9364                                  	; 09/02/2025 - twavplay.asm (16bit)
  9365                                  sdc_8bit_mono:
  9366                                  	; esi = source/dma sound data buffer
  9367                                  	; ecx = load (source) count = 256
  9368                                  	; edi = target sound data buffer
  9369                                  
  9370                                  	; convert to 16 bit sample
  9371                                  sdc_8bm_loop:
  9372 0000518E AC                      	lodsb
  9373 0000518F 2C80                    	sub	al, 80h ; middle = 0, min = -128, max = 127
  9374 00005191 66C1E008                	shl	ax, 8
  9375 00005195 66AB                    	stosw	; L
  9376                                  	; convert to stereo
  9377 00005197 66AB                    	stosw	; R
  9378 00005199 E2F3                    	loop	sdc_8bm_loop
  9379 0000519B C3                      	retn
  9380                                  
  9381                                  ; =============== S U B R O U T I N E =======================================
  9382                                  
  9383                                  		; 16/02/2025
  9384                                  print_err_msg:
  9385                                  		sys	_msg, esi, 255, 0Ch
    98                              <1> 
    99                              <1> 
   100                              <1> 
   101                              <1> 
   102                              <1>  %if %0 >= 2
   103 0000519C 89F3                <1>  mov ebx, %2
   104                              <1>  %if %0 >= 3
   105 0000519E B9FF000000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   107 000051A3 BA0C000000          <1>  mov edx, %4
   108                              <1>  %endif
   109                              <1>  %endif
   110                              <1>  %endif
   111 000051A8 B823000000          <1>  mov eax, %1
   112                              <1> 
   113 000051AD CD40                <1>  int 40h
  9386 000051AF F9                      		stc	; (needed)	
  9387 000051B0 C3                      		retn
  9388                                  
  9389                                  ;-----------------------------------------------------------------------------
  9390                                  
  9391                                  ; 16/02/2025
  9392                                  ; 10/02/2025 (twavply3.s)
  9393                                  ;=============================================================================
  9394                                  ;	Load IFF/ILBM files for VGA 640x480x16 graphics mode
  9395                                  ;=============================================================================
  9396                                  
  9397                                  ; EX1B.ASM (21/6/1994, Carlos Hasan; MSDOS, 'RUNME.EXE', 'TNYPL211')
  9398                                  
  9399                                  ; 21/10/2017 (TRDOS 386, 'tmodplay.s', Erdogan Tan, NASM syntax)
  9400                                  
  9401                                  ;-----------------------------------------------------------------------------
  9402                                  ; EQUATES AND STRUCTURES
  9403                                  ;-----------------------------------------------------------------------------
  9404                                  
  9405                                  ID_FORM equ 4D524F46h		; IFF/ILBM chunk IDs
  9406                                  ID_ILBM equ 4D424C49h
  9407                                  ID_BMHD equ 44484D42h
  9408                                  ID_CMAP equ 50414D43h
  9409                                  ID_BODY equ 59444F42h
  9410                                  
  9411                                  struc Form			; IFF/ILBM header file format
  9412 00000000 ????????                  .ID:		resd 1
  9413 00000004 ????????                  .Length:	resd 1
  9414 00000008 ????????                  .Type:	resd 1
  9415                                    .size:
  9416                                  endstruc
  9417                                  
  9418                                  struc Chunk			; IFF/ILBM header chunk format
  9419 00000000 ????????                  .ID:		resd 1
  9420 00000004 ????????                  .Length:	resd 1
  9421                                    .size:
  9422                                  endstruc
  9423                                  
  9424                                  struc BMHD			; IFF/ILBM BMHD chunk format
  9425 00000000 ????                      .Width: 	resw 1
  9426 00000002 ????                      .Height:	resw 1
  9427 00000004 ????                      .PosX:	resw 1
  9428 00000006 ????                      .PosY:	resw 1
  9429 00000008 ??                        .Planes:	resb 1
  9430 00000009 ??                        .Masking:	resb 1
  9431 0000000A ??                        .Compression:	resb 1
  9432 0000000B ??                        .Pad:		resb 1
  9433 0000000C ????                      .Transparent:	resw 1
  9434 0000000E ??                        .AspectX	resb 1
  9435 0000000F ??                        .AspectY:	resb 1
  9436 00000010 ????                      .PageWidth:	resw 1
  9437 00000012 ????                      .PageHeight:	resw 1
  9438                                    .size:
  9439                                  endstruc
  9440                                  
  9441                                  struc CMAP			; IFF/ILBM CMAP chunk format
  9442 00000000 <res 300h>                .Colors:	resb 768
  9443                                    .size:
  9444                                  endstruc
  9445                                  
  9446                                  ;------------------------------------------------------------------------------
  9447                                  ; bswap - macro to reverse the byte order of a 32-bit register, converting
  9448                                  ;         a value in little/big endian form to big/little endian form.
  9449                                  ;------------------------------------------------------------------------------
  9450                                  
  9451                                  %macro	bswap   1
  9452                                  	xchg    al, ah
  9453                                  	rol     eax, 16
  9454                                  	xchg    al, ah
  9455                                  %endmacro
  9456                                  
  9457                                  ; ---------------------------------------------------------------------------
  9458                                  ; 25/01/2025 - Player Window Display Functions
  9459                                  ; ---------------------------------------------------------------------------
  9460                                  ; ref: vgaplay2.s (18/01/2025)
  9461                                  
  9462                                  ; =============== S U B R O U T I N E =======================================
  9463                                  
  9464                                  		; 15/02/2025
  9465                                  drawplayingscreen:
  9466                                  		; 10/02/2025 - twavply3.s
  9467                                  		; 05/02/2025 - twavply2.s
  9468                                  putlbm:
  9469 000051B1 BE[C0520000]            		mov	esi, LOGO_ADDRESS
  9470                                  	
  9471                                  		;pushad
  9472                                  
  9473                                  ; check if this is a valid IFF/ILBM Deluxe Paint file
  9474                                  
  9475                                  		;cmp	dword [esi+Form.ID], ID_FORM
  9476                                  		;jne	short putlbmd0
  9477                                  		;cmp	dword [esi+Form.Type], ID_ILBM
  9478                                  		;jne	short putlbmd0
  9479                                  
  9480                                  ; get the IFF/ILBM file length in bytes
  9481                                  
  9482 000051B6 8B4604                  		mov	eax, [esi+Form.Length]
  9483                                  		bswap	eax
  9452 000051B9 86E0                <1>  xchg al, ah
  9453 000051BB C1C010              <1>  rol eax, 16
  9454 000051BE 86E0                <1>  xchg al, ah
  9484 000051C0 89C1                    		mov	ecx, eax
  9485                                  
  9486                                  ; decrease the file length and updates the file pointer
  9487                                  
  9488 000051C2 83E904                  		sub	ecx, 4
  9489 000051C5 83C60C                  		add	esi, Form.size
  9490                                  
  9491                                  ; IFF/ILBM main parser body loop
  9492                                  
  9493                                  putlbml0:
  9494 000051C8 85C9                    		test	ecx, ecx
  9495 000051CA 7E63                    		jle	short putlbmd1
  9496                                  
  9497                                  ; get the next chunk ID and length in bytes
  9498                                  
  9499 000051CC 8B1E                    		mov	ebx, [esi+Chunk.ID]
  9500 000051CE 8B4604                  		mov	eax, [esi+Chunk.Length]
  9501                                  		bswap	eax
  9452 000051D1 86E0                <1>  xchg al, ah
  9453 000051D3 C1C010              <1>  rol eax, 16
  9454 000051D6 86E0                <1>  xchg al, ah
  9502 000051D8 93                      		xchg	ebx, eax
  9503 000051D9 83C608                  		add	esi, Chunk.size
  9504                                  
  9505                                  ; word align the chunk length and decrease the file length counter
  9506                                  
  9507 000051DC 43                      		inc	ebx
  9508 000051DD 80E3FE                  		and	bl, 0FEh ; ~1
  9509 000051E0 83E908                  		sub	ecx, Chunk.size
  9510 000051E3 29D9                    		sub	ecx, ebx
  9511                                  
  9512                                  ; check for the BMHD/CMAP/BODY chunk headers
  9513                                  
  9514 000051E5 3D424D4844              		cmp	eax, ID_BMHD
  9515 000051EA 7414                    		je	short putlbmf0
  9516 000051EC 3D434D4150              		cmp	eax, ID_CMAP
  9517 000051F1 743E                    		je	short putlbmf1
  9518 000051F3 3D424F4459              		cmp	eax, ID_BODY
  9519 000051F8 7452                    		je	short putlbmf2
  9520                                  
  9521                                  ; advance to the next IFF/ILBM chunk structure
  9522                                  
  9523                                  putlbmc0:
  9524 000051FA 01DE                    		add	esi, ebx
  9525 000051FC EBCA                    		jmp	short putlbml0
  9526                                  
  9527                                  putlbmd0:
  9528 000051FE F9                      		stc
  9529                                  		;popad
  9530 000051FF C3                      		retn
  9531                                  
  9532                                  ; process the BMHD bitmap header chunk
  9533                                  
  9534                                  putlbmf0:
  9535 00005200 807E0804                		cmp	byte [esi+BMHD.Planes], 4
  9536 00005204 75F8                    		jne	short putlbmd0
  9537 00005206 807E0A01                		cmp	byte [esi+BMHD.Compression], 1
  9538 0000520A 75F2                    		jne	short putlbmd0
  9539 0000520C 807E0B00                		cmp	byte [esi+BMHD.Pad], 0
  9540 00005210 75EC                    		jne	short putlbmd0
  9541 00005212 0FB706                  		movzx	eax, word [esi+BMHD.Width]
  9542 00005215 86E0                    		xchg	al, ah
  9543 00005217 83C007                  		add	eax, 7
  9544 0000521A C1E803                  		shr	eax, 3
  9545 0000521D A3[58AB0000]            		mov	[picture.width], eax
  9546 00005222 0FB74602                		movzx	eax, word [esi+BMHD.Height]
  9547 00005226 86E0                    		xchg	al, ah
  9548 00005228 A3[5CAB0000]            		mov	[picture.height], eax
  9549 0000522D EBCB                    		jmp	short putlbmc0
  9550                                  
  9551                                  putlbmd1:
  9552 0000522F F8                      		clc
  9553                                  		;popad
  9554 00005230 C3                      		retn
  9555                                  
  9556                                  ; process the CMAP colormap chunk
  9557                                  
  9558                                  putlbmf1:
  9559 00005231 66BAC803                		mov	dx, 3C8h
  9560 00005235 30C0                    		xor	al, al
  9561                                  		;out	dx, al
  9562 00005237 B401                    		mov	ah, 1 ; outb
  9563 00005239 CD34                    		int	34h
  9564                                  		;inc	dx
  9565 0000523B 42                      		inc	edx
  9566                                  putlbml1:
  9567 0000523C 8A06                    		mov	al, [esi]
  9568 0000523E C0E802                  		shr	al, 2
  9569                                  		;out	dx, al
  9570                                  		;mov	ah, 1 ; outb
  9571 00005241 CD34                    		int	34h ; IOCTL interrupt (IN/OUT)
  9572 00005243 46                      		inc	esi
  9573 00005244 4B                      		dec	ebx
  9574 00005245 7FF5                    		jg	short putlbml1
  9575 00005247 E97CFFFFFF              		jmp	putlbml0
  9576                                  
  9577                                  ; process the BODY bitmap body chunk
  9578                                  
  9579                                  putlbmf2:
  9580 0000524C 60                      		pushad
  9581 0000524D BF00000A00              		mov	edi, 0A0000h
  9582                                  		;cld
  9583 00005252 66BACE03                		mov	dx, 3CEh
  9584                                  		;mov	ax, 0FF08h
  9585                                  		;out	dx, ax
  9586 00005256 66BB08FF                		mov	bx, 0FF08h
  9587 0000525A B403                    		mov	ah, 3 ; outw
  9588 0000525C CD34                    		int	34h ; IOCTL interrupt (IN/OUT)
  9589                                  		;mov	dx, 3C4h
  9590 0000525E B2C4                    		mov	dl, 0C4h
  9591 00005260 B002                    		mov	al, 02h
  9592                                  		;out	dx, al
  9593 00005262 B401                    		mov	ah, 1 ; outb
  9594 00005264 CD34                    		int	34h ; IOCTL interrupt (IN/OUT)
  9595                                  		;inc	dx
  9596 00005266 42                      		inc	edx
  9597 00005267 8B0D[5CAB0000]          		mov	ecx, [picture.height]
  9598                                  putlbml2:
  9599 0000526D 51                      		push	ecx
  9600 0000526E B011                    		mov	al, 11h
  9601                                  putlbml3:
  9602 00005270 50                      		push	eax
  9603 00005271 57                      		push	edi
  9604                                  		;out	dx, al
  9605 00005272 B401                    		mov	ah, 1 ; outb
  9606 00005274 CD34                    		int	34h ; IOCTL interrupt (IN/OUT)
  9607 00005276 8B1D[58AB0000]          		mov	ebx, [picture.width]
  9608                                  putlbml4:
  9609 0000527C AC                      		lodsb
  9610 0000527D 31C9                    		xor	ecx, ecx
  9611 0000527F 84C0                    		test	al, al
  9612 00005281 7C09                    		jl	short putlbmf3
  9613                                  		;movzx	ecx, al
  9614 00005283 88C1                    		mov	cl, al
  9615 00005285 41                      		inc	ecx
  9616 00005286 29CB                    		sub	ebx, ecx
  9617 00005288 F3A4                    		rep	movsb
  9618 0000528A EB0A                    		jmp	short putlbmc4
  9619                                  putlbmf3:
  9620 0000528C F6D8                    		neg	al
  9621                                  		;movzx	ecx, al
  9622 0000528E 88C1                    		mov	cl, al
  9623 00005290 41                      		inc	ecx
  9624 00005291 29CB                    		sub	ebx, ecx
  9625 00005293 AC                      		lodsb
  9626 00005294 F3AA                    		rep	stosb
  9627                                  putlbmc4:
  9628 00005296 85DB                    		test	ebx, ebx
  9629 00005298 7FE2                    		jg	short putlbml4
  9630 0000529A 5F                      		pop	edi
  9631 0000529B 58                      		pop	eax
  9632 0000529C 00C0                    		add	al, al
  9633 0000529E 73D0                    		jnc	short putlbml3
  9634 000052A0 83C750                  		add	edi, 80
  9635 000052A3 59                      		pop	ecx
  9636 000052A4 E2C7                    		loop	putlbml2
  9637 000052A6 61                      		popad
  9638 000052A7 E94EFFFFFF              		jmp	putlbmc0
  9639                                  
  9640                                  ; ---------------------------------------------------------------------------
  9641                                  ; 16/02/2025 - Tiny Player Logo (Screen Image)
  9642                                  ; ---------------------------------------------------------------------------
  9643                                  
  9644                                  align 4
  9645                                  
  9646 000052AC 00                      db 0
  9647 000052AD 54494E59504C41592E-     db 'TINYPLAY.LBM Start', 0
  9647 000052B6 4C424D205374617274-
  9647 000052BF 00                 
  9648                                  
  9649                                  LOGO_ADDRESS:
  9650 000052C0 <bin 4298h>             incbin "TINYPLAY.LBM"
  9651                                  
  9652 00009558 00                      db 0
  9653                                  
  9654 00009559 54494E59504C41592E-     db 'TINYPLAY.LBM End', 0
  9654 00009562 4C424D20456E6400   
  9655                                  
  9656                                  ; ===========================================================================
  9657                                  ; end of TRDOS 386 specific procedures.
  9658                                  ; ---------------------------------------------------------------------------
  9659                                  
  9660                                  ; ===========================================================================
  9661                                  ; Initialized DATA
  9662                                  ; ===========================================================================
  9663                                  
  9664                                  ; 15/02/2025
  9665 0000956A 90<rep 2h>              align 4
  9666                                                     
  9667                                  mp3_bitrate_tab:
  9668 0000956C 000020002800300038-     		dw  0,32,40,48,56,64,80,96,112,128,160,192,224,256,320, 0
  9668 00009575 004000500060007000-
  9668 0000957E 8000A000C000E00000-
  9668 00009587 0140010000         
  9669 0000958C 000008001000180020-                     dw  0, 8,16,24,32,40,48,56,64,80,96,112,128,144,160, 0
  9669 00009595 002800300038004000-
  9669 0000959E 500060007000800090-
  9669 000095A7 00A0000000         
  9670                                  mp3_freq_tab:
  9671 000095AC 44AC80BB007D            		dw 44100,48000,32000   
  9672                                  mp3_lsf_sf_expand_init_table:
  9673 000095B2 000504040000            		db 0, 5, 4, 4, 0, 0
  9674 000095B8 9001                                    dw 400                  ; 0..399 ; normal case
  9675 000095BA 000504010C00                            db 0, 5, 4, 1, 0Ch, 0
  9676 000095C0 F401                                    dw 500                  ; 400..499
  9677 000095C2 000301011801                            db 0, 3, 1, 1, 18h, 1
  9678 000095C8 0002                                    dw 512                  ; 500..511
  9679 000095CA 010606012400                            db 1, 6, 6, 1, 24h, 0
  9680 000095D0 6803                                    dw 872                  ; 512+360 ; 0..359 for 2nd channel of intensity stereo
  9681 000095D2 010404013000                            db 1, 4, 4, 1, 30h, 0
  9682 000095D8 E803                                    dw 1000                 ; 512+488 ; 360..487
  9683 000095DA 010301013C00                            db 1, 3, 1, 1, 3Ch, 0
  9684 000095E0 0004                                    dw 1024                 ; 512+512 ; 488..511
  9685                                  mp3_synth_win_src:
  9686 000095E2 010000000000000000-     		dw      1,     0,     0,     0,     0,     0,     1,     0
  9686 000095EB 00000001000000     
  9687 000095F2 000000000100000001-                     dw      0,     0,     1,     0,     1,     0,     1,     0
  9687 000095FB 00000001000000     
  9688 00009602 010001000000010001-                     dw      1,     1,     0,     1,     1,     1,     1,     2
  9688 0000960B 00010001000200     
  9689 00009612 010002000100020002-                     dw      1,     2,     1,     2,     2,     3,     2,     3
  9689 0000961B 00030002000300     
  9690 00009622 020004000300030004-                     dw      2,     4,     3,     3,     4,     4,     4,     5
  9690 0000962B 00040004000500     
  9691 00009632 050005000500060006-                     dw      5,     5,     5,     6,     6,     6,     6,     7
  9691 0000963B 00060006000700     
  9692 00009642 070006000800070007-                     dw      7,     6,     8,     7,     7,     8,     7,     7
  9692 0000964B 00080007000700     
  9693 00009652 080007000700070006-                     dw      8,     7,     7,     7,     6,     6,     6,     5
  9693 0000965B 00060006000500     
  9694 00009662 51FEFCFFFDFFFEFFFF-                     dw 0FE51h,0FFFCh,0FFFDh,0FFFEh,0FFFFh,     0,     1,     3
  9694 0000966B FF000001000300     
  9695 00009672 03000600070008000B-                     dw      3,     6,     7,     8,   0Bh,   0Ch,   0Eh,   11h
  9695 0000967B 000C000E001100     
  9696 00009682 1300150017001A001C-                     dw    13h,   15h,   17h,   1Ah,   1Ch,   1Fh,   22h,   24h
  9696 0000968B 001F0022002400     
  9697 00009692 27002A002C002F0032-                     dw    27h,   2Ah,   2Ch,   2Fh,   32h,   35h,   36h,   3Ah
  9697 0000969B 00350036003A00     
  9698 000096A2 3C003E004000420044-                     dw    3Ch,   3Eh,   40h,   42h,   44h,   45h,   47h,   48h
  9698 000096AB 00450047004800     
  9699 000096B2 490049004900490049-                     dw    49h,   49h,   49h,   49h,   49h,   48h,   46h,   45h
  9699 000096BB 00480046004500     
  9700 000096C2 430040003D003A0035-                     dw    43h,   40h,   3Dh,   3Ah,   35h,   31h,   2Bh,   27h
  9700 000096CB 0031002B002700     
  9701 000096D2 1F00190012000A0002-                     dw    1Fh,   19h,   12h,   0Ah,     2,0FFF9h,0FFEFh,0FFE6h
  9701 000096DB 00F9FFEFFFE6FF     
  9702 000096E2 3BF030003B00470053-                     dw 0F03Bh,   30h,   3Bh,   47h,   53h,   5Fh,   6Dh,   79h
  9702 000096EB 005F006D007900     
  9703 000096F2 86009500A100B000BD-                     dw    86h,   95h,  0A1h,  0B0h,  0BDh,  0CBh,  0D9h,  0E6h
  9703 000096FB 00CB00D900E600     
  9704 00009702 F30001010D01190125-                     dw   0F3h,  101h,  10Dh,  119h,  125h,  130h,  13Ah,  144h
  9704 0000970B 0130013A014401     
  9705 00009712 4D0155015B01620166-                     dw   14Dh,  155h,  15Bh,  162h,  166h,  16Ah,  16Bh,  16Dh
  9705 0000971B 016A016B016D01     
  9706 00009722 6C016A01660160015A-                     dw   16Ch,  16Ah,  166h,  160h,  15Ah,  150h,  146h,  139h
  9706 0000972B 01500146013901     
  9707 00009732 2B011A010801F300DD-                     dw   12Bh,  11Ah,  108h,  0F3h,  0DDh,  0C5h,  0A9h,   8Eh
  9707 0000973B 00C500A9008E00     
  9708 00009742 6F004E002B000700E1-                     dw    6Fh,   4Eh,   2Bh,     7,0FFE1h,0FFB8h,0FF8Fh,0FF62h
  9708 0000974B FFB8FF8FFF62FF     
  9709 00009752 35FF06FFD5FEA4FE70-                     dw 0FF35h,0FF06h,0FED5h,0FEA4h,0FE70h,0FE3Ch,0FE06h,0FDD0h
  9709 0000975B FE3CFE06FED0FD     
  9710 00009762 0BCF9F02D702110349-                     dw 0CF0Bh,  29Fh,  2D7h,  311h,  349h,  382h,  3BBh,  3F4h
  9710 0000976B 038203BB03F403     
  9711 00009772 2C0464049A04D10405-                     dw   42Ch,  464h,  49Ah,  4D1h,  505h,  538h,  56Ah,  59Bh
  9711 0000977B 0538056A059B05     
  9712 00009782 C805F505200647066C-                     dw   5C8h,  5F5h,  620h,  647h,  66Ch,  68Fh,  6AFh,  6CCh
  9712 0000978B 068F06AF06CC06     
  9713 00009792 E506FC060F071F072B-                     dw   6E5h,  6FCh,  70Fh,  71Fh,  72Bh,  734h,  739h,  739h
  9713 0000979B 07340739073907     
  9714 000097A2 370730072607170704-                     dw   737h,  730h,  726h,  717h,  704h,  6EDh,  6D3h,  6B4h
  9714 000097AB 07ED06D306B406     
  9715 000097B2 91066C0640061306E1-                     dw   691h,  66Ch,  640h,  613h,  5E1h,  5ABh,  573h,  537h
  9715 000097BB 05AB0573053705     
  9716 000097C2 F704B4046F042704DB-                     dw   4F7h,  4B4h,  46Fh,  427h,  3DBh,  38Fh,  33Eh,  2EDh
  9716 000097CB 038F033E03ED02     
  9717 000097D2 9A024402ED0195013D-                     dw   29Ah,  244h,  1EDh,  195h,  13Dh,  0E2h,   88h,   2Eh
  9717 000097DB 01E20088002E00     
  9718 000097E2 00                                      db    0
  9719 000097E3 00                                      db    0
  9720                                  mp3_slen_table:
  9721 000097E4 000000010002000303-     		dw  0000h, 0100h, 0200h, 0300h, 0003h, 0101h, 0201h, 0301h
  9721 000097ED 00010101020103     
  9722 000097F4 020102020203030103-                     dw  0102h, 0202h, 0302h, 0103h, 0203h, 0303h, 0204h, 0304h
  9722 000097FD 02030304020403     
  9723                                  mp3_lsf_nsf_table:
  9724 00009804 060505050909090906-     		dd  05050506h, 09090909h, 09090906h
  9724 0000980D 090909             
  9725 00009810 0605070309090C0606-                     dd  03070506h, 060C0909h, 060C0906h
  9725 00009819 090C06             
  9726 0000981C 0B0A0000121200000F-                     dd  00000A0Bh, 00001212h, 0000120Fh
  9726 00009825 120000             
  9727 00009828 070707000C0C0C0006-                     dd  00070707h, 000C0C0Ch, 000C0F06h
  9727 00009831 0F0C00             
  9728 00009834 060606030C09090606-                     dd  03060606h, 0609090Ch, 06090C06h
  9728 0000983D 0C0906             
  9729 00009840 080805000F0C090006-                     dd  00050808h, 00090C0Fh, 00091206h
  9729 00009849 120900             
  9730                                  huff_tree_list_data:
  9731 0000984C 1101100022021221        		db  11h,   1, 10h,   0, 22h,   2, 12h, 21h
  9732 00009854 2011011000220212                        db  20h, 11h,   1, 10h,   0, 22h,   2, 12h
  9733 0000985C 2120101101003323                        db  21h, 20h, 10h, 11h,   1,   0, 33h, 23h
  9734 00009864 3231130330221221                        db  32h, 31h, 13h,   3, 30h, 22h, 12h, 21h
  9735 0000986C 0220110110003303                        db    2, 20h, 11h,   1, 10h,   0, 33h,   3
  9736 00009874 2332301331220212                        db  23h, 32h, 30h, 13h, 31h, 22h,   2, 12h
  9737 0000987C 2120011110005545                        db  21h, 20h,   1, 11h, 10h,   0, 55h, 45h
  9738 00009884 5453354425521551                        db  54h, 53h, 35h, 44h, 25h, 52h, 15h, 51h
  9739 0000988C 0534504333244214                        db    5, 34h, 50h, 43h, 33h, 24h, 42h, 14h
  9740 00009894 4140042332031331                        db  41h, 40h,   4, 23h, 32h,   3, 13h, 31h
  9741 0000989C 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
  9742 000098A4 1000555445533544                        db  10h,   0, 55h, 54h, 45h, 53h, 35h, 44h
  9743 000098AC 2552051551344350                        db  25h, 52h,   5, 15h, 51h, 34h, 43h, 50h
  9744 000098B4 3324421441044023                        db  33h, 24h, 42h, 14h, 41h,   4, 40h, 23h
  9745 000098BC 3213310330220220                        db  32h, 13h, 31h,   3, 30h, 22h,   2, 20h
  9746 000098C4 1221110110005545                        db  12h, 21h, 11h,   1, 10h,   0, 55h, 45h
  9747 000098CC 3553540544255215                        db  35h, 53h, 54h,   5, 44h, 25h, 52h, 15h
  9748 000098D4 5134435004244233                        db  51h, 34h, 43h, 50h,   4, 24h, 42h, 33h
  9749 000098DC 4014412332133103                        db  40h, 14h, 41h, 23h, 32h, 13h, 31h,   3
  9750 000098E4 3022021221201101                        db  30h, 22h,   2, 12h, 21h, 20h, 11h,   1
  9751 000098EC 1000776776577566                        db  10h,   0, 77h, 67h, 76h, 57h, 75h, 66h
  9752 000098F4 4774566537734655                        db  47h, 74h, 56h, 65h, 37h, 73h, 46h, 55h
  9753 000098FC 5463277264077062                        db  54h, 63h, 27h, 72h, 64h,   7, 70h, 62h
  9754 00009904 4535065344177136                        db  45h, 35h,   6, 53h, 44h, 17h, 71h, 36h
  9755 0000990C 2625521551344316                        db  26h, 25h, 52h, 15h, 51h, 34h, 43h, 16h
  9756 00009914 6160055024423304                        db  61h, 60h,   5, 50h, 24h, 42h, 33h,   4
  9757 0000991C 1441402332031331                        db  14h, 41h, 40h, 23h, 32h,   3, 13h, 31h
  9758 00009924 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
  9759 0000992C 1000776776756647                        db  10h,   0, 77h, 67h, 76h, 75h, 66h, 47h
  9760 00009934 7457555665377346                        db  74h, 57h, 55h, 56h, 65h, 37h, 73h, 46h
  9761 0000993C 4554355327726407                        db  45h, 54h, 35h, 53h, 27h, 72h, 64h,   7
  9762 00009944 7117703663604425                        db  71h, 17h, 70h, 36h, 63h, 60h, 44h, 25h
  9763 0000994C 5205156226061661                        db  52h,   5, 15h, 62h, 26h,   6, 16h, 61h
  9764 00009954 5134504333244214                        db  51h, 34h, 50h, 43h, 33h, 24h, 42h, 14h
  9765 0000995C 4104402332133103                        db  41h,   4, 40h, 23h, 32h, 13h, 31h,   3
  9766 00009964 3022211202201101                        db  30h, 22h, 21h, 12h,   2, 20h, 11h,   1
  9767 0000996C 1000776776577566                        db  10h,   0, 77h, 67h, 76h, 57h, 75h, 66h
  9768 00009974 4774655637735527                        db  47h, 74h, 65h, 56h, 37h, 73h, 55h, 27h
  9769 0000997C 7246641771077036                        db  72h, 46h, 64h, 17h, 71h,   7, 70h, 36h
  9770 00009984 6345544406052662                        db  63h, 45h, 54h, 44h,   6,   5, 26h, 62h
  9771 0000998C 6116603553255215                        db  61h, 16h, 60h, 35h, 53h, 25h, 52h, 15h
  9772 00009994 5134435004244214                        db  51h, 34h, 43h, 50h,   4, 24h, 42h, 14h
  9773 0000999C 3341233240033013                        db  33h, 41h, 23h, 32h, 40h,   3, 30h, 13h
  9774 000099A4 3122122102200011                        db  31h, 22h, 12h, 21h,   2, 20h,   0, 11h
  9775 000099AC 0110FEFCFDEDFFEF                        db    1, 10h,0FEh,0FCh,0FDh,0EDh,0FFh,0EFh
  9776 000099B4 DFEECFDEBFFBCEDC                        db 0DFh,0EEh,0CFh,0DEh,0BFh,0FBh,0CEh,0DCh
  9777 000099BC AFE9ECDDFACDBEEB                        db 0AFh,0E9h,0ECh,0DDh,0FAh,0CDh,0BEh,0EBh
  9778 000099C4 9FF9EABDDB8FF8CC                        db  9Fh,0F9h,0EAh,0BDh,0DBh, 8Fh,0F8h,0CCh
  9779 000099CC AE9E8E7F7EF7DAAD                        db 0AEh, 9Eh, 8Eh, 7Fh, 7Eh,0F7h,0DAh,0ADh
  9780 000099D4 BCCBF66FE85F9DD9                        db 0BCh,0CBh,0F6h, 6Fh,0E8h, 5Fh, 9Dh,0D9h
  9781 000099DC F5E7ACBB4FF4CAE6                        db 0F5h,0E7h,0ACh,0BBh, 4Fh,0F4h,0CAh,0E6h
  9782 000099E4 F33F8DD82FF26E9C                        db 0F3h, 3Fh, 8Dh,0D8h, 2Fh,0F2h, 6Eh, 9Ch
  9783 000099EC 0FC95EAB7DD74EC8                        db  0Fh,0C9h, 5Eh,0ABh, 7Dh,0D7h, 4Eh,0C8h
  9784 000099F4 D63EB99BAA1FF1F0                        db 0D6h, 3Eh,0B9h, 9Bh,0AAh, 1Fh,0F1h,0F0h
  9785 000099FC BAE5E48C6DE3E22E                        db 0BAh,0E5h,0E4h, 8Ch, 6Dh,0E3h,0E2h, 2Eh
  9786 00009A04 0E1EE1E05DD57CC7                        db  0Eh, 1Eh,0E1h,0E0h, 5Dh,0D5h, 7Ch,0C7h
  9787 00009A0C 4D8BB8D49AA96CC6                        db  4Dh, 8Bh,0B8h,0D4h, 9Ah,0A9h, 6Ch,0C6h
  9788 00009A14 3DD37B2DD21DB75C                        db  3Dh,0D3h, 7Bh, 2Dh,0D2h, 1Dh,0B7h, 5Ch
  9789 00009A1C C5997AC3A7974BD1                        db 0C5h, 99h, 7Ah,0C3h,0A7h, 97h, 4Bh,0D1h
  9790 00009A24 0DD08AA84CC46BB6                        db  0Dh,0D0h, 8Ah,0A8h, 4Ch,0C4h, 6Bh,0B6h
  9791 00009A2C 3C2CC25BB5891CC1                        db  3Ch, 2Ch,0C2h, 5Bh,0B5h, 89h, 1Ch,0C1h
  9792 00009A34 980CC0B46AA6793B                        db  98h, 0Ch,0C0h,0B4h, 6Ah,0A6h, 79h, 3Bh
  9793 00009A3C B3885A2BA569A478                        db 0B3h, 88h, 5Ah, 2Bh,0A5h, 69h,0A4h, 78h
  9794 00009A44 87947776B21BB10B                        db  87h, 94h, 77h, 76h,0B2h, 1Bh,0B1h, 0Bh
  9795 00009A4C B0964A3AA359952A                        db 0B0h, 96h, 4Ah, 3Ah,0A3h, 59h, 95h, 2Ah
  9796 00009A54 A21AA10A68A08649                        db 0A2h, 1Ah,0A1h, 0Ah, 68h,0A0h, 86h, 49h
  9797 00009A5C 9339588567299257                        db  93h, 39h, 58h, 85h, 67h, 29h, 92h, 57h
  9798 00009A64 7538836647745665                        db  75h, 38h, 83h, 66h, 47h, 74h, 56h, 65h
  9799 00009A6C 7319910990488472                        db  73h, 19h, 91h,   9, 90h, 48h, 84h, 72h
  9800 00009A74 4664288218372717                        db  46h, 64h, 28h, 82h, 18h, 37h, 27h, 17h
  9801 00009A7C 7155077036634554                        db  71h, 55h,   7, 70h, 36h, 63h, 45h, 54h
  9802 00009A84 2662358108801661                        db  26h, 62h, 35h, 81h,   8, 80h, 16h, 61h
  9803 00009A8C 0660534425520515                        db    6, 60h, 53h, 44h, 25h, 52h,   5, 15h
  9804 00009A94 5134435024423314                        db  51h, 34h, 43h, 50h, 24h, 42h, 33h, 14h
  9805 00009A9C 4104402332133103                        db  41h,   4, 40h, 23h, 32h, 13h, 31h,   3
  9806 00009AA4 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
  9807 00009AAC 1000FFEFFEDFEEFD                        db  10h,   0,0FFh,0EFh,0FEh,0DFh,0EEh,0FDh
  9808 00009AB4 CFFCDEEDBFFBCEEC                        db 0CFh,0FCh,0DEh,0EDh,0BFh,0FBh,0CEh,0ECh
  9809 00009ABC DDAFFABEEBCDDC9F                        db 0DDh,0AFh,0FAh,0BEh,0EBh,0CDh,0DCh, 9Fh
  9810 00009AC4 F9EABDDB8FF8CC9E                        db 0F9h,0EAh,0BDh,0DBh, 8Fh,0F8h,0CCh, 9Eh
  9811 00009ACC E97FF7ADDABC6FAE                        db 0E9h, 7Fh,0F7h,0ADh,0DAh,0BCh, 6Fh,0AEh
  9812 00009AD4 0FCBF68EE85F9DF5                        db  0Fh,0CBh,0F6h, 8Eh,0E8h, 5Fh, 9Dh,0F5h
  9813 00009ADC 7EE7ACCABBD98D4F                        db  7Eh,0E7h,0ACh,0CAh,0BBh,0D9h, 8Dh, 4Fh
  9814 00009AE4 F43FF3D8E62FF26E                        db 0F4h, 3Fh,0F3h,0D8h,0E6h, 2Fh,0F2h, 6Eh
  9815 00009AEC F01FF19CC95EABBA                        db 0F0h, 1Fh,0F1h, 9Ch,0C9h, 5Eh,0ABh,0BAh
  9816 00009AF4 E57DD74EE48CC83E                        db 0E5h, 7Dh,0D7h, 4Eh,0E4h, 8Ch,0C8h, 3Eh
  9817 00009AFC 6DD6E39BB92EAAE2                        db  6Dh,0D6h,0E3h, 9Bh,0B9h, 2Eh,0AAh,0E2h
  9818 00009B04 1EE10EE05DD57CC7                        db  1Eh,0E1h, 0Eh,0E0h, 5Dh,0D5h, 7Ch,0C7h
  9819 00009B0C 4D8BD4B89AA96CC6                        db  4Dh, 8Bh,0D4h,0B8h, 9Ah,0A9h, 6Ch,0C6h
  9820 00009B14 3DD3D22D0D1D7BB7                        db  3Dh,0D3h,0D2h, 2Dh, 0Dh, 1Dh, 7Bh,0B7h
  9821 00009B1C D15CD0C58AA84CC4                        db 0D1h, 5Ch,0D0h,0C5h, 8Ah,0A8h, 4Ch,0C4h
  9822 00009B24 6BB6990C3CC37AA7                        db  6Bh,0B6h, 99h, 0Ch, 3Ch,0C3h, 7Ah,0A7h
  9823 00009B2C A6C00BC22C5BB51C                        db 0A6h,0C0h, 0Bh,0C2h, 2Ch, 5Bh,0B5h, 1Ch
  9824 00009B34 8998C14BB46A3B79                        db  89h, 98h,0C1h, 4Bh,0B4h, 6Ah, 3Bh, 79h
  9825 00009B3C B397882B5AB2A51B                        db 0B3h, 97h, 88h, 2Bh, 5Ah,0B2h,0A5h, 1Bh
  9826 00009B44 B1B069964AA47887                        db 0B1h,0B0h, 69h, 96h, 4Ah,0A4h, 78h, 87h
  9827 00009B4C 3AA359952AA21AA1                        db  3Ah,0A3h, 59h, 95h, 2Ah,0A2h, 1Ah,0A1h
  9828 00009B54 0AA0688649943993                        db  0Ah,0A0h, 68h, 86h, 49h, 94h, 39h, 93h
  9829 00009B5C 7709588529677692                        db  77h,   9, 58h, 85h, 29h, 67h, 76h, 92h
  9830 00009B64 9119904884577538                        db  91h, 19h, 90h, 48h, 84h, 57h, 75h, 38h
  9831 00009B6C 8366472882188174                        db  83h, 66h, 47h, 28h, 82h, 18h, 81h, 74h
  9832 00009B74 0880566537734627                        db    8, 80h, 56h, 65h, 37h, 73h, 46h, 27h
  9833 00009B7C 7264175571077036                        db  72h, 64h, 17h, 55h, 71h,   7, 70h, 36h
  9834 00009B84 6345542662160660                        db  63h, 45h, 54h, 26h, 62h, 16h,   6, 60h
  9835 00009B8C 3561534425521551                        db  35h, 61h, 53h, 44h, 25h, 52h, 15h, 51h
  9836 00009B94 0550344324423341                        db    5, 50h, 34h, 43h, 24h, 42h, 33h, 41h
  9837 00009B9C 1404233240031331                        db  14h,   4, 23h, 32h, 40h,   3, 13h, 31h
  9838 00009BA4 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
  9839 00009BAC 1000EFFEDFFDCFFC                        db  10h,   0,0EFh,0FEh,0DFh,0FDh,0CFh,0FCh
  9840 00009BB4 BFFBAFFA9FF9F88F                        db 0BFh,0FBh,0AFh,0FAh, 9Fh,0F9h,0F8h, 8Fh
  9841 00009BBC 7FF76FF6FF5FF54F                        db  7Fh,0F7h, 6Fh,0F6h,0FFh, 5Fh,0F5h, 4Fh
  9842 00009BC4 F4F3F03FCEECDDDE                        db 0F4h,0F3h,0F0h, 3Fh,0CEh,0ECh,0DDh,0DEh
  9843 00009BCC E9EAD9EEEDEBBECD                        db 0E9h,0EAh,0D9h,0EEh,0EDh,0EBh,0BEh,0CDh
  9844 00009BD4 DCDBAECCADDA7EAC                        db 0DCh,0DBh,0AEh,0CCh,0ADh,0DAh, 7Eh,0ACh
  9845 00009BDC CAC97D5EBDF22F0F                        db 0CAh,0C9h, 7Dh, 5Eh,0BDh,0F2h, 2Fh, 0Fh
  9846 00009BE4 1FF19EBCCB8EE89D                        db  1Fh,0F1h, 9Eh,0BCh,0CBh, 8Eh,0E8h, 9Dh
  9847 00009BEC E7BB8DD86EE69CAB                        db 0E7h,0BBh, 8Dh,0D8h, 6Eh,0E6h, 9Ch,0ABh
  9848 00009BF4 BAE5D74EE48CC83E                        db 0BAh,0E5h,0D7h, 4Eh,0E4h, 8Ch,0C8h, 3Eh
  9849 00009BFC 6DD69BB9AAE1D4B8                        db  6Dh,0D6h, 9Bh,0B9h,0AAh,0E1h,0D4h,0B8h
  9850 00009C04 A97BB7D0E30EE05D                        db 0A9h, 7Bh,0B7h,0D0h,0E3h, 0Eh,0E0h, 5Dh
  9851 00009C0C D57CC74D8B9A6CC6                        db 0D5h, 7Ch,0C7h, 4Dh, 8Bh, 9Ah, 6Ch,0C6h
  9852 00009C14 3D5CC50D8AA8994C                        db  3Dh, 5Ch,0C5h, 0Dh, 8Ah,0A8h, 99h, 4Ch
  9853 00009C1C B67A3C5B891CC098                        db 0B6h, 7Ah, 3Ch, 5Bh, 89h, 1Ch,0C0h, 98h
  9854 00009C24 79E22E1ED32DD2D1                        db  79h,0E2h, 2Eh, 1Eh,0D3h, 2Dh,0D2h,0D1h
  9855 00009C2C 3B97881DC46BC3A7                        db  3Bh, 97h, 88h, 1Dh,0C4h, 6Bh,0C3h,0A7h
  9856 00009C34 2CC2B5C10C4BB46A                        db  2Ch,0C2h,0B5h,0C1h, 0Ch, 4Bh,0B4h, 6Ah
  9857 00009C3C A6B35AA52BB21BB1                        db 0A6h,0B3h, 5Ah,0A5h, 2Bh,0B2h, 1Bh,0B1h
  9858 00009C44 0BB069964AA47887                        db  0Bh,0B0h, 69h, 96h, 4Ah,0A4h, 78h, 87h
  9859 00009C4C A33A592A9568A186                        db 0A3h, 3Ah, 59h, 2Ah, 95h, 68h,0A1h, 86h
  9860 00009C54 7794495767A21A0A                        db  77h, 94h, 49h, 57h, 67h,0A2h, 1Ah, 0Ah
  9861 00009C5C A039935885299276                        db 0A0h, 39h, 93h, 58h, 85h, 29h, 92h, 76h
  9862 00009C64 0919919048847538                        db    9, 19h, 91h, 90h, 48h, 84h, 75h, 38h
  9863 00009C6C 8366288247741881                        db  83h, 66h, 28h, 82h, 47h, 74h, 18h, 81h
  9864 00009C74 8008563773654627                        db  80h,   8, 56h, 37h, 73h, 65h, 46h, 27h
  9865 00009C7C 7264550717717036                        db  72h, 64h, 55h,   7, 17h, 71h, 70h, 36h
  9866 00009C84 6345542662166106                        db  63h, 45h, 54h, 26h, 62h, 16h, 61h,   6
  9867 00009C8C 6053354425525115                        db  60h, 53h, 35h, 44h, 25h, 52h, 51h, 15h
  9868 00009C94 0534435024423314                        db    5, 34h, 43h, 50h, 24h, 42h, 33h, 14h
  9869 00009C9C 4104402332133103                        db  41h,   4, 40h, 23h, 32h, 13h, 31h,   3
  9870 00009CA4 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
  9871 00009CAC 1000EFFEDFFDCFFC                        db  10h,   0,0EFh,0FEh,0DFh,0FDh,0CFh,0FCh
  9872 00009CB4 BFFBFAAF9FF9F88F                        db 0BFh,0FBh,0FAh,0AFh, 9Fh,0F9h,0F8h, 8Fh
  9873 00009CBC 7FF76FF65FF54FF4                        db  7Fh,0F7h, 6Fh,0F6h, 5Fh,0F5h, 4Fh,0F4h
  9874 00009CC4 3FF32FF2F11FF00F                        db  3Fh,0F3h, 2Fh,0F2h,0F1h, 1Fh,0F0h, 0Fh
  9875 00009CCC EEDEEDCEECDDBEEB                        db 0EEh,0DEh,0EDh,0CEh,0ECh,0DDh,0BEh,0EBh
  9876 00009CD4 CDDCAEEABDDBCC9E                        db 0CDh,0DCh,0AEh,0EAh,0BDh,0DBh,0CCh, 9Eh
  9877 00009CDC E9ADDABCCB8EE89D                        db 0E9h,0ADh,0DAh,0BCh,0CBh, 8Eh,0E8h, 9Dh
  9878 00009CE4 D97EE7ACFFCABB8D                        db 0D9h, 7Eh,0E7h,0ACh,0FFh,0CAh,0BBh, 8Dh
  9879 00009CEC D80EE00DE66E9CC9                        db 0D8h, 0Eh,0E0h, 0Dh,0E6h, 6Eh, 9Ch,0C9h
  9880 00009CF4 5EBAE5AB7DD7E48C                        db  5Eh,0BAh,0E5h,0ABh, 7Dh,0D7h,0E4h, 8Ch
  9881 00009CFC C84E2E3E6DD6E39B                        db 0C8h, 4Eh, 2Eh, 3Eh, 6Dh,0D6h,0E3h, 9Bh
  9882 00009D04 B9AAE21EE15DD57C                        db 0B9h,0AAh,0E2h, 1Eh,0E1h, 5Dh,0D5h, 7Ch
  9883 00009D0C C74D8BB8D49AA96C                        db 0C7h, 4Dh, 8Bh,0B8h,0D4h, 9Ah,0A9h, 6Ch
  9884 00009D14 C63DD32DD21D7BB7                        db 0C6h, 3Dh,0D3h, 2Dh,0D2h, 1Dh, 7Bh,0B7h
  9885 00009D1C D15CC58AA8994CC4                        db 0D1h, 5Ch,0C5h, 8Ah,0A8h, 99h, 4Ch,0C4h
  9886 00009D24 6BB6D00C3CC37AA7                        db  6Bh,0B6h,0D0h, 0Ch, 3Ch,0C3h, 7Ah,0A7h
  9887 00009D2C 2CC25BB51C8998C1                        db  2Ch,0C2h, 5Bh,0B5h, 1Ch, 89h, 98h,0C1h
  9888 00009D34 4BC00B3BB00A1AB4                        db  4Bh,0C0h, 0Bh, 3Bh,0B0h, 0Ah, 1Ah,0B4h
  9889 00009D3C 6AA67997A00990B3                        db  6Ah,0A6h, 79h, 97h,0A0h,   9, 90h,0B3h
  9890 00009D44 882B5AB2A51BB169                        db  88h, 2Bh, 5Ah,0B2h,0A5h, 1Bh,0B1h, 69h
  9891 00009D4C 96A44A78873AA359                        db  96h,0A4h, 4Ah, 78h, 87h, 3Ah,0A3h, 59h
  9892 00009D54 952AA2A168867749                        db  95h, 2Ah,0A2h,0A1h, 68h, 86h, 77h, 49h
  9893 00009D5C 9439935885296776                        db  94h, 39h, 93h, 58h, 85h, 29h, 67h, 76h
  9894 00009D64 9219914884577538                        db  92h, 19h, 91h, 48h, 84h, 57h, 75h, 38h
  9895 00009D6C 8366288218477481                        db  83h, 66h, 28h, 82h, 18h, 47h, 74h, 81h
  9896 00009D74 0880566517077073                        db    8, 80h, 56h, 65h, 17h,   7, 70h, 73h
  9897 00009D7C 3727724664557136                        db  37h, 27h, 72h, 46h, 64h, 55h, 71h, 36h
  9898 00009D84 6345542662166106                        db  63h, 45h, 54h, 26h, 62h, 16h, 61h,   6
  9899 00009D8C 6035534425521505                        db  60h, 35h, 53h, 44h, 25h, 52h, 15h,   5
  9900 00009D94 5051344324423314                        db  50h, 51h, 34h, 43h, 24h, 42h, 33h, 14h
  9901 00009D9C 4104402332133103                        db  41h,   4, 40h, 23h, 32h, 13h, 31h,   3
  9902 00009DA4 3022122102201101                        db  30h, 22h, 12h, 21h,   2, 20h, 11h,   1
  9903 00009DAC 10000B0F0D0E0705                        db  10h,   0, 0Bh, 0Fh, 0Dh, 0Eh,   7,   5
  9904 00009DB4 0906030A0C020104                        db    9,   6,   3, 0Ah, 0Ch,   2,   1,   4
  9905 00009DBC 08000F0E0D0C0B0A                        db    8,   0, 0Fh, 0Eh, 0Dh, 0Ch, 0Bh, 0Ah
  9906 00009DC4 0908070605040302                        db    9,   8,   7,   6,   5,   4,   3,   2
  9907 00009DCC 0100                                    db    1,   0
  9908 00009DCE 000000000000                            db 6 dup(0)
  9909                                  mp3_huff_data:
  9910 00009DD4 0000                    		db   0,  0             
  9911 00009DD6 0100                                    db   1,  0              ; byte[32][2] ; table,linbits
  9912 00009DD8 0200                                    db   2,  0
  9913 00009DDA 0300                                    db   3,  0
  9914 00009DDC 0000                                    db   0,  0
  9915 00009DDE 0400                                    db   4,  0
  9916 00009DE0 0500                                    db   5,  0
  9917 00009DE2 0600                                    db   6,  0
  9918 00009DE4 0700                                    db   7,  0
  9919 00009DE6 0800                                    db   8,  0
  9920 00009DE8 0900                                    db   9,  0
  9921 00009DEA 0A00                                    db  10,  0
  9922 00009DEC 0B00                                    db  11,  0
  9923 00009DEE 0C00                                    db  12,  0
  9924 00009DF0 0000                                    db   0,  0
  9925 00009DF2 0D00                                    db  13,  0
  9926 00009DF4 0E01                                    db  14,  1
  9927 00009DF6 0E02                                    db  14,  2
  9928 00009DF8 0E03                                    db  14,  3
  9929 00009DFA 0E04                                    db  14,  4
  9930 00009DFC 0E06                                    db  14,  6
  9931 00009DFE 0E08                                    db  14,  8
  9932 00009E00 0E0A                                    db  14, 10
  9933 00009E02 0E0D                                    db  14, 13
  9934 00009E04 0F04                                    db  15,  4
  9935 00009E06 0F05                                    db  15,  5
  9936 00009E08 0F06                                    db  15,  6
  9937 00009E0A 0F07                                    db  15,  7
  9938 00009E0C 0F08                                    db  15,  8
  9939 00009E0E 0F09                                    db  15,  9
  9940 00009E10 0F0B                                    db  15, 11
  9941 00009E12 0F0D                                    db  15, 13
  9942                                  mp3_band_size_long:
  9943 00009E14 040404040404060608-     		db    4,   4,   4,   4,   4,   4,   6,   6,   8,   8, 0Ah
  9943 00009E1D 080A               
  9944 00009E1F 0C1014181C222A3236-                     db  0Ch, 10h, 14h, 18h, 1Ch, 22h, 2Ah, 32h, 36h, 4Ch, 9Eh ; byte[9][22]
  9944 00009E28 4C9E               
  9945 00009E2A 040404040404060606-                     db    4,   4,   4,   4,   4,   4,   6,   6,   6,   8, 0Ah
  9945 00009E33 080A               
  9946 00009E35 0C1012161C22282E36-                     db  0Ch, 10h, 12h, 16h, 1Ch, 22h, 28h, 2Eh, 36h, 36h,0C0h
  9946 00009E3E 36C0               
  9947 00009E40 040404040404060608-                     db    4,   4,   4,   4,   4,   4,   6,   6,   8, 0Ah, 0Ch
  9947 00009E49 0A0C               
  9948 00009E4B 1014181E262E384454-                     db  10h, 14h, 18h, 1Eh, 26h, 2Eh, 38h, 44h, 54h, 66h, 1Ah
  9948 00009E54 661A               
  9949 00009E56 060606060606080A0C-                     db    6,   6,   6,   6,   6,   6,   8, 0Ah, 0Ch, 0Eh, 10h
  9949 00009E5F 0E10               
  9950 00009E61 14181C20262E343C44-                     db  14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h
  9950 00009E6A 3A36               
  9951 00009E6C 060606060606080A0C-                     db    6,   6,   6,   6,   6,   6,   8, 0Ah, 0Ch, 0Eh, 10h
  9951 00009E75 0E10               
  9952 00009E77 12161A20262E344046-                     db  12h, 16h, 1Ah, 20h, 26h, 2Eh, 34h, 40h, 46h, 4Ch, 24h
  9952 00009E80 4C24               
  9953 00009E82 060606060606080A0C-                     db    6,   6,   6,   6,   6,   6,   8, 0Ah, 0Ch, 0Eh, 10h
  9953 00009E8B 0E10               
  9954 00009E8D 14181C20262E343C44-                     db  14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h
  9954 00009E96 3A36               
  9955 00009E98 060606060606080A0C-                     db    6,   6,   6,   6,   6,   6,   8, 0Ah, 0Ch, 0Eh, 10h
  9955 00009EA1 0E10               
  9956 00009EA3 14181C20262E343C44-                     db  14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h
  9956 00009EAC 3A36               
  9957 00009EAE 060606060606080A0C-                     db    6,   6,   6,   6,   6,   6,   8, 0Ah, 0Ch, 0Eh, 10h
  9957 00009EB7 0E10               
  9958 00009EB9 14181C20262E343C44-                     db  14h, 18h, 1Ch, 20h, 26h, 2Eh, 34h, 3Ch, 44h, 3Ah, 36h
  9958 00009EC2 3A36               
  9959 00009EC4 0C0C0C0C0C0C101418-                     db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 10h, 14h, 18h, 1Ch, 20h
  9959 00009ECD 1C20               
  9960 00009ECF 283038404C5A020202-                     db  28h, 30h, 38h, 40h, 4Ch, 5Ah,   2,   2,   2,   2,   2
  9960 00009ED8 0202               
  9961 00009EDA 000000000000000000-                     db 10 dup(0)            ; data align
  9961 00009EE3 00                 
  9962                                  mp3_band_size_short:
  9963 00009EE4 0404040406080A0C0E-     		db    4,   4,   4,   4,   6,   8, 0Ah, 0Ch, 0Eh, 12h, 16h, 1Eh, 38h
  9963 00009EED 12161E38           
  9964 00009EF1 0404040406060A0C0E-                     db    4,   4,   4,   4,   6,   6, 0Ah, 0Ch, 0Eh, 10h, 14h, 1Ah, 42h ; byte[9][16] ? ; byte [9][13]
  9964 00009EFA 10141A42           
  9965 00009EFE 0404040406080C1014-                     db    4,   4,   4,   4,   6,   8, 0Ch, 10h, 14h, 1Ah, 22h, 2Ah, 0Ch
  9965 00009F07 1A222A0C           
  9966 00009F0B 0404040606080A0E12-                     db    4,   4,   4,   6,   6,   8, 0Ah, 0Eh, 12h, 1Ah, 20h, 2Ah, 12h
  9966 00009F14 1A202A12           
  9967 00009F18 04040406080A0C0E12-                     db    4,   4,   4,   6,   8, 0Ah, 0Ch, 0Eh, 12h, 18h, 20h, 2Ch, 0Ch
  9967 00009F21 18202C0C           
  9968 00009F25 04040406080A0C0E12-                     db    4,   4,   4,   6,   8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h
  9968 00009F2E 181E2812           
  9969 00009F32 04040406080A0C0E12-                     db    4,   4,   4,   6,   8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h
  9969 00009F3B 181E2812           
  9970 00009F3F 04040406080A0C0E12-                     db    4,   4,   4,   6,   8, 0Ah, 0Ch, 0Eh, 12h, 18h, 1Eh, 28h, 12h
  9970 00009F48 181E2812           
  9971 00009F4C 0808080C1014181C24-                     db    8,   8,   8, 0Ch, 10h, 14h, 18h, 1Ch, 24h,   2,   2,   2, 1Ah
  9971 00009F55 0202021A           
  9972 00009F59 000000000000000000-                     db 11 dup(0)            ; data align
  9972 00009F62 0000               
  9973                                  mp3_pretab:
  9974 00009F64 000000000000000000-     		db    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
  9974 00009F6D 0000               
  9975 00009F6F 000000000000000000-                     db    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
  9975 00009F78 0000               
  9976 00009F7A 000000000000000000-                     db    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
  9976 00009F83 0000               
  9977 00009F85 010101010202030303-                     db    1,   1,   1,   1,   2,   2,   3,   3,   3,   2,   0
  9977 00009F8E 0200               
  9978 00009F90 00000000                                db 4 dup(0)             ; data align
  9979                                  mp3_mdct_win_src:
  9980 00009F94 4B1D4200028FDB0016-     		dd  00421D4Bh, 00DB8F02h, 019C7F16h, 029ADCC0h, 04000001h, 06246711h
  9980 00009F9D 7F9C01C0DC9A020100-
  9980 00009FA6 000411672406       
  9981 00009FAC 4506EE090CD6A71238-                     dd  09EE0645h, 12A7D60Ch, 3DF40538h,0BC63D32Fh,0E7B0025Bh,0F069D222h ; these are sine values divided by cosine values...
  9981 00009FB5 05F43D2FD363BC5B02-
  9981 00009FBE B0E722D269F0       
  9982 00009FC4 567133F467D857F6A8-                     dd 0F4337156h,0F657D867h,0F7BCFBA8h,0F8BB5952h,0F97C4965h,0FA15BB1Ch
  9982 00009FCD FBBCF75259BBF86549-
  9982 00009FD6 7CF91CBB15FA       
  9983 00009FDC 936D94FA8E5100FB70-                     dd 0FA946D93h,0FB00518Eh,0FB5EA270h,0FBB2FDEAh,0FC000000h,0FC479F38h
  9983 00009FE5 A25EFBEAFDB2FB0000-
  9983 00009FEE 00FC389F47FC       
  9984 00009FF4 09668BFC9898CCFC0B-                     dd 0FC8B6609h,0FCCC9898h,0FD0C4F0Bh,0FD4B895Ch,0FD8B3FCFh,0FDCC725Eh
  9984 00009FFD 4F0CFD5C894BFDCF3F-
  9984 0000A006 8BFD5E72CCFD       
  9985 0000A00C 2F3910FE67D857FE7D-                     dd 0FE10392Fh,0FE57D867h,0FEA4DA7Dh,0FEF935F7h,0FF5786D9h,0FFC36AD5h
  9985 0000A015 DAA4FEF735F9FED986-
  9985 0000A01E 57FFD56AC3FF       
  9986 0000A024 4B1D4200028FDB0016-                     dd  00421D4Bh, 00DB8F02h, 019C7F16h, 029ADCC0h, 04000001h, 06246711h
  9986 0000A02D 7F9C01C0DC9A020100-
  9986 0000A036 000411672406       
  9987 0000A03C 4506EE090CD6A71238-                     dd  09EE0645h, 12A7D60Ch, 3DF40538h,0BC63D32Fh,0E7B0025Bh,0F069D222h
  9987 0000A045 05F43D2FD363BC5B02-
  9987 0000A04E B0E722D269F0       
  9988 0000A054 567133F467D857F6A8-                     dd 0F4337156h,0F657D867h,0F7BCFBA8h,0F8BB5952h,0F97C4965h,0FA15BB1Ch
  9988 0000A05D FBBCF75259BBF86549-
  9988 0000A066 7CF91CBB15FA       
  9989 0000A06C 291B93FAB946F5FABB-                     dd 0FA931B29h,0FAF546B9h,0FB41DABBh,0FB7D8F97h,0FBABA162h,0FBCE4E62h
  9989 0000A075 DA41FB978F7DFB62A1-
  9989 0000A07E ABFB624ECEFB       
  9990 0000A084 671CF0FBAFC845FC0D-                     dd 0FBF01C67h,0FC45C8AFh,0FCD2D50Dh,0FD9008D0h,0FE74C032h,0FF771894h
  9990 0000A08D D5D2FCD00890FD32C0-
  9990 0000A096 74FE941877FF       
  9991 0000A09C 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
  9991 0000A0A5 000000000000000000-
  9991 0000A0AE 000000000000       
  9992 0000A0B4 028FDB00010000040C-                     dd  00DB8F02h, 04000001h, 12A7D60Ch,0E7B0025Bh,0F657D867h,0F97C4965h
  9992 0000A0BD D6A7125B02B0E767D8-
  9992 0000A0C6 57F665497CF9       
  9993 0000A0CC 8E5100FB000000FC98-                     dd 0FB00518Eh,0FC000000h,0FCCC9898h,0FD8B3FCFh,0FE57D867h,0FF5786D9h
  9993 0000A0D5 98CCFCCF3F8BFD67D8-
  9993 0000A0DE 57FED98657FF       
  9994 0000A0E4 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
  9994 0000A0ED 000000000000000000-
  9994 0000A0F6 000000000000       
  9995 0000A0FC 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
  9995 0000A105 000000000000000000-
  9995 0000A10E 000000000000       
  9996 0000A114 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
  9996 0000A11D 000000000000000000-
  9996 0000A126 000000000000       
  9997 0000A12C 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
  9997 0000A135 000000000000000000-
  9997 0000A13E 000000000000       
  9998 0000A144 000000000000000000-                     dd  00000000h, 00000000h, 00000000h, 00000000h, 00000000h, 00000000h
  9998 0000A14D 000000000000000000-
  9998 0000A156 000000000000       
  9999 0000A15C B58869025237BA0B4F-                     dd  026988B5h, 0BBA3752h, 37D3294Fh,0B73F655Bh,0E3B0025Bh,0EDAD5D13h
  9999 0000A165 29D3375B653FB75B02-
  9999 0000A16E B0E3135DADED       
 10000 0000A174 A2ADB2F2B8288CF5D6-                     dd 0F2B2ADA2h,0F58C28B8h,0F75657D6h,0F88E2C57h,0F96DE565h,0FA1449CDh
 10000 0000A17D 5756F7572C8EF865E5-
 10000 0000A186 6DF9CD4914FA       
 10001 0000A18C 936D94FA8E5100FB70-                     dd 0FA946D93h,0FB00518Eh,0FB5EA270h,0FBB2FDEAh,0FC000000h,0FC479F38h
 10001 0000A195 A25EFBEAFDB2FB0000-
 10001 0000A19E 00FC389F47FC       
 10002 0000A1A4 09668BFC9898CCFC0B-                     dd 0FC8B6609h,0FCCC9898h,0FD0C4F0Bh,0FD4B895Ch,0FD8B3FCFh,0FDCC725Eh
 10002 0000A1AD 4F0CFD5C894BFDCF3F-
 10002 0000A1B6 8BFD5E72CCFD       
 10003 0000A1BC 2F3910FE67D857FE7D-                     dd 0FE10392Fh,0FE57D867h,0FEA4DA7Dh,0FEF935F7h,0FF5786D9h,0FFC36AD5h
 10003 0000A1C5 DAA4FEF735F9FED986-
 10003 0000A1CE 57FFD56AC3FF       
 10004                                  mp3_is_table_normal:
 10005 0000A1D4 0000000000000040        		dd  00000000h, 40000000h
 10006 0000A1DC BB58860D46A77932                        dd  0D8658BBh, 3279A746h
 10007 0000A1E4 D1F56C17300A9328                        dd  176CF5D1h, 28930A30h
 10008 0000A1EC 0000002000000020                        dd  20000000h, 20000000h
 10009 0000A1F4 300A9328D1F56C17                        dd  28930A30h, 176CF5D1h
 10010 0000A1FC 46A77932BB58860D                        dd  3279A746h, 0D8658BBh
 10011 0000A204 0000004000000000                        dd  40000000h, 00000000h
 10012                                  mp3_is_table_lsf_src:			; sqrt based constants...
 10013 0000A20C 00000080                		dd 80000000h            ; 40000000h*2 ; 2.0   (2^1.00) aka 2
 10014 0000A210 667EA26B                                dd 6BA27E66h            ; 35D13F33h*2 ; 1.681 (2^0.75)
 10015 0000A214 9A79825A                                dd 5A82799Ah            ; 2D413CCDh*2 ; 1.414 (2^0.50) aka sqrt(2)
 10016 0000A218 2AF81B4C                                dd 4C1BF82Ah            ; 260DFC15h*2 ; 1.189 (2^0.25) aka sqrt(sqrt(2))
 10017                                  mp3_pow2_quarters:
 10018 0000A21C 00000080                		dd 80000000h            ; 40000000h*2 ; 2^(0/4)
 10019 0000A220 52F03798                                dd 9837F052h            ; 4C1BF829h*2 ; 2^(1/4)
 10020 0000A224 34F304B5                                dd 0B504F334h           ; 5A82799Ah*2 ; 2^(2/4)
 10021 0000A228 CCFC44D7                                dd 0D744FCCCh           ; 6BA27E66h*2 ; 2^(3/4)
 10022                                  mp3_initialized:
 10023 0000A22C 00000000                		dd 0                   
 10024                                  mp3_huff_num_entries:
 10025 0000A230 12000000                		dd 12h            
 10026                                  wrchr_buf:
 10027 0000A234 00                      		db 0                   
 10028                                                  
 10029                                  num_enqueued_frames:
 10030 0000A235 00                      		db 0
 10031                                  
 10032                                  ; align 4
 10033                                  
 10034                                  ; 21/10/2024                   
 10035 0000A236 00000000                zero		dd 0
 10036                                  
 10037                                  huff_tree_list_numbits:
 10038 0000A23A 0303020106060505        		db    3,   3,   2,   1,   6,   6,   5,   5
 10039 0000A242 0503030301060605                        db    5,   3,   3,   3,   1,   6,   6,   5
 10040 0000A24A 0505030202020808                        db    5,   5,   3,   2,   2,   2,   8,   8
 10041 0000A252 0706070707070606                        db    7,   6,   7,   7,   7,   7,   6,   6
 10042 0000A25A 0606030303010707                        db    6,   6,   3,   3,   3,   1,   7,   7
 10043 0000A262 0606060505050504                        db    6,   6,   6,   5,   5,   5,   5,   4
 10044 0000A26A 0404030203030A0A                        db    4,   4,   3,   2,   3,   3, 0Ah, 0Ah
 10045 0000A272 0A0A090909090808                        db  0Ah, 0Ah,   9,   9,   9,   9,   8,   8
 10046 0000A27A 0909080909080807                        db    9,   9,   8,   9,   9,   8,   8,   7
 10047 0000A282 0707080808080707                        db    7,   7,   8,   8,   8,   8,   7,   7
 10048 0000A28A 0707060506060403                        db    7,   7,   6,   5,   6,   6,   4,   3
 10049 0000A292 03010B0B0A090A0A                        db    3,   1, 0Bh, 0Bh, 0Ah,   9, 0Ah, 0Ah
 10050 0000A29A 0909090808090909                        db    9,   9,   9,   8,   8,   9,   9,   9
 10051 0000A2A2 0908080807080808                        db    9,   8,   8,   8,   7,   8,   8,   8
 10052 0000A2AA 0808080808060606                        db    8,   8,   8,   8,   8,   6,   6,   6
 10053 0000A2B2 0404020303020909                        db    4,   4,   2,   3,   3,   2,   9,   9
 10054 0000A2BA 0808090908080808                        db    8,   8,   9,   9,   8,   8,   8,   8
 10055 0000A2C2 0707070808070707                        db    7,   7,   7,   8,   8,   7,   7,   7
 10056 0000A2CA 0706060606050506                        db    7,   6,   6,   6,   6,   5,   5,   6
 10057 0000A2D2 0605050404040303                        db    6,   5,   5,   4,   4,   4,   3,   3
 10058 0000A2DA 03030B0B0B0B0B0B                        db    3,   3, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 10059 0000A2E2 0A0A0A0A0A0A0A0B                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Bh
 10060 0000A2EA 0B0A09090A0A0909                        db  0Bh, 0Ah,   9,   9, 0Ah, 0Ah,   9,   9
 10061 0000A2F2 0A0A090A0A080809                        db  0Ah, 0Ah,   9, 0Ah, 0Ah,   8,   8,   9
 10062 0000A2FA 090A0A09090A0A08                        db    9, 0Ah, 0Ah,   9,   9, 0Ah, 0Ah,   8
 10063 0000A302 0808090909090909                        db    8,   8,   9,   9,   9,   9,   9,   9
 10064 0000A30A 0808080808080707                        db    8,   8,   8,   8,   8,   8,   7,   7
 10065 0000A312 0707060606060403                        db    7,   7,   6,   6,   6,   6,   4,   3
 10066 0000A31A 03010A0A0A0A0A0A                        db    3,   1, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 10067 0000A322 0A0B0B0A0A090909                        db  0Ah, 0Bh, 0Bh, 0Ah, 0Ah,   9,   9,   9
 10068 0000A32A 0A0A0A0A08080909                        db  0Ah, 0Ah, 0Ah, 0Ah,   8,   8,   9,   9
 10069 0000A332 0708080808080909                        db    7,   8,   8,   8,   8,   8,   9,   9
 10070 0000A33A 0909080708080707                        db    9,   9,   8,   7,   8,   8,   7,   7
 10071 0000A342 0808080909080808                        db    8,   8,   8,   9,   9,   8,   8,   8
 10072 0000A34A 0808080707060607                        db    8,   8,   8,   7,   7,   6,   6,   7
 10073 0000A352 0706050405050303                        db    7,   6,   5,   4,   5,   5,   3,   3
 10074 0000A35A 03020A0A09090909                        db    3,   2, 0Ah, 0Ah,   9,   9,   9,   9
 10075 0000A362 0909090808090908                        db    9,   9,   9,   8,   8,   9,   9,   8
 10076 0000A36A 0808080808090908                        db    8,   8,   8,   8,   8,   9,   9,   8
 10077 0000A372 0808080809090707                        db    8,   8,   8,   8,   9,   9,   7,   7
 10078 0000A37A 0708080808080807                        db    7,   8,   8,   8,   8,   8,   8,   7
 10079 0000A382 0707070808070707                        db    7,   7,   7,   8,   8,   7,   7,   7
 10080 0000A38A 0606060607070605                        db    6,   6,   6,   6,   7,   7,   6,   5
 10081 0000A392 0505040405050403                        db    5,   5,   4,   4,   5,   5,   4,   3
 10082 0000A39A 0303131312111010                        db    3,   3, 13h, 13h, 12h, 11h, 10h, 10h
 10083 0000A3A2 1010101010101010                        db  10h, 10h, 10h, 10h, 10h, 10h, 10h, 10h
 10084 0000A3AA 11110F0F10100F0F                        db  11h, 11h, 0Fh, 0Fh, 10h, 10h, 0Fh, 0Fh
 10085 0000A3B2 0F0F0F0F0F0F0F0F                        db  0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh, 0Fh
 10086 0000A3BA 10100F10100E0E0F                        db  10h, 10h, 0Fh, 10h, 10h, 0Eh, 0Eh, 0Fh
 10087 0000A3C2 0F0F0F0E0E0E0E0E                        db  0Fh, 0Fh, 0Fh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh
 10088 0000A3CA 0E0E0E0E0E0E0F0F                        db  0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Fh, 0Fh
 10089 0000A3D2 0E0D0E0E0D0D0E0E                        db  0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh, 0Eh
 10090 0000A3DA 0D0E0E0D0E0E0D0E                        db  0Dh, 0Eh, 0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Eh
 10091 0000A3E2 0E0D0D0E0E0C0C0C                        db  0Eh, 0Dh, 0Dh, 0Eh, 0Eh, 0Ch, 0Ch, 0Ch
 10092 0000A3EA 0D0D0D0D0D0D0C0D                        db  0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh
 10093 0000A3F2 0D0C0C0D0D0D0D0D                        db  0Dh, 0Ch, 0Ch, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh
 10094 0000A3FA 0D0D0D0D0D0D0D0C                        db  0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch
 10095 0000A402 0C0D0D0C0C0C0C0D                        db  0Ch, 0Dh, 0Dh, 0Ch, 0Ch, 0Ch, 0Ch, 0Dh
 10096 0000A40A 0D0D0D0C0D0D0C0B                        db  0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Ch, 0Bh
 10097 0000A412 0C0C0C0C0C0C0C0C                        db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 10098 0000A41A 0B0B0B0B0C0C0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh
 10099 0000A422 0C0C0B0C0C0C0C0B                        db  0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Bh
 10100 0000A42A 0B0C0C0B0C0C0B0C                        db  0Bh, 0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ch
 10101 0000A432 0C0B0C0C0A0A0A0B                        db  0Ch, 0Bh, 0Ch, 0Ch, 0Ah, 0Ah, 0Ah, 0Bh
 10102 0000A43A 0B0B0B0B0B0B0B0A                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah
 10103 0000A442 0A0A0A0B0B0A0B0B                        db  0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh
 10104 0000A44A 0A0B0B0B0B0A0A0B                        db  0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh
 10105 0000A452 0B0A0A0B0B0B0B0B                        db  0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 10106 0000A45A 0B09090A0A0A0A0A                        db  0Bh,   9,   9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 10107 0000A462 0B0B0909090A0A09                        db  0Bh, 0Bh,   9,   9,   9, 0Ah, 0Ah,   9
 10108 0000A46A 090A0A0A0A0A0A0A                        db    9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 10109 0000A472 0A0A0A0809090909                        db  0Ah, 0Ah, 0Ah,   8,   9,   9,   9,   9
 10110 0000A47A 09090A0A09090908                        db    9,   9, 0Ah, 0Ah,   9,   9,   9,   8
 10111 0000A482 0809090909090908                        db    8,   9,   9,   9,   9,   9,   9,   8
 10112 0000A48A 0708080808070707                        db    7,   8,   8,   8,   8,   7,   7,   7
 10113 0000A492 0707060606060404                        db    7,   7,   6,   6,   6,   6,   4,   4
 10114 0000A49A 03010D0D0D0D0C0D                        db    3,   1, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh
 10115 0000A4A2 0D0D0D0D0D0C0D0D                        db  0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh
 10116 0000A4AA 0C0C0C0C0C0C0C0C                        db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 10117 0000A4B2 0C0C0C0C0C0C0C0C                        db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 10118 0000A4BA 0C0C0C0C0C0C0C0D                        db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Dh
 10119 0000A4C2 0D0B0B0C0C0C0C0B                        db  0Dh, 0Bh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Bh
 10120 0000A4CA 0B0B0B0B0B0C0C0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ch, 0Ch, 0Bh
 10121 0000A4D2 0B0B0B0B0B0B0B0C                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ch
 10122 0000A4DA 0C0B0B0B0B0B0B0B                        db  0Ch, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 10123 0000A4E2 0B0B0B0B0B0B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 10124 0000A4EA 0B0B0B0B0B0B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 10125 0000A4F2 0B0B0C0C0B0B0B0B                        db  0Bh, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh, 0Bh, 0Bh
 10126 0000A4FA 0B0B0A0B0B0B0B0B                        db  0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 10127 0000A502 0B0A0A0B0B0A0A0A                        db  0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah
 10128 0000A50A 0A0B0B0A0A0A0A0A                        db  0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 10129 0000A512 0A0A0B0B0A0A0A0A                        db  0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah
 10130 0000A51A 0A0B0B090A0A0A0A                        db  0Ah, 0Bh, 0Bh,   9, 0Ah, 0Ah, 0Ah, 0Ah
 10131 0000A522 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 10132 0000A52A 090A0A0A0A090A0A                        db    9, 0Ah, 0Ah, 0Ah, 0Ah,   9, 0Ah, 0Ah
 10133 0000A532 090A0A0A0A0A0A0A                        db    9, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 10134 0000A53A 0A09090909090909                        db  0Ah,   9,   9,   9,   9,   9,   9,   9
 10135 0000A542 0A0A090909090909                        db  0Ah, 0Ah,   9,   9,   9,   9,   9,   9
 10136 0000A54A 0A0A090909090909                        db  0Ah, 0Ah,   9,   9,   9,   9,   9,   9
 10137 0000A552 0809090909090909                        db    8,   9,   9,   9,   9,   9,   9,   9
 10138 0000A55A 0909090808080809                        db    9,   9,   9,   8,   8,   8,   8,   9
 10139 0000A562 0909090909090908                        db    9,   9,   9,   9,   9,   9,   9,   8
 10140 0000A56A 0808080808090908                        db    8,   8,   8,   8,   8,   9,   9,   8
 10141 0000A572 0808080808080909                        db    8,   8,   8,   8,   8,   8,   9,   9
 10142 0000A57A 0807080807070707                        db    8,   7,   8,   8,   7,   7,   7,   7
 10143 0000A582 0808070707070706                        db    8,   8,   7,   7,   7,   7,   7,   6
 10144 0000A58A 0707060607070606                        db    7,   7,   6,   6,   7,   7,   6,   6
 10145 0000A592 0605050505050304                        db    6,   5,   5,   5,   5,   5,   3,   4
 10146 0000A59A 04030B0B0B0B0B0B                        db    4,   3, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 10147 0000A5A2 0B0B0A0B0B0B0B0A                        db  0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah
 10148 0000A5AA 0A0A0A0A080A0A09                        db  0Ah, 0Ah, 0Ah, 0Ah,   8, 0Ah, 0Ah,   9
 10149 0000A5B2 0909090A1011110F                        db    9,   9,   9, 0Ah, 10h, 11h, 11h, 0Fh
 10150 0000A5BA 0F10100E0F0F0E0E                        db  0Fh, 10h, 10h, 0Eh, 0Fh, 0Fh, 0Eh, 0Eh
 10151 0000A5C2 0F0F0E0E0F0F0F0F                        db  0Fh, 0Fh, 0Eh, 0Eh, 0Fh, 0Fh, 0Fh, 0Fh
 10152 0000A5CA 0E0F0F0E0D080909                        db  0Eh, 0Fh, 0Fh, 0Eh, 0Dh,   8,   9,   9
 10153 0000A5D2 08080D0E0E0E0E0E                        db    8,   8, 0Dh, 0Eh, 0Eh, 0Eh, 0Eh, 0Eh
 10154 0000A5DA 0E0E0E0E0E0D0D0E                        db  0Eh, 0Eh, 0Eh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh
 10155 0000A5E2 0E0E0E0D0E0E0D0D                        db  0Eh, 0Eh, 0Eh, 0Dh, 0Eh, 0Eh, 0Dh, 0Dh
 10156 0000A5EA 0D0E0E0E0E0D0D0E                        db  0Dh, 0Eh, 0Eh, 0Eh, 0Eh, 0Dh, 0Dh, 0Eh
 10157 0000A5F2 0E0D0E0E0C0D0D0D                        db  0Eh, 0Dh, 0Eh, 0Eh, 0Ch, 0Dh, 0Dh, 0Dh
 10158 0000A5FA 0D0D0D0D0D0D0D0D                        db  0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh, 0Dh
 10159 0000A602 0D0D0D0C0D0D0D0D                        db  0Dh, 0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Dh, 0Dh
 10160 0000A60A 0D0D0C0D0D0C0C0D                        db  0Dh, 0Dh, 0Ch, 0Dh, 0Dh, 0Ch, 0Ch, 0Dh
 10161 0000A612 0D0B0C0C0C0C0C0C                        db  0Dh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 10162 0000A61A 0C0D0D0B0C0C0C0C                        db  0Ch, 0Dh, 0Dh, 0Bh, 0Ch, 0Ch, 0Ch, 0Ch
 10163 0000A622 0B0C0C0C0C0C0C0C                        db  0Bh, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 10164 0000A62A 0C0B0C0C0B0B0B0B                        db  0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Bh, 0Bh, 0Bh
 10165 0000A632 0C0C0C0C0C0C0C0C                        db  0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch, 0Ch
 10166 0000A63A 0B0C0C0B0C0C0B0C                        db  0Bh, 0Ch, 0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ch
 10167 0000A642 0C0B0C0C0B0A0A0B                        db  0Ch, 0Bh, 0Ch, 0Ch, 0Bh, 0Ah, 0Ah, 0Bh
 10168 0000A64A 0B0B0B0B0B0A0A0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh
 10169 0000A652 0B0A0A0B0B0B0B0B                        db  0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 10170 0000A65A 0B0B0B0A0B0B0A0A                        db  0Bh, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah
 10171 0000A662 0A0B0B0A0A0B0B0A                        db  0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah
 10172 0000A66A 0A0B0B0A09090A0A                        db  0Ah, 0Bh, 0Bh, 0Ah,   9,   9, 0Ah, 0Ah
 10173 0000A672 0A0A0A0A0909090A                        db  0Ah, 0Ah, 0Ah, 0Ah,   9,   9,   9, 0Ah
 10174 0000A67A 0A090A0A09090809                        db  0Ah,   9, 0Ah, 0Ah,   9,   9,   8,   9
 10175 0000A682 0909090909090908                        db    9,   9,   9,   9,   9,   9,   9,   8
 10176 0000A68A 0809090808070708                        db    8,   9,   9,   8,   8,   7,   7,   8
 10177 0000A692 0807060606060404                        db    8,   7,   6,   6,   6,   6,   4,   4
 10178 0000A69A 0301080808080808                        db    3,   1,   8,   8,   8,   8,   8,   8
 10179 0000A6A2 0808070808070708                        db    8,   8,   7,   8,   8,   7,   7,   8
 10180 0000A6AA 0807070707070707                        db    8,   7,   7,   7,   7,   7,   7,   7
 10181 0000A6B2 0707070707080809                        db    7,   7,   7,   7,   7,   8,   8,   9
 10182 0000A6BA 0B0B0B0B0B0B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 10183 0000A6C2 0B0B0B0B0B0B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 10184 0000A6CA 0B0B0B0B0B0B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh, 0Bh
 10185 0000A6D2 0B0B0B0B040B0B0B                        db  0Bh, 0Bh, 0Bh, 0Bh,   4, 0Bh, 0Bh, 0Bh
 10186 0000A6DA 0B0C0C0B0A0B0B0A                        db  0Bh, 0Ch, 0Ch, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah
 10187 0000A6E2 0A0A0A0B0B0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah
 10188 0000A6EA 0A0B0B0A0A0A0A0A                        db  0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 10189 0000A6F2 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 10190 0000A6FA 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 10191 0000A702 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 10192 0000A70A 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 10193 0000A712 0A0A0B0B0A0A0A0A                        db  0Ah, 0Ah, 0Bh, 0Bh, 0Ah, 0Ah, 0Ah, 0Ah
 10194 0000A71A 0A0A0A0A0A0A0A0A                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah, 0Ah
 10195 0000A722 0A0B0B0A0B0B0A09                        db  0Ah, 0Bh, 0Bh, 0Ah, 0Bh, 0Bh, 0Ah,   9
 10196 0000A72A 0A0A0A0A0B0B0A09                        db  0Ah, 0Ah, 0Ah, 0Ah, 0Bh, 0Bh, 0Ah,   9
 10197 0000A732 090A0A090A0A0A0A                        db    9, 0Ah, 0Ah,   9, 0Ah, 0Ah, 0Ah, 0Ah
 10198 0000A73A 09090A0A09090909                        db    9,   9, 0Ah, 0Ah,   9,   9,   9,   9
 10199 0000A742 0909090909090909                        db    9,   9,   9,   9,   9,   9,   9,   9
 10200 0000A74A 0909090909090909                        db    9,   9,   9,   9,   9,   9,   9,   9
 10201 0000A752 0909090909090909                        db    9,   9,   9,   9,   9,   9,   9,   9
 10202 0000A75A 0909090909090909                        db    9,   9,   9,   9,   9,   9,   9,   9
 10203 0000A762 0A0A0909090A0A08                        db  0Ah, 0Ah,   9,   9,   9, 0Ah, 0Ah,   8
 10204 0000A76A 0909080808080808                        db    9,   9,   8,   8,   8,   8,   8,   8
 10205 0000A772 0808080808080809                        db    8,   8,   8,   8,   8,   8,   8,   9
 10206 0000A77A 0908080808080809                        db    9,   8,   8,   8,   8,   8,   8,   9
 10207 0000A782 0907080807070707                        db    9,   7,   8,   8,   7,   7,   7,   7
 10208 0000A78A 0708080707060607                        db    7,   8,   8,   7,   7,   6,   6,   7
 10209 0000A792 0706050506060404                        db    7,   6,   5,   5,   6,   6,   4,   4
 10210 0000A79A 0404060606060606                        db    4,   4,   6,   6,   6,   6,   6,   6
 10211 0000A7A2 0505050505040404                        db    5,   5,   5,   5,   5,   4,   4,   4
 10212 0000A7AA 0401040404040404                        db    4,   1,   4,   4,   4,   4,   4,   4
 10213 0000A7B2 0404040404040404                        db    4,   4,   4,   4,   4,   4,   4,   4
 10214 0000A7BA 0404                                    db    4,   4
 10215                                  _@@const_3:
 10216 0000A7BC 03                      		db 3
 10217 0000A7BD 000000                                  db 3 dup(0)
 10218                                  
 10219                                  		; 16/02/2025
 10220                                  ;mp3_synth_filter_procs:
 10221                                  		; 15/02/2025
 10222                                  		;dd synth_16bit_shift_0_slow ; SYNTH_MACRO 0,0,0
 10223                                  
 10224                                  ; Erdogan Tan - 17/10/2024
 10225                                  txt_hello:	
 10226 0000A7C0 0D0A                    		db 13,10
 10227                                  		;db 'NOCASH MP3 PLAYER v1.4 for Windows ',0
 10228                                  		; 09/01/2025
 10229                                  		;db 'NOCASH MP3 PLAYER v1.0 for TRDOS386 ',0
 10230                                  		; 15/02/2025
 10231 0000A7C2 54696E79204D503320-     		db 'Tiny MP3 PLAYER v1.0 for TRDOS386 by Erdogan Tan.',0
 10231 0000A7CB 504C41594552207631-
 10231 0000A7D4 2E3020666F72205452-
 10231 0000A7DD 444F53333836206279-
 10231 0000A7E6 204572646F67616E20-
 10231 0000A7EF 54616E2E00         
 10232                                  txt_bdate:
 10233 0000A7F4 0D0A                    		db 13,10
 10234 0000A7F6 466562727561727920-     		db 'February 2025.',13,10,0
 10234 0000A7FF 323032352E0D0A00   
 10235                                  		
 10236 0000A807 32342F30322F323032-     		db "24/02/2025", 0
 10236 0000A810 3500               
 10237                                  
 10238 0000A812 303132333435363738-     hex_chars:	db "0123456789ABCDEF", 0
 10238 0000A81B 3941424344454600   
 10239                                  
 10240 0000A823 0D0A                    msgAC97Info:	db 0Dh, 0Ah
 10241 0000A825 414339372041756469-     		db "AC97 Audio Controller & Codec Info", 0Dh, 0Ah
 10241 0000A82E 6F20436F6E74726F6C-
 10241 0000A837 6C6572202620436F64-
 10241 0000A840 656320496E666F0D0A 
 10242 0000A849 56656E646F72204944-     		db "Vendor ID: "
 10242 0000A852 3A20               
 10243 0000A854 303030306820446576-     msgVendorId:	db "0000h Device ID: "
 10243 0000A85D 6963652049443A20   
 10244 0000A865 30303030680D0A          msgDevId:	db "0000h", 0Dh, 0Ah
 10245 0000A86C 4275733A20              		db "Bus: "
 10246 0000A871 303068204465766963-     msgBusNo:	db "00h Device: "
 10246 0000A87A 653A20             
 10247 0000A87D 3030682046756E6374-     msgDevNo:	db "00h Function: "
 10247 0000A886 696F6E3A20         
 10248 0000A88B 303068                  msgFncNo:	db "00h"
 10249 0000A88E 0D0A                    		db 0Dh, 0Ah
 10250                                  
 10251 0000A890 4E414D4241523A20        		db "NAMBAR: "
 10252 0000A898 30303030682020          msgNamBar:	db "0000h  "
 10253 0000A89F 4E41424D4241523A20      		db "NABMBAR: "
 10254 0000A8A8 303030306820204952-     msgNabmBar:	db "0000h  IRQ: "
 10254 0000A8B1 513A20             
 10255 0000A8B4 3030                    msgIRQ:		dw 3030h
 10256 0000A8B6 0D0A00                  		db 0Dh, 0Ah, 0
 10257                                  
 10258 0000A8B9 0D0A46696C65204E61-     msgFileName:	db 0Dh, 0Ah, "File Name: ",0
 10258 0000A8C2 6D653A2000         
 10259 0000A8C7 0D0A53616D706C6520-     msgSampleRate:	db 0Dh, 0Ah, "Sample Rate: "
 10259 0000A8D0 526174653A20       
 10260 0000A8D6 303030303020487A00      msgHertz:	db "00000 Hz", 0 
 10261 0000A8DF 0D0A42697420526174-     msgKBitRate:	db 0Dh, 0Ah, "Bit Rate: ", 0
 10261 0000A8E8 653A2000           
 10262 0000A8EC 206B6269742F7300        msgKBits:	db " kbit/s", 0
 10263 0000A8F4 0D0A506C6179626163-     msgPlayback:	db 0Dh, 0Ah, "Playback: ", 0
 10263 0000A8FD 6B3A2000           
 10264                                  ; 17/02/2025
 10265                                  ;msg8Bits:	db "8 bits, ", 0 
 10266 0000A901 4D6F6E6F0D0A00          msgMono:	db "Mono", 0Dh, 0Ah, 0
 10267 0000A908 313620626974732C20-     msg16Bits:	db "16 bits, ", 0
 10267 0000A911 00                 
 10268 0000A912 53746572656F            msgStereo:	db "Stereo"
 10269 0000A918 0D0A00                  nextline:	db 0Dh, 0Ah, 0
 10270                                  
 10271                                  ; 15/02/2025
 10272 0000A91B 0D0A                    msgDuration:	db 0Dh, 0Ah	
 10273 0000A91D 4475726174696F6E3A-     		db "Duration: "
 10273 0000A926 20                 
 10274 0000A927 30303A303020286D69-     msgMinSec:	db "00:00 (minute:second)"
 10274 0000A930 6E7574653A7365636F-
 10274 0000A939 6E6429             
 10275 0000A93C 0D0A00                  		db 0Dh, 0Ah, 0	
 10276                                  
 10277 0000A93F 56524120737570706F-     msgVRAheader:	db "VRA support: "
 10277 0000A948 72743A20           
 10278 0000A94C 00                      		db 0	
 10279 0000A94D 5945530D0A00            msgVRAyes:	db "YES", 0Dh, 0Ah, 0
 10280 0000A953 4E4F200D0A              msgVRAno:	db "NO ", 0Dh, 0Ah
 10281 0000A958 28496E746572706F6C-     		db "(Interpolated sample rate playing method)"
 10281 0000A961 617465642073616D70-
 10281 0000A96A 6C6520726174652070-
 10281 0000A973 6C6179696E67206D65-
 10281 0000A97C 74686F6429         
 10282 0000A981 0D0A00                  		db 0Dh, 0Ah, 0
 10283                                  
 10284 0000A984 0D0A                    msgSB16Info:	db 0Dh, 0Ah
 10285 0000A986 20417564696F204861-     		db " Audio Hardware: Sound Blaster 16", 0Dh, 0Ah
 10285 0000A98F 7264776172653A2053-
 10285 0000A998 6F756E6420426C6173-
 10285 0000A9A1 7465722031360D0A   
 10286 0000A9A9 202020202020426173-     		db "      Base Port: "
 10286 0000A9B2 6520506F72743A20   
 10287                                  msgBasePort:
 10288 0000A9BA 303030680D0A            		db "000h", 0Dh, 0Ah
 10289 0000A9C0 202020202020202020-     		db "            IRQ: "
 10289 0000A9C9 2020204952513A20   
 10290                                  msgSB16IRQ:
 10291 0000A9D1 30                      		db 30h
 10292 0000A9D2 0D0A00                  		db 0Dh, 0Ah, 0
 10293                                  
 10294                                  		; 15/02/2025
 10295 0000A9D5 75736167653A20746D-     txt_help:	db 'usage: tmp3play filename.mp3',0Dh,0Ah,0
 10295 0000A9DE 7033706C6179206669-
 10295 0000A9E7 6C656E616D652E6D70-
 10295 0000A9F0 330D0A00           
 10296                                  
 10297 0000A9F4 0D0A                    txt_original:	db 13,10
 10298 0000A9F6 4F726967696E616C20-     		db 'Original code: ', 13,10
 10298 0000A9FF 636F64653A200D0A   
 10299 0000AA07 202020202020202020-     		db '         Nocash MP3 Decoder/Player', 13,10
 10299 0000AA10 4E6F63617368204D50-
 10299 0000AA19 33204465636F646572-
 10299 0000AA22 2F506C617965720D0A 
 10300 0000AA2B 202020202020202020-     		db '         MP3PLAYER.EXE v1.4 (20/09/2024)', 13,10
 10300 0000AA34 4D5033504C41594552-
 10300 0000AA3D 2E4558452076312E34-
 10300 0000AA46 202832302F30392F32-
 10300 0000AA4F 303234290D0A       
 10301 0000AA55 202020202020202020-     		db '         by Martin Korth (TASM source code)'
 10301 0000AA5E 6279204D617274696E-
 10301 0000AA67 204B6F727468202854-
 10301 0000AA70 41534D20736F757263-
 10301 0000AA79 6520636F646529     
 10302 0000AA80 0D0A00                  		db 13,10,0
 10303 0000AA83 76312E342E30            		db 'v1.4.0'
 10304                                  ; 10/01/2025
 10305 0000AA89 00                      half_buffer:	db 0
 10306                                  
 10307                                  ; 13/02/2025
 10308 0000AA8A 0D0A                    msgPressAKey:	db 0Dh, 0Ah
 10309 0000AA8C 202E2E2E2070726573-     		db ' ... press a key to continue ... '
 10309 0000AA95 732061206B65792074-
 10309 0000AA9E 6F20636F6E74696E75-
 10309 0000AAA7 65202E2E2E20       
 10310 0000AAAD 0D0A0D0A00              		db 0Dh, 0Ah, 0Dh, 0Ah, 0
 10311                                  
 10312                                  ; ---------------------------------------------------------------------------
 10313                                  
 10314                                  		; 13/02/2025 (mp3play6.s)
 10315                                  		; 30/12/2024 (cgaplay.s)
 10316 0000AAB2 FF<rep 8h>              fillblock:	times 8 db 0FFh
 10317 0000AABA 0000                    		dw 0
 10318                                  
 10319                                  ; ---------------------------------------------------------------------------
 10320                                  
 10321                                  ; 13/02/2025
 10322                                  ; 23/11/2024
 10323 0000AABC 0B0A0C0E090D0F          colors:		db 0Bh, 0Ah, 0Ch, 0Eh, 09h, 0Dh, 0Fh
 10324                                  			; cyan, green, red, yellow, blue, magenta, white
 10325 0000AAC3 0B                      ccolor:		db 0Bh	; cyan
 10326                                  
 10327                                  ; ---------------------------------------------------------------------------
 10328                                  
 10329                                  ; 24/01/2025
 10330 0000AAC4 03                      volume_level	db 3
 10331                                  
 10332                                  ; ---------------------------------------------------------------------------
 10333                                  
 10334                                  ; 26/01/2025
 10335                                  ; 07/12/2024
 10336                                  trdos386_err_msg:
 10337 0000AAC5 5452444F5320333836-     		db 'TRDOS 386 System call error !',10,13,0
 10337 0000AACE 2053797374656D2063-
 10337 0000AAD7 616C6C206572726F72-
 10337 0000AAE0 20210A0D00         
 10338                                  
 10339                                  ; ---------------------------------------------------------------------------
 10340                                  
 10341                                  ; 15/02/2025
 10342 0000AAE5 0A0D                    noDevMsg:	db 10,13
 10343 0000AAE7 4572726F723A20556E-     		db 'Error: Unable to find a proper audio device !'
 10343 0000AAF0 61626C6520746F2066-
 10343 0000AAF9 696E6420612070726F-
 10343 0000AB02 70657220617564696F-
 10343 0000AB0B 206465766963652021 
 10344 0000AB14 0A0D00                  		db 10,13,0
 10345                                  
 10346                                  ; ---------------------------------------------------------------------------
 10347                                  
 10348                                  ; 15/02/2025
 10349                                  txt_not_found:
 10350 0000AB17 0A0D                    noFileErrMsg:	db 10,13
 10351 0000AB19 4572726F723A204669-     		db 'Error: File not found !',10,13,0
 10351 0000AB22 6C65206E6F7420666F-
 10351 0000AB2B 756E6420210A0D00   
 10352                                  
 10353                                  ; ---------------------------------------------------------------------------
 10354                                  
 10355                                  ; 15/02/2025
 10356 0000AB33 0A0D                    not_valid_mp3f:	db 10,13
 10357 0000AB35 4E6F7420612070726F-     		db 'Not a proper/valid MP3 file !',10,13,0
 10357 0000AB3E 7065722F76616C6964-
 10357 0000AB47 204D50332066696C65-
 10357 0000AB50 20210A0D00         
 10358                                  
 10359                                  ; ---------------------------------------------------------------------------
 10360                                  
 10361                                  EOF:
 10362                                  
 10363                                  ; ===========================================================================
 10364                                  ; Uninitialized DATA (BSS)
 10365                                  ; ===========================================================================
 10366                                  
 10367 0000AB55 90<rep 3h>              align 4
 10368                                  
 10369                                  ; 15/02/2025
 10370                                  bss_start:
 10371                                  
 10372                                  ABSOLUTE bss_start
 10373                                  
 10374                                  ;------------------------------------------------------------------------------
 10375                                  ; IFF/ILBM DATA
 10376                                  ;------------------------------------------------------------------------------
 10377                                  
 10378 0000AB58 ????????                picture.width:	resd 1 	; current picture width and height
 10379 0000AB5C ????????                picture.height:	resd 1
 10380                                  
 10381                                  ;------------------------------------------------------------------------------
 10382                                  
 10383                                  ; 16/02/2025 (tmp3play.s)
 10384                                  ; 13/02/2025
 10385                                  ; 12/02/2025 (mp3play6.s)
 10386                                  ; 05/02/2025 (cgaplay.s)
 10387                                  
 10388                                  alignb 4
 10389                                  
 10390                                  ; 25/01/2025
 10391 0000AB60 ????????                stream_size	resd 1
 10392                                  ; 13/02/2025
 10393                                  ;turn_on_leds	resd 1
 10394                                  ; 22/01/2025
 10395 0000AB64 ????????                stream_begin	resd 1
 10396 0000AB68 ????????                fb_count	resd 1
 10397                                  
 10398                                  ; 26/01/2025
 10399 0000AB6C ????????                sd_count	resd 1
 10400                                  
 10401                                  ; 12/01/2025
 10402                                  ;;;;
 10403                                  ; AC97 specific
 10404 0000AB70 ????????                bus_dev_fn	resd 1
 10405 0000AB74 ????????                dev_vendor	resd 1
 10406 0000AB78 ????                    NAMBAR		resw 1
 10407 0000AB7A ????                    NABMBAR		resw 1
 10408                                  ; SB16 specific
 10409 0000AB7C ????????                audio_io_base	resd 1
 10410                                  ac97_int_ln_reg:
 10411 0000AB80 ??                      audio_intr	resb 1
 10412                                  ;;;;
 10413                                  
 10414                                  ; 13/02/2025
 10415 0000AB81 ??                      stopped		resb 1
 10416                                  
 10417 0000AB82 ????                    alignb 4
 10418                                  
 10419                                  ;;;
 10420                                  ; 24/01/2025
 10421                                  ; 20/10/2024 (TRDOS 386 specific parameters)
 10422 0000AB84 ??                      audio_hardware	resb 1
 10423 0000AB85 ??                      vra		resb 1
 10424 0000AB86 ??                      srb		resb 1
 10425 0000AB87 ??                      blocks		resb 1
 10426 0000AB88 ????????                buffer_size	resd 1
 10427                                  ;;;
 10428                                  
 10429                                  ; 23/05/2025
 10430 0000AB8C ????????                timerticks	resd 1
 10431                                  
 10432                                  ; 15/01/2025 (FASM)
 10433                                  ;;;;
 10434                                  ; 13/01/2025 (Interpolation parameters)
 10435 0000AB90 ????????                conversion	resd 1	; pointer to convers(t)ion
 10436                                  ;			; or interpolation proc address
 10437 0000AB94 ????????                loadsize	resd 1	; decoding buffer size
 10438 0000AB98 ??                      interpolation	resb 1	; interpolation status
 10439                                  
 10440                                  ;------------------------------------------------------------------------------
 10441                                  
 10442                                  ; 25/01/2025
 10443 0000AB99 ??????                  alignb 4
 10444                                  
 10445                                  ; 15/02/2025
 10446                                  mp3_context_start:
 10447 0000AB9C <res 1000h>             main_data_pool_start	resb 4096
 10448 0000BB9C ????????                main_data_pool_wr_ptr	resd 1
 10449 0000BBA0 ????????                mp3_src_data_location	resd 1
 10450 0000BBA4 ????????                mp3_src_frame_size	resd 1
 10451 0000BBA8 ????????                mp3_src_frame_end	resd 1
 10452 0000BBAC ????????                mp3_hdr_32bit_header	resd 1
 10453 0000BBB0 ????????                mp3_hdr_flag_crc	resd 1
 10454 0000BBB4 ????????                mp3_hdr_flag_mpeg25	resd 1
 10455 0000BBB8 ????????                mp3_hdr_flag_padding	resd 1
 10456 0000BBBC ????????                mp3_sample_rate		resd 1
 10457 0000BBC0 ????????                mp3_hdr_sample_rate_index resd 1
 10458 0000BBC4 ????????                mp3_bit_rate		resd 1
 10459 0000BBC8 ????????                mp3_num_channels	resd 1
 10460                                  ; 17/02/2025
 10461                                  ;mp3_bytes_per_sample	resd 1
 10462 0000BBCC ????????                mp3_curr_syn_index	resd 1
 10463 0000BBD0 ????????                mp3_curr_syn_dst	resd 1
 10464 0000BBD4 ????????                mp3_nb_frames		resd 1
 10465 0000BBD8 ????????                mp3_hdr_mode_val	resd 1
 10466 0000BBDC ????????                mp3_hdr_mode_ext	resd 1
 10467 0000BBE0 ????????                mp3_hdr_flag_lsf	resd 1
 10468                                  
 10469 0000BBE4 <res 2000h>             mp3_synth_buf   resd 2048
 10470 0000DBE4 ????????????????        mp3_synth_index resd 2
 10471 0000DBEC <res 2400h>             mp3_sb_samples  resd 2304
 10472                                  				; MP3_MAX_CHANNELS*36*SBLIMIT
 10473 0000FFEC <res 1200h>             mp3_mdct_buf    resd 1152
 10474                                  				; MP3_MAX_CHANNELS*SBLIMIT*18
 10475 000111EC ????????                mp3_free_format_frame_size resd 1
 10476                                  
 10477 000111F0 ??                      mp3_curr_vfrac_bits resb 1
 10478                                  
 10479 000111F1 ??????                  alignb 4
 10480                                  
 10481 000111F4 ????????                mp3_xing_id     resd 1
 10482 000111F8 ????????                mp3_xing_flags  resd 1
 10483 000111FC ????????                mp3_xing_frames resd 1
 10484 00011200 ????????                mp3_xing_filesize resd 1
 10485 00011204 <res 64h>               mp3_xing_toc    resb 100
 10486 00011268 ????????                mp3_xing_vbr_scale resd 1
 10487 0001126C ????????                mp3_file_size   resd 1
 10488 00011270 ????????                mp3_id3_size    resd 1
 10489 00011274 ????????                mp3_tag_size    resd 1
 10490                                  
 10491 00011278 ????????                mp3_num_frames_decoded	resd 1
 10492 0001127C ????????                mp3_samples_dst		resd 1
 10493                                  ; DWORD mp3_samples_output_size
 10494 00011280 ????????                mp3_samples_output_size	resd 1
 10495 00011284 ????????                mp3_samples_dst_step	resd 1
 10496                                  
 10497 00011288 ????????                mp3_curr_channel	resd 1
 10498 0001128C ????????                mp3_curr_granule	resd 1
 10499 00011290 ????????                mp3_curr_frame		resd 1
 10500                                  
 10501 00011294 ????????                mp3_bitstream_start	resd 1
 10502 00011298 ????????                mp3_src_remain		resd 1
 10503 0001129C ????????                mp3_extra_bytes		resd 1
 10504 000112A0 ????????                mp3_main_data_begin	resd 1
 10505 000112A4 ????????                mp3_num_compress_bits	resd 1
 10506                                  
 10507 000112A8 ????????                mp3_nb_granules resd 1
 10508                                  
 10509 000112AC <res 2680h>             mp3_granules		resb 9856
 10510 0001392C <res 480h>              mp3_exponents		resw 576
 10511 00013DAC <res B800h>             huff_tree_buf		resb 0B800h
 10512 0001F5AC <res 240h>              mp3_band_index_long	resw 288
 10513 0001F7EC <res 803Ch>             mp3_table_4_3_exp	resb 32828
 10514                                  
 10515 00027828 <res 200F0h>            mp3_table_4_3_value	resd 32828
 10516 00047918 <res 800h>              mp3_exp_table		resd 512
 10517 00048118 <res 8000h>             mp3_expval_table	resd 8192
 10518 00050118 <res 480h>              mp3_mdct_win		resd 288
 10519 00050598 <res 800h>              mp3_is_table_lsf	resd 512
 10520 00050D98 <res 1000h>             mp3_synth_win		resd 1024
 10521 00051D98 <res 2000h>             mp3_lsf_sf_expand_exploded_table resb 8192
 10522                                  mp3_context_end:
 10523 00053D98 ????????                _@@region_address0	resd 1
 10524 00053D9C ????????                _@@region_address1	resd 1
 10525 00053DA0 ????????                _@@saved_sp		resd 1
 10526 00053DA4 ????????                mp3_main_data_siz	resd 1
 10527 00053DA8 ????????                _@@scfsi        resd 1
 10528 00053DAC <res Ch>                _@@gains        resd 3
 10529 00053DB8 ????????                _@@rle_point    resd 1
 10530 00053DBC ????????                _@@III          resd 1
 10531 00053DC0 ????????                _@@JJJ          resd 1
 10532 00053DC4 ????????                _@@linbits      resd 1
 10533 00053DC8 ????????                _@@vlc_table    resd 1
 10534 00053DCC ????????                _@@coarse_end   resd 1
 10535                                  
 10536 00053DD0 ????????                _@rle_point     resd 1
 10537 00053DD4 ????????                _@@rle_ptr      resd 1
 10538 00053DD8 ????????                _@@rle_val      resd 1
 10539 00053DDC ????????                _@@rle_val_x_40h resd 1
 10540 00053DE0 ????????                _@@max_bands    resb 4
 10541 00053DE4 ????????                _@@max_blocks   resd 1
 10542 00053DE8 ????????                _@@max_pos      resd 1
 10543 00053DEC <res 28h>               _@@sfb_array    resb 40
 10544 00053E14 ????????                _@@is_tab       resd 1
 10545 00053E18 ????????                _@@n_long_sfb   resd 1
 10546 00053E1C ????????                _@@n_short_sfb  resd 1
 10547 00053E20 ????????                _@@n_sfb        resd 1
 10548 00053E24 <res 900h>              _@@tmp          resb 2304
 10549 00054724 ????????                _@@s0           resd 1
 10550 00054728 ????????                _@@s2           resd 1
 10551 0005472C ????????                _@@s3           resd 1
 10552                                  
 10553 00054730 <res 48h>               _@@@tmp         resd 18 ; resb 72
 10554 00054778 ????????                _@@tmp0         resd 1
 10555 0005477C ????????                _@@tmp1         resd 1
 10556 00054780 ????????                _@@tmp2         resd 1
 10557 00054784 ????????                _@@tmp3         resd 1
 10558 00054788 ????????                _@@tmp4         resd 1
 10559 0005478C ????????                _@@tmp5         resd 1
 10560 00054790 ????????                mp3_out2_a0     resd 1
 10561 00054794 ????????                mp3_out2_a1     resd 1
 10562 00054798 ????????                mp3_out2_a2     resd 1
 10563 0005479C ????????                mp3_out2_b0     resd 1
 10564 000547A0 ????????                mp3_out2_b1     resd 1
 10565 000547A4 ????????                mp3_out2_b2     resd 1
 10566 000547A8 ????????                                resd 1
 10567 000547AC ????????                                resd 1
 10568 000547B0 ????????                _@@@JJJ         resd 1
 10569 000547B4 ????????                _@@www          resd 1
 10570 000547B8 ????????                _@@mdct_long_end resd 1
 10571 000547BC ????????                _@@sblimit      resd 1
 10572 000547C0 ????????                _@@switch_point resd 1
 10573 000547C4 <res 100h>              mp3_huff_tmp_bits	resb 256
 10574 000548C4 <res 200h>              mp3_huff_tmp_codes	resb 512
 10575 00054AC4 ????????                _@@table_nb_bits	resd 1
 10576 00054AC8 ????????                _@@nb_codes		resd 1
 10577 00054ACC ????????                _@@prefix_numbits	resd 1
 10578 00054AD0 ????????                _@@prefix_pattern	resd 1
 10579 00054AD4 ????????                _@@curr_table_size	resd 1
 10580 00054AD8 ????????                _@@curr_table_mask	resd 1
 10581 00054ADC ????????                _@@curr_table_index	resd 1
 10582 00054AE0 ????????                _@@granule_addr		resd 1
 10583                                  ; HANDLE hFile
 10584 00054AE4 ????????                hFile           resd 1
 10585                                  ; HANDLE hMap
 10586                                  ;hMap           resd 1
 10587 00054AE8 ????????                stream_start    resd 1
 10588 00054AEC ????????                stream_pos      resd 1
 10589 00054AF0 ????????                bytes_left      resd 1
 10590                                  
 10591                                  ; 17/02/2025
 10592                                  ;; 20/10/2024
 10593                                  ;; DWORD diskresult
 10594                                  ;;diskresult     resd 1
 10595                                  ;; HANDLE std_out
 10596                                  ;;std_out        resd 1
 10597                                  ;;cmdline_buf    resb 1024
 10598                                  ;cmdline_buf	resb 128
 10599                                  ;; HANDLE mp3_wav_handle
 10600                                  ;mp3_wav_handle  resd 1
 10601                                  ;; HANDLE mp3_pcm_handle
 10602                                  ;mp3_pcm_handle  resd 1
 10603                                  ;_@@max_diff     resd 1
 10604                                  ;_@@avg_diff     resd 2
 10605                                  ;pcm_filepos     resd 1
 10606                                  ;_@@mono_convert resd 1
 10607                                  ;_@@pcm_steps    resw 2
 10608                                  ;_@@worst_pcm_filepos resd 1
 10609                                  ;_@@worst_mp3_filepos resd 1
 10610                                  ;		resd 1
 10611                                  
 10612                                  ;------------------------------------------------------------------------------
 10613                                  
 10614                                  ; 15/02/2025
 10615                                  
 10616 00054AF4 <res Ch>                alignb 16
 10617                                  
 10618 00054B00 <res 200h>              RowOfs		resw 256
 10619                                  
 10620 00054D00 <res 200h>              NewScope_L	resw 256
 10621 00054F00 <res 200h>              NewScope_R	resw 256
 10622 00055100 <res 200h>              OldScope_L	resw 256
 10623 00055300 <res 200h>              OldScope_R	resw 256
 10624                                  
 10625                                  ;------------------------------------------------------------------------------
 10626                                  
 10627 00055500 <res 50h>               mp3_file_name	resb 80 ; wave file, path name (<= 80 bytes)
 10628                                  
 10629 00055550 ????????                		resd 1
 10630 00055554 ????????                txtSize		resd 1
 10631                                  
 10632                                  ;------------------------------------------------------------------------------
 10633                                  
 10634                                  ; 10/01/2025
 10635 00055558 <res AA8h>              alignb 4096
 10636                                  
 10637                                  ; 27/01/2025
 10638                                  ; 15/01/2025
 10639 00056000 <res 2000h>             decoding_buffer resb 8192  ; 2*4096 (max. 4608)
 10640 00058000 <res 9000h>             sample_buffer	resb 36864 ; 8*4608
 10641                                  
 10642                                  ;------------------------------------------------------------------------------
 10643                                  
 10644                                  ; 26/01/2025
 10645                                  ;alignb 4096
 10646                                  
 10647                                  ; 15/02/2025
 10648 00061000 ????????                sounddata_copy	resd 1	; address pointer for fast (conversion) copy
 10649 00061004 ????????                get_sound_data	resd 1	; procedure pointer
 10650                                  
 10651                                  ; 16/02/2025
 10652 00061008 <res FF8h>              alignb 4096
 10653                                  
 10654 00062000 <res 400h>              sounddata	resb 1024 ; 16 bit stereo samples for wave scope display
 10655 00062400 <res 200h>              sounddata2	resb 512 ; temporary buffer
 10656                                  
 10657                                  ; 26/01/2025
 10658 00062600 <res A00h>              alignb 4096
 10659                                  
 10660                                  end_of_bss:
 10661                                  
 10662                                  ; ===========================================================================
 10663                                  ; end
