     1                                  ; ****************************************************************************
     2                                  ; playwav6.s (for TRDOS 386)
     3                                  ; ----------------------------------------------------------------------------
     4                                  ; PLAYWAV6.PRG ! AC'97 (ICH) .WAV PLAYER program by Erdogan TAN
     5                                  ;
     6                                  ; 25/11/2023
     7                                  ;
     8                                  ; [ Last Modification: 27/11/2023 ]
     9                                  ;
    10                                  ; Modified from PLAYWAV5.PRG .wav player program by Erdogan Tan, 18/08/2020
    11                                  ;
    12                                  ; Assembler: NASM version 2.15
    13                                  ;	     nasm playwav6.s -l playwav6.txt -o PLAYWAV6.PRG	
    14                                  ; ----------------------------------------------------------------------------
    15                                  ; Derived from '.wav file player for DOS' Jeff Leyda, Sep 02, 2002
    16                                  
    17                                  ; previous version: playwav3.s (17/06/2017)
    18                                  
    19                                  ; CODE
    20                                  
    21                                  ; 14/07/2020
    22                                  ; 31/12/2017
    23                                  ; TRDOS 386 (v2.0) system calls
    24                                  _ver 	equ 0
    25                                  _exit 	equ 1
    26                                  _fork 	equ 2
    27                                  _read 	equ 3
    28                                  _write	equ 4
    29                                  _open	equ 5
    30                                  _close 	equ 6
    31                                  _wait 	equ 7
    32                                  _create	equ 8
    33                                  _rename	equ 9
    34                                  _delete	equ 10
    35                                  _exec	equ 11
    36                                  _chdir	equ 12
    37                                  _time 	equ 13
    38                                  _mkdir 	equ 14
    39                                  _chmod	equ 15
    40                                  _rmdir	equ 16
    41                                  _break	equ 17
    42                                  _drive	equ 18
    43                                  _seek	equ 19
    44                                  _tell 	equ 20
    45                                  _memory	equ 21
    46                                  _prompt	equ 22
    47                                  _path	equ 23
    48                                  _env	equ 24
    49                                  _stime	equ 25
    50                                  _quit	equ 26
    51                                  _intr	equ 27
    52                                  _dir	equ 28
    53                                  _emt 	equ 29
    54                                  _ldrvt 	equ 30
    55                                  _video 	equ 31
    56                                  _audio	equ 32
    57                                  _timer	equ 33
    58                                  _sleep	equ 34
    59                                  _msg    equ 35
    60                                  _geterr	equ 36
    61                                  _fpstat	equ 37
    62                                  _pri	equ 38
    63                                  _rele	equ 39
    64                                  _fff	equ 40
    65                                  _fnf	equ 41
    66                                  _alloc	equ 42
    67                                  _dalloc equ 43
    68                                  _calbac equ 44
    69                                  _dma	equ 45
    70                                  
    71                                  %macro sys 1-4
    72                                      ; 29/04/2016 - TRDOS 386 (TRDOS v2.0)	
    73                                      ; 03/09/2015	
    74                                      ; 13/04/2015
    75                                      ; Retro UNIX 386 v1 system call.	
    76                                      %if %0 >= 2   
    77                                          mov ebx, %2
    78                                          %if %0 >= 3    
    79                                              mov ecx, %3
    80                                              %if %0 = 4
    81                                                 mov edx, %4   
    82                                              %endif
    83                                          %endif
    84                                      %endif
    85                                      mov eax, %1
    86                                      ;int 30h
    87                                      int 40h ; TRDOS 386 (TRDOS v2.0)	   
    88                                  %endmacro
    89                                  
    90                                  ; TRDOS 386 (and Retro UNIX 386 v1) system call format:
    91                                  ; sys systemcall (eax) <arg1 (ebx)>, <arg2 (ecx)>, <arg3 (edx)>
    92                                  
    93                                  BUFFERSIZE	equ	32768	; audio buffer size 
    94                                  ENDOFFILE       equ     1	; flag for knowing end of file
    95                                  
    96                                  [BITS 32]
    97                                  
    98                                  [ORG 0] 
    99                                  
   100                                  _STARTUP:
   101                                  	; Prints the Credits Text.
   102                                  	sys	_msg, Credits, 255, 0Bh
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000000 BB[3E200000]        <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00000005 B9FF000000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 0000000A BA0B000000          <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 0000000F B823000000          <1>  mov eax, %1
    86                              <1> 
    87 00000014 CD40                <1>  int 40h
   103                                  
   104                                  	; clear bss
   105 00000016 B9[4D230000]            	mov	ecx, bss_end
   106 0000001B BF[C4220000]            	mov	edi, bss_start
   107 00000020 29F9                    	sub	ecx, edi
   108 00000022 D1E9                    	shr	ecx, 1
   109 00000024 31C0                    	xor	eax, eax
   110 00000026 F366AB                  	rep	stosw
   111                                  
   112                                  	; Detect (& Enable) AC'97 Audio Device
   113 00000029 E850040000              	call	DetectAC97
   114 0000002E 731B                    	jnc     short GetFileName
   115                                  
   116                                  _dev_not_ready:
   117                                  ; couldn't find the audio device!
   118                                  	sys	_msg, noDevMsg, 255, 0Fh
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000030 BB[EC200000]        <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00000035 B9FF000000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 0000003A BA0F000000          <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 0000003F B823000000          <1>  mov eax, %1
    86                              <1> 
    87 00000044 CD40                <1>  int 40h
   119 00000046 E90D040000                      jmp     Exit
   120                                  
   121                                  GetFileName:  
   122 0000004B 89E6                    	mov	esi, esp
   123 0000004D AD                      	lodsd
   124 0000004E 83F802                  	cmp	eax, 2 ; two arguments 
   125                                  	       ; (program file name & mod file name)
   126 00000051 0F820F040000            	jb	pmsg_usage ; nothing to do
   127                                  
   128 00000057 AD                      	lodsd ; program file name address 
   129 00000058 AD                      	lodsd ; mod file name address (file to be read)
   130 00000059 89C6                    	mov	esi, eax
   131 0000005B BF[ED220000]            	mov	edi, wav_file_name
   132                                  ScanName:       
   133 00000060 AC                      	lodsb
   134 00000061 84C0                    	test	al, al
   135 00000063 0F84FD030000            	je	pmsg_usage
   136 00000069 3C20                    	cmp	al, 20h
   137 0000006B 74F3                    	je	short ScanName	; scan start of name.
   138 0000006D AA                      	stosb
   139 0000006E B4FF                    	mov	ah, 0FFh
   140                                  a_0:	
   141 00000070 FEC4                    	inc	ah
   142                                  a_1:
   143 00000072 AC                      	lodsb
   144 00000073 AA                      	stosb
   145 00000074 3C2E                    	cmp	al, '.'
   146 00000076 74F8                    	je	short a_0	
   147 00000078 20C0                    	and	al, al
   148 0000007A 75F6                    	jnz	short a_1
   149                                  
   150 0000007C 08E4                    	or	ah, ah		; if period NOT found,
   151 0000007E 750B                    	jnz	short _1 	; then add a .WAV extension.
   152                                  SetExt:
   153 00000080 4F                      	dec	edi
   154 00000081 C7072E574156            	mov	dword [edi], '.WAV'
   155 00000087 C6470400                	mov	byte [edi+4], 0
   156                                  
   157                                  _1:
   158                                  
   159                                  ; 26/11/2023
   160                                  %if 0
   161                                  	; Allocate Audio Buffer (for user)
   162                                  	;sys	_audio, 0200h, BUFFERSIZE, audio_buffer
   163                                  	; 26/11/2023
   164                                  	sys	_audio, 0200h, [buffersize], audio_buffer
   165                                  	jnc	short _2
   166                                  error_exit:
   167                                  	sys	_msg, trdos386_err_msg, 255, 0Eh
   168                                  	jmp	Exit
   169                                  _2:
   170                                  	; DIRECT CGA (TEXT MODE) MEMORY ACCESS
   171                                  	; bl = 0, bh = 4
   172                                  	; Direct access/map to CGA (Text) memory (0B8000h)
   173                                  
   174                                  	sys	_video, 0400h
   175                                  	cmp	eax, 0B8000h
   176                                  	jne	short error_exit
   177                                  
   178                                  	; Initialize Audio Device (bh = 3)
   179                                  	sys	_audio, 0301h, 0, audio_int_handler 
   180                                  ;	jc	short error_exit
   181                                  _3:
   182                                  
   183                                  %endif
   184 0000008B E866060000              	call	write_audio_dev_info 
   185                                  
   186                                  
   187                                  ; open the file
   188                                          ; open existing file
   189 00000090 E80B040000                      call    openFile ; no error? ok.
   190 00000095 731B                            jnc     short _gsr
   191                                  
   192                                  ; file not found!
   193                                  	sys	_msg, noFileErrMsg, 255, 0Fh
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000097 BB[17210000]        <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 0000009C B9FF000000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 000000A1 BA0F000000          <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000000A6 B823000000          <1>  mov eax, %1
    86                              <1> 
    87 000000AB CD40                <1>  int 40h
   194                                  _exit_:
   195 000000AD E9A6030000                      jmp     Exit
   196                                  
   197                                  _gsr:  
   198 000000B2 E823040000                     	call    getSampleRate		; read the sample rate
   199                                                                          ; pass it onto codec.
   200                                  	;jc	Exit
   201                                  	; 25/11/2023
   202 000000B7 72F4                    	jc	short _exit_
   203                                  
   204 000000B9 66A3[C6220000]          	mov	[sample_rate], ax
   205 000000BF 880D[C4220000]          	mov	[stmo], cl
   206 000000C5 8815[C5220000]          	mov	[bps], dl
   207                                  
   208                                  	; 26/11/2023
   209 000000CB C605[40230000]00        	mov	byte [fbs_shift], 0 ; 0 = stereo and 16 bit 
   210 000000D2 FEC9                    	dec	cl
   211 000000D4 7506                    	jnz	short _gsr_1 ; stereo
   212 000000D6 FE05[40230000]          	inc	byte [fbs_shift] ; 1 = mono or 8 bit		
   213                                  _gsr_1:	
   214 000000DC 80FA08                  	cmp	dl, 8 
   215 000000DF 7706                    	ja	short _gsr_2 ; 16 bit samples
   216 000000E1 FE05[40230000]          	inc	byte [fbs_shift] ; 2 = mono and 8 bit
   217                                  _gsr_2:	
   218                                  
   219                                  	; 06/06/2017
   220                                  	sys	_audio, 0E00h ; get audio controller info
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 000000E7 BB000E0000          <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000000EC B820000000          <1>  mov eax, %1
    86                              <1> 
    87 000000F1 CD40                <1>  int 40h
   221 000000F3 0F82B9020000            	jc	error_exit ; 25/11/2023
   222                                  
   223                                  	;cmp	ah, 2 ; ICH ? (Intel AC'97 Audio Controller)
   224                                  	;jne	_dev_not_ready	
   225                                  
   226                                  	; EAX = IRQ Number in AL
   227                                  	;	Audio Device Number in AH 
   228                                  	; EBX = DEV/VENDOR ID
   229                                  	;       (DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV)
   230                                  	; ECX = BUS/DEV/FN 
   231                                  	;       (00000000BBBBBBBBDDDDDFFF00000000)
   232                                  	; EDX = NABMBAR/NAMBAR (for AC97)
   233                                  	;      (Low word, DX = NAMBAR address)
   234                                  	; EDX = Base IO Addr (DX) for SB16 & VT8233
   235                                  
   236 000000F9 A2[3F230000]            	mov	[ac97_int_ln_reg], al
   237 000000FE 891D[41230000]          	mov	[dev_vendor], ebx
   238 00000104 890D[45230000]          	mov	[bus_dev_fn], ecx
   239                                  	;mov	[ac97_NamBar], dx
   240                                  	;shr	dx, 16
   241                                  	;mov	[ac97_NabmBar], dx
   242 0000010A 8915[49230000]          	mov	[ac97_NamBar], edx	
   243                                    
   244 00000110 E8C3060000              	call	write_ac97_pci_dev_info
   245                                  
   246                                  	; 25/11/2023
   247 00000115 E885080000              	call	write_VRA_info
   248                                  
   249                                  	; 01/05/2017
   250 0000011A E8EE050000              	call	write_wav_file_info
   251                                  
   252                                  	; 25/11/2023
   253                                  	; ------------------------------------------
   254                                  
   255 0000011F 803D[D0220000]01        	cmp	byte [VRA], 1
   256 00000126 7205                    	jb	short chk_sample_rate
   257                                  
   258                                  playwav_48_khz:	
   259                                  	;mov	dword [loadfromwavfile], loadFromFile
   260                                  	;mov	dword [buffersize], 65536
   261 00000128 E96C020000              	jmp	PlayNow
   262                                  
   263                                  chk_sample_rate:
   264                                  	; set conversion parameters
   265                                  	; (for 8, 11.025, 16, 22.050, 24, 32 kHZ)
   266 0000012D 66A1[C6220000]          	mov	ax, [sample_rate]
   267 00000133 663D80BB                	cmp	ax, 48000
   268 00000137 74EF                    	je	short playwav_48_khz
   269                                  chk_22khz:
   270 00000139 663D2256                	cmp	ax, 22050
   271 0000013D 7545                    	jne	short chk_11khz
   272 0000013F 803D[C5220000]08        	cmp	byte [bps], 8
   273 00000146 7615                    	jna	short chk_22khz_1
   274 00000148 BB[29160000]            	mov	ebx, load_22khz_stereo_16_bit
   275 0000014D 803D[C4220000]01        	cmp	byte [stmo], 1 
   276 00000154 751A                    	jne	short chk_22khz_2
   277 00000156 BB[9C150000]            	mov	ebx, load_22khz_mono_16_bit
   278 0000015B EB13                    	jmp	short chk_22khz_2
   279                                  chk_22khz_1:
   280 0000015D BB[15150000]            	mov	ebx, load_22khz_stereo_8_bit
   281 00000162 803D[C4220000]01        	cmp	byte [stmo], 1 
   282 00000169 7505                    	jne	short chk_22khz_2
   283 0000016B BB[8C140000]            	mov	ebx, load_22khz_mono_8_bit
   284                                  chk_22khz_2:
   285 00000170 B85A1D0000              	mov	eax, 7514  ; (442*17)
   286 00000175 BA25000000              	mov	edx, 37
   287 0000017A B911000000              	mov	ecx, 17 
   288 0000017F E9BA010000              	jmp	set_sizes	
   289                                  chk_11khz:
   290 00000184 663D112B                	cmp	ax, 11025
   291 00000188 7545                    	jne	short chk_44khz
   292 0000018A 803D[C5220000]08        	cmp	byte [bps], 8
   293 00000191 7615                    	jna	short chk_11khz_1
   294 00000193 BB[45180000]            	mov	ebx, load_11khz_stereo_16_bit
   295 00000198 803D[C4220000]01        	cmp	byte [stmo], 1 
   296 0000019F 751A                    	jne	short chk_11khz_2
   297 000001A1 BB[CC170000]            	mov	ebx, load_11khz_mono_16_bit
   298 000001A6 EB13                    	jmp	short chk_11khz_2
   299                                  chk_11khz_1:
   300 000001A8 BB[52170000]            	mov	ebx, load_11khz_stereo_8_bit
   301 000001AD 803D[C4220000]01        	cmp	byte [stmo], 1 
   302 000001B4 7505                    	jne	short chk_11khz_2
   303 000001B6 BB[DA160000]            	mov	ebx, load_11khz_mono_8_bit
   304                                  chk_11khz_2:
   305 000001BB B8AD0E0000              	mov	eax, 3757  ; (221*17)
   306 000001C0 BA4A000000              	mov	edx, 74
   307 000001C5 B911000000              	mov	ecx, 17
   308 000001CA E96F010000              	jmp	set_sizes 
   309                                  chk_44khz:
   310 000001CF 663D44AC                	cmp	ax, 44100
   311 000001D3 7545                    	jne	short chk_16khz
   312 000001D5 803D[C5220000]08        	cmp	byte [bps], 8
   313 000001DC 7615                    	jna	short chk_44khz_1
   314 000001DE BB[6C1A0000]            	mov	ebx, load_44khz_stereo_16_bit
   315 000001E3 803D[C4220000]01        	cmp	byte [stmo], 1 
   316 000001EA 751A                    	jne	short chk_44khz_2
   317 000001EC BB[F3190000]            	mov	ebx, load_44khz_mono_16_bit
   318 000001F1 EB13                    	jmp	short chk_44khz_2
   319                                  chk_44khz_1:
   320 000001F3 BB[76190000]            	mov	ebx, load_44khz_stereo_8_bit
   321 000001F8 803D[C4220000]01        	cmp	byte [stmo], 1 
   322 000001FF 7505                    	jne	short chk_44khz_2
   323 00000201 BB[FA180000]            	mov	ebx, load_44khz_mono_8_bit
   324                                  chk_44khz_2:
   325 00000206 B8D93A0000              	mov	eax, 15065 ; (655*23)
   326 0000020B BA19000000              	mov	edx, 25
   327 00000210 B917000000              	mov	ecx, 23
   328 00000215 E924010000              	jmp	set_sizes 
   329                                  chk_16khz:
   330 0000021A 663D803E                	cmp	ax, 16000
   331 0000021E 7545                    	jne	short chk_8khz
   332 00000220 803D[C5220000]08        	cmp	byte [bps], 8
   333 00000227 7615                    	jna	short chk_16khz_1
   334 00000229 BB[D10F0000]            	mov	ebx, load_16khz_stereo_16_bit
   335 0000022E 803D[C4220000]01        	cmp	byte [stmo], 1 
   336 00000235 751A                    	jne	short chk_16khz_2
   337 00000237 BB[500F0000]            	mov	ebx, load_16khz_mono_16_bit
   338 0000023C EB13                    	jmp	short chk_16khz_2
   339                                  chk_16khz_1:
   340 0000023E BB[960E0000]            	mov	ebx, load_16khz_stereo_8_bit
   341 00000243 803D[C4220000]01        	cmp	byte [stmo], 1 
   342 0000024A 7505                    	jne	short chk_16khz_2
   343 0000024C BB[170E0000]            	mov	ebx, load_16khz_mono_8_bit
   344                                  chk_16khz_2:
   345 00000251 B855150000              	mov	eax, 5461
   346 00000256 BA03000000              	mov	edx, 3
   347 0000025B B901000000              	mov	ecx, 1
   348 00000260 E9D9000000              	jmp	set_sizes 
   349                                  chk_8khz:
   350 00000265 663D401F                	cmp	ax, 8000
   351 00000269 7545                    	jne	short chk_24khz
   352 0000026B 803D[C5220000]08        	cmp	byte [bps], 8
   353 00000272 7615                    	jna	short chk_8khz_1
   354 00000274 BB[CC0C0000]            	mov	ebx, load_8khz_stereo_16_bit
   355 00000279 803D[C4220000]01        	cmp	byte [stmo], 1 
   356 00000280 751A                    	jne	short chk_8khz_2
   357 00000282 BB[FC0B0000]            	mov	ebx, load_8khz_mono_16_bit
   358 00000287 EB13                    	jmp	short chk_8khz_2
   359                                  chk_8khz_1:
   360 00000289 BB[CC0A0000]            	mov	ebx, load_8khz_stereo_8_bit
   361 0000028E 803D[C4220000]01        	cmp	byte [stmo], 1 
   362 00000295 7505                    	jne	short chk_8khz_2
   363 00000297 BB[EC090000]            	mov	ebx, load_8khz_mono_8_bit
   364                                  chk_8khz_2:
   365 0000029C B8AA0A0000              	mov	eax, 2730
   366 000002A1 BA06000000              	mov	edx, 6
   367 000002A6 B901000000              	mov	ecx, 1
   368 000002AB E98E000000              	jmp	set_sizes 
   369                                  chk_24khz:
   370 000002B0 663DC05D                	cmp	ax, 24000
   371 000002B4 7542                    	jne	short chk_32khz
   372 000002B6 803D[C5220000]08        	cmp	byte [bps], 8
   373 000002BD 7615                    	jna	short chk_24khz_1
   374 000002BF BB[FB110000]            	mov	ebx, load_24khz_stereo_16_bit
   375 000002C4 803D[C4220000]01        	cmp	byte [stmo], 1 
   376 000002CB 751A                    	jne	short chk_24khz_2
   377 000002CD BB[98110000]            	mov	ebx, load_24khz_mono_16_bit
   378 000002D2 EB13                    	jmp	short chk_24khz_2
   379                                  chk_24khz_1:
   380 000002D4 BB[0E110000]            	mov	ebx, load_24khz_stereo_8_bit
   381 000002D9 803D[C4220000]01        	cmp	byte [stmo], 1 
   382 000002E0 7505                    	jne	short chk_24khz_2
   383 000002E2 BB[A7100000]            	mov	ebx, load_24khz_mono_8_bit
   384                                  chk_24khz_2:
   385 000002E7 B800200000              	mov	eax, 8192
   386 000002EC BA02000000              	mov	edx, 2
   387 000002F1 B901000000              	mov	ecx, 1
   388 000002F6 EB46                    	jmp	short set_sizes 
   389                                  chk_32khz:
   390 000002F8 663D007D                	cmp	ax, 32000
   391 000002FC 7574                    	jne	short vra_needed
   392 000002FE 803D[C5220000]08        	cmp	byte [bps], 8
   393 00000305 7615                    	jna	short chk_32khz_1
   394 00000307 BB[FC130000]            	mov	ebx, load_32khz_stereo_16_bit
   395 0000030C 803D[C4220000]01        	cmp	byte [stmo], 1 
   396 00000313 751A                    	jne	short chk_32khz_2
   397 00000315 BB[92130000]            	mov	ebx, load_32khz_mono_16_bit
   398 0000031A EB13                    	jmp	short chk_32khz_2
   399                                  chk_32khz_1:
   400 0000031C BB[F5120000]            	mov	ebx, load_32khz_stereo_8_bit
   401 00000321 803D[C4220000]01        	cmp	byte [stmo], 1 
   402 00000328 7505                    	jne	short chk_32khz_2
   403 0000032A BB[82120000]            	mov	ebx, load_32khz_mono_8_bit
   404                                  chk_32khz_2:
   405 0000032F B8AA2A0000              	mov	eax, 10922
   406 00000334 BA03000000              	mov	edx, 3
   407 00000339 B902000000              	mov	ecx, 2
   408                                  	;jmp	short set_sizes 
   409                                  set_sizes:
   410 0000033E 803D[C4220000]01        	cmp	byte [stmo], 1
   411 00000345 7402                    	je	short ss_1
   412 00000347 D1E0                    	shl	eax, 1
   413                                  ss_1:
   414 00000349 803D[C5220000]08        	cmp	byte [bps], 8
   415 00000350 7602                    	jna	short ss_2
   416                                  	; 16 bit samples
   417 00000352 D1E0                    	shl	eax, 1
   418                                  ss_2:
   419 00000354 A3[91030000]            	mov	[loadsize], eax
   420 00000359 F7E2                    	mul	edx
   421                                  	;cmp	ecx, 1
   422                                  	;je	short ss_3
   423                                  ;ss_3:
   424 0000035B F7F1                    	div	ecx
   425 0000035D 8A0D[40230000]          	mov	cl, [fbs_shift]
   426 00000363 D3E0                    	shl	eax, cl
   427                                  	; 26/11/2023
   428                                  	;shr	eax, 1	; buffer size is 16 bit sample count
   429 00000365 A3[95030000]            	mov	[buffersize], eax ; buffer size in bytes 
   430 0000036A 891D[8D030000]          	mov	[loadfromwavfile], ebx
   431 00000370 EB27                    	jmp	short PlayNow
   432                                  
   433                                  vra_needed:
   434                                  	sys	_msg, msg_no_vra, 255, 07h
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000372 BB[50210000]        <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00000377 B9FF000000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 0000037C BA07000000          <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000381 B823000000          <1>  mov eax, %1
    86                              <1> 
    87 00000386 CD40                <1>  int 40h
   435 00000388 E9CB000000              	jmp	Exit
   436                                  
   437                                  	; 26/11/2023
   438                                  	; 13/11/2023
   439                                  loadfromwavfile:
   440 0000038D [69050000]              	dd	loadFromFile
   441                                  loadsize:	; read from wav file
   442 00000391 00000000                	dd	0
   443                                  buffersize:	; write to DMA buffer
   444 00000395 00000100                	dd	65536 ; bytes
   445                                  
   446                                  PlayNow: 
   447                                  
   448                                  ; 26/11/2023
   449                                  %if 1
   450                                  	; Allocate Audio Buffer (for user)
   451                                  	;sys	_audio, 0200h, BUFFERSIZE, audio_buffer
   452                                  	; 26/11/2023
   453                                  	sys	_audio, 0200h, [buffersize], audio_buffer
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000399 BB00020000          <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 0000039E 8B0D[95030000]      <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 000003A4 BA[00300000]        <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000003A9 B820000000          <1>  mov eax, %1
    86                              <1> 
    87 000003AE CD40                <1>  int 40h
   454 000003B0 731B                    	jnc	short _2
   455                                  
   456                                  	; 26/11/2023 - temporary
   457                                  	;sys	_msg, test_1, 255, 0Ch
   458                                  
   459                                  error_exit:
   460                                  	sys	_msg, trdos386_err_msg, 255, 0Eh
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 000003B2 BB[30210000]        <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 000003B7 B9FF000000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 000003BC BA0E000000          <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000003C1 B823000000          <1>  mov eax, %1
    86                              <1> 
    87 000003C6 CD40                <1>  int 40h
   461 000003C8 E98B000000              	jmp	Exit
   462                                  _2:
   463                                  	; DIRECT CGA (TEXT MODE) MEMORY ACCESS
   464                                  	; bl = 0, bh = 4
   465                                  	; Direct access/map to CGA (Text) memory (0B8000h)
   466                                  
   467                                  	sys	_video, 0400h
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 000003CD BB00040000          <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000003D2 B81F000000          <1>  mov eax, %1
    86                              <1> 
    87 000003D7 CD40                <1>  int 40h
   468 000003D9 3D00800B00              	cmp	eax, 0B8000h
   469 000003DE 75D2                    	jne	short error_exit
   470                                  
   471                                  	; Initialize Audio Device (bh = 3)
   472                                  	sys	_audio, 0301h, 0, audio_int_handler 
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 000003E0 BB01030000          <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 000003E5 B900000000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 000003EA BA[38050000]        <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000003EF B820000000          <1>  mov eax, %1
    86                              <1> 
    87 000003F4 CD40                <1>  int 40h
   473                                  ;	jc	short error_exit
   474                                  _3:
   475                                  
   476                                  %endif
   477                                  
   478                                  ;
   479                                  ; position file pointer to start in actual wav data
   480                                  ; MUCH improvement should really be done here to check if sample size is
   481                                  ; supported, make sure there are 2 channels, etc.  
   482                                  ;
   483                                          ;mov     ah, 42h
   484                                          ;mov     al, 0	; from start of file
   485                                          ;mov     bx, [FileHandle]
   486                                          ;xor     cx, cx
   487                                          ;mov     dx, 44	; jump past .wav/riff header
   488                                          ;int     21h
   489                                  
   490                                  	sys	_seek, [FileHandle], 44, 0
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 000003F6 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 000003FC B92C000000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00000401 BA00000000          <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000406 B813000000          <1>  mov eax, %1
    86                              <1> 
    87 0000040B CD40                <1>  int 40h
   491                                  
   492                                  	sys	_msg, nextline, 255, 07h ; 01/05/2017
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 0000040D BB[D5210000]        <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00000412 B9FF000000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00000417 BA07000000          <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 0000041C B823000000          <1>  mov eax, %1
    86                              <1> 
    87 00000421 CD40                <1>  int 40h
   493                                  
   494                                  ; play the .wav file. Most of the good stuff is in here.
   495                                  
   496 00000423 E8F6010000                      call    PlayWav
   497                                  
   498                                  ; close the .wav file and exit.
   499                                  
   500                                  StopPlaying:
   501                                  	; Stop Playing
   502                                  	sys	_audio, 0700h
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000428 BB00070000          <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 0000042D B820000000          <1>  mov eax, %1
    86                              <1> 
    87 00000432 CD40                <1>  int 40h
   503                                  	; Cancel callback service (for user)
   504                                  	sys	_audio, 0900h
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000434 BB00090000          <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000439 B820000000          <1>  mov eax, %1
    86                              <1> 
    87 0000043E CD40                <1>  int 40h
   505                                  	; Deallocate Audio Buffer (for user)
   506                                  	sys	_audio, 0A00h
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000440 BB000A0000          <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000445 B820000000          <1>  mov eax, %1
    86                              <1> 
    87 0000044A CD40                <1>  int 40h
   507                                  	; Disable Audio Device
   508                                  	sys	_audio, 0C00h
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 0000044C BB000C0000          <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000451 B820000000          <1>  mov eax, %1
    86                              <1> 
    87 00000456 CD40                <1>  int 40h
   509                                  Exit:  
   510 00000458 E85C000000                      call    closeFile
   511                                           
   512                                  	sys	_exit	; Bye!
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77                              <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 0000045D B801000000          <1>  mov eax, %1
    86                              <1> 
    87 00000462 CD40                <1>  int 40h
   513                                  here:
   514 00000464 EBFE                    	jmp	short here
   515                                  
   516                                  pmsg_usage:
   517                                  	sys	_msg, msg_usage, 255, 0Bh
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000466 BB[CD200000]        <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 0000046B B9FF000000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00000470 BA0B000000          <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000475 B823000000          <1>  mov eax, %1
    86                              <1> 
    87 0000047A CD40                <1>  int 40h
   518 0000047C EBDA                    	jmp	short Exit
   519                                  
   520                                  	; 25/11/2023
   521                                  DetectAC97:
   522                                  	; Detect (BH=1) AC'97 (BL=2) Audio Device
   523                                          sys	_audio, 0102h
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 0000047E BB02010000          <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000483 B820000000          <1>  mov eax, %1
    86                              <1> 
    87 00000488 CD40                <1>  int 40h
   524 0000048A 7213                    	jc	short DetectAC97_retn
   525                                  
   526                                  	; 25/11/2023
   527                                  	; Get AC'97 Codec info
   528                                  	; (Function 14, sub function 1)
   529                                  	sys	_audio, 0E01h
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 0000048C BB010E0000          <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000491 B820000000          <1>  mov eax, %1
    86                              <1> 
    87 00000496 CD40                <1>  int 40h
   530                                  	; Save Variable Rate Audio support bit
   531 00000498 2401                    	and	al, 1
   532 0000049A A2[D0220000]            	mov	[VRA], al
   533                                  
   534                                  DetectAC97_retn:
   535 0000049F C3                      	retn
   536                                  
   537                                  ;open or create file
   538                                  ;
   539                                  ;input: ds:dx-->filename (asciiz)
   540                                  ;       al=file Mode (create or open)
   541                                  ;output: none  cs:[FileHandle] filled
   542                                  ;
   543                                  openFile:
   544                                  	;mov	ah, 3Bh	; start with a mode
   545                                  	;add	ah, al	; add in create or open mode
   546                                  	;xor	ecx, ecx
   547                                  	;int	21h
   548                                  	;jc	short _of1
   549                                  	;;mov	[cs:FileHandle], ax
   550                                  
   551                                  	sys	_open, wav_file_name, 0
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 000004A0 BB[ED220000]        <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 000004A5 B900000000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000004AA B805000000          <1>  mov eax, %1
    86                              <1> 
    87 000004AF CD40                <1>  int 40h
   552 000004B1 7205                    	jc	short _of1
   553                                  
   554 000004B3 A3[3A200000]            	mov	[FileHandle], eax
   555                                  _of1:
   556 000004B8 C3                      	retn
   557                                  
   558                                  ; close the currently open file
   559                                  ; input: none, uses cs:[FileHandle]
   560                                  closeFile:
   561 000004B9 833D[3A200000]FF        	cmp	dword [FileHandle], -1
   562 000004C0 7417                    	je	short _cf1
   563                                  	;mov    bx, [FileHandle]  
   564                                  	;mov    ax, 3E00h
   565                                          ;int    21h              ;close file
   566                                  
   567                                  	sys	_close, [FileHandle]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 000004C2 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000004C8 B806000000          <1>  mov eax, %1
    86                              <1> 
    87 000004CD CD40                <1>  int 40h
   568 000004CF C705[3A200000]FFFF-     	mov 	dword [FileHandle], -1
   568 000004D7 FFFF               
   569                                  _cf1:
   570 000004D9 C3                      	retn
   571                                  
   572                                  getSampleRate:
   573                                  	
   574                                  ; reads the sample rate from the .wav file.
   575                                  ; entry: none - assumes file is already open
   576                                  ; exit: ax = sample rate (11025, 22050, 44100, 48000)
   577                                  ;	cx = number of channels (mono=1, stereo=2)
   578                                  ;	dx = bits per sample (8, 16)
   579                                  
   580 000004DA 53                      	push    ebx
   581                                  
   582                                          ;mov	ah, 42h
   583                                          ;mov	al, 0	; from start of file
   584                                          ;mov	bx, [FileHandle]
   585                                          ;xor	ecx, ecx
   586                                          ;mov	dx, 08h	; "WAVE"
   587                                          ;int	21h
   588                                  	
   589                                  	sys	_seek, [FileHandle], 8, 0
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 000004DB 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 000004E1 B908000000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 000004E6 BA00000000          <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000004EB B813000000          <1>  mov eax, %1
    86                              <1> 
    87 000004F0 CD40                <1>  int 40h
   590                                  
   591                                          ;mov	dx, smpRBuff
   592                                          ;mov	cx, 28	; 28 bytes
   593                                  	;mov	ah, 3fh
   594                                          ;int	21h
   595                                  
   596                                  	sys	_read, [FileHandle], smpRBuff, 28
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 000004F2 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 000004F8 B9[D1220000]        <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 000004FD BA1C000000          <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000502 B803000000          <1>  mov eax, %1
    86                              <1> 
    87 00000507 CD40                <1>  int 40h
   597                                  
   598 00000509 813D[D1220000]5741-     	cmp	dword [smpRBuff], 'WAVE'
   598 00000511 5645               
   599 00000513 7520                    	jne	short gsr_stc
   600                                  
   601 00000515 66833D[DD220000]01      	cmp	word [smpRBuff+12], 1	; Offset 20, must be 1 (= PCM)
   602 0000051D 7516                    	jne	short gsr_stc
   603                                  
   604 0000051F 668B0D[DF220000]        	mov	cx, [smpRBuff+14]	; return num of channels in CX
   605 00000526 66A1[E1220000]                  mov     ax, [smpRBuff+16]	; return sample rate in AX
   606 0000052C 668B15[EB220000]        	mov	dx, [smpRBuff+26]	; return bits per sample value in DX
   607                                  gsr_retn:
   608 00000533 5B                              pop     ebx
   609 00000534 C3                              retn
   610                                  gsr_stc:
   611 00000535 F9                      	stc
   612 00000536 EBFB                    	jmp	short gsr_retn
   613                                  
   614                                  audio_int_handler:
   615                                  	; 18/08/2020 (14/10/2020, 'wavplay2.s')
   616                                  
   617                                  	;mov	byte [srb], 1 ; interrupt (or signal response byte)
   618                                  	
   619                                  	;cmp	byte [cbs_busy], 1
   620                                  	;jnb	short _callback_bsy_retn
   621                                  	
   622                                  	;mov	byte [cbs_busy], 1
   623                                  
   624 00000538 A0[CD220000]            	mov	al, [half_buff]
   625                                  
   626 0000053D 3C01                    	cmp	al, 1
   627 0000053F 721A                    	jb	short _callback_retn
   628                                  
   629                                  	; 18/08/2020
   630 00000541 C605[CE220000]01        	mov	byte [srb], 1
   631                                  
   632 00000548 8035[CD220000]03        	xor	byte [half_buff], 3 ; 2->1, 1->2
   633                                  
   634 0000054F 0430                    	add	al, '0'
   635                                  tL0:	; 26/11/2023
   636 00000551 B44E                    	mov	ah, 4Eh
   637 00000553 BB00800B00              	mov	ebx, 0B8000h ; video display page address
   638 00000558 668903                  	mov	[ebx], ax ; show playing buffer (1, 2)
   639                                  _callback_retn:
   640                                  	;mov	byte [cbs_busy], 0
   641                                  _callback_bsy_retn:
   642                                  	sys	_rele ; return from callback service 
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77                              <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 0000055B B827000000          <1>  mov eax, %1
    86                              <1> 
    87 00000560 CD40                <1>  int 40h
   643                                  	; we must not come here !
   644                                  	sys	_exit
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77                              <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000562 B801000000          <1>  mov eax, %1
    86                              <1> 
    87 00000567 CD40                <1>  int 40h
   645                                  	
   646                                  loadFromFile:
   647                                  	; 26/11/2023
   648 00000569 F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
   649                                  					; last of the file?
   650 00000570 7402                    	jz	short lff_0		; no
   651 00000572 F9                      	stc
   652 00000573 C3                      	retn
   653                                  lff_0:
   654                                  	; 13/06/2017
   655                                  	;mov	edx, BUFFERSIZE
   656                                  	; 26/11/2023
   657 00000574 BF[00300000]            	mov	edi, audio_buffer
   658 00000579 8B15[95030000]          	mov	edx, [buffersize]	; bytes
   659 0000057F 8A0D[40230000]          	mov	cl, [fbs_shift]   
   660 00000585 20C9                    	and	cl, cl
   661 00000587 7409                    	jz	short lff_1 ; stereo, 16 bit
   662                                  
   663                                  	; fbs_shift =
   664                                  	;	2 for mono and 8 bit sample (multiplier = 4)
   665                                  	;	1 for mono or 8 bit sample (multiplier = 2)
   666 00000589 D3EA                    	shr	edx, cl
   667                                  	;inc	edx
   668                                  
   669 0000058B BE[00300100]            	mov     esi, temp_buffer
   670 00000590 EB02                    	jmp	short lff_2
   671                                  lff_1:
   672                                  	;mov	esi, audio_buffer
   673 00000592 89FE                    	mov	esi, edi ; audio_buffer
   674                                  lff_2:
   675                                  	; 17/03/2017
   676                                  	; esi = buffer address
   677                                  	; edx = buffer size
   678                                   
   679                                  	; 26/11/2023
   680                                  	; load file into memory
   681                                  	sys 	_read, [FileHandle], esi
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000594 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 0000059A 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 0000059C B803000000          <1>  mov eax, %1
    86                              <1> 
    87 000005A1 CD40                <1>  int 40h
   682 000005A3 89D1                    	mov	ecx, edx
   683 000005A5 724A                    	jc	short padfill ; error !
   684                                  
   685 000005A7 21C0                    	and	eax, eax
   686 000005A9 7446                    	jz	short padfill
   687                                  lff_3:
   688                                  	; 26/11/2023
   689 000005AB 8A1D[40230000]          	mov	bl, [fbs_shift]
   690 000005B1 20DB                    	and	bl, bl
   691 000005B3 745C                    	jz	short lff_11
   692                                  
   693 000005B5 29C1                    	sub	ecx, eax
   694 000005B7 89CD                    	mov	ebp, ecx
   695                                  
   696                                  	;mov	esi, temp_buffer
   697                                  	;mov	edi, audio_buffer
   698 000005B9 89C1                    	mov	ecx, eax   ; byte count
   699                                  
   700 000005BB 803D[C5220000]08        	cmp	byte [bps], 8 ; bits per sample (8 or 16)
   701 000005C2 751E                    	jne	short lff_6 ; 16 bit samples
   702                                  	; 8 bit samples
   703 000005C4 FECB                    	dec	bl  ; shift count, 1 = stereo, 2 = mono
   704 000005C6 740E                    	jz	short lff_5 ; 8 bit, stereo
   705                                  lff_4:
   706                                  	; mono & 8 bit
   707 000005C8 AC                      	lodsb
   708 000005C9 2C80                    	sub	al, 80h ; 08/11/2023
   709 000005CB C1E008                  	shl	eax, 8 ; convert 8 bit sample to 16 bit sample
   710 000005CE 66AB                    	stosw	; left channel
   711 000005D0 66AB                    	stosw	; right channel
   712 000005D2 E2F4                    	loop	lff_4
   713 000005D4 EB16                    	jmp	short lff_8
   714                                  lff_5:
   715                                  	; stereo & 8 bit
   716 000005D6 AC                      	lodsb
   717 000005D7 2C80                    	sub	al, 80h ; 08/11/2023
   718 000005D9 C1E008                  	shl	eax, 8 ; convert 8 bit sample to 16 bit sample
   719 000005DC 66AB                    	stosw
   720 000005DE E2F6                    	loop	lff_5			
   721 000005E0 EB0A                    	jmp	short lff_8
   722                                  lff_6:
   723 000005E2 D1E9                    	shr	ecx, 1 ; word count
   724                                  lff_7:
   725 000005E4 66AD                    	lodsw
   726 000005E6 66AB                    	stosw	; left channel
   727 000005E8 66AB                    	stosw	; right channel
   728 000005EA E2F8                    	loop	lff_7
   729                                  lff_8:
   730                                  	; 27/11/2023
   731 000005EC F8                      	clc
   732 000005ED 89E9                    	mov	ecx, ebp
   733 000005EF E314                    	jecxz	endLFF_retn
   734                                  	
   735                                  padfill:
   736 000005F1 803D[C5220000]10        	cmp 	byte [bps], 16
   737 000005F8 740C                    	je	short lff_10
   738                                  	; Minimum Value = 0
   739 000005FA 30C0                            xor     al, al
   740 000005FC F3AA                    	rep	stosb
   741                                  lff_9:
   742 000005FE 800D[CC220000]01                or	byte [flags], ENDOFFILE	; end of file flag
   743                                  endLFF_retn:
   744 00000605 C3                              retn
   745                                  lff_10:
   746 00000606 31C0                    	xor	eax, eax
   747                                  	; Minimum value = 8000h (-32768)
   748 00000608 D1E9                    	shr	ecx, 1 
   749 0000060A B480                    	mov	ah, 80h ; ax = -32768
   750 0000060C F366AB                  	rep	stosw
   751 0000060F EBED                    	jmp	short lff_9
   752                                  
   753                                  lff_11:
   754                                  	; 16 bit stereo
   755                                  	; ecx = buffer size
   756                                  	; eax = read count
   757 00000611 29C1                    	sub	ecx, eax
   758 00000613 76F0                    	jna	short endLFF_retn
   759 00000615 01C7                    	add	edi, eax  ; audio_buffer + eax
   760 00000617 EBED                    	jmp	short lff_10 ; padfill
   761                                  
   762                                  error_exit_2:
   763                                  	; 26/11/2023 - temporary
   764                                  	;sys	_msg, test_2, 255, 0Ch
   765 00000619 E994FDFFFF              	jmp	error_exit
   766                                  	
   767                                  	; 26/11/2023 - temporary
   768                                  ;test_1:
   769                                  ;	db 13, 10, 'Test 1', 13,10, 0
   770                                  ;test_2:
   771                                  ;	db 13, 10, 'Test 2', 13,10, 0
   772                                  	
   773                                  PlayWav:
   774                                  	; 26/11/2023
   775                                  	; 18/08/2020 (27/07/2020, 'wavplay2.s')
   776                                  	; 13/06/2017
   777                                  	; Convert 8 bit samples to 16 bit samples
   778                                  	; and convert mono samples to stereo samples
   779                                  
   780                                  	; 26/11/2023
   781                                  	; load 32768 bytes into audio buffer
   782                                  	;mov	edi, audio_buffer
   783                                  	;;mov	edx, BUFFERSIZE
   784                                  	; 26/11/2023
   785                                  	;mov	edx, [buffersize]
   786                                  	;call	loadFromFile
   787                                  	; 26/11/2023
   788 0000061E FF15[8D030000]          	call	dword [loadfromwavfile]
   789 00000624 72F3                    	jc	short error_exit_2
   790 00000626 C605[CD220000]01        	mov	byte [half_buff], 1 ; (DMA) Buffer 1
   791                                  
   792                                  	; 18/08/2020 (27/07/2020, 'wavplay2.s')
   793 0000062D F605[CC220000]01        	test    byte [flags], ENDOFFILE  ; end of file
   794 00000634 7512                    	jnz	short _6 ; yes
   795                                  			 ; bypass filling dma half buffer 2
   796                                  
   797                                  	; bh = 16 : update (current, first) dma half buffer
   798                                  	; bl = 0  : then switch to the next (second) half buffer
   799                                  	sys	_audio, 1000h
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000636 BB00100000          <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 0000063B B820000000          <1>  mov eax, %1
    86                              <1> 
    87 00000640 CD40                <1>  int 40h
   800                                  
   801                                  	; 18/08/2020
   802                                  	; [audio_flag] = 1 (in TRDOS 386 kernel)
   803                                  
   804                                  	; audio_buffer must be filled again after above system call 
   805                                  	; (Because audio interrupt will be generated by AC97 hardware
   806                                  	; at the end of the first half of dma buffer.. so, 
   807                                  	; the second half must be ready. 'sound_play' will use it.)
   808                                  
   809                                  	; 26/11/2023
   810                                  	;mov	edi, audio_buffer
   811                                  	;;mov	edx, BUFFERSIZE
   812                                  	; 26/11/2023
   813                                  	;mov	edx, [buffersize]
   814                                  	;call	loadFromFile
   815                                  	; 26/11/2023
   816 00000642 FF15[8D030000]          	call	dword [loadfromwavfile]
   817                                  	;jc	short p_return
   818                                  _6:
   819                                  	; Set Master Volume Level (BL=0 or 80h)
   820                                  	; 	for next playing (BL>=80h)
   821                                  	;sys	_audio, 0B80h, 1D1Dh
   822                                  	sys	_audio, 0B00h, 1D1Dh
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000648 BB000B0000          <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 0000064D B91D1D0000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000652 B820000000          <1>  mov eax, %1
    86                              <1> 
    87 00000657 CD40                <1>  int 40h
   823                                  
   824                                  	; 18/08/2020
   825                                  	;mov	byte [volume_level], 1Dh
   826 00000659 880D[CF220000]          	mov	[volume_level], cl
   827                                  
   828                                  	; Start	to play
   829 0000065F A0[C5220000]            	mov	al, [bps]
   830 00000664 C0E804                  	shr	al, 4 ; 8 -> 0, 16 -> 1
   831 00000667 D0E0                    	shl	al, 1 ; 16 -> 2, 8 -> 0
   832 00000669 8A1D[C4220000]          	mov	bl, [stmo]
   833 0000066F FECB                    	dec	bl
   834 00000671 08C3                    	or	bl, al
   835 00000673 668B0D[C6220000]        	mov	cx, [sample_rate] 
   836 0000067A B704                    	mov	bh, 4 ; start to play	
   837                                  	sys	_audio
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77                              <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 0000067C B820000000          <1>  mov eax, %1
    86                              <1> 
    87 00000681 CD40                <1>  int 40h
   838                                  
   839                                  	;mov	ebx, 0B8000h ; video display page address
   840                                  	;mov	ah, 4Eh
   841                                  	;mov	al, [half_buffer]
   842                                  	;mov	[ebx], ax ; show playing buffer (1, 2)
   843                                  
   844                                  	; 18/08/2020 (27/07/2020, 'wavplay2.s')
   845                                  	; Here..
   846                                  	; If byte [flags] <> ENDOFFILE ...
   847                                  	; user's audio_buffer has been copied to dma half buffer 2
   848                                  
   849                                  	; [audio_flag] = 0 (in TRDOS 386 kernel)
   850                                  
   851                                  	; audio_buffer must be filled again after above system call 
   852                                  	; (Because, audio interrupt will be generated by VT8237R
   853                                  	; at the end of the first half of dma buffer.. so, 
   854                                  	; the 2nd half of dma buffer is ready but the 1st half
   855                                  	; must be filled again.)
   856                                  
   857                                  	; 18/08/2020
   858 00000683 F605[CC220000]01        	test    byte [flags], ENDOFFILE  ; end of file
   859 0000068A 7506                    	jnz	short p_loop ; yes
   860                                  
   861                                  	; 18/08/2020
   862                                  	; load 32768 bytes into audio buffer
   863                                  	;; (for the second half of DMA buffer)
   864                                  	; 27/11/2023
   865                                  	; 20/05/2017
   866                                  	;mov	edi, audio_buffer
   867                                  	;mov	edx, BUFFERSIZE
   868                                  	; 26/11/2023
   869                                  	;mov	edx, [buffersize]
   870                                  	;call	loadFromFile
   871                                  	; 26/11/2023
   872 0000068C FF15[8D030000]          	call	dword [loadfromwavfile]
   873                                  	;jc	short p_return
   874                                  	;mov	byte [half_buff], 2 ; (DMA) Buffer 2
   875                                  
   876                                  	; we need to wait for 'SRB' (audio interrupt)
   877                                  	; (we can not return from 'PlayWav' here 
   878                                  	;  even if we have got an error from file reading)
   879                                  	; ((!!current audio data must be played!!))
   880                                  
   881                                  	; 18/08/2020
   882                                  	;mov	byte [srb], 1
   883                                  
   884                                  p_loop:
   885                                  	;mov	ah, 1		; any key pressed?
   886                                  	;int	32h		; no, Loop.
   887                                  	;jz	short q_loop
   888                                  	;
   889                                  	;mov	ah, 0		; flush key buffer...
   890                                  	;int	32h
   891                                  
   892                                  	; 18/08/2020 (14/10/2017, 'wavplay2.s')
   893 00000692 803D[CE220000]00        	cmp	byte [srb], 0
   894 00000699 760F                    	jna	short q_loop
   895 0000069B C605[CE220000]00        	mov	byte [srb], 0
   896                                  	; 27/11/2023
   897                                  	;mov	edi, audio_buffer
   898                                  	;mov	edx, BUFFERSIZE
   899                                  	; 26/11/2023
   900                                  	;mov	edx, [buffersize]
   901                                  	;call	loadFromFile
   902                                  	; 26/11/2023
   903 000006A2 FF15[8D030000]          	call	dword [loadfromwavfile]
   904 000006A8 7212                    	jc	short p_return
   905                                  q_loop:
   906 000006AA B401                    	mov     ah, 1		; any key pressed?
   907 000006AC CD32                    	int     32h		; no, Loop.
   908 000006AE 74E2                    	jz	short p_loop
   909                                  
   910 000006B0 B400                    	mov     ah, 0		; flush key buffer...
   911 000006B2 CD32                    	int     32h
   912                                  	
   913 000006B4 3C2B                    	cmp	al, '+' ; increase sound volume
   914 000006B6 740C                    	je	short inc_volume_level
   915 000006B8 3C2D                    	cmp	al, '-'
   916 000006BA 742B                    	je	short dec_volume_level
   917                                  
   918                                  p_return:
   919 000006BC C605[CD220000]00        	mov	byte [half_buff], 0
   920 000006C3 C3                      	retn
   921                                  
   922                                  	; 18/08/2020 (14/10/2017, 'wavplay2.s')
   923                                  inc_volume_level:
   924 000006C4 8A0D[CF220000]          	mov	cl, [volume_level]
   925 000006CA 80F91F                  	cmp	cl, 1Fh ; 31
   926 000006CD 73DB                    	jnb	short q_loop
   927 000006CF FEC1                    	inc	cl
   928                                  change_volume_level:
   929 000006D1 880D[CF220000]          	mov	[volume_level], cl
   930 000006D7 88CD                    	mov	ch, cl
   931                                  	; Set Master Volume Level
   932                                  	sys	_audio, 0B00h
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 000006D9 BB000B0000          <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79                              <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81                              <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000006DE B820000000          <1>  mov eax, %1
    86                              <1> 
    87 000006E3 CD40                <1>  int 40h
   933 000006E5 EBAB                    	jmp	short p_loop
   934                                  dec_volume_level:
   935 000006E7 8A0D[CF220000]          	mov	cl, [volume_level]
   936 000006ED 80F901                  	cmp	cl, 1 ; 1
   937 000006F0 76A0                    	jna	short p_loop
   938 000006F2 FEC9                    	dec	cl
   939 000006F4 EBDB                    	jmp	short change_volume_level
   940                                  
   941                                  write_audio_dev_info:
   942                                  	; EBX = Message address
   943                                  	; ECX = Max. message length (or stop on ZERO character)
   944                                  	;	(1 to 255)
   945                                  	; DL  = Message color (07h = light gray, 0Fh = white) 
   946                                       	sys 	_msg, msgAudioCardInfo, 255, 0Fh
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 000006F6 BB[A4200000]        <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 000006FB B9FF000000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00000700 BA0F000000          <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000705 B823000000          <1>  mov eax, %1
    86                              <1> 
    87 0000070A CD40                <1>  int 40h
   947 0000070C C3                      	retn
   948                                  
   949                                  write_wav_file_info:
   950                                  	; 01/05/2017
   951                                  	sys	_msg, msgWavFileName, 255, 0Fh
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 0000070D BB[89210000]        <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00000712 B9FF000000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00000717 BA0F000000          <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 0000071C B823000000          <1>  mov eax, %1
    86                              <1> 
    87 00000721 CD40                <1>  int 40h
   952                                  	sys	_msg, wav_file_name, 255, 0Fh
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000723 BB[ED220000]        <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00000728 B9FF000000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 0000072D BA0F000000          <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000732 B823000000          <1>  mov eax, %1
    86                              <1> 
    87 00000737 CD40                <1>  int 40h
   953                                  
   954                                  write_sample_rate:
   955                                  	; 01/05/2017
   956 00000739 66A1[C6220000]          	mov	ax, [sample_rate]
   957                                  	; ax = sample rate (hertz)
   958 0000073F 31D2                    	xor	edx, edx
   959 00000741 66B90A00                	mov	cx, 10
   960 00000745 66F7F1                  	div	cx
   961 00000748 0015[AE210000]          	add	[msgHertz+4], dl
   962 0000074E 29D2                    	sub	edx, edx
   963 00000750 66F7F1                  	div	cx
   964 00000753 0015[AD210000]          	add	[msgHertz+3], dl
   965 00000759 29D2                    	sub	edx, edx
   966 0000075B 66F7F1                  	div	cx
   967 0000075E 0015[AC210000]          	add	[msgHertz+2], dl
   968 00000764 29D2                    	sub	edx, edx
   969 00000766 66F7F1                  	div	cx
   970 00000769 0015[AB210000]          	add	[msgHertz+1], dl
   971 0000076F 0005[AA210000]          	add	[msgHertz], al
   972                                  	
   973                                  	sys	_msg, msgSampleRate, 255, 0Fh
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000775 BB[9B210000]        <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 0000077A B9FF000000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 0000077F BA0F000000          <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000784 B823000000          <1>  mov eax, %1
    86                              <1> 
    87 00000789 CD40                <1>  int 40h
   974                                  
   975 0000078B BE[C5210000]            	mov	esi, msg16Bits
   976 00000790 803D[C5220000]10        	cmp	byte [bps], 16
   977 00000797 7405                    	je	short wsr_1
   978 00000799 BE[B5210000]            	mov	esi, msg8Bits
   979                                  wsr_1:
   980                                  	sys	_msg, esi, 255, 0Fh
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 0000079E 89F3                <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 000007A0 B9FF000000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 000007A5 BA0F000000          <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000007AA B823000000          <1>  mov eax, %1
    86                              <1> 
    87 000007AF CD40                <1>  int 40h
   981                                  
   982 000007B1 BE[BE210000]            	mov	esi, msgMono
   983 000007B6 803D[C4220000]01        	cmp	byte [stmo], 1
   984 000007BD 7405                    	je	short wsr_2
   985 000007BF BE[CF210000]            	mov	esi, msgStereo		
   986                                  wsr_2:
   987                                  	sys	_msg, esi, 255, 0Fh
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 000007C4 89F3                <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 000007C6 B9FF000000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 000007CB BA0F000000          <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000007D0 B823000000          <1>  mov eax, %1
    86                              <1> 
    87 000007D5 CD40                <1>  int 40h
   988 000007D7 C3                              retn
   989                                  
   990                                  write_ac97_pci_dev_info:
   991                                  	; 06/06/2017
   992                                  	; 03/06/2017
   993                                  	; BUS/DEV/FN
   994                                  	;	00000000BBBBBBBBDDDDDFFF00000000
   995                                  	; DEV/VENDOR
   996                                  	;	DDDDDDDDDDDDDDDDVVVVVVVVVVVVVVVV
   997                                  
   998 000007D8 8B35[41230000]          	mov	esi, [dev_vendor]
   999 000007DE 89F0                    	mov	eax, esi
  1000 000007E0 0FB6D8                  	movzx	ebx, al
  1001 000007E3 88DA                    	mov	dl, bl
  1002 000007E5 80E30F                  	and	bl, 0Fh
  1003 000007E8 8A83[D8210000]          	mov	al, [ebx+hex_chars]
  1004 000007EE A2[1D220000]            	mov	[msgVendorId+3], al
  1005 000007F3 88D3                    	mov	bl, dl
  1006 000007F5 C0EB04                  	shr	bl, 4
  1007 000007F8 8A83[D8210000]          	mov	al, [ebx+hex_chars]
  1008 000007FE A2[1C220000]            	mov	[msgVendorId+2], al
  1009 00000803 88E3                    	mov	bl, ah
  1010 00000805 88DA                    	mov	dl, bl
  1011 00000807 80E30F                  	and	bl, 0Fh
  1012 0000080A 8A83[D8210000]          	mov	al, [ebx+hex_chars]
  1013 00000810 A2[1B220000]            	mov	[msgVendorId+1], al
  1014 00000815 88D3                    	mov	bl, dl
  1015 00000817 C0EB04                  	shr	bl, 4
  1016 0000081A 8A83[D8210000]          	mov	al, [ebx+hex_chars]
  1017 00000820 A2[1A220000]            	mov	[msgVendorId], al
  1018 00000825 C1E810                  	shr	eax, 16
  1019 00000828 88C3                    	mov	bl, al
  1020 0000082A 88DA                    	mov	dl, bl
  1021 0000082C 80E30F                  	and	bl, 0Fh
  1022 0000082F 8A83[D8210000]          	mov	al, [ebx+hex_chars]
  1023 00000835 A2[2E220000]            	mov	[msgDevId+3], al
  1024 0000083A 88D3                    	mov	bl, dl
  1025 0000083C C0EB04                  	shr	bl, 4
  1026 0000083F 8A83[D8210000]          	mov	al, [ebx+hex_chars]
  1027 00000845 A2[2D220000]            	mov	[msgDevId+2], al
  1028 0000084A 88E3                    	mov	bl, ah
  1029 0000084C 88DA                    	mov	dl, bl
  1030 0000084E 80E30F                  	and	bl, 0Fh
  1031 00000851 8A83[D8210000]          	mov	al, [ebx+hex_chars]
  1032 00000857 A2[2C220000]            	mov	[msgDevId+1], al
  1033 0000085C 88D3                    	mov	bl, dl
  1034 0000085E C0EB04                  	shr	bl, 4
  1035 00000861 8A83[D8210000]          	mov	al, [ebx+hex_chars]
  1036 00000867 A2[2B220000]            	mov	[msgDevId], al
  1037                                  
  1038 0000086C 8B35[45230000]          	mov	esi, [bus_dev_fn]
  1039 00000872 C1EE08                  	shr	esi, 8
  1040 00000875 6689F0                  	mov	ax, si
  1041 00000878 88C3                    	mov	bl, al
  1042 0000087A 88DA                    	mov	dl, bl
  1043 0000087C 80E307                  	and	bl, 7 ; bit 0,1,2
  1044 0000087F 8A83[D8210000]          	mov	al, [ebx+hex_chars]
  1045 00000885 A2[52220000]            	mov	[msgFncNo+1], al
  1046 0000088A 88D3                    	mov	bl, dl
  1047 0000088C C0EB03                  	shr	bl, 3
  1048 0000088F 88DA                    	mov	dl, bl
  1049 00000891 80E30F                  	and	bl, 0Fh
  1050 00000894 8A83[D8210000]          	mov	al, [ebx+hex_chars]
  1051 0000089A A2[44220000]            	mov	[msgDevNo+1], al
  1052 0000089F 88D3                    	mov	bl, dl
  1053 000008A1 C0EB04                  	shr	bl, 4
  1054 000008A4 8A83[D8210000]          	mov	al, [ebx+hex_chars]
  1055 000008AA A2[43220000]            	mov	[msgDevNo], al
  1056 000008AF 88E3                    	mov	bl, ah
  1057 000008B1 88DA                    	mov	dl, bl
  1058 000008B3 80E30F                  	and	bl, 0Fh
  1059 000008B6 8A83[D8210000]          	mov	al, [ebx+hex_chars]
  1060 000008BC A2[38220000]            	mov	[msgBusNo+1], al
  1061 000008C1 88D3                    	mov	bl, dl
  1062 000008C3 C0EB04                  	shr	bl, 4
  1063 000008C6 8A83[D8210000]          	mov	al, [ebx+hex_chars]
  1064 000008CC A2[37220000]            	mov	[msgBusNo], al
  1065                                  
  1066 000008D1 66A1[49230000]          	mov	ax, [ac97_NamBar]
  1067 000008D7 88C3                    	mov	bl, al
  1068 000008D9 88DA                    	mov	dl, bl
  1069 000008DB 80E30F                  	and	bl, 0Fh
  1070 000008DE 8A83[D8210000]          	mov	al, [ebx+hex_chars]
  1071 000008E4 A2[61220000]            	mov	[msgNamBar+3], al
  1072 000008E9 88D3                    	mov	bl, dl
  1073 000008EB C0EB04                  	shr	bl, 4
  1074 000008EE 8A83[D8210000]          	mov	al, [ebx+hex_chars]
  1075 000008F4 A2[60220000]            	mov	[msgNamBar+2], al
  1076 000008F9 88E3                    	mov	bl, ah
  1077 000008FB 88DA                    	mov	dl, bl
  1078 000008FD 80E30F                  	and	bl, 0Fh
  1079 00000900 8A83[D8210000]          	mov	al, [ebx+hex_chars]
  1080 00000906 A2[5F220000]            	mov	[msgNamBar+1], al
  1081 0000090B 88D3                    	mov	bl, dl
  1082 0000090D C0EB04                  	shr	bl, 4
  1083 00000910 8A83[D8210000]          	mov	al, [ebx+hex_chars]
  1084 00000916 A2[5E220000]            	mov	[msgNamBar], al
  1085                                  
  1086 0000091B 66A1[4B230000]          	mov	ax, [ac97_NabmBar]
  1087 00000921 88C3                    	mov	bl, al
  1088 00000923 88DA                    	mov	dl, bl
  1089 00000925 80E30F                  	and	bl, 0Fh
  1090 00000928 8A83[D8210000]          	mov	al, [ebx+hex_chars]
  1091 0000092E A2[71220000]            	mov	[msgNabmBar+3], al
  1092 00000933 88D3                    	mov	bl, dl
  1093 00000935 C0EB04                  	shr	bl, 4
  1094 00000938 8A83[D8210000]          	mov	al, [ebx+hex_chars]
  1095 0000093E A2[70220000]            	mov	[msgNabmBar+2], al
  1096 00000943 88E3                    	mov	bl, ah
  1097 00000945 88DA                    	mov	dl, bl
  1098 00000947 80E30F                  	and	bl, 0Fh
  1099 0000094A 8A83[D8210000]          	mov	al, [ebx+hex_chars]
  1100 00000950 A2[6F220000]            	mov	[msgNabmBar+1], al
  1101 00000955 88D3                    	mov	bl, dl
  1102 00000957 C0EB04                  	shr	bl, 4
  1103 0000095A 8A83[D8210000]          	mov	al, [ebx+hex_chars]
  1104 00000960 A2[6E220000]            	mov	[msgNabmBar], al
  1105                                  
  1106 00000965 30E4                    	xor	ah, ah
  1107 00000967 A0[3F230000]            	mov	al, [ac97_int_ln_reg]
  1108 0000096C B10A                    	mov	cl, 10
  1109 0000096E F6F1                    	div	cl
  1110 00000970 660105[7A220000]        	add	[msgIRQ], ax
  1111 00000977 20C0                    	and	al, al
  1112 00000979 750D                    	jnz	short _w_ac97imsg_
  1113 0000097B A0[7B220000]            	mov	al, [msgIRQ+1]
  1114 00000980 B420                    	mov	ah, ' '
  1115 00000982 66A3[7A220000]          	mov	[msgIRQ], ax
  1116                                  _w_ac97imsg_:
  1117                                  	sys	_msg, msgAC97Info, 255, 07h
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000988 BB[E9210000]        <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 0000098D B9FF000000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00000992 BA07000000          <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000997 B823000000          <1>  mov eax, %1
    86                              <1> 
    87 0000099C CD40                <1>  int 40h
  1118                                  
  1119 0000099E C3                              retn
  1120                                  
  1121                                  write_VRA_info:
  1122                                  	; 25/11/2023
  1123                                  	sys	_msg, msgVRAheader, 255, 07h
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 0000099F BB[7F220000]        <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 000009A4 B9FF000000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 000009A9 BA07000000          <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000009AE B823000000          <1>  mov eax, %1
    86                              <1> 
    87 000009B3 CD40                <1>  int 40h
  1124 000009B5 803D[D0220000]00        	cmp	byte [VRA], 0
  1125 000009BC 7617                    	jna	short _w_VRAi_no
  1126                                  _w_VRAi_yes:
  1127                                  	sys	_msg, msgVRAyes, 255, 07h
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 000009BE BB[8D220000]        <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 000009C3 B9FF000000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 000009C8 BA07000000          <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000009CD B823000000          <1>  mov eax, %1
    86                              <1> 
    87 000009D2 CD40                <1>  int 40h
  1128 000009D4 C3                      	retn
  1129                                  _w_VRAi_no:
  1130                                  	sys	_msg, msgVRAno, 255, 07h
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 000009D5 BB[93220000]        <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 000009DA B9FF000000          <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 000009DF BA07000000          <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000009E4 B823000000          <1>  mov eax, %1
    86                              <1> 
    87 000009E9 CD40                <1>  int 40h
  1131 000009EB C3                      	retn
  1132                                  
  1133                                  ; 26/11/2023
  1134                                  ; 25/11/2023 - playwav6.s (32 bit registers, TRDOS 386 adaption)
  1135                                  ; 15/11/2023 - PLAYWAV5.COM, ich_wav5.asm
  1136                                  ; 14/11/2023
  1137                                  ; 13/11/2023 - Erdogan Tan - (VRA, sample rate conversion)
  1138                                  ; --------------------------------------------------------
  1139                                  
  1140                                  ;;Note:	At the end of every buffer load,
  1141                                  ;;	during buffer switch/swap, there will be discontinuity
  1142                                  ;;	between the last converted sample and the 1st sample
  1143                                  ;;	of the next buffer.
  1144                                  ;;	(like as a dot noises vaguely between normal sound samples)
  1145                                  ;;	-To avoid this defect, the 1st sample of
  1146                                  ;;	the next buffer may be read from the wav file but
  1147                                  ;;	the file pointer would need to be set to 1 sample back
  1148                                  ;;	again via seek system call. Time comsumption problem! -
  1149                                  ;;
  1150                                  ;;	Erdogan Tan - 15/11/2023
  1151                                  ;;
  1152                                  ;;	((If entire wav data would be loaded at once.. conversion
  1153                                  ;;	defect/noise would disappear.. but for DOS, to keep
  1154                                  ;;	64KB buffer limit is important also it is important
  1155                                  ;;	for running under 1MB barrier without HIMEM.SYS or DPMI.
  1156                                  ;;	I have tested this program by using 2-30MB wav files.))
  1157                                  ;;
  1158                                  ;;	Test Computer:	ASUS desktop/mainboard, M2N4-SLI, 2010.
  1159                                  ;;			AMD Athlon 64 X2 2200 MHZ CPU.
  1160                                  ;;		       	NFORCE4 (CK804) AC97 audio hardware.
  1161                                  ;;			Realtek ALC850 codec.
  1162                                  ;;		       	Retro DOS v4.2 (MSDOS 6.22) operating system.
  1163                                  
  1164                                  load_8khz_mono_8_bit:
  1165                                  	; 15/11/2023
  1166                                  	; 14/11/2023
  1167                                  	; 13/11/2023
  1168 000009EC F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  1169                                  					; last of the file?
  1170 000009F3 7402                    	jz	short lff8m_0		; no
  1171 000009F5 F9                      	stc
  1172 000009F6 C3                      	retn
  1173                                  
  1174                                  lff8m_0:
  1175 000009F7 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  1176                                          ;mov	edx, [loadsize]
  1177                                  
  1178                                  	; esi = buffer address
  1179                                  	;; edx = buffer size
  1180                                  
  1181                                  	; load file into memory
  1182                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 000009FC 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00000A02 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00000A04 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000A0A B803000000          <1>  mov eax, %1
    86                              <1> 
    87 00000A0F CD40                <1>  int 40h
  1183 00000A11 7305                    	jnc	short lff8m_6
  1184 00000A13 E9AB000000              	jmp	lff8m_5  ; error !
  1185                                  
  1186                                  lff8m_6:
  1187 00000A18 BF[00300000]            	mov	edi, audio_buffer
  1188 00000A1D 21C0                    	and	eax, eax
  1189 00000A1F 0F8495000000            	jz	lff8_eof
  1190                                  
  1191 00000A25 89C1                    	mov	ecx, eax		; byte count
  1192                                  lff8m_1:
  1193 00000A27 AC                      	lodsb
  1194 00000A28 A2[31200000]            	mov	[previous_val], al
  1195 00000A2D 2C80                    	sub	al, 80h
  1196 00000A2F 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  1197 00000A33 66AB                    	stosw		; original sample (left channel)
  1198 00000A35 66AB                    	stosw		; original sample (right channel)
  1199                                  	;xor	eax, eax
  1200 00000A37 B080                    	mov	al, 80h
  1201 00000A39 49                      	dec	ecx
  1202 00000A3A 7402                    	jz	short lff8m_2
  1203 00000A3C 8A06                    	mov	al, [esi]
  1204                                  lff8m_2:
  1205                                  	;mov	[next_val], ax
  1206 00000A3E 88C7                    	mov	bh, al	; [next_val]
  1207 00000A40 8A25[31200000]          	mov	ah, [previous_val]
  1208 00000A46 00E0                    	add	al, ah	; [previous_val]
  1209 00000A48 D0D8                    	rcr	al, 1
  1210 00000A4A 88C2                    	mov	dl, al	; this is interpolated middle (3th) sample
  1211 00000A4C 00E0                    	add	al, ah	; [previous_val]
  1212 00000A4E D0D8                    	rcr	al, 1	
  1213 00000A50 88C3                    	mov	bl, al 	; this is temporary interpolation value	
  1214 00000A52 00E0                    	add	al, ah	; [previous_val]
  1215 00000A54 D0D8                    	rcr	al, 1
  1216 00000A56 2C80                    	sub	al, 80h
  1217 00000A58 66C1E008                	shl	ax, 8	
  1218 00000A5C 66AB                    	stosw		; this is 1st interpolated sample (L)
  1219 00000A5E 66AB                    	stosw		; this is 1st interpolated sample (R)
  1220 00000A60 88D8                    	mov	al, bl
  1221 00000A62 00D0                    	add	al, dl
  1222 00000A64 D0D8                    	rcr	al, 1
  1223 00000A66 2C80                    	sub	al, 80h
  1224 00000A68 66C1E008                	shl	ax, 8
  1225 00000A6C 66AB                    	stosw		; this is 2nd interpolated sample (L)
  1226 00000A6E 66AB                    	stosw		; this is 2nd interpolated sample (R)
  1227 00000A70 88D0                    	mov	al, dl
  1228 00000A72 2C80                    	sub	al, 80h
  1229 00000A74 66C1E008                	shl	ax, 8
  1230 00000A78 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  1231 00000A7A 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  1232                                  	;mov	al, [next_val]
  1233 00000A7C 88F8                    	mov	al, bh
  1234 00000A7E 00D0                    	add	al, dl
  1235 00000A80 D0D8                    	rcr	al, 1
  1236 00000A82 88C3                    	mov	bl, al	; this is temporary interpolation value
  1237 00000A84 00D0                    	add	al, dl
  1238 00000A86 D0D8                    	rcr	al, 1
  1239 00000A88 2C80                    	sub	al, 80h
  1240 00000A8A 66C1E008                	shl	ax, 8
  1241 00000A8E 66AB                    	stosw		; this is 4th interpolated sample (L)
  1242 00000A90 66AB                    	stosw		; this is 4th interpolated sample (R)
  1243                                  	;mov	al, [next_val]
  1244 00000A92 88F8                    	mov	al, bh
  1245 00000A94 00D8                    	add	al, bl
  1246 00000A96 D0D8                    	rcr	al, 1
  1247 00000A98 2C80                    	sub	al, 80h
  1248 00000A9A 66C1E008                	shl	ax, 8
  1249 00000A9E 66AB                    	stosw		; this is 5th interpolated sample (L)
  1250 00000AA0 66AB                    	stosw		; this is 5th interpolated sample (R)
  1251                                  	; 8 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  1252 00000AA2 09C9                    	or	ecx, ecx
  1253 00000AA4 7581                    	jnz	short lff8m_1
  1254                                  
  1255                                  	; --------------
  1256                                  
  1257                                  lff8s_3:
  1258                                  lff8m_3:
  1259                                  lff8s2_3:
  1260                                  lff8m2_3:
  1261                                  lff16s_3:
  1262                                  lff16m_3:
  1263                                  lff16s2_3:
  1264                                  lff16m2_3:
  1265                                  lff24_3:
  1266                                  lff32_3:
  1267                                  lff44_3:
  1268                                  lff22_3:
  1269                                  lff11_3:
  1270 00000AA6 8B0D[95030000]          	mov	ecx, [buffersize] ; 16 bit (48 kHZ, stereo) sample size
  1271 00000AAC D1E1                    	shl	ecx, 1	; byte count
  1272 00000AAE 29F9                    	sub	ecx, edi
  1273 00000AB0 7607                    	jna	short lff8m_4
  1274                                  	;inc	ecx
  1275 00000AB2 C1E902                  	shr	ecx, 2
  1276 00000AB5 31C0                    	xor	eax, eax ; fill (remain part of) buffer with zeros	
  1277 00000AB7 F3AB                    	rep	stosd
  1278                                  lff8m_4:
  1279 00000AB9 C3                      	retn
  1280                                  
  1281                                  lff8_eof:
  1282                                  lff16_eof:
  1283                                  lff24_eof:
  1284                                  lff32_eof:
  1285                                  lff44_eof:
  1286                                  lff22_eof:
  1287                                  lff11_eof:
  1288                                  	; 15/11/2023
  1289 00000ABA C605[CC220000]01        	mov	byte [flags], ENDOFFILE
  1290 00000AC1 EBE3                    	jmp	short lff8m_3
  1291                                  
  1292                                  lff8s_5:
  1293                                  lff8m_5:
  1294                                  lff8s2_5:
  1295                                  lff8m2_5:
  1296                                  lff16s_5:
  1297                                  lff16m_5:
  1298                                  lff16s2_5:
  1299                                  lff16m2_5:
  1300                                  lff24_5:
  1301                                  lff32_5:
  1302                                  lff44_5:
  1303                                  lff22_5:
  1304                                  lff11_5:
  1305 00000AC3 B021                    	mov	al, '!'  ; error
  1306 00000AC5 E887FAFFFF              	call	tL0
  1307                                  	
  1308                                  	;jmp	short lff8m_3
  1309                                  	; 15/11/2023
  1310 00000ACA EBEE                    	jmp	lff8_eof
  1311                                  
  1312                                  	; --------------
  1313                                  
  1314                                  load_8khz_stereo_8_bit:
  1315                                  	; 15/11/2023
  1316                                  	; 14/11/2023
  1317                                  	; 13/11/2023
  1318 00000ACC F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  1319                                  					; last of the file?
  1320 00000AD3 7402                    	jz	short lff8s_0		; no
  1321 00000AD5 F9                      	stc
  1322 00000AD6 C3                      	retn
  1323                                  
  1324                                  lff8s_0:
  1325 00000AD7 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  1326                                          ;mov	edx, [loadsize]
  1327                                  
  1328                                  	; esi = buffer address
  1329                                  	;; edx = buffer size
  1330                                  
  1331                                  	; load file into memory
  1332                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000ADC 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00000AE2 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00000AE4 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000AEA B803000000          <1>  mov eax, %1
    86                              <1> 
    87 00000AEF CD40                <1>  int 40h
  1333 00000AF1 72D0                    	jc	short lff8s_5 ; error !
  1334                                  
  1335 00000AF3 BF[00300000]            	mov	edi, audio_buffer
  1336                                  	
  1337 00000AF8 D1E8                    	shr	eax, 1
  1338 00000AFA 74BE                    	jz	short lff8_eof
  1339                                  
  1340 00000AFC 89C1                    	mov	ecx, eax	; word count
  1341                                  lff8s_1:
  1342 00000AFE AC                      	lodsb
  1343 00000AFF A2[31200000]            	mov	[previous_val_l], al
  1344 00000B04 2C80                    	sub	al, 80h
  1345 00000B06 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  1346 00000B0A 66AB                    	stosw		; original sample (L)
  1347 00000B0C AC                      	lodsb
  1348 00000B0D A2[33200000]            	mov	[previous_val_r], al
  1349 00000B12 2C80                    	sub	al, 80h
  1350 00000B14 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  1351 00000B18 66AB                    	stosw		; original sample (R)
  1352                                  
  1353                                  	;xor	eax, eax
  1354 00000B1A 66B88080                	mov	ax, 8080h
  1355 00000B1E 49                      	dec	ecx
  1356 00000B1F 7403                    	jz	short lff8s_2
  1357                                  		; convert 8 bit sample to 16 bit sample
  1358 00000B21 668B06                  	mov	ax, [esi]
  1359                                  lff8s_2:
  1360 00000B24 A2[35200000]            	mov	[next_val_l], al
  1361 00000B29 8825[37200000]          	mov	[next_val_r], ah
  1362 00000B2F 8A25[31200000]          	mov	ah, [previous_val_l]
  1363 00000B35 00E0                    	add	al, ah
  1364 00000B37 D0D8                    	rcr	al, 1
  1365 00000B39 88C2                    	mov	dl, al	; this is interpolated middle (3th) sample (L)
  1366 00000B3B 00E0                    	add	al, ah
  1367 00000B3D D0D8                    	rcr	al, 1	
  1368 00000B3F 88C3                    	mov	bl, al	; this is temporary interpolation value (L)
  1369 00000B41 00E0                    	add	al, ah
  1370 00000B43 D0D8                    	rcr	al, 1
  1371 00000B45 2C80                    	sub	al, 80h
  1372 00000B47 66C1E008                	shl	ax, 8
  1373 00000B4B 66AB                    	stosw		; this is 1st interpolated sample (L)
  1374 00000B4D A0[37200000]            	mov	al, [next_val_r]
  1375 00000B52 8A25[33200000]          	mov	ah, [previous_val_r]
  1376 00000B58 00E0                    	add	al, ah
  1377 00000B5A D0D8                    	rcr	al, 1
  1378 00000B5C 88C6                    	mov	dh, al	; this is interpolated middle (3th) sample (R)
  1379 00000B5E 00E0                    	add	al, ah
  1380 00000B60 D0D8                    	rcr	al, 1
  1381 00000B62 88C7                    	mov	bh, al	; this is temporary interpolation value (R)
  1382 00000B64 00E0                    	add	al, ah
  1383 00000B66 D0D8                    	rcr	al, 1
  1384 00000B68 2C80                    	sub	al, 80h
  1385 00000B6A 66C1E008                	shl	ax, 8
  1386 00000B6E 66AB                    	stosw		; this is 1st interpolated sample (R)
  1387 00000B70 88D8                    	mov	al, bl
  1388 00000B72 00D0                    	add	al, dl
  1389 00000B74 D0D8                    	rcr	al, 1
  1390 00000B76 2C80                    	sub	al, 80h
  1391 00000B78 66C1E008                	shl	ax, 8
  1392 00000B7C 66AB                    	stosw		; this is 2nd interpolated sample (L)
  1393 00000B7E 88F8                    	mov	al, bh
  1394 00000B80 00F0                    	add	al, dh
  1395 00000B82 D0D8                    	rcr	al, 1
  1396 00000B84 2C80                    	sub	al, 80h
  1397 00000B86 66C1E008                	shl	ax, 8
  1398 00000B8A 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  1399 00000B8C 88D0                    	mov	al, dl
  1400 00000B8E 2C80                    	sub	al, 80h
  1401 00000B90 66C1E008                	shl	ax, 8
  1402 00000B94 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  1403 00000B96 88F0                    	mov	al, dh
  1404 00000B98 2C80                    	sub	al, 80h
  1405 00000B9A 66C1E008                	shl	ax, 8
  1406 00000B9E 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  1407 00000BA0 A0[35200000]            	mov	al, [next_val_l]
  1408 00000BA5 00D0                    	add	al, dl
  1409 00000BA7 D0D8                    	rcr	al, 1
  1410 00000BA9 88C3                    	mov	bl, al	; this is temporary interpolation value (L)
  1411 00000BAB 00D0                    	add	al, dl
  1412 00000BAD D0D8                    	rcr	al, 1
  1413 00000BAF 2C80                    	sub	al, 80h
  1414 00000BB1 66C1E008                	shl	ax, 8
  1415 00000BB5 66AB                    	stosw		; this is 4th interpolated sample (L)
  1416 00000BB7 A0[37200000]            	mov	al, [next_val_r]
  1417 00000BBC 00F0                    	add	al, dh
  1418 00000BBE D0D8                    	rcr	al, 1
  1419 00000BC0 88C7                    	mov	bh, al	; this is temporary interpolation value (R)
  1420 00000BC2 00F0                    	add	al, dh
  1421 00000BC4 D0D8                    	rcr	al, 1
  1422 00000BC6 2C80                    	sub	al, 80h
  1423 00000BC8 66C1E008                	shl	ax, 8
  1424 00000BCC 66AB                    	stosw		; this is 4th interpolated sample (R)
  1425 00000BCE A0[35200000]            	mov	al, [next_val_l]
  1426 00000BD3 00D8                    	add	al, bl
  1427 00000BD5 D0D8                    	rcr	al, 1
  1428 00000BD7 2C80                    	sub	al, 80h
  1429 00000BD9 66C1E008                	shl	ax, 8
  1430 00000BDD 66AB                    	stosw		; this is 5th interpolated sample (L)
  1431 00000BDF A0[37200000]            	mov	al, [next_val_r]
  1432 00000BE4 00F8                    	add	al, bh
  1433 00000BE6 D0D8                    	rcr	al, 1
  1434 00000BE8 2C80                    	sub	al, 80h
  1435 00000BEA 66C1E008                	shl	ax, 8
  1436 00000BEE 66AB                    	stosw		; this is 5th interpolated sample (R)
  1437                                  	; 8 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  1438 00000BF0 E305                    	jecxz	lff8s_6
  1439 00000BF2 E907FFFFFF              	jmp	lff8s_1
  1440                                  lff8s_6:
  1441 00000BF7 E9AAFEFFFF              	jmp	lff8s_3
  1442                                  
  1443                                  load_8khz_mono_16_bit:
  1444                                  	; 13/11/2023
  1445 00000BFC F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  1446                                  					; last of the file?
  1447 00000C03 7402                    	jz	short lff8m2_0		; no
  1448 00000C05 F9                      	stc
  1449 00000C06 C3                      	retn
  1450                                  
  1451                                  lff8m2_0:
  1452 00000C07 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  1453                                          ;mov	edx, [loadsize]
  1454                                  
  1455                                  	; esi = buffer address
  1456                                  	;; edx = buffer size
  1457                                  
  1458                                  	; load file into memory
  1459                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000C0C 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00000C12 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00000C14 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000C1A B803000000          <1>  mov eax, %1
    86                              <1> 
    87 00000C1F CD40                <1>  int 40h
  1460 00000C21 0F82A0000000            	jc	lff8m2_7 ; error !
  1461                                  
  1462 00000C27 BF[00300000]            	mov	edi, audio_buffer
  1463                                  	
  1464 00000C2C D1E8                    	shr	eax, 1
  1465 00000C2E 7505                    	jnz	short lff8m2_8
  1466 00000C30 E985FEFFFF              	jmp	lff8_eof
  1467                                  
  1468                                  lff8m2_8:
  1469 00000C35 89C1                    	mov	ecx, eax	; word count
  1470                                  lff8m2_1:
  1471 00000C37 66AD                    	lodsw
  1472 00000C39 66AB                    	stosw		; original sample (left channel)
  1473 00000C3B 66AB                    	stosw		; original sample (right channel)
  1474 00000C3D 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  1475 00000C40 66A3[31200000]          	mov	[previous_val], ax
  1476 00000C46 31C0                    	xor	eax, eax
  1477 00000C48 49                      	dec	ecx
  1478 00000C49 7403                    	jz	short lff8m2_2
  1479 00000C4B 668B06                  	mov	ax, [esi]
  1480                                  lff8m2_2:
  1481 00000C4E 80C480                  	add	ah, 80h ; convert sound level to 0-65535 format
  1482 00000C51 89C5                    	mov	ebp, eax	; [next_val]
  1483 00000C53 660305[31200000]        	add	ax, [previous_val]
  1484 00000C5A 66D1D8                  	rcr	ax, 1
  1485 00000C5D 89C2                    	mov	edx, eax ; this is interpolated middle (3th) sample
  1486 00000C5F 660305[31200000]        	add	ax, [previous_val]
  1487 00000C66 66D1D8                  	rcr	ax, 1	; this is temporary interpolation value
  1488 00000C69 89C3                    	mov	ebx, eax 		
  1489 00000C6B 660305[31200000]        	add	ax, [previous_val]
  1490 00000C72 66D1D8                  	rcr	ax, 1
  1491 00000C75 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  1492 00000C78 66AB                    	stosw		; this is 1st interpolated sample (L)
  1493 00000C7A 66AB                    	stosw		; this is 1st interpolated sample (R)
  1494 00000C7C 89D8                    	mov	eax, ebx
  1495 00000C7E 6601D0                  	add	ax, dx
  1496 00000C81 66D1D8                  	rcr	ax, 1
  1497 00000C84 80EC80                  	sub	ah, 80h
  1498 00000C87 66AB                    	stosw		; this is 2nd interpolated sample (L)
  1499 00000C89 66AB                    	stosw		; this is 2nd interpolated sample (R)
  1500 00000C8B 89D0                    	mov	eax, edx
  1501 00000C8D 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  1502 00000C90 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  1503 00000C92 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  1504 00000C94 89E8                    	mov	eax, ebp
  1505 00000C96 6601D0                  	add	ax, dx
  1506 00000C99 66D1D8                  	rcr	ax, 1
  1507 00000C9C 89C3                    	mov	ebx, eax ; this is temporary interpolation value
  1508 00000C9E 6601D0                  	add	ax, dx
  1509 00000CA1 66D1D8                  	rcr	ax, 1
  1510 00000CA4 80EC80                  	sub	ah, 80h
  1511 00000CA7 66AB                    	stosw		; this is 4th interpolated sample (L)
  1512 00000CA9 66AB                    	stosw		; this is 4th interpolated sample (R)
  1513 00000CAB 89E8                    	mov	eax, ebp
  1514 00000CAD 6601D8                  	add	ax, bx
  1515 00000CB0 66D1D8                  	rcr	ax, 1
  1516 00000CB3 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  1517 00000CB6 66AB                    	stosw		; this is 5th interpolated sample (L)
  1518 00000CB8 66AB                    	stosw		; this is 5th interpolated sample (R)
  1519                                  	; 8 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  1520 00000CBA 09C9                    	or	ecx, ecx
  1521 00000CBC 0F8575FFFFFF            	jnz	lff8m2_1
  1522 00000CC2 E9DFFDFFFF              	jmp	lff8m2_3
  1523                                  
  1524                                  lff8m2_7:
  1525                                  lff8s2_7:
  1526 00000CC7 E9F7FDFFFF              	jmp	lff8m2_5  ; error
  1527                                  
  1528                                  load_8khz_stereo_16_bit:
  1529                                  	; 16/11/2023
  1530                                  	; 15/11/2023
  1531                                  	; 13/11/2023
  1532 00000CCC F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  1533                                  					; last of the file?
  1534 00000CD3 7402                    	jz	short lff8s2_0		; no
  1535 00000CD5 F9                      	stc
  1536 00000CD6 C3                      	retn
  1537                                  
  1538                                  lff8s2_0:
  1539 00000CD7 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  1540                                          ;mov	edx, [loadsize]
  1541                                  
  1542                                  	; esi = buffer address
  1543                                  	;; edx = buffer size
  1544                                  
  1545                                  	; load file into memory
  1546                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000CDC 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00000CE2 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00000CE4 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000CEA B803000000          <1>  mov eax, %1
    86                              <1> 
    87 00000CEF CD40                <1>  int 40h
  1547 00000CF1 72D4                    	jc	short lff8s2_7 ; error !
  1548                                  
  1549 00000CF3 BF[00300000]            	mov	edi, audio_buffer
  1550                                  	
  1551 00000CF8 C1E802                  	shr	eax, 2
  1552 00000CFB 7505                    	jnz	short lff8s2_8
  1553 00000CFD E9B8FDFFFF              	jmp	lff8_eof
  1554                                  
  1555                                  lff8s2_8:
  1556 00000D02 89C1                    	mov	ecx, eax ; dword count
  1557                                  lff8s2_1:
  1558 00000D04 66AD                    	lodsw
  1559 00000D06 66AB                    	stosw		; original sample (L)
  1560                                  	; 15/11/2023
  1561 00000D08 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  1562 00000D0B 66A3[31200000]          	mov	[previous_val_l], ax
  1563 00000D11 66AD                    	lodsw
  1564 00000D13 66AB                    	stosw		; original sample (R)
  1565 00000D15 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  1566 00000D18 66A3[33200000]          	mov	[previous_val_r], ax
  1567 00000D1E 31D2                    	xor	edx, edx
  1568 00000D20 31C0                    	xor	eax, eax
  1569                                  	; 16/11/2023
  1570 00000D22 49                      	dec	ecx
  1571 00000D23 7407                    	jz	short lff8s2_2
  1572 00000D25 668B06                  	mov	ax, [esi]
  1573 00000D28 668B5602                	mov	dx, [esi+2]
  1574                                  lff8s2_2:
  1575 00000D2C 80C480                  	add	ah, 80h	; convert sound level to 0-65535 format
  1576 00000D2F 66A3[35200000]          	mov	[next_val_l], ax
  1577 00000D35 80C680                  	add	dh, 80h	; convert sound level to 0-65535 format
  1578 00000D38 668915[37200000]        	mov	[next_val_r], dx
  1579 00000D3F 660305[31200000]        	add	ax, [previous_val_l]
  1580 00000D46 66D1D8                  	rcr	ax, 1
  1581 00000D49 89C2                    	mov	edx, eax ; this is interpolated middle (3th) sample (L)
  1582 00000D4B 660305[31200000]        	add	ax, [previous_val_l]
  1583 00000D52 66D1D8                  	rcr	ax, 1	
  1584 00000D55 89C3                    	mov	ebx, eax ; this is temporary interpolation value (L)
  1585 00000D57 660305[31200000]        	add	ax, [previous_val_l]
  1586 00000D5E 66D1D8                  	rcr	ax, 1
  1587 00000D61 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  1588 00000D64 66AB                    	stosw		; this is 1st interpolated sample (L)
  1589 00000D66 66A1[37200000]          	mov	ax, [next_val_r]
  1590 00000D6C 660305[33200000]        	add	ax, [previous_val_r]
  1591 00000D73 66D1D8                  	rcr	ax, 1
  1592 00000D76 89C5                    	mov	ebp, eax ; this is interpolated middle (3th) sample (R)
  1593 00000D78 660305[33200000]        	add	ax, [previous_val_r]
  1594 00000D7F 66D1D8                  	rcr	ax, 1
  1595 00000D82 50                      	push	eax ; *	; this is temporary interpolation value (R)
  1596 00000D83 660305[33200000]        	add	ax, [previous_val_r]
  1597 00000D8A 66D1D8                  	rcr	ax, 1
  1598 00000D8D 80EC80                  	sub	ah, 80h
  1599 00000D90 66AB                    	stosw		; this is 1st interpolated sample (R)
  1600 00000D92 89D8                    	mov	eax, ebx
  1601 00000D94 6601D0                  	add	ax, dx
  1602 00000D97 66D1D8                  	rcr	ax, 1
  1603 00000D9A 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  1604 00000D9D 66AB                    	stosw		; this is 2nd interpolated sample (L)
  1605 00000D9F 58                      	pop	eax ; *
  1606 00000DA0 6601E8                  	add	ax, bp
  1607 00000DA3 66D1D8                  	rcr	ax, 1
  1608 00000DA6 80EC80                  	sub	ah, 80h
  1609 00000DA9 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  1610 00000DAB 89D0                    	mov	eax, edx
  1611 00000DAD 80EC80                  	sub	ah, 80h
  1612 00000DB0 66AB                    	stosw		; this is middle (3th) interpolated sample (L)
  1613 00000DB2 89E8                    	mov	eax, ebp
  1614 00000DB4 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  1615 00000DB7 66AB                    	stosw		; this is middle (3th) interpolated sample (R)
  1616 00000DB9 66A1[35200000]          	mov	ax, [next_val_l]
  1617 00000DBF 6601D0                  	add	ax, dx
  1618 00000DC2 66D1D8                  	rcr	ax, 1
  1619 00000DC5 89C3                    	mov	ebx, eax ; this is temporary interpolation value (L)
  1620 00000DC7 6601D0                  	add	ax, dx
  1621 00000DCA 66D1D8                  	rcr	ax, 1
  1622 00000DCD 80EC80                  	sub	ah, 80h
  1623 00000DD0 66AB                    	stosw		; this is 4th interpolated sample (L)
  1624 00000DD2 66A1[37200000]          	mov	ax, [next_val_r]
  1625 00000DD8 6601E8                  	add	ax, bp
  1626 00000DDB 66D1D8                  	rcr	ax, 1
  1627 00000DDE 50                      	push	eax ; ** ; this is temporary interpolation value (R)
  1628 00000DDF 6601E8                  	add	ax, bp
  1629 00000DE2 66D1D8                  	rcr	ax, 1
  1630 00000DE5 80EC80                  	sub	ah, 80h
  1631 00000DE8 66AB                    	stosw		; this is 4th interpolated sample (R)
  1632 00000DEA 66A1[35200000]          	mov	ax, [next_val_l]
  1633 00000DF0 6601D8                  	add	ax, bx
  1634 00000DF3 66D1D8                  	rcr	ax, 1
  1635 00000DF6 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  1636 00000DF9 66AB                    	stosw		; this is 5th interpolated sample (L)
  1637 00000DFB 58                      	pop	eax ; **
  1638 00000DFC 660305[37200000]        	add	ax, [next_val_r]
  1639 00000E03 66D1D8                  	rcr	ax, 1
  1640 00000E06 80EC80                  	sub	ah, 80h
  1641 00000E09 66AB                    	stosw		; this is 5th interpolated sample (R)
  1642                                  	; 8 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  1643 00000E0B E305                    	jecxz	lff8_s2_9
  1644 00000E0D E9F2FEFFFF              	jmp	lff8s2_1
  1645                                  lff8_s2_9:
  1646 00000E12 E98FFCFFFF              	jmp	lff8s2_3
  1647                                  
  1648                                  ; .....................
  1649                                  
  1650                                  load_16khz_mono_8_bit:
  1651                                  	; 14/11/2023
  1652                                  	; 13/11/2023
  1653 00000E17 F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  1654                                  					; last of the file?
  1655 00000E1E 7402                    	jz	short lff16m_0		; no
  1656 00000E20 F9                      	stc
  1657 00000E21 C3                      	retn
  1658                                  
  1659                                  lff16m_0:
  1660 00000E22 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  1661                                          ;mov	edx, [loadsize]
  1662                                  
  1663                                  	; esi = buffer address
  1664                                  	;; edx = buffer size
  1665                                  
  1666                                  	; load file into memory
  1667                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000E27 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00000E2D 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00000E2F 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000E35 B803000000          <1>  mov eax, %1
    86                              <1> 
    87 00000E3A CD40                <1>  int 40h
  1668 00000E3C 7253                    	jc	short lff16m_7 ; error !
  1669                                  
  1670 00000E3E BF[00300000]            	mov	edi, audio_buffer
  1671                                  	
  1672 00000E43 21C0                    	and	eax, eax
  1673 00000E45 7505                    	jnz	short lff16m_8
  1674 00000E47 E96EFCFFFF              	jmp	lff16_eof
  1675                                  
  1676                                  lff16m_8:
  1677 00000E4C 89C1                    	mov	ecx, eax		; byte count
  1678                                  lff16m_1:
  1679 00000E4E AC                      	lodsb
  1680                                  	;mov	[previous_val], al
  1681 00000E4F 88C3                    	mov	bl, al
  1682 00000E51 2C80                    	sub	al, 80h
  1683 00000E53 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  1684 00000E57 66AB                    	stosw		; original sample (left channel)
  1685 00000E59 66AB                    	stosw		; original sample (right channel)
  1686                                  	;xor	ax, ax
  1687                                  	; 14/11/22023
  1688 00000E5B B080                    	mov	al, 80h
  1689 00000E5D 49                      	dec	ecx
  1690 00000E5E 7402                    	jz	short lff16m_2
  1691 00000E60 8A06                    	mov	al, [esi]
  1692                                  lff16m_2:
  1693                                  	;mov	[next_val], al
  1694 00000E62 88C7                    	mov	bh, al
  1695                                  	;add	al, [previous_val]
  1696 00000E64 00D8                    	add	al, bl
  1697 00000E66 D0D8                    	rcr	al, 1
  1698 00000E68 88C2                    	mov	dl, al	; this is interpolated middle (temp) sample
  1699                                  	;add	al, [previous_val]
  1700 00000E6A 00D8                    	add	al, bl
  1701 00000E6C D0D8                    	rcr	al, 1
  1702 00000E6E 2C80                    	sub	al, 80h
  1703 00000E70 66C1E008                	shl	ax, 8
  1704 00000E74 66AB                    	stosw		; this is 1st interpolated sample (L)
  1705 00000E76 66AB                    	stosw		; this is 1st interpolated sample (R)
  1706                                  	;mov	al, [next_val]
  1707 00000E78 88F8                    	mov	al, bh
  1708 00000E7A 00D0                    	add	al, dl
  1709 00000E7C D0D8                    	rcr	al, 1
  1710 00000E7E 2C80                    	sub	al, 80h
  1711 00000E80 66C1E008                	shl	ax, 8
  1712 00000E84 66AB                    	stosw		; this is 2nd interpolated sample (L)
  1713 00000E86 66AB                    	stosw		; this is 2nd interpolated sample (R)
  1714                                  	
  1715                                  	; 16 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  1716 00000E88 09C9                    	or	ecx, ecx
  1717 00000E8A 75C2                    	jnz	short lff16m_1
  1718 00000E8C E915FCFFFF              	jmp	lff16m_3
  1719                                  
  1720                                  lff16m_7:
  1721                                  lff16s_7:
  1722 00000E91 E92DFCFFFF              	jmp	lff16m_5  ; error
  1723                                  
  1724                                  load_16khz_stereo_8_bit:
  1725                                  	; 14/11/2023
  1726                                  	; 13/11/2023
  1727 00000E96 F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  1728                                  					; last of the file?
  1729 00000E9D 7402                    	jz	short lff16s_0		; no
  1730 00000E9F F9                      	stc
  1731 00000EA0 C3                      	retn
  1732                                  
  1733                                  lff16s_0:
  1734 00000EA1 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  1735                                          ;mov	edx, [loadsize]
  1736                                  
  1737                                  	; esi = buffer address
  1738                                  	;; edx = buffer size
  1739                                  
  1740                                  	; load file into memory
  1741                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000EA6 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00000EAC 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00000EAE 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000EB4 B803000000          <1>  mov eax, %1
    86                              <1> 
    87 00000EB9 CD40                <1>  int 40h
  1742 00000EBB 72D4                    	jc	short lff16s_7 ; error !
  1743                                  
  1744 00000EBD BF[00300000]            	mov	edi, audio_buffer
  1745                                  	
  1746 00000EC2 D1E8                    	shr	eax, 1
  1747 00000EC4 7505                    	jnz	short lff16s_8
  1748 00000EC6 E9EFFBFFFF              	jmp	lff16_eof
  1749                                  
  1750                                  lff16s_8:
  1751 00000ECB 89C1                    	mov	ecx, eax	; word count
  1752                                  lff16s_1:
  1753 00000ECD AC                      	lodsb
  1754 00000ECE A2[31200000]            	mov	[previous_val_l], al
  1755 00000ED3 2C80                    	sub	al, 80h
  1756 00000ED5 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  1757 00000ED9 66AB                    	stosw		; original sample (L)
  1758 00000EDB AC                      	lodsb
  1759 00000EDC A2[33200000]            	mov	[previous_val_r], al
  1760 00000EE1 2C80                    	sub	al, 80h
  1761 00000EE3 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  1762 00000EE7 66AB                    	stosw		; original sample (R)
  1763                                  
  1764                                  	;xor	eax, eax
  1765 00000EE9 66B88080                	mov	ax, 8080h
  1766 00000EED 49                      	dec	ecx
  1767 00000EEE 7403                    	jz	short lff16s_2
  1768                                  		; convert 8 bit sample to 16 bit sample
  1769 00000EF0 668B06                  	mov	ax, [esi]
  1770                                  lff16s_2:
  1771                                  	;mov	[next_val_l], al
  1772                                  	;mov	[next_val_r], ah
  1773 00000EF3 89C3                    	mov	ebx, eax
  1774 00000EF5 0205[31200000]          	add	al, [previous_val_l]
  1775 00000EFB D0D8                    	rcr	al, 1
  1776 00000EFD 88C2                    	mov	dl, al	; this is temporary interpolation value (L)
  1777 00000EFF 0205[31200000]          	add	al, [previous_val_l]
  1778 00000F05 D0D8                    	rcr	al, 1
  1779 00000F07 2C80                    	sub	al, 80h
  1780 00000F09 66C1E008                	shl	ax, 8
  1781 00000F0D 66AB                    	stosw		; this is 1st interpolated sample (L)
  1782 00000F0F 88F8                    	mov	al, bh	; [next_val_r]
  1783 00000F11 0205[33200000]          	add	al, [previous_val_r]
  1784 00000F17 D0D8                    	rcr	al, 1
  1785 00000F19 88C6                    	mov	dh, al	; this is temporary interpolation value (R)
  1786 00000F1B 0205[33200000]          	add	al, [previous_val_r]
  1787 00000F21 D0D8                    	rcr	al, 1
  1788 00000F23 2C80                    	sub	al, 80h
  1789 00000F25 66C1E008                	shl	ax, 8
  1790 00000F29 66AB                    	stosw		; this is 1st interpolated sample (R)
  1791 00000F2B 88D0                    	mov	al, dl
  1792 00000F2D 00D8                    	add	al, bl	; [next_val_l]
  1793 00000F2F D0D8                    	rcr	al, 1
  1794 00000F31 2C80                    	sub	al, 80h
  1795 00000F33 66C1E008                	shl	ax, 8
  1796 00000F37 66AB                    	stosw		; this is 2nd interpolated sample (L)
  1797 00000F39 88F0                    	mov	al, dh
  1798 00000F3B 00F8                    	add	al, bh	; [next_val_r]
  1799 00000F3D D0D8                    	rcr	al, 1
  1800 00000F3F 2C80                    	sub	al, 80h
  1801 00000F41 66C1E008                	shl	ax, 8
  1802 00000F45 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  1803                                  	
  1804                                  	; 16 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  1805 00000F47 09C9                    	or	ecx, ecx
  1806 00000F49 7582                    	jnz	short lff16s_1
  1807 00000F4B E956FBFFFF              	jmp	lff16s_3
  1808                                  
  1809                                  load_16khz_mono_16_bit:
  1810                                  	; 15/11/2023
  1811                                  	; 13/11/2023
  1812 00000F50 F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  1813                                  					; last of the file?
  1814 00000F57 7402                    	jz	short lff16m2_0		; no
  1815 00000F59 F9                      	stc
  1816 00000F5A C3                      	retn
  1817                                  
  1818                                  lff16m2_0:
  1819 00000F5B BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  1820                                          ;mov	edx, [loadsize]
  1821                                  
  1822                                  	; esi = buffer address
  1823                                  	;; edx = buffer size
  1824                                  
  1825                                  	; load file into memory
  1826                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000F60 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00000F66 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00000F68 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000F6E B803000000          <1>  mov eax, %1
    86                              <1> 
    87 00000F73 CD40                <1>  int 40h
  1827 00000F75 7255                    	jc	short lff16m2_7 ; error !
  1828                                  
  1829 00000F77 BF[00300000]            	mov	edi, audio_buffer
  1830                                  	
  1831 00000F7C D1E8                    	shr	eax, 1
  1832 00000F7E 7505                    	jnz	short lff16m2_8
  1833 00000F80 E935FBFFFF              	jmp	lff16_eof
  1834                                  
  1835                                  lff16m2_8:
  1836 00000F85 89C1                    	mov	ecx, eax  ; word count
  1837                                  lff16m2_1:
  1838 00000F87 66AD                    	lodsw
  1839 00000F89 66AB                    	stosw		; original sample (left channel)
  1840 00000F8B 66AB                    	stosw		; original sample (right channel)
  1841 00000F8D 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  1842                                  	;mov	[previous_val], ax
  1843 00000F90 89C3                    	mov	ebx, eax	
  1844 00000F92 31C0                    	xor	eax, eax
  1845 00000F94 49                      	dec	ecx
  1846 00000F95 7403                    	jz	short lff16m2_2
  1847 00000F97 668B06                  	mov	ax, [esi]
  1848                                  lff16m2_2:
  1849 00000F9A 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  1850 00000F9D 89C5                    	mov	ebp, eax	; [next_val]
  1851                                  	;add	ax, [previous_val]
  1852 00000F9F 6601D8                  	add	ax, bx
  1853 00000FA2 66D1D8                  	rcr	ax, 1
  1854 00000FA5 89C2                    	mov	edx, eax ; this is temporary interpolation value
  1855                                  	;add	ax, [previous_val]
  1856 00000FA7 6601D8                  	add	ax, bx
  1857 00000FAA 66D1D8                  	rcr	ax, 1
  1858 00000FAD 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  1859 00000FB0 66AB                    	stosw		; this is 1st interpolated sample (L)
  1860 00000FB2 66AB                    	stosw		; this is 1st interpolated sample (R)
  1861 00000FB4 89E8                    	mov	eax, ebp 
  1862 00000FB6 6601D0                  	add	ax, dx
  1863 00000FB9 66D1D8                  	rcr	ax, 1
  1864 00000FBC 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  1865 00000FBF 66AB                    	stosw		; this is 2nd interpolated sample (L)
  1866 00000FC1 66AB                    	stosw		; this is 2nd interpolated sample (R)
  1867                                  	; 16 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  1868 00000FC3 09C9                    	or	ecx, ecx
  1869 00000FC5 75C0                    	jnz	short lff16m2_1
  1870 00000FC7 E9DAFAFFFF              	jmp	lff16m2_3
  1871                                  
  1872                                  lff16m2_7:
  1873                                  lff16s2_7:
  1874 00000FCC E9F2FAFFFF              	jmp	lff16m2_5  ; error
  1875                                  
  1876                                  load_16khz_stereo_16_bit:
  1877                                  	; 16/11/2023
  1878                                  	; 15/11/2023
  1879                                  	; 13/11/2023
  1880 00000FD1 F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  1881                                  					; last of the file?
  1882 00000FD8 7402                    	jz	short lff16s2_0		; no
  1883 00000FDA F9                      	stc
  1884 00000FDB C3                      	retn
  1885                                  
  1886                                  lff16s2_0:
  1887 00000FDC BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  1888                                          ;mov	edx, [loadsize]
  1889                                  
  1890                                  	; esi = buffer address
  1891                                  	;; edx = buffer size
  1892                                  
  1893                                  	; load file into memory
  1894                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00000FE1 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00000FE7 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00000FE9 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00000FEF B803000000          <1>  mov eax, %1
    86                              <1> 
    87 00000FF4 CD40                <1>  int 40h
  1895 00000FF6 72D4                    	jc	short lff16s2_7 ; error !
  1896                                  
  1897 00000FF8 BF[00300000]            	mov	edi, audio_buffer
  1898                                  	
  1899 00000FFD C1E802                  	shr	eax, 2
  1900 00001000 7505                    	jnz	short lff16s2_8
  1901 00001002 E9B3FAFFFF              	jmp	lff16_eof
  1902                                  
  1903                                  lff16s2_8:
  1904 00001007 89C1                    	mov	ecx, eax  ; dword count
  1905                                  lff16s2_1:
  1906 00001009 66AD                    	lodsw
  1907 0000100B 66AB                    	stosw		; original sample (L)
  1908 0000100D 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format 
  1909 00001010 66A3[31200000]          	mov	[previous_val_l], ax
  1910 00001016 66AD                    	lodsw
  1911 00001018 66AB                    	stosw		; original sample (R)
  1912 0000101A 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format 
  1913 0000101D 66A3[33200000]          	mov	[previous_val_r], ax
  1914 00001023 31D2                    	xor	edx, edx
  1915 00001025 31C0                    	xor	eax, eax
  1916                                  	; 16/11/2023
  1917 00001027 49                      	dec	ecx
  1918 00001028 7407                    	jz	short lff16s2_2
  1919 0000102A 668B06                  	mov	ax, [esi]
  1920 0000102D 668B5602                	mov	dx, [esi+2]
  1921                                  lff16s2_2:
  1922 00001031 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format 
  1923                                  	;mov	[next_val_l], ax
  1924 00001034 89C5                    	mov	ebp, eax
  1925 00001036 80C680                  	add	dh, 80h	; convert sound level 0 to 65535 format 
  1926 00001039 668915[37200000]        	mov	[next_val_r], dx
  1927 00001040 660305[31200000]        	add	ax, [previous_val_l]
  1928 00001047 66D1D8                  	rcr	ax, 1
  1929 0000104A 89C2                    	mov	edx, eax ; this is temporary interpolation value (L)
  1930 0000104C 660305[31200000]        	add	ax, [previous_val_l]
  1931 00001053 66D1D8                  	rcr	ax, 1
  1932 00001056 80EC80                  	sub	ah, 80h ; -32768 to +32767 format again
  1933 00001059 66AB                    	stosw		; this is 1st interpolated sample (L)
  1934 0000105B 66A1[37200000]          	mov	ax, [next_val_r]
  1935 00001061 660305[33200000]        	add	ax, [previous_val_r]
  1936 00001068 66D1D8                  	rcr	ax, 1
  1937 0000106B 89C3                    	mov	ebx, eax ; this is temporary interpolation value (R)
  1938 0000106D 660305[33200000]        	add	ax, [previous_val_r]
  1939 00001074 66D1D8                  	rcr	ax, 1
  1940 00001077 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  1941 0000107A 66AB                    	stosw		; this is 1st interpolated sample (R)
  1942                                  	;mov	ax, [next_val_l]
  1943 0000107C 89E8                    	mov	eax, ebp
  1944 0000107E 6601D0                  	add	ax, dx
  1945 00001081 66D1D8                  	rcr	ax, 1
  1946 00001084 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  1947 00001087 66AB                    	stosw		; this is 2nd interpolated sample (L)
  1948 00001089 66A1[37200000]          	mov	ax, [next_val_r]
  1949 0000108F 6601D8                  	add	ax, bx
  1950 00001092 66D1D8                  	rcr	ax, 1
  1951 00001095 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  1952 00001098 66AB                    	stosw 		; this is 2nd interpolated sample (R)
  1953                                  	
  1954                                  	; 16 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  1955 0000109A 09C9                    	or	ecx, ecx
  1956 0000109C 0F8567FFFFFF            	jnz	lff16s2_1
  1957 000010A2 E9FFF9FFFF              	jmp	lff16s2_3
  1958                                  
  1959                                  ; .....................
  1960                                  
  1961                                  load_24khz_mono_8_bit:
  1962                                  	; 15/11/2023
  1963 000010A7 F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  1964                                  					; last of the file?
  1965 000010AE 7402                    	jz	short lff24m_0		; no
  1966 000010B0 F9                      	stc
  1967 000010B1 C3                      	retn
  1968                                  
  1969                                  lff24m_0:
  1970 000010B2 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  1971                                          ;mov	edx, [loadsize]
  1972                                  
  1973                                  	; esi = buffer address
  1974                                  	;; edx = buffer size
  1975                                  
  1976                                  	; load file into memory
  1977                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 000010B7 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 000010BD 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 000010BF 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000010C5 B803000000          <1>  mov eax, %1
    86                              <1> 
    87 000010CA CD40                <1>  int 40h
  1978 000010CC 723B                    	jc	short lff24m_7 ; error !
  1979                                  
  1980 000010CE BF[00300000]            	mov	edi, audio_buffer
  1981                                  	
  1982 000010D3 21C0                    	and	eax, eax
  1983 000010D5 7505                    	jnz	short lff24m_8
  1984 000010D7 E9DEF9FFFF              	jmp	lff24_eof
  1985                                  
  1986                                  lff24m_8:
  1987 000010DC 89C1                    	mov	ecx, eax	; byte count
  1988                                  lff24m_1:
  1989 000010DE AC                      	lodsb
  1990                                  	;mov	[previous_val], al
  1991 000010DF 88C3                    	mov	bl, al
  1992 000010E1 2C80                    	sub	al, 80h
  1993 000010E3 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  1994 000010E7 66AB                    	stosw		; original sample (left channel)
  1995 000010E9 66AB                    	stosw		; original sample (right channel)
  1996                                  	;xor	eax, eax
  1997 000010EB B080                    	mov	al, 80h
  1998 000010ED 49                      	dec	ecx
  1999 000010EE 7402                    	jz	short lff24m_2
  2000 000010F0 8A06                    	mov	al, [esi]
  2001                                  lff24m_2:
  2002                                  	;;mov	[next_val], al
  2003                                  	;mov	bh, al
  2004                                  	;add	al, [previous_val]
  2005 000010F2 00D8                    	add	al, bl
  2006 000010F4 D0D8                    	rcr	al, 1
  2007 000010F6 2C80                    	sub	al, 80h
  2008 000010F8 66C1E008                	shl	ax, 8
  2009 000010FC 66AB                    	stosw		; this is interpolated sample (L)
  2010 000010FE 66AB                    	stosw		; this is interpolated sample (R)
  2011                                  	
  2012                                  	; 24 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  2013 00001100 09C9                    	or	ecx, ecx
  2014 00001102 75DA                    	jnz	short lff24m_1
  2015 00001104 E99DF9FFFF              	jmp	lff24_3
  2016                                  
  2017                                  lff24m_7:
  2018                                  lff24s_7:
  2019 00001109 E9B5F9FFFF              	jmp	lff24_5  ; error
  2020                                  
  2021                                  load_24khz_stereo_8_bit:
  2022                                  	; 15/11/2023
  2023 0000110E F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2024                                  					; last of the file?
  2025 00001115 7402                    	jz	short lff24s_0		; no
  2026 00001117 F9                      	stc
  2027 00001118 C3                      	retn
  2028                                  
  2029                                  lff24s_0:
  2030 00001119 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2031                                          ;mov	edx, [loadsize]
  2032                                  
  2033                                  	; esi = buffer address
  2034                                  	;; edx = buffer size
  2035                                  
  2036                                  	; load file into memory
  2037                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 0000111E 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00001124 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00001126 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 0000112C B803000000          <1>  mov eax, %1
    86                              <1> 
    87 00001131 CD40                <1>  int 40h
  2038 00001133 72D4                    	jc	short lff24s_7 ; error !
  2039                                  
  2040 00001135 BF[00300000]            	mov	edi, audio_buffer
  2041                                  	
  2042 0000113A D1E8                    	shr	eax, 1
  2043 0000113C 7505                    	jnz	short lff24s_8
  2044 0000113E E977F9FFFF              	jmp	lff24_eof
  2045                                  
  2046                                  lff24s_8:
  2047 00001143 89C1                    	mov	ecx, eax  ; word count
  2048                                  lff24s_1:
  2049 00001145 AC                      	lodsb
  2050 00001146 A2[31200000]            	mov	[previous_val_l], al
  2051 0000114B 2C80                    	sub	al, 80h
  2052 0000114D 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  2053 00001151 66AB                    	stosw		; original sample (L)
  2054 00001153 AC                      	lodsb
  2055 00001154 A2[33200000]            	mov	[previous_val_r], al
  2056 00001159 2C80                    	sub	al, 80h
  2057 0000115B 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  2058 0000115F 66AB                    	stosw		; original sample (R)
  2059                                  
  2060                                  	;xor	eax, eax
  2061 00001161 66B88080                	mov	ax, 8080h
  2062 00001165 49                      	dec	ecx
  2063 00001166 7403                    	jz	short lff24s_2
  2064                                  		; convert 8 bit sample to 16 bit sample
  2065 00001168 668B06                  	mov	ax, [esi]
  2066                                  lff24s_2:
  2067                                  	;;mov	[next_val_l], al
  2068                                  	;;mov	[next_val_r], ah
  2069                                  	;mov	bx, ax
  2070 0000116B 88E7                    	mov	bh, ah
  2071 0000116D 0205[31200000]          	add	al, [previous_val_l]
  2072 00001173 D0D8                    	rcr	al, 1
  2073                                  	;mov	dl, al
  2074 00001175 2C80                    	sub	al, 80h
  2075 00001177 66C1E008                	shl	ax, 8
  2076 0000117B 66AB                    	stosw		; this is interpolated sample (L)
  2077 0000117D 88F8                    	mov	al, bh	; [next_val_r]
  2078 0000117F 0205[33200000]          	add	al, [previous_val_r]
  2079 00001185 D0D8                    	rcr	al, 1
  2080                                  	;mov	dh, al
  2081 00001187 2C80                    	sub	al, 80h
  2082 00001189 66C1E008                	shl	ax, 8
  2083 0000118D 66AB                    	stosw		; this is interpolated sample (R)
  2084                                  		
  2085                                  	; 24 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  2086 0000118F 09C9                    	or	ecx, ecx
  2087 00001191 75B2                    	jnz	short lff24s_1
  2088 00001193 E90EF9FFFF              	jmp	lff24_3
  2089                                  
  2090                                  load_24khz_mono_16_bit:
  2091                                  	; 15/11/2023
  2092 00001198 F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2093                                  					; last of the file?
  2094 0000119F 7402                    	jz	short lff24m2_0		; no
  2095 000011A1 F9                      	stc
  2096 000011A2 C3                      	retn
  2097                                  
  2098                                  lff24m2_0:
  2099 000011A3 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2100                                          ;mov	edx, [loadsize]
  2101                                  
  2102                                  	; esi = buffer address
  2103                                  	;; edx = buffer size
  2104                                  
  2105                                  	; load file into memory
  2106                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 000011A8 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 000011AE 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 000011B0 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000011B6 B803000000          <1>  mov eax, %1
    86                              <1> 
    87 000011BB CD40                <1>  int 40h
  2107 000011BD 7237                    	jc	short lff24m2_7 ; error !
  2108                                  
  2109 000011BF BF[00300000]            	mov	edi, audio_buffer
  2110                                  	
  2111 000011C4 D1E8                    	shr	eax, 1
  2112 000011C6 7505                    	jnz	short lff24m2_8
  2113 000011C8 E9EDF8FFFF              	jmp	lff24_eof
  2114                                  
  2115                                  lff24m2_8:
  2116 000011CD 89C1                    	mov	ecx, eax  ; word count
  2117                                  lff24m2_1:
  2118 000011CF 66AD                    	lodsw
  2119 000011D1 66AB                    	stosw		; original sample (left channel)
  2120 000011D3 66AB                    	stosw		; original sample (right channel)
  2121 000011D5 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  2122                                  	;mov	[previous_val], ax
  2123                                  	;mov	ebx, eax	
  2124                                  	;xor	eax, eax
  2125 000011D8 31DB                    	xor	ebx, ebx
  2126 000011DA 49                      	dec	ecx
  2127 000011DB 7403                    	jz	short lff24m2_2
  2128                                  	;mov	ax, [esi]
  2129 000011DD 668B1E                  	mov	bx, [esi]
  2130                                  lff24m2_2:
  2131                                  	;add	ah, 80h ; convert sound level 0 to 65535 format
  2132                                  	;mov	ebp, eax	; [next_val]
  2133                                  	;add	ax, [previous_val]
  2134                                  	; ax = [previous_val]
  2135                                  	; bx = [next_val]
  2136 000011E0 6601D8                  	add	ax, bx
  2137 000011E3 66D1D8                  	rcr	ax, 1
  2138 000011E6 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2139 000011E9 66AB                    	stosw		; this is interpolated sample (L)
  2140 000011EB 66AB                    	stosw		; this is interpolated sample (R)
  2141                                  	; 24 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  2142 000011ED 09C9                    	or	ecx, ecx
  2143 000011EF 75DE                    	jnz	short lff24m2_1
  2144 000011F1 E9B0F8FFFF              	jmp	lff24_3
  2145                                  
  2146                                  lff24m2_7:
  2147                                  lff24s2_7:
  2148 000011F6 E9C8F8FFFF              	jmp	lff24_5  ; error
  2149                                  
  2150                                  load_24khz_stereo_16_bit:
  2151                                  	; 16/11/2023
  2152                                  	; 15/11/2023
  2153 000011FB F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2154                                  					; last of the file?
  2155 00001202 7402                    	jz	short lff24s2_0		; no
  2156 00001204 F9                      	stc
  2157 00001205 C3                      	retn
  2158                                  
  2159                                  lff24s2_0:
  2160 00001206 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2161                                          ;mov	edx, [loadsize]
  2162                                  
  2163                                  	; esi = buffer address
  2164                                  	;; edx = buffer size
  2165                                  
  2166                                  	; load file into memory
  2167                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 0000120B 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00001211 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00001213 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00001219 B803000000          <1>  mov eax, %1
    86                              <1> 
    87 0000121E CD40                <1>  int 40h
  2168 00001220 72D4                    	jc	short lff24s2_7 ; error !
  2169                                  
  2170 00001222 BF[00300000]            	mov	edi, audio_buffer
  2171                                  	
  2172 00001227 C1E802                  	shr	eax, 2
  2173 0000122A 7505                    	jnz	short lff24s2_8
  2174 0000122C E989F8FFFF              	jmp	lff24_eof
  2175                                  
  2176                                  lff24s2_8:
  2177 00001231 89C1                    	mov	ecx, eax  ; dword count
  2178                                  lff24s2_1:
  2179 00001233 66AD                    	lodsw
  2180 00001235 66AB                    	stosw		; original sample (L)
  2181 00001237 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format 
  2182 0000123A 66A3[31200000]          	mov	[previous_val_l], ax
  2183 00001240 66AD                    	lodsw
  2184 00001242 66AB                    	stosw		; original sample (R)
  2185 00001244 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format 
  2186                                  	;mov	[previous_val_r], ax
  2187 00001247 89C3                    	mov	ebx, eax
  2188 00001249 31D2                    	xor	edx, edx
  2189 0000124B 31C0                    	xor	eax, eax
  2190                                  	; 16/11/2023
  2191 0000124D 49                      	dec	ecx
  2192 0000124E 7407                    	jz	short lff24s2_2
  2193 00001250 668B06                  	mov	ax, [esi]
  2194 00001253 668B5602                	mov	dx, [esi+2]
  2195                                  lff24s2_2:
  2196 00001257 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format 
  2197                                  	;;mov	[next_val_l], ax
  2198                                  	;mov	ebp, eax
  2199 0000125A 80C680                  	add	dh, 80h	; convert sound level 0 to 65535 format 
  2200                                  	;mov	[next_val_r], dx
  2201 0000125D 660305[31200000]        	add	ax, [previous_val_l]
  2202 00001264 66D1D8                  	rcr	ax, 1
  2203 00001267 80EC80                  	sub	ah, 80h ; -32768 to +32767 format again
  2204 0000126A 66AB                    	stosw		; this is interpolated sample (L)
  2205                                  	;mov	ax, [next_val_r]
  2206 0000126C 89D0                    	mov	eax, edx
  2207                                  	;add	ax, [previous_val_r]
  2208 0000126E 6601D8                  	add	ax, bx
  2209 00001271 66D1D8                  	rcr	ax, 1
  2210 00001274 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2211 00001277 66AB                    	stosw		; this is interpolated sample (R)
  2212                                  	
  2213                                  	; 24 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  2214 00001279 09C9                    	or	ecx, ecx
  2215 0000127B 75B6                    	jnz	short lff24s2_1
  2216 0000127D E924F8FFFF              	jmp	lff24_3
  2217                                  
  2218                                  ; .....................
  2219                                  
  2220                                  load_32khz_mono_8_bit:
  2221                                  	; 15/11/2023
  2222 00001282 F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2223                                  					; last of the file?
  2224 00001289 7402                    	jz	short lff32m_0		; no
  2225 0000128B F9                      	stc
  2226 0000128C C3                      	retn
  2227                                  
  2228                                  lff32m_0:
  2229 0000128D BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2230                                          ;mov	edx, [loadsize]
  2231                                  
  2232                                  	; esi = buffer address
  2233                                  	;; edx = buffer size
  2234                                  
  2235                                  	; load file into memory
  2236                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00001292 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00001298 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 0000129A 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000012A0 B803000000          <1>  mov eax, %1
    86                              <1> 
    87 000012A5 CD40                <1>  int 40h
  2237 000012A7 7247                    	jc	short lff32m_7 ; error !
  2238                                  
  2239 000012A9 BF[00300000]            	mov	edi, audio_buffer
  2240                                  	
  2241 000012AE 21C0                    	and	eax, eax
  2242 000012B0 7505                    	jnz	short lff32m_8
  2243 000012B2 E903F8FFFF              	jmp	lff32_eof
  2244                                  
  2245                                  lff32m_8:
  2246 000012B7 89C1                    	mov	ecx, eax	; byte count
  2247                                  lff32m_1:
  2248 000012B9 AC                      	lodsb
  2249                                  	;mov	[previous_val], al
  2250 000012BA 88C3                    	mov	bl, al
  2251 000012BC 2C80                    	sub	al, 80h
  2252 000012BE 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  2253 000012C2 66AB                    	stosw		; original sample (left channel)
  2254 000012C4 66AB                    	stosw		; original sample (right channel)
  2255                                  	;xor	eax, eax
  2256 000012C6 B080                    	mov	al, 80h
  2257 000012C8 49                      	dec	ecx
  2258 000012C9 7402                    	jz	short lff32m_2
  2259 000012CB 8A06                    	mov	al, [esi]
  2260                                  lff32m_2:
  2261                                  	;;mov	[next_val], al
  2262                                  	;mov	bh, al
  2263                                  	;add	al, [previous_val]
  2264 000012CD 00D8                    	add	al, bl
  2265 000012CF D0D8                    	rcr	al, 1
  2266 000012D1 2C80                    	sub	al, 80h
  2267 000012D3 66C1E008                	shl	ax, 8
  2268 000012D7 66AB                    	stosw		; this is interpolated sample (L)
  2269 000012D9 66AB                    	stosw		; this is interpolated sample (R)
  2270                                  	
  2271                                  	; different than 8-16-24 kHZ !
  2272                                  	; 'original-interpolated-original' trio samples 
  2273 000012DB E30E                    	jecxz	lff32m_3
  2274                                  
  2275 000012DD AC                      	lodsb
  2276 000012DE 2C80                    	sub	al, 80h
  2277 000012E0 66C1E008                	shl	ax, 8
  2278 000012E4 66AB                    	stosw		; original sample (left channel)
  2279 000012E6 66AB                    	stosw		; original sample (right channel)
  2280                                  
  2281                                  	; 32 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  2282 000012E8 49                      	dec	ecx
  2283 000012E9 75CE                    	jnz	short lff32m_1
  2284                                  lff32m_3:
  2285 000012EB E9B6F7FFFF              	jmp	lff32_3
  2286                                  
  2287                                  lff32m_7:
  2288                                  lff32s_7:
  2289 000012F0 E9CEF7FFFF              	jmp	lff32_5  ; error
  2290                                  
  2291                                  load_32khz_stereo_8_bit:
  2292                                  	; 15/11/2023
  2293 000012F5 F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2294                                  					; last of the file?
  2295 000012FC 7402                    	jz	short lff32s_0		; no
  2296 000012FE F9                      	stc
  2297 000012FF C3                      	retn
  2298                                  
  2299                                  lff32s_0:
  2300 00001300 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2301                                          ;mov	edx, [loadsize]
  2302                                  
  2303                                  	; esi = buffer address
  2304                                  	;; edx = buffer size
  2305                                  
  2306                                  	; load file into memory
  2307                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00001305 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 0000130B 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 0000130D 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00001313 B803000000          <1>  mov eax, %1
    86                              <1> 
    87 00001318 CD40                <1>  int 40h
  2308 0000131A 72D4                    	jc	short lff32s_7 ; error !
  2309                                  
  2310 0000131C BF[00300000]            	mov	edi, audio_buffer
  2311                                  	
  2312 00001321 D1E8                    	shr	eax, 1
  2313 00001323 7505                    	jnz	short lff32s_8
  2314 00001325 E990F7FFFF              	jmp	lff32_eof
  2315                                  
  2316                                  lff32s_8:
  2317 0000132A 89C1                    	mov	ecx, eax  ; word count
  2318                                  lff32s_1:
  2319 0000132C AC                      	lodsb
  2320 0000132D A2[31200000]            	mov	[previous_val_l], al
  2321 00001332 2C80                    	sub	al, 80h
  2322 00001334 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  2323 00001338 66AB                    	stosw		; original sample (L)
  2324 0000133A AC                      	lodsb
  2325 0000133B A2[33200000]            	mov	[previous_val_r], al
  2326 00001340 2C80                    	sub	al, 80h
  2327 00001342 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  2328 00001346 66AB                    	stosw		; original sample (R)
  2329                                  
  2330                                  	;xor	eax, eax
  2331 00001348 66B88080                	mov	ax, 8080h
  2332 0000134C 49                      	dec	ecx
  2333 0000134D 7403                    	jz	short lff32s_2
  2334                                  		; convert 8 bit sample to 16 bit sample
  2335 0000134F 668B06                  	mov	ax, [esi]
  2336                                  lff32s_2:
  2337                                  	;;mov	[next_val_l], al
  2338                                  	;;mov	[next_val_r], ah
  2339                                  	;mov	bx, ax
  2340 00001352 88E7                    	mov	bh, ah
  2341 00001354 0205[31200000]          	add	al, [previous_val_l]
  2342 0000135A D0D8                    	rcr	al, 1
  2343                                  	;mov	dl, al
  2344 0000135C 2C80                    	sub	al, 80h
  2345 0000135E 66C1E008                	shl	ax, 8
  2346 00001362 66AB                    	stosw		; this is interpolated sample (L)
  2347 00001364 88F8                    	mov	al, bh	; [next_val_r]
  2348 00001366 0205[33200000]          	add	al, [previous_val_r]
  2349 0000136C D0D8                    	rcr	al, 1
  2350                                  	;mov	dh, al
  2351 0000136E 2C80                    	sub	al, 80h
  2352 00001370 66C1E008                	shl	ax, 8
  2353 00001374 66AB                    	stosw		; this is interpolated sample (R)
  2354                                  
  2355                                  	; different than 8-16-24 kHZ !
  2356                                  	; 'original-interpolated-original' trio samples 
  2357 00001376 E315                    	jecxz	lff32s_3
  2358                                  
  2359 00001378 AC                      	lodsb
  2360 00001379 2C80                    	sub	al, 80h
  2361 0000137B 66C1E008                	shl	ax, 8
  2362 0000137F 66AB                    	stosw		; original sample (left channel)
  2363                                  
  2364 00001381 AC                      	lodsb
  2365 00001382 2C80                    	sub	al, 80h
  2366 00001384 66C1E008                	shl	ax, 8
  2367 00001388 66AB                    	stosw		; original sample (right channel)
  2368                                  		
  2369                                  	; 32 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  2370 0000138A 49                      	dec	ecx
  2371 0000138B 759F                    	jnz	short lff32s_1
  2372                                  lff32s_3:
  2373 0000138D E914F7FFFF              	jmp	lff32_3
  2374                                  
  2375                                  load_32khz_mono_16_bit:
  2376                                  	; 15/11/2023
  2377 00001392 F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2378                                  					; last of the file?
  2379 00001399 7402                    	jz	short lff32m2_0		; no
  2380 0000139B F9                      	stc
  2381 0000139C C3                      	retn
  2382                                  
  2383                                  lff32m2_0:
  2384 0000139D BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2385                                          ;mov	edx, [loadsize]
  2386                                  
  2387                                  	; esi = buffer address
  2388                                  	;; edx = buffer size
  2389                                  
  2390                                  	; load file into memory
  2391                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 000013A2 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 000013A8 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 000013AA 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000013B0 B803000000          <1>  mov eax, %1
    86                              <1> 
    87 000013B5 CD40                <1>  int 40h
  2392 000013B7 723E                    	jc	short lff32m2_7 ; error !
  2393                                  
  2394 000013B9 BF[00300000]            	mov	edi, audio_buffer
  2395                                  	
  2396 000013BE D1E8                    	shr	eax, 1
  2397 000013C0 7505                    	jnz	short lff32m2_8
  2398 000013C2 E9F3F6FFFF              	jmp	lff32_eof
  2399                                  
  2400                                  lff32m2_8:
  2401 000013C7 89C1                    	mov	ecx, eax  ; word count
  2402                                  lff32m2_1:
  2403 000013C9 66AD                    	lodsw
  2404 000013CB 66AB                    	stosw		; original sample (left channel)
  2405 000013CD 66AB                    	stosw		; original sample (right channel)
  2406 000013CF 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  2407                                  	;mov	[previous_val], ax
  2408                                  	;mov	ebx, eax	
  2409                                  	;xor	eax, eax
  2410 000013D2 31DB                    	xor	ebx, ebx
  2411 000013D4 49                      	dec	ecx
  2412 000013D5 7403                    	jz	short lff32m2_2
  2413                                  	;mov	ax, [esi]
  2414 000013D7 668B1E                  	mov	bx, [esi]
  2415                                  lff32m2_2:
  2416                                  	;add	ah, 80h ; convert sound level 0 to 65535 format
  2417                                  	;mov	ebp, eax	; [next_val]
  2418                                  	;add	ax, [previous_val]
  2419                                  	; ax = [previous_val]
  2420                                  	; bx = [next_val]
  2421 000013DA 6601D8                  	add	ax, bx
  2422 000013DD 66D1D8                  	rcr	ax, 1
  2423 000013E0 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2424 000013E3 66AB                    	stosw		; this is interpolated sample (L)
  2425 000013E5 66AB                    	stosw		; this is interpolated sample (R)
  2426                                  
  2427                                  	; different than 8-16-24 kHZ !
  2428                                  	; 'original-interpolated-original' trio samples 
  2429 000013E7 E309                    	jecxz	lff32m2_3
  2430                                  
  2431 000013E9 66AD                    	lodsw
  2432 000013EB 66AB                    	stosw		; original sample (left channel)
  2433 000013ED 66AB                    	stosw		; original sample (right channel)
  2434                                  
  2435                                  	; 32 kHZ mono to 48 kHZ stereo conversion of the sample is OK
  2436 000013EF 49                      	dec	ecx
  2437 000013F0 75D7                    	jnz	short lff32m2_1
  2438                                  lff32m2_3:
  2439 000013F2 E9AFF6FFFF              	jmp	lff32_3
  2440                                  
  2441                                  lff32m2_7:
  2442                                  lff32s2_7:
  2443 000013F7 E9C7F6FFFF              	jmp	lff32_5  ; error
  2444                                  
  2445                                  load_32khz_stereo_16_bit:
  2446                                  	; 16/11/2023
  2447                                  	; 15/11/2023
  2448 000013FC F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2449                                  					; last of the file?
  2450 00001403 7402                    	jz	short lff32s2_0		; no
  2451 00001405 F9                      	stc
  2452 00001406 C3                      	retn
  2453                                  
  2454                                  lff32s2_0:
  2455 00001407 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2456                                          ;mov	edx, [loadsize]
  2457                                  
  2458                                  	; esi = buffer address
  2459                                  	;; edx = buffer size
  2460                                  
  2461                                  	; load file into memory
  2462                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 0000140C 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00001412 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00001414 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 0000141A B803000000          <1>  mov eax, %1
    86                              <1> 
    87 0000141F CD40                <1>  int 40h
  2463 00001421 72D4                    	jc	short lff32s2_7 ; error !
  2464                                  
  2465 00001423 BF[00300000]            	mov	edi, audio_buffer
  2466                                  	
  2467 00001428 C1E802                  	shr	eax, 2
  2468 0000142B 7505                    	jnz	short lff32s2_8
  2469 0000142D E988F6FFFF              	jmp	lff32_eof
  2470                                  
  2471                                  lff32s2_8:
  2472 00001432 89C1                    	mov	ecx, eax ; dword count
  2473                                  lff32s2_1:
  2474 00001434 66AD                    	lodsw
  2475 00001436 66AB                    	stosw		; original sample (L)
  2476 00001438 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format 
  2477 0000143B 66A3[31200000]          	mov	[previous_val_l], ax
  2478 00001441 66AD                    	lodsw
  2479 00001443 66AB                    	stosw		; original sample (R)
  2480 00001445 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format 
  2481                                  	;mov	[previous_val_r], ax
  2482 00001448 89C3                    	mov	ebx, eax
  2483 0000144A 31D2                    	xor	edx, edx
  2484 0000144C 31C0                    	xor	eax, eax
  2485                                  	; 16/11/2023
  2486 0000144E 49                      	dec	ecx
  2487 0000144F 7407                    	jz	short lff32s2_2
  2488 00001451 668B06                  	mov	ax, [esi]
  2489 00001454 668B5602                	mov	dx, [esi+2]
  2490                                  lff32s2_2:
  2491 00001458 80C480                  	add	ah, 80h	; convert sound level 0 to 65535 format 
  2492                                  	;;mov	[next_val_l], ax
  2493                                  	;mov	ebp, eax
  2494 0000145B 80C680                  	add	dh, 80h	; convert sound level 0 to 65535 format 
  2495                                  	;mov	[next_val_r], dx
  2496 0000145E 660305[31200000]        	add	ax, [previous_val_l]
  2497 00001465 66D1D8                  	rcr	ax, 1
  2498 00001468 80EC80                  	sub	ah, 80h ; -32768 to +32767 format again
  2499 0000146B 66AB                    	stosw		; this is interpolated sample (L)
  2500                                  	;mov	ax, [next_val_r]
  2501 0000146D 89D0                    	mov	eax, edx
  2502                                  	;add	ax, [previous_val_r]
  2503 0000146F 6601D8                  	add	ax, bx
  2504 00001472 66D1D8                  	rcr	ax, 1
  2505 00001475 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  2506 00001478 66AB                    	stosw		; this is interpolated sample (R)
  2507                                  
  2508                                  	; different than 8-16-24 kHZ !
  2509                                  	; 'original-interpolated-original' trio samples 
  2510 0000147A E30B                    	jecxz	lff32s2_3
  2511                                  
  2512 0000147C 66AD                    	lodsw
  2513 0000147E 66AB                    	stosw	; original sample (L)
  2514 00001480 66AD                    	lodsw
  2515 00001482 66AB                    	stosw	; original sample (R)
  2516                                  	
  2517                                  	; 32 kHZ stereo to 48 kHZ stereo conversion of the sample is OK
  2518 00001484 49                      	dec	ecx
  2519 00001485 75AD                    	jnz	short lff32s2_1
  2520                                  lff32s2_3:
  2521 00001487 E91AF6FFFF              	jmp	lff32_3
  2522                                  
  2523                                  ; .....................
  2524                                  
  2525                                  load_22khz_mono_8_bit:
  2526                                  	; 16/11/2023
  2527 0000148C F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2528                                  					; last of the file?
  2529 00001493 7402                    	jz	short lff22m_0		; no
  2530 00001495 F9                      	stc
  2531 00001496 C3                      	retn
  2532                                  
  2533                                  lff22m_0:
  2534 00001497 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2535                                          ;mov	edx, [loadsize]
  2536                                  
  2537                                  	; esi = buffer address
  2538                                  	;; edx = buffer size
  2539                                  
  2540                                  	; load file into memory
  2541                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 0000149C 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 000014A2 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 000014A4 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000014AA B803000000          <1>  mov eax, %1
    86                              <1> 
    87 000014AF CD40                <1>  int 40h
  2542 000014B1 725D                    	jc	short lff22m_7 ; error !
  2543                                  
  2544 000014B3 BF[00300000]            	mov	edi, audio_buffer
  2545                                  	
  2546 000014B8 21C0                    	and	eax, eax
  2547 000014BA 7505                    	jnz	short lff22m_8
  2548 000014BC E9F9F5FFFF              	jmp	lff22_eof
  2549                                  
  2550                                  lff22m_8:
  2551 000014C1 89C1                    	mov	ecx, eax	; byte count
  2552                                  lff22m_9:
  2553 000014C3 BD05000000              	mov	ebp, 5 ; interpolation (one step) loop count
  2554 000014C8 C605[39200000]03        	mov	byte [faz], 3  ; 3 steps/phases
  2555                                  lff22m_1:
  2556                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  2557 000014CF AC                      	lodsb
  2558 000014D0 B280                    	mov	dl, 80h
  2559 000014D2 49                      	dec	ecx
  2560 000014D3 7402                    	jz	short lff22m_2_1
  2561 000014D5 8A16                    	mov	dl, [esi]
  2562                                  lff22m_2_1:	
  2563                                  	; al = [previous_val]
  2564                                  	; dl = [next_val]
  2565 000014D7 E80F060000              	call	interpolating_3_8bit_mono ; 1 of 17
  2566 000014DC E32D                    	jecxz	lff22m_3
  2567                                  lff22m_2_2:
  2568 000014DE AC                      	lodsb
  2569 000014DF B280                    	mov	dl, 80h
  2570 000014E1 49                      	dec	ecx
  2571 000014E2 7402                    	jz	short lff22m_2_3
  2572 000014E4 8A16                    	mov	dl, [esi]
  2573                                  lff22m_2_3:
  2574 000014E6 E884060000               	call	interpolating_2_8bit_mono ; 2 of 17 .. 6 of 17
  2575 000014EB E31E                    	jecxz	lff22m_3
  2576 000014ED 4D                      	dec	ebp
  2577 000014EE 75EE                    	jnz	short lff22m_2_2
  2578                                  
  2579 000014F0 A0[39200000]            	mov	al, [faz]
  2580 000014F5 FEC8                    	dec	al
  2581 000014F7 74CA                    	jz	short lff22m_9
  2582 000014F9 FE0D[39200000]          	dec	byte [faz]
  2583 000014FF BD04000000              	mov	ebp, 4
  2584 00001504 FEC8                    	dec	al
  2585 00001506 75C7                    	jnz	short lff22m_1 ; 3:2:2:2:2 ; 7-11 of 17
  2586 00001508 45                      	inc	ebp ; 5
  2587 00001509 EBC4                    	jmp	short lff22m_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  2588                                  
  2589                                  lff22m_3:
  2590                                  lff22s_3:
  2591 0000150B E996F5FFFF              	jmp	lff22_3	; padfill
  2592                                  		; (put zeros in the remain words of the buffer)
  2593                                  lff22m_7:
  2594                                  lff22s_7:
  2595 00001510 E9AEF5FFFF              	jmp	lff22_5  ; error
  2596                                  
  2597                                  load_22khz_stereo_8_bit:
  2598                                  	; 16/11/2023
  2599 00001515 F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2600                                  					; last of the file?
  2601 0000151C 7402                    	jz	short lff22s_0		; no
  2602 0000151E F9                      	stc
  2603 0000151F C3                      	retn
  2604                                  
  2605                                  lff22s_0:
  2606 00001520 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2607                                          ;mov	edx, [loadsize]
  2608                                  
  2609                                  	; esi = buffer address
  2610                                  	;; edx = buffer size
  2611                                  
  2612                                  	; load file into memory
  2613                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00001525 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 0000152B 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 0000152D 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00001533 B803000000          <1>  mov eax, %1
    86                              <1> 
    87 00001538 CD40                <1>  int 40h
  2614 0000153A 72D4                    	jc	short lff22s_7 ; error !
  2615                                  
  2616 0000153C BF[00300000]            	mov	edi, audio_buffer
  2617                                  	
  2618 00001541 D1E8                    	shr	eax, 1
  2619 00001543 7505                    	jnz	short lff22s_8
  2620 00001545 E970F5FFFF              	jmp	lff22_eof
  2621                                  
  2622                                  lff22s_8:
  2623 0000154A 89C1                    	mov	ecx, eax	; word count
  2624                                  lff22s_9:
  2625 0000154C BD05000000              	mov	ebp, 5 ; interpolation (one step) loop count
  2626 00001551 C605[39200000]03        	mov	byte [faz], 3  ; 3 steps/phase
  2627                                  lff22s_1:
  2628                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  2629 00001558 66AD                    	lodsw
  2630 0000155A 66BA8080                	mov	dx, 8080h
  2631 0000155E 49                      	dec	ecx
  2632 0000155F 7403                    	jz	short lff22s_2_1 
  2633 00001561 668B16                  	mov	dx, [esi]
  2634                                  lff22s_2_1:	
  2635                                  	; al = [previous_val_l]
  2636                                  	; ah = [previous_val_r]
  2637                                  	; dl = [next_val_l]
  2638                                  	; dh = [next_val_r]	
  2639 00001564 E8B3050000              	call	interpolating_3_8bit_stereo ; 1 of 17 
  2640 00001569 E3A0                    	jecxz	lff22s_3
  2641                                  lff22s_2_2:
  2642 0000156B 66AD                    	lodsw
  2643 0000156D 66BA8080                	mov	dx, 8080h
  2644 00001571 49                      	dec	ecx
  2645 00001572 7403                    	jz	short lff22s_2_3
  2646 00001574 668B16                  	mov	dx, [esi]
  2647                                  lff22s_2_3:
  2648 00001577 E810060000               	call	interpolating_2_8bit_stereo ; 2 of 17 .. 6 of 17
  2649 0000157C E38D                    	jecxz	lff22s_3
  2650 0000157E 4D                      	dec	ebp
  2651 0000157F 75EA                    	jnz	short lff22s_2_2
  2652                                  
  2653 00001581 A0[39200000]            	mov	al, [faz]
  2654 00001586 FEC8                    	dec	al
  2655 00001588 74C2                    	jz	short lff22s_9
  2656 0000158A FE0D[39200000]          	dec	byte [faz]
  2657 00001590 BD04000000              	mov	ebp, 4
  2658 00001595 FEC8                    	dec	al
  2659 00001597 75BF                    	jnz	short lff22s_1 ; 3:2:2:2:2 ; 7-11 of 17
  2660 00001599 45                      	inc	ebp ; 5
  2661 0000159A EBBC                    	jmp	short lff22s_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  2662                                  
  2663                                  load_22khz_mono_16_bit:
  2664                                  	; 16/11/2023
  2665 0000159C F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2666                                  					; last of the file?
  2667 000015A3 7402                    	jz	short lff22m2_0		; no
  2668 000015A5 F9                      	stc
  2669 000015A6 C3                      	retn
  2670                                  
  2671                                  lff22m2_0:
  2672 000015A7 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2673                                          ;mov	edx, [loadsize]
  2674                                  
  2675                                  	; esi = buffer address
  2676                                  	;; edx = buffer size
  2677                                  
  2678                                  	; load file into memory
  2679                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 000015AC 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 000015B2 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 000015B4 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000015BA B803000000          <1>  mov eax, %1
    86                              <1> 
    87 000015BF CD40                <1>  int 40h
  2680 000015C1 7261                    	jc	short lff22m2_7 ; error !
  2681                                  
  2682 000015C3 BF[00300000]            	mov	edi, audio_buffer
  2683                                  	
  2684 000015C8 D1E8                    	shr	eax, 1
  2685 000015CA 7505                    	jnz	short lff22m2_8
  2686 000015CC E9E9F4FFFF              	jmp	lff22_eof
  2687                                  
  2688                                  lff22m2_8:
  2689 000015D1 89C1                    	mov	ecx, eax	; word count
  2690                                  lff22m2_9:
  2691 000015D3 BD05000000              	mov	ebp, 5 ; interpolation (one step) loop count
  2692 000015D8 C605[39200000]03        	mov	byte [faz], 3  ; 3 steps/phases
  2693                                  lff22m2_1:
  2694                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  2695 000015DF 66AD                    	lodsw
  2696 000015E1 31D2                    	xor	edx, edx
  2697 000015E3 49                      	dec	ecx
  2698 000015E4 7403                    	jz	short lff22m2_2_1
  2699 000015E6 668B16                  	mov	dx, [esi]
  2700                                  lff22m2_2_1:	
  2701                                  	; ax = [previous_val]
  2702                                  	; dx = [next_val]
  2703 000015E9 E8CF050000              	call	interpolating_3_16bit_mono ; 1 of 17
  2704 000015EE E32F                    	jecxz	lff22m2_3
  2705                                  lff22m2_2_2:
  2706 000015F0 66AD                    	lodsw
  2707 000015F2 31D2                    	xor	edx, edx
  2708 000015F4 49                      	dec	ecx
  2709 000015F5 7403                    	jz	short lff22m2_2_3
  2710 000015F7 668B16                  	mov	dx, [esi]
  2711                                  lff22m2_2_3:
  2712 000015FA E851060000               	call	interpolating_2_16bit_mono ; 2 of 17 .. 6 of 17
  2713 000015FF E31E                    	jecxz	lff22m2_3
  2714 00001601 4D                      	dec	ebp
  2715 00001602 75EC                    	jnz	short lff22m2_2_2
  2716                                  
  2717 00001604 A0[39200000]            	mov	al, [faz]
  2718 00001609 FEC8                    	dec	al
  2719 0000160B 74C6                    	jz	short lff22m2_9
  2720 0000160D FE0D[39200000]          	dec	byte [faz]
  2721 00001613 BD04000000              	mov	ebp, 4
  2722 00001618 FEC8                    	dec	al
  2723 0000161A 75C3                    	jnz	short lff22m2_1 ; 3:2:2:2:2 ; 7-11 of 17
  2724 0000161C 45                      	inc	ebp ; 5
  2725 0000161D EBC0                    	jmp	short lff22m2_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  2726                                  
  2727                                  lff22m2_3:
  2728                                  lff22s2_3:
  2729 0000161F E982F4FFFF              	jmp	lff22_3	; padfill
  2730                                  		; (put zeros in the remain words of the buffer)
  2731                                  lff22m2_7:
  2732                                  lff22s2_7:
  2733 00001624 E99AF4FFFF              	jmp	lff22_5  ; error
  2734                                  
  2735                                  load_22khz_stereo_16_bit:
  2736                                  	; 16/11/2023
  2737 00001629 F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2738                                  					; last of the file?
  2739 00001630 7402                    	jz	short lff22s2_0		; no
  2740 00001632 F9                      	stc
  2741 00001633 C3                      	retn
  2742                                  
  2743                                  lff22s2_0:
  2744 00001634 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2745                                          ;mov	edx, [loadsize]
  2746                                  
  2747                                  	; esi = buffer address
  2748                                  	;; edx = buffer size
  2749                                  
  2750                                  	; load file into memory
  2751                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00001639 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 0000163F 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00001641 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00001647 B803000000          <1>  mov eax, %1
    86                              <1> 
    87 0000164C CD40                <1>  int 40h
  2752 0000164E 72D4                    	jc	short lff22s2_7 ; error !
  2753                                  
  2754 00001650 BF[00300000]            	mov	edi, audio_buffer
  2755                                  	
  2756 00001655 C1E802                  	shr	eax, 2	; dword (left chan word + right chan word)
  2757 00001658 7505                    	jnz	short lff22s2_8
  2758 0000165A E95BF4FFFF              	jmp	lff22_eof
  2759                                  
  2760                                  lff22s2_8:
  2761 0000165F 89C1                    	mov	ecx, eax	; dword count
  2762                                  lff22s2_9:
  2763 00001661 BD05000000              	mov	ebp, 5 ; interpolation (one step) loop count
  2764 00001666 C605[39200000]03        	mov	byte [faz], 3  ; 3 steps/phase
  2765                                  lff22s2_1:
  2766                                  	; 3:2:2:2:2:2::3:2:2:2:2::3:2:2:2:2:2  ; 37/17
  2767 0000166D 66AD                    	lodsw
  2768 0000166F 89C3                    	mov	ebx, eax
  2769 00001671 66AD                    	lodsw
  2770 00001673 8B16                    	mov	edx, [esi]
  2771 00001675 668915[35200000]        	mov	[next_val_l], dx
  2772                                  	; 26/11/2023
  2773 0000167C C1EA10                  	shr	edx, 16
  2774 0000167F 49                      	dec	ecx
  2775 00001680 7509                    	jnz	short lff22s2_2_1
  2776 00001682 31D2                    	xor	edx, edx ; 0
  2777 00001684 668915[35200000]        	mov	[next_val_l], dx
  2778                                  lff22s2_2_1:
  2779                                  	; bx = [previous_val_l]
  2780                                  	; ax = [previous_val_r]
  2781                                  	; [next_val_l]
  2782                                  	; dx = [next_val_r]
  2783 0000168B E85D050000              	call	interpolating_3_16bit_stereo ; 1 of 17 
  2784 00001690 E38D                    	jecxz	lff22s2_3
  2785                                  lff22s2_2_2:
  2786 00001692 66AD                    	lodsw
  2787 00001694 89C3                    	mov	ebx, eax
  2788 00001696 66AD                    	lodsw
  2789 00001698 8B16                    	mov	edx, [esi]
  2790 0000169A 668915[35200000]        	mov	[next_val_l], dx
  2791                                  	; 26/11/2023
  2792 000016A1 C1EA10                  	shr	edx, 16
  2793 000016A4 49                      	dec	ecx
  2794 000016A5 7509                    	jnz	short lff22s2_2_3
  2795 000016A7 31D2                    	xor	edx, edx ; 0
  2796 000016A9 668915[35200000]        	mov	[next_val_l], dx
  2797                                  lff22s2_2_3:
  2798 000016B0 E8B3050000               	call	interpolating_2_16bit_stereo ; 2 of 17 .. 6 of 17
  2799 000016B5 E31E                    	jecxz	lff22s2_2_4
  2800                                  
  2801 000016B7 4D                      	dec	ebp
  2802 000016B8 75D8                    	jnz	short lff22s2_2_2
  2803                                  
  2804 000016BA A0[39200000]            	mov	al, [faz]
  2805 000016BF FEC8                    	dec	al
  2806 000016C1 749E                    	jz	short lff22s2_9
  2807 000016C3 FE0D[39200000]          	dec	byte [faz]
  2808 000016C9 BD04000000              	mov	ebp, 4
  2809 000016CE FEC8                    	dec	al
  2810 000016D0 759B                    	jnz	short lff22s2_1 ; 3:2:2:2:2 ; 7-11 of 17
  2811 000016D2 45                      	inc	ebp ; 5
  2812 000016D3 EB98                    	jmp	short lff22s2_1 ; 3:2:2:2:2:2 ; 12-17 of 17
  2813                                  
  2814                                  lff22s2_2_4:
  2815                                  	; 26/11/2023
  2816 000016D5 E9CCF3FFFF              	jmp	lff22_3	; padfill
  2817                                  
  2818                                  ; .....................
  2819                                  
  2820                                  load_11khz_mono_8_bit:
  2821                                  	; 18/11/2023
  2822 000016DA F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2823                                  					; last of the file?
  2824 000016E1 7402                    	jz	short lff11m_0		; no
  2825 000016E3 F9                      	stc
  2826 000016E4 C3                      	retn
  2827                                  
  2828                                  lff11m_0:
  2829 000016E5 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2830                                          ;mov	edx, [loadsize]
  2831                                  
  2832                                  	; esi = buffer address
  2833                                  	;; edx = buffer size
  2834                                  
  2835                                  	; load file into memory
  2836                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 000016EA 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 000016F0 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 000016F2 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000016F8 B803000000          <1>  mov eax, %1
    86                              <1> 
    87 000016FD CD40                <1>  int 40h
  2837 000016FF 7247                    	jc	short lff11m_7 ; error !
  2838                                  
  2839 00001701 BF[00300000]            	mov	edi, audio_buffer
  2840                                  	
  2841 00001706 21C0                    	and	eax, eax
  2842 00001708 7505                    	jnz	short lff11m_8
  2843 0000170A E9ABF3FFFF              	jmp	lff11_eof
  2844                                  
  2845                                  lff11m_8:
  2846 0000170F 89C1                    	mov	ecx, eax		; byte count
  2847                                  lff11m_9:
  2848 00001711 BD06000000              	mov	ebp, 6 ; interpolation (one step) loop count
  2849                                  lff11m_1:
  2850                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  2851 00001716 AC                      	lodsb
  2852 00001717 B280                    	mov	dl, 80h
  2853 00001719 49                      	dec	ecx
  2854 0000171A 7402                    	jz	short lff11m_2_1
  2855 0000171C 8A16                    	mov	dl, [esi]
  2856                                  lff11m_2_1:	
  2857                                  	; al = [previous_val]
  2858                                  	; dl = [next_val]
  2859 0000171E E876050000              	call	interpolating_5_8bit_mono
  2860 00001723 E328                    	jecxz	lff11m_3
  2861                                  lff11m_2_2:
  2862 00001725 AC                      	lodsb
  2863 00001726 B280                    	mov	dl, 80h
  2864 00001728 49                      	dec	ecx
  2865 00001729 7402                    	jz	short lff11m_2_3
  2866 0000172B 8A16                    	mov	dl, [esi]
  2867                                  lff11m_2_3:
  2868 0000172D E873060000               	call	interpolating_4_8bit_mono
  2869 00001732 E319                    	jecxz	lff11m_3
  2870                                  
  2871 00001734 4D                      	dec	ebp
  2872 00001735 74DA                    	jz	short lff11m_9
  2873                                  
  2874 00001737 AC                      	lodsb
  2875 00001738 B280                    	mov	dl, 80h
  2876 0000173A 49                      	dec	ecx
  2877 0000173B 7402                    	jz	short lff11m_2_4
  2878 0000173D 8A16                    	mov	dl, [esi]
  2879                                  lff11m_2_4:
  2880 0000173F E861060000              	call	interpolating_4_8bit_mono
  2881 00001744 E307                    	jecxz	lff11m_3
  2882 00001746 EBCE                    	jmp	short lff11m_1
  2883                                  
  2884                                  lff11m_7:
  2885                                  lff11s_7:
  2886 00001748 E976F3FFFF              	jmp	lff11_5  ; error
  2887                                  
  2888                                  lff11m_3:
  2889                                  lff11s_3:
  2890 0000174D E954F3FFFF              	jmp	lff11_3	; padfill
  2891                                  		; (put zeros in the remain words of the buffer)
  2892                                  
  2893                                  load_11khz_stereo_8_bit:
  2894                                  	; 18/11/2023
  2895 00001752 F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2896                                  					; last of the file?
  2897 00001759 7402                    	jz	short lff11s_0		; no
  2898 0000175B F9                      	stc
  2899 0000175C C3                      	retn
  2900                                  
  2901                                  lff11s_0:
  2902 0000175D BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2903                                          ;mov	edx, [loadsize]
  2904                                  
  2905                                  	; esi = buffer address
  2906                                  	;; edx = buffer size
  2907                                  
  2908                                  	; load file into memory
  2909                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00001762 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00001768 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 0000176A 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00001770 B803000000          <1>  mov eax, %1
    86                              <1> 
    87 00001775 CD40                <1>  int 40h
  2910 00001777 72CF                    	jc	short lff11s_7 ; error !
  2911                                  
  2912 00001779 BF[00300000]            	mov	edi, audio_buffer
  2913                                  	
  2914 0000177E D1E8                    	shr	eax, 1
  2915 00001780 7505                    	jnz	short lff11s_8
  2916 00001782 E933F3FFFF              	jmp	lff11_eof
  2917                                  
  2918                                  lff11s_8:
  2919 00001787 89C1                    	mov	ecx, eax	; word count
  2920                                  lff11s_9:
  2921 00001789 BD06000000              	mov	ebp, 6 ; interpolation (one step) loop count
  2922                                  lff11s_1:
  2923                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  2924 0000178E 66AD                    	lodsw
  2925 00001790 66BA8080                	mov	dx, 8080h
  2926 00001794 49                      	dec	ecx
  2927 00001795 7403                    	jz	short lff11s_2_1 
  2928 00001797 668B16                  	mov	dx, [esi]
  2929                                  lff11s_2_1:	
  2930                                  	; al = [previous_val_l]
  2931                                  	; ah = [previous_val_r]
  2932                                  	; dl = [next_val_l]
  2933                                  	; dh = [next_val_r]	
  2934 0000179A E859050000              	call	interpolating_5_8bit_stereo
  2935 0000179F E3AC                    	jecxz	lff11s_3
  2936                                  lff11s_2_2:
  2937 000017A1 66AD                    	lodsw
  2938 000017A3 66BA8080                	mov	dx, 8080h
  2939 000017A7 49                      	dec	ecx
  2940 000017A8 7403                    	jz	short lff11s_2_3
  2941 000017AA 668B16                  	mov	dx, [esi]
  2942                                  lff11s_2_3:
  2943 000017AD E832060000               	call	interpolating_4_8bit_stereo
  2944 000017B2 E399                    	jecxz	lff11s_3
  2945                                  	
  2946 000017B4 4D                      	dec	ebp
  2947 000017B5 74D2                    	jz	short lff11s_9
  2948                                  
  2949 000017B7 66AD                    	lodsw
  2950 000017B9 66BA8080                	mov	dx, 8080h
  2951 000017BD 49                      	dec	ecx
  2952 000017BE 7403                    	jz	short lff11s_2_4
  2953 000017C0 668B16                  	mov	dx, [esi]
  2954                                  lff11s_2_4:
  2955 000017C3 E81C060000              	call	interpolating_4_8bit_stereo
  2956 000017C8 E383                    	jecxz	lff11s_3
  2957 000017CA EBC2                    	jmp	short lff11s_1
  2958                                  
  2959                                  load_11khz_mono_16_bit:
  2960                                  	; 18/11/2023
  2961 000017CC F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  2962                                  					; last of the file?
  2963 000017D3 7402                    	jz	short lff11m2_0		; no
  2964 000017D5 F9                      	stc
  2965 000017D6 C3                      	retn
  2966                                  
  2967                                  lff11m2_0:
  2968 000017D7 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  2969                                          ;mov	edx, [loadsize]
  2970                                  
  2971                                  	; esi = buffer address
  2972                                  	;; edx = buffer size
  2973                                  
  2974                                  	; load file into memory
  2975                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 000017DC 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 000017E2 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 000017E4 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 000017EA B803000000          <1>  mov eax, %1
    86                              <1> 
    87 000017EF CD40                <1>  int 40h
  2976 000017F1 724D                    	jc	short lff11m2_7 ; error !
  2977                                  
  2978 000017F3 BF[00300000]            	mov	edi, audio_buffer
  2979                                  	
  2980 000017F8 D1E8                    	shr	eax, 1
  2981 000017FA 7505                    	jnz	short lff11m2_8
  2982 000017FC E9B9F2FFFF              	jmp	lff11_eof
  2983                                  
  2984                                  lff11m2_8:
  2985 00001801 89C1                    	mov	ecx, eax	; word count
  2986                                  lff11m2_9:
  2987 00001803 BD06000000              	mov	ebp, 6 ; interpolation (one step) loop count
  2988                                  lff11m2_1:
  2989                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  2990 00001808 66AD                    	lodsw
  2991 0000180A 31D2                    	xor	edx, edx
  2992 0000180C 49                      	dec	ecx
  2993 0000180D 7403                    	jz	short lff11m2_2_1
  2994 0000180F 668B16                  	mov	dx, [esi]
  2995                                  lff11m2_2_1:	
  2996                                  	; ax = [previous_val]
  2997                                  	; dx = [next_val]
  2998 00001812 E83A060000              	call	interpolating_5_16bit_mono
  2999 00001817 E362                    	jecxz	lff11m2_3
  3000                                  lff11m2_2_2:
  3001 00001819 66AD                    	lodsw
  3002 0000181B 31D2                    	xor	edx, edx
  3003 0000181D 49                      	dec	ecx
  3004 0000181E 7403                    	jz	short lff11m2_2_3
  3005 00001820 668B16                  	mov	dx, [esi]
  3006                                  lff11m2_2_3:
  3007 00001823 E853070000               	call	interpolating_4_16bit_mono
  3008 00001828 E351                    	jecxz	lff11m2_3
  3009                                  
  3010 0000182A 4D                      	dec	ebp
  3011 0000182B 74D6                    	jz	short lff11m2_9
  3012                                  
  3013 0000182D 66AD                    	lodsw
  3014 0000182F 31D2                    	xor	edx, edx
  3015 00001831 49                      	dec	ecx
  3016 00001832 7403                    	jz	short lff11m2_2_4
  3017 00001834 668B16                  	mov	dx, [esi]
  3018                                  lff11m2_2_4:
  3019 00001837 E83F070000               	call	interpolating_4_16bit_mono
  3020 0000183C E33D                    	jecxz	lff11m2_3
  3021 0000183E EBC8                    	jmp	short lff11m2_1
  3022                                  
  3023                                  lff11m2_7:
  3024                                  lff11s2_7:
  3025 00001840 E97EF2FFFF              	jmp	lff11_5  ; error
  3026                                  
  3027                                  load_11khz_stereo_16_bit:
  3028                                  	; 18/11/2023
  3029 00001845 F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3030                                  					; last of the file?
  3031 0000184C 7402                    	jz	short lff11s2_0		; no
  3032 0000184E F9                      	stc
  3033 0000184F C3                      	retn
  3034                                  
  3035                                  lff11s2_0:
  3036 00001850 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3037                                          ;mov	edx, [loadsize]
  3038                                  
  3039                                  	; esi = buffer address
  3040                                  	;; edx = buffer size
  3041                                  
  3042                                  	; load file into memory
  3043                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00001855 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 0000185B 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 0000185D 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00001863 B803000000          <1>  mov eax, %1
    86                              <1> 
    87 00001868 CD40                <1>  int 40h
  3044 0000186A 72D4                    	jc	short lff11s2_7 ; error !
  3045                                  
  3046 0000186C BF[00300000]            	mov	edi, audio_buffer
  3047                                  	
  3048 00001871 C1E802                  	shr	eax, 2	; dword (left chan word + right chan word)
  3049 00001874 750A                    	jnz	short lff11s2_8
  3050 00001876 E93FF2FFFF              	jmp	lff11_eof
  3051                                  
  3052                                  lff11m2_3:
  3053                                  lff11s2_3:
  3054 0000187B E926F2FFFF              	jmp	lff11_3	; padfill
  3055                                  		; (put zeros in the remain words of the buffer)
  3056                                  
  3057                                  lff11s2_8:
  3058 00001880 89C1                    	mov	ecx, eax	; dword count
  3059                                  lff11s2_9:
  3060 00001882 BD06000000              	mov	ebp, 6 ; interpolation (one step) loop count
  3061                                  lff11s2_1:
  3062                                  	; 5:4:4::5:4:4::5:4:4::5:4:4::5:4:4::5:4  ; 74/17
  3063 00001887 66AD                    	lodsw
  3064 00001889 89C3                    	mov	ebx, eax
  3065 0000188B 66AD                    	lodsw
  3066 0000188D 8B16                    	mov	edx, [esi]
  3067 0000188F 8915[35200000]          	mov	[next_val_l], edx
  3068                                  	; 26/11/2023
  3069 00001895 C1EA10                  	shr	edx, 16
  3070                                  	;mov	[next_val_r], dx
  3071 00001898 49                      	dec	ecx
  3072 00001899 7509                    	jnz	short lff11s2_2_1
  3073 0000189B 31D2                    	xor	edx, edx ; 0
  3074 0000189D 668915[35200000]        	mov	[next_val_l], dx
  3075                                  	;mov	[next_val_r], dx
  3076                                  lff11s2_2_1:
  3077                                  	; bx = [previous_val_l]
  3078                                  	; ax = [previous_val_r]
  3079                                  	; [next_val_l]
  3080                                  	; dx = [next_val_r]
  3081 000018A4 E803060000              	call	interpolating_5_16bit_stereo
  3082 000018A9 E3D0                    	jecxz	lff11s2_3
  3083                                  lff11s2_2_2:
  3084 000018AB 66AD                    	lodsw
  3085 000018AD 89C3                    	mov	ebx, eax
  3086 000018AF 66AD                    	lodsw
  3087 000018B1 8B16                    	mov	edx, [esi]
  3088 000018B3 668915[35200000]        	mov	[next_val_l], dx
  3089                                  	; 26/11/2023
  3090 000018BA C1EA10                  	shr	edx, 16
  3091                                  	;mov	[next_val_r], dx
  3092 000018BD 49                      	dec	ecx
  3093 000018BE 7509                    	jnz	short lff11s2_2_3
  3094 000018C0 31D2                    	xor	edx, edx ; 0
  3095 000018C2 668915[35200000]        	mov	[next_val_l], dx
  3096                                  	;mov	[next_val_r], dx
  3097                                  lff11s2_2_3:
  3098 000018C9 E8E6060000               	call	interpolating_4_16bit_stereo
  3099 000018CE E3AB                    	jecxz	lff11s2_3
  3100                                  	
  3101 000018D0 4D                      	dec	ebp
  3102 000018D1 74AF                    	jz	short lff11s2_9
  3103                                  
  3104 000018D3 66AD                    	lodsw
  3105 000018D5 89C3                    	mov	ebx, eax
  3106 000018D7 66AD                    	lodsw
  3107 000018D9 8B16                    	mov	edx, [esi]
  3108 000018DB 668915[35200000]        	mov	[next_val_l], dx
  3109                                  	; 26/11/2023
  3110 000018E2 C1EA10                  	shr	edx, 16
  3111                                  	;mov	[next_val_r], dx
  3112 000018E5 49                      	dec	ecx
  3113 000018E6 7509                    	jnz	short lff11s2_2_4
  3114 000018E8 31D2                    	xor	edx, edx ; 0
  3115 000018EA 668915[35200000]        	mov	[next_val_l], dx
  3116                                  	;mov	[next_val_r], dx
  3117                                  lff11s2_2_4:
  3118 000018F1 E8BE060000               	call	interpolating_4_16bit_stereo
  3119 000018F6 E383                    	jecxz	lff11s2_3
  3120 000018F8 EB8D                    	jmp	short lff11s2_1
  3121                                  
  3122                                  ; .....................
  3123                                  
  3124                                  load_44khz_mono_8_bit:
  3125                                  	; 18/11/2023
  3126 000018FA F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3127                                  					; last of the file?
  3128 00001901 7402                    	jz	short lff44m_0		; no
  3129 00001903 F9                      	stc
  3130 00001904 C3                      	retn
  3131                                  
  3132                                  lff44m_0:
  3133 00001905 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3134                                          ;mov	edx, [loadsize]
  3135                                  
  3136                                  	; esi = buffer address
  3137                                  	;; edx = buffer size
  3138                                  
  3139                                  	; load file into memory
  3140                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 0000190A 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00001910 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00001912 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00001918 B803000000          <1>  mov eax, %1
    86                              <1> 
    87 0000191D CD40                <1>  int 40h
  3141 0000191F 7250                    	jc	short lff44m_7 ; error !
  3142                                  
  3143 00001921 BF[00300000]            	mov	edi, audio_buffer
  3144                                  	
  3145 00001926 21C0                    	and	eax, eax
  3146 00001928 7505                    	jnz	short lff44m_8
  3147 0000192A E98BF1FFFF              	jmp	lff44_eof
  3148                                  
  3149                                  lff44m_8:
  3150 0000192F 89C1                    	mov	ecx, eax	; byte count
  3151                                  lff44m_9:
  3152 00001931 BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  3153 00001936 C605[39200000]02        	mov	byte [faz], 2  ; 2 steps/phases
  3154                                  lff44m_1:
  3155                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  3156                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  3157 0000193D AC                      	lodsb
  3158 0000193E B280                    	mov	dl, 80h
  3159 00001940 49                      	dec	ecx
  3160 00001941 7402                    	jz	short lff44m_2_1
  3161 00001943 8A16                    	mov	dl, [esi]
  3162                                  lff44m_2_1:	
  3163                                  	; al = [previous_val]
  3164                                  	; dl = [next_val]
  3165 00001945 E825020000              	call	interpolating_2_8bit_mono
  3166 0000194A E320                    	jecxz	lff44m_3
  3167                                  lff44m_2_2:
  3168 0000194C AC                      	lodsb
  3169 0000194D 2C80                    	sub	al, 80h
  3170 0000194F 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3171 00001953 66AB                    	stosw		; (L)
  3172 00001955 66AB                    	stosw		; (R)	
  3173                                  
  3174 00001957 49                      	dec	ecx
  3175 00001958 7412                    	jz	short lff44m_3	
  3176 0000195A 4D                      	dec	ebp
  3177 0000195B 75EF                    	jnz	short lff44m_2_2
  3178                                  	
  3179 0000195D FE0D[39200000]          	dec	byte [faz]
  3180 00001963 74CC                    	jz	short lff44m_9 
  3181 00001965 BD0B000000              	mov	ebp, 11
  3182 0000196A EBD1                    	jmp	short lff44m_1
  3183                                  
  3184                                  lff44m_3:
  3185                                  lff44s_3:
  3186 0000196C E935F1FFFF              	jmp	lff44_3	; padfill
  3187                                  		; (put zeros in the remain words of the buffer)
  3188                                  lff44m_7:
  3189                                  lff44s_7:
  3190 00001971 E94DF1FFFF              	jmp	lff44_5  ; error
  3191                                  
  3192                                  load_44khz_stereo_8_bit:
  3193                                  	; 16/11/2023
  3194 00001976 F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3195                                  					; last of the file?
  3196 0000197D 7402                    	jz	short lff44s_0		; no
  3197 0000197F F9                      	stc
  3198 00001980 C3                      	retn
  3199                                  
  3200                                  lff44s_0:
  3201 00001981 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3202                                          ;mov	edx, [loadsize]
  3203                                  
  3204                                  	; esi = buffer address
  3205                                  	;; edx = buffer size
  3206                                  
  3207                                  	; load file into memory
  3208                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00001986 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 0000198C 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 0000198E 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00001994 B803000000          <1>  mov eax, %1
    86                              <1> 
    87 00001999 CD40                <1>  int 40h
  3209 0000199B 72D4                    	jc	short lff44s_7 ; error !
  3210                                  
  3211 0000199D BF[00300000]            	mov	edi, audio_buffer
  3212                                  	
  3213 000019A2 D1E8                    	shr	eax, 1
  3214 000019A4 7505                    	jnz	short lff44s_8
  3215 000019A6 E90FF1FFFF              	jmp	lff44_eof
  3216                                  
  3217                                  lff44s_8:
  3218 000019AB 89C1                    	mov	ecx, eax	; word count
  3219                                  lff44s_9:
  3220 000019AD BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  3221 000019B2 C605[39200000]02        	mov	byte [faz], 2  ; 2 steps/phase
  3222                                  lff44s_1:
  3223                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  3224                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  3225 000019B9 66AD                    	lodsw
  3226 000019BB 66BA8080                	mov	dx, 8080h
  3227 000019BF 49                      	dec	ecx
  3228 000019C0 7403                    	jz	short lff44s_2_1 
  3229 000019C2 668B16                  	mov	dx, [esi]
  3230                                  lff44s_2_1:	
  3231                                  	; al = [previous_val_l]
  3232                                  	; ah = [previous_val_r]
  3233                                  	; dl = [next_val_l]
  3234                                  	; dh = [next_val_r]	
  3235 000019C5 E8C2010000              	call	interpolating_2_8bit_stereo
  3236 000019CA E3A0                    	jecxz	lff44s_3
  3237                                  lff44s_2_2:
  3238 000019CC AC                      	lodsb
  3239 000019CD 2C80                    	sub	al, 80h
  3240 000019CF 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3241 000019D3 66AB                    	stosw		; (L)
  3242 000019D5 AC                      	lodsb
  3243 000019D6 2C80                    	sub	al, 80h
  3244 000019D8 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3245 000019DC 66AB                    	stosw		; (R)
  3246                                  
  3247 000019DE 49                      	dec	ecx
  3248 000019DF 748B                    	jz	short lff44s_3	
  3249 000019E1 4D                      	dec	ebp
  3250 000019E2 75E8                    	jnz	short lff44s_2_2
  3251                                  	
  3252 000019E4 FE0D[39200000]          	dec	byte [faz]
  3253 000019EA 74C1                    	jz	short lff44s_9 
  3254 000019EC BD0B000000              	mov	ebp, 11
  3255 000019F1 EBC6                    	jmp	short lff44s_1
  3256                                  
  3257                                  load_44khz_mono_16_bit:
  3258                                  	; 18/11/2023
  3259 000019F3 F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3260                                  					; last of the file?
  3261 000019FA 7402                    	jz	short lff44m2_0		; no
  3262 000019FC F9                      	stc
  3263 000019FD C3                      	retn
  3264                                  
  3265                                  lff44m2_0:
  3266 000019FE BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3267                                          ;mov	edx, [loadsize]
  3268                                  
  3269                                  	; esi = buffer address
  3270                                  	;; edx = buffer size
  3271                                  
  3272                                  	; load file into memory
  3273                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00001A03 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00001A09 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00001A0B 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00001A11 B803000000          <1>  mov eax, %1
    86                              <1> 
    87 00001A16 CD40                <1>  int 40h
  3274 00001A18 724D                    	jc	short lff44m2_7 ; error !
  3275                                  
  3276 00001A1A BF[00300000]            	mov	edi, audio_buffer
  3277                                  	
  3278 00001A1F D1E8                    	shr	eax, 1
  3279 00001A21 7505                    	jnz	short lff44m2_8
  3280 00001A23 E992F0FFFF              	jmp	lff44_eof
  3281                                  
  3282                                  lff44m2_8:
  3283 00001A28 89C1                    	mov	ecx, eax	; word count
  3284                                  lff44m2_9:
  3285 00001A2A BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  3286 00001A2F C605[39200000]02        	mov	byte [faz], 2  ; 2 steps/phases
  3287                                  lff44m2_1:
  3288                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  3289                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  3290 00001A36 66AD                    	lodsw
  3291 00001A38 31D2                    	xor	edx, edx
  3292 00001A3A 49                      	dec	ecx
  3293 00001A3B 7403                    	jz	short lff44m2_2_1
  3294 00001A3D 668B16                  	mov	dx, [esi]
  3295                                  lff44m2_2_1:	
  3296                                  	; ax = [previous_val]
  3297                                  	; dx = [next_val]
  3298 00001A40 E80B020000              	call	interpolating_2_16bit_mono
  3299 00001A45 E31B                    	jecxz	lff44m2_3
  3300                                  lff44m2_2_2:
  3301 00001A47 66AD                    	lodsw
  3302 00001A49 66AB                    	stosw		; (L)eft Channel
  3303 00001A4B 66AB                    	stosw		; (R)ight Channel
  3304                                  
  3305 00001A4D 49                      	dec	ecx
  3306 00001A4E 7412                    	jz	short lff44m2_3	
  3307 00001A50 4D                      	dec	ebp
  3308 00001A51 75F4                    	jnz	short lff44m2_2_2
  3309                                  	
  3310 00001A53 FE0D[39200000]          	dec	byte [faz]
  3311 00001A59 74CF                    	jz	short lff44m2_9 
  3312 00001A5B BD0B000000              	mov	ebp, 11
  3313 00001A60 EBD4                    	jmp	short lff44m2_1
  3314                                  
  3315                                  lff44m2_3:
  3316                                  lff44s2_3:
  3317 00001A62 E93FF0FFFF              	jmp	lff44_3	; padfill
  3318                                  		; (put zeros in the remain words of the buffer)
  3319                                  lff44m2_7:
  3320                                  lff44s2_7:
  3321 00001A67 E957F0FFFF              	jmp	lff44_5  ; error
  3322                                  
  3323                                  load_44khz_stereo_16_bit:
  3324                                  	; 18/11/2023
  3325 00001A6C F605[CC220000]01                test    byte [flags], ENDOFFILE	; have we already read the
  3326                                  					; last of the file?
  3327 00001A73 7402                    	jz	short lff44s2_0		; no
  3328 00001A75 F9                      	stc
  3329 00001A76 C3                      	retn
  3330                                  
  3331                                  lff44s2_0:
  3332 00001A77 BE[00300100]            	mov	esi, temp_buffer ; temporary buffer for wav data
  3333                                          ;mov	edx, [loadsize]
  3334                                  
  3335                                  	; esi = buffer address
  3336                                  	;; edx = buffer size
  3337                                  
  3338                                  	; load file into memory
  3339                                  	sys 	_read, [FileHandle], esi, [loadsize]
    72                              <1> 
    73                              <1> 
    74                              <1> 
    75                              <1> 
    76                              <1>  %if %0 >= 2
    77 00001A7C 8B1D[3A200000]      <1>  mov ebx, %2
    78                              <1>  %if %0 >= 3
    79 00001A82 89F1                <1>  mov ecx, %3
    80                              <1>  %if %0 = 4
    81 00001A84 8B15[91030000]      <1>  mov edx, %4
    82                              <1>  %endif
    83                              <1>  %endif
    84                              <1>  %endif
    85 00001A8A B803000000          <1>  mov eax, %1
    86                              <1> 
    87 00001A8F CD40                <1>  int 40h
  3340 00001A91 72D4                    	jc	short lff44s2_7 ; error !
  3341                                  
  3342 00001A93 BF[00300000]            	mov	edi, audio_buffer
  3343                                  	
  3344 00001A98 C1E802                  	shr	eax, 2	; dword (left chan word + right chan word)
  3345 00001A9B 7505                    	jnz	short lff44s2_8
  3346 00001A9D E918F0FFFF              	jmp	lff44_eof
  3347                                  
  3348                                  lff44s2_8:
  3349 00001AA2 89C1                    	mov	ecx, eax	; dword count
  3350                                  lff44s2_9:
  3351 00001AA4 BD0A000000              	mov	ebp, 10 ; interpolation (one step) loop count
  3352 00001AA9 C605[39200000]02        	mov	byte [faz], 2  ; 2 steps/phase
  3353                                  lff44s2_1:
  3354                                  	; 2:1:1:1:1:1:1:1:1:1:1::	; 25/23
  3355                                  	; 2:1:1:1:1:1:1:1:1:1:1:1
  3356 00001AB0 66AD                    	lodsw
  3357 00001AB2 89C3                    	mov	ebx, eax
  3358 00001AB4 66AD                    	lodsw
  3359                                  	;mov	dx, [esi]
  3360                                  	;mov	[next_val_l], dx
  3361                                  	;mov	dx, [esi+2]
  3362                                  	; 26/11/2023
  3363 00001AB6 8B16                    	mov	edx, [esi]
  3364 00001AB8 668915[35200000]        	mov	[next_val_l], dx
  3365 00001ABF C1EA10                  	shr	edx, 16
  3366 00001AC2 49                      	dec	ecx
  3367 00001AC3 7509                    	jnz	short lff44s2_2_1
  3368 00001AC5 31D2                    	xor	edx, edx ; 0
  3369 00001AC7 668915[35200000]        	mov	[next_val_l], dx
  3370                                  lff44s2_2_1:
  3371                                  	; bx = [previous_val_l]
  3372                                  	; ax = [previous_val_r]
  3373                                  	; [next_val_l]
  3374                                  	; dx = [next_val_r]
  3375 00001ACE E895010000              	call	interpolating_2_16bit_stereo
  3376 00001AD3 E38D                    	jecxz	lff44s2_3
  3377                                  lff44s2_2_2:
  3378                                  	;movsw		; (L)eft Channel
  3379                                  	;movsw		; (R)ight Channel
  3380 00001AD5 A5                      	movsd
  3381                                  
  3382 00001AD6 49                      	dec	ecx
  3383 00001AD7 7489                    	jz	short lff44s2_3	
  3384 00001AD9 4D                      	dec	ebp
  3385 00001ADA 75F9                    	jnz	short lff44s2_2_2
  3386                                  	
  3387 00001ADC FE0D[39200000]          	dec	byte [faz]
  3388 00001AE2 74C0                    	jz	short lff44s2_9 
  3389 00001AE4 BD0B000000              	mov	ebp, 11
  3390 00001AE9 EBC5                    	jmp	short lff44s2_1
  3391                                  
  3392                                  ; .....................
  3393                                  
  3394                                  interpolating_3_8bit_mono:
  3395                                  	; 16/11/2023
  3396                                  	; al = [previous_val]
  3397                                  	; dl = [next_val]
  3398                                  	; original-interpolated-interpolated
  3399 00001AEB 88C3                    	mov	bl, al
  3400 00001AED 2C80                    	sub	al, 80h
  3401 00001AEF 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3402 00001AF3 66AB                    	stosw		; original sample (L)
  3403 00001AF5 66AB                    	stosw		; original sample (R)
  3404 00001AF7 88D8                    	mov	al, bl
  3405 00001AF9 00D0                    	add	al, dl	
  3406 00001AFB D0D8                    	rcr	al, 1
  3407 00001AFD 88C7                    	mov	bh, al	; interpolated middle (temporary)
  3408 00001AFF 00D8                    	add	al, bl
  3409 00001B01 D0D8                    	rcr	al, 1
  3410 00001B03 2C80                    	sub	al, 80h
  3411 00001B05 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3412 00001B09 66AB                    	stosw		; interpolated sample 1 (L)
  3413 00001B0B 66AB                    	stosw		; interpolated sample 1 (R)
  3414 00001B0D 88F8                    	mov	al, bh
  3415 00001B0F 00D0                    	add	al, dl	; [next_val]
  3416 00001B11 D0D8                    	rcr	al, 1
  3417 00001B13 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3418 00001B17 66AB                    	stosw		; interpolated sample 2 (L)
  3419 00001B19 66AB                    	stosw		; interpolated sample 2 (R)
  3420 00001B1B C3                      	retn
  3421                                  
  3422                                  interpolating_3_8bit_stereo:
  3423                                  	; 16/11/2023
  3424                                  	; al = [previous_val_l]
  3425                                  	; ah = [previous_val_r]
  3426                                  	; dl = [next_val_l]
  3427                                  	; dh = [next_val_r]	
  3428                                  	; original-interpolated-interpolated
  3429 00001B1C 89C3                    	mov	ebx, eax
  3430 00001B1E 2C80                    	sub	al, 80h
  3431 00001B20 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3432 00001B24 66AB                    	stosw		; original sample (L)
  3433 00001B26 88F8                    	mov	al, bh
  3434 00001B28 2C80                    	sub	al, 80h
  3435 00001B2A 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3436 00001B2E 66AB                    	stosw		; original sample (R)
  3437 00001B30 88D8                    	mov	al, bl
  3438 00001B32 00D0                    	add	al, dl	; [next_val_l]	
  3439 00001B34 D0D8                    	rcr	al, 1
  3440 00001B36 50                      	push	eax ; *	; al = interpolated middle (L) (temporary)
  3441 00001B37 00D8                    	add	al, bl	; [previous_val_l]
  3442 00001B39 D0D8                    	rcr	al, 1
  3443 00001B3B 2C80                    	sub	al, 80h
  3444 00001B3D 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3445 00001B41 66AB                    	stosw		; interpolated sample 1 (L)
  3446 00001B43 88F8                    	mov	al, bh
  3447 00001B45 00F0                    	add	al, dh	; [next_val_r]
  3448 00001B47 D0D8                    	rcr	al, 1
  3449 00001B49 50                      	push	eax ; ** ; al = interpolated middle (R) (temporary)
  3450 00001B4A 00F8                    	add	al, bh	; [previous_val_r]
  3451 00001B4C D0D8                    	rcr	al, 1
  3452 00001B4E 2C80                    	sub	al, 80h
  3453 00001B50 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3454 00001B54 66AB                    	stosw		; interpolated sample 1 (R)
  3455 00001B56 5B                      	pop	ebx ; **
  3456 00001B57 58                      	pop	eax ; *
  3457 00001B58 00D0                    	add	al, dl	; [next_val_l]
  3458 00001B5A D0D8                    	rcr	al, 1
  3459 00001B5C 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3460 00001B60 66AB                    	stosw		; interpolated sample 2 (L)
  3461 00001B62 88D8                    	mov	al, bl
  3462 00001B64 00F0                    	add	al, dh	; [next_val_r]
  3463 00001B66 D0D8                    	rcr	al, 1
  3464 00001B68 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3465 00001B6C 66AB                    	stosw		; interpolated sample 2 (R)
  3466 00001B6E C3                      	retn
  3467                                  
  3468                                  interpolating_2_8bit_mono:
  3469                                  	; 16/11/2023
  3470                                  	; al = [previous_val]
  3471                                  	; dl = [next_val]
  3472                                  	; original-interpolated
  3473 00001B6F 88C3                    	mov	bl, al
  3474 00001B71 2C80                    	sub	al, 80h
  3475 00001B73 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3476 00001B77 66AB                    	stosw		; original sample (L)
  3477 00001B79 66AB                    	stosw		; original sample (R)
  3478 00001B7B 88D8                    	mov	al, bl
  3479 00001B7D 00D0                    	add	al, dl	
  3480 00001B7F D0D8                    	rcr	al, 1
  3481 00001B81 2C80                    	sub	al, 80h
  3482 00001B83 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3483 00001B87 66AB                    	stosw		; interpolated sample (L)
  3484 00001B89 66AB                    	stosw		; interpolated sample (R)
  3485 00001B8B C3                      	retn
  3486                                  
  3487                                  interpolating_2_8bit_stereo:
  3488                                  	; 16/11/2023
  3489                                  	; al = [previous_val_l]
  3490                                  	; ah = [previous_val_r]
  3491                                  	; dl = [next_val_l]
  3492                                  	; dh = [next_val_r]	
  3493                                  	; original-interpolated
  3494 00001B8C 89C3                    	mov	ebx, eax
  3495 00001B8E 2C80                    	sub	al, 80h
  3496 00001B90 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3497 00001B94 66AB                    	stosw		; original sample (L)
  3498 00001B96 88F8                    	mov	al, bh
  3499 00001B98 2C80                    	sub	al, 80h
  3500 00001B9A 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3501 00001B9E 66AB                    	stosw		; original sample (R)
  3502 00001BA0 88D8                    	mov	al, bl	; [previous_val_l]
  3503 00001BA2 00D0                    	add	al, dl	; [next_val_l]	
  3504 00001BA4 D0D8                    	rcr	al, 1
  3505 00001BA6 2C80                    	sub	al, 80h
  3506 00001BA8 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3507 00001BAC 66AB                    	stosw		; interpolated sample (L)
  3508 00001BAE 88F8                    	mov	al, bh
  3509 00001BB0 00F0                    	add	al, dh	; [next_val_r]
  3510 00001BB2 D0D8                    	rcr	al, 1
  3511 00001BB4 2C80                    	sub	al, 80h
  3512 00001BB6 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3513 00001BBA 66AB                    	stosw		; interpolated sample (R)
  3514 00001BBC C3                      	retn
  3515                                  
  3516                                  interpolating_3_16bit_mono:
  3517                                  	; 16/11/2023
  3518                                  	; ax = [previous_val]
  3519                                  	; dx = [next_val]
  3520                                  	; original-interpolated-interpolated
  3521                                  
  3522 00001BBD 66AB                    	stosw		; original sample (L)
  3523 00001BBF 66AB                    	stosw		; original sample (R)
  3524 00001BC1 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  3525 00001BC4 50                      	push	eax ; *	; [previous_val]
  3526 00001BC5 80C680                  	add	dh, 80h
  3527 00001BC8 6601D0                  	add	ax, dx
  3528 00001BCB 66D1D8                  	rcr	ax, 1
  3529 00001BCE 5B                      	pop	ebx ; *		
  3530 00001BCF 93                      	xchg	ebx, eax ; bx  = interpolated middle (temporary)
  3531 00001BD0 6601D8                  	add	ax, bx	; [previous_val] + interpolated middle
  3532 00001BD3 66D1D8                  	rcr	ax, 1
  3533 00001BD6 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3534 00001BD9 66AB                    	stosw 		; interpolated sample 1 (L)
  3535 00001BDB 66AB                    	stosw		; interpolated sample 1 (R)
  3536 00001BDD 89D8                    	mov	eax, ebx
  3537 00001BDF 6601D0                  	add	ax, dx	 ;interpolated middle + [next_val]
  3538 00001BE2 66D1D8                  	rcr	ax, 1
  3539 00001BE5 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3540 00001BE8 66AB                    	stosw		; interpolated sample 2 (L)
  3541 00001BEA 66AB                    	stosw		; interpolated sample 2 (R)
  3542 00001BEC C3                      	retn
  3543                                  
  3544                                  interpolating_3_16bit_stereo:
  3545                                  	; 16/11/2023
  3546                                  	; bx = [previous_val_l]
  3547                                  	; ax = [previous_val_r]
  3548                                  	; [next_val_l]
  3549                                  	; dx = [next_val_r]
  3550                                  	; original-interpolated-interpolated
  3551                                  
  3552 00001BED 93                      	xchg	eax, ebx
  3553 00001BEE 66AB                    	stosw		; original sample (L)
  3554 00001BF0 93                      	xchg	eax, ebx
  3555 00001BF1 66AB                    	stosw		; original sample (R)
  3556 00001BF3 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  3557 00001BF6 50                      	push	eax ; *	; [previous_val_r]
  3558 00001BF7 80C780                  	add	bh, 80h
  3559 00001BFA 8005[36200000]80        	add	byte [next_val_l+1], 80h
  3560 00001C01 66A1[35200000]          	mov	ax, [next_val_l]
  3561 00001C07 6601D8                  	add	ax, bx	; [previous_val_l]
  3562 00001C0A 66D1D8                  	rcr	ax, 1
  3563 00001C0D 93                      	xchg	eax, ebx ; ax = [previous_val_l]	
  3564 00001C0E 6601D8                  	add	ax, bx	; bx = interpolated middle (L)
  3565 00001C11 66D1D8                  	rcr	ax, 1
  3566 00001C14 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3567 00001C17 66AB                    	stosw 		; interpolated sample 1 (L)
  3568 00001C19 58                      	pop	eax  ; *
  3569 00001C1A 80C680                  	add	dh, 80h ; convert sound level 0 to 65535 format
  3570 00001C1D 52                      	push	edx  ; * ; [next_val_r]
  3571 00001C1E 92                      	xchg	eax, edx
  3572 00001C1F 6601D0                  	add	ax, dx	; [next_val_r] + [previous_val_r]
  3573 00001C22 66D1D8                  	rcr	ax, 1	; / 2
  3574 00001C25 50                      	push	eax ; ** ; interpolated middle (R)
  3575 00001C26 6601D0                  	add	ax, dx	; + [previous_val_r]
  3576 00001C29 66D1D8                  	rcr	ax, 1
  3577 00001C2C 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3578 00001C2F 66AB                    	stosw 		; interpolated sample 1 (R)
  3579 00001C31 66A1[35200000]          	mov	ax, [next_val_l]
  3580 00001C37 6601D8                  	add	ax, bx	; + interpolated middle (L)
  3581 00001C3A 66D1D8                  	rcr	ax, 1
  3582 00001C3D 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3583 00001C40 66AB                    	stosw 		; interpolated sample 2 (L)
  3584 00001C42 58                      	pop	eax ; **
  3585 00001C43 5A                      	pop	edx ; *	
  3586 00001C44 6601D0                  	add	ax, dx	; interpolated middle + [next_val_r]
  3587 00001C47 66D1D8                  	rcr	ax, 1	; / 2
  3588 00001C4A 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3589 00001C4D 66AB                    	stosw 		; interpolated sample 2 (L)
  3590 00001C4F C3                      	retn
  3591                                  
  3592                                  interpolating_2_16bit_mono:
  3593                                  	; 16/11/2023
  3594                                  	; ax = [previous_val]
  3595                                  	; dx = [next_val]
  3596                                  	; original-interpolated
  3597                                  
  3598 00001C50 66AB                    	stosw		; original sample (L)
  3599 00001C52 66AB                    	stosw		; original sample (R)
  3600 00001C54 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  3601 00001C57 80C680                  	add	dh, 80h
  3602 00001C5A 6601D0                  	add	ax, dx
  3603 00001C5D 66D1D8                  	rcr	ax, 1
  3604 00001C60 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3605 00001C63 66AB                    	stosw		; interpolated sample (L)
  3606 00001C65 66AB                    	stosw		; interpolated sample (R)
  3607 00001C67 C3                      	retn
  3608                                  
  3609                                  interpolating_2_16bit_stereo:
  3610                                  	; 16/11/2023
  3611                                  	; bx = [previous_val_l]
  3612                                  	; ax = [previous_val_r]
  3613                                  	; [next_val_l]
  3614                                  	; dx = [next_val_r]
  3615                                  	; original-interpolated
  3616                                  
  3617 00001C68 93                      	xchg	eax, ebx
  3618 00001C69 66AB                    	stosw		; original sample (L)
  3619 00001C6B 93                      	xchg	eax, ebx
  3620 00001C6C 66AB                    	stosw		; original sample (R)
  3621 00001C6E 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  3622 00001C71 80C680                  	add	dh, 80h
  3623 00001C74 6601D0                  	add	ax, dx	; [previous_val_r] + [next_val_r]
  3624 00001C77 66D1D8                  	rcr	ax, 1	; / 2
  3625 00001C7A 50                      	push	eax ; *	; interpolated sample (R)
  3626 00001C7B 66A1[35200000]          	mov	ax, [next_val_l]
  3627 00001C81 80C480                  	add	ah, 80h
  3628 00001C84 80C780                  	add	bh, 80h
  3629 00001C87 6601D8                  	add	ax, bx	; [next_val_l] + [previous_val_l]
  3630 00001C8A 66D1D8                  	rcr	ax, 1	; / 2		
  3631 00001C8D 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3632 00001C90 66AB                    	stosw 		; interpolated sample (L)
  3633 00001C92 58                      	pop	eax ; *	
  3634 00001C93 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3635 00001C96 66AB                    	stosw 		; interpolated sample (R)
  3636 00001C98 C3                      	retn
  3637                                  
  3638                                  interpolating_5_8bit_mono:
  3639                                  	; 17/11/2023
  3640                                  	; al = [previous_val]
  3641                                  	; dl = [next_val]
  3642                                  	; original-interpltd-interpltd-interpltd-interpltd
  3643 00001C99 88C3                    	mov	bl, al
  3644 00001C9B 2C80                    	sub	al, 80h
  3645 00001C9D 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3646 00001CA1 66AB                    	stosw		; original sample (L)
  3647 00001CA3 66AB                    	stosw		; original sample (R)
  3648 00001CA5 88D8                    	mov	al, bl
  3649 00001CA7 00D0                    	add	al, dl	
  3650 00001CA9 D0D8                    	rcr	al, 1
  3651 00001CAB 88C7                    	mov	bh, al	; interpolated middle (temporary)
  3652 00001CAD 00D8                    	add	al, bl  ; [previous_val]
  3653 00001CAF D0D8                    	rcr	al, 1 	
  3654 00001CB1 88C6                    	mov	dh, al	; interpolated 1st quarter (temporary)
  3655 00001CB3 00D8                    	add	al, bl
  3656 00001CB5 D0D8                    	rcr	al, 1
  3657 00001CB7 2C80                    	sub	al, 80h
  3658 00001CB9 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3659 00001CBD 66AB                    	stosw		; interpolated sample 1 (L)
  3660 00001CBF 66AB                    	stosw		; interpolated sample 1 (R)
  3661 00001CC1 88F8                    	mov	al, bh
  3662 00001CC3 00F0                    	add	al, dh
  3663 00001CC5 D0D8                    	rcr	al, 1
  3664 00001CC7 2C80                    	sub	al, 80h
  3665 00001CC9 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3666 00001CCD 66AB                    	stosw		; interpolated sample 2 (L)
  3667 00001CCF 66AB                    	stosw		; interpolated sample 2 (R)
  3668 00001CD1 88F8                    	mov	al, bh
  3669 00001CD3 00D0                    	add	al, dl	; [next_val]
  3670 00001CD5 D0D8                    	rcr	al, 1
  3671 00001CD7 88C6                    	mov	dh, al	; interpolated 3rd quarter (temporary)
  3672 00001CD9 00F8                    	add	al, bh
  3673 00001CDB D0D8                    	rcr	al, 1
  3674 00001CDD 2C80                    	sub	al, 80h
  3675 00001CDF 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3676 00001CE3 66AB                    	stosw		; interpolated sample 3 (L)
  3677 00001CE5 66AB                    	stosw		; interpolated sample 3 (R)
  3678 00001CE7 88F0                    	mov	al, dh
  3679 00001CE9 00D0                    	add	al, dl
  3680 00001CEB D0D8                    	rcr	al, 1
  3681 00001CED 2C80                    	sub	al, 80h
  3682 00001CEF 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3683 00001CF3 66AB                    	stosw		; interpolated sample 4 (L)
  3684 00001CF5 66AB                    	stosw		; interpolated sample 4 (R)
  3685 00001CF7 C3                      	retn
  3686                                  
  3687                                  interpolating_5_8bit_stereo:
  3688                                  	; 17/11/2023
  3689                                  	; al = [previous_val_l]
  3690                                  	; ah = [previous_val_r]
  3691                                  	; dl = [next_val_l]
  3692                                  	; dh = [next_val_r]	
  3693                                  	; original-interpltd-interpltd-interpltd-interpltd
  3694 00001CF8 89C3                    	mov	ebx, eax
  3695 00001CFA 2C80                    	sub	al, 80h
  3696 00001CFC 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3697 00001D00 66AB                    	stosw		; original sample (L)
  3698 00001D02 88F8                    	mov	al, bh
  3699 00001D04 2C80                    	sub	al, 80h
  3700 00001D06 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3701 00001D0A 66AB                    	stosw		; original sample (R)
  3702 00001D0C 52                      	push	edx ; *
  3703 00001D0D 88D8                    	mov	al, bl
  3704 00001D0F 00D0                    	add	al, dl	; [next_val_l]
  3705 00001D11 D0D8                    	rcr	al, 1
  3706 00001D13 50                      	push	eax ; **	; al = interpolated middle (L) (temporary)
  3707 00001D14 00D8                    	add	al, bl	; [previous_val_l]
  3708 00001D16 D0D8                    	rcr	al, 1
  3709 00001D18 86C3                    	xchg	al, bl	
  3710 00001D1A 00D8                    	add	al, bl	; bl = interpolated 1st quarter (L) (temp)
  3711 00001D1C D0D8                    	rcr	al, 1
  3712 00001D1E 2C80                    	sub	al, 80h
  3713 00001D20 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3714 00001D24 66AB                    	stosw		; interpolated sample 1 (L)
  3715 00001D26 88F8                    	mov	al, bh
  3716 00001D28 00F0                    	add	al, dh	; [next_val_r]
  3717 00001D2A D0D8                    	rcr	al, 1
  3718 00001D2C 50                      	push	eax ; *** ; al = interpolated middle (R) (temporary)
  3719 00001D2D 00F8                    	add	al, bh	; [previous_val_r]
  3720 00001D2F D0D8                    	rcr	al, 1
  3721 00001D31 86C7                    	xchg	al, bh	
  3722 00001D33 00F8                    	add	al, bh	; bh = interpolated 1st quarter (R) (temp)
  3723 00001D35 D0D8                    	rcr	al, 1
  3724 00001D37 2C80                    	sub	al, 80h
  3725 00001D39 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3726 00001D3D 66AB                    	stosw		; interpolated sample 1 (R)
  3727 00001D3F 5A                      	pop	edx ; ***
  3728 00001D40 58                      	pop	eax ; **	; al = interpolated middle (L) (temporary)
  3729 00001D41 86C3                    	xchg	al, bl	; al = interpolated 1st quarter (L) (temp)
  3730 00001D43 00D8                    	add	al, bl	; bl = interpolated middle (L) (temporary)
  3731 00001D45 D0D8                    	rcr	al, 1
  3732 00001D47 2C80                    	sub	al, 80h
  3733 00001D49 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3734 00001D4D 66AB                    	stosw		; interpolated sample 2 (L)	
  3735 00001D4F 88D0                    	mov	al, dl 	; interpolated middle (R) (temporary)
  3736 00001D51 86C7                    	xchg	al, bh	; al = interpolated 1st quarter (R) (temp)
  3737 00001D53 00F8                    	add	al, bh	; bh = interpolated middle (R) (temporary)
  3738 00001D55 D0D8                    	rcr	al, 1
  3739 00001D57 2C80                    	sub	al, 80h
  3740 00001D59 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3741 00001D5D 66AB                    	stosw		; interpolated sample 2 (R)
  3742 00001D5F 5A                      	pop	edx ; *
  3743 00001D60 88D8                    	mov	al, bl	; interpolated middle (L) (temporary)
  3744 00001D62 00D0                    	add	al, dl	; [next_val_l]
  3745 00001D64 D0D8                    	rcr	al, 1
  3746 00001D66 86C3                    	xchg	al, bl	; al = interpolated middle (R) (temporary)	
  3747 00001D68 00D8                    	add	al, bl	; bl = interpolated 3rd quarter (L) (temp) 
  3748 00001D6A D0D8                    	rcr	al, 1
  3749 00001D6C 2C80                    	sub	al, 80h
  3750 00001D6E 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3751 00001D72 66AB                    	stosw		; interpolated sample 3 (L)
  3752 00001D74 88F8                    	mov	al, bh	
  3753 00001D76 00F0                    	add	al, dh	; interpolated middle (R) + [next_val_r]
  3754 00001D78 D0D8                    	rcr	al, 1
  3755 00001D7A 86C7                    	xchg	al, bh	; al = interpolated middle (R)
  3756 00001D7C 00F8                    	add	al, bh	; bh = interpolated 3rd quarter (R) (temp)
  3757 00001D7E D0D8                    	rcr	al, 1
  3758 00001D80 2C80                    	sub	al, 80h
  3759 00001D82 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3760 00001D86 66AB                    	stosw		; interpolated sample 3 (R)
  3761 00001D88 88D8                    	mov	al, bl
  3762 00001D8A 00D0                    	add	al, dl	; [next_val_l]
  3763 00001D8C D0D8                    	rcr	al, 1
  3764 00001D8E 2C80                    	sub	al, 80h
  3765 00001D90 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3766 00001D94 66AB                    	stosw		; interpolated sample 4 (L)
  3767 00001D96 88F8                    	mov	al, bh
  3768 00001D98 00F0                    	add	al, dh	; [next_val_r]
  3769 00001D9A D0D8                    	rcr	al, 1
  3770 00001D9C 2C80                    	sub	al, 80h
  3771 00001D9E 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3772 00001DA2 66AB                    	stosw		; interpolated sample 4 (R)
  3773 00001DA4 C3                      	retn
  3774                                  
  3775                                  interpolating_4_8bit_mono:
  3776                                  	; 17/11/2023
  3777                                  	; al = [previous_val]
  3778                                  	; dl = [next_val]
  3779                                  	; original-interpolated-interpolated-interpolated
  3780 00001DA5 88C3                    	mov	bl, al
  3781 00001DA7 2C80                    	sub	al, 80h
  3782 00001DA9 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3783 00001DAD 66AB                    	stosw		; original sample (L)
  3784 00001DAF 66AB                    	stosw		; original sample (R)
  3785 00001DB1 88D8                    	mov	al, bl
  3786 00001DB3 00D0                    	add	al, dl	
  3787 00001DB5 D0D8                    	rcr	al, 1
  3788 00001DB7 86C3                    	xchg	al, bl  ; al = [previous_val]
  3789 00001DB9 00D8                    	add	al, bl	; bl = interpolated middle (sample 2)
  3790 00001DBB D0D8                    	rcr	al, 1 	
  3791 00001DBD 2C80                    	sub	al, 80h
  3792 00001DBF 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3793 00001DC3 66AB                    	stosw		; interpolated sample 1 (L)
  3794 00001DC5 66AB                    	stosw		; interpolated sample 1 (R)
  3795 00001DC7 88D8                    	mov	al, bl	; interpolated middle (sample 2)
  3796 00001DC9 2C80                    	sub	al, 80h
  3797 00001DCB 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3798 00001DCF 66AB                    	stosw		; interpolated sample 2 (L)
  3799 00001DD1 66AB                    	stosw		; interpolated sample 2 (R)
  3800 00001DD3 88D8                    	mov	al, bl
  3801 00001DD5 00D0                    	add	al, dl	; [next_val]
  3802 00001DD7 D0D8                    	rcr	al, 1
  3803 00001DD9 2C80                    	sub	al, 80h
  3804 00001DDB 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3805 00001DDF 66AB                    	stosw		; interpolated sample 3 (L)
  3806 00001DE1 66AB                    	stosw		; interpolated sample 3 (R)
  3807 00001DE3 C3                      	retn
  3808                                  
  3809                                  interpolating_4_8bit_stereo:
  3810                                  	; 17/11/2023
  3811                                  	; al = [previous_val_l]
  3812                                  	; ah = [previous_val_r]
  3813                                  	; dl = [next_val_l]
  3814                                  	; dh = [next_val_r]	
  3815                                  	; original-interpolated-interpolated-interpolated
  3816 00001DE4 89C3                    	mov	ebx, eax
  3817 00001DE6 2C80                    	sub	al, 80h
  3818 00001DE8 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3819 00001DEC 66AB                    	stosw		; original sample (L)
  3820 00001DEE 88F8                    	mov	al, bh
  3821 00001DF0 2C80                    	sub	al, 80h
  3822 00001DF2 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3823 00001DF6 66AB                    	stosw		; original sample (R)
  3824 00001DF8 88D8                    	mov	al, bl
  3825 00001DFA 00D0                    	add	al, dl	; [next_val_l]
  3826 00001DFC D0D8                    	rcr	al, 1
  3827 00001DFE 86C3                    	xchg	al, bl	; al = [previous_val_l]
  3828 00001E00 00D8                    	add	al, bl	; bl = interpolated middle (L) (sample 2)
  3829 00001E02 D0D8                    	rcr	al, 1
  3830 00001E04 2C80                    	sub	al, 80h
  3831 00001E06 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3832 00001E0A 66AB                    	stosw		; interpolated sample 1 (L)
  3833 00001E0C 88F8                    	mov	al, bh
  3834 00001E0E 00F0                    	add	al, dh	; [next_val_r]
  3835 00001E10 D0D8                    	rcr	al, 1
  3836 00001E12 86C7                    	xchg	al, bh	; al = [previous_val_h]
  3837 00001E14 00F8                    	add	al, bh	; bh = interpolated middle (R) (sample 2)
  3838 00001E16 D0D8                    	rcr	al, 1
  3839 00001E18 2C80                    	sub	al, 80h
  3840 00001E1A 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3841 00001E1E 66AB                    	stosw		; interpolated sample 1 (R)
  3842 00001E20 88D8                    	mov	al, bl	; interpolated middle (L) (sample 2)
  3843 00001E22 2C80                    	sub	al, 80h
  3844 00001E24 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3845 00001E28 66AB                    	stosw		; interpolated sample 2 (L)
  3846 00001E2A 88F8                    	mov	al, bh	; interpolated middle (L) (sample 2)
  3847 00001E2C 2C80                    	sub	al, 80h
  3848 00001E2E 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3849 00001E32 66AB                    	stosw		; interpolated sample 2 (L)
  3850 00001E34 88D8                    	mov	al, bl
  3851 00001E36 00D0                    	add	al, dl	; [next_val_l]
  3852 00001E38 D0D8                    	rcr	al, 1
  3853 00001E3A 2C80                    	sub	al, 80h
  3854 00001E3C 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3855 00001E40 66AB                    	stosw		; interpolated sample 3 (L)
  3856 00001E42 88F8                    	mov	al, bh
  3857 00001E44 00F0                    	add	al, dh	; [next_val_r]
  3858 00001E46 D0D8                    	rcr	al, 1
  3859 00001E48 2C80                    	sub	al, 80h
  3860 00001E4A 66C1E008                	shl	ax, 8	; convert 8 bit sample to 16 bit sample
  3861 00001E4E 66AB                    	stosw		; interpolated sample 3 (R)
  3862 00001E50 C3                      	retn
  3863                                  
  3864                                  interpolating_5_16bit_mono:
  3865                                  	; 18/11/2023
  3866                                  	; ax = [previous_val]
  3867                                  	; dx = [next_val]
  3868                                  	; original-interpltd-interpltd-interpltd-interpltd
  3869 00001E51 66AB                    	stosw		; original sample (L)
  3870 00001E53 66AB                    	stosw		; original sample (R)
  3871 00001E55 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  3872 00001E58 89C3                    	mov	ebx, eax ; [previous_val]
  3873 00001E5A 80C680                  	add	dh, 80h
  3874 00001E5D 6601D0                  	add	ax, dx
  3875 00001E60 66D1D8                  	rcr	ax, 1
  3876 00001E63 50                      	push	eax ; *	; interpolated middle (temporary)
  3877 00001E64 6601D8                  	add	ax, bx	; interpolated middle + [previous_val] 
  3878 00001E67 66D1D8                  	rcr	ax, 1
  3879 00001E6A 50                      	push	eax ; **	; interpolated 1st quarter (temporary)
  3880 00001E6B 6601D8                  	add	ax, bx	; 1st quarter + [previous_val]
  3881 00001E6E 66D1D8                  	rcr	ax, 1	
  3882 00001E71 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3883 00001E74 66AB                    	stosw 		; interpolated sample 1 (L)
  3884 00001E76 66AB                    	stosw		; interpolated sample 1 (R)
  3885 00001E78 58                      	pop	eax ; **	
  3886 00001E79 5B                      	pop	ebx ; *
  3887 00001E7A 6601D8                  	add	ax, bx	; 1st quarter + middle
  3888 00001E7D 66D1D8                  	rcr	ax, 1	; / 2
  3889 00001E80 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again	
  3890 00001E83 66AB                    	stosw		; interpolated sample 2 (L)
  3891 00001E85 66AB                    	stosw		; interpolated sample 2 (R)		
  3892 00001E87 89D8                    	mov	eax, ebx
  3893 00001E89 6601D0                  	add	ax, dx	; interpolated middle + [next_val]
  3894 00001E8C 66D1D8                  	rcr	ax, 1
  3895 00001E8F 50                      	push	eax ; *	; interpolated 3rd quarter (temporary)
  3896 00001E90 6601D8                  	add	ax, bx	; + interpolated middle
  3897 00001E93 66D1D8                  	rcr	ax, 1
  3898 00001E96 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3899 00001E99 66AB                    	stosw		; interpolated sample 3 (L)
  3900 00001E9B 66AB                    	stosw		; interpolated sample 3 (R)
  3901 00001E9D 58                      	pop	eax ; *	
  3902 00001E9E 6601D0                  	add	ax, dx	; 3rd quarter + [next_val]
  3903 00001EA1 66D1D8                  	rcr	ax, 1	; / 2
  3904 00001EA4 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3905 00001EA7 66AB                    	stosw		; interpolated sample 4 (L)
  3906 00001EA9 66AB                    	stosw		; interpolated sample 4 (R)
  3907 00001EAB C3                      	retn
  3908                                  
  3909                                  interpolating_5_16bit_stereo:
  3910                                  	; 18/11/2023
  3911                                  	; bx = [previous_val_l]
  3912                                  	; ax = [previous_val_r]
  3913                                  	; [next_val_l]
  3914                                  	; [next_val_r]
  3915                                  	; original-interpltd-interpltd-interpltd-interpltd
  3916 00001EAC 51                      	push	ecx ; !
  3917 00001EAD 93                      	xchg	eax, ebx
  3918 00001EAE 66AB                    	stosw		; original sample (L)
  3919 00001EB0 93                      	xchg	eax, ebx
  3920 00001EB1 66AB                    	stosw		; original sample (R)
  3921 00001EB3 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  3922 00001EB6 50                      	push	eax ; *	; [previous_val_r]
  3923 00001EB7 80C780                  	add	bh, 80h
  3924 00001EBA 8005[36200000]80        	add	byte [next_val_l+1], 80h
  3925 00001EC1 66A1[35200000]          	mov	ax, [next_val_l]
  3926 00001EC7 6601D8                  	add	ax, bx	; [previous_val_l]
  3927 00001ECA 66D1D8                  	rcr	ax, 1
  3928 00001ECD 89C1                    	mov	ecx, eax ; interpolated middle (L)
  3929 00001ECF 6601D8                  	add	ax, bx	
  3930 00001ED2 66D1D8                  	rcr	ax, 1
  3931 00001ED5 89C2                    	mov	edx, eax ; interpolated 1st quarter (L)	
  3932 00001ED7 6601D8                  	add	ax, bx	; [previous_val_l]
  3933 00001EDA 66D1D8                  	rcr	ax, 1
  3934 00001EDD 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3935 00001EE0 66AB                    	stosw 		; interpolated sample 1 (L)
  3936 00001EE2 89C8                    	mov	eax, ecx
  3937 00001EE4 6601D0                  	add	ax, dx	; middle (L) + 1st quarter (L) 
  3938 00001EE7 66D1D8                  	rcr	ax, 1	; / 2
  3939 00001EEA 89C3                    	mov	ebx, eax  ; interpolated sample 2 (L)
  3940 00001EEC 5A                      	pop	edx ; *	; [previous_val_r]
  3941 00001EED 89D0                    	mov	eax, edx
  3942 00001EEF 8005[38200000]80        	add	byte [next_val_r+1], 80h
  3943 00001EF6 660305[37200000]        	add	ax, [next_val_r]
  3944 00001EFD 66D1D8                  	rcr	ax, 1
  3945 00001F00 50                      	push	eax ; *	; interpolated middle (R)
  3946 00001F01 6601D0                  	add	ax, dx
  3947 00001F04 66D1D8                  	rcr	ax, 1
  3948 00001F07 50                      	push	eax ; ** ; interpolated 1st quarter (R)
  3949 00001F08 6601D0                  	add	ax, dx	; [previous_val_r]
  3950 00001F0B 66D1D8                  	rcr	ax, 1
  3951 00001F0E 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3952 00001F11 66AB                    	stosw 		; interpolated sample 1 (R)
  3953 00001F13 89D8                    	mov	eax, ebx
  3954 00001F15 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3955 00001F18 66AB                    	stosw 		; interpolated sample 2 (L)
  3956 00001F1A 58                      	pop	eax ; **
  3957 00001F1B 5A                      	pop	edx ; *
  3958 00001F1C 6601D0                  	add	ax, dx	; 1st quarter (R) + middle (R)
  3959 00001F1F 66D1D8                  	rcr	ax, 1	; / 2
  3960 00001F22 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3961 00001F25 66AB                    	stosw 		; interpolated sample 2 (R)
  3962 00001F27 89C8                    	mov	eax, ecx
  3963 00001F29 660305[35200000]        	add	ax, [next_val_l]
  3964 00001F30 66D1D8                  	rcr	ax, 1
  3965 00001F33 50                      	push	eax ; * ; interpolated 3rd quarter (L)
  3966 00001F34 6601C8                  	add	ax, cx	; interpolated middle (L)
  3967 00001F37 66D1D8                  	rcr	ax, 1
  3968 00001F3A 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3969 00001F3D 66AB                    	stosw 		; interpolated sample 3 (L)
  3970 00001F3F 89D0                    	mov	eax, edx
  3971 00001F41 660305[37200000]        	add	ax, [next_val_r]
  3972 00001F48 66D1D8                  	rcr	ax, 1
  3973 00001F4B 50                      	push	eax ; ** ; interpolated 3rd quarter (R)
  3974 00001F4C 6601D0                  	add	ax, dx	; interpolated middle (R)
  3975 00001F4F 66D1D8                  	rcr	ax, 1
  3976 00001F52 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3977 00001F55 66AB                    	stosw 		; interpolated sample 3 (R)
  3978 00001F57 5B                      	pop	ebx ; **
  3979 00001F58 58                      	pop	eax ; *
  3980 00001F59 660305[35200000]        	add	ax, [next_val_l]
  3981 00001F60 66D1D8                  	rcr	ax, 1
  3982 00001F63 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3983 00001F66 66AB                    	stosw 		; interpolated sample 4 (L)
  3984 00001F68 89D8                    	mov	eax, ebx	
  3985 00001F6A 660305[37200000]        	add	ax, [next_val_r]
  3986 00001F71 66D1D8                  	rcr	ax, 1
  3987 00001F74 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  3988 00001F77 66AB                    	stosw 		; interpolated sample 4 (R)
  3989 00001F79 59                      	pop	ecx ; !
  3990 00001F7A C3                      	retn
  3991                                  
  3992                                  interpolating_4_16bit_mono:
  3993                                  	; 18/11/2023
  3994                                  	; ax = [previous_val]
  3995                                  	; dx = [next_val]
  3996                                  	; original-interpolated
  3997                                  
  3998 00001F7B 66AB                    	stosw		; original sample (L)
  3999 00001F7D 66AB                    	stosw		; original sample (R)
  4000 00001F7F 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  4001 00001F82 89C3                    	mov	ebx, eax ; [previous_val]
  4002 00001F84 80C680                  	add	dh, 80h
  4003 00001F87 6601D0                  	add	ax, dx	; [previous_val] + [next_val]
  4004 00001F8A 66D1D8                  	rcr	ax, 1
  4005 00001F8D 93                      	xchg	eax, ebx	
  4006 00001F8E 6601D8                  	add	ax, bx	; [previous_val] + interpolated middle
  4007 00001F91 66D1D8                  	rcr	ax, 1
  4008 00001F94 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4009 00001F97 66AB                    	stosw 		; interpolated sample 1 (L)
  4010 00001F99 66AB                    	stosw		; interpolated sample 1 (R)
  4011 00001F9B 89D8                    	mov	eax, ebx ; interpolated middle
  4012 00001F9D 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4013 00001FA0 66AB                    	stosw 		; interpolated sample 2 (L)
  4014 00001FA2 66AB                    	stosw		; interpolated sample 2 (R)
  4015 00001FA4 89D8                    	mov	eax, ebx
  4016 00001FA6 6601D0                  	add	ax, dx	; interpolated middle + [next_val]
  4017 00001FA9 66D1D8                  	rcr	ax, 1
  4018 00001FAC 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4019 00001FAF 66AB                    	stosw		; interpolated sample 3 (L)
  4020 00001FB1 66AB                    	stosw		; interpolated sample 3 (R)
  4021 00001FB3 C3                      	retn
  4022                                  
  4023                                  interpolating_4_16bit_stereo:
  4024                                  	; 18/11/2023
  4025                                  	; bx = [previous_val_l]
  4026                                  	; ax = [previous_val_r]
  4027                                  	; [next_val_l]
  4028                                  	; [next_val_r]
  4029                                  	; original-interpolated-interpolated-interpolated
  4030 00001FB4 93                      	xchg	eax, ebx
  4031 00001FB5 66AB                    	stosw		; original sample (L)
  4032 00001FB7 93                      	xchg	eax, ebx
  4033 00001FB8 66AB                    	stosw		; original sample (R)
  4034 00001FBA 80C480                  	add	ah, 80h ; convert sound level 0 to 65535 format
  4035 00001FBD 89C2                    	mov	edx, eax ; [previous_val_r]
  4036 00001FBF 80C780                  	add	bh, 80h
  4037 00001FC2 8005[36200000]80        	add	byte [next_val_l+1], 80h
  4038 00001FC9 66A1[35200000]          	mov	ax, [next_val_l]
  4039 00001FCF 6601D8                  	add	ax, bx	; [previous_val_l]
  4040 00001FD2 66D1D8                  	rcr	ax, 1
  4041 00001FD5 93                      	xchg	eax, ebx	
  4042 00001FD6 6601D8                  	add	ax, bx	; bx = interpolated middle (L)
  4043 00001FD9 66D1D8                  	rcr	ax, 1
  4044 00001FDC 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4045 00001FDF 66AB                    	stosw 		; interpolated sample 1 (L)
  4046 00001FE1 8005[38200000]80        	add	byte [next_val_r+1], 80h
  4047 00001FE8 89D0                    	mov	eax, edx ; [previous_val_r]
  4048 00001FEA 660305[37200000]        	add	ax, [next_val_r]
  4049 00001FF1 66D1D8                  	rcr	ax, 1
  4050 00001FF4 92                      	xchg	eax, edx	
  4051 00001FF5 6601D0                  	add	ax, dx	; dx = interpolated middle (R)
  4052 00001FF8 66D1D8                  	rcr	ax, 1
  4053 00001FFB 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4054 00001FFE 66AB                    	stosw 		; interpolated sample 1 (R)
  4055 00002000 89D8                    	mov	eax, ebx
  4056 00002002 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4057 00002005 66AB                    	stosw 		; interpolated sample 2 (L)
  4058 00002007 89D0                    	mov	eax, edx
  4059 00002009 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4060 0000200C 66AB                    	stosw 		; interpolated sample 2 (R)
  4061 0000200E 89D8                    	mov	eax, ebx
  4062 00002010 660305[35200000]        	add	ax, [next_val_l]
  4063 00002017 66D1D8                  	rcr	ax, 1
  4064 0000201A 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4065 0000201D 66AB                    	stosw 		; interpolated sample 3 (L)
  4066 0000201F 89D0                    	mov	eax, edx
  4067 00002021 660305[37200000]        	add	ax, [next_val_r]
  4068 00002028 66D1D8                  	rcr	ax, 1
  4069 0000202B 80EC80                  	sub	ah, 80h	; -32768 to +32767 format again
  4070 0000202E 66AB                    	stosw 		; interpolated sample 3 (R)
  4071 00002030 C3                      	retn
  4072                                  
  4073                                  ; 13/11/2023
  4074                                  previous_val:
  4075 00002031 0000                    previous_val_l: dw 0
  4076 00002033 0000                    previous_val_r: dw 0
  4077                                  next_val:
  4078 00002035 0000                    next_val_l: dw 0
  4079 00002037 0000                    next_val_r: dw 0
  4080                                  
  4081                                  ; 16/11/2023
  4082 00002039 00                      faz:	db 0	
  4083                                  	
  4084                                  ; --------------------------------------------------------
  4085                                  
  4086                                  ; DATA
  4087                                  
  4088                                  FileHandle:	
  4089 0000203A FFFFFFFF                	dd	-1
  4090                                  
  4091                                  Credits:
  4092 0000203E 54696E792057415620-     	db	'Tiny WAV Player for TRDOS 386 by Erdogan Tan. '
  4092 00002047 506C6179657220666F-
  4092 00002050 72205452444F532033-
  4092 00002059 383620627920457264-
  4092 00002062 6F67616E2054616E2E-
  4092 0000206B 20                 
  4093                                  	;db	'August 2020.',10,13,0
  4094 0000206C 4E6F76656D62657220-     	db	'November 2023.',10,13,0
  4094 00002075 323032332E0A0D00   
  4095 0000207D 31372F30362F323031-     	db	'17/06/2017', 10,13,0
  4095 00002086 370A0D00           
  4096 0000208A 31382F30382F323032-     	db	'18/08/2020', 10,13,0
  4096 00002093 300A0D00           
  4097 00002097 32372F31312F323032-     	db	'27/11/2023', 10,13,0
  4097 000020A0 330A0D00           
  4098                                  
  4099                                  msgAudioCardInfo:
  4100 000020A4 666F7220496E74656C-     	db 	'for Intel AC97 (ICH) Audio Controller.', 10,13,0
  4100 000020AD 204143393720284943-
  4100 000020B6 482920417564696F20-
  4100 000020BF 436F6E74726F6C6C65-
  4100 000020C8 722E0A0D00         
  4101                                  
  4102                                  msg_usage:
  4103 000020CD 75736167653A20706C-     	db	'usage: playwav6 filename.wav',10,13,0
  4103 000020D6 617977617636206669-
  4103 000020DF 6C656E616D652E7761-
  4103 000020E8 760A0D00           
  4104                                  
  4105                                  noDevMsg:
  4106 000020EC 4572726F723A20556E-     	db	'Error: Unable to find AC97 audio device!'
  4106 000020F5 61626C6520746F2066-
  4106 000020FE 696E64204143393720-
  4106 00002107 617564696F20646576-
  4106 00002110 69636521           
  4107 00002114 0A0D00                  	db	10,13,0
  4108                                  
  4109                                  noFileErrMsg:
  4110 00002117 4572726F723A206669-     	db	'Error: file not found.',10,13,0
  4110 00002120 6C65206E6F7420666F-
  4110 00002129 756E642E0A0D00     
  4111                                  
  4112                                  trdos386_err_msg:
  4113 00002130 5452444F5320333836-     	db	'TRDOS 386 System call error !',10,13,0
  4113 00002139 2053797374656D2063-
  4113 00002142 616C6C206572726F72-
  4113 0000214B 20210A0D00         
  4114                                  
  4115                                  ; 25/11/2023
  4116                                  msg_no_vra:
  4117 00002150 0A0D                    	db	10,13
  4118 00002152 4E6F20565241207375-     	db	"No VRA support ! Only 48 kHZ sample rate supported !"
  4118 0000215B 70706F72742021204F-
  4118 00002164 6E6C79203438206B48-
  4118 0000216D 5A2073616D706C6520-
  4118 00002176 726174652073757070-
  4118 0000217F 6F727465642021     
  4119 00002186 0A0D00                  	db	10,13,0
  4120                                  
  4121 00002189 0D0A5741562046696C-     msgWavFileName:	db 0Dh, 0Ah, "WAV File Name: ",0
  4121 00002192 65204E616D653A2000 
  4122 0000219B 0D0A53616D706C6520-     msgSampleRate:	db 0Dh, 0Ah, "Sample Rate: "
  4122 000021A4 526174653A20       
  4123 000021AA 303030303020487A2C-     msgHertz:	db "00000 Hz, ", 0 
  4123 000021B3 2000               
  4124 000021B5 3820626974732C2000      msg8Bits:	db "8 bits, ", 0 
  4125 000021BE 4D6F6E6F0D0A00          msgMono:	db "Mono", 0Dh, 0Ah, 0
  4126 000021C5 313620626974732C20-     msg16Bits:	db "16 bits, ", 0 
  4126 000021CE 00                 
  4127 000021CF 53746572656F            msgStereo:	db "Stereo"
  4128 000021D5 0D0A00                  nextline:	db 0Dh, 0Ah, 0
  4129                                  
  4130                                  ; 03/06/2017
  4131 000021D8 303132333435363738-     hex_chars	db "0123456789ABCDEF", 0
  4131 000021E1 3941424344454600   
  4132 000021E9 0D0A                    msgAC97Info	db 0Dh, 0Ah
  4133 000021EB 414339372041756469-     		db "AC97 Audio Controller & Codec Info", 0Dh, 0Ah 
  4133 000021F4 6F20436F6E74726F6C-
  4133 000021FD 6C6572202620436F64-
  4133 00002206 656320496E666F0D0A 
  4134 0000220F 56656E646F72204944-     		db "Vendor ID: "
  4134 00002218 3A20               
  4135 0000221A 303030306820446576-     msgVendorId	db "0000h Device ID: "
  4135 00002223 6963652049443A20   
  4136 0000222B 30303030680D0A          msgDevId	db "0000h", 0Dh, 0Ah
  4137 00002232 4275733A20              		db "Bus: "
  4138 00002237 303068204465766963-     msgBusNo	db "00h Device: "
  4138 00002240 653A20             
  4139 00002243 3030682046756E6374-     msgDevNo	db "00h Function: "
  4139 0000224C 696F6E3A20         
  4140 00002251 303068                  msgFncNo	db "00h"
  4141 00002254 0D0A                    		db 0Dh, 0Ah
  4142 00002256 4E414D4241523A20        		db "NAMBAR: "
  4143 0000225E 30303030682020          msgNamBar	db "0000h  "
  4144 00002265 4E41424D4241523A20      		db "NABMBAR: "
  4145 0000226E 303030306820204952-     msgNabmBar	db "0000h  IRQ: "
  4145 00002277 513A20             
  4146 0000227A 3030                    msgIRQ		dw 3030h
  4147 0000227C 0D0A00                  		db 0Dh, 0Ah, 0
  4148                                  ; 25/11/2023
  4149 0000227F 56524120737570706F-     msgVRAheader:	db "VRA support: "
  4149 00002288 72743A20           
  4150 0000228C 00                      		db 0	
  4151 0000228D 5945530D0A00            msgVRAyes:	db "YES", 0Dh, 0Ah, 0
  4152 00002293 4E4F200D0A              msgVRAno:	db "NO ", 0Dh, 0Ah
  4153 00002298 28496E746572706F6C-     		db "(Interpolated sample rate playing method)"
  4153 000022A1 617465642073616D70-
  4153 000022AA 6C6520726174652070-
  4153 000022B3 6C6179696E67206D65-
  4153 000022BC 74686F6429         
  4154 000022C1 0D0A00                  		db 0Dh, 0Ah, 0	
  4155                                  EOF: 
  4156                                  
  4157                                  ; BSS
  4158                                  
  4159                                  bss_start:
  4160                                  
  4161                                  ABSOLUTE bss_start
  4162                                  
  4163                                  alignb 4
  4164                                  
  4165 000022C4 ??                      stmo:		resb 1 ; stereo or mono (1=stereo) 
  4166 000022C5 ??                      bps:		resb 1 ; bits per sample (8,16)
  4167 000022C6 ????                    sample_rate:	resw 1 ; Sample Frequency (Hz)
  4168                                  
  4169                                  ; 25/11/2023
  4170 000022C8 ????????                bufferSize:	resd 1
  4171                                  
  4172 000022CC ??                      flags:		resb 1
  4173                                  ;cbs_busy:	resb 1 
  4174 000022CD ??                      half_buff:	resb 1
  4175 000022CE ??                      srb:		resb 1
  4176                                  ; 18/08/2020
  4177 000022CF ??                      volume_level:	resb 1
  4178                                  ; 25/11/2023
  4179 000022D0 ??                      VRA:		resb 1	; Variable Rate Audio Support Status
  4180                                  
  4181 000022D1 <res 1Ch>               smpRBuff:	resw 14 
  4182                                  
  4183                                  wav_file_name:
  4184 000022ED <res 50h>               		resb 80 ; wave file, path name (<= 80 bytes)
  4185                                  
  4186 0000233D ????                    		resw 1
  4187 0000233F ??                      ac97_int_ln_reg: resb 1
  4188 00002340 ??                      fbs_shift:	resb 1 ; 26/11/2023
  4189 00002341 ????????                dev_vendor:	resd 1
  4190 00002345 ????????                bus_dev_fn:	resd 1
  4191 00002349 ????                    ac97_NamBar:	resw 1
  4192 0000234B ????                    ac97_NabmBar:	resw 1
  4193                                  
  4194                                  bss_end:
  4195 0000234D <res CB3h>              alignb 4096
  4196                                  ;audio_buffer:	resb BUFFERSIZE ; DMA Buffer Size / 2 (32768)
  4197                                  ; 26/11/2023
  4198 00003000 <res 10000h>            audio_buffer:	resb 65536
  4199                                  ; 13/06/2017
  4200                                  ;temp_buffer:	resb BUFFERSIZE
  4201                                  ; 26/11/2023
  4202 00013000 <res 10000h>            temp_buffer:	resb 65536
